2026-04-15T09:00:07.294 [DEBUG] [Thread-16141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:00:11.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:00:11.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:00:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:00:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 8, 59, 41), 0.25469, 98.2417, 0.0, 22.1947, 9.09103, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:00:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 08:59:41
2026-04-15T09:00:13.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:00:13.904 [DEBUG] [Thread-16142] [transport.py] [_log()] starting thread (client mode): 0xf1364d60
2026-04-15T09:00:13.905 [DEBUG] [Thread-16142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:00:13.923 [DEBUG] [Thread-16142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:00:13.923 [INFO] [Thread-16142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:00:13.926 [DEBUG] [Thread-16142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:00:13.926 [DEBUG] [Thread-16142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:00:13.926 [DEBUG] [Thread-16142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:00:13.926 [DEBUG] [Thread-16142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:00:13.927 [DEBUG] [Thread-16142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:00:13.927 [DEBUG] [Thread-16142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:00:13.927 [DEBUG] [Thread-16142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:00:13.927 [DEBUG] [Thread-16142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:00:13.927 [DEBUG] [Thread-16142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:00:13.927 [DEBUG] [Thread-16142] [transport.py] [_log()] client lang: <none>
2026-04-15T09:00:13.927 [DEBUG] [Thread-16142] [transport.py] [_log()] server lang: <none>
2026-04-15T09:00:13.927 [DEBUG] [Thread-16142] [transport.py] [_log()] kex follows: False
2026-04-15T09:00:13.927 [DEBUG] [Thread-16142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:00:13.927 [DEBUG] [Thread-16142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:00:13.927 [DEBUG] [Thread-16142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:00:13.928 [DEBUG] [Thread-16142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:00:13.928 [DEBUG] [Thread-16142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:00:13.928 [DEBUG] [Thread-16142] [transport.py] [_log()] Compression: none
2026-04-15T09:00:13.928 [DEBUG] [Thread-16142] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:00:13.944 [DEBUG] [Thread-16142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:00:13.944 [DEBUG] [Thread-16142] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:00:13.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:00:13.945 [DEBUG] [Thread-16142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:00:13.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:00:13.946 [DEBUG] [Thread-16142] [transport.py] [_log()] userauth is OK
2026-04-15T09:00:13.946 [DEBUG] [Thread-16142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:00:13.946 [DEBUG] [Thread-16142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:00:13.946 [DEBUG] [Thread-16142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:00:13.946 [DEBUG] [Thread-16142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:00:13.970 [INFO] [Thread-16142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:00:13.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:00:14.605 [DEBUG] [Thread-16142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:00:14.605 [DEBUG] [Thread-16142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:00:14.606 [DEBUG] [Thread-16142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:00:14.646 [DEBUG] [Thread-16142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:00:14.646 [DEBUG] [Thread-16142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:00:14.649 [DEBUG] [Thread-16142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:00:14.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:00:14.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:00:14.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:00:14.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:00:14.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:00:14.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:00:14.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:00:14.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:00:14.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:00:14.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.291451 -999.00   +8.40  16.27     96   +7.90 1 3 1 3 1   887    0 0.36 -4.90 ----- 16.3 16.3 302.0 19.6 11.4 -2.4 11.1 -2.1 10.5 -1.9 10.9 -1.2
2026-04-15T09:00:14.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:00:14.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:00:14.671 [DEBUG] [Thread-16142] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:00:14.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.291451
2026-04-15T09:00:14.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:00:14.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:00:14.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:00:14.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:00:14.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:00:14.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T08:59:41', tmtdew=0.25469, humidity=98.2417, cloud=0.0, wind=22.1947, temperature=9.09103, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T06:59:41.366', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:00:14.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:00:14.927 [DEBUG] [Thread-16145] [transport.py] [_log()] starting thread (client mode): 0xf13cb640
2026-04-15T09:00:14.927 [DEBUG] [Thread-16145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:00:14.941 [DEBUG] [Thread-16145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:00:14.941 [INFO] [Thread-16145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:00:14.948 [DEBUG] [Thread-16145] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:00:14.948 [DEBUG] [Thread-16145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:00:14.948 [DEBUG] [Thread-16145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:00:14.948 [DEBUG] [Thread-16145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:00:14.949 [DEBUG] [Thread-16145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:00:14.949 [DEBUG] [Thread-16145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:00:14.949 [DEBUG] [Thread-16145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:00:14.949 [DEBUG] [Thread-16145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:00:14.949 [DEBUG] [Thread-16145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:00:14.949 [DEBUG] [Thread-16145] [transport.py] [_log()] client lang: <none>
2026-04-15T09:00:14.949 [DEBUG] [Thread-16145] [transport.py] [_log()] server lang: <none>
2026-04-15T09:00:14.949 [DEBUG] [Thread-16145] [transport.py] [_log()] kex follows: False
2026-04-15T09:00:14.949 [DEBUG] [Thread-16145] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:00:14.949 [DEBUG] [Thread-16145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:00:14.949 [DEBUG] [Thread-16145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:00:14.950 [DEBUG] [Thread-16145] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:00:14.950 [DEBUG] [Thread-16145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:00:14.950 [DEBUG] [Thread-16145] [transport.py] [_log()] Compression: none
2026-04-15T09:00:14.950 [DEBUG] [Thread-16145] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:00:15.004 [DEBUG] [Thread-16145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:00:15.004 [DEBUG] [Thread-16145] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:00:15.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:00:15.005 [DEBUG] [Thread-16145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:00:15.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:00:15.061 [DEBUG] [Thread-16145] [transport.py] [_log()] userauth is OK
2026-04-15T09:00:15.061 [DEBUG] [Thread-16145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:00:15.061 [DEBUG] [Thread-16145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:00:15.061 [DEBUG] [Thread-16145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:00:15.061 [DEBUG] [Thread-16145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:00:15.080 [INFO] [Thread-16145] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:00:15.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:00:15.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:00:15.871 [DEBUG] [Thread-16145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:00:15.871 [DEBUG] [Thread-16145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:00:15.920 [DEBUG] [Thread-16145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:00:15.920 [DEBUG] [Thread-16145] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:00:15.929 [DEBUG] [Thread-16145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:00:15.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:00:15.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')
2026-04-15T09:00:15.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
2026-04-15T09:00:15.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:00:15.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:00:15.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:00:15.967 [DEBUG] [Thread-16145] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:00:17.026 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:00:17.027 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:00:22.324 [DEBUG] [Thread-16147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:00:37.370 [DEBUG] [Thread-16148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:00:45.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:00:45.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:00:45.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
2026-04-15T09:00:47.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 0, 16), 0.17495, 98.6375, 0.0, 16.2151, 8.74505, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:00:47.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:00:16
2026-04-15T09:00:47.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:00:48.196 [DEBUG] [Thread-16149] [transport.py] [_log()] starting thread (client mode): 0xee9073d0
2026-04-15T09:00:48.196 [DEBUG] [Thread-16149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:00:48.209 [DEBUG] [Thread-16149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:00:48.209 [INFO] [Thread-16149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:00:48.210 [DEBUG] [Thread-16149] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:00:48.211 [DEBUG] [Thread-16149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:00:48.211 [DEBUG] [Thread-16149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:00:48.211 [DEBUG] [Thread-16149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:00:48.211 [DEBUG] [Thread-16149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:00:48.211 [DEBUG] [Thread-16149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:00:48.211 [DEBUG] [Thread-16149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:00:48.211 [DEBUG] [Thread-16149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:00:48.211 [DEBUG] [Thread-16149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:00:48.211 [DEBUG] [Thread-16149] [transport.py] [_log()] client lang: <none>
2026-04-15T09:00:48.211 [DEBUG] [Thread-16149] [transport.py] [_log()] server lang: <none>
2026-04-15T09:00:48.211 [DEBUG] [Thread-16149] [transport.py] [_log()] kex follows: False
2026-04-15T09:00:48.211 [DEBUG] [Thread-16149] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:00:48.212 [DEBUG] [Thread-16149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:00:48.212 [DEBUG] [Thread-16149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:00:48.212 [DEBUG] [Thread-16149] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:00:48.212 [DEBUG] [Thread-16149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:00:48.212 [DEBUG] [Thread-16149] [transport.py] [_log()] Compression: none
2026-04-15T09:00:48.212 [DEBUG] [Thread-16149] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:00:48.220 [DEBUG] [Thread-16149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:00:48.220 [DEBUG] [Thread-16149] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:00:48.221 [DEBUG] [Thread-16149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:00:48.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:00:48.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:00:48.222 [DEBUG] [Thread-16149] [transport.py] [_log()] userauth is OK
2026-04-15T09:00:48.222 [DEBUG] [Thread-16149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:00:48.222 [DEBUG] [Thread-16149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:00:48.222 [DEBUG] [Thread-16149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:00:48.222 [DEBUG] [Thread-16149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:00:48.239 [INFO] [Thread-16149] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:00:48.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:00:48.871 [DEBUG] [Thread-16149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:00:48.872 [DEBUG] [Thread-16149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:00:48.872 [DEBUG] [Thread-16149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:00:48.913 [DEBUG] [Thread-16149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:00:48.913 [DEBUG] [Thread-16149] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:00:48.916 [DEBUG] [Thread-16149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:00:48.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:00:48.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:00:48.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:00:48.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:00:48.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:00:48.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:00:48.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:00:48.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:00:48.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:00:48.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.292145 -999.00   +8.60  17.36     97   +8.10 1 3 1 3 1   887    0 0.35 -4.83 ----- 17.4 17.4 310.8 23.3 11.5 -2.6 11.2 -2.0 10.5 -1.4 10.9 -1.6
2026-04-15T09:00:48.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:00:48.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:00:48.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.292145
2026-04-15T09:00:48.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:00:48.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:00:48.940 [DEBUG] [Thread-16149] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:00:48.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:00:48.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:00:48.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:00:48.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:00:16', tmtdew=0.17495, humidity=98.6375, cloud=0.0, wind=16.2151, temperature=8.74505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:00:41.328', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:00:49.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:00:49.182 [DEBUG] [Thread-16152] [transport.py] [_log()] starting thread (client mode): 0xf1365d80
2026-04-15T09:00:49.182 [DEBUG] [Thread-16152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:00:49.197 [DEBUG] [Thread-16152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:00:49.197 [INFO] [Thread-16152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:00:49.204 [DEBUG] [Thread-16152] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:00:49.205 [DEBUG] [Thread-16152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:00:49.205 [DEBUG] [Thread-16152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:00:49.205 [DEBUG] [Thread-16152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:00:49.205 [DEBUG] [Thread-16152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:00:49.205 [DEBUG] [Thread-16152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:00:49.205 [DEBUG] [Thread-16152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:00:49.205 [DEBUG] [Thread-16152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:00:49.205 [DEBUG] [Thread-16152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:00:49.205 [DEBUG] [Thread-16152] [transport.py] [_log()] client lang: <none>
2026-04-15T09:00:49.205 [DEBUG] [Thread-16152] [transport.py] [_log()] server lang: <none>
2026-04-15T09:00:49.205 [DEBUG] [Thread-16152] [transport.py] [_log()] kex follows: False
2026-04-15T09:00:49.206 [DEBUG] [Thread-16152] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:00:49.206 [DEBUG] [Thread-16152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:00:49.206 [DEBUG] [Thread-16152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:00:49.206 [DEBUG] [Thread-16152] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:00:49.206 [DEBUG] [Thread-16152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:00:49.206 [DEBUG] [Thread-16152] [transport.py] [_log()] Compression: none
2026-04-15T09:00:49.206 [DEBUG] [Thread-16152] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:00:49.261 [DEBUG] [Thread-16152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:00:49.262 [DEBUG] [Thread-16152] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:00:49.262 [DEBUG] [Thread-16152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:00:49.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:00:49.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:00:49.317 [DEBUG] [Thread-16152] [transport.py] [_log()] userauth is OK
2026-04-15T09:00:49.317 [DEBUG] [Thread-16152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:00:49.318 [DEBUG] [Thread-16152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:00:49.318 [DEBUG] [Thread-16152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:00:49.318 [DEBUG] [Thread-16152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:00:49.343 [INFO] [Thread-16152] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:00:49.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:00:49.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:00:50.180 [DEBUG] [Thread-16152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:00:50.181 [DEBUG] [Thread-16152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:00:50.229 [DEBUG] [Thread-16152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:00:50.229 [DEBUG] [Thread-16152] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:00:50.238 [DEBUG] [Thread-16152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:00:50.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:00:50.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')
2026-04-15T09:00:50.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
2026-04-15T09:00:50.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:00:50.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:00:50.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:00:50.273 [DEBUG] [Thread-16152] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:00:52.401 [DEBUG] [Thread-16154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:00:53.309 [DEBUG] [Thread-16155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:01:07.447 [DEBUG] [Thread-16156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:01:17.168 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:01:17.170 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:01:20.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:01:20.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:01:20.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
2026-04-15T09:01:21.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 0, 52), 0.25973, 98.2085, 0.0, 21.0305, 9.12418, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:01:21.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:00:52
2026-04-15T09:01:21.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:01:22.389 [DEBUG] [Thread-16157] [transport.py] [_log()] starting thread (client mode): 0xee904430
2026-04-15T09:01:22.389 [DEBUG] [Thread-16157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:01:22.400 [DEBUG] [Thread-16157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:01:22.400 [INFO] [Thread-16157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:01:22.402 [DEBUG] [Thread-16157] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:01:22.402 [DEBUG] [Thread-16157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:01:22.402 [DEBUG] [Thread-16157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:01:22.402 [DEBUG] [Thread-16157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:01:22.402 [DEBUG] [Thread-16157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:01:22.402 [DEBUG] [Thread-16157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:01:22.402 [DEBUG] [Thread-16157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:01:22.402 [DEBUG] [Thread-16157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:01:22.402 [DEBUG] [Thread-16157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:01:22.402 [DEBUG] [Thread-16157] [transport.py] [_log()] client lang: <none>
2026-04-15T09:01:22.402 [DEBUG] [Thread-16157] [transport.py] [_log()] server lang: <none>
2026-04-15T09:01:22.403 [DEBUG] [Thread-16157] [transport.py] [_log()] kex follows: False
2026-04-15T09:01:22.403 [DEBUG] [Thread-16157] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:01:22.403 [DEBUG] [Thread-16157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:01:22.403 [DEBUG] [Thread-16157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:01:22.403 [DEBUG] [Thread-16157] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:01:22.403 [DEBUG] [Thread-16157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:01:22.403 [DEBUG] [Thread-16157] [transport.py] [_log()] Compression: none
2026-04-15T09:01:22.403 [DEBUG] [Thread-16157] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:01:22.414 [DEBUG] [Thread-16157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:01:22.414 [DEBUG] [Thread-16157] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:01:22.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:01:22.415 [DEBUG] [Thread-16157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:01:22.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:01:22.416 [DEBUG] [Thread-16157] [transport.py] [_log()] userauth is OK
2026-04-15T09:01:22.416 [DEBUG] [Thread-16157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:01:22.416 [DEBUG] [Thread-16157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:01:22.416 [DEBUG] [Thread-16157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:01:22.416 [DEBUG] [Thread-16157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:01:22.432 [INFO] [Thread-16157] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:01:22.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:01:22.477 [DEBUG] [Thread-16159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:01:23.088 [DEBUG] [Thread-16157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:01:23.088 [DEBUG] [Thread-16157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:01:23.089 [DEBUG] [Thread-16157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:01:23.129 [DEBUG] [Thread-16157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:01:23.129 [DEBUG] [Thread-16157] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:01:23.132 [DEBUG] [Thread-16157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:01:23.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:01:23.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:01:23.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:01:23.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:01:23.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:01:23.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:01:23.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:01:23.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:01:23.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:01:23.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.292493 -999.00   +8.50  24.66     96   +8.00 1 3 1 3 1   887    0 0.34 -5.21 ----- 24.7 24.7 302.6 27.0 11.4 -2.6 11.2 -2.5 10.6 -2.3 10.9 -1.5
2026-04-15T09:01:23.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:01:23.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:01:23.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.292493
2026-04-15T09:01:23.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:01:23.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:01:23.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:01:23.158 [DEBUG] [Thread-16157] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:01:23.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:01:23.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:01:23.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:00:52', tmtdew=0.25973, humidity=98.2085, cloud=0.0, wind=21.0305, temperature=9.12418, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:01:11.395', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:01:23.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:01:23.413 [DEBUG] [Thread-16161] [transport.py] [_log()] starting thread (client mode): 0xf13e2080
2026-04-15T09:01:23.414 [DEBUG] [Thread-16161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:01:23.427 [DEBUG] [Thread-16161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:01:23.427 [INFO] [Thread-16161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:01:23.434 [DEBUG] [Thread-16161] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:01:23.435 [DEBUG] [Thread-16161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:01:23.435 [DEBUG] [Thread-16161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:01:23.435 [DEBUG] [Thread-16161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:01:23.435 [DEBUG] [Thread-16161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:01:23.435 [DEBUG] [Thread-16161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:01:23.435 [DEBUG] [Thread-16161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:01:23.435 [DEBUG] [Thread-16161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:01:23.435 [DEBUG] [Thread-16161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:01:23.435 [DEBUG] [Thread-16161] [transport.py] [_log()] client lang: <none>
2026-04-15T09:01:23.436 [DEBUG] [Thread-16161] [transport.py] [_log()] server lang: <none>
2026-04-15T09:01:23.436 [DEBUG] [Thread-16161] [transport.py] [_log()] kex follows: False
2026-04-15T09:01:23.436 [DEBUG] [Thread-16161] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:01:23.436 [DEBUG] [Thread-16161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:01:23.436 [DEBUG] [Thread-16161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:01:23.436 [DEBUG] [Thread-16161] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:01:23.436 [DEBUG] [Thread-16161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:01:23.436 [DEBUG] [Thread-16161] [transport.py] [_log()] Compression: none
2026-04-15T09:01:23.436 [DEBUG] [Thread-16161] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:01:23.494 [DEBUG] [Thread-16161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:01:23.495 [DEBUG] [Thread-16161] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:01:23.495 [DEBUG] [Thread-16161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:01:23.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:01:23.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:01:23.554 [DEBUG] [Thread-16161] [transport.py] [_log()] userauth is OK
2026-04-15T09:01:23.555 [DEBUG] [Thread-16161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:01:23.555 [DEBUG] [Thread-16161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:01:23.555 [DEBUG] [Thread-16161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:01:23.555 [DEBUG] [Thread-16161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:01:23.580 [INFO] [Thread-16161] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:01:23.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:01:23.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:01:24.438 [DEBUG] [Thread-16161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:01:24.438 [DEBUG] [Thread-16161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:01:24.488 [DEBUG] [Thread-16161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:01:24.488 [DEBUG] [Thread-16161] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:01:24.497 [DEBUG] [Thread-16161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:01:24.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:01:24.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')
2026-04-15T09:01:24.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
2026-04-15T09:01:24.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:01:24.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:01:24.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:01:24.535 [DEBUG] [Thread-16161] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:01:37.510 [DEBUG] [Thread-16163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:01:52.554 [DEBUG] [Thread-16164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:01:53.400 [DEBUG] [Thread-16165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:01:54.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:01:54.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:01:54.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
2026-04-15T09:01:55.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 1, 27), 0.172435, 98.654, 0.0, 16.11, 8.72845, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:01:55.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:01:27
2026-04-15T09:01:56.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:01:56.603 [DEBUG] [Thread-16166] [transport.py] [_log()] starting thread (client mode): 0xf1337610
2026-04-15T09:01:56.603 [DEBUG] [Thread-16166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:01:56.616 [DEBUG] [Thread-16166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:01:56.616 [INFO] [Thread-16166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:01:56.617 [DEBUG] [Thread-16166] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:01:56.617 [DEBUG] [Thread-16166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:01:56.618 [DEBUG] [Thread-16166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:01:56.618 [DEBUG] [Thread-16166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:01:56.618 [DEBUG] [Thread-16166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:01:56.618 [DEBUG] [Thread-16166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:01:56.618 [DEBUG] [Thread-16166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:01:56.618 [DEBUG] [Thread-16166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:01:56.618 [DEBUG] [Thread-16166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:01:56.618 [DEBUG] [Thread-16166] [transport.py] [_log()] client lang: <none>
2026-04-15T09:01:56.618 [DEBUG] [Thread-16166] [transport.py] [_log()] server lang: <none>
2026-04-15T09:01:56.618 [DEBUG] [Thread-16166] [transport.py] [_log()] kex follows: False
2026-04-15T09:01:56.618 [DEBUG] [Thread-16166] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:01:56.618 [DEBUG] [Thread-16166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:01:56.619 [DEBUG] [Thread-16166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:01:56.619 [DEBUG] [Thread-16166] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:01:56.619 [DEBUG] [Thread-16166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:01:56.619 [DEBUG] [Thread-16166] [transport.py] [_log()] Compression: none
2026-04-15T09:01:56.619 [DEBUG] [Thread-16166] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:01:56.637 [DEBUG] [Thread-16166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:01:56.637 [DEBUG] [Thread-16166] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:01:56.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:01:56.638 [DEBUG] [Thread-16166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:01:56.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:01:56.639 [DEBUG] [Thread-16166] [transport.py] [_log()] userauth is OK
2026-04-15T09:01:56.639 [DEBUG] [Thread-16166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:01:56.639 [DEBUG] [Thread-16166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:01:56.639 [DEBUG] [Thread-16166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:01:56.640 [DEBUG] [Thread-16166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:01:56.663 [INFO] [Thread-16166] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:01:56.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:01:57.263 [DEBUG] [Thread-16166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:01:57.264 [DEBUG] [Thread-16166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:01:57.265 [DEBUG] [Thread-16166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:01:57.305 [DEBUG] [Thread-16166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:01:57.305 [DEBUG] [Thread-16166] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:01:57.308 [DEBUG] [Thread-16166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:01:57.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:01:57.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:01:57.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:01:57.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:01:57.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:01:57.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:01:57.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:01:57.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:01:57.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:01:57.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.292840 -999.00   +8.40  17.81     96   +7.90 1 3 1 3 1   887    0 0.35 -5.10 ----- 17.8 17.8 292.6 26.6 11.5 -2.2 11.2 -2.1 10.5 -1.4 10.9 -1.0
2026-04-15T09:01:57.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:01:57.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:01:57.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.292840
2026-04-15T09:01:57.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:01:57.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:01:57.333 [DEBUG] [Thread-16166] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:01:57.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:01:57.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:01:57.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:01:57.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:01:27', tmtdew=0.172435, humidity=98.654, cloud=0.0, wind=16.11, temperature=8.72845, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:01:41.376', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:01:57.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:01:57.585 [DEBUG] [Thread-16169] [transport.py] [_log()] starting thread (client mode): 0xf13e09a0
2026-04-15T09:01:57.586 [DEBUG] [Thread-16169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:01:57.600 [DEBUG] [Thread-16169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:01:57.600 [INFO] [Thread-16169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:01:57.607 [DEBUG] [Thread-16169] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:01:57.607 [DEBUG] [Thread-16169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:01:57.607 [DEBUG] [Thread-16169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:01:57.607 [DEBUG] [Thread-16169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:01:57.607 [DEBUG] [Thread-16169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:01:57.608 [DEBUG] [Thread-16169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:01:57.608 [DEBUG] [Thread-16169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:01:57.608 [DEBUG] [Thread-16169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:01:57.608 [DEBUG] [Thread-16169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:01:57.608 [DEBUG] [Thread-16169] [transport.py] [_log()] client lang: <none>
2026-04-15T09:01:57.608 [DEBUG] [Thread-16169] [transport.py] [_log()] server lang: <none>
2026-04-15T09:01:57.608 [DEBUG] [Thread-16169] [transport.py] [_log()] kex follows: False
2026-04-15T09:01:57.608 [DEBUG] [Thread-16169] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:01:57.608 [DEBUG] [Thread-16169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:01:57.608 [DEBUG] [Thread-16169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:01:57.608 [DEBUG] [Thread-16169] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:01:57.608 [DEBUG] [Thread-16169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:01:57.609 [DEBUG] [Thread-16169] [transport.py] [_log()] Compression: none
2026-04-15T09:01:57.609 [DEBUG] [Thread-16169] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:01:57.665 [DEBUG] [Thread-16169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:01:57.665 [DEBUG] [Thread-16169] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:01:57.665 [DEBUG] [Thread-16169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:01:57.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:01:57.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:01:57.721 [DEBUG] [Thread-16169] [transport.py] [_log()] userauth is OK
2026-04-15T09:01:57.721 [DEBUG] [Thread-16169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:01:57.722 [DEBUG] [Thread-16169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:01:57.722 [DEBUG] [Thread-16169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:01:57.722 [DEBUG] [Thread-16169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:01:57.745 [INFO] [Thread-16169] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:01:57.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:01:57.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:01:58.581 [DEBUG] [Thread-16169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:01:58.581 [DEBUG] [Thread-16169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:01:58.629 [DEBUG] [Thread-16169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:01:58.629 [DEBUG] [Thread-16169] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:01:58.638 [DEBUG] [Thread-16169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:01:58.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:01:58.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')
2026-04-15T09:01:58.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
2026-04-15T09:01:58.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:01:58.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:01:58.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:01:58.673 [DEBUG] [Thread-16169] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:02:07.584 [DEBUG] [Thread-16171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:02:17.311 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:02:17.312 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:02:22.622 [DEBUG] [Thread-16172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:02:28.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:02:28.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:02:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:02:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 2, 3), 0.17494, 98.6374, 0.0, 16.8332, 8.72843, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:02:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:02:03
2026-04-15T09:02:30.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:02:30.815 [DEBUG] [Thread-16173] [transport.py] [_log()] starting thread (client mode): 0xf13e2110
2026-04-15T09:02:30.815 [DEBUG] [Thread-16173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:02:30.835 [DEBUG] [Thread-16173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:02:30.835 [INFO] [Thread-16173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:02:30.838 [DEBUG] [Thread-16173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:02:30.838 [DEBUG] [Thread-16173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:02:30.838 [DEBUG] [Thread-16173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:02:30.838 [DEBUG] [Thread-16173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:02:30.838 [DEBUG] [Thread-16173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:02:30.838 [DEBUG] [Thread-16173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:02:30.838 [DEBUG] [Thread-16173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:02:30.838 [DEBUG] [Thread-16173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:02:30.838 [DEBUG] [Thread-16173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:02:30.839 [DEBUG] [Thread-16173] [transport.py] [_log()] client lang: <none>
2026-04-15T09:02:30.839 [DEBUG] [Thread-16173] [transport.py] [_log()] server lang: <none>
2026-04-15T09:02:30.839 [DEBUG] [Thread-16173] [transport.py] [_log()] kex follows: False
2026-04-15T09:02:30.839 [DEBUG] [Thread-16173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:02:30.839 [DEBUG] [Thread-16173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:02:30.839 [DEBUG] [Thread-16173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:02:30.839 [DEBUG] [Thread-16173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:02:30.839 [DEBUG] [Thread-16173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:02:30.839 [DEBUG] [Thread-16173] [transport.py] [_log()] Compression: none
2026-04-15T09:02:30.839 [DEBUG] [Thread-16173] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:02:30.855 [DEBUG] [Thread-16173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:02:30.856 [DEBUG] [Thread-16173] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:02:30.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:02:30.856 [DEBUG] [Thread-16173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:02:30.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:02:30.900 [DEBUG] [Thread-16173] [transport.py] [_log()] userauth is OK
2026-04-15T09:02:30.900 [DEBUG] [Thread-16173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:02:30.900 [DEBUG] [Thread-16173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:02:30.900 [DEBUG] [Thread-16173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:02:30.901 [DEBUG] [Thread-16173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:02:30.936 [INFO] [Thread-16173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:02:30.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:02:31.540 [DEBUG] [Thread-16173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:02:31.541 [DEBUG] [Thread-16173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:02:31.541 [DEBUG] [Thread-16173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:02:31.581 [DEBUG] [Thread-16173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:02:31.581 [DEBUG] [Thread-16173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:02:31.584 [DEBUG] [Thread-16173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:02:31.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:02:31.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:02:31.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:02:31.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:02:31.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:02:31.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:02:31.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:02:31.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:02:31.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:02:31.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.293188 -999.00   +8.60  16.55     97   +8.20 1 3 1 3 1   887    0 0.35 -4.93 ----- 16.6 16.6 298.2 18.5 11.6 -2.2 11.2 -1.9 10.6 -1.1 10.9 -1.3
2026-04-15T09:02:31.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:02:31.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:02:31.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.293188
2026-04-15T09:02:31.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:02:31.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:02:31.609 [DEBUG] [Thread-16173] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:02:31.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:02:31.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:02:31.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:02:31.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:02:03', tmtdew=0.17494, humidity=98.6374, cloud=0.0, wind=16.8332, temperature=8.72843, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:02:11.443', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:02:31.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:02:31.864 [DEBUG] [Thread-16176] [transport.py] [_log()] starting thread (client mode): 0xf1334a60
2026-04-15T09:02:31.864 [DEBUG] [Thread-16176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:02:31.879 [DEBUG] [Thread-16176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:02:31.879 [INFO] [Thread-16176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:02:31.887 [DEBUG] [Thread-16176] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:02:31.887 [DEBUG] [Thread-16176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:02:31.887 [DEBUG] [Thread-16176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:02:31.887 [DEBUG] [Thread-16176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:02:31.887 [DEBUG] [Thread-16176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:02:31.887 [DEBUG] [Thread-16176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:02:31.887 [DEBUG] [Thread-16176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:02:31.887 [DEBUG] [Thread-16176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:02:31.887 [DEBUG] [Thread-16176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:02:31.887 [DEBUG] [Thread-16176] [transport.py] [_log()] client lang: <none>
2026-04-15T09:02:31.887 [DEBUG] [Thread-16176] [transport.py] [_log()] server lang: <none>
2026-04-15T09:02:31.888 [DEBUG] [Thread-16176] [transport.py] [_log()] kex follows: False
2026-04-15T09:02:31.888 [DEBUG] [Thread-16176] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:02:31.888 [DEBUG] [Thread-16176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:02:31.888 [DEBUG] [Thread-16176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:02:31.888 [DEBUG] [Thread-16176] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:02:31.888 [DEBUG] [Thread-16176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:02:31.888 [DEBUG] [Thread-16176] [transport.py] [_log()] Compression: none
2026-04-15T09:02:31.888 [DEBUG] [Thread-16176] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:02:31.944 [DEBUG] [Thread-16176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:02:31.945 [DEBUG] [Thread-16176] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:02:31.945 [DEBUG] [Thread-16176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:02:31.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:02:31.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:02:32.001 [DEBUG] [Thread-16176] [transport.py] [_log()] userauth is OK
2026-04-15T09:02:32.002 [DEBUG] [Thread-16176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:02:32.002 [DEBUG] [Thread-16176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:02:32.002 [DEBUG] [Thread-16176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:02:32.002 [DEBUG] [Thread-16176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:02:32.028 [INFO] [Thread-16176] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:02:32.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:02:32.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:02:32.901 [DEBUG] [Thread-16176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:02:32.901 [DEBUG] [Thread-16176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:02:32.949 [DEBUG] [Thread-16176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:02:32.949 [DEBUG] [Thread-16176] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:02:32.958 [DEBUG] [Thread-16176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:02:32.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:02:32.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T09:02:32.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') -> 00000000
2026-04-15T09:02:32.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:02:32.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:02:32.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:02:32.994 [DEBUG] [Thread-16176] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:02:37.654 [DEBUG] [Thread-16178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:02:52.698 [DEBUG] [Thread-16179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:02:53.494 [DEBUG] [Thread-16180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:03:02.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:03:02.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:03:02.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
2026-04-15T09:03:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 2, 39), 0.24502, 98.308, 0.0, 22.7592, 9.38959, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:03:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:02:39
2026-04-15T09:03:04.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:03:05.149 [DEBUG] [Thread-16181] [transport.py] [_log()] starting thread (client mode): 0xf13c91b0
2026-04-15T09:03:05.150 [DEBUG] [Thread-16181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:03:05.170 [DEBUG] [Thread-16181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:03:05.170 [INFO] [Thread-16181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:03:05.173 [DEBUG] [Thread-16181] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:03:05.173 [DEBUG] [Thread-16181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:03:05.174 [DEBUG] [Thread-16181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:03:05.174 [DEBUG] [Thread-16181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:03:05.174 [DEBUG] [Thread-16181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:03:05.174 [DEBUG] [Thread-16181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:03:05.174 [DEBUG] [Thread-16181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:03:05.174 [DEBUG] [Thread-16181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:03:05.174 [DEBUG] [Thread-16181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:03:05.174 [DEBUG] [Thread-16181] [transport.py] [_log()] client lang: <none>
2026-04-15T09:03:05.174 [DEBUG] [Thread-16181] [transport.py] [_log()] server lang: <none>
2026-04-15T09:03:05.174 [DEBUG] [Thread-16181] [transport.py] [_log()] kex follows: False
2026-04-15T09:03:05.174 [DEBUG] [Thread-16181] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:03:05.175 [DEBUG] [Thread-16181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:03:05.175 [DEBUG] [Thread-16181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:03:05.175 [DEBUG] [Thread-16181] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:03:05.175 [DEBUG] [Thread-16181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:03:05.175 [DEBUG] [Thread-16181] [transport.py] [_log()] Compression: none
2026-04-15T09:03:05.175 [DEBUG] [Thread-16181] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:03:05.190 [DEBUG] [Thread-16181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:03:05.191 [DEBUG] [Thread-16181] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:03:05.191 [DEBUG] [Thread-16181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:03:05.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:03:05.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:03:05.193 [DEBUG] [Thread-16181] [transport.py] [_log()] userauth is OK
2026-04-15T09:03:05.193 [DEBUG] [Thread-16181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:03:05.193 [DEBUG] [Thread-16181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:03:05.193 [DEBUG] [Thread-16181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:03:05.193 [DEBUG] [Thread-16181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:03:05.216 [INFO] [Thread-16181] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:03:05.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:03:05.862 [DEBUG] [Thread-16181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:03:05.862 [DEBUG] [Thread-16181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:03:05.863 [DEBUG] [Thread-16181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:03:05.903 [DEBUG] [Thread-16181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:03:05.903 [DEBUG] [Thread-16181] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:03:05.906 [DEBUG] [Thread-16181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:03:05.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:03:05.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:03:05.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:03:05.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:03:05.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:03:05.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:03:05.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:03:05.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:03:05.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:03:05.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.293534 -999.00   +8.60  18.90     97   +8.10 1 3 1 3 1   887    0 0.36 -4.69 ----- 18.9 18.9 296.4 25.8 11.5 -2.8 11.2 -2.6 10.5 -2.9 10.9 -1.9
2026-04-15T09:03:05.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:03:05.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:03:05.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.293534
2026-04-15T09:03:05.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:03:05.931 [DEBUG] [Thread-16181] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:03:05.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:03:05.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:03:05.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:03:05.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:03:05.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:02:39', tmtdew=0.24502, humidity=98.308, cloud=0.0, wind=22.7592, temperature=9.38959, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:02:41.338', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:03:06.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:03:06.183 [DEBUG] [Thread-16184] [transport.py] [_log()] starting thread (client mode): 0xf13edcf0
2026-04-15T09:03:06.183 [DEBUG] [Thread-16184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:03:06.198 [DEBUG] [Thread-16184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:03:06.198 [INFO] [Thread-16184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:03:06.206 [DEBUG] [Thread-16184] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:03:06.206 [DEBUG] [Thread-16184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:03:06.206 [DEBUG] [Thread-16184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:03:06.206 [DEBUG] [Thread-16184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:03:06.206 [DEBUG] [Thread-16184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:03:06.206 [DEBUG] [Thread-16184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:03:06.206 [DEBUG] [Thread-16184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:03:06.206 [DEBUG] [Thread-16184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:03:06.206 [DEBUG] [Thread-16184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:03:06.206 [DEBUG] [Thread-16184] [transport.py] [_log()] client lang: <none>
2026-04-15T09:03:06.207 [DEBUG] [Thread-16184] [transport.py] [_log()] server lang: <none>
2026-04-15T09:03:06.207 [DEBUG] [Thread-16184] [transport.py] [_log()] kex follows: False
2026-04-15T09:03:06.207 [DEBUG] [Thread-16184] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:03:06.207 [DEBUG] [Thread-16184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:03:06.207 [DEBUG] [Thread-16184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:03:06.207 [DEBUG] [Thread-16184] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:03:06.207 [DEBUG] [Thread-16184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:03:06.207 [DEBUG] [Thread-16184] [transport.py] [_log()] Compression: none
2026-04-15T09:03:06.207 [DEBUG] [Thread-16184] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:03:06.263 [DEBUG] [Thread-16184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:03:06.264 [DEBUG] [Thread-16184] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:03:06.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:03:06.264 [DEBUG] [Thread-16184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:03:06.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:03:06.321 [DEBUG] [Thread-16184] [transport.py] [_log()] userauth is OK
2026-04-15T09:03:06.321 [DEBUG] [Thread-16184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:03:06.321 [DEBUG] [Thread-16184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:03:06.321 [DEBUG] [Thread-16184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:03:06.321 [DEBUG] [Thread-16184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:03:06.340 [INFO] [Thread-16184] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:03:06.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:03:06.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:03:07.177 [DEBUG] [Thread-16184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:03:07.178 [DEBUG] [Thread-16184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:03:07.225 [DEBUG] [Thread-16184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:03:07.225 [DEBUG] [Thread-16184] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:03:07.234 [DEBUG] [Thread-16184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:03:07.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:03:07.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')
2026-04-15T09:03:07.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
2026-04-15T09:03:07.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:03:07.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:03:07.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:03:07.271 [DEBUG] [Thread-16184] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:03:07.728 [DEBUG] [Thread-16186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:03:17.454 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:03:17.455 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:03:22.769 [DEBUG] [Thread-16187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:03:37.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:03:37.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:03:37.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:03:37.800 [DEBUG] [Thread-16188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:03:38.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 3, 14), 0.13241, 98.5872, 0.0, 16.1093, 8.59523, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:03:38.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:03:14
2026-04-15T09:03:38.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:03:39.410 [DEBUG] [Thread-16189] [transport.py] [_log()] starting thread (client mode): 0xee906650
2026-04-15T09:03:39.410 [DEBUG] [Thread-16189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:03:39.429 [DEBUG] [Thread-16189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:03:39.429 [INFO] [Thread-16189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:03:39.431 [DEBUG] [Thread-16189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:03:39.431 [DEBUG] [Thread-16189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:03:39.431 [DEBUG] [Thread-16189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:03:39.431 [DEBUG] [Thread-16189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:03:39.431 [DEBUG] [Thread-16189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:03:39.431 [DEBUG] [Thread-16189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:03:39.431 [DEBUG] [Thread-16189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:03:39.431 [DEBUG] [Thread-16189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:03:39.431 [DEBUG] [Thread-16189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:03:39.431 [DEBUG] [Thread-16189] [transport.py] [_log()] client lang: <none>
2026-04-15T09:03:39.432 [DEBUG] [Thread-16189] [transport.py] [_log()] server lang: <none>
2026-04-15T09:03:39.432 [DEBUG] [Thread-16189] [transport.py] [_log()] kex follows: False
2026-04-15T09:03:39.432 [DEBUG] [Thread-16189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:03:39.432 [DEBUG] [Thread-16189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:03:39.432 [DEBUG] [Thread-16189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:03:39.432 [DEBUG] [Thread-16189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:03:39.432 [DEBUG] [Thread-16189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:03:39.432 [DEBUG] [Thread-16189] [transport.py] [_log()] Compression: none
2026-04-15T09:03:39.432 [DEBUG] [Thread-16189] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:03:39.446 [DEBUG] [Thread-16189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:03:39.446 [DEBUG] [Thread-16189] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:03:39.447 [DEBUG] [Thread-16189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:03:39.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:03:39.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:03:39.448 [DEBUG] [Thread-16189] [transport.py] [_log()] userauth is OK
2026-04-15T09:03:39.448 [DEBUG] [Thread-16189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:03:39.448 [DEBUG] [Thread-16189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:03:39.448 [DEBUG] [Thread-16189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:03:39.448 [DEBUG] [Thread-16189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:03:39.474 [INFO] [Thread-16189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:03:39.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:03:40.147 [DEBUG] [Thread-16189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:03:40.147 [DEBUG] [Thread-16189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:03:40.148 [DEBUG] [Thread-16189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:03:40.188 [DEBUG] [Thread-16189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:03:40.188 [DEBUG] [Thread-16189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:03:40.191 [DEBUG] [Thread-16189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:03:40.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:03:40.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:03:40.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:03:40.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:03:40.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:03:40.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:03:40.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:03:40.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:03:40.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:03:40.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.293882 -999.00   +8.60  17.28     96   +8.10 1 3 1 3 1   887    0 0.35 -5.01 ----- 17.3 17.3 304.6 21.2 11.5 -2.7 11.2 -2.6 10.5 -2.6 10.9 -1.2
2026-04-15T09:03:40.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:03:40.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:03:40.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.293882
2026-04-15T09:03:40.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:03:40.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:03:40.215 [DEBUG] [Thread-16189] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:03:40.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:03:40.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:03:40.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:03:40.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:03:14', tmtdew=0.13241, humidity=98.5872, cloud=0.0, wind=16.1093, temperature=8.59523, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:03:11.405', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:03:40.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:03:40.459 [DEBUG] [Thread-16192] [transport.py] [_log()] starting thread (client mode): 0xf13e3490
2026-04-15T09:03:40.459 [DEBUG] [Thread-16192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:03:40.476 [DEBUG] [Thread-16192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:03:40.476 [INFO] [Thread-16192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:03:40.484 [DEBUG] [Thread-16192] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:03:40.484 [DEBUG] [Thread-16192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:03:40.484 [DEBUG] [Thread-16192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:03:40.484 [DEBUG] [Thread-16192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:03:40.484 [DEBUG] [Thread-16192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:03:40.484 [DEBUG] [Thread-16192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:03:40.484 [DEBUG] [Thread-16192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:03:40.485 [DEBUG] [Thread-16192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:03:40.485 [DEBUG] [Thread-16192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:03:40.485 [DEBUG] [Thread-16192] [transport.py] [_log()] client lang: <none>
2026-04-15T09:03:40.485 [DEBUG] [Thread-16192] [transport.py] [_log()] server lang: <none>
2026-04-15T09:03:40.485 [DEBUG] [Thread-16192] [transport.py] [_log()] kex follows: False
2026-04-15T09:03:40.485 [DEBUG] [Thread-16192] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:03:40.485 [DEBUG] [Thread-16192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:03:40.485 [DEBUG] [Thread-16192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:03:40.485 [DEBUG] [Thread-16192] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:03:40.485 [DEBUG] [Thread-16192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:03:40.485 [DEBUG] [Thread-16192] [transport.py] [_log()] Compression: none
2026-04-15T09:03:40.486 [DEBUG] [Thread-16192] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:03:40.540 [DEBUG] [Thread-16192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:03:40.541 [DEBUG] [Thread-16192] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:03:40.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:03:40.542 [DEBUG] [Thread-16192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:03:40.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:03:40.597 [DEBUG] [Thread-16192] [transport.py] [_log()] userauth is OK
2026-04-15T09:03:40.597 [DEBUG] [Thread-16192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:03:40.597 [DEBUG] [Thread-16192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:03:40.597 [DEBUG] [Thread-16192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:03:40.598 [DEBUG] [Thread-16192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:03:40.623 [INFO] [Thread-16192] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:03:40.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:03:40.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:03:41.462 [DEBUG] [Thread-16192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:03:41.463 [DEBUG] [Thread-16192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:03:41.513 [DEBUG] [Thread-16192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:03:41.514 [DEBUG] [Thread-16192] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:03:41.523 [DEBUG] [Thread-16192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:03:41.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:03:41.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')
2026-04-15T09:03:41.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
2026-04-15T09:03:41.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:03:41.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:03:41.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:03:41.557 [DEBUG] [Thread-16192] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:03:52.831 [DEBUG] [Thread-16194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:03:53.588 [DEBUG] [Thread-16195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:04:07.875 [DEBUG] [Thread-16196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:04:11.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:04:11.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:04:11.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:04:12.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 3, 50), 0.25, 98.274, 0.0, 21.1363, 9.25636, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:04:12.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:03:50
2026-04-15T09:04:13.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:04:13.776 [DEBUG] [Thread-16197] [transport.py] [_log()] starting thread (client mode): 0xf13ffd60
2026-04-15T09:04:13.776 [DEBUG] [Thread-16197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:04:13.795 [DEBUG] [Thread-16197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:04:13.795 [INFO] [Thread-16197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:04:13.798 [DEBUG] [Thread-16197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:04:13.798 [DEBUG] [Thread-16197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:04:13.798 [DEBUG] [Thread-16197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:04:13.798 [DEBUG] [Thread-16197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:04:13.798 [DEBUG] [Thread-16197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:04:13.798 [DEBUG] [Thread-16197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:04:13.798 [DEBUG] [Thread-16197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:04:13.798 [DEBUG] [Thread-16197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:04:13.798 [DEBUG] [Thread-16197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:04:13.798 [DEBUG] [Thread-16197] [transport.py] [_log()] client lang: <none>
2026-04-15T09:04:13.798 [DEBUG] [Thread-16197] [transport.py] [_log()] server lang: <none>
2026-04-15T09:04:13.798 [DEBUG] [Thread-16197] [transport.py] [_log()] kex follows: False
2026-04-15T09:04:13.798 [DEBUG] [Thread-16197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:04:13.798 [DEBUG] [Thread-16197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:04:13.799 [DEBUG] [Thread-16197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:04:13.799 [DEBUG] [Thread-16197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:04:13.799 [DEBUG] [Thread-16197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:04:13.799 [DEBUG] [Thread-16197] [transport.py] [_log()] Compression: none
2026-04-15T09:04:13.799 [DEBUG] [Thread-16197] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:04:13.814 [DEBUG] [Thread-16197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:04:13.814 [DEBUG] [Thread-16197] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:04:13.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:04:13.814 [DEBUG] [Thread-16197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:04:13.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:04:13.815 [DEBUG] [Thread-16197] [transport.py] [_log()] userauth is OK
2026-04-15T09:04:13.815 [DEBUG] [Thread-16197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:04:13.815 [DEBUG] [Thread-16197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:04:13.816 [DEBUG] [Thread-16197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:04:13.816 [DEBUG] [Thread-16197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:04:13.838 [INFO] [Thread-16197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:04:13.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:04:14.438 [DEBUG] [Thread-16197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:04:14.439 [DEBUG] [Thread-16197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:04:14.439 [DEBUG] [Thread-16197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:04:14.479 [DEBUG] [Thread-16197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:04:14.479 [DEBUG] [Thread-16197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:04:14.482 [DEBUG] [Thread-16197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:04:14.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:04:14.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:04:14.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:04:14.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:04:14.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:04:14.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:04:14.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:04:14.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:04:14.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:04:14.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.294229 -999.00   +8.60  21.29     96   +8.10 1 3 1 3 1   887    0 0.34 -4.93 ----- 21.3 21.3 298.8 23.1 11.6 -2.2 11.2 -2.2 10.6 -1.9 10.9 -1.8
2026-04-15T09:04:14.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:04:14.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:04:14.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.294229
2026-04-15T09:04:14.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:04:14.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:04:14.509 [DEBUG] [Thread-16197] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:04:14.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:04:14.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:04:14.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:04:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:03:50', tmtdew=0.25, humidity=98.274, cloud=0.0, wind=21.1363, temperature=9.25636, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:03:41.386', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:04:14.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:04:14.760 [DEBUG] [Thread-16200] [transport.py] [_log()] starting thread (client mode): 0xee90f610
2026-04-15T09:04:14.760 [DEBUG] [Thread-16200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:04:14.775 [DEBUG] [Thread-16200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:04:14.775 [INFO] [Thread-16200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:04:14.783 [DEBUG] [Thread-16200] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:04:14.783 [DEBUG] [Thread-16200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:04:14.783 [DEBUG] [Thread-16200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:04:14.783 [DEBUG] [Thread-16200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:04:14.783 [DEBUG] [Thread-16200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:04:14.783 [DEBUG] [Thread-16200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:04:14.783 [DEBUG] [Thread-16200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:04:14.783 [DEBUG] [Thread-16200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:04:14.783 [DEBUG] [Thread-16200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:04:14.783 [DEBUG] [Thread-16200] [transport.py] [_log()] client lang: <none>
2026-04-15T09:04:14.783 [DEBUG] [Thread-16200] [transport.py] [_log()] server lang: <none>
2026-04-15T09:04:14.784 [DEBUG] [Thread-16200] [transport.py] [_log()] kex follows: False
2026-04-15T09:04:14.784 [DEBUG] [Thread-16200] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:04:14.784 [DEBUG] [Thread-16200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:04:14.784 [DEBUG] [Thread-16200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:04:14.784 [DEBUG] [Thread-16200] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:04:14.784 [DEBUG] [Thread-16200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:04:14.784 [DEBUG] [Thread-16200] [transport.py] [_log()] Compression: none
2026-04-15T09:04:14.784 [DEBUG] [Thread-16200] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:04:14.840 [DEBUG] [Thread-16200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:04:14.840 [DEBUG] [Thread-16200] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:04:14.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:04:14.841 [DEBUG] [Thread-16200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:04:14.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:04:14.897 [DEBUG] [Thread-16200] [transport.py] [_log()] userauth is OK
2026-04-15T09:04:14.897 [DEBUG] [Thread-16200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:04:14.897 [DEBUG] [Thread-16200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:04:14.897 [DEBUG] [Thread-16200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:04:14.898 [DEBUG] [Thread-16200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:04:14.922 [INFO] [Thread-16200] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:04:14.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:04:14.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:04:15.759 [DEBUG] [Thread-16200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:04:15.759 [DEBUG] [Thread-16200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:04:15.807 [DEBUG] [Thread-16200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:04:15.807 [DEBUG] [Thread-16200] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:04:15.816 [DEBUG] [Thread-16200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:04:15.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:04:15.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')
2026-04-15T09:04:15.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
2026-04-15T09:04:15.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:04:15.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:04:15.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:04:15.851 [DEBUG] [Thread-16200] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:04:17.594 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:04:17.596 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:04:22.906 [DEBUG] [Thread-16202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:04:37.949 [DEBUG] [Thread-16203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:04:45.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:04:45.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:04:45.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
2026-04-15T09:04:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 4, 25), 0.17255, 98.6533, 0.0, 17.1677, 8.82798, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:04:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:04:25
2026-04-15T09:04:47.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:04:48.054 [DEBUG] [Thread-16204] [transport.py] [_log()] starting thread (client mode): 0xf13fc070
2026-04-15T09:04:48.054 [DEBUG] [Thread-16204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:04:48.073 [DEBUG] [Thread-16204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:04:48.073 [INFO] [Thread-16204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:04:48.077 [DEBUG] [Thread-16204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:04:48.077 [DEBUG] [Thread-16204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:04:48.077 [DEBUG] [Thread-16204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:04:48.077 [DEBUG] [Thread-16204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:04:48.077 [DEBUG] [Thread-16204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:04:48.077 [DEBUG] [Thread-16204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:04:48.078 [DEBUG] [Thread-16204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:04:48.078 [DEBUG] [Thread-16204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:04:48.078 [DEBUG] [Thread-16204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:04:48.078 [DEBUG] [Thread-16204] [transport.py] [_log()] client lang: <none>
2026-04-15T09:04:48.078 [DEBUG] [Thread-16204] [transport.py] [_log()] server lang: <none>
2026-04-15T09:04:48.078 [DEBUG] [Thread-16204] [transport.py] [_log()] kex follows: False
2026-04-15T09:04:48.078 [DEBUG] [Thread-16204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:04:48.078 [DEBUG] [Thread-16204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:04:48.078 [DEBUG] [Thread-16204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:04:48.078 [DEBUG] [Thread-16204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:04:48.078 [DEBUG] [Thread-16204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:04:48.079 [DEBUG] [Thread-16204] [transport.py] [_log()] Compression: none
2026-04-15T09:04:48.079 [DEBUG] [Thread-16204] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:04:48.095 [DEBUG] [Thread-16204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:04:48.095 [DEBUG] [Thread-16204] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:04:48.096 [DEBUG] [Thread-16204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:04:48.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:04:48.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:04:48.097 [DEBUG] [Thread-16204] [transport.py] [_log()] userauth is OK
2026-04-15T09:04:48.097 [DEBUG] [Thread-16204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:04:48.097 [DEBUG] [Thread-16204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:04:48.097 [DEBUG] [Thread-16204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:04:48.098 [DEBUG] [Thread-16204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:04:48.121 [INFO] [Thread-16204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:04:48.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:04:48.736 [DEBUG] [Thread-16204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:04:48.736 [DEBUG] [Thread-16204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:04:48.737 [DEBUG] [Thread-16204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:04:48.777 [DEBUG] [Thread-16204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:04:48.777 [DEBUG] [Thread-16204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:04:48.780 [DEBUG] [Thread-16204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:04:48.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:04:48.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:04:48.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:04:48.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:04:48.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:04:48.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:04:48.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:04:48.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:04:48.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:04:48.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.294576 -999.00   +8.60  18.03     96   +8.10 1 3 1 3 1   887    0 0.35 -4.38 ----- 18.0 18.0 280.0 24.2 11.6 -3.7 11.2 -3.3 10.5 -2.5 10.9 -3.1
2026-04-15T09:04:48.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:04:48.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:04:48.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.294576
2026-04-15T09:04:48.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:04:48.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:04:48.802 [DEBUG] [Thread-16204] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:04:48.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:04:48.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:04:48.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:04:48.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:04:25', tmtdew=0.17255, humidity=98.6533, cloud=0.0, wind=17.1677, temperature=8.82798, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:04:11.366', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:04:49.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:04:49.055 [DEBUG] [Thread-16207] [transport.py] [_log()] starting thread (client mode): 0xf13ec5b0
2026-04-15T09:04:49.056 [DEBUG] [Thread-16207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:04:49.069 [DEBUG] [Thread-16207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:04:49.070 [INFO] [Thread-16207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:04:49.077 [DEBUG] [Thread-16207] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:04:49.077 [DEBUG] [Thread-16207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:04:49.077 [DEBUG] [Thread-16207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:04:49.077 [DEBUG] [Thread-16207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:04:49.077 [DEBUG] [Thread-16207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:04:49.077 [DEBUG] [Thread-16207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:04:49.077 [DEBUG] [Thread-16207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:04:49.077 [DEBUG] [Thread-16207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:04:49.077 [DEBUG] [Thread-16207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:04:49.077 [DEBUG] [Thread-16207] [transport.py] [_log()] client lang: <none>
2026-04-15T09:04:49.078 [DEBUG] [Thread-16207] [transport.py] [_log()] server lang: <none>
2026-04-15T09:04:49.078 [DEBUG] [Thread-16207] [transport.py] [_log()] kex follows: False
2026-04-15T09:04:49.078 [DEBUG] [Thread-16207] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:04:49.078 [DEBUG] [Thread-16207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:04:49.078 [DEBUG] [Thread-16207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:04:49.078 [DEBUG] [Thread-16207] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:04:49.078 [DEBUG] [Thread-16207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:04:49.078 [DEBUG] [Thread-16207] [transport.py] [_log()] Compression: none
2026-04-15T09:04:49.078 [DEBUG] [Thread-16207] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:04:49.139 [DEBUG] [Thread-16207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:04:49.140 [DEBUG] [Thread-16207] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:04:49.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:04:49.140 [DEBUG] [Thread-16207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:04:49.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:04:49.197 [DEBUG] [Thread-16207] [transport.py] [_log()] userauth is OK
2026-04-15T09:04:49.197 [DEBUG] [Thread-16207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:04:49.197 [DEBUG] [Thread-16207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:04:49.198 [DEBUG] [Thread-16207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:04:49.198 [DEBUG] [Thread-16207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:04:49.226 [INFO] [Thread-16207] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:04:49.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:04:49.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:04:50.053 [DEBUG] [Thread-16207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:04:50.054 [DEBUG] [Thread-16207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:04:50.101 [DEBUG] [Thread-16207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:04:50.101 [DEBUG] [Thread-16207] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:04:50.112 [DEBUG] [Thread-16207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:04:50.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:04:50.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')
2026-04-15T09:04:50.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
2026-04-15T09:04:50.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:04:50.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:04:50.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:04:50.149 [DEBUG] [Thread-16207] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:04:52.981 [DEBUG] [Thread-16209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:04:53.690 [DEBUG] [Thread-16210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:05:08.025 [DEBUG] [Thread-16211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:05:17.736 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:05:17.737 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:05:20.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:05:20.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:05:20.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
2026-04-15T09:05:21.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 5, 1), 0.12255, 98.6533, 0.0, 22.7794, 8.62798, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:05:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:05:01
2026-04-15T09:05:21.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:05:22.281 [DEBUG] [Thread-16212] [transport.py] [_log()] starting thread (client mode): 0xf13ed900
2026-04-15T09:05:22.282 [DEBUG] [Thread-16212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:05:22.293 [DEBUG] [Thread-16212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:05:22.293 [INFO] [Thread-16212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:05:22.294 [DEBUG] [Thread-16212] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:05:22.294 [DEBUG] [Thread-16212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:05:22.295 [DEBUG] [Thread-16212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:05:22.295 [DEBUG] [Thread-16212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:05:22.295 [DEBUG] [Thread-16212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:05:22.295 [DEBUG] [Thread-16212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:05:22.295 [DEBUG] [Thread-16212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:05:22.295 [DEBUG] [Thread-16212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:05:22.295 [DEBUG] [Thread-16212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:05:22.295 [DEBUG] [Thread-16212] [transport.py] [_log()] client lang: <none>
2026-04-15T09:05:22.295 [DEBUG] [Thread-16212] [transport.py] [_log()] server lang: <none>
2026-04-15T09:05:22.295 [DEBUG] [Thread-16212] [transport.py] [_log()] kex follows: False
2026-04-15T09:05:22.295 [DEBUG] [Thread-16212] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:05:22.295 [DEBUG] [Thread-16212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:05:22.296 [DEBUG] [Thread-16212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:05:22.296 [DEBUG] [Thread-16212] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:05:22.296 [DEBUG] [Thread-16212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:05:22.296 [DEBUG] [Thread-16212] [transport.py] [_log()] Compression: none
2026-04-15T09:05:22.296 [DEBUG] [Thread-16212] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:05:22.307 [DEBUG] [Thread-16212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:05:22.307 [DEBUG] [Thread-16212] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:05:22.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:05:22.308 [DEBUG] [Thread-16212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:05:22.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:05:22.309 [DEBUG] [Thread-16212] [transport.py] [_log()] userauth is OK
2026-04-15T09:05:22.309 [DEBUG] [Thread-16212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:05:22.309 [DEBUG] [Thread-16212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:05:22.309 [DEBUG] [Thread-16212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:05:22.309 [DEBUG] [Thread-16212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:05:22.326 [INFO] [Thread-16212] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:05:22.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:05:22.890 [DEBUG] [Thread-16212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:05:22.890 [DEBUG] [Thread-16212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:05:22.891 [DEBUG] [Thread-16212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:05:22.931 [DEBUG] [Thread-16212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:05:22.931 [DEBUG] [Thread-16212] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:05:22.934 [DEBUG] [Thread-16212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:05:22.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:05:22.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:05:22.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:05:22.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:05:22.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:05:22.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:05:22.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:05:22.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:05:22.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:05:22.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.295270 -999.00   +8.50  19.91     96   +8.00 1 3 1 3 1   887    0 0.36 -4.34 ----- 19.9 19.9 295.8 24.5 11.6 -2.2 11.2 -2.3 10.5 -1.3 11.0 -0.7
2026-04-15T09:05:22.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:05:22.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:05:22.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.295270
2026-04-15T09:05:22.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:05:22.958 [DEBUG] [Thread-16212] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:05:22.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:05:22.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:05:22.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:05:22.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:05:22.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:05:01', tmtdew=0.12255, humidity=98.6533, cloud=0.0, wind=22.7794, temperature=8.62798, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:05:11.328', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:05:23.055 [DEBUG] [Thread-16215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:05:23.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:05:23.212 [DEBUG] [Thread-16216] [transport.py] [_log()] starting thread (client mode): 0xf13307f0
2026-04-15T09:05:23.213 [DEBUG] [Thread-16216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:05:23.226 [DEBUG] [Thread-16216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:05:23.227 [INFO] [Thread-16216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:05:23.234 [DEBUG] [Thread-16216] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:05:23.234 [DEBUG] [Thread-16216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:05:23.234 [DEBUG] [Thread-16216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:05:23.234 [DEBUG] [Thread-16216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:05:23.234 [DEBUG] [Thread-16216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:05:23.234 [DEBUG] [Thread-16216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:05:23.234 [DEBUG] [Thread-16216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:05:23.235 [DEBUG] [Thread-16216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:05:23.235 [DEBUG] [Thread-16216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:05:23.235 [DEBUG] [Thread-16216] [transport.py] [_log()] client lang: <none>
2026-04-15T09:05:23.235 [DEBUG] [Thread-16216] [transport.py] [_log()] server lang: <none>
2026-04-15T09:05:23.235 [DEBUG] [Thread-16216] [transport.py] [_log()] kex follows: False
2026-04-15T09:05:23.235 [DEBUG] [Thread-16216] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:05:23.235 [DEBUG] [Thread-16216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:05:23.235 [DEBUG] [Thread-16216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:05:23.235 [DEBUG] [Thread-16216] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:05:23.235 [DEBUG] [Thread-16216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:05:23.235 [DEBUG] [Thread-16216] [transport.py] [_log()] Compression: none
2026-04-15T09:05:23.236 [DEBUG] [Thread-16216] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:05:23.292 [DEBUG] [Thread-16216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:05:23.293 [DEBUG] [Thread-16216] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:05:23.293 [DEBUG] [Thread-16216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:05:23.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:05:23.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:05:23.349 [DEBUG] [Thread-16216] [transport.py] [_log()] userauth is OK
2026-04-15T09:05:23.349 [DEBUG] [Thread-16216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:05:23.349 [DEBUG] [Thread-16216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:05:23.350 [DEBUG] [Thread-16216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:05:23.350 [DEBUG] [Thread-16216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:05:23.375 [INFO] [Thread-16216] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:05:23.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:05:23.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:05:24.220 [DEBUG] [Thread-16216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:05:24.220 [DEBUG] [Thread-16216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:05:24.268 [DEBUG] [Thread-16216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:05:24.268 [DEBUG] [Thread-16216] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:05:24.280 [DEBUG] [Thread-16216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:05:24.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:05:24.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')
2026-04-15T09:05:24.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
2026-04-15T09:05:24.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:05:24.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:05:24.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:05:24.315 [DEBUG] [Thread-16216] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:05:38.093 [DEBUG] [Thread-16218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:05:53.125 [DEBUG] [Thread-16219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:05:53.784 [DEBUG] [Thread-16220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:05:54.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:05:54.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:05:54.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
2026-04-15T09:05:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 5, 36), 0.25524, 98.2396, 0.0, 19.3723, 9.28881, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:05:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:05:36
2026-04-15T09:05:55.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:05:56.419 [DEBUG] [Thread-16221] [transport.py] [_log()] starting thread (client mode): 0xf13ec190
2026-04-15T09:05:56.419 [DEBUG] [Thread-16221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:05:56.437 [DEBUG] [Thread-16221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:05:56.438 [INFO] [Thread-16221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:05:56.440 [DEBUG] [Thread-16221] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:05:56.440 [DEBUG] [Thread-16221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] client lang: <none>
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] server lang: <none>
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] kex follows: False
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:05:56.441 [DEBUG] [Thread-16221] [transport.py] [_log()] Compression: none
2026-04-15T09:05:56.442 [DEBUG] [Thread-16221] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:05:56.457 [DEBUG] [Thread-16221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:05:56.457 [DEBUG] [Thread-16221] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:05:56.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:05:56.458 [DEBUG] [Thread-16221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:05:56.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:05:56.459 [DEBUG] [Thread-16221] [transport.py] [_log()] userauth is OK
2026-04-15T09:05:56.459 [DEBUG] [Thread-16221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:05:56.459 [DEBUG] [Thread-16221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:05:56.459 [DEBUG] [Thread-16221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:05:56.459 [DEBUG] [Thread-16221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:05:56.472 [INFO] [Thread-16221] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:05:56.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:05:57.048 [DEBUG] [Thread-16221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:05:57.048 [DEBUG] [Thread-16221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:05:57.048 [DEBUG] [Thread-16221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:05:57.089 [DEBUG] [Thread-16221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:05:57.089 [DEBUG] [Thread-16221] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:05:57.093 [DEBUG] [Thread-16221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:05:57.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:05:57.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:05:57.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:05:57.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:05:57.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:05:57.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:05:57.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:05:57.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:05:57.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:05:57.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.295617 -999.00   +8.60  15.69     97   +8.20 1 3 1 3 1   887    0 0.36 -4.03 ----- 15.7 15.7 301.4 22.7 11.8 -1.5 11.3 -1.5 10.6 -1.4 11.1 -1.0
2026-04-15T09:05:57.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:05:57.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:05:57.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.295617
2026-04-15T09:05:57.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:05:57.117 [DEBUG] [Thread-16221] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:05:57.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:05:57.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:05:57.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:05:57.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:05:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:05:36', tmtdew=0.25524, humidity=98.2396, cloud=0.0, wind=19.3723, temperature=9.28881, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:05:41.309', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:05:57.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:05:57.370 [DEBUG] [Thread-16224] [transport.py] [_log()] starting thread (client mode): 0xf13efb80
2026-04-15T09:05:57.370 [DEBUG] [Thread-16224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:05:57.384 [DEBUG] [Thread-16224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:05:57.384 [INFO] [Thread-16224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:05:57.391 [DEBUG] [Thread-16224] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:05:57.391 [DEBUG] [Thread-16224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:05:57.391 [DEBUG] [Thread-16224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:05:57.392 [DEBUG] [Thread-16224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:05:57.392 [DEBUG] [Thread-16224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:05:57.392 [DEBUG] [Thread-16224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:05:57.392 [DEBUG] [Thread-16224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:05:57.392 [DEBUG] [Thread-16224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:05:57.392 [DEBUG] [Thread-16224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:05:57.392 [DEBUG] [Thread-16224] [transport.py] [_log()] client lang: <none>
2026-04-15T09:05:57.392 [DEBUG] [Thread-16224] [transport.py] [_log()] server lang: <none>
2026-04-15T09:05:57.392 [DEBUG] [Thread-16224] [transport.py] [_log()] kex follows: False
2026-04-15T09:05:57.392 [DEBUG] [Thread-16224] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:05:57.392 [DEBUG] [Thread-16224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:05:57.393 [DEBUG] [Thread-16224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:05:57.393 [DEBUG] [Thread-16224] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:05:57.393 [DEBUG] [Thread-16224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:05:57.393 [DEBUG] [Thread-16224] [transport.py] [_log()] Compression: none
2026-04-15T09:05:57.393 [DEBUG] [Thread-16224] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:05:57.448 [DEBUG] [Thread-16224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:05:57.448 [DEBUG] [Thread-16224] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:05:57.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:05:57.450 [DEBUG] [Thread-16224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:05:57.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:05:57.505 [DEBUG] [Thread-16224] [transport.py] [_log()] userauth is OK
2026-04-15T09:05:57.505 [DEBUG] [Thread-16224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:05:57.506 [DEBUG] [Thread-16224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:05:57.506 [DEBUG] [Thread-16224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:05:57.506 [DEBUG] [Thread-16224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:05:57.534 [INFO] [Thread-16224] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:05:57.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:05:57.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:05:58.366 [DEBUG] [Thread-16224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:05:58.367 [DEBUG] [Thread-16224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:05:58.414 [DEBUG] [Thread-16224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:05:58.414 [DEBUG] [Thread-16224] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:05:58.423 [DEBUG] [Thread-16224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:05:58.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:05:58.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')
2026-04-15T09:05:58.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
2026-04-15T09:05:58.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:05:58.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:05:58.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:05:58.459 [DEBUG] [Thread-16224] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:06:08.156 [DEBUG] [Thread-16226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:06:17.874 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:06:17.875 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:06:23.203 [DEBUG] [Thread-16227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:06:28.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:06:28.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:06:28.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
2026-04-15T09:06:29.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 6, 11), 0.182605, 98.5866, 0.0, 16.2335, 8.77781, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:06:29.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:06:11
2026-04-15T09:06:30.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:06:30.575 [DEBUG] [Thread-16228] [transport.py] [_log()] starting thread (client mode): 0xf13fe410
2026-04-15T09:06:30.575 [DEBUG] [Thread-16228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:06:30.593 [DEBUG] [Thread-16228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:06:30.593 [INFO] [Thread-16228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:06:30.596 [DEBUG] [Thread-16228] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:06:30.596 [DEBUG] [Thread-16228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:06:30.596 [DEBUG] [Thread-16228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:06:30.596 [DEBUG] [Thread-16228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:06:30.596 [DEBUG] [Thread-16228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:06:30.596 [DEBUG] [Thread-16228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:06:30.596 [DEBUG] [Thread-16228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:06:30.596 [DEBUG] [Thread-16228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:06:30.596 [DEBUG] [Thread-16228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:06:30.596 [DEBUG] [Thread-16228] [transport.py] [_log()] client lang: <none>
2026-04-15T09:06:30.596 [DEBUG] [Thread-16228] [transport.py] [_log()] server lang: <none>
2026-04-15T09:06:30.597 [DEBUG] [Thread-16228] [transport.py] [_log()] kex follows: False
2026-04-15T09:06:30.597 [DEBUG] [Thread-16228] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:06:30.597 [DEBUG] [Thread-16228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:06:30.597 [DEBUG] [Thread-16228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:06:30.597 [DEBUG] [Thread-16228] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:06:30.597 [DEBUG] [Thread-16228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:06:30.597 [DEBUG] [Thread-16228] [transport.py] [_log()] Compression: none
2026-04-15T09:06:30.597 [DEBUG] [Thread-16228] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:06:30.613 [DEBUG] [Thread-16228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:06:30.613 [DEBUG] [Thread-16228] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:06:30.614 [DEBUG] [Thread-16228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:06:30.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:06:30.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:06:30.615 [DEBUG] [Thread-16228] [transport.py] [_log()] userauth is OK
2026-04-15T09:06:30.615 [DEBUG] [Thread-16228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:06:30.615 [DEBUG] [Thread-16228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:06:30.615 [DEBUG] [Thread-16228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:06:30.615 [DEBUG] [Thread-16228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:06:30.646 [INFO] [Thread-16228] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:06:30.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:06:31.232 [DEBUG] [Thread-16228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:06:31.232 [DEBUG] [Thread-16228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:06:31.233 [DEBUG] [Thread-16228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:06:31.273 [DEBUG] [Thread-16228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:06:31.273 [DEBUG] [Thread-16228] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:06:31.275 [DEBUG] [Thread-16228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:06:31.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:06:31.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:06:31.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:06:31.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:06:31.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:06:31.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:06:31.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:06:31.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:06:31.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:06:31.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.295965 -999.00   +8.60  20.95     96   +8.10 1 3 1 3 1   887    0 0.37 -3.54 ----- 20.9 20.9 292.0 25.6 11.8 -2.8 11.3 -2.1 10.6 -1.5 11.1 -1.5
2026-04-15T09:06:31.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:06:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:06:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.295965
2026-04-15T09:06:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:06:31.301 [DEBUG] [Thread-16228] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:06:31.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:06:31.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:06:31.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:06:31.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:06:31.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:06:11', tmtdew=0.182605, humidity=98.5866, cloud=0.0, wind=16.2335, temperature=8.77781, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:06:11.376', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:06:31.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:06:31.565 [DEBUG] [Thread-16231] [transport.py] [_log()] starting thread (client mode): 0xf13fdab0
2026-04-15T09:06:31.565 [DEBUG] [Thread-16231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:06:31.582 [DEBUG] [Thread-16231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:06:31.582 [INFO] [Thread-16231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:06:31.590 [DEBUG] [Thread-16231] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:06:31.590 [DEBUG] [Thread-16231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:06:31.590 [DEBUG] [Thread-16231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:06:31.590 [DEBUG] [Thread-16231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:06:31.591 [DEBUG] [Thread-16231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:06:31.591 [DEBUG] [Thread-16231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:06:31.591 [DEBUG] [Thread-16231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:06:31.591 [DEBUG] [Thread-16231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:06:31.591 [DEBUG] [Thread-16231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:06:31.591 [DEBUG] [Thread-16231] [transport.py] [_log()] client lang: <none>
2026-04-15T09:06:31.591 [DEBUG] [Thread-16231] [transport.py] [_log()] server lang: <none>
2026-04-15T09:06:31.591 [DEBUG] [Thread-16231] [transport.py] [_log()] kex follows: False
2026-04-15T09:06:31.591 [DEBUG] [Thread-16231] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:06:31.591 [DEBUG] [Thread-16231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:06:31.591 [DEBUG] [Thread-16231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:06:31.591 [DEBUG] [Thread-16231] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:06:31.592 [DEBUG] [Thread-16231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:06:31.592 [DEBUG] [Thread-16231] [transport.py] [_log()] Compression: none
2026-04-15T09:06:31.592 [DEBUG] [Thread-16231] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:06:31.648 [DEBUG] [Thread-16231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:06:31.649 [DEBUG] [Thread-16231] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:06:31.649 [DEBUG] [Thread-16231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:06:31.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:06:31.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:06:31.706 [DEBUG] [Thread-16231] [transport.py] [_log()] userauth is OK
2026-04-15T09:06:31.707 [DEBUG] [Thread-16231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:06:31.707 [DEBUG] [Thread-16231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:06:31.707 [DEBUG] [Thread-16231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:06:31.707 [DEBUG] [Thread-16231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:06:31.733 [INFO] [Thread-16231] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:06:31.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:06:31.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:06:32.544 [DEBUG] [Thread-16231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:06:32.545 [DEBUG] [Thread-16231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:06:32.593 [DEBUG] [Thread-16231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:06:32.593 [DEBUG] [Thread-16231] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:06:32.602 [DEBUG] [Thread-16231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:06:32.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:06:32.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')
2026-04-15T09:06:32.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
2026-04-15T09:06:32.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:06:32.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:06:32.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:06:32.638 [DEBUG] [Thread-16231] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:06:38.234 [DEBUG] [Thread-16233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:06:53.277 [DEBUG] [Thread-16234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:06:53.876 [DEBUG] [Thread-16235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:07:02.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:07:02.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:07:02.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:07:03.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 6, 48), 0.26038, 98.206, 0.0, 18.8784, 9.3549, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:07:03.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:06:48
2026-04-15T09:07:04.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:07:04.637 [DEBUG] [Thread-16236] [transport.py] [_log()] starting thread (client mode): 0xf1334940
2026-04-15T09:07:04.637 [DEBUG] [Thread-16236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:07:04.655 [DEBUG] [Thread-16236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:07:04.655 [INFO] [Thread-16236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:07:04.656 [DEBUG] [Thread-16236] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:07:04.656 [DEBUG] [Thread-16236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:07:04.656 [DEBUG] [Thread-16236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:07:04.656 [DEBUG] [Thread-16236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:07:04.656 [DEBUG] [Thread-16236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:07:04.657 [DEBUG] [Thread-16236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:07:04.657 [DEBUG] [Thread-16236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:07:04.657 [DEBUG] [Thread-16236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:07:04.657 [DEBUG] [Thread-16236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:07:04.657 [DEBUG] [Thread-16236] [transport.py] [_log()] client lang: <none>
2026-04-15T09:07:04.657 [DEBUG] [Thread-16236] [transport.py] [_log()] server lang: <none>
2026-04-15T09:07:04.657 [DEBUG] [Thread-16236] [transport.py] [_log()] kex follows: False
2026-04-15T09:07:04.657 [DEBUG] [Thread-16236] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:07:04.657 [DEBUG] [Thread-16236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:07:04.657 [DEBUG] [Thread-16236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:07:04.657 [DEBUG] [Thread-16236] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:07:04.657 [DEBUG] [Thread-16236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:07:04.657 [DEBUG] [Thread-16236] [transport.py] [_log()] Compression: none
2026-04-15T09:07:04.657 [DEBUG] [Thread-16236] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:07:04.665 [DEBUG] [Thread-16236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:07:04.665 [DEBUG] [Thread-16236] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:07:04.665 [DEBUG] [Thread-16236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:07:04.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:07:04.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:07:04.666 [DEBUG] [Thread-16236] [transport.py] [_log()] userauth is OK
2026-04-15T09:07:04.666 [DEBUG] [Thread-16236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:07:04.666 [DEBUG] [Thread-16236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:07:04.667 [DEBUG] [Thread-16236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:07:04.667 [DEBUG] [Thread-16236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:07:04.679 [INFO] [Thread-16236] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:07:04.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:07:05.265 [DEBUG] [Thread-16236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:07:05.266 [DEBUG] [Thread-16236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:07:05.266 [DEBUG] [Thread-16236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:07:05.306 [DEBUG] [Thread-16236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:07:05.306 [DEBUG] [Thread-16236] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:07:05.309 [DEBUG] [Thread-16236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:07:05.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:07:05.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:07:05.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:07:05.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:07:05.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:07:05.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:07:05.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:07:05.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:07:05.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:07:05.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.296312 -999.00   +8.50  20.07     96   +8.10 1 3 1 3 1   887    0 0.39 -2.88 ----- 20.1 20.1 303.8 25.4 11.7 -2.5 11.3 -2.5 10.5 -1.5 11.0 -1.2
2026-04-15T09:07:05.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:07:05.335 [DEBUG] [Thread-16236] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:07:05.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:07:05.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.296312
2026-04-15T09:07:05.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:07:05.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:07:05.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:07:05.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:07:05.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:07:05.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:06:48', tmtdew=0.26038, humidity=98.206, cloud=0.0, wind=18.8784, temperature=9.3549, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:06:41.357', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:07:05.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:07:05.569 [DEBUG] [Thread-16239] [transport.py] [_log()] starting thread (client mode): 0xee9048e0
2026-04-15T09:07:05.569 [DEBUG] [Thread-16239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:07:05.588 [DEBUG] [Thread-16239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:07:05.588 [INFO] [Thread-16239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:07:05.598 [DEBUG] [Thread-16239] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:07:05.598 [DEBUG] [Thread-16239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:07:05.598 [DEBUG] [Thread-16239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:07:05.598 [DEBUG] [Thread-16239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:07:05.598 [DEBUG] [Thread-16239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:07:05.598 [DEBUG] [Thread-16239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:07:05.598 [DEBUG] [Thread-16239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:07:05.598 [DEBUG] [Thread-16239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:07:05.599 [DEBUG] [Thread-16239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:07:05.599 [DEBUG] [Thread-16239] [transport.py] [_log()] client lang: <none>
2026-04-15T09:07:05.599 [DEBUG] [Thread-16239] [transport.py] [_log()] server lang: <none>
2026-04-15T09:07:05.599 [DEBUG] [Thread-16239] [transport.py] [_log()] kex follows: False
2026-04-15T09:07:05.599 [DEBUG] [Thread-16239] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:07:05.599 [DEBUG] [Thread-16239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:07:05.599 [DEBUG] [Thread-16239] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:07:05.599 [DEBUG] [Thread-16239] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:07:05.599 [DEBUG] [Thread-16239] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:07:05.599 [DEBUG] [Thread-16239] [transport.py] [_log()] Compression: none
2026-04-15T09:07:05.599 [DEBUG] [Thread-16239] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:07:05.652 [DEBUG] [Thread-16239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:07:05.652 [DEBUG] [Thread-16239] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:07:05.653 [DEBUG] [Thread-16239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:07:05.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:07:05.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:07:05.709 [DEBUG] [Thread-16239] [transport.py] [_log()] userauth is OK
2026-04-15T09:07:05.709 [DEBUG] [Thread-16239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:07:05.709 [DEBUG] [Thread-16239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:07:05.709 [DEBUG] [Thread-16239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:07:05.710 [DEBUG] [Thread-16239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:07:05.736 [INFO] [Thread-16239] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:07:05.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:07:05.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:07:06.613 [DEBUG] [Thread-16239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:07:06.614 [DEBUG] [Thread-16239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:07:06.662 [DEBUG] [Thread-16239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:07:06.662 [DEBUG] [Thread-16239] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:07:06.671 [DEBUG] [Thread-16239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:07:06.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:07:06.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')
2026-04-15T09:07:06.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
2026-04-15T09:07:06.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:07:06.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:07:06.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:07:06.710 [DEBUG] [Thread-16239] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:07:08.311 [DEBUG] [Thread-16241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:07:18.015 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:07:18.016 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:07:23.355 [DEBUG] [Thread-16242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:07:36.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:07:36.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:07:36.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
2026-04-15T09:07:38.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 7, 23), 0.17024, 98.6693, 0.0, 17.0442, 8.9938, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:07:38.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:07:23
2026-04-15T09:07:38.387 [DEBUG] [Thread-16243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:07:38.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:07:38.892 [DEBUG] [Thread-16244] [transport.py] [_log()] starting thread (client mode): 0xf13fe140
2026-04-15T09:07:38.892 [DEBUG] [Thread-16244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:07:38.903 [DEBUG] [Thread-16244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:07:38.903 [INFO] [Thread-16244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:07:38.906 [DEBUG] [Thread-16244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:07:38.906 [DEBUG] [Thread-16244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:07:38.906 [DEBUG] [Thread-16244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:07:38.906 [DEBUG] [Thread-16244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:07:38.906 [DEBUG] [Thread-16244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:07:38.906 [DEBUG] [Thread-16244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:07:38.907 [DEBUG] [Thread-16244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:07:38.907 [DEBUG] [Thread-16244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:07:38.907 [DEBUG] [Thread-16244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:07:38.907 [DEBUG] [Thread-16244] [transport.py] [_log()] client lang: <none>
2026-04-15T09:07:38.907 [DEBUG] [Thread-16244] [transport.py] [_log()] server lang: <none>
2026-04-15T09:07:38.907 [DEBUG] [Thread-16244] [transport.py] [_log()] kex follows: False
2026-04-15T09:07:38.907 [DEBUG] [Thread-16244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:07:38.907 [DEBUG] [Thread-16244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:07:38.907 [DEBUG] [Thread-16244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:07:38.907 [DEBUG] [Thread-16244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:07:38.907 [DEBUG] [Thread-16244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:07:38.908 [DEBUG] [Thread-16244] [transport.py] [_log()] Compression: none
2026-04-15T09:07:38.908 [DEBUG] [Thread-16244] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:07:38.924 [DEBUG] [Thread-16244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:07:38.924 [DEBUG] [Thread-16244] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:07:38.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:07:38.925 [DEBUG] [Thread-16244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:07:38.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:07:38.926 [DEBUG] [Thread-16244] [transport.py] [_log()] userauth is OK
2026-04-15T09:07:38.926 [DEBUG] [Thread-16244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:07:38.926 [DEBUG] [Thread-16244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:07:38.926 [DEBUG] [Thread-16244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:07:38.927 [DEBUG] [Thread-16244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:07:38.950 [INFO] [Thread-16244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:07:38.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:07:39.532 [DEBUG] [Thread-16244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:07:39.532 [DEBUG] [Thread-16244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:07:39.533 [DEBUG] [Thread-16244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:07:39.573 [DEBUG] [Thread-16244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:07:39.573 [DEBUG] [Thread-16244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:07:39.576 [DEBUG] [Thread-16244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:07:39.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:07:39.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:07:39.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:07:39.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:07:39.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:07:39.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:07:39.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:07:39.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:07:39.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:07:39.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.296659 -999.00   +8.60  18.35     96   +8.10 1 3 1 3 1   887    0 0.41 -2.60 ----- 18.4 18.4 299.0 23.5 11.8 -2.4 11.3 -2.1 10.6 -1.5 11.0 -1.2
2026-04-15T09:07:39.607 [DEBUG] [Thread-16244] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:07:39.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:07:39.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:07:39.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.296659
2026-04-15T09:07:39.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:07:39.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:07:39.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:07:39.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:07:39.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:07:39.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:07:23', tmtdew=0.17024, humidity=98.6693, cloud=0.0, wind=17.0442, temperature=8.9938, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:07:11.338', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:07:39.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:07:39.843 [DEBUG] [Thread-16247] [transport.py] [_log()] starting thread (client mode): 0xf13fdc00
2026-04-15T09:07:39.843 [DEBUG] [Thread-16247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:07:39.857 [DEBUG] [Thread-16247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:07:39.858 [INFO] [Thread-16247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:07:39.865 [DEBUG] [Thread-16247] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:07:39.865 [DEBUG] [Thread-16247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:07:39.865 [DEBUG] [Thread-16247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:07:39.865 [DEBUG] [Thread-16247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:07:39.865 [DEBUG] [Thread-16247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:07:39.865 [DEBUG] [Thread-16247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:07:39.865 [DEBUG] [Thread-16247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:07:39.865 [DEBUG] [Thread-16247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:07:39.865 [DEBUG] [Thread-16247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:07:39.866 [DEBUG] [Thread-16247] [transport.py] [_log()] client lang: <none>
2026-04-15T09:07:39.866 [DEBUG] [Thread-16247] [transport.py] [_log()] server lang: <none>
2026-04-15T09:07:39.866 [DEBUG] [Thread-16247] [transport.py] [_log()] kex follows: False
2026-04-15T09:07:39.866 [DEBUG] [Thread-16247] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:07:39.866 [DEBUG] [Thread-16247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:07:39.866 [DEBUG] [Thread-16247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:07:39.866 [DEBUG] [Thread-16247] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:07:39.866 [DEBUG] [Thread-16247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:07:39.866 [DEBUG] [Thread-16247] [transport.py] [_log()] Compression: none
2026-04-15T09:07:39.866 [DEBUG] [Thread-16247] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:07:39.925 [DEBUG] [Thread-16247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:07:39.925 [DEBUG] [Thread-16247] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:07:39.926 [DEBUG] [Thread-16247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:07:39.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:07:39.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:07:39.981 [DEBUG] [Thread-16247] [transport.py] [_log()] userauth is OK
2026-04-15T09:07:39.981 [DEBUG] [Thread-16247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:07:39.981 [DEBUG] [Thread-16247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:07:39.981 [DEBUG] [Thread-16247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:07:39.981 [DEBUG] [Thread-16247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:07:40.006 [INFO] [Thread-16247] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:07:40.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:07:40.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:07:40.880 [DEBUG] [Thread-16247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:07:40.880 [DEBUG] [Thread-16247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:07:40.930 [DEBUG] [Thread-16247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:07:40.930 [DEBUG] [Thread-16247] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:07:40.939 [DEBUG] [Thread-16247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:07:40.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:07:40.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')
2026-04-15T09:07:40.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
2026-04-15T09:07:40.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:07:40.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:07:40.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:07:40.973 [DEBUG] [Thread-16247] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:07:53.417 [DEBUG] [Thread-16249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:07:53.982 [DEBUG] [Thread-16250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:08:08.461 [DEBUG] [Thread-16251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:08:10.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:08:10.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:08:10.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
2026-04-15T09:08:12.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 7, 59), 0.177655, 98.6194, 0.0, 16.4974, 8.82759, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:08:12.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:07:59
2026-04-15T09:08:12.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:08:13.075 [DEBUG] [Thread-16252] [transport.py] [_log()] starting thread (client mode): 0xf13fd9f0
2026-04-15T09:08:13.075 [DEBUG] [Thread-16252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:08:13.093 [DEBUG] [Thread-16252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:08:13.094 [INFO] [Thread-16252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:08:13.095 [DEBUG] [Thread-16252] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:08:13.095 [DEBUG] [Thread-16252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:08:13.095 [DEBUG] [Thread-16252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:08:13.095 [DEBUG] [Thread-16252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:08:13.096 [DEBUG] [Thread-16252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:08:13.096 [DEBUG] [Thread-16252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:08:13.096 [DEBUG] [Thread-16252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:08:13.096 [DEBUG] [Thread-16252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:08:13.096 [DEBUG] [Thread-16252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:08:13.096 [DEBUG] [Thread-16252] [transport.py] [_log()] client lang: <none>
2026-04-15T09:08:13.096 [DEBUG] [Thread-16252] [transport.py] [_log()] server lang: <none>
2026-04-15T09:08:13.096 [DEBUG] [Thread-16252] [transport.py] [_log()] kex follows: False
2026-04-15T09:08:13.096 [DEBUG] [Thread-16252] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:08:13.096 [DEBUG] [Thread-16252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:08:13.096 [DEBUG] [Thread-16252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:08:13.097 [DEBUG] [Thread-16252] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:08:13.097 [DEBUG] [Thread-16252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:08:13.097 [DEBUG] [Thread-16252] [transport.py] [_log()] Compression: none
2026-04-15T09:08:13.097 [DEBUG] [Thread-16252] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:08:13.108 [DEBUG] [Thread-16252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:08:13.108 [DEBUG] [Thread-16252] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:08:13.109 [DEBUG] [Thread-16252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:08:13.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:08:13.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:08:13.110 [DEBUG] [Thread-16252] [transport.py] [_log()] userauth is OK
2026-04-15T09:08:13.110 [DEBUG] [Thread-16252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:08:13.110 [DEBUG] [Thread-16252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:08:13.110 [DEBUG] [Thread-16252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:08:13.110 [DEBUG] [Thread-16252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:08:13.126 [INFO] [Thread-16252] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:08:13.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:08:13.733 [DEBUG] [Thread-16252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:08:13.734 [DEBUG] [Thread-16252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:08:13.734 [DEBUG] [Thread-16252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:08:13.775 [DEBUG] [Thread-16252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:08:13.775 [DEBUG] [Thread-16252] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:08:13.778 [DEBUG] [Thread-16252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:08:13.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:08:13.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:08:13.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:08:13.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:08:13.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:08:13.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:08:13.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:08:13.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:08:13.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:08:13.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.297006 -999.00   +8.50  17.08     96   +8.10 1 3 1 3 1   887    0 0.40 -2.96 ----- 17.1 17.1 305.4 22.9 11.8 -2.6 11.3 -2.1 10.6 -1.2 11.0 -1.2
2026-04-15T09:08:13.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:08:13.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:08:13.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.297006
2026-04-15T09:08:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:08:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:08:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:08:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:08:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:08:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:07:59', tmtdew=0.177655, humidity=98.6194, cloud=0.0, wind=16.4974, temperature=8.82759, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:07:41.318', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:08:13.797 [DEBUG] [Thread-16252] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:08:14.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:08:14.052 [DEBUG] [Thread-16255] [transport.py] [_log()] starting thread (client mode): 0xf13fd960
2026-04-15T09:08:14.053 [DEBUG] [Thread-16255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:08:14.066 [DEBUG] [Thread-16255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:08:14.066 [INFO] [Thread-16255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:08:14.074 [DEBUG] [Thread-16255] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:08:14.074 [DEBUG] [Thread-16255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:08:14.074 [DEBUG] [Thread-16255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:08:14.074 [DEBUG] [Thread-16255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:08:14.075 [DEBUG] [Thread-16255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:08:14.075 [DEBUG] [Thread-16255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:08:14.075 [DEBUG] [Thread-16255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:08:14.075 [DEBUG] [Thread-16255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:08:14.075 [DEBUG] [Thread-16255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:08:14.075 [DEBUG] [Thread-16255] [transport.py] [_log()] client lang: <none>
2026-04-15T09:08:14.075 [DEBUG] [Thread-16255] [transport.py] [_log()] server lang: <none>
2026-04-15T09:08:14.075 [DEBUG] [Thread-16255] [transport.py] [_log()] kex follows: False
2026-04-15T09:08:14.075 [DEBUG] [Thread-16255] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:08:14.075 [DEBUG] [Thread-16255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:08:14.075 [DEBUG] [Thread-16255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:08:14.075 [DEBUG] [Thread-16255] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:08:14.076 [DEBUG] [Thread-16255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:08:14.076 [DEBUG] [Thread-16255] [transport.py] [_log()] Compression: none
2026-04-15T09:08:14.076 [DEBUG] [Thread-16255] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:08:14.132 [DEBUG] [Thread-16255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:08:14.133 [DEBUG] [Thread-16255] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:08:14.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:08:14.134 [DEBUG] [Thread-16255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:08:14.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:08:14.195 [DEBUG] [Thread-16255] [transport.py] [_log()] userauth is OK
2026-04-15T09:08:14.195 [DEBUG] [Thread-16255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:08:14.195 [DEBUG] [Thread-16255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:08:14.196 [DEBUG] [Thread-16255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:08:14.196 [DEBUG] [Thread-16255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:08:14.221 [INFO] [Thread-16255] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:08:14.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:08:14.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:08:15.064 [DEBUG] [Thread-16255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:08:15.064 [DEBUG] [Thread-16255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:08:15.112 [DEBUG] [Thread-16255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:08:15.112 [DEBUG] [Thread-16255] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:08:15.121 [DEBUG] [Thread-16255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:08:15.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:08:15.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')
2026-04-15T09:08:15.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
2026-04-15T09:08:15.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:08:15.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:08:15.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:08:15.156 [DEBUG] [Thread-16255] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:08:18.154 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:08:18.155 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:08:23.493 [DEBUG] [Thread-16257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:08:38.538 [DEBUG] [Thread-16258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:08:45.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:08:45.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:08:45.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
2026-04-15T09:08:46.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 8, 35), 0.25034, 98.272, 0.0, 18.9842, 9.28834, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:08:46.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:08:35
2026-04-15T09:08:46.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:08:47.297 [DEBUG] [Thread-16259] [transport.py] [_log()] starting thread (client mode): 0xf13347c0
2026-04-15T09:08:47.298 [DEBUG] [Thread-16259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:08:47.313 [DEBUG] [Thread-16259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:08:47.313 [INFO] [Thread-16259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:08:47.315 [DEBUG] [Thread-16259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:08:47.315 [DEBUG] [Thread-16259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:08:47.315 [DEBUG] [Thread-16259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:08:47.315 [DEBUG] [Thread-16259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:08:47.315 [DEBUG] [Thread-16259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:08:47.315 [DEBUG] [Thread-16259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:08:47.315 [DEBUG] [Thread-16259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:08:47.315 [DEBUG] [Thread-16259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:08:47.315 [DEBUG] [Thread-16259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:08:47.316 [DEBUG] [Thread-16259] [transport.py] [_log()] client lang: <none>
2026-04-15T09:08:47.316 [DEBUG] [Thread-16259] [transport.py] [_log()] server lang: <none>
2026-04-15T09:08:47.316 [DEBUG] [Thread-16259] [transport.py] [_log()] kex follows: False
2026-04-15T09:08:47.316 [DEBUG] [Thread-16259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:08:47.316 [DEBUG] [Thread-16259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:08:47.316 [DEBUG] [Thread-16259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:08:47.316 [DEBUG] [Thread-16259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:08:47.316 [DEBUG] [Thread-16259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:08:47.316 [DEBUG] [Thread-16259] [transport.py] [_log()] Compression: none
2026-04-15T09:08:47.316 [DEBUG] [Thread-16259] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:08:47.326 [DEBUG] [Thread-16259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:08:47.326 [DEBUG] [Thread-16259] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:08:47.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:08:47.327 [DEBUG] [Thread-16259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:08:47.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:08:47.328 [DEBUG] [Thread-16259] [transport.py] [_log()] userauth is OK
2026-04-15T09:08:47.328 [DEBUG] [Thread-16259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:08:47.328 [DEBUG] [Thread-16259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:08:47.328 [DEBUG] [Thread-16259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:08:47.328 [DEBUG] [Thread-16259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:08:47.352 [INFO] [Thread-16259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:08:47.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:08:47.935 [DEBUG] [Thread-16259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:08:47.935 [DEBUG] [Thread-16259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:08:47.936 [DEBUG] [Thread-16259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:08:47.977 [DEBUG] [Thread-16259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:08:47.977 [DEBUG] [Thread-16259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:08:47.979 [DEBUG] [Thread-16259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:08:47.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:08:47.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:08:47.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:08:47.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:08:47.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:08:47.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:08:47.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:08:47.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:08:47.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:08:47.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.297701 -999.00   +8.50  18.50     96   +8.00 1 3 1 3 1   887    0 0.40 -2.30 ----- 18.5 18.5 311.2 29.5 11.6 -2.8 11.2 -2.7 10.6 -2.2 11.0 -1.6
2026-04-15T09:08:47.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:08:47.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:08:47.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.297701
2026-04-15T09:08:47.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:08:47.998 [DEBUG] [Thread-16259] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:08:47.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:08:48.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:08:48.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:08:48.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:08:48.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:08:35', tmtdew=0.25034, humidity=98.272, cloud=0.0, wind=18.9842, temperature=9.28834, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:08:41.366', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:08:48.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:08:48.256 [DEBUG] [Thread-16262] [transport.py] [_log()] starting thread (client mode): 0xf13efb50
2026-04-15T09:08:48.256 [DEBUG] [Thread-16262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:08:48.270 [DEBUG] [Thread-16262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:08:48.270 [INFO] [Thread-16262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:08:48.277 [DEBUG] [Thread-16262] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:08:48.277 [DEBUG] [Thread-16262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:08:48.278 [DEBUG] [Thread-16262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:08:48.278 [DEBUG] [Thread-16262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:08:48.278 [DEBUG] [Thread-16262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:08:48.278 [DEBUG] [Thread-16262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:08:48.278 [DEBUG] [Thread-16262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:08:48.278 [DEBUG] [Thread-16262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:08:48.278 [DEBUG] [Thread-16262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:08:48.278 [DEBUG] [Thread-16262] [transport.py] [_log()] client lang: <none>
2026-04-15T09:08:48.278 [DEBUG] [Thread-16262] [transport.py] [_log()] server lang: <none>
2026-04-15T09:08:48.278 [DEBUG] [Thread-16262] [transport.py] [_log()] kex follows: False
2026-04-15T09:08:48.278 [DEBUG] [Thread-16262] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:08:48.278 [DEBUG] [Thread-16262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:08:48.279 [DEBUG] [Thread-16262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:08:48.279 [DEBUG] [Thread-16262] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:08:48.279 [DEBUG] [Thread-16262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:08:48.279 [DEBUG] [Thread-16262] [transport.py] [_log()] Compression: none
2026-04-15T09:08:48.279 [DEBUG] [Thread-16262] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:08:48.341 [DEBUG] [Thread-16262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:08:48.341 [DEBUG] [Thread-16262] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:08:48.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:08:48.342 [DEBUG] [Thread-16262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:08:48.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:08:48.397 [DEBUG] [Thread-16262] [transport.py] [_log()] userauth is OK
2026-04-15T09:08:48.397 [DEBUG] [Thread-16262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:08:48.397 [DEBUG] [Thread-16262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:08:48.397 [DEBUG] [Thread-16262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:08:48.397 [DEBUG] [Thread-16262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:08:48.422 [INFO] [Thread-16262] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:08:48.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:08:48.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:08:49.296 [DEBUG] [Thread-16262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:08:49.297 [DEBUG] [Thread-16262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:08:49.345 [DEBUG] [Thread-16262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:08:49.345 [DEBUG] [Thread-16262] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:08:49.354 [DEBUG] [Thread-16262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:08:49.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:08:49.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')
2026-04-15T09:08:49.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
2026-04-15T09:08:49.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:08:49.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:08:49.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:08:49.389 [DEBUG] [Thread-16262] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:08:53.570 [DEBUG] [Thread-16264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:08:54.087 [DEBUG] [Thread-16265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:09:08.611 [DEBUG] [Thread-16266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:09:18.293 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:09:18.294 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:09:19.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:09:19.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:09:19.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
2026-04-15T09:09:20.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 9, 10), 0.13262, 98.5861, 0.0, 17.4852, 8.67773, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:09:20.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:09:10
2026-04-15T09:09:21.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:09:21.586 [DEBUG] [Thread-16267] [transport.py] [_log()] starting thread (client mode): 0xee905d50
2026-04-15T09:09:21.586 [DEBUG] [Thread-16267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:09:21.605 [DEBUG] [Thread-16267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:09:21.605 [INFO] [Thread-16267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:09:21.608 [DEBUG] [Thread-16267] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:09:21.608 [DEBUG] [Thread-16267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:09:21.608 [DEBUG] [Thread-16267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:09:21.609 [DEBUG] [Thread-16267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:09:21.609 [DEBUG] [Thread-16267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:09:21.609 [DEBUG] [Thread-16267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:09:21.609 [DEBUG] [Thread-16267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:09:21.609 [DEBUG] [Thread-16267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:09:21.609 [DEBUG] [Thread-16267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:09:21.609 [DEBUG] [Thread-16267] [transport.py] [_log()] client lang: <none>
2026-04-15T09:09:21.609 [DEBUG] [Thread-16267] [transport.py] [_log()] server lang: <none>
2026-04-15T09:09:21.609 [DEBUG] [Thread-16267] [transport.py] [_log()] kex follows: False
2026-04-15T09:09:21.609 [DEBUG] [Thread-16267] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:09:21.609 [DEBUG] [Thread-16267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:09:21.609 [DEBUG] [Thread-16267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:09:21.610 [DEBUG] [Thread-16267] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:09:21.610 [DEBUG] [Thread-16267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:09:21.610 [DEBUG] [Thread-16267] [transport.py] [_log()] Compression: none
2026-04-15T09:09:21.610 [DEBUG] [Thread-16267] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:09:21.625 [DEBUG] [Thread-16267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:09:21.625 [DEBUG] [Thread-16267] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:09:21.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:09:21.626 [DEBUG] [Thread-16267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:09:21.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:09:21.627 [DEBUG] [Thread-16267] [transport.py] [_log()] userauth is OK
2026-04-15T09:09:21.627 [DEBUG] [Thread-16267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:09:21.627 [DEBUG] [Thread-16267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:09:21.627 [DEBUG] [Thread-16267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:09:21.627 [DEBUG] [Thread-16267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:09:21.645 [INFO] [Thread-16267] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:09:21.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:09:22.311 [DEBUG] [Thread-16267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:09:22.312 [DEBUG] [Thread-16267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:09:22.312 [DEBUG] [Thread-16267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:09:22.352 [DEBUG] [Thread-16267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:09:22.352 [DEBUG] [Thread-16267] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:09:22.355 [DEBUG] [Thread-16267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:09:22.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:09:22.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:09:22.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:09:22.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:09:22.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:09:22.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:09:22.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:09:22.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:09:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:09:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.298048 -999.00   +8.50  20.88     96   +8.00 1 3 1 3 1   887    0 0.43 -2.16 ----- 20.9 20.9 309.0 24.8 11.7 -2.4 11.2 -2.3 10.6 -1.6 11.0 -1.4
2026-04-15T09:09:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:09:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:09:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.298048
2026-04-15T09:09:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:09:22.383 [DEBUG] [Thread-16267] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:09:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:09:22.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:09:22.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:09:22.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:09:22.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:09:10', tmtdew=0.13262, humidity=98.5861, cloud=0.0, wind=17.4852, temperature=8.67773, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:09:11.347', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:09:22.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:09:22.637 [DEBUG] [Thread-16270] [transport.py] [_log()] starting thread (client mode): 0xf13fe020
2026-04-15T09:09:22.637 [DEBUG] [Thread-16270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:09:22.651 [DEBUG] [Thread-16270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:09:22.651 [INFO] [Thread-16270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:09:22.659 [DEBUG] [Thread-16270] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:09:22.659 [DEBUG] [Thread-16270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:09:22.659 [DEBUG] [Thread-16270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:09:22.659 [DEBUG] [Thread-16270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:09:22.659 [DEBUG] [Thread-16270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:09:22.659 [DEBUG] [Thread-16270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:09:22.659 [DEBUG] [Thread-16270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:09:22.659 [DEBUG] [Thread-16270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:09:22.660 [DEBUG] [Thread-16270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:09:22.660 [DEBUG] [Thread-16270] [transport.py] [_log()] client lang: <none>
2026-04-15T09:09:22.660 [DEBUG] [Thread-16270] [transport.py] [_log()] server lang: <none>
2026-04-15T09:09:22.660 [DEBUG] [Thread-16270] [transport.py] [_log()] kex follows: False
2026-04-15T09:09:22.660 [DEBUG] [Thread-16270] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:09:22.660 [DEBUG] [Thread-16270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:09:22.660 [DEBUG] [Thread-16270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:09:22.660 [DEBUG] [Thread-16270] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:09:22.660 [DEBUG] [Thread-16270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:09:22.660 [DEBUG] [Thread-16270] [transport.py] [_log()] Compression: none
2026-04-15T09:09:22.660 [DEBUG] [Thread-16270] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:09:22.718 [DEBUG] [Thread-16270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:09:22.719 [DEBUG] [Thread-16270] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:09:22.719 [DEBUG] [Thread-16270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:09:22.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:09:22.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:09:22.774 [DEBUG] [Thread-16270] [transport.py] [_log()] userauth is OK
2026-04-15T09:09:22.775 [DEBUG] [Thread-16270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:09:22.775 [DEBUG] [Thread-16270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:09:22.775 [DEBUG] [Thread-16270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:09:22.775 [DEBUG] [Thread-16270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:09:22.797 [INFO] [Thread-16270] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:09:22.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:09:22.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:09:23.624 [DEBUG] [Thread-16270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:09:23.625 [DEBUG] [Thread-16270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:09:23.643 [DEBUG] [Thread-16272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:09:23.672 [DEBUG] [Thread-16270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:09:23.672 [DEBUG] [Thread-16270] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:09:23.680 [DEBUG] [Thread-16270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:09:23.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:09:23.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')
2026-04-15T09:09:23.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
2026-04-15T09:09:23.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:09:23.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:09:23.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:09:23.713 [DEBUG] [Thread-16270] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:09:38.689 [DEBUG] [Thread-16273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:09:53.722 [DEBUG] [Thread-16274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:09:53.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:09:53.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:09:53.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
2026-04-15T09:09:54.182 [DEBUG] [Thread-16275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:09:55.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 9, 46), 0.24537, 98.3049, 0.0, 23.5001, 9.28817, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:09:55.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:09:46
2026-04-15T09:09:55.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:09:55.860 [DEBUG] [Thread-16276] [transport.py] [_log()] starting thread (client mode): 0xf13cb520
2026-04-15T09:09:55.860 [DEBUG] [Thread-16276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:09:55.871 [DEBUG] [Thread-16276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:09:55.871 [INFO] [Thread-16276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:09:55.873 [DEBUG] [Thread-16276] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:09:55.873 [DEBUG] [Thread-16276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:09:55.873 [DEBUG] [Thread-16276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:09:55.873 [DEBUG] [Thread-16276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:09:55.873 [DEBUG] [Thread-16276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:09:55.873 [DEBUG] [Thread-16276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:09:55.873 [DEBUG] [Thread-16276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:09:55.874 [DEBUG] [Thread-16276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:09:55.874 [DEBUG] [Thread-16276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:09:55.874 [DEBUG] [Thread-16276] [transport.py] [_log()] client lang: <none>
2026-04-15T09:09:55.874 [DEBUG] [Thread-16276] [transport.py] [_log()] server lang: <none>
2026-04-15T09:09:55.874 [DEBUG] [Thread-16276] [transport.py] [_log()] kex follows: False
2026-04-15T09:09:55.874 [DEBUG] [Thread-16276] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:09:55.874 [DEBUG] [Thread-16276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:09:55.874 [DEBUG] [Thread-16276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:09:55.874 [DEBUG] [Thread-16276] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:09:55.874 [DEBUG] [Thread-16276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:09:55.874 [DEBUG] [Thread-16276] [transport.py] [_log()] Compression: none
2026-04-15T09:09:55.874 [DEBUG] [Thread-16276] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:09:55.884 [DEBUG] [Thread-16276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:09:55.884 [DEBUG] [Thread-16276] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:09:55.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:09:55.885 [DEBUG] [Thread-16276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:09:55.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:09:55.886 [DEBUG] [Thread-16276] [transport.py] [_log()] userauth is OK
2026-04-15T09:09:55.886 [DEBUG] [Thread-16276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:09:55.886 [DEBUG] [Thread-16276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:09:55.886 [DEBUG] [Thread-16276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:09:55.886 [DEBUG] [Thread-16276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:09:55.909 [INFO] [Thread-16276] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:09:55.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:09:56.524 [DEBUG] [Thread-16276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:09:56.524 [DEBUG] [Thread-16276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:09:56.525 [DEBUG] [Thread-16276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:09:56.565 [DEBUG] [Thread-16276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:09:56.565 [DEBUG] [Thread-16276] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:09:56.568 [DEBUG] [Thread-16276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:09:56.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:09:56.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:09:56.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:09:56.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:09:56.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:09:56.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:09:56.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:09:56.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:09:56.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:09:56.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.298395 -999.00   +8.60  19.55     96   +8.10 1 3 1 3 1   887    0 0.42 -2.00 ----- 19.6 19.6 318.0 21.8 11.6 -2.0 11.3 -2.1 10.6 -1.1 11.0 -1.4
2026-04-15T09:09:56.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:09:56.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:09:56.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.298395
2026-04-15T09:09:56.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:09:56.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:09:56.593 [DEBUG] [Thread-16276] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:09:56.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:09:56.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:09:56.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:09:56.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:09:46', tmtdew=0.24537, humidity=98.3049, cloud=0.0, wind=23.5001, temperature=9.28817, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:09:41.328', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:09:56.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:09:56.851 [DEBUG] [Thread-16279] [transport.py] [_log()] starting thread (client mode): 0xf1331870
2026-04-15T09:09:56.851 [DEBUG] [Thread-16279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:09:56.865 [DEBUG] [Thread-16279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:09:56.865 [INFO] [Thread-16279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:09:56.873 [DEBUG] [Thread-16279] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:09:56.873 [DEBUG] [Thread-16279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:09:56.873 [DEBUG] [Thread-16279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:09:56.873 [DEBUG] [Thread-16279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:09:56.873 [DEBUG] [Thread-16279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:09:56.873 [DEBUG] [Thread-16279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:09:56.873 [DEBUG] [Thread-16279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:09:56.873 [DEBUG] [Thread-16279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:09:56.873 [DEBUG] [Thread-16279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:09:56.874 [DEBUG] [Thread-16279] [transport.py] [_log()] client lang: <none>
2026-04-15T09:09:56.874 [DEBUG] [Thread-16279] [transport.py] [_log()] server lang: <none>
2026-04-15T09:09:56.874 [DEBUG] [Thread-16279] [transport.py] [_log()] kex follows: False
2026-04-15T09:09:56.874 [DEBUG] [Thread-16279] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:09:56.874 [DEBUG] [Thread-16279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:09:56.874 [DEBUG] [Thread-16279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:09:56.874 [DEBUG] [Thread-16279] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:09:56.874 [DEBUG] [Thread-16279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:09:56.874 [DEBUG] [Thread-16279] [transport.py] [_log()] Compression: none
2026-04-15T09:09:56.874 [DEBUG] [Thread-16279] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:09:56.932 [DEBUG] [Thread-16279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:09:56.932 [DEBUG] [Thread-16279] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:09:56.933 [DEBUG] [Thread-16279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:09:56.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:09:56.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:09:56.989 [DEBUG] [Thread-16279] [transport.py] [_log()] userauth is OK
2026-04-15T09:09:56.989 [DEBUG] [Thread-16279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:09:56.989 [DEBUG] [Thread-16279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:09:56.989 [DEBUG] [Thread-16279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:09:56.990 [DEBUG] [Thread-16279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:09:57.014 [INFO] [Thread-16279] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:09:57.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:09:57.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:09:57.833 [DEBUG] [Thread-16279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:09:57.833 [DEBUG] [Thread-16279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:09:57.881 [DEBUG] [Thread-16279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:09:57.881 [DEBUG] [Thread-16279] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:09:57.890 [DEBUG] [Thread-16279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:09:57.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:09:57.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')
2026-04-15T09:09:57.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
2026-04-15T09:09:57.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:09:57.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:09:57.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:09:57.925 [DEBUG] [Thread-16279] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:10:08.755 [DEBUG] [Thread-16281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:10:18.435 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:10:18.436 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:10:23.800 [DEBUG] [Thread-16282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:10:27.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:10:27.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:10:27.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
2026-04-15T09:10:29.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 10, 21), 0.17771, 98.6192, 0.0, 20.8559, 8.84402, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:10:29.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:10:21
2026-04-15T09:10:29.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:10:30.062 [DEBUG] [Thread-16283] [transport.py] [_log()] starting thread (client mode): 0xf13fe410
2026-04-15T09:10:30.063 [DEBUG] [Thread-16283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:10:30.082 [DEBUG] [Thread-16283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:10:30.082 [INFO] [Thread-16283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:10:30.085 [DEBUG] [Thread-16283] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:10:30.085 [DEBUG] [Thread-16283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:10:30.085 [DEBUG] [Thread-16283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:10:30.085 [DEBUG] [Thread-16283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:10:30.085 [DEBUG] [Thread-16283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:10:30.086 [DEBUG] [Thread-16283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:10:30.086 [DEBUG] [Thread-16283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:10:30.086 [DEBUG] [Thread-16283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:10:30.086 [DEBUG] [Thread-16283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:10:30.086 [DEBUG] [Thread-16283] [transport.py] [_log()] client lang: <none>
2026-04-15T09:10:30.086 [DEBUG] [Thread-16283] [transport.py] [_log()] server lang: <none>
2026-04-15T09:10:30.086 [DEBUG] [Thread-16283] [transport.py] [_log()] kex follows: False
2026-04-15T09:10:30.086 [DEBUG] [Thread-16283] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:10:30.086 [DEBUG] [Thread-16283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:10:30.086 [DEBUG] [Thread-16283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:10:30.086 [DEBUG] [Thread-16283] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:10:30.087 [DEBUG] [Thread-16283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:10:30.087 [DEBUG] [Thread-16283] [transport.py] [_log()] Compression: none
2026-04-15T09:10:30.087 [DEBUG] [Thread-16283] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:10:30.095 [DEBUG] [Thread-16283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:10:30.095 [DEBUG] [Thread-16283] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:10:30.095 [DEBUG] [Thread-16283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:10:30.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:10:30.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:10:30.096 [DEBUG] [Thread-16283] [transport.py] [_log()] userauth is OK
2026-04-15T09:10:30.097 [DEBUG] [Thread-16283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:10:30.097 [DEBUG] [Thread-16283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:10:30.097 [DEBUG] [Thread-16283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:10:30.097 [DEBUG] [Thread-16283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:10:30.114 [INFO] [Thread-16283] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:10:30.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:10:30.698 [DEBUG] [Thread-16283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:10:30.698 [DEBUG] [Thread-16283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:10:30.699 [DEBUG] [Thread-16283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:10:30.739 [DEBUG] [Thread-16283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:10:30.739 [DEBUG] [Thread-16283] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:10:30.742 [DEBUG] [Thread-16283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:10:30.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:10:30.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:10:30.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:10:30.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:10:30.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:10:30.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:10:30.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:10:30.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:10:30.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:10:30.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.298742 -999.00   +8.40  21.99     96   +8.00 1 3 1 3 1   887    0 0.42 -2.00 ----- 22.0 22.0 308.8 25.8 11.7 -2.2 11.3 -2.0 10.6 -1.2 11.0 -1.0
2026-04-15T09:10:30.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:10:30.766 [DEBUG] [Thread-16283] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:10:30.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:10:30.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.298742
2026-04-15T09:10:30.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:10:30.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:10:30.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:10:30.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:10:30.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:10:30.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:10:21', tmtdew=0.17771, humidity=98.6192, cloud=0.0, wind=20.8559, temperature=8.84402, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:10:11.309', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:10:31.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:10:31.015 [DEBUG] [Thread-16286] [transport.py] [_log()] starting thread (client mode): 0xf13c9ae0
2026-04-15T09:10:31.015 [DEBUG] [Thread-16286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:10:31.030 [DEBUG] [Thread-16286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:10:31.030 [INFO] [Thread-16286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:10:31.037 [DEBUG] [Thread-16286] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:10:31.037 [DEBUG] [Thread-16286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:10:31.037 [DEBUG] [Thread-16286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:10:31.037 [DEBUG] [Thread-16286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:10:31.038 [DEBUG] [Thread-16286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:10:31.038 [DEBUG] [Thread-16286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:10:31.038 [DEBUG] [Thread-16286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:10:31.038 [DEBUG] [Thread-16286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:10:31.038 [DEBUG] [Thread-16286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:10:31.038 [DEBUG] [Thread-16286] [transport.py] [_log()] client lang: <none>
2026-04-15T09:10:31.038 [DEBUG] [Thread-16286] [transport.py] [_log()] server lang: <none>
2026-04-15T09:10:31.038 [DEBUG] [Thread-16286] [transport.py] [_log()] kex follows: False
2026-04-15T09:10:31.038 [DEBUG] [Thread-16286] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:10:31.038 [DEBUG] [Thread-16286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:10:31.038 [DEBUG] [Thread-16286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:10:31.039 [DEBUG] [Thread-16286] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:10:31.039 [DEBUG] [Thread-16286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:10:31.039 [DEBUG] [Thread-16286] [transport.py] [_log()] Compression: none
2026-04-15T09:10:31.039 [DEBUG] [Thread-16286] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:10:31.094 [DEBUG] [Thread-16286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:10:31.095 [DEBUG] [Thread-16286] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:10:31.095 [DEBUG] [Thread-16286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:10:31.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:10:31.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:10:31.151 [DEBUG] [Thread-16286] [transport.py] [_log()] userauth is OK
2026-04-15T09:10:31.151 [DEBUG] [Thread-16286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:10:31.151 [DEBUG] [Thread-16286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:10:31.152 [DEBUG] [Thread-16286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:10:31.152 [DEBUG] [Thread-16286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:10:31.176 [INFO] [Thread-16286] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:10:31.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:10:31.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:10:32.001 [DEBUG] [Thread-16286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:10:32.002 [DEBUG] [Thread-16286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:10:32.049 [DEBUG] [Thread-16286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:10:32.049 [DEBUG] [Thread-16286] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:10:32.060 [DEBUG] [Thread-16286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:10:32.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:10:32.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')
2026-04-15T09:10:32.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
2026-04-15T09:10:32.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:10:32.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:10:32.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:10:32.098 [DEBUG] [Thread-16286] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:10:38.832 [DEBUG] [Thread-16288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:10:53.877 [DEBUG] [Thread-16289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:10:54.287 [DEBUG] [Thread-16290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:11:02.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:11:02.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:11:02.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
2026-04-15T09:11:03.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 10, 21), 0.17771, 98.6192, 0.0, 20.8559, 8.84402, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:11:03.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:10:21
2026-04-15T09:11:03.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:11:04.180 [DEBUG] [Thread-16291] [transport.py] [_log()] starting thread (client mode): 0xee9efdc0
2026-04-15T09:11:04.180 [DEBUG] [Thread-16291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:11:04.199 [DEBUG] [Thread-16291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:11:04.199 [INFO] [Thread-16291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:11:04.202 [DEBUG] [Thread-16291] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:11:04.202 [DEBUG] [Thread-16291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:11:04.202 [DEBUG] [Thread-16291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:11:04.202 [DEBUG] [Thread-16291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:11:04.202 [DEBUG] [Thread-16291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:11:04.202 [DEBUG] [Thread-16291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:11:04.202 [DEBUG] [Thread-16291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:11:04.203 [DEBUG] [Thread-16291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:11:04.203 [DEBUG] [Thread-16291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:11:04.203 [DEBUG] [Thread-16291] [transport.py] [_log()] client lang: <none>
2026-04-15T09:11:04.203 [DEBUG] [Thread-16291] [transport.py] [_log()] server lang: <none>
2026-04-15T09:11:04.203 [DEBUG] [Thread-16291] [transport.py] [_log()] kex follows: False
2026-04-15T09:11:04.203 [DEBUG] [Thread-16291] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:11:04.203 [DEBUG] [Thread-16291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:11:04.203 [DEBUG] [Thread-16291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:11:04.203 [DEBUG] [Thread-16291] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:11:04.203 [DEBUG] [Thread-16291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:11:04.204 [DEBUG] [Thread-16291] [transport.py] [_log()] Compression: none
2026-04-15T09:11:04.204 [DEBUG] [Thread-16291] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:11:04.212 [DEBUG] [Thread-16291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:11:04.212 [DEBUG] [Thread-16291] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:11:04.213 [DEBUG] [Thread-16291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:11:04.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:11:04.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:11:04.214 [DEBUG] [Thread-16291] [transport.py] [_log()] userauth is OK
2026-04-15T09:11:04.214 [DEBUG] [Thread-16291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:11:04.214 [DEBUG] [Thread-16291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:11:04.214 [DEBUG] [Thread-16291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:11:04.214 [DEBUG] [Thread-16291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:11:04.250 [INFO] [Thread-16291] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:11:04.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:11:04.815 [DEBUG] [Thread-16291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:11:04.815 [DEBUG] [Thread-16291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:11:04.816 [DEBUG] [Thread-16291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:11:04.856 [DEBUG] [Thread-16291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:11:04.856 [DEBUG] [Thread-16291] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:11:04.859 [DEBUG] [Thread-16291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:11:04.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:11:04.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:11:04.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:11:04.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:11:04.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:11:04.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:11:04.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:11:04.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:11:04.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:11:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.299090 -999.00   +8.40  17.76     96   +7.90 1 3 1 3 1   887    0 0.42 -1.76 ----- 17.8 17.8 309.6 24.6 11.7 -2.1 11.2 -2.1 10.6 -1.7 11.0 -1.2
2026-04-15T09:11:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:11:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:11:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.299090
2026-04-15T09:11:04.883 [DEBUG] [Thread-16291] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:11:04.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:11:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:11:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:11:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:11:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:11:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:10:21', tmtdew=0.17771, humidity=98.6192, cloud=0.0, wind=20.8559, temperature=8.84402, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:10:41.376', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:11:05.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:11:05.137 [DEBUG] [Thread-16294] [transport.py] [_log()] starting thread (client mode): 0xee9ed840
2026-04-15T09:11:05.137 [DEBUG] [Thread-16294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:11:05.152 [DEBUG] [Thread-16294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:11:05.152 [INFO] [Thread-16294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:11:05.159 [DEBUG] [Thread-16294] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:11:05.159 [DEBUG] [Thread-16294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:11:05.159 [DEBUG] [Thread-16294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:11:05.159 [DEBUG] [Thread-16294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:11:05.159 [DEBUG] [Thread-16294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:11:05.159 [DEBUG] [Thread-16294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:11:05.160 [DEBUG] [Thread-16294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:11:05.160 [DEBUG] [Thread-16294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:11:05.160 [DEBUG] [Thread-16294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:11:05.160 [DEBUG] [Thread-16294] [transport.py] [_log()] client lang: <none>
2026-04-15T09:11:05.160 [DEBUG] [Thread-16294] [transport.py] [_log()] server lang: <none>
2026-04-15T09:11:05.160 [DEBUG] [Thread-16294] [transport.py] [_log()] kex follows: False
2026-04-15T09:11:05.160 [DEBUG] [Thread-16294] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:11:05.160 [DEBUG] [Thread-16294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:11:05.160 [DEBUG] [Thread-16294] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:11:05.160 [DEBUG] [Thread-16294] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:11:05.160 [DEBUG] [Thread-16294] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:11:05.161 [DEBUG] [Thread-16294] [transport.py] [_log()] Compression: none
2026-04-15T09:11:05.161 [DEBUG] [Thread-16294] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:11:05.216 [DEBUG] [Thread-16294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:11:05.217 [DEBUG] [Thread-16294] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:11:05.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:11:05.217 [DEBUG] [Thread-16294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:11:05.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:11:05.273 [DEBUG] [Thread-16294] [transport.py] [_log()] userauth is OK
2026-04-15T09:11:05.273 [DEBUG] [Thread-16294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:11:05.274 [DEBUG] [Thread-16294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:11:05.274 [DEBUG] [Thread-16294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:11:05.274 [DEBUG] [Thread-16294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:11:05.301 [INFO] [Thread-16294] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:11:05.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:11:05.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:11:06.154 [DEBUG] [Thread-16294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:11:06.154 [DEBUG] [Thread-16294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:11:06.203 [DEBUG] [Thread-16294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:11:06.203 [DEBUG] [Thread-16294] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:11:06.211 [DEBUG] [Thread-16294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:11:06.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:11:06.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')
2026-04-15T09:11:06.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
2026-04-15T09:11:06.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:11:06.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:11:06.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:11:06.244 [DEBUG] [Thread-16294] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:11:08.909 [DEBUG] [Thread-16296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:11:18.578 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:11:18.579 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:11:23.953 [DEBUG] [Thread-16297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:11:36.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:11:36.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:11:36.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
2026-04-15T09:11:37.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 10, 57), 0.185155, 98.5693, 0.0, 17.239, 8.77761, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:11:37.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:10:57
2026-04-15T09:11:38.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:11:38.484 [DEBUG] [Thread-16298] [transport.py] [_log()] starting thread (client mode): 0xf13eec20
2026-04-15T09:11:38.484 [DEBUG] [Thread-16298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:11:38.507 [DEBUG] [Thread-16298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:11:38.507 [INFO] [Thread-16298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:11:38.509 [DEBUG] [Thread-16298] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:11:38.509 [DEBUG] [Thread-16298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:11:38.509 [DEBUG] [Thread-16298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:11:38.509 [DEBUG] [Thread-16298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:11:38.510 [DEBUG] [Thread-16298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:11:38.510 [DEBUG] [Thread-16298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:11:38.510 [DEBUG] [Thread-16298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:11:38.510 [DEBUG] [Thread-16298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:11:38.510 [DEBUG] [Thread-16298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:11:38.510 [DEBUG] [Thread-16298] [transport.py] [_log()] client lang: <none>
2026-04-15T09:11:38.510 [DEBUG] [Thread-16298] [transport.py] [_log()] server lang: <none>
2026-04-15T09:11:38.510 [DEBUG] [Thread-16298] [transport.py] [_log()] kex follows: False
2026-04-15T09:11:38.510 [DEBUG] [Thread-16298] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:11:38.510 [DEBUG] [Thread-16298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:11:38.510 [DEBUG] [Thread-16298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:11:38.510 [DEBUG] [Thread-16298] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:11:38.511 [DEBUG] [Thread-16298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:11:38.511 [DEBUG] [Thread-16298] [transport.py] [_log()] Compression: none
2026-04-15T09:11:38.511 [DEBUG] [Thread-16298] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:11:38.520 [DEBUG] [Thread-16298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:11:38.520 [DEBUG] [Thread-16298] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:11:38.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:11:38.521 [DEBUG] [Thread-16298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:11:38.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:11:38.522 [DEBUG] [Thread-16298] [transport.py] [_log()] userauth is OK
2026-04-15T09:11:38.523 [DEBUG] [Thread-16298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:11:38.523 [DEBUG] [Thread-16298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:11:38.523 [DEBUG] [Thread-16298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:11:38.523 [DEBUG] [Thread-16298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:11:38.548 [INFO] [Thread-16298] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:11:38.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:11:38.986 [DEBUG] [Thread-16300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:11:39.129 [DEBUG] [Thread-16298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:11:39.130 [DEBUG] [Thread-16298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:11:39.130 [DEBUG] [Thread-16298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:11:39.170 [DEBUG] [Thread-16298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:11:39.170 [DEBUG] [Thread-16298] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:11:39.173 [DEBUG] [Thread-16298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:11:39.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:11:39.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:11:39.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:11:39.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:11:39.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:11:39.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:11:39.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:11:39.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:11:39.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:11:39.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.299437 -999.00   +8.70  19.03     97   +8.20 1 3 1 3 1   887    0 0.43 -1.57 ----- 19.0 19.0 308.0 22.1 11.6 -2.3 11.3 -1.8 10.6 -1.3 11.0 -1.2
2026-04-15T09:11:39.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:11:39.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:11:39.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.299437
2026-04-15T09:11:39.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:11:39.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:11:39.202 [DEBUG] [Thread-16298] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:11:39.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:11:39.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:11:39.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:11:39.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:10:57', tmtdew=0.185155, humidity=98.5693, cloud=0.0, wind=17.239, temperature=8.77761, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:11:11.357', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:11:39.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:11:39.454 [DEBUG] [Thread-16302] [transport.py] [_log()] starting thread (client mode): 0xf13ffa30
2026-04-15T09:11:39.454 [DEBUG] [Thread-16302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:11:39.469 [DEBUG] [Thread-16302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:11:39.469 [INFO] [Thread-16302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:11:39.477 [DEBUG] [Thread-16302] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:11:39.477 [DEBUG] [Thread-16302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:11:39.477 [DEBUG] [Thread-16302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:11:39.477 [DEBUG] [Thread-16302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:11:39.477 [DEBUG] [Thread-16302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:11:39.477 [DEBUG] [Thread-16302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:11:39.477 [DEBUG] [Thread-16302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:11:39.477 [DEBUG] [Thread-16302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:11:39.477 [DEBUG] [Thread-16302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:11:39.477 [DEBUG] [Thread-16302] [transport.py] [_log()] client lang: <none>
2026-04-15T09:11:39.478 [DEBUG] [Thread-16302] [transport.py] [_log()] server lang: <none>
2026-04-15T09:11:39.478 [DEBUG] [Thread-16302] [transport.py] [_log()] kex follows: False
2026-04-15T09:11:39.478 [DEBUG] [Thread-16302] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:11:39.478 [DEBUG] [Thread-16302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:11:39.478 [DEBUG] [Thread-16302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:11:39.478 [DEBUG] [Thread-16302] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:11:39.478 [DEBUG] [Thread-16302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:11:39.478 [DEBUG] [Thread-16302] [transport.py] [_log()] Compression: none
2026-04-15T09:11:39.478 [DEBUG] [Thread-16302] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:11:39.535 [DEBUG] [Thread-16302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:11:39.535 [DEBUG] [Thread-16302] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:11:39.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:11:39.536 [DEBUG] [Thread-16302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:11:39.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:11:39.591 [DEBUG] [Thread-16302] [transport.py] [_log()] userauth is OK
2026-04-15T09:11:39.591 [DEBUG] [Thread-16302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:11:39.592 [DEBUG] [Thread-16302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:11:39.592 [DEBUG] [Thread-16302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:11:39.592 [DEBUG] [Thread-16302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:11:39.617 [INFO] [Thread-16302] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:11:39.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:11:39.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:11:40.498 [DEBUG] [Thread-16302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:11:40.498 [DEBUG] [Thread-16302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:11:40.548 [DEBUG] [Thread-16302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:11:40.548 [DEBUG] [Thread-16302] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:11:40.560 [DEBUG] [Thread-16302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:11:40.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:11:40.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')
2026-04-15T09:11:40.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
2026-04-15T09:11:40.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:11:40.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:11:40.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:11:40.600 [DEBUG] [Thread-16302] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:11:54.018 [DEBUG] [Thread-16304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:11:54.376 [DEBUG] [Thread-16305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:12:09.061 [DEBUG] [Thread-16306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:12:10.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:12:10.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:12:10.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
2026-04-15T09:12:11.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 11, 32), 0.18511, 98.5693, 0.0, 14.54, 8.74444, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:12:11.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:11:32
2026-04-15T09:12:12.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:12:12.779 [DEBUG] [Thread-16307] [transport.py] [_log()] starting thread (client mode): 0xee904190
2026-04-15T09:12:12.780 [DEBUG] [Thread-16307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:12:12.799 [DEBUG] [Thread-16307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:12:12.799 [INFO] [Thread-16307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:12:12.802 [DEBUG] [Thread-16307] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:12:12.803 [DEBUG] [Thread-16307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:12:12.803 [DEBUG] [Thread-16307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:12:12.803 [DEBUG] [Thread-16307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:12:12.803 [DEBUG] [Thread-16307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:12:12.803 [DEBUG] [Thread-16307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:12:12.803 [DEBUG] [Thread-16307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:12:12.803 [DEBUG] [Thread-16307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:12:12.803 [DEBUG] [Thread-16307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:12:12.803 [DEBUG] [Thread-16307] [transport.py] [_log()] client lang: <none>
2026-04-15T09:12:12.803 [DEBUG] [Thread-16307] [transport.py] [_log()] server lang: <none>
2026-04-15T09:12:12.803 [DEBUG] [Thread-16307] [transport.py] [_log()] kex follows: False
2026-04-15T09:12:12.803 [DEBUG] [Thread-16307] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:12:12.804 [DEBUG] [Thread-16307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:12:12.804 [DEBUG] [Thread-16307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:12:12.804 [DEBUG] [Thread-16307] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:12:12.804 [DEBUG] [Thread-16307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:12:12.804 [DEBUG] [Thread-16307] [transport.py] [_log()] Compression: none
2026-04-15T09:12:12.804 [DEBUG] [Thread-16307] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:12:12.819 [DEBUG] [Thread-16307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:12:12.820 [DEBUG] [Thread-16307] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:12:12.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:12:12.820 [DEBUG] [Thread-16307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:12:12.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:12:12.821 [DEBUG] [Thread-16307] [transport.py] [_log()] userauth is OK
2026-04-15T09:12:12.821 [DEBUG] [Thread-16307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:12:12.822 [DEBUG] [Thread-16307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:12:12.822 [DEBUG] [Thread-16307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:12:12.822 [DEBUG] [Thread-16307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:12:12.841 [INFO] [Thread-16307] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:12:12.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:12:13.516 [DEBUG] [Thread-16307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:12:13.517 [DEBUG] [Thread-16307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:12:13.517 [DEBUG] [Thread-16307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:12:13.557 [DEBUG] [Thread-16307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:12:13.557 [DEBUG] [Thread-16307] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:12:13.560 [DEBUG] [Thread-16307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:12:13.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:12:13.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:12:13.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:12:13.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:12:13.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:12:13.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:12:13.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:12:13.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:12:13.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:12:13.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.299784 -999.00   +8.60  18.63     97   +8.20 1 3 1 3 1   887    0 0.42 -1.96 ----- 18.6 18.6 291.6 23.3 11.7 -1.8 11.3 -2.0 10.7 -1.1 11.0 -1.3
2026-04-15T09:12:13.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:12:13.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:12:13.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.299784
2026-04-15T09:12:13.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:12:13.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:12:13.585 [DEBUG] [Thread-16307] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:12:13.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:12:13.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:12:13.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:12:13.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:11:32', tmtdew=0.18511, humidity=98.5693, cloud=0.0, wind=14.54, temperature=8.74444, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:11:41.338', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:12:13.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:12:13.844 [DEBUG] [Thread-16310] [transport.py] [_log()] starting thread (client mode): 0xee9050c0
2026-04-15T09:12:13.844 [DEBUG] [Thread-16310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:12:13.858 [DEBUG] [Thread-16310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:12:13.858 [INFO] [Thread-16310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:12:13.865 [DEBUG] [Thread-16310] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:12:13.865 [DEBUG] [Thread-16310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:12:13.865 [DEBUG] [Thread-16310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:12:13.866 [DEBUG] [Thread-16310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:12:13.866 [DEBUG] [Thread-16310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:12:13.866 [DEBUG] [Thread-16310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:12:13.866 [DEBUG] [Thread-16310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:12:13.866 [DEBUG] [Thread-16310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:12:13.866 [DEBUG] [Thread-16310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:12:13.866 [DEBUG] [Thread-16310] [transport.py] [_log()] client lang: <none>
2026-04-15T09:12:13.866 [DEBUG] [Thread-16310] [transport.py] [_log()] server lang: <none>
2026-04-15T09:12:13.866 [DEBUG] [Thread-16310] [transport.py] [_log()] kex follows: False
2026-04-15T09:12:13.866 [DEBUG] [Thread-16310] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:12:13.866 [DEBUG] [Thread-16310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:12:13.867 [DEBUG] [Thread-16310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:12:13.867 [DEBUG] [Thread-16310] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:12:13.867 [DEBUG] [Thread-16310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:12:13.867 [DEBUG] [Thread-16310] [transport.py] [_log()] Compression: none
2026-04-15T09:12:13.867 [DEBUG] [Thread-16310] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:12:13.924 [DEBUG] [Thread-16310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:12:13.925 [DEBUG] [Thread-16310] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:12:13.925 [DEBUG] [Thread-16310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:12:13.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:12:13.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:12:13.982 [DEBUG] [Thread-16310] [transport.py] [_log()] userauth is OK
2026-04-15T09:12:13.983 [DEBUG] [Thread-16310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:12:13.983 [DEBUG] [Thread-16310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:12:13.983 [DEBUG] [Thread-16310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:12:13.983 [DEBUG] [Thread-16310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:12:14.008 [INFO] [Thread-16310] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:12:14.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:12:14.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:12:14.870 [DEBUG] [Thread-16310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:12:14.871 [DEBUG] [Thread-16310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:12:14.918 [DEBUG] [Thread-16310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:12:14.918 [DEBUG] [Thread-16310] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:12:14.927 [DEBUG] [Thread-16310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:12:14.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:12:14.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')
2026-04-15T09:12:14.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
2026-04-15T09:12:14.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:12:14.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:12:14.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:12:14.961 [DEBUG] [Thread-16310] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:12:18.719 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:12:18.721 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:12:24.092 [DEBUG] [Thread-16312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:12:39.136 [DEBUG] [Thread-16313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:12:44.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:12:44.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:12:44.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
2026-04-15T09:12:46.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 12, 8), 0.18264, 98.5858, 0.0, 15.4044, 8.76098, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:12:46.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:12:08
2026-04-15T09:12:46.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:12:47.119 [DEBUG] [Thread-16314] [transport.py] [_log()] starting thread (client mode): 0xee9048e0
2026-04-15T09:12:47.119 [DEBUG] [Thread-16314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:12:47.138 [DEBUG] [Thread-16314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:12:47.138 [INFO] [Thread-16314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:12:47.140 [DEBUG] [Thread-16314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:12:47.140 [DEBUG] [Thread-16314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:12:47.140 [DEBUG] [Thread-16314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:12:47.140 [DEBUG] [Thread-16314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:12:47.140 [DEBUG] [Thread-16314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:12:47.140 [DEBUG] [Thread-16314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:12:47.140 [DEBUG] [Thread-16314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:12:47.140 [DEBUG] [Thread-16314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:12:47.141 [DEBUG] [Thread-16314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:12:47.141 [DEBUG] [Thread-16314] [transport.py] [_log()] client lang: <none>
2026-04-15T09:12:47.141 [DEBUG] [Thread-16314] [transport.py] [_log()] server lang: <none>
2026-04-15T09:12:47.141 [DEBUG] [Thread-16314] [transport.py] [_log()] kex follows: False
2026-04-15T09:12:47.141 [DEBUG] [Thread-16314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:12:47.141 [DEBUG] [Thread-16314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:12:47.141 [DEBUG] [Thread-16314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:12:47.141 [DEBUG] [Thread-16314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:12:47.141 [DEBUG] [Thread-16314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:12:47.141 [DEBUG] [Thread-16314] [transport.py] [_log()] Compression: none
2026-04-15T09:12:47.141 [DEBUG] [Thread-16314] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:12:47.158 [DEBUG] [Thread-16314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:12:47.158 [DEBUG] [Thread-16314] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:12:47.159 [DEBUG] [Thread-16314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:12:47.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:12:47.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:12:47.160 [DEBUG] [Thread-16314] [transport.py] [_log()] userauth is OK
2026-04-15T09:12:47.160 [DEBUG] [Thread-16314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:12:47.160 [DEBUG] [Thread-16314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:12:47.160 [DEBUG] [Thread-16314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:12:47.160 [DEBUG] [Thread-16314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:12:47.172 [INFO] [Thread-16314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:12:47.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:12:47.773 [DEBUG] [Thread-16314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:12:47.774 [DEBUG] [Thread-16314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:12:47.774 [DEBUG] [Thread-16314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:12:47.814 [DEBUG] [Thread-16314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:12:47.814 [DEBUG] [Thread-16314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:12:47.818 [DEBUG] [Thread-16314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:12:47.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:12:47.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:12:47.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:12:47.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:12:47.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:12:47.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:12:47.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:12:47.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:12:47.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:12:47.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.300478 -999.00   +8.70  15.34     97   +8.30 1 3 1 3 1   887    0 0.42 -2.02 ----- 15.3 15.3 301.7 21.5 12.0 -1.7 11.5 -1.4 10.9 -0.9 11.2 -0.4
2026-04-15T09:12:47.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:12:47.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:12:47.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.300478
2026-04-15T09:12:47.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:12:47.842 [DEBUG] [Thread-16314] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:12:47.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:12:47.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:12:47.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:12:47.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:12:47.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:12:08', tmtdew=0.18264, humidity=98.5858, cloud=0.0, wind=15.4044, temperature=8.76098, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:12:41.299', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:12:48.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:12:48.091 [DEBUG] [Thread-16317] [transport.py] [_log()] starting thread (client mode): 0xee98a740
2026-04-15T09:12:48.092 [DEBUG] [Thread-16317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:12:48.106 [DEBUG] [Thread-16317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:12:48.106 [INFO] [Thread-16317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:12:48.113 [DEBUG] [Thread-16317] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:12:48.113 [DEBUG] [Thread-16317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:12:48.113 [DEBUG] [Thread-16317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:12:48.114 [DEBUG] [Thread-16317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:12:48.114 [DEBUG] [Thread-16317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:12:48.114 [DEBUG] [Thread-16317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:12:48.114 [DEBUG] [Thread-16317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:12:48.114 [DEBUG] [Thread-16317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:12:48.114 [DEBUG] [Thread-16317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:12:48.114 [DEBUG] [Thread-16317] [transport.py] [_log()] client lang: <none>
2026-04-15T09:12:48.114 [DEBUG] [Thread-16317] [transport.py] [_log()] server lang: <none>
2026-04-15T09:12:48.114 [DEBUG] [Thread-16317] [transport.py] [_log()] kex follows: False
2026-04-15T09:12:48.114 [DEBUG] [Thread-16317] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:12:48.114 [DEBUG] [Thread-16317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:12:48.114 [DEBUG] [Thread-16317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:12:48.115 [DEBUG] [Thread-16317] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:12:48.115 [DEBUG] [Thread-16317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:12:48.115 [DEBUG] [Thread-16317] [transport.py] [_log()] Compression: none
2026-04-15T09:12:48.115 [DEBUG] [Thread-16317] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:12:48.174 [DEBUG] [Thread-16317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:12:48.175 [DEBUG] [Thread-16317] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:12:48.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:12:48.175 [DEBUG] [Thread-16317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:12:48.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:12:48.231 [DEBUG] [Thread-16317] [transport.py] [_log()] userauth is OK
2026-04-15T09:12:48.231 [DEBUG] [Thread-16317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:12:48.231 [DEBUG] [Thread-16317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:12:48.231 [DEBUG] [Thread-16317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:12:48.231 [DEBUG] [Thread-16317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:12:48.256 [INFO] [Thread-16317] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:12:48.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:12:48.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:12:49.147 [DEBUG] [Thread-16317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:12:49.147 [DEBUG] [Thread-16317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:12:49.195 [DEBUG] [Thread-16317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:12:49.195 [DEBUG] [Thread-16317] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:12:49.204 [DEBUG] [Thread-16317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:12:49.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:12:49.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')
2026-04-15T09:12:49.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
2026-04-15T09:12:49.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:12:49.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:12:49.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:12:49.238 [DEBUG] [Thread-16317] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:12:54.168 [DEBUG] [Thread-16319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:12:54.481 [DEBUG] [Thread-16320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:13:09.215 [DEBUG] [Thread-16321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:13:18.861 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:13:18.862 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:13:19.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:13:19.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:13:19.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
2026-04-15T09:13:20.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 12, 44), 0.26024, 98.2048, 0.0, 15.9502, 9.08878, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:13:20.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:12:44
2026-04-15T09:13:21.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:13:21.505 [DEBUG] [Thread-16322] [transport.py] [_log()] starting thread (client mode): 0xf1366ec0
2026-04-15T09:13:21.505 [DEBUG] [Thread-16322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:13:21.525 [DEBUG] [Thread-16322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:13:21.525 [INFO] [Thread-16322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:13:21.528 [DEBUG] [Thread-16322] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:13:21.528 [DEBUG] [Thread-16322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:13:21.528 [DEBUG] [Thread-16322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:13:21.528 [DEBUG] [Thread-16322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:13:21.528 [DEBUG] [Thread-16322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:13:21.528 [DEBUG] [Thread-16322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:13:21.529 [DEBUG] [Thread-16322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:13:21.529 [DEBUG] [Thread-16322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:13:21.529 [DEBUG] [Thread-16322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:13:21.529 [DEBUG] [Thread-16322] [transport.py] [_log()] client lang: <none>
2026-04-15T09:13:21.529 [DEBUG] [Thread-16322] [transport.py] [_log()] server lang: <none>
2026-04-15T09:13:21.529 [DEBUG] [Thread-16322] [transport.py] [_log()] kex follows: False
2026-04-15T09:13:21.529 [DEBUG] [Thread-16322] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:13:21.529 [DEBUG] [Thread-16322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:13:21.529 [DEBUG] [Thread-16322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:13:21.529 [DEBUG] [Thread-16322] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:13:21.529 [DEBUG] [Thread-16322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:13:21.530 [DEBUG] [Thread-16322] [transport.py] [_log()] Compression: none
2026-04-15T09:13:21.530 [DEBUG] [Thread-16322] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:13:21.546 [DEBUG] [Thread-16322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:13:21.547 [DEBUG] [Thread-16322] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:13:21.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:13:21.547 [DEBUG] [Thread-16322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:13:21.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:13:21.548 [DEBUG] [Thread-16322] [transport.py] [_log()] userauth is OK
2026-04-15T09:13:21.549 [DEBUG] [Thread-16322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:13:21.549 [DEBUG] [Thread-16322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:13:21.549 [DEBUG] [Thread-16322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:13:21.549 [DEBUG] [Thread-16322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:13:21.585 [INFO] [Thread-16322] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:13:21.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:13:22.242 [DEBUG] [Thread-16322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:13:22.242 [DEBUG] [Thread-16322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:13:22.243 [DEBUG] [Thread-16322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:13:22.283 [DEBUG] [Thread-16322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:13:22.283 [DEBUG] [Thread-16322] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:13:22.286 [DEBUG] [Thread-16322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:13:22.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:13:22.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:13:22.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:13:22.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:13:22.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:13:22.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:13:22.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:13:22.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:13:22.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:13:22.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.300826 -999.00   +8.60  17.50     97   +8.20 1 3 1 3 1   887    0 0.41 -2.13 ----- 17.5 17.5 316.8 20.4 12.0 -1.8 11.6 -1.5 10.8 -1.6 11.3 -0.7
2026-04-15T09:13:22.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:13:22.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:13:22.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.300826
2026-04-15T09:13:22.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:13:22.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:13:22.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:13:22.314 [DEBUG] [Thread-16322] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:13:22.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:13:22.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:13:22.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:12:44', tmtdew=0.26024, humidity=98.2048, cloud=0.0, wind=15.9502, temperature=9.08878, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:13:11.366', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:13:22.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:13:22.570 [DEBUG] [Thread-16325] [transport.py] [_log()] starting thread (client mode): 0xf13ec100
2026-04-15T09:13:22.570 [DEBUG] [Thread-16325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:13:22.584 [DEBUG] [Thread-16325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:13:22.584 [INFO] [Thread-16325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:13:22.591 [DEBUG] [Thread-16325] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:13:22.592 [DEBUG] [Thread-16325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:13:22.592 [DEBUG] [Thread-16325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:13:22.592 [DEBUG] [Thread-16325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:13:22.592 [DEBUG] [Thread-16325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:13:22.592 [DEBUG] [Thread-16325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:13:22.592 [DEBUG] [Thread-16325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:13:22.592 [DEBUG] [Thread-16325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:13:22.592 [DEBUG] [Thread-16325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:13:22.592 [DEBUG] [Thread-16325] [transport.py] [_log()] client lang: <none>
2026-04-15T09:13:22.592 [DEBUG] [Thread-16325] [transport.py] [_log()] server lang: <none>
2026-04-15T09:13:22.592 [DEBUG] [Thread-16325] [transport.py] [_log()] kex follows: False
2026-04-15T09:13:22.593 [DEBUG] [Thread-16325] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:13:22.593 [DEBUG] [Thread-16325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:13:22.593 [DEBUG] [Thread-16325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:13:22.593 [DEBUG] [Thread-16325] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:13:22.593 [DEBUG] [Thread-16325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:13:22.593 [DEBUG] [Thread-16325] [transport.py] [_log()] Compression: none
2026-04-15T09:13:22.593 [DEBUG] [Thread-16325] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:13:22.650 [DEBUG] [Thread-16325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:13:22.650 [DEBUG] [Thread-16325] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:13:22.650 [DEBUG] [Thread-16325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:13:22.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:13:22.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:13:22.705 [DEBUG] [Thread-16325] [transport.py] [_log()] userauth is OK
2026-04-15T09:13:22.705 [DEBUG] [Thread-16325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:13:22.705 [DEBUG] [Thread-16325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:13:22.705 [DEBUG] [Thread-16325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:13:22.705 [DEBUG] [Thread-16325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:13:22.731 [INFO] [Thread-16325] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:13:22.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:13:22.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:13:23.561 [DEBUG] [Thread-16325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:13:23.561 [DEBUG] [Thread-16325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:13:23.609 [DEBUG] [Thread-16325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:13:23.609 [DEBUG] [Thread-16325] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:13:23.618 [DEBUG] [Thread-16325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:13:23.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:13:23.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')
2026-04-15T09:13:23.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
2026-04-15T09:13:23.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:13:23.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:13:23.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:13:23.653 [DEBUG] [Thread-16325] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:13:24.246 [DEBUG] [Thread-16327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:13:39.292 [DEBUG] [Thread-16328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:13:53.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:13:53.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:13:53.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
2026-04-15T09:13:54.324 [DEBUG] [Thread-16329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:13:54.594 [DEBUG] [Thread-16330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:13:54.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 13, 19), 0.18041, 98.602, 0.0, 14.5746, 8.97659, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:13:54.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:13:19
2026-04-15T09:13:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:13:55.884 [DEBUG] [Thread-16331] [transport.py] [_log()] starting thread (client mode): 0xf1366e00
2026-04-15T09:13:55.885 [DEBUG] [Thread-16331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:13:55.904 [DEBUG] [Thread-16331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:13:55.904 [INFO] [Thread-16331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:13:55.907 [DEBUG] [Thread-16331] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:13:55.908 [DEBUG] [Thread-16331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:13:55.908 [DEBUG] [Thread-16331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:13:55.908 [DEBUG] [Thread-16331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:13:55.908 [DEBUG] [Thread-16331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:13:55.908 [DEBUG] [Thread-16331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:13:55.908 [DEBUG] [Thread-16331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:13:55.908 [DEBUG] [Thread-16331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:13:55.908 [DEBUG] [Thread-16331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:13:55.908 [DEBUG] [Thread-16331] [transport.py] [_log()] client lang: <none>
2026-04-15T09:13:55.908 [DEBUG] [Thread-16331] [transport.py] [_log()] server lang: <none>
2026-04-15T09:13:55.908 [DEBUG] [Thread-16331] [transport.py] [_log()] kex follows: False
2026-04-15T09:13:55.908 [DEBUG] [Thread-16331] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:13:55.908 [DEBUG] [Thread-16331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:13:55.909 [DEBUG] [Thread-16331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:13:55.909 [DEBUG] [Thread-16331] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:13:55.909 [DEBUG] [Thread-16331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:13:55.909 [DEBUG] [Thread-16331] [transport.py] [_log()] Compression: none
2026-04-15T09:13:55.909 [DEBUG] [Thread-16331] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:13:55.927 [DEBUG] [Thread-16331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:13:55.927 [DEBUG] [Thread-16331] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:13:55.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:13:55.928 [DEBUG] [Thread-16331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:13:55.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:13:55.929 [DEBUG] [Thread-16331] [transport.py] [_log()] userauth is OK
2026-04-15T09:13:55.929 [DEBUG] [Thread-16331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:13:55.929 [DEBUG] [Thread-16331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:13:55.929 [DEBUG] [Thread-16331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:13:55.929 [DEBUG] [Thread-16331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:13:55.953 [INFO] [Thread-16331] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:13:55.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:13:56.591 [DEBUG] [Thread-16331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:13:56.592 [DEBUG] [Thread-16331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:13:56.592 [DEBUG] [Thread-16331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:13:56.632 [DEBUG] [Thread-16331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:13:56.632 [DEBUG] [Thread-16331] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:13:56.636 [DEBUG] [Thread-16331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:13:56.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:13:56.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:13:56.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:13:56.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:13:56.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:13:56.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:13:56.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:13:56.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:13:56.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:13:56.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.301173 -999.00   +8.90  14.10     97   +8.40 1 3 1 3 1   887    0 0.41 -2.17 ----- 14.1 14.1 318.2 17.8 12.1 -2.0 11.6 -1.7 10.9 -1.2 11.3 -0.9
2026-04-15T09:13:56.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:13:56.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:13:56.658 [DEBUG] [Thread-16331] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:13:56.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.301173
2026-04-15T09:13:56.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:13:56.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:13:56.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:13:56.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:13:56.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:13:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:13:19', tmtdew=0.18041, humidity=98.602, cloud=0.0, wind=14.5746, temperature=8.97659, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:13:41.347', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:13:56.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:13:56.916 [DEBUG] [Thread-16334] [transport.py] [_log()] starting thread (client mode): 0xf13eec50
2026-04-15T09:13:56.917 [DEBUG] [Thread-16334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:13:56.931 [DEBUG] [Thread-16334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:13:56.931 [INFO] [Thread-16334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:13:56.939 [DEBUG] [Thread-16334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:13:56.939 [DEBUG] [Thread-16334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:13:56.940 [DEBUG] [Thread-16334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:13:56.940 [DEBUG] [Thread-16334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:13:56.940 [DEBUG] [Thread-16334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:13:56.940 [DEBUG] [Thread-16334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:13:56.940 [DEBUG] [Thread-16334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:13:56.940 [DEBUG] [Thread-16334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:13:56.940 [DEBUG] [Thread-16334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:13:56.940 [DEBUG] [Thread-16334] [transport.py] [_log()] client lang: <none>
2026-04-15T09:13:56.940 [DEBUG] [Thread-16334] [transport.py] [_log()] server lang: <none>
2026-04-15T09:13:56.940 [DEBUG] [Thread-16334] [transport.py] [_log()] kex follows: False
2026-04-15T09:13:56.940 [DEBUG] [Thread-16334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:13:56.940 [DEBUG] [Thread-16334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:13:56.941 [DEBUG] [Thread-16334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:13:56.941 [DEBUG] [Thread-16334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:13:56.941 [DEBUG] [Thread-16334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:13:56.941 [DEBUG] [Thread-16334] [transport.py] [_log()] Compression: none
2026-04-15T09:13:56.941 [DEBUG] [Thread-16334] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:13:56.997 [DEBUG] [Thread-16334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:13:56.998 [DEBUG] [Thread-16334] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:13:56.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:13:56.998 [DEBUG] [Thread-16334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:13:56.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:13:57.054 [DEBUG] [Thread-16334] [transport.py] [_log()] userauth is OK
2026-04-15T09:13:57.054 [DEBUG] [Thread-16334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:13:57.054 [DEBUG] [Thread-16334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:13:57.055 [DEBUG] [Thread-16334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:13:57.055 [DEBUG] [Thread-16334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:13:57.080 [INFO] [Thread-16334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:13:57.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:13:57.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:13:57.896 [DEBUG] [Thread-16334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:13:57.896 [DEBUG] [Thread-16334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:13:57.944 [DEBUG] [Thread-16334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:13:57.944 [DEBUG] [Thread-16334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:13:57.953 [DEBUG] [Thread-16334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:13:57.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:13:57.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')
2026-04-15T09:13:57.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') -> 00000000
2026-04-15T09:13:57.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:13:57.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:13:57.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:13:57.987 [DEBUG] [Thread-16334] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:14:09.355 [DEBUG] [Thread-16336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:14:19.003 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:14:19.004 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:14:24.399 [DEBUG] [Thread-16337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:14:28.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:14:28.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:14:28.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:14:29.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 13, 55), 0.13772, 98.5522, 0.0, 17.3984, 8.7107, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:14:29.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:13:55
2026-04-15T09:14:29.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:14:30.104 [DEBUG] [Thread-16338] [transport.py] [_log()] starting thread (client mode): 0xf13ef2b0
2026-04-15T09:14:30.104 [DEBUG] [Thread-16338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:14:30.124 [DEBUG] [Thread-16338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:14:30.124 [INFO] [Thread-16338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:14:30.127 [DEBUG] [Thread-16338] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:14:30.127 [DEBUG] [Thread-16338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:14:30.127 [DEBUG] [Thread-16338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:14:30.127 [DEBUG] [Thread-16338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:14:30.127 [DEBUG] [Thread-16338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:14:30.127 [DEBUG] [Thread-16338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:14:30.127 [DEBUG] [Thread-16338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:14:30.127 [DEBUG] [Thread-16338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:14:30.128 [DEBUG] [Thread-16338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:14:30.128 [DEBUG] [Thread-16338] [transport.py] [_log()] client lang: <none>
2026-04-15T09:14:30.128 [DEBUG] [Thread-16338] [transport.py] [_log()] server lang: <none>
2026-04-15T09:14:30.128 [DEBUG] [Thread-16338] [transport.py] [_log()] kex follows: False
2026-04-15T09:14:30.128 [DEBUG] [Thread-16338] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:14:30.128 [DEBUG] [Thread-16338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:14:30.128 [DEBUG] [Thread-16338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:14:30.128 [DEBUG] [Thread-16338] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:14:30.128 [DEBUG] [Thread-16338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:14:30.128 [DEBUG] [Thread-16338] [transport.py] [_log()] Compression: none
2026-04-15T09:14:30.129 [DEBUG] [Thread-16338] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:14:30.145 [DEBUG] [Thread-16338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:14:30.146 [DEBUG] [Thread-16338] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:14:30.146 [DEBUG] [Thread-16338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:14:30.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:14:30.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:14:30.147 [DEBUG] [Thread-16338] [transport.py] [_log()] userauth is OK
2026-04-15T09:14:30.147 [DEBUG] [Thread-16338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:14:30.148 [DEBUG] [Thread-16338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:14:30.148 [DEBUG] [Thread-16338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:14:30.148 [DEBUG] [Thread-16338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:14:30.167 [INFO] [Thread-16338] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:14:30.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:14:30.830 [DEBUG] [Thread-16338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:14:30.830 [DEBUG] [Thread-16338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:14:30.831 [DEBUG] [Thread-16338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:14:30.871 [DEBUG] [Thread-16338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:14:30.871 [DEBUG] [Thread-16338] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:14:30.874 [DEBUG] [Thread-16338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:14:30.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:14:30.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:14:30.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:14:30.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:14:30.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:14:30.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:14:30.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:14:30.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:14:30.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:14:30.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.301520 -999.00   +8.90  22.31     97   +8.50 1 3 1 3 1   887    0 0.39 -2.65 ----- 22.3 22.3 297.0 25.7 12.1 -2.7 11.7 -1.9 10.9 -1.2 11.4 -1.1
2026-04-15T09:14:30.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:14:30.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:14:30.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.301520
2026-04-15T09:14:30.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:14:30.902 [DEBUG] [Thread-16338] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:14:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:14:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:14:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:14:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:14:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:13:55', tmtdew=0.13772, humidity=98.5522, cloud=0.0, wind=17.3984, temperature=8.7107, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:14:11.328', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:14:31.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:14:31.150 [DEBUG] [Thread-16341] [transport.py] [_log()] starting thread (client mode): 0xf1367b20
2026-04-15T09:14:31.151 [DEBUG] [Thread-16341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:14:31.165 [DEBUG] [Thread-16341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:14:31.165 [INFO] [Thread-16341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:14:31.172 [DEBUG] [Thread-16341] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:14:31.172 [DEBUG] [Thread-16341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:14:31.173 [DEBUG] [Thread-16341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:14:31.173 [DEBUG] [Thread-16341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:14:31.173 [DEBUG] [Thread-16341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:14:31.173 [DEBUG] [Thread-16341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:14:31.173 [DEBUG] [Thread-16341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:14:31.173 [DEBUG] [Thread-16341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:14:31.173 [DEBUG] [Thread-16341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:14:31.173 [DEBUG] [Thread-16341] [transport.py] [_log()] client lang: <none>
2026-04-15T09:14:31.173 [DEBUG] [Thread-16341] [transport.py] [_log()] server lang: <none>
2026-04-15T09:14:31.173 [DEBUG] [Thread-16341] [transport.py] [_log()] kex follows: False
2026-04-15T09:14:31.173 [DEBUG] [Thread-16341] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:14:31.173 [DEBUG] [Thread-16341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:14:31.174 [DEBUG] [Thread-16341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:14:31.174 [DEBUG] [Thread-16341] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:14:31.174 [DEBUG] [Thread-16341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:14:31.174 [DEBUG] [Thread-16341] [transport.py] [_log()] Compression: none
2026-04-15T09:14:31.174 [DEBUG] [Thread-16341] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:14:31.233 [DEBUG] [Thread-16341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:14:31.234 [DEBUG] [Thread-16341] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:14:31.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:14:31.234 [DEBUG] [Thread-16341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:14:31.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:14:31.292 [DEBUG] [Thread-16341] [transport.py] [_log()] userauth is OK
2026-04-15T09:14:31.292 [DEBUG] [Thread-16341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:14:31.292 [DEBUG] [Thread-16341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:14:31.293 [DEBUG] [Thread-16341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:14:31.293 [DEBUG] [Thread-16341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:14:31.317 [INFO] [Thread-16341] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:14:31.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:14:31.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:14:32.161 [DEBUG] [Thread-16341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:14:32.161 [DEBUG] [Thread-16341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:14:32.211 [DEBUG] [Thread-16341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:14:32.211 [DEBUG] [Thread-16341] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:14:32.224 [DEBUG] [Thread-16341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:14:32.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:14:32.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')
2026-04-15T09:14:32.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
2026-04-15T09:14:32.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:14:32.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:14:32.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:14:32.273 [DEBUG] [Thread-16341] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:14:39.430 [DEBUG] [Thread-16343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:14:54.473 [DEBUG] [Thread-16344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:14:54.682 [DEBUG] [Thread-16345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:15:02.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:15:02.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:15: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
2026-04-15T09:15:03.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 14, 31), 0.1304, 98.6016, 0.0, 18.5274, 8.82659, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:15:03.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:14:31
2026-04-15T09:15:03.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:15:04.360 [DEBUG] [Thread-16346] [transport.py] [_log()] starting thread (client mode): 0xee988cd0
2026-04-15T09:15:04.360 [DEBUG] [Thread-16346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:15:04.381 [DEBUG] [Thread-16346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:15:04.381 [INFO] [Thread-16346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:15:04.384 [DEBUG] [Thread-16346] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:15:04.384 [DEBUG] [Thread-16346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:15:04.384 [DEBUG] [Thread-16346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:15:04.384 [DEBUG] [Thread-16346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:15:04.384 [DEBUG] [Thread-16346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:15:04.384 [DEBUG] [Thread-16346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:15:04.385 [DEBUG] [Thread-16346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:15:04.385 [DEBUG] [Thread-16346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:15:04.385 [DEBUG] [Thread-16346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:15:04.385 [DEBUG] [Thread-16346] [transport.py] [_log()] client lang: <none>
2026-04-15T09:15:04.385 [DEBUG] [Thread-16346] [transport.py] [_log()] server lang: <none>
2026-04-15T09:15:04.385 [DEBUG] [Thread-16346] [transport.py] [_log()] kex follows: False
2026-04-15T09:15:04.385 [DEBUG] [Thread-16346] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:15:04.385 [DEBUG] [Thread-16346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:15:04.385 [DEBUG] [Thread-16346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:15:04.385 [DEBUG] [Thread-16346] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:15:04.385 [DEBUG] [Thread-16346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:15:04.385 [DEBUG] [Thread-16346] [transport.py] [_log()] Compression: none
2026-04-15T09:15:04.385 [DEBUG] [Thread-16346] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:15:04.402 [DEBUG] [Thread-16346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:15:04.402 [DEBUG] [Thread-16346] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:15:04.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:15:04.403 [DEBUG] [Thread-16346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:15:04.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:15:04.404 [DEBUG] [Thread-16346] [transport.py] [_log()] userauth is OK
2026-04-15T09:15:04.404 [DEBUG] [Thread-16346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:15:04.404 [DEBUG] [Thread-16346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:15:04.404 [DEBUG] [Thread-16346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:15:04.404 [DEBUG] [Thread-16346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:15:04.422 [INFO] [Thread-16346] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:15:04.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:15:06.742 [DEBUG] [Thread-16346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:15:06.742 [DEBUG] [Thread-16346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:15:06.743 [DEBUG] [Thread-16346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:15:06.783 [DEBUG] [Thread-16346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:15:06.783 [DEBUG] [Thread-16346] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:15:06.786 [DEBUG] [Thread-16346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:15:06.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:15:06.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:15:06.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:15:06.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:15:06.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:15:06.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:15:06.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:15:06.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:15:06.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:15:06.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.301867 -999.00   +8.60  15.72     96   +8.20 1 3 1 3 1   887    0 0.38 -2.86 ----- 15.7 15.7 295.4 23.6 12.1 -2.4 11.7 -2.3 10.9 -1.5 11.4 -1.6
2026-04-15T09:15:06.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:15:06.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:15:06.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.301867
2026-04-15T09:15:06.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:15:06.833 [DEBUG] [Thread-16346] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:15:06.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:15:06.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:15:06.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:15:06.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:15:06.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:14:31', tmtdew=0.1304, humidity=98.6016, cloud=0.0, wind=18.5274, temperature=8.82659, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:14:41.309', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:15:07.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:15:07.089 [DEBUG] [Thread-16349] [transport.py] [_log()] starting thread (client mode): 0xf13640d0
2026-04-15T09:15:07.089 [DEBUG] [Thread-16349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:15:07.107 [DEBUG] [Thread-16349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:15:07.107 [INFO] [Thread-16349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:15:07.115 [DEBUG] [Thread-16349] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:15:07.115 [DEBUG] [Thread-16349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:15:07.115 [DEBUG] [Thread-16349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:15:07.115 [DEBUG] [Thread-16349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:15:07.115 [DEBUG] [Thread-16349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:15:07.115 [DEBUG] [Thread-16349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:15:07.115 [DEBUG] [Thread-16349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:15:07.115 [DEBUG] [Thread-16349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:15:07.115 [DEBUG] [Thread-16349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:15:07.115 [DEBUG] [Thread-16349] [transport.py] [_log()] client lang: <none>
2026-04-15T09:15:07.115 [DEBUG] [Thread-16349] [transport.py] [_log()] server lang: <none>
2026-04-15T09:15:07.115 [DEBUG] [Thread-16349] [transport.py] [_log()] kex follows: False
2026-04-15T09:15:07.115 [DEBUG] [Thread-16349] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:15:07.115 [DEBUG] [Thread-16349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:15:07.116 [DEBUG] [Thread-16349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:15:07.116 [DEBUG] [Thread-16349] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:15:07.116 [DEBUG] [Thread-16349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:15:07.116 [DEBUG] [Thread-16349] [transport.py] [_log()] Compression: none
2026-04-15T09:15:07.116 [DEBUG] [Thread-16349] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:15:07.177 [DEBUG] [Thread-16349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:15:07.177 [DEBUG] [Thread-16349] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:15:07.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:15:07.178 [DEBUG] [Thread-16349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:15:07.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:15:07.233 [DEBUG] [Thread-16349] [transport.py] [_log()] userauth is OK
2026-04-15T09:15:07.234 [DEBUG] [Thread-16349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:15:07.234 [DEBUG] [Thread-16349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:15:07.234 [DEBUG] [Thread-16349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:15:07.234 [DEBUG] [Thread-16349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:15:07.260 [INFO] [Thread-16349] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:15:07.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:15:07.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:15:08.115 [DEBUG] [Thread-16349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:15:08.116 [DEBUG] [Thread-16349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:15:08.164 [DEBUG] [Thread-16349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:15:08.164 [DEBUG] [Thread-16349] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:15:08.173 [DEBUG] [Thread-16349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:15:08.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:15:08.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')
2026-04-15T09:15:08.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
2026-04-15T09:15:08.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:15:08.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:15:08.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:15:08.208 [DEBUG] [Thread-16349] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:15:09.505 [DEBUG] [Thread-16351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:15:19.145 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:15:19.147 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:15:24.546 [DEBUG] [Thread-16352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:15:38.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:15:38.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:15:38.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
2026-04-15T09:15:39.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 15, 7), 0.12788, 98.6182, 0.0, 18.9155, 8.81001, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:15:39.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:15:07
2026-04-15T09:15:39.576 [DEBUG] [Thread-16353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:15:39.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:15:40.383 [DEBUG] [Thread-16354] [transport.py] [_log()] starting thread (client mode): 0xf13649d0
2026-04-15T09:15:40.383 [DEBUG] [Thread-16354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:15:40.403 [DEBUG] [Thread-16354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:15:40.403 [INFO] [Thread-16354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:15:40.406 [DEBUG] [Thread-16354] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:15:40.406 [DEBUG] [Thread-16354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:15:40.406 [DEBUG] [Thread-16354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:15:40.406 [DEBUG] [Thread-16354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:15:40.406 [DEBUG] [Thread-16354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:15:40.406 [DEBUG] [Thread-16354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:15:40.407 [DEBUG] [Thread-16354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:15:40.407 [DEBUG] [Thread-16354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:15:40.407 [DEBUG] [Thread-16354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:15:40.407 [DEBUG] [Thread-16354] [transport.py] [_log()] client lang: <none>
2026-04-15T09:15:40.407 [DEBUG] [Thread-16354] [transport.py] [_log()] server lang: <none>
2026-04-15T09:15:40.407 [DEBUG] [Thread-16354] [transport.py] [_log()] kex follows: False
2026-04-15T09:15:40.407 [DEBUG] [Thread-16354] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:15:40.407 [DEBUG] [Thread-16354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:15:40.408 [DEBUG] [Thread-16354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:15:40.408 [DEBUG] [Thread-16354] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:15:40.408 [DEBUG] [Thread-16354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:15:40.408 [DEBUG] [Thread-16354] [transport.py] [_log()] Compression: none
2026-04-15T09:15:40.408 [DEBUG] [Thread-16354] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:15:40.425 [DEBUG] [Thread-16354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:15:40.426 [DEBUG] [Thread-16354] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:15:40.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:15:40.426 [DEBUG] [Thread-16354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:15:40.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:15:40.468 [DEBUG] [Thread-16354] [transport.py] [_log()] userauth is OK
2026-04-15T09:15:40.469 [DEBUG] [Thread-16354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:15:40.469 [DEBUG] [Thread-16354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:15:40.469 [DEBUG] [Thread-16354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:15:40.469 [DEBUG] [Thread-16354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:15:40.504 [INFO] [Thread-16354] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:15:40.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:15:41.116 [DEBUG] [Thread-16354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:15:41.116 [DEBUG] [Thread-16354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:15:41.117 [DEBUG] [Thread-16354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:15:41.157 [DEBUG] [Thread-16354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:15:41.157 [DEBUG] [Thread-16354] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:15:41.160 [DEBUG] [Thread-16354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:15:41.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:15:41.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:15:41.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:15:41.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:15:41.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:15:41.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:15:41.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:15:41.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:15:41.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:15:41.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.302215 -999.00   +8.60  13.15     96   +8.10 1 3 1 3 1   887    0 0.40 -2.37 ----- 13.2 13.2 305.8 21.7 12.1 -2.5 11.7 -2.0 10.9 -2.1 11.4 -1.4
2026-04-15T09:15:41.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:15:41.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:15:41.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.302215
2026-04-15T09:15:41.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:15:41.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:15:41.186 [DEBUG] [Thread-16354] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:15:41.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:15:41.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:15:41.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:15:41.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:15:07', tmtdew=0.12788, humidity=98.6182, cloud=0.0, wind=18.9155, temperature=8.81001, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:15:11.376', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:15:41.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:15:41.438 [DEBUG] [Thread-16357] [transport.py] [_log()] starting thread (client mode): 0xee91f550
2026-04-15T09:15:41.438 [DEBUG] [Thread-16357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:15:41.453 [DEBUG] [Thread-16357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:15:41.453 [INFO] [Thread-16357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:15:41.460 [DEBUG] [Thread-16357] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:15:41.460 [DEBUG] [Thread-16357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:15:41.460 [DEBUG] [Thread-16357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:15:41.460 [DEBUG] [Thread-16357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:15:41.460 [DEBUG] [Thread-16357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:15:41.460 [DEBUG] [Thread-16357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:15:41.461 [DEBUG] [Thread-16357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:15:41.461 [DEBUG] [Thread-16357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:15:41.461 [DEBUG] [Thread-16357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:15:41.461 [DEBUG] [Thread-16357] [transport.py] [_log()] client lang: <none>
2026-04-15T09:15:41.461 [DEBUG] [Thread-16357] [transport.py] [_log()] server lang: <none>
2026-04-15T09:15:41.461 [DEBUG] [Thread-16357] [transport.py] [_log()] kex follows: False
2026-04-15T09:15:41.461 [DEBUG] [Thread-16357] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:15:41.461 [DEBUG] [Thread-16357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:15:41.461 [DEBUG] [Thread-16357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:15:41.461 [DEBUG] [Thread-16357] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:15:41.461 [DEBUG] [Thread-16357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:15:41.461 [DEBUG] [Thread-16357] [transport.py] [_log()] Compression: none
2026-04-15T09:15:41.462 [DEBUG] [Thread-16357] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:15:41.518 [DEBUG] [Thread-16357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:15:41.518 [DEBUG] [Thread-16357] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:15:41.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:15:41.519 [DEBUG] [Thread-16357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:15:41.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:15:41.575 [DEBUG] [Thread-16357] [transport.py] [_log()] userauth is OK
2026-04-15T09:15:41.575 [DEBUG] [Thread-16357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:15:41.575 [DEBUG] [Thread-16357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:15:41.575 [DEBUG] [Thread-16357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:15:41.575 [DEBUG] [Thread-16357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:15:41.600 [INFO] [Thread-16357] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:15:41.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:15:41.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:15:42.422 [DEBUG] [Thread-16357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:15:42.422 [DEBUG] [Thread-16357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:15:42.470 [DEBUG] [Thread-16357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:15:42.470 [DEBUG] [Thread-16357] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:15:42.479 [DEBUG] [Thread-16357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:15:42.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:15: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')
2026-04-15T09:15:42.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
2026-04-15T09:15:42.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:15:42.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:15:42.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:15:42.514 [DEBUG] [Thread-16357] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:15:54.607 [DEBUG] [Thread-16359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:15:54.786 [DEBUG] [Thread-16360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:16:09.651 [DEBUG] [Thread-16361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:16:12.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:16:12.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:16:12.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
2026-04-15T09:16:13.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 15, 42), 0.26079, 98.2026, 0.0, 17.4672, 9.2533, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:16:13.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:15:42
2026-04-15T09:16:14.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:16:14.661 [DEBUG] [Thread-16362] [transport.py] [_log()] starting thread (client mode): 0xf1332d70
2026-04-15T09:16:14.662 [DEBUG] [Thread-16362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:16:14.681 [DEBUG] [Thread-16362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:16:14.681 [INFO] [Thread-16362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:16:14.684 [DEBUG] [Thread-16362] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:16:14.684 [DEBUG] [Thread-16362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:16:14.684 [DEBUG] [Thread-16362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:16:14.685 [DEBUG] [Thread-16362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:16:14.685 [DEBUG] [Thread-16362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:16:14.685 [DEBUG] [Thread-16362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:16:14.685 [DEBUG] [Thread-16362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:16:14.685 [DEBUG] [Thread-16362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:16:14.685 [DEBUG] [Thread-16362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:16:14.685 [DEBUG] [Thread-16362] [transport.py] [_log()] client lang: <none>
2026-04-15T09:16:14.685 [DEBUG] [Thread-16362] [transport.py] [_log()] server lang: <none>
2026-04-15T09:16:14.685 [DEBUG] [Thread-16362] [transport.py] [_log()] kex follows: False
2026-04-15T09:16:14.685 [DEBUG] [Thread-16362] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:16:14.685 [DEBUG] [Thread-16362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:16:14.686 [DEBUG] [Thread-16362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:16:14.686 [DEBUG] [Thread-16362] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:16:14.686 [DEBUG] [Thread-16362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:16:14.686 [DEBUG] [Thread-16362] [transport.py] [_log()] Compression: none
2026-04-15T09:16:14.686 [DEBUG] [Thread-16362] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:16:14.704 [DEBUG] [Thread-16362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:16:14.704 [DEBUG] [Thread-16362] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:16:14.704 [DEBUG] [Thread-16362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:16:14.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:16:14.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:16:14.705 [DEBUG] [Thread-16362] [transport.py] [_log()] userauth is OK
2026-04-15T09:16:14.706 [DEBUG] [Thread-16362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:16:14.706 [DEBUG] [Thread-16362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:16:14.706 [DEBUG] [Thread-16362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:16:14.706 [DEBUG] [Thread-16362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:16:14.723 [INFO] [Thread-16362] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:16:14.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:16:15.366 [DEBUG] [Thread-16362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:16:15.366 [DEBUG] [Thread-16362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:16:15.366 [DEBUG] [Thread-16362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:16:15.407 [DEBUG] [Thread-16362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:16:15.407 [DEBUG] [Thread-16362] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:16:15.410 [DEBUG] [Thread-16362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:16:15.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:16:15.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:16:15.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:16:15.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:16:15.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:16:15.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:16:15.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:16:15.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:16:15.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:16:15.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.302562 -999.00   +8.70  17.10     97   +8.30 1 3 1 3 1   887    0 0.42 -2.22 ----- 17.1 17.1 307.8 21.1 12.1 -2.5 11.7 -2.2 10.9 -2.1 11.4 -1.3
2026-04-15T09:16:15.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:16:15.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:16:15.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.302562
2026-04-15T09:16:15.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:16:15.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:16:15.430 [DEBUG] [Thread-16362] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:16:15.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:16:15.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:16:15.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:16:15.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:15:42', tmtdew=0.26079, humidity=98.2026, cloud=0.0, wind=17.4672, temperature=9.2533, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:15:41.357', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:16:15.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:16:15.644 [DEBUG] [Thread-16365] [transport.py] [_log()] starting thread (client mode): 0xf13ff400
2026-04-15T09:16:15.644 [DEBUG] [Thread-16365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:16:15.658 [DEBUG] [Thread-16365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:16:15.659 [INFO] [Thread-16365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:16:15.667 [DEBUG] [Thread-16365] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:16:15.667 [DEBUG] [Thread-16365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:16:15.667 [DEBUG] [Thread-16365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:16:15.667 [DEBUG] [Thread-16365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:16:15.667 [DEBUG] [Thread-16365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:16:15.667 [DEBUG] [Thread-16365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:16:15.667 [DEBUG] [Thread-16365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:16:15.667 [DEBUG] [Thread-16365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:16:15.667 [DEBUG] [Thread-16365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:16:15.668 [DEBUG] [Thread-16365] [transport.py] [_log()] client lang: <none>
2026-04-15T09:16:15.668 [DEBUG] [Thread-16365] [transport.py] [_log()] server lang: <none>
2026-04-15T09:16:15.668 [DEBUG] [Thread-16365] [transport.py] [_log()] kex follows: False
2026-04-15T09:16:15.668 [DEBUG] [Thread-16365] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:16:15.668 [DEBUG] [Thread-16365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:16:15.668 [DEBUG] [Thread-16365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:16:15.668 [DEBUG] [Thread-16365] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:16:15.668 [DEBUG] [Thread-16365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:16:15.668 [DEBUG] [Thread-16365] [transport.py] [_log()] Compression: none
2026-04-15T09:16:15.668 [DEBUG] [Thread-16365] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:16:15.685 [DEBUG] [Thread-16365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:16:15.685 [DEBUG] [Thread-16365] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:16:15.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:16:15.686 [DEBUG] [Thread-16365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:16:15.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:16:15.740 [DEBUG] [Thread-16365] [transport.py] [_log()] userauth is OK
2026-04-15T09:16:15.740 [DEBUG] [Thread-16365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:16:15.740 [DEBUG] [Thread-16365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:16:15.740 [DEBUG] [Thread-16365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:16:15.741 [DEBUG] [Thread-16365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:16:15.767 [INFO] [Thread-16365] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:16:15.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:16:15.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:16:16.600 [DEBUG] [Thread-16365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:16:16.601 [DEBUG] [Thread-16365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:16:16.648 [DEBUG] [Thread-16365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:16:16.648 [DEBUG] [Thread-16365] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:16:16.657 [DEBUG] [Thread-16365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:16:16.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:16:16.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')
2026-04-15T09:16:16.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
2026-04-15T09:16:16.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:16:16.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:16:16.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:16:16.691 [DEBUG] [Thread-16365] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:16:19.285 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:16:19.286 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:16:24.682 [DEBUG] [Thread-16367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:16:39.725 [DEBUG] [Thread-16368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:16:46.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:16:46.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:16:46.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
2026-04-15T09:16:48.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 16, 18), 0.175365, 98.6345, 0.0, 14.8392, 8.76006, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:16:48.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:16:18
2026-04-15T09:16:48.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:16:48.843 [DEBUG] [Thread-16369] [transport.py] [_log()] starting thread (client mode): 0xf13e2c80
2026-04-15T09:16:48.844 [DEBUG] [Thread-16369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:16:48.862 [DEBUG] [Thread-16369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:16:48.863 [INFO] [Thread-16369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:16:48.866 [DEBUG] [Thread-16369] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:16:48.866 [DEBUG] [Thread-16369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:16:48.866 [DEBUG] [Thread-16369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:16:48.866 [DEBUG] [Thread-16369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:16:48.866 [DEBUG] [Thread-16369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:16:48.866 [DEBUG] [Thread-16369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:16:48.866 [DEBUG] [Thread-16369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:16:48.866 [DEBUG] [Thread-16369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:16:48.866 [DEBUG] [Thread-16369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:16:48.866 [DEBUG] [Thread-16369] [transport.py] [_log()] client lang: <none>
2026-04-15T09:16:48.866 [DEBUG] [Thread-16369] [transport.py] [_log()] server lang: <none>
2026-04-15T09:16:48.867 [DEBUG] [Thread-16369] [transport.py] [_log()] kex follows: False
2026-04-15T09:16:48.867 [DEBUG] [Thread-16369] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:16:48.867 [DEBUG] [Thread-16369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:16:48.867 [DEBUG] [Thread-16369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:16:48.867 [DEBUG] [Thread-16369] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:16:48.867 [DEBUG] [Thread-16369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:16:48.867 [DEBUG] [Thread-16369] [transport.py] [_log()] Compression: none
2026-04-15T09:16:48.867 [DEBUG] [Thread-16369] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:16:48.883 [DEBUG] [Thread-16369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:16:48.883 [DEBUG] [Thread-16369] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:16:48.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:16:48.884 [DEBUG] [Thread-16369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:16:48.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:16:48.885 [DEBUG] [Thread-16369] [transport.py] [_log()] userauth is OK
2026-04-15T09:16:48.885 [DEBUG] [Thread-16369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:16:48.885 [DEBUG] [Thread-16369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:16:48.885 [DEBUG] [Thread-16369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:16:48.886 [DEBUG] [Thread-16369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:16:48.903 [INFO] [Thread-16369] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:16:48.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:16:49.540 [DEBUG] [Thread-16369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:16:49.540 [DEBUG] [Thread-16369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:16:49.541 [DEBUG] [Thread-16369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:16:49.581 [DEBUG] [Thread-16369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:16:49.581 [DEBUG] [Thread-16369] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:16:49.584 [DEBUG] [Thread-16369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:16:49.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:16:49.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:16:49.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:16:49.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:16:49.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:16:49.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:16:49.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:16:49.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:16:49.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:16:49.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.303256 -999.00   +8.80  20.38     97   +8.40 1 3 1 3 1   887    0 0.41 -1.60 ----- 20.4 20.4 310.6 24.3 12.2 -3.7 11.8 -3.3 11.0 -2.6 11.4 -2.6
2026-04-15T09:16:49.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:16:49.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:16:49.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.303256
2026-04-15T09:16:49.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:16:49.611 [DEBUG] [Thread-16369] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:16:49.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:16:49.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:16:49.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:16:49.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:16:49.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:16:18', tmtdew=0.175365, humidity=98.6345, cloud=0.0, wind=14.8392, temperature=8.76006, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:16:41.318', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:16:49.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:16:49.867 [DEBUG] [Thread-16372] [transport.py] [_log()] starting thread (client mode): 0xf13fd8a0
2026-04-15T09:16:49.868 [DEBUG] [Thread-16372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:16:49.882 [DEBUG] [Thread-16372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:16:49.882 [INFO] [Thread-16372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:16:49.889 [DEBUG] [Thread-16372] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:16:49.889 [DEBUG] [Thread-16372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:16:49.889 [DEBUG] [Thread-16372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:16:49.889 [DEBUG] [Thread-16372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:16:49.889 [DEBUG] [Thread-16372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:16:49.889 [DEBUG] [Thread-16372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:16:49.890 [DEBUG] [Thread-16372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:16:49.890 [DEBUG] [Thread-16372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:16:49.890 [DEBUG] [Thread-16372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:16:49.890 [DEBUG] [Thread-16372] [transport.py] [_log()] client lang: <none>
2026-04-15T09:16:49.890 [DEBUG] [Thread-16372] [transport.py] [_log()] server lang: <none>
2026-04-15T09:16:49.890 [DEBUG] [Thread-16372] [transport.py] [_log()] kex follows: False
2026-04-15T09:16:49.890 [DEBUG] [Thread-16372] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:16:49.890 [DEBUG] [Thread-16372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:16:49.890 [DEBUG] [Thread-16372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:16:49.890 [DEBUG] [Thread-16372] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:16:49.890 [DEBUG] [Thread-16372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:16:49.891 [DEBUG] [Thread-16372] [transport.py] [_log()] Compression: none
2026-04-15T09:16:49.891 [DEBUG] [Thread-16372] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:16:49.948 [DEBUG] [Thread-16372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:16:49.949 [DEBUG] [Thread-16372] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:16:49.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:16:49.950 [DEBUG] [Thread-16372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:16:49.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:16:50.009 [DEBUG] [Thread-16372] [transport.py] [_log()] userauth is OK
2026-04-15T09:16:50.009 [DEBUG] [Thread-16372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:16:50.009 [DEBUG] [Thread-16372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:16:50.009 [DEBUG] [Thread-16372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:16:50.010 [DEBUG] [Thread-16372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:16:50.034 [INFO] [Thread-16372] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:16:50.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:16:50.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:16:50.902 [DEBUG] [Thread-16372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:16:50.902 [DEBUG] [Thread-16372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:16:50.950 [DEBUG] [Thread-16372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:16:50.950 [DEBUG] [Thread-16372] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:16:50.959 [DEBUG] [Thread-16372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:16:50.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:16:50.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')
2026-04-15T09:16:50.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
2026-04-15T09:16:50.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:16:50.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:16:50.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:16:50.993 [DEBUG] [Thread-16372] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:16:54.757 [DEBUG] [Thread-16374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:16:54.895 [DEBUG] [Thread-16375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:17:09.801 [DEBUG] [Thread-16376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:17:19.427 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:17:19.428 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:17:20.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:17:20.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:17:20.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
2026-04-15T09:17:22.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 16, 53), 0.26069, 98.2021, 0.0, 17.5025, 9.1203, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:17:22.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:16:53
2026-04-15T09:17:22.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:17:23.108 [DEBUG] [Thread-16377] [transport.py] [_log()] starting thread (client mode): 0xf13e3040
2026-04-15T09:17:23.108 [DEBUG] [Thread-16377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:17:23.128 [DEBUG] [Thread-16377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:17:23.128 [INFO] [Thread-16377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:17:23.129 [DEBUG] [Thread-16377] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:17:23.129 [DEBUG] [Thread-16377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:17:23.129 [DEBUG] [Thread-16377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:17:23.130 [DEBUG] [Thread-16377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:17:23.130 [DEBUG] [Thread-16377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:17:23.130 [DEBUG] [Thread-16377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:17:23.130 [DEBUG] [Thread-16377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:17:23.130 [DEBUG] [Thread-16377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:17:23.130 [DEBUG] [Thread-16377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:17:23.130 [DEBUG] [Thread-16377] [transport.py] [_log()] client lang: <none>
2026-04-15T09:17:23.130 [DEBUG] [Thread-16377] [transport.py] [_log()] server lang: <none>
2026-04-15T09:17:23.130 [DEBUG] [Thread-16377] [transport.py] [_log()] kex follows: False
2026-04-15T09:17:23.130 [DEBUG] [Thread-16377] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:17:23.131 [DEBUG] [Thread-16377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:17:23.131 [DEBUG] [Thread-16377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:17:23.131 [DEBUG] [Thread-16377] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:17:23.131 [DEBUG] [Thread-16377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:17:23.131 [DEBUG] [Thread-16377] [transport.py] [_log()] Compression: none
2026-04-15T09:17:23.131 [DEBUG] [Thread-16377] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:17:23.139 [DEBUG] [Thread-16377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:17:23.140 [DEBUG] [Thread-16377] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:17:23.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:17:23.140 [DEBUG] [Thread-16377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:17:23.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:17:23.141 [DEBUG] [Thread-16377] [transport.py] [_log()] userauth is OK
2026-04-15T09:17:23.141 [DEBUG] [Thread-16377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:17:23.141 [DEBUG] [Thread-16377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:17:23.141 [DEBUG] [Thread-16377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:17:23.141 [DEBUG] [Thread-16377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:17:23.158 [INFO] [Thread-16377] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:17:23.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:17:23.827 [DEBUG] [Thread-16377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:17:23.827 [DEBUG] [Thread-16377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:17:23.828 [DEBUG] [Thread-16377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:17:23.868 [DEBUG] [Thread-16377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:17:23.868 [DEBUG] [Thread-16377] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:17:23.871 [DEBUG] [Thread-16377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:17:23.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:17:23.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:17:23.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:17:23.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:17:23.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:17:23.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:17:23.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:17:23.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:17:23.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:17:23.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.303603 -999.00   +8.60  25.04     96   +8.00 1 3 1 3 1   887    0 0.44 -1.36 ----- 25.0 25.0 305.4 28.7 12.3 -4.9 11.8 -3.2 11.1 -2.6 11.5 -3.0
2026-04-15T09:17:23.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:17:23.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:17:23.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.303603
2026-04-15T09:17:23.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:17:23.897 [DEBUG] [Thread-16377] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:17:23.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:17:23.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:17:23.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:17:23.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:17:23.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:16:53', tmtdew=0.26069, humidity=98.2021, cloud=0.0, wind=17.5025, temperature=9.1203, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:17:11.299', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:17:24.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:17:24.131 [DEBUG] [Thread-16380] [transport.py] [_log()] starting thread (client mode): 0xee9ec610
2026-04-15T09:17:24.131 [DEBUG] [Thread-16380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:17:24.147 [DEBUG] [Thread-16380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:17:24.147 [INFO] [Thread-16380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:17:24.154 [DEBUG] [Thread-16380] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:17:24.154 [DEBUG] [Thread-16380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:17:24.154 [DEBUG] [Thread-16380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:17:24.155 [DEBUG] [Thread-16380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:17:24.155 [DEBUG] [Thread-16380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:17:24.155 [DEBUG] [Thread-16380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:17:24.155 [DEBUG] [Thread-16380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:17:24.155 [DEBUG] [Thread-16380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:17:24.155 [DEBUG] [Thread-16380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:17:24.155 [DEBUG] [Thread-16380] [transport.py] [_log()] client lang: <none>
2026-04-15T09:17:24.155 [DEBUG] [Thread-16380] [transport.py] [_log()] server lang: <none>
2026-04-15T09:17:24.155 [DEBUG] [Thread-16380] [transport.py] [_log()] kex follows: False
2026-04-15T09:17:24.155 [DEBUG] [Thread-16380] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:17:24.155 [DEBUG] [Thread-16380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:17:24.156 [DEBUG] [Thread-16380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:17:24.156 [DEBUG] [Thread-16380] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:17:24.156 [DEBUG] [Thread-16380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:17:24.156 [DEBUG] [Thread-16380] [transport.py] [_log()] Compression: none
2026-04-15T09:17:24.156 [DEBUG] [Thread-16380] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:17:24.210 [DEBUG] [Thread-16380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:17:24.211 [DEBUG] [Thread-16380] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:17:24.211 [DEBUG] [Thread-16380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:17:24.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:17:24.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:17:24.268 [DEBUG] [Thread-16380] [transport.py] [_log()] userauth is OK
2026-04-15T09:17:24.268 [DEBUG] [Thread-16380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:17:24.268 [DEBUG] [Thread-16380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:17:24.268 [DEBUG] [Thread-16380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:17:24.268 [DEBUG] [Thread-16380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:17:24.293 [INFO] [Thread-16380] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:17:24.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:17:24.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:17:24.832 [DEBUG] [Thread-16382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:17:25.180 [DEBUG] [Thread-16380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:17:25.180 [DEBUG] [Thread-16380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:17:25.228 [DEBUG] [Thread-16380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:17:25.228 [DEBUG] [Thread-16380] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:17:25.237 [DEBUG] [Thread-16380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:17:25.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:17:25.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')
2026-04-15T09:17:25.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
2026-04-15T09:17:25.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:17:25.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:17:25.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:17:25.272 [DEBUG] [Thread-16380] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:17:39.878 [DEBUG] [Thread-16383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:17:54.910 [DEBUG] [Thread-16384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:17:55.019 [DEBUG] [Thread-16385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:17:55.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:17:55.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:17:55.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:17:56.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 17, 29), 0.17312, 98.6508, 0.0, 13.3038, 9.05898, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:17:56.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:17:29
2026-04-15T09:17:56.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:17:57.280 [DEBUG] [Thread-16386] [transport.py] [_log()] starting thread (client mode): 0xee9ee950
2026-04-15T09:17:57.280 [DEBUG] [Thread-16386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:17:57.295 [DEBUG] [Thread-16386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:17:57.295 [INFO] [Thread-16386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:17:57.298 [DEBUG] [Thread-16386] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:17:57.298 [DEBUG] [Thread-16386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:17:57.298 [DEBUG] [Thread-16386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:17:57.298 [DEBUG] [Thread-16386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:17:57.298 [DEBUG] [Thread-16386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:17:57.298 [DEBUG] [Thread-16386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:17:57.299 [DEBUG] [Thread-16386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:17:57.299 [DEBUG] [Thread-16386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:17:57.299 [DEBUG] [Thread-16386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:17:57.299 [DEBUG] [Thread-16386] [transport.py] [_log()] client lang: <none>
2026-04-15T09:17:57.299 [DEBUG] [Thread-16386] [transport.py] [_log()] server lang: <none>
2026-04-15T09:17:57.299 [DEBUG] [Thread-16386] [transport.py] [_log()] kex follows: False
2026-04-15T09:17:57.299 [DEBUG] [Thread-16386] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:17:57.299 [DEBUG] [Thread-16386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:17:57.299 [DEBUG] [Thread-16386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:17:57.299 [DEBUG] [Thread-16386] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:17:57.299 [DEBUG] [Thread-16386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:17:57.299 [DEBUG] [Thread-16386] [transport.py] [_log()] Compression: none
2026-04-15T09:17:57.299 [DEBUG] [Thread-16386] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:17:57.314 [DEBUG] [Thread-16386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:17:57.314 [DEBUG] [Thread-16386] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:17:57.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:17:57.315 [DEBUG] [Thread-16386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:17:57.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:17:57.315 [DEBUG] [Thread-16386] [transport.py] [_log()] userauth is OK
2026-04-15T09:17:57.315 [DEBUG] [Thread-16386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:17:57.315 [DEBUG] [Thread-16386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:17:57.316 [DEBUG] [Thread-16386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:17:57.316 [DEBUG] [Thread-16386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:17:57.328 [INFO] [Thread-16386] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:17:57.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:17:57.966 [DEBUG] [Thread-16386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:17:57.967 [DEBUG] [Thread-16386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:17:57.967 [DEBUG] [Thread-16386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:17:58.007 [DEBUG] [Thread-16386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:17:58.007 [DEBUG] [Thread-16386] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:17:58.010 [DEBUG] [Thread-16386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:17:58.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:17:58.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:17:58.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:17:58.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:17:58.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:17:58.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:17:58.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:17:58.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:17:58.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:17:58.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.303950 -999.00   +8.80  14.47     97   +8.30 1 3 1 3 1   887    0 0.43 -1.22 ----- 14.5 14.5 303.4 22.6 12.5 -3.1 11.9 -3.4 11.2 -2.0 11.5 -4.5
2026-04-15T09:17:58.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:17:58.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:17:58.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.303950
2026-04-15T09:17:58.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:17:58.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:17:58.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:17:58.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:17:58.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:17:58.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:17:29', tmtdew=0.17312, humidity=98.6508, cloud=0.0, wind=13.3038, temperature=9.05898, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:17:41.280', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:17:58.037 [DEBUG] [Thread-16386] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:17:58.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:17:58.310 [DEBUG] [Thread-16389] [transport.py] [_log()] starting thread (client mode): 0xee91e2c0
2026-04-15T09:17:58.310 [DEBUG] [Thread-16389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:17:58.324 [DEBUG] [Thread-16389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:17:58.324 [INFO] [Thread-16389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:17:58.331 [DEBUG] [Thread-16389] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:17:58.331 [DEBUG] [Thread-16389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:17:58.331 [DEBUG] [Thread-16389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:17:58.331 [DEBUG] [Thread-16389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:17:58.331 [DEBUG] [Thread-16389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:17:58.332 [DEBUG] [Thread-16389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:17:58.332 [DEBUG] [Thread-16389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:17:58.332 [DEBUG] [Thread-16389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:17:58.332 [DEBUG] [Thread-16389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:17:58.332 [DEBUG] [Thread-16389] [transport.py] [_log()] client lang: <none>
2026-04-15T09:17:58.332 [DEBUG] [Thread-16389] [transport.py] [_log()] server lang: <none>
2026-04-15T09:17:58.332 [DEBUG] [Thread-16389] [transport.py] [_log()] kex follows: False
2026-04-15T09:17:58.332 [DEBUG] [Thread-16389] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:17:58.332 [DEBUG] [Thread-16389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:17:58.332 [DEBUG] [Thread-16389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:17:58.332 [DEBUG] [Thread-16389] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:17:58.332 [DEBUG] [Thread-16389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:17:58.333 [DEBUG] [Thread-16389] [transport.py] [_log()] Compression: none
2026-04-15T09:17:58.333 [DEBUG] [Thread-16389] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:17:58.386 [DEBUG] [Thread-16389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:17:58.387 [DEBUG] [Thread-16389] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:17:58.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:17:58.387 [DEBUG] [Thread-16389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:17:58.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:17:58.444 [DEBUG] [Thread-16389] [transport.py] [_log()] userauth is OK
2026-04-15T09:17:58.444 [DEBUG] [Thread-16389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:17:58.444 [DEBUG] [Thread-16389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:17:58.444 [DEBUG] [Thread-16389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:17:58.444 [DEBUG] [Thread-16389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:17:58.472 [INFO] [Thread-16389] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:17:58.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:17:58.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:17:59.313 [DEBUG] [Thread-16389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:17:59.313 [DEBUG] [Thread-16389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:17:59.361 [DEBUG] [Thread-16389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:17:59.361 [DEBUG] [Thread-16389] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:17:59.369 [DEBUG] [Thread-16389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:17:59.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:17: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')
2026-04-15T09:17:59.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') -> 00000000
2026-04-15T09:17:59.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:17:59.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:17:59.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:17:59.404 [DEBUG] [Thread-16389] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:18:09.941 [DEBUG] [Thread-16391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:18:19.570 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:18:19.571 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:18:24.985 [DEBUG] [Thread-16392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:18:29.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:18:29.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:18:29.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
2026-04-15T09:18:30.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 18, 4), 0.16576, 98.7004, 0.0, 13.4978, 9.19156, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:18:30.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:18:04
2026-04-15T09:18:31.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:18:31.572 [DEBUG] [Thread-16393] [transport.py] [_log()] starting thread (client mode): 0xee91e110
2026-04-15T09:18:31.572 [DEBUG] [Thread-16393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:18:31.592 [DEBUG] [Thread-16393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:18:31.592 [INFO] [Thread-16393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:18:31.595 [DEBUG] [Thread-16393] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:18:31.595 [DEBUG] [Thread-16393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:18:31.595 [DEBUG] [Thread-16393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:18:31.595 [DEBUG] [Thread-16393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:18:31.595 [DEBUG] [Thread-16393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:18:31.596 [DEBUG] [Thread-16393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:18:31.596 [DEBUG] [Thread-16393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:18:31.596 [DEBUG] [Thread-16393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:18:31.596 [DEBUG] [Thread-16393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:18:31.596 [DEBUG] [Thread-16393] [transport.py] [_log()] client lang: <none>
2026-04-15T09:18:31.596 [DEBUG] [Thread-16393] [transport.py] [_log()] server lang: <none>
2026-04-15T09:18:31.596 [DEBUG] [Thread-16393] [transport.py] [_log()] kex follows: False
2026-04-15T09:18:31.597 [DEBUG] [Thread-16393] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:18:31.597 [DEBUG] [Thread-16393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:18:31.597 [DEBUG] [Thread-16393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:18:31.597 [DEBUG] [Thread-16393] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:18:31.597 [DEBUG] [Thread-16393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:18:31.597 [DEBUG] [Thread-16393] [transport.py] [_log()] Compression: none
2026-04-15T09:18:31.597 [DEBUG] [Thread-16393] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:18:31.605 [DEBUG] [Thread-16393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:18:31.606 [DEBUG] [Thread-16393] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:18:31.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:18:31.606 [DEBUG] [Thread-16393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:18:31.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:18:31.607 [DEBUG] [Thread-16393] [transport.py] [_log()] userauth is OK
2026-04-15T09:18:31.607 [DEBUG] [Thread-16393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:18:31.607 [DEBUG] [Thread-16393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:18:31.607 [DEBUG] [Thread-16393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:18:31.608 [DEBUG] [Thread-16393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:18:31.631 [INFO] [Thread-16393] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:18:31.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:18:32.284 [DEBUG] [Thread-16393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:18:32.284 [DEBUG] [Thread-16393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:18:32.285 [DEBUG] [Thread-16393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:18:32.325 [DEBUG] [Thread-16393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:18:32.325 [DEBUG] [Thread-16393] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:18:32.328 [DEBUG] [Thread-16393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:18:32.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:18:32.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:18:32.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:18:32.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:18:32.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:18:32.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:18:32.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:18:32.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:18:32.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:18:32.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.304298 -999.00   +8.80  23.95     97   +8.30 1 3 1 3 1   887    0 0.43 -1.32 ----- 23.9 23.9 307.6 24.8 12.7 -2.9 12.1 -2.4 11.2 -1.5 11.7 -0.8
2026-04-15T09:18:32.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:18:32.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:18:32.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.304298
2026-04-15T09:18:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:18:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:18:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:18:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:18:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:18:32.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:18:04', tmtdew=0.16576, humidity=98.7004, cloud=0.0, wind=13.4978, temperature=9.19156, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:18:11.347', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:18:32.352 [DEBUG] [Thread-16393] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:18:32.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:18:33.589 [DEBUG] [Thread-16396] [transport.py] [_log()] starting thread (client mode): 0xf13669e0
2026-04-15T09:18:33.590 [DEBUG] [Thread-16396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:18:33.604 [DEBUG] [Thread-16396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:18:33.604 [INFO] [Thread-16396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:18:33.611 [DEBUG] [Thread-16396] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:18:33.611 [DEBUG] [Thread-16396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:18:33.611 [DEBUG] [Thread-16396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:18:33.611 [DEBUG] [Thread-16396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:18:33.612 [DEBUG] [Thread-16396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:18:33.612 [DEBUG] [Thread-16396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:18:33.612 [DEBUG] [Thread-16396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:18:33.612 [DEBUG] [Thread-16396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:18:33.612 [DEBUG] [Thread-16396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:18:33.612 [DEBUG] [Thread-16396] [transport.py] [_log()] client lang: <none>
2026-04-15T09:18:33.612 [DEBUG] [Thread-16396] [transport.py] [_log()] server lang: <none>
2026-04-15T09:18:33.612 [DEBUG] [Thread-16396] [transport.py] [_log()] kex follows: False
2026-04-15T09:18:33.612 [DEBUG] [Thread-16396] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:18:33.612 [DEBUG] [Thread-16396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:18:33.612 [DEBUG] [Thread-16396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:18:33.612 [DEBUG] [Thread-16396] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:18:33.613 [DEBUG] [Thread-16396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:18:33.613 [DEBUG] [Thread-16396] [transport.py] [_log()] Compression: none
2026-04-15T09:18:33.613 [DEBUG] [Thread-16396] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:18:33.668 [DEBUG] [Thread-16396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:18:33.668 [DEBUG] [Thread-16396] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:18:33.669 [DEBUG] [Thread-16396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:18:33.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:18:33.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:18:33.724 [DEBUG] [Thread-16396] [transport.py] [_log()] userauth is OK
2026-04-15T09:18:33.724 [DEBUG] [Thread-16396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:18:33.725 [DEBUG] [Thread-16396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:18:33.725 [DEBUG] [Thread-16396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:18:33.725 [DEBUG] [Thread-16396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:18:33.748 [INFO] [Thread-16396] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:18:33.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:18:33.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:18:34.588 [DEBUG] [Thread-16396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:18:34.588 [DEBUG] [Thread-16396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:18:34.639 [DEBUG] [Thread-16396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:18:34.639 [DEBUG] [Thread-16396] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:18:34.649 [DEBUG] [Thread-16396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:18:34.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:18:34.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')
2026-04-15T09:18:34.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') -> 00000000
2026-04-15T09:18:34.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:18:34.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:18:34.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:18:34.684 [DEBUG] [Thread-16396] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:18:40.016 [DEBUG] [Thread-16398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:18:55.059 [DEBUG] [Thread-16399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:18:55.115 [DEBUG] [Thread-16400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:19:04.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:19:04.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:19:04.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
2026-04-15T09:19:05.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 18, 40), 0.26091, 98.2017, 0.0, 24.3115, 9.25278, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:19:05.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:18:40
2026-04-15T09:19:06.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:19:06.783 [DEBUG] [Thread-16401] [transport.py] [_log()] starting thread (client mode): 0xf13fff70
2026-04-15T09:19:06.783 [DEBUG] [Thread-16401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:19:06.804 [DEBUG] [Thread-16401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:19:06.804 [INFO] [Thread-16401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:19:06.805 [DEBUG] [Thread-16401] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:19:06.805 [DEBUG] [Thread-16401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:19:06.805 [DEBUG] [Thread-16401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:19:06.806 [DEBUG] [Thread-16401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:19:06.806 [DEBUG] [Thread-16401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:19:06.806 [DEBUG] [Thread-16401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:19:06.806 [DEBUG] [Thread-16401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:19:06.806 [DEBUG] [Thread-16401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:19:06.806 [DEBUG] [Thread-16401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:19:06.806 [DEBUG] [Thread-16401] [transport.py] [_log()] client lang: <none>
2026-04-15T09:19:06.806 [DEBUG] [Thread-16401] [transport.py] [_log()] server lang: <none>
2026-04-15T09:19:06.806 [DEBUG] [Thread-16401] [transport.py] [_log()] kex follows: False
2026-04-15T09:19:06.806 [DEBUG] [Thread-16401] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:19:06.806 [DEBUG] [Thread-16401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:19:06.806 [DEBUG] [Thread-16401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:19:06.807 [DEBUG] [Thread-16401] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:19:06.807 [DEBUG] [Thread-16401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:19:06.807 [DEBUG] [Thread-16401] [transport.py] [_log()] Compression: none
2026-04-15T09:19:06.807 [DEBUG] [Thread-16401] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:19:06.817 [DEBUG] [Thread-16401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:19:06.818 [DEBUG] [Thread-16401] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:19:06.818 [DEBUG] [Thread-16401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:19:06.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:19:06.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:19:06.819 [DEBUG] [Thread-16401] [transport.py] [_log()] userauth is OK
2026-04-15T09:19:06.820 [DEBUG] [Thread-16401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:19:06.820 [DEBUG] [Thread-16401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:19:06.820 [DEBUG] [Thread-16401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:19:06.820 [DEBUG] [Thread-16401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:19:06.837 [INFO] [Thread-16401] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:19:06.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:19:07.430 [DEBUG] [Thread-16401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:19:07.431 [DEBUG] [Thread-16401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:19:07.431 [DEBUG] [Thread-16401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:19:07.471 [DEBUG] [Thread-16401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:19:07.471 [DEBUG] [Thread-16401] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:19:07.474 [DEBUG] [Thread-16401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:19:07.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:19:07.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:19:07.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:19:07.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:19:07.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:19:07.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:19:07.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:19:07.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:19:07.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:19:07.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.304645 -999.00   +8.90  15.76     96   +8.40 1 3 1 3 1   887    0 0.43 -1.49 ----- 15.8 15.8 292.3 20.7 13.0 -1.4 12.3 -1.5 11.5 -0.2 11.8 -1.4
2026-04-15T09:19:07.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:19:07.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:19:07.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.304645
2026-04-15T09:19:07.496 [DEBUG] [Thread-16401] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:19:07.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:19:07.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:19:07.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:19:07.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:19:07.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:19:07.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:18:40', tmtdew=0.26091, humidity=98.2017, cloud=0.0, wind=24.3115, temperature=9.25278, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:18:41.328', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:19:07.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:19:07.724 [DEBUG] [Thread-16404] [transport.py] [_log()] starting thread (client mode): 0xee91fcd0
2026-04-15T09:19:07.724 [DEBUG] [Thread-16404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:19:07.738 [DEBUG] [Thread-16404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:19:07.738 [INFO] [Thread-16404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:19:07.745 [DEBUG] [Thread-16404] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:19:07.745 [DEBUG] [Thread-16404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:19:07.745 [DEBUG] [Thread-16404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:19:07.746 [DEBUG] [Thread-16404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:19:07.746 [DEBUG] [Thread-16404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:19:07.746 [DEBUG] [Thread-16404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:19:07.746 [DEBUG] [Thread-16404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:19:07.746 [DEBUG] [Thread-16404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:19:07.746 [DEBUG] [Thread-16404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:19:07.746 [DEBUG] [Thread-16404] [transport.py] [_log()] client lang: <none>
2026-04-15T09:19:07.746 [DEBUG] [Thread-16404] [transport.py] [_log()] server lang: <none>
2026-04-15T09:19:07.746 [DEBUG] [Thread-16404] [transport.py] [_log()] kex follows: False
2026-04-15T09:19:07.746 [DEBUG] [Thread-16404] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:19:07.746 [DEBUG] [Thread-16404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:19:07.746 [DEBUG] [Thread-16404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:19:07.746 [DEBUG] [Thread-16404] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:19:07.747 [DEBUG] [Thread-16404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:19:07.747 [DEBUG] [Thread-16404] [transport.py] [_log()] Compression: none
2026-04-15T09:19:07.747 [DEBUG] [Thread-16404] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:19:07.805 [DEBUG] [Thread-16404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:19:07.806 [DEBUG] [Thread-16404] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:19:07.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:19:07.806 [DEBUG] [Thread-16404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:19:07.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:19:07.861 [DEBUG] [Thread-16404] [transport.py] [_log()] userauth is OK
2026-04-15T09:19:07.862 [DEBUG] [Thread-16404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:19:07.862 [DEBUG] [Thread-16404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:19:07.862 [DEBUG] [Thread-16404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:19:07.862 [DEBUG] [Thread-16404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:19:07.891 [INFO] [Thread-16404] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:19:07.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:19:07.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:19:08.710 [DEBUG] [Thread-16404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:19:08.710 [DEBUG] [Thread-16404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:19:08.758 [DEBUG] [Thread-16404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:19:08.758 [DEBUG] [Thread-16404] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:19:08.767 [DEBUG] [Thread-16404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:19:08.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:19:08.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')
2026-04-15T09:19: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
2026-04-15T09:19:08.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:19:08.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:19:08.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:19:08.801 [DEBUG] [Thread-16404] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:19:10.089 [DEBUG] [Thread-16406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:19:19.711 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:19:19.712 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:19:25.133 [DEBUG] [Thread-16407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:19:38.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:19:38.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:19:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:19:40.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 19, 15), 0.183045, 98.5845, 0.0, 18.562, 9.07607, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:19:40.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:19:15
2026-04-15T09:19:40.164 [DEBUG] [Thread-16408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:19:40.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:19:40.957 [DEBUG] [Thread-16409] [transport.py] [_log()] starting thread (client mode): 0xf13fd630
2026-04-15T09:19:40.958 [DEBUG] [Thread-16409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:19:40.976 [DEBUG] [Thread-16409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:19:40.976 [INFO] [Thread-16409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:19:40.979 [DEBUG] [Thread-16409] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:19:40.979 [DEBUG] [Thread-16409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:19:40.979 [DEBUG] [Thread-16409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:19:40.979 [DEBUG] [Thread-16409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:19:40.979 [DEBUG] [Thread-16409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:19:40.979 [DEBUG] [Thread-16409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:19:40.979 [DEBUG] [Thread-16409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:19:40.979 [DEBUG] [Thread-16409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:19:40.979 [DEBUG] [Thread-16409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:19:40.979 [DEBUG] [Thread-16409] [transport.py] [_log()] client lang: <none>
2026-04-15T09:19:40.979 [DEBUG] [Thread-16409] [transport.py] [_log()] server lang: <none>
2026-04-15T09:19:40.979 [DEBUG] [Thread-16409] [transport.py] [_log()] kex follows: False
2026-04-15T09:19:40.979 [DEBUG] [Thread-16409] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:19:40.980 [DEBUG] [Thread-16409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:19:40.980 [DEBUG] [Thread-16409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:19:40.980 [DEBUG] [Thread-16409] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:19:40.980 [DEBUG] [Thread-16409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:19:40.980 [DEBUG] [Thread-16409] [transport.py] [_log()] Compression: none
2026-04-15T09:19:40.980 [DEBUG] [Thread-16409] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:19:40.996 [DEBUG] [Thread-16409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:19:40.996 [DEBUG] [Thread-16409] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:19:40.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:19:40.997 [DEBUG] [Thread-16409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:19:40.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:19:40.998 [DEBUG] [Thread-16409] [transport.py] [_log()] userauth is OK
2026-04-15T09:19:40.998 [DEBUG] [Thread-16409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:19:40.998 [DEBUG] [Thread-16409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:19:40.998 [DEBUG] [Thread-16409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:19:40.998 [DEBUG] [Thread-16409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:19:41.023 [INFO] [Thread-16409] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:19:41.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:19:41.650 [DEBUG] [Thread-16409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:19:41.650 [DEBUG] [Thread-16409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:19:41.650 [DEBUG] [Thread-16409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:19:41.691 [DEBUG] [Thread-16409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:19:41.691 [DEBUG] [Thread-16409] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:19:41.694 [DEBUG] [Thread-16409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:19:41.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:19:41.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:19:41.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:19:41.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:19:41.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:19:41.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:19:41.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:19:41.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:19:41.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:19:41.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.304992 -999.00   +9.00  22.67     97   +8.60 1 3 1 3 1   887    0 0.42 -1.85 ----- 22.7 22.7 286.6 25.7 13.1 -2.3 12.5 -1.5 11.6 -1.7 12.0 -0.5
2026-04-15T09:19:41.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:19:41.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:19:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.304992
2026-04-15T09:19:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:19:41.713 [DEBUG] [Thread-16409] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:19:41.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:19:41.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:19:41.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:19:41.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:19:41.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:19:15', tmtdew=0.183045, humidity=98.5845, cloud=0.0, wind=18.562, temperature=9.07607, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:19:11.309', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:19:41.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:19:41.968 [DEBUG] [Thread-16412] [transport.py] [_log()] starting thread (client mode): 0xee9ef7c0
2026-04-15T09:19:41.968 [DEBUG] [Thread-16412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:19:41.983 [DEBUG] [Thread-16412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:19:41.983 [INFO] [Thread-16412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:19:41.990 [DEBUG] [Thread-16412] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:19:41.990 [DEBUG] [Thread-16412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:19:41.990 [DEBUG] [Thread-16412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:19:41.990 [DEBUG] [Thread-16412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:19:41.990 [DEBUG] [Thread-16412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:19:41.990 [DEBUG] [Thread-16412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:19:41.990 [DEBUG] [Thread-16412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:19:41.991 [DEBUG] [Thread-16412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:19:41.991 [DEBUG] [Thread-16412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:19:41.991 [DEBUG] [Thread-16412] [transport.py] [_log()] client lang: <none>
2026-04-15T09:19:41.991 [DEBUG] [Thread-16412] [transport.py] [_log()] server lang: <none>
2026-04-15T09:19:41.991 [DEBUG] [Thread-16412] [transport.py] [_log()] kex follows: False
2026-04-15T09:19:41.991 [DEBUG] [Thread-16412] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:19:41.991 [DEBUG] [Thread-16412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:19:41.991 [DEBUG] [Thread-16412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:19:41.991 [DEBUG] [Thread-16412] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:19:41.991 [DEBUG] [Thread-16412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:19:41.991 [DEBUG] [Thread-16412] [transport.py] [_log()] Compression: none
2026-04-15T09:19:41.992 [DEBUG] [Thread-16412] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:19:42.048 [DEBUG] [Thread-16412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:19:42.049 [DEBUG] [Thread-16412] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:19:42.049 [DEBUG] [Thread-16412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:19:42.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:19:42.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:19:42.107 [DEBUG] [Thread-16412] [transport.py] [_log()] userauth is OK
2026-04-15T09:19:42.107 [DEBUG] [Thread-16412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:19:42.107 [DEBUG] [Thread-16412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:19:42.107 [DEBUG] [Thread-16412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:19:42.107 [DEBUG] [Thread-16412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:19:42.135 [INFO] [Thread-16412] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:19:42.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:19:42.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:19:42.936 [DEBUG] [Thread-16412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:19:42.937 [DEBUG] [Thread-16412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:19:42.984 [DEBUG] [Thread-16412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:19:42.984 [DEBUG] [Thread-16412] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:19:42.993 [DEBUG] [Thread-16412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:19:43.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:19:43.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')
2026-04-15T09:19:43.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
2026-04-15T09:19:43.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:19:43.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:19:43.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:19:43.028 [DEBUG] [Thread-16412] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:19:55.191 [DEBUG] [Thread-16414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:19:55.195 [DEBUG] [Thread-16415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:20:10.237 [DEBUG] [Thread-16416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:20:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:20:13.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:20:13.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
2026-04-15T09:20:14.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 19, 51), 0.25653, 98.2354, 0.0, 23.5354, 9.85027, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:20:14.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:19:51
2026-04-15T09:20:14.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:20:15.150 [DEBUG] [Thread-16417] [transport.py] [_log()] starting thread (client mode): 0xf13e39a0
2026-04-15T09:20:15.150 [DEBUG] [Thread-16417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:20:15.167 [DEBUG] [Thread-16417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:20:15.167 [INFO] [Thread-16417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:20:15.170 [DEBUG] [Thread-16417] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:20:15.170 [DEBUG] [Thread-16417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:20:15.170 [DEBUG] [Thread-16417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:20:15.170 [DEBUG] [Thread-16417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:20:15.170 [DEBUG] [Thread-16417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:20:15.170 [DEBUG] [Thread-16417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:20:15.170 [DEBUG] [Thread-16417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:20:15.171 [DEBUG] [Thread-16417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:20:15.171 [DEBUG] [Thread-16417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:20:15.171 [DEBUG] [Thread-16417] [transport.py] [_log()] client lang: <none>
2026-04-15T09:20:15.171 [DEBUG] [Thread-16417] [transport.py] [_log()] server lang: <none>
2026-04-15T09:20:15.171 [DEBUG] [Thread-16417] [transport.py] [_log()] kex follows: False
2026-04-15T09:20:15.171 [DEBUG] [Thread-16417] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:20:15.171 [DEBUG] [Thread-16417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:20:15.171 [DEBUG] [Thread-16417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:20:15.171 [DEBUG] [Thread-16417] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:20:15.171 [DEBUG] [Thread-16417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:20:15.172 [DEBUG] [Thread-16417] [transport.py] [_log()] Compression: none
2026-04-15T09:20:15.172 [DEBUG] [Thread-16417] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:20:15.185 [DEBUG] [Thread-16417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:20:15.185 [DEBUG] [Thread-16417] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:20:15.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:20:15.186 [DEBUG] [Thread-16417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:20:15.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:20:15.187 [DEBUG] [Thread-16417] [transport.py] [_log()] userauth is OK
2026-04-15T09:20:15.187 [DEBUG] [Thread-16417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:20:15.187 [DEBUG] [Thread-16417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:20:15.187 [DEBUG] [Thread-16417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:20:15.188 [DEBUG] [Thread-16417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:20:15.213 [INFO] [Thread-16417] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:20:15.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:20:15.846 [DEBUG] [Thread-16417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:20:15.846 [DEBUG] [Thread-16417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:20:15.847 [DEBUG] [Thread-16417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:20:15.887 [DEBUG] [Thread-16417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:20:15.887 [DEBUG] [Thread-16417] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:20:15.890 [DEBUG] [Thread-16417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:20:15.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:20:15.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:20:15.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:20:15.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:20:15.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:20:15.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:20:15.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:20:15.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:20:15.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:20:15.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.305339 -999.00   +8.90  17.95     96   +8.50 1 3 1 3 1   887    0 0.41 -2.04 ----- 17.9 17.9 311.4 24.9 13.2 -2.0 12.6 -1.9 11.5 -1.1 12.1 -1.4
2026-04-15T09:20:15.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:20:15.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:20:15.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.305339
2026-04-15T09:20:15.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:20:15.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:20:15.908 [DEBUG] [Thread-16417] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:20:15.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:20:15.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:20:15.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:20:15.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:19:51', tmtdew=0.25653, humidity=98.2354, cloud=0.0, wind=23.5354, temperature=9.85027, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:19:41.290', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:20:16.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:20:16.161 [DEBUG] [Thread-16420] [transport.py] [_log()] starting thread (client mode): 0xee98b910
2026-04-15T09:20:16.162 [DEBUG] [Thread-16420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:20:16.176 [DEBUG] [Thread-16420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:20:16.176 [INFO] [Thread-16420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:20:16.183 [DEBUG] [Thread-16420] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:20:16.183 [DEBUG] [Thread-16420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:20:16.183 [DEBUG] [Thread-16420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:20:16.183 [DEBUG] [Thread-16420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:20:16.184 [DEBUG] [Thread-16420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:20:16.184 [DEBUG] [Thread-16420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:20:16.184 [DEBUG] [Thread-16420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:20:16.184 [DEBUG] [Thread-16420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:20:16.184 [DEBUG] [Thread-16420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:20:16.184 [DEBUG] [Thread-16420] [transport.py] [_log()] client lang: <none>
2026-04-15T09:20:16.184 [DEBUG] [Thread-16420] [transport.py] [_log()] server lang: <none>
2026-04-15T09:20:16.184 [DEBUG] [Thread-16420] [transport.py] [_log()] kex follows: False
2026-04-15T09:20:16.184 [DEBUG] [Thread-16420] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:20:16.184 [DEBUG] [Thread-16420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:20:16.184 [DEBUG] [Thread-16420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:20:16.184 [DEBUG] [Thread-16420] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:20:16.185 [DEBUG] [Thread-16420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:20:16.185 [DEBUG] [Thread-16420] [transport.py] [_log()] Compression: none
2026-04-15T09:20:16.185 [DEBUG] [Thread-16420] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:20:16.238 [DEBUG] [Thread-16420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:20:16.238 [DEBUG] [Thread-16420] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:20:16.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:20:16.239 [DEBUG] [Thread-16420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:20:16.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:20:16.295 [DEBUG] [Thread-16420] [transport.py] [_log()] userauth is OK
2026-04-15T09:20:16.295 [DEBUG] [Thread-16420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:20:16.295 [DEBUG] [Thread-16420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:20:16.296 [DEBUG] [Thread-16420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:20:16.296 [DEBUG] [Thread-16420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:20:16.315 [INFO] [Thread-16420] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:20:16.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:20:16.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:20:17.145 [DEBUG] [Thread-16420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:20:17.145 [DEBUG] [Thread-16420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:20:17.192 [DEBUG] [Thread-16420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:20:17.192 [DEBUG] [Thread-16420] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:20:17.201 [DEBUG] [Thread-16420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:20:17.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:20:17.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')
2026-04-15T09:20:17.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') -> 00000000
2026-04-15T09:20:17.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:20:17.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:20:17.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:20:17.236 [DEBUG] [Thread-16420] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:20:19.854 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:20:19.855 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:20:25.269 [DEBUG] [Thread-16422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:20:40.314 [DEBUG] [Thread-16423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:20:47.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:20:47.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:20:47.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:20:48.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 20, 27), 0.12323, 98.6507, 0.0, 20.0966, 9.09183, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:20:48.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:20:27
2026-04-15T09:20:48.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:20:49.368 [DEBUG] [Thread-16424] [transport.py] [_log()] starting thread (client mode): 0xee91fd00
2026-04-15T09:20:49.368 [DEBUG] [Thread-16424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:20:49.382 [DEBUG] [Thread-16424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:20:49.382 [INFO] [Thread-16424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:20:49.384 [DEBUG] [Thread-16424] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:20:49.384 [DEBUG] [Thread-16424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:20:49.384 [DEBUG] [Thread-16424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:20:49.384 [DEBUG] [Thread-16424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:20:49.384 [DEBUG] [Thread-16424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:20:49.384 [DEBUG] [Thread-16424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:20:49.384 [DEBUG] [Thread-16424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:20:49.385 [DEBUG] [Thread-16424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:20:49.385 [DEBUG] [Thread-16424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:20:49.385 [DEBUG] [Thread-16424] [transport.py] [_log()] client lang: <none>
2026-04-15T09:20:49.385 [DEBUG] [Thread-16424] [transport.py] [_log()] server lang: <none>
2026-04-15T09:20:49.385 [DEBUG] [Thread-16424] [transport.py] [_log()] kex follows: False
2026-04-15T09:20:49.385 [DEBUG] [Thread-16424] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:20:49.385 [DEBUG] [Thread-16424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:20:49.385 [DEBUG] [Thread-16424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:20:49.385 [DEBUG] [Thread-16424] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:20:49.385 [DEBUG] [Thread-16424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:20:49.385 [DEBUG] [Thread-16424] [transport.py] [_log()] Compression: none
2026-04-15T09:20:49.385 [DEBUG] [Thread-16424] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:20:49.395 [DEBUG] [Thread-16424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:20:49.395 [DEBUG] [Thread-16424] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:20:49.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:20:49.396 [DEBUG] [Thread-16424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:20:49.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:20:49.397 [DEBUG] [Thread-16424] [transport.py] [_log()] userauth is OK
2026-04-15T09:20:49.397 [DEBUG] [Thread-16424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:20:49.397 [DEBUG] [Thread-16424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:20:49.397 [DEBUG] [Thread-16424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:20:49.397 [DEBUG] [Thread-16424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:20:49.419 [INFO] [Thread-16424] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:20:49.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:20:50.026 [DEBUG] [Thread-16424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:20:50.026 [DEBUG] [Thread-16424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:20:50.027 [DEBUG] [Thread-16424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:20:50.067 [DEBUG] [Thread-16424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:20:50.067 [DEBUG] [Thread-16424] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:20:50.069 [DEBUG] [Thread-16424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:20:50.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:20:50.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:20:50.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:20:50.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:20:50.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:20:50.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:20:50.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:20:50.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:20:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:20:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.306034 -999.00   +9.00  20.00     96   +8.50 1 3 1 3 1   887    0 0.40 -2.15 ----- 20.0 20.0 309.6 27.8 13.3 -3.5 12.8 -3.1 11.7 -1.6 12.2 -1.5
2026-04-15T09:20:50.092 [DEBUG] [Thread-16424] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:20:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:20:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:20:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.306034
2026-04-15T09:20:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:20:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:20:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:20:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:20:50.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:20:50.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:20:27', tmtdew=0.12323, humidity=98.6507, cloud=0.0, wind=20.0966, temperature=9.09183, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:20:41.338', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:20:50.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:20:50.344 [DEBUG] [Thread-16427] [transport.py] [_log()] starting thread (client mode): 0xf1364dc0
2026-04-15T09:20:50.345 [DEBUG] [Thread-16427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:20:50.360 [DEBUG] [Thread-16427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:20:50.360 [INFO] [Thread-16427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:20:50.368 [DEBUG] [Thread-16427] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:20:50.368 [DEBUG] [Thread-16427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:20:50.368 [DEBUG] [Thread-16427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:20:50.368 [DEBUG] [Thread-16427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:20:50.368 [DEBUG] [Thread-16427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:20:50.368 [DEBUG] [Thread-16427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:20:50.368 [DEBUG] [Thread-16427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:20:50.368 [DEBUG] [Thread-16427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:20:50.368 [DEBUG] [Thread-16427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:20:50.368 [DEBUG] [Thread-16427] [transport.py] [_log()] client lang: <none>
2026-04-15T09:20:50.368 [DEBUG] [Thread-16427] [transport.py] [_log()] server lang: <none>
2026-04-15T09:20:50.369 [DEBUG] [Thread-16427] [transport.py] [_log()] kex follows: False
2026-04-15T09:20:50.369 [DEBUG] [Thread-16427] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:20:50.369 [DEBUG] [Thread-16427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:20:50.369 [DEBUG] [Thread-16427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:20:50.369 [DEBUG] [Thread-16427] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:20:50.369 [DEBUG] [Thread-16427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:20:50.369 [DEBUG] [Thread-16427] [transport.py] [_log()] Compression: none
2026-04-15T09:20:50.369 [DEBUG] [Thread-16427] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:20:50.424 [DEBUG] [Thread-16427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:20:50.425 [DEBUG] [Thread-16427] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:20:50.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:20:50.426 [DEBUG] [Thread-16427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:20:50.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:20:50.483 [DEBUG] [Thread-16427] [transport.py] [_log()] userauth is OK
2026-04-15T09:20:50.484 [DEBUG] [Thread-16427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:20:50.484 [DEBUG] [Thread-16427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:20:50.484 [DEBUG] [Thread-16427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:20:50.484 [DEBUG] [Thread-16427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:20:50.509 [INFO] [Thread-16427] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:20:50.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:20:50.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:20:51.319 [DEBUG] [Thread-16427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:20:51.320 [DEBUG] [Thread-16427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:20:51.367 [DEBUG] [Thread-16427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:20:51.367 [DEBUG] [Thread-16427] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:20:51.376 [DEBUG] [Thread-16427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:20:51.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:20:51.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')
2026-04-15T09:20:51.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
2026-04-15T09:20:51.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:20:51.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:20:51.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:20:51.413 [DEBUG] [Thread-16427] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:20:55.280 [DEBUG] [Thread-16429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:20:55.344 [DEBUG] [Thread-16430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:21:10.389 [DEBUG] [Thread-16431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:21:19.995 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:21:19.996 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:21:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:21:21.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:21:21.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
2026-04-15T09:21:22.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 21, 2), 0.13324, 98.5843, 0.0, 17.5036, 9.05865, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:21:22.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:21:02
2026-04-15T09:21:23.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:21:23.535 [DEBUG] [Thread-16432] [transport.py] [_log()] starting thread (client mode): 0xee98af80
2026-04-15T09:21:23.536 [DEBUG] [Thread-16432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:21:23.546 [DEBUG] [Thread-16432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:21:23.546 [INFO] [Thread-16432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:21:23.547 [DEBUG] [Thread-16432] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:21:23.547 [DEBUG] [Thread-16432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:21:23.547 [DEBUG] [Thread-16432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:21:23.547 [DEBUG] [Thread-16432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:21:23.548 [DEBUG] [Thread-16432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:21:23.548 [DEBUG] [Thread-16432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:21:23.548 [DEBUG] [Thread-16432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:21:23.548 [DEBUG] [Thread-16432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:21:23.548 [DEBUG] [Thread-16432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:21:23.548 [DEBUG] [Thread-16432] [transport.py] [_log()] client lang: <none>
2026-04-15T09:21:23.548 [DEBUG] [Thread-16432] [transport.py] [_log()] server lang: <none>
2026-04-15T09:21:23.548 [DEBUG] [Thread-16432] [transport.py] [_log()] kex follows: False
2026-04-15T09:21:23.548 [DEBUG] [Thread-16432] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:21:23.548 [DEBUG] [Thread-16432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:21:23.548 [DEBUG] [Thread-16432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:21:23.548 [DEBUG] [Thread-16432] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:21:23.548 [DEBUG] [Thread-16432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:21:23.548 [DEBUG] [Thread-16432] [transport.py] [_log()] Compression: none
2026-04-15T09:21:23.548 [DEBUG] [Thread-16432] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:21:23.561 [DEBUG] [Thread-16432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:21:23.561 [DEBUG] [Thread-16432] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:21:23.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:21:23.562 [DEBUG] [Thread-16432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:21:23.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:21:23.562 [DEBUG] [Thread-16432] [transport.py] [_log()] userauth is OK
2026-04-15T09:21:23.562 [DEBUG] [Thread-16432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:21:23.562 [DEBUG] [Thread-16432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:21:23.563 [DEBUG] [Thread-16432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:21:23.563 [DEBUG] [Thread-16432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:21:23.575 [INFO] [Thread-16432] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:21:23.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:21:24.167 [DEBUG] [Thread-16432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:21:24.167 [DEBUG] [Thread-16432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:21:24.168 [DEBUG] [Thread-16432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:21:24.208 [DEBUG] [Thread-16432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:21:24.208 [DEBUG] [Thread-16432] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:21:24.211 [DEBUG] [Thread-16432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:21:24.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:21:24.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:21:24.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:21:24.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:21:24.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:21:24.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:21:24.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:21:24.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:21:24.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:21:24.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.306381 -999.00   +8.90  18.24     96   +8.40 1 3 1 3 1   887    0 0.42 -1.58 ----- 18.2 18.2 300.4 22.8 13.3 -3.0 12.7 -2.9 11.6 -1.9 12.2 -1.7
2026-04-15T09:21:24.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:21:24.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:21:24.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.306381
2026-04-15T09:21:24.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:21:24.233 [DEBUG] [Thread-16432] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:21:24.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:21:24.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:21:24.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:21:24.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:21:24.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:21:02', tmtdew=0.13324, humidity=98.5843, cloud=0.0, wind=17.5036, temperature=9.05865, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:21:11.318', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:21:24.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:21:24.489 [DEBUG] [Thread-16435] [transport.py] [_log()] starting thread (client mode): 0xf13c8a30
2026-04-15T09:21:24.489 [DEBUG] [Thread-16435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:21:24.509 [DEBUG] [Thread-16435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:21:24.509 [INFO] [Thread-16435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:21:24.517 [DEBUG] [Thread-16435] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:21:24.517 [DEBUG] [Thread-16435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:21:24.517 [DEBUG] [Thread-16435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:21:24.517 [DEBUG] [Thread-16435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:21:24.517 [DEBUG] [Thread-16435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:21:24.517 [DEBUG] [Thread-16435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:21:24.518 [DEBUG] [Thread-16435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:21:24.518 [DEBUG] [Thread-16435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:21:24.518 [DEBUG] [Thread-16435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:21:24.518 [DEBUG] [Thread-16435] [transport.py] [_log()] client lang: <none>
2026-04-15T09:21:24.518 [DEBUG] [Thread-16435] [transport.py] [_log()] server lang: <none>
2026-04-15T09:21:24.518 [DEBUG] [Thread-16435] [transport.py] [_log()] kex follows: False
2026-04-15T09:21:24.518 [DEBUG] [Thread-16435] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:21:24.518 [DEBUG] [Thread-16435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:21:24.518 [DEBUG] [Thread-16435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:21:24.518 [DEBUG] [Thread-16435] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:21:24.518 [DEBUG] [Thread-16435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:21:24.518 [DEBUG] [Thread-16435] [transport.py] [_log()] Compression: none
2026-04-15T09:21:24.519 [DEBUG] [Thread-16435] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:21:24.573 [DEBUG] [Thread-16435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:21:24.573 [DEBUG] [Thread-16435] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:21:24.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:21:24.574 [DEBUG] [Thread-16435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:21:24.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:21:24.629 [DEBUG] [Thread-16435] [transport.py] [_log()] userauth is OK
2026-04-15T09:21:24.630 [DEBUG] [Thread-16435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:21:24.630 [DEBUG] [Thread-16435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:21:24.630 [DEBUG] [Thread-16435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:21:24.630 [DEBUG] [Thread-16435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:21:24.656 [INFO] [Thread-16435] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:21:24.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:21:24.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:21:25.421 [DEBUG] [Thread-16437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:21:25.507 [DEBUG] [Thread-16435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:21:25.507 [DEBUG] [Thread-16435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:21:25.556 [DEBUG] [Thread-16435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:21:25.556 [DEBUG] [Thread-16435] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:21:25.565 [DEBUG] [Thread-16435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:21:25.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:21:25.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')
2026-04-15T09:21:25.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
2026-04-15T09:21:25.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:21:25.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:21:25.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:21:25.599 [DEBUG] [Thread-16435] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:21:40.464 [DEBUG] [Thread-16438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:21:55.371 [DEBUG] [Thread-16439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:21:55.497 [DEBUG] [Thread-16440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:21:55.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:21:55.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:21:55.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
2026-04-15T09:21:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 21, 37), 0.2515, 98.2678, 0.0, 21.7714, 9.75029, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:21:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:21:37
2026-04-15T09:21:57.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:21:57.870 [DEBUG] [Thread-16441] [transport.py] [_log()] starting thread (client mode): 0xee91e890
2026-04-15T09:21:57.870 [DEBUG] [Thread-16441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:21:57.882 [DEBUG] [Thread-16441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:21:57.882 [INFO] [Thread-16441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:21:57.885 [DEBUG] [Thread-16441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:21:57.885 [DEBUG] [Thread-16441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:21:57.885 [DEBUG] [Thread-16441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:21:57.885 [DEBUG] [Thread-16441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:21:57.886 [DEBUG] [Thread-16441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:21:57.886 [DEBUG] [Thread-16441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:21:57.886 [DEBUG] [Thread-16441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:21:57.886 [DEBUG] [Thread-16441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:21:57.886 [DEBUG] [Thread-16441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:21:57.886 [DEBUG] [Thread-16441] [transport.py] [_log()] client lang: <none>
2026-04-15T09:21:57.886 [DEBUG] [Thread-16441] [transport.py] [_log()] server lang: <none>
2026-04-15T09:21:57.886 [DEBUG] [Thread-16441] [transport.py] [_log()] kex follows: False
2026-04-15T09:21:57.886 [DEBUG] [Thread-16441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:21:57.886 [DEBUG] [Thread-16441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:21:57.886 [DEBUG] [Thread-16441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:21:57.886 [DEBUG] [Thread-16441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:21:57.886 [DEBUG] [Thread-16441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:21:57.887 [DEBUG] [Thread-16441] [transport.py] [_log()] Compression: none
2026-04-15T09:21:57.887 [DEBUG] [Thread-16441] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:21:57.902 [DEBUG] [Thread-16441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:21:57.902 [DEBUG] [Thread-16441] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:21:57.902 [DEBUG] [Thread-16441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:21:57.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:21:57.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:21:57.903 [DEBUG] [Thread-16441] [transport.py] [_log()] userauth is OK
2026-04-15T09:21:57.904 [DEBUG] [Thread-16441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:21:57.904 [DEBUG] [Thread-16441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:21:57.904 [DEBUG] [Thread-16441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:21:57.904 [DEBUG] [Thread-16441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:21:57.920 [INFO] [Thread-16441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:21:57.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:21:58.522 [DEBUG] [Thread-16441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:21:58.522 [DEBUG] [Thread-16441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:21:58.523 [DEBUG] [Thread-16441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:21:58.563 [DEBUG] [Thread-16441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:21:58.563 [DEBUG] [Thread-16441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:21:58.565 [DEBUG] [Thread-16441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:21:58.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:21:58.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:21:58.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:21:58.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:21:58.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:21:58.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:21:58.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:21:58.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:21:58.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:21:58.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.306728 -999.00   +9.10  20.07     96   +8.60 1 3 1 3 1   887    0 0.42 -1.60 ----- 20.1 20.1 310.6 25.2 13.3 -3.5 12.8 -2.8 11.7 -1.5 12.2 -1.5
2026-04-15T09:21:58.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:21:58.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:21:58.584 [DEBUG] [Thread-16441] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:21:58.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.306728
2026-04-15T09:21:58.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:21:58.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:21:58.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:21:58.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:21:58.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:21:58.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:21:37', tmtdew=0.2515, humidity=98.2678, cloud=0.0, wind=21.7714, temperature=9.75029, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:21:41.299', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:21:58.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:21:58.838 [DEBUG] [Thread-16444] [transport.py] [_log()] starting thread (client mode): 0xf1365a80
2026-04-15T09:21:58.838 [DEBUG] [Thread-16444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:21:58.853 [DEBUG] [Thread-16444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:21:58.853 [INFO] [Thread-16444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:21:58.860 [DEBUG] [Thread-16444] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:21:58.860 [DEBUG] [Thread-16444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:21:58.860 [DEBUG] [Thread-16444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:21:58.861 [DEBUG] [Thread-16444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:21:58.861 [DEBUG] [Thread-16444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:21:58.861 [DEBUG] [Thread-16444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:21:58.861 [DEBUG] [Thread-16444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:21:58.861 [DEBUG] [Thread-16444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:21:58.861 [DEBUG] [Thread-16444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:21:58.861 [DEBUG] [Thread-16444] [transport.py] [_log()] client lang: <none>
2026-04-15T09:21:58.861 [DEBUG] [Thread-16444] [transport.py] [_log()] server lang: <none>
2026-04-15T09:21:58.861 [DEBUG] [Thread-16444] [transport.py] [_log()] kex follows: False
2026-04-15T09:21:58.861 [DEBUG] [Thread-16444] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:21:58.861 [DEBUG] [Thread-16444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:21:58.861 [DEBUG] [Thread-16444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:21:58.862 [DEBUG] [Thread-16444] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:21:58.862 [DEBUG] [Thread-16444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:21:58.862 [DEBUG] [Thread-16444] [transport.py] [_log()] Compression: none
2026-04-15T09:21:58.862 [DEBUG] [Thread-16444] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:21:58.920 [DEBUG] [Thread-16444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:21:58.920 [DEBUG] [Thread-16444] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:21:58.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:21:58.921 [DEBUG] [Thread-16444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:21:58.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:21:58.980 [DEBUG] [Thread-16444] [transport.py] [_log()] userauth is OK
2026-04-15T09:21:58.980 [DEBUG] [Thread-16444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:21:58.980 [DEBUG] [Thread-16444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:21:58.980 [DEBUG] [Thread-16444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:21:58.980 [DEBUG] [Thread-16444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:21:59.010 [INFO] [Thread-16444] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:21:59.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:21:59.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:21:59.829 [DEBUG] [Thread-16444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:21:59.829 [DEBUG] [Thread-16444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:21:59.877 [DEBUG] [Thread-16444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:21:59.878 [DEBUG] [Thread-16444] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:21:59.887 [DEBUG] [Thread-16444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:21:59.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:21:59.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')
2026-04-15T09:21:59.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
2026-04-15T09:21:59.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:21:59.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:21:59.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:21:59.928 [DEBUG] [Thread-16444] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:22:10.526 [DEBUG] [Thread-16446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:22:20.137 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:22:20.138 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:22:25.570 [DEBUG] [Thread-16447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:22:29.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:22:29.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:22:29.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
2026-04-15T09:22:31.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 22, 13), 0.123275, 98.6504, 0.0, 17.4323, 9.04165, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:22:31.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:22:13
2026-04-15T09:22:31.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:22:32.100 [DEBUG] [Thread-16448] [transport.py] [_log()] starting thread (client mode): 0xee905750
2026-04-15T09:22:32.100 [DEBUG] [Thread-16448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:22:32.122 [DEBUG] [Thread-16448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:22:32.122 [INFO] [Thread-16448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:22:32.124 [DEBUG] [Thread-16448] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:22:32.125 [DEBUG] [Thread-16448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:22:32.125 [DEBUG] [Thread-16448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:22:32.125 [DEBUG] [Thread-16448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:22:32.125 [DEBUG] [Thread-16448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:22:32.125 [DEBUG] [Thread-16448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:22:32.125 [DEBUG] [Thread-16448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:22:32.125 [DEBUG] [Thread-16448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:22:32.125 [DEBUG] [Thread-16448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:22:32.125 [DEBUG] [Thread-16448] [transport.py] [_log()] client lang: <none>
2026-04-15T09:22:32.125 [DEBUG] [Thread-16448] [transport.py] [_log()] server lang: <none>
2026-04-15T09:22:32.125 [DEBUG] [Thread-16448] [transport.py] [_log()] kex follows: False
2026-04-15T09:22:32.126 [DEBUG] [Thread-16448] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:22:32.126 [DEBUG] [Thread-16448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:22:32.126 [DEBUG] [Thread-16448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:22:32.126 [DEBUG] [Thread-16448] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:22:32.126 [DEBUG] [Thread-16448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:22:32.126 [DEBUG] [Thread-16448] [transport.py] [_log()] Compression: none
2026-04-15T09:22:32.126 [DEBUG] [Thread-16448] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:22:32.135 [DEBUG] [Thread-16448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:22:32.135 [DEBUG] [Thread-16448] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:22:32.135 [DEBUG] [Thread-16448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:22:32.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:22:32.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:22:32.137 [DEBUG] [Thread-16448] [transport.py] [_log()] userauth is OK
2026-04-15T09:22:32.137 [DEBUG] [Thread-16448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:22:32.137 [DEBUG] [Thread-16448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:22:32.137 [DEBUG] [Thread-16448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:22:32.137 [DEBUG] [Thread-16448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:22:32.160 [INFO] [Thread-16448] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:22:32.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:22:32.718 [DEBUG] [Thread-16448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:22:32.719 [DEBUG] [Thread-16448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:22:32.719 [DEBUG] [Thread-16448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:22:32.759 [DEBUG] [Thread-16448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:22:32.759 [DEBUG] [Thread-16448] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:22:32.761 [DEBUG] [Thread-16448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:22:32.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:22:32.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:22:32.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:22:32.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:22:32.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:22:32.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:22:32.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:22:32.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:22:32.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:22:32.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.307075 -999.00   +9.20  21.69     96   +8.70 1 3 1 3 1   887    0 0.42 -1.56 ----- 21.7 21.7 307.8 25.0 13.2 -3.7 12.7 -2.9 11.6 -1.7 12.2 -2.0
2026-04-15T09:22:32.777 [DEBUG] [Thread-16448] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:22:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:22:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:22:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.307075
2026-04-15T09:22:32.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:22:32.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:22:32.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:22:32.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:22:32.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:22:32.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:22:13', tmtdew=0.123275, humidity=98.6504, cloud=0.0, wind=17.4323, temperature=9.04165, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:22:11.280', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:22:33.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:22:33.038 [DEBUG] [Thread-16451] [transport.py] [_log()] starting thread (client mode): 0xee904040
2026-04-15T09:22:33.038 [DEBUG] [Thread-16451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:22:33.053 [DEBUG] [Thread-16451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:22:33.054 [INFO] [Thread-16451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:22:33.061 [DEBUG] [Thread-16451] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:22:33.061 [DEBUG] [Thread-16451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:22:33.061 [DEBUG] [Thread-16451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:22:33.061 [DEBUG] [Thread-16451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:22:33.061 [DEBUG] [Thread-16451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:22:33.061 [DEBUG] [Thread-16451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:22:33.061 [DEBUG] [Thread-16451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:22:33.062 [DEBUG] [Thread-16451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:22:33.062 [DEBUG] [Thread-16451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:22:33.062 [DEBUG] [Thread-16451] [transport.py] [_log()] client lang: <none>
2026-04-15T09:22:33.062 [DEBUG] [Thread-16451] [transport.py] [_log()] server lang: <none>
2026-04-15T09:22:33.062 [DEBUG] [Thread-16451] [transport.py] [_log()] kex follows: False
2026-04-15T09:22:33.062 [DEBUG] [Thread-16451] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:22:33.062 [DEBUG] [Thread-16451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:22:33.062 [DEBUG] [Thread-16451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:22:33.062 [DEBUG] [Thread-16451] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:22:33.062 [DEBUG] [Thread-16451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:22:33.062 [DEBUG] [Thread-16451] [transport.py] [_log()] Compression: none
2026-04-15T09:22:33.063 [DEBUG] [Thread-16451] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:22:33.118 [DEBUG] [Thread-16451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:22:33.119 [DEBUG] [Thread-16451] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:22:33.119 [DEBUG] [Thread-16451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:22:33.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:22:33.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:22:33.175 [DEBUG] [Thread-16451] [transport.py] [_log()] userauth is OK
2026-04-15T09:22:33.175 [DEBUG] [Thread-16451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:22:33.175 [DEBUG] [Thread-16451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:22:33.176 [DEBUG] [Thread-16451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:22:33.176 [DEBUG] [Thread-16451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:22:33.201 [INFO] [Thread-16451] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:22:33.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:22:33.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:22:34.059 [DEBUG] [Thread-16451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:22:34.059 [DEBUG] [Thread-16451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:22:34.107 [DEBUG] [Thread-16451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:22:34.107 [DEBUG] [Thread-16451] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:22:34.116 [DEBUG] [Thread-16451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:22:34.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:22:34.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')
2026-04-15T09:22:34.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
2026-04-15T09:22:34.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:22:34.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:22:34.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:22:34.148 [DEBUG] [Thread-16451] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:22:40.601 [DEBUG] [Thread-16453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:22:55.448 [DEBUG] [Thread-16454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:22:55.645 [DEBUG] [Thread-16455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:23:04.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:23:04.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:23:04.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:23:05.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 22, 48), 0.24641, 98.3007, 0.0, 22.477, 9.6506, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:23:05.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:22:48
2026-04-15T09:23:05.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:23:06.262 [DEBUG] [Thread-16456] [transport.py] [_log()] starting thread (client mode): 0xee9ec190
2026-04-15T09:23:06.263 [DEBUG] [Thread-16456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:23:06.282 [DEBUG] [Thread-16456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:23:06.282 [INFO] [Thread-16456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:23:06.285 [DEBUG] [Thread-16456] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:23:06.285 [DEBUG] [Thread-16456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:23:06.285 [DEBUG] [Thread-16456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:23:06.286 [DEBUG] [Thread-16456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:23:06.286 [DEBUG] [Thread-16456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:23:06.286 [DEBUG] [Thread-16456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:23:06.286 [DEBUG] [Thread-16456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:23:06.286 [DEBUG] [Thread-16456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:23:06.286 [DEBUG] [Thread-16456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:23:06.286 [DEBUG] [Thread-16456] [transport.py] [_log()] client lang: <none>
2026-04-15T09:23:06.286 [DEBUG] [Thread-16456] [transport.py] [_log()] server lang: <none>
2026-04-15T09:23:06.286 [DEBUG] [Thread-16456] [transport.py] [_log()] kex follows: False
2026-04-15T09:23:06.286 [DEBUG] [Thread-16456] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:23:06.286 [DEBUG] [Thread-16456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:23:06.287 [DEBUG] [Thread-16456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:23:06.287 [DEBUG] [Thread-16456] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:23:06.287 [DEBUG] [Thread-16456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:23:06.287 [DEBUG] [Thread-16456] [transport.py] [_log()] Compression: none
2026-04-15T09:23:06.287 [DEBUG] [Thread-16456] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:23:06.306 [DEBUG] [Thread-16456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:23:06.307 [DEBUG] [Thread-16456] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:23:06.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:23:06.307 [DEBUG] [Thread-16456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:23:06.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:23:06.308 [DEBUG] [Thread-16456] [transport.py] [_log()] userauth is OK
2026-04-15T09:23:06.308 [DEBUG] [Thread-16456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:23:06.308 [DEBUG] [Thread-16456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:23:06.308 [DEBUG] [Thread-16456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:23:06.308 [DEBUG] [Thread-16456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:23:06.327 [INFO] [Thread-16456] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:23:06.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:23:06.893 [DEBUG] [Thread-16456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:23:06.894 [DEBUG] [Thread-16456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:23:06.895 [DEBUG] [Thread-16456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:23:06.934 [DEBUG] [Thread-16456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:23:06.934 [DEBUG] [Thread-16456] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:23:06.938 [DEBUG] [Thread-16456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:23:06.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:23:06.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:23:06.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:23:06.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:23:06.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:23:06.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:23:06.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:23:06.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:23:06.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:23:06.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.307423 -999.00   +8.90  24.48     96   +8.40 1 3 1 3 1   887    0 0.42 -1.56 ----- 24.5 24.5 311.8 30.9 13.1 -3.5 12.6 -3.3 11.6 -2.0 12.2 -2.1
2026-04-15T09:23:06.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:23:06.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:23:06.962 [DEBUG] [Thread-16456] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:23:06.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.307423
2026-04-15T09:23:06.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:23:06.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:23:06.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:23:06.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:23:06.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:23:06.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:22:48', tmtdew=0.24641, humidity=98.3007, cloud=0.0, wind=22.477, temperature=9.6506, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:22:41.347', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:23:07.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:23:07.215 [DEBUG] [Thread-16459] [transport.py] [_log()] starting thread (client mode): 0xf13e07c0
2026-04-15T09:23:07.215 [DEBUG] [Thread-16459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:23:07.231 [DEBUG] [Thread-16459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:23:07.231 [INFO] [Thread-16459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:23:07.240 [DEBUG] [Thread-16459] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:23:07.240 [DEBUG] [Thread-16459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:23:07.240 [DEBUG] [Thread-16459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:23:07.241 [DEBUG] [Thread-16459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:23:07.241 [DEBUG] [Thread-16459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:23:07.241 [DEBUG] [Thread-16459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:23:07.241 [DEBUG] [Thread-16459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:23:07.241 [DEBUG] [Thread-16459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:23:07.241 [DEBUG] [Thread-16459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:23:07.241 [DEBUG] [Thread-16459] [transport.py] [_log()] client lang: <none>
2026-04-15T09:23:07.241 [DEBUG] [Thread-16459] [transport.py] [_log()] server lang: <none>
2026-04-15T09:23:07.242 [DEBUG] [Thread-16459] [transport.py] [_log()] kex follows: False
2026-04-15T09:23:07.242 [DEBUG] [Thread-16459] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:23:07.242 [DEBUG] [Thread-16459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:23:07.242 [DEBUG] [Thread-16459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:23:07.242 [DEBUG] [Thread-16459] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:23:07.242 [DEBUG] [Thread-16459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:23:07.242 [DEBUG] [Thread-16459] [transport.py] [_log()] Compression: none
2026-04-15T09:23:07.243 [DEBUG] [Thread-16459] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:23:07.296 [DEBUG] [Thread-16459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:23:07.296 [DEBUG] [Thread-16459] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:23:07.297 [DEBUG] [Thread-16459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:23:07.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:23:07.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:23:07.352 [DEBUG] [Thread-16459] [transport.py] [_log()] userauth is OK
2026-04-15T09:23:07.353 [DEBUG] [Thread-16459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:23:07.353 [DEBUG] [Thread-16459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:23:07.353 [DEBUG] [Thread-16459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:23:07.353 [DEBUG] [Thread-16459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:23:07.378 [INFO] [Thread-16459] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:23:07.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:23:07.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:23:08.210 [DEBUG] [Thread-16459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:23:08.211 [DEBUG] [Thread-16459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:23:08.259 [DEBUG] [Thread-16459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:23:08.259 [DEBUG] [Thread-16459] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:23:08.268 [DEBUG] [Thread-16459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:23:08.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:23:08.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')
2026-04-15T09:23: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') -> 00000000
2026-04-15T09:23:08.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:23:08.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:23:08.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:23:08.303 [DEBUG] [Thread-16459] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:23:10.676 [DEBUG] [Thread-16461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:23:20.278 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:23:20.279 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:23:25.720 [DEBUG] [Thread-16462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:23:38.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:23:38.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:23:38.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:23:39.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 23, 24), 0.17579, 98.6338, 0.0, 16.9031, 9.19165, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:23:39.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:23:24
2026-04-15T09:23:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:23:40.454 [DEBUG] [Thread-16463] [transport.py] [_log()] starting thread (client mode): 0xee91e080
2026-04-15T09:23:40.454 [DEBUG] [Thread-16463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:23:40.470 [DEBUG] [Thread-16463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:23:40.470 [INFO] [Thread-16463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:23:40.472 [DEBUG] [Thread-16463] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:23:40.472 [DEBUG] [Thread-16463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:23:40.472 [DEBUG] [Thread-16463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:23:40.472 [DEBUG] [Thread-16463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:23:40.472 [DEBUG] [Thread-16463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:23:40.472 [DEBUG] [Thread-16463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:23:40.473 [DEBUG] [Thread-16463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:23:40.473 [DEBUG] [Thread-16463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:23:40.473 [DEBUG] [Thread-16463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:23:40.473 [DEBUG] [Thread-16463] [transport.py] [_log()] client lang: <none>
2026-04-15T09:23:40.473 [DEBUG] [Thread-16463] [transport.py] [_log()] server lang: <none>
2026-04-15T09:23:40.473 [DEBUG] [Thread-16463] [transport.py] [_log()] kex follows: False
2026-04-15T09:23:40.473 [DEBUG] [Thread-16463] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:23:40.473 [DEBUG] [Thread-16463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:23:40.473 [DEBUG] [Thread-16463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:23:40.473 [DEBUG] [Thread-16463] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:23:40.473 [DEBUG] [Thread-16463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:23:40.473 [DEBUG] [Thread-16463] [transport.py] [_log()] Compression: none
2026-04-15T09:23:40.473 [DEBUG] [Thread-16463] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:23:40.487 [DEBUG] [Thread-16463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:23:40.487 [DEBUG] [Thread-16463] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:23:40.487 [DEBUG] [Thread-16463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:23:40.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:23:40.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:23:40.488 [DEBUG] [Thread-16463] [transport.py] [_log()] userauth is OK
2026-04-15T09:23:40.488 [DEBUG] [Thread-16463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:23:40.489 [DEBUG] [Thread-16463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:23:40.489 [DEBUG] [Thread-16463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:23:40.489 [DEBUG] [Thread-16463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:23:40.511 [INFO] [Thread-16463] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:23:40.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:23:40.751 [DEBUG] [Thread-16465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:23:41.134 [DEBUG] [Thread-16463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:23:41.135 [DEBUG] [Thread-16463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:23:41.135 [DEBUG] [Thread-16463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:23:41.175 [DEBUG] [Thread-16463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:23:41.175 [DEBUG] [Thread-16463] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:23:41.178 [DEBUG] [Thread-16463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:23:41.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:23:41.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:23:41.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:23:41.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:23:41.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:23:41.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:23:41.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:23:41.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:23:41.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:23:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.307770 -999.00   +9.00  18.82     96   +8.40 1 3 1 3 1   887    0 0.45 -0.99 ----- 18.8 18.8 295.7 26.8 13.0 -3.5 12.5 -3.0 11.5 -2.6 12.1 -1.9
2026-04-15T09:23:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:23:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:23:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.307770
2026-04-15T09:23:41.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:23:41.201 [DEBUG] [Thread-16463] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:23:41.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:23:41.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:23:41.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:23:41.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:23:41.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:23:24', tmtdew=0.17579, humidity=98.6338, cloud=0.0, wind=16.9031, temperature=9.19165, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:23:11.328', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:23:41.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:23:41.454 [DEBUG] [Thread-16467] [transport.py] [_log()] starting thread (client mode): 0xf13ca5f0
2026-04-15T09:23:41.455 [DEBUG] [Thread-16467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:23:41.475 [DEBUG] [Thread-16467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:23:41.475 [INFO] [Thread-16467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:23:41.482 [DEBUG] [Thread-16467] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:23:41.482 [DEBUG] [Thread-16467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:23:41.482 [DEBUG] [Thread-16467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:23:41.483 [DEBUG] [Thread-16467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:23:41.483 [DEBUG] [Thread-16467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:23:41.483 [DEBUG] [Thread-16467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:23:41.483 [DEBUG] [Thread-16467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:23:41.483 [DEBUG] [Thread-16467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:23:41.483 [DEBUG] [Thread-16467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:23:41.483 [DEBUG] [Thread-16467] [transport.py] [_log()] client lang: <none>
2026-04-15T09:23:41.483 [DEBUG] [Thread-16467] [transport.py] [_log()] server lang: <none>
2026-04-15T09:23:41.483 [DEBUG] [Thread-16467] [transport.py] [_log()] kex follows: False
2026-04-15T09:23:41.483 [DEBUG] [Thread-16467] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:23:41.483 [DEBUG] [Thread-16467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:23:41.483 [DEBUG] [Thread-16467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:23:41.484 [DEBUG] [Thread-16467] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:23:41.484 [DEBUG] [Thread-16467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:23:41.484 [DEBUG] [Thread-16467] [transport.py] [_log()] Compression: none
2026-04-15T09:23:41.484 [DEBUG] [Thread-16467] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:23:41.542 [DEBUG] [Thread-16467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:23:41.543 [DEBUG] [Thread-16467] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:23:41.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:23:41.543 [DEBUG] [Thread-16467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:23:41.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:23:41.601 [DEBUG] [Thread-16467] [transport.py] [_log()] userauth is OK
2026-04-15T09:23:41.601 [DEBUG] [Thread-16467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:23:41.601 [DEBUG] [Thread-16467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:23:41.601 [DEBUG] [Thread-16467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:23:41.601 [DEBUG] [Thread-16467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:23:41.628 [INFO] [Thread-16467] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:23:41.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:23:41.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:23:42.477 [DEBUG] [Thread-16467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:23:42.477 [DEBUG] [Thread-16467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:23:42.525 [DEBUG] [Thread-16467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:23:42.525 [DEBUG] [Thread-16467] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:23:42.535 [DEBUG] [Thread-16467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:23:42.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:23:42.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')
2026-04-15T09:23:42.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
2026-04-15T09:23:42.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:23:42.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:23:42.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:23:42.579 [DEBUG] [Thread-16467] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:23:55.538 [DEBUG] [Thread-16469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:23:55.785 [DEBUG] [Thread-16470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:24:10.826 [DEBUG] [Thread-16471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:24:12.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:24:12.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:24:12.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:24:13.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 23, 59), 0.128335, 98.6171, 0.0, 17.4499, 9.05818, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:24:13.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:23:59
2026-04-15T09:24:14.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:24:14.704 [DEBUG] [Thread-16472] [transport.py] [_log()] starting thread (client mode): 0xee905150
2026-04-15T09:24:14.704 [DEBUG] [Thread-16472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:24:14.726 [DEBUG] [Thread-16472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:24:14.726 [INFO] [Thread-16472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:24:14.729 [DEBUG] [Thread-16472] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:24:14.729 [DEBUG] [Thread-16472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:24:14.729 [DEBUG] [Thread-16472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:24:14.729 [DEBUG] [Thread-16472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:24:14.729 [DEBUG] [Thread-16472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:24:14.730 [DEBUG] [Thread-16472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:24:14.730 [DEBUG] [Thread-16472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:24:14.730 [DEBUG] [Thread-16472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:24:14.730 [DEBUG] [Thread-16472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:24:14.730 [DEBUG] [Thread-16472] [transport.py] [_log()] client lang: <none>
2026-04-15T09:24:14.730 [DEBUG] [Thread-16472] [transport.py] [_log()] server lang: <none>
2026-04-15T09:24:14.730 [DEBUG] [Thread-16472] [transport.py] [_log()] kex follows: False
2026-04-15T09:24:14.730 [DEBUG] [Thread-16472] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:24:14.730 [DEBUG] [Thread-16472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:24:14.730 [DEBUG] [Thread-16472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:24:14.731 [DEBUG] [Thread-16472] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:24:14.731 [DEBUG] [Thread-16472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:24:14.731 [DEBUG] [Thread-16472] [transport.py] [_log()] Compression: none
2026-04-15T09:24:14.731 [DEBUG] [Thread-16472] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:24:14.749 [DEBUG] [Thread-16472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:24:14.749 [DEBUG] [Thread-16472] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:24:14.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:24:14.750 [DEBUG] [Thread-16472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:24:14.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:24:14.751 [DEBUG] [Thread-16472] [transport.py] [_log()] userauth is OK
2026-04-15T09:24:14.751 [DEBUG] [Thread-16472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:24:14.751 [DEBUG] [Thread-16472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:24:14.751 [DEBUG] [Thread-16472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:24:14.752 [DEBUG] [Thread-16472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:24:14.776 [INFO] [Thread-16472] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:24:14.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:24:15.365 [DEBUG] [Thread-16472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:24:15.365 [DEBUG] [Thread-16472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:24:15.366 [DEBUG] [Thread-16472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:24:15.406 [DEBUG] [Thread-16472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:24:15.406 [DEBUG] [Thread-16472] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:24:15.408 [DEBUG] [Thread-16472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:24:15.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:24:15.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:24:15.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:24:15.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:24:15.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:24:15.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:24:15.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:24:15.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:24:15.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:24:15.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.308464 -999.00   +9.10  20.61     96   +8.60 1 3 1 3 1   887    0 0.48 0.03 ----- 20.6 20.6 306.4 25.9 12.9 -4.1 12.4 -2.9 11.6 -2.2 12.0 -2.1
2026-04-15T09:24:15.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:24:15.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:24:15.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.308464
2026-04-15T09:24:15.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:24:15.428 [DEBUG] [Thread-16472] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:24:15.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:24:15.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:24:15.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:24:15.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:24:15.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:23:59', tmtdew=0.128335, humidity=98.6171, cloud=0.0, wind=17.4499, temperature=9.05818, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:24:11.290', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:24:15.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:24:15.659 [DEBUG] [Thread-16475] [transport.py] [_log()] starting thread (client mode): 0xee988dc0
2026-04-15T09:24:15.659 [DEBUG] [Thread-16475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:24:15.673 [DEBUG] [Thread-16475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:24:15.673 [INFO] [Thread-16475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:24:15.681 [DEBUG] [Thread-16475] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:24:15.681 [DEBUG] [Thread-16475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:24:15.681 [DEBUG] [Thread-16475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:24:15.681 [DEBUG] [Thread-16475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:24:15.681 [DEBUG] [Thread-16475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:24:15.681 [DEBUG] [Thread-16475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:24:15.681 [DEBUG] [Thread-16475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:24:15.681 [DEBUG] [Thread-16475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:24:15.681 [DEBUG] [Thread-16475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:24:15.681 [DEBUG] [Thread-16475] [transport.py] [_log()] client lang: <none>
2026-04-15T09:24:15.682 [DEBUG] [Thread-16475] [transport.py] [_log()] server lang: <none>
2026-04-15T09:24:15.682 [DEBUG] [Thread-16475] [transport.py] [_log()] kex follows: False
2026-04-15T09:24:15.682 [DEBUG] [Thread-16475] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:24:15.682 [DEBUG] [Thread-16475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:24:15.682 [DEBUG] [Thread-16475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:24:15.682 [DEBUG] [Thread-16475] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:24:15.682 [DEBUG] [Thread-16475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:24:15.682 [DEBUG] [Thread-16475] [transport.py] [_log()] Compression: none
2026-04-15T09:24:15.682 [DEBUG] [Thread-16475] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:24:15.737 [DEBUG] [Thread-16475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:24:15.738 [DEBUG] [Thread-16475] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:24:15.738 [DEBUG] [Thread-16475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:24:15.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:24:15.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:24:15.794 [DEBUG] [Thread-16475] [transport.py] [_log()] userauth is OK
2026-04-15T09:24:15.794 [DEBUG] [Thread-16475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:24:15.794 [DEBUG] [Thread-16475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:24:15.794 [DEBUG] [Thread-16475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:24:15.795 [DEBUG] [Thread-16475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:24:15.819 [INFO] [Thread-16475] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:24:15.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:24:15.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:24:16.663 [DEBUG] [Thread-16475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:24:16.663 [DEBUG] [Thread-16475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:24:16.711 [DEBUG] [Thread-16475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:24:16.711 [DEBUG] [Thread-16475] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:24:16.720 [DEBUG] [Thread-16475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:24:16.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:24:16.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')
2026-04-15T09:24:16.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
2026-04-15T09:24:16.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:24:16.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:24:16.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:24:16.759 [DEBUG] [Thread-16475] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:24:20.420 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:24:20.421 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:24:25.855 [DEBUG] [Thread-16477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:24:40.899 [DEBUG] [Thread-16478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:24:46.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:24:46.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:24:46.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
2026-04-15T09:24:48.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 24, 35), 0.26147, 98.2008, 0.0, 21.1716, 9.61719, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:24:48.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:24:35
2026-04-15T09:24:48.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:24:48.956 [DEBUG] [Thread-16479] [transport.py] [_log()] starting thread (client mode): 0xee905240
2026-04-15T09:24:48.956 [DEBUG] [Thread-16479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:24:48.971 [DEBUG] [Thread-16479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:24:48.971 [INFO] [Thread-16479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:24:48.974 [DEBUG] [Thread-16479] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:24:48.974 [DEBUG] [Thread-16479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:24:48.974 [DEBUG] [Thread-16479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:24:48.974 [DEBUG] [Thread-16479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:24:48.974 [DEBUG] [Thread-16479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:24:48.974 [DEBUG] [Thread-16479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:24:48.974 [DEBUG] [Thread-16479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:24:48.974 [DEBUG] [Thread-16479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:24:48.975 [DEBUG] [Thread-16479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:24:48.975 [DEBUG] [Thread-16479] [transport.py] [_log()] client lang: <none>
2026-04-15T09:24:48.975 [DEBUG] [Thread-16479] [transport.py] [_log()] server lang: <none>
2026-04-15T09:24:48.975 [DEBUG] [Thread-16479] [transport.py] [_log()] kex follows: False
2026-04-15T09:24:48.975 [DEBUG] [Thread-16479] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:24:48.975 [DEBUG] [Thread-16479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:24:48.975 [DEBUG] [Thread-16479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:24:48.975 [DEBUG] [Thread-16479] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:24:48.975 [DEBUG] [Thread-16479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:24:48.975 [DEBUG] [Thread-16479] [transport.py] [_log()] Compression: none
2026-04-15T09:24:48.975 [DEBUG] [Thread-16479] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:24:48.987 [DEBUG] [Thread-16479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:24:48.987 [DEBUG] [Thread-16479] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:24:48.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:24:48.988 [DEBUG] [Thread-16479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:24:48.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:24:48.989 [DEBUG] [Thread-16479] [transport.py] [_log()] userauth is OK
2026-04-15T09:24:48.989 [DEBUG] [Thread-16479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:24:48.989 [DEBUG] [Thread-16479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:24:48.989 [DEBUG] [Thread-16479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:24:48.989 [DEBUG] [Thread-16479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:24:49.006 [INFO] [Thread-16479] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:24:49.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:24:49.604 [DEBUG] [Thread-16479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:24:49.604 [DEBUG] [Thread-16479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:24:49.605 [DEBUG] [Thread-16479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:24:49.645 [DEBUG] [Thread-16479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:24:49.645 [DEBUG] [Thread-16479] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:24:49.648 [DEBUG] [Thread-16479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:24:49.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:24:49.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:24:49.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:24:49.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:24:49.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:24:49.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:24:49.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:24:49.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:24:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:24:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.308811 -999.00   +9.00  21.44     96   +8.40 1 3 1 3 1   887    0 0.48 0.47 ----- 21.4 21.4 300.4 29.0 12.8 -4.4 12.4 -3.4 11.5 -3.3 11.9 -2.9
2026-04-15T09:24:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:24:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:24:49.673 [DEBUG] [Thread-16479] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:24:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.308811
2026-04-15T09:24:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:24:49.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:24:49.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:24:49.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:24:49.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:24:49.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:24:35', tmtdew=0.26147, humidity=98.2008, cloud=0.0, wind=21.1716, temperature=9.61719, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:24:41.270', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:24:49.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:24:49.928 [DEBUG] [Thread-16482] [transport.py] [_log()] starting thread (client mode): 0xee91e350
2026-04-15T09:24:49.928 [DEBUG] [Thread-16482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:24:49.941 [DEBUG] [Thread-16482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:24:49.942 [INFO] [Thread-16482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:24:49.951 [DEBUG] [Thread-16482] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:24:49.951 [DEBUG] [Thread-16482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:24:49.951 [DEBUG] [Thread-16482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:24:49.951 [DEBUG] [Thread-16482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:24:49.951 [DEBUG] [Thread-16482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:24:49.951 [DEBUG] [Thread-16482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:24:49.951 [DEBUG] [Thread-16482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:24:49.951 [DEBUG] [Thread-16482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:24:49.952 [DEBUG] [Thread-16482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:24:49.952 [DEBUG] [Thread-16482] [transport.py] [_log()] client lang: <none>
2026-04-15T09:24:49.952 [DEBUG] [Thread-16482] [transport.py] [_log()] server lang: <none>
2026-04-15T09:24:49.952 [DEBUG] [Thread-16482] [transport.py] [_log()] kex follows: False
2026-04-15T09:24:49.952 [DEBUG] [Thread-16482] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:24:49.952 [DEBUG] [Thread-16482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:24:49.952 [DEBUG] [Thread-16482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:24:49.952 [DEBUG] [Thread-16482] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:24:49.952 [DEBUG] [Thread-16482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:24:49.952 [DEBUG] [Thread-16482] [transport.py] [_log()] Compression: none
2026-04-15T09:24:49.952 [DEBUG] [Thread-16482] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:24:50.005 [DEBUG] [Thread-16482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:24:50.006 [DEBUG] [Thread-16482] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:24:50.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:24:50.006 [DEBUG] [Thread-16482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:24:50.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:24:50.066 [DEBUG] [Thread-16482] [transport.py] [_log()] userauth is OK
2026-04-15T09:24:50.066 [DEBUG] [Thread-16482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:24:50.067 [DEBUG] [Thread-16482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:24:50.067 [DEBUG] [Thread-16482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:24:50.067 [DEBUG] [Thread-16482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:24:50.092 [INFO] [Thread-16482] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:24:50.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:24:50.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:24:50.973 [DEBUG] [Thread-16482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:24:50.973 [DEBUG] [Thread-16482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:24:51.024 [DEBUG] [Thread-16482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:24:51.024 [DEBUG] [Thread-16482] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:24:51.033 [DEBUG] [Thread-16482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:24:51.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:24:51.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')
2026-04-15T09:24:51.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
2026-04-15T09:24:51.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:24:51.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:24:51.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:24:51.071 [DEBUG] [Thread-16482] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:24:55.625 [DEBUG] [Thread-16484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:24:55.931 [DEBUG] [Thread-16485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:25:10.973 [DEBUG] [Thread-16486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:25:20.561 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:25:20.562 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:25:21.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:25:21.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:25:21.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
2026-04-15T09:25:22.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 25, 11), 0.175665, 98.6336, 0.0, 19.9555, 9.05884, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:25:22.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:25:11
2026-04-15T09:25:22.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:25:23.219 [DEBUG] [Thread-16487] [transport.py] [_log()] starting thread (client mode): 0xf13efe50
2026-04-15T09:25:23.219 [DEBUG] [Thread-16487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:25:23.239 [DEBUG] [Thread-16487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:25:23.239 [INFO] [Thread-16487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:25:23.242 [DEBUG] [Thread-16487] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:25:23.242 [DEBUG] [Thread-16487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:25:23.242 [DEBUG] [Thread-16487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:25:23.242 [DEBUG] [Thread-16487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:25:23.242 [DEBUG] [Thread-16487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:25:23.242 [DEBUG] [Thread-16487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:25:23.242 [DEBUG] [Thread-16487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:25:23.243 [DEBUG] [Thread-16487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:25:23.243 [DEBUG] [Thread-16487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:25:23.243 [DEBUG] [Thread-16487] [transport.py] [_log()] client lang: <none>
2026-04-15T09:25:23.243 [DEBUG] [Thread-16487] [transport.py] [_log()] server lang: <none>
2026-04-15T09:25:23.243 [DEBUG] [Thread-16487] [transport.py] [_log()] kex follows: False
2026-04-15T09:25:23.243 [DEBUG] [Thread-16487] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:25:23.243 [DEBUG] [Thread-16487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:25:23.243 [DEBUG] [Thread-16487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:25:23.243 [DEBUG] [Thread-16487] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:25:23.243 [DEBUG] [Thread-16487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:25:23.244 [DEBUG] [Thread-16487] [transport.py] [_log()] Compression: none
2026-04-15T09:25:23.244 [DEBUG] [Thread-16487] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:25:23.260 [DEBUG] [Thread-16487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:25:23.260 [DEBUG] [Thread-16487] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:25:23.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:25:23.261 [DEBUG] [Thread-16487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:25:23.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:25:23.262 [DEBUG] [Thread-16487] [transport.py] [_log()] userauth is OK
2026-04-15T09:25:23.262 [DEBUG] [Thread-16487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:25:23.262 [DEBUG] [Thread-16487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:25:23.262 [DEBUG] [Thread-16487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:25:23.262 [DEBUG] [Thread-16487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:25:23.281 [INFO] [Thread-16487] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:25:23.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:25:23.896 [DEBUG] [Thread-16487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:25:23.896 [DEBUG] [Thread-16487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:25:23.896 [DEBUG] [Thread-16487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:25:23.937 [DEBUG] [Thread-16487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:25:23.937 [DEBUG] [Thread-16487] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:25:23.941 [DEBUG] [Thread-16487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:25:23.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:25:23.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:25:23.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:25:23.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:25:23.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:25:23.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:25:23.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:25:23.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:25:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:25:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.309159 -999.00   +8.80  19.51     96   +8.20 1 3 1 3 1   887    0 0.51 1.26 ----- 19.5 19.5 296.6 28.1 12.8 -4.0 12.3 -3.2 11.4 -2.2 11.9 -3.2
2026-04-15T09:25:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:25:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:25:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.309159
2026-04-15T09:25:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:25:23.967 [DEBUG] [Thread-16487] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:25:23.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:25:23.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:25:23.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:25:23.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:25:23.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:25:11', tmtdew=0.175665, humidity=98.6336, cloud=0.0, wind=19.9555, temperature=9.05884, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:25:11.338', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:25:24.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:25:24.214 [DEBUG] [Thread-16490] [transport.py] [_log()] starting thread (client mode): 0xf13eeb90
2026-04-15T09:25:24.214 [DEBUG] [Thread-16490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:25:24.228 [DEBUG] [Thread-16490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:25:24.228 [INFO] [Thread-16490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:25:24.235 [DEBUG] [Thread-16490] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:25:24.236 [DEBUG] [Thread-16490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:25:24.236 [DEBUG] [Thread-16490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:25:24.236 [DEBUG] [Thread-16490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:25:24.236 [DEBUG] [Thread-16490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:25:24.236 [DEBUG] [Thread-16490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:25:24.236 [DEBUG] [Thread-16490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:25:24.236 [DEBUG] [Thread-16490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:25:24.236 [DEBUG] [Thread-16490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:25:24.236 [DEBUG] [Thread-16490] [transport.py] [_log()] client lang: <none>
2026-04-15T09:25:24.236 [DEBUG] [Thread-16490] [transport.py] [_log()] server lang: <none>
2026-04-15T09:25:24.236 [DEBUG] [Thread-16490] [transport.py] [_log()] kex follows: False
2026-04-15T09:25:24.236 [DEBUG] [Thread-16490] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:25:24.237 [DEBUG] [Thread-16490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:25:24.237 [DEBUG] [Thread-16490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:25:24.237 [DEBUG] [Thread-16490] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:25:24.237 [DEBUG] [Thread-16490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:25:24.237 [DEBUG] [Thread-16490] [transport.py] [_log()] Compression: none
2026-04-15T09:25:24.237 [DEBUG] [Thread-16490] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:25:24.296 [DEBUG] [Thread-16490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:25:24.296 [DEBUG] [Thread-16490] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:25:24.297 [DEBUG] [Thread-16490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:25:24.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:25:24.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:25:24.356 [DEBUG] [Thread-16490] [transport.py] [_log()] userauth is OK
2026-04-15T09:25:24.356 [DEBUG] [Thread-16490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:25:24.356 [DEBUG] [Thread-16490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:25:24.357 [DEBUG] [Thread-16490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:25:24.357 [DEBUG] [Thread-16490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:25:24.384 [INFO] [Thread-16490] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:25:24.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:25:24.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:25:25.231 [DEBUG] [Thread-16490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:25:25.231 [DEBUG] [Thread-16490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:25:25.279 [DEBUG] [Thread-16490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:25:25.279 [DEBUG] [Thread-16490] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:25:25.288 [DEBUG] [Thread-16490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:25:25.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:25:25.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')
2026-04-15T09:25:25.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
2026-04-15T09:25:25.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:25:25.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:25:25.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:25:25.323 [DEBUG] [Thread-16490] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:25:26.003 [DEBUG] [Thread-16492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:25:41.047 [DEBUG] [Thread-16493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:25:55.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:25:55.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:25:55.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
2026-04-15T09:25:55.728 [DEBUG] [Thread-16494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:25:56.079 [DEBUG] [Thread-16495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:25:56.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 25, 46), 0.25129, 98.2672, 0.0, 24.5585, 9.48449, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:25:56.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:25:46
2026-04-15T09:25:57.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:25:57.455 [DEBUG] [Thread-16496] [transport.py] [_log()] starting thread (client mode): 0xf13ef580
2026-04-15T09:25:57.456 [DEBUG] [Thread-16496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:25:57.476 [DEBUG] [Thread-16496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:25:57.476 [INFO] [Thread-16496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:25:57.478 [DEBUG] [Thread-16496] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:25:57.478 [DEBUG] [Thread-16496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:25:57.478 [DEBUG] [Thread-16496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:25:57.478 [DEBUG] [Thread-16496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:25:57.478 [DEBUG] [Thread-16496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:25:57.478 [DEBUG] [Thread-16496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:25:57.478 [DEBUG] [Thread-16496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:25:57.478 [DEBUG] [Thread-16496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:25:57.479 [DEBUG] [Thread-16496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:25:57.479 [DEBUG] [Thread-16496] [transport.py] [_log()] client lang: <none>
2026-04-15T09:25:57.479 [DEBUG] [Thread-16496] [transport.py] [_log()] server lang: <none>
2026-04-15T09:25:57.479 [DEBUG] [Thread-16496] [transport.py] [_log()] kex follows: False
2026-04-15T09:25:57.479 [DEBUG] [Thread-16496] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:25:57.479 [DEBUG] [Thread-16496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:25:57.479 [DEBUG] [Thread-16496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:25:57.479 [DEBUG] [Thread-16496] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:25:57.479 [DEBUG] [Thread-16496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:25:57.479 [DEBUG] [Thread-16496] [transport.py] [_log()] Compression: none
2026-04-15T09:25:57.479 [DEBUG] [Thread-16496] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:25:57.495 [DEBUG] [Thread-16496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:25:57.495 [DEBUG] [Thread-16496] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:25:57.496 [DEBUG] [Thread-16496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:25:57.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:25:57.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:25:57.537 [DEBUG] [Thread-16496] [transport.py] [_log()] userauth is OK
2026-04-15T09:25:57.537 [DEBUG] [Thread-16496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:25:57.537 [DEBUG] [Thread-16496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:25:57.537 [DEBUG] [Thread-16496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:25:57.537 [DEBUG] [Thread-16496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:25:57.572 [INFO] [Thread-16496] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:25:57.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:25:58.147 [DEBUG] [Thread-16496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:25:58.147 [DEBUG] [Thread-16496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:25:58.148 [DEBUG] [Thread-16496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:25:58.188 [DEBUG] [Thread-16496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:25:58.188 [DEBUG] [Thread-16496] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:25:58.190 [DEBUG] [Thread-16496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:25:58.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:25:58.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:25:58.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:25:58.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:25:58.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:25:58.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:25:58.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:25:58.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:25:58.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:25:58.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.309506 -999.00   +9.10  16.81     96   +8.50 1 3 1 3 1   887    0 0.53 1.84 ----- 16.8 16.8 307.6 21.6 12.7 -3.3 12.3 -2.5 11.4 -1.7 11.8 -2.1
2026-04-15T09:25:58.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:25:58.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:25:58.214 [DEBUG] [Thread-16496] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:25:58.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.309506
2026-04-15T09:25:58.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:25:58.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:25:58.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:25:58.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:25:58.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:25:58.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:25:46', tmtdew=0.25129, humidity=98.2672, cloud=0.0, wind=24.5585, temperature=9.48449, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:25:41.318', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:25:58.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:25:58.470 [DEBUG] [Thread-16499] [transport.py] [_log()] starting thread (client mode): 0xf1366110
2026-04-15T09:25:58.470 [DEBUG] [Thread-16499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:25:58.484 [DEBUG] [Thread-16499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:25:58.484 [INFO] [Thread-16499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:25:58.492 [DEBUG] [Thread-16499] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:25:58.492 [DEBUG] [Thread-16499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:25:58.492 [DEBUG] [Thread-16499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:25:58.492 [DEBUG] [Thread-16499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:25:58.492 [DEBUG] [Thread-16499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:25:58.492 [DEBUG] [Thread-16499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:25:58.492 [DEBUG] [Thread-16499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:25:58.492 [DEBUG] [Thread-16499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:25:58.492 [DEBUG] [Thread-16499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:25:58.492 [DEBUG] [Thread-16499] [transport.py] [_log()] client lang: <none>
2026-04-15T09:25:58.493 [DEBUG] [Thread-16499] [transport.py] [_log()] server lang: <none>
2026-04-15T09:25:58.493 [DEBUG] [Thread-16499] [transport.py] [_log()] kex follows: False
2026-04-15T09:25:58.493 [DEBUG] [Thread-16499] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:25:58.493 [DEBUG] [Thread-16499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:25:58.493 [DEBUG] [Thread-16499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:25:58.493 [DEBUG] [Thread-16499] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:25:58.493 [DEBUG] [Thread-16499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:25:58.493 [DEBUG] [Thread-16499] [transport.py] [_log()] Compression: none
2026-04-15T09:25:58.493 [DEBUG] [Thread-16499] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:25:58.551 [DEBUG] [Thread-16499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:25:58.551 [DEBUG] [Thread-16499] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:25:58.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:25:58.552 [DEBUG] [Thread-16499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:25:58.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:25:58.607 [DEBUG] [Thread-16499] [transport.py] [_log()] userauth is OK
2026-04-15T09:25:58.608 [DEBUG] [Thread-16499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:25:58.608 [DEBUG] [Thread-16499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:25:58.608 [DEBUG] [Thread-16499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:25:58.608 [DEBUG] [Thread-16499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:25:58.635 [INFO] [Thread-16499] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:25:58.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:25:58.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:25:59.517 [DEBUG] [Thread-16499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:25:59.518 [DEBUG] [Thread-16499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:25:59.565 [DEBUG] [Thread-16499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:25:59.565 [DEBUG] [Thread-16499] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:25:59.574 [DEBUG] [Thread-16499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:25:59.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:25:59.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')
2026-04-15T09:25:59.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
2026-04-15T09:25:59.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:25:59.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:25:59.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:25:59.608 [DEBUG] [Thread-16499] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:26:11.110 [DEBUG] [Thread-16501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:26:20.704 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:26:20.705 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:26:26.156 [DEBUG] [Thread-16502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:26:29.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:26:29.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:26:29.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
2026-04-15T09:26:30.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 26, 21), 0.175635, 98.6335, 0.0, 17.1148, 8.92562, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:26:30.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:26:21
2026-04-15T09:26:31.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:26:31.650 [DEBUG] [Thread-16503] [transport.py] [_log()] starting thread (client mode): 0xf1366800
2026-04-15T09:26:31.650 [DEBUG] [Thread-16503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:26:31.670 [DEBUG] [Thread-16503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:26:31.670 [INFO] [Thread-16503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:26:31.671 [DEBUG] [Thread-16503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:26:31.671 [DEBUG] [Thread-16503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:26:31.671 [DEBUG] [Thread-16503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:26:31.671 [DEBUG] [Thread-16503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:26:31.671 [DEBUG] [Thread-16503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:26:31.671 [DEBUG] [Thread-16503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:26:31.671 [DEBUG] [Thread-16503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:26:31.671 [DEBUG] [Thread-16503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:26:31.672 [DEBUG] [Thread-16503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:26:31.672 [DEBUG] [Thread-16503] [transport.py] [_log()] client lang: <none>
2026-04-15T09:26:31.672 [DEBUG] [Thread-16503] [transport.py] [_log()] server lang: <none>
2026-04-15T09:26:31.672 [DEBUG] [Thread-16503] [transport.py] [_log()] kex follows: False
2026-04-15T09:26:31.672 [DEBUG] [Thread-16503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:26:31.672 [DEBUG] [Thread-16503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:26:31.672 [DEBUG] [Thread-16503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:26:31.672 [DEBUG] [Thread-16503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:26:31.672 [DEBUG] [Thread-16503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:26:31.672 [DEBUG] [Thread-16503] [transport.py] [_log()] Compression: none
2026-04-15T09:26:31.672 [DEBUG] [Thread-16503] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:26:31.691 [DEBUG] [Thread-16503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:26:31.691 [DEBUG] [Thread-16503] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:26:31.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:26:31.692 [DEBUG] [Thread-16503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:26:31.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:26:31.692 [DEBUG] [Thread-16503] [transport.py] [_log()] userauth is OK
2026-04-15T09:26:31.693 [DEBUG] [Thread-16503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:26:31.693 [DEBUG] [Thread-16503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:26:31.693 [DEBUG] [Thread-16503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:26:31.693 [DEBUG] [Thread-16503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:26:31.712 [INFO] [Thread-16503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:26:31.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:26:32.326 [DEBUG] [Thread-16503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:26:32.326 [DEBUG] [Thread-16503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:26:32.327 [DEBUG] [Thread-16503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:26:32.367 [DEBUG] [Thread-16503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:26:32.367 [DEBUG] [Thread-16503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:26:32.370 [DEBUG] [Thread-16503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:26:32.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:26:32.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:26:32.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:26:32.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:26:32.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:26:32.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:26:32.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:26:32.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:26:32.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:26:32.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.309853 -999.00   +9.10  18.34     96   +8.60 1 3 1 3 1   887    0 0.55 2.36 ----- 18.3 18.3 299.4 21.1 12.9 -2.3 12.4 -2.0 11.5 -1.9 11.9 -1.5
2026-04-15T09:26:32.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:26:32.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:26:32.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.309853
2026-04-15T09:26:32.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:26:32.396 [DEBUG] [Thread-16503] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:26:32.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:26:32.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:26:32.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:26:32.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:26:32.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:26:21', tmtdew=0.175635, humidity=98.6335, cloud=0.0, wind=17.1148, temperature=8.92562, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:26:11.299', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:26:32.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:26:32.655 [DEBUG] [Thread-16506] [transport.py] [_log()] starting thread (client mode): 0xf13669b0
2026-04-15T09:26:32.655 [DEBUG] [Thread-16506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:26:32.669 [DEBUG] [Thread-16506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:26:32.669 [INFO] [Thread-16506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:26:32.677 [DEBUG] [Thread-16506] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:26:32.677 [DEBUG] [Thread-16506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:26:32.677 [DEBUG] [Thread-16506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:26:32.677 [DEBUG] [Thread-16506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:26:32.677 [DEBUG] [Thread-16506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:26:32.677 [DEBUG] [Thread-16506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:26:32.677 [DEBUG] [Thread-16506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:26:32.677 [DEBUG] [Thread-16506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:26:32.677 [DEBUG] [Thread-16506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:26:32.677 [DEBUG] [Thread-16506] [transport.py] [_log()] client lang: <none>
2026-04-15T09:26:32.678 [DEBUG] [Thread-16506] [transport.py] [_log()] server lang: <none>
2026-04-15T09:26:32.678 [DEBUG] [Thread-16506] [transport.py] [_log()] kex follows: False
2026-04-15T09:26:32.678 [DEBUG] [Thread-16506] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:26:32.678 [DEBUG] [Thread-16506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:26:32.678 [DEBUG] [Thread-16506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:26:32.678 [DEBUG] [Thread-16506] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:26:32.678 [DEBUG] [Thread-16506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:26:32.678 [DEBUG] [Thread-16506] [transport.py] [_log()] Compression: none
2026-04-15T09:26:32.678 [DEBUG] [Thread-16506] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:26:32.735 [DEBUG] [Thread-16506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:26:32.736 [DEBUG] [Thread-16506] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:26:32.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:26:32.736 [DEBUG] [Thread-16506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:26:32.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:26:32.792 [DEBUG] [Thread-16506] [transport.py] [_log()] userauth is OK
2026-04-15T09:26:32.792 [DEBUG] [Thread-16506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:26:32.793 [DEBUG] [Thread-16506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:26:32.793 [DEBUG] [Thread-16506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:26:32.793 [DEBUG] [Thread-16506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:26:32.817 [INFO] [Thread-16506] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:26:32.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:26:32.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:26:33.663 [DEBUG] [Thread-16506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:26:33.663 [DEBUG] [Thread-16506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:26:33.711 [DEBUG] [Thread-16506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:26:33.711 [DEBUG] [Thread-16506] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:26:33.720 [DEBUG] [Thread-16506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:26:33.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:26:33.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')
2026-04-15T09:26:33.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
2026-04-15T09:26:33.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:26:33.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:26:33.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:26:33.764 [DEBUG] [Thread-16506] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:26:41.187 [DEBUG] [Thread-16508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:26:55.823 [DEBUG] [Thread-16509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:26:56.228 [DEBUG] [Thread-16510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:27:03.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:27:03.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:27:03.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
2026-04-15T09:27:05.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 26, 57), 0.17813, 98.6169, 0.0, 21.7739, 9.059, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:27:05.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:26:57
2026-04-15T09:27:05.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:27:06.058 [DEBUG] [Thread-16511] [transport.py] [_log()] starting thread (client mode): 0xf1365690
2026-04-15T09:27:06.058 [DEBUG] [Thread-16511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:27:06.076 [DEBUG] [Thread-16511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:27:06.077 [INFO] [Thread-16511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:27:06.078 [DEBUG] [Thread-16511] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:27:06.078 [DEBUG] [Thread-16511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:27:06.078 [DEBUG] [Thread-16511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:27:06.078 [DEBUG] [Thread-16511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:27:06.078 [DEBUG] [Thread-16511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:27:06.078 [DEBUG] [Thread-16511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:27:06.079 [DEBUG] [Thread-16511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:27:06.079 [DEBUG] [Thread-16511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:27:06.079 [DEBUG] [Thread-16511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:27:06.079 [DEBUG] [Thread-16511] [transport.py] [_log()] client lang: <none>
2026-04-15T09:27:06.079 [DEBUG] [Thread-16511] [transport.py] [_log()] server lang: <none>
2026-04-15T09:27:06.079 [DEBUG] [Thread-16511] [transport.py] [_log()] kex follows: False
2026-04-15T09:27:06.079 [DEBUG] [Thread-16511] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:27:06.079 [DEBUG] [Thread-16511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:27:06.079 [DEBUG] [Thread-16511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:27:06.079 [DEBUG] [Thread-16511] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:27:06.079 [DEBUG] [Thread-16511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:27:06.080 [DEBUG] [Thread-16511] [transport.py] [_log()] Compression: none
2026-04-15T09:27:06.080 [DEBUG] [Thread-16511] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:27:06.087 [DEBUG] [Thread-16511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:27:06.088 [DEBUG] [Thread-16511] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:27:06.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:27:06.088 [DEBUG] [Thread-16511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:27:06.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:27:06.089 [DEBUG] [Thread-16511] [transport.py] [_log()] userauth is OK
2026-04-15T09:27:06.089 [DEBUG] [Thread-16511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:27:06.089 [DEBUG] [Thread-16511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:27:06.090 [DEBUG] [Thread-16511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:27:06.090 [DEBUG] [Thread-16511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:27:06.105 [INFO] [Thread-16511] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:27:06.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:27:06.692 [DEBUG] [Thread-16511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:27:06.692 [DEBUG] [Thread-16511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:27:06.692 [DEBUG] [Thread-16511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:27:06.732 [DEBUG] [Thread-16511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:27:06.732 [DEBUG] [Thread-16511] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:27:06.734 [DEBUG] [Thread-16511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:27:06.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:27:06.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:27:06.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:27:06.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:27:06.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:27:06.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:27:06.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:27:06.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:27:06.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:27:06.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.310200 -999.00   +9.10  19.89     96   +8.50 1 3 1 3 1   887    0 0.59 3.17 ----- 19.9 19.9 299.8 23.9 12.8 -2.5 12.4 -2.7 11.5 -1.7 11.9 -1.7
2026-04-15T09:27:06.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:27:06.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:27:06.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.310200
2026-04-15T09:27:06.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:27:06.755 [DEBUG] [Thread-16511] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:27:06.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:27:06.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:27:06.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:27:06.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:27:06.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:26:57', tmtdew=0.17813, humidity=98.6169, cloud=0.0, wind=21.7739, temperature=9.059, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:26:41.280', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:27:07.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:27:07.021 [DEBUG] [Thread-16514] [transport.py] [_log()] starting thread (client mode): 0xee91e890
2026-04-15T09:27:07.021 [DEBUG] [Thread-16514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:27:07.035 [DEBUG] [Thread-16514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:27:07.035 [INFO] [Thread-16514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:27:07.042 [DEBUG] [Thread-16514] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:27:07.042 [DEBUG] [Thread-16514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:27:07.043 [DEBUG] [Thread-16514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:27:07.043 [DEBUG] [Thread-16514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:27:07.043 [DEBUG] [Thread-16514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:27:07.043 [DEBUG] [Thread-16514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:27:07.043 [DEBUG] [Thread-16514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:27:07.043 [DEBUG] [Thread-16514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:27:07.043 [DEBUG] [Thread-16514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:27:07.043 [DEBUG] [Thread-16514] [transport.py] [_log()] client lang: <none>
2026-04-15T09:27:07.043 [DEBUG] [Thread-16514] [transport.py] [_log()] server lang: <none>
2026-04-15T09:27:07.043 [DEBUG] [Thread-16514] [transport.py] [_log()] kex follows: False
2026-04-15T09:27:07.043 [DEBUG] [Thread-16514] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:27:07.043 [DEBUG] [Thread-16514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:27:07.043 [DEBUG] [Thread-16514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:27:07.043 [DEBUG] [Thread-16514] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:27:07.043 [DEBUG] [Thread-16514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:27:07.044 [DEBUG] [Thread-16514] [transport.py] [_log()] Compression: none
2026-04-15T09:27:07.044 [DEBUG] [Thread-16514] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:27:07.105 [DEBUG] [Thread-16514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:27:07.105 [DEBUG] [Thread-16514] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:27:07.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:27:07.106 [DEBUG] [Thread-16514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:27:07.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:27:07.161 [DEBUG] [Thread-16514] [transport.py] [_log()] userauth is OK
2026-04-15T09:27:07.161 [DEBUG] [Thread-16514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:27:07.162 [DEBUG] [Thread-16514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:27:07.162 [DEBUG] [Thread-16514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:27:07.162 [DEBUG] [Thread-16514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:27:07.190 [INFO] [Thread-16514] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:27:07.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:27:07.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:27:08.107 [DEBUG] [Thread-16514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:27:08.108 [DEBUG] [Thread-16514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:27:08.155 [DEBUG] [Thread-16514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:27:08.155 [DEBUG] [Thread-16514] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:27:08.164 [DEBUG] [Thread-16514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:27:08.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:27:08.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')
2026-04-15T09:27:08.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') -> 00000000
2026-04-15T09:27:08.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:27:08.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:27:08.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:27:08.199 [DEBUG] [Thread-16514] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:27:11.257 [DEBUG] [Thread-16516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:27:20.847 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:27:20.848 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:27:26.300 [DEBUG] [Thread-16517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:27:38.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:27:38.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:27:38.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:27:39.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 26, 57), 0.17813, 98.6169, 0.0, 21.7739, 9.059, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:27:39.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:26:57
2026-04-15T09:27:39.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:27:40.311 [DEBUG] [Thread-16518] [transport.py] [_log()] starting thread (client mode): 0xf1336380
2026-04-15T09:27:40.312 [DEBUG] [Thread-16518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:27:40.330 [DEBUG] [Thread-16518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:27:40.330 [INFO] [Thread-16518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:27:40.333 [DEBUG] [Thread-16518] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:27:40.333 [DEBUG] [Thread-16518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:27:40.333 [DEBUG] [Thread-16518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:27:40.334 [DEBUG] [Thread-16518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:27:40.334 [DEBUG] [Thread-16518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:27:40.334 [DEBUG] [Thread-16518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:27:40.334 [DEBUG] [Thread-16518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:27:40.334 [DEBUG] [Thread-16518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:27:40.334 [DEBUG] [Thread-16518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:27:40.334 [DEBUG] [Thread-16518] [transport.py] [_log()] client lang: <none>
2026-04-15T09:27:40.334 [DEBUG] [Thread-16518] [transport.py] [_log()] server lang: <none>
2026-04-15T09:27:40.334 [DEBUG] [Thread-16518] [transport.py] [_log()] kex follows: False
2026-04-15T09:27:40.334 [DEBUG] [Thread-16518] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:27:40.334 [DEBUG] [Thread-16518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:27:40.335 [DEBUG] [Thread-16518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:27:40.335 [DEBUG] [Thread-16518] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:27:40.335 [DEBUG] [Thread-16518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:27:40.335 [DEBUG] [Thread-16518] [transport.py] [_log()] Compression: none
2026-04-15T09:27:40.335 [DEBUG] [Thread-16518] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:27:40.347 [DEBUG] [Thread-16518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:27:40.347 [DEBUG] [Thread-16518] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:27:40.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:27:40.348 [DEBUG] [Thread-16518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:27:40.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:27:40.349 [DEBUG] [Thread-16518] [transport.py] [_log()] userauth is OK
2026-04-15T09:27:40.349 [DEBUG] [Thread-16518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:27:40.349 [DEBUG] [Thread-16518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:27:40.349 [DEBUG] [Thread-16518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:27:40.350 [DEBUG] [Thread-16518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:27:40.374 [INFO] [Thread-16518] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:27:40.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:27:41.004 [DEBUG] [Thread-16518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:27:41.005 [DEBUG] [Thread-16518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:27:41.005 [DEBUG] [Thread-16518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:27:41.045 [DEBUG] [Thread-16518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:27:41.045 [DEBUG] [Thread-16518] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:27:41.048 [DEBUG] [Thread-16518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:27:41.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:27:41.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:27:41.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:27:41.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:27:41.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:27:41.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:27:41.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:27:41.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:27:41.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:27:41.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.310548 -999.00   +9.10  19.59     96   +8.50 1 3 1 3 1   887    0 0.60 3.79 ----- 19.6 19.6 300.2 23.5 12.8 -3.2 12.4 -2.9 11.4 -2.1 12.0 -1.5
2026-04-15T09:27:41.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:27:41.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:27:41.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.310548
2026-04-15T09:27:41.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:27:41.063 [DEBUG] [Thread-16518] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:27:41.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:27:41.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:27:41.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:27:41.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:27:41.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:26:57', tmtdew=0.17813, humidity=98.6169, cloud=0.0, wind=21.7739, temperature=9.059, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:27:11.347', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:27:41.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:27:41.311 [DEBUG] [Thread-16521] [transport.py] [_log()] starting thread (client mode): 0xf1337280
2026-04-15T09:27:41.311 [DEBUG] [Thread-16521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:27:41.325 [DEBUG] [Thread-16521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:27:41.325 [INFO] [Thread-16521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:27:41.328 [DEBUG] [Thread-16523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:27:41.332 [DEBUG] [Thread-16521] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:27:41.333 [DEBUG] [Thread-16521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:27:41.333 [DEBUG] [Thread-16521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:27:41.333 [DEBUG] [Thread-16521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:27:41.333 [DEBUG] [Thread-16521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:27:41.333 [DEBUG] [Thread-16521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:27:41.333 [DEBUG] [Thread-16521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:27:41.333 [DEBUG] [Thread-16521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:27:41.333 [DEBUG] [Thread-16521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:27:41.333 [DEBUG] [Thread-16521] [transport.py] [_log()] client lang: <none>
2026-04-15T09:27:41.333 [DEBUG] [Thread-16521] [transport.py] [_log()] server lang: <none>
2026-04-15T09:27:41.333 [DEBUG] [Thread-16521] [transport.py] [_log()] kex follows: False
2026-04-15T09:27:41.334 [DEBUG] [Thread-16521] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:27:41.334 [DEBUG] [Thread-16521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:27:41.334 [DEBUG] [Thread-16521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:27:41.334 [DEBUG] [Thread-16521] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:27:41.334 [DEBUG] [Thread-16521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:27:41.334 [DEBUG] [Thread-16521] [transport.py] [_log()] Compression: none
2026-04-15T09:27:41.334 [DEBUG] [Thread-16521] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:27:41.389 [DEBUG] [Thread-16521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:27:41.390 [DEBUG] [Thread-16521] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:27:41.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:27:41.390 [DEBUG] [Thread-16521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:27:41.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:27:41.445 [DEBUG] [Thread-16521] [transport.py] [_log()] userauth is OK
2026-04-15T09:27:41.445 [DEBUG] [Thread-16521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:27:41.445 [DEBUG] [Thread-16521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:27:41.446 [DEBUG] [Thread-16521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:27:41.446 [DEBUG] [Thread-16521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:27:41.470 [INFO] [Thread-16521] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:27:41.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:27:41.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:27:42.306 [DEBUG] [Thread-16521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:27:42.306 [DEBUG] [Thread-16521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:27:42.354 [DEBUG] [Thread-16521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:27:42.354 [DEBUG] [Thread-16521] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:27:42.363 [DEBUG] [Thread-16521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:27:42.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:27:42.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')
2026-04-15T09:27:42.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
2026-04-15T09:27:42.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:27:42.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:27:42.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:27:42.402 [DEBUG] [Thread-16521] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:27:55.898 [DEBUG] [Thread-16524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:27:56.365 [DEBUG] [Thread-16525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:28:11.394 [DEBUG] [Thread-16526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:28:12.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:28:12.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:28:12.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
2026-04-15T09:28:13.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 27, 33), 0.185545, 98.5671, 0.0, 20.7684, 8.97606, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:28:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:27:33
2026-04-15T09:28:14.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:28:14.547 [DEBUG] [Thread-16527] [transport.py] [_log()] starting thread (client mode): 0xf13ee6e0
2026-04-15T09:28:14.548 [DEBUG] [Thread-16527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:28:14.568 [DEBUG] [Thread-16527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:28:14.568 [INFO] [Thread-16527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:28:14.571 [DEBUG] [Thread-16527] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:28:14.571 [DEBUG] [Thread-16527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:28:14.571 [DEBUG] [Thread-16527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:28:14.571 [DEBUG] [Thread-16527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:28:14.571 [DEBUG] [Thread-16527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:28:14.571 [DEBUG] [Thread-16527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:28:14.571 [DEBUG] [Thread-16527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:28:14.571 [DEBUG] [Thread-16527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:28:14.571 [DEBUG] [Thread-16527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:28:14.571 [DEBUG] [Thread-16527] [transport.py] [_log()] client lang: <none>
2026-04-15T09:28:14.571 [DEBUG] [Thread-16527] [transport.py] [_log()] server lang: <none>
2026-04-15T09:28:14.572 [DEBUG] [Thread-16527] [transport.py] [_log()] kex follows: False
2026-04-15T09:28:14.572 [DEBUG] [Thread-16527] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:28:14.572 [DEBUG] [Thread-16527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:28:14.572 [DEBUG] [Thread-16527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:28:14.572 [DEBUG] [Thread-16527] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:28:14.572 [DEBUG] [Thread-16527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:28:14.572 [DEBUG] [Thread-16527] [transport.py] [_log()] Compression: none
2026-04-15T09:28:14.572 [DEBUG] [Thread-16527] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:28:14.583 [DEBUG] [Thread-16527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:28:14.584 [DEBUG] [Thread-16527] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:28:14.584 [DEBUG] [Thread-16527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:28:14.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:28:14.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:28:14.628 [DEBUG] [Thread-16527] [transport.py] [_log()] userauth is OK
2026-04-15T09:28:14.629 [DEBUG] [Thread-16527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:28:14.629 [DEBUG] [Thread-16527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:28:14.629 [DEBUG] [Thread-16527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:28:14.629 [DEBUG] [Thread-16527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:28:14.646 [INFO] [Thread-16527] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:28:14.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:28:15.238 [DEBUG] [Thread-16527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:28:15.239 [DEBUG] [Thread-16527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:28:15.239 [DEBUG] [Thread-16527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:28:15.279 [DEBUG] [Thread-16527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:28:15.279 [DEBUG] [Thread-16527] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:28:15.282 [DEBUG] [Thread-16527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:28:15.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:28:15.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:28:15.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:28:15.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:28:15.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:28:15.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:28:15.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:28:15.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:28:15.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:28:15.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.310895 -999.00   +8.90  16.24     95   +8.30 1 3 1 3 1   887    0 0.65 5.13 ----- 16.2 16.2 296.0 23.3 12.7 -3.3 12.3 -3.2 11.4 -2.4 11.8 -2.3
2026-04-15T09:28:15.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:28:15.309 [DEBUG] [Thread-16527] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:28:15.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:28:15.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.310895
2026-04-15T09:28:15.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:28:15.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:28:15.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:28:15.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:28:15.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:28:15.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:27:33', tmtdew=0.185545, humidity=98.5671, cloud=0.0, wind=20.7684, temperature=8.97606, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:27:41.328', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:28:15.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:28:15.567 [DEBUG] [Thread-16530] [transport.py] [_log()] starting thread (client mode): 0xf1336530
2026-04-15T09:28:15.567 [DEBUG] [Thread-16530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:28:15.582 [DEBUG] [Thread-16530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:28:15.582 [INFO] [Thread-16530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:28:15.589 [DEBUG] [Thread-16530] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:28:15.590 [DEBUG] [Thread-16530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:28:15.590 [DEBUG] [Thread-16530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:28:15.590 [DEBUG] [Thread-16530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:28:15.590 [DEBUG] [Thread-16530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:28:15.590 [DEBUG] [Thread-16530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:28:15.590 [DEBUG] [Thread-16530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:28:15.590 [DEBUG] [Thread-16530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:28:15.590 [DEBUG] [Thread-16530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:28:15.590 [DEBUG] [Thread-16530] [transport.py] [_log()] client lang: <none>
2026-04-15T09:28:15.590 [DEBUG] [Thread-16530] [transport.py] [_log()] server lang: <none>
2026-04-15T09:28:15.590 [DEBUG] [Thread-16530] [transport.py] [_log()] kex follows: False
2026-04-15T09:28:15.591 [DEBUG] [Thread-16530] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:28:15.591 [DEBUG] [Thread-16530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:28:15.591 [DEBUG] [Thread-16530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:28:15.591 [DEBUG] [Thread-16530] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:28:15.591 [DEBUG] [Thread-16530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:28:15.591 [DEBUG] [Thread-16530] [transport.py] [_log()] Compression: none
2026-04-15T09:28:15.591 [DEBUG] [Thread-16530] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:28:15.645 [DEBUG] [Thread-16530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:28:15.646 [DEBUG] [Thread-16530] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:28:15.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:28:15.646 [DEBUG] [Thread-16530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:28:15.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:28:15.702 [DEBUG] [Thread-16530] [transport.py] [_log()] userauth is OK
2026-04-15T09:28:15.702 [DEBUG] [Thread-16530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:28:15.702 [DEBUG] [Thread-16530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:28:15.702 [DEBUG] [Thread-16530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:28:15.703 [DEBUG] [Thread-16530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:28:15.730 [INFO] [Thread-16530] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:28:15.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:28:15.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:28:16.610 [DEBUG] [Thread-16530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:28:16.610 [DEBUG] [Thread-16530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:28:16.658 [DEBUG] [Thread-16530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:28:16.658 [DEBUG] [Thread-16530] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:28:16.667 [DEBUG] [Thread-16530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:28:16.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:28:16.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')
2026-04-15T09:28:16.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
2026-04-15T09:28:16.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:28:16.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:28:16.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:28:16.701 [DEBUG] [Thread-16530] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:28:20.988 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:28:20.989 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:28:26.423 [DEBUG] [Thread-16532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:28:41.461 [DEBUG] [Thread-16533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:28:46.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:28:46.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:28:46.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
2026-04-15T09:28:48.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 28, 8), 0.173165, 98.65, 0.0, 18.8104, 9.09214, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:28:48.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:28:08
2026-04-15T09:28:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:28:48.975 [DEBUG] [Thread-16534] [transport.py] [_log()] starting thread (client mode): 0xf13361d0
2026-04-15T09:28:48.975 [DEBUG] [Thread-16534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:28:48.994 [DEBUG] [Thread-16534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:28:48.994 [INFO] [Thread-16534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:28:48.996 [DEBUG] [Thread-16534] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:28:48.996 [DEBUG] [Thread-16534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:28:48.997 [DEBUG] [Thread-16534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:28:48.997 [DEBUG] [Thread-16534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:28:48.997 [DEBUG] [Thread-16534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:28:48.997 [DEBUG] [Thread-16534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:28:48.997 [DEBUG] [Thread-16534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:28:48.997 [DEBUG] [Thread-16534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:28:48.997 [DEBUG] [Thread-16534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:28:48.997 [DEBUG] [Thread-16534] [transport.py] [_log()] client lang: <none>
2026-04-15T09:28:48.997 [DEBUG] [Thread-16534] [transport.py] [_log()] server lang: <none>
2026-04-15T09:28:48.997 [DEBUG] [Thread-16534] [transport.py] [_log()] kex follows: False
2026-04-15T09:28:48.997 [DEBUG] [Thread-16534] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:28:48.997 [DEBUG] [Thread-16534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:28:48.998 [DEBUG] [Thread-16534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:28:48.998 [DEBUG] [Thread-16534] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:28:48.998 [DEBUG] [Thread-16534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:28:48.998 [DEBUG] [Thread-16534] [transport.py] [_log()] Compression: none
2026-04-15T09:28:48.998 [DEBUG] [Thread-16534] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:28:49.009 [DEBUG] [Thread-16534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:28:49.010 [DEBUG] [Thread-16534] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:28:49.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:28:49.010 [DEBUG] [Thread-16534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:28:49.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:28:49.011 [DEBUG] [Thread-16534] [transport.py] [_log()] userauth is OK
2026-04-15T09:28:49.011 [DEBUG] [Thread-16534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:28:49.011 [DEBUG] [Thread-16534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:28:49.011 [DEBUG] [Thread-16534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:28:49.011 [DEBUG] [Thread-16534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:28:49.028 [INFO] [Thread-16534] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:28:49.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:28:49.675 [DEBUG] [Thread-16534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:28:49.675 [DEBUG] [Thread-16534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:28:49.675 [DEBUG] [Thread-16534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:28:49.716 [DEBUG] [Thread-16534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:28:49.716 [DEBUG] [Thread-16534] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:28:49.719 [DEBUG] [Thread-16534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:28:49.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:28:49.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:28:49.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:28:49.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:28:49.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:28:49.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:28:49.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:28:49.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:28:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:28:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.311589 -999.00   +8.80  13.93     95   +8.10 1 3 1 3 1   887    0 0.73 7.54 ----- 13.9 13.9 287.2 16.4 12.6 -3.3 12.2 -3.1 11.3 -2.0 11.8 -2.3
2026-04-15T09:28:49.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:28:49.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:28:49.742 [DEBUG] [Thread-16534] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:28:49.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.311589
2026-04-15T09:28:49.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:28:49.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:28:49.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:28:49.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:28:49.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:28:49.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:28:08', tmtdew=0.173165, humidity=98.65, cloud=0.0, wind=18.8104, temperature=9.09214, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:28:41.290', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:28:49.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:28:49.998 [DEBUG] [Thread-16537] [transport.py] [_log()] starting thread (client mode): 0xf13367a0
2026-04-15T09:28:49.999 [DEBUG] [Thread-16537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:28:50.013 [DEBUG] [Thread-16537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:28:50.013 [INFO] [Thread-16537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:28:50.020 [DEBUG] [Thread-16537] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:28:50.020 [DEBUG] [Thread-16537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:28:50.020 [DEBUG] [Thread-16537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:28:50.021 [DEBUG] [Thread-16537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:28:50.021 [DEBUG] [Thread-16537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:28:50.021 [DEBUG] [Thread-16537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:28:50.021 [DEBUG] [Thread-16537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:28:50.021 [DEBUG] [Thread-16537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:28:50.021 [DEBUG] [Thread-16537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:28:50.021 [DEBUG] [Thread-16537] [transport.py] [_log()] client lang: <none>
2026-04-15T09:28:50.021 [DEBUG] [Thread-16537] [transport.py] [_log()] server lang: <none>
2026-04-15T09:28:50.021 [DEBUG] [Thread-16537] [transport.py] [_log()] kex follows: False
2026-04-15T09:28:50.021 [DEBUG] [Thread-16537] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:28:50.021 [DEBUG] [Thread-16537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:28:50.022 [DEBUG] [Thread-16537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:28:50.022 [DEBUG] [Thread-16537] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:28:50.022 [DEBUG] [Thread-16537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:28:50.022 [DEBUG] [Thread-16537] [transport.py] [_log()] Compression: none
2026-04-15T09:28:50.022 [DEBUG] [Thread-16537] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:28:50.078 [DEBUG] [Thread-16537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:28:50.078 [DEBUG] [Thread-16537] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:28:50.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:28:50.079 [DEBUG] [Thread-16537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:28:50.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:28:50.135 [DEBUG] [Thread-16537] [transport.py] [_log()] userauth is OK
2026-04-15T09:28:50.135 [DEBUG] [Thread-16537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:28:50.135 [DEBUG] [Thread-16537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:28:50.135 [DEBUG] [Thread-16537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:28:50.135 [DEBUG] [Thread-16537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:28:50.166 [INFO] [Thread-16537] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:28:50.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:28:50.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:28:50.982 [DEBUG] [Thread-16537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:28:50.982 [DEBUG] [Thread-16537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:28:51.029 [DEBUG] [Thread-16537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:28:51.029 [DEBUG] [Thread-16537] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:28:51.038 [DEBUG] [Thread-16537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:28:51.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:28:51.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')
2026-04-15T09:28:51.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
2026-04-15T09:28:51.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:28:51.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:28:51.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:28:51.075 [DEBUG] [Thread-16537] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:28:56.000 [DEBUG] [Thread-16539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:28:56.493 [DEBUG] [Thread-16540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:29:11.634 [DEBUG] [Thread-16541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:29:21.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:29:21.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:29:21.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
2026-04-15T09:29:21.129 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:29:21.130 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:29:22.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 28, 43), 0.25116, 98.2669, 0.0, 17.0791, 9.31841, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:29:22.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:28:43
2026-04-15T09:29:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:29:23.390 [DEBUG] [Thread-16542] [transport.py] [_log()] starting thread (client mode): 0xf13356f0
2026-04-15T09:29:23.390 [DEBUG] [Thread-16542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:29:23.409 [DEBUG] [Thread-16542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:29:23.409 [INFO] [Thread-16542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:29:23.412 [DEBUG] [Thread-16542] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:29:23.412 [DEBUG] [Thread-16542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:29:23.412 [DEBUG] [Thread-16542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:29:23.413 [DEBUG] [Thread-16542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:29:23.413 [DEBUG] [Thread-16542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:29:23.413 [DEBUG] [Thread-16542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:29:23.413 [DEBUG] [Thread-16542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:29:23.413 [DEBUG] [Thread-16542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:29:23.413 [DEBUG] [Thread-16542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:29:23.413 [DEBUG] [Thread-16542] [transport.py] [_log()] client lang: <none>
2026-04-15T09:29:23.413 [DEBUG] [Thread-16542] [transport.py] [_log()] server lang: <none>
2026-04-15T09:29:23.413 [DEBUG] [Thread-16542] [transport.py] [_log()] kex follows: False
2026-04-15T09:29:23.413 [DEBUG] [Thread-16542] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:29:23.414 [DEBUG] [Thread-16542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:29:23.414 [DEBUG] [Thread-16542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:29:23.414 [DEBUG] [Thread-16542] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:29:23.414 [DEBUG] [Thread-16542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:29:23.414 [DEBUG] [Thread-16542] [transport.py] [_log()] Compression: none
2026-04-15T09:29:23.414 [DEBUG] [Thread-16542] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:29:23.432 [DEBUG] [Thread-16542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:29:23.432 [DEBUG] [Thread-16542] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:29:23.432 [DEBUG] [Thread-16542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:29:23.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:29:23.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:29:23.434 [DEBUG] [Thread-16542] [transport.py] [_log()] userauth is OK
2026-04-15T09:29:23.434 [DEBUG] [Thread-16542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:29:23.434 [DEBUG] [Thread-16542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:29:23.434 [DEBUG] [Thread-16542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:29:23.434 [DEBUG] [Thread-16542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:29:23.451 [INFO] [Thread-16542] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:29:23.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:29:24.108 [DEBUG] [Thread-16542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:29:24.109 [DEBUG] [Thread-16542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:29:24.109 [DEBUG] [Thread-16542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:29:24.149 [DEBUG] [Thread-16542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:29:24.149 [DEBUG] [Thread-16542] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:29:24.151 [DEBUG] [Thread-16542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:29:24.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:29:24.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:29:24.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:29:24.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:29:24.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:29:24.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:29:24.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:29:24.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:29:24.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:29:24.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.311936 -999.00   +8.90  11.42     95   +8.30 1 3 1 3 1   887    0 0.77 8.82 ----- 11.4 11.4 292.8 15.9 12.6 -3.0 12.2 -2.6 11.3 -1.7 11.7 -2.0
2026-04-15T09:29:24.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:29:24.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:29:24.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.311936
2026-04-15T09:29:24.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:29:24.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:29:24.177 [DEBUG] [Thread-16542] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:29:24.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:29:24.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:29:24.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:29:24.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:28:43', tmtdew=0.25116, humidity=98.2669, cloud=0.0, wind=17.0791, temperature=9.31841, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:29:11.270', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:29:24.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:29:24.430 [DEBUG] [Thread-16545] [transport.py] [_log()] starting thread (client mode): 0xee91cf10
2026-04-15T09:29:24.430 [DEBUG] [Thread-16545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:29:24.445 [DEBUG] [Thread-16545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:29:24.445 [INFO] [Thread-16545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:29:24.452 [DEBUG] [Thread-16545] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:29:24.452 [DEBUG] [Thread-16545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:29:24.452 [DEBUG] [Thread-16545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:29:24.453 [DEBUG] [Thread-16545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:29:24.453 [DEBUG] [Thread-16545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:29:24.453 [DEBUG] [Thread-16545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:29:24.453 [DEBUG] [Thread-16545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:29:24.453 [DEBUG] [Thread-16545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:29:24.453 [DEBUG] [Thread-16545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:29:24.453 [DEBUG] [Thread-16545] [transport.py] [_log()] client lang: <none>
2026-04-15T09:29:24.453 [DEBUG] [Thread-16545] [transport.py] [_log()] server lang: <none>
2026-04-15T09:29:24.453 [DEBUG] [Thread-16545] [transport.py] [_log()] kex follows: False
2026-04-15T09:29:24.453 [DEBUG] [Thread-16545] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:29:24.453 [DEBUG] [Thread-16545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:29:24.453 [DEBUG] [Thread-16545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:29:24.454 [DEBUG] [Thread-16545] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:29:24.454 [DEBUG] [Thread-16545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:29:24.454 [DEBUG] [Thread-16545] [transport.py] [_log()] Compression: none
2026-04-15T09:29:24.454 [DEBUG] [Thread-16545] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:29:24.511 [DEBUG] [Thread-16545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:29:24.511 [DEBUG] [Thread-16545] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:29:24.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:29:24.512 [DEBUG] [Thread-16545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:29:24.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:29:24.567 [DEBUG] [Thread-16545] [transport.py] [_log()] userauth is OK
2026-04-15T09:29:24.567 [DEBUG] [Thread-16545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:29:24.567 [DEBUG] [Thread-16545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:29:24.568 [DEBUG] [Thread-16545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:29:24.568 [DEBUG] [Thread-16545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:29:24.593 [INFO] [Thread-16545] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:29:24.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:29:24.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:29:25.416 [DEBUG] [Thread-16545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:29:25.416 [DEBUG] [Thread-16545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:29:25.464 [DEBUG] [Thread-16545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:29:25.464 [DEBUG] [Thread-16545] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:29:25.473 [DEBUG] [Thread-16545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:29:25.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:29:25.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')
2026-04-15T09:29:25.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
2026-04-15T09:29:25.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:29:25.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:29:25.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:29:25.507 [DEBUG] [Thread-16545] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:29:26.666 [DEBUG] [Thread-16547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:29:41.710 [DEBUG] [Thread-16548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:29:55.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:29:55.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:29:55.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
2026-04-15T09:29:56.111 [DEBUG] [Thread-16549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:29:56.742 [DEBUG] [Thread-16550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:29:56.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 29, 19), 0.133055, 98.5836, 0.0, 11.3105, 8.87601, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:29:56.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:29:19
2026-04-15T09:29:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:29:57.727 [DEBUG] [Thread-16551] [transport.py] [_log()] starting thread (client mode): 0xee91e470
2026-04-15T09:29:57.727 [DEBUG] [Thread-16551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:29:57.746 [DEBUG] [Thread-16551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:29:57.746 [INFO] [Thread-16551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:29:57.748 [DEBUG] [Thread-16551] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:29:57.748 [DEBUG] [Thread-16551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:29:57.748 [DEBUG] [Thread-16551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:29:57.748 [DEBUG] [Thread-16551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:29:57.748 [DEBUG] [Thread-16551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:29:57.748 [DEBUG] [Thread-16551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:29:57.749 [DEBUG] [Thread-16551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:29:57.749 [DEBUG] [Thread-16551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:29:57.749 [DEBUG] [Thread-16551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:29:57.749 [DEBUG] [Thread-16551] [transport.py] [_log()] client lang: <none>
2026-04-15T09:29:57.749 [DEBUG] [Thread-16551] [transport.py] [_log()] server lang: <none>
2026-04-15T09:29:57.749 [DEBUG] [Thread-16551] [transport.py] [_log()] kex follows: False
2026-04-15T09:29:57.749 [DEBUG] [Thread-16551] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:29:57.749 [DEBUG] [Thread-16551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:29:57.749 [DEBUG] [Thread-16551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:29:57.749 [DEBUG] [Thread-16551] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:29:57.749 [DEBUG] [Thread-16551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:29:57.750 [DEBUG] [Thread-16551] [transport.py] [_log()] Compression: none
2026-04-15T09:29:57.750 [DEBUG] [Thread-16551] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:29:57.762 [DEBUG] [Thread-16551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:29:57.762 [DEBUG] [Thread-16551] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:29:57.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:29:57.763 [DEBUG] [Thread-16551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:29:57.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:29:57.764 [DEBUG] [Thread-16551] [transport.py] [_log()] userauth is OK
2026-04-15T09:29:57.764 [DEBUG] [Thread-16551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:29:57.764 [DEBUG] [Thread-16551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:29:57.764 [DEBUG] [Thread-16551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:29:57.764 [DEBUG] [Thread-16551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:29:57.782 [INFO] [Thread-16551] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:29:57.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:29:58.399 [DEBUG] [Thread-16551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:29:58.399 [DEBUG] [Thread-16551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:29:58.400 [DEBUG] [Thread-16551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:29:58.440 [DEBUG] [Thread-16551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:29:58.440 [DEBUG] [Thread-16551] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:29:58.443 [DEBUG] [Thread-16551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:29:58.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:29:58.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:29:58.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:29:58.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:29:58.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:29:58.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:29:58.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:29:58.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:29:58.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:29:58.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.312283 -999.00   +9.10  16.01     95   +8.50 1 3 1 3 1   887    0 0.83 10.58 ----- 16.0 16.0 276.6 19.4 12.5 -3.7 12.2 -2.7 11.2 -3.3 11.7 -1.7
2026-04-15T09:29:58.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:29:58.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:29:58.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.312283
2026-04-15T09:29:58.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:29:58.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:29:58.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:29:58.468 [DEBUG] [Thread-16551] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:29:58.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:29:58.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:29:58.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:29:19', tmtdew=0.133055, humidity=98.5836, cloud=0.0, wind=11.3105, temperature=8.87601, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:29:41.251', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:29:58.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:29:58.724 [DEBUG] [Thread-16554] [transport.py] [_log()] starting thread (client mode): 0xee904190
2026-04-15T09:29:58.725 [DEBUG] [Thread-16554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:29:58.739 [DEBUG] [Thread-16554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:29:58.739 [INFO] [Thread-16554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:29:58.746 [DEBUG] [Thread-16554] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:29:58.746 [DEBUG] [Thread-16554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:29:58.746 [DEBUG] [Thread-16554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:29:58.746 [DEBUG] [Thread-16554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:29:58.746 [DEBUG] [Thread-16554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:29:58.746 [DEBUG] [Thread-16554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:29:58.747 [DEBUG] [Thread-16554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:29:58.747 [DEBUG] [Thread-16554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:29:58.747 [DEBUG] [Thread-16554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:29:58.747 [DEBUG] [Thread-16554] [transport.py] [_log()] client lang: <none>
2026-04-15T09:29:58.747 [DEBUG] [Thread-16554] [transport.py] [_log()] server lang: <none>
2026-04-15T09:29:58.747 [DEBUG] [Thread-16554] [transport.py] [_log()] kex follows: False
2026-04-15T09:29:58.747 [DEBUG] [Thread-16554] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:29:58.747 [DEBUG] [Thread-16554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:29:58.747 [DEBUG] [Thread-16554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:29:58.747 [DEBUG] [Thread-16554] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:29:58.747 [DEBUG] [Thread-16554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:29:58.748 [DEBUG] [Thread-16554] [transport.py] [_log()] Compression: none
2026-04-15T09:29:58.748 [DEBUG] [Thread-16554] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:29:58.803 [DEBUG] [Thread-16554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:29:58.803 [DEBUG] [Thread-16554] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:29:58.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:29:58.804 [DEBUG] [Thread-16554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:29:58.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:29:58.860 [DEBUG] [Thread-16554] [transport.py] [_log()] userauth is OK
2026-04-15T09:29:58.860 [DEBUG] [Thread-16554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:29:58.860 [DEBUG] [Thread-16554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:29:58.860 [DEBUG] [Thread-16554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:29:58.861 [DEBUG] [Thread-16554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:29:58.885 [INFO] [Thread-16554] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:29:58.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:29:58.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:29:59.712 [DEBUG] [Thread-16554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:29:59.712 [DEBUG] [Thread-16554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:29:59.760 [DEBUG] [Thread-16554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:29:59.760 [DEBUG] [Thread-16554] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:29:59.769 [DEBUG] [Thread-16554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:29:59.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:29:59.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')
2026-04-15T09:29:59.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
2026-04-15T09:29:59.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:29:59.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:29:59.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:29:59.807 [DEBUG] [Thread-16554] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:30:11.770 [DEBUG] [Thread-16556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:30:21.270 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:30:21.271 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:30:26.815 [DEBUG] [Thread-16557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:30:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:30:29.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:30:29.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
2026-04-15T09:30:31.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 29, 55), 0.125545, 98.6334, 0.0, 15.1751, 8.87601, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:30:31.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:29:55
2026-04-15T09:30:31.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:30:31.955 [DEBUG] [Thread-16558] [transport.py] [_log()] starting thread (client mode): 0xee91e350
2026-04-15T09:30:31.955 [DEBUG] [Thread-16558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:30:31.976 [DEBUG] [Thread-16558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:30:31.976 [INFO] [Thread-16558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:30:31.979 [DEBUG] [Thread-16558] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:30:31.979 [DEBUG] [Thread-16558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:30:31.979 [DEBUG] [Thread-16558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:30:31.979 [DEBUG] [Thread-16558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:30:31.979 [DEBUG] [Thread-16558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:30:31.980 [DEBUG] [Thread-16558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:30:31.980 [DEBUG] [Thread-16558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:30:31.980 [DEBUG] [Thread-16558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:30:31.980 [DEBUG] [Thread-16558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:30:31.980 [DEBUG] [Thread-16558] [transport.py] [_log()] client lang: <none>
2026-04-15T09:30:31.980 [DEBUG] [Thread-16558] [transport.py] [_log()] server lang: <none>
2026-04-15T09:30:31.980 [DEBUG] [Thread-16558] [transport.py] [_log()] kex follows: False
2026-04-15T09:30:31.980 [DEBUG] [Thread-16558] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:30:31.980 [DEBUG] [Thread-16558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:30:31.980 [DEBUG] [Thread-16558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:30:31.980 [DEBUG] [Thread-16558] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:30:31.980 [DEBUG] [Thread-16558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:30:31.981 [DEBUG] [Thread-16558] [transport.py] [_log()] Compression: none
2026-04-15T09:30:31.981 [DEBUG] [Thread-16558] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:30:31.989 [DEBUG] [Thread-16558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:30:31.989 [DEBUG] [Thread-16558] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:30:31.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:30:31.990 [DEBUG] [Thread-16558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:30:31.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:30:31.991 [DEBUG] [Thread-16558] [transport.py] [_log()] userauth is OK
2026-04-15T09:30:31.991 [DEBUG] [Thread-16558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:30:31.991 [DEBUG] [Thread-16558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:30:31.991 [DEBUG] [Thread-16558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:30:31.991 [DEBUG] [Thread-16558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:30:32.016 [INFO] [Thread-16558] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:30:32.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:30:32.641 [DEBUG] [Thread-16558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:30:32.641 [DEBUG] [Thread-16558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:30:32.642 [DEBUG] [Thread-16558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:30:32.682 [DEBUG] [Thread-16558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:30:32.682 [DEBUG] [Thread-16558] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:30:32.685 [DEBUG] [Thread-16558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:30:32.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:30:32.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:30:32.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:30:32.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:30:32.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:30:32.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:30:32.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:30:32.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:30:32.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:30:32.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.312631 -999.00   +9.10  15.65     95   +8.40 1 3 1 3 1   887    0 0.82 10.35 ----- 15.7 15.7 281.9 17.9 12.5 -3.5 12.1 -2.7 11.2 -2.5 11.7 -1.9
2026-04-15T09:30:32.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:30:32.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:30:32.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.312631
2026-04-15T09:30:32.706 [DEBUG] [Thread-16558] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:30:32.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:30:32.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:30:32.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:30:32.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:30:32.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:30:32.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:29:55', tmtdew=0.125545, humidity=98.6334, cloud=0.0, wind=15.1751, temperature=8.87601, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:30:11.318', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:30:32.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:30:32.963 [DEBUG] [Thread-16561] [transport.py] [_log()] starting thread (client mode): 0xee907430
2026-04-15T09:30:32.963 [DEBUG] [Thread-16561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:30:32.976 [DEBUG] [Thread-16561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:30:32.977 [INFO] [Thread-16561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:30:32.984 [DEBUG] [Thread-16561] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:30:32.984 [DEBUG] [Thread-16561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:30:32.984 [DEBUG] [Thread-16561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:30:32.984 [DEBUG] [Thread-16561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:30:32.984 [DEBUG] [Thread-16561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:30:32.984 [DEBUG] [Thread-16561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:30:32.985 [DEBUG] [Thread-16561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:30:32.985 [DEBUG] [Thread-16561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:30:32.985 [DEBUG] [Thread-16561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:30:32.985 [DEBUG] [Thread-16561] [transport.py] [_log()] client lang: <none>
2026-04-15T09:30:32.985 [DEBUG] [Thread-16561] [transport.py] [_log()] server lang: <none>
2026-04-15T09:30:32.985 [DEBUG] [Thread-16561] [transport.py] [_log()] kex follows: False
2026-04-15T09:30:32.985 [DEBUG] [Thread-16561] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:30:32.985 [DEBUG] [Thread-16561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:30:32.985 [DEBUG] [Thread-16561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:30:32.985 [DEBUG] [Thread-16561] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:30:32.985 [DEBUG] [Thread-16561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:30:32.986 [DEBUG] [Thread-16561] [transport.py] [_log()] Compression: none
2026-04-15T09:30:32.986 [DEBUG] [Thread-16561] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:30:33.039 [DEBUG] [Thread-16561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:30:33.040 [DEBUG] [Thread-16561] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:30:33.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:30:33.041 [DEBUG] [Thread-16561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:30:33.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:30:33.096 [DEBUG] [Thread-16561] [transport.py] [_log()] userauth is OK
2026-04-15T09:30:33.096 [DEBUG] [Thread-16561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:30:33.096 [DEBUG] [Thread-16561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:30:33.096 [DEBUG] [Thread-16561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:30:33.097 [DEBUG] [Thread-16561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:30:33.120 [INFO] [Thread-16561] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:30:33.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:30:33.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:30:33.959 [DEBUG] [Thread-16561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:30:33.959 [DEBUG] [Thread-16561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:30:34.006 [DEBUG] [Thread-16561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:30:34.007 [DEBUG] [Thread-16561] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:30:34.016 [DEBUG] [Thread-16561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:30:34.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:30:34.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')
2026-04-15T09:30:34.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
2026-04-15T09:30:34.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:30:34.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:30:34.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:30:34.051 [DEBUG] [Thread-16561] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:30:41.848 [DEBUG] [Thread-16563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:30:56.209 [DEBUG] [Thread-16564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:30:56.895 [DEBUG] [Thread-16565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:31:04.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:31:04.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:31:04.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
2026-04-15T09:31:05.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 30, 30), 0.12549, 98.6334, 0.0, 12.7937, 8.82623, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:31:05.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:30:30
2026-04-15T09:31:05.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:31:06.238 [DEBUG] [Thread-16566] [transport.py] [_log()] starting thread (client mode): 0xf13ed8d0
2026-04-15T09:31:06.239 [DEBUG] [Thread-16566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:31:06.253 [DEBUG] [Thread-16566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:31:06.253 [INFO] [Thread-16566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:31:06.254 [DEBUG] [Thread-16566] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] client lang: <none>
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] server lang: <none>
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] kex follows: False
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:31:06.255 [DEBUG] [Thread-16566] [transport.py] [_log()] Compression: none
2026-04-15T09:31:06.256 [DEBUG] [Thread-16566] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:31:06.267 [DEBUG] [Thread-16566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:31:06.267 [DEBUG] [Thread-16566] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:31:06.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:31:06.268 [DEBUG] [Thread-16566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:31:06.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:31:06.268 [DEBUG] [Thread-16566] [transport.py] [_log()] userauth is OK
2026-04-15T09:31:06.268 [DEBUG] [Thread-16566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:31:06.268 [DEBUG] [Thread-16566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:31:06.269 [DEBUG] [Thread-16566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:31:06.269 [DEBUG] [Thread-16566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:31:06.282 [INFO] [Thread-16566] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:31:06.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:31:06.865 [DEBUG] [Thread-16566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:31:06.865 [DEBUG] [Thread-16566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:31:06.866 [DEBUG] [Thread-16566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:31:06.906 [DEBUG] [Thread-16566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:31:06.906 [DEBUG] [Thread-16566] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:31:06.909 [DEBUG] [Thread-16566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:31:06.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:31:06.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:31:06.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:31:06.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:31:06.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:31:06.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:31:06.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:31:06.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:31:06.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:31:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.312978 -999.00   +9.10  12.90     95   +8.40 1 3 1 3 1   887    0 0.82 10.56 ----- 12.9 12.9 297.4 15.6 12.5 -2.9 12.1 -2.6 11.2 -1.8 11.7 -2.0
2026-04-15T09:31:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:31:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:31:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.312978
2026-04-15T09:31:06.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:31:06.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:31:06.933 [DEBUG] [Thread-16566] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:31:06.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:31:06.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:31:06.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:31:06.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:30:30', tmtdew=0.12549, humidity=98.6334, cloud=0.0, wind=12.7937, temperature=8.82623, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:30:41.299', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:31:07.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:31:07.185 [DEBUG] [Thread-16569] [transport.py] [_log()] starting thread (client mode): 0xf13efee0
2026-04-15T09:31:07.186 [DEBUG] [Thread-16569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:31:07.200 [DEBUG] [Thread-16569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:31:07.200 [INFO] [Thread-16569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:31:07.208 [DEBUG] [Thread-16569] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:31:07.208 [DEBUG] [Thread-16569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:31:07.208 [DEBUG] [Thread-16569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:31:07.208 [DEBUG] [Thread-16569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:31:07.208 [DEBUG] [Thread-16569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:31:07.208 [DEBUG] [Thread-16569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:31:07.208 [DEBUG] [Thread-16569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:31:07.209 [DEBUG] [Thread-16569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:31:07.209 [DEBUG] [Thread-16569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:31:07.209 [DEBUG] [Thread-16569] [transport.py] [_log()] client lang: <none>
2026-04-15T09:31:07.209 [DEBUG] [Thread-16569] [transport.py] [_log()] server lang: <none>
2026-04-15T09:31:07.209 [DEBUG] [Thread-16569] [transport.py] [_log()] kex follows: False
2026-04-15T09:31:07.209 [DEBUG] [Thread-16569] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:31:07.209 [DEBUG] [Thread-16569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:31:07.209 [DEBUG] [Thread-16569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:31:07.209 [DEBUG] [Thread-16569] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:31:07.209 [DEBUG] [Thread-16569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:31:07.209 [DEBUG] [Thread-16569] [transport.py] [_log()] Compression: none
2026-04-15T09:31:07.210 [DEBUG] [Thread-16569] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:31:07.268 [DEBUG] [Thread-16569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:31:07.269 [DEBUG] [Thread-16569] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:31:07.269 [DEBUG] [Thread-16569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:31:07.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:31:07.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:31:07.325 [DEBUG] [Thread-16569] [transport.py] [_log()] userauth is OK
2026-04-15T09:31:07.325 [DEBUG] [Thread-16569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:31:07.325 [DEBUG] [Thread-16569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:31:07.325 [DEBUG] [Thread-16569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:31:07.325 [DEBUG] [Thread-16569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:31:07.350 [INFO] [Thread-16569] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:31:07.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:31:07.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:31:08.195 [DEBUG] [Thread-16569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:31:08.195 [DEBUG] [Thread-16569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:31:08.243 [DEBUG] [Thread-16569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:31:08.243 [DEBUG] [Thread-16569] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:31:08.252 [DEBUG] [Thread-16569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:31:08.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:31:08.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')
2026-04-15T09:31:08.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
2026-04-15T09:31:08.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:31:08.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:31:08.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:31:08.287 [DEBUG] [Thread-16569] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:31:11.928 [DEBUG] [Thread-16571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:31:21.413 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:31:21.414 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:31:26.974 [DEBUG] [Thread-16572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:31:38.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:31:38.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:31:38.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
2026-04-15T09:31:39.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 31, 6), 0.125565, 98.6334, 0.0, 12.6526, 8.89258, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:31:39.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:31:06
2026-04-15T09:31:39.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:31:40.397 [DEBUG] [Thread-16573] [transport.py] [_log()] starting thread (client mode): 0xf13351e0
2026-04-15T09:31:40.398 [DEBUG] [Thread-16573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:31:40.416 [DEBUG] [Thread-16573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:31:40.416 [INFO] [Thread-16573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:31:40.419 [DEBUG] [Thread-16573] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:31:40.419 [DEBUG] [Thread-16573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:31:40.419 [DEBUG] [Thread-16573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:31:40.419 [DEBUG] [Thread-16573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:31:40.419 [DEBUG] [Thread-16573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:31:40.419 [DEBUG] [Thread-16573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:31:40.419 [DEBUG] [Thread-16573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:31:40.419 [DEBUG] [Thread-16573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:31:40.419 [DEBUG] [Thread-16573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:31:40.420 [DEBUG] [Thread-16573] [transport.py] [_log()] client lang: <none>
2026-04-15T09:31:40.420 [DEBUG] [Thread-16573] [transport.py] [_log()] server lang: <none>
2026-04-15T09:31:40.420 [DEBUG] [Thread-16573] [transport.py] [_log()] kex follows: False
2026-04-15T09:31:40.420 [DEBUG] [Thread-16573] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:31:40.420 [DEBUG] [Thread-16573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:31:40.420 [DEBUG] [Thread-16573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:31:40.420 [DEBUG] [Thread-16573] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:31:40.420 [DEBUG] [Thread-16573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:31:40.420 [DEBUG] [Thread-16573] [transport.py] [_log()] Compression: none
2026-04-15T09:31:40.420 [DEBUG] [Thread-16573] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:31:40.435 [DEBUG] [Thread-16573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:31:40.435 [DEBUG] [Thread-16573] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:31:40.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:31:40.436 [DEBUG] [Thread-16573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:31:40.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:31:40.437 [DEBUG] [Thread-16573] [transport.py] [_log()] userauth is OK
2026-04-15T09:31:40.437 [DEBUG] [Thread-16573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:31:40.438 [DEBUG] [Thread-16573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:31:40.438 [DEBUG] [Thread-16573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:31:40.438 [DEBUG] [Thread-16573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:31:40.459 [INFO] [Thread-16573] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:31:40.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:31:41.100 [DEBUG] [Thread-16573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:31:41.100 [DEBUG] [Thread-16573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:31:41.101 [DEBUG] [Thread-16573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:31:41.141 [DEBUG] [Thread-16573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:31:41.141 [DEBUG] [Thread-16573] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:31:41.143 [DEBUG] [Thread-16573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:31:41.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:31:41.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:31:41.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:31:41.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:31:41.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:31:41.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:31:41.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:31:41.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:31:41.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:31:41.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.313325 -999.00   +9.20  10.94     95   +8.50 1 3 1 3 1   887    0 0.87 11.90 ----- 10.9 10.9 291.1 15.9 12.4 -3.5 12.0 -2.6 11.2 -2.4 11.7 -2.0
2026-04-15T09:31:41.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:31:41.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:31:41.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.313325
2026-04-15T09:31:41.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:31:41.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:31:41.160 [DEBUG] [Thread-16573] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:31:41.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:31:41.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:31:41.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:31:41.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:31:06', tmtdew=0.125565, humidity=98.6334, cloud=0.0, wind=12.6526, temperature=8.89258, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:31:11.280', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:31:41.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:31:41.401 [DEBUG] [Thread-16576] [transport.py] [_log()] starting thread (client mode): 0xee91efe0
2026-04-15T09:31:41.401 [DEBUG] [Thread-16576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:31:41.415 [DEBUG] [Thread-16576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:31:41.415 [INFO] [Thread-16576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:31:41.422 [DEBUG] [Thread-16576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:31:41.422 [DEBUG] [Thread-16576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:31:41.422 [DEBUG] [Thread-16576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:31:41.422 [DEBUG] [Thread-16576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:31:41.423 [DEBUG] [Thread-16576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:31:41.423 [DEBUG] [Thread-16576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:31:41.423 [DEBUG] [Thread-16576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:31:41.423 [DEBUG] [Thread-16576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:31:41.423 [DEBUG] [Thread-16576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:31:41.423 [DEBUG] [Thread-16576] [transport.py] [_log()] client lang: <none>
2026-04-15T09:31:41.423 [DEBUG] [Thread-16576] [transport.py] [_log()] server lang: <none>
2026-04-15T09:31:41.423 [DEBUG] [Thread-16576] [transport.py] [_log()] kex follows: False
2026-04-15T09:31:41.423 [DEBUG] [Thread-16576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:31:41.423 [DEBUG] [Thread-16576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:31:41.423 [DEBUG] [Thread-16576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:31:41.424 [DEBUG] [Thread-16576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:31:41.424 [DEBUG] [Thread-16576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:31:41.424 [DEBUG] [Thread-16576] [transport.py] [_log()] Compression: none
2026-04-15T09:31:41.424 [DEBUG] [Thread-16576] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:31:41.480 [DEBUG] [Thread-16576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:31:41.481 [DEBUG] [Thread-16576] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:31:41.481 [DEBUG] [Thread-16576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:31:41.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:31:41.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:31:41.537 [DEBUG] [Thread-16576] [transport.py] [_log()] userauth is OK
2026-04-15T09:31:41.538 [DEBUG] [Thread-16576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:31:41.538 [DEBUG] [Thread-16576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:31:41.538 [DEBUG] [Thread-16576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:31:41.538 [DEBUG] [Thread-16576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:31:41.565 [INFO] [Thread-16576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:31:41.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:31:41.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:31:42.003 [DEBUG] [Thread-16578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:31:42.410 [DEBUG] [Thread-16576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:31:42.411 [DEBUG] [Thread-16576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:31:42.459 [DEBUG] [Thread-16576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:31:42.459 [DEBUG] [Thread-16576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:31:42.468 [DEBUG] [Thread-16576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:31:42.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:31:42.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')
2026-04-15T09:31:42.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
2026-04-15T09:31:42.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:31:42.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:31:42.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:31:42.503 [DEBUG] [Thread-16576] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:31:56.287 [DEBUG] [Thread-16579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:31:57.045 [DEBUG] [Thread-16580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:32:12.075 [DEBUG] [Thread-16581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:32:12.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:32:12.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:32:12.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
2026-04-15T09:32:13.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 31, 41), 0.25638, 98.2335, 0.0, 14.292, 9.48419, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:32:13.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:31:41
2026-04-15T09:32:14.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:32:14.621 [DEBUG] [Thread-16582] [transport.py] [_log()] starting thread (client mode): 0xee907a60
2026-04-15T09:32:14.621 [DEBUG] [Thread-16582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:32:14.640 [DEBUG] [Thread-16582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:32:14.640 [INFO] [Thread-16582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:32:14.643 [DEBUG] [Thread-16582] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:32:14.644 [DEBUG] [Thread-16582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:32:14.644 [DEBUG] [Thread-16582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:32:14.644 [DEBUG] [Thread-16582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:32:14.644 [DEBUG] [Thread-16582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:32:14.644 [DEBUG] [Thread-16582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:32:14.644 [DEBUG] [Thread-16582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:32:14.644 [DEBUG] [Thread-16582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:32:14.644 [DEBUG] [Thread-16582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:32:14.644 [DEBUG] [Thread-16582] [transport.py] [_log()] client lang: <none>
2026-04-15T09:32:14.644 [DEBUG] [Thread-16582] [transport.py] [_log()] server lang: <none>
2026-04-15T09:32:14.644 [DEBUG] [Thread-16582] [transport.py] [_log()] kex follows: False
2026-04-15T09:32:14.644 [DEBUG] [Thread-16582] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:32:14.645 [DEBUG] [Thread-16582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:32:14.645 [DEBUG] [Thread-16582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:32:14.645 [DEBUG] [Thread-16582] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:32:14.645 [DEBUG] [Thread-16582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:32:14.645 [DEBUG] [Thread-16582] [transport.py] [_log()] Compression: none
2026-04-15T09:32:14.645 [DEBUG] [Thread-16582] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:32:14.661 [DEBUG] [Thread-16582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:32:14.662 [DEBUG] [Thread-16582] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:32:14.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:32:14.662 [DEBUG] [Thread-16582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:32:14.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:32:14.663 [DEBUG] [Thread-16582] [transport.py] [_log()] userauth is OK
2026-04-15T09:32:14.663 [DEBUG] [Thread-16582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:32:14.664 [DEBUG] [Thread-16582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:32:14.664 [DEBUG] [Thread-16582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:32:14.664 [DEBUG] [Thread-16582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:32:14.688 [INFO] [Thread-16582] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:32:14.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:32:15.291 [DEBUG] [Thread-16582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:32:15.291 [DEBUG] [Thread-16582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:32:15.292 [DEBUG] [Thread-16582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:32:15.332 [DEBUG] [Thread-16582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:32:15.332 [DEBUG] [Thread-16582] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:32:15.335 [DEBUG] [Thread-16582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:32:15.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:32:15.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:32:15.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:32:15.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:32:15.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:32:15.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:32:15.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:32:15.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:32:15.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:32:15.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.313672 -999.00   +9.10  12.55     95   +8.50 1 3 1 3 1   887    0 0.87 11.86 ----- 12.6 12.6 282.4 17.4 12.3 -3.1 12.0 -2.7 11.2 -2.2 11.7 -2.1
2026-04-15T09:32:15.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:32:15.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:32:15.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.313672
2026-04-15T09:32:15.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:32:15.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:32:15.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:32:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:32:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:32:15.360 [DEBUG] [Thread-16582] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:32:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:31:41', tmtdew=0.25638, humidity=98.2335, cloud=0.0, wind=14.292, temperature=9.48419, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:31:41.261', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:32:15.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:32:15.611 [DEBUG] [Thread-16585] [transport.py] [_log()] starting thread (client mode): 0xee906d40
2026-04-15T09:32:15.611 [DEBUG] [Thread-16585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:32:15.627 [DEBUG] [Thread-16585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:32:15.627 [INFO] [Thread-16585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:32:15.634 [DEBUG] [Thread-16585] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:32:15.634 [DEBUG] [Thread-16585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:32:15.634 [DEBUG] [Thread-16585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:32:15.635 [DEBUG] [Thread-16585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:32:15.635 [DEBUG] [Thread-16585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:32:15.635 [DEBUG] [Thread-16585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:32:15.635 [DEBUG] [Thread-16585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:32:15.635 [DEBUG] [Thread-16585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:32:15.635 [DEBUG] [Thread-16585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:32:15.635 [DEBUG] [Thread-16585] [transport.py] [_log()] client lang: <none>
2026-04-15T09:32:15.635 [DEBUG] [Thread-16585] [transport.py] [_log()] server lang: <none>
2026-04-15T09:32:15.635 [DEBUG] [Thread-16585] [transport.py] [_log()] kex follows: False
2026-04-15T09:32:15.635 [DEBUG] [Thread-16585] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:32:15.635 [DEBUG] [Thread-16585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:32:15.635 [DEBUG] [Thread-16585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:32:15.636 [DEBUG] [Thread-16585] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:32:15.636 [DEBUG] [Thread-16585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:32:15.636 [DEBUG] [Thread-16585] [transport.py] [_log()] Compression: none
2026-04-15T09:32:15.636 [DEBUG] [Thread-16585] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:32:15.693 [DEBUG] [Thread-16585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:32:15.693 [DEBUG] [Thread-16585] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:32:15.694 [DEBUG] [Thread-16585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:32:15.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:32:15.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:32:15.757 [DEBUG] [Thread-16585] [transport.py] [_log()] userauth is OK
2026-04-15T09:32:15.757 [DEBUG] [Thread-16585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:32:15.757 [DEBUG] [Thread-16585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:32:15.757 [DEBUG] [Thread-16585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:32:15.758 [DEBUG] [Thread-16585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:32:15.785 [INFO] [Thread-16585] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:32:15.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:32:15.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:32:16.624 [DEBUG] [Thread-16585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:32:16.624 [DEBUG] [Thread-16585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:32:16.674 [DEBUG] [Thread-16585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:32:16.674 [DEBUG] [Thread-16585] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:32:16.686 [DEBUG] [Thread-16585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:32:16.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:32:16.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')
2026-04-15T09:32:16.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
2026-04-15T09:32:16.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:32:16.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:32:16.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:32:16.724 [DEBUG] [Thread-16585] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:32:21.552 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:32:21.553 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:32:27.107 [DEBUG] [Thread-16587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:32:42.152 [DEBUG] [Thread-16588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:32:46.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:32:46.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:32:46.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
2026-04-15T09:32:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 32, 17), 0.16581, 98.6997, 0.0, 14.4695, 9.09138, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:32:48.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:32:17
2026-04-15T09:32:48.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:32:48.855 [DEBUG] [Thread-16589] [transport.py] [_log()] starting thread (client mode): 0xf13c8790
2026-04-15T09:32:48.856 [DEBUG] [Thread-16589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:32:48.873 [DEBUG] [Thread-16589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:32:48.873 [INFO] [Thread-16589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:32:48.875 [DEBUG] [Thread-16589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:32:48.875 [DEBUG] [Thread-16589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:32:48.875 [DEBUG] [Thread-16589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:32:48.875 [DEBUG] [Thread-16589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:32:48.876 [DEBUG] [Thread-16589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:32:48.876 [DEBUG] [Thread-16589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:32:48.876 [DEBUG] [Thread-16589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:32:48.876 [DEBUG] [Thread-16589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:32:48.876 [DEBUG] [Thread-16589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:32:48.876 [DEBUG] [Thread-16589] [transport.py] [_log()] client lang: <none>
2026-04-15T09:32:48.876 [DEBUG] [Thread-16589] [transport.py] [_log()] server lang: <none>
2026-04-15T09:32:48.876 [DEBUG] [Thread-16589] [transport.py] [_log()] kex follows: False
2026-04-15T09:32:48.876 [DEBUG] [Thread-16589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:32:48.876 [DEBUG] [Thread-16589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:32:48.876 [DEBUG] [Thread-16589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:32:48.877 [DEBUG] [Thread-16589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:32:48.877 [DEBUG] [Thread-16589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:32:48.877 [DEBUG] [Thread-16589] [transport.py] [_log()] Compression: none
2026-04-15T09:32:48.877 [DEBUG] [Thread-16589] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:32:48.887 [DEBUG] [Thread-16589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:32:48.888 [DEBUG] [Thread-16589] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:32:48.888 [DEBUG] [Thread-16589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:32:48.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:32:48.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:32:48.889 [DEBUG] [Thread-16589] [transport.py] [_log()] userauth is OK
2026-04-15T09:32:48.889 [DEBUG] [Thread-16589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:32:48.889 [DEBUG] [Thread-16589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:32:48.889 [DEBUG] [Thread-16589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:32:48.889 [DEBUG] [Thread-16589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:32:48.905 [INFO] [Thread-16589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:32:48.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:32:49.535 [DEBUG] [Thread-16589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:32:49.535 [DEBUG] [Thread-16589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:32:49.535 [DEBUG] [Thread-16589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:32:49.576 [DEBUG] [Thread-16589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:32:49.576 [DEBUG] [Thread-16589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:32:49.579 [DEBUG] [Thread-16589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:32:49.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:32:49.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:32:49.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:32:49.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:32:49.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:32:49.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:32:49.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:32:49.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:32:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:32:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.314367 -999.00   +9.20   9.73     95   +8.50 1 3 1 3 1   887    0 0.92 13.16 ----- 9.7 9.7 284.6 13.9 12.3 -2.9 11.9 -2.7 11.1 -2.8 11.6 -2.1
2026-04-15T09:32:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:32:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:32:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.314367
2026-04-15T09:32:49.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:32:49.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:32:49.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:32:49.605 [DEBUG] [Thread-16589] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:32:49.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:32:49.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:32:49.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:32:17', tmtdew=0.16581, humidity=98.6997, cloud=0.0, wind=14.4695, temperature=9.09138, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:32:41.309', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:32:49.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:32:56.367 [DEBUG] [Thread-16592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:32:57.184 [DEBUG] [Thread-16593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:33:12.227 [DEBUG] [Thread-16594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:33:21.704 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:33:21.705 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:33:27.259 [DEBUG] [Thread-16595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:33:42.291 [DEBUG] [Thread-16596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:33:56.465 [DEBUG] [Thread-16597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:33:57.323 [DEBUG] [Thread-16598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:34:12.355 [DEBUG] [Thread-16599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:34:21.844 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:34:21.845 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:34:27.386 [DEBUG] [Thread-16600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:34:42.418 [DEBUG] [Thread-16601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:34:56.551 [DEBUG] [Thread-16602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:34:57.450 [DEBUG] [Thread-16603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:35:02.282 [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
2026-04-15T09:35:12.482 [DEBUG] [Thread-16604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:35:21.986 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:35:21.988 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:35:27.514 [DEBUG] [Thread-16605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:35:32.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:35:32.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:35:32.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
2026-04-15T09:35:33.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 35, 14), 0.12076, 98.6662, 0.0, 14.5753, 8.92505, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:35:33.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:35:14
2026-04-15T09:35:34.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:35:34.405 [DEBUG] [Thread-16606] [transport.py] [_log()] starting thread (client mode): 0xee907b80
2026-04-15T09:35:34.406 [DEBUG] [Thread-16606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:35:34.425 [DEBUG] [Thread-16606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:35:34.425 [INFO] [Thread-16606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:35:34.429 [DEBUG] [Thread-16606] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:35:34.429 [DEBUG] [Thread-16606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:35:34.429 [DEBUG] [Thread-16606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:35:34.429 [DEBUG] [Thread-16606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:35:34.429 [DEBUG] [Thread-16606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:35:34.429 [DEBUG] [Thread-16606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:35:34.429 [DEBUG] [Thread-16606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:35:34.429 [DEBUG] [Thread-16606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:35:34.429 [DEBUG] [Thread-16606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:35:34.430 [DEBUG] [Thread-16606] [transport.py] [_log()] client lang: <none>
2026-04-15T09:35:34.430 [DEBUG] [Thread-16606] [transport.py] [_log()] server lang: <none>
2026-04-15T09:35:34.430 [DEBUG] [Thread-16606] [transport.py] [_log()] kex follows: False
2026-04-15T09:35:34.430 [DEBUG] [Thread-16606] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:35:34.430 [DEBUG] [Thread-16606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:35:34.430 [DEBUG] [Thread-16606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:35:34.430 [DEBUG] [Thread-16606] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:35:34.430 [DEBUG] [Thread-16606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:35:34.430 [DEBUG] [Thread-16606] [transport.py] [_log()] Compression: none
2026-04-15T09:35:34.430 [DEBUG] [Thread-16606] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:35:34.439 [DEBUG] [Thread-16606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:35:34.439 [DEBUG] [Thread-16606] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:35:34.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:35:34.440 [DEBUG] [Thread-16606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:35:34.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:35:34.440 [DEBUG] [Thread-16606] [transport.py] [_log()] userauth is OK
2026-04-15T09:35:34.441 [DEBUG] [Thread-16606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:35:34.441 [DEBUG] [Thread-16606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:35:34.441 [DEBUG] [Thread-16606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:35:34.441 [DEBUG] [Thread-16606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:35:34.476 [INFO] [Thread-16606] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:35:34.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:35:37.729 [DEBUG] [Thread-16606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:35:37.730 [DEBUG] [Thread-16606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:35:37.730 [DEBUG] [Thread-16606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:35:37.770 [DEBUG] [Thread-16606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:35:37.770 [DEBUG] [Thread-16606] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:35:37.773 [DEBUG] [Thread-16606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:35:37.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:35:37.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:35:37.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:35:37.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:35:37.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:35:37.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:35:37.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:35:37.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:35:37.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:35:37.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.315755 -999.00   +9.20  13.31     96   +8.60 1 3 1 3 1   887    0 0.85 10.42 ----- 13.3 13.3 296.4 18.0 12.2 -3.3 11.8 -2.7 11.1 -2.0 11.5 -2.0
2026-04-15T09:35:37.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:35:37.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:35:37.799 [DEBUG] [Thread-16606] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:35:37.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.315755
2026-04-15T09:35:37.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:35:37.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:35:37.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:35:37.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:35:37.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:35:37.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:35:14', tmtdew=0.12076, humidity=98.6662, cloud=0.0, wind=14.5753, temperature=8.92505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:34:41.232', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:35:38.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:35:38.058 [DEBUG] [Thread-16609] [transport.py] [_log()] starting thread (client mode): 0xee98ab90
2026-04-15T09:35:38.058 [DEBUG] [Thread-16609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:35:38.072 [DEBUG] [Thread-16609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:35:38.072 [INFO] [Thread-16609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:35:38.079 [DEBUG] [Thread-16609] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:35:38.079 [DEBUG] [Thread-16609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:35:38.079 [DEBUG] [Thread-16609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:35:38.079 [DEBUG] [Thread-16609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:35:38.079 [DEBUG] [Thread-16609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:35:38.079 [DEBUG] [Thread-16609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:35:38.080 [DEBUG] [Thread-16609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:35:38.080 [DEBUG] [Thread-16609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:35:38.080 [DEBUG] [Thread-16609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:35:38.080 [DEBUG] [Thread-16609] [transport.py] [_log()] client lang: <none>
2026-04-15T09:35:38.080 [DEBUG] [Thread-16609] [transport.py] [_log()] server lang: <none>
2026-04-15T09:35:38.080 [DEBUG] [Thread-16609] [transport.py] [_log()] kex follows: False
2026-04-15T09:35:38.080 [DEBUG] [Thread-16609] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:35:38.080 [DEBUG] [Thread-16609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:35:38.080 [DEBUG] [Thread-16609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:35:38.080 [DEBUG] [Thread-16609] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:35:38.080 [DEBUG] [Thread-16609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:35:38.080 [DEBUG] [Thread-16609] [transport.py] [_log()] Compression: none
2026-04-15T09:35:38.080 [DEBUG] [Thread-16609] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:35:38.141 [DEBUG] [Thread-16609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:35:38.141 [DEBUG] [Thread-16609] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:35:38.142 [DEBUG] [Thread-16609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:35:38.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:35:38.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:35:38.196 [DEBUG] [Thread-16609] [transport.py] [_log()] userauth is OK
2026-04-15T09:35:38.196 [DEBUG] [Thread-16609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:35:38.197 [DEBUG] [Thread-16609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:35:38.197 [DEBUG] [Thread-16609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:35:38.197 [DEBUG] [Thread-16609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:35:38.222 [INFO] [Thread-16609] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:35:38.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:35:38.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:35:39.046 [DEBUG] [Thread-16609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:35:39.046 [DEBUG] [Thread-16609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:35:39.094 [DEBUG] [Thread-16609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:35:39.094 [DEBUG] [Thread-16609] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:35:39.102 [DEBUG] [Thread-16609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:35:39.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:35:39.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')
2026-04-15T09:35:39.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') -> 00000000
2026-04-15T09:35:39.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:35:39.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:35:39.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:35:39.135 [DEBUG] [Thread-16609] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:35:42.547 [DEBUG] [Thread-16611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:35:56.653 [DEBUG] [Thread-16612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:35:57.592 [DEBUG] [Thread-16613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:36:09.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:36:09.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:36:09.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
2026-04-15T09:36:10.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 35, 50), 0.2567, 98.2321, 0.0, 15.7738, 9.58285, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:36:10.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:35:50
2026-04-15T09:36:10.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:36:11.242 [DEBUG] [Thread-16614] [transport.py] [_log()] starting thread (client mode): 0xf13ca6b0
2026-04-15T09:36:11.242 [DEBUG] [Thread-16614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:36:11.261 [DEBUG] [Thread-16614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:36:11.261 [INFO] [Thread-16614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:36:11.263 [DEBUG] [Thread-16614] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:36:11.263 [DEBUG] [Thread-16614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:36:11.263 [DEBUG] [Thread-16614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:36:11.263 [DEBUG] [Thread-16614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:36:11.263 [DEBUG] [Thread-16614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:36:11.263 [DEBUG] [Thread-16614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:36:11.263 [DEBUG] [Thread-16614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:36:11.263 [DEBUG] [Thread-16614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:36:11.263 [DEBUG] [Thread-16614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:36:11.263 [DEBUG] [Thread-16614] [transport.py] [_log()] client lang: <none>
2026-04-15T09:36:11.263 [DEBUG] [Thread-16614] [transport.py] [_log()] server lang: <none>
2026-04-15T09:36:11.263 [DEBUG] [Thread-16614] [transport.py] [_log()] kex follows: False
2026-04-15T09:36:11.263 [DEBUG] [Thread-16614] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:36:11.263 [DEBUG] [Thread-16614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:36:11.263 [DEBUG] [Thread-16614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:36:11.264 [DEBUG] [Thread-16614] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:36:11.264 [DEBUG] [Thread-16614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:36:11.264 [DEBUG] [Thread-16614] [transport.py] [_log()] Compression: none
2026-04-15T09:36:11.264 [DEBUG] [Thread-16614] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:36:11.271 [DEBUG] [Thread-16614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:36:11.271 [DEBUG] [Thread-16614] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:36:11.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:36:11.272 [DEBUG] [Thread-16614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:36:11.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:36:11.273 [DEBUG] [Thread-16614] [transport.py] [_log()] userauth is OK
2026-04-15T09:36:11.273 [DEBUG] [Thread-16614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:36:11.273 [DEBUG] [Thread-16614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:36:11.273 [DEBUG] [Thread-16614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:36:11.273 [DEBUG] [Thread-16614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:36:11.285 [INFO] [Thread-16614] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:36:11.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:36:11.844 [DEBUG] [Thread-16614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:36:11.844 [DEBUG] [Thread-16614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:36:11.844 [DEBUG] [Thread-16614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:36:11.885 [DEBUG] [Thread-16614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:36:11.885 [DEBUG] [Thread-16614] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:36:11.889 [DEBUG] [Thread-16614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:36:11.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:36:11.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:36:11.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:36:11.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:36:11.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:36:11.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:36:11.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:36:11.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:36:11.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:36:11.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.316450 -999.00   +8.90   9.69     95   +8.30 1 3 1 3 1   887    0 0.87 10.84 ----- 9.7 9.7 290.6 19.2 12.1 -3.3 11.7 -2.6 10.9 -2.1 11.4 -2.0
2026-04-15T09:36:11.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:36:11.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:36:11.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.316450
2026-04-15T09:36:11.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:36:11.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:36:11.917 [DEBUG] [Thread-16614] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:36:11.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:36:11.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:36:11.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:36:11.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:35:50', tmtdew=0.2567, humidity=98.2321, cloud=0.0, wind=15.7738, temperature=9.58285, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:35:41.280', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:36:12.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:36:12.167 [DEBUG] [Thread-16617] [transport.py] [_log()] starting thread (client mode): 0xee91f0a0
2026-04-15T09:36:12.168 [DEBUG] [Thread-16617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:36:12.182 [DEBUG] [Thread-16617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:36:12.182 [INFO] [Thread-16617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:36:12.190 [DEBUG] [Thread-16617] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:36:12.190 [DEBUG] [Thread-16617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:36:12.190 [DEBUG] [Thread-16617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:36:12.190 [DEBUG] [Thread-16617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:36:12.190 [DEBUG] [Thread-16617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:36:12.190 [DEBUG] [Thread-16617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:36:12.190 [DEBUG] [Thread-16617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:36:12.190 [DEBUG] [Thread-16617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:36:12.190 [DEBUG] [Thread-16617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:36:12.190 [DEBUG] [Thread-16617] [transport.py] [_log()] client lang: <none>
2026-04-15T09:36:12.190 [DEBUG] [Thread-16617] [transport.py] [_log()] server lang: <none>
2026-04-15T09:36:12.191 [DEBUG] [Thread-16617] [transport.py] [_log()] kex follows: False
2026-04-15T09:36:12.191 [DEBUG] [Thread-16617] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:36:12.191 [DEBUG] [Thread-16617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:36:12.191 [DEBUG] [Thread-16617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:36:12.191 [DEBUG] [Thread-16617] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:36:12.191 [DEBUG] [Thread-16617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:36:12.191 [DEBUG] [Thread-16617] [transport.py] [_log()] Compression: none
2026-04-15T09:36:12.191 [DEBUG] [Thread-16617] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:36:12.248 [DEBUG] [Thread-16617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:36:12.249 [DEBUG] [Thread-16617] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:36:12.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:36:12.249 [DEBUG] [Thread-16617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:36:12.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:36:12.309 [DEBUG] [Thread-16617] [transport.py] [_log()] userauth is OK
2026-04-15T09:36:12.309 [DEBUG] [Thread-16617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:36:12.310 [DEBUG] [Thread-16617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:36:12.310 [DEBUG] [Thread-16617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:36:12.310 [DEBUG] [Thread-16617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:36:12.341 [INFO] [Thread-16617] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:36:12.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:36:12.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:36:12.623 [DEBUG] [Thread-16619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:36:13.221 [DEBUG] [Thread-16617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:36:13.222 [DEBUG] [Thread-16617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:36:13.269 [DEBUG] [Thread-16617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:36:13.269 [DEBUG] [Thread-16617] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:36:13.278 [DEBUG] [Thread-16617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:36:13.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:36:13.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')
2026-04-15T09:36:13.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
2026-04-15T09:36:13.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:36:13.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:36:13.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:36:13.315 [DEBUG] [Thread-16617] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:36:22.128 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:36:22.129 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:36:27.665 [DEBUG] [Thread-16620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:36:42.697 [DEBUG] [Thread-16621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:36:43.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:36:43.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:36:43.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
2026-04-15T09:36:44.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 36, 25), 0.168355, 98.6824, 0.0, 13.5875, 9.0746, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:36:44.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:36:25
2026-04-15T09:36:44.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:36:45.431 [DEBUG] [Thread-16622] [transport.py] [_log()] starting thread (client mode): 0xee904f40
2026-04-15T09:36:45.431 [DEBUG] [Thread-16622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:36:45.451 [DEBUG] [Thread-16622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:36:45.451 [INFO] [Thread-16622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:36:45.454 [DEBUG] [Thread-16622] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:36:45.454 [DEBUG] [Thread-16622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:36:45.454 [DEBUG] [Thread-16622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:36:45.454 [DEBUG] [Thread-16622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:36:45.454 [DEBUG] [Thread-16622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:36:45.454 [DEBUG] [Thread-16622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:36:45.455 [DEBUG] [Thread-16622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:36:45.455 [DEBUG] [Thread-16622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:36:45.455 [DEBUG] [Thread-16622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:36:45.455 [DEBUG] [Thread-16622] [transport.py] [_log()] client lang: <none>
2026-04-15T09:36:45.455 [DEBUG] [Thread-16622] [transport.py] [_log()] server lang: <none>
2026-04-15T09:36:45.455 [DEBUG] [Thread-16622] [transport.py] [_log()] kex follows: False
2026-04-15T09:36:45.455 [DEBUG] [Thread-16622] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:36:45.455 [DEBUG] [Thread-16622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:36:45.455 [DEBUG] [Thread-16622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:36:45.455 [DEBUG] [Thread-16622] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:36:45.455 [DEBUG] [Thread-16622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:36:45.455 [DEBUG] [Thread-16622] [transport.py] [_log()] Compression: none
2026-04-15T09:36:45.455 [DEBUG] [Thread-16622] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:36:45.472 [DEBUG] [Thread-16622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:36:45.473 [DEBUG] [Thread-16622] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:36:45.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:36:45.473 [DEBUG] [Thread-16622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:36:45.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:36:45.474 [DEBUG] [Thread-16622] [transport.py] [_log()] userauth is OK
2026-04-15T09:36:45.474 [DEBUG] [Thread-16622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:36:45.474 [DEBUG] [Thread-16622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:36:45.475 [DEBUG] [Thread-16622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:36:45.475 [DEBUG] [Thread-16622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:36:45.488 [INFO] [Thread-16622] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:36:45.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:36:46.211 [DEBUG] [Thread-16622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:36:46.211 [DEBUG] [Thread-16622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:36:46.212 [DEBUG] [Thread-16622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:36:46.251 [DEBUG] [Thread-16622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:36:46.252 [DEBUG] [Thread-16622] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:36:46.253 [DEBUG] [Thread-16622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:36:46.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:36:46.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:36:46.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:36:46.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:36:46.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:36:46.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:36:46.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:36:46.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:36:46.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:36:46.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.316450 -999.00   +8.90   9.69     95   +8.30 1 3 1 3 1   887    0 0.87 10.84 ----- 9.7 9.7 290.6 19.2 12.1 -3.3 11.7 -2.6 10.9 -2.1 11.4 -2.0
2026-04-15T09:36:46.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:36:46.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:36:46.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.316450
2026-04-15T09:36:46.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:36:46.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:36:46.264 [DEBUG] [Thread-16622] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:36:46.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:36:46.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:36:46.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:36:46.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:36:25', tmtdew=0.168355, humidity=98.6824, cloud=0.0, wind=13.5875, temperature=9.0746, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:35:41.280', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:36:46.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:36:46.487 [DEBUG] [Thread-16625] [transport.py] [_log()] starting thread (client mode): 0xee9070a0
2026-04-15T09:36:46.487 [DEBUG] [Thread-16625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:36:46.506 [DEBUG] [Thread-16625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:36:46.506 [INFO] [Thread-16625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:36:46.514 [DEBUG] [Thread-16625] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:36:46.514 [DEBUG] [Thread-16625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:36:46.514 [DEBUG] [Thread-16625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:36:46.514 [DEBUG] [Thread-16625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:36:46.514 [DEBUG] [Thread-16625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:36:46.514 [DEBUG] [Thread-16625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:36:46.514 [DEBUG] [Thread-16625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:36:46.514 [DEBUG] [Thread-16625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:36:46.514 [DEBUG] [Thread-16625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:36:46.514 [DEBUG] [Thread-16625] [transport.py] [_log()] client lang: <none>
2026-04-15T09:36:46.515 [DEBUG] [Thread-16625] [transport.py] [_log()] server lang: <none>
2026-04-15T09:36:46.515 [DEBUG] [Thread-16625] [transport.py] [_log()] kex follows: False
2026-04-15T09:36:46.515 [DEBUG] [Thread-16625] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:36:46.515 [DEBUG] [Thread-16625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:36:46.515 [DEBUG] [Thread-16625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:36:46.515 [DEBUG] [Thread-16625] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:36:46.515 [DEBUG] [Thread-16625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:36:46.515 [DEBUG] [Thread-16625] [transport.py] [_log()] Compression: none
2026-04-15T09:36:46.515 [DEBUG] [Thread-16625] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:36:46.573 [DEBUG] [Thread-16625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:36:46.573 [DEBUG] [Thread-16625] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:36:46.574 [DEBUG] [Thread-16625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:36:46.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:36:46.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:36:46.629 [DEBUG] [Thread-16625] [transport.py] [_log()] userauth is OK
2026-04-15T09:36:46.630 [DEBUG] [Thread-16625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:36:46.630 [DEBUG] [Thread-16625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:36:46.630 [DEBUG] [Thread-16625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:36:46.630 [DEBUG] [Thread-16625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:36:46.653 [INFO] [Thread-16625] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:36:46.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:36:46.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:36:47.507 [DEBUG] [Thread-16625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:36:47.507 [DEBUG] [Thread-16625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:36:47.555 [DEBUG] [Thread-16625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:36:47.555 [DEBUG] [Thread-16625] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:36:47.564 [DEBUG] [Thread-16625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:36:47.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:36:47.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')
2026-04-15T09:36:47.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
2026-04-15T09:36:47.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:36:47.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:36:47.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:36:47.598 [DEBUG] [Thread-16625] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:36:56.733 [DEBUG] [Thread-16627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:36:57.729 [DEBUG] [Thread-16628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:37:12.773 [DEBUG] [Thread-16629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:37:17.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:37:17.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:37:17.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
2026-04-15T09:37:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 37, 1), 0.17341, 98.6492, 0.0, 16.1813, 9.15777, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:37:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:37:01
2026-04-15T09:37:19.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:37:19.749 [DEBUG] [Thread-16630] [transport.py] [_log()] starting thread (client mode): 0xf13e0250
2026-04-15T09:37:19.750 [DEBUG] [Thread-16630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:37:19.768 [DEBUG] [Thread-16630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:37:19.768 [INFO] [Thread-16630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:37:19.771 [DEBUG] [Thread-16630] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:37:19.772 [DEBUG] [Thread-16630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:37:19.772 [DEBUG] [Thread-16630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:37:19.772 [DEBUG] [Thread-16630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:37:19.772 [DEBUG] [Thread-16630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:37:19.772 [DEBUG] [Thread-16630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:37:19.772 [DEBUG] [Thread-16630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:37:19.772 [DEBUG] [Thread-16630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:37:19.772 [DEBUG] [Thread-16630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:37:19.772 [DEBUG] [Thread-16630] [transport.py] [_log()] client lang: <none>
2026-04-15T09:37:19.772 [DEBUG] [Thread-16630] [transport.py] [_log()] server lang: <none>
2026-04-15T09:37:19.772 [DEBUG] [Thread-16630] [transport.py] [_log()] kex follows: False
2026-04-15T09:37:19.772 [DEBUG] [Thread-16630] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:37:19.773 [DEBUG] [Thread-16630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:37:19.773 [DEBUG] [Thread-16630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:37:19.773 [DEBUG] [Thread-16630] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:37:19.773 [DEBUG] [Thread-16630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:37:19.773 [DEBUG] [Thread-16630] [transport.py] [_log()] Compression: none
2026-04-15T09:37:19.773 [DEBUG] [Thread-16630] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:37:19.790 [DEBUG] [Thread-16630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:37:19.791 [DEBUG] [Thread-16630] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:37:19.791 [DEBUG] [Thread-16630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:37:19.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:37:19.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:37:19.792 [DEBUG] [Thread-16630] [transport.py] [_log()] userauth is OK
2026-04-15T09:37:19.792 [DEBUG] [Thread-16630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:37:19.793 [DEBUG] [Thread-16630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:37:19.793 [DEBUG] [Thread-16630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:37:19.793 [DEBUG] [Thread-16630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:37:19.810 [INFO] [Thread-16630] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:37:19.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:37:20.389 [DEBUG] [Thread-16630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:37:20.390 [DEBUG] [Thread-16630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:37:20.390 [DEBUG] [Thread-16630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:37:20.430 [DEBUG] [Thread-16630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:37:20.430 [DEBUG] [Thread-16630] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:37:20.433 [DEBUG] [Thread-16630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:37:20.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:37:20.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:37:20.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:37:20.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:37:20.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:37:20.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:37:20.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:37:20.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:37:20.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:37:20.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.317492 -999.00   +8.90  13.02     95   +8.30 1 3 1 3 1   887    0 0.88 11.38 ----- 13.0 13.0 276.2 15.4 12.0 -3.2 11.7 -2.6 10.8 -1.5 11.3 -1.7
2026-04-15T09:37:20.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:37:20.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:37:20.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.317492
2026-04-15T09:37:20.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:37:20.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:37:20.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:37:20.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:37:20.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:37:20.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:37:01', tmtdew=0.17341, humidity=98.6492, cloud=0.0, wind=16.1813, temperature=9.15777, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:37:11.309', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:37:20.454 [DEBUG] [Thread-16630] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:37:20.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:37:20.720 [DEBUG] [Thread-16633] [transport.py] [_log()] starting thread (client mode): 0xf13e2ec0
2026-04-15T09:37:20.720 [DEBUG] [Thread-16633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:37:20.742 [DEBUG] [Thread-16633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:37:20.742 [INFO] [Thread-16633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:37:20.756 [DEBUG] [Thread-16633] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:37:20.756 [DEBUG] [Thread-16633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:37:20.756 [DEBUG] [Thread-16633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:37:20.757 [DEBUG] [Thread-16633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:37:20.757 [DEBUG] [Thread-16633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:37:20.757 [DEBUG] [Thread-16633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:37:20.757 [DEBUG] [Thread-16633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:37:20.757 [DEBUG] [Thread-16633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:37:20.757 [DEBUG] [Thread-16633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:37:20.757 [DEBUG] [Thread-16633] [transport.py] [_log()] client lang: <none>
2026-04-15T09:37:20.757 [DEBUG] [Thread-16633] [transport.py] [_log()] server lang: <none>
2026-04-15T09:37:20.757 [DEBUG] [Thread-16633] [transport.py] [_log()] kex follows: False
2026-04-15T09:37:20.757 [DEBUG] [Thread-16633] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:37:20.757 [DEBUG] [Thread-16633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:37:20.758 [DEBUG] [Thread-16633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:37:20.758 [DEBUG] [Thread-16633] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:37:20.758 [DEBUG] [Thread-16633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:37:20.758 [DEBUG] [Thread-16633] [transport.py] [_log()] Compression: none
2026-04-15T09:37:20.758 [DEBUG] [Thread-16633] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:37:20.820 [DEBUG] [Thread-16633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:37:20.820 [DEBUG] [Thread-16633] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:37:20.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:37:20.821 [DEBUG] [Thread-16633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:37:20.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:37:20.893 [DEBUG] [Thread-16633] [transport.py] [_log()] userauth is OK
2026-04-15T09:37:20.893 [DEBUG] [Thread-16633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:37:20.893 [DEBUG] [Thread-16633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:37:20.893 [DEBUG] [Thread-16633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:37:20.893 [DEBUG] [Thread-16633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:37:20.927 [INFO] [Thread-16633] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:37:20.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:37:20.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:37:21.758 [DEBUG] [Thread-16633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:37:21.758 [DEBUG] [Thread-16633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:37:21.806 [DEBUG] [Thread-16633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:37:21.806 [DEBUG] [Thread-16633] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:37:21.815 [DEBUG] [Thread-16633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:37:21.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:37:21.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')
2026-04-15T09:37:21.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
2026-04-15T09:37:21.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:37:21.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:37:21.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:37:21.850 [DEBUG] [Thread-16633] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:37:22.268 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:37:22.270 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:37:27.804 [DEBUG] [Thread-16635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:37:42.848 [DEBUG] [Thread-16636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:37:51.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:37:51.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:37:51.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
2026-04-15T09:37:53.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 37, 36), 0.24671, 98.2987, 0.0, 14.1156, 9.64936, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:37:53.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:37:36
2026-04-15T09:37:53.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:37:53.991 [DEBUG] [Thread-16637] [transport.py] [_log()] starting thread (client mode): 0xf13c8490
2026-04-15T09:37:53.991 [DEBUG] [Thread-16637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:37:54.013 [DEBUG] [Thread-16637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:37:54.013 [INFO] [Thread-16637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:37:54.016 [DEBUG] [Thread-16637] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:37:54.016 [DEBUG] [Thread-16637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:37:54.016 [DEBUG] [Thread-16637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:37:54.017 [DEBUG] [Thread-16637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:37:54.017 [DEBUG] [Thread-16637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:37:54.017 [DEBUG] [Thread-16637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:37:54.017 [DEBUG] [Thread-16637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:37:54.017 [DEBUG] [Thread-16637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:37:54.017 [DEBUG] [Thread-16637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:37:54.017 [DEBUG] [Thread-16637] [transport.py] [_log()] client lang: <none>
2026-04-15T09:37:54.017 [DEBUG] [Thread-16637] [transport.py] [_log()] server lang: <none>
2026-04-15T09:37:54.017 [DEBUG] [Thread-16637] [transport.py] [_log()] kex follows: False
2026-04-15T09:37:54.017 [DEBUG] [Thread-16637] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:37:54.017 [DEBUG] [Thread-16637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:37:54.018 [DEBUG] [Thread-16637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:37:54.018 [DEBUG] [Thread-16637] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:37:54.018 [DEBUG] [Thread-16637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:37:54.018 [DEBUG] [Thread-16637] [transport.py] [_log()] Compression: none
2026-04-15T09:37:54.018 [DEBUG] [Thread-16637] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:37:54.027 [DEBUG] [Thread-16637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:37:54.028 [DEBUG] [Thread-16637] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:37:54.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:37:54.028 [DEBUG] [Thread-16637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:37:54.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:37:54.029 [DEBUG] [Thread-16637] [transport.py] [_log()] userauth is OK
2026-04-15T09:37:54.030 [DEBUG] [Thread-16637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:37:54.030 [DEBUG] [Thread-16637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:37:54.030 [DEBUG] [Thread-16637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:37:54.030 [DEBUG] [Thread-16637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:37:54.048 [INFO] [Thread-16637] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:37:54.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:37:54.665 [DEBUG] [Thread-16637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:37:54.665 [DEBUG] [Thread-16637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:37:54.666 [DEBUG] [Thread-16637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:37:54.706 [DEBUG] [Thread-16637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:37:54.706 [DEBUG] [Thread-16637] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:37:54.709 [DEBUG] [Thread-16637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:37:54.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:37:54.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:37:54.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:37:54.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:37:54.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:37:54.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:37:54.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:37:54.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:37:54.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:37:54.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.317839 -999.00   +9.00  11.97     96   +8.40 1 3 1 3 1   887    0 0.88 11.13 ----- 12.0 12.0 277.6 15.6 11.9 -3.1 11.6 -2.4 10.8 -3.4 11.3 -1.7
2026-04-15T09:37:54.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:37:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:37:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.317839
2026-04-15T09:37:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:37:54.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:37:54.734 [DEBUG] [Thread-16637] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:37:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:37:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:37:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:37:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:37:36', tmtdew=0.24671, humidity=98.2987, cloud=0.0, wind=14.1156, temperature=9.64936, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:37:41.290', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:37:54.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:37:56.822 [DEBUG] [Thread-16640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:37:57.880 [DEBUG] [Thread-16641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:38:12.924 [DEBUG] [Thread-16642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:38:22.410 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:38:22.411 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:38:27.955 [DEBUG] [Thread-16643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:38:42.986 [DEBUG] [Thread-16644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:38:56.912 [DEBUG] [Thread-16645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:38:58.016 [DEBUG] [Thread-16646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:39:13.045 [DEBUG] [Thread-16647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:39:22.553 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:39:22.554 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:39:28.077 [DEBUG] [Thread-16648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:39:43.109 [DEBUG] [Thread-16649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:39:57.005 [DEBUG] [Thread-16650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:39:58.140 [DEBUG] [Thread-16651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:40:09.482 [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
2026-04-15T09:40:13.171 [DEBUG] [Thread-16652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:40:22.696 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:40:22.697 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:40:28.203 [DEBUG] [Thread-16653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:40:39.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:40:39.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:40:39.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
2026-04-15T09:40:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 40, 33), 0.24187, 98.3309, 0.0, 18.0317, 9.68194, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:40:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:40:33
2026-04-15T09:40:41.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:40:41.613 [DEBUG] [Thread-16654] [transport.py] [_log()] starting thread (client mode): 0xf13cbeb0
2026-04-15T09:40:41.613 [DEBUG] [Thread-16654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:40:41.637 [DEBUG] [Thread-16654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:40:41.638 [INFO] [Thread-16654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:40:41.639 [DEBUG] [Thread-16654] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:40:41.640 [DEBUG] [Thread-16654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:40:41.640 [DEBUG] [Thread-16654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:40:41.640 [DEBUG] [Thread-16654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:40:41.640 [DEBUG] [Thread-16654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:40:41.640 [DEBUG] [Thread-16654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:40:41.640 [DEBUG] [Thread-16654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:40:41.640 [DEBUG] [Thread-16654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:40:41.640 [DEBUG] [Thread-16654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:40:41.640 [DEBUG] [Thread-16654] [transport.py] [_log()] client lang: <none>
2026-04-15T09:40:41.640 [DEBUG] [Thread-16654] [transport.py] [_log()] server lang: <none>
2026-04-15T09:40:41.641 [DEBUG] [Thread-16654] [transport.py] [_log()] kex follows: False
2026-04-15T09:40:41.641 [DEBUG] [Thread-16654] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:40:41.641 [DEBUG] [Thread-16654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:40:41.641 [DEBUG] [Thread-16654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:40:41.641 [DEBUG] [Thread-16654] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:40:41.641 [DEBUG] [Thread-16654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:40:41.641 [DEBUG] [Thread-16654] [transport.py] [_log()] Compression: none
2026-04-15T09:40:41.641 [DEBUG] [Thread-16654] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:40:41.652 [DEBUG] [Thread-16654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:40:41.653 [DEBUG] [Thread-16654] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:40:41.653 [DEBUG] [Thread-16654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:40:41.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:40:41.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:40:41.654 [DEBUG] [Thread-16654] [transport.py] [_log()] userauth is OK
2026-04-15T09:40:41.654 [DEBUG] [Thread-16654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:40:41.654 [DEBUG] [Thread-16654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:40:41.655 [DEBUG] [Thread-16654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:40:41.655 [DEBUG] [Thread-16654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:40:41.689 [INFO] [Thread-16654] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:40:41.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:40:42.501 [DEBUG] [Thread-16654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:40:42.501 [DEBUG] [Thread-16654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:40:42.502 [DEBUG] [Thread-16654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:40:42.542 [DEBUG] [Thread-16654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:40:42.542 [DEBUG] [Thread-16654] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:40:42.545 [DEBUG] [Thread-16654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:40:42.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:40:42.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:40:42.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:40:42.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:40:42.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:40:42.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:40:42.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:40:42.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:40:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:40:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.319228 -999.00   +9.00  15.62     96   +8.50 1 3 1 3 1   887    0 0.92 11.56 ----- 15.6 15.6 284.6 17.6 11.9 -2.9 11.6 -2.6 10.8 -2.1 11.3 -1.8
2026-04-15T09:40:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:40:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:40:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.319228
2026-04-15T09:40:42.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:40:42.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:40:42.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:40:42.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:40:42.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:40:42.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:40:33', tmtdew=0.24187, humidity=98.3309, cloud=0.0, wind=18.0317, temperature=9.68194, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:39:41.299', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:40:42.569 [DEBUG] [Thread-16654] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:40:42.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:40:42.796 [DEBUG] [Thread-16657] [transport.py] [_log()] starting thread (client mode): 0xee988dc0
2026-04-15T09:40:42.797 [DEBUG] [Thread-16657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:40:42.810 [DEBUG] [Thread-16657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:40:42.811 [INFO] [Thread-16657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:40:42.818 [DEBUG] [Thread-16657] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:40:42.818 [DEBUG] [Thread-16657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:40:42.818 [DEBUG] [Thread-16657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:40:42.818 [DEBUG] [Thread-16657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:40:42.818 [DEBUG] [Thread-16657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:40:42.818 [DEBUG] [Thread-16657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:40:42.818 [DEBUG] [Thread-16657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:40:42.818 [DEBUG] [Thread-16657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:40:42.818 [DEBUG] [Thread-16657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:40:42.819 [DEBUG] [Thread-16657] [transport.py] [_log()] client lang: <none>
2026-04-15T09:40:42.819 [DEBUG] [Thread-16657] [transport.py] [_log()] server lang: <none>
2026-04-15T09:40:42.819 [DEBUG] [Thread-16657] [transport.py] [_log()] kex follows: False
2026-04-15T09:40:42.819 [DEBUG] [Thread-16657] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:40:42.819 [DEBUG] [Thread-16657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:40:42.819 [DEBUG] [Thread-16657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:40:42.819 [DEBUG] [Thread-16657] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:40:42.819 [DEBUG] [Thread-16657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:40:42.819 [DEBUG] [Thread-16657] [transport.py] [_log()] Compression: none
2026-04-15T09:40:42.819 [DEBUG] [Thread-16657] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:40:42.875 [DEBUG] [Thread-16657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:40:42.876 [DEBUG] [Thread-16657] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:40:42.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:40:42.876 [DEBUG] [Thread-16657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:40:42.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:40:42.932 [DEBUG] [Thread-16657] [transport.py] [_log()] userauth is OK
2026-04-15T09:40:42.932 [DEBUG] [Thread-16657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:40:42.933 [DEBUG] [Thread-16657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:40:42.933 [DEBUG] [Thread-16657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:40:42.933 [DEBUG] [Thread-16657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:40:42.958 [INFO] [Thread-16657] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:40:42.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:40:42.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:40:43.235 [DEBUG] [Thread-16659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:40:43.821 [DEBUG] [Thread-16657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:40:43.821 [DEBUG] [Thread-16657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:40:43.869 [DEBUG] [Thread-16657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:40:43.869 [DEBUG] [Thread-16657] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:40:43.878 [DEBUG] [Thread-16657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:40:43.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:40:43.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')
2026-04-15T09:40:43.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
2026-04-15T09:40:43.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:40:43.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:40:43.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:40:43.913 [DEBUG] [Thread-16657] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:40:57.111 [DEBUG] [Thread-16660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:40:58.280 [DEBUG] [Thread-16661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:41:13.312 [DEBUG] [Thread-16662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:41:13.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:41:13.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:41:13.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
2026-04-15T09:41:15.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 40, 33), 0.24187, 98.3309, 0.0, 18.0317, 9.68194, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:41:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:40:33
2026-04-15T09:41:15.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:41:16.163 [DEBUG] [Thread-16663] [transport.py] [_log()] starting thread (client mode): 0xf13ee2f0
2026-04-15T09:41:16.163 [DEBUG] [Thread-16663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:41:16.183 [DEBUG] [Thread-16663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:41:16.183 [INFO] [Thread-16663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:41:16.186 [DEBUG] [Thread-16663] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:41:16.186 [DEBUG] [Thread-16663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:41:16.186 [DEBUG] [Thread-16663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:41:16.186 [DEBUG] [Thread-16663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:41:16.186 [DEBUG] [Thread-16663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:41:16.186 [DEBUG] [Thread-16663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:41:16.186 [DEBUG] [Thread-16663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:41:16.186 [DEBUG] [Thread-16663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:41:16.187 [DEBUG] [Thread-16663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:41:16.187 [DEBUG] [Thread-16663] [transport.py] [_log()] client lang: <none>
2026-04-15T09:41:16.187 [DEBUG] [Thread-16663] [transport.py] [_log()] server lang: <none>
2026-04-15T09:41:16.187 [DEBUG] [Thread-16663] [transport.py] [_log()] kex follows: False
2026-04-15T09:41:16.187 [DEBUG] [Thread-16663] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:41:16.187 [DEBUG] [Thread-16663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:41:16.187 [DEBUG] [Thread-16663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:41:16.187 [DEBUG] [Thread-16663] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:41:16.187 [DEBUG] [Thread-16663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:41:16.187 [DEBUG] [Thread-16663] [transport.py] [_log()] Compression: none
2026-04-15T09:41:16.187 [DEBUG] [Thread-16663] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:41:16.201 [DEBUG] [Thread-16663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:41:16.202 [DEBUG] [Thread-16663] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:41:16.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:41:16.202 [DEBUG] [Thread-16663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:41:16.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:41:16.203 [DEBUG] [Thread-16663] [transport.py] [_log()] userauth is OK
2026-04-15T09:41:16.203 [DEBUG] [Thread-16663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:41:16.204 [DEBUG] [Thread-16663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:41:16.204 [DEBUG] [Thread-16663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:41:16.204 [DEBUG] [Thread-16663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:41:16.223 [INFO] [Thread-16663] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:41:16.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:41:17.019 [DEBUG] [Thread-16663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:41:17.019 [DEBUG] [Thread-16663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:41:17.020 [DEBUG] [Thread-16663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:41:17.060 [DEBUG] [Thread-16663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:41:17.060 [DEBUG] [Thread-16663] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:41:17.063 [DEBUG] [Thread-16663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:41:17.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:41:17.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:41:17.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:41:17.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:41:17.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:41:17.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:41:17.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:41:17.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:41:17.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:41:17.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.319922 -999.00   +9.10  13.13     96   +8.50 1 3 1 3 1   887    0 0.93 12.27 ----- 13.1 13.1 300.6 15.6 11.9 -2.7 11.6 -2.3 10.9 -1.6 11.3 -1.8
2026-04-15T09:41:17.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:41:17.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:41:17.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.319922
2026-04-15T09:41:17.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:41:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:41:17.089 [DEBUG] [Thread-16663] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:41:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:41:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:41:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:41:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:40:33', tmtdew=0.24187, humidity=98.3309, cloud=0.0, wind=18.0317, temperature=9.68194, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:40:41.261', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:41:17.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:41:17.340 [DEBUG] [Thread-16666] [transport.py] [_log()] starting thread (client mode): 0xf13c8ee0
2026-04-15T09:41:17.340 [DEBUG] [Thread-16666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:41:17.356 [DEBUG] [Thread-16666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:41:17.357 [INFO] [Thread-16666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:41:17.364 [DEBUG] [Thread-16666] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:41:17.364 [DEBUG] [Thread-16666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:41:17.364 [DEBUG] [Thread-16666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:41:17.364 [DEBUG] [Thread-16666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:41:17.364 [DEBUG] [Thread-16666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:41:17.364 [DEBUG] [Thread-16666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:41:17.364 [DEBUG] [Thread-16666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:41:17.364 [DEBUG] [Thread-16666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:41:17.364 [DEBUG] [Thread-16666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:41:17.365 [DEBUG] [Thread-16666] [transport.py] [_log()] client lang: <none>
2026-04-15T09:41:17.365 [DEBUG] [Thread-16666] [transport.py] [_log()] server lang: <none>
2026-04-15T09:41:17.365 [DEBUG] [Thread-16666] [transport.py] [_log()] kex follows: False
2026-04-15T09:41:17.365 [DEBUG] [Thread-16666] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:41:17.365 [DEBUG] [Thread-16666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:41:17.365 [DEBUG] [Thread-16666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:41:17.365 [DEBUG] [Thread-16666] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:41:17.365 [DEBUG] [Thread-16666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:41:17.365 [DEBUG] [Thread-16666] [transport.py] [_log()] Compression: none
2026-04-15T09:41:17.365 [DEBUG] [Thread-16666] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:41:17.423 [DEBUG] [Thread-16666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:41:17.424 [DEBUG] [Thread-16666] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:41:17.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:41:17.424 [DEBUG] [Thread-16666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:41:17.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:41:17.481 [DEBUG] [Thread-16666] [transport.py] [_log()] userauth is OK
2026-04-15T09:41:17.481 [DEBUG] [Thread-16666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:41:17.481 [DEBUG] [Thread-16666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:41:17.481 [DEBUG] [Thread-16666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:41:17.482 [DEBUG] [Thread-16666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:41:17.509 [INFO] [Thread-16666] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:41:17.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:41:17.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:41:18.335 [DEBUG] [Thread-16666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:41:18.335 [DEBUG] [Thread-16666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:41:18.383 [DEBUG] [Thread-16666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:41:18.383 [DEBUG] [Thread-16666] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:41:18.392 [DEBUG] [Thread-16666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:41:18.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:41:18.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')
2026-04-15T09:41:18.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
2026-04-15T09:41:18.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:41:18.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:41:18.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:41:18.423 [DEBUG] [Thread-16666] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:41:22.838 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:41:22.839 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:41:28.344 [DEBUG] [Thread-16668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:41:43.387 [DEBUG] [Thread-16669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:41:48.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:41:48.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:41:48.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
2026-04-15T09:41:49.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 41, 9), 0.17586, 98.6323, 0.0, 15.0692, 8.95804, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:41:49.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:41:09
2026-04-15T09:41:50.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:41:50.594 [DEBUG] [Thread-16670] [transport.py] [_log()] starting thread (client mode): 0xf13cac80
2026-04-15T09:41:50.594 [DEBUG] [Thread-16670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:41:50.614 [DEBUG] [Thread-16670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:41:50.614 [INFO] [Thread-16670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:41:50.617 [DEBUG] [Thread-16670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:41:50.617 [DEBUG] [Thread-16670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:41:50.617 [DEBUG] [Thread-16670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:41:50.618 [DEBUG] [Thread-16670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:41:50.618 [DEBUG] [Thread-16670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:41:50.618 [DEBUG] [Thread-16670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:41:50.618 [DEBUG] [Thread-16670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:41:50.618 [DEBUG] [Thread-16670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:41:50.618 [DEBUG] [Thread-16670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:41:50.618 [DEBUG] [Thread-16670] [transport.py] [_log()] client lang: <none>
2026-04-15T09:41:50.618 [DEBUG] [Thread-16670] [transport.py] [_log()] server lang: <none>
2026-04-15T09:41:50.618 [DEBUG] [Thread-16670] [transport.py] [_log()] kex follows: False
2026-04-15T09:41:50.618 [DEBUG] [Thread-16670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:41:50.618 [DEBUG] [Thread-16670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:41:50.619 [DEBUG] [Thread-16670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:41:50.619 [DEBUG] [Thread-16670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:41:50.619 [DEBUG] [Thread-16670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:41:50.619 [DEBUG] [Thread-16670] [transport.py] [_log()] Compression: none
2026-04-15T09:41:50.619 [DEBUG] [Thread-16670] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:41:50.635 [DEBUG] [Thread-16670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:41:50.635 [DEBUG] [Thread-16670] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:41:50.635 [DEBUG] [Thread-16670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:41:50.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:41:50.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:41:50.637 [DEBUG] [Thread-16670] [transport.py] [_log()] userauth is OK
2026-04-15T09:41:50.637 [DEBUG] [Thread-16670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:41:50.637 [DEBUG] [Thread-16670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:41:50.637 [DEBUG] [Thread-16670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:41:50.637 [DEBUG] [Thread-16670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:41:50.662 [INFO] [Thread-16670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:41:50.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:41:51.467 [DEBUG] [Thread-16670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:41:51.467 [DEBUG] [Thread-16670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:41:51.467 [DEBUG] [Thread-16670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:41:51.508 [DEBUG] [Thread-16670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:41:51.508 [DEBUG] [Thread-16670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:41:51.510 [DEBUG] [Thread-16670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:41:51.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:41:51.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:41:51.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:41:51.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:41:51.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:41:51.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:41:51.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:41:51.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:41:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:41:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.320269 -999.00   +9.10  16.08     95   +8.50 1 3 1 3 1   887    0 0.91 11.52 ----- 16.1 16.1 295.6 18.4 11.9 -2.8 11.6 -2.5 10.9 -2.0 11.3 -1.9
2026-04-15T09:41:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:41:51.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:41:51.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.320269
2026-04-15T09:41:51.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:41:51.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:41:51.534 [DEBUG] [Thread-16670] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:41:51.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:41:51.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:41:51.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:41:51.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:41:09', tmtdew=0.17586, humidity=98.6323, cloud=0.0, wind=15.0692, temperature=8.95804, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:41:11.242', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:41:51.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:41:51.786 [DEBUG] [Thread-16673] [transport.py] [_log()] starting thread (client mode): 0xf13fd990
2026-04-15T09:41:51.786 [DEBUG] [Thread-16673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:41:51.803 [DEBUG] [Thread-16673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:41:51.803 [INFO] [Thread-16673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:41:51.813 [DEBUG] [Thread-16673] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:41:51.813 [DEBUG] [Thread-16673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:41:51.813 [DEBUG] [Thread-16673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:41:51.813 [DEBUG] [Thread-16673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:41:51.814 [DEBUG] [Thread-16673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:41:51.814 [DEBUG] [Thread-16673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:41:51.814 [DEBUG] [Thread-16673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:41:51.814 [DEBUG] [Thread-16673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:41:51.814 [DEBUG] [Thread-16673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:41:51.814 [DEBUG] [Thread-16673] [transport.py] [_log()] client lang: <none>
2026-04-15T09:41:51.814 [DEBUG] [Thread-16673] [transport.py] [_log()] server lang: <none>
2026-04-15T09:41:51.814 [DEBUG] [Thread-16673] [transport.py] [_log()] kex follows: False
2026-04-15T09:41:51.814 [DEBUG] [Thread-16673] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:41:51.814 [DEBUG] [Thread-16673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:41:51.814 [DEBUG] [Thread-16673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:41:51.814 [DEBUG] [Thread-16673] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:41:51.815 [DEBUG] [Thread-16673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:41:51.815 [DEBUG] [Thread-16673] [transport.py] [_log()] Compression: none
2026-04-15T09:41:51.815 [DEBUG] [Thread-16673] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:41:51.868 [DEBUG] [Thread-16673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:41:51.868 [DEBUG] [Thread-16673] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:41:51.869 [DEBUG] [Thread-16673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:41:51.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:41:51.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:41:51.925 [DEBUG] [Thread-16673] [transport.py] [_log()] userauth is OK
2026-04-15T09:41:51.926 [DEBUG] [Thread-16673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:41:51.926 [DEBUG] [Thread-16673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:41:51.926 [DEBUG] [Thread-16673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:41:51.926 [DEBUG] [Thread-16673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:41:51.957 [INFO] [Thread-16673] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:41:51.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:41:51.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:41:52.740 [DEBUG] [Thread-16673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:41:52.740 [DEBUG] [Thread-16673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:41:52.788 [DEBUG] [Thread-16673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:41:52.788 [DEBUG] [Thread-16673] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:41:52.797 [DEBUG] [Thread-16673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:41:52.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:41:52.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T09:41:52.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') -> 00000000
2026-04-15T09:41:52.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:41:52.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:41:52.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:41:52.831 [DEBUG] [Thread-16673] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:41:57.219 [DEBUG] [Thread-16675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:41:58.418 [DEBUG] [Thread-16676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:42:13.462 [DEBUG] [Thread-16677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:42:22.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:42:22.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:42:22.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
2026-04-15T09:42:22.978 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:42:22.979 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:42:24.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 41, 45), 0.2367, 98.3645, 0.0, 16.1618, 9.58266, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:42:24.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:41:45
2026-04-15T09:42:24.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:42:25.133 [DEBUG] [Thread-16678] [transport.py] [_log()] starting thread (client mode): 0xee904d30
2026-04-15T09:42:25.133 [DEBUG] [Thread-16678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:42:25.153 [DEBUG] [Thread-16678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:42:25.153 [INFO] [Thread-16678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:42:25.156 [DEBUG] [Thread-16678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:42:25.157 [DEBUG] [Thread-16678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:42:25.157 [DEBUG] [Thread-16678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:42:25.157 [DEBUG] [Thread-16678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:42:25.157 [DEBUG] [Thread-16678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:42:25.157 [DEBUG] [Thread-16678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:42:25.157 [DEBUG] [Thread-16678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:42:25.157 [DEBUG] [Thread-16678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:42:25.157 [DEBUG] [Thread-16678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:42:25.157 [DEBUG] [Thread-16678] [transport.py] [_log()] client lang: <none>
2026-04-15T09:42:25.157 [DEBUG] [Thread-16678] [transport.py] [_log()] server lang: <none>
2026-04-15T09:42:25.157 [DEBUG] [Thread-16678] [transport.py] [_log()] kex follows: False
2026-04-15T09:42:25.157 [DEBUG] [Thread-16678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:42:25.158 [DEBUG] [Thread-16678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:42:25.158 [DEBUG] [Thread-16678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:42:25.158 [DEBUG] [Thread-16678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:42:25.158 [DEBUG] [Thread-16678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:42:25.158 [DEBUG] [Thread-16678] [transport.py] [_log()] Compression: none
2026-04-15T09:42:25.158 [DEBUG] [Thread-16678] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:42:25.175 [DEBUG] [Thread-16678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:42:25.176 [DEBUG] [Thread-16678] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:42:25.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:42:25.176 [DEBUG] [Thread-16678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:42:25.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:42:25.177 [DEBUG] [Thread-16678] [transport.py] [_log()] userauth is OK
2026-04-15T09:42:25.177 [DEBUG] [Thread-16678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:42:25.177 [DEBUG] [Thread-16678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:42:25.177 [DEBUG] [Thread-16678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:42:25.177 [DEBUG] [Thread-16678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:42:25.213 [INFO] [Thread-16678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:42:25.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:42:26.033 [DEBUG] [Thread-16678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:42:26.033 [DEBUG] [Thread-16678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:42:26.034 [DEBUG] [Thread-16678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:42:26.074 [DEBUG] [Thread-16678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:42:26.074 [DEBUG] [Thread-16678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:42:26.077 [DEBUG] [Thread-16678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:42:26.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:42:26.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:42:26.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:42:26.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:42:26.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:42:26.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:42:26.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:42:26.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:42:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:42:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.320616 -999.00   +9.20  16.52     96   +8.60 1 3 1 3 1   887    0 0.91 11.33 ----- 16.5 16.5 308.6 19.0 11.9 -2.8 11.6 -2.4 11.0 -1.5 11.4 -1.8
2026-04-15T09:42:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:42:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:42:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.320616
2026-04-15T09:42:26.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:42:26.102 [DEBUG] [Thread-16678] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:42:26.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:42:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:42:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:42:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:42:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:41:45', tmtdew=0.2367, humidity=98.3645, cloud=0.0, wind=16.1618, temperature=9.58266, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:41:41.222', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:42:26.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:42:26.365 [DEBUG] [Thread-16681] [transport.py] [_log()] starting thread (client mode): 0xf13ec310
2026-04-15T09:42:26.365 [DEBUG] [Thread-16681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:42:26.379 [DEBUG] [Thread-16681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:42:26.379 [INFO] [Thread-16681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:42:26.386 [DEBUG] [Thread-16681] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:42:26.386 [DEBUG] [Thread-16681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:42:26.387 [DEBUG] [Thread-16681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:42:26.387 [DEBUG] [Thread-16681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:42:26.387 [DEBUG] [Thread-16681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:42:26.387 [DEBUG] [Thread-16681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:42:26.387 [DEBUG] [Thread-16681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:42:26.387 [DEBUG] [Thread-16681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:42:26.387 [DEBUG] [Thread-16681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:42:26.387 [DEBUG] [Thread-16681] [transport.py] [_log()] client lang: <none>
2026-04-15T09:42:26.387 [DEBUG] [Thread-16681] [transport.py] [_log()] server lang: <none>
2026-04-15T09:42:26.387 [DEBUG] [Thread-16681] [transport.py] [_log()] kex follows: False
2026-04-15T09:42:26.387 [DEBUG] [Thread-16681] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:42:26.387 [DEBUG] [Thread-16681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:42:26.387 [DEBUG] [Thread-16681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:42:26.387 [DEBUG] [Thread-16681] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:42:26.388 [DEBUG] [Thread-16681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:42:26.388 [DEBUG] [Thread-16681] [transport.py] [_log()] Compression: none
2026-04-15T09:42:26.388 [DEBUG] [Thread-16681] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:42:26.444 [DEBUG] [Thread-16681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:42:26.444 [DEBUG] [Thread-16681] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:42:26.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:42:26.445 [DEBUG] [Thread-16681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:42:26.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:42:26.501 [DEBUG] [Thread-16681] [transport.py] [_log()] userauth is OK
2026-04-15T09:42:26.501 [DEBUG] [Thread-16681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:42:26.501 [DEBUG] [Thread-16681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:42:26.502 [DEBUG] [Thread-16681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:42:26.502 [DEBUG] [Thread-16681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:42:26.524 [INFO] [Thread-16681] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:42:26.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:42:26.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:42:27.327 [DEBUG] [Thread-16681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:42:27.328 [DEBUG] [Thread-16681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:42:27.376 [DEBUG] [Thread-16681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:42:27.376 [DEBUG] [Thread-16681] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:42:27.385 [DEBUG] [Thread-16681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:42:27.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:42:27.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')
2026-04-15T09:42:27.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
2026-04-15T09:42:27.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:42:27.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:42:27.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:42:27.426 [DEBUG] [Thread-16681] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:42:28.494 [DEBUG] [Thread-16683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:42:43.541 [DEBUG] [Thread-16684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:42:57.319 [DEBUG] [Thread-16685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:42:57.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:42:57.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:42:57.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
2026-04-15T09:42:58.573 [DEBUG] [Thread-16686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:42:58.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 42, 20), 0.175885, 98.6325, 0.0, 17.0978, 9.15792, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:42:58.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:42:20
2026-04-15T09:42:59.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:42:59.589 [DEBUG] [Thread-16687] [transport.py] [_log()] starting thread (client mode): 0xf13ed030
2026-04-15T09:42:59.589 [DEBUG] [Thread-16687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:42:59.609 [DEBUG] [Thread-16687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:42:59.609 [INFO] [Thread-16687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:42:59.612 [DEBUG] [Thread-16687] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:42:59.612 [DEBUG] [Thread-16687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:42:59.612 [DEBUG] [Thread-16687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:42:59.612 [DEBUG] [Thread-16687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:42:59.612 [DEBUG] [Thread-16687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:42:59.612 [DEBUG] [Thread-16687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:42:59.612 [DEBUG] [Thread-16687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:42:59.612 [DEBUG] [Thread-16687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:42:59.612 [DEBUG] [Thread-16687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:42:59.612 [DEBUG] [Thread-16687] [transport.py] [_log()] client lang: <none>
2026-04-15T09:42:59.612 [DEBUG] [Thread-16687] [transport.py] [_log()] server lang: <none>
2026-04-15T09:42:59.612 [DEBUG] [Thread-16687] [transport.py] [_log()] kex follows: False
2026-04-15T09:42:59.612 [DEBUG] [Thread-16687] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:42:59.612 [DEBUG] [Thread-16687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:42:59.613 [DEBUG] [Thread-16687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:42:59.613 [DEBUG] [Thread-16687] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:42:59.613 [DEBUG] [Thread-16687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:42:59.613 [DEBUG] [Thread-16687] [transport.py] [_log()] Compression: none
2026-04-15T09:42:59.613 [DEBUG] [Thread-16687] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:42:59.628 [DEBUG] [Thread-16687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:42:59.628 [DEBUG] [Thread-16687] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:42:59.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:42:59.628 [DEBUG] [Thread-16687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:42:59.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:42:59.629 [DEBUG] [Thread-16687] [transport.py] [_log()] userauth is OK
2026-04-15T09:42:59.629 [DEBUG] [Thread-16687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:42:59.630 [DEBUG] [Thread-16687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:42:59.630 [DEBUG] [Thread-16687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:42:59.630 [DEBUG] [Thread-16687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:42:59.668 [INFO] [Thread-16687] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:42:59.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:43:00.480 [DEBUG] [Thread-16687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:43:00.480 [DEBUG] [Thread-16687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:43:00.480 [DEBUG] [Thread-16687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:43:00.521 [DEBUG] [Thread-16687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:43:00.521 [DEBUG] [Thread-16687] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:43:00.524 [DEBUG] [Thread-16687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:43:00.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:43:00.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:43:00.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:43:00.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:43:00.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:43:00.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:43:00.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:43:00.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:43:00.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:43:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.320964 -999.00   +9.20  18.60     96   +8.60 1 3 1 3 1   887    0 0.91 11.34 ----- 18.6 18.6 288.4 21.7 11.9 -3.0 11.6 -2.4 10.9 -2.1 11.3 -1.9
2026-04-15T09:43:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:43:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:43:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.320964
2026-04-15T09:43:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:43:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:43:00.547 [DEBUG] [Thread-16687] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:43:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:43:00.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:43:00.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:43:00.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:42:20', tmtdew=0.175885, humidity=98.6325, cloud=0.0, wind=17.0978, temperature=9.15792, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:42:11.290', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:43:00.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:43:00.799 [DEBUG] [Thread-16690] [transport.py] [_log()] starting thread (client mode): 0xf13fc2b0
2026-04-15T09:43:00.799 [DEBUG] [Thread-16690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:43:00.818 [DEBUG] [Thread-16690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:43:00.818 [INFO] [Thread-16690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:43:00.826 [DEBUG] [Thread-16690] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:43:00.826 [DEBUG] [Thread-16690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:43:00.826 [DEBUG] [Thread-16690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:43:00.826 [DEBUG] [Thread-16690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:43:00.826 [DEBUG] [Thread-16690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:43:00.826 [DEBUG] [Thread-16690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:43:00.826 [DEBUG] [Thread-16690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:43:00.826 [DEBUG] [Thread-16690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:43:00.826 [DEBUG] [Thread-16690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:43:00.826 [DEBUG] [Thread-16690] [transport.py] [_log()] client lang: <none>
2026-04-15T09:43:00.826 [DEBUG] [Thread-16690] [transport.py] [_log()] server lang: <none>
2026-04-15T09:43:00.826 [DEBUG] [Thread-16690] [transport.py] [_log()] kex follows: False
2026-04-15T09:43:00.827 [DEBUG] [Thread-16690] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:43:00.827 [DEBUG] [Thread-16690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:43:00.827 [DEBUG] [Thread-16690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:43:00.827 [DEBUG] [Thread-16690] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:43:00.827 [DEBUG] [Thread-16690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:43:00.827 [DEBUG] [Thread-16690] [transport.py] [_log()] Compression: none
2026-04-15T09:43:00.827 [DEBUG] [Thread-16690] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:43:00.881 [DEBUG] [Thread-16690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:43:00.882 [DEBUG] [Thread-16690] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:43:00.882 [DEBUG] [Thread-16690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:43:00.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:43:00.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:43:00.938 [DEBUG] [Thread-16690] [transport.py] [_log()] userauth is OK
2026-04-15T09:43:00.938 [DEBUG] [Thread-16690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:43:00.938 [DEBUG] [Thread-16690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:43:00.938 [DEBUG] [Thread-16690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:43:00.939 [DEBUG] [Thread-16690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:43:00.962 [INFO] [Thread-16690] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:43:00.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:43:00.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:43:01.787 [DEBUG] [Thread-16690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:43:01.787 [DEBUG] [Thread-16690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:43:01.837 [DEBUG] [Thread-16690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:43:01.837 [DEBUG] [Thread-16690] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:43:01.846 [DEBUG] [Thread-16690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:43:01.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:43:01.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')
2026-04-15T09:43:01.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
2026-04-15T09:43:01.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:43:01.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:43:01.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:43:01.886 [DEBUG] [Thread-16690] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:43:13.605 [DEBUG] [Thread-16692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:43:23.119 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:43:23.121 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:43:28.650 [DEBUG] [Thread-16693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:43:31.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:43:31.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:43:31.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
2026-04-15T09:43:33.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 42, 56), 0.17585, 98.6322, 0.0, 17.4506, 9.04142, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:43:33.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:42:56
2026-04-15T09:43:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:43:34.089 [DEBUG] [Thread-16694] [transport.py] [_log()] starting thread (client mode): 0xf17c1f30
2026-04-15T09:43:34.089 [DEBUG] [Thread-16694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:43:34.109 [DEBUG] [Thread-16694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:43:34.109 [INFO] [Thread-16694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] client lang: <none>
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] server lang: <none>
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] kex follows: False
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:43:34.113 [DEBUG] [Thread-16694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:43:34.114 [DEBUG] [Thread-16694] [transport.py] [_log()] Compression: none
2026-04-15T09:43:34.114 [DEBUG] [Thread-16694] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:43:34.130 [DEBUG] [Thread-16694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:43:34.131 [DEBUG] [Thread-16694] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:43:34.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:43:34.131 [DEBUG] [Thread-16694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:43:34.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:43:34.132 [DEBUG] [Thread-16694] [transport.py] [_log()] userauth is OK
2026-04-15T09:43:34.132 [DEBUG] [Thread-16694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:43:34.132 [DEBUG] [Thread-16694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:43:34.132 [DEBUG] [Thread-16694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:43:34.132 [DEBUG] [Thread-16694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:43:34.153 [INFO] [Thread-16694] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:43:34.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:43:34.951 [DEBUG] [Thread-16694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:43:34.952 [DEBUG] [Thread-16694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:43:34.952 [DEBUG] [Thread-16694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:43:34.992 [DEBUG] [Thread-16694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:43:34.992 [DEBUG] [Thread-16694] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:43:34.995 [DEBUG] [Thread-16694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:43:35.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:43:35.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:43:35.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:43:35.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:43:35.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:43:35.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:43:35.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:43:35.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:43:35.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:43:35.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.321311 -999.00   +8.90  21.86     95   +8.30 1 3 1 3 1   887    0 0.90 10.80 ----- 21.9 21.9 297.2 23.5 11.9 -3.5 11.6 -3.3 10.9 -2.8 11.3 -2.1
2026-04-15T09:43:35.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:43:35.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:43:35.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.321311
2026-04-15T09:43:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:43:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:43:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:43:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:43:35.021 [DEBUG] [Thread-16694] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:43:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:43:35.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:42:56', tmtdew=0.17585, humidity=98.6322, cloud=0.0, wind=17.4506, temperature=9.04142, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:42:41.270', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:43:35.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:43:35.283 [DEBUG] [Thread-16697] [transport.py] [_log()] starting thread (client mode): 0xee90c160
2026-04-15T09:43:35.283 [DEBUG] [Thread-16697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:43:35.298 [DEBUG] [Thread-16697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:43:35.298 [INFO] [Thread-16697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:43:35.305 [DEBUG] [Thread-16697] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:43:35.305 [DEBUG] [Thread-16697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:43:35.305 [DEBUG] [Thread-16697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:43:35.305 [DEBUG] [Thread-16697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:43:35.306 [DEBUG] [Thread-16697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:43:35.306 [DEBUG] [Thread-16697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:43:35.306 [DEBUG] [Thread-16697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:43:35.306 [DEBUG] [Thread-16697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:43:35.306 [DEBUG] [Thread-16697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:43:35.306 [DEBUG] [Thread-16697] [transport.py] [_log()] client lang: <none>
2026-04-15T09:43:35.306 [DEBUG] [Thread-16697] [transport.py] [_log()] server lang: <none>
2026-04-15T09:43:35.306 [DEBUG] [Thread-16697] [transport.py] [_log()] kex follows: False
2026-04-15T09:43:35.306 [DEBUG] [Thread-16697] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:43:35.306 [DEBUG] [Thread-16697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:43:35.306 [DEBUG] [Thread-16697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:43:35.307 [DEBUG] [Thread-16697] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:43:35.307 [DEBUG] [Thread-16697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:43:35.307 [DEBUG] [Thread-16697] [transport.py] [_log()] Compression: none
2026-04-15T09:43:35.307 [DEBUG] [Thread-16697] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:43:35.362 [DEBUG] [Thread-16697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:43:35.363 [DEBUG] [Thread-16697] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:43:35.363 [DEBUG] [Thread-16697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:43:35.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:43:35.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:43:35.419 [DEBUG] [Thread-16697] [transport.py] [_log()] userauth is OK
2026-04-15T09:43:35.419 [DEBUG] [Thread-16697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:43:35.419 [DEBUG] [Thread-16697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:43:35.420 [DEBUG] [Thread-16697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:43:35.420 [DEBUG] [Thread-16697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:43:35.444 [INFO] [Thread-16697] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:43:35.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:43:35.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:43:36.265 [DEBUG] [Thread-16697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:43:36.265 [DEBUG] [Thread-16697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:43:36.320 [DEBUG] [Thread-16697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:43:36.321 [DEBUG] [Thread-16697] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:43:36.337 [DEBUG] [Thread-16697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:43:36.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:43:36.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')
2026-04-15T09:43:36.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
2026-04-15T09:43:36.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:43:36.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:43:36.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:43:36.403 [DEBUG] [Thread-16697] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:43:43.682 [DEBUG] [Thread-16699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:43:57.406 [DEBUG] [Thread-16700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:43:58.722 [DEBUG] [Thread-16701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:44:06.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:44:06.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:44:06.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
2026-04-15T09:44:07.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 43, 31), 0.168455, 98.682, 0.0, 16.6921, 9.15753, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:44:07.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:43:31
2026-04-15T09:44:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:44:08.545 [DEBUG] [Thread-16702] [transport.py] [_log()] starting thread (client mode): 0xf1366260
2026-04-15T09:44:08.545 [DEBUG] [Thread-16702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:44:08.560 [DEBUG] [Thread-16702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:44:08.560 [INFO] [Thread-16702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:44:08.562 [DEBUG] [Thread-16702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:44:08.562 [DEBUG] [Thread-16702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:44:08.562 [DEBUG] [Thread-16702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:44:08.562 [DEBUG] [Thread-16702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:44:08.562 [DEBUG] [Thread-16702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:44:08.562 [DEBUG] [Thread-16702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:44:08.562 [DEBUG] [Thread-16702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:44:08.562 [DEBUG] [Thread-16702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:44:08.562 [DEBUG] [Thread-16702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:44:08.563 [DEBUG] [Thread-16702] [transport.py] [_log()] client lang: <none>
2026-04-15T09:44:08.563 [DEBUG] [Thread-16702] [transport.py] [_log()] server lang: <none>
2026-04-15T09:44:08.563 [DEBUG] [Thread-16702] [transport.py] [_log()] kex follows: False
2026-04-15T09:44:08.563 [DEBUG] [Thread-16702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:44:08.563 [DEBUG] [Thread-16702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:44:08.563 [DEBUG] [Thread-16702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:44:08.563 [DEBUG] [Thread-16702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:44:08.563 [DEBUG] [Thread-16702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:44:08.563 [DEBUG] [Thread-16702] [transport.py] [_log()] Compression: none
2026-04-15T09:44:08.563 [DEBUG] [Thread-16702] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:44:08.579 [DEBUG] [Thread-16702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:44:08.579 [DEBUG] [Thread-16702] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:44:08.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:44:08.580 [DEBUG] [Thread-16702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:44:08.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:44:08.581 [DEBUG] [Thread-16702] [transport.py] [_log()] userauth is OK
2026-04-15T09:44:08.581 [DEBUG] [Thread-16702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:44:08.581 [DEBUG] [Thread-16702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:44:08.581 [DEBUG] [Thread-16702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:44:08.581 [DEBUG] [Thread-16702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:44:08.604 [INFO] [Thread-16702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:44:08.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:44:09.363 [DEBUG] [Thread-16702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:44:09.363 [DEBUG] [Thread-16702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:44:09.364 [DEBUG] [Thread-16702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:44:09.404 [DEBUG] [Thread-16702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:44:09.404 [DEBUG] [Thread-16702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:44:09.409 [DEBUG] [Thread-16702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:44:09.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:44:09.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:44:09.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:44:09.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:44:09.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:44:09.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:44:09.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:44:09.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:44:09.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:44:09.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.321658 -999.00   +9.00  17.04     96   +8.40 1 3 1 3 1   887    0 0.90 10.60 ----- 17.0 17.0 294.0 20.1 11.9 -3.4 11.5 -3.3 10.9 -2.4 11.3 -2.1
2026-04-15T09:44:09.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:44:09.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:44:09.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.321658
2026-04-15T09:44:09.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:44:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:44:09.433 [DEBUG] [Thread-16702] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:44:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:44:09.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:44:09.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:44:09.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:43:31', tmtdew=0.168455, humidity=98.682, cloud=0.0, wind=16.6921, temperature=9.15753, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:43:11.251', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:44:09.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:44:09.692 [DEBUG] [Thread-16705] [transport.py] [_log()] starting thread (client mode): 0xf1365330
2026-04-15T09:44:09.692 [DEBUG] [Thread-16705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:44:09.708 [DEBUG] [Thread-16705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:44:09.708 [INFO] [Thread-16705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:44:09.718 [DEBUG] [Thread-16705] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:44:09.718 [DEBUG] [Thread-16705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:44:09.718 [DEBUG] [Thread-16705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:44:09.718 [DEBUG] [Thread-16705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:44:09.718 [DEBUG] [Thread-16705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:44:09.718 [DEBUG] [Thread-16705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:44:09.719 [DEBUG] [Thread-16705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:44:09.719 [DEBUG] [Thread-16705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:44:09.719 [DEBUG] [Thread-16705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:44:09.719 [DEBUG] [Thread-16705] [transport.py] [_log()] client lang: <none>
2026-04-15T09:44:09.719 [DEBUG] [Thread-16705] [transport.py] [_log()] server lang: <none>
2026-04-15T09:44:09.719 [DEBUG] [Thread-16705] [transport.py] [_log()] kex follows: False
2026-04-15T09:44:09.719 [DEBUG] [Thread-16705] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:44:09.719 [DEBUG] [Thread-16705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:44:09.719 [DEBUG] [Thread-16705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:44:09.719 [DEBUG] [Thread-16705] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:44:09.719 [DEBUG] [Thread-16705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:44:09.720 [DEBUG] [Thread-16705] [transport.py] [_log()] Compression: none
2026-04-15T09:44:09.720 [DEBUG] [Thread-16705] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:44:09.778 [DEBUG] [Thread-16705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:44:09.778 [DEBUG] [Thread-16705] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:44:09.779 [DEBUG] [Thread-16705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:44:09.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:44:09.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:44:09.834 [DEBUG] [Thread-16705] [transport.py] [_log()] userauth is OK
2026-04-15T09:44:09.835 [DEBUG] [Thread-16705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:44:09.835 [DEBUG] [Thread-16705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:44:09.835 [DEBUG] [Thread-16705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:44:09.835 [DEBUG] [Thread-16705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:44:09.858 [INFO] [Thread-16705] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:44:09.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:44:09.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:44:10.670 [DEBUG] [Thread-16705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:44:10.670 [DEBUG] [Thread-16705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:44:10.718 [DEBUG] [Thread-16705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:44:10.718 [DEBUG] [Thread-16705] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:44:10.727 [DEBUG] [Thread-16705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:44:10.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:44:10.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')
2026-04-15T09:44:10.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
2026-04-15T09:44:10.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:44:10.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:44:10.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:44:10.768 [DEBUG] [Thread-16705] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:44:13.754 [DEBUG] [Thread-16707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:44:23.260 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:44:23.261 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:44:28.798 [DEBUG] [Thread-16708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:44:40.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:44:40.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:44:40.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
2026-04-15T09:44:42.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 44, 7), 0.1759, 98.632, 0.0, 14.4518, 9.05789, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:44:42.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:44:07
2026-04-15T09:44:42.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:44:43.019 [DEBUG] [Thread-16709] [transport.py] [_log()] starting thread (client mode): 0xf1365480
2026-04-15T09:44:43.019 [DEBUG] [Thread-16709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:44:43.038 [DEBUG] [Thread-16709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:44:43.038 [INFO] [Thread-16709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:44:43.041 [DEBUG] [Thread-16709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:44:43.041 [DEBUG] [Thread-16709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:44:43.041 [DEBUG] [Thread-16709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:44:43.042 [DEBUG] [Thread-16709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:44:43.042 [DEBUG] [Thread-16709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:44:43.042 [DEBUG] [Thread-16709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:44:43.042 [DEBUG] [Thread-16709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:44:43.042 [DEBUG] [Thread-16709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:44:43.042 [DEBUG] [Thread-16709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:44:43.042 [DEBUG] [Thread-16709] [transport.py] [_log()] client lang: <none>
2026-04-15T09:44:43.042 [DEBUG] [Thread-16709] [transport.py] [_log()] server lang: <none>
2026-04-15T09:44:43.042 [DEBUG] [Thread-16709] [transport.py] [_log()] kex follows: False
2026-04-15T09:44:43.042 [DEBUG] [Thread-16709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:44:43.042 [DEBUG] [Thread-16709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:44:43.042 [DEBUG] [Thread-16709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:44:43.043 [DEBUG] [Thread-16709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:44:43.043 [DEBUG] [Thread-16709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:44:43.043 [DEBUG] [Thread-16709] [transport.py] [_log()] Compression: none
2026-04-15T09:44:43.043 [DEBUG] [Thread-16709] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:44:43.059 [DEBUG] [Thread-16709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:44:43.059 [DEBUG] [Thread-16709] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:44:43.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:44:43.060 [DEBUG] [Thread-16709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:44:43.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:44:43.062 [DEBUG] [Thread-16709] [transport.py] [_log()] userauth is OK
2026-04-15T09:44:43.063 [DEBUG] [Thread-16709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:44:43.063 [DEBUG] [Thread-16709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:44:43.063 [DEBUG] [Thread-16709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:44:43.063 [DEBUG] [Thread-16709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:44:43.081 [INFO] [Thread-16709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:44:43.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:44:43.797 [DEBUG] [Thread-16709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:44:43.797 [DEBUG] [Thread-16709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:44:43.798 [DEBUG] [Thread-16709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:44:43.829 [DEBUG] [Thread-16711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:44:43.838 [DEBUG] [Thread-16709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:44:43.838 [DEBUG] [Thread-16709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:44:43.840 [DEBUG] [Thread-16709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:44:43.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:44:43.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:44:43.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:44:43.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:44:43.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:44:43.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:44:43.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:44:43.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:44:43.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:44:43.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.322700 -999.00   +9.00  17.37     95   +8.40 1 3 1 3 1   887    0 0.80 7.44 ----- 17.4 17.4 292.2 21.2 12.0 -2.9 11.6 -2.6 11.0 -2.2 11.4 -1.8
2026-04-15T09:44:43.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:44:43.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:44:43.868 [DEBUG] [Thread-16709] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:44:43.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.322700
2026-04-15T09:44:43.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:44:43.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:44:43.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:44:43.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:44:43.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:44:43.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:44:07', tmtdew=0.1759, humidity=98.632, cloud=0.0, wind=14.4518, temperature=9.05789, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:44:41.280', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:44:44.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:44:44.127 [DEBUG] [Thread-16713] [transport.py] [_log()] starting thread (client mode): 0xf1331870
2026-04-15T09:44:44.127 [DEBUG] [Thread-16713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:44:44.142 [DEBUG] [Thread-16713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:44:44.142 [INFO] [Thread-16713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:44:44.149 [DEBUG] [Thread-16713] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:44:44.149 [DEBUG] [Thread-16713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:44:44.149 [DEBUG] [Thread-16713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:44:44.149 [DEBUG] [Thread-16713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:44:44.150 [DEBUG] [Thread-16713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:44:44.150 [DEBUG] [Thread-16713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:44:44.150 [DEBUG] [Thread-16713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:44:44.150 [DEBUG] [Thread-16713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:44:44.150 [DEBUG] [Thread-16713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:44:44.150 [DEBUG] [Thread-16713] [transport.py] [_log()] client lang: <none>
2026-04-15T09:44:44.150 [DEBUG] [Thread-16713] [transport.py] [_log()] server lang: <none>
2026-04-15T09:44:44.150 [DEBUG] [Thread-16713] [transport.py] [_log()] kex follows: False
2026-04-15T09:44:44.150 [DEBUG] [Thread-16713] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:44:44.150 [DEBUG] [Thread-16713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:44:44.150 [DEBUG] [Thread-16713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:44:44.150 [DEBUG] [Thread-16713] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:44:44.151 [DEBUG] [Thread-16713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:44:44.151 [DEBUG] [Thread-16713] [transport.py] [_log()] Compression: none
2026-04-15T09:44:44.151 [DEBUG] [Thread-16713] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:44:44.206 [DEBUG] [Thread-16713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:44:44.207 [DEBUG] [Thread-16713] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:44:44.207 [DEBUG] [Thread-16713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:44:44.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:44:44.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:44:44.264 [DEBUG] [Thread-16713] [transport.py] [_log()] userauth is OK
2026-04-15T09:44:44.264 [DEBUG] [Thread-16713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:44:44.264 [DEBUG] [Thread-16713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:44:44.264 [DEBUG] [Thread-16713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:44:44.265 [DEBUG] [Thread-16713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:44:44.290 [INFO] [Thread-16713] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:44:44.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:44:44.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:44:45.099 [DEBUG] [Thread-16713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:44:45.099 [DEBUG] [Thread-16713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:44:45.147 [DEBUG] [Thread-16713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:44:45.147 [DEBUG] [Thread-16713] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:44:45.158 [DEBUG] [Thread-16713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:44:45.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:44: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')
2026-04-15T09:44:45.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T09:44:45.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:44:45.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:44:45.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:44:45.198 [DEBUG] [Thread-16713] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:44:57.512 [DEBUG] [Thread-16715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:44:58.860 [DEBUG] [Thread-16716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:45:13.906 [DEBUG] [Thread-16717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:45:15.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:45:15.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:45:15.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
2026-04-15T09:45:16.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 44, 42), 0.26171, 98.1977, 0.0, 12.3163, 9.41624, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:45:16.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:44:42
2026-04-15T09:45:16.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:45:17.387 [DEBUG] [Thread-16718] [transport.py] [_log()] starting thread (client mode): 0xf13ff400
2026-04-15T09:45:17.388 [DEBUG] [Thread-16718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:45:17.406 [DEBUG] [Thread-16718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:45:17.406 [INFO] [Thread-16718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:45:17.409 [DEBUG] [Thread-16718] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:45:17.409 [DEBUG] [Thread-16718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:45:17.409 [DEBUG] [Thread-16718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:45:17.409 [DEBUG] [Thread-16718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:45:17.410 [DEBUG] [Thread-16718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:45:17.410 [DEBUG] [Thread-16718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:45:17.410 [DEBUG] [Thread-16718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:45:17.410 [DEBUG] [Thread-16718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:45:17.410 [DEBUG] [Thread-16718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:45:17.410 [DEBUG] [Thread-16718] [transport.py] [_log()] client lang: <none>
2026-04-15T09:45:17.410 [DEBUG] [Thread-16718] [transport.py] [_log()] server lang: <none>
2026-04-15T09:45:17.410 [DEBUG] [Thread-16718] [transport.py] [_log()] kex follows: False
2026-04-15T09:45:17.410 [DEBUG] [Thread-16718] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:45:17.410 [DEBUG] [Thread-16718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:45:17.410 [DEBUG] [Thread-16718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:45:17.410 [DEBUG] [Thread-16718] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:45:17.411 [DEBUG] [Thread-16718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:45:17.411 [DEBUG] [Thread-16718] [transport.py] [_log()] Compression: none
2026-04-15T09:45:17.411 [DEBUG] [Thread-16718] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:45:17.427 [DEBUG] [Thread-16718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:45:17.427 [DEBUG] [Thread-16718] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:45:17.428 [DEBUG] [Thread-16718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:45:17.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:45:17.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:45:17.429 [DEBUG] [Thread-16718] [transport.py] [_log()] userauth is OK
2026-04-15T09:45:17.429 [DEBUG] [Thread-16718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:45:17.429 [DEBUG] [Thread-16718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:45:17.429 [DEBUG] [Thread-16718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:45:17.430 [DEBUG] [Thread-16718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:45:17.464 [INFO] [Thread-16718] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:45:17.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:45:18.226 [DEBUG] [Thread-16718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:45:18.227 [DEBUG] [Thread-16718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:45:18.227 [DEBUG] [Thread-16718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:45:18.268 [DEBUG] [Thread-16718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:45:18.268 [DEBUG] [Thread-16718] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:45:18.271 [DEBUG] [Thread-16718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:45:18.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:45:18.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:45:18.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:45:18.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:45:18.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:45:18.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:45:18.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:45:18.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:45:18.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:45:18.304 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-15T09:45:18.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:44:42', tmtdew=0.26171, humidity=98.1977, cloud=0.0, wind=12.3163, temperature=9.41624, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:45:18.306 [DEBUG] [Thread-16718] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:45:18.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:45:18.566 [DEBUG] [Thread-16721] [transport.py] [_log()] starting thread (client mode): 0xf13e0f70
2026-04-15T09:45:18.566 [DEBUG] [Thread-16721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:45:18.579 [DEBUG] [Thread-16721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:45:18.579 [INFO] [Thread-16721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] client lang: <none>
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] server lang: <none>
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] kex follows: False
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:45:18.587 [DEBUG] [Thread-16721] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:45:18.588 [DEBUG] [Thread-16721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:45:18.588 [DEBUG] [Thread-16721] [transport.py] [_log()] Compression: none
2026-04-15T09:45:18.588 [DEBUG] [Thread-16721] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:45:18.646 [DEBUG] [Thread-16721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:45:18.646 [DEBUG] [Thread-16721] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:45:18.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:45:18.647 [DEBUG] [Thread-16721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:45:18.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:45:18.703 [DEBUG] [Thread-16721] [transport.py] [_log()] userauth is OK
2026-04-15T09:45:18.703 [DEBUG] [Thread-16721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:45:18.703 [DEBUG] [Thread-16721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:45:18.703 [DEBUG] [Thread-16721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:45:18.703 [DEBUG] [Thread-16721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:45:18.721 [INFO] [Thread-16721] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:45:18.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:45:18.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:45:19.543 [DEBUG] [Thread-16721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:45:19.543 [DEBUG] [Thread-16721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:45:19.591 [DEBUG] [Thread-16721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:45:19.591 [DEBUG] [Thread-16721] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:45:19.600 [DEBUG] [Thread-16721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:45:19.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:45:19.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')
2026-04-15T09:45:19.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
2026-04-15T09:45:19.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:45:19.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:45:19.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:45:19.635 [DEBUG] [Thread-16721] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:45:23.401 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:45:23.402 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:45:28.939 [DEBUG] [Thread-16723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:45:43.985 [DEBUG] [Thread-16724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:45:49.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:45:49.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:45:49.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
2026-04-15T09:45:51.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 45, 18), 0.12347, 98.6485, 0.0, 15.034, 9.05755, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:45:51.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:45:18
2026-04-15T09:45:51.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:45:51.905 [DEBUG] [Thread-16725] [transport.py] [_log()] starting thread (client mode): 0xf1365e70
2026-04-15T09:45:51.905 [DEBUG] [Thread-16725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:45:51.924 [DEBUG] [Thread-16725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:45:51.924 [INFO] [Thread-16725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:45:51.927 [DEBUG] [Thread-16725] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:45:51.927 [DEBUG] [Thread-16725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:45:51.927 [DEBUG] [Thread-16725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:45:51.927 [DEBUG] [Thread-16725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:45:51.927 [DEBUG] [Thread-16725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:45:51.927 [DEBUG] [Thread-16725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:45:51.928 [DEBUG] [Thread-16725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:45:51.928 [DEBUG] [Thread-16725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:45:51.928 [DEBUG] [Thread-16725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:45:51.928 [DEBUG] [Thread-16725] [transport.py] [_log()] client lang: <none>
2026-04-15T09:45:51.928 [DEBUG] [Thread-16725] [transport.py] [_log()] server lang: <none>
2026-04-15T09:45:51.928 [DEBUG] [Thread-16725] [transport.py] [_log()] kex follows: False
2026-04-15T09:45:51.928 [DEBUG] [Thread-16725] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:45:51.928 [DEBUG] [Thread-16725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:45:51.928 [DEBUG] [Thread-16725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:45:51.928 [DEBUG] [Thread-16725] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:45:51.928 [DEBUG] [Thread-16725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:45:51.928 [DEBUG] [Thread-16725] [transport.py] [_log()] Compression: none
2026-04-15T09:45:51.929 [DEBUG] [Thread-16725] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:45:51.939 [DEBUG] [Thread-16725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:45:51.939 [DEBUG] [Thread-16725] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:45:51.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:45:51.940 [DEBUG] [Thread-16725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:45:51.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:45:51.941 [DEBUG] [Thread-16725] [transport.py] [_log()] userauth is OK
2026-04-15T09:45:51.941 [DEBUG] [Thread-16725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:45:51.941 [DEBUG] [Thread-16725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:45:51.941 [DEBUG] [Thread-16725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:45:51.941 [DEBUG] [Thread-16725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:45:51.965 [INFO] [Thread-16725] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:45:51.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:45:52.569 [DEBUG] [Thread-16725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:45:52.570 [DEBUG] [Thread-16725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:45:52.570 [DEBUG] [Thread-16725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:45:52.610 [DEBUG] [Thread-16725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:45:52.610 [DEBUG] [Thread-16725] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:45:52.613 [DEBUG] [Thread-16725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:45:52.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:45:52.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:45:52.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:45:52.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:45:52.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:45:52.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:45:52.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:45:52.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:45:52.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:45:52.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.323394 -999.00   +9.00  19.78     95   +8.40 1 3 1 3 1   887    0 0.80 7.19 ----- 19.8 19.8 299.6 22.7 12.0 -3.4 11.7 -3.2 11.0 -2.8 11.3 -1.9
2026-04-15T09:45:52.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:45:52.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:45:52.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.323394
2026-04-15T09:45:52.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:45:52.636 [DEBUG] [Thread-16725] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:45:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:45:52.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:45:52.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:45:52.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:45:52.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:45:18', tmtdew=0.12347, humidity=98.6485, cloud=0.0, wind=15.034, temperature=9.05755, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:45:41.242', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:45:52.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:45:52.889 [DEBUG] [Thread-16728] [transport.py] [_log()] starting thread (client mode): 0xf13672b0
2026-04-15T09:45:52.889 [DEBUG] [Thread-16728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:45:52.904 [DEBUG] [Thread-16728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:45:52.904 [INFO] [Thread-16728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:45:52.911 [DEBUG] [Thread-16728] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:45:52.911 [DEBUG] [Thread-16728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:45:52.911 [DEBUG] [Thread-16728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:45:52.911 [DEBUG] [Thread-16728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:45:52.911 [DEBUG] [Thread-16728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:45:52.911 [DEBUG] [Thread-16728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:45:52.911 [DEBUG] [Thread-16728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:45:52.912 [DEBUG] [Thread-16728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:45:52.912 [DEBUG] [Thread-16728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:45:52.912 [DEBUG] [Thread-16728] [transport.py] [_log()] client lang: <none>
2026-04-15T09:45:52.912 [DEBUG] [Thread-16728] [transport.py] [_log()] server lang: <none>
2026-04-15T09:45:52.912 [DEBUG] [Thread-16728] [transport.py] [_log()] kex follows: False
2026-04-15T09:45:52.912 [DEBUG] [Thread-16728] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:45:52.912 [DEBUG] [Thread-16728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:45:52.912 [DEBUG] [Thread-16728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:45:52.912 [DEBUG] [Thread-16728] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:45:52.912 [DEBUG] [Thread-16728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:45:52.912 [DEBUG] [Thread-16728] [transport.py] [_log()] Compression: none
2026-04-15T09:45:52.913 [DEBUG] [Thread-16728] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:45:52.967 [DEBUG] [Thread-16728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:45:52.967 [DEBUG] [Thread-16728] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:45:52.968 [DEBUG] [Thread-16728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:45:52.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:45:52.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:45:53.024 [DEBUG] [Thread-16728] [transport.py] [_log()] userauth is OK
2026-04-15T09:45:53.024 [DEBUG] [Thread-16728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:45:53.024 [DEBUG] [Thread-16728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:45:53.024 [DEBUG] [Thread-16728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:45:53.024 [DEBUG] [Thread-16728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:45:53.042 [INFO] [Thread-16728] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:45:53.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:45:53.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:45:53.851 [DEBUG] [Thread-16728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:45:53.851 [DEBUG] [Thread-16728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:45:53.899 [DEBUG] [Thread-16728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:45:53.899 [DEBUG] [Thread-16728] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:45:53.908 [DEBUG] [Thread-16728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:45:53.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:45:53.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')
2026-04-15T09:45:53.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') -> 00000000
2026-04-15T09:45:53.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:45:53.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:45:53.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:45:53.942 [DEBUG] [Thread-16728] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:45:57.606 [DEBUG] [Thread-16730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:45:59.015 [DEBUG] [Thread-16731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:46:14.060 [DEBUG] [Thread-16732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:46:23.542 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:46:23.543 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:46:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:46:23.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:46:23.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:46:25.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 45, 53), 0.242, 98.3301, 0.0, 16.9733, 9.68145, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:46:25.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:45:53
2026-04-15T09:46:25.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:46:26.098 [DEBUG] [Thread-16733] [transport.py] [_log()] starting thread (client mode): 0xf1366800
2026-04-15T09:46:26.099 [DEBUG] [Thread-16733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:46:26.109 [DEBUG] [Thread-16733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:46:26.109 [INFO] [Thread-16733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:46:26.112 [DEBUG] [Thread-16733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:46:26.112 [DEBUG] [Thread-16733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:46:26.112 [DEBUG] [Thread-16733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:46:26.112 [DEBUG] [Thread-16733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:46:26.112 [DEBUG] [Thread-16733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:46:26.112 [DEBUG] [Thread-16733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:46:26.112 [DEBUG] [Thread-16733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:46:26.112 [DEBUG] [Thread-16733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:46:26.113 [DEBUG] [Thread-16733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:46:26.113 [DEBUG] [Thread-16733] [transport.py] [_log()] client lang: <none>
2026-04-15T09:46:26.113 [DEBUG] [Thread-16733] [transport.py] [_log()] server lang: <none>
2026-04-15T09:46:26.113 [DEBUG] [Thread-16733] [transport.py] [_log()] kex follows: False
2026-04-15T09:46:26.113 [DEBUG] [Thread-16733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:46:26.113 [DEBUG] [Thread-16733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:46:26.113 [DEBUG] [Thread-16733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:46:26.113 [DEBUG] [Thread-16733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:46:26.113 [DEBUG] [Thread-16733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:46:26.113 [DEBUG] [Thread-16733] [transport.py] [_log()] Compression: none
2026-04-15T09:46:26.113 [DEBUG] [Thread-16733] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:46:26.129 [DEBUG] [Thread-16733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:46:26.129 [DEBUG] [Thread-16733] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:46:26.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:46:26.130 [DEBUG] [Thread-16733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:46:26.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:46:26.131 [DEBUG] [Thread-16733] [transport.py] [_log()] userauth is OK
2026-04-15T09:46:26.131 [DEBUG] [Thread-16733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:46:26.131 [DEBUG] [Thread-16733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:46:26.131 [DEBUG] [Thread-16733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:46:26.131 [DEBUG] [Thread-16733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:46:26.154 [INFO] [Thread-16733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:46:26.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:46:26.731 [DEBUG] [Thread-16733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:46:26.732 [DEBUG] [Thread-16733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:46:26.732 [DEBUG] [Thread-16733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:46:26.772 [DEBUG] [Thread-16733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:46:26.772 [DEBUG] [Thread-16733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:46:26.775 [DEBUG] [Thread-16733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:46:26.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:46:26.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:46:26.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:46:26.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:46:26.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:46:26.793 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:46:26.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:46:26.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:46:26.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:46:26.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.323741 -999.00   +9.00  16.15     95   +8.30 1 3 1 3 1   887    0 0.82 7.54 ----- 16.1 16.1 298.6 20.5 12.0 -3.1 11.7 -4.1 11.0 -4.2 11.3 -2.4
2026-04-15T09:46:26.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:46:26.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:46:26.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.323741
2026-04-15T09:46:26.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:46:26.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:46:26.796 [DEBUG] [Thread-16733] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:46:26.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:46:26.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:46:26.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:46:26.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:45:53', tmtdew=0.242, humidity=98.3301, cloud=0.0, wind=16.9733, temperature=9.68145, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:46:11.222', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:46:27.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:46:27.052 [DEBUG] [Thread-16736] [transport.py] [_log()] starting thread (client mode): 0xf13fe410
2026-04-15T09:46:27.053 [DEBUG] [Thread-16736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:46:27.066 [DEBUG] [Thread-16736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:46:27.066 [INFO] [Thread-16736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:46:27.073 [DEBUG] [Thread-16736] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:46:27.074 [DEBUG] [Thread-16736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:46:27.074 [DEBUG] [Thread-16736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:46:27.074 [DEBUG] [Thread-16736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:46:27.074 [DEBUG] [Thread-16736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:46:27.074 [DEBUG] [Thread-16736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:46:27.074 [DEBUG] [Thread-16736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:46:27.074 [DEBUG] [Thread-16736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:46:27.074 [DEBUG] [Thread-16736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:46:27.074 [DEBUG] [Thread-16736] [transport.py] [_log()] client lang: <none>
2026-04-15T09:46:27.074 [DEBUG] [Thread-16736] [transport.py] [_log()] server lang: <none>
2026-04-15T09:46:27.074 [DEBUG] [Thread-16736] [transport.py] [_log()] kex follows: False
2026-04-15T09:46:27.075 [DEBUG] [Thread-16736] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:46:27.075 [DEBUG] [Thread-16736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:46:27.075 [DEBUG] [Thread-16736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:46:27.075 [DEBUG] [Thread-16736] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:46:27.075 [DEBUG] [Thread-16736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:46:27.075 [DEBUG] [Thread-16736] [transport.py] [_log()] Compression: none
2026-04-15T09:46:27.075 [DEBUG] [Thread-16736] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:46:27.131 [DEBUG] [Thread-16736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:46:27.132 [DEBUG] [Thread-16736] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:46:27.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:46:27.133 [DEBUG] [Thread-16736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:46:27.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:46:27.188 [DEBUG] [Thread-16736] [transport.py] [_log()] userauth is OK
2026-04-15T09:46:27.189 [DEBUG] [Thread-16736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:46:27.189 [DEBUG] [Thread-16736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:46:27.189 [DEBUG] [Thread-16736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:46:27.189 [DEBUG] [Thread-16736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:46:27.214 [INFO] [Thread-16736] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:46:27.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:46:27.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:46:28.020 [DEBUG] [Thread-16736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:46:28.020 [DEBUG] [Thread-16736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:46:28.068 [DEBUG] [Thread-16736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:46:28.068 [DEBUG] [Thread-16736] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:46:28.077 [DEBUG] [Thread-16736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:46:28.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:46:28.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')
2026-04-15T09:46:28.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
2026-04-15T09:46:28.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:46:28.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:46:28.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:46:28.116 [DEBUG] [Thread-16736] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:46:29.092 [DEBUG] [Thread-16738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:46:44.136 [DEBUG] [Thread-16739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:46:57.712 [DEBUG] [Thread-16740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:46:58.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:46:58.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:46:58.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
2026-04-15T09:46:59.168 [DEBUG] [Thread-16741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:46:59.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 46, 29), 0.16861, 98.6815, 0.0, 10.2168, 9.24017, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:46:59.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:46:29
2026-04-15T09:46:59.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:47:00.282 [DEBUG] [Thread-16742] [transport.py] [_log()] starting thread (client mode): 0xee9ef190
2026-04-15T09:47:00.282 [DEBUG] [Thread-16742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:47:00.303 [DEBUG] [Thread-16742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:47:00.303 [INFO] [Thread-16742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:47:00.306 [DEBUG] [Thread-16742] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:47:00.306 [DEBUG] [Thread-16742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:47:00.306 [DEBUG] [Thread-16742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:47:00.306 [DEBUG] [Thread-16742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:47:00.306 [DEBUG] [Thread-16742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:47:00.306 [DEBUG] [Thread-16742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:47:00.306 [DEBUG] [Thread-16742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:47:00.307 [DEBUG] [Thread-16742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:47:00.307 [DEBUG] [Thread-16742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:47:00.307 [DEBUG] [Thread-16742] [transport.py] [_log()] client lang: <none>
2026-04-15T09:47:00.307 [DEBUG] [Thread-16742] [transport.py] [_log()] server lang: <none>
2026-04-15T09:47:00.307 [DEBUG] [Thread-16742] [transport.py] [_log()] kex follows: False
2026-04-15T09:47:00.307 [DEBUG] [Thread-16742] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:47:00.307 [DEBUG] [Thread-16742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:47:00.307 [DEBUG] [Thread-16742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:47:00.307 [DEBUG] [Thread-16742] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:47:00.307 [DEBUG] [Thread-16742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:47:00.307 [DEBUG] [Thread-16742] [transport.py] [_log()] Compression: none
2026-04-15T09:47:00.308 [DEBUG] [Thread-16742] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:47:00.316 [DEBUG] [Thread-16742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:47:00.316 [DEBUG] [Thread-16742] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:47:00.317 [DEBUG] [Thread-16742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:47:00.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:47:00.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:47:00.318 [DEBUG] [Thread-16742] [transport.py] [_log()] userauth is OK
2026-04-15T09:47:00.318 [DEBUG] [Thread-16742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:47:00.318 [DEBUG] [Thread-16742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:47:00.318 [DEBUG] [Thread-16742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:47:00.318 [DEBUG] [Thread-16742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:47:00.341 [INFO] [Thread-16742] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:47:00.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:47:00.973 [DEBUG] [Thread-16742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:47:00.973 [DEBUG] [Thread-16742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:47:00.974 [DEBUG] [Thread-16742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:47:01.015 [DEBUG] [Thread-16742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:47:01.015 [DEBUG] [Thread-16742] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:47:01.018 [DEBUG] [Thread-16742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:47:01.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:47:01.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:47:01.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:47:01.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:47:01.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:47:01.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:47:01.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:47:01.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:47:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:47:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.324089 -999.00   +9.10  16.06     95   +8.50 1 3 1 3 1   887    0 0.82 7.53 ----- 16.1 16.1 303.0 21.4 11.9 -4.6 11.7 -7.2 11.0 -7.5 11.4 -4.9
2026-04-15T09:47:01.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:47:01.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:47:01.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.324089
2026-04-15T09:47:01.043 [DEBUG] [Thread-16742] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:47:01.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:47:01.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:47:01.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:47:01.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:47:01.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:47:01.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:46:29', tmtdew=0.16861, humidity=98.6815, cloud=0.0, wind=10.2168, temperature=9.24017, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:46:41.290', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:47:01.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:47:01.300 [DEBUG] [Thread-16745] [transport.py] [_log()] starting thread (client mode): 0xee9ed7e0
2026-04-15T09:47:01.301 [DEBUG] [Thread-16745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:47:01.315 [DEBUG] [Thread-16745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:47:01.315 [INFO] [Thread-16745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:47:01.322 [DEBUG] [Thread-16745] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:47:01.323 [DEBUG] [Thread-16745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:47:01.323 [DEBUG] [Thread-16745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:47:01.323 [DEBUG] [Thread-16745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:47:01.323 [DEBUG] [Thread-16745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:47:01.323 [DEBUG] [Thread-16745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:47:01.323 [DEBUG] [Thread-16745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:47:01.323 [DEBUG] [Thread-16745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:47:01.323 [DEBUG] [Thread-16745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:47:01.323 [DEBUG] [Thread-16745] [transport.py] [_log()] client lang: <none>
2026-04-15T09:47:01.323 [DEBUG] [Thread-16745] [transport.py] [_log()] server lang: <none>
2026-04-15T09:47:01.323 [DEBUG] [Thread-16745] [transport.py] [_log()] kex follows: False
2026-04-15T09:47:01.324 [DEBUG] [Thread-16745] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:47:01.324 [DEBUG] [Thread-16745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:47:01.324 [DEBUG] [Thread-16745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:47:01.324 [DEBUG] [Thread-16745] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:47:01.324 [DEBUG] [Thread-16745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:47:01.324 [DEBUG] [Thread-16745] [transport.py] [_log()] Compression: none
2026-04-15T09:47:01.324 [DEBUG] [Thread-16745] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:47:01.380 [DEBUG] [Thread-16745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:47:01.380 [DEBUG] [Thread-16745] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:47:01.381 [DEBUG] [Thread-16745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:47:01.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:47:01.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:47:01.436 [DEBUG] [Thread-16745] [transport.py] [_log()] userauth is OK
2026-04-15T09:47:01.437 [DEBUG] [Thread-16745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:47:01.437 [DEBUG] [Thread-16745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:47:01.437 [DEBUG] [Thread-16745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:47:01.437 [DEBUG] [Thread-16745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:47:01.462 [INFO] [Thread-16745] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:47:01.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:47:01.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:47:02.270 [DEBUG] [Thread-16745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:47:02.271 [DEBUG] [Thread-16745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:47:02.318 [DEBUG] [Thread-16745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:47:02.318 [DEBUG] [Thread-16745] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:47:02.327 [DEBUG] [Thread-16745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:47:02.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:47:02.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')
2026-04-15T09:47:02.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
2026-04-15T09:47:02.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:47:02.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:47:02.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:47:02.361 [DEBUG] [Thread-16745] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:47:14.200 [DEBUG] [Thread-16747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:47:23.684 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:47:23.685 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:47:29.245 [DEBUG] [Thread-16748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:47:32.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:47:32.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:47:32.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
2026-04-15T09:47:33.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 47, 4), 0.176075, 98.6317, 0.0, 11.7162, 9.17382, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:47:33.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:47:04
2026-04-15T09:47:34.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:47:34.438 [DEBUG] [Thread-16749] [transport.py] [_log()] starting thread (client mode): 0xee9ec340
2026-04-15T09:47:34.438 [DEBUG] [Thread-16749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:47:34.458 [DEBUG] [Thread-16749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:47:34.458 [INFO] [Thread-16749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:47:34.461 [DEBUG] [Thread-16749] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:47:34.461 [DEBUG] [Thread-16749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:47:34.461 [DEBUG] [Thread-16749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:47:34.461 [DEBUG] [Thread-16749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:47:34.461 [DEBUG] [Thread-16749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:47:34.461 [DEBUG] [Thread-16749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:47:34.461 [DEBUG] [Thread-16749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:47:34.461 [DEBUG] [Thread-16749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:47:34.461 [DEBUG] [Thread-16749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:47:34.461 [DEBUG] [Thread-16749] [transport.py] [_log()] client lang: <none>
2026-04-15T09:47:34.461 [DEBUG] [Thread-16749] [transport.py] [_log()] server lang: <none>
2026-04-15T09:47:34.461 [DEBUG] [Thread-16749] [transport.py] [_log()] kex follows: False
2026-04-15T09:47:34.462 [DEBUG] [Thread-16749] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:47:34.462 [DEBUG] [Thread-16749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:47:34.462 [DEBUG] [Thread-16749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:47:34.462 [DEBUG] [Thread-16749] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:47:34.462 [DEBUG] [Thread-16749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:47:34.462 [DEBUG] [Thread-16749] [transport.py] [_log()] Compression: none
2026-04-15T09:47:34.462 [DEBUG] [Thread-16749] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:47:34.469 [DEBUG] [Thread-16749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:47:34.470 [DEBUG] [Thread-16749] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:47:34.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:47:34.470 [DEBUG] [Thread-16749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:47:34.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:47:34.471 [DEBUG] [Thread-16749] [transport.py] [_log()] userauth is OK
2026-04-15T09:47:34.471 [DEBUG] [Thread-16749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:47:34.471 [DEBUG] [Thread-16749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:47:34.471 [DEBUG] [Thread-16749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:47:34.471 [DEBUG] [Thread-16749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:47:34.484 [INFO] [Thread-16749] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:47:34.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:47:35.104 [DEBUG] [Thread-16749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:47:35.104 [DEBUG] [Thread-16749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:47:35.105 [DEBUG] [Thread-16749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:47:35.145 [DEBUG] [Thread-16749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:47:35.145 [DEBUG] [Thread-16749] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:47:35.148 [DEBUG] [Thread-16749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:47:35.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:47:35.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:47:35.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:47:35.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:47:35.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:47:35.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:47:35.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:47:35.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:47:35.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:47:35.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.324436 -999.00   +9.10  15.46     95   +8.40 1 3 1 3 1   887    0 0.80 7.12 ----- 15.5 15.5 298.6 21.3 12.0 -7.5 11.7 -10.0 11.0 -9.6 11.3 -7.4
2026-04-15T09:47:35.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:47:35.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:47:35.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.324436
2026-04-15T09:47:35.172 [DEBUG] [Thread-16749] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:47:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:47:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:47:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:47:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:47:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:47:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:47:04', tmtdew=0.176075, humidity=98.6317, cloud=0.0, wind=11.7162, temperature=9.17382, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:47:11.270', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:47:35.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:47:35.427 [DEBUG] [Thread-16752] [transport.py] [_log()] starting thread (client mode): 0xee91ebc0
2026-04-15T09:47:35.427 [DEBUG] [Thread-16752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:47:35.441 [DEBUG] [Thread-16752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:47:35.441 [INFO] [Thread-16752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:47:35.448 [DEBUG] [Thread-16752] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:47:35.448 [DEBUG] [Thread-16752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:47:35.448 [DEBUG] [Thread-16752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:47:35.448 [DEBUG] [Thread-16752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:47:35.448 [DEBUG] [Thread-16752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:47:35.449 [DEBUG] [Thread-16752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:47:35.449 [DEBUG] [Thread-16752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:47:35.449 [DEBUG] [Thread-16752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:47:35.449 [DEBUG] [Thread-16752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:47:35.449 [DEBUG] [Thread-16752] [transport.py] [_log()] client lang: <none>
2026-04-15T09:47:35.449 [DEBUG] [Thread-16752] [transport.py] [_log()] server lang: <none>
2026-04-15T09:47:35.454 [DEBUG] [Thread-16752] [transport.py] [_log()] kex follows: False
2026-04-15T09:47:35.454 [DEBUG] [Thread-16752] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:47:35.454 [DEBUG] [Thread-16752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:47:35.454 [DEBUG] [Thread-16752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:47:35.454 [DEBUG] [Thread-16752] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:47:35.454 [DEBUG] [Thread-16752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:47:35.454 [DEBUG] [Thread-16752] [transport.py] [_log()] Compression: none
2026-04-15T09:47:35.454 [DEBUG] [Thread-16752] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:47:35.509 [DEBUG] [Thread-16752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:47:35.509 [DEBUG] [Thread-16752] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:47:35.510 [DEBUG] [Thread-16752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:47:35.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:47:35.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:47:35.567 [DEBUG] [Thread-16752] [transport.py] [_log()] userauth is OK
2026-04-15T09:47:35.567 [DEBUG] [Thread-16752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:47:35.567 [DEBUG] [Thread-16752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:47:35.567 [DEBUG] [Thread-16752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:47:35.567 [DEBUG] [Thread-16752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:47:35.590 [INFO] [Thread-16752] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:47:35.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:47:35.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:47:36.417 [DEBUG] [Thread-16752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:47:36.417 [DEBUG] [Thread-16752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:47:36.464 [DEBUG] [Thread-16752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:47:36.465 [DEBUG] [Thread-16752] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:47:36.473 [DEBUG] [Thread-16752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:47:36.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:47:36.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')
2026-04-15T09:47: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') -> 00000000
2026-04-15T09:47:36.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:47:36.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:47:36.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:47:36.511 [DEBUG] [Thread-16752] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:47:44.276 [DEBUG] [Thread-16754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:47:57.806 [DEBUG] [Thread-16755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:47:59.319 [DEBUG] [Thread-16756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:48:06.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:48:06.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:48:06.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
2026-04-15T09:48:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 47, 40), 0.25725, 98.2301, 0.0, 19.9015, 9.7807, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:48:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:47:40
2026-04-15T09:48:08.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:48:08.655 [DEBUG] [Thread-16757] [transport.py] [_log()] starting thread (client mode): 0xf1366440
2026-04-15T09:48:08.656 [DEBUG] [Thread-16757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:48:08.673 [DEBUG] [Thread-16757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:48:08.673 [INFO] [Thread-16757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:48:08.676 [DEBUG] [Thread-16757] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:48:08.676 [DEBUG] [Thread-16757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:48:08.676 [DEBUG] [Thread-16757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:48:08.676 [DEBUG] [Thread-16757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:48:08.676 [DEBUG] [Thread-16757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:48:08.676 [DEBUG] [Thread-16757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:48:08.676 [DEBUG] [Thread-16757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:48:08.677 [DEBUG] [Thread-16757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:48:08.677 [DEBUG] [Thread-16757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:48:08.677 [DEBUG] [Thread-16757] [transport.py] [_log()] client lang: <none>
2026-04-15T09:48:08.677 [DEBUG] [Thread-16757] [transport.py] [_log()] server lang: <none>
2026-04-15T09:48:08.677 [DEBUG] [Thread-16757] [transport.py] [_log()] kex follows: False
2026-04-15T09:48:08.677 [DEBUG] [Thread-16757] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:48:08.677 [DEBUG] [Thread-16757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:48:08.677 [DEBUG] [Thread-16757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:48:08.677 [DEBUG] [Thread-16757] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:48:08.677 [DEBUG] [Thread-16757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:48:08.677 [DEBUG] [Thread-16757] [transport.py] [_log()] Compression: none
2026-04-15T09:48:08.678 [DEBUG] [Thread-16757] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:48:08.694 [DEBUG] [Thread-16757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:48:08.695 [DEBUG] [Thread-16757] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:48:08.695 [DEBUG] [Thread-16757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:48:08.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:48:08.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:48:08.696 [DEBUG] [Thread-16757] [transport.py] [_log()] userauth is OK
2026-04-15T09:48:08.696 [DEBUG] [Thread-16757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:48:08.696 [DEBUG] [Thread-16757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:48:08.696 [DEBUG] [Thread-16757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:48:08.696 [DEBUG] [Thread-16757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:48:08.712 [INFO] [Thread-16757] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:48:08.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:48:09.319 [DEBUG] [Thread-16757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:48:09.319 [DEBUG] [Thread-16757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:48:09.320 [DEBUG] [Thread-16757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:48:09.360 [DEBUG] [Thread-16757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:48:09.360 [DEBUG] [Thread-16757] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:48:09.362 [DEBUG] [Thread-16757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:48:09.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:48:09.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:48:09.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:48:09.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:48:09.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:48:09.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:48:09.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:48:09.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:48:09.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:48:09.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.324783 -999.00   +9.20  11.64     95   +8.50 1 2 1 3 1   887    0 0.83 7.67 ----- 11.6 11.6 296.0 15.7 11.9 -9.7 11.7 -11.1 11.1 -9.1 11.4 -8.6
2026-04-15T09:48:09.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:48:09.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:48:09.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.324783
2026-04-15T09:48:09.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:48:09.383 [DEBUG] [Thread-16757] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:48:09.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:48:09.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:48:09.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:48:09.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T09:48:09.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:47:40', tmtdew=0.25725, humidity=98.2301, cloud=0.0, wind=19.9015, temperature=9.7807, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:47:41.251', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:48:09.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:48:09.636 [DEBUG] [Thread-16760] [transport.py] [_log()] starting thread (client mode): 0xf13e3310
2026-04-15T09:48:09.636 [DEBUG] [Thread-16760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:48:09.650 [DEBUG] [Thread-16760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:48:09.651 [INFO] [Thread-16760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:48:09.658 [DEBUG] [Thread-16760] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:48:09.658 [DEBUG] [Thread-16760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:48:09.658 [DEBUG] [Thread-16760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:48:09.658 [DEBUG] [Thread-16760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:48:09.658 [DEBUG] [Thread-16760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:48:09.658 [DEBUG] [Thread-16760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:48:09.658 [DEBUG] [Thread-16760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:48:09.658 [DEBUG] [Thread-16760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:48:09.658 [DEBUG] [Thread-16760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:48:09.659 [DEBUG] [Thread-16760] [transport.py] [_log()] client lang: <none>
2026-04-15T09:48:09.659 [DEBUG] [Thread-16760] [transport.py] [_log()] server lang: <none>
2026-04-15T09:48:09.659 [DEBUG] [Thread-16760] [transport.py] [_log()] kex follows: False
2026-04-15T09:48:09.659 [DEBUG] [Thread-16760] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:48:09.659 [DEBUG] [Thread-16760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:48:09.659 [DEBUG] [Thread-16760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:48:09.659 [DEBUG] [Thread-16760] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:48:09.659 [DEBUG] [Thread-16760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:48:09.659 [DEBUG] [Thread-16760] [transport.py] [_log()] Compression: none
2026-04-15T09:48:09.659 [DEBUG] [Thread-16760] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:48:09.720 [DEBUG] [Thread-16760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:48:09.721 [DEBUG] [Thread-16760] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:48:09.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:48:09.721 [DEBUG] [Thread-16760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:48:09.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:48:09.778 [DEBUG] [Thread-16760] [transport.py] [_log()] userauth is OK
2026-04-15T09:48:09.778 [DEBUG] [Thread-16760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:48:09.778 [DEBUG] [Thread-16760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:48:09.779 [DEBUG] [Thread-16760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:48:09.779 [DEBUG] [Thread-16760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:48:09.809 [INFO] [Thread-16760] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:48:09.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:48:09.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:48:10.614 [DEBUG] [Thread-16760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:48:10.614 [DEBUG] [Thread-16760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:48:10.662 [DEBUG] [Thread-16760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:48:10.662 [DEBUG] [Thread-16760] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:48:10.671 [DEBUG] [Thread-16760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:48:10.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:48:10.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')
2026-04-15T09:48:10.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
2026-04-15T09:48:10.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:48:10.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:48:10.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:48:10.706 [DEBUG] [Thread-16760] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:48:14.350 [DEBUG] [Thread-16762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:48:23.825 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:48:23.827 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:48:29.394 [DEBUG] [Thread-16763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:48:40.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:48:40.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:48:40.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
2026-04-15T09:48:41.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 48, 15), 0.178445, 98.615, 0.0, 14.5224, 8.99106, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:48:41.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:48:15
2026-04-15T09:48:42.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:48:42.833 [DEBUG] [Thread-16764] [transport.py] [_log()] starting thread (client mode): 0xf13fe020
2026-04-15T09:48:42.833 [DEBUG] [Thread-16764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:48:42.849 [DEBUG] [Thread-16764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:48:42.849 [INFO] [Thread-16764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:48:42.852 [DEBUG] [Thread-16764] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:48:42.852 [DEBUG] [Thread-16764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:48:42.852 [DEBUG] [Thread-16764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:48:42.852 [DEBUG] [Thread-16764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:48:42.852 [DEBUG] [Thread-16764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:48:42.852 [DEBUG] [Thread-16764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:48:42.852 [DEBUG] [Thread-16764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:48:42.852 [DEBUG] [Thread-16764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:48:42.853 [DEBUG] [Thread-16764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:48:42.853 [DEBUG] [Thread-16764] [transport.py] [_log()] client lang: <none>
2026-04-15T09:48:42.853 [DEBUG] [Thread-16764] [transport.py] [_log()] server lang: <none>
2026-04-15T09:48:42.853 [DEBUG] [Thread-16764] [transport.py] [_log()] kex follows: False
2026-04-15T09:48:42.853 [DEBUG] [Thread-16764] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:48:42.853 [DEBUG] [Thread-16764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:48:42.853 [DEBUG] [Thread-16764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:48:42.853 [DEBUG] [Thread-16764] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:48:42.853 [DEBUG] [Thread-16764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:48:42.853 [DEBUG] [Thread-16764] [transport.py] [_log()] Compression: none
2026-04-15T09:48:42.853 [DEBUG] [Thread-16764] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:48:42.869 [DEBUG] [Thread-16764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:48:42.870 [DEBUG] [Thread-16764] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:48:42.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:48:42.870 [DEBUG] [Thread-16764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:48:42.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:48:42.871 [DEBUG] [Thread-16764] [transport.py] [_log()] userauth is OK
2026-04-15T09:48:42.871 [DEBUG] [Thread-16764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:48:42.871 [DEBUG] [Thread-16764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:48:42.871 [DEBUG] [Thread-16764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:48:42.871 [DEBUG] [Thread-16764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:48:42.896 [INFO] [Thread-16764] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:48:42.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:48:43.524 [DEBUG] [Thread-16764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:48:43.524 [DEBUG] [Thread-16764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:48:43.525 [DEBUG] [Thread-16764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:48:43.565 [DEBUG] [Thread-16764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:48:43.565 [DEBUG] [Thread-16764] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:48:43.568 [DEBUG] [Thread-16764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:48:43.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:48:43.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:48:43.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:48:43.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:48:43.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:48:43.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:48:43.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:48:43.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:48:43.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:48:43.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.325131 -999.00   +9.20  13.01     95   +8.60 1 3 1 3 1   887    0 0.81 7.46 ----- 13.0 13.0 310.0 18.8 12.0 -9.9 11.8 -10.0 11.1 -7.7 11.4 -7.4
2026-04-15T09:48:43.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:48:43.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:48:43.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.325131
2026-04-15T09:48:43.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:48:43.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:48:43.593 [DEBUG] [Thread-16764] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:48:43.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:48:43.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:48:43.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:48:43.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:48:15', tmtdew=0.178445, humidity=98.615, cloud=0.0, wind=14.5224, temperature=8.99106, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:48:11.318', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:48:43.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:48:43.848 [DEBUG] [Thread-16767] [transport.py] [_log()] starting thread (client mode): 0xf13ffa30
2026-04-15T09:48:43.848 [DEBUG] [Thread-16767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:48:43.862 [DEBUG] [Thread-16767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:48:43.862 [INFO] [Thread-16767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:48:43.869 [DEBUG] [Thread-16767] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:48:43.869 [DEBUG] [Thread-16767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:48:43.870 [DEBUG] [Thread-16767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:48:43.870 [DEBUG] [Thread-16767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:48:43.870 [DEBUG] [Thread-16767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:48:43.870 [DEBUG] [Thread-16767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:48:43.870 [DEBUG] [Thread-16767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:48:43.870 [DEBUG] [Thread-16767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:48:43.870 [DEBUG] [Thread-16767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:48:43.870 [DEBUG] [Thread-16767] [transport.py] [_log()] client lang: <none>
2026-04-15T09:48:43.870 [DEBUG] [Thread-16767] [transport.py] [_log()] server lang: <none>
2026-04-15T09:48:43.870 [DEBUG] [Thread-16767] [transport.py] [_log()] kex follows: False
2026-04-15T09:48:43.870 [DEBUG] [Thread-16767] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:48:43.870 [DEBUG] [Thread-16767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:48:43.871 [DEBUG] [Thread-16767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:48:43.871 [DEBUG] [Thread-16767] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:48:43.871 [DEBUG] [Thread-16767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:48:43.871 [DEBUG] [Thread-16767] [transport.py] [_log()] Compression: none
2026-04-15T09:48:43.871 [DEBUG] [Thread-16767] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:48:43.925 [DEBUG] [Thread-16767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:48:43.925 [DEBUG] [Thread-16767] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:48:43.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:48:43.926 [DEBUG] [Thread-16767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:48:43.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:48:43.982 [DEBUG] [Thread-16767] [transport.py] [_log()] userauth is OK
2026-04-15T09:48:43.982 [DEBUG] [Thread-16767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:48:43.982 [DEBUG] [Thread-16767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:48:43.982 [DEBUG] [Thread-16767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:48:43.983 [DEBUG] [Thread-16767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:48:44.007 [INFO] [Thread-16767] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:48:44.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:48:44.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:48:44.426 [DEBUG] [Thread-16769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:48:44.841 [DEBUG] [Thread-16767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:48:44.842 [DEBUG] [Thread-16767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:48:44.894 [DEBUG] [Thread-16767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:48:44.894 [DEBUG] [Thread-16767] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:48:44.910 [DEBUG] [Thread-16767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:48:44.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:48:44.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')
2026-04-15T09:48:44.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
2026-04-15T09:48:44.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:48:44.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:48:44.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:48:44.953 [DEBUG] [Thread-16767] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:48:57.907 [DEBUG] [Thread-16770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:48:59.469 [DEBUG] [Thread-16771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:49:14.499 [DEBUG] [Thread-16772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:49:14.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:49:14.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:49:14.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
2026-04-15T09:49:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 48, 51), 0.24714, 98.2963, 0.0, 14.6095, 9.71424, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:49:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:48:51
2026-04-15T09:49:16.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:49:17.124 [DEBUG] [Thread-16773] [transport.py] [_log()] starting thread (client mode): 0xee988520
2026-04-15T09:49:17.125 [DEBUG] [Thread-16773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:49:17.135 [DEBUG] [Thread-16773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:49:17.135 [INFO] [Thread-16773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:49:17.137 [DEBUG] [Thread-16773] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:49:17.137 [DEBUG] [Thread-16773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:49:17.137 [DEBUG] [Thread-16773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:49:17.137 [DEBUG] [Thread-16773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:49:17.138 [DEBUG] [Thread-16773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:49:17.138 [DEBUG] [Thread-16773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:49:17.138 [DEBUG] [Thread-16773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:49:17.138 [DEBUG] [Thread-16773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:49:17.138 [DEBUG] [Thread-16773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:49:17.138 [DEBUG] [Thread-16773] [transport.py] [_log()] client lang: <none>
2026-04-15T09:49:17.138 [DEBUG] [Thread-16773] [transport.py] [_log()] server lang: <none>
2026-04-15T09:49:17.138 [DEBUG] [Thread-16773] [transport.py] [_log()] kex follows: False
2026-04-15T09:49:17.138 [DEBUG] [Thread-16773] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:49:17.138 [DEBUG] [Thread-16773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:49:17.138 [DEBUG] [Thread-16773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:49:17.138 [DEBUG] [Thread-16773] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:49:17.138 [DEBUG] [Thread-16773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:49:17.139 [DEBUG] [Thread-16773] [transport.py] [_log()] Compression: none
2026-04-15T09:49:17.139 [DEBUG] [Thread-16773] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:49:17.161 [DEBUG] [Thread-16773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:49:17.162 [DEBUG] [Thread-16773] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:49:17.162 [DEBUG] [Thread-16773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:49:17.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:49:17.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:49:17.163 [DEBUG] [Thread-16773] [transport.py] [_log()] userauth is OK
2026-04-15T09:49:17.163 [DEBUG] [Thread-16773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:49:17.163 [DEBUG] [Thread-16773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:49:17.163 [DEBUG] [Thread-16773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:49:17.163 [DEBUG] [Thread-16773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:49:17.179 [INFO] [Thread-16773] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:49:17.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:49:17.774 [DEBUG] [Thread-16773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:49:17.774 [DEBUG] [Thread-16773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:49:17.775 [DEBUG] [Thread-16773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:49:17.815 [DEBUG] [Thread-16773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:49:17.815 [DEBUG] [Thread-16773] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:49:17.817 [DEBUG] [Thread-16773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:49:17.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:49:17.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:49:17.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:49:17.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:49:17.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:49:17.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:49:17.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:49:17.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:49:17.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:49:17.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.325825 -999.00   +9.20  19.50     95   +8.50 1 3 1 3 1   888    0 0.85 7.56 ----- 19.5 19.5 308.2 22.2 12.1 -9.1 11.8 -9.5 11.2 -9.1 11.5 -7.3
2026-04-15T09:49:17.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:49:17.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:49:17.838 [DEBUG] [Thread-16773] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:49:17.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.325825
2026-04-15T09:49:17.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:49:17.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:49:17.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:49:17.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:49:17.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:49:17.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:48:51', tmtdew=0.24714, humidity=98.2963, cloud=0.0, wind=14.6095, temperature=9.71424, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:49:11.280', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:49:18.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:49:18.095 [DEBUG] [Thread-16776] [transport.py] [_log()] starting thread (client mode): 0xf13ca8f0
2026-04-15T09:49:18.095 [DEBUG] [Thread-16776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:49:18.109 [DEBUG] [Thread-16776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:49:18.109 [INFO] [Thread-16776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:49:18.117 [DEBUG] [Thread-16776] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:49:18.117 [DEBUG] [Thread-16776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:49:18.117 [DEBUG] [Thread-16776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:49:18.117 [DEBUG] [Thread-16776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:49:18.117 [DEBUG] [Thread-16776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:49:18.118 [DEBUG] [Thread-16776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:49:18.118 [DEBUG] [Thread-16776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:49:18.118 [DEBUG] [Thread-16776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:49:18.118 [DEBUG] [Thread-16776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:49:18.118 [DEBUG] [Thread-16776] [transport.py] [_log()] client lang: <none>
2026-04-15T09:49:18.118 [DEBUG] [Thread-16776] [transport.py] [_log()] server lang: <none>
2026-04-15T09:49:18.118 [DEBUG] [Thread-16776] [transport.py] [_log()] kex follows: False
2026-04-15T09:49:18.118 [DEBUG] [Thread-16776] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:49:18.118 [DEBUG] [Thread-16776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:49:18.118 [DEBUG] [Thread-16776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:49:18.118 [DEBUG] [Thread-16776] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:49:18.118 [DEBUG] [Thread-16776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:49:18.118 [DEBUG] [Thread-16776] [transport.py] [_log()] Compression: none
2026-04-15T09:49:18.119 [DEBUG] [Thread-16776] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:49:18.173 [DEBUG] [Thread-16776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:49:18.174 [DEBUG] [Thread-16776] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:49:18.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:49:18.174 [DEBUG] [Thread-16776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:49:18.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:49:18.232 [DEBUG] [Thread-16776] [transport.py] [_log()] userauth is OK
2026-04-15T09:49:18.232 [DEBUG] [Thread-16776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:49:18.232 [DEBUG] [Thread-16776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:49:18.232 [DEBUG] [Thread-16776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:49:18.233 [DEBUG] [Thread-16776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:49:18.260 [INFO] [Thread-16776] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:49:18.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:49:18.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:49:19.109 [DEBUG] [Thread-16776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:49:19.109 [DEBUG] [Thread-16776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:49:19.157 [DEBUG] [Thread-16776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:49:19.157 [DEBUG] [Thread-16776] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:49:19.166 [DEBUG] [Thread-16776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:49:19.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:49:19.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')
2026-04-15T09:49:19.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
2026-04-15T09:49:19.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:49:19.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:49:19.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:49:19.205 [DEBUG] [Thread-16776] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:49:23.965 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:49:23.967 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:49:29.531 [DEBUG] [Thread-16778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:49:44.575 [DEBUG] [Thread-16779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:49:49.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:49:49.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:49:49.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
2026-04-15T09:49:50.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 49, 27), 0.178545, 98.6149, 0.0, 13.7102, 9.10732, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:49:50.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:49:27
2026-04-15T09:49:50.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:49:51.363 [DEBUG] [Thread-16780] [transport.py] [_log()] starting thread (client mode): 0xf13e2080
2026-04-15T09:49:51.364 [DEBUG] [Thread-16780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:49:51.384 [DEBUG] [Thread-16780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:49:51.384 [INFO] [Thread-16780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:49:51.385 [DEBUG] [Thread-16780] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:49:51.385 [DEBUG] [Thread-16780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:49:51.385 [DEBUG] [Thread-16780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:49:51.385 [DEBUG] [Thread-16780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:49:51.385 [DEBUG] [Thread-16780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:49:51.385 [DEBUG] [Thread-16780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:49:51.386 [DEBUG] [Thread-16780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:49:51.386 [DEBUG] [Thread-16780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:49:51.386 [DEBUG] [Thread-16780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:49:51.386 [DEBUG] [Thread-16780] [transport.py] [_log()] client lang: <none>
2026-04-15T09:49:51.386 [DEBUG] [Thread-16780] [transport.py] [_log()] server lang: <none>
2026-04-15T09:49:51.386 [DEBUG] [Thread-16780] [transport.py] [_log()] kex follows: False
2026-04-15T09:49:51.386 [DEBUG] [Thread-16780] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:49:51.386 [DEBUG] [Thread-16780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:49:51.386 [DEBUG] [Thread-16780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:49:51.386 [DEBUG] [Thread-16780] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:49:51.386 [DEBUG] [Thread-16780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:49:51.386 [DEBUG] [Thread-16780] [transport.py] [_log()] Compression: none
2026-04-15T09:49:51.386 [DEBUG] [Thread-16780] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:49:51.395 [DEBUG] [Thread-16780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:49:51.396 [DEBUG] [Thread-16780] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:49:51.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:49:51.396 [DEBUG] [Thread-16780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:49:51.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:49:51.397 [DEBUG] [Thread-16780] [transport.py] [_log()] userauth is OK
2026-04-15T09:49:51.397 [DEBUG] [Thread-16780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:49:51.397 [DEBUG] [Thread-16780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:49:51.397 [DEBUG] [Thread-16780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:49:51.397 [DEBUG] [Thread-16780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:49:51.410 [INFO] [Thread-16780] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:49:51.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:49:51.997 [DEBUG] [Thread-16780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:49:51.998 [DEBUG] [Thread-16780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:49:51.998 [DEBUG] [Thread-16780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:49:52.038 [DEBUG] [Thread-16780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:49:52.038 [DEBUG] [Thread-16780] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:49:52.041 [DEBUG] [Thread-16780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:49:52.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:49:52.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:49:52.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:49:52.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:49:52.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:49:52.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:49:52.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:49:52.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:49:52.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:49:52.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.326172 -999.00   +9.30  10.79     95   +8.50 1 3 1 3 1   888    0 0.85 7.69 ----- 10.8 10.8 309.8 18.7 12.1 -9.1 11.9 -9.3 11.3 -8.2 11.6 -7.3
2026-04-15T09:49:52.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:49:52.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:49:52.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.326172
2026-04-15T09:49:52.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:49:52.075 [DEBUG] [Thread-16780] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:49:52.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:49:52.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:49:52.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:49:52.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:49:52.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:49:27', tmtdew=0.178545, humidity=98.6149, cloud=0.0, wind=13.7102, temperature=9.10732, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:49:41.261', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:49:52.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:49:52.335 [DEBUG] [Thread-16783] [transport.py] [_log()] starting thread (client mode): 0xee91e800
2026-04-15T09:49:52.335 [DEBUG] [Thread-16783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:49:52.350 [DEBUG] [Thread-16783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:49:52.350 [INFO] [Thread-16783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:49:52.360 [DEBUG] [Thread-16783] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:49:52.360 [DEBUG] [Thread-16783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:49:52.360 [DEBUG] [Thread-16783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:49:52.360 [DEBUG] [Thread-16783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:49:52.360 [DEBUG] [Thread-16783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:49:52.360 [DEBUG] [Thread-16783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:49:52.360 [DEBUG] [Thread-16783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:49:52.360 [DEBUG] [Thread-16783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:49:52.360 [DEBUG] [Thread-16783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:49:52.360 [DEBUG] [Thread-16783] [transport.py] [_log()] client lang: <none>
2026-04-15T09:49:52.360 [DEBUG] [Thread-16783] [transport.py] [_log()] server lang: <none>
2026-04-15T09:49:52.361 [DEBUG] [Thread-16783] [transport.py] [_log()] kex follows: False
2026-04-15T09:49:52.361 [DEBUG] [Thread-16783] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:49:52.361 [DEBUG] [Thread-16783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:49:52.361 [DEBUG] [Thread-16783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:49:52.361 [DEBUG] [Thread-16783] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:49:52.361 [DEBUG] [Thread-16783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:49:52.361 [DEBUG] [Thread-16783] [transport.py] [_log()] Compression: none
2026-04-15T09:49:52.361 [DEBUG] [Thread-16783] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:49:52.423 [DEBUG] [Thread-16783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:49:52.423 [DEBUG] [Thread-16783] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:49:52.424 [DEBUG] [Thread-16783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:49:52.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:49:52.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:49:52.478 [DEBUG] [Thread-16783] [transport.py] [_log()] userauth is OK
2026-04-15T09:49:52.479 [DEBUG] [Thread-16783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:49:52.479 [DEBUG] [Thread-16783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:49:52.479 [DEBUG] [Thread-16783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:49:52.479 [DEBUG] [Thread-16783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:49:52.506 [INFO] [Thread-16783] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:49:52.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:49:52.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:49:53.319 [DEBUG] [Thread-16783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:49:53.319 [DEBUG] [Thread-16783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:49:53.369 [DEBUG] [Thread-16783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:49:53.369 [DEBUG] [Thread-16783] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:49:53.378 [DEBUG] [Thread-16783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:49:53.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:49:53.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')
2026-04-15T09:49:53.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
2026-04-15T09:49:53.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:49:53.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:49:53.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:49:53.413 [DEBUG] [Thread-16783] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:49:58.001 [DEBUG] [Thread-16785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:49:59.607 [DEBUG] [Thread-16786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:50:14.649 [DEBUG] [Thread-16787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:50:23.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:50:23.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:50:23.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
2026-04-15T09:50:24.106 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:50:24.107 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:50:24.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 50, 2), 0.171125, 98.6647, 0.0, 14.0454, 9.20685, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:50:24.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:50:02
2026-04-15T09:50:25.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:50:25.532 [DEBUG] [Thread-16788] [transport.py] [_log()] starting thread (client mode): 0xee906fe0
2026-04-15T09:50:25.533 [DEBUG] [Thread-16788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:50:25.552 [DEBUG] [Thread-16788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:50:25.552 [INFO] [Thread-16788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:50:25.556 [DEBUG] [Thread-16788] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:50:25.556 [DEBUG] [Thread-16788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:50:25.556 [DEBUG] [Thread-16788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:50:25.556 [DEBUG] [Thread-16788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:50:25.556 [DEBUG] [Thread-16788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:50:25.556 [DEBUG] [Thread-16788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:50:25.556 [DEBUG] [Thread-16788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:50:25.556 [DEBUG] [Thread-16788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:50:25.556 [DEBUG] [Thread-16788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:50:25.556 [DEBUG] [Thread-16788] [transport.py] [_log()] client lang: <none>
2026-04-15T09:50:25.556 [DEBUG] [Thread-16788] [transport.py] [_log()] server lang: <none>
2026-04-15T09:50:25.556 [DEBUG] [Thread-16788] [transport.py] [_log()] kex follows: False
2026-04-15T09:50:25.556 [DEBUG] [Thread-16788] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:50:25.556 [DEBUG] [Thread-16788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:50:25.557 [DEBUG] [Thread-16788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:50:25.557 [DEBUG] [Thread-16788] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:50:25.557 [DEBUG] [Thread-16788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:50:25.557 [DEBUG] [Thread-16788] [transport.py] [_log()] Compression: none
2026-04-15T09:50:25.557 [DEBUG] [Thread-16788] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:50:25.574 [DEBUG] [Thread-16788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:50:25.574 [DEBUG] [Thread-16788] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:50:25.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:50:25.575 [DEBUG] [Thread-16788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:50:25.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:50:25.575 [DEBUG] [Thread-16788] [transport.py] [_log()] userauth is OK
2026-04-15T09:50:25.576 [DEBUG] [Thread-16788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:50:25.576 [DEBUG] [Thread-16788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:50:25.576 [DEBUG] [Thread-16788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:50:25.576 [DEBUG] [Thread-16788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:50:25.592 [INFO] [Thread-16788] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:50:25.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:50:26.200 [DEBUG] [Thread-16788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:50:26.200 [DEBUG] [Thread-16788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:50:26.201 [DEBUG] [Thread-16788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:50:26.241 [DEBUG] [Thread-16788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:50:26.241 [DEBUG] [Thread-16788] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:50:26.243 [DEBUG] [Thread-16788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:50:26.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:50:26.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:50:26.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:50:26.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:50:26.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:50:26.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:50:26.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:50:26.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:50:26.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:50:26.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.326519 -999.00   +9.30  15.90     94   +8.50 1 3 1 3 1   888    0 0.83 7.33 ----- 15.9 15.9 311.6 19.5 12.2 -9.0 11.9 -9.6 11.4 -8.4 11.7 -7.7
2026-04-15T09:50:26.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:50:26.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:50:26.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.326519
2026-04-15T09:50:26.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:50:26.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:50:26.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:50:26.262 [DEBUG] [Thread-16788] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:50:26.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:50:26.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:50:26.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:50:02', tmtdew=0.171125, humidity=98.6647, cloud=0.0, wind=14.0454, temperature=9.20685, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:50:11.242', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:50:26.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:50:26.489 [DEBUG] [Thread-16791] [transport.py] [_log()] starting thread (client mode): 0xee905330
2026-04-15T09:50:26.489 [DEBUG] [Thread-16791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:50:26.503 [DEBUG] [Thread-16791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:50:26.503 [INFO] [Thread-16791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:50:26.510 [DEBUG] [Thread-16791] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:50:26.510 [DEBUG] [Thread-16791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:50:26.510 [DEBUG] [Thread-16791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:50:26.510 [DEBUG] [Thread-16791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:50:26.511 [DEBUG] [Thread-16791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:50:26.511 [DEBUG] [Thread-16791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:50:26.511 [DEBUG] [Thread-16791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:50:26.511 [DEBUG] [Thread-16791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:50:26.511 [DEBUG] [Thread-16791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:50:26.511 [DEBUG] [Thread-16791] [transport.py] [_log()] client lang: <none>
2026-04-15T09:50:26.511 [DEBUG] [Thread-16791] [transport.py] [_log()] server lang: <none>
2026-04-15T09:50:26.511 [DEBUG] [Thread-16791] [transport.py] [_log()] kex follows: False
2026-04-15T09:50:26.511 [DEBUG] [Thread-16791] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:50:26.511 [DEBUG] [Thread-16791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:50:26.511 [DEBUG] [Thread-16791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:50:26.511 [DEBUG] [Thread-16791] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:50:26.512 [DEBUG] [Thread-16791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:50:26.512 [DEBUG] [Thread-16791] [transport.py] [_log()] Compression: none
2026-04-15T09:50:26.512 [DEBUG] [Thread-16791] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:50:26.567 [DEBUG] [Thread-16791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:50:26.568 [DEBUG] [Thread-16791] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:50:26.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:50:26.569 [DEBUG] [Thread-16791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:50:26.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:50:26.626 [DEBUG] [Thread-16791] [transport.py] [_log()] userauth is OK
2026-04-15T09:50:26.627 [DEBUG] [Thread-16791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:50:26.627 [DEBUG] [Thread-16791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:50:26.627 [DEBUG] [Thread-16791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:50:26.627 [DEBUG] [Thread-16791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:50:26.649 [INFO] [Thread-16791] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:50:26.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:50:26.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:50:27.487 [DEBUG] [Thread-16791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:50:27.488 [DEBUG] [Thread-16791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:50:27.535 [DEBUG] [Thread-16791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:50:27.535 [DEBUG] [Thread-16791] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:50:27.544 [DEBUG] [Thread-16791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:50:27.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:50:27.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')
2026-04-15T09:50:27.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
2026-04-15T09:50:27.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:50:27.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:50:27.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:50:27.579 [DEBUG] [Thread-16791] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:50:29.682 [DEBUG] [Thread-16793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:50:44.725 [DEBUG] [Thread-16794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:50:57.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:50:57.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:50:57.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
2026-04-15T09:50:58.083 [DEBUG] [Thread-16795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:50:58.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 50, 38), 0.23735, 98.3624, 0.0, 11.4696, 9.91315, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:50:58.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:50:38
2026-04-15T09:50:59.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:50:59.686 [DEBUG] [Thread-16796] [transport.py] [_log()] starting thread (client mode): 0xf13fe410
2026-04-15T09:50:59.686 [DEBUG] [Thread-16796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:50:59.706 [DEBUG] [Thread-16796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:50:59.706 [INFO] [Thread-16796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:50:59.709 [DEBUG] [Thread-16796] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:50:59.710 [DEBUG] [Thread-16796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:50:59.710 [DEBUG] [Thread-16796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:50:59.710 [DEBUG] [Thread-16796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:50:59.710 [DEBUG] [Thread-16796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:50:59.710 [DEBUG] [Thread-16796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:50:59.710 [DEBUG] [Thread-16796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:50:59.710 [DEBUG] [Thread-16796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:50:59.710 [DEBUG] [Thread-16796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:50:59.710 [DEBUG] [Thread-16796] [transport.py] [_log()] client lang: <none>
2026-04-15T09:50:59.710 [DEBUG] [Thread-16796] [transport.py] [_log()] server lang: <none>
2026-04-15T09:50:59.710 [DEBUG] [Thread-16796] [transport.py] [_log()] kex follows: False
2026-04-15T09:50:59.710 [DEBUG] [Thread-16796] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:50:59.711 [DEBUG] [Thread-16796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:50:59.711 [DEBUG] [Thread-16796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:50:59.711 [DEBUG] [Thread-16796] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:50:59.711 [DEBUG] [Thread-16796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:50:59.711 [DEBUG] [Thread-16796] [transport.py] [_log()] Compression: none
2026-04-15T09:50:59.711 [DEBUG] [Thread-16796] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:50:59.728 [DEBUG] [Thread-16796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:50:59.729 [DEBUG] [Thread-16796] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:50:59.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:50:59.729 [DEBUG] [Thread-16796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:50:59.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:50:59.731 [DEBUG] [Thread-16796] [transport.py] [_log()] userauth is OK
2026-04-15T09:50:59.731 [DEBUG] [Thread-16796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:50:59.731 [DEBUG] [Thread-16796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:50:59.731 [DEBUG] [Thread-16796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:50:59.731 [DEBUG] [Thread-16796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:50:59.749 [INFO] [Thread-16796] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:50:59.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:50:59.757 [DEBUG] [Thread-16798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:51:00.510 [DEBUG] [Thread-16796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:51:00.510 [DEBUG] [Thread-16796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:51:00.510 [DEBUG] [Thread-16796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:51:00.551 [DEBUG] [Thread-16796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:51:00.551 [DEBUG] [Thread-16796] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:51:00.553 [DEBUG] [Thread-16796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:51:00.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:51:00.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:51:00.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:51:00.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:51:00.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:51:00.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:51:00.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:51:00.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:51:00.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:51:00.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.326519 -999.00   +9.30  15.90     94   +8.50 1 3 1 3 1   888    0 0.83 7.33 ----- 15.9 15.9 311.6 19.5 12.2 -9.0 11.9 -9.6 11.4 -8.4 11.7 -7.7
2026-04-15T09:51:00.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:51:00.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:51:00.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.326519
2026-04-15T09:51:00.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:51:00.568 [DEBUG] [Thread-16796] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:51:00.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:51:00.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:51:00.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:51:00.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:51:00.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:50:38', tmtdew=0.23735, humidity=98.3624, cloud=0.0, wind=11.4696, temperature=9.91315, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:50:11.242', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:51:00.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:51:00.823 [DEBUG] [Thread-16800] [transport.py] [_log()] starting thread (client mode): 0xee91d660
2026-04-15T09:51:00.824 [DEBUG] [Thread-16800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:51:00.837 [DEBUG] [Thread-16800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:51:00.838 [INFO] [Thread-16800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:51:00.845 [DEBUG] [Thread-16800] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:51:00.845 [DEBUG] [Thread-16800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:51:00.845 [DEBUG] [Thread-16800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:51:00.845 [DEBUG] [Thread-16800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:51:00.845 [DEBUG] [Thread-16800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:51:00.845 [DEBUG] [Thread-16800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:51:00.845 [DEBUG] [Thread-16800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:51:00.845 [DEBUG] [Thread-16800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:51:00.846 [DEBUG] [Thread-16800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:51:00.846 [DEBUG] [Thread-16800] [transport.py] [_log()] client lang: <none>
2026-04-15T09:51:00.846 [DEBUG] [Thread-16800] [transport.py] [_log()] server lang: <none>
2026-04-15T09:51:00.846 [DEBUG] [Thread-16800] [transport.py] [_log()] kex follows: False
2026-04-15T09:51:00.846 [DEBUG] [Thread-16800] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:51:00.846 [DEBUG] [Thread-16800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:51:00.846 [DEBUG] [Thread-16800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:51:00.846 [DEBUG] [Thread-16800] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:51:00.846 [DEBUG] [Thread-16800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:51:00.846 [DEBUG] [Thread-16800] [transport.py] [_log()] Compression: none
2026-04-15T09:51:00.846 [DEBUG] [Thread-16800] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:51:00.902 [DEBUG] [Thread-16800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:51:00.903 [DEBUG] [Thread-16800] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:51:00.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:51:00.903 [DEBUG] [Thread-16800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:51:00.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:51:00.959 [DEBUG] [Thread-16800] [transport.py] [_log()] userauth is OK
2026-04-15T09:51:00.959 [DEBUG] [Thread-16800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:51:00.960 [DEBUG] [Thread-16800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:51:00.960 [DEBUG] [Thread-16800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:51:00.960 [DEBUG] [Thread-16800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:51:00.985 [INFO] [Thread-16800] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:51:00.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:51:00.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:51:01.880 [DEBUG] [Thread-16800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:51:01.880 [DEBUG] [Thread-16800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:51:01.927 [DEBUG] [Thread-16800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:51:01.927 [DEBUG] [Thread-16800] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:51:01.936 [DEBUG] [Thread-16800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:51:01.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:51:01.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')
2026-04-15T09:51:01.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
2026-04-15T09:51:01.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:51:01.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:51:01.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:51:01.970 [DEBUG] [Thread-16800] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:51:14.788 [DEBUG] [Thread-16802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:51:24.249 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:51:24.250 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:51:29.833 [DEBUG] [Thread-16803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:51:31.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:51:31.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:51: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
2026-04-15T09:51:33.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 51, 13), 0.126255, 98.6314, 0.0, 12.3696, 9.38975, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:51:33.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:51:13
2026-04-15T09:51:33.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:51:34.083 [DEBUG] [Thread-16804] [transport.py] [_log()] starting thread (client mode): 0xf13e1cf0
2026-04-15T09:51:34.083 [DEBUG] [Thread-16804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:51:34.102 [DEBUG] [Thread-16804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:51:34.102 [INFO] [Thread-16804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:51:34.105 [DEBUG] [Thread-16804] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] client lang: <none>
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] server lang: <none>
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] kex follows: False
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:51:34.106 [DEBUG] [Thread-16804] [transport.py] [_log()] Compression: none
2026-04-15T09:51:34.107 [DEBUG] [Thread-16804] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:51:34.121 [DEBUG] [Thread-16804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:51:34.121 [DEBUG] [Thread-16804] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:51:34.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:51:34.122 [DEBUG] [Thread-16804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:51:34.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:51:34.123 [DEBUG] [Thread-16804] [transport.py] [_log()] userauth is OK
2026-04-15T09:51:34.123 [DEBUG] [Thread-16804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:51:34.123 [DEBUG] [Thread-16804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:51:34.123 [DEBUG] [Thread-16804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:51:34.123 [DEBUG] [Thread-16804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:51:34.136 [INFO] [Thread-16804] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:51:34.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:51:34.716 [DEBUG] [Thread-16804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:51:34.716 [DEBUG] [Thread-16804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:51:34.717 [DEBUG] [Thread-16804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:51:34.757 [DEBUG] [Thread-16804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:51:34.757 [DEBUG] [Thread-16804] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:51:34.760 [DEBUG] [Thread-16804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:51:34.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:51:34.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:51:34.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:51:34.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:51:34.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:51:34.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:51:34.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:51:34.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:51:34.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:51:34.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.327214 -999.00   +9.40  16.64     94   +8.60 1 2 1 3 1   888    0 0.87 7.40 ----- 16.6 16.6 291.0 22.3 12.3 -10.7 12.1 -12.2 11.4 -12.6 11.8 -10.0
2026-04-15T09:51:34.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:51:34.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:51:34.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.327214
2026-04-15T09:51:34.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:51:34.783 [DEBUG] [Thread-16804] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:51:34.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:51:34.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:51:34.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:51:34.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T09:51:34.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:51:13', tmtdew=0.126255, humidity=98.6314, cloud=0.0, wind=12.3696, temperature=9.38975, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:51:11.290', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:51:35.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:51:35.036 [DEBUG] [Thread-16807] [transport.py] [_log()] starting thread (client mode): 0xf13fe500
2026-04-15T09:51:35.036 [DEBUG] [Thread-16807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:51:35.050 [DEBUG] [Thread-16807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:51:35.050 [INFO] [Thread-16807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:51:35.057 [DEBUG] [Thread-16807] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:51:35.057 [DEBUG] [Thread-16807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:51:35.057 [DEBUG] [Thread-16807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:51:35.057 [DEBUG] [Thread-16807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:51:35.058 [DEBUG] [Thread-16807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:51:35.058 [DEBUG] [Thread-16807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:51:35.058 [DEBUG] [Thread-16807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:51:35.058 [DEBUG] [Thread-16807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:51:35.058 [DEBUG] [Thread-16807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:51:35.058 [DEBUG] [Thread-16807] [transport.py] [_log()] client lang: <none>
2026-04-15T09:51:35.058 [DEBUG] [Thread-16807] [transport.py] [_log()] server lang: <none>
2026-04-15T09:51:35.058 [DEBUG] [Thread-16807] [transport.py] [_log()] kex follows: False
2026-04-15T09:51:35.058 [DEBUG] [Thread-16807] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:51:35.058 [DEBUG] [Thread-16807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:51:35.058 [DEBUG] [Thread-16807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:51:35.058 [DEBUG] [Thread-16807] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:51:35.059 [DEBUG] [Thread-16807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:51:35.059 [DEBUG] [Thread-16807] [transport.py] [_log()] Compression: none
2026-04-15T09:51:35.059 [DEBUG] [Thread-16807] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:51:35.115 [DEBUG] [Thread-16807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:51:35.115 [DEBUG] [Thread-16807] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:51:35.115 [DEBUG] [Thread-16807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:51:35.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:51:35.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:51:35.176 [DEBUG] [Thread-16807] [transport.py] [_log()] userauth is OK
2026-04-15T09:51:35.176 [DEBUG] [Thread-16807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:51:35.176 [DEBUG] [Thread-16807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:51:35.176 [DEBUG] [Thread-16807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:51:35.177 [DEBUG] [Thread-16807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:51:35.202 [INFO] [Thread-16807] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:51:35.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:51:35.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:51:36.013 [DEBUG] [Thread-16807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:51:36.013 [DEBUG] [Thread-16807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:51:36.062 [DEBUG] [Thread-16807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:51:36.062 [DEBUG] [Thread-16807] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:51:36.071 [DEBUG] [Thread-16807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:51:36.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:51:36.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')
2026-04-15T09:51:36.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') -> 00000000
2026-04-15T09:51:36.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:51:36.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:51:36.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:51:36.105 [DEBUG] [Thread-16807] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:51:44.873 [DEBUG] [Thread-16809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:51:58.186 [DEBUG] [Thread-16810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:51:59.918 [DEBUG] [Thread-16811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:52:06.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:52:06.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:52:06.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
2026-04-15T09:52:07.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 51, 48), 0.2475, 98.296, 0.0, 13.7981, 9.97945, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:52:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:51:48
2026-04-15T09:52:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:52:08.240 [DEBUG] [Thread-16812] [transport.py] [_log()] starting thread (client mode): 0xf1334400
2026-04-15T09:52:08.240 [DEBUG] [Thread-16812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:52:08.255 [DEBUG] [Thread-16812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:52:08.255 [INFO] [Thread-16812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:52:08.258 [DEBUG] [Thread-16812] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:52:08.258 [DEBUG] [Thread-16812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:52:08.258 [DEBUG] [Thread-16812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:52:08.259 [DEBUG] [Thread-16812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:52:08.259 [DEBUG] [Thread-16812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:52:08.259 [DEBUG] [Thread-16812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:52:08.259 [DEBUG] [Thread-16812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:52:08.259 [DEBUG] [Thread-16812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:52:08.259 [DEBUG] [Thread-16812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:52:08.259 [DEBUG] [Thread-16812] [transport.py] [_log()] client lang: <none>
2026-04-15T09:52:08.259 [DEBUG] [Thread-16812] [transport.py] [_log()] server lang: <none>
2026-04-15T09:52:08.259 [DEBUG] [Thread-16812] [transport.py] [_log()] kex follows: False
2026-04-15T09:52:08.259 [DEBUG] [Thread-16812] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:52:08.259 [DEBUG] [Thread-16812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:52:08.259 [DEBUG] [Thread-16812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:52:08.260 [DEBUG] [Thread-16812] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:52:08.260 [DEBUG] [Thread-16812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:52:08.260 [DEBUG] [Thread-16812] [transport.py] [_log()] Compression: none
2026-04-15T09:52:08.260 [DEBUG] [Thread-16812] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:52:08.281 [DEBUG] [Thread-16812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:52:08.282 [DEBUG] [Thread-16812] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:52:08.282 [DEBUG] [Thread-16812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:52:08.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:52:08.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:52:08.283 [DEBUG] [Thread-16812] [transport.py] [_log()] userauth is OK
2026-04-15T09:52:08.283 [DEBUG] [Thread-16812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:52:08.283 [DEBUG] [Thread-16812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:52:08.283 [DEBUG] [Thread-16812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:52:08.283 [DEBUG] [Thread-16812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:52:08.306 [INFO] [Thread-16812] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:52:08.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:52:08.936 [DEBUG] [Thread-16812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:52:08.937 [DEBUG] [Thread-16812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:52:08.937 [DEBUG] [Thread-16812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:52:08.978 [DEBUG] [Thread-16812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:52:08.978 [DEBUG] [Thread-16812] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:52:08.981 [DEBUG] [Thread-16812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:52:08.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:52:08.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:52:08.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:52:08.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:52:09.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:52:09.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:52:09.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:52:09.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:52:09.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:52:09.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.327561 -999.00   +9.20  14.57     94   +8.40 1 2 1 3 1   888    0 0.85 7.09 ----- 14.6 14.6 295.2 20.2 12.4 -12.3 12.1 -13.9 11.4 -12.8 11.8 -10.9
2026-04-15T09:52:09.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:52:09.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:52:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.327561
2026-04-15T09:52:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:52:09.005 [DEBUG] [Thread-16812] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:52:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:52:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:52:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:52:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T09:52:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:51:48', tmtdew=0.2475, humidity=98.296, cloud=0.0, wind=13.7981, temperature=9.97945, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:51:41.270', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:52:09.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:52:09.257 [DEBUG] [Thread-16815] [transport.py] [_log()] starting thread (client mode): 0xf1335c00
2026-04-15T09:52:09.257 [DEBUG] [Thread-16815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:52:09.271 [DEBUG] [Thread-16815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:52:09.272 [INFO] [Thread-16815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:52:09.279 [DEBUG] [Thread-16815] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:52:09.279 [DEBUG] [Thread-16815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:52:09.279 [DEBUG] [Thread-16815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:52:09.279 [DEBUG] [Thread-16815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:52:09.279 [DEBUG] [Thread-16815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:52:09.279 [DEBUG] [Thread-16815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:52:09.280 [DEBUG] [Thread-16815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:52:09.280 [DEBUG] [Thread-16815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:52:09.280 [DEBUG] [Thread-16815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:52:09.280 [DEBUG] [Thread-16815] [transport.py] [_log()] client lang: <none>
2026-04-15T09:52:09.280 [DEBUG] [Thread-16815] [transport.py] [_log()] server lang: <none>
2026-04-15T09:52:09.280 [DEBUG] [Thread-16815] [transport.py] [_log()] kex follows: False
2026-04-15T09:52:09.280 [DEBUG] [Thread-16815] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:52:09.280 [DEBUG] [Thread-16815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:52:09.280 [DEBUG] [Thread-16815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:52:09.280 [DEBUG] [Thread-16815] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:52:09.281 [DEBUG] [Thread-16815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:52:09.281 [DEBUG] [Thread-16815] [transport.py] [_log()] Compression: none
2026-04-15T09:52:09.281 [DEBUG] [Thread-16815] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:52:09.335 [DEBUG] [Thread-16815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:52:09.336 [DEBUG] [Thread-16815] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:52:09.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:52:09.337 [DEBUG] [Thread-16815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:52:09.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:52:09.392 [DEBUG] [Thread-16815] [transport.py] [_log()] userauth is OK
2026-04-15T09:52:09.392 [DEBUG] [Thread-16815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:52:09.392 [DEBUG] [Thread-16815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:52:09.392 [DEBUG] [Thread-16815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:52:09.393 [DEBUG] [Thread-16815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:52:09.418 [INFO] [Thread-16815] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:52:09.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:52:09.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:52:10.238 [DEBUG] [Thread-16815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:52:10.238 [DEBUG] [Thread-16815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:52:10.286 [DEBUG] [Thread-16815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:52:10.286 [DEBUG] [Thread-16815] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:52:10.296 [DEBUG] [Thread-16815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:52:10.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:52:10.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')
2026-04-15T09:52:10.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
2026-04-15T09:52:10.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:52:10.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:52:10.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:52:10.331 [DEBUG] [Thread-16815] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:52:14.951 [DEBUG] [Thread-16817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:52:24.391 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:52:24.392 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:52:29.993 [DEBUG] [Thread-16818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:52:40.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:52:40.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:52:40.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
2026-04-15T09:52:41.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 52, 24), 0.178755, 98.6148, 0.0, 10.9753, 9.42313, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:52:41.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:52:24
2026-04-15T09:52:42.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:52:42.473 [DEBUG] [Thread-16819] [transport.py] [_log()] starting thread (client mode): 0xf13fe410
2026-04-15T09:52:42.473 [DEBUG] [Thread-16819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:52:42.492 [DEBUG] [Thread-16819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:52:42.492 [INFO] [Thread-16819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:52:42.494 [DEBUG] [Thread-16819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:52:42.494 [DEBUG] [Thread-16819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:52:42.494 [DEBUG] [Thread-16819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:52:42.494 [DEBUG] [Thread-16819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:52:42.494 [DEBUG] [Thread-16819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:52:42.494 [DEBUG] [Thread-16819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:52:42.494 [DEBUG] [Thread-16819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:52:42.494 [DEBUG] [Thread-16819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:52:42.494 [DEBUG] [Thread-16819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:52:42.494 [DEBUG] [Thread-16819] [transport.py] [_log()] client lang: <none>
2026-04-15T09:52:42.494 [DEBUG] [Thread-16819] [transport.py] [_log()] server lang: <none>
2026-04-15T09:52:42.494 [DEBUG] [Thread-16819] [transport.py] [_log()] kex follows: False
2026-04-15T09:52:42.495 [DEBUG] [Thread-16819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:52:42.495 [DEBUG] [Thread-16819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:52:42.495 [DEBUG] [Thread-16819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:52:42.495 [DEBUG] [Thread-16819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:52:42.495 [DEBUG] [Thread-16819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:52:42.495 [DEBUG] [Thread-16819] [transport.py] [_log()] Compression: none
2026-04-15T09:52:42.495 [DEBUG] [Thread-16819] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:52:42.511 [DEBUG] [Thread-16819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:52:42.511 [DEBUG] [Thread-16819] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:52:42.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:52:42.512 [DEBUG] [Thread-16819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:52:42.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:52:42.513 [DEBUG] [Thread-16819] [transport.py] [_log()] userauth is OK
2026-04-15T09:52:42.513 [DEBUG] [Thread-16819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:52:42.513 [DEBUG] [Thread-16819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:52:42.513 [DEBUG] [Thread-16819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:52:42.513 [DEBUG] [Thread-16819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:52:42.531 [INFO] [Thread-16819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:52:42.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:52:43.125 [DEBUG] [Thread-16819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:52:43.126 [DEBUG] [Thread-16819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:52:43.126 [DEBUG] [Thread-16819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:52:43.166 [DEBUG] [Thread-16819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:52:43.166 [DEBUG] [Thread-16819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:52:43.169 [DEBUG] [Thread-16819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:52:43.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:52:43.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:52:43.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:52:43.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:52:43.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:52:43.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:52:43.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:52:43.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:52:43.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:52:43.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.327908 -999.00   +9.30  16.16     94   +8.40 1 2 1 3 1   888    0 0.86 7.44 ----- 16.2 16.2 292.2 21.1 12.3 -12.9 12.1 -14.0 11.4 -11.5 11.8 -10.6
2026-04-15T09:52:43.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:52:43.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:52:43.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.327908
2026-04-15T09:52:43.186 [DEBUG] [Thread-16819] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:52:43.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:52:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:52:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:52:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:52:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T09:52:43.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:52:24', tmtdew=0.178755, humidity=98.6148, cloud=0.0, wind=10.9753, temperature=9.42313, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:52:11.251', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:52:43.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:52:43.442 [DEBUG] [Thread-16822] [transport.py] [_log()] starting thread (client mode): 0xf13e0d90
2026-04-15T09:52:43.442 [DEBUG] [Thread-16822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:52:43.456 [DEBUG] [Thread-16822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:52:43.457 [INFO] [Thread-16822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:52:43.464 [DEBUG] [Thread-16822] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:52:43.464 [DEBUG] [Thread-16822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:52:43.464 [DEBUG] [Thread-16822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:52:43.464 [DEBUG] [Thread-16822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:52:43.464 [DEBUG] [Thread-16822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:52:43.464 [DEBUG] [Thread-16822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:52:43.464 [DEBUG] [Thread-16822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:52:43.464 [DEBUG] [Thread-16822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:52:43.464 [DEBUG] [Thread-16822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:52:43.465 [DEBUG] [Thread-16822] [transport.py] [_log()] client lang: <none>
2026-04-15T09:52:43.465 [DEBUG] [Thread-16822] [transport.py] [_log()] server lang: <none>
2026-04-15T09:52:43.465 [DEBUG] [Thread-16822] [transport.py] [_log()] kex follows: False
2026-04-15T09:52:43.465 [DEBUG] [Thread-16822] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:52:43.465 [DEBUG] [Thread-16822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:52:43.465 [DEBUG] [Thread-16822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:52:43.465 [DEBUG] [Thread-16822] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:52:43.465 [DEBUG] [Thread-16822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:52:43.465 [DEBUG] [Thread-16822] [transport.py] [_log()] Compression: none
2026-04-15T09:52:43.465 [DEBUG] [Thread-16822] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:52:43.519 [DEBUG] [Thread-16822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:52:43.519 [DEBUG] [Thread-16822] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:52:43.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:52:43.520 [DEBUG] [Thread-16822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:52:43.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:52:43.576 [DEBUG] [Thread-16822] [transport.py] [_log()] userauth is OK
2026-04-15T09:52:43.576 [DEBUG] [Thread-16822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:52:43.577 [DEBUG] [Thread-16822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:52:43.577 [DEBUG] [Thread-16822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:52:43.577 [DEBUG] [Thread-16822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:52:43.604 [INFO] [Thread-16822] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:52:43.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:52:43.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:52:44.442 [DEBUG] [Thread-16822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:52:44.442 [DEBUG] [Thread-16822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:52:44.490 [DEBUG] [Thread-16822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:52:44.490 [DEBUG] [Thread-16822] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:52:44.499 [DEBUG] [Thread-16822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:52:44.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:52:44.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')
2026-04-15T09:52:44.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
2026-04-15T09:52:44.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:52:44.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:52:44.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:52:44.533 [DEBUG] [Thread-16822] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:52:45.024 [DEBUG] [Thread-16824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:52:58.279 [DEBUG] [Thread-16825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:53:00.067 [DEBUG] [Thread-16826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:53:14.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:53:14.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:53:14.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
2026-04-15T09:53:15.101 [DEBUG] [Thread-16827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:53:15.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 52, 59), 0.17621, 98.6314, 0.0, 12.0161, 9.33994, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:53:15.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:52:59
2026-04-15T09:53:16.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:53:16.606 [DEBUG] [Thread-16828] [transport.py] [_log()] starting thread (client mode): 0xf13c8520
2026-04-15T09:53:16.606 [DEBUG] [Thread-16828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:53:16.616 [DEBUG] [Thread-16828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:53:16.616 [INFO] [Thread-16828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:53:16.617 [DEBUG] [Thread-16828] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:53:16.617 [DEBUG] [Thread-16828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:53:16.618 [DEBUG] [Thread-16828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:53:16.618 [DEBUG] [Thread-16828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:53:16.618 [DEBUG] [Thread-16828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:53:16.618 [DEBUG] [Thread-16828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:53:16.618 [DEBUG] [Thread-16828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:53:16.618 [DEBUG] [Thread-16828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:53:16.618 [DEBUG] [Thread-16828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:53:16.618 [DEBUG] [Thread-16828] [transport.py] [_log()] client lang: <none>
2026-04-15T09:53:16.618 [DEBUG] [Thread-16828] [transport.py] [_log()] server lang: <none>
2026-04-15T09:53:16.618 [DEBUG] [Thread-16828] [transport.py] [_log()] kex follows: False
2026-04-15T09:53:16.618 [DEBUG] [Thread-16828] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:53:16.618 [DEBUG] [Thread-16828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:53:16.619 [DEBUG] [Thread-16828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:53:16.619 [DEBUG] [Thread-16828] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:53:16.619 [DEBUG] [Thread-16828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:53:16.619 [DEBUG] [Thread-16828] [transport.py] [_log()] Compression: none
2026-04-15T09:53:16.619 [DEBUG] [Thread-16828] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:53:16.629 [DEBUG] [Thread-16828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:53:16.629 [DEBUG] [Thread-16828] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:53:16.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:53:16.630 [DEBUG] [Thread-16828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:53:16.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:53:16.631 [DEBUG] [Thread-16828] [transport.py] [_log()] userauth is OK
2026-04-15T09:53:16.631 [DEBUG] [Thread-16828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:53:16.631 [DEBUG] [Thread-16828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:53:16.631 [DEBUG] [Thread-16828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:53:16.631 [DEBUG] [Thread-16828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:53:16.652 [INFO] [Thread-16828] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:53:16.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:53:17.274 [DEBUG] [Thread-16828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:53:17.275 [DEBUG] [Thread-16828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:53:17.275 [DEBUG] [Thread-16828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:53:17.315 [DEBUG] [Thread-16828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:53:17.315 [DEBUG] [Thread-16828] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:53:17.318 [DEBUG] [Thread-16828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:53:17.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:53:17.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:53:17.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:53:17.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:53:17.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:53:17.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:53:17.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:53:17.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:53:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:53:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.328602 -999.00   +9.50  11.53     94   +8.60 1 2 1 3 1   888    0 0.92 8.18 ----- 11.5 11.5 316.4 17.6 12.5 -11.3 12.2 -11.7 11.6 -8.9 11.8 -7.8
2026-04-15T09:53:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:53:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:53:17.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.328602
2026-04-15T09:53:17.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:53:17.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:53:17.341 [DEBUG] [Thread-16828] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:53:17.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:53:17.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:53:17.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T09:53:17.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:52:59', tmtdew=0.17621, humidity=98.6314, cloud=0.0, wind=12.0161, temperature=9.33994, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:53:11.213', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:53:17.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:53:17.596 [DEBUG] [Thread-16831] [transport.py] [_log()] starting thread (client mode): 0xf13c83d0
2026-04-15T09:53:17.597 [DEBUG] [Thread-16831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:53:17.618 [DEBUG] [Thread-16831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:53:17.618 [INFO] [Thread-16831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:53:17.630 [DEBUG] [Thread-16831] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:53:17.630 [DEBUG] [Thread-16831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:53:17.630 [DEBUG] [Thread-16831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:53:17.630 [DEBUG] [Thread-16831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:53:17.630 [DEBUG] [Thread-16831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:53:17.630 [DEBUG] [Thread-16831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:53:17.630 [DEBUG] [Thread-16831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:53:17.630 [DEBUG] [Thread-16831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:53:17.630 [DEBUG] [Thread-16831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:53:17.630 [DEBUG] [Thread-16831] [transport.py] [_log()] client lang: <none>
2026-04-15T09:53:17.631 [DEBUG] [Thread-16831] [transport.py] [_log()] server lang: <none>
2026-04-15T09:53:17.631 [DEBUG] [Thread-16831] [transport.py] [_log()] kex follows: False
2026-04-15T09:53:17.631 [DEBUG] [Thread-16831] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:53:17.631 [DEBUG] [Thread-16831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:53:17.631 [DEBUG] [Thread-16831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:53:17.631 [DEBUG] [Thread-16831] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:53:17.631 [DEBUG] [Thread-16831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:53:17.631 [DEBUG] [Thread-16831] [transport.py] [_log()] Compression: none
2026-04-15T09:53:17.631 [DEBUG] [Thread-16831] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:53:17.690 [DEBUG] [Thread-16831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:53:17.690 [DEBUG] [Thread-16831] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:53:17.691 [DEBUG] [Thread-16831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:53:17.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:53:17.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:53:17.749 [DEBUG] [Thread-16831] [transport.py] [_log()] userauth is OK
2026-04-15T09:53:17.749 [DEBUG] [Thread-16831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:53:17.749 [DEBUG] [Thread-16831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:53:17.749 [DEBUG] [Thread-16831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:53:17.750 [DEBUG] [Thread-16831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:53:17.776 [INFO] [Thread-16831] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:53:17.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:53:17.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:53:18.605 [DEBUG] [Thread-16831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:53:18.606 [DEBUG] [Thread-16831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:53:18.653 [DEBUG] [Thread-16831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:53:18.653 [DEBUG] [Thread-16831] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:53:18.662 [DEBUG] [Thread-16831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:53:18.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:53:18.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')
2026-04-15T09:53:18.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
2026-04-15T09:53:18.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:53:18.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:53:18.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:53:18.697 [DEBUG] [Thread-16831] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:53:24.533 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:53:24.534 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:53:30.132 [DEBUG] [Thread-16833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:53:45.179 [DEBUG] [Thread-16834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:53:48.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:53:48.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:53:48.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
2026-04-15T09:53:49.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 53, 35), 0.25242, 98.2627, 0.0, 12.1399, 9.87988, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:53:49.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:53:35
2026-04-15T09:53:50.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:53:50.827 [DEBUG] [Thread-16835] [transport.py] [_log()] starting thread (client mode): 0xf1337880
2026-04-15T09:53:50.827 [DEBUG] [Thread-16835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:53:50.847 [DEBUG] [Thread-16835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:53:50.847 [INFO] [Thread-16835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:53:50.848 [DEBUG] [Thread-16835] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:53:50.848 [DEBUG] [Thread-16835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:53:50.848 [DEBUG] [Thread-16835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:53:50.848 [DEBUG] [Thread-16835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:53:50.849 [DEBUG] [Thread-16835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:53:50.849 [DEBUG] [Thread-16835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:53:50.849 [DEBUG] [Thread-16835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:53:50.849 [DEBUG] [Thread-16835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:53:50.849 [DEBUG] [Thread-16835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:53:50.849 [DEBUG] [Thread-16835] [transport.py] [_log()] client lang: <none>
2026-04-15T09:53:50.849 [DEBUG] [Thread-16835] [transport.py] [_log()] server lang: <none>
2026-04-15T09:53:50.849 [DEBUG] [Thread-16835] [transport.py] [_log()] kex follows: False
2026-04-15T09:53:50.849 [DEBUG] [Thread-16835] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:53:50.849 [DEBUG] [Thread-16835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:53:50.849 [DEBUG] [Thread-16835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:53:50.850 [DEBUG] [Thread-16835] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:53:50.850 [DEBUG] [Thread-16835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:53:50.850 [DEBUG] [Thread-16835] [transport.py] [_log()] Compression: none
2026-04-15T09:53:50.850 [DEBUG] [Thread-16835] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:53:50.858 [DEBUG] [Thread-16835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:53:50.858 [DEBUG] [Thread-16835] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:53:50.859 [DEBUG] [Thread-16835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:53:50.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:53:50.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:53:50.860 [DEBUG] [Thread-16835] [transport.py] [_log()] userauth is OK
2026-04-15T09:53:50.860 [DEBUG] [Thread-16835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:53:50.860 [DEBUG] [Thread-16835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:53:50.860 [DEBUG] [Thread-16835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:53:50.860 [DEBUG] [Thread-16835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:53:50.878 [INFO] [Thread-16835] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:53:50.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:53:51.469 [DEBUG] [Thread-16835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:53:51.469 [DEBUG] [Thread-16835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:53:51.470 [DEBUG] [Thread-16835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:53:51.510 [DEBUG] [Thread-16835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:53:51.510 [DEBUG] [Thread-16835] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:53:51.513 [DEBUG] [Thread-16835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:53:51.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:53:51.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:53:51.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:53:51.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:53:51.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:53:51.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:53:51.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:53:51.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:53:51.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:53:51.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.328950 -999.00   +9.50  15.59     94   +8.60 1 3 1 3 1   888    0 0.91 8.43 ----- 15.6 15.6 311.8 19.8 12.5 -9.5 12.3 -9.6 11.6 -5.9 11.9 -5.7
2026-04-15T09:53:51.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:53:51.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:53:51.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.328950
2026-04-15T09:53:51.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:53:51.537 [DEBUG] [Thread-16835] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:53:51.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:53:51.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:53:51.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:53:51.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:53:51.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:53:35', tmtdew=0.25242, humidity=98.2627, cloud=0.0, wind=12.1399, temperature=9.87988, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:53:41.280', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:53:51.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:53:51.794 [DEBUG] [Thread-16838] [transport.py] [_log()] starting thread (client mode): 0xf1336560
2026-04-15T09:53:51.795 [DEBUG] [Thread-16838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:53:51.810 [DEBUG] [Thread-16838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:53:51.810 [INFO] [Thread-16838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:53:51.823 [DEBUG] [Thread-16838] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:53:51.823 [DEBUG] [Thread-16838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:53:51.823 [DEBUG] [Thread-16838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:53:51.823 [DEBUG] [Thread-16838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:53:51.823 [DEBUG] [Thread-16838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:53:51.823 [DEBUG] [Thread-16838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:53:51.823 [DEBUG] [Thread-16838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:53:51.823 [DEBUG] [Thread-16838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:53:51.823 [DEBUG] [Thread-16838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:53:51.824 [DEBUG] [Thread-16838] [transport.py] [_log()] client lang: <none>
2026-04-15T09:53:51.824 [DEBUG] [Thread-16838] [transport.py] [_log()] server lang: <none>
2026-04-15T09:53:51.824 [DEBUG] [Thread-16838] [transport.py] [_log()] kex follows: False
2026-04-15T09:53:51.824 [DEBUG] [Thread-16838] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:53:51.824 [DEBUG] [Thread-16838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:53:51.824 [DEBUG] [Thread-16838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:53:51.824 [DEBUG] [Thread-16838] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:53:51.824 [DEBUG] [Thread-16838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:53:51.824 [DEBUG] [Thread-16838] [transport.py] [_log()] Compression: none
2026-04-15T09:53:51.824 [DEBUG] [Thread-16838] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:53:51.876 [DEBUG] [Thread-16838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:53:51.876 [DEBUG] [Thread-16838] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:53:51.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:53:51.877 [DEBUG] [Thread-16838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:53:51.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:53:51.934 [DEBUG] [Thread-16838] [transport.py] [_log()] userauth is OK
2026-04-15T09:53:51.935 [DEBUG] [Thread-16838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:53:51.935 [DEBUG] [Thread-16838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:53:51.935 [DEBUG] [Thread-16838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:53:51.935 [DEBUG] [Thread-16838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:53:51.970 [INFO] [Thread-16838] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:53:51.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:53:51.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:53:52.791 [DEBUG] [Thread-16838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:53:52.791 [DEBUG] [Thread-16838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:53:52.839 [DEBUG] [Thread-16838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:53:52.839 [DEBUG] [Thread-16838] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:53:52.848 [DEBUG] [Thread-16838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:53:52.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:53:52.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')
2026-04-15T09:53:52.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
2026-04-15T09:53:52.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:53:52.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:53:52.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:53:52.889 [DEBUG] [Thread-16838] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:53:58.381 [DEBUG] [Thread-16840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:54:00.211 [DEBUG] [Thread-16841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:54:15.258 [DEBUG] [Thread-16842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:54:22.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:54:22.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:54:22.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
2026-04-15T09:54:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 54, 11), 0.1213, 98.6641, 0.0, 11.6986, 9.33944, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:54:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:54:11
2026-04-15T09:54:24.673 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:54:24.675 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:54:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:54:25.151 [DEBUG] [Thread-16843] [transport.py] [_log()] starting thread (client mode): 0xf13e2320
2026-04-15T09:54:25.151 [DEBUG] [Thread-16843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:54:25.161 [DEBUG] [Thread-16843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:54:25.161 [INFO] [Thread-16843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:54:25.163 [DEBUG] [Thread-16843] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:54:25.163 [DEBUG] [Thread-16843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:54:25.163 [DEBUG] [Thread-16843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:54:25.163 [DEBUG] [Thread-16843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:54:25.163 [DEBUG] [Thread-16843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:54:25.163 [DEBUG] [Thread-16843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:54:25.163 [DEBUG] [Thread-16843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:54:25.163 [DEBUG] [Thread-16843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:54:25.163 [DEBUG] [Thread-16843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:54:25.163 [DEBUG] [Thread-16843] [transport.py] [_log()] client lang: <none>
2026-04-15T09:54:25.163 [DEBUG] [Thread-16843] [transport.py] [_log()] server lang: <none>
2026-04-15T09:54:25.163 [DEBUG] [Thread-16843] [transport.py] [_log()] kex follows: False
2026-04-15T09:54:25.164 [DEBUG] [Thread-16843] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:54:25.164 [DEBUG] [Thread-16843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:54:25.164 [DEBUG] [Thread-16843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:54:25.164 [DEBUG] [Thread-16843] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:54:25.164 [DEBUG] [Thread-16843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:54:25.164 [DEBUG] [Thread-16843] [transport.py] [_log()] Compression: none
2026-04-15T09:54:25.164 [DEBUG] [Thread-16843] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:54:25.172 [DEBUG] [Thread-16843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:54:25.172 [DEBUG] [Thread-16843] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:54:25.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:54:25.173 [DEBUG] [Thread-16843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:54:25.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:54:25.174 [DEBUG] [Thread-16843] [transport.py] [_log()] userauth is OK
2026-04-15T09:54:25.174 [DEBUG] [Thread-16843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:54:25.174 [DEBUG] [Thread-16843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:54:25.174 [DEBUG] [Thread-16843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:54:25.174 [DEBUG] [Thread-16843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:54:25.190 [INFO] [Thread-16843] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:54:25.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:54:25.758 [DEBUG] [Thread-16843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:54:25.758 [DEBUG] [Thread-16843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:54:25.759 [DEBUG] [Thread-16843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:54:25.799 [DEBUG] [Thread-16843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:54:25.799 [DEBUG] [Thread-16843] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:54:25.802 [DEBUG] [Thread-16843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:54:25.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:54:25.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:54:25.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:54:25.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:54:25.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:54:25.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:54:25.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:54:25.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:54:25.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:54:25.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.329297 -999.00   +9.50  15.18     93   +8.60 1 3 1 3 1   888    0 0.92 8.28 ----- 15.2 15.2 288.5 16.8 12.6 -7.1 12.4 -6.4 11.6 -3.3 11.9 -3.5
2026-04-15T09:54:25.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:54:25.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:54:25.825 [DEBUG] [Thread-16843] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:54:25.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.329297
2026-04-15T09:54:25.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:54:25.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:54:25.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:54:25.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:54:25.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:54:25.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:54:11', tmtdew=0.1213, humidity=98.6641, cloud=0.0, wind=11.6986, temperature=9.33944, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:54:11.261', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:54:26.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:54:26.082 [DEBUG] [Thread-16846] [transport.py] [_log()] starting thread (client mode): 0xf1364a30
2026-04-15T09:54:26.082 [DEBUG] [Thread-16846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:54:26.098 [DEBUG] [Thread-16846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:54:26.099 [INFO] [Thread-16846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:54:26.106 [DEBUG] [Thread-16846] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:54:26.106 [DEBUG] [Thread-16846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:54:26.106 [DEBUG] [Thread-16846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:54:26.106 [DEBUG] [Thread-16846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:54:26.106 [DEBUG] [Thread-16846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:54:26.107 [DEBUG] [Thread-16846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:54:26.107 [DEBUG] [Thread-16846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:54:26.107 [DEBUG] [Thread-16846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:54:26.107 [DEBUG] [Thread-16846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:54:26.107 [DEBUG] [Thread-16846] [transport.py] [_log()] client lang: <none>
2026-04-15T09:54:26.107 [DEBUG] [Thread-16846] [transport.py] [_log()] server lang: <none>
2026-04-15T09:54:26.107 [DEBUG] [Thread-16846] [transport.py] [_log()] kex follows: False
2026-04-15T09:54:26.107 [DEBUG] [Thread-16846] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:54:26.107 [DEBUG] [Thread-16846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:54:26.107 [DEBUG] [Thread-16846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:54:26.107 [DEBUG] [Thread-16846] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:54:26.107 [DEBUG] [Thread-16846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:54:26.108 [DEBUG] [Thread-16846] [transport.py] [_log()] Compression: none
2026-04-15T09:54:26.108 [DEBUG] [Thread-16846] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:54:26.165 [DEBUG] [Thread-16846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:54:26.165 [DEBUG] [Thread-16846] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:54:26.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:54:26.166 [DEBUG] [Thread-16846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:54:26.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:54:26.221 [DEBUG] [Thread-16846] [transport.py] [_log()] userauth is OK
2026-04-15T09:54:26.221 [DEBUG] [Thread-16846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:54:26.221 [DEBUG] [Thread-16846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:54:26.221 [DEBUG] [Thread-16846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:54:26.221 [DEBUG] [Thread-16846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:54:26.240 [INFO] [Thread-16846] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:54:26.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:54:26.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:54:27.108 [DEBUG] [Thread-16846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:54:27.108 [DEBUG] [Thread-16846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:54:27.156 [DEBUG] [Thread-16846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:54:27.156 [DEBUG] [Thread-16846] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:54:27.165 [DEBUG] [Thread-16846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:54:27.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:54:27.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')
2026-04-15T09:54:27.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
2026-04-15T09:54:27.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:54:27.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:54:27.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:54:27.201 [DEBUG] [Thread-16846] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:54:30.289 [DEBUG] [Thread-16848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:54:45.333 [DEBUG] [Thread-16849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:54:57.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:54:57.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:54:57.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:54:58.486 [DEBUG] [Thread-16850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:54:58.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 54, 47), 0.2826, 98.0628, 0.0, 14.6448, 9.77983, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:54:58.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:54:47
2026-04-15T09:54:58.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:54:59.361 [DEBUG] [Thread-16851] [transport.py] [_log()] starting thread (client mode): 0xf13ef280
2026-04-15T09:54:59.361 [DEBUG] [Thread-16851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:54:59.380 [DEBUG] [Thread-16851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:54:59.381 [INFO] [Thread-16851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:54:59.383 [DEBUG] [Thread-16851] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:54:59.383 [DEBUG] [Thread-16851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:54:59.384 [DEBUG] [Thread-16851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:54:59.384 [DEBUG] [Thread-16851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:54:59.384 [DEBUG] [Thread-16851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:54:59.384 [DEBUG] [Thread-16851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:54:59.384 [DEBUG] [Thread-16851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:54:59.384 [DEBUG] [Thread-16851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:54:59.384 [DEBUG] [Thread-16851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:54:59.384 [DEBUG] [Thread-16851] [transport.py] [_log()] client lang: <none>
2026-04-15T09:54:59.384 [DEBUG] [Thread-16851] [transport.py] [_log()] server lang: <none>
2026-04-15T09:54:59.384 [DEBUG] [Thread-16851] [transport.py] [_log()] kex follows: False
2026-04-15T09:54:59.384 [DEBUG] [Thread-16851] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:54:59.385 [DEBUG] [Thread-16851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:54:59.385 [DEBUG] [Thread-16851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:54:59.385 [DEBUG] [Thread-16851] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:54:59.385 [DEBUG] [Thread-16851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:54:59.385 [DEBUG] [Thread-16851] [transport.py] [_log()] Compression: none
2026-04-15T09:54:59.385 [DEBUG] [Thread-16851] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:54:59.402 [DEBUG] [Thread-16851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:54:59.402 [DEBUG] [Thread-16851] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:54:59.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:54:59.403 [DEBUG] [Thread-16851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:54:59.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:54:59.404 [DEBUG] [Thread-16851] [transport.py] [_log()] userauth is OK
2026-04-15T09:54:59.404 [DEBUG] [Thread-16851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:54:59.404 [DEBUG] [Thread-16851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:54:59.404 [DEBUG] [Thread-16851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:54:59.404 [DEBUG] [Thread-16851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:54:59.429 [INFO] [Thread-16851] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:54:59.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:55:00.038 [DEBUG] [Thread-16851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:55:00.038 [DEBUG] [Thread-16851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:55:00.039 [DEBUG] [Thread-16851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:55:00.079 [DEBUG] [Thread-16851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:55:00.079 [DEBUG] [Thread-16851] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:55:00.083 [DEBUG] [Thread-16851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:55:00.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:55:00.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:55:00.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:55:00.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:55:00.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:55:00.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:55:00.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:55:00.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:55:00.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:55:00.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.329644 -999.00   +9.50  14.99     93   +8.60 1 3 1 3 1   888    0 0.95 8.48 ----- 15.0 15.0 302.0 17.7 12.7 -4.7 12.4 -4.1 11.8 -2.8 12.0 -2.6
2026-04-15T09:55:00.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:55:00.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:55:00.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.329644
2026-04-15T09:55:00.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:55:00.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:55:00.107 [DEBUG] [Thread-16851] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:55:00.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:55:00.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:55:00.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:55:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:54:47', tmtdew=0.2826, humidity=98.0628, cloud=0.0, wind=14.6448, temperature=9.77983, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:54:41.242', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:55:00.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:55:00.361 [DEBUG] [Thread-16854] [transport.py] [_log()] starting thread (client mode): 0xee925c30
2026-04-15T09:55:00.361 [DEBUG] [Thread-16854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:55:00.363 [DEBUG] [Thread-16855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:55:00.375 [DEBUG] [Thread-16854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:55:00.375 [INFO] [Thread-16854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:55:00.382 [DEBUG] [Thread-16854] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:55:00.382 [DEBUG] [Thread-16854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:55:00.382 [DEBUG] [Thread-16854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:55:00.383 [DEBUG] [Thread-16854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:55:00.383 [DEBUG] [Thread-16854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:55:00.383 [DEBUG] [Thread-16854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:55:00.383 [DEBUG] [Thread-16854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:55:00.383 [DEBUG] [Thread-16854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:55:00.383 [DEBUG] [Thread-16854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:55:00.383 [DEBUG] [Thread-16854] [transport.py] [_log()] client lang: <none>
2026-04-15T09:55:00.383 [DEBUG] [Thread-16854] [transport.py] [_log()] server lang: <none>
2026-04-15T09:55:00.383 [DEBUG] [Thread-16854] [transport.py] [_log()] kex follows: False
2026-04-15T09:55:00.383 [DEBUG] [Thread-16854] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:55:00.383 [DEBUG] [Thread-16854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:55:00.383 [DEBUG] [Thread-16854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:55:00.384 [DEBUG] [Thread-16854] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:55:00.384 [DEBUG] [Thread-16854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:55:00.384 [DEBUG] [Thread-16854] [transport.py] [_log()] Compression: none
2026-04-15T09:55:00.384 [DEBUG] [Thread-16854] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:55:00.441 [DEBUG] [Thread-16854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:55:00.441 [DEBUG] [Thread-16854] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:55:00.442 [DEBUG] [Thread-16854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:55:00.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:55:00.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:55:00.498 [DEBUG] [Thread-16854] [transport.py] [_log()] userauth is OK
2026-04-15T09:55:00.498 [DEBUG] [Thread-16854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:55:00.499 [DEBUG] [Thread-16854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:55:00.499 [DEBUG] [Thread-16854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:55:00.499 [DEBUG] [Thread-16854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:55:00.524 [INFO] [Thread-16854] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:55:00.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:55:00.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:55:01.358 [DEBUG] [Thread-16854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:55:01.358 [DEBUG] [Thread-16854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:55:01.408 [DEBUG] [Thread-16854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:55:01.408 [DEBUG] [Thread-16854] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:55:01.417 [DEBUG] [Thread-16854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:55:01.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:55:01.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')
2026-04-15T09:55:01.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
2026-04-15T09:55:01.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:55:01.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:55:01.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:55:01.451 [DEBUG] [Thread-16854] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:55:15.404 [DEBUG] [Thread-16857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:55:24.816 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:55:24.817 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:55:30.436 [DEBUG] [Thread-16858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:55:31.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:55:31.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:55:31.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
2026-04-15T09:55:32.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 55, 22), 0.181355, 98.5974, 0.0, 11.0635, 9.28946, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:55:32.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:55:22
2026-04-15T09:55:33.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:55:33.630 [DEBUG] [Thread-16859] [transport.py] [_log()] starting thread (client mode): 0xf13ef4c0
2026-04-15T09:55:33.630 [DEBUG] [Thread-16859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:55:33.649 [DEBUG] [Thread-16859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:55:33.650 [INFO] [Thread-16859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:55:33.653 [DEBUG] [Thread-16859] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:55:33.653 [DEBUG] [Thread-16859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:55:33.653 [DEBUG] [Thread-16859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:55:33.653 [DEBUG] [Thread-16859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:55:33.653 [DEBUG] [Thread-16859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:55:33.653 [DEBUG] [Thread-16859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:55:33.653 [DEBUG] [Thread-16859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:55:33.653 [DEBUG] [Thread-16859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:55:33.653 [DEBUG] [Thread-16859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:55:33.653 [DEBUG] [Thread-16859] [transport.py] [_log()] client lang: <none>
2026-04-15T09:55:33.653 [DEBUG] [Thread-16859] [transport.py] [_log()] server lang: <none>
2026-04-15T09:55:33.654 [DEBUG] [Thread-16859] [transport.py] [_log()] kex follows: False
2026-04-15T09:55:33.654 [DEBUG] [Thread-16859] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:55:33.654 [DEBUG] [Thread-16859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:55:33.654 [DEBUG] [Thread-16859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:55:33.654 [DEBUG] [Thread-16859] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:55:33.654 [DEBUG] [Thread-16859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:55:33.654 [DEBUG] [Thread-16859] [transport.py] [_log()] Compression: none
2026-04-15T09:55:33.654 [DEBUG] [Thread-16859] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:55:33.673 [DEBUG] [Thread-16859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:55:33.674 [DEBUG] [Thread-16859] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:55:33.674 [DEBUG] [Thread-16859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:55:33.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:55:33.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:55:33.675 [DEBUG] [Thread-16859] [transport.py] [_log()] userauth is OK
2026-04-15T09:55:33.676 [DEBUG] [Thread-16859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:55:33.676 [DEBUG] [Thread-16859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:55:33.676 [DEBUG] [Thread-16859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:55:33.676 [DEBUG] [Thread-16859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:55:33.701 [INFO] [Thread-16859] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:55:33.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:55:34.478 [DEBUG] [Thread-16859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:55:34.479 [DEBUG] [Thread-16859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:55:34.479 [DEBUG] [Thread-16859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:55:34.520 [DEBUG] [Thread-16859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:55:34.520 [DEBUG] [Thread-16859] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:55:34.522 [DEBUG] [Thread-16859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:55:34.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:55:34.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:55:34.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:55:34.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:55:34.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:55:34.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:55:34.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:55:34.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:55:34.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:55:34.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.329644 -999.00   +9.50  14.99     93   +8.60 1 3 1 3 1   888    0 0.95 8.48 ----- 15.0 15.0 302.0 17.7 12.7 -4.7 12.4 -4.1 11.8 -2.8 12.0 -2.6
2026-04-15T09:55:34.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:55:34.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:55:34.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.329644
2026-04-15T09:55:34.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:55:34.594 [DEBUG] [Thread-16859] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:55:34.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:55:34.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:55:34.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:55:34.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:55:34.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:55:22', tmtdew=0.181355, humidity=98.5974, cloud=0.0, wind=11.0635, temperature=9.28946, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:54:41.242', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:55:34.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:55:34.849 [DEBUG] [Thread-16862] [transport.py] [_log()] starting thread (client mode): 0xf13ef5b0
2026-04-15T09:55:34.849 [DEBUG] [Thread-16862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:55:34.863 [DEBUG] [Thread-16862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:55:34.863 [INFO] [Thread-16862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:55:34.871 [DEBUG] [Thread-16862] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:55:34.872 [DEBUG] [Thread-16862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:55:34.872 [DEBUG] [Thread-16862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:55:34.872 [DEBUG] [Thread-16862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:55:34.872 [DEBUG] [Thread-16862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:55:34.872 [DEBUG] [Thread-16862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:55:34.872 [DEBUG] [Thread-16862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:55:34.872 [DEBUG] [Thread-16862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:55:34.872 [DEBUG] [Thread-16862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:55:34.872 [DEBUG] [Thread-16862] [transport.py] [_log()] client lang: <none>
2026-04-15T09:55:34.872 [DEBUG] [Thread-16862] [transport.py] [_log()] server lang: <none>
2026-04-15T09:55:34.873 [DEBUG] [Thread-16862] [transport.py] [_log()] kex follows: False
2026-04-15T09:55:34.873 [DEBUG] [Thread-16862] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:55:34.873 [DEBUG] [Thread-16862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:55:34.873 [DEBUG] [Thread-16862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:55:34.873 [DEBUG] [Thread-16862] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:55:34.873 [DEBUG] [Thread-16862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:55:34.873 [DEBUG] [Thread-16862] [transport.py] [_log()] Compression: none
2026-04-15T09:55:34.873 [DEBUG] [Thread-16862] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:55:34.889 [DEBUG] [Thread-16862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:55:34.889 [DEBUG] [Thread-16862] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:55:34.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:55:34.890 [DEBUG] [Thread-16862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:55:34.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:55:34.946 [DEBUG] [Thread-16862] [transport.py] [_log()] userauth is OK
2026-04-15T09:55:34.946 [DEBUG] [Thread-16862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:55:34.946 [DEBUG] [Thread-16862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:55:34.947 [DEBUG] [Thread-16862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:55:34.947 [DEBUG] [Thread-16862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:55:34.971 [INFO] [Thread-16862] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:55:34.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:55:34.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:55:35.812 [DEBUG] [Thread-16862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:55:35.812 [DEBUG] [Thread-16862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:55:35.860 [DEBUG] [Thread-16862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:55:35.860 [DEBUG] [Thread-16862] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:55:35.869 [DEBUG] [Thread-16862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:55:35.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:55:35.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')
2026-04-15T09:55:35.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') -> 00000000
2026-04-15T09:55:35.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:55:35.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:55:35.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:55:35.904 [DEBUG] [Thread-16862] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:55:45.467 [DEBUG] [Thread-16864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:55:58.581 [DEBUG] [Thread-16865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:56:00.508 [DEBUG] [Thread-16866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:56:05.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:56:05.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:56:05.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
2026-04-15T09:56:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 55, 58), 0.181355, 98.5974, 0.0, 13.0046, 9.33947, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:56:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:55:58
2026-04-15T09:56:07.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:56:08.160 [DEBUG] [Thread-16867] [transport.py] [_log()] starting thread (client mode): 0xf13ed810
2026-04-15T09:56:08.160 [DEBUG] [Thread-16867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:56:08.170 [DEBUG] [Thread-16867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:56:08.170 [INFO] [Thread-16867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:56:08.174 [DEBUG] [Thread-16867] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:56:08.174 [DEBUG] [Thread-16867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:56:08.174 [DEBUG] [Thread-16867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:56:08.174 [DEBUG] [Thread-16867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:56:08.174 [DEBUG] [Thread-16867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:56:08.174 [DEBUG] [Thread-16867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:56:08.174 [DEBUG] [Thread-16867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:56:08.174 [DEBUG] [Thread-16867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:56:08.174 [DEBUG] [Thread-16867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:56:08.174 [DEBUG] [Thread-16867] [transport.py] [_log()] client lang: <none>
2026-04-15T09:56:08.175 [DEBUG] [Thread-16867] [transport.py] [_log()] server lang: <none>
2026-04-15T09:56:08.175 [DEBUG] [Thread-16867] [transport.py] [_log()] kex follows: False
2026-04-15T09:56:08.175 [DEBUG] [Thread-16867] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:56:08.175 [DEBUG] [Thread-16867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:56:08.175 [DEBUG] [Thread-16867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:56:08.175 [DEBUG] [Thread-16867] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:56:08.175 [DEBUG] [Thread-16867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:56:08.175 [DEBUG] [Thread-16867] [transport.py] [_log()] Compression: none
2026-04-15T09:56:08.175 [DEBUG] [Thread-16867] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:56:08.191 [DEBUG] [Thread-16867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:56:08.191 [DEBUG] [Thread-16867] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:56:08.192 [DEBUG] [Thread-16867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:56:08.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:56:08.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:56:08.193 [DEBUG] [Thread-16867] [transport.py] [_log()] userauth is OK
2026-04-15T09:56:08.193 [DEBUG] [Thread-16867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:56:08.193 [DEBUG] [Thread-16867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:56:08.193 [DEBUG] [Thread-16867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:56:08.193 [DEBUG] [Thread-16867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:56:08.209 [INFO] [Thread-16867] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:56:08.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:56:08.783 [DEBUG] [Thread-16867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:56:08.783 [DEBUG] [Thread-16867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:56:08.783 [DEBUG] [Thread-16867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:56:08.824 [DEBUG] [Thread-16867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:56:08.824 [DEBUG] [Thread-16867] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:56:08.827 [DEBUG] [Thread-16867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:56:08.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:56:08.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:56:08.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:56:08.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:56:08.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:56:08.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:56:08.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:56:08.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:56:08.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:56:08.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.330340 -999.00   +9.50  10.95     93   +8.60 1 3 1 3 1   888    0 1.01 10.76 ----- 10.9 10.9 301.8 14.4 12.8 -3.4 12.5 -3.5 11.9 -2.6 12.2 -2.1
2026-04-15T09:56:08.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:56:08.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:56:08.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.330340
2026-04-15T09:56:08.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:56:08.851 [DEBUG] [Thread-16867] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:56:08.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:56:08.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:56:08.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:56:08.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:56:08.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:55:58', tmtdew=0.181355, humidity=98.5974, cloud=0.0, wind=13.0046, temperature=9.33947, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:55:41.376', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:56:09.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:56:09.105 [DEBUG] [Thread-16870] [transport.py] [_log()] starting thread (client mode): 0xee91f970
2026-04-15T09:56:09.105 [DEBUG] [Thread-16870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:56:09.119 [DEBUG] [Thread-16870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:56:09.120 [INFO] [Thread-16870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:56:09.128 [DEBUG] [Thread-16870] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:56:09.128 [DEBUG] [Thread-16870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:56:09.128 [DEBUG] [Thread-16870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:56:09.128 [DEBUG] [Thread-16870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:56:09.128 [DEBUG] [Thread-16870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:56:09.128 [DEBUG] [Thread-16870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:56:09.128 [DEBUG] [Thread-16870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:56:09.128 [DEBUG] [Thread-16870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:56:09.128 [DEBUG] [Thread-16870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:56:09.129 [DEBUG] [Thread-16870] [transport.py] [_log()] client lang: <none>
2026-04-15T09:56:09.129 [DEBUG] [Thread-16870] [transport.py] [_log()] server lang: <none>
2026-04-15T09:56:09.129 [DEBUG] [Thread-16870] [transport.py] [_log()] kex follows: False
2026-04-15T09:56:09.129 [DEBUG] [Thread-16870] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:56:09.129 [DEBUG] [Thread-16870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:56:09.129 [DEBUG] [Thread-16870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:56:09.129 [DEBUG] [Thread-16870] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:56:09.129 [DEBUG] [Thread-16870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:56:09.129 [DEBUG] [Thread-16870] [transport.py] [_log()] Compression: none
2026-04-15T09:56:09.129 [DEBUG] [Thread-16870] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:56:09.186 [DEBUG] [Thread-16870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:56:09.186 [DEBUG] [Thread-16870] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:56:09.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:56:09.187 [DEBUG] [Thread-16870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:56:09.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:56:09.242 [DEBUG] [Thread-16870] [transport.py] [_log()] userauth is OK
2026-04-15T09:56:09.242 [DEBUG] [Thread-16870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:56:09.242 [DEBUG] [Thread-16870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:56:09.243 [DEBUG] [Thread-16870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:56:09.243 [DEBUG] [Thread-16870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:56:09.260 [INFO] [Thread-16870] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:56:09.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:56:09.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:56:10.105 [DEBUG] [Thread-16870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:56:10.106 [DEBUG] [Thread-16870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:56:10.154 [DEBUG] [Thread-16870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:56:10.154 [DEBUG] [Thread-16870] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:56:10.163 [DEBUG] [Thread-16870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:56:10.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:56:10.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')
2026-04-15T09:56:10.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') -> 00000000
2026-04-15T09:56:10.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:56:10.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:56:10.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:56:10.198 [DEBUG] [Thread-16870] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:56:15.541 [DEBUG] [Thread-16872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:56:24.957 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:56:24.958 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:56:30.579 [DEBUG] [Thread-16873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:56:40.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:56:40.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:56:40.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
2026-04-15T09:56:41.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 56, 34), 0.26775, 98.1619, 0.0, 14.8565, 9.91226, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:56:41.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:56:34
2026-04-15T09:56:41.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:56:42.330 [DEBUG] [Thread-16874] [transport.py] [_log()] starting thread (client mode): 0xf13efdf0
2026-04-15T09:56:42.330 [DEBUG] [Thread-16874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:56:42.350 [DEBUG] [Thread-16874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:56:42.350 [INFO] [Thread-16874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:56:42.353 [DEBUG] [Thread-16874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:56:42.354 [DEBUG] [Thread-16874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:56:42.354 [DEBUG] [Thread-16874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:56:42.354 [DEBUG] [Thread-16874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:56:42.354 [DEBUG] [Thread-16874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:56:42.354 [DEBUG] [Thread-16874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:56:42.354 [DEBUG] [Thread-16874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:56:42.354 [DEBUG] [Thread-16874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:56:42.354 [DEBUG] [Thread-16874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:56:42.354 [DEBUG] [Thread-16874] [transport.py] [_log()] client lang: <none>
2026-04-15T09:56:42.354 [DEBUG] [Thread-16874] [transport.py] [_log()] server lang: <none>
2026-04-15T09:56:42.354 [DEBUG] [Thread-16874] [transport.py] [_log()] kex follows: False
2026-04-15T09:56:42.355 [DEBUG] [Thread-16874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:56:42.355 [DEBUG] [Thread-16874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:56:42.355 [DEBUG] [Thread-16874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:56:42.355 [DEBUG] [Thread-16874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:56:42.355 [DEBUG] [Thread-16874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:56:42.355 [DEBUG] [Thread-16874] [transport.py] [_log()] Compression: none
2026-04-15T09:56:42.355 [DEBUG] [Thread-16874] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:56:42.374 [DEBUG] [Thread-16874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:56:42.374 [DEBUG] [Thread-16874] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:56:42.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:56:42.375 [DEBUG] [Thread-16874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:56:42.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:56:42.376 [DEBUG] [Thread-16874] [transport.py] [_log()] userauth is OK
2026-04-15T09:56:42.376 [DEBUG] [Thread-16874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:56:42.376 [DEBUG] [Thread-16874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:56:42.376 [DEBUG] [Thread-16874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:56:42.376 [DEBUG] [Thread-16874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:56:42.401 [INFO] [Thread-16874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:56:42.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:56:43.120 [DEBUG] [Thread-16874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:56:43.120 [DEBUG] [Thread-16874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:56:43.121 [DEBUG] [Thread-16874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:56:43.161 [DEBUG] [Thread-16874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:56:43.161 [DEBUG] [Thread-16874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:56:43.163 [DEBUG] [Thread-16874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:56:43.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:56:43.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:56:43.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:56:43.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:56:43.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:56:43.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:56:43.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:56:43.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:56:43.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:56:43.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.330340 -999.00   +9.50  10.95     93   +8.60 1 3 1 3 1   888    0 1.01 10.76 ----- 10.9 10.9 301.8 14.4 12.8 -3.4 12.5 -3.5 11.9 -2.6 12.2 -2.1
2026-04-15T09:56:43.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:56:43.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:56:43.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.330340
2026-04-15T09:56:43.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:56:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:56:43.188 [DEBUG] [Thread-16874] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:56:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:56:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:56:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:56:43.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:56:34', tmtdew=0.26775, humidity=98.1619, cloud=0.0, wind=14.8565, temperature=9.91226, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:55:41.376', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:56:43.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:56:43.440 [DEBUG] [Thread-16877] [transport.py] [_log()] starting thread (client mode): 0xf13ee0e0
2026-04-15T09:56:43.441 [DEBUG] [Thread-16877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:56:43.455 [DEBUG] [Thread-16877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:56:43.455 [INFO] [Thread-16877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:56:43.462 [DEBUG] [Thread-16877] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:56:43.462 [DEBUG] [Thread-16877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:56:43.462 [DEBUG] [Thread-16877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:56:43.462 [DEBUG] [Thread-16877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:56:43.462 [DEBUG] [Thread-16877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:56:43.462 [DEBUG] [Thread-16877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:56:43.462 [DEBUG] [Thread-16877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:56:43.462 [DEBUG] [Thread-16877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:56:43.462 [DEBUG] [Thread-16877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:56:43.463 [DEBUG] [Thread-16877] [transport.py] [_log()] client lang: <none>
2026-04-15T09:56:43.463 [DEBUG] [Thread-16877] [transport.py] [_log()] server lang: <none>
2026-04-15T09:56:43.463 [DEBUG] [Thread-16877] [transport.py] [_log()] kex follows: False
2026-04-15T09:56:43.463 [DEBUG] [Thread-16877] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:56:43.463 [DEBUG] [Thread-16877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:56:43.463 [DEBUG] [Thread-16877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:56:43.463 [DEBUG] [Thread-16877] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:56:43.463 [DEBUG] [Thread-16877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:56:43.463 [DEBUG] [Thread-16877] [transport.py] [_log()] Compression: none
2026-04-15T09:56:43.463 [DEBUG] [Thread-16877] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:56:43.522 [DEBUG] [Thread-16877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:56:43.522 [DEBUG] [Thread-16877] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:56:43.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:56:43.523 [DEBUG] [Thread-16877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:56:43.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:56:43.579 [DEBUG] [Thread-16877] [transport.py] [_log()] userauth is OK
2026-04-15T09:56:43.580 [DEBUG] [Thread-16877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:56:43.580 [DEBUG] [Thread-16877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:56:43.580 [DEBUG] [Thread-16877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:56:43.580 [DEBUG] [Thread-16877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:56:43.603 [INFO] [Thread-16877] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:56:43.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:56:43.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:56:44.420 [DEBUG] [Thread-16877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:56:44.420 [DEBUG] [Thread-16877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:56:44.468 [DEBUG] [Thread-16877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:56:44.468 [DEBUG] [Thread-16877] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:56:44.477 [DEBUG] [Thread-16877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:56:44.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:56:44.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')
2026-04-15T09:56:44.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
2026-04-15T09:56:44.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:56:44.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:56:44.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:56:44.513 [DEBUG] [Thread-16877] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:56:45.611 [DEBUG] [Thread-16879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:56:58.673 [DEBUG] [Thread-16880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:57:00.653 [DEBUG] [Thread-16881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:57:14.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:57:14.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:57:14.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
2026-04-15T09:57:15.686 [DEBUG] [Thread-16882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:57:15.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 56, 34), 0.26775, 98.1619, 0.0, 14.8565, 9.91226, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:57:15.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:56:34
2026-04-15T09:57:16.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:57:16.675 [DEBUG] [Thread-16883] [transport.py] [_log()] starting thread (client mode): 0xee925ea0
2026-04-15T09:57:16.675 [DEBUG] [Thread-16883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:57:16.687 [DEBUG] [Thread-16883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:57:16.687 [INFO] [Thread-16883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:57:16.688 [DEBUG] [Thread-16883] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:57:16.688 [DEBUG] [Thread-16883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:57:16.688 [DEBUG] [Thread-16883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:57:16.689 [DEBUG] [Thread-16883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:57:16.689 [DEBUG] [Thread-16883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:57:16.689 [DEBUG] [Thread-16883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:57:16.689 [DEBUG] [Thread-16883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:57:16.689 [DEBUG] [Thread-16883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:57:16.689 [DEBUG] [Thread-16883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:57:16.689 [DEBUG] [Thread-16883] [transport.py] [_log()] client lang: <none>
2026-04-15T09:57:16.689 [DEBUG] [Thread-16883] [transport.py] [_log()] server lang: <none>
2026-04-15T09:57:16.689 [DEBUG] [Thread-16883] [transport.py] [_log()] kex follows: False
2026-04-15T09:57:16.689 [DEBUG] [Thread-16883] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:57:16.689 [DEBUG] [Thread-16883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:57:16.689 [DEBUG] [Thread-16883] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:57:16.689 [DEBUG] [Thread-16883] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:57:16.690 [DEBUG] [Thread-16883] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:57:16.690 [DEBUG] [Thread-16883] [transport.py] [_log()] Compression: none
2026-04-15T09:57:16.690 [DEBUG] [Thread-16883] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:57:16.698 [DEBUG] [Thread-16883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:57:16.699 [DEBUG] [Thread-16883] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:57:16.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:57:16.700 [DEBUG] [Thread-16883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:57:16.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:57:16.700 [DEBUG] [Thread-16883] [transport.py] [_log()] userauth is OK
2026-04-15T09:57:16.700 [DEBUG] [Thread-16883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:57:16.700 [DEBUG] [Thread-16883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:57:16.701 [DEBUG] [Thread-16883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:57:16.701 [DEBUG] [Thread-16883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:57:16.720 [INFO] [Thread-16883] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:57:16.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:57:17.347 [DEBUG] [Thread-16883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:57:17.348 [DEBUG] [Thread-16883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:57:17.348 [DEBUG] [Thread-16883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:57:17.388 [DEBUG] [Thread-16883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:57:17.388 [DEBUG] [Thread-16883] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:57:17.391 [DEBUG] [Thread-16883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:57:17.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:57:17.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:57:17.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:57:17.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:57:17.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:57:17.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:57:17.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:57:17.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:57:17.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:57:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.331380 -999.00   +9.50  15.29     93   +8.50 1 3 1 3 1   888    0 1.06 11.66 ----- 15.3 15.3 299.6 17.3 13.0 -3.6 12.7 -3.7 12.1 -3.2 12.4 -2.9
2026-04-15T09:57:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:57:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:57:17.408 [DEBUG] [Thread-16883] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:57:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.331380
2026-04-15T09:57:17.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:57:17.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:57:17.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:57:17.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:57:17.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:57:17.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:56:34', tmtdew=0.26775, humidity=98.1619, cloud=0.0, wind=14.8565, temperature=9.91226, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:57:11.232', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:57:17.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:57:17.664 [DEBUG] [Thread-16886] [transport.py] [_log()] starting thread (client mode): 0xee927af0
2026-04-15T09:57:17.664 [DEBUG] [Thread-16886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:57:17.678 [DEBUG] [Thread-16886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:57:17.678 [INFO] [Thread-16886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:57:17.686 [DEBUG] [Thread-16886] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:57:17.686 [DEBUG] [Thread-16886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:57:17.686 [DEBUG] [Thread-16886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:57:17.686 [DEBUG] [Thread-16886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:57:17.686 [DEBUG] [Thread-16886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:57:17.686 [DEBUG] [Thread-16886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:57:17.686 [DEBUG] [Thread-16886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:57:17.686 [DEBUG] [Thread-16886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:57:17.686 [DEBUG] [Thread-16886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:57:17.686 [DEBUG] [Thread-16886] [transport.py] [_log()] client lang: <none>
2026-04-15T09:57:17.687 [DEBUG] [Thread-16886] [transport.py] [_log()] server lang: <none>
2026-04-15T09:57:17.687 [DEBUG] [Thread-16886] [transport.py] [_log()] kex follows: False
2026-04-15T09:57:17.687 [DEBUG] [Thread-16886] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:57:17.687 [DEBUG] [Thread-16886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:57:17.687 [DEBUG] [Thread-16886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:57:17.687 [DEBUG] [Thread-16886] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:57:17.687 [DEBUG] [Thread-16886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:57:17.687 [DEBUG] [Thread-16886] [transport.py] [_log()] Compression: none
2026-04-15T09:57:17.687 [DEBUG] [Thread-16886] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:57:17.742 [DEBUG] [Thread-16886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:57:17.742 [DEBUG] [Thread-16886] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:57:17.743 [DEBUG] [Thread-16886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:57:17.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:57:17.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:57:17.799 [DEBUG] [Thread-16886] [transport.py] [_log()] userauth is OK
2026-04-15T09:57:17.799 [DEBUG] [Thread-16886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:57:17.799 [DEBUG] [Thread-16886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:57:17.800 [DEBUG] [Thread-16886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:57:17.800 [DEBUG] [Thread-16886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:57:17.825 [INFO] [Thread-16886] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:57:17.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:57:17.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:57:18.648 [DEBUG] [Thread-16886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:57:18.648 [DEBUG] [Thread-16886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:57:18.699 [DEBUG] [Thread-16886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:57:18.699 [DEBUG] [Thread-16886] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:57:18.709 [DEBUG] [Thread-16886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:57:18.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:57:18.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')
2026-04-15T09:57:18.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') -> 00000000
2026-04-15T09:57:18.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:57:18.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:57:18.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:57:18.743 [DEBUG] [Thread-16886] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:57:25.098 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:57:25.099 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:57:30.716 [DEBUG] [Thread-16888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:57:45.756 [DEBUG] [Thread-16889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:57:48.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:57:48.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:57:48.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
2026-04-15T09:57:50.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 57, 9), 0.18134, 98.5975, 0.0, 13.181, 9.33955, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:57:50.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:57:09
2026-04-15T09:57:50.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:57:50.884 [DEBUG] [Thread-16890] [transport.py] [_log()] starting thread (client mode): 0xf1336b90
2026-04-15T09:57:50.884 [DEBUG] [Thread-16890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:57:50.904 [DEBUG] [Thread-16890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:57:50.904 [INFO] [Thread-16890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:57:50.907 [DEBUG] [Thread-16890] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:57:50.907 [DEBUG] [Thread-16890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:57:50.907 [DEBUG] [Thread-16890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:57:50.907 [DEBUG] [Thread-16890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:57:50.907 [DEBUG] [Thread-16890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:57:50.907 [DEBUG] [Thread-16890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:57:50.907 [DEBUG] [Thread-16890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:57:50.907 [DEBUG] [Thread-16890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:57:50.908 [DEBUG] [Thread-16890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:57:50.908 [DEBUG] [Thread-16890] [transport.py] [_log()] client lang: <none>
2026-04-15T09:57:50.908 [DEBUG] [Thread-16890] [transport.py] [_log()] server lang: <none>
2026-04-15T09:57:50.908 [DEBUG] [Thread-16890] [transport.py] [_log()] kex follows: False
2026-04-15T09:57:50.908 [DEBUG] [Thread-16890] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:57:50.908 [DEBUG] [Thread-16890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:57:50.908 [DEBUG] [Thread-16890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:57:50.908 [DEBUG] [Thread-16890] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:57:50.908 [DEBUG] [Thread-16890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:57:50.908 [DEBUG] [Thread-16890] [transport.py] [_log()] Compression: none
2026-04-15T09:57:50.909 [DEBUG] [Thread-16890] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:57:50.926 [DEBUG] [Thread-16890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:57:50.926 [DEBUG] [Thread-16890] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:57:50.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:57:50.927 [DEBUG] [Thread-16890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:57:50.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:57:50.968 [DEBUG] [Thread-16890] [transport.py] [_log()] userauth is OK
2026-04-15T09:57:50.969 [DEBUG] [Thread-16890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:57:50.969 [DEBUG] [Thread-16890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:57:50.969 [DEBUG] [Thread-16890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:57:50.969 [DEBUG] [Thread-16890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:57:50.995 [INFO] [Thread-16890] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:57:50.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:57:51.653 [DEBUG] [Thread-16890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:57:51.654 [DEBUG] [Thread-16890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:57:51.654 [DEBUG] [Thread-16890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:57:51.694 [DEBUG] [Thread-16890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:57:51.694 [DEBUG] [Thread-16890] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:57:51.697 [DEBUG] [Thread-16890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:57:51.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:57:51.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:57:51.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:57:51.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:57:51.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:57:51.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:57:51.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:57:51.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:57:51.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:57:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.331727 -999.00   +9.50  15.11     93   +8.50 1 3 1 3 1   888    0 1.13 13.87 ----- 15.1 15.1 285.6 17.6 13.0 -3.8 12.7 -3.7 12.0 -2.8 12.4 -2.8
2026-04-15T09:57:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:57:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:57:51.719 [DEBUG] [Thread-16890] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:57:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.331727
2026-04-15T09:57:51.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:57:51.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:57:51.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:57:51.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:57:51.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:57:51.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:57:09', tmtdew=0.18134, humidity=98.5975, cloud=0.0, wind=13.181, temperature=9.33955, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:57:41.213', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:57:51.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:57:51.977 [DEBUG] [Thread-16893] [transport.py] [_log()] starting thread (client mode): 0xee905cf0
2026-04-15T09:57:51.977 [DEBUG] [Thread-16893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:57:51.991 [DEBUG] [Thread-16893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:57:51.992 [INFO] [Thread-16893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:57:51.999 [DEBUG] [Thread-16893] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:57:51.999 [DEBUG] [Thread-16893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:57:51.999 [DEBUG] [Thread-16893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:57:51.999 [DEBUG] [Thread-16893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:57:51.999 [DEBUG] [Thread-16893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:57:51.999 [DEBUG] [Thread-16893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:57:52.000 [DEBUG] [Thread-16893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:57:52.000 [DEBUG] [Thread-16893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:57:52.000 [DEBUG] [Thread-16893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:57:52.000 [DEBUG] [Thread-16893] [transport.py] [_log()] client lang: <none>
2026-04-15T09:57:52.000 [DEBUG] [Thread-16893] [transport.py] [_log()] server lang: <none>
2026-04-15T09:57:52.000 [DEBUG] [Thread-16893] [transport.py] [_log()] kex follows: False
2026-04-15T09:57:52.000 [DEBUG] [Thread-16893] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:57:52.000 [DEBUG] [Thread-16893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:57:52.000 [DEBUG] [Thread-16893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:57:52.000 [DEBUG] [Thread-16893] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:57:52.000 [DEBUG] [Thread-16893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:57:52.000 [DEBUG] [Thread-16893] [transport.py] [_log()] Compression: none
2026-04-15T09:57:52.001 [DEBUG] [Thread-16893] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:57:52.056 [DEBUG] [Thread-16893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:57:52.057 [DEBUG] [Thread-16893] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:57:52.057 [DEBUG] [Thread-16893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:57:52.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:57:52.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:57:52.112 [DEBUG] [Thread-16893] [transport.py] [_log()] userauth is OK
2026-04-15T09:57:52.112 [DEBUG] [Thread-16893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:57:52.112 [DEBUG] [Thread-16893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:57:52.112 [DEBUG] [Thread-16893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:57:52.112 [DEBUG] [Thread-16893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:57:52.137 [INFO] [Thread-16893] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:57:52.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:57:52.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:57:52.942 [DEBUG] [Thread-16893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:57:52.942 [DEBUG] [Thread-16893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:57:52.990 [DEBUG] [Thread-16893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:57:52.990 [DEBUG] [Thread-16893] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:57:52.999 [DEBUG] [Thread-16893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:57:53.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:57:53.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')
2026-04-15T09:57:53.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
2026-04-15T09:57:53.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:57:53.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:57:53.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:57:53.035 [DEBUG] [Thread-16893] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:57:58.770 [DEBUG] [Thread-16895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:58:00.784 [DEBUG] [Thread-16896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:58:15.826 [DEBUG] [Thread-16897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:58:23.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:58:23.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:58:23.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
2026-04-15T09:58:24.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 57, 44), 0.2878, 98.0286, 0.0, 12.8455, 9.7792, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:58:24.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:57:44
2026-04-15T09:58:24.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:58:25.240 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:58:25.241 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:58:25.274 [DEBUG] [Thread-16898] [transport.py] [_log()] starting thread (client mode): 0xf1335d80
2026-04-15T09:58:25.274 [DEBUG] [Thread-16898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:58:25.294 [DEBUG] [Thread-16898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:58:25.294 [INFO] [Thread-16898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:58:25.297 [DEBUG] [Thread-16898] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:58:25.297 [DEBUG] [Thread-16898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:58:25.297 [DEBUG] [Thread-16898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:58:25.297 [DEBUG] [Thread-16898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:58:25.297 [DEBUG] [Thread-16898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:58:25.297 [DEBUG] [Thread-16898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:58:25.298 [DEBUG] [Thread-16898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:58:25.298 [DEBUG] [Thread-16898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:58:25.298 [DEBUG] [Thread-16898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:58:25.298 [DEBUG] [Thread-16898] [transport.py] [_log()] client lang: <none>
2026-04-15T09:58:25.298 [DEBUG] [Thread-16898] [transport.py] [_log()] server lang: <none>
2026-04-15T09:58:25.298 [DEBUG] [Thread-16898] [transport.py] [_log()] kex follows: False
2026-04-15T09:58:25.298 [DEBUG] [Thread-16898] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:58:25.298 [DEBUG] [Thread-16898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:58:25.298 [DEBUG] [Thread-16898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:58:25.298 [DEBUG] [Thread-16898] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:58:25.298 [DEBUG] [Thread-16898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:58:25.299 [DEBUG] [Thread-16898] [transport.py] [_log()] Compression: none
2026-04-15T09:58:25.299 [DEBUG] [Thread-16898] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:58:25.315 [DEBUG] [Thread-16898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:58:25.316 [DEBUG] [Thread-16898] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:58:25.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:58:25.316 [DEBUG] [Thread-16898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:58:25.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:58:25.317 [DEBUG] [Thread-16898] [transport.py] [_log()] userauth is OK
2026-04-15T09:58:25.317 [DEBUG] [Thread-16898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:58:25.317 [DEBUG] [Thread-16898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:58:25.318 [DEBUG] [Thread-16898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:58:25.318 [DEBUG] [Thread-16898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:58:25.342 [INFO] [Thread-16898] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:58:25.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:58:25.955 [DEBUG] [Thread-16898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:58:25.955 [DEBUG] [Thread-16898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:58:25.956 [DEBUG] [Thread-16898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:58:25.996 [DEBUG] [Thread-16898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:58:25.996 [DEBUG] [Thread-16898] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:58:25.998 [DEBUG] [Thread-16898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:58:26.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:58:26.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:58:26.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:58:26.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:58:26.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:58:26.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:58:26.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:58:26.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:58:26.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:58:26.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.332074 -999.00   +9.50  16.83     93   +8.50 1 3 1 3 1   888    0 1.16 14.52 ----- 16.8 16.8 301.2 18.5 13.0 -3.7 12.7 -3.6 12.1 -3.6 12.4 -2.7
2026-04-15T09:58:26.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:58:26.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:58:26.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.332074
2026-04-15T09:58:26.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:58:26.023 [DEBUG] [Thread-16898] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:58:26.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:58:26.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:58:26.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:58:26.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:58:26.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:57:44', tmtdew=0.2878, humidity=98.0286, cloud=0.0, wind=12.8455, temperature=9.7792, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:58:11.194', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:58:26.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:58:26.278 [DEBUG] [Thread-16901] [transport.py] [_log()] starting thread (client mode): 0xee91f940
2026-04-15T09:58:26.278 [DEBUG] [Thread-16901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:58:26.294 [DEBUG] [Thread-16901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:58:26.294 [INFO] [Thread-16901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:58:26.301 [DEBUG] [Thread-16901] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:58:26.301 [DEBUG] [Thread-16901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:58:26.301 [DEBUG] [Thread-16901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:58:26.301 [DEBUG] [Thread-16901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:58:26.301 [DEBUG] [Thread-16901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:58:26.301 [DEBUG] [Thread-16901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:58:26.301 [DEBUG] [Thread-16901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:58:26.302 [DEBUG] [Thread-16901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:58:26.302 [DEBUG] [Thread-16901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:58:26.302 [DEBUG] [Thread-16901] [transport.py] [_log()] client lang: <none>
2026-04-15T09:58:26.302 [DEBUG] [Thread-16901] [transport.py] [_log()] server lang: <none>
2026-04-15T09:58:26.302 [DEBUG] [Thread-16901] [transport.py] [_log()] kex follows: False
2026-04-15T09:58:26.302 [DEBUG] [Thread-16901] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:58:26.302 [DEBUG] [Thread-16901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:58:26.302 [DEBUG] [Thread-16901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:58:26.302 [DEBUG] [Thread-16901] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:58:26.302 [DEBUG] [Thread-16901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:58:26.302 [DEBUG] [Thread-16901] [transport.py] [_log()] Compression: none
2026-04-15T09:58:26.302 [DEBUG] [Thread-16901] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:58:26.361 [DEBUG] [Thread-16901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:58:26.361 [DEBUG] [Thread-16901] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:58:26.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:58:26.362 [DEBUG] [Thread-16901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:58:26.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:58:26.416 [DEBUG] [Thread-16901] [transport.py] [_log()] userauth is OK
2026-04-15T09:58:26.416 [DEBUG] [Thread-16901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:58:26.416 [DEBUG] [Thread-16901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:58:26.416 [DEBUG] [Thread-16901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:58:26.416 [DEBUG] [Thread-16901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:58:26.435 [INFO] [Thread-16901] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:58:26.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:58:26.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:58:27.309 [DEBUG] [Thread-16901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:58:27.310 [DEBUG] [Thread-16901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:58:27.357 [DEBUG] [Thread-16901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:58:27.357 [DEBUG] [Thread-16901] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:58:27.366 [DEBUG] [Thread-16901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:58:27.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:58:27.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')
2026-04-15T09:58:27.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
2026-04-15T09:58:27.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:58:27.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:58:27.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:58:27.401 [DEBUG] [Thread-16901] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:58:30.858 [DEBUG] [Thread-16903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:58:45.900 [DEBUG] [Thread-16904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:58:57.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:58:57.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:58:57.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
2026-04-15T09:58:58.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 58, 20), 0.13388, 98.5806, 0.0, 10.058, 9.32277, 2, 2, 0, 2, 0, 0),)
2026-04-15T09:58:58.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:58:20
2026-04-15T09:58:58.864 [DEBUG] [Thread-16905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:58:59.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:58:59.682 [DEBUG] [Thread-16906] [transport.py] [_log()] starting thread (client mode): 0xee91fd00
2026-04-15T09:58:59.682 [DEBUG] [Thread-16906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:58:59.701 [DEBUG] [Thread-16906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:58:59.701 [INFO] [Thread-16906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:58:59.704 [DEBUG] [Thread-16906] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:58:59.704 [DEBUG] [Thread-16906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:58:59.704 [DEBUG] [Thread-16906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:58:59.704 [DEBUG] [Thread-16906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:58:59.704 [DEBUG] [Thread-16906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:58:59.704 [DEBUG] [Thread-16906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:58:59.704 [DEBUG] [Thread-16906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:58:59.705 [DEBUG] [Thread-16906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:58:59.705 [DEBUG] [Thread-16906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:58:59.705 [DEBUG] [Thread-16906] [transport.py] [_log()] client lang: <none>
2026-04-15T09:58:59.705 [DEBUG] [Thread-16906] [transport.py] [_log()] server lang: <none>
2026-04-15T09:58:59.705 [DEBUG] [Thread-16906] [transport.py] [_log()] kex follows: False
2026-04-15T09:58:59.705 [DEBUG] [Thread-16906] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:58:59.705 [DEBUG] [Thread-16906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:58:59.705 [DEBUG] [Thread-16906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:58:59.705 [DEBUG] [Thread-16906] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:58:59.705 [DEBUG] [Thread-16906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:58:59.705 [DEBUG] [Thread-16906] [transport.py] [_log()] Compression: none
2026-04-15T09:58:59.706 [DEBUG] [Thread-16906] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:58:59.714 [DEBUG] [Thread-16906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:58:59.714 [DEBUG] [Thread-16906] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:58:59.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:58:59.715 [DEBUG] [Thread-16906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:58:59.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:58:59.716 [DEBUG] [Thread-16906] [transport.py] [_log()] userauth is OK
2026-04-15T09:58:59.716 [DEBUG] [Thread-16906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:58:59.716 [DEBUG] [Thread-16906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:58:59.716 [DEBUG] [Thread-16906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:58:59.716 [DEBUG] [Thread-16906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:58:59.734 [INFO] [Thread-16906] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:58:59.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:59:00.291 [DEBUG] [Thread-16906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:59:00.292 [DEBUG] [Thread-16906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:59:00.292 [DEBUG] [Thread-16906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:59:00.331 [DEBUG] [Thread-16906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:59:00.332 [DEBUG] [Thread-16906] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:59:00.334 [DEBUG] [Thread-16906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:59:00.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:59:00.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:59:00.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:59:00.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:59:00.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:59:00.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:59:00.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:59:00.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:59:00.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:59:00.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.332422 -999.00   +9.50  14.32     93   +8.40 1 3 1 3 1   888    0 1.21 15.71 ----- 14.3 14.3 297.8 20.3 13.0 -3.8 12.7 -3.8 12.1 -3.4 12.4 -3.0
2026-04-15T09:59:00.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:59:00.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:59:00.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.332422
2026-04-15T09:59:00.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:59:00.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:59:00.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:59:00.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:59:00.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:59:00.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:58:20', tmtdew=0.13388, humidity=98.5806, cloud=0.0, wind=10.058, temperature=9.32277, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:58:41.261', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:59:00.354 [DEBUG] [Thread-16906] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:59:00.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:59:00.565 [DEBUG] [Thread-16909] [transport.py] [_log()] starting thread (client mode): 0xee989c60
2026-04-15T09:59:00.565 [DEBUG] [Thread-16909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:59:00.579 [DEBUG] [Thread-16909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:59:00.580 [INFO] [Thread-16909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:59:00.587 [DEBUG] [Thread-16909] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:59:00.587 [DEBUG] [Thread-16909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:59:00.587 [DEBUG] [Thread-16909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:59:00.587 [DEBUG] [Thread-16909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:59:00.587 [DEBUG] [Thread-16909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:59:00.587 [DEBUG] [Thread-16909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:59:00.587 [DEBUG] [Thread-16909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:59:00.588 [DEBUG] [Thread-16909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:59:00.588 [DEBUG] [Thread-16909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:59:00.588 [DEBUG] [Thread-16909] [transport.py] [_log()] client lang: <none>
2026-04-15T09:59:00.588 [DEBUG] [Thread-16909] [transport.py] [_log()] server lang: <none>
2026-04-15T09:59:00.588 [DEBUG] [Thread-16909] [transport.py] [_log()] kex follows: False
2026-04-15T09:59:00.588 [DEBUG] [Thread-16909] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:59:00.588 [DEBUG] [Thread-16909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:59:00.588 [DEBUG] [Thread-16909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:59:00.588 [DEBUG] [Thread-16909] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:59:00.588 [DEBUG] [Thread-16909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:59:00.588 [DEBUG] [Thread-16909] [transport.py] [_log()] Compression: none
2026-04-15T09:59:00.589 [DEBUG] [Thread-16909] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:59:00.643 [DEBUG] [Thread-16909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:59:00.644 [DEBUG] [Thread-16909] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:59:00.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:59:00.644 [DEBUG] [Thread-16909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:59:00.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:59:00.700 [DEBUG] [Thread-16909] [transport.py] [_log()] userauth is OK
2026-04-15T09:59:00.701 [DEBUG] [Thread-16909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:59:00.701 [DEBUG] [Thread-16909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:59:00.701 [DEBUG] [Thread-16909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:59:00.701 [DEBUG] [Thread-16909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:59:00.726 [INFO] [Thread-16909] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:59:00.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:59:00.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:59:00.931 [DEBUG] [Thread-16911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:59:01.610 [DEBUG] [Thread-16909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:59:01.610 [DEBUG] [Thread-16909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:59:01.658 [DEBUG] [Thread-16909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:59:01.658 [DEBUG] [Thread-16909] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:59:01.667 [DEBUG] [Thread-16909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:59:01.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:59:01.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')
2026-04-15T09:59:01.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
2026-04-15T09:59:01.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:59:01.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:59:01.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:59:01.701 [DEBUG] [Thread-16909] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:59:15.975 [DEBUG] [Thread-16912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:59:25.382 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:59:25.384 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:59:31.004 [DEBUG] [Thread-16913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:59:31.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T09:59:31.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T09:59:31.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T09:59:33.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 58, 56), 0.18652, 98.5638, 0.0, 11.8404, 9.28897, 2, 2, 2, 2, 0, 0),)
2026-04-15T09:59:33.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:58:56
2026-04-15T09:59:33.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T09:59:33.979 [DEBUG] [Thread-16914] [transport.py] [_log()] starting thread (client mode): 0xf13ef6a0
2026-04-15T09:59:33.979 [DEBUG] [Thread-16914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:59:33.996 [DEBUG] [Thread-16914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T09:59:33.996 [INFO] [Thread-16914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] client lang: <none>
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] server lang: <none>
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] kex follows: False
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:59:33.998 [DEBUG] [Thread-16914] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:59:33.999 [DEBUG] [Thread-16914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:59:33.999 [DEBUG] [Thread-16914] [transport.py] [_log()] Compression: none
2026-04-15T09:59:33.999 [DEBUG] [Thread-16914] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:59:34.009 [DEBUG] [Thread-16914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:59:34.009 [DEBUG] [Thread-16914] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:59:34.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T09:59:34.009 [DEBUG] [Thread-16914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T09:59:34.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:59:34.010 [DEBUG] [Thread-16914] [transport.py] [_log()] userauth is OK
2026-04-15T09:59:34.010 [DEBUG] [Thread-16914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:59:34.010 [DEBUG] [Thread-16914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:59:34.011 [DEBUG] [Thread-16914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T09:59:34.011 [DEBUG] [Thread-16914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:59:34.023 [INFO] [Thread-16914] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:59:34.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:59:34.598 [DEBUG] [Thread-16914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:59:34.599 [DEBUG] [Thread-16914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:59:34.599 [DEBUG] [Thread-16914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T09:59:34.640 [DEBUG] [Thread-16914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:59:34.640 [DEBUG] [Thread-16914] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:59:34.641 [DEBUG] [Thread-16914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:59:34.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:59:34.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T09:59:34.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T09:59:34.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T09:59:34.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:59:34.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T09:59:34.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:59:34.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:59:34.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T09:59:34.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.332769 -999.00   +9.50  15.28     93   +8.50 1 3 1 3 1   888    0 1.29 17.96 ----- 15.3 15.3 303.6 19.9 13.0 -3.8 12.7 -3.8 12.1 -3.0 12.4 -2.8
2026-04-15T09:59:34.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T09:59:34.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T09:59:34.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.332769
2026-04-15T09:59:34.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T09:59:34.663 [DEBUG] [Thread-16914] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:59:34.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T09:59:34.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T09:59:34.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T09:59:34.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T09:59:34.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:58:56', tmtdew=0.18652, humidity=98.5638, cloud=0.0, wind=11.8404, temperature=9.28897, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:59:11.242', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T09:59:34.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T09:59:34.905 [DEBUG] [Thread-16917] [transport.py] [_log()] starting thread (client mode): 0xee90fa30
2026-04-15T09:59:34.905 [DEBUG] [Thread-16917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T09:59:34.923 [DEBUG] [Thread-16917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T09:59:34.923 [INFO] [Thread-16917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T09:59:34.931 [DEBUG] [Thread-16917] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T09:59:34.931 [DEBUG] [Thread-16917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T09:59:34.931 [DEBUG] [Thread-16917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T09:59:34.931 [DEBUG] [Thread-16917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:59:34.931 [DEBUG] [Thread-16917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T09:59:34.931 [DEBUG] [Thread-16917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:59:34.931 [DEBUG] [Thread-16917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T09:59:34.931 [DEBUG] [Thread-16917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T09:59:34.931 [DEBUG] [Thread-16917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T09:59:34.931 [DEBUG] [Thread-16917] [transport.py] [_log()] client lang: <none>
2026-04-15T09:59:34.932 [DEBUG] [Thread-16917] [transport.py] [_log()] server lang: <none>
2026-04-15T09:59:34.932 [DEBUG] [Thread-16917] [transport.py] [_log()] kex follows: False
2026-04-15T09:59:34.932 [DEBUG] [Thread-16917] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T09:59:34.932 [DEBUG] [Thread-16917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T09:59:34.932 [DEBUG] [Thread-16917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T09:59:34.932 [DEBUG] [Thread-16917] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T09:59:34.932 [DEBUG] [Thread-16917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T09:59:34.933 [DEBUG] [Thread-16917] [transport.py] [_log()] Compression: none
2026-04-15T09:59:34.933 [DEBUG] [Thread-16917] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T09:59:34.988 [DEBUG] [Thread-16917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T09:59:34.989 [DEBUG] [Thread-16917] [transport.py] [_log()] Switch to new keys ...
2026-04-15T09:59:34.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T09:59:34.990 [DEBUG] [Thread-16917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T09:59:34.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T09:59:35.047 [DEBUG] [Thread-16917] [transport.py] [_log()] userauth is OK
2026-04-15T09:59:35.047 [DEBUG] [Thread-16917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T09:59:35.047 [DEBUG] [Thread-16917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T09:59:35.047 [DEBUG] [Thread-16917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T09:59:35.048 [DEBUG] [Thread-16917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T09:59:35.073 [INFO] [Thread-16917] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T09:59:35.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T09:59:35.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T09:59:35.984 [DEBUG] [Thread-16917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T09:59:35.984 [DEBUG] [Thread-16917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T09:59:36.033 [DEBUG] [Thread-16917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T09:59:36.034 [DEBUG] [Thread-16917] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T09:59:36.044 [DEBUG] [Thread-16917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T09:59:36.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T09:59:36.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')
2026-04-15T09:59:36.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
2026-04-15T09:59:36.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T09:59:36.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T09:59:36.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T09:59:36.079 [DEBUG] [Thread-16917] [transport.py] [_log()] EOF in transport thread
2026-04-15T09:59:46.034 [DEBUG] [Thread-16919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T09:59:58.955 [DEBUG] [Thread-16920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:00:01.079 [DEBUG] [Thread-16921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:00:06.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:00:06.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:00:06.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
2026-04-15T10:00:07.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 9, 59, 32), 0.18396, 98.5804, 0.0, 12.6695, 9.2558, 2, 2, 2, 2, 0, 0),)
2026-04-15T10:00:07.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 09:59:32
2026-04-15T10:00:07.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:00:08.300 [DEBUG] [Thread-16922] [transport.py] [_log()] starting thread (client mode): 0xee9073d0
2026-04-15T10:00:08.300 [DEBUG] [Thread-16922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:00:08.319 [DEBUG] [Thread-16922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:00:08.320 [INFO] [Thread-16922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:00:08.321 [DEBUG] [Thread-16922] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:00:08.321 [DEBUG] [Thread-16922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:00:08.321 [DEBUG] [Thread-16922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:00:08.321 [DEBUG] [Thread-16922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:00:08.321 [DEBUG] [Thread-16922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:00:08.322 [DEBUG] [Thread-16922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:00:08.322 [DEBUG] [Thread-16922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:00:08.322 [DEBUG] [Thread-16922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:00:08.322 [DEBUG] [Thread-16922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:00:08.322 [DEBUG] [Thread-16922] [transport.py] [_log()] client lang: <none>
2026-04-15T10:00:08.322 [DEBUG] [Thread-16922] [transport.py] [_log()] server lang: <none>
2026-04-15T10:00:08.322 [DEBUG] [Thread-16922] [transport.py] [_log()] kex follows: False
2026-04-15T10:00:08.322 [DEBUG] [Thread-16922] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:00:08.322 [DEBUG] [Thread-16922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:00:08.322 [DEBUG] [Thread-16922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:00:08.322 [DEBUG] [Thread-16922] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:00:08.322 [DEBUG] [Thread-16922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:00:08.322 [DEBUG] [Thread-16922] [transport.py] [_log()] Compression: none
2026-04-15T10:00:08.323 [DEBUG] [Thread-16922] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:00:08.341 [DEBUG] [Thread-16922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:00:08.341 [DEBUG] [Thread-16922] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:00:08.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:00:08.342 [DEBUG] [Thread-16922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:00:08.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:00:08.343 [DEBUG] [Thread-16922] [transport.py] [_log()] userauth is OK
2026-04-15T10:00:08.343 [DEBUG] [Thread-16922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:00:08.343 [DEBUG] [Thread-16922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:00:08.344 [DEBUG] [Thread-16922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:00:08.344 [DEBUG] [Thread-16922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:00:08.368 [INFO] [Thread-16922] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:00:08.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:00:09.017 [DEBUG] [Thread-16922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:00:09.017 [DEBUG] [Thread-16922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:00:09.018 [DEBUG] [Thread-16922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:00:09.058 [DEBUG] [Thread-16922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:00:09.058 [DEBUG] [Thread-16922] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:00:09.060 [DEBUG] [Thread-16922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:00:09.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:00:09.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:00:09.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:00:09.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:00:09.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:00:09.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:00:09.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:00:09.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:00:09.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:00:09.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.333116 -999.00   +9.50  18.35     93   +8.50 1 3 1 3 1   888    0 1.32 19.07 ----- 18.4 18.4 300.0 19.3 13.0 -3.9 12.8 -3.5 12.1 -3.5 12.4 -3.0
2026-04-15T10:00:09.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:00:09.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:00:09.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.333116
2026-04-15T10:00:09.081 [DEBUG] [Thread-16922] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:00:09.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:00:09.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:00:09.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:00:09.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:00:09.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:00:09.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T09:59:32', tmtdew=0.18396, humidity=98.5804, cloud=0.0, wind=12.6695, temperature=9.2558, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T07:59:41.222', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:00:09.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:00:09.337 [DEBUG] [Thread-16925] [transport.py] [_log()] starting thread (client mode): 0xf1337df0
2026-04-15T10:00:09.337 [DEBUG] [Thread-16925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:00:09.352 [DEBUG] [Thread-16925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:00:09.352 [INFO] [Thread-16925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:00:09.361 [DEBUG] [Thread-16925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:00:09.362 [DEBUG] [Thread-16925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:00:09.362 [DEBUG] [Thread-16925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:00:09.362 [DEBUG] [Thread-16925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:00:09.362 [DEBUG] [Thread-16925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:00:09.362 [DEBUG] [Thread-16925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:00:09.362 [DEBUG] [Thread-16925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:00:09.362 [DEBUG] [Thread-16925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:00:09.362 [DEBUG] [Thread-16925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:00:09.362 [DEBUG] [Thread-16925] [transport.py] [_log()] client lang: <none>
2026-04-15T10:00:09.362 [DEBUG] [Thread-16925] [transport.py] [_log()] server lang: <none>
2026-04-15T10:00:09.362 [DEBUG] [Thread-16925] [transport.py] [_log()] kex follows: False
2026-04-15T10:00:09.363 [DEBUG] [Thread-16925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:00:09.363 [DEBUG] [Thread-16925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:00:09.363 [DEBUG] [Thread-16925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:00:09.363 [DEBUG] [Thread-16925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:00:09.363 [DEBUG] [Thread-16925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:00:09.363 [DEBUG] [Thread-16925] [transport.py] [_log()] Compression: none
2026-04-15T10:00:09.363 [DEBUG] [Thread-16925] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:00:09.416 [DEBUG] [Thread-16925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:00:09.416 [DEBUG] [Thread-16925] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:00:09.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:00:09.417 [DEBUG] [Thread-16925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:00:09.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:00:09.473 [DEBUG] [Thread-16925] [transport.py] [_log()] userauth is OK
2026-04-15T10:00:09.473 [DEBUG] [Thread-16925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:00:09.474 [DEBUG] [Thread-16925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:00:09.474 [DEBUG] [Thread-16925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:00:09.474 [DEBUG] [Thread-16925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:00:09.503 [INFO] [Thread-16925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:00:09.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:00:09.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:00:10.312 [DEBUG] [Thread-16925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:00:10.312 [DEBUG] [Thread-16925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:00:10.360 [DEBUG] [Thread-16925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:00:10.360 [DEBUG] [Thread-16925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:00:10.371 [DEBUG] [Thread-16925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:00:10.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:00:10.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')
2026-04-15T10:00:10.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
2026-04-15T10:00:10.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:00:10.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:00:10.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:00:10.410 [DEBUG] [Thread-16925] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:00:16.113 [DEBUG] [Thread-16927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:00:25.524 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:00:25.525 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:00:31.158 [DEBUG] [Thread-16928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:00:40.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:00:40.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:00:40.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
2026-04-15T10:00:41.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 0, 7), 0.19152, 98.5304, 0.0, 12.6342, 9.23909, 2, 2, 2, 2, 0, 0),)
2026-04-15T10:00:41.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:00:07
2026-04-15T10:00:42.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:00:42.599 [DEBUG] [Thread-16929] [transport.py] [_log()] starting thread (client mode): 0xee989420
2026-04-15T10:00:42.599 [DEBUG] [Thread-16929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:00:42.617 [DEBUG] [Thread-16929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:00:42.617 [INFO] [Thread-16929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:00:42.620 [DEBUG] [Thread-16929] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:00:42.620 [DEBUG] [Thread-16929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:00:42.620 [DEBUG] [Thread-16929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:00:42.620 [DEBUG] [Thread-16929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:00:42.621 [DEBUG] [Thread-16929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:00:42.621 [DEBUG] [Thread-16929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:00:42.621 [DEBUG] [Thread-16929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:00:42.621 [DEBUG] [Thread-16929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:00:42.621 [DEBUG] [Thread-16929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:00:42.621 [DEBUG] [Thread-16929] [transport.py] [_log()] client lang: <none>
2026-04-15T10:00:42.621 [DEBUG] [Thread-16929] [transport.py] [_log()] server lang: <none>
2026-04-15T10:00:42.621 [DEBUG] [Thread-16929] [transport.py] [_log()] kex follows: False
2026-04-15T10:00:42.621 [DEBUG] [Thread-16929] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:00:42.621 [DEBUG] [Thread-16929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:00:42.621 [DEBUG] [Thread-16929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:00:42.622 [DEBUG] [Thread-16929] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:00:42.622 [DEBUG] [Thread-16929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:00:42.622 [DEBUG] [Thread-16929] [transport.py] [_log()] Compression: none
2026-04-15T10:00:42.622 [DEBUG] [Thread-16929] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:00:42.638 [DEBUG] [Thread-16929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:00:42.638 [DEBUG] [Thread-16929] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:00:42.638 [DEBUG] [Thread-16929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:00:42.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:00:42.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:00:42.639 [DEBUG] [Thread-16929] [transport.py] [_log()] userauth is OK
2026-04-15T10:00:42.640 [DEBUG] [Thread-16929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:00:42.640 [DEBUG] [Thread-16929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:00:42.640 [DEBUG] [Thread-16929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:00:42.640 [DEBUG] [Thread-16929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:00:42.657 [INFO] [Thread-16929] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:00:42.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:00:43.268 [DEBUG] [Thread-16929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:00:43.269 [DEBUG] [Thread-16929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:00:43.269 [DEBUG] [Thread-16929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:00:43.309 [DEBUG] [Thread-16929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:00:43.309 [DEBUG] [Thread-16929] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:00:43.311 [DEBUG] [Thread-16929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:00:43.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:00:43.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:00:43.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:00:43.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:00:43.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:00:43.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:00:43.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:00:43.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:00:43.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:00:43.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.333463 -999.00   +9.40  11.74     93   +8.40 1 3 1 3 1   888    0 1.34 19.70 ----- 11.7 11.7 301.2 17.7 13.0 -4.0 12.8 -3.7 12.2 -2.8 12.4 -2.9
2026-04-15T10:00:43.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:00:43.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:00:43.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.333463
2026-04-15T10:00:43.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:00:43.336 [DEBUG] [Thread-16929] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:00:43.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:00:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:00:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:00:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:00:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:00:07', tmtdew=0.19152, humidity=98.5304, cloud=0.0, wind=12.6342, temperature=9.23909, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:00:11.203', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:00:43.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:00:43.600 [DEBUG] [Thread-16932] [transport.py] [_log()] starting thread (client mode): 0xf13cb400
2026-04-15T10:00:43.601 [DEBUG] [Thread-16932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:00:43.623 [DEBUG] [Thread-16932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:00:43.624 [INFO] [Thread-16932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:00:43.639 [DEBUG] [Thread-16932] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:00:43.639 [DEBUG] [Thread-16932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:00:43.639 [DEBUG] [Thread-16932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:00:43.639 [DEBUG] [Thread-16932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:00:43.639 [DEBUG] [Thread-16932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:00:43.639 [DEBUG] [Thread-16932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:00:43.639 [DEBUG] [Thread-16932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:00:43.639 [DEBUG] [Thread-16932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:00:43.639 [DEBUG] [Thread-16932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:00:43.639 [DEBUG] [Thread-16932] [transport.py] [_log()] client lang: <none>
2026-04-15T10:00:43.639 [DEBUG] [Thread-16932] [transport.py] [_log()] server lang: <none>
2026-04-15T10:00:43.640 [DEBUG] [Thread-16932] [transport.py] [_log()] kex follows: False
2026-04-15T10:00:43.640 [DEBUG] [Thread-16932] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:00:43.640 [DEBUG] [Thread-16932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:00:43.640 [DEBUG] [Thread-16932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:00:43.640 [DEBUG] [Thread-16932] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:00:43.640 [DEBUG] [Thread-16932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:00:43.640 [DEBUG] [Thread-16932] [transport.py] [_log()] Compression: none
2026-04-15T10:00:43.640 [DEBUG] [Thread-16932] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:00:43.704 [DEBUG] [Thread-16932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:00:43.705 [DEBUG] [Thread-16932] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:00:43.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:00:43.705 [DEBUG] [Thread-16932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:00:43.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:00:43.780 [DEBUG] [Thread-16932] [transport.py] [_log()] userauth is OK
2026-04-15T10:00:43.780 [DEBUG] [Thread-16932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:00:43.780 [DEBUG] [Thread-16932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:00:43.780 [DEBUG] [Thread-16932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:00:43.780 [DEBUG] [Thread-16932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:00:43.814 [INFO] [Thread-16932] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:00:43.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:00:43.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:00:44.626 [DEBUG] [Thread-16932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:00:44.627 [DEBUG] [Thread-16932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:00:44.675 [DEBUG] [Thread-16932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:00:44.675 [DEBUG] [Thread-16932] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:00:44.684 [DEBUG] [Thread-16932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:00:44.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:00:44.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')
2026-04-15T10:00:44.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') -> 00000000
2026-04-15T10:00:44.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:00:44.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:00:44.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:00:44.723 [DEBUG] [Thread-16932] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:00:46.188 [DEBUG] [Thread-16934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:00:59.048 [DEBUG] [Thread-16935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:01:01.226 [DEBUG] [Thread-16936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:01:14.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:01:14.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:01:14.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
2026-04-15T10:01:16.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 0, 43), 0.27323, 98.1272, 0.0, 15.4562, 10.0772, 2, 2, 2, 2, 0, 0),)
2026-04-15T10:01:16.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:00:43
2026-04-15T10:01:16.253 [DEBUG] [Thread-16937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:01:16.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:01:16.800 [DEBUG] [Thread-16938] [transport.py] [_log()] starting thread (client mode): 0xf13c8520
2026-04-15T10:01:16.800 [DEBUG] [Thread-16938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:01:16.814 [DEBUG] [Thread-16938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:01:16.814 [INFO] [Thread-16938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:01:16.817 [DEBUG] [Thread-16938] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:01:16.817 [DEBUG] [Thread-16938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:01:16.818 [DEBUG] [Thread-16938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:01:16.818 [DEBUG] [Thread-16938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:01:16.818 [DEBUG] [Thread-16938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:01:16.818 [DEBUG] [Thread-16938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:01:16.818 [DEBUG] [Thread-16938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:01:16.818 [DEBUG] [Thread-16938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:01:16.818 [DEBUG] [Thread-16938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:01:16.818 [DEBUG] [Thread-16938] [transport.py] [_log()] client lang: <none>
2026-04-15T10:01:16.818 [DEBUG] [Thread-16938] [transport.py] [_log()] server lang: <none>
2026-04-15T10:01:16.818 [DEBUG] [Thread-16938] [transport.py] [_log()] kex follows: False
2026-04-15T10:01:16.818 [DEBUG] [Thread-16938] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:01:16.819 [DEBUG] [Thread-16938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:01:16.819 [DEBUG] [Thread-16938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:01:16.819 [DEBUG] [Thread-16938] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:01:16.819 [DEBUG] [Thread-16938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:01:16.819 [DEBUG] [Thread-16938] [transport.py] [_log()] Compression: none
2026-04-15T10:01:16.819 [DEBUG] [Thread-16938] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:01:16.835 [DEBUG] [Thread-16938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:01:16.836 [DEBUG] [Thread-16938] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:01:16.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:01:16.836 [DEBUG] [Thread-16938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:01:16.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:01:16.837 [DEBUG] [Thread-16938] [transport.py] [_log()] userauth is OK
2026-04-15T10:01:16.838 [DEBUG] [Thread-16938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:01:16.838 [DEBUG] [Thread-16938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:01:16.838 [DEBUG] [Thread-16938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:01:16.838 [DEBUG] [Thread-16938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:01:16.855 [INFO] [Thread-16938] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:01:16.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:01:17.462 [DEBUG] [Thread-16938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:01:17.462 [DEBUG] [Thread-16938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:01:17.463 [DEBUG] [Thread-16938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:01:17.503 [DEBUG] [Thread-16938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:01:17.503 [DEBUG] [Thread-16938] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:01:17.505 [DEBUG] [Thread-16938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:01:17.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:01:17.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:01:17.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:01:17.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:01:17.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:01:17.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:01:17.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:01:17.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:01:17.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:01:17.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.334159 -999.00   +9.50  11.45     92   +8.40 1 3 1 3 1   888    0 1.59 26.82 ----- 11.4 11.4 318.6 14.8 13.0 -3.8 12.7 -3.4 12.2 -2.5 12.4 -2.7
2026-04-15T10:01:17.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:01:17.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:01:17.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.334159
2026-04-15T10:01:17.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:01:17.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:01:17.527 [DEBUG] [Thread-16938] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:01:17.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:01:17.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:01:17.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:01:17.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:00:43', tmtdew=0.27323, humidity=98.1272, cloud=0.0, wind=15.4562, temperature=10.0772, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:01:11.338', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:01:17.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:01:17.782 [DEBUG] [Thread-16941] [transport.py] [_log()] starting thread (client mode): 0xf13edc90
2026-04-15T10:01:17.782 [DEBUG] [Thread-16941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:01:17.796 [DEBUG] [Thread-16941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:01:17.797 [INFO] [Thread-16941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:01:17.804 [DEBUG] [Thread-16941] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:01:17.804 [DEBUG] [Thread-16941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:01:17.804 [DEBUG] [Thread-16941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:01:17.804 [DEBUG] [Thread-16941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:01:17.804 [DEBUG] [Thread-16941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:01:17.804 [DEBUG] [Thread-16941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:01:17.804 [DEBUG] [Thread-16941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:01:17.805 [DEBUG] [Thread-16941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:01:17.805 [DEBUG] [Thread-16941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:01:17.805 [DEBUG] [Thread-16941] [transport.py] [_log()] client lang: <none>
2026-04-15T10:01:17.805 [DEBUG] [Thread-16941] [transport.py] [_log()] server lang: <none>
2026-04-15T10:01:17.805 [DEBUG] [Thread-16941] [transport.py] [_log()] kex follows: False
2026-04-15T10:01:17.805 [DEBUG] [Thread-16941] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:01:17.805 [DEBUG] [Thread-16941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:01:17.805 [DEBUG] [Thread-16941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:01:17.805 [DEBUG] [Thread-16941] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:01:17.805 [DEBUG] [Thread-16941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:01:17.805 [DEBUG] [Thread-16941] [transport.py] [_log()] Compression: none
2026-04-15T10:01:17.806 [DEBUG] [Thread-16941] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:01:17.861 [DEBUG] [Thread-16941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:01:17.862 [DEBUG] [Thread-16941] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:01:17.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:01:17.862 [DEBUG] [Thread-16941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:01:17.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:01:17.919 [DEBUG] [Thread-16941] [transport.py] [_log()] userauth is OK
2026-04-15T10:01:17.919 [DEBUG] [Thread-16941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:01:17.919 [DEBUG] [Thread-16941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:01:17.920 [DEBUG] [Thread-16941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:01:17.920 [DEBUG] [Thread-16941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:01:17.945 [INFO] [Thread-16941] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:01:17.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:01:17.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:01:18.775 [DEBUG] [Thread-16941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:01:18.776 [DEBUG] [Thread-16941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:01:18.823 [DEBUG] [Thread-16941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:01:18.824 [DEBUG] [Thread-16941] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:01:18.833 [DEBUG] [Thread-16941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:01:18.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:01:18.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')
2026-04-15T10:01:18.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
2026-04-15T10:01:18.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:01:18.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:01:18.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:01:18.870 [DEBUG] [Thread-16941] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:01:25.664 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:01:25.666 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:01:31.283 [DEBUG] [Thread-16943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:01:46.325 [DEBUG] [Thread-16944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:01:48.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:01:48.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:01:48.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
2026-04-15T10:01:50.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 1, 19), 0.18916, 98.5469, 0.0, 12.6166, 9.43852, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:01:50.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:01:19
2026-04-15T10:01:50.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:01:51.017 [DEBUG] [Thread-16945] [transport.py] [_log()] starting thread (client mode): 0xee98a2c0
2026-04-15T10:01:51.018 [DEBUG] [Thread-16945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:01:51.038 [DEBUG] [Thread-16945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:01:51.038 [INFO] [Thread-16945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:01:51.041 [DEBUG] [Thread-16945] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:01:51.041 [DEBUG] [Thread-16945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:01:51.041 [DEBUG] [Thread-16945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:01:51.042 [DEBUG] [Thread-16945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:01:51.042 [DEBUG] [Thread-16945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:01:51.042 [DEBUG] [Thread-16945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:01:51.042 [DEBUG] [Thread-16945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:01:51.042 [DEBUG] [Thread-16945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:01:51.042 [DEBUG] [Thread-16945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:01:51.042 [DEBUG] [Thread-16945] [transport.py] [_log()] client lang: <none>
2026-04-15T10:01:51.042 [DEBUG] [Thread-16945] [transport.py] [_log()] server lang: <none>
2026-04-15T10:01:51.042 [DEBUG] [Thread-16945] [transport.py] [_log()] kex follows: False
2026-04-15T10:01:51.042 [DEBUG] [Thread-16945] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:01:51.042 [DEBUG] [Thread-16945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:01:51.042 [DEBUG] [Thread-16945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:01:51.043 [DEBUG] [Thread-16945] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:01:51.043 [DEBUG] [Thread-16945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:01:51.043 [DEBUG] [Thread-16945] [transport.py] [_log()] Compression: none
2026-04-15T10:01:51.043 [DEBUG] [Thread-16945] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:01:51.063 [DEBUG] [Thread-16945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:01:51.063 [DEBUG] [Thread-16945] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:01:51.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:01:51.064 [DEBUG] [Thread-16945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:01:51.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:01:51.065 [DEBUG] [Thread-16945] [transport.py] [_log()] userauth is OK
2026-04-15T10:01:51.065 [DEBUG] [Thread-16945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:01:51.065 [DEBUG] [Thread-16945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:01:51.065 [DEBUG] [Thread-16945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:01:51.065 [DEBUG] [Thread-16945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:01:51.089 [INFO] [Thread-16945] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:01:51.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:01:51.689 [DEBUG] [Thread-16945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:01:51.689 [DEBUG] [Thread-16945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:01:51.690 [DEBUG] [Thread-16945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:01:51.730 [DEBUG] [Thread-16945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:01:51.730 [DEBUG] [Thread-16945] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:01:51.733 [DEBUG] [Thread-16945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:01:51.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:01:51.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:01:51.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:01:51.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:01:51.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:01:51.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:01:51.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:01:51.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:01:51.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:01:51.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.334505 -999.00   +9.50  13.51     93   +8.50 1 3 1 3 1   888    0 1.58 26.65 ----- 13.5 13.5 307.6 18.1 13.1 -3.4 12.8 -3.5 12.2 -2.4 12.5 -2.6
2026-04-15T10:01:51.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:01:51.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:01:51.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.334505
2026-04-15T10:01:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:01:51.755 [DEBUG] [Thread-16945] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:01:51.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:01:51.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:01:51.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:01:51.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:01:51.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:01:19', tmtdew=0.18916, humidity=98.5469, cloud=0.0, wind=12.6166, temperature=9.43852, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:01:41.232', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:01:51.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:01:52.009 [DEBUG] [Thread-16948] [transport.py] [_log()] starting thread (client mode): 0xee989c60
2026-04-15T10:01:52.009 [DEBUG] [Thread-16948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:01:52.024 [DEBUG] [Thread-16948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:01:52.024 [INFO] [Thread-16948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:01:52.031 [DEBUG] [Thread-16948] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:01:52.031 [DEBUG] [Thread-16948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:01:52.031 [DEBUG] [Thread-16948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:01:52.031 [DEBUG] [Thread-16948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:01:52.031 [DEBUG] [Thread-16948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:01:52.031 [DEBUG] [Thread-16948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:01:52.032 [DEBUG] [Thread-16948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:01:52.032 [DEBUG] [Thread-16948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:01:52.032 [DEBUG] [Thread-16948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:01:52.032 [DEBUG] [Thread-16948] [transport.py] [_log()] client lang: <none>
2026-04-15T10:01:52.032 [DEBUG] [Thread-16948] [transport.py] [_log()] server lang: <none>
2026-04-15T10:01:52.032 [DEBUG] [Thread-16948] [transport.py] [_log()] kex follows: False
2026-04-15T10:01:52.032 [DEBUG] [Thread-16948] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:01:52.032 [DEBUG] [Thread-16948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:01:52.032 [DEBUG] [Thread-16948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:01:52.032 [DEBUG] [Thread-16948] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:01:52.032 [DEBUG] [Thread-16948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:01:52.033 [DEBUG] [Thread-16948] [transport.py] [_log()] Compression: none
2026-04-15T10:01:52.033 [DEBUG] [Thread-16948] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:01:52.090 [DEBUG] [Thread-16948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:01:52.090 [DEBUG] [Thread-16948] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:01:52.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:01:52.091 [DEBUG] [Thread-16948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:01:52.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:01:52.148 [DEBUG] [Thread-16948] [transport.py] [_log()] userauth is OK
2026-04-15T10:01:52.148 [DEBUG] [Thread-16948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:01:52.148 [DEBUG] [Thread-16948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:01:52.148 [DEBUG] [Thread-16948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:01:52.149 [DEBUG] [Thread-16948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:01:52.174 [INFO] [Thread-16948] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:01:52.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:01:52.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:01:53.000 [DEBUG] [Thread-16948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:01:53.000 [DEBUG] [Thread-16948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:01:53.048 [DEBUG] [Thread-16948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:01:53.048 [DEBUG] [Thread-16948] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:01:53.057 [DEBUG] [Thread-16948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:01:53.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:01:53.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')
2026-04-15T10:01:53.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
2026-04-15T10:01:53.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:01:53.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:01:53.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:01:53.092 [DEBUG] [Thread-16948] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:01:59.155 [DEBUG] [Thread-16950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:02:01.354 [DEBUG] [Thread-16951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:02:16.398 [DEBUG] [Thread-16952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:02:23.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:02:23.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:02:23.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
2026-04-15T10:02:24.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 1, 54), 0.30327, 97.9277, 0.0, 16.7263, 9.87785, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:02:24.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:01:54
2026-04-15T10:02:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:02:25.206 [DEBUG] [Thread-16953] [transport.py] [_log()] starting thread (client mode): 0xee906c80
2026-04-15T10:02:25.206 [DEBUG] [Thread-16953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:02:25.225 [DEBUG] [Thread-16953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:02:25.225 [INFO] [Thread-16953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:02:25.227 [DEBUG] [Thread-16953] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:02:25.227 [DEBUG] [Thread-16953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:02:25.227 [DEBUG] [Thread-16953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:02:25.227 [DEBUG] [Thread-16953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:02:25.227 [DEBUG] [Thread-16953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:02:25.227 [DEBUG] [Thread-16953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:02:25.227 [DEBUG] [Thread-16953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:02:25.227 [DEBUG] [Thread-16953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:02:25.227 [DEBUG] [Thread-16953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:02:25.228 [DEBUG] [Thread-16953] [transport.py] [_log()] client lang: <none>
2026-04-15T10:02:25.228 [DEBUG] [Thread-16953] [transport.py] [_log()] server lang: <none>
2026-04-15T10:02:25.228 [DEBUG] [Thread-16953] [transport.py] [_log()] kex follows: False
2026-04-15T10:02:25.228 [DEBUG] [Thread-16953] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:02:25.228 [DEBUG] [Thread-16953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:02:25.228 [DEBUG] [Thread-16953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:02:25.228 [DEBUG] [Thread-16953] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:02:25.228 [DEBUG] [Thread-16953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:02:25.228 [DEBUG] [Thread-16953] [transport.py] [_log()] Compression: none
2026-04-15T10:02:25.228 [DEBUG] [Thread-16953] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:02:25.237 [DEBUG] [Thread-16953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:02:25.237 [DEBUG] [Thread-16953] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:02:25.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:02:25.238 [DEBUG] [Thread-16953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:02:25.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:02:25.239 [DEBUG] [Thread-16953] [transport.py] [_log()] userauth is OK
2026-04-15T10:02:25.239 [DEBUG] [Thread-16953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:02:25.239 [DEBUG] [Thread-16953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:02:25.239 [DEBUG] [Thread-16953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:02:25.239 [DEBUG] [Thread-16953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:02:25.256 [INFO] [Thread-16953] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:02:25.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:02:25.806 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:02:25.807 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:02:25.863 [DEBUG] [Thread-16953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:02:25.863 [DEBUG] [Thread-16953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:02:25.864 [DEBUG] [Thread-16953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:02:25.904 [DEBUG] [Thread-16953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:02:25.904 [DEBUG] [Thread-16953] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:02:25.906 [DEBUG] [Thread-16953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:02:25.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:02:25.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:02:25.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:02:25.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:02:25.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:02:25.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:02:25.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:02:25.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:02:25.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:02:25.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.334852 -999.00   +9.50   9.76     93   +8.50 1 3 1 3 1   888    0 1.67 29.73 ----- 9.8 9.8 297.2 14.0 13.1 -3.4 12.9 -3.1 12.3 -3.5 12.5 -2.5
2026-04-15T10:02:25.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:02:25.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:02:25.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.334852
2026-04-15T10:02:25.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:02:25.926 [DEBUG] [Thread-16953] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:02:25.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:02:25.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:02:25.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:02:25.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:02:25.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:01:54', tmtdew=0.30327, humidity=97.9277, cloud=0.0, wind=16.7263, temperature=9.87785, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:02:11.213', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:02:26.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:02:26.179 [DEBUG] [Thread-16956] [transport.py] [_log()] starting thread (client mode): 0xf13c9240
2026-04-15T10:02:26.179 [DEBUG] [Thread-16956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:02:26.194 [DEBUG] [Thread-16956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:02:26.194 [INFO] [Thread-16956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:02:26.201 [DEBUG] [Thread-16956] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:02:26.201 [DEBUG] [Thread-16956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:02:26.201 [DEBUG] [Thread-16956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:02:26.201 [DEBUG] [Thread-16956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:02:26.201 [DEBUG] [Thread-16956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:02:26.201 [DEBUG] [Thread-16956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:02:26.201 [DEBUG] [Thread-16956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:02:26.202 [DEBUG] [Thread-16956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:02:26.202 [DEBUG] [Thread-16956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:02:26.202 [DEBUG] [Thread-16956] [transport.py] [_log()] client lang: <none>
2026-04-15T10:02:26.202 [DEBUG] [Thread-16956] [transport.py] [_log()] server lang: <none>
2026-04-15T10:02:26.202 [DEBUG] [Thread-16956] [transport.py] [_log()] kex follows: False
2026-04-15T10:02:26.202 [DEBUG] [Thread-16956] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:02:26.202 [DEBUG] [Thread-16956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:02:26.202 [DEBUG] [Thread-16956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:02:26.202 [DEBUG] [Thread-16956] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:02:26.202 [DEBUG] [Thread-16956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:02:26.202 [DEBUG] [Thread-16956] [transport.py] [_log()] Compression: none
2026-04-15T10:02:26.202 [DEBUG] [Thread-16956] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:02:26.258 [DEBUG] [Thread-16956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:02:26.258 [DEBUG] [Thread-16956] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:02:26.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:02:26.259 [DEBUG] [Thread-16956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:02:26.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:02:26.314 [DEBUG] [Thread-16956] [transport.py] [_log()] userauth is OK
2026-04-15T10:02:26.314 [DEBUG] [Thread-16956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:02:26.315 [DEBUG] [Thread-16956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:02:26.315 [DEBUG] [Thread-16956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:02:26.315 [DEBUG] [Thread-16956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:02:26.333 [INFO] [Thread-16956] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:02:26.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:02:26.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:02:27.197 [DEBUG] [Thread-16956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:02:27.197 [DEBUG] [Thread-16956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:02:27.245 [DEBUG] [Thread-16956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:02:27.245 [DEBUG] [Thread-16956] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:02:27.254 [DEBUG] [Thread-16956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:02:27.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:02:27.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')
2026-04-15T10:02: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') -> 00000000
2026-04-15T10:02:27.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:02:27.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:02:27.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:02:27.288 [DEBUG] [Thread-16956] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:02:31.427 [DEBUG] [Thread-16958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:02:46.470 [DEBUG] [Thread-16959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:02:57.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:02:57.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:02: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
2026-04-15T10:02:58.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 2, 29), 0.204215, 98.4472, 0.0, 9.79344, 9.3721, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:02:58.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:02:29
2026-04-15T10:02:59.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:02:59.229 [DEBUG] [Thread-16960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:02:59.494 [DEBUG] [Thread-16961] [transport.py] [_log()] starting thread (client mode): 0xee904220
2026-04-15T10:02:59.494 [DEBUG] [Thread-16961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:02:59.508 [DEBUG] [Thread-16961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:02:59.508 [INFO] [Thread-16961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:02:59.510 [DEBUG] [Thread-16961] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:02:59.510 [DEBUG] [Thread-16961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:02:59.510 [DEBUG] [Thread-16961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:02:59.510 [DEBUG] [Thread-16961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:02:59.510 [DEBUG] [Thread-16961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:02:59.510 [DEBUG] [Thread-16961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:02:59.511 [DEBUG] [Thread-16961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:02:59.511 [DEBUG] [Thread-16961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:02:59.511 [DEBUG] [Thread-16961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:02:59.511 [DEBUG] [Thread-16961] [transport.py] [_log()] client lang: <none>
2026-04-15T10:02:59.511 [DEBUG] [Thread-16961] [transport.py] [_log()] server lang: <none>
2026-04-15T10:02:59.511 [DEBUG] [Thread-16961] [transport.py] [_log()] kex follows: False
2026-04-15T10:02:59.511 [DEBUG] [Thread-16961] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:02:59.511 [DEBUG] [Thread-16961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:02:59.511 [DEBUG] [Thread-16961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:02:59.511 [DEBUG] [Thread-16961] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:02:59.511 [DEBUG] [Thread-16961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:02:59.512 [DEBUG] [Thread-16961] [transport.py] [_log()] Compression: none
2026-04-15T10:02:59.512 [DEBUG] [Thread-16961] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:02:59.521 [DEBUG] [Thread-16961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:02:59.522 [DEBUG] [Thread-16961] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:02:59.522 [DEBUG] [Thread-16961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:02:59.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:02:59.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:02:59.523 [DEBUG] [Thread-16961] [transport.py] [_log()] userauth is OK
2026-04-15T10:02:59.523 [DEBUG] [Thread-16961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:02:59.523 [DEBUG] [Thread-16961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:02:59.524 [DEBUG] [Thread-16961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:02:59.524 [DEBUG] [Thread-16961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:02:59.540 [INFO] [Thread-16961] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:02:59.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:03:00.139 [DEBUG] [Thread-16961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:03:00.139 [DEBUG] [Thread-16961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:03:00.140 [DEBUG] [Thread-16961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:03:00.180 [DEBUG] [Thread-16961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:03:00.180 [DEBUG] [Thread-16961] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:03:00.182 [DEBUG] [Thread-16961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:03:00.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:03:00.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:03:00.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:03:00.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:03:00.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:03:00.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:03:00.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:03:00.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:03:00.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:03:00.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.335199 -999.00   +9.50  11.97     93   +8.50 1 3 1 3 1   888    0 1.73 30.27 ----- 12.0 12.0 312.8 15.2 13.2 -3.6 12.8 -3.5 12.3 -2.8 12.6 -2.7
2026-04-15T10:03:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:03:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:03:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.335199
2026-04-15T10:03:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:03:00.202 [DEBUG] [Thread-16961] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:03:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:03:00.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:03:00.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:03:00.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:03:00.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:02:29', tmtdew=0.204215, humidity=98.4472, cloud=0.0, wind=9.79344, temperature=9.3721, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:02:41.194', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:03:00.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:03:00.457 [DEBUG] [Thread-16964] [transport.py] [_log()] starting thread (client mode): 0xf13cb1f0
2026-04-15T10:03:00.457 [DEBUG] [Thread-16964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:03:00.471 [DEBUG] [Thread-16964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:03:00.471 [INFO] [Thread-16964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:03:00.478 [DEBUG] [Thread-16964] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:03:00.478 [DEBUG] [Thread-16964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:03:00.479 [DEBUG] [Thread-16964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:03:00.479 [DEBUG] [Thread-16964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:03:00.479 [DEBUG] [Thread-16964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:03:00.479 [DEBUG] [Thread-16964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:03:00.479 [DEBUG] [Thread-16964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:03:00.479 [DEBUG] [Thread-16964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:03:00.479 [DEBUG] [Thread-16964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:03:00.479 [DEBUG] [Thread-16964] [transport.py] [_log()] client lang: <none>
2026-04-15T10:03:00.479 [DEBUG] [Thread-16964] [transport.py] [_log()] server lang: <none>
2026-04-15T10:03:00.480 [DEBUG] [Thread-16964] [transport.py] [_log()] kex follows: False
2026-04-15T10:03:00.480 [DEBUG] [Thread-16964] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:03:00.480 [DEBUG] [Thread-16964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:03:00.480 [DEBUG] [Thread-16964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:03:00.480 [DEBUG] [Thread-16964] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:03:00.480 [DEBUG] [Thread-16964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:03:00.480 [DEBUG] [Thread-16964] [transport.py] [_log()] Compression: none
2026-04-15T10:03:00.480 [DEBUG] [Thread-16964] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:03:00.534 [DEBUG] [Thread-16964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:03:00.534 [DEBUG] [Thread-16964] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:03:00.534 [DEBUG] [Thread-16964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:03:00.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:03:00.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:03:00.591 [DEBUG] [Thread-16964] [transport.py] [_log()] userauth is OK
2026-04-15T10:03:00.591 [DEBUG] [Thread-16964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:03:00.591 [DEBUG] [Thread-16964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:03:00.591 [DEBUG] [Thread-16964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:03:00.592 [DEBUG] [Thread-16964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:03:00.614 [INFO] [Thread-16964] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:03:00.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:03:00.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:03:01.442 [DEBUG] [Thread-16964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:03:01.442 [DEBUG] [Thread-16964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:03:01.490 [DEBUG] [Thread-16964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:03:01.490 [DEBUG] [Thread-16964] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:03:01.499 [DEBUG] [Thread-16964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:03:01.501 [DEBUG] [Thread-16966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:03:01.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:03:01.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')
2026-04-15T10:03:01.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
2026-04-15T10:03:01.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:03:01.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:03:01.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:03:01.536 [DEBUG] [Thread-16964] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:03:16.548 [DEBUG] [Thread-16967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:03:25.945 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:03:25.946 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:03:31.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:03:31.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:03:31.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
2026-04-15T10:03:31.579 [DEBUG] [Thread-16968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:03:32.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 3, 5), 0.20169, 98.4638, 0.0, 10.4285, 9.3721, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:03:32.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:03:05
2026-04-15T10:03:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:03:33.654 [DEBUG] [Thread-16969] [transport.py] [_log()] starting thread (client mode): 0xee9895a0
2026-04-15T10:03:33.654 [DEBUG] [Thread-16969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:03:33.667 [DEBUG] [Thread-16969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:03:33.667 [INFO] [Thread-16969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:03:33.670 [DEBUG] [Thread-16969] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:03:33.670 [DEBUG] [Thread-16969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:03:33.670 [DEBUG] [Thread-16969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:03:33.670 [DEBUG] [Thread-16969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:03:33.670 [DEBUG] [Thread-16969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:03:33.670 [DEBUG] [Thread-16969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:03:33.670 [DEBUG] [Thread-16969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:03:33.670 [DEBUG] [Thread-16969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:03:33.670 [DEBUG] [Thread-16969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:03:33.670 [DEBUG] [Thread-16969] [transport.py] [_log()] client lang: <none>
2026-04-15T10:03:33.671 [DEBUG] [Thread-16969] [transport.py] [_log()] server lang: <none>
2026-04-15T10:03:33.671 [DEBUG] [Thread-16969] [transport.py] [_log()] kex follows: False
2026-04-15T10:03:33.671 [DEBUG] [Thread-16969] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:03:33.671 [DEBUG] [Thread-16969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:03:33.671 [DEBUG] [Thread-16969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:03:33.671 [DEBUG] [Thread-16969] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:03:33.671 [DEBUG] [Thread-16969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:03:33.671 [DEBUG] [Thread-16969] [transport.py] [_log()] Compression: none
2026-04-15T10:03:33.671 [DEBUG] [Thread-16969] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:03:33.687 [DEBUG] [Thread-16969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:03:33.687 [DEBUG] [Thread-16969] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:03:33.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:03:33.688 [DEBUG] [Thread-16969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:03:33.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:03:33.689 [DEBUG] [Thread-16969] [transport.py] [_log()] userauth is OK
2026-04-15T10:03:33.689 [DEBUG] [Thread-16969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:03:33.689 [DEBUG] [Thread-16969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:03:33.689 [DEBUG] [Thread-16969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:03:33.689 [DEBUG] [Thread-16969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:03:33.712 [INFO] [Thread-16969] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:03:33.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:03:34.319 [DEBUG] [Thread-16969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:03:34.319 [DEBUG] [Thread-16969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:03:34.320 [DEBUG] [Thread-16969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:03:34.359 [DEBUG] [Thread-16969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:03:34.359 [DEBUG] [Thread-16969] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:03:34.362 [DEBUG] [Thread-16969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:03:34.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:03:34.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:03:34.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:03:34.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:03:34.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:03:34.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:03:34.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:03:34.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:03:34.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:03:34.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.335547 -999.00   +9.60  10.93     93   +8.60 1 3 1 3 1   888    0 1.68 28.99 ----- 10.9 10.9 298.2 12.7 13.1 -3.6 12.9 -3.4 12.3 -2.8 12.7 -2.8
2026-04-15T10:03:34.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:03:34.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:03:34.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.335547
2026-04-15T10:03:34.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:03:34.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:03:34.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:03:34.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:03:34.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:03:34.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:03:05', tmtdew=0.20169, humidity=98.4638, cloud=0.0, wind=10.4285, temperature=9.3721, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:03:11.261', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:03:34.381 [DEBUG] [Thread-16969] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:03:34.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:03:34.601 [DEBUG] [Thread-16972] [transport.py] [_log()] starting thread (client mode): 0xee9ec340
2026-04-15T10:03:34.601 [DEBUG] [Thread-16972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:03:34.616 [DEBUG] [Thread-16972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:03:34.616 [INFO] [Thread-16972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:03:34.623 [DEBUG] [Thread-16972] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:03:34.623 [DEBUG] [Thread-16972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:03:34.623 [DEBUG] [Thread-16972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:03:34.623 [DEBUG] [Thread-16972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:03:34.623 [DEBUG] [Thread-16972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:03:34.623 [DEBUG] [Thread-16972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:03:34.624 [DEBUG] [Thread-16972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:03:34.624 [DEBUG] [Thread-16972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:03:34.624 [DEBUG] [Thread-16972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:03:34.624 [DEBUG] [Thread-16972] [transport.py] [_log()] client lang: <none>
2026-04-15T10:03:34.624 [DEBUG] [Thread-16972] [transport.py] [_log()] server lang: <none>
2026-04-15T10:03:34.624 [DEBUG] [Thread-16972] [transport.py] [_log()] kex follows: False
2026-04-15T10:03:34.624 [DEBUG] [Thread-16972] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:03:34.624 [DEBUG] [Thread-16972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:03:34.624 [DEBUG] [Thread-16972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:03:34.624 [DEBUG] [Thread-16972] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:03:34.624 [DEBUG] [Thread-16972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:03:34.624 [DEBUG] [Thread-16972] [transport.py] [_log()] Compression: none
2026-04-15T10:03:34.624 [DEBUG] [Thread-16972] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:03:34.679 [DEBUG] [Thread-16972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:03:34.679 [DEBUG] [Thread-16972] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:03:34.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:03:34.680 [DEBUG] [Thread-16972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:03:34.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:03:34.736 [DEBUG] [Thread-16972] [transport.py] [_log()] userauth is OK
2026-04-15T10:03:34.736 [DEBUG] [Thread-16972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:03:34.736 [DEBUG] [Thread-16972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:03:34.736 [DEBUG] [Thread-16972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:03:34.736 [DEBUG] [Thread-16972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:03:34.764 [INFO] [Thread-16972] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:03:34.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:03:34.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:03:35.574 [DEBUG] [Thread-16972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:03:35.575 [DEBUG] [Thread-16972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:03:35.623 [DEBUG] [Thread-16972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:03:35.624 [DEBUG] [Thread-16972] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:03:35.632 [DEBUG] [Thread-16972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:03:35.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:03:35.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')
2026-04-15T10:03: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') -> 00000000
2026-04-15T10:03:35.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:03:35.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:03:35.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:03:35.667 [DEBUG] [Thread-16972] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:03:46.607 [DEBUG] [Thread-16974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:03:59.329 [DEBUG] [Thread-16975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:04:01.647 [DEBUG] [Thread-16976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:04:05.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:04:05.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:04:05.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
2026-04-15T10:04:07.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 3, 40), 0.29368, 97.9938, 0.0, 16.5146, 10.1763, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:04:07.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:03:40
2026-04-15T10:04:07.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:04:07.899 [DEBUG] [Thread-16977] [transport.py] [_log()] starting thread (client mode): 0xf13c9390
2026-04-15T10:04:07.899 [DEBUG] [Thread-16977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:04:07.918 [DEBUG] [Thread-16977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:04:07.918 [INFO] [Thread-16977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:04:07.921 [DEBUG] [Thread-16977] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:04:07.921 [DEBUG] [Thread-16977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:04:07.921 [DEBUG] [Thread-16977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:04:07.921 [DEBUG] [Thread-16977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:04:07.921 [DEBUG] [Thread-16977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:04:07.921 [DEBUG] [Thread-16977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:04:07.921 [DEBUG] [Thread-16977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:04:07.921 [DEBUG] [Thread-16977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:04:07.921 [DEBUG] [Thread-16977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:04:07.921 [DEBUG] [Thread-16977] [transport.py] [_log()] client lang: <none>
2026-04-15T10:04:07.922 [DEBUG] [Thread-16977] [transport.py] [_log()] server lang: <none>
2026-04-15T10:04:07.922 [DEBUG] [Thread-16977] [transport.py] [_log()] kex follows: False
2026-04-15T10:04:07.922 [DEBUG] [Thread-16977] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:04:07.922 [DEBUG] [Thread-16977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:04:07.922 [DEBUG] [Thread-16977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:04:07.922 [DEBUG] [Thread-16977] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:04:07.922 [DEBUG] [Thread-16977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:04:07.922 [DEBUG] [Thread-16977] [transport.py] [_log()] Compression: none
2026-04-15T10:04:07.922 [DEBUG] [Thread-16977] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:04:07.936 [DEBUG] [Thread-16977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:04:07.936 [DEBUG] [Thread-16977] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:04:07.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:04:07.937 [DEBUG] [Thread-16977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:04:07.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:04:07.938 [DEBUG] [Thread-16977] [transport.py] [_log()] userauth is OK
2026-04-15T10:04:07.938 [DEBUG] [Thread-16977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:04:07.938 [DEBUG] [Thread-16977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:04:07.939 [DEBUG] [Thread-16977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:04:07.939 [DEBUG] [Thread-16977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:04:07.961 [INFO] [Thread-16977] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:04:07.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:04:08.561 [DEBUG] [Thread-16977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:04:08.561 [DEBUG] [Thread-16977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:04:08.562 [DEBUG] [Thread-16977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:04:08.602 [DEBUG] [Thread-16977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:04:08.602 [DEBUG] [Thread-16977] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:04:08.605 [DEBUG] [Thread-16977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:04:08.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:04:08.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:04:08.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:04:08.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:04:08.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:04:08.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:04:08.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:04:08.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:04:08.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:04:08.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.335894 -999.00   +9.80  18.77     93   +8.90 1 3 1 3 1   888    0 1.72 30.59 ----- 18.8 18.8 295.4 19.9 13.2 -3.8 13.1 -4.0 12.4 -2.8 12.7 -3.1
2026-04-15T10:04:08.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:04:08.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:04:08.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.335894
2026-04-15T10:04:08.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:04:08.629 [DEBUG] [Thread-16977] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:04:08.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:04:08.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:04:08.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:04:08.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:04:08.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:03:40', tmtdew=0.29368, humidity=97.9938, cloud=0.0, wind=16.5146, temperature=10.1763, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:03:41.242', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:04:08.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:04:08.887 [DEBUG] [Thread-16980] [transport.py] [_log()] starting thread (client mode): 0xee904a00
2026-04-15T10:04:08.887 [DEBUG] [Thread-16980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:04:08.902 [DEBUG] [Thread-16980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:04:08.902 [INFO] [Thread-16980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:04:08.910 [DEBUG] [Thread-16980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:04:08.910 [DEBUG] [Thread-16980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:04:08.910 [DEBUG] [Thread-16980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:04:08.910 [DEBUG] [Thread-16980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:04:08.910 [DEBUG] [Thread-16980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:04:08.910 [DEBUG] [Thread-16980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:04:08.910 [DEBUG] [Thread-16980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:04:08.910 [DEBUG] [Thread-16980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:04:08.910 [DEBUG] [Thread-16980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:04:08.910 [DEBUG] [Thread-16980] [transport.py] [_log()] client lang: <none>
2026-04-15T10:04:08.911 [DEBUG] [Thread-16980] [transport.py] [_log()] server lang: <none>
2026-04-15T10:04:08.911 [DEBUG] [Thread-16980] [transport.py] [_log()] kex follows: False
2026-04-15T10:04:08.911 [DEBUG] [Thread-16980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:04:08.911 [DEBUG] [Thread-16980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:04:08.911 [DEBUG] [Thread-16980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:04:08.911 [DEBUG] [Thread-16980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:04:08.911 [DEBUG] [Thread-16980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:04:08.911 [DEBUG] [Thread-16980] [transport.py] [_log()] Compression: none
2026-04-15T10:04:08.911 [DEBUG] [Thread-16980] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:04:08.968 [DEBUG] [Thread-16980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:04:08.968 [DEBUG] [Thread-16980] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:04:08.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:04:08.969 [DEBUG] [Thread-16980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:04:08.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:04:09.025 [DEBUG] [Thread-16980] [transport.py] [_log()] userauth is OK
2026-04-15T10:04:09.026 [DEBUG] [Thread-16980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:04:09.026 [DEBUG] [Thread-16980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:04:09.026 [DEBUG] [Thread-16980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:04:09.026 [DEBUG] [Thread-16980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:04:09.051 [INFO] [Thread-16980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:04:09.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:04:09.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:04:09.919 [DEBUG] [Thread-16980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:04:09.920 [DEBUG] [Thread-16980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:04:09.968 [DEBUG] [Thread-16980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:04:09.968 [DEBUG] [Thread-16980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:04:09.977 [DEBUG] [Thread-16980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:04:09.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:04:09.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')
2026-04-15T10:04:09.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
2026-04-15T10:04:10.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:04:10.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:04:10.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:04:10.014 [DEBUG] [Thread-16980] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:04:16.677 [DEBUG] [Thread-16982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:04:26.087 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:04:26.088 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:04:31.719 [DEBUG] [Thread-16983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:04:40.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:04:40.037 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:04:40.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
2026-04-15T10:04:41.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 4, 16), 0.15449, 98.4471, 0.0, 13.6397, 9.57127, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:04:41.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:04:16
2026-04-15T10:04:41.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:04:42.324 [DEBUG] [Thread-16984] [transport.py] [_log()] starting thread (client mode): 0xf13ec160
2026-04-15T10:04:42.325 [DEBUG] [Thread-16984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:04:42.334 [DEBUG] [Thread-16984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:04:42.334 [INFO] [Thread-16984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:04:42.335 [DEBUG] [Thread-16984] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:04:42.335 [DEBUG] [Thread-16984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:04:42.335 [DEBUG] [Thread-16984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:04:42.335 [DEBUG] [Thread-16984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:04:42.335 [DEBUG] [Thread-16984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:04:42.336 [DEBUG] [Thread-16984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:04:42.336 [DEBUG] [Thread-16984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:04:42.336 [DEBUG] [Thread-16984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:04:42.336 [DEBUG] [Thread-16984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:04:42.336 [DEBUG] [Thread-16984] [transport.py] [_log()] client lang: <none>
2026-04-15T10:04:42.336 [DEBUG] [Thread-16984] [transport.py] [_log()] server lang: <none>
2026-04-15T10:04:42.336 [DEBUG] [Thread-16984] [transport.py] [_log()] kex follows: False
2026-04-15T10:04:42.336 [DEBUG] [Thread-16984] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:04:42.336 [DEBUG] [Thread-16984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:04:42.336 [DEBUG] [Thread-16984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:04:42.336 [DEBUG] [Thread-16984] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:04:42.336 [DEBUG] [Thread-16984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:04:42.337 [DEBUG] [Thread-16984] [transport.py] [_log()] Compression: none
2026-04-15T10:04:42.337 [DEBUG] [Thread-16984] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:04:42.345 [DEBUG] [Thread-16984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:04:42.345 [DEBUG] [Thread-16984] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:04:42.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:04:42.346 [DEBUG] [Thread-16984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:04:42.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:04:42.347 [DEBUG] [Thread-16984] [transport.py] [_log()] userauth is OK
2026-04-15T10:04:42.347 [DEBUG] [Thread-16984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:04:42.347 [DEBUG] [Thread-16984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:04:42.347 [DEBUG] [Thread-16984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:04:42.347 [DEBUG] [Thread-16984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:04:42.362 [INFO] [Thread-16984] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:04:42.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:04:42.948 [DEBUG] [Thread-16984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:04:42.948 [DEBUG] [Thread-16984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:04:42.949 [DEBUG] [Thread-16984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:04:42.989 [DEBUG] [Thread-16984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:04:42.989 [DEBUG] [Thread-16984] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:04:42.992 [DEBUG] [Thread-16984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:04:42.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:04:42.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:04:43.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:04:43.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:04:43.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:04:43.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:04:43.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:04:43.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:04:43.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:04:43.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.336241 -999.00   +9.50  14.69     92   +8.40 1 3 1 3 1   888    0 1.75 31.01 ----- 14.7 14.7 296.2 19.8 13.2 -4.6 13.0 -4.2 12.4 -4.1 12.7 -3.3
2026-04-15T10:04:43.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:04:43.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:04:43.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.336241
2026-04-15T10:04:43.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:04:43.013 [DEBUG] [Thread-16984] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:04:43.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:04:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:04:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:04:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:04:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:04:16', tmtdew=0.15449, humidity=98.4471, cloud=0.0, wind=13.6397, temperature=9.57127, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:04:11.222', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:04:43.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:04:43.269 [DEBUG] [Thread-16987] [transport.py] [_log()] starting thread (client mode): 0xf13c9450
2026-04-15T10:04:43.269 [DEBUG] [Thread-16987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:04:43.284 [DEBUG] [Thread-16987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:04:43.284 [INFO] [Thread-16987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:04:43.291 [DEBUG] [Thread-16987] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:04:43.292 [DEBUG] [Thread-16987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:04:43.292 [DEBUG] [Thread-16987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:04:43.292 [DEBUG] [Thread-16987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:04:43.292 [DEBUG] [Thread-16987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:04:43.292 [DEBUG] [Thread-16987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:04:43.292 [DEBUG] [Thread-16987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:04:43.292 [DEBUG] [Thread-16987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:04:43.292 [DEBUG] [Thread-16987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:04:43.292 [DEBUG] [Thread-16987] [transport.py] [_log()] client lang: <none>
2026-04-15T10:04:43.292 [DEBUG] [Thread-16987] [transport.py] [_log()] server lang: <none>
2026-04-15T10:04:43.292 [DEBUG] [Thread-16987] [transport.py] [_log()] kex follows: False
2026-04-15T10:04:43.292 [DEBUG] [Thread-16987] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:04:43.292 [DEBUG] [Thread-16987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:04:43.293 [DEBUG] [Thread-16987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:04:43.293 [DEBUG] [Thread-16987] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:04:43.293 [DEBUG] [Thread-16987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:04:43.293 [DEBUG] [Thread-16987] [transport.py] [_log()] Compression: none
2026-04-15T10:04:43.293 [DEBUG] [Thread-16987] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:04:43.352 [DEBUG] [Thread-16987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:04:43.352 [DEBUG] [Thread-16987] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:04:43.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:04:43.353 [DEBUG] [Thread-16987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:04:43.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:04:43.411 [DEBUG] [Thread-16987] [transport.py] [_log()] userauth is OK
2026-04-15T10:04:43.411 [DEBUG] [Thread-16987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:04:43.412 [DEBUG] [Thread-16987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:04:43.412 [DEBUG] [Thread-16987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:04:43.412 [DEBUG] [Thread-16987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:04:43.437 [INFO] [Thread-16987] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:04:43.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:04:43.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:04:44.261 [DEBUG] [Thread-16987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:04:44.261 [DEBUG] [Thread-16987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:04:44.308 [DEBUG] [Thread-16987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:04:44.309 [DEBUG] [Thread-16987] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:04:44.317 [DEBUG] [Thread-16987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:04:44.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:04:44.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')
2026-04-15T10:04:44.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
2026-04-15T10:04:44.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:04:44.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:04:44.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:04:44.353 [DEBUG] [Thread-16987] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:04:46.750 [DEBUG] [Thread-16989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:04:59.422 [DEBUG] [Thread-16990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:05:01.795 [DEBUG] [Thread-16991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:05:14.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:05:14.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:05:14.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
2026-04-15T10:05:15.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 4, 51), 0.30898, 97.8941, 0.0, 15.7738, 10.2425, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:05:15.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:04:51
2026-04-15T10:05:16.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:05:16.515 [DEBUG] [Thread-16992] [transport.py] [_log()] starting thread (client mode): 0xf13ef790
2026-04-15T10:05:16.515 [DEBUG] [Thread-16992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:05:16.528 [DEBUG] [Thread-16992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:05:16.528 [INFO] [Thread-16992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:05:16.531 [DEBUG] [Thread-16992] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:05:16.531 [DEBUG] [Thread-16992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:05:16.531 [DEBUG] [Thread-16992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:05:16.531 [DEBUG] [Thread-16992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:05:16.531 [DEBUG] [Thread-16992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:05:16.531 [DEBUG] [Thread-16992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:05:16.531 [DEBUG] [Thread-16992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:05:16.532 [DEBUG] [Thread-16992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:05:16.532 [DEBUG] [Thread-16992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:05:16.532 [DEBUG] [Thread-16992] [transport.py] [_log()] client lang: <none>
2026-04-15T10:05:16.532 [DEBUG] [Thread-16992] [transport.py] [_log()] server lang: <none>
2026-04-15T10:05:16.532 [DEBUG] [Thread-16992] [transport.py] [_log()] kex follows: False
2026-04-15T10:05:16.532 [DEBUG] [Thread-16992] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:05:16.532 [DEBUG] [Thread-16992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:05:16.532 [DEBUG] [Thread-16992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:05:16.532 [DEBUG] [Thread-16992] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:05:16.532 [DEBUG] [Thread-16992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:05:16.532 [DEBUG] [Thread-16992] [transport.py] [_log()] Compression: none
2026-04-15T10:05:16.532 [DEBUG] [Thread-16992] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:05:16.549 [DEBUG] [Thread-16992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:05:16.549 [DEBUG] [Thread-16992] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:05:16.550 [DEBUG] [Thread-16992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:05:16.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:05:16.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:05:16.551 [DEBUG] [Thread-16992] [transport.py] [_log()] userauth is OK
2026-04-15T10:05:16.551 [DEBUG] [Thread-16992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:05:16.551 [DEBUG] [Thread-16992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:05:16.551 [DEBUG] [Thread-16992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:05:16.552 [DEBUG] [Thread-16992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:05:16.570 [INFO] [Thread-16992] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:05:16.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:05:16.826 [DEBUG] [Thread-16994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:05:21.955 [DEBUG] [Thread-16992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:05:21.955 [DEBUG] [Thread-16992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:05:21.956 [DEBUG] [Thread-16992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:05:21.996 [DEBUG] [Thread-16992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:05:21.996 [DEBUG] [Thread-16992] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:05:21.999 [DEBUG] [Thread-16992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:05:22.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:05:22.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:05:22.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:05:22.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:05:22.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:05:22.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:05:22.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:05:22.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:05:22.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:05:22.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.336241 -999.00   +9.50  14.69     92   +8.40 1 3 1 3 1   888    0 1.75 31.01 ----- 14.7 14.7 296.2 19.8 13.2 -4.6 13.0 -4.2 12.4 -4.1 12.7 -3.3
2026-04-15T10:05:22.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:05:22.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:05:22.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.336241
2026-04-15T10:05:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:05:22.123 [DEBUG] [Thread-16992] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:05:22.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:05:22.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:05:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:05:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:05:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:04:51', tmtdew=0.30898, humidity=97.8941, cloud=0.0, wind=15.7738, temperature=10.2425, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:04:11.222', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:05:22.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:05:22.385 [DEBUG] [Thread-16996] [transport.py] [_log()] starting thread (client mode): 0xee9ee950
2026-04-15T10:05:22.385 [DEBUG] [Thread-16996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:05:22.399 [DEBUG] [Thread-16996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:05:22.399 [INFO] [Thread-16996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:05:22.406 [DEBUG] [Thread-16996] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:05:22.407 [DEBUG] [Thread-16996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:05:22.407 [DEBUG] [Thread-16996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:05:22.407 [DEBUG] [Thread-16996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:05:22.407 [DEBUG] [Thread-16996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:05:22.407 [DEBUG] [Thread-16996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:05:22.407 [DEBUG] [Thread-16996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:05:22.407 [DEBUG] [Thread-16996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:05:22.407 [DEBUG] [Thread-16996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:05:22.407 [DEBUG] [Thread-16996] [transport.py] [_log()] client lang: <none>
2026-04-15T10:05:22.407 [DEBUG] [Thread-16996] [transport.py] [_log()] server lang: <none>
2026-04-15T10:05:22.407 [DEBUG] [Thread-16996] [transport.py] [_log()] kex follows: False
2026-04-15T10:05:22.407 [DEBUG] [Thread-16996] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:05:22.407 [DEBUG] [Thread-16996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:05:22.408 [DEBUG] [Thread-16996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:05:22.408 [DEBUG] [Thread-16996] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:05:22.408 [DEBUG] [Thread-16996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:05:22.408 [DEBUG] [Thread-16996] [transport.py] [_log()] Compression: none
2026-04-15T10:05:22.408 [DEBUG] [Thread-16996] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:05:22.463 [DEBUG] [Thread-16996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:05:22.464 [DEBUG] [Thread-16996] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:05:22.464 [DEBUG] [Thread-16996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:05:22.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:05:22.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:05:22.521 [DEBUG] [Thread-16996] [transport.py] [_log()] userauth is OK
2026-04-15T10:05:22.521 [DEBUG] [Thread-16996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:05:22.521 [DEBUG] [Thread-16996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:05:22.521 [DEBUG] [Thread-16996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:05:22.521 [DEBUG] [Thread-16996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:05:22.546 [INFO] [Thread-16996] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:05:22.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:05:22.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:05:23.351 [DEBUG] [Thread-16996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:05:23.352 [DEBUG] [Thread-16996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:05:23.399 [DEBUG] [Thread-16996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:05:23.399 [DEBUG] [Thread-16996] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:05:23.408 [DEBUG] [Thread-16996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:05:23.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:05:23.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')
2026-04-15T10:05:23.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
2026-04-15T10:05:23.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:05:23.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:05:23.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:05:23.443 [DEBUG] [Thread-16996] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:05:26.228 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:05:26.229 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:05:31.856 [DEBUG] [Thread-16998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:05:46.897 [DEBUG] [Thread-16999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:05:53.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:05:53.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:05:53.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
2026-04-15T10:05:54.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 5, 27), 0.219625, 98.3475, 0.0, 13.9572, 9.53806, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:05:54.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:05:27
2026-04-15T10:05:55.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:05:55.571 [DEBUG] [Thread-17000] [transport.py] [_log()] starting thread (client mode): 0xee9eece0
2026-04-15T10:05:55.572 [DEBUG] [Thread-17000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:05:55.592 [DEBUG] [Thread-17000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:05:55.592 [INFO] [Thread-17000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:05:55.595 [DEBUG] [Thread-17000] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:05:55.595 [DEBUG] [Thread-17000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:05:55.595 [DEBUG] [Thread-17000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:05:55.596 [DEBUG] [Thread-17000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:05:55.596 [DEBUG] [Thread-17000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:05:55.596 [DEBUG] [Thread-17000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:05:55.596 [DEBUG] [Thread-17000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:05:55.596 [DEBUG] [Thread-17000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:05:55.596 [DEBUG] [Thread-17000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:05:55.596 [DEBUG] [Thread-17000] [transport.py] [_log()] client lang: <none>
2026-04-15T10:05:55.596 [DEBUG] [Thread-17000] [transport.py] [_log()] server lang: <none>
2026-04-15T10:05:55.596 [DEBUG] [Thread-17000] [transport.py] [_log()] kex follows: False
2026-04-15T10:05:55.596 [DEBUG] [Thread-17000] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:05:55.596 [DEBUG] [Thread-17000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:05:55.597 [DEBUG] [Thread-17000] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:05:55.597 [DEBUG] [Thread-17000] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:05:55.597 [DEBUG] [Thread-17000] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:05:55.597 [DEBUG] [Thread-17000] [transport.py] [_log()] Compression: none
2026-04-15T10:05:55.597 [DEBUG] [Thread-17000] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:05:55.610 [DEBUG] [Thread-17000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:05:55.610 [DEBUG] [Thread-17000] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:05:55.611 [DEBUG] [Thread-17000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:05:55.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:05:55.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:05:55.656 [DEBUG] [Thread-17000] [transport.py] [_log()] userauth is OK
2026-04-15T10:05:55.657 [DEBUG] [Thread-17000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:05:55.657 [DEBUG] [Thread-17000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:05:55.657 [DEBUG] [Thread-17000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:05:55.657 [DEBUG] [Thread-17000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:05:55.676 [INFO] [Thread-17000] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:05:55.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:05:56.488 [DEBUG] [Thread-17000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:05:56.488 [DEBUG] [Thread-17000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:05:56.489 [DEBUG] [Thread-17000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:05:56.529 [DEBUG] [Thread-17000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:05:56.529 [DEBUG] [Thread-17000] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:05:56.532 [DEBUG] [Thread-17000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:05:56.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:05:56.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:05:56.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:05:56.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:05:56.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:05:56.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:05:56.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:05:56.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:05:56.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:05:56.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.336935 -999.00   +9.60  13.26     93   +8.50 1 3 1 3 1   888    0 1.93 36.50 ----- 13.3 13.3 296.0 16.7 13.3 -4.2 13.1 -3.8 12.4 -4.1 12.8 -3.3
2026-04-15T10:05:56.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:05:56.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:05:56.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.336935
2026-04-15T10:05:56.551 [DEBUG] [Thread-17000] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:05:56.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:05:56.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:05:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:05:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:05:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:05:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:05:27', tmtdew=0.219625, humidity=98.3475, cloud=0.0, wind=13.9572, temperature=9.53806, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:05:11.184', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:05:56.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:05:56.782 [DEBUG] [Thread-17003] [transport.py] [_log()] starting thread (client mode): 0xee9ed600
2026-04-15T10:05:56.782 [DEBUG] [Thread-17003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:05:56.797 [DEBUG] [Thread-17003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:05:56.797 [INFO] [Thread-17003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:05:56.804 [DEBUG] [Thread-17003] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:05:56.804 [DEBUG] [Thread-17003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:05:56.805 [DEBUG] [Thread-17003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:05:56.805 [DEBUG] [Thread-17003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:05:56.805 [DEBUG] [Thread-17003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:05:56.805 [DEBUG] [Thread-17003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:05:56.805 [DEBUG] [Thread-17003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:05:56.805 [DEBUG] [Thread-17003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:05:56.805 [DEBUG] [Thread-17003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:05:56.805 [DEBUG] [Thread-17003] [transport.py] [_log()] client lang: <none>
2026-04-15T10:05:56.805 [DEBUG] [Thread-17003] [transport.py] [_log()] server lang: <none>
2026-04-15T10:05:56.805 [DEBUG] [Thread-17003] [transport.py] [_log()] kex follows: False
2026-04-15T10:05:56.805 [DEBUG] [Thread-17003] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:05:56.805 [DEBUG] [Thread-17003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:05:56.806 [DEBUG] [Thread-17003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:05:56.806 [DEBUG] [Thread-17003] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:05:56.806 [DEBUG] [Thread-17003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:05:56.806 [DEBUG] [Thread-17003] [transport.py] [_log()] Compression: none
2026-04-15T10:05:56.806 [DEBUG] [Thread-17003] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:05:56.861 [DEBUG] [Thread-17003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:05:56.861 [DEBUG] [Thread-17003] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:05:56.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:05:56.862 [DEBUG] [Thread-17003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:05:56.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:05:56.918 [DEBUG] [Thread-17003] [transport.py] [_log()] userauth is OK
2026-04-15T10:05:56.918 [DEBUG] [Thread-17003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:05:56.918 [DEBUG] [Thread-17003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:05:56.918 [DEBUG] [Thread-17003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:05:56.919 [DEBUG] [Thread-17003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:05:56.944 [INFO] [Thread-17003] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:05:56.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:05:56.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:05:57.776 [DEBUG] [Thread-17003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:05:57.776 [DEBUG] [Thread-17003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:05:57.824 [DEBUG] [Thread-17003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:05:57.824 [DEBUG] [Thread-17003] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:05:57.833 [DEBUG] [Thread-17003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:05:57.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:05:57.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')
2026-04-15T10:05: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') -> 00000000
2026-04-15T10:05:57.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:05:57.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:05:57.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:05:57.868 [DEBUG] [Thread-17003] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:05:59.528 [DEBUG] [Thread-17005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:06:01.926 [DEBUG] [Thread-17006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:06:16.969 [DEBUG] [Thread-17007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:06:26.369 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:06:26.370 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:06:27.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:06:27.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:06:27.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
2026-04-15T10:06:29.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 6, 3), 0.217125, 98.3641, 0.0, 12.3167, 9.55464, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:06:29.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:06:03
2026-04-15T10:06:29.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:06:29.991 [DEBUG] [Thread-17008] [transport.py] [_log()] starting thread (client mode): 0xf1367160
2026-04-15T10:06:29.991 [DEBUG] [Thread-17008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:06:30.011 [DEBUG] [Thread-17008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:06:30.011 [INFO] [Thread-17008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:06:30.014 [DEBUG] [Thread-17008] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:06:30.015 [DEBUG] [Thread-17008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:06:30.015 [DEBUG] [Thread-17008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:06:30.015 [DEBUG] [Thread-17008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:06:30.015 [DEBUG] [Thread-17008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:06:30.015 [DEBUG] [Thread-17008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:06:30.015 [DEBUG] [Thread-17008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:06:30.015 [DEBUG] [Thread-17008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:06:30.015 [DEBUG] [Thread-17008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:06:30.015 [DEBUG] [Thread-17008] [transport.py] [_log()] client lang: <none>
2026-04-15T10:06:30.015 [DEBUG] [Thread-17008] [transport.py] [_log()] server lang: <none>
2026-04-15T10:06:30.015 [DEBUG] [Thread-17008] [transport.py] [_log()] kex follows: False
2026-04-15T10:06:30.015 [DEBUG] [Thread-17008] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:06:30.016 [DEBUG] [Thread-17008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:06:30.016 [DEBUG] [Thread-17008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:06:30.016 [DEBUG] [Thread-17008] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:06:30.016 [DEBUG] [Thread-17008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:06:30.016 [DEBUG] [Thread-17008] [transport.py] [_log()] Compression: none
2026-04-15T10:06:30.016 [DEBUG] [Thread-17008] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:06:30.032 [DEBUG] [Thread-17008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:06:30.033 [DEBUG] [Thread-17008] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:06:30.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:06:30.034 [DEBUG] [Thread-17008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:06:30.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:06:30.036 [DEBUG] [Thread-17008] [transport.py] [_log()] userauth is OK
2026-04-15T10:06:30.036 [DEBUG] [Thread-17008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:06:30.036 [DEBUG] [Thread-17008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:06:30.036 [DEBUG] [Thread-17008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:06:30.037 [DEBUG] [Thread-17008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:06:30.055 [INFO] [Thread-17008] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:06:30.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:06:30.827 [DEBUG] [Thread-17008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:06:30.828 [DEBUG] [Thread-17008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:06:30.828 [DEBUG] [Thread-17008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:06:30.868 [DEBUG] [Thread-17008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:06:30.868 [DEBUG] [Thread-17008] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:06:30.871 [DEBUG] [Thread-17008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:06:30.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:06:30.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:06:30.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:06:30.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:06:30.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:06:30.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:06:30.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:06:30.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:06:30.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:06:30.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.337283 -999.00   +9.60  15.19     93   +8.60 1 3 1 3 1   888    0 1.96 37.73 ----- 15.2 15.2 285.8 16.7 13.4 -4.1 13.2 -3.9 12.5 -3.1 12.8 -3.6
2026-04-15T10:06:30.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:06:30.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:06:30.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.337283
2026-04-15T10:06:30.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:06:30.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:06:30.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:06:30.896 [DEBUG] [Thread-17008] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:06:30.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:06:30.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:06:30.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:06:03', tmtdew=0.217125, humidity=98.3641, cloud=0.0, wind=12.3167, temperature=9.55464, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:05:41.251', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:06:31.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:06:31.136 [DEBUG] [Thread-17011] [transport.py] [_log()] starting thread (client mode): 0xee927af0
2026-04-15T10:06:31.136 [DEBUG] [Thread-17011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:06:31.150 [DEBUG] [Thread-17011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:06:31.150 [INFO] [Thread-17011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:06:31.158 [DEBUG] [Thread-17011] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:06:31.158 [DEBUG] [Thread-17011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:06:31.158 [DEBUG] [Thread-17011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:06:31.158 [DEBUG] [Thread-17011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:06:31.158 [DEBUG] [Thread-17011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:06:31.158 [DEBUG] [Thread-17011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:06:31.158 [DEBUG] [Thread-17011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:06:31.158 [DEBUG] [Thread-17011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:06:31.158 [DEBUG] [Thread-17011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:06:31.158 [DEBUG] [Thread-17011] [transport.py] [_log()] client lang: <none>
2026-04-15T10:06:31.159 [DEBUG] [Thread-17011] [transport.py] [_log()] server lang: <none>
2026-04-15T10:06:31.159 [DEBUG] [Thread-17011] [transport.py] [_log()] kex follows: False
2026-04-15T10:06:31.159 [DEBUG] [Thread-17011] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:06:31.159 [DEBUG] [Thread-17011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:06:31.159 [DEBUG] [Thread-17011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:06:31.159 [DEBUG] [Thread-17011] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:06:31.159 [DEBUG] [Thread-17011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:06:31.159 [DEBUG] [Thread-17011] [transport.py] [_log()] Compression: none
2026-04-15T10:06:31.159 [DEBUG] [Thread-17011] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:06:31.216 [DEBUG] [Thread-17011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:06:31.216 [DEBUG] [Thread-17011] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:06:31.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:06:31.217 [DEBUG] [Thread-17011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:06:31.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:06:31.273 [DEBUG] [Thread-17011] [transport.py] [_log()] userauth is OK
2026-04-15T10:06:31.273 [DEBUG] [Thread-17011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:06:31.274 [DEBUG] [Thread-17011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:06:31.274 [DEBUG] [Thread-17011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:06:31.274 [DEBUG] [Thread-17011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:06:31.299 [INFO] [Thread-17011] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:06:31.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:06:31.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:06:31.999 [DEBUG] [Thread-17013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:06:32.123 [DEBUG] [Thread-17011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:06:32.123 [DEBUG] [Thread-17011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:06:32.171 [DEBUG] [Thread-17011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:06:32.171 [DEBUG] [Thread-17011] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:06:32.180 [DEBUG] [Thread-17011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:06:32.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:06:32.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')
2026-04-15T10:06:32.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
2026-04-15T10:06:32.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:06:32.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:06:32.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:06:32.214 [DEBUG] [Thread-17011] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:06:47.041 [DEBUG] [Thread-17014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:06:59.612 [DEBUG] [Thread-17015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:07:02.073 [DEBUG] [Thread-17016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:07:02.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:07:02.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:07:02.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
2026-04-15T10:07:03.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 6, 39), 0.34962, 97.6285, 0.0, 13.6217, 10.3088, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:07:03.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:06:39
2026-04-15T10:07:04.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:07:04.484 [DEBUG] [Thread-17017] [transport.py] [_log()] starting thread (client mode): 0xf13e0640
2026-04-15T10:07:04.484 [DEBUG] [Thread-17017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:07:04.503 [DEBUG] [Thread-17017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:07:04.503 [INFO] [Thread-17017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:07:04.506 [DEBUG] [Thread-17017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:07:04.506 [DEBUG] [Thread-17017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:07:04.506 [DEBUG] [Thread-17017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:07:04.506 [DEBUG] [Thread-17017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:07:04.506 [DEBUG] [Thread-17017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:07:04.507 [DEBUG] [Thread-17017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:07:04.507 [DEBUG] [Thread-17017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:07:04.507 [DEBUG] [Thread-17017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:07:04.507 [DEBUG] [Thread-17017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:07:04.507 [DEBUG] [Thread-17017] [transport.py] [_log()] client lang: <none>
2026-04-15T10:07:04.507 [DEBUG] [Thread-17017] [transport.py] [_log()] server lang: <none>
2026-04-15T10:07:04.507 [DEBUG] [Thread-17017] [transport.py] [_log()] kex follows: False
2026-04-15T10:07:04.507 [DEBUG] [Thread-17017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:07:04.507 [DEBUG] [Thread-17017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:07:04.507 [DEBUG] [Thread-17017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:07:04.507 [DEBUG] [Thread-17017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:07:04.507 [DEBUG] [Thread-17017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:07:04.507 [DEBUG] [Thread-17017] [transport.py] [_log()] Compression: none
2026-04-15T10:07:04.507 [DEBUG] [Thread-17017] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:07:04.518 [DEBUG] [Thread-17017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:07:04.519 [DEBUG] [Thread-17017] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:07:04.519 [DEBUG] [Thread-17017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:07:04.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:07:04.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:07:04.520 [DEBUG] [Thread-17017] [transport.py] [_log()] userauth is OK
2026-04-15T10:07:04.520 [DEBUG] [Thread-17017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:07:04.520 [DEBUG] [Thread-17017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:07:04.520 [DEBUG] [Thread-17017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:07:04.520 [DEBUG] [Thread-17017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:07:04.539 [INFO] [Thread-17017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:07:04.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:07:05.106 [DEBUG] [Thread-17017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:07:05.107 [DEBUG] [Thread-17017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:07:05.107 [DEBUG] [Thread-17017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:07:05.147 [DEBUG] [Thread-17017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:07:05.147 [DEBUG] [Thread-17017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:07:05.149 [DEBUG] [Thread-17017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:07:05.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:07:05.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:07:05.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:07:05.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:07:05.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:07:05.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:07:05.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:07:05.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:07:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:07:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.337977 -999.00   +9.70  11.56     93   +8.60 1 3 1 3 1   888    0 2.00 37.64 ----- 11.6 11.6 317.8 20.8 13.6 -4.9 13.3 -4.2 12.6 -4.4 12.9 -3.8
2026-04-15T10:07:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:07:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:07:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.337977
2026-04-15T10:07:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:07:05.166 [DEBUG] [Thread-17017] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:07:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:07:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:07:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:07:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:07:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:06:39', tmtdew=0.34962, humidity=97.6285, cloud=0.0, wind=13.6217, temperature=10.3088, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:06:41.213', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:07:05.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:07:05.391 [DEBUG] [Thread-17020] [transport.py] [_log()] starting thread (client mode): 0xf13e32e0
2026-04-15T10:07:05.391 [DEBUG] [Thread-17020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:07:05.406 [DEBUG] [Thread-17020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:07:05.406 [INFO] [Thread-17020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:07:05.414 [DEBUG] [Thread-17020] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:07:05.414 [DEBUG] [Thread-17020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:07:05.414 [DEBUG] [Thread-17020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:07:05.414 [DEBUG] [Thread-17020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:07:05.414 [DEBUG] [Thread-17020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:07:05.414 [DEBUG] [Thread-17020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:07:05.414 [DEBUG] [Thread-17020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:07:05.414 [DEBUG] [Thread-17020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:07:05.414 [DEBUG] [Thread-17020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:07:05.414 [DEBUG] [Thread-17020] [transport.py] [_log()] client lang: <none>
2026-04-15T10:07:05.415 [DEBUG] [Thread-17020] [transport.py] [_log()] server lang: <none>
2026-04-15T10:07:05.415 [DEBUG] [Thread-17020] [transport.py] [_log()] kex follows: False
2026-04-15T10:07:05.415 [DEBUG] [Thread-17020] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:07:05.415 [DEBUG] [Thread-17020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:07:05.415 [DEBUG] [Thread-17020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:07:05.415 [DEBUG] [Thread-17020] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:07:05.415 [DEBUG] [Thread-17020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:07:05.415 [DEBUG] [Thread-17020] [transport.py] [_log()] Compression: none
2026-04-15T10:07:05.415 [DEBUG] [Thread-17020] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:07:05.477 [DEBUG] [Thread-17020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:07:05.478 [DEBUG] [Thread-17020] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:07:05.478 [DEBUG] [Thread-17020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:07:05.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:07:05.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:07:05.533 [DEBUG] [Thread-17020] [transport.py] [_log()] userauth is OK
2026-04-15T10:07:05.534 [DEBUG] [Thread-17020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:07:05.534 [DEBUG] [Thread-17020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:07:05.534 [DEBUG] [Thread-17020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:07:05.534 [DEBUG] [Thread-17020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:07:05.561 [INFO] [Thread-17020] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:07:05.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:07:05.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:07:06.429 [DEBUG] [Thread-17020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:07:06.430 [DEBUG] [Thread-17020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:07:06.479 [DEBUG] [Thread-17020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:07:06.479 [DEBUG] [Thread-17020] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:07:06.488 [DEBUG] [Thread-17020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:07:06.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:07:06.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')
2026-04-15T10:07:06.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
2026-04-15T10:07:06.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:07:06.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:07:06.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:07:06.525 [DEBUG] [Thread-17020] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:07:17.105 [DEBUG] [Thread-17022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:07:26.510 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:07:26.511 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:07:32.149 [DEBUG] [Thread-17023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:07:36.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:07:36.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:07:36.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
2026-04-15T10:07:37.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 7, 14), 0.22243, 98.3308, 0.0, 12.6518, 9.7373, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:07:37.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:07:14
2026-04-15T10:07:38.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:07:38.656 [DEBUG] [Thread-17024] [transport.py] [_log()] starting thread (client mode): 0xf13e39d0
2026-04-15T10:07:38.656 [DEBUG] [Thread-17024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:07:38.674 [DEBUG] [Thread-17024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:07:38.674 [INFO] [Thread-17024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:07:38.676 [DEBUG] [Thread-17024] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:07:38.676 [DEBUG] [Thread-17024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:07:38.676 [DEBUG] [Thread-17024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:07:38.676 [DEBUG] [Thread-17024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:07:38.676 [DEBUG] [Thread-17024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:07:38.676 [DEBUG] [Thread-17024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:07:38.676 [DEBUG] [Thread-17024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:07:38.676 [DEBUG] [Thread-17024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:07:38.676 [DEBUG] [Thread-17024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:07:38.676 [DEBUG] [Thread-17024] [transport.py] [_log()] client lang: <none>
2026-04-15T10:07:38.676 [DEBUG] [Thread-17024] [transport.py] [_log()] server lang: <none>
2026-04-15T10:07:38.676 [DEBUG] [Thread-17024] [transport.py] [_log()] kex follows: False
2026-04-15T10:07:38.677 [DEBUG] [Thread-17024] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:07:38.677 [DEBUG] [Thread-17024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:07:38.677 [DEBUG] [Thread-17024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:07:38.677 [DEBUG] [Thread-17024] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:07:38.677 [DEBUG] [Thread-17024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:07:38.677 [DEBUG] [Thread-17024] [transport.py] [_log()] Compression: none
2026-04-15T10:07:38.677 [DEBUG] [Thread-17024] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:07:38.688 [DEBUG] [Thread-17024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:07:38.688 [DEBUG] [Thread-17024] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:07:38.688 [DEBUG] [Thread-17024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:07:38.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:07:38.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:07:38.689 [DEBUG] [Thread-17024] [transport.py] [_log()] userauth is OK
2026-04-15T10:07:38.690 [DEBUG] [Thread-17024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:07:38.690 [DEBUG] [Thread-17024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:07:38.690 [DEBUG] [Thread-17024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:07:38.690 [DEBUG] [Thread-17024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:07:38.707 [INFO] [Thread-17024] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:07:38.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:07:39.318 [DEBUG] [Thread-17024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:07:39.319 [DEBUG] [Thread-17024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:07:39.319 [DEBUG] [Thread-17024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:07:39.360 [DEBUG] [Thread-17024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:07:39.360 [DEBUG] [Thread-17024] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:07:39.363 [DEBUG] [Thread-17024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:07:39.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:07:39.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:07:39.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:07:39.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:07:39.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:07:39.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:07:39.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:07:39.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:07:39.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:07:39.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.338324 -999.00   +9.80  12.36     92   +8.70 1 3 1 3 1   888    0 2.10 40.58 ----- 12.4 12.4 313.6 16.2 13.6 -4.9 13.3 -4.4 12.7 -3.3 13.1 -3.7
2026-04-15T10:07:39.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:07:39.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:07:39.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.338324
2026-04-15T10:07:39.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:07:39.387 [DEBUG] [Thread-17024] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:07:39.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:07:39.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:07:39.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:07:39.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:07:39.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:07:14', tmtdew=0.22243, humidity=98.3308, cloud=0.0, wind=12.6518, temperature=9.7373, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:07:11.194', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:07:39.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:07:39.644 [DEBUG] [Thread-17027] [transport.py] [_log()] starting thread (client mode): 0xee9ec4c0
2026-04-15T10:07:39.644 [DEBUG] [Thread-17027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:07:39.659 [DEBUG] [Thread-17027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:07:39.660 [INFO] [Thread-17027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:07:39.667 [DEBUG] [Thread-17027] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:07:39.667 [DEBUG] [Thread-17027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:07:39.667 [DEBUG] [Thread-17027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:07:39.667 [DEBUG] [Thread-17027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:07:39.667 [DEBUG] [Thread-17027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:07:39.667 [DEBUG] [Thread-17027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:07:39.667 [DEBUG] [Thread-17027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:07:39.667 [DEBUG] [Thread-17027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:07:39.668 [DEBUG] [Thread-17027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:07:39.668 [DEBUG] [Thread-17027] [transport.py] [_log()] client lang: <none>
2026-04-15T10:07:39.668 [DEBUG] [Thread-17027] [transport.py] [_log()] server lang: <none>
2026-04-15T10:07:39.668 [DEBUG] [Thread-17027] [transport.py] [_log()] kex follows: False
2026-04-15T10:07:39.668 [DEBUG] [Thread-17027] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:07:39.668 [DEBUG] [Thread-17027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:07:39.668 [DEBUG] [Thread-17027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:07:39.668 [DEBUG] [Thread-17027] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:07:39.668 [DEBUG] [Thread-17027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:07:39.668 [DEBUG] [Thread-17027] [transport.py] [_log()] Compression: none
2026-04-15T10:07:39.668 [DEBUG] [Thread-17027] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:07:39.725 [DEBUG] [Thread-17027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:07:39.725 [DEBUG] [Thread-17027] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:07:39.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:07:39.726 [DEBUG] [Thread-17027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:07:39.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:07:39.784 [DEBUG] [Thread-17027] [transport.py] [_log()] userauth is OK
2026-04-15T10:07:39.784 [DEBUG] [Thread-17027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:07:39.784 [DEBUG] [Thread-17027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:07:39.785 [DEBUG] [Thread-17027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:07:39.785 [DEBUG] [Thread-17027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:07:39.810 [INFO] [Thread-17027] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:07:39.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:07:39.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:07:40.652 [DEBUG] [Thread-17027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:07:40.652 [DEBUG] [Thread-17027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:07:40.700 [DEBUG] [Thread-17027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:07:40.700 [DEBUG] [Thread-17027] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:07:40.709 [DEBUG] [Thread-17027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:07:40.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:07:40.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')
2026-04-15T10:07:40.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') -> 00000000
2026-04-15T10:07:40.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:07:40.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:07:40.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:07:40.743 [DEBUG] [Thread-17027] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:07:47.181 [DEBUG] [Thread-17029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:07:59.714 [DEBUG] [Thread-17030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:08:02.224 [DEBUG] [Thread-17031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:08:10.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:08:10.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:08:10.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
2026-04-15T10:08:12.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 7, 49), 0.37545, 97.4626, 0.0, 14.5037, 10.5077, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:08:12.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:07:49
2026-04-15T10:08:12.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:08:12.885 [DEBUG] [Thread-17032] [transport.py] [_log()] starting thread (client mode): 0xf13e1f00
2026-04-15T10:08:12.886 [DEBUG] [Thread-17032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:08:12.900 [DEBUG] [Thread-17032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:08:12.901 [INFO] [Thread-17032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:08:12.902 [DEBUG] [Thread-17032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:08:12.902 [DEBUG] [Thread-17032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:08:12.902 [DEBUG] [Thread-17032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:08:12.902 [DEBUG] [Thread-17032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:08:12.902 [DEBUG] [Thread-17032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:08:12.902 [DEBUG] [Thread-17032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:08:12.902 [DEBUG] [Thread-17032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:08:12.902 [DEBUG] [Thread-17032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:08:12.902 [DEBUG] [Thread-17032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:08:12.902 [DEBUG] [Thread-17032] [transport.py] [_log()] client lang: <none>
2026-04-15T10:08:12.903 [DEBUG] [Thread-17032] [transport.py] [_log()] server lang: <none>
2026-04-15T10:08:12.903 [DEBUG] [Thread-17032] [transport.py] [_log()] kex follows: False
2026-04-15T10:08:12.903 [DEBUG] [Thread-17032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:08:12.903 [DEBUG] [Thread-17032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:08:12.903 [DEBUG] [Thread-17032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:08:12.903 [DEBUG] [Thread-17032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:08:12.903 [DEBUG] [Thread-17032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:08:12.903 [DEBUG] [Thread-17032] [transport.py] [_log()] Compression: none
2026-04-15T10:08:12.903 [DEBUG] [Thread-17032] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:08:12.917 [DEBUG] [Thread-17032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:08:12.918 [DEBUG] [Thread-17032] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:08:12.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:08:12.918 [DEBUG] [Thread-17032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:08:12.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:08:12.920 [DEBUG] [Thread-17032] [transport.py] [_log()] userauth is OK
2026-04-15T10:08:12.920 [DEBUG] [Thread-17032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:08:12.920 [DEBUG] [Thread-17032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:08:12.920 [DEBUG] [Thread-17032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:08:12.920 [DEBUG] [Thread-17032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:08:12.944 [INFO] [Thread-17032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:08:12.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:08:13.552 [DEBUG] [Thread-17032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:08:13.552 [DEBUG] [Thread-17032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:08:13.553 [DEBUG] [Thread-17032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:08:13.593 [DEBUG] [Thread-17032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:08:13.593 [DEBUG] [Thread-17032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:08:13.595 [DEBUG] [Thread-17032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:08:13.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:08:13.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:08:13.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:08:13.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:08:13.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:08:13.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:08:13.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:08:13.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:08:13.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:08:13.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.338671 -999.00   +9.90  12.84     92   +8.80 1 3 1 3 1   888    0 2.17 42.80 ----- 12.8 12.8 304.3 15.1 13.7 -4.5 13.4 -4.2 12.8 -3.2 13.2 -3.3
2026-04-15T10:08:13.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:08:13.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:08:13.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.338671
2026-04-15T10:08:13.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:08:13.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:08:13.617 [DEBUG] [Thread-17032] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:08:13.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:08:13.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:08:13.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:08:13.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:07:49', tmtdew=0.37545, humidity=97.4626, cloud=0.0, wind=14.5037, temperature=10.5077, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:07:41.174', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:08:13.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:08:13.870 [DEBUG] [Thread-17035] [transport.py] [_log()] starting thread (client mode): 0xf13e0f40
2026-04-15T10:08:13.870 [DEBUG] [Thread-17035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:08:13.887 [DEBUG] [Thread-17035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:08:13.887 [INFO] [Thread-17035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:08:13.895 [DEBUG] [Thread-17035] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:08:13.895 [DEBUG] [Thread-17035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:08:13.895 [DEBUG] [Thread-17035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:08:13.895 [DEBUG] [Thread-17035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:08:13.895 [DEBUG] [Thread-17035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:08:13.895 [DEBUG] [Thread-17035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:08:13.895 [DEBUG] [Thread-17035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:08:13.895 [DEBUG] [Thread-17035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:08:13.895 [DEBUG] [Thread-17035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:08:13.896 [DEBUG] [Thread-17035] [transport.py] [_log()] client lang: <none>
2026-04-15T10:08:13.896 [DEBUG] [Thread-17035] [transport.py] [_log()] server lang: <none>
2026-04-15T10:08:13.896 [DEBUG] [Thread-17035] [transport.py] [_log()] kex follows: False
2026-04-15T10:08:13.896 [DEBUG] [Thread-17035] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:08:13.896 [DEBUG] [Thread-17035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:08:13.896 [DEBUG] [Thread-17035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:08:13.896 [DEBUG] [Thread-17035] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:08:13.896 [DEBUG] [Thread-17035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:08:13.896 [DEBUG] [Thread-17035] [transport.py] [_log()] Compression: none
2026-04-15T10:08:13.896 [DEBUG] [Thread-17035] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:08:13.953 [DEBUG] [Thread-17035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:08:13.954 [DEBUG] [Thread-17035] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:08:13.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:08:13.954 [DEBUG] [Thread-17035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:08:13.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:08:14.015 [DEBUG] [Thread-17035] [transport.py] [_log()] userauth is OK
2026-04-15T10:08:14.015 [DEBUG] [Thread-17035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:08:14.016 [DEBUG] [Thread-17035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:08:14.016 [DEBUG] [Thread-17035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:08:14.016 [DEBUG] [Thread-17035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:08:14.040 [INFO] [Thread-17035] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:08:14.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:08:14.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:08:14.841 [DEBUG] [Thread-17035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:08:14.841 [DEBUG] [Thread-17035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:08:14.889 [DEBUG] [Thread-17035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:08:14.889 [DEBUG] [Thread-17035] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:08:14.898 [DEBUG] [Thread-17035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:08:14.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:08:14.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')
2026-04-15T10:08:14.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
2026-04-15T10:08:14.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:08:14.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:08:14.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:08:14.932 [DEBUG] [Thread-17035] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:08:17.256 [DEBUG] [Thread-17037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:08:26.650 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:08:26.652 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:08:32.303 [DEBUG] [Thread-17038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:08:44.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:08:44.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:08:44.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
2026-04-15T10:08:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 8, 25), 0.230095, 98.281, 0.0, 10.0933, 9.80387, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:08:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:08:25
2026-04-15T10:08:46.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:08:47.050 [DEBUG] [Thread-17039] [transport.py] [_log()] starting thread (client mode): 0xee925750
2026-04-15T10:08:47.050 [DEBUG] [Thread-17039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:08:47.061 [DEBUG] [Thread-17039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:08:47.061 [INFO] [Thread-17039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:08:47.064 [DEBUG] [Thread-17039] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:08:47.064 [DEBUG] [Thread-17039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:08:47.064 [DEBUG] [Thread-17039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:08:47.064 [DEBUG] [Thread-17039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:08:47.064 [DEBUG] [Thread-17039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:08:47.064 [DEBUG] [Thread-17039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:08:47.064 [DEBUG] [Thread-17039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:08:47.064 [DEBUG] [Thread-17039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:08:47.065 [DEBUG] [Thread-17039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:08:47.065 [DEBUG] [Thread-17039] [transport.py] [_log()] client lang: <none>
2026-04-15T10:08:47.065 [DEBUG] [Thread-17039] [transport.py] [_log()] server lang: <none>
2026-04-15T10:08:47.065 [DEBUG] [Thread-17039] [transport.py] [_log()] kex follows: False
2026-04-15T10:08:47.065 [DEBUG] [Thread-17039] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:08:47.065 [DEBUG] [Thread-17039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:08:47.065 [DEBUG] [Thread-17039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:08:47.065 [DEBUG] [Thread-17039] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:08:47.065 [DEBUG] [Thread-17039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:08:47.065 [DEBUG] [Thread-17039] [transport.py] [_log()] Compression: none
2026-04-15T10:08:47.065 [DEBUG] [Thread-17039] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:08:47.082 [DEBUG] [Thread-17039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:08:47.083 [DEBUG] [Thread-17039] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:08:47.083 [DEBUG] [Thread-17039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:08:47.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:08:47.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:08:47.084 [DEBUG] [Thread-17039] [transport.py] [_log()] userauth is OK
2026-04-15T10:08:47.084 [DEBUG] [Thread-17039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:08:47.085 [DEBUG] [Thread-17039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:08:47.085 [DEBUG] [Thread-17039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:08:47.085 [DEBUG] [Thread-17039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:08:47.101 [INFO] [Thread-17039] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:08:47.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:08:47.335 [DEBUG] [Thread-17041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:08:47.677 [DEBUG] [Thread-17039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:08:47.677 [DEBUG] [Thread-17039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:08:47.678 [DEBUG] [Thread-17039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:08:47.718 [DEBUG] [Thread-17039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:08:47.718 [DEBUG] [Thread-17039] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:08:47.721 [DEBUG] [Thread-17039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:08:47.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:08:47.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:08:47.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:08:47.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:08:47.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:08:47.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:08:47.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:08:47.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:08:47.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:08:47.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.339366 -999.00   +9.80  14.88     91   +8.50 1 3 1 3 1   888    0 2.07 38.62 ----- 14.9 14.9 304.0 17.4 14.2 -1.6 13.8 -3.5 13.1 -2.1 13.6 -1.7
2026-04-15T10:08:47.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:08:47.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:08:47.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.339366
2026-04-15T10:08:47.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:08:47.743 [DEBUG] [Thread-17039] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:08:47.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:08:47.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:08:47.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:08:47.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:08:47.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:08:25', tmtdew=0.230095, humidity=98.281, cloud=0.0, wind=10.0933, temperature=9.80387, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:08:41.222', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:08:47.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:08:47.995 [DEBUG] [Thread-17043] [transport.py] [_log()] starting thread (client mode): 0xf13e32e0
2026-04-15T10:08:47.995 [DEBUG] [Thread-17043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:08:48.009 [DEBUG] [Thread-17043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:08:48.009 [INFO] [Thread-17043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:08:48.016 [DEBUG] [Thread-17043] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:08:48.016 [DEBUG] [Thread-17043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:08:48.017 [DEBUG] [Thread-17043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:08:48.017 [DEBUG] [Thread-17043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:08:48.017 [DEBUG] [Thread-17043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:08:48.017 [DEBUG] [Thread-17043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:08:48.017 [DEBUG] [Thread-17043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:08:48.017 [DEBUG] [Thread-17043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:08:48.017 [DEBUG] [Thread-17043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:08:48.017 [DEBUG] [Thread-17043] [transport.py] [_log()] client lang: <none>
2026-04-15T10:08:48.017 [DEBUG] [Thread-17043] [transport.py] [_log()] server lang: <none>
2026-04-15T10:08:48.017 [DEBUG] [Thread-17043] [transport.py] [_log()] kex follows: False
2026-04-15T10:08:48.017 [DEBUG] [Thread-17043] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:08:48.017 [DEBUG] [Thread-17043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:08:48.018 [DEBUG] [Thread-17043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:08:48.018 [DEBUG] [Thread-17043] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:08:48.018 [DEBUG] [Thread-17043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:08:48.018 [DEBUG] [Thread-17043] [transport.py] [_log()] Compression: none
2026-04-15T10:08:48.018 [DEBUG] [Thread-17043] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:08:48.078 [DEBUG] [Thread-17043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:08:48.078 [DEBUG] [Thread-17043] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:08:48.079 [DEBUG] [Thread-17043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:08:48.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:08:48.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:08:48.136 [DEBUG] [Thread-17043] [transport.py] [_log()] userauth is OK
2026-04-15T10:08:48.136 [DEBUG] [Thread-17043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:08:48.136 [DEBUG] [Thread-17043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:08:48.136 [DEBUG] [Thread-17043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:08:48.136 [DEBUG] [Thread-17043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:08:48.161 [INFO] [Thread-17043] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:08:48.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:08:48.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:08:48.990 [DEBUG] [Thread-17043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:08:48.990 [DEBUG] [Thread-17043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:08:49.042 [DEBUG] [Thread-17043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:08:49.043 [DEBUG] [Thread-17043] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:08:49.052 [DEBUG] [Thread-17043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:08:49.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:08:49.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')
2026-04-15T10:08:49.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') -> 00000000
2026-04-15T10:08:49.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:08:49.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:08:49.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:08:49.086 [DEBUG] [Thread-17043] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:08:59.792 [DEBUG] [Thread-17045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:09:02.368 [DEBUG] [Thread-17046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:09:17.413 [DEBUG] [Thread-17047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:09:19.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:09:19.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:09:19.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
2026-04-15T10:09:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 9, 1), 0.25534, 98.1151, 0.0, 11.7691, 9.60433, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:09:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:09:01
2026-04-15T10:09:20.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:09:21.196 [DEBUG] [Thread-17048] [transport.py] [_log()] starting thread (client mode): 0xee91c940
2026-04-15T10:09:21.197 [DEBUG] [Thread-17048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:09:21.211 [DEBUG] [Thread-17048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:09:21.212 [INFO] [Thread-17048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:09:21.215 [DEBUG] [Thread-17048] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:09:21.215 [DEBUG] [Thread-17048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:09:21.215 [DEBUG] [Thread-17048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:09:21.215 [DEBUG] [Thread-17048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:09:21.215 [DEBUG] [Thread-17048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:09:21.215 [DEBUG] [Thread-17048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:09:21.215 [DEBUG] [Thread-17048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:09:21.215 [DEBUG] [Thread-17048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:09:21.216 [DEBUG] [Thread-17048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:09:21.216 [DEBUG] [Thread-17048] [transport.py] [_log()] client lang: <none>
2026-04-15T10:09:21.216 [DEBUG] [Thread-17048] [transport.py] [_log()] server lang: <none>
2026-04-15T10:09:21.216 [DEBUG] [Thread-17048] [transport.py] [_log()] kex follows: False
2026-04-15T10:09:21.216 [DEBUG] [Thread-17048] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:09:21.216 [DEBUG] [Thread-17048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:09:21.216 [DEBUG] [Thread-17048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:09:21.216 [DEBUG] [Thread-17048] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:09:21.216 [DEBUG] [Thread-17048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:09:21.216 [DEBUG] [Thread-17048] [transport.py] [_log()] Compression: none
2026-04-15T10:09:21.216 [DEBUG] [Thread-17048] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:09:21.226 [DEBUG] [Thread-17048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:09:21.226 [DEBUG] [Thread-17048] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:09:21.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:09:21.227 [DEBUG] [Thread-17048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:09:21.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:09:21.227 [DEBUG] [Thread-17048] [transport.py] [_log()] userauth is OK
2026-04-15T10:09:21.228 [DEBUG] [Thread-17048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:09:21.228 [DEBUG] [Thread-17048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:09:21.228 [DEBUG] [Thread-17048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:09:21.228 [DEBUG] [Thread-17048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:09:21.252 [INFO] [Thread-17048] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:09:21.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:09:21.900 [DEBUG] [Thread-17048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:09:21.901 [DEBUG] [Thread-17048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:09:21.901 [DEBUG] [Thread-17048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:09:21.941 [DEBUG] [Thread-17048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:09:21.941 [DEBUG] [Thread-17048] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:09:21.945 [DEBUG] [Thread-17048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:09:21.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:09:21.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:09:21.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:09:21.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:09:21.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:09:21.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:09:21.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:09:21.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:09:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:09:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.339713 -999.00   +9.80  13.17     92   +8.60 1 3 1 3 1   888    0 1.99 36.04 ----- 13.2 13.2 296.6 17.3 14.2 -4.4 13.9 -3.8 13.1 -3.7 13.6 -3.0
2026-04-15T10:09:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:09:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:09:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.339713
2026-04-15T10:09:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:09:21.977 [DEBUG] [Thread-17048] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:09:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:09:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:09:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:09:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:09:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:09:01', tmtdew=0.25534, humidity=98.1151, cloud=0.0, wind=11.7691, temperature=9.60433, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:09:11.203', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:09:22.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:09:22.228 [DEBUG] [Thread-17051] [transport.py] [_log()] starting thread (client mode): 0xee91c580
2026-04-15T10:09:22.228 [DEBUG] [Thread-17051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:09:22.244 [DEBUG] [Thread-17051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:09:22.244 [INFO] [Thread-17051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:09:22.252 [DEBUG] [Thread-17051] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:09:22.252 [DEBUG] [Thread-17051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:09:22.252 [DEBUG] [Thread-17051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:09:22.252 [DEBUG] [Thread-17051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:09:22.252 [DEBUG] [Thread-17051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:09:22.252 [DEBUG] [Thread-17051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:09:22.252 [DEBUG] [Thread-17051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:09:22.252 [DEBUG] [Thread-17051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:09:22.252 [DEBUG] [Thread-17051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:09:22.252 [DEBUG] [Thread-17051] [transport.py] [_log()] client lang: <none>
2026-04-15T10:09:22.253 [DEBUG] [Thread-17051] [transport.py] [_log()] server lang: <none>
2026-04-15T10:09:22.253 [DEBUG] [Thread-17051] [transport.py] [_log()] kex follows: False
2026-04-15T10:09:22.253 [DEBUG] [Thread-17051] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:09:22.253 [DEBUG] [Thread-17051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:09:22.253 [DEBUG] [Thread-17051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:09:22.253 [DEBUG] [Thread-17051] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:09:22.253 [DEBUG] [Thread-17051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:09:22.253 [DEBUG] [Thread-17051] [transport.py] [_log()] Compression: none
2026-04-15T10:09:22.253 [DEBUG] [Thread-17051] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:09:22.310 [DEBUG] [Thread-17051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:09:22.310 [DEBUG] [Thread-17051] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:09:22.311 [DEBUG] [Thread-17051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:09:22.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:09:22.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:09:22.367 [DEBUG] [Thread-17051] [transport.py] [_log()] userauth is OK
2026-04-15T10:09:22.367 [DEBUG] [Thread-17051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:09:22.367 [DEBUG] [Thread-17051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:09:22.367 [DEBUG] [Thread-17051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:09:22.368 [DEBUG] [Thread-17051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:09:22.391 [INFO] [Thread-17051] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:09:22.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:09:22.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:09:23.188 [DEBUG] [Thread-17051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:09:23.189 [DEBUG] [Thread-17051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:09:23.236 [DEBUG] [Thread-17051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:09:23.236 [DEBUG] [Thread-17051] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:09:23.245 [DEBUG] [Thread-17051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:09:23.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:09:23.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')
2026-04-15T10:09:23.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
2026-04-15T10:09:23.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:09:23.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:09:23.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:09:23.280 [DEBUG] [Thread-17051] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:09:26.791 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:09:26.792 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:09:32.444 [DEBUG] [Thread-17053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:09:47.489 [DEBUG] [Thread-17054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:09:53.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:09:53.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:09:53.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
2026-04-15T10:09:54.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 9, 36), 0.43598, 97.0644, 0.0, 17.185, 10.2423, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:09:54.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:09:36
2026-04-15T10:09:55.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:09:55.459 [DEBUG] [Thread-17055] [transport.py] [_log()] starting thread (client mode): 0xee98a950
2026-04-15T10:09:55.459 [DEBUG] [Thread-17055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:09:55.481 [DEBUG] [Thread-17055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:09:55.481 [INFO] [Thread-17055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:09:55.482 [DEBUG] [Thread-17055] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:09:55.482 [DEBUG] [Thread-17055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] client lang: <none>
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] server lang: <none>
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] kex follows: False
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:09:55.483 [DEBUG] [Thread-17055] [transport.py] [_log()] Compression: none
2026-04-15T10:09:55.484 [DEBUG] [Thread-17055] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:09:55.491 [DEBUG] [Thread-17055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:09:55.492 [DEBUG] [Thread-17055] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:09:55.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:09:55.492 [DEBUG] [Thread-17055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:09:55.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:09:55.494 [DEBUG] [Thread-17055] [transport.py] [_log()] userauth is OK
2026-04-15T10:09:55.494 [DEBUG] [Thread-17055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:09:55.494 [DEBUG] [Thread-17055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:09:55.494 [DEBUG] [Thread-17055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:09:55.494 [DEBUG] [Thread-17055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:09:55.509 [INFO] [Thread-17055] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:09:55.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:09:56.100 [DEBUG] [Thread-17055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:09:56.100 [DEBUG] [Thread-17055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:09:56.101 [DEBUG] [Thread-17055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:09:56.141 [DEBUG] [Thread-17055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:09:56.141 [DEBUG] [Thread-17055] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:09:56.144 [DEBUG] [Thread-17055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:09:56.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:09:56.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:09:56.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:09:56.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:09:56.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:09:56.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:09:56.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:09:56.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:09:56.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:09:56.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.340060 -999.00  +10.00  16.38     92   +8.80 1 3 1 3 1   888    0 1.95 34.55 ----- 16.4 16.4 311.0 17.8 14.3 -4.1 -999.0 -999.0 13.2 -2.8 13.6 -3.0
2026-04-15T10:09:56.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:09:56.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:09:56.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.340060
2026-04-15T10:09:56.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:09:56.166 [DEBUG] [Thread-17055] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:09:56.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:09:56.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:09:56.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:09:56.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:09:56.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:09:36', tmtdew=0.43598, humidity=97.0644, cloud=0.0, wind=17.185, temperature=10.2423, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:09:41.184', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:09:56.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:09:56.403 [DEBUG] [Thread-17058] [transport.py] [_log()] starting thread (client mode): 0xee91f550
2026-04-15T10:09:56.404 [DEBUG] [Thread-17058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:09:56.418 [DEBUG] [Thread-17058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:09:56.418 [INFO] [Thread-17058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:09:56.426 [DEBUG] [Thread-17058] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:09:56.426 [DEBUG] [Thread-17058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:09:56.426 [DEBUG] [Thread-17058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] client lang: <none>
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] server lang: <none>
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] kex follows: False
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] Compression: none
2026-04-15T10:09:56.427 [DEBUG] [Thread-17058] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:09:56.483 [DEBUG] [Thread-17058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:09:56.484 [DEBUG] [Thread-17058] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:09:56.484 [DEBUG] [Thread-17058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:09:56.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:09:56.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:09:56.547 [DEBUG] [Thread-17058] [transport.py] [_log()] userauth is OK
2026-04-15T10:09:56.547 [DEBUG] [Thread-17058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:09:56.548 [DEBUG] [Thread-17058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:09:56.548 [DEBUG] [Thread-17058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:09:56.548 [DEBUG] [Thread-17058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:09:56.571 [INFO] [Thread-17058] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:09:56.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:09:56.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:09:57.392 [DEBUG] [Thread-17058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:09:57.393 [DEBUG] [Thread-17058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:09:57.440 [DEBUG] [Thread-17058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:09:57.440 [DEBUG] [Thread-17058] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:09:57.449 [DEBUG] [Thread-17058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:09:57.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:09:57.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')
2026-04-15T10:09:57.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
2026-04-15T10:09:57.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:09:57.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:09:57.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:09:57.491 [DEBUG] [Thread-17058] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:09:59.918 [DEBUG] [Thread-17060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:10:02.520 [DEBUG] [Thread-17061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:10:17.558 [DEBUG] [Thread-17062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:10:26.931 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:10:26.932 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:10:27.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:10:27.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:10:27.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
2026-04-15T10:10:28.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 10, 12), 0.26577, 98.0488, 0.0, 11.9984, 9.75383, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:10:28.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:10:12
2026-04-15T10:10:29.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:10:29.572 [DEBUG] [Thread-17063] [transport.py] [_log()] starting thread (client mode): 0xf13679a0
2026-04-15T10:10:29.573 [DEBUG] [Thread-17063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:10:29.594 [DEBUG] [Thread-17063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:10:29.594 [INFO] [Thread-17063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:10:29.597 [DEBUG] [Thread-17063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:10:29.597 [DEBUG] [Thread-17063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:10:29.598 [DEBUG] [Thread-17063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:10:29.598 [DEBUG] [Thread-17063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:10:29.598 [DEBUG] [Thread-17063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:10:29.598 [DEBUG] [Thread-17063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:10:29.598 [DEBUG] [Thread-17063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:10:29.598 [DEBUG] [Thread-17063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:10:29.598 [DEBUG] [Thread-17063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:10:29.598 [DEBUG] [Thread-17063] [transport.py] [_log()] client lang: <none>
2026-04-15T10:10:29.598 [DEBUG] [Thread-17063] [transport.py] [_log()] server lang: <none>
2026-04-15T10:10:29.598 [DEBUG] [Thread-17063] [transport.py] [_log()] kex follows: False
2026-04-15T10:10:29.598 [DEBUG] [Thread-17063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:10:29.598 [DEBUG] [Thread-17063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:10:29.599 [DEBUG] [Thread-17063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:10:29.599 [DEBUG] [Thread-17063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:10:29.599 [DEBUG] [Thread-17063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:10:29.599 [DEBUG] [Thread-17063] [transport.py] [_log()] Compression: none
2026-04-15T10:10:29.599 [DEBUG] [Thread-17063] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:10:29.616 [DEBUG] [Thread-17063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:10:29.616 [DEBUG] [Thread-17063] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:10:29.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:10:29.617 [DEBUG] [Thread-17063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:10:29.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:10:29.618 [DEBUG] [Thread-17063] [transport.py] [_log()] userauth is OK
2026-04-15T10:10:29.618 [DEBUG] [Thread-17063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:10:29.618 [DEBUG] [Thread-17063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:10:29.618 [DEBUG] [Thread-17063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:10:29.618 [DEBUG] [Thread-17063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:10:29.635 [INFO] [Thread-17063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:10:29.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:10:30.785 [DEBUG] [Thread-17063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:10:30.785 [DEBUG] [Thread-17063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:10:30.786 [DEBUG] [Thread-17063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:10:30.826 [DEBUG] [Thread-17063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:10:30.826 [DEBUG] [Thread-17063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:10:30.829 [DEBUG] [Thread-17063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:10:30.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:10:30.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:10:30.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:10:30.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:10:30.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:10:30.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:10:30.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:10:30.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:10:30.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:10:30.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.340407 -999.00  +10.00  13.74     91   +8.80 1 3 1 3 1   888    0 1.97 34.98 ----- 13.7 13.7 315.3 17.9 14.4 -4.5 13.9 -3.5 13.3 -3.3 13.7 -2.9
2026-04-15T10:10:30.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:10:30.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:10:30.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.340407
2026-04-15T10:10:30.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:10:30.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:10:30.855 [DEBUG] [Thread-17063] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:10:30.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:10:30.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:10:30.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:10:30.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:10:12', tmtdew=0.26577, humidity=98.0488, cloud=0.0, wind=11.9984, temperature=9.75383, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:10:11.165', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:10:31.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:10:31.111 [DEBUG] [Thread-17066] [transport.py] [_log()] starting thread (client mode): 0xf13675e0
2026-04-15T10:10:31.111 [DEBUG] [Thread-17066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:10:31.124 [DEBUG] [Thread-17066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:10:31.125 [INFO] [Thread-17066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:10:31.137 [DEBUG] [Thread-17066] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:10:31.137 [DEBUG] [Thread-17066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:10:31.137 [DEBUG] [Thread-17066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:10:31.137 [DEBUG] [Thread-17066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:10:31.137 [DEBUG] [Thread-17066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:10:31.137 [DEBUG] [Thread-17066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:10:31.137 [DEBUG] [Thread-17066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:10:31.137 [DEBUG] [Thread-17066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:10:31.137 [DEBUG] [Thread-17066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:10:31.137 [DEBUG] [Thread-17066] [transport.py] [_log()] client lang: <none>
2026-04-15T10:10:31.138 [DEBUG] [Thread-17066] [transport.py] [_log()] server lang: <none>
2026-04-15T10:10:31.138 [DEBUG] [Thread-17066] [transport.py] [_log()] kex follows: False
2026-04-15T10:10:31.138 [DEBUG] [Thread-17066] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:10:31.138 [DEBUG] [Thread-17066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:10:31.138 [DEBUG] [Thread-17066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:10:31.138 [DEBUG] [Thread-17066] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:10:31.138 [DEBUG] [Thread-17066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:10:31.138 [DEBUG] [Thread-17066] [transport.py] [_log()] Compression: none
2026-04-15T10:10:31.138 [DEBUG] [Thread-17066] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:10:31.192 [DEBUG] [Thread-17066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:10:31.192 [DEBUG] [Thread-17066] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:10:31.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:10:31.193 [DEBUG] [Thread-17066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:10:31.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:10:31.247 [DEBUG] [Thread-17066] [transport.py] [_log()] userauth is OK
2026-04-15T10:10:31.247 [DEBUG] [Thread-17066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:10:31.248 [DEBUG] [Thread-17066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:10:31.248 [DEBUG] [Thread-17066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:10:31.248 [DEBUG] [Thread-17066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:10:31.265 [INFO] [Thread-17066] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:10:31.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:10:31.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:10:32.085 [DEBUG] [Thread-17066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:10:32.085 [DEBUG] [Thread-17066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:10:32.133 [DEBUG] [Thread-17066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:10:32.133 [DEBUG] [Thread-17066] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:10:32.142 [DEBUG] [Thread-17066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:10:32.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:10:32.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')
2026-04-15T10:10:32.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
2026-04-15T10:10:32.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:10:32.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:10:32.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:10:32.178 [DEBUG] [Thread-17066] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:10:32.590 [DEBUG] [Thread-17068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:10:47.635 [DEBUG] [Thread-17069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:11:00.030 [DEBUG] [Thread-17070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:11:02.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:11:02.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:11:02.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
2026-04-15T10:11:02.666 [DEBUG] [Thread-17071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:11:03.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 10, 47), 0.44221, 97.0312, 0.0, 14.3626, 10.6735, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:11:03.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:10:47
2026-04-15T10:11:03.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:11:04.294 [DEBUG] [Thread-17072] [transport.py] [_log()] starting thread (client mode): 0xee90f790
2026-04-15T10:11:04.294 [DEBUG] [Thread-17072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:11:04.314 [DEBUG] [Thread-17072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:11:04.314 [INFO] [Thread-17072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:11:04.317 [DEBUG] [Thread-17072] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:11:04.317 [DEBUG] [Thread-17072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:11:04.317 [DEBUG] [Thread-17072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:11:04.318 [DEBUG] [Thread-17072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:11:04.318 [DEBUG] [Thread-17072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:11:04.318 [DEBUG] [Thread-17072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:11:04.318 [DEBUG] [Thread-17072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:11:04.318 [DEBUG] [Thread-17072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:11:04.318 [DEBUG] [Thread-17072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:11:04.318 [DEBUG] [Thread-17072] [transport.py] [_log()] client lang: <none>
2026-04-15T10:11:04.318 [DEBUG] [Thread-17072] [transport.py] [_log()] server lang: <none>
2026-04-15T10:11:04.318 [DEBUG] [Thread-17072] [transport.py] [_log()] kex follows: False
2026-04-15T10:11:04.318 [DEBUG] [Thread-17072] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:11:04.318 [DEBUG] [Thread-17072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:11:04.319 [DEBUG] [Thread-17072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:11:04.319 [DEBUG] [Thread-17072] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:11:04.319 [DEBUG] [Thread-17072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:11:04.319 [DEBUG] [Thread-17072] [transport.py] [_log()] Compression: none
2026-04-15T10:11:04.319 [DEBUG] [Thread-17072] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:11:04.335 [DEBUG] [Thread-17072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:11:04.336 [DEBUG] [Thread-17072] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:11:04.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:11:04.336 [DEBUG] [Thread-17072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:11:04.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:11:04.337 [DEBUG] [Thread-17072] [transport.py] [_log()] userauth is OK
2026-04-15T10:11:04.337 [DEBUG] [Thread-17072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:11:04.337 [DEBUG] [Thread-17072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:11:04.338 [DEBUG] [Thread-17072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:11:04.338 [DEBUG] [Thread-17072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:11:04.373 [INFO] [Thread-17072] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:11:04.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:11:05.151 [DEBUG] [Thread-17072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:11:05.152 [DEBUG] [Thread-17072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:11:05.152 [DEBUG] [Thread-17072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:11:05.192 [DEBUG] [Thread-17072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:11:05.192 [DEBUG] [Thread-17072] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:11:05.194 [DEBUG] [Thread-17072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:11:05.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:11:05.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:11:05.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:11:05.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:11:05.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:11:05.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:11:05.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:11:05.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:11:05.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:11:05.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.340407 -999.00  +10.00  13.74     91   +8.80 1 3 1 3 1   888    0 1.97 34.98 ----- 13.7 13.7 315.3 17.9 14.4 -4.5 13.9 -3.5 13.3 -3.3 13.7 -2.9
2026-04-15T10:11:05.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:11:05.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:11:05.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.340407
2026-04-15T10:11:05.213 [DEBUG] [Thread-17072] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:11:05.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:11:05.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:11:05.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:11:05.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:11:05.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:11:05.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:10:47', tmtdew=0.44221, humidity=97.0312, cloud=0.0, wind=14.3626, temperature=10.6735, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:10:11.165', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:11:05.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:11:05.472 [DEBUG] [Thread-17075] [transport.py] [_log()] starting thread (client mode): 0xee924100
2026-04-15T10:11:05.472 [DEBUG] [Thread-17075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:11:05.487 [DEBUG] [Thread-17075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:11:05.487 [INFO] [Thread-17075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:11:05.494 [DEBUG] [Thread-17075] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:11:05.494 [DEBUG] [Thread-17075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:11:05.494 [DEBUG] [Thread-17075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:11:05.494 [DEBUG] [Thread-17075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:11:05.494 [DEBUG] [Thread-17075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:11:05.495 [DEBUG] [Thread-17075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:11:05.495 [DEBUG] [Thread-17075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:11:05.495 [DEBUG] [Thread-17075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:11:05.495 [DEBUG] [Thread-17075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:11:05.495 [DEBUG] [Thread-17075] [transport.py] [_log()] client lang: <none>
2026-04-15T10:11:05.495 [DEBUG] [Thread-17075] [transport.py] [_log()] server lang: <none>
2026-04-15T10:11:05.495 [DEBUG] [Thread-17075] [transport.py] [_log()] kex follows: False
2026-04-15T10:11:05.495 [DEBUG] [Thread-17075] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:11:05.495 [DEBUG] [Thread-17075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:11:05.495 [DEBUG] [Thread-17075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:11:05.495 [DEBUG] [Thread-17075] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:11:05.495 [DEBUG] [Thread-17075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:11:05.495 [DEBUG] [Thread-17075] [transport.py] [_log()] Compression: none
2026-04-15T10:11:05.495 [DEBUG] [Thread-17075] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:11:05.566 [DEBUG] [Thread-17075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:11:05.566 [DEBUG] [Thread-17075] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:11:05.567 [DEBUG] [Thread-17075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:11:05.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:11:05.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:11:05.624 [DEBUG] [Thread-17075] [transport.py] [_log()] userauth is OK
2026-04-15T10:11:05.624 [DEBUG] [Thread-17075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:11:05.625 [DEBUG] [Thread-17075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:11:05.625 [DEBUG] [Thread-17075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:11:05.625 [DEBUG] [Thread-17075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:11:05.649 [INFO] [Thread-17075] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:11:05.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:11:05.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:11:06.483 [DEBUG] [Thread-17075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:11:06.484 [DEBUG] [Thread-17075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:11:06.532 [DEBUG] [Thread-17075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:11:06.532 [DEBUG] [Thread-17075] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:11:06.541 [DEBUG] [Thread-17075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:11:06.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:11:06.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')
2026-04-15T10:11:06.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
2026-04-15T10:11:06.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:11:06.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:11:06.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:11:06.575 [DEBUG] [Thread-17075] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:11:17.697 [DEBUG] [Thread-17077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:11:27.072 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:11:27.073 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:11:32.742 [DEBUG] [Thread-17078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:11:36.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:11:36.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:11:36.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
2026-04-15T10:11:37.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 11, 23), 0.28172, 97.9492, 0.0, 13.9396, 10.2194, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:11:37.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:11:23
2026-04-15T10:11:38.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:11:38.814 [DEBUG] [Thread-17079] [transport.py] [_log()] starting thread (client mode): 0xee9ee440
2026-04-15T10:11:38.814 [DEBUG] [Thread-17079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:11:38.828 [DEBUG] [Thread-17079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:11:38.828 [INFO] [Thread-17079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:11:38.832 [DEBUG] [Thread-17079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:11:38.832 [DEBUG] [Thread-17079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:11:38.832 [DEBUG] [Thread-17079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:11:38.832 [DEBUG] [Thread-17079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:11:38.832 [DEBUG] [Thread-17079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:11:38.832 [DEBUG] [Thread-17079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:11:38.832 [DEBUG] [Thread-17079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:11:38.832 [DEBUG] [Thread-17079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:11:38.832 [DEBUG] [Thread-17079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:11:38.833 [DEBUG] [Thread-17079] [transport.py] [_log()] client lang: <none>
2026-04-15T10:11:38.833 [DEBUG] [Thread-17079] [transport.py] [_log()] server lang: <none>
2026-04-15T10:11:38.833 [DEBUG] [Thread-17079] [transport.py] [_log()] kex follows: False
2026-04-15T10:11:38.833 [DEBUG] [Thread-17079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:11:38.833 [DEBUG] [Thread-17079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:11:38.833 [DEBUG] [Thread-17079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:11:38.833 [DEBUG] [Thread-17079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:11:38.833 [DEBUG] [Thread-17079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:11:38.833 [DEBUG] [Thread-17079] [transport.py] [_log()] Compression: none
2026-04-15T10:11:38.833 [DEBUG] [Thread-17079] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:11:38.850 [DEBUG] [Thread-17079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:11:38.850 [DEBUG] [Thread-17079] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:11:38.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:11:38.851 [DEBUG] [Thread-17079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:11:38.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:11:38.852 [DEBUG] [Thread-17079] [transport.py] [_log()] userauth is OK
2026-04-15T10:11:38.852 [DEBUG] [Thread-17079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:11:38.852 [DEBUG] [Thread-17079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:11:38.852 [DEBUG] [Thread-17079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:11:38.852 [DEBUG] [Thread-17079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:11:38.890 [INFO] [Thread-17079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:11:38.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:11:39.471 [DEBUG] [Thread-17079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:11:39.471 [DEBUG] [Thread-17079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:11:39.472 [DEBUG] [Thread-17079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:11:39.512 [DEBUG] [Thread-17079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:11:39.512 [DEBUG] [Thread-17079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:11:39.514 [DEBUG] [Thread-17079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:11:39.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:11:39.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:11:39.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:11:39.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:11:39.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:11:39.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:11:39.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:11:39.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:11:39.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:11:39.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.341102 -999.00  +10.20  17.96     92   +8.90 1 3 1 3 1   888    0 1.95 32.99 ----- 18.0 18.0 289.0 22.3 14.5 -4.6 14.1 -4.1 13.3 -3.6 13.8 -3.2
2026-04-15T10:11:39.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:11:39.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:11:39.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.341102
2026-04-15T10:11:39.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:11:39.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:11:39.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:11:39.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:11:39.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:11:39.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:11:23', tmtdew=0.28172, humidity=97.9492, cloud=0.0, wind=13.9396, temperature=10.2194, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:11:11.213', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:11:39.530 [DEBUG] [Thread-17079] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:11:39.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:11:39.770 [DEBUG] [Thread-17082] [transport.py] [_log()] starting thread (client mode): 0xee91ece0
2026-04-15T10:11:39.770 [DEBUG] [Thread-17082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:11:39.784 [DEBUG] [Thread-17082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:11:39.784 [INFO] [Thread-17082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:11:39.792 [DEBUG] [Thread-17082] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:11:39.792 [DEBUG] [Thread-17082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:11:39.792 [DEBUG] [Thread-17082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:11:39.792 [DEBUG] [Thread-17082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:11:39.792 [DEBUG] [Thread-17082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:11:39.792 [DEBUG] [Thread-17082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:11:39.792 [DEBUG] [Thread-17082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:11:39.792 [DEBUG] [Thread-17082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:11:39.792 [DEBUG] [Thread-17082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:11:39.792 [DEBUG] [Thread-17082] [transport.py] [_log()] client lang: <none>
2026-04-15T10:11:39.793 [DEBUG] [Thread-17082] [transport.py] [_log()] server lang: <none>
2026-04-15T10:11:39.793 [DEBUG] [Thread-17082] [transport.py] [_log()] kex follows: False
2026-04-15T10:11:39.793 [DEBUG] [Thread-17082] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:11:39.793 [DEBUG] [Thread-17082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:11:39.793 [DEBUG] [Thread-17082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:11:39.793 [DEBUG] [Thread-17082] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:11:39.793 [DEBUG] [Thread-17082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:11:39.793 [DEBUG] [Thread-17082] [transport.py] [_log()] Compression: none
2026-04-15T10:11:39.793 [DEBUG] [Thread-17082] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:11:39.851 [DEBUG] [Thread-17082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:11:39.852 [DEBUG] [Thread-17082] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:11:39.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:11:39.853 [DEBUG] [Thread-17082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:11:39.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:11:39.908 [DEBUG] [Thread-17082] [transport.py] [_log()] userauth is OK
2026-04-15T10:11:39.908 [DEBUG] [Thread-17082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:11:39.909 [DEBUG] [Thread-17082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:11:39.909 [DEBUG] [Thread-17082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:11:39.909 [DEBUG] [Thread-17082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:11:39.934 [INFO] [Thread-17082] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:11:39.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:11:39.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:11:40.762 [DEBUG] [Thread-17082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:11:40.763 [DEBUG] [Thread-17082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:11:40.810 [DEBUG] [Thread-17082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:11:40.810 [DEBUG] [Thread-17082] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:11:40.819 [DEBUG] [Thread-17082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:11:40.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:11:40.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')
2026-04-15T10:11:40.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
2026-04-15T10:11:40.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:11:40.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:11:40.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:11:40.857 [DEBUG] [Thread-17082] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:11:47.774 [DEBUG] [Thread-17084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:12:00.121 [DEBUG] [Thread-17085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:12:02.821 [DEBUG] [Thread-17086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:12:10.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:12:10.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:12:10.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
2026-04-15T10:12:12.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 11, 58), 0.25973, 97.7668, 0.0, 15.7918, 9.88651, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:12:12.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:11:58
2026-04-15T10:12:12.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:12:12.974 [DEBUG] [Thread-17087] [transport.py] [_log()] starting thread (client mode): 0xf13e1cc0
2026-04-15T10:12:12.974 [DEBUG] [Thread-17087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:12:12.995 [DEBUG] [Thread-17087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:12:12.995 [INFO] [Thread-17087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:12:12.998 [DEBUG] [Thread-17087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:12:12.999 [DEBUG] [Thread-17087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:12:12.999 [DEBUG] [Thread-17087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:12:12.999 [DEBUG] [Thread-17087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:12:12.999 [DEBUG] [Thread-17087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:12:12.999 [DEBUG] [Thread-17087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:12:12.999 [DEBUG] [Thread-17087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:12:12.999 [DEBUG] [Thread-17087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:12:12.999 [DEBUG] [Thread-17087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:12:12.999 [DEBUG] [Thread-17087] [transport.py] [_log()] client lang: <none>
2026-04-15T10:12:12.999 [DEBUG] [Thread-17087] [transport.py] [_log()] server lang: <none>
2026-04-15T10:12:12.999 [DEBUG] [Thread-17087] [transport.py] [_log()] kex follows: False
2026-04-15T10:12:12.999 [DEBUG] [Thread-17087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:12:13.000 [DEBUG] [Thread-17087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:12:13.000 [DEBUG] [Thread-17087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:12:13.000 [DEBUG] [Thread-17087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:12:13.000 [DEBUG] [Thread-17087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:12:13.000 [DEBUG] [Thread-17087] [transport.py] [_log()] Compression: none
2026-04-15T10:12:13.000 [DEBUG] [Thread-17087] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:12:13.017 [DEBUG] [Thread-17087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:12:13.017 [DEBUG] [Thread-17087] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:12:13.018 [DEBUG] [Thread-17087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:12:13.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:12:13.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:12:13.019 [DEBUG] [Thread-17087] [transport.py] [_log()] userauth is OK
2026-04-15T10:12:13.019 [DEBUG] [Thread-17087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:12:13.019 [DEBUG] [Thread-17087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:12:13.020 [DEBUG] [Thread-17087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:12:13.020 [DEBUG] [Thread-17087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:12:13.037 [INFO] [Thread-17087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:12:13.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:12:13.638 [DEBUG] [Thread-17087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:12:13.638 [DEBUG] [Thread-17087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:12:13.638 [DEBUG] [Thread-17087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:12:13.679 [DEBUG] [Thread-17087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:12:13.679 [DEBUG] [Thread-17087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:12:13.681 [DEBUG] [Thread-17087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:12:13.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:12:13.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:12:13.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:12:13.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:12:13.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:12:13.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:12:13.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:12:13.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:12:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:12:13.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.341449 -999.00  +10.00  14.74     91   +8.70 1 3 1 3 1   888    0 2.04 35.86 ----- 14.7 14.7 314.8 19.0 14.4 -4.7 14.1 -4.3 13.3 -3.8 13.8 -3.5
2026-04-15T10:12:13.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:12:13.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:12:13.699 [DEBUG] [Thread-17087] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:12:13.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.341449
2026-04-15T10:12:13.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:12:13.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:12:13.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:12:13.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:12:13.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:12:13.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:11:58', tmtdew=0.25973, humidity=97.7668, cloud=0.0, wind=15.7918, temperature=9.88651, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:11:41.194', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:12:13.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:12:13.957 [DEBUG] [Thread-17090] [transport.py] [_log()] starting thread (client mode): 0xf13e1750
2026-04-15T10:12:13.957 [DEBUG] [Thread-17090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:12:13.971 [DEBUG] [Thread-17090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:12:13.972 [INFO] [Thread-17090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:12:13.979 [DEBUG] [Thread-17090] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:12:13.979 [DEBUG] [Thread-17090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:12:13.979 [DEBUG] [Thread-17090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:12:13.979 [DEBUG] [Thread-17090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:12:13.979 [DEBUG] [Thread-17090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:12:13.979 [DEBUG] [Thread-17090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:12:13.979 [DEBUG] [Thread-17090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:12:13.980 [DEBUG] [Thread-17090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:12:13.980 [DEBUG] [Thread-17090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:12:13.980 [DEBUG] [Thread-17090] [transport.py] [_log()] client lang: <none>
2026-04-15T10:12:13.980 [DEBUG] [Thread-17090] [transport.py] [_log()] server lang: <none>
2026-04-15T10:12:13.980 [DEBUG] [Thread-17090] [transport.py] [_log()] kex follows: False
2026-04-15T10:12:13.980 [DEBUG] [Thread-17090] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:12:13.980 [DEBUG] [Thread-17090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:12:13.980 [DEBUG] [Thread-17090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:12:13.980 [DEBUG] [Thread-17090] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:12:13.980 [DEBUG] [Thread-17090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:12:13.980 [DEBUG] [Thread-17090] [transport.py] [_log()] Compression: none
2026-04-15T10:12:13.981 [DEBUG] [Thread-17090] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:12:14.036 [DEBUG] [Thread-17090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:12:14.037 [DEBUG] [Thread-17090] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:12:14.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:12:14.038 [DEBUG] [Thread-17090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:12:14.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:12:14.093 [DEBUG] [Thread-17090] [transport.py] [_log()] userauth is OK
2026-04-15T10:12:14.093 [DEBUG] [Thread-17090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:12:14.093 [DEBUG] [Thread-17090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:12:14.093 [DEBUG] [Thread-17090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:12:14.093 [DEBUG] [Thread-17090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:12:14.119 [INFO] [Thread-17090] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:12:14.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:12:14.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:12:14.950 [DEBUG] [Thread-17090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:12:14.950 [DEBUG] [Thread-17090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:12:14.998 [DEBUG] [Thread-17090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:12:14.998 [DEBUG] [Thread-17090] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:12:15.007 [DEBUG] [Thread-17090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:12:15.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:12:15.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')
2026-04-15T10:12:15.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') -> 00000000
2026-04-15T10:12:15.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:12:15.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:12:15.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:12:15.043 [DEBUG] [Thread-17090] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:12:17.852 [DEBUG] [Thread-17092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:12:27.214 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:12:27.215 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:12:32.898 [DEBUG] [Thread-17093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:12:45.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:12:45.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:12:45.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
2026-04-15T10:12:46.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 12, 34), 0.57602, 96.1686, 0.0, 17.573, 10.7398, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:12:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:12:34
2026-04-15T10:12:46.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:12:47.160 [DEBUG] [Thread-17094] [transport.py] [_log()] starting thread (client mode): 0xf13ca380
2026-04-15T10:12:47.161 [DEBUG] [Thread-17094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:12:47.178 [DEBUG] [Thread-17094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:12:47.178 [INFO] [Thread-17094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:12:47.179 [DEBUG] [Thread-17094] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:12:47.180 [DEBUG] [Thread-17094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:12:47.180 [DEBUG] [Thread-17094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:12:47.180 [DEBUG] [Thread-17094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:12:47.180 [DEBUG] [Thread-17094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:12:47.180 [DEBUG] [Thread-17094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:12:47.180 [DEBUG] [Thread-17094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:12:47.180 [DEBUG] [Thread-17094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:12:47.180 [DEBUG] [Thread-17094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:12:47.180 [DEBUG] [Thread-17094] [transport.py] [_log()] client lang: <none>
2026-04-15T10:12:47.180 [DEBUG] [Thread-17094] [transport.py] [_log()] server lang: <none>
2026-04-15T10:12:47.180 [DEBUG] [Thread-17094] [transport.py] [_log()] kex follows: False
2026-04-15T10:12:47.180 [DEBUG] [Thread-17094] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:12:47.181 [DEBUG] [Thread-17094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:12:47.181 [DEBUG] [Thread-17094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:12:47.181 [DEBUG] [Thread-17094] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:12:47.181 [DEBUG] [Thread-17094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:12:47.181 [DEBUG] [Thread-17094] [transport.py] [_log()] Compression: none
2026-04-15T10:12:47.181 [DEBUG] [Thread-17094] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:12:47.195 [DEBUG] [Thread-17094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:12:47.196 [DEBUG] [Thread-17094] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:12:47.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:12:47.196 [DEBUG] [Thread-17094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:12:47.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:12:47.198 [DEBUG] [Thread-17094] [transport.py] [_log()] userauth is OK
2026-04-15T10:12:47.198 [DEBUG] [Thread-17094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:12:47.198 [DEBUG] [Thread-17094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:12:47.198 [DEBUG] [Thread-17094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:12:47.198 [DEBUG] [Thread-17094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:12:47.216 [INFO] [Thread-17094] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:12:47.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:12:47.809 [DEBUG] [Thread-17094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:12:47.809 [DEBUG] [Thread-17094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:12:47.810 [DEBUG] [Thread-17094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:12:47.850 [DEBUG] [Thread-17094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:12:47.850 [DEBUG] [Thread-17094] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:12:47.852 [DEBUG] [Thread-17094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:12:47.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:12:47.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:12:47.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:12:47.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:12:47.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:12:47.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:12:47.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:12:47.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:12:47.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:12:47.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.342145 -999.00  +10.00  16.42     90   +8.50 1 3 1 3 1   888    0 2.15 38.67 ----- 16.4 16.4 323.0 24.9 14.5 -5.1 14.1 -4.5 13.4 -3.6 13.8 -4.0
2026-04-15T10:12:47.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:12:47.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:12:47.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.342145
2026-04-15T10:12:47.877 [DEBUG] [Thread-17094] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:12:47.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:12:47.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:12:47.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:12:47.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:12:47.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:12:47.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:12:34', tmtdew=0.57602, humidity=96.1686, cloud=0.0, wind=17.573, temperature=10.7398, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:12:41.328', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:12:47.929 [DEBUG] [Thread-17097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:12:48.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:12:48.127 [DEBUG] [Thread-17098] [transport.py] [_log()] starting thread (client mode): 0xee98ab00
2026-04-15T10:12:48.127 [DEBUG] [Thread-17098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:12:48.142 [DEBUG] [Thread-17098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:12:48.142 [INFO] [Thread-17098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:12:48.150 [DEBUG] [Thread-17098] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:12:48.150 [DEBUG] [Thread-17098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:12:48.150 [DEBUG] [Thread-17098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:12:48.150 [DEBUG] [Thread-17098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:12:48.150 [DEBUG] [Thread-17098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:12:48.150 [DEBUG] [Thread-17098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:12:48.150 [DEBUG] [Thread-17098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:12:48.150 [DEBUG] [Thread-17098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:12:48.150 [DEBUG] [Thread-17098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:12:48.150 [DEBUG] [Thread-17098] [transport.py] [_log()] client lang: <none>
2026-04-15T10:12:48.150 [DEBUG] [Thread-17098] [transport.py] [_log()] server lang: <none>
2026-04-15T10:12:48.150 [DEBUG] [Thread-17098] [transport.py] [_log()] kex follows: False
2026-04-15T10:12:48.150 [DEBUG] [Thread-17098] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:12:48.150 [DEBUG] [Thread-17098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:12:48.150 [DEBUG] [Thread-17098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:12:48.151 [DEBUG] [Thread-17098] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:12:48.151 [DEBUG] [Thread-17098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:12:48.151 [DEBUG] [Thread-17098] [transport.py] [_log()] Compression: none
2026-04-15T10:12:48.151 [DEBUG] [Thread-17098] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:12:48.208 [DEBUG] [Thread-17098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:12:48.209 [DEBUG] [Thread-17098] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:12:48.209 [DEBUG] [Thread-17098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:12:48.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:12:48.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:12:48.265 [DEBUG] [Thread-17098] [transport.py] [_log()] userauth is OK
2026-04-15T10:12:48.265 [DEBUG] [Thread-17098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:12:48.265 [DEBUG] [Thread-17098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:12:48.265 [DEBUG] [Thread-17098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:12:48.266 [DEBUG] [Thread-17098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:12:48.291 [INFO] [Thread-17098] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:12:48.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:12:48.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:12:49.119 [DEBUG] [Thread-17098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:12:49.119 [DEBUG] [Thread-17098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:12:49.167 [DEBUG] [Thread-17098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:12:49.167 [DEBUG] [Thread-17098] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:12:49.176 [DEBUG] [Thread-17098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:12:49.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:12:49.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')
2026-04-15T10:12:49.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') -> 00000000
2026-04-15T10:12:49.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:12:49.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:12:49.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:12:49.211 [DEBUG] [Thread-17098] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:13:00.239 [DEBUG] [Thread-17100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:13:02.967 [DEBUG] [Thread-17101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:13:17.996 [DEBUG] [Thread-17102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:13:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:13:19.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:13:19.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
2026-04-15T10:13:20.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 13, 9), 0.35079, 97.5014, 0.0, 11.8044, 9.93674, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:13:20.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:13:09
2026-04-15T10:13:20.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:13:21.393 [DEBUG] [Thread-17103] [transport.py] [_log()] starting thread (client mode): 0xee907610
2026-04-15T10:13:21.393 [DEBUG] [Thread-17103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:13:21.413 [DEBUG] [Thread-17103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:13:21.413 [INFO] [Thread-17103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:13:21.414 [DEBUG] [Thread-17103] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:13:21.414 [DEBUG] [Thread-17103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:13:21.414 [DEBUG] [Thread-17103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:13:21.414 [DEBUG] [Thread-17103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:13:21.415 [DEBUG] [Thread-17103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:13:21.415 [DEBUG] [Thread-17103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:13:21.415 [DEBUG] [Thread-17103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:13:21.415 [DEBUG] [Thread-17103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:13:21.415 [DEBUG] [Thread-17103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:13:21.415 [DEBUG] [Thread-17103] [transport.py] [_log()] client lang: <none>
2026-04-15T10:13:21.415 [DEBUG] [Thread-17103] [transport.py] [_log()] server lang: <none>
2026-04-15T10:13:21.415 [DEBUG] [Thread-17103] [transport.py] [_log()] kex follows: False
2026-04-15T10:13:21.415 [DEBUG] [Thread-17103] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:13:21.415 [DEBUG] [Thread-17103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:13:21.415 [DEBUG] [Thread-17103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:13:21.415 [DEBUG] [Thread-17103] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:13:21.416 [DEBUG] [Thread-17103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:13:21.416 [DEBUG] [Thread-17103] [transport.py] [_log()] Compression: none
2026-04-15T10:13:21.416 [DEBUG] [Thread-17103] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:13:21.424 [DEBUG] [Thread-17103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:13:21.424 [DEBUG] [Thread-17103] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:13:21.424 [DEBUG] [Thread-17103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:13:21.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:13:21.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:13:21.426 [DEBUG] [Thread-17103] [transport.py] [_log()] userauth is OK
2026-04-15T10:13:21.426 [DEBUG] [Thread-17103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:13:21.426 [DEBUG] [Thread-17103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:13:21.426 [DEBUG] [Thread-17103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:13:21.426 [DEBUG] [Thread-17103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:13:21.443 [INFO] [Thread-17103] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:13:21.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:13:22.051 [DEBUG] [Thread-17103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:13:22.051 [DEBUG] [Thread-17103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:13:22.052 [DEBUG] [Thread-17103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:13:22.092 [DEBUG] [Thread-17103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:13:22.092 [DEBUG] [Thread-17103] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:13:22.094 [DEBUG] [Thread-17103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:13:22.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:13:22.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:13:22.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:13:22.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:13:22.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:13:22.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:13:22.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:13:22.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:13:22.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:13:22.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.342491 -999.00  +10.00  14.09     90   +8.60 1 3 1 3 1   888    0 2.20 39.64 ----- 14.1 14.1 308.8 16.9 14.6 -5.4 14.1 -4.7 13.4 -3.8 13.8 -4.5
2026-04-15T10:13:22.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:13:22.116 [DEBUG] [Thread-17103] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:13:22.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:13:22.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.342491
2026-04-15T10:13:22.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:13:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:13:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:13:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:13:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:13:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:13:09', tmtdew=0.35079, humidity=97.5014, cloud=0.0, wind=11.8044, temperature=9.93674, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:13:11.222', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:13:22.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:13:22.373 [DEBUG] [Thread-17106] [transport.py] [_log()] starting thread (client mode): 0xee98a560
2026-04-15T10:13:22.373 [DEBUG] [Thread-17106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:13:22.392 [DEBUG] [Thread-17106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:13:22.392 [INFO] [Thread-17106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:13:22.400 [DEBUG] [Thread-17106] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:13:22.401 [DEBUG] [Thread-17106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:13:22.401 [DEBUG] [Thread-17106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:13:22.401 [DEBUG] [Thread-17106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:13:22.401 [DEBUG] [Thread-17106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:13:22.401 [DEBUG] [Thread-17106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:13:22.401 [DEBUG] [Thread-17106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:13:22.401 [DEBUG] [Thread-17106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:13:22.401 [DEBUG] [Thread-17106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:13:22.401 [DEBUG] [Thread-17106] [transport.py] [_log()] client lang: <none>
2026-04-15T10:13:22.401 [DEBUG] [Thread-17106] [transport.py] [_log()] server lang: <none>
2026-04-15T10:13:22.401 [DEBUG] [Thread-17106] [transport.py] [_log()] kex follows: False
2026-04-15T10:13:22.401 [DEBUG] [Thread-17106] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:13:22.402 [DEBUG] [Thread-17106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:13:22.402 [DEBUG] [Thread-17106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:13:22.402 [DEBUG] [Thread-17106] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:13:22.402 [DEBUG] [Thread-17106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:13:22.402 [DEBUG] [Thread-17106] [transport.py] [_log()] Compression: none
2026-04-15T10:13:22.402 [DEBUG] [Thread-17106] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:13:22.463 [DEBUG] [Thread-17106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:13:22.464 [DEBUG] [Thread-17106] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:13:22.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:13:22.465 [DEBUG] [Thread-17106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:13:22.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:13:22.522 [DEBUG] [Thread-17106] [transport.py] [_log()] userauth is OK
2026-04-15T10:13:22.523 [DEBUG] [Thread-17106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:13:22.523 [DEBUG] [Thread-17106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:13:22.523 [DEBUG] [Thread-17106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:13:22.523 [DEBUG] [Thread-17106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:13:22.555 [INFO] [Thread-17106] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:13:22.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:13:22.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:13:23.359 [DEBUG] [Thread-17106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:13:23.360 [DEBUG] [Thread-17106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:13:23.407 [DEBUG] [Thread-17106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:13:23.407 [DEBUG] [Thread-17106] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:13:23.416 [DEBUG] [Thread-17106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:13:23.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:13:23.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')
2026-04-15T10:13:23.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
2026-04-15T10:13:23.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:13:23.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:13:23.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:13:23.450 [DEBUG] [Thread-17106] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:13:27.355 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:13:27.356 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:13:33.024 [DEBUG] [Thread-17108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:13:48.071 [DEBUG] [Thread-17109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:13:53.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:13:53.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:13:53.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
2026-04-15T10:13:54.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 13, 45), 0.62755, 95.8369, 0.0, 17.573, 10.7066, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:13:54.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:13:45
2026-04-15T10:13:55.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:13:55.671 [DEBUG] [Thread-17110] [transport.py] [_log()] starting thread (client mode): 0xee91ece0
2026-04-15T10:13:55.671 [DEBUG] [Thread-17110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:13:55.691 [DEBUG] [Thread-17110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:13:55.691 [INFO] [Thread-17110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:13:55.693 [DEBUG] [Thread-17110] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:13:55.693 [DEBUG] [Thread-17110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:13:55.693 [DEBUG] [Thread-17110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:13:55.693 [DEBUG] [Thread-17110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:13:55.693 [DEBUG] [Thread-17110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:13:55.693 [DEBUG] [Thread-17110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:13:55.693 [DEBUG] [Thread-17110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:13:55.693 [DEBUG] [Thread-17110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:13:55.693 [DEBUG] [Thread-17110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:13:55.693 [DEBUG] [Thread-17110] [transport.py] [_log()] client lang: <none>
2026-04-15T10:13:55.693 [DEBUG] [Thread-17110] [transport.py] [_log()] server lang: <none>
2026-04-15T10:13:55.693 [DEBUG] [Thread-17110] [transport.py] [_log()] kex follows: False
2026-04-15T10:13:55.693 [DEBUG] [Thread-17110] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:13:55.693 [DEBUG] [Thread-17110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:13:55.694 [DEBUG] [Thread-17110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:13:55.694 [DEBUG] [Thread-17110] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:13:55.694 [DEBUG] [Thread-17110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:13:55.694 [DEBUG] [Thread-17110] [transport.py] [_log()] Compression: none
2026-04-15T10:13:55.694 [DEBUG] [Thread-17110] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:13:55.701 [DEBUG] [Thread-17110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:13:55.701 [DEBUG] [Thread-17110] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:13:55.702 [DEBUG] [Thread-17110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:13:55.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:13:55.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:13:55.703 [DEBUG] [Thread-17110] [transport.py] [_log()] userauth is OK
2026-04-15T10:13:55.703 [DEBUG] [Thread-17110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:13:55.703 [DEBUG] [Thread-17110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:13:55.703 [DEBUG] [Thread-17110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:13:55.703 [DEBUG] [Thread-17110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:13:55.716 [INFO] [Thread-17110] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:13:55.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:13:56.291 [DEBUG] [Thread-17110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:13:56.291 [DEBUG] [Thread-17110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:13:56.291 [DEBUG] [Thread-17110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:13:56.332 [DEBUG] [Thread-17110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:13:56.332 [DEBUG] [Thread-17110] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:13:56.338 [DEBUG] [Thread-17110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:13:56.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:13:56.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:13:56.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:13:56.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:13:56.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:13:56.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:13:56.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:13:56.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:13:56.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:13:56.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.342838 -999.00  +10.10  18.13     91   +8.80 1 3 1 3 1   888    0 2.11 36.49 ----- 18.1 18.1 294.8 20.7 14.6 -6.2 14.2 -5.0 13.5 -4.4 13.9 -5.3
2026-04-15T10:13:56.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:13:56.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:13:56.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.342838
2026-04-15T10:13:56.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:13:56.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:13:56.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:13:56.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:13:56.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:13:56.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:13:45', tmtdew=0.62755, humidity=95.8369, cloud=0.0, wind=17.573, temperature=10.7066, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:13:41.203', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:13:56.367 [DEBUG] [Thread-17110] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:13:56.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:13:56.579 [DEBUG] [Thread-17113] [transport.py] [_log()] starting thread (client mode): 0xee9893c0
2026-04-15T10:13:56.579 [DEBUG] [Thread-17113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:13:56.593 [DEBUG] [Thread-17113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:13:56.593 [INFO] [Thread-17113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:13:56.601 [DEBUG] [Thread-17113] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:13:56.601 [DEBUG] [Thread-17113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:13:56.601 [DEBUG] [Thread-17113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:13:56.601 [DEBUG] [Thread-17113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:13:56.601 [DEBUG] [Thread-17113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:13:56.601 [DEBUG] [Thread-17113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:13:56.601 [DEBUG] [Thread-17113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:13:56.601 [DEBUG] [Thread-17113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:13:56.601 [DEBUG] [Thread-17113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:13:56.601 [DEBUG] [Thread-17113] [transport.py] [_log()] client lang: <none>
2026-04-15T10:13:56.601 [DEBUG] [Thread-17113] [transport.py] [_log()] server lang: <none>
2026-04-15T10:13:56.601 [DEBUG] [Thread-17113] [transport.py] [_log()] kex follows: False
2026-04-15T10:13:56.601 [DEBUG] [Thread-17113] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:13:56.601 [DEBUG] [Thread-17113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:13:56.602 [DEBUG] [Thread-17113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:13:56.602 [DEBUG] [Thread-17113] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:13:56.602 [DEBUG] [Thread-17113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:13:56.602 [DEBUG] [Thread-17113] [transport.py] [_log()] Compression: none
2026-04-15T10:13:56.602 [DEBUG] [Thread-17113] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:13:56.658 [DEBUG] [Thread-17113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:13:56.659 [DEBUG] [Thread-17113] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:13:56.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:13:56.659 [DEBUG] [Thread-17113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:13:56.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:13:56.714 [DEBUG] [Thread-17113] [transport.py] [_log()] userauth is OK
2026-04-15T10:13:56.714 [DEBUG] [Thread-17113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:13:56.714 [DEBUG] [Thread-17113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:13:56.715 [DEBUG] [Thread-17113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:13:56.715 [DEBUG] [Thread-17113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:13:56.740 [INFO] [Thread-17113] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:13:56.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:13:56.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:13:57.557 [DEBUG] [Thread-17113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:13:57.557 [DEBUG] [Thread-17113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:13:57.605 [DEBUG] [Thread-17113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:13:57.605 [DEBUG] [Thread-17113] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:13:57.618 [DEBUG] [Thread-17113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:13:57.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:13:57.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')
2026-04-15T10:13:57.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
2026-04-15T10:13:57.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:13:57.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:13:57.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:13:57.653 [DEBUG] [Thread-17113] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:14:00.364 [DEBUG] [Thread-17115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:14:03.102 [DEBUG] [Thread-17116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:14:18.146 [DEBUG] [Thread-17117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:14:27.495 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:14:27.496 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:14:27.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:14:27.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:14:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:14:28.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 14, 20), 0.397185, 97.2028, 0.0, 12.3696, 9.88698, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:14:28.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:14:20
2026-04-15T10:14:29.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:14:29.773 [DEBUG] [Thread-17118] [transport.py] [_log()] starting thread (client mode): 0xf13c92a0
2026-04-15T10:14:29.773 [DEBUG] [Thread-17118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:14:29.792 [DEBUG] [Thread-17118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:14:29.792 [INFO] [Thread-17118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:14:29.796 [DEBUG] [Thread-17118] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:14:29.796 [DEBUG] [Thread-17118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:14:29.796 [DEBUG] [Thread-17118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:14:29.796 [DEBUG] [Thread-17118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:14:29.796 [DEBUG] [Thread-17118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:14:29.796 [DEBUG] [Thread-17118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:14:29.796 [DEBUG] [Thread-17118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:14:29.796 [DEBUG] [Thread-17118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:14:29.796 [DEBUG] [Thread-17118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:14:29.796 [DEBUG] [Thread-17118] [transport.py] [_log()] client lang: <none>
2026-04-15T10:14:29.796 [DEBUG] [Thread-17118] [transport.py] [_log()] server lang: <none>
2026-04-15T10:14:29.796 [DEBUG] [Thread-17118] [transport.py] [_log()] kex follows: False
2026-04-15T10:14:29.797 [DEBUG] [Thread-17118] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:14:29.797 [DEBUG] [Thread-17118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:14:29.797 [DEBUG] [Thread-17118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:14:29.797 [DEBUG] [Thread-17118] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:14:29.797 [DEBUG] [Thread-17118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:14:29.797 [DEBUG] [Thread-17118] [transport.py] [_log()] Compression: none
2026-04-15T10:14:29.797 [DEBUG] [Thread-17118] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:14:29.805 [DEBUG] [Thread-17118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:14:29.806 [DEBUG] [Thread-17118] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:14:29.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:14:29.806 [DEBUG] [Thread-17118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:14:29.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:14:29.807 [DEBUG] [Thread-17118] [transport.py] [_log()] userauth is OK
2026-04-15T10:14:29.808 [DEBUG] [Thread-17118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:14:29.808 [DEBUG] [Thread-17118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:14:29.808 [DEBUG] [Thread-17118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:14:29.808 [DEBUG] [Thread-17118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:14:29.832 [INFO] [Thread-17118] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:14:29.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:14:30.455 [DEBUG] [Thread-17118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:14:30.455 [DEBUG] [Thread-17118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:14:30.456 [DEBUG] [Thread-17118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:14:30.496 [DEBUG] [Thread-17118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:14:30.496 [DEBUG] [Thread-17118] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:14:30.499 [DEBUG] [Thread-17118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:14:30.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:14:30.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:14:30.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:14:30.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:14:30.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:14:30.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:14:30.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:14:30.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:14:30.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:14:30.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.343185 -999.00   +9.90  15.95     91   +8.60 1 3 1 3 1   888    0 2.11 35.88 ----- 15.9 15.9 278.1 21.4 14.6 -6.6 14.2 -5.5 13.5 -4.2 13.9 -5.4
2026-04-15T10:14:30.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:14:30.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:14:30.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.343185
2026-04-15T10:14:30.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:14:30.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:14:30.524 [DEBUG] [Thread-17118] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:14:30.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:14:30.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:14:30.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:14:30.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:14:20', tmtdew=0.397185, humidity=97.2028, cloud=0.0, wind=12.3696, temperature=9.88698, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:14:11.184', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:14:30.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:14:30.784 [DEBUG] [Thread-17121] [transport.py] [_log()] starting thread (client mode): 0xf13e0730
2026-04-15T10:14:30.784 [DEBUG] [Thread-17121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:14:30.798 [DEBUG] [Thread-17121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:14:30.798 [INFO] [Thread-17121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:14:30.805 [DEBUG] [Thread-17121] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:14:30.805 [DEBUG] [Thread-17121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:14:30.805 [DEBUG] [Thread-17121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] client lang: <none>
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] server lang: <none>
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] kex follows: False
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] Compression: none
2026-04-15T10:14:30.806 [DEBUG] [Thread-17121] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:14:30.861 [DEBUG] [Thread-17121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:14:30.861 [DEBUG] [Thread-17121] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:14:30.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:14:30.862 [DEBUG] [Thread-17121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:14:30.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:14:30.918 [DEBUG] [Thread-17121] [transport.py] [_log()] userauth is OK
2026-04-15T10:14:30.918 [DEBUG] [Thread-17121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:14:30.918 [DEBUG] [Thread-17121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:14:30.919 [DEBUG] [Thread-17121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:14:30.919 [DEBUG] [Thread-17121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:14:30.943 [INFO] [Thread-17121] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:14:30.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:14:30.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:14:31.755 [DEBUG] [Thread-17121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:14:31.756 [DEBUG] [Thread-17121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:14:31.804 [DEBUG] [Thread-17121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:14:31.804 [DEBUG] [Thread-17121] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:14:31.813 [DEBUG] [Thread-17121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:14:31.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:14:31.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')
2026-04-15T10:14:31.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') -> 00000000
2026-04-15T10:14:31.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:14:31.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:14:31.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:14:31.848 [DEBUG] [Thread-17121] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:14:33.175 [DEBUG] [Thread-17123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:14:48.219 [DEBUG] [Thread-17124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:15:00.492 [DEBUG] [Thread-17125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:15:01.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:15:01.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:15:01.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:15:03.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 14, 56), 0.407385, 97.1361, 0.0, 12.388, 9.88696, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:15:03.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:14:56
2026-04-15T10:15:03.249 [DEBUG] [Thread-17126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:15:03.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:15:03.982 [DEBUG] [Thread-17127] [transport.py] [_log()] starting thread (client mode): 0xee91f160
2026-04-15T10:15:03.983 [DEBUG] [Thread-17127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:15:04.002 [DEBUG] [Thread-17127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:15:04.002 [INFO] [Thread-17127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:15:04.005 [DEBUG] [Thread-17127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:15:04.005 [DEBUG] [Thread-17127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:15:04.006 [DEBUG] [Thread-17127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:15:04.006 [DEBUG] [Thread-17127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:15:04.006 [DEBUG] [Thread-17127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:15:04.006 [DEBUG] [Thread-17127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:15:04.006 [DEBUG] [Thread-17127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:15:04.006 [DEBUG] [Thread-17127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:15:04.006 [DEBUG] [Thread-17127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:15:04.006 [DEBUG] [Thread-17127] [transport.py] [_log()] client lang: <none>
2026-04-15T10:15:04.006 [DEBUG] [Thread-17127] [transport.py] [_log()] server lang: <none>
2026-04-15T10:15:04.006 [DEBUG] [Thread-17127] [transport.py] [_log()] kex follows: False
2026-04-15T10:15:04.007 [DEBUG] [Thread-17127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:15:04.007 [DEBUG] [Thread-17127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:15:04.007 [DEBUG] [Thread-17127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:15:04.007 [DEBUG] [Thread-17127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:15:04.007 [DEBUG] [Thread-17127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:15:04.007 [DEBUG] [Thread-17127] [transport.py] [_log()] Compression: none
2026-04-15T10:15:04.007 [DEBUG] [Thread-17127] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:15:04.025 [DEBUG] [Thread-17127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:15:04.025 [DEBUG] [Thread-17127] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:15:04.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:15:04.026 [DEBUG] [Thread-17127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:15:04.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:15:04.027 [DEBUG] [Thread-17127] [transport.py] [_log()] userauth is OK
2026-04-15T10:15:04.027 [DEBUG] [Thread-17127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:15:04.027 [DEBUG] [Thread-17127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:15:04.027 [DEBUG] [Thread-17127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:15:04.028 [DEBUG] [Thread-17127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:15:04.052 [INFO] [Thread-17127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:15:04.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:15:04.820 [DEBUG] [Thread-17127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:15:04.820 [DEBUG] [Thread-17127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:15:04.821 [DEBUG] [Thread-17127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:15:04.861 [DEBUG] [Thread-17127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:15:04.861 [DEBUG] [Thread-17127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:15:04.864 [DEBUG] [Thread-17127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:15:04.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:15:04.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:15:04.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:15:04.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:15:04.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:15:04.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:15:04.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:15:04.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:15:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:15:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.343532 -999.00  +10.00  18.44     91   +8.80 1 3 1 3 1   888    0 2.08 35.00 ----- 18.4 18.4 296.6 19.9 14.9 -4.0 14.5 -4.1 13.5 -4.4 14.2 -3.2
2026-04-15T10:15:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:15:04.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:15:04.890 [DEBUG] [Thread-17127] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:15:04.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.343532
2026-04-15T10:15:04.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:15:04.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:15:04.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:15:04.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:15:04.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:15:04.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:14:56', tmtdew=0.407385, humidity=97.1361, cloud=0.0, wind=12.388, temperature=9.88696, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:14:41.165', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:15:05.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:15:05.149 [DEBUG] [Thread-17130] [transport.py] [_log()] starting thread (client mode): 0xee989690
2026-04-15T10:15:05.149 [DEBUG] [Thread-17130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:15:05.167 [DEBUG] [Thread-17130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:15:05.167 [INFO] [Thread-17130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:15:05.175 [DEBUG] [Thread-17130] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:15:05.175 [DEBUG] [Thread-17130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:15:05.175 [DEBUG] [Thread-17130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:15:05.175 [DEBUG] [Thread-17130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:15:05.175 [DEBUG] [Thread-17130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:15:05.175 [DEBUG] [Thread-17130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:15:05.175 [DEBUG] [Thread-17130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:15:05.176 [DEBUG] [Thread-17130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:15:05.176 [DEBUG] [Thread-17130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:15:05.176 [DEBUG] [Thread-17130] [transport.py] [_log()] client lang: <none>
2026-04-15T10:15:05.176 [DEBUG] [Thread-17130] [transport.py] [_log()] server lang: <none>
2026-04-15T10:15:05.176 [DEBUG] [Thread-17130] [transport.py] [_log()] kex follows: False
2026-04-15T10:15:05.176 [DEBUG] [Thread-17130] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:15:05.176 [DEBUG] [Thread-17130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:15:05.176 [DEBUG] [Thread-17130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:15:05.176 [DEBUG] [Thread-17130] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:15:05.176 [DEBUG] [Thread-17130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:15:05.176 [DEBUG] [Thread-17130] [transport.py] [_log()] Compression: none
2026-04-15T10:15:05.177 [DEBUG] [Thread-17130] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:15:05.233 [DEBUG] [Thread-17130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:15:05.234 [DEBUG] [Thread-17130] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:15:05.234 [DEBUG] [Thread-17130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:15:05.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:15:05.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:15:05.291 [DEBUG] [Thread-17130] [transport.py] [_log()] userauth is OK
2026-04-15T10:15:05.291 [DEBUG] [Thread-17130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:15:05.291 [DEBUG] [Thread-17130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:15:05.291 [DEBUG] [Thread-17130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:15:05.292 [DEBUG] [Thread-17130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:15:05.317 [INFO] [Thread-17130] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:15:05.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:15:05.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:15:06.207 [DEBUG] [Thread-17130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:15:06.207 [DEBUG] [Thread-17130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:15:06.255 [DEBUG] [Thread-17130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:15:06.256 [DEBUG] [Thread-17130] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:15:06.264 [DEBUG] [Thread-17130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:15:06.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:15:06.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')
2026-04-15T10:15:06.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
2026-04-15T10:15:06.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:15:06.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:15:06.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:15:06.299 [DEBUG] [Thread-17130] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:15:18.277 [DEBUG] [Thread-17132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:15:27.636 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:15:27.637 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:15:33.321 [DEBUG] [Thread-17133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:15:36.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:15:36.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:15:36.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
2026-04-15T10:15:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 14, 56), 0.407385, 97.1361, 0.0, 12.388, 9.88696, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:15:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:14:56
2026-04-15T10:15:37.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:15:38.407 [DEBUG] [Thread-17134] [transport.py] [_log()] starting thread (client mode): 0xee9053c0
2026-04-15T10:15:38.407 [DEBUG] [Thread-17134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:15:38.427 [DEBUG] [Thread-17134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:15:38.427 [INFO] [Thread-17134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:15:38.430 [DEBUG] [Thread-17134] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:15:38.430 [DEBUG] [Thread-17134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:15:38.430 [DEBUG] [Thread-17134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:15:38.430 [DEBUG] [Thread-17134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:15:38.430 [DEBUG] [Thread-17134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:15:38.430 [DEBUG] [Thread-17134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:15:38.430 [DEBUG] [Thread-17134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:15:38.430 [DEBUG] [Thread-17134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:15:38.430 [DEBUG] [Thread-17134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:15:38.431 [DEBUG] [Thread-17134] [transport.py] [_log()] client lang: <none>
2026-04-15T10:15:38.431 [DEBUG] [Thread-17134] [transport.py] [_log()] server lang: <none>
2026-04-15T10:15:38.431 [DEBUG] [Thread-17134] [transport.py] [_log()] kex follows: False
2026-04-15T10:15:38.431 [DEBUG] [Thread-17134] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:15:38.431 [DEBUG] [Thread-17134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:15:38.431 [DEBUG] [Thread-17134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:15:38.431 [DEBUG] [Thread-17134] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:15:38.431 [DEBUG] [Thread-17134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:15:38.431 [DEBUG] [Thread-17134] [transport.py] [_log()] Compression: none
2026-04-15T10:15:38.431 [DEBUG] [Thread-17134] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:15:38.445 [DEBUG] [Thread-17134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:15:38.446 [DEBUG] [Thread-17134] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:15:38.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:15:38.446 [DEBUG] [Thread-17134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:15:38.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:15:38.488 [DEBUG] [Thread-17134] [transport.py] [_log()] userauth is OK
2026-04-15T10:15:38.489 [DEBUG] [Thread-17134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:15:38.489 [DEBUG] [Thread-17134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:15:38.489 [DEBUG] [Thread-17134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:15:38.489 [DEBUG] [Thread-17134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:15:38.525 [INFO] [Thread-17134] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:15:38.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:15:39.122 [DEBUG] [Thread-17134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:15:39.122 [DEBUG] [Thread-17134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:15:39.123 [DEBUG] [Thread-17134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:15:39.163 [DEBUG] [Thread-17134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:15:39.163 [DEBUG] [Thread-17134] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:15:39.167 [DEBUG] [Thread-17134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:15:39.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:15:39.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:15:39.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:15:39.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:15:39.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:15:39.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:15:39.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:15:39.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:15:39.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:15:39.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.343880 -999.00  +10.00  17.06     91   +8.70 1 3 1 3 1   888    0 1.98 31.46 ----- 17.1 17.1 292.6 19.9 15.2 -5.0 14.8 -4.6 13.8 -5.1 14.5 -3.9
2026-04-15T10:15:39.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:15:39.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:15:39.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.343880
2026-04-15T10:15:39.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:15:39.191 [DEBUG] [Thread-17134] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:15:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:15:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:15:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:15:39.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:15:39.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:14:56', tmtdew=0.407385, humidity=97.1361, cloud=0.0, wind=12.388, temperature=9.88696, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:15:11.232', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:15:39.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:15:39.428 [DEBUG] [Thread-17137] [transport.py] [_log()] starting thread (client mode): 0xf13c9360
2026-04-15T10:15:39.428 [DEBUG] [Thread-17137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:15:39.442 [DEBUG] [Thread-17137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:15:39.442 [INFO] [Thread-17137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:15:39.449 [DEBUG] [Thread-17137] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:15:39.449 [DEBUG] [Thread-17137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:15:39.449 [DEBUG] [Thread-17137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:15:39.449 [DEBUG] [Thread-17137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:15:39.450 [DEBUG] [Thread-17137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:15:39.450 [DEBUG] [Thread-17137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:15:39.450 [DEBUG] [Thread-17137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:15:39.450 [DEBUG] [Thread-17137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:15:39.450 [DEBUG] [Thread-17137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:15:39.450 [DEBUG] [Thread-17137] [transport.py] [_log()] client lang: <none>
2026-04-15T10:15:39.450 [DEBUG] [Thread-17137] [transport.py] [_log()] server lang: <none>
2026-04-15T10:15:39.450 [DEBUG] [Thread-17137] [transport.py] [_log()] kex follows: False
2026-04-15T10:15:39.450 [DEBUG] [Thread-17137] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:15:39.450 [DEBUG] [Thread-17137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:15:39.450 [DEBUG] [Thread-17137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:15:39.450 [DEBUG] [Thread-17137] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:15:39.451 [DEBUG] [Thread-17137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:15:39.451 [DEBUG] [Thread-17137] [transport.py] [_log()] Compression: none
2026-04-15T10:15:39.451 [DEBUG] [Thread-17137] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:15:39.506 [DEBUG] [Thread-17137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:15:39.506 [DEBUG] [Thread-17137] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:15:39.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:15:39.507 [DEBUG] [Thread-17137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:15:39.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:15:39.566 [DEBUG] [Thread-17137] [transport.py] [_log()] userauth is OK
2026-04-15T10:15:39.567 [DEBUG] [Thread-17137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:15:39.567 [DEBUG] [Thread-17137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:15:39.567 [DEBUG] [Thread-17137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:15:39.567 [DEBUG] [Thread-17137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:15:39.592 [INFO] [Thread-17137] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:15:39.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:15:39.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:15:40.409 [DEBUG] [Thread-17137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:15:40.409 [DEBUG] [Thread-17137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:15:40.457 [DEBUG] [Thread-17137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:15:40.457 [DEBUG] [Thread-17137] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:15:40.466 [DEBUG] [Thread-17137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:15:40.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:15:40.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')
2026-04-15T10:15:40.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') -> 00000000
2026-04-15T10:15:40.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:15:40.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:15:40.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:15:40.500 [DEBUG] [Thread-17137] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:15:48.353 [DEBUG] [Thread-17139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:16:00.604 [DEBUG] [Thread-17140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:16:03.398 [DEBUG] [Thread-17141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:16:10.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:16:10.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:16:10.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:16:11.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 15, 31), 0.398225, 97.2025, 0.0, 14.6459, 10.1524, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:16:11.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:15:31
2026-04-15T10:16:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:16:12.634 [DEBUG] [Thread-17142] [transport.py] [_log()] starting thread (client mode): 0xf13ef820
2026-04-15T10:16:12.634 [DEBUG] [Thread-17142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:16:12.653 [DEBUG] [Thread-17142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:16:12.653 [INFO] [Thread-17142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:16:12.656 [DEBUG] [Thread-17142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:16:12.656 [DEBUG] [Thread-17142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:16:12.656 [DEBUG] [Thread-17142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:16:12.656 [DEBUG] [Thread-17142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:16:12.656 [DEBUG] [Thread-17142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:16:12.656 [DEBUG] [Thread-17142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:16:12.656 [DEBUG] [Thread-17142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:16:12.656 [DEBUG] [Thread-17142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:16:12.656 [DEBUG] [Thread-17142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:16:12.656 [DEBUG] [Thread-17142] [transport.py] [_log()] client lang: <none>
2026-04-15T10:16:12.657 [DEBUG] [Thread-17142] [transport.py] [_log()] server lang: <none>
2026-04-15T10:16:12.657 [DEBUG] [Thread-17142] [transport.py] [_log()] kex follows: False
2026-04-15T10:16:12.657 [DEBUG] [Thread-17142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:16:12.657 [DEBUG] [Thread-17142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:16:12.657 [DEBUG] [Thread-17142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:16:12.657 [DEBUG] [Thread-17142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:16:12.657 [DEBUG] [Thread-17142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:16:12.657 [DEBUG] [Thread-17142] [transport.py] [_log()] Compression: none
2026-04-15T10:16:12.657 [DEBUG] [Thread-17142] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:16:12.670 [DEBUG] [Thread-17142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:16:12.670 [DEBUG] [Thread-17142] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:16:12.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:16:12.671 [DEBUG] [Thread-17142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:16:12.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:16:12.671 [DEBUG] [Thread-17142] [transport.py] [_log()] userauth is OK
2026-04-15T10:16:12.671 [DEBUG] [Thread-17142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:16:12.672 [DEBUG] [Thread-17142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:16:12.672 [DEBUG] [Thread-17142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:16:12.672 [DEBUG] [Thread-17142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:16:12.689 [INFO] [Thread-17142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:16:12.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:16:13.437 [DEBUG] [Thread-17142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:16:13.437 [DEBUG] [Thread-17142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:16:13.438 [DEBUG] [Thread-17142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:16:13.477 [DEBUG] [Thread-17142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:16:13.478 [DEBUG] [Thread-17142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:16:13.480 [DEBUG] [Thread-17142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:16:13.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:16:13.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:16:13.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:16:13.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:16:13.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:16:13.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:16:13.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:16:13.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:16:13.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:16:13.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.344574 -999.00  +10.50  17.28     91   +9.20 1 3 1 3 1   888    0 2.08 33.63 ----- 17.3 17.3 292.2 20.6 15.8 -7.5 15.2 -6.8 14.1 -7.4 14.8 -6.3
2026-04-15T10:16:13.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:16:13.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:16:13.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.344574
2026-04-15T10:16:13.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:16:13.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:16:13.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:16:13.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:16:13.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:16:13.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:15:31', tmtdew=0.398225, humidity=97.2025, cloud=0.0, wind=14.6459, temperature=10.1524, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:16:11.194', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:16:13.495 [DEBUG] [Thread-17142] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:16:13.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:16:13.706 [DEBUG] [Thread-17145] [transport.py] [_log()] starting thread (client mode): 0xf13fc2b0
2026-04-15T10:16:13.706 [DEBUG] [Thread-17145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:16:13.724 [DEBUG] [Thread-17145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:16:13.724 [INFO] [Thread-17145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:16:13.732 [DEBUG] [Thread-17145] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:16:13.733 [DEBUG] [Thread-17145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:16:13.733 [DEBUG] [Thread-17145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:16:13.733 [DEBUG] [Thread-17145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:16:13.733 [DEBUG] [Thread-17145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:16:13.733 [DEBUG] [Thread-17145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:16:13.733 [DEBUG] [Thread-17145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:16:13.733 [DEBUG] [Thread-17145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:16:13.733 [DEBUG] [Thread-17145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:16:13.733 [DEBUG] [Thread-17145] [transport.py] [_log()] client lang: <none>
2026-04-15T10:16:13.733 [DEBUG] [Thread-17145] [transport.py] [_log()] server lang: <none>
2026-04-15T10:16:13.733 [DEBUG] [Thread-17145] [transport.py] [_log()] kex follows: False
2026-04-15T10:16:13.733 [DEBUG] [Thread-17145] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:16:13.734 [DEBUG] [Thread-17145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:16:13.734 [DEBUG] [Thread-17145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:16:13.734 [DEBUG] [Thread-17145] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:16:13.734 [DEBUG] [Thread-17145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:16:13.734 [DEBUG] [Thread-17145] [transport.py] [_log()] Compression: none
2026-04-15T10:16:13.734 [DEBUG] [Thread-17145] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:16:13.791 [DEBUG] [Thread-17145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:16:13.791 [DEBUG] [Thread-17145] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:16:13.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:16:13.792 [DEBUG] [Thread-17145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:16:13.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:16:13.847 [DEBUG] [Thread-17145] [transport.py] [_log()] userauth is OK
2026-04-15T10:16:13.848 [DEBUG] [Thread-17145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:16:13.848 [DEBUG] [Thread-17145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:16:13.848 [DEBUG] [Thread-17145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:16:13.848 [DEBUG] [Thread-17145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:16:13.875 [INFO] [Thread-17145] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:16:13.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:16:13.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:16:14.714 [DEBUG] [Thread-17145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:16:14.714 [DEBUG] [Thread-17145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:16:14.768 [DEBUG] [Thread-17145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:16:14.769 [DEBUG] [Thread-17145] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:16:14.783 [DEBUG] [Thread-17145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:16:14.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:16:14.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')
2026-04-15T10:16:14.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
2026-04-15T10:16:14.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:16:14.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:16:14.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:16:14.848 [DEBUG] [Thread-17145] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:16:18.429 [DEBUG] [Thread-17147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:16:27.776 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:16:27.777 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:16:33.476 [DEBUG] [Thread-17148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:16:44.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:16:44.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:16:44.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
2026-04-15T10:16:46.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 16, 7), 0.4013, 97.1859, 0.0, 17.9798, 10.2519, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:16:46.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:16:07
2026-04-15T10:16:46.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:16:47.089 [DEBUG] [Thread-17149] [transport.py] [_log()] starting thread (client mode): 0xf13ef5e0
2026-04-15T10:16:47.090 [DEBUG] [Thread-17149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:16:47.105 [DEBUG] [Thread-17149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:16:47.105 [INFO] [Thread-17149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:16:47.107 [DEBUG] [Thread-17149] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:16:47.107 [DEBUG] [Thread-17149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:16:47.107 [DEBUG] [Thread-17149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:16:47.107 [DEBUG] [Thread-17149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:16:47.107 [DEBUG] [Thread-17149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:16:47.107 [DEBUG] [Thread-17149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:16:47.107 [DEBUG] [Thread-17149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:16:47.107 [DEBUG] [Thread-17149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:16:47.108 [DEBUG] [Thread-17149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:16:47.108 [DEBUG] [Thread-17149] [transport.py] [_log()] client lang: <none>
2026-04-15T10:16:47.108 [DEBUG] [Thread-17149] [transport.py] [_log()] server lang: <none>
2026-04-15T10:16:47.108 [DEBUG] [Thread-17149] [transport.py] [_log()] kex follows: False
2026-04-15T10:16:47.108 [DEBUG] [Thread-17149] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:16:47.108 [DEBUG] [Thread-17149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:16:47.108 [DEBUG] [Thread-17149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:16:47.108 [DEBUG] [Thread-17149] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:16:47.108 [DEBUG] [Thread-17149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:16:47.108 [DEBUG] [Thread-17149] [transport.py] [_log()] Compression: none
2026-04-15T10:16:47.108 [DEBUG] [Thread-17149] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:16:47.120 [DEBUG] [Thread-17149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:16:47.120 [DEBUG] [Thread-17149] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:16:47.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:16:47.121 [DEBUG] [Thread-17149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:16:47.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:16:47.122 [DEBUG] [Thread-17149] [transport.py] [_log()] userauth is OK
2026-04-15T10:16:47.122 [DEBUG] [Thread-17149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:16:47.122 [DEBUG] [Thread-17149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:16:47.122 [DEBUG] [Thread-17149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:16:47.122 [DEBUG] [Thread-17149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:16:47.145 [INFO] [Thread-17149] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:16:47.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:16:47.766 [DEBUG] [Thread-17149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:16:47.766 [DEBUG] [Thread-17149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:16:47.766 [DEBUG] [Thread-17149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:16:47.807 [DEBUG] [Thread-17149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:16:47.807 [DEBUG] [Thread-17149] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:16:47.810 [DEBUG] [Thread-17149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:16:47.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:16:47.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:16:47.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:16:47.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:16:47.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:16:47.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:16:47.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:16:47.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:16:47.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:16:47.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.344921 -999.00  +10.60  11.74     90   +9.10 1 3 1 3 1   888    0 2.08 33.48 ----- 11.7 11.7 308.0 18.9 16.0 -9.8 15.3 -9.3 14.3 -7.3 14.9 -9.1
2026-04-15T10:16:47.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:16:47.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:16:47.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.344921
2026-04-15T10:16:47.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:16:47.828 [DEBUG] [Thread-17149] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:16:47.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:16:47.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:16:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:16:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:16:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:16:07', tmtdew=0.4013, humidity=97.1859, cloud=0.0, wind=17.9798, temperature=10.2519, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:16:41.174', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:16:48.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:16:48.084 [DEBUG] [Thread-17152] [transport.py] [_log()] starting thread (client mode): 0xf1366e60
2026-04-15T10:16:48.084 [DEBUG] [Thread-17152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:16:48.099 [DEBUG] [Thread-17152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:16:48.099 [INFO] [Thread-17152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:16:48.106 [DEBUG] [Thread-17152] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:16:48.106 [DEBUG] [Thread-17152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:16:48.107 [DEBUG] [Thread-17152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:16:48.107 [DEBUG] [Thread-17152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:16:48.107 [DEBUG] [Thread-17152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:16:48.107 [DEBUG] [Thread-17152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:16:48.107 [DEBUG] [Thread-17152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:16:48.107 [DEBUG] [Thread-17152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:16:48.107 [DEBUG] [Thread-17152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:16:48.107 [DEBUG] [Thread-17152] [transport.py] [_log()] client lang: <none>
2026-04-15T10:16:48.107 [DEBUG] [Thread-17152] [transport.py] [_log()] server lang: <none>
2026-04-15T10:16:48.107 [DEBUG] [Thread-17152] [transport.py] [_log()] kex follows: False
2026-04-15T10:16:48.107 [DEBUG] [Thread-17152] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:16:48.107 [DEBUG] [Thread-17152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:16:48.108 [DEBUG] [Thread-17152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:16:48.108 [DEBUG] [Thread-17152] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:16:48.108 [DEBUG] [Thread-17152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:16:48.108 [DEBUG] [Thread-17152] [transport.py] [_log()] Compression: none
2026-04-15T10:16:48.108 [DEBUG] [Thread-17152] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:16:48.163 [DEBUG] [Thread-17152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:16:48.164 [DEBUG] [Thread-17152] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:16:48.164 [DEBUG] [Thread-17152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:16:48.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:16:48.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:16:48.220 [DEBUG] [Thread-17152] [transport.py] [_log()] userauth is OK
2026-04-15T10:16:48.220 [DEBUG] [Thread-17152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:16:48.220 [DEBUG] [Thread-17152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:16:48.220 [DEBUG] [Thread-17152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:16:48.220 [DEBUG] [Thread-17152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:16:48.245 [INFO] [Thread-17152] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:16:48.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:16:48.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:16:48.508 [DEBUG] [Thread-17154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:16:49.106 [DEBUG] [Thread-17152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:16:49.106 [DEBUG] [Thread-17152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:16:49.154 [DEBUG] [Thread-17152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:16:49.154 [DEBUG] [Thread-17152] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:16:49.163 [DEBUG] [Thread-17152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:16:49.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:16:49.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')
2026-04-15T10:16:49.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') -> 00000000
2026-04-15T10:16:49.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:16:49.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:16:49.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:16:49.198 [DEBUG] [Thread-17152] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:17:00.719 [DEBUG] [Thread-17155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:17:03.552 [DEBUG] [Thread-17156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:17:18.585 [DEBUG] [Thread-17157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:17:19.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:17:19.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:17:19.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:17:20.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 16, 42), 0.78067, 94.8742, 0.0, 18.702, 11.1375, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:17:20.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:16:42
2026-04-15T10:17:20.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:17:21.396 [DEBUG] [Thread-17158] [transport.py] [_log()] starting thread (client mode): 0xf13c9570
2026-04-15T10:17:21.396 [DEBUG] [Thread-17158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:17:21.416 [DEBUG] [Thread-17158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:17:21.416 [INFO] [Thread-17158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:17:21.417 [DEBUG] [Thread-17158] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:17:21.417 [DEBUG] [Thread-17158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:17:21.417 [DEBUG] [Thread-17158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:17:21.417 [DEBUG] [Thread-17158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:17:21.417 [DEBUG] [Thread-17158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:17:21.417 [DEBUG] [Thread-17158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:17:21.417 [DEBUG] [Thread-17158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:17:21.417 [DEBUG] [Thread-17158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:17:21.418 [DEBUG] [Thread-17158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:17:21.418 [DEBUG] [Thread-17158] [transport.py] [_log()] client lang: <none>
2026-04-15T10:17:21.418 [DEBUG] [Thread-17158] [transport.py] [_log()] server lang: <none>
2026-04-15T10:17:21.418 [DEBUG] [Thread-17158] [transport.py] [_log()] kex follows: False
2026-04-15T10:17:21.418 [DEBUG] [Thread-17158] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:17:21.418 [DEBUG] [Thread-17158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:17:21.418 [DEBUG] [Thread-17158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:17:21.418 [DEBUG] [Thread-17158] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:17:21.418 [DEBUG] [Thread-17158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:17:21.418 [DEBUG] [Thread-17158] [transport.py] [_log()] Compression: none
2026-04-15T10:17:21.418 [DEBUG] [Thread-17158] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:17:21.432 [DEBUG] [Thread-17158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:17:21.433 [DEBUG] [Thread-17158] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:17:21.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:17:21.433 [DEBUG] [Thread-17158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:17:21.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:17:21.434 [DEBUG] [Thread-17158] [transport.py] [_log()] userauth is OK
2026-04-15T10:17:21.434 [DEBUG] [Thread-17158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:17:21.434 [DEBUG] [Thread-17158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:17:21.435 [DEBUG] [Thread-17158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:17:21.435 [DEBUG] [Thread-17158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:17:21.456 [INFO] [Thread-17158] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:17:21.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:17:22.007 [DEBUG] [Thread-17158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:17:22.007 [DEBUG] [Thread-17158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:17:22.007 [DEBUG] [Thread-17158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:17:22.048 [DEBUG] [Thread-17158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:17:22.048 [DEBUG] [Thread-17158] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:17:22.050 [DEBUG] [Thread-17158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:17:22.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:17:22.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:17:22.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:17:22.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:17:22.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:17:22.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:17:22.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:17:22.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:17:22.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:17:22.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.345268 -999.00  +10.70  15.42     90   +9.20 1 2 1 3 1   888    0 2.05 31.97 ----- 15.4 15.4 308.6 20.8 16.3 -12.4 15.4 -12.7 14.4 -9.6 15.1 -12.1
2026-04-15T10:17:22.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:17:22.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:17:22.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.345268
2026-04-15T10:17:22.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:17:22.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:17:22.068 [DEBUG] [Thread-17158] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:17:22.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:17:22.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:17:22.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T10:17:22.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:16:42', tmtdew=0.78067, humidity=94.8742, cloud=0.0, wind=18.702, temperature=11.1375, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:17:11.155', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:17:22.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:17:22.318 [DEBUG] [Thread-17161] [transport.py] [_log()] starting thread (client mode): 0xee98a560
2026-04-15T10:17:22.318 [DEBUG] [Thread-17161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:17:22.333 [DEBUG] [Thread-17161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:17:22.333 [INFO] [Thread-17161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:17:22.340 [DEBUG] [Thread-17161] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:17:22.340 [DEBUG] [Thread-17161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:17:22.340 [DEBUG] [Thread-17161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:17:22.340 [DEBUG] [Thread-17161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:17:22.341 [DEBUG] [Thread-17161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:17:22.341 [DEBUG] [Thread-17161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:17:22.341 [DEBUG] [Thread-17161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:17:22.341 [DEBUG] [Thread-17161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:17:22.341 [DEBUG] [Thread-17161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:17:22.341 [DEBUG] [Thread-17161] [transport.py] [_log()] client lang: <none>
2026-04-15T10:17:22.341 [DEBUG] [Thread-17161] [transport.py] [_log()] server lang: <none>
2026-04-15T10:17:22.341 [DEBUG] [Thread-17161] [transport.py] [_log()] kex follows: False
2026-04-15T10:17:22.341 [DEBUG] [Thread-17161] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:17:22.341 [DEBUG] [Thread-17161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:17:22.341 [DEBUG] [Thread-17161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:17:22.341 [DEBUG] [Thread-17161] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:17:22.342 [DEBUG] [Thread-17161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:17:22.342 [DEBUG] [Thread-17161] [transport.py] [_log()] Compression: none
2026-04-15T10:17:22.342 [DEBUG] [Thread-17161] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:17:22.398 [DEBUG] [Thread-17161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:17:22.398 [DEBUG] [Thread-17161] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:17:22.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:17:22.399 [DEBUG] [Thread-17161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:17:22.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:17:22.455 [DEBUG] [Thread-17161] [transport.py] [_log()] userauth is OK
2026-04-15T10:17:22.455 [DEBUG] [Thread-17161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:17:22.455 [DEBUG] [Thread-17161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:17:22.455 [DEBUG] [Thread-17161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:17:22.455 [DEBUG] [Thread-17161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:17:22.480 [INFO] [Thread-17161] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:17:22.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:17:22.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:17:23.363 [DEBUG] [Thread-17161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:17:23.363 [DEBUG] [Thread-17161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:17:23.411 [DEBUG] [Thread-17161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:17:23.411 [DEBUG] [Thread-17161] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:17:23.420 [DEBUG] [Thread-17161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:17:23.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:17:23.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')
2026-04-15T10:17:23.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
2026-04-15T10:17:23.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:17:23.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:17:23.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:17:23.454 [DEBUG] [Thread-17161] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:17:27.917 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:17:27.918 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:17:33.617 [DEBUG] [Thread-17163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:17:48.662 [DEBUG] [Thread-17164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:17:53.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:17:53.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:17:53.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
2026-04-15T10:17:54.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 17, 18), 0.47664, 96.7045, 0.0, 10.746, 10.0356, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:17:54.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:17:18
2026-04-15T10:17:55.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:17:55.748 [DEBUG] [Thread-17165] [transport.py] [_log()] starting thread (client mode): 0xee91d180
2026-04-15T10:17:55.749 [DEBUG] [Thread-17165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:17:55.768 [DEBUG] [Thread-17165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:17:55.769 [INFO] [Thread-17165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:17:55.771 [DEBUG] [Thread-17165] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:17:55.771 [DEBUG] [Thread-17165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:17:55.771 [DEBUG] [Thread-17165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:17:55.771 [DEBUG] [Thread-17165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:17:55.771 [DEBUG] [Thread-17165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:17:55.771 [DEBUG] [Thread-17165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:17:55.771 [DEBUG] [Thread-17165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:17:55.771 [DEBUG] [Thread-17165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:17:55.772 [DEBUG] [Thread-17165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:17:55.772 [DEBUG] [Thread-17165] [transport.py] [_log()] client lang: <none>
2026-04-15T10:17:55.772 [DEBUG] [Thread-17165] [transport.py] [_log()] server lang: <none>
2026-04-15T10:17:55.772 [DEBUG] [Thread-17165] [transport.py] [_log()] kex follows: False
2026-04-15T10:17:55.772 [DEBUG] [Thread-17165] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:17:55.772 [DEBUG] [Thread-17165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:17:55.772 [DEBUG] [Thread-17165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:17:55.772 [DEBUG] [Thread-17165] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:17:55.772 [DEBUG] [Thread-17165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:17:55.772 [DEBUG] [Thread-17165] [transport.py] [_log()] Compression: none
2026-04-15T10:17:55.772 [DEBUG] [Thread-17165] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:17:55.785 [DEBUG] [Thread-17165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:17:55.785 [DEBUG] [Thread-17165] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:17:55.785 [DEBUG] [Thread-17165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:17:55.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:17:55.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:17:55.786 [DEBUG] [Thread-17165] [transport.py] [_log()] userauth is OK
2026-04-15T10:17:55.787 [DEBUG] [Thread-17165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:17:55.787 [DEBUG] [Thread-17165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:17:55.787 [DEBUG] [Thread-17165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:17:55.787 [DEBUG] [Thread-17165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:17:55.799 [INFO] [Thread-17165] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:17:55.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:17:56.407 [DEBUG] [Thread-17165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:17:56.408 [DEBUG] [Thread-17165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:17:56.408 [DEBUG] [Thread-17165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:17:56.449 [DEBUG] [Thread-17165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:17:56.449 [DEBUG] [Thread-17165] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:17:56.452 [DEBUG] [Thread-17165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:17:56.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:17:56.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:17:56.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:17:56.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:17:56.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:17:56.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:17:56.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:17:56.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:17:56.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:17:56.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.345616 -999.00  +10.80  16.16     90   +9.20 1 2 1 3 1   888    0 2.01 30.97 ----- 16.2 16.2 295.4 21.4 16.3 -14.6 15.5 -13.9 14.4 -12.8 15.2 -13.1
2026-04-15T10:17:56.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:17:56.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:17:56.482 [DEBUG] [Thread-17165] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:17:56.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.345616
2026-04-15T10:17:56.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:17:56.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:17:56.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:17:56.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:17:56.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T10:17:56.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:17:18', tmtdew=0.47664, humidity=96.7045, cloud=0.0, wind=10.746, temperature=10.0356, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:17:41.222', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:17:56.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:17:56.742 [DEBUG] [Thread-17168] [transport.py] [_log()] starting thread (client mode): 0xee925d80
2026-04-15T10:17:56.742 [DEBUG] [Thread-17168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:17:56.757 [DEBUG] [Thread-17168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:17:56.757 [INFO] [Thread-17168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:17:56.764 [DEBUG] [Thread-17168] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:17:56.764 [DEBUG] [Thread-17168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:17:56.764 [DEBUG] [Thread-17168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:17:56.764 [DEBUG] [Thread-17168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:17:56.764 [DEBUG] [Thread-17168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:17:56.765 [DEBUG] [Thread-17168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:17:56.765 [DEBUG] [Thread-17168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:17:56.765 [DEBUG] [Thread-17168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:17:56.765 [DEBUG] [Thread-17168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:17:56.765 [DEBUG] [Thread-17168] [transport.py] [_log()] client lang: <none>
2026-04-15T10:17:56.765 [DEBUG] [Thread-17168] [transport.py] [_log()] server lang: <none>
2026-04-15T10:17:56.765 [DEBUG] [Thread-17168] [transport.py] [_log()] kex follows: False
2026-04-15T10:17:56.765 [DEBUG] [Thread-17168] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:17:56.765 [DEBUG] [Thread-17168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:17:56.765 [DEBUG] [Thread-17168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:17:56.765 [DEBUG] [Thread-17168] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:17:56.765 [DEBUG] [Thread-17168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:17:56.766 [DEBUG] [Thread-17168] [transport.py] [_log()] Compression: none
2026-04-15T10:17:56.766 [DEBUG] [Thread-17168] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:17:56.821 [DEBUG] [Thread-17168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:17:56.821 [DEBUG] [Thread-17168] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:17:56.822 [DEBUG] [Thread-17168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:17:56.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:17:56.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:17:56.878 [DEBUG] [Thread-17168] [transport.py] [_log()] userauth is OK
2026-04-15T10:17:56.878 [DEBUG] [Thread-17168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:17:56.878 [DEBUG] [Thread-17168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:17:56.878 [DEBUG] [Thread-17168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:17:56.878 [DEBUG] [Thread-17168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:17:56.904 [INFO] [Thread-17168] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:17:56.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:17:56.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:17:57.740 [DEBUG] [Thread-17168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:17:57.740 [DEBUG] [Thread-17168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:17:57.787 [DEBUG] [Thread-17168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:17:57.788 [DEBUG] [Thread-17168] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:17:57.796 [DEBUG] [Thread-17168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:17:57.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:17:57.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')
2026-04-15T10:17:57.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
2026-04-15T10:17:57.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:17:57.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:17:57.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:17:57.829 [DEBUG] [Thread-17168] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:18:00.848 [DEBUG] [Thread-17170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:18:03.694 [DEBUG] [Thread-17171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:18:18.741 [DEBUG] [Thread-17172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:18:27.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:18:27.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:18:27.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
2026-04-15T10:18:28.060 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:18:28.061 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:18:29.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 17, 53), 0.92708, 93.9441, 0.0, 13.3042, 10.9708, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:18:29.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:17:53
2026-04-15T10:18:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:18:29.925 [DEBUG] [Thread-17173] [transport.py] [_log()] starting thread (client mode): 0xee91f550
2026-04-15T10:18:29.925 [DEBUG] [Thread-17173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:18:29.946 [DEBUG] [Thread-17173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:18:29.946 [INFO] [Thread-17173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:18:29.947 [DEBUG] [Thread-17173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:18:29.947 [DEBUG] [Thread-17173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:18:29.947 [DEBUG] [Thread-17173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:18:29.948 [DEBUG] [Thread-17173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:18:29.948 [DEBUG] [Thread-17173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:18:29.948 [DEBUG] [Thread-17173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:18:29.948 [DEBUG] [Thread-17173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:18:29.948 [DEBUG] [Thread-17173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:18:29.948 [DEBUG] [Thread-17173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:18:29.948 [DEBUG] [Thread-17173] [transport.py] [_log()] client lang: <none>
2026-04-15T10:18:29.948 [DEBUG] [Thread-17173] [transport.py] [_log()] server lang: <none>
2026-04-15T10:18:29.948 [DEBUG] [Thread-17173] [transport.py] [_log()] kex follows: False
2026-04-15T10:18:29.949 [DEBUG] [Thread-17173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:18:29.949 [DEBUG] [Thread-17173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:18:29.949 [DEBUG] [Thread-17173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:18:29.949 [DEBUG] [Thread-17173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:18:29.949 [DEBUG] [Thread-17173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:18:29.949 [DEBUG] [Thread-17173] [transport.py] [_log()] Compression: none
2026-04-15T10:18:29.949 [DEBUG] [Thread-17173] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:18:29.963 [DEBUG] [Thread-17173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:18:29.963 [DEBUG] [Thread-17173] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:18:29.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:18:29.964 [DEBUG] [Thread-17173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:18:29.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:18:29.965 [DEBUG] [Thread-17173] [transport.py] [_log()] userauth is OK
2026-04-15T10:18:29.965 [DEBUG] [Thread-17173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:18:29.965 [DEBUG] [Thread-17173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:18:29.965 [DEBUG] [Thread-17173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:18:29.965 [DEBUG] [Thread-17173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:18:29.983 [INFO] [Thread-17173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:18:29.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:18:30.596 [DEBUG] [Thread-17173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:18:30.596 [DEBUG] [Thread-17173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:18:30.597 [DEBUG] [Thread-17173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:18:30.637 [DEBUG] [Thread-17173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:18:30.637 [DEBUG] [Thread-17173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:18:30.640 [DEBUG] [Thread-17173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:18:30.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:18:30.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:18:30.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:18:30.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:18:30.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:18:30.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:18:30.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:18:30.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:18:30.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:18:30.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.345963 -999.00  +10.70  17.40     90   +9.10 1 2 1 3 1   888    0 2.12 33.51 ----- 17.4 17.4 307.0 22.7 16.4 -16.8 15.6 -15.4 14.5 -12.5 15.3 -13.9
2026-04-15T10:18:30.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:18:30.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:18:30.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.345963
2026-04-15T10:18:30.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:18:30.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:18:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:18:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:18:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T10:18:30.664 [DEBUG] [Thread-17173] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:18:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:17:53', tmtdew=0.92708, humidity=93.9441, cloud=0.0, wind=13.3042, temperature=10.9708, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:18:11.203', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:18:30.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:18:30.913 [DEBUG] [Thread-17176] [transport.py] [_log()] starting thread (client mode): 0xf1334c70
2026-04-15T10:18:30.913 [DEBUG] [Thread-17176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:18:30.927 [DEBUG] [Thread-17176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:18:30.928 [INFO] [Thread-17176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:18:30.935 [DEBUG] [Thread-17176] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:18:30.935 [DEBUG] [Thread-17176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:18:30.935 [DEBUG] [Thread-17176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:18:30.935 [DEBUG] [Thread-17176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:18:30.935 [DEBUG] [Thread-17176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:18:30.935 [DEBUG] [Thread-17176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:18:30.935 [DEBUG] [Thread-17176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:18:30.935 [DEBUG] [Thread-17176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:18:30.936 [DEBUG] [Thread-17176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:18:30.936 [DEBUG] [Thread-17176] [transport.py] [_log()] client lang: <none>
2026-04-15T10:18:30.936 [DEBUG] [Thread-17176] [transport.py] [_log()] server lang: <none>
2026-04-15T10:18:30.936 [DEBUG] [Thread-17176] [transport.py] [_log()] kex follows: False
2026-04-15T10:18:30.936 [DEBUG] [Thread-17176] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:18:30.936 [DEBUG] [Thread-17176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:18:30.936 [DEBUG] [Thread-17176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:18:30.936 [DEBUG] [Thread-17176] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:18:30.936 [DEBUG] [Thread-17176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:18:30.936 [DEBUG] [Thread-17176] [transport.py] [_log()] Compression: none
2026-04-15T10:18:30.937 [DEBUG] [Thread-17176] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:18:30.992 [DEBUG] [Thread-17176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:18:30.993 [DEBUG] [Thread-17176] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:18:30.993 [DEBUG] [Thread-17176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:18:30.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:18:30.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:18:31.049 [DEBUG] [Thread-17176] [transport.py] [_log()] userauth is OK
2026-04-15T10:18:31.049 [DEBUG] [Thread-17176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:18:31.050 [DEBUG] [Thread-17176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:18:31.050 [DEBUG] [Thread-17176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:18:31.050 [DEBUG] [Thread-17176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:18:31.074 [INFO] [Thread-17176] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:18:31.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:18:31.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:18:31.883 [DEBUG] [Thread-17176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:18:31.883 [DEBUG] [Thread-17176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:18:31.934 [DEBUG] [Thread-17176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:18:31.934 [DEBUG] [Thread-17176] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:18:31.944 [DEBUG] [Thread-17176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:18:31.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:18:31.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')
2026-04-15T10:18:31.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
2026-04-15T10:18:31.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:18:31.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:18:31.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:18:31.981 [DEBUG] [Thread-17176] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:18:33.773 [DEBUG] [Thread-17178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:18:48.815 [DEBUG] [Thread-17179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:19:00.963 [DEBUG] [Thread-17180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:19:02.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:19:02.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:19:02.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:19:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 18, 29), 0.47763, 96.3891, 0.0, 14.4695, 10.2681, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:19:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:18:29
2026-04-15T10:19:03.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:19:03.845 [DEBUG] [Thread-17181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:19:04.082 [DEBUG] [Thread-17182] [transport.py] [_log()] starting thread (client mode): 0xee91f760
2026-04-15T10:19:04.083 [DEBUG] [Thread-17182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:19:04.099 [DEBUG] [Thread-17182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:19:04.099 [INFO] [Thread-17182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:19:04.101 [DEBUG] [Thread-17182] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:19:04.101 [DEBUG] [Thread-17182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:19:04.101 [DEBUG] [Thread-17182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:19:04.101 [DEBUG] [Thread-17182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:19:04.101 [DEBUG] [Thread-17182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:19:04.101 [DEBUG] [Thread-17182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:19:04.102 [DEBUG] [Thread-17182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:19:04.102 [DEBUG] [Thread-17182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:19:04.102 [DEBUG] [Thread-17182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:19:04.102 [DEBUG] [Thread-17182] [transport.py] [_log()] client lang: <none>
2026-04-15T10:19:04.102 [DEBUG] [Thread-17182] [transport.py] [_log()] server lang: <none>
2026-04-15T10:19:04.102 [DEBUG] [Thread-17182] [transport.py] [_log()] kex follows: False
2026-04-15T10:19:04.102 [DEBUG] [Thread-17182] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:19:04.102 [DEBUG] [Thread-17182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:19:04.102 [DEBUG] [Thread-17182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:19:04.102 [DEBUG] [Thread-17182] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:19:04.102 [DEBUG] [Thread-17182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:19:04.103 [DEBUG] [Thread-17182] [transport.py] [_log()] Compression: none
2026-04-15T10:19:04.103 [DEBUG] [Thread-17182] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:19:04.115 [DEBUG] [Thread-17182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:19:04.116 [DEBUG] [Thread-17182] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:19:04.116 [DEBUG] [Thread-17182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:19:04.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:19:04.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:19:04.117 [DEBUG] [Thread-17182] [transport.py] [_log()] userauth is OK
2026-04-15T10:19:04.117 [DEBUG] [Thread-17182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:19:04.117 [DEBUG] [Thread-17182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:19:04.117 [DEBUG] [Thread-17182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:19:04.118 [DEBUG] [Thread-17182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:19:04.133 [INFO] [Thread-17182] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:19:04.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:19:04.727 [DEBUG] [Thread-17182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:19:04.727 [DEBUG] [Thread-17182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:19:04.727 [DEBUG] [Thread-17182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:19:04.768 [DEBUG] [Thread-17182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:19:04.768 [DEBUG] [Thread-17182] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:19:04.771 [DEBUG] [Thread-17182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:19:04.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:19:04.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:19:04.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:19:04.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:19:04.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:19:04.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:19:04.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:19:04.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:19:04.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:19:04.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.346310 -999.00  +10.50  16.01     89   +8.90 1 2 1 3 1   888    0 2.16 33.83 ----- 16.0 16.0 292.8 22.1 16.4 -17.9 15.5 -16.0 14.5 -13.4 15.2 -14.9
2026-04-15T10:19:04.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:19:04.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:19:04.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.346310
2026-04-15T10:19:04.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:19:04.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:19:04.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:19:04.792 [DEBUG] [Thread-17182] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:19:04.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:19:04.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T10:19:04.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:18:29', tmtdew=0.47763, humidity=96.3891, cloud=0.0, wind=14.4695, temperature=10.2681, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:18:41.184', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:19:05.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:19:05.056 [DEBUG] [Thread-17185] [transport.py] [_log()] starting thread (client mode): 0xf13349d0
2026-04-15T10:19:05.056 [DEBUG] [Thread-17185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:19:05.070 [DEBUG] [Thread-17185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:19:05.070 [INFO] [Thread-17185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:19:05.077 [DEBUG] [Thread-17185] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:19:05.077 [DEBUG] [Thread-17185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:19:05.078 [DEBUG] [Thread-17185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:19:05.078 [DEBUG] [Thread-17185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:19:05.078 [DEBUG] [Thread-17185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:19:05.078 [DEBUG] [Thread-17185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:19:05.078 [DEBUG] [Thread-17185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:19:05.078 [DEBUG] [Thread-17185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:19:05.078 [DEBUG] [Thread-17185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:19:05.078 [DEBUG] [Thread-17185] [transport.py] [_log()] client lang: <none>
2026-04-15T10:19:05.078 [DEBUG] [Thread-17185] [transport.py] [_log()] server lang: <none>
2026-04-15T10:19:05.078 [DEBUG] [Thread-17185] [transport.py] [_log()] kex follows: False
2026-04-15T10:19:05.078 [DEBUG] [Thread-17185] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:19:05.078 [DEBUG] [Thread-17185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:19:05.079 [DEBUG] [Thread-17185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:19:05.079 [DEBUG] [Thread-17185] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:19:05.079 [DEBUG] [Thread-17185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:19:05.079 [DEBUG] [Thread-17185] [transport.py] [_log()] Compression: none
2026-04-15T10:19:05.079 [DEBUG] [Thread-17185] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:19:05.136 [DEBUG] [Thread-17185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:19:05.136 [DEBUG] [Thread-17185] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:19:05.137 [DEBUG] [Thread-17185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:19:05.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:19:05.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:19:05.193 [DEBUG] [Thread-17185] [transport.py] [_log()] userauth is OK
2026-04-15T10:19:05.193 [DEBUG] [Thread-17185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:19:05.193 [DEBUG] [Thread-17185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:19:05.194 [DEBUG] [Thread-17185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:19:05.194 [DEBUG] [Thread-17185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:19:05.219 [INFO] [Thread-17185] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:19:05.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:19:05.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:19:06.061 [DEBUG] [Thread-17185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:19:06.062 [DEBUG] [Thread-17185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:19:06.110 [DEBUG] [Thread-17185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:19:06.110 [DEBUG] [Thread-17185] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:19:06.120 [DEBUG] [Thread-17185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:19:06.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:19:06.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')
2026-04-15T10:19:06.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
2026-04-15T10:19:06.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:19:06.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:19:06.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:19:06.168 [DEBUG] [Thread-17185] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:19:18.874 [DEBUG] [Thread-17187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:19:28.202 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:19:28.203 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:19:33.919 [DEBUG] [Thread-17188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:19:36.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:19:36.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:19:36.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
2026-04-15T10:19:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 19, 5), 0.49651, 96.2732, 0.0, 17.3095, 10.318, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:19:37.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:19:05
2026-04-15T10:19:37.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:19:38.343 [DEBUG] [Thread-17189] [transport.py] [_log()] starting thread (client mode): 0xee925f30
2026-04-15T10:19:38.343 [DEBUG] [Thread-17189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:19:38.358 [DEBUG] [Thread-17189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:19:38.358 [INFO] [Thread-17189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:19:38.360 [DEBUG] [Thread-17189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:19:38.360 [DEBUG] [Thread-17189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:19:38.360 [DEBUG] [Thread-17189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:19:38.360 [DEBUG] [Thread-17189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:19:38.361 [DEBUG] [Thread-17189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:19:38.361 [DEBUG] [Thread-17189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:19:38.361 [DEBUG] [Thread-17189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:19:38.361 [DEBUG] [Thread-17189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:19:38.361 [DEBUG] [Thread-17189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:19:38.361 [DEBUG] [Thread-17189] [transport.py] [_log()] client lang: <none>
2026-04-15T10:19:38.361 [DEBUG] [Thread-17189] [transport.py] [_log()] server lang: <none>
2026-04-15T10:19:38.361 [DEBUG] [Thread-17189] [transport.py] [_log()] kex follows: False
2026-04-15T10:19:38.361 [DEBUG] [Thread-17189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:19:38.361 [DEBUG] [Thread-17189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:19:38.361 [DEBUG] [Thread-17189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:19:38.361 [DEBUG] [Thread-17189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:19:38.362 [DEBUG] [Thread-17189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:19:38.362 [DEBUG] [Thread-17189] [transport.py] [_log()] Compression: none
2026-04-15T10:19:38.362 [DEBUG] [Thread-17189] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:19:38.378 [DEBUG] [Thread-17189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:19:38.378 [DEBUG] [Thread-17189] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:19:38.379 [DEBUG] [Thread-17189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:19:38.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:19:38.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:19:38.380 [DEBUG] [Thread-17189] [transport.py] [_log()] userauth is OK
2026-04-15T10:19:38.380 [DEBUG] [Thread-17189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:19:38.381 [DEBUG] [Thread-17189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:19:38.381 [DEBUG] [Thread-17189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:19:38.381 [DEBUG] [Thread-17189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:19:38.397 [INFO] [Thread-17189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:19:38.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:19:39.006 [DEBUG] [Thread-17189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:19:39.006 [DEBUG] [Thread-17189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:19:39.007 [DEBUG] [Thread-17189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:19:39.047 [DEBUG] [Thread-17189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:19:39.047 [DEBUG] [Thread-17189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:19:39.050 [DEBUG] [Thread-17189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:19:39.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:19:39.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:19:39.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:19:39.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:19:39.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:19:39.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:19:39.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:19:39.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:19:39.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:19:39.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.346657 -999.00  +10.50  16.88     90   +8.90 1 2 1 3 1   888    0 2.21 34.91 ----- 16.9 16.9 305.2 20.9 16.4 -17.0 15.6 -15.3 14.6 -12.6 15.3 -14.1
2026-04-15T10:19:39.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:19:39.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:19:39.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.346657
2026-04-15T10:19:39.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:19:39.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:19:39.076 [DEBUG] [Thread-17189] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:19:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:19:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:19:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T10:19:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:19:05', tmtdew=0.49651, humidity=96.2732, cloud=0.0, wind=17.3095, temperature=10.318, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:19:11.165', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:19:39.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:19:39.332 [DEBUG] [Thread-17192] [transport.py] [_log()] starting thread (client mode): 0xf13ef880
2026-04-15T10:19:39.332 [DEBUG] [Thread-17192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:19:39.350 [DEBUG] [Thread-17192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:19:39.350 [INFO] [Thread-17192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:19:39.360 [DEBUG] [Thread-17192] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:19:39.360 [DEBUG] [Thread-17192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:19:39.360 [DEBUG] [Thread-17192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:19:39.360 [DEBUG] [Thread-17192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:19:39.360 [DEBUG] [Thread-17192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:19:39.360 [DEBUG] [Thread-17192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:19:39.360 [DEBUG] [Thread-17192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:19:39.360 [DEBUG] [Thread-17192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:19:39.360 [DEBUG] [Thread-17192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:19:39.360 [DEBUG] [Thread-17192] [transport.py] [_log()] client lang: <none>
2026-04-15T10:19:39.361 [DEBUG] [Thread-17192] [transport.py] [_log()] server lang: <none>
2026-04-15T10:19:39.361 [DEBUG] [Thread-17192] [transport.py] [_log()] kex follows: False
2026-04-15T10:19:39.361 [DEBUG] [Thread-17192] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:19:39.361 [DEBUG] [Thread-17192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:19:39.361 [DEBUG] [Thread-17192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:19:39.361 [DEBUG] [Thread-17192] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:19:39.361 [DEBUG] [Thread-17192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:19:39.361 [DEBUG] [Thread-17192] [transport.py] [_log()] Compression: none
2026-04-15T10:19:39.361 [DEBUG] [Thread-17192] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:19:39.421 [DEBUG] [Thread-17192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:19:39.422 [DEBUG] [Thread-17192] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:19:39.422 [DEBUG] [Thread-17192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:19:39.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:19:39.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:19:39.484 [DEBUG] [Thread-17192] [transport.py] [_log()] userauth is OK
2026-04-15T10:19:39.485 [DEBUG] [Thread-17192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:19:39.485 [DEBUG] [Thread-17192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:19:39.486 [DEBUG] [Thread-17192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:19:39.486 [DEBUG] [Thread-17192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:19:39.514 [INFO] [Thread-17192] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:19:39.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:19:39.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:19:40.388 [DEBUG] [Thread-17192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:19:40.388 [DEBUG] [Thread-17192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:19:40.436 [DEBUG] [Thread-17192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:19:40.436 [DEBUG] [Thread-17192] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:19:40.447 [DEBUG] [Thread-17192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:19:40.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:19:40.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T10:19:40.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') -> 00000000
2026-04-15T10:19:40.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:19:40.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:19:40.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:19:40.484 [DEBUG] [Thread-17192] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:19:48.954 [DEBUG] [Thread-17194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:20:01.088 [DEBUG] [Thread-17195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:20:03.998 [DEBUG] [Thread-17196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:20:10.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:20:10.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:20:10.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
2026-04-15T10:20:11.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 19, 40), 1.11195, 92.7834, 0.0, 20.0779, 10.8715, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:20:11.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:19:40
2026-04-15T10:20:12.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:20:12.720 [DEBUG] [Thread-17197] [transport.py] [_log()] starting thread (client mode): 0xf1336bf0
2026-04-15T10:20:12.720 [DEBUG] [Thread-17197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:20:12.740 [DEBUG] [Thread-17197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:20:12.740 [INFO] [Thread-17197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:20:12.743 [DEBUG] [Thread-17197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:20:12.744 [DEBUG] [Thread-17197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:20:12.744 [DEBUG] [Thread-17197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:20:12.744 [DEBUG] [Thread-17197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:20:12.744 [DEBUG] [Thread-17197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:20:12.744 [DEBUG] [Thread-17197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:20:12.744 [DEBUG] [Thread-17197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:20:12.744 [DEBUG] [Thread-17197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:20:12.744 [DEBUG] [Thread-17197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:20:12.744 [DEBUG] [Thread-17197] [transport.py] [_log()] client lang: <none>
2026-04-15T10:20:12.744 [DEBUG] [Thread-17197] [transport.py] [_log()] server lang: <none>
2026-04-15T10:20:12.745 [DEBUG] [Thread-17197] [transport.py] [_log()] kex follows: False
2026-04-15T10:20:12.745 [DEBUG] [Thread-17197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:20:12.745 [DEBUG] [Thread-17197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:20:12.745 [DEBUG] [Thread-17197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:20:12.745 [DEBUG] [Thread-17197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:20:12.745 [DEBUG] [Thread-17197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:20:12.745 [DEBUG] [Thread-17197] [transport.py] [_log()] Compression: none
2026-04-15T10:20:12.745 [DEBUG] [Thread-17197] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:20:12.762 [DEBUG] [Thread-17197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:20:12.762 [DEBUG] [Thread-17197] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:20:12.762 [DEBUG] [Thread-17197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:20:12.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:20:12.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:20:12.763 [DEBUG] [Thread-17197] [transport.py] [_log()] userauth is OK
2026-04-15T10:20:12.764 [DEBUG] [Thread-17197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:20:12.764 [DEBUG] [Thread-17197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:20:12.764 [DEBUG] [Thread-17197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:20:12.764 [DEBUG] [Thread-17197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:20:12.787 [INFO] [Thread-17197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:20:12.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:20:13.392 [DEBUG] [Thread-17197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:20:13.393 [DEBUG] [Thread-17197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:20:13.393 [DEBUG] [Thread-17197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:20:13.433 [DEBUG] [Thread-17197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:20:13.433 [DEBUG] [Thread-17197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:20:13.436 [DEBUG] [Thread-17197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:20:13.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:20:13.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:20:13.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:20:13.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:20:13.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:20:13.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:20:13.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:20:13.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:20:13.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:20:13.508 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-15T10:20:13.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:19:40', tmtdew=1.11195, humidity=92.7834, cloud=0.0, wind=20.0779, temperature=10.8715, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:20:13.510 [DEBUG] [Thread-17197] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:20:13.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:20:13.766 [DEBUG] [Thread-17200] [transport.py] [_log()] starting thread (client mode): 0xf13ed330
2026-04-15T10:20:13.766 [DEBUG] [Thread-17200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:20:13.780 [DEBUG] [Thread-17200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:20:13.780 [INFO] [Thread-17200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:20:13.787 [DEBUG] [Thread-17200] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:20:13.787 [DEBUG] [Thread-17200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:20:13.787 [DEBUG] [Thread-17200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:20:13.787 [DEBUG] [Thread-17200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:20:13.787 [DEBUG] [Thread-17200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:20:13.787 [DEBUG] [Thread-17200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:20:13.788 [DEBUG] [Thread-17200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:20:13.788 [DEBUG] [Thread-17200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:20:13.788 [DEBUG] [Thread-17200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:20:13.788 [DEBUG] [Thread-17200] [transport.py] [_log()] client lang: <none>
2026-04-15T10:20:13.788 [DEBUG] [Thread-17200] [transport.py] [_log()] server lang: <none>
2026-04-15T10:20:13.788 [DEBUG] [Thread-17200] [transport.py] [_log()] kex follows: False
2026-04-15T10:20:13.788 [DEBUG] [Thread-17200] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:20:13.788 [DEBUG] [Thread-17200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:20:13.788 [DEBUG] [Thread-17200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:20:13.788 [DEBUG] [Thread-17200] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:20:13.788 [DEBUG] [Thread-17200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:20:13.788 [DEBUG] [Thread-17200] [transport.py] [_log()] Compression: none
2026-04-15T10:20:13.789 [DEBUG] [Thread-17200] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:20:13.843 [DEBUG] [Thread-17200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:20:13.844 [DEBUG] [Thread-17200] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:20:13.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:20:13.844 [DEBUG] [Thread-17200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:20:13.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:20:13.900 [DEBUG] [Thread-17200] [transport.py] [_log()] userauth is OK
2026-04-15T10:20:13.901 [DEBUG] [Thread-17200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:20:13.901 [DEBUG] [Thread-17200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:20:13.901 [DEBUG] [Thread-17200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:20:13.901 [DEBUG] [Thread-17200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:20:13.925 [INFO] [Thread-17200] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:20:13.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:20:13.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:20:14.750 [DEBUG] [Thread-17200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:20:14.751 [DEBUG] [Thread-17200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:20:14.798 [DEBUG] [Thread-17200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:20:14.798 [DEBUG] [Thread-17200] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:20:14.807 [DEBUG] [Thread-17200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:20:14.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:20:14.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')
2026-04-15T10:20:14.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') -> 00000000
2026-04-15T10:20:14.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:20:14.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:20:14.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:20:14.850 [DEBUG] [Thread-17200] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:20:19.030 [DEBUG] [Thread-17202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:20:28.343 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:20:28.344 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:20:34.074 [DEBUG] [Thread-17203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:20:44.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:20:44.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:20:44.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
2026-04-15T10:20:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 20, 15), 0.62954, 95.7418, 0.0, 16.5686, 10.019, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:20:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:20:15
2026-04-15T10:20:46.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:20:46.940 [DEBUG] [Thread-17204] [transport.py] [_log()] starting thread (client mode): 0xf13ee470
2026-04-15T10:20:46.941 [DEBUG] [Thread-17204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:20:46.953 [DEBUG] [Thread-17204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:20:46.953 [INFO] [Thread-17204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:20:46.956 [DEBUG] [Thread-17204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:20:46.956 [DEBUG] [Thread-17204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:20:46.956 [DEBUG] [Thread-17204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:20:46.956 [DEBUG] [Thread-17204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:20:46.956 [DEBUG] [Thread-17204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:20:46.956 [DEBUG] [Thread-17204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:20:46.956 [DEBUG] [Thread-17204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:20:46.956 [DEBUG] [Thread-17204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:20:46.956 [DEBUG] [Thread-17204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:20:46.956 [DEBUG] [Thread-17204] [transport.py] [_log()] client lang: <none>
2026-04-15T10:20:46.957 [DEBUG] [Thread-17204] [transport.py] [_log()] server lang: <none>
2026-04-15T10:20:46.957 [DEBUG] [Thread-17204] [transport.py] [_log()] kex follows: False
2026-04-15T10:20:46.957 [DEBUG] [Thread-17204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:20:46.957 [DEBUG] [Thread-17204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:20:46.957 [DEBUG] [Thread-17204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:20:46.957 [DEBUG] [Thread-17204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:20:46.957 [DEBUG] [Thread-17204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:20:46.957 [DEBUG] [Thread-17204] [transport.py] [_log()] Compression: none
2026-04-15T10:20:46.957 [DEBUG] [Thread-17204] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:20:46.972 [DEBUG] [Thread-17204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:20:46.973 [DEBUG] [Thread-17204] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:20:46.973 [DEBUG] [Thread-17204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:20:46.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:20:46.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:20:46.974 [DEBUG] [Thread-17204] [transport.py] [_log()] userauth is OK
2026-04-15T10:20:46.974 [DEBUG] [Thread-17204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:20:46.974 [DEBUG] [Thread-17204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:20:46.975 [DEBUG] [Thread-17204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:20:46.975 [DEBUG] [Thread-17204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:20:47.008 [INFO] [Thread-17204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:20:47.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:20:47.588 [DEBUG] [Thread-17204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:20:47.589 [DEBUG] [Thread-17204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:20:47.589 [DEBUG] [Thread-17204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:20:47.629 [DEBUG] [Thread-17204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:20:47.629 [DEBUG] [Thread-17204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:20:47.631 [DEBUG] [Thread-17204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:20:47.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:20:47.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:20:47.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:20:47.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:20:47.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:20:47.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:20:47.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:20:47.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:20:47.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:20:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.347699 -999.00  +10.70  10.25     90   +9.10 1 2 1 3 1   888    0 2.37 39.06 ----- 10.2 10.2 295.8 16.5 16.8 -15.8 15.9 -14.7 14.8 -12.4 15.6 -11.9
2026-04-15T10:20:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:20:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:20:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.347699
2026-04-15T10:20:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:20:47.658 [DEBUG] [Thread-17204] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:20:47.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:20:47.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:20:47.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:20:47.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T10:20:47.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:20:15', tmtdew=0.62954, humidity=95.7418, cloud=0.0, wind=16.5686, temperature=10.019, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:20:41.194', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:20:47.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:20:47.907 [DEBUG] [Thread-17207] [transport.py] [_log()] starting thread (client mode): 0xf13ef070
2026-04-15T10:20:47.908 [DEBUG] [Thread-17207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:20:47.921 [DEBUG] [Thread-17207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:20:47.921 [INFO] [Thread-17207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:20:47.929 [DEBUG] [Thread-17207] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:20:47.929 [DEBUG] [Thread-17207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:20:47.929 [DEBUG] [Thread-17207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:20:47.929 [DEBUG] [Thread-17207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:20:47.929 [DEBUG] [Thread-17207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:20:47.929 [DEBUG] [Thread-17207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:20:47.929 [DEBUG] [Thread-17207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:20:47.929 [DEBUG] [Thread-17207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:20:47.929 [DEBUG] [Thread-17207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:20:47.929 [DEBUG] [Thread-17207] [transport.py] [_log()] client lang: <none>
2026-04-15T10:20:47.929 [DEBUG] [Thread-17207] [transport.py] [_log()] server lang: <none>
2026-04-15T10:20:47.930 [DEBUG] [Thread-17207] [transport.py] [_log()] kex follows: False
2026-04-15T10:20:47.930 [DEBUG] [Thread-17207] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:20:47.930 [DEBUG] [Thread-17207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:20:47.930 [DEBUG] [Thread-17207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:20:47.930 [DEBUG] [Thread-17207] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:20:47.930 [DEBUG] [Thread-17207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:20:47.930 [DEBUG] [Thread-17207] [transport.py] [_log()] Compression: none
2026-04-15T10:20:47.930 [DEBUG] [Thread-17207] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:20:47.989 [DEBUG] [Thread-17207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:20:47.989 [DEBUG] [Thread-17207] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:20:47.990 [DEBUG] [Thread-17207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:20:47.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:20:47.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:20:48.045 [DEBUG] [Thread-17207] [transport.py] [_log()] userauth is OK
2026-04-15T10:20:48.045 [DEBUG] [Thread-17207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:20:48.045 [DEBUG] [Thread-17207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:20:48.045 [DEBUG] [Thread-17207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:20:48.045 [DEBUG] [Thread-17207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:20:48.071 [INFO] [Thread-17207] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:20:48.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:20:48.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:20:48.882 [DEBUG] [Thread-17207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:20:48.882 [DEBUG] [Thread-17207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:20:48.930 [DEBUG] [Thread-17207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:20:48.930 [DEBUG] [Thread-17207] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:20:48.939 [DEBUG] [Thread-17207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:20:48.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:20:48.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')
2026-04-15T10:20:48.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
2026-04-15T10:20:48.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:20:48.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:20:48.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:20:48.974 [DEBUG] [Thread-17207] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:20:49.103 [DEBUG] [Thread-17209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:21:01.193 [DEBUG] [Thread-17210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:21:04.145 [DEBUG] [Thread-17211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:21:18.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:21:18.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:21:18.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
2026-04-15T10:21:19.175 [DEBUG] [Thread-17212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:21:20.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 20, 50), 1.16948, 92.4173, 0.0, 17.1497, 10.7048, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:21:20.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:20:50
2026-04-15T10:21:20.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:21:21.076 [DEBUG] [Thread-17213] [transport.py] [_log()] starting thread (client mode): 0xee91efe0
2026-04-15T10:21:21.076 [DEBUG] [Thread-17213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:21:21.096 [DEBUG] [Thread-17213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:21:21.097 [INFO] [Thread-17213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:21:21.098 [DEBUG] [Thread-17213] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:21:21.098 [DEBUG] [Thread-17213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:21:21.098 [DEBUG] [Thread-17213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:21:21.098 [DEBUG] [Thread-17213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:21:21.098 [DEBUG] [Thread-17213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:21:21.098 [DEBUG] [Thread-17213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:21:21.098 [DEBUG] [Thread-17213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:21:21.099 [DEBUG] [Thread-17213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:21:21.099 [DEBUG] [Thread-17213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:21:21.099 [DEBUG] [Thread-17213] [transport.py] [_log()] client lang: <none>
2026-04-15T10:21:21.099 [DEBUG] [Thread-17213] [transport.py] [_log()] server lang: <none>
2026-04-15T10:21:21.099 [DEBUG] [Thread-17213] [transport.py] [_log()] kex follows: False
2026-04-15T10:21:21.099 [DEBUG] [Thread-17213] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:21:21.099 [DEBUG] [Thread-17213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:21:21.099 [DEBUG] [Thread-17213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:21:21.099 [DEBUG] [Thread-17213] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:21:21.099 [DEBUG] [Thread-17213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:21:21.099 [DEBUG] [Thread-17213] [transport.py] [_log()] Compression: none
2026-04-15T10:21:21.100 [DEBUG] [Thread-17213] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:21:21.108 [DEBUG] [Thread-17213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:21:21.109 [DEBUG] [Thread-17213] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:21:21.109 [DEBUG] [Thread-17213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:21:21.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:21:21.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:21:21.110 [DEBUG] [Thread-17213] [transport.py] [_log()] userauth is OK
2026-04-15T10:21:21.110 [DEBUG] [Thread-17213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:21:21.111 [DEBUG] [Thread-17213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:21:21.111 [DEBUG] [Thread-17213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:21:21.111 [DEBUG] [Thread-17213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:21:21.128 [INFO] [Thread-17213] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:21:21.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:21:21.882 [DEBUG] [Thread-17213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:21:21.882 [DEBUG] [Thread-17213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:21:21.883 [DEBUG] [Thread-17213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:21:21.923 [DEBUG] [Thread-17213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:21:21.923 [DEBUG] [Thread-17213] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:21:21.926 [DEBUG] [Thread-17213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:21:21.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:21:21.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:21:21.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:21:21.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:21:21.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:21:21.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:21:21.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:21:21.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:21:21.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:21:21.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.347699 -999.00  +10.70  10.25     90   +9.10 1 2 1 3 1   888    0 2.37 39.06 ----- 10.2 10.2 295.8 16.5 16.8 -15.8 15.9 -14.7 14.8 -12.4 15.6 -11.9
2026-04-15T10:21:21.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:21:21.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:21:21.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.347699
2026-04-15T10:21:21.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:21:21.942 [DEBUG] [Thread-17213] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:21:21.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:21:21.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:21:21.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:21:21.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T10:21:21.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:20:50', tmtdew=1.16948, humidity=92.4173, cloud=0.0, wind=17.1497, temperature=10.7048, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:20:41.194', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:21:22.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:21:22.197 [DEBUG] [Thread-17216] [transport.py] [_log()] starting thread (client mode): 0xf13ec100
2026-04-15T10:21:22.197 [DEBUG] [Thread-17216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:21:22.211 [DEBUG] [Thread-17216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:21:22.211 [INFO] [Thread-17216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:21:22.218 [DEBUG] [Thread-17216] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:21:22.218 [DEBUG] [Thread-17216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:21:22.218 [DEBUG] [Thread-17216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:21:22.218 [DEBUG] [Thread-17216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:21:22.218 [DEBUG] [Thread-17216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:21:22.218 [DEBUG] [Thread-17216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:21:22.219 [DEBUG] [Thread-17216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:21:22.219 [DEBUG] [Thread-17216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:21:22.219 [DEBUG] [Thread-17216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:21:22.219 [DEBUG] [Thread-17216] [transport.py] [_log()] client lang: <none>
2026-04-15T10:21:22.219 [DEBUG] [Thread-17216] [transport.py] [_log()] server lang: <none>
2026-04-15T10:21:22.219 [DEBUG] [Thread-17216] [transport.py] [_log()] kex follows: False
2026-04-15T10:21:22.219 [DEBUG] [Thread-17216] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:21:22.219 [DEBUG] [Thread-17216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:21:22.219 [DEBUG] [Thread-17216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:21:22.219 [DEBUG] [Thread-17216] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:21:22.219 [DEBUG] [Thread-17216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:21:22.219 [DEBUG] [Thread-17216] [transport.py] [_log()] Compression: none
2026-04-15T10:21:22.220 [DEBUG] [Thread-17216] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:21:22.276 [DEBUG] [Thread-17216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:21:22.277 [DEBUG] [Thread-17216] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:21:22.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:21:22.277 [DEBUG] [Thread-17216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:21:22.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:21:22.333 [DEBUG] [Thread-17216] [transport.py] [_log()] userauth is OK
2026-04-15T10:21:22.334 [DEBUG] [Thread-17216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:21:22.334 [DEBUG] [Thread-17216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:21:22.334 [DEBUG] [Thread-17216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:21:22.334 [DEBUG] [Thread-17216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:21:22.359 [INFO] [Thread-17216] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:21:22.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:21:22.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:21:23.219 [DEBUG] [Thread-17216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:21:23.220 [DEBUG] [Thread-17216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:21:23.267 [DEBUG] [Thread-17216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:21:23.267 [DEBUG] [Thread-17216] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:21:23.276 [DEBUG] [Thread-17216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:21:23.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:21:23.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')
2026-04-15T10:21:23.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
2026-04-15T10:21:23.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:21:23.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:21:23.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:21:23.314 [DEBUG] [Thread-17216] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:21:28.482 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:21:28.483 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:21:34.206 [DEBUG] [Thread-17218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:21:49.243 [DEBUG] [Thread-17219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:21:53.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:21:53.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:21: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
2026-04-15T10:21:54.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 21, 26), 0.635315, 95.7085, 0.0, 12.3167, 10.1687, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:21:54.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:21:26
2026-04-15T10:21:54.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:21:55.386 [DEBUG] [Thread-17220] [transport.py] [_log()] starting thread (client mode): 0xee91e470
2026-04-15T10:21:55.386 [DEBUG] [Thread-17220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:21:55.397 [DEBUG] [Thread-17220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:21:55.397 [INFO] [Thread-17220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:21:55.399 [DEBUG] [Thread-17220] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:21:55.399 [DEBUG] [Thread-17220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:21:55.399 [DEBUG] [Thread-17220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:21:55.399 [DEBUG] [Thread-17220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:21:55.400 [DEBUG] [Thread-17220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:21:55.400 [DEBUG] [Thread-17220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:21:55.400 [DEBUG] [Thread-17220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:21:55.400 [DEBUG] [Thread-17220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:21:55.400 [DEBUG] [Thread-17220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:21:55.400 [DEBUG] [Thread-17220] [transport.py] [_log()] client lang: <none>
2026-04-15T10:21:55.400 [DEBUG] [Thread-17220] [transport.py] [_log()] server lang: <none>
2026-04-15T10:21:55.400 [DEBUG] [Thread-17220] [transport.py] [_log()] kex follows: False
2026-04-15T10:21:55.400 [DEBUG] [Thread-17220] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:21:55.400 [DEBUG] [Thread-17220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:21:55.400 [DEBUG] [Thread-17220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:21:55.400 [DEBUG] [Thread-17220] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:21:55.400 [DEBUG] [Thread-17220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:21:55.401 [DEBUG] [Thread-17220] [transport.py] [_log()] Compression: none
2026-04-15T10:21:55.401 [DEBUG] [Thread-17220] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:21:55.412 [DEBUG] [Thread-17220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:21:55.412 [DEBUG] [Thread-17220] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:21:55.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:21:55.413 [DEBUG] [Thread-17220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:21:55.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:21:55.414 [DEBUG] [Thread-17220] [transport.py] [_log()] userauth is OK
2026-04-15T10:21:55.414 [DEBUG] [Thread-17220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:21:55.414 [DEBUG] [Thread-17220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:21:55.414 [DEBUG] [Thread-17220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:21:55.414 [DEBUG] [Thread-17220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:21:55.430 [INFO] [Thread-17220] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:21:55.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:21:56.037 [DEBUG] [Thread-17220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:21:56.038 [DEBUG] [Thread-17220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:21:56.038 [DEBUG] [Thread-17220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:21:56.078 [DEBUG] [Thread-17220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:21:56.078 [DEBUG] [Thread-17220] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:21:56.081 [DEBUG] [Thread-17220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:21:56.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:21:56.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:21:56.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:21:56.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:21:56.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:21:56.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:21:56.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:21:56.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:21:56.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:21:56.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.348393 -999.00  +10.80  15.23     88   +9.00 1 2 1 3 1   888    0 2.26 34.89 ----- 15.2 15.2 279.6 19.7 17.1 -14.9 16.2 -13.8 15.0 -14.2 15.9 -10.0
2026-04-15T10:21:56.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:21:56.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:21:56.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.348393
2026-04-15T10:21:56.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:21:56.115 [DEBUG] [Thread-17220] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:21:56.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:21:56.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:21:56.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:21:56.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T10:21:56.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:21:26', tmtdew=0.635315, humidity=95.7085, cloud=0.0, wind=12.3167, temperature=10.1687, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:21:41.155', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:21:56.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:21:56.382 [DEBUG] [Thread-17223] [transport.py] [_log()] starting thread (client mode): 0xee91c940
2026-04-15T10:21:56.382 [DEBUG] [Thread-17223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:21:56.396 [DEBUG] [Thread-17223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:21:56.396 [INFO] [Thread-17223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:21:56.403 [DEBUG] [Thread-17223] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] client lang: <none>
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] server lang: <none>
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] kex follows: False
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:21:56.404 [DEBUG] [Thread-17223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:21:56.405 [DEBUG] [Thread-17223] [transport.py] [_log()] Compression: none
2026-04-15T10:21:56.405 [DEBUG] [Thread-17223] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:21:56.464 [DEBUG] [Thread-17223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:21:56.465 [DEBUG] [Thread-17223] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:21:56.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:21:56.466 [DEBUG] [Thread-17223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:21:56.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:21:56.522 [DEBUG] [Thread-17223] [transport.py] [_log()] userauth is OK
2026-04-15T10:21:56.523 [DEBUG] [Thread-17223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:21:56.523 [DEBUG] [Thread-17223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:21:56.523 [DEBUG] [Thread-17223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:21:56.523 [DEBUG] [Thread-17223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:21:56.551 [INFO] [Thread-17223] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:21:56.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:21:56.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:21:57.371 [DEBUG] [Thread-17223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:21:57.372 [DEBUG] [Thread-17223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:21:57.419 [DEBUG] [Thread-17223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:21:57.419 [DEBUG] [Thread-17223] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:21:57.428 [DEBUG] [Thread-17223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:21:57.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:21:57.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')
2026-04-15T10:21: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
2026-04-15T10:21:57.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:21:57.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:21:57.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:21:57.463 [DEBUG] [Thread-17223] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:22:01.315 [DEBUG] [Thread-17225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:22:04.275 [DEBUG] [Thread-17226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:22:19.321 [DEBUG] [Thread-17227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:22:27.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:22:27.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:22:27.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
2026-04-15T10:22:28.622 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:22:28.623 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:22:28.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 22, 2), 0.635315, 95.7085, 0.0, 12.2638, 10.1687, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:22:28.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:22:02
2026-04-15T10:22:29.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:22:29.680 [DEBUG] [Thread-17228] [transport.py] [_log()] starting thread (client mode): 0xf1334400
2026-04-15T10:22:29.680 [DEBUG] [Thread-17228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:22:29.700 [DEBUG] [Thread-17228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:22:29.700 [INFO] [Thread-17228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:22:29.703 [DEBUG] [Thread-17228] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:22:29.703 [DEBUG] [Thread-17228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:22:29.703 [DEBUG] [Thread-17228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:22:29.703 [DEBUG] [Thread-17228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:22:29.703 [DEBUG] [Thread-17228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:22:29.703 [DEBUG] [Thread-17228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:22:29.703 [DEBUG] [Thread-17228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:22:29.703 [DEBUG] [Thread-17228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:22:29.703 [DEBUG] [Thread-17228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:22:29.703 [DEBUG] [Thread-17228] [transport.py] [_log()] client lang: <none>
2026-04-15T10:22:29.703 [DEBUG] [Thread-17228] [transport.py] [_log()] server lang: <none>
2026-04-15T10:22:29.704 [DEBUG] [Thread-17228] [transport.py] [_log()] kex follows: False
2026-04-15T10:22:29.704 [DEBUG] [Thread-17228] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:22:29.704 [DEBUG] [Thread-17228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:22:29.704 [DEBUG] [Thread-17228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:22:29.704 [DEBUG] [Thread-17228] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:22:29.704 [DEBUG] [Thread-17228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:22:29.704 [DEBUG] [Thread-17228] [transport.py] [_log()] Compression: none
2026-04-15T10:22:29.704 [DEBUG] [Thread-17228] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:22:29.723 [DEBUG] [Thread-17228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:22:29.724 [DEBUG] [Thread-17228] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:22:29.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:22:29.724 [DEBUG] [Thread-17228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:22:29.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:22:29.725 [DEBUG] [Thread-17228] [transport.py] [_log()] userauth is OK
2026-04-15T10:22:29.725 [DEBUG] [Thread-17228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:22:29.726 [DEBUG] [Thread-17228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:22:29.726 [DEBUG] [Thread-17228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:22:29.726 [DEBUG] [Thread-17228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:22:29.744 [INFO] [Thread-17228] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:22:29.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:22:30.349 [DEBUG] [Thread-17228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:22:30.350 [DEBUG] [Thread-17228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:22:30.350 [DEBUG] [Thread-17228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:22:30.391 [DEBUG] [Thread-17228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:22:30.391 [DEBUG] [Thread-17228] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:22:30.393 [DEBUG] [Thread-17228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:22:30.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:22:30.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:22:30.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:22:30.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:22:30.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:22:30.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:22:30.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:22:30.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:22:30.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:22:30.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.348740 -999.00  +10.80  14.84     89   +9.10 1 2 1 3 1   888    0 2.40 38.26 ----- 14.8 14.8 287.2 17.9 17.2 -13.2 16.3 -12.7 14.9 -9.0 16.0 -8.2
2026-04-15T10:22:30.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:22:30.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:22:30.418 [DEBUG] [Thread-17228] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:22:30.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.348740
2026-04-15T10:22:30.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:22:30.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:22:30.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:22:30.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:22:30.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T10:22:30.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:22:02', tmtdew=0.635315, humidity=95.7085, cloud=0.0, wind=12.2638, temperature=10.1687, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:22:11.136', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:22:30.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:22:30.675 [DEBUG] [Thread-17231] [transport.py] [_log()] starting thread (client mode): 0xf13ee6b0
2026-04-15T10:22:30.675 [DEBUG] [Thread-17231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:22:30.690 [DEBUG] [Thread-17231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:22:30.690 [INFO] [Thread-17231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:22:30.697 [DEBUG] [Thread-17231] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:22:30.697 [DEBUG] [Thread-17231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:22:30.697 [DEBUG] [Thread-17231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:22:30.697 [DEBUG] [Thread-17231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:22:30.697 [DEBUG] [Thread-17231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:22:30.697 [DEBUG] [Thread-17231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:22:30.698 [DEBUG] [Thread-17231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:22:30.698 [DEBUG] [Thread-17231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:22:30.698 [DEBUG] [Thread-17231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:22:30.698 [DEBUG] [Thread-17231] [transport.py] [_log()] client lang: <none>
2026-04-15T10:22:30.698 [DEBUG] [Thread-17231] [transport.py] [_log()] server lang: <none>
2026-04-15T10:22:30.698 [DEBUG] [Thread-17231] [transport.py] [_log()] kex follows: False
2026-04-15T10:22:30.698 [DEBUG] [Thread-17231] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:22:30.698 [DEBUG] [Thread-17231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:22:30.698 [DEBUG] [Thread-17231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:22:30.698 [DEBUG] [Thread-17231] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:22:30.698 [DEBUG] [Thread-17231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:22:30.699 [DEBUG] [Thread-17231] [transport.py] [_log()] Compression: none
2026-04-15T10:22:30.699 [DEBUG] [Thread-17231] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:22:30.754 [DEBUG] [Thread-17231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:22:30.755 [DEBUG] [Thread-17231] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:22:30.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:22:30.756 [DEBUG] [Thread-17231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:22:30.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:22:30.811 [DEBUG] [Thread-17231] [transport.py] [_log()] userauth is OK
2026-04-15T10:22:30.811 [DEBUG] [Thread-17231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:22:30.811 [DEBUG] [Thread-17231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:22:30.811 [DEBUG] [Thread-17231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:22:30.812 [DEBUG] [Thread-17231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:22:30.836 [INFO] [Thread-17231] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:22:30.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:22:30.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:22:31.667 [DEBUG] [Thread-17231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:22:31.667 [DEBUG] [Thread-17231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:22:31.715 [DEBUG] [Thread-17231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:22:31.715 [DEBUG] [Thread-17231] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:22:31.724 [DEBUG] [Thread-17231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:22:31.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:22:31.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')
2026-04-15T10:22:31.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
2026-04-15T10:22:31.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:22:31.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:22:31.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:22:31.759 [DEBUG] [Thread-17231] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:22:34.350 [DEBUG] [Thread-17233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:22:49.387 [DEBUG] [Thread-17234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:23:01.427 [DEBUG] [Thread-17235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:23:01.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:23:01.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:23:01.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
2026-04-15T10:23:03.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 22, 37), 1.15642, 92.5156, 0.0, 16.7263, 11.0358, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:23:03.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:22:37
2026-04-15T10:23:03.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:23:03.855 [DEBUG] [Thread-17236] [transport.py] [_log()] starting thread (client mode): 0xee91f1f0
2026-04-15T10:23:03.855 [DEBUG] [Thread-17236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:23:03.874 [DEBUG] [Thread-17236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:23:03.874 [INFO] [Thread-17236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:23:03.877 [DEBUG] [Thread-17236] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:23:03.877 [DEBUG] [Thread-17236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:23:03.877 [DEBUG] [Thread-17236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:23:03.878 [DEBUG] [Thread-17236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:23:03.878 [DEBUG] [Thread-17236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:23:03.878 [DEBUG] [Thread-17236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:23:03.878 [DEBUG] [Thread-17236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:23:03.878 [DEBUG] [Thread-17236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:23:03.878 [DEBUG] [Thread-17236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:23:03.878 [DEBUG] [Thread-17236] [transport.py] [_log()] client lang: <none>
2026-04-15T10:23:03.878 [DEBUG] [Thread-17236] [transport.py] [_log()] server lang: <none>
2026-04-15T10:23:03.878 [DEBUG] [Thread-17236] [transport.py] [_log()] kex follows: False
2026-04-15T10:23:03.878 [DEBUG] [Thread-17236] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:23:03.878 [DEBUG] [Thread-17236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:23:03.878 [DEBUG] [Thread-17236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:23:03.879 [DEBUG] [Thread-17236] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:23:03.879 [DEBUG] [Thread-17236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:23:03.879 [DEBUG] [Thread-17236] [transport.py] [_log()] Compression: none
2026-04-15T10:23:03.879 [DEBUG] [Thread-17236] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:23:03.895 [DEBUG] [Thread-17236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:23:03.896 [DEBUG] [Thread-17236] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:23:03.896 [DEBUG] [Thread-17236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:23:03.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:23:03.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:23:03.897 [DEBUG] [Thread-17236] [transport.py] [_log()] userauth is OK
2026-04-15T10:23:03.897 [DEBUG] [Thread-17236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:23:03.897 [DEBUG] [Thread-17236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:23:03.897 [DEBUG] [Thread-17236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:23:03.898 [DEBUG] [Thread-17236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:23:03.922 [INFO] [Thread-17236] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:23:03.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:23:04.417 [DEBUG] [Thread-17238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:23:04.513 [DEBUG] [Thread-17236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:23:04.513 [DEBUG] [Thread-17236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:23:04.513 [DEBUG] [Thread-17236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:23:04.554 [DEBUG] [Thread-17236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:23:04.554 [DEBUG] [Thread-17236] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:23:04.556 [DEBUG] [Thread-17236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:23:04.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:23:04.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:23:04.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:23:04.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:23:04.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:23:04.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:23:04.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:23:04.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:23:04.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:23:04.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.349088 -999.00  +10.70  12.59     89   +9.00 1 3 1 3 1   888    0 2.39 39.21 ----- 12.6 12.6 296.3 16.4 17.1 -11.3 16.2 -10.5 15.0 -7.8 15.8 -6.8
2026-04-15T10:23:04.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:23:04.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:23:04.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.349088
2026-04-15T10:23:04.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:23:04.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:23:04.584 [DEBUG] [Thread-17236] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:23:04.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:23:04.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:23:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:23:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:22:37', tmtdew=1.15642, humidity=92.5156, cloud=0.0, wind=16.7263, temperature=11.0358, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:22:41.203', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:23:04.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:23:04.858 [DEBUG] [Thread-17240] [transport.py] [_log()] starting thread (client mode): 0xf1336e00
2026-04-15T10:23:04.858 [DEBUG] [Thread-17240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:23:04.873 [DEBUG] [Thread-17240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:23:04.873 [INFO] [Thread-17240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:23:04.880 [DEBUG] [Thread-17240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:23:04.880 [DEBUG] [Thread-17240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:23:04.880 [DEBUG] [Thread-17240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:23:04.880 [DEBUG] [Thread-17240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:23:04.881 [DEBUG] [Thread-17240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:23:04.881 [DEBUG] [Thread-17240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:23:04.881 [DEBUG] [Thread-17240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:23:04.881 [DEBUG] [Thread-17240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:23:04.881 [DEBUG] [Thread-17240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:23:04.881 [DEBUG] [Thread-17240] [transport.py] [_log()] client lang: <none>
2026-04-15T10:23:04.881 [DEBUG] [Thread-17240] [transport.py] [_log()] server lang: <none>
2026-04-15T10:23:04.881 [DEBUG] [Thread-17240] [transport.py] [_log()] kex follows: False
2026-04-15T10:23:04.881 [DEBUG] [Thread-17240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:23:04.881 [DEBUG] [Thread-17240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:23:04.881 [DEBUG] [Thread-17240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:23:04.882 [DEBUG] [Thread-17240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:23:04.882 [DEBUG] [Thread-17240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:23:04.882 [DEBUG] [Thread-17240] [transport.py] [_log()] Compression: none
2026-04-15T10:23:04.882 [DEBUG] [Thread-17240] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:23:04.940 [DEBUG] [Thread-17240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:23:04.941 [DEBUG] [Thread-17240] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:23:04.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:23:04.942 [DEBUG] [Thread-17240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:23:04.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:23:04.996 [DEBUG] [Thread-17240] [transport.py] [_log()] userauth is OK
2026-04-15T10:23:04.996 [DEBUG] [Thread-17240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:23:04.997 [DEBUG] [Thread-17240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:23:04.997 [DEBUG] [Thread-17240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:23:04.997 [DEBUG] [Thread-17240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:23:05.022 [INFO] [Thread-17240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:23:05.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:23:05.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:23:05.870 [DEBUG] [Thread-17240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:23:05.870 [DEBUG] [Thread-17240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:23:05.918 [DEBUG] [Thread-17240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:23:05.918 [DEBUG] [Thread-17240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:23:05.927 [DEBUG] [Thread-17240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:23:05.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:23:05.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')
2026-04-15T10:23:05.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
2026-04-15T10:23:05.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:23:05.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:23:05.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:23:05.967 [DEBUG] [Thread-17240] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:23:19.449 [DEBUG] [Thread-17242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:23:28.763 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:23:28.764 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:23:34.493 [DEBUG] [Thread-17243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:23:35.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:23:35.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:23:35.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:23:37.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 23, 13), 0.623355, 95.4759, 0.0, 13.7815, 10.1181, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:23:37.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:23:13
2026-04-15T10:23:37.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:23:38.055 [DEBUG] [Thread-17244] [transport.py] [_log()] starting thread (client mode): 0xee9ed0c0
2026-04-15T10:23:38.055 [DEBUG] [Thread-17244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:23:38.075 [DEBUG] [Thread-17244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:23:38.075 [INFO] [Thread-17244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:23:38.078 [DEBUG] [Thread-17244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:23:38.078 [DEBUG] [Thread-17244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:23:38.078 [DEBUG] [Thread-17244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:23:38.078 [DEBUG] [Thread-17244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:23:38.078 [DEBUG] [Thread-17244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:23:38.078 [DEBUG] [Thread-17244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:23:38.078 [DEBUG] [Thread-17244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:23:38.078 [DEBUG] [Thread-17244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:23:38.079 [DEBUG] [Thread-17244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:23:38.079 [DEBUG] [Thread-17244] [transport.py] [_log()] client lang: <none>
2026-04-15T10:23:38.079 [DEBUG] [Thread-17244] [transport.py] [_log()] server lang: <none>
2026-04-15T10:23:38.079 [DEBUG] [Thread-17244] [transport.py] [_log()] kex follows: False
2026-04-15T10:23:38.079 [DEBUG] [Thread-17244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:23:38.079 [DEBUG] [Thread-17244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:23:38.079 [DEBUG] [Thread-17244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:23:38.079 [DEBUG] [Thread-17244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:23:38.079 [DEBUG] [Thread-17244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:23:38.079 [DEBUG] [Thread-17244] [transport.py] [_log()] Compression: none
2026-04-15T10:23:38.079 [DEBUG] [Thread-17244] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:23:38.096 [DEBUG] [Thread-17244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:23:38.096 [DEBUG] [Thread-17244] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:23:38.097 [DEBUG] [Thread-17244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:23:38.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:23:38.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:23:38.140 [DEBUG] [Thread-17244] [transport.py] [_log()] userauth is OK
2026-04-15T10:23:38.141 [DEBUG] [Thread-17244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:23:38.141 [DEBUG] [Thread-17244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:23:38.141 [DEBUG] [Thread-17244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:23:38.141 [DEBUG] [Thread-17244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:23:38.165 [INFO] [Thread-17244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:23:38.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:23:38.729 [DEBUG] [Thread-17244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:23:38.729 [DEBUG] [Thread-17244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:23:38.730 [DEBUG] [Thread-17244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:23:38.770 [DEBUG] [Thread-17244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:23:38.770 [DEBUG] [Thread-17244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:23:38.773 [DEBUG] [Thread-17244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:23:38.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:23:38.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:23:38.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:23:38.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:23:38.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:23:38.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:23:38.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:23:38.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:23:38.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:23:38.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.349435 -999.00  +10.90  16.44     90   +9.30 1 3 1 3 1   888    0 2.40 37.54 ----- 16.4 16.4 317.6 17.3 17.1 -8.9 16.2 -8.7 15.0 -6.4 15.9 -6.4
2026-04-15T10:23:38.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:23:38.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:23:38.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.349435
2026-04-15T10:23:38.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:23:38.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:23:38.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:23:38.793 [DEBUG] [Thread-17244] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:23:38.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:23:38.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:23:38.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:23:13', tmtdew=0.623355, humidity=95.4759, cloud=0.0, wind=13.7815, temperature=10.1181, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:23:11.184', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:23:39.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:23:39.046 [DEBUG] [Thread-17247] [transport.py] [_log()] starting thread (client mode): 0xee9eeb30
2026-04-15T10:23:39.046 [DEBUG] [Thread-17247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:23:39.060 [DEBUG] [Thread-17247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:23:39.060 [INFO] [Thread-17247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:23:39.067 [DEBUG] [Thread-17247] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:23:39.067 [DEBUG] [Thread-17247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:23:39.067 [DEBUG] [Thread-17247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:23:39.067 [DEBUG] [Thread-17247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:23:39.068 [DEBUG] [Thread-17247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:23:39.068 [DEBUG] [Thread-17247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:23:39.068 [DEBUG] [Thread-17247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:23:39.068 [DEBUG] [Thread-17247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:23:39.068 [DEBUG] [Thread-17247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:23:39.068 [DEBUG] [Thread-17247] [transport.py] [_log()] client lang: <none>
2026-04-15T10:23:39.068 [DEBUG] [Thread-17247] [transport.py] [_log()] server lang: <none>
2026-04-15T10:23:39.068 [DEBUG] [Thread-17247] [transport.py] [_log()] kex follows: False
2026-04-15T10:23:39.068 [DEBUG] [Thread-17247] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:23:39.068 [DEBUG] [Thread-17247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:23:39.068 [DEBUG] [Thread-17247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:23:39.068 [DEBUG] [Thread-17247] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:23:39.069 [DEBUG] [Thread-17247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:23:39.069 [DEBUG] [Thread-17247] [transport.py] [_log()] Compression: none
2026-04-15T10:23:39.069 [DEBUG] [Thread-17247] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:23:39.129 [DEBUG] [Thread-17247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:23:39.129 [DEBUG] [Thread-17247] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:23:39.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:23:39.130 [DEBUG] [Thread-17247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:23:39.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:23:39.185 [DEBUG] [Thread-17247] [transport.py] [_log()] userauth is OK
2026-04-15T10:23:39.186 [DEBUG] [Thread-17247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:23:39.186 [DEBUG] [Thread-17247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:23:39.186 [DEBUG] [Thread-17247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:23:39.186 [DEBUG] [Thread-17247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:23:39.211 [INFO] [Thread-17247] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:23:39.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:23:39.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:23:40.047 [DEBUG] [Thread-17247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:23:40.047 [DEBUG] [Thread-17247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:23:40.097 [DEBUG] [Thread-17247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:23:40.097 [DEBUG] [Thread-17247] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:23:40.109 [DEBUG] [Thread-17247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:23:40.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:23:40.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')
2026-04-15T10:23:40.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
2026-04-15T10:23:40.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:23:40.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:23:40.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:23:40.154 [DEBUG] [Thread-17247] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:23:49.524 [DEBUG] [Thread-17249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:24:01.535 [DEBUG] [Thread-17250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:24:04.568 [DEBUG] [Thread-17251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:24:10.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:24:10.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:24: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
2026-04-15T10:24:11.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 23, 48), 1.25372, 91.9178, 0.0, 11.9635, 11.1016, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:24:11.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:23:48
2026-04-15T10:24:11.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:24:12.321 [DEBUG] [Thread-17252] [transport.py] [_log()] starting thread (client mode): 0xf13346a0
2026-04-15T10:24:12.321 [DEBUG] [Thread-17252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:24:12.332 [DEBUG] [Thread-17252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:24:12.332 [INFO] [Thread-17252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:24:12.334 [DEBUG] [Thread-17252] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:24:12.334 [DEBUG] [Thread-17252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:24:12.334 [DEBUG] [Thread-17252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:24:12.334 [DEBUG] [Thread-17252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:24:12.334 [DEBUG] [Thread-17252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:24:12.334 [DEBUG] [Thread-17252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:24:12.335 [DEBUG] [Thread-17252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:24:12.335 [DEBUG] [Thread-17252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:24:12.335 [DEBUG] [Thread-17252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:24:12.335 [DEBUG] [Thread-17252] [transport.py] [_log()] client lang: <none>
2026-04-15T10:24:12.335 [DEBUG] [Thread-17252] [transport.py] [_log()] server lang: <none>
2026-04-15T10:24:12.335 [DEBUG] [Thread-17252] [transport.py] [_log()] kex follows: False
2026-04-15T10:24:12.335 [DEBUG] [Thread-17252] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:24:12.335 [DEBUG] [Thread-17252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:24:12.335 [DEBUG] [Thread-17252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:24:12.335 [DEBUG] [Thread-17252] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:24:12.335 [DEBUG] [Thread-17252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:24:12.335 [DEBUG] [Thread-17252] [transport.py] [_log()] Compression: none
2026-04-15T10:24:12.335 [DEBUG] [Thread-17252] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:24:12.345 [DEBUG] [Thread-17252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:24:12.346 [DEBUG] [Thread-17252] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:24:12.346 [DEBUG] [Thread-17252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:24:12.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:24:12.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:24:12.347 [DEBUG] [Thread-17252] [transport.py] [_log()] userauth is OK
2026-04-15T10:24:12.347 [DEBUG] [Thread-17252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:24:12.347 [DEBUG] [Thread-17252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:24:12.347 [DEBUG] [Thread-17252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:24:12.347 [DEBUG] [Thread-17252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:24:12.360 [INFO] [Thread-17252] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:24:12.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:24:12.940 [DEBUG] [Thread-17252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:24:12.941 [DEBUG] [Thread-17252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:24:12.941 [DEBUG] [Thread-17252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:24:12.981 [DEBUG] [Thread-17252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:24:12.981 [DEBUG] [Thread-17252] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:24:12.984 [DEBUG] [Thread-17252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:24:12.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:24:12.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:24:12.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:24:12.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:24:13.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:24:13.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:24:13.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:24:13.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:24:13.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:24:13.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.349782 -999.00  +10.70  13.85     89   +9.00 1 3 1 3 1   888    0 2.46 39.08 ----- 13.8 13.8 313.6 17.7 17.1 -8.8 16.1 -8.9 15.1 -7.9 15.9 -7.3
2026-04-15T10:24:13.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:24:13.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:24:13.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.349782
2026-04-15T10:24:13.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:24:13.005 [DEBUG] [Thread-17252] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:24:13.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:24:13.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:24:13.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:24:13.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:24:13.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:23:48', tmtdew=1.25372, humidity=91.9178, cloud=0.0, wind=11.9635, temperature=11.1016, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:23:41.165', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:24:13.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:24:13.257 [DEBUG] [Thread-17255] [transport.py] [_log()] starting thread (client mode): 0xee91fd60
2026-04-15T10:24:13.257 [DEBUG] [Thread-17255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:24:13.271 [DEBUG] [Thread-17255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:24:13.272 [INFO] [Thread-17255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:24:13.279 [DEBUG] [Thread-17255] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:24:13.279 [DEBUG] [Thread-17255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:24:13.279 [DEBUG] [Thread-17255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:24:13.279 [DEBUG] [Thread-17255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:24:13.279 [DEBUG] [Thread-17255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:24:13.280 [DEBUG] [Thread-17255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:24:13.280 [DEBUG] [Thread-17255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:24:13.280 [DEBUG] [Thread-17255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:24:13.280 [DEBUG] [Thread-17255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:24:13.280 [DEBUG] [Thread-17255] [transport.py] [_log()] client lang: <none>
2026-04-15T10:24:13.280 [DEBUG] [Thread-17255] [transport.py] [_log()] server lang: <none>
2026-04-15T10:24:13.280 [DEBUG] [Thread-17255] [transport.py] [_log()] kex follows: False
2026-04-15T10:24:13.280 [DEBUG] [Thread-17255] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:24:13.280 [DEBUG] [Thread-17255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:24:13.280 [DEBUG] [Thread-17255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:24:13.280 [DEBUG] [Thread-17255] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:24:13.280 [DEBUG] [Thread-17255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:24:13.281 [DEBUG] [Thread-17255] [transport.py] [_log()] Compression: none
2026-04-15T10:24:13.281 [DEBUG] [Thread-17255] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:24:13.339 [DEBUG] [Thread-17255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:24:13.339 [DEBUG] [Thread-17255] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:24:13.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:24:13.340 [DEBUG] [Thread-17255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:24:13.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:24:13.395 [DEBUG] [Thread-17255] [transport.py] [_log()] userauth is OK
2026-04-15T10:24:13.395 [DEBUG] [Thread-17255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:24:13.395 [DEBUG] [Thread-17255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:24:13.396 [DEBUG] [Thread-17255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:24:13.396 [DEBUG] [Thread-17255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:24:13.423 [INFO] [Thread-17255] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:24:13.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:24:13.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:24:14.236 [DEBUG] [Thread-17255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:24:14.237 [DEBUG] [Thread-17255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:24:14.285 [DEBUG] [Thread-17255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:24:14.285 [DEBUG] [Thread-17255] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:24:14.294 [DEBUG] [Thread-17255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:24:14.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:24:14.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')
2026-04-15T10:24:14.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
2026-04-15T10:24:14.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:24:14.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:24:14.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:24:14.332 [DEBUG] [Thread-17255] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:24:19.600 [DEBUG] [Thread-17257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:24:28.905 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:24:28.906 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:24:34.647 [DEBUG] [Thread-17258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:24:44.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:24:44.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:24:44.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
2026-04-15T10:24:45.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 24, 24), 0.709545, 95.2599, 0.0, 12.3343, 10.334, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:24:45.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:24:24
2026-04-15T10:24:46.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:24:46.604 [DEBUG] [Thread-17259] [transport.py] [_log()] starting thread (client mode): 0xf13ee5c0
2026-04-15T10:24:46.605 [DEBUG] [Thread-17259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:24:46.625 [DEBUG] [Thread-17259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:24:46.625 [INFO] [Thread-17259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:24:46.626 [DEBUG] [Thread-17259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:24:46.626 [DEBUG] [Thread-17259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:24:46.626 [DEBUG] [Thread-17259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:24:46.626 [DEBUG] [Thread-17259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:24:46.627 [DEBUG] [Thread-17259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:24:46.627 [DEBUG] [Thread-17259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:24:46.627 [DEBUG] [Thread-17259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:24:46.627 [DEBUG] [Thread-17259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:24:46.627 [DEBUG] [Thread-17259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:24:46.627 [DEBUG] [Thread-17259] [transport.py] [_log()] client lang: <none>
2026-04-15T10:24:46.627 [DEBUG] [Thread-17259] [transport.py] [_log()] server lang: <none>
2026-04-15T10:24:46.627 [DEBUG] [Thread-17259] [transport.py] [_log()] kex follows: False
2026-04-15T10:24:46.627 [DEBUG] [Thread-17259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:24:46.627 [DEBUG] [Thread-17259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:24:46.628 [DEBUG] [Thread-17259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:24:46.628 [DEBUG] [Thread-17259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:24:46.628 [DEBUG] [Thread-17259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:24:46.628 [DEBUG] [Thread-17259] [transport.py] [_log()] Compression: none
2026-04-15T10:24:46.628 [DEBUG] [Thread-17259] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:24:46.636 [DEBUG] [Thread-17259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:24:46.637 [DEBUG] [Thread-17259] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:24:46.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:24:46.637 [DEBUG] [Thread-17259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:24:46.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:24:46.638 [DEBUG] [Thread-17259] [transport.py] [_log()] userauth is OK
2026-04-15T10:24:46.638 [DEBUG] [Thread-17259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:24:46.639 [DEBUG] [Thread-17259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:24:46.639 [DEBUG] [Thread-17259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:24:46.639 [DEBUG] [Thread-17259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:24:46.656 [INFO] [Thread-17259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:24:46.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:24:47.248 [DEBUG] [Thread-17259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:24:47.248 [DEBUG] [Thread-17259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:24:47.249 [DEBUG] [Thread-17259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:24:47.288 [DEBUG] [Thread-17259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:24:47.289 [DEBUG] [Thread-17259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:24:47.290 [DEBUG] [Thread-17259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:24:47.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:24:47.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:24:47.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:24:47.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:24:47.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:24:47.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:24:47.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:24:47.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:24:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:24:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.350476 -999.00  +10.80  15.36     89   +9.20 1 3 1 3 1   888    0 2.54 40.63 ----- 15.4 15.4 286.4 17.2 16.9 -8.2 16.1 -8.3 15.2 -6.7 15.9 -6.2
2026-04-15T10:24:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:24:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:24:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.350476
2026-04-15T10:24:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:24:47.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:24:47.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:24:47.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:24:47.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:24:47.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:24:24', tmtdew=0.709545, humidity=95.2599, cloud=0.0, wind=12.3343, temperature=10.334, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:24:41.126', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:24:47.305 [DEBUG] [Thread-17259] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:24:47.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:24:47.520 [DEBUG] [Thread-17262] [transport.py] [_log()] starting thread (client mode): 0xee91f940
2026-04-15T10:24:47.520 [DEBUG] [Thread-17262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:24:47.534 [DEBUG] [Thread-17262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:24:47.534 [INFO] [Thread-17262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:24:47.541 [DEBUG] [Thread-17262] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:24:47.541 [DEBUG] [Thread-17262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:24:47.541 [DEBUG] [Thread-17262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:24:47.542 [DEBUG] [Thread-17262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:24:47.542 [DEBUG] [Thread-17262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:24:47.542 [DEBUG] [Thread-17262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:24:47.542 [DEBUG] [Thread-17262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:24:47.542 [DEBUG] [Thread-17262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:24:47.542 [DEBUG] [Thread-17262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:24:47.542 [DEBUG] [Thread-17262] [transport.py] [_log()] client lang: <none>
2026-04-15T10:24:47.542 [DEBUG] [Thread-17262] [transport.py] [_log()] server lang: <none>
2026-04-15T10:24:47.542 [DEBUG] [Thread-17262] [transport.py] [_log()] kex follows: False
2026-04-15T10:24:47.542 [DEBUG] [Thread-17262] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:24:47.542 [DEBUG] [Thread-17262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:24:47.542 [DEBUG] [Thread-17262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:24:47.543 [DEBUG] [Thread-17262] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:24:47.543 [DEBUG] [Thread-17262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:24:47.543 [DEBUG] [Thread-17262] [transport.py] [_log()] Compression: none
2026-04-15T10:24:47.543 [DEBUG] [Thread-17262] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:24:47.600 [DEBUG] [Thread-17262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:24:47.600 [DEBUG] [Thread-17262] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:24:47.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:24:47.601 [DEBUG] [Thread-17262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:24:47.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:24:47.658 [DEBUG] [Thread-17262] [transport.py] [_log()] userauth is OK
2026-04-15T10:24:47.659 [DEBUG] [Thread-17262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:24:47.659 [DEBUG] [Thread-17262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:24:47.659 [DEBUG] [Thread-17262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:24:47.659 [DEBUG] [Thread-17262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:24:47.690 [INFO] [Thread-17262] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:24:47.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:24:47.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:24:48.570 [DEBUG] [Thread-17262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:24:48.570 [DEBUG] [Thread-17262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:24:48.618 [DEBUG] [Thread-17262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:24:48.618 [DEBUG] [Thread-17262] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:24:48.628 [DEBUG] [Thread-17262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:24:48.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:24:48.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')
2026-04-15T10:24:48.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
2026-04-15T10:24:48.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:24:48.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:24:48.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:24:48.663 [DEBUG] [Thread-17262] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:24:49.680 [DEBUG] [Thread-17264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:25:01.656 [DEBUG] [Thread-17265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:25:04.722 [DEBUG] [Thread-17266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:25:18.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:25:18.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:25:18.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
2026-04-15T10:25:19.753 [DEBUG] [Thread-17267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:25:19.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 24, 59), 0.72485, 95.16, 0.0, 14.2225, 10.2843, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:25:19.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:24:59
2026-04-15T10:25:20.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:25:20.772 [DEBUG] [Thread-17268] [transport.py] [_log()] starting thread (client mode): 0xee904370
2026-04-15T10:25:20.773 [DEBUG] [Thread-17268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:25:20.792 [DEBUG] [Thread-17268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:25:20.793 [INFO] [Thread-17268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:25:20.795 [DEBUG] [Thread-17268] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:25:20.796 [DEBUG] [Thread-17268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:25:20.796 [DEBUG] [Thread-17268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:25:20.796 [DEBUG] [Thread-17268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:25:20.796 [DEBUG] [Thread-17268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:25:20.796 [DEBUG] [Thread-17268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:25:20.796 [DEBUG] [Thread-17268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:25:20.796 [DEBUG] [Thread-17268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:25:20.796 [DEBUG] [Thread-17268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:25:20.796 [DEBUG] [Thread-17268] [transport.py] [_log()] client lang: <none>
2026-04-15T10:25:20.796 [DEBUG] [Thread-17268] [transport.py] [_log()] server lang: <none>
2026-04-15T10:25:20.796 [DEBUG] [Thread-17268] [transport.py] [_log()] kex follows: False
2026-04-15T10:25:20.796 [DEBUG] [Thread-17268] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:25:20.797 [DEBUG] [Thread-17268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:25:20.797 [DEBUG] [Thread-17268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:25:20.797 [DEBUG] [Thread-17268] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:25:20.797 [DEBUG] [Thread-17268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:25:20.797 [DEBUG] [Thread-17268] [transport.py] [_log()] Compression: none
2026-04-15T10:25:20.797 [DEBUG] [Thread-17268] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:25:20.814 [DEBUG] [Thread-17268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:25:20.814 [DEBUG] [Thread-17268] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:25:20.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:25:20.815 [DEBUG] [Thread-17268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:25:20.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:25:20.816 [DEBUG] [Thread-17268] [transport.py] [_log()] userauth is OK
2026-04-15T10:25:20.816 [DEBUG] [Thread-17268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:25:20.816 [DEBUG] [Thread-17268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:25:20.816 [DEBUG] [Thread-17268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:25:20.816 [DEBUG] [Thread-17268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:25:20.833 [INFO] [Thread-17268] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:25:20.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:25:22.633 [DEBUG] [Thread-17268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:25:22.633 [DEBUG] [Thread-17268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:25:22.633 [DEBUG] [Thread-17268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:25:22.674 [DEBUG] [Thread-17268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:25:22.674 [DEBUG] [Thread-17268] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:25:22.677 [DEBUG] [Thread-17268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:25:22.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:25:22.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:25:22.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:25:22.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:25:22.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:25:22.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:25:22.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:25:22.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:25:22.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:25:22.782 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-15T10:25:22.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:24:59', tmtdew=0.72485, humidity=95.16, cloud=0.0, wind=14.2225, temperature=10.2843, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:25:22.784 [DEBUG] [Thread-17268] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:25:23.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:25:23.040 [DEBUG] [Thread-17271] [transport.py] [_log()] starting thread (client mode): 0xf13cb670
2026-04-15T10:25:23.040 [DEBUG] [Thread-17271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:25:23.056 [DEBUG] [Thread-17271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:25:23.056 [INFO] [Thread-17271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:25:23.067 [DEBUG] [Thread-17271] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:25:23.067 [DEBUG] [Thread-17271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:25:23.067 [DEBUG] [Thread-17271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:25:23.067 [DEBUG] [Thread-17271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:25:23.068 [DEBUG] [Thread-17271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:25:23.068 [DEBUG] [Thread-17271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:25:23.068 [DEBUG] [Thread-17271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:25:23.068 [DEBUG] [Thread-17271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:25:23.068 [DEBUG] [Thread-17271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:25:23.068 [DEBUG] [Thread-17271] [transport.py] [_log()] client lang: <none>
2026-04-15T10:25:23.068 [DEBUG] [Thread-17271] [transport.py] [_log()] server lang: <none>
2026-04-15T10:25:23.068 [DEBUG] [Thread-17271] [transport.py] [_log()] kex follows: False
2026-04-15T10:25:23.068 [DEBUG] [Thread-17271] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:25:23.068 [DEBUG] [Thread-17271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:25:23.068 [DEBUG] [Thread-17271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:25:23.068 [DEBUG] [Thread-17271] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:25:23.069 [DEBUG] [Thread-17271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:25:23.069 [DEBUG] [Thread-17271] [transport.py] [_log()] Compression: none
2026-04-15T10:25:23.069 [DEBUG] [Thread-17271] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:25:23.121 [DEBUG] [Thread-17271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:25:23.122 [DEBUG] [Thread-17271] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:25:23.122 [DEBUG] [Thread-17271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:25:23.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:25:23.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:25:23.178 [DEBUG] [Thread-17271] [transport.py] [_log()] userauth is OK
2026-04-15T10:25:23.178 [DEBUG] [Thread-17271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:25:23.178 [DEBUG] [Thread-17271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:25:23.179 [DEBUG] [Thread-17271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:25:23.179 [DEBUG] [Thread-17271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:25:23.204 [INFO] [Thread-17271] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:25:23.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:25:23.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:25:24.046 [DEBUG] [Thread-17271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:25:24.046 [DEBUG] [Thread-17271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:25:24.094 [DEBUG] [Thread-17271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:25:24.094 [DEBUG] [Thread-17271] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:25:24.103 [DEBUG] [Thread-17271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:25:24.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:25:24.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')
2026-04-15T10:25:24.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
2026-04-15T10:25:24.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:25:24.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:25:24.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:25:24.141 [DEBUG] [Thread-17271] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:25:29.046 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:25:29.047 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:25:34.783 [DEBUG] [Thread-17273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:25:49.827 [DEBUG] [Thread-17274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:25:54.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:25:54.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:25:54.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
2026-04-15T10:25:55.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 25, 35), 1.37235, 91.1874, 0.0, 17.5378, 11.068, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:25:55.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:25:35
2026-04-15T10:25:55.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:25:56.244 [DEBUG] [Thread-17275] [transport.py] [_log()] starting thread (client mode): 0xf1336980
2026-04-15T10:25:56.244 [DEBUG] [Thread-17275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:25:56.264 [DEBUG] [Thread-17275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:25:56.264 [INFO] [Thread-17275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] client lang: <none>
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] server lang: <none>
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] kex follows: False
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:25:56.268 [DEBUG] [Thread-17275] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:25:56.269 [DEBUG] [Thread-17275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:25:56.269 [DEBUG] [Thread-17275] [transport.py] [_log()] Compression: none
2026-04-15T10:25:56.269 [DEBUG] [Thread-17275] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:25:56.284 [DEBUG] [Thread-17275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:25:56.284 [DEBUG] [Thread-17275] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:25:56.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:25:56.285 [DEBUG] [Thread-17275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:25:56.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:25:56.286 [DEBUG] [Thread-17275] [transport.py] [_log()] userauth is OK
2026-04-15T10:25:56.286 [DEBUG] [Thread-17275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:25:56.286 [DEBUG] [Thread-17275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:25:56.286 [DEBUG] [Thread-17275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:25:56.286 [DEBUG] [Thread-17275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:25:56.304 [INFO] [Thread-17275] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:25:56.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:25:57.065 [DEBUG] [Thread-17275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:25:57.065 [DEBUG] [Thread-17275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:25:57.066 [DEBUG] [Thread-17275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:25:57.106 [DEBUG] [Thread-17275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:25:57.106 [DEBUG] [Thread-17275] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:25:57.109 [DEBUG] [Thread-17275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:25:57.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:25:57.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:25:57.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:25:57.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:25:57.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:25:57.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:25:57.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:25:57.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:25:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:25:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.350824 -999.00  +10.70  17.16     89   +9.00 1 3 1 3 1   888    0 2.62 42.74 ----- 17.2 17.2 301.4 21.5 16.7 -8.0 16.0 -7.2 15.0 -6.3 15.8 -5.3
2026-04-15T10:25:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:25:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:25:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.350824
2026-04-15T10:25:57.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:25:57.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:25:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:25:57.131 [DEBUG] [Thread-17275] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:25:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:25:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:25:57.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:25:35', tmtdew=1.37235, humidity=91.1874, cloud=0.0, wind=17.5378, temperature=11.068, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:25:11.194', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:25:57.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:25:57.386 [DEBUG] [Thread-17278] [transport.py] [_log()] starting thread (client mode): 0xf13ca980
2026-04-15T10:25:57.387 [DEBUG] [Thread-17278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:25:57.400 [DEBUG] [Thread-17278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:25:57.400 [INFO] [Thread-17278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:25:57.408 [DEBUG] [Thread-17278] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:25:57.408 [DEBUG] [Thread-17278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:25:57.408 [DEBUG] [Thread-17278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:25:57.408 [DEBUG] [Thread-17278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:25:57.408 [DEBUG] [Thread-17278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:25:57.408 [DEBUG] [Thread-17278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:25:57.408 [DEBUG] [Thread-17278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:25:57.408 [DEBUG] [Thread-17278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:25:57.408 [DEBUG] [Thread-17278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:25:57.408 [DEBUG] [Thread-17278] [transport.py] [_log()] client lang: <none>
2026-04-15T10:25:57.408 [DEBUG] [Thread-17278] [transport.py] [_log()] server lang: <none>
2026-04-15T10:25:57.409 [DEBUG] [Thread-17278] [transport.py] [_log()] kex follows: False
2026-04-15T10:25:57.409 [DEBUG] [Thread-17278] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:25:57.409 [DEBUG] [Thread-17278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:25:57.409 [DEBUG] [Thread-17278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:25:57.409 [DEBUG] [Thread-17278] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:25:57.409 [DEBUG] [Thread-17278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:25:57.409 [DEBUG] [Thread-17278] [transport.py] [_log()] Compression: none
2026-04-15T10:25:57.409 [DEBUG] [Thread-17278] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:25:57.464 [DEBUG] [Thread-17278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:25:57.465 [DEBUG] [Thread-17278] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:25:57.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:25:57.465 [DEBUG] [Thread-17278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:25:57.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:25:57.523 [DEBUG] [Thread-17278] [transport.py] [_log()] userauth is OK
2026-04-15T10:25:57.523 [DEBUG] [Thread-17278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:25:57.523 [DEBUG] [Thread-17278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:25:57.523 [DEBUG] [Thread-17278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:25:57.524 [DEBUG] [Thread-17278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:25:57.548 [INFO] [Thread-17278] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:25:57.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:25:57.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:25:58.362 [DEBUG] [Thread-17278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:25:58.362 [DEBUG] [Thread-17278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:25:58.410 [DEBUG] [Thread-17278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:25:58.410 [DEBUG] [Thread-17278] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:25:58.424 [DEBUG] [Thread-17278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:25:58.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:25:58.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')
2026-04-15T10:25:58.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
2026-04-15T10:25:58.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:25:58.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:25:58.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:25:58.467 [DEBUG] [Thread-17278] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:26:01.758 [DEBUG] [Thread-17280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:26:04.858 [DEBUG] [Thread-17281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:26:19.901 [DEBUG] [Thread-17282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:26:28.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:26:28.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:26:28.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
2026-04-15T10:26:29.186 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:26:29.187 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:26:29.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 26, 10), 0.69893, 95.0105, 0.0, 13.0759, 10.1509, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:26:29.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:26:10
2026-04-15T10:26:30.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:26:30.631 [DEBUG] [Thread-17283] [transport.py] [_log()] starting thread (client mode): 0xee905990
2026-04-15T10:26:30.632 [DEBUG] [Thread-17283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:26:30.651 [DEBUG] [Thread-17283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:26:30.651 [INFO] [Thread-17283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:26:30.652 [DEBUG] [Thread-17283] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:26:30.652 [DEBUG] [Thread-17283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:26:30.652 [DEBUG] [Thread-17283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:26:30.652 [DEBUG] [Thread-17283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:26:30.652 [DEBUG] [Thread-17283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:26:30.652 [DEBUG] [Thread-17283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:26:30.652 [DEBUG] [Thread-17283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:26:30.653 [DEBUG] [Thread-17283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:26:30.653 [DEBUG] [Thread-17283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:26:30.653 [DEBUG] [Thread-17283] [transport.py] [_log()] client lang: <none>
2026-04-15T10:26:30.653 [DEBUG] [Thread-17283] [transport.py] [_log()] server lang: <none>
2026-04-15T10:26:30.653 [DEBUG] [Thread-17283] [transport.py] [_log()] kex follows: False
2026-04-15T10:26:30.653 [DEBUG] [Thread-17283] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:26:30.653 [DEBUG] [Thread-17283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:26:30.653 [DEBUG] [Thread-17283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:26:30.653 [DEBUG] [Thread-17283] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:26:30.653 [DEBUG] [Thread-17283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:26:30.653 [DEBUG] [Thread-17283] [transport.py] [_log()] Compression: none
2026-04-15T10:26:30.654 [DEBUG] [Thread-17283] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:26:30.662 [DEBUG] [Thread-17283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:26:30.662 [DEBUG] [Thread-17283] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:26:30.662 [DEBUG] [Thread-17283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:26:30.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:26:30.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:26:30.664 [DEBUG] [Thread-17283] [transport.py] [_log()] userauth is OK
2026-04-15T10:26:30.664 [DEBUG] [Thread-17283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:26:30.664 [DEBUG] [Thread-17283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:26:30.664 [DEBUG] [Thread-17283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:26:30.664 [DEBUG] [Thread-17283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:26:30.678 [INFO] [Thread-17283] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:26:30.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:26:31.277 [DEBUG] [Thread-17283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:26:31.277 [DEBUG] [Thread-17283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:26:31.277 [DEBUG] [Thread-17283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:26:31.317 [DEBUG] [Thread-17283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:26:31.317 [DEBUG] [Thread-17283] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:26:31.320 [DEBUG] [Thread-17283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:26:31.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:26:31.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:26:31.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:26:31.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:26:31.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:26:31.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:26:31.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:26:31.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:26:31.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:26:31.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.351519 -999.00  +10.60  14.28     89   +8.80 1 3 1 3 1   888    0 2.80 46.84 ----- 14.3 14.3 297.2 16.8 16.6 -6.4 15.9 -6.3 15.1 -5.2 15.8 -5.1
2026-04-15T10:26:31.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:26:31.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:26:31.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.351519
2026-04-15T10:26:31.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:26:31.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:26:31.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:26:31.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:26:31.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:26:31.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:26:10', tmtdew=0.69893, humidity=95.0105, cloud=0.0, wind=13.0759, temperature=10.1509, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:26:11.242', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:26:31.340 [DEBUG] [Thread-17283] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:26:31.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:26:31.550 [DEBUG] [Thread-17286] [transport.py] [_log()] starting thread (client mode): 0xee91ece0
2026-04-15T10:26:31.550 [DEBUG] [Thread-17286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:26:31.568 [DEBUG] [Thread-17286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:26:31.568 [INFO] [Thread-17286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:26:31.576 [DEBUG] [Thread-17286] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:26:31.576 [DEBUG] [Thread-17286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:26:31.576 [DEBUG] [Thread-17286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:26:31.576 [DEBUG] [Thread-17286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:26:31.576 [DEBUG] [Thread-17286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:26:31.576 [DEBUG] [Thread-17286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:26:31.576 [DEBUG] [Thread-17286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:26:31.576 [DEBUG] [Thread-17286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:26:31.576 [DEBUG] [Thread-17286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:26:31.576 [DEBUG] [Thread-17286] [transport.py] [_log()] client lang: <none>
2026-04-15T10:26:31.576 [DEBUG] [Thread-17286] [transport.py] [_log()] server lang: <none>
2026-04-15T10:26:31.577 [DEBUG] [Thread-17286] [transport.py] [_log()] kex follows: False
2026-04-15T10:26:31.577 [DEBUG] [Thread-17286] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:26:31.577 [DEBUG] [Thread-17286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:26:31.577 [DEBUG] [Thread-17286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:26:31.577 [DEBUG] [Thread-17286] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:26:31.577 [DEBUG] [Thread-17286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:26:31.577 [DEBUG] [Thread-17286] [transport.py] [_log()] Compression: none
2026-04-15T10:26:31.577 [DEBUG] [Thread-17286] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:26:31.637 [DEBUG] [Thread-17286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:26:31.638 [DEBUG] [Thread-17286] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:26:31.638 [DEBUG] [Thread-17286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:26:31.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:26:31.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:26:31.697 [DEBUG] [Thread-17286] [transport.py] [_log()] userauth is OK
2026-04-15T10:26:31.698 [DEBUG] [Thread-17286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:26:31.698 [DEBUG] [Thread-17286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:26:31.698 [DEBUG] [Thread-17286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:26:31.698 [DEBUG] [Thread-17286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:26:31.726 [INFO] [Thread-17286] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:26:31.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:26:31.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:26:32.540 [DEBUG] [Thread-17286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:26:32.540 [DEBUG] [Thread-17286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:26:32.589 [DEBUG] [Thread-17286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:26:32.589 [DEBUG] [Thread-17286] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:26:32.599 [DEBUG] [Thread-17286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:26:32.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:26: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')
2026-04-15T10:26:32.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
2026-04-15T10:26:32.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:26:32.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:26:32.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:26:32.637 [DEBUG] [Thread-17286] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:26:34.933 [DEBUG] [Thread-17288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:26:49.977 [DEBUG] [Thread-17289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:27:01.879 [DEBUG] [Thread-17290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:27:02.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:27:02.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:27:02.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:27:03.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 26, 46), 1.38401, 91.1202, 0.0, 10.1642, 11.1338, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:27:03.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:26:46
2026-04-15T10:27:04.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:27:04.767 [DEBUG] [Thread-17291] [transport.py] [_log()] starting thread (client mode): 0xee9ed420
2026-04-15T10:27:04.767 [DEBUG] [Thread-17291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:27:04.791 [DEBUG] [Thread-17291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:27:04.791 [INFO] [Thread-17291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:27:04.795 [DEBUG] [Thread-17291] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:27:04.795 [DEBUG] [Thread-17291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:27:04.795 [DEBUG] [Thread-17291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:27:04.795 [DEBUG] [Thread-17291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:27:04.795 [DEBUG] [Thread-17291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:27:04.795 [DEBUG] [Thread-17291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:27:04.795 [DEBUG] [Thread-17291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:27:04.795 [DEBUG] [Thread-17291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:27:04.795 [DEBUG] [Thread-17291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:27:04.795 [DEBUG] [Thread-17291] [transport.py] [_log()] client lang: <none>
2026-04-15T10:27:04.795 [DEBUG] [Thread-17291] [transport.py] [_log()] server lang: <none>
2026-04-15T10:27:04.796 [DEBUG] [Thread-17291] [transport.py] [_log()] kex follows: False
2026-04-15T10:27:04.796 [DEBUG] [Thread-17291] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:27:04.796 [DEBUG] [Thread-17291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:27:04.796 [DEBUG] [Thread-17291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:27:04.796 [DEBUG] [Thread-17291] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:27:04.796 [DEBUG] [Thread-17291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:27:04.796 [DEBUG] [Thread-17291] [transport.py] [_log()] Compression: none
2026-04-15T10:27:04.796 [DEBUG] [Thread-17291] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:27:04.804 [DEBUG] [Thread-17291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:27:04.805 [DEBUG] [Thread-17291] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:27:04.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:27:04.805 [DEBUG] [Thread-17291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:27:04.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:27:04.848 [DEBUG] [Thread-17291] [transport.py] [_log()] userauth is OK
2026-04-15T10:27:04.848 [DEBUG] [Thread-17291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:27:04.849 [DEBUG] [Thread-17291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:27:04.849 [DEBUG] [Thread-17291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:27:04.849 [DEBUG] [Thread-17291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:27:04.873 [INFO] [Thread-17291] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:27:04.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:27:05.009 [DEBUG] [Thread-17293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:27:05.461 [DEBUG] [Thread-17291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:27:05.462 [DEBUG] [Thread-17291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:27:05.462 [DEBUG] [Thread-17291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:27:05.502 [DEBUG] [Thread-17291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:27:05.502 [DEBUG] [Thread-17291] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:27:05.504 [DEBUG] [Thread-17291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:27:05.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:27:05.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:27:05.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:27:05.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:27:05.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:27:05.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:27:05.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:27:05.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:27:05.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:27:05.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.351865 -999.00  +10.60  15.07     89   +8.90 1 3 1 3 1   888    0 2.87 49.27 ----- 15.1 15.1 299.2 20.2 16.6 -5.9 15.9 -6.2 15.1 -6.5 15.8 -5.1
2026-04-15T10:27:05.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:27:05.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:27:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.351865
2026-04-15T10:27:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:27:05.526 [DEBUG] [Thread-17291] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:27:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:27:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:27:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:27:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:27:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:26:46', tmtdew=1.38401, humidity=91.1202, cloud=0.0, wind=10.1642, temperature=11.1338, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:26:41.136', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:27:05.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:27:05.757 [DEBUG] [Thread-17295] [transport.py] [_log()] starting thread (client mode): 0xf13efc10
2026-04-15T10:27:05.757 [DEBUG] [Thread-17295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:27:05.771 [DEBUG] [Thread-17295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:27:05.772 [INFO] [Thread-17295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:27:05.779 [DEBUG] [Thread-17295] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:27:05.779 [DEBUG] [Thread-17295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:27:05.779 [DEBUG] [Thread-17295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:27:05.779 [DEBUG] [Thread-17295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:27:05.779 [DEBUG] [Thread-17295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:27:05.779 [DEBUG] [Thread-17295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:27:05.779 [DEBUG] [Thread-17295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:27:05.780 [DEBUG] [Thread-17295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:27:05.780 [DEBUG] [Thread-17295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:27:05.780 [DEBUG] [Thread-17295] [transport.py] [_log()] client lang: <none>
2026-04-15T10:27:05.780 [DEBUG] [Thread-17295] [transport.py] [_log()] server lang: <none>
2026-04-15T10:27:05.780 [DEBUG] [Thread-17295] [transport.py] [_log()] kex follows: False
2026-04-15T10:27:05.780 [DEBUG] [Thread-17295] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:27:05.780 [DEBUG] [Thread-17295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:27:05.780 [DEBUG] [Thread-17295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:27:05.780 [DEBUG] [Thread-17295] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:27:05.780 [DEBUG] [Thread-17295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:27:05.780 [DEBUG] [Thread-17295] [transport.py] [_log()] Compression: none
2026-04-15T10:27:05.781 [DEBUG] [Thread-17295] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:27:05.835 [DEBUG] [Thread-17295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:27:05.836 [DEBUG] [Thread-17295] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:27:05.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:27:05.836 [DEBUG] [Thread-17295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:27:05.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:27:05.892 [DEBUG] [Thread-17295] [transport.py] [_log()] userauth is OK
2026-04-15T10:27:05.892 [DEBUG] [Thread-17295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:27:05.892 [DEBUG] [Thread-17295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:27:05.892 [DEBUG] [Thread-17295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:27:05.893 [DEBUG] [Thread-17295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:27:05.918 [INFO] [Thread-17295] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:27:05.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:27:05.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:27:06.750 [DEBUG] [Thread-17295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:27:06.751 [DEBUG] [Thread-17295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:27:06.798 [DEBUG] [Thread-17295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:27:06.799 [DEBUG] [Thread-17295] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:27:06.808 [DEBUG] [Thread-17295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:27:06.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:27: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')
2026-04-15T10:27:06.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
2026-04-15T10:27:06.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:27:06.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:27:06.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:27:06.843 [DEBUG] [Thread-17295] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:27:20.040 [DEBUG] [Thread-17297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:27:29.329 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:27:29.330 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:27:35.084 [DEBUG] [Thread-17298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:27:36.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:27:36.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:27:36.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:27:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 27, 21), 0.756095, 94.9772, 0.0, 11.2406, 10.2667, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:27:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:27:21
2026-04-15T10:27:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:27:38.935 [DEBUG] [Thread-17299] [transport.py] [_log()] starting thread (client mode): 0xee9060e0
2026-04-15T10:27:38.935 [DEBUG] [Thread-17299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:27:38.955 [DEBUG] [Thread-17299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:27:38.955 [INFO] [Thread-17299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:27:38.956 [DEBUG] [Thread-17299] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:27:38.956 [DEBUG] [Thread-17299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:27:38.956 [DEBUG] [Thread-17299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:27:38.956 [DEBUG] [Thread-17299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:27:38.956 [DEBUG] [Thread-17299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:27:38.957 [DEBUG] [Thread-17299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:27:38.957 [DEBUG] [Thread-17299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:27:38.957 [DEBUG] [Thread-17299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:27:38.957 [DEBUG] [Thread-17299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:27:38.957 [DEBUG] [Thread-17299] [transport.py] [_log()] client lang: <none>
2026-04-15T10:27:38.957 [DEBUG] [Thread-17299] [transport.py] [_log()] server lang: <none>
2026-04-15T10:27:38.957 [DEBUG] [Thread-17299] [transport.py] [_log()] kex follows: False
2026-04-15T10:27:38.957 [DEBUG] [Thread-17299] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:27:38.957 [DEBUG] [Thread-17299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:27:38.957 [DEBUG] [Thread-17299] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:27:38.957 [DEBUG] [Thread-17299] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:27:38.957 [DEBUG] [Thread-17299] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:27:38.958 [DEBUG] [Thread-17299] [transport.py] [_log()] Compression: none
2026-04-15T10:27:38.958 [DEBUG] [Thread-17299] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:27:38.967 [DEBUG] [Thread-17299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:27:38.968 [DEBUG] [Thread-17299] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:27:38.968 [DEBUG] [Thread-17299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:27:38.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:27:38.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:27:38.970 [DEBUG] [Thread-17299] [transport.py] [_log()] userauth is OK
2026-04-15T10:27:38.970 [DEBUG] [Thread-17299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:27:38.970 [DEBUG] [Thread-17299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:27:38.970 [DEBUG] [Thread-17299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:27:38.970 [DEBUG] [Thread-17299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:27:38.987 [INFO] [Thread-17299] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:27:38.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:27:39.614 [DEBUG] [Thread-17299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:27:39.614 [DEBUG] [Thread-17299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:27:39.615 [DEBUG] [Thread-17299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:27:39.655 [DEBUG] [Thread-17299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:27:39.655 [DEBUG] [Thread-17299] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:27:39.661 [DEBUG] [Thread-17299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:27:39.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:27:39.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:27:39.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:27:39.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:27:39.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:27:39.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:27:39.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:27:39.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:27:39.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:27:39.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.352213 -999.00  +10.70  10.66     87   +8.70 1 3 1 2 1   888    0 3.10 56.99 ----- 10.7 10.7 304.3 15.4 16.6 -6.0 15.9 -5.8 15.1 -4.9 15.8 -4.9
2026-04-15T10:27:39.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:27:39.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:27:39.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.352213
2026-04-15T10:27:39.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:27:39.690 [DEBUG] [Thread-17299] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:27:39.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:27:39.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:27:39.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:27:39.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:27:39.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:27:21', tmtdew=0.756095, humidity=94.9772, cloud=0.0, wind=11.2406, temperature=10.2667, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:27:11.203', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:27:39.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:27:39.946 [DEBUG] [Thread-17302] [transport.py] [_log()] starting thread (client mode): 0xf1366200
2026-04-15T10:27:39.946 [DEBUG] [Thread-17302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:27:39.960 [DEBUG] [Thread-17302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:27:39.960 [INFO] [Thread-17302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:27:39.967 [DEBUG] [Thread-17302] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:27:39.967 [DEBUG] [Thread-17302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:27:39.967 [DEBUG] [Thread-17302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:27:39.968 [DEBUG] [Thread-17302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:27:39.968 [DEBUG] [Thread-17302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:27:39.968 [DEBUG] [Thread-17302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:27:39.968 [DEBUG] [Thread-17302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:27:39.968 [DEBUG] [Thread-17302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:27:39.968 [DEBUG] [Thread-17302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:27:39.968 [DEBUG] [Thread-17302] [transport.py] [_log()] client lang: <none>
2026-04-15T10:27:39.968 [DEBUG] [Thread-17302] [transport.py] [_log()] server lang: <none>
2026-04-15T10:27:39.968 [DEBUG] [Thread-17302] [transport.py] [_log()] kex follows: False
2026-04-15T10:27:39.968 [DEBUG] [Thread-17302] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:27:39.968 [DEBUG] [Thread-17302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:27:39.969 [DEBUG] [Thread-17302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:27:39.969 [DEBUG] [Thread-17302] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:27:39.969 [DEBUG] [Thread-17302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:27:39.969 [DEBUG] [Thread-17302] [transport.py] [_log()] Compression: none
2026-04-15T10:27:39.969 [DEBUG] [Thread-17302] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:27:40.025 [DEBUG] [Thread-17302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:27:40.025 [DEBUG] [Thread-17302] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:27:40.026 [DEBUG] [Thread-17302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:27:40.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:27:40.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:27:40.082 [DEBUG] [Thread-17302] [transport.py] [_log()] userauth is OK
2026-04-15T10:27:40.082 [DEBUG] [Thread-17302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:27:40.083 [DEBUG] [Thread-17302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:27:40.083 [DEBUG] [Thread-17302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:27:40.083 [DEBUG] [Thread-17302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:27:40.108 [INFO] [Thread-17302] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:27:40.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:27:40.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:27:40.912 [DEBUG] [Thread-17302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:27:40.912 [DEBUG] [Thread-17302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:27:40.960 [DEBUG] [Thread-17302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:27:40.960 [DEBUG] [Thread-17302] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:27:40.969 [DEBUG] [Thread-17302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:27:40.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:27:40.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')
2026-04-15T10:27:40.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
2026-04-15T10:27:40.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:27:40.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:27:40.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:27:41.004 [DEBUG] [Thread-17302] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:27:50.117 [DEBUG] [Thread-17304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:28:02.013 [DEBUG] [Thread-17305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:28:05.185 [DEBUG] [Thread-17306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:28:11.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:28:11.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:28:11.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:28:12.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 27, 56), 0.78025, 94.8279, 0.0, 9.44064, 10.1835, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:28:12.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:27:56
2026-04-15T10:28:12.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:28:13.109 [DEBUG] [Thread-17307] [transport.py] [_log()] starting thread (client mode): 0xee9eeb00
2026-04-15T10:28:13.110 [DEBUG] [Thread-17307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:28:13.128 [DEBUG] [Thread-17307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:28:13.128 [INFO] [Thread-17307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:28:13.130 [DEBUG] [Thread-17307] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:28:13.130 [DEBUG] [Thread-17307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:28:13.130 [DEBUG] [Thread-17307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:28:13.130 [DEBUG] [Thread-17307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:28:13.130 [DEBUG] [Thread-17307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:28:13.130 [DEBUG] [Thread-17307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:28:13.130 [DEBUG] [Thread-17307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:28:13.130 [DEBUG] [Thread-17307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:28:13.130 [DEBUG] [Thread-17307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:28:13.131 [DEBUG] [Thread-17307] [transport.py] [_log()] client lang: <none>
2026-04-15T10:28:13.131 [DEBUG] [Thread-17307] [transport.py] [_log()] server lang: <none>
2026-04-15T10:28:13.131 [DEBUG] [Thread-17307] [transport.py] [_log()] kex follows: False
2026-04-15T10:28:13.131 [DEBUG] [Thread-17307] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:28:13.131 [DEBUG] [Thread-17307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:28:13.131 [DEBUG] [Thread-17307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:28:13.131 [DEBUG] [Thread-17307] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:28:13.131 [DEBUG] [Thread-17307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:28:13.131 [DEBUG] [Thread-17307] [transport.py] [_log()] Compression: none
2026-04-15T10:28:13.131 [DEBUG] [Thread-17307] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:28:13.139 [DEBUG] [Thread-17307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:28:13.140 [DEBUG] [Thread-17307] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:28:13.140 [DEBUG] [Thread-17307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:28:13.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:28:13.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:28:13.141 [DEBUG] [Thread-17307] [transport.py] [_log()] userauth is OK
2026-04-15T10:28:13.141 [DEBUG] [Thread-17307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:28:13.141 [DEBUG] [Thread-17307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:28:13.142 [DEBUG] [Thread-17307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:28:13.142 [DEBUG] [Thread-17307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:28:13.157 [INFO] [Thread-17307] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:28:13.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:28:13.769 [DEBUG] [Thread-17307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:28:13.769 [DEBUG] [Thread-17307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:28:13.770 [DEBUG] [Thread-17307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:28:13.810 [DEBUG] [Thread-17307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:28:13.810 [DEBUG] [Thread-17307] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:28:13.813 [DEBUG] [Thread-17307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:28:13.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:28:13.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:28:13.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:28:13.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:28:13.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:28:13.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:28:13.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:28:13.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:28:13.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:28:13.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.352560 -999.00  +10.80  10.97     88   +8.90 1 3 1 3 1   888    0 3.10 55.83 ----- 11.0 11.0 300.5 12.4 16.5 -6.3 15.9 -5.6 15.2 -5.4 15.8 -4.9
2026-04-15T10:28:13.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:28:13.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:28:13.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.352560
2026-04-15T10:28:13.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:28:13.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:28:13.836 [DEBUG] [Thread-17307] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:28:13.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:28:13.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:28:13.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:28:13.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:27:56', tmtdew=0.78025, humidity=94.8279, cloud=0.0, wind=9.44064, temperature=10.1835, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:27:41.184', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:28:14.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:28:14.087 [DEBUG] [Thread-17310] [transport.py] [_log()] starting thread (client mode): 0xf1336530
2026-04-15T10:28:14.087 [DEBUG] [Thread-17310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:28:14.103 [DEBUG] [Thread-17310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:28:14.103 [INFO] [Thread-17310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:28:14.110 [DEBUG] [Thread-17310] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:28:14.110 [DEBUG] [Thread-17310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:28:14.110 [DEBUG] [Thread-17310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:28:14.110 [DEBUG] [Thread-17310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:28:14.111 [DEBUG] [Thread-17310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:28:14.111 [DEBUG] [Thread-17310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:28:14.111 [DEBUG] [Thread-17310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:28:14.111 [DEBUG] [Thread-17310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:28:14.111 [DEBUG] [Thread-17310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:28:14.111 [DEBUG] [Thread-17310] [transport.py] [_log()] client lang: <none>
2026-04-15T10:28:14.111 [DEBUG] [Thread-17310] [transport.py] [_log()] server lang: <none>
2026-04-15T10:28:14.111 [DEBUG] [Thread-17310] [transport.py] [_log()] kex follows: False
2026-04-15T10:28:14.111 [DEBUG] [Thread-17310] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:28:14.111 [DEBUG] [Thread-17310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:28:14.111 [DEBUG] [Thread-17310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:28:14.111 [DEBUG] [Thread-17310] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:28:14.112 [DEBUG] [Thread-17310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:28:14.112 [DEBUG] [Thread-17310] [transport.py] [_log()] Compression: none
2026-04-15T10:28:14.112 [DEBUG] [Thread-17310] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:28:14.167 [DEBUG] [Thread-17310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:28:14.168 [DEBUG] [Thread-17310] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:28:14.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:28:14.168 [DEBUG] [Thread-17310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:28:14.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:28:14.225 [DEBUG] [Thread-17310] [transport.py] [_log()] userauth is OK
2026-04-15T10:28:14.226 [DEBUG] [Thread-17310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:28:14.226 [DEBUG] [Thread-17310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:28:14.226 [DEBUG] [Thread-17310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:28:14.226 [DEBUG] [Thread-17310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:28:14.251 [INFO] [Thread-17310] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:28:14.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:28:14.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:28:15.102 [DEBUG] [Thread-17310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:28:15.102 [DEBUG] [Thread-17310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:28:15.150 [DEBUG] [Thread-17310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:28:15.150 [DEBUG] [Thread-17310] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:28:15.160 [DEBUG] [Thread-17310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:28:15.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:28:15.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')
2026-04-15T10:28:15.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
2026-04-15T10:28:15.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:28:15.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:28:15.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:28:15.201 [DEBUG] [Thread-17310] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:28:20.216 [DEBUG] [Thread-17312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:28:29.470 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:28:29.471 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:28:35.259 [DEBUG] [Thread-17313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:28:45.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:28:45.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:28:45.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
2026-04-15T10:28:46.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 28, 32), 0.796835, 94.7282, 0.0, 12.1043, 10.2, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:28:46.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:28:32
2026-04-15T10:28:46.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:28:47.340 [DEBUG] [Thread-17314] [transport.py] [_log()] starting thread (client mode): 0xee9ece80
2026-04-15T10:28:47.340 [DEBUG] [Thread-17314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:28:47.359 [DEBUG] [Thread-17314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:28:47.359 [INFO] [Thread-17314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:28:47.362 [DEBUG] [Thread-17314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:28:47.362 [DEBUG] [Thread-17314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:28:47.362 [DEBUG] [Thread-17314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:28:47.362 [DEBUG] [Thread-17314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:28:47.362 [DEBUG] [Thread-17314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:28:47.362 [DEBUG] [Thread-17314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:28:47.362 [DEBUG] [Thread-17314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:28:47.362 [DEBUG] [Thread-17314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:28:47.362 [DEBUG] [Thread-17314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:28:47.362 [DEBUG] [Thread-17314] [transport.py] [_log()] client lang: <none>
2026-04-15T10:28:47.363 [DEBUG] [Thread-17314] [transport.py] [_log()] server lang: <none>
2026-04-15T10:28:47.363 [DEBUG] [Thread-17314] [transport.py] [_log()] kex follows: False
2026-04-15T10:28:47.363 [DEBUG] [Thread-17314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:28:47.363 [DEBUG] [Thread-17314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:28:47.363 [DEBUG] [Thread-17314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:28:47.363 [DEBUG] [Thread-17314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:28:47.363 [DEBUG] [Thread-17314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:28:47.363 [DEBUG] [Thread-17314] [transport.py] [_log()] Compression: none
2026-04-15T10:28:47.363 [DEBUG] [Thread-17314] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:28:47.380 [DEBUG] [Thread-17314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:28:47.381 [DEBUG] [Thread-17314] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:28:47.381 [DEBUG] [Thread-17314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:28:47.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:28:47.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:28:47.382 [DEBUG] [Thread-17314] [transport.py] [_log()] userauth is OK
2026-04-15T10:28:47.382 [DEBUG] [Thread-17314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:28:47.383 [DEBUG] [Thread-17314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:28:47.383 [DEBUG] [Thread-17314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:28:47.383 [DEBUG] [Thread-17314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:28:47.400 [INFO] [Thread-17314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:28:47.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:28:47.975 [DEBUG] [Thread-17314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:28:47.975 [DEBUG] [Thread-17314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:28:47.976 [DEBUG] [Thread-17314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:28:48.016 [DEBUG] [Thread-17314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:28:48.016 [DEBUG] [Thread-17314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:28:48.018 [DEBUG] [Thread-17314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:28:48.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:28:48.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:28:48.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:28:48.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:28:48.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:28:48.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:28:48.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:28:48.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:28:48.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:28:48.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.353254 -999.00  +10.80  16.70     87   +8.80 1 3 1 2 1   888    0 3.36 63.65 ----- 16.7 16.7 289.6 21.4 16.4 -6.6 15.9 -5.7 15.1 -5.1 15.7 -5.0
2026-04-15T10:28:48.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:28:48.042 [DEBUG] [Thread-17314] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:28:48.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:28:48.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.353254
2026-04-15T10:28:48.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:28:48.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:28:48.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:28:48.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:28:48.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:28:48.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:28:32', tmtdew=0.796835, humidity=94.7282, cloud=0.0, wind=12.1043, temperature=10.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:28:41.146', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:28:48.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:28:48.298 [DEBUG] [Thread-17317] [transport.py] [_log()] starting thread (client mode): 0xf13c89a0
2026-04-15T10:28:48.298 [DEBUG] [Thread-17317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:28:48.313 [DEBUG] [Thread-17317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:28:48.313 [INFO] [Thread-17317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:28:48.320 [DEBUG] [Thread-17317] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:28:48.320 [DEBUG] [Thread-17317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:28:48.321 [DEBUG] [Thread-17317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:28:48.321 [DEBUG] [Thread-17317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:28:48.321 [DEBUG] [Thread-17317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:28:48.321 [DEBUG] [Thread-17317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:28:48.321 [DEBUG] [Thread-17317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:28:48.321 [DEBUG] [Thread-17317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:28:48.321 [DEBUG] [Thread-17317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:28:48.321 [DEBUG] [Thread-17317] [transport.py] [_log()] client lang: <none>
2026-04-15T10:28:48.321 [DEBUG] [Thread-17317] [transport.py] [_log()] server lang: <none>
2026-04-15T10:28:48.321 [DEBUG] [Thread-17317] [transport.py] [_log()] kex follows: False
2026-04-15T10:28:48.321 [DEBUG] [Thread-17317] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:28:48.322 [DEBUG] [Thread-17317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:28:48.322 [DEBUG] [Thread-17317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:28:48.322 [DEBUG] [Thread-17317] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:28:48.322 [DEBUG] [Thread-17317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:28:48.322 [DEBUG] [Thread-17317] [transport.py] [_log()] Compression: none
2026-04-15T10:28:48.322 [DEBUG] [Thread-17317] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:28:48.378 [DEBUG] [Thread-17317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:28:48.379 [DEBUG] [Thread-17317] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:28:48.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:28:48.379 [DEBUG] [Thread-17317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:28:48.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:28:48.435 [DEBUG] [Thread-17317] [transport.py] [_log()] userauth is OK
2026-04-15T10:28:48.435 [DEBUG] [Thread-17317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:28:48.435 [DEBUG] [Thread-17317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:28:48.435 [DEBUG] [Thread-17317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:28:48.436 [DEBUG] [Thread-17317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:28:48.460 [INFO] [Thread-17317] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:28:48.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:28:48.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:28:49.297 [DEBUG] [Thread-17317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:28:49.297 [DEBUG] [Thread-17317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:28:49.345 [DEBUG] [Thread-17317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:28:49.345 [DEBUG] [Thread-17317] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:28:49.354 [DEBUG] [Thread-17317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:28:49.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:28:49.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')
2026-04-15T10:28:49.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
2026-04-15T10:28:49.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:28:49.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:28:49.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:28:49.388 [DEBUG] [Thread-17317] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:28:50.287 [DEBUG] [Thread-17319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:29:02.122 [DEBUG] [Thread-17320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:29:05.331 [DEBUG] [Thread-17321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:29:19.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:29:19.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:29:19.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
2026-04-15T10:29:20.361 [DEBUG] [Thread-17322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:29:20.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 29, 8), 0.84285, 94.4462, 0.0, 10.7989, 10.1501, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:29:20.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:29:08
2026-04-15T10:29:21.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:29:21.522 [DEBUG] [Thread-17323] [transport.py] [_log()] starting thread (client mode): 0xee925c30
2026-04-15T10:29:21.522 [DEBUG] [Thread-17323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:29:21.540 [DEBUG] [Thread-17323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:29:21.541 [INFO] [Thread-17323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:29:21.544 [DEBUG] [Thread-17323] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:29:21.544 [DEBUG] [Thread-17323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:29:21.544 [DEBUG] [Thread-17323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:29:21.544 [DEBUG] [Thread-17323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:29:21.544 [DEBUG] [Thread-17323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:29:21.544 [DEBUG] [Thread-17323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:29:21.544 [DEBUG] [Thread-17323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:29:21.545 [DEBUG] [Thread-17323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:29:21.545 [DEBUG] [Thread-17323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:29:21.545 [DEBUG] [Thread-17323] [transport.py] [_log()] client lang: <none>
2026-04-15T10:29:21.545 [DEBUG] [Thread-17323] [transport.py] [_log()] server lang: <none>
2026-04-15T10:29:21.545 [DEBUG] [Thread-17323] [transport.py] [_log()] kex follows: False
2026-04-15T10:29:21.545 [DEBUG] [Thread-17323] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:29:21.545 [DEBUG] [Thread-17323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:29:21.545 [DEBUG] [Thread-17323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:29:21.545 [DEBUG] [Thread-17323] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:29:21.545 [DEBUG] [Thread-17323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:29:21.545 [DEBUG] [Thread-17323] [transport.py] [_log()] Compression: none
2026-04-15T10:29:21.546 [DEBUG] [Thread-17323] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:29:21.561 [DEBUG] [Thread-17323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:29:21.562 [DEBUG] [Thread-17323] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:29:21.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:29:21.563 [DEBUG] [Thread-17323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:29:21.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:29:21.564 [DEBUG] [Thread-17323] [transport.py] [_log()] userauth is OK
2026-04-15T10:29:21.564 [DEBUG] [Thread-17323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:29:21.564 [DEBUG] [Thread-17323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:29:21.564 [DEBUG] [Thread-17323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:29:21.564 [DEBUG] [Thread-17323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:29:21.582 [INFO] [Thread-17323] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:29:21.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:29:22.187 [DEBUG] [Thread-17323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:29:22.188 [DEBUG] [Thread-17323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:29:22.188 [DEBUG] [Thread-17323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:29:22.228 [DEBUG] [Thread-17323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:29:22.228 [DEBUG] [Thread-17323] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:29:22.231 [DEBUG] [Thread-17323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:29:22.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:29:22.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:29:22.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:29:22.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:29:22.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:29:22.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:29:22.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:29:22.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:29:22.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:29:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.353602 -999.00  +10.80  19.30     86   +8.70 1 3 1 2 1   888    0 3.44 64.90 ----- 19.3 19.3 288.8 23.8 16.2 -6.5 15.8 -6.0 15.2 -4.8 15.6 -5.2
2026-04-15T10:29:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:29:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:29:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.353602
2026-04-15T10:29:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:29:22.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:29:22.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:29:22.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:29:22.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:29:22.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:29:08', tmtdew=0.84285, humidity=94.4462, cloud=0.0, wind=10.7989, temperature=10.1501, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:29:11.213', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:29:22.257 [DEBUG] [Thread-17323] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:29:22.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:29:22.507 [DEBUG] [Thread-17326] [transport.py] [_log()] starting thread (client mode): 0xee924250
2026-04-15T10:29:22.508 [DEBUG] [Thread-17326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:29:22.522 [DEBUG] [Thread-17326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:29:22.522 [INFO] [Thread-17326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:29:22.529 [DEBUG] [Thread-17326] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:29:22.529 [DEBUG] [Thread-17326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:29:22.529 [DEBUG] [Thread-17326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:29:22.529 [DEBUG] [Thread-17326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:29:22.530 [DEBUG] [Thread-17326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:29:22.530 [DEBUG] [Thread-17326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:29:22.530 [DEBUG] [Thread-17326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:29:22.530 [DEBUG] [Thread-17326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:29:22.530 [DEBUG] [Thread-17326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:29:22.530 [DEBUG] [Thread-17326] [transport.py] [_log()] client lang: <none>
2026-04-15T10:29:22.530 [DEBUG] [Thread-17326] [transport.py] [_log()] server lang: <none>
2026-04-15T10:29:22.530 [DEBUG] [Thread-17326] [transport.py] [_log()] kex follows: False
2026-04-15T10:29:22.530 [DEBUG] [Thread-17326] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:29:22.530 [DEBUG] [Thread-17326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:29:22.530 [DEBUG] [Thread-17326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:29:22.531 [DEBUG] [Thread-17326] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:29:22.531 [DEBUG] [Thread-17326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:29:22.531 [DEBUG] [Thread-17326] [transport.py] [_log()] Compression: none
2026-04-15T10:29:22.531 [DEBUG] [Thread-17326] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:29:22.588 [DEBUG] [Thread-17326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:29:22.589 [DEBUG] [Thread-17326] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:29:22.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:29:22.589 [DEBUG] [Thread-17326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:29:22.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:29:22.645 [DEBUG] [Thread-17326] [transport.py] [_log()] userauth is OK
2026-04-15T10:29:22.645 [DEBUG] [Thread-17326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:29:22.645 [DEBUG] [Thread-17326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:29:22.646 [DEBUG] [Thread-17326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:29:22.646 [DEBUG] [Thread-17326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:29:22.670 [INFO] [Thread-17326] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:29:22.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:29:22.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:29:23.494 [DEBUG] [Thread-17326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:29:23.495 [DEBUG] [Thread-17326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:29:23.543 [DEBUG] [Thread-17326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:29:23.543 [DEBUG] [Thread-17326] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:29:23.552 [DEBUG] [Thread-17326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:29:23.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:29:23.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')
2026-04-15T10:29:23.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
2026-04-15T10:29:23.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:29:23.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:29:23.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:29:23.592 [DEBUG] [Thread-17326] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:29:29.610 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:29:29.611 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:29:35.393 [DEBUG] [Thread-17328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:29:50.436 [DEBUG] [Thread-17329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:29:53.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:29:53.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:29:53.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
2026-04-15T10:29:54.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 29, 43), 1.60336, 89.7928, 0.0, 18.1728, 11.1997, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:29:54.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:29:43
2026-04-15T10:29:55.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:29:55.743 [DEBUG] [Thread-17330] [transport.py] [_log()] starting thread (client mode): 0xf1365630
2026-04-15T10:29:55.743 [DEBUG] [Thread-17330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:29:55.762 [DEBUG] [Thread-17330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:29:55.762 [INFO] [Thread-17330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:29:55.765 [DEBUG] [Thread-17330] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:29:55.765 [DEBUG] [Thread-17330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:29:55.765 [DEBUG] [Thread-17330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:29:55.765 [DEBUG] [Thread-17330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:29:55.765 [DEBUG] [Thread-17330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:29:55.765 [DEBUG] [Thread-17330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:29:55.765 [DEBUG] [Thread-17330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:29:55.765 [DEBUG] [Thread-17330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:29:55.765 [DEBUG] [Thread-17330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:29:55.766 [DEBUG] [Thread-17330] [transport.py] [_log()] client lang: <none>
2026-04-15T10:29:55.766 [DEBUG] [Thread-17330] [transport.py] [_log()] server lang: <none>
2026-04-15T10:29:55.766 [DEBUG] [Thread-17330] [transport.py] [_log()] kex follows: False
2026-04-15T10:29:55.766 [DEBUG] [Thread-17330] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:29:55.766 [DEBUG] [Thread-17330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:29:55.766 [DEBUG] [Thread-17330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:29:55.766 [DEBUG] [Thread-17330] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:29:55.766 [DEBUG] [Thread-17330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:29:55.766 [DEBUG] [Thread-17330] [transport.py] [_log()] Compression: none
2026-04-15T10:29:55.766 [DEBUG] [Thread-17330] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:29:55.785 [DEBUG] [Thread-17330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:29:55.785 [DEBUG] [Thread-17330] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:29:55.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:29:55.786 [DEBUG] [Thread-17330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:29:55.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:29:55.788 [DEBUG] [Thread-17330] [transport.py] [_log()] userauth is OK
2026-04-15T10:29:55.788 [DEBUG] [Thread-17330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:29:55.788 [DEBUG] [Thread-17330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:29:55.788 [DEBUG] [Thread-17330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:29:55.788 [DEBUG] [Thread-17330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:29:55.806 [INFO] [Thread-17330] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:29:55.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:29:56.372 [DEBUG] [Thread-17330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:29:56.372 [DEBUG] [Thread-17330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:29:56.373 [DEBUG] [Thread-17330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:29:56.415 [DEBUG] [Thread-17330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:29:56.415 [DEBUG] [Thread-17330] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:29:56.416 [DEBUG] [Thread-17330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:29:56.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:29:56.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:29:56.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:29:56.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:29:56.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:29:56.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:29:56.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:29:56.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:29:56.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:29:56.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.353949 -999.00  +10.80  17.06     86   +8.70 1 3 1 2 1   888    0 3.67 72.31 ----- 17.1 17.1 306.0 19.4 16.2 -5.9 15.8 -5.8 15.0 -5.8 15.7 -5.0
2026-04-15T10:29:56.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:29:56.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:29:56.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.353949
2026-04-15T10:29:56.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:29:56.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:29:56.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:29:56.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:29:56.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:29:56.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:29:43', tmtdew=1.60336, humidity=89.7928, cloud=0.0, wind=18.1728, temperature=11.1997, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:29:41.194', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:29:56.435 [DEBUG] [Thread-17330] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:29:56.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:29:56.649 [DEBUG] [Thread-17333] [transport.py] [_log()] starting thread (client mode): 0xee90fa30
2026-04-15T10:29:56.649 [DEBUG] [Thread-17333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:29:56.663 [DEBUG] [Thread-17333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:29:56.663 [INFO] [Thread-17333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:29:56.671 [DEBUG] [Thread-17333] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:29:56.671 [DEBUG] [Thread-17333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:29:56.671 [DEBUG] [Thread-17333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:29:56.671 [DEBUG] [Thread-17333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:29:56.671 [DEBUG] [Thread-17333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:29:56.671 [DEBUG] [Thread-17333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:29:56.672 [DEBUG] [Thread-17333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:29:56.672 [DEBUG] [Thread-17333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:29:56.672 [DEBUG] [Thread-17333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:29:56.672 [DEBUG] [Thread-17333] [transport.py] [_log()] client lang: <none>
2026-04-15T10:29:56.672 [DEBUG] [Thread-17333] [transport.py] [_log()] server lang: <none>
2026-04-15T10:29:56.672 [DEBUG] [Thread-17333] [transport.py] [_log()] kex follows: False
2026-04-15T10:29:56.672 [DEBUG] [Thread-17333] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:29:56.672 [DEBUG] [Thread-17333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:29:56.672 [DEBUG] [Thread-17333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:29:56.672 [DEBUG] [Thread-17333] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:29:56.672 [DEBUG] [Thread-17333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:29:56.672 [DEBUG] [Thread-17333] [transport.py] [_log()] Compression: none
2026-04-15T10:29:56.672 [DEBUG] [Thread-17333] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:29:56.727 [DEBUG] [Thread-17333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:29:56.727 [DEBUG] [Thread-17333] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:29:56.727 [DEBUG] [Thread-17333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:29:56.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:29:56.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:29:56.783 [DEBUG] [Thread-17333] [transport.py] [_log()] userauth is OK
2026-04-15T10:29:56.784 [DEBUG] [Thread-17333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:29:56.784 [DEBUG] [Thread-17333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:29:56.784 [DEBUG] [Thread-17333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:29:56.784 [DEBUG] [Thread-17333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:29:56.809 [INFO] [Thread-17333] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:29:56.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:29:56.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:29:57.663 [DEBUG] [Thread-17333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:29:57.663 [DEBUG] [Thread-17333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:29:57.711 [DEBUG] [Thread-17333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:29:57.711 [DEBUG] [Thread-17333] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:29:57.720 [DEBUG] [Thread-17333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:29:57.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:29:57.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')
2026-04-15T10:29:57.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
2026-04-15T10:29:57.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:29:57.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:29:57.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:29:57.755 [DEBUG] [Thread-17333] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:30:02.220 [DEBUG] [Thread-17335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:30:05.466 [DEBUG] [Thread-17336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:30:20.511 [DEBUG] [Thread-17337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:30:27.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:30:27.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:30:27.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
2026-04-15T10:30:29.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 30, 18), 0.93014, 93.9319, 0.0, 18.7567, 10.2827, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:30:29.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:30:18
2026-04-15T10:30:29.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:30:29.751 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:30:29.752 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:30:29.855 [DEBUG] [Thread-17338] [transport.py] [_log()] starting thread (client mode): 0xf1366d70
2026-04-15T10:30:29.855 [DEBUG] [Thread-17338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:30:29.875 [DEBUG] [Thread-17338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:30:29.875 [INFO] [Thread-17338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:30:29.877 [DEBUG] [Thread-17338] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:30:29.877 [DEBUG] [Thread-17338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:30:29.877 [DEBUG] [Thread-17338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:30:29.877 [DEBUG] [Thread-17338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:30:29.877 [DEBUG] [Thread-17338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:30:29.877 [DEBUG] [Thread-17338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:30:29.877 [DEBUG] [Thread-17338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:30:29.877 [DEBUG] [Thread-17338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:30:29.877 [DEBUG] [Thread-17338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:30:29.877 [DEBUG] [Thread-17338] [transport.py] [_log()] client lang: <none>
2026-04-15T10:30:29.877 [DEBUG] [Thread-17338] [transport.py] [_log()] server lang: <none>
2026-04-15T10:30:29.878 [DEBUG] [Thread-17338] [transport.py] [_log()] kex follows: False
2026-04-15T10:30:29.878 [DEBUG] [Thread-17338] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:30:29.878 [DEBUG] [Thread-17338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:30:29.878 [DEBUG] [Thread-17338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:30:29.878 [DEBUG] [Thread-17338] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:30:29.878 [DEBUG] [Thread-17338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:30:29.878 [DEBUG] [Thread-17338] [transport.py] [_log()] Compression: none
2026-04-15T10:30:29.878 [DEBUG] [Thread-17338] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:30:29.897 [DEBUG] [Thread-17338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:30:29.898 [DEBUG] [Thread-17338] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:30:29.898 [DEBUG] [Thread-17338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:30:29.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:30:29.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:30:29.940 [DEBUG] [Thread-17338] [transport.py] [_log()] userauth is OK
2026-04-15T10:30:29.940 [DEBUG] [Thread-17338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:30:29.941 [DEBUG] [Thread-17338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:30:29.941 [DEBUG] [Thread-17338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:30:29.941 [DEBUG] [Thread-17338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:30:29.978 [INFO] [Thread-17338] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:30:29.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:30:35.541 [DEBUG] [Thread-17340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:30:36.318 [DEBUG] [Thread-17338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:30:36.319 [DEBUG] [Thread-17338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:30:36.319 [DEBUG] [Thread-17338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:30:36.360 [DEBUG] [Thread-17338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:30:36.360 [DEBUG] [Thread-17338] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:30:36.362 [DEBUG] [Thread-17338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:30:36.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:30:36.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:30:36.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:30:36.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:30:36.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:30:36.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:30:36.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:30:36.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:30:36.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:30:36.498 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-15T10:30:36.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:30:18', tmtdew=0.93014, humidity=93.9319, cloud=0.0, wind=18.7567, temperature=10.2827, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:30:36.500 [DEBUG] [Thread-17338] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:30:36.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:30:36.759 [DEBUG] [Thread-17342] [transport.py] [_log()] starting thread (client mode): 0xf13c8a30
2026-04-15T10:30:36.760 [DEBUG] [Thread-17342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:30:36.774 [DEBUG] [Thread-17342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:30:36.774 [INFO] [Thread-17342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:30:36.782 [DEBUG] [Thread-17342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:30:36.782 [DEBUG] [Thread-17342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:30:36.782 [DEBUG] [Thread-17342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:30:36.782 [DEBUG] [Thread-17342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:30:36.782 [DEBUG] [Thread-17342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:30:36.783 [DEBUG] [Thread-17342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:30:36.783 [DEBUG] [Thread-17342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:30:36.783 [DEBUG] [Thread-17342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:30:36.783 [DEBUG] [Thread-17342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:30:36.783 [DEBUG] [Thread-17342] [transport.py] [_log()] client lang: <none>
2026-04-15T10:30:36.783 [DEBUG] [Thread-17342] [transport.py] [_log()] server lang: <none>
2026-04-15T10:30:36.783 [DEBUG] [Thread-17342] [transport.py] [_log()] kex follows: False
2026-04-15T10:30:36.783 [DEBUG] [Thread-17342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:30:36.783 [DEBUG] [Thread-17342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:30:36.783 [DEBUG] [Thread-17342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:30:36.783 [DEBUG] [Thread-17342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:30:36.784 [DEBUG] [Thread-17342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:30:36.784 [DEBUG] [Thread-17342] [transport.py] [_log()] Compression: none
2026-04-15T10:30:36.784 [DEBUG] [Thread-17342] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:30:36.838 [DEBUG] [Thread-17342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:30:36.839 [DEBUG] [Thread-17342] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:30:36.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:30:36.840 [DEBUG] [Thread-17342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:30:36.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:30:36.896 [DEBUG] [Thread-17342] [transport.py] [_log()] userauth is OK
2026-04-15T10:30:36.896 [DEBUG] [Thread-17342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:30:36.897 [DEBUG] [Thread-17342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:30:36.897 [DEBUG] [Thread-17342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:30:36.897 [DEBUG] [Thread-17342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:30:36.922 [INFO] [Thread-17342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:30:36.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:30:36.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:30:37.748 [DEBUG] [Thread-17342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:30:37.748 [DEBUG] [Thread-17342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:30:37.796 [DEBUG] [Thread-17342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:30:37.796 [DEBUG] [Thread-17342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:30:37.805 [DEBUG] [Thread-17342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:30:37.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:30:37.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')
2026-04-15T10:30:37.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
2026-04-15T10:30:37.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:30:37.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:30:37.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:30:37.840 [DEBUG] [Thread-17342] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:30:50.572 [DEBUG] [Thread-17344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:31:02.326 [DEBUG] [Thread-17345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:31:05.619 [DEBUG] [Thread-17346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:31:07.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:31:07.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:31:07.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:31:09.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 30, 54), 1.89281, 88.0677, 0.0, 16.7616, 11.266, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:31:09.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:30:54
2026-04-15T10:31:09.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:31:09.925 [DEBUG] [Thread-17347] [transport.py] [_log()] starting thread (client mode): 0xf1364d60
2026-04-15T10:31:09.925 [DEBUG] [Thread-17347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:31:09.947 [DEBUG] [Thread-17347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:31:09.947 [INFO] [Thread-17347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:31:09.951 [DEBUG] [Thread-17347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:31:09.951 [DEBUG] [Thread-17347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:31:09.951 [DEBUG] [Thread-17347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:31:09.951 [DEBUG] [Thread-17347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:31:09.951 [DEBUG] [Thread-17347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:31:09.951 [DEBUG] [Thread-17347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:31:09.951 [DEBUG] [Thread-17347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:31:09.951 [DEBUG] [Thread-17347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:31:09.951 [DEBUG] [Thread-17347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:31:09.951 [DEBUG] [Thread-17347] [transport.py] [_log()] client lang: <none>
2026-04-15T10:31:09.951 [DEBUG] [Thread-17347] [transport.py] [_log()] server lang: <none>
2026-04-15T10:31:09.952 [DEBUG] [Thread-17347] [transport.py] [_log()] kex follows: False
2026-04-15T10:31:09.952 [DEBUG] [Thread-17347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:31:09.952 [DEBUG] [Thread-17347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:31:09.952 [DEBUG] [Thread-17347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:31:09.952 [DEBUG] [Thread-17347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:31:09.952 [DEBUG] [Thread-17347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:31:09.952 [DEBUG] [Thread-17347] [transport.py] [_log()] Compression: none
2026-04-15T10:31:09.952 [DEBUG] [Thread-17347] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:31:09.969 [DEBUG] [Thread-17347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:31:09.970 [DEBUG] [Thread-17347] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:31:09.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:31:09.970 [DEBUG] [Thread-17347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:31:09.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:31:09.971 [DEBUG] [Thread-17347] [transport.py] [_log()] userauth is OK
2026-04-15T10:31:09.971 [DEBUG] [Thread-17347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:31:09.971 [DEBUG] [Thread-17347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:31:09.972 [DEBUG] [Thread-17347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:31:09.972 [DEBUG] [Thread-17347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:31:09.988 [INFO] [Thread-17347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:31:09.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:31:10.704 [DEBUG] [Thread-17347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:31:10.705 [DEBUG] [Thread-17347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:31:10.705 [DEBUG] [Thread-17347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:31:10.745 [DEBUG] [Thread-17347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:31:10.746 [DEBUG] [Thread-17347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:31:10.747 [DEBUG] [Thread-17347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:31:10.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:31:10.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:31:10.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:31:10.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:31:10.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:31:10.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:31:10.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:31:10.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:31:10.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:31:10.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.354296 -999.00  +10.80  15.81     86   +8.60 1 3 1 2 1   888    0 3.62 69.49 ----- 15.8 15.8 296.8 18.0 16.2 -5.8 15.8 -5.5 15.1 -4.5 15.6 -4.7
2026-04-15T10:31:10.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:31:10.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:31:10.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.354296
2026-04-15T10:31:10.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:31:10.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:31:10.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:31:10.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:31:10.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:31:10.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:30:54', tmtdew=1.89281, humidity=88.0677, cloud=0.0, wind=16.7616, temperature=11.266, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:30:11.174', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:31:10.758 [DEBUG] [Thread-17347] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:31:10.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:31:10.965 [DEBUG] [Thread-17350] [transport.py] [_log()] starting thread (client mode): 0xf1364100
2026-04-15T10:31:10.965 [DEBUG] [Thread-17350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:31:10.979 [DEBUG] [Thread-17350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:31:10.980 [INFO] [Thread-17350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:31:10.987 [DEBUG] [Thread-17350] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:31:10.987 [DEBUG] [Thread-17350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:31:10.987 [DEBUG] [Thread-17350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:31:10.987 [DEBUG] [Thread-17350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:31:10.987 [DEBUG] [Thread-17350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:31:10.987 [DEBUG] [Thread-17350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:31:10.987 [DEBUG] [Thread-17350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:31:10.987 [DEBUG] [Thread-17350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:31:10.987 [DEBUG] [Thread-17350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:31:10.988 [DEBUG] [Thread-17350] [transport.py] [_log()] client lang: <none>
2026-04-15T10:31:10.988 [DEBUG] [Thread-17350] [transport.py] [_log()] server lang: <none>
2026-04-15T10:31:10.988 [DEBUG] [Thread-17350] [transport.py] [_log()] kex follows: False
2026-04-15T10:31:10.988 [DEBUG] [Thread-17350] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:31:10.988 [DEBUG] [Thread-17350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:31:10.988 [DEBUG] [Thread-17350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:31:10.988 [DEBUG] [Thread-17350] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:31:10.988 [DEBUG] [Thread-17350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:31:10.988 [DEBUG] [Thread-17350] [transport.py] [_log()] Compression: none
2026-04-15T10:31:10.988 [DEBUG] [Thread-17350] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:31:11.044 [DEBUG] [Thread-17350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:31:11.044 [DEBUG] [Thread-17350] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:31:11.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:31:11.045 [DEBUG] [Thread-17350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:31:11.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:31:11.104 [DEBUG] [Thread-17350] [transport.py] [_log()] userauth is OK
2026-04-15T10:31:11.104 [DEBUG] [Thread-17350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:31:11.104 [DEBUG] [Thread-17350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:31:11.104 [DEBUG] [Thread-17350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:31:11.104 [DEBUG] [Thread-17350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:31:11.122 [INFO] [Thread-17350] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:31:11.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:31:11.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:31:11.954 [DEBUG] [Thread-17350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:31:11.954 [DEBUG] [Thread-17350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:31:12.002 [DEBUG] [Thread-17350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:31:12.002 [DEBUG] [Thread-17350] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:31:12.010 [DEBUG] [Thread-17350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:31:12.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:31:12.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')
2026-04-15T10:31:12.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') -> 00000000
2026-04-15T10:31:12.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:31:12.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:31:12.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:31:12.046 [DEBUG] [Thread-17350] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:31:20.650 [DEBUG] [Thread-17352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:31:29.892 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:31:29.893 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:31:35.694 [DEBUG] [Thread-17353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:31:42.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:31:42.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:31:42.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:31:43.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 31, 29), 0.963795, 93.7328, 0.0, 16.2158, 10.3493, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:31:43.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:31:29
2026-04-15T10:31:43.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:31:44.198 [DEBUG] [Thread-17354] [transport.py] [_log()] starting thread (client mode): 0xf1335c90
2026-04-15T10:31:44.198 [DEBUG] [Thread-17354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:31:44.216 [DEBUG] [Thread-17354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:31:44.216 [INFO] [Thread-17354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:31:44.219 [DEBUG] [Thread-17354] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:31:44.219 [DEBUG] [Thread-17354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:31:44.219 [DEBUG] [Thread-17354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:31:44.220 [DEBUG] [Thread-17354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:31:44.220 [DEBUG] [Thread-17354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:31:44.220 [DEBUG] [Thread-17354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:31:44.220 [DEBUG] [Thread-17354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:31:44.220 [DEBUG] [Thread-17354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:31:44.220 [DEBUG] [Thread-17354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:31:44.220 [DEBUG] [Thread-17354] [transport.py] [_log()] client lang: <none>
2026-04-15T10:31:44.220 [DEBUG] [Thread-17354] [transport.py] [_log()] server lang: <none>
2026-04-15T10:31:44.220 [DEBUG] [Thread-17354] [transport.py] [_log()] kex follows: False
2026-04-15T10:31:44.220 [DEBUG] [Thread-17354] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:31:44.220 [DEBUG] [Thread-17354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:31:44.220 [DEBUG] [Thread-17354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:31:44.220 [DEBUG] [Thread-17354] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:31:44.221 [DEBUG] [Thread-17354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:31:44.221 [DEBUG] [Thread-17354] [transport.py] [_log()] Compression: none
2026-04-15T10:31:44.221 [DEBUG] [Thread-17354] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:31:44.237 [DEBUG] [Thread-17354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:31:44.237 [DEBUG] [Thread-17354] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:31:44.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:31:44.238 [DEBUG] [Thread-17354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:31:44.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:31:44.239 [DEBUG] [Thread-17354] [transport.py] [_log()] userauth is OK
2026-04-15T10:31:44.239 [DEBUG] [Thread-17354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:31:44.239 [DEBUG] [Thread-17354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:31:44.239 [DEBUG] [Thread-17354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:31:44.240 [DEBUG] [Thread-17354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:31:44.263 [INFO] [Thread-17354] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:31:44.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:31:45.015 [DEBUG] [Thread-17354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:31:45.016 [DEBUG] [Thread-17354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:31:45.016 [DEBUG] [Thread-17354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:31:45.056 [DEBUG] [Thread-17354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:31:45.056 [DEBUG] [Thread-17354] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:31:45.061 [DEBUG] [Thread-17354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:31:45.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:31:45.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:31:45.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:31:45.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:31:45.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:31:45.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:31:45.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:31:45.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:31:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:31:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.354644 -999.00  +10.90  12.41     87   +8.90 1 3 1 2 1   888    0 3.44 64.10 ----- 12.4 12.4 299.6 16.4 16.2 -5.3 15.8 -5.1 15.2 -4.2 15.6 -4.6
2026-04-15T10:31:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:31:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:31:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.354644
2026-04-15T10:31:45.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:31:45.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:31:45.087 [DEBUG] [Thread-17354] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:31:45.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:31:45.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:31:45.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:31:45.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:31:29', tmtdew=0.963795, humidity=93.7328, cloud=0.0, wind=16.2158, temperature=10.3493, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:30:41.242', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:31:45.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:31:45.348 [DEBUG] [Thread-17357] [transport.py] [_log()] starting thread (client mode): 0xee9261a0
2026-04-15T10:31:45.349 [DEBUG] [Thread-17357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:31:45.363 [DEBUG] [Thread-17357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:31:45.363 [INFO] [Thread-17357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:31:45.370 [DEBUG] [Thread-17357] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:31:45.370 [DEBUG] [Thread-17357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:31:45.370 [DEBUG] [Thread-17357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:31:45.370 [DEBUG] [Thread-17357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:31:45.370 [DEBUG] [Thread-17357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:31:45.370 [DEBUG] [Thread-17357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:31:45.371 [DEBUG] [Thread-17357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:31:45.371 [DEBUG] [Thread-17357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:31:45.371 [DEBUG] [Thread-17357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:31:45.371 [DEBUG] [Thread-17357] [transport.py] [_log()] client lang: <none>
2026-04-15T10:31:45.371 [DEBUG] [Thread-17357] [transport.py] [_log()] server lang: <none>
2026-04-15T10:31:45.371 [DEBUG] [Thread-17357] [transport.py] [_log()] kex follows: False
2026-04-15T10:31:45.371 [DEBUG] [Thread-17357] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:31:45.371 [DEBUG] [Thread-17357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:31:45.371 [DEBUG] [Thread-17357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:31:45.371 [DEBUG] [Thread-17357] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:31:45.371 [DEBUG] [Thread-17357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:31:45.372 [DEBUG] [Thread-17357] [transport.py] [_log()] Compression: none
2026-04-15T10:31:45.372 [DEBUG] [Thread-17357] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:31:45.427 [DEBUG] [Thread-17357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:31:45.427 [DEBUG] [Thread-17357] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:31:45.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:31:45.428 [DEBUG] [Thread-17357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:31:45.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:31:45.483 [DEBUG] [Thread-17357] [transport.py] [_log()] userauth is OK
2026-04-15T10:31:45.483 [DEBUG] [Thread-17357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:31:45.483 [DEBUG] [Thread-17357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:31:45.484 [DEBUG] [Thread-17357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:31:45.484 [DEBUG] [Thread-17357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:31:45.509 [INFO] [Thread-17357] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:31:45.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:31:45.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:31:46.373 [DEBUG] [Thread-17357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:31:46.373 [DEBUG] [Thread-17357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:31:46.421 [DEBUG] [Thread-17357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:31:46.421 [DEBUG] [Thread-17357] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:31:46.430 [DEBUG] [Thread-17357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:31:46.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:31:46.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')
2026-04-15T10:31:46.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
2026-04-15T10:31:46.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:31:46.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:31:46.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:31:46.462 [DEBUG] [Thread-17357] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:31:50.725 [DEBUG] [Thread-17359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:32:02.433 [DEBUG] [Thread-17360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:32:05.767 [DEBUG] [Thread-17361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:32:16.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:32:16.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:32:16.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
2026-04-15T10:32:17.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 32, 5), 0.99011, 93.5836, 0.0, 16.1629, 10.4322, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:32:17.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:32:05
2026-04-15T10:32:18.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:32:18.545 [DEBUG] [Thread-17362] [transport.py] [_log()] starting thread (client mode): 0xf1334be0
2026-04-15T10:32:18.546 [DEBUG] [Thread-17362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:32:18.565 [DEBUG] [Thread-17362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:32:18.565 [INFO] [Thread-17362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:32:18.569 [DEBUG] [Thread-17362] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:32:18.569 [DEBUG] [Thread-17362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:32:18.569 [DEBUG] [Thread-17362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:32:18.569 [DEBUG] [Thread-17362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:32:18.569 [DEBUG] [Thread-17362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:32:18.569 [DEBUG] [Thread-17362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:32:18.569 [DEBUG] [Thread-17362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:32:18.569 [DEBUG] [Thread-17362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:32:18.569 [DEBUG] [Thread-17362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:32:18.570 [DEBUG] [Thread-17362] [transport.py] [_log()] client lang: <none>
2026-04-15T10:32:18.570 [DEBUG] [Thread-17362] [transport.py] [_log()] server lang: <none>
2026-04-15T10:32:18.570 [DEBUG] [Thread-17362] [transport.py] [_log()] kex follows: False
2026-04-15T10:32:18.570 [DEBUG] [Thread-17362] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:32:18.570 [DEBUG] [Thread-17362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:32:18.570 [DEBUG] [Thread-17362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:32:18.570 [DEBUG] [Thread-17362] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:32:18.570 [DEBUG] [Thread-17362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:32:18.570 [DEBUG] [Thread-17362] [transport.py] [_log()] Compression: none
2026-04-15T10:32:18.570 [DEBUG] [Thread-17362] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:32:18.579 [DEBUG] [Thread-17362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:32:18.579 [DEBUG] [Thread-17362] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:32:18.579 [DEBUG] [Thread-17362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:32:18.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:32:18.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:32:18.580 [DEBUG] [Thread-17362] [transport.py] [_log()] userauth is OK
2026-04-15T10:32:18.581 [DEBUG] [Thread-17362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:32:18.581 [DEBUG] [Thread-17362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:32:18.581 [DEBUG] [Thread-17362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:32:18.581 [DEBUG] [Thread-17362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:32:18.599 [INFO] [Thread-17362] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:32:18.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:32:19.171 [DEBUG] [Thread-17362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:32:19.171 [DEBUG] [Thread-17362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:32:19.172 [DEBUG] [Thread-17362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:32:19.212 [DEBUG] [Thread-17362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:32:19.212 [DEBUG] [Thread-17362] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:32:19.215 [DEBUG] [Thread-17362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:32:19.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:32:19.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:32:19.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:32:19.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:32:19.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:32:19.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:32:19.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:32:19.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:32:19.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:32:19.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.355685 -999.00  +10.80  21.10     87   +8.80 1 3 1 2 1   888    0 3.46 61.71 ----- 21.1 21.1 293.0 23.3 16.1 -6.6 15.7 -6.4 15.1 -5.0 15.6 -6.8
2026-04-15T10:32:19.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:32:19.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:32:19.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.355685
2026-04-15T10:32:19.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:32:19.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:32:19.241 [DEBUG] [Thread-17362] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:32:19.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:32:19.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:32:19.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:32:19.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:32:05', tmtdew=0.99011, humidity=93.5836, cloud=0.0, wind=16.1629, temperature=10.4322, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:32:11.184', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:32:19.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:32:19.494 [DEBUG] [Thread-17365] [transport.py] [_log()] starting thread (client mode): 0xf1335a20
2026-04-15T10:32:19.494 [DEBUG] [Thread-17365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:32:19.508 [DEBUG] [Thread-17365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:32:19.508 [INFO] [Thread-17365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:32:19.515 [DEBUG] [Thread-17365] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:32:19.515 [DEBUG] [Thread-17365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:32:19.515 [DEBUG] [Thread-17365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:32:19.515 [DEBUG] [Thread-17365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:32:19.516 [DEBUG] [Thread-17365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:32:19.516 [DEBUG] [Thread-17365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:32:19.516 [DEBUG] [Thread-17365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:32:19.516 [DEBUG] [Thread-17365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:32:19.516 [DEBUG] [Thread-17365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:32:19.516 [DEBUG] [Thread-17365] [transport.py] [_log()] client lang: <none>
2026-04-15T10:32:19.516 [DEBUG] [Thread-17365] [transport.py] [_log()] server lang: <none>
2026-04-15T10:32:19.516 [DEBUG] [Thread-17365] [transport.py] [_log()] kex follows: False
2026-04-15T10:32:19.516 [DEBUG] [Thread-17365] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:32:19.516 [DEBUG] [Thread-17365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:32:19.516 [DEBUG] [Thread-17365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:32:19.517 [DEBUG] [Thread-17365] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:32:19.517 [DEBUG] [Thread-17365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:32:19.517 [DEBUG] [Thread-17365] [transport.py] [_log()] Compression: none
2026-04-15T10:32:19.517 [DEBUG] [Thread-17365] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:32:19.573 [DEBUG] [Thread-17365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:32:19.573 [DEBUG] [Thread-17365] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:32:19.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:32:19.574 [DEBUG] [Thread-17365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:32:19.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:32:19.630 [DEBUG] [Thread-17365] [transport.py] [_log()] userauth is OK
2026-04-15T10:32:19.631 [DEBUG] [Thread-17365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:32:19.631 [DEBUG] [Thread-17365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:32:19.631 [DEBUG] [Thread-17365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:32:19.631 [DEBUG] [Thread-17365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:32:19.658 [INFO] [Thread-17365] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:32:19.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:32:19.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:32:20.499 [DEBUG] [Thread-17365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:32:20.499 [DEBUG] [Thread-17365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:32:20.547 [DEBUG] [Thread-17365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:32:20.547 [DEBUG] [Thread-17365] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:32:20.556 [DEBUG] [Thread-17365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:32:20.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:32:20.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')
2026-04-15T10:32:20.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
2026-04-15T10:32:20.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:32:20.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:32:20.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:32:20.593 [DEBUG] [Thread-17365] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:32:20.795 [DEBUG] [Thread-17367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:32:30.034 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:32:30.036 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:32:35.841 [DEBUG] [Thread-17368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:32:50.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:32:50.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:32:50.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
2026-04-15T10:32:50.873 [DEBUG] [Thread-17369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:32:51.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 32, 40), 1.99491, 87.4704, 0.0, 16.691, 11.3321, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:32:51.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:32:40
2026-04-15T10:32:52.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:32:52.707 [DEBUG] [Thread-17370] [transport.py] [_log()] starting thread (client mode): 0xee905840
2026-04-15T10:32:52.708 [DEBUG] [Thread-17370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:32:52.726 [DEBUG] [Thread-17370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:32:52.726 [INFO] [Thread-17370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:32:52.728 [DEBUG] [Thread-17370] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:32:52.728 [DEBUG] [Thread-17370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:32:52.728 [DEBUG] [Thread-17370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:32:52.728 [DEBUG] [Thread-17370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:32:52.728 [DEBUG] [Thread-17370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:32:52.728 [DEBUG] [Thread-17370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:32:52.728 [DEBUG] [Thread-17370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:32:52.728 [DEBUG] [Thread-17370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:32:52.728 [DEBUG] [Thread-17370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:32:52.728 [DEBUG] [Thread-17370] [transport.py] [_log()] client lang: <none>
2026-04-15T10:32:52.729 [DEBUG] [Thread-17370] [transport.py] [_log()] server lang: <none>
2026-04-15T10:32:52.729 [DEBUG] [Thread-17370] [transport.py] [_log()] kex follows: False
2026-04-15T10:32:52.729 [DEBUG] [Thread-17370] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:32:52.729 [DEBUG] [Thread-17370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:32:52.729 [DEBUG] [Thread-17370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:32:52.729 [DEBUG] [Thread-17370] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:32:52.729 [DEBUG] [Thread-17370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:32:52.729 [DEBUG] [Thread-17370] [transport.py] [_log()] Compression: none
2026-04-15T10:32:52.729 [DEBUG] [Thread-17370] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:32:52.737 [DEBUG] [Thread-17370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:32:52.738 [DEBUG] [Thread-17370] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:32:52.738 [DEBUG] [Thread-17370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:32:52.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:32:52.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:32:52.739 [DEBUG] [Thread-17370] [transport.py] [_log()] userauth is OK
2026-04-15T10:32:52.739 [DEBUG] [Thread-17370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:32:52.739 [DEBUG] [Thread-17370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:32:52.739 [DEBUG] [Thread-17370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:32:52.739 [DEBUG] [Thread-17370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:32:52.752 [INFO] [Thread-17370] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:32:52.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:32:53.335 [DEBUG] [Thread-17370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:32:53.336 [DEBUG] [Thread-17370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:32:53.336 [DEBUG] [Thread-17370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:32:53.376 [DEBUG] [Thread-17370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:32:53.376 [DEBUG] [Thread-17370] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:32:53.381 [DEBUG] [Thread-17370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:32:53.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:32:53.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:32:53.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:32:53.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:32:53.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:32:53.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:32:53.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:32:53.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:32:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:32:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.356031 -999.00  +10.90  17.62     87   +8.90 1 3 1 2 1   888    0 3.28 56.81 ----- 17.6 17.6 294.8 23.2 16.0 -7.8 15.7 -7.0 15.1 -6.2 15.4 -7.5
2026-04-15T10:32:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:32:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:32:53.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.356031
2026-04-15T10:32:53.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:32:53.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:32:53.404 [DEBUG] [Thread-17370] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:32:53.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:32:53.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:32:53.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:32:53.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:32:40', tmtdew=1.99491, humidity=87.4704, cloud=0.0, wind=16.691, temperature=11.3321, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:32:41.078', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:32:53.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:32:53.656 [DEBUG] [Thread-17373] [transport.py] [_log()] starting thread (client mode): 0xee905150
2026-04-15T10:32:53.657 [DEBUG] [Thread-17373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:32:53.671 [DEBUG] [Thread-17373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:32:53.671 [INFO] [Thread-17373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:32:53.678 [DEBUG] [Thread-17373] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:32:53.678 [DEBUG] [Thread-17373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:32:53.678 [DEBUG] [Thread-17373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:32:53.678 [DEBUG] [Thread-17373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:32:53.679 [DEBUG] [Thread-17373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:32:53.679 [DEBUG] [Thread-17373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:32:53.679 [DEBUG] [Thread-17373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:32:53.679 [DEBUG] [Thread-17373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:32:53.679 [DEBUG] [Thread-17373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:32:53.679 [DEBUG] [Thread-17373] [transport.py] [_log()] client lang: <none>
2026-04-15T10:32:53.679 [DEBUG] [Thread-17373] [transport.py] [_log()] server lang: <none>
2026-04-15T10:32:53.679 [DEBUG] [Thread-17373] [transport.py] [_log()] kex follows: False
2026-04-15T10:32:53.679 [DEBUG] [Thread-17373] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:32:53.679 [DEBUG] [Thread-17373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:32:53.679 [DEBUG] [Thread-17373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:32:53.679 [DEBUG] [Thread-17373] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:32:53.680 [DEBUG] [Thread-17373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:32:53.680 [DEBUG] [Thread-17373] [transport.py] [_log()] Compression: none
2026-04-15T10:32:53.680 [DEBUG] [Thread-17373] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:32:53.740 [DEBUG] [Thread-17373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:32:53.740 [DEBUG] [Thread-17373] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:32:53.741 [DEBUG] [Thread-17373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:32:53.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:32:53.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:32:53.797 [DEBUG] [Thread-17373] [transport.py] [_log()] userauth is OK
2026-04-15T10:32:53.797 [DEBUG] [Thread-17373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:32:53.797 [DEBUG] [Thread-17373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:32:53.797 [DEBUG] [Thread-17373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:32:53.798 [DEBUG] [Thread-17373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:32:53.820 [INFO] [Thread-17373] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:32:53.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:32:53.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:32:54.669 [DEBUG] [Thread-17373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:32:54.669 [DEBUG] [Thread-17373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:32:54.717 [DEBUG] [Thread-17373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:32:54.717 [DEBUG] [Thread-17373] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:32:54.726 [DEBUG] [Thread-17373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:32:54.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:32:54.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')
2026-04-15T10:32:54.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
2026-04-15T10:32:54.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:32:54.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:32:54.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:32:54.761 [DEBUG] [Thread-17373] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:33:02.556 [DEBUG] [Thread-17375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:33:05.905 [DEBUG] [Thread-17376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:33:20.952 [DEBUG] [Thread-17377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:33:24.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:33:24.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:33:24.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
2026-04-15T10:33:26.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 33, 16), 1.05542, 93.1854, 0.0, 16.1629, 10.5829, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:33:26.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:33:16
2026-04-15T10:33:26.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:33:27.009 [DEBUG] [Thread-17378] [transport.py] [_log()] starting thread (client mode): 0xf1366cb0
2026-04-15T10:33:27.009 [DEBUG] [Thread-17378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:33:27.030 [DEBUG] [Thread-17378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:33:27.031 [INFO] [Thread-17378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:33:27.032 [DEBUG] [Thread-17378] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:33:27.032 [DEBUG] [Thread-17378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:33:27.032 [DEBUG] [Thread-17378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:33:27.032 [DEBUG] [Thread-17378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:33:27.032 [DEBUG] [Thread-17378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:33:27.032 [DEBUG] [Thread-17378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:33:27.032 [DEBUG] [Thread-17378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:33:27.032 [DEBUG] [Thread-17378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:33:27.032 [DEBUG] [Thread-17378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:33:27.032 [DEBUG] [Thread-17378] [transport.py] [_log()] client lang: <none>
2026-04-15T10:33:27.033 [DEBUG] [Thread-17378] [transport.py] [_log()] server lang: <none>
2026-04-15T10:33:27.033 [DEBUG] [Thread-17378] [transport.py] [_log()] kex follows: False
2026-04-15T10:33:27.033 [DEBUG] [Thread-17378] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:33:27.033 [DEBUG] [Thread-17378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:33:27.033 [DEBUG] [Thread-17378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:33:27.033 [DEBUG] [Thread-17378] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:33:27.033 [DEBUG] [Thread-17378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:33:27.033 [DEBUG] [Thread-17378] [transport.py] [_log()] Compression: none
2026-04-15T10:33:27.033 [DEBUG] [Thread-17378] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:33:27.041 [DEBUG] [Thread-17378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:33:27.042 [DEBUG] [Thread-17378] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:33:27.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:33:27.042 [DEBUG] [Thread-17378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:33:27.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:33:27.043 [DEBUG] [Thread-17378] [transport.py] [_log()] userauth is OK
2026-04-15T10:33:27.043 [DEBUG] [Thread-17378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:33:27.043 [DEBUG] [Thread-17378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:33:27.044 [DEBUG] [Thread-17378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:33:27.044 [DEBUG] [Thread-17378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:33:27.060 [INFO] [Thread-17378] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:33:27.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:33:27.652 [DEBUG] [Thread-17378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:33:27.653 [DEBUG] [Thread-17378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:33:27.653 [DEBUG] [Thread-17378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:33:27.693 [DEBUG] [Thread-17378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:33:27.693 [DEBUG] [Thread-17378] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:33:27.696 [DEBUG] [Thread-17378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:33:27.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:33:27.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:33:27.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:33:27.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:33:27.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:33:27.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:33:27.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:33:27.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:33:27.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:33:27.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.356379 -999.00  +10.90  15.30     87   +8.90 1 3 1 2 1   888    0 3.33 57.42 ----- 15.3 15.3 290.6 22.1 16.0 -9.0 15.7 -8.2 15.1 -7.1 15.5 -8.6
2026-04-15T10:33:27.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:33:27.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:33:27.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.356379
2026-04-15T10:33:27.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:33:27.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:33:27.722 [DEBUG] [Thread-17378] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:33:27.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:33:27.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:33:27.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:33:27.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:33:16', tmtdew=1.05542, humidity=93.1854, cloud=0.0, wind=16.1629, temperature=10.5829, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:33:11.146', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:33:27.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:33:27.976 [DEBUG] [Thread-17381] [transport.py] [_log()] starting thread (client mode): 0xf13cb040
2026-04-15T10:33:27.977 [DEBUG] [Thread-17381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:33:27.995 [DEBUG] [Thread-17381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:33:27.995 [INFO] [Thread-17381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:33:28.002 [DEBUG] [Thread-17381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:33:28.002 [DEBUG] [Thread-17381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:33:28.002 [DEBUG] [Thread-17381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:33:28.003 [DEBUG] [Thread-17381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:33:28.003 [DEBUG] [Thread-17381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:33:28.003 [DEBUG] [Thread-17381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:33:28.003 [DEBUG] [Thread-17381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:33:28.003 [DEBUG] [Thread-17381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:33:28.003 [DEBUG] [Thread-17381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:33:28.003 [DEBUG] [Thread-17381] [transport.py] [_log()] client lang: <none>
2026-04-15T10:33:28.003 [DEBUG] [Thread-17381] [transport.py] [_log()] server lang: <none>
2026-04-15T10:33:28.003 [DEBUG] [Thread-17381] [transport.py] [_log()] kex follows: False
2026-04-15T10:33:28.003 [DEBUG] [Thread-17381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:33:28.003 [DEBUG] [Thread-17381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:33:28.003 [DEBUG] [Thread-17381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:33:28.004 [DEBUG] [Thread-17381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:33:28.004 [DEBUG] [Thread-17381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:33:28.004 [DEBUG] [Thread-17381] [transport.py] [_log()] Compression: none
2026-04-15T10:33:28.004 [DEBUG] [Thread-17381] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:33:28.060 [DEBUG] [Thread-17381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:33:28.060 [DEBUG] [Thread-17381] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:33:28.061 [DEBUG] [Thread-17381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:33:28.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:33:28.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:33:28.116 [DEBUG] [Thread-17381] [transport.py] [_log()] userauth is OK
2026-04-15T10:33:28.116 [DEBUG] [Thread-17381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:33:28.116 [DEBUG] [Thread-17381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:33:28.116 [DEBUG] [Thread-17381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:33:28.117 [DEBUG] [Thread-17381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:33:28.140 [INFO] [Thread-17381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:33:28.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:33:28.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:33:28.983 [DEBUG] [Thread-17381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:33:28.983 [DEBUG] [Thread-17381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:33:29.031 [DEBUG] [Thread-17381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:33:29.031 [DEBUG] [Thread-17381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:33:29.040 [DEBUG] [Thread-17381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:33:29.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:33:29.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')
2026-04-15T10:33:29.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
2026-04-15T10:33:29.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:33:29.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:33:29.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:33:29.075 [DEBUG] [Thread-17381] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:33:30.176 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:33:30.178 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:33:35.984 [DEBUG] [Thread-17383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:33:51.023 [DEBUG] [Thread-17384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:33:59.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:33:59.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:33:59.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
2026-04-15T10:34:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 33, 52), 1.97338, 87.603, 0.0, 16.7263, 11.3984, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:34:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:33:52
2026-04-15T10:34:00.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:34:01.178 [DEBUG] [Thread-17385] [transport.py] [_log()] starting thread (client mode): 0xf13c8df0
2026-04-15T10:34:01.179 [DEBUG] [Thread-17385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:34:01.194 [DEBUG] [Thread-17385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:34:01.194 [INFO] [Thread-17385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:34:01.197 [DEBUG] [Thread-17385] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:34:01.197 [DEBUG] [Thread-17385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:34:01.197 [DEBUG] [Thread-17385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:34:01.197 [DEBUG] [Thread-17385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:34:01.197 [DEBUG] [Thread-17385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:34:01.197 [DEBUG] [Thread-17385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:34:01.197 [DEBUG] [Thread-17385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:34:01.197 [DEBUG] [Thread-17385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:34:01.197 [DEBUG] [Thread-17385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:34:01.197 [DEBUG] [Thread-17385] [transport.py] [_log()] client lang: <none>
2026-04-15T10:34:01.197 [DEBUG] [Thread-17385] [transport.py] [_log()] server lang: <none>
2026-04-15T10:34:01.197 [DEBUG] [Thread-17385] [transport.py] [_log()] kex follows: False
2026-04-15T10:34:01.197 [DEBUG] [Thread-17385] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:34:01.198 [DEBUG] [Thread-17385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:34:01.198 [DEBUG] [Thread-17385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:34:01.198 [DEBUG] [Thread-17385] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:34:01.198 [DEBUG] [Thread-17385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:34:01.198 [DEBUG] [Thread-17385] [transport.py] [_log()] Compression: none
2026-04-15T10:34:01.198 [DEBUG] [Thread-17385] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:34:01.215 [DEBUG] [Thread-17385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:34:01.216 [DEBUG] [Thread-17385] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:34:01.216 [DEBUG] [Thread-17385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:34:01.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:34:01.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:34:01.217 [DEBUG] [Thread-17385] [transport.py] [_log()] userauth is OK
2026-04-15T10:34:01.217 [DEBUG] [Thread-17385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:34:01.217 [DEBUG] [Thread-17385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:34:01.217 [DEBUG] [Thread-17385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:34:01.217 [DEBUG] [Thread-17385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:34:01.233 [INFO] [Thread-17385] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:34:01.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:34:01.865 [DEBUG] [Thread-17385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:34:01.866 [DEBUG] [Thread-17385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:34:01.866 [DEBUG] [Thread-17385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:34:01.906 [DEBUG] [Thread-17385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:34:01.906 [DEBUG] [Thread-17385] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:34:01.908 [DEBUG] [Thread-17385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:34:01.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:34:01.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:34:01.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:34:01.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:34:01.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:34:01.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:34:01.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:34:01.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:34:01.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:34:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.356726 -999.00  +10.90  18.76     87   +8.80 1 3 1 2 1   888    0 3.28 56.39 ----- 18.8 18.8 295.4 21.7 16.0 -9.6 15.7 -8.6 15.0 -9.7 15.5 -8.7
2026-04-15T10:34:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:34:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:34:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.356726
2026-04-15T10:34:01.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:34:01.925 [DEBUG] [Thread-17385] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:34:01.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:34:01.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:34:01.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:34:01.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:34:01.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:33:52', tmtdew=1.97338, humidity=87.603, cloud=0.0, wind=16.7263, temperature=11.3984, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:33:41.126', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:34:02.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:34:02.178 [DEBUG] [Thread-17388] [transport.py] [_log()] starting thread (client mode): 0xf1335750
2026-04-15T10:34:02.178 [DEBUG] [Thread-17388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:34:02.192 [DEBUG] [Thread-17388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:34:02.192 [INFO] [Thread-17388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:34:02.199 [DEBUG] [Thread-17388] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:34:02.200 [DEBUG] [Thread-17388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:34:02.200 [DEBUG] [Thread-17388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:34:02.200 [DEBUG] [Thread-17388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:34:02.200 [DEBUG] [Thread-17388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:34:02.200 [DEBUG] [Thread-17388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:34:02.200 [DEBUG] [Thread-17388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:34:02.201 [DEBUG] [Thread-17388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:34:02.201 [DEBUG] [Thread-17388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:34:02.201 [DEBUG] [Thread-17388] [transport.py] [_log()] client lang: <none>
2026-04-15T10:34:02.201 [DEBUG] [Thread-17388] [transport.py] [_log()] server lang: <none>
2026-04-15T10:34:02.201 [DEBUG] [Thread-17388] [transport.py] [_log()] kex follows: False
2026-04-15T10:34:02.201 [DEBUG] [Thread-17388] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:34:02.201 [DEBUG] [Thread-17388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:34:02.202 [DEBUG] [Thread-17388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:34:02.202 [DEBUG] [Thread-17388] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:34:02.202 [DEBUG] [Thread-17388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:34:02.202 [DEBUG] [Thread-17388] [transport.py] [_log()] Compression: none
2026-04-15T10:34:02.202 [DEBUG] [Thread-17388] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:34:02.258 [DEBUG] [Thread-17388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:34:02.258 [DEBUG] [Thread-17388] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:34:02.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:34:02.259 [DEBUG] [Thread-17388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:34:02.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:34:02.324 [DEBUG] [Thread-17388] [transport.py] [_log()] userauth is OK
2026-04-15T10:34:02.324 [DEBUG] [Thread-17388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:34:02.324 [DEBUG] [Thread-17388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:34:02.325 [DEBUG] [Thread-17388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:34:02.325 [DEBUG] [Thread-17388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:34:02.349 [INFO] [Thread-17388] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:34:02.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:34:02.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:34:02.681 [DEBUG] [Thread-17390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:34:03.157 [DEBUG] [Thread-17388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:34:03.157 [DEBUG] [Thread-17388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:34:03.205 [DEBUG] [Thread-17388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:34:03.205 [DEBUG] [Thread-17388] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:34:03.214 [DEBUG] [Thread-17388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:34:03.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:34:03.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')
2026-04-15T10:34:03.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
2026-04-15T10:34:03.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:34:03.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:34:03.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:34:03.254 [DEBUG] [Thread-17388] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:34:06.055 [DEBUG] [Thread-17391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:34:21.100 [DEBUG] [Thread-17392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:34:30.316 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:34:30.317 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:34:33.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:34:33.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:34:33.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
2026-04-15T10:34:34.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 33, 52), 1.97338, 87.603, 0.0, 16.7263, 11.3984, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:34:34.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:33:52
2026-04-15T10:34:34.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:34:35.408 [DEBUG] [Thread-17393] [transport.py] [_log()] starting thread (client mode): 0xf1337280
2026-04-15T10:34:35.409 [DEBUG] [Thread-17393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:34:35.429 [DEBUG] [Thread-17393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:34:35.429 [INFO] [Thread-17393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:34:35.432 [DEBUG] [Thread-17393] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:34:35.432 [DEBUG] [Thread-17393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:34:35.433 [DEBUG] [Thread-17393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:34:35.433 [DEBUG] [Thread-17393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:34:35.433 [DEBUG] [Thread-17393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:34:35.433 [DEBUG] [Thread-17393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:34:35.433 [DEBUG] [Thread-17393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:34:35.433 [DEBUG] [Thread-17393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:34:35.433 [DEBUG] [Thread-17393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:34:35.433 [DEBUG] [Thread-17393] [transport.py] [_log()] client lang: <none>
2026-04-15T10:34:35.433 [DEBUG] [Thread-17393] [transport.py] [_log()] server lang: <none>
2026-04-15T10:34:35.433 [DEBUG] [Thread-17393] [transport.py] [_log()] kex follows: False
2026-04-15T10:34:35.433 [DEBUG] [Thread-17393] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:34:35.434 [DEBUG] [Thread-17393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:34:35.434 [DEBUG] [Thread-17393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:34:35.434 [DEBUG] [Thread-17393] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:34:35.434 [DEBUG] [Thread-17393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:34:35.434 [DEBUG] [Thread-17393] [transport.py] [_log()] Compression: none
2026-04-15T10:34:35.434 [DEBUG] [Thread-17393] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:34:35.442 [DEBUG] [Thread-17393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:34:35.443 [DEBUG] [Thread-17393] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:34:35.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:34:35.443 [DEBUG] [Thread-17393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:34:35.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:34:35.444 [DEBUG] [Thread-17393] [transport.py] [_log()] userauth is OK
2026-04-15T10:34:35.444 [DEBUG] [Thread-17393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:34:35.444 [DEBUG] [Thread-17393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:34:35.444 [DEBUG] [Thread-17393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:34:35.444 [DEBUG] [Thread-17393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:34:35.468 [INFO] [Thread-17393] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:34:35.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:34:36.093 [DEBUG] [Thread-17393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:34:36.093 [DEBUG] [Thread-17393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:34:36.094 [DEBUG] [Thread-17393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:34:36.133 [DEBUG] [Thread-17395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:34:36.134 [DEBUG] [Thread-17393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:34:36.134 [DEBUG] [Thread-17393] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:34:36.137 [DEBUG] [Thread-17393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:34:36.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:34:36.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:34:36.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:34:36.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:34:36.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:34:36.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:34:36.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:34:36.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:34:36.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:34:36.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.357074 -999.00  +10.80  16.44     87   +8.80 1 3 1 2 1   888    0 3.38 56.98 ----- 16.4 16.4 299.4 22.7 16.0 -9.8 15.7 -8.9 15.1 -7.8 15.6 -8.3
2026-04-15T10:34:36.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:34:36.160 [DEBUG] [Thread-17393] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:34:36.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:34:36.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.357074
2026-04-15T10:34:36.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:34:36.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:34:36.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:34:36.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:34:36.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:34:36.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:33:52', tmtdew=1.97338, humidity=87.603, cloud=0.0, wind=16.7263, temperature=11.3984, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:34:11.194', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:34:36.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:34:36.402 [DEBUG] [Thread-17397] [transport.py] [_log()] starting thread (client mode): 0xf13c84c0
2026-04-15T10:34:36.403 [DEBUG] [Thread-17397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:34:36.417 [DEBUG] [Thread-17397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:34:36.418 [INFO] [Thread-17397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:34:36.425 [DEBUG] [Thread-17397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:34:36.425 [DEBUG] [Thread-17397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:34:36.425 [DEBUG] [Thread-17397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:34:36.425 [DEBUG] [Thread-17397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:34:36.425 [DEBUG] [Thread-17397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:34:36.425 [DEBUG] [Thread-17397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:34:36.425 [DEBUG] [Thread-17397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:34:36.425 [DEBUG] [Thread-17397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:34:36.425 [DEBUG] [Thread-17397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:34:36.425 [DEBUG] [Thread-17397] [transport.py] [_log()] client lang: <none>
2026-04-15T10:34:36.425 [DEBUG] [Thread-17397] [transport.py] [_log()] server lang: <none>
2026-04-15T10:34:36.426 [DEBUG] [Thread-17397] [transport.py] [_log()] kex follows: False
2026-04-15T10:34:36.426 [DEBUG] [Thread-17397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:34:36.426 [DEBUG] [Thread-17397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:34:36.426 [DEBUG] [Thread-17397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:34:36.426 [DEBUG] [Thread-17397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:34:36.426 [DEBUG] [Thread-17397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:34:36.426 [DEBUG] [Thread-17397] [transport.py] [_log()] Compression: none
2026-04-15T10:34:36.426 [DEBUG] [Thread-17397] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:34:36.481 [DEBUG] [Thread-17397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:34:36.482 [DEBUG] [Thread-17397] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:34:36.482 [DEBUG] [Thread-17397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:34:36.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:34:36.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:34:36.542 [DEBUG] [Thread-17397] [transport.py] [_log()] userauth is OK
2026-04-15T10:34:36.542 [DEBUG] [Thread-17397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:34:36.542 [DEBUG] [Thread-17397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:34:36.542 [DEBUG] [Thread-17397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:34:36.542 [DEBUG] [Thread-17397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:34:36.566 [INFO] [Thread-17397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:34:36.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:34:36.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:34:37.431 [DEBUG] [Thread-17397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:34:37.432 [DEBUG] [Thread-17397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:34:37.479 [DEBUG] [Thread-17397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:34:37.479 [DEBUG] [Thread-17397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:34:37.488 [DEBUG] [Thread-17397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:34:37.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:34:37.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')
2026-04-15T10:34:37.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
2026-04-15T10:34:37.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:34:37.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:34:37.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:34:37.746 [DEBUG] [Thread-17397] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:34:51.163 [DEBUG] [Thread-17399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:35:02.810 [DEBUG] [Thread-17400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:35:06.202 [DEBUG] [Thread-17401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:35:07.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:35:07.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:35:07.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
2026-04-15T10:35:09.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 34, 28), 1.07181, 93.1025, 0.0, 14.504, 10.5821, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:35:09.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:34:28
2026-04-15T10:35:09.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:35:09.941 [DEBUG] [Thread-17402] [transport.py] [_log()] starting thread (client mode): 0xee905ba0
2026-04-15T10:35:09.942 [DEBUG] [Thread-17402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:35:09.961 [DEBUG] [Thread-17402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:35:09.961 [INFO] [Thread-17402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:35:09.963 [DEBUG] [Thread-17402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:35:09.963 [DEBUG] [Thread-17402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:35:09.963 [DEBUG] [Thread-17402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:35:09.963 [DEBUG] [Thread-17402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:35:09.964 [DEBUG] [Thread-17402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:35:09.964 [DEBUG] [Thread-17402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:35:09.964 [DEBUG] [Thread-17402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:35:09.964 [DEBUG] [Thread-17402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:35:09.964 [DEBUG] [Thread-17402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:35:09.964 [DEBUG] [Thread-17402] [transport.py] [_log()] client lang: <none>
2026-04-15T10:35:09.964 [DEBUG] [Thread-17402] [transport.py] [_log()] server lang: <none>
2026-04-15T10:35:09.964 [DEBUG] [Thread-17402] [transport.py] [_log()] kex follows: False
2026-04-15T10:35:09.964 [DEBUG] [Thread-17402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:35:09.964 [DEBUG] [Thread-17402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:35:09.964 [DEBUG] [Thread-17402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:35:09.964 [DEBUG] [Thread-17402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:35:09.965 [DEBUG] [Thread-17402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:35:09.965 [DEBUG] [Thread-17402] [transport.py] [_log()] Compression: none
2026-04-15T10:35:09.965 [DEBUG] [Thread-17402] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:35:09.976 [DEBUG] [Thread-17402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:35:09.977 [DEBUG] [Thread-17402] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:35:09.977 [DEBUG] [Thread-17402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:35:09.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:35:09.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:35:09.978 [DEBUG] [Thread-17402] [transport.py] [_log()] userauth is OK
2026-04-15T10:35:09.978 [DEBUG] [Thread-17402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:35:09.978 [DEBUG] [Thread-17402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:35:09.979 [DEBUG] [Thread-17402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:35:09.979 [DEBUG] [Thread-17402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:35:09.999 [INFO] [Thread-17402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:35:09.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:35:10.583 [DEBUG] [Thread-17402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:35:10.584 [DEBUG] [Thread-17402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:35:10.584 [DEBUG] [Thread-17402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:35:10.625 [DEBUG] [Thread-17402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:35:10.625 [DEBUG] [Thread-17402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:35:10.628 [DEBUG] [Thread-17402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:35:10.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:35:10.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:35:10.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:35:10.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:35:10.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:35:10.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:35:10.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:35:10.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:35:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:35:10.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.357421 -999.00  +10.80  14.59     87   +8.90 1 3 1 2 1   888    0 3.35 57.43 ----- 14.6 14.6 302.0 20.4 16.1 -9.2 15.7 -8.5 15.2 -7.2 15.7 -7.0
2026-04-15T10:35:10.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:35:10.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:35:10.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.357421
2026-04-15T10:35:10.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:35:10.650 [DEBUG] [Thread-17402] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:35:10.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:35:10.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:35:10.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:35:10.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:35:10.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:34:28', tmtdew=1.07181, humidity=93.1025, cloud=0.0, wind=14.504, temperature=10.5821, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:34:41.174', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:35:10.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:35:10.909 [DEBUG] [Thread-17405] [transport.py] [_log()] starting thread (client mode): 0xf1366cb0
2026-04-15T10:35:10.910 [DEBUG] [Thread-17405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:35:10.924 [DEBUG] [Thread-17405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:35:10.924 [INFO] [Thread-17405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:35:10.931 [DEBUG] [Thread-17405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:35:10.931 [DEBUG] [Thread-17405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:35:10.931 [DEBUG] [Thread-17405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:35:10.931 [DEBUG] [Thread-17405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:35:10.932 [DEBUG] [Thread-17405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:35:10.932 [DEBUG] [Thread-17405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:35:10.932 [DEBUG] [Thread-17405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:35:10.932 [DEBUG] [Thread-17405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:35:10.932 [DEBUG] [Thread-17405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:35:10.932 [DEBUG] [Thread-17405] [transport.py] [_log()] client lang: <none>
2026-04-15T10:35:10.932 [DEBUG] [Thread-17405] [transport.py] [_log()] server lang: <none>
2026-04-15T10:35:10.932 [DEBUG] [Thread-17405] [transport.py] [_log()] kex follows: False
2026-04-15T10:35:10.932 [DEBUG] [Thread-17405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:35:10.932 [DEBUG] [Thread-17405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:35:10.932 [DEBUG] [Thread-17405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:35:10.932 [DEBUG] [Thread-17405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:35:10.933 [DEBUG] [Thread-17405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:35:10.933 [DEBUG] [Thread-17405] [transport.py] [_log()] Compression: none
2026-04-15T10:35:10.933 [DEBUG] [Thread-17405] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:35:10.992 [DEBUG] [Thread-17405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:35:10.992 [DEBUG] [Thread-17405] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:35:10.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:35:10.993 [DEBUG] [Thread-17405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:35:10.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:35:11.049 [DEBUG] [Thread-17405] [transport.py] [_log()] userauth is OK
2026-04-15T10:35:11.049 [DEBUG] [Thread-17405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:35:11.049 [DEBUG] [Thread-17405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:35:11.049 [DEBUG] [Thread-17405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:35:11.049 [DEBUG] [Thread-17405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:35:11.074 [INFO] [Thread-17405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:35:11.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:35:11.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:35:11.903 [DEBUG] [Thread-17405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:35:11.903 [DEBUG] [Thread-17405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:35:11.951 [DEBUG] [Thread-17405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:35:11.951 [DEBUG] [Thread-17405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:35:11.960 [DEBUG] [Thread-17405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:35:11.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:35:11.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')
2026-04-15T10:35:11.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
2026-04-15T10:35:11.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:35:11.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:35:11.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:35:11.995 [DEBUG] [Thread-17405] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:35:21.232 [DEBUG] [Thread-17407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:35:30.462 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:35:30.463 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:35:36.274 [DEBUG] [Thread-17408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:35:42.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:35:42.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:35:42.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
2026-04-15T10:35:43.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 35, 3), 1.11926, 92.8205, 0.0, 14.3453, 10.5323, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:35:43.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:35:03
2026-04-15T10:35:43.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:35:44.129 [DEBUG] [Thread-17409] [transport.py] [_log()] starting thread (client mode): 0xf1365a50
2026-04-15T10:35:44.129 [DEBUG] [Thread-17409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:35:44.148 [DEBUG] [Thread-17409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:35:44.148 [INFO] [Thread-17409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:35:44.150 [DEBUG] [Thread-17409] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:35:44.150 [DEBUG] [Thread-17409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:35:44.150 [DEBUG] [Thread-17409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:35:44.150 [DEBUG] [Thread-17409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:35:44.150 [DEBUG] [Thread-17409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:35:44.150 [DEBUG] [Thread-17409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:35:44.150 [DEBUG] [Thread-17409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:35:44.150 [DEBUG] [Thread-17409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:35:44.151 [DEBUG] [Thread-17409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:35:44.151 [DEBUG] [Thread-17409] [transport.py] [_log()] client lang: <none>
2026-04-15T10:35:44.151 [DEBUG] [Thread-17409] [transport.py] [_log()] server lang: <none>
2026-04-15T10:35:44.151 [DEBUG] [Thread-17409] [transport.py] [_log()] kex follows: False
2026-04-15T10:35:44.151 [DEBUG] [Thread-17409] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:35:44.151 [DEBUG] [Thread-17409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:35:44.151 [DEBUG] [Thread-17409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:35:44.151 [DEBUG] [Thread-17409] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:35:44.151 [DEBUG] [Thread-17409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:35:44.151 [DEBUG] [Thread-17409] [transport.py] [_log()] Compression: none
2026-04-15T10:35:44.151 [DEBUG] [Thread-17409] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:35:44.164 [DEBUG] [Thread-17409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:35:44.164 [DEBUG] [Thread-17409] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:35:44.165 [DEBUG] [Thread-17409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:35:44.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:35:44.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:35:44.166 [DEBUG] [Thread-17409] [transport.py] [_log()] userauth is OK
2026-04-15T10:35:44.166 [DEBUG] [Thread-17409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:35:44.166 [DEBUG] [Thread-17409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:35:44.166 [DEBUG] [Thread-17409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:35:44.166 [DEBUG] [Thread-17409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:35:44.183 [INFO] [Thread-17409] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:35:44.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:35:44.775 [DEBUG] [Thread-17409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:35:44.775 [DEBUG] [Thread-17409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:35:44.776 [DEBUG] [Thread-17409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:35:44.816 [DEBUG] [Thread-17409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:35:44.816 [DEBUG] [Thread-17409] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:35:44.818 [DEBUG] [Thread-17409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:35:44.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:35:44.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:35:44.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:35:44.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:35:44.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:35:44.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:35:44.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:35:44.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:35:44.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:35:44.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.358115 -999.00  +10.80  18.79     87   +8.80 1 3 1 2 1   888    0 3.33 55.52 ----- 18.8 18.8 299.4 24.1 16.4 -7.2 16.1 -7.1 15.4 -6.8 16.0 -4.3
2026-04-15T10:35:44.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:35:44.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:35:44.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.358115
2026-04-15T10:35:44.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:35:44.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:35:44.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:35:44.837 [DEBUG] [Thread-17409] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:35:44.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:35:44.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:35:44.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:35:03', tmtdew=1.11926, humidity=92.8205, cloud=0.0, wind=14.3453, temperature=10.5323, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:35:41.136', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:35:45.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:35:45.088 [DEBUG] [Thread-17412] [transport.py] [_log()] starting thread (client mode): 0xf13643a0
2026-04-15T10:35:45.088 [DEBUG] [Thread-17412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:35:45.102 [DEBUG] [Thread-17412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:35:45.102 [INFO] [Thread-17412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:35:45.109 [DEBUG] [Thread-17412] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:35:45.109 [DEBUG] [Thread-17412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:35:45.109 [DEBUG] [Thread-17412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:35:45.110 [DEBUG] [Thread-17412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:35:45.110 [DEBUG] [Thread-17412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:35:45.110 [DEBUG] [Thread-17412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:35:45.110 [DEBUG] [Thread-17412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:35:45.110 [DEBUG] [Thread-17412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:35:45.110 [DEBUG] [Thread-17412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:35:45.110 [DEBUG] [Thread-17412] [transport.py] [_log()] client lang: <none>
2026-04-15T10:35:45.110 [DEBUG] [Thread-17412] [transport.py] [_log()] server lang: <none>
2026-04-15T10:35:45.110 [DEBUG] [Thread-17412] [transport.py] [_log()] kex follows: False
2026-04-15T10:35:45.110 [DEBUG] [Thread-17412] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:35:45.110 [DEBUG] [Thread-17412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:35:45.110 [DEBUG] [Thread-17412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:35:45.111 [DEBUG] [Thread-17412] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:35:45.111 [DEBUG] [Thread-17412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:35:45.111 [DEBUG] [Thread-17412] [transport.py] [_log()] Compression: none
2026-04-15T10:35:45.111 [DEBUG] [Thread-17412] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:35:45.167 [DEBUG] [Thread-17412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:35:45.167 [DEBUG] [Thread-17412] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:35:45.168 [DEBUG] [Thread-17412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:35:45.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:35:45.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:35:45.228 [DEBUG] [Thread-17412] [transport.py] [_log()] userauth is OK
2026-04-15T10:35:45.229 [DEBUG] [Thread-17412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:35:45.229 [DEBUG] [Thread-17412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:35:45.229 [DEBUG] [Thread-17412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:35:45.229 [DEBUG] [Thread-17412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:35:45.256 [INFO] [Thread-17412] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:35:45.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:35:45.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:35:46.074 [DEBUG] [Thread-17412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:35:46.074 [DEBUG] [Thread-17412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:35:46.122 [DEBUG] [Thread-17412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:35:46.122 [DEBUG] [Thread-17412] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:35:46.131 [DEBUG] [Thread-17412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:35:46.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:35:46.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')
2026-04-15T10:35: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') -> 00000000
2026-04-15T10:35:46.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:35:46.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:35:46.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:35:46.174 [DEBUG] [Thread-17412] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:35:51.303 [DEBUG] [Thread-17414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:36:02.919 [DEBUG] [Thread-17415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:36:06.348 [DEBUG] [Thread-17416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:36:16.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:36:16.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:36:16.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:36:17.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 35, 39), 2.08174, 86.9727, 0.0, 21.1363, 11.4647, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:36:17.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:35:39
2026-04-15T10:36:18.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:36:18.483 [DEBUG] [Thread-17417] [transport.py] [_log()] starting thread (client mode): 0xf13ef460
2026-04-15T10:36:18.483 [DEBUG] [Thread-17417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:36:18.503 [DEBUG] [Thread-17417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:36:18.503 [INFO] [Thread-17417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:36:18.506 [DEBUG] [Thread-17417] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:36:18.506 [DEBUG] [Thread-17417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:36:18.506 [DEBUG] [Thread-17417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:36:18.506 [DEBUG] [Thread-17417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:36:18.506 [DEBUG] [Thread-17417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:36:18.506 [DEBUG] [Thread-17417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:36:18.506 [DEBUG] [Thread-17417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:36:18.506 [DEBUG] [Thread-17417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:36:18.506 [DEBUG] [Thread-17417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:36:18.506 [DEBUG] [Thread-17417] [transport.py] [_log()] client lang: <none>
2026-04-15T10:36:18.506 [DEBUG] [Thread-17417] [transport.py] [_log()] server lang: <none>
2026-04-15T10:36:18.506 [DEBUG] [Thread-17417] [transport.py] [_log()] kex follows: False
2026-04-15T10:36:18.506 [DEBUG] [Thread-17417] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:36:18.507 [DEBUG] [Thread-17417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:36:18.507 [DEBUG] [Thread-17417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:36:18.507 [DEBUG] [Thread-17417] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:36:18.507 [DEBUG] [Thread-17417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:36:18.507 [DEBUG] [Thread-17417] [transport.py] [_log()] Compression: none
2026-04-15T10:36:18.507 [DEBUG] [Thread-17417] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:36:18.517 [DEBUG] [Thread-17417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:36:18.517 [DEBUG] [Thread-17417] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:36:18.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:36:18.518 [DEBUG] [Thread-17417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:36:18.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:36:18.519 [DEBUG] [Thread-17417] [transport.py] [_log()] userauth is OK
2026-04-15T10:36:18.519 [DEBUG] [Thread-17417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:36:18.519 [DEBUG] [Thread-17417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:36:18.519 [DEBUG] [Thread-17417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:36:18.519 [DEBUG] [Thread-17417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:36:18.554 [INFO] [Thread-17417] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:36:18.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:36:19.113 [DEBUG] [Thread-17417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:36:19.113 [DEBUG] [Thread-17417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:36:19.114 [DEBUG] [Thread-17417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:36:19.154 [DEBUG] [Thread-17417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:36:19.154 [DEBUG] [Thread-17417] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:36:19.157 [DEBUG] [Thread-17417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:36:19.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:36:19.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:36:19.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:36:19.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:36:19.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:36:19.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:36:19.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:36:19.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:36:19.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:36:19.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.358462 -999.00  +10.90  18.23     87   +8.90 1 3 1 2 1   888    0 3.21 51.09 ----- 18.2 18.2 297.8 22.8 16.8 -7.2 16.2 -7.6 15.5 -6.2 16.1 -5.0
2026-04-15T10:36:19.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:36:19.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:36:19.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.358462
2026-04-15T10:36:19.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:36:19.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:36:19.185 [DEBUG] [Thread-17417] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:36:19.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:36:19.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:36:19.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:36:19.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:35:39', tmtdew=2.08174, humidity=86.9727, cloud=0.0, wind=21.1363, temperature=11.4647, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:36:11.117', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:36:19.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:36:19.438 [DEBUG] [Thread-17420] [transport.py] [_log()] starting thread (client mode): 0xee906320
2026-04-15T10:36:19.438 [DEBUG] [Thread-17420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:36:19.452 [DEBUG] [Thread-17420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:36:19.452 [INFO] [Thread-17420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:36:19.459 [DEBUG] [Thread-17420] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:36:19.459 [DEBUG] [Thread-17420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:36:19.459 [DEBUG] [Thread-17420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:36:19.460 [DEBUG] [Thread-17420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:36:19.460 [DEBUG] [Thread-17420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:36:19.460 [DEBUG] [Thread-17420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:36:19.460 [DEBUG] [Thread-17420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:36:19.460 [DEBUG] [Thread-17420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:36:19.460 [DEBUG] [Thread-17420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:36:19.460 [DEBUG] [Thread-17420] [transport.py] [_log()] client lang: <none>
2026-04-15T10:36:19.460 [DEBUG] [Thread-17420] [transport.py] [_log()] server lang: <none>
2026-04-15T10:36:19.460 [DEBUG] [Thread-17420] [transport.py] [_log()] kex follows: False
2026-04-15T10:36:19.460 [DEBUG] [Thread-17420] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:36:19.460 [DEBUG] [Thread-17420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:36:19.460 [DEBUG] [Thread-17420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:36:19.461 [DEBUG] [Thread-17420] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:36:19.461 [DEBUG] [Thread-17420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:36:19.461 [DEBUG] [Thread-17420] [transport.py] [_log()] Compression: none
2026-04-15T10:36:19.461 [DEBUG] [Thread-17420] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:36:19.518 [DEBUG] [Thread-17420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:36:19.518 [DEBUG] [Thread-17420] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:36:19.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:36:19.519 [DEBUG] [Thread-17420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:36:19.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:36:19.575 [DEBUG] [Thread-17420] [transport.py] [_log()] userauth is OK
2026-04-15T10:36:19.575 [DEBUG] [Thread-17420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:36:19.575 [DEBUG] [Thread-17420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:36:19.575 [DEBUG] [Thread-17420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:36:19.575 [DEBUG] [Thread-17420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:36:19.600 [INFO] [Thread-17420] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:36:19.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:36:19.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:36:20.416 [DEBUG] [Thread-17420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:36:20.417 [DEBUG] [Thread-17420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:36:20.464 [DEBUG] [Thread-17420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:36:20.464 [DEBUG] [Thread-17420] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:36:20.473 [DEBUG] [Thread-17420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:36:20.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:36:20.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')
2026-04-15T10:36:20.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
2026-04-15T10:36:20.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:36:20.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:36:20.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:36:20.509 [DEBUG] [Thread-17420] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:36:21.377 [DEBUG] [Thread-17422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:36:30.603 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:36:30.605 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:36:36.419 [DEBUG] [Thread-17423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:36:50.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:36:50.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:36:50.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:36:51.449 [DEBUG] [Thread-17424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:36:51.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 36, 15), 1.13437, 92.7372, 0.0, 18.3863, 10.8318, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:36:51.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:36:15
2026-04-15T10:36:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:36:52.649 [DEBUG] [Thread-17425] [transport.py] [_log()] starting thread (client mode): 0xf13c98d0
2026-04-15T10:36:52.649 [DEBUG] [Thread-17425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:36:52.665 [DEBUG] [Thread-17425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:36:52.665 [INFO] [Thread-17425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:36:52.668 [DEBUG] [Thread-17425] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:36:52.668 [DEBUG] [Thread-17425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:36:52.668 [DEBUG] [Thread-17425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:36:52.668 [DEBUG] [Thread-17425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:36:52.669 [DEBUG] [Thread-17425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:36:52.669 [DEBUG] [Thread-17425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:36:52.669 [DEBUG] [Thread-17425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:36:52.669 [DEBUG] [Thread-17425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:36:52.669 [DEBUG] [Thread-17425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:36:52.669 [DEBUG] [Thread-17425] [transport.py] [_log()] client lang: <none>
2026-04-15T10:36:52.669 [DEBUG] [Thread-17425] [transport.py] [_log()] server lang: <none>
2026-04-15T10:36:52.669 [DEBUG] [Thread-17425] [transport.py] [_log()] kex follows: False
2026-04-15T10:36:52.669 [DEBUG] [Thread-17425] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:36:52.669 [DEBUG] [Thread-17425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:36:52.669 [DEBUG] [Thread-17425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:36:52.669 [DEBUG] [Thread-17425] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:36:52.670 [DEBUG] [Thread-17425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:36:52.670 [DEBUG] [Thread-17425] [transport.py] [_log()] Compression: none
2026-04-15T10:36:52.670 [DEBUG] [Thread-17425] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:36:52.685 [DEBUG] [Thread-17425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:36:52.685 [DEBUG] [Thread-17425] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:36:52.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:36:52.686 [DEBUG] [Thread-17425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:36:52.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:36:52.687 [DEBUG] [Thread-17425] [transport.py] [_log()] userauth is OK
2026-04-15T10:36:52.687 [DEBUG] [Thread-17425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:36:52.687 [DEBUG] [Thread-17425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:36:52.687 [DEBUG] [Thread-17425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:36:52.687 [DEBUG] [Thread-17425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:36:52.704 [INFO] [Thread-17425] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:36:52.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:36:53.265 [DEBUG] [Thread-17425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:36:53.265 [DEBUG] [Thread-17425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:36:53.266 [DEBUG] [Thread-17425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:36:53.306 [DEBUG] [Thread-17425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:36:53.306 [DEBUG] [Thread-17425] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:36:53.309 [DEBUG] [Thread-17425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:36:53.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:36:53.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:36:53.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:36:53.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:36:53.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:36:53.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:36:53.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:36:53.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:36:53.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:36:53.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.358810 -999.00  +10.90  17.06     87   +8.90 1 3 1 2 1   888    0 3.14 48.55 ----- 17.1 17.1 285.6 22.2 16.8 -7.7 16.2 -8.0 15.5 -6.6 16.1 -5.6
2026-04-15T10:36:53.332 [DEBUG] [Thread-17425] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:36:53.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:36:53.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:36:53.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.358810
2026-04-15T10:36:53.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:36:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:36:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:36:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:36:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:36:53.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:36:15', tmtdew=1.13437, humidity=92.7372, cloud=0.0, wind=18.3863, temperature=10.8318, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:36:41.184', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:36:53.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:36:53.595 [DEBUG] [Thread-17428] [transport.py] [_log()] starting thread (client mode): 0xee907790
2026-04-15T10:36:53.596 [DEBUG] [Thread-17428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:36:53.610 [DEBUG] [Thread-17428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:36:53.610 [INFO] [Thread-17428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:36:53.617 [DEBUG] [Thread-17428] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:36:53.617 [DEBUG] [Thread-17428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:36:53.617 [DEBUG] [Thread-17428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:36:53.618 [DEBUG] [Thread-17428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:36:53.618 [DEBUG] [Thread-17428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:36:53.618 [DEBUG] [Thread-17428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:36:53.618 [DEBUG] [Thread-17428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:36:53.618 [DEBUG] [Thread-17428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:36:53.618 [DEBUG] [Thread-17428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:36:53.618 [DEBUG] [Thread-17428] [transport.py] [_log()] client lang: <none>
2026-04-15T10:36:53.618 [DEBUG] [Thread-17428] [transport.py] [_log()] server lang: <none>
2026-04-15T10:36:53.618 [DEBUG] [Thread-17428] [transport.py] [_log()] kex follows: False
2026-04-15T10:36:53.619 [DEBUG] [Thread-17428] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:36:53.619 [DEBUG] [Thread-17428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:36:53.619 [DEBUG] [Thread-17428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:36:53.619 [DEBUG] [Thread-17428] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:36:53.619 [DEBUG] [Thread-17428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:36:53.619 [DEBUG] [Thread-17428] [transport.py] [_log()] Compression: none
2026-04-15T10:36:53.619 [DEBUG] [Thread-17428] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:36:53.673 [DEBUG] [Thread-17428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:36:53.674 [DEBUG] [Thread-17428] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:36:53.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:36:53.675 [DEBUG] [Thread-17428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:36:53.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:36:53.730 [DEBUG] [Thread-17428] [transport.py] [_log()] userauth is OK
2026-04-15T10:36:53.730 [DEBUG] [Thread-17428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:36:53.731 [DEBUG] [Thread-17428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:36:53.731 [DEBUG] [Thread-17428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:36:53.731 [DEBUG] [Thread-17428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:36:53.756 [INFO] [Thread-17428] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:36:53.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:36:53.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:36:54.576 [DEBUG] [Thread-17428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:36:54.576 [DEBUG] [Thread-17428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:36:54.626 [DEBUG] [Thread-17428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:36:54.626 [DEBUG] [Thread-17428] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:36:54.635 [DEBUG] [Thread-17428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:36:54.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:36: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')
2026-04-15T10:36:54.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
2026-04-15T10:36:54.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:36:54.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:36:54.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:36:54.674 [DEBUG] [Thread-17428] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:37:03.031 [DEBUG] [Thread-17430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:37:06.480 [DEBUG] [Thread-17431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:37:21.525 [DEBUG] [Thread-17432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:37:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:37:24.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:37:24.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
2026-04-15T10:37:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 36, 51), 2.16766, 86.4743, 0.0, 19.1959, 11.4973, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:37:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:36:51
2026-04-15T10:37:26.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:37:26.867 [DEBUG] [Thread-17433] [transport.py] [_log()] starting thread (client mode): 0xee905150
2026-04-15T10:37:26.867 [DEBUG] [Thread-17433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:37:26.884 [DEBUG] [Thread-17433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:37:26.884 [INFO] [Thread-17433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:37:26.886 [DEBUG] [Thread-17433] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:37:26.886 [DEBUG] [Thread-17433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:37:26.886 [DEBUG] [Thread-17433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:37:26.886 [DEBUG] [Thread-17433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:37:26.886 [DEBUG] [Thread-17433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:37:26.886 [DEBUG] [Thread-17433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:37:26.886 [DEBUG] [Thread-17433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:37:26.886 [DEBUG] [Thread-17433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:37:26.886 [DEBUG] [Thread-17433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:37:26.886 [DEBUG] [Thread-17433] [transport.py] [_log()] client lang: <none>
2026-04-15T10:37:26.886 [DEBUG] [Thread-17433] [transport.py] [_log()] server lang: <none>
2026-04-15T10:37:26.886 [DEBUG] [Thread-17433] [transport.py] [_log()] kex follows: False
2026-04-15T10:37:26.886 [DEBUG] [Thread-17433] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:37:26.886 [DEBUG] [Thread-17433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:37:26.886 [DEBUG] [Thread-17433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:37:26.887 [DEBUG] [Thread-17433] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:37:26.887 [DEBUG] [Thread-17433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:37:26.887 [DEBUG] [Thread-17433] [transport.py] [_log()] Compression: none
2026-04-15T10:37:26.887 [DEBUG] [Thread-17433] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:37:26.900 [DEBUG] [Thread-17433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:37:26.900 [DEBUG] [Thread-17433] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:37:26.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:37:26.901 [DEBUG] [Thread-17433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:37:26.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:37:26.902 [DEBUG] [Thread-17433] [transport.py] [_log()] userauth is OK
2026-04-15T10:37:26.902 [DEBUG] [Thread-17433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:37:26.902 [DEBUG] [Thread-17433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:37:26.902 [DEBUG] [Thread-17433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:37:26.902 [DEBUG] [Thread-17433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:37:26.915 [INFO] [Thread-17433] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:37:26.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:37:27.529 [DEBUG] [Thread-17433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:37:27.529 [DEBUG] [Thread-17433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:37:27.530 [DEBUG] [Thread-17433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:37:27.570 [DEBUG] [Thread-17433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:37:27.570 [DEBUG] [Thread-17433] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:37:27.573 [DEBUG] [Thread-17433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:37:27.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:37:27.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:37:27.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:37:27.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:37:27.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:37:27.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:37:27.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:37:27.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:37:27.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:37:27.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.359157 -999.00  +10.90  14.74     87   +8.90 1 3 1 2 1   888    0 3.23 50.63 ----- 14.7 14.7 295.4 18.0 16.8 -7.1 16.2 -7.9 15.4 -6.0 16.1 -5.4
2026-04-15T10:37:27.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:37:27.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:37:27.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.359157
2026-04-15T10:37:27.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:37:27.596 [DEBUG] [Thread-17433] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:37:27.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:37:27.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:37:27.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:37:27.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:37:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:36:51', tmtdew=2.16766, humidity=86.4743, cloud=0.0, wind=19.1959, temperature=11.4973, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:37:11.165', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:37:27.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:37:27.848 [DEBUG] [Thread-17436] [transport.py] [_log()] starting thread (client mode): 0xf1336bf0
2026-04-15T10:37:27.849 [DEBUG] [Thread-17436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:37:27.863 [DEBUG] [Thread-17436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:37:27.863 [INFO] [Thread-17436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:37:27.870 [DEBUG] [Thread-17436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:37:27.870 [DEBUG] [Thread-17436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:37:27.870 [DEBUG] [Thread-17436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:37:27.870 [DEBUG] [Thread-17436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:37:27.871 [DEBUG] [Thread-17436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:37:27.871 [DEBUG] [Thread-17436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:37:27.871 [DEBUG] [Thread-17436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:37:27.871 [DEBUG] [Thread-17436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:37:27.871 [DEBUG] [Thread-17436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:37:27.871 [DEBUG] [Thread-17436] [transport.py] [_log()] client lang: <none>
2026-04-15T10:37:27.871 [DEBUG] [Thread-17436] [transport.py] [_log()] server lang: <none>
2026-04-15T10:37:27.871 [DEBUG] [Thread-17436] [transport.py] [_log()] kex follows: False
2026-04-15T10:37:27.871 [DEBUG] [Thread-17436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:37:27.871 [DEBUG] [Thread-17436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:37:27.871 [DEBUG] [Thread-17436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:37:27.871 [DEBUG] [Thread-17436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:37:27.872 [DEBUG] [Thread-17436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:37:27.872 [DEBUG] [Thread-17436] [transport.py] [_log()] Compression: none
2026-04-15T10:37:27.872 [DEBUG] [Thread-17436] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:37:27.928 [DEBUG] [Thread-17436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:37:27.929 [DEBUG] [Thread-17436] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:37:27.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:37:27.929 [DEBUG] [Thread-17436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:37:27.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:37:27.985 [DEBUG] [Thread-17436] [transport.py] [_log()] userauth is OK
2026-04-15T10:37:27.985 [DEBUG] [Thread-17436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:37:27.985 [DEBUG] [Thread-17436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:37:27.985 [DEBUG] [Thread-17436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:37:27.985 [DEBUG] [Thread-17436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:37:28.010 [INFO] [Thread-17436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:37:28.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:37:28.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:37:28.858 [DEBUG] [Thread-17436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:37:28.859 [DEBUG] [Thread-17436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:37:28.906 [DEBUG] [Thread-17436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:37:28.906 [DEBUG] [Thread-17436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:37:28.915 [DEBUG] [Thread-17436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:37:28.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:37:28.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')
2026-04-15T10:37:28.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T10:37:28.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:37:28.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:37:28.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:37:28.949 [DEBUG] [Thread-17436] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:37:30.746 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:37:30.748 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:37:36.559 [DEBUG] [Thread-17438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:37:51.603 [DEBUG] [Thread-17439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:37:58.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:37:58.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:37:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:38:00.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 37, 26), 1.15132, 92.637, 0.0, 12.6695, 10.8147, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:38:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:37:26
2026-04-15T10:38:00.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:38:01.034 [DEBUG] [Thread-17440] [transport.py] [_log()] starting thread (client mode): 0xf13c9ea0
2026-04-15T10:38:01.034 [DEBUG] [Thread-17440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:38:01.046 [DEBUG] [Thread-17440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:38:01.046 [INFO] [Thread-17440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:38:01.047 [DEBUG] [Thread-17440] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:38:01.048 [DEBUG] [Thread-17440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:38:01.048 [DEBUG] [Thread-17440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:38:01.048 [DEBUG] [Thread-17440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:38:01.048 [DEBUG] [Thread-17440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:38:01.048 [DEBUG] [Thread-17440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:38:01.048 [DEBUG] [Thread-17440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:38:01.048 [DEBUG] [Thread-17440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:38:01.048 [DEBUG] [Thread-17440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:38:01.048 [DEBUG] [Thread-17440] [transport.py] [_log()] client lang: <none>
2026-04-15T10:38:01.048 [DEBUG] [Thread-17440] [transport.py] [_log()] server lang: <none>
2026-04-15T10:38:01.048 [DEBUG] [Thread-17440] [transport.py] [_log()] kex follows: False
2026-04-15T10:38:01.048 [DEBUG] [Thread-17440] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:38:01.049 [DEBUG] [Thread-17440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:38:01.049 [DEBUG] [Thread-17440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:38:01.049 [DEBUG] [Thread-17440] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:38:01.049 [DEBUG] [Thread-17440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:38:01.049 [DEBUG] [Thread-17440] [transport.py] [_log()] Compression: none
2026-04-15T10:38:01.049 [DEBUG] [Thread-17440] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:38:01.058 [DEBUG] [Thread-17440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:38:01.059 [DEBUG] [Thread-17440] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:38:01.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:38:01.059 [DEBUG] [Thread-17440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:38:01.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:38:01.060 [DEBUG] [Thread-17440] [transport.py] [_log()] userauth is OK
2026-04-15T10:38:01.060 [DEBUG] [Thread-17440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:38:01.061 [DEBUG] [Thread-17440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:38:01.061 [DEBUG] [Thread-17440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:38:01.061 [DEBUG] [Thread-17440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:38:01.077 [INFO] [Thread-17440] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:38:01.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:38:01.637 [DEBUG] [Thread-17440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:38:01.637 [DEBUG] [Thread-17440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:38:01.638 [DEBUG] [Thread-17440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:38:01.678 [DEBUG] [Thread-17440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:38:01.678 [DEBUG] [Thread-17440] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:38:01.680 [DEBUG] [Thread-17440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:38:01.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:38:01.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:38:01.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:38:01.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:38:01.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:38:01.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:38:01.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:38:01.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:38:01.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:38:01.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.359504 -999.00  +11.10  12.69     88   +9.20 1 3 1 3 1   888    0 3.11 46.02 ----- 12.7 12.7 311.4 19.3 16.7 -6.9 16.2 -7.6 15.4 -6.1 16.0 -5.3
2026-04-15T10:38:01.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:38:01.705 [DEBUG] [Thread-17440] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:38:01.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:38:01.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.359504
2026-04-15T10:38:01.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:38:01.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:38:01.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:38:01.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:38:01.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:38:01.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:37:26', tmtdew=1.15132, humidity=92.637, cloud=0.0, wind=12.6695, temperature=10.8147, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:37:41.146', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:38:01.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:38:01.995 [DEBUG] [Thread-17443] [transport.py] [_log()] starting thread (client mode): 0xee907af0
2026-04-15T10:38:01.995 [DEBUG] [Thread-17443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:38:02.008 [DEBUG] [Thread-17443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:38:02.009 [INFO] [Thread-17443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:38:02.016 [DEBUG] [Thread-17443] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:38:02.016 [DEBUG] [Thread-17443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:38:02.016 [DEBUG] [Thread-17443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:38:02.016 [DEBUG] [Thread-17443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:38:02.016 [DEBUG] [Thread-17443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:38:02.016 [DEBUG] [Thread-17443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:38:02.016 [DEBUG] [Thread-17443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:38:02.017 [DEBUG] [Thread-17443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:38:02.017 [DEBUG] [Thread-17443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:38:02.017 [DEBUG] [Thread-17443] [transport.py] [_log()] client lang: <none>
2026-04-15T10:38:02.017 [DEBUG] [Thread-17443] [transport.py] [_log()] server lang: <none>
2026-04-15T10:38:02.017 [DEBUG] [Thread-17443] [transport.py] [_log()] kex follows: False
2026-04-15T10:38:02.017 [DEBUG] [Thread-17443] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:38:02.017 [DEBUG] [Thread-17443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:38:02.017 [DEBUG] [Thread-17443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:38:02.018 [DEBUG] [Thread-17443] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:38:02.018 [DEBUG] [Thread-17443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:38:02.018 [DEBUG] [Thread-17443] [transport.py] [_log()] Compression: none
2026-04-15T10:38:02.018 [DEBUG] [Thread-17443] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:38:02.075 [DEBUG] [Thread-17443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:38:02.076 [DEBUG] [Thread-17443] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:38:02.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:38:02.076 [DEBUG] [Thread-17443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:38:02.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:38:02.132 [DEBUG] [Thread-17443] [transport.py] [_log()] userauth is OK
2026-04-15T10:38:02.133 [DEBUG] [Thread-17443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:38:02.133 [DEBUG] [Thread-17443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:38:02.133 [DEBUG] [Thread-17443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:38:02.133 [DEBUG] [Thread-17443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:38:02.157 [INFO] [Thread-17443] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:38:02.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:38:02.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:38:03.000 [DEBUG] [Thread-17443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:38:03.001 [DEBUG] [Thread-17443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:38:03.048 [DEBUG] [Thread-17443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:38:03.048 [DEBUG] [Thread-17443] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:38:03.057 [DEBUG] [Thread-17443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:38:03.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:38:03.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')
2026-04-15T10:38:03.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
2026-04-15T10:38:03.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:38:03.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:38:03.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:38:03.090 [DEBUG] [Thread-17443] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:38:03.160 [DEBUG] [Thread-17445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:38:06.633 [DEBUG] [Thread-17446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:38:21.691 [DEBUG] [Thread-17447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:38:30.889 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:38:30.890 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:38:33.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:38:33.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:38:33.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
2026-04-15T10:38:34.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 38, 1), 1.15105, 92.637, 0.0, 13.4633, 10.7982, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:38:34.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:38:01
2026-04-15T10:38:34.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:38:35.152 [DEBUG] [Thread-17448] [transport.py] [_log()] starting thread (client mode): 0xee988400
2026-04-15T10:38:35.152 [DEBUG] [Thread-17448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:38:35.170 [DEBUG] [Thread-17448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:38:35.171 [INFO] [Thread-17448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:38:35.173 [DEBUG] [Thread-17448] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:38:35.173 [DEBUG] [Thread-17448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:38:35.174 [DEBUG] [Thread-17448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:38:35.174 [DEBUG] [Thread-17448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:38:35.174 [DEBUG] [Thread-17448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:38:35.174 [DEBUG] [Thread-17448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:38:35.174 [DEBUG] [Thread-17448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:38:35.174 [DEBUG] [Thread-17448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:38:35.174 [DEBUG] [Thread-17448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:38:35.174 [DEBUG] [Thread-17448] [transport.py] [_log()] client lang: <none>
2026-04-15T10:38:35.174 [DEBUG] [Thread-17448] [transport.py] [_log()] server lang: <none>
2026-04-15T10:38:35.174 [DEBUG] [Thread-17448] [transport.py] [_log()] kex follows: False
2026-04-15T10:38:35.174 [DEBUG] [Thread-17448] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:38:35.175 [DEBUG] [Thread-17448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:38:35.175 [DEBUG] [Thread-17448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:38:35.175 [DEBUG] [Thread-17448] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:38:35.175 [DEBUG] [Thread-17448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:38:35.175 [DEBUG] [Thread-17448] [transport.py] [_log()] Compression: none
2026-04-15T10:38:35.175 [DEBUG] [Thread-17448] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:38:35.190 [DEBUG] [Thread-17448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:38:35.191 [DEBUG] [Thread-17448] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:38:35.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:38:35.191 [DEBUG] [Thread-17448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:38:35.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:38:35.192 [DEBUG] [Thread-17448] [transport.py] [_log()] userauth is OK
2026-04-15T10:38:35.192 [DEBUG] [Thread-17448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:38:35.192 [DEBUG] [Thread-17448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:38:35.192 [DEBUG] [Thread-17448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:38:35.192 [DEBUG] [Thread-17448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:38:35.219 [INFO] [Thread-17448] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:38:35.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:38:35.787 [DEBUG] [Thread-17448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:38:35.787 [DEBUG] [Thread-17448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:38:35.788 [DEBUG] [Thread-17448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:38:35.828 [DEBUG] [Thread-17448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:38:35.828 [DEBUG] [Thread-17448] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:38:35.830 [DEBUG] [Thread-17448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:38:35.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:38:35.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:38:35.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:38:35.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:38:35.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:38:35.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:38:35.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:38:35.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:38:35.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:38:35.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.359851 -999.00  +11.20  15.42     87   +9.20 1 3 1 2 1   888    0 2.97 41.56 ----- 15.4 15.4 309.8 17.5 16.8 -6.6 16.2 -7.3 15.4 -5.9 16.1 -5.0
2026-04-15T10:38:35.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:38:35.850 [DEBUG] [Thread-17448] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:38:35.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:38:35.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.359851
2026-04-15T10:38:35.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:38:35.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:38:35.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:38:35.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:38:35.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:38:35.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:38:01', tmtdew=1.15105, humidity=92.637, cloud=0.0, wind=13.4633, temperature=10.7982, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:38:11.126', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:38:36.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:38:36.106 [DEBUG] [Thread-17451] [transport.py] [_log()] starting thread (client mode): 0xee989150
2026-04-15T10:38:36.106 [DEBUG] [Thread-17451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:38:36.120 [DEBUG] [Thread-17451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:38:36.121 [INFO] [Thread-17451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:38:36.128 [DEBUG] [Thread-17451] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:38:36.128 [DEBUG] [Thread-17451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:38:36.128 [DEBUG] [Thread-17451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:38:36.128 [DEBUG] [Thread-17451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:38:36.128 [DEBUG] [Thread-17451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:38:36.128 [DEBUG] [Thread-17451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:38:36.128 [DEBUG] [Thread-17451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:38:36.129 [DEBUG] [Thread-17451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:38:36.129 [DEBUG] [Thread-17451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:38:36.129 [DEBUG] [Thread-17451] [transport.py] [_log()] client lang: <none>
2026-04-15T10:38:36.129 [DEBUG] [Thread-17451] [transport.py] [_log()] server lang: <none>
2026-04-15T10:38:36.129 [DEBUG] [Thread-17451] [transport.py] [_log()] kex follows: False
2026-04-15T10:38:36.129 [DEBUG] [Thread-17451] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:38:36.129 [DEBUG] [Thread-17451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:38:36.129 [DEBUG] [Thread-17451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:38:36.129 [DEBUG] [Thread-17451] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:38:36.129 [DEBUG] [Thread-17451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:38:36.129 [DEBUG] [Thread-17451] [transport.py] [_log()] Compression: none
2026-04-15T10:38:36.130 [DEBUG] [Thread-17451] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:38:36.187 [DEBUG] [Thread-17451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:38:36.187 [DEBUG] [Thread-17451] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:38:36.188 [DEBUG] [Thread-17451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:38:36.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:38:36.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:38:36.243 [DEBUG] [Thread-17451] [transport.py] [_log()] userauth is OK
2026-04-15T10:38:36.243 [DEBUG] [Thread-17451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:38:36.243 [DEBUG] [Thread-17451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:38:36.243 [DEBUG] [Thread-17451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:38:36.243 [DEBUG] [Thread-17451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:38:36.261 [INFO] [Thread-17451] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:38:36.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:38:36.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:38:36.722 [DEBUG] [Thread-17453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:38:37.088 [DEBUG] [Thread-17451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:38:37.088 [DEBUG] [Thread-17451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:38:37.136 [DEBUG] [Thread-17451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:38:37.136 [DEBUG] [Thread-17451] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:38:37.145 [DEBUG] [Thread-17451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:38:37.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:38:37.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')
2026-04-15T10:38:37.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
2026-04-15T10:38:37.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:38:37.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:38:37.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:38:37.184 [DEBUG] [Thread-17451] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:38:51.766 [DEBUG] [Thread-17454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:39:03.282 [DEBUG] [Thread-17455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:39:06.798 [DEBUG] [Thread-17456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:39:07.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:39:07.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:39:07.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
2026-04-15T10:39:08.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 38, 36), 2.18667, 86.3731, 0.0, 16.0207, 11.5956, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:39:08.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:38:36
2026-04-15T10:39:08.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:39:09.223 [DEBUG] [Thread-17457] [transport.py] [_log()] starting thread (client mode): 0xf13ec910
2026-04-15T10:39:09.223 [DEBUG] [Thread-17457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:39:09.235 [DEBUG] [Thread-17457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:39:09.236 [INFO] [Thread-17457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:39:09.237 [DEBUG] [Thread-17457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:39:09.237 [DEBUG] [Thread-17457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:39:09.238 [DEBUG] [Thread-17457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:39:09.238 [DEBUG] [Thread-17457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:39:09.238 [DEBUG] [Thread-17457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:39:09.238 [DEBUG] [Thread-17457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:39:09.238 [DEBUG] [Thread-17457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:39:09.238 [DEBUG] [Thread-17457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:39:09.238 [DEBUG] [Thread-17457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:39:09.238 [DEBUG] [Thread-17457] [transport.py] [_log()] client lang: <none>
2026-04-15T10:39:09.238 [DEBUG] [Thread-17457] [transport.py] [_log()] server lang: <none>
2026-04-15T10:39:09.238 [DEBUG] [Thread-17457] [transport.py] [_log()] kex follows: False
2026-04-15T10:39:09.238 [DEBUG] [Thread-17457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:39:09.238 [DEBUG] [Thread-17457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:39:09.238 [DEBUG] [Thread-17457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:39:09.239 [DEBUG] [Thread-17457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:39:09.239 [DEBUG] [Thread-17457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:39:09.239 [DEBUG] [Thread-17457] [transport.py] [_log()] Compression: none
2026-04-15T10:39:09.239 [DEBUG] [Thread-17457] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:39:09.247 [DEBUG] [Thread-17457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:39:09.247 [DEBUG] [Thread-17457] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:39:09.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:39:09.248 [DEBUG] [Thread-17457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:39:09.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:39:09.249 [DEBUG] [Thread-17457] [transport.py] [_log()] userauth is OK
2026-04-15T10:39:09.250 [DEBUG] [Thread-17457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:39:09.250 [DEBUG] [Thread-17457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:39:09.250 [DEBUG] [Thread-17457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:39:09.250 [DEBUG] [Thread-17457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:39:09.266 [INFO] [Thread-17457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:39:09.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:39:09.889 [DEBUG] [Thread-17457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:39:09.889 [DEBUG] [Thread-17457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:39:09.890 [DEBUG] [Thread-17457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:39:09.930 [DEBUG] [Thread-17457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:39:09.930 [DEBUG] [Thread-17457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:39:09.932 [DEBUG] [Thread-17457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:39:09.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:39:09.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:39:09.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:39:09.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:39:09.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:39:09.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:39:09.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:39:09.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:39:09.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:39:09.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.360198 -999.00  +11.20   9.13     86   +9.10 1 3 1 2 1   888    0 3.01 41.46 ----- 9.1 9.1 297.5 16.0 16.8 -6.9 16.3 -7.4 15.5 -5.5 16.1 -5.6
2026-04-15T10:39:09.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:39:09.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:39:09.962 [DEBUG] [Thread-17457] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:39:09.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.360198
2026-04-15T10:39:09.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:39:09.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:39:09.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:39:09.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:39:09.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:39:09.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:38:36', tmtdew=2.18667, humidity=86.3731, cloud=0.0, wind=16.0207, temperature=11.5956, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:38:41.107', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:39:10.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:39:10.218 [DEBUG] [Thread-17460] [transport.py] [_log()] starting thread (client mode): 0xf13655a0
2026-04-15T10:39:10.218 [DEBUG] [Thread-17460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:39:10.233 [DEBUG] [Thread-17460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:39:10.233 [INFO] [Thread-17460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:39:10.240 [DEBUG] [Thread-17460] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:39:10.240 [DEBUG] [Thread-17460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:39:10.240 [DEBUG] [Thread-17460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:39:10.240 [DEBUG] [Thread-17460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:39:10.240 [DEBUG] [Thread-17460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:39:10.241 [DEBUG] [Thread-17460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:39:10.241 [DEBUG] [Thread-17460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:39:10.241 [DEBUG] [Thread-17460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:39:10.241 [DEBUG] [Thread-17460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:39:10.241 [DEBUG] [Thread-17460] [transport.py] [_log()] client lang: <none>
2026-04-15T10:39:10.241 [DEBUG] [Thread-17460] [transport.py] [_log()] server lang: <none>
2026-04-15T10:39:10.241 [DEBUG] [Thread-17460] [transport.py] [_log()] kex follows: False
2026-04-15T10:39:10.241 [DEBUG] [Thread-17460] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:39:10.241 [DEBUG] [Thread-17460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:39:10.241 [DEBUG] [Thread-17460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:39:10.241 [DEBUG] [Thread-17460] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:39:10.241 [DEBUG] [Thread-17460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:39:10.242 [DEBUG] [Thread-17460] [transport.py] [_log()] Compression: none
2026-04-15T10:39:10.242 [DEBUG] [Thread-17460] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:39:10.298 [DEBUG] [Thread-17460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:39:10.298 [DEBUG] [Thread-17460] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:39:10.298 [DEBUG] [Thread-17460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:39:10.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:39:10.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:39:10.355 [DEBUG] [Thread-17460] [transport.py] [_log()] userauth is OK
2026-04-15T10:39:10.355 [DEBUG] [Thread-17460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:39:10.355 [DEBUG] [Thread-17460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:39:10.355 [DEBUG] [Thread-17460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:39:10.355 [DEBUG] [Thread-17460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:39:10.380 [INFO] [Thread-17460] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:39:10.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:39:10.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:39:11.230 [DEBUG] [Thread-17460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:39:11.230 [DEBUG] [Thread-17460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:39:11.278 [DEBUG] [Thread-17460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:39:11.278 [DEBUG] [Thread-17460] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:39:11.287 [DEBUG] [Thread-17460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:39:11.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:39:11.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')
2026-04-15T10:39:11.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
2026-04-15T10:39:11.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:39:11.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:39:11.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:39:11.322 [DEBUG] [Thread-17460] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:39:21.830 [DEBUG] [Thread-17462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:39:31.032 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:39:31.033 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:39:36.875 [DEBUG] [Thread-17463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:39:41.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:39:41.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:39:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:39:42.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 39, 12), 1.22132, 92.2222, 0.0, 12.1579, 10.5651, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:39:42.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:39:12
2026-04-15T10:39:43.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:39:43.476 [DEBUG] [Thread-17464] [transport.py] [_log()] starting thread (client mode): 0xee904f40
2026-04-15T10:39:43.476 [DEBUG] [Thread-17464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:39:43.495 [DEBUG] [Thread-17464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:39:43.495 [INFO] [Thread-17464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:39:43.498 [DEBUG] [Thread-17464] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:39:43.498 [DEBUG] [Thread-17464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:39:43.498 [DEBUG] [Thread-17464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:39:43.498 [DEBUG] [Thread-17464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:39:43.499 [DEBUG] [Thread-17464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:39:43.499 [DEBUG] [Thread-17464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:39:43.499 [DEBUG] [Thread-17464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:39:43.499 [DEBUG] [Thread-17464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:39:43.499 [DEBUG] [Thread-17464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:39:43.499 [DEBUG] [Thread-17464] [transport.py] [_log()] client lang: <none>
2026-04-15T10:39:43.499 [DEBUG] [Thread-17464] [transport.py] [_log()] server lang: <none>
2026-04-15T10:39:43.499 [DEBUG] [Thread-17464] [transport.py] [_log()] kex follows: False
2026-04-15T10:39:43.499 [DEBUG] [Thread-17464] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:39:43.499 [DEBUG] [Thread-17464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:39:43.499 [DEBUG] [Thread-17464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:39:43.499 [DEBUG] [Thread-17464] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:39:43.500 [DEBUG] [Thread-17464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:39:43.500 [DEBUG] [Thread-17464] [transport.py] [_log()] Compression: none
2026-04-15T10:39:43.500 [DEBUG] [Thread-17464] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:39:43.510 [DEBUG] [Thread-17464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:39:43.510 [DEBUG] [Thread-17464] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:39:43.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:39:43.511 [DEBUG] [Thread-17464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:39:43.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:39:43.512 [DEBUG] [Thread-17464] [transport.py] [_log()] userauth is OK
2026-04-15T10:39:43.512 [DEBUG] [Thread-17464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:39:43.512 [DEBUG] [Thread-17464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:39:43.512 [DEBUG] [Thread-17464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:39:43.512 [DEBUG] [Thread-17464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:39:43.528 [INFO] [Thread-17464] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:39:43.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:39:44.133 [DEBUG] [Thread-17464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:39:44.133 [DEBUG] [Thread-17464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:39:44.133 [DEBUG] [Thread-17464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:39:44.174 [DEBUG] [Thread-17464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:39:44.174 [DEBUG] [Thread-17464] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:39:44.177 [DEBUG] [Thread-17464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:39:44.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:39:44.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:39:44.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:39:44.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:39:44.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:39:44.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:39:44.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:39:44.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:39:44.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:39:44.197 [DEBUG] [Thread-17464] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:39:44.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.360546 -999.00  +11.10  11.03     86   +8.90 1 3 1 2 1   888    0 3.01 41.39 ----- 11.0 11.0 293.2 16.2 16.8 -6.8 16.3 -7.5 15.5 -5.7 16.1 -5.7
2026-04-15T10:39:44.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:39:44.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:39:44.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.360546
2026-04-15T10:39:44.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:39:44.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:39:44.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:39:44.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:39:44.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:39:44.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:39:12', tmtdew=1.22132, humidity=92.2222, cloud=0.0, wind=12.1579, temperature=10.5651, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:39:11.174', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:39:44.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:39:44.461 [DEBUG] [Thread-17467] [transport.py] [_log()] starting thread (client mode): 0xf13cb4f0
2026-04-15T10:39:44.461 [DEBUG] [Thread-17467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:39:44.477 [DEBUG] [Thread-17467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:39:44.477 [INFO] [Thread-17467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:39:44.485 [DEBUG] [Thread-17467] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:39:44.485 [DEBUG] [Thread-17467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:39:44.485 [DEBUG] [Thread-17467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:39:44.485 [DEBUG] [Thread-17467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:39:44.485 [DEBUG] [Thread-17467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:39:44.485 [DEBUG] [Thread-17467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:39:44.485 [DEBUG] [Thread-17467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:39:44.485 [DEBUG] [Thread-17467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:39:44.485 [DEBUG] [Thread-17467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:39:44.485 [DEBUG] [Thread-17467] [transport.py] [_log()] client lang: <none>
2026-04-15T10:39:44.486 [DEBUG] [Thread-17467] [transport.py] [_log()] server lang: <none>
2026-04-15T10:39:44.486 [DEBUG] [Thread-17467] [transport.py] [_log()] kex follows: False
2026-04-15T10:39:44.486 [DEBUG] [Thread-17467] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:39:44.486 [DEBUG] [Thread-17467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:39:44.486 [DEBUG] [Thread-17467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:39:44.486 [DEBUG] [Thread-17467] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:39:44.486 [DEBUG] [Thread-17467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:39:44.486 [DEBUG] [Thread-17467] [transport.py] [_log()] Compression: none
2026-04-15T10:39:44.486 [DEBUG] [Thread-17467] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:39:44.542 [DEBUG] [Thread-17467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:39:44.542 [DEBUG] [Thread-17467] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:39:44.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:39:44.543 [DEBUG] [Thread-17467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:39:44.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:39:44.598 [DEBUG] [Thread-17467] [transport.py] [_log()] userauth is OK
2026-04-15T10:39:44.598 [DEBUG] [Thread-17467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:39:44.598 [DEBUG] [Thread-17467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:39:44.598 [DEBUG] [Thread-17467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:39:44.599 [DEBUG] [Thread-17467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:39:44.625 [INFO] [Thread-17467] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:39:44.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:39:44.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:39:45.474 [DEBUG] [Thread-17467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:39:45.474 [DEBUG] [Thread-17467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:39:45.522 [DEBUG] [Thread-17467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:39:45.522 [DEBUG] [Thread-17467] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:39:45.531 [DEBUG] [Thread-17467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:39:45.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:39:45.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')
2026-04-15T10:39:45.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
2026-04-15T10:39:45.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:39:45.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:39:45.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:39:45.564 [DEBUG] [Thread-17467] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:39:51.904 [DEBUG] [Thread-17469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:40:03.407 [DEBUG] [Thread-17470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:40:06.947 [DEBUG] [Thread-17471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:40:15.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:40:15.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:40:15.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
2026-04-15T10:40:16.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 39, 48), 2.31864, 85.5761, 0.0, 11.1521, 11.2632, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:40:16.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:39:48
2026-04-15T10:40:17.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:40:17.744 [DEBUG] [Thread-17472] [transport.py] [_log()] starting thread (client mode): 0xf13e2c50
2026-04-15T10:40:17.744 [DEBUG] [Thread-17472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:40:17.764 [DEBUG] [Thread-17472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:40:17.764 [INFO] [Thread-17472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:40:17.767 [DEBUG] [Thread-17472] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:40:17.767 [DEBUG] [Thread-17472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:40:17.767 [DEBUG] [Thread-17472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:40:17.768 [DEBUG] [Thread-17472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:40:17.768 [DEBUG] [Thread-17472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:40:17.768 [DEBUG] [Thread-17472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:40:17.768 [DEBUG] [Thread-17472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:40:17.768 [DEBUG] [Thread-17472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:40:17.768 [DEBUG] [Thread-17472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:40:17.768 [DEBUG] [Thread-17472] [transport.py] [_log()] client lang: <none>
2026-04-15T10:40:17.768 [DEBUG] [Thread-17472] [transport.py] [_log()] server lang: <none>
2026-04-15T10:40:17.768 [DEBUG] [Thread-17472] [transport.py] [_log()] kex follows: False
2026-04-15T10:40:17.768 [DEBUG] [Thread-17472] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:40:17.768 [DEBUG] [Thread-17472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:40:17.769 [DEBUG] [Thread-17472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:40:17.769 [DEBUG] [Thread-17472] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:40:17.769 [DEBUG] [Thread-17472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:40:17.769 [DEBUG] [Thread-17472] [transport.py] [_log()] Compression: none
2026-04-15T10:40:17.769 [DEBUG] [Thread-17472] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:40:17.785 [DEBUG] [Thread-17472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:40:17.785 [DEBUG] [Thread-17472] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:40:17.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:40:17.786 [DEBUG] [Thread-17472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:40:17.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:40:17.787 [DEBUG] [Thread-17472] [transport.py] [_log()] userauth is OK
2026-04-15T10:40:17.787 [DEBUG] [Thread-17472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:40:17.788 [DEBUG] [Thread-17472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:40:17.788 [DEBUG] [Thread-17472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:40:17.788 [DEBUG] [Thread-17472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:40:17.809 [INFO] [Thread-17472] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:40:17.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:40:19.884 [DEBUG] [Thread-17472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:40:19.884 [DEBUG] [Thread-17472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:40:19.885 [DEBUG] [Thread-17472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:40:19.925 [DEBUG] [Thread-17472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:40:19.925 [DEBUG] [Thread-17472] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:40:19.928 [DEBUG] [Thread-17472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:40:19.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:40:19.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:40:19.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:40:19.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:40:19.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:40:19.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:40:19.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:40:19.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:40:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:40:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.361240 -999.00  +11.30  13.44     86   +9.10 1 3 1 2 1   888    0 3.05 41.62 ----- 13.4 13.4 295.8 18.0 16.6 -6.7 16.1 -6.6 15.4 -5.5 16.0 -5.6
2026-04-15T10:40:19.989 [DEBUG] [Thread-17472] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:40:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:40:19.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:40:19.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.361240
2026-04-15T10:40:19.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:40:19.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:40:19.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:40:19.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:40:19.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:40:19.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:39:48', tmtdew=2.31864, humidity=85.5761, cloud=0.0, wind=11.1521, temperature=11.2632, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:40:11.136', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:40:20.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:40:20.244 [DEBUG] [Thread-17475] [transport.py] [_log()] starting thread (client mode): 0xee927700
2026-04-15T10:40:20.244 [DEBUG] [Thread-17475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:40:20.259 [DEBUG] [Thread-17475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:40:20.259 [INFO] [Thread-17475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:40:20.266 [DEBUG] [Thread-17475] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:40:20.266 [DEBUG] [Thread-17475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:40:20.266 [DEBUG] [Thread-17475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:40:20.267 [DEBUG] [Thread-17475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:40:20.267 [DEBUG] [Thread-17475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:40:20.267 [DEBUG] [Thread-17475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:40:20.267 [DEBUG] [Thread-17475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:40:20.267 [DEBUG] [Thread-17475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:40:20.267 [DEBUG] [Thread-17475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:40:20.267 [DEBUG] [Thread-17475] [transport.py] [_log()] client lang: <none>
2026-04-15T10:40:20.267 [DEBUG] [Thread-17475] [transport.py] [_log()] server lang: <none>
2026-04-15T10:40:20.267 [DEBUG] [Thread-17475] [transport.py] [_log()] kex follows: False
2026-04-15T10:40:20.267 [DEBUG] [Thread-17475] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:40:20.267 [DEBUG] [Thread-17475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:40:20.267 [DEBUG] [Thread-17475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:40:20.268 [DEBUG] [Thread-17475] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:40:20.268 [DEBUG] [Thread-17475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:40:20.268 [DEBUG] [Thread-17475] [transport.py] [_log()] Compression: none
2026-04-15T10:40:20.268 [DEBUG] [Thread-17475] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:40:20.324 [DEBUG] [Thread-17475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:40:20.324 [DEBUG] [Thread-17475] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:40:20.325 [DEBUG] [Thread-17475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:40:20.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:40:20.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:40:20.381 [DEBUG] [Thread-17475] [transport.py] [_log()] userauth is OK
2026-04-15T10:40:20.381 [DEBUG] [Thread-17475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:40:20.381 [DEBUG] [Thread-17475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:40:20.382 [DEBUG] [Thread-17475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:40:20.382 [DEBUG] [Thread-17475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:40:20.407 [INFO] [Thread-17475] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:40:20.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:40:20.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:40:21.231 [DEBUG] [Thread-17475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:40:21.231 [DEBUG] [Thread-17475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:40:21.279 [DEBUG] [Thread-17475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:40:21.279 [DEBUG] [Thread-17475] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:40:21.288 [DEBUG] [Thread-17475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:40:21.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:40:21.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')
2026-04-15T10:40:21.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
2026-04-15T10:40:21.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:40:21.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:40:21.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:40:21.327 [DEBUG] [Thread-17475] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:40:21.977 [DEBUG] [Thread-17477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:40:31.173 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:40:31.174 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:40:37.024 [DEBUG] [Thread-17478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:40:51.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:40:51.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:40:51.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
2026-04-15T10:40:52.057 [DEBUG] [Thread-17479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:40:52.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 40, 23), 1.16545, 92.5534, 0.0, 9.5994, 10.7477, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:40:52.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:40:23
2026-04-15T10:40:53.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:40:53.499 [DEBUG] [Thread-17480] [transport.py] [_log()] starting thread (client mode): 0xee98e470
2026-04-15T10:40:53.499 [DEBUG] [Thread-17480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:40:53.519 [DEBUG] [Thread-17480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:40:53.519 [INFO] [Thread-17480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:40:53.522 [DEBUG] [Thread-17480] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:40:53.522 [DEBUG] [Thread-17480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:40:53.522 [DEBUG] [Thread-17480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:40:53.522 [DEBUG] [Thread-17480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:40:53.522 [DEBUG] [Thread-17480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:40:53.522 [DEBUG] [Thread-17480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:40:53.522 [DEBUG] [Thread-17480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:40:53.522 [DEBUG] [Thread-17480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:40:53.523 [DEBUG] [Thread-17480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:40:53.523 [DEBUG] [Thread-17480] [transport.py] [_log()] client lang: <none>
2026-04-15T10:40:53.523 [DEBUG] [Thread-17480] [transport.py] [_log()] server lang: <none>
2026-04-15T10:40:53.523 [DEBUG] [Thread-17480] [transport.py] [_log()] kex follows: False
2026-04-15T10:40:53.523 [DEBUG] [Thread-17480] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:40:53.523 [DEBUG] [Thread-17480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:40:53.523 [DEBUG] [Thread-17480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:40:53.523 [DEBUG] [Thread-17480] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:40:53.523 [DEBUG] [Thread-17480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:40:53.523 [DEBUG] [Thread-17480] [transport.py] [_log()] Compression: none
2026-04-15T10:40:53.523 [DEBUG] [Thread-17480] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:40:53.539 [DEBUG] [Thread-17480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:40:53.539 [DEBUG] [Thread-17480] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:40:53.540 [DEBUG] [Thread-17480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:40:53.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:40:53.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:40:53.580 [DEBUG] [Thread-17480] [transport.py] [_log()] userauth is OK
2026-04-15T10:40:53.580 [DEBUG] [Thread-17480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:40:53.581 [DEBUG] [Thread-17480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:40:53.581 [DEBUG] [Thread-17480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:40:53.581 [DEBUG] [Thread-17480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:40:53.604 [INFO] [Thread-17480] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:40:53.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:40:54.348 [DEBUG] [Thread-17480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:40:54.348 [DEBUG] [Thread-17480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:40:54.349 [DEBUG] [Thread-17480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:40:54.389 [DEBUG] [Thread-17480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:40:54.389 [DEBUG] [Thread-17480] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:40:54.392 [DEBUG] [Thread-17480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:40:54.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:40:54.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:40:54.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:40:54.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:40:54.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:40:54.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:40:54.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:40:54.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:40:54.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:40:54.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.361587 -999.00  +11.50  14.28     86   +9.30 1 3 1 2 1   888    0 3.01 40.66 ----- 14.3 14.3 299.0 19.9 16.6 -6.2 16.1 -7.3 15.4 -5.7 16.0 -5.6
2026-04-15T10:40:54.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:40:54.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:40:54.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.361587
2026-04-15T10:40:54.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:40:54.414 [DEBUG] [Thread-17480] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:40:54.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:40:54.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:40:54.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:40:54.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:40:54.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:40:23', tmtdew=1.16545, humidity=92.5534, cloud=0.0, wind=9.5994, temperature=10.7477, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:40:41.117', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:40:54.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:40:54.667 [DEBUG] [Thread-17483] [transport.py] [_log()] starting thread (client mode): 0xee98a530
2026-04-15T10:40:54.668 [DEBUG] [Thread-17483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:40:54.681 [DEBUG] [Thread-17483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:40:54.681 [INFO] [Thread-17483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:40:54.688 [DEBUG] [Thread-17483] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:40:54.688 [DEBUG] [Thread-17483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:40:54.688 [DEBUG] [Thread-17483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:40:54.688 [DEBUG] [Thread-17483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:40:54.688 [DEBUG] [Thread-17483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:40:54.688 [DEBUG] [Thread-17483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:40:54.688 [DEBUG] [Thread-17483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:40:54.688 [DEBUG] [Thread-17483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:40:54.689 [DEBUG] [Thread-17483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:40:54.689 [DEBUG] [Thread-17483] [transport.py] [_log()] client lang: <none>
2026-04-15T10:40:54.689 [DEBUG] [Thread-17483] [transport.py] [_log()] server lang: <none>
2026-04-15T10:40:54.689 [DEBUG] [Thread-17483] [transport.py] [_log()] kex follows: False
2026-04-15T10:40:54.689 [DEBUG] [Thread-17483] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:40:54.689 [DEBUG] [Thread-17483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:40:54.689 [DEBUG] [Thread-17483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:40:54.689 [DEBUG] [Thread-17483] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:40:54.689 [DEBUG] [Thread-17483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:40:54.689 [DEBUG] [Thread-17483] [transport.py] [_log()] Compression: none
2026-04-15T10:40:54.689 [DEBUG] [Thread-17483] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:40:54.743 [DEBUG] [Thread-17483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:40:54.744 [DEBUG] [Thread-17483] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:40:54.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:40:54.744 [DEBUG] [Thread-17483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:40:54.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:40:54.800 [DEBUG] [Thread-17483] [transport.py] [_log()] userauth is OK
2026-04-15T10:40:54.800 [DEBUG] [Thread-17483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:40:54.801 [DEBUG] [Thread-17483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:40:54.801 [DEBUG] [Thread-17483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:40:54.801 [DEBUG] [Thread-17483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:40:54.823 [INFO] [Thread-17483] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:40:54.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:40:54.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:40:55.625 [DEBUG] [Thread-17483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:40:55.625 [DEBUG] [Thread-17483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:40:55.673 [DEBUG] [Thread-17483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:40:55.673 [DEBUG] [Thread-17483] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:40:55.682 [DEBUG] [Thread-17483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:40:55.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:40:55.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')
2026-04-15T10:40:55.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
2026-04-15T10:40:55.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:40:55.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:40:55.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:40:55.715 [DEBUG] [Thread-17483] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:41:03.532 [DEBUG] [Thread-17485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:41:07.087 [DEBUG] [Thread-17486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:41:22.129 [DEBUG] [Thread-17487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:41:25.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:41:25.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:41:25.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
2026-04-15T10:41:26.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 40, 59), 1.20624, 92.3208, 0.0, 12.2821, 10.8306, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:41:26.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:40:59
2026-04-15T10:41:27.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:41:27.811 [DEBUG] [Thread-17488] [transport.py] [_log()] starting thread (client mode): 0xee924fd0
2026-04-15T10:41:27.812 [DEBUG] [Thread-17488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:41:27.830 [DEBUG] [Thread-17488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:41:27.830 [INFO] [Thread-17488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:41:27.833 [DEBUG] [Thread-17488] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:41:27.834 [DEBUG] [Thread-17488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:41:27.834 [DEBUG] [Thread-17488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:41:27.834 [DEBUG] [Thread-17488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:41:27.834 [DEBUG] [Thread-17488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:41:27.834 [DEBUG] [Thread-17488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:41:27.834 [DEBUG] [Thread-17488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:41:27.834 [DEBUG] [Thread-17488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:41:27.834 [DEBUG] [Thread-17488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:41:27.834 [DEBUG] [Thread-17488] [transport.py] [_log()] client lang: <none>
2026-04-15T10:41:27.834 [DEBUG] [Thread-17488] [transport.py] [_log()] server lang: <none>
2026-04-15T10:41:27.834 [DEBUG] [Thread-17488] [transport.py] [_log()] kex follows: False
2026-04-15T10:41:27.834 [DEBUG] [Thread-17488] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:41:27.835 [DEBUG] [Thread-17488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:41:27.835 [DEBUG] [Thread-17488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:41:27.835 [DEBUG] [Thread-17488] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:41:27.835 [DEBUG] [Thread-17488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:41:27.835 [DEBUG] [Thread-17488] [transport.py] [_log()] Compression: none
2026-04-15T10:41:27.835 [DEBUG] [Thread-17488] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:41:27.851 [DEBUG] [Thread-17488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:41:27.851 [DEBUG] [Thread-17488] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:41:27.852 [DEBUG] [Thread-17488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:41:27.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:41:27.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:41:27.853 [DEBUG] [Thread-17488] [transport.py] [_log()] userauth is OK
2026-04-15T10:41:27.853 [DEBUG] [Thread-17488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:41:27.853 [DEBUG] [Thread-17488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:41:27.853 [DEBUG] [Thread-17488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:41:27.853 [DEBUG] [Thread-17488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:41:27.867 [INFO] [Thread-17488] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:41:27.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:41:28.452 [DEBUG] [Thread-17488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:41:28.452 [DEBUG] [Thread-17488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:41:28.453 [DEBUG] [Thread-17488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:41:28.493 [DEBUG] [Thread-17488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:41:28.493 [DEBUG] [Thread-17488] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:41:28.496 [DEBUG] [Thread-17488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:41:28.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:41:28.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:41:28.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:41:28.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:41:28.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:41:28.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:41:28.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:41:28.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:41:28.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:41:28.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.361935 -999.00  +11.40  18.66     84   +8.90 1 3 1 2 1   888    0 3.10 42.25 ----- 18.7 18.7 294.2 22.5 16.5 -6.9 16.1 -7.4 15.4 -7.7 16.0 -6.0
2026-04-15T10:41:28.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:41:28.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:41:28.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.361935
2026-04-15T10:41:28.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:41:28.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:41:28.520 [DEBUG] [Thread-17488] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:41:28.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:41:28.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:41:28.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:41:28.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:40:59', tmtdew=1.20624, humidity=92.3208, cloud=0.0, wind=12.2821, temperature=10.8306, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:41:11.184', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:41:28.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:41:28.778 [DEBUG] [Thread-17491] [transport.py] [_log()] starting thread (client mode): 0xf13fdea0
2026-04-15T10:41:28.778 [DEBUG] [Thread-17491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:41:28.792 [DEBUG] [Thread-17491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:41:28.792 [INFO] [Thread-17491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:41:28.799 [DEBUG] [Thread-17491] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:41:28.799 [DEBUG] [Thread-17491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:41:28.799 [DEBUG] [Thread-17491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:41:28.800 [DEBUG] [Thread-17491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:41:28.800 [DEBUG] [Thread-17491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:41:28.800 [DEBUG] [Thread-17491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:41:28.800 [DEBUG] [Thread-17491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:41:28.800 [DEBUG] [Thread-17491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:41:28.800 [DEBUG] [Thread-17491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:41:28.800 [DEBUG] [Thread-17491] [transport.py] [_log()] client lang: <none>
2026-04-15T10:41:28.800 [DEBUG] [Thread-17491] [transport.py] [_log()] server lang: <none>
2026-04-15T10:41:28.800 [DEBUG] [Thread-17491] [transport.py] [_log()] kex follows: False
2026-04-15T10:41:28.800 [DEBUG] [Thread-17491] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:41:28.800 [DEBUG] [Thread-17491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:41:28.801 [DEBUG] [Thread-17491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:41:28.801 [DEBUG] [Thread-17491] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:41:28.801 [DEBUG] [Thread-17491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:41:28.801 [DEBUG] [Thread-17491] [transport.py] [_log()] Compression: none
2026-04-15T10:41:28.801 [DEBUG] [Thread-17491] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:41:28.856 [DEBUG] [Thread-17491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:41:28.856 [DEBUG] [Thread-17491] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:41:28.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:41:28.857 [DEBUG] [Thread-17491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:41:28.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:41:28.912 [DEBUG] [Thread-17491] [transport.py] [_log()] userauth is OK
2026-04-15T10:41:28.912 [DEBUG] [Thread-17491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:41:28.912 [DEBUG] [Thread-17491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:41:28.912 [DEBUG] [Thread-17491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:41:28.912 [DEBUG] [Thread-17491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:41:28.930 [INFO] [Thread-17491] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:41:28.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:41:28.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:41:29.782 [DEBUG] [Thread-17491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:41:29.783 [DEBUG] [Thread-17491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:41:29.830 [DEBUG] [Thread-17491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:41:29.830 [DEBUG] [Thread-17491] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:41:29.839 [DEBUG] [Thread-17491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:41:29.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:41:29.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')
2026-04-15T10:41:29.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
2026-04-15T10:41:29.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:41:29.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:41:29.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:41:29.873 [DEBUG] [Thread-17491] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:41:31.314 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:41:31.315 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:41:37.161 [DEBUG] [Thread-17493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:41:52.203 [DEBUG] [Thread-17494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:41:59.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:41:59.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:41:59.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
2026-04-15T10:42:01.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 41, 34), 2.34594, 85.442, 0.0, 10.6229, 11.4943, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:42:01.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:41:34
2026-04-15T10:42:01.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:42:02.097 [DEBUG] [Thread-17495] [transport.py] [_log()] starting thread (client mode): 0xee989660
2026-04-15T10:42:02.098 [DEBUG] [Thread-17495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:42:02.117 [DEBUG] [Thread-17495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:42:02.117 [INFO] [Thread-17495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:42:02.119 [DEBUG] [Thread-17495] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:42:02.119 [DEBUG] [Thread-17495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:42:02.119 [DEBUG] [Thread-17495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:42:02.119 [DEBUG] [Thread-17495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:42:02.119 [DEBUG] [Thread-17495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:42:02.119 [DEBUG] [Thread-17495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:42:02.119 [DEBUG] [Thread-17495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:42:02.119 [DEBUG] [Thread-17495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:42:02.119 [DEBUG] [Thread-17495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:42:02.119 [DEBUG] [Thread-17495] [transport.py] [_log()] client lang: <none>
2026-04-15T10:42:02.120 [DEBUG] [Thread-17495] [transport.py] [_log()] server lang: <none>
2026-04-15T10:42:02.120 [DEBUG] [Thread-17495] [transport.py] [_log()] kex follows: False
2026-04-15T10:42:02.120 [DEBUG] [Thread-17495] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:42:02.120 [DEBUG] [Thread-17495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:42:02.120 [DEBUG] [Thread-17495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:42:02.120 [DEBUG] [Thread-17495] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:42:02.120 [DEBUG] [Thread-17495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:42:02.120 [DEBUG] [Thread-17495] [transport.py] [_log()] Compression: none
2026-04-15T10:42:02.120 [DEBUG] [Thread-17495] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:42:02.139 [DEBUG] [Thread-17495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:42:02.139 [DEBUG] [Thread-17495] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:42:02.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:42:02.140 [DEBUG] [Thread-17495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:42:02.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:42:02.141 [DEBUG] [Thread-17495] [transport.py] [_log()] userauth is OK
2026-04-15T10:42:02.141 [DEBUG] [Thread-17495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:42:02.141 [DEBUG] [Thread-17495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:42:02.141 [DEBUG] [Thread-17495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:42:02.141 [DEBUG] [Thread-17495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:42:02.159 [INFO] [Thread-17495] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:42:02.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:42:02.764 [DEBUG] [Thread-17495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:42:02.764 [DEBUG] [Thread-17495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:42:02.764 [DEBUG] [Thread-17495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:42:02.805 [DEBUG] [Thread-17495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:42:02.805 [DEBUG] [Thread-17495] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:42:02.809 [DEBUG] [Thread-17495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:42:02.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:42:02.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:42:02.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:42:02.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:42:02.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:42:02.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:42:02.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:42:02.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:42:02.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:42:02.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.362282 -999.00  +11.40  20.89     85   +9.10 1 3 1 2 1   888    0 3.08 42.39 ----- 20.9 20.9 299.8 23.3 16.4 -7.8 16.0 -7.0 15.4 -5.8 15.9 -6.1
2026-04-15T10:42:02.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:42:02.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:42:02.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.362282
2026-04-15T10:42:02.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:42:02.837 [DEBUG] [Thread-17495] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:42:02.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:42:02.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:42:02.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:42:02.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:42:02.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:41:34', tmtdew=2.34594, humidity=85.442, cloud=0.0, wind=10.6229, temperature=11.4943, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:41:41.165', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:42:03.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:42:03.090 [DEBUG] [Thread-17498] [transport.py] [_log()] starting thread (client mode): 0xee98e7d0
2026-04-15T10:42:03.090 [DEBUG] [Thread-17498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:42:03.104 [DEBUG] [Thread-17498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:42:03.104 [INFO] [Thread-17498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:42:03.111 [DEBUG] [Thread-17498] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:42:03.112 [DEBUG] [Thread-17498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:42:03.112 [DEBUG] [Thread-17498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:42:03.112 [DEBUG] [Thread-17498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:42:03.112 [DEBUG] [Thread-17498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:42:03.112 [DEBUG] [Thread-17498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:42:03.112 [DEBUG] [Thread-17498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:42:03.112 [DEBUG] [Thread-17498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:42:03.112 [DEBUG] [Thread-17498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:42:03.112 [DEBUG] [Thread-17498] [transport.py] [_log()] client lang: <none>
2026-04-15T10:42:03.112 [DEBUG] [Thread-17498] [transport.py] [_log()] server lang: <none>
2026-04-15T10:42:03.112 [DEBUG] [Thread-17498] [transport.py] [_log()] kex follows: False
2026-04-15T10:42:03.112 [DEBUG] [Thread-17498] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:42:03.112 [DEBUG] [Thread-17498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:42:03.112 [DEBUG] [Thread-17498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:42:03.113 [DEBUG] [Thread-17498] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:42:03.113 [DEBUG] [Thread-17498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:42:03.113 [DEBUG] [Thread-17498] [transport.py] [_log()] Compression: none
2026-04-15T10:42:03.113 [DEBUG] [Thread-17498] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:42:03.170 [DEBUG] [Thread-17498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:42:03.171 [DEBUG] [Thread-17498] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:42:03.171 [DEBUG] [Thread-17498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:42:03.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:42:03.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:42:03.227 [DEBUG] [Thread-17498] [transport.py] [_log()] userauth is OK
2026-04-15T10:42:03.228 [DEBUG] [Thread-17498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:42:03.228 [DEBUG] [Thread-17498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:42:03.228 [DEBUG] [Thread-17498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:42:03.228 [DEBUG] [Thread-17498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:42:03.250 [INFO] [Thread-17498] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:42:03.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:42:03.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:42:03.662 [DEBUG] [Thread-17500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:42:04.153 [DEBUG] [Thread-17498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:42:04.153 [DEBUG] [Thread-17498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:42:04.202 [DEBUG] [Thread-17498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:42:04.202 [DEBUG] [Thread-17498] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:42:04.211 [DEBUG] [Thread-17498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:42:04.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:42:04.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')
2026-04-15T10:42:04.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
2026-04-15T10:42:04.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:42:04.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:42:04.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:42:04.249 [DEBUG] [Thread-17498] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:42:07.233 [DEBUG] [Thread-17501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:42:22.270 [DEBUG] [Thread-17502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:42:31.455 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:42:31.456 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:42:34.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:42:34.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:42:34.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
2026-04-15T10:42:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 42, 10), 1.23715, 92.1546, 0.0, 13.0759, 11.0464, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:42:35.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:42:10
2026-04-15T10:42:35.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:42:36.388 [DEBUG] [Thread-17503] [transport.py] [_log()] starting thread (client mode): 0xee98d900
2026-04-15T10:42:36.388 [DEBUG] [Thread-17503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:42:36.407 [DEBUG] [Thread-17503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:42:36.408 [INFO] [Thread-17503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:42:36.411 [DEBUG] [Thread-17503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:42:36.411 [DEBUG] [Thread-17503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:42:36.411 [DEBUG] [Thread-17503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:42:36.411 [DEBUG] [Thread-17503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:42:36.411 [DEBUG] [Thread-17503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:42:36.411 [DEBUG] [Thread-17503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:42:36.411 [DEBUG] [Thread-17503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:42:36.411 [DEBUG] [Thread-17503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:42:36.411 [DEBUG] [Thread-17503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:42:36.411 [DEBUG] [Thread-17503] [transport.py] [_log()] client lang: <none>
2026-04-15T10:42:36.412 [DEBUG] [Thread-17503] [transport.py] [_log()] server lang: <none>
2026-04-15T10:42:36.412 [DEBUG] [Thread-17503] [transport.py] [_log()] kex follows: False
2026-04-15T10:42:36.412 [DEBUG] [Thread-17503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:42:36.412 [DEBUG] [Thread-17503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:42:36.412 [DEBUG] [Thread-17503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:42:36.412 [DEBUG] [Thread-17503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:42:36.412 [DEBUG] [Thread-17503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:42:36.412 [DEBUG] [Thread-17503] [transport.py] [_log()] Compression: none
2026-04-15T10:42:36.412 [DEBUG] [Thread-17503] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:42:36.428 [DEBUG] [Thread-17503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:42:36.428 [DEBUG] [Thread-17503] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:42:36.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:42:36.429 [DEBUG] [Thread-17503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:42:36.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:42:36.430 [DEBUG] [Thread-17503] [transport.py] [_log()] userauth is OK
2026-04-15T10:42:36.430 [DEBUG] [Thread-17503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:42:36.430 [DEBUG] [Thread-17503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:42:36.430 [DEBUG] [Thread-17503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:42:36.430 [DEBUG] [Thread-17503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:42:36.448 [INFO] [Thread-17503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:42:36.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:42:37.010 [DEBUG] [Thread-17503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:42:37.010 [DEBUG] [Thread-17503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:42:37.011 [DEBUG] [Thread-17503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:42:37.051 [DEBUG] [Thread-17503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:42:37.051 [DEBUG] [Thread-17503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:42:37.054 [DEBUG] [Thread-17503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:42:37.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:42:37.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:42:37.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:42:37.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:42:37.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:42:37.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:42:37.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:42:37.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:42:37.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:42:37.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.362630 -999.00  +11.30  16.12     84   +8.80 1 3 1 2 1   888    0 3.07 40.21 ----- 16.1 16.1 294.4 24.1 16.4 -7.7 15.9 -7.5 15.4 -6.8 15.9 -6.0
2026-04-15T10:42:37.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:42:37.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:42:37.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.362630
2026-04-15T10:42:37.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:42:37.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:42:37.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:42:37.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:42:37.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:42:37.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:42:10', tmtdew=1.23715, humidity=92.1546, cloud=0.0, wind=13.0759, temperature=11.0464, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:42:11.232', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:42:37.078 [DEBUG] [Thread-17503] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:42:37.300 [DEBUG] [Thread-17506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:42:37.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:42:37.329 [DEBUG] [Thread-17507] [transport.py] [_log()] starting thread (client mode): 0xf1331870
2026-04-15T10:42:37.329 [DEBUG] [Thread-17507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:42:37.342 [DEBUG] [Thread-17507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:42:37.342 [INFO] [Thread-17507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:42:37.350 [DEBUG] [Thread-17507] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:42:37.350 [DEBUG] [Thread-17507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:42:37.350 [DEBUG] [Thread-17507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:42:37.350 [DEBUG] [Thread-17507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:42:37.350 [DEBUG] [Thread-17507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:42:37.350 [DEBUG] [Thread-17507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:42:37.350 [DEBUG] [Thread-17507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:42:37.350 [DEBUG] [Thread-17507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:42:37.350 [DEBUG] [Thread-17507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:42:37.350 [DEBUG] [Thread-17507] [transport.py] [_log()] client lang: <none>
2026-04-15T10:42:37.350 [DEBUG] [Thread-17507] [transport.py] [_log()] server lang: <none>
2026-04-15T10:42:37.350 [DEBUG] [Thread-17507] [transport.py] [_log()] kex follows: False
2026-04-15T10:42:37.350 [DEBUG] [Thread-17507] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:42:37.351 [DEBUG] [Thread-17507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:42:37.351 [DEBUG] [Thread-17507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:42:37.351 [DEBUG] [Thread-17507] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:42:37.351 [DEBUG] [Thread-17507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:42:37.351 [DEBUG] [Thread-17507] [transport.py] [_log()] Compression: none
2026-04-15T10:42:37.351 [DEBUG] [Thread-17507] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:42:37.405 [DEBUG] [Thread-17507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:42:37.405 [DEBUG] [Thread-17507] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:42:37.406 [DEBUG] [Thread-17507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:42:37.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:42:37.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:42:37.462 [DEBUG] [Thread-17507] [transport.py] [_log()] userauth is OK
2026-04-15T10:42:37.463 [DEBUG] [Thread-17507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:42:37.463 [DEBUG] [Thread-17507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:42:37.463 [DEBUG] [Thread-17507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:42:37.463 [DEBUG] [Thread-17507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:42:37.486 [INFO] [Thread-17507] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:42:37.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:42:37.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:42:38.290 [DEBUG] [Thread-17507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:42:38.291 [DEBUG] [Thread-17507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:42:38.337 [DEBUG] [Thread-17507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:42:38.338 [DEBUG] [Thread-17507] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:42:38.347 [DEBUG] [Thread-17507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:42:38.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:42:38.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')
2026-04-15T10:42:38.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
2026-04-15T10:42:38.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:42:38.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:42:38.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:42:38.381 [DEBUG] [Thread-17507] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:42:52.337 [DEBUG] [Thread-17509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:43:03.767 [DEBUG] [Thread-17510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:43:07.370 [DEBUG] [Thread-17511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:43:08.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:43:08.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:43:08.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
2026-04-15T10:43:09.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 42, 45), 2.42364, 85.044, 0.0, 19.831, 11.9587, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:43:09.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:42:45
2026-04-15T10:43:10.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:43:10.511 [DEBUG] [Thread-17512] [transport.py] [_log()] starting thread (client mode): 0xf13e0d30
2026-04-15T10:43:10.511 [DEBUG] [Thread-17512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:43:10.529 [DEBUG] [Thread-17512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:43:10.529 [INFO] [Thread-17512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:43:10.530 [DEBUG] [Thread-17512] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:43:10.531 [DEBUG] [Thread-17512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:43:10.531 [DEBUG] [Thread-17512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:43:10.531 [DEBUG] [Thread-17512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:43:10.531 [DEBUG] [Thread-17512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:43:10.531 [DEBUG] [Thread-17512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:43:10.531 [DEBUG] [Thread-17512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:43:10.531 [DEBUG] [Thread-17512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:43:10.531 [DEBUG] [Thread-17512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:43:10.531 [DEBUG] [Thread-17512] [transport.py] [_log()] client lang: <none>
2026-04-15T10:43:10.531 [DEBUG] [Thread-17512] [transport.py] [_log()] server lang: <none>
2026-04-15T10:43:10.531 [DEBUG] [Thread-17512] [transport.py] [_log()] kex follows: False
2026-04-15T10:43:10.531 [DEBUG] [Thread-17512] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:43:10.532 [DEBUG] [Thread-17512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:43:10.532 [DEBUG] [Thread-17512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:43:10.532 [DEBUG] [Thread-17512] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:43:10.532 [DEBUG] [Thread-17512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:43:10.532 [DEBUG] [Thread-17512] [transport.py] [_log()] Compression: none
2026-04-15T10:43:10.532 [DEBUG] [Thread-17512] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:43:10.540 [DEBUG] [Thread-17512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:43:10.541 [DEBUG] [Thread-17512] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:43:10.541 [DEBUG] [Thread-17512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:43:10.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:43:10.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:43:10.542 [DEBUG] [Thread-17512] [transport.py] [_log()] userauth is OK
2026-04-15T10:43:10.542 [DEBUG] [Thread-17512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:43:10.542 [DEBUG] [Thread-17512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:43:10.542 [DEBUG] [Thread-17512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:43:10.543 [DEBUG] [Thread-17512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:43:10.577 [INFO] [Thread-17512] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:43:10.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:43:11.188 [DEBUG] [Thread-17512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:43:11.188 [DEBUG] [Thread-17512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:43:11.189 [DEBUG] [Thread-17512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:43:11.229 [DEBUG] [Thread-17512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:43:11.229 [DEBUG] [Thread-17512] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:43:11.232 [DEBUG] [Thread-17512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:43:11.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:43:11.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:43:11.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:43:11.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:43:11.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:43:11.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:43:11.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:43:11.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:43:11.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:43:11.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.362976 -999.00  +11.20  12.38     84   +8.70 1 3 1 2 1   888    0 3.13 42.01 ----- 12.4 12.4 299.0 19.7 16.3 -8.0 15.9 -6.7 15.2 -5.6 15.8 -5.6
2026-04-15T10:43:11.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:43:11.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:43:11.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.362976
2026-04-15T10:43:11.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:43:11.257 [DEBUG] [Thread-17512] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:43:11.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:43:11.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:43:11.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:43:11.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:43:11.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:42:45', tmtdew=2.42364, humidity=85.044, cloud=0.0, wind=19.831, temperature=11.9587, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:42:41.126', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:43:11.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:43:11.519 [DEBUG] [Thread-17515] [transport.py] [_log()] starting thread (client mode): 0xf1336320
2026-04-15T10:43:11.519 [DEBUG] [Thread-17515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:43:11.533 [DEBUG] [Thread-17515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:43:11.533 [INFO] [Thread-17515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:43:11.541 [DEBUG] [Thread-17515] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:43:11.541 [DEBUG] [Thread-17515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:43:11.541 [DEBUG] [Thread-17515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:43:11.541 [DEBUG] [Thread-17515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:43:11.541 [DEBUG] [Thread-17515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:43:11.541 [DEBUG] [Thread-17515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:43:11.541 [DEBUG] [Thread-17515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:43:11.541 [DEBUG] [Thread-17515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:43:11.541 [DEBUG] [Thread-17515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:43:11.542 [DEBUG] [Thread-17515] [transport.py] [_log()] client lang: <none>
2026-04-15T10:43:11.542 [DEBUG] [Thread-17515] [transport.py] [_log()] server lang: <none>
2026-04-15T10:43:11.542 [DEBUG] [Thread-17515] [transport.py] [_log()] kex follows: False
2026-04-15T10:43:11.542 [DEBUG] [Thread-17515] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:43:11.542 [DEBUG] [Thread-17515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:43:11.542 [DEBUG] [Thread-17515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:43:11.542 [DEBUG] [Thread-17515] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:43:11.542 [DEBUG] [Thread-17515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:43:11.542 [DEBUG] [Thread-17515] [transport.py] [_log()] Compression: none
2026-04-15T10:43:11.542 [DEBUG] [Thread-17515] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:43:11.596 [DEBUG] [Thread-17515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:43:11.597 [DEBUG] [Thread-17515] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:43:11.597 [DEBUG] [Thread-17515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:43:11.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:43:11.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:43:11.654 [DEBUG] [Thread-17515] [transport.py] [_log()] userauth is OK
2026-04-15T10:43:11.654 [DEBUG] [Thread-17515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:43:11.654 [DEBUG] [Thread-17515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:43:11.654 [DEBUG] [Thread-17515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:43:11.654 [DEBUG] [Thread-17515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:43:11.676 [INFO] [Thread-17515] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:43:11.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:43:11.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:43:12.530 [DEBUG] [Thread-17515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:43:12.531 [DEBUG] [Thread-17515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:43:12.578 [DEBUG] [Thread-17515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:43:12.578 [DEBUG] [Thread-17515] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:43:12.587 [DEBUG] [Thread-17515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:43:12.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:43:12.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')
2026-04-15T10:43:12.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
2026-04-15T10:43:12.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:43:12.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:43:12.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:43:12.622 [DEBUG] [Thread-17515] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:43:22.401 [DEBUG] [Thread-17517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:43:31.596 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:43:31.597 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:43:37.447 [DEBUG] [Thread-17518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:43:42.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:43:42.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:43:42.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
2026-04-15T10:43:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 43, 21), 1.36209, 91.4413, 0.0, 12.7577, 10.9297, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:43:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:43:21
2026-04-15T10:43:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:43:44.748 [DEBUG] [Thread-17519] [transport.py] [_log()] starting thread (client mode): 0xf1336bf0
2026-04-15T10:43:44.749 [DEBUG] [Thread-17519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:43:44.768 [DEBUG] [Thread-17519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:43:44.768 [INFO] [Thread-17519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:43:44.769 [DEBUG] [Thread-17519] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:43:44.769 [DEBUG] [Thread-17519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:43:44.769 [DEBUG] [Thread-17519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:43:44.769 [DEBUG] [Thread-17519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:43:44.769 [DEBUG] [Thread-17519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:43:44.770 [DEBUG] [Thread-17519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:43:44.770 [DEBUG] [Thread-17519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:43:44.770 [DEBUG] [Thread-17519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:43:44.770 [DEBUG] [Thread-17519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:43:44.770 [DEBUG] [Thread-17519] [transport.py] [_log()] client lang: <none>
2026-04-15T10:43:44.770 [DEBUG] [Thread-17519] [transport.py] [_log()] server lang: <none>
2026-04-15T10:43:44.770 [DEBUG] [Thread-17519] [transport.py] [_log()] kex follows: False
2026-04-15T10:43:44.770 [DEBUG] [Thread-17519] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:43:44.770 [DEBUG] [Thread-17519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:43:44.770 [DEBUG] [Thread-17519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:43:44.770 [DEBUG] [Thread-17519] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:43:44.771 [DEBUG] [Thread-17519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:43:44.771 [DEBUG] [Thread-17519] [transport.py] [_log()] Compression: none
2026-04-15T10:43:44.771 [DEBUG] [Thread-17519] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:43:44.780 [DEBUG] [Thread-17519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:43:44.780 [DEBUG] [Thread-17519] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:43:44.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:43:44.781 [DEBUG] [Thread-17519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:43:44.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:43:44.782 [DEBUG] [Thread-17519] [transport.py] [_log()] userauth is OK
2026-04-15T10:43:44.782 [DEBUG] [Thread-17519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:43:44.782 [DEBUG] [Thread-17519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:43:44.782 [DEBUG] [Thread-17519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:43:44.782 [DEBUG] [Thread-17519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:43:44.798 [INFO] [Thread-17519] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:43:44.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:43:45.418 [DEBUG] [Thread-17519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:43:45.418 [DEBUG] [Thread-17519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:43:45.418 [DEBUG] [Thread-17519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:43:45.459 [DEBUG] [Thread-17519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:43:45.459 [DEBUG] [Thread-17519] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:43:45.462 [DEBUG] [Thread-17519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:43:45.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:43:45.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:43:45.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:43:45.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:43:45.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:43:45.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:43:45.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:43:45.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:43:45.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:43:45.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.363670 -999.00  +11.10  17.01     85   +8.70 1 3 1 2 1   888    0 3.13 40.26 ----- 17.0 17.0 285.8 21.7 16.2 -7.3 15.9 -6.4 15.3 -5.4 15.8 -5.0
2026-04-15T10:43:45.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:43:45.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:43:45.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.363670
2026-04-15T10:43:45.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:43:45.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:43:45.484 [DEBUG] [Thread-17519] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:43:45.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:43:45.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:43:45.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:43:45.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:43:21', tmtdew=1.36209, humidity=91.4413, cloud=0.0, wind=12.7577, temperature=10.9297, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:43:41.088', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:43:45.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:43:45.732 [DEBUG] [Thread-17522] [transport.py] [_log()] starting thread (client mode): 0xf1335c00
2026-04-15T10:43:45.732 [DEBUG] [Thread-17522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:43:45.746 [DEBUG] [Thread-17522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:43:45.746 [INFO] [Thread-17522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:43:45.754 [DEBUG] [Thread-17522] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:43:45.754 [DEBUG] [Thread-17522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:43:45.754 [DEBUG] [Thread-17522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:43:45.755 [DEBUG] [Thread-17522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:43:45.755 [DEBUG] [Thread-17522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:43:45.755 [DEBUG] [Thread-17522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:43:45.755 [DEBUG] [Thread-17522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:43:45.755 [DEBUG] [Thread-17522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:43:45.755 [DEBUG] [Thread-17522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:43:45.755 [DEBUG] [Thread-17522] [transport.py] [_log()] client lang: <none>
2026-04-15T10:43:45.755 [DEBUG] [Thread-17522] [transport.py] [_log()] server lang: <none>
2026-04-15T10:43:45.755 [DEBUG] [Thread-17522] [transport.py] [_log()] kex follows: False
2026-04-15T10:43:45.755 [DEBUG] [Thread-17522] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:43:45.755 [DEBUG] [Thread-17522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:43:45.755 [DEBUG] [Thread-17522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:43:45.756 [DEBUG] [Thread-17522] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:43:45.756 [DEBUG] [Thread-17522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:43:45.756 [DEBUG] [Thread-17522] [transport.py] [_log()] Compression: none
2026-04-15T10:43:45.756 [DEBUG] [Thread-17522] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:43:45.812 [DEBUG] [Thread-17522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:43:45.812 [DEBUG] [Thread-17522] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:43:45.813 [DEBUG] [Thread-17522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:43:45.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:43:45.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:43:45.873 [DEBUG] [Thread-17522] [transport.py] [_log()] userauth is OK
2026-04-15T10:43:45.873 [DEBUG] [Thread-17522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:43:45.873 [DEBUG] [Thread-17522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:43:45.873 [DEBUG] [Thread-17522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:43:45.873 [DEBUG] [Thread-17522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:43:45.890 [INFO] [Thread-17522] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:43:45.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:43:45.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:43:46.789 [DEBUG] [Thread-17522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:43:46.790 [DEBUG] [Thread-17522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:43:46.837 [DEBUG] [Thread-17522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:43:46.837 [DEBUG] [Thread-17522] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:43:46.846 [DEBUG] [Thread-17522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:43:46.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:43: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')
2026-04-15T10:43: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
2026-04-15T10:43:46.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:43:46.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:43:46.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:43:46.881 [DEBUG] [Thread-17522] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:43:52.478 [DEBUG] [Thread-17524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:44:03.886 [DEBUG] [Thread-17525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:44:07.521 [DEBUG] [Thread-17526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:44:16.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:44:16.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:44:16.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
2026-04-15T10:44:18.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 43, 56), 1.39512, 91.2587, 0.0, 11.6993, 10.9627, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:44:18.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:43:56
2026-04-15T10:44:18.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:44:19.101 [DEBUG] [Thread-17527] [transport.py] [_log()] starting thread (client mode): 0xee98e830
2026-04-15T10:44:19.101 [DEBUG] [Thread-17527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:44:19.120 [DEBUG] [Thread-17527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:44:19.120 [INFO] [Thread-17527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:44:19.123 [DEBUG] [Thread-17527] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:44:19.123 [DEBUG] [Thread-17527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:44:19.123 [DEBUG] [Thread-17527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:44:19.123 [DEBUG] [Thread-17527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:44:19.124 [DEBUG] [Thread-17527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:44:19.124 [DEBUG] [Thread-17527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:44:19.124 [DEBUG] [Thread-17527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:44:19.124 [DEBUG] [Thread-17527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:44:19.124 [DEBUG] [Thread-17527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:44:19.124 [DEBUG] [Thread-17527] [transport.py] [_log()] client lang: <none>
2026-04-15T10:44:19.124 [DEBUG] [Thread-17527] [transport.py] [_log()] server lang: <none>
2026-04-15T10:44:19.124 [DEBUG] [Thread-17527] [transport.py] [_log()] kex follows: False
2026-04-15T10:44:19.124 [DEBUG] [Thread-17527] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:44:19.124 [DEBUG] [Thread-17527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:44:19.124 [DEBUG] [Thread-17527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:44:19.124 [DEBUG] [Thread-17527] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:44:19.125 [DEBUG] [Thread-17527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:44:19.125 [DEBUG] [Thread-17527] [transport.py] [_log()] Compression: none
2026-04-15T10:44:19.125 [DEBUG] [Thread-17527] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:44:19.141 [DEBUG] [Thread-17527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:44:19.142 [DEBUG] [Thread-17527] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:44:19.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:44:19.142 [DEBUG] [Thread-17527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:44:19.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:44:19.143 [DEBUG] [Thread-17527] [transport.py] [_log()] userauth is OK
2026-04-15T10:44:19.143 [DEBUG] [Thread-17527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:44:19.144 [DEBUG] [Thread-17527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:44:19.144 [DEBUG] [Thread-17527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:44:19.144 [DEBUG] [Thread-17527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:44:19.162 [INFO] [Thread-17527] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:44:19.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:44:19.720 [DEBUG] [Thread-17527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:44:19.720 [DEBUG] [Thread-17527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:44:19.721 [DEBUG] [Thread-17527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:44:19.761 [DEBUG] [Thread-17527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:44:19.761 [DEBUG] [Thread-17527] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:44:19.764 [DEBUG] [Thread-17527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:44:19.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:44:19.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:44:19.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:44:19.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:44:19.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:44:19.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:44:19.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:44:19.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:44:19.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:44:19.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.364018 -999.00  +11.00  14.71     85   +8.60 1 3 1 2 1   888    0 3.12 39.36 ----- 14.7 14.7 283.0 17.1 16.3 -6.0 16.0 -5.7 15.2 -5.2 15.8 -5.1
2026-04-15T10:44:19.793 [DEBUG] [Thread-17527] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:44:19.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:44:19.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:44:19.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.364018
2026-04-15T10:44:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:44:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:44:19.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:44:19.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:44:19.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:44:19.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:43:56', tmtdew=1.39512, humidity=91.2587, cloud=0.0, wind=11.6993, temperature=10.9627, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:44:11.155', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:44:20.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:44:20.050 [DEBUG] [Thread-17530] [transport.py] [_log()] starting thread (client mode): 0xee98e260
2026-04-15T10:44:20.050 [DEBUG] [Thread-17530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:44:20.065 [DEBUG] [Thread-17530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:44:20.065 [INFO] [Thread-17530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:44:20.072 [DEBUG] [Thread-17530] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:44:20.072 [DEBUG] [Thread-17530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:44:20.072 [DEBUG] [Thread-17530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:44:20.072 [DEBUG] [Thread-17530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:44:20.072 [DEBUG] [Thread-17530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:44:20.073 [DEBUG] [Thread-17530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:44:20.073 [DEBUG] [Thread-17530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:44:20.073 [DEBUG] [Thread-17530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:44:20.073 [DEBUG] [Thread-17530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:44:20.073 [DEBUG] [Thread-17530] [transport.py] [_log()] client lang: <none>
2026-04-15T10:44:20.073 [DEBUG] [Thread-17530] [transport.py] [_log()] server lang: <none>
2026-04-15T10:44:20.073 [DEBUG] [Thread-17530] [transport.py] [_log()] kex follows: False
2026-04-15T10:44:20.073 [DEBUG] [Thread-17530] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:44:20.073 [DEBUG] [Thread-17530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:44:20.073 [DEBUG] [Thread-17530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:44:20.073 [DEBUG] [Thread-17530] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:44:20.073 [DEBUG] [Thread-17530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:44:20.073 [DEBUG] [Thread-17530] [transport.py] [_log()] Compression: none
2026-04-15T10:44:20.073 [DEBUG] [Thread-17530] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:44:20.131 [DEBUG] [Thread-17530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:44:20.132 [DEBUG] [Thread-17530] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:44:20.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:44:20.132 [DEBUG] [Thread-17530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:44:20.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:44:20.189 [DEBUG] [Thread-17530] [transport.py] [_log()] userauth is OK
2026-04-15T10:44:20.189 [DEBUG] [Thread-17530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:44:20.189 [DEBUG] [Thread-17530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:44:20.189 [DEBUG] [Thread-17530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:44:20.189 [DEBUG] [Thread-17530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:44:20.214 [INFO] [Thread-17530] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:44:20.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:44:20.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:44:21.089 [DEBUG] [Thread-17530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:44:21.089 [DEBUG] [Thread-17530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:44:21.137 [DEBUG] [Thread-17530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:44:21.137 [DEBUG] [Thread-17530] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:44:21.146 [DEBUG] [Thread-17530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:44:21.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:44:21.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')
2026-04-15T10:44:21.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
2026-04-15T10:44:21.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:44:21.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:44:21.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:44:21.181 [DEBUG] [Thread-17530] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:44:22.551 [DEBUG] [Thread-17532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:44:31.749 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:44:31.750 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:44:37.593 [DEBUG] [Thread-17533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:44:51.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:44:51.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:44:51.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
2026-04-15T10:44:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 44, 32), 1.42498, 91.0928, 0.0, 11.47, 10.9793, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:44:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:44:32
2026-04-15T10:44:52.627 [DEBUG] [Thread-17534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:44:52.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:44:53.369 [DEBUG] [Thread-17535] [transport.py] [_log()] starting thread (client mode): 0xf13e2440
2026-04-15T10:44:53.369 [DEBUG] [Thread-17535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:44:53.388 [DEBUG] [Thread-17535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:44:53.388 [INFO] [Thread-17535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:44:53.391 [DEBUG] [Thread-17535] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:44:53.391 [DEBUG] [Thread-17535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:44:53.391 [DEBUG] [Thread-17535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:44:53.391 [DEBUG] [Thread-17535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:44:53.391 [DEBUG] [Thread-17535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:44:53.391 [DEBUG] [Thread-17535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:44:53.391 [DEBUG] [Thread-17535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:44:53.392 [DEBUG] [Thread-17535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:44:53.392 [DEBUG] [Thread-17535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:44:53.392 [DEBUG] [Thread-17535] [transport.py] [_log()] client lang: <none>
2026-04-15T10:44:53.392 [DEBUG] [Thread-17535] [transport.py] [_log()] server lang: <none>
2026-04-15T10:44:53.392 [DEBUG] [Thread-17535] [transport.py] [_log()] kex follows: False
2026-04-15T10:44:53.392 [DEBUG] [Thread-17535] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:44:53.392 [DEBUG] [Thread-17535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:44:53.392 [DEBUG] [Thread-17535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:44:53.392 [DEBUG] [Thread-17535] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:44:53.392 [DEBUG] [Thread-17535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:44:53.392 [DEBUG] [Thread-17535] [transport.py] [_log()] Compression: none
2026-04-15T10:44:53.392 [DEBUG] [Thread-17535] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:44:53.407 [DEBUG] [Thread-17535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:44:53.407 [DEBUG] [Thread-17535] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:44:53.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:44:53.408 [DEBUG] [Thread-17535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:44:53.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:44:53.409 [DEBUG] [Thread-17535] [transport.py] [_log()] userauth is OK
2026-04-15T10:44:53.409 [DEBUG] [Thread-17535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:44:53.409 [DEBUG] [Thread-17535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:44:53.409 [DEBUG] [Thread-17535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:44:53.409 [DEBUG] [Thread-17535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:44:53.428 [INFO] [Thread-17535] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:44:53.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:44:54.029 [DEBUG] [Thread-17535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:44:54.029 [DEBUG] [Thread-17535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:44:54.030 [DEBUG] [Thread-17535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:44:54.070 [DEBUG] [Thread-17535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:44:54.070 [DEBUG] [Thread-17535] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:44:54.073 [DEBUG] [Thread-17535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:44:54.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:44:54.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:44:54.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:44:54.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:44:54.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:44:54.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:44:54.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:44:54.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:44:54.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:44:54.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.364365 -999.00  +11.10  15.67     84   +8.60 1 3 1 2 1   888    0 3.15 39.73 ----- 15.7 15.7 302.8 18.9 16.2 -6.4 15.9 -5.9 15.1 -5.5 15.8 -4.9
2026-04-15T10:44:54.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:44:54.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:44:54.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.364365
2026-04-15T10:44:54.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:44:54.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:44:54.098 [DEBUG] [Thread-17535] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:44:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:44:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:44:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:44:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:44:32', tmtdew=1.42498, humidity=91.0928, cloud=0.0, wind=11.47, temperature=10.9793, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:44:41.136', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:44:54.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:44:54.354 [DEBUG] [Thread-17538] [transport.py] [_log()] starting thread (client mode): 0xee98e440
2026-04-15T10:44:54.355 [DEBUG] [Thread-17538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:44:54.369 [DEBUG] [Thread-17538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:44:54.369 [INFO] [Thread-17538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:44:54.376 [DEBUG] [Thread-17538] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:44:54.376 [DEBUG] [Thread-17538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:44:54.376 [DEBUG] [Thread-17538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:44:54.376 [DEBUG] [Thread-17538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:44:54.376 [DEBUG] [Thread-17538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:44:54.376 [DEBUG] [Thread-17538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:44:54.376 [DEBUG] [Thread-17538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:44:54.376 [DEBUG] [Thread-17538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:44:54.377 [DEBUG] [Thread-17538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:44:54.377 [DEBUG] [Thread-17538] [transport.py] [_log()] client lang: <none>
2026-04-15T10:44:54.377 [DEBUG] [Thread-17538] [transport.py] [_log()] server lang: <none>
2026-04-15T10:44:54.377 [DEBUG] [Thread-17538] [transport.py] [_log()] kex follows: False
2026-04-15T10:44:54.377 [DEBUG] [Thread-17538] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:44:54.377 [DEBUG] [Thread-17538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:44:54.377 [DEBUG] [Thread-17538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:44:54.377 [DEBUG] [Thread-17538] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:44:54.377 [DEBUG] [Thread-17538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:44:54.377 [DEBUG] [Thread-17538] [transport.py] [_log()] Compression: none
2026-04-15T10:44:54.377 [DEBUG] [Thread-17538] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:44:54.435 [DEBUG] [Thread-17538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:44:54.435 [DEBUG] [Thread-17538] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:44:54.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:44:54.436 [DEBUG] [Thread-17538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:44:54.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:44:54.492 [DEBUG] [Thread-17538] [transport.py] [_log()] userauth is OK
2026-04-15T10:44:54.492 [DEBUG] [Thread-17538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:44:54.492 [DEBUG] [Thread-17538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:44:54.492 [DEBUG] [Thread-17538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:44:54.492 [DEBUG] [Thread-17538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:44:54.517 [INFO] [Thread-17538] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:44:54.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:44:54.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:44:55.338 [DEBUG] [Thread-17538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:44:55.338 [DEBUG] [Thread-17538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:44:55.388 [DEBUG] [Thread-17538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:44:55.388 [DEBUG] [Thread-17538] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:44:55.401 [DEBUG] [Thread-17538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:44:55.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:44:55.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')
2026-04-15T10:44:55.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') -> 00000000
2026-04-15T10:44:55.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:44:55.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:44:55.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:44:55.447 [DEBUG] [Thread-17538] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:45:03.994 [DEBUG] [Thread-17540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:45:07.657 [DEBUG] [Thread-17541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:45:22.694 [DEBUG] [Thread-17542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:45:25.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:45:25.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:45:25.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
2026-04-15T10:45:26.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 45, 7), 1.4896, 90.7278, 0.0, 12.1403, 10.946, 2, 2, 0, 2, 0, 0),)
2026-04-15T10:45:26.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:45:07
2026-04-15T10:45:27.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:45:27.593 [DEBUG] [Thread-17543] [transport.py] [_log()] starting thread (client mode): 0xf1334310
2026-04-15T10:45:27.594 [DEBUG] [Thread-17543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:45:27.614 [DEBUG] [Thread-17543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:45:27.614 [INFO] [Thread-17543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:45:27.617 [DEBUG] [Thread-17543] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:45:27.617 [DEBUG] [Thread-17543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:45:27.617 [DEBUG] [Thread-17543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:45:27.617 [DEBUG] [Thread-17543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:45:27.617 [DEBUG] [Thread-17543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:45:27.617 [DEBUG] [Thread-17543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:45:27.617 [DEBUG] [Thread-17543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:45:27.618 [DEBUG] [Thread-17543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:45:27.618 [DEBUG] [Thread-17543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:45:27.618 [DEBUG] [Thread-17543] [transport.py] [_log()] client lang: <none>
2026-04-15T10:45:27.618 [DEBUG] [Thread-17543] [transport.py] [_log()] server lang: <none>
2026-04-15T10:45:27.618 [DEBUG] [Thread-17543] [transport.py] [_log()] kex follows: False
2026-04-15T10:45:27.618 [DEBUG] [Thread-17543] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:45:27.618 [DEBUG] [Thread-17543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:45:27.618 [DEBUG] [Thread-17543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:45:27.618 [DEBUG] [Thread-17543] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:45:27.618 [DEBUG] [Thread-17543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:45:27.618 [DEBUG] [Thread-17543] [transport.py] [_log()] Compression: none
2026-04-15T10:45:27.619 [DEBUG] [Thread-17543] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:45:27.634 [DEBUG] [Thread-17543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:45:27.634 [DEBUG] [Thread-17543] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:45:27.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:45:27.635 [DEBUG] [Thread-17543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:45:27.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:45:27.636 [DEBUG] [Thread-17543] [transport.py] [_log()] userauth is OK
2026-04-15T10:45:27.636 [DEBUG] [Thread-17543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:45:27.636 [DEBUG] [Thread-17543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:45:27.636 [DEBUG] [Thread-17543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:45:27.636 [DEBUG] [Thread-17543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:45:27.654 [INFO] [Thread-17543] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:45:27.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:45:28.214 [DEBUG] [Thread-17543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:45:28.214 [DEBUG] [Thread-17543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:45:28.215 [DEBUG] [Thread-17543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:45:28.255 [DEBUG] [Thread-17543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:45:28.255 [DEBUG] [Thread-17543] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:45:28.260 [DEBUG] [Thread-17543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:45:28.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:45:28.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:45:28.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:45:28.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:45:28.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:45:28.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:45:28.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:45:28.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:45:28.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:45:28.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.364713 -999.00  +11.10  13.86     85   +8.70 1 3 1 2 1   888    0 3.23 42.17 ----- 13.9 13.9 295.8 16.6 16.3 -6.2 15.9 -5.5 15.2 -4.6 15.8 -5.0
2026-04-15T10:45:28.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:45:28.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:45:28.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.364713
2026-04-15T10:45:28.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:45:28.284 [DEBUG] [Thread-17543] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:45:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:45:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:45:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:45:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:45:28.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:45:07', tmtdew=1.4896, humidity=90.7278, cloud=0.0, wind=12.1403, temperature=10.946, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:45:11.203', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:45:28.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:45:28.539 [DEBUG] [Thread-17546] [transport.py] [_log()] starting thread (client mode): 0xf1334eb0
2026-04-15T10:45:28.540 [DEBUG] [Thread-17546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:45:28.554 [DEBUG] [Thread-17546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:45:28.554 [INFO] [Thread-17546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:45:28.561 [DEBUG] [Thread-17546] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:45:28.561 [DEBUG] [Thread-17546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:45:28.561 [DEBUG] [Thread-17546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:45:28.561 [DEBUG] [Thread-17546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:45:28.561 [DEBUG] [Thread-17546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:45:28.562 [DEBUG] [Thread-17546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:45:28.562 [DEBUG] [Thread-17546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:45:28.562 [DEBUG] [Thread-17546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:45:28.562 [DEBUG] [Thread-17546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:45:28.562 [DEBUG] [Thread-17546] [transport.py] [_log()] client lang: <none>
2026-04-15T10:45:28.562 [DEBUG] [Thread-17546] [transport.py] [_log()] server lang: <none>
2026-04-15T10:45:28.562 [DEBUG] [Thread-17546] [transport.py] [_log()] kex follows: False
2026-04-15T10:45:28.562 [DEBUG] [Thread-17546] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:45:28.562 [DEBUG] [Thread-17546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:45:28.562 [DEBUG] [Thread-17546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:45:28.562 [DEBUG] [Thread-17546] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:45:28.562 [DEBUG] [Thread-17546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:45:28.562 [DEBUG] [Thread-17546] [transport.py] [_log()] Compression: none
2026-04-15T10:45:28.562 [DEBUG] [Thread-17546] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:45:28.620 [DEBUG] [Thread-17546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:45:28.621 [DEBUG] [Thread-17546] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:45:28.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:45:28.622 [DEBUG] [Thread-17546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:45:28.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:45:28.679 [DEBUG] [Thread-17546] [transport.py] [_log()] userauth is OK
2026-04-15T10:45:28.679 [DEBUG] [Thread-17546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:45:28.679 [DEBUG] [Thread-17546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:45:28.680 [DEBUG] [Thread-17546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:45:28.680 [DEBUG] [Thread-17546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:45:28.705 [INFO] [Thread-17546] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:45:28.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:45:28.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:45:29.604 [DEBUG] [Thread-17546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:45:29.604 [DEBUG] [Thread-17546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:45:29.652 [DEBUG] [Thread-17546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:45:29.652 [DEBUG] [Thread-17546] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:45:29.661 [DEBUG] [Thread-17546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:45:29.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:45:29.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')
2026-04-15T10:45:29.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
2026-04-15T10:45:29.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:45:29.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:45:29.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:45:29.699 [DEBUG] [Thread-17546] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:45:31.893 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:45:31.894 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:45:37.726 [DEBUG] [Thread-17548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:45:52.772 [DEBUG] [Thread-17549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:45:59.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:45:59.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:45:59.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
2026-04-15T10:46:01.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 45, 43), 2.8799, 82.4556, 0.0, 19.6193, 11.8251, 0, 1, 0, 2, 0, 0),)
2026-04-15T10:46:01.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:45:43
2026-04-15T10:46:01.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:46:01.878 [DEBUG] [Thread-17550] [transport.py] [_log()] starting thread (client mode): 0xf13645e0
2026-04-15T10:46:01.878 [DEBUG] [Thread-17550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:46:01.893 [DEBUG] [Thread-17550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:46:01.893 [INFO] [Thread-17550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:46:01.896 [DEBUG] [Thread-17550] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:46:01.896 [DEBUG] [Thread-17550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:46:01.896 [DEBUG] [Thread-17550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:46:01.896 [DEBUG] [Thread-17550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:46:01.896 [DEBUG] [Thread-17550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:46:01.896 [DEBUG] [Thread-17550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:46:01.896 [DEBUG] [Thread-17550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:46:01.896 [DEBUG] [Thread-17550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:46:01.896 [DEBUG] [Thread-17550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:46:01.896 [DEBUG] [Thread-17550] [transport.py] [_log()] client lang: <none>
2026-04-15T10:46:01.896 [DEBUG] [Thread-17550] [transport.py] [_log()] server lang: <none>
2026-04-15T10:46:01.897 [DEBUG] [Thread-17550] [transport.py] [_log()] kex follows: False
2026-04-15T10:46:01.897 [DEBUG] [Thread-17550] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:46:01.897 [DEBUG] [Thread-17550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:46:01.897 [DEBUG] [Thread-17550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:46:01.897 [DEBUG] [Thread-17550] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:46:01.897 [DEBUG] [Thread-17550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:46:01.897 [DEBUG] [Thread-17550] [transport.py] [_log()] Compression: none
2026-04-15T10:46:01.897 [DEBUG] [Thread-17550] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:46:01.915 [DEBUG] [Thread-17550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:46:01.916 [DEBUG] [Thread-17550] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:46:01.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:46:01.916 [DEBUG] [Thread-17550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:46:01.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:46:01.918 [DEBUG] [Thread-17550] [transport.py] [_log()] userauth is OK
2026-04-15T10:46:01.918 [DEBUG] [Thread-17550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:46:01.918 [DEBUG] [Thread-17550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:46:01.918 [DEBUG] [Thread-17550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:46:01.918 [DEBUG] [Thread-17550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:46:01.942 [INFO] [Thread-17550] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:46:01.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:46:02.501 [DEBUG] [Thread-17550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:46:02.501 [DEBUG] [Thread-17550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:46:02.502 [DEBUG] [Thread-17550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:46:02.542 [DEBUG] [Thread-17550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:46:02.542 [DEBUG] [Thread-17550] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:46:02.545 [DEBUG] [Thread-17550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:46:02.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:46:02.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:46:02.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:46:02.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:46:02.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:46:02.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:46:02.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:46:02.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:46:02.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:46:02.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.365059 -999.00  +11.20  15.16     85   +8.90 1 3 1 2 1   888    0 3.31 42.84 ----- 15.2 15.2 314.8 19.4 16.4 -5.8 15.9 -5.6 15.2 -4.8 15.8 -5.3
2026-04-15T10:46:02.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:46:02.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:46:02.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.365059
2026-04-15T10:46:02.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:46:02.572 [DEBUG] [Thread-17550] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:46:02.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:46:02.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:46:02.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:46:02.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:46:02.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:45:43', tmtdew=2.8799, humidity=82.4556, cloud=0.0, wind=19.6193, temperature=11.8251, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:45:41.098', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:46:02.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:46:02.829 [DEBUG] [Thread-17553] [transport.py] [_log()] starting thread (client mode): 0xee98ed40
2026-04-15T10:46:02.829 [DEBUG] [Thread-17553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:46:02.843 [DEBUG] [Thread-17553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:46:02.843 [INFO] [Thread-17553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:46:02.854 [DEBUG] [Thread-17553] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:46:02.854 [DEBUG] [Thread-17553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:46:02.854 [DEBUG] [Thread-17553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:46:02.854 [DEBUG] [Thread-17553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:46:02.854 [DEBUG] [Thread-17553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:46:02.854 [DEBUG] [Thread-17553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:46:02.854 [DEBUG] [Thread-17553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:46:02.854 [DEBUG] [Thread-17553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:46:02.854 [DEBUG] [Thread-17553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:46:02.854 [DEBUG] [Thread-17553] [transport.py] [_log()] client lang: <none>
2026-04-15T10:46:02.855 [DEBUG] [Thread-17553] [transport.py] [_log()] server lang: <none>
2026-04-15T10:46:02.855 [DEBUG] [Thread-17553] [transport.py] [_log()] kex follows: False
2026-04-15T10:46:02.855 [DEBUG] [Thread-17553] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:46:02.855 [DEBUG] [Thread-17553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:46:02.855 [DEBUG] [Thread-17553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:46:02.855 [DEBUG] [Thread-17553] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:46:02.855 [DEBUG] [Thread-17553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:46:02.855 [DEBUG] [Thread-17553] [transport.py] [_log()] Compression: none
2026-04-15T10:46:02.855 [DEBUG] [Thread-17553] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:46:02.910 [DEBUG] [Thread-17553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:46:02.910 [DEBUG] [Thread-17553] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:46:02.911 [DEBUG] [Thread-17553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:46:02.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:46:02.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:46:02.968 [DEBUG] [Thread-17553] [transport.py] [_log()] userauth is OK
2026-04-15T10:46:02.969 [DEBUG] [Thread-17553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:46:02.969 [DEBUG] [Thread-17553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:46:02.969 [DEBUG] [Thread-17553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:46:02.969 [DEBUG] [Thread-17553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:46:02.995 [INFO] [Thread-17553] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:46:02.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:46:02.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:46:03.838 [DEBUG] [Thread-17553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:46:03.838 [DEBUG] [Thread-17553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:46:03.888 [DEBUG] [Thread-17553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:46:03.889 [DEBUG] [Thread-17553] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:46:03.899 [DEBUG] [Thread-17553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:46:03.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:46:03.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')
2026-04-15T10:46:03.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
2026-04-15T10:46:03.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:46:03.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:46:03.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:46:03.936 [DEBUG] [Thread-17553] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:46:04.117 [DEBUG] [Thread-17555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:46:07.801 [DEBUG] [Thread-17556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:46:22.846 [DEBUG] [Thread-17557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:46:32.035 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:46:32.036 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:46:33.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:46:33.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:46:33.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:46:35.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 46, 18), 1.50001, 90.6779, 0.0, 14.9634, 10.9622, 1, 2, 0, 2, 0, 0),)
2026-04-15T10:46:35.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:46:18
2026-04-15T10:46:35.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:46:36.224 [DEBUG] [Thread-17558] [transport.py] [_log()] starting thread (client mode): 0xf1334c70
2026-04-15T10:46:36.224 [DEBUG] [Thread-17558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:46:36.243 [DEBUG] [Thread-17558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:46:36.243 [INFO] [Thread-17558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:46:36.246 [DEBUG] [Thread-17558] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:46:36.246 [DEBUG] [Thread-17558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:46:36.246 [DEBUG] [Thread-17558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:46:36.246 [DEBUG] [Thread-17558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:46:36.246 [DEBUG] [Thread-17558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:46:36.246 [DEBUG] [Thread-17558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:46:36.246 [DEBUG] [Thread-17558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:46:36.247 [DEBUG] [Thread-17558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:46:36.247 [DEBUG] [Thread-17558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:46:36.247 [DEBUG] [Thread-17558] [transport.py] [_log()] client lang: <none>
2026-04-15T10:46:36.247 [DEBUG] [Thread-17558] [transport.py] [_log()] server lang: <none>
2026-04-15T10:46:36.247 [DEBUG] [Thread-17558] [transport.py] [_log()] kex follows: False
2026-04-15T10:46:36.247 [DEBUG] [Thread-17558] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:46:36.247 [DEBUG] [Thread-17558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:46:36.247 [DEBUG] [Thread-17558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:46:36.247 [DEBUG] [Thread-17558] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:46:36.247 [DEBUG] [Thread-17558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:46:36.247 [DEBUG] [Thread-17558] [transport.py] [_log()] Compression: none
2026-04-15T10:46:36.247 [DEBUG] [Thread-17558] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:46:36.263 [DEBUG] [Thread-17558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:46:36.263 [DEBUG] [Thread-17558] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:46:36.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:46:36.264 [DEBUG] [Thread-17558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:46:36.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:46:36.265 [DEBUG] [Thread-17558] [transport.py] [_log()] userauth is OK
2026-04-15T10:46:36.265 [DEBUG] [Thread-17558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:46:36.265 [DEBUG] [Thread-17558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:46:36.265 [DEBUG] [Thread-17558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:46:36.265 [DEBUG] [Thread-17558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:46:36.279 [INFO] [Thread-17558] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:46:36.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:46:36.904 [DEBUG] [Thread-17558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:46:36.904 [DEBUG] [Thread-17558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:46:36.904 [DEBUG] [Thread-17558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:46:36.945 [DEBUG] [Thread-17558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:46:36.945 [DEBUG] [Thread-17558] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:46:36.948 [DEBUG] [Thread-17558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:46:36.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:46:36.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:46:36.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:46:36.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:46:36.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:46:36.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:46:36.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:46:36.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:46:36.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:46:36.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.365406 -999.00  +11.10  11.89     85   +8.70 1 3 1 2 1   888    0 3.31 42.71 ----- 14.2 11.9 322.4 16.4 16.4 -6.0 16.0 -5.4 15.4 -4.7 15.9 -5.1
2026-04-15T10:46:36.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:46:36.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:46:36.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.365406
2026-04-15T10:46:36.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:46:36.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:46:36.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:46:36.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:46:36.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:46:36.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:46:18', tmtdew=1.50001, humidity=90.6779, cloud=0.0, wind=14.9634, temperature=10.9622, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:46:11.078', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:46:36.960 [DEBUG] [Thread-17558] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:46:37.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:46:37.173 [DEBUG] [Thread-17561] [transport.py] [_log()] starting thread (client mode): 0xf13e0a60
2026-04-15T10:46:37.173 [DEBUG] [Thread-17561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:46:37.188 [DEBUG] [Thread-17561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:46:37.188 [INFO] [Thread-17561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:46:37.196 [DEBUG] [Thread-17561] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:46:37.196 [DEBUG] [Thread-17561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:46:37.196 [DEBUG] [Thread-17561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:46:37.196 [DEBUG] [Thread-17561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:46:37.196 [DEBUG] [Thread-17561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:46:37.196 [DEBUG] [Thread-17561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:46:37.196 [DEBUG] [Thread-17561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:46:37.196 [DEBUG] [Thread-17561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:46:37.197 [DEBUG] [Thread-17561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:46:37.197 [DEBUG] [Thread-17561] [transport.py] [_log()] client lang: <none>
2026-04-15T10:46:37.197 [DEBUG] [Thread-17561] [transport.py] [_log()] server lang: <none>
2026-04-15T10:46:37.197 [DEBUG] [Thread-17561] [transport.py] [_log()] kex follows: False
2026-04-15T10:46:37.197 [DEBUG] [Thread-17561] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:46:37.197 [DEBUG] [Thread-17561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:46:37.197 [DEBUG] [Thread-17561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:46:37.197 [DEBUG] [Thread-17561] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:46:37.197 [DEBUG] [Thread-17561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:46:37.197 [DEBUG] [Thread-17561] [transport.py] [_log()] Compression: none
2026-04-15T10:46:37.197 [DEBUG] [Thread-17561] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:46:37.254 [DEBUG] [Thread-17561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:46:37.254 [DEBUG] [Thread-17561] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:46:37.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:46:37.255 [DEBUG] [Thread-17561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:46:37.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:46:37.310 [DEBUG] [Thread-17561] [transport.py] [_log()] userauth is OK
2026-04-15T10:46:37.310 [DEBUG] [Thread-17561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:46:37.311 [DEBUG] [Thread-17561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:46:37.311 [DEBUG] [Thread-17561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:46:37.311 [DEBUG] [Thread-17561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:46:37.336 [INFO] [Thread-17561] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:46:37.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:46:37.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:46:37.878 [DEBUG] [Thread-17563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:46:38.166 [DEBUG] [Thread-17561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:46:38.166 [DEBUG] [Thread-17561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:46:38.213 [DEBUG] [Thread-17561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:46:38.214 [DEBUG] [Thread-17561] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:46:38.222 [DEBUG] [Thread-17561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:46:38.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:46:38.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')
2026-04-15T10:46:38.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
2026-04-15T10:46:38.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:46:38.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:46:38.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:46:38.253 [DEBUG] [Thread-17561] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:46:52.924 [DEBUG] [Thread-17564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:47:04.228 [DEBUG] [Thread-17565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:47:07.956 [DEBUG] [Thread-17566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:47:08.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:47:08.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:47:08.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
2026-04-15T10:47:09.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 46, 54), 2.97481, 81.9247, 0.0, 9.67032, 11.7918, 0, 1, 0, 2, 0, 0),)
2026-04-15T10:47:09.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:46:54
2026-04-15T10:47:09.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:47:10.450 [DEBUG] [Thread-17567] [transport.py] [_log()] starting thread (client mode): 0xee98fa60
2026-04-15T10:47:10.450 [DEBUG] [Thread-17567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:47:10.473 [DEBUG] [Thread-17567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:47:10.473 [INFO] [Thread-17567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:47:10.474 [DEBUG] [Thread-17567] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:47:10.475 [DEBUG] [Thread-17567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:47:10.475 [DEBUG] [Thread-17567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:47:10.475 [DEBUG] [Thread-17567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:47:10.475 [DEBUG] [Thread-17567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:47:10.475 [DEBUG] [Thread-17567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:47:10.475 [DEBUG] [Thread-17567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:47:10.475 [DEBUG] [Thread-17567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:47:10.475 [DEBUG] [Thread-17567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:47:10.475 [DEBUG] [Thread-17567] [transport.py] [_log()] client lang: <none>
2026-04-15T10:47:10.476 [DEBUG] [Thread-17567] [transport.py] [_log()] server lang: <none>
2026-04-15T10:47:10.476 [DEBUG] [Thread-17567] [transport.py] [_log()] kex follows: False
2026-04-15T10:47:10.476 [DEBUG] [Thread-17567] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:47:10.476 [DEBUG] [Thread-17567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:47:10.476 [DEBUG] [Thread-17567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:47:10.476 [DEBUG] [Thread-17567] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:47:10.476 [DEBUG] [Thread-17567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:47:10.476 [DEBUG] [Thread-17567] [transport.py] [_log()] Compression: none
2026-04-15T10:47:10.476 [DEBUG] [Thread-17567] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:47:10.485 [DEBUG] [Thread-17567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:47:10.485 [DEBUG] [Thread-17567] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:47:10.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:47:10.486 [DEBUG] [Thread-17567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:47:10.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:47:10.487 [DEBUG] [Thread-17567] [transport.py] [_log()] userauth is OK
2026-04-15T10:47:10.487 [DEBUG] [Thread-17567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:47:10.487 [DEBUG] [Thread-17567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:47:10.487 [DEBUG] [Thread-17567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:47:10.487 [DEBUG] [Thread-17567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:47:10.504 [INFO] [Thread-17567] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:47:10.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:47:11.086 [DEBUG] [Thread-17567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:47:11.086 [DEBUG] [Thread-17567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:47:11.087 [DEBUG] [Thread-17567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:47:11.126 [DEBUG] [Thread-17567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:47:11.127 [DEBUG] [Thread-17567] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:47:11.128 [DEBUG] [Thread-17567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:47:11.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:47:11.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:47:11.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:47:11.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:47:11.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:47:11.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:47:11.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:47:11.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:47:11.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:47:11.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.365754 -999.00  +11.30  13.19     84   +8.80 1 3 1 2 1   888    0 3.39 44.87 ----- 13.2 13.2 293.4 18.3 16.4 -6.3 15.9 -5.5 15.4 -6.3 15.9 -5.5
2026-04-15T10:47:11.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:47:11.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:47:11.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.365754
2026-04-15T10:47:11.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:47:11.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:47:11.144 [DEBUG] [Thread-17567] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:47:11.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:47:11.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:47:11.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:47:11.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:46:54', tmtdew=2.97481, humidity=81.9247, cloud=0.0, wind=9.67032, temperature=11.7918, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:46:41.146', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:47:11.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:47:11.361 [DEBUG] [Thread-17570] [transport.py] [_log()] starting thread (client mode): 0xf1364a30
2026-04-15T10:47:11.361 [DEBUG] [Thread-17570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:47:11.375 [DEBUG] [Thread-17570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:47:11.375 [INFO] [Thread-17570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:47:11.382 [DEBUG] [Thread-17570] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:47:11.382 [DEBUG] [Thread-17570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:47:11.383 [DEBUG] [Thread-17570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:47:11.383 [DEBUG] [Thread-17570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:47:11.383 [DEBUG] [Thread-17570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:47:11.383 [DEBUG] [Thread-17570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:47:11.383 [DEBUG] [Thread-17570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:47:11.383 [DEBUG] [Thread-17570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:47:11.383 [DEBUG] [Thread-17570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:47:11.383 [DEBUG] [Thread-17570] [transport.py] [_log()] client lang: <none>
2026-04-15T10:47:11.383 [DEBUG] [Thread-17570] [transport.py] [_log()] server lang: <none>
2026-04-15T10:47:11.383 [DEBUG] [Thread-17570] [transport.py] [_log()] kex follows: False
2026-04-15T10:47:11.384 [DEBUG] [Thread-17570] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:47:11.384 [DEBUG] [Thread-17570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:47:11.384 [DEBUG] [Thread-17570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:47:11.384 [DEBUG] [Thread-17570] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:47:11.384 [DEBUG] [Thread-17570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:47:11.384 [DEBUG] [Thread-17570] [transport.py] [_log()] Compression: none
2026-04-15T10:47:11.384 [DEBUG] [Thread-17570] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:47:11.441 [DEBUG] [Thread-17570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:47:11.441 [DEBUG] [Thread-17570] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:47:11.442 [DEBUG] [Thread-17570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:47:11.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:47:11.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:47:11.498 [DEBUG] [Thread-17570] [transport.py] [_log()] userauth is OK
2026-04-15T10:47:11.498 [DEBUG] [Thread-17570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:47:11.498 [DEBUG] [Thread-17570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:47:11.498 [DEBUG] [Thread-17570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:47:11.498 [DEBUG] [Thread-17570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:47:11.521 [INFO] [Thread-17570] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:47:11.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:47:11.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:47:12.364 [DEBUG] [Thread-17570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:47:12.364 [DEBUG] [Thread-17570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:47:12.412 [DEBUG] [Thread-17570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:47:12.412 [DEBUG] [Thread-17570] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:47:12.421 [DEBUG] [Thread-17570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:47:12.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:47:12.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')
2026-04-15T10:47:12.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
2026-04-15T10:47:12.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:47:12.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:47:12.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:47:12.455 [DEBUG] [Thread-17570] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:47:22.988 [DEBUG] [Thread-17572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:47:32.177 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:47:32.179 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:47:38.053 [DEBUG] [Thread-17573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:47:42.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:47:42.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:47:42.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
2026-04-15T10:47:43.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 47, 29), 1.55472, 90.3624, 0.0, 10.1999, 11.0124, 1, 2, 0, 2, 0, 0),)
2026-04-15T10:47:43.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:47:29
2026-04-15T10:47:44.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:47:44.558 [DEBUG] [Thread-17574] [transport.py] [_log()] starting thread (client mode): 0xee98e320
2026-04-15T10:47:44.558 [DEBUG] [Thread-17574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:47:44.578 [DEBUG] [Thread-17574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:47:44.578 [INFO] [Thread-17574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:47:44.581 [DEBUG] [Thread-17574] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:47:44.581 [DEBUG] [Thread-17574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:47:44.581 [DEBUG] [Thread-17574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:47:44.581 [DEBUG] [Thread-17574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:47:44.581 [DEBUG] [Thread-17574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:47:44.582 [DEBUG] [Thread-17574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:47:44.582 [DEBUG] [Thread-17574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:47:44.582 [DEBUG] [Thread-17574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:47:44.582 [DEBUG] [Thread-17574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:47:44.582 [DEBUG] [Thread-17574] [transport.py] [_log()] client lang: <none>
2026-04-15T10:47:44.582 [DEBUG] [Thread-17574] [transport.py] [_log()] server lang: <none>
2026-04-15T10:47:44.582 [DEBUG] [Thread-17574] [transport.py] [_log()] kex follows: False
2026-04-15T10:47:44.582 [DEBUG] [Thread-17574] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:47:44.582 [DEBUG] [Thread-17574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:47:44.582 [DEBUG] [Thread-17574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:47:44.582 [DEBUG] [Thread-17574] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:47:44.582 [DEBUG] [Thread-17574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:47:44.583 [DEBUG] [Thread-17574] [transport.py] [_log()] Compression: none
2026-04-15T10:47:44.583 [DEBUG] [Thread-17574] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:47:44.591 [DEBUG] [Thread-17574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:47:44.591 [DEBUG] [Thread-17574] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:47:44.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:47:44.592 [DEBUG] [Thread-17574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:47:44.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:47:44.593 [DEBUG] [Thread-17574] [transport.py] [_log()] userauth is OK
2026-04-15T10:47:44.593 [DEBUG] [Thread-17574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:47:44.593 [DEBUG] [Thread-17574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:47:44.593 [DEBUG] [Thread-17574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:47:44.593 [DEBUG] [Thread-17574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:47:44.611 [INFO] [Thread-17574] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:47:44.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:47:45.206 [DEBUG] [Thread-17574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:47:45.206 [DEBUG] [Thread-17574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:47:45.207 [DEBUG] [Thread-17574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:47:45.247 [DEBUG] [Thread-17574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:47:45.247 [DEBUG] [Thread-17574] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:47:45.253 [DEBUG] [Thread-17574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:47:45.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:47:45.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:47:45.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:47:45.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:47:45.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:47:45.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:47:45.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:47:45.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:47:45.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:47:45.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.366448 -999.00  +11.40  10.95     85   +9.00 1 3 1 2 1   888    0 3.43 45.30 ----- 10.9 10.9 292.2 16.7 16.6 -5.8 16.2 -5.5 15.6 -4.6 16.1 -5.0
2026-04-15T10:47:45.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:47:45.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:47:45.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.366448
2026-04-15T10:47:45.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:47:45.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:47:45.272 [DEBUG] [Thread-17574] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:47:45.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:47:45.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:47:45.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:47:45.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:47:29', tmtdew=1.55472, humidity=90.3624, cloud=0.0, wind=10.1999, temperature=11.0124, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:47:41.107', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:47:45.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:47:45.523 [DEBUG] [Thread-17577] [transport.py] [_log()] starting thread (client mode): 0xf13e06d0
2026-04-15T10:47:45.523 [DEBUG] [Thread-17577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:47:45.546 [DEBUG] [Thread-17577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:47:45.546 [INFO] [Thread-17577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:47:45.553 [DEBUG] [Thread-17577] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:47:45.553 [DEBUG] [Thread-17577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:47:45.553 [DEBUG] [Thread-17577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:47:45.553 [DEBUG] [Thread-17577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:47:45.553 [DEBUG] [Thread-17577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:47:45.553 [DEBUG] [Thread-17577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:47:45.554 [DEBUG] [Thread-17577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:47:45.554 [DEBUG] [Thread-17577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:47:45.554 [DEBUG] [Thread-17577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:47:45.554 [DEBUG] [Thread-17577] [transport.py] [_log()] client lang: <none>
2026-04-15T10:47:45.554 [DEBUG] [Thread-17577] [transport.py] [_log()] server lang: <none>
2026-04-15T10:47:45.554 [DEBUG] [Thread-17577] [transport.py] [_log()] kex follows: False
2026-04-15T10:47:45.554 [DEBUG] [Thread-17577] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:47:45.554 [DEBUG] [Thread-17577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:47:45.554 [DEBUG] [Thread-17577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:47:45.554 [DEBUG] [Thread-17577] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:47:45.554 [DEBUG] [Thread-17577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:47:45.554 [DEBUG] [Thread-17577] [transport.py] [_log()] Compression: none
2026-04-15T10:47:45.555 [DEBUG] [Thread-17577] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:47:45.612 [DEBUG] [Thread-17577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:47:45.613 [DEBUG] [Thread-17577] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:47:45.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:47:45.613 [DEBUG] [Thread-17577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:47:45.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:47:45.669 [DEBUG] [Thread-17577] [transport.py] [_log()] userauth is OK
2026-04-15T10:47:45.669 [DEBUG] [Thread-17577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:47:45.670 [DEBUG] [Thread-17577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:47:45.670 [DEBUG] [Thread-17577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:47:45.670 [DEBUG] [Thread-17577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:47:45.698 [INFO] [Thread-17577] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:47:45.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:47:45.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:47:46.526 [DEBUG] [Thread-17577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:47:46.526 [DEBUG] [Thread-17577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:47:46.574 [DEBUG] [Thread-17577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:47:46.574 [DEBUG] [Thread-17577] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:47:46.583 [DEBUG] [Thread-17577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:47:46.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:47:46.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T10:47:46.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
2026-04-15T10:47:46.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:47:46.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:47:46.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:47:46.618 [DEBUG] [Thread-17577] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:47:53.086 [DEBUG] [Thread-17579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:48:04.355 [DEBUG] [Thread-17580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:48:08.131 [DEBUG] [Thread-17581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:48:16.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:48:16.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:48:16.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
2026-04-15T10:48:17.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 48, 4), 1.53411, 90.4785, 0.0, 9.60012, 11.029, 1, 2, 0, 2, 0, 0),)
2026-04-15T10:48:17.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:48:04
2026-04-15T10:48:18.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:48:18.759 [DEBUG] [Thread-17582] [transport.py] [_log()] starting thread (client mode): 0xf13ff400
2026-04-15T10:48:18.759 [DEBUG] [Thread-17582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:48:18.776 [DEBUG] [Thread-17582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:48:18.776 [INFO] [Thread-17582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:48:18.780 [DEBUG] [Thread-17582] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:48:18.780 [DEBUG] [Thread-17582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:48:18.780 [DEBUG] [Thread-17582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:48:18.780 [DEBUG] [Thread-17582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:48:18.780 [DEBUG] [Thread-17582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:48:18.780 [DEBUG] [Thread-17582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:48:18.780 [DEBUG] [Thread-17582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:48:18.780 [DEBUG] [Thread-17582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:48:18.781 [DEBUG] [Thread-17582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:48:18.781 [DEBUG] [Thread-17582] [transport.py] [_log()] client lang: <none>
2026-04-15T10:48:18.781 [DEBUG] [Thread-17582] [transport.py] [_log()] server lang: <none>
2026-04-15T10:48:18.781 [DEBUG] [Thread-17582] [transport.py] [_log()] kex follows: False
2026-04-15T10:48:18.781 [DEBUG] [Thread-17582] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:48:18.781 [DEBUG] [Thread-17582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:48:18.781 [DEBUG] [Thread-17582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:48:18.781 [DEBUG] [Thread-17582] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:48:18.781 [DEBUG] [Thread-17582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:48:18.781 [DEBUG] [Thread-17582] [transport.py] [_log()] Compression: none
2026-04-15T10:48:18.781 [DEBUG] [Thread-17582] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:48:18.799 [DEBUG] [Thread-17582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:48:18.799 [DEBUG] [Thread-17582] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:48:18.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:48:18.800 [DEBUG] [Thread-17582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:48:18.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:48:18.801 [DEBUG] [Thread-17582] [transport.py] [_log()] userauth is OK
2026-04-15T10:48:18.801 [DEBUG] [Thread-17582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:48:18.801 [DEBUG] [Thread-17582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:48:18.801 [DEBUG] [Thread-17582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:48:18.801 [DEBUG] [Thread-17582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:48:18.819 [INFO] [Thread-17582] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:48:18.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:48:19.445 [DEBUG] [Thread-17582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:48:19.445 [DEBUG] [Thread-17582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:48:19.446 [DEBUG] [Thread-17582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:48:19.486 [DEBUG] [Thread-17582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:48:19.486 [DEBUG] [Thread-17582] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:48:19.488 [DEBUG] [Thread-17582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:48:19.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:48:19.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:48:19.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:48:19.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:48:19.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:48:19.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:48:19.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:48:19.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:48:19.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:48:19.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.366796 -999.00  +11.40  16.98     84   +8.90 1 3 1 2 1   888    0 3.53 48.50 ----- 17.0 17.0 269.6 20.8 16.5 -6.8 16.2 -6.1 15.4 -5.1 16.0 -6.1
2026-04-15T10:48:19.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:48:19.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:48:19.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.366796
2026-04-15T10:48:19.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:48:19.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:48:19.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:48:19.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:48:19.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:48:19.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:48:04', tmtdew=1.53411, humidity=90.4785, cloud=0.0, wind=9.60012, temperature=11.029, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:48:11.174', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:48:19.512 [DEBUG] [Thread-17582] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:48:19.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:48:19.763 [DEBUG] [Thread-17585] [transport.py] [_log()] starting thread (client mode): 0xf13ef820
2026-04-15T10:48:19.763 [DEBUG] [Thread-17585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:48:19.777 [DEBUG] [Thread-17585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:48:19.777 [INFO] [Thread-17585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:48:19.785 [DEBUG] [Thread-17585] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:48:19.785 [DEBUG] [Thread-17585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:48:19.785 [DEBUG] [Thread-17585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:48:19.785 [DEBUG] [Thread-17585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:48:19.785 [DEBUG] [Thread-17585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:48:19.785 [DEBUG] [Thread-17585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:48:19.785 [DEBUG] [Thread-17585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:48:19.785 [DEBUG] [Thread-17585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:48:19.785 [DEBUG] [Thread-17585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:48:19.785 [DEBUG] [Thread-17585] [transport.py] [_log()] client lang: <none>
2026-04-15T10:48:19.786 [DEBUG] [Thread-17585] [transport.py] [_log()] server lang: <none>
2026-04-15T10:48:19.786 [DEBUG] [Thread-17585] [transport.py] [_log()] kex follows: False
2026-04-15T10:48:19.786 [DEBUG] [Thread-17585] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:48:19.786 [DEBUG] [Thread-17585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:48:19.786 [DEBUG] [Thread-17585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:48:19.786 [DEBUG] [Thread-17585] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:48:19.786 [DEBUG] [Thread-17585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:48:19.786 [DEBUG] [Thread-17585] [transport.py] [_log()] Compression: none
2026-04-15T10:48:19.786 [DEBUG] [Thread-17585] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:48:19.844 [DEBUG] [Thread-17585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:48:19.844 [DEBUG] [Thread-17585] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:48:19.845 [DEBUG] [Thread-17585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:48:19.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:48:19.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:48:19.901 [DEBUG] [Thread-17585] [transport.py] [_log()] userauth is OK
2026-04-15T10:48:19.901 [DEBUG] [Thread-17585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:48:19.901 [DEBUG] [Thread-17585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:48:19.901 [DEBUG] [Thread-17585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:48:19.901 [DEBUG] [Thread-17585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:48:19.926 [INFO] [Thread-17585] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:48:19.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:48:19.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:48:20.756 [DEBUG] [Thread-17585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:48:20.756 [DEBUG] [Thread-17585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:48:20.803 [DEBUG] [Thread-17585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:48:20.803 [DEBUG] [Thread-17585] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:48:20.812 [DEBUG] [Thread-17585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:48:20.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:48:20.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')
2026-04-15T10:48:20.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
2026-04-15T10:48:20.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:48:20.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:48:20.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:48:20.843 [DEBUG] [Thread-17585] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:48:23.163 [DEBUG] [Thread-17587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:48:32.317 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:48:32.318 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:48:38.209 [DEBUG] [Thread-17588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:48:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:48:50.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:48:50.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
2026-04-15T10:48:52.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 48, 41), 2.9465, 82.0896, 0.0, 13.8334, 11.8574, 0, 1, 0, 2, 0, 0),)
2026-04-15T10:48:52.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:48:41
2026-04-15T10:48:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:48:53.021 [DEBUG] [Thread-17589] [transport.py] [_log()] starting thread (client mode): 0xf13ee500
2026-04-15T10:48:53.021 [DEBUG] [Thread-17589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:48:53.041 [DEBUG] [Thread-17589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:48:53.041 [INFO] [Thread-17589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:48:53.044 [DEBUG] [Thread-17589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:48:53.044 [DEBUG] [Thread-17589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:48:53.044 [DEBUG] [Thread-17589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:48:53.044 [DEBUG] [Thread-17589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:48:53.044 [DEBUG] [Thread-17589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:48:53.045 [DEBUG] [Thread-17589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:48:53.045 [DEBUG] [Thread-17589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:48:53.045 [DEBUG] [Thread-17589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:48:53.045 [DEBUG] [Thread-17589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:48:53.045 [DEBUG] [Thread-17589] [transport.py] [_log()] client lang: <none>
2026-04-15T10:48:53.045 [DEBUG] [Thread-17589] [transport.py] [_log()] server lang: <none>
2026-04-15T10:48:53.045 [DEBUG] [Thread-17589] [transport.py] [_log()] kex follows: False
2026-04-15T10:48:53.045 [DEBUG] [Thread-17589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:48:53.045 [DEBUG] [Thread-17589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:48:53.045 [DEBUG] [Thread-17589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:48:53.045 [DEBUG] [Thread-17589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:48:53.045 [DEBUG] [Thread-17589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:48:53.046 [DEBUG] [Thread-17589] [transport.py] [_log()] Compression: none
2026-04-15T10:48:53.046 [DEBUG] [Thread-17589] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:48:53.061 [DEBUG] [Thread-17589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:48:53.062 [DEBUG] [Thread-17589] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:48:53.062 [DEBUG] [Thread-17589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:48:53.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:48:53.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:48:53.063 [DEBUG] [Thread-17589] [transport.py] [_log()] userauth is OK
2026-04-15T10:48:53.064 [DEBUG] [Thread-17589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:48:53.064 [DEBUG] [Thread-17589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:48:53.064 [DEBUG] [Thread-17589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:48:53.064 [DEBUG] [Thread-17589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:48:53.100 [INFO] [Thread-17589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:48:53.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:48:53.240 [DEBUG] [Thread-17591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:48:53.664 [DEBUG] [Thread-17589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:48:53.664 [DEBUG] [Thread-17589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:48:53.665 [DEBUG] [Thread-17589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:48:53.705 [DEBUG] [Thread-17589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:48:53.705 [DEBUG] [Thread-17589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:48:53.708 [DEBUG] [Thread-17589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:48:53.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:48:53.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:48:53.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:48:53.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:48:53.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:48:53.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:48:53.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:48:53.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:48:53.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:48:53.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.367143 -999.00  +11.20  16.35     84   +8.60 1 3 1 2 1   888    0 3.44 45.53 ----- 16.4 16.4 280.8 19.0 16.5 -6.3 16.2 -5.4 15.2 -7.9 16.1 -4.7
2026-04-15T10:48:53.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:48:53.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:48:53.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.367143
2026-04-15T10:48:53.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:48:53.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:48:53.734 [DEBUG] [Thread-17589] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:48:53.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:48:53.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:48:53.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:48:53.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:48:41', tmtdew=2.9465, humidity=82.0896, cloud=0.0, wind=13.8334, temperature=11.8574, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:48:41.155', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:48:53.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:48:53.981 [DEBUG] [Thread-17593] [transport.py] [_log()] starting thread (client mode): 0xee904d00
2026-04-15T10:48:53.981 [DEBUG] [Thread-17593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:48:53.995 [DEBUG] [Thread-17593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:48:53.995 [INFO] [Thread-17593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:48:54.003 [DEBUG] [Thread-17593] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:48:54.003 [DEBUG] [Thread-17593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:48:54.003 [DEBUG] [Thread-17593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:48:54.003 [DEBUG] [Thread-17593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:48:54.003 [DEBUG] [Thread-17593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:48:54.003 [DEBUG] [Thread-17593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:48:54.003 [DEBUG] [Thread-17593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:48:54.003 [DEBUG] [Thread-17593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:48:54.003 [DEBUG] [Thread-17593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:48:54.003 [DEBUG] [Thread-17593] [transport.py] [_log()] client lang: <none>
2026-04-15T10:48:54.004 [DEBUG] [Thread-17593] [transport.py] [_log()] server lang: <none>
2026-04-15T10:48:54.004 [DEBUG] [Thread-17593] [transport.py] [_log()] kex follows: False
2026-04-15T10:48:54.004 [DEBUG] [Thread-17593] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:48:54.004 [DEBUG] [Thread-17593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:48:54.004 [DEBUG] [Thread-17593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:48:54.004 [DEBUG] [Thread-17593] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:48:54.004 [DEBUG] [Thread-17593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:48:54.004 [DEBUG] [Thread-17593] [transport.py] [_log()] Compression: none
2026-04-15T10:48:54.004 [DEBUG] [Thread-17593] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:48:54.059 [DEBUG] [Thread-17593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:48:54.059 [DEBUG] [Thread-17593] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:48:54.060 [DEBUG] [Thread-17593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:48:54.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:48:54.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:48:54.116 [DEBUG] [Thread-17593] [transport.py] [_log()] userauth is OK
2026-04-15T10:48:54.116 [DEBUG] [Thread-17593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:48:54.117 [DEBUG] [Thread-17593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:48:54.117 [DEBUG] [Thread-17593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:48:54.117 [DEBUG] [Thread-17593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:48:54.142 [INFO] [Thread-17593] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:48:54.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:48:54.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:48:55.023 [DEBUG] [Thread-17593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:48:55.024 [DEBUG] [Thread-17593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:48:55.073 [DEBUG] [Thread-17593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:48:55.074 [DEBUG] [Thread-17593] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:48:55.086 [DEBUG] [Thread-17593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:48:55.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:48:55.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')
2026-04-15T10:48:55.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
2026-04-15T10:48:55.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:48:55.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:48:55.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:48:55.125 [DEBUG] [Thread-17593] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:49:04.475 [DEBUG] [Thread-17595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:49:08.272 [DEBUG] [Thread-17596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:49:23.314 [DEBUG] [Thread-17597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:49:25.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:49:25.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:49:25.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
2026-04-15T10:49:26.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 49, 16), 1.64523, 89.8649, 0.0, 12.1586, 11.0124, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:49:26.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:49:16
2026-04-15T10:49:26.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:49:27.234 [DEBUG] [Thread-17598] [transport.py] [_log()] starting thread (client mode): 0xf13675e0
2026-04-15T10:49:27.235 [DEBUG] [Thread-17598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:49:27.249 [DEBUG] [Thread-17598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:49:27.249 [INFO] [Thread-17598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:49:27.253 [DEBUG] [Thread-17598] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:49:27.253 [DEBUG] [Thread-17598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:49:27.253 [DEBUG] [Thread-17598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:49:27.253 [DEBUG] [Thread-17598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:49:27.253 [DEBUG] [Thread-17598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:49:27.253 [DEBUG] [Thread-17598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:49:27.253 [DEBUG] [Thread-17598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:49:27.253 [DEBUG] [Thread-17598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:49:27.253 [DEBUG] [Thread-17598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:49:27.253 [DEBUG] [Thread-17598] [transport.py] [_log()] client lang: <none>
2026-04-15T10:49:27.253 [DEBUG] [Thread-17598] [transport.py] [_log()] server lang: <none>
2026-04-15T10:49:27.254 [DEBUG] [Thread-17598] [transport.py] [_log()] kex follows: False
2026-04-15T10:49:27.254 [DEBUG] [Thread-17598] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:49:27.254 [DEBUG] [Thread-17598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:49:27.254 [DEBUG] [Thread-17598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:49:27.254 [DEBUG] [Thread-17598] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:49:27.254 [DEBUG] [Thread-17598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:49:27.254 [DEBUG] [Thread-17598] [transport.py] [_log()] Compression: none
2026-04-15T10:49:27.254 [DEBUG] [Thread-17598] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:49:27.270 [DEBUG] [Thread-17598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:49:27.270 [DEBUG] [Thread-17598] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:49:27.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:49:27.271 [DEBUG] [Thread-17598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:49:27.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:49:27.272 [DEBUG] [Thread-17598] [transport.py] [_log()] userauth is OK
2026-04-15T10:49:27.272 [DEBUG] [Thread-17598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:49:27.272 [DEBUG] [Thread-17598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:49:27.272 [DEBUG] [Thread-17598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:49:27.272 [DEBUG] [Thread-17598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:49:27.290 [INFO] [Thread-17598] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:49:27.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:49:27.847 [DEBUG] [Thread-17598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:49:27.848 [DEBUG] [Thread-17598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:49:27.848 [DEBUG] [Thread-17598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:49:27.888 [DEBUG] [Thread-17598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:49:27.888 [DEBUG] [Thread-17598] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:49:27.891 [DEBUG] [Thread-17598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:49:27.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:49:27.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:49:27.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:49:27.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:49:27.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:49:27.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:49:27.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:49:27.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:49:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:49:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.367490 -999.00  +11.30  11.60     85   +8.90 1 3 1 2 1   888    0 3.51 46.55 ----- 11.6 11.6 302.8 18.9 16.7 -5.6 16.3 -5.3 15.6 -4.2 16.2 -4.4
2026-04-15T10:49:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:49:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:49:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.367490
2026-04-15T10:49:27.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:49:27.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:49:27.916 [DEBUG] [Thread-17598] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:49:27.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:49:27.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:49:27.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:49:27.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:49:16', tmtdew=1.64523, humidity=89.8649, cloud=0.0, wind=12.1586, temperature=11.0124, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:49:11.136', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:49:28.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:49:28.172 [DEBUG] [Thread-17601] [transport.py] [_log()] starting thread (client mode): 0xf13e3fa0
2026-04-15T10:49:28.172 [DEBUG] [Thread-17601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:49:28.186 [DEBUG] [Thread-17601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:49:28.186 [INFO] [Thread-17601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:49:28.193 [DEBUG] [Thread-17601] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:49:28.193 [DEBUG] [Thread-17601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:49:28.194 [DEBUG] [Thread-17601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:49:28.194 [DEBUG] [Thread-17601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:49:28.194 [DEBUG] [Thread-17601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:49:28.194 [DEBUG] [Thread-17601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:49:28.194 [DEBUG] [Thread-17601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:49:28.194 [DEBUG] [Thread-17601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:49:28.194 [DEBUG] [Thread-17601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:49:28.194 [DEBUG] [Thread-17601] [transport.py] [_log()] client lang: <none>
2026-04-15T10:49:28.194 [DEBUG] [Thread-17601] [transport.py] [_log()] server lang: <none>
2026-04-15T10:49:28.194 [DEBUG] [Thread-17601] [transport.py] [_log()] kex follows: False
2026-04-15T10:49:28.194 [DEBUG] [Thread-17601] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:49:28.195 [DEBUG] [Thread-17601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:49:28.195 [DEBUG] [Thread-17601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:49:28.195 [DEBUG] [Thread-17601] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:49:28.195 [DEBUG] [Thread-17601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:49:28.195 [DEBUG] [Thread-17601] [transport.py] [_log()] Compression: none
2026-04-15T10:49:28.195 [DEBUG] [Thread-17601] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:49:28.251 [DEBUG] [Thread-17601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:49:28.251 [DEBUG] [Thread-17601] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:49:28.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:49:28.252 [DEBUG] [Thread-17601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:49:28.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:49:28.309 [DEBUG] [Thread-17601] [transport.py] [_log()] userauth is OK
2026-04-15T10:49:28.309 [DEBUG] [Thread-17601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:49:28.309 [DEBUG] [Thread-17601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:49:28.310 [DEBUG] [Thread-17601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:49:28.310 [DEBUG] [Thread-17601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:49:28.335 [INFO] [Thread-17601] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:49:28.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:49:28.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:49:29.154 [DEBUG] [Thread-17601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:49:29.154 [DEBUG] [Thread-17601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:49:29.202 [DEBUG] [Thread-17601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:49:29.202 [DEBUG] [Thread-17601] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:49:29.211 [DEBUG] [Thread-17601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:49:29.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:49:29.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')
2026-04-15T10:49:29.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
2026-04-15T10:49:29.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:49:29.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:49:29.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:49:29.250 [DEBUG] [Thread-17601] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:49:32.457 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:49:32.458 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:49:38.346 [DEBUG] [Thread-17603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:49:53.393 [DEBUG] [Thread-17604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:49:59.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:49:59.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:49:59.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
2026-04-15T10:50:00.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 49, 51), 3.09844, 81.2597, 0.0, 14.0803, 11.9232, 0, 1, 0, 2, 0, 0),)
2026-04-15T10:50:00.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:49:51
2026-04-15T10:50:00.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:50:01.343 [DEBUG] [Thread-17605] [transport.py] [_log()] starting thread (client mode): 0xf13ff280
2026-04-15T10:50:01.343 [DEBUG] [Thread-17605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:50:01.358 [DEBUG] [Thread-17605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:50:01.358 [INFO] [Thread-17605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:50:01.361 [DEBUG] [Thread-17605] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:50:01.361 [DEBUG] [Thread-17605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:50:01.361 [DEBUG] [Thread-17605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:50:01.361 [DEBUG] [Thread-17605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:50:01.362 [DEBUG] [Thread-17605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:50:01.362 [DEBUG] [Thread-17605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:50:01.362 [DEBUG] [Thread-17605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:50:01.362 [DEBUG] [Thread-17605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:50:01.362 [DEBUG] [Thread-17605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:50:01.362 [DEBUG] [Thread-17605] [transport.py] [_log()] client lang: <none>
2026-04-15T10:50:01.362 [DEBUG] [Thread-17605] [transport.py] [_log()] server lang: <none>
2026-04-15T10:50:01.362 [DEBUG] [Thread-17605] [transport.py] [_log()] kex follows: False
2026-04-15T10:50:01.362 [DEBUG] [Thread-17605] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:50:01.362 [DEBUG] [Thread-17605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:50:01.362 [DEBUG] [Thread-17605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:50:01.362 [DEBUG] [Thread-17605] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:50:01.362 [DEBUG] [Thread-17605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:50:01.362 [DEBUG] [Thread-17605] [transport.py] [_log()] Compression: none
2026-04-15T10:50:01.362 [DEBUG] [Thread-17605] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:50:01.378 [DEBUG] [Thread-17605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:50:01.378 [DEBUG] [Thread-17605] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:50:01.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:50:01.379 [DEBUG] [Thread-17605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:50:01.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:50:01.380 [DEBUG] [Thread-17605] [transport.py] [_log()] userauth is OK
2026-04-15T10:50:01.380 [DEBUG] [Thread-17605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:50:01.380 [DEBUG] [Thread-17605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:50:01.380 [DEBUG] [Thread-17605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:50:01.380 [DEBUG] [Thread-17605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:50:01.394 [INFO] [Thread-17605] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:50:01.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:50:02.007 [DEBUG] [Thread-17605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:50:02.008 [DEBUG] [Thread-17605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:50:02.008 [DEBUG] [Thread-17605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:50:02.049 [DEBUG] [Thread-17605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:50:02.049 [DEBUG] [Thread-17605] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:50:02.050 [DEBUG] [Thread-17605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:50:02.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:50:02.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:50:02.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:50:02.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:50:02.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:50:02.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:50:02.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:50:02.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:50:02.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:50:02.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.367837 -999.00  +11.40  13.48     85   +9.00 1 3 1 2 1   888    0 3.44 43.32 ----- 13.5 13.5 312.2 17.6 16.9 -5.4 16.4 -5.0 15.7 -3.8 16.3 -4.5
2026-04-15T10:50:02.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:50:02.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:50:02.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.367837
2026-04-15T10:50:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:50:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:50:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:50:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:50:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:50:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:49:51', tmtdew=3.09844, humidity=81.2597, cloud=0.0, wind=14.0803, temperature=11.9232, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:49:41.117', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:50:02.084 [DEBUG] [Thread-17605] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:50:02.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:50:02.288 [DEBUG] [Thread-17608] [transport.py] [_log()] starting thread (client mode): 0xf13e1000
2026-04-15T10:50:02.288 [DEBUG] [Thread-17608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:50:02.302 [DEBUG] [Thread-17608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:50:02.302 [INFO] [Thread-17608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:50:02.309 [DEBUG] [Thread-17608] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:50:02.309 [DEBUG] [Thread-17608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:50:02.309 [DEBUG] [Thread-17608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] client lang: <none>
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] server lang: <none>
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] kex follows: False
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] Compression: none
2026-04-15T10:50:02.310 [DEBUG] [Thread-17608] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:50:02.369 [DEBUG] [Thread-17608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:50:02.369 [DEBUG] [Thread-17608] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:50:02.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:50:02.370 [DEBUG] [Thread-17608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:50:02.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:50:02.427 [DEBUG] [Thread-17608] [transport.py] [_log()] userauth is OK
2026-04-15T10:50:02.428 [DEBUG] [Thread-17608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:50:02.428 [DEBUG] [Thread-17608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:50:02.428 [DEBUG] [Thread-17608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:50:02.428 [DEBUG] [Thread-17608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:50:02.453 [INFO] [Thread-17608] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:50:02.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:50:02.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:50:03.302 [DEBUG] [Thread-17608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:50:03.303 [DEBUG] [Thread-17608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:50:03.350 [DEBUG] [Thread-17608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:50:03.350 [DEBUG] [Thread-17608] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:50:03.359 [DEBUG] [Thread-17608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:50:03.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:50:03.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')
2026-04-15T10:50:03.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') -> 00000000
2026-04-15T10:50:03.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:50:03.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:50:03.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:50:03.394 [DEBUG] [Thread-17608] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:50:04.601 [DEBUG] [Thread-17610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:50:08.423 [DEBUG] [Thread-17611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:50:23.467 [DEBUG] [Thread-17612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:50:32.596 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:50:32.597 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:50:33.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:50:33.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:50:33.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
2026-04-15T10:50:34.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 50, 27), 1.61444, 90.0635, 0.0, 13.9756, 11.2443, 1, 2, 0, 2, 0, 0),)
2026-04-15T10:50:34.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:50:27
2026-04-15T10:50:35.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:50:35.472 [DEBUG] [Thread-17613] [transport.py] [_log()] starting thread (client mode): 0xf1364100
2026-04-15T10:50:35.472 [DEBUG] [Thread-17613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:50:35.493 [DEBUG] [Thread-17613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:50:35.494 [INFO] [Thread-17613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:50:35.497 [DEBUG] [Thread-17613] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:50:35.497 [DEBUG] [Thread-17613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:50:35.497 [DEBUG] [Thread-17613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:50:35.497 [DEBUG] [Thread-17613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:50:35.497 [DEBUG] [Thread-17613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:50:35.497 [DEBUG] [Thread-17613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:50:35.497 [DEBUG] [Thread-17613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:50:35.497 [DEBUG] [Thread-17613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:50:35.497 [DEBUG] [Thread-17613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:50:35.498 [DEBUG] [Thread-17613] [transport.py] [_log()] client lang: <none>
2026-04-15T10:50:35.498 [DEBUG] [Thread-17613] [transport.py] [_log()] server lang: <none>
2026-04-15T10:50:35.498 [DEBUG] [Thread-17613] [transport.py] [_log()] kex follows: False
2026-04-15T10:50:35.498 [DEBUG] [Thread-17613] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:50:35.498 [DEBUG] [Thread-17613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:50:35.498 [DEBUG] [Thread-17613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:50:35.498 [DEBUG] [Thread-17613] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:50:35.498 [DEBUG] [Thread-17613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:50:35.498 [DEBUG] [Thread-17613] [transport.py] [_log()] Compression: none
2026-04-15T10:50:35.498 [DEBUG] [Thread-17613] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:50:35.515 [DEBUG] [Thread-17613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:50:35.515 [DEBUG] [Thread-17613] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:50:35.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:50:35.516 [DEBUG] [Thread-17613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:50:35.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:50:35.517 [DEBUG] [Thread-17613] [transport.py] [_log()] userauth is OK
2026-04-15T10:50:35.517 [DEBUG] [Thread-17613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:50:35.518 [DEBUG] [Thread-17613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:50:35.518 [DEBUG] [Thread-17613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:50:35.518 [DEBUG] [Thread-17613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:50:35.543 [INFO] [Thread-17613] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:50:35.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:50:38.499 [DEBUG] [Thread-17615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:50:40.234 [DEBUG] [Thread-17613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:50:40.235 [DEBUG] [Thread-17613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:50:40.235 [DEBUG] [Thread-17613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:50:40.275 [DEBUG] [Thread-17613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:50:40.275 [DEBUG] [Thread-17613] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:50:40.280 [DEBUG] [Thread-17613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:50:40.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:50:40.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:50:40.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:50:40.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:50:40.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:50:40.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:50:40.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:50:40.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:50:40.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:50:40.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.367837 -999.00  +11.40  13.48     85   +9.00 1 3 1 2 1   888    0 3.44 43.32 ----- 13.5 13.5 312.2 17.6 16.9 -5.4 16.4 -5.0 15.7 -3.8 16.3 -4.5
2026-04-15T10:50:40.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:50:40.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:50:40.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.367837
2026-04-15T10:50:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:50:40.390 [DEBUG] [Thread-17613] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:50:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:50:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:50:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:50:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:50:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:50:27', tmtdew=1.61444, humidity=90.0635, cloud=0.0, wind=13.9756, temperature=11.2443, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:49:41.117', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:50:40.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:50:53.531 [DEBUG] [Thread-17617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:51:04.722 [DEBUG] [Thread-17618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:51:08.578 [DEBUG] [Thread-17619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:51:23.610 [DEBUG] [Thread-17620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:51:32.740 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:51:32.742 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:51:38.642 [DEBUG] [Thread-17621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:51:53.674 [DEBUG] [Thread-17622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:52:04.828 [DEBUG] [Thread-17623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:52:08.705 [DEBUG] [Thread-17624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:52:23.737 [DEBUG] [Thread-17625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:52:32.884 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:52:32.885 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:52:38.769 [DEBUG] [Thread-17626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:52:53.802 [DEBUG] [Thread-17627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:52:55.818 [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
2026-04-15T10:53:04.957 [DEBUG] [Thread-17628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:53:08.833 [DEBUG] [Thread-17629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:53:23.865 [DEBUG] [Thread-17630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:53:25.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:53:25.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:53:25.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
2026-04-15T10:53:27.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 52, 49), 3.59796, 78.5719, 0.0, 18.7726, 12.0217, 0, 0, 0, 2, 0, 0),)
2026-04-15T10:53:27.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:52:49
2026-04-15T10:53:27.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:53:28.101 [DEBUG] [Thread-17631] [transport.py] [_log()] starting thread (client mode): 0xee905d50
2026-04-15T10:53:28.102 [DEBUG] [Thread-17631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:53:28.121 [DEBUG] [Thread-17631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:53:28.121 [INFO] [Thread-17631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:53:28.124 [DEBUG] [Thread-17631] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:53:28.124 [DEBUG] [Thread-17631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:53:28.125 [DEBUG] [Thread-17631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:53:28.125 [DEBUG] [Thread-17631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:53:28.125 [DEBUG] [Thread-17631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:53:28.125 [DEBUG] [Thread-17631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:53:28.125 [DEBUG] [Thread-17631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:53:28.125 [DEBUG] [Thread-17631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:53:28.125 [DEBUG] [Thread-17631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:53:28.125 [DEBUG] [Thread-17631] [transport.py] [_log()] client lang: <none>
2026-04-15T10:53:28.125 [DEBUG] [Thread-17631] [transport.py] [_log()] server lang: <none>
2026-04-15T10:53:28.125 [DEBUG] [Thread-17631] [transport.py] [_log()] kex follows: False
2026-04-15T10:53:28.125 [DEBUG] [Thread-17631] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:53:28.126 [DEBUG] [Thread-17631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:53:28.126 [DEBUG] [Thread-17631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:53:28.126 [DEBUG] [Thread-17631] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:53:28.126 [DEBUG] [Thread-17631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:53:28.126 [DEBUG] [Thread-17631] [transport.py] [_log()] Compression: none
2026-04-15T10:53:28.126 [DEBUG] [Thread-17631] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:53:28.144 [DEBUG] [Thread-17631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:53:28.144 [DEBUG] [Thread-17631] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:53:28.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:53:28.145 [DEBUG] [Thread-17631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:53:28.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:53:28.146 [DEBUG] [Thread-17631] [transport.py] [_log()] userauth is OK
2026-04-15T10:53:28.146 [DEBUG] [Thread-17631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:53:28.147 [DEBUG] [Thread-17631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:53:28.147 [DEBUG] [Thread-17631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:53:28.147 [DEBUG] [Thread-17631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:53:28.175 [INFO] [Thread-17631] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:53:28.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:53:28.976 [DEBUG] [Thread-17631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:53:28.977 [DEBUG] [Thread-17631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:53:28.978 [DEBUG] [Thread-17631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:53:29.018 [DEBUG] [Thread-17631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:53:29.018 [DEBUG] [Thread-17631] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:53:29.021 [DEBUG] [Thread-17631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:53:29.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:53:29.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:53:29.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:53:29.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:53:29.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:53:29.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:53:29.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:53:29.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:53:29.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:53:29.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.369920 -999.00  +11.40  14.45     82   +8.60 1 3 1 2 1   888    0 3.52 42.54 ----- 14.4 14.4 287.8 22.9 16.6 -7.3 16.2 -6.1 15.3 -6.4 16.0 -5.7
2026-04-15T10:53:29.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:53:29.044 [DEBUG] [Thread-17631] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:53:29.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:53:29.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.369920
2026-04-15T10:53:29.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:53:29.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:53:29.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:53:29.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:53:29.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:53:29.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:52:49', tmtdew=3.59796, humidity=78.5719, cloud=0.0, wind=18.7726, temperature=12.0217, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:52:41.088', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:53:29.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:53:29.301 [DEBUG] [Thread-17634] [transport.py] [_log()] starting thread (client mode): 0xee905c30
2026-04-15T10:53:29.301 [DEBUG] [Thread-17634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:53:29.317 [DEBUG] [Thread-17634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:53:29.318 [INFO] [Thread-17634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:53:29.327 [DEBUG] [Thread-17634] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:53:29.327 [DEBUG] [Thread-17634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:53:29.327 [DEBUG] [Thread-17634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:53:29.327 [DEBUG] [Thread-17634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:53:29.327 [DEBUG] [Thread-17634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:53:29.328 [DEBUG] [Thread-17634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:53:29.328 [DEBUG] [Thread-17634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:53:29.328 [DEBUG] [Thread-17634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:53:29.328 [DEBUG] [Thread-17634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:53:29.328 [DEBUG] [Thread-17634] [transport.py] [_log()] client lang: <none>
2026-04-15T10:53:29.328 [DEBUG] [Thread-17634] [transport.py] [_log()] server lang: <none>
2026-04-15T10:53:29.328 [DEBUG] [Thread-17634] [transport.py] [_log()] kex follows: False
2026-04-15T10:53:29.328 [DEBUG] [Thread-17634] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:53:29.328 [DEBUG] [Thread-17634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:53:29.328 [DEBUG] [Thread-17634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:53:29.328 [DEBUG] [Thread-17634] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:53:29.329 [DEBUG] [Thread-17634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:53:29.329 [DEBUG] [Thread-17634] [transport.py] [_log()] Compression: none
2026-04-15T10:53:29.329 [DEBUG] [Thread-17634] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:53:29.387 [DEBUG] [Thread-17634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:53:29.388 [DEBUG] [Thread-17634] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:53:29.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:53:29.388 [DEBUG] [Thread-17634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:53:29.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:53:29.445 [DEBUG] [Thread-17634] [transport.py] [_log()] userauth is OK
2026-04-15T10:53:29.446 [DEBUG] [Thread-17634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:53:29.446 [DEBUG] [Thread-17634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:53:29.446 [DEBUG] [Thread-17634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:53:29.446 [DEBUG] [Thread-17634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:53:29.473 [INFO] [Thread-17634] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:53:29.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:53:29.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:53:30.307 [DEBUG] [Thread-17634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:53:30.307 [DEBUG] [Thread-17634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:53:30.355 [DEBUG] [Thread-17634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:53:30.355 [DEBUG] [Thread-17634] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:53:30.363 [DEBUG] [Thread-17634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:53:30.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:53:30.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')
2026-04-15T10:53:30.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
2026-04-15T10:53:30.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:53:30.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:53:30.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:53:30.397 [DEBUG] [Thread-17634] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:53:33.027 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:53:33.028 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:53:38.897 [DEBUG] [Thread-17636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:53:53.942 [DEBUG] [Thread-17637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:54:00.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:54:00.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:54:00.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
2026-04-15T10:54:01.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 53, 24), 1.84767, 88.8025, 0.0, 15.5455, 11.3772, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:54:01.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:53:24
2026-04-15T10:54:02.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:54:02.799 [DEBUG] [Thread-17638] [transport.py] [_log()] starting thread (client mode): 0xf13eed70
2026-04-15T10:54:02.799 [DEBUG] [Thread-17638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:54:02.818 [DEBUG] [Thread-17638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:54:02.818 [INFO] [Thread-17638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:54:02.822 [DEBUG] [Thread-17638] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:54:02.822 [DEBUG] [Thread-17638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:54:02.822 [DEBUG] [Thread-17638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:54:02.822 [DEBUG] [Thread-17638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:54:02.822 [DEBUG] [Thread-17638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:54:02.822 [DEBUG] [Thread-17638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:54:02.822 [DEBUG] [Thread-17638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:54:02.822 [DEBUG] [Thread-17638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:54:02.822 [DEBUG] [Thread-17638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:54:02.822 [DEBUG] [Thread-17638] [transport.py] [_log()] client lang: <none>
2026-04-15T10:54:02.822 [DEBUG] [Thread-17638] [transport.py] [_log()] server lang: <none>
2026-04-15T10:54:02.822 [DEBUG] [Thread-17638] [transport.py] [_log()] kex follows: False
2026-04-15T10:54:02.823 [DEBUG] [Thread-17638] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:54:02.823 [DEBUG] [Thread-17638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:54:02.823 [DEBUG] [Thread-17638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:54:02.823 [DEBUG] [Thread-17638] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:54:02.823 [DEBUG] [Thread-17638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:54:02.823 [DEBUG] [Thread-17638] [transport.py] [_log()] Compression: none
2026-04-15T10:54:02.823 [DEBUG] [Thread-17638] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:54:02.839 [DEBUG] [Thread-17638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:54:02.839 [DEBUG] [Thread-17638] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:54:02.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:54:02.840 [DEBUG] [Thread-17638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:54:02.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:54:02.841 [DEBUG] [Thread-17638] [transport.py] [_log()] userauth is OK
2026-04-15T10:54:02.841 [DEBUG] [Thread-17638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:54:02.842 [DEBUG] [Thread-17638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:54:02.842 [DEBUG] [Thread-17638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:54:02.842 [DEBUG] [Thread-17638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:54:02.868 [INFO] [Thread-17638] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:54:02.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:54:03.656 [DEBUG] [Thread-17638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:54:03.657 [DEBUG] [Thread-17638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:54:03.657 [DEBUG] [Thread-17638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:54:03.697 [DEBUG] [Thread-17638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:54:03.697 [DEBUG] [Thread-17638] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:54:03.700 [DEBUG] [Thread-17638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:54:03.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:54:03.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:54:03.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:54:03.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:54:03.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:54:03.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:54:03.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:54:03.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:54:03.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:54:03.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.370268 -999.00  +11.40  14.70     82   +8.50 1 3 1 2 1   888    0 3.50 41.31 ----- 14.7 14.7 294.6 17.1 16.6 -6.3 16.2 -6.1 15.4 -6.3 16.0 -5.7
2026-04-15T10:54:03.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:54:03.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:54:03.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.370268
2026-04-15T10:54:03.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:54:03.724 [DEBUG] [Thread-17638] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:54:03.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:54:03.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:54:03.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:54:03.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:54:03.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:53:24', tmtdew=1.84767, humidity=88.8025, cloud=0.0, wind=15.5455, temperature=11.3772, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:53:11.155', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:54:03.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:54:03.980 [DEBUG] [Thread-17641] [transport.py] [_log()] starting thread (client mode): 0xee9ed0c0
2026-04-15T10:54:03.980 [DEBUG] [Thread-17641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:54:03.995 [DEBUG] [Thread-17641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:54:03.995 [INFO] [Thread-17641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:54:04.002 [DEBUG] [Thread-17641] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:54:04.002 [DEBUG] [Thread-17641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:54:04.002 [DEBUG] [Thread-17641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:54:04.002 [DEBUG] [Thread-17641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:54:04.003 [DEBUG] [Thread-17641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:54:04.003 [DEBUG] [Thread-17641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:54:04.003 [DEBUG] [Thread-17641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:54:04.003 [DEBUG] [Thread-17641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:54:04.003 [DEBUG] [Thread-17641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:54:04.003 [DEBUG] [Thread-17641] [transport.py] [_log()] client lang: <none>
2026-04-15T10:54:04.003 [DEBUG] [Thread-17641] [transport.py] [_log()] server lang: <none>
2026-04-15T10:54:04.003 [DEBUG] [Thread-17641] [transport.py] [_log()] kex follows: False
2026-04-15T10:54:04.003 [DEBUG] [Thread-17641] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:54:04.003 [DEBUG] [Thread-17641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:54:04.003 [DEBUG] [Thread-17641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:54:04.004 [DEBUG] [Thread-17641] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:54:04.004 [DEBUG] [Thread-17641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:54:04.004 [DEBUG] [Thread-17641] [transport.py] [_log()] Compression: none
2026-04-15T10:54:04.004 [DEBUG] [Thread-17641] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:54:04.059 [DEBUG] [Thread-17641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:54:04.059 [DEBUG] [Thread-17641] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:54:04.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:54:04.060 [DEBUG] [Thread-17641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:54:04.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:54:04.116 [DEBUG] [Thread-17641] [transport.py] [_log()] userauth is OK
2026-04-15T10:54:04.116 [DEBUG] [Thread-17641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:54:04.116 [DEBUG] [Thread-17641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:54:04.116 [DEBUG] [Thread-17641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:54:04.117 [DEBUG] [Thread-17641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:54:04.142 [INFO] [Thread-17641] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:54:04.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:54:04.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:54:04.990 [DEBUG] [Thread-17641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:54:04.991 [DEBUG] [Thread-17641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:54:05.039 [DEBUG] [Thread-17641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:54:05.040 [DEBUG] [Thread-17641] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:54:05.048 [DEBUG] [Thread-17641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:54:05.050 [DEBUG] [Thread-17643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:54:05.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:54:05.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')
2026-04-15T10:54:05.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
2026-04-15T10:54:05.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:54:05.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:54:05.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:54:05.082 [DEBUG] [Thread-17641] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:54:08.974 [DEBUG] [Thread-17644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:54:24.018 [DEBUG] [Thread-17645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:54:33.166 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:54:33.167 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:54:35.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:54:35.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:54:35.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
2026-04-15T10:54:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 53, 24), 1.84767, 88.8025, 0.0, 15.5455, 11.3772, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:54:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:53:24
2026-04-15T10:54:36.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:54:37.335 [DEBUG] [Thread-17646] [transport.py] [_log()] starting thread (client mode): 0xee925f30
2026-04-15T10:54:37.336 [DEBUG] [Thread-17646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:54:37.356 [DEBUG] [Thread-17646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:54:37.357 [INFO] [Thread-17646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:54:37.358 [DEBUG] [Thread-17646] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:54:37.358 [DEBUG] [Thread-17646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:54:37.358 [DEBUG] [Thread-17646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:54:37.358 [DEBUG] [Thread-17646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:54:37.358 [DEBUG] [Thread-17646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:54:37.358 [DEBUG] [Thread-17646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:54:37.358 [DEBUG] [Thread-17646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:54:37.358 [DEBUG] [Thread-17646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:54:37.358 [DEBUG] [Thread-17646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:54:37.358 [DEBUG] [Thread-17646] [transport.py] [_log()] client lang: <none>
2026-04-15T10:54:37.358 [DEBUG] [Thread-17646] [transport.py] [_log()] server lang: <none>
2026-04-15T10:54:37.358 [DEBUG] [Thread-17646] [transport.py] [_log()] kex follows: False
2026-04-15T10:54:37.359 [DEBUG] [Thread-17646] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:54:37.359 [DEBUG] [Thread-17646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:54:37.359 [DEBUG] [Thread-17646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:54:37.359 [DEBUG] [Thread-17646] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:54:37.359 [DEBUG] [Thread-17646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:54:37.359 [DEBUG] [Thread-17646] [transport.py] [_log()] Compression: none
2026-04-15T10:54:37.359 [DEBUG] [Thread-17646] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:54:37.367 [DEBUG] [Thread-17646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:54:37.367 [DEBUG] [Thread-17646] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:54:37.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:54:37.368 [DEBUG] [Thread-17646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:54:37.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:54:37.369 [DEBUG] [Thread-17646] [transport.py] [_log()] userauth is OK
2026-04-15T10:54:37.369 [DEBUG] [Thread-17646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:54:37.369 [DEBUG] [Thread-17646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:54:37.370 [DEBUG] [Thread-17646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:54:37.370 [DEBUG] [Thread-17646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:54:37.405 [INFO] [Thread-17646] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:54:37.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:54:38.125 [DEBUG] [Thread-17646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:54:38.125 [DEBUG] [Thread-17646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:54:38.126 [DEBUG] [Thread-17646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:54:38.166 [DEBUG] [Thread-17646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:54:38.166 [DEBUG] [Thread-17646] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:54:38.168 [DEBUG] [Thread-17646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:54:38.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:54:38.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:54:38.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:54:38.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:54:38.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:54:38.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:54:38.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:54:38.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:54:38.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:54:38.186 [DEBUG] [Thread-17646] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:54:38.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.370615 -999.00  +11.20  10.99     82   +8.30 1 3 1 2 1   888    0 3.51 40.45 ----- 11.0 11.0 316.0 15.2 16.5 -6.3 16.1 -6.1 15.5 -6.1 16.0 -5.2
2026-04-15T10:54:38.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:54:38.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:54:38.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.370615
2026-04-15T10:54:38.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:54:38.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:54:38.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:54:38.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:54:38.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:54:38.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:53:24', tmtdew=1.84767, humidity=88.8025, cloud=0.0, wind=15.5455, temperature=11.3772, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:53:41.136', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:54:38.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:54:38.443 [DEBUG] [Thread-17649] [transport.py] [_log()] starting thread (client mode): 0xf13c9d20
2026-04-15T10:54:38.443 [DEBUG] [Thread-17649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:54:38.458 [DEBUG] [Thread-17649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:54:38.458 [INFO] [Thread-17649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:54:38.465 [DEBUG] [Thread-17649] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:54:38.465 [DEBUG] [Thread-17649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:54:38.465 [DEBUG] [Thread-17649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:54:38.465 [DEBUG] [Thread-17649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:54:38.465 [DEBUG] [Thread-17649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:54:38.465 [DEBUG] [Thread-17649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:54:38.465 [DEBUG] [Thread-17649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:54:38.465 [DEBUG] [Thread-17649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:54:38.466 [DEBUG] [Thread-17649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:54:38.466 [DEBUG] [Thread-17649] [transport.py] [_log()] client lang: <none>
2026-04-15T10:54:38.466 [DEBUG] [Thread-17649] [transport.py] [_log()] server lang: <none>
2026-04-15T10:54:38.466 [DEBUG] [Thread-17649] [transport.py] [_log()] kex follows: False
2026-04-15T10:54:38.466 [DEBUG] [Thread-17649] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:54:38.466 [DEBUG] [Thread-17649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:54:38.466 [DEBUG] [Thread-17649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:54:38.466 [DEBUG] [Thread-17649] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:54:38.466 [DEBUG] [Thread-17649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:54:38.466 [DEBUG] [Thread-17649] [transport.py] [_log()] Compression: none
2026-04-15T10:54:38.466 [DEBUG] [Thread-17649] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:54:38.521 [DEBUG] [Thread-17649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:54:38.522 [DEBUG] [Thread-17649] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:54:38.522 [DEBUG] [Thread-17649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:54:38.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:54:38.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:54:38.582 [DEBUG] [Thread-17649] [transport.py] [_log()] userauth is OK
2026-04-15T10:54:38.582 [DEBUG] [Thread-17649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:54:38.583 [DEBUG] [Thread-17649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:54:38.583 [DEBUG] [Thread-17649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:54:38.583 [DEBUG] [Thread-17649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:54:38.611 [INFO] [Thread-17649] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:54:38.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:54:38.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:54:39.049 [DEBUG] [Thread-17651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:54:39.421 [DEBUG] [Thread-17649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:54:39.421 [DEBUG] [Thread-17649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:54:39.469 [DEBUG] [Thread-17649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:54:39.469 [DEBUG] [Thread-17649] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:54:39.478 [DEBUG] [Thread-17649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:54:39.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:54: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')
2026-04-15T10:54: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
2026-04-15T10:54:39.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:54:39.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:54:39.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:54:39.512 [DEBUG] [Thread-17649] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:54:54.091 [DEBUG] [Thread-17652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:55:05.140 [DEBUG] [Thread-17653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:55:09.122 [DEBUG] [Thread-17654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:55:09.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:55:09.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:55:09.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
2026-04-15T10:55:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 54, 36), 3.55458, 78.8031, 0.0, 17.5025, 12.021, 0, 0, 0, 2, 0, 0),)
2026-04-15T10:55:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:54:36
2026-04-15T10:55:11.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:55:11.757 [DEBUG] [Thread-17655] [transport.py] [_log()] starting thread (client mode): 0xee9ec640
2026-04-15T10:55:11.757 [DEBUG] [Thread-17655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:55:11.776 [DEBUG] [Thread-17655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:55:11.776 [INFO] [Thread-17655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:55:11.780 [DEBUG] [Thread-17655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:55:11.780 [DEBUG] [Thread-17655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:55:11.780 [DEBUG] [Thread-17655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:55:11.780 [DEBUG] [Thread-17655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:55:11.780 [DEBUG] [Thread-17655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:55:11.780 [DEBUG] [Thread-17655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:55:11.780 [DEBUG] [Thread-17655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:55:11.780 [DEBUG] [Thread-17655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:55:11.780 [DEBUG] [Thread-17655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:55:11.780 [DEBUG] [Thread-17655] [transport.py] [_log()] client lang: <none>
2026-04-15T10:55:11.780 [DEBUG] [Thread-17655] [transport.py] [_log()] server lang: <none>
2026-04-15T10:55:11.780 [DEBUG] [Thread-17655] [transport.py] [_log()] kex follows: False
2026-04-15T10:55:11.780 [DEBUG] [Thread-17655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:55:11.780 [DEBUG] [Thread-17655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:55:11.780 [DEBUG] [Thread-17655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:55:11.781 [DEBUG] [Thread-17655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:55:11.781 [DEBUG] [Thread-17655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:55:11.781 [DEBUG] [Thread-17655] [transport.py] [_log()] Compression: none
2026-04-15T10:55:11.781 [DEBUG] [Thread-17655] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:55:11.796 [DEBUG] [Thread-17655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:55:11.797 [DEBUG] [Thread-17655] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:55:11.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:55:11.797 [DEBUG] [Thread-17655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:55:11.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:55:11.798 [DEBUG] [Thread-17655] [transport.py] [_log()] userauth is OK
2026-04-15T10:55:11.798 [DEBUG] [Thread-17655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:55:11.798 [DEBUG] [Thread-17655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:55:11.798 [DEBUG] [Thread-17655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:55:11.798 [DEBUG] [Thread-17655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:55:11.811 [INFO] [Thread-17655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:55:11.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:55:14.281 [DEBUG] [Thread-17655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:55:14.281 [DEBUG] [Thread-17655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:55:14.282 [DEBUG] [Thread-17655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:55:14.322 [DEBUG] [Thread-17655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:55:14.322 [DEBUG] [Thread-17655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:55:14.325 [DEBUG] [Thread-17655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:55:14.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:55:14.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:55:14.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:55:14.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:55:14.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:55:14.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:55:14.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:55:14.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:55:14.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:55:14.418 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-15T10:55:14.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:54:36', tmtdew=3.55458, humidity=78.8031, cloud=0.0, wind=17.5025, temperature=12.021, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:55:14.420 [DEBUG] [Thread-17655] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:55:14.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:55:14.675 [DEBUG] [Thread-17658] [transport.py] [_log()] starting thread (client mode): 0xf13edc60
2026-04-15T10:55:14.675 [DEBUG] [Thread-17658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:55:14.690 [DEBUG] [Thread-17658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:55:14.690 [INFO] [Thread-17658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:55:14.697 [DEBUG] [Thread-17658] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:55:14.697 [DEBUG] [Thread-17658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:55:14.697 [DEBUG] [Thread-17658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:55:14.698 [DEBUG] [Thread-17658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:55:14.698 [DEBUG] [Thread-17658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:55:14.698 [DEBUG] [Thread-17658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:55:14.698 [DEBUG] [Thread-17658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:55:14.698 [DEBUG] [Thread-17658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:55:14.698 [DEBUG] [Thread-17658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:55:14.698 [DEBUG] [Thread-17658] [transport.py] [_log()] client lang: <none>
2026-04-15T10:55:14.698 [DEBUG] [Thread-17658] [transport.py] [_log()] server lang: <none>
2026-04-15T10:55:14.698 [DEBUG] [Thread-17658] [transport.py] [_log()] kex follows: False
2026-04-15T10:55:14.698 [DEBUG] [Thread-17658] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:55:14.698 [DEBUG] [Thread-17658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:55:14.698 [DEBUG] [Thread-17658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:55:14.699 [DEBUG] [Thread-17658] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:55:14.699 [DEBUG] [Thread-17658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:55:14.699 [DEBUG] [Thread-17658] [transport.py] [_log()] Compression: none
2026-04-15T10:55:14.699 [DEBUG] [Thread-17658] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:55:14.756 [DEBUG] [Thread-17658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:55:14.756 [DEBUG] [Thread-17658] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:55:14.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:55:14.757 [DEBUG] [Thread-17658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:55:14.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:55:14.815 [DEBUG] [Thread-17658] [transport.py] [_log()] userauth is OK
2026-04-15T10:55:14.816 [DEBUG] [Thread-17658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:55:14.816 [DEBUG] [Thread-17658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:55:14.816 [DEBUG] [Thread-17658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:55:14.816 [DEBUG] [Thread-17658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:55:14.841 [INFO] [Thread-17658] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:55:14.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:55:14.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:55:15.682 [DEBUG] [Thread-17658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:55:15.682 [DEBUG] [Thread-17658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:55:15.729 [DEBUG] [Thread-17658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:55:15.730 [DEBUG] [Thread-17658] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:55:15.738 [DEBUG] [Thread-17658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:55:15.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:55: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')
2026-04-15T10:55: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
2026-04-15T10:55:15.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:55:15.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:55:15.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:55:15.776 [DEBUG] [Thread-17658] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:55:24.154 [DEBUG] [Thread-17660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:55:33.307 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:55:33.309 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:55:39.196 [DEBUG] [Thread-17661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:55:45.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:55:45.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:55:45.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
2026-04-15T10:55:47.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 55, 11), 1.69069, 89.3824, 0.0, 14.2578, 11.4265, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:55:47.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:55:11
2026-04-15T10:55:47.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:55:47.875 [DEBUG] [Thread-17662] [transport.py] [_log()] starting thread (client mode): 0xee924100
2026-04-15T10:55:47.875 [DEBUG] [Thread-17662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:55:47.889 [DEBUG] [Thread-17662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:55:47.889 [INFO] [Thread-17662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:55:47.892 [DEBUG] [Thread-17662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:55:47.892 [DEBUG] [Thread-17662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:55:47.892 [DEBUG] [Thread-17662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:55:47.892 [DEBUG] [Thread-17662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:55:47.892 [DEBUG] [Thread-17662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:55:47.892 [DEBUG] [Thread-17662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:55:47.893 [DEBUG] [Thread-17662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:55:47.893 [DEBUG] [Thread-17662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:55:47.893 [DEBUG] [Thread-17662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:55:47.893 [DEBUG] [Thread-17662] [transport.py] [_log()] client lang: <none>
2026-04-15T10:55:47.893 [DEBUG] [Thread-17662] [transport.py] [_log()] server lang: <none>
2026-04-15T10:55:47.893 [DEBUG] [Thread-17662] [transport.py] [_log()] kex follows: False
2026-04-15T10:55:47.893 [DEBUG] [Thread-17662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:55:47.893 [DEBUG] [Thread-17662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:55:47.893 [DEBUG] [Thread-17662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:55:47.893 [DEBUG] [Thread-17662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:55:47.893 [DEBUG] [Thread-17662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:55:47.893 [DEBUG] [Thread-17662] [transport.py] [_log()] Compression: none
2026-04-15T10:55:47.893 [DEBUG] [Thread-17662] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:55:47.908 [DEBUG] [Thread-17662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:55:47.909 [DEBUG] [Thread-17662] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:55:47.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:55:47.909 [DEBUG] [Thread-17662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:55:47.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:55:47.910 [DEBUG] [Thread-17662] [transport.py] [_log()] userauth is OK
2026-04-15T10:55:47.910 [DEBUG] [Thread-17662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:55:47.910 [DEBUG] [Thread-17662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:55:47.910 [DEBUG] [Thread-17662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:55:47.910 [DEBUG] [Thread-17662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:55:47.924 [INFO] [Thread-17662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:55:47.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:55:48.491 [DEBUG] [Thread-17662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:55:48.491 [DEBUG] [Thread-17662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:55:48.492 [DEBUG] [Thread-17662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:55:48.532 [DEBUG] [Thread-17662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:55:48.532 [DEBUG] [Thread-17662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:55:48.535 [DEBUG] [Thread-17662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:55:48.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:55:48.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:55:48.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:55:48.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:55:48.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:55:48.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:55:48.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:55:48.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:55:48.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:55:48.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.372004 -999.00  +11.30  19.59     84   +8.70 1 3 1 2 1   888    0 3.36 34.44 ----- 19.6 19.6 306.8 23.3 16.3 -7.5 15.9 -7.0 15.4 -7.0 15.9 -6.9
2026-04-15T10:55:48.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:55:48.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:55:48.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.372004
2026-04-15T10:55:48.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:55:48.558 [DEBUG] [Thread-17662] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:55:48.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:55:48.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:55:48.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:55:48.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:55:48.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:55:11', tmtdew=1.69069, humidity=89.3824, cloud=0.0, wind=14.2578, temperature=11.4265, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:55:41.146', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:55:48.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:55:48.812 [DEBUG] [Thread-17665] [transport.py] [_log()] starting thread (client mode): 0xee9261a0
2026-04-15T10:55:48.812 [DEBUG] [Thread-17665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:55:48.826 [DEBUG] [Thread-17665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:55:48.826 [INFO] [Thread-17665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:55:48.833 [DEBUG] [Thread-17665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:55:48.833 [DEBUG] [Thread-17665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:55:48.833 [DEBUG] [Thread-17665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:55:48.834 [DEBUG] [Thread-17665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:55:48.834 [DEBUG] [Thread-17665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:55:48.834 [DEBUG] [Thread-17665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:55:48.834 [DEBUG] [Thread-17665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:55:48.834 [DEBUG] [Thread-17665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:55:48.834 [DEBUG] [Thread-17665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:55:48.834 [DEBUG] [Thread-17665] [transport.py] [_log()] client lang: <none>
2026-04-15T10:55:48.834 [DEBUG] [Thread-17665] [transport.py] [_log()] server lang: <none>
2026-04-15T10:55:48.834 [DEBUG] [Thread-17665] [transport.py] [_log()] kex follows: False
2026-04-15T10:55:48.834 [DEBUG] [Thread-17665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:55:48.834 [DEBUG] [Thread-17665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:55:48.834 [DEBUG] [Thread-17665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:55:48.835 [DEBUG] [Thread-17665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:55:48.835 [DEBUG] [Thread-17665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:55:48.835 [DEBUG] [Thread-17665] [transport.py] [_log()] Compression: none
2026-04-15T10:55:48.835 [DEBUG] [Thread-17665] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:55:48.890 [DEBUG] [Thread-17665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:55:48.891 [DEBUG] [Thread-17665] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:55:48.891 [DEBUG] [Thread-17665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:55:48.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:55:48.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:55:48.946 [DEBUG] [Thread-17665] [transport.py] [_log()] userauth is OK
2026-04-15T10:55:48.947 [DEBUG] [Thread-17665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:55:48.947 [DEBUG] [Thread-17665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:55:48.947 [DEBUG] [Thread-17665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:55:48.947 [DEBUG] [Thread-17665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:55:48.973 [INFO] [Thread-17665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:55:48.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:55:48.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:55:49.835 [DEBUG] [Thread-17665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:55:49.835 [DEBUG] [Thread-17665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:55:49.883 [DEBUG] [Thread-17665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:55:49.883 [DEBUG] [Thread-17665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:55:49.892 [DEBUG] [Thread-17665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:55:49.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:55:49.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')
2026-04-15T10:55:49.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
2026-04-15T10:55:49.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:55:49.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:55:49.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:55:49.927 [DEBUG] [Thread-17665] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:55:54.228 [DEBUG] [Thread-17667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:56:05.249 [DEBUG] [Thread-17668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:56:09.272 [DEBUG] [Thread-17669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:56:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:56:19.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:56:19.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
2026-04-15T10:56:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 55, 47), 3.49606, 79.1679, 0.0, 17.82, 12.3857, 0, 0, 0, 2, 0, 0),)
2026-04-15T10:56:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:55:47
2026-04-15T10:56:21.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:56:22.037 [DEBUG] [Thread-17670] [transport.py] [_log()] starting thread (client mode): 0xee925f30
2026-04-15T10:56:22.038 [DEBUG] [Thread-17670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:56:22.058 [DEBUG] [Thread-17670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:56:22.058 [INFO] [Thread-17670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:56:22.061 [DEBUG] [Thread-17670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:56:22.061 [DEBUG] [Thread-17670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:56:22.061 [DEBUG] [Thread-17670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:56:22.061 [DEBUG] [Thread-17670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:56:22.061 [DEBUG] [Thread-17670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:56:22.061 [DEBUG] [Thread-17670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:56:22.061 [DEBUG] [Thread-17670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:56:22.061 [DEBUG] [Thread-17670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:56:22.061 [DEBUG] [Thread-17670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:56:22.061 [DEBUG] [Thread-17670] [transport.py] [_log()] client lang: <none>
2026-04-15T10:56:22.061 [DEBUG] [Thread-17670] [transport.py] [_log()] server lang: <none>
2026-04-15T10:56:22.062 [DEBUG] [Thread-17670] [transport.py] [_log()] kex follows: False
2026-04-15T10:56:22.062 [DEBUG] [Thread-17670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:56:22.062 [DEBUG] [Thread-17670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:56:22.062 [DEBUG] [Thread-17670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:56:22.062 [DEBUG] [Thread-17670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:56:22.062 [DEBUG] [Thread-17670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:56:22.062 [DEBUG] [Thread-17670] [transport.py] [_log()] Compression: none
2026-04-15T10:56:22.062 [DEBUG] [Thread-17670] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:56:22.078 [DEBUG] [Thread-17670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:56:22.079 [DEBUG] [Thread-17670] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:56:22.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:56:22.079 [DEBUG] [Thread-17670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:56:22.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:56:22.080 [DEBUG] [Thread-17670] [transport.py] [_log()] userauth is OK
2026-04-15T10:56:22.081 [DEBUG] [Thread-17670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:56:22.081 [DEBUG] [Thread-17670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:56:22.081 [DEBUG] [Thread-17670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:56:22.081 [DEBUG] [Thread-17670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:56:22.098 [INFO] [Thread-17670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:56:22.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:56:22.805 [DEBUG] [Thread-17670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:56:22.806 [DEBUG] [Thread-17670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:56:22.806 [DEBUG] [Thread-17670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:56:22.847 [DEBUG] [Thread-17670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:56:22.847 [DEBUG] [Thread-17670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:56:22.849 [DEBUG] [Thread-17670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:56:22.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:56:22.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:56:22.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:56:22.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:56:22.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:56:22.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:56:22.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:56:22.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:56:22.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:56:22.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.372351 -999.00  +11.20  22.28     84   +8.60 1 3 1 2 1   888    0 3.29 32.61 ----- 22.3 22.3 297.2 23.0 16.2 -8.0 15.9 -7.4 15.3 -6.9 15.8 -7.1
2026-04-15T10:56:22.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:56:22.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:56:22.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.372351
2026-04-15T10:56:22.874 [DEBUG] [Thread-17670] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:56:22.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:56:22.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:56:22.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:56:22.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:56:22.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:56:22.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:55:47', tmtdew=3.49606, humidity=79.1679, cloud=0.0, wind=17.82, temperature=12.3857, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:56:11.126', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:56:23.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:56:23.131 [DEBUG] [Thread-17673] [transport.py] [_log()] starting thread (client mode): 0xee9244f0
2026-04-15T10:56:23.131 [DEBUG] [Thread-17673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:56:23.144 [DEBUG] [Thread-17673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:56:23.144 [INFO] [Thread-17673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:56:23.151 [DEBUG] [Thread-17673] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:56:23.152 [DEBUG] [Thread-17673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:56:23.152 [DEBUG] [Thread-17673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:56:23.152 [DEBUG] [Thread-17673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:56:23.152 [DEBUG] [Thread-17673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:56:23.152 [DEBUG] [Thread-17673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:56:23.152 [DEBUG] [Thread-17673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:56:23.152 [DEBUG] [Thread-17673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:56:23.152 [DEBUG] [Thread-17673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:56:23.152 [DEBUG] [Thread-17673] [transport.py] [_log()] client lang: <none>
2026-04-15T10:56:23.152 [DEBUG] [Thread-17673] [transport.py] [_log()] server lang: <none>
2026-04-15T10:56:23.152 [DEBUG] [Thread-17673] [transport.py] [_log()] kex follows: False
2026-04-15T10:56:23.152 [DEBUG] [Thread-17673] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:56:23.153 [DEBUG] [Thread-17673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:56:23.153 [DEBUG] [Thread-17673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:56:23.153 [DEBUG] [Thread-17673] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:56:23.153 [DEBUG] [Thread-17673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:56:23.153 [DEBUG] [Thread-17673] [transport.py] [_log()] Compression: none
2026-04-15T10:56:23.153 [DEBUG] [Thread-17673] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:56:23.210 [DEBUG] [Thread-17673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:56:23.210 [DEBUG] [Thread-17673] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:56:23.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:56:23.211 [DEBUG] [Thread-17673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:56:23.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:56:23.269 [DEBUG] [Thread-17673] [transport.py] [_log()] userauth is OK
2026-04-15T10:56:23.269 [DEBUG] [Thread-17673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:56:23.269 [DEBUG] [Thread-17673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:56:23.269 [DEBUG] [Thread-17673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:56:23.270 [DEBUG] [Thread-17673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:56:23.294 [INFO] [Thread-17673] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:56:23.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:56:23.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:56:24.154 [DEBUG] [Thread-17673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:56:24.154 [DEBUG] [Thread-17673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:56:24.202 [DEBUG] [Thread-17673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:56:24.202 [DEBUG] [Thread-17673] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:56:24.211 [DEBUG] [Thread-17673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:56:24.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:56: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')
2026-04-15T10:56:24.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
2026-04-15T10:56:24.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:56:24.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:56:24.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:56:24.245 [DEBUG] [Thread-17673] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:56:24.304 [DEBUG] [Thread-17675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:56:33.451 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:56:33.452 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:56:39.348 [DEBUG] [Thread-17676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:56:54.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:56:54.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:56:54.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
2026-04-15T10:56:54.380 [DEBUG] [Thread-17677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:56:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 56, 22), 1.8549, 88.7689, 0.0, 15.6337, 11.46, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:56:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:56:22
2026-04-15T10:56:55.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:56:56.405 [DEBUG] [Thread-17678] [transport.py] [_log()] starting thread (client mode): 0xee925a50
2026-04-15T10:56:56.405 [DEBUG] [Thread-17678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:56:56.424 [DEBUG] [Thread-17678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:56:56.424 [INFO] [Thread-17678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:56:56.427 [DEBUG] [Thread-17678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:56:56.427 [DEBUG] [Thread-17678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:56:56.427 [DEBUG] [Thread-17678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:56:56.427 [DEBUG] [Thread-17678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:56:56.427 [DEBUG] [Thread-17678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:56:56.427 [DEBUG] [Thread-17678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:56:56.428 [DEBUG] [Thread-17678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:56:56.428 [DEBUG] [Thread-17678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:56:56.428 [DEBUG] [Thread-17678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:56:56.428 [DEBUG] [Thread-17678] [transport.py] [_log()] client lang: <none>
2026-04-15T10:56:56.428 [DEBUG] [Thread-17678] [transport.py] [_log()] server lang: <none>
2026-04-15T10:56:56.428 [DEBUG] [Thread-17678] [transport.py] [_log()] kex follows: False
2026-04-15T10:56:56.428 [DEBUG] [Thread-17678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:56:56.428 [DEBUG] [Thread-17678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:56:56.428 [DEBUG] [Thread-17678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:56:56.428 [DEBUG] [Thread-17678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:56:56.428 [DEBUG] [Thread-17678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:56:56.428 [DEBUG] [Thread-17678] [transport.py] [_log()] Compression: none
2026-04-15T10:56:56.428 [DEBUG] [Thread-17678] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:56:56.445 [DEBUG] [Thread-17678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:56:56.445 [DEBUG] [Thread-17678] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:56:56.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:56:56.446 [DEBUG] [Thread-17678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:56:56.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:56:56.447 [DEBUG] [Thread-17678] [transport.py] [_log()] userauth is OK
2026-04-15T10:56:56.447 [DEBUG] [Thread-17678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:56:56.447 [DEBUG] [Thread-17678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:56:56.447 [DEBUG] [Thread-17678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:56:56.447 [DEBUG] [Thread-17678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:56:56.459 [INFO] [Thread-17678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:56:56.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:56:57.033 [DEBUG] [Thread-17678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:56:57.034 [DEBUG] [Thread-17678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:56:57.034 [DEBUG] [Thread-17678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:56:57.074 [DEBUG] [Thread-17678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:56:57.074 [DEBUG] [Thread-17678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:56:57.077 [DEBUG] [Thread-17678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:56:57.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:56:57.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:56:57.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:56:57.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:56:57.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:56:57.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:56:57.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:56:57.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:56:57.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:56:57.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.372698 -999.00  +11.20  15.72     84   +8.70 1 3 1 2 1   888    0 3.29 32.63 ----- 15.7 15.7 303.8 20.6 16.1 -9.0 15.8 -7.8 15.3 -7.1 15.8 -8.2
2026-04-15T10:56:57.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:56:57.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:56:57.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.372698
2026-04-15T10:56:57.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:56:57.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:56:57.102 [DEBUG] [Thread-17678] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:56:57.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:56:57.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:56:57.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:56:57.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:56:22', tmtdew=1.8549, humidity=88.7689, cloud=0.0, wind=15.6337, temperature=11.46, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:56:41.107', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:56:57.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:56:57.357 [DEBUG] [Thread-17681] [transport.py] [_log()] starting thread (client mode): 0xf13c9600
2026-04-15T10:56:57.358 [DEBUG] [Thread-17681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:56:57.371 [DEBUG] [Thread-17681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:56:57.372 [INFO] [Thread-17681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:56:57.379 [DEBUG] [Thread-17681] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:56:57.379 [DEBUG] [Thread-17681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:56:57.379 [DEBUG] [Thread-17681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:56:57.379 [DEBUG] [Thread-17681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:56:57.379 [DEBUG] [Thread-17681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:56:57.379 [DEBUG] [Thread-17681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:56:57.379 [DEBUG] [Thread-17681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:56:57.379 [DEBUG] [Thread-17681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:56:57.379 [DEBUG] [Thread-17681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:56:57.380 [DEBUG] [Thread-17681] [transport.py] [_log()] client lang: <none>
2026-04-15T10:56:57.380 [DEBUG] [Thread-17681] [transport.py] [_log()] server lang: <none>
2026-04-15T10:56:57.380 [DEBUG] [Thread-17681] [transport.py] [_log()] kex follows: False
2026-04-15T10:56:57.380 [DEBUG] [Thread-17681] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:56:57.380 [DEBUG] [Thread-17681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:56:57.380 [DEBUG] [Thread-17681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:56:57.380 [DEBUG] [Thread-17681] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:56:57.380 [DEBUG] [Thread-17681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:56:57.380 [DEBUG] [Thread-17681] [transport.py] [_log()] Compression: none
2026-04-15T10:56:57.380 [DEBUG] [Thread-17681] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:56:57.438 [DEBUG] [Thread-17681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:56:57.438 [DEBUG] [Thread-17681] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:56:57.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:56:57.439 [DEBUG] [Thread-17681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:56:57.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:56:57.495 [DEBUG] [Thread-17681] [transport.py] [_log()] userauth is OK
2026-04-15T10:56:57.495 [DEBUG] [Thread-17681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:56:57.495 [DEBUG] [Thread-17681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:56:57.495 [DEBUG] [Thread-17681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:56:57.495 [DEBUG] [Thread-17681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:56:57.520 [INFO] [Thread-17681] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:56:57.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:56:57.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:56:58.361 [DEBUG] [Thread-17681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:56:58.361 [DEBUG] [Thread-17681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:56:58.410 [DEBUG] [Thread-17681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:56:58.410 [DEBUG] [Thread-17681] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:56:58.419 [DEBUG] [Thread-17681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:56:58.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:56:58.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')
2026-04-15T10:56:58.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
2026-04-15T10:56:58.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:56:58.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:56:58.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:56:58.454 [DEBUG] [Thread-17681] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:57:05.372 [DEBUG] [Thread-17683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:57:09.412 [DEBUG] [Thread-17684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:57:24.458 [DEBUG] [Thread-17685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:57:28.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:57:28.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:57:28.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
2026-04-15T10:57:29.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 56, 58), 1.76052, 89.2826, 0.0, 14.6812, 11.476, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:57:29.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:56:58
2026-04-15T10:57:30.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:57:30.621 [DEBUG] [Thread-17686] [transport.py] [_log()] starting thread (client mode): 0xee91efe0
2026-04-15T10:57:30.621 [DEBUG] [Thread-17686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:57:30.641 [DEBUG] [Thread-17686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:57:30.641 [INFO] [Thread-17686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:57:30.644 [DEBUG] [Thread-17686] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:57:30.644 [DEBUG] [Thread-17686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:57:30.645 [DEBUG] [Thread-17686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:57:30.645 [DEBUG] [Thread-17686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:57:30.645 [DEBUG] [Thread-17686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:57:30.645 [DEBUG] [Thread-17686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:57:30.645 [DEBUG] [Thread-17686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:57:30.645 [DEBUG] [Thread-17686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:57:30.645 [DEBUG] [Thread-17686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:57:30.645 [DEBUG] [Thread-17686] [transport.py] [_log()] client lang: <none>
2026-04-15T10:57:30.645 [DEBUG] [Thread-17686] [transport.py] [_log()] server lang: <none>
2026-04-15T10:57:30.645 [DEBUG] [Thread-17686] [transport.py] [_log()] kex follows: False
2026-04-15T10:57:30.645 [DEBUG] [Thread-17686] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:57:30.646 [DEBUG] [Thread-17686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:57:30.646 [DEBUG] [Thread-17686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:57:30.646 [DEBUG] [Thread-17686] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:57:30.646 [DEBUG] [Thread-17686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:57:30.646 [DEBUG] [Thread-17686] [transport.py] [_log()] Compression: none
2026-04-15T10:57:30.646 [DEBUG] [Thread-17686] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:57:30.659 [DEBUG] [Thread-17686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:57:30.659 [DEBUG] [Thread-17686] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:57:30.660 [DEBUG] [Thread-17686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:57:30.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:57:30.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:57:30.661 [DEBUG] [Thread-17686] [transport.py] [_log()] userauth is OK
2026-04-15T10:57:30.661 [DEBUG] [Thread-17686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:57:30.661 [DEBUG] [Thread-17686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:57:30.661 [DEBUG] [Thread-17686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:57:30.661 [DEBUG] [Thread-17686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:57:30.684 [INFO] [Thread-17686] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:57:30.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:57:31.301 [DEBUG] [Thread-17686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:57:31.301 [DEBUG] [Thread-17686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:57:31.301 [DEBUG] [Thread-17686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:57:31.342 [DEBUG] [Thread-17686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:57:31.342 [DEBUG] [Thread-17686] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:57:31.345 [DEBUG] [Thread-17686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:57:31.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:57:31.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:57:31.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:57:31.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:57:31.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:57:31.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:57:31.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:57:31.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:57:31.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:57:31.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.373045 -999.00  +11.30  12.53     84   +8.80 1 3 1 2 1   888    0 3.33 34.06 ----- 16.8 12.5 280.6 17.4 16.2 -10.4 15.9 -8.8 15.3 -7.5 15.7 -8.5
2026-04-15T10:57:31.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:57:31.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:57:31.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.373045
2026-04-15T10:57:31.366 [DEBUG] [Thread-17686] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:57:31.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:57:31.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:57:31.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:57:31.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:57:31.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:57:31.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:56:58', tmtdew=1.76052, humidity=89.2826, cloud=0.0, wind=14.6812, temperature=11.476, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:57:11.088', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:57:31.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:57:31.622 [DEBUG] [Thread-17689] [transport.py] [_log()] starting thread (client mode): 0xee906830
2026-04-15T10:57:31.623 [DEBUG] [Thread-17689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:57:31.640 [DEBUG] [Thread-17689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:57:31.640 [INFO] [Thread-17689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:57:31.648 [DEBUG] [Thread-17689] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:57:31.648 [DEBUG] [Thread-17689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:57:31.648 [DEBUG] [Thread-17689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:57:31.648 [DEBUG] [Thread-17689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:57:31.648 [DEBUG] [Thread-17689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:57:31.648 [DEBUG] [Thread-17689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:57:31.648 [DEBUG] [Thread-17689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:57:31.649 [DEBUG] [Thread-17689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:57:31.649 [DEBUG] [Thread-17689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:57:31.649 [DEBUG] [Thread-17689] [transport.py] [_log()] client lang: <none>
2026-04-15T10:57:31.649 [DEBUG] [Thread-17689] [transport.py] [_log()] server lang: <none>
2026-04-15T10:57:31.649 [DEBUG] [Thread-17689] [transport.py] [_log()] kex follows: False
2026-04-15T10:57:31.649 [DEBUG] [Thread-17689] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:57:31.649 [DEBUG] [Thread-17689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:57:31.649 [DEBUG] [Thread-17689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:57:31.649 [DEBUG] [Thread-17689] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:57:31.649 [DEBUG] [Thread-17689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:57:31.649 [DEBUG] [Thread-17689] [transport.py] [_log()] Compression: none
2026-04-15T10:57:31.649 [DEBUG] [Thread-17689] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:57:31.704 [DEBUG] [Thread-17689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:57:31.704 [DEBUG] [Thread-17689] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:57:31.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:57:31.705 [DEBUG] [Thread-17689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:57:31.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:57:31.760 [DEBUG] [Thread-17689] [transport.py] [_log()] userauth is OK
2026-04-15T10:57:31.761 [DEBUG] [Thread-17689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:57:31.761 [DEBUG] [Thread-17689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:57:31.761 [DEBUG] [Thread-17689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:57:31.761 [DEBUG] [Thread-17689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:57:31.786 [INFO] [Thread-17689] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:57:31.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:57:31.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:57:32.633 [DEBUG] [Thread-17689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:57:32.633 [DEBUG] [Thread-17689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:57:32.681 [DEBUG] [Thread-17689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:57:32.681 [DEBUG] [Thread-17689] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:57:32.690 [DEBUG] [Thread-17689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:57:32.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:57:32.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')
2026-04-15T10:57:32.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
2026-04-15T10:57:32.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:57:32.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:57:32.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:57:32.725 [DEBUG] [Thread-17689] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:57:33.592 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:57:33.593 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:57:39.489 [DEBUG] [Thread-17691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:57:54.533 [DEBUG] [Thread-17692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:58:02.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:58:02.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:58:02.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
2026-04-15T10:58:04.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 57, 33), 3.57885, 78.7022, 0.0, 17.8906, 12.2189, 0, 0, 0, 2, 0, 0),)
2026-04-15T10:58:04.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:57:33
2026-04-15T10:58:04.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:58:04.863 [DEBUG] [Thread-17693] [transport.py] [_log()] starting thread (client mode): 0xf13c8b20
2026-04-15T10:58:04.863 [DEBUG] [Thread-17693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:58:04.876 [DEBUG] [Thread-17693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:58:04.876 [INFO] [Thread-17693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:58:04.882 [DEBUG] [Thread-17693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:58:04.882 [DEBUG] [Thread-17693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:58:04.882 [DEBUG] [Thread-17693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:58:04.882 [DEBUG] [Thread-17693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:58:04.882 [DEBUG] [Thread-17693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:58:04.882 [DEBUG] [Thread-17693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:58:04.883 [DEBUG] [Thread-17693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:58:04.883 [DEBUG] [Thread-17693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:58:04.883 [DEBUG] [Thread-17693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:58:04.883 [DEBUG] [Thread-17693] [transport.py] [_log()] client lang: <none>
2026-04-15T10:58:04.883 [DEBUG] [Thread-17693] [transport.py] [_log()] server lang: <none>
2026-04-15T10:58:04.883 [DEBUG] [Thread-17693] [transport.py] [_log()] kex follows: False
2026-04-15T10:58:04.883 [DEBUG] [Thread-17693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:58:04.883 [DEBUG] [Thread-17693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:58:04.883 [DEBUG] [Thread-17693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:58:04.883 [DEBUG] [Thread-17693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:58:04.883 [DEBUG] [Thread-17693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:58:04.884 [DEBUG] [Thread-17693] [transport.py] [_log()] Compression: none
2026-04-15T10:58:04.884 [DEBUG] [Thread-17693] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:58:04.891 [DEBUG] [Thread-17693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:58:04.892 [DEBUG] [Thread-17693] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:58:04.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:58:04.892 [DEBUG] [Thread-17693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:58:04.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:58:04.893 [DEBUG] [Thread-17693] [transport.py] [_log()] userauth is OK
2026-04-15T10:58:04.893 [DEBUG] [Thread-17693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:58:04.894 [DEBUG] [Thread-17693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:58:04.894 [DEBUG] [Thread-17693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:58:04.894 [DEBUG] [Thread-17693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:58:04.910 [INFO] [Thread-17693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:58:04.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:58:05.466 [DEBUG] [Thread-17695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:58:05.486 [DEBUG] [Thread-17693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:58:05.487 [DEBUG] [Thread-17693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:58:05.487 [DEBUG] [Thread-17693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:58:05.527 [DEBUG] [Thread-17693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:58:05.527 [DEBUG] [Thread-17693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:58:05.530 [DEBUG] [Thread-17693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:58:05.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:58:05.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:58:05.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:58:05.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:58:05.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:58:05.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:58:05.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:58:05.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:58:05.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:58:05.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.373392 -999.00  +11.10  16.17     83   +8.40 1 3 1 2 1   888    0 3.43 36.34 ----- 16.6 16.2 293.8 20.5 16.2 -11.1 15.8 -9.4 15.2 -8.6 15.8 -10.0
2026-04-15T10:58:05.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:58:05.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:58:05.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.373392
2026-04-15T10:58:05.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:58:05.552 [DEBUG] [Thread-17693] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:58:05.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:58:05.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:58:05.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:58:05.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:58:05.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:57:33', tmtdew=3.57885, humidity=78.7022, cloud=0.0, wind=17.8906, temperature=12.2189, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:57:41.069', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:58:05.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:58:05.787 [DEBUG] [Thread-17697] [transport.py] [_log()] starting thread (client mode): 0xee904e20
2026-04-15T10:58:05.787 [DEBUG] [Thread-17697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:58:05.802 [DEBUG] [Thread-17697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:58:05.802 [INFO] [Thread-17697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:58:05.809 [DEBUG] [Thread-17697] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:58:05.809 [DEBUG] [Thread-17697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:58:05.809 [DEBUG] [Thread-17697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:58:05.809 [DEBUG] [Thread-17697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:58:05.810 [DEBUG] [Thread-17697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:58:05.810 [DEBUG] [Thread-17697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:58:05.810 [DEBUG] [Thread-17697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:58:05.810 [DEBUG] [Thread-17697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:58:05.810 [DEBUG] [Thread-17697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:58:05.810 [DEBUG] [Thread-17697] [transport.py] [_log()] client lang: <none>
2026-04-15T10:58:05.810 [DEBUG] [Thread-17697] [transport.py] [_log()] server lang: <none>
2026-04-15T10:58:05.810 [DEBUG] [Thread-17697] [transport.py] [_log()] kex follows: False
2026-04-15T10:58:05.810 [DEBUG] [Thread-17697] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:58:05.810 [DEBUG] [Thread-17697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:58:05.810 [DEBUG] [Thread-17697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:58:05.811 [DEBUG] [Thread-17697] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:58:05.811 [DEBUG] [Thread-17697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:58:05.811 [DEBUG] [Thread-17697] [transport.py] [_log()] Compression: none
2026-04-15T10:58:05.811 [DEBUG] [Thread-17697] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:58:05.869 [DEBUG] [Thread-17697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:58:05.870 [DEBUG] [Thread-17697] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:58:05.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:58:05.870 [DEBUG] [Thread-17697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:58:05.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:58:05.926 [DEBUG] [Thread-17697] [transport.py] [_log()] userauth is OK
2026-04-15T10:58:05.926 [DEBUG] [Thread-17697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:58:05.926 [DEBUG] [Thread-17697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:58:05.926 [DEBUG] [Thread-17697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:58:05.927 [DEBUG] [Thread-17697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:58:05.952 [INFO] [Thread-17697] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:58:05.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:58:05.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:58:06.811 [DEBUG] [Thread-17697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:58:06.812 [DEBUG] [Thread-17697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:58:06.860 [DEBUG] [Thread-17697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:58:06.860 [DEBUG] [Thread-17697] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:58:06.869 [DEBUG] [Thread-17697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:58:06.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:58:06.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')
2026-04-15T10:58:06.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') -> 00000000
2026-04-15T10:58:06.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:58:06.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:58:06.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:58:06.905 [DEBUG] [Thread-17697] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:58:09.565 [DEBUG] [Thread-17699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:58:24.609 [DEBUG] [Thread-17700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:58:33.730 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:58:33.731 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:58:36.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:58:36.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:58:36.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
2026-04-15T10:58:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 58, 9), 1.84565, 88.8179, 0.0, 13.6044, 11.4094, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:58:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:58:09
2026-04-15T10:58:38.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:58:39.024 [DEBUG] [Thread-17701] [transport.py] [_log()] starting thread (client mode): 0xf13ca4d0
2026-04-15T10:58:39.024 [DEBUG] [Thread-17701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:58:39.043 [DEBUG] [Thread-17701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:58:39.043 [INFO] [Thread-17701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:58:39.046 [DEBUG] [Thread-17701] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:58:39.046 [DEBUG] [Thread-17701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:58:39.046 [DEBUG] [Thread-17701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:58:39.046 [DEBUG] [Thread-17701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:58:39.046 [DEBUG] [Thread-17701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:58:39.047 [DEBUG] [Thread-17701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:58:39.047 [DEBUG] [Thread-17701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:58:39.047 [DEBUG] [Thread-17701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:58:39.047 [DEBUG] [Thread-17701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:58:39.047 [DEBUG] [Thread-17701] [transport.py] [_log()] client lang: <none>
2026-04-15T10:58:39.047 [DEBUG] [Thread-17701] [transport.py] [_log()] server lang: <none>
2026-04-15T10:58:39.047 [DEBUG] [Thread-17701] [transport.py] [_log()] kex follows: False
2026-04-15T10:58:39.047 [DEBUG] [Thread-17701] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:58:39.047 [DEBUG] [Thread-17701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:58:39.047 [DEBUG] [Thread-17701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:58:39.047 [DEBUG] [Thread-17701] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:58:39.047 [DEBUG] [Thread-17701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:58:39.048 [DEBUG] [Thread-17701] [transport.py] [_log()] Compression: none
2026-04-15T10:58:39.048 [DEBUG] [Thread-17701] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:58:39.065 [DEBUG] [Thread-17701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:58:39.065 [DEBUG] [Thread-17701] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:58:39.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:58:39.066 [DEBUG] [Thread-17701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:58:39.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:58:39.067 [DEBUG] [Thread-17701] [transport.py] [_log()] userauth is OK
2026-04-15T10:58:39.067 [DEBUG] [Thread-17701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:58:39.067 [DEBUG] [Thread-17701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:58:39.067 [DEBUG] [Thread-17701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:58:39.068 [DEBUG] [Thread-17701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:58:39.086 [INFO] [Thread-17701] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:58:39.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:58:39.642 [DEBUG] [Thread-17703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:58:39.716 [DEBUG] [Thread-17701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:58:39.716 [DEBUG] [Thread-17701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:58:39.717 [DEBUG] [Thread-17701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:58:39.757 [DEBUG] [Thread-17701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:58:39.757 [DEBUG] [Thread-17701] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:58:39.760 [DEBUG] [Thread-17701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:58:39.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:58:39.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:58:39.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:58:39.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:58:39.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:58:39.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:58:39.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:58:39.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:58:39.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:58:39.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.373740 -999.00  +11.00  14.08     83   +8.40 1 3 1 2 1   888    0 3.60 38.83 ----- 14.1 14.1 296.6 17.2 16.2 -11.5 15.8 -9.8 15.3 -8.8 15.7 -10.7
2026-04-15T10:58:39.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:58:39.788 [DEBUG] [Thread-17701] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:58:39.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:58:39.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.373740
2026-04-15T10:58:39.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:58:39.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:58:39.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:58:39.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:58:39.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:58:39.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:58:09', tmtdew=1.84565, humidity=88.8179, cloud=0.0, wind=13.6044, temperature=11.4094, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:58:11.136', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:58:40.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:58:40.044 [DEBUG] [Thread-17705] [transport.py] [_log()] starting thread (client mode): 0xee904fd0
2026-04-15T10:58:40.044 [DEBUG] [Thread-17705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:58:40.058 [DEBUG] [Thread-17705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:58:40.058 [INFO] [Thread-17705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:58:40.066 [DEBUG] [Thread-17705] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:58:40.066 [DEBUG] [Thread-17705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:58:40.066 [DEBUG] [Thread-17705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:58:40.066 [DEBUG] [Thread-17705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:58:40.066 [DEBUG] [Thread-17705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:58:40.066 [DEBUG] [Thread-17705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:58:40.066 [DEBUG] [Thread-17705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:58:40.066 [DEBUG] [Thread-17705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:58:40.066 [DEBUG] [Thread-17705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:58:40.066 [DEBUG] [Thread-17705] [transport.py] [_log()] client lang: <none>
2026-04-15T10:58:40.066 [DEBUG] [Thread-17705] [transport.py] [_log()] server lang: <none>
2026-04-15T10:58:40.067 [DEBUG] [Thread-17705] [transport.py] [_log()] kex follows: False
2026-04-15T10:58:40.067 [DEBUG] [Thread-17705] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:58:40.067 [DEBUG] [Thread-17705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:58:40.067 [DEBUG] [Thread-17705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:58:40.067 [DEBUG] [Thread-17705] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:58:40.067 [DEBUG] [Thread-17705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:58:40.067 [DEBUG] [Thread-17705] [transport.py] [_log()] Compression: none
2026-04-15T10:58:40.067 [DEBUG] [Thread-17705] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:58:40.122 [DEBUG] [Thread-17705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:58:40.123 [DEBUG] [Thread-17705] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:58:40.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:58:40.123 [DEBUG] [Thread-17705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:58:40.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:58:40.179 [DEBUG] [Thread-17705] [transport.py] [_log()] userauth is OK
2026-04-15T10:58:40.180 [DEBUG] [Thread-17705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:58:40.180 [DEBUG] [Thread-17705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:58:40.180 [DEBUG] [Thread-17705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:58:40.180 [DEBUG] [Thread-17705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:58:40.207 [INFO] [Thread-17705] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:58:40.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:58:40.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:58:41.037 [DEBUG] [Thread-17705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:58:41.037 [DEBUG] [Thread-17705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:58:41.085 [DEBUG] [Thread-17705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:58:41.085 [DEBUG] [Thread-17705] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:58:41.097 [DEBUG] [Thread-17705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:58:41.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:58:41.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')
2026-04-15T10:58:41.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
2026-04-15T10:58:41.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:58:41.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:58:41.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:58:41.131 [DEBUG] [Thread-17705] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:58:54.674 [DEBUG] [Thread-17707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:59:05.592 [DEBUG] [Thread-17708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:59:09.718 [DEBUG] [Thread-17709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:59:11.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:59:11.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:59:11.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:59:12.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 58, 44), 3.68861, 78.1048, 0.0, 17.9964, 12.119, 0, 0, 0, 2, 0, 0),)
2026-04-15T10:59:12.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:58:44
2026-04-15T10:59:12.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:59:13.280 [DEBUG] [Thread-17710] [transport.py] [_log()] starting thread (client mode): 0xf13ece50
2026-04-15T10:59:13.281 [DEBUG] [Thread-17710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:59:13.295 [DEBUG] [Thread-17710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:59:13.295 [INFO] [Thread-17710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:59:13.298 [DEBUG] [Thread-17710] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:59:13.298 [DEBUG] [Thread-17710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:59:13.298 [DEBUG] [Thread-17710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:59:13.298 [DEBUG] [Thread-17710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:59:13.299 [DEBUG] [Thread-17710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:59:13.299 [DEBUG] [Thread-17710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:59:13.299 [DEBUG] [Thread-17710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:59:13.299 [DEBUG] [Thread-17710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:59:13.299 [DEBUG] [Thread-17710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:59:13.299 [DEBUG] [Thread-17710] [transport.py] [_log()] client lang: <none>
2026-04-15T10:59:13.299 [DEBUG] [Thread-17710] [transport.py] [_log()] server lang: <none>
2026-04-15T10:59:13.299 [DEBUG] [Thread-17710] [transport.py] [_log()] kex follows: False
2026-04-15T10:59:13.299 [DEBUG] [Thread-17710] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:59:13.299 [DEBUG] [Thread-17710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:59:13.299 [DEBUG] [Thread-17710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:59:13.299 [DEBUG] [Thread-17710] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:59:13.300 [DEBUG] [Thread-17710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:59:13.300 [DEBUG] [Thread-17710] [transport.py] [_log()] Compression: none
2026-04-15T10:59:13.300 [DEBUG] [Thread-17710] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:59:13.316 [DEBUG] [Thread-17710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:59:13.317 [DEBUG] [Thread-17710] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:59:13.317 [DEBUG] [Thread-17710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:59:13.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:59:13.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:59:13.318 [DEBUG] [Thread-17710] [transport.py] [_log()] userauth is OK
2026-04-15T10:59:13.318 [DEBUG] [Thread-17710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:59:13.318 [DEBUG] [Thread-17710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:59:13.318 [DEBUG] [Thread-17710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:59:13.319 [DEBUG] [Thread-17710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:59:13.334 [INFO] [Thread-17710] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:59:13.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:59:13.950 [DEBUG] [Thread-17710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:59:13.951 [DEBUG] [Thread-17710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:59:13.951 [DEBUG] [Thread-17710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:59:13.991 [DEBUG] [Thread-17710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:59:13.991 [DEBUG] [Thread-17710] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:59:13.994 [DEBUG] [Thread-17710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:59:14.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:59:14.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:59:14.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:59:14.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:59:14.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:59:14.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:59:14.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:59:14.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:59:14.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:59:14.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.374087 -999.00  +11.00  11.22     84   +8.40 1 3 1 2 1   888    0 3.59 39.22 ----- 11.2 11.2 293.8 15.5 16.3 -12.2 15.9 -10.3 15.3 -9.4 15.7 -11.1
2026-04-15T10:59:14.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:59:14.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:59:14.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.374087
2026-04-15T10:59:14.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:59:14.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:59:14.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:59:14.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:59:14.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:59:14.021 [DEBUG] [Thread-17710] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:59:14.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:58:44', tmtdew=3.68861, humidity=78.1048, cloud=0.0, wind=17.9964, temperature=12.119, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:58:41.117', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:59:14.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:59:14.273 [DEBUG] [Thread-17713] [transport.py] [_log()] starting thread (client mode): 0xee988610
2026-04-15T10:59:14.273 [DEBUG] [Thread-17713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:59:14.287 [DEBUG] [Thread-17713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:59:14.287 [INFO] [Thread-17713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:59:14.295 [DEBUG] [Thread-17713] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:59:14.295 [DEBUG] [Thread-17713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:59:14.295 [DEBUG] [Thread-17713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:59:14.295 [DEBUG] [Thread-17713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:59:14.295 [DEBUG] [Thread-17713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:59:14.295 [DEBUG] [Thread-17713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:59:14.295 [DEBUG] [Thread-17713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:59:14.295 [DEBUG] [Thread-17713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:59:14.296 [DEBUG] [Thread-17713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:59:14.296 [DEBUG] [Thread-17713] [transport.py] [_log()] client lang: <none>
2026-04-15T10:59:14.296 [DEBUG] [Thread-17713] [transport.py] [_log()] server lang: <none>
2026-04-15T10:59:14.296 [DEBUG] [Thread-17713] [transport.py] [_log()] kex follows: False
2026-04-15T10:59:14.296 [DEBUG] [Thread-17713] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:59:14.296 [DEBUG] [Thread-17713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:59:14.296 [DEBUG] [Thread-17713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:59:14.296 [DEBUG] [Thread-17713] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:59:14.296 [DEBUG] [Thread-17713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:59:14.296 [DEBUG] [Thread-17713] [transport.py] [_log()] Compression: none
2026-04-15T10:59:14.296 [DEBUG] [Thread-17713] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:59:14.352 [DEBUG] [Thread-17713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:59:14.352 [DEBUG] [Thread-17713] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:59:14.353 [DEBUG] [Thread-17713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:59:14.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:59:14.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:59:14.409 [DEBUG] [Thread-17713] [transport.py] [_log()] userauth is OK
2026-04-15T10:59:14.409 [DEBUG] [Thread-17713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:59:14.409 [DEBUG] [Thread-17713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:59:14.409 [DEBUG] [Thread-17713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:59:14.409 [DEBUG] [Thread-17713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:59:14.434 [INFO] [Thread-17713] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:59:14.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:59:14.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:59:15.251 [DEBUG] [Thread-17713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:59:15.251 [DEBUG] [Thread-17713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:59:15.299 [DEBUG] [Thread-17713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:59:15.299 [DEBUG] [Thread-17713] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:59:15.308 [DEBUG] [Thread-17713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:59:15.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:59:15.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')
2026-04-15T10:59:15.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
2026-04-15T10:59:15.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:59:15.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:59:15.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:59:15.348 [DEBUG] [Thread-17713] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:59:24.749 [DEBUG] [Thread-17715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:59:33.871 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:59:33.873 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:59:39.793 [DEBUG] [Thread-17716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T10:59:45.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T10:59:45.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T10:59:45.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T10:59:46.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 59, 20), 1.84479, 88.8177, 0.0, 14.08, 11.3261, 1, 1, 0, 2, 0, 0),)
2026-04-15T10:59:46.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:59:20
2026-04-15T10:59:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T10:59:47.491 [DEBUG] [Thread-17717] [transport.py] [_log()] starting thread (client mode): 0xf13c9870
2026-04-15T10:59:47.491 [DEBUG] [Thread-17717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:59:47.508 [DEBUG] [Thread-17717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T10:59:47.508 [INFO] [Thread-17717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T10:59:47.510 [DEBUG] [Thread-17717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:59:47.510 [DEBUG] [Thread-17717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T10:59:47.510 [DEBUG] [Thread-17717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:59:47.510 [DEBUG] [Thread-17717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:59:47.510 [DEBUG] [Thread-17717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:59:47.510 [DEBUG] [Thread-17717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:59:47.510 [DEBUG] [Thread-17717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:59:47.510 [DEBUG] [Thread-17717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:59:47.510 [DEBUG] [Thread-17717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:59:47.511 [DEBUG] [Thread-17717] [transport.py] [_log()] client lang: <none>
2026-04-15T10:59:47.511 [DEBUG] [Thread-17717] [transport.py] [_log()] server lang: <none>
2026-04-15T10:59:47.511 [DEBUG] [Thread-17717] [transport.py] [_log()] kex follows: False
2026-04-15T10:59:47.511 [DEBUG] [Thread-17717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:59:47.511 [DEBUG] [Thread-17717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:59:47.511 [DEBUG] [Thread-17717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:59:47.511 [DEBUG] [Thread-17717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:59:47.511 [DEBUG] [Thread-17717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:59:47.511 [DEBUG] [Thread-17717] [transport.py] [_log()] Compression: none
2026-04-15T10:59:47.511 [DEBUG] [Thread-17717] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:59:47.521 [DEBUG] [Thread-17717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:59:47.522 [DEBUG] [Thread-17717] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:59:47.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T10:59:47.522 [DEBUG] [Thread-17717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T10:59:47.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:59:47.523 [DEBUG] [Thread-17717] [transport.py] [_log()] userauth is OK
2026-04-15T10:59:47.524 [DEBUG] [Thread-17717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:59:47.524 [DEBUG] [Thread-17717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:59:47.524 [DEBUG] [Thread-17717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T10:59:47.524 [DEBUG] [Thread-17717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:59:47.541 [INFO] [Thread-17717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:59:47.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:59:48.139 [DEBUG] [Thread-17717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:59:48.140 [DEBUG] [Thread-17717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:59:48.140 [DEBUG] [Thread-17717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T10:59:48.180 [DEBUG] [Thread-17717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:59:48.180 [DEBUG] [Thread-17717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:59:48.183 [DEBUG] [Thread-17717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:59:48.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:59:48.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T10:59:48.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T10:59:48.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T10:59:48.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:59:48.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T10:59:48.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:59:48.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:59:48.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T10:59:48.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.374781 -999.00  +11.40  17.19     84   +8.90 1 3 1 2 1   888    0 3.74 42.44 ----- 17.6 17.2 291.2 17.9 16.9 -10.5 16.4 -9.0 15.7 -7.0 16.1 -9.4
2026-04-15T10:59:48.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T10:59:48.201 [DEBUG] [Thread-17717] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:59:48.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T10:59:48.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.374781
2026-04-15T10:59:48.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T10:59:48.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T10:59:48.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T10:59:48.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T10:59:48.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T10:59:48.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:59:20', tmtdew=1.84479, humidity=88.8177, cloud=0.0, wind=14.08, temperature=11.3261, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T08:59:41.078', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T10:59:48.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T10:59:48.466 [DEBUG] [Thread-17720] [transport.py] [_log()] starting thread (client mode): 0xf13cb640
2026-04-15T10:59:48.466 [DEBUG] [Thread-17720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T10:59:48.481 [DEBUG] [Thread-17720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T10:59:48.481 [INFO] [Thread-17720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T10:59:48.488 [DEBUG] [Thread-17720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T10:59:48.488 [DEBUG] [Thread-17720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T10:59:48.488 [DEBUG] [Thread-17720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T10:59:48.489 [DEBUG] [Thread-17720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:59:48.489 [DEBUG] [Thread-17720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T10:59:48.489 [DEBUG] [Thread-17720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:59:48.489 [DEBUG] [Thread-17720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T10:59:48.489 [DEBUG] [Thread-17720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T10:59:48.489 [DEBUG] [Thread-17720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T10:59:48.489 [DEBUG] [Thread-17720] [transport.py] [_log()] client lang: <none>
2026-04-15T10:59:48.489 [DEBUG] [Thread-17720] [transport.py] [_log()] server lang: <none>
2026-04-15T10:59:48.489 [DEBUG] [Thread-17720] [transport.py] [_log()] kex follows: False
2026-04-15T10:59:48.489 [DEBUG] [Thread-17720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T10:59:48.489 [DEBUG] [Thread-17720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T10:59:48.489 [DEBUG] [Thread-17720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T10:59:48.490 [DEBUG] [Thread-17720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T10:59:48.490 [DEBUG] [Thread-17720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T10:59:48.490 [DEBUG] [Thread-17720] [transport.py] [_log()] Compression: none
2026-04-15T10:59:48.490 [DEBUG] [Thread-17720] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T10:59:48.545 [DEBUG] [Thread-17720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T10:59:48.546 [DEBUG] [Thread-17720] [transport.py] [_log()] Switch to new keys ...
2026-04-15T10:59:48.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T10:59:48.546 [DEBUG] [Thread-17720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T10:59:48.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T10:59:48.602 [DEBUG] [Thread-17720] [transport.py] [_log()] userauth is OK
2026-04-15T10:59:48.602 [DEBUG] [Thread-17720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T10:59:48.603 [DEBUG] [Thread-17720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T10:59:48.603 [DEBUG] [Thread-17720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T10:59:48.603 [DEBUG] [Thread-17720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T10:59:48.628 [INFO] [Thread-17720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T10:59:48.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T10:59:48.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T10:59:49.469 [DEBUG] [Thread-17720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T10:59:49.470 [DEBUG] [Thread-17720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T10:59:49.517 [DEBUG] [Thread-17720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T10:59:49.517 [DEBUG] [Thread-17720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T10:59:49.526 [DEBUG] [Thread-17720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T10:59:49.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T10:59:49.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')
2026-04-15T10:59:49.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
2026-04-15T10:59:49.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T10:59:49.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T10:59:49.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T10:59:49.561 [DEBUG] [Thread-17720] [transport.py] [_log()] EOF in transport thread
2026-04-15T10:59:54.824 [DEBUG] [Thread-17722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:00:05.709 [DEBUG] [Thread-17723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:00:09.866 [DEBUG] [Thread-17724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:00:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:00:19.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:00:19.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
2026-04-15T11:00:20.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 10, 59, 55), 1.85105, 88.7844, 0.0, 14.3636, 11.4259, 1, 1, 0, 2, 0, 0),)
2026-04-15T11:00:20.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 10:59:55
2026-04-15T11:00:21.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:00:21.731 [DEBUG] [Thread-17725] [transport.py] [_log()] starting thread (client mode): 0xf13ed990
2026-04-15T11:00:21.732 [DEBUG] [Thread-17725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:00:21.752 [DEBUG] [Thread-17725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:00:21.752 [INFO] [Thread-17725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:00:21.754 [DEBUG] [Thread-17725] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:00:21.754 [DEBUG] [Thread-17725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:00:21.754 [DEBUG] [Thread-17725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:00:21.755 [DEBUG] [Thread-17725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:00:21.755 [DEBUG] [Thread-17725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:00:21.755 [DEBUG] [Thread-17725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:00:21.755 [DEBUG] [Thread-17725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:00:21.755 [DEBUG] [Thread-17725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:00:21.755 [DEBUG] [Thread-17725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:00:21.755 [DEBUG] [Thread-17725] [transport.py] [_log()] client lang: <none>
2026-04-15T11:00:21.755 [DEBUG] [Thread-17725] [transport.py] [_log()] server lang: <none>
2026-04-15T11:00:21.755 [DEBUG] [Thread-17725] [transport.py] [_log()] kex follows: False
2026-04-15T11:00:21.755 [DEBUG] [Thread-17725] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:00:21.756 [DEBUG] [Thread-17725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:00:21.756 [DEBUG] [Thread-17725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:00:21.756 [DEBUG] [Thread-17725] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:00:21.756 [DEBUG] [Thread-17725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:00:21.756 [DEBUG] [Thread-17725] [transport.py] [_log()] Compression: none
2026-04-15T11:00:21.756 [DEBUG] [Thread-17725] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:00:21.773 [DEBUG] [Thread-17725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:00:21.773 [DEBUG] [Thread-17725] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:00:21.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:00:21.774 [DEBUG] [Thread-17725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:00:21.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:00:21.816 [DEBUG] [Thread-17725] [transport.py] [_log()] userauth is OK
2026-04-15T11:00:21.816 [DEBUG] [Thread-17725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:00:21.816 [DEBUG] [Thread-17725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:00:21.817 [DEBUG] [Thread-17725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:00:21.817 [DEBUG] [Thread-17725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:00:21.853 [INFO] [Thread-17725] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:00:21.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:00:24.061 [DEBUG] [Thread-17725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:00:24.061 [DEBUG] [Thread-17725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:00:24.062 [DEBUG] [Thread-17725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:00:24.102 [DEBUG] [Thread-17725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:00:24.102 [DEBUG] [Thread-17725] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:00:24.105 [DEBUG] [Thread-17725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:00:24.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:00:24.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:00:24.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:00:24.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:00:24.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:00:24.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:00:24.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:00:24.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:00:24.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:00:24.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.375129 -999.00  +11.50  16.65     82   +8.60 1 3 1 2 1   888    0 3.68 41.89 ----- 17.3 16.6 282.8 20.0 17.2 -11.7 16.6 -9.6 15.8 -7.5 16.4 -8.9
2026-04-15T11:00:24.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:00:24.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:00:24.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.375129
2026-04-15T11:00:24.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:00:24.137 [DEBUG] [Thread-17725] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:00:24.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:00:24.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:00:24.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:00:24.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:00:24.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T10:59:55', tmtdew=1.85105, humidity=88.7844, cloud=0.0, wind=14.3636, temperature=11.4259, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:00:11.146', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:00:24.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:00:24.398 [DEBUG] [Thread-17728] [transport.py] [_log()] starting thread (client mode): 0xf13ee920
2026-04-15T11:00:24.398 [DEBUG] [Thread-17728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:00:24.412 [DEBUG] [Thread-17728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:00:24.412 [INFO] [Thread-17728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:00:24.420 [DEBUG] [Thread-17728] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:00:24.420 [DEBUG] [Thread-17728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:00:24.420 [DEBUG] [Thread-17728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:00:24.420 [DEBUG] [Thread-17728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:00:24.420 [DEBUG] [Thread-17728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:00:24.420 [DEBUG] [Thread-17728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:00:24.420 [DEBUG] [Thread-17728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:00:24.420 [DEBUG] [Thread-17728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:00:24.420 [DEBUG] [Thread-17728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:00:24.421 [DEBUG] [Thread-17728] [transport.py] [_log()] client lang: <none>
2026-04-15T11:00:24.421 [DEBUG] [Thread-17728] [transport.py] [_log()] server lang: <none>
2026-04-15T11:00:24.421 [DEBUG] [Thread-17728] [transport.py] [_log()] kex follows: False
2026-04-15T11:00:24.421 [DEBUG] [Thread-17728] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:00:24.421 [DEBUG] [Thread-17728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:00:24.421 [DEBUG] [Thread-17728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:00:24.421 [DEBUG] [Thread-17728] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:00:24.421 [DEBUG] [Thread-17728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:00:24.421 [DEBUG] [Thread-17728] [transport.py] [_log()] Compression: none
2026-04-15T11:00:24.421 [DEBUG] [Thread-17728] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:00:24.478 [DEBUG] [Thread-17728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:00:24.479 [DEBUG] [Thread-17728] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:00:24.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:00:24.479 [DEBUG] [Thread-17728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:00:24.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:00:24.535 [DEBUG] [Thread-17728] [transport.py] [_log()] userauth is OK
2026-04-15T11:00:24.536 [DEBUG] [Thread-17728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:00:24.536 [DEBUG] [Thread-17728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:00:24.536 [DEBUG] [Thread-17728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:00:24.536 [DEBUG] [Thread-17728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:00:24.557 [INFO] [Thread-17728] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:00:24.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:00:24.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:00:24.898 [DEBUG] [Thread-17730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:00:25.385 [DEBUG] [Thread-17728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:00:25.386 [DEBUG] [Thread-17728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:00:25.434 [DEBUG] [Thread-17728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:00:25.434 [DEBUG] [Thread-17728] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:00:25.443 [DEBUG] [Thread-17728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:00:25.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:00:25.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')
2026-04-15T11:00:25.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
2026-04-15T11:00:25.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:00:25.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:00:25.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:00:25.478 [DEBUG] [Thread-17728] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:00:34.014 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:00:34.014 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:00:39.942 [DEBUG] [Thread-17731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:00:54.974 [DEBUG] [Thread-17732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:00:55.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:00:55.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:00:55.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:00:56.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 0, 31), 1.902, 88.5191, 0.0, 15.5984, 11.4591, 1, 1, 0, 2, 0, 0),)
2026-04-15T11:00:56.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:00:31
2026-04-15T11:00:57.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:00:57.648 [DEBUG] [Thread-17733] [transport.py] [_log()] starting thread (client mode): 0xf13ca620
2026-04-15T11:00:57.649 [DEBUG] [Thread-17733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:00:57.665 [DEBUG] [Thread-17733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:00:57.666 [INFO] [Thread-17733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:00:57.669 [DEBUG] [Thread-17733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:00:57.669 [DEBUG] [Thread-17733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:00:57.669 [DEBUG] [Thread-17733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:00:57.669 [DEBUG] [Thread-17733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:00:57.669 [DEBUG] [Thread-17733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:00:57.669 [DEBUG] [Thread-17733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:00:57.669 [DEBUG] [Thread-17733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:00:57.669 [DEBUG] [Thread-17733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:00:57.669 [DEBUG] [Thread-17733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:00:57.669 [DEBUG] [Thread-17733] [transport.py] [_log()] client lang: <none>
2026-04-15T11:00:57.670 [DEBUG] [Thread-17733] [transport.py] [_log()] server lang: <none>
2026-04-15T11:00:57.670 [DEBUG] [Thread-17733] [transport.py] [_log()] kex follows: False
2026-04-15T11:00:57.670 [DEBUG] [Thread-17733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:00:57.670 [DEBUG] [Thread-17733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:00:57.670 [DEBUG] [Thread-17733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:00:57.670 [DEBUG] [Thread-17733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:00:57.670 [DEBUG] [Thread-17733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:00:57.670 [DEBUG] [Thread-17733] [transport.py] [_log()] Compression: none
2026-04-15T11:00:57.670 [DEBUG] [Thread-17733] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:00:57.687 [DEBUG] [Thread-17733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:00:57.688 [DEBUG] [Thread-17733] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:00:57.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:00:57.688 [DEBUG] [Thread-17733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:00:57.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:00:57.689 [DEBUG] [Thread-17733] [transport.py] [_log()] userauth is OK
2026-04-15T11:00:57.689 [DEBUG] [Thread-17733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:00:57.690 [DEBUG] [Thread-17733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:00:57.690 [DEBUG] [Thread-17733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:00:57.690 [DEBUG] [Thread-17733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:00:57.708 [INFO] [Thread-17733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:00:57.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:00:58.285 [DEBUG] [Thread-17733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:00:58.285 [DEBUG] [Thread-17733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:00:58.286 [DEBUG] [Thread-17733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:00:58.326 [DEBUG] [Thread-17733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:00:58.326 [DEBUG] [Thread-17733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:00:58.330 [DEBUG] [Thread-17733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:00:58.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:00:58.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:00:58.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:00:58.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:00:58.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:00:58.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:00:58.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:00:58.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:00:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:00:58.346 [DEBUG] [Thread-17733] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:00:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.375476 -999.00  +11.40  15.28     82   +8.40 1 3 1 2 1   888    0 3.72 44.80 ----- 15.3 15.3 271.4 21.5 17.4 -12.8 16.8 -10.4 15.8 -8.0 16.5 -9.3
2026-04-15T11:00:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:00:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:00:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.375476
2026-04-15T11:00:58.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:00:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:00:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:00:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:00:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:00:58.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:00:31', tmtdew=1.902, humidity=88.5191, cloud=0.0, wind=15.5984, temperature=11.4591, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:00:41.126', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:00:58.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:00:58.612 [DEBUG] [Thread-17736] [transport.py] [_log()] starting thread (client mode): 0xf13ec700
2026-04-15T11:00:58.613 [DEBUG] [Thread-17736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:00:58.630 [DEBUG] [Thread-17736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:00:58.630 [INFO] [Thread-17736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:00:58.637 [DEBUG] [Thread-17736] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:00:58.637 [DEBUG] [Thread-17736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:00:58.637 [DEBUG] [Thread-17736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:00:58.638 [DEBUG] [Thread-17736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:00:58.638 [DEBUG] [Thread-17736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:00:58.638 [DEBUG] [Thread-17736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:00:58.638 [DEBUG] [Thread-17736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:00:58.638 [DEBUG] [Thread-17736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:00:58.638 [DEBUG] [Thread-17736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:00:58.638 [DEBUG] [Thread-17736] [transport.py] [_log()] client lang: <none>
2026-04-15T11:00:58.638 [DEBUG] [Thread-17736] [transport.py] [_log()] server lang: <none>
2026-04-15T11:00:58.638 [DEBUG] [Thread-17736] [transport.py] [_log()] kex follows: False
2026-04-15T11:00:58.638 [DEBUG] [Thread-17736] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:00:58.638 [DEBUG] [Thread-17736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:00:58.638 [DEBUG] [Thread-17736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:00:58.639 [DEBUG] [Thread-17736] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:00:58.639 [DEBUG] [Thread-17736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:00:58.639 [DEBUG] [Thread-17736] [transport.py] [_log()] Compression: none
2026-04-15T11:00:58.639 [DEBUG] [Thread-17736] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:00:58.696 [DEBUG] [Thread-17736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:00:58.696 [DEBUG] [Thread-17736] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:00:58.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:00:58.697 [DEBUG] [Thread-17736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:00:58.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:00:58.752 [DEBUG] [Thread-17736] [transport.py] [_log()] userauth is OK
2026-04-15T11:00:58.753 [DEBUG] [Thread-17736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:00:58.753 [DEBUG] [Thread-17736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:00:58.753 [DEBUG] [Thread-17736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:00:58.753 [DEBUG] [Thread-17736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:00:58.772 [INFO] [Thread-17736] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:00:58.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:00:58.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:00:59.640 [DEBUG] [Thread-17736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:00:59.641 [DEBUG] [Thread-17736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:00:59.688 [DEBUG] [Thread-17736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:00:59.688 [DEBUG] [Thread-17736] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:00:59.697 [DEBUG] [Thread-17736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:00:59.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:00:59.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')
2026-04-15T11:00:59.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') -> 00000000
2026-04-15T11:00:59.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:00:59.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:00:59.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:00:59.736 [DEBUG] [Thread-17736] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:01:05.823 [DEBUG] [Thread-17738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:01:10.006 [DEBUG] [Thread-17739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:01:25.051 [DEBUG] [Thread-17740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:01:29.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:01:29.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:01:29.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
2026-04-15T11:01:31.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 1, 7), 1.83823, 88.8837, 0.0, 12.6526, 11.6414, 1, 1, 0, 2, 0, 0),)
2026-04-15T11:01:31.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:01:07
2026-04-15T11:01:31.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:01:31.975 [DEBUG] [Thread-17741] [transport.py] [_log()] starting thread (client mode): 0xf1364fd0
2026-04-15T11:01:31.976 [DEBUG] [Thread-17741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:01:31.995 [DEBUG] [Thread-17741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:01:31.995 [INFO] [Thread-17741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:01:31.996 [DEBUG] [Thread-17741] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:01:31.996 [DEBUG] [Thread-17741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:01:31.996 [DEBUG] [Thread-17741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:01:31.996 [DEBUG] [Thread-17741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:01:31.997 [DEBUG] [Thread-17741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:01:31.997 [DEBUG] [Thread-17741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:01:31.997 [DEBUG] [Thread-17741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:01:31.997 [DEBUG] [Thread-17741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:01:31.997 [DEBUG] [Thread-17741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:01:31.997 [DEBUG] [Thread-17741] [transport.py] [_log()] client lang: <none>
2026-04-15T11:01:31.997 [DEBUG] [Thread-17741] [transport.py] [_log()] server lang: <none>
2026-04-15T11:01:31.997 [DEBUG] [Thread-17741] [transport.py] [_log()] kex follows: False
2026-04-15T11:01:31.997 [DEBUG] [Thread-17741] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:01:31.997 [DEBUG] [Thread-17741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:01:31.998 [DEBUG] [Thread-17741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:01:31.998 [DEBUG] [Thread-17741] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:01:31.998 [DEBUG] [Thread-17741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:01:31.998 [DEBUG] [Thread-17741] [transport.py] [_log()] Compression: none
2026-04-15T11:01:31.998 [DEBUG] [Thread-17741] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:01:32.007 [DEBUG] [Thread-17741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:01:32.007 [DEBUG] [Thread-17741] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:01:32.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:01:32.008 [DEBUG] [Thread-17741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:01:32.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:01:32.009 [DEBUG] [Thread-17741] [transport.py] [_log()] userauth is OK
2026-04-15T11:01:32.009 [DEBUG] [Thread-17741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:01:32.009 [DEBUG] [Thread-17741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:01:32.009 [DEBUG] [Thread-17741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:01:32.009 [DEBUG] [Thread-17741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:01:32.027 [INFO] [Thread-17741] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:01:32.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:01:32.739 [DEBUG] [Thread-17741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:01:32.740 [DEBUG] [Thread-17741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:01:32.740 [DEBUG] [Thread-17741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:01:32.780 [DEBUG] [Thread-17741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:01:32.780 [DEBUG] [Thread-17741] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:01:32.783 [DEBUG] [Thread-17741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:01:32.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:01:32.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:01:32.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:01:32.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:01:32.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:01:32.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:01:32.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:01:32.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:01:32.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:01:32.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.375823 -999.00  +11.40  16.14     82   +8.50 1 3 1 2 1   888    0 3.96 50.35 ----- 18.9 16.1 283.0 21.8 17.6 -11.3 16.9 -10.1 15.9 -8.3 16.7 -10.1
2026-04-15T11:01:32.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:01:32.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:01:32.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.375823
2026-04-15T11:01:32.806 [DEBUG] [Thread-17741] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:01:32.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:01:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:01:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:01:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:01:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:01:32.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:01:07', tmtdew=1.83823, humidity=88.8837, cloud=0.0, wind=12.6526, temperature=11.6414, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:01:11.107', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:01:33.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:01:33.060 [DEBUG] [Thread-17744] [transport.py] [_log()] starting thread (client mode): 0xf13650f0
2026-04-15T11:01:33.060 [DEBUG] [Thread-17744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:01:33.074 [DEBUG] [Thread-17744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:01:33.074 [INFO] [Thread-17744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:01:33.081 [DEBUG] [Thread-17744] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:01:33.081 [DEBUG] [Thread-17744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:01:33.081 [DEBUG] [Thread-17744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:01:33.081 [DEBUG] [Thread-17744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:01:33.081 [DEBUG] [Thread-17744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:01:33.082 [DEBUG] [Thread-17744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:01:33.082 [DEBUG] [Thread-17744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:01:33.082 [DEBUG] [Thread-17744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:01:33.082 [DEBUG] [Thread-17744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:01:33.082 [DEBUG] [Thread-17744] [transport.py] [_log()] client lang: <none>
2026-04-15T11:01:33.082 [DEBUG] [Thread-17744] [transport.py] [_log()] server lang: <none>
2026-04-15T11:01:33.082 [DEBUG] [Thread-17744] [transport.py] [_log()] kex follows: False
2026-04-15T11:01:33.082 [DEBUG] [Thread-17744] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:01:33.082 [DEBUG] [Thread-17744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:01:33.082 [DEBUG] [Thread-17744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:01:33.082 [DEBUG] [Thread-17744] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:01:33.083 [DEBUG] [Thread-17744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:01:33.083 [DEBUG] [Thread-17744] [transport.py] [_log()] Compression: none
2026-04-15T11:01:33.083 [DEBUG] [Thread-17744] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:01:33.143 [DEBUG] [Thread-17744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:01:33.143 [DEBUG] [Thread-17744] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:01:33.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:01:33.144 [DEBUG] [Thread-17744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:01:33.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:01:33.210 [DEBUG] [Thread-17744] [transport.py] [_log()] userauth is OK
2026-04-15T11:01:33.211 [DEBUG] [Thread-17744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:01:33.211 [DEBUG] [Thread-17744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:01:33.211 [DEBUG] [Thread-17744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:01:33.211 [DEBUG] [Thread-17744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:01:33.238 [INFO] [Thread-17744] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:01:33.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:01:33.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:01:34.074 [DEBUG] [Thread-17744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:01:34.074 [DEBUG] [Thread-17744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:01:34.121 [DEBUG] [Thread-17744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:01:34.121 [DEBUG] [Thread-17744] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:01:34.130 [DEBUG] [Thread-17744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:01:34.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:01:34.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')
2026-04-15T11:01:34.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') -> 00000000
2026-04-15T11:01:34.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:01:34.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:01:34.154 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:01:34.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:01:34.155 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:01:34.162 [DEBUG] [Thread-17744] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:01:40.083 [DEBUG] [Thread-17746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:01:55.131 [DEBUG] [Thread-17747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:02:04.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:02:04.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:02:04.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
2026-04-15T11:02:05.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 1, 42), 3.60507, 78.6348, 0.0, 10.0231, 12.7155, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:02:05.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:01:42
2026-04-15T11:02:05.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:02:05.936 [DEBUG] [Thread-17748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:02:06.272 [DEBUG] [Thread-17749] [transport.py] [_log()] starting thread (client mode): 0xf13668c0
2026-04-15T11:02:06.272 [DEBUG] [Thread-17749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:02:06.291 [DEBUG] [Thread-17749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:02:06.291 [INFO] [Thread-17749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:02:06.294 [DEBUG] [Thread-17749] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:02:06.294 [DEBUG] [Thread-17749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:02:06.294 [DEBUG] [Thread-17749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:02:06.294 [DEBUG] [Thread-17749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:02:06.294 [DEBUG] [Thread-17749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:02:06.294 [DEBUG] [Thread-17749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:02:06.294 [DEBUG] [Thread-17749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:02:06.294 [DEBUG] [Thread-17749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:02:06.294 [DEBUG] [Thread-17749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:02:06.294 [DEBUG] [Thread-17749] [transport.py] [_log()] client lang: <none>
2026-04-15T11:02:06.294 [DEBUG] [Thread-17749] [transport.py] [_log()] server lang: <none>
2026-04-15T11:02:06.295 [DEBUG] [Thread-17749] [transport.py] [_log()] kex follows: False
2026-04-15T11:02:06.295 [DEBUG] [Thread-17749] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:02:06.295 [DEBUG] [Thread-17749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:02:06.295 [DEBUG] [Thread-17749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:02:06.295 [DEBUG] [Thread-17749] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:02:06.295 [DEBUG] [Thread-17749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:02:06.295 [DEBUG] [Thread-17749] [transport.py] [_log()] Compression: none
2026-04-15T11:02:06.295 [DEBUG] [Thread-17749] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:02:06.310 [DEBUG] [Thread-17749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:02:06.310 [DEBUG] [Thread-17749] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:02:06.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:02:06.311 [DEBUG] [Thread-17749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:02:06.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:02:06.312 [DEBUG] [Thread-17749] [transport.py] [_log()] userauth is OK
2026-04-15T11:02:06.312 [DEBUG] [Thread-17749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:02:06.312 [DEBUG] [Thread-17749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:02:06.312 [DEBUG] [Thread-17749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:02:06.312 [DEBUG] [Thread-17749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:02:06.325 [INFO] [Thread-17749] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:02:06.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:02:06.916 [DEBUG] [Thread-17749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:02:06.917 [DEBUG] [Thread-17749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:02:06.917 [DEBUG] [Thread-17749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:02:06.957 [DEBUG] [Thread-17749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:02:06.957 [DEBUG] [Thread-17749] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:02:06.961 [DEBUG] [Thread-17749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:02:06.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:02:06.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:02:06.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:02:06.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:02:06.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:02:06.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:02:06.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:02:06.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:02:06.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:02:06.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.376170 -999.00  +11.50  13.95     83   +8.80 1 3 1 2 1   888    0 4.01 51.88 ----- 13.2 13.9 280.6 19.7 17.8 -12.4 17.0 -10.7 16.0 -8.4 16.9 -9.1
2026-04-15T11:02:06.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:02:06.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:02:06.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.376170
2026-04-15T11:02:06.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:02:06.985 [DEBUG] [Thread-17749] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:02:06.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:02:06.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:02:06.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:02:06.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:02:06.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:01:42', tmtdew=3.60507, humidity=78.6348, cloud=0.0, wind=10.0231, temperature=12.7155, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:01:41.088', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:02:07.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:02:07.248 [DEBUG] [Thread-17752] [transport.py] [_log()] starting thread (client mode): 0xf1335cc0
2026-04-15T11:02:07.248 [DEBUG] [Thread-17752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:02:07.262 [DEBUG] [Thread-17752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:02:07.262 [INFO] [Thread-17752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:02:07.269 [DEBUG] [Thread-17752] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:02:07.270 [DEBUG] [Thread-17752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:02:07.270 [DEBUG] [Thread-17752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:02:07.270 [DEBUG] [Thread-17752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:02:07.270 [DEBUG] [Thread-17752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:02:07.270 [DEBUG] [Thread-17752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:02:07.270 [DEBUG] [Thread-17752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:02:07.270 [DEBUG] [Thread-17752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:02:07.270 [DEBUG] [Thread-17752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:02:07.270 [DEBUG] [Thread-17752] [transport.py] [_log()] client lang: <none>
2026-04-15T11:02:07.270 [DEBUG] [Thread-17752] [transport.py] [_log()] server lang: <none>
2026-04-15T11:02:07.271 [DEBUG] [Thread-17752] [transport.py] [_log()] kex follows: False
2026-04-15T11:02:07.271 [DEBUG] [Thread-17752] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:02:07.271 [DEBUG] [Thread-17752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:02:07.271 [DEBUG] [Thread-17752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:02:07.271 [DEBUG] [Thread-17752] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:02:07.271 [DEBUG] [Thread-17752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:02:07.271 [DEBUG] [Thread-17752] [transport.py] [_log()] Compression: none
2026-04-15T11:02:07.271 [DEBUG] [Thread-17752] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:02:07.326 [DEBUG] [Thread-17752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:02:07.327 [DEBUG] [Thread-17752] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:02:07.327 [DEBUG] [Thread-17752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:02:07.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:02:07.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:02:07.383 [DEBUG] [Thread-17752] [transport.py] [_log()] userauth is OK
2026-04-15T11:02:07.383 [DEBUG] [Thread-17752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:02:07.383 [DEBUG] [Thread-17752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:02:07.384 [DEBUG] [Thread-17752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:02:07.384 [DEBUG] [Thread-17752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:02:07.408 [INFO] [Thread-17752] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:02:07.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:02:07.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:02:08.223 [DEBUG] [Thread-17752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:02:08.224 [DEBUG] [Thread-17752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:02:08.273 [DEBUG] [Thread-17752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:02:08.273 [DEBUG] [Thread-17752] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:02:08.285 [DEBUG] [Thread-17752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:02:08.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:02:08.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')
2026-04-15T11:02:08.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') -> 00000000
2026-04-15T11:02:08.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:02:08.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:02:08.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:02:08.320 [DEBUG] [Thread-17752] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:02:10.162 [DEBUG] [Thread-17754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:02:25.207 [DEBUG] [Thread-17755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:02:34.295 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:02:34.296 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:02:38.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:02:38.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:02:38.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
2026-04-15T11:02:39.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 2, 17), 1.94948, 88.3364, 0.0, 17.0978, 12.0566, 1, 1, 0, 2, 0, 0),)
2026-04-15T11:02:39.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:02:17
2026-04-15T11:02:40.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:02:40.237 [DEBUG] [Thread-17756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:02:40.460 [DEBUG] [Thread-17757] [transport.py] [_log()] starting thread (client mode): 0xf13354b0
2026-04-15T11:02:40.460 [DEBUG] [Thread-17757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:02:40.480 [DEBUG] [Thread-17757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:02:40.480 [INFO] [Thread-17757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:02:40.481 [DEBUG] [Thread-17757] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:02:40.481 [DEBUG] [Thread-17757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:02:40.481 [DEBUG] [Thread-17757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:02:40.481 [DEBUG] [Thread-17757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:02:40.482 [DEBUG] [Thread-17757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:02:40.482 [DEBUG] [Thread-17757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:02:40.482 [DEBUG] [Thread-17757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:02:40.482 [DEBUG] [Thread-17757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:02:40.482 [DEBUG] [Thread-17757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:02:40.482 [DEBUG] [Thread-17757] [transport.py] [_log()] client lang: <none>
2026-04-15T11:02:40.482 [DEBUG] [Thread-17757] [transport.py] [_log()] server lang: <none>
2026-04-15T11:02:40.482 [DEBUG] [Thread-17757] [transport.py] [_log()] kex follows: False
2026-04-15T11:02:40.482 [DEBUG] [Thread-17757] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:02:40.482 [DEBUG] [Thread-17757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:02:40.482 [DEBUG] [Thread-17757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:02:40.483 [DEBUG] [Thread-17757] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:02:40.483 [DEBUG] [Thread-17757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:02:40.483 [DEBUG] [Thread-17757] [transport.py] [_log()] Compression: none
2026-04-15T11:02:40.483 [DEBUG] [Thread-17757] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:02:40.492 [DEBUG] [Thread-17757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:02:40.492 [DEBUG] [Thread-17757] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:02:40.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:02:40.493 [DEBUG] [Thread-17757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:02:40.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:02:40.494 [DEBUG] [Thread-17757] [transport.py] [_log()] userauth is OK
2026-04-15T11:02:40.494 [DEBUG] [Thread-17757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:02:40.494 [DEBUG] [Thread-17757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:02:40.494 [DEBUG] [Thread-17757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:02:40.494 [DEBUG] [Thread-17757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:02:40.517 [INFO] [Thread-17757] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:02:40.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:02:41.081 [DEBUG] [Thread-17757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:02:41.082 [DEBUG] [Thread-17757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:02:41.082 [DEBUG] [Thread-17757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:02:41.122 [DEBUG] [Thread-17757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:02:41.122 [DEBUG] [Thread-17757] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:02:41.125 [DEBUG] [Thread-17757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:02:41.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:02:41.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:02:41.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:02:41.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:02:41.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:02:41.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:02:41.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:02:41.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:02:41.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:02:41.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.376517 -999.00  +11.80  10.68     83   +9.20 1 2 1 2 1   888    0 3.99 49.61 ----- 18.0 10.7 291.6 15.5 17.7 -16.8 17.0 -13.5 16.0 -10.8 17.0 -9.7
2026-04-15T11:02:41.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:02:41.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:02:41.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.376517
2026-04-15T11:02:41.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:02:41.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:02:41.149 [DEBUG] [Thread-17757] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:02:41.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:02:41.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:02:41.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:02:41.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:02:17', tmtdew=1.94948, humidity=88.3364, cloud=0.0, wind=17.0978, temperature=12.0566, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:02:11.069', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:02:41.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:02:41.402 [DEBUG] [Thread-17760] [transport.py] [_log()] starting thread (client mode): 0xf1334580
2026-04-15T11:02:41.402 [DEBUG] [Thread-17760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:02:41.417 [DEBUG] [Thread-17760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:02:41.417 [INFO] [Thread-17760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:02:41.424 [DEBUG] [Thread-17760] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:02:41.424 [DEBUG] [Thread-17760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:02:41.424 [DEBUG] [Thread-17760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:02:41.424 [DEBUG] [Thread-17760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:02:41.424 [DEBUG] [Thread-17760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:02:41.425 [DEBUG] [Thread-17760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:02:41.425 [DEBUG] [Thread-17760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:02:41.425 [DEBUG] [Thread-17760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:02:41.425 [DEBUG] [Thread-17760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:02:41.425 [DEBUG] [Thread-17760] [transport.py] [_log()] client lang: <none>
2026-04-15T11:02:41.425 [DEBUG] [Thread-17760] [transport.py] [_log()] server lang: <none>
2026-04-15T11:02:41.425 [DEBUG] [Thread-17760] [transport.py] [_log()] kex follows: False
2026-04-15T11:02:41.425 [DEBUG] [Thread-17760] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:02:41.425 [DEBUG] [Thread-17760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:02:41.425 [DEBUG] [Thread-17760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:02:41.425 [DEBUG] [Thread-17760] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:02:41.425 [DEBUG] [Thread-17760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:02:41.425 [DEBUG] [Thread-17760] [transport.py] [_log()] Compression: none
2026-04-15T11:02:41.425 [DEBUG] [Thread-17760] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:02:41.489 [DEBUG] [Thread-17760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:02:41.490 [DEBUG] [Thread-17760] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:02:41.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:02:41.490 [DEBUG] [Thread-17760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:02:41.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:02:41.548 [DEBUG] [Thread-17760] [transport.py] [_log()] userauth is OK
2026-04-15T11:02:41.548 [DEBUG] [Thread-17760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:02:41.549 [DEBUG] [Thread-17760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:02:41.549 [DEBUG] [Thread-17760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:02:41.549 [DEBUG] [Thread-17760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:02:41.576 [INFO] [Thread-17760] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:02:41.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:02:41.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:02:42.382 [DEBUG] [Thread-17760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:02:42.382 [DEBUG] [Thread-17760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:02:42.430 [DEBUG] [Thread-17760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:02:42.430 [DEBUG] [Thread-17760] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:02:42.439 [DEBUG] [Thread-17760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:02:42.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:02:42.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')
2026-04-15T11:02:42.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
2026-04-15T11:02:42.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:02:42.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:02:42.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:02:42.474 [DEBUG] [Thread-17760] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:02:55.266 [DEBUG] [Thread-17762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:03:06.058 [DEBUG] [Thread-17763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:03:10.306 [DEBUG] [Thread-17764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:03:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:03:12.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:03:12.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
2026-04-15T11:03:13.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 2, 52), 3.91208, 77.1089, 0.0, 18.6667, 13.2791, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:03:13.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:02:52
2026-04-15T11:03:14.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:03:14.580 [DEBUG] [Thread-17765] [transport.py] [_log()] starting thread (client mode): 0xee98e4d0
2026-04-15T11:03:14.580 [DEBUG] [Thread-17765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:03:14.600 [DEBUG] [Thread-17765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:03:14.600 [INFO] [Thread-17765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:03:14.603 [DEBUG] [Thread-17765] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:03:14.603 [DEBUG] [Thread-17765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:03:14.603 [DEBUG] [Thread-17765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:03:14.603 [DEBUG] [Thread-17765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:03:14.604 [DEBUG] [Thread-17765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:03:14.604 [DEBUG] [Thread-17765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:03:14.604 [DEBUG] [Thread-17765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:03:14.604 [DEBUG] [Thread-17765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:03:14.604 [DEBUG] [Thread-17765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:03:14.604 [DEBUG] [Thread-17765] [transport.py] [_log()] client lang: <none>
2026-04-15T11:03:14.604 [DEBUG] [Thread-17765] [transport.py] [_log()] server lang: <none>
2026-04-15T11:03:14.604 [DEBUG] [Thread-17765] [transport.py] [_log()] kex follows: False
2026-04-15T11:03:14.604 [DEBUG] [Thread-17765] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:03:14.604 [DEBUG] [Thread-17765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:03:14.604 [DEBUG] [Thread-17765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:03:14.604 [DEBUG] [Thread-17765] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:03:14.604 [DEBUG] [Thread-17765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:03:14.605 [DEBUG] [Thread-17765] [transport.py] [_log()] Compression: none
2026-04-15T11:03:14.605 [DEBUG] [Thread-17765] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:03:14.623 [DEBUG] [Thread-17765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:03:14.623 [DEBUG] [Thread-17765] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:03:14.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:03:14.624 [DEBUG] [Thread-17765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:03:14.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:03:14.625 [DEBUG] [Thread-17765] [transport.py] [_log()] userauth is OK
2026-04-15T11:03:14.625 [DEBUG] [Thread-17765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:03:14.625 [DEBUG] [Thread-17765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:03:14.625 [DEBUG] [Thread-17765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:03:14.625 [DEBUG] [Thread-17765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:03:14.644 [INFO] [Thread-17765] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:03:14.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:03:15.243 [DEBUG] [Thread-17765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:03:15.243 [DEBUG] [Thread-17765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:03:15.244 [DEBUG] [Thread-17765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:03:15.284 [DEBUG] [Thread-17765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:03:15.284 [DEBUG] [Thread-17765] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:03:15.287 [DEBUG] [Thread-17765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:03:15.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:03:15.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:03:15.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:03:15.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:03:15.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:03:15.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:03:15.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:03:15.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:03:15.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:03:15.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.377212 -999.00  +11.40  16.07     82   +8.40 1 2 1 2 1   888    0 3.97 46.73 ----- 15.3 16.1 295.6 27.4 17.4 -15.9 16.7 -14.5 15.7 -12.9 16.6 -14.2
2026-04-15T11:03:15.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:03:15.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:03:15.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.377212
2026-04-15T11:03:15.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:03:15.305 [DEBUG] [Thread-17765] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:03:15.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:03:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:03:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:03:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:03:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:02:52', tmtdew=3.91208, humidity=77.1089, cloud=0.0, wind=18.6667, temperature=13.2791, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:03:11.117', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:03:15.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:03:15.561 [DEBUG] [Thread-17768] [transport.py] [_log()] starting thread (client mode): 0xee98e650
2026-04-15T11:03:15.562 [DEBUG] [Thread-17768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:03:15.576 [DEBUG] [Thread-17768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:03:15.576 [INFO] [Thread-17768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:03:15.583 [DEBUG] [Thread-17768] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:03:15.583 [DEBUG] [Thread-17768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:03:15.583 [DEBUG] [Thread-17768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:03:15.583 [DEBUG] [Thread-17768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:03:15.584 [DEBUG] [Thread-17768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:03:15.584 [DEBUG] [Thread-17768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:03:15.584 [DEBUG] [Thread-17768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:03:15.584 [DEBUG] [Thread-17768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:03:15.584 [DEBUG] [Thread-17768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:03:15.584 [DEBUG] [Thread-17768] [transport.py] [_log()] client lang: <none>
2026-04-15T11:03:15.584 [DEBUG] [Thread-17768] [transport.py] [_log()] server lang: <none>
2026-04-15T11:03:15.584 [DEBUG] [Thread-17768] [transport.py] [_log()] kex follows: False
2026-04-15T11:03:15.584 [DEBUG] [Thread-17768] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:03:15.584 [DEBUG] [Thread-17768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:03:15.584 [DEBUG] [Thread-17768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:03:15.584 [DEBUG] [Thread-17768] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:03:15.584 [DEBUG] [Thread-17768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:03:15.584 [DEBUG] [Thread-17768] [transport.py] [_log()] Compression: none
2026-04-15T11:03:15.584 [DEBUG] [Thread-17768] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:03:15.639 [DEBUG] [Thread-17768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:03:15.639 [DEBUG] [Thread-17768] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:03:15.640 [DEBUG] [Thread-17768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:03:15.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:03:15.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:03:15.697 [DEBUG] [Thread-17768] [transport.py] [_log()] userauth is OK
2026-04-15T11:03:15.697 [DEBUG] [Thread-17768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:03:15.697 [DEBUG] [Thread-17768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:03:15.697 [DEBUG] [Thread-17768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:03:15.697 [DEBUG] [Thread-17768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:03:15.719 [INFO] [Thread-17768] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:03:15.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:03:15.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:03:16.558 [DEBUG] [Thread-17768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:03:16.558 [DEBUG] [Thread-17768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:03:16.606 [DEBUG] [Thread-17768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:03:16.606 [DEBUG] [Thread-17768] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:03:16.615 [DEBUG] [Thread-17768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:03:16.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:03:16.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')
2026-04-15T11:03:16.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
2026-04-15T11:03:16.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:03:16.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:03:16.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:03:16.649 [DEBUG] [Thread-17768] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:03:25.335 [DEBUG] [Thread-17770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:03:34.437 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:03:34.438 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:03:40.384 [DEBUG] [Thread-17771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:03:46.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:03:46.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:03:46.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
2026-04-15T11:03:47.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 3, 28), 2.33867, 86.5926, 0.0, 20.0974, 12.0902, 1, 1, 0, 2, 0, 0),)
2026-04-15T11:03:47.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:03:28
2026-04-15T11:03:48.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:03:48.832 [DEBUG] [Thread-17772] [transport.py] [_log()] starting thread (client mode): 0xee98eec0
2026-04-15T11:03:48.832 [DEBUG] [Thread-17772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:03:48.852 [DEBUG] [Thread-17772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:03:48.852 [INFO] [Thread-17772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:03:48.855 [DEBUG] [Thread-17772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:03:48.855 [DEBUG] [Thread-17772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:03:48.855 [DEBUG] [Thread-17772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:03:48.855 [DEBUG] [Thread-17772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:03:48.855 [DEBUG] [Thread-17772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:03:48.855 [DEBUG] [Thread-17772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:03:48.855 [DEBUG] [Thread-17772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:03:48.855 [DEBUG] [Thread-17772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:03:48.855 [DEBUG] [Thread-17772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:03:48.855 [DEBUG] [Thread-17772] [transport.py] [_log()] client lang: <none>
2026-04-15T11:03:48.855 [DEBUG] [Thread-17772] [transport.py] [_log()] server lang: <none>
2026-04-15T11:03:48.856 [DEBUG] [Thread-17772] [transport.py] [_log()] kex follows: False
2026-04-15T11:03:48.856 [DEBUG] [Thread-17772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:03:48.856 [DEBUG] [Thread-17772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:03:48.856 [DEBUG] [Thread-17772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:03:48.856 [DEBUG] [Thread-17772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:03:48.856 [DEBUG] [Thread-17772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:03:48.856 [DEBUG] [Thread-17772] [transport.py] [_log()] Compression: none
2026-04-15T11:03:48.856 [DEBUG] [Thread-17772] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:03:48.873 [DEBUG] [Thread-17772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:03:48.873 [DEBUG] [Thread-17772] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:03:48.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:03:48.874 [DEBUG] [Thread-17772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:03:48.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:03:48.875 [DEBUG] [Thread-17772] [transport.py] [_log()] userauth is OK
2026-04-15T11:03:48.875 [DEBUG] [Thread-17772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:03:48.875 [DEBUG] [Thread-17772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:03:48.875 [DEBUG] [Thread-17772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:03:48.875 [DEBUG] [Thread-17772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:03:48.893 [INFO] [Thread-17772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:03:48.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:03:49.471 [DEBUG] [Thread-17772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:03:49.472 [DEBUG] [Thread-17772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:03:49.472 [DEBUG] [Thread-17772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:03:49.512 [DEBUG] [Thread-17772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:03:49.512 [DEBUG] [Thread-17772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:03:49.516 [DEBUG] [Thread-17772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:03:49.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:03:49.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:03:49.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:03:49.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:03:49.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:03:49.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:03:49.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:03:49.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:03:49.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:03:49.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.377559 -999.00  +11.50  17.04     83   +8.70 1 2 1 2 1   888    0 3.89 45.27 ----- 13.9 17.0 287.0 21.1 17.1 -17.1 16.6 -14.7 15.6 -14.9 16.5 -13.9
2026-04-15T11:03:49.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:03:49.538 [DEBUG] [Thread-17772] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:03:49.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:03:49.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.377559
2026-04-15T11:03:49.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:03:49.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:03:49.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:03:49.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:03:49.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:03:49.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:03:28', tmtdew=2.33867, humidity=86.5926, cloud=0.0, wind=20.0974, temperature=12.0902, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:03:41.098', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:03:49.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:03:49.794 [DEBUG] [Thread-17775] [transport.py] [_log()] starting thread (client mode): 0xf1336c50
2026-04-15T11:03:49.794 [DEBUG] [Thread-17775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:03:49.808 [DEBUG] [Thread-17775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:03:49.808 [INFO] [Thread-17775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:03:49.815 [DEBUG] [Thread-17775] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:03:49.815 [DEBUG] [Thread-17775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:03:49.815 [DEBUG] [Thread-17775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:03:49.815 [DEBUG] [Thread-17775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:03:49.815 [DEBUG] [Thread-17775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:03:49.816 [DEBUG] [Thread-17775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:03:49.816 [DEBUG] [Thread-17775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:03:49.816 [DEBUG] [Thread-17775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:03:49.816 [DEBUG] [Thread-17775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:03:49.816 [DEBUG] [Thread-17775] [transport.py] [_log()] client lang: <none>
2026-04-15T11:03:49.816 [DEBUG] [Thread-17775] [transport.py] [_log()] server lang: <none>
2026-04-15T11:03:49.816 [DEBUG] [Thread-17775] [transport.py] [_log()] kex follows: False
2026-04-15T11:03:49.816 [DEBUG] [Thread-17775] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:03:49.816 [DEBUG] [Thread-17775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:03:49.816 [DEBUG] [Thread-17775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:03:49.816 [DEBUG] [Thread-17775] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:03:49.816 [DEBUG] [Thread-17775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:03:49.816 [DEBUG] [Thread-17775] [transport.py] [_log()] Compression: none
2026-04-15T11:03:49.816 [DEBUG] [Thread-17775] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:03:49.872 [DEBUG] [Thread-17775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:03:49.873 [DEBUG] [Thread-17775] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:03:49.873 [DEBUG] [Thread-17775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:03:49.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:03:49.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:03:49.935 [DEBUG] [Thread-17775] [transport.py] [_log()] userauth is OK
2026-04-15T11:03:49.936 [DEBUG] [Thread-17775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:03:49.936 [DEBUG] [Thread-17775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:03:49.936 [DEBUG] [Thread-17775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:03:49.936 [DEBUG] [Thread-17775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:03:49.959 [INFO] [Thread-17775] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:03:49.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:03:49.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:03:50.813 [DEBUG] [Thread-17775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:03:50.813 [DEBUG] [Thread-17775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:03:50.861 [DEBUG] [Thread-17775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:03:50.861 [DEBUG] [Thread-17775] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:03:50.871 [DEBUG] [Thread-17775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:03:50.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:03:50.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')
2026-04-15T11:03:50.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
2026-04-15T11:03:50.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:03:50.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:03:50.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:03:50.905 [DEBUG] [Thread-17775] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:03:55.416 [DEBUG] [Thread-17777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:04:06.170 [DEBUG] [Thread-17778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:04:10.461 [DEBUG] [Thread-17779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:04:20.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:04:20.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:04:20.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
2026-04-15T11:04:22.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 4, 4), 2.34195, 86.5594, 0.0, 20.5031, 11.9907, 1, 1, 0, 2, 0, 0),)
2026-04-15T11:04:22.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:04:04
2026-04-15T11:04:22.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:04:22.984 [DEBUG] [Thread-17780] [transport.py] [_log()] starting thread (client mode): 0xf1365c00
2026-04-15T11:04:22.984 [DEBUG] [Thread-17780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:04:22.998 [DEBUG] [Thread-17780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:04:22.998 [INFO] [Thread-17780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:04:23.001 [DEBUG] [Thread-17780] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:04:23.002 [DEBUG] [Thread-17780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:04:23.002 [DEBUG] [Thread-17780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:04:23.002 [DEBUG] [Thread-17780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:04:23.002 [DEBUG] [Thread-17780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:04:23.002 [DEBUG] [Thread-17780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:04:23.002 [DEBUG] [Thread-17780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:04:23.002 [DEBUG] [Thread-17780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:04:23.002 [DEBUG] [Thread-17780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:04:23.002 [DEBUG] [Thread-17780] [transport.py] [_log()] client lang: <none>
2026-04-15T11:04:23.002 [DEBUG] [Thread-17780] [transport.py] [_log()] server lang: <none>
2026-04-15T11:04:23.002 [DEBUG] [Thread-17780] [transport.py] [_log()] kex follows: False
2026-04-15T11:04:23.003 [DEBUG] [Thread-17780] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:04:23.003 [DEBUG] [Thread-17780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:04:23.003 [DEBUG] [Thread-17780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:04:23.003 [DEBUG] [Thread-17780] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:04:23.003 [DEBUG] [Thread-17780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:04:23.003 [DEBUG] [Thread-17780] [transport.py] [_log()] Compression: none
2026-04-15T11:04:23.003 [DEBUG] [Thread-17780] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:04:23.020 [DEBUG] [Thread-17780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:04:23.020 [DEBUG] [Thread-17780] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:04:23.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:04:23.021 [DEBUG] [Thread-17780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:04:23.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:04:23.021 [DEBUG] [Thread-17780] [transport.py] [_log()] userauth is OK
2026-04-15T11:04:23.022 [DEBUG] [Thread-17780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:04:23.022 [DEBUG] [Thread-17780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:04:23.022 [DEBUG] [Thread-17780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:04:23.022 [DEBUG] [Thread-17780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:04:23.045 [INFO] [Thread-17780] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:04:23.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:04:23.679 [DEBUG] [Thread-17780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:04:23.679 [DEBUG] [Thread-17780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:04:23.680 [DEBUG] [Thread-17780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:04:23.720 [DEBUG] [Thread-17780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:04:23.720 [DEBUG] [Thread-17780] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:04:23.723 [DEBUG] [Thread-17780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:04:23.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:04:23.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:04:23.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:04:23.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:04:23.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:04:23.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:04:23.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:04:23.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:04:23.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:04:23.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.377906 -999.00  +11.40  20.62     83   +8.70 1 2 1 2 1   888    0 4.04 49.76 ----- 19.0 20.6 299.2 24.6 17.1 -16.7 16.5 -14.9 15.6 -13.7 16.4 -14.7
2026-04-15T11:04:23.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:04:23.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:04:23.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.377906
2026-04-15T11:04:23.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:04:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:04:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:04:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:04:23.744 [DEBUG] [Thread-17780] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:04:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:04:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:04:04', tmtdew=2.34195, humidity=86.5594, cloud=0.0, wind=20.5031, temperature=11.9907, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:04:11.078', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:04:23.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:04:23.996 [DEBUG] [Thread-17783] [transport.py] [_log()] starting thread (client mode): 0xf1337310
2026-04-15T11:04:23.996 [DEBUG] [Thread-17783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:04:24.011 [DEBUG] [Thread-17783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:04:24.011 [INFO] [Thread-17783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:04:24.018 [DEBUG] [Thread-17783] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:04:24.018 [DEBUG] [Thread-17783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:04:24.018 [DEBUG] [Thread-17783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:04:24.018 [DEBUG] [Thread-17783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:04:24.018 [DEBUG] [Thread-17783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:04:24.018 [DEBUG] [Thread-17783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:04:24.018 [DEBUG] [Thread-17783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:04:24.018 [DEBUG] [Thread-17783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:04:24.019 [DEBUG] [Thread-17783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:04:24.019 [DEBUG] [Thread-17783] [transport.py] [_log()] client lang: <none>
2026-04-15T11:04:24.019 [DEBUG] [Thread-17783] [transport.py] [_log()] server lang: <none>
2026-04-15T11:04:24.019 [DEBUG] [Thread-17783] [transport.py] [_log()] kex follows: False
2026-04-15T11:04:24.019 [DEBUG] [Thread-17783] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:04:24.019 [DEBUG] [Thread-17783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:04:24.019 [DEBUG] [Thread-17783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:04:24.019 [DEBUG] [Thread-17783] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:04:24.019 [DEBUG] [Thread-17783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:04:24.019 [DEBUG] [Thread-17783] [transport.py] [_log()] Compression: none
2026-04-15T11:04:24.019 [DEBUG] [Thread-17783] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:04:24.078 [DEBUG] [Thread-17783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:04:24.078 [DEBUG] [Thread-17783] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:04:24.078 [DEBUG] [Thread-17783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:04:24.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:04:24.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:04:24.134 [DEBUG] [Thread-17783] [transport.py] [_log()] userauth is OK
2026-04-15T11:04:24.134 [DEBUG] [Thread-17783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:04:24.135 [DEBUG] [Thread-17783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:04:24.135 [DEBUG] [Thread-17783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:04:24.135 [DEBUG] [Thread-17783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:04:24.157 [INFO] [Thread-17783] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:04:24.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:04:24.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:04:24.990 [DEBUG] [Thread-17783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:04:24.990 [DEBUG] [Thread-17783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:04:25.038 [DEBUG] [Thread-17783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:04:25.038 [DEBUG] [Thread-17783] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:04:25.047 [DEBUG] [Thread-17783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:04:25.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:04: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')
2026-04-15T11:04:25.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
2026-04-15T11:04:25.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:04:25.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:04:25.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:04:25.082 [DEBUG] [Thread-17783] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:04:25.493 [DEBUG] [Thread-17785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:04:34.579 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:04:34.580 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:04:40.535 [DEBUG] [Thread-17786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:04:55.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:04:55.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:04: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
2026-04-15T11:04:55.570 [DEBUG] [Thread-17787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:04:56.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 4, 39), 4.18329, 75.6162, 0.0, 20.713, 12.6818, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:04:56.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:04:39
2026-04-15T11:04:56.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:04:57.209 [DEBUG] [Thread-17788] [transport.py] [_log()] starting thread (client mode): 0xf1336380
2026-04-15T11:04:57.210 [DEBUG] [Thread-17788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:04:57.226 [DEBUG] [Thread-17788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:04:57.226 [INFO] [Thread-17788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:04:57.228 [DEBUG] [Thread-17788] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:04:57.229 [DEBUG] [Thread-17788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:04:57.229 [DEBUG] [Thread-17788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:04:57.229 [DEBUG] [Thread-17788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:04:57.229 [DEBUG] [Thread-17788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:04:57.229 [DEBUG] [Thread-17788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:04:57.229 [DEBUG] [Thread-17788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:04:57.229 [DEBUG] [Thread-17788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:04:57.229 [DEBUG] [Thread-17788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:04:57.229 [DEBUG] [Thread-17788] [transport.py] [_log()] client lang: <none>
2026-04-15T11:04:57.229 [DEBUG] [Thread-17788] [transport.py] [_log()] server lang: <none>
2026-04-15T11:04:57.229 [DEBUG] [Thread-17788] [transport.py] [_log()] kex follows: False
2026-04-15T11:04:57.230 [DEBUG] [Thread-17788] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:04:57.230 [DEBUG] [Thread-17788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:04:57.230 [DEBUG] [Thread-17788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:04:57.230 [DEBUG] [Thread-17788] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:04:57.230 [DEBUG] [Thread-17788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:04:57.230 [DEBUG] [Thread-17788] [transport.py] [_log()] Compression: none
2026-04-15T11:04:57.230 [DEBUG] [Thread-17788] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:04:57.242 [DEBUG] [Thread-17788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:04:57.243 [DEBUG] [Thread-17788] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:04:57.243 [DEBUG] [Thread-17788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:04:57.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:04:57.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:04:57.244 [DEBUG] [Thread-17788] [transport.py] [_log()] userauth is OK
2026-04-15T11:04:57.244 [DEBUG] [Thread-17788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:04:57.244 [DEBUG] [Thread-17788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:04:57.244 [DEBUG] [Thread-17788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:04:57.244 [DEBUG] [Thread-17788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:04:57.260 [INFO] [Thread-17788] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:04:57.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:04:57.844 [DEBUG] [Thread-17788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:04:57.844 [DEBUG] [Thread-17788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:04:57.844 [DEBUG] [Thread-17788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:04:57.885 [DEBUG] [Thread-17788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:04:57.885 [DEBUG] [Thread-17788] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:04:57.888 [DEBUG] [Thread-17788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:04:57.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:04:57.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:04:57.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:04:57.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:04:57.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:04:57.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:04:57.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:04:57.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:04:57.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:04:57.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.378254 -999.00  +11.70  14.75     84   +9.10 1 2 1 2 1   888    0 3.88 43.75 ----- 14.8 14.8 300.9 20.4 17.1 -16.9 16.5 -14.9 15.6 -13.3 16.3 -14.9
2026-04-15T11:04:57.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:04:57.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:04:57.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.378254
2026-04-15T11:04:57.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:04:57.912 [DEBUG] [Thread-17788] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:04:57.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:04:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:04:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:04:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:04:57.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:04:39', tmtdew=4.18329, humidity=75.6162, cloud=0.0, wind=20.713, temperature=12.6818, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:04:41.146', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:04:58.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:04:58.168 [DEBUG] [Thread-17791] [transport.py] [_log()] starting thread (client mode): 0xf13c9690
2026-04-15T11:04:58.168 [DEBUG] [Thread-17791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:04:58.182 [DEBUG] [Thread-17791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:04:58.182 [INFO] [Thread-17791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:04:58.189 [DEBUG] [Thread-17791] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:04:58.190 [DEBUG] [Thread-17791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:04:58.190 [DEBUG] [Thread-17791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:04:58.190 [DEBUG] [Thread-17791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:04:58.190 [DEBUG] [Thread-17791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:04:58.190 [DEBUG] [Thread-17791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:04:58.190 [DEBUG] [Thread-17791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:04:58.190 [DEBUG] [Thread-17791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:04:58.190 [DEBUG] [Thread-17791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:04:58.190 [DEBUG] [Thread-17791] [transport.py] [_log()] client lang: <none>
2026-04-15T11:04:58.190 [DEBUG] [Thread-17791] [transport.py] [_log()] server lang: <none>
2026-04-15T11:04:58.190 [DEBUG] [Thread-17791] [transport.py] [_log()] kex follows: False
2026-04-15T11:04:58.190 [DEBUG] [Thread-17791] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:04:58.191 [DEBUG] [Thread-17791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:04:58.191 [DEBUG] [Thread-17791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:04:58.191 [DEBUG] [Thread-17791] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:04:58.191 [DEBUG] [Thread-17791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:04:58.191 [DEBUG] [Thread-17791] [transport.py] [_log()] Compression: none
2026-04-15T11:04:58.191 [DEBUG] [Thread-17791] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:04:58.247 [DEBUG] [Thread-17791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:04:58.247 [DEBUG] [Thread-17791] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:04:58.247 [DEBUG] [Thread-17791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:04:58.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:04:58.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:04:58.303 [DEBUG] [Thread-17791] [transport.py] [_log()] userauth is OK
2026-04-15T11:04:58.303 [DEBUG] [Thread-17791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:04:58.303 [DEBUG] [Thread-17791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:04:58.303 [DEBUG] [Thread-17791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:04:58.303 [DEBUG] [Thread-17791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:04:58.321 [INFO] [Thread-17791] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:04:58.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:04:58.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:04:59.106 [DEBUG] [Thread-17791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:04:59.107 [DEBUG] [Thread-17791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:04:59.155 [DEBUG] [Thread-17791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:04:59.155 [DEBUG] [Thread-17791] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:04:59.164 [DEBUG] [Thread-17791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:04:59.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:04:59.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')
2026-04-15T11:04:59.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') -> 00000000
2026-04-15T11:04:59.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:04:59.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:04:59.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:04:59.199 [DEBUG] [Thread-17791] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:05:06.270 [DEBUG] [Thread-17793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:05:10.601 [DEBUG] [Thread-17794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:05:25.644 [DEBUG] [Thread-17795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:05:29.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:05:29.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:05:29.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:05:30.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 5, 14), 2.36008, 85.692, 0.0, 14.5393, 11.7583, 1, 1, 0, 2, 0, 0),)
2026-04-15T11:05:30.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:05:14
2026-04-15T11:05:30.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:05:31.351 [DEBUG] [Thread-17796] [transport.py] [_log()] starting thread (client mode): 0xf13ff9a0
2026-04-15T11:05:31.351 [DEBUG] [Thread-17796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:05:31.370 [DEBUG] [Thread-17796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:05:31.370 [INFO] [Thread-17796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:05:31.373 [DEBUG] [Thread-17796] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:05:31.373 [DEBUG] [Thread-17796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:05:31.373 [DEBUG] [Thread-17796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:05:31.373 [DEBUG] [Thread-17796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:05:31.373 [DEBUG] [Thread-17796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:05:31.373 [DEBUG] [Thread-17796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:05:31.373 [DEBUG] [Thread-17796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:05:31.374 [DEBUG] [Thread-17796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:05:31.374 [DEBUG] [Thread-17796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:05:31.374 [DEBUG] [Thread-17796] [transport.py] [_log()] client lang: <none>
2026-04-15T11:05:31.374 [DEBUG] [Thread-17796] [transport.py] [_log()] server lang: <none>
2026-04-15T11:05:31.374 [DEBUG] [Thread-17796] [transport.py] [_log()] kex follows: False
2026-04-15T11:05:31.374 [DEBUG] [Thread-17796] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:05:31.374 [DEBUG] [Thread-17796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:05:31.374 [DEBUG] [Thread-17796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:05:31.374 [DEBUG] [Thread-17796] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:05:31.374 [DEBUG] [Thread-17796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:05:31.374 [DEBUG] [Thread-17796] [transport.py] [_log()] Compression: none
2026-04-15T11:05:31.375 [DEBUG] [Thread-17796] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:05:31.383 [DEBUG] [Thread-17796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:05:31.383 [DEBUG] [Thread-17796] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:05:31.384 [DEBUG] [Thread-17796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:05:31.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:05:31.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:05:31.385 [DEBUG] [Thread-17796] [transport.py] [_log()] userauth is OK
2026-04-15T11:05:31.385 [DEBUG] [Thread-17796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:05:31.385 [DEBUG] [Thread-17796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:05:31.386 [DEBUG] [Thread-17796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:05:31.386 [DEBUG] [Thread-17796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:05:31.408 [INFO] [Thread-17796] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:05:31.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:05:32.052 [DEBUG] [Thread-17796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:05:32.052 [DEBUG] [Thread-17796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:05:32.053 [DEBUG] [Thread-17796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:05:32.093 [DEBUG] [Thread-17796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:05:32.093 [DEBUG] [Thread-17796] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:05:32.096 [DEBUG] [Thread-17796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:05:32.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:05:32.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:05:32.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:05:32.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:05:32.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:05:32.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:05:32.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:05:32.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:05:32.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:05:32.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.378601 -999.00  +11.70  15.62     82   +8.80 1 2 1 2 1   888    0 3.77 40.40 ----- 15.8 15.6 317.4 18.8 17.1 -16.5 16.5 -14.9 15.7 -13.6 16.3 -14.9
2026-04-15T11:05:32.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:05:32.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:05:32.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.378601
2026-04-15T11:05:32.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:05:32.124 [DEBUG] [Thread-17796] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:05:32.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:05:32.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:05:32.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:05:32.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:05:32.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:05:14', tmtdew=2.36008, humidity=85.692, cloud=0.0, wind=14.5393, temperature=11.7583, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:05:11.126', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:05:32.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:05:32.382 [DEBUG] [Thread-17799] [transport.py] [_log()] starting thread (client mode): 0xf1366a40
2026-04-15T11:05:32.382 [DEBUG] [Thread-17799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:05:32.397 [DEBUG] [Thread-17799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:05:32.397 [INFO] [Thread-17799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:05:32.404 [DEBUG] [Thread-17799] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:05:32.404 [DEBUG] [Thread-17799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:05:32.405 [DEBUG] [Thread-17799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:05:32.405 [DEBUG] [Thread-17799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:05:32.405 [DEBUG] [Thread-17799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:05:32.405 [DEBUG] [Thread-17799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:05:32.405 [DEBUG] [Thread-17799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:05:32.405 [DEBUG] [Thread-17799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:05:32.405 [DEBUG] [Thread-17799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:05:32.405 [DEBUG] [Thread-17799] [transport.py] [_log()] client lang: <none>
2026-04-15T11:05:32.405 [DEBUG] [Thread-17799] [transport.py] [_log()] server lang: <none>
2026-04-15T11:05:32.405 [DEBUG] [Thread-17799] [transport.py] [_log()] kex follows: False
2026-04-15T11:05:32.405 [DEBUG] [Thread-17799] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:05:32.405 [DEBUG] [Thread-17799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:05:32.406 [DEBUG] [Thread-17799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:05:32.406 [DEBUG] [Thread-17799] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:05:32.406 [DEBUG] [Thread-17799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:05:32.406 [DEBUG] [Thread-17799] [transport.py] [_log()] Compression: none
2026-04-15T11:05:32.406 [DEBUG] [Thread-17799] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:05:32.464 [DEBUG] [Thread-17799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:05:32.464 [DEBUG] [Thread-17799] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:05:32.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:05:32.465 [DEBUG] [Thread-17799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:05:32.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:05:32.519 [DEBUG] [Thread-17799] [transport.py] [_log()] userauth is OK
2026-04-15T11:05:32.520 [DEBUG] [Thread-17799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:05:32.520 [DEBUG] [Thread-17799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:05:32.520 [DEBUG] [Thread-17799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:05:32.520 [DEBUG] [Thread-17799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:05:32.538 [INFO] [Thread-17799] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:05:32.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:05:32.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:05:33.343 [DEBUG] [Thread-17799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:05:33.343 [DEBUG] [Thread-17799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:05:33.391 [DEBUG] [Thread-17799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:05:33.391 [DEBUG] [Thread-17799] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:05:33.401 [DEBUG] [Thread-17799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:05:33.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:05:33.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')
2026-04-15T11:05:33.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
2026-04-15T11:05:33.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:05:33.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:05:33.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:05:33.436 [DEBUG] [Thread-17799] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:05:34.718 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:05:34.720 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:05:40.677 [DEBUG] [Thread-17801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:05:55.723 [DEBUG] [Thread-17802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:06:03.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:06:03.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:06:03.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
2026-04-15T11:06:04.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 5, 50), 4.20966, 75.3833, 0.0, 18.1375, 12.0843, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:06:04.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:05:50
2026-04-15T11:06:05.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:06:05.624 [DEBUG] [Thread-17803] [transport.py] [_log()] starting thread (client mode): 0xf1364a00
2026-04-15T11:06:05.624 [DEBUG] [Thread-17803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:06:05.637 [DEBUG] [Thread-17803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:06:05.637 [INFO] [Thread-17803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:06:05.639 [DEBUG] [Thread-17803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:06:05.639 [DEBUG] [Thread-17803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:06:05.639 [DEBUG] [Thread-17803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:06:05.639 [DEBUG] [Thread-17803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:06:05.639 [DEBUG] [Thread-17803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:06:05.639 [DEBUG] [Thread-17803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:06:05.639 [DEBUG] [Thread-17803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:06:05.639 [DEBUG] [Thread-17803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:06:05.639 [DEBUG] [Thread-17803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:06:05.639 [DEBUG] [Thread-17803] [transport.py] [_log()] client lang: <none>
2026-04-15T11:06:05.639 [DEBUG] [Thread-17803] [transport.py] [_log()] server lang: <none>
2026-04-15T11:06:05.640 [DEBUG] [Thread-17803] [transport.py] [_log()] kex follows: False
2026-04-15T11:06:05.640 [DEBUG] [Thread-17803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:06:05.640 [DEBUG] [Thread-17803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:06:05.640 [DEBUG] [Thread-17803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:06:05.640 [DEBUG] [Thread-17803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:06:05.640 [DEBUG] [Thread-17803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:06:05.640 [DEBUG] [Thread-17803] [transport.py] [_log()] Compression: none
2026-04-15T11:06:05.640 [DEBUG] [Thread-17803] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:06:05.652 [DEBUG] [Thread-17803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:06:05.652 [DEBUG] [Thread-17803] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:06:05.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:06:05.653 [DEBUG] [Thread-17803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:06:05.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:06:05.654 [DEBUG] [Thread-17803] [transport.py] [_log()] userauth is OK
2026-04-15T11:06:05.654 [DEBUG] [Thread-17803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:06:05.654 [DEBUG] [Thread-17803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:06:05.654 [DEBUG] [Thread-17803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:06:05.654 [DEBUG] [Thread-17803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:06:05.671 [INFO] [Thread-17803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:06:05.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:06:06.253 [DEBUG] [Thread-17803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:06:06.253 [DEBUG] [Thread-17803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:06:06.253 [DEBUG] [Thread-17803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:06:06.293 [DEBUG] [Thread-17803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:06:06.294 [DEBUG] [Thread-17803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:06:06.296 [DEBUG] [Thread-17803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:06:06.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:06:06.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:06:06.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:06:06.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:06:06.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:06:06.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:06:06.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:06:06.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:06:06.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:06:06.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.378948 -999.00  +11.70  15.66     81   +8.60 1 2 1 2 1   888    0 3.79 40.35 ----- 20.1 15.7 313.6 18.6 17.1 -15.9 16.4 -14.9 15.6 -14.1 16.3 -14.9
2026-04-15T11:06:06.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:06:06.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:06:06.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.378948
2026-04-15T11:06:06.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:06:06.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:06:06.310 [DEBUG] [Thread-17803] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:06:06.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:06:06.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:06:06.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:06:06.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:05:50', tmtdew=4.20966, humidity=75.3833, cloud=0.0, wind=18.1375, temperature=12.0843, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:05:41.107', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:06:06.376 [DEBUG] [Thread-17806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:06:06.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:06:06.524 [DEBUG] [Thread-17807] [transport.py] [_log()] starting thread (client mode): 0xf13e2320
2026-04-15T11:06:06.524 [DEBUG] [Thread-17807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:06:06.538 [DEBUG] [Thread-17807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:06:06.538 [INFO] [Thread-17807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:06:06.545 [DEBUG] [Thread-17807] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:06:06.546 [DEBUG] [Thread-17807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:06:06.546 [DEBUG] [Thread-17807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:06:06.546 [DEBUG] [Thread-17807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:06:06.546 [DEBUG] [Thread-17807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:06:06.546 [DEBUG] [Thread-17807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:06:06.546 [DEBUG] [Thread-17807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:06:06.546 [DEBUG] [Thread-17807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:06:06.546 [DEBUG] [Thread-17807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:06:06.546 [DEBUG] [Thread-17807] [transport.py] [_log()] client lang: <none>
2026-04-15T11:06:06.546 [DEBUG] [Thread-17807] [transport.py] [_log()] server lang: <none>
2026-04-15T11:06:06.547 [DEBUG] [Thread-17807] [transport.py] [_log()] kex follows: False
2026-04-15T11:06:06.547 [DEBUG] [Thread-17807] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:06:06.547 [DEBUG] [Thread-17807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:06:06.547 [DEBUG] [Thread-17807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:06:06.547 [DEBUG] [Thread-17807] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:06:06.547 [DEBUG] [Thread-17807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:06:06.547 [DEBUG] [Thread-17807] [transport.py] [_log()] Compression: none
2026-04-15T11:06:06.547 [DEBUG] [Thread-17807] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:06:06.604 [DEBUG] [Thread-17807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:06:06.604 [DEBUG] [Thread-17807] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:06:06.605 [DEBUG] [Thread-17807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:06:06.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:06:06.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:06:06.661 [DEBUG] [Thread-17807] [transport.py] [_log()] userauth is OK
2026-04-15T11:06:06.662 [DEBUG] [Thread-17807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:06:06.662 [DEBUG] [Thread-17807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:06:06.662 [DEBUG] [Thread-17807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:06:06.662 [DEBUG] [Thread-17807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:06:06.691 [INFO] [Thread-17807] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:06:06.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:06:06.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:06:07.513 [DEBUG] [Thread-17807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:06:07.513 [DEBUG] [Thread-17807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:06:07.560 [DEBUG] [Thread-17807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:06:07.561 [DEBUG] [Thread-17807] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:06:07.569 [DEBUG] [Thread-17807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:06:07.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:06:07.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')
2026-04-15T11:06:07.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
2026-04-15T11:06:07.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:06:07.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:06:07.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:06:07.602 [DEBUG] [Thread-17807] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:06:10.755 [DEBUG] [Thread-17809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:06:25.816 [DEBUG] [Thread-17810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:06:34.859 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:06:34.861 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:06:37.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:06:37.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:06:37.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
2026-04-15T11:06:38.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 6, 25), 2.38243, 85.5727, 0.0, 13.9043, 11.6416, 1, 1, 0, 2, 0, 0),)
2026-04-15T11:06:38.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:06:25
2026-04-15T11:06:39.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:06:39.718 [DEBUG] [Thread-17811] [transport.py] [_log()] starting thread (client mode): 0xf13fff70
2026-04-15T11:06:39.719 [DEBUG] [Thread-17811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:06:39.737 [DEBUG] [Thread-17811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:06:39.737 [INFO] [Thread-17811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:06:39.740 [DEBUG] [Thread-17811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:06:39.740 [DEBUG] [Thread-17811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:06:39.741 [DEBUG] [Thread-17811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:06:39.741 [DEBUG] [Thread-17811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:06:39.741 [DEBUG] [Thread-17811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:06:39.741 [DEBUG] [Thread-17811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:06:39.741 [DEBUG] [Thread-17811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:06:39.741 [DEBUG] [Thread-17811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:06:39.741 [DEBUG] [Thread-17811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:06:39.741 [DEBUG] [Thread-17811] [transport.py] [_log()] client lang: <none>
2026-04-15T11:06:39.741 [DEBUG] [Thread-17811] [transport.py] [_log()] server lang: <none>
2026-04-15T11:06:39.741 [DEBUG] [Thread-17811] [transport.py] [_log()] kex follows: False
2026-04-15T11:06:39.741 [DEBUG] [Thread-17811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:06:39.741 [DEBUG] [Thread-17811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:06:39.742 [DEBUG] [Thread-17811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:06:39.742 [DEBUG] [Thread-17811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:06:39.742 [DEBUG] [Thread-17811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:06:39.742 [DEBUG] [Thread-17811] [transport.py] [_log()] Compression: none
2026-04-15T11:06:39.742 [DEBUG] [Thread-17811] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:06:39.750 [DEBUG] [Thread-17811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:06:39.751 [DEBUG] [Thread-17811] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:06:39.751 [DEBUG] [Thread-17811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:06:39.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:06:39.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:06:39.752 [DEBUG] [Thread-17811] [transport.py] [_log()] userauth is OK
2026-04-15T11:06:39.752 [DEBUG] [Thread-17811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:06:39.752 [DEBUG] [Thread-17811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:06:39.752 [DEBUG] [Thread-17811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:06:39.753 [DEBUG] [Thread-17811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:06:39.775 [INFO] [Thread-17811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:06:39.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:06:40.375 [DEBUG] [Thread-17811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:06:40.376 [DEBUG] [Thread-17811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:06:40.376 [DEBUG] [Thread-17811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:06:40.416 [DEBUG] [Thread-17811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:06:40.416 [DEBUG] [Thread-17811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:06:40.421 [DEBUG] [Thread-17811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:06:40.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:06:40.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:06:40.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:06:40.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:06:40.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:06:40.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:06:40.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:06:40.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:06:40.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:06:40.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.379295 -999.00  +11.50  16.87     81   +8.30 1 2 1 2 1   888    0 3.81 41.18 ----- 14.4 16.9 326.8 21.0 17.1 -15.3 16.4 -15.1 15.7 -13.4 16.4 -13.4
2026-04-15T11:06:40.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:06:40.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:06:40.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.379295
2026-04-15T11:06:40.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:06:40.445 [DEBUG] [Thread-17811] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:06:40.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:06:40.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:06:40.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:06:40.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:06:40.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:06:25', tmtdew=2.38243, humidity=85.5727, cloud=0.0, wind=13.9043, temperature=11.6416, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:06:11.088', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:06:40.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:06:40.703 [DEBUG] [Thread-17814] [transport.py] [_log()] starting thread (client mode): 0xf13e1cc0
2026-04-15T11:06:40.703 [DEBUG] [Thread-17814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:06:40.718 [DEBUG] [Thread-17814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:06:40.718 [INFO] [Thread-17814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:06:40.725 [DEBUG] [Thread-17814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:06:40.725 [DEBUG] [Thread-17814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:06:40.725 [DEBUG] [Thread-17814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:06:40.725 [DEBUG] [Thread-17814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:06:40.725 [DEBUG] [Thread-17814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:06:40.725 [DEBUG] [Thread-17814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:06:40.725 [DEBUG] [Thread-17814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:06:40.726 [DEBUG] [Thread-17814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:06:40.726 [DEBUG] [Thread-17814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:06:40.726 [DEBUG] [Thread-17814] [transport.py] [_log()] client lang: <none>
2026-04-15T11:06:40.726 [DEBUG] [Thread-17814] [transport.py] [_log()] server lang: <none>
2026-04-15T11:06:40.726 [DEBUG] [Thread-17814] [transport.py] [_log()] kex follows: False
2026-04-15T11:06:40.726 [DEBUG] [Thread-17814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:06:40.726 [DEBUG] [Thread-17814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:06:40.726 [DEBUG] [Thread-17814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:06:40.726 [DEBUG] [Thread-17814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:06:40.726 [DEBUG] [Thread-17814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:06:40.726 [DEBUG] [Thread-17814] [transport.py] [_log()] Compression: none
2026-04-15T11:06:40.727 [DEBUG] [Thread-17814] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:06:40.784 [DEBUG] [Thread-17814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:06:40.784 [DEBUG] [Thread-17814] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:06:40.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:06:40.785 [DEBUG] [Thread-17814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:06:40.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:06:40.841 [DEBUG] [Thread-17814] [transport.py] [_log()] userauth is OK
2026-04-15T11:06:40.842 [DEBUG] [Thread-17814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:06:40.842 [DEBUG] [Thread-17814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:06:40.842 [DEBUG] [Thread-17814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:06:40.842 [DEBUG] [Thread-17814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:06:40.847 [DEBUG] [Thread-17816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:06:40.866 [INFO] [Thread-17814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:06:40.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:06:40.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:06:41.659 [DEBUG] [Thread-17814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:06:41.659 [DEBUG] [Thread-17814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:06:41.707 [DEBUG] [Thread-17814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:06:41.707 [DEBUG] [Thread-17814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:06:41.716 [DEBUG] [Thread-17814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:06:41.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:06:41.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')
2026-04-15T11:06:41.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
2026-04-15T11:06:41.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:06:41.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:06:41.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:06:41.751 [DEBUG] [Thread-17814] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:06:55.889 [DEBUG] [Thread-17817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:07:06.470 [DEBUG] [Thread-17818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:07:10.920 [DEBUG] [Thread-17819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:07:11.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:07:11.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:07: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
2026-04-15T11:07:13.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 7), 2.43025, 85.0893, 0.0, 13.0399, 11.7748, 1, 1, 0, 2, 0, 0),)
2026-04-15T11:07:13.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:07:00
2026-04-15T11:07:13.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:07:13.852 [DEBUG] [Thread-17820] [transport.py] [_log()] starting thread (client mode): 0xee98e890
2026-04-15T11:07:13.853 [DEBUG] [Thread-17820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:07:13.873 [DEBUG] [Thread-17820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:07:13.873 [INFO] [Thread-17820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:07:13.874 [DEBUG] [Thread-17820] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:07:13.875 [DEBUG] [Thread-17820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:07:13.875 [DEBUG] [Thread-17820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:07:13.875 [DEBUG] [Thread-17820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:07:13.875 [DEBUG] [Thread-17820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:07:13.875 [DEBUG] [Thread-17820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:07:13.875 [DEBUG] [Thread-17820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:07:13.875 [DEBUG] [Thread-17820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:07:13.875 [DEBUG] [Thread-17820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:07:13.875 [DEBUG] [Thread-17820] [transport.py] [_log()] client lang: <none>
2026-04-15T11:07:13.875 [DEBUG] [Thread-17820] [transport.py] [_log()] server lang: <none>
2026-04-15T11:07:13.875 [DEBUG] [Thread-17820] [transport.py] [_log()] kex follows: False
2026-04-15T11:07:13.876 [DEBUG] [Thread-17820] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:07:13.876 [DEBUG] [Thread-17820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:07:13.876 [DEBUG] [Thread-17820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:07:13.876 [DEBUG] [Thread-17820] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:07:13.876 [DEBUG] [Thread-17820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:07:13.876 [DEBUG] [Thread-17820] [transport.py] [_log()] Compression: none
2026-04-15T11:07:13.876 [DEBUG] [Thread-17820] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:07:13.885 [DEBUG] [Thread-17820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:07:13.885 [DEBUG] [Thread-17820] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:07:13.885 [DEBUG] [Thread-17820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:07:13.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:07:13.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:07:13.887 [DEBUG] [Thread-17820] [transport.py] [_log()] userauth is OK
2026-04-15T11:07:13.887 [DEBUG] [Thread-17820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:07:13.887 [DEBUG] [Thread-17820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:07:13.887 [DEBUG] [Thread-17820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:07:13.887 [DEBUG] [Thread-17820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:07:13.904 [INFO] [Thread-17820] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:07:13.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:07:14.486 [DEBUG] [Thread-17820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:07:14.486 [DEBUG] [Thread-17820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:07:14.487 [DEBUG] [Thread-17820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:07:14.527 [DEBUG] [Thread-17820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:07:14.527 [DEBUG] [Thread-17820] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:07:14.529 [DEBUG] [Thread-17820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:07:14.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:07:14.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:07:14.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:07:14.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:07:14.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:07:14.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:07:14.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:07:14.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:07:14.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:07:14.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.379642 -999.00  +11.50  13.20     82   +8.60 1 2 1 2 1   888    0 3.75 40.91 ----- 13.2 13.2 301.2 17.5 17.4 -14.2 16.6 -14.1 15.8 -13.1 16.4 -12.7
2026-04-15T11:07:14.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:07:14.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:07:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.379642
2026-04-15T11:07:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:07:14.556 [DEBUG] [Thread-17820] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:07:14.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:07:14.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:07:14.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:07:14.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:07:14.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:07:00', tmtdew=2.43025, humidity=85.0893, cloud=0.0, wind=13.0399, temperature=11.7748, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:06:41.069', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:07:14.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:07:14.812 [DEBUG] [Thread-17823] [transport.py] [_log()] starting thread (client mode): 0xf13fe020
2026-04-15T11:07:14.812 [DEBUG] [Thread-17823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:07:14.826 [DEBUG] [Thread-17823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:07:14.826 [INFO] [Thread-17823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:07:14.833 [DEBUG] [Thread-17823] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:07:14.833 [DEBUG] [Thread-17823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:07:14.833 [DEBUG] [Thread-17823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:07:14.833 [DEBUG] [Thread-17823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:07:14.833 [DEBUG] [Thread-17823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:07:14.833 [DEBUG] [Thread-17823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:07:14.834 [DEBUG] [Thread-17823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:07:14.834 [DEBUG] [Thread-17823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:07:14.834 [DEBUG] [Thread-17823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:07:14.834 [DEBUG] [Thread-17823] [transport.py] [_log()] client lang: <none>
2026-04-15T11:07:14.834 [DEBUG] [Thread-17823] [transport.py] [_log()] server lang: <none>
2026-04-15T11:07:14.834 [DEBUG] [Thread-17823] [transport.py] [_log()] kex follows: False
2026-04-15T11:07:14.834 [DEBUG] [Thread-17823] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:07:14.834 [DEBUG] [Thread-17823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:07:14.834 [DEBUG] [Thread-17823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:07:14.834 [DEBUG] [Thread-17823] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:07:14.834 [DEBUG] [Thread-17823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:07:14.835 [DEBUG] [Thread-17823] [transport.py] [_log()] Compression: none
2026-04-15T11:07:14.835 [DEBUG] [Thread-17823] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:07:14.888 [DEBUG] [Thread-17823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:07:14.889 [DEBUG] [Thread-17823] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:07:14.889 [DEBUG] [Thread-17823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:07:14.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:07:14.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:07:14.945 [DEBUG] [Thread-17823] [transport.py] [_log()] userauth is OK
2026-04-15T11:07:14.946 [DEBUG] [Thread-17823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:07:14.946 [DEBUG] [Thread-17823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:07:14.946 [DEBUG] [Thread-17823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:07:14.946 [DEBUG] [Thread-17823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:07:14.970 [INFO] [Thread-17823] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:07:14.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:07:14.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:07:15.785 [DEBUG] [Thread-17823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:07:15.785 [DEBUG] [Thread-17823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:07:15.833 [DEBUG] [Thread-17823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:07:15.833 [DEBUG] [Thread-17823] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:07:15.842 [DEBUG] [Thread-17823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:07:15.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:07:15.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')
2026-04-15T11:07:15.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') -> 00000000
2026-04-15T11:07:15.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:07:15.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:07:15.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:07:15.878 [DEBUG] [Thread-17823] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:07:25.952 [DEBUG] [Thread-17825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:07:35.001 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:07:35.002 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:07:41.008 [DEBUG] [Thread-17826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:07:45.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:07:45.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:07:45.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:07:47.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 7, 36), 4.06691, 76.1455, 0.0, 15.1034, 12.2496, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:07:47.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:07:36
2026-04-15T11:07:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:07:48.029 [DEBUG] [Thread-17827] [transport.py] [_log()] starting thread (client mode): 0xf1334790
2026-04-15T11:07:48.030 [DEBUG] [Thread-17827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:07:48.043 [DEBUG] [Thread-17827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:07:48.043 [INFO] [Thread-17827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:07:48.044 [DEBUG] [Thread-17827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:07:48.044 [DEBUG] [Thread-17827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:07:48.044 [DEBUG] [Thread-17827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:07:48.044 [DEBUG] [Thread-17827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:07:48.044 [DEBUG] [Thread-17827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:07:48.045 [DEBUG] [Thread-17827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:07:48.045 [DEBUG] [Thread-17827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:07:48.045 [DEBUG] [Thread-17827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:07:48.045 [DEBUG] [Thread-17827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:07:48.045 [DEBUG] [Thread-17827] [transport.py] [_log()] client lang: <none>
2026-04-15T11:07:48.045 [DEBUG] [Thread-17827] [transport.py] [_log()] server lang: <none>
2026-04-15T11:07:48.045 [DEBUG] [Thread-17827] [transport.py] [_log()] kex follows: False
2026-04-15T11:07:48.045 [DEBUG] [Thread-17827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:07:48.045 [DEBUG] [Thread-17827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:07:48.045 [DEBUG] [Thread-17827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:07:48.045 [DEBUG] [Thread-17827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:07:48.046 [DEBUG] [Thread-17827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:07:48.046 [DEBUG] [Thread-17827] [transport.py] [_log()] Compression: none
2026-04-15T11:07:48.046 [DEBUG] [Thread-17827] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:07:48.054 [DEBUG] [Thread-17827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:07:48.055 [DEBUG] [Thread-17827] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:07:48.055 [DEBUG] [Thread-17827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:07:48.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:07:48.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:07:48.056 [DEBUG] [Thread-17827] [transport.py] [_log()] userauth is OK
2026-04-15T11:07:48.056 [DEBUG] [Thread-17827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:07:48.056 [DEBUG] [Thread-17827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:07:48.056 [DEBUG] [Thread-17827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:07:48.056 [DEBUG] [Thread-17827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:07:48.069 [INFO] [Thread-17827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:07:48.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:07:48.657 [DEBUG] [Thread-17827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:07:48.658 [DEBUG] [Thread-17827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:07:48.658 [DEBUG] [Thread-17827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:07:48.698 [DEBUG] [Thread-17827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:07:48.698 [DEBUG] [Thread-17827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:07:48.701 [DEBUG] [Thread-17827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:07:48.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:07:48.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:07:48.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:07:48.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:07:48.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:07:48.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:07:48.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:07:48.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:07:48.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:07:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.380337 -999.00  +11.50  14.27     80   +8.20 1 2 1 2 1   888    0 3.90 41.28 ----- 12.2 14.3 295.2 20.1 17.1 -16.5 16.4 -16.6 15.7 -15.0 16.4 -14.4
2026-04-15T11:07:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:07:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:07:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.380337
2026-04-15T11:07:48.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:07:48.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:07:48.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:07:48.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:07:48.729 [DEBUG] [Thread-17827] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:07:48.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:07:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:07:36', tmtdew=4.06691, humidity=76.1455, cloud=0.0, wind=15.1034, temperature=12.2496, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:07:41.117', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:07:48.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:07:48.988 [DEBUG] [Thread-17830] [transport.py] [_log()] starting thread (client mode): 0xf1335cc0
2026-04-15T11:07:48.988 [DEBUG] [Thread-17830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:07:49.002 [DEBUG] [Thread-17830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:07:49.003 [INFO] [Thread-17830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:07:49.010 [DEBUG] [Thread-17830] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:07:49.010 [DEBUG] [Thread-17830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:07:49.010 [DEBUG] [Thread-17830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:07:49.010 [DEBUG] [Thread-17830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:07:49.010 [DEBUG] [Thread-17830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:07:49.010 [DEBUG] [Thread-17830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:07:49.010 [DEBUG] [Thread-17830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:07:49.011 [DEBUG] [Thread-17830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:07:49.011 [DEBUG] [Thread-17830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:07:49.011 [DEBUG] [Thread-17830] [transport.py] [_log()] client lang: <none>
2026-04-15T11:07:49.011 [DEBUG] [Thread-17830] [transport.py] [_log()] server lang: <none>
2026-04-15T11:07:49.011 [DEBUG] [Thread-17830] [transport.py] [_log()] kex follows: False
2026-04-15T11:07:49.011 [DEBUG] [Thread-17830] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:07:49.011 [DEBUG] [Thread-17830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:07:49.011 [DEBUG] [Thread-17830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:07:49.011 [DEBUG] [Thread-17830] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:07:49.011 [DEBUG] [Thread-17830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:07:49.011 [DEBUG] [Thread-17830] [transport.py] [_log()] Compression: none
2026-04-15T11:07:49.011 [DEBUG] [Thread-17830] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:07:49.065 [DEBUG] [Thread-17830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:07:49.066 [DEBUG] [Thread-17830] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:07:49.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:07:49.066 [DEBUG] [Thread-17830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:07:49.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:07:49.122 [DEBUG] [Thread-17830] [transport.py] [_log()] userauth is OK
2026-04-15T11:07:49.122 [DEBUG] [Thread-17830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:07:49.122 [DEBUG] [Thread-17830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:07:49.123 [DEBUG] [Thread-17830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:07:49.123 [DEBUG] [Thread-17830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:07:49.150 [INFO] [Thread-17830] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:07:49.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:07:49.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:07:49.956 [DEBUG] [Thread-17830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:07:49.956 [DEBUG] [Thread-17830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:07:50.004 [DEBUG] [Thread-17830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:07:50.004 [DEBUG] [Thread-17830] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:07:50.013 [DEBUG] [Thread-17830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:07:50.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:07:50.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')
2026-04-15T11:07:50.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
2026-04-15T11:07:50.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:07:50.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:07:50.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:07:50.048 [DEBUG] [Thread-17830] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:07:56.038 [DEBUG] [Thread-17832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:08:06.576 [DEBUG] [Thread-17833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:08:11.076 [DEBUG] [Thread-17834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:08:20.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:08:20.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:08:20.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
2026-04-15T11:08:21.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 8, 12), 2.82314, 82.8572, 0.0, 17.433, 11.4585, 0, 1, 0, 2, 0, 0),)
2026-04-15T11:08:21.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:08:12
2026-04-15T11:08:21.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:08:22.172 [DEBUG] [Thread-17835] [transport.py] [_log()] starting thread (client mode): 0xee98d0f0
2026-04-15T11:08:22.172 [DEBUG] [Thread-17835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:08:22.194 [DEBUG] [Thread-17835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:08:22.194 [INFO] [Thread-17835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:08:22.195 [DEBUG] [Thread-17835] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:08:22.195 [DEBUG] [Thread-17835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:08:22.195 [DEBUG] [Thread-17835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:08:22.196 [DEBUG] [Thread-17835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:08:22.196 [DEBUG] [Thread-17835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:08:22.196 [DEBUG] [Thread-17835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:08:22.196 [DEBUG] [Thread-17835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:08:22.196 [DEBUG] [Thread-17835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:08:22.196 [DEBUG] [Thread-17835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:08:22.196 [DEBUG] [Thread-17835] [transport.py] [_log()] client lang: <none>
2026-04-15T11:08:22.196 [DEBUG] [Thread-17835] [transport.py] [_log()] server lang: <none>
2026-04-15T11:08:22.196 [DEBUG] [Thread-17835] [transport.py] [_log()] kex follows: False
2026-04-15T11:08:22.196 [DEBUG] [Thread-17835] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:08:22.196 [DEBUG] [Thread-17835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:08:22.196 [DEBUG] [Thread-17835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:08:22.197 [DEBUG] [Thread-17835] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:08:22.197 [DEBUG] [Thread-17835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:08:22.197 [DEBUG] [Thread-17835] [transport.py] [_log()] Compression: none
2026-04-15T11:08:22.197 [DEBUG] [Thread-17835] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:08:22.206 [DEBUG] [Thread-17835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:08:22.206 [DEBUG] [Thread-17835] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:08:22.207 [DEBUG] [Thread-17835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:08:22.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:08:22.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:08:22.207 [DEBUG] [Thread-17835] [transport.py] [_log()] userauth is OK
2026-04-15T11:08:22.208 [DEBUG] [Thread-17835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:08:22.208 [DEBUG] [Thread-17835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:08:22.208 [DEBUG] [Thread-17835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:08:22.208 [DEBUG] [Thread-17835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:08:22.232 [INFO] [Thread-17835] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:08:22.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:08:22.824 [DEBUG] [Thread-17835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:08:22.825 [DEBUG] [Thread-17835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:08:22.825 [DEBUG] [Thread-17835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:08:22.865 [DEBUG] [Thread-17835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:08:22.865 [DEBUG] [Thread-17835] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:08:22.867 [DEBUG] [Thread-17835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:08:22.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:08:22.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:08:22.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:08:22.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:08:22.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:08:22.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:08:22.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:08:22.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:08:22.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:08:22.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.380684 -999.00  +11.30  22.46     81   +8.20 1 2 1 2 1   888    0 3.72 36.63 ----- 21.5 22.5 297.8 25.3 16.9 -16.4 16.3 -17.3 15.6 -15.2 16.3 -13.8
2026-04-15T11:08:22.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:08:22.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:08:22.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.380684
2026-04-15T11:08:22.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:08:22.885 [DEBUG] [Thread-17835] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:08:22.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:08:22.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:08:22.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:08:22.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:08:22.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:08:12', tmtdew=2.82314, humidity=82.8572, cloud=0.0, wind=17.433, temperature=11.4585, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:08:11.098', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:08:23.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:08:23.143 [DEBUG] [Thread-17838] [transport.py] [_log()] starting thread (client mode): 0xf13ff160
2026-04-15T11:08:23.143 [DEBUG] [Thread-17838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:08:23.157 [DEBUG] [Thread-17838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:08:23.157 [INFO] [Thread-17838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:08:23.170 [DEBUG] [Thread-17838] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:08:23.170 [DEBUG] [Thread-17838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:08:23.170 [DEBUG] [Thread-17838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:08:23.170 [DEBUG] [Thread-17838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:08:23.170 [DEBUG] [Thread-17838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:08:23.170 [DEBUG] [Thread-17838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:08:23.170 [DEBUG] [Thread-17838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:08:23.170 [DEBUG] [Thread-17838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:08:23.170 [DEBUG] [Thread-17838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:08:23.170 [DEBUG] [Thread-17838] [transport.py] [_log()] client lang: <none>
2026-04-15T11:08:23.171 [DEBUG] [Thread-17838] [transport.py] [_log()] server lang: <none>
2026-04-15T11:08:23.171 [DEBUG] [Thread-17838] [transport.py] [_log()] kex follows: False
2026-04-15T11:08:23.171 [DEBUG] [Thread-17838] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:08:23.171 [DEBUG] [Thread-17838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:08:23.171 [DEBUG] [Thread-17838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:08:23.171 [DEBUG] [Thread-17838] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:08:23.171 [DEBUG] [Thread-17838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:08:23.171 [DEBUG] [Thread-17838] [transport.py] [_log()] Compression: none
2026-04-15T11:08:23.171 [DEBUG] [Thread-17838] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:08:23.231 [DEBUG] [Thread-17838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:08:23.232 [DEBUG] [Thread-17838] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:08:23.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:08:23.232 [DEBUG] [Thread-17838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:08:23.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:08:23.287 [DEBUG] [Thread-17838] [transport.py] [_log()] userauth is OK
2026-04-15T11:08:23.287 [DEBUG] [Thread-17838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:08:23.287 [DEBUG] [Thread-17838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:08:23.287 [DEBUG] [Thread-17838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:08:23.287 [DEBUG] [Thread-17838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:08:23.313 [INFO] [Thread-17838] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:08:23.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:08:23.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:08:24.151 [DEBUG] [Thread-17838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:08:24.151 [DEBUG] [Thread-17838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:08:24.199 [DEBUG] [Thread-17838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:08:24.199 [DEBUG] [Thread-17838] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:08:24.208 [DEBUG] [Thread-17838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:08:24.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:08:24.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')
2026-04-15T11:08: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') -> 00000000
2026-04-15T11:08:24.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:08:24.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:08:24.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:08:24.243 [DEBUG] [Thread-17838] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:08:26.108 [DEBUG] [Thread-17840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:08:35.143 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:08:35.144 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:08:41.151 [DEBUG] [Thread-17841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:08:54.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:08:54.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:08: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
2026-04-15T11:08:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 8, 48), 4.00531, 76.4436, 0.0, 15.8796, 12.1166, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:08:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:08:48
2026-04-15T11:08:55.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:08:56.183 [DEBUG] [Thread-17842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:08:56.422 [DEBUG] [Thread-17843] [transport.py] [_log()] starting thread (client mode): 0xee98f1c0
2026-04-15T11:08:56.422 [DEBUG] [Thread-17843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:08:56.434 [DEBUG] [Thread-17843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:08:56.434 [INFO] [Thread-17843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:08:56.436 [DEBUG] [Thread-17843] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:08:56.436 [DEBUG] [Thread-17843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:08:56.436 [DEBUG] [Thread-17843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:08:56.436 [DEBUG] [Thread-17843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:08:56.436 [DEBUG] [Thread-17843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:08:56.436 [DEBUG] [Thread-17843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:08:56.436 [DEBUG] [Thread-17843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:08:56.436 [DEBUG] [Thread-17843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:08:56.436 [DEBUG] [Thread-17843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:08:56.436 [DEBUG] [Thread-17843] [transport.py] [_log()] client lang: <none>
2026-04-15T11:08:56.436 [DEBUG] [Thread-17843] [transport.py] [_log()] server lang: <none>
2026-04-15T11:08:56.436 [DEBUG] [Thread-17843] [transport.py] [_log()] kex follows: False
2026-04-15T11:08:56.437 [DEBUG] [Thread-17843] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:08:56.437 [DEBUG] [Thread-17843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:08:56.437 [DEBUG] [Thread-17843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:08:56.437 [DEBUG] [Thread-17843] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:08:56.437 [DEBUG] [Thread-17843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:08:56.437 [DEBUG] [Thread-17843] [transport.py] [_log()] Compression: none
2026-04-15T11:08:56.437 [DEBUG] [Thread-17843] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:08:56.453 [DEBUG] [Thread-17843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:08:56.453 [DEBUG] [Thread-17843] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:08:56.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:08:56.454 [DEBUG] [Thread-17843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:08:56.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:08:56.455 [DEBUG] [Thread-17843] [transport.py] [_log()] userauth is OK
2026-04-15T11:08:56.455 [DEBUG] [Thread-17843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:08:56.455 [DEBUG] [Thread-17843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:08:56.455 [DEBUG] [Thread-17843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:08:56.455 [DEBUG] [Thread-17843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:08:56.475 [INFO] [Thread-17843] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:08:56.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:08:57.058 [DEBUG] [Thread-17843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:08:57.058 [DEBUG] [Thread-17843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:08:57.059 [DEBUG] [Thread-17843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:08:57.099 [DEBUG] [Thread-17843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:08:57.099 [DEBUG] [Thread-17843] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:08:57.102 [DEBUG] [Thread-17843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:08:57.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:08:57.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:08:57.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:08:57.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:08:57.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:08:57.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:08:57.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:08:57.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:08:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:08:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.381031 -999.00  +11.20  16.89     82   +8.20 1 2 1 2 1   888    0 3.79 34.94 ----- 14.2 16.9 288.8 22.9 16.7 -15.3 16.2 -16.5 15.4 -14.6 16.2 -13.4
2026-04-15T11:08:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:08:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:08:57.126 [DEBUG] [Thread-17843] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:08:57.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.381031
2026-04-15T11:08:57.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:08:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:08:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:08:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:08:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:08:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:08:48', tmtdew=4.00531, humidity=76.4436, cloud=0.0, wind=15.8796, temperature=12.1166, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:08:41.078', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:08:57.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:08:57.385 [DEBUG] [Thread-17846] [transport.py] [_log()] starting thread (client mode): 0xee98ea10
2026-04-15T11:08:57.385 [DEBUG] [Thread-17846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:08:57.399 [DEBUG] [Thread-17846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:08:57.399 [INFO] [Thread-17846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:08:57.407 [DEBUG] [Thread-17846] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:08:57.407 [DEBUG] [Thread-17846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:08:57.407 [DEBUG] [Thread-17846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:08:57.407 [DEBUG] [Thread-17846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:08:57.407 [DEBUG] [Thread-17846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:08:57.407 [DEBUG] [Thread-17846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:08:57.407 [DEBUG] [Thread-17846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:08:57.407 [DEBUG] [Thread-17846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:08:57.407 [DEBUG] [Thread-17846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:08:57.407 [DEBUG] [Thread-17846] [transport.py] [_log()] client lang: <none>
2026-04-15T11:08:57.408 [DEBUG] [Thread-17846] [transport.py] [_log()] server lang: <none>
2026-04-15T11:08:57.408 [DEBUG] [Thread-17846] [transport.py] [_log()] kex follows: False
2026-04-15T11:08:57.408 [DEBUG] [Thread-17846] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:08:57.408 [DEBUG] [Thread-17846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:08:57.408 [DEBUG] [Thread-17846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:08:57.408 [DEBUG] [Thread-17846] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:08:57.408 [DEBUG] [Thread-17846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:08:57.408 [DEBUG] [Thread-17846] [transport.py] [_log()] Compression: none
2026-04-15T11:08:57.408 [DEBUG] [Thread-17846] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:08:57.462 [DEBUG] [Thread-17846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:08:57.463 [DEBUG] [Thread-17846] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:08:57.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:08:57.463 [DEBUG] [Thread-17846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:08:57.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:08:57.522 [DEBUG] [Thread-17846] [transport.py] [_log()] userauth is OK
2026-04-15T11:08:57.522 [DEBUG] [Thread-17846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:08:57.522 [DEBUG] [Thread-17846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:08:57.523 [DEBUG] [Thread-17846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:08:57.523 [DEBUG] [Thread-17846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:08:57.548 [INFO] [Thread-17846] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:08:57.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:08:57.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:08:58.357 [DEBUG] [Thread-17846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:08:58.358 [DEBUG] [Thread-17846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:08:58.405 [DEBUG] [Thread-17846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:08:58.405 [DEBUG] [Thread-17846] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:08:58.416 [DEBUG] [Thread-17846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:08:58.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:08:58.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')
2026-04-15T11:08:58.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
2026-04-15T11:08:58.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:08:58.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:08:58.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:08:58.451 [DEBUG] [Thread-17846] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:09:06.705 [DEBUG] [Thread-17848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:09:11.212 [DEBUG] [Thread-17849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:09:26.255 [DEBUG] [Thread-17850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:09:28.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:09:28.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:09:28.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:09:29.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 8, 48), 4.00531, 76.4436, 0.0, 15.8796, 12.1166, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:09:29.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:08:48
2026-04-15T11:09:30.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:09:30.614 [DEBUG] [Thread-17851] [transport.py] [_log()] starting thread (client mode): 0xf13e04c0
2026-04-15T11:09:30.615 [DEBUG] [Thread-17851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:09:30.634 [DEBUG] [Thread-17851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:09:30.634 [INFO] [Thread-17851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:09:30.637 [DEBUG] [Thread-17851] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:09:30.638 [DEBUG] [Thread-17851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:09:30.638 [DEBUG] [Thread-17851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:09:30.638 [DEBUG] [Thread-17851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:09:30.638 [DEBUG] [Thread-17851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:09:30.638 [DEBUG] [Thread-17851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:09:30.638 [DEBUG] [Thread-17851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:09:30.638 [DEBUG] [Thread-17851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:09:30.638 [DEBUG] [Thread-17851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:09:30.638 [DEBUG] [Thread-17851] [transport.py] [_log()] client lang: <none>
2026-04-15T11:09:30.638 [DEBUG] [Thread-17851] [transport.py] [_log()] server lang: <none>
2026-04-15T11:09:30.638 [DEBUG] [Thread-17851] [transport.py] [_log()] kex follows: False
2026-04-15T11:09:30.638 [DEBUG] [Thread-17851] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:09:30.639 [DEBUG] [Thread-17851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:09:30.639 [DEBUG] [Thread-17851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:09:30.639 [DEBUG] [Thread-17851] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:09:30.639 [DEBUG] [Thread-17851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:09:30.639 [DEBUG] [Thread-17851] [transport.py] [_log()] Compression: none
2026-04-15T11:09:30.639 [DEBUG] [Thread-17851] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:09:30.655 [DEBUG] [Thread-17851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:09:30.655 [DEBUG] [Thread-17851] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:09:30.656 [DEBUG] [Thread-17851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:09:30.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:09:30.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:09:30.657 [DEBUG] [Thread-17851] [transport.py] [_log()] userauth is OK
2026-04-15T11:09:30.657 [DEBUG] [Thread-17851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:09:30.657 [DEBUG] [Thread-17851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:09:30.657 [DEBUG] [Thread-17851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:09:30.657 [DEBUG] [Thread-17851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:09:30.692 [INFO] [Thread-17851] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:09:30.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:09:31.240 [DEBUG] [Thread-17851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:09:31.240 [DEBUG] [Thread-17851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:09:31.241 [DEBUG] [Thread-17851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:09:31.281 [DEBUG] [Thread-17851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:09:31.281 [DEBUG] [Thread-17851] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:09:31.284 [DEBUG] [Thread-17851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:09:31.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:09:31.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:09:31.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:09:31.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:09:31.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:09:31.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:09:31.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:09:31.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:09:31.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:09:31.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.381378 -999.00  +11.10  18.86     82   +8.30 1 2 1 2 1   888    0 3.83 35.00 ----- 15.6 18.9 298.4 21.7 16.6 -14.3 16.1 -16.1 15.4 -14.1 16.1 -12.8
2026-04-15T11:09:31.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:09:31.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:09:31.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.381378
2026-04-15T11:09:31.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:09:31.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:09:31.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:09:31.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:09:31.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:09:31.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:08:48', tmtdew=4.00531, humidity=76.4436, cloud=0.0, wind=15.8796, temperature=12.1166, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:09:11.059', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:09:31.313 [DEBUG] [Thread-17851] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:09:31.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:09:31.573 [DEBUG] [Thread-17854] [transport.py] [_log()] starting thread (client mode): 0xf13346a0
2026-04-15T11:09:31.574 [DEBUG] [Thread-17854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:09:31.587 [DEBUG] [Thread-17854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:09:31.587 [INFO] [Thread-17854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:09:31.594 [DEBUG] [Thread-17854] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:09:31.595 [DEBUG] [Thread-17854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:09:31.595 [DEBUG] [Thread-17854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:09:31.595 [DEBUG] [Thread-17854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:09:31.595 [DEBUG] [Thread-17854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:09:31.595 [DEBUG] [Thread-17854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:09:31.595 [DEBUG] [Thread-17854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:09:31.595 [DEBUG] [Thread-17854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:09:31.596 [DEBUG] [Thread-17854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:09:31.596 [DEBUG] [Thread-17854] [transport.py] [_log()] client lang: <none>
2026-04-15T11:09:31.596 [DEBUG] [Thread-17854] [transport.py] [_log()] server lang: <none>
2026-04-15T11:09:31.596 [DEBUG] [Thread-17854] [transport.py] [_log()] kex follows: False
2026-04-15T11:09:31.596 [DEBUG] [Thread-17854] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:09:31.596 [DEBUG] [Thread-17854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:09:31.597 [DEBUG] [Thread-17854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:09:31.597 [DEBUG] [Thread-17854] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:09:31.597 [DEBUG] [Thread-17854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:09:31.597 [DEBUG] [Thread-17854] [transport.py] [_log()] Compression: none
2026-04-15T11:09:31.597 [DEBUG] [Thread-17854] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:09:31.651 [DEBUG] [Thread-17854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:09:31.651 [DEBUG] [Thread-17854] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:09:31.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:09:31.652 [DEBUG] [Thread-17854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:09:31.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:09:31.708 [DEBUG] [Thread-17854] [transport.py] [_log()] userauth is OK
2026-04-15T11:09:31.708 [DEBUG] [Thread-17854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:09:31.709 [DEBUG] [Thread-17854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:09:31.709 [DEBUG] [Thread-17854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:09:31.709 [DEBUG] [Thread-17854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:09:31.733 [INFO] [Thread-17854] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:09:31.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:09:31.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:09:32.571 [DEBUG] [Thread-17854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:09:32.572 [DEBUG] [Thread-17854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:09:32.620 [DEBUG] [Thread-17854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:09:32.620 [DEBUG] [Thread-17854] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:09:32.629 [DEBUG] [Thread-17854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:09:32.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:09:32.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')
2026-04-15T11:09:32.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
2026-04-15T11:09:32.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:09:32.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:09:32.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:09:32.663 [DEBUG] [Thread-17854] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:09:35.284 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:09:35.285 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:09:41.283 [DEBUG] [Thread-17856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:09:56.321 [DEBUG] [Thread-17857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:10:02.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:10:02.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:10: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
2026-04-15T11:10:04.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 9, 23), 2.65908, 83.9539, 0.0, 15.6154, 11.5915, 0, 1, 0, 2, 0, 0),)
2026-04-15T11:10:04.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:09:23
2026-04-15T11:10:04.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:10:05.123 [DEBUG] [Thread-17858] [transport.py] [_log()] starting thread (client mode): 0xf1336da0
2026-04-15T11:10:05.123 [DEBUG] [Thread-17858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:10:05.137 [DEBUG] [Thread-17858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:10:05.137 [INFO] [Thread-17858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:10:05.140 [DEBUG] [Thread-17858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:10:05.140 [DEBUG] [Thread-17858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:10:05.140 [DEBUG] [Thread-17858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:10:05.140 [DEBUG] [Thread-17858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:10:05.140 [DEBUG] [Thread-17858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:10:05.141 [DEBUG] [Thread-17858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:10:05.141 [DEBUG] [Thread-17858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:10:05.141 [DEBUG] [Thread-17858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:10:05.141 [DEBUG] [Thread-17858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:10:05.141 [DEBUG] [Thread-17858] [transport.py] [_log()] client lang: <none>
2026-04-15T11:10:05.141 [DEBUG] [Thread-17858] [transport.py] [_log()] server lang: <none>
2026-04-15T11:10:05.141 [DEBUG] [Thread-17858] [transport.py] [_log()] kex follows: False
2026-04-15T11:10:05.141 [DEBUG] [Thread-17858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:10:05.141 [DEBUG] [Thread-17858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:10:05.141 [DEBUG] [Thread-17858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:10:05.141 [DEBUG] [Thread-17858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:10:05.142 [DEBUG] [Thread-17858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:10:05.142 [DEBUG] [Thread-17858] [transport.py] [_log()] Compression: none
2026-04-15T11:10:05.142 [DEBUG] [Thread-17858] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:10:05.151 [DEBUG] [Thread-17858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:10:05.151 [DEBUG] [Thread-17858] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:10:05.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:10:05.152 [DEBUG] [Thread-17858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:10:05.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:10:05.153 [DEBUG] [Thread-17858] [transport.py] [_log()] userauth is OK
2026-04-15T11:10:05.153 [DEBUG] [Thread-17858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:10:05.153 [DEBUG] [Thread-17858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:10:05.153 [DEBUG] [Thread-17858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:10:05.153 [DEBUG] [Thread-17858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:10:05.176 [INFO] [Thread-17858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:10:05.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:10:06.124 [DEBUG] [Thread-17858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:10:06.125 [DEBUG] [Thread-17858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:10:06.125 [DEBUG] [Thread-17858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:10:06.166 [DEBUG] [Thread-17858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:10:06.166 [DEBUG] [Thread-17858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:10:06.169 [DEBUG] [Thread-17858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:10:06.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:10:06.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:10:06.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:10:06.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:10:06.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:10:06.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:10:06.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:10:06.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:10:06.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:10:06.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.381726 -999.00  +11.10  11.71     82   +8.30 1 2 1 2 1   888    0 3.72 32.16 ----- 13.8 11.7 301.8 16.6 16.6 -13.7 16.1 -15.7 15.4 -15.2 15.9 -11.8
2026-04-15T11:10:06.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:10:06.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:10:06.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.381726
2026-04-15T11:10:06.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:10:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:10:06.204 [DEBUG] [Thread-17858] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:10:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:10:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:10:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:10:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:09:23', tmtdew=2.65908, humidity=83.9539, cloud=0.0, wind=15.6154, temperature=11.5915, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:09:41.126', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:10:06.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:10:06.423 [DEBUG] [Thread-17861] [transport.py] [_log()] starting thread (client mode): 0xf1366d40
2026-04-15T11:10:06.423 [DEBUG] [Thread-17861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:10:06.437 [DEBUG] [Thread-17861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:10:06.438 [INFO] [Thread-17861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:10:06.445 [DEBUG] [Thread-17861] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:10:06.445 [DEBUG] [Thread-17861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:10:06.445 [DEBUG] [Thread-17861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:10:06.445 [DEBUG] [Thread-17861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:10:06.445 [DEBUG] [Thread-17861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:10:06.445 [DEBUG] [Thread-17861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:10:06.445 [DEBUG] [Thread-17861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:10:06.446 [DEBUG] [Thread-17861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:10:06.446 [DEBUG] [Thread-17861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:10:06.446 [DEBUG] [Thread-17861] [transport.py] [_log()] client lang: <none>
2026-04-15T11:10:06.446 [DEBUG] [Thread-17861] [transport.py] [_log()] server lang: <none>
2026-04-15T11:10:06.446 [DEBUG] [Thread-17861] [transport.py] [_log()] kex follows: False
2026-04-15T11:10:06.446 [DEBUG] [Thread-17861] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:10:06.446 [DEBUG] [Thread-17861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:10:06.446 [DEBUG] [Thread-17861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:10:06.447 [DEBUG] [Thread-17861] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:10:06.447 [DEBUG] [Thread-17861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:10:06.447 [DEBUG] [Thread-17861] [transport.py] [_log()] Compression: none
2026-04-15T11:10:06.447 [DEBUG] [Thread-17861] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:10:06.503 [DEBUG] [Thread-17861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:10:06.504 [DEBUG] [Thread-17861] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:10:06.504 [DEBUG] [Thread-17861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:10:06.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:10:06.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:10:06.560 [DEBUG] [Thread-17861] [transport.py] [_log()] userauth is OK
2026-04-15T11:10:06.560 [DEBUG] [Thread-17861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:10:06.561 [DEBUG] [Thread-17861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:10:06.561 [DEBUG] [Thread-17861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:10:06.561 [DEBUG] [Thread-17861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:10:06.587 [INFO] [Thread-17861] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:10:06.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:10:06.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:10:06.826 [DEBUG] [Thread-17863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:10:07.445 [DEBUG] [Thread-17861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:10:07.446 [DEBUG] [Thread-17861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:10:07.493 [DEBUG] [Thread-17861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:10:07.493 [DEBUG] [Thread-17861] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:10:07.502 [DEBUG] [Thread-17861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:10:07.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:10:07.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')
2026-04-15T11:10:07.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
2026-04-15T11:10:07.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:10:07.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:10:07.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:10:07.537 [DEBUG] [Thread-17861] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:10:11.347 [DEBUG] [Thread-17864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:10:26.384 [DEBUG] [Thread-17865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:10:35.424 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:10:35.426 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:10:37.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:10:37.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:10:37.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
2026-04-15T11:10:38.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 9, 59), 2.70445, 83.4703, 0.0, 8.2404, 11.5416, 0, 1, 0, 2, 0, 0),)
2026-04-15T11:10:38.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:09:59
2026-04-15T11:10:39.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:10:39.778 [DEBUG] [Thread-17866] [transport.py] [_log()] starting thread (client mode): 0xee98d3f0
2026-04-15T11:10:39.778 [DEBUG] [Thread-17866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:10:39.797 [DEBUG] [Thread-17866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:10:39.797 [INFO] [Thread-17866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:10:39.800 [DEBUG] [Thread-17866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:10:39.800 [DEBUG] [Thread-17866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:10:39.800 [DEBUG] [Thread-17866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:10:39.800 [DEBUG] [Thread-17866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:10:39.800 [DEBUG] [Thread-17866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:10:39.800 [DEBUG] [Thread-17866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:10:39.800 [DEBUG] [Thread-17866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:10:39.800 [DEBUG] [Thread-17866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:10:39.800 [DEBUG] [Thread-17866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:10:39.800 [DEBUG] [Thread-17866] [transport.py] [_log()] client lang: <none>
2026-04-15T11:10:39.800 [DEBUG] [Thread-17866] [transport.py] [_log()] server lang: <none>
2026-04-15T11:10:39.800 [DEBUG] [Thread-17866] [transport.py] [_log()] kex follows: False
2026-04-15T11:10:39.801 [DEBUG] [Thread-17866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:10:39.801 [DEBUG] [Thread-17866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:10:39.801 [DEBUG] [Thread-17866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:10:39.801 [DEBUG] [Thread-17866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:10:39.801 [DEBUG] [Thread-17866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:10:39.801 [DEBUG] [Thread-17866] [transport.py] [_log()] Compression: none
2026-04-15T11:10:39.801 [DEBUG] [Thread-17866] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:10:39.820 [DEBUG] [Thread-17866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:10:39.821 [DEBUG] [Thread-17866] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:10:39.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:10:39.821 [DEBUG] [Thread-17866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:10:39.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:10:39.822 [DEBUG] [Thread-17866] [transport.py] [_log()] userauth is OK
2026-04-15T11:10:39.822 [DEBUG] [Thread-17866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:10:39.822 [DEBUG] [Thread-17866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:10:39.823 [DEBUG] [Thread-17866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:10:39.823 [DEBUG] [Thread-17866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:10:39.841 [INFO] [Thread-17866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:10:39.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:10:40.433 [DEBUG] [Thread-17866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:10:40.434 [DEBUG] [Thread-17866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:10:40.434 [DEBUG] [Thread-17866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:10:40.474 [DEBUG] [Thread-17866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:10:40.474 [DEBUG] [Thread-17866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:10:40.476 [DEBUG] [Thread-17866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:10:40.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:10:40.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:10:40.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:10:40.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:10:40.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:10:40.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:10:40.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:10:40.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:10:40.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:10:40.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.382073 -999.00  +11.00  10.10     83   +8.30 1 2 1 2 1   888    0 3.58 28.90 ----- 10.8 10.1 309.0 16.1 16.6 -13.0 16.1 -15.1 15.3 -13.7 15.9 -11.7
2026-04-15T11:10:40.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:10:40.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:10:40.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.382073
2026-04-15T11:10:40.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:10:40.500 [DEBUG] [Thread-17866] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:10:40.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:10:40.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:10:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:10:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:10:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:09:59', tmtdew=2.70445, humidity=83.4703, cloud=0.0, wind=8.2404, temperature=11.5416, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:10:11.107', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:10:40.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:10:40.732 [DEBUG] [Thread-17869] [transport.py] [_log()] starting thread (client mode): 0xee98b9a0
2026-04-15T11:10:40.732 [DEBUG] [Thread-17869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:10:40.746 [DEBUG] [Thread-17869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:10:40.746 [INFO] [Thread-17869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:10:40.753 [DEBUG] [Thread-17869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:10:40.753 [DEBUG] [Thread-17869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:10:40.754 [DEBUG] [Thread-17869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:10:40.754 [DEBUG] [Thread-17869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:10:40.754 [DEBUG] [Thread-17869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:10:40.754 [DEBUG] [Thread-17869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:10:40.754 [DEBUG] [Thread-17869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:10:40.754 [DEBUG] [Thread-17869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:10:40.754 [DEBUG] [Thread-17869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:10:40.754 [DEBUG] [Thread-17869] [transport.py] [_log()] client lang: <none>
2026-04-15T11:10:40.754 [DEBUG] [Thread-17869] [transport.py] [_log()] server lang: <none>
2026-04-15T11:10:40.754 [DEBUG] [Thread-17869] [transport.py] [_log()] kex follows: False
2026-04-15T11:10:40.754 [DEBUG] [Thread-17869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:10:40.754 [DEBUG] [Thread-17869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:10:40.755 [DEBUG] [Thread-17869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:10:40.755 [DEBUG] [Thread-17869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:10:40.755 [DEBUG] [Thread-17869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:10:40.755 [DEBUG] [Thread-17869] [transport.py] [_log()] Compression: none
2026-04-15T11:10:40.755 [DEBUG] [Thread-17869] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:10:40.812 [DEBUG] [Thread-17869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:10:40.812 [DEBUG] [Thread-17869] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:10:40.813 [DEBUG] [Thread-17869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:10:40.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:10:40.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:10:40.868 [DEBUG] [Thread-17869] [transport.py] [_log()] userauth is OK
2026-04-15T11:10:40.869 [DEBUG] [Thread-17869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:10:40.869 [DEBUG] [Thread-17869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:10:40.869 [DEBUG] [Thread-17869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:10:40.869 [DEBUG] [Thread-17869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:10:40.894 [INFO] [Thread-17869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:10:40.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:10:40.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:10:41.414 [DEBUG] [Thread-17871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:10:41.704 [DEBUG] [Thread-17869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:10:41.705 [DEBUG] [Thread-17869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:10:41.752 [DEBUG] [Thread-17869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:10:41.752 [DEBUG] [Thread-17869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:10:41.761 [DEBUG] [Thread-17869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:10:41.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:10:41.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')
2026-04-15T11:10:41.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
2026-04-15T11:10:41.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:10:41.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:10:41.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:10:41.796 [DEBUG] [Thread-17869] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:10:56.458 [DEBUG] [Thread-17872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:11:06.962 [DEBUG] [Thread-17873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:11:11.486 [DEBUG] [Thread-17874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:11:11.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:11:11.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:11:11.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
2026-04-15T11:11:13.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 10, 35), 3.8889, 77.0401, 0.0, 14.045, 12.05, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:11:13.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:10:35
2026-04-15T11:11:13.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:11:13.988 [DEBUG] [Thread-17875] [transport.py] [_log()] starting thread (client mode): 0xf13357b0
2026-04-15T11:11:13.989 [DEBUG] [Thread-17875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:11:14.008 [DEBUG] [Thread-17875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:11:14.008 [INFO] [Thread-17875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:11:14.011 [DEBUG] [Thread-17875] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:11:14.011 [DEBUG] [Thread-17875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:11:14.011 [DEBUG] [Thread-17875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:11:14.011 [DEBUG] [Thread-17875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:11:14.012 [DEBUG] [Thread-17875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:11:14.012 [DEBUG] [Thread-17875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:11:14.012 [DEBUG] [Thread-17875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:11:14.012 [DEBUG] [Thread-17875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:11:14.012 [DEBUG] [Thread-17875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:11:14.012 [DEBUG] [Thread-17875] [transport.py] [_log()] client lang: <none>
2026-04-15T11:11:14.012 [DEBUG] [Thread-17875] [transport.py] [_log()] server lang: <none>
2026-04-15T11:11:14.012 [DEBUG] [Thread-17875] [transport.py] [_log()] kex follows: False
2026-04-15T11:11:14.012 [DEBUG] [Thread-17875] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:11:14.012 [DEBUG] [Thread-17875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:11:14.012 [DEBUG] [Thread-17875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:11:14.013 [DEBUG] [Thread-17875] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:11:14.013 [DEBUG] [Thread-17875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:11:14.013 [DEBUG] [Thread-17875] [transport.py] [_log()] Compression: none
2026-04-15T11:11:14.013 [DEBUG] [Thread-17875] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:11:14.029 [DEBUG] [Thread-17875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:11:14.029 [DEBUG] [Thread-17875] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:11:14.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:11:14.030 [DEBUG] [Thread-17875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:11:14.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:11:14.031 [DEBUG] [Thread-17875] [transport.py] [_log()] userauth is OK
2026-04-15T11:11:14.031 [DEBUG] [Thread-17875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:11:14.031 [DEBUG] [Thread-17875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:11:14.032 [DEBUG] [Thread-17875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:11:14.032 [DEBUG] [Thread-17875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:11:14.056 [INFO] [Thread-17875] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:11:14.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:11:14.639 [DEBUG] [Thread-17875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:11:14.639 [DEBUG] [Thread-17875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:11:14.640 [DEBUG] [Thread-17875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:11:14.680 [DEBUG] [Thread-17875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:11:14.680 [DEBUG] [Thread-17875] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:11:14.685 [DEBUG] [Thread-17875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:11:14.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:11:14.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:11:14.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:11:14.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:11:14.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:11:14.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:11:14.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:11:14.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:11:14.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:11:14.708 [DEBUG] [Thread-17875] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:11:14.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.382420 -999.00  +11.00  11.29     83   +8.40 1 2 1 2 1   888    0 3.57 29.29 ----- 9.7 11.3 286.8 13.1 16.6 -12.1 16.0 -15.1 15.3 -13.5 15.9 -10.9
2026-04-15T11:11:14.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:11:14.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:11:14.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.382420
2026-04-15T11:11:14.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:11:14.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:11:14.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:11:14.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:11:14.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:11:14.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:10:35', tmtdew=3.8889, humidity=77.0401, cloud=0.0, wind=14.045, temperature=12.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:10:41.088', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:11:14.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:11:14.956 [DEBUG] [Thread-17878] [transport.py] [_log()] starting thread (client mode): 0xf13361a0
2026-04-15T11:11:14.956 [DEBUG] [Thread-17878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:11:14.972 [DEBUG] [Thread-17878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:11:14.972 [INFO] [Thread-17878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:11:14.979 [DEBUG] [Thread-17878] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:11:14.980 [DEBUG] [Thread-17878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:11:14.980 [DEBUG] [Thread-17878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:11:14.980 [DEBUG] [Thread-17878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:11:14.980 [DEBUG] [Thread-17878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:11:14.980 [DEBUG] [Thread-17878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:11:14.980 [DEBUG] [Thread-17878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:11:14.980 [DEBUG] [Thread-17878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:11:14.980 [DEBUG] [Thread-17878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:11:14.980 [DEBUG] [Thread-17878] [transport.py] [_log()] client lang: <none>
2026-04-15T11:11:14.980 [DEBUG] [Thread-17878] [transport.py] [_log()] server lang: <none>
2026-04-15T11:11:14.980 [DEBUG] [Thread-17878] [transport.py] [_log()] kex follows: False
2026-04-15T11:11:14.980 [DEBUG] [Thread-17878] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:11:14.981 [DEBUG] [Thread-17878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:11:14.981 [DEBUG] [Thread-17878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:11:14.981 [DEBUG] [Thread-17878] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:11:14.981 [DEBUG] [Thread-17878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:11:14.981 [DEBUG] [Thread-17878] [transport.py] [_log()] Compression: none
2026-04-15T11:11:14.981 [DEBUG] [Thread-17878] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:11:15.036 [DEBUG] [Thread-17878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:11:15.036 [DEBUG] [Thread-17878] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:11:15.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:11:15.037 [DEBUG] [Thread-17878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:11:15.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:11:15.093 [DEBUG] [Thread-17878] [transport.py] [_log()] userauth is OK
2026-04-15T11:11:15.093 [DEBUG] [Thread-17878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:11:15.093 [DEBUG] [Thread-17878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:11:15.094 [DEBUG] [Thread-17878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:11:15.094 [DEBUG] [Thread-17878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:11:15.122 [INFO] [Thread-17878] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:11:15.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:11:15.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:11:15.979 [DEBUG] [Thread-17878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:11:15.980 [DEBUG] [Thread-17878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:11:16.027 [DEBUG] [Thread-17878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:11:16.027 [DEBUG] [Thread-17878] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:11:16.036 [DEBUG] [Thread-17878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:11:16.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:11:16.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')
2026-04-15T11:11:16.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
2026-04-15T11:11:16.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:11:16.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:11:16.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:11:16.070 [DEBUG] [Thread-17878] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:11:26.518 [DEBUG] [Thread-17880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:11:35.567 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:11:35.568 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:11:41.561 [DEBUG] [Thread-17881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:11:46.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:11:46.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:11:46.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
2026-04-15T11:11:47.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 11, 10), 2.79837, 83.4867, 0.0, 12.7922, 11.5419, 0, 1, 0, 2, 0, 0),)
2026-04-15T11:11:47.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:11:10
2026-04-15T11:11:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:11:48.303 [DEBUG] [Thread-17882] [transport.py] [_log()] starting thread (client mode): 0xee904a60
2026-04-15T11:11:48.303 [DEBUG] [Thread-17882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:11:48.324 [DEBUG] [Thread-17882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:11:48.324 [INFO] [Thread-17882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:11:48.327 [DEBUG] [Thread-17882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:11:48.327 [DEBUG] [Thread-17882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:11:48.327 [DEBUG] [Thread-17882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:11:48.327 [DEBUG] [Thread-17882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:11:48.327 [DEBUG] [Thread-17882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:11:48.327 [DEBUG] [Thread-17882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:11:48.327 [DEBUG] [Thread-17882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:11:48.327 [DEBUG] [Thread-17882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:11:48.328 [DEBUG] [Thread-17882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:11:48.328 [DEBUG] [Thread-17882] [transport.py] [_log()] client lang: <none>
2026-04-15T11:11:48.328 [DEBUG] [Thread-17882] [transport.py] [_log()] server lang: <none>
2026-04-15T11:11:48.328 [DEBUG] [Thread-17882] [transport.py] [_log()] kex follows: False
2026-04-15T11:11:48.328 [DEBUG] [Thread-17882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:11:48.328 [DEBUG] [Thread-17882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:11:48.328 [DEBUG] [Thread-17882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:11:48.328 [DEBUG] [Thread-17882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:11:48.328 [DEBUG] [Thread-17882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:11:48.328 [DEBUG] [Thread-17882] [transport.py] [_log()] Compression: none
2026-04-15T11:11:48.328 [DEBUG] [Thread-17882] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:11:48.347 [DEBUG] [Thread-17882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:11:48.347 [DEBUG] [Thread-17882] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:11:48.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:11:48.348 [DEBUG] [Thread-17882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:11:48.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:11:48.349 [DEBUG] [Thread-17882] [transport.py] [_log()] userauth is OK
2026-04-15T11:11:48.349 [DEBUG] [Thread-17882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:11:48.349 [DEBUG] [Thread-17882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:11:48.349 [DEBUG] [Thread-17882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:11:48.349 [DEBUG] [Thread-17882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:11:48.369 [INFO] [Thread-17882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:11:48.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:11:48.915 [DEBUG] [Thread-17882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:11:48.916 [DEBUG] [Thread-17882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:11:48.916 [DEBUG] [Thread-17882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:11:48.956 [DEBUG] [Thread-17882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:11:48.956 [DEBUG] [Thread-17882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:11:48.959 [DEBUG] [Thread-17882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:11:48.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:11:48.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:11:48.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:11:48.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:11:48.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:11:48.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:11:48.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:11:48.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:11:48.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:11:48.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.383114 -999.00  +11.20  15.18     83   +8.50 1 2 1 2 1   888    0 3.37 23.20 ----- 10.0 15.2 276.1 20.0 16.4 -11.5 15.9 -13.3 15.1 -14.6 15.8 -9.9
2026-04-15T11:11:48.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:11:48.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:11:48.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.383114
2026-04-15T11:11:48.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:11:48.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:11:48.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:11:48.979 [DEBUG] [Thread-17882] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:11:48.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:11:48.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:11:48.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:11:10', tmtdew=2.79837, humidity=83.4867, cloud=0.0, wind=12.7922, temperature=11.5419, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:11:41.050', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:11:49.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:11:49.193 [DEBUG] [Thread-17885] [transport.py] [_log()] starting thread (client mode): 0xee9042b0
2026-04-15T11:11:49.194 [DEBUG] [Thread-17885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:11:49.211 [DEBUG] [Thread-17885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:11:49.211 [INFO] [Thread-17885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:11:49.219 [DEBUG] [Thread-17885] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:11:49.219 [DEBUG] [Thread-17885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:11:49.219 [DEBUG] [Thread-17885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:11:49.219 [DEBUG] [Thread-17885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:11:49.220 [DEBUG] [Thread-17885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:11:49.220 [DEBUG] [Thread-17885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:11:49.220 [DEBUG] [Thread-17885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:11:49.220 [DEBUG] [Thread-17885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:11:49.220 [DEBUG] [Thread-17885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:11:49.220 [DEBUG] [Thread-17885] [transport.py] [_log()] client lang: <none>
2026-04-15T11:11:49.220 [DEBUG] [Thread-17885] [transport.py] [_log()] server lang: <none>
2026-04-15T11:11:49.220 [DEBUG] [Thread-17885] [transport.py] [_log()] kex follows: False
2026-04-15T11:11:49.220 [DEBUG] [Thread-17885] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:11:49.220 [DEBUG] [Thread-17885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:11:49.220 [DEBUG] [Thread-17885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:11:49.220 [DEBUG] [Thread-17885] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:11:49.221 [DEBUG] [Thread-17885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:11:49.221 [DEBUG] [Thread-17885] [transport.py] [_log()] Compression: none
2026-04-15T11:11:49.221 [DEBUG] [Thread-17885] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:11:49.276 [DEBUG] [Thread-17885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:11:49.277 [DEBUG] [Thread-17885] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:11:49.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:11:49.277 [DEBUG] [Thread-17885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:11:49.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:11:49.333 [DEBUG] [Thread-17885] [transport.py] [_log()] userauth is OK
2026-04-15T11:11:49.333 [DEBUG] [Thread-17885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:11:49.334 [DEBUG] [Thread-17885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:11:49.334 [DEBUG] [Thread-17885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:11:49.334 [DEBUG] [Thread-17885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:11:49.359 [INFO] [Thread-17885] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:11:49.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:11:49.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:11:50.161 [DEBUG] [Thread-17885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:11:50.161 [DEBUG] [Thread-17885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:11:50.209 [DEBUG] [Thread-17885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:11:50.209 [DEBUG] [Thread-17885] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:11:50.218 [DEBUG] [Thread-17885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:11:50.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:11:50.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')
2026-04-15T11:11:50.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
2026-04-15T11:11:50.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:11:50.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:11:50.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:11:50.253 [DEBUG] [Thread-17885] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:11:56.592 [DEBUG] [Thread-17887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:12:07.096 [DEBUG] [Thread-17888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:12:11.636 [DEBUG] [Thread-17889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:12:20.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:12:20.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:12:20.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:12:21.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 11, 46), 3.82474, 77.3714, 0.0, 16.3735, 12.0165, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:12:21.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:11:46
2026-04-15T11:12:22.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:12:22.497 [DEBUG] [Thread-17890] [transport.py] [_log()] starting thread (client mode): 0xf13fe140
2026-04-15T11:12:22.497 [DEBUG] [Thread-17890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:12:22.511 [DEBUG] [Thread-17890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:12:22.511 [INFO] [Thread-17890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:12:22.514 [DEBUG] [Thread-17890] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:12:22.514 [DEBUG] [Thread-17890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:12:22.514 [DEBUG] [Thread-17890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:12:22.514 [DEBUG] [Thread-17890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:12:22.515 [DEBUG] [Thread-17890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:12:22.515 [DEBUG] [Thread-17890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:12:22.515 [DEBUG] [Thread-17890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:12:22.515 [DEBUG] [Thread-17890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:12:22.515 [DEBUG] [Thread-17890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:12:22.515 [DEBUG] [Thread-17890] [transport.py] [_log()] client lang: <none>
2026-04-15T11:12:22.515 [DEBUG] [Thread-17890] [transport.py] [_log()] server lang: <none>
2026-04-15T11:12:22.515 [DEBUG] [Thread-17890] [transport.py] [_log()] kex follows: False
2026-04-15T11:12:22.515 [DEBUG] [Thread-17890] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:12:22.515 [DEBUG] [Thread-17890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:12:22.515 [DEBUG] [Thread-17890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:12:22.516 [DEBUG] [Thread-17890] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:12:22.516 [DEBUG] [Thread-17890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:12:22.516 [DEBUG] [Thread-17890] [transport.py] [_log()] Compression: none
2026-04-15T11:12:22.516 [DEBUG] [Thread-17890] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:12:22.524 [DEBUG] [Thread-17890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:12:22.525 [DEBUG] [Thread-17890] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:12:22.525 [DEBUG] [Thread-17890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:12:22.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:12:22.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:12:22.526 [DEBUG] [Thread-17890] [transport.py] [_log()] userauth is OK
2026-04-15T11:12:22.526 [DEBUG] [Thread-17890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:12:22.526 [DEBUG] [Thread-17890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:12:22.526 [DEBUG] [Thread-17890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:12:22.526 [DEBUG] [Thread-17890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:12:22.543 [INFO] [Thread-17890] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:12:22.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:12:23.106 [DEBUG] [Thread-17890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:12:23.107 [DEBUG] [Thread-17890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:12:23.107 [DEBUG] [Thread-17890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:12:23.147 [DEBUG] [Thread-17890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:12:23.147 [DEBUG] [Thread-17890] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:12:23.150 [DEBUG] [Thread-17890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:12:23.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:12:23.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:12:23.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:12:23.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:12:23.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:12:23.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:12:23.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:12:23.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:12:23.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:12:23.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.383462 -999.00  +11.30  16.04     83   +8.60 1 2 1 2 1   888    0 3.29 22.14 ----- 13.9 16.0 282.6 20.8 16.2 -11.2 15.8 -12.8 14.9 -14.2 15.7 -9.4
2026-04-15T11:12:23.173 [DEBUG] [Thread-17890] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:12:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:12:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:12:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.383462
2026-04-15T11:12:23.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:12:23.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:12:23.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:12:23.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:12:23.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:12:23.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:11:46', tmtdew=3.82474, humidity=77.3714, cloud=0.0, wind=16.3735, temperature=12.0165, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:12:11.117', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:12:23.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:12:23.401 [DEBUG] [Thread-17893] [transport.py] [_log()] starting thread (client mode): 0xf13e1900
2026-04-15T11:12:23.401 [DEBUG] [Thread-17893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:12:23.416 [DEBUG] [Thread-17893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:12:23.416 [INFO] [Thread-17893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:12:23.423 [DEBUG] [Thread-17893] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:12:23.423 [DEBUG] [Thread-17893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:12:23.423 [DEBUG] [Thread-17893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:12:23.423 [DEBUG] [Thread-17893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:12:23.423 [DEBUG] [Thread-17893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:12:23.424 [DEBUG] [Thread-17893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:12:23.424 [DEBUG] [Thread-17893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:12:23.424 [DEBUG] [Thread-17893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:12:23.424 [DEBUG] [Thread-17893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:12:23.424 [DEBUG] [Thread-17893] [transport.py] [_log()] client lang: <none>
2026-04-15T11:12:23.424 [DEBUG] [Thread-17893] [transport.py] [_log()] server lang: <none>
2026-04-15T11:12:23.424 [DEBUG] [Thread-17893] [transport.py] [_log()] kex follows: False
2026-04-15T11:12:23.424 [DEBUG] [Thread-17893] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:12:23.424 [DEBUG] [Thread-17893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:12:23.424 [DEBUG] [Thread-17893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:12:23.424 [DEBUG] [Thread-17893] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:12:23.424 [DEBUG] [Thread-17893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:12:23.425 [DEBUG] [Thread-17893] [transport.py] [_log()] Compression: none
2026-04-15T11:12:23.425 [DEBUG] [Thread-17893] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:12:23.481 [DEBUG] [Thread-17893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:12:23.481 [DEBUG] [Thread-17893] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:12:23.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:12:23.482 [DEBUG] [Thread-17893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:12:23.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:12:23.542 [DEBUG] [Thread-17893] [transport.py] [_log()] userauth is OK
2026-04-15T11:12:23.542 [DEBUG] [Thread-17893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:12:23.542 [DEBUG] [Thread-17893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:12:23.543 [DEBUG] [Thread-17893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:12:23.543 [DEBUG] [Thread-17893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:12:23.568 [INFO] [Thread-17893] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:12:23.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:12:23.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:12:24.420 [DEBUG] [Thread-17893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:12:24.420 [DEBUG] [Thread-17893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:12:24.468 [DEBUG] [Thread-17893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:12:24.468 [DEBUG] [Thread-17893] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:12:24.477 [DEBUG] [Thread-17893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:12:24.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:12:24.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')
2026-04-15T11:12:24.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
2026-04-15T11:12:24.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:12:24.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:12:24.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:12:24.511 [DEBUG] [Thread-17893] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:12:26.668 [DEBUG] [Thread-17895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:12:35.707 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:12:35.708 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:12:41.712 [DEBUG] [Thread-17896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:12:54.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:12:54.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:12:54.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:12:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 12, 22), 2.97721, 82.1027, 0.0, 17.2044, 11.525, 0, 1, 0, 2, 0, 0),)
2026-04-15T11:12:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:12:22
2026-04-15T11:12:56.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:12:56.593 [DEBUG] [Thread-17897] [transport.py] [_log()] starting thread (client mode): 0xf1367370
2026-04-15T11:12:56.593 [DEBUG] [Thread-17897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:12:56.615 [DEBUG] [Thread-17897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:12:56.615 [INFO] [Thread-17897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:12:56.618 [DEBUG] [Thread-17897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:12:56.619 [DEBUG] [Thread-17897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:12:56.619 [DEBUG] [Thread-17897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:12:56.619 [DEBUG] [Thread-17897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:12:56.619 [DEBUG] [Thread-17897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:12:56.619 [DEBUG] [Thread-17897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:12:56.619 [DEBUG] [Thread-17897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:12:56.619 [DEBUG] [Thread-17897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:12:56.619 [DEBUG] [Thread-17897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:12:56.619 [DEBUG] [Thread-17897] [transport.py] [_log()] client lang: <none>
2026-04-15T11:12:56.619 [DEBUG] [Thread-17897] [transport.py] [_log()] server lang: <none>
2026-04-15T11:12:56.619 [DEBUG] [Thread-17897] [transport.py] [_log()] kex follows: False
2026-04-15T11:12:56.620 [DEBUG] [Thread-17897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:12:56.620 [DEBUG] [Thread-17897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:12:56.620 [DEBUG] [Thread-17897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:12:56.620 [DEBUG] [Thread-17897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:12:56.620 [DEBUG] [Thread-17897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:12:56.620 [DEBUG] [Thread-17897] [transport.py] [_log()] Compression: none
2026-04-15T11:12:56.620 [DEBUG] [Thread-17897] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:12:56.637 [DEBUG] [Thread-17897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:12:56.637 [DEBUG] [Thread-17897] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:12:56.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:12:56.638 [DEBUG] [Thread-17897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:12:56.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:12:56.639 [DEBUG] [Thread-17897] [transport.py] [_log()] userauth is OK
2026-04-15T11:12:56.639 [DEBUG] [Thread-17897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:12:56.639 [DEBUG] [Thread-17897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:12:56.639 [DEBUG] [Thread-17897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:12:56.640 [DEBUG] [Thread-17897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:12:56.657 [INFO] [Thread-17897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:12:56.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:12:56.744 [DEBUG] [Thread-17899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:12:57.258 [DEBUG] [Thread-17897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:12:57.259 [DEBUG] [Thread-17897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:12:57.259 [DEBUG] [Thread-17897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:12:57.299 [DEBUG] [Thread-17897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:12:57.299 [DEBUG] [Thread-17897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:12:57.302 [DEBUG] [Thread-17897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:12:57.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:12:57.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:12:57.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:12:57.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:12:57.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:12:57.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:12:57.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:12:57.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:12:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:12:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.383809 -999.00  +11.30  13.05     83   +8.50 1 2 1 2 1   888    0 3.39 21.94 ----- 17.9 13.1 301.8 16.8 16.2 -9.9 15.7 -12.2 15.1 -10.1 15.7 -8.5
2026-04-15T11:12:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:12:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:12:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.383809
2026-04-15T11:12:57.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:12:57.341 [DEBUG] [Thread-17897] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:12:57.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:12:57.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:12:57.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:12:57.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:12:57.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:12:22', tmtdew=2.97721, humidity=82.1027, cloud=0.0, wind=17.2044, temperature=11.525, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:12:41.098', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:12:57.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:12:57.593 [DEBUG] [Thread-17901] [transport.py] [_log()] starting thread (client mode): 0xee98aaa0
2026-04-15T11:12:57.594 [DEBUG] [Thread-17901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:12:57.607 [DEBUG] [Thread-17901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:12:57.608 [INFO] [Thread-17901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:12:57.615 [DEBUG] [Thread-17901] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:12:57.615 [DEBUG] [Thread-17901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:12:57.615 [DEBUG] [Thread-17901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:12:57.615 [DEBUG] [Thread-17901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:12:57.615 [DEBUG] [Thread-17901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:12:57.615 [DEBUG] [Thread-17901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:12:57.615 [DEBUG] [Thread-17901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:12:57.616 [DEBUG] [Thread-17901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:12:57.616 [DEBUG] [Thread-17901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:12:57.616 [DEBUG] [Thread-17901] [transport.py] [_log()] client lang: <none>
2026-04-15T11:12:57.616 [DEBUG] [Thread-17901] [transport.py] [_log()] server lang: <none>
2026-04-15T11:12:57.616 [DEBUG] [Thread-17901] [transport.py] [_log()] kex follows: False
2026-04-15T11:12:57.616 [DEBUG] [Thread-17901] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:12:57.616 [DEBUG] [Thread-17901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:12:57.616 [DEBUG] [Thread-17901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:12:57.616 [DEBUG] [Thread-17901] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:12:57.616 [DEBUG] [Thread-17901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:12:57.616 [DEBUG] [Thread-17901] [transport.py] [_log()] Compression: none
2026-04-15T11:12:57.617 [DEBUG] [Thread-17901] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:12:57.673 [DEBUG] [Thread-17901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:12:57.673 [DEBUG] [Thread-17901] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:12:57.674 [DEBUG] [Thread-17901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:12:57.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:12:57.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:12:57.731 [DEBUG] [Thread-17901] [transport.py] [_log()] userauth is OK
2026-04-15T11:12:57.731 [DEBUG] [Thread-17901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:12:57.731 [DEBUG] [Thread-17901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:12:57.731 [DEBUG] [Thread-17901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:12:57.731 [DEBUG] [Thread-17901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:12:57.750 [INFO] [Thread-17901] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:12:57.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:12:57.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:12:58.568 [DEBUG] [Thread-17901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:12:58.568 [DEBUG] [Thread-17901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:12:58.616 [DEBUG] [Thread-17901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:12:58.616 [DEBUG] [Thread-17901] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:12:58.625 [DEBUG] [Thread-17901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:12:58.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:12:58.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')
2026-04-15T11:12:58.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
2026-04-15T11:12:58.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:12:58.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:12:58.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:12:58.664 [DEBUG] [Thread-17901] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:13:07.202 [DEBUG] [Thread-17903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:13:11.776 [DEBUG] [Thread-17904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:13:26.820 [DEBUG] [Thread-17905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:13:28.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:13:28.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:13:28.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
2026-04-15T11:13:29.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 12, 57), 3.17406, 80.6193, 0.0, 16.4275, 11.225, 0, 1, 0, 2, 0, 0),)
2026-04-15T11:13:29.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:12:57
2026-04-15T11:13:30.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:13:30.765 [DEBUG] [Thread-17906] [transport.py] [_log()] starting thread (client mode): 0xee988700
2026-04-15T11:13:30.766 [DEBUG] [Thread-17906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:13:30.784 [DEBUG] [Thread-17906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:13:30.785 [INFO] [Thread-17906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:13:30.786 [DEBUG] [Thread-17906] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:13:30.786 [DEBUG] [Thread-17906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:13:30.786 [DEBUG] [Thread-17906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:13:30.786 [DEBUG] [Thread-17906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:13:30.787 [DEBUG] [Thread-17906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:13:30.787 [DEBUG] [Thread-17906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:13:30.787 [DEBUG] [Thread-17906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:13:30.787 [DEBUG] [Thread-17906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:13:30.787 [DEBUG] [Thread-17906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:13:30.787 [DEBUG] [Thread-17906] [transport.py] [_log()] client lang: <none>
2026-04-15T11:13:30.787 [DEBUG] [Thread-17906] [transport.py] [_log()] server lang: <none>
2026-04-15T11:13:30.787 [DEBUG] [Thread-17906] [transport.py] [_log()] kex follows: False
2026-04-15T11:13:30.787 [DEBUG] [Thread-17906] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:13:30.787 [DEBUG] [Thread-17906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:13:30.787 [DEBUG] [Thread-17906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:13:30.787 [DEBUG] [Thread-17906] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:13:30.787 [DEBUG] [Thread-17906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:13:30.788 [DEBUG] [Thread-17906] [transport.py] [_log()] Compression: none
2026-04-15T11:13:30.788 [DEBUG] [Thread-17906] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:13:30.797 [DEBUG] [Thread-17906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:13:30.797 [DEBUG] [Thread-17906] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:13:30.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:13:30.798 [DEBUG] [Thread-17906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:13:30.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:13:30.799 [DEBUG] [Thread-17906] [transport.py] [_log()] userauth is OK
2026-04-15T11:13:30.799 [DEBUG] [Thread-17906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:13:30.799 [DEBUG] [Thread-17906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:13:30.799 [DEBUG] [Thread-17906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:13:30.799 [DEBUG] [Thread-17906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:13:30.821 [INFO] [Thread-17906] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:13:30.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:13:31.463 [DEBUG] [Thread-17906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:13:31.464 [DEBUG] [Thread-17906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:13:31.464 [DEBUG] [Thread-17906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:13:31.505 [DEBUG] [Thread-17906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:13:31.505 [DEBUG] [Thread-17906] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:13:31.508 [DEBUG] [Thread-17906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:13:31.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:13:31.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:13:31.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:13:31.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:13:31.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:13:31.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:13:31.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:13:31.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:13:31.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:13:31.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.384156 -999.00  +11.30  15.81     83   +8.60 1 2 1 2 1   888    0 3.39 21.76 ----- 14.8 15.8 303.4 20.2 16.2 -9.7 15.7 -11.8 15.0 -9.9 15.6 -8.7
2026-04-15T11:13:31.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:13:31.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:13:31.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.384156
2026-04-15T11:13:31.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:13:31.526 [DEBUG] [Thread-17906] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:13:31.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:13:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:13:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:13:31.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:13:31.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:12:57', tmtdew=3.17406, humidity=80.6193, cloud=0.0, wind=16.4275, temperature=11.225, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:13:11.078', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:13:31.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:13:31.782 [DEBUG] [Thread-17909] [transport.py] [_log()] starting thread (client mode): 0xee9efeb0
2026-04-15T11:13:31.782 [DEBUG] [Thread-17909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:13:31.797 [DEBUG] [Thread-17909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:13:31.797 [INFO] [Thread-17909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:13:31.804 [DEBUG] [Thread-17909] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:13:31.804 [DEBUG] [Thread-17909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:13:31.804 [DEBUG] [Thread-17909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:13:31.805 [DEBUG] [Thread-17909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:13:31.805 [DEBUG] [Thread-17909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:13:31.805 [DEBUG] [Thread-17909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:13:31.805 [DEBUG] [Thread-17909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:13:31.805 [DEBUG] [Thread-17909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:13:31.805 [DEBUG] [Thread-17909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:13:31.805 [DEBUG] [Thread-17909] [transport.py] [_log()] client lang: <none>
2026-04-15T11:13:31.805 [DEBUG] [Thread-17909] [transport.py] [_log()] server lang: <none>
2026-04-15T11:13:31.805 [DEBUG] [Thread-17909] [transport.py] [_log()] kex follows: False
2026-04-15T11:13:31.805 [DEBUG] [Thread-17909] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:13:31.805 [DEBUG] [Thread-17909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:13:31.806 [DEBUG] [Thread-17909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:13:31.806 [DEBUG] [Thread-17909] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:13:31.806 [DEBUG] [Thread-17909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:13:31.806 [DEBUG] [Thread-17909] [transport.py] [_log()] Compression: none
2026-04-15T11:13:31.806 [DEBUG] [Thread-17909] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:13:31.861 [DEBUG] [Thread-17909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:13:31.862 [DEBUG] [Thread-17909] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:13:31.862 [DEBUG] [Thread-17909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:13:31.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:13:31.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:13:31.918 [DEBUG] [Thread-17909] [transport.py] [_log()] userauth is OK
2026-04-15T11:13:31.918 [DEBUG] [Thread-17909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:13:31.918 [DEBUG] [Thread-17909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:13:31.919 [DEBUG] [Thread-17909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:13:31.919 [DEBUG] [Thread-17909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:13:31.944 [INFO] [Thread-17909] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:13:31.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:13:31.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:13:32.764 [DEBUG] [Thread-17909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:13:32.764 [DEBUG] [Thread-17909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:13:32.812 [DEBUG] [Thread-17909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:13:32.812 [DEBUG] [Thread-17909] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:13:32.821 [DEBUG] [Thread-17909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:13:32.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:13:32.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')
2026-04-15T11:13:32.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
2026-04-15T11:13:32.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:13:32.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:13:32.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:13:32.858 [DEBUG] [Thread-17909] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:13:35.847 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:13:35.849 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:13:41.851 [DEBUG] [Thread-17911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:13:56.897 [DEBUG] [Thread-17912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:14:02.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:14:02.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:14: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
2026-04-15T11:14:04.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 13, 32), 3.75753, 77.7351, 0.0, 14.3273, 12.082, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:14:04.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:13:32
2026-04-15T11:14:04.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:14:04.999 [DEBUG] [Thread-17913] [transport.py] [_log()] starting thread (client mode): 0xf13642e0
2026-04-15T11:14:04.999 [DEBUG] [Thread-17913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:14:05.014 [DEBUG] [Thread-17913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:14:05.014 [INFO] [Thread-17913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:14:05.016 [DEBUG] [Thread-17913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:14:05.016 [DEBUG] [Thread-17913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:14:05.016 [DEBUG] [Thread-17913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:14:05.016 [DEBUG] [Thread-17913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:14:05.016 [DEBUG] [Thread-17913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:14:05.016 [DEBUG] [Thread-17913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:14:05.016 [DEBUG] [Thread-17913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:14:05.016 [DEBUG] [Thread-17913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:14:05.016 [DEBUG] [Thread-17913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:14:05.016 [DEBUG] [Thread-17913] [transport.py] [_log()] client lang: <none>
2026-04-15T11:14:05.016 [DEBUG] [Thread-17913] [transport.py] [_log()] server lang: <none>
2026-04-15T11:14:05.016 [DEBUG] [Thread-17913] [transport.py] [_log()] kex follows: False
2026-04-15T11:14:05.016 [DEBUG] [Thread-17913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:14:05.016 [DEBUG] [Thread-17913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:14:05.017 [DEBUG] [Thread-17913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:14:05.017 [DEBUG] [Thread-17913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:14:05.017 [DEBUG] [Thread-17913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:14:05.017 [DEBUG] [Thread-17913] [transport.py] [_log()] Compression: none
2026-04-15T11:14:05.017 [DEBUG] [Thread-17913] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:14:05.026 [DEBUG] [Thread-17913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:14:05.026 [DEBUG] [Thread-17913] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:14:05.027 [DEBUG] [Thread-17913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:14:05.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:14:05.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:14:05.028 [DEBUG] [Thread-17913] [transport.py] [_log()] userauth is OK
2026-04-15T11:14:05.028 [DEBUG] [Thread-17913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:14:05.028 [DEBUG] [Thread-17913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:14:05.028 [DEBUG] [Thread-17913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:14:05.028 [DEBUG] [Thread-17913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:14:05.047 [INFO] [Thread-17913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:14:05.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:14:05.648 [DEBUG] [Thread-17913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:14:05.648 [DEBUG] [Thread-17913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:14:05.649 [DEBUG] [Thread-17913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:14:05.689 [DEBUG] [Thread-17913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:14:05.689 [DEBUG] [Thread-17913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:14:05.692 [DEBUG] [Thread-17913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:14:05.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:14:05.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:14:05.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:14:05.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:14:05.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:14:05.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:14:05.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:14:05.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:14:05.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:14:05.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.384503 -999.00  +11.40  16.02     83   +8.70 1 2 1 2 1   888    0 3.35 20.24 ----- 19.9 16.0 306.2 19.9 16.1 -9.9 15.7 -11.9 15.1 -10.2 15.6 -8.4
2026-04-15T11:14:05.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:14:05.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:14:05.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.384503
2026-04-15T11:14:05.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:14:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:14:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:14:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:14:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:14:05.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:13:32', tmtdew=3.75753, humidity=77.7351, cloud=0.0, wind=14.3273, temperature=12.082, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:13:41.059', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:14:05.724 [DEBUG] [Thread-17913] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:14:05.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:14:05.959 [DEBUG] [Thread-17916] [transport.py] [_log()] starting thread (client mode): 0xf1364ac0
2026-04-15T11:14:05.959 [DEBUG] [Thread-17916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:14:05.972 [DEBUG] [Thread-17916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:14:05.972 [INFO] [Thread-17916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:14:05.979 [DEBUG] [Thread-17916] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:14:05.980 [DEBUG] [Thread-17916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:14:05.980 [DEBUG] [Thread-17916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:14:05.980 [DEBUG] [Thread-17916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:14:05.980 [DEBUG] [Thread-17916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:14:05.980 [DEBUG] [Thread-17916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:14:05.980 [DEBUG] [Thread-17916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:14:05.980 [DEBUG] [Thread-17916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:14:05.980 [DEBUG] [Thread-17916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:14:05.980 [DEBUG] [Thread-17916] [transport.py] [_log()] client lang: <none>
2026-04-15T11:14:05.980 [DEBUG] [Thread-17916] [transport.py] [_log()] server lang: <none>
2026-04-15T11:14:05.980 [DEBUG] [Thread-17916] [transport.py] [_log()] kex follows: False
2026-04-15T11:14:05.981 [DEBUG] [Thread-17916] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:14:05.981 [DEBUG] [Thread-17916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:14:05.981 [DEBUG] [Thread-17916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:14:05.981 [DEBUG] [Thread-17916] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:14:05.981 [DEBUG] [Thread-17916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:14:05.981 [DEBUG] [Thread-17916] [transport.py] [_log()] Compression: none
2026-04-15T11:14:05.981 [DEBUG] [Thread-17916] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:14:06.042 [DEBUG] [Thread-17916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:14:06.042 [DEBUG] [Thread-17916] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:14:06.043 [DEBUG] [Thread-17916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:14:06.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:14:06.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:14:06.103 [DEBUG] [Thread-17916] [transport.py] [_log()] userauth is OK
2026-04-15T11:14:06.103 [DEBUG] [Thread-17916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:14:06.103 [DEBUG] [Thread-17916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:14:06.103 [DEBUG] [Thread-17916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:14:06.103 [DEBUG] [Thread-17916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:14:06.129 [INFO] [Thread-17916] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:14:06.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:14:06.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:14:06.899 [DEBUG] [Thread-17916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:14:06.900 [DEBUG] [Thread-17916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:14:06.947 [DEBUG] [Thread-17916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:14:06.947 [DEBUG] [Thread-17916] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:14:06.956 [DEBUG] [Thread-17916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:14:06.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:14:06.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')
2026-04-15T11:14:06.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
2026-04-15T11:14:06.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:14:06.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:14:06.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:14:06.991 [DEBUG] [Thread-17916] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:14:07.308 [DEBUG] [Thread-17918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:14:11.929 [DEBUG] [Thread-17919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:14:26.977 [DEBUG] [Thread-17920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:14:35.989 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:14:35.990 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:14:37.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:14:37.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:14:37.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:14:38.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 14, 9), 3.08239, 81.351, 0.0, 16.4812, 11.5576, 0, 1, 0, 2, 0, 0),)
2026-04-15T11:14:38.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:14:09
2026-04-15T11:14:38.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:14:39.221 [DEBUG] [Thread-17921] [transport.py] [_log()] starting thread (client mode): 0xee988040
2026-04-15T11:14:39.221 [DEBUG] [Thread-17921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:14:39.239 [DEBUG] [Thread-17921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:14:39.239 [INFO] [Thread-17921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:14:39.242 [DEBUG] [Thread-17921] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:14:39.242 [DEBUG] [Thread-17921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:14:39.243 [DEBUG] [Thread-17921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:14:39.243 [DEBUG] [Thread-17921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:14:39.243 [DEBUG] [Thread-17921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:14:39.243 [DEBUG] [Thread-17921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:14:39.243 [DEBUG] [Thread-17921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:14:39.243 [DEBUG] [Thread-17921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:14:39.243 [DEBUG] [Thread-17921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:14:39.243 [DEBUG] [Thread-17921] [transport.py] [_log()] client lang: <none>
2026-04-15T11:14:39.243 [DEBUG] [Thread-17921] [transport.py] [_log()] server lang: <none>
2026-04-15T11:14:39.243 [DEBUG] [Thread-17921] [transport.py] [_log()] kex follows: False
2026-04-15T11:14:39.243 [DEBUG] [Thread-17921] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:14:39.243 [DEBUG] [Thread-17921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:14:39.244 [DEBUG] [Thread-17921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:14:39.244 [DEBUG] [Thread-17921] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:14:39.244 [DEBUG] [Thread-17921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:14:39.244 [DEBUG] [Thread-17921] [transport.py] [_log()] Compression: none
2026-04-15T11:14:39.244 [DEBUG] [Thread-17921] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:14:39.256 [DEBUG] [Thread-17921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:14:39.256 [DEBUG] [Thread-17921] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:14:39.256 [DEBUG] [Thread-17921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:14:39.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:14:39.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:14:39.258 [DEBUG] [Thread-17921] [transport.py] [_log()] userauth is OK
2026-04-15T11:14:39.258 [DEBUG] [Thread-17921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:14:39.258 [DEBUG] [Thread-17921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:14:39.258 [DEBUG] [Thread-17921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:14:39.258 [DEBUG] [Thread-17921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:14:39.276 [INFO] [Thread-17921] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:14:39.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:14:39.905 [DEBUG] [Thread-17921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:14:39.905 [DEBUG] [Thread-17921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:14:39.906 [DEBUG] [Thread-17921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:14:39.946 [DEBUG] [Thread-17921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:14:39.946 [DEBUG] [Thread-17921] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:14:39.949 [DEBUG] [Thread-17921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:14:39.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:14:39.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:14:39.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:14:39.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:14:39.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:14:39.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:14:39.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:14:39.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:14:39.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:14:39.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.384850 -999.00  +11.20  19.56     82   +8.30 1 2 1 2 1   888    0 3.35 20.54 ----- 18.8 19.6 295.0 24.4 16.1 -9.7 15.6 -11.1 15.0 -10.8 15.6 -9.0
2026-04-15T11:14:39.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:14:39.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:14:39.973 [DEBUG] [Thread-17921] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:14:39.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.384850
2026-04-15T11:14:39.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:14:39.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:14:39.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:14:39.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:14:39.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:14:39.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:14:09', tmtdew=3.08239, humidity=81.351, cloud=0.0, wind=16.4812, temperature=11.5576, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:14:11.040', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:14:40.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:14:40.232 [DEBUG] [Thread-17924] [transport.py] [_log()] starting thread (client mode): 0xee91c940
2026-04-15T11:14:40.232 [DEBUG] [Thread-17924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:14:40.248 [DEBUG] [Thread-17924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:14:40.248 [INFO] [Thread-17924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:14:40.258 [DEBUG] [Thread-17924] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] client lang: <none>
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] server lang: <none>
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] kex follows: False
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:14:40.259 [DEBUG] [Thread-17924] [transport.py] [_log()] Compression: none
2026-04-15T11:14:40.260 [DEBUG] [Thread-17924] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:14:40.321 [DEBUG] [Thread-17924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:14:40.322 [DEBUG] [Thread-17924] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:14:40.322 [DEBUG] [Thread-17924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:14:40.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:14:40.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:14:40.379 [DEBUG] [Thread-17924] [transport.py] [_log()] userauth is OK
2026-04-15T11:14:40.379 [DEBUG] [Thread-17924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:14:40.379 [DEBUG] [Thread-17924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:14:40.379 [DEBUG] [Thread-17924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:14:40.379 [DEBUG] [Thread-17924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:14:40.404 [INFO] [Thread-17924] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:14:40.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:14:40.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:14:41.257 [DEBUG] [Thread-17924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:14:41.257 [DEBUG] [Thread-17924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:14:41.305 [DEBUG] [Thread-17924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:14:41.305 [DEBUG] [Thread-17924] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:14:41.314 [DEBUG] [Thread-17924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:14:41.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:14: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')
2026-04-15T11:14: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
2026-04-15T11:14:41.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:14:41.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:14:41.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:14:41.349 [DEBUG] [Thread-17924] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:14:42.008 [DEBUG] [Thread-17926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:14:57.057 [DEBUG] [Thread-17927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:15:07.420 [DEBUG] [Thread-17928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:15:11.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:15:11.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:15:11.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
2026-04-15T11:15:12.089 [DEBUG] [Thread-17929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:15:12.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 14, 44), 3.67538, 78.1987, 0.0, 18.2081, 12.2804, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:15:12.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:14:44
2026-04-15T11:15:12.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:15:13.448 [DEBUG] [Thread-17930] [transport.py] [_log()] starting thread (client mode): 0xee9053c0
2026-04-15T11:15:13.448 [DEBUG] [Thread-17930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:15:13.463 [DEBUG] [Thread-17930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:15:13.463 [INFO] [Thread-17930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:15:13.466 [DEBUG] [Thread-17930] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:15:13.466 [DEBUG] [Thread-17930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:15:13.466 [DEBUG] [Thread-17930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:15:13.467 [DEBUG] [Thread-17930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:15:13.467 [DEBUG] [Thread-17930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:15:13.467 [DEBUG] [Thread-17930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:15:13.467 [DEBUG] [Thread-17930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:15:13.467 [DEBUG] [Thread-17930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:15:13.467 [DEBUG] [Thread-17930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:15:13.467 [DEBUG] [Thread-17930] [transport.py] [_log()] client lang: <none>
2026-04-15T11:15:13.467 [DEBUG] [Thread-17930] [transport.py] [_log()] server lang: <none>
2026-04-15T11:15:13.467 [DEBUG] [Thread-17930] [transport.py] [_log()] kex follows: False
2026-04-15T11:15:13.467 [DEBUG] [Thread-17930] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:15:13.467 [DEBUG] [Thread-17930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:15:13.468 [DEBUG] [Thread-17930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:15:13.468 [DEBUG] [Thread-17930] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:15:13.468 [DEBUG] [Thread-17930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:15:13.468 [DEBUG] [Thread-17930] [transport.py] [_log()] Compression: none
2026-04-15T11:15:13.468 [DEBUG] [Thread-17930] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:15:13.481 [DEBUG] [Thread-17930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:15:13.481 [DEBUG] [Thread-17930] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:15:13.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:15:13.482 [DEBUG] [Thread-17930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:15:13.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:15:13.483 [DEBUG] [Thread-17930] [transport.py] [_log()] userauth is OK
2026-04-15T11:15:13.483 [DEBUG] [Thread-17930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:15:13.483 [DEBUG] [Thread-17930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:15:13.483 [DEBUG] [Thread-17930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:15:13.483 [DEBUG] [Thread-17930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:15:13.500 [INFO] [Thread-17930] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:15:13.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:15:14.077 [DEBUG] [Thread-17930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:15:14.077 [DEBUG] [Thread-17930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:15:14.078 [DEBUG] [Thread-17930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:15:14.118 [DEBUG] [Thread-17930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:15:14.118 [DEBUG] [Thread-17930] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:15:14.121 [DEBUG] [Thread-17930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:15:14.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:15:14.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:15:14.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:15:14.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:15:14.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:15:14.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:15:14.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:15:14.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:15:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:15:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.385198 -999.00  +11.20  15.60     83   +8.50 1 2 1 2 1   888    0 3.39 20.65 ----- 13.3 15.6 298.8 26.4 16.0 -9.7 15.6 -11.1 15.0 -9.2 15.5 -8.8
2026-04-15T11:15:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:15:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:15:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.385198
2026-04-15T11:15:14.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:15:14.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:15:14.145 [DEBUG] [Thread-17930] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:15:14.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:15:14.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:15:14.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:15:14.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:14:44', tmtdew=3.67538, humidity=78.1987, cloud=0.0, wind=18.2081, temperature=12.2804, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:14:41.107', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:15:14.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:15:14.398 [DEBUG] [Thread-17933] [transport.py] [_log()] starting thread (client mode): 0xee98a620
2026-04-15T11:15:14.398 [DEBUG] [Thread-17933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:15:14.413 [DEBUG] [Thread-17933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:15:14.413 [INFO] [Thread-17933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:15:14.420 [DEBUG] [Thread-17933] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:15:14.420 [DEBUG] [Thread-17933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:15:14.420 [DEBUG] [Thread-17933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:15:14.421 [DEBUG] [Thread-17933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:15:14.421 [DEBUG] [Thread-17933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:15:14.421 [DEBUG] [Thread-17933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:15:14.421 [DEBUG] [Thread-17933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:15:14.421 [DEBUG] [Thread-17933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:15:14.421 [DEBUG] [Thread-17933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:15:14.421 [DEBUG] [Thread-17933] [transport.py] [_log()] client lang: <none>
2026-04-15T11:15:14.421 [DEBUG] [Thread-17933] [transport.py] [_log()] server lang: <none>
2026-04-15T11:15:14.421 [DEBUG] [Thread-17933] [transport.py] [_log()] kex follows: False
2026-04-15T11:15:14.421 [DEBUG] [Thread-17933] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:15:14.421 [DEBUG] [Thread-17933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:15:14.421 [DEBUG] [Thread-17933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:15:14.422 [DEBUG] [Thread-17933] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:15:14.422 [DEBUG] [Thread-17933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:15:14.422 [DEBUG] [Thread-17933] [transport.py] [_log()] Compression: none
2026-04-15T11:15:14.422 [DEBUG] [Thread-17933] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:15:14.478 [DEBUG] [Thread-17933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:15:14.478 [DEBUG] [Thread-17933] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:15:14.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:15:14.479 [DEBUG] [Thread-17933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:15:14.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:15:14.536 [DEBUG] [Thread-17933] [transport.py] [_log()] userauth is OK
2026-04-15T11:15:14.537 [DEBUG] [Thread-17933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:15:14.537 [DEBUG] [Thread-17933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:15:14.537 [DEBUG] [Thread-17933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:15:14.537 [DEBUG] [Thread-17933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:15:14.566 [INFO] [Thread-17933] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:15:14.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:15:14.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:15:15.448 [DEBUG] [Thread-17933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:15:15.449 [DEBUG] [Thread-17933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:15:15.496 [DEBUG] [Thread-17933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:15:15.496 [DEBUG] [Thread-17933] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:15:15.505 [DEBUG] [Thread-17933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:15:15.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:15:15.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')
2026-04-15T11:15:15.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
2026-04-15T11:15:15.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:15:15.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:15:15.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:15:15.539 [DEBUG] [Thread-17933] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:15:27.120 [DEBUG] [Thread-17935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:15:36.128 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:15:36.129 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:15:42.169 [DEBUG] [Thread-17936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:15:45.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:15:45.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:15:45.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
2026-04-15T11:15:46.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 15, 20), 3.36613, 79.9195, 0.0, 11.6104, 11.457, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:15:46.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:15:20
2026-04-15T11:15:47.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:15:47.733 [DEBUG] [Thread-17937] [transport.py] [_log()] starting thread (client mode): 0xf13fdea0
2026-04-15T11:15:47.733 [DEBUG] [Thread-17937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:15:47.752 [DEBUG] [Thread-17937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:15:47.753 [INFO] [Thread-17937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:15:47.756 [DEBUG] [Thread-17937] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:15:47.756 [DEBUG] [Thread-17937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:15:47.756 [DEBUG] [Thread-17937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:15:47.756 [DEBUG] [Thread-17937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:15:47.756 [DEBUG] [Thread-17937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:15:47.756 [DEBUG] [Thread-17937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:15:47.756 [DEBUG] [Thread-17937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:15:47.756 [DEBUG] [Thread-17937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:15:47.756 [DEBUG] [Thread-17937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:15:47.756 [DEBUG] [Thread-17937] [transport.py] [_log()] client lang: <none>
2026-04-15T11:15:47.756 [DEBUG] [Thread-17937] [transport.py] [_log()] server lang: <none>
2026-04-15T11:15:47.757 [DEBUG] [Thread-17937] [transport.py] [_log()] kex follows: False
2026-04-15T11:15:47.757 [DEBUG] [Thread-17937] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:15:47.757 [DEBUG] [Thread-17937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:15:47.757 [DEBUG] [Thread-17937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:15:47.757 [DEBUG] [Thread-17937] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:15:47.757 [DEBUG] [Thread-17937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:15:47.757 [DEBUG] [Thread-17937] [transport.py] [_log()] Compression: none
2026-04-15T11:15:47.757 [DEBUG] [Thread-17937] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:15:47.772 [DEBUG] [Thread-17937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:15:47.772 [DEBUG] [Thread-17937] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:15:47.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:15:47.773 [DEBUG] [Thread-17937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:15:47.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:15:47.774 [DEBUG] [Thread-17937] [transport.py] [_log()] userauth is OK
2026-04-15T11:15:47.774 [DEBUG] [Thread-17937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:15:47.774 [DEBUG] [Thread-17937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:15:47.774 [DEBUG] [Thread-17937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:15:47.775 [DEBUG] [Thread-17937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:15:47.799 [INFO] [Thread-17937] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:15:47.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:15:48.396 [DEBUG] [Thread-17937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:15:48.396 [DEBUG] [Thread-17937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:15:48.397 [DEBUG] [Thread-17937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:15:48.437 [DEBUG] [Thread-17937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:15:48.437 [DEBUG] [Thread-17937] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:15:48.439 [DEBUG] [Thread-17937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:15:48.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:15:48.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:15:48.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:15:48.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:15:48.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:15:48.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:15:48.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:15:48.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:15:48.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:15:48.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.385892 -999.00  +11.20  17.32     82   +8.30 1 2 1 2 1   888    0 3.30 17.67 ----- 16.2 17.3 300.2 21.9 16.0 -10.2 15.5 -10.9 14.8 -9.4 15.5 -8.8
2026-04-15T11:15:48.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:15:48.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:15:48.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.385892
2026-04-15T11:15:48.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:15:48.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:15:48.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:15:48.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:15:48.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:15:48.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:15:20', tmtdew=3.36613, humidity=79.9195, cloud=0.0, wind=11.6104, temperature=11.457, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:15:41.069', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:15:48.469 [DEBUG] [Thread-17937] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:15:48.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:15:48.716 [DEBUG] [Thread-17940] [transport.py] [_log()] starting thread (client mode): 0xf13c9690
2026-04-15T11:15:48.717 [DEBUG] [Thread-17940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:15:48.731 [DEBUG] [Thread-17940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:15:48.731 [INFO] [Thread-17940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:15:48.738 [DEBUG] [Thread-17940] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:15:48.738 [DEBUG] [Thread-17940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:15:48.739 [DEBUG] [Thread-17940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:15:48.739 [DEBUG] [Thread-17940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:15:48.739 [DEBUG] [Thread-17940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:15:48.739 [DEBUG] [Thread-17940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:15:48.739 [DEBUG] [Thread-17940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:15:48.739 [DEBUG] [Thread-17940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:15:48.739 [DEBUG] [Thread-17940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:15:48.739 [DEBUG] [Thread-17940] [transport.py] [_log()] client lang: <none>
2026-04-15T11:15:48.739 [DEBUG] [Thread-17940] [transport.py] [_log()] server lang: <none>
2026-04-15T11:15:48.739 [DEBUG] [Thread-17940] [transport.py] [_log()] kex follows: False
2026-04-15T11:15:48.739 [DEBUG] [Thread-17940] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:15:48.739 [DEBUG] [Thread-17940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:15:48.740 [DEBUG] [Thread-17940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:15:48.740 [DEBUG] [Thread-17940] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:15:48.740 [DEBUG] [Thread-17940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:15:48.740 [DEBUG] [Thread-17940] [transport.py] [_log()] Compression: none
2026-04-15T11:15:48.740 [DEBUG] [Thread-17940] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:15:48.798 [DEBUG] [Thread-17940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:15:48.799 [DEBUG] [Thread-17940] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:15:48.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:15:48.800 [DEBUG] [Thread-17940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:15:48.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:15:48.855 [DEBUG] [Thread-17940] [transport.py] [_log()] userauth is OK
2026-04-15T11:15:48.855 [DEBUG] [Thread-17940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:15:48.856 [DEBUG] [Thread-17940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:15:48.856 [DEBUG] [Thread-17940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:15:48.856 [DEBUG] [Thread-17940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:15:48.884 [INFO] [Thread-17940] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:15:48.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:15:48.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:15:49.737 [DEBUG] [Thread-17940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:15:49.738 [DEBUG] [Thread-17940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:15:49.785 [DEBUG] [Thread-17940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:15:49.785 [DEBUG] [Thread-17940] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:15:49.794 [DEBUG] [Thread-17940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:15:49.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:15:49.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')
2026-04-15T11:15:49.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') -> 00000000
2026-04-15T11:15:49.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:15:49.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:15:49.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:15:49.828 [DEBUG] [Thread-17940] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:15:57.201 [DEBUG] [Thread-17942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:16:07.544 [DEBUG] [Thread-17943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:16:12.246 [DEBUG] [Thread-17944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:16:19.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:16:19.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:16: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
2026-04-15T11:16:21.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 15, 56), 3.36415, 79.9196, 0.0, 15.5801, 11.5407, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:16:21.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:15:56
2026-04-15T11:16:21.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:16:22.051 [DEBUG] [Thread-17945] [transport.py] [_log()] starting thread (client mode): 0xf13c8c70
2026-04-15T11:16:22.051 [DEBUG] [Thread-17945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:16:22.071 [DEBUG] [Thread-17945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:16:22.071 [INFO] [Thread-17945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:16:22.074 [DEBUG] [Thread-17945] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:16:22.074 [DEBUG] [Thread-17945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:16:22.074 [DEBUG] [Thread-17945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:16:22.074 [DEBUG] [Thread-17945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:16:22.074 [DEBUG] [Thread-17945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:16:22.074 [DEBUG] [Thread-17945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:16:22.074 [DEBUG] [Thread-17945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:16:22.075 [DEBUG] [Thread-17945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:16:22.075 [DEBUG] [Thread-17945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:16:22.075 [DEBUG] [Thread-17945] [transport.py] [_log()] client lang: <none>
2026-04-15T11:16:22.075 [DEBUG] [Thread-17945] [transport.py] [_log()] server lang: <none>
2026-04-15T11:16:22.075 [DEBUG] [Thread-17945] [transport.py] [_log()] kex follows: False
2026-04-15T11:16:22.075 [DEBUG] [Thread-17945] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:16:22.075 [DEBUG] [Thread-17945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:16:22.075 [DEBUG] [Thread-17945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:16:22.075 [DEBUG] [Thread-17945] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:16:22.075 [DEBUG] [Thread-17945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:16:22.075 [DEBUG] [Thread-17945] [transport.py] [_log()] Compression: none
2026-04-15T11:16:22.076 [DEBUG] [Thread-17945] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:16:22.092 [DEBUG] [Thread-17945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:16:22.093 [DEBUG] [Thread-17945] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:16:22.094 [DEBUG] [Thread-17945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:16:22.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:16:22.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:16:22.136 [DEBUG] [Thread-17945] [transport.py] [_log()] userauth is OK
2026-04-15T11:16:22.136 [DEBUG] [Thread-17945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:16:22.136 [DEBUG] [Thread-17945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:16:22.136 [DEBUG] [Thread-17945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:16:22.137 [DEBUG] [Thread-17945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:16:22.160 [INFO] [Thread-17945] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:16:22.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:16:22.711 [DEBUG] [Thread-17945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:16:22.711 [DEBUG] [Thread-17945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:16:22.712 [DEBUG] [Thread-17945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:16:22.751 [DEBUG] [Thread-17945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:16:22.752 [DEBUG] [Thread-17945] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:16:22.754 [DEBUG] [Thread-17945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:16:22.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:16:22.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:16:22.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:16:22.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:16:22.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:16:22.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:16:22.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:16:22.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:16:22.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:16:22.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.386239 -999.00  +11.20  16.14     83   +8.40 1 2 1 2 1   888    0 3.27 16.77 ----- 13.8 16.1 293.8 19.6 15.9 -10.2 15.6 -10.8 14.9 -10.4 15.5 -9.2
2026-04-15T11:16:22.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:16:22.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:16:22.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.386239
2026-04-15T11:16:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:16:22.767 [DEBUG] [Thread-17945] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:16:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:16:22.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:16:22.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:16:22.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:16:22.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:15:56', tmtdew=3.36415, humidity=79.9196, cloud=0.0, wind=15.5801, temperature=11.5407, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:16:11.050', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:16:22.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:16:22.984 [DEBUG] [Thread-17948] [transport.py] [_log()] starting thread (client mode): 0xf13e1780
2026-04-15T11:16:22.984 [DEBUG] [Thread-17948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:16:22.998 [DEBUG] [Thread-17948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:16:22.998 [INFO] [Thread-17948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:16:23.005 [DEBUG] [Thread-17948] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:16:23.006 [DEBUG] [Thread-17948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:16:23.006 [DEBUG] [Thread-17948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:16:23.006 [DEBUG] [Thread-17948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:16:23.006 [DEBUG] [Thread-17948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:16:23.006 [DEBUG] [Thread-17948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:16:23.006 [DEBUG] [Thread-17948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:16:23.006 [DEBUG] [Thread-17948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:16:23.006 [DEBUG] [Thread-17948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:16:23.006 [DEBUG] [Thread-17948] [transport.py] [_log()] client lang: <none>
2026-04-15T11:16:23.006 [DEBUG] [Thread-17948] [transport.py] [_log()] server lang: <none>
2026-04-15T11:16:23.006 [DEBUG] [Thread-17948] [transport.py] [_log()] kex follows: False
2026-04-15T11:16:23.007 [DEBUG] [Thread-17948] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:16:23.007 [DEBUG] [Thread-17948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:16:23.007 [DEBUG] [Thread-17948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:16:23.007 [DEBUG] [Thread-17948] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:16:23.007 [DEBUG] [Thread-17948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:16:23.007 [DEBUG] [Thread-17948] [transport.py] [_log()] Compression: none
2026-04-15T11:16:23.007 [DEBUG] [Thread-17948] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:16:23.063 [DEBUG] [Thread-17948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:16:23.063 [DEBUG] [Thread-17948] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:16:23.064 [DEBUG] [Thread-17948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:16:23.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:16:23.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:16:23.119 [DEBUG] [Thread-17948] [transport.py] [_log()] userauth is OK
2026-04-15T11:16:23.119 [DEBUG] [Thread-17948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:16:23.120 [DEBUG] [Thread-17948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:16:23.120 [DEBUG] [Thread-17948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:16:23.120 [DEBUG] [Thread-17948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:16:23.145 [INFO] [Thread-17948] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:16:23.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:16:23.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:16:24.064 [DEBUG] [Thread-17948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:16:24.064 [DEBUG] [Thread-17948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:16:24.112 [DEBUG] [Thread-17948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:16:24.112 [DEBUG] [Thread-17948] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:16:24.121 [DEBUG] [Thread-17948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:16:24.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:16:24.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')
2026-04-15T11:16:24.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
2026-04-15T11:16:24.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:16:24.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:16:24.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:16:24.156 [DEBUG] [Thread-17948] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:16:27.276 [DEBUG] [Thread-17950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:16:36.268 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:16:36.269 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:16:42.319 [DEBUG] [Thread-17951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:16:54.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:16:54.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:16:54.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
2026-04-15T11:16:55.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 16, 31), 3.37269, 79.8698, 0.0, 15.7212, 11.5076, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:16:55.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:16:31
2026-04-15T11:16:55.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:16:56.344 [DEBUG] [Thread-17952] [transport.py] [_log()] starting thread (client mode): 0xee904370
2026-04-15T11:16:56.345 [DEBUG] [Thread-17952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:16:56.362 [DEBUG] [Thread-17952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:16:56.362 [INFO] [Thread-17952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:16:56.364 [DEBUG] [Thread-17952] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:16:56.364 [DEBUG] [Thread-17952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:16:56.364 [DEBUG] [Thread-17952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:16:56.364 [DEBUG] [Thread-17952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:16:56.364 [DEBUG] [Thread-17952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:16:56.364 [DEBUG] [Thread-17952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:16:56.364 [DEBUG] [Thread-17952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:16:56.364 [DEBUG] [Thread-17952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:16:56.364 [DEBUG] [Thread-17952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:16:56.364 [DEBUG] [Thread-17952] [transport.py] [_log()] client lang: <none>
2026-04-15T11:16:56.364 [DEBUG] [Thread-17952] [transport.py] [_log()] server lang: <none>
2026-04-15T11:16:56.364 [DEBUG] [Thread-17952] [transport.py] [_log()] kex follows: False
2026-04-15T11:16:56.364 [DEBUG] [Thread-17952] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:16:56.365 [DEBUG] [Thread-17952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:16:56.365 [DEBUG] [Thread-17952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:16:56.365 [DEBUG] [Thread-17952] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:16:56.365 [DEBUG] [Thread-17952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:16:56.365 [DEBUG] [Thread-17952] [transport.py] [_log()] Compression: none
2026-04-15T11:16:56.365 [DEBUG] [Thread-17952] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:16:56.373 [DEBUG] [Thread-17952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:16:56.373 [DEBUG] [Thread-17952] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:16:56.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:16:56.374 [DEBUG] [Thread-17952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:16:56.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:16:56.375 [DEBUG] [Thread-17952] [transport.py] [_log()] userauth is OK
2026-04-15T11:16:56.375 [DEBUG] [Thread-17952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:16:56.375 [DEBUG] [Thread-17952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:16:56.375 [DEBUG] [Thread-17952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:16:56.375 [DEBUG] [Thread-17952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:16:56.388 [INFO] [Thread-17952] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:16:56.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:16:57.051 [DEBUG] [Thread-17952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:16:57.051 [DEBUG] [Thread-17952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:16:57.051 [DEBUG] [Thread-17952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:16:57.091 [DEBUG] [Thread-17952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:16:57.092 [DEBUG] [Thread-17952] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:16:57.093 [DEBUG] [Thread-17952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:16:57.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:16:57.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:16:57.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:16:57.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:16:57.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:16:57.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:16:57.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:16:57.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:16:57.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:16:57.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.386586 -999.00  +11.30  16.83     82   +8.50 1 2 1 2 1   888    0 3.24 14.22 ----- 18.4 16.8 295.4 18.6 15.9 -10.9 15.6 -11.0 15.0 -9.1 15.4 -8.9
2026-04-15T11:16:57.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:16:57.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:16:57.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.386586
2026-04-15T11:16:57.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:16:57.110 [DEBUG] [Thread-17952] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:16:57.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:16:57.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:16:57.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:16:57.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:16:57.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:16:31', tmtdew=3.37269, humidity=79.8698, cloud=0.0, wind=15.7212, temperature=11.5076, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:16:41.030', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:16:57.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:16:57.329 [DEBUG] [Thread-17955] [transport.py] [_log()] starting thread (client mode): 0xee9071f0
2026-04-15T11:16:57.329 [DEBUG] [Thread-17955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:16:57.343 [DEBUG] [Thread-17955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:16:57.343 [INFO] [Thread-17955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:16:57.349 [DEBUG] [Thread-17957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:16:57.351 [DEBUG] [Thread-17955] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:16:57.351 [DEBUG] [Thread-17955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:16:57.351 [DEBUG] [Thread-17955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:16:57.351 [DEBUG] [Thread-17955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:16:57.351 [DEBUG] [Thread-17955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:16:57.351 [DEBUG] [Thread-17955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:16:57.351 [DEBUG] [Thread-17955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:16:57.351 [DEBUG] [Thread-17955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:16:57.352 [DEBUG] [Thread-17955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:16:57.352 [DEBUG] [Thread-17955] [transport.py] [_log()] client lang: <none>
2026-04-15T11:16:57.352 [DEBUG] [Thread-17955] [transport.py] [_log()] server lang: <none>
2026-04-15T11:16:57.352 [DEBUG] [Thread-17955] [transport.py] [_log()] kex follows: False
2026-04-15T11:16:57.352 [DEBUG] [Thread-17955] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:16:57.352 [DEBUG] [Thread-17955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:16:57.352 [DEBUG] [Thread-17955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:16:57.352 [DEBUG] [Thread-17955] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:16:57.352 [DEBUG] [Thread-17955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:16:57.352 [DEBUG] [Thread-17955] [transport.py] [_log()] Compression: none
2026-04-15T11:16:57.352 [DEBUG] [Thread-17955] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:16:57.408 [DEBUG] [Thread-17955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:16:57.409 [DEBUG] [Thread-17955] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:16:57.409 [DEBUG] [Thread-17955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:16:57.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:16:57.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:16:57.470 [DEBUG] [Thread-17955] [transport.py] [_log()] userauth is OK
2026-04-15T11:16:57.470 [DEBUG] [Thread-17955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:16:57.470 [DEBUG] [Thread-17955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:16:57.470 [DEBUG] [Thread-17955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:16:57.471 [DEBUG] [Thread-17955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:16:57.495 [INFO] [Thread-17955] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:16:57.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:16:57.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:16:58.311 [DEBUG] [Thread-17955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:16:58.311 [DEBUG] [Thread-17955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:16:58.359 [DEBUG] [Thread-17955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:16:58.359 [DEBUG] [Thread-17955] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:16:58.369 [DEBUG] [Thread-17955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:16:58.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:16:58.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')
2026-04-15T11:16:58.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
2026-04-15T11:16:58.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:16:58.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:16:58.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:16:58.404 [DEBUG] [Thread-17955] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:17:07.657 [DEBUG] [Thread-17958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:17:12.390 [DEBUG] [Thread-17959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:17:27.422 [DEBUG] [Thread-17960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:17:28.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:17:28.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:17:28.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
2026-04-15T11:17:29.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 17, 7), 3.31256, 80.1846, 0.0, 13.428, 11.5074, 0, 1, 0, 2, 0, 0),)
2026-04-15T11:17:29.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:17:07
2026-04-15T11:17:30.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:17:30.578 [DEBUG] [Thread-17961] [transport.py] [_log()] starting thread (client mode): 0xee904c40
2026-04-15T11:17:30.579 [DEBUG] [Thread-17961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:17:30.597 [DEBUG] [Thread-17961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:17:30.597 [INFO] [Thread-17961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:17:30.599 [DEBUG] [Thread-17961] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:17:30.599 [DEBUG] [Thread-17961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:17:30.599 [DEBUG] [Thread-17961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:17:30.599 [DEBUG] [Thread-17961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:17:30.599 [DEBUG] [Thread-17961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:17:30.599 [DEBUG] [Thread-17961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:17:30.599 [DEBUG] [Thread-17961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:17:30.599 [DEBUG] [Thread-17961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:17:30.599 [DEBUG] [Thread-17961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:17:30.599 [DEBUG] [Thread-17961] [transport.py] [_log()] client lang: <none>
2026-04-15T11:17:30.600 [DEBUG] [Thread-17961] [transport.py] [_log()] server lang: <none>
2026-04-15T11:17:30.600 [DEBUG] [Thread-17961] [transport.py] [_log()] kex follows: False
2026-04-15T11:17:30.600 [DEBUG] [Thread-17961] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:17:30.600 [DEBUG] [Thread-17961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:17:30.600 [DEBUG] [Thread-17961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:17:30.600 [DEBUG] [Thread-17961] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:17:30.600 [DEBUG] [Thread-17961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:17:30.600 [DEBUG] [Thread-17961] [transport.py] [_log()] Compression: none
2026-04-15T11:17:30.600 [DEBUG] [Thread-17961] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:17:30.611 [DEBUG] [Thread-17961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:17:30.611 [DEBUG] [Thread-17961] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:17:30.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:17:30.612 [DEBUG] [Thread-17961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:17:30.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:17:30.613 [DEBUG] [Thread-17961] [transport.py] [_log()] userauth is OK
2026-04-15T11:17:30.613 [DEBUG] [Thread-17961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:17:30.613 [DEBUG] [Thread-17961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:17:30.613 [DEBUG] [Thread-17961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:17:30.613 [DEBUG] [Thread-17961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:17:30.648 [INFO] [Thread-17961] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:17:30.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:17:31.256 [DEBUG] [Thread-17961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:17:31.256 [DEBUG] [Thread-17961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:17:31.257 [DEBUG] [Thread-17961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:17:31.296 [DEBUG] [Thread-17961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:17:31.297 [DEBUG] [Thread-17961] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:17:31.298 [DEBUG] [Thread-17961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:17:31.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:17:31.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:17:31.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:17:31.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:17:31.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:17:31.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:17:31.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:17:31.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:17:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:17:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.386934 -999.00  +11.20  18.34     82   +8.30 1 2 1 2 1   888    0 3.20 14.34 ----- 17.8 18.3 294.4 19.9 15.9 -11.0 15.6 -11.4 15.0 -9.7 15.6 -9.6
2026-04-15T11:17:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:17:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:17:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.386934
2026-04-15T11:17:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:17:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:17:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:17:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:17:31.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:17:31.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:17:07', tmtdew=3.31256, humidity=80.1846, cloud=0.0, wind=13.428, temperature=11.5074, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:17:11.098', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:17:31.316 [DEBUG] [Thread-17961] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:17:31.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:17:31.532 [DEBUG] [Thread-17964] [transport.py] [_log()] starting thread (client mode): 0xf13ede70
2026-04-15T11:17:31.532 [DEBUG] [Thread-17964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:17:31.549 [DEBUG] [Thread-17964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:17:31.549 [INFO] [Thread-17964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:17:31.556 [DEBUG] [Thread-17964] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:17:31.556 [DEBUG] [Thread-17964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:17:31.556 [DEBUG] [Thread-17964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:17:31.556 [DEBUG] [Thread-17964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:17:31.556 [DEBUG] [Thread-17964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:17:31.557 [DEBUG] [Thread-17964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:17:31.557 [DEBUG] [Thread-17964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:17:31.557 [DEBUG] [Thread-17964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:17:31.557 [DEBUG] [Thread-17964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:17:31.557 [DEBUG] [Thread-17964] [transport.py] [_log()] client lang: <none>
2026-04-15T11:17:31.557 [DEBUG] [Thread-17964] [transport.py] [_log()] server lang: <none>
2026-04-15T11:17:31.557 [DEBUG] [Thread-17964] [transport.py] [_log()] kex follows: False
2026-04-15T11:17:31.557 [DEBUG] [Thread-17964] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:17:31.557 [DEBUG] [Thread-17964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:17:31.557 [DEBUG] [Thread-17964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:17:31.557 [DEBUG] [Thread-17964] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:17:31.558 [DEBUG] [Thread-17964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:17:31.558 [DEBUG] [Thread-17964] [transport.py] [_log()] Compression: none
2026-04-15T11:17:31.558 [DEBUG] [Thread-17964] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:17:31.615 [DEBUG] [Thread-17964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:17:31.615 [DEBUG] [Thread-17964] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:17:31.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:17:31.616 [DEBUG] [Thread-17964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:17:31.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:17:31.672 [DEBUG] [Thread-17964] [transport.py] [_log()] userauth is OK
2026-04-15T11:17:31.672 [DEBUG] [Thread-17964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:17:31.672 [DEBUG] [Thread-17964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:17:31.672 [DEBUG] [Thread-17964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:17:31.673 [DEBUG] [Thread-17964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:17:31.699 [INFO] [Thread-17964] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:17:31.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:17:31.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:17:32.547 [DEBUG] [Thread-17964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:17:32.547 [DEBUG] [Thread-17964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:17:32.595 [DEBUG] [Thread-17964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:17:32.595 [DEBUG] [Thread-17964] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:17:32.604 [DEBUG] [Thread-17964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:17:32.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:17:32.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')
2026-04-15T11:17: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') -> 00000000
2026-04-15T11:17:32.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:17:32.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:17:32.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:17:32.639 [DEBUG] [Thread-17964] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:17:36.409 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:17:36.410 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:17:42.452 [DEBUG] [Thread-17966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:17:57.491 [DEBUG] [Thread-17967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:18:02.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:18:02.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:18:02.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
2026-04-15T11:18:03.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 17, 42), 3.84406, 77.2697, 0.0, 17.9258, 12.0147, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:18:03.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:17:42
2026-04-15T11:18:04.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:18:04.796 [DEBUG] [Thread-17968] [transport.py] [_log()] starting thread (client mode): 0xf13ef190
2026-04-15T11:18:04.796 [DEBUG] [Thread-17968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:18:04.811 [DEBUG] [Thread-17968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:18:04.811 [INFO] [Thread-17968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:18:04.815 [DEBUG] [Thread-17968] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:18:04.815 [DEBUG] [Thread-17968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:18:04.815 [DEBUG] [Thread-17968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:18:04.815 [DEBUG] [Thread-17968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:18:04.815 [DEBUG] [Thread-17968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:18:04.815 [DEBUG] [Thread-17968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:18:04.815 [DEBUG] [Thread-17968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:18:04.815 [DEBUG] [Thread-17968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:18:04.815 [DEBUG] [Thread-17968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:18:04.815 [DEBUG] [Thread-17968] [transport.py] [_log()] client lang: <none>
2026-04-15T11:18:04.816 [DEBUG] [Thread-17968] [transport.py] [_log()] server lang: <none>
2026-04-15T11:18:04.816 [DEBUG] [Thread-17968] [transport.py] [_log()] kex follows: False
2026-04-15T11:18:04.816 [DEBUG] [Thread-17968] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:18:04.816 [DEBUG] [Thread-17968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:18:04.816 [DEBUG] [Thread-17968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:18:04.816 [DEBUG] [Thread-17968] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:18:04.816 [DEBUG] [Thread-17968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:18:04.816 [DEBUG] [Thread-17968] [transport.py] [_log()] Compression: none
2026-04-15T11:18:04.816 [DEBUG] [Thread-17968] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:18:04.834 [DEBUG] [Thread-17968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:18:04.834 [DEBUG] [Thread-17968] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:18:04.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:18:04.835 [DEBUG] [Thread-17968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:18:04.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:18:04.836 [DEBUG] [Thread-17968] [transport.py] [_log()] userauth is OK
2026-04-15T11:18:04.836 [DEBUG] [Thread-17968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:18:04.836 [DEBUG] [Thread-17968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:18:04.836 [DEBUG] [Thread-17968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:18:04.836 [DEBUG] [Thread-17968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:18:04.871 [INFO] [Thread-17968] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:18:04.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:18:05.509 [DEBUG] [Thread-17968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:18:05.510 [DEBUG] [Thread-17968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:18:05.510 [DEBUG] [Thread-17968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:18:05.551 [DEBUG] [Thread-17968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:18:05.551 [DEBUG] [Thread-17968] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:18:05.553 [DEBUG] [Thread-17968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:18:05.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:18:05.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:18:05.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:18:05.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:18:05.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:18:05.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:18:05.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:18:05.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:18:05.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:18:05.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.387281 -999.00  +11.30  16.03     82   +8.50 1 3 1 2 1   888    0 3.25 13.28 ----- 14.9 16.0 289.2 20.4 15.9 -11.5 15.6 -10.3 15.0 -8.4 15.5 -9.3
2026-04-15T11:18:05.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:18:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:18:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.387281
2026-04-15T11:18:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:18:05.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:18:05.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:18:05.577 [DEBUG] [Thread-17968] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:18:05.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:18:05.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:18:05.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:17:42', tmtdew=3.84406, humidity=77.2697, cloud=0.0, wind=17.9258, temperature=12.0147, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:17:41.078', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:18:05.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:18:05.815 [DEBUG] [Thread-17971] [transport.py] [_log()] starting thread (client mode): 0xf13ec610
2026-04-15T11:18:05.815 [DEBUG] [Thread-17971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:18:05.830 [DEBUG] [Thread-17971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:18:05.830 [INFO] [Thread-17971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:18:05.837 [DEBUG] [Thread-17971] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:18:05.837 [DEBUG] [Thread-17971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:18:05.837 [DEBUG] [Thread-17971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:18:05.837 [DEBUG] [Thread-17971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:18:05.838 [DEBUG] [Thread-17971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:18:05.838 [DEBUG] [Thread-17971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:18:05.838 [DEBUG] [Thread-17971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:18:05.838 [DEBUG] [Thread-17971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:18:05.838 [DEBUG] [Thread-17971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:18:05.838 [DEBUG] [Thread-17971] [transport.py] [_log()] client lang: <none>
2026-04-15T11:18:05.838 [DEBUG] [Thread-17971] [transport.py] [_log()] server lang: <none>
2026-04-15T11:18:05.838 [DEBUG] [Thread-17971] [transport.py] [_log()] kex follows: False
2026-04-15T11:18:05.838 [DEBUG] [Thread-17971] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:18:05.838 [DEBUG] [Thread-17971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:18:05.838 [DEBUG] [Thread-17971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:18:05.839 [DEBUG] [Thread-17971] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:18:05.839 [DEBUG] [Thread-17971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:18:05.839 [DEBUG] [Thread-17971] [transport.py] [_log()] Compression: none
2026-04-15T11:18:05.839 [DEBUG] [Thread-17971] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:18:05.895 [DEBUG] [Thread-17971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:18:05.895 [DEBUG] [Thread-17971] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:18:05.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:18:05.896 [DEBUG] [Thread-17971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:18:05.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:18:05.952 [DEBUG] [Thread-17971] [transport.py] [_log()] userauth is OK
2026-04-15T11:18:05.952 [DEBUG] [Thread-17971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:18:05.952 [DEBUG] [Thread-17971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:18:05.953 [DEBUG] [Thread-17971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:18:05.953 [DEBUG] [Thread-17971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:18:05.980 [INFO] [Thread-17971] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:18:05.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:18:05.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:18:06.831 [DEBUG] [Thread-17971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:18:06.831 [DEBUG] [Thread-17971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:18:06.879 [DEBUG] [Thread-17971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:18:06.879 [DEBUG] [Thread-17971] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:18:06.888 [DEBUG] [Thread-17971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:18:06.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:18:06.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')
2026-04-15T11:18:06.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T11:18:06.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:18:06.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:18:06.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:18:06.923 [DEBUG] [Thread-17971] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:18:07.751 [DEBUG] [Thread-17973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:18:12.521 [DEBUG] [Thread-17974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:18:27.565 [DEBUG] [Thread-17975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:18:36.549 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:18:36.550 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:18:36.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:18:36.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:18:36.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
2026-04-15T11:18:38.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 18, 18), 3.41275, 79.4191, 0.0, 11.5927, 11.4406, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:18:38.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:18:18
2026-04-15T11:18:38.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:18:39.038 [DEBUG] [Thread-17976] [transport.py] [_log()] starting thread (client mode): 0xee9ed420
2026-04-15T11:18:39.038 [DEBUG] [Thread-17976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:18:39.053 [DEBUG] [Thread-17976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:18:39.053 [INFO] [Thread-17976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:18:39.056 [DEBUG] [Thread-17976] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:18:39.056 [DEBUG] [Thread-17976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:18:39.056 [DEBUG] [Thread-17976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:18:39.056 [DEBUG] [Thread-17976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:18:39.056 [DEBUG] [Thread-17976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:18:39.056 [DEBUG] [Thread-17976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:18:39.057 [DEBUG] [Thread-17976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:18:39.057 [DEBUG] [Thread-17976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:18:39.057 [DEBUG] [Thread-17976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:18:39.057 [DEBUG] [Thread-17976] [transport.py] [_log()] client lang: <none>
2026-04-15T11:18:39.057 [DEBUG] [Thread-17976] [transport.py] [_log()] server lang: <none>
2026-04-15T11:18:39.057 [DEBUG] [Thread-17976] [transport.py] [_log()] kex follows: False
2026-04-15T11:18:39.057 [DEBUG] [Thread-17976] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:18:39.057 [DEBUG] [Thread-17976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:18:39.057 [DEBUG] [Thread-17976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:18:39.057 [DEBUG] [Thread-17976] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:18:39.057 [DEBUG] [Thread-17976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:18:39.057 [DEBUG] [Thread-17976] [transport.py] [_log()] Compression: none
2026-04-15T11:18:39.057 [DEBUG] [Thread-17976] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:18:39.073 [DEBUG] [Thread-17976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:18:39.074 [DEBUG] [Thread-17976] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:18:39.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:18:39.074 [DEBUG] [Thread-17976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:18:39.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:18:39.075 [DEBUG] [Thread-17976] [transport.py] [_log()] userauth is OK
2026-04-15T11:18:39.075 [DEBUG] [Thread-17976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:18:39.075 [DEBUG] [Thread-17976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:18:39.075 [DEBUG] [Thread-17976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:18:39.076 [DEBUG] [Thread-17976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:18:39.099 [INFO] [Thread-17976] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:18:39.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:18:39.747 [DEBUG] [Thread-17976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:18:39.747 [DEBUG] [Thread-17976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:18:39.748 [DEBUG] [Thread-17976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:18:39.788 [DEBUG] [Thread-17976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:18:39.789 [DEBUG] [Thread-17976] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:18:39.791 [DEBUG] [Thread-17976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:18:39.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:18:39.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:18:39.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:18:39.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:18:39.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:18:39.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:18:39.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:18:39.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:18:39.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:18:39.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.387628 -999.00  +11.40  12.46     83   +8.70 1 3 1 2 1   888    0 3.14 11.57 ----- 15.3 12.5 292.6 16.8 16.1 -10.2 15.8 -8.9 15.2 -6.9 15.6 -7.3
2026-04-15T11:18:39.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:18:39.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:18:39.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.387628
2026-04-15T11:18:39.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:18:39.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:18:39.811 [DEBUG] [Thread-17976] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:18:39.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:18:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:18:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:18:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:18:18', tmtdew=3.41275, humidity=79.4191, cloud=0.0, wind=11.5927, temperature=11.4406, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:18:11.059', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:18:40.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:18:40.033 [DEBUG] [Thread-17979] [transport.py] [_log()] starting thread (client mode): 0xee9ed450
2026-04-15T11:18:40.033 [DEBUG] [Thread-17979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:18:40.048 [DEBUG] [Thread-17979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:18:40.048 [INFO] [Thread-17979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:18:40.056 [DEBUG] [Thread-17979] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:18:40.056 [DEBUG] [Thread-17979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:18:40.056 [DEBUG] [Thread-17979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:18:40.056 [DEBUG] [Thread-17979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:18:40.056 [DEBUG] [Thread-17979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:18:40.056 [DEBUG] [Thread-17979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:18:40.056 [DEBUG] [Thread-17979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:18:40.056 [DEBUG] [Thread-17979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:18:40.057 [DEBUG] [Thread-17979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:18:40.057 [DEBUG] [Thread-17979] [transport.py] [_log()] client lang: <none>
2026-04-15T11:18:40.057 [DEBUG] [Thread-17979] [transport.py] [_log()] server lang: <none>
2026-04-15T11:18:40.057 [DEBUG] [Thread-17979] [transport.py] [_log()] kex follows: False
2026-04-15T11:18:40.057 [DEBUG] [Thread-17979] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:18:40.057 [DEBUG] [Thread-17979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:18:40.057 [DEBUG] [Thread-17979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:18:40.057 [DEBUG] [Thread-17979] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:18:40.057 [DEBUG] [Thread-17979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:18:40.057 [DEBUG] [Thread-17979] [transport.py] [_log()] Compression: none
2026-04-15T11:18:40.057 [DEBUG] [Thread-17979] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:18:40.113 [DEBUG] [Thread-17979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:18:40.113 [DEBUG] [Thread-17979] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:18:40.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:18:40.114 [DEBUG] [Thread-17979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:18:40.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:18:40.172 [DEBUG] [Thread-17979] [transport.py] [_log()] userauth is OK
2026-04-15T11:18:40.172 [DEBUG] [Thread-17979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:18:40.172 [DEBUG] [Thread-17979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:18:40.172 [DEBUG] [Thread-17979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:18:40.173 [DEBUG] [Thread-17979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:18:40.197 [INFO] [Thread-17979] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:18:40.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:18:40.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:18:40.994 [DEBUG] [Thread-17979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:18:40.994 [DEBUG] [Thread-17979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:18:41.042 [DEBUG] [Thread-17979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:18:41.042 [DEBUG] [Thread-17979] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:18:41.051 [DEBUG] [Thread-17979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:18:41.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:18:41.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')
2026-04-15T11:18:41.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
2026-04-15T11:18:41.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:18:41.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:18:41.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:18:41.087 [DEBUG] [Thread-17979] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:18:42.597 [DEBUG] [Thread-17981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:18:57.644 [DEBUG] [Thread-17982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:19:07.846 [DEBUG] [Thread-17983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:19:11.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:19:11.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:19:11.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
2026-04-15T11:19:12.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 18, 54), 4.00924, 76.407, 0.0, 11.6813, 12.0144, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:19:12.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:18:54
2026-04-15T11:19:12.676 [DEBUG] [Thread-17984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:19:12.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:19:13.174 [DEBUG] [Thread-17985] [transport.py] [_log()] starting thread (client mode): 0xee91c340
2026-04-15T11:19:13.174 [DEBUG] [Thread-17985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:19:13.194 [DEBUG] [Thread-17985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:19:13.194 [INFO] [Thread-17985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:19:13.197 [DEBUG] [Thread-17985] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:19:13.197 [DEBUG] [Thread-17985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:19:13.197 [DEBUG] [Thread-17985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:19:13.197 [DEBUG] [Thread-17985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:19:13.197 [DEBUG] [Thread-17985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:19:13.197 [DEBUG] [Thread-17985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:19:13.197 [DEBUG] [Thread-17985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:19:13.197 [DEBUG] [Thread-17985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:19:13.197 [DEBUG] [Thread-17985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:19:13.197 [DEBUG] [Thread-17985] [transport.py] [_log()] client lang: <none>
2026-04-15T11:19:13.198 [DEBUG] [Thread-17985] [transport.py] [_log()] server lang: <none>
2026-04-15T11:19:13.198 [DEBUG] [Thread-17985] [transport.py] [_log()] kex follows: False
2026-04-15T11:19:13.198 [DEBUG] [Thread-17985] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:19:13.198 [DEBUG] [Thread-17985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:19:13.198 [DEBUG] [Thread-17985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:19:13.198 [DEBUG] [Thread-17985] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:19:13.198 [DEBUG] [Thread-17985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:19:13.198 [DEBUG] [Thread-17985] [transport.py] [_log()] Compression: none
2026-04-15T11:19:13.198 [DEBUG] [Thread-17985] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:19:13.209 [DEBUG] [Thread-17985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:19:13.210 [DEBUG] [Thread-17985] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:19:13.210 [DEBUG] [Thread-17985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:19:13.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:19:13.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:19:13.211 [DEBUG] [Thread-17985] [transport.py] [_log()] userauth is OK
2026-04-15T11:19:13.211 [DEBUG] [Thread-17985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:19:13.211 [DEBUG] [Thread-17985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:19:13.211 [DEBUG] [Thread-17985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:19:13.212 [DEBUG] [Thread-17985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:19:13.229 [INFO] [Thread-17985] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:19:13.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:19:13.796 [DEBUG] [Thread-17985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:19:13.796 [DEBUG] [Thread-17985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:19:13.797 [DEBUG] [Thread-17985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:19:13.837 [DEBUG] [Thread-17985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:19:13.837 [DEBUG] [Thread-17985] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:19:13.839 [DEBUG] [Thread-17985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:19:13.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:19:13.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:19:13.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:19:13.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:19:13.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:19:13.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:19:13.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:19:13.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:19:13.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:19:13.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.387975 -999.00  +11.60  12.94     82   +8.80 1 3 1 2 1   888    0 3.08 9.99 ----- 15.5 12.9 283.2 18.5 16.4 -8.9 15.9 -8.5 15.2 -7.3 15.8 -6.8
2026-04-15T11:19:13.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:19:13.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:19:13.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.387975
2026-04-15T11:19:13.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:19:13.862 [DEBUG] [Thread-17985] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:19:13.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:19:13.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:19:13.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:19:13.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:19:13.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:18:54', tmtdew=4.00924, humidity=76.407, cloud=0.0, wind=11.6813, temperature=12.0144, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:18:41.040', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:19:14.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:19:14.101 [DEBUG] [Thread-17988] [transport.py] [_log()] starting thread (client mode): 0xf13c9f00
2026-04-15T11:19:14.102 [DEBUG] [Thread-17988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:19:14.116 [DEBUG] [Thread-17988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:19:14.116 [INFO] [Thread-17988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:19:14.123 [DEBUG] [Thread-17988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:19:14.123 [DEBUG] [Thread-17988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:19:14.123 [DEBUG] [Thread-17988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:19:14.124 [DEBUG] [Thread-17988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:19:14.124 [DEBUG] [Thread-17988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:19:14.124 [DEBUG] [Thread-17988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:19:14.124 [DEBUG] [Thread-17988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:19:14.124 [DEBUG] [Thread-17988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:19:14.124 [DEBUG] [Thread-17988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:19:14.124 [DEBUG] [Thread-17988] [transport.py] [_log()] client lang: <none>
2026-04-15T11:19:14.124 [DEBUG] [Thread-17988] [transport.py] [_log()] server lang: <none>
2026-04-15T11:19:14.124 [DEBUG] [Thread-17988] [transport.py] [_log()] kex follows: False
2026-04-15T11:19:14.124 [DEBUG] [Thread-17988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:19:14.124 [DEBUG] [Thread-17988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:19:14.124 [DEBUG] [Thread-17988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:19:14.125 [DEBUG] [Thread-17988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:19:14.125 [DEBUG] [Thread-17988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:19:14.125 [DEBUG] [Thread-17988] [transport.py] [_log()] Compression: none
2026-04-15T11:19:14.125 [DEBUG] [Thread-17988] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:19:14.179 [DEBUG] [Thread-17988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:19:14.180 [DEBUG] [Thread-17988] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:19:14.180 [DEBUG] [Thread-17988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:19:14.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:19:14.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:19:14.236 [DEBUG] [Thread-17988] [transport.py] [_log()] userauth is OK
2026-04-15T11:19:14.236 [DEBUG] [Thread-17988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:19:14.236 [DEBUG] [Thread-17988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:19:14.237 [DEBUG] [Thread-17988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:19:14.237 [DEBUG] [Thread-17988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:19:14.261 [INFO] [Thread-17988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:19:14.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:19:14.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:19:15.065 [DEBUG] [Thread-17988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:19:15.066 [DEBUG] [Thread-17988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:19:15.113 [DEBUG] [Thread-17988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:19:15.113 [DEBUG] [Thread-17988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:19:15.122 [DEBUG] [Thread-17988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:19:15.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:19: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')
2026-04-15T11:19:15.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
2026-04-15T11:19:15.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:19:15.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:19:15.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:19:15.157 [DEBUG] [Thread-17988] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:19:27.707 [DEBUG] [Thread-17990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:19:36.692 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:19:36.693 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:19:42.748 [DEBUG] [Thread-17991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:19:45.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:19:45.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:19:45.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
2026-04-15T11:19:46.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 19, 29), 3.48475, 79.0681, 0.0, 15.3338, 11.457, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:19:46.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:19:29
2026-04-15T11:19:46.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:19:47.308 [DEBUG] [Thread-17992] [transport.py] [_log()] starting thread (client mode): 0xee9ece80
2026-04-15T11:19:47.308 [DEBUG] [Thread-17992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:19:47.327 [DEBUG] [Thread-17992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:19:47.327 [INFO] [Thread-17992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:19:47.330 [DEBUG] [Thread-17992] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:19:47.330 [DEBUG] [Thread-17992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:19:47.330 [DEBUG] [Thread-17992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:19:47.331 [DEBUG] [Thread-17992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:19:47.331 [DEBUG] [Thread-17992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:19:47.331 [DEBUG] [Thread-17992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:19:47.331 [DEBUG] [Thread-17992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:19:47.331 [DEBUG] [Thread-17992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:19:47.331 [DEBUG] [Thread-17992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:19:47.331 [DEBUG] [Thread-17992] [transport.py] [_log()] client lang: <none>
2026-04-15T11:19:47.331 [DEBUG] [Thread-17992] [transport.py] [_log()] server lang: <none>
2026-04-15T11:19:47.331 [DEBUG] [Thread-17992] [transport.py] [_log()] kex follows: False
2026-04-15T11:19:47.331 [DEBUG] [Thread-17992] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:19:47.331 [DEBUG] [Thread-17992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:19:47.331 [DEBUG] [Thread-17992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:19:47.332 [DEBUG] [Thread-17992] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:19:47.332 [DEBUG] [Thread-17992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:19:47.332 [DEBUG] [Thread-17992] [transport.py] [_log()] Compression: none
2026-04-15T11:19:47.332 [DEBUG] [Thread-17992] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:19:47.340 [DEBUG] [Thread-17992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:19:47.341 [DEBUG] [Thread-17992] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:19:47.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:19:47.341 [DEBUG] [Thread-17992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:19:47.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:19:47.342 [DEBUG] [Thread-17992] [transport.py] [_log()] userauth is OK
2026-04-15T11:19:47.342 [DEBUG] [Thread-17992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:19:47.343 [DEBUG] [Thread-17992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:19:47.343 [DEBUG] [Thread-17992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:19:47.343 [DEBUG] [Thread-17992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:19:47.367 [INFO] [Thread-17992] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:19:47.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:19:47.952 [DEBUG] [Thread-17992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:19:47.952 [DEBUG] [Thread-17992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:19:47.953 [DEBUG] [Thread-17992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:19:47.993 [DEBUG] [Thread-17992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:19:47.993 [DEBUG] [Thread-17992] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:19:47.996 [DEBUG] [Thread-17992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:19:48.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:19:48.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:19:48.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:19:48.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:19:48.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:19:48.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:19:48.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:19:48.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:19:48.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:19:48.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.388670 -999.00  +11.60  13.08     81   +8.50 1 3 1 2 1   888    0 3.08 9.40 ----- 16.7 13.1 285.6 16.0 16.9 -7.0 16.3 -8.7 15.6 -6.1 16.3 -4.7
2026-04-15T11:19:48.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:19:48.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:19:48.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.388670
2026-04-15T11:19:48.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:19:48.021 [DEBUG] [Thread-17992] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:19:48.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:19:48.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:19:48.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:19:48.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:19:48.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:19:29', tmtdew=3.48475, humidity=79.0681, cloud=0.0, wind=15.3338, temperature=11.457, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:19:41.088', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:19:48.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:19:48.278 [DEBUG] [Thread-17995] [transport.py] [_log()] starting thread (client mode): 0xf13cab60
2026-04-15T11:19:48.278 [DEBUG] [Thread-17995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:19:48.292 [DEBUG] [Thread-17995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:19:48.292 [INFO] [Thread-17995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:19:48.299 [DEBUG] [Thread-17995] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:19:48.299 [DEBUG] [Thread-17995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:19:48.300 [DEBUG] [Thread-17995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:19:48.300 [DEBUG] [Thread-17995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:19:48.300 [DEBUG] [Thread-17995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:19:48.300 [DEBUG] [Thread-17995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:19:48.300 [DEBUG] [Thread-17995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:19:48.300 [DEBUG] [Thread-17995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:19:48.300 [DEBUG] [Thread-17995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:19:48.300 [DEBUG] [Thread-17995] [transport.py] [_log()] client lang: <none>
2026-04-15T11:19:48.300 [DEBUG] [Thread-17995] [transport.py] [_log()] server lang: <none>
2026-04-15T11:19:48.300 [DEBUG] [Thread-17995] [transport.py] [_log()] kex follows: False
2026-04-15T11:19:48.300 [DEBUG] [Thread-17995] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:19:48.301 [DEBUG] [Thread-17995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:19:48.301 [DEBUG] [Thread-17995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:19:48.301 [DEBUG] [Thread-17995] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:19:48.301 [DEBUG] [Thread-17995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:19:48.301 [DEBUG] [Thread-17995] [transport.py] [_log()] Compression: none
2026-04-15T11:19:48.301 [DEBUG] [Thread-17995] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:19:48.360 [DEBUG] [Thread-17995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:19:48.360 [DEBUG] [Thread-17995] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:19:48.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:19:48.361 [DEBUG] [Thread-17995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:19:48.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:19:48.416 [DEBUG] [Thread-17995] [transport.py] [_log()] userauth is OK
2026-04-15T11:19:48.416 [DEBUG] [Thread-17995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:19:48.417 [DEBUG] [Thread-17995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:19:48.417 [DEBUG] [Thread-17995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:19:48.417 [DEBUG] [Thread-17995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:19:48.442 [INFO] [Thread-17995] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:19:48.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:19:48.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:19:49.309 [DEBUG] [Thread-17995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:19:49.309 [DEBUG] [Thread-17995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:19:49.357 [DEBUG] [Thread-17995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:19:49.357 [DEBUG] [Thread-17995] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:19:49.366 [DEBUG] [Thread-17995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:19:49.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:19:49.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')
2026-04-15T11:19:49.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
2026-04-15T11:19:49.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:19:49.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:19:49.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:19:49.401 [DEBUG] [Thread-17995] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:19:57.781 [DEBUG] [Thread-17997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:20:07.961 [DEBUG] [Thread-17998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:20:12.825 [DEBUG] [Thread-17999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:20:19.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:20:19.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:20:19.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
2026-04-15T11:20:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 20, 5), 3.475, 79.1344, 0.0, 16.4804, 11.5565, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:20:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:20:05
2026-04-15T11:20:21.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:20:21.523 [DEBUG] [Thread-18000] [transport.py] [_log()] starting thread (client mode): 0xf13eed10
2026-04-15T11:20:21.523 [DEBUG] [Thread-18000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:20:21.542 [DEBUG] [Thread-18000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:20:21.543 [INFO] [Thread-18000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:20:21.546 [DEBUG] [Thread-18000] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:20:21.546 [DEBUG] [Thread-18000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:20:21.546 [DEBUG] [Thread-18000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:20:21.546 [DEBUG] [Thread-18000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:20:21.546 [DEBUG] [Thread-18000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:20:21.546 [DEBUG] [Thread-18000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:20:21.546 [DEBUG] [Thread-18000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:20:21.546 [DEBUG] [Thread-18000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:20:21.546 [DEBUG] [Thread-18000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:20:21.547 [DEBUG] [Thread-18000] [transport.py] [_log()] client lang: <none>
2026-04-15T11:20:21.547 [DEBUG] [Thread-18000] [transport.py] [_log()] server lang: <none>
2026-04-15T11:20:21.547 [DEBUG] [Thread-18000] [transport.py] [_log()] kex follows: False
2026-04-15T11:20:21.547 [DEBUG] [Thread-18000] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:20:21.547 [DEBUG] [Thread-18000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:20:21.547 [DEBUG] [Thread-18000] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:20:21.547 [DEBUG] [Thread-18000] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:20:21.547 [DEBUG] [Thread-18000] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:20:21.547 [DEBUG] [Thread-18000] [transport.py] [_log()] Compression: none
2026-04-15T11:20:21.547 [DEBUG] [Thread-18000] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:20:21.564 [DEBUG] [Thread-18000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:20:21.564 [DEBUG] [Thread-18000] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:20:21.564 [DEBUG] [Thread-18000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:20:21.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:20:21.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:20:21.608 [DEBUG] [Thread-18000] [transport.py] [_log()] userauth is OK
2026-04-15T11:20:21.608 [DEBUG] [Thread-18000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:20:21.608 [DEBUG] [Thread-18000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:20:21.609 [DEBUG] [Thread-18000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:20:21.609 [DEBUG] [Thread-18000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:20:21.632 [INFO] [Thread-18000] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:20:21.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:20:22.223 [DEBUG] [Thread-18000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:20:22.224 [DEBUG] [Thread-18000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:20:22.224 [DEBUG] [Thread-18000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:20:22.264 [DEBUG] [Thread-18000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:20:22.264 [DEBUG] [Thread-18000] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:20:22.266 [DEBUG] [Thread-18000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:20:22.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:20:22.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:20:22.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:20:22.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:20:22.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:20:22.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:20:22.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:20:22.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:20:22.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:20:22.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.389017 -999.00  +11.60  14.26     81   +8.70 1 3 1 2 1   888    0 3.06 9.22 ----- 16.6 14.3 305.5 21.1 16.9 -9.1 16.2 -8.5 15.4 -7.5 16.2 -6.7
2026-04-15T11:20:22.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:20:22.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:20:22.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.389017
2026-04-15T11:20:22.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:20:22.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:20:22.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:20:22.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:20:22.284 [DEBUG] [Thread-18000] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:20:22.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:20:22.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:20:05', tmtdew=3.475, humidity=79.1344, cloud=0.0, wind=16.4804, temperature=11.5565, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:20:11.069', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:20:22.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:20:22.538 [DEBUG] [Thread-18003] [transport.py] [_log()] starting thread (client mode): 0xee9061d0
2026-04-15T11:20:22.539 [DEBUG] [Thread-18003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:20:22.553 [DEBUG] [Thread-18003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:20:22.553 [INFO] [Thread-18003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:20:22.561 [DEBUG] [Thread-18003] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:20:22.561 [DEBUG] [Thread-18003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:20:22.561 [DEBUG] [Thread-18003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:20:22.561 [DEBUG] [Thread-18003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:20:22.561 [DEBUG] [Thread-18003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:20:22.561 [DEBUG] [Thread-18003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:20:22.561 [DEBUG] [Thread-18003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:20:22.561 [DEBUG] [Thread-18003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:20:22.561 [DEBUG] [Thread-18003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:20:22.561 [DEBUG] [Thread-18003] [transport.py] [_log()] client lang: <none>
2026-04-15T11:20:22.561 [DEBUG] [Thread-18003] [transport.py] [_log()] server lang: <none>
2026-04-15T11:20:22.562 [DEBUG] [Thread-18003] [transport.py] [_log()] kex follows: False
2026-04-15T11:20:22.562 [DEBUG] [Thread-18003] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:20:22.562 [DEBUG] [Thread-18003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:20:22.562 [DEBUG] [Thread-18003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:20:22.562 [DEBUG] [Thread-18003] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:20:22.562 [DEBUG] [Thread-18003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:20:22.562 [DEBUG] [Thread-18003] [transport.py] [_log()] Compression: none
2026-04-15T11:20:22.562 [DEBUG] [Thread-18003] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:20:22.619 [DEBUG] [Thread-18003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:20:22.620 [DEBUG] [Thread-18003] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:20:22.620 [DEBUG] [Thread-18003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:20:22.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:20:22.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:20:22.676 [DEBUG] [Thread-18003] [transport.py] [_log()] userauth is OK
2026-04-15T11:20:22.676 [DEBUG] [Thread-18003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:20:22.677 [DEBUG] [Thread-18003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:20:22.677 [DEBUG] [Thread-18003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:20:22.677 [DEBUG] [Thread-18003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:20:22.701 [INFO] [Thread-18003] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:20:22.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:20:22.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:20:23.508 [DEBUG] [Thread-18003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:20:23.508 [DEBUG] [Thread-18003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:20:23.556 [DEBUG] [Thread-18003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:20:23.556 [DEBUG] [Thread-18003] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:20:23.565 [DEBUG] [Thread-18003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:20:23.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:20:23.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')
2026-04-15T11:20:23.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
2026-04-15T11:20:23.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:20:23.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:20:23.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:20:23.599 [DEBUG] [Thread-18003] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:20:27.856 [DEBUG] [Thread-18005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:20:36.832 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:20:36.833 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:20:42.900 [DEBUG] [Thread-18006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:20:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:20:53.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:20:53.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:20:55.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 20, 40), 3.95661, 76.738, 0.0, 17.2908, 12.3786, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:20:55.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:20:40
2026-04-15T11:20:55.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:20:55.849 [DEBUG] [Thread-18007] [transport.py] [_log()] starting thread (client mode): 0xf13ef2b0
2026-04-15T11:20:55.850 [DEBUG] [Thread-18007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:20:55.869 [DEBUG] [Thread-18007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:20:55.869 [INFO] [Thread-18007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:20:55.872 [DEBUG] [Thread-18007] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:20:55.873 [DEBUG] [Thread-18007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:20:55.873 [DEBUG] [Thread-18007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:20:55.873 [DEBUG] [Thread-18007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:20:55.873 [DEBUG] [Thread-18007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:20:55.873 [DEBUG] [Thread-18007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:20:55.873 [DEBUG] [Thread-18007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:20:55.873 [DEBUG] [Thread-18007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:20:55.873 [DEBUG] [Thread-18007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:20:55.873 [DEBUG] [Thread-18007] [transport.py] [_log()] client lang: <none>
2026-04-15T11:20:55.873 [DEBUG] [Thread-18007] [transport.py] [_log()] server lang: <none>
2026-04-15T11:20:55.873 [DEBUG] [Thread-18007] [transport.py] [_log()] kex follows: False
2026-04-15T11:20:55.874 [DEBUG] [Thread-18007] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:20:55.874 [DEBUG] [Thread-18007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:20:55.874 [DEBUG] [Thread-18007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:20:55.874 [DEBUG] [Thread-18007] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:20:55.874 [DEBUG] [Thread-18007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:20:55.874 [DEBUG] [Thread-18007] [transport.py] [_log()] Compression: none
2026-04-15T11:20:55.874 [DEBUG] [Thread-18007] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:20:55.890 [DEBUG] [Thread-18007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:20:55.890 [DEBUG] [Thread-18007] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:20:55.891 [DEBUG] [Thread-18007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:20:55.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:20:55.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:20:55.892 [DEBUG] [Thread-18007] [transport.py] [_log()] userauth is OK
2026-04-15T11:20:55.892 [DEBUG] [Thread-18007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:20:55.892 [DEBUG] [Thread-18007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:20:55.892 [DEBUG] [Thread-18007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:20:55.892 [DEBUG] [Thread-18007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:20:55.916 [INFO] [Thread-18007] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:20:55.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:20:56.641 [DEBUG] [Thread-18007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:20:56.641 [DEBUG] [Thread-18007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:20:56.641 [DEBUG] [Thread-18007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:20:56.682 [DEBUG] [Thread-18007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:20:56.682 [DEBUG] [Thread-18007] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:20:56.684 [DEBUG] [Thread-18007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:20:56.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:20:56.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:20:56.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:20:56.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:20:56.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:20:56.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:20:56.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:20:56.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:20:56.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:20:56.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.389364 -999.00  +11.50  17.57     81   +8.50 1 3 1 2 1   888    0 3.10 9.99 ----- 19.4 17.6 303.2 20.4 16.8 -9.2 16.1 -9.0 15.3 -7.3 16.1 -7.3
2026-04-15T11:20:56.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:20:56.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:20:56.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.389364
2026-04-15T11:20:56.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:20:56.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:20:56.712 [DEBUG] [Thread-18007] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:20:56.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:20:56.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:20:56.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:20:56.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:20:40', tmtdew=3.95661, humidity=76.738, cloud=0.0, wind=17.2908, temperature=12.3786, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:20:41.050', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:20:56.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:20:56.966 [DEBUG] [Thread-18009] [transport.py] [_log()] starting thread (client mode): 0xf13c96c0
2026-04-15T11:20:56.967 [DEBUG] [Thread-18009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:20:56.985 [DEBUG] [Thread-18009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:20:56.985 [INFO] [Thread-18009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:20:56.993 [DEBUG] [Thread-18009] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:20:56.993 [DEBUG] [Thread-18009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:20:56.993 [DEBUG] [Thread-18009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:20:56.993 [DEBUG] [Thread-18009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:20:56.993 [DEBUG] [Thread-18009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:20:56.993 [DEBUG] [Thread-18009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:20:56.993 [DEBUG] [Thread-18009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:20:56.993 [DEBUG] [Thread-18009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:20:56.993 [DEBUG] [Thread-18009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:20:56.993 [DEBUG] [Thread-18009] [transport.py] [_log()] client lang: <none>
2026-04-15T11:20:56.993 [DEBUG] [Thread-18009] [transport.py] [_log()] server lang: <none>
2026-04-15T11:20:56.993 [DEBUG] [Thread-18009] [transport.py] [_log()] kex follows: False
2026-04-15T11:20:56.994 [DEBUG] [Thread-18009] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:20:56.994 [DEBUG] [Thread-18009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:20:56.994 [DEBUG] [Thread-18009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:20:56.994 [DEBUG] [Thread-18009] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:20:56.994 [DEBUG] [Thread-18009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:20:56.994 [DEBUG] [Thread-18009] [transport.py] [_log()] Compression: none
2026-04-15T11:20:56.994 [DEBUG] [Thread-18009] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:20:57.051 [DEBUG] [Thread-18009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:20:57.052 [DEBUG] [Thread-18009] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:20:57.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:20:57.053 [DEBUG] [Thread-18009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:20:57.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:20:57.109 [DEBUG] [Thread-18009] [transport.py] [_log()] userauth is OK
2026-04-15T11:20:57.109 [DEBUG] [Thread-18009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:20:57.109 [DEBUG] [Thread-18009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:20:57.109 [DEBUG] [Thread-18009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:20:57.109 [DEBUG] [Thread-18009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:20:57.136 [INFO] [Thread-18009] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:20:57.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:20:57.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:20:57.932 [DEBUG] [Thread-18011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:20:57.948 [DEBUG] [Thread-18009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:20:57.948 [DEBUG] [Thread-18009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:20:57.998 [DEBUG] [Thread-18009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:20:57.998 [DEBUG] [Thread-18009] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:20:58.007 [DEBUG] [Thread-18009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:20:58.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:20:58.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')
2026-04-15T11:20: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') -> 00000000
2026-04-15T11:20:58.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:20:58.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:20:58.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:20:58.044 [DEBUG] [Thread-18009] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:21:08.067 [DEBUG] [Thread-18012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:21:12.980 [DEBUG] [Thread-18013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:21:28.013 [DEBUG] [Thread-18014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:21:28.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:21:28.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:21: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
2026-04-15T11:21:29.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 21, 16), 3.68524, 77.8217, 0.0, 14.5922, 11.6224, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:21:29.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:21:16
2026-04-15T11:21:29.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:21:30.177 [DEBUG] [Thread-18015] [transport.py] [_log()] starting thread (client mode): 0xf13ca8f0
2026-04-15T11:21:30.177 [DEBUG] [Thread-18015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:21:30.197 [DEBUG] [Thread-18015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:21:30.197 [INFO] [Thread-18015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:21:30.200 [DEBUG] [Thread-18015] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:21:30.201 [DEBUG] [Thread-18015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:21:30.201 [DEBUG] [Thread-18015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:21:30.201 [DEBUG] [Thread-18015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:21:30.201 [DEBUG] [Thread-18015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:21:30.201 [DEBUG] [Thread-18015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:21:30.201 [DEBUG] [Thread-18015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:21:30.201 [DEBUG] [Thread-18015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:21:30.201 [DEBUG] [Thread-18015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:21:30.201 [DEBUG] [Thread-18015] [transport.py] [_log()] client lang: <none>
2026-04-15T11:21:30.201 [DEBUG] [Thread-18015] [transport.py] [_log()] server lang: <none>
2026-04-15T11:21:30.201 [DEBUG] [Thread-18015] [transport.py] [_log()] kex follows: False
2026-04-15T11:21:30.201 [DEBUG] [Thread-18015] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:21:30.202 [DEBUG] [Thread-18015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:21:30.202 [DEBUG] [Thread-18015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:21:30.202 [DEBUG] [Thread-18015] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:21:30.202 [DEBUG] [Thread-18015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:21:30.202 [DEBUG] [Thread-18015] [transport.py] [_log()] Compression: none
2026-04-15T11:21:30.202 [DEBUG] [Thread-18015] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:21:30.214 [DEBUG] [Thread-18015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:21:30.214 [DEBUG] [Thread-18015] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:21:30.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:21:30.215 [DEBUG] [Thread-18015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:21:30.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:21:30.216 [DEBUG] [Thread-18015] [transport.py] [_log()] userauth is OK
2026-04-15T11:21:30.216 [DEBUG] [Thread-18015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:21:30.216 [DEBUG] [Thread-18015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:21:30.216 [DEBUG] [Thread-18015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:21:30.216 [DEBUG] [Thread-18015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:21:30.240 [INFO] [Thread-18015] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:21:30.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:21:30.818 [DEBUG] [Thread-18015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:21:30.818 [DEBUG] [Thread-18015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:21:30.818 [DEBUG] [Thread-18015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:21:30.859 [DEBUG] [Thread-18015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:21:30.859 [DEBUG] [Thread-18015] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:21:30.861 [DEBUG] [Thread-18015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:21:30.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:21:30.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:21:30.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:21:30.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:21:30.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:21:30.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:21:30.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:21:30.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:21:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:21:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.389711 -999.00  +11.50  17.01     82   +8.60 1 3 1 2 1   888    0 3.07 9.80 ----- 15.4 17.0 299.0 23.5 16.6 -8.8 16.0 -9.0 15.3 -9.1 16.0 -7.2
2026-04-15T11:21:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:21:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:21:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.389711
2026-04-15T11:21:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:21:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:21:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:21:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:21:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:21:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:21:16', tmtdew=3.68524, humidity=77.8217, cloud=0.0, wind=14.5922, temperature=11.6224, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:21:11.030', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:21:30.883 [DEBUG] [Thread-18015] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:21:31.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:21:31.103 [DEBUG] [Thread-18018] [transport.py] [_log()] starting thread (client mode): 0xf13c9c90
2026-04-15T11:21:31.103 [DEBUG] [Thread-18018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:21:31.117 [DEBUG] [Thread-18018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:21:31.117 [INFO] [Thread-18018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:21:31.126 [DEBUG] [Thread-18018] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:21:31.126 [DEBUG] [Thread-18018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:21:31.126 [DEBUG] [Thread-18018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:21:31.126 [DEBUG] [Thread-18018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:21:31.126 [DEBUG] [Thread-18018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:21:31.126 [DEBUG] [Thread-18018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:21:31.127 [DEBUG] [Thread-18018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:21:31.127 [DEBUG] [Thread-18018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:21:31.127 [DEBUG] [Thread-18018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:21:31.127 [DEBUG] [Thread-18018] [transport.py] [_log()] client lang: <none>
2026-04-15T11:21:31.127 [DEBUG] [Thread-18018] [transport.py] [_log()] server lang: <none>
2026-04-15T11:21:31.127 [DEBUG] [Thread-18018] [transport.py] [_log()] kex follows: False
2026-04-15T11:21:31.127 [DEBUG] [Thread-18018] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:21:31.127 [DEBUG] [Thread-18018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:21:31.127 [DEBUG] [Thread-18018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:21:31.127 [DEBUG] [Thread-18018] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:21:31.127 [DEBUG] [Thread-18018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:21:31.127 [DEBUG] [Thread-18018] [transport.py] [_log()] Compression: none
2026-04-15T11:21:31.128 [DEBUG] [Thread-18018] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:21:31.180 [DEBUG] [Thread-18018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:21:31.180 [DEBUG] [Thread-18018] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:21:31.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:21:31.181 [DEBUG] [Thread-18018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:21:31.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:21:31.241 [DEBUG] [Thread-18018] [transport.py] [_log()] userauth is OK
2026-04-15T11:21:31.241 [DEBUG] [Thread-18018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:21:31.241 [DEBUG] [Thread-18018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:21:31.241 [DEBUG] [Thread-18018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:21:31.242 [DEBUG] [Thread-18018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:21:31.266 [INFO] [Thread-18018] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:21:31.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:21:31.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:21:32.091 [DEBUG] [Thread-18018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:21:32.091 [DEBUG] [Thread-18018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:21:32.139 [DEBUG] [Thread-18018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:21:32.139 [DEBUG] [Thread-18018] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:21:32.148 [DEBUG] [Thread-18018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:21:32.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:21:32.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')
2026-04-15T11:21:32.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
2026-04-15T11:21:32.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:21:32.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:21:32.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:21:32.182 [DEBUG] [Thread-18018] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:21:36.973 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:21:36.974 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:21:43.045 [DEBUG] [Thread-18020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:21:58.088 [DEBUG] [Thread-18021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:22:02.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:22:02.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:22:02.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
2026-04-15T11:22:03.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 21, 51), 4.16627, 75.6434, 0.0, 21.4891, 12.3121, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:22:03.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:21:51
2026-04-15T11:22:03.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:22:04.360 [DEBUG] [Thread-18022] [transport.py] [_log()] starting thread (client mode): 0xee98bc70
2026-04-15T11:22:04.360 [DEBUG] [Thread-18022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:22:04.380 [DEBUG] [Thread-18022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:22:04.380 [INFO] [Thread-18022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:22:04.381 [DEBUG] [Thread-18022] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:22:04.381 [DEBUG] [Thread-18022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:22:04.381 [DEBUG] [Thread-18022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:22:04.382 [DEBUG] [Thread-18022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:22:04.382 [DEBUG] [Thread-18022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:22:04.382 [DEBUG] [Thread-18022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:22:04.382 [DEBUG] [Thread-18022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:22:04.382 [DEBUG] [Thread-18022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:22:04.382 [DEBUG] [Thread-18022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:22:04.382 [DEBUG] [Thread-18022] [transport.py] [_log()] client lang: <none>
2026-04-15T11:22:04.382 [DEBUG] [Thread-18022] [transport.py] [_log()] server lang: <none>
2026-04-15T11:22:04.382 [DEBUG] [Thread-18022] [transport.py] [_log()] kex follows: False
2026-04-15T11:22:04.382 [DEBUG] [Thread-18022] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:22:04.382 [DEBUG] [Thread-18022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:22:04.382 [DEBUG] [Thread-18022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:22:04.383 [DEBUG] [Thread-18022] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:22:04.383 [DEBUG] [Thread-18022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:22:04.383 [DEBUG] [Thread-18022] [transport.py] [_log()] Compression: none
2026-04-15T11:22:04.383 [DEBUG] [Thread-18022] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:22:04.399 [DEBUG] [Thread-18022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:22:04.400 [DEBUG] [Thread-18022] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:22:04.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:22:04.400 [DEBUG] [Thread-18022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:22:04.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:22:04.401 [DEBUG] [Thread-18022] [transport.py] [_log()] userauth is OK
2026-04-15T11:22:04.401 [DEBUG] [Thread-18022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:22:04.401 [DEBUG] [Thread-18022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:22:04.402 [DEBUG] [Thread-18022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:22:04.402 [DEBUG] [Thread-18022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:22:04.420 [INFO] [Thread-18022] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:22:04.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:22:05.023 [DEBUG] [Thread-18022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:22:05.023 [DEBUG] [Thread-18022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:22:05.023 [DEBUG] [Thread-18022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:22:05.063 [DEBUG] [Thread-18022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:22:05.064 [DEBUG] [Thread-18022] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:22:05.066 [DEBUG] [Thread-18022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:22:05.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:22:05.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:22:05.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:22:05.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:22:05.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:22:05.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:22:05.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:22:05.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:22:05.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:22:05.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.390058 -999.00  +11.60  19.17     81   +8.60 1 3 1 2 1   888    0 3.17 10.65 ----- 17.8 19.2 310.2 21.5 16.6 -8.1 16.0 -9.2 15.3 -8.6 15.9 -7.5
2026-04-15T11:22:05.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:22:05.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:22:05.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.390058
2026-04-15T11:22:05.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:22:05.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:22:05.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:22:05.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:22:05.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:22:05.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:21:51', tmtdew=4.16627, humidity=75.6434, cloud=0.0, wind=21.4891, temperature=12.3121, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:21:41.011', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:22:05.085 [DEBUG] [Thread-18022] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:22:05.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:22:05.294 [DEBUG] [Thread-18025] [transport.py] [_log()] starting thread (client mode): 0xf13e24d0
2026-04-15T11:22:05.294 [DEBUG] [Thread-18025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:22:05.308 [DEBUG] [Thread-18025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:22:05.308 [INFO] [Thread-18025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:22:05.315 [DEBUG] [Thread-18025] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:22:05.316 [DEBUG] [Thread-18025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:22:05.316 [DEBUG] [Thread-18025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:22:05.316 [DEBUG] [Thread-18025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:22:05.316 [DEBUG] [Thread-18025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:22:05.316 [DEBUG] [Thread-18025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:22:05.316 [DEBUG] [Thread-18025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:22:05.316 [DEBUG] [Thread-18025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:22:05.316 [DEBUG] [Thread-18025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:22:05.316 [DEBUG] [Thread-18025] [transport.py] [_log()] client lang: <none>
2026-04-15T11:22:05.316 [DEBUG] [Thread-18025] [transport.py] [_log()] server lang: <none>
2026-04-15T11:22:05.316 [DEBUG] [Thread-18025] [transport.py] [_log()] kex follows: False
2026-04-15T11:22:05.316 [DEBUG] [Thread-18025] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:22:05.317 [DEBUG] [Thread-18025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:22:05.317 [DEBUG] [Thread-18025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:22:05.317 [DEBUG] [Thread-18025] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:22:05.317 [DEBUG] [Thread-18025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:22:05.317 [DEBUG] [Thread-18025] [transport.py] [_log()] Compression: none
2026-04-15T11:22:05.317 [DEBUG] [Thread-18025] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:22:05.376 [DEBUG] [Thread-18025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:22:05.376 [DEBUG] [Thread-18025] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:22:05.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:22:05.377 [DEBUG] [Thread-18025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:22:05.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:22:05.433 [DEBUG] [Thread-18025] [transport.py] [_log()] userauth is OK
2026-04-15T11:22:05.433 [DEBUG] [Thread-18025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:22:05.433 [DEBUG] [Thread-18025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:22:05.433 [DEBUG] [Thread-18025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:22:05.433 [DEBUG] [Thread-18025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:22:05.458 [INFO] [Thread-18025] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:22:05.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:22:05.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:22:06.311 [DEBUG] [Thread-18025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:22:06.311 [DEBUG] [Thread-18025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:22:06.358 [DEBUG] [Thread-18025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:22:06.359 [DEBUG] [Thread-18025] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:22:06.367 [DEBUG] [Thread-18025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:22:06.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:22:06.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')
2026-04-15T11:22:06.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
2026-04-15T11:22:06.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:22:06.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:22:06.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:22:06.399 [DEBUG] [Thread-18025] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:22:08.180 [DEBUG] [Thread-18027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:22:13.119 [DEBUG] [Thread-18028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:22:28.164 [DEBUG] [Thread-18029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:22:36.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:22:36.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:22:36.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
2026-04-15T11:22:37.115 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:22:37.117 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:22:37.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 22, 26), 3.77235, 77.3573, 0.0, 17.5043, 11.5562, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:22:37.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:22:26
2026-04-15T11:22:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:22:38.494 [DEBUG] [Thread-18030] [transport.py] [_log()] starting thread (client mode): 0xf13cb1f0
2026-04-15T11:22:38.494 [DEBUG] [Thread-18030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:22:38.520 [DEBUG] [Thread-18030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:22:38.521 [INFO] [Thread-18030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:22:38.522 [DEBUG] [Thread-18030] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:22:38.522 [DEBUG] [Thread-18030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:22:38.522 [DEBUG] [Thread-18030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:22:38.522 [DEBUG] [Thread-18030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:22:38.522 [DEBUG] [Thread-18030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:22:38.522 [DEBUG] [Thread-18030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:22:38.523 [DEBUG] [Thread-18030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:22:38.523 [DEBUG] [Thread-18030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:22:38.523 [DEBUG] [Thread-18030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:22:38.523 [DEBUG] [Thread-18030] [transport.py] [_log()] client lang: <none>
2026-04-15T11:22:38.523 [DEBUG] [Thread-18030] [transport.py] [_log()] server lang: <none>
2026-04-15T11:22:38.523 [DEBUG] [Thread-18030] [transport.py] [_log()] kex follows: False
2026-04-15T11:22:38.523 [DEBUG] [Thread-18030] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:22:38.523 [DEBUG] [Thread-18030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:22:38.523 [DEBUG] [Thread-18030] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:22:38.523 [DEBUG] [Thread-18030] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:22:38.523 [DEBUG] [Thread-18030] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:22:38.524 [DEBUG] [Thread-18030] [transport.py] [_log()] Compression: none
2026-04-15T11:22:38.524 [DEBUG] [Thread-18030] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:22:38.532 [DEBUG] [Thread-18030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:22:38.533 [DEBUG] [Thread-18030] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:22:38.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:22:38.533 [DEBUG] [Thread-18030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:22:38.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:22:38.536 [DEBUG] [Thread-18030] [transport.py] [_log()] userauth is OK
2026-04-15T11:22:38.536 [DEBUG] [Thread-18030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:22:38.536 [DEBUG] [Thread-18030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:22:38.536 [DEBUG] [Thread-18030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:22:38.536 [DEBUG] [Thread-18030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:22:38.555 [INFO] [Thread-18030] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:22:38.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:22:39.140 [DEBUG] [Thread-18030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:22:39.140 [DEBUG] [Thread-18030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:22:39.141 [DEBUG] [Thread-18030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:22:39.181 [DEBUG] [Thread-18030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:22:39.182 [DEBUG] [Thread-18030] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:22:39.184 [DEBUG] [Thread-18030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:22:39.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:22:39.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:22:39.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:22:39.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:22:39.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:22:39.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:22:39.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:22:39.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:22:39.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:22:39.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.390406 -999.00  +11.40  18.19     81   +8.30 1 3 1 2 1   888    0 3.11 11.87 ----- 13.4 18.2 309.8 20.2 16.6 -8.9 15.9 -8.8 15.2 -9.2 15.9 -8.3
2026-04-15T11:22:39.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:22:39.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:22:39.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.390406
2026-04-15T11:22:39.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:22:39.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:22:39.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:22:39.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:22:39.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:22:39.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:22:26', tmtdew=3.77235, humidity=77.3573, cloud=0.0, wind=17.5043, temperature=11.5562, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:22:11.078', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:22:39.205 [DEBUG] [Thread-18030] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:22:39.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:22:39.412 [DEBUG] [Thread-18033] [transport.py] [_log()] starting thread (client mode): 0xf13c8040
2026-04-15T11:22:39.412 [DEBUG] [Thread-18033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:22:39.426 [DEBUG] [Thread-18033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:22:39.426 [INFO] [Thread-18033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:22:39.433 [DEBUG] [Thread-18033] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:22:39.434 [DEBUG] [Thread-18033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:22:39.434 [DEBUG] [Thread-18033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:22:39.434 [DEBUG] [Thread-18033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:22:39.434 [DEBUG] [Thread-18033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:22:39.434 [DEBUG] [Thread-18033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:22:39.434 [DEBUG] [Thread-18033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:22:39.434 [DEBUG] [Thread-18033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:22:39.434 [DEBUG] [Thread-18033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:22:39.434 [DEBUG] [Thread-18033] [transport.py] [_log()] client lang: <none>
2026-04-15T11:22:39.434 [DEBUG] [Thread-18033] [transport.py] [_log()] server lang: <none>
2026-04-15T11:22:39.434 [DEBUG] [Thread-18033] [transport.py] [_log()] kex follows: False
2026-04-15T11:22:39.435 [DEBUG] [Thread-18033] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:22:39.435 [DEBUG] [Thread-18033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:22:39.435 [DEBUG] [Thread-18033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:22:39.435 [DEBUG] [Thread-18033] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:22:39.435 [DEBUG] [Thread-18033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:22:39.435 [DEBUG] [Thread-18033] [transport.py] [_log()] Compression: none
2026-04-15T11:22:39.435 [DEBUG] [Thread-18033] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:22:39.496 [DEBUG] [Thread-18033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:22:39.496 [DEBUG] [Thread-18033] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:22:39.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:22:39.497 [DEBUG] [Thread-18033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:22:39.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:22:39.553 [DEBUG] [Thread-18033] [transport.py] [_log()] userauth is OK
2026-04-15T11:22:39.553 [DEBUG] [Thread-18033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:22:39.553 [DEBUG] [Thread-18033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:22:39.553 [DEBUG] [Thread-18033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:22:39.553 [DEBUG] [Thread-18033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:22:39.570 [INFO] [Thread-18033] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:22:39.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:22:39.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:22:40.388 [DEBUG] [Thread-18033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:22:40.389 [DEBUG] [Thread-18033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:22:40.437 [DEBUG] [Thread-18033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:22:40.437 [DEBUG] [Thread-18033] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:22:40.446 [DEBUG] [Thread-18033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:22:40.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:22:40.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')
2026-04-15T11:22:40.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
2026-04-15T11:22:40.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:22:40.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:22:40.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:22:40.481 [DEBUG] [Thread-18033] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:22:43.195 [DEBUG] [Thread-18035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:22:58.239 [DEBUG] [Thread-18036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:23:08.300 [DEBUG] [Thread-18037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:23:10.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:23:10.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:23:10.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
2026-04-15T11:23:11.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 23, 2), 3.74144, 77.5066, 0.0, 19.2154, 11.5065, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:23:11.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:23:02
2026-04-15T11:23:12.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:23:12.629 [DEBUG] [Thread-18038] [transport.py] [_log()] starting thread (client mode): 0xf1336740
2026-04-15T11:23:12.629 [DEBUG] [Thread-18038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:23:12.648 [DEBUG] [Thread-18038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:23:12.648 [INFO] [Thread-18038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:23:12.651 [DEBUG] [Thread-18038] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:23:12.652 [DEBUG] [Thread-18038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:23:12.652 [DEBUG] [Thread-18038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:23:12.652 [DEBUG] [Thread-18038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:23:12.652 [DEBUG] [Thread-18038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:23:12.652 [DEBUG] [Thread-18038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:23:12.652 [DEBUG] [Thread-18038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:23:12.652 [DEBUG] [Thread-18038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:23:12.652 [DEBUG] [Thread-18038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:23:12.652 [DEBUG] [Thread-18038] [transport.py] [_log()] client lang: <none>
2026-04-15T11:23:12.652 [DEBUG] [Thread-18038] [transport.py] [_log()] server lang: <none>
2026-04-15T11:23:12.652 [DEBUG] [Thread-18038] [transport.py] [_log()] kex follows: False
2026-04-15T11:23:12.653 [DEBUG] [Thread-18038] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:23:12.653 [DEBUG] [Thread-18038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:23:12.653 [DEBUG] [Thread-18038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:23:12.653 [DEBUG] [Thread-18038] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:23:12.653 [DEBUG] [Thread-18038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:23:12.653 [DEBUG] [Thread-18038] [transport.py] [_log()] Compression: none
2026-04-15T11:23:12.653 [DEBUG] [Thread-18038] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:23:12.669 [DEBUG] [Thread-18038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:23:12.670 [DEBUG] [Thread-18038] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:23:12.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:23:12.670 [DEBUG] [Thread-18038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:23:12.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:23:12.671 [DEBUG] [Thread-18038] [transport.py] [_log()] userauth is OK
2026-04-15T11:23:12.671 [DEBUG] [Thread-18038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:23:12.672 [DEBUG] [Thread-18038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:23:12.672 [DEBUG] [Thread-18038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:23:12.672 [DEBUG] [Thread-18038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:23:12.689 [INFO] [Thread-18038] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:23:12.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:23:13.268 [DEBUG] [Thread-18038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:23:13.269 [DEBUG] [Thread-18038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:23:13.270 [DEBUG] [Thread-18040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:23:13.270 [DEBUG] [Thread-18038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:23:13.310 [DEBUG] [Thread-18038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:23:13.310 [DEBUG] [Thread-18038] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:23:13.313 [DEBUG] [Thread-18038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:23:13.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:23:13.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:23:13.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:23:13.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:23:13.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:23:13.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:23:13.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:23:13.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:23:13.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:23:13.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.390753 -999.00  +11.40  18.81     81   +8.40 1 3 1 2 1   888    0 3.22 12.98 ----- 14.0 18.8 309.8 22.8 16.4 -8.6 15.8 -9.5 15.2 -8.6 15.8 -8.3
2026-04-15T11:23:13.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:23:13.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:23:13.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.390753
2026-04-15T11:23:13.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:23:13.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:23:13.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:23:13.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:23:13.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:23:13.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:23:02', tmtdew=3.74144, humidity=77.5066, cloud=0.0, wind=19.2154, temperature=11.5065, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:22:41.059', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:23:13.339 [DEBUG] [Thread-18038] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:23:13.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:23:13.587 [DEBUG] [Thread-18042] [transport.py] [_log()] starting thread (client mode): 0xf1334310
2026-04-15T11:23:13.587 [DEBUG] [Thread-18042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:23:13.602 [DEBUG] [Thread-18042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:23:13.602 [INFO] [Thread-18042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:23:13.609 [DEBUG] [Thread-18042] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:23:13.609 [DEBUG] [Thread-18042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:23:13.609 [DEBUG] [Thread-18042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:23:13.609 [DEBUG] [Thread-18042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:23:13.609 [DEBUG] [Thread-18042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:23:13.609 [DEBUG] [Thread-18042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:23:13.609 [DEBUG] [Thread-18042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:23:13.610 [DEBUG] [Thread-18042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:23:13.610 [DEBUG] [Thread-18042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:23:13.610 [DEBUG] [Thread-18042] [transport.py] [_log()] client lang: <none>
2026-04-15T11:23:13.610 [DEBUG] [Thread-18042] [transport.py] [_log()] server lang: <none>
2026-04-15T11:23:13.610 [DEBUG] [Thread-18042] [transport.py] [_log()] kex follows: False
2026-04-15T11:23:13.610 [DEBUG] [Thread-18042] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:23:13.610 [DEBUG] [Thread-18042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:23:13.610 [DEBUG] [Thread-18042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:23:13.610 [DEBUG] [Thread-18042] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:23:13.610 [DEBUG] [Thread-18042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:23:13.610 [DEBUG] [Thread-18042] [transport.py] [_log()] Compression: none
2026-04-15T11:23:13.611 [DEBUG] [Thread-18042] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:23:13.668 [DEBUG] [Thread-18042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:23:13.669 [DEBUG] [Thread-18042] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:23:13.669 [DEBUG] [Thread-18042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:23:13.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:23:13.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:23:13.725 [DEBUG] [Thread-18042] [transport.py] [_log()] userauth is OK
2026-04-15T11:23:13.725 [DEBUG] [Thread-18042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:23:13.725 [DEBUG] [Thread-18042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:23:13.726 [DEBUG] [Thread-18042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:23:13.726 [DEBUG] [Thread-18042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:23:13.750 [INFO] [Thread-18042] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:23:13.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:23:13.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:23:14.574 [DEBUG] [Thread-18042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:23:14.574 [DEBUG] [Thread-18042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:23:14.622 [DEBUG] [Thread-18042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:23:14.622 [DEBUG] [Thread-18042] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:23:14.631 [DEBUG] [Thread-18042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:23:14.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:23:14.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')
2026-04-15T11:23:14.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
2026-04-15T11:23:14.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:23:14.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:23:14.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:23:14.666 [DEBUG] [Thread-18042] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:23:28.302 [DEBUG] [Thread-18044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:23:37.259 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:23:37.260 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:23:43.347 [DEBUG] [Thread-18045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:23:44.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:23:44.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:23:44.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
2026-04-15T11:23:45.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 23, 38), 4.31971, 74.814, 0.0, 18.9137, 12.0465, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:23:45.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:23:38
2026-04-15T11:23:46.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:23:46.780 [DEBUG] [Thread-18046] [transport.py] [_log()] starting thread (client mode): 0xf13edcf0
2026-04-15T11:23:46.780 [DEBUG] [Thread-18046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:23:46.794 [DEBUG] [Thread-18046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:23:46.794 [INFO] [Thread-18046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:23:46.796 [DEBUG] [Thread-18046] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:23:46.796 [DEBUG] [Thread-18046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:23:46.796 [DEBUG] [Thread-18046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:23:46.796 [DEBUG] [Thread-18046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:23:46.796 [DEBUG] [Thread-18046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:23:46.796 [DEBUG] [Thread-18046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:23:46.796 [DEBUG] [Thread-18046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:23:46.796 [DEBUG] [Thread-18046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:23:46.796 [DEBUG] [Thread-18046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:23:46.797 [DEBUG] [Thread-18046] [transport.py] [_log()] client lang: <none>
2026-04-15T11:23:46.797 [DEBUG] [Thread-18046] [transport.py] [_log()] server lang: <none>
2026-04-15T11:23:46.797 [DEBUG] [Thread-18046] [transport.py] [_log()] kex follows: False
2026-04-15T11:23:46.797 [DEBUG] [Thread-18046] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:23:46.797 [DEBUG] [Thread-18046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:23:46.797 [DEBUG] [Thread-18046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:23:46.797 [DEBUG] [Thread-18046] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:23:46.797 [DEBUG] [Thread-18046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:23:46.797 [DEBUG] [Thread-18046] [transport.py] [_log()] Compression: none
2026-04-15T11:23:46.797 [DEBUG] [Thread-18046] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:23:46.812 [DEBUG] [Thread-18046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:23:46.813 [DEBUG] [Thread-18046] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:23:46.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:23:46.813 [DEBUG] [Thread-18046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:23:46.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:23:46.814 [DEBUG] [Thread-18046] [transport.py] [_log()] userauth is OK
2026-04-15T11:23:46.814 [DEBUG] [Thread-18046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:23:46.814 [DEBUG] [Thread-18046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:23:46.815 [DEBUG] [Thread-18046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:23:46.815 [DEBUG] [Thread-18046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:23:46.832 [INFO] [Thread-18046] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:23:46.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:23:47.435 [DEBUG] [Thread-18046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:23:47.435 [DEBUG] [Thread-18046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:23:47.436 [DEBUG] [Thread-18046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:23:47.476 [DEBUG] [Thread-18046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:23:47.476 [DEBUG] [Thread-18046] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:23:47.478 [DEBUG] [Thread-18046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:23:47.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:23:47.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:23:47.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:23:47.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:23:47.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:23:47.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:23:47.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:23:47.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:23:47.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:23:47.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.391447 -999.00  +11.70  14.65     81   +8.60 1 2 1 2 1   888    0 3.38 17.69 ----- 15.5 14.7 300.7 19.7 16.3 -9.4 15.8 -10.4 15.1 -10.4 15.7 -10.1
2026-04-15T11:23:47.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:23:47.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:23:47.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.391447
2026-04-15T11:23:47.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:23:47.498 [DEBUG] [Thread-18046] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:23:47.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:23:47.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:23:47.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:23:47.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:23:47.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:23:38', tmtdew=4.31971, humidity=74.814, cloud=0.0, wind=18.9137, temperature=12.0465, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:23:41.021', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:23:47.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:23:47.760 [DEBUG] [Thread-18049] [transport.py] [_log()] starting thread (client mode): 0xee906ce0
2026-04-15T11:23:47.760 [DEBUG] [Thread-18049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:23:47.776 [DEBUG] [Thread-18049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:23:47.776 [INFO] [Thread-18049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:23:47.783 [DEBUG] [Thread-18049] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:23:47.783 [DEBUG] [Thread-18049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:23:47.783 [DEBUG] [Thread-18049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:23:47.783 [DEBUG] [Thread-18049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:23:47.784 [DEBUG] [Thread-18049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:23:47.784 [DEBUG] [Thread-18049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:23:47.784 [DEBUG] [Thread-18049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:23:47.784 [DEBUG] [Thread-18049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:23:47.784 [DEBUG] [Thread-18049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:23:47.784 [DEBUG] [Thread-18049] [transport.py] [_log()] client lang: <none>
2026-04-15T11:23:47.784 [DEBUG] [Thread-18049] [transport.py] [_log()] server lang: <none>
2026-04-15T11:23:47.784 [DEBUG] [Thread-18049] [transport.py] [_log()] kex follows: False
2026-04-15T11:23:47.784 [DEBUG] [Thread-18049] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:23:47.784 [DEBUG] [Thread-18049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:23:47.784 [DEBUG] [Thread-18049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:23:47.784 [DEBUG] [Thread-18049] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:23:47.785 [DEBUG] [Thread-18049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:23:47.785 [DEBUG] [Thread-18049] [transport.py] [_log()] Compression: none
2026-04-15T11:23:47.785 [DEBUG] [Thread-18049] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:23:47.845 [DEBUG] [Thread-18049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:23:47.845 [DEBUG] [Thread-18049] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:23:47.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:23:47.846 [DEBUG] [Thread-18049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:23:47.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:23:47.902 [DEBUG] [Thread-18049] [transport.py] [_log()] userauth is OK
2026-04-15T11:23:47.902 [DEBUG] [Thread-18049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:23:47.902 [DEBUG] [Thread-18049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:23:47.903 [DEBUG] [Thread-18049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:23:47.903 [DEBUG] [Thread-18049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:23:47.937 [INFO] [Thread-18049] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:23:47.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:23:47.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:23:48.782 [DEBUG] [Thread-18049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:23:48.783 [DEBUG] [Thread-18049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:23:48.830 [DEBUG] [Thread-18049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:23:48.830 [DEBUG] [Thread-18049] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:23:48.839 [DEBUG] [Thread-18049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:23:48.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:23:48.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')
2026-04-15T11:23:48.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
2026-04-15T11:23:48.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:23:48.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:23:48.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:23:48.874 [DEBUG] [Thread-18049] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:23:58.377 [DEBUG] [Thread-18051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:24:08.413 [DEBUG] [Thread-18052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:24:13.416 [DEBUG] [Thread-18053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:24:18.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:24:18.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:24:18.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
2026-04-15T11:24:20.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 24, 13), 3.79344, 77.7552, 0.0, 18.4921, 11.623, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:24:20.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:24:13
2026-04-15T11:24:20.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:24:20.988 [DEBUG] [Thread-18054] [transport.py] [_log()] starting thread (client mode): 0xf13e09d0
2026-04-15T11:24:20.988 [DEBUG] [Thread-18054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:24:21.004 [DEBUG] [Thread-18054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:24:21.004 [INFO] [Thread-18054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:24:21.006 [DEBUG] [Thread-18054] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:24:21.006 [DEBUG] [Thread-18054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:24:21.006 [DEBUG] [Thread-18054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:24:21.006 [DEBUG] [Thread-18054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:24:21.006 [DEBUG] [Thread-18054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:24:21.006 [DEBUG] [Thread-18054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:24:21.006 [DEBUG] [Thread-18054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:24:21.007 [DEBUG] [Thread-18054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:24:21.007 [DEBUG] [Thread-18054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:24:21.007 [DEBUG] [Thread-18054] [transport.py] [_log()] client lang: <none>
2026-04-15T11:24:21.007 [DEBUG] [Thread-18054] [transport.py] [_log()] server lang: <none>
2026-04-15T11:24:21.007 [DEBUG] [Thread-18054] [transport.py] [_log()] kex follows: False
2026-04-15T11:24:21.007 [DEBUG] [Thread-18054] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:24:21.007 [DEBUG] [Thread-18054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:24:21.007 [DEBUG] [Thread-18054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:24:21.007 [DEBUG] [Thread-18054] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:24:21.007 [DEBUG] [Thread-18054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:24:21.008 [DEBUG] [Thread-18054] [transport.py] [_log()] Compression: none
2026-04-15T11:24:21.008 [DEBUG] [Thread-18054] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:24:21.018 [DEBUG] [Thread-18054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:24:21.018 [DEBUG] [Thread-18054] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:24:21.019 [DEBUG] [Thread-18054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:24:21.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:24:21.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:24:21.020 [DEBUG] [Thread-18054] [transport.py] [_log()] userauth is OK
2026-04-15T11:24:21.020 [DEBUG] [Thread-18054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:24:21.020 [DEBUG] [Thread-18054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:24:21.020 [DEBUG] [Thread-18054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:24:21.020 [DEBUG] [Thread-18054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:24:21.043 [INFO] [Thread-18054] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:24:21.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:24:21.605 [DEBUG] [Thread-18054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:24:21.606 [DEBUG] [Thread-18054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:24:21.606 [DEBUG] [Thread-18054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:24:21.646 [DEBUG] [Thread-18054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:24:21.646 [DEBUG] [Thread-18054] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:24:21.649 [DEBUG] [Thread-18054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:24:21.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:24:21.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:24:21.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:24:21.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:24:21.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:24:21.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:24:21.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:24:21.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:24:21.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:24:21.662 [DEBUG] [Thread-18054] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:24:21.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.391795 -999.00  +11.50  17.97     81   +8.40 1 2 1 2 1   888    0 3.50 20.01 ----- 16.4 18.0 299.4 21.4 16.3 -10.4 15.8 -11.2 15.1 -11.9 15.7 -11.5
2026-04-15T11:24:21.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:24:21.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:24:21.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.391795
2026-04-15T11:24:21.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:24:21.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:24:21.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:24:21.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:24:21.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:24:21.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:24:13', tmtdew=3.79344, humidity=77.7552, cloud=0.0, wind=18.4921, temperature=11.623, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:24:11.088', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:24:21.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:24:21.923 [DEBUG] [Thread-18057] [transport.py] [_log()] starting thread (client mode): 0xee989690
2026-04-15T11:24:21.923 [DEBUG] [Thread-18057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:24:21.937 [DEBUG] [Thread-18057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:24:21.937 [INFO] [Thread-18057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:24:21.944 [DEBUG] [Thread-18057] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:24:21.944 [DEBUG] [Thread-18057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:24:21.944 [DEBUG] [Thread-18057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:24:21.944 [DEBUG] [Thread-18057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:24:21.944 [DEBUG] [Thread-18057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:24:21.944 [DEBUG] [Thread-18057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:24:21.944 [DEBUG] [Thread-18057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:24:21.945 [DEBUG] [Thread-18057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:24:21.945 [DEBUG] [Thread-18057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:24:21.945 [DEBUG] [Thread-18057] [transport.py] [_log()] client lang: <none>
2026-04-15T11:24:21.945 [DEBUG] [Thread-18057] [transport.py] [_log()] server lang: <none>
2026-04-15T11:24:21.945 [DEBUG] [Thread-18057] [transport.py] [_log()] kex follows: False
2026-04-15T11:24:21.945 [DEBUG] [Thread-18057] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:24:21.945 [DEBUG] [Thread-18057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:24:21.945 [DEBUG] [Thread-18057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:24:21.945 [DEBUG] [Thread-18057] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:24:21.945 [DEBUG] [Thread-18057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:24:21.945 [DEBUG] [Thread-18057] [transport.py] [_log()] Compression: none
2026-04-15T11:24:21.945 [DEBUG] [Thread-18057] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:24:22.000 [DEBUG] [Thread-18057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:24:22.000 [DEBUG] [Thread-18057] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:24:22.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:24:22.001 [DEBUG] [Thread-18057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:24:22.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:24:22.057 [DEBUG] [Thread-18057] [transport.py] [_log()] userauth is OK
2026-04-15T11:24:22.057 [DEBUG] [Thread-18057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:24:22.058 [DEBUG] [Thread-18057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:24:22.058 [DEBUG] [Thread-18057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:24:22.058 [DEBUG] [Thread-18057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:24:22.080 [INFO] [Thread-18057] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:24:22.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:24:22.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:24:22.894 [DEBUG] [Thread-18057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:24:22.894 [DEBUG] [Thread-18057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:24:22.942 [DEBUG] [Thread-18057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:24:22.942 [DEBUG] [Thread-18057] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:24:22.951 [DEBUG] [Thread-18057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:24:22.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:24:22.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')
2026-04-15T11:24:22.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
2026-04-15T11:24:22.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:24:22.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:24:22.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:24:22.986 [DEBUG] [Thread-18057] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:24:28.447 [DEBUG] [Thread-18059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:24:37.399 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:24:37.401 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:24:43.491 [DEBUG] [Thread-18060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:24:52.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:24:52.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:24:52.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:24:54.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 24, 13), 3.79344, 77.7552, 0.0, 18.4921, 11.623, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:24:54.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:24:13
2026-04-15T11:24:54.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:24:55.125 [DEBUG] [Thread-18061] [transport.py] [_log()] starting thread (client mode): 0xee989c60
2026-04-15T11:24:55.125 [DEBUG] [Thread-18061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:24:55.145 [DEBUG] [Thread-18061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:24:55.145 [INFO] [Thread-18061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:24:55.148 [DEBUG] [Thread-18061] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:24:55.148 [DEBUG] [Thread-18061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:24:55.148 [DEBUG] [Thread-18061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:24:55.148 [DEBUG] [Thread-18061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:24:55.149 [DEBUG] [Thread-18061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:24:55.149 [DEBUG] [Thread-18061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:24:55.149 [DEBUG] [Thread-18061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:24:55.149 [DEBUG] [Thread-18061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:24:55.149 [DEBUG] [Thread-18061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:24:55.149 [DEBUG] [Thread-18061] [transport.py] [_log()] client lang: <none>
2026-04-15T11:24:55.149 [DEBUG] [Thread-18061] [transport.py] [_log()] server lang: <none>
2026-04-15T11:24:55.149 [DEBUG] [Thread-18061] [transport.py] [_log()] kex follows: False
2026-04-15T11:24:55.149 [DEBUG] [Thread-18061] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:24:55.149 [DEBUG] [Thread-18061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:24:55.149 [DEBUG] [Thread-18061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:24:55.150 [DEBUG] [Thread-18061] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:24:55.150 [DEBUG] [Thread-18061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:24:55.150 [DEBUG] [Thread-18061] [transport.py] [_log()] Compression: none
2026-04-15T11:24:55.150 [DEBUG] [Thread-18061] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:24:55.158 [DEBUG] [Thread-18061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:24:55.159 [DEBUG] [Thread-18061] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:24:55.159 [DEBUG] [Thread-18061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:24:55.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:24:55.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:24:55.160 [DEBUG] [Thread-18061] [transport.py] [_log()] userauth is OK
2026-04-15T11:24:55.160 [DEBUG] [Thread-18061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:24:55.161 [DEBUG] [Thread-18061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:24:55.161 [DEBUG] [Thread-18061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:24:55.161 [DEBUG] [Thread-18061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:24:55.178 [INFO] [Thread-18061] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:24:55.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:24:55.748 [DEBUG] [Thread-18061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:24:55.748 [DEBUG] [Thread-18061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:24:55.749 [DEBUG] [Thread-18061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:24:55.789 [DEBUG] [Thread-18061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:24:55.789 [DEBUG] [Thread-18061] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:24:55.792 [DEBUG] [Thread-18061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:24:55.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:24:55.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:24:55.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:24:55.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:24:55.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:24:55.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:24:55.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:24:55.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:24:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:24:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.392142 -999.00  +11.50  15.01     83   +8.70 1 2 1 2 1   888    0 3.38 19.05 ----- 18.4 15.0 311.2 19.7 16.2 -11.5 15.8 -12.8 15.1 -12.3 15.6 -12.1
2026-04-15T11:24:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:24:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:24:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.392142
2026-04-15T11:24:55.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:24:55.812 [DEBUG] [Thread-18061] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:24:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:24:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:24:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:24:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:24:55.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:24:13', tmtdew=3.79344, humidity=77.7552, cloud=0.0, wind=18.4921, temperature=11.623, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:24:41.069', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:24:56.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:24:56.049 [DEBUG] [Thread-18064] [transport.py] [_log()] starting thread (client mode): 0xf13cb4f0
2026-04-15T11:24:56.049 [DEBUG] [Thread-18064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:24:56.064 [DEBUG] [Thread-18064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:24:56.064 [INFO] [Thread-18064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:24:56.071 [DEBUG] [Thread-18064] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:24:56.071 [DEBUG] [Thread-18064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:24:56.071 [DEBUG] [Thread-18064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:24:56.071 [DEBUG] [Thread-18064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:24:56.071 [DEBUG] [Thread-18064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:24:56.071 [DEBUG] [Thread-18064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:24:56.071 [DEBUG] [Thread-18064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:24:56.072 [DEBUG] [Thread-18064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:24:56.072 [DEBUG] [Thread-18064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:24:56.072 [DEBUG] [Thread-18064] [transport.py] [_log()] client lang: <none>
2026-04-15T11:24:56.072 [DEBUG] [Thread-18064] [transport.py] [_log()] server lang: <none>
2026-04-15T11:24:56.072 [DEBUG] [Thread-18064] [transport.py] [_log()] kex follows: False
2026-04-15T11:24:56.072 [DEBUG] [Thread-18064] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:24:56.072 [DEBUG] [Thread-18064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:24:56.072 [DEBUG] [Thread-18064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:24:56.072 [DEBUG] [Thread-18064] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:24:56.072 [DEBUG] [Thread-18064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:24:56.072 [DEBUG] [Thread-18064] [transport.py] [_log()] Compression: none
2026-04-15T11:24:56.073 [DEBUG] [Thread-18064] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:24:56.132 [DEBUG] [Thread-18064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:24:56.133 [DEBUG] [Thread-18064] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:24:56.133 [DEBUG] [Thread-18064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:24:56.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:24:56.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:24:56.189 [DEBUG] [Thread-18064] [transport.py] [_log()] userauth is OK
2026-04-15T11:24:56.189 [DEBUG] [Thread-18064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:24:56.189 [DEBUG] [Thread-18064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:24:56.189 [DEBUG] [Thread-18064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:24:56.189 [DEBUG] [Thread-18064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:24:56.207 [INFO] [Thread-18064] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:24:56.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:24:56.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:24:57.113 [DEBUG] [Thread-18064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:24:57.114 [DEBUG] [Thread-18064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:24:57.161 [DEBUG] [Thread-18064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:24:57.161 [DEBUG] [Thread-18064] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:24:57.170 [DEBUG] [Thread-18064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:24:57.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:24:57.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T11:24:57.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') -> 00000000
2026-04-15T11:24:57.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:24:57.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:24:57.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:24:57.205 [DEBUG] [Thread-18064] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:24:58.524 [DEBUG] [Thread-18066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:25:08.523 [DEBUG] [Thread-18067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:25:13.566 [DEBUG] [Thread-18068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:25:27.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:25:27.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:25:27.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
2026-04-15T11:25:28.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 24, 48), 4.2364, 75.2782, 0.0, 19.9015, 12.2786, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:25:28.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:24:48
2026-04-15T11:25:28.597 [DEBUG] [Thread-18069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:25:28.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:25:29.376 [DEBUG] [Thread-18070] [transport.py] [_log()] starting thread (client mode): 0xf1367490
2026-04-15T11:25:29.376 [DEBUG] [Thread-18070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:25:29.401 [DEBUG] [Thread-18070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:25:29.401 [INFO] [Thread-18070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:25:29.404 [DEBUG] [Thread-18070] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:25:29.405 [DEBUG] [Thread-18070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:25:29.405 [DEBUG] [Thread-18070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:25:29.405 [DEBUG] [Thread-18070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:25:29.405 [DEBUG] [Thread-18070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:25:29.405 [DEBUG] [Thread-18070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:25:29.405 [DEBUG] [Thread-18070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:25:29.405 [DEBUG] [Thread-18070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:25:29.405 [DEBUG] [Thread-18070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:25:29.405 [DEBUG] [Thread-18070] [transport.py] [_log()] client lang: <none>
2026-04-15T11:25:29.406 [DEBUG] [Thread-18070] [transport.py] [_log()] server lang: <none>
2026-04-15T11:25:29.406 [DEBUG] [Thread-18070] [transport.py] [_log()] kex follows: False
2026-04-15T11:25:29.406 [DEBUG] [Thread-18070] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:25:29.406 [DEBUG] [Thread-18070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:25:29.406 [DEBUG] [Thread-18070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:25:29.406 [DEBUG] [Thread-18070] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:25:29.406 [DEBUG] [Thread-18070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:25:29.406 [DEBUG] [Thread-18070] [transport.py] [_log()] Compression: none
2026-04-15T11:25:29.406 [DEBUG] [Thread-18070] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:25:29.415 [DEBUG] [Thread-18070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:25:29.416 [DEBUG] [Thread-18070] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:25:29.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:25:29.416 [DEBUG] [Thread-18070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:25:29.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:25:29.417 [DEBUG] [Thread-18070] [transport.py] [_log()] userauth is OK
2026-04-15T11:25:29.418 [DEBUG] [Thread-18070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:25:29.418 [DEBUG] [Thread-18070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:25:29.418 [DEBUG] [Thread-18070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:25:29.418 [DEBUG] [Thread-18070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:25:29.436 [INFO] [Thread-18070] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:25:29.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:25:29.983 [DEBUG] [Thread-18070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:25:29.983 [DEBUG] [Thread-18070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:25:29.984 [DEBUG] [Thread-18070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:25:30.024 [DEBUG] [Thread-18070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:25:30.024 [DEBUG] [Thread-18070] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:25:30.027 [DEBUG] [Thread-18070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:25:30.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:25:30.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:25:30.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:25:30.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:25:30.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:25:30.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:25:30.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:25:30.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:25:30.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:25:30.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.392489 -999.00  +11.30  15.59     80   +8.00 1 2 1 2 1   888    0 3.49 20.39 ----- 17.1 15.6 319.8 20.3 16.2 -12.7 15.7 -13.3 15.1 -12.7 15.6 -13.2
2026-04-15T11:25:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:25:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:25:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.392489
2026-04-15T11:25:30.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:25:30.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:25:30.051 [DEBUG] [Thread-18070] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:25:30.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:25:30.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:25:30.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:25:30.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:24:48', tmtdew=4.2364, humidity=75.2782, cloud=0.0, wind=19.9015, temperature=12.2786, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:25:11.050', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:25:30.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:25:37.541 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:25:37.542 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:25:43.628 [DEBUG] [Thread-18073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:25:58.674 [DEBUG] [Thread-18074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:26:08.644 [DEBUG] [Thread-18075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:26:13.707 [DEBUG] [Thread-18076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:26:28.737 [DEBUG] [Thread-18077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:26:37.682 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:26:37.684 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:26:43.769 [DEBUG] [Thread-18078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:26:58.801 [DEBUG] [Thread-18079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:27:08.773 [DEBUG] [Thread-18080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:27:13.832 [DEBUG] [Thread-18081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:27:28.861 [DEBUG] [Thread-18082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:27:37.827 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:27:37.828 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:27:43.894 [DEBUG] [Thread-18083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:27:44.778 [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
2026-04-15T11:27:58.925 [DEBUG] [Thread-18084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:28:08.898 [DEBUG] [Thread-18085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:28:13.956 [DEBUG] [Thread-18086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:28:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:28:14.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:28:14.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
2026-04-15T11:28:16.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 27, 46), 3.96189, 76.6376, 0.0, 13.9039, 11.9137, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:28:16.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:27:46
2026-04-15T11:28:16.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:28:16.858 [DEBUG] [Thread-18087] [transport.py] [_log()] starting thread (client mode): 0xf13e3e80
2026-04-15T11:28:16.859 [DEBUG] [Thread-18087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:28:16.879 [DEBUG] [Thread-18087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:28:16.879 [INFO] [Thread-18087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:28:16.880 [DEBUG] [Thread-18087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:28:16.881 [DEBUG] [Thread-18087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:28:16.881 [DEBUG] [Thread-18087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:28:16.881 [DEBUG] [Thread-18087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:28:16.881 [DEBUG] [Thread-18087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:28:16.881 [DEBUG] [Thread-18087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:28:16.881 [DEBUG] [Thread-18087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:28:16.881 [DEBUG] [Thread-18087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:28:16.881 [DEBUG] [Thread-18087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:28:16.881 [DEBUG] [Thread-18087] [transport.py] [_log()] client lang: <none>
2026-04-15T11:28:16.881 [DEBUG] [Thread-18087] [transport.py] [_log()] server lang: <none>
2026-04-15T11:28:16.881 [DEBUG] [Thread-18087] [transport.py] [_log()] kex follows: False
2026-04-15T11:28:16.881 [DEBUG] [Thread-18087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:28:16.882 [DEBUG] [Thread-18087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:28:16.882 [DEBUG] [Thread-18087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:28:16.882 [DEBUG] [Thread-18087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:28:16.882 [DEBUG] [Thread-18087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:28:16.882 [DEBUG] [Thread-18087] [transport.py] [_log()] Compression: none
2026-04-15T11:28:16.882 [DEBUG] [Thread-18087] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:28:16.900 [DEBUG] [Thread-18087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:28:16.900 [DEBUG] [Thread-18087] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:28:16.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:28:16.901 [DEBUG] [Thread-18087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:28:16.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:28:16.902 [DEBUG] [Thread-18087] [transport.py] [_log()] userauth is OK
2026-04-15T11:28:16.902 [DEBUG] [Thread-18087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:28:16.902 [DEBUG] [Thread-18087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:28:16.902 [DEBUG] [Thread-18087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:28:16.902 [DEBUG] [Thread-18087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:28:16.926 [INFO] [Thread-18087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:28:16.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:28:17.711 [DEBUG] [Thread-18087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:28:17.711 [DEBUG] [Thread-18087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:28:17.711 [DEBUG] [Thread-18087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:28:17.752 [DEBUG] [Thread-18087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:28:17.752 [DEBUG] [Thread-18087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:28:17.755 [DEBUG] [Thread-18087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:28:17.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:28:17.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:28:17.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:28:17.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:28:17.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:28:17.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:28:17.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:28:17.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:28:17.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:28:17.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.394225 -999.00  +11.50  18.39     82   +8.60 1 2 1 2 1   888    0 3.34 14.53 ----- 17.5 18.4 305.8 22.2 16.2 -14.6 15.7 -16.3 15.0 -14.3 15.6 -13.3
2026-04-15T11:28:17.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:28:17.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:28:17.780 [DEBUG] [Thread-18087] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:28:17.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.394225
2026-04-15T11:28:17.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:28:17.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:28:17.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:28:17.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:28:17.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:28:17.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:27:46', tmtdew=3.96189, humidity=76.6376, cloud=0.0, wind=13.9039, temperature=11.9137, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:27:41.040', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:28:18.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:28:18.036 [DEBUG] [Thread-18090] [transport.py] [_log()] starting thread (client mode): 0xee98a2f0
2026-04-15T11:28:18.036 [DEBUG] [Thread-18090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:28:18.050 [DEBUG] [Thread-18090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:28:18.050 [INFO] [Thread-18090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:28:18.057 [DEBUG] [Thread-18090] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:28:18.058 [DEBUG] [Thread-18090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:28:18.058 [DEBUG] [Thread-18090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:28:18.058 [DEBUG] [Thread-18090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:28:18.058 [DEBUG] [Thread-18090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:28:18.058 [DEBUG] [Thread-18090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:28:18.058 [DEBUG] [Thread-18090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:28:18.058 [DEBUG] [Thread-18090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:28:18.058 [DEBUG] [Thread-18090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:28:18.058 [DEBUG] [Thread-18090] [transport.py] [_log()] client lang: <none>
2026-04-15T11:28:18.058 [DEBUG] [Thread-18090] [transport.py] [_log()] server lang: <none>
2026-04-15T11:28:18.058 [DEBUG] [Thread-18090] [transport.py] [_log()] kex follows: False
2026-04-15T11:28:18.059 [DEBUG] [Thread-18090] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:28:18.059 [DEBUG] [Thread-18090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:28:18.059 [DEBUG] [Thread-18090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:28:18.059 [DEBUG] [Thread-18090] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:28:18.059 [DEBUG] [Thread-18090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:28:18.059 [DEBUG] [Thread-18090] [transport.py] [_log()] Compression: none
2026-04-15T11:28:18.059 [DEBUG] [Thread-18090] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:28:18.115 [DEBUG] [Thread-18090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:28:18.115 [DEBUG] [Thread-18090] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:28:18.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:28:18.116 [DEBUG] [Thread-18090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:28:18.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:28:18.172 [DEBUG] [Thread-18090] [transport.py] [_log()] userauth is OK
2026-04-15T11:28:18.172 [DEBUG] [Thread-18090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:28:18.172 [DEBUG] [Thread-18090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:28:18.172 [DEBUG] [Thread-18090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:28:18.173 [DEBUG] [Thread-18090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:28:18.200 [INFO] [Thread-18090] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:28:18.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:28:18.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:28:19.017 [DEBUG] [Thread-18090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:28:19.017 [DEBUG] [Thread-18090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:28:19.065 [DEBUG] [Thread-18090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:28:19.065 [DEBUG] [Thread-18090] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:28:19.074 [DEBUG] [Thread-18090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:28:19.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:28:19.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')
2026-04-15T11:28:19.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
2026-04-15T11:28:19.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:28:19.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:28:19.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:28:19.110 [DEBUG] [Thread-18090] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:28:28.988 [DEBUG] [Thread-18092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:28:37.968 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:28:37.969 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:28:44.034 [DEBUG] [Thread-18093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:28:49.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:28:49.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:28:49.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
2026-04-15T11:28:50.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 28, 21), 3.62977, 78.3354, 0.0, 18.9508, 11.5231, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:28:50.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:28:21
2026-04-15T11:28:50.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:28:51.258 [DEBUG] [Thread-18094] [transport.py] [_log()] starting thread (client mode): 0xf1337b20
2026-04-15T11:28:51.258 [DEBUG] [Thread-18094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:28:51.274 [DEBUG] [Thread-18094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:28:51.274 [INFO] [Thread-18094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:28:51.275 [DEBUG] [Thread-18094] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:28:51.275 [DEBUG] [Thread-18094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:28:51.275 [DEBUG] [Thread-18094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:28:51.275 [DEBUG] [Thread-18094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:28:51.276 [DEBUG] [Thread-18094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:28:51.276 [DEBUG] [Thread-18094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:28:51.276 [DEBUG] [Thread-18094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:28:51.276 [DEBUG] [Thread-18094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:28:51.276 [DEBUG] [Thread-18094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:28:51.276 [DEBUG] [Thread-18094] [transport.py] [_log()] client lang: <none>
2026-04-15T11:28:51.276 [DEBUG] [Thread-18094] [transport.py] [_log()] server lang: <none>
2026-04-15T11:28:51.276 [DEBUG] [Thread-18094] [transport.py] [_log()] kex follows: False
2026-04-15T11:28:51.277 [DEBUG] [Thread-18094] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:28:51.277 [DEBUG] [Thread-18094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:28:51.277 [DEBUG] [Thread-18094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:28:51.277 [DEBUG] [Thread-18094] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:28:51.277 [DEBUG] [Thread-18094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:28:51.277 [DEBUG] [Thread-18094] [transport.py] [_log()] Compression: none
2026-04-15T11:28:51.278 [DEBUG] [Thread-18094] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:28:51.294 [DEBUG] [Thread-18094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:28:51.295 [DEBUG] [Thread-18094] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:28:51.295 [DEBUG] [Thread-18094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:28:51.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:28:51.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:28:51.296 [DEBUG] [Thread-18094] [transport.py] [_log()] userauth is OK
2026-04-15T11:28:51.296 [DEBUG] [Thread-18094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:28:51.296 [DEBUG] [Thread-18094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:28:51.296 [DEBUG] [Thread-18094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:28:51.296 [DEBUG] [Thread-18094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:28:51.317 [INFO] [Thread-18094] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:28:51.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:28:52.122 [DEBUG] [Thread-18094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:28:52.122 [DEBUG] [Thread-18094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:28:52.122 [DEBUG] [Thread-18094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:28:52.163 [DEBUG] [Thread-18094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:28:52.163 [DEBUG] [Thread-18094] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:28:52.165 [DEBUG] [Thread-18094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:28:52.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:28:52.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:28:52.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:28:52.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:28:52.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:28:52.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:28:52.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:28:52.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:28:52.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:28:52.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.394572 -999.00  +11.50  13.05     81   +8.30 1 2 1 2 1   888    0 3.27 14.46 ----- 14.0 13.1 297.8 20.9 16.2 -14.8 15.7 -16.2 15.0 -15.4 15.6 -12.8
2026-04-15T11:28:52.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:28:52.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:28:52.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.394572
2026-04-15T11:28:52.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:28:52.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:28:52.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:28:52.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:28:52.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:28:52.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:28:21', tmtdew=3.62977, humidity=78.3354, cloud=0.0, wind=18.9508, temperature=11.5231, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:28:11.021', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:28:52.185 [DEBUG] [Thread-18094] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:28:52.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:28:52.418 [DEBUG] [Thread-18097] [transport.py] [_log()] starting thread (client mode): 0xf1334400
2026-04-15T11:28:52.418 [DEBUG] [Thread-18097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:28:52.432 [DEBUG] [Thread-18097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:28:52.433 [INFO] [Thread-18097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:28:52.440 [DEBUG] [Thread-18097] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:28:52.440 [DEBUG] [Thread-18097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:28:52.440 [DEBUG] [Thread-18097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:28:52.440 [DEBUG] [Thread-18097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:28:52.440 [DEBUG] [Thread-18097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:28:52.440 [DEBUG] [Thread-18097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:28:52.440 [DEBUG] [Thread-18097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:28:52.441 [DEBUG] [Thread-18097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:28:52.441 [DEBUG] [Thread-18097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:28:52.441 [DEBUG] [Thread-18097] [transport.py] [_log()] client lang: <none>
2026-04-15T11:28:52.441 [DEBUG] [Thread-18097] [transport.py] [_log()] server lang: <none>
2026-04-15T11:28:52.441 [DEBUG] [Thread-18097] [transport.py] [_log()] kex follows: False
2026-04-15T11:28:52.441 [DEBUG] [Thread-18097] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:28:52.441 [DEBUG] [Thread-18097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:28:52.441 [DEBUG] [Thread-18097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:28:52.441 [DEBUG] [Thread-18097] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:28:52.441 [DEBUG] [Thread-18097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:28:52.442 [DEBUG] [Thread-18097] [transport.py] [_log()] Compression: none
2026-04-15T11:28:52.442 [DEBUG] [Thread-18097] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:28:52.497 [DEBUG] [Thread-18097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:28:52.497 [DEBUG] [Thread-18097] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:28:52.498 [DEBUG] [Thread-18097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:28:52.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:28:52.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:28:52.554 [DEBUG] [Thread-18097] [transport.py] [_log()] userauth is OK
2026-04-15T11:28:52.554 [DEBUG] [Thread-18097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:28:52.555 [DEBUG] [Thread-18097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:28:52.555 [DEBUG] [Thread-18097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:28:52.555 [DEBUG] [Thread-18097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:28:52.579 [INFO] [Thread-18097] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:28:52.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:28:52.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:28:53.409 [DEBUG] [Thread-18097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:28:53.409 [DEBUG] [Thread-18097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:28:53.457 [DEBUG] [Thread-18097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:28:53.457 [DEBUG] [Thread-18097] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:28:53.466 [DEBUG] [Thread-18097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:28:53.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:28:53.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')
2026-04-15T11:28:53.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') -> 00000000
2026-04-15T11:28:53.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:28:53.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:28:53.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:28:53.500 [DEBUG] [Thread-18097] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:28:59.065 [DEBUG] [Thread-18099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:29:09.008 [DEBUG] [Thread-18100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:29:14.109 [DEBUG] [Thread-18101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:29:23.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:29:23.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:29:23.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
2026-04-15T11:29:24.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 28, 56), 3.83116, 77.3048, 0.0, 15.0163, 11.49, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:29:24.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:28:56
2026-04-15T11:29:25.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:29:25.662 [DEBUG] [Thread-18102] [transport.py] [_log()] starting thread (client mode): 0xee98e560
2026-04-15T11:29:25.662 [DEBUG] [Thread-18102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:29:25.681 [DEBUG] [Thread-18102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:29:25.681 [INFO] [Thread-18102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:29:25.682 [DEBUG] [Thread-18102] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:29:25.682 [DEBUG] [Thread-18102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:29:25.682 [DEBUG] [Thread-18102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:29:25.682 [DEBUG] [Thread-18102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:29:25.682 [DEBUG] [Thread-18102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:29:25.682 [DEBUG] [Thread-18102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:29:25.682 [DEBUG] [Thread-18102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:29:25.682 [DEBUG] [Thread-18102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:29:25.682 [DEBUG] [Thread-18102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:29:25.682 [DEBUG] [Thread-18102] [transport.py] [_log()] client lang: <none>
2026-04-15T11:29:25.682 [DEBUG] [Thread-18102] [transport.py] [_log()] server lang: <none>
2026-04-15T11:29:25.682 [DEBUG] [Thread-18102] [transport.py] [_log()] kex follows: False
2026-04-15T11:29:25.683 [DEBUG] [Thread-18102] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:29:25.683 [DEBUG] [Thread-18102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:29:25.683 [DEBUG] [Thread-18102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:29:25.683 [DEBUG] [Thread-18102] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:29:25.683 [DEBUG] [Thread-18102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:29:25.683 [DEBUG] [Thread-18102] [transport.py] [_log()] Compression: none
2026-04-15T11:29:25.683 [DEBUG] [Thread-18102] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:29:25.700 [DEBUG] [Thread-18102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:29:25.700 [DEBUG] [Thread-18102] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:29:25.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:29:25.701 [DEBUG] [Thread-18102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:29:25.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:29:25.702 [DEBUG] [Thread-18102] [transport.py] [_log()] userauth is OK
2026-04-15T11:29:25.702 [DEBUG] [Thread-18102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:29:25.702 [DEBUG] [Thread-18102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:29:25.702 [DEBUG] [Thread-18102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:29:25.702 [DEBUG] [Thread-18102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:29:25.723 [INFO] [Thread-18102] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:29:25.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:29:26.506 [DEBUG] [Thread-18102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:29:26.506 [DEBUG] [Thread-18102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:29:26.507 [DEBUG] [Thread-18102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:29:26.547 [DEBUG] [Thread-18102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:29:26.547 [DEBUG] [Thread-18102] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:29:26.553 [DEBUG] [Thread-18102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:29:26.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:29:26.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:29:26.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:29:26.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:29:26.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:29:26.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:29:26.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:29:26.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:29:26.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:29:26.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.394919 -999.00  +11.30  15.61     80   +8.10 1 2 1 2 1   888    0 3.31 13.85 ----- 14.8 15.6 311.2 17.6 16.2 -14.5 15.6 -15.9 15.0 -14.9 15.6 -12.6
2026-04-15T11:29:26.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:29:26.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:29:26.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.394919
2026-04-15T11:29:26.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:29:26.571 [DEBUG] [Thread-18102] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:29:26.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:29:26.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:29:26.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:29:26.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:29:26.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:28:56', tmtdew=3.83116, humidity=77.3048, cloud=0.0, wind=15.0163, temperature=11.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:28:41.002', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:29:26.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:29:26.828 [DEBUG] [Thread-18105] [transport.py] [_log()] starting thread (client mode): 0xf13e3a90
2026-04-15T11:29:26.829 [DEBUG] [Thread-18105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:29:26.843 [DEBUG] [Thread-18105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:29:26.843 [INFO] [Thread-18105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:29:26.850 [DEBUG] [Thread-18105] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:29:26.850 [DEBUG] [Thread-18105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:29:26.850 [DEBUG] [Thread-18105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:29:26.850 [DEBUG] [Thread-18105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:29:26.850 [DEBUG] [Thread-18105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:29:26.851 [DEBUG] [Thread-18105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:29:26.851 [DEBUG] [Thread-18105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:29:26.851 [DEBUG] [Thread-18105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:29:26.851 [DEBUG] [Thread-18105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:29:26.851 [DEBUG] [Thread-18105] [transport.py] [_log()] client lang: <none>
2026-04-15T11:29:26.851 [DEBUG] [Thread-18105] [transport.py] [_log()] server lang: <none>
2026-04-15T11:29:26.851 [DEBUG] [Thread-18105] [transport.py] [_log()] kex follows: False
2026-04-15T11:29:26.851 [DEBUG] [Thread-18105] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:29:26.851 [DEBUG] [Thread-18105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:29:26.851 [DEBUG] [Thread-18105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:29:26.851 [DEBUG] [Thread-18105] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:29:26.851 [DEBUG] [Thread-18105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:29:26.851 [DEBUG] [Thread-18105] [transport.py] [_log()] Compression: none
2026-04-15T11:29:26.851 [DEBUG] [Thread-18105] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:29:26.907 [DEBUG] [Thread-18105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:29:26.907 [DEBUG] [Thread-18105] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:29:26.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:29:26.908 [DEBUG] [Thread-18105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:29:26.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:29:26.966 [DEBUG] [Thread-18105] [transport.py] [_log()] userauth is OK
2026-04-15T11:29:26.966 [DEBUG] [Thread-18105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:29:26.966 [DEBUG] [Thread-18105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:29:26.966 [DEBUG] [Thread-18105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:29:26.966 [DEBUG] [Thread-18105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:29:26.990 [INFO] [Thread-18105] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:29:26.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:29:26.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:29:27.812 [DEBUG] [Thread-18105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:29:27.813 [DEBUG] [Thread-18105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:29:27.860 [DEBUG] [Thread-18105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:29:27.860 [DEBUG] [Thread-18105] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:29:27.869 [DEBUG] [Thread-18105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:29:27.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:29:27.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')
2026-04-15T11:29:27.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
2026-04-15T11:29:27.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:29:27.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:29:27.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:29:27.904 [DEBUG] [Thread-18105] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:29:29.140 [DEBUG] [Thread-18107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:29:38.109 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:29:38.110 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:29:44.183 [DEBUG] [Thread-18108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:29:57.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:29:57.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:29:57.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
2026-04-15T11:29:59.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 29, 32), 3.79159, 77.5037, 0.0, 15.6337, 11.4568, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:29:59.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:29:32
2026-04-15T11:29:59.213 [DEBUG] [Thread-18109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:29:59.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:30:00.014 [DEBUG] [Thread-18110] [transport.py] [_log()] starting thread (client mode): 0xf1334a60
2026-04-15T11:30:00.014 [DEBUG] [Thread-18110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:30:00.033 [DEBUG] [Thread-18110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:30:00.033 [INFO] [Thread-18110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:30:00.036 [DEBUG] [Thread-18110] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:30:00.036 [DEBUG] [Thread-18110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:30:00.036 [DEBUG] [Thread-18110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:30:00.036 [DEBUG] [Thread-18110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:30:00.036 [DEBUG] [Thread-18110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:30:00.036 [DEBUG] [Thread-18110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:30:00.036 [DEBUG] [Thread-18110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:30:00.036 [DEBUG] [Thread-18110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:30:00.036 [DEBUG] [Thread-18110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:30:00.037 [DEBUG] [Thread-18110] [transport.py] [_log()] client lang: <none>
2026-04-15T11:30:00.037 [DEBUG] [Thread-18110] [transport.py] [_log()] server lang: <none>
2026-04-15T11:30:00.037 [DEBUG] [Thread-18110] [transport.py] [_log()] kex follows: False
2026-04-15T11:30:00.037 [DEBUG] [Thread-18110] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:30:00.037 [DEBUG] [Thread-18110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:30:00.037 [DEBUG] [Thread-18110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:30:00.037 [DEBUG] [Thread-18110] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:30:00.037 [DEBUG] [Thread-18110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:30:00.037 [DEBUG] [Thread-18110] [transport.py] [_log()] Compression: none
2026-04-15T11:30:00.037 [DEBUG] [Thread-18110] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:30:00.054 [DEBUG] [Thread-18110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:30:00.055 [DEBUG] [Thread-18110] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:30:00.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:30:00.055 [DEBUG] [Thread-18110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:30:00.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:30:00.056 [DEBUG] [Thread-18110] [transport.py] [_log()] userauth is OK
2026-04-15T11:30:00.056 [DEBUG] [Thread-18110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:30:00.057 [DEBUG] [Thread-18110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:30:00.057 [DEBUG] [Thread-18110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:30:00.057 [DEBUG] [Thread-18110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:30:00.075 [INFO] [Thread-18110] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:30:00.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:30:00.817 [DEBUG] [Thread-18110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:30:00.818 [DEBUG] [Thread-18110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:30:00.818 [DEBUG] [Thread-18110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:30:00.858 [DEBUG] [Thread-18110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:30:00.858 [DEBUG] [Thread-18110] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:30:00.860 [DEBUG] [Thread-18110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:30:00.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:30:00.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:30:00.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:30:00.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:30:00.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:30:00.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:30:00.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:30:00.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:30:00.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:30:00.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.395267 -999.00  +11.30  17.22     81   +8.10 1 2 1 2 1   888    0 3.37 14.23 ----- 18.8 17.2 305.2 21.8 16.2 -13.6 15.7 -14.4 15.0 -13.1 15.7 -11.4
2026-04-15T11:30:00.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:30:00.882 [DEBUG] [Thread-18110] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:30:00.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:30:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.395267
2026-04-15T11:30:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:30:00.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:30:00.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:30:00.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:30:00.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:30:00.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:29:32', tmtdew=3.79159, humidity=77.5037, cloud=0.0, wind=15.6337, temperature=11.4568, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:29:11.069', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:30:01.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:30:01.138 [DEBUG] [Thread-18113] [transport.py] [_log()] starting thread (client mode): 0xee91ece0
2026-04-15T11:30:01.138 [DEBUG] [Thread-18113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:30:01.153 [DEBUG] [Thread-18113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:30:01.153 [INFO] [Thread-18113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:30:01.160 [DEBUG] [Thread-18113] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:30:01.160 [DEBUG] [Thread-18113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:30:01.160 [DEBUG] [Thread-18113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:30:01.160 [DEBUG] [Thread-18113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:30:01.161 [DEBUG] [Thread-18113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:30:01.161 [DEBUG] [Thread-18113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:30:01.161 [DEBUG] [Thread-18113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:30:01.161 [DEBUG] [Thread-18113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:30:01.161 [DEBUG] [Thread-18113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:30:01.161 [DEBUG] [Thread-18113] [transport.py] [_log()] client lang: <none>
2026-04-15T11:30:01.161 [DEBUG] [Thread-18113] [transport.py] [_log()] server lang: <none>
2026-04-15T11:30:01.161 [DEBUG] [Thread-18113] [transport.py] [_log()] kex follows: False
2026-04-15T11:30:01.161 [DEBUG] [Thread-18113] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:30:01.161 [DEBUG] [Thread-18113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:30:01.161 [DEBUG] [Thread-18113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:30:01.161 [DEBUG] [Thread-18113] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:30:01.161 [DEBUG] [Thread-18113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:30:01.162 [DEBUG] [Thread-18113] [transport.py] [_log()] Compression: none
2026-04-15T11:30:01.162 [DEBUG] [Thread-18113] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:30:01.218 [DEBUG] [Thread-18113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:30:01.218 [DEBUG] [Thread-18113] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:30:01.219 [DEBUG] [Thread-18113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:30:01.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:30:01.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:30:01.275 [DEBUG] [Thread-18113] [transport.py] [_log()] userauth is OK
2026-04-15T11:30:01.275 [DEBUG] [Thread-18113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:30:01.275 [DEBUG] [Thread-18113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:30:01.275 [DEBUG] [Thread-18113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:30:01.275 [DEBUG] [Thread-18113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:30:01.300 [INFO] [Thread-18113] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:30:01.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:30:01.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:30:02.144 [DEBUG] [Thread-18113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:30:02.144 [DEBUG] [Thread-18113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:30:02.191 [DEBUG] [Thread-18113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:30:02.192 [DEBUG] [Thread-18113] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:30:02.200 [DEBUG] [Thread-18113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:30:02.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:30:02.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')
2026-04-15T11:30:02.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
2026-04-15T11:30:02.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:30:02.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:30:02.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:30:02.238 [DEBUG] [Thread-18113] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:30:09.119 [DEBUG] [Thread-18115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:30:14.243 [DEBUG] [Thread-18116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:30:29.288 [DEBUG] [Thread-18117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:30:32.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:30:32.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:30:32.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
2026-04-15T11:30:33.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 30, 8), 3.79685, 77.4872, 0.0, 14.981, 11.5231, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:30:33.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:30:08
2026-04-15T11:30:33.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:30:34.346 [DEBUG] [Thread-18118] [transport.py] [_log()] starting thread (client mode): 0xf13ef2b0
2026-04-15T11:30:34.346 [DEBUG] [Thread-18118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:30:34.365 [DEBUG] [Thread-18118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:30:34.365 [INFO] [Thread-18118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:30:34.369 [DEBUG] [Thread-18118] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:30:34.369 [DEBUG] [Thread-18118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:30:34.369 [DEBUG] [Thread-18118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:30:34.369 [DEBUG] [Thread-18118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:30:34.369 [DEBUG] [Thread-18118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:30:34.369 [DEBUG] [Thread-18118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:30:34.369 [DEBUG] [Thread-18118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:30:34.369 [DEBUG] [Thread-18118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:30:34.369 [DEBUG] [Thread-18118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:30:34.369 [DEBUG] [Thread-18118] [transport.py] [_log()] client lang: <none>
2026-04-15T11:30:34.369 [DEBUG] [Thread-18118] [transport.py] [_log()] server lang: <none>
2026-04-15T11:30:34.369 [DEBUG] [Thread-18118] [transport.py] [_log()] kex follows: False
2026-04-15T11:30:34.369 [DEBUG] [Thread-18118] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:30:34.369 [DEBUG] [Thread-18118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:30:34.369 [DEBUG] [Thread-18118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:30:34.370 [DEBUG] [Thread-18118] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:30:34.370 [DEBUG] [Thread-18118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:30:34.370 [DEBUG] [Thread-18118] [transport.py] [_log()] Compression: none
2026-04-15T11:30:34.370 [DEBUG] [Thread-18118] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:30:34.386 [DEBUG] [Thread-18118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:30:34.386 [DEBUG] [Thread-18118] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:30:34.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:30:34.387 [DEBUG] [Thread-18118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:30:34.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:30:34.387 [DEBUG] [Thread-18118] [transport.py] [_log()] userauth is OK
2026-04-15T11:30:34.387 [DEBUG] [Thread-18118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:30:34.388 [DEBUG] [Thread-18118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:30:34.388 [DEBUG] [Thread-18118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:30:34.388 [DEBUG] [Thread-18118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:30:34.407 [INFO] [Thread-18118] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:30:34.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:30:36.478 [DEBUG] [Thread-18118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:30:36.478 [DEBUG] [Thread-18118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:30:36.479 [DEBUG] [Thread-18118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:30:36.519 [DEBUG] [Thread-18118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:30:36.519 [DEBUG] [Thread-18118] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:30:36.521 [DEBUG] [Thread-18118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:30:36.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:30:36.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:30:36.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:30:36.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:30:36.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:30:36.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:30:36.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:30:36.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:30:36.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:30:36.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.395614 -999.00  +11.10  13.85     81   +8.10 1 2 1 2 1   888    0 3.31 12.97 ----- 16.9 13.8 286.2 20.8 16.2 -12.2 15.6 -13.6 14.9 -13.0 15.6 -10.4
2026-04-15T11:30:36.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:30:36.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:30:36.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.395614
2026-04-15T11:30:36.549 [DEBUG] [Thread-18118] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:30:36.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:30:36.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:30:36.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:30:36.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:30:36.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:30:36.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:30:08', tmtdew=3.79685, humidity=77.4872, cloud=0.0, wind=14.981, temperature=11.5231, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:29:41.050', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:30:36.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:30:36.809 [DEBUG] [Thread-18121] [transport.py] [_log()] starting thread (client mode): 0xee98aa70
2026-04-15T11:30:36.809 [DEBUG] [Thread-18121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:30:36.823 [DEBUG] [Thread-18121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:30:36.823 [INFO] [Thread-18121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:30:36.831 [DEBUG] [Thread-18121] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:30:36.831 [DEBUG] [Thread-18121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:30:36.831 [DEBUG] [Thread-18121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:30:36.831 [DEBUG] [Thread-18121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:30:36.831 [DEBUG] [Thread-18121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:30:36.831 [DEBUG] [Thread-18121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:30:36.831 [DEBUG] [Thread-18121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:30:36.831 [DEBUG] [Thread-18121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:30:36.831 [DEBUG] [Thread-18121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:30:36.831 [DEBUG] [Thread-18121] [transport.py] [_log()] client lang: <none>
2026-04-15T11:30:36.832 [DEBUG] [Thread-18121] [transport.py] [_log()] server lang: <none>
2026-04-15T11:30:36.832 [DEBUG] [Thread-18121] [transport.py] [_log()] kex follows: False
2026-04-15T11:30:36.832 [DEBUG] [Thread-18121] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:30:36.832 [DEBUG] [Thread-18121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:30:36.832 [DEBUG] [Thread-18121] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:30:36.832 [DEBUG] [Thread-18121] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:30:36.832 [DEBUG] [Thread-18121] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:30:36.832 [DEBUG] [Thread-18121] [transport.py] [_log()] Compression: none
2026-04-15T11:30:36.832 [DEBUG] [Thread-18121] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:30:36.889 [DEBUG] [Thread-18121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:30:36.889 [DEBUG] [Thread-18121] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:30:36.890 [DEBUG] [Thread-18121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:30:36.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:30:36.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:30:36.949 [DEBUG] [Thread-18121] [transport.py] [_log()] userauth is OK
2026-04-15T11:30:36.949 [DEBUG] [Thread-18121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:30:36.949 [DEBUG] [Thread-18121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:30:36.950 [DEBUG] [Thread-18121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:30:36.950 [DEBUG] [Thread-18121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:30:36.973 [INFO] [Thread-18121] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:30:36.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:30:36.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:30:37.784 [DEBUG] [Thread-18121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:30:37.784 [DEBUG] [Thread-18121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:30:37.832 [DEBUG] [Thread-18121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:30:37.832 [DEBUG] [Thread-18121] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:30:37.841 [DEBUG] [Thread-18121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:30:37.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:30:37.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')
2026-04-15T11:30:37.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
2026-04-15T11:30:37.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:30:37.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:30:37.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:30:37.878 [DEBUG] [Thread-18121] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:30:38.249 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:30:38.250 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:30:44.320 [DEBUG] [Thread-18123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:30:59.366 [DEBUG] [Thread-18124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:31:07.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:31:07.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:31:07.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
2026-04-15T11:31:09.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 30, 44), 4.16878, 75.5763, 0.0, 17.3261, 11.9799, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:31:09.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:30:44
2026-04-15T11:31:09.243 [DEBUG] [Thread-18125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:31:09.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:31:10.103 [DEBUG] [Thread-18126] [transport.py] [_log()] starting thread (client mode): 0xee98ee30
2026-04-15T11:31:10.103 [DEBUG] [Thread-18126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:31:10.124 [DEBUG] [Thread-18126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:31:10.124 [INFO] [Thread-18126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:31:10.127 [DEBUG] [Thread-18126] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:31:10.127 [DEBUG] [Thread-18126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:31:10.127 [DEBUG] [Thread-18126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:31:10.127 [DEBUG] [Thread-18126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:31:10.128 [DEBUG] [Thread-18126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:31:10.128 [DEBUG] [Thread-18126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:31:10.128 [DEBUG] [Thread-18126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:31:10.128 [DEBUG] [Thread-18126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:31:10.128 [DEBUG] [Thread-18126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:31:10.128 [DEBUG] [Thread-18126] [transport.py] [_log()] client lang: <none>
2026-04-15T11:31:10.128 [DEBUG] [Thread-18126] [transport.py] [_log()] server lang: <none>
2026-04-15T11:31:10.128 [DEBUG] [Thread-18126] [transport.py] [_log()] kex follows: False
2026-04-15T11:31:10.128 [DEBUG] [Thread-18126] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:31:10.128 [DEBUG] [Thread-18126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:31:10.128 [DEBUG] [Thread-18126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:31:10.128 [DEBUG] [Thread-18126] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:31:10.129 [DEBUG] [Thread-18126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:31:10.129 [DEBUG] [Thread-18126] [transport.py] [_log()] Compression: none
2026-04-15T11:31:10.129 [DEBUG] [Thread-18126] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:31:10.147 [DEBUG] [Thread-18126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:31:10.148 [DEBUG] [Thread-18126] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:31:10.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:31:10.148 [DEBUG] [Thread-18126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:31:10.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:31:10.149 [DEBUG] [Thread-18126] [transport.py] [_log()] userauth is OK
2026-04-15T11:31:10.150 [DEBUG] [Thread-18126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:31:10.150 [DEBUG] [Thread-18126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:31:10.150 [DEBUG] [Thread-18126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:31:10.150 [DEBUG] [Thread-18126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:31:10.176 [INFO] [Thread-18126] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:31:10.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:31:10.954 [DEBUG] [Thread-18126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:31:10.955 [DEBUG] [Thread-18126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:31:10.955 [DEBUG] [Thread-18126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:31:10.995 [DEBUG] [Thread-18126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:31:10.995 [DEBUG] [Thread-18126] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:31:10.997 [DEBUG] [Thread-18126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:31:11.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:31:11.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:31:11.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:31:11.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:31:11.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:31:11.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:31:11.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:31:11.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:31:11.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:31:11.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.395962 -999.00  +11.00  13.64     81   +8.00 1 2 1 2 1   888    0 3.33 12.94 ----- 16.3 13.6 303.6 17.9 16.1 -11.7 15.6 -12.5 14.9 -11.6 15.6 -10.1
2026-04-15T11:31:11.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:31:11.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:31:11.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.395962
2026-04-15T11:31:11.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:31:11.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:31:11.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:31:11.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:31:11.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:31:11.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:30:44', tmtdew=4.16878, humidity=75.5763, cloud=0.0, wind=17.3261, temperature=11.9799, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:30:11.117', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:31:11.018 [DEBUG] [Thread-18126] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:31:11.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:31:11.224 [DEBUG] [Thread-18129] [transport.py] [_log()] starting thread (client mode): 0xee91c940
2026-04-15T11:31:11.224 [DEBUG] [Thread-18129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:31:11.238 [DEBUG] [Thread-18129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:31:11.238 [INFO] [Thread-18129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] client lang: <none>
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] server lang: <none>
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] kex follows: False
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:31:11.246 [DEBUG] [Thread-18129] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:31:11.247 [DEBUG] [Thread-18129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:31:11.247 [DEBUG] [Thread-18129] [transport.py] [_log()] Compression: none
2026-04-15T11:31:11.247 [DEBUG] [Thread-18129] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:31:11.303 [DEBUG] [Thread-18129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:31:11.303 [DEBUG] [Thread-18129] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:31:11.303 [DEBUG] [Thread-18129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:31:11.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:31:11.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:31:11.360 [DEBUG] [Thread-18129] [transport.py] [_log()] userauth is OK
2026-04-15T11:31:11.360 [DEBUG] [Thread-18129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:31:11.360 [DEBUG] [Thread-18129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:31:11.360 [DEBUG] [Thread-18129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:31:11.360 [DEBUG] [Thread-18129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:31:11.377 [INFO] [Thread-18129] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:31:11.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:31:11.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:31:12.175 [DEBUG] [Thread-18129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:31:12.176 [DEBUG] [Thread-18129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:31:12.223 [DEBUG] [Thread-18129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:31:12.224 [DEBUG] [Thread-18129] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:31:12.234 [DEBUG] [Thread-18129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:31:12.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:31:12.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')
2026-04-15T11:31:12.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
2026-04-15T11:31:12.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:31:12.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:31:12.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:31:12.272 [DEBUG] [Thread-18129] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:31:14.398 [DEBUG] [Thread-18131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:31:29.440 [DEBUG] [Thread-18132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:31:38.390 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:31:38.391 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:31:42.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:31:42.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:31:42.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:31:43.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 31, 19), 3.92952, 76.8213, 0.0, 14.4328, 11.5397, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:31:43.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:31:19
2026-04-15T11:31:44.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:31:44.469 [DEBUG] [Thread-18133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:31:44.491 [DEBUG] [Thread-18134] [transport.py] [_log()] starting thread (client mode): 0xf1331870
2026-04-15T11:31:44.492 [DEBUG] [Thread-18134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:31:44.512 [DEBUG] [Thread-18134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:31:44.512 [INFO] [Thread-18134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:31:44.515 [DEBUG] [Thread-18134] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:31:44.515 [DEBUG] [Thread-18134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:31:44.515 [DEBUG] [Thread-18134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:31:44.515 [DEBUG] [Thread-18134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:31:44.515 [DEBUG] [Thread-18134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:31:44.516 [DEBUG] [Thread-18134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:31:44.516 [DEBUG] [Thread-18134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:31:44.516 [DEBUG] [Thread-18134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:31:44.516 [DEBUG] [Thread-18134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:31:44.516 [DEBUG] [Thread-18134] [transport.py] [_log()] client lang: <none>
2026-04-15T11:31:44.516 [DEBUG] [Thread-18134] [transport.py] [_log()] server lang: <none>
2026-04-15T11:31:44.516 [DEBUG] [Thread-18134] [transport.py] [_log()] kex follows: False
2026-04-15T11:31:44.516 [DEBUG] [Thread-18134] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:31:44.516 [DEBUG] [Thread-18134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:31:44.516 [DEBUG] [Thread-18134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:31:44.516 [DEBUG] [Thread-18134] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:31:44.517 [DEBUG] [Thread-18134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:31:44.517 [DEBUG] [Thread-18134] [transport.py] [_log()] Compression: none
2026-04-15T11:31:44.517 [DEBUG] [Thread-18134] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:31:44.532 [DEBUG] [Thread-18134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:31:44.532 [DEBUG] [Thread-18134] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:31:44.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:31:44.533 [DEBUG] [Thread-18134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:31:44.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:31:44.534 [DEBUG] [Thread-18134] [transport.py] [_log()] userauth is OK
2026-04-15T11:31:44.534 [DEBUG] [Thread-18134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:31:44.534 [DEBUG] [Thread-18134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:31:44.534 [DEBUG] [Thread-18134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:31:44.534 [DEBUG] [Thread-18134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:31:44.556 [INFO] [Thread-18134] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:31:44.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:31:45.132 [DEBUG] [Thread-18134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:31:45.132 [DEBUG] [Thread-18134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:31:45.133 [DEBUG] [Thread-18134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:31:45.173 [DEBUG] [Thread-18134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:31:45.173 [DEBUG] [Thread-18134] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:31:45.176 [DEBUG] [Thread-18134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:31:45.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:31:45.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:31:45.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:31:45.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:31:45.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:31:45.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:31:45.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:31:45.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:31:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:31:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.397003 -999.00  +11.50  13.47     82   +8.70 1 2 1 2 1   888    0 3.26 12.87 ----- 16.6 13.5 328.0 15.6 16.4 -10.2 15.8 -12.1 15.2 -12.3 15.8 -10.9
2026-04-15T11:31:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:31:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:31:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.397003
2026-04-15T11:31:45.199 [DEBUG] [Thread-18134] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:31:45.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:31:45.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:31:45.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:31:45.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:31:45.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:31:45.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:31:19', tmtdew=3.92952, humidity=76.8213, cloud=0.0, wind=14.4328, temperature=11.5397, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:31:41.059', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:31:45.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:31:45.451 [DEBUG] [Thread-18137] [transport.py] [_log()] starting thread (client mode): 0xf13fe020
2026-04-15T11:31:45.451 [DEBUG] [Thread-18137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:31:45.464 [DEBUG] [Thread-18137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:31:45.465 [INFO] [Thread-18137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:31:45.472 [DEBUG] [Thread-18137] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:31:45.472 [DEBUG] [Thread-18137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:31:45.472 [DEBUG] [Thread-18137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:31:45.472 [DEBUG] [Thread-18137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:31:45.472 [DEBUG] [Thread-18137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:31:45.472 [DEBUG] [Thread-18137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:31:45.472 [DEBUG] [Thread-18137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:31:45.472 [DEBUG] [Thread-18137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:31:45.473 [DEBUG] [Thread-18137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:31:45.473 [DEBUG] [Thread-18137] [transport.py] [_log()] client lang: <none>
2026-04-15T11:31:45.473 [DEBUG] [Thread-18137] [transport.py] [_log()] server lang: <none>
2026-04-15T11:31:45.473 [DEBUG] [Thread-18137] [transport.py] [_log()] kex follows: False
2026-04-15T11:31:45.473 [DEBUG] [Thread-18137] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:31:45.473 [DEBUG] [Thread-18137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:31:45.473 [DEBUG] [Thread-18137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:31:45.473 [DEBUG] [Thread-18137] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:31:45.473 [DEBUG] [Thread-18137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:31:45.473 [DEBUG] [Thread-18137] [transport.py] [_log()] Compression: none
2026-04-15T11:31:45.473 [DEBUG] [Thread-18137] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:31:45.530 [DEBUG] [Thread-18137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:31:45.530 [DEBUG] [Thread-18137] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:31:45.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:31:45.531 [DEBUG] [Thread-18137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:31:45.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:31:45.587 [DEBUG] [Thread-18137] [transport.py] [_log()] userauth is OK
2026-04-15T11:31:45.587 [DEBUG] [Thread-18137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:31:45.587 [DEBUG] [Thread-18137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:31:45.587 [DEBUG] [Thread-18137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:31:45.587 [DEBUG] [Thread-18137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:31:45.612 [INFO] [Thread-18137] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:31:45.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:31:45.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:31:46.437 [DEBUG] [Thread-18137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:31:46.437 [DEBUG] [Thread-18137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:31:46.484 [DEBUG] [Thread-18137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:31:46.485 [DEBUG] [Thread-18137] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:31:46.493 [DEBUG] [Thread-18137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:31:46.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:31: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')
2026-04-15T11:31:46.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T11:31:46.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:31:46.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:31:46.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:31:46.527 [DEBUG] [Thread-18137] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:31:59.499 [DEBUG] [Thread-18139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:32:09.349 [DEBUG] [Thread-18140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:32:14.544 [DEBUG] [Thread-18141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:32:16.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:32:16.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:32:16.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
2026-04-15T11:32:17.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 31, 55), 3.88701, 76.8044, 0.0, 15.0862, 11.8221, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:32:17.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:31:55
2026-04-15T11:32:18.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:32:18.639 [DEBUG] [Thread-18142] [transport.py] [_log()] starting thread (client mode): 0xf13672b0
2026-04-15T11:32:18.639 [DEBUG] [Thread-18142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:32:18.658 [DEBUG] [Thread-18142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:32:18.658 [INFO] [Thread-18142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:32:18.661 [DEBUG] [Thread-18142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:32:18.661 [DEBUG] [Thread-18142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:32:18.661 [DEBUG] [Thread-18142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:32:18.661 [DEBUG] [Thread-18142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:32:18.661 [DEBUG] [Thread-18142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:32:18.661 [DEBUG] [Thread-18142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:32:18.661 [DEBUG] [Thread-18142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:32:18.661 [DEBUG] [Thread-18142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:32:18.661 [DEBUG] [Thread-18142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:32:18.662 [DEBUG] [Thread-18142] [transport.py] [_log()] client lang: <none>
2026-04-15T11:32:18.662 [DEBUG] [Thread-18142] [transport.py] [_log()] server lang: <none>
2026-04-15T11:32:18.662 [DEBUG] [Thread-18142] [transport.py] [_log()] kex follows: False
2026-04-15T11:32:18.662 [DEBUG] [Thread-18142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:32:18.662 [DEBUG] [Thread-18142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:32:18.662 [DEBUG] [Thread-18142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:32:18.662 [DEBUG] [Thread-18142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:32:18.662 [DEBUG] [Thread-18142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:32:18.662 [DEBUG] [Thread-18142] [transport.py] [_log()] Compression: none
2026-04-15T11:32:18.662 [DEBUG] [Thread-18142] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:32:18.681 [DEBUG] [Thread-18142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:32:18.681 [DEBUG] [Thread-18142] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:32:18.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:32:18.682 [DEBUG] [Thread-18142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:32:18.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:32:18.683 [DEBUG] [Thread-18142] [transport.py] [_log()] userauth is OK
2026-04-15T11:32:18.683 [DEBUG] [Thread-18142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:32:18.683 [DEBUG] [Thread-18142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:32:18.683 [DEBUG] [Thread-18142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:32:18.684 [DEBUG] [Thread-18142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:32:18.708 [INFO] [Thread-18142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:32:18.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:32:19.287 [DEBUG] [Thread-18142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:32:19.287 [DEBUG] [Thread-18142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:32:19.288 [DEBUG] [Thread-18142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:32:19.328 [DEBUG] [Thread-18142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:32:19.328 [DEBUG] [Thread-18142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:32:19.331 [DEBUG] [Thread-18142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:32:19.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:32:19.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:32:19.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:32:19.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:32:19.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:32:19.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:32:19.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:32:19.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:32:19.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:32:19.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.397350 -999.00  +11.50  15.50     82   +8.60 1 2 1 2 1   888    0 3.29 11.64 ----- 10.8 15.5 324.4 21.2 16.6 -8.3 16.3 -10.8 15.6 -11.4 16.2 -8.4
2026-04-15T11:32:19.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:32:19.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:32:19.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.397350
2026-04-15T11:32:19.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:32:19.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:32:19.356 [DEBUG] [Thread-18142] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:32:19.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:32:19.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:32:19.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:32:19.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:31:55', tmtdew=3.88701, humidity=76.8044, cloud=0.0, wind=15.0862, temperature=11.8221, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:32:11.040', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:32:19.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:32:19.610 [DEBUG] [Thread-18145] [transport.py] [_log()] starting thread (client mode): 0xf13fe020
2026-04-15T11:32:19.610 [DEBUG] [Thread-18145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:32:19.624 [DEBUG] [Thread-18145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:32:19.624 [INFO] [Thread-18145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:32:19.632 [DEBUG] [Thread-18145] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:32:19.632 [DEBUG] [Thread-18145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:32:19.632 [DEBUG] [Thread-18145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:32:19.632 [DEBUG] [Thread-18145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:32:19.632 [DEBUG] [Thread-18145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:32:19.632 [DEBUG] [Thread-18145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:32:19.632 [DEBUG] [Thread-18145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:32:19.632 [DEBUG] [Thread-18145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:32:19.632 [DEBUG] [Thread-18145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:32:19.633 [DEBUG] [Thread-18145] [transport.py] [_log()] client lang: <none>
2026-04-15T11:32:19.633 [DEBUG] [Thread-18145] [transport.py] [_log()] server lang: <none>
2026-04-15T11:32:19.633 [DEBUG] [Thread-18145] [transport.py] [_log()] kex follows: False
2026-04-15T11:32:19.633 [DEBUG] [Thread-18145] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:32:19.633 [DEBUG] [Thread-18145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:32:19.633 [DEBUG] [Thread-18145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:32:19.633 [DEBUG] [Thread-18145] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:32:19.633 [DEBUG] [Thread-18145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:32:19.633 [DEBUG] [Thread-18145] [transport.py] [_log()] Compression: none
2026-04-15T11:32:19.633 [DEBUG] [Thread-18145] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:32:19.688 [DEBUG] [Thread-18145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:32:19.689 [DEBUG] [Thread-18145] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:32:19.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:32:19.689 [DEBUG] [Thread-18145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:32:19.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:32:19.745 [DEBUG] [Thread-18145] [transport.py] [_log()] userauth is OK
2026-04-15T11:32:19.746 [DEBUG] [Thread-18145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:32:19.746 [DEBUG] [Thread-18145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:32:19.746 [DEBUG] [Thread-18145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:32:19.746 [DEBUG] [Thread-18145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:32:19.771 [INFO] [Thread-18145] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:32:19.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:32:19.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:32:20.625 [DEBUG] [Thread-18145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:32:20.625 [DEBUG] [Thread-18145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:32:20.673 [DEBUG] [Thread-18145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:32:20.673 [DEBUG] [Thread-18145] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:32:20.682 [DEBUG] [Thread-18145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:32:20.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:32:20.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')
2026-04-15T11:32:20.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
2026-04-15T11:32:20.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:32:20.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:32:20.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:32:20.717 [DEBUG] [Thread-18145] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:32:29.576 [DEBUG] [Thread-18147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:32:38.529 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:32:38.530 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:32:44.619 [DEBUG] [Thread-18148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:32:50.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:32:50.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:32:50.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
2026-04-15T11:32:51.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 32, 30), 3.92261, 76.6383, 0.0, 15.8094, 11.9213, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:32:51.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:32:30
2026-04-15T11:32:52.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:32:52.826 [DEBUG] [Thread-18149] [transport.py] [_log()] starting thread (client mode): 0xf13651e0
2026-04-15T11:32:52.826 [DEBUG] [Thread-18149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:32:52.838 [DEBUG] [Thread-18149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:32:52.838 [INFO] [Thread-18149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:32:52.840 [DEBUG] [Thread-18149] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:32:52.840 [DEBUG] [Thread-18149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:32:52.840 [DEBUG] [Thread-18149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:32:52.840 [DEBUG] [Thread-18149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:32:52.840 [DEBUG] [Thread-18149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:32:52.840 [DEBUG] [Thread-18149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:32:52.841 [DEBUG] [Thread-18149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:32:52.841 [DEBUG] [Thread-18149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:32:52.841 [DEBUG] [Thread-18149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:32:52.841 [DEBUG] [Thread-18149] [transport.py] [_log()] client lang: <none>
2026-04-15T11:32:52.841 [DEBUG] [Thread-18149] [transport.py] [_log()] server lang: <none>
2026-04-15T11:32:52.841 [DEBUG] [Thread-18149] [transport.py] [_log()] kex follows: False
2026-04-15T11:32:52.841 [DEBUG] [Thread-18149] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:32:52.841 [DEBUG] [Thread-18149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:32:52.841 [DEBUG] [Thread-18149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:32:52.841 [DEBUG] [Thread-18149] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:32:52.841 [DEBUG] [Thread-18149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:32:52.841 [DEBUG] [Thread-18149] [transport.py] [_log()] Compression: none
2026-04-15T11:32:52.842 [DEBUG] [Thread-18149] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:32:52.851 [DEBUG] [Thread-18149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:32:52.852 [DEBUG] [Thread-18149] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:32:52.852 [DEBUG] [Thread-18149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:32:52.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:32:52.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:32:52.853 [DEBUG] [Thread-18149] [transport.py] [_log()] userauth is OK
2026-04-15T11:32:52.853 [DEBUG] [Thread-18149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:32:52.853 [DEBUG] [Thread-18149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:32:52.853 [DEBUG] [Thread-18149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:32:52.854 [DEBUG] [Thread-18149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:32:52.869 [INFO] [Thread-18149] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:32:52.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:32:53.462 [DEBUG] [Thread-18149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:32:53.462 [DEBUG] [Thread-18149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:32:53.462 [DEBUG] [Thread-18149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:32:53.503 [DEBUG] [Thread-18149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:32:53.503 [DEBUG] [Thread-18149] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:32:53.505 [DEBUG] [Thread-18149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:32:53.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:32:53.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:32:53.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:32:53.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:32:53.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:32:53.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:32:53.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:32:53.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:32:53.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:32:53.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.397697 -999.00  +11.70  17.96     82   +8.80 1 2 1 2 1   888    0 3.25 10.59 ----- 17.9 18.0 317.6 19.9 17.3 -9.2 16.6 -12.2 15.9 -10.4 16.7 -8.1
2026-04-15T11:32:53.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:32:53.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:32:53.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.397697
2026-04-15T11:32:53.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:32:53.520 [DEBUG] [Thread-18149] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:32:53.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:32:53.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:32:53.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:32:53.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:32:53.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:32:30', tmtdew=3.92261, humidity=76.6383, cloud=0.0, wind=15.8094, temperature=11.9213, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:32:41.021', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:32:53.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:32:53.771 [DEBUG] [Thread-18152] [transport.py] [_log()] starting thread (client mode): 0xee98d900
2026-04-15T11:32:53.772 [DEBUG] [Thread-18152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:32:53.786 [DEBUG] [Thread-18152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:32:53.786 [INFO] [Thread-18152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:32:53.793 [DEBUG] [Thread-18152] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:32:53.793 [DEBUG] [Thread-18152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:32:53.793 [DEBUG] [Thread-18152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:32:53.793 [DEBUG] [Thread-18152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:32:53.793 [DEBUG] [Thread-18152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:32:53.794 [DEBUG] [Thread-18152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:32:53.794 [DEBUG] [Thread-18152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:32:53.794 [DEBUG] [Thread-18152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:32:53.794 [DEBUG] [Thread-18152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:32:53.794 [DEBUG] [Thread-18152] [transport.py] [_log()] client lang: <none>
2026-04-15T11:32:53.794 [DEBUG] [Thread-18152] [transport.py] [_log()] server lang: <none>
2026-04-15T11:32:53.794 [DEBUG] [Thread-18152] [transport.py] [_log()] kex follows: False
2026-04-15T11:32:53.794 [DEBUG] [Thread-18152] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:32:53.794 [DEBUG] [Thread-18152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:32:53.794 [DEBUG] [Thread-18152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:32:53.794 [DEBUG] [Thread-18152] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:32:53.794 [DEBUG] [Thread-18152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:32:53.795 [DEBUG] [Thread-18152] [transport.py] [_log()] Compression: none
2026-04-15T11:32:53.795 [DEBUG] [Thread-18152] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:32:53.851 [DEBUG] [Thread-18152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:32:53.851 [DEBUG] [Thread-18152] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:32:53.852 [DEBUG] [Thread-18152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:32:53.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:32:53.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:32:53.908 [DEBUG] [Thread-18152] [transport.py] [_log()] userauth is OK
2026-04-15T11:32:53.908 [DEBUG] [Thread-18152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:32:53.908 [DEBUG] [Thread-18152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:32:53.909 [DEBUG] [Thread-18152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:32:53.909 [DEBUG] [Thread-18152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:32:53.933 [INFO] [Thread-18152] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:32:53.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:32:53.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:32:54.773 [DEBUG] [Thread-18152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:32:54.773 [DEBUG] [Thread-18152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:32:54.821 [DEBUG] [Thread-18152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:32:54.821 [DEBUG] [Thread-18152] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:32:54.830 [DEBUG] [Thread-18152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:32:54.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:32:54.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')
2026-04-15T11:32:54.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') -> 00000000
2026-04-15T11:32:54.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:32:54.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:32:54.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:32:54.869 [DEBUG] [Thread-18152] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:32:59.650 [DEBUG] [Thread-18154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:33:09.472 [DEBUG] [Thread-18155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:33:14.696 [DEBUG] [Thread-18156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:33:24.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:33:24.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:33:24.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
2026-04-15T11:33:26.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 33, 6), 3.95948, 76.4394, 0.0, 12.3872, 11.855, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:33:26.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:33:06
2026-04-15T11:33:26.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:33:27.139 [DEBUG] [Thread-18157] [transport.py] [_log()] starting thread (client mode): 0xee98e9e0
2026-04-15T11:33:27.139 [DEBUG] [Thread-18157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:33:27.159 [DEBUG] [Thread-18157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:33:27.159 [INFO] [Thread-18157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:33:27.162 [DEBUG] [Thread-18157] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:33:27.162 [DEBUG] [Thread-18157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:33:27.162 [DEBUG] [Thread-18157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:33:27.162 [DEBUG] [Thread-18157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:33:27.162 [DEBUG] [Thread-18157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:33:27.163 [DEBUG] [Thread-18157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:33:27.163 [DEBUG] [Thread-18157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:33:27.163 [DEBUG] [Thread-18157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:33:27.163 [DEBUG] [Thread-18157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:33:27.163 [DEBUG] [Thread-18157] [transport.py] [_log()] client lang: <none>
2026-04-15T11:33:27.163 [DEBUG] [Thread-18157] [transport.py] [_log()] server lang: <none>
2026-04-15T11:33:27.163 [DEBUG] [Thread-18157] [transport.py] [_log()] kex follows: False
2026-04-15T11:33:27.163 [DEBUG] [Thread-18157] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:33:27.163 [DEBUG] [Thread-18157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:33:27.163 [DEBUG] [Thread-18157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:33:27.163 [DEBUG] [Thread-18157] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:33:27.164 [DEBUG] [Thread-18157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:33:27.164 [DEBUG] [Thread-18157] [transport.py] [_log()] Compression: none
2026-04-15T11:33:27.164 [DEBUG] [Thread-18157] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:33:27.181 [DEBUG] [Thread-18157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:33:27.181 [DEBUG] [Thread-18157] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:33:27.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:33:27.182 [DEBUG] [Thread-18157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:33:27.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:33:27.183 [DEBUG] [Thread-18157] [transport.py] [_log()] userauth is OK
2026-04-15T11:33:27.183 [DEBUG] [Thread-18157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:33:27.184 [DEBUG] [Thread-18157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:33:27.184 [DEBUG] [Thread-18157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:33:27.184 [DEBUG] [Thread-18157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:33:27.209 [INFO] [Thread-18157] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:33:27.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:33:27.771 [DEBUG] [Thread-18157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:33:27.772 [DEBUG] [Thread-18157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:33:27.772 [DEBUG] [Thread-18157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:33:27.812 [DEBUG] [Thread-18157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:33:27.812 [DEBUG] [Thread-18157] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:33:27.817 [DEBUG] [Thread-18157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:33:27.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:33:27.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:33:27.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:33:27.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:33:27.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:33:27.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:33:27.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:33:27.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:33:27.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:33:27.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.398045 -999.00  +12.00  19.42     81   +9.00 1 2 1 2 1   888    0 3.26 10.69 ----- 16.6 19.4 285.8 21.2 17.7 -11.8 16.5 -15.4 15.7 -13.4 16.8 -11.7
2026-04-15T11:33:27.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:33:27.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:33:27.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.398045
2026-04-15T11:33:27.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:33:27.843 [DEBUG] [Thread-18157] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:33:27.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:33:27.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:33:27.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:33:27.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:33:27.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:33:06', tmtdew=3.95948, humidity=76.4394, cloud=0.0, wind=12.3872, temperature=11.855, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:33:11.088', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:33:28.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:33:28.102 [DEBUG] [Thread-18160] [transport.py] [_log()] starting thread (client mode): 0xee98d7e0
2026-04-15T11:33:28.103 [DEBUG] [Thread-18160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:33:28.121 [DEBUG] [Thread-18160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:33:28.121 [INFO] [Thread-18160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:33:28.129 [DEBUG] [Thread-18160] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:33:28.129 [DEBUG] [Thread-18160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:33:28.129 [DEBUG] [Thread-18160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:33:28.130 [DEBUG] [Thread-18160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:33:28.130 [DEBUG] [Thread-18160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:33:28.130 [DEBUG] [Thread-18160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:33:28.130 [DEBUG] [Thread-18160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:33:28.130 [DEBUG] [Thread-18160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:33:28.130 [DEBUG] [Thread-18160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:33:28.130 [DEBUG] [Thread-18160] [transport.py] [_log()] client lang: <none>
2026-04-15T11:33:28.130 [DEBUG] [Thread-18160] [transport.py] [_log()] server lang: <none>
2026-04-15T11:33:28.130 [DEBUG] [Thread-18160] [transport.py] [_log()] kex follows: False
2026-04-15T11:33:28.130 [DEBUG] [Thread-18160] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:33:28.130 [DEBUG] [Thread-18160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:33:28.130 [DEBUG] [Thread-18160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:33:28.131 [DEBUG] [Thread-18160] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:33:28.131 [DEBUG] [Thread-18160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:33:28.131 [DEBUG] [Thread-18160] [transport.py] [_log()] Compression: none
2026-04-15T11:33:28.131 [DEBUG] [Thread-18160] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:33:28.190 [DEBUG] [Thread-18160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:33:28.191 [DEBUG] [Thread-18160] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:33:28.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:33:28.191 [DEBUG] [Thread-18160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:33:28.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:33:28.247 [DEBUG] [Thread-18160] [transport.py] [_log()] userauth is OK
2026-04-15T11:33:28.247 [DEBUG] [Thread-18160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:33:28.247 [DEBUG] [Thread-18160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:33:28.248 [DEBUG] [Thread-18160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:33:28.248 [DEBUG] [Thread-18160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:33:28.277 [INFO] [Thread-18160] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:33:28.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:33:28.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:33:29.157 [DEBUG] [Thread-18160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:33:29.157 [DEBUG] [Thread-18160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:33:29.204 [DEBUG] [Thread-18160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:33:29.205 [DEBUG] [Thread-18160] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:33:29.213 [DEBUG] [Thread-18160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:33:29.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:33:29.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')
2026-04-15T11:33:29.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
2026-04-15T11:33:29.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:33:29.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:33:29.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:33:29.248 [DEBUG] [Thread-18160] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:33:29.729 [DEBUG] [Thread-18162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:33:38.672 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:33:38.673 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:33:44.773 [DEBUG] [Thread-18163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:33:59.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:33:59.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:33:59.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
2026-04-15T11:33:59.804 [DEBUG] [Thread-18164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:34:00.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 33, 42), 4.2269, 75.343, 0.0, 20.6424, 12.3769, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:34:00.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:33:42
2026-04-15T11:34:00.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:34:01.379 [DEBUG] [Thread-18165] [transport.py] [_log()] starting thread (client mode): 0xee98f190
2026-04-15T11:34:01.379 [DEBUG] [Thread-18165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:34:01.398 [DEBUG] [Thread-18165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:34:01.398 [INFO] [Thread-18165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:34:01.400 [DEBUG] [Thread-18165] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:34:01.400 [DEBUG] [Thread-18165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:34:01.400 [DEBUG] [Thread-18165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:34:01.400 [DEBUG] [Thread-18165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:34:01.400 [DEBUG] [Thread-18165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:34:01.400 [DEBUG] [Thread-18165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:34:01.400 [DEBUG] [Thread-18165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:34:01.400 [DEBUG] [Thread-18165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:34:01.400 [DEBUG] [Thread-18165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:34:01.400 [DEBUG] [Thread-18165] [transport.py] [_log()] client lang: <none>
2026-04-15T11:34:01.400 [DEBUG] [Thread-18165] [transport.py] [_log()] server lang: <none>
2026-04-15T11:34:01.401 [DEBUG] [Thread-18165] [transport.py] [_log()] kex follows: False
2026-04-15T11:34:01.401 [DEBUG] [Thread-18165] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:34:01.401 [DEBUG] [Thread-18165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:34:01.401 [DEBUG] [Thread-18165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:34:01.401 [DEBUG] [Thread-18165] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:34:01.401 [DEBUG] [Thread-18165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:34:01.401 [DEBUG] [Thread-18165] [transport.py] [_log()] Compression: none
2026-04-15T11:34:01.401 [DEBUG] [Thread-18165] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:34:01.410 [DEBUG] [Thread-18165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:34:01.410 [DEBUG] [Thread-18165] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:34:01.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:34:01.411 [DEBUG] [Thread-18165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:34:01.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:34:01.411 [DEBUG] [Thread-18165] [transport.py] [_log()] userauth is OK
2026-04-15T11:34:01.411 [DEBUG] [Thread-18165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:34:01.411 [DEBUG] [Thread-18165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:34:01.411 [DEBUG] [Thread-18165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:34:01.412 [DEBUG] [Thread-18165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:34:01.424 [INFO] [Thread-18165] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:34:01.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:34:02.023 [DEBUG] [Thread-18165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:34:02.023 [DEBUG] [Thread-18165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:34:02.024 [DEBUG] [Thread-18165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:34:02.064 [DEBUG] [Thread-18165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:34:02.064 [DEBUG] [Thread-18165] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:34:02.066 [DEBUG] [Thread-18165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:34:02.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:34:02.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:34:02.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:34:02.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:34:02.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:34:02.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:34:02.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:34:02.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:34:02.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:34:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.398392 -999.00  +11.90  17.94     81   +8.70 1 2 1 2 1   888    0 3.30 12.48 ----- 14.6 17.9 302.6 23.0 17.4 -13.9 16.5 -13.9 15.7 -11.7 16.6 -10.7
2026-04-15T11:34:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:34:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:34:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.398392
2026-04-15T11:34:02.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:34:02.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:34:02.091 [DEBUG] [Thread-18165] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:34:02.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:34:02.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:34:02.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:34:02.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:33:42', tmtdew=4.2269, humidity=75.343, cloud=0.0, wind=20.6424, temperature=12.3769, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:33:41.069', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:34:02.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:34:02.345 [DEBUG] [Thread-18168] [transport.py] [_log()] starting thread (client mode): 0xf13e03d0
2026-04-15T11:34:02.345 [DEBUG] [Thread-18168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:34:02.360 [DEBUG] [Thread-18168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:34:02.360 [INFO] [Thread-18168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:34:02.367 [DEBUG] [Thread-18168] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:34:02.367 [DEBUG] [Thread-18168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:34:02.367 [DEBUG] [Thread-18168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:34:02.367 [DEBUG] [Thread-18168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:34:02.367 [DEBUG] [Thread-18168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:34:02.367 [DEBUG] [Thread-18168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:34:02.368 [DEBUG] [Thread-18168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:34:02.368 [DEBUG] [Thread-18168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:34:02.368 [DEBUG] [Thread-18168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:34:02.368 [DEBUG] [Thread-18168] [transport.py] [_log()] client lang: <none>
2026-04-15T11:34:02.368 [DEBUG] [Thread-18168] [transport.py] [_log()] server lang: <none>
2026-04-15T11:34:02.368 [DEBUG] [Thread-18168] [transport.py] [_log()] kex follows: False
2026-04-15T11:34:02.368 [DEBUG] [Thread-18168] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:34:02.368 [DEBUG] [Thread-18168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:34:02.368 [DEBUG] [Thread-18168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:34:02.368 [DEBUG] [Thread-18168] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:34:02.368 [DEBUG] [Thread-18168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:34:02.369 [DEBUG] [Thread-18168] [transport.py] [_log()] Compression: none
2026-04-15T11:34:02.369 [DEBUG] [Thread-18168] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:34:02.425 [DEBUG] [Thread-18168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:34:02.426 [DEBUG] [Thread-18168] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:34:02.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:34:02.426 [DEBUG] [Thread-18168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:34:02.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:34:02.482 [DEBUG] [Thread-18168] [transport.py] [_log()] userauth is OK
2026-04-15T11:34:02.482 [DEBUG] [Thread-18168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:34:02.482 [DEBUG] [Thread-18168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:34:02.482 [DEBUG] [Thread-18168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:34:02.483 [DEBUG] [Thread-18168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:34:02.507 [INFO] [Thread-18168] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:34:02.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:34:02.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:34:03.338 [DEBUG] [Thread-18168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:34:03.338 [DEBUG] [Thread-18168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:34:03.386 [DEBUG] [Thread-18168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:34:03.386 [DEBUG] [Thread-18168] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:34:03.395 [DEBUG] [Thread-18168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:34:03.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:34:03.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')
2026-04-15T11:34:03.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
2026-04-15T11:34:03.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:34:03.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:34:03.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:34:03.429 [DEBUG] [Thread-18168] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:34:09.600 [DEBUG] [Thread-18170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:34:14.838 [DEBUG] [Thread-18171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:34:29.883 [DEBUG] [Thread-18172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:34:33.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:34:33.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:34:33.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:34:34.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 34, 17), 4.12302, 75.8566, 0.0, 17.6094, 11.7722, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:34:34.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:34:17
2026-04-15T11:34:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:34:35.645 [DEBUG] [Thread-18173] [transport.py] [_log()] starting thread (client mode): 0xee98ee90
2026-04-15T11:34:35.645 [DEBUG] [Thread-18173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:34:35.669 [DEBUG] [Thread-18173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:34:35.669 [INFO] [Thread-18173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:34:35.671 [DEBUG] [Thread-18173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:34:35.672 [DEBUG] [Thread-18173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:34:35.672 [DEBUG] [Thread-18173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:34:35.672 [DEBUG] [Thread-18173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:34:35.672 [DEBUG] [Thread-18173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:34:35.672 [DEBUG] [Thread-18173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:34:35.672 [DEBUG] [Thread-18173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:34:35.672 [DEBUG] [Thread-18173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:34:35.672 [DEBUG] [Thread-18173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:34:35.672 [DEBUG] [Thread-18173] [transport.py] [_log()] client lang: <none>
2026-04-15T11:34:35.672 [DEBUG] [Thread-18173] [transport.py] [_log()] server lang: <none>
2026-04-15T11:34:35.673 [DEBUG] [Thread-18173] [transport.py] [_log()] kex follows: False
2026-04-15T11:34:35.673 [DEBUG] [Thread-18173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:34:35.673 [DEBUG] [Thread-18173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:34:35.673 [DEBUG] [Thread-18173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:34:35.673 [DEBUG] [Thread-18173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:34:35.673 [DEBUG] [Thread-18173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:34:35.673 [DEBUG] [Thread-18173] [transport.py] [_log()] Compression: none
2026-04-15T11:34:35.673 [DEBUG] [Thread-18173] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:34:35.688 [DEBUG] [Thread-18173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:34:35.688 [DEBUG] [Thread-18173] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:34:35.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:34:35.689 [DEBUG] [Thread-18173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:34:35.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:34:35.690 [DEBUG] [Thread-18173] [transport.py] [_log()] userauth is OK
2026-04-15T11:34:35.690 [DEBUG] [Thread-18173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:34:35.690 [DEBUG] [Thread-18173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:34:35.690 [DEBUG] [Thread-18173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:34:35.690 [DEBUG] [Thread-18173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:34:35.710 [INFO] [Thread-18173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:34:35.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:34:36.285 [DEBUG] [Thread-18173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:34:36.285 [DEBUG] [Thread-18173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:34:36.285 [DEBUG] [Thread-18173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:34:36.326 [DEBUG] [Thread-18173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:34:36.326 [DEBUG] [Thread-18173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:34:36.328 [DEBUG] [Thread-18173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:34:36.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:34:36.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:34:36.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:34:36.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:34:36.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:34:36.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:34:36.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:34:36.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:34:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:34:36.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.398739 -999.00  +11.90  17.73     80   +8.70 1 2 1 2 1   888    0 3.35 13.63 ----- 18.0 17.7 297.6 24.9 17.3 -13.2 16.6 -12.4 15.8 -9.3 16.6 -9.4
2026-04-15T11:34:36.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:34:36.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:34:36.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.398739
2026-04-15T11:34:36.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:34:36.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:34:36.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:34:36.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:34:36.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:34:36.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:34:17', tmtdew=4.12302, humidity=75.8566, cloud=0.0, wind=17.6094, temperature=11.7722, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:34:11.050', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:34:36.349 [DEBUG] [Thread-18173] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:34:36.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:34:36.569 [DEBUG] [Thread-18176] [transport.py] [_log()] starting thread (client mode): 0xf13fdab0
2026-04-15T11:34:36.569 [DEBUG] [Thread-18176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:34:36.583 [DEBUG] [Thread-18176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:34:36.584 [INFO] [Thread-18176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:34:36.591 [DEBUG] [Thread-18176] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:34:36.591 [DEBUG] [Thread-18176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:34:36.591 [DEBUG] [Thread-18176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:34:36.591 [DEBUG] [Thread-18176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:34:36.591 [DEBUG] [Thread-18176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:34:36.591 [DEBUG] [Thread-18176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:34:36.591 [DEBUG] [Thread-18176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:34:36.591 [DEBUG] [Thread-18176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:34:36.592 [DEBUG] [Thread-18176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:34:36.592 [DEBUG] [Thread-18176] [transport.py] [_log()] client lang: <none>
2026-04-15T11:34:36.592 [DEBUG] [Thread-18176] [transport.py] [_log()] server lang: <none>
2026-04-15T11:34:36.592 [DEBUG] [Thread-18176] [transport.py] [_log()] kex follows: False
2026-04-15T11:34:36.592 [DEBUG] [Thread-18176] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:34:36.592 [DEBUG] [Thread-18176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:34:36.592 [DEBUG] [Thread-18176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:34:36.592 [DEBUG] [Thread-18176] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:34:36.592 [DEBUG] [Thread-18176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:34:36.592 [DEBUG] [Thread-18176] [transport.py] [_log()] Compression: none
2026-04-15T11:34:36.592 [DEBUG] [Thread-18176] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:34:36.648 [DEBUG] [Thread-18176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:34:36.648 [DEBUG] [Thread-18176] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:34:36.649 [DEBUG] [Thread-18176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:34:36.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:34:36.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:34:36.705 [DEBUG] [Thread-18176] [transport.py] [_log()] userauth is OK
2026-04-15T11:34:36.705 [DEBUG] [Thread-18176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:34:36.705 [DEBUG] [Thread-18176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:34:36.705 [DEBUG] [Thread-18176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:34:36.705 [DEBUG] [Thread-18176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:34:36.730 [INFO] [Thread-18176] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:34:36.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:34:36.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:34:37.570 [DEBUG] [Thread-18176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:34:37.571 [DEBUG] [Thread-18176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:34:37.618 [DEBUG] [Thread-18176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:34:37.618 [DEBUG] [Thread-18176] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:34:37.627 [DEBUG] [Thread-18176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:34:37.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:34:37.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')
2026-04-15T11:34:37.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
2026-04-15T11:34:37.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:34:37.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:34:37.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:34:37.662 [DEBUG] [Thread-18176] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:34:38.814 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:34:38.815 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:34:44.914 [DEBUG] [Thread-18178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:34:59.961 [DEBUG] [Thread-18179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:35:07.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:35:07.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:35:07.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
2026-04-15T11:35:08.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 34, 52), 4.34505, 74.6789, 0.0, 14.9623, 12.0113, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:35:08.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:34:52
2026-04-15T11:35:09.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:35:09.692 [DEBUG] [Thread-18180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:35:09.829 [DEBUG] [Thread-18181] [transport.py] [_log()] starting thread (client mode): 0xee91fd60
2026-04-15T11:35:09.829 [DEBUG] [Thread-18181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:35:09.849 [DEBUG] [Thread-18181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:35:09.849 [INFO] [Thread-18181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:35:09.852 [DEBUG] [Thread-18181] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:35:09.852 [DEBUG] [Thread-18181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:35:09.852 [DEBUG] [Thread-18181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:35:09.852 [DEBUG] [Thread-18181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:35:09.852 [DEBUG] [Thread-18181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:35:09.852 [DEBUG] [Thread-18181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:35:09.852 [DEBUG] [Thread-18181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:35:09.853 [DEBUG] [Thread-18181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:35:09.853 [DEBUG] [Thread-18181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:35:09.853 [DEBUG] [Thread-18181] [transport.py] [_log()] client lang: <none>
2026-04-15T11:35:09.853 [DEBUG] [Thread-18181] [transport.py] [_log()] server lang: <none>
2026-04-15T11:35:09.853 [DEBUG] [Thread-18181] [transport.py] [_log()] kex follows: False
2026-04-15T11:35:09.853 [DEBUG] [Thread-18181] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:35:09.853 [DEBUG] [Thread-18181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:35:09.853 [DEBUG] [Thread-18181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:35:09.853 [DEBUG] [Thread-18181] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:35:09.853 [DEBUG] [Thread-18181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:35:09.853 [DEBUG] [Thread-18181] [transport.py] [_log()] Compression: none
2026-04-15T11:35:09.853 [DEBUG] [Thread-18181] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:35:09.868 [DEBUG] [Thread-18181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:35:09.868 [DEBUG] [Thread-18181] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:35:09.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:35:09.869 [DEBUG] [Thread-18181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:35:09.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:35:09.870 [DEBUG] [Thread-18181] [transport.py] [_log()] userauth is OK
2026-04-15T11:35:09.870 [DEBUG] [Thread-18181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:35:09.870 [DEBUG] [Thread-18181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:35:09.870 [DEBUG] [Thread-18181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:35:09.870 [DEBUG] [Thread-18181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:35:09.894 [INFO] [Thread-18181] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:35:09.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:35:14.996 [DEBUG] [Thread-18183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:35:16.486 [DEBUG] [Thread-18181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:35:16.487 [DEBUG] [Thread-18181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:35:16.487 [DEBUG] [Thread-18181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:35:16.527 [DEBUG] [Thread-18181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:35:16.527 [DEBUG] [Thread-18181] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:35:16.530 [DEBUG] [Thread-18181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:35:16.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:35:16.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:35:16.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:35:16.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:35:16.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:35:16.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:35:16.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:35:16.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:35:16.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:35:16.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.398739 -999.00  +11.90  17.73     80   +8.70 1 2 1 2 1   888    0 3.35 13.63 ----- 18.0 17.7 297.6 24.9 17.3 -13.2 16.6 -12.4 15.8 -9.3 16.6 -9.4
2026-04-15T11:35:16.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:35:16.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:35:16.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.398739
2026-04-15T11:35:16.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:35:16.624 [DEBUG] [Thread-18181] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:35:16.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:35:16.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:35:16.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:35:16.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:35:16.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:34:52', tmtdew=4.34505, humidity=74.6789, cloud=0.0, wind=14.9623, temperature=12.0113, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:34:11.050', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:35:16.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:35:16.880 [DEBUG] [Thread-18185] [transport.py] [_log()] starting thread (client mode): 0xee98d8a0
2026-04-15T11:35:16.880 [DEBUG] [Thread-18185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:35:16.895 [DEBUG] [Thread-18185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:35:16.895 [INFO] [Thread-18185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:35:16.902 [DEBUG] [Thread-18185] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:35:16.903 [DEBUG] [Thread-18185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:35:16.903 [DEBUG] [Thread-18185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:35:16.903 [DEBUG] [Thread-18185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:35:16.903 [DEBUG] [Thread-18185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:35:16.903 [DEBUG] [Thread-18185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:35:16.903 [DEBUG] [Thread-18185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:35:16.903 [DEBUG] [Thread-18185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:35:16.903 [DEBUG] [Thread-18185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:35:16.903 [DEBUG] [Thread-18185] [transport.py] [_log()] client lang: <none>
2026-04-15T11:35:16.903 [DEBUG] [Thread-18185] [transport.py] [_log()] server lang: <none>
2026-04-15T11:35:16.903 [DEBUG] [Thread-18185] [transport.py] [_log()] kex follows: False
2026-04-15T11:35:16.903 [DEBUG] [Thread-18185] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:35:16.904 [DEBUG] [Thread-18185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:35:16.904 [DEBUG] [Thread-18185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:35:16.904 [DEBUG] [Thread-18185] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:35:16.904 [DEBUG] [Thread-18185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:35:16.904 [DEBUG] [Thread-18185] [transport.py] [_log()] Compression: none
2026-04-15T11:35:16.904 [DEBUG] [Thread-18185] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:35:16.959 [DEBUG] [Thread-18185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:35:16.959 [DEBUG] [Thread-18185] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:35:16.960 [DEBUG] [Thread-18185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:35:16.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:35:16.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:35:17.015 [DEBUG] [Thread-18185] [transport.py] [_log()] userauth is OK
2026-04-15T11:35:17.015 [DEBUG] [Thread-18185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:35:17.016 [DEBUG] [Thread-18185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:35:17.016 [DEBUG] [Thread-18185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:35:17.016 [DEBUG] [Thread-18185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:35:17.046 [INFO] [Thread-18185] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:35:17.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:35:17.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:35:17.903 [DEBUG] [Thread-18185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:35:17.904 [DEBUG] [Thread-18185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:35:17.951 [DEBUG] [Thread-18185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:35:17.951 [DEBUG] [Thread-18185] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:35:17.960 [DEBUG] [Thread-18185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:35:17.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:35:17.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')
2026-04-15T11:35:17.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
2026-04-15T11:35:17.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:35:17.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:35:17.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:35:17.995 [DEBUG] [Thread-18185] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:35:30.026 [DEBUG] [Thread-18187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:35:38.956 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:35:38.957 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:35:45.069 [DEBUG] [Thread-18188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:35:48.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:35:48.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:35:48.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:35:49.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 35, 28), 4.14591, 75.7234, 0.0, 14.2394, 11.5723, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:35:49.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:35:28
2026-04-15T11:35:49.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:35:50.176 [DEBUG] [Thread-18189] [transport.py] [_log()] starting thread (client mode): 0xee91f0a0
2026-04-15T11:35:50.176 [DEBUG] [Thread-18189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:35:50.187 [DEBUG] [Thread-18189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:35:50.187 [INFO] [Thread-18189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:35:50.188 [DEBUG] [Thread-18189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] client lang: <none>
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] server lang: <none>
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] kex follows: False
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:35:50.189 [DEBUG] [Thread-18189] [transport.py] [_log()] Compression: none
2026-04-15T11:35:50.190 [DEBUG] [Thread-18189] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:35:50.199 [DEBUG] [Thread-18189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:35:50.199 [DEBUG] [Thread-18189] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:35:50.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:35:50.200 [DEBUG] [Thread-18189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:35:50.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:35:50.202 [DEBUG] [Thread-18189] [transport.py] [_log()] userauth is OK
2026-04-15T11:35:50.202 [DEBUG] [Thread-18189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:35:50.202 [DEBUG] [Thread-18189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:35:50.202 [DEBUG] [Thread-18189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:35:50.202 [DEBUG] [Thread-18189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:35:50.214 [INFO] [Thread-18189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:35:50.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:35:50.865 [DEBUG] [Thread-18189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:35:50.865 [DEBUG] [Thread-18189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:35:50.865 [DEBUG] [Thread-18189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:35:50.906 [DEBUG] [Thread-18189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:35:50.906 [DEBUG] [Thread-18189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:35:50.908 [DEBUG] [Thread-18189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:35:50.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:35:50.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:35:50.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:35:50.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:35:50.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:35:50.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:35:50.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:35:50.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:35:50.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:35:50.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.399780 -999.00  +11.60  15.80     81   +8.60 1 2 1 2 1   888    0 3.44 15.73 ----- 12.8 15.8 302.9 20.9 17.2 -11.0 16.4 -10.8 15.6 -9.3 16.5 -8.1
2026-04-15T11:35:50.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:35:50.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:35:50.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.399780
2026-04-15T11:35:50.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:35:50.928 [DEBUG] [Thread-18189] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:35:50.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:35:50.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:35:50.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:35:50.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:35:50.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:35:28', tmtdew=4.14591, humidity=75.7234, cloud=0.0, wind=14.2394, temperature=11.5723, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:35:40.992', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:35:51.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:35:51.137 [DEBUG] [Thread-18192] [transport.py] [_log()] starting thread (client mode): 0xf1365bd0
2026-04-15T11:35:51.137 [DEBUG] [Thread-18192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:35:51.151 [DEBUG] [Thread-18192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:35:51.151 [INFO] [Thread-18192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:35:51.158 [DEBUG] [Thread-18192] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:35:51.158 [DEBUG] [Thread-18192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:35:51.158 [DEBUG] [Thread-18192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:35:51.158 [DEBUG] [Thread-18192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:35:51.158 [DEBUG] [Thread-18192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:35:51.159 [DEBUG] [Thread-18192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:35:51.159 [DEBUG] [Thread-18192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:35:51.159 [DEBUG] [Thread-18192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:35:51.159 [DEBUG] [Thread-18192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:35:51.159 [DEBUG] [Thread-18192] [transport.py] [_log()] client lang: <none>
2026-04-15T11:35:51.159 [DEBUG] [Thread-18192] [transport.py] [_log()] server lang: <none>
2026-04-15T11:35:51.159 [DEBUG] [Thread-18192] [transport.py] [_log()] kex follows: False
2026-04-15T11:35:51.159 [DEBUG] [Thread-18192] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:35:51.159 [DEBUG] [Thread-18192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:35:51.159 [DEBUG] [Thread-18192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:35:51.159 [DEBUG] [Thread-18192] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:35:51.159 [DEBUG] [Thread-18192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:35:51.160 [DEBUG] [Thread-18192] [transport.py] [_log()] Compression: none
2026-04-15T11:35:51.160 [DEBUG] [Thread-18192] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:35:51.214 [DEBUG] [Thread-18192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:35:51.214 [DEBUG] [Thread-18192] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:35:51.215 [DEBUG] [Thread-18192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:35:51.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:35:51.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:35:51.271 [DEBUG] [Thread-18192] [transport.py] [_log()] userauth is OK
2026-04-15T11:35:51.271 [DEBUG] [Thread-18192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:35:51.271 [DEBUG] [Thread-18192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:35:51.271 [DEBUG] [Thread-18192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:35:51.271 [DEBUG] [Thread-18192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:35:51.295 [INFO] [Thread-18192] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:35:51.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:35:51.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:35:52.121 [DEBUG] [Thread-18192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:35:52.122 [DEBUG] [Thread-18192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:35:52.169 [DEBUG] [Thread-18192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:35:52.169 [DEBUG] [Thread-18192] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:35:52.178 [DEBUG] [Thread-18192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:35:52.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:35:52.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')
2026-04-15T11:35:52.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
2026-04-15T11:35:52.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:35:52.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:35:52.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:35:52.213 [DEBUG] [Thread-18192] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:36:00.101 [DEBUG] [Thread-18194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:36:09.809 [DEBUG] [Thread-18195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:36:15.146 [DEBUG] [Thread-18196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:36:22.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:36:22.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:36:22.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
2026-04-15T11:36:23.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 36, 3), 4.1312, 75.7897, 0.0, 14.31, 11.5225, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:36:23.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:36:03
2026-04-15T11:36:23.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:36:24.336 [DEBUG] [Thread-18197] [transport.py] [_log()] starting thread (client mode): 0xf13673a0
2026-04-15T11:36:24.337 [DEBUG] [Thread-18197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:36:24.358 [DEBUG] [Thread-18197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:36:24.358 [INFO] [Thread-18197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:36:24.361 [DEBUG] [Thread-18197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:36:24.361 [DEBUG] [Thread-18197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:36:24.362 [DEBUG] [Thread-18197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:36:24.362 [DEBUG] [Thread-18197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:36:24.362 [DEBUG] [Thread-18197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:36:24.362 [DEBUG] [Thread-18197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:36:24.362 [DEBUG] [Thread-18197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:36:24.362 [DEBUG] [Thread-18197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:36:24.362 [DEBUG] [Thread-18197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:36:24.362 [DEBUG] [Thread-18197] [transport.py] [_log()] client lang: <none>
2026-04-15T11:36:24.362 [DEBUG] [Thread-18197] [transport.py] [_log()] server lang: <none>
2026-04-15T11:36:24.362 [DEBUG] [Thread-18197] [transport.py] [_log()] kex follows: False
2026-04-15T11:36:24.362 [DEBUG] [Thread-18197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:36:24.362 [DEBUG] [Thread-18197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:36:24.363 [DEBUG] [Thread-18197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:36:24.363 [DEBUG] [Thread-18197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:36:24.363 [DEBUG] [Thread-18197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:36:24.363 [DEBUG] [Thread-18197] [transport.py] [_log()] Compression: none
2026-04-15T11:36:24.363 [DEBUG] [Thread-18197] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:36:24.379 [DEBUG] [Thread-18197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:36:24.379 [DEBUG] [Thread-18197] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:36:24.380 [DEBUG] [Thread-18197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:36:24.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:36:24.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:36:24.381 [DEBUG] [Thread-18197] [transport.py] [_log()] userauth is OK
2026-04-15T11:36:24.381 [DEBUG] [Thread-18197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:36:24.381 [DEBUG] [Thread-18197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:36:24.381 [DEBUG] [Thread-18197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:36:24.381 [DEBUG] [Thread-18197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:36:24.405 [INFO] [Thread-18197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:36:24.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:36:25.171 [DEBUG] [Thread-18197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:36:25.172 [DEBUG] [Thread-18197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:36:25.172 [DEBUG] [Thread-18197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:36:25.212 [DEBUG] [Thread-18197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:36:25.212 [DEBUG] [Thread-18197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:36:25.215 [DEBUG] [Thread-18197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:36:25.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:36:25.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:36:25.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:36:25.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:36:25.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:36:25.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:36:25.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:36:25.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:36:25.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:36:25.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.399780 -999.00  +11.60  15.80     81   +8.60 1 2 1 2 1   888    0 3.44 15.73 ----- 12.8 15.8 302.9 20.9 17.2 -11.0 16.4 -10.8 15.6 -9.3 16.5 -8.1
2026-04-15T11:36:25.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:36:25.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:36:25.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.399780
2026-04-15T11:36:25.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:36:25.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:36:25.242 [DEBUG] [Thread-18197] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:36:25.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:36:25.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:36:25.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:36:25.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:36:03', tmtdew=4.1312, humidity=75.7897, cloud=0.0, wind=14.31, temperature=11.5225, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:35:40.992', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:36:25.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:36:25.494 [DEBUG] [Thread-18200] [transport.py] [_log()] starting thread (client mode): 0xf13e36d0
2026-04-15T11:36:25.495 [DEBUG] [Thread-18200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:36:25.508 [DEBUG] [Thread-18200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:36:25.509 [INFO] [Thread-18200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:36:25.516 [DEBUG] [Thread-18200] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:36:25.516 [DEBUG] [Thread-18200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:36:25.516 [DEBUG] [Thread-18200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:36:25.516 [DEBUG] [Thread-18200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:36:25.516 [DEBUG] [Thread-18200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:36:25.516 [DEBUG] [Thread-18200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:36:25.516 [DEBUG] [Thread-18200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:36:25.516 [DEBUG] [Thread-18200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:36:25.517 [DEBUG] [Thread-18200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:36:25.517 [DEBUG] [Thread-18200] [transport.py] [_log()] client lang: <none>
2026-04-15T11:36:25.517 [DEBUG] [Thread-18200] [transport.py] [_log()] server lang: <none>
2026-04-15T11:36:25.517 [DEBUG] [Thread-18200] [transport.py] [_log()] kex follows: False
2026-04-15T11:36:25.517 [DEBUG] [Thread-18200] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:36:25.517 [DEBUG] [Thread-18200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:36:25.517 [DEBUG] [Thread-18200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:36:25.517 [DEBUG] [Thread-18200] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:36:25.517 [DEBUG] [Thread-18200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:36:25.517 [DEBUG] [Thread-18200] [transport.py] [_log()] Compression: none
2026-04-15T11:36:25.517 [DEBUG] [Thread-18200] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:36:25.573 [DEBUG] [Thread-18200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:36:25.573 [DEBUG] [Thread-18200] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:36:25.574 [DEBUG] [Thread-18200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:36:25.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:36:25.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:36:25.630 [DEBUG] [Thread-18200] [transport.py] [_log()] userauth is OK
2026-04-15T11:36:25.630 [DEBUG] [Thread-18200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:36:25.630 [DEBUG] [Thread-18200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:36:25.630 [DEBUG] [Thread-18200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:36:25.630 [DEBUG] [Thread-18200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:36:25.650 [INFO] [Thread-18200] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:36:25.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:36:25.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:36:26.492 [DEBUG] [Thread-18200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:36:26.493 [DEBUG] [Thread-18200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:36:26.540 [DEBUG] [Thread-18200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:36:26.540 [DEBUG] [Thread-18200] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:36:26.549 [DEBUG] [Thread-18200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:36:26.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:36:26.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')
2026-04-15T11:36:26.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
2026-04-15T11:36:26.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:36:26.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:36:26.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:36:26.582 [DEBUG] [Thread-18200] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:36:30.178 [DEBUG] [Thread-18202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:36:39.097 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:36:39.098 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:36:45.221 [DEBUG] [Thread-18203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:36:56.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:36:56.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:36:56.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
2026-04-15T11:36:57.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 36, 39), 4.05743, 76.2041, 0.0, 14.3626, 12.3096, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:36:57.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:36:39
2026-04-15T11:36:58.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:36:58.775 [DEBUG] [Thread-18204] [transport.py] [_log()] starting thread (client mode): 0xf13e2bc0
2026-04-15T11:36:58.775 [DEBUG] [Thread-18204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:36:58.796 [DEBUG] [Thread-18204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:36:58.796 [INFO] [Thread-18204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:36:58.799 [DEBUG] [Thread-18204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:36:58.799 [DEBUG] [Thread-18204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:36:58.799 [DEBUG] [Thread-18204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:36:58.799 [DEBUG] [Thread-18204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:36:58.799 [DEBUG] [Thread-18204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:36:58.799 [DEBUG] [Thread-18204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:36:58.799 [DEBUG] [Thread-18204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:36:58.799 [DEBUG] [Thread-18204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:36:58.800 [DEBUG] [Thread-18204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:36:58.800 [DEBUG] [Thread-18204] [transport.py] [_log()] client lang: <none>
2026-04-15T11:36:58.800 [DEBUG] [Thread-18204] [transport.py] [_log()] server lang: <none>
2026-04-15T11:36:58.800 [DEBUG] [Thread-18204] [transport.py] [_log()] kex follows: False
2026-04-15T11:36:58.800 [DEBUG] [Thread-18204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:36:58.800 [DEBUG] [Thread-18204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:36:58.800 [DEBUG] [Thread-18204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:36:58.800 [DEBUG] [Thread-18204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:36:58.800 [DEBUG] [Thread-18204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:36:58.800 [DEBUG] [Thread-18204] [transport.py] [_log()] Compression: none
2026-04-15T11:36:58.800 [DEBUG] [Thread-18204] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:36:58.812 [DEBUG] [Thread-18204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:36:58.813 [DEBUG] [Thread-18204] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:36:58.813 [DEBUG] [Thread-18204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:36:58.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:36:58.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:36:58.815 [DEBUG] [Thread-18204] [transport.py] [_log()] userauth is OK
2026-04-15T11:36:58.816 [DEBUG] [Thread-18204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:36:58.816 [DEBUG] [Thread-18204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:36:58.816 [DEBUG] [Thread-18204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:36:58.816 [DEBUG] [Thread-18204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:36:58.833 [INFO] [Thread-18204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:36:58.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:36:59.402 [DEBUG] [Thread-18204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:36:59.402 [DEBUG] [Thread-18204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:36:59.403 [DEBUG] [Thread-18204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:36:59.443 [DEBUG] [Thread-18204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:36:59.443 [DEBUG] [Thread-18204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:36:59.446 [DEBUG] [Thread-18204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:36:59.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:36:59.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:36:59.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:36:59.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:36:59.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:36:59.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:36:59.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:36:59.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:36:59.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:36:59.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.400475 -999.00  +11.60  13.85     81   +8.50 1 3 1 2 1   888    0 3.53 19.33 ----- 12.3 13.8 308.0 18.0 17.1 -8.5 16.4 -8.9 15.7 -8.0 16.6 -6.9
2026-04-15T11:36:59.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:36:59.464 [DEBUG] [Thread-18204] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:36:59.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:36:59.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.400475
2026-04-15T11:36:59.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:36:59.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:36:59.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:36:59.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:36:59.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:36:59.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:36:39', tmtdew=4.05743, humidity=76.2041, cloud=0.0, wind=14.3626, temperature=12.3096, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:36:41.040', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:36:59.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:36:59.718 [DEBUG] [Thread-18207] [transport.py] [_log()] starting thread (client mode): 0xee98fac0
2026-04-15T11:36:59.719 [DEBUG] [Thread-18207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:36:59.736 [DEBUG] [Thread-18207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:36:59.736 [INFO] [Thread-18207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:36:59.748 [DEBUG] [Thread-18207] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:36:59.748 [DEBUG] [Thread-18207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:36:59.748 [DEBUG] [Thread-18207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:36:59.748 [DEBUG] [Thread-18207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:36:59.748 [DEBUG] [Thread-18207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:36:59.748 [DEBUG] [Thread-18207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:36:59.748 [DEBUG] [Thread-18207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:36:59.748 [DEBUG] [Thread-18207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:36:59.748 [DEBUG] [Thread-18207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:36:59.748 [DEBUG] [Thread-18207] [transport.py] [_log()] client lang: <none>
2026-04-15T11:36:59.749 [DEBUG] [Thread-18207] [transport.py] [_log()] server lang: <none>
2026-04-15T11:36:59.749 [DEBUG] [Thread-18207] [transport.py] [_log()] kex follows: False
2026-04-15T11:36:59.749 [DEBUG] [Thread-18207] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:36:59.749 [DEBUG] [Thread-18207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:36:59.749 [DEBUG] [Thread-18207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:36:59.749 [DEBUG] [Thread-18207] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:36:59.749 [DEBUG] [Thread-18207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:36:59.749 [DEBUG] [Thread-18207] [transport.py] [_log()] Compression: none
2026-04-15T11:36:59.749 [DEBUG] [Thread-18207] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:36:59.800 [DEBUG] [Thread-18207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:36:59.800 [DEBUG] [Thread-18207] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:36:59.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:36:59.801 [DEBUG] [Thread-18207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:36:59.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:36:59.857 [DEBUG] [Thread-18207] [transport.py] [_log()] userauth is OK
2026-04-15T11:36:59.857 [DEBUG] [Thread-18207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:36:59.857 [DEBUG] [Thread-18207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:36:59.857 [DEBUG] [Thread-18207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:36:59.857 [DEBUG] [Thread-18207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:36:59.882 [INFO] [Thread-18207] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:36:59.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:36:59.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:37:00.253 [DEBUG] [Thread-18209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:37:00.695 [DEBUG] [Thread-18207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:37:00.695 [DEBUG] [Thread-18207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:37:00.743 [DEBUG] [Thread-18207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:37:00.743 [DEBUG] [Thread-18207] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:37:00.752 [DEBUG] [Thread-18207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:37:00.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:37:00.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')
2026-04-15T11:37:00.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
2026-04-15T11:37:00.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:37:00.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:37:00.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:37:00.788 [DEBUG] [Thread-18207] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:37:09.921 [DEBUG] [Thread-18210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:37:15.301 [DEBUG] [Thread-18211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:37:30.332 [DEBUG] [Thread-18212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:37:30.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:37:30.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:37:30.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
2026-04-15T11:37:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 37, 14), 3.96633, 76.6845, 0.0, 13.9741, 11.7705, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:37:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:37:14
2026-04-15T11:37:32.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:37:32.879 [DEBUG] [Thread-18213] [transport.py] [_log()] starting thread (client mode): 0xf13e39d0
2026-04-15T11:37:32.879 [DEBUG] [Thread-18213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:37:32.889 [DEBUG] [Thread-18213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:37:32.889 [INFO] [Thread-18213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:37:32.892 [DEBUG] [Thread-18213] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:37:32.892 [DEBUG] [Thread-18213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:37:32.892 [DEBUG] [Thread-18213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:37:32.892 [DEBUG] [Thread-18213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:37:32.892 [DEBUG] [Thread-18213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:37:32.892 [DEBUG] [Thread-18213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:37:32.892 [DEBUG] [Thread-18213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:37:32.893 [DEBUG] [Thread-18213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:37:32.893 [DEBUG] [Thread-18213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:37:32.893 [DEBUG] [Thread-18213] [transport.py] [_log()] client lang: <none>
2026-04-15T11:37:32.893 [DEBUG] [Thread-18213] [transport.py] [_log()] server lang: <none>
2026-04-15T11:37:32.893 [DEBUG] [Thread-18213] [transport.py] [_log()] kex follows: False
2026-04-15T11:37:32.893 [DEBUG] [Thread-18213] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:37:32.893 [DEBUG] [Thread-18213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:37:32.893 [DEBUG] [Thread-18213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:37:32.893 [DEBUG] [Thread-18213] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:37:32.893 [DEBUG] [Thread-18213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:37:32.893 [DEBUG] [Thread-18213] [transport.py] [_log()] Compression: none
2026-04-15T11:37:32.893 [DEBUG] [Thread-18213] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:37:32.910 [DEBUG] [Thread-18213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:37:32.910 [DEBUG] [Thread-18213] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:37:32.911 [DEBUG] [Thread-18213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:37:32.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:37:32.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:37:32.912 [DEBUG] [Thread-18213] [transport.py] [_log()] userauth is OK
2026-04-15T11:37:32.912 [DEBUG] [Thread-18213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:37:32.912 [DEBUG] [Thread-18213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:37:32.912 [DEBUG] [Thread-18213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:37:32.912 [DEBUG] [Thread-18213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:37:32.928 [INFO] [Thread-18213] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:37:32.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:37:33.492 [DEBUG] [Thread-18213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:37:33.493 [DEBUG] [Thread-18213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:37:33.493 [DEBUG] [Thread-18213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:37:33.533 [DEBUG] [Thread-18213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:37:33.533 [DEBUG] [Thread-18213] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:37:33.536 [DEBUG] [Thread-18213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:37:33.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:37:33.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:37:33.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:37:33.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:37:33.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:37:33.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:37:33.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:37:33.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:37:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:37:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.400822 -999.00  +11.80  12.69     81   +8.70 1 3 1 2 1   888    0 3.49 17.90 ----- 14.5 12.7 282.8 15.9 17.2 -7.3 16.5 -8.5 15.8 -7.4 16.6 -6.4
2026-04-15T11:37:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:37:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:37:33.562 [DEBUG] [Thread-18213] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:37:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.400822
2026-04-15T11:37:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:37:33.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:37:33.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:37:33.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:37:33.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:37:33.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:37:14', tmtdew=3.96633, humidity=76.6845, cloud=0.0, wind=13.9741, temperature=11.7705, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:37:11.021', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:37:33.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:37:33.825 [DEBUG] [Thread-18216] [transport.py] [_log()] starting thread (client mode): 0xee989bd0
2026-04-15T11:37:33.825 [DEBUG] [Thread-18216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:37:33.843 [DEBUG] [Thread-18216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:37:33.843 [INFO] [Thread-18216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:37:33.850 [DEBUG] [Thread-18216] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:37:33.850 [DEBUG] [Thread-18216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:37:33.850 [DEBUG] [Thread-18216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:37:33.850 [DEBUG] [Thread-18216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:37:33.850 [DEBUG] [Thread-18216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:37:33.850 [DEBUG] [Thread-18216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:37:33.851 [DEBUG] [Thread-18216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:37:33.851 [DEBUG] [Thread-18216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:37:33.851 [DEBUG] [Thread-18216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:37:33.851 [DEBUG] [Thread-18216] [transport.py] [_log()] client lang: <none>
2026-04-15T11:37:33.851 [DEBUG] [Thread-18216] [transport.py] [_log()] server lang: <none>
2026-04-15T11:37:33.851 [DEBUG] [Thread-18216] [transport.py] [_log()] kex follows: False
2026-04-15T11:37:33.851 [DEBUG] [Thread-18216] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:37:33.851 [DEBUG] [Thread-18216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:37:33.851 [DEBUG] [Thread-18216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:37:33.851 [DEBUG] [Thread-18216] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:37:33.851 [DEBUG] [Thread-18216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:37:33.851 [DEBUG] [Thread-18216] [transport.py] [_log()] Compression: none
2026-04-15T11:37:33.852 [DEBUG] [Thread-18216] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:37:33.907 [DEBUG] [Thread-18216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:37:33.908 [DEBUG] [Thread-18216] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:37:33.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:37:33.908 [DEBUG] [Thread-18216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:37:33.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:37:33.964 [DEBUG] [Thread-18216] [transport.py] [_log()] userauth is OK
2026-04-15T11:37:33.964 [DEBUG] [Thread-18216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:37:33.964 [DEBUG] [Thread-18216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:37:33.964 [DEBUG] [Thread-18216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:37:33.964 [DEBUG] [Thread-18216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:37:33.981 [INFO] [Thread-18216] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:37:33.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:37:33.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:37:34.781 [DEBUG] [Thread-18216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:37:34.782 [DEBUG] [Thread-18216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:37:34.831 [DEBUG] [Thread-18216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:37:34.831 [DEBUG] [Thread-18216] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:37:34.840 [DEBUG] [Thread-18216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:37:34.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:37:34.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')
2026-04-15T11:37:34.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
2026-04-15T11:37:34.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:37:34.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:37:34.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:37:34.876 [DEBUG] [Thread-18216] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:37:39.238 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:37:39.239 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:37:45.364 [DEBUG] [Thread-18218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:38:00.410 [DEBUG] [Thread-18219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:38:04.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:38:04.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:38:04.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
2026-04-15T11:38:06.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 37, 50), 4.3736, 74.5784, 0.0, 14.927, 12.2758, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:38:06.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:37:50
2026-04-15T11:38:06.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:38:07.044 [DEBUG] [Thread-18220] [transport.py] [_log()] starting thread (client mode): 0xee907f40
2026-04-15T11:38:07.044 [DEBUG] [Thread-18220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:38:07.063 [DEBUG] [Thread-18220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:38:07.063 [INFO] [Thread-18220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:38:07.066 [DEBUG] [Thread-18220] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:38:07.066 [DEBUG] [Thread-18220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:38:07.067 [DEBUG] [Thread-18220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:38:07.067 [DEBUG] [Thread-18220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:38:07.067 [DEBUG] [Thread-18220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:38:07.067 [DEBUG] [Thread-18220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:38:07.067 [DEBUG] [Thread-18220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:38:07.067 [DEBUG] [Thread-18220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:38:07.067 [DEBUG] [Thread-18220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:38:07.067 [DEBUG] [Thread-18220] [transport.py] [_log()] client lang: <none>
2026-04-15T11:38:07.067 [DEBUG] [Thread-18220] [transport.py] [_log()] server lang: <none>
2026-04-15T11:38:07.068 [DEBUG] [Thread-18220] [transport.py] [_log()] kex follows: False
2026-04-15T11:38:07.068 [DEBUG] [Thread-18220] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:38:07.068 [DEBUG] [Thread-18220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:38:07.068 [DEBUG] [Thread-18220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:38:07.068 [DEBUG] [Thread-18220] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:38:07.068 [DEBUG] [Thread-18220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:38:07.068 [DEBUG] [Thread-18220] [transport.py] [_log()] Compression: none
2026-04-15T11:38:07.068 [DEBUG] [Thread-18220] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:38:07.077 [DEBUG] [Thread-18220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:38:07.077 [DEBUG] [Thread-18220] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:38:07.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:38:07.078 [DEBUG] [Thread-18220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:38:07.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:38:07.080 [DEBUG] [Thread-18220] [transport.py] [_log()] userauth is OK
2026-04-15T11:38:07.080 [DEBUG] [Thread-18220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:38:07.080 [DEBUG] [Thread-18220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:38:07.080 [DEBUG] [Thread-18220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:38:07.081 [DEBUG] [Thread-18220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:38:07.099 [INFO] [Thread-18220] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:38:07.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:38:07.730 [DEBUG] [Thread-18220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:38:07.731 [DEBUG] [Thread-18220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:38:07.731 [DEBUG] [Thread-18220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:38:07.771 [DEBUG] [Thread-18220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:38:07.771 [DEBUG] [Thread-18220] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:38:07.774 [DEBUG] [Thread-18220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:38:07.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:38:07.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:38:07.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:38:07.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:38:07.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:38:07.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:38:07.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:38:07.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:38:07.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:38:07.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.401169 -999.00  +11.70  18.23     79   +8.30 1 3 1 1 1   888    0 3.58 21.35 ----- 13.5 18.2 298.2 24.8 17.2 -7.9 16.4 -8.0 15.7 -8.6 16.5 -7.3
2026-04-15T11:38:07.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:38:07.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:38:07.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.401169
2026-04-15T11:38:07.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:38:07.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:38:07.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:38:07.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:38:07.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:38:07.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:37:50', tmtdew=4.3736, humidity=74.5784, cloud=0.0, wind=14.927, temperature=12.2758, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:37:41.002', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:38:07.791 [DEBUG] [Thread-18220] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:38:07.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:38:08.001 [DEBUG] [Thread-18223] [transport.py] [_log()] starting thread (client mode): 0xee9070a0
2026-04-15T11:38:08.001 [DEBUG] [Thread-18223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:38:08.015 [DEBUG] [Thread-18223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:38:08.015 [INFO] [Thread-18223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:38:08.023 [DEBUG] [Thread-18223] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:38:08.023 [DEBUG] [Thread-18223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:38:08.023 [DEBUG] [Thread-18223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:38:08.023 [DEBUG] [Thread-18223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:38:08.023 [DEBUG] [Thread-18223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:38:08.023 [DEBUG] [Thread-18223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:38:08.023 [DEBUG] [Thread-18223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:38:08.023 [DEBUG] [Thread-18223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:38:08.023 [DEBUG] [Thread-18223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:38:08.023 [DEBUG] [Thread-18223] [transport.py] [_log()] client lang: <none>
2026-04-15T11:38:08.023 [DEBUG] [Thread-18223] [transport.py] [_log()] server lang: <none>
2026-04-15T11:38:08.024 [DEBUG] [Thread-18223] [transport.py] [_log()] kex follows: False
2026-04-15T11:38:08.024 [DEBUG] [Thread-18223] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:38:08.024 [DEBUG] [Thread-18223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:38:08.024 [DEBUG] [Thread-18223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:38:08.024 [DEBUG] [Thread-18223] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:38:08.024 [DEBUG] [Thread-18223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:38:08.024 [DEBUG] [Thread-18223] [transport.py] [_log()] Compression: none
2026-04-15T11:38:08.024 [DEBUG] [Thread-18223] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:38:08.079 [DEBUG] [Thread-18223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:38:08.079 [DEBUG] [Thread-18223] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:38:08.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:38:08.080 [DEBUG] [Thread-18223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:38:08.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:38:08.139 [DEBUG] [Thread-18223] [transport.py] [_log()] userauth is OK
2026-04-15T11:38:08.139 [DEBUG] [Thread-18223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:38:08.140 [DEBUG] [Thread-18223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:38:08.140 [DEBUG] [Thread-18223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:38:08.140 [DEBUG] [Thread-18223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:38:08.165 [INFO] [Thread-18223] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:38:08.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:38:08.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:38:08.991 [DEBUG] [Thread-18223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:38:08.991 [DEBUG] [Thread-18223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:38:09.039 [DEBUG] [Thread-18223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:38:09.039 [DEBUG] [Thread-18223] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:38:09.048 [DEBUG] [Thread-18223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:38:09.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:38:09.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')
2026-04-15T11:38:09.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
2026-04-15T11:38:09.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:38:09.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:38:09.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:38:09.082 [DEBUG] [Thread-18223] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:38:10.012 [DEBUG] [Thread-18225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:38:15.443 [DEBUG] [Thread-18226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:38:30.490 [DEBUG] [Thread-18227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:38:39.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:38:39.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:38:39.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
2026-04-15T11:38:39.378 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:38:39.379 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:38:40.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 38, 26), 4.06198, 76.1871, 0.0, 16.5157, 11.7873, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:38:40.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:38:26
2026-04-15T11:38:40.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:38:41.203 [DEBUG] [Thread-18228] [transport.py] [_log()] starting thread (client mode): 0xee988700
2026-04-15T11:38:41.203 [DEBUG] [Thread-18228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:38:41.218 [DEBUG] [Thread-18228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:38:41.218 [INFO] [Thread-18228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:38:41.219 [DEBUG] [Thread-18228] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:38:41.219 [DEBUG] [Thread-18228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:38:41.219 [DEBUG] [Thread-18228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] client lang: <none>
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] server lang: <none>
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] kex follows: False
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] Compression: none
2026-04-15T11:38:41.220 [DEBUG] [Thread-18228] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:38:41.228 [DEBUG] [Thread-18228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:38:41.228 [DEBUG] [Thread-18228] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:38:41.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:38:41.229 [DEBUG] [Thread-18228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:38:41.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:38:41.230 [DEBUG] [Thread-18228] [transport.py] [_log()] userauth is OK
2026-04-15T11:38:41.230 [DEBUG] [Thread-18228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:38:41.230 [DEBUG] [Thread-18228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:38:41.231 [DEBUG] [Thread-18228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:38:41.231 [DEBUG] [Thread-18228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:38:41.262 [INFO] [Thread-18228] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:38:41.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:38:41.863 [DEBUG] [Thread-18228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:38:41.863 [DEBUG] [Thread-18228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:38:41.864 [DEBUG] [Thread-18228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:38:41.904 [DEBUG] [Thread-18228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:38:41.904 [DEBUG] [Thread-18228] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:38:41.906 [DEBUG] [Thread-18228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:38:41.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:38:41.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:38:41.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:38:41.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:38:41.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:38:41.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:38:41.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:38:41.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:38:41.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:38:41.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.401517 -999.00  +11.50  17.36     80   +8.40 1 3 1 2 1   888    0 3.66 24.90 ----- 17.2 17.4 310.6 23.8 17.1 -7.6 16.4 -7.7 15.8 -7.7 16.5 -7.3
2026-04-15T11:38:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:38:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:38:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.401517
2026-04-15T11:38:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:38:41.925 [DEBUG] [Thread-18228] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:38:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:38:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:38:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:38:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:38:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:38:26', tmtdew=4.06198, humidity=76.1871, cloud=0.0, wind=16.5157, temperature=11.7873, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:38:11.069', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:38:42.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:38:42.178 [DEBUG] [Thread-18231] [transport.py] [_log()] starting thread (client mode): 0xf1367490
2026-04-15T11:38:42.179 [DEBUG] [Thread-18231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:38:42.193 [DEBUG] [Thread-18231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:38:42.193 [INFO] [Thread-18231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:38:42.201 [DEBUG] [Thread-18231] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:38:42.201 [DEBUG] [Thread-18231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:38:42.201 [DEBUG] [Thread-18231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:38:42.201 [DEBUG] [Thread-18231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:38:42.201 [DEBUG] [Thread-18231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:38:42.201 [DEBUG] [Thread-18231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:38:42.201 [DEBUG] [Thread-18231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:38:42.201 [DEBUG] [Thread-18231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:38:42.201 [DEBUG] [Thread-18231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:38:42.202 [DEBUG] [Thread-18231] [transport.py] [_log()] client lang: <none>
2026-04-15T11:38:42.202 [DEBUG] [Thread-18231] [transport.py] [_log()] server lang: <none>
2026-04-15T11:38:42.202 [DEBUG] [Thread-18231] [transport.py] [_log()] kex follows: False
2026-04-15T11:38:42.202 [DEBUG] [Thread-18231] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:38:42.202 [DEBUG] [Thread-18231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:38:42.202 [DEBUG] [Thread-18231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:38:42.202 [DEBUG] [Thread-18231] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:38:42.202 [DEBUG] [Thread-18231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:38:42.202 [DEBUG] [Thread-18231] [transport.py] [_log()] Compression: none
2026-04-15T11:38:42.202 [DEBUG] [Thread-18231] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:38:42.258 [DEBUG] [Thread-18231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:38:42.259 [DEBUG] [Thread-18231] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:38:42.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:38:42.259 [DEBUG] [Thread-18231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:38:42.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:38:42.316 [DEBUG] [Thread-18231] [transport.py] [_log()] userauth is OK
2026-04-15T11:38:42.316 [DEBUG] [Thread-18231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:38:42.317 [DEBUG] [Thread-18231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:38:42.317 [DEBUG] [Thread-18231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:38:42.317 [DEBUG] [Thread-18231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:38:42.342 [INFO] [Thread-18231] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:38:42.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:38:42.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:38:43.164 [DEBUG] [Thread-18231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:38:43.164 [DEBUG] [Thread-18231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:38:43.217 [DEBUG] [Thread-18231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:38:43.218 [DEBUG] [Thread-18231] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:38:43.227 [DEBUG] [Thread-18231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:38:43.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:38:43.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')
2026-04-15T11:38:43.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') -> 00000000
2026-04-15T11:38:43.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:38:43.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:38:43.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:38:43.261 [DEBUG] [Thread-18231] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:38:45.523 [DEBUG] [Thread-18233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:39:00.569 [DEBUG] [Thread-18234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:39:10.123 [DEBUG] [Thread-18235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:39:13.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:39:13.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:39:13.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:39:14.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 39, 2), 4.11236, 75.9384, 0.0, 15.1927, 11.8371, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:39:14.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:39:02
2026-04-15T11:39:14.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:39:15.342 [DEBUG] [Thread-18236] [transport.py] [_log()] starting thread (client mode): 0xee98fb80
2026-04-15T11:39:15.342 [DEBUG] [Thread-18236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:39:15.361 [DEBUG] [Thread-18236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:39:15.361 [INFO] [Thread-18236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:39:15.364 [DEBUG] [Thread-18236] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:39:15.364 [DEBUG] [Thread-18236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:39:15.364 [DEBUG] [Thread-18236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:39:15.364 [DEBUG] [Thread-18236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:39:15.365 [DEBUG] [Thread-18236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:39:15.365 [DEBUG] [Thread-18236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:39:15.365 [DEBUG] [Thread-18236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:39:15.365 [DEBUG] [Thread-18236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:39:15.365 [DEBUG] [Thread-18236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:39:15.365 [DEBUG] [Thread-18236] [transport.py] [_log()] client lang: <none>
2026-04-15T11:39:15.365 [DEBUG] [Thread-18236] [transport.py] [_log()] server lang: <none>
2026-04-15T11:39:15.365 [DEBUG] [Thread-18236] [transport.py] [_log()] kex follows: False
2026-04-15T11:39:15.365 [DEBUG] [Thread-18236] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:39:15.365 [DEBUG] [Thread-18236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:39:15.365 [DEBUG] [Thread-18236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:39:15.365 [DEBUG] [Thread-18236] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:39:15.366 [DEBUG] [Thread-18236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:39:15.366 [DEBUG] [Thread-18236] [transport.py] [_log()] Compression: none
2026-04-15T11:39:15.366 [DEBUG] [Thread-18236] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:39:15.383 [DEBUG] [Thread-18236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:39:15.383 [DEBUG] [Thread-18236] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:39:15.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:39:15.384 [DEBUG] [Thread-18236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:39:15.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:39:15.385 [DEBUG] [Thread-18236] [transport.py] [_log()] userauth is OK
2026-04-15T11:39:15.385 [DEBUG] [Thread-18236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:39:15.385 [DEBUG] [Thread-18236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:39:15.385 [DEBUG] [Thread-18236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:39:15.386 [DEBUG] [Thread-18236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:39:15.410 [INFO] [Thread-18236] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:39:15.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:39:15.604 [DEBUG] [Thread-18238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:39:16.028 [DEBUG] [Thread-18236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:39:16.028 [DEBUG] [Thread-18236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:39:16.029 [DEBUG] [Thread-18236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:39:16.069 [DEBUG] [Thread-18236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:39:16.069 [DEBUG] [Thread-18236] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:39:16.071 [DEBUG] [Thread-18236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:39:16.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:39:16.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:39:16.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:39:16.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:39:16.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:39:16.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:39:16.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:39:16.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:39:16.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:39:16.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.402211 -999.00  +11.60  20.42     81   +8.60 1 3 1 2 1   888    0 3.78 25.49 ----- 17.4 20.4 311.0 23.0 17.1 -7.7 16.4 -8.1 15.8 -8.7 16.5 -8.2
2026-04-15T11:39:16.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:39:16.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:39:16.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.402211
2026-04-15T11:39:16.093 [DEBUG] [Thread-18236] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:39:16.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:39:16.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:39:16.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:39:16.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:39:16.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:39:16.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:39:02', tmtdew=4.11236, humidity=75.9384, cloud=0.0, wind=15.1927, temperature=11.8371, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:39:11.030', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:39:16.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:39:16.354 [DEBUG] [Thread-18240] [transport.py] [_log()] starting thread (client mode): 0xee905270
2026-04-15T11:39:16.354 [DEBUG] [Thread-18240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:39:16.369 [DEBUG] [Thread-18240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:39:16.369 [INFO] [Thread-18240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:39:16.376 [DEBUG] [Thread-18240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:39:16.376 [DEBUG] [Thread-18240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:39:16.376 [DEBUG] [Thread-18240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:39:16.376 [DEBUG] [Thread-18240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:39:16.376 [DEBUG] [Thread-18240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:39:16.376 [DEBUG] [Thread-18240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:39:16.376 [DEBUG] [Thread-18240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:39:16.376 [DEBUG] [Thread-18240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:39:16.376 [DEBUG] [Thread-18240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:39:16.377 [DEBUG] [Thread-18240] [transport.py] [_log()] client lang: <none>
2026-04-15T11:39:16.377 [DEBUG] [Thread-18240] [transport.py] [_log()] server lang: <none>
2026-04-15T11:39:16.377 [DEBUG] [Thread-18240] [transport.py] [_log()] kex follows: False
2026-04-15T11:39:16.377 [DEBUG] [Thread-18240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:39:16.377 [DEBUG] [Thread-18240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:39:16.377 [DEBUG] [Thread-18240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:39:16.377 [DEBUG] [Thread-18240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:39:16.377 [DEBUG] [Thread-18240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:39:16.377 [DEBUG] [Thread-18240] [transport.py] [_log()] Compression: none
2026-04-15T11:39:16.377 [DEBUG] [Thread-18240] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:39:16.432 [DEBUG] [Thread-18240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:39:16.433 [DEBUG] [Thread-18240] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:39:16.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:39:16.433 [DEBUG] [Thread-18240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:39:16.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:39:16.489 [DEBUG] [Thread-18240] [transport.py] [_log()] userauth is OK
2026-04-15T11:39:16.490 [DEBUG] [Thread-18240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:39:16.490 [DEBUG] [Thread-18240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:39:16.490 [DEBUG] [Thread-18240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:39:16.490 [DEBUG] [Thread-18240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:39:16.515 [INFO] [Thread-18240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:39:16.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:39:16.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:39:17.336 [DEBUG] [Thread-18240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:39:17.336 [DEBUG] [Thread-18240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:39:17.384 [DEBUG] [Thread-18240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:39:17.384 [DEBUG] [Thread-18240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:39:17.393 [DEBUG] [Thread-18240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:39:17.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:39:17.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')
2026-04-15T11:39:17.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
2026-04-15T11:39:17.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:39:17.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:39:17.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:39:17.427 [DEBUG] [Thread-18240] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:39:30.637 [DEBUG] [Thread-18242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:39:39.521 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:39:39.522 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:39:45.681 [DEBUG] [Thread-18243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:39:47.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:39:47.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:39:47.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
2026-04-15T11:39:48.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 39, 38), 4.49977, 74.0146, 0.0, 22.3006, 12.7068, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:39:48.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:39:38
2026-04-15T11:39:49.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:39:49.508 [DEBUG] [Thread-18244] [transport.py] [_log()] starting thread (client mode): 0xf13fe410
2026-04-15T11:39:49.508 [DEBUG] [Thread-18244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:39:49.521 [DEBUG] [Thread-18244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:39:49.521 [INFO] [Thread-18244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:39:49.523 [DEBUG] [Thread-18244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:39:49.523 [DEBUG] [Thread-18244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:39:49.523 [DEBUG] [Thread-18244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:39:49.523 [DEBUG] [Thread-18244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:39:49.523 [DEBUG] [Thread-18244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:39:49.523 [DEBUG] [Thread-18244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:39:49.524 [DEBUG] [Thread-18244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:39:49.524 [DEBUG] [Thread-18244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:39:49.524 [DEBUG] [Thread-18244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:39:49.524 [DEBUG] [Thread-18244] [transport.py] [_log()] client lang: <none>
2026-04-15T11:39:49.524 [DEBUG] [Thread-18244] [transport.py] [_log()] server lang: <none>
2026-04-15T11:39:49.524 [DEBUG] [Thread-18244] [transport.py] [_log()] kex follows: False
2026-04-15T11:39:49.524 [DEBUG] [Thread-18244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:39:49.524 [DEBUG] [Thread-18244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:39:49.524 [DEBUG] [Thread-18244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:39:49.524 [DEBUG] [Thread-18244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:39:49.524 [DEBUG] [Thread-18244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:39:49.525 [DEBUG] [Thread-18244] [transport.py] [_log()] Compression: none
2026-04-15T11:39:49.525 [DEBUG] [Thread-18244] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:39:49.536 [DEBUG] [Thread-18244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:39:49.536 [DEBUG] [Thread-18244] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:39:49.536 [DEBUG] [Thread-18244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:39:49.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:39:49.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:39:49.538 [DEBUG] [Thread-18244] [transport.py] [_log()] userauth is OK
2026-04-15T11:39:49.538 [DEBUG] [Thread-18244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:39:49.538 [DEBUG] [Thread-18244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:39:49.538 [DEBUG] [Thread-18244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:39:49.538 [DEBUG] [Thread-18244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:39:49.553 [INFO] [Thread-18244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:39:49.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:39:50.181 [DEBUG] [Thread-18244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:39:50.181 [DEBUG] [Thread-18244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:39:50.182 [DEBUG] [Thread-18244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:39:50.222 [DEBUG] [Thread-18244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:39:50.222 [DEBUG] [Thread-18244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:39:50.225 [DEBUG] [Thread-18244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:39:50.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:39:50.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:39:50.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:39:50.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:39:50.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:39:50.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:39:50.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:39:50.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:39:50.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:39:50.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.402558 -999.00  +11.70  17.72     80   +8.40 1 3 1 2 1   888    0 3.82 25.99 ----- 13.4 17.7 291.2 22.0 17.1 -9.0 16.4 -8.2 15.8 -8.7 16.5 -9.2
2026-04-15T11:39:50.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:39:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:39:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.402558
2026-04-15T11:39:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:39:50.250 [DEBUG] [Thread-18244] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:39:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:39:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:39:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:39:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:39:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:39:38', tmtdew=4.49977, humidity=74.0146, cloud=0.0, wind=22.3006, temperature=12.7068, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:39:41.011', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:39:50.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:39:50.503 [DEBUG] [Thread-18247] [transport.py] [_log()] starting thread (client mode): 0xee906140
2026-04-15T11:39:50.503 [DEBUG] [Thread-18247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:39:50.519 [DEBUG] [Thread-18247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:39:50.519 [INFO] [Thread-18247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:39:50.526 [DEBUG] [Thread-18247] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:39:50.526 [DEBUG] [Thread-18247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:39:50.526 [DEBUG] [Thread-18247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:39:50.527 [DEBUG] [Thread-18247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:39:50.527 [DEBUG] [Thread-18247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:39:50.527 [DEBUG] [Thread-18247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:39:50.527 [DEBUG] [Thread-18247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:39:50.527 [DEBUG] [Thread-18247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:39:50.527 [DEBUG] [Thread-18247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:39:50.527 [DEBUG] [Thread-18247] [transport.py] [_log()] client lang: <none>
2026-04-15T11:39:50.527 [DEBUG] [Thread-18247] [transport.py] [_log()] server lang: <none>
2026-04-15T11:39:50.527 [DEBUG] [Thread-18247] [transport.py] [_log()] kex follows: False
2026-04-15T11:39:50.527 [DEBUG] [Thread-18247] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:39:50.527 [DEBUG] [Thread-18247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:39:50.528 [DEBUG] [Thread-18247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:39:50.528 [DEBUG] [Thread-18247] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:39:50.528 [DEBUG] [Thread-18247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:39:50.528 [DEBUG] [Thread-18247] [transport.py] [_log()] Compression: none
2026-04-15T11:39:50.528 [DEBUG] [Thread-18247] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:39:50.588 [DEBUG] [Thread-18247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:39:50.588 [DEBUG] [Thread-18247] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:39:50.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:39:50.589 [DEBUG] [Thread-18247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:39:50.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:39:50.645 [DEBUG] [Thread-18247] [transport.py] [_log()] userauth is OK
2026-04-15T11:39:50.645 [DEBUG] [Thread-18247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:39:50.646 [DEBUG] [Thread-18247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:39:50.646 [DEBUG] [Thread-18247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:39:50.646 [DEBUG] [Thread-18247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:39:50.671 [INFO] [Thread-18247] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:39:50.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:39:50.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:39:51.492 [DEBUG] [Thread-18247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:39:51.492 [DEBUG] [Thread-18247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:39:51.540 [DEBUG] [Thread-18247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:39:51.540 [DEBUG] [Thread-18247] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:39:51.549 [DEBUG] [Thread-18247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:39:51.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:39:51.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')
2026-04-15T11:39:51.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
2026-04-15T11:39:51.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:39:51.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:39:51.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:39:51.584 [DEBUG] [Thread-18247] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:40:00.713 [DEBUG] [Thread-18249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:40:10.247 [DEBUG] [Thread-18250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:40:15.759 [DEBUG] [Thread-18251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:40:21.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:40:21.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:40:21.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
2026-04-15T11:40:22.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 40, 13), 4.36966, 74.6259, 0.0, 14.751, 11.821, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:40:22.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:40:13
2026-04-15T11:40:23.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:40:23.721 [DEBUG] [Thread-18252] [transport.py] [_log()] starting thread (client mode): 0xf13c8fa0
2026-04-15T11:40:23.721 [DEBUG] [Thread-18252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:40:23.740 [DEBUG] [Thread-18252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:40:23.740 [INFO] [Thread-18252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:40:23.743 [DEBUG] [Thread-18252] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:40:23.743 [DEBUG] [Thread-18252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:40:23.744 [DEBUG] [Thread-18252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:40:23.744 [DEBUG] [Thread-18252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:40:23.744 [DEBUG] [Thread-18252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:40:23.744 [DEBUG] [Thread-18252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:40:23.744 [DEBUG] [Thread-18252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:40:23.744 [DEBUG] [Thread-18252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:40:23.744 [DEBUG] [Thread-18252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:40:23.744 [DEBUG] [Thread-18252] [transport.py] [_log()] client lang: <none>
2026-04-15T11:40:23.744 [DEBUG] [Thread-18252] [transport.py] [_log()] server lang: <none>
2026-04-15T11:40:23.744 [DEBUG] [Thread-18252] [transport.py] [_log()] kex follows: False
2026-04-15T11:40:23.744 [DEBUG] [Thread-18252] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:40:23.744 [DEBUG] [Thread-18252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:40:23.745 [DEBUG] [Thread-18252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:40:23.745 [DEBUG] [Thread-18252] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:40:23.745 [DEBUG] [Thread-18252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:40:23.745 [DEBUG] [Thread-18252] [transport.py] [_log()] Compression: none
2026-04-15T11:40:23.745 [DEBUG] [Thread-18252] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:40:23.760 [DEBUG] [Thread-18252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:40:23.760 [DEBUG] [Thread-18252] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:40:23.761 [DEBUG] [Thread-18252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:40:23.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:40:23.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:40:23.762 [DEBUG] [Thread-18252] [transport.py] [_log()] userauth is OK
2026-04-15T11:40:23.762 [DEBUG] [Thread-18252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:40:23.762 [DEBUG] [Thread-18252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:40:23.762 [DEBUG] [Thread-18252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:40:23.762 [DEBUG] [Thread-18252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:40:23.786 [INFO] [Thread-18252] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:40:23.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:40:24.416 [DEBUG] [Thread-18252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:40:24.416 [DEBUG] [Thread-18252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:40:24.417 [DEBUG] [Thread-18252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:40:24.457 [DEBUG] [Thread-18252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:40:24.457 [DEBUG] [Thread-18252] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:40:24.460 [DEBUG] [Thread-18252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:40:24.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:40:24.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:40:24.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:40:24.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:40:24.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:40:24.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:40:24.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:40:24.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:40:24.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:40:24.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.402905 -999.00  +11.70  16.97     80   +8.50 1 3 1 2 1   888    0 3.74 25.16 ----- 17.0 17.0 318.2 20.1 17.1 -9.4 16.4 -9.1 15.8 -9.6 16.5 -9.8
2026-04-15T11:40:24.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:40:24.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:40:24.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.402905
2026-04-15T11:40:24.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:40:24.483 [DEBUG] [Thread-18252] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:40:24.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:40:24.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:40:24.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:40:24.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:40:24.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:40:13', tmtdew=4.36966, humidity=74.6259, cloud=0.0, wind=14.751, temperature=11.821, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:40:10.992', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:40:24.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:40:24.737 [DEBUG] [Thread-18255] [transport.py] [_log()] starting thread (client mode): 0xee98ac20
2026-04-15T11:40:24.737 [DEBUG] [Thread-18255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:40:24.752 [DEBUG] [Thread-18255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:40:24.752 [INFO] [Thread-18255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:40:24.760 [DEBUG] [Thread-18255] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:40:24.760 [DEBUG] [Thread-18255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:40:24.760 [DEBUG] [Thread-18255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:40:24.760 [DEBUG] [Thread-18255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:40:24.760 [DEBUG] [Thread-18255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:40:24.760 [DEBUG] [Thread-18255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:40:24.760 [DEBUG] [Thread-18255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:40:24.760 [DEBUG] [Thread-18255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:40:24.760 [DEBUG] [Thread-18255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:40:24.760 [DEBUG] [Thread-18255] [transport.py] [_log()] client lang: <none>
2026-04-15T11:40:24.761 [DEBUG] [Thread-18255] [transport.py] [_log()] server lang: <none>
2026-04-15T11:40:24.761 [DEBUG] [Thread-18255] [transport.py] [_log()] kex follows: False
2026-04-15T11:40:24.761 [DEBUG] [Thread-18255] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:40:24.761 [DEBUG] [Thread-18255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:40:24.761 [DEBUG] [Thread-18255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:40:24.761 [DEBUG] [Thread-18255] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:40:24.761 [DEBUG] [Thread-18255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:40:24.761 [DEBUG] [Thread-18255] [transport.py] [_log()] Compression: none
2026-04-15T11:40:24.761 [DEBUG] [Thread-18255] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:40:24.816 [DEBUG] [Thread-18255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:40:24.816 [DEBUG] [Thread-18255] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:40:24.817 [DEBUG] [Thread-18255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:40:24.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:40:24.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:40:24.876 [DEBUG] [Thread-18255] [transport.py] [_log()] userauth is OK
2026-04-15T11:40:24.876 [DEBUG] [Thread-18255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:40:24.877 [DEBUG] [Thread-18255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:40:24.877 [DEBUG] [Thread-18255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:40:24.877 [DEBUG] [Thread-18255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:40:24.902 [INFO] [Thread-18255] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:40:24.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:40:24.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:40:25.731 [DEBUG] [Thread-18255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:40:25.731 [DEBUG] [Thread-18255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:40:25.779 [DEBUG] [Thread-18255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:40:25.779 [DEBUG] [Thread-18255] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:40:25.788 [DEBUG] [Thread-18255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:40:25.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:40:25.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')
2026-04-15T11:40:25.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
2026-04-15T11:40:25.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:40:25.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:40:25.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:40:25.823 [DEBUG] [Thread-18255] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:40:30.790 [DEBUG] [Thread-18257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:40:39.662 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:40:39.663 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:40:45.831 [DEBUG] [Thread-18258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:40:55.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:40:55.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:40:55.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
2026-04-15T11:40:57.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 40, 49), 4.61826, 73.3513, 0.0, 20.8541, 12.3089, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:40:57.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:40:49
2026-04-15T11:40:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:40:57.960 [DEBUG] [Thread-18259] [transport.py] [_log()] starting thread (client mode): 0xf13c8b20
2026-04-15T11:40:57.961 [DEBUG] [Thread-18259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:40:57.981 [DEBUG] [Thread-18259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:40:57.981 [INFO] [Thread-18259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:40:57.984 [DEBUG] [Thread-18259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:40:57.984 [DEBUG] [Thread-18259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:40:57.984 [DEBUG] [Thread-18259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:40:57.984 [DEBUG] [Thread-18259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:40:57.985 [DEBUG] [Thread-18259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:40:57.985 [DEBUG] [Thread-18259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:40:57.985 [DEBUG] [Thread-18259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:40:57.985 [DEBUG] [Thread-18259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:40:57.985 [DEBUG] [Thread-18259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:40:57.985 [DEBUG] [Thread-18259] [transport.py] [_log()] client lang: <none>
2026-04-15T11:40:57.985 [DEBUG] [Thread-18259] [transport.py] [_log()] server lang: <none>
2026-04-15T11:40:57.985 [DEBUG] [Thread-18259] [transport.py] [_log()] kex follows: False
2026-04-15T11:40:57.985 [DEBUG] [Thread-18259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:40:57.985 [DEBUG] [Thread-18259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:40:57.985 [DEBUG] [Thread-18259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:40:57.985 [DEBUG] [Thread-18259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:40:57.985 [DEBUG] [Thread-18259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:40:57.986 [DEBUG] [Thread-18259] [transport.py] [_log()] Compression: none
2026-04-15T11:40:57.986 [DEBUG] [Thread-18259] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:40:57.994 [DEBUG] [Thread-18259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:40:57.994 [DEBUG] [Thread-18259] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:40:57.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:40:57.995 [DEBUG] [Thread-18259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:40:57.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:40:57.996 [DEBUG] [Thread-18259] [transport.py] [_log()] userauth is OK
2026-04-15T11:40:57.996 [DEBUG] [Thread-18259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:40:57.996 [DEBUG] [Thread-18259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:40:57.996 [DEBUG] [Thread-18259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:40:57.996 [DEBUG] [Thread-18259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:40:58.019 [INFO] [Thread-18259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:40:58.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:40:58.784 [DEBUG] [Thread-18259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:40:58.784 [DEBUG] [Thread-18259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:40:58.785 [DEBUG] [Thread-18259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:40:58.825 [DEBUG] [Thread-18259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:40:58.825 [DEBUG] [Thread-18259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:40:58.828 [DEBUG] [Thread-18259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:40:58.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:40:58.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:40:58.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:40:58.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:40:58.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:40:58.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:40:58.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:40:58.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:40:58.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:40:58.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.402905 -999.00  +11.70  16.97     80   +8.50 1 3 1 2 1   888    0 3.74 25.16 ----- 17.0 17.0 318.2 20.1 17.1 -9.4 16.4 -9.1 15.8 -9.6 16.5 -9.8
2026-04-15T11:40:58.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:40:58.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:40:58.850 [DEBUG] [Thread-18259] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:40:58.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.402905
2026-04-15T11:40:58.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:40:58.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:40:58.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:40:58.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:40:58.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:40:58.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:40:49', tmtdew=4.61826, humidity=73.3513, cloud=0.0, wind=20.8541, temperature=12.3089, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:40:10.992', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:40:59.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:40:59.105 [DEBUG] [Thread-18262] [transport.py] [_log()] starting thread (client mode): 0xee988cd0
2026-04-15T11:40:59.106 [DEBUG] [Thread-18262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:40:59.120 [DEBUG] [Thread-18262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:40:59.120 [INFO] [Thread-18262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:40:59.127 [DEBUG] [Thread-18262] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:40:59.127 [DEBUG] [Thread-18262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:40:59.128 [DEBUG] [Thread-18262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:40:59.128 [DEBUG] [Thread-18262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:40:59.128 [DEBUG] [Thread-18262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:40:59.128 [DEBUG] [Thread-18262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:40:59.128 [DEBUG] [Thread-18262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:40:59.128 [DEBUG] [Thread-18262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:40:59.128 [DEBUG] [Thread-18262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:40:59.128 [DEBUG] [Thread-18262] [transport.py] [_log()] client lang: <none>
2026-04-15T11:40:59.128 [DEBUG] [Thread-18262] [transport.py] [_log()] server lang: <none>
2026-04-15T11:40:59.128 [DEBUG] [Thread-18262] [transport.py] [_log()] kex follows: False
2026-04-15T11:40:59.128 [DEBUG] [Thread-18262] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:40:59.129 [DEBUG] [Thread-18262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:40:59.129 [DEBUG] [Thread-18262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:40:59.129 [DEBUG] [Thread-18262] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:40:59.129 [DEBUG] [Thread-18262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:40:59.129 [DEBUG] [Thread-18262] [transport.py] [_log()] Compression: none
2026-04-15T11:40:59.129 [DEBUG] [Thread-18262] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:40:59.183 [DEBUG] [Thread-18262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:40:59.183 [DEBUG] [Thread-18262] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:40:59.184 [DEBUG] [Thread-18262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:40:59.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:40:59.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:40:59.242 [DEBUG] [Thread-18262] [transport.py] [_log()] userauth is OK
2026-04-15T11:40:59.243 [DEBUG] [Thread-18262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:40:59.243 [DEBUG] [Thread-18262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:40:59.243 [DEBUG] [Thread-18262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:40:59.243 [DEBUG] [Thread-18262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:40:59.268 [INFO] [Thread-18262] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:40:59.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:40:59.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:41:00.080 [DEBUG] [Thread-18262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:41:00.080 [DEBUG] [Thread-18262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:41:00.127 [DEBUG] [Thread-18262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:41:00.128 [DEBUG] [Thread-18262] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:41:00.136 [DEBUG] [Thread-18262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:41:00.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:41:00.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')
2026-04-15T11:41:00.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
2026-04-15T11:41:00.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:41:00.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:41:00.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:41:00.169 [DEBUG] [Thread-18262] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:41:00.863 [DEBUG] [Thread-18264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:41:10.369 [DEBUG] [Thread-18265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:41:15.909 [DEBUG] [Thread-18266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:41:30.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:41:30.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:41:30.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:41:30.938 [DEBUG] [Thread-18267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:41:31.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 41, 24), 4.28606, 74.5265, 0.0, 17.0266, 11.7215, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:41:31.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:41:24
2026-04-15T11:41:31.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:41:32.289 [DEBUG] [Thread-18268] [transport.py] [_log()] starting thread (client mode): 0xee98a740
2026-04-15T11:41:32.290 [DEBUG] [Thread-18268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:41:32.310 [DEBUG] [Thread-18268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:41:32.310 [INFO] [Thread-18268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:41:32.312 [DEBUG] [Thread-18268] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:41:32.312 [DEBUG] [Thread-18268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:41:32.312 [DEBUG] [Thread-18268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:41:32.312 [DEBUG] [Thread-18268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:41:32.312 [DEBUG] [Thread-18268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:41:32.312 [DEBUG] [Thread-18268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:41:32.312 [DEBUG] [Thread-18268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:41:32.313 [DEBUG] [Thread-18268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:41:32.313 [DEBUG] [Thread-18268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:41:32.313 [DEBUG] [Thread-18268] [transport.py] [_log()] client lang: <none>
2026-04-15T11:41:32.313 [DEBUG] [Thread-18268] [transport.py] [_log()] server lang: <none>
2026-04-15T11:41:32.313 [DEBUG] [Thread-18268] [transport.py] [_log()] kex follows: False
2026-04-15T11:41:32.313 [DEBUG] [Thread-18268] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:41:32.313 [DEBUG] [Thread-18268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:41:32.313 [DEBUG] [Thread-18268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:41:32.313 [DEBUG] [Thread-18268] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:41:32.313 [DEBUG] [Thread-18268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:41:32.313 [DEBUG] [Thread-18268] [transport.py] [_log()] Compression: none
2026-04-15T11:41:32.314 [DEBUG] [Thread-18268] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:41:32.322 [DEBUG] [Thread-18268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:41:32.323 [DEBUG] [Thread-18268] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:41:32.323 [DEBUG] [Thread-18268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:41:32.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:41:32.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:41:32.324 [DEBUG] [Thread-18268] [transport.py] [_log()] userauth is OK
2026-04-15T11:41:32.324 [DEBUG] [Thread-18268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:41:32.324 [DEBUG] [Thread-18268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:41:32.324 [DEBUG] [Thread-18268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:41:32.325 [DEBUG] [Thread-18268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:41:32.341 [INFO] [Thread-18268] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:41:32.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:41:32.974 [DEBUG] [Thread-18268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:41:32.975 [DEBUG] [Thread-18268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:41:32.975 [DEBUG] [Thread-18268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:41:33.016 [DEBUG] [Thread-18268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:41:33.016 [DEBUG] [Thread-18268] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:41:33.018 [DEBUG] [Thread-18268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:41:33.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:41:33.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:41:33.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:41:33.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:41:33.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:41:33.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:41:33.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:41:33.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:41:33.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:41:33.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.403600 -999.00  +11.60  14.70     79   +8.20 1 3 1 1 1   888    0 3.71 22.57 ----- 16.8 14.7 325.8 26.4 17.0 -11.5 16.4 -10.1 15.8 -9.8 16.4 -11.4
2026-04-15T11:41:33.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:41:33.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:41:33.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.403600
2026-04-15T11:41:33.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:41:33.044 [DEBUG] [Thread-18268] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:41:33.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:41:33.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:41:33.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:41:33.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:41:33.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:41:24', tmtdew=4.28606, humidity=74.5265, cloud=0.0, wind=17.0266, temperature=11.7215, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:41:11.040', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:41:33.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:41:33.298 [DEBUG] [Thread-18271] [transport.py] [_log()] starting thread (client mode): 0xee98e4a0
2026-04-15T11:41:33.298 [DEBUG] [Thread-18271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:41:33.315 [DEBUG] [Thread-18271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:41:33.315 [INFO] [Thread-18271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:41:33.323 [DEBUG] [Thread-18271] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:41:33.323 [DEBUG] [Thread-18271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:41:33.323 [DEBUG] [Thread-18271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:41:33.323 [DEBUG] [Thread-18271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:41:33.323 [DEBUG] [Thread-18271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:41:33.323 [DEBUG] [Thread-18271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:41:33.323 [DEBUG] [Thread-18271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:41:33.323 [DEBUG] [Thread-18271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:41:33.323 [DEBUG] [Thread-18271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:41:33.323 [DEBUG] [Thread-18271] [transport.py] [_log()] client lang: <none>
2026-04-15T11:41:33.323 [DEBUG] [Thread-18271] [transport.py] [_log()] server lang: <none>
2026-04-15T11:41:33.324 [DEBUG] [Thread-18271] [transport.py] [_log()] kex follows: False
2026-04-15T11:41:33.324 [DEBUG] [Thread-18271] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:41:33.324 [DEBUG] [Thread-18271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:41:33.324 [DEBUG] [Thread-18271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:41:33.324 [DEBUG] [Thread-18271] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:41:33.324 [DEBUG] [Thread-18271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:41:33.324 [DEBUG] [Thread-18271] [transport.py] [_log()] Compression: none
2026-04-15T11:41:33.324 [DEBUG] [Thread-18271] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:41:33.382 [DEBUG] [Thread-18271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:41:33.383 [DEBUG] [Thread-18271] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:41:33.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:41:33.383 [DEBUG] [Thread-18271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:41:33.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:41:33.439 [DEBUG] [Thread-18271] [transport.py] [_log()] userauth is OK
2026-04-15T11:41:33.439 [DEBUG] [Thread-18271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:41:33.440 [DEBUG] [Thread-18271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:41:33.440 [DEBUG] [Thread-18271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:41:33.440 [DEBUG] [Thread-18271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:41:33.469 [INFO] [Thread-18271] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:41:33.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:41:33.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:41:34.314 [DEBUG] [Thread-18271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:41:34.314 [DEBUG] [Thread-18271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:41:34.362 [DEBUG] [Thread-18271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:41:34.363 [DEBUG] [Thread-18271] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:41:34.371 [DEBUG] [Thread-18271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:41:34.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:41:34.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')
2026-04-15T11:41:34.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') -> 00000000
2026-04-15T11:41:34.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:41:34.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:41:34.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:41:34.402 [DEBUG] [Thread-18271] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:41:39.804 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:41:39.805 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:41:45.970 [DEBUG] [Thread-18273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:42:01.017 [DEBUG] [Thread-18274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:42:04.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:42:04.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:42:04.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
2026-04-15T11:42:05.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 41, 24), 4.28606, 74.5265, 0.0, 17.0266, 11.7215, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:42:05.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:41:24
2026-04-15T11:42:06.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:42:06.551 [DEBUG] [Thread-18275] [transport.py] [_log()] starting thread (client mode): 0xee98eb90
2026-04-15T11:42:06.551 [DEBUG] [Thread-18275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:42:06.570 [DEBUG] [Thread-18275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:42:06.570 [INFO] [Thread-18275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:42:06.571 [DEBUG] [Thread-18275] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:42:06.572 [DEBUG] [Thread-18275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:42:06.572 [DEBUG] [Thread-18275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:42:06.572 [DEBUG] [Thread-18275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:42:06.572 [DEBUG] [Thread-18275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:42:06.572 [DEBUG] [Thread-18275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:42:06.572 [DEBUG] [Thread-18275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:42:06.572 [DEBUG] [Thread-18275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:42:06.572 [DEBUG] [Thread-18275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:42:06.572 [DEBUG] [Thread-18275] [transport.py] [_log()] client lang: <none>
2026-04-15T11:42:06.572 [DEBUG] [Thread-18275] [transport.py] [_log()] server lang: <none>
2026-04-15T11:42:06.572 [DEBUG] [Thread-18275] [transport.py] [_log()] kex follows: False
2026-04-15T11:42:06.572 [DEBUG] [Thread-18275] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:42:06.572 [DEBUG] [Thread-18275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:42:06.572 [DEBUG] [Thread-18275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:42:06.573 [DEBUG] [Thread-18275] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:42:06.573 [DEBUG] [Thread-18275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:42:06.573 [DEBUG] [Thread-18275] [transport.py] [_log()] Compression: none
2026-04-15T11:42:06.573 [DEBUG] [Thread-18275] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:42:06.581 [DEBUG] [Thread-18275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:42:06.581 [DEBUG] [Thread-18275] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:42:06.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:42:06.581 [DEBUG] [Thread-18275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:42:06.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:42:06.583 [DEBUG] [Thread-18275] [transport.py] [_log()] userauth is OK
2026-04-15T11:42:06.583 [DEBUG] [Thread-18275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:42:06.583 [DEBUG] [Thread-18275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:42:06.583 [DEBUG] [Thread-18275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:42:06.583 [DEBUG] [Thread-18275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:42:06.596 [INFO] [Thread-18275] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:42:06.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:42:07.221 [DEBUG] [Thread-18275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:42:07.222 [DEBUG] [Thread-18275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:42:07.222 [DEBUG] [Thread-18275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:42:07.263 [DEBUG] [Thread-18275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:42:07.263 [DEBUG] [Thread-18275] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:42:07.266 [DEBUG] [Thread-18275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:42:07.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:42:07.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:42:07.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:42:07.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:42:07.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:42:07.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:42:07.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:42:07.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:42:07.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:42:07.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.403947 -999.00  +11.70  14.81     78   +8.00 1 2 1 1 1   888    0 3.71 22.71 ----- 21.0 14.8 329.6 21.5 17.1 -11.5 16.4 -11.0 15.9 -10.0 16.5 -11.1
2026-04-15T11:42:07.289 [DEBUG] [Thread-18275] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:42:07.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:42:07.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:42:07.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.403947
2026-04-15T11:42:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:42:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:42:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:42:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:42:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:42:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:41:24', tmtdew=4.28606, humidity=74.5265, cloud=0.0, wind=17.0266, temperature=11.7215, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:41:41.021', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:42:07.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:42:07.548 [DEBUG] [Thread-18278] [transport.py] [_log()] starting thread (client mode): 0xee988f40
2026-04-15T11:42:07.548 [DEBUG] [Thread-18278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:42:07.563 [DEBUG] [Thread-18278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:42:07.563 [INFO] [Thread-18278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:42:07.573 [DEBUG] [Thread-18278] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:42:07.573 [DEBUG] [Thread-18278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:42:07.573 [DEBUG] [Thread-18278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:42:07.573 [DEBUG] [Thread-18278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:42:07.573 [DEBUG] [Thread-18278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:42:07.573 [DEBUG] [Thread-18278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:42:07.574 [DEBUG] [Thread-18278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:42:07.574 [DEBUG] [Thread-18278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:42:07.574 [DEBUG] [Thread-18278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:42:07.574 [DEBUG] [Thread-18278] [transport.py] [_log()] client lang: <none>
2026-04-15T11:42:07.574 [DEBUG] [Thread-18278] [transport.py] [_log()] server lang: <none>
2026-04-15T11:42:07.574 [DEBUG] [Thread-18278] [transport.py] [_log()] kex follows: False
2026-04-15T11:42:07.574 [DEBUG] [Thread-18278] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:42:07.574 [DEBUG] [Thread-18278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:42:07.574 [DEBUG] [Thread-18278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:42:07.574 [DEBUG] [Thread-18278] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:42:07.574 [DEBUG] [Thread-18278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:42:07.575 [DEBUG] [Thread-18278] [transport.py] [_log()] Compression: none
2026-04-15T11:42:07.575 [DEBUG] [Thread-18278] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:42:07.629 [DEBUG] [Thread-18278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:42:07.630 [DEBUG] [Thread-18278] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:42:07.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:42:07.630 [DEBUG] [Thread-18278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:42:07.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:42:07.686 [DEBUG] [Thread-18278] [transport.py] [_log()] userauth is OK
2026-04-15T11:42:07.687 [DEBUG] [Thread-18278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:42:07.687 [DEBUG] [Thread-18278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:42:07.687 [DEBUG] [Thread-18278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:42:07.687 [DEBUG] [Thread-18278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:42:07.705 [INFO] [Thread-18278] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:42:07.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:42:07.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:42:08.536 [DEBUG] [Thread-18278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:42:08.536 [DEBUG] [Thread-18278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:42:08.584 [DEBUG] [Thread-18278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:42:08.584 [DEBUG] [Thread-18278] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:42:08.593 [DEBUG] [Thread-18278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:42:08.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:42:08.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')
2026-04-15T11:42:08.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
2026-04-15T11:42:08.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:42:08.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:42:08.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:42:08.628 [DEBUG] [Thread-18278] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:42:10.484 [DEBUG] [Thread-18280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:42:16.050 [DEBUG] [Thread-18281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:42:31.094 [DEBUG] [Thread-18282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:42:38.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:42:38.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:42:38.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
2026-04-15T11:42:39.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 41, 24), 4.28606, 74.5265, 0.0, 17.0266, 11.7215, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:42:39.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:41:24
2026-04-15T11:42:39.943 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:42:39.944 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:42:40.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:42:40.725 [DEBUG] [Thread-18283] [transport.py] [_log()] starting thread (client mode): 0xee988c10
2026-04-15T11:42:40.726 [DEBUG] [Thread-18283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:42:40.743 [DEBUG] [Thread-18283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:42:40.743 [INFO] [Thread-18283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:42:40.745 [DEBUG] [Thread-18283] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:42:40.745 [DEBUG] [Thread-18283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:42:40.745 [DEBUG] [Thread-18283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:42:40.745 [DEBUG] [Thread-18283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:42:40.745 [DEBUG] [Thread-18283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:42:40.745 [DEBUG] [Thread-18283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:42:40.745 [DEBUG] [Thread-18283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:42:40.745 [DEBUG] [Thread-18283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:42:40.745 [DEBUG] [Thread-18283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:42:40.746 [DEBUG] [Thread-18283] [transport.py] [_log()] client lang: <none>
2026-04-15T11:42:40.746 [DEBUG] [Thread-18283] [transport.py] [_log()] server lang: <none>
2026-04-15T11:42:40.746 [DEBUG] [Thread-18283] [transport.py] [_log()] kex follows: False
2026-04-15T11:42:40.746 [DEBUG] [Thread-18283] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:42:40.746 [DEBUG] [Thread-18283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:42:40.746 [DEBUG] [Thread-18283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:42:40.746 [DEBUG] [Thread-18283] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:42:40.746 [DEBUG] [Thread-18283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:42:40.746 [DEBUG] [Thread-18283] [transport.py] [_log()] Compression: none
2026-04-15T11:42:40.746 [DEBUG] [Thread-18283] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:42:40.760 [DEBUG] [Thread-18283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:42:40.761 [DEBUG] [Thread-18283] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:42:40.761 [DEBUG] [Thread-18283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:42:40.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:42:40.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:42:40.762 [DEBUG] [Thread-18283] [transport.py] [_log()] userauth is OK
2026-04-15T11:42:40.762 [DEBUG] [Thread-18283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:42:40.763 [DEBUG] [Thread-18283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:42:40.763 [DEBUG] [Thread-18283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:42:40.763 [DEBUG] [Thread-18283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:42:40.779 [INFO] [Thread-18283] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:42:40.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:42:41.330 [DEBUG] [Thread-18283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:42:41.331 [DEBUG] [Thread-18283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:42:41.331 [DEBUG] [Thread-18283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:42:41.371 [DEBUG] [Thread-18283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:42:41.371 [DEBUG] [Thread-18283] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:42:41.373 [DEBUG] [Thread-18283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:42:41.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:42:41.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:42:41.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:42:41.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:42:41.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:42:41.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:42:41.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:42:41.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:42:41.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:42:41.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.404294 -999.00  +11.70  14.92     78   +8.20 1 2 1 1 1   888    0 3.88 27.34 ----- 16.6 14.9 317.4 24.2 17.2 -12.3 16.6 -10.5 15.9 -10.8 16.6 -11.6
2026-04-15T11:42:41.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:42:41.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:42:41.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.404294
2026-04-15T11:42:41.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:42:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:42:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:42:41.393 [DEBUG] [Thread-18283] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:42:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:42:41.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:42:41.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:41:24', tmtdew=4.28606, humidity=74.5265, cloud=0.0, wind=17.0266, temperature=11.7215, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:42:11.002', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:42:41.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:42:41.651 [DEBUG] [Thread-18286] [transport.py] [_log()] starting thread (client mode): 0xf13eec80
2026-04-15T11:42:41.651 [DEBUG] [Thread-18286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:42:41.665 [DEBUG] [Thread-18286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:42:41.665 [INFO] [Thread-18286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:42:41.672 [DEBUG] [Thread-18286] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:42:41.672 [DEBUG] [Thread-18286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:42:41.673 [DEBUG] [Thread-18286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:42:41.673 [DEBUG] [Thread-18286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:42:41.673 [DEBUG] [Thread-18286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:42:41.673 [DEBUG] [Thread-18286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:42:41.673 [DEBUG] [Thread-18286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:42:41.673 [DEBUG] [Thread-18286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:42:41.673 [DEBUG] [Thread-18286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:42:41.673 [DEBUG] [Thread-18286] [transport.py] [_log()] client lang: <none>
2026-04-15T11:42:41.673 [DEBUG] [Thread-18286] [transport.py] [_log()] server lang: <none>
2026-04-15T11:42:41.673 [DEBUG] [Thread-18286] [transport.py] [_log()] kex follows: False
2026-04-15T11:42:41.673 [DEBUG] [Thread-18286] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:42:41.673 [DEBUG] [Thread-18286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:42:41.674 [DEBUG] [Thread-18286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:42:41.674 [DEBUG] [Thread-18286] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:42:41.674 [DEBUG] [Thread-18286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:42:41.674 [DEBUG] [Thread-18286] [transport.py] [_log()] Compression: none
2026-04-15T11:42:41.674 [DEBUG] [Thread-18286] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:42:41.729 [DEBUG] [Thread-18286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:42:41.729 [DEBUG] [Thread-18286] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:42:41.730 [DEBUG] [Thread-18286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:42:41.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:42:41.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:42:41.786 [DEBUG] [Thread-18286] [transport.py] [_log()] userauth is OK
2026-04-15T11:42:41.786 [DEBUG] [Thread-18286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:42:41.786 [DEBUG] [Thread-18286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:42:41.786 [DEBUG] [Thread-18286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:42:41.787 [DEBUG] [Thread-18286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:42:41.812 [INFO] [Thread-18286] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:42:41.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:42:41.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:42:42.625 [DEBUG] [Thread-18286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:42:42.625 [DEBUG] [Thread-18286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:42:42.673 [DEBUG] [Thread-18286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:42:42.673 [DEBUG] [Thread-18286] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:42:42.682 [DEBUG] [Thread-18286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:42:42.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:42:42.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')
2026-04-15T11:42:42.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') -> 00000000
2026-04-15T11:42:42.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:42:42.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:42:42.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:42:42.717 [DEBUG] [Thread-18286] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:42:46.127 [DEBUG] [Thread-18288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:43:01.172 [DEBUG] [Thread-18289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:43:10.608 [DEBUG] [Thread-18290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:43:12.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:43:12.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:43:12.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
2026-04-15T11:43:14.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 42, 35), 4.74789, 72.6875, 0.0, 17.6083, 12.2088, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:43:14.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:42:35
2026-04-15T11:43:14.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:43:15.007 [DEBUG] [Thread-18291] [transport.py] [_log()] starting thread (client mode): 0xf13eeaa0
2026-04-15T11:43:15.008 [DEBUG] [Thread-18291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:43:15.027 [DEBUG] [Thread-18291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:43:15.027 [INFO] [Thread-18291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:43:15.030 [DEBUG] [Thread-18291] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:43:15.030 [DEBUG] [Thread-18291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:43:15.031 [DEBUG] [Thread-18291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:43:15.031 [DEBUG] [Thread-18291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:43:15.031 [DEBUG] [Thread-18291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:43:15.031 [DEBUG] [Thread-18291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:43:15.031 [DEBUG] [Thread-18291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:43:15.031 [DEBUG] [Thread-18291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:43:15.031 [DEBUG] [Thread-18291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:43:15.031 [DEBUG] [Thread-18291] [transport.py] [_log()] client lang: <none>
2026-04-15T11:43:15.031 [DEBUG] [Thread-18291] [transport.py] [_log()] server lang: <none>
2026-04-15T11:43:15.031 [DEBUG] [Thread-18291] [transport.py] [_log()] kex follows: False
2026-04-15T11:43:15.032 [DEBUG] [Thread-18291] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:43:15.032 [DEBUG] [Thread-18291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:43:15.032 [DEBUG] [Thread-18291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:43:15.032 [DEBUG] [Thread-18291] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:43:15.032 [DEBUG] [Thread-18291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:43:15.032 [DEBUG] [Thread-18291] [transport.py] [_log()] Compression: none
2026-04-15T11:43:15.032 [DEBUG] [Thread-18291] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:43:15.048 [DEBUG] [Thread-18291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:43:15.048 [DEBUG] [Thread-18291] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:43:15.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:43:15.049 [DEBUG] [Thread-18291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:43:15.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:43:15.050 [DEBUG] [Thread-18291] [transport.py] [_log()] userauth is OK
2026-04-15T11:43:15.050 [DEBUG] [Thread-18291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:43:15.050 [DEBUG] [Thread-18291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:43:15.050 [DEBUG] [Thread-18291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:43:15.050 [DEBUG] [Thread-18291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:43:15.069 [INFO] [Thread-18291] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:43:15.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:43:15.642 [DEBUG] [Thread-18291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:43:15.642 [DEBUG] [Thread-18291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:43:15.642 [DEBUG] [Thread-18291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:43:15.683 [DEBUG] [Thread-18291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:43:15.683 [DEBUG] [Thread-18291] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:43:15.686 [DEBUG] [Thread-18291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:43:15.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:43:15.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:43:15.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:43:15.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:43:15.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:43:15.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:43:15.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:43:15.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:43:15.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:43:15.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.404989 -999.00  +11.60  23.95     75   +7.50 1 2 1 1 1   888    0 4.00 29.15 ----- 17.3 23.9 325.4 25.6 17.3 -12.8 16.6 -11.9 16.1 -9.5 16.8 -12.0
2026-04-15T11:43:15.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:43:15.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:43:15.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.404989
2026-04-15T11:43:15.707 [DEBUG] [Thread-18291] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:43:15.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:43:15.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:43:15.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:43:15.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:43:15.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:43:15.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:42:35', tmtdew=4.74789, humidity=72.6875, cloud=0.0, wind=17.6083, temperature=12.2088, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:43:11.050', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:43:15.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:43:15.949 [DEBUG] [Thread-18294] [transport.py] [_log()] starting thread (client mode): 0xf13efe50
2026-04-15T11:43:15.950 [DEBUG] [Thread-18294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:43:15.964 [DEBUG] [Thread-18294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:43:15.965 [INFO] [Thread-18294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:43:15.972 [DEBUG] [Thread-18294] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:43:15.972 [DEBUG] [Thread-18294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:43:15.972 [DEBUG] [Thread-18294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:43:15.972 [DEBUG] [Thread-18294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:43:15.972 [DEBUG] [Thread-18294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:43:15.972 [DEBUG] [Thread-18294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:43:15.972 [DEBUG] [Thread-18294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:43:15.972 [DEBUG] [Thread-18294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:43:15.973 [DEBUG] [Thread-18294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:43:15.973 [DEBUG] [Thread-18294] [transport.py] [_log()] client lang: <none>
2026-04-15T11:43:15.973 [DEBUG] [Thread-18294] [transport.py] [_log()] server lang: <none>
2026-04-15T11:43:15.973 [DEBUG] [Thread-18294] [transport.py] [_log()] kex follows: False
2026-04-15T11:43:15.973 [DEBUG] [Thread-18294] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:43:15.973 [DEBUG] [Thread-18294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:43:15.973 [DEBUG] [Thread-18294] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:43:15.973 [DEBUG] [Thread-18294] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:43:15.973 [DEBUG] [Thread-18294] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:43:15.973 [DEBUG] [Thread-18294] [transport.py] [_log()] Compression: none
2026-04-15T11:43:15.973 [DEBUG] [Thread-18294] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:43:16.035 [DEBUG] [Thread-18294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:43:16.035 [DEBUG] [Thread-18294] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:43:16.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:43:16.036 [DEBUG] [Thread-18294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:43:16.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:43:16.094 [DEBUG] [Thread-18294] [transport.py] [_log()] userauth is OK
2026-04-15T11:43:16.094 [DEBUG] [Thread-18294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:43:16.094 [DEBUG] [Thread-18294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:43:16.095 [DEBUG] [Thread-18294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:43:16.095 [DEBUG] [Thread-18294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:43:16.121 [INFO] [Thread-18294] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:43:16.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:43:16.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:43:16.302 [DEBUG] [Thread-18296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:43:16.943 [DEBUG] [Thread-18294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:43:16.944 [DEBUG] [Thread-18294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:43:16.992 [DEBUG] [Thread-18294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:43:16.992 [DEBUG] [Thread-18294] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:43:17.001 [DEBUG] [Thread-18294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:43:17.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:43:17.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')
2026-04-15T11:43:17.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') -> 00000000
2026-04-15T11:43:17.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:43:17.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:43:17.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:43:17.037 [DEBUG] [Thread-18294] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:43:31.342 [DEBUG] [Thread-18297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:43:40.085 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:43:40.086 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:43:46.372 [DEBUG] [Thread-18298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:43:47.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:43:47.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:43:47.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
2026-04-15T11:43:48.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 43, 11), 4.5454, 73.5093, 0.0, 13.2685, 11.9868, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:43:48.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:43:11
2026-04-15T11:43:48.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:43:49.296 [DEBUG] [Thread-18299] [transport.py] [_log()] starting thread (client mode): 0xf13ec8e0
2026-04-15T11:43:49.296 [DEBUG] [Thread-18299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:43:49.312 [DEBUG] [Thread-18299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:43:49.312 [INFO] [Thread-18299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:43:49.314 [DEBUG] [Thread-18299] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:43:49.314 [DEBUG] [Thread-18299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:43:49.315 [DEBUG] [Thread-18299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:43:49.315 [DEBUG] [Thread-18299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:43:49.315 [DEBUG] [Thread-18299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:43:49.315 [DEBUG] [Thread-18299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:43:49.315 [DEBUG] [Thread-18299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:43:49.315 [DEBUG] [Thread-18299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:43:49.315 [DEBUG] [Thread-18299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:43:49.315 [DEBUG] [Thread-18299] [transport.py] [_log()] client lang: <none>
2026-04-15T11:43:49.315 [DEBUG] [Thread-18299] [transport.py] [_log()] server lang: <none>
2026-04-15T11:43:49.315 [DEBUG] [Thread-18299] [transport.py] [_log()] kex follows: False
2026-04-15T11:43:49.315 [DEBUG] [Thread-18299] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:43:49.315 [DEBUG] [Thread-18299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:43:49.316 [DEBUG] [Thread-18299] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:43:49.316 [DEBUG] [Thread-18299] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:43:49.316 [DEBUG] [Thread-18299] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:43:49.316 [DEBUG] [Thread-18299] [transport.py] [_log()] Compression: none
2026-04-15T11:43:49.316 [DEBUG] [Thread-18299] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:43:49.325 [DEBUG] [Thread-18299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:43:49.325 [DEBUG] [Thread-18299] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:43:49.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:43:49.326 [DEBUG] [Thread-18299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:43:49.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:43:49.327 [DEBUG] [Thread-18299] [transport.py] [_log()] userauth is OK
2026-04-15T11:43:49.327 [DEBUG] [Thread-18299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:43:49.327 [DEBUG] [Thread-18299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:43:49.327 [DEBUG] [Thread-18299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:43:49.327 [DEBUG] [Thread-18299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:43:49.345 [INFO] [Thread-18299] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:43:49.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:43:49.957 [DEBUG] [Thread-18299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:43:49.957 [DEBUG] [Thread-18299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:43:49.958 [DEBUG] [Thread-18299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:43:49.998 [DEBUG] [Thread-18299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:43:49.998 [DEBUG] [Thread-18299] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:43:50.000 [DEBUG] [Thread-18299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:43:50.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:43:50.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:43:50.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:43:50.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:43:50.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:43:50.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:43:50.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:43:50.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:43:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:43:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.405336 -999.00  +11.50  24.32     77   +7.70 1 2 1 1 1   888    0 4.11 32.11 ----- 17.4 24.3 330.8 26.4 17.5 -12.8 16.7 -11.4 16.3 -9.5 16.9 -11.3
2026-04-15T11:43:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:43:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:43:50.024 [DEBUG] [Thread-18299] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:43:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.405336
2026-04-15T11:43:50.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:43:50.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:43:50.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:43:50.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:43:50.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:43:50.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:43:11', tmtdew=4.5454, humidity=73.5093, cloud=0.0, wind=13.2685, temperature=11.9868, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:43:41.030', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:43:50.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:43:50.289 [DEBUG] [Thread-18302] [transport.py] [_log()] starting thread (client mode): 0xee988eb0
2026-04-15T11:43:50.289 [DEBUG] [Thread-18302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:43:50.304 [DEBUG] [Thread-18302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:43:50.304 [INFO] [Thread-18302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:43:50.312 [DEBUG] [Thread-18302] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:43:50.312 [DEBUG] [Thread-18302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:43:50.312 [DEBUG] [Thread-18302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:43:50.312 [DEBUG] [Thread-18302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:43:50.312 [DEBUG] [Thread-18302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:43:50.312 [DEBUG] [Thread-18302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:43:50.312 [DEBUG] [Thread-18302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:43:50.312 [DEBUG] [Thread-18302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:43:50.312 [DEBUG] [Thread-18302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:43:50.312 [DEBUG] [Thread-18302] [transport.py] [_log()] client lang: <none>
2026-04-15T11:43:50.313 [DEBUG] [Thread-18302] [transport.py] [_log()] server lang: <none>
2026-04-15T11:43:50.313 [DEBUG] [Thread-18302] [transport.py] [_log()] kex follows: False
2026-04-15T11:43:50.313 [DEBUG] [Thread-18302] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:43:50.313 [DEBUG] [Thread-18302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:43:50.313 [DEBUG] [Thread-18302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:43:50.313 [DEBUG] [Thread-18302] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:43:50.313 [DEBUG] [Thread-18302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:43:50.313 [DEBUG] [Thread-18302] [transport.py] [_log()] Compression: none
2026-04-15T11:43:50.313 [DEBUG] [Thread-18302] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:43:50.368 [DEBUG] [Thread-18302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:43:50.368 [DEBUG] [Thread-18302] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:43:50.369 [DEBUG] [Thread-18302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:43:50.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:43:50.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:43:50.425 [DEBUG] [Thread-18302] [transport.py] [_log()] userauth is OK
2026-04-15T11:43:50.425 [DEBUG] [Thread-18302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:43:50.425 [DEBUG] [Thread-18302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:43:50.425 [DEBUG] [Thread-18302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:43:50.425 [DEBUG] [Thread-18302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:43:50.451 [INFO] [Thread-18302] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:43:50.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:43:50.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:43:51.293 [DEBUG] [Thread-18302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:43:51.294 [DEBUG] [Thread-18302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:43:51.341 [DEBUG] [Thread-18302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:43:51.341 [DEBUG] [Thread-18302] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:43:51.350 [DEBUG] [Thread-18302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:43:51.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:43:51.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')
2026-04-15T11:43:51.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
2026-04-15T11:43:51.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:43:51.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:43:51.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:43:51.384 [DEBUG] [Thread-18302] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:44:01.402 [DEBUG] [Thread-18304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:44:10.706 [DEBUG] [Thread-18305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:44:16.447 [DEBUG] [Thread-18306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:44:21.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:44:21.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:44:21.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
2026-04-15T11:44:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 43, 47), 4.76984, 72.6203, 0.0, 19.5134, 12.4402, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:44:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:43:47
2026-04-15T11:44:23.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:44:23.519 [DEBUG] [Thread-18307] [transport.py] [_log()] starting thread (client mode): 0xf13ee470
2026-04-15T11:44:23.519 [DEBUG] [Thread-18307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:44:23.538 [DEBUG] [Thread-18307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:44:23.539 [INFO] [Thread-18307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:44:23.542 [DEBUG] [Thread-18307] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:44:23.542 [DEBUG] [Thread-18307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:44:23.542 [DEBUG] [Thread-18307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:44:23.542 [DEBUG] [Thread-18307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:44:23.542 [DEBUG] [Thread-18307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:44:23.542 [DEBUG] [Thread-18307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:44:23.542 [DEBUG] [Thread-18307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:44:23.542 [DEBUG] [Thread-18307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:44:23.542 [DEBUG] [Thread-18307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:44:23.542 [DEBUG] [Thread-18307] [transport.py] [_log()] client lang: <none>
2026-04-15T11:44:23.542 [DEBUG] [Thread-18307] [transport.py] [_log()] server lang: <none>
2026-04-15T11:44:23.542 [DEBUG] [Thread-18307] [transport.py] [_log()] kex follows: False
2026-04-15T11:44:23.542 [DEBUG] [Thread-18307] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:44:23.543 [DEBUG] [Thread-18307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:44:23.543 [DEBUG] [Thread-18307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:44:23.543 [DEBUG] [Thread-18307] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:44:23.543 [DEBUG] [Thread-18307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:44:23.543 [DEBUG] [Thread-18307] [transport.py] [_log()] Compression: none
2026-04-15T11:44:23.543 [DEBUG] [Thread-18307] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:44:23.559 [DEBUG] [Thread-18307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:44:23.559 [DEBUG] [Thread-18307] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:44:23.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:44:23.560 [DEBUG] [Thread-18307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:44:23.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:44:23.604 [DEBUG] [Thread-18307] [transport.py] [_log()] userauth is OK
2026-04-15T11:44:23.604 [DEBUG] [Thread-18307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:44:23.604 [DEBUG] [Thread-18307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:44:23.604 [DEBUG] [Thread-18307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:44:23.604 [DEBUG] [Thread-18307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:44:23.635 [INFO] [Thread-18307] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:44:23.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:44:24.207 [DEBUG] [Thread-18307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:44:24.207 [DEBUG] [Thread-18307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:44:24.208 [DEBUG] [Thread-18307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:44:24.248 [DEBUG] [Thread-18307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:44:24.248 [DEBUG] [Thread-18307] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:44:24.251 [DEBUG] [Thread-18307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:44:24.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:44:24.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:44:24.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:44:24.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:44:24.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:44:24.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:44:24.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:44:24.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:44:24.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:44:24.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.405683 -999.00  +11.60  18.09     79   +8.10 1 3 1 1 1   888    0 4.08 33.19 ----- 15.4 18.1 309.0 20.7 17.9 -11.4 16.8 -10.8 16.6 -9.0 17.3 -8.2
2026-04-15T11:44:24.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:44:24.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:44:24.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.405683
2026-04-15T11:44:24.276 [DEBUG] [Thread-18307] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:44:24.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:44:24.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:44:24.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:44:24.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:44:24.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:44:24.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:43:47', tmtdew=4.76984, humidity=72.6203, cloud=0.0, wind=19.5134, temperature=12.4402, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:44:11.011', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:44:24.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:44:24.526 [DEBUG] [Thread-18310] [transport.py] [_log()] starting thread (client mode): 0xf13ec1c0
2026-04-15T11:44:24.526 [DEBUG] [Thread-18310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:44:24.540 [DEBUG] [Thread-18310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:44:24.540 [INFO] [Thread-18310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:44:24.548 [DEBUG] [Thread-18310] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:44:24.548 [DEBUG] [Thread-18310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:44:24.548 [DEBUG] [Thread-18310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:44:24.548 [DEBUG] [Thread-18310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:44:24.548 [DEBUG] [Thread-18310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:44:24.548 [DEBUG] [Thread-18310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:44:24.548 [DEBUG] [Thread-18310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:44:24.548 [DEBUG] [Thread-18310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:44:24.549 [DEBUG] [Thread-18310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:44:24.549 [DEBUG] [Thread-18310] [transport.py] [_log()] client lang: <none>
2026-04-15T11:44:24.549 [DEBUG] [Thread-18310] [transport.py] [_log()] server lang: <none>
2026-04-15T11:44:24.549 [DEBUG] [Thread-18310] [transport.py] [_log()] kex follows: False
2026-04-15T11:44:24.549 [DEBUG] [Thread-18310] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:44:24.549 [DEBUG] [Thread-18310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:44:24.549 [DEBUG] [Thread-18310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:44:24.549 [DEBUG] [Thread-18310] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:44:24.549 [DEBUG] [Thread-18310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:44:24.549 [DEBUG] [Thread-18310] [transport.py] [_log()] Compression: none
2026-04-15T11:44:24.549 [DEBUG] [Thread-18310] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:44:24.603 [DEBUG] [Thread-18310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:44:24.603 [DEBUG] [Thread-18310] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:44:24.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:44:24.604 [DEBUG] [Thread-18310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:44:24.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:44:24.660 [DEBUG] [Thread-18310] [transport.py] [_log()] userauth is OK
2026-04-15T11:44:24.660 [DEBUG] [Thread-18310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:44:24.660 [DEBUG] [Thread-18310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:44:24.661 [DEBUG] [Thread-18310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:44:24.661 [DEBUG] [Thread-18310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:44:24.688 [INFO] [Thread-18310] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:44:24.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:44:24.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:44:25.508 [DEBUG] [Thread-18310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:44:25.508 [DEBUG] [Thread-18310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:44:25.556 [DEBUG] [Thread-18310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:44:25.556 [DEBUG] [Thread-18310] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:44:25.565 [DEBUG] [Thread-18310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:44:25.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:44:25.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')
2026-04-15T11:44:25.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
2026-04-15T11:44:25.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:44:25.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:44:25.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:44:25.600 [DEBUG] [Thread-18310] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:44:31.477 [DEBUG] [Thread-18312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:44:40.225 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:44:40.226 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:44:46.522 [DEBUG] [Thread-18313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:44:55.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:44:55.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:44:55.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
2026-04-15T11:44:56.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 44, 23), 4.78376, 72.578, 0.0, 13.0223, 12.2698, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:44:56.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:44:23
2026-04-15T11:44:57.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:44:57.720 [DEBUG] [Thread-18314] [transport.py] [_log()] starting thread (client mode): 0xf13ef6a0
2026-04-15T11:44:57.720 [DEBUG] [Thread-18314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:44:57.741 [DEBUG] [Thread-18314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:44:57.741 [INFO] [Thread-18314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:44:57.743 [DEBUG] [Thread-18314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:44:57.743 [DEBUG] [Thread-18314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:44:57.743 [DEBUG] [Thread-18314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:44:57.743 [DEBUG] [Thread-18314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:44:57.743 [DEBUG] [Thread-18314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:44:57.743 [DEBUG] [Thread-18314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:44:57.743 [DEBUG] [Thread-18314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:44:57.743 [DEBUG] [Thread-18314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:44:57.744 [DEBUG] [Thread-18314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:44:57.744 [DEBUG] [Thread-18314] [transport.py] [_log()] client lang: <none>
2026-04-15T11:44:57.744 [DEBUG] [Thread-18314] [transport.py] [_log()] server lang: <none>
2026-04-15T11:44:57.744 [DEBUG] [Thread-18314] [transport.py] [_log()] kex follows: False
2026-04-15T11:44:57.744 [DEBUG] [Thread-18314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:44:57.744 [DEBUG] [Thread-18314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:44:57.744 [DEBUG] [Thread-18314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:44:57.744 [DEBUG] [Thread-18314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:44:57.744 [DEBUG] [Thread-18314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:44:57.744 [DEBUG] [Thread-18314] [transport.py] [_log()] Compression: none
2026-04-15T11:44:57.744 [DEBUG] [Thread-18314] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:44:57.754 [DEBUG] [Thread-18314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:44:57.755 [DEBUG] [Thread-18314] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:44:57.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:44:57.755 [DEBUG] [Thread-18314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:44:57.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:44:57.756 [DEBUG] [Thread-18314] [transport.py] [_log()] userauth is OK
2026-04-15T11:44:57.756 [DEBUG] [Thread-18314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:44:57.757 [DEBUG] [Thread-18314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:44:57.757 [DEBUG] [Thread-18314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:44:57.757 [DEBUG] [Thread-18314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:44:57.775 [INFO] [Thread-18314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:44:57.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:44:58.346 [DEBUG] [Thread-18314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:44:58.347 [DEBUG] [Thread-18314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:44:58.347 [DEBUG] [Thread-18314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:44:58.387 [DEBUG] [Thread-18314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:44:58.387 [DEBUG] [Thread-18314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:44:58.389 [DEBUG] [Thread-18314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:44:58.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:44:58.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:44:58.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:44:58.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:44:58.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:44:58.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:44:58.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:44:58.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:44:58.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:44:58.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.406030 -999.00  +11.90  15.04     78   +8.30 1 2 1 1 1   888    0 4.21 34.58 ----- 16.4 15.0 295.7 21.5 18.1 -12.9 17.1 -11.0 16.5 -10.2 17.4 -10.6
2026-04-15T11:44:58.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:44:58.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:44:58.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.406030
2026-04-15T11:44:58.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:44:58.410 [DEBUG] [Thread-18314] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:44:58.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:44:58.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:44:58.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:44:58.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:44:58.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:44:23', tmtdew=4.78376, humidity=72.578, cloud=0.0, wind=13.0223, temperature=12.2698, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:44:40.992', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:44:58.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:44:58.649 [DEBUG] [Thread-18317] [transport.py] [_log()] starting thread (client mode): 0xf13ec400
2026-04-15T11:44:58.649 [DEBUG] [Thread-18317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:44:58.664 [DEBUG] [Thread-18317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:44:58.664 [INFO] [Thread-18317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:44:58.671 [DEBUG] [Thread-18317] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:44:58.672 [DEBUG] [Thread-18317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:44:58.672 [DEBUG] [Thread-18317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:44:58.672 [DEBUG] [Thread-18317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:44:58.672 [DEBUG] [Thread-18317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:44:58.672 [DEBUG] [Thread-18317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:44:58.672 [DEBUG] [Thread-18317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:44:58.672 [DEBUG] [Thread-18317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:44:58.672 [DEBUG] [Thread-18317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:44:58.672 [DEBUG] [Thread-18317] [transport.py] [_log()] client lang: <none>
2026-04-15T11:44:58.672 [DEBUG] [Thread-18317] [transport.py] [_log()] server lang: <none>
2026-04-15T11:44:58.672 [DEBUG] [Thread-18317] [transport.py] [_log()] kex follows: False
2026-04-15T11:44:58.672 [DEBUG] [Thread-18317] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:44:58.673 [DEBUG] [Thread-18317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:44:58.673 [DEBUG] [Thread-18317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:44:58.673 [DEBUG] [Thread-18317] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:44:58.673 [DEBUG] [Thread-18317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:44:58.673 [DEBUG] [Thread-18317] [transport.py] [_log()] Compression: none
2026-04-15T11:44:58.673 [DEBUG] [Thread-18317] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:44:58.731 [DEBUG] [Thread-18317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:44:58.731 [DEBUG] [Thread-18317] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:44:58.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:44:58.732 [DEBUG] [Thread-18317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:44:58.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:44:58.788 [DEBUG] [Thread-18317] [transport.py] [_log()] userauth is OK
2026-04-15T11:44:58.788 [DEBUG] [Thread-18317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:44:58.788 [DEBUG] [Thread-18317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:44:58.788 [DEBUG] [Thread-18317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:44:58.789 [DEBUG] [Thread-18317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:44:58.816 [INFO] [Thread-18317] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:44:58.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:44:58.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:44:59.636 [DEBUG] [Thread-18317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:44:59.636 [DEBUG] [Thread-18317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:44:59.684 [DEBUG] [Thread-18317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:44:59.684 [DEBUG] [Thread-18317] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:44:59.693 [DEBUG] [Thread-18317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:44:59.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:44:59.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')
2026-04-15T11:44:59.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
2026-04-15T11:44:59.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:44:59.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:44:59.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:44:59.727 [DEBUG] [Thread-18317] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:45:01.553 [DEBUG] [Thread-18319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:45:10.826 [DEBUG] [Thread-18320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:45:16.597 [DEBUG] [Thread-18321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:45:29.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:45:29.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:45:29.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
2026-04-15T11:45:31.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 44, 58), 4.85081, 72.2578, 0.0, 17.0266, 12.2859, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:45:31.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:44:58
2026-04-15T11:45:31.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:45:31.627 [DEBUG] [Thread-18322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:45:31.868 [DEBUG] [Thread-18323] [transport.py] [_log()] starting thread (client mode): 0xf13ec550
2026-04-15T11:45:31.868 [DEBUG] [Thread-18323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:45:31.889 [DEBUG] [Thread-18323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:45:31.889 [INFO] [Thread-18323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:45:31.890 [DEBUG] [Thread-18323] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:45:31.890 [DEBUG] [Thread-18323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:45:31.890 [DEBUG] [Thread-18323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:45:31.890 [DEBUG] [Thread-18323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:45:31.891 [DEBUG] [Thread-18323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:45:31.891 [DEBUG] [Thread-18323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:45:31.891 [DEBUG] [Thread-18323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:45:31.891 [DEBUG] [Thread-18323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:45:31.891 [DEBUG] [Thread-18323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:45:31.891 [DEBUG] [Thread-18323] [transport.py] [_log()] client lang: <none>
2026-04-15T11:45:31.891 [DEBUG] [Thread-18323] [transport.py] [_log()] server lang: <none>
2026-04-15T11:45:31.891 [DEBUG] [Thread-18323] [transport.py] [_log()] kex follows: False
2026-04-15T11:45:31.891 [DEBUG] [Thread-18323] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:45:31.891 [DEBUG] [Thread-18323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:45:31.891 [DEBUG] [Thread-18323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:45:31.892 [DEBUG] [Thread-18323] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:45:31.892 [DEBUG] [Thread-18323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:45:31.892 [DEBUG] [Thread-18323] [transport.py] [_log()] Compression: none
2026-04-15T11:45:31.892 [DEBUG] [Thread-18323] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:45:31.901 [DEBUG] [Thread-18323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:45:31.901 [DEBUG] [Thread-18323] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:45:31.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:45:31.902 [DEBUG] [Thread-18323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:45:31.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:45:31.903 [DEBUG] [Thread-18323] [transport.py] [_log()] userauth is OK
2026-04-15T11:45:31.903 [DEBUG] [Thread-18323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:45:31.903 [DEBUG] [Thread-18323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:45:31.903 [DEBUG] [Thread-18323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:45:31.903 [DEBUG] [Thread-18323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:45:31.920 [INFO] [Thread-18323] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:45:31.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:45:32.498 [DEBUG] [Thread-18323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:45:32.498 [DEBUG] [Thread-18323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:45:32.499 [DEBUG] [Thread-18323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:45:32.539 [DEBUG] [Thread-18323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:45:32.539 [DEBUG] [Thread-18323] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:45:32.542 [DEBUG] [Thread-18323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:45:32.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:45:32.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:45:32.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:45:32.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:45:32.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:45:32.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:45:32.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:45:32.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:45:32.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:45:32.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.406378 -999.00  +12.00  14.01     78   +8.30 1 2 1 1 1   888    0 4.32 38.63 ----- 14.1 14.0 295.6 19.2 18.4 -12.8 17.2 -11.4 16.9 -9.4 17.7 -9.0
2026-04-15T11:45:32.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:45:32.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:45:32.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.406378
2026-04-15T11:45:32.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:45:32.566 [DEBUG] [Thread-18323] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:45:32.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:45:32.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:45:32.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:45:32.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:45:32.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:44:58', tmtdew=4.85081, humidity=72.2578, cloud=0.0, wind=17.0266, temperature=12.2859, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:45:11.059', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:45:32.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:45:32.828 [DEBUG] [Thread-18326] [transport.py] [_log()] starting thread (client mode): 0xee905270
2026-04-15T11:45:32.829 [DEBUG] [Thread-18326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:45:32.842 [DEBUG] [Thread-18326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:45:32.843 [INFO] [Thread-18326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:45:32.850 [DEBUG] [Thread-18326] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:45:32.850 [DEBUG] [Thread-18326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:45:32.850 [DEBUG] [Thread-18326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:45:32.850 [DEBUG] [Thread-18326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:45:32.850 [DEBUG] [Thread-18326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:45:32.850 [DEBUG] [Thread-18326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:45:32.850 [DEBUG] [Thread-18326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:45:32.851 [DEBUG] [Thread-18326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:45:32.851 [DEBUG] [Thread-18326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:45:32.851 [DEBUG] [Thread-18326] [transport.py] [_log()] client lang: <none>
2026-04-15T11:45:32.851 [DEBUG] [Thread-18326] [transport.py] [_log()] server lang: <none>
2026-04-15T11:45:32.851 [DEBUG] [Thread-18326] [transport.py] [_log()] kex follows: False
2026-04-15T11:45:32.851 [DEBUG] [Thread-18326] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:45:32.851 [DEBUG] [Thread-18326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:45:32.851 [DEBUG] [Thread-18326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:45:32.851 [DEBUG] [Thread-18326] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:45:32.851 [DEBUG] [Thread-18326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:45:32.852 [DEBUG] [Thread-18326] [transport.py] [_log()] Compression: none
2026-04-15T11:45:32.852 [DEBUG] [Thread-18326] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:45:32.906 [DEBUG] [Thread-18326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:45:32.907 [DEBUG] [Thread-18326] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:45:32.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:45:32.907 [DEBUG] [Thread-18326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:45:32.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:45:32.963 [DEBUG] [Thread-18326] [transport.py] [_log()] userauth is OK
2026-04-15T11:45:32.963 [DEBUG] [Thread-18326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:45:32.963 [DEBUG] [Thread-18326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:45:32.963 [DEBUG] [Thread-18326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:45:32.964 [DEBUG] [Thread-18326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:45:32.988 [INFO] [Thread-18326] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:45:32.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:45:32.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:45:33.821 [DEBUG] [Thread-18326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:45:33.821 [DEBUG] [Thread-18326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:45:33.869 [DEBUG] [Thread-18326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:45:33.869 [DEBUG] [Thread-18326] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:45:33.878 [DEBUG] [Thread-18326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:45:33.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:45:33.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')
2026-04-15T11:45:33.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
2026-04-15T11:45:33.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:45:33.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:45:33.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:45:33.913 [DEBUG] [Thread-18326] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:45:40.366 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:45:40.367 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:45:46.657 [DEBUG] [Thread-18328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:46:01.706 [DEBUG] [Thread-18329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:46:03.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:46:03.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:46:03.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:46:05.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 45, 34), 4.90978, 71.9911, 0.0, 17.3966, 12.7726, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:46:05.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:45:34
2026-04-15T11:46:05.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:46:06.042 [DEBUG] [Thread-18330] [transport.py] [_log()] starting thread (client mode): 0xf13cab60
2026-04-15T11:46:06.042 [DEBUG] [Thread-18330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:46:06.061 [DEBUG] [Thread-18330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:46:06.062 [INFO] [Thread-18330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:46:06.064 [DEBUG] [Thread-18330] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:46:06.065 [DEBUG] [Thread-18330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:46:06.065 [DEBUG] [Thread-18330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:46:06.065 [DEBUG] [Thread-18330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:46:06.065 [DEBUG] [Thread-18330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:46:06.065 [DEBUG] [Thread-18330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:46:06.065 [DEBUG] [Thread-18330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:46:06.065 [DEBUG] [Thread-18330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:46:06.065 [DEBUG] [Thread-18330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:46:06.065 [DEBUG] [Thread-18330] [transport.py] [_log()] client lang: <none>
2026-04-15T11:46:06.065 [DEBUG] [Thread-18330] [transport.py] [_log()] server lang: <none>
2026-04-15T11:46:06.065 [DEBUG] [Thread-18330] [transport.py] [_log()] kex follows: False
2026-04-15T11:46:06.066 [DEBUG] [Thread-18330] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:46:06.066 [DEBUG] [Thread-18330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:46:06.066 [DEBUG] [Thread-18330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:46:06.066 [DEBUG] [Thread-18330] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:46:06.066 [DEBUG] [Thread-18330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:46:06.066 [DEBUG] [Thread-18330] [transport.py] [_log()] Compression: none
2026-04-15T11:46:06.066 [DEBUG] [Thread-18330] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:46:06.078 [DEBUG] [Thread-18330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:46:06.079 [DEBUG] [Thread-18330] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:46:06.079 [DEBUG] [Thread-18330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:46:06.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:46:06.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:46:06.080 [DEBUG] [Thread-18330] [transport.py] [_log()] userauth is OK
2026-04-15T11:46:06.080 [DEBUG] [Thread-18330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:46:06.080 [DEBUG] [Thread-18330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:46:06.081 [DEBUG] [Thread-18330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:46:06.081 [DEBUG] [Thread-18330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:46:06.099 [INFO] [Thread-18330] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:46:06.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:46:06.703 [DEBUG] [Thread-18330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:46:06.704 [DEBUG] [Thread-18330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:46:06.704 [DEBUG] [Thread-18330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:46:06.744 [DEBUG] [Thread-18330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:46:06.744 [DEBUG] [Thread-18330] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:46:06.746 [DEBUG] [Thread-18330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:46:06.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:46:06.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:46:06.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:46:06.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:46:06.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:46:06.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:46:06.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:46:06.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:46:06.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:46:06.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.406725 -999.00  +12.10  15.18     77   +8.40 1 2 1 1 1   888    0 4.35 38.86 ----- 14.2 15.2 313.4 17.6 18.6 -13.6 17.5 -12.2 16.9 -10.1 17.9 -9.9
2026-04-15T11:46:06.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:46:06.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:46:06.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.406725
2026-04-15T11:46:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:46:06.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:46:06.766 [DEBUG] [Thread-18330] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:46:06.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:46:06.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:46:06.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:46:06.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:45:34', tmtdew=4.90978, humidity=71.9911, cloud=0.0, wind=17.3966, temperature=12.7726, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:45:41.040', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:46:07.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:46:07.025 [DEBUG] [Thread-18333] [transport.py] [_log()] starting thread (client mode): 0xf13ca800
2026-04-15T11:46:07.025 [DEBUG] [Thread-18333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:46:07.040 [DEBUG] [Thread-18333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:46:07.040 [INFO] [Thread-18333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:46:07.051 [DEBUG] [Thread-18333] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:46:07.051 [DEBUG] [Thread-18333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:46:07.051 [DEBUG] [Thread-18333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:46:07.051 [DEBUG] [Thread-18333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:46:07.051 [DEBUG] [Thread-18333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:46:07.051 [DEBUG] [Thread-18333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:46:07.051 [DEBUG] [Thread-18333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:46:07.051 [DEBUG] [Thread-18333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:46:07.051 [DEBUG] [Thread-18333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:46:07.051 [DEBUG] [Thread-18333] [transport.py] [_log()] client lang: <none>
2026-04-15T11:46:07.052 [DEBUG] [Thread-18333] [transport.py] [_log()] server lang: <none>
2026-04-15T11:46:07.052 [DEBUG] [Thread-18333] [transport.py] [_log()] kex follows: False
2026-04-15T11:46:07.052 [DEBUG] [Thread-18333] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:46:07.052 [DEBUG] [Thread-18333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:46:07.052 [DEBUG] [Thread-18333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:46:07.052 [DEBUG] [Thread-18333] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:46:07.052 [DEBUG] [Thread-18333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:46:07.052 [DEBUG] [Thread-18333] [transport.py] [_log()] Compression: none
2026-04-15T11:46:07.052 [DEBUG] [Thread-18333] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:46:07.110 [DEBUG] [Thread-18333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:46:07.111 [DEBUG] [Thread-18333] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:46:07.111 [DEBUG] [Thread-18333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:46:07.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:46:07.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:46:07.167 [DEBUG] [Thread-18333] [transport.py] [_log()] userauth is OK
2026-04-15T11:46:07.167 [DEBUG] [Thread-18333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:46:07.167 [DEBUG] [Thread-18333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:46:07.167 [DEBUG] [Thread-18333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:46:07.168 [DEBUG] [Thread-18333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:46:07.195 [INFO] [Thread-18333] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:46:07.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:46:07.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:46:08.020 [DEBUG] [Thread-18333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:46:08.020 [DEBUG] [Thread-18333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:46:08.071 [DEBUG] [Thread-18333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:46:08.071 [DEBUG] [Thread-18333] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:46:08.081 [DEBUG] [Thread-18333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:46:08.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:46:08.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')
2026-04-15T11:46:08.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
2026-04-15T11:46:08.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:46:08.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:46:08.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:46:08.121 [DEBUG] [Thread-18333] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:46:10.950 [DEBUG] [Thread-18335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:46:16.739 [DEBUG] [Thread-18336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:46:31.783 [DEBUG] [Thread-18337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:46:38.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:46:38.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:46:38.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
2026-04-15T11:46:39.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 46, 9), 4.95898, 71.5119, 0.0, 16.9031, 12.435, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:46:39.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:46:09
2026-04-15T11:46:39.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:46:40.344 [DEBUG] [Thread-18338] [transport.py] [_log()] starting thread (client mode): 0xee905330
2026-04-15T11:46:40.345 [DEBUG] [Thread-18338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:46:40.368 [DEBUG] [Thread-18338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:46:40.368 [INFO] [Thread-18338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:46:40.370 [DEBUG] [Thread-18338] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:46:40.370 [DEBUG] [Thread-18338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:46:40.370 [DEBUG] [Thread-18338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:46:40.370 [DEBUG] [Thread-18338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:46:40.370 [DEBUG] [Thread-18338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:46:40.370 [DEBUG] [Thread-18338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:46:40.370 [DEBUG] [Thread-18338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:46:40.370 [DEBUG] [Thread-18338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:46:40.370 [DEBUG] [Thread-18338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:46:40.371 [DEBUG] [Thread-18338] [transport.py] [_log()] client lang: <none>
2026-04-15T11:46:40.371 [DEBUG] [Thread-18338] [transport.py] [_log()] server lang: <none>
2026-04-15T11:46:40.371 [DEBUG] [Thread-18338] [transport.py] [_log()] kex follows: False
2026-04-15T11:46:40.371 [DEBUG] [Thread-18338] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:46:40.371 [DEBUG] [Thread-18338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:46:40.371 [DEBUG] [Thread-18338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:46:40.371 [DEBUG] [Thread-18338] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:46:40.371 [DEBUG] [Thread-18338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:46:40.371 [DEBUG] [Thread-18338] [transport.py] [_log()] Compression: none
2026-04-15T11:46:40.371 [DEBUG] [Thread-18338] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:46:40.381 [DEBUG] [Thread-18338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:46:40.381 [DEBUG] [Thread-18338] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:46:40.382 [DEBUG] [Thread-18338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:46:40.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:46:40.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:46:40.383 [DEBUG] [Thread-18338] [transport.py] [_log()] userauth is OK
2026-04-15T11:46:40.383 [DEBUG] [Thread-18338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:46:40.383 [DEBUG] [Thread-18338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:46:40.383 [DEBUG] [Thread-18338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:46:40.383 [DEBUG] [Thread-18338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:46:40.396 [INFO] [Thread-18338] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:46:40.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:46:40.506 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:46:40.507 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:46:41.015 [DEBUG] [Thread-18338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:46:41.015 [DEBUG] [Thread-18338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:46:41.016 [DEBUG] [Thread-18338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:46:41.056 [DEBUG] [Thread-18338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:46:41.056 [DEBUG] [Thread-18338] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:46:41.059 [DEBUG] [Thread-18338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:46:41.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:46:41.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:46:41.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:46:41.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:46:41.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:46:41.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:46:41.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:46:41.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:46:41.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:46:41.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.407072 -999.00  +12.10  15.99     78   +8.60 1 2 1 1 1   888    0 4.29 39.41 ----- 14.6 16.0 310.6 18.4 18.8 -13.8 17.6 -12.0 17.0 -12.8 18.1 -9.8
2026-04-15T11:46:41.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:46:41.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:46:41.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.407072
2026-04-15T11:46:41.086 [DEBUG] [Thread-18338] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:46:41.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:46:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:46:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:46:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:46:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:46:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:46:09', tmtdew=4.95898, humidity=71.5119, cloud=0.0, wind=16.9031, temperature=12.435, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:46:11.021', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:46:41.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:46:41.341 [DEBUG] [Thread-18341] [transport.py] [_log()] starting thread (client mode): 0xee9eec20
2026-04-15T11:46:41.341 [DEBUG] [Thread-18341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:46:41.358 [DEBUG] [Thread-18341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:46:41.358 [INFO] [Thread-18341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:46:41.366 [DEBUG] [Thread-18341] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:46:41.366 [DEBUG] [Thread-18341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:46:41.366 [DEBUG] [Thread-18341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:46:41.366 [DEBUG] [Thread-18341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:46:41.366 [DEBUG] [Thread-18341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:46:41.366 [DEBUG] [Thread-18341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:46:41.366 [DEBUG] [Thread-18341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:46:41.366 [DEBUG] [Thread-18341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:46:41.366 [DEBUG] [Thread-18341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:46:41.366 [DEBUG] [Thread-18341] [transport.py] [_log()] client lang: <none>
2026-04-15T11:46:41.367 [DEBUG] [Thread-18341] [transport.py] [_log()] server lang: <none>
2026-04-15T11:46:41.367 [DEBUG] [Thread-18341] [transport.py] [_log()] kex follows: False
2026-04-15T11:46:41.367 [DEBUG] [Thread-18341] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:46:41.367 [DEBUG] [Thread-18341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:46:41.367 [DEBUG] [Thread-18341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:46:41.367 [DEBUG] [Thread-18341] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:46:41.367 [DEBUG] [Thread-18341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:46:41.367 [DEBUG] [Thread-18341] [transport.py] [_log()] Compression: none
2026-04-15T11:46:41.367 [DEBUG] [Thread-18341] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:46:41.421 [DEBUG] [Thread-18341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:46:41.421 [DEBUG] [Thread-18341] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:46:41.422 [DEBUG] [Thread-18341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:46:41.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:46:41.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:46:41.478 [DEBUG] [Thread-18341] [transport.py] [_log()] userauth is OK
2026-04-15T11:46:41.478 [DEBUG] [Thread-18341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:46:41.478 [DEBUG] [Thread-18341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:46:41.478 [DEBUG] [Thread-18341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:46:41.478 [DEBUG] [Thread-18341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:46:41.503 [INFO] [Thread-18341] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:46:41.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:46:41.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:46:42.314 [DEBUG] [Thread-18341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:46:42.314 [DEBUG] [Thread-18341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:46:42.362 [DEBUG] [Thread-18341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:46:42.362 [DEBUG] [Thread-18341] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:46:42.371 [DEBUG] [Thread-18341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:46:42.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:46:42.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')
2026-04-15T11:46:42.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
2026-04-15T11:46:42.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:46:42.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:46:42.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:46:42.407 [DEBUG] [Thread-18341] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:46:46.815 [DEBUG] [Thread-18343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:47:01.860 [DEBUG] [Thread-18344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:47:11.059 [DEBUG] [Thread-18345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:47:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:47:12.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:47:12.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
2026-04-15T11:47:13.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 46, 45), 5.13345, 70.9959, 0.0, 17.5378, 13.2695, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:47:13.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:46:45
2026-04-15T11:47:14.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:47:14.501 [DEBUG] [Thread-18346] [transport.py] [_log()] starting thread (client mode): 0xf13c8fd0
2026-04-15T11:47:14.502 [DEBUG] [Thread-18346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:47:14.521 [DEBUG] [Thread-18346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:47:14.521 [INFO] [Thread-18346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:47:14.523 [DEBUG] [Thread-18346] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:47:14.523 [DEBUG] [Thread-18346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:47:14.523 [DEBUG] [Thread-18346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:47:14.523 [DEBUG] [Thread-18346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:47:14.523 [DEBUG] [Thread-18346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:47:14.524 [DEBUG] [Thread-18346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:47:14.524 [DEBUG] [Thread-18346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:47:14.524 [DEBUG] [Thread-18346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:47:14.524 [DEBUG] [Thread-18346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:47:14.524 [DEBUG] [Thread-18346] [transport.py] [_log()] client lang: <none>
2026-04-15T11:47:14.524 [DEBUG] [Thread-18346] [transport.py] [_log()] server lang: <none>
2026-04-15T11:47:14.524 [DEBUG] [Thread-18346] [transport.py] [_log()] kex follows: False
2026-04-15T11:47:14.524 [DEBUG] [Thread-18346] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:47:14.524 [DEBUG] [Thread-18346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:47:14.524 [DEBUG] [Thread-18346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:47:14.524 [DEBUG] [Thread-18346] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:47:14.524 [DEBUG] [Thread-18346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:47:14.525 [DEBUG] [Thread-18346] [transport.py] [_log()] Compression: none
2026-04-15T11:47:14.525 [DEBUG] [Thread-18346] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:47:14.537 [DEBUG] [Thread-18346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:47:14.537 [DEBUG] [Thread-18346] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:47:14.538 [DEBUG] [Thread-18346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:47:14.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:47:14.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:47:14.539 [DEBUG] [Thread-18346] [transport.py] [_log()] userauth is OK
2026-04-15T11:47:14.539 [DEBUG] [Thread-18346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:47:14.539 [DEBUG] [Thread-18346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:47:14.539 [DEBUG] [Thread-18346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:47:14.539 [DEBUG] [Thread-18346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:47:14.563 [INFO] [Thread-18346] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:47:14.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:47:15.172 [DEBUG] [Thread-18346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:47:15.172 [DEBUG] [Thread-18346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:47:15.173 [DEBUG] [Thread-18346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:47:15.213 [DEBUG] [Thread-18346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:47:15.213 [DEBUG] [Thread-18346] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:47:15.216 [DEBUG] [Thread-18346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:47:15.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:47:15.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:47:15.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:47:15.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:47:15.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:47:15.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:47:15.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:47:15.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:47:15.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:47:15.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.407766 -999.00  +12.20  13.87     77   +8.30 1 2 1 1 1   888    0 4.40 40.46 ----- 22.3 13.9 299.8 21.5 18.7 -17.5 17.7 -16.0 16.9 -12.0 18.0 -13.8
2026-04-15T11:47:15.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:47:15.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:47:15.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.407766
2026-04-15T11:47:15.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:47:15.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:47:15.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:47:15.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:47:15.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:47:15.240 [DEBUG] [Thread-18346] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:47:15.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:46:45', tmtdew=5.13345, humidity=70.9959, cloud=0.0, wind=17.5378, temperature=13.2695, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:47:10.982', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:47:15.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:47:15.490 [DEBUG] [Thread-18349] [transport.py] [_log()] starting thread (client mode): 0xf13ca6e0
2026-04-15T11:47:15.490 [DEBUG] [Thread-18349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:47:15.506 [DEBUG] [Thread-18349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:47:15.506 [INFO] [Thread-18349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:47:15.513 [DEBUG] [Thread-18349] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:47:15.513 [DEBUG] [Thread-18349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:47:15.513 [DEBUG] [Thread-18349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:47:15.514 [DEBUG] [Thread-18349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:47:15.514 [DEBUG] [Thread-18349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:47:15.514 [DEBUG] [Thread-18349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:47:15.514 [DEBUG] [Thread-18349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:47:15.514 [DEBUG] [Thread-18349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:47:15.514 [DEBUG] [Thread-18349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:47:15.514 [DEBUG] [Thread-18349] [transport.py] [_log()] client lang: <none>
2026-04-15T11:47:15.514 [DEBUG] [Thread-18349] [transport.py] [_log()] server lang: <none>
2026-04-15T11:47:15.514 [DEBUG] [Thread-18349] [transport.py] [_log()] kex follows: False
2026-04-15T11:47:15.514 [DEBUG] [Thread-18349] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:47:15.514 [DEBUG] [Thread-18349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:47:15.514 [DEBUG] [Thread-18349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:47:15.515 [DEBUG] [Thread-18349] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:47:15.515 [DEBUG] [Thread-18349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:47:15.515 [DEBUG] [Thread-18349] [transport.py] [_log()] Compression: none
2026-04-15T11:47:15.515 [DEBUG] [Thread-18349] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:47:15.572 [DEBUG] [Thread-18349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:47:15.573 [DEBUG] [Thread-18349] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:47:15.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:47:15.574 [DEBUG] [Thread-18349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:47:15.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:47:15.629 [DEBUG] [Thread-18349] [transport.py] [_log()] userauth is OK
2026-04-15T11:47:15.629 [DEBUG] [Thread-18349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:47:15.630 [DEBUG] [Thread-18349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:47:15.630 [DEBUG] [Thread-18349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:47:15.630 [DEBUG] [Thread-18349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:47:15.655 [INFO] [Thread-18349] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:47:15.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:47:15.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:47:16.501 [DEBUG] [Thread-18349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:47:16.501 [DEBUG] [Thread-18349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:47:16.549 [DEBUG] [Thread-18349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:47:16.549 [DEBUG] [Thread-18349] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:47:16.558 [DEBUG] [Thread-18349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:47:16.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:47:16.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')
2026-04-15T11:47:16.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
2026-04-15T11:47:16.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:47:16.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:47:16.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:47:16.592 [DEBUG] [Thread-18349] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:47:16.890 [DEBUG] [Thread-18351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:47:31.935 [DEBUG] [Thread-18352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:47:40.649 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:47:40.650 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:47:46.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:47:46.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:47:46.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
2026-04-15T11:47:46.967 [DEBUG] [Thread-18353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:47:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 47, 20), 5.2319, 70.401, 0.0, 16.8862, 12.4026, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:47:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:47:20
2026-04-15T11:47:48.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:47:48.713 [DEBUG] [Thread-18354] [transport.py] [_log()] starting thread (client mode): 0xf13cbb20
2026-04-15T11:47:48.713 [DEBUG] [Thread-18354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:47:48.727 [DEBUG] [Thread-18354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:47:48.727 [INFO] [Thread-18354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:47:48.730 [DEBUG] [Thread-18354] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:47:48.730 [DEBUG] [Thread-18354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:47:48.730 [DEBUG] [Thread-18354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:47:48.730 [DEBUG] [Thread-18354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:47:48.730 [DEBUG] [Thread-18354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:47:48.730 [DEBUG] [Thread-18354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:47:48.730 [DEBUG] [Thread-18354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:47:48.730 [DEBUG] [Thread-18354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:47:48.731 [DEBUG] [Thread-18354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:47:48.731 [DEBUG] [Thread-18354] [transport.py] [_log()] client lang: <none>
2026-04-15T11:47:48.731 [DEBUG] [Thread-18354] [transport.py] [_log()] server lang: <none>
2026-04-15T11:47:48.731 [DEBUG] [Thread-18354] [transport.py] [_log()] kex follows: False
2026-04-15T11:47:48.731 [DEBUG] [Thread-18354] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:47:48.731 [DEBUG] [Thread-18354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:47:48.731 [DEBUG] [Thread-18354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:47:48.731 [DEBUG] [Thread-18354] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:47:48.731 [DEBUG] [Thread-18354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:47:48.731 [DEBUG] [Thread-18354] [transport.py] [_log()] Compression: none
2026-04-15T11:47:48.731 [DEBUG] [Thread-18354] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:47:48.748 [DEBUG] [Thread-18354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:47:48.748 [DEBUG] [Thread-18354] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:47:48.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:47:48.749 [DEBUG] [Thread-18354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:47:48.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:47:48.750 [DEBUG] [Thread-18354] [transport.py] [_log()] userauth is OK
2026-04-15T11:47:48.750 [DEBUG] [Thread-18354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:47:48.750 [DEBUG] [Thread-18354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:47:48.750 [DEBUG] [Thread-18354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:47:48.750 [DEBUG] [Thread-18354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:47:48.773 [INFO] [Thread-18354] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:47:48.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:47:49.401 [DEBUG] [Thread-18354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:47:49.401 [DEBUG] [Thread-18354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:47:49.402 [DEBUG] [Thread-18354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:47:49.442 [DEBUG] [Thread-18354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:47:49.442 [DEBUG] [Thread-18354] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:47:49.445 [DEBUG] [Thread-18354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:47:49.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:47:49.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:47:49.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:47:49.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:47:49.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:47:49.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:47:49.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:47:49.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:47:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:47:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.408114 -999.00  +12.10  16.65     77   +8.30 1 2 1 1 1   888    0 4.47 40.84 ----- 19.8 16.6 302.4 25.9 18.6 -17.4 17.6 -16.4 16.9 -12.2 17.9 -13.2
2026-04-15T11:47:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:47:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:47:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.408114
2026-04-15T11:47:49.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:47:49.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:47:49.471 [DEBUG] [Thread-18354] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:47:49.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:47:49.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:47:49.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:47:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:47:20', tmtdew=5.2319, humidity=70.401, cloud=0.0, wind=16.8862, temperature=12.4026, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:47:41.050', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:47:49.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:47:49.719 [DEBUG] [Thread-18357] [transport.py] [_log()] starting thread (client mode): 0xf13ca860
2026-04-15T11:47:49.720 [DEBUG] [Thread-18357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:47:49.733 [DEBUG] [Thread-18357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:47:49.733 [INFO] [Thread-18357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:47:49.741 [DEBUG] [Thread-18357] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:47:49.741 [DEBUG] [Thread-18357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:47:49.741 [DEBUG] [Thread-18357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:47:49.741 [DEBUG] [Thread-18357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:47:49.741 [DEBUG] [Thread-18357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:47:49.741 [DEBUG] [Thread-18357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:47:49.741 [DEBUG] [Thread-18357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:47:49.741 [DEBUG] [Thread-18357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:47:49.741 [DEBUG] [Thread-18357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:47:49.741 [DEBUG] [Thread-18357] [transport.py] [_log()] client lang: <none>
2026-04-15T11:47:49.741 [DEBUG] [Thread-18357] [transport.py] [_log()] server lang: <none>
2026-04-15T11:47:49.742 [DEBUG] [Thread-18357] [transport.py] [_log()] kex follows: False
2026-04-15T11:47:49.742 [DEBUG] [Thread-18357] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:47:49.742 [DEBUG] [Thread-18357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:47:49.742 [DEBUG] [Thread-18357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:47:49.742 [DEBUG] [Thread-18357] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:47:49.742 [DEBUG] [Thread-18357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:47:49.742 [DEBUG] [Thread-18357] [transport.py] [_log()] Compression: none
2026-04-15T11:47:49.742 [DEBUG] [Thread-18357] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:47:49.800 [DEBUG] [Thread-18357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:47:49.800 [DEBUG] [Thread-18357] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:47:49.801 [DEBUG] [Thread-18357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:47:49.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:47:49.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:47:49.857 [DEBUG] [Thread-18357] [transport.py] [_log()] userauth is OK
2026-04-15T11:47:49.857 [DEBUG] [Thread-18357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:47:49.858 [DEBUG] [Thread-18357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:47:49.858 [DEBUG] [Thread-18357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:47:49.858 [DEBUG] [Thread-18357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:47:49.880 [INFO] [Thread-18357] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:47:49.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:47:49.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:47:50.685 [DEBUG] [Thread-18357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:47:50.685 [DEBUG] [Thread-18357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:47:50.733 [DEBUG] [Thread-18357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:47:50.733 [DEBUG] [Thread-18357] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:47:50.742 [DEBUG] [Thread-18357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:47:50.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:47:50.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')
2026-04-15T11:47:50.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
2026-04-15T11:47:50.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:47:50.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:47:50.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:47:50.777 [DEBUG] [Thread-18357] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:48:01.999 [DEBUG] [Thread-18359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:48:11.168 [DEBUG] [Thread-18360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:48:17.045 [DEBUG] [Thread-18361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:48:20.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:48:20.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:48:20.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
2026-04-15T11:48:22.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 47, 56), 5.27494, 69.9366, 0.0, 18.5267, 12.1364, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:48:22.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:47:56
2026-04-15T11:48:22.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:48:22.928 [DEBUG] [Thread-18362] [transport.py] [_log()] starting thread (client mode): 0xee905e70
2026-04-15T11:48:22.928 [DEBUG] [Thread-18362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:48:22.946 [DEBUG] [Thread-18362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:48:22.946 [INFO] [Thread-18362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:48:22.949 [DEBUG] [Thread-18362] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:48:22.949 [DEBUG] [Thread-18362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:48:22.949 [DEBUG] [Thread-18362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:48:22.949 [DEBUG] [Thread-18362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:48:22.949 [DEBUG] [Thread-18362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:48:22.949 [DEBUG] [Thread-18362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:48:22.949 [DEBUG] [Thread-18362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:48:22.949 [DEBUG] [Thread-18362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:48:22.949 [DEBUG] [Thread-18362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:48:22.949 [DEBUG] [Thread-18362] [transport.py] [_log()] client lang: <none>
2026-04-15T11:48:22.949 [DEBUG] [Thread-18362] [transport.py] [_log()] server lang: <none>
2026-04-15T11:48:22.950 [DEBUG] [Thread-18362] [transport.py] [_log()] kex follows: False
2026-04-15T11:48:22.950 [DEBUG] [Thread-18362] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:48:22.950 [DEBUG] [Thread-18362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:48:22.950 [DEBUG] [Thread-18362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:48:22.950 [DEBUG] [Thread-18362] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:48:22.950 [DEBUG] [Thread-18362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:48:22.950 [DEBUG] [Thread-18362] [transport.py] [_log()] Compression: none
2026-04-15T11:48:22.950 [DEBUG] [Thread-18362] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:48:22.958 [DEBUG] [Thread-18362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:48:22.959 [DEBUG] [Thread-18362] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:48:22.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:48:22.959 [DEBUG] [Thread-18362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:48:22.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:48:22.960 [DEBUG] [Thread-18362] [transport.py] [_log()] userauth is OK
2026-04-15T11:48:22.960 [DEBUG] [Thread-18362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:48:22.960 [DEBUG] [Thread-18362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:48:22.960 [DEBUG] [Thread-18362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:48:22.960 [DEBUG] [Thread-18362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:48:22.995 [INFO] [Thread-18362] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:48:22.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:48:23.586 [DEBUG] [Thread-18362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:48:23.586 [DEBUG] [Thread-18362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:48:23.587 [DEBUG] [Thread-18362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:48:23.627 [DEBUG] [Thread-18362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:48:23.627 [DEBUG] [Thread-18362] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:48:23.630 [DEBUG] [Thread-18362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:48:23.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:48:23.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:48:23.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:48:23.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:48:23.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:48:23.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:48:23.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:48:23.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:48:23.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:48:23.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.408461 -999.00  +12.00  18.65     78   +8.30 1 2 1 1 1   888    0 4.60 42.47 ----- 16.9 18.6 295.6 28.7 18.4 -16.8 17.6 -16.4 16.7 -13.1 17.7 -12.5
2026-04-15T11:48:23.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:48:23.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:48:23.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.408461
2026-04-15T11:48:23.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:48:23.653 [DEBUG] [Thread-18362] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:48:23.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:48:23.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:48:23.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:48:23.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:48:23.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:47:56', tmtdew=5.27494, humidity=69.9366, cloud=0.0, wind=18.5267, temperature=12.1364, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:48:11.030', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:48:23.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:48:23.912 [DEBUG] [Thread-18365] [transport.py] [_log()] starting thread (client mode): 0xf1364310
2026-04-15T11:48:23.912 [DEBUG] [Thread-18365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:48:23.926 [DEBUG] [Thread-18365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:48:23.926 [INFO] [Thread-18365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:48:23.933 [DEBUG] [Thread-18365] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:48:23.933 [DEBUG] [Thread-18365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:48:23.934 [DEBUG] [Thread-18365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:48:23.934 [DEBUG] [Thread-18365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:48:23.934 [DEBUG] [Thread-18365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:48:23.934 [DEBUG] [Thread-18365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:48:23.934 [DEBUG] [Thread-18365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:48:23.934 [DEBUG] [Thread-18365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:48:23.934 [DEBUG] [Thread-18365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:48:23.934 [DEBUG] [Thread-18365] [transport.py] [_log()] client lang: <none>
2026-04-15T11:48:23.934 [DEBUG] [Thread-18365] [transport.py] [_log()] server lang: <none>
2026-04-15T11:48:23.934 [DEBUG] [Thread-18365] [transport.py] [_log()] kex follows: False
2026-04-15T11:48:23.934 [DEBUG] [Thread-18365] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:48:23.934 [DEBUG] [Thread-18365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:48:23.935 [DEBUG] [Thread-18365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:48:23.935 [DEBUG] [Thread-18365] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:48:23.935 [DEBUG] [Thread-18365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:48:23.935 [DEBUG] [Thread-18365] [transport.py] [_log()] Compression: none
2026-04-15T11:48:23.935 [DEBUG] [Thread-18365] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:48:23.992 [DEBUG] [Thread-18365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:48:23.992 [DEBUG] [Thread-18365] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:48:23.993 [DEBUG] [Thread-18365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:48:23.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:48:23.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:48:24.048 [DEBUG] [Thread-18365] [transport.py] [_log()] userauth is OK
2026-04-15T11:48:24.049 [DEBUG] [Thread-18365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:48:24.049 [DEBUG] [Thread-18365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:48:24.049 [DEBUG] [Thread-18365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:48:24.049 [DEBUG] [Thread-18365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:48:24.074 [INFO] [Thread-18365] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:48:24.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:48:24.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:48:24.905 [DEBUG] [Thread-18365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:48:24.905 [DEBUG] [Thread-18365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:48:24.953 [DEBUG] [Thread-18365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:48:24.953 [DEBUG] [Thread-18365] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:48:24.962 [DEBUG] [Thread-18365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:48:24.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:48:24.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')
2026-04-15T11:48:24.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
2026-04-15T11:48:24.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:48:24.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:48:24.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:48:24.996 [DEBUG] [Thread-18365] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:48:32.077 [DEBUG] [Thread-18367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:48:40.792 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:48:40.793 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:48:47.119 [DEBUG] [Thread-18368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:48:55.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:48:55.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:48:55.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
2026-04-15T11:48:56.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 48, 31), 5.18364, 70.3344, 0.0, 19.7615, 11.9539, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:48:56.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:48:31
2026-04-15T11:48:56.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:48:57.158 [DEBUG] [Thread-18369] [transport.py] [_log()] starting thread (client mode): 0xee91f610
2026-04-15T11:48:57.158 [DEBUG] [Thread-18369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:48:57.178 [DEBUG] [Thread-18369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:48:57.178 [INFO] [Thread-18369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:48:57.180 [DEBUG] [Thread-18369] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:48:57.180 [DEBUG] [Thread-18369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:48:57.181 [DEBUG] [Thread-18369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:48:57.181 [DEBUG] [Thread-18369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:48:57.181 [DEBUG] [Thread-18369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:48:57.181 [DEBUG] [Thread-18369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:48:57.181 [DEBUG] [Thread-18369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:48:57.181 [DEBUG] [Thread-18369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:48:57.181 [DEBUG] [Thread-18369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:48:57.181 [DEBUG] [Thread-18369] [transport.py] [_log()] client lang: <none>
2026-04-15T11:48:57.181 [DEBUG] [Thread-18369] [transport.py] [_log()] server lang: <none>
2026-04-15T11:48:57.181 [DEBUG] [Thread-18369] [transport.py] [_log()] kex follows: False
2026-04-15T11:48:57.181 [DEBUG] [Thread-18369] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:48:57.181 [DEBUG] [Thread-18369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:48:57.182 [DEBUG] [Thread-18369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:48:57.182 [DEBUG] [Thread-18369] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:48:57.182 [DEBUG] [Thread-18369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:48:57.182 [DEBUG] [Thread-18369] [transport.py] [_log()] Compression: none
2026-04-15T11:48:57.182 [DEBUG] [Thread-18369] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:48:57.196 [DEBUG] [Thread-18369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:48:57.196 [DEBUG] [Thread-18369] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:48:57.197 [DEBUG] [Thread-18369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:48:57.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:48:57.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:48:57.198 [DEBUG] [Thread-18369] [transport.py] [_log()] userauth is OK
2026-04-15T11:48:57.198 [DEBUG] [Thread-18369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:48:57.198 [DEBUG] [Thread-18369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:48:57.198 [DEBUG] [Thread-18369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:48:57.198 [DEBUG] [Thread-18369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:48:57.210 [INFO] [Thread-18369] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:48:57.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:48:57.772 [DEBUG] [Thread-18369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:48:57.772 [DEBUG] [Thread-18369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:48:57.773 [DEBUG] [Thread-18369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:48:57.813 [DEBUG] [Thread-18369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:48:57.813 [DEBUG] [Thread-18369] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:48:57.816 [DEBUG] [Thread-18369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:48:57.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:48:57.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:48:57.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:48:57.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:48:57.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:48:57.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:48:57.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:48:57.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:48:57.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:48:57.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.408808 -999.00  +12.00  14.66     77   +8.20 1 2 1 1 1   888    0 4.53 42.28 ----- 19.3 14.7 295.7 20.9 18.2 -15.2 17.4 -15.4 16.6 -12.0 17.6 -11.1
2026-04-15T11:48:57.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:48:57.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:48:57.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.408808
2026-04-15T11:48:57.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:48:57.842 [DEBUG] [Thread-18369] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:48:57.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:48:57.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:48:57.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:48:57.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:48:57.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:48:31', tmtdew=5.18364, humidity=70.3344, cloud=0.0, wind=19.7615, temperature=11.9539, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:48:41.011', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:48:58.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:48:58.098 [DEBUG] [Thread-18372] [transport.py] [_log()] starting thread (client mode): 0xf13e2f20
2026-04-15T11:48:58.098 [DEBUG] [Thread-18372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:48:58.112 [DEBUG] [Thread-18372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:48:58.112 [INFO] [Thread-18372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:48:58.119 [DEBUG] [Thread-18372] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:48:58.119 [DEBUG] [Thread-18372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:48:58.120 [DEBUG] [Thread-18372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:48:58.120 [DEBUG] [Thread-18372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:48:58.120 [DEBUG] [Thread-18372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:48:58.120 [DEBUG] [Thread-18372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:48:58.120 [DEBUG] [Thread-18372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:48:58.120 [DEBUG] [Thread-18372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:48:58.120 [DEBUG] [Thread-18372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:48:58.120 [DEBUG] [Thread-18372] [transport.py] [_log()] client lang: <none>
2026-04-15T11:48:58.120 [DEBUG] [Thread-18372] [transport.py] [_log()] server lang: <none>
2026-04-15T11:48:58.120 [DEBUG] [Thread-18372] [transport.py] [_log()] kex follows: False
2026-04-15T11:48:58.120 [DEBUG] [Thread-18372] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:48:58.121 [DEBUG] [Thread-18372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:48:58.121 [DEBUG] [Thread-18372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:48:58.121 [DEBUG] [Thread-18372] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:48:58.121 [DEBUG] [Thread-18372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:48:58.121 [DEBUG] [Thread-18372] [transport.py] [_log()] Compression: none
2026-04-15T11:48:58.121 [DEBUG] [Thread-18372] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:48:58.175 [DEBUG] [Thread-18372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:48:58.176 [DEBUG] [Thread-18372] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:48:58.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:48:58.176 [DEBUG] [Thread-18372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:48:58.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:48:58.232 [DEBUG] [Thread-18372] [transport.py] [_log()] userauth is OK
2026-04-15T11:48:58.232 [DEBUG] [Thread-18372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:48:58.232 [DEBUG] [Thread-18372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:48:58.233 [DEBUG] [Thread-18372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:48:58.233 [DEBUG] [Thread-18372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:48:58.260 [INFO] [Thread-18372] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:48:58.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:48:58.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:48:59.066 [DEBUG] [Thread-18372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:48:59.066 [DEBUG] [Thread-18372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:48:59.114 [DEBUG] [Thread-18372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:48:59.115 [DEBUG] [Thread-18372] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:48:59.124 [DEBUG] [Thread-18372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:48:59.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:48:59.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')
2026-04-15T11:48:59.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
2026-04-15T11:48:59.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:48:59.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:48:59.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:48:59.158 [DEBUG] [Thread-18372] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:49:02.149 [DEBUG] [Thread-18374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:49:11.287 [DEBUG] [Thread-18375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:49:17.192 [DEBUG] [Thread-18376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:49:29.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:49:29.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:49:29.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:49:30.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 49, 7), 5.10984, 70.6826, 0.0, 17.5741, 11.9207, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:49:30.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:49:07
2026-04-15T11:49:30.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:49:31.337 [DEBUG] [Thread-18377] [transport.py] [_log()] starting thread (client mode): 0xf13e3340
2026-04-15T11:49:31.337 [DEBUG] [Thread-18377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:49:31.354 [DEBUG] [Thread-18377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:49:31.354 [INFO] [Thread-18377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:49:31.357 [DEBUG] [Thread-18377] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:49:31.357 [DEBUG] [Thread-18377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:49:31.357 [DEBUG] [Thread-18377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:49:31.357 [DEBUG] [Thread-18377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:49:31.357 [DEBUG] [Thread-18377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:49:31.357 [DEBUG] [Thread-18377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:49:31.357 [DEBUG] [Thread-18377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:49:31.357 [DEBUG] [Thread-18377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:49:31.357 [DEBUG] [Thread-18377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:49:31.357 [DEBUG] [Thread-18377] [transport.py] [_log()] client lang: <none>
2026-04-15T11:49:31.357 [DEBUG] [Thread-18377] [transport.py] [_log()] server lang: <none>
2026-04-15T11:49:31.358 [DEBUG] [Thread-18377] [transport.py] [_log()] kex follows: False
2026-04-15T11:49:31.358 [DEBUG] [Thread-18377] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:49:31.358 [DEBUG] [Thread-18377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:49:31.358 [DEBUG] [Thread-18377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:49:31.358 [DEBUG] [Thread-18377] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:49:31.358 [DEBUG] [Thread-18377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:49:31.358 [DEBUG] [Thread-18377] [transport.py] [_log()] Compression: none
2026-04-15T11:49:31.358 [DEBUG] [Thread-18377] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:49:31.374 [DEBUG] [Thread-18377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:49:31.374 [DEBUG] [Thread-18377] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:49:31.375 [DEBUG] [Thread-18377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:49:31.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:49:31.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:49:31.376 [DEBUG] [Thread-18377] [transport.py] [_log()] userauth is OK
2026-04-15T11:49:31.376 [DEBUG] [Thread-18377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:49:31.376 [DEBUG] [Thread-18377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:49:31.376 [DEBUG] [Thread-18377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:49:31.376 [DEBUG] [Thread-18377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:49:31.398 [INFO] [Thread-18377] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:49:31.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:49:31.957 [DEBUG] [Thread-18377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:49:31.957 [DEBUG] [Thread-18377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:49:31.958 [DEBUG] [Thread-18377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:49:31.998 [DEBUG] [Thread-18377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:49:31.998 [DEBUG] [Thread-18377] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:49:32.000 [DEBUG] [Thread-18377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:49:32.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:49:32.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:49:32.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:49:32.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:49:32.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:49:32.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:49:32.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:49:32.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:49:32.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:49:32.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.409155 -999.00  +12.30  16.16     79   +8.80 1 2 1 1 1   888    0 4.60 44.64 ----- 25.1 16.2 315.4 21.3 18.2 -13.1 17.4 -13.4 16.6 -11.9 17.6 -9.0
2026-04-15T11:49:32.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:49:32.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:49:32.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.409155
2026-04-15T11:49:32.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:49:32.025 [DEBUG] [Thread-18377] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:49:32.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:49:32.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:49:32.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:49:32.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:49:32.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:49:07', tmtdew=5.10984, humidity=70.6826, cloud=0.0, wind=17.5741, temperature=11.9207, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:49:10.992', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:49:32.223 [DEBUG] [Thread-18380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:49:32.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:49:32.279 [DEBUG] [Thread-18381] [transport.py] [_log()] starting thread (client mode): 0xf1331870
2026-04-15T11:49:32.279 [DEBUG] [Thread-18381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:49:32.292 [DEBUG] [Thread-18381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:49:32.293 [INFO] [Thread-18381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:49:32.300 [DEBUG] [Thread-18381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:49:32.300 [DEBUG] [Thread-18381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:49:32.300 [DEBUG] [Thread-18381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:49:32.300 [DEBUG] [Thread-18381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:49:32.300 [DEBUG] [Thread-18381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:49:32.300 [DEBUG] [Thread-18381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:49:32.300 [DEBUG] [Thread-18381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:49:32.301 [DEBUG] [Thread-18381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:49:32.301 [DEBUG] [Thread-18381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:49:32.301 [DEBUG] [Thread-18381] [transport.py] [_log()] client lang: <none>
2026-04-15T11:49:32.301 [DEBUG] [Thread-18381] [transport.py] [_log()] server lang: <none>
2026-04-15T11:49:32.301 [DEBUG] [Thread-18381] [transport.py] [_log()] kex follows: False
2026-04-15T11:49:32.301 [DEBUG] [Thread-18381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:49:32.301 [DEBUG] [Thread-18381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:49:32.301 [DEBUG] [Thread-18381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:49:32.301 [DEBUG] [Thread-18381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:49:32.301 [DEBUG] [Thread-18381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:49:32.301 [DEBUG] [Thread-18381] [transport.py] [_log()] Compression: none
2026-04-15T11:49:32.301 [DEBUG] [Thread-18381] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:49:32.359 [DEBUG] [Thread-18381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:49:32.359 [DEBUG] [Thread-18381] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:49:32.359 [DEBUG] [Thread-18381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:49:32.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:49:32.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:49:32.416 [DEBUG] [Thread-18381] [transport.py] [_log()] userauth is OK
2026-04-15T11:49:32.417 [DEBUG] [Thread-18381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:49:32.417 [DEBUG] [Thread-18381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:49:32.417 [DEBUG] [Thread-18381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:49:32.417 [DEBUG] [Thread-18381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:49:32.441 [INFO] [Thread-18381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:49:32.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:49:32.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:49:33.278 [DEBUG] [Thread-18381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:49:33.278 [DEBUG] [Thread-18381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:49:33.326 [DEBUG] [Thread-18381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:49:33.326 [DEBUG] [Thread-18381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:49:33.335 [DEBUG] [Thread-18381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:49:33.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:49:33.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')
2026-04-15T11:49:33.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
2026-04-15T11:49:33.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:49:33.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:49:33.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:49:33.370 [DEBUG] [Thread-18381] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:49:40.934 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:49:40.935 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:49:47.261 [DEBUG] [Thread-18383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:50:02.293 [DEBUG] [Thread-18384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:50:03.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:50:03.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:50:03.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
2026-04-15T11:50:04.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 49, 42), 5.00561, 71.3928, 0.0, 20.5013, 12.075, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:50:04.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:49:42
2026-04-15T11:50:05.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:50:05.506 [DEBUG] [Thread-18385] [transport.py] [_log()] starting thread (client mode): 0xf13efbe0
2026-04-15T11:50:05.506 [DEBUG] [Thread-18385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:50:05.519 [DEBUG] [Thread-18385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:50:05.519 [INFO] [Thread-18385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:50:05.522 [DEBUG] [Thread-18385] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:50:05.522 [DEBUG] [Thread-18385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:50:05.522 [DEBUG] [Thread-18385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:50:05.523 [DEBUG] [Thread-18385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:50:05.523 [DEBUG] [Thread-18385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:50:05.523 [DEBUG] [Thread-18385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:50:05.523 [DEBUG] [Thread-18385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:50:05.523 [DEBUG] [Thread-18385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:50:05.523 [DEBUG] [Thread-18385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:50:05.523 [DEBUG] [Thread-18385] [transport.py] [_log()] client lang: <none>
2026-04-15T11:50:05.523 [DEBUG] [Thread-18385] [transport.py] [_log()] server lang: <none>
2026-04-15T11:50:05.523 [DEBUG] [Thread-18385] [transport.py] [_log()] kex follows: False
2026-04-15T11:50:05.523 [DEBUG] [Thread-18385] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:50:05.523 [DEBUG] [Thread-18385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:50:05.524 [DEBUG] [Thread-18385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:50:05.524 [DEBUG] [Thread-18385] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:50:05.524 [DEBUG] [Thread-18385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:50:05.524 [DEBUG] [Thread-18385] [transport.py] [_log()] Compression: none
2026-04-15T11:50:05.524 [DEBUG] [Thread-18385] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:50:05.532 [DEBUG] [Thread-18385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:50:05.532 [DEBUG] [Thread-18385] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:50:05.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:50:05.533 [DEBUG] [Thread-18385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:50:05.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:50:05.534 [DEBUG] [Thread-18385] [transport.py] [_log()] userauth is OK
2026-04-15T11:50:05.534 [DEBUG] [Thread-18385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:50:05.534 [DEBUG] [Thread-18385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:50:05.534 [DEBUG] [Thread-18385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:50:05.534 [DEBUG] [Thread-18385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:50:05.551 [INFO] [Thread-18385] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:50:05.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:50:06.142 [DEBUG] [Thread-18385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:50:06.142 [DEBUG] [Thread-18385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:50:06.142 [DEBUG] [Thread-18385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:50:06.183 [DEBUG] [Thread-18385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:50:06.183 [DEBUG] [Thread-18385] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:50:06.186 [DEBUG] [Thread-18385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:50:06.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:50:06.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:50:06.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:50:06.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:50:06.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:50:06.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:50:06.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:50:06.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:50:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:50:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.409502 -999.00  +12.00  19.05     77   +8.20 1 2 1 1 1   888    0 4.70 45.45 ----- 21.9 19.1 301.0 28.6 18.0 -12.6 17.3 -13.0 16.6 -9.5 17.4 -8.7
2026-04-15T11:50:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:50:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:50:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.409502
2026-04-15T11:50:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:50:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:50:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:50:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:50:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T11:50:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:49:42', tmtdew=5.00561, humidity=71.3928, cloud=0.0, wind=20.5013, temperature=12.075, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:49:40.973', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:50:06.237 [DEBUG] [Thread-18385] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:50:06.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:50:06.447 [DEBUG] [Thread-18388] [transport.py] [_log()] starting thread (client mode): 0xf13e3880
2026-04-15T11:50:06.448 [DEBUG] [Thread-18388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:50:06.462 [DEBUG] [Thread-18388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:50:06.463 [INFO] [Thread-18388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:50:06.470 [DEBUG] [Thread-18388] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:50:06.470 [DEBUG] [Thread-18388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:50:06.470 [DEBUG] [Thread-18388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:50:06.470 [DEBUG] [Thread-18388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:50:06.470 [DEBUG] [Thread-18388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:50:06.470 [DEBUG] [Thread-18388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:50:06.470 [DEBUG] [Thread-18388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:50:06.470 [DEBUG] [Thread-18388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:50:06.470 [DEBUG] [Thread-18388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:50:06.470 [DEBUG] [Thread-18388] [transport.py] [_log()] client lang: <none>
2026-04-15T11:50:06.471 [DEBUG] [Thread-18388] [transport.py] [_log()] server lang: <none>
2026-04-15T11:50:06.471 [DEBUG] [Thread-18388] [transport.py] [_log()] kex follows: False
2026-04-15T11:50:06.471 [DEBUG] [Thread-18388] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:50:06.471 [DEBUG] [Thread-18388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:50:06.471 [DEBUG] [Thread-18388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:50:06.471 [DEBUG] [Thread-18388] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:50:06.471 [DEBUG] [Thread-18388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:50:06.471 [DEBUG] [Thread-18388] [transport.py] [_log()] Compression: none
2026-04-15T11:50:06.471 [DEBUG] [Thread-18388] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:50:06.526 [DEBUG] [Thread-18388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:50:06.527 [DEBUG] [Thread-18388] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:50:06.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:50:06.527 [DEBUG] [Thread-18388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:50:06.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:50:06.583 [DEBUG] [Thread-18388] [transport.py] [_log()] userauth is OK
2026-04-15T11:50:06.583 [DEBUG] [Thread-18388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:50:06.584 [DEBUG] [Thread-18388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:50:06.584 [DEBUG] [Thread-18388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:50:06.584 [DEBUG] [Thread-18388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:50:06.610 [INFO] [Thread-18388] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:50:06.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:50:06.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:50:07.460 [DEBUG] [Thread-18388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:50:07.461 [DEBUG] [Thread-18388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:50:07.508 [DEBUG] [Thread-18388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:50:07.508 [DEBUG] [Thread-18388] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:50:07.517 [DEBUG] [Thread-18388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:50:07.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:50:07.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')
2026-04-15T11:50:07.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
2026-04-15T11:50:07.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:50:07.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:50:07.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:50:07.552 [DEBUG] [Thread-18388] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:50:11.403 [DEBUG] [Thread-18390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:50:17.325 [DEBUG] [Thread-18391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:50:32.370 [DEBUG] [Thread-18392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:50:37.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:50:37.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:50:37.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
2026-04-15T11:50:38.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 50, 18), 4.82673, 72.3596, 0.0, 22.0032, 12.0696, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:50:38.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:50:18
2026-04-15T11:50:39.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:50:39.693 [DEBUG] [Thread-18393] [transport.py] [_log()] starting thread (client mode): 0xee98ef50
2026-04-15T11:50:39.693 [DEBUG] [Thread-18393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:50:39.711 [DEBUG] [Thread-18393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:50:39.711 [INFO] [Thread-18393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:50:39.714 [DEBUG] [Thread-18393] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:50:39.714 [DEBUG] [Thread-18393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:50:39.714 [DEBUG] [Thread-18393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:50:39.714 [DEBUG] [Thread-18393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:50:39.714 [DEBUG] [Thread-18393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:50:39.715 [DEBUG] [Thread-18393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:50:39.715 [DEBUG] [Thread-18393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:50:39.715 [DEBUG] [Thread-18393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:50:39.715 [DEBUG] [Thread-18393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:50:39.715 [DEBUG] [Thread-18393] [transport.py] [_log()] client lang: <none>
2026-04-15T11:50:39.715 [DEBUG] [Thread-18393] [transport.py] [_log()] server lang: <none>
2026-04-15T11:50:39.715 [DEBUG] [Thread-18393] [transport.py] [_log()] kex follows: False
2026-04-15T11:50:39.715 [DEBUG] [Thread-18393] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:50:39.715 [DEBUG] [Thread-18393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:50:39.715 [DEBUG] [Thread-18393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:50:39.715 [DEBUG] [Thread-18393] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:50:39.716 [DEBUG] [Thread-18393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:50:39.716 [DEBUG] [Thread-18393] [transport.py] [_log()] Compression: none
2026-04-15T11:50:39.716 [DEBUG] [Thread-18393] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:50:39.733 [DEBUG] [Thread-18393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:50:39.733 [DEBUG] [Thread-18393] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:50:39.734 [DEBUG] [Thread-18393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:50:39.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:50:39.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:50:39.735 [DEBUG] [Thread-18393] [transport.py] [_log()] userauth is OK
2026-04-15T11:50:39.735 [DEBUG] [Thread-18393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:50:39.735 [DEBUG] [Thread-18393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:50:39.735 [DEBUG] [Thread-18393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:50:39.735 [DEBUG] [Thread-18393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:50:39.760 [INFO] [Thread-18393] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:50:39.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:50:40.369 [DEBUG] [Thread-18393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:50:40.369 [DEBUG] [Thread-18393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:50:40.370 [DEBUG] [Thread-18393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:50:40.410 [DEBUG] [Thread-18393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:50:40.410 [DEBUG] [Thread-18393] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:50:40.413 [DEBUG] [Thread-18393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:50:40.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:50:40.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:50:40.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:50:40.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:50:40.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:50:40.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:50:40.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:50:40.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:50:40.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:50:40.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.409850 -999.00  +11.90  20.00     77   +8.10 1 3 1 1 1   888    0 4.59 42.45 ----- 25.1 20.0 291.2 23.7 18.0 -10.4 17.2 -11.5 16.6 -8.2 17.4 -7.7
2026-04-15T11:50:40.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:50:40.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:50:40.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.409850
2026-04-15T11:50:40.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:50:40.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:50:40.438 [DEBUG] [Thread-18393] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:50:40.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:50:40.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:50:40.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:50:40.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:50:18', tmtdew=4.82673, humidity=72.3596, cloud=0.0, wind=22.0032, temperature=12.0696, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:50:11.040', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:50:40.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:50:40.703 [DEBUG] [Thread-18396] [transport.py] [_log()] starting thread (client mode): 0xf1367490
2026-04-15T11:50:40.703 [DEBUG] [Thread-18396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:50:40.717 [DEBUG] [Thread-18396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:50:40.717 [INFO] [Thread-18396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:50:40.724 [DEBUG] [Thread-18396] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:50:40.724 [DEBUG] [Thread-18396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:50:40.724 [DEBUG] [Thread-18396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:50:40.724 [DEBUG] [Thread-18396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:50:40.725 [DEBUG] [Thread-18396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:50:40.725 [DEBUG] [Thread-18396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:50:40.725 [DEBUG] [Thread-18396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:50:40.725 [DEBUG] [Thread-18396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:50:40.725 [DEBUG] [Thread-18396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:50:40.725 [DEBUG] [Thread-18396] [transport.py] [_log()] client lang: <none>
2026-04-15T11:50:40.725 [DEBUG] [Thread-18396] [transport.py] [_log()] server lang: <none>
2026-04-15T11:50:40.725 [DEBUG] [Thread-18396] [transport.py] [_log()] kex follows: False
2026-04-15T11:50:40.725 [DEBUG] [Thread-18396] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:50:40.725 [DEBUG] [Thread-18396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:50:40.725 [DEBUG] [Thread-18396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:50:40.725 [DEBUG] [Thread-18396] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:50:40.726 [DEBUG] [Thread-18396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:50:40.726 [DEBUG] [Thread-18396] [transport.py] [_log()] Compression: none
2026-04-15T11:50:40.726 [DEBUG] [Thread-18396] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:50:40.786 [DEBUG] [Thread-18396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:50:40.786 [DEBUG] [Thread-18396] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:50:40.787 [DEBUG] [Thread-18396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:50:40.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:50:40.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:50:40.845 [DEBUG] [Thread-18396] [transport.py] [_log()] userauth is OK
2026-04-15T11:50:40.845 [DEBUG] [Thread-18396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:50:40.845 [DEBUG] [Thread-18396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:50:40.846 [DEBUG] [Thread-18396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:50:40.846 [DEBUG] [Thread-18396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:50:40.870 [INFO] [Thread-18396] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:50:40.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:50:40.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:50:41.080 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:50:41.081 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:50:41.710 [DEBUG] [Thread-18396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:50:41.711 [DEBUG] [Thread-18396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:50:41.758 [DEBUG] [Thread-18396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:50:41.758 [DEBUG] [Thread-18396] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:50:41.767 [DEBUG] [Thread-18396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:50:41.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:50:41.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')
2026-04-15T11:50:41.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
2026-04-15T11:50:41.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:50:41.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:50:41.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:50:41.801 [DEBUG] [Thread-18396] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:50:47.400 [DEBUG] [Thread-18398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:51:02.445 [DEBUG] [Thread-18399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:51:11.517 [DEBUG] [Thread-18400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:51:11.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:51:11.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:51:11.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:51:13.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 50, 53), 4.81681, 72.388, 0.0, 20.5718, 12.4401, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:51:13.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:50:53
2026-04-15T11:51:13.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:51:14.010 [DEBUG] [Thread-18401] [transport.py] [_log()] starting thread (client mode): 0xee98ffa0
2026-04-15T11:51:14.010 [DEBUG] [Thread-18401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:51:14.025 [DEBUG] [Thread-18401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:51:14.025 [INFO] [Thread-18401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:51:14.027 [DEBUG] [Thread-18401] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:51:14.027 [DEBUG] [Thread-18401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:51:14.027 [DEBUG] [Thread-18401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:51:14.027 [DEBUG] [Thread-18401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:51:14.027 [DEBUG] [Thread-18401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:51:14.027 [DEBUG] [Thread-18401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:51:14.027 [DEBUG] [Thread-18401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:51:14.027 [DEBUG] [Thread-18401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:51:14.027 [DEBUG] [Thread-18401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:51:14.027 [DEBUG] [Thread-18401] [transport.py] [_log()] client lang: <none>
2026-04-15T11:51:14.027 [DEBUG] [Thread-18401] [transport.py] [_log()] server lang: <none>
2026-04-15T11:51:14.028 [DEBUG] [Thread-18401] [transport.py] [_log()] kex follows: False
2026-04-15T11:51:14.028 [DEBUG] [Thread-18401] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:51:14.028 [DEBUG] [Thread-18401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:51:14.028 [DEBUG] [Thread-18401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:51:14.028 [DEBUG] [Thread-18401] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:51:14.028 [DEBUG] [Thread-18401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:51:14.028 [DEBUG] [Thread-18401] [transport.py] [_log()] Compression: none
2026-04-15T11:51:14.028 [DEBUG] [Thread-18401] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:51:14.040 [DEBUG] [Thread-18401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:51:14.040 [DEBUG] [Thread-18401] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:51:14.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:51:14.041 [DEBUG] [Thread-18401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:51:14.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:51:14.042 [DEBUG] [Thread-18401] [transport.py] [_log()] userauth is OK
2026-04-15T11:51:14.042 [DEBUG] [Thread-18401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:51:14.042 [DEBUG] [Thread-18401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:51:14.042 [DEBUG] [Thread-18401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:51:14.042 [DEBUG] [Thread-18401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:51:14.059 [INFO] [Thread-18401] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:51:14.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:51:14.717 [DEBUG] [Thread-18401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:51:14.718 [DEBUG] [Thread-18401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:51:14.718 [DEBUG] [Thread-18401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:51:14.759 [DEBUG] [Thread-18401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:51:14.759 [DEBUG] [Thread-18401] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:51:14.765 [DEBUG] [Thread-18401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:51:14.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:51:14.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:51:14.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:51:14.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:51:14.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:51:14.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:51:14.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:51:14.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:51:14.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:51:14.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.410544 -999.00  +11.90  16.38     78   +8.30 1 3 1 1 1   888    0 4.60 42.56 ----- 19.1 16.4 295.8 24.7 17.9 -9.6 17.1 -9.9 16.6 -7.2 17.3 -7.1
2026-04-15T11:51:14.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:51:14.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:51:14.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.410544
2026-04-15T11:51:14.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:51:14.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:51:14.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:51:14.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:51:14.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:51:14.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:50:53', tmtdew=4.81681, humidity=72.388, cloud=0.0, wind=20.5718, temperature=12.4401, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:51:11.002', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:51:14.797 [DEBUG] [Thread-18401] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:51:15.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:51:15.053 [DEBUG] [Thread-18404] [transport.py] [_log()] starting thread (client mode): 0xf13e12a0
2026-04-15T11:51:15.053 [DEBUG] [Thread-18404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:51:15.067 [DEBUG] [Thread-18404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:51:15.067 [INFO] [Thread-18404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:51:15.074 [DEBUG] [Thread-18404] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:51:15.074 [DEBUG] [Thread-18404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:51:15.074 [DEBUG] [Thread-18404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:51:15.074 [DEBUG] [Thread-18404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:51:15.074 [DEBUG] [Thread-18404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:51:15.075 [DEBUG] [Thread-18404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:51:15.075 [DEBUG] [Thread-18404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:51:15.075 [DEBUG] [Thread-18404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:51:15.075 [DEBUG] [Thread-18404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:51:15.075 [DEBUG] [Thread-18404] [transport.py] [_log()] client lang: <none>
2026-04-15T11:51:15.075 [DEBUG] [Thread-18404] [transport.py] [_log()] server lang: <none>
2026-04-15T11:51:15.075 [DEBUG] [Thread-18404] [transport.py] [_log()] kex follows: False
2026-04-15T11:51:15.075 [DEBUG] [Thread-18404] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:51:15.075 [DEBUG] [Thread-18404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:51:15.075 [DEBUG] [Thread-18404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:51:15.075 [DEBUG] [Thread-18404] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:51:15.076 [DEBUG] [Thread-18404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:51:15.076 [DEBUG] [Thread-18404] [transport.py] [_log()] Compression: none
2026-04-15T11:51:15.076 [DEBUG] [Thread-18404] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:51:15.133 [DEBUG] [Thread-18404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:51:15.133 [DEBUG] [Thread-18404] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:51:15.134 [DEBUG] [Thread-18404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:51:15.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:51:15.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:51:15.190 [DEBUG] [Thread-18404] [transport.py] [_log()] userauth is OK
2026-04-15T11:51:15.191 [DEBUG] [Thread-18404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:51:15.191 [DEBUG] [Thread-18404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:51:15.191 [DEBUG] [Thread-18404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:51:15.191 [DEBUG] [Thread-18404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:51:15.216 [INFO] [Thread-18404] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:51:15.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:51:15.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:51:16.050 [DEBUG] [Thread-18404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:51:16.050 [DEBUG] [Thread-18404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:51:16.098 [DEBUG] [Thread-18404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:51:16.098 [DEBUG] [Thread-18404] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:51:16.108 [DEBUG] [Thread-18404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:51:16.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:51:16.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')
2026-04-15T11:51:16.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
2026-04-15T11:51:16.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:51:16.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:51:16.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:51:16.145 [DEBUG] [Thread-18404] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:51:17.477 [DEBUG] [Thread-18406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:51:32.522 [DEBUG] [Thread-18407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:51:41.222 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:51:41.223 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:51:46.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:51:46.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:51:46.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:51:47.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 51, 29), 4.7246, 72.6111, 0.0, 19.5858, 11.8534, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:51:47.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:51:29
2026-04-15T11:51:47.554 [DEBUG] [Thread-18408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:51:47.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:51:48.241 [DEBUG] [Thread-18409] [transport.py] [_log()] starting thread (client mode): 0xf13fd7b0
2026-04-15T11:51:48.242 [DEBUG] [Thread-18409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:51:48.261 [DEBUG] [Thread-18409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:51:48.261 [INFO] [Thread-18409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:51:48.264 [DEBUG] [Thread-18409] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:51:48.264 [DEBUG] [Thread-18409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:51:48.264 [DEBUG] [Thread-18409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:51:48.264 [DEBUG] [Thread-18409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:51:48.264 [DEBUG] [Thread-18409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:51:48.264 [DEBUG] [Thread-18409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:51:48.264 [DEBUG] [Thread-18409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:51:48.264 [DEBUG] [Thread-18409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:51:48.265 [DEBUG] [Thread-18409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:51:48.265 [DEBUG] [Thread-18409] [transport.py] [_log()] client lang: <none>
2026-04-15T11:51:48.265 [DEBUG] [Thread-18409] [transport.py] [_log()] server lang: <none>
2026-04-15T11:51:48.265 [DEBUG] [Thread-18409] [transport.py] [_log()] kex follows: False
2026-04-15T11:51:48.265 [DEBUG] [Thread-18409] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:51:48.265 [DEBUG] [Thread-18409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:51:48.265 [DEBUG] [Thread-18409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:51:48.265 [DEBUG] [Thread-18409] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:51:48.265 [DEBUG] [Thread-18409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:51:48.265 [DEBUG] [Thread-18409] [transport.py] [_log()] Compression: none
2026-04-15T11:51:48.265 [DEBUG] [Thread-18409] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:51:48.287 [DEBUG] [Thread-18409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:51:48.287 [DEBUG] [Thread-18409] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:51:48.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:51:48.288 [DEBUG] [Thread-18409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:51:48.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:51:48.289 [DEBUG] [Thread-18409] [transport.py] [_log()] userauth is OK
2026-04-15T11:51:48.289 [DEBUG] [Thread-18409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:51:48.289 [DEBUG] [Thread-18409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:51:48.289 [DEBUG] [Thread-18409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:51:48.289 [DEBUG] [Thread-18409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:51:48.314 [INFO] [Thread-18409] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:51:48.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:51:48.895 [DEBUG] [Thread-18409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:51:48.895 [DEBUG] [Thread-18409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:51:48.896 [DEBUG] [Thread-18409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:51:48.936 [DEBUG] [Thread-18409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:51:48.936 [DEBUG] [Thread-18409] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:51:48.938 [DEBUG] [Thread-18409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:51:48.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:51:48.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:51:48.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:51:48.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:51:48.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:51:48.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:51:48.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:51:48.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:51:48.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:51:48.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.410891 -999.00  +12.00  13.08     79   +8.60 1 3 1 1 1   888    0 4.58 40.82 ----- 14.6 13.1 309.8 23.1 17.8 -9.0 17.2 -9.2 16.6 -8.4 17.3 -6.7
2026-04-15T11:51:48.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:51:48.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:51:48.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.410891
2026-04-15T11:51:48.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:51:48.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:51:48.959 [DEBUG] [Thread-18409] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:51:48.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:51:48.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:51:48.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:51:48.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:51:29', tmtdew=4.7246, humidity=72.6111, cloud=0.0, wind=19.5858, temperature=11.8534, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:51:40.982', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:51:49.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:51:49.212 [DEBUG] [Thread-18412] [transport.py] [_log()] starting thread (client mode): 0xf13fd8a0
2026-04-15T11:51:49.213 [DEBUG] [Thread-18412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:51:49.227 [DEBUG] [Thread-18412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:51:49.227 [INFO] [Thread-18412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:51:49.234 [DEBUG] [Thread-18412] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:51:49.234 [DEBUG] [Thread-18412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:51:49.235 [DEBUG] [Thread-18412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:51:49.235 [DEBUG] [Thread-18412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:51:49.235 [DEBUG] [Thread-18412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:51:49.235 [DEBUG] [Thread-18412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:51:49.235 [DEBUG] [Thread-18412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:51:49.235 [DEBUG] [Thread-18412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:51:49.235 [DEBUG] [Thread-18412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:51:49.235 [DEBUG] [Thread-18412] [transport.py] [_log()] client lang: <none>
2026-04-15T11:51:49.235 [DEBUG] [Thread-18412] [transport.py] [_log()] server lang: <none>
2026-04-15T11:51:49.235 [DEBUG] [Thread-18412] [transport.py] [_log()] kex follows: False
2026-04-15T11:51:49.235 [DEBUG] [Thread-18412] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:51:49.235 [DEBUG] [Thread-18412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:51:49.236 [DEBUG] [Thread-18412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:51:49.236 [DEBUG] [Thread-18412] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:51:49.236 [DEBUG] [Thread-18412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:51:49.236 [DEBUG] [Thread-18412] [transport.py] [_log()] Compression: none
2026-04-15T11:51:49.236 [DEBUG] [Thread-18412] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:51:49.297 [DEBUG] [Thread-18412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:51:49.298 [DEBUG] [Thread-18412] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:51:49.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:51:49.298 [DEBUG] [Thread-18412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:51:49.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:51:49.354 [DEBUG] [Thread-18412] [transport.py] [_log()] userauth is OK
2026-04-15T11:51:49.354 [DEBUG] [Thread-18412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:51:49.354 [DEBUG] [Thread-18412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:51:49.354 [DEBUG] [Thread-18412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:51:49.354 [DEBUG] [Thread-18412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:51:49.379 [INFO] [Thread-18412] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:51:49.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:51:49.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:51:50.237 [DEBUG] [Thread-18412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:51:50.237 [DEBUG] [Thread-18412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:51:50.285 [DEBUG] [Thread-18412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:51:50.285 [DEBUG] [Thread-18412] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:51:50.294 [DEBUG] [Thread-18412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:51:50.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:51:50.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')
2026-04-15T11:51:50.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
2026-04-15T11:51:50.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:51:50.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:51:50.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:51:50.329 [DEBUG] [Thread-18412] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:52:02.586 [DEBUG] [Thread-18414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:52:11.628 [DEBUG] [Thread-18415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:52:17.631 [DEBUG] [Thread-18416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:52:20.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:52:20.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:52:20.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
2026-04-15T11:52:21.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 52, 4), 4.73349, 72.5612, 0.0, 19.1624, 11.8202, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:52:21.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:52:04
2026-04-15T11:52:22.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:52:22.501 [DEBUG] [Thread-18417] [transport.py] [_log()] starting thread (client mode): 0xee98ef80
2026-04-15T11:52:22.502 [DEBUG] [Thread-18417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:52:22.522 [DEBUG] [Thread-18417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:52:22.522 [INFO] [Thread-18417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:52:22.525 [DEBUG] [Thread-18417] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:52:22.525 [DEBUG] [Thread-18417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:52:22.525 [DEBUG] [Thread-18417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:52:22.526 [DEBUG] [Thread-18417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:52:22.526 [DEBUG] [Thread-18417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:52:22.526 [DEBUG] [Thread-18417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:52:22.526 [DEBUG] [Thread-18417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:52:22.526 [DEBUG] [Thread-18417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:52:22.526 [DEBUG] [Thread-18417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:52:22.526 [DEBUG] [Thread-18417] [transport.py] [_log()] client lang: <none>
2026-04-15T11:52:22.526 [DEBUG] [Thread-18417] [transport.py] [_log()] server lang: <none>
2026-04-15T11:52:22.526 [DEBUG] [Thread-18417] [transport.py] [_log()] kex follows: False
2026-04-15T11:52:22.526 [DEBUG] [Thread-18417] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:52:22.526 [DEBUG] [Thread-18417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:52:22.527 [DEBUG] [Thread-18417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:52:22.527 [DEBUG] [Thread-18417] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:52:22.527 [DEBUG] [Thread-18417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:52:22.527 [DEBUG] [Thread-18417] [transport.py] [_log()] Compression: none
2026-04-15T11:52:22.527 [DEBUG] [Thread-18417] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:52:22.543 [DEBUG] [Thread-18417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:52:22.544 [DEBUG] [Thread-18417] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:52:22.544 [DEBUG] [Thread-18417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:52:22.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:52:22.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:52:22.545 [DEBUG] [Thread-18417] [transport.py] [_log()] userauth is OK
2026-04-15T11:52:22.545 [DEBUG] [Thread-18417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:52:22.546 [DEBUG] [Thread-18417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:52:22.546 [DEBUG] [Thread-18417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:52:22.546 [DEBUG] [Thread-18417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:52:22.563 [INFO] [Thread-18417] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:52:22.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:52:23.112 [DEBUG] [Thread-18417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:52:23.112 [DEBUG] [Thread-18417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:52:23.113 [DEBUG] [Thread-18417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:52:23.153 [DEBUG] [Thread-18417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:52:23.153 [DEBUG] [Thread-18417] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:52:23.155 [DEBUG] [Thread-18417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:52:23.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:52:23.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:52:23.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:52:23.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:52:23.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:52:23.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:52:23.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:52:23.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:52:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:52:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.411238 -999.00  +12.00  19.43     78   +8.40 1 3 1 1 1   888    0 4.59 40.10 ----- 19.4 19.4 290.4 23.3 17.8 -8.4 17.2 -9.1 16.6 -6.5 17.4 -7.4
2026-04-15T11:52:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:52:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:52:23.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.411238
2026-04-15T11:52:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:52:23.179 [DEBUG] [Thread-18417] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:52:23.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:52:23.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:52:23.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:52:23.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:52:23.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:52:04', tmtdew=4.73349, humidity=72.5612, cloud=0.0, wind=19.1624, temperature=11.8202, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:52:10.963', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:52:23.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:52:23.434 [DEBUG] [Thread-18420] [transport.py] [_log()] starting thread (client mode): 0xee98edd0
2026-04-15T11:52:23.434 [DEBUG] [Thread-18420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:52:23.452 [DEBUG] [Thread-18420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:52:23.452 [INFO] [Thread-18420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:52:23.459 [DEBUG] [Thread-18420] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:52:23.459 [DEBUG] [Thread-18420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:52:23.459 [DEBUG] [Thread-18420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:52:23.459 [DEBUG] [Thread-18420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:52:23.460 [DEBUG] [Thread-18420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:52:23.460 [DEBUG] [Thread-18420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:52:23.460 [DEBUG] [Thread-18420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:52:23.460 [DEBUG] [Thread-18420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:52:23.460 [DEBUG] [Thread-18420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:52:23.460 [DEBUG] [Thread-18420] [transport.py] [_log()] client lang: <none>
2026-04-15T11:52:23.460 [DEBUG] [Thread-18420] [transport.py] [_log()] server lang: <none>
2026-04-15T11:52:23.460 [DEBUG] [Thread-18420] [transport.py] [_log()] kex follows: False
2026-04-15T11:52:23.460 [DEBUG] [Thread-18420] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:52:23.460 [DEBUG] [Thread-18420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:52:23.460 [DEBUG] [Thread-18420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:52:23.460 [DEBUG] [Thread-18420] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:52:23.461 [DEBUG] [Thread-18420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:52:23.461 [DEBUG] [Thread-18420] [transport.py] [_log()] Compression: none
2026-04-15T11:52:23.461 [DEBUG] [Thread-18420] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:52:23.521 [DEBUG] [Thread-18420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:52:23.521 [DEBUG] [Thread-18420] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:52:23.522 [DEBUG] [Thread-18420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:52:23.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:52:23.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:52:23.577 [DEBUG] [Thread-18420] [transport.py] [_log()] userauth is OK
2026-04-15T11:52:23.578 [DEBUG] [Thread-18420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:52:23.578 [DEBUG] [Thread-18420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:52:23.578 [DEBUG] [Thread-18420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:52:23.578 [DEBUG] [Thread-18420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:52:23.603 [INFO] [Thread-18420] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:52:23.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:52:23.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:52:24.405 [DEBUG] [Thread-18420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:52:24.405 [DEBUG] [Thread-18420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:52:24.453 [DEBUG] [Thread-18420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:52:24.453 [DEBUG] [Thread-18420] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:52:24.462 [DEBUG] [Thread-18420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:52:24.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:52:24.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')
2026-04-15T11:52:24.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') -> 00000000
2026-04-15T11:52:24.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:52:24.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:52:24.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:52:24.497 [DEBUG] [Thread-18420] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:52:32.663 [DEBUG] [Thread-18422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:52:41.363 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:52:41.364 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:52:47.708 [DEBUG] [Thread-18423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:52:54.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:52:54.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:52:54.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
2026-04-15T11:52:55.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 52, 40), 4.72452, 72.7857, 0.0, 14.8212, 12.1082, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:52:55.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:52:40
2026-04-15T11:52:56.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:52:56.623 [DEBUG] [Thread-18424] [transport.py] [_log()] starting thread (client mode): 0xf13ef310
2026-04-15T11:52:56.623 [DEBUG] [Thread-18424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:52:56.643 [DEBUG] [Thread-18424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:52:56.643 [INFO] [Thread-18424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:52:56.646 [DEBUG] [Thread-18424] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:52:56.646 [DEBUG] [Thread-18424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:52:56.646 [DEBUG] [Thread-18424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:52:56.646 [DEBUG] [Thread-18424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:52:56.646 [DEBUG] [Thread-18424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:52:56.646 [DEBUG] [Thread-18424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:52:56.646 [DEBUG] [Thread-18424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:52:56.646 [DEBUG] [Thread-18424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:52:56.646 [DEBUG] [Thread-18424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:52:56.647 [DEBUG] [Thread-18424] [transport.py] [_log()] client lang: <none>
2026-04-15T11:52:56.647 [DEBUG] [Thread-18424] [transport.py] [_log()] server lang: <none>
2026-04-15T11:52:56.647 [DEBUG] [Thread-18424] [transport.py] [_log()] kex follows: False
2026-04-15T11:52:56.647 [DEBUG] [Thread-18424] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:52:56.647 [DEBUG] [Thread-18424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:52:56.647 [DEBUG] [Thread-18424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:52:56.647 [DEBUG] [Thread-18424] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:52:56.647 [DEBUG] [Thread-18424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:52:56.647 [DEBUG] [Thread-18424] [transport.py] [_log()] Compression: none
2026-04-15T11:52:56.647 [DEBUG] [Thread-18424] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:52:56.661 [DEBUG] [Thread-18424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:52:56.661 [DEBUG] [Thread-18424] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:52:56.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:52:56.662 [DEBUG] [Thread-18424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:52:56.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:52:56.704 [DEBUG] [Thread-18424] [transport.py] [_log()] userauth is OK
2026-04-15T11:52:56.704 [DEBUG] [Thread-18424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:52:56.705 [DEBUG] [Thread-18424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:52:56.705 [DEBUG] [Thread-18424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:52:56.705 [DEBUG] [Thread-18424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:52:56.742 [INFO] [Thread-18424] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:52:56.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:52:57.343 [DEBUG] [Thread-18424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:52:57.343 [DEBUG] [Thread-18424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:52:57.344 [DEBUG] [Thread-18424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:52:57.384 [DEBUG] [Thread-18424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:52:57.384 [DEBUG] [Thread-18424] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:52:57.386 [DEBUG] [Thread-18424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:52:57.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:52:57.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:52:57.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:52:57.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:52:57.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:52:57.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:52:57.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:52:57.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:52:57.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:52:57.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.411597 -999.00  +11.90  23.08     76   +8.00 1 3 1 1 1   888    0 4.59 41.60 ----- 21.9 23.1 312.8 26.0 17.7 -9.1 17.2 -8.8 16.4 -7.5 17.2 -7.4
2026-04-15T11:52:57.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:52:57.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:52:57.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.411597
2026-04-15T11:52:57.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:52:57.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:52:57.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:52:57.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:52:57.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:52:57.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:52:40', tmtdew=4.72452, humidity=72.7857, cloud=0.0, wind=14.8212, temperature=12.1082, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:52:41.981', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:52:57.405 [DEBUG] [Thread-18424] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:52:57.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:52:57.613 [DEBUG] [Thread-18427] [transport.py] [_log()] starting thread (client mode): 0xf13ecd90
2026-04-15T11:52:57.614 [DEBUG] [Thread-18427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:52:57.628 [DEBUG] [Thread-18427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:52:57.628 [INFO] [Thread-18427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:52:57.636 [DEBUG] [Thread-18427] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:52:57.636 [DEBUG] [Thread-18427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:52:57.636 [DEBUG] [Thread-18427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:52:57.636 [DEBUG] [Thread-18427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:52:57.636 [DEBUG] [Thread-18427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:52:57.636 [DEBUG] [Thread-18427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:52:57.636 [DEBUG] [Thread-18427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:52:57.636 [DEBUG] [Thread-18427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:52:57.636 [DEBUG] [Thread-18427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:52:57.636 [DEBUG] [Thread-18427] [transport.py] [_log()] client lang: <none>
2026-04-15T11:52:57.637 [DEBUG] [Thread-18427] [transport.py] [_log()] server lang: <none>
2026-04-15T11:52:57.637 [DEBUG] [Thread-18427] [transport.py] [_log()] kex follows: False
2026-04-15T11:52:57.637 [DEBUG] [Thread-18427] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:52:57.637 [DEBUG] [Thread-18427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:52:57.637 [DEBUG] [Thread-18427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:52:57.637 [DEBUG] [Thread-18427] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:52:57.637 [DEBUG] [Thread-18427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:52:57.637 [DEBUG] [Thread-18427] [transport.py] [_log()] Compression: none
2026-04-15T11:52:57.637 [DEBUG] [Thread-18427] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:52:57.692 [DEBUG] [Thread-18427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:52:57.692 [DEBUG] [Thread-18427] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:52:57.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:52:57.693 [DEBUG] [Thread-18427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:52:57.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:52:57.749 [DEBUG] [Thread-18427] [transport.py] [_log()] userauth is OK
2026-04-15T11:52:57.749 [DEBUG] [Thread-18427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:52:57.749 [DEBUG] [Thread-18427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:52:57.749 [DEBUG] [Thread-18427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:52:57.749 [DEBUG] [Thread-18427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:52:57.766 [INFO] [Thread-18427] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:52:57.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:52:57.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:52:58.639 [DEBUG] [Thread-18427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:52:58.640 [DEBUG] [Thread-18427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:52:58.687 [DEBUG] [Thread-18427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:52:58.687 [DEBUG] [Thread-18427] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:52:58.697 [DEBUG] [Thread-18427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:52:58.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:52:58.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')
2026-04-15T11:52:58.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
2026-04-15T11:52:58.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:52:58.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:52:58.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:52:58.744 [DEBUG] [Thread-18427] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:53:02.739 [DEBUG] [Thread-18429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:53:11.751 [DEBUG] [Thread-18430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:53:17.784 [DEBUG] [Thread-18431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:53:28.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:53:28.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:53:28.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
2026-04-15T11:53:30.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 53, 16), 4.64978, 73.2077, 0.0, 16.5157, 11.7706, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:53:30.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:53:16
2026-04-15T11:53:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:53:30.897 [DEBUG] [Thread-18432] [transport.py] [_log()] starting thread (client mode): 0xf13c8be0
2026-04-15T11:53:30.897 [DEBUG] [Thread-18432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:53:30.911 [DEBUG] [Thread-18432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:53:30.911 [INFO] [Thread-18432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:53:30.914 [DEBUG] [Thread-18432] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:53:30.914 [DEBUG] [Thread-18432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:53:30.914 [DEBUG] [Thread-18432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:53:30.914 [DEBUG] [Thread-18432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:53:30.915 [DEBUG] [Thread-18432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:53:30.915 [DEBUG] [Thread-18432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:53:30.915 [DEBUG] [Thread-18432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:53:30.915 [DEBUG] [Thread-18432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:53:30.915 [DEBUG] [Thread-18432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:53:30.915 [DEBUG] [Thread-18432] [transport.py] [_log()] client lang: <none>
2026-04-15T11:53:30.915 [DEBUG] [Thread-18432] [transport.py] [_log()] server lang: <none>
2026-04-15T11:53:30.915 [DEBUG] [Thread-18432] [transport.py] [_log()] kex follows: False
2026-04-15T11:53:30.915 [DEBUG] [Thread-18432] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:53:30.915 [DEBUG] [Thread-18432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:53:30.915 [DEBUG] [Thread-18432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:53:30.915 [DEBUG] [Thread-18432] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:53:30.916 [DEBUG] [Thread-18432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:53:30.916 [DEBUG] [Thread-18432] [transport.py] [_log()] Compression: none
2026-04-15T11:53:30.916 [DEBUG] [Thread-18432] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:53:30.925 [DEBUG] [Thread-18432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:53:30.925 [DEBUG] [Thread-18432] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:53:30.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:53:30.926 [DEBUG] [Thread-18432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:53:30.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:53:30.926 [DEBUG] [Thread-18432] [transport.py] [_log()] userauth is OK
2026-04-15T11:53:30.927 [DEBUG] [Thread-18432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:53:30.927 [DEBUG] [Thread-18432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:53:30.927 [DEBUG] [Thread-18432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:53:30.927 [DEBUG] [Thread-18432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:53:30.944 [INFO] [Thread-18432] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:53:30.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:53:31.544 [DEBUG] [Thread-18432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:53:31.544 [DEBUG] [Thread-18432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:53:31.545 [DEBUG] [Thread-18432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:53:31.585 [DEBUG] [Thread-18432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:53:31.585 [DEBUG] [Thread-18432] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:53:31.587 [DEBUG] [Thread-18432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:53:31.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:53:31.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:53:31.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:53:31.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:53:31.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:53:31.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:53:31.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:53:31.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:53:31.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:53:31.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.411933 -999.00  +11.80  16.24     78   +8.20 1 3 1 1 1   888    0 4.57 40.29 ----- 19.5 16.2 308.4 24.1 17.7 -8.1 17.0 -8.5 16.6 -6.9 17.2 -7.1
2026-04-15T11:53:31.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:53:31.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:53:31.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.411933
2026-04-15T11:53:31.609 [DEBUG] [Thread-18432] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:53:31.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:53:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:53:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:53:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:53:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:53:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:53:16', tmtdew=4.64978, humidity=73.2077, cloud=0.0, wind=16.5157, temperature=11.7706, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:53:11.011', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:53:31.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:53:31.864 [DEBUG] [Thread-18435] [transport.py] [_log()] starting thread (client mode): 0xf13e3df0
2026-04-15T11:53:31.864 [DEBUG] [Thread-18435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:53:31.880 [DEBUG] [Thread-18435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:53:31.880 [INFO] [Thread-18435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:53:31.887 [DEBUG] [Thread-18435] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:53:31.887 [DEBUG] [Thread-18435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:53:31.888 [DEBUG] [Thread-18435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:53:31.888 [DEBUG] [Thread-18435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:53:31.888 [DEBUG] [Thread-18435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:53:31.888 [DEBUG] [Thread-18435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:53:31.888 [DEBUG] [Thread-18435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:53:31.888 [DEBUG] [Thread-18435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:53:31.888 [DEBUG] [Thread-18435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:53:31.888 [DEBUG] [Thread-18435] [transport.py] [_log()] client lang: <none>
2026-04-15T11:53:31.888 [DEBUG] [Thread-18435] [transport.py] [_log()] server lang: <none>
2026-04-15T11:53:31.888 [DEBUG] [Thread-18435] [transport.py] [_log()] kex follows: False
2026-04-15T11:53:31.888 [DEBUG] [Thread-18435] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:53:31.888 [DEBUG] [Thread-18435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:53:31.889 [DEBUG] [Thread-18435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:53:31.889 [DEBUG] [Thread-18435] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:53:31.889 [DEBUG] [Thread-18435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:53:31.889 [DEBUG] [Thread-18435] [transport.py] [_log()] Compression: none
2026-04-15T11:53:31.889 [DEBUG] [Thread-18435] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:53:31.944 [DEBUG] [Thread-18435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:53:31.944 [DEBUG] [Thread-18435] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:53:31.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:53:31.945 [DEBUG] [Thread-18435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:53:31.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:53:32.001 [DEBUG] [Thread-18435] [transport.py] [_log()] userauth is OK
2026-04-15T11:53:32.001 [DEBUG] [Thread-18435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:53:32.001 [DEBUG] [Thread-18435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:53:32.001 [DEBUG] [Thread-18435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:53:32.002 [DEBUG] [Thread-18435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:53:32.027 [INFO] [Thread-18435] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:53:32.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:53:32.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:53:32.815 [DEBUG] [Thread-18437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:53:32.846 [DEBUG] [Thread-18435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:53:32.846 [DEBUG] [Thread-18435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:53:32.894 [DEBUG] [Thread-18435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:53:32.894 [DEBUG] [Thread-18435] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:53:32.903 [DEBUG] [Thread-18435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:53:32.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:53:32.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')
2026-04-15T11:53:32.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
2026-04-15T11:53:32.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:53:32.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:53:32.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:53:32.938 [DEBUG] [Thread-18435] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:53:41.504 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:53:41.505 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:53:47.858 [DEBUG] [Thread-18438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:54:02.892 [DEBUG] [Thread-18439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:54:02.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:54:02.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:54:02.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
2026-04-15T11:54:04.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 53, 51), 4.67442, 73.0175, 0.0, 18.702, 12.0085, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:54:04.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:53:51
2026-04-15T11:54:04.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:54:05.068 [DEBUG] [Thread-18440] [transport.py] [_log()] starting thread (client mode): 0xee9e58d0
2026-04-15T11:54:05.068 [DEBUG] [Thread-18440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:54:05.088 [DEBUG] [Thread-18440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:54:05.088 [INFO] [Thread-18440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:54:05.091 [DEBUG] [Thread-18440] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:54:05.091 [DEBUG] [Thread-18440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:54:05.092 [DEBUG] [Thread-18440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:54:05.092 [DEBUG] [Thread-18440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:54:05.092 [DEBUG] [Thread-18440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:54:05.092 [DEBUG] [Thread-18440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:54:05.092 [DEBUG] [Thread-18440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:54:05.092 [DEBUG] [Thread-18440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:54:05.092 [DEBUG] [Thread-18440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:54:05.092 [DEBUG] [Thread-18440] [transport.py] [_log()] client lang: <none>
2026-04-15T11:54:05.092 [DEBUG] [Thread-18440] [transport.py] [_log()] server lang: <none>
2026-04-15T11:54:05.092 [DEBUG] [Thread-18440] [transport.py] [_log()] kex follows: False
2026-04-15T11:54:05.092 [DEBUG] [Thread-18440] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:54:05.093 [DEBUG] [Thread-18440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:54:05.093 [DEBUG] [Thread-18440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:54:05.093 [DEBUG] [Thread-18440] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:54:05.093 [DEBUG] [Thread-18440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:54:05.093 [DEBUG] [Thread-18440] [transport.py] [_log()] Compression: none
2026-04-15T11:54:05.093 [DEBUG] [Thread-18440] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:54:05.108 [DEBUG] [Thread-18440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:54:05.109 [DEBUG] [Thread-18440] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:54:05.109 [DEBUG] [Thread-18440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:54:05.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:54:05.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:54:05.110 [DEBUG] [Thread-18440] [transport.py] [_log()] userauth is OK
2026-04-15T11:54:05.111 [DEBUG] [Thread-18440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:54:05.111 [DEBUG] [Thread-18440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:54:05.111 [DEBUG] [Thread-18440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:54:05.111 [DEBUG] [Thread-18440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:54:05.135 [INFO] [Thread-18440] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:54:05.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:54:05.723 [DEBUG] [Thread-18440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:54:05.723 [DEBUG] [Thread-18440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:54:05.724 [DEBUG] [Thread-18440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:54:05.764 [DEBUG] [Thread-18440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:54:05.764 [DEBUG] [Thread-18440] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:54:05.768 [DEBUG] [Thread-18440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:54:05.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:54:05.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:54:05.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:54:05.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:54:05.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:54:05.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:54:05.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:54:05.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:54:05.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:54:05.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.412292 -999.00  +11.90  16.51     77   +8.10 1 3 1 1 1   888    0 4.65 43.47 ----- 17.9 16.5 292.0 22.1 17.7 -8.5 17.1 -8.0 16.4 -9.0 17.2 -7.5
2026-04-15T11:54:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:54:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:54:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.412292
2026-04-15T11:54:05.792 [DEBUG] [Thread-18440] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:54:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:54:05.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:54:05.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:54:05.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:54:05.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:54:05.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:53:51', tmtdew=4.67442, humidity=73.0175, cloud=0.0, wind=18.702, temperature=12.0085, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:53:42.029', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:54:06.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:54:06.028 [DEBUG] [Thread-18443] [transport.py] [_log()] starting thread (client mode): 0xee9ef910
2026-04-15T11:54:06.029 [DEBUG] [Thread-18443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:54:06.043 [DEBUG] [Thread-18443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:54:06.043 [INFO] [Thread-18443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:54:06.050 [DEBUG] [Thread-18443] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:54:06.050 [DEBUG] [Thread-18443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:54:06.051 [DEBUG] [Thread-18443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:54:06.051 [DEBUG] [Thread-18443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:54:06.051 [DEBUG] [Thread-18443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:54:06.051 [DEBUG] [Thread-18443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:54:06.051 [DEBUG] [Thread-18443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:54:06.051 [DEBUG] [Thread-18443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:54:06.051 [DEBUG] [Thread-18443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:54:06.051 [DEBUG] [Thread-18443] [transport.py] [_log()] client lang: <none>
2026-04-15T11:54:06.051 [DEBUG] [Thread-18443] [transport.py] [_log()] server lang: <none>
2026-04-15T11:54:06.051 [DEBUG] [Thread-18443] [transport.py] [_log()] kex follows: False
2026-04-15T11:54:06.051 [DEBUG] [Thread-18443] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:54:06.051 [DEBUG] [Thread-18443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:54:06.052 [DEBUG] [Thread-18443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:54:06.052 [DEBUG] [Thread-18443] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:54:06.052 [DEBUG] [Thread-18443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:54:06.052 [DEBUG] [Thread-18443] [transport.py] [_log()] Compression: none
2026-04-15T11:54:06.052 [DEBUG] [Thread-18443] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:54:06.111 [DEBUG] [Thread-18443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:54:06.112 [DEBUG] [Thread-18443] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:54:06.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:54:06.113 [DEBUG] [Thread-18443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:54:06.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:54:06.171 [DEBUG] [Thread-18443] [transport.py] [_log()] userauth is OK
2026-04-15T11:54:06.171 [DEBUG] [Thread-18443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:54:06.171 [DEBUG] [Thread-18443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:54:06.172 [DEBUG] [Thread-18443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:54:06.172 [DEBUG] [Thread-18443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:54:06.202 [INFO] [Thread-18443] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:54:06.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:54:06.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:54:07.052 [DEBUG] [Thread-18443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:54:07.052 [DEBUG] [Thread-18443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:54:07.100 [DEBUG] [Thread-18443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:54:07.100 [DEBUG] [Thread-18443] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:54:07.109 [DEBUG] [Thread-18443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:54:07.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:54:07.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')
2026-04-15T11:54:07.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
2026-04-15T11:54:07.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:54:07.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:54:07.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:54:07.149 [DEBUG] [Thread-18443] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:54:11.860 [DEBUG] [Thread-18445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:54:17.923 [DEBUG] [Thread-18446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:54:32.967 [DEBUG] [Thread-18447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:54:37.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:54:37.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:54:37.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
2026-04-15T11:54:38.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 54, 27), 4.62782, 73.3237, 0.0, 15.3155, 11.7037, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:54:38.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:54:27
2026-04-15T11:54:38.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:54:39.319 [DEBUG] [Thread-18448] [transport.py] [_log()] starting thread (client mode): 0xee9e79d0
2026-04-15T11:54:39.319 [DEBUG] [Thread-18448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:54:39.339 [DEBUG] [Thread-18448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:54:39.339 [INFO] [Thread-18448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:54:39.342 [DEBUG] [Thread-18448] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:54:39.342 [DEBUG] [Thread-18448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:54:39.342 [DEBUG] [Thread-18448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:54:39.342 [DEBUG] [Thread-18448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:54:39.342 [DEBUG] [Thread-18448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:54:39.342 [DEBUG] [Thread-18448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:54:39.342 [DEBUG] [Thread-18448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:54:39.342 [DEBUG] [Thread-18448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:54:39.342 [DEBUG] [Thread-18448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:54:39.342 [DEBUG] [Thread-18448] [transport.py] [_log()] client lang: <none>
2026-04-15T11:54:39.343 [DEBUG] [Thread-18448] [transport.py] [_log()] server lang: <none>
2026-04-15T11:54:39.343 [DEBUG] [Thread-18448] [transport.py] [_log()] kex follows: False
2026-04-15T11:54:39.343 [DEBUG] [Thread-18448] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:54:39.343 [DEBUG] [Thread-18448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:54:39.343 [DEBUG] [Thread-18448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:54:39.343 [DEBUG] [Thread-18448] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:54:39.343 [DEBUG] [Thread-18448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:54:39.343 [DEBUG] [Thread-18448] [transport.py] [_log()] Compression: none
2026-04-15T11:54:39.343 [DEBUG] [Thread-18448] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:54:39.359 [DEBUG] [Thread-18448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:54:39.359 [DEBUG] [Thread-18448] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:54:39.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:54:39.360 [DEBUG] [Thread-18448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:54:39.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:54:39.400 [DEBUG] [Thread-18448] [transport.py] [_log()] userauth is OK
2026-04-15T11:54:39.400 [DEBUG] [Thread-18448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:54:39.400 [DEBUG] [Thread-18448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:54:39.400 [DEBUG] [Thread-18448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:54:39.401 [DEBUG] [Thread-18448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:54:39.436 [INFO] [Thread-18448] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:54:39.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:54:40.079 [DEBUG] [Thread-18448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:54:40.080 [DEBUG] [Thread-18448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:54:40.080 [DEBUG] [Thread-18448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:54:40.120 [DEBUG] [Thread-18448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:54:40.120 [DEBUG] [Thread-18448] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:54:40.124 [DEBUG] [Thread-18448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:54:40.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:54:40.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:54:40.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:54:40.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:54:40.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:54:40.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:54:40.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:54:40.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:54:40.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:54:40.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.412627 -999.00  +11.80  18.86     77   +7.90 1 3 1 1 1   888    0 4.68 43.60 ----- 21.6 18.9 320.2 22.1 17.7 -8.6 17.1 -8.4 16.6 -6.2 17.2 -7.3
2026-04-15T11:54:40.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:54:40.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:54:40.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.412627
2026-04-15T11:54:40.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:54:40.149 [DEBUG] [Thread-18448] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:54:40.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:54:40.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:54:40.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:54:40.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:54:40.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:54:27', tmtdew=4.62782, humidity=73.3237, cloud=0.0, wind=15.3155, temperature=11.7037, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:54:10.973', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:54:40.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:54:40.404 [DEBUG] [Thread-18451] [transport.py] [_log()] starting thread (client mode): 0xee9e5600
2026-04-15T11:54:40.404 [DEBUG] [Thread-18451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:54:40.419 [DEBUG] [Thread-18451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:54:40.419 [INFO] [Thread-18451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:54:40.426 [DEBUG] [Thread-18451] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:54:40.426 [DEBUG] [Thread-18451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:54:40.427 [DEBUG] [Thread-18451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:54:40.427 [DEBUG] [Thread-18451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:54:40.427 [DEBUG] [Thread-18451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:54:40.427 [DEBUG] [Thread-18451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:54:40.427 [DEBUG] [Thread-18451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:54:40.427 [DEBUG] [Thread-18451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:54:40.427 [DEBUG] [Thread-18451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:54:40.427 [DEBUG] [Thread-18451] [transport.py] [_log()] client lang: <none>
2026-04-15T11:54:40.427 [DEBUG] [Thread-18451] [transport.py] [_log()] server lang: <none>
2026-04-15T11:54:40.427 [DEBUG] [Thread-18451] [transport.py] [_log()] kex follows: False
2026-04-15T11:54:40.427 [DEBUG] [Thread-18451] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:54:40.427 [DEBUG] [Thread-18451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:54:40.428 [DEBUG] [Thread-18451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:54:40.428 [DEBUG] [Thread-18451] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:54:40.428 [DEBUG] [Thread-18451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:54:40.428 [DEBUG] [Thread-18451] [transport.py] [_log()] Compression: none
2026-04-15T11:54:40.428 [DEBUG] [Thread-18451] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:54:40.483 [DEBUG] [Thread-18451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:54:40.483 [DEBUG] [Thread-18451] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:54:40.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:54:40.484 [DEBUG] [Thread-18451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:54:40.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:54:40.540 [DEBUG] [Thread-18451] [transport.py] [_log()] userauth is OK
2026-04-15T11:54:40.540 [DEBUG] [Thread-18451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:54:40.541 [DEBUG] [Thread-18451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:54:40.541 [DEBUG] [Thread-18451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:54:40.541 [DEBUG] [Thread-18451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:54:40.566 [INFO] [Thread-18451] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:54:40.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:54:40.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:54:41.365 [DEBUG] [Thread-18451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:54:41.365 [DEBUG] [Thread-18451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:54:41.413 [DEBUG] [Thread-18451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:54:41.413 [DEBUG] [Thread-18451] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:54:41.422 [DEBUG] [Thread-18451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:54:41.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:54:41.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')
2026-04-15T11:54:41.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
2026-04-15T11:54:41.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:54:41.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:54:41.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:54:41.457 [DEBUG] [Thread-18451] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:54:41.646 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:54:41.647 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:54:47.998 [DEBUG] [Thread-18453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:55:03.043 [DEBUG] [Thread-18454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:55:11.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:55:11.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:55:11.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
2026-04-15T11:55:11.987 [DEBUG] [Thread-18455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:55:12.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 55, 2), 4.70016, 72.9589, 0.0, 13.869, 11.6871, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:55:12.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:55:02
2026-04-15T11:55:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:55:13.585 [DEBUG] [Thread-18456] [transport.py] [_log()] starting thread (client mode): 0xee9ec8e0
2026-04-15T11:55:13.585 [DEBUG] [Thread-18456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:55:13.604 [DEBUG] [Thread-18456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:55:13.604 [INFO] [Thread-18456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:55:13.607 [DEBUG] [Thread-18456] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:55:13.607 [DEBUG] [Thread-18456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:55:13.607 [DEBUG] [Thread-18456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:55:13.607 [DEBUG] [Thread-18456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:55:13.607 [DEBUG] [Thread-18456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:55:13.608 [DEBUG] [Thread-18456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:55:13.608 [DEBUG] [Thread-18456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:55:13.608 [DEBUG] [Thread-18456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:55:13.608 [DEBUG] [Thread-18456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:55:13.608 [DEBUG] [Thread-18456] [transport.py] [_log()] client lang: <none>
2026-04-15T11:55:13.608 [DEBUG] [Thread-18456] [transport.py] [_log()] server lang: <none>
2026-04-15T11:55:13.608 [DEBUG] [Thread-18456] [transport.py] [_log()] kex follows: False
2026-04-15T11:55:13.608 [DEBUG] [Thread-18456] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:55:13.608 [DEBUG] [Thread-18456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:55:13.608 [DEBUG] [Thread-18456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:55:13.608 [DEBUG] [Thread-18456] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:55:13.609 [DEBUG] [Thread-18456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:55:13.609 [DEBUG] [Thread-18456] [transport.py] [_log()] Compression: none
2026-04-15T11:55:13.609 [DEBUG] [Thread-18456] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:55:13.625 [DEBUG] [Thread-18456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:55:13.626 [DEBUG] [Thread-18456] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:55:13.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:55:13.626 [DEBUG] [Thread-18456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:55:13.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:55:13.627 [DEBUG] [Thread-18456] [transport.py] [_log()] userauth is OK
2026-04-15T11:55:13.628 [DEBUG] [Thread-18456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:55:13.628 [DEBUG] [Thread-18456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:55:13.628 [DEBUG] [Thread-18456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:55:13.628 [DEBUG] [Thread-18456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:55:13.653 [INFO] [Thread-18456] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:55:13.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:55:18.073 [DEBUG] [Thread-18458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:55:19.711 [DEBUG] [Thread-18456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:55:19.712 [DEBUG] [Thread-18456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:55:19.712 [DEBUG] [Thread-18456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:55:19.752 [DEBUG] [Thread-18456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:55:19.752 [DEBUG] [Thread-18456] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:55:19.755 [DEBUG] [Thread-18456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:55:19.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:55:19.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:55:19.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:55:19.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:55:19.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:55:19.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:55:19.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:55:19.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:55:19.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:55:19.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.412627 -999.00  +11.80  18.86     77   +7.90 1 3 1 1 1   888    0 4.68 43.60 ----- 21.6 18.9 320.2 22.1 17.7 -8.6 17.1 -8.4 16.6 -6.2 17.2 -7.3
2026-04-15T11:55:19.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:55:19.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:55:19.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.412627
2026-04-15T11:55:19.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:55:19.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:55:19.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:55:19.819 [DEBUG] [Thread-18456] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:55:19.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:55:19.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:55:19.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:55:02', tmtdew=4.70016, humidity=72.9589, cloud=0.0, wind=13.869, temperature=11.6871, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:54:10.973', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:55:20.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:55:20.074 [DEBUG] [Thread-18460] [transport.py] [_log()] starting thread (client mode): 0xf13fe9e0
2026-04-15T11:55:20.075 [DEBUG] [Thread-18460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:55:20.088 [DEBUG] [Thread-18460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:55:20.088 [INFO] [Thread-18460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:55:20.096 [DEBUG] [Thread-18460] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:55:20.096 [DEBUG] [Thread-18460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:55:20.096 [DEBUG] [Thread-18460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:55:20.096 [DEBUG] [Thread-18460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:55:20.096 [DEBUG] [Thread-18460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:55:20.096 [DEBUG] [Thread-18460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:55:20.096 [DEBUG] [Thread-18460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:55:20.096 [DEBUG] [Thread-18460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:55:20.096 [DEBUG] [Thread-18460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:55:20.096 [DEBUG] [Thread-18460] [transport.py] [_log()] client lang: <none>
2026-04-15T11:55:20.096 [DEBUG] [Thread-18460] [transport.py] [_log()] server lang: <none>
2026-04-15T11:55:20.096 [DEBUG] [Thread-18460] [transport.py] [_log()] kex follows: False
2026-04-15T11:55:20.097 [DEBUG] [Thread-18460] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:55:20.097 [DEBUG] [Thread-18460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:55:20.097 [DEBUG] [Thread-18460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:55:20.097 [DEBUG] [Thread-18460] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:55:20.097 [DEBUG] [Thread-18460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:55:20.097 [DEBUG] [Thread-18460] [transport.py] [_log()] Compression: none
2026-04-15T11:55:20.097 [DEBUG] [Thread-18460] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:55:20.155 [DEBUG] [Thread-18460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:55:20.155 [DEBUG] [Thread-18460] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:55:20.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:55:20.156 [DEBUG] [Thread-18460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:55:20.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:55:20.211 [DEBUG] [Thread-18460] [transport.py] [_log()] userauth is OK
2026-04-15T11:55:20.211 [DEBUG] [Thread-18460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:55:20.212 [DEBUG] [Thread-18460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:55:20.212 [DEBUG] [Thread-18460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:55:20.212 [DEBUG] [Thread-18460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:55:20.236 [INFO] [Thread-18460] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:55:20.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:55:20.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:55:21.054 [DEBUG] [Thread-18460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:55:21.055 [DEBUG] [Thread-18460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:55:21.102 [DEBUG] [Thread-18460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:55:21.102 [DEBUG] [Thread-18460] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:55:21.111 [DEBUG] [Thread-18460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:55:21.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:55:21.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')
2026-04-15T11:55:21.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
2026-04-15T11:55:21.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:55:21.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:55:21.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:55:21.146 [DEBUG] [Thread-18460] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:55:33.101 [DEBUG] [Thread-18462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:55:41.794 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:55:41.795 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:55:48.144 [DEBUG] [Thread-18463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:55:51.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:55:51.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:55:51.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
2026-04-15T11:55:52.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 55, 38), 4.75731, 72.6525, 0.0, 18.6667, 12.2735, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:55:52.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:55:38
2026-04-15T11:55:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:55:53.333 [DEBUG] [Thread-18464] [transport.py] [_log()] starting thread (client mode): 0xf13359f0
2026-04-15T11:55:53.334 [DEBUG] [Thread-18464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:55:53.356 [DEBUG] [Thread-18464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:55:53.356 [INFO] [Thread-18464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:55:53.357 [DEBUG] [Thread-18464] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:55:53.358 [DEBUG] [Thread-18464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:55:53.358 [DEBUG] [Thread-18464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:55:53.358 [DEBUG] [Thread-18464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:55:53.358 [DEBUG] [Thread-18464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:55:53.358 [DEBUG] [Thread-18464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:55:53.358 [DEBUG] [Thread-18464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:55:53.358 [DEBUG] [Thread-18464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:55:53.358 [DEBUG] [Thread-18464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:55:53.358 [DEBUG] [Thread-18464] [transport.py] [_log()] client lang: <none>
2026-04-15T11:55:53.358 [DEBUG] [Thread-18464] [transport.py] [_log()] server lang: <none>
2026-04-15T11:55:53.358 [DEBUG] [Thread-18464] [transport.py] [_log()] kex follows: False
2026-04-15T11:55:53.358 [DEBUG] [Thread-18464] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:55:53.358 [DEBUG] [Thread-18464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:55:53.359 [DEBUG] [Thread-18464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:55:53.359 [DEBUG] [Thread-18464] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:55:53.359 [DEBUG] [Thread-18464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:55:53.359 [DEBUG] [Thread-18464] [transport.py] [_log()] Compression: none
2026-04-15T11:55:53.359 [DEBUG] [Thread-18464] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:55:53.367 [DEBUG] [Thread-18464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:55:53.367 [DEBUG] [Thread-18464] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:55:53.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:55:53.368 [DEBUG] [Thread-18464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:55:53.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:55:53.369 [DEBUG] [Thread-18464] [transport.py] [_log()] userauth is OK
2026-04-15T11:55:53.369 [DEBUG] [Thread-18464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:55:53.369 [DEBUG] [Thread-18464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:55:53.369 [DEBUG] [Thread-18464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:55:53.370 [DEBUG] [Thread-18464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:55:53.387 [INFO] [Thread-18464] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:55:53.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:55:53.999 [DEBUG] [Thread-18464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:55:54.000 [DEBUG] [Thread-18464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:55:54.000 [DEBUG] [Thread-18464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:55:54.041 [DEBUG] [Thread-18464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:55:54.041 [DEBUG] [Thread-18464] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:55:54.043 [DEBUG] [Thread-18464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:55:54.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:55:54.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:55:54.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:55:54.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:55:54.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:55:54.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:55:54.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:55:54.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:55:54.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:55:54.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.413680 -999.00  +12.10  18.55     76   +8.10 1 3 1 1 1   888    0 4.73 43.36 ----- 22.0 18.6 310.0 24.5 18.1 -10.1 17.4 -9.8 16.6 -9.0 17.6 -8.5
2026-04-15T11:55:54.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:55:54.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:55:54.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.413680
2026-04-15T11:55:54.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:55:54.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:55:54.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:55:54.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:55:54.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:55:54.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:55:38', tmtdew=4.75731, humidity=72.6525, cloud=0.0, wind=18.6667, temperature=12.2735, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:55:41.952', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:55:54.065 [DEBUG] [Thread-18464] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:55:54.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:55:54.322 [DEBUG] [Thread-18467] [transport.py] [_log()] starting thread (client mode): 0xee9e45b0
2026-04-15T11:55:54.322 [DEBUG] [Thread-18467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:55:54.336 [DEBUG] [Thread-18467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:55:54.336 [INFO] [Thread-18467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:55:54.344 [DEBUG] [Thread-18467] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:55:54.344 [DEBUG] [Thread-18467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:55:54.344 [DEBUG] [Thread-18467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:55:54.344 [DEBUG] [Thread-18467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:55:54.344 [DEBUG] [Thread-18467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:55:54.344 [DEBUG] [Thread-18467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:55:54.344 [DEBUG] [Thread-18467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:55:54.344 [DEBUG] [Thread-18467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:55:54.344 [DEBUG] [Thread-18467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:55:54.344 [DEBUG] [Thread-18467] [transport.py] [_log()] client lang: <none>
2026-04-15T11:55:54.344 [DEBUG] [Thread-18467] [transport.py] [_log()] server lang: <none>
2026-04-15T11:55:54.345 [DEBUG] [Thread-18467] [transport.py] [_log()] kex follows: False
2026-04-15T11:55:54.345 [DEBUG] [Thread-18467] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:55:54.345 [DEBUG] [Thread-18467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:55:54.345 [DEBUG] [Thread-18467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:55:54.345 [DEBUG] [Thread-18467] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:55:54.345 [DEBUG] [Thread-18467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:55:54.345 [DEBUG] [Thread-18467] [transport.py] [_log()] Compression: none
2026-04-15T11:55:54.345 [DEBUG] [Thread-18467] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:55:54.402 [DEBUG] [Thread-18467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:55:54.402 [DEBUG] [Thread-18467] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:55:54.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:55:54.403 [DEBUG] [Thread-18467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:55:54.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:55:54.459 [DEBUG] [Thread-18467] [transport.py] [_log()] userauth is OK
2026-04-15T11:55:54.459 [DEBUG] [Thread-18467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:55:54.460 [DEBUG] [Thread-18467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:55:54.460 [DEBUG] [Thread-18467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:55:54.460 [DEBUG] [Thread-18467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:55:54.484 [INFO] [Thread-18467] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:55:54.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:55:54.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:55:55.283 [DEBUG] [Thread-18467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:55:55.284 [DEBUG] [Thread-18467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:55:55.331 [DEBUG] [Thread-18467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:55:55.331 [DEBUG] [Thread-18467] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:55:55.340 [DEBUG] [Thread-18467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:55:55.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:55:55.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')
2026-04-15T11:55:55.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
2026-04-15T11:55:55.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:55:55.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:55:55.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:55:55.374 [DEBUG] [Thread-18467] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:56:03.175 [DEBUG] [Thread-18469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:56:12.103 [DEBUG] [Thread-18470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:56:18.222 [DEBUG] [Thread-18471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:56:25.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:56:25.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:56:25.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
2026-04-15T11:56:26.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 56, 15), 4.85848, 72.1936, 0.0, 17.9989, 11.8697, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:56:26.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:56:15
2026-04-15T11:56:27.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:56:27.488 [DEBUG] [Thread-18472] [transport.py] [_log()] starting thread (client mode): 0xf1335d50
2026-04-15T11:56:27.488 [DEBUG] [Thread-18472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:56:27.509 [DEBUG] [Thread-18472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:56:27.509 [INFO] [Thread-18472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:56:27.512 [DEBUG] [Thread-18472] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:56:27.512 [DEBUG] [Thread-18472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:56:27.513 [DEBUG] [Thread-18472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:56:27.513 [DEBUG] [Thread-18472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:56:27.513 [DEBUG] [Thread-18472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:56:27.513 [DEBUG] [Thread-18472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:56:27.513 [DEBUG] [Thread-18472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:56:27.513 [DEBUG] [Thread-18472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:56:27.513 [DEBUG] [Thread-18472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:56:27.513 [DEBUG] [Thread-18472] [transport.py] [_log()] client lang: <none>
2026-04-15T11:56:27.513 [DEBUG] [Thread-18472] [transport.py] [_log()] server lang: <none>
2026-04-15T11:56:27.513 [DEBUG] [Thread-18472] [transport.py] [_log()] kex follows: False
2026-04-15T11:56:27.513 [DEBUG] [Thread-18472] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:56:27.513 [DEBUG] [Thread-18472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:56:27.514 [DEBUG] [Thread-18472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:56:27.514 [DEBUG] [Thread-18472] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:56:27.514 [DEBUG] [Thread-18472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:56:27.514 [DEBUG] [Thread-18472] [transport.py] [_log()] Compression: none
2026-04-15T11:56:27.514 [DEBUG] [Thread-18472] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:56:27.530 [DEBUG] [Thread-18472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:56:27.530 [DEBUG] [Thread-18472] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:56:27.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:56:27.531 [DEBUG] [Thread-18472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:56:27.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:56:27.532 [DEBUG] [Thread-18472] [transport.py] [_log()] userauth is OK
2026-04-15T11:56:27.533 [DEBUG] [Thread-18472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:56:27.533 [DEBUG] [Thread-18472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:56:27.533 [DEBUG] [Thread-18472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:56:27.533 [DEBUG] [Thread-18472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:56:27.560 [INFO] [Thread-18472] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:56:27.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:56:28.294 [DEBUG] [Thread-18472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:56:28.295 [DEBUG] [Thread-18472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:56:28.295 [DEBUG] [Thread-18472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:56:28.335 [DEBUG] [Thread-18472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:56:28.335 [DEBUG] [Thread-18472] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:56:28.338 [DEBUG] [Thread-18472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:56:28.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:56:28.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:56:28.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:56:28.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:56:28.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:56:28.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:56:28.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:56:28.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:56:28.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:56:28.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.414028 -999.00  +12.00  17.62     76   +8.00 1 3 1 1 1   888    0 4.75 43.85 ----- 13.9 17.6 308.0 23.3 18.0 -10.5 17.3 -10.1 16.7 -9.3 17.5 -8.0
2026-04-15T11:56:28.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:56:28.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:56:28.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.414028
2026-04-15T11:56:28.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:56:28.366 [DEBUG] [Thread-18472] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:56:28.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:56:28.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:56:28.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:56:28.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:56:28.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:56:15', tmtdew=4.85848, humidity=72.1936, cloud=0.0, wind=17.9989, temperature=11.8697, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:56:12.019', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:56:28.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:56:28.620 [DEBUG] [Thread-18475] [transport.py] [_log()] starting thread (client mode): 0xee9ed420
2026-04-15T11:56:28.621 [DEBUG] [Thread-18475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:56:28.635 [DEBUG] [Thread-18475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:56:28.635 [INFO] [Thread-18475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:56:28.643 [DEBUG] [Thread-18475] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:56:28.644 [DEBUG] [Thread-18475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:56:28.644 [DEBUG] [Thread-18475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:56:28.644 [DEBUG] [Thread-18475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:56:28.644 [DEBUG] [Thread-18475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:56:28.644 [DEBUG] [Thread-18475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:56:28.644 [DEBUG] [Thread-18475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:56:28.644 [DEBUG] [Thread-18475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:56:28.644 [DEBUG] [Thread-18475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:56:28.644 [DEBUG] [Thread-18475] [transport.py] [_log()] client lang: <none>
2026-04-15T11:56:28.644 [DEBUG] [Thread-18475] [transport.py] [_log()] server lang: <none>
2026-04-15T11:56:28.644 [DEBUG] [Thread-18475] [transport.py] [_log()] kex follows: False
2026-04-15T11:56:28.645 [DEBUG] [Thread-18475] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:56:28.645 [DEBUG] [Thread-18475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:56:28.645 [DEBUG] [Thread-18475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:56:28.645 [DEBUG] [Thread-18475] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:56:28.645 [DEBUG] [Thread-18475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:56:28.645 [DEBUG] [Thread-18475] [transport.py] [_log()] Compression: none
2026-04-15T11:56:28.645 [DEBUG] [Thread-18475] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:56:28.702 [DEBUG] [Thread-18475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:56:28.702 [DEBUG] [Thread-18475] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:56:28.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:56:28.703 [DEBUG] [Thread-18475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:56:28.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:56:28.759 [DEBUG] [Thread-18475] [transport.py] [_log()] userauth is OK
2026-04-15T11:56:28.759 [DEBUG] [Thread-18475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:56:28.759 [DEBUG] [Thread-18475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:56:28.759 [DEBUG] [Thread-18475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:56:28.760 [DEBUG] [Thread-18475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:56:28.787 [INFO] [Thread-18475] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:56:28.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:56:28.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:56:29.621 [DEBUG] [Thread-18475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:56:29.621 [DEBUG] [Thread-18475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:56:29.669 [DEBUG] [Thread-18475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:56:29.669 [DEBUG] [Thread-18475] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:56:29.678 [DEBUG] [Thread-18475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:56:29.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:56: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')
2026-04-15T11:56:29.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') -> 00000000
2026-04-15T11:56:29.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:56:29.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:56:29.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:56:29.713 [DEBUG] [Thread-18475] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:56:33.254 [DEBUG] [Thread-18477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:56:41.936 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:56:41.937 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:56:48.298 [DEBUG] [Thread-18478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:56:59.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:56:59.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:56:59.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
2026-04-15T11:57:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 56, 15), 4.85848, 72.1936, 0.0, 17.9989, 11.8697, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:57:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:56:15
2026-04-15T11:57:01.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:57:01.821 [DEBUG] [Thread-18479] [transport.py] [_log()] starting thread (client mode): 0xee98efe0
2026-04-15T11:57:01.821 [DEBUG] [Thread-18479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:57:01.839 [DEBUG] [Thread-18479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:57:01.839 [INFO] [Thread-18479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:57:01.842 [DEBUG] [Thread-18479] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:57:01.842 [DEBUG] [Thread-18479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:57:01.842 [DEBUG] [Thread-18479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:57:01.843 [DEBUG] [Thread-18479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:57:01.843 [DEBUG] [Thread-18479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:57:01.843 [DEBUG] [Thread-18479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:57:01.843 [DEBUG] [Thread-18479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:57:01.843 [DEBUG] [Thread-18479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:57:01.843 [DEBUG] [Thread-18479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:57:01.843 [DEBUG] [Thread-18479] [transport.py] [_log()] client lang: <none>
2026-04-15T11:57:01.843 [DEBUG] [Thread-18479] [transport.py] [_log()] server lang: <none>
2026-04-15T11:57:01.843 [DEBUG] [Thread-18479] [transport.py] [_log()] kex follows: False
2026-04-15T11:57:01.843 [DEBUG] [Thread-18479] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:57:01.843 [DEBUG] [Thread-18479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:57:01.843 [DEBUG] [Thread-18479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:57:01.844 [DEBUG] [Thread-18479] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:57:01.844 [DEBUG] [Thread-18479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:57:01.844 [DEBUG] [Thread-18479] [transport.py] [_log()] Compression: none
2026-04-15T11:57:01.844 [DEBUG] [Thread-18479] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:57:01.854 [DEBUG] [Thread-18479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:57:01.854 [DEBUG] [Thread-18479] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:57:01.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:57:01.855 [DEBUG] [Thread-18479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:57:01.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:57:01.856 [DEBUG] [Thread-18479] [transport.py] [_log()] userauth is OK
2026-04-15T11:57:01.856 [DEBUG] [Thread-18479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:57:01.856 [DEBUG] [Thread-18479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:57:01.856 [DEBUG] [Thread-18479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:57:01.856 [DEBUG] [Thread-18479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:57:01.872 [INFO] [Thread-18479] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:57:01.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:57:02.453 [DEBUG] [Thread-18479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:57:02.454 [DEBUG] [Thread-18479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:57:02.454 [DEBUG] [Thread-18479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:57:02.494 [DEBUG] [Thread-18479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:57:02.494 [DEBUG] [Thread-18479] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:57:02.496 [DEBUG] [Thread-18479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:57:02.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:57:02.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:57:02.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:57:02.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:57:02.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:57:02.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:57:02.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:57:02.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:57:02.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:57:02.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.414375 -999.00  +12.00  18.72     76   +7.90 1 3 1 1 1   888    0 4.87 45.48 ----- 19.0 18.7 305.4 23.3 18.1 -9.8 17.4 -9.2 16.7 -9.3 17.6 -7.8
2026-04-15T11:57:02.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:57:02.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:57:02.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.414375
2026-04-15T11:57:02.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:57:02.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:57:02.521 [DEBUG] [Thread-18479] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:57:02.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:57:02.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:57:02.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:57:02.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:56:15', tmtdew=4.85848, humidity=72.1936, cloud=0.0, wind=17.9989, temperature=11.8697, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:56:42.000', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:57:02.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:57:02.771 [DEBUG] [Thread-18482] [transport.py] [_log()] starting thread (client mode): 0xee98e5f0
2026-04-15T11:57:02.771 [DEBUG] [Thread-18482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:57:02.785 [DEBUG] [Thread-18482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:57:02.785 [INFO] [Thread-18482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:57:02.792 [DEBUG] [Thread-18482] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:57:02.792 [DEBUG] [Thread-18482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:57:02.792 [DEBUG] [Thread-18482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:57:02.793 [DEBUG] [Thread-18482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:57:02.793 [DEBUG] [Thread-18482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:57:02.793 [DEBUG] [Thread-18482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:57:02.793 [DEBUG] [Thread-18482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:57:02.793 [DEBUG] [Thread-18482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:57:02.793 [DEBUG] [Thread-18482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:57:02.793 [DEBUG] [Thread-18482] [transport.py] [_log()] client lang: <none>
2026-04-15T11:57:02.793 [DEBUG] [Thread-18482] [transport.py] [_log()] server lang: <none>
2026-04-15T11:57:02.793 [DEBUG] [Thread-18482] [transport.py] [_log()] kex follows: False
2026-04-15T11:57:02.793 [DEBUG] [Thread-18482] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:57:02.793 [DEBUG] [Thread-18482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:57:02.794 [DEBUG] [Thread-18482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:57:02.794 [DEBUG] [Thread-18482] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:57:02.794 [DEBUG] [Thread-18482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:57:02.794 [DEBUG] [Thread-18482] [transport.py] [_log()] Compression: none
2026-04-15T11:57:02.794 [DEBUG] [Thread-18482] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:57:02.850 [DEBUG] [Thread-18482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:57:02.850 [DEBUG] [Thread-18482] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:57:02.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:57:02.851 [DEBUG] [Thread-18482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:57:02.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:57:02.906 [DEBUG] [Thread-18482] [transport.py] [_log()] userauth is OK
2026-04-15T11:57:02.907 [DEBUG] [Thread-18482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:57:02.907 [DEBUG] [Thread-18482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:57:02.907 [DEBUG] [Thread-18482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:57:02.907 [DEBUG] [Thread-18482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:57:02.932 [INFO] [Thread-18482] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:57:02.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:57:02.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:57:03.329 [DEBUG] [Thread-18484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:57:03.750 [DEBUG] [Thread-18482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:57:03.751 [DEBUG] [Thread-18482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:57:03.798 [DEBUG] [Thread-18482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:57:03.798 [DEBUG] [Thread-18482] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:57:03.807 [DEBUG] [Thread-18482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:57:03.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:57:03.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')
2026-04-15T11:57:03.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
2026-04-15T11:57:03.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:57:03.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:57:03.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:57:03.844 [DEBUG] [Thread-18482] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:57:12.236 [DEBUG] [Thread-18485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:57:18.372 [DEBUG] [Thread-18486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:57:33.403 [DEBUG] [Thread-18487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:57:33.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:57:33.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:57:33.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:57:35.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 56, 50), 4.83386, 72.0775, 0.0, 14.8046, 11.9194, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:57:35.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:56:50
2026-04-15T11:57:35.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:57:36.058 [DEBUG] [Thread-18488] [transport.py] [_log()] starting thread (client mode): 0xee9ed510
2026-04-15T11:57:36.059 [DEBUG] [Thread-18488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:57:36.078 [DEBUG] [Thread-18488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:57:36.078 [INFO] [Thread-18488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:57:36.081 [DEBUG] [Thread-18488] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:57:36.081 [DEBUG] [Thread-18488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:57:36.081 [DEBUG] [Thread-18488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:57:36.081 [DEBUG] [Thread-18488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:57:36.081 [DEBUG] [Thread-18488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:57:36.081 [DEBUG] [Thread-18488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:57:36.081 [DEBUG] [Thread-18488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:57:36.081 [DEBUG] [Thread-18488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:57:36.081 [DEBUG] [Thread-18488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:57:36.082 [DEBUG] [Thread-18488] [transport.py] [_log()] client lang: <none>
2026-04-15T11:57:36.082 [DEBUG] [Thread-18488] [transport.py] [_log()] server lang: <none>
2026-04-15T11:57:36.082 [DEBUG] [Thread-18488] [transport.py] [_log()] kex follows: False
2026-04-15T11:57:36.082 [DEBUG] [Thread-18488] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:57:36.082 [DEBUG] [Thread-18488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:57:36.082 [DEBUG] [Thread-18488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:57:36.082 [DEBUG] [Thread-18488] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:57:36.082 [DEBUG] [Thread-18488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:57:36.082 [DEBUG] [Thread-18488] [transport.py] [_log()] Compression: none
2026-04-15T11:57:36.082 [DEBUG] [Thread-18488] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:57:36.098 [DEBUG] [Thread-18488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:57:36.099 [DEBUG] [Thread-18488] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:57:36.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:57:36.099 [DEBUG] [Thread-18488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:57:36.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:57:36.100 [DEBUG] [Thread-18488] [transport.py] [_log()] userauth is OK
2026-04-15T11:57:36.101 [DEBUG] [Thread-18488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:57:36.101 [DEBUG] [Thread-18488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:57:36.101 [DEBUG] [Thread-18488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:57:36.101 [DEBUG] [Thread-18488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:57:36.119 [INFO] [Thread-18488] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:57:36.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:57:36.729 [DEBUG] [Thread-18488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:57:36.729 [DEBUG] [Thread-18488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:57:36.730 [DEBUG] [Thread-18488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:57:36.770 [DEBUG] [Thread-18488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:57:36.770 [DEBUG] [Thread-18488] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:57:36.773 [DEBUG] [Thread-18488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:57:36.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:57:36.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:57:36.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:57:36.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:57:36.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:57:36.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:57:36.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:57:36.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:57:36.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:57:36.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.414722 -999.00  +11.80  15.31     75   +7.70 1 3 1 1 1   888    0 4.85 44.07 ----- 17.4 15.3 312.2 24.0 18.0 -9.7 17.3 -9.6 16.6 -6.9 17.4 -7.1
2026-04-15T11:57:36.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:57:36.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:57:36.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.414722
2026-04-15T11:57:36.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:57:36.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:57:36.793 [DEBUG] [Thread-18488] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:57:36.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:57:36.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:57:36.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:57:36.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:56:50', tmtdew=4.83386, humidity=72.0775, cloud=0.0, wind=14.8046, temperature=11.9194, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:57:11.981', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:57:37.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:57:37.047 [DEBUG] [Thread-18491] [transport.py] [_log()] starting thread (client mode): 0xf1336050
2026-04-15T11:57:37.047 [DEBUG] [Thread-18491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:57:37.062 [DEBUG] [Thread-18491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:57:37.062 [INFO] [Thread-18491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:57:37.069 [DEBUG] [Thread-18491] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:57:37.069 [DEBUG] [Thread-18491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:57:37.069 [DEBUG] [Thread-18491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:57:37.069 [DEBUG] [Thread-18491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:57:37.069 [DEBUG] [Thread-18491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:57:37.070 [DEBUG] [Thread-18491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:57:37.070 [DEBUG] [Thread-18491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:57:37.070 [DEBUG] [Thread-18491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:57:37.070 [DEBUG] [Thread-18491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:57:37.070 [DEBUG] [Thread-18491] [transport.py] [_log()] client lang: <none>
2026-04-15T11:57:37.070 [DEBUG] [Thread-18491] [transport.py] [_log()] server lang: <none>
2026-04-15T11:57:37.070 [DEBUG] [Thread-18491] [transport.py] [_log()] kex follows: False
2026-04-15T11:57:37.070 [DEBUG] [Thread-18491] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:57:37.070 [DEBUG] [Thread-18491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:57:37.070 [DEBUG] [Thread-18491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:57:37.070 [DEBUG] [Thread-18491] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:57:37.070 [DEBUG] [Thread-18491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:57:37.071 [DEBUG] [Thread-18491] [transport.py] [_log()] Compression: none
2026-04-15T11:57:37.071 [DEBUG] [Thread-18491] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:57:37.126 [DEBUG] [Thread-18491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:57:37.126 [DEBUG] [Thread-18491] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:57:37.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:57:37.127 [DEBUG] [Thread-18491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:57:37.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:57:37.182 [DEBUG] [Thread-18491] [transport.py] [_log()] userauth is OK
2026-04-15T11:57:37.182 [DEBUG] [Thread-18491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:57:37.182 [DEBUG] [Thread-18491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:57:37.183 [DEBUG] [Thread-18491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:57:37.183 [DEBUG] [Thread-18491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:57:37.207 [INFO] [Thread-18491] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:57:37.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:57:37.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:57:38.025 [DEBUG] [Thread-18491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:57:38.025 [DEBUG] [Thread-18491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:57:38.073 [DEBUG] [Thread-18491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:57:38.073 [DEBUG] [Thread-18491] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:57:38.081 [DEBUG] [Thread-18491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:57:38.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:57:38.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')
2026-04-15T11:57:38.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
2026-04-15T11:57:38.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:57:38.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:57:38.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:57:38.112 [DEBUG] [Thread-18491] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:57:42.078 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:57:42.079 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:57:48.434 [DEBUG] [Thread-18493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:58:03.480 [DEBUG] [Thread-18494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:58:08.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:58:08.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:58:08.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T11:58:09.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 57, 48), 4.92751, 71.9221, 0.0, 20.7835, 12.8697, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:58:09.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:57:48
2026-04-15T11:58:09.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:58:10.304 [DEBUG] [Thread-18495] [transport.py] [_log()] starting thread (client mode): 0xf1334580
2026-04-15T11:58:10.304 [DEBUG] [Thread-18495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:58:10.323 [DEBUG] [Thread-18495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:58:10.323 [INFO] [Thread-18495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:58:10.324 [DEBUG] [Thread-18495] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:58:10.324 [DEBUG] [Thread-18495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:58:10.325 [DEBUG] [Thread-18495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:58:10.325 [DEBUG] [Thread-18495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:58:10.325 [DEBUG] [Thread-18495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:58:10.325 [DEBUG] [Thread-18495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:58:10.325 [DEBUG] [Thread-18495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:58:10.325 [DEBUG] [Thread-18495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:58:10.325 [DEBUG] [Thread-18495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:58:10.325 [DEBUG] [Thread-18495] [transport.py] [_log()] client lang: <none>
2026-04-15T11:58:10.325 [DEBUG] [Thread-18495] [transport.py] [_log()] server lang: <none>
2026-04-15T11:58:10.325 [DEBUG] [Thread-18495] [transport.py] [_log()] kex follows: False
2026-04-15T11:58:10.325 [DEBUG] [Thread-18495] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:58:10.325 [DEBUG] [Thread-18495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:58:10.326 [DEBUG] [Thread-18495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:58:10.326 [DEBUG] [Thread-18495] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:58:10.326 [DEBUG] [Thread-18495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:58:10.326 [DEBUG] [Thread-18495] [transport.py] [_log()] Compression: none
2026-04-15T11:58:10.326 [DEBUG] [Thread-18495] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:58:10.334 [DEBUG] [Thread-18495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:58:10.335 [DEBUG] [Thread-18495] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:58:10.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:58:10.336 [DEBUG] [Thread-18495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:58:10.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:58:10.337 [DEBUG] [Thread-18495] [transport.py] [_log()] userauth is OK
2026-04-15T11:58:10.337 [DEBUG] [Thread-18495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:58:10.337 [DEBUG] [Thread-18495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:58:10.337 [DEBUG] [Thread-18495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:58:10.337 [DEBUG] [Thread-18495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:58:10.355 [INFO] [Thread-18495] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:58:10.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:58:10.933 [DEBUG] [Thread-18495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:58:10.933 [DEBUG] [Thread-18495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:58:10.934 [DEBUG] [Thread-18495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:58:10.974 [DEBUG] [Thread-18495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:58:10.974 [DEBUG] [Thread-18495] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:58:10.977 [DEBUG] [Thread-18495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:58:10.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:58:10.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:58:10.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:58:10.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:58:10.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:58:10.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:58:10.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:58:10.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:58:10.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:58:10.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.415069 -999.00  +11.70  14.70     77   +7.90 1 3 1 1 1   888    0 4.80 43.40 ----- 17.4 14.7 289.3 18.0 18.0 -8.4 17.2 -8.8 16.6 -7.0 17.4 -7.3
2026-04-15T11:58:10.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:58:10.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:58:10.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.415069
2026-04-15T11:58:10.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:58:10.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:58:11.000 [DEBUG] [Thread-18495] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:58:11.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:58:11.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:58:11.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:58:11.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:57:48', tmtdew=4.92751, humidity=71.9221, cloud=0.0, wind=20.7835, temperature=12.8697, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:57:41.962', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:58:11.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:58:11.260 [DEBUG] [Thread-18498] [transport.py] [_log()] starting thread (client mode): 0xf13fd660
2026-04-15T11:58:11.260 [DEBUG] [Thread-18498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:58:11.274 [DEBUG] [Thread-18498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:58:11.274 [INFO] [Thread-18498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:58:11.281 [DEBUG] [Thread-18498] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:58:11.281 [DEBUG] [Thread-18498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:58:11.282 [DEBUG] [Thread-18498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:58:11.282 [DEBUG] [Thread-18498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:58:11.282 [DEBUG] [Thread-18498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:58:11.282 [DEBUG] [Thread-18498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:58:11.282 [DEBUG] [Thread-18498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:58:11.282 [DEBUG] [Thread-18498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:58:11.282 [DEBUG] [Thread-18498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:58:11.282 [DEBUG] [Thread-18498] [transport.py] [_log()] client lang: <none>
2026-04-15T11:58:11.283 [DEBUG] [Thread-18498] [transport.py] [_log()] server lang: <none>
2026-04-15T11:58:11.283 [DEBUG] [Thread-18498] [transport.py] [_log()] kex follows: False
2026-04-15T11:58:11.283 [DEBUG] [Thread-18498] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:58:11.283 [DEBUG] [Thread-18498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:58:11.283 [DEBUG] [Thread-18498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:58:11.283 [DEBUG] [Thread-18498] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:58:11.283 [DEBUG] [Thread-18498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:58:11.283 [DEBUG] [Thread-18498] [transport.py] [_log()] Compression: none
2026-04-15T11:58:11.283 [DEBUG] [Thread-18498] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:58:11.341 [DEBUG] [Thread-18498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:58:11.341 [DEBUG] [Thread-18498] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:58:11.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:58:11.342 [DEBUG] [Thread-18498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:58:11.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:58:11.398 [DEBUG] [Thread-18498] [transport.py] [_log()] userauth is OK
2026-04-15T11:58:11.398 [DEBUG] [Thread-18498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:58:11.398 [DEBUG] [Thread-18498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:58:11.398 [DEBUG] [Thread-18498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:58:11.398 [DEBUG] [Thread-18498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:58:11.423 [INFO] [Thread-18498] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:58:11.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:58:11.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:58:12.298 [DEBUG] [Thread-18498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:58:12.298 [DEBUG] [Thread-18498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:58:12.345 [DEBUG] [Thread-18498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:58:12.345 [DEBUG] [Thread-18498] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:58:12.353 [DEBUG] [Thread-18498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:58:12.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:58:12.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')
2026-04-15T11:58:12.363 [DEBUG] [Thread-18500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:58:12.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
2026-04-15T11:58:12.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:58:12.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:58:12.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:58:12.385 [DEBUG] [Thread-18498] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:58:18.512 [DEBUG] [Thread-18501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:58:33.557 [DEBUG] [Thread-18502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:58:42.220 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:58:42.221 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:58:42.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:58:42.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:58:42.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
2026-04-15T11:58:43.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 58, 27), 4.99169, 71.3145, 0.0, 13.3391, 12.1022, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:58:43.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:58:27
2026-04-15T11:58:44.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:58:44.537 [DEBUG] [Thread-18503] [transport.py] [_log()] starting thread (client mode): 0xf1336740
2026-04-15T11:58:44.537 [DEBUG] [Thread-18503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:58:44.563 [DEBUG] [Thread-18503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:58:44.563 [INFO] [Thread-18503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:58:44.567 [DEBUG] [Thread-18503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:58:44.567 [DEBUG] [Thread-18503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:58:44.567 [DEBUG] [Thread-18503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:58:44.567 [DEBUG] [Thread-18503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:58:44.567 [DEBUG] [Thread-18503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:58:44.567 [DEBUG] [Thread-18503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:58:44.567 [DEBUG] [Thread-18503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:58:44.567 [DEBUG] [Thread-18503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:58:44.567 [DEBUG] [Thread-18503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:58:44.568 [DEBUG] [Thread-18503] [transport.py] [_log()] client lang: <none>
2026-04-15T11:58:44.568 [DEBUG] [Thread-18503] [transport.py] [_log()] server lang: <none>
2026-04-15T11:58:44.568 [DEBUG] [Thread-18503] [transport.py] [_log()] kex follows: False
2026-04-15T11:58:44.568 [DEBUG] [Thread-18503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:58:44.568 [DEBUG] [Thread-18503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:58:44.568 [DEBUG] [Thread-18503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:58:44.568 [DEBUG] [Thread-18503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:58:44.568 [DEBUG] [Thread-18503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:58:44.568 [DEBUG] [Thread-18503] [transport.py] [_log()] Compression: none
2026-04-15T11:58:44.568 [DEBUG] [Thread-18503] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:58:44.585 [DEBUG] [Thread-18503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:58:44.586 [DEBUG] [Thread-18503] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:58:44.586 [DEBUG] [Thread-18503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:58:44.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:58:44.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:58:44.587 [DEBUG] [Thread-18503] [transport.py] [_log()] userauth is OK
2026-04-15T11:58:44.587 [DEBUG] [Thread-18503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:58:44.588 [DEBUG] [Thread-18503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:58:44.588 [DEBUG] [Thread-18503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:58:44.588 [DEBUG] [Thread-18503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:58:44.606 [INFO] [Thread-18503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:58:44.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:58:45.234 [DEBUG] [Thread-18503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:58:45.234 [DEBUG] [Thread-18503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:58:45.235 [DEBUG] [Thread-18503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:58:45.275 [DEBUG] [Thread-18503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:58:45.275 [DEBUG] [Thread-18503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:58:45.278 [DEBUG] [Thread-18503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:58:45.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:58:45.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:58:45.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:58:45.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:58:45.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:58:45.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:58:45.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:58:45.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:58:45.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:58:45.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.415764 -999.00  +11.90  11.71     78   +8.20 1 3 1 1 1   888    0 4.81 45.61 ----- 19.7 11.7 309.8 14.5 17.9 -8.0 17.2 -7.8 16.6 -8.9 17.4 -6.6
2026-04-15T11:58:45.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:58:45.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:58:45.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.415764
2026-04-15T11:58:45.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:58:45.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:58:45.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:58:45.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:58:45.302 [DEBUG] [Thread-18503] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:58:45.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:58:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:58:27', tmtdew=4.99169, humidity=71.3145, cloud=0.0, wind=13.3391, temperature=12.1022, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:58:42.010', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:58:45.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:58:45.559 [DEBUG] [Thread-18506] [transport.py] [_log()] starting thread (client mode): 0xee9ef700
2026-04-15T11:58:45.559 [DEBUG] [Thread-18506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:58:45.577 [DEBUG] [Thread-18506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:58:45.577 [INFO] [Thread-18506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:58:45.585 [DEBUG] [Thread-18506] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:58:45.585 [DEBUG] [Thread-18506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:58:45.585 [DEBUG] [Thread-18506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:58:45.585 [DEBUG] [Thread-18506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:58:45.585 [DEBUG] [Thread-18506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:58:45.585 [DEBUG] [Thread-18506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:58:45.585 [DEBUG] [Thread-18506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:58:45.585 [DEBUG] [Thread-18506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:58:45.585 [DEBUG] [Thread-18506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:58:45.586 [DEBUG] [Thread-18506] [transport.py] [_log()] client lang: <none>
2026-04-15T11:58:45.586 [DEBUG] [Thread-18506] [transport.py] [_log()] server lang: <none>
2026-04-15T11:58:45.586 [DEBUG] [Thread-18506] [transport.py] [_log()] kex follows: False
2026-04-15T11:58:45.586 [DEBUG] [Thread-18506] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:58:45.586 [DEBUG] [Thread-18506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:58:45.586 [DEBUG] [Thread-18506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:58:45.586 [DEBUG] [Thread-18506] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:58:45.586 [DEBUG] [Thread-18506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:58:45.586 [DEBUG] [Thread-18506] [transport.py] [_log()] Compression: none
2026-04-15T11:58:45.586 [DEBUG] [Thread-18506] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:58:45.640 [DEBUG] [Thread-18506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:58:45.641 [DEBUG] [Thread-18506] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:58:45.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:58:45.642 [DEBUG] [Thread-18506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:58:45.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:58:45.697 [DEBUG] [Thread-18506] [transport.py] [_log()] userauth is OK
2026-04-15T11:58:45.697 [DEBUG] [Thread-18506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:58:45.697 [DEBUG] [Thread-18506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:58:45.698 [DEBUG] [Thread-18506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:58:45.698 [DEBUG] [Thread-18506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:58:45.717 [INFO] [Thread-18506] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:58:45.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:58:45.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:58:46.571 [DEBUG] [Thread-18506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:58:46.572 [DEBUG] [Thread-18506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:58:46.619 [DEBUG] [Thread-18506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:58:46.619 [DEBUG] [Thread-18506] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:58:46.629 [DEBUG] [Thread-18506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:58:46.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:58:46.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')
2026-04-15T11:58:46.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
2026-04-15T11:58:46.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:58:46.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:58:46.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:58:46.663 [DEBUG] [Thread-18506] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:58:48.588 [DEBUG] [Thread-18508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:59:03.633 [DEBUG] [Thread-18509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:59:12.472 [DEBUG] [Thread-18510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:59:16.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:59:16.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:59:16.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
2026-04-15T11:59:17.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 59, 5), 4.91836, 71.6792, 0.0, 14.1329, 12.152, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:59:17.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:59:05
2026-04-15T11:59:18.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:59:18.662 [DEBUG] [Thread-18511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:59:18.764 [DEBUG] [Thread-18512] [transport.py] [_log()] starting thread (client mode): 0xee9ed510
2026-04-15T11:59:18.764 [DEBUG] [Thread-18512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:59:18.782 [DEBUG] [Thread-18512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:59:18.782 [INFO] [Thread-18512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:59:18.784 [DEBUG] [Thread-18512] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:59:18.784 [DEBUG] [Thread-18512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:59:18.784 [DEBUG] [Thread-18512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:59:18.785 [DEBUG] [Thread-18512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:59:18.785 [DEBUG] [Thread-18512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:59:18.785 [DEBUG] [Thread-18512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:59:18.785 [DEBUG] [Thread-18512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:59:18.785 [DEBUG] [Thread-18512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:59:18.785 [DEBUG] [Thread-18512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:59:18.785 [DEBUG] [Thread-18512] [transport.py] [_log()] client lang: <none>
2026-04-15T11:59:18.785 [DEBUG] [Thread-18512] [transport.py] [_log()] server lang: <none>
2026-04-15T11:59:18.785 [DEBUG] [Thread-18512] [transport.py] [_log()] kex follows: False
2026-04-15T11:59:18.785 [DEBUG] [Thread-18512] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:59:18.785 [DEBUG] [Thread-18512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:59:18.785 [DEBUG] [Thread-18512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:59:18.786 [DEBUG] [Thread-18512] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:59:18.786 [DEBUG] [Thread-18512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:59:18.786 [DEBUG] [Thread-18512] [transport.py] [_log()] Compression: none
2026-04-15T11:59:18.786 [DEBUG] [Thread-18512] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:59:18.797 [DEBUG] [Thread-18512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:59:18.797 [DEBUG] [Thread-18512] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:59:18.798 [DEBUG] [Thread-18512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:59:18.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:59:18.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:59:18.799 [DEBUG] [Thread-18512] [transport.py] [_log()] userauth is OK
2026-04-15T11:59:18.799 [DEBUG] [Thread-18512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:59:18.799 [DEBUG] [Thread-18512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:59:18.799 [DEBUG] [Thread-18512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:59:18.799 [DEBUG] [Thread-18512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:59:18.816 [INFO] [Thread-18512] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:59:18.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:59:19.425 [DEBUG] [Thread-18512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:59:19.426 [DEBUG] [Thread-18512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:59:19.426 [DEBUG] [Thread-18512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:59:19.466 [DEBUG] [Thread-18512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:59:19.466 [DEBUG] [Thread-18512] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:59:19.469 [DEBUG] [Thread-18512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:59:19.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:59:19.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:59:19.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:59:19.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:59:19.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:59:19.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:59:19.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:59:19.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:59:19.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:59:19.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.416111 -999.00  +11.80  26.58     76   +7.80 1 3 1 1 1   888    0 5.00 47.57 ----- 26.3 26.6 310.0 28.0 17.7 -8.5 17.2 -8.4 16.4 -8.3 17.2 -7.1
2026-04-15T11:59:19.490 [DEBUG] [Thread-18512] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:59:19.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:59:19.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:59:19.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.416111
2026-04-15T11:59:19.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:59:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:59:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:59:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:59:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:59:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:59:05', tmtdew=4.91836, humidity=71.6792, cloud=0.0, wind=14.1329, temperature=12.152, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:59:11.990', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:59:19.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:59:19.747 [DEBUG] [Thread-18515] [transport.py] [_log()] starting thread (client mode): 0xee9eeb60
2026-04-15T11:59:19.747 [DEBUG] [Thread-18515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:59:19.762 [DEBUG] [Thread-18515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:59:19.762 [INFO] [Thread-18515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:59:19.770 [DEBUG] [Thread-18515] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:59:19.770 [DEBUG] [Thread-18515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:59:19.770 [DEBUG] [Thread-18515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:59:19.770 [DEBUG] [Thread-18515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:59:19.770 [DEBUG] [Thread-18515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:59:19.771 [DEBUG] [Thread-18515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:59:19.771 [DEBUG] [Thread-18515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:59:19.771 [DEBUG] [Thread-18515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:59:19.771 [DEBUG] [Thread-18515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:59:19.771 [DEBUG] [Thread-18515] [transport.py] [_log()] client lang: <none>
2026-04-15T11:59:19.771 [DEBUG] [Thread-18515] [transport.py] [_log()] server lang: <none>
2026-04-15T11:59:19.771 [DEBUG] [Thread-18515] [transport.py] [_log()] kex follows: False
2026-04-15T11:59:19.771 [DEBUG] [Thread-18515] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:59:19.771 [DEBUG] [Thread-18515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:59:19.771 [DEBUG] [Thread-18515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:59:19.771 [DEBUG] [Thread-18515] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:59:19.772 [DEBUG] [Thread-18515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:59:19.772 [DEBUG] [Thread-18515] [transport.py] [_log()] Compression: none
2026-04-15T11:59:19.772 [DEBUG] [Thread-18515] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:59:19.828 [DEBUG] [Thread-18515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:59:19.829 [DEBUG] [Thread-18515] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:59:19.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:59:19.829 [DEBUG] [Thread-18515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:59:19.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:59:19.885 [DEBUG] [Thread-18515] [transport.py] [_log()] userauth is OK
2026-04-15T11:59:19.886 [DEBUG] [Thread-18515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:59:19.886 [DEBUG] [Thread-18515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:59:19.886 [DEBUG] [Thread-18515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:59:19.886 [DEBUG] [Thread-18515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:59:19.913 [INFO] [Thread-18515] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:59:19.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:59:19.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:59:20.737 [DEBUG] [Thread-18515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:59:20.737 [DEBUG] [Thread-18515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:59:20.785 [DEBUG] [Thread-18515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:59:20.785 [DEBUG] [Thread-18515] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:59:20.800 [DEBUG] [Thread-18515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:59:20.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:59:20.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')
2026-04-15T11:59:20.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') -> 00000000
2026-04-15T11:59:20.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:59:20.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:59:20.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:59:20.837 [DEBUG] [Thread-18515] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:59:33.692 [DEBUG] [Thread-18517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:59:42.361 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:59:42.362 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:59:48.737 [DEBUG] [Thread-18518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T11:59:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T11:59:50.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T11:59:50.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
2026-04-15T11:59:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 59, 5), 4.91836, 71.6792, 0.0, 14.1329, 12.152, 0, 0, 0, 2, 0, 0),)
2026-04-15T11:59:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:59:05
2026-04-15T11:59:52.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T11:59:53.032 [DEBUG] [Thread-18519] [transport.py] [_log()] starting thread (client mode): 0xee98e6b0
2026-04-15T11:59:53.033 [DEBUG] [Thread-18519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:59:53.044 [DEBUG] [Thread-18519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T11:59:53.044 [INFO] [Thread-18519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T11:59:53.046 [DEBUG] [Thread-18519] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:59:53.046 [DEBUG] [Thread-18519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T11:59:53.046 [DEBUG] [Thread-18519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:59:53.046 [DEBUG] [Thread-18519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:59:53.046 [DEBUG] [Thread-18519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:59:53.046 [DEBUG] [Thread-18519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:59:53.046 [DEBUG] [Thread-18519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:59:53.046 [DEBUG] [Thread-18519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:59:53.046 [DEBUG] [Thread-18519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:59:53.046 [DEBUG] [Thread-18519] [transport.py] [_log()] client lang: <none>
2026-04-15T11:59:53.046 [DEBUG] [Thread-18519] [transport.py] [_log()] server lang: <none>
2026-04-15T11:59:53.046 [DEBUG] [Thread-18519] [transport.py] [_log()] kex follows: False
2026-04-15T11:59:53.047 [DEBUG] [Thread-18519] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:59:53.047 [DEBUG] [Thread-18519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:59:53.047 [DEBUG] [Thread-18519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:59:53.047 [DEBUG] [Thread-18519] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:59:53.047 [DEBUG] [Thread-18519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:59:53.047 [DEBUG] [Thread-18519] [transport.py] [_log()] Compression: none
2026-04-15T11:59:53.047 [DEBUG] [Thread-18519] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:59:53.058 [DEBUG] [Thread-18519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:59:53.059 [DEBUG] [Thread-18519] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:59:53.059 [DEBUG] [Thread-18519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T11:59:53.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T11:59:53.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:59:53.060 [DEBUG] [Thread-18519] [transport.py] [_log()] userauth is OK
2026-04-15T11:59:53.060 [DEBUG] [Thread-18519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:59:53.060 [DEBUG] [Thread-18519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:59:53.060 [DEBUG] [Thread-18519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T11:59:53.060 [DEBUG] [Thread-18519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:59:53.082 [INFO] [Thread-18519] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:59:53.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:59:53.692 [DEBUG] [Thread-18519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:59:53.692 [DEBUG] [Thread-18519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:59:53.693 [DEBUG] [Thread-18519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T11:59:53.734 [DEBUG] [Thread-18519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:59:53.735 [DEBUG] [Thread-18519] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:59:53.737 [DEBUG] [Thread-18519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:59:53.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:59:53.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T11:59:53.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T11:59:53.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T11:59:53.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:59:53.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T11:59:53.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:59:53.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:59:53.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T11:59:53.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.416458 -999.00  +11.70  24.49     77   +8.00 1 3 1 1 1   888    0 5.03 48.69 ----- 18.3 24.5 313.4 28.3 17.6 -8.3 17.0 -8.4 16.4 -7.4 17.1 -7.0
2026-04-15T11:59:53.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T11:59:53.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T11:59:53.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.416458
2026-04-15T11:59:53.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T11:59:53.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T11:59:53.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T11:59:53.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T11:59:53.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T11:59:53.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:59:05', tmtdew=4.91836, humidity=71.6792, cloud=0.0, wind=14.1329, temperature=12.152, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T09:59:41.971', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T11:59:53.758 [DEBUG] [Thread-18519] [transport.py] [_log()] EOF in transport thread
2026-04-15T11:59:54.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T11:59:54.013 [DEBUG] [Thread-18522] [transport.py] [_log()] starting thread (client mode): 0xee906fe0
2026-04-15T11:59:54.013 [DEBUG] [Thread-18522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T11:59:54.027 [DEBUG] [Thread-18522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T11:59:54.027 [INFO] [Thread-18522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T11:59:54.034 [DEBUG] [Thread-18522] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T11:59:54.034 [DEBUG] [Thread-18522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T11:59:54.034 [DEBUG] [Thread-18522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T11:59:54.035 [DEBUG] [Thread-18522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:59:54.035 [DEBUG] [Thread-18522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T11:59:54.035 [DEBUG] [Thread-18522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:59:54.035 [DEBUG] [Thread-18522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T11:59:54.035 [DEBUG] [Thread-18522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T11:59:54.035 [DEBUG] [Thread-18522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T11:59:54.035 [DEBUG] [Thread-18522] [transport.py] [_log()] client lang: <none>
2026-04-15T11:59:54.035 [DEBUG] [Thread-18522] [transport.py] [_log()] server lang: <none>
2026-04-15T11:59:54.035 [DEBUG] [Thread-18522] [transport.py] [_log()] kex follows: False
2026-04-15T11:59:54.035 [DEBUG] [Thread-18522] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T11:59:54.035 [DEBUG] [Thread-18522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T11:59:54.035 [DEBUG] [Thread-18522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T11:59:54.036 [DEBUG] [Thread-18522] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T11:59:54.036 [DEBUG] [Thread-18522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T11:59:54.036 [DEBUG] [Thread-18522] [transport.py] [_log()] Compression: none
2026-04-15T11:59:54.036 [DEBUG] [Thread-18522] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T11:59:54.092 [DEBUG] [Thread-18522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T11:59:54.093 [DEBUG] [Thread-18522] [transport.py] [_log()] Switch to new keys ...
2026-04-15T11:59:54.093 [DEBUG] [Thread-18522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T11:59:54.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T11:59:54.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T11:59:54.149 [DEBUG] [Thread-18522] [transport.py] [_log()] userauth is OK
2026-04-15T11:59:54.149 [DEBUG] [Thread-18522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T11:59:54.149 [DEBUG] [Thread-18522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T11:59:54.150 [DEBUG] [Thread-18522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T11:59:54.150 [DEBUG] [Thread-18522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T11:59:54.175 [INFO] [Thread-18522] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T11:59:54.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T11:59:54.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T11:59:54.976 [DEBUG] [Thread-18522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T11:59:54.977 [DEBUG] [Thread-18522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T11:59:55.029 [DEBUG] [Thread-18522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T11:59:55.029 [DEBUG] [Thread-18522] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T11:59:55.041 [DEBUG] [Thread-18522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T11:59:55.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T11:59:55.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')
2026-04-15T11:59:55.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
2026-04-15T11:59:55.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T11:59:55.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T11:59:55.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T11:59:55.091 [DEBUG] [Thread-18522] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:00:03.768 [DEBUG] [Thread-18524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:00:12.580 [DEBUG] [Thread-18525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:00:18.810 [DEBUG] [Thread-18526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:00:25.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:00:25.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:00:25.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
2026-04-15T12:00:26.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 11, 59, 44), 5.18894, 70.5958, 0.0, 20.7835, 12.5713, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:00:26.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 11:59:44
2026-04-15T12:00:26.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:00:27.228 [DEBUG] [Thread-18527] [transport.py] [_log()] starting thread (client mode): 0xee90e470
2026-04-15T12:00:27.228 [DEBUG] [Thread-18527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:00:27.248 [DEBUG] [Thread-18527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:00:27.248 [INFO] [Thread-18527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:00:27.251 [DEBUG] [Thread-18527] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:00:27.251 [DEBUG] [Thread-18527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:00:27.251 [DEBUG] [Thread-18527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:00:27.251 [DEBUG] [Thread-18527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:00:27.251 [DEBUG] [Thread-18527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:00:27.251 [DEBUG] [Thread-18527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:00:27.252 [DEBUG] [Thread-18527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:00:27.252 [DEBUG] [Thread-18527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:00:27.252 [DEBUG] [Thread-18527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:00:27.252 [DEBUG] [Thread-18527] [transport.py] [_log()] client lang: <none>
2026-04-15T12:00:27.252 [DEBUG] [Thread-18527] [transport.py] [_log()] server lang: <none>
2026-04-15T12:00:27.252 [DEBUG] [Thread-18527] [transport.py] [_log()] kex follows: False
2026-04-15T12:00:27.252 [DEBUG] [Thread-18527] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:00:27.252 [DEBUG] [Thread-18527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:00:27.252 [DEBUG] [Thread-18527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:00:27.252 [DEBUG] [Thread-18527] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:00:27.252 [DEBUG] [Thread-18527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:00:27.252 [DEBUG] [Thread-18527] [transport.py] [_log()] Compression: none
2026-04-15T12:00:27.253 [DEBUG] [Thread-18527] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:00:27.268 [DEBUG] [Thread-18527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:00:27.268 [DEBUG] [Thread-18527] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:00:27.268 [DEBUG] [Thread-18527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:00:27.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:00:27.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:00:27.270 [DEBUG] [Thread-18527] [transport.py] [_log()] userauth is OK
2026-04-15T12:00:27.270 [DEBUG] [Thread-18527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:00:27.270 [DEBUG] [Thread-18527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:00:27.270 [DEBUG] [Thread-18527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:00:27.270 [DEBUG] [Thread-18527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:00:27.292 [INFO] [Thread-18527] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:00:27.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:00:30.340 [DEBUG] [Thread-18527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:00:30.341 [DEBUG] [Thread-18527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:00:30.341 [DEBUG] [Thread-18527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:00:30.381 [DEBUG] [Thread-18527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:00:30.381 [DEBUG] [Thread-18527] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:00:30.384 [DEBUG] [Thread-18527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:00:30.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:00:30.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:00:30.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:00:30.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:00:30.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:00:30.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:00:30.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:00:30.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:00:30.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:00:30.439 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-15T12:00:30.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T11:59:44', tmtdew=5.18894, humidity=70.5958, cloud=0.0, wind=20.7835, temperature=12.5713, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:00:30.440 [DEBUG] [Thread-18527] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:00:30.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:00:30.703 [DEBUG] [Thread-18530] [transport.py] [_log()] starting thread (client mode): 0xee9e5660
2026-04-15T12:00:30.703 [DEBUG] [Thread-18530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:00:30.717 [DEBUG] [Thread-18530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:00:30.717 [INFO] [Thread-18530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:00:30.724 [DEBUG] [Thread-18530] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:00:30.724 [DEBUG] [Thread-18530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:00:30.724 [DEBUG] [Thread-18530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:00:30.724 [DEBUG] [Thread-18530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:00:30.724 [DEBUG] [Thread-18530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:00:30.725 [DEBUG] [Thread-18530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:00:30.725 [DEBUG] [Thread-18530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:00:30.725 [DEBUG] [Thread-18530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:00:30.725 [DEBUG] [Thread-18530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:00:30.725 [DEBUG] [Thread-18530] [transport.py] [_log()] client lang: <none>
2026-04-15T12:00:30.725 [DEBUG] [Thread-18530] [transport.py] [_log()] server lang: <none>
2026-04-15T12:00:30.725 [DEBUG] [Thread-18530] [transport.py] [_log()] kex follows: False
2026-04-15T12:00:30.725 [DEBUG] [Thread-18530] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:00:30.725 [DEBUG] [Thread-18530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:00:30.725 [DEBUG] [Thread-18530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:00:30.725 [DEBUG] [Thread-18530] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:00:30.725 [DEBUG] [Thread-18530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:00:30.725 [DEBUG] [Thread-18530] [transport.py] [_log()] Compression: none
2026-04-15T12:00:30.725 [DEBUG] [Thread-18530] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:00:30.781 [DEBUG] [Thread-18530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:00:30.782 [DEBUG] [Thread-18530] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:00:30.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:00:30.782 [DEBUG] [Thread-18530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:00:30.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:00:30.838 [DEBUG] [Thread-18530] [transport.py] [_log()] userauth is OK
2026-04-15T12:00:30.838 [DEBUG] [Thread-18530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:00:30.839 [DEBUG] [Thread-18530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:00:30.839 [DEBUG] [Thread-18530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:00:30.839 [DEBUG] [Thread-18530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:00:30.863 [INFO] [Thread-18530] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:00:30.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:00:30.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:00:31.716 [DEBUG] [Thread-18530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:00:31.717 [DEBUG] [Thread-18530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:00:31.764 [DEBUG] [Thread-18530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:00:31.764 [DEBUG] [Thread-18530] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:00:31.773 [DEBUG] [Thread-18530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:00:31.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:00:31.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')
2026-04-15T12:00:31.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
2026-04-15T12:00:31.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:00:31.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:00:31.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:00:31.808 [DEBUG] [Thread-18530] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:00:33.840 [DEBUG] [Thread-18532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:00:42.501 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:00:42.502 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:00:48.882 [DEBUG] [Thread-18533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:01:01.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:01:01.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:01:01.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
2026-04-15T12:01:03.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 0, 22), 4.95971, 71.4472, 0.0, 19.4623, 11.9862, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:01:03.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:00:22
2026-04-15T12:01:03.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:01:03.911 [DEBUG] [Thread-18534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:01:03.995 [DEBUG] [Thread-18535] [transport.py] [_log()] starting thread (client mode): 0xee91f610
2026-04-15T12:01:03.995 [DEBUG] [Thread-18535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:01:04.015 [DEBUG] [Thread-18535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:01:04.015 [INFO] [Thread-18535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:01:04.018 [DEBUG] [Thread-18535] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:01:04.019 [DEBUG] [Thread-18535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:01:04.019 [DEBUG] [Thread-18535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:01:04.019 [DEBUG] [Thread-18535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:01:04.019 [DEBUG] [Thread-18535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:01:04.019 [DEBUG] [Thread-18535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:01:04.019 [DEBUG] [Thread-18535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:01:04.019 [DEBUG] [Thread-18535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:01:04.019 [DEBUG] [Thread-18535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:01:04.019 [DEBUG] [Thread-18535] [transport.py] [_log()] client lang: <none>
2026-04-15T12:01:04.019 [DEBUG] [Thread-18535] [transport.py] [_log()] server lang: <none>
2026-04-15T12:01:04.019 [DEBUG] [Thread-18535] [transport.py] [_log()] kex follows: False
2026-04-15T12:01:04.020 [DEBUG] [Thread-18535] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:01:04.020 [DEBUG] [Thread-18535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:01:04.020 [DEBUG] [Thread-18535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:01:04.020 [DEBUG] [Thread-18535] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:01:04.020 [DEBUG] [Thread-18535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:01:04.020 [DEBUG] [Thread-18535] [transport.py] [_log()] Compression: none
2026-04-15T12:01:04.020 [DEBUG] [Thread-18535] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:01:04.037 [DEBUG] [Thread-18535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:01:04.037 [DEBUG] [Thread-18535] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:01:04.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:01:04.038 [DEBUG] [Thread-18535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:01:04.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:01:04.080 [DEBUG] [Thread-18535] [transport.py] [_log()] userauth is OK
2026-04-15T12:01:04.080 [DEBUG] [Thread-18535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:01:04.081 [DEBUG] [Thread-18535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:01:04.081 [DEBUG] [Thread-18535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:01:04.081 [DEBUG] [Thread-18535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:01:04.106 [INFO] [Thread-18535] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:01:04.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:01:04.847 [DEBUG] [Thread-18535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:01:04.847 [DEBUG] [Thread-18535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:01:04.848 [DEBUG] [Thread-18535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:01:04.888 [DEBUG] [Thread-18535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:01:04.888 [DEBUG] [Thread-18535] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:01:04.890 [DEBUG] [Thread-18535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:01:04.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:01:04.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:01:04.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:01:04.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:01:04.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:01:04.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:01:04.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:01:04.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:01:04.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:01:04.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.417153 -999.00  +11.80  18.35     77   +8.10 1 3 1 1 1   888    0 5.12 52.46 ----- 16.3 18.4 311.2 25.5 17.5 -9.0 16.9 -8.8 16.5 -7.5 17.0 -7.6
2026-04-15T12:01:04.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:01:04.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:01:04.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.417153
2026-04-15T12:01:04.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:01:04.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:01:04.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:01:04.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:01:04.907 [DEBUG] [Thread-18535] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:01:04.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:01:04.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:00:22', tmtdew=4.95971, humidity=71.4472, cloud=0.0, wind=19.4623, temperature=11.9862, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:00:42.019', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:01:05.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:01:05.118 [DEBUG] [Thread-18538] [transport.py] [_log()] starting thread (client mode): 0xee90c160
2026-04-15T12:01:05.118 [DEBUG] [Thread-18538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:01:05.134 [DEBUG] [Thread-18538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:01:05.134 [INFO] [Thread-18538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:01:05.144 [DEBUG] [Thread-18538] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:01:05.145 [DEBUG] [Thread-18538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:01:05.145 [DEBUG] [Thread-18538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:01:05.145 [DEBUG] [Thread-18538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:01:05.145 [DEBUG] [Thread-18538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:01:05.145 [DEBUG] [Thread-18538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:01:05.145 [DEBUG] [Thread-18538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:01:05.145 [DEBUG] [Thread-18538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:01:05.145 [DEBUG] [Thread-18538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:01:05.145 [DEBUG] [Thread-18538] [transport.py] [_log()] client lang: <none>
2026-04-15T12:01:05.145 [DEBUG] [Thread-18538] [transport.py] [_log()] server lang: <none>
2026-04-15T12:01:05.145 [DEBUG] [Thread-18538] [transport.py] [_log()] kex follows: False
2026-04-15T12:01:05.145 [DEBUG] [Thread-18538] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:01:05.146 [DEBUG] [Thread-18538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:01:05.146 [DEBUG] [Thread-18538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:01:05.146 [DEBUG] [Thread-18538] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:01:05.146 [DEBUG] [Thread-18538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:01:05.146 [DEBUG] [Thread-18538] [transport.py] [_log()] Compression: none
2026-04-15T12:01:05.146 [DEBUG] [Thread-18538] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:01:05.203 [DEBUG] [Thread-18538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:01:05.203 [DEBUG] [Thread-18538] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:01:05.204 [DEBUG] [Thread-18538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:01:05.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:01:05.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:01:05.259 [DEBUG] [Thread-18538] [transport.py] [_log()] userauth is OK
2026-04-15T12:01:05.259 [DEBUG] [Thread-18538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:01:05.259 [DEBUG] [Thread-18538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:01:05.260 [DEBUG] [Thread-18538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:01:05.260 [DEBUG] [Thread-18538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:01:05.288 [INFO] [Thread-18538] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:01:05.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:01:05.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:01:06.129 [DEBUG] [Thread-18538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:01:06.129 [DEBUG] [Thread-18538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:01:06.177 [DEBUG] [Thread-18538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:01:06.177 [DEBUG] [Thread-18538] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:01:06.186 [DEBUG] [Thread-18538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:01:06.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:01:06.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')
2026-04-15T12:01:06.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T12:01:06.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:01:06.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:01:06.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:01:06.220 [DEBUG] [Thread-18538] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:01:12.694 [DEBUG] [Thread-18540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:01:18.940 [DEBUG] [Thread-18541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:01:33.984 [DEBUG] [Thread-18542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:01:36.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:01:36.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:01:36.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
2026-04-15T12:01:37.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 0, 58), 5.08587, 70.8285, 0.0, 17.5219, 12.0523, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:01:37.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:00:58
2026-04-15T12:01:37.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:01:38.409 [DEBUG] [Thread-18543] [transport.py] [_log()] starting thread (client mode): 0xf13e31f0
2026-04-15T12:01:38.409 [DEBUG] [Thread-18543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:01:38.429 [DEBUG] [Thread-18543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:01:38.430 [INFO] [Thread-18543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:01:38.432 [DEBUG] [Thread-18543] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:01:38.432 [DEBUG] [Thread-18543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:01:38.432 [DEBUG] [Thread-18543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:01:38.432 [DEBUG] [Thread-18543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:01:38.432 [DEBUG] [Thread-18543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:01:38.432 [DEBUG] [Thread-18543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:01:38.432 [DEBUG] [Thread-18543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:01:38.432 [DEBUG] [Thread-18543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:01:38.433 [DEBUG] [Thread-18543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:01:38.433 [DEBUG] [Thread-18543] [transport.py] [_log()] client lang: <none>
2026-04-15T12:01:38.433 [DEBUG] [Thread-18543] [transport.py] [_log()] server lang: <none>
2026-04-15T12:01:38.433 [DEBUG] [Thread-18543] [transport.py] [_log()] kex follows: False
2026-04-15T12:01:38.433 [DEBUG] [Thread-18543] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:01:38.433 [DEBUG] [Thread-18543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:01:38.433 [DEBUG] [Thread-18543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:01:38.433 [DEBUG] [Thread-18543] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:01:38.433 [DEBUG] [Thread-18543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:01:38.433 [DEBUG] [Thread-18543] [transport.py] [_log()] Compression: none
2026-04-15T12:01:38.433 [DEBUG] [Thread-18543] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:01:38.450 [DEBUG] [Thread-18543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:01:38.451 [DEBUG] [Thread-18543] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:01:38.451 [DEBUG] [Thread-18543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:01:38.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:01:38.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:01:38.452 [DEBUG] [Thread-18543] [transport.py] [_log()] userauth is OK
2026-04-15T12:01:38.452 [DEBUG] [Thread-18543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:01:38.452 [DEBUG] [Thread-18543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:01:38.452 [DEBUG] [Thread-18543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:01:38.453 [DEBUG] [Thread-18543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:01:38.470 [INFO] [Thread-18543] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:01:38.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:01:39.059 [DEBUG] [Thread-18543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:01:39.059 [DEBUG] [Thread-18543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:01:39.060 [DEBUG] [Thread-18543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:01:39.099 [DEBUG] [Thread-18543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:01:39.100 [DEBUG] [Thread-18543] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:01:39.104 [DEBUG] [Thread-18543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:01:39.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:01:39.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:01:39.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:01:39.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:01:39.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:01:39.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:01:39.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:01:39.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:01:39.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:01:39.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.417500 -999.00  +11.80  16.61     76   +7.70 1 3 1 1 1   888    0 5.13 49.72 ----- 12.5 16.6 292.4 19.0 17.6 -9.5 17.0 -8.2 16.4 -8.1 17.1 -8.5
2026-04-15T12:01:39.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:01:39.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:01:39.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.417500
2026-04-15T12:01:39.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:01:39.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:01:39.124 [DEBUG] [Thread-18543] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:01:39.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:01:39.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:01:39.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:01:39.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:00:58', tmtdew=5.08587, humidity=70.8285, cloud=0.0, wind=17.5219, temperature=12.0523, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:01:12.000', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:01:39.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:01:39.340 [DEBUG] [Thread-18546] [transport.py] [_log()] starting thread (client mode): 0xee906140
2026-04-15T12:01:39.341 [DEBUG] [Thread-18546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:01:39.354 [DEBUG] [Thread-18546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:01:39.354 [INFO] [Thread-18546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:01:39.361 [DEBUG] [Thread-18546] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:01:39.361 [DEBUG] [Thread-18546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:01:39.361 [DEBUG] [Thread-18546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:01:39.361 [DEBUG] [Thread-18546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:01:39.361 [DEBUG] [Thread-18546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:01:39.362 [DEBUG] [Thread-18546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:01:39.362 [DEBUG] [Thread-18546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:01:39.362 [DEBUG] [Thread-18546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:01:39.362 [DEBUG] [Thread-18546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:01:39.362 [DEBUG] [Thread-18546] [transport.py] [_log()] client lang: <none>
2026-04-15T12:01:39.362 [DEBUG] [Thread-18546] [transport.py] [_log()] server lang: <none>
2026-04-15T12:01:39.362 [DEBUG] [Thread-18546] [transport.py] [_log()] kex follows: False
2026-04-15T12:01:39.362 [DEBUG] [Thread-18546] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:01:39.362 [DEBUG] [Thread-18546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:01:39.362 [DEBUG] [Thread-18546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:01:39.362 [DEBUG] [Thread-18546] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:01:39.362 [DEBUG] [Thread-18546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:01:39.363 [DEBUG] [Thread-18546] [transport.py] [_log()] Compression: none
2026-04-15T12:01:39.363 [DEBUG] [Thread-18546] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:01:39.419 [DEBUG] [Thread-18546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:01:39.420 [DEBUG] [Thread-18546] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:01:39.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:01:39.420 [DEBUG] [Thread-18546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:01:39.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:01:39.476 [DEBUG] [Thread-18546] [transport.py] [_log()] userauth is OK
2026-04-15T12:01:39.476 [DEBUG] [Thread-18546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:01:39.476 [DEBUG] [Thread-18546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:01:39.477 [DEBUG] [Thread-18546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:01:39.477 [DEBUG] [Thread-18546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:01:39.501 [INFO] [Thread-18546] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:01:39.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:01:39.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:01:40.315 [DEBUG] [Thread-18546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:01:40.315 [DEBUG] [Thread-18546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:01:40.364 [DEBUG] [Thread-18546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:01:40.364 [DEBUG] [Thread-18546] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:01:40.374 [DEBUG] [Thread-18546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:01:40.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:01:40.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')
2026-04-15T12:01:40.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
2026-04-15T12:01:40.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:01:40.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:01:40.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:01:40.421 [DEBUG] [Thread-18546] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:01:42.642 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:01:42.642 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:01:49.016 [DEBUG] [Thread-18548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:02:04.058 [DEBUG] [Thread-18549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:02:10.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:02:10.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:02: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
2026-04-15T12:02:11.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 1, 34), 5.29255, 70.0654, 0.0, 7.9416, 12.4056, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:02:11.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:01:34
2026-04-15T12:02:12.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:02:12.748 [DEBUG] [Thread-18550] [transport.py] [_log()] starting thread (client mode): 0xee942080
2026-04-15T12:02:12.748 [DEBUG] [Thread-18550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:02:12.767 [DEBUG] [Thread-18550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:02:12.767 [INFO] [Thread-18550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:02:12.770 [DEBUG] [Thread-18550] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:02:12.770 [DEBUG] [Thread-18550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:02:12.770 [DEBUG] [Thread-18550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:02:12.770 [DEBUG] [Thread-18550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:02:12.770 [DEBUG] [Thread-18550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:02:12.770 [DEBUG] [Thread-18550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:02:12.771 [DEBUG] [Thread-18550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:02:12.771 [DEBUG] [Thread-18550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:02:12.771 [DEBUG] [Thread-18550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:02:12.771 [DEBUG] [Thread-18550] [transport.py] [_log()] client lang: <none>
2026-04-15T12:02:12.771 [DEBUG] [Thread-18550] [transport.py] [_log()] server lang: <none>
2026-04-15T12:02:12.771 [DEBUG] [Thread-18550] [transport.py] [_log()] kex follows: False
2026-04-15T12:02:12.771 [DEBUG] [Thread-18550] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:02:12.771 [DEBUG] [Thread-18550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:02:12.771 [DEBUG] [Thread-18550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:02:12.771 [DEBUG] [Thread-18550] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:02:12.771 [DEBUG] [Thread-18550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:02:12.771 [DEBUG] [Thread-18550] [transport.py] [_log()] Compression: none
2026-04-15T12:02:12.771 [DEBUG] [Thread-18550] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:02:12.788 [DEBUG] [Thread-18550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:02:12.788 [DEBUG] [Thread-18550] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:02:12.788 [DEBUG] [Thread-18550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:02:12.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:02:12.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:02:12.789 [DEBUG] [Thread-18550] [transport.py] [_log()] userauth is OK
2026-04-15T12:02:12.789 [DEBUG] [Thread-18550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:02:12.789 [DEBUG] [Thread-18550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:02:12.789 [DEBUG] [Thread-18550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:02:12.789 [DEBUG] [Thread-18550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:02:12.794 [DEBUG] [Thread-18552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:02:12.802 [INFO] [Thread-18550] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:02:12.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:02:13.416 [DEBUG] [Thread-18550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:02:13.416 [DEBUG] [Thread-18550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:02:13.416 [DEBUG] [Thread-18550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:02:13.457 [DEBUG] [Thread-18550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:02:13.457 [DEBUG] [Thread-18550] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:02:13.459 [DEBUG] [Thread-18550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:02:13.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:02:13.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:02:13.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:02:13.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:02:13.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:02:13.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:02:13.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:02:13.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:02:13.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:02:13.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.417847 -999.00  +11.80  10.89     76   +7.80 1 3 1 1 1   888    0 5.07 49.34 ----- 11.8 10.9 295.4 15.7 17.6 -9.2 17.0 -8.9 16.6 -8.0 17.2 -7.7
2026-04-15T12:02:13.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:02:13.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:02:13.476 [DEBUG] [Thread-18550] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:02:13.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.417847
2026-04-15T12:02:13.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:02:13.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:02:13.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:02:13.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:02:13.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:02:13.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:01:34', tmtdew=5.29255, humidity=70.0654, cloud=0.0, wind=7.9416, temperature=12.4056, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:01:41.981', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:02:13.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:02:13.737 [DEBUG] [Thread-18554] [transport.py] [_log()] starting thread (client mode): 0xf13648e0
2026-04-15T12:02:13.737 [DEBUG] [Thread-18554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:02:13.751 [DEBUG] [Thread-18554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:02:13.751 [INFO] [Thread-18554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:02:13.759 [DEBUG] [Thread-18554] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:02:13.759 [DEBUG] [Thread-18554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:02:13.759 [DEBUG] [Thread-18554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:02:13.759 [DEBUG] [Thread-18554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:02:13.759 [DEBUG] [Thread-18554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:02:13.759 [DEBUG] [Thread-18554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:02:13.759 [DEBUG] [Thread-18554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:02:13.759 [DEBUG] [Thread-18554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:02:13.759 [DEBUG] [Thread-18554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:02:13.759 [DEBUG] [Thread-18554] [transport.py] [_log()] client lang: <none>
2026-04-15T12:02:13.759 [DEBUG] [Thread-18554] [transport.py] [_log()] server lang: <none>
2026-04-15T12:02:13.760 [DEBUG] [Thread-18554] [transport.py] [_log()] kex follows: False
2026-04-15T12:02:13.760 [DEBUG] [Thread-18554] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:02:13.760 [DEBUG] [Thread-18554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:02:13.760 [DEBUG] [Thread-18554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:02:13.760 [DEBUG] [Thread-18554] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:02:13.760 [DEBUG] [Thread-18554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:02:13.760 [DEBUG] [Thread-18554] [transport.py] [_log()] Compression: none
2026-04-15T12:02:13.760 [DEBUG] [Thread-18554] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:02:13.816 [DEBUG] [Thread-18554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:02:13.816 [DEBUG] [Thread-18554] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:02:13.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:02:13.817 [DEBUG] [Thread-18554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:02:13.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:02:13.873 [DEBUG] [Thread-18554] [transport.py] [_log()] userauth is OK
2026-04-15T12:02:13.873 [DEBUG] [Thread-18554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:02:13.873 [DEBUG] [Thread-18554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:02:13.874 [DEBUG] [Thread-18554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:02:13.874 [DEBUG] [Thread-18554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:02:13.897 [INFO] [Thread-18554] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:02:13.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:02:13.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:02:14.728 [DEBUG] [Thread-18554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:02:14.729 [DEBUG] [Thread-18554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:02:14.776 [DEBUG] [Thread-18554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:02:14.776 [DEBUG] [Thread-18554] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:02:14.785 [DEBUG] [Thread-18554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:02:14.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:02:14.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')
2026-04-15T12:02:14.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
2026-04-15T12:02:14.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:02:14.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:02:14.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:02:14.822 [DEBUG] [Thread-18554] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:02:19.087 [DEBUG] [Thread-18556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:02:34.129 [DEBUG] [Thread-18557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:02:42.782 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:02:42.783 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:02:44.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:02:44.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:02:44.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
2026-04-15T12:02:46.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 2, 9), 5.04435, 71.044, 0.0, 16.321, 11.9686, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:02:46.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:02:09
2026-04-15T12:02:46.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:02:47.019 [DEBUG] [Thread-18558] [transport.py] [_log()] starting thread (client mode): 0xf1366f80
2026-04-15T12:02:47.019 [DEBUG] [Thread-18558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:02:47.037 [DEBUG] [Thread-18558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:02:47.037 [INFO] [Thread-18558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:02:47.040 [DEBUG] [Thread-18558] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:02:47.040 [DEBUG] [Thread-18558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:02:47.040 [DEBUG] [Thread-18558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] client lang: <none>
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] server lang: <none>
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] kex follows: False
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] Compression: none
2026-04-15T12:02:47.041 [DEBUG] [Thread-18558] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:02:47.058 [DEBUG] [Thread-18558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:02:47.058 [DEBUG] [Thread-18558] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:02:47.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:02:47.059 [DEBUG] [Thread-18558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:02:47.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:02:47.060 [DEBUG] [Thread-18558] [transport.py] [_log()] userauth is OK
2026-04-15T12:02:47.060 [DEBUG] [Thread-18558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:02:47.060 [DEBUG] [Thread-18558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:02:47.060 [DEBUG] [Thread-18558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:02:47.060 [DEBUG] [Thread-18558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:02:47.084 [INFO] [Thread-18558] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:02:47.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:02:47.675 [DEBUG] [Thread-18558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:02:47.675 [DEBUG] [Thread-18558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:02:47.675 [DEBUG] [Thread-18558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:02:47.716 [DEBUG] [Thread-18558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:02:47.716 [DEBUG] [Thread-18558] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:02:47.721 [DEBUG] [Thread-18558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:02:47.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:02:47.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:02:47.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:02:47.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:02:47.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:02:47.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:02:47.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:02:47.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:02:47.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:02:47.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.418541 -999.00  +12.00  17.93     78   +8.30 1 3 1 1 1   888    0 5.21 51.03 ----- 18.8 17.9 307.8 20.2 17.9 -7.6 17.2 -8.6 16.8 -7.6 17.4 -7.0
2026-04-15T12:02:47.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:02:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:02:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.418541
2026-04-15T12:02:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:02:47.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:02:47.752 [DEBUG] [Thread-18558] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:02:47.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:02:47.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:02:47.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:02:47.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:02:09', tmtdew=5.04435, humidity=71.044, cloud=0.0, wind=16.321, temperature=11.9686, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:02:41.942', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:02:47.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:02:48.008 [DEBUG] [Thread-18561] [transport.py] [_log()] starting thread (client mode): 0xee91f940
2026-04-15T12:02:48.008 [DEBUG] [Thread-18561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:02:48.022 [DEBUG] [Thread-18561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:02:48.022 [INFO] [Thread-18561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:02:48.029 [DEBUG] [Thread-18561] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:02:48.029 [DEBUG] [Thread-18561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:02:48.029 [DEBUG] [Thread-18561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:02:48.029 [DEBUG] [Thread-18561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:02:48.029 [DEBUG] [Thread-18561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:02:48.030 [DEBUG] [Thread-18561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:02:48.030 [DEBUG] [Thread-18561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:02:48.030 [DEBUG] [Thread-18561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:02:48.030 [DEBUG] [Thread-18561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:02:48.030 [DEBUG] [Thread-18561] [transport.py] [_log()] client lang: <none>
2026-04-15T12:02:48.030 [DEBUG] [Thread-18561] [transport.py] [_log()] server lang: <none>
2026-04-15T12:02:48.030 [DEBUG] [Thread-18561] [transport.py] [_log()] kex follows: False
2026-04-15T12:02:48.030 [DEBUG] [Thread-18561] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:02:48.030 [DEBUG] [Thread-18561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:02:48.030 [DEBUG] [Thread-18561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:02:48.030 [DEBUG] [Thread-18561] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:02:48.030 [DEBUG] [Thread-18561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:02:48.031 [DEBUG] [Thread-18561] [transport.py] [_log()] Compression: none
2026-04-15T12:02:48.031 [DEBUG] [Thread-18561] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:02:48.089 [DEBUG] [Thread-18561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:02:48.089 [DEBUG] [Thread-18561] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:02:48.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:02:48.090 [DEBUG] [Thread-18561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:02:48.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:02:48.146 [DEBUG] [Thread-18561] [transport.py] [_log()] userauth is OK
2026-04-15T12:02:48.146 [DEBUG] [Thread-18561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:02:48.146 [DEBUG] [Thread-18561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:02:48.146 [DEBUG] [Thread-18561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:02:48.146 [DEBUG] [Thread-18561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:02:48.173 [INFO] [Thread-18561] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:02:48.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:02:48.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:02:49.067 [DEBUG] [Thread-18561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:02:49.067 [DEBUG] [Thread-18561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:02:49.115 [DEBUG] [Thread-18561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:02:49.115 [DEBUG] [Thread-18561] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:02:49.124 [DEBUG] [Thread-18561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:02:49.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:02:49.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')
2026-04-15T12:02:49.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
2026-04-15T12:02:49.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:02:49.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:02:49.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:02:49.157 [DEBUG] [Thread-18563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:02:49.158 [DEBUG] [Thread-18561] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:03:04.199 [DEBUG] [Thread-18564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:03:12.898 [DEBUG] [Thread-18565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:03:19.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:03:19.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:03:19.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
2026-04-15T12:03:19.228 [DEBUG] [Thread-18566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:03:20.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 2, 45), 5.08534, 71.1596, 0.0, 21.8066, 12.903, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:03:20.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:02:45
2026-04-15T12:03:20.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:03:21.224 [DEBUG] [Thread-18567] [transport.py] [_log()] starting thread (client mode): 0xf13eeb60
2026-04-15T12:03:21.224 [DEBUG] [Thread-18567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:03:21.244 [DEBUG] [Thread-18567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:03:21.244 [INFO] [Thread-18567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:03:21.245 [DEBUG] [Thread-18567] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:03:21.245 [DEBUG] [Thread-18567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:03:21.245 [DEBUG] [Thread-18567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:03:21.245 [DEBUG] [Thread-18567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:03:21.245 [DEBUG] [Thread-18567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:03:21.245 [DEBUG] [Thread-18567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:03:21.245 [DEBUG] [Thread-18567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:03:21.246 [DEBUG] [Thread-18567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:03:21.246 [DEBUG] [Thread-18567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:03:21.246 [DEBUG] [Thread-18567] [transport.py] [_log()] client lang: <none>
2026-04-15T12:03:21.246 [DEBUG] [Thread-18567] [transport.py] [_log()] server lang: <none>
2026-04-15T12:03:21.246 [DEBUG] [Thread-18567] [transport.py] [_log()] kex follows: False
2026-04-15T12:03:21.246 [DEBUG] [Thread-18567] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:03:21.246 [DEBUG] [Thread-18567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:03:21.246 [DEBUG] [Thread-18567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:03:21.246 [DEBUG] [Thread-18567] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:03:21.246 [DEBUG] [Thread-18567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:03:21.246 [DEBUG] [Thread-18567] [transport.py] [_log()] Compression: none
2026-04-15T12:03:21.247 [DEBUG] [Thread-18567] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:03:21.258 [DEBUG] [Thread-18567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:03:21.258 [DEBUG] [Thread-18567] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:03:21.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:03:21.259 [DEBUG] [Thread-18567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:03:21.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:03:21.260 [DEBUG] [Thread-18567] [transport.py] [_log()] userauth is OK
2026-04-15T12:03:21.260 [DEBUG] [Thread-18567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:03:21.260 [DEBUG] [Thread-18567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:03:21.260 [DEBUG] [Thread-18567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:03:21.261 [DEBUG] [Thread-18567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:03:21.284 [INFO] [Thread-18567] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:03:21.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:03:21.927 [DEBUG] [Thread-18567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:03:21.928 [DEBUG] [Thread-18567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:03:21.928 [DEBUG] [Thread-18567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:03:21.968 [DEBUG] [Thread-18567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:03:21.968 [DEBUG] [Thread-18567] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:03:21.971 [DEBUG] [Thread-18567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:03:21.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:03:21.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:03:21.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:03:21.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:03:21.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:03:21.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:03:21.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:03:21.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:03:21.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:03:21.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.418889 -999.00  +11.80  17.34     76   +7.90 1 3 1 1 1   888    0 5.09 47.72 ----- 19.6 17.3 347.6 23.9 17.8 -8.9 17.2 -8.2 16.8 -6.2 17.4 -6.9
2026-04-15T12:03:21.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:03:21.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:03:21.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.418889
2026-04-15T12:03:21.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:03:21.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:03:21.995 [DEBUG] [Thread-18567] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:03:21.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:03:21.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:03:21.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:03:21.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:02:45', tmtdew=5.08534, humidity=71.1596, cloud=0.0, wind=21.8066, temperature=12.903, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:03:12.010', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:03:22.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:03:22.254 [DEBUG] [Thread-18570] [transport.py] [_log()] starting thread (client mode): 0xf13e1900
2026-04-15T12:03:22.254 [DEBUG] [Thread-18570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:03:22.269 [DEBUG] [Thread-18570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:03:22.269 [INFO] [Thread-18570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:03:22.276 [DEBUG] [Thread-18570] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:03:22.276 [DEBUG] [Thread-18570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:03:22.276 [DEBUG] [Thread-18570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:03:22.276 [DEBUG] [Thread-18570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:03:22.276 [DEBUG] [Thread-18570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:03:22.277 [DEBUG] [Thread-18570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:03:22.277 [DEBUG] [Thread-18570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:03:22.277 [DEBUG] [Thread-18570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:03:22.277 [DEBUG] [Thread-18570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:03:22.277 [DEBUG] [Thread-18570] [transport.py] [_log()] client lang: <none>
2026-04-15T12:03:22.277 [DEBUG] [Thread-18570] [transport.py] [_log()] server lang: <none>
2026-04-15T12:03:22.277 [DEBUG] [Thread-18570] [transport.py] [_log()] kex follows: False
2026-04-15T12:03:22.277 [DEBUG] [Thread-18570] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:03:22.277 [DEBUG] [Thread-18570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:03:22.277 [DEBUG] [Thread-18570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:03:22.278 [DEBUG] [Thread-18570] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:03:22.278 [DEBUG] [Thread-18570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:03:22.278 [DEBUG] [Thread-18570] [transport.py] [_log()] Compression: none
2026-04-15T12:03:22.278 [DEBUG] [Thread-18570] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:03:22.334 [DEBUG] [Thread-18570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:03:22.334 [DEBUG] [Thread-18570] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:03:22.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:03:22.335 [DEBUG] [Thread-18570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:03:22.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:03:22.391 [DEBUG] [Thread-18570] [transport.py] [_log()] userauth is OK
2026-04-15T12:03:22.391 [DEBUG] [Thread-18570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:03:22.391 [DEBUG] [Thread-18570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:03:22.391 [DEBUG] [Thread-18570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:03:22.391 [DEBUG] [Thread-18570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:03:22.417 [INFO] [Thread-18570] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:03:22.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:03:22.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:03:23.217 [DEBUG] [Thread-18570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:03:23.217 [DEBUG] [Thread-18570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:03:23.265 [DEBUG] [Thread-18570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:03:23.265 [DEBUG] [Thread-18570] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:03:23.275 [DEBUG] [Thread-18570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:03:23.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:03: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')
2026-04-15T12:03:23.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
2026-04-15T12:03:23.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:03:23.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:03:23.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:03:23.311 [DEBUG] [Thread-18570] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:03:34.258 [DEBUG] [Thread-18572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:03:42.923 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:03:42.924 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:03:49.298 [DEBUG] [Thread-18573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:03:53.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:03:53.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:03:53.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
2026-04-15T12:03:54.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 3, 21), 5.21663, 70.4995, 0.0, 13.8874, 12.2844, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:03:54.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:03:21
2026-04-15T12:03:54.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:03:55.406 [DEBUG] [Thread-18574] [transport.py] [_log()] starting thread (client mode): 0xf13eeb60
2026-04-15T12:03:55.407 [DEBUG] [Thread-18574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:03:55.428 [DEBUG] [Thread-18574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:03:55.428 [INFO] [Thread-18574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:03:55.430 [DEBUG] [Thread-18574] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:03:55.430 [DEBUG] [Thread-18574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:03:55.430 [DEBUG] [Thread-18574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:03:55.430 [DEBUG] [Thread-18574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:03:55.430 [DEBUG] [Thread-18574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:03:55.430 [DEBUG] [Thread-18574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:03:55.430 [DEBUG] [Thread-18574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:03:55.430 [DEBUG] [Thread-18574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:03:55.430 [DEBUG] [Thread-18574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:03:55.430 [DEBUG] [Thread-18574] [transport.py] [_log()] client lang: <none>
2026-04-15T12:03:55.431 [DEBUG] [Thread-18574] [transport.py] [_log()] server lang: <none>
2026-04-15T12:03:55.431 [DEBUG] [Thread-18574] [transport.py] [_log()] kex follows: False
2026-04-15T12:03:55.431 [DEBUG] [Thread-18574] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:03:55.431 [DEBUG] [Thread-18574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:03:55.431 [DEBUG] [Thread-18574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:03:55.431 [DEBUG] [Thread-18574] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:03:55.431 [DEBUG] [Thread-18574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:03:55.431 [DEBUG] [Thread-18574] [transport.py] [_log()] Compression: none
2026-04-15T12:03:55.431 [DEBUG] [Thread-18574] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:03:55.442 [DEBUG] [Thread-18574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:03:55.443 [DEBUG] [Thread-18574] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:03:55.443 [DEBUG] [Thread-18574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:03:55.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:03:55.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:03:55.444 [DEBUG] [Thread-18574] [transport.py] [_log()] userauth is OK
2026-04-15T12:03:55.445 [DEBUG] [Thread-18574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:03:55.445 [DEBUG] [Thread-18574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:03:55.445 [DEBUG] [Thread-18574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:03:55.445 [DEBUG] [Thread-18574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:03:55.469 [INFO] [Thread-18574] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:03:55.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:03:56.061 [DEBUG] [Thread-18574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:03:56.062 [DEBUG] [Thread-18574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:03:56.062 [DEBUG] [Thread-18574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:03:56.103 [DEBUG] [Thread-18574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:03:56.103 [DEBUG] [Thread-18574] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:03:56.106 [DEBUG] [Thread-18574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:03:56.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:03:56.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:03:56.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:03:56.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:03:56.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:03:56.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:03:56.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:03:56.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:03:56.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:03:56.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.419236 -999.00  +11.70  22.15     76   +7.60 1 3 1 1 1   888    0 5.11 47.73 ----- 19.1 22.1 329.0 25.2 17.9 -8.9 17.2 -8.0 16.7 -6.7 17.4 -7.0
2026-04-15T12:03:56.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:03:56.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:03:56.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.419236
2026-04-15T12:03:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:03:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:03:56.132 [DEBUG] [Thread-18574] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:03:56.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:03:56.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:03:56.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:03:56.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:03:21', tmtdew=5.21663, humidity=70.4995, cloud=0.0, wind=13.8874, temperature=12.2844, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:03:41.990', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:03:56.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:03:56.388 [DEBUG] [Thread-18577] [transport.py] [_log()] starting thread (client mode): 0xee90e0b0
2026-04-15T12:03:56.388 [DEBUG] [Thread-18577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:03:56.402 [DEBUG] [Thread-18577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:03:56.402 [INFO] [Thread-18577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:03:56.409 [DEBUG] [Thread-18577] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:03:56.409 [DEBUG] [Thread-18577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] client lang: <none>
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] server lang: <none>
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] kex follows: False
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] Compression: none
2026-04-15T12:03:56.410 [DEBUG] [Thread-18577] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:03:56.466 [DEBUG] [Thread-18577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:03:56.467 [DEBUG] [Thread-18577] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:03:56.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:03:56.468 [DEBUG] [Thread-18577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:03:56.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:03:56.523 [DEBUG] [Thread-18577] [transport.py] [_log()] userauth is OK
2026-04-15T12:03:56.524 [DEBUG] [Thread-18577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:03:56.524 [DEBUG] [Thread-18577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:03:56.524 [DEBUG] [Thread-18577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:03:56.524 [DEBUG] [Thread-18577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:03:56.548 [INFO] [Thread-18577] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:03:56.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:03:56.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:03:57.377 [DEBUG] [Thread-18577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:03:57.377 [DEBUG] [Thread-18577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:03:57.425 [DEBUG] [Thread-18577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:03:57.425 [DEBUG] [Thread-18577] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:03:57.435 [DEBUG] [Thread-18577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:03:57.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:03:57.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')
2026-04-15T12:03:57.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') -> 00000000
2026-04-15T12:03:57.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:03:57.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:03:57.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:03:57.469 [DEBUG] [Thread-18577] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:04:04.329 [DEBUG] [Thread-18579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:04:13.027 [DEBUG] [Thread-18580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:04:19.373 [DEBUG] [Thread-18581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:04:27.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:04:27.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:04:27.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
2026-04-15T12:04:28.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 3, 56), 5.22809, 70.1845, 0.0, 14.593, 12.2183, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:04:28.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:03:56
2026-04-15T12:04:29.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:04:29.730 [DEBUG] [Thread-18582] [transport.py] [_log()] starting thread (client mode): 0xf13fc610
2026-04-15T12:04:29.731 [DEBUG] [Thread-18582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:04:29.745 [DEBUG] [Thread-18582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:04:29.745 [INFO] [Thread-18582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:04:29.748 [DEBUG] [Thread-18582] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:04:29.748 [DEBUG] [Thread-18582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:04:29.748 [DEBUG] [Thread-18582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:04:29.748 [DEBUG] [Thread-18582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:04:29.749 [DEBUG] [Thread-18582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:04:29.749 [DEBUG] [Thread-18582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:04:29.749 [DEBUG] [Thread-18582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:04:29.749 [DEBUG] [Thread-18582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:04:29.749 [DEBUG] [Thread-18582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:04:29.749 [DEBUG] [Thread-18582] [transport.py] [_log()] client lang: <none>
2026-04-15T12:04:29.749 [DEBUG] [Thread-18582] [transport.py] [_log()] server lang: <none>
2026-04-15T12:04:29.749 [DEBUG] [Thread-18582] [transport.py] [_log()] kex follows: False
2026-04-15T12:04:29.749 [DEBUG] [Thread-18582] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:04:29.749 [DEBUG] [Thread-18582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:04:29.749 [DEBUG] [Thread-18582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:04:29.750 [DEBUG] [Thread-18582] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:04:29.750 [DEBUG] [Thread-18582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:04:29.750 [DEBUG] [Thread-18582] [transport.py] [_log()] Compression: none
2026-04-15T12:04:29.750 [DEBUG] [Thread-18582] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:04:29.767 [DEBUG] [Thread-18582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:04:29.768 [DEBUG] [Thread-18582] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:04:29.768 [DEBUG] [Thread-18582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:04:29.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:04:29.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:04:29.769 [DEBUG] [Thread-18582] [transport.py] [_log()] userauth is OK
2026-04-15T12:04:29.769 [DEBUG] [Thread-18582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:04:29.770 [DEBUG] [Thread-18582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:04:29.770 [DEBUG] [Thread-18582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:04:29.770 [DEBUG] [Thread-18582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:04:29.787 [INFO] [Thread-18582] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:04:29.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:04:30.355 [DEBUG] [Thread-18582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:04:30.355 [DEBUG] [Thread-18582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:04:30.356 [DEBUG] [Thread-18582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:04:30.396 [DEBUG] [Thread-18582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:04:30.396 [DEBUG] [Thread-18582] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:04:30.399 [DEBUG] [Thread-18582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:04:30.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:04:30.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:04:30.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:04:30.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:04:30.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:04:30.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:04:30.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:04:30.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:04:30.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:04:30.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.419583 -999.00  +11.90  16.50     78   +8.20 1 3 1 1 1   888    0 5.06 45.85 ----- 14.5 16.5 310.4 21.5 17.8 -8.9 17.1 -8.0 16.7 -6.4 17.4 -6.8
2026-04-15T12:04:30.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:04:30.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:04:30.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.419583
2026-04-15T12:04:30.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:04:30.426 [DEBUG] [Thread-18582] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:04:30.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:04:30.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:04:30.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:04:30.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:04:30.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:03:56', tmtdew=5.22809, humidity=70.1845, cloud=0.0, wind=14.593, temperature=12.2183, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:04:11.971', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:04:30.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:04:30.681 [DEBUG] [Thread-18585] [transport.py] [_log()] starting thread (client mode): 0xf13e3340
2026-04-15T12:04:30.681 [DEBUG] [Thread-18585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:04:30.698 [DEBUG] [Thread-18585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:04:30.698 [INFO] [Thread-18585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:04:30.705 [DEBUG] [Thread-18585] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:04:30.705 [DEBUG] [Thread-18585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:04:30.705 [DEBUG] [Thread-18585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:04:30.705 [DEBUG] [Thread-18585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:04:30.706 [DEBUG] [Thread-18585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:04:30.706 [DEBUG] [Thread-18585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:04:30.706 [DEBUG] [Thread-18585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:04:30.706 [DEBUG] [Thread-18585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:04:30.706 [DEBUG] [Thread-18585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:04:30.706 [DEBUG] [Thread-18585] [transport.py] [_log()] client lang: <none>
2026-04-15T12:04:30.706 [DEBUG] [Thread-18585] [transport.py] [_log()] server lang: <none>
2026-04-15T12:04:30.706 [DEBUG] [Thread-18585] [transport.py] [_log()] kex follows: False
2026-04-15T12:04:30.706 [DEBUG] [Thread-18585] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:04:30.706 [DEBUG] [Thread-18585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:04:30.706 [DEBUG] [Thread-18585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:04:30.707 [DEBUG] [Thread-18585] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:04:30.707 [DEBUG] [Thread-18585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:04:30.707 [DEBUG] [Thread-18585] [transport.py] [_log()] Compression: none
2026-04-15T12:04:30.707 [DEBUG] [Thread-18585] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:04:30.763 [DEBUG] [Thread-18585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:04:30.763 [DEBUG] [Thread-18585] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:04:30.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:04:30.764 [DEBUG] [Thread-18585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:04:30.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:04:30.820 [DEBUG] [Thread-18585] [transport.py] [_log()] userauth is OK
2026-04-15T12:04:30.820 [DEBUG] [Thread-18585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:04:30.820 [DEBUG] [Thread-18585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:04:30.820 [DEBUG] [Thread-18585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:04:30.820 [DEBUG] [Thread-18585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:04:30.846 [INFO] [Thread-18585] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:04:30.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:04:30.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:04:31.744 [DEBUG] [Thread-18585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:04:31.744 [DEBUG] [Thread-18585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:04:31.795 [DEBUG] [Thread-18585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:04:31.795 [DEBUG] [Thread-18585] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:04:31.804 [DEBUG] [Thread-18585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:04:31.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:04:31.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')
2026-04-15T12:04:31.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
2026-04-15T12:04:31.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:04:31.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:04:31.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:04:31.841 [DEBUG] [Thread-18585] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:04:34.403 [DEBUG] [Thread-18587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:04:43.064 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:04:43.066 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:04:49.440 [DEBUG] [Thread-18588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:05:01.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:05:01.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:05:01.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
2026-04-15T12:05:03.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 4, 31), 5.15865, 70.499, 0.0, 17.239, 12.1349, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:05:03.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:04:31
2026-04-15T12:05:03.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:05:03.963 [DEBUG] [Thread-18589] [transport.py] [_log()] starting thread (client mode): 0xee9e6110
2026-04-15T12:05:03.963 [DEBUG] [Thread-18589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:05:03.983 [DEBUG] [Thread-18589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:05:03.983 [INFO] [Thread-18589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:05:03.985 [DEBUG] [Thread-18589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:05:03.985 [DEBUG] [Thread-18589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:05:03.985 [DEBUG] [Thread-18589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:05:03.986 [DEBUG] [Thread-18589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:05:03.986 [DEBUG] [Thread-18589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:05:03.986 [DEBUG] [Thread-18589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:05:03.986 [DEBUG] [Thread-18589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:05:03.986 [DEBUG] [Thread-18589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:05:03.986 [DEBUG] [Thread-18589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:05:03.986 [DEBUG] [Thread-18589] [transport.py] [_log()] client lang: <none>
2026-04-15T12:05:03.986 [DEBUG] [Thread-18589] [transport.py] [_log()] server lang: <none>
2026-04-15T12:05:03.986 [DEBUG] [Thread-18589] [transport.py] [_log()] kex follows: False
2026-04-15T12:05:03.986 [DEBUG] [Thread-18589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:05:03.986 [DEBUG] [Thread-18589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:05:03.987 [DEBUG] [Thread-18589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:05:03.987 [DEBUG] [Thread-18589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:05:03.987 [DEBUG] [Thread-18589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:05:03.987 [DEBUG] [Thread-18589] [transport.py] [_log()] Compression: none
2026-04-15T12:05:03.987 [DEBUG] [Thread-18589] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:05:03.997 [DEBUG] [Thread-18589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:05:03.997 [DEBUG] [Thread-18589] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:05:03.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:05:03.998 [DEBUG] [Thread-18589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:05:03.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:05:04.040 [DEBUG] [Thread-18589] [transport.py] [_log()] userauth is OK
2026-04-15T12:05:04.040 [DEBUG] [Thread-18589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:05:04.040 [DEBUG] [Thread-18589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:05:04.041 [DEBUG] [Thread-18589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:05:04.041 [DEBUG] [Thread-18589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:05:04.076 [INFO] [Thread-18589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:05:04.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:05:04.470 [DEBUG] [Thread-18591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:05:08.818 [DEBUG] [Thread-18589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:05:08.819 [DEBUG] [Thread-18589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:05:08.819 [DEBUG] [Thread-18589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:05:08.859 [DEBUG] [Thread-18589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:05:08.859 [DEBUG] [Thread-18589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:05:08.862 [DEBUG] [Thread-18589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:05:08.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:05:08.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:05:08.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:05:08.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:05:08.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:05:08.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:05:08.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:05:08.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:05:08.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:05:08.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.419930 -999.00  +12.00  19.20     76   +8.10 1 3 1 1 1   888    0 4.97 42.00 ----- 24.7 19.2 302.2 20.6 17.8 -8.6 17.2 -7.5 16.8 -6.5 17.4 -6.8
2026-04-15T12:05:08.910 [DEBUG] [Thread-18589] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:05:08.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:05:08.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:05:08.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.419930
2026-04-15T12:05:08.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:05:08.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:05:08.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:05:08.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:05:08.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:05:08.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:04:31', tmtdew=5.15865, humidity=70.499, cloud=0.0, wind=17.239, temperature=12.1349, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:04:41.952', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:05:09.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:05:09.168 [DEBUG] [Thread-18593] [transport.py] [_log()] starting thread (client mode): 0xee9e79a0
2026-04-15T12:05:09.169 [DEBUG] [Thread-18593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:05:09.183 [DEBUG] [Thread-18593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:05:09.183 [INFO] [Thread-18593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:05:09.190 [DEBUG] [Thread-18593] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:05:09.190 [DEBUG] [Thread-18593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:05:09.191 [DEBUG] [Thread-18593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:05:09.191 [DEBUG] [Thread-18593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:05:09.191 [DEBUG] [Thread-18593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:05:09.191 [DEBUG] [Thread-18593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:05:09.191 [DEBUG] [Thread-18593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:05:09.191 [DEBUG] [Thread-18593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:05:09.191 [DEBUG] [Thread-18593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:05:09.191 [DEBUG] [Thread-18593] [transport.py] [_log()] client lang: <none>
2026-04-15T12:05:09.191 [DEBUG] [Thread-18593] [transport.py] [_log()] server lang: <none>
2026-04-15T12:05:09.191 [DEBUG] [Thread-18593] [transport.py] [_log()] kex follows: False
2026-04-15T12:05:09.191 [DEBUG] [Thread-18593] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:05:09.192 [DEBUG] [Thread-18593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:05:09.192 [DEBUG] [Thread-18593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:05:09.192 [DEBUG] [Thread-18593] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:05:09.192 [DEBUG] [Thread-18593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:05:09.192 [DEBUG] [Thread-18593] [transport.py] [_log()] Compression: none
2026-04-15T12:05:09.192 [DEBUG] [Thread-18593] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:05:09.247 [DEBUG] [Thread-18593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:05:09.248 [DEBUG] [Thread-18593] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:05:09.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:05:09.248 [DEBUG] [Thread-18593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:05:09.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:05:09.304 [DEBUG] [Thread-18593] [transport.py] [_log()] userauth is OK
2026-04-15T12:05:09.305 [DEBUG] [Thread-18593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:05:09.305 [DEBUG] [Thread-18593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:05:09.305 [DEBUG] [Thread-18593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:05:09.305 [DEBUG] [Thread-18593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:05:09.332 [INFO] [Thread-18593] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:05:09.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:05:09.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:05:10.178 [DEBUG] [Thread-18593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:05:10.178 [DEBUG] [Thread-18593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:05:10.226 [DEBUG] [Thread-18593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:05:10.226 [DEBUG] [Thread-18593] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:05:10.235 [DEBUG] [Thread-18593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:05:10.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:05:10.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')
2026-04-15T12:05:10.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') -> 00000000
2026-04-15T12:05:10.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:05:10.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:05:10.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:05:10.269 [DEBUG] [Thread-18593] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:05:13.153 [DEBUG] [Thread-18595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:05:19.499 [DEBUG] [Thread-18596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:05:34.543 [DEBUG] [Thread-18597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:05:40.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:05:40.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:05:40.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
2026-04-15T12:05:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 5, 7), 5.12195, 70.6813, 0.0, 18.4738, 12.1681, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:05:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:05:07
2026-04-15T12:05:41.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:05:42.376 [DEBUG] [Thread-18598] [transport.py] [_log()] starting thread (client mode): 0xee902500
2026-04-15T12:05:42.376 [DEBUG] [Thread-18598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:05:42.397 [DEBUG] [Thread-18598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:05:42.397 [INFO] [Thread-18598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:05:42.400 [DEBUG] [Thread-18598] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:05:42.400 [DEBUG] [Thread-18598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:05:42.400 [DEBUG] [Thread-18598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:05:42.400 [DEBUG] [Thread-18598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:05:42.400 [DEBUG] [Thread-18598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:05:42.400 [DEBUG] [Thread-18598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:05:42.401 [DEBUG] [Thread-18598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:05:42.401 [DEBUG] [Thread-18598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:05:42.401 [DEBUG] [Thread-18598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:05:42.401 [DEBUG] [Thread-18598] [transport.py] [_log()] client lang: <none>
2026-04-15T12:05:42.401 [DEBUG] [Thread-18598] [transport.py] [_log()] server lang: <none>
2026-04-15T12:05:42.401 [DEBUG] [Thread-18598] [transport.py] [_log()] kex follows: False
2026-04-15T12:05:42.401 [DEBUG] [Thread-18598] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:05:42.401 [DEBUG] [Thread-18598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:05:42.401 [DEBUG] [Thread-18598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:05:42.401 [DEBUG] [Thread-18598] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:05:42.402 [DEBUG] [Thread-18598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:05:42.402 [DEBUG] [Thread-18598] [transport.py] [_log()] Compression: none
2026-04-15T12:05:42.402 [DEBUG] [Thread-18598] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:05:42.417 [DEBUG] [Thread-18598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:05:42.418 [DEBUG] [Thread-18598] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:05:42.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:05:42.418 [DEBUG] [Thread-18598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:05:42.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:05:42.419 [DEBUG] [Thread-18598] [transport.py] [_log()] userauth is OK
2026-04-15T12:05:42.419 [DEBUG] [Thread-18598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:05:42.419 [DEBUG] [Thread-18598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:05:42.420 [DEBUG] [Thread-18598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:05:42.420 [DEBUG] [Thread-18598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:05:42.445 [INFO] [Thread-18598] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:05:42.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:05:43.039 [DEBUG] [Thread-18598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:05:43.039 [DEBUG] [Thread-18598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:05:43.040 [DEBUG] [Thread-18598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:05:43.080 [DEBUG] [Thread-18598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:05:43.080 [DEBUG] [Thread-18598] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:05:43.082 [DEBUG] [Thread-18598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:05:43.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:05:43.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:05:43.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:05:43.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:05:43.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:05:43.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:05:43.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:05:43.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:05:43.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:05:43.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.420278 -999.00  +11.90  25.23     75   +7.60 1 3 1 1 1   888    0 4.86 39.27 ----- 19.1 25.2 297.8 26.8 17.8 -8.3 17.2 -7.9 16.6 -6.5 17.4 -7.2
2026-04-15T12:05:43.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:05:43.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:05:43.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.420278
2026-04-15T12:05:43.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:05:43.102 [DEBUG] [Thread-18598] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:05:43.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:05:43.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:05:43.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:05:43.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:05:43.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:05:07', tmtdew=5.12195, humidity=70.6813, cloud=0.0, wind=18.4738, temperature=12.1681, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:05:12.019', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:05:43.204 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:05:43.205 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:05:43.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:05:43.358 [DEBUG] [Thread-18601] [transport.py] [_log()] starting thread (client mode): 0xf13fe0b0
2026-04-15T12:05:43.358 [DEBUG] [Thread-18601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:05:43.372 [DEBUG] [Thread-18601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:05:43.372 [INFO] [Thread-18601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:05:43.379 [DEBUG] [Thread-18601] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:05:43.379 [DEBUG] [Thread-18601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:05:43.379 [DEBUG] [Thread-18601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:05:43.379 [DEBUG] [Thread-18601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:05:43.380 [DEBUG] [Thread-18601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:05:43.380 [DEBUG] [Thread-18601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:05:43.380 [DEBUG] [Thread-18601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:05:43.380 [DEBUG] [Thread-18601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:05:43.380 [DEBUG] [Thread-18601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:05:43.380 [DEBUG] [Thread-18601] [transport.py] [_log()] client lang: <none>
2026-04-15T12:05:43.380 [DEBUG] [Thread-18601] [transport.py] [_log()] server lang: <none>
2026-04-15T12:05:43.380 [DEBUG] [Thread-18601] [transport.py] [_log()] kex follows: False
2026-04-15T12:05:43.380 [DEBUG] [Thread-18601] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:05:43.380 [DEBUG] [Thread-18601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:05:43.380 [DEBUG] [Thread-18601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:05:43.380 [DEBUG] [Thread-18601] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:05:43.381 [DEBUG] [Thread-18601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:05:43.381 [DEBUG] [Thread-18601] [transport.py] [_log()] Compression: none
2026-04-15T12:05:43.381 [DEBUG] [Thread-18601] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:05:43.436 [DEBUG] [Thread-18601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:05:43.436 [DEBUG] [Thread-18601] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:05:43.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:05:43.437 [DEBUG] [Thread-18601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:05:43.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:05:43.493 [DEBUG] [Thread-18601] [transport.py] [_log()] userauth is OK
2026-04-15T12:05:43.493 [DEBUG] [Thread-18601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:05:43.493 [DEBUG] [Thread-18601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:05:43.493 [DEBUG] [Thread-18601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:05:43.494 [DEBUG] [Thread-18601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:05:43.518 [INFO] [Thread-18601] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:05:43.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:05:43.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:05:44.319 [DEBUG] [Thread-18601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:05:44.320 [DEBUG] [Thread-18601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:05:44.370 [DEBUG] [Thread-18601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:05:44.370 [DEBUG] [Thread-18601] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:05:44.380 [DEBUG] [Thread-18601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:05:44.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:05:44.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')
2026-04-15T12:05:44.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
2026-04-15T12:05:44.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:05:44.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:05:44.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:05:44.417 [DEBUG] [Thread-18601] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:05:49.575 [DEBUG] [Thread-18603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:06:04.622 [DEBUG] [Thread-18604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:06:13.265 [DEBUG] [Thread-18605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:06:14.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:06:14.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:06:14.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
2026-04-15T12:06:15.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 5, 43), 5.36441, 69.7986, 0.0, 19.4076, 12.8022, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:06:15.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:05:43
2026-04-15T12:06:16.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:06:16.487 [DEBUG] [Thread-18606] [transport.py] [_log()] starting thread (client mode): 0xf13c83d0
2026-04-15T12:06:16.488 [DEBUG] [Thread-18606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:06:16.507 [DEBUG] [Thread-18606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:06:16.507 [INFO] [Thread-18606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:06:16.510 [DEBUG] [Thread-18606] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:06:16.510 [DEBUG] [Thread-18606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:06:16.511 [DEBUG] [Thread-18606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:06:16.511 [DEBUG] [Thread-18606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:06:16.511 [DEBUG] [Thread-18606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:06:16.511 [DEBUG] [Thread-18606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:06:16.511 [DEBUG] [Thread-18606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:06:16.511 [DEBUG] [Thread-18606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:06:16.511 [DEBUG] [Thread-18606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:06:16.511 [DEBUG] [Thread-18606] [transport.py] [_log()] client lang: <none>
2026-04-15T12:06:16.511 [DEBUG] [Thread-18606] [transport.py] [_log()] server lang: <none>
2026-04-15T12:06:16.511 [DEBUG] [Thread-18606] [transport.py] [_log()] kex follows: False
2026-04-15T12:06:16.511 [DEBUG] [Thread-18606] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:06:16.511 [DEBUG] [Thread-18606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:06:16.511 [DEBUG] [Thread-18606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:06:16.512 [DEBUG] [Thread-18606] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:06:16.512 [DEBUG] [Thread-18606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:06:16.512 [DEBUG] [Thread-18606] [transport.py] [_log()] Compression: none
2026-04-15T12:06:16.512 [DEBUG] [Thread-18606] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:06:16.520 [DEBUG] [Thread-18606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:06:16.520 [DEBUG] [Thread-18606] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:06:16.521 [DEBUG] [Thread-18606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:06:16.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:06:16.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:06:16.522 [DEBUG] [Thread-18606] [transport.py] [_log()] userauth is OK
2026-04-15T12:06:16.522 [DEBUG] [Thread-18606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:06:16.522 [DEBUG] [Thread-18606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:06:16.522 [DEBUG] [Thread-18606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:06:16.522 [DEBUG] [Thread-18606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:06:16.540 [INFO] [Thread-18606] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:06:16.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:06:17.144 [DEBUG] [Thread-18606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:06:17.145 [DEBUG] [Thread-18606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:06:17.145 [DEBUG] [Thread-18606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:06:17.185 [DEBUG] [Thread-18606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:06:17.185 [DEBUG] [Thread-18606] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:06:17.188 [DEBUG] [Thread-18606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:06:17.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:06:17.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:06:17.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:06:17.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:06:17.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:06:17.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:06:17.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:06:17.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:06:17.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:06:17.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.420972 -999.00  +11.60  16.38     75   +7.50 1 3 1 1 1   888    0 4.84 34.88 ----- 10.5 16.4 293.2 19.7 17.7 -7.9 17.1 -7.7 16.7 -6.9 17.3 -7.4
2026-04-15T12:06:17.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:06:17.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:06:17.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.420972
2026-04-15T12:06:17.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:06:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:06:17.211 [DEBUG] [Thread-18606] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:06:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:06:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:06:17.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:06:17.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:05:43', tmtdew=5.36441, humidity=69.7986, cloud=0.0, wind=19.4076, temperature=12.8022, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:06:11.981', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:06:17.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:06:17.465 [DEBUG] [Thread-18609] [transport.py] [_log()] starting thread (client mode): 0xf13cbee0
2026-04-15T12:06:17.466 [DEBUG] [Thread-18609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:06:17.479 [DEBUG] [Thread-18609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:06:17.479 [INFO] [Thread-18609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:06:17.486 [DEBUG] [Thread-18609] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:06:17.486 [DEBUG] [Thread-18609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:06:17.487 [DEBUG] [Thread-18609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:06:17.487 [DEBUG] [Thread-18609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:06:17.487 [DEBUG] [Thread-18609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:06:17.487 [DEBUG] [Thread-18609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:06:17.487 [DEBUG] [Thread-18609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:06:17.487 [DEBUG] [Thread-18609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:06:17.487 [DEBUG] [Thread-18609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:06:17.487 [DEBUG] [Thread-18609] [transport.py] [_log()] client lang: <none>
2026-04-15T12:06:17.487 [DEBUG] [Thread-18609] [transport.py] [_log()] server lang: <none>
2026-04-15T12:06:17.487 [DEBUG] [Thread-18609] [transport.py] [_log()] kex follows: False
2026-04-15T12:06:17.488 [DEBUG] [Thread-18609] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:06:17.488 [DEBUG] [Thread-18609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:06:17.488 [DEBUG] [Thread-18609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:06:17.488 [DEBUG] [Thread-18609] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:06:17.488 [DEBUG] [Thread-18609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:06:17.488 [DEBUG] [Thread-18609] [transport.py] [_log()] Compression: none
2026-04-15T12:06:17.488 [DEBUG] [Thread-18609] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:06:17.544 [DEBUG] [Thread-18609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:06:17.545 [DEBUG] [Thread-18609] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:06:17.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:06:17.545 [DEBUG] [Thread-18609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:06:17.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:06:17.601 [DEBUG] [Thread-18609] [transport.py] [_log()] userauth is OK
2026-04-15T12:06:17.602 [DEBUG] [Thread-18609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:06:17.602 [DEBUG] [Thread-18609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:06:17.602 [DEBUG] [Thread-18609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:06:17.602 [DEBUG] [Thread-18609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:06:17.630 [INFO] [Thread-18609] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:06:17.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:06:17.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:06:18.451 [DEBUG] [Thread-18609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:06:18.451 [DEBUG] [Thread-18609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:06:18.499 [DEBUG] [Thread-18609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:06:18.499 [DEBUG] [Thread-18609] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:06:18.508 [DEBUG] [Thread-18609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:06:18.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:06:18.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')
2026-04-15T12:06:18.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') -> 00000000
2026-04-15T12:06:18.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:06:18.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:06:18.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:06:18.543 [DEBUG] [Thread-18609] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:06:19.653 [DEBUG] [Thread-18611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:06:34.694 [DEBUG] [Thread-18612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:06:43.346 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:06:43.347 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:06:48.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:06:48.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:06:48.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
2026-04-15T12:06:49.725 [DEBUG] [Thread-18613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:06:49.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 6, 19), 5.39899, 69.7998, 0.0, 11.664, 12.2016, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:06:49.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:06:19
2026-04-15T12:06:50.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:06:50.663 [DEBUG] [Thread-18614] [transport.py] [_log()] starting thread (client mode): 0xee9eeb00
2026-04-15T12:06:50.663 [DEBUG] [Thread-18614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:06:50.684 [DEBUG] [Thread-18614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:06:50.684 [INFO] [Thread-18614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:06:50.687 [DEBUG] [Thread-18614] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:06:50.687 [DEBUG] [Thread-18614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:06:50.687 [DEBUG] [Thread-18614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:06:50.687 [DEBUG] [Thread-18614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:06:50.687 [DEBUG] [Thread-18614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:06:50.687 [DEBUG] [Thread-18614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:06:50.687 [DEBUG] [Thread-18614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:06:50.687 [DEBUG] [Thread-18614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:06:50.687 [DEBUG] [Thread-18614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:06:50.688 [DEBUG] [Thread-18614] [transport.py] [_log()] client lang: <none>
2026-04-15T12:06:50.688 [DEBUG] [Thread-18614] [transport.py] [_log()] server lang: <none>
2026-04-15T12:06:50.688 [DEBUG] [Thread-18614] [transport.py] [_log()] kex follows: False
2026-04-15T12:06:50.688 [DEBUG] [Thread-18614] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:06:50.688 [DEBUG] [Thread-18614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:06:50.688 [DEBUG] [Thread-18614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:06:50.688 [DEBUG] [Thread-18614] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:06:50.688 [DEBUG] [Thread-18614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:06:50.688 [DEBUG] [Thread-18614] [transport.py] [_log()] Compression: none
2026-04-15T12:06:50.688 [DEBUG] [Thread-18614] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:06:50.705 [DEBUG] [Thread-18614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:06:50.706 [DEBUG] [Thread-18614] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:06:50.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:06:50.706 [DEBUG] [Thread-18614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:06:50.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:06:50.748 [DEBUG] [Thread-18614] [transport.py] [_log()] userauth is OK
2026-04-15T12:06:50.748 [DEBUG] [Thread-18614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:06:50.748 [DEBUG] [Thread-18614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:06:50.748 [DEBUG] [Thread-18614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:06:50.749 [DEBUG] [Thread-18614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:06:50.773 [INFO] [Thread-18614] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:06:50.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:06:51.385 [DEBUG] [Thread-18614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:06:51.386 [DEBUG] [Thread-18614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:06:51.386 [DEBUG] [Thread-18614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:06:51.426 [DEBUG] [Thread-18614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:06:51.426 [DEBUG] [Thread-18614] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:06:51.429 [DEBUG] [Thread-18614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:06:51.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:06:51.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:06:51.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:06:51.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:06:51.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:06:51.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:06:51.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:06:51.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:06:51.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:06:51.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.421319 -999.00  +11.60  15.88     76   +7.60 1 3 1 1 1   888    0 4.73 32.33 ----- 14.2 15.9 314.8 17.9 17.8 -7.7 17.2 -6.7 16.7 -6.4 17.4 -7.8
2026-04-15T12:06:51.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:06:51.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:06:51.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.421319
2026-04-15T12:06:51.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:06:51.445 [DEBUG] [Thread-18614] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:06:51.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:06:51.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:06:51.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:06:51.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:06:51.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:06:19', tmtdew=5.39899, humidity=69.7998, cloud=0.0, wind=11.664, temperature=12.2016, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:06:41.962', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:06:51.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:06:51.709 [DEBUG] [Thread-18617] [transport.py] [_log()] starting thread (client mode): 0xee91c340
2026-04-15T12:06:51.709 [DEBUG] [Thread-18617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:06:51.723 [DEBUG] [Thread-18617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:06:51.723 [INFO] [Thread-18617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:06:51.730 [DEBUG] [Thread-18617] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:06:51.730 [DEBUG] [Thread-18617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:06:51.730 [DEBUG] [Thread-18617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:06:51.730 [DEBUG] [Thread-18617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:06:51.730 [DEBUG] [Thread-18617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:06:51.731 [DEBUG] [Thread-18617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:06:51.731 [DEBUG] [Thread-18617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:06:51.731 [DEBUG] [Thread-18617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:06:51.731 [DEBUG] [Thread-18617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:06:51.731 [DEBUG] [Thread-18617] [transport.py] [_log()] client lang: <none>
2026-04-15T12:06:51.731 [DEBUG] [Thread-18617] [transport.py] [_log()] server lang: <none>
2026-04-15T12:06:51.731 [DEBUG] [Thread-18617] [transport.py] [_log()] kex follows: False
2026-04-15T12:06:51.731 [DEBUG] [Thread-18617] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:06:51.731 [DEBUG] [Thread-18617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:06:51.731 [DEBUG] [Thread-18617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:06:51.731 [DEBUG] [Thread-18617] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:06:51.732 [DEBUG] [Thread-18617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:06:51.732 [DEBUG] [Thread-18617] [transport.py] [_log()] Compression: none
2026-04-15T12:06:51.732 [DEBUG] [Thread-18617] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:06:51.789 [DEBUG] [Thread-18617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:06:51.789 [DEBUG] [Thread-18617] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:06:51.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:06:51.790 [DEBUG] [Thread-18617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:06:51.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:06:51.850 [DEBUG] [Thread-18617] [transport.py] [_log()] userauth is OK
2026-04-15T12:06:51.850 [DEBUG] [Thread-18617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:06:51.851 [DEBUG] [Thread-18617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:06:51.851 [DEBUG] [Thread-18617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:06:51.851 [DEBUG] [Thread-18617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:06:51.880 [INFO] [Thread-18617] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:06:51.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:06:51.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:06:52.714 [DEBUG] [Thread-18617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:06:52.714 [DEBUG] [Thread-18617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:06:52.762 [DEBUG] [Thread-18617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:06:52.762 [DEBUG] [Thread-18617] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:06:52.771 [DEBUG] [Thread-18617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:06:52.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:06:52.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T12:06:52.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T12:06:52.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:06:52.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:06:52.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:06:52.806 [DEBUG] [Thread-18617] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:07:04.756 [DEBUG] [Thread-18619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:07:13.388 [DEBUG] [Thread-18620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:07:19.799 [DEBUG] [Thread-18621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:07:22.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:07:22.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:07:22.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
2026-04-15T12:07:24.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 6, 54), 5.18213, 70.6599, 0.0, 12.8808, 12.7351, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:07:24.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:06:54
2026-04-15T12:07:24.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:07:24.879 [DEBUG] [Thread-18622] [transport.py] [_log()] starting thread (client mode): 0xee988670
2026-04-15T12:07:24.879 [DEBUG] [Thread-18622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:07:24.897 [DEBUG] [Thread-18622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:07:24.897 [INFO] [Thread-18622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:07:24.899 [DEBUG] [Thread-18622] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:07:24.899 [DEBUG] [Thread-18622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:07:24.899 [DEBUG] [Thread-18622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:07:24.899 [DEBUG] [Thread-18622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:07:24.900 [DEBUG] [Thread-18622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:07:24.900 [DEBUG] [Thread-18622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:07:24.900 [DEBUG] [Thread-18622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:07:24.900 [DEBUG] [Thread-18622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:07:24.900 [DEBUG] [Thread-18622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:07:24.900 [DEBUG] [Thread-18622] [transport.py] [_log()] client lang: <none>
2026-04-15T12:07:24.900 [DEBUG] [Thread-18622] [transport.py] [_log()] server lang: <none>
2026-04-15T12:07:24.900 [DEBUG] [Thread-18622] [transport.py] [_log()] kex follows: False
2026-04-15T12:07:24.900 [DEBUG] [Thread-18622] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:07:24.900 [DEBUG] [Thread-18622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:07:24.901 [DEBUG] [Thread-18622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:07:24.901 [DEBUG] [Thread-18622] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:07:24.901 [DEBUG] [Thread-18622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:07:24.901 [DEBUG] [Thread-18622] [transport.py] [_log()] Compression: none
2026-04-15T12:07:24.901 [DEBUG] [Thread-18622] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:07:24.916 [DEBUG] [Thread-18622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:07:24.917 [DEBUG] [Thread-18622] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:07:24.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:07:24.917 [DEBUG] [Thread-18622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:07:24.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:07:24.918 [DEBUG] [Thread-18622] [transport.py] [_log()] userauth is OK
2026-04-15T12:07:24.918 [DEBUG] [Thread-18622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:07:24.919 [DEBUG] [Thread-18622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:07:24.919 [DEBUG] [Thread-18622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:07:24.919 [DEBUG] [Thread-18622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:07:24.939 [INFO] [Thread-18622] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:07:24.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:07:25.503 [DEBUG] [Thread-18622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:07:25.503 [DEBUG] [Thread-18622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:07:25.504 [DEBUG] [Thread-18622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:07:25.544 [DEBUG] [Thread-18622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:07:25.544 [DEBUG] [Thread-18622] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:07:25.546 [DEBUG] [Thread-18622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:07:25.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:07:25.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:07:25.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:07:25.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:07:25.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:07:25.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:07:25.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:07:25.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:07:25.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:07:25.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.421655 -999.00  +11.70  13.14     77   +8.00 1 3 1 1 1   888    0 4.62 28.48 ----- 17.9 13.1 299.6 19.2 17.8 -8.6 17.2 -7.1 16.7 -8.5 17.4 -9.0
2026-04-15T12:07:25.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:07:25.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:07:25.565 [DEBUG] [Thread-18622] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:07:25.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.421655
2026-04-15T12:07:25.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:07:25.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:07:25.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:07:25.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:07:25.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:07:25.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:06:54', tmtdew=5.18213, humidity=70.6599, cloud=0.0, wind=12.8808, temperature=12.7351, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:07:10.992', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:07:25.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:07:25.820 [DEBUG] [Thread-18625] [transport.py] [_log()] starting thread (client mode): 0xf13ff850
2026-04-15T12:07:25.821 [DEBUG] [Thread-18625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:07:25.834 [DEBUG] [Thread-18625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:07:25.835 [INFO] [Thread-18625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:07:25.842 [DEBUG] [Thread-18625] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:07:25.842 [DEBUG] [Thread-18625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:07:25.842 [DEBUG] [Thread-18625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:07:25.842 [DEBUG] [Thread-18625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:07:25.842 [DEBUG] [Thread-18625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:07:25.842 [DEBUG] [Thread-18625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:07:25.842 [DEBUG] [Thread-18625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:07:25.842 [DEBUG] [Thread-18625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:07:25.842 [DEBUG] [Thread-18625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:07:25.842 [DEBUG] [Thread-18625] [transport.py] [_log()] client lang: <none>
2026-04-15T12:07:25.843 [DEBUG] [Thread-18625] [transport.py] [_log()] server lang: <none>
2026-04-15T12:07:25.843 [DEBUG] [Thread-18625] [transport.py] [_log()] kex follows: False
2026-04-15T12:07:25.843 [DEBUG] [Thread-18625] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:07:25.843 [DEBUG] [Thread-18625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:07:25.843 [DEBUG] [Thread-18625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:07:25.843 [DEBUG] [Thread-18625] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:07:25.843 [DEBUG] [Thread-18625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:07:25.843 [DEBUG] [Thread-18625] [transport.py] [_log()] Compression: none
2026-04-15T12:07:25.843 [DEBUG] [Thread-18625] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:07:25.902 [DEBUG] [Thread-18625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:07:25.902 [DEBUG] [Thread-18625] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:07:25.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:07:25.903 [DEBUG] [Thread-18625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:07:25.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:07:25.958 [DEBUG] [Thread-18625] [transport.py] [_log()] userauth is OK
2026-04-15T12:07:25.958 [DEBUG] [Thread-18625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:07:25.958 [DEBUG] [Thread-18625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:07:25.958 [DEBUG] [Thread-18625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:07:25.959 [DEBUG] [Thread-18625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:07:25.983 [INFO] [Thread-18625] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:07:25.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:07:25.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:07:26.837 [DEBUG] [Thread-18625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:07:26.838 [DEBUG] [Thread-18625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:07:26.885 [DEBUG] [Thread-18625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:07:26.885 [DEBUG] [Thread-18625] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:07:26.894 [DEBUG] [Thread-18625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:07:26.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:07:26.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')
2026-04-15T12:07:26.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
2026-04-15T12:07:26.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:07:26.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:07:26.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:07:26.928 [DEBUG] [Thread-18625] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:07:34.832 [DEBUG] [Thread-18627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:07:43.490 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:07:43.492 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:07:49.876 [DEBUG] [Thread-18628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:07:56.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:07:56.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:07:56.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
2026-04-15T12:07:58.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 7, 30), 5.29483, 70.3465, 0.0, 9.03492, 12.2499, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:07:58.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:07:30
2026-04-15T12:07:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:07:59.022 [DEBUG] [Thread-18629] [transport.py] [_log()] starting thread (client mode): 0xee989960
2026-04-15T12:07:59.022 [DEBUG] [Thread-18629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:07:59.034 [DEBUG] [Thread-18629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:07:59.034 [INFO] [Thread-18629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:07:59.037 [DEBUG] [Thread-18629] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:07:59.037 [DEBUG] [Thread-18629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:07:59.037 [DEBUG] [Thread-18629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:07:59.037 [DEBUG] [Thread-18629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:07:59.037 [DEBUG] [Thread-18629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:07:59.037 [DEBUG] [Thread-18629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:07:59.037 [DEBUG] [Thread-18629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:07:59.037 [DEBUG] [Thread-18629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:07:59.038 [DEBUG] [Thread-18629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:07:59.038 [DEBUG] [Thread-18629] [transport.py] [_log()] client lang: <none>
2026-04-15T12:07:59.038 [DEBUG] [Thread-18629] [transport.py] [_log()] server lang: <none>
2026-04-15T12:07:59.038 [DEBUG] [Thread-18629] [transport.py] [_log()] kex follows: False
2026-04-15T12:07:59.038 [DEBUG] [Thread-18629] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:07:59.038 [DEBUG] [Thread-18629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:07:59.038 [DEBUG] [Thread-18629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:07:59.038 [DEBUG] [Thread-18629] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:07:59.038 [DEBUG] [Thread-18629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:07:59.038 [DEBUG] [Thread-18629] [transport.py] [_log()] Compression: none
2026-04-15T12:07:59.038 [DEBUG] [Thread-18629] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:07:59.053 [DEBUG] [Thread-18629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:07:59.054 [DEBUG] [Thread-18629] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:07:59.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:07:59.054 [DEBUG] [Thread-18629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:07:59.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:07:59.055 [DEBUG] [Thread-18629] [transport.py] [_log()] userauth is OK
2026-04-15T12:07:59.055 [DEBUG] [Thread-18629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:07:59.056 [DEBUG] [Thread-18629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:07:59.056 [DEBUG] [Thread-18629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:07:59.056 [DEBUG] [Thread-18629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:07:59.080 [INFO] [Thread-18629] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:07:59.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:07:59.701 [DEBUG] [Thread-18629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:07:59.701 [DEBUG] [Thread-18629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:07:59.702 [DEBUG] [Thread-18629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:07:59.742 [DEBUG] [Thread-18629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:07:59.742 [DEBUG] [Thread-18629] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:07:59.745 [DEBUG] [Thread-18629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:07:59.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:07:59.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:07:59.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:07:59.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:07:59.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:07:59.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:07:59.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:07:59.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:07:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:07:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.422014 -999.00  +12.00  13.36     77   +8.10 1 3 1 1 1   888    0 4.56 27.44 ----- 18.4 13.4 300.2 20.0 18.2 -7.0 17.3 -6.1 16.8 -7.1 17.8 -8.3
2026-04-15T12:07:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:07:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:07:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.422014
2026-04-15T12:07:59.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:07:59.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:07:59.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:07:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:07:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:07:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:07:30', tmtdew=5.29483, humidity=70.3465, cloud=0.0, wind=9.03492, temperature=12.2499, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:07:42.010', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:07:59.764 [DEBUG] [Thread-18629] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:08:00.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:08:00.023 [DEBUG] [Thread-18632] [transport.py] [_log()] starting thread (client mode): 0xf13cbf70
2026-04-15T12:08:00.023 [DEBUG] [Thread-18632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:08:00.037 [DEBUG] [Thread-18632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:08:00.037 [INFO] [Thread-18632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:08:00.045 [DEBUG] [Thread-18632] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:08:00.045 [DEBUG] [Thread-18632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:08:00.045 [DEBUG] [Thread-18632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:08:00.045 [DEBUG] [Thread-18632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:08:00.045 [DEBUG] [Thread-18632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:08:00.045 [DEBUG] [Thread-18632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:08:00.045 [DEBUG] [Thread-18632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:08:00.045 [DEBUG] [Thread-18632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:08:00.045 [DEBUG] [Thread-18632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:08:00.045 [DEBUG] [Thread-18632] [transport.py] [_log()] client lang: <none>
2026-04-15T12:08:00.046 [DEBUG] [Thread-18632] [transport.py] [_log()] server lang: <none>
2026-04-15T12:08:00.046 [DEBUG] [Thread-18632] [transport.py] [_log()] kex follows: False
2026-04-15T12:08:00.046 [DEBUG] [Thread-18632] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:08:00.046 [DEBUG] [Thread-18632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:08:00.046 [DEBUG] [Thread-18632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:08:00.046 [DEBUG] [Thread-18632] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:08:00.046 [DEBUG] [Thread-18632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:08:00.046 [DEBUG] [Thread-18632] [transport.py] [_log()] Compression: none
2026-04-15T12:08:00.046 [DEBUG] [Thread-18632] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:08:00.102 [DEBUG] [Thread-18632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:08:00.102 [DEBUG] [Thread-18632] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:08:00.103 [DEBUG] [Thread-18632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:08:00.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:08:00.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:08:00.158 [DEBUG] [Thread-18632] [transport.py] [_log()] userauth is OK
2026-04-15T12:08:00.159 [DEBUG] [Thread-18632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:08:00.159 [DEBUG] [Thread-18632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:08:00.159 [DEBUG] [Thread-18632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:08:00.159 [DEBUG] [Thread-18632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:08:00.184 [INFO] [Thread-18632] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:08:00.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:08:00.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:08:00.995 [DEBUG] [Thread-18632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:08:00.995 [DEBUG] [Thread-18632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:08:01.043 [DEBUG] [Thread-18632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:08:01.043 [DEBUG] [Thread-18632] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:08:01.052 [DEBUG] [Thread-18632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:08:01.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:08:01.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')
2026-04-15T12:08:01.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') -> 00000000
2026-04-15T12:08:01.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:08:01.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:08:01.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:08:01.087 [DEBUG] [Thread-18632] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:08:04.907 [DEBUG] [Thread-18634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:08:13.517 [DEBUG] [Thread-18635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:08:19.950 [DEBUG] [Thread-18636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:08:31.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:08:31.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:08:31.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:08:32.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 8, 5), 5.23071, 70.6778, 0.0, 13.7801, 12.3657, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:08:32.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:08:05
2026-04-15T12:08:32.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:08:33.251 [DEBUG] [Thread-18637] [transport.py] [_log()] starting thread (client mode): 0xf13fdea0
2026-04-15T12:08:33.251 [DEBUG] [Thread-18637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:08:33.273 [DEBUG] [Thread-18637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:08:33.273 [INFO] [Thread-18637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:08:33.274 [DEBUG] [Thread-18637] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:08:33.274 [DEBUG] [Thread-18637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:08:33.274 [DEBUG] [Thread-18637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:08:33.274 [DEBUG] [Thread-18637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:08:33.275 [DEBUG] [Thread-18637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:08:33.275 [DEBUG] [Thread-18637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:08:33.275 [DEBUG] [Thread-18637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:08:33.275 [DEBUG] [Thread-18637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:08:33.275 [DEBUG] [Thread-18637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:08:33.275 [DEBUG] [Thread-18637] [transport.py] [_log()] client lang: <none>
2026-04-15T12:08:33.275 [DEBUG] [Thread-18637] [transport.py] [_log()] server lang: <none>
2026-04-15T12:08:33.275 [DEBUG] [Thread-18637] [transport.py] [_log()] kex follows: False
2026-04-15T12:08:33.275 [DEBUG] [Thread-18637] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:08:33.275 [DEBUG] [Thread-18637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:08:33.275 [DEBUG] [Thread-18637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:08:33.276 [DEBUG] [Thread-18637] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:08:33.276 [DEBUG] [Thread-18637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:08:33.276 [DEBUG] [Thread-18637] [transport.py] [_log()] Compression: none
2026-04-15T12:08:33.276 [DEBUG] [Thread-18637] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:08:33.288 [DEBUG] [Thread-18637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:08:33.288 [DEBUG] [Thread-18637] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:08:33.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:08:33.289 [DEBUG] [Thread-18637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:08:33.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:08:33.290 [DEBUG] [Thread-18637] [transport.py] [_log()] userauth is OK
2026-04-15T12:08:33.290 [DEBUG] [Thread-18637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:08:33.290 [DEBUG] [Thread-18637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:08:33.290 [DEBUG] [Thread-18637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:08:33.290 [DEBUG] [Thread-18637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:08:33.314 [INFO] [Thread-18637] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:08:33.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:08:33.937 [DEBUG] [Thread-18637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:08:33.937 [DEBUG] [Thread-18637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:08:33.938 [DEBUG] [Thread-18637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:08:33.978 [DEBUG] [Thread-18637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:08:33.978 [DEBUG] [Thread-18637] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:08:33.981 [DEBUG] [Thread-18637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:08:33.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:08:33.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:08:33.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:08:33.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:08:33.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:08:34.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:08:34.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:08:34.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:08:34.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:08:34.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.422361 -999.00  +12.40  20.03     77   +8.70 1 3 1 1 1   888    0 4.57 26.53 ----- 22.5 20.0 318.4 21.0 18.7 -7.8 17.7 -6.5 17.1 -7.1 18.2 -10.4
2026-04-15T12:08:34.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:08:34.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:08:34.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.422361
2026-04-15T12:08:34.002 [DEBUG] [Thread-18637] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:08:34.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:08:34.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:08:34.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:08:34.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:08:34.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:08:34.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:08:05', tmtdew=5.23071, humidity=70.6778, cloud=0.0, wind=13.7801, temperature=12.3657, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:08:11.990', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:08:34.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:08:34.247 [DEBUG] [Thread-18640] [transport.py] [_log()] starting thread (client mode): 0xf13ede70
2026-04-15T12:08:34.247 [DEBUG] [Thread-18640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:08:34.265 [DEBUG] [Thread-18640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:08:34.265 [INFO] [Thread-18640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:08:34.272 [DEBUG] [Thread-18640] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] client lang: <none>
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] server lang: <none>
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] kex follows: False
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:08:34.273 [DEBUG] [Thread-18640] [transport.py] [_log()] Compression: none
2026-04-15T12:08:34.274 [DEBUG] [Thread-18640] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:08:34.330 [DEBUG] [Thread-18640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:08:34.331 [DEBUG] [Thread-18640] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:08:34.331 [DEBUG] [Thread-18640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:08:34.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:08:34.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:08:34.388 [DEBUG] [Thread-18640] [transport.py] [_log()] userauth is OK
2026-04-15T12:08:34.388 [DEBUG] [Thread-18640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:08:34.388 [DEBUG] [Thread-18640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:08:34.388 [DEBUG] [Thread-18640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:08:34.388 [DEBUG] [Thread-18640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:08:34.405 [INFO] [Thread-18640] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:08:34.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:08:34.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:08:34.984 [DEBUG] [Thread-18642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:08:35.235 [DEBUG] [Thread-18640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:08:35.235 [DEBUG] [Thread-18640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:08:35.284 [DEBUG] [Thread-18640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:08:35.284 [DEBUG] [Thread-18640] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:08:35.293 [DEBUG] [Thread-18640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:08:35.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:08:35.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')
2026-04-15T12:08:35.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
2026-04-15T12:08:35.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:08:35.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:08:35.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:08:35.328 [DEBUG] [Thread-18640] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:08:43.632 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:08:43.633 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:08:50.028 [DEBUG] [Thread-18643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:09:05.060 [DEBUG] [Thread-18644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:09:05.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:09:05.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:09:05.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
2026-04-15T12:09:06.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 8, 41), 5.9244, 67.3103, 0.0, 19.7604, 13.464, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:09:06.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:08:41
2026-04-15T12:09:07.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:09:07.603 [DEBUG] [Thread-18645] [transport.py] [_log()] starting thread (client mode): 0xee9edb70
2026-04-15T12:09:07.603 [DEBUG] [Thread-18645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:09:07.621 [DEBUG] [Thread-18645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:09:07.621 [INFO] [Thread-18645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:09:07.624 [DEBUG] [Thread-18645] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:09:07.624 [DEBUG] [Thread-18645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:09:07.625 [DEBUG] [Thread-18645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:09:07.625 [DEBUG] [Thread-18645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:09:07.625 [DEBUG] [Thread-18645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:09:07.625 [DEBUG] [Thread-18645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:09:07.625 [DEBUG] [Thread-18645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:09:07.625 [DEBUG] [Thread-18645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:09:07.625 [DEBUG] [Thread-18645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:09:07.625 [DEBUG] [Thread-18645] [transport.py] [_log()] client lang: <none>
2026-04-15T12:09:07.625 [DEBUG] [Thread-18645] [transport.py] [_log()] server lang: <none>
2026-04-15T12:09:07.625 [DEBUG] [Thread-18645] [transport.py] [_log()] kex follows: False
2026-04-15T12:09:07.625 [DEBUG] [Thread-18645] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:09:07.625 [DEBUG] [Thread-18645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:09:07.626 [DEBUG] [Thread-18645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:09:07.626 [DEBUG] [Thread-18645] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:09:07.626 [DEBUG] [Thread-18645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:09:07.626 [DEBUG] [Thread-18645] [transport.py] [_log()] Compression: none
2026-04-15T12:09:07.626 [DEBUG] [Thread-18645] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:09:07.644 [DEBUG] [Thread-18645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:09:07.644 [DEBUG] [Thread-18645] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:09:07.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:09:07.645 [DEBUG] [Thread-18645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:09:07.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:09:07.646 [DEBUG] [Thread-18645] [transport.py] [_log()] userauth is OK
2026-04-15T12:09:07.646 [DEBUG] [Thread-18645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:09:07.646 [DEBUG] [Thread-18645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:09:07.646 [DEBUG] [Thread-18645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:09:07.646 [DEBUG] [Thread-18645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:09:07.660 [INFO] [Thread-18645] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:09:07.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:09:08.283 [DEBUG] [Thread-18645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:09:08.283 [DEBUG] [Thread-18645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:09:08.284 [DEBUG] [Thread-18645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:09:08.324 [DEBUG] [Thread-18645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:09:08.324 [DEBUG] [Thread-18645] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:09:08.327 [DEBUG] [Thread-18645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:09:08.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:09:08.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:09:08.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:09:08.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:09:08.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:09:08.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:09:08.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:09:08.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:09:08.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:09:08.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.422708 -999.00  +12.30  16.46     74   +7.90 1 3 1 1 1   888    0 4.62 26.02 ----- 12.5 16.5 301.2 28.3 18.9 -13.5 18.0 -9.1 17.6 -8.1 18.1 -15.0
2026-04-15T12:09:08.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:09:08.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:09:08.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.422708
2026-04-15T12:09:08.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:09:08.354 [DEBUG] [Thread-18645] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:09:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:09:08.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:09:08.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:09:08.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:09:08.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:08:41', tmtdew=5.9244, humidity=67.3103, cloud=0.0, wind=19.7604, temperature=13.464, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:08:41.971', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:09:08.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:09:08.611 [DEBUG] [Thread-18648] [transport.py] [_log()] starting thread (client mode): 0xee9ed600
2026-04-15T12:09:08.611 [DEBUG] [Thread-18648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:09:08.625 [DEBUG] [Thread-18648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:09:08.625 [INFO] [Thread-18648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:09:08.633 [DEBUG] [Thread-18648] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:09:08.633 [DEBUG] [Thread-18648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:09:08.633 [DEBUG] [Thread-18648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:09:08.633 [DEBUG] [Thread-18648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:09:08.633 [DEBUG] [Thread-18648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:09:08.633 [DEBUG] [Thread-18648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:09:08.633 [DEBUG] [Thread-18648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:09:08.633 [DEBUG] [Thread-18648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:09:08.634 [DEBUG] [Thread-18648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:09:08.634 [DEBUG] [Thread-18648] [transport.py] [_log()] client lang: <none>
2026-04-15T12:09:08.634 [DEBUG] [Thread-18648] [transport.py] [_log()] server lang: <none>
2026-04-15T12:09:08.634 [DEBUG] [Thread-18648] [transport.py] [_log()] kex follows: False
2026-04-15T12:09:08.634 [DEBUG] [Thread-18648] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:09:08.634 [DEBUG] [Thread-18648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:09:08.634 [DEBUG] [Thread-18648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:09:08.634 [DEBUG] [Thread-18648] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:09:08.634 [DEBUG] [Thread-18648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:09:08.634 [DEBUG] [Thread-18648] [transport.py] [_log()] Compression: none
2026-04-15T12:09:08.634 [DEBUG] [Thread-18648] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:09:08.690 [DEBUG] [Thread-18648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:09:08.691 [DEBUG] [Thread-18648] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:09:08.691 [DEBUG] [Thread-18648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:09:08.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:09:08.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:09:08.747 [DEBUG] [Thread-18648] [transport.py] [_log()] userauth is OK
2026-04-15T12:09:08.747 [DEBUG] [Thread-18648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:09:08.747 [DEBUG] [Thread-18648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:09:08.747 [DEBUG] [Thread-18648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:09:08.748 [DEBUG] [Thread-18648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:09:08.773 [INFO] [Thread-18648] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:09:08.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:09:08.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:09:09.592 [DEBUG] [Thread-18648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:09:09.592 [DEBUG] [Thread-18648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:09:09.643 [DEBUG] [Thread-18648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:09:09.643 [DEBUG] [Thread-18648] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:09:09.654 [DEBUG] [Thread-18648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:09:09.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:09: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')
2026-04-15T12:09: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
2026-04-15T12:09:09.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:09:09.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:09:09.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:09:09.688 [DEBUG] [Thread-18648] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:09:13.629 [DEBUG] [Thread-18650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:09:20.091 [DEBUG] [Thread-18651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:09:35.134 [DEBUG] [Thread-18652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:09:39.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:09:39.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:09:39.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
2026-04-15T12:09:41.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 9, 16), 5.67974, 68.3565, 0.0, 17.9276, 12.7815, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:09:41.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:09:16
2026-04-15T12:09:41.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:09:41.810 [DEBUG] [Thread-18653] [transport.py] [_log()] starting thread (client mode): 0xee98a2c0
2026-04-15T12:09:41.811 [DEBUG] [Thread-18653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:09:41.824 [DEBUG] [Thread-18653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:09:41.824 [INFO] [Thread-18653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:09:41.827 [DEBUG] [Thread-18653] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:09:41.827 [DEBUG] [Thread-18653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:09:41.827 [DEBUG] [Thread-18653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:09:41.827 [DEBUG] [Thread-18653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:09:41.827 [DEBUG] [Thread-18653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:09:41.827 [DEBUG] [Thread-18653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:09:41.827 [DEBUG] [Thread-18653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:09:41.827 [DEBUG] [Thread-18653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:09:41.827 [DEBUG] [Thread-18653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:09:41.827 [DEBUG] [Thread-18653] [transport.py] [_log()] client lang: <none>
2026-04-15T12:09:41.827 [DEBUG] [Thread-18653] [transport.py] [_log()] server lang: <none>
2026-04-15T12:09:41.828 [DEBUG] [Thread-18653] [transport.py] [_log()] kex follows: False
2026-04-15T12:09:41.828 [DEBUG] [Thread-18653] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:09:41.828 [DEBUG] [Thread-18653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:09:41.828 [DEBUG] [Thread-18653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:09:41.828 [DEBUG] [Thread-18653] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:09:41.828 [DEBUG] [Thread-18653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:09:41.828 [DEBUG] [Thread-18653] [transport.py] [_log()] Compression: none
2026-04-15T12:09:41.828 [DEBUG] [Thread-18653] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:09:41.836 [DEBUG] [Thread-18653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:09:41.836 [DEBUG] [Thread-18653] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:09:41.837 [DEBUG] [Thread-18653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:09:41.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:09:41.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:09:41.838 [DEBUG] [Thread-18653] [transport.py] [_log()] userauth is OK
2026-04-15T12:09:41.838 [DEBUG] [Thread-18653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:09:41.838 [DEBUG] [Thread-18653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:09:41.838 [DEBUG] [Thread-18653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:09:41.838 [DEBUG] [Thread-18653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:09:41.853 [INFO] [Thread-18653] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:09:41.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:09:42.503 [DEBUG] [Thread-18653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:09:42.503 [DEBUG] [Thread-18653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:09:42.504 [DEBUG] [Thread-18653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:09:42.544 [DEBUG] [Thread-18653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:09:42.544 [DEBUG] [Thread-18653] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:09:42.547 [DEBUG] [Thread-18653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:09:42.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:09:42.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:09:42.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:09:42.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:09:42.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:09:42.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:09:42.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:09:42.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:09:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:09:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.423055 -999.00  +12.60  24.10     75   +8.40 1 3 1 1 1   888    0 4.57 24.55 ----- 22.3 24.1 316.4 26.8 19.2 -12.4 18.0 -9.5 17.3 -9.9 18.6 -13.2
2026-04-15T12:09:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:09:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:09:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.423055
2026-04-15T12:09:42.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:09:42.574 [DEBUG] [Thread-18653] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:09:42.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:09:42.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:09:42.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:09:42.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:09:42.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:09:16', tmtdew=5.67974, humidity=68.3565, cloud=0.0, wind=17.9276, temperature=12.7815, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:09:11.952', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:09:42.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:09:42.835 [DEBUG] [Thread-18656] [transport.py] [_log()] starting thread (client mode): 0xee9881f0
2026-04-15T12:09:42.836 [DEBUG] [Thread-18656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:09:42.855 [DEBUG] [Thread-18656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:09:42.855 [INFO] [Thread-18656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:09:42.862 [DEBUG] [Thread-18656] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:09:42.862 [DEBUG] [Thread-18656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:09:42.862 [DEBUG] [Thread-18656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:09:42.863 [DEBUG] [Thread-18656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:09:42.863 [DEBUG] [Thread-18656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:09:42.863 [DEBUG] [Thread-18656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:09:42.863 [DEBUG] [Thread-18656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:09:42.863 [DEBUG] [Thread-18656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:09:42.863 [DEBUG] [Thread-18656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:09:42.863 [DEBUG] [Thread-18656] [transport.py] [_log()] client lang: <none>
2026-04-15T12:09:42.863 [DEBUG] [Thread-18656] [transport.py] [_log()] server lang: <none>
2026-04-15T12:09:42.863 [DEBUG] [Thread-18656] [transport.py] [_log()] kex follows: False
2026-04-15T12:09:42.863 [DEBUG] [Thread-18656] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:09:42.863 [DEBUG] [Thread-18656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:09:42.864 [DEBUG] [Thread-18656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:09:42.864 [DEBUG] [Thread-18656] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:09:42.864 [DEBUG] [Thread-18656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:09:42.864 [DEBUG] [Thread-18656] [transport.py] [_log()] Compression: none
2026-04-15T12:09:42.864 [DEBUG] [Thread-18656] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:09:42.919 [DEBUG] [Thread-18656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:09:42.919 [DEBUG] [Thread-18656] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:09:42.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:09:42.920 [DEBUG] [Thread-18656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:09:42.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:09:42.979 [DEBUG] [Thread-18656] [transport.py] [_log()] userauth is OK
2026-04-15T12:09:42.980 [DEBUG] [Thread-18656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:09:42.980 [DEBUG] [Thread-18656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:09:42.980 [DEBUG] [Thread-18656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:09:42.980 [DEBUG] [Thread-18656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:09:43.004 [INFO] [Thread-18656] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:09:43.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:09:43.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:09:43.774 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:09:43.776 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:09:43.952 [DEBUG] [Thread-18656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:09:43.952 [DEBUG] [Thread-18656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:09:44.000 [DEBUG] [Thread-18656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:09:44.000 [DEBUG] [Thread-18656] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:09:44.009 [DEBUG] [Thread-18656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:09:44.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:09:44.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')
2026-04-15T12:09:44.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
2026-04-15T12:09:44.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:09:44.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:09:44.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:09:44.043 [DEBUG] [Thread-18656] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:09:50.164 [DEBUG] [Thread-18658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:10:05.204 [DEBUG] [Thread-18659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:10:13.736 [DEBUG] [Thread-18660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:10:14.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:10:14.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:10:14.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
2026-04-15T12:10:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 9, 52), 6.30925, 65.5193, 0.0, 18.0317, 13.2646, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:10:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:09:52
2026-04-15T12:10:15.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:10:16.095 [DEBUG] [Thread-18661] [transport.py] [_log()] starting thread (client mode): 0xee904d00
2026-04-15T12:10:16.095 [DEBUG] [Thread-18661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:10:16.115 [DEBUG] [Thread-18661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:10:16.116 [INFO] [Thread-18661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:10:16.119 [DEBUG] [Thread-18661] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:10:16.119 [DEBUG] [Thread-18661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:10:16.119 [DEBUG] [Thread-18661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:10:16.119 [DEBUG] [Thread-18661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:10:16.119 [DEBUG] [Thread-18661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:10:16.119 [DEBUG] [Thread-18661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:10:16.119 [DEBUG] [Thread-18661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:10:16.119 [DEBUG] [Thread-18661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:10:16.120 [DEBUG] [Thread-18661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:10:16.120 [DEBUG] [Thread-18661] [transport.py] [_log()] client lang: <none>
2026-04-15T12:10:16.120 [DEBUG] [Thread-18661] [transport.py] [_log()] server lang: <none>
2026-04-15T12:10:16.120 [DEBUG] [Thread-18661] [transport.py] [_log()] kex follows: False
2026-04-15T12:10:16.120 [DEBUG] [Thread-18661] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:10:16.120 [DEBUG] [Thread-18661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:10:16.120 [DEBUG] [Thread-18661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:10:16.120 [DEBUG] [Thread-18661] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:10:16.120 [DEBUG] [Thread-18661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:10:16.120 [DEBUG] [Thread-18661] [transport.py] [_log()] Compression: none
2026-04-15T12:10:16.120 [DEBUG] [Thread-18661] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:10:16.137 [DEBUG] [Thread-18661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:10:16.138 [DEBUG] [Thread-18661] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:10:16.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:10:16.138 [DEBUG] [Thread-18661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:10:16.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:10:16.181 [DEBUG] [Thread-18661] [transport.py] [_log()] userauth is OK
2026-04-15T12:10:16.181 [DEBUG] [Thread-18661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:10:16.181 [DEBUG] [Thread-18661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:10:16.181 [DEBUG] [Thread-18661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:10:16.181 [DEBUG] [Thread-18661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:10:16.218 [INFO] [Thread-18661] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:10:16.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:10:20.236 [DEBUG] [Thread-18663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:10:21.963 [DEBUG] [Thread-18661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:10:21.963 [DEBUG] [Thread-18661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:10:21.964 [DEBUG] [Thread-18661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:10:22.004 [DEBUG] [Thread-18661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:10:22.004 [DEBUG] [Thread-18661] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:10:22.007 [DEBUG] [Thread-18661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:10:22.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:10:22.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:10:22.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:10:22.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:10:22.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:10:22.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:10:22.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:10:22.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:10:22.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:10:22.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.423055 -999.00  +12.60  24.10     75   +8.40 1 3 1 1 1   888    0 4.57 24.55 ----- 22.3 24.1 316.4 26.8 19.2 -12.4 18.0 -9.5 17.3 -9.9 18.6 -13.2
2026-04-15T12:10:22.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:10:22.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:10:22.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.423055
2026-04-15T12:10:22.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:10:22.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:10:22.220 [DEBUG] [Thread-18661] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:10:22.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:10:22.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:10:22.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:10:22.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:09:52', tmtdew=6.30925, humidity=65.5193, cloud=0.0, wind=18.0317, temperature=13.2646, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:09:11.952', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:10:22.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:10:22.478 [DEBUG] [Thread-18665] [transport.py] [_log()] starting thread (client mode): 0xf13e2440
2026-04-15T12:10:22.478 [DEBUG] [Thread-18665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:10:22.492 [DEBUG] [Thread-18665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:10:22.493 [INFO] [Thread-18665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:10:22.500 [DEBUG] [Thread-18665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:10:22.500 [DEBUG] [Thread-18665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:10:22.500 [DEBUG] [Thread-18665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:10:22.500 [DEBUG] [Thread-18665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:10:22.500 [DEBUG] [Thread-18665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:10:22.500 [DEBUG] [Thread-18665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:10:22.500 [DEBUG] [Thread-18665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:10:22.500 [DEBUG] [Thread-18665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:10:22.501 [DEBUG] [Thread-18665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:10:22.501 [DEBUG] [Thread-18665] [transport.py] [_log()] client lang: <none>
2026-04-15T12:10:22.501 [DEBUG] [Thread-18665] [transport.py] [_log()] server lang: <none>
2026-04-15T12:10:22.501 [DEBUG] [Thread-18665] [transport.py] [_log()] kex follows: False
2026-04-15T12:10:22.501 [DEBUG] [Thread-18665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:10:22.501 [DEBUG] [Thread-18665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:10:22.501 [DEBUG] [Thread-18665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:10:22.501 [DEBUG] [Thread-18665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:10:22.501 [DEBUG] [Thread-18665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:10:22.501 [DEBUG] [Thread-18665] [transport.py] [_log()] Compression: none
2026-04-15T12:10:22.502 [DEBUG] [Thread-18665] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:10:22.558 [DEBUG] [Thread-18665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:10:22.559 [DEBUG] [Thread-18665] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:10:22.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:10:22.560 [DEBUG] [Thread-18665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:10:22.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:10:22.616 [DEBUG] [Thread-18665] [transport.py] [_log()] userauth is OK
2026-04-15T12:10:22.616 [DEBUG] [Thread-18665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:10:22.616 [DEBUG] [Thread-18665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:10:22.616 [DEBUG] [Thread-18665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:10:22.617 [DEBUG] [Thread-18665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:10:22.642 [INFO] [Thread-18665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:10:22.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:10:22.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:10:23.457 [DEBUG] [Thread-18665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:10:23.457 [DEBUG] [Thread-18665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:10:23.505 [DEBUG] [Thread-18665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:10:23.505 [DEBUG] [Thread-18665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:10:23.514 [DEBUG] [Thread-18665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:10:23.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:10:23.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')
2026-04-15T12:10:23.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
2026-04-15T12:10:23.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:10:23.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:10:23.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:10:23.548 [DEBUG] [Thread-18665] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:10:35.269 [DEBUG] [Thread-18667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:10:43.918 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:10:43.919 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:10:50.317 [DEBUG] [Thread-18668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:10:53.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:10:53.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:10:53.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
2026-04-15T12:10:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 10, 28), 6.0257, 66.6434, 0.0, 19.5865, 12.5826, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:10:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:10:28
2026-04-15T12:10:55.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:10:55.663 [DEBUG] [Thread-18669] [transport.py] [_log()] starting thread (client mode): 0xf13e36d0
2026-04-15T12:10:55.663 [DEBUG] [Thread-18669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:10:55.683 [DEBUG] [Thread-18669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:10:55.683 [INFO] [Thread-18669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:10:55.686 [DEBUG] [Thread-18669] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:10:55.686 [DEBUG] [Thread-18669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:10:55.686 [DEBUG] [Thread-18669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:10:55.686 [DEBUG] [Thread-18669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:10:55.686 [DEBUG] [Thread-18669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:10:55.686 [DEBUG] [Thread-18669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:10:55.687 [DEBUG] [Thread-18669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:10:55.687 [DEBUG] [Thread-18669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:10:55.687 [DEBUG] [Thread-18669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:10:55.687 [DEBUG] [Thread-18669] [transport.py] [_log()] client lang: <none>
2026-04-15T12:10:55.687 [DEBUG] [Thread-18669] [transport.py] [_log()] server lang: <none>
2026-04-15T12:10:55.687 [DEBUG] [Thread-18669] [transport.py] [_log()] kex follows: False
2026-04-15T12:10:55.687 [DEBUG] [Thread-18669] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:10:55.687 [DEBUG] [Thread-18669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:10:55.687 [DEBUG] [Thread-18669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:10:55.687 [DEBUG] [Thread-18669] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:10:55.687 [DEBUG] [Thread-18669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:10:55.688 [DEBUG] [Thread-18669] [transport.py] [_log()] Compression: none
2026-04-15T12:10:55.688 [DEBUG] [Thread-18669] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:10:55.705 [DEBUG] [Thread-18669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:10:55.706 [DEBUG] [Thread-18669] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:10:55.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:10:55.707 [DEBUG] [Thread-18669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:10:55.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:10:55.748 [DEBUG] [Thread-18669] [transport.py] [_log()] userauth is OK
2026-04-15T12:10:55.748 [DEBUG] [Thread-18669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:10:55.748 [DEBUG] [Thread-18669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:10:55.749 [DEBUG] [Thread-18669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:10:55.749 [DEBUG] [Thread-18669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:10:55.784 [INFO] [Thread-18669] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:10:55.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:10:56.557 [DEBUG] [Thread-18669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:10:56.557 [DEBUG] [Thread-18669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:10:56.558 [DEBUG] [Thread-18669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:10:56.598 [DEBUG] [Thread-18669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:10:56.598 [DEBUG] [Thread-18669] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:10:56.601 [DEBUG] [Thread-18669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:10:56.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:10:56.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:10:56.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:10:56.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:10:56.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:10:56.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:10:56.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:10:56.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:10:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:10:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.423403 -999.00  +12.70  23.87     73   +8.00 1 2 1 1 1   888    0 4.68 26.66 ----- 22.1 23.9 310.9 25.1 19.3 -17.6 18.1 -13.5 17.5 -14.2 18.6 -15.5
2026-04-15T12:10:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:10:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:10:56.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.423403
2026-04-15T12:10:56.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:10:56.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:10:56.627 [DEBUG] [Thread-18669] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:10:56.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:10:56.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:10:56.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:10:56.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:10:28', tmtdew=6.0257, humidity=66.6434, cloud=0.0, wind=19.5865, temperature=12.5826, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:09:42.019', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:10:56.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:10:56.884 [DEBUG] [Thread-18672] [transport.py] [_log()] starting thread (client mode): 0xf13e1840
2026-04-15T12:10:56.884 [DEBUG] [Thread-18672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:10:56.898 [DEBUG] [Thread-18672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:10:56.898 [INFO] [Thread-18672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:10:56.905 [DEBUG] [Thread-18672] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:10:56.905 [DEBUG] [Thread-18672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:10:56.906 [DEBUG] [Thread-18672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:10:56.906 [DEBUG] [Thread-18672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:10:56.906 [DEBUG] [Thread-18672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:10:56.906 [DEBUG] [Thread-18672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:10:56.906 [DEBUG] [Thread-18672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:10:56.906 [DEBUG] [Thread-18672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:10:56.906 [DEBUG] [Thread-18672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:10:56.906 [DEBUG] [Thread-18672] [transport.py] [_log()] client lang: <none>
2026-04-15T12:10:56.906 [DEBUG] [Thread-18672] [transport.py] [_log()] server lang: <none>
2026-04-15T12:10:56.906 [DEBUG] [Thread-18672] [transport.py] [_log()] kex follows: False
2026-04-15T12:10:56.906 [DEBUG] [Thread-18672] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:10:56.906 [DEBUG] [Thread-18672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:10:56.907 [DEBUG] [Thread-18672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:10:56.907 [DEBUG] [Thread-18672] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:10:56.907 [DEBUG] [Thread-18672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:10:56.907 [DEBUG] [Thread-18672] [transport.py] [_log()] Compression: none
2026-04-15T12:10:56.907 [DEBUG] [Thread-18672] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:10:56.967 [DEBUG] [Thread-18672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:10:56.967 [DEBUG] [Thread-18672] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:10:56.968 [DEBUG] [Thread-18672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:10:56.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:10:56.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:10:57.024 [DEBUG] [Thread-18672] [transport.py] [_log()] userauth is OK
2026-04-15T12:10:57.024 [DEBUG] [Thread-18672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:10:57.024 [DEBUG] [Thread-18672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:10:57.024 [DEBUG] [Thread-18672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:10:57.025 [DEBUG] [Thread-18672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:10:57.050 [INFO] [Thread-18672] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:10:57.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:10:57.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:10:57.855 [DEBUG] [Thread-18672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:10:57.856 [DEBUG] [Thread-18672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:10:57.903 [DEBUG] [Thread-18672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:10:57.903 [DEBUG] [Thread-18672] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:10:57.912 [DEBUG] [Thread-18672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:10:57.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:10:57.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')
2026-04-15T12:10:57.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
2026-04-15T12:10:57.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:10:57.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:10:57.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:10:57.946 [DEBUG] [Thread-18672] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:11:05.348 [DEBUG] [Thread-18674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:11:13.850 [DEBUG] [Thread-18675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:11:20.392 [DEBUG] [Thread-18676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:11:27.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:11:27.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:11:27.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:11:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 11, 4), 5.93749, 67.0413, 0.0, 20.9624, 12.5826, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:11:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:11:04
2026-04-15T12:11:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:11:30.035 [DEBUG] [Thread-18677] [transport.py] [_log()] starting thread (client mode): 0xf13fd630
2026-04-15T12:11:30.035 [DEBUG] [Thread-18677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:11:30.055 [DEBUG] [Thread-18677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:11:30.055 [INFO] [Thread-18677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:11:30.058 [DEBUG] [Thread-18677] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:11:30.058 [DEBUG] [Thread-18677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:11:30.058 [DEBUG] [Thread-18677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:11:30.058 [DEBUG] [Thread-18677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:11:30.058 [DEBUG] [Thread-18677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:11:30.058 [DEBUG] [Thread-18677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:11:30.058 [DEBUG] [Thread-18677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:11:30.059 [DEBUG] [Thread-18677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:11:30.059 [DEBUG] [Thread-18677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:11:30.059 [DEBUG] [Thread-18677] [transport.py] [_log()] client lang: <none>
2026-04-15T12:11:30.059 [DEBUG] [Thread-18677] [transport.py] [_log()] server lang: <none>
2026-04-15T12:11:30.059 [DEBUG] [Thread-18677] [transport.py] [_log()] kex follows: False
2026-04-15T12:11:30.059 [DEBUG] [Thread-18677] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:11:30.059 [DEBUG] [Thread-18677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:11:30.059 [DEBUG] [Thread-18677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:11:30.059 [DEBUG] [Thread-18677] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:11:30.059 [DEBUG] [Thread-18677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:11:30.059 [DEBUG] [Thread-18677] [transport.py] [_log()] Compression: none
2026-04-15T12:11:30.060 [DEBUG] [Thread-18677] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:11:30.077 [DEBUG] [Thread-18677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:11:30.078 [DEBUG] [Thread-18677] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:11:30.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:11:30.078 [DEBUG] [Thread-18677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:11:30.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:11:30.120 [DEBUG] [Thread-18677] [transport.py] [_log()] userauth is OK
2026-04-15T12:11:30.120 [DEBUG] [Thread-18677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:11:30.120 [DEBUG] [Thread-18677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:11:30.121 [DEBUG] [Thread-18677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:11:30.121 [DEBUG] [Thread-18677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:11:30.156 [INFO] [Thread-18677] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:11:30.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:11:30.896 [DEBUG] [Thread-18677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:11:30.897 [DEBUG] [Thread-18677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:11:30.897 [DEBUG] [Thread-18677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:11:30.937 [DEBUG] [Thread-18677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:11:30.937 [DEBUG] [Thread-18677] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:11:30.940 [DEBUG] [Thread-18677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:11:30.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:11:30.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:11:30.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:11:30.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:11:30.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:11:30.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:11:30.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:11:30.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:11:30.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:11:30.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.424097 -999.00  +12.70  19.21     73   +8.10 1 2 1 1 1   888    0 4.73 28.27 ----- 20.5 19.2 313.8 22.3 19.4 -17.7 18.3 -14.8 17.6 -14.3 18.8 -18.4
2026-04-15T12:11:30.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:11:30.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:11:30.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.424097
2026-04-15T12:11:30.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:11:30.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:11:30.960 [DEBUG] [Thread-18677] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:11:30.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:11:30.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:11:30.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:11:30.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:11:04', tmtdew=5.93749, humidity=67.0413, cloud=0.0, wind=20.9624, temperature=12.5826, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:10:41.981', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:11:31.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:11:31.215 [DEBUG] [Thread-18680] [transport.py] [_log()] starting thread (client mode): 0xf13c98a0
2026-04-15T12:11:31.215 [DEBUG] [Thread-18680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:11:31.229 [DEBUG] [Thread-18680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:11:31.229 [INFO] [Thread-18680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:11:31.237 [DEBUG] [Thread-18680] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:11:31.237 [DEBUG] [Thread-18680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:11:31.237 [DEBUG] [Thread-18680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:11:31.237 [DEBUG] [Thread-18680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:11:31.237 [DEBUG] [Thread-18680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:11:31.237 [DEBUG] [Thread-18680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:11:31.237 [DEBUG] [Thread-18680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:11:31.237 [DEBUG] [Thread-18680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:11:31.237 [DEBUG] [Thread-18680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:11:31.238 [DEBUG] [Thread-18680] [transport.py] [_log()] client lang: <none>
2026-04-15T12:11:31.238 [DEBUG] [Thread-18680] [transport.py] [_log()] server lang: <none>
2026-04-15T12:11:31.238 [DEBUG] [Thread-18680] [transport.py] [_log()] kex follows: False
2026-04-15T12:11:31.238 [DEBUG] [Thread-18680] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:11:31.238 [DEBUG] [Thread-18680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:11:31.238 [DEBUG] [Thread-18680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:11:31.238 [DEBUG] [Thread-18680] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:11:31.238 [DEBUG] [Thread-18680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:11:31.238 [DEBUG] [Thread-18680] [transport.py] [_log()] Compression: none
2026-04-15T12:11:31.238 [DEBUG] [Thread-18680] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:11:31.295 [DEBUG] [Thread-18680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:11:31.296 [DEBUG] [Thread-18680] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:11:31.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:11:31.297 [DEBUG] [Thread-18680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:11:31.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:11:31.356 [DEBUG] [Thread-18680] [transport.py] [_log()] userauth is OK
2026-04-15T12:11:31.356 [DEBUG] [Thread-18680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:11:31.356 [DEBUG] [Thread-18680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:11:31.356 [DEBUG] [Thread-18680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:11:31.356 [DEBUG] [Thread-18680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:11:31.382 [INFO] [Thread-18680] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:11:31.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:11:31.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:11:32.236 [DEBUG] [Thread-18680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:11:32.236 [DEBUG] [Thread-18680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:11:32.284 [DEBUG] [Thread-18680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:11:32.284 [DEBUG] [Thread-18680] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:11:32.295 [DEBUG] [Thread-18680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:11:32.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:11:32.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')
2026-04-15T12:11:32.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T12:11:32.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:11:32.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:11:32.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:11:32.330 [DEBUG] [Thread-18680] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:11:35.424 [DEBUG] [Thread-18682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:11:44.062 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:11:44.063 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:11:50.468 [DEBUG] [Thread-18683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:12:02.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:12:02.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:12:02.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
2026-04-15T12:12:03.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 11, 39), 5.90871, 67.3753, 0.0, 14.0098, 13.4296, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:12:03.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:11:39
2026-04-15T12:12:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:12:04.436 [DEBUG] [Thread-18684] [transport.py] [_log()] starting thread (client mode): 0xee904880
2026-04-15T12:12:04.436 [DEBUG] [Thread-18684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:12:04.456 [DEBUG] [Thread-18684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:12:04.456 [INFO] [Thread-18684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:12:04.459 [DEBUG] [Thread-18684] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:12:04.459 [DEBUG] [Thread-18684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:12:04.459 [DEBUG] [Thread-18684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:12:04.459 [DEBUG] [Thread-18684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:12:04.460 [DEBUG] [Thread-18684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:12:04.460 [DEBUG] [Thread-18684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:12:04.460 [DEBUG] [Thread-18684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:12:04.460 [DEBUG] [Thread-18684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:12:04.460 [DEBUG] [Thread-18684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:12:04.460 [DEBUG] [Thread-18684] [transport.py] [_log()] client lang: <none>
2026-04-15T12:12:04.460 [DEBUG] [Thread-18684] [transport.py] [_log()] server lang: <none>
2026-04-15T12:12:04.460 [DEBUG] [Thread-18684] [transport.py] [_log()] kex follows: False
2026-04-15T12:12:04.460 [DEBUG] [Thread-18684] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:12:04.460 [DEBUG] [Thread-18684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:12:04.460 [DEBUG] [Thread-18684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:12:04.461 [DEBUG] [Thread-18684] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:12:04.461 [DEBUG] [Thread-18684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:12:04.461 [DEBUG] [Thread-18684] [transport.py] [_log()] Compression: none
2026-04-15T12:12:04.461 [DEBUG] [Thread-18684] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:12:04.483 [DEBUG] [Thread-18684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:12:04.484 [DEBUG] [Thread-18684] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:12:04.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:12:04.484 [DEBUG] [Thread-18684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:12:04.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:12:04.485 [DEBUG] [Thread-18684] [transport.py] [_log()] userauth is OK
2026-04-15T12:12:04.486 [DEBUG] [Thread-18684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:12:04.486 [DEBUG] [Thread-18684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:12:04.486 [DEBUG] [Thread-18684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:12:04.486 [DEBUG] [Thread-18684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:12:04.504 [INFO] [Thread-18684] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:12:04.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:12:05.253 [DEBUG] [Thread-18684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:12:05.253 [DEBUG] [Thread-18684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:12:05.253 [DEBUG] [Thread-18684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:12:05.294 [DEBUG] [Thread-18684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:12:05.294 [DEBUG] [Thread-18684] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:12:05.297 [DEBUG] [Thread-18684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:12:05.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:12:05.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:12:05.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:12:05.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:12:05.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:12:05.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:12:05.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:12:05.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:12:05.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:12:05.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.424791 -999.00  +12.70  21.15     73   +8.10 1 2 1 1 1   888    0 4.97 32.77 ----- 19.5 21.1 310.0 23.9 19.8 -16.3 18.4 -16.2 17.9 -13.6 19.0 -14.0
2026-04-15T12:12:05.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:12:05.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:12:05.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.424791
2026-04-15T12:12:05.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:12:05.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:12:05.322 [DEBUG] [Thread-18684] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:12:05.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:12:05.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:12:05.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:12:05.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:11:39', tmtdew=5.90871, humidity=67.3753, cloud=0.0, wind=14.0098, temperature=13.4296, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:11:41.942', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:12:05.498 [DEBUG] [Thread-18687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:12:05.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:12:05.575 [DEBUG] [Thread-18688] [transport.py] [_log()] starting thread (client mode): 0xee988cd0
2026-04-15T12:12:05.576 [DEBUG] [Thread-18688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:12:05.591 [DEBUG] [Thread-18688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:12:05.591 [INFO] [Thread-18688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:12:05.599 [DEBUG] [Thread-18688] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:12:05.599 [DEBUG] [Thread-18688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:12:05.599 [DEBUG] [Thread-18688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:12:05.599 [DEBUG] [Thread-18688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:12:05.599 [DEBUG] [Thread-18688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:12:05.599 [DEBUG] [Thread-18688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:12:05.599 [DEBUG] [Thread-18688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:12:05.599 [DEBUG] [Thread-18688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:12:05.599 [DEBUG] [Thread-18688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:12:05.599 [DEBUG] [Thread-18688] [transport.py] [_log()] client lang: <none>
2026-04-15T12:12:05.600 [DEBUG] [Thread-18688] [transport.py] [_log()] server lang: <none>
2026-04-15T12:12:05.600 [DEBUG] [Thread-18688] [transport.py] [_log()] kex follows: False
2026-04-15T12:12:05.600 [DEBUG] [Thread-18688] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:12:05.600 [DEBUG] [Thread-18688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:12:05.600 [DEBUG] [Thread-18688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:12:05.600 [DEBUG] [Thread-18688] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:12:05.600 [DEBUG] [Thread-18688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:12:05.600 [DEBUG] [Thread-18688] [transport.py] [_log()] Compression: none
2026-04-15T12:12:05.600 [DEBUG] [Thread-18688] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:12:05.655 [DEBUG] [Thread-18688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:12:05.656 [DEBUG] [Thread-18688] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:12:05.656 [DEBUG] [Thread-18688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:12:05.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:12:05.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:12:05.712 [DEBUG] [Thread-18688] [transport.py] [_log()] userauth is OK
2026-04-15T12:12:05.713 [DEBUG] [Thread-18688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:12:05.713 [DEBUG] [Thread-18688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:12:05.713 [DEBUG] [Thread-18688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:12:05.713 [DEBUG] [Thread-18688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:12:05.732 [INFO] [Thread-18688] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:12:05.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:12:05.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:12:06.554 [DEBUG] [Thread-18688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:12:06.555 [DEBUG] [Thread-18688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:12:06.602 [DEBUG] [Thread-18688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:12:06.603 [DEBUG] [Thread-18688] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:12:06.611 [DEBUG] [Thread-18688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:12:06.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:12:06.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')
2026-04-15T12:12:06.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
2026-04-15T12:12:06.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:12:06.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:12:06.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:12:06.646 [DEBUG] [Thread-18688] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:12:13.944 [DEBUG] [Thread-18690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:12:20.537 [DEBUG] [Thread-18691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:12:35.568 [DEBUG] [Thread-18692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:12:36.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:12:36.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:12:36.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
2026-04-15T12:12:37.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 12, 15), 6.3399, 65.411, 0.0, 14.9803, 12.931, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:12:37.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:12:15
2026-04-15T12:12:38.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:12:38.737 [DEBUG] [Thread-18693] [transport.py] [_log()] starting thread (client mode): 0xf13fee00
2026-04-15T12:12:38.738 [DEBUG] [Thread-18693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:12:38.758 [DEBUG] [Thread-18693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:12:38.758 [INFO] [Thread-18693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:12:38.761 [DEBUG] [Thread-18693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:12:38.761 [DEBUG] [Thread-18693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:12:38.761 [DEBUG] [Thread-18693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:12:38.761 [DEBUG] [Thread-18693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:12:38.761 [DEBUG] [Thread-18693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:12:38.761 [DEBUG] [Thread-18693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:12:38.761 [DEBUG] [Thread-18693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:12:38.761 [DEBUG] [Thread-18693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:12:38.762 [DEBUG] [Thread-18693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:12:38.762 [DEBUG] [Thread-18693] [transport.py] [_log()] client lang: <none>
2026-04-15T12:12:38.762 [DEBUG] [Thread-18693] [transport.py] [_log()] server lang: <none>
2026-04-15T12:12:38.762 [DEBUG] [Thread-18693] [transport.py] [_log()] kex follows: False
2026-04-15T12:12:38.762 [DEBUG] [Thread-18693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:12:38.762 [DEBUG] [Thread-18693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:12:38.762 [DEBUG] [Thread-18693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:12:38.762 [DEBUG] [Thread-18693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:12:38.762 [DEBUG] [Thread-18693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:12:38.762 [DEBUG] [Thread-18693] [transport.py] [_log()] Compression: none
2026-04-15T12:12:38.762 [DEBUG] [Thread-18693] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:12:38.778 [DEBUG] [Thread-18693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:12:38.778 [DEBUG] [Thread-18693] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:12:38.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:12:38.779 [DEBUG] [Thread-18693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:12:38.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:12:38.780 [DEBUG] [Thread-18693] [transport.py] [_log()] userauth is OK
2026-04-15T12:12:38.780 [DEBUG] [Thread-18693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:12:38.780 [DEBUG] [Thread-18693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:12:38.780 [DEBUG] [Thread-18693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:12:38.780 [DEBUG] [Thread-18693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:12:38.799 [INFO] [Thread-18693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:12:38.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:12:39.403 [DEBUG] [Thread-18693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:12:39.404 [DEBUG] [Thread-18693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:12:39.404 [DEBUG] [Thread-18693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:12:39.444 [DEBUG] [Thread-18693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:12:39.444 [DEBUG] [Thread-18693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:12:39.449 [DEBUG] [Thread-18693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:12:39.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:12:39.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:12:39.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:12:39.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:12:39.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:12:39.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:12:39.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:12:39.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:12:39.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:12:39.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.425139 -999.00  +12.80  19.13     71   +7.80 1 2 1 1 1   888    0 5.05 36.33 ----- 19.8 19.1 333.4 22.6 20.0 -16.6 18.6 -15.6 18.0 -12.9 19.3 -14.1
2026-04-15T12:12:39.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:12:39.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:12:39.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.425139
2026-04-15T12:12:39.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:12:39.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:12:39.483 [DEBUG] [Thread-18693] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:12:39.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:12:39.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:12:39.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:12:39.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:12:15', tmtdew=6.3399, humidity=65.411, cloud=0.0, wind=14.9803, temperature=12.931, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:12:12.010', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:12:39.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:12:39.741 [DEBUG] [Thread-18696] [transport.py] [_log()] starting thread (client mode): 0xf1365480
2026-04-15T12:12:39.741 [DEBUG] [Thread-18696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:12:39.755 [DEBUG] [Thread-18696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:12:39.755 [INFO] [Thread-18696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:12:39.762 [DEBUG] [Thread-18696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:12:39.762 [DEBUG] [Thread-18696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:12:39.762 [DEBUG] [Thread-18696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:12:39.763 [DEBUG] [Thread-18696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:12:39.763 [DEBUG] [Thread-18696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:12:39.763 [DEBUG] [Thread-18696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:12:39.763 [DEBUG] [Thread-18696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:12:39.763 [DEBUG] [Thread-18696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:12:39.763 [DEBUG] [Thread-18696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:12:39.763 [DEBUG] [Thread-18696] [transport.py] [_log()] client lang: <none>
2026-04-15T12:12:39.763 [DEBUG] [Thread-18696] [transport.py] [_log()] server lang: <none>
2026-04-15T12:12:39.763 [DEBUG] [Thread-18696] [transport.py] [_log()] kex follows: False
2026-04-15T12:12:39.763 [DEBUG] [Thread-18696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:12:39.763 [DEBUG] [Thread-18696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:12:39.763 [DEBUG] [Thread-18696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:12:39.764 [DEBUG] [Thread-18696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:12:39.764 [DEBUG] [Thread-18696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:12:39.764 [DEBUG] [Thread-18696] [transport.py] [_log()] Compression: none
2026-04-15T12:12:39.764 [DEBUG] [Thread-18696] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:12:39.819 [DEBUG] [Thread-18696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:12:39.820 [DEBUG] [Thread-18696] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:12:39.820 [DEBUG] [Thread-18696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:12:39.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:12:39.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:12:39.877 [DEBUG] [Thread-18696] [transport.py] [_log()] userauth is OK
2026-04-15T12:12:39.877 [DEBUG] [Thread-18696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:12:39.877 [DEBUG] [Thread-18696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:12:39.877 [DEBUG] [Thread-18696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:12:39.877 [DEBUG] [Thread-18696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:12:39.902 [INFO] [Thread-18696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:12:39.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:12:39.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:12:40.729 [DEBUG] [Thread-18696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:12:40.729 [DEBUG] [Thread-18696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:12:40.776 [DEBUG] [Thread-18696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:12:40.777 [DEBUG] [Thread-18696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:12:40.786 [DEBUG] [Thread-18696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:12:40.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:12:40.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')
2026-04-15T12:12:40.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
2026-04-15T12:12:40.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:12:40.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:12:40.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:12:40.821 [DEBUG] [Thread-18696] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:12:44.204 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:12:44.206 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:12:50.600 [DEBUG] [Thread-18698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:13:05.645 [DEBUG] [Thread-18699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:13:10.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:13:10.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:13:10.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:13:12.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 12, 51), 6.39853, 65.2199, 0.0, 20.1838, 13.7278, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:13:12.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:12:51
2026-04-15T12:13:12.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:13:12.807 [DEBUG] [Thread-18700] [transport.py] [_log()] starting thread (client mode): 0xf1367c10
2026-04-15T12:13:12.808 [DEBUG] [Thread-18700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:13:12.828 [DEBUG] [Thread-18700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:13:12.828 [INFO] [Thread-18700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:13:12.831 [DEBUG] [Thread-18700] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:13:12.831 [DEBUG] [Thread-18700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:13:12.831 [DEBUG] [Thread-18700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:13:12.831 [DEBUG] [Thread-18700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:13:12.831 [DEBUG] [Thread-18700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:13:12.831 [DEBUG] [Thread-18700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:13:12.831 [DEBUG] [Thread-18700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:13:12.831 [DEBUG] [Thread-18700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:13:12.831 [DEBUG] [Thread-18700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:13:12.831 [DEBUG] [Thread-18700] [transport.py] [_log()] client lang: <none>
2026-04-15T12:13:12.831 [DEBUG] [Thread-18700] [transport.py] [_log()] server lang: <none>
2026-04-15T12:13:12.831 [DEBUG] [Thread-18700] [transport.py] [_log()] kex follows: False
2026-04-15T12:13:12.831 [DEBUG] [Thread-18700] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:13:12.831 [DEBUG] [Thread-18700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:13:12.832 [DEBUG] [Thread-18700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:13:12.832 [DEBUG] [Thread-18700] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:13:12.832 [DEBUG] [Thread-18700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:13:12.832 [DEBUG] [Thread-18700] [transport.py] [_log()] Compression: none
2026-04-15T12:13:12.832 [DEBUG] [Thread-18700] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:13:12.848 [DEBUG] [Thread-18700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:13:12.848 [DEBUG] [Thread-18700] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:13:12.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:13:12.849 [DEBUG] [Thread-18700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:13:12.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:13:12.850 [DEBUG] [Thread-18700] [transport.py] [_log()] userauth is OK
2026-04-15T12:13:12.850 [DEBUG] [Thread-18700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:13:12.850 [DEBUG] [Thread-18700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:13:12.850 [DEBUG] [Thread-18700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:13:12.850 [DEBUG] [Thread-18700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:13:12.867 [INFO] [Thread-18700] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:13:12.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:13:13.482 [DEBUG] [Thread-18700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:13:13.483 [DEBUG] [Thread-18700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:13:13.484 [DEBUG] [Thread-18700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:13:13.523 [DEBUG] [Thread-18700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:13:13.523 [DEBUG] [Thread-18700] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:13:13.529 [DEBUG] [Thread-18700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:13:13.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:13:13.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:13:13.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:13:13.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:13:13.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:13:13.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:13:13.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:13:13.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:13:13.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:13:13.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.425486 -999.00  +12.80   7.83     71   +7.80 1 2 1 1 1   888    0 5.22 41.40 ----- 10.0 7.8 9.8 21.3 20.2 -15.0 18.7 -15.2 18.2 -12.0 19.6 -11.6
2026-04-15T12:13:13.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:13:13.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:13:13.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.425486
2026-04-15T12:13:13.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:13:13.552 [DEBUG] [Thread-18700] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:13:13.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:13:13.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:13:13.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:13:13.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:13:13.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:12:51', tmtdew=6.39853, humidity=65.2199, cloud=0.0, wind=20.1838, temperature=13.7278, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:12:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:13:13.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:13:13.808 [DEBUG] [Thread-18703] [transport.py] [_log()] starting thread (client mode): 0xee9e5f60
2026-04-15T12:13:13.808 [DEBUG] [Thread-18703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:13:13.823 [DEBUG] [Thread-18703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:13:13.823 [INFO] [Thread-18703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:13:13.831 [DEBUG] [Thread-18703] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:13:13.831 [DEBUG] [Thread-18703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:13:13.831 [DEBUG] [Thread-18703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:13:13.831 [DEBUG] [Thread-18703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:13:13.831 [DEBUG] [Thread-18703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:13:13.831 [DEBUG] [Thread-18703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:13:13.831 [DEBUG] [Thread-18703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:13:13.831 [DEBUG] [Thread-18703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:13:13.831 [DEBUG] [Thread-18703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:13:13.832 [DEBUG] [Thread-18703] [transport.py] [_log()] client lang: <none>
2026-04-15T12:13:13.832 [DEBUG] [Thread-18703] [transport.py] [_log()] server lang: <none>
2026-04-15T12:13:13.832 [DEBUG] [Thread-18703] [transport.py] [_log()] kex follows: False
2026-04-15T12:13:13.832 [DEBUG] [Thread-18703] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:13:13.832 [DEBUG] [Thread-18703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:13:13.832 [DEBUG] [Thread-18703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:13:13.832 [DEBUG] [Thread-18703] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:13:13.832 [DEBUG] [Thread-18703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:13:13.832 [DEBUG] [Thread-18703] [transport.py] [_log()] Compression: none
2026-04-15T12:13:13.832 [DEBUG] [Thread-18703] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:13:13.887 [DEBUG] [Thread-18703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:13:13.888 [DEBUG] [Thread-18703] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:13:13.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:13:13.888 [DEBUG] [Thread-18703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:13:13.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:13:13.948 [DEBUG] [Thread-18703] [transport.py] [_log()] userauth is OK
2026-04-15T12:13:13.949 [DEBUG] [Thread-18703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:13:13.949 [DEBUG] [Thread-18703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:13:13.949 [DEBUG] [Thread-18703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:13:13.949 [DEBUG] [Thread-18703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:13:13.974 [INFO] [Thread-18703] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:13:13.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:13:13.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:13:14.069 [DEBUG] [Thread-18705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:13:14.777 [DEBUG] [Thread-18703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:13:14.778 [DEBUG] [Thread-18703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:13:14.825 [DEBUG] [Thread-18703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:13:14.825 [DEBUG] [Thread-18703] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:13:14.834 [DEBUG] [Thread-18703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:13:14.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:13:14.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')
2026-04-15T12:13:14.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') -> 00000000
2026-04-15T12:13:14.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:13:14.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:13:14.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:13:14.869 [DEBUG] [Thread-18703] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:13:20.675 [DEBUG] [Thread-18706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:13:35.716 [DEBUG] [Thread-18707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:13:44.344 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:13:44.345 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:13:44.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:13:44.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:13:44.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
2026-04-15T12:13:46.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 13, 26), 6.41611, 64.8472, 0.0, 10.5872, 12.9977, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:13:46.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:13:26
2026-04-15T12:13:46.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:13:46.981 [DEBUG] [Thread-18708] [transport.py] [_log()] starting thread (client mode): 0xf13ff910
2026-04-15T12:13:46.982 [DEBUG] [Thread-18708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:13:46.998 [DEBUG] [Thread-18708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:13:46.998 [INFO] [Thread-18708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:13:47.002 [DEBUG] [Thread-18708] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:13:47.002 [DEBUG] [Thread-18708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:13:47.002 [DEBUG] [Thread-18708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:13:47.002 [DEBUG] [Thread-18708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:13:47.002 [DEBUG] [Thread-18708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:13:47.002 [DEBUG] [Thread-18708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:13:47.002 [DEBUG] [Thread-18708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:13:47.002 [DEBUG] [Thread-18708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:13:47.002 [DEBUG] [Thread-18708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:13:47.002 [DEBUG] [Thread-18708] [transport.py] [_log()] client lang: <none>
2026-04-15T12:13:47.003 [DEBUG] [Thread-18708] [transport.py] [_log()] server lang: <none>
2026-04-15T12:13:47.003 [DEBUG] [Thread-18708] [transport.py] [_log()] kex follows: False
2026-04-15T12:13:47.003 [DEBUG] [Thread-18708] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:13:47.003 [DEBUG] [Thread-18708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:13:47.003 [DEBUG] [Thread-18708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:13:47.003 [DEBUG] [Thread-18708] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:13:47.003 [DEBUG] [Thread-18708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:13:47.003 [DEBUG] [Thread-18708] [transport.py] [_log()] Compression: none
2026-04-15T12:13:47.003 [DEBUG] [Thread-18708] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:13:47.020 [DEBUG] [Thread-18708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:13:47.020 [DEBUG] [Thread-18708] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:13:47.020 [DEBUG] [Thread-18708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:13:47.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:13:47.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:13:47.022 [DEBUG] [Thread-18708] [transport.py] [_log()] userauth is OK
2026-04-15T12:13:47.022 [DEBUG] [Thread-18708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:13:47.022 [DEBUG] [Thread-18708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:13:47.022 [DEBUG] [Thread-18708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:13:47.022 [DEBUG] [Thread-18708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:13:47.040 [INFO] [Thread-18708] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:13:47.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:13:47.660 [DEBUG] [Thread-18708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:13:47.661 [DEBUG] [Thread-18708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:13:47.661 [DEBUG] [Thread-18708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:13:47.701 [DEBUG] [Thread-18708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:13:47.701 [DEBUG] [Thread-18708] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:13:47.704 [DEBUG] [Thread-18708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:13:47.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:13:47.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:13:47.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:13:47.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:13:47.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:13:47.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:13:47.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:13:47.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:13:47.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:13:47.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.426180 -999.00  +12.90  13.58     70   +7.70 1 2 1 1 1   888    0 5.61 52.63 ----- 6.2 13.6 14.4 17.8 20.1 -15.2 18.7 -15.1 18.2 -11.3 19.2 -14.0
2026-04-15T12:13:47.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:13:47.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:13:47.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.426180
2026-04-15T12:13:47.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:13:47.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:13:47.728 [DEBUG] [Thread-18708] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:13:47.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:13:47.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:13:47.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:13:47.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:13:26', tmtdew=6.41611, humidity=64.8472, cloud=0.0, wind=10.5872, temperature=12.9977, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:13:41.952', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:13:47.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:13:47.988 [DEBUG] [Thread-18711] [transport.py] [_log()] starting thread (client mode): 0xf13efcd0
2026-04-15T12:13:47.988 [DEBUG] [Thread-18711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:13:48.004 [DEBUG] [Thread-18711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:13:48.004 [INFO] [Thread-18711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:13:48.012 [DEBUG] [Thread-18711] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:13:48.012 [DEBUG] [Thread-18711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:13:48.012 [DEBUG] [Thread-18711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:13:48.012 [DEBUG] [Thread-18711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:13:48.012 [DEBUG] [Thread-18711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:13:48.012 [DEBUG] [Thread-18711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:13:48.012 [DEBUG] [Thread-18711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:13:48.012 [DEBUG] [Thread-18711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:13:48.012 [DEBUG] [Thread-18711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:13:48.013 [DEBUG] [Thread-18711] [transport.py] [_log()] client lang: <none>
2026-04-15T12:13:48.013 [DEBUG] [Thread-18711] [transport.py] [_log()] server lang: <none>
2026-04-15T12:13:48.013 [DEBUG] [Thread-18711] [transport.py] [_log()] kex follows: False
2026-04-15T12:13:48.013 [DEBUG] [Thread-18711] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:13:48.013 [DEBUG] [Thread-18711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:13:48.013 [DEBUG] [Thread-18711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:13:48.013 [DEBUG] [Thread-18711] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:13:48.013 [DEBUG] [Thread-18711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:13:48.013 [DEBUG] [Thread-18711] [transport.py] [_log()] Compression: none
2026-04-15T12:13:48.013 [DEBUG] [Thread-18711] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:13:48.067 [DEBUG] [Thread-18711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:13:48.068 [DEBUG] [Thread-18711] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:13:48.068 [DEBUG] [Thread-18711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:13:48.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:13:48.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:13:48.124 [DEBUG] [Thread-18711] [transport.py] [_log()] userauth is OK
2026-04-15T12:13:48.125 [DEBUG] [Thread-18711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:13:48.125 [DEBUG] [Thread-18711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:13:48.125 [DEBUG] [Thread-18711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:13:48.126 [DEBUG] [Thread-18711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:13:48.151 [INFO] [Thread-18711] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:13:48.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:13:48.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:13:48.989 [DEBUG] [Thread-18711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:13:48.990 [DEBUG] [Thread-18711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:13:49.037 [DEBUG] [Thread-18711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:13:49.037 [DEBUG] [Thread-18711] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:13:49.046 [DEBUG] [Thread-18711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:13:49.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:13:49.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')
2026-04-15T12:13:49.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
2026-04-15T12:13:49.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:13:49.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:13:49.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:13:49.080 [DEBUG] [Thread-18711] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:13:50.746 [DEBUG] [Thread-18713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:14:05.786 [DEBUG] [Thread-18714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:14:14.197 [DEBUG] [Thread-18715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:14:19.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:14:19.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:14:19.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
2026-04-15T12:14:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 14, 1), 6.31698, 65.2617, 0.0, 12.1396, 12.8983, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:14:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:14:01
2026-04-15T12:14:20.819 [DEBUG] [Thread-18716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:14:20.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:14:21.272 [DEBUG] [Thread-18717] [transport.py] [_log()] starting thread (client mode): 0xf13ef3a0
2026-04-15T12:14:21.272 [DEBUG] [Thread-18717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:14:21.286 [DEBUG] [Thread-18717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:14:21.287 [INFO] [Thread-18717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:14:21.290 [DEBUG] [Thread-18717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:14:21.290 [DEBUG] [Thread-18717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:14:21.290 [DEBUG] [Thread-18717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:14:21.290 [DEBUG] [Thread-18717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:14:21.290 [DEBUG] [Thread-18717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:14:21.290 [DEBUG] [Thread-18717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:14:21.290 [DEBUG] [Thread-18717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:14:21.290 [DEBUG] [Thread-18717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:14:21.291 [DEBUG] [Thread-18717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:14:21.291 [DEBUG] [Thread-18717] [transport.py] [_log()] client lang: <none>
2026-04-15T12:14:21.291 [DEBUG] [Thread-18717] [transport.py] [_log()] server lang: <none>
2026-04-15T12:14:21.291 [DEBUG] [Thread-18717] [transport.py] [_log()] kex follows: False
2026-04-15T12:14:21.291 [DEBUG] [Thread-18717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:14:21.291 [DEBUG] [Thread-18717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:14:21.291 [DEBUG] [Thread-18717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:14:21.291 [DEBUG] [Thread-18717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:14:21.291 [DEBUG] [Thread-18717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:14:21.291 [DEBUG] [Thread-18717] [transport.py] [_log()] Compression: none
2026-04-15T12:14:21.291 [DEBUG] [Thread-18717] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:14:21.308 [DEBUG] [Thread-18717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:14:21.308 [DEBUG] [Thread-18717] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:14:21.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:14:21.309 [DEBUG] [Thread-18717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:14:21.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:14:21.310 [DEBUG] [Thread-18717] [transport.py] [_log()] userauth is OK
2026-04-15T12:14:21.310 [DEBUG] [Thread-18717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:14:21.310 [DEBUG] [Thread-18717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:14:21.310 [DEBUG] [Thread-18717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:14:21.310 [DEBUG] [Thread-18717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:14:21.328 [INFO] [Thread-18717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:14:21.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:14:21.926 [DEBUG] [Thread-18717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:14:21.927 [DEBUG] [Thread-18717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:14:21.927 [DEBUG] [Thread-18717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:14:21.967 [DEBUG] [Thread-18717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:14:21.967 [DEBUG] [Thread-18717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:14:21.970 [DEBUG] [Thread-18717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:14:21.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:14:21.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:14:21.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:14:21.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:14:21.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:14:21.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:14:21.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:14:21.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:14:21.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:14:21.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.426528 -999.00  +12.60  17.19     71   +7.50 1 2 1 1 1   888    0 5.84 57.07 ----- 12.6 17.2 306.1 21.1 19.7 -15.0 18.5 -15.7 18.2 -12.5 19.1 -11.0
2026-04-15T12:14:21.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:14:21.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:14:21.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.426528
2026-04-15T12:14:21.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:14:21.988 [DEBUG] [Thread-18717] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:14:21.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:14:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:14:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:14:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:14:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:14:01', tmtdew=6.31698, humidity=65.2617, cloud=0.0, wind=12.1396, temperature=12.8983, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:14:12.019', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:14:22.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:14:22.246 [DEBUG] [Thread-18720] [transport.py] [_log()] starting thread (client mode): 0xee98bc70
2026-04-15T12:14:22.246 [DEBUG] [Thread-18720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:14:22.260 [DEBUG] [Thread-18720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:14:22.260 [INFO] [Thread-18720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:14:22.268 [DEBUG] [Thread-18720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:14:22.268 [DEBUG] [Thread-18720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:14:22.268 [DEBUG] [Thread-18720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:14:22.268 [DEBUG] [Thread-18720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:14:22.268 [DEBUG] [Thread-18720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:14:22.268 [DEBUG] [Thread-18720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:14:22.268 [DEBUG] [Thread-18720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:14:22.268 [DEBUG] [Thread-18720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:14:22.268 [DEBUG] [Thread-18720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:14:22.268 [DEBUG] [Thread-18720] [transport.py] [_log()] client lang: <none>
2026-04-15T12:14:22.268 [DEBUG] [Thread-18720] [transport.py] [_log()] server lang: <none>
2026-04-15T12:14:22.269 [DEBUG] [Thread-18720] [transport.py] [_log()] kex follows: False
2026-04-15T12:14:22.269 [DEBUG] [Thread-18720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:14:22.269 [DEBUG] [Thread-18720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:14:22.269 [DEBUG] [Thread-18720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:14:22.269 [DEBUG] [Thread-18720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:14:22.269 [DEBUG] [Thread-18720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:14:22.269 [DEBUG] [Thread-18720] [transport.py] [_log()] Compression: none
2026-04-15T12:14:22.269 [DEBUG] [Thread-18720] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:14:22.323 [DEBUG] [Thread-18720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:14:22.324 [DEBUG] [Thread-18720] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:14:22.324 [DEBUG] [Thread-18720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:14:22.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:14:22.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:14:22.380 [DEBUG] [Thread-18720] [transport.py] [_log()] userauth is OK
2026-04-15T12:14:22.381 [DEBUG] [Thread-18720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:14:22.381 [DEBUG] [Thread-18720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:14:22.381 [DEBUG] [Thread-18720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:14:22.381 [DEBUG] [Thread-18720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:14:22.403 [INFO] [Thread-18720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:14:22.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:14:22.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:14:23.275 [DEBUG] [Thread-18720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:14:23.275 [DEBUG] [Thread-18720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:14:23.323 [DEBUG] [Thread-18720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:14:23.323 [DEBUG] [Thread-18720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:14:23.332 [DEBUG] [Thread-18720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:14:23.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:14: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')
2026-04-15T12:14:23.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
2026-04-15T12:14:23.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:14:23.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:14:23.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:14:23.366 [DEBUG] [Thread-18720] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:14:35.851 [DEBUG] [Thread-18722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:14:44.485 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:14:44.486 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:14:50.896 [DEBUG] [Thread-18723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:14:53.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:14:53.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:14:53.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
2026-04-15T12:14:54.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 14, 37), 6.42702, 65.0205, 0.0, 16.4794, 13.3959, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:14:54.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:14:37
2026-04-15T12:14:55.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:14:55.462 [DEBUG] [Thread-18724] [transport.py] [_log()] starting thread (client mode): 0xf1336a70
2026-04-15T12:14:55.463 [DEBUG] [Thread-18724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:14:55.482 [DEBUG] [Thread-18724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:14:55.482 [INFO] [Thread-18724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:14:55.486 [DEBUG] [Thread-18724] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:14:55.486 [DEBUG] [Thread-18724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:14:55.486 [DEBUG] [Thread-18724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:14:55.486 [DEBUG] [Thread-18724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:14:55.486 [DEBUG] [Thread-18724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:14:55.486 [DEBUG] [Thread-18724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:14:55.486 [DEBUG] [Thread-18724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:14:55.486 [DEBUG] [Thread-18724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:14:55.486 [DEBUG] [Thread-18724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:14:55.486 [DEBUG] [Thread-18724] [transport.py] [_log()] client lang: <none>
2026-04-15T12:14:55.487 [DEBUG] [Thread-18724] [transport.py] [_log()] server lang: <none>
2026-04-15T12:14:55.487 [DEBUG] [Thread-18724] [transport.py] [_log()] kex follows: False
2026-04-15T12:14:55.487 [DEBUG] [Thread-18724] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:14:55.487 [DEBUG] [Thread-18724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:14:55.487 [DEBUG] [Thread-18724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:14:55.487 [DEBUG] [Thread-18724] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:14:55.487 [DEBUG] [Thread-18724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:14:55.487 [DEBUG] [Thread-18724] [transport.py] [_log()] Compression: none
2026-04-15T12:14:55.487 [DEBUG] [Thread-18724] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:14:55.495 [DEBUG] [Thread-18724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:14:55.496 [DEBUG] [Thread-18724] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:14:55.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:14:55.496 [DEBUG] [Thread-18724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:14:55.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:14:55.497 [DEBUG] [Thread-18724] [transport.py] [_log()] userauth is OK
2026-04-15T12:14:55.497 [DEBUG] [Thread-18724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:14:55.498 [DEBUG] [Thread-18724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:14:55.498 [DEBUG] [Thread-18724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:14:55.498 [DEBUG] [Thread-18724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:14:55.515 [INFO] [Thread-18724] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:14:55.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:14:56.086 [DEBUG] [Thread-18724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:14:56.086 [DEBUG] [Thread-18724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:14:56.088 [DEBUG] [Thread-18724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:14:56.127 [DEBUG] [Thread-18724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:14:56.127 [DEBUG] [Thread-18724] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:14:56.131 [DEBUG] [Thread-18724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:14:56.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:14:56.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:14:56.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:14:56.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:14:56.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:14:56.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:14:56.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:14:56.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:14:56.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:14:56.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.426875 -999.00  +12.40  12.51     71   +7.40 1 2 1 1 1   888    0 5.97 61.93 ----- 7.6 12.5 323.9 20.1 19.6 -13.6 18.4 -14.0 18.1 -10.5 18.8 -11.3
2026-04-15T12:14:56.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:14:56.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:14:56.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.426875
2026-04-15T12:14:56.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:14:56.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:14:56.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:14:56.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:14:56.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:14:56.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:14:37', tmtdew=6.42702, humidity=65.0205, cloud=0.0, wind=16.4794, temperature=13.3959, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:14:42.000', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:14:56.160 [DEBUG] [Thread-18724] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:14:56.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:14:56.402 [DEBUG] [Thread-18727] [transport.py] [_log()] starting thread (client mode): 0xf1335330
2026-04-15T12:14:56.402 [DEBUG] [Thread-18727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:14:56.419 [DEBUG] [Thread-18727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:14:56.419 [INFO] [Thread-18727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] client lang: <none>
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] server lang: <none>
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] kex follows: False
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:14:56.427 [DEBUG] [Thread-18727] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:14:56.428 [DEBUG] [Thread-18727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:14:56.428 [DEBUG] [Thread-18727] [transport.py] [_log()] Compression: none
2026-04-15T12:14:56.428 [DEBUG] [Thread-18727] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:14:56.488 [DEBUG] [Thread-18727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:14:56.489 [DEBUG] [Thread-18727] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:14:56.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:14:56.489 [DEBUG] [Thread-18727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:14:56.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:14:56.545 [DEBUG] [Thread-18727] [transport.py] [_log()] userauth is OK
2026-04-15T12:14:56.546 [DEBUG] [Thread-18727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:14:56.546 [DEBUG] [Thread-18727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:14:56.546 [DEBUG] [Thread-18727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:14:56.546 [DEBUG] [Thread-18727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:14:56.572 [INFO] [Thread-18727] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:14:56.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:14:56.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:14:57.433 [DEBUG] [Thread-18727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:14:57.433 [DEBUG] [Thread-18727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:14:57.485 [DEBUG] [Thread-18727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:14:57.485 [DEBUG] [Thread-18727] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:14:57.498 [DEBUG] [Thread-18727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:14:57.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:14:57.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')
2026-04-15T12:14:57.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
2026-04-15T12:14:57.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:14:57.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:14:57.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:14:57.535 [DEBUG] [Thread-18727] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:15:05.929 [DEBUG] [Thread-18729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:15:14.318 [DEBUG] [Thread-18730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:15:20.973 [DEBUG] [Thread-18731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:15:27.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:15:27.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:15:27.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
2026-04-15T12:15:28.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 15, 12), 6.37494, 64.9798, 0.0, 11.9279, 12.8821, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:15:28.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:15:12
2026-04-15T12:15:29.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:15:29.806 [DEBUG] [Thread-18732] [transport.py] [_log()] starting thread (client mode): 0xf1334580
2026-04-15T12:15:29.806 [DEBUG] [Thread-18732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:15:29.820 [DEBUG] [Thread-18732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:15:29.820 [INFO] [Thread-18732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:15:29.823 [DEBUG] [Thread-18732] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:15:29.823 [DEBUG] [Thread-18732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:15:29.823 [DEBUG] [Thread-18732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:15:29.824 [DEBUG] [Thread-18732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:15:29.824 [DEBUG] [Thread-18732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:15:29.824 [DEBUG] [Thread-18732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:15:29.824 [DEBUG] [Thread-18732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:15:29.824 [DEBUG] [Thread-18732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:15:29.824 [DEBUG] [Thread-18732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:15:29.824 [DEBUG] [Thread-18732] [transport.py] [_log()] client lang: <none>
2026-04-15T12:15:29.824 [DEBUG] [Thread-18732] [transport.py] [_log()] server lang: <none>
2026-04-15T12:15:29.824 [DEBUG] [Thread-18732] [transport.py] [_log()] kex follows: False
2026-04-15T12:15:29.824 [DEBUG] [Thread-18732] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:15:29.824 [DEBUG] [Thread-18732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:15:29.825 [DEBUG] [Thread-18732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:15:29.825 [DEBUG] [Thread-18732] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:15:29.825 [DEBUG] [Thread-18732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:15:29.825 [DEBUG] [Thread-18732] [transport.py] [_log()] Compression: none
2026-04-15T12:15:29.825 [DEBUG] [Thread-18732] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:15:29.841 [DEBUG] [Thread-18732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:15:29.842 [DEBUG] [Thread-18732] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:15:29.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:15:29.842 [DEBUG] [Thread-18732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:15:29.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:15:29.843 [DEBUG] [Thread-18732] [transport.py] [_log()] userauth is OK
2026-04-15T12:15:29.843 [DEBUG] [Thread-18732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:15:29.843 [DEBUG] [Thread-18732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:15:29.844 [DEBUG] [Thread-18732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:15:29.844 [DEBUG] [Thread-18732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:15:29.864 [INFO] [Thread-18732] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:15:29.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:15:30.436 [DEBUG] [Thread-18732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:15:30.436 [DEBUG] [Thread-18732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:15:30.437 [DEBUG] [Thread-18732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:15:30.477 [DEBUG] [Thread-18732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:15:30.477 [DEBUG] [Thread-18732] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:15:30.479 [DEBUG] [Thread-18732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:15:30.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:15:30.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:15:30.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:15:30.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:15:30.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:15:30.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:15:30.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:15:30.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:15:30.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:15:30.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.427222 -999.00  +12.50  18.12     72   +7.70 1 2 1 1 1   888    0 5.90 59.21 ----- 13.1 18.1 330.4 19.8 19.5 -13.3 18.4 -11.5 18.0 -10.0 18.8 -11.1
2026-04-15T12:15:30.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:15:30.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:15:30.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.427222
2026-04-15T12:15:30.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:15:30.499 [DEBUG] [Thread-18732] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:15:30.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:15:30.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:15:30.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:15:30.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:15:30.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:15:12', tmtdew=6.37494, humidity=64.9798, cloud=0.0, wind=11.9279, temperature=12.8821, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:15:11.981', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:15:30.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:15:30.761 [DEBUG] [Thread-18735] [transport.py] [_log()] starting thread (client mode): 0xf1367670
2026-04-15T12:15:30.761 [DEBUG] [Thread-18735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:15:30.775 [DEBUG] [Thread-18735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:15:30.775 [INFO] [Thread-18735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:15:30.783 [DEBUG] [Thread-18735] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:15:30.783 [DEBUG] [Thread-18735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:15:30.783 [DEBUG] [Thread-18735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:15:30.783 [DEBUG] [Thread-18735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:15:30.783 [DEBUG] [Thread-18735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:15:30.783 [DEBUG] [Thread-18735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:15:30.783 [DEBUG] [Thread-18735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:15:30.783 [DEBUG] [Thread-18735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:15:30.784 [DEBUG] [Thread-18735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:15:30.784 [DEBUG] [Thread-18735] [transport.py] [_log()] client lang: <none>
2026-04-15T12:15:30.784 [DEBUG] [Thread-18735] [transport.py] [_log()] server lang: <none>
2026-04-15T12:15:30.784 [DEBUG] [Thread-18735] [transport.py] [_log()] kex follows: False
2026-04-15T12:15:30.784 [DEBUG] [Thread-18735] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:15:30.784 [DEBUG] [Thread-18735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:15:30.784 [DEBUG] [Thread-18735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:15:30.784 [DEBUG] [Thread-18735] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:15:30.784 [DEBUG] [Thread-18735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:15:30.784 [DEBUG] [Thread-18735] [transport.py] [_log()] Compression: none
2026-04-15T12:15:30.785 [DEBUG] [Thread-18735] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:15:30.840 [DEBUG] [Thread-18735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:15:30.841 [DEBUG] [Thread-18735] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:15:30.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:15:30.841 [DEBUG] [Thread-18735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:15:30.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:15:30.896 [DEBUG] [Thread-18735] [transport.py] [_log()] userauth is OK
2026-04-15T12:15:30.897 [DEBUG] [Thread-18735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:15:30.897 [DEBUG] [Thread-18735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:15:30.897 [DEBUG] [Thread-18735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:15:30.897 [DEBUG] [Thread-18735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:15:30.922 [INFO] [Thread-18735] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:15:30.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:15:30.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:15:31.740 [DEBUG] [Thread-18735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:15:31.740 [DEBUG] [Thread-18735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:15:31.788 [DEBUG] [Thread-18735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:15:31.788 [DEBUG] [Thread-18735] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:15:31.797 [DEBUG] [Thread-18735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:15:31.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:15:31.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T12:15:31.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') -> 00000000
2026-04-15T12:15:31.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:15:31.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:15:31.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:15:31.831 [DEBUG] [Thread-18735] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:15:36.007 [DEBUG] [Thread-18737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:15:44.625 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:15:44.627 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:15:51.054 [DEBUG] [Thread-18738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:16:01.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:16:01.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:16:01.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
2026-04-15T12:16:03.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 15, 48), 6.33362, 65.352, 0.0, 13.5158, 12.9979, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:16:03.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:15:48
2026-04-15T12:16:03.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:16:03.978 [DEBUG] [Thread-18739] [transport.py] [_log()] starting thread (client mode): 0xee98f9a0
2026-04-15T12:16:03.978 [DEBUG] [Thread-18739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:16:03.987 [DEBUG] [Thread-18739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:16:03.987 [INFO] [Thread-18739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:16:03.990 [DEBUG] [Thread-18739] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:16:03.990 [DEBUG] [Thread-18739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:16:03.991 [DEBUG] [Thread-18739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:16:03.991 [DEBUG] [Thread-18739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:16:03.991 [DEBUG] [Thread-18739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:16:03.991 [DEBUG] [Thread-18739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:16:03.991 [DEBUG] [Thread-18739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:16:03.991 [DEBUG] [Thread-18739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:16:03.991 [DEBUG] [Thread-18739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:16:03.991 [DEBUG] [Thread-18739] [transport.py] [_log()] client lang: <none>
2026-04-15T12:16:03.991 [DEBUG] [Thread-18739] [transport.py] [_log()] server lang: <none>
2026-04-15T12:16:03.991 [DEBUG] [Thread-18739] [transport.py] [_log()] kex follows: False
2026-04-15T12:16:03.991 [DEBUG] [Thread-18739] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:16:03.992 [DEBUG] [Thread-18739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:16:03.992 [DEBUG] [Thread-18739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:16:03.992 [DEBUG] [Thread-18739] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:16:03.992 [DEBUG] [Thread-18739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:16:03.992 [DEBUG] [Thread-18739] [transport.py] [_log()] Compression: none
2026-04-15T12:16:03.992 [DEBUG] [Thread-18739] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:16:04.002 [DEBUG] [Thread-18739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:16:04.002 [DEBUG] [Thread-18739] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:16:04.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:16:04.003 [DEBUG] [Thread-18739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:16:04.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:16:04.003 [DEBUG] [Thread-18739] [transport.py] [_log()] userauth is OK
2026-04-15T12:16:04.004 [DEBUG] [Thread-18739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:16:04.004 [DEBUG] [Thread-18739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:16:04.004 [DEBUG] [Thread-18739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:16:04.004 [DEBUG] [Thread-18739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:16:04.038 [INFO] [Thread-18739] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:16:04.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:16:04.649 [DEBUG] [Thread-18739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:16:04.650 [DEBUG] [Thread-18739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:16:04.650 [DEBUG] [Thread-18739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:16:04.690 [DEBUG] [Thread-18739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:16:04.690 [DEBUG] [Thread-18739] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:16:04.692 [DEBUG] [Thread-18739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:16:04.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:16:04.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:16:04.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:16:04.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:16:04.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:16:04.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:16:04.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:16:04.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:16:04.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:16:04.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.427569 -999.00  +12.40  17.26     71   +7.40 1 2 1 1 1   888    0 6.04 64.22 ----- 20.6 17.3 23.3 25.1 19.3 -12.8 18.3 -12.6 17.9 -11.4 18.6 -11.7
2026-04-15T12:16:04.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:16:04.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:16:04.709 [DEBUG] [Thread-18739] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:16:04.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.427569
2026-04-15T12:16:04.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:16:04.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:16:04.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:16:04.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:16:04.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:16:04.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:15:48', tmtdew=6.33362, humidity=65.352, cloud=0.0, wind=13.5158, temperature=12.9979, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:15:41.962', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:16:04.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:16:04.964 [DEBUG] [Thread-18742] [transport.py] [_log()] starting thread (client mode): 0xee98c820
2026-04-15T12:16:04.965 [DEBUG] [Thread-18742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:16:04.979 [DEBUG] [Thread-18742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:16:04.979 [INFO] [Thread-18742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:16:04.986 [DEBUG] [Thread-18742] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:16:04.986 [DEBUG] [Thread-18742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:16:04.986 [DEBUG] [Thread-18742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:16:04.986 [DEBUG] [Thread-18742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:16:04.986 [DEBUG] [Thread-18742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:16:04.986 [DEBUG] [Thread-18742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:16:04.987 [DEBUG] [Thread-18742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:16:04.987 [DEBUG] [Thread-18742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:16:04.987 [DEBUG] [Thread-18742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:16:04.987 [DEBUG] [Thread-18742] [transport.py] [_log()] client lang: <none>
2026-04-15T12:16:04.987 [DEBUG] [Thread-18742] [transport.py] [_log()] server lang: <none>
2026-04-15T12:16:04.987 [DEBUG] [Thread-18742] [transport.py] [_log()] kex follows: False
2026-04-15T12:16:04.987 [DEBUG] [Thread-18742] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:16:04.987 [DEBUG] [Thread-18742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:16:04.987 [DEBUG] [Thread-18742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:16:04.987 [DEBUG] [Thread-18742] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:16:04.987 [DEBUG] [Thread-18742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:16:04.988 [DEBUG] [Thread-18742] [transport.py] [_log()] Compression: none
2026-04-15T12:16:04.988 [DEBUG] [Thread-18742] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:16:05.043 [DEBUG] [Thread-18742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:16:05.044 [DEBUG] [Thread-18742] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:16:05.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:16:05.044 [DEBUG] [Thread-18742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:16:05.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:16:05.100 [DEBUG] [Thread-18742] [transport.py] [_log()] userauth is OK
2026-04-15T12:16:05.101 [DEBUG] [Thread-18742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:16:05.101 [DEBUG] [Thread-18742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:16:05.101 [DEBUG] [Thread-18742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:16:05.101 [DEBUG] [Thread-18742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:16:05.124 [INFO] [Thread-18742] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:16:05.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:16:05.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:16:05.970 [DEBUG] [Thread-18742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:16:05.971 [DEBUG] [Thread-18742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:16:06.018 [DEBUG] [Thread-18742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:16:06.018 [DEBUG] [Thread-18742] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:16:06.027 [DEBUG] [Thread-18742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:16:06.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:16:06.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')
2026-04-15T12:16:06.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
2026-04-15T12:16:06.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:16:06.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:16:06.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:16:06.062 [DEBUG] [Thread-18742] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:16:06.087 [DEBUG] [Thread-18744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:16:14.443 [DEBUG] [Thread-18745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:16:21.130 [DEBUG] [Thread-18746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:16:36.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:16:36.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:16:36.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
2026-04-15T12:16:36.162 [DEBUG] [Thread-18747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:16:37.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 16, 23), 6.26898, 65.3915, 0.0, 14.5393, 12.9489, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:16:37.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:16:23
2026-04-15T12:16:37.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:16:38.195 [DEBUG] [Thread-18748] [transport.py] [_log()] starting thread (client mode): 0xee98f1c0
2026-04-15T12:16:38.195 [DEBUG] [Thread-18748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:16:38.209 [DEBUG] [Thread-18748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:16:38.210 [INFO] [Thread-18748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:16:38.213 [DEBUG] [Thread-18748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:16:38.213 [DEBUG] [Thread-18748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:16:38.213 [DEBUG] [Thread-18748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:16:38.213 [DEBUG] [Thread-18748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:16:38.213 [DEBUG] [Thread-18748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:16:38.213 [DEBUG] [Thread-18748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:16:38.213 [DEBUG] [Thread-18748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:16:38.213 [DEBUG] [Thread-18748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:16:38.213 [DEBUG] [Thread-18748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:16:38.213 [DEBUG] [Thread-18748] [transport.py] [_log()] client lang: <none>
2026-04-15T12:16:38.214 [DEBUG] [Thread-18748] [transport.py] [_log()] server lang: <none>
2026-04-15T12:16:38.214 [DEBUG] [Thread-18748] [transport.py] [_log()] kex follows: False
2026-04-15T12:16:38.214 [DEBUG] [Thread-18748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:16:38.214 [DEBUG] [Thread-18748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:16:38.214 [DEBUG] [Thread-18748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:16:38.214 [DEBUG] [Thread-18748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:16:38.214 [DEBUG] [Thread-18748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:16:38.214 [DEBUG] [Thread-18748] [transport.py] [_log()] Compression: none
2026-04-15T12:16:38.214 [DEBUG] [Thread-18748] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:16:38.230 [DEBUG] [Thread-18748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:16:38.230 [DEBUG] [Thread-18748] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:16:38.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:16:38.231 [DEBUG] [Thread-18748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:16:38.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:16:38.232 [DEBUG] [Thread-18748] [transport.py] [_log()] userauth is OK
2026-04-15T12:16:38.232 [DEBUG] [Thread-18748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:16:38.232 [DEBUG] [Thread-18748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:16:38.232 [DEBUG] [Thread-18748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:16:38.232 [DEBUG] [Thread-18748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:16:38.256 [INFO] [Thread-18748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:16:38.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:16:38.853 [DEBUG] [Thread-18748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:16:38.854 [DEBUG] [Thread-18748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:16:38.854 [DEBUG] [Thread-18748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:16:38.894 [DEBUG] [Thread-18748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:16:38.894 [DEBUG] [Thread-18748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:16:38.898 [DEBUG] [Thread-18748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:16:38.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:16:38.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:16:38.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:16:38.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:16:38.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:16:38.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:16:38.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:16:38.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:16:38.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:16:38.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.427916 -999.00  +12.30  18.13     72   +7.50 1 2 1 1 1   888    0 6.26 70.27 ----- 20.0 18.1 328.4 24.3 19.1 -13.0 18.1 -12.2 17.8 -11.9 18.6 -11.9
2026-04-15T12:16:38.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:16:38.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:16:38.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.427916
2026-04-15T12:16:38.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:16:38.921 [DEBUG] [Thread-18748] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:16:38.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:16:38.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:16:38.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:16:38.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:16:38.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:16:23', tmtdew=6.26898, humidity=65.3915, cloud=0.0, wind=14.5393, temperature=12.9489, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:16:11.942', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:16:39.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:16:39.177 [DEBUG] [Thread-18751] [transport.py] [_log()] starting thread (client mode): 0xee906f80
2026-04-15T12:16:39.178 [DEBUG] [Thread-18751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:16:39.193 [DEBUG] [Thread-18751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:16:39.193 [INFO] [Thread-18751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:16:39.201 [DEBUG] [Thread-18751] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:16:39.201 [DEBUG] [Thread-18751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:16:39.201 [DEBUG] [Thread-18751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:16:39.201 [DEBUG] [Thread-18751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:16:39.201 [DEBUG] [Thread-18751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:16:39.201 [DEBUG] [Thread-18751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:16:39.201 [DEBUG] [Thread-18751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:16:39.201 [DEBUG] [Thread-18751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:16:39.201 [DEBUG] [Thread-18751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:16:39.201 [DEBUG] [Thread-18751] [transport.py] [_log()] client lang: <none>
2026-04-15T12:16:39.201 [DEBUG] [Thread-18751] [transport.py] [_log()] server lang: <none>
2026-04-15T12:16:39.201 [DEBUG] [Thread-18751] [transport.py] [_log()] kex follows: False
2026-04-15T12:16:39.202 [DEBUG] [Thread-18751] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:16:39.202 [DEBUG] [Thread-18751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:16:39.202 [DEBUG] [Thread-18751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:16:39.202 [DEBUG] [Thread-18751] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:16:39.202 [DEBUG] [Thread-18751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:16:39.202 [DEBUG] [Thread-18751] [transport.py] [_log()] Compression: none
2026-04-15T12:16:39.202 [DEBUG] [Thread-18751] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:16:39.260 [DEBUG] [Thread-18751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:16:39.260 [DEBUG] [Thread-18751] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:16:39.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:16:39.261 [DEBUG] [Thread-18751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:16:39.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:16:39.316 [DEBUG] [Thread-18751] [transport.py] [_log()] userauth is OK
2026-04-15T12:16:39.317 [DEBUG] [Thread-18751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:16:39.317 [DEBUG] [Thread-18751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:16:39.317 [DEBUG] [Thread-18751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:16:39.317 [DEBUG] [Thread-18751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:16:39.342 [INFO] [Thread-18751] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:16:39.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:16:39.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:16:40.165 [DEBUG] [Thread-18751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:16:40.166 [DEBUG] [Thread-18751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:16:40.213 [DEBUG] [Thread-18751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:16:40.214 [DEBUG] [Thread-18751] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:16:40.229 [DEBUG] [Thread-18751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:16:40.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:16:40.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')
2026-04-15T12:16: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') -> 00000000
2026-04-15T12:16:40.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:16:40.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:16:40.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:16:40.263 [DEBUG] [Thread-18751] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:16:44.768 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:16:44.769 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:16:51.193 [DEBUG] [Thread-18753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:17:06.234 [DEBUG] [Thread-18754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:17:10.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:17:10.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:17:10.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
2026-04-15T12:17:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 16, 58), 6.3355, 65.0572, 0.0, 15.2104, 12.8652, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:17:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:16:58
2026-04-15T12:17:11.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:17:12.396 [DEBUG] [Thread-18755] [transport.py] [_log()] starting thread (client mode): 0xee90f670
2026-04-15T12:17:12.396 [DEBUG] [Thread-18755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:17:12.415 [DEBUG] [Thread-18755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:17:12.415 [INFO] [Thread-18755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:17:12.418 [DEBUG] [Thread-18755] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:17:12.418 [DEBUG] [Thread-18755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:17:12.418 [DEBUG] [Thread-18755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:17:12.418 [DEBUG] [Thread-18755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:17:12.418 [DEBUG] [Thread-18755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:17:12.418 [DEBUG] [Thread-18755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:17:12.418 [DEBUG] [Thread-18755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:17:12.419 [DEBUG] [Thread-18755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:17:12.419 [DEBUG] [Thread-18755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:17:12.419 [DEBUG] [Thread-18755] [transport.py] [_log()] client lang: <none>
2026-04-15T12:17:12.419 [DEBUG] [Thread-18755] [transport.py] [_log()] server lang: <none>
2026-04-15T12:17:12.419 [DEBUG] [Thread-18755] [transport.py] [_log()] kex follows: False
2026-04-15T12:17:12.419 [DEBUG] [Thread-18755] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:17:12.419 [DEBUG] [Thread-18755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:17:12.419 [DEBUG] [Thread-18755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:17:12.419 [DEBUG] [Thread-18755] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:17:12.419 [DEBUG] [Thread-18755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:17:12.419 [DEBUG] [Thread-18755] [transport.py] [_log()] Compression: none
2026-04-15T12:17:12.420 [DEBUG] [Thread-18755] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:17:12.428 [DEBUG] [Thread-18755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:17:12.429 [DEBUG] [Thread-18755] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:17:12.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:17:12.429 [DEBUG] [Thread-18755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:17:12.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:17:12.430 [DEBUG] [Thread-18755] [transport.py] [_log()] userauth is OK
2026-04-15T12:17:12.430 [DEBUG] [Thread-18755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:17:12.430 [DEBUG] [Thread-18755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:17:12.430 [DEBUG] [Thread-18755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:17:12.430 [DEBUG] [Thread-18755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:17:12.446 [INFO] [Thread-18755] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:17:12.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:17:13.071 [DEBUG] [Thread-18755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:17:13.071 [DEBUG] [Thread-18755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:17:13.072 [DEBUG] [Thread-18755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:17:13.112 [DEBUG] [Thread-18755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:17:13.112 [DEBUG] [Thread-18755] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:17:13.115 [DEBUG] [Thread-18755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:17:13.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:17:13.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:17:13.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:17:13.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:17:13.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:17:13.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:17:13.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:17:13.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:17:13.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:17:13.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.428263 -999.00  +12.30  18.81     72   +7.50 1 2 1 1 1   888    0 6.35 70.32 ----- 12.6 18.8 308.2 24.5 19.0 -14.1 18.2 -12.6 17.9 -12.1 18.5 -13.2
2026-04-15T12:17:13.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:17:13.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:17:13.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.428263
2026-04-15T12:17:13.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:17:13.136 [DEBUG] [Thread-18755] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:17:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:17:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:17:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:17:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:17:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:16:58', tmtdew=6.3355, humidity=65.0572, cloud=0.0, wind=15.2104, temperature=12.8652, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:16:41.923', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:17:13.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:17:13.392 [DEBUG] [Thread-18758] [transport.py] [_log()] starting thread (client mode): 0xee98d4e0
2026-04-15T12:17:13.392 [DEBUG] [Thread-18758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:17:13.406 [DEBUG] [Thread-18758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:17:13.406 [INFO] [Thread-18758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:17:13.413 [DEBUG] [Thread-18758] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:17:13.413 [DEBUG] [Thread-18758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:17:13.413 [DEBUG] [Thread-18758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:17:13.413 [DEBUG] [Thread-18758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:17:13.413 [DEBUG] [Thread-18758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:17:13.413 [DEBUG] [Thread-18758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:17:13.414 [DEBUG] [Thread-18758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:17:13.414 [DEBUG] [Thread-18758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:17:13.414 [DEBUG] [Thread-18758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:17:13.414 [DEBUG] [Thread-18758] [transport.py] [_log()] client lang: <none>
2026-04-15T12:17:13.414 [DEBUG] [Thread-18758] [transport.py] [_log()] server lang: <none>
2026-04-15T12:17:13.414 [DEBUG] [Thread-18758] [transport.py] [_log()] kex follows: False
2026-04-15T12:17:13.414 [DEBUG] [Thread-18758] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:17:13.414 [DEBUG] [Thread-18758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:17:13.414 [DEBUG] [Thread-18758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:17:13.414 [DEBUG] [Thread-18758] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:17:13.414 [DEBUG] [Thread-18758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:17:13.415 [DEBUG] [Thread-18758] [transport.py] [_log()] Compression: none
2026-04-15T12:17:13.415 [DEBUG] [Thread-18758] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:17:13.472 [DEBUG] [Thread-18758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:17:13.472 [DEBUG] [Thread-18758] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:17:13.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:17:13.473 [DEBUG] [Thread-18758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:17:13.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:17:13.529 [DEBUG] [Thread-18758] [transport.py] [_log()] userauth is OK
2026-04-15T12:17:13.529 [DEBUG] [Thread-18758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:17:13.529 [DEBUG] [Thread-18758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:17:13.529 [DEBUG] [Thread-18758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:17:13.529 [DEBUG] [Thread-18758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:17:13.554 [INFO] [Thread-18758] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:17:13.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:17:13.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:17:14.378 [DEBUG] [Thread-18758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:17:14.378 [DEBUG] [Thread-18758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:17:14.427 [DEBUG] [Thread-18758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:17:14.427 [DEBUG] [Thread-18758] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:17:14.436 [DEBUG] [Thread-18758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:17:14.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:17:14.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')
2026-04-15T12:17:14.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
2026-04-15T12:17:14.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:17:14.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:17:14.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:17:14.469 [DEBUG] [Thread-18758] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:17:14.559 [DEBUG] [Thread-18760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:17:21.263 [DEBUG] [Thread-18761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:17:36.304 [DEBUG] [Thread-18762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:17:44.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:17:44.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:17:44.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
2026-04-15T12:17:44.908 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:17:44.909 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:17:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 17, 34), 6.18301, 66.0813, 0.0, 19.7957, 13.2298, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:17:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:17:34
2026-04-15T12:17:46.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:17:46.605 [DEBUG] [Thread-18763] [transport.py] [_log()] starting thread (client mode): 0xee98e1d0
2026-04-15T12:17:46.605 [DEBUG] [Thread-18763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:17:46.624 [DEBUG] [Thread-18763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:17:46.624 [INFO] [Thread-18763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:17:46.627 [DEBUG] [Thread-18763] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:17:46.627 [DEBUG] [Thread-18763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:17:46.628 [DEBUG] [Thread-18763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:17:46.628 [DEBUG] [Thread-18763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:17:46.628 [DEBUG] [Thread-18763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:17:46.628 [DEBUG] [Thread-18763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:17:46.628 [DEBUG] [Thread-18763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:17:46.628 [DEBUG] [Thread-18763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:17:46.628 [DEBUG] [Thread-18763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:17:46.628 [DEBUG] [Thread-18763] [transport.py] [_log()] client lang: <none>
2026-04-15T12:17:46.628 [DEBUG] [Thread-18763] [transport.py] [_log()] server lang: <none>
2026-04-15T12:17:46.628 [DEBUG] [Thread-18763] [transport.py] [_log()] kex follows: False
2026-04-15T12:17:46.628 [DEBUG] [Thread-18763] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:17:46.628 [DEBUG] [Thread-18763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:17:46.629 [DEBUG] [Thread-18763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:17:46.629 [DEBUG] [Thread-18763] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:17:46.629 [DEBUG] [Thread-18763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:17:46.629 [DEBUG] [Thread-18763] [transport.py] [_log()] Compression: none
2026-04-15T12:17:46.629 [DEBUG] [Thread-18763] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:17:46.640 [DEBUG] [Thread-18763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:17:46.640 [DEBUG] [Thread-18763] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:17:46.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:17:46.641 [DEBUG] [Thread-18763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:17:46.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:17:46.641 [DEBUG] [Thread-18763] [transport.py] [_log()] userauth is OK
2026-04-15T12:17:46.642 [DEBUG] [Thread-18763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:17:46.642 [DEBUG] [Thread-18763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:17:46.642 [DEBUG] [Thread-18763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:17:46.642 [DEBUG] [Thread-18763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:17:46.658 [INFO] [Thread-18763] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:17:46.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:17:47.229 [DEBUG] [Thread-18763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:17:47.230 [DEBUG] [Thread-18763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:17:47.230 [DEBUG] [Thread-18763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:17:47.270 [DEBUG] [Thread-18763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:17:47.270 [DEBUG] [Thread-18763] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:17:47.272 [DEBUG] [Thread-18763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:17:47.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:17:47.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:17:47.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:17:47.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:17:47.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:17:47.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:17:47.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:17:47.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:17:47.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:17:47.288 [DEBUG] [Thread-18763] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:17:47.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.428958 -999.00  +12.40  13.95     72   +7.50 1 2 1 1 1   888    0 6.63 81.99 ----- 18.2 13.9 320.2 20.5 19.2 -12.3 18.1 -15.1 17.6 -15.9 18.8 -11.8
2026-04-15T12:17:47.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:17:47.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:17:47.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.428958
2026-04-15T12:17:47.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:17:47.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:17:47.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:17:47.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:17:47.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:17:47.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:17:34', tmtdew=6.18301, humidity=66.0813, cloud=0.0, wind=19.7957, temperature=13.2298, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:17:41.971', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:17:47.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:17:47.546 [DEBUG] [Thread-18766] [transport.py] [_log()] starting thread (client mode): 0xee9e4e80
2026-04-15T12:17:47.546 [DEBUG] [Thread-18766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:17:47.561 [DEBUG] [Thread-18766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:17:47.561 [INFO] [Thread-18766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:17:47.568 [DEBUG] [Thread-18766] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:17:47.568 [DEBUG] [Thread-18766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:17:47.569 [DEBUG] [Thread-18766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:17:47.569 [DEBUG] [Thread-18766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:17:47.569 [DEBUG] [Thread-18766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:17:47.569 [DEBUG] [Thread-18766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:17:47.569 [DEBUG] [Thread-18766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:17:47.569 [DEBUG] [Thread-18766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:17:47.569 [DEBUG] [Thread-18766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:17:47.569 [DEBUG] [Thread-18766] [transport.py] [_log()] client lang: <none>
2026-04-15T12:17:47.569 [DEBUG] [Thread-18766] [transport.py] [_log()] server lang: <none>
2026-04-15T12:17:47.569 [DEBUG] [Thread-18766] [transport.py] [_log()] kex follows: False
2026-04-15T12:17:47.569 [DEBUG] [Thread-18766] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:17:47.570 [DEBUG] [Thread-18766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:17:47.570 [DEBUG] [Thread-18766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:17:47.570 [DEBUG] [Thread-18766] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:17:47.570 [DEBUG] [Thread-18766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:17:47.570 [DEBUG] [Thread-18766] [transport.py] [_log()] Compression: none
2026-04-15T12:17:47.570 [DEBUG] [Thread-18766] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:17:47.624 [DEBUG] [Thread-18766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:17:47.624 [DEBUG] [Thread-18766] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:17:47.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:17:47.625 [DEBUG] [Thread-18766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:17:47.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:17:47.680 [DEBUG] [Thread-18766] [transport.py] [_log()] userauth is OK
2026-04-15T12:17:47.681 [DEBUG] [Thread-18766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:17:47.681 [DEBUG] [Thread-18766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:17:47.681 [DEBUG] [Thread-18766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:17:47.681 [DEBUG] [Thread-18766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:17:47.706 [INFO] [Thread-18766] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:17:47.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:17:47.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:17:48.598 [DEBUG] [Thread-18766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:17:48.599 [DEBUG] [Thread-18766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:17:48.647 [DEBUG] [Thread-18766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:17:48.647 [DEBUG] [Thread-18766] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:17:48.655 [DEBUG] [Thread-18766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:17:48.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:17:48.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')
2026-04-15T12:17:48.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
2026-04-15T12:17:48.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:17:48.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:17:48.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:17:48.690 [DEBUG] [Thread-18766] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:17:51.334 [DEBUG] [Thread-18768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:18:06.376 [DEBUG] [Thread-18769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:18:14.669 [DEBUG] [Thread-18770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:18:18.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:18:18.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:18:18.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
2026-04-15T12:18:19.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 18, 10), 6.23698, 65.3059, 0.0, 18.3679, 12.6478, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:18:19.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:18:10
2026-04-15T12:18:20.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:18:20.818 [DEBUG] [Thread-18771] [transport.py] [_log()] starting thread (client mode): 0xf1334880
2026-04-15T12:18:20.818 [DEBUG] [Thread-18771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:18:20.838 [DEBUG] [Thread-18771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:18:20.838 [INFO] [Thread-18771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:18:20.841 [DEBUG] [Thread-18771] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:18:20.841 [DEBUG] [Thread-18771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:18:20.841 [DEBUG] [Thread-18771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:18:20.841 [DEBUG] [Thread-18771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:18:20.842 [DEBUG] [Thread-18771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:18:20.842 [DEBUG] [Thread-18771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:18:20.842 [DEBUG] [Thread-18771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:18:20.842 [DEBUG] [Thread-18771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:18:20.842 [DEBUG] [Thread-18771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:18:20.842 [DEBUG] [Thread-18771] [transport.py] [_log()] client lang: <none>
2026-04-15T12:18:20.842 [DEBUG] [Thread-18771] [transport.py] [_log()] server lang: <none>
2026-04-15T12:18:20.842 [DEBUG] [Thread-18771] [transport.py] [_log()] kex follows: False
2026-04-15T12:18:20.842 [DEBUG] [Thread-18771] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:18:20.842 [DEBUG] [Thread-18771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:18:20.842 [DEBUG] [Thread-18771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:18:20.842 [DEBUG] [Thread-18771] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:18:20.843 [DEBUG] [Thread-18771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:18:20.843 [DEBUG] [Thread-18771] [transport.py] [_log()] Compression: none
2026-04-15T12:18:20.843 [DEBUG] [Thread-18771] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:18:20.854 [DEBUG] [Thread-18771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:18:20.855 [DEBUG] [Thread-18771] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:18:20.855 [DEBUG] [Thread-18771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:18:20.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:18:20.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:18:20.856 [DEBUG] [Thread-18771] [transport.py] [_log()] userauth is OK
2026-04-15T12:18:20.856 [DEBUG] [Thread-18771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:18:20.857 [DEBUG] [Thread-18771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:18:20.857 [DEBUG] [Thread-18771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:18:20.857 [DEBUG] [Thread-18771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:18:20.879 [INFO] [Thread-18771] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:18:20.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:18:21.405 [DEBUG] [Thread-18773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:18:21.465 [DEBUG] [Thread-18771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:18:21.465 [DEBUG] [Thread-18771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:18:21.466 [DEBUG] [Thread-18771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:18:21.506 [DEBUG] [Thread-18771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:18:21.506 [DEBUG] [Thread-18771] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:18:21.509 [DEBUG] [Thread-18771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:18:21.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:18:21.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:18:21.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:18:21.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:18:21.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:18:21.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:18:21.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:18:21.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:18:21.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:18:21.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.429305 -999.00  +12.60  21.52     72   +7.80 1 2 1 1 1   888    0 6.70 79.95 ----- 19.4 21.5 288.1 24.9 19.1 -17.5 18.3 -15.9 17.9 -14.7 18.5 -15.4
2026-04-15T12:18:21.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:18:21.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:18:21.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.429305
2026-04-15T12:18:21.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:18:21.533 [DEBUG] [Thread-18771] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:18:21.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:18:21.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:18:21.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:18:21.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:18:21.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:18:10', tmtdew=6.23698, humidity=65.3059, cloud=0.0, wind=18.3679, temperature=12.6478, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:18:11.952', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:18:21.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:18:21.789 [DEBUG] [Thread-18775] [transport.py] [_log()] starting thread (client mode): 0xf1331870
2026-04-15T12:18:21.789 [DEBUG] [Thread-18775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:18:21.803 [DEBUG] [Thread-18775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:18:21.803 [INFO] [Thread-18775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:18:21.811 [DEBUG] [Thread-18775] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:18:21.811 [DEBUG] [Thread-18775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:18:21.811 [DEBUG] [Thread-18775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:18:21.811 [DEBUG] [Thread-18775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:18:21.811 [DEBUG] [Thread-18775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:18:21.811 [DEBUG] [Thread-18775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:18:21.811 [DEBUG] [Thread-18775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:18:21.811 [DEBUG] [Thread-18775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:18:21.812 [DEBUG] [Thread-18775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:18:21.812 [DEBUG] [Thread-18775] [transport.py] [_log()] client lang: <none>
2026-04-15T12:18:21.812 [DEBUG] [Thread-18775] [transport.py] [_log()] server lang: <none>
2026-04-15T12:18:21.812 [DEBUG] [Thread-18775] [transport.py] [_log()] kex follows: False
2026-04-15T12:18:21.812 [DEBUG] [Thread-18775] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:18:21.812 [DEBUG] [Thread-18775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:18:21.812 [DEBUG] [Thread-18775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:18:21.812 [DEBUG] [Thread-18775] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:18:21.812 [DEBUG] [Thread-18775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:18:21.812 [DEBUG] [Thread-18775] [transport.py] [_log()] Compression: none
2026-04-15T12:18:21.812 [DEBUG] [Thread-18775] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:18:21.868 [DEBUG] [Thread-18775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:18:21.868 [DEBUG] [Thread-18775] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:18:21.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:18:21.869 [DEBUG] [Thread-18775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:18:21.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:18:21.925 [DEBUG] [Thread-18775] [transport.py] [_log()] userauth is OK
2026-04-15T12:18:21.925 [DEBUG] [Thread-18775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:18:21.925 [DEBUG] [Thread-18775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:18:21.926 [DEBUG] [Thread-18775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:18:21.926 [DEBUG] [Thread-18775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:18:21.951 [INFO] [Thread-18775] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:18:21.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:18:21.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:18:22.781 [DEBUG] [Thread-18775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:18:22.781 [DEBUG] [Thread-18775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:18:22.829 [DEBUG] [Thread-18775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:18:22.829 [DEBUG] [Thread-18775] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:18:22.838 [DEBUG] [Thread-18775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:18:22.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:18:22.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')
2026-04-15T12:18:22.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') -> 00000000
2026-04-15T12:18:22.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:18:22.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:18:22.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:18:22.873 [DEBUG] [Thread-18775] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:18:36.436 [DEBUG] [Thread-18777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:18:45.050 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:18:45.051 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:18:51.474 [DEBUG] [Thread-18778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:18:52.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:18:52.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:18:52.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
2026-04-15T12:18:54.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 18, 45), 6.45358, 64.8876, 0.0, 26.6753, 13.3292, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:18:54.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:18:45
2026-04-15T12:18:54.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:18:54.979 [DEBUG] [Thread-18779] [transport.py] [_log()] starting thread (client mode): 0xf13673d0
2026-04-15T12:18:54.979 [DEBUG] [Thread-18779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:18:54.999 [DEBUG] [Thread-18779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:18:54.999 [INFO] [Thread-18779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:18:55.000 [DEBUG] [Thread-18779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:18:55.000 [DEBUG] [Thread-18779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:18:55.000 [DEBUG] [Thread-18779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:18:55.000 [DEBUG] [Thread-18779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:18:55.000 [DEBUG] [Thread-18779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:18:55.000 [DEBUG] [Thread-18779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:18:55.000 [DEBUG] [Thread-18779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:18:55.001 [DEBUG] [Thread-18779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:18:55.001 [DEBUG] [Thread-18779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:18:55.001 [DEBUG] [Thread-18779] [transport.py] [_log()] client lang: <none>
2026-04-15T12:18:55.001 [DEBUG] [Thread-18779] [transport.py] [_log()] server lang: <none>
2026-04-15T12:18:55.001 [DEBUG] [Thread-18779] [transport.py] [_log()] kex follows: False
2026-04-15T12:18:55.001 [DEBUG] [Thread-18779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:18:55.001 [DEBUG] [Thread-18779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:18:55.001 [DEBUG] [Thread-18779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:18:55.001 [DEBUG] [Thread-18779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:18:55.001 [DEBUG] [Thread-18779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:18:55.001 [DEBUG] [Thread-18779] [transport.py] [_log()] Compression: none
2026-04-15T12:18:55.002 [DEBUG] [Thread-18779] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:18:55.017 [DEBUG] [Thread-18779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:18:55.017 [DEBUG] [Thread-18779] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:18:55.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:18:55.018 [DEBUG] [Thread-18779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:18:55.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:18:55.019 [DEBUG] [Thread-18779] [transport.py] [_log()] userauth is OK
2026-04-15T12:18:55.019 [DEBUG] [Thread-18779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:18:55.019 [DEBUG] [Thread-18779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:18:55.019 [DEBUG] [Thread-18779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:18:55.019 [DEBUG] [Thread-18779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:18:55.034 [INFO] [Thread-18779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:18:55.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:18:55.634 [DEBUG] [Thread-18779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:18:55.634 [DEBUG] [Thread-18779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:18:55.635 [DEBUG] [Thread-18779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:18:55.675 [DEBUG] [Thread-18779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:18:55.675 [DEBUG] [Thread-18779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:18:55.678 [DEBUG] [Thread-18779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:18:55.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:18:55.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:18:55.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:18:55.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:18:55.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:18:55.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:18:55.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:18:55.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:18:55.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:18:55.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.429652 -999.00  +12.70  19.71     72   +7.90 1 2 1 1 1   888    0 6.80 82.78 ----- 27.8 19.7 312.6 22.2 18.9 -16.6 18.1 -17.3 17.6 -16.0 18.5 -14.5
2026-04-15T12:18:55.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:18:55.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:18:55.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.429652
2026-04-15T12:18:55.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:18:55.695 [DEBUG] [Thread-18779] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:18:55.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:18:55.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:18:55.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:18:55.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:18:55.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:18:45', tmtdew=6.45358, humidity=64.8876, cloud=0.0, wind=26.6753, temperature=13.3292, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:18:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:18:55.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:18:55.943 [DEBUG] [Thread-18782] [transport.py] [_log()] starting thread (client mode): 0xf13664a0
2026-04-15T12:18:55.943 [DEBUG] [Thread-18782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:18:55.957 [DEBUG] [Thread-18782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:18:55.958 [INFO] [Thread-18782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:18:55.965 [DEBUG] [Thread-18782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:18:55.965 [DEBUG] [Thread-18782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:18:55.965 [DEBUG] [Thread-18782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:18:55.965 [DEBUG] [Thread-18782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:18:55.965 [DEBUG] [Thread-18782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:18:55.965 [DEBUG] [Thread-18782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:18:55.965 [DEBUG] [Thread-18782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:18:55.965 [DEBUG] [Thread-18782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:18:55.966 [DEBUG] [Thread-18782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:18:55.966 [DEBUG] [Thread-18782] [transport.py] [_log()] client lang: <none>
2026-04-15T12:18:55.966 [DEBUG] [Thread-18782] [transport.py] [_log()] server lang: <none>
2026-04-15T12:18:55.966 [DEBUG] [Thread-18782] [transport.py] [_log()] kex follows: False
2026-04-15T12:18:55.966 [DEBUG] [Thread-18782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:18:55.966 [DEBUG] [Thread-18782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:18:55.966 [DEBUG] [Thread-18782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:18:55.966 [DEBUG] [Thread-18782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:18:55.966 [DEBUG] [Thread-18782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:18:55.966 [DEBUG] [Thread-18782] [transport.py] [_log()] Compression: none
2026-04-15T12:18:55.966 [DEBUG] [Thread-18782] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:18:56.024 [DEBUG] [Thread-18782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:18:56.024 [DEBUG] [Thread-18782] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:18:56.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:18:56.025 [DEBUG] [Thread-18782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:18:56.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:18:56.080 [DEBUG] [Thread-18782] [transport.py] [_log()] userauth is OK
2026-04-15T12:18:56.081 [DEBUG] [Thread-18782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:18:56.081 [DEBUG] [Thread-18782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:18:56.081 [DEBUG] [Thread-18782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:18:56.081 [DEBUG] [Thread-18782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:18:56.106 [INFO] [Thread-18782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:18:56.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:18:56.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:18:56.923 [DEBUG] [Thread-18782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:18:56.923 [DEBUG] [Thread-18782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:18:56.974 [DEBUG] [Thread-18782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:18:56.974 [DEBUG] [Thread-18782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:18:56.983 [DEBUG] [Thread-18782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:18:56.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:18:56.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')
2026-04-15T12:18:57.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
2026-04-15T12:18:57.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:18:57.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:18:57.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:18:57.018 [DEBUG] [Thread-18782] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:19:06.502 [DEBUG] [Thread-18784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:19:14.779 [DEBUG] [Thread-18785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:19:21.542 [DEBUG] [Thread-18786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:19:27.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:19:27.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:19: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
2026-04-15T12:19:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 19, 21), 6.15876, 66.2587, 0.0, 21.8444, 12.6643, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:19:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:19:21
2026-04-15T12:19:28.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:19:29.132 [DEBUG] [Thread-18787] [transport.py] [_log()] starting thread (client mode): 0xf1365660
2026-04-15T12:19:29.133 [DEBUG] [Thread-18787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:19:29.154 [DEBUG] [Thread-18787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:19:29.154 [INFO] [Thread-18787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:19:29.156 [DEBUG] [Thread-18787] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:19:29.157 [DEBUG] [Thread-18787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:19:29.157 [DEBUG] [Thread-18787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:19:29.157 [DEBUG] [Thread-18787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:19:29.157 [DEBUG] [Thread-18787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:19:29.157 [DEBUG] [Thread-18787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:19:29.157 [DEBUG] [Thread-18787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:19:29.157 [DEBUG] [Thread-18787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:19:29.157 [DEBUG] [Thread-18787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:19:29.157 [DEBUG] [Thread-18787] [transport.py] [_log()] client lang: <none>
2026-04-15T12:19:29.157 [DEBUG] [Thread-18787] [transport.py] [_log()] server lang: <none>
2026-04-15T12:19:29.157 [DEBUG] [Thread-18787] [transport.py] [_log()] kex follows: False
2026-04-15T12:19:29.157 [DEBUG] [Thread-18787] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:19:29.157 [DEBUG] [Thread-18787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:19:29.158 [DEBUG] [Thread-18787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:19:29.158 [DEBUG] [Thread-18787] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:19:29.158 [DEBUG] [Thread-18787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:19:29.158 [DEBUG] [Thread-18787] [transport.py] [_log()] Compression: none
2026-04-15T12:19:29.158 [DEBUG] [Thread-18787] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:19:29.168 [DEBUG] [Thread-18787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:19:29.168 [DEBUG] [Thread-18787] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:19:29.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:19:29.169 [DEBUG] [Thread-18787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:19:29.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:19:29.170 [DEBUG] [Thread-18787] [transport.py] [_log()] userauth is OK
2026-04-15T12:19:29.170 [DEBUG] [Thread-18787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:19:29.170 [DEBUG] [Thread-18787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:19:29.170 [DEBUG] [Thread-18787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:19:29.170 [DEBUG] [Thread-18787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:19:29.189 [INFO] [Thread-18787] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:19:29.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:19:29.728 [DEBUG] [Thread-18787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:19:29.728 [DEBUG] [Thread-18787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:19:29.728 [DEBUG] [Thread-18787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:19:29.769 [DEBUG] [Thread-18787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:19:29.769 [DEBUG] [Thread-18787] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:19:29.772 [DEBUG] [Thread-18787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:19:29.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:19:29.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:19:29.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:19:29.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:19:29.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:19:29.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:19:29.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:19:29.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:19:29.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:19:29.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.429999 -999.00  +12.30  31.44     71   +7.30 1 2 2 1 1   888    0 6.77 79.44 ----- 22.7 31.4 313.6 33.3 18.7 -16.5 18.0 -17.5 17.5 -15.7 18.2 -14.4
2026-04-15T12:19:29.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:19:29.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:19:29.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.429999
2026-04-15T12:19:29.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:19:29.799 [DEBUG] [Thread-18787] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:19:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:19:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:19:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:19:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:19:29.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:19:21', tmtdew=6.15876, humidity=66.2587, cloud=0.0, wind=21.8444, temperature=12.6643, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:19:11.914', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:19:30.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:19:30.055 [DEBUG] [Thread-18790] [transport.py] [_log()] starting thread (client mode): 0xee98e3b0
2026-04-15T12:19:30.055 [DEBUG] [Thread-18790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:19:30.069 [DEBUG] [Thread-18790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:19:30.070 [INFO] [Thread-18790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:19:30.077 [DEBUG] [Thread-18790] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:19:30.077 [DEBUG] [Thread-18790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:19:30.077 [DEBUG] [Thread-18790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:19:30.077 [DEBUG] [Thread-18790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:19:30.077 [DEBUG] [Thread-18790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:19:30.077 [DEBUG] [Thread-18790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:19:30.077 [DEBUG] [Thread-18790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:19:30.077 [DEBUG] [Thread-18790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:19:30.078 [DEBUG] [Thread-18790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:19:30.078 [DEBUG] [Thread-18790] [transport.py] [_log()] client lang: <none>
2026-04-15T12:19:30.078 [DEBUG] [Thread-18790] [transport.py] [_log()] server lang: <none>
2026-04-15T12:19:30.078 [DEBUG] [Thread-18790] [transport.py] [_log()] kex follows: False
2026-04-15T12:19:30.078 [DEBUG] [Thread-18790] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:19:30.078 [DEBUG] [Thread-18790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:19:30.078 [DEBUG] [Thread-18790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:19:30.078 [DEBUG] [Thread-18790] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:19:30.078 [DEBUG] [Thread-18790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:19:30.078 [DEBUG] [Thread-18790] [transport.py] [_log()] Compression: none
2026-04-15T12:19:30.078 [DEBUG] [Thread-18790] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:19:30.136 [DEBUG] [Thread-18790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:19:30.136 [DEBUG] [Thread-18790] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:19:30.137 [DEBUG] [Thread-18790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:19:30.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:19:30.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:19:30.192 [DEBUG] [Thread-18790] [transport.py] [_log()] userauth is OK
2026-04-15T12:19:30.193 [DEBUG] [Thread-18790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:19:30.193 [DEBUG] [Thread-18790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:19:30.193 [DEBUG] [Thread-18790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:19:30.193 [DEBUG] [Thread-18790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:19:30.216 [INFO] [Thread-18790] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:19:30.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:19:30.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:19:31.072 [DEBUG] [Thread-18790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:19:31.072 [DEBUG] [Thread-18790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:19:31.120 [DEBUG] [Thread-18790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:19:31.120 [DEBUG] [Thread-18790] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:19:31.129 [DEBUG] [Thread-18790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:19:31.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:19:31.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')
2026-04-15T12:19:31.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') -> 00000000
2026-04-15T12:19:31.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:19:31.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:19:31.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:19:31.163 [DEBUG] [Thread-18790] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:19:36.573 [DEBUG] [Thread-18792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:19:45.191 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:19:45.193 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:19:51.617 [DEBUG] [Thread-18793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:20:01.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:20:01.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:20:01.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
2026-04-15T12:20:02.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 19, 21), 6.15876, 66.2587, 0.0, 21.8444, 12.6643, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:20:02.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:19:21
2026-04-15T12:20:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:20:03.506 [DEBUG] [Thread-18794] [transport.py] [_log()] starting thread (client mode): 0xee9e79a0
2026-04-15T12:20:03.506 [DEBUG] [Thread-18794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:20:03.522 [DEBUG] [Thread-18794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:20:03.522 [INFO] [Thread-18794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:20:03.524 [DEBUG] [Thread-18794] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:20:03.524 [DEBUG] [Thread-18794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:20:03.524 [DEBUG] [Thread-18794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:20:03.524 [DEBUG] [Thread-18794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:20:03.524 [DEBUG] [Thread-18794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:20:03.524 [DEBUG] [Thread-18794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:20:03.524 [DEBUG] [Thread-18794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:20:03.524 [DEBUG] [Thread-18794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:20:03.524 [DEBUG] [Thread-18794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:20:03.524 [DEBUG] [Thread-18794] [transport.py] [_log()] client lang: <none>
2026-04-15T12:20:03.525 [DEBUG] [Thread-18794] [transport.py] [_log()] server lang: <none>
2026-04-15T12:20:03.525 [DEBUG] [Thread-18794] [transport.py] [_log()] kex follows: False
2026-04-15T12:20:03.525 [DEBUG] [Thread-18794] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:20:03.525 [DEBUG] [Thread-18794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:20:03.525 [DEBUG] [Thread-18794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:20:03.525 [DEBUG] [Thread-18794] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:20:03.525 [DEBUG] [Thread-18794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:20:03.525 [DEBUG] [Thread-18794] [transport.py] [_log()] Compression: none
2026-04-15T12:20:03.525 [DEBUG] [Thread-18794] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:20:03.533 [DEBUG] [Thread-18794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:20:03.534 [DEBUG] [Thread-18794] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:20:03.534 [DEBUG] [Thread-18794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:20:03.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:20:03.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:20:03.535 [DEBUG] [Thread-18794] [transport.py] [_log()] userauth is OK
2026-04-15T12:20:03.535 [DEBUG] [Thread-18794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:20:03.535 [DEBUG] [Thread-18794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:20:03.535 [DEBUG] [Thread-18794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:20:03.536 [DEBUG] [Thread-18794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:20:03.553 [INFO] [Thread-18794] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:20:03.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:20:04.668 [DEBUG] [Thread-18794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:20:04.668 [DEBUG] [Thread-18794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:20:04.669 [DEBUG] [Thread-18794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:20:04.709 [DEBUG] [Thread-18794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:20:04.709 [DEBUG] [Thread-18794] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:20:04.712 [DEBUG] [Thread-18794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:20:04.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:20:04.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:20:04.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:20:04.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:20:04.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:20:04.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:20:04.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:20:04.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:20:04.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:20:04.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.430347 -999.00  +12.10  18.12     72   +7.20 1 2 1 1 1   888    0 6.54 73.70 ----- 17.5 18.1 313.0 24.9 18.4 -15.8 17.8 -17.6 17.4 -15.4 18.1 -13.1
2026-04-15T12:20:04.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:20:04.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:20:04.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.430347
2026-04-15T12:20:04.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:20:04.755 [DEBUG] [Thread-18794] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:20:04.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:20:04.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:20:04.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:20:04.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:20:04.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:19:21', tmtdew=6.15876, humidity=66.2587, cloud=0.0, wind=21.8444, temperature=12.6643, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:19:41.981', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:20:05.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:20:05.020 [DEBUG] [Thread-18797] [transport.py] [_log()] starting thread (client mode): 0xee98ebf0
2026-04-15T12:20:05.020 [DEBUG] [Thread-18797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:20:05.035 [DEBUG] [Thread-18797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:20:05.035 [INFO] [Thread-18797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:20:05.042 [DEBUG] [Thread-18797] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:20:05.042 [DEBUG] [Thread-18797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:20:05.042 [DEBUG] [Thread-18797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:20:05.042 [DEBUG] [Thread-18797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:20:05.043 [DEBUG] [Thread-18797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:20:05.043 [DEBUG] [Thread-18797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:20:05.043 [DEBUG] [Thread-18797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:20:05.043 [DEBUG] [Thread-18797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:20:05.043 [DEBUG] [Thread-18797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:20:05.043 [DEBUG] [Thread-18797] [transport.py] [_log()] client lang: <none>
2026-04-15T12:20:05.043 [DEBUG] [Thread-18797] [transport.py] [_log()] server lang: <none>
2026-04-15T12:20:05.043 [DEBUG] [Thread-18797] [transport.py] [_log()] kex follows: False
2026-04-15T12:20:05.043 [DEBUG] [Thread-18797] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:20:05.043 [DEBUG] [Thread-18797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:20:05.043 [DEBUG] [Thread-18797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:20:05.043 [DEBUG] [Thread-18797] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:20:05.044 [DEBUG] [Thread-18797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:20:05.044 [DEBUG] [Thread-18797] [transport.py] [_log()] Compression: none
2026-04-15T12:20:05.044 [DEBUG] [Thread-18797] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:20:05.104 [DEBUG] [Thread-18797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:20:05.104 [DEBUG] [Thread-18797] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:20:05.105 [DEBUG] [Thread-18797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:20:05.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:20:05.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:20:05.160 [DEBUG] [Thread-18797] [transport.py] [_log()] userauth is OK
2026-04-15T12:20:05.161 [DEBUG] [Thread-18797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:20:05.161 [DEBUG] [Thread-18797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:20:05.161 [DEBUG] [Thread-18797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:20:05.161 [DEBUG] [Thread-18797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:20:05.186 [INFO] [Thread-18797] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:20:05.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:20:05.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:20:06.080 [DEBUG] [Thread-18797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:20:06.080 [DEBUG] [Thread-18797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:20:06.128 [DEBUG] [Thread-18797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:20:06.128 [DEBUG] [Thread-18797] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:20:06.137 [DEBUG] [Thread-18797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:20:06.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:20:06.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')
2026-04-15T12:20:06.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
2026-04-15T12:20:06.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:20:06.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:20:06.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:20:06.171 [DEBUG] [Thread-18797] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:20:06.651 [DEBUG] [Thread-18799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:20:14.885 [DEBUG] [Thread-18800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:20:21.693 [DEBUG] [Thread-18801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:20:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:20:36.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:20:36.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
2026-04-15T12:20:36.723 [DEBUG] [Thread-18802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:20:37.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 19, 56), 6.34406, 65.4106, 0.0, 20.4502, 12.7635, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:20:37.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:19:56
2026-04-15T12:20:37.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:20:38.301 [DEBUG] [Thread-18803] [transport.py] [_log()] starting thread (client mode): 0xee98e800
2026-04-15T12:20:38.302 [DEBUG] [Thread-18803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:20:38.314 [DEBUG] [Thread-18803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:20:38.314 [INFO] [Thread-18803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:20:38.317 [DEBUG] [Thread-18803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:20:38.317 [DEBUG] [Thread-18803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:20:38.317 [DEBUG] [Thread-18803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:20:38.317 [DEBUG] [Thread-18803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:20:38.317 [DEBUG] [Thread-18803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:20:38.318 [DEBUG] [Thread-18803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:20:38.318 [DEBUG] [Thread-18803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:20:38.318 [DEBUG] [Thread-18803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:20:38.318 [DEBUG] [Thread-18803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:20:38.318 [DEBUG] [Thread-18803] [transport.py] [_log()] client lang: <none>
2026-04-15T12:20:38.318 [DEBUG] [Thread-18803] [transport.py] [_log()] server lang: <none>
2026-04-15T12:20:38.318 [DEBUG] [Thread-18803] [transport.py] [_log()] kex follows: False
2026-04-15T12:20:38.318 [DEBUG] [Thread-18803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:20:38.318 [DEBUG] [Thread-18803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:20:38.318 [DEBUG] [Thread-18803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:20:38.318 [DEBUG] [Thread-18803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:20:38.318 [DEBUG] [Thread-18803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:20:38.319 [DEBUG] [Thread-18803] [transport.py] [_log()] Compression: none
2026-04-15T12:20:38.319 [DEBUG] [Thread-18803] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:20:38.335 [DEBUG] [Thread-18803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:20:38.336 [DEBUG] [Thread-18803] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:20:38.336 [DEBUG] [Thread-18803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:20:38.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:20:38.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:20:38.338 [DEBUG] [Thread-18803] [transport.py] [_log()] userauth is OK
2026-04-15T12:20:38.338 [DEBUG] [Thread-18803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:20:38.338 [DEBUG] [Thread-18803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:20:38.338 [DEBUG] [Thread-18803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:20:38.338 [DEBUG] [Thread-18803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:20:38.361 [INFO] [Thread-18803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:20:38.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:20:38.988 [DEBUG] [Thread-18803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:20:38.988 [DEBUG] [Thread-18803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:20:38.988 [DEBUG] [Thread-18803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:20:39.030 [DEBUG] [Thread-18803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:20:39.030 [DEBUG] [Thread-18803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:20:39.033 [DEBUG] [Thread-18803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:20:39.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:20:39.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:20:39.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:20:39.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:20:39.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:20:39.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:20:39.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:20:39.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:20:39.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:20:39.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.430694 -999.00  +12.10  22.63     72   +7.30 1 2 1 1 1   888    0 6.41 69.65 ----- 20.7 22.6 315.6 26.9 18.4 -15.2 17.8 -16.1 17.3 -13.7 18.1 -12.7
2026-04-15T12:20:39.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:20:39.057 [DEBUG] [Thread-18803] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:20:39.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:20:39.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.430694
2026-04-15T12:20:39.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:20:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:20:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:20:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:20:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:20:39.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:19:56', tmtdew=6.34406, humidity=65.4106, cloud=0.0, wind=20.4502, temperature=12.7635, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:20:11.962', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:20:39.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:20:39.314 [DEBUG] [Thread-18806] [transport.py] [_log()] starting thread (client mode): 0xf13e02b0
2026-04-15T12:20:39.314 [DEBUG] [Thread-18806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:20:39.330 [DEBUG] [Thread-18806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:20:39.330 [INFO] [Thread-18806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:20:39.337 [DEBUG] [Thread-18806] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:20:39.337 [DEBUG] [Thread-18806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:20:39.337 [DEBUG] [Thread-18806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:20:39.338 [DEBUG] [Thread-18806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:20:39.338 [DEBUG] [Thread-18806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:20:39.338 [DEBUG] [Thread-18806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:20:39.338 [DEBUG] [Thread-18806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:20:39.338 [DEBUG] [Thread-18806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:20:39.338 [DEBUG] [Thread-18806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:20:39.338 [DEBUG] [Thread-18806] [transport.py] [_log()] client lang: <none>
2026-04-15T12:20:39.338 [DEBUG] [Thread-18806] [transport.py] [_log()] server lang: <none>
2026-04-15T12:20:39.338 [DEBUG] [Thread-18806] [transport.py] [_log()] kex follows: False
2026-04-15T12:20:39.338 [DEBUG] [Thread-18806] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:20:39.338 [DEBUG] [Thread-18806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:20:39.338 [DEBUG] [Thread-18806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:20:39.339 [DEBUG] [Thread-18806] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:20:39.339 [DEBUG] [Thread-18806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:20:39.339 [DEBUG] [Thread-18806] [transport.py] [_log()] Compression: none
2026-04-15T12:20:39.339 [DEBUG] [Thread-18806] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:20:39.398 [DEBUG] [Thread-18806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:20:39.398 [DEBUG] [Thread-18806] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:20:39.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:20:39.399 [DEBUG] [Thread-18806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:20:39.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:20:39.459 [DEBUG] [Thread-18806] [transport.py] [_log()] userauth is OK
2026-04-15T12:20:39.459 [DEBUG] [Thread-18806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:20:39.459 [DEBUG] [Thread-18806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:20:39.459 [DEBUG] [Thread-18806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:20:39.459 [DEBUG] [Thread-18806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:20:39.485 [INFO] [Thread-18806] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:20:39.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:20:39.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:20:40.333 [DEBUG] [Thread-18806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:20:40.333 [DEBUG] [Thread-18806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:20:40.381 [DEBUG] [Thread-18806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:20:40.381 [DEBUG] [Thread-18806] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:20:40.390 [DEBUG] [Thread-18806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:20:40.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:20:40.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')
2026-04-15T12:20:40.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
2026-04-15T12:20:40.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:20:40.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:20:40.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:20:40.426 [DEBUG] [Thread-18806] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:20:45.331 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:20:45.331 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:20:51.755 [DEBUG] [Thread-18808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:21:06.800 [DEBUG] [Thread-18809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:21:10.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:21:10.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:21:10.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
2026-04-15T12:21:11.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 20, 32), 6.49021, 64.7306, 0.0, 21.7908, 12.5974, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:21:11.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:20:32
2026-04-15T12:21:12.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:21:12.793 [DEBUG] [Thread-18810] [transport.py] [_log()] starting thread (client mode): 0xf13e2050
2026-04-15T12:21:12.793 [DEBUG] [Thread-18810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:21:12.813 [DEBUG] [Thread-18810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:21:12.813 [INFO] [Thread-18810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:21:12.814 [DEBUG] [Thread-18810] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:21:12.814 [DEBUG] [Thread-18810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:21:12.814 [DEBUG] [Thread-18810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:21:12.815 [DEBUG] [Thread-18810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:21:12.815 [DEBUG] [Thread-18810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:21:12.815 [DEBUG] [Thread-18810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:21:12.815 [DEBUG] [Thread-18810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:21:12.815 [DEBUG] [Thread-18810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:21:12.815 [DEBUG] [Thread-18810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:21:12.815 [DEBUG] [Thread-18810] [transport.py] [_log()] client lang: <none>
2026-04-15T12:21:12.815 [DEBUG] [Thread-18810] [transport.py] [_log()] server lang: <none>
2026-04-15T12:21:12.815 [DEBUG] [Thread-18810] [transport.py] [_log()] kex follows: False
2026-04-15T12:21:12.815 [DEBUG] [Thread-18810] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:21:12.815 [DEBUG] [Thread-18810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:21:12.815 [DEBUG] [Thread-18810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:21:12.816 [DEBUG] [Thread-18810] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:21:12.816 [DEBUG] [Thread-18810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:21:12.816 [DEBUG] [Thread-18810] [transport.py] [_log()] Compression: none
2026-04-15T12:21:12.816 [DEBUG] [Thread-18810] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:21:12.827 [DEBUG] [Thread-18810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:21:12.827 [DEBUG] [Thread-18810] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:21:12.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:21:12.828 [DEBUG] [Thread-18810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:21:12.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:21:12.829 [DEBUG] [Thread-18810] [transport.py] [_log()] userauth is OK
2026-04-15T12:21:12.829 [DEBUG] [Thread-18810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:21:12.829 [DEBUG] [Thread-18810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:21:12.829 [DEBUG] [Thread-18810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:21:12.829 [DEBUG] [Thread-18810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:21:12.845 [INFO] [Thread-18810] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:21:12.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:21:13.471 [DEBUG] [Thread-18810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:21:13.471 [DEBUG] [Thread-18810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:21:13.472 [DEBUG] [Thread-18810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:21:13.512 [DEBUG] [Thread-18810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:21:13.512 [DEBUG] [Thread-18810] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:21:13.515 [DEBUG] [Thread-18810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:21:13.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:21:13.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:21:13.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:21:13.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:21:13.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:21:13.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:21:13.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:21:13.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:21:13.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:21:13.529 [DEBUG] [Thread-18810] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:21:13.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.431041 -999.00  +12.30  22.53     73   +7.70 1 2 1 1 1   888    0 6.50 73.23 ----- 19.4 22.5 314.6 26.6 18.4 -15.4 17.7 -16.6 17.2 -14.2 18.0 -13.4
2026-04-15T12:21:13.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:21:13.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:21:13.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.431041
2026-04-15T12:21:13.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:21:13.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:21:13.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:21:13.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:21:13.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:21:13.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:20:32', tmtdew=6.49021, humidity=64.7306, cloud=0.0, wind=21.7908, temperature=12.5974, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:20:41.942', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:21:13.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:21:13.788 [DEBUG] [Thread-18813] [transport.py] [_log()] starting thread (client mode): 0xee98ecb0
2026-04-15T12:21:13.788 [DEBUG] [Thread-18813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:21:13.802 [DEBUG] [Thread-18813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:21:13.802 [INFO] [Thread-18813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:21:13.810 [DEBUG] [Thread-18813] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:21:13.810 [DEBUG] [Thread-18813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:21:13.810 [DEBUG] [Thread-18813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:21:13.810 [DEBUG] [Thread-18813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:21:13.810 [DEBUG] [Thread-18813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:21:13.810 [DEBUG] [Thread-18813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:21:13.810 [DEBUG] [Thread-18813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:21:13.810 [DEBUG] [Thread-18813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:21:13.810 [DEBUG] [Thread-18813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:21:13.810 [DEBUG] [Thread-18813] [transport.py] [_log()] client lang: <none>
2026-04-15T12:21:13.810 [DEBUG] [Thread-18813] [transport.py] [_log()] server lang: <none>
2026-04-15T12:21:13.811 [DEBUG] [Thread-18813] [transport.py] [_log()] kex follows: False
2026-04-15T12:21:13.811 [DEBUG] [Thread-18813] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:21:13.811 [DEBUG] [Thread-18813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:21:13.811 [DEBUG] [Thread-18813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:21:13.811 [DEBUG] [Thread-18813] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:21:13.811 [DEBUG] [Thread-18813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:21:13.811 [DEBUG] [Thread-18813] [transport.py] [_log()] Compression: none
2026-04-15T12:21:13.811 [DEBUG] [Thread-18813] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:21:13.871 [DEBUG] [Thread-18813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:21:13.871 [DEBUG] [Thread-18813] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:21:13.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:21:13.872 [DEBUG] [Thread-18813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:21:13.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:21:13.928 [DEBUG] [Thread-18813] [transport.py] [_log()] userauth is OK
2026-04-15T12:21:13.929 [DEBUG] [Thread-18813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:21:13.929 [DEBUG] [Thread-18813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:21:13.929 [DEBUG] [Thread-18813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:21:13.929 [DEBUG] [Thread-18813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:21:13.954 [INFO] [Thread-18813] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:21:13.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:21:13.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:21:14.771 [DEBUG] [Thread-18813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:21:14.771 [DEBUG] [Thread-18813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:21:14.820 [DEBUG] [Thread-18813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:21:14.820 [DEBUG] [Thread-18813] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:21:14.832 [DEBUG] [Thread-18813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:21:14.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:21:14.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')
2026-04-15T12:21:14.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') -> 00000000
2026-04-15T12:21:14.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:21:14.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:21:14.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:21:14.870 [DEBUG] [Thread-18813] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:21:15.007 [DEBUG] [Thread-18815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:21:21.831 [DEBUG] [Thread-18816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:21:36.874 [DEBUG] [Thread-18817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:21:44.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:21:44.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:21: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
2026-04-15T12:21:45.468 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:21:45.469 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:21:46.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 21, 8), 6.37003, 65.2114, 0.0, 18.2452, 12.3819, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:21:46.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:21:08
2026-04-15T12:21:46.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:21:47.001 [DEBUG] [Thread-18818] [transport.py] [_log()] starting thread (client mode): 0xee98f1c0
2026-04-15T12:21:47.001 [DEBUG] [Thread-18818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:21:47.021 [DEBUG] [Thread-18818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:21:47.021 [INFO] [Thread-18818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:21:47.024 [DEBUG] [Thread-18818] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:21:47.024 [DEBUG] [Thread-18818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:21:47.024 [DEBUG] [Thread-18818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:21:47.024 [DEBUG] [Thread-18818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:21:47.024 [DEBUG] [Thread-18818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:21:47.024 [DEBUG] [Thread-18818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:21:47.024 [DEBUG] [Thread-18818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:21:47.025 [DEBUG] [Thread-18818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:21:47.025 [DEBUG] [Thread-18818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:21:47.025 [DEBUG] [Thread-18818] [transport.py] [_log()] client lang: <none>
2026-04-15T12:21:47.025 [DEBUG] [Thread-18818] [transport.py] [_log()] server lang: <none>
2026-04-15T12:21:47.025 [DEBUG] [Thread-18818] [transport.py] [_log()] kex follows: False
2026-04-15T12:21:47.025 [DEBUG] [Thread-18818] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:21:47.025 [DEBUG] [Thread-18818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:21:47.025 [DEBUG] [Thread-18818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:21:47.025 [DEBUG] [Thread-18818] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:21:47.025 [DEBUG] [Thread-18818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:21:47.026 [DEBUG] [Thread-18818] [transport.py] [_log()] Compression: none
2026-04-15T12:21:47.026 [DEBUG] [Thread-18818] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:21:47.045 [DEBUG] [Thread-18818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:21:47.045 [DEBUG] [Thread-18818] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:21:47.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:21:47.046 [DEBUG] [Thread-18818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:21:47.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:21:47.047 [DEBUG] [Thread-18818] [transport.py] [_log()] userauth is OK
2026-04-15T12:21:47.047 [DEBUG] [Thread-18818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:21:47.047 [DEBUG] [Thread-18818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:21:47.047 [DEBUG] [Thread-18818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:21:47.047 [DEBUG] [Thread-18818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:21:47.072 [INFO] [Thread-18818] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:21:47.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:21:47.647 [DEBUG] [Thread-18818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:21:47.647 [DEBUG] [Thread-18818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:21:47.648 [DEBUG] [Thread-18818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:21:47.688 [DEBUG] [Thread-18818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:21:47.688 [DEBUG] [Thread-18818] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:21:47.691 [DEBUG] [Thread-18818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:21:47.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:21:47.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:21:47.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:21:47.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:21:47.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:21:47.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:21:47.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:21:47.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:21:47.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:21:47.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.431736 -999.00  +12.40  23.92     73   +7.70 1 2 1 1 1   888    0 6.63 74.48 ----- 17.3 23.9 319.8 26.1 18.1 -15.8 17.5 -16.9 17.0 -15.9 17.7 -12.9
2026-04-15T12:21:47.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:21:47.718 [DEBUG] [Thread-18818] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:21:47.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:21:47.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.431736
2026-04-15T12:21:47.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:21:47.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:21:47.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:21:47.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:21:47.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:21:47.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:21:08', tmtdew=6.37003, humidity=65.2114, cloud=0.0, wind=18.2452, temperature=12.3819, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:21:41.990', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:21:47.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:21:47.978 [DEBUG] [Thread-18821] [transport.py] [_log()] starting thread (client mode): 0xee906140
2026-04-15T12:21:47.978 [DEBUG] [Thread-18821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:21:47.992 [DEBUG] [Thread-18821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:21:47.992 [INFO] [Thread-18821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:21:47.999 [DEBUG] [Thread-18821] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:21:48.000 [DEBUG] [Thread-18821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:21:48.000 [DEBUG] [Thread-18821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:21:48.000 [DEBUG] [Thread-18821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:21:48.000 [DEBUG] [Thread-18821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:21:48.000 [DEBUG] [Thread-18821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:21:48.000 [DEBUG] [Thread-18821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:21:48.000 [DEBUG] [Thread-18821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:21:48.000 [DEBUG] [Thread-18821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:21:48.000 [DEBUG] [Thread-18821] [transport.py] [_log()] client lang: <none>
2026-04-15T12:21:48.000 [DEBUG] [Thread-18821] [transport.py] [_log()] server lang: <none>
2026-04-15T12:21:48.000 [DEBUG] [Thread-18821] [transport.py] [_log()] kex follows: False
2026-04-15T12:21:48.000 [DEBUG] [Thread-18821] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:21:48.001 [DEBUG] [Thread-18821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:21:48.001 [DEBUG] [Thread-18821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:21:48.001 [DEBUG] [Thread-18821] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:21:48.001 [DEBUG] [Thread-18821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:21:48.001 [DEBUG] [Thread-18821] [transport.py] [_log()] Compression: none
2026-04-15T12:21:48.001 [DEBUG] [Thread-18821] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:21:48.055 [DEBUG] [Thread-18821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:21:48.056 [DEBUG] [Thread-18821] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:21:48.056 [DEBUG] [Thread-18821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:21:48.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:21:48.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:21:48.112 [DEBUG] [Thread-18821] [transport.py] [_log()] userauth is OK
2026-04-15T12:21:48.112 [DEBUG] [Thread-18821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:21:48.113 [DEBUG] [Thread-18821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:21:48.113 [DEBUG] [Thread-18821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:21:48.113 [DEBUG] [Thread-18821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:21:48.140 [INFO] [Thread-18821] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:21:48.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:21:48.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:21:48.984 [DEBUG] [Thread-18821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:21:48.984 [DEBUG] [Thread-18821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:21:49.032 [DEBUG] [Thread-18821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:21:49.032 [DEBUG] [Thread-18821] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:21:49.041 [DEBUG] [Thread-18821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:21:49.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:21:49.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')
2026-04-15T12:21: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
2026-04-15T12:21:49.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:21:49.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:21:49.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:21:49.075 [DEBUG] [Thread-18821] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:21:51.905 [DEBUG] [Thread-18823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:22:06.950 [DEBUG] [Thread-18824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:22:15.120 [DEBUG] [Thread-18825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:22:19.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:22:19.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:22: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
2026-04-15T12:22:20.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 21, 44), 6.15447, 66.1469, 0.0, 24.0998, 12.9308, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:22:20.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:21:44
2026-04-15T12:22:20.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:22:21.226 [DEBUG] [Thread-18826] [transport.py] [_log()] starting thread (client mode): 0xee9e4d30
2026-04-15T12:22:21.226 [DEBUG] [Thread-18826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:22:21.242 [DEBUG] [Thread-18826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:22:21.242 [INFO] [Thread-18826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:22:21.245 [DEBUG] [Thread-18826] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:22:21.245 [DEBUG] [Thread-18826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:22:21.245 [DEBUG] [Thread-18826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:22:21.245 [DEBUG] [Thread-18826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:22:21.246 [DEBUG] [Thread-18826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:22:21.246 [DEBUG] [Thread-18826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:22:21.246 [DEBUG] [Thread-18826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:22:21.246 [DEBUG] [Thread-18826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:22:21.246 [DEBUG] [Thread-18826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:22:21.246 [DEBUG] [Thread-18826] [transport.py] [_log()] client lang: <none>
2026-04-15T12:22:21.246 [DEBUG] [Thread-18826] [transport.py] [_log()] server lang: <none>
2026-04-15T12:22:21.246 [DEBUG] [Thread-18826] [transport.py] [_log()] kex follows: False
2026-04-15T12:22:21.246 [DEBUG] [Thread-18826] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:22:21.246 [DEBUG] [Thread-18826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:22:21.246 [DEBUG] [Thread-18826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:22:21.247 [DEBUG] [Thread-18826] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:22:21.247 [DEBUG] [Thread-18826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:22:21.247 [DEBUG] [Thread-18826] [transport.py] [_log()] Compression: none
2026-04-15T12:22:21.247 [DEBUG] [Thread-18826] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:22:21.263 [DEBUG] [Thread-18826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:22:21.263 [DEBUG] [Thread-18826] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:22:21.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:22:21.264 [DEBUG] [Thread-18826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:22:21.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:22:21.265 [DEBUG] [Thread-18826] [transport.py] [_log()] userauth is OK
2026-04-15T12:22:21.265 [DEBUG] [Thread-18826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:22:21.265 [DEBUG] [Thread-18826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:22:21.265 [DEBUG] [Thread-18826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:22:21.265 [DEBUG] [Thread-18826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:22:21.281 [INFO] [Thread-18826] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:22:21.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:22:21.851 [DEBUG] [Thread-18826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:22:21.851 [DEBUG] [Thread-18826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:22:21.852 [DEBUG] [Thread-18826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:22:21.892 [DEBUG] [Thread-18826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:22:21.892 [DEBUG] [Thread-18826] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:22:21.895 [DEBUG] [Thread-18826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:22:21.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:22:21.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:22:21.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:22:21.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:22:21.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:22:21.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:22:21.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:22:21.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:22:21.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:22:21.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.432083 -999.00  +12.50  24.64     73   +7.80 1 2 1 1 1   888    0 6.50 71.52 ----- 13.0 24.6 324.0 28.7 18.1 -14.8 17.4 -17.0 16.9 -14.0 17.7 -12.2
2026-04-15T12:22:21.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:22:21.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:22:21.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.432083
2026-04-15T12:22:21.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:22:21.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:22:21.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:22:21.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:22:21.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:22:21.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:21:44', tmtdew=6.15447, humidity=66.1469, cloud=0.0, wind=24.0998, temperature=12.9308, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:22:11.971', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:22:21.922 [DEBUG] [Thread-18826] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:22:21.980 [DEBUG] [Thread-18829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:22:22.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:22:22.178 [DEBUG] [Thread-18830] [transport.py] [_log()] starting thread (client mode): 0xee98ee90
2026-04-15T12:22:22.178 [DEBUG] [Thread-18830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:22:22.192 [DEBUG] [Thread-18830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:22:22.192 [INFO] [Thread-18830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:22:22.200 [DEBUG] [Thread-18830] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:22:22.200 [DEBUG] [Thread-18830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:22:22.200 [DEBUG] [Thread-18830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:22:22.200 [DEBUG] [Thread-18830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:22:22.200 [DEBUG] [Thread-18830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:22:22.200 [DEBUG] [Thread-18830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:22:22.200 [DEBUG] [Thread-18830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:22:22.200 [DEBUG] [Thread-18830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:22:22.200 [DEBUG] [Thread-18830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:22:22.201 [DEBUG] [Thread-18830] [transport.py] [_log()] client lang: <none>
2026-04-15T12:22:22.201 [DEBUG] [Thread-18830] [transport.py] [_log()] server lang: <none>
2026-04-15T12:22:22.201 [DEBUG] [Thread-18830] [transport.py] [_log()] kex follows: False
2026-04-15T12:22:22.201 [DEBUG] [Thread-18830] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:22:22.201 [DEBUG] [Thread-18830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:22:22.201 [DEBUG] [Thread-18830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:22:22.201 [DEBUG] [Thread-18830] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:22:22.201 [DEBUG] [Thread-18830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:22:22.201 [DEBUG] [Thread-18830] [transport.py] [_log()] Compression: none
2026-04-15T12:22:22.201 [DEBUG] [Thread-18830] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:22:22.255 [DEBUG] [Thread-18830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:22:22.256 [DEBUG] [Thread-18830] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:22:22.256 [DEBUG] [Thread-18830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:22:22.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:22:22.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:22:22.312 [DEBUG] [Thread-18830] [transport.py] [_log()] userauth is OK
2026-04-15T12:22:22.313 [DEBUG] [Thread-18830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:22:22.313 [DEBUG] [Thread-18830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:22:22.313 [DEBUG] [Thread-18830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:22:22.313 [DEBUG] [Thread-18830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:22:22.337 [INFO] [Thread-18830] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:22:22.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:22:22.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:22:23.159 [DEBUG] [Thread-18830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:22:23.160 [DEBUG] [Thread-18830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:22:23.207 [DEBUG] [Thread-18830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:22:23.207 [DEBUG] [Thread-18830] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:22:23.216 [DEBUG] [Thread-18830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:22:23.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:22: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')
2026-04-15T12:22:23.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
2026-04-15T12:22:23.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:22:23.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:22:23.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:22:23.250 [DEBUG] [Thread-18830] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:22:37.023 [DEBUG] [Thread-18832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:22:45.616 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:22:45.617 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:22:52.053 [DEBUG] [Thread-18833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:22:53.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:22:53.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:22:53.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:22:54.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 22, 19), 6.06563, 66.3719, 0.0, 21.2969, 12.5483, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:22:54.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:22:19
2026-04-15T12:22:54.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:22:55.325 [DEBUG] [Thread-18834] [transport.py] [_log()] starting thread (client mode): 0xf1366d70
2026-04-15T12:22:55.325 [DEBUG] [Thread-18834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:22:55.335 [DEBUG] [Thread-18834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:22:55.336 [INFO] [Thread-18834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:22:55.338 [DEBUG] [Thread-18834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:22:55.338 [DEBUG] [Thread-18834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:22:55.338 [DEBUG] [Thread-18834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:22:55.338 [DEBUG] [Thread-18834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:22:55.339 [DEBUG] [Thread-18834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:22:55.339 [DEBUG] [Thread-18834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:22:55.339 [DEBUG] [Thread-18834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:22:55.339 [DEBUG] [Thread-18834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:22:55.339 [DEBUG] [Thread-18834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:22:55.339 [DEBUG] [Thread-18834] [transport.py] [_log()] client lang: <none>
2026-04-15T12:22:55.339 [DEBUG] [Thread-18834] [transport.py] [_log()] server lang: <none>
2026-04-15T12:22:55.339 [DEBUG] [Thread-18834] [transport.py] [_log()] kex follows: False
2026-04-15T12:22:55.339 [DEBUG] [Thread-18834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:22:55.339 [DEBUG] [Thread-18834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:22:55.339 [DEBUG] [Thread-18834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:22:55.340 [DEBUG] [Thread-18834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:22:55.340 [DEBUG] [Thread-18834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:22:55.340 [DEBUG] [Thread-18834] [transport.py] [_log()] Compression: none
2026-04-15T12:22:55.340 [DEBUG] [Thread-18834] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:22:55.356 [DEBUG] [Thread-18834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:22:55.356 [DEBUG] [Thread-18834] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:22:55.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:22:55.357 [DEBUG] [Thread-18834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:22:55.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:22:55.358 [DEBUG] [Thread-18834] [transport.py] [_log()] userauth is OK
2026-04-15T12:22:55.358 [DEBUG] [Thread-18834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:22:55.358 [DEBUG] [Thread-18834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:22:55.358 [DEBUG] [Thread-18834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:22:55.358 [DEBUG] [Thread-18834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:22:55.375 [INFO] [Thread-18834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:22:55.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:22:55.930 [DEBUG] [Thread-18834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:22:55.930 [DEBUG] [Thread-18834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:22:55.931 [DEBUG] [Thread-18834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:22:55.971 [DEBUG] [Thread-18834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:22:55.971 [DEBUG] [Thread-18834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:22:55.977 [DEBUG] [Thread-18834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:22:55.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:22:55.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:22:55.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:22:55.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:22:55.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:22:55.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:22:55.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:22:55.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:22:55.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:22:55.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.432430 -999.00  +12.70  18.41     73   +7.90 1 2 1 1 1   888    0 6.28 64.01 ----- 22.8 18.4 319.0 20.9 18.1 -14.3 17.4 -16.2 17.0 -13.2 17.7 -11.4
2026-04-15T12:22:55.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:22:55.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:22:55.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.432430
2026-04-15T12:22:55.999 [DEBUG] [Thread-18834] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:22:56.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:22:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:22:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:22:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:22:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:22:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:22:19', tmtdew=6.06563, humidity=66.3719, cloud=0.0, wind=21.2969, temperature=12.5483, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:22:41.952', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:22:56.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:23:07.086 [DEBUG] [Thread-18837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:23:15.242 [DEBUG] [Thread-18838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:23:22.127 [DEBUG] [Thread-18839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:23:37.160 [DEBUG] [Thread-18840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:23:45.759 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:23:45.760 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:23:52.192 [DEBUG] [Thread-18841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:24:07.227 [DEBUG] [Thread-18842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:24:15.367 [DEBUG] [Thread-18843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:24:22.257 [DEBUG] [Thread-18844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:24:37.290 [DEBUG] [Thread-18845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:24:45.900 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:24:45.901 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:24:52.321 [DEBUG] [Thread-18846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:25:07.351 [DEBUG] [Thread-18847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:25:09.514 [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
2026-04-15T12:25:15.481 [DEBUG] [Thread-18848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:25:22.383 [DEBUG] [Thread-18849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:25:37.415 [DEBUG] [Thread-18850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:25:39.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:25:39.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:25:39.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
2026-04-15T12:25:40.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 25, 16), 5.89144, 67.2713, 0.0, 19.5145, 12.4301, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:25:40.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:25:16
2026-04-15T12:25:41.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:25:41.623 [DEBUG] [Thread-18851] [transport.py] [_log()] starting thread (client mode): 0xf1336620
2026-04-15T12:25:41.623 [DEBUG] [Thread-18851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:25:41.642 [DEBUG] [Thread-18851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:25:41.642 [INFO] [Thread-18851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] client lang: <none>
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] server lang: <none>
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] kex follows: False
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:25:41.646 [DEBUG] [Thread-18851] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:25:41.647 [DEBUG] [Thread-18851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:25:41.647 [DEBUG] [Thread-18851] [transport.py] [_log()] Compression: none
2026-04-15T12:25:41.647 [DEBUG] [Thread-18851] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:25:41.661 [DEBUG] [Thread-18851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:25:41.662 [DEBUG] [Thread-18851] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:25:41.662 [DEBUG] [Thread-18851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:25:41.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:25:41.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:25:41.663 [DEBUG] [Thread-18851] [transport.py] [_log()] userauth is OK
2026-04-15T12:25:41.663 [DEBUG] [Thread-18851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:25:41.663 [DEBUG] [Thread-18851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:25:41.664 [DEBUG] [Thread-18851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:25:41.664 [DEBUG] [Thread-18851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:25:41.689 [INFO] [Thread-18851] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:25:41.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:25:42.450 [DEBUG] [Thread-18851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:25:42.450 [DEBUG] [Thread-18851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:25:42.451 [DEBUG] [Thread-18851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:25:42.491 [DEBUG] [Thread-18851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:25:42.491 [DEBUG] [Thread-18851] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:25:42.494 [DEBUG] [Thread-18851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:25:42.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:25:42.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:25:42.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:25:42.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:25:42.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:25:42.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:25:42.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:25:42.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:25:42.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:25:42.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.433819 -999.00  +12.30  25.41     74   +7.80 1 2 1 1 1   888    0 6.29 57.78 ----- 23.0 25.4 321.0 33.2 18.1 -13.9 17.3 -15.1 16.9 -14.3 17.7 -10.9
2026-04-15T12:25:42.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:25:42.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:25:42.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.433819
2026-04-15T12:25:42.518 [DEBUG] [Thread-18851] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:25:42.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:25:42.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:25:42.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:25:42.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:25:42.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:25:42.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:25:16', tmtdew=5.89144, humidity=67.2713, cloud=0.0, wind=19.5145, temperature=12.4301, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:24:41.962', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:25:42.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:25:42.776 [DEBUG] [Thread-18854] [transport.py] [_log()] starting thread (client mode): 0xf13fe740
2026-04-15T12:25:42.776 [DEBUG] [Thread-18854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:25:42.790 [DEBUG] [Thread-18854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:25:42.791 [INFO] [Thread-18854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:25:42.798 [DEBUG] [Thread-18854] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:25:42.798 [DEBUG] [Thread-18854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:25:42.798 [DEBUG] [Thread-18854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:25:42.798 [DEBUG] [Thread-18854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:25:42.798 [DEBUG] [Thread-18854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:25:42.798 [DEBUG] [Thread-18854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:25:42.798 [DEBUG] [Thread-18854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:25:42.798 [DEBUG] [Thread-18854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:25:42.798 [DEBUG] [Thread-18854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:25:42.798 [DEBUG] [Thread-18854] [transport.py] [_log()] client lang: <none>
2026-04-15T12:25:42.798 [DEBUG] [Thread-18854] [transport.py] [_log()] server lang: <none>
2026-04-15T12:25:42.799 [DEBUG] [Thread-18854] [transport.py] [_log()] kex follows: False
2026-04-15T12:25:42.799 [DEBUG] [Thread-18854] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:25:42.799 [DEBUG] [Thread-18854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:25:42.799 [DEBUG] [Thread-18854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:25:42.799 [DEBUG] [Thread-18854] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:25:42.799 [DEBUG] [Thread-18854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:25:42.799 [DEBUG] [Thread-18854] [transport.py] [_log()] Compression: none
2026-04-15T12:25:42.799 [DEBUG] [Thread-18854] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:25:42.855 [DEBUG] [Thread-18854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:25:42.855 [DEBUG] [Thread-18854] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:25:42.855 [DEBUG] [Thread-18854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:25:42.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:25:42.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:25:42.912 [DEBUG] [Thread-18854] [transport.py] [_log()] userauth is OK
2026-04-15T12:25:42.912 [DEBUG] [Thread-18854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:25:42.912 [DEBUG] [Thread-18854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:25:42.912 [DEBUG] [Thread-18854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:25:42.912 [DEBUG] [Thread-18854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:25:42.936 [INFO] [Thread-18854] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:25:42.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:25:42.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:25:43.824 [DEBUG] [Thread-18854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:25:43.824 [DEBUG] [Thread-18854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:25:43.872 [DEBUG] [Thread-18854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:25:43.872 [DEBUG] [Thread-18854] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:25:43.881 [DEBUG] [Thread-18854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:25:43.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:25:43.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')
2026-04-15T12:25:43.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
2026-04-15T12:25:43.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:25:43.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:25:43.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:25:43.921 [DEBUG] [Thread-18854] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:25:46.042 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:25:46.043 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:25:52.444 [DEBUG] [Thread-18856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:26:07.489 [DEBUG] [Thread-18857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:26:13.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:26:13.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:26:13.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
2026-04-15T12:26:15.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 25, 52), 6.13046, 66.2767, 0.0, 18.5256, 13.0276, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:26:15.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:25:52
2026-04-15T12:26:15.605 [DEBUG] [Thread-18858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:26:15.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:26:16.129 [DEBUG] [Thread-18859] [transport.py] [_log()] starting thread (client mode): 0xf13ff400
2026-04-15T12:26:16.129 [DEBUG] [Thread-18859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:26:16.148 [DEBUG] [Thread-18859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:26:16.148 [INFO] [Thread-18859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:26:16.151 [DEBUG] [Thread-18859] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:26:16.152 [DEBUG] [Thread-18859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:26:16.152 [DEBUG] [Thread-18859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:26:16.152 [DEBUG] [Thread-18859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:26:16.152 [DEBUG] [Thread-18859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:26:16.152 [DEBUG] [Thread-18859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:26:16.152 [DEBUG] [Thread-18859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:26:16.152 [DEBUG] [Thread-18859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:26:16.152 [DEBUG] [Thread-18859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:26:16.152 [DEBUG] [Thread-18859] [transport.py] [_log()] client lang: <none>
2026-04-15T12:26:16.152 [DEBUG] [Thread-18859] [transport.py] [_log()] server lang: <none>
2026-04-15T12:26:16.152 [DEBUG] [Thread-18859] [transport.py] [_log()] kex follows: False
2026-04-15T12:26:16.153 [DEBUG] [Thread-18859] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:26:16.153 [DEBUG] [Thread-18859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:26:16.153 [DEBUG] [Thread-18859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:26:16.153 [DEBUG] [Thread-18859] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:26:16.153 [DEBUG] [Thread-18859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:26:16.153 [DEBUG] [Thread-18859] [transport.py] [_log()] Compression: none
2026-04-15T12:26:16.153 [DEBUG] [Thread-18859] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:26:16.168 [DEBUG] [Thread-18859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:26:16.168 [DEBUG] [Thread-18859] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:26:16.169 [DEBUG] [Thread-18859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:26:16.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:26:16.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:26:16.170 [DEBUG] [Thread-18859] [transport.py] [_log()] userauth is OK
2026-04-15T12:26:16.170 [DEBUG] [Thread-18859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:26:16.170 [DEBUG] [Thread-18859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:26:16.170 [DEBUG] [Thread-18859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:26:16.171 [DEBUG] [Thread-18859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:26:16.194 [INFO] [Thread-18859] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:26:16.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:26:16.967 [DEBUG] [Thread-18859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:26:16.967 [DEBUG] [Thread-18859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:26:16.967 [DEBUG] [Thread-18859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:26:17.007 [DEBUG] [Thread-18859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:26:17.008 [DEBUG] [Thread-18859] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:26:17.010 [DEBUG] [Thread-18859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:26:17.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:26:17.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:26:17.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:26:17.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:26:17.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:26:17.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:26:17.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:26:17.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:26:17.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:26:17.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.434513 -999.00  +12.30  17.57     74   +8.00 1 2 1 1 1   888    0 5.95 48.54 ----- 18.9 17.6 297.2 22.8 18.0 -13.6 17.3 -14.2 16.9 -10.9 17.6 -10.5
2026-04-15T12:26:17.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:26:17.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:26:17.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.434513
2026-04-15T12:26:17.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:26:17.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:26:17.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:26:17.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:26:17.031 [DEBUG] [Thread-18859] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:26:17.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:26:17.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:25:52', tmtdew=6.13046, humidity=66.2767, cloud=0.0, wind=18.5256, temperature=13.0276, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:25:41.923', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:26:17.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:26:17.246 [DEBUG] [Thread-18862] [transport.py] [_log()] starting thread (client mode): 0xee989c00
2026-04-15T12:26:17.246 [DEBUG] [Thread-18862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:26:17.260 [DEBUG] [Thread-18862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:26:17.260 [INFO] [Thread-18862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:26:17.267 [DEBUG] [Thread-18862] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:26:17.267 [DEBUG] [Thread-18862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:26:17.267 [DEBUG] [Thread-18862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:26:17.267 [DEBUG] [Thread-18862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:26:17.268 [DEBUG] [Thread-18862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:26:17.268 [DEBUG] [Thread-18862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:26:17.268 [DEBUG] [Thread-18862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:26:17.268 [DEBUG] [Thread-18862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:26:17.268 [DEBUG] [Thread-18862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:26:17.268 [DEBUG] [Thread-18862] [transport.py] [_log()] client lang: <none>
2026-04-15T12:26:17.268 [DEBUG] [Thread-18862] [transport.py] [_log()] server lang: <none>
2026-04-15T12:26:17.268 [DEBUG] [Thread-18862] [transport.py] [_log()] kex follows: False
2026-04-15T12:26:17.268 [DEBUG] [Thread-18862] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:26:17.268 [DEBUG] [Thread-18862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:26:17.268 [DEBUG] [Thread-18862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:26:17.269 [DEBUG] [Thread-18862] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:26:17.269 [DEBUG] [Thread-18862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:26:17.269 [DEBUG] [Thread-18862] [transport.py] [_log()] Compression: none
2026-04-15T12:26:17.269 [DEBUG] [Thread-18862] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:26:17.323 [DEBUG] [Thread-18862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:26:17.323 [DEBUG] [Thread-18862] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:26:17.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:26:17.324 [DEBUG] [Thread-18862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:26:17.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:26:17.379 [DEBUG] [Thread-18862] [transport.py] [_log()] userauth is OK
2026-04-15T12:26:17.380 [DEBUG] [Thread-18862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:26:17.380 [DEBUG] [Thread-18862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:26:17.380 [DEBUG] [Thread-18862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:26:17.380 [DEBUG] [Thread-18862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:26:17.404 [INFO] [Thread-18862] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:26:17.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:26:17.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:26:18.215 [DEBUG] [Thread-18862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:26:18.215 [DEBUG] [Thread-18862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:26:18.263 [DEBUG] [Thread-18862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:26:18.263 [DEBUG] [Thread-18862] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:26:18.272 [DEBUG] [Thread-18862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:26:18.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:26:18.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')
2026-04-15T12:26:18.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') -> 00000000
2026-04-15T12:26:18.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:26:18.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:26:18.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:26:18.306 [DEBUG] [Thread-18862] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:26:22.522 [DEBUG] [Thread-18864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:26:37.566 [DEBUG] [Thread-18865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:26:46.183 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:26:46.185 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:26:48.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:26:48.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:26:48.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
2026-04-15T12:26:49.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 26, 27), 5.72993, 67.9838, 0.0, 15.3515, 12.2306, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:26:49.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:26:27
2026-04-15T12:26:49.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:26:50.423 [DEBUG] [Thread-18866] [transport.py] [_log()] starting thread (client mode): 0xf13e2380
2026-04-15T12:26:50.423 [DEBUG] [Thread-18866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:26:50.442 [DEBUG] [Thread-18866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:26:50.443 [INFO] [Thread-18866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:26:50.446 [DEBUG] [Thread-18866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:26:50.446 [DEBUG] [Thread-18866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:26:50.446 [DEBUG] [Thread-18866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:26:50.446 [DEBUG] [Thread-18866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:26:50.446 [DEBUG] [Thread-18866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:26:50.446 [DEBUG] [Thread-18866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:26:50.446 [DEBUG] [Thread-18866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:26:50.446 [DEBUG] [Thread-18866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:26:50.446 [DEBUG] [Thread-18866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:26:50.446 [DEBUG] [Thread-18866] [transport.py] [_log()] client lang: <none>
2026-04-15T12:26:50.446 [DEBUG] [Thread-18866] [transport.py] [_log()] server lang: <none>
2026-04-15T12:26:50.447 [DEBUG] [Thread-18866] [transport.py] [_log()] kex follows: False
2026-04-15T12:26:50.447 [DEBUG] [Thread-18866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:26:50.447 [DEBUG] [Thread-18866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:26:50.447 [DEBUG] [Thread-18866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:26:50.447 [DEBUG] [Thread-18866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:26:50.447 [DEBUG] [Thread-18866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:26:50.447 [DEBUG] [Thread-18866] [transport.py] [_log()] Compression: none
2026-04-15T12:26:50.447 [DEBUG] [Thread-18866] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:26:50.464 [DEBUG] [Thread-18866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:26:50.465 [DEBUG] [Thread-18866] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:26:50.465 [DEBUG] [Thread-18866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:26:50.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:26:50.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:26:50.466 [DEBUG] [Thread-18866] [transport.py] [_log()] userauth is OK
2026-04-15T12:26:50.467 [DEBUG] [Thread-18866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:26:50.467 [DEBUG] [Thread-18866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:26:50.467 [DEBUG] [Thread-18866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:26:50.467 [DEBUG] [Thread-18866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:26:50.491 [INFO] [Thread-18866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:26:50.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:26:51.296 [DEBUG] [Thread-18866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:26:51.296 [DEBUG] [Thread-18866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:26:51.296 [DEBUG] [Thread-18866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:26:51.337 [DEBUG] [Thread-18866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:26:51.337 [DEBUG] [Thread-18866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:26:51.339 [DEBUG] [Thread-18866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:26:51.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:26:51.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:26:51.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:26:51.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:26:51.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:26:51.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:26:51.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:26:51.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:26:51.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:26:51.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.434861 -999.00  +12.20  16.62     73   +7.60 1 2 1 1 1   888    0 5.91 50.20 ----- 13.3 16.6 291.8 23.1 18.0 -13.9 17.3 -14.1 16.9 -10.6 17.6 -10.6
2026-04-15T12:26:51.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:26:51.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:26:51.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.434861
2026-04-15T12:26:51.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:26:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:26:51.357 [DEBUG] [Thread-18866] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:26:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:26:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:26:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:26:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:26:27', tmtdew=5.72993, humidity=67.9838, cloud=0.0, wind=15.3515, temperature=12.2306, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:26:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:26:51.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:26:51.568 [DEBUG] [Thread-18869] [transport.py] [_log()] starting thread (client mode): 0xf13fe410
2026-04-15T12:26:51.568 [DEBUG] [Thread-18869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:26:51.583 [DEBUG] [Thread-18869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:26:51.583 [INFO] [Thread-18869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:26:51.590 [DEBUG] [Thread-18869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:26:51.590 [DEBUG] [Thread-18869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:26:51.590 [DEBUG] [Thread-18869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:26:51.590 [DEBUG] [Thread-18869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:26:51.590 [DEBUG] [Thread-18869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:26:51.590 [DEBUG] [Thread-18869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:26:51.590 [DEBUG] [Thread-18869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:26:51.591 [DEBUG] [Thread-18869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:26:51.591 [DEBUG] [Thread-18869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:26:51.591 [DEBUG] [Thread-18869] [transport.py] [_log()] client lang: <none>
2026-04-15T12:26:51.591 [DEBUG] [Thread-18869] [transport.py] [_log()] server lang: <none>
2026-04-15T12:26:51.591 [DEBUG] [Thread-18869] [transport.py] [_log()] kex follows: False
2026-04-15T12:26:51.591 [DEBUG] [Thread-18869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:26:51.591 [DEBUG] [Thread-18869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:26:51.591 [DEBUG] [Thread-18869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:26:51.591 [DEBUG] [Thread-18869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:26:51.591 [DEBUG] [Thread-18869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:26:51.591 [DEBUG] [Thread-18869] [transport.py] [_log()] Compression: none
2026-04-15T12:26:51.591 [DEBUG] [Thread-18869] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:26:51.647 [DEBUG] [Thread-18869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:26:51.648 [DEBUG] [Thread-18869] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:26:51.648 [DEBUG] [Thread-18869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:26:51.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:26:51.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:26:51.703 [DEBUG] [Thread-18869] [transport.py] [_log()] userauth is OK
2026-04-15T12:26:51.704 [DEBUG] [Thread-18869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:26:51.704 [DEBUG] [Thread-18869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:26:51.704 [DEBUG] [Thread-18869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:26:51.704 [DEBUG] [Thread-18869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:26:51.729 [INFO] [Thread-18869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:26:51.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:26:51.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:26:52.560 [DEBUG] [Thread-18869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:26:52.561 [DEBUG] [Thread-18869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:26:52.600 [DEBUG] [Thread-18871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:26:52.608 [DEBUG] [Thread-18869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:26:52.608 [DEBUG] [Thread-18869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:26:52.616 [DEBUG] [Thread-18869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:26:52.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:26:52.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')
2026-04-15T12:26:52.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
2026-04-15T12:26:52.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:26:52.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:26:52.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:26:52.651 [DEBUG] [Thread-18869] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:27:07.642 [DEBUG] [Thread-18872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:27:15.715 [DEBUG] [Thread-18873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:27:22.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:27:22.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:27:22.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
2026-04-15T12:27:22.671 [DEBUG] [Thread-18874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:27:23.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 27, 3), 5.64838, 68.3983, 0.0, 16.5686, 12.3964, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:27:23.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:27:03
2026-04-15T12:27:24.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:27:24.769 [DEBUG] [Thread-18875] [transport.py] [_log()] starting thread (client mode): 0xee9898a0
2026-04-15T12:27:24.769 [DEBUG] [Thread-18875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:27:24.790 [DEBUG] [Thread-18875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:27:24.790 [INFO] [Thread-18875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:27:24.794 [DEBUG] [Thread-18875] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:27:24.794 [DEBUG] [Thread-18875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:27:24.794 [DEBUG] [Thread-18875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:27:24.794 [DEBUG] [Thread-18875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:27:24.794 [DEBUG] [Thread-18875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:27:24.794 [DEBUG] [Thread-18875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:27:24.794 [DEBUG] [Thread-18875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:27:24.794 [DEBUG] [Thread-18875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:27:24.794 [DEBUG] [Thread-18875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:27:24.794 [DEBUG] [Thread-18875] [transport.py] [_log()] client lang: <none>
2026-04-15T12:27:24.795 [DEBUG] [Thread-18875] [transport.py] [_log()] server lang: <none>
2026-04-15T12:27:24.795 [DEBUG] [Thread-18875] [transport.py] [_log()] kex follows: False
2026-04-15T12:27:24.795 [DEBUG] [Thread-18875] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:27:24.795 [DEBUG] [Thread-18875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:27:24.795 [DEBUG] [Thread-18875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:27:24.795 [DEBUG] [Thread-18875] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:27:24.795 [DEBUG] [Thread-18875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:27:24.795 [DEBUG] [Thread-18875] [transport.py] [_log()] Compression: none
2026-04-15T12:27:24.795 [DEBUG] [Thread-18875] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:27:24.812 [DEBUG] [Thread-18875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:27:24.812 [DEBUG] [Thread-18875] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:27:24.813 [DEBUG] [Thread-18875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:27:24.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:27:24.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:27:24.814 [DEBUG] [Thread-18875] [transport.py] [_log()] userauth is OK
2026-04-15T12:27:24.814 [DEBUG] [Thread-18875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:27:24.814 [DEBUG] [Thread-18875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:27:24.814 [DEBUG] [Thread-18875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:27:24.815 [DEBUG] [Thread-18875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:27:24.831 [INFO] [Thread-18875] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:27:24.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:27:25.585 [DEBUG] [Thread-18875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:27:25.585 [DEBUG] [Thread-18875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:27:25.585 [DEBUG] [Thread-18875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:27:25.626 [DEBUG] [Thread-18875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:27:25.626 [DEBUG] [Thread-18875] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:27:25.629 [DEBUG] [Thread-18875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:27:25.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:27:25.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:27:25.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:27:25.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:27:25.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:27:25.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:27:25.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:27:25.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:27:25.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:27:25.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.435197 -999.00  +12.30  17.24     74   +7.90 1 2 1 1 1   888    0 5.98 48.80 ----- 28.1 17.2 304.4 21.2 18.0 -13.1 17.3 -13.6 16.9 -10.5 17.8 -9.8
2026-04-15T12:27:25.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:27:25.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:27:25.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.435197
2026-04-15T12:27:25.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:27:25.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:27:25.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:27:25.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:27:25.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:27:25.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:27:03', tmtdew=5.64838, humidity=68.3983, cloud=0.0, wind=16.5686, temperature=12.3964, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:26:41.021', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:27:25.653 [DEBUG] [Thread-18875] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:27:25.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:27:25.902 [DEBUG] [Thread-18878] [transport.py] [_log()] starting thread (client mode): 0xee9e5690
2026-04-15T12:27:25.902 [DEBUG] [Thread-18878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:27:25.917 [DEBUG] [Thread-18878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:27:25.917 [INFO] [Thread-18878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:27:25.924 [DEBUG] [Thread-18878] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:27:25.924 [DEBUG] [Thread-18878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:27:25.924 [DEBUG] [Thread-18878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:27:25.924 [DEBUG] [Thread-18878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:27:25.924 [DEBUG] [Thread-18878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:27:25.924 [DEBUG] [Thread-18878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:27:25.925 [DEBUG] [Thread-18878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:27:25.925 [DEBUG] [Thread-18878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:27:25.925 [DEBUG] [Thread-18878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:27:25.925 [DEBUG] [Thread-18878] [transport.py] [_log()] client lang: <none>
2026-04-15T12:27:25.925 [DEBUG] [Thread-18878] [transport.py] [_log()] server lang: <none>
2026-04-15T12:27:25.925 [DEBUG] [Thread-18878] [transport.py] [_log()] kex follows: False
2026-04-15T12:27:25.925 [DEBUG] [Thread-18878] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:27:25.925 [DEBUG] [Thread-18878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:27:25.925 [DEBUG] [Thread-18878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:27:25.925 [DEBUG] [Thread-18878] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:27:25.926 [DEBUG] [Thread-18878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:27:25.926 [DEBUG] [Thread-18878] [transport.py] [_log()] Compression: none
2026-04-15T12:27:25.926 [DEBUG] [Thread-18878] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:27:25.983 [DEBUG] [Thread-18878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:27:25.984 [DEBUG] [Thread-18878] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:27:25.984 [DEBUG] [Thread-18878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:27:25.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:27:25.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:27:26.039 [DEBUG] [Thread-18878] [transport.py] [_log()] userauth is OK
2026-04-15T12:27:26.039 [DEBUG] [Thread-18878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:27:26.040 [DEBUG] [Thread-18878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:27:26.040 [DEBUG] [Thread-18878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:27:26.040 [DEBUG] [Thread-18878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:27:26.065 [INFO] [Thread-18878] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:27:26.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:27:26.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:27:26.907 [DEBUG] [Thread-18878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:27:26.908 [DEBUG] [Thread-18878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:27:26.955 [DEBUG] [Thread-18878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:27:26.955 [DEBUG] [Thread-18878] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:27:26.964 [DEBUG] [Thread-18878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:27:26.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:27: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')
2026-04-15T12:27:26.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') -> 00000000
2026-04-15T12:27:26.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:27:26.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:27:26.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:27:26.998 [DEBUG] [Thread-18878] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:27:37.703 [DEBUG] [Thread-18880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:27:46.326 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:27:46.327 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:27:52.748 [DEBUG] [Thread-18881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:27:57.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:27:57.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:27:57.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
2026-04-15T12:27:58.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 27, 39), 5.9803, 67.0388, 0.0, 21.348, 13.3918, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:27:58.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:27:39
2026-04-15T12:27:58.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:27:59.083 [DEBUG] [Thread-18882] [transport.py] [_log()] starting thread (client mode): 0xf13e1f90
2026-04-15T12:27:59.083 [DEBUG] [Thread-18882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:27:59.103 [DEBUG] [Thread-18882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:27:59.103 [INFO] [Thread-18882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:27:59.107 [DEBUG] [Thread-18882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:27:59.107 [DEBUG] [Thread-18882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:27:59.107 [DEBUG] [Thread-18882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:27:59.107 [DEBUG] [Thread-18882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:27:59.107 [DEBUG] [Thread-18882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:27:59.108 [DEBUG] [Thread-18882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:27:59.108 [DEBUG] [Thread-18882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:27:59.108 [DEBUG] [Thread-18882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:27:59.108 [DEBUG] [Thread-18882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:27:59.108 [DEBUG] [Thread-18882] [transport.py] [_log()] client lang: <none>
2026-04-15T12:27:59.108 [DEBUG] [Thread-18882] [transport.py] [_log()] server lang: <none>
2026-04-15T12:27:59.108 [DEBUG] [Thread-18882] [transport.py] [_log()] kex follows: False
2026-04-15T12:27:59.108 [DEBUG] [Thread-18882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:27:59.108 [DEBUG] [Thread-18882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:27:59.108 [DEBUG] [Thread-18882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:27:59.108 [DEBUG] [Thread-18882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:27:59.108 [DEBUG] [Thread-18882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:27:59.109 [DEBUG] [Thread-18882] [transport.py] [_log()] Compression: none
2026-04-15T12:27:59.109 [DEBUG] [Thread-18882] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:27:59.122 [DEBUG] [Thread-18882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:27:59.122 [DEBUG] [Thread-18882] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:27:59.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:27:59.123 [DEBUG] [Thread-18882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:27:59.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:27:59.164 [DEBUG] [Thread-18882] [transport.py] [_log()] userauth is OK
2026-04-15T12:27:59.165 [DEBUG] [Thread-18882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:27:59.165 [DEBUG] [Thread-18882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:27:59.165 [DEBUG] [Thread-18882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:27:59.165 [DEBUG] [Thread-18882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:27:59.200 [INFO] [Thread-18882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:27:59.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:28:00.000 [DEBUG] [Thread-18882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:28:00.001 [DEBUG] [Thread-18882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:28:00.001 [DEBUG] [Thread-18882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:28:00.041 [DEBUG] [Thread-18882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:28:00.042 [DEBUG] [Thread-18882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:28:00.044 [DEBUG] [Thread-18882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:28:00.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:28:00.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:28:00.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:28:00.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:28:00.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:28:00.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:28:00.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:28:00.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:28:00.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:28:00.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.435555 -999.00  +12.10  28.69     74   +7.70 1 2 1 1 1   888    0 5.97 47.24 ----- 23.5 28.7 309.0 32.4 18.2 -10.9 17.4 -14.2 16.9 -11.5 17.9 -8.0
2026-04-15T12:28:00.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:28:00.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:28:00.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.435555
2026-04-15T12:28:00.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:28:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:28:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:28:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:28:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:28:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:27:39', tmtdew=5.9803, humidity=67.0388, cloud=0.0, wind=21.348, temperature=13.3918, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:27:11.952', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:28:00.064 [DEBUG] [Thread-18882] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:28:00.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:28:00.279 [DEBUG] [Thread-18885] [transport.py] [_log()] starting thread (client mode): 0xf13c8100
2026-04-15T12:28:00.279 [DEBUG] [Thread-18885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:28:00.293 [DEBUG] [Thread-18885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:28:00.293 [INFO] [Thread-18885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] client lang: <none>
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] server lang: <none>
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] kex follows: False
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:28:00.301 [DEBUG] [Thread-18885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:28:00.302 [DEBUG] [Thread-18885] [transport.py] [_log()] Compression: none
2026-04-15T12:28:00.302 [DEBUG] [Thread-18885] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:28:00.359 [DEBUG] [Thread-18885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:28:00.359 [DEBUG] [Thread-18885] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:28:00.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:28:00.359 [DEBUG] [Thread-18885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:28:00.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:28:00.415 [DEBUG] [Thread-18885] [transport.py] [_log()] userauth is OK
2026-04-15T12:28:00.415 [DEBUG] [Thread-18885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:28:00.415 [DEBUG] [Thread-18885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:28:00.415 [DEBUG] [Thread-18885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:28:00.415 [DEBUG] [Thread-18885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:28:00.433 [INFO] [Thread-18885] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:28:00.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:28:00.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:28:01.276 [DEBUG] [Thread-18885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:28:01.276 [DEBUG] [Thread-18885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:28:01.324 [DEBUG] [Thread-18885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:28:01.324 [DEBUG] [Thread-18885] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:28:01.334 [DEBUG] [Thread-18885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:28:01.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:28:01.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')
2026-04-15T12:28:01.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
2026-04-15T12:28:01.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:28:01.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:28:01.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:28:01.369 [DEBUG] [Thread-18885] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:28:07.778 [DEBUG] [Thread-18887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:28:15.829 [DEBUG] [Thread-18888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:28:22.815 [DEBUG] [Thread-18889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:28:31.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:28:31.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:28:31.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:28:32.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 28, 14), 5.90152, 67.5056, 0.0, 19.3036, 12.5128, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:28:32.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:28:14
2026-04-15T12:28:33.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:28:33.526 [DEBUG] [Thread-18890] [transport.py] [_log()] starting thread (client mode): 0xee906740
2026-04-15T12:28:33.526 [DEBUG] [Thread-18890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:28:33.546 [DEBUG] [Thread-18890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:28:33.546 [INFO] [Thread-18890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:28:33.549 [DEBUG] [Thread-18890] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:28:33.550 [DEBUG] [Thread-18890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:28:33.550 [DEBUG] [Thread-18890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:28:33.550 [DEBUG] [Thread-18890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:28:33.550 [DEBUG] [Thread-18890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:28:33.550 [DEBUG] [Thread-18890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:28:33.550 [DEBUG] [Thread-18890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:28:33.550 [DEBUG] [Thread-18890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:28:33.550 [DEBUG] [Thread-18890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:28:33.550 [DEBUG] [Thread-18890] [transport.py] [_log()] client lang: <none>
2026-04-15T12:28:33.550 [DEBUG] [Thread-18890] [transport.py] [_log()] server lang: <none>
2026-04-15T12:28:33.550 [DEBUG] [Thread-18890] [transport.py] [_log()] kex follows: False
2026-04-15T12:28:33.551 [DEBUG] [Thread-18890] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:28:33.551 [DEBUG] [Thread-18890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:28:33.551 [DEBUG] [Thread-18890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:28:33.551 [DEBUG] [Thread-18890] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:28:33.551 [DEBUG] [Thread-18890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:28:33.551 [DEBUG] [Thread-18890] [transport.py] [_log()] Compression: none
2026-04-15T12:28:33.551 [DEBUG] [Thread-18890] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:28:33.569 [DEBUG] [Thread-18890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:28:33.570 [DEBUG] [Thread-18890] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:28:33.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:28:33.570 [DEBUG] [Thread-18890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:28:33.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:28:33.571 [DEBUG] [Thread-18890] [transport.py] [_log()] userauth is OK
2026-04-15T12:28:33.571 [DEBUG] [Thread-18890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:28:33.571 [DEBUG] [Thread-18890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:28:33.571 [DEBUG] [Thread-18890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:28:33.571 [DEBUG] [Thread-18890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:28:33.606 [INFO] [Thread-18890] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:28:33.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:28:34.387 [DEBUG] [Thread-18890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:28:34.387 [DEBUG] [Thread-18890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:28:34.388 [DEBUG] [Thread-18890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:28:34.429 [DEBUG] [Thread-18890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:28:34.429 [DEBUG] [Thread-18890] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:28:34.431 [DEBUG] [Thread-18890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:28:34.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:28:34.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:28:34.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:28:34.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:28:34.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:28:34.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:28:34.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:28:34.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:28:34.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:28:34.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.435902 -999.00  +12.20  19.48     74   +7.70 1 2 1 1 1   888    0 5.92 48.06 ----- 19.6 19.5 304.8 25.1 18.2 -13.5 17.4 -13.7 17.0 -10.3 17.8 -10.3
2026-04-15T12:28:34.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:28:34.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:28:34.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.435902
2026-04-15T12:28:34.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:28:34.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:28:34.461 [DEBUG] [Thread-18890] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:28:34.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:28:34.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:28:34.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:28:34.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:28:14', tmtdew=5.90152, humidity=67.5056, cloud=0.0, wind=19.3036, temperature=12.5128, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:27:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:28:34.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:28:34.671 [DEBUG] [Thread-18893] [transport.py] [_log()] starting thread (client mode): 0xf13e3eb0
2026-04-15T12:28:34.671 [DEBUG] [Thread-18893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:28:34.685 [DEBUG] [Thread-18893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:28:34.685 [INFO] [Thread-18893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:28:34.693 [DEBUG] [Thread-18893] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:28:34.694 [DEBUG] [Thread-18893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:28:34.695 [DEBUG] [Thread-18893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:28:34.696 [DEBUG] [Thread-18893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:28:34.696 [DEBUG] [Thread-18893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:28:34.696 [DEBUG] [Thread-18893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:28:34.696 [DEBUG] [Thread-18893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:28:34.696 [DEBUG] [Thread-18893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:28:34.696 [DEBUG] [Thread-18893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:28:34.696 [DEBUG] [Thread-18893] [transport.py] [_log()] client lang: <none>
2026-04-15T12:28:34.696 [DEBUG] [Thread-18893] [transport.py] [_log()] server lang: <none>
2026-04-15T12:28:34.696 [DEBUG] [Thread-18893] [transport.py] [_log()] kex follows: False
2026-04-15T12:28:34.696 [DEBUG] [Thread-18893] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:28:34.696 [DEBUG] [Thread-18893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:28:34.696 [DEBUG] [Thread-18893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:28:34.697 [DEBUG] [Thread-18893] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:28:34.697 [DEBUG] [Thread-18893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:28:34.697 [DEBUG] [Thread-18893] [transport.py] [_log()] Compression: none
2026-04-15T12:28:34.697 [DEBUG] [Thread-18893] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:28:34.751 [DEBUG] [Thread-18893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:28:34.751 [DEBUG] [Thread-18893] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:28:34.752 [DEBUG] [Thread-18893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:28:34.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:28:34.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:28:34.809 [DEBUG] [Thread-18893] [transport.py] [_log()] userauth is OK
2026-04-15T12:28:34.810 [DEBUG] [Thread-18893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:28:34.810 [DEBUG] [Thread-18893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:28:34.810 [DEBUG] [Thread-18893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:28:34.810 [DEBUG] [Thread-18893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:28:34.833 [INFO] [Thread-18893] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:28:34.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:28:34.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:28:35.667 [DEBUG] [Thread-18893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:28:35.667 [DEBUG] [Thread-18893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:28:35.715 [DEBUG] [Thread-18893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:28:35.715 [DEBUG] [Thread-18893] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:28:35.724 [DEBUG] [Thread-18893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:28:35.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:28:35.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')
2026-04-15T12:28:35.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
2026-04-15T12:28:35.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:28:35.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:28:35.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:28:35.757 [DEBUG] [Thread-18893] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:28:37.847 [DEBUG] [Thread-18895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:28:46.467 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:28:46.468 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:28:52.892 [DEBUG] [Thread-18896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:29:05.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:29:05.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:29:05.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
2026-04-15T12:29:07.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 28, 50), 6.05854, 66.6743, 0.0, 23.0414, 13.3588, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:29:07.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:28:50
2026-04-15T12:29:07.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:29:07.922 [DEBUG] [Thread-18897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:29:07.926 [DEBUG] [Thread-18898] [transport.py] [_log()] starting thread (client mode): 0xf13fdc00
2026-04-15T12:29:07.926 [DEBUG] [Thread-18898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:29:07.946 [DEBUG] [Thread-18898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:29:07.947 [INFO] [Thread-18898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:29:07.948 [DEBUG] [Thread-18898] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:29:07.948 [DEBUG] [Thread-18898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:29:07.948 [DEBUG] [Thread-18898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:29:07.948 [DEBUG] [Thread-18898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:29:07.948 [DEBUG] [Thread-18898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:29:07.948 [DEBUG] [Thread-18898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:29:07.949 [DEBUG] [Thread-18898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:29:07.949 [DEBUG] [Thread-18898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:29:07.949 [DEBUG] [Thread-18898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:29:07.949 [DEBUG] [Thread-18898] [transport.py] [_log()] client lang: <none>
2026-04-15T12:29:07.949 [DEBUG] [Thread-18898] [transport.py] [_log()] server lang: <none>
2026-04-15T12:29:07.949 [DEBUG] [Thread-18898] [transport.py] [_log()] kex follows: False
2026-04-15T12:29:07.949 [DEBUG] [Thread-18898] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:29:07.949 [DEBUG] [Thread-18898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:29:07.949 [DEBUG] [Thread-18898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:29:07.949 [DEBUG] [Thread-18898] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:29:07.949 [DEBUG] [Thread-18898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:29:07.950 [DEBUG] [Thread-18898] [transport.py] [_log()] Compression: none
2026-04-15T12:29:07.950 [DEBUG] [Thread-18898] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:29:07.964 [DEBUG] [Thread-18898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:29:07.965 [DEBUG] [Thread-18898] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:29:07.965 [DEBUG] [Thread-18898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:29:07.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:29:07.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:29:07.966 [DEBUG] [Thread-18898] [transport.py] [_log()] userauth is OK
2026-04-15T12:29:07.967 [DEBUG] [Thread-18898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:29:07.967 [DEBUG] [Thread-18898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:29:07.967 [DEBUG] [Thread-18898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:29:07.967 [DEBUG] [Thread-18898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:29:07.984 [INFO] [Thread-18898] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:29:07.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:29:08.694 [DEBUG] [Thread-18898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:29:08.695 [DEBUG] [Thread-18898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:29:08.695 [DEBUG] [Thread-18898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:29:08.735 [DEBUG] [Thread-18898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:29:08.735 [DEBUG] [Thread-18898] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:29:08.739 [DEBUG] [Thread-18898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:29:08.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:29:08.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:29:08.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:29:08.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:29:08.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:29:08.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:29:08.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:29:08.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:29:08.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:29:08.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.436597 -999.00  +12.30  16.17     75   +8.10 1 3 1 1 1   888    0 5.64 37.56 ----- 15.0 16.2 315.8 23.1 18.2 -10.4 17.3 -10.7 16.9 -9.0 17.9 -8.3
2026-04-15T12:29:08.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:29:08.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:29:08.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.436597
2026-04-15T12:29:08.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:29:08.762 [DEBUG] [Thread-18898] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:29:08.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:29:08.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:29:08.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:29:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:29:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:28:50', tmtdew=6.05854, humidity=66.6743, cloud=0.0, wind=23.0414, temperature=13.3588, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:28:41.981', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:29:09.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:29:09.016 [DEBUG] [Thread-18901] [transport.py] [_log()] starting thread (client mode): 0xf13e02b0
2026-04-15T12:29:09.016 [DEBUG] [Thread-18901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:29:09.030 [DEBUG] [Thread-18901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:29:09.030 [INFO] [Thread-18901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:29:09.038 [DEBUG] [Thread-18901] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:29:09.038 [DEBUG] [Thread-18901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:29:09.038 [DEBUG] [Thread-18901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:29:09.038 [DEBUG] [Thread-18901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:29:09.038 [DEBUG] [Thread-18901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:29:09.038 [DEBUG] [Thread-18901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:29:09.038 [DEBUG] [Thread-18901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:29:09.038 [DEBUG] [Thread-18901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:29:09.039 [DEBUG] [Thread-18901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:29:09.039 [DEBUG] [Thread-18901] [transport.py] [_log()] client lang: <none>
2026-04-15T12:29:09.039 [DEBUG] [Thread-18901] [transport.py] [_log()] server lang: <none>
2026-04-15T12:29:09.039 [DEBUG] [Thread-18901] [transport.py] [_log()] kex follows: False
2026-04-15T12:29:09.039 [DEBUG] [Thread-18901] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:29:09.039 [DEBUG] [Thread-18901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:29:09.039 [DEBUG] [Thread-18901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:29:09.039 [DEBUG] [Thread-18901] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:29:09.039 [DEBUG] [Thread-18901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:29:09.039 [DEBUG] [Thread-18901] [transport.py] [_log()] Compression: none
2026-04-15T12:29:09.039 [DEBUG] [Thread-18901] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:29:09.094 [DEBUG] [Thread-18901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:29:09.094 [DEBUG] [Thread-18901] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:29:09.095 [DEBUG] [Thread-18901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:29:09.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:29:09.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:29:09.151 [DEBUG] [Thread-18901] [transport.py] [_log()] userauth is OK
2026-04-15T12:29:09.151 [DEBUG] [Thread-18901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:29:09.151 [DEBUG] [Thread-18901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:29:09.151 [DEBUG] [Thread-18901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:29:09.151 [DEBUG] [Thread-18901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:29:09.177 [INFO] [Thread-18901] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:29:09.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:29:09.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:29:09.986 [DEBUG] [Thread-18901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:29:09.986 [DEBUG] [Thread-18901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:29:10.034 [DEBUG] [Thread-18901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:29:10.034 [DEBUG] [Thread-18901] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:29:10.043 [DEBUG] [Thread-18901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:29:10.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:29:10.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')
2026-04-15T12:29:10.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
2026-04-15T12:29:10.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:29:10.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:29:10.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:29:10.077 [DEBUG] [Thread-18901] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:29:15.937 [DEBUG] [Thread-18903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:29:22.953 [DEBUG] [Thread-18904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:29:37.997 [DEBUG] [Thread-18905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:29:40.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:29:40.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:29:40.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
2026-04-15T12:29:41.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 29, 25), 5.88988, 67.3396, 0.0, 18.2092, 12.5458, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:29:41.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:29:25
2026-04-15T12:29:41.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:29:42.190 [DEBUG] [Thread-18906] [transport.py] [_log()] starting thread (client mode): 0xee905c30
2026-04-15T12:29:42.190 [DEBUG] [Thread-18906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:29:42.210 [DEBUG] [Thread-18906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:29:42.210 [INFO] [Thread-18906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:29:42.211 [DEBUG] [Thread-18906] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:29:42.211 [DEBUG] [Thread-18906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:29:42.211 [DEBUG] [Thread-18906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:29:42.211 [DEBUG] [Thread-18906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:29:42.212 [DEBUG] [Thread-18906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:29:42.212 [DEBUG] [Thread-18906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:29:42.212 [DEBUG] [Thread-18906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:29:42.212 [DEBUG] [Thread-18906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:29:42.212 [DEBUG] [Thread-18906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:29:42.212 [DEBUG] [Thread-18906] [transport.py] [_log()] client lang: <none>
2026-04-15T12:29:42.212 [DEBUG] [Thread-18906] [transport.py] [_log()] server lang: <none>
2026-04-15T12:29:42.212 [DEBUG] [Thread-18906] [transport.py] [_log()] kex follows: False
2026-04-15T12:29:42.212 [DEBUG] [Thread-18906] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:29:42.212 [DEBUG] [Thread-18906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:29:42.212 [DEBUG] [Thread-18906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:29:42.213 [DEBUG] [Thread-18906] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:29:42.213 [DEBUG] [Thread-18906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:29:42.213 [DEBUG] [Thread-18906] [transport.py] [_log()] Compression: none
2026-04-15T12:29:42.213 [DEBUG] [Thread-18906] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:29:42.221 [DEBUG] [Thread-18906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:29:42.222 [DEBUG] [Thread-18906] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:29:42.222 [DEBUG] [Thread-18906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:29:42.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:29:42.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:29:42.223 [DEBUG] [Thread-18906] [transport.py] [_log()] userauth is OK
2026-04-15T12:29:42.223 [DEBUG] [Thread-18906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:29:42.223 [DEBUG] [Thread-18906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:29:42.224 [DEBUG] [Thread-18906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:29:42.224 [DEBUG] [Thread-18906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:29:42.246 [INFO] [Thread-18906] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:29:42.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:29:42.830 [DEBUG] [Thread-18906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:29:42.830 [DEBUG] [Thread-18906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:29:42.831 [DEBUG] [Thread-18906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:29:42.871 [DEBUG] [Thread-18906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:29:42.871 [DEBUG] [Thread-18906] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:29:42.874 [DEBUG] [Thread-18906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:29:42.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:29:42.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:29:42.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:29:42.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:29:42.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:29:42.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:29:42.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:29:42.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:29:42.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:29:42.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.436944 -999.00  +12.50  14.26     74   +8.10 1 3 1 1 1   888    0 5.68 36.48 ----- 24.4 14.3 344.8 20.9 18.6 -7.7 17.5 -9.1 17.1 -6.9 18.3 -5.4
2026-04-15T12:29:42.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:29:42.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:29:42.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.436944
2026-04-15T12:29:42.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:29:42.901 [DEBUG] [Thread-18906] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:29:42.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:29:42.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:29:42.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:29:42.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:29:42.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:29:25', tmtdew=5.88988, humidity=67.3396, cloud=0.0, wind=18.2092, temperature=12.5458, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:29:11.962', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:29:43.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:29:43.161 [DEBUG] [Thread-18909] [transport.py] [_log()] starting thread (client mode): 0xf13c8b20
2026-04-15T12:29:43.161 [DEBUG] [Thread-18909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:29:43.175 [DEBUG] [Thread-18909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:29:43.175 [INFO] [Thread-18909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:29:43.183 [DEBUG] [Thread-18909] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:29:43.183 [DEBUG] [Thread-18909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:29:43.183 [DEBUG] [Thread-18909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:29:43.184 [DEBUG] [Thread-18909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:29:43.184 [DEBUG] [Thread-18909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:29:43.184 [DEBUG] [Thread-18909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:29:43.184 [DEBUG] [Thread-18909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:29:43.184 [DEBUG] [Thread-18909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:29:43.184 [DEBUG] [Thread-18909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:29:43.184 [DEBUG] [Thread-18909] [transport.py] [_log()] client lang: <none>
2026-04-15T12:29:43.184 [DEBUG] [Thread-18909] [transport.py] [_log()] server lang: <none>
2026-04-15T12:29:43.184 [DEBUG] [Thread-18909] [transport.py] [_log()] kex follows: False
2026-04-15T12:29:43.184 [DEBUG] [Thread-18909] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:29:43.184 [DEBUG] [Thread-18909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:29:43.185 [DEBUG] [Thread-18909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:29:43.185 [DEBUG] [Thread-18909] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:29:43.185 [DEBUG] [Thread-18909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:29:43.185 [DEBUG] [Thread-18909] [transport.py] [_log()] Compression: none
2026-04-15T12:29:43.185 [DEBUG] [Thread-18909] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:29:43.239 [DEBUG] [Thread-18909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:29:43.239 [DEBUG] [Thread-18909] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:29:43.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:29:43.240 [DEBUG] [Thread-18909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:29:43.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:29:43.295 [DEBUG] [Thread-18909] [transport.py] [_log()] userauth is OK
2026-04-15T12:29:43.295 [DEBUG] [Thread-18909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:29:43.295 [DEBUG] [Thread-18909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:29:43.295 [DEBUG] [Thread-18909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:29:43.295 [DEBUG] [Thread-18909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:29:43.320 [INFO] [Thread-18909] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:29:43.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:29:43.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:29:44.141 [DEBUG] [Thread-18909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:29:44.141 [DEBUG] [Thread-18909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:29:44.189 [DEBUG] [Thread-18909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:29:44.189 [DEBUG] [Thread-18909] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:29:44.198 [DEBUG] [Thread-18909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:29:44.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:29:44.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')
2026-04-15T12:29:44.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') -> 00000000
2026-04-15T12:29:44.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:29:44.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:29:44.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:29:44.232 [DEBUG] [Thread-18909] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:29:46.605 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:29:46.606 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:29:53.029 [DEBUG] [Thread-18911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:30:08.072 [DEBUG] [Thread-18912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:30:14.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:30:14.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:30:14.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
2026-04-15T12:30:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 30, 1), 5.85836, 67.4888, 0.0, 18.3319, 12.9289, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:30:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:30:01
2026-04-15T12:30:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:30:16.032 [DEBUG] [Thread-18913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:30:16.366 [DEBUG] [Thread-18914] [transport.py] [_log()] starting thread (client mode): 0xee904a00
2026-04-15T12:30:16.366 [DEBUG] [Thread-18914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:30:16.385 [DEBUG] [Thread-18914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:30:16.385 [INFO] [Thread-18914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:30:16.388 [DEBUG] [Thread-18914] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:30:16.388 [DEBUG] [Thread-18914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:30:16.388 [DEBUG] [Thread-18914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:30:16.388 [DEBUG] [Thread-18914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:30:16.388 [DEBUG] [Thread-18914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:30:16.389 [DEBUG] [Thread-18914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:30:16.389 [DEBUG] [Thread-18914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:30:16.389 [DEBUG] [Thread-18914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:30:16.389 [DEBUG] [Thread-18914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:30:16.389 [DEBUG] [Thread-18914] [transport.py] [_log()] client lang: <none>
2026-04-15T12:30:16.389 [DEBUG] [Thread-18914] [transport.py] [_log()] server lang: <none>
2026-04-15T12:30:16.389 [DEBUG] [Thread-18914] [transport.py] [_log()] kex follows: False
2026-04-15T12:30:16.389 [DEBUG] [Thread-18914] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:30:16.389 [DEBUG] [Thread-18914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:30:16.389 [DEBUG] [Thread-18914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:30:16.389 [DEBUG] [Thread-18914] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:30:16.389 [DEBUG] [Thread-18914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:30:16.389 [DEBUG] [Thread-18914] [transport.py] [_log()] Compression: none
2026-04-15T12:30:16.389 [DEBUG] [Thread-18914] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:30:16.405 [DEBUG] [Thread-18914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:30:16.406 [DEBUG] [Thread-18914] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:30:16.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:30:16.406 [DEBUG] [Thread-18914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:30:16.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:30:16.407 [DEBUG] [Thread-18914] [transport.py] [_log()] userauth is OK
2026-04-15T12:30:16.407 [DEBUG] [Thread-18914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:30:16.408 [DEBUG] [Thread-18914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:30:16.408 [DEBUG] [Thread-18914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:30:16.408 [DEBUG] [Thread-18914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:30:16.427 [INFO] [Thread-18914] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:30:16.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:30:22.972 [DEBUG] [Thread-18914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:30:22.973 [DEBUG] [Thread-18914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:30:22.973 [DEBUG] [Thread-18914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:30:23.013 [DEBUG] [Thread-18914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:30:23.013 [DEBUG] [Thread-18914] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:30:23.016 [DEBUG] [Thread-18914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:30:23.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:30:23.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:30:23.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:30:23.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:30:23.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:30:23.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:30:23.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:30:23.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:30:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:30:23.078 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-15T12:30:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:30:01', tmtdew=5.85836, humidity=67.4888, cloud=0.0, wind=18.3319, temperature=12.9289, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:30:23.080 [DEBUG] [Thread-18914] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:30:23.103 [DEBUG] [Thread-18917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:30:23.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:30:23.330 [DEBUG] [Thread-18918] [transport.py] [_log()] starting thread (client mode): 0xee904be0
2026-04-15T12:30:23.330 [DEBUG] [Thread-18918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:30:23.344 [DEBUG] [Thread-18918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:30:23.344 [INFO] [Thread-18918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:30:23.351 [DEBUG] [Thread-18918] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:30:23.352 [DEBUG] [Thread-18918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:30:23.352 [DEBUG] [Thread-18918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:30:23.352 [DEBUG] [Thread-18918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:30:23.352 [DEBUG] [Thread-18918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:30:23.352 [DEBUG] [Thread-18918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:30:23.352 [DEBUG] [Thread-18918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:30:23.352 [DEBUG] [Thread-18918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:30:23.352 [DEBUG] [Thread-18918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:30:23.352 [DEBUG] [Thread-18918] [transport.py] [_log()] client lang: <none>
2026-04-15T12:30:23.352 [DEBUG] [Thread-18918] [transport.py] [_log()] server lang: <none>
2026-04-15T12:30:23.352 [DEBUG] [Thread-18918] [transport.py] [_log()] kex follows: False
2026-04-15T12:30:23.352 [DEBUG] [Thread-18918] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:30:23.353 [DEBUG] [Thread-18918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:30:23.353 [DEBUG] [Thread-18918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:30:23.353 [DEBUG] [Thread-18918] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:30:23.353 [DEBUG] [Thread-18918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:30:23.353 [DEBUG] [Thread-18918] [transport.py] [_log()] Compression: none
2026-04-15T12:30:23.353 [DEBUG] [Thread-18918] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:30:23.410 [DEBUG] [Thread-18918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:30:23.410 [DEBUG] [Thread-18918] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:30:23.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:30:23.411 [DEBUG] [Thread-18918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:30:23.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:30:23.471 [DEBUG] [Thread-18918] [transport.py] [_log()] userauth is OK
2026-04-15T12:30:23.471 [DEBUG] [Thread-18918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:30:23.471 [DEBUG] [Thread-18918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:30:23.471 [DEBUG] [Thread-18918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:30:23.472 [DEBUG] [Thread-18918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:30:23.497 [INFO] [Thread-18918] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:30:23.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:30:23.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:30:24.326 [DEBUG] [Thread-18918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:30:24.326 [DEBUG] [Thread-18918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:30:24.374 [DEBUG] [Thread-18918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:30:24.374 [DEBUG] [Thread-18918] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:30:24.383 [DEBUG] [Thread-18918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:30:24.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:30:24.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')
2026-04-15T12:30:24.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
2026-04-15T12:30:24.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:30:24.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:30:24.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:30:24.418 [DEBUG] [Thread-18918] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:30:38.152 [DEBUG] [Thread-18920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:30:46.746 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:30:46.748 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:30:53.183 [DEBUG] [Thread-18921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:30:54.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:30:54.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:30:54.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
2026-04-15T12:30:55.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 30, 36), 6.73216, 63.6565, 0.0, 21.9125, 13.3249, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:30:55.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:30:36
2026-04-15T12:30:56.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:30:56.586 [DEBUG] [Thread-18922] [transport.py] [_log()] starting thread (client mode): 0xee903670
2026-04-15T12:30:56.586 [DEBUG] [Thread-18922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:30:56.604 [DEBUG] [Thread-18922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:30:56.604 [INFO] [Thread-18922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:30:56.606 [DEBUG] [Thread-18922] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:30:56.606 [DEBUG] [Thread-18922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:30:56.606 [DEBUG] [Thread-18922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:30:56.606 [DEBUG] [Thread-18922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:30:56.607 [DEBUG] [Thread-18922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:30:56.607 [DEBUG] [Thread-18922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:30:56.607 [DEBUG] [Thread-18922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:30:56.607 [DEBUG] [Thread-18922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:30:56.607 [DEBUG] [Thread-18922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:30:56.607 [DEBUG] [Thread-18922] [transport.py] [_log()] client lang: <none>
2026-04-15T12:30:56.607 [DEBUG] [Thread-18922] [transport.py] [_log()] server lang: <none>
2026-04-15T12:30:56.607 [DEBUG] [Thread-18922] [transport.py] [_log()] kex follows: False
2026-04-15T12:30:56.607 [DEBUG] [Thread-18922] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:30:56.607 [DEBUG] [Thread-18922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:30:56.607 [DEBUG] [Thread-18922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:30:56.608 [DEBUG] [Thread-18922] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:30:56.608 [DEBUG] [Thread-18922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:30:56.608 [DEBUG] [Thread-18922] [transport.py] [_log()] Compression: none
2026-04-15T12:30:56.608 [DEBUG] [Thread-18922] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:30:56.618 [DEBUG] [Thread-18922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:30:56.619 [DEBUG] [Thread-18922] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:30:56.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:30:56.619 [DEBUG] [Thread-18922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:30:56.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:30:56.620 [DEBUG] [Thread-18922] [transport.py] [_log()] userauth is OK
2026-04-15T12:30:56.620 [DEBUG] [Thread-18922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:30:56.620 [DEBUG] [Thread-18922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:30:56.620 [DEBUG] [Thread-18922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:30:56.620 [DEBUG] [Thread-18922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:30:56.644 [INFO] [Thread-18922] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:30:56.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:30:57.369 [DEBUG] [Thread-18922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:30:57.369 [DEBUG] [Thread-18922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:30:57.370 [DEBUG] [Thread-18922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:30:57.410 [DEBUG] [Thread-18922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:30:57.410 [DEBUG] [Thread-18922] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:30:57.413 [DEBUG] [Thread-18922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:30:57.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:30:57.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:30:57.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:30:57.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:30:57.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:30:57.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:30:57.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:30:57.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:30:57.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:30:57.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.437638 -999.00  +12.80  16.43     73   +8.20 1 3 1 1 1   888    0 5.50 30.54 ----- 17.2 16.4 341.4 25.6 19.4 -8.4 18.1 -8.1 17.9 -5.1 19.1 -6.3
2026-04-15T12:30:57.434 [DEBUG] [Thread-18922] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:30:57.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:30:57.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:30:57.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.437638
2026-04-15T12:30:57.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:30:57.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:30:57.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:30:57.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:30:57.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:30:57.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:30:36', tmtdew=6.73216, humidity=63.6565, cloud=0.0, wind=21.9125, temperature=13.3249, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:30:11.923', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:30:57.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:30:57.691 [DEBUG] [Thread-18925] [transport.py] [_log()] starting thread (client mode): 0xf13ca4d0
2026-04-15T12:30:57.691 [DEBUG] [Thread-18925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:30:57.705 [DEBUG] [Thread-18925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:30:57.705 [INFO] [Thread-18925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:30:57.713 [DEBUG] [Thread-18925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:30:57.713 [DEBUG] [Thread-18925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:30:57.713 [DEBUG] [Thread-18925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:30:57.713 [DEBUG] [Thread-18925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:30:57.713 [DEBUG] [Thread-18925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:30:57.714 [DEBUG] [Thread-18925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:30:57.714 [DEBUG] [Thread-18925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:30:57.714 [DEBUG] [Thread-18925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:30:57.714 [DEBUG] [Thread-18925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:30:57.714 [DEBUG] [Thread-18925] [transport.py] [_log()] client lang: <none>
2026-04-15T12:30:57.714 [DEBUG] [Thread-18925] [transport.py] [_log()] server lang: <none>
2026-04-15T12:30:57.714 [DEBUG] [Thread-18925] [transport.py] [_log()] kex follows: False
2026-04-15T12:30:57.714 [DEBUG] [Thread-18925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:30:57.714 [DEBUG] [Thread-18925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:30:57.714 [DEBUG] [Thread-18925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:30:57.714 [DEBUG] [Thread-18925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:30:57.714 [DEBUG] [Thread-18925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:30:57.715 [DEBUG] [Thread-18925] [transport.py] [_log()] Compression: none
2026-04-15T12:30:57.715 [DEBUG] [Thread-18925] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:30:57.770 [DEBUG] [Thread-18925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:30:57.770 [DEBUG] [Thread-18925] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:30:57.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:30:57.771 [DEBUG] [Thread-18925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:30:57.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:30:57.827 [DEBUG] [Thread-18925] [transport.py] [_log()] userauth is OK
2026-04-15T12:30:57.827 [DEBUG] [Thread-18925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:30:57.827 [DEBUG] [Thread-18925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:30:57.827 [DEBUG] [Thread-18925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:30:57.827 [DEBUG] [Thread-18925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:30:57.855 [INFO] [Thread-18925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:30:57.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:30:57.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:30:58.691 [DEBUG] [Thread-18925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:30:58.691 [DEBUG] [Thread-18925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:30:58.739 [DEBUG] [Thread-18925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:30:58.739 [DEBUG] [Thread-18925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:30:58.748 [DEBUG] [Thread-18925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:30:58.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:30:58.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')
2026-04-15T12:30:58.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
2026-04-15T12:30:58.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:30:58.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:30:58.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:30:58.784 [DEBUG] [Thread-18925] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:31:08.214 [DEBUG] [Thread-18927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:31:16.137 [DEBUG] [Thread-18928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:31:23.262 [DEBUG] [Thread-18929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:31:28.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:31:28.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:31:28.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:31:30.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 31, 12), 6.25113, 65.61, 0.0, 13.3222, 12.9959, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:31:30.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:31:12
2026-04-15T12:31:30.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:31:30.932 [DEBUG] [Thread-18930] [transport.py] [_log()] starting thread (client mode): 0xf13fefb0
2026-04-15T12:31:30.932 [DEBUG] [Thread-18930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:31:30.942 [DEBUG] [Thread-18930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:31:30.942 [INFO] [Thread-18930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:31:30.944 [DEBUG] [Thread-18930] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:31:30.944 [DEBUG] [Thread-18930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:31:30.944 [DEBUG] [Thread-18930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:31:30.944 [DEBUG] [Thread-18930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:31:30.944 [DEBUG] [Thread-18930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:31:30.944 [DEBUG] [Thread-18930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:31:30.945 [DEBUG] [Thread-18930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:31:30.945 [DEBUG] [Thread-18930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:31:30.945 [DEBUG] [Thread-18930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:31:30.945 [DEBUG] [Thread-18930] [transport.py] [_log()] client lang: <none>
2026-04-15T12:31:30.945 [DEBUG] [Thread-18930] [transport.py] [_log()] server lang: <none>
2026-04-15T12:31:30.945 [DEBUG] [Thread-18930] [transport.py] [_log()] kex follows: False
2026-04-15T12:31:30.945 [DEBUG] [Thread-18930] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:31:30.945 [DEBUG] [Thread-18930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:31:30.945 [DEBUG] [Thread-18930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:31:30.945 [DEBUG] [Thread-18930] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:31:30.945 [DEBUG] [Thread-18930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:31:30.945 [DEBUG] [Thread-18930] [transport.py] [_log()] Compression: none
2026-04-15T12:31:30.946 [DEBUG] [Thread-18930] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:31:30.959 [DEBUG] [Thread-18930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:31:30.960 [DEBUG] [Thread-18930] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:31:30.960 [DEBUG] [Thread-18930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:31:30.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:31:30.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:31:30.961 [DEBUG] [Thread-18930] [transport.py] [_log()] userauth is OK
2026-04-15T12:31:30.961 [DEBUG] [Thread-18930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:31:30.961 [DEBUG] [Thread-18930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:31:30.961 [DEBUG] [Thread-18930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:31:30.961 [DEBUG] [Thread-18930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:31:30.976 [INFO] [Thread-18930] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:31:30.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:31:31.567 [DEBUG] [Thread-18930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:31:31.567 [DEBUG] [Thread-18930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:31:31.568 [DEBUG] [Thread-18930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:31:31.608 [DEBUG] [Thread-18930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:31:31.608 [DEBUG] [Thread-18930] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:31:31.610 [DEBUG] [Thread-18930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:31:31.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:31:31.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:31:31.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:31:31.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:31:31.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:31:31.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:31:31.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:31:31.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:31:31.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:31:31.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.438333 -999.00  +12.90  21.75     74   +8.50 1 3 1 1 1   888    0 5.47 29.26 ----- 22.8 21.8 318.8 28.7 19.4 -12.9 18.3 -11.0 18.1 -7.8 19.0 -9.9
2026-04-15T12:31:31.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:31:31.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:31:31.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.438333
2026-04-15T12:31:31.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:31:31.632 [DEBUG] [Thread-18930] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:31:31.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:31:31.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:31:31.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:31:31.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:31:31.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:31:12', tmtdew=6.25113, humidity=65.61, cloud=0.0, wind=13.3222, temperature=12.9959, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:31:11.971', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:31:31.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:31:31.886 [DEBUG] [Thread-18933] [transport.py] [_log()] starting thread (client mode): 0xf13ff580
2026-04-15T12:31:31.886 [DEBUG] [Thread-18933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:31:31.902 [DEBUG] [Thread-18933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:31:31.902 [INFO] [Thread-18933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:31:31.909 [DEBUG] [Thread-18933] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:31:31.909 [DEBUG] [Thread-18933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:31:31.909 [DEBUG] [Thread-18933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:31:31.909 [DEBUG] [Thread-18933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:31:31.910 [DEBUG] [Thread-18933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:31:31.910 [DEBUG] [Thread-18933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:31:31.910 [DEBUG] [Thread-18933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:31:31.910 [DEBUG] [Thread-18933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:31:31.910 [DEBUG] [Thread-18933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:31:31.910 [DEBUG] [Thread-18933] [transport.py] [_log()] client lang: <none>
2026-04-15T12:31:31.910 [DEBUG] [Thread-18933] [transport.py] [_log()] server lang: <none>
2026-04-15T12:31:31.910 [DEBUG] [Thread-18933] [transport.py] [_log()] kex follows: False
2026-04-15T12:31:31.910 [DEBUG] [Thread-18933] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:31:31.910 [DEBUG] [Thread-18933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:31:31.910 [DEBUG] [Thread-18933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:31:31.910 [DEBUG] [Thread-18933] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:31:31.911 [DEBUG] [Thread-18933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:31:31.911 [DEBUG] [Thread-18933] [transport.py] [_log()] Compression: none
2026-04-15T12:31:31.911 [DEBUG] [Thread-18933] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:31:31.965 [DEBUG] [Thread-18933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:31:31.966 [DEBUG] [Thread-18933] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:31:31.966 [DEBUG] [Thread-18933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:31:31.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:31:31.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:31:32.022 [DEBUG] [Thread-18933] [transport.py] [_log()] userauth is OK
2026-04-15T12:31:32.023 [DEBUG] [Thread-18933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:31:32.023 [DEBUG] [Thread-18933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:31:32.023 [DEBUG] [Thread-18933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:31:32.023 [DEBUG] [Thread-18933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:31:32.047 [INFO] [Thread-18933] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:31:32.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:31:32.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:31:32.886 [DEBUG] [Thread-18933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:31:32.886 [DEBUG] [Thread-18933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:31:32.934 [DEBUG] [Thread-18933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:31:32.934 [DEBUG] [Thread-18933] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:31:32.943 [DEBUG] [Thread-18933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:31:32.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:31:32.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')
2026-04-15T12:31:32.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
2026-04-15T12:31:32.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:31:32.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:31:32.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:31:32.977 [DEBUG] [Thread-18933] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:31:38.293 [DEBUG] [Thread-18935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:31:46.889 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:31:46.890 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:31:53.335 [DEBUG] [Thread-18936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:32:03.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:32:03.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:32:03.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
2026-04-15T12:32:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 31, 47), 6.32892, 65.4797, 0.0, 20.219, 13.4904, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:32:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:31:47
2026-04-15T12:32:04.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:32:05.134 [DEBUG] [Thread-18937] [transport.py] [_log()] starting thread (client mode): 0xee9eeb00
2026-04-15T12:32:05.135 [DEBUG] [Thread-18937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:32:05.150 [DEBUG] [Thread-18937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:32:05.150 [INFO] [Thread-18937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:32:05.152 [DEBUG] [Thread-18937] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:32:05.152 [DEBUG] [Thread-18937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:32:05.152 [DEBUG] [Thread-18937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:32:05.153 [DEBUG] [Thread-18937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:32:05.153 [DEBUG] [Thread-18937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:32:05.153 [DEBUG] [Thread-18937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:32:05.153 [DEBUG] [Thread-18937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:32:05.153 [DEBUG] [Thread-18937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:32:05.153 [DEBUG] [Thread-18937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:32:05.153 [DEBUG] [Thread-18937] [transport.py] [_log()] client lang: <none>
2026-04-15T12:32:05.153 [DEBUG] [Thread-18937] [transport.py] [_log()] server lang: <none>
2026-04-15T12:32:05.153 [DEBUG] [Thread-18937] [transport.py] [_log()] kex follows: False
2026-04-15T12:32:05.153 [DEBUG] [Thread-18937] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:32:05.153 [DEBUG] [Thread-18937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:32:05.154 [DEBUG] [Thread-18937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:32:05.154 [DEBUG] [Thread-18937] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:32:05.154 [DEBUG] [Thread-18937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:32:05.154 [DEBUG] [Thread-18937] [transport.py] [_log()] Compression: none
2026-04-15T12:32:05.154 [DEBUG] [Thread-18937] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:32:05.162 [DEBUG] [Thread-18937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:32:05.163 [DEBUG] [Thread-18937] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:32:05.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:32:05.163 [DEBUG] [Thread-18937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:32:05.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:32:05.165 [DEBUG] [Thread-18937] [transport.py] [_log()] userauth is OK
2026-04-15T12:32:05.165 [DEBUG] [Thread-18937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:32:05.165 [DEBUG] [Thread-18937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:32:05.165 [DEBUG] [Thread-18937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:32:05.165 [DEBUG] [Thread-18937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:32:05.200 [INFO] [Thread-18937] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:32:05.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:32:05.757 [DEBUG] [Thread-18937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:32:05.757 [DEBUG] [Thread-18937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:32:05.758 [DEBUG] [Thread-18937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:32:05.798 [DEBUG] [Thread-18937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:32:05.798 [DEBUG] [Thread-18937] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:32:05.801 [DEBUG] [Thread-18937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:32:05.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:32:05.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:32:05.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:32:05.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:32:05.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:32:05.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:32:05.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:32:05.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:32:05.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:32:05.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.438680 -999.00  +13.10  24.00     72   +8.30 1 2 1 1 1   888    0 5.46 30.61 ----- 21.9 24.0 313.0 27.3 19.2 -12.4 18.2 -11.5 17.8 -9.8 18.8 -8.5
2026-04-15T12:32:05.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:32:05.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:32:05.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.438680
2026-04-15T12:32:05.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:32:05.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:32:05.825 [DEBUG] [Thread-18937] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:32:05.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:32:05.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:32:05.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:32:05.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:31:47', tmtdew=6.32892, humidity=65.4797, cloud=0.0, wind=20.219, temperature=13.4904, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:31:41.952', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:32:06.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:32:06.078 [DEBUG] [Thread-18940] [transport.py] [_log()] starting thread (client mode): 0xf13fc2b0
2026-04-15T12:32:06.078 [DEBUG] [Thread-18940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:32:06.092 [DEBUG] [Thread-18940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:32:06.092 [INFO] [Thread-18940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:32:06.100 [DEBUG] [Thread-18940] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:32:06.100 [DEBUG] [Thread-18940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:32:06.100 [DEBUG] [Thread-18940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:32:06.100 [DEBUG] [Thread-18940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:32:06.100 [DEBUG] [Thread-18940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:32:06.100 [DEBUG] [Thread-18940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:32:06.101 [DEBUG] [Thread-18940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:32:06.101 [DEBUG] [Thread-18940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:32:06.101 [DEBUG] [Thread-18940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:32:06.101 [DEBUG] [Thread-18940] [transport.py] [_log()] client lang: <none>
2026-04-15T12:32:06.101 [DEBUG] [Thread-18940] [transport.py] [_log()] server lang: <none>
2026-04-15T12:32:06.101 [DEBUG] [Thread-18940] [transport.py] [_log()] kex follows: False
2026-04-15T12:32:06.101 [DEBUG] [Thread-18940] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:32:06.101 [DEBUG] [Thread-18940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:32:06.101 [DEBUG] [Thread-18940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:32:06.102 [DEBUG] [Thread-18940] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:32:06.102 [DEBUG] [Thread-18940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:32:06.102 [DEBUG] [Thread-18940] [transport.py] [_log()] Compression: none
2026-04-15T12:32:06.102 [DEBUG] [Thread-18940] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:32:06.158 [DEBUG] [Thread-18940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:32:06.158 [DEBUG] [Thread-18940] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:32:06.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:32:06.159 [DEBUG] [Thread-18940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:32:06.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:32:06.214 [DEBUG] [Thread-18940] [transport.py] [_log()] userauth is OK
2026-04-15T12:32:06.214 [DEBUG] [Thread-18940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:32:06.214 [DEBUG] [Thread-18940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:32:06.214 [DEBUG] [Thread-18940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:32:06.214 [DEBUG] [Thread-18940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:32:06.233 [INFO] [Thread-18940] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:32:06.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:32:06.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:32:07.072 [DEBUG] [Thread-18940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:32:07.072 [DEBUG] [Thread-18940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:32:07.120 [DEBUG] [Thread-18940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:32:07.120 [DEBUG] [Thread-18940] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:32:07.129 [DEBUG] [Thread-18940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:32:07.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:32:07.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')
2026-04-15T12:32:07.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
2026-04-15T12:32:07.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:32:07.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:32:07.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:32:07.164 [DEBUG] [Thread-18940] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:32:08.365 [DEBUG] [Thread-18942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:32:16.247 [DEBUG] [Thread-18943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:32:23.409 [DEBUG] [Thread-18944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:32:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:32:37.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:32:37.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
2026-04-15T12:32:38.439 [DEBUG] [Thread-18945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:32:38.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 32, 22), 6.32636, 65.6901, 0.0, 18.95, 13.2118, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:32:38.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:32:22
2026-04-15T12:32:38.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:32:39.313 [DEBUG] [Thread-18946] [transport.py] [_log()] starting thread (client mode): 0xf13c9600
2026-04-15T12:32:39.314 [DEBUG] [Thread-18946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:32:39.329 [DEBUG] [Thread-18946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:32:39.329 [INFO] [Thread-18946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:32:39.331 [DEBUG] [Thread-18946] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:32:39.331 [DEBUG] [Thread-18946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:32:39.331 [DEBUG] [Thread-18946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:32:39.331 [DEBUG] [Thread-18946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:32:39.331 [DEBUG] [Thread-18946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:32:39.331 [DEBUG] [Thread-18946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:32:39.331 [DEBUG] [Thread-18946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:32:39.331 [DEBUG] [Thread-18946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:32:39.331 [DEBUG] [Thread-18946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:32:39.331 [DEBUG] [Thread-18946] [transport.py] [_log()] client lang: <none>
2026-04-15T12:32:39.331 [DEBUG] [Thread-18946] [transport.py] [_log()] server lang: <none>
2026-04-15T12:32:39.331 [DEBUG] [Thread-18946] [transport.py] [_log()] kex follows: False
2026-04-15T12:32:39.332 [DEBUG] [Thread-18946] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:32:39.332 [DEBUG] [Thread-18946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:32:39.332 [DEBUG] [Thread-18946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:32:39.332 [DEBUG] [Thread-18946] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:32:39.332 [DEBUG] [Thread-18946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:32:39.332 [DEBUG] [Thread-18946] [transport.py] [_log()] Compression: none
2026-04-15T12:32:39.332 [DEBUG] [Thread-18946] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:32:39.350 [DEBUG] [Thread-18946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:32:39.351 [DEBUG] [Thread-18946] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:32:39.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:32:39.351 [DEBUG] [Thread-18946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:32:39.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:32:39.352 [DEBUG] [Thread-18946] [transport.py] [_log()] userauth is OK
2026-04-15T12:32:39.352 [DEBUG] [Thread-18946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:32:39.352 [DEBUG] [Thread-18946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:32:39.353 [DEBUG] [Thread-18946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:32:39.353 [DEBUG] [Thread-18946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:32:39.370 [INFO] [Thread-18946] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:32:39.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:32:39.970 [DEBUG] [Thread-18946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:32:39.970 [DEBUG] [Thread-18946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:32:39.970 [DEBUG] [Thread-18946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:32:40.010 [DEBUG] [Thread-18946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:32:40.011 [DEBUG] [Thread-18946] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:32:40.012 [DEBUG] [Thread-18946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:32:40.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:32:40.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:32:40.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:32:40.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:32:40.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:32:40.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:32:40.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:32:40.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:32:40.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:32:40.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.439027 -999.00  +12.80  19.56     72   +8.00 1 3 1 1 1   888    0 5.41 28.96 ----- 23.8 19.6 308.2 27.9 19.1 -11.3 18.2 -9.9 17.8 -7.6 18.7 -9.4
2026-04-15T12:32:40.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:32:40.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:32:40.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.439027
2026-04-15T12:32:40.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:32:40.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:32:40.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:32:40.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:32:40.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:32:40.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:32:22', tmtdew=6.32636, humidity=65.6901, cloud=0.0, wind=18.95, temperature=13.2118, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:32:11.933', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:32:40.032 [DEBUG] [Thread-18946] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:32:40.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:32:40.243 [DEBUG] [Thread-18949] [transport.py] [_log()] starting thread (client mode): 0xf13fc970
2026-04-15T12:32:40.243 [DEBUG] [Thread-18949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:32:40.257 [DEBUG] [Thread-18949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:32:40.257 [INFO] [Thread-18949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:32:40.264 [DEBUG] [Thread-18949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:32:40.264 [DEBUG] [Thread-18949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:32:40.264 [DEBUG] [Thread-18949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:32:40.264 [DEBUG] [Thread-18949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:32:40.265 [DEBUG] [Thread-18949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:32:40.265 [DEBUG] [Thread-18949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:32:40.265 [DEBUG] [Thread-18949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:32:40.265 [DEBUG] [Thread-18949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:32:40.265 [DEBUG] [Thread-18949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:32:40.265 [DEBUG] [Thread-18949] [transport.py] [_log()] client lang: <none>
2026-04-15T12:32:40.265 [DEBUG] [Thread-18949] [transport.py] [_log()] server lang: <none>
2026-04-15T12:32:40.265 [DEBUG] [Thread-18949] [transport.py] [_log()] kex follows: False
2026-04-15T12:32:40.265 [DEBUG] [Thread-18949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:32:40.265 [DEBUG] [Thread-18949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:32:40.265 [DEBUG] [Thread-18949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:32:40.265 [DEBUG] [Thread-18949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:32:40.265 [DEBUG] [Thread-18949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:32:40.265 [DEBUG] [Thread-18949] [transport.py] [_log()] Compression: none
2026-04-15T12:32:40.265 [DEBUG] [Thread-18949] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:32:40.321 [DEBUG] [Thread-18949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:32:40.321 [DEBUG] [Thread-18949] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:32:40.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:32:40.321 [DEBUG] [Thread-18949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:32:40.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:32:40.378 [DEBUG] [Thread-18949] [transport.py] [_log()] userauth is OK
2026-04-15T12:32:40.378 [DEBUG] [Thread-18949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:32:40.378 [DEBUG] [Thread-18949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:32:40.378 [DEBUG] [Thread-18949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:32:40.378 [DEBUG] [Thread-18949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:32:40.395 [INFO] [Thread-18949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:32:40.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:32:40.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:32:41.224 [DEBUG] [Thread-18949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:32:41.225 [DEBUG] [Thread-18949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:32:41.272 [DEBUG] [Thread-18949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:32:41.272 [DEBUG] [Thread-18949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:32:41.282 [DEBUG] [Thread-18949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:32:41.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:32:41.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')
2026-04-15T12:32:41.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') -> 00000000
2026-04-15T12:32:41.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:32:41.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:32:41.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:32:41.318 [DEBUG] [Thread-18949] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:32:47.028 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:32:47.029 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:32:53.471 [DEBUG] [Thread-18951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:33:08.516 [DEBUG] [Thread-18952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:33:11.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:33:11.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:33:11.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
2026-04-15T12:33:12.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 32, 58), 6.27378, 65.7232, 0.0, 22.639, 12.9612, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:33:12.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:32:58
2026-04-15T12:33:13.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:33:13.481 [DEBUG] [Thread-18953] [transport.py] [_log()] starting thread (client mode): 0xf13ef6d0
2026-04-15T12:33:13.481 [DEBUG] [Thread-18953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:33:13.501 [DEBUG] [Thread-18953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:33:13.501 [INFO] [Thread-18953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:33:13.504 [DEBUG] [Thread-18953] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:33:13.504 [DEBUG] [Thread-18953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:33:13.505 [DEBUG] [Thread-18953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:33:13.505 [DEBUG] [Thread-18953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:33:13.505 [DEBUG] [Thread-18953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:33:13.505 [DEBUG] [Thread-18953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:33:13.505 [DEBUG] [Thread-18953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:33:13.505 [DEBUG] [Thread-18953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:33:13.505 [DEBUG] [Thread-18953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:33:13.505 [DEBUG] [Thread-18953] [transport.py] [_log()] client lang: <none>
2026-04-15T12:33:13.505 [DEBUG] [Thread-18953] [transport.py] [_log()] server lang: <none>
2026-04-15T12:33:13.505 [DEBUG] [Thread-18953] [transport.py] [_log()] kex follows: False
2026-04-15T12:33:13.505 [DEBUG] [Thread-18953] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:33:13.505 [DEBUG] [Thread-18953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:33:13.506 [DEBUG] [Thread-18953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:33:13.506 [DEBUG] [Thread-18953] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:33:13.506 [DEBUG] [Thread-18953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:33:13.506 [DEBUG] [Thread-18953] [transport.py] [_log()] Compression: none
2026-04-15T12:33:13.506 [DEBUG] [Thread-18953] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:33:13.520 [DEBUG] [Thread-18953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:33:13.520 [DEBUG] [Thread-18953] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:33:13.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:33:13.521 [DEBUG] [Thread-18953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:33:13.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:33:13.522 [DEBUG] [Thread-18953] [transport.py] [_log()] userauth is OK
2026-04-15T12:33:13.522 [DEBUG] [Thread-18953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:33:13.522 [DEBUG] [Thread-18953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:33:13.522 [DEBUG] [Thread-18953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:33:13.522 [DEBUG] [Thread-18953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:33:13.544 [INFO] [Thread-18953] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:33:13.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:33:14.144 [DEBUG] [Thread-18953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:33:14.144 [DEBUG] [Thread-18953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:33:14.144 [DEBUG] [Thread-18953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:33:14.185 [DEBUG] [Thread-18953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:33:14.185 [DEBUG] [Thread-18953] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:33:14.188 [DEBUG] [Thread-18953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:33:14.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:33:14.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:33:14.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:33:14.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:33:14.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:33:14.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:33:14.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:33:14.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:33:14.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:33:14.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.439722 -999.00  +12.30  22.00     72   +7.50 1 3 1 1 1   888    0 5.47 29.15 ----- 26.4 22.0 314.4 27.0 18.8 -11.6 18.0 -9.6 17.6 -8.3 18.4 -10.6
2026-04-15T12:33:14.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:33:14.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:33:14.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.439722
2026-04-15T12:33:14.211 [DEBUG] [Thread-18953] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:33:14.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:33:14.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:33:14.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:33:14.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:33:14.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-15T12:33:14.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:32:58', tmtdew=6.27378, humidity=65.7232, cloud=0.0, wind=22.639, temperature=12.9612, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:33:11.981', atlas_cloud=3, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:33:14.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:33:14.468 [DEBUG] [Thread-18956] [transport.py] [_log()] starting thread (client mode): 0xf13ee1d0
2026-04-15T12:33:14.469 [DEBUG] [Thread-18956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:33:14.483 [DEBUG] [Thread-18956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:33:14.483 [INFO] [Thread-18956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:33:14.490 [DEBUG] [Thread-18956] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:33:14.490 [DEBUG] [Thread-18956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:33:14.490 [DEBUG] [Thread-18956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:33:14.490 [DEBUG] [Thread-18956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:33:14.491 [DEBUG] [Thread-18956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:33:14.491 [DEBUG] [Thread-18956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:33:14.491 [DEBUG] [Thread-18956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:33:14.491 [DEBUG] [Thread-18956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:33:14.491 [DEBUG] [Thread-18956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:33:14.491 [DEBUG] [Thread-18956] [transport.py] [_log()] client lang: <none>
2026-04-15T12:33:14.491 [DEBUG] [Thread-18956] [transport.py] [_log()] server lang: <none>
2026-04-15T12:33:14.491 [DEBUG] [Thread-18956] [transport.py] [_log()] kex follows: False
2026-04-15T12:33:14.491 [DEBUG] [Thread-18956] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:33:14.491 [DEBUG] [Thread-18956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:33:14.491 [DEBUG] [Thread-18956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:33:14.492 [DEBUG] [Thread-18956] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:33:14.492 [DEBUG] [Thread-18956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:33:14.492 [DEBUG] [Thread-18956] [transport.py] [_log()] Compression: none
2026-04-15T12:33:14.492 [DEBUG] [Thread-18956] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:33:14.549 [DEBUG] [Thread-18956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:33:14.549 [DEBUG] [Thread-18956] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:33:14.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:33:14.550 [DEBUG] [Thread-18956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:33:14.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:33:14.606 [DEBUG] [Thread-18956] [transport.py] [_log()] userauth is OK
2026-04-15T12:33:14.607 [DEBUG] [Thread-18956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:33:14.607 [DEBUG] [Thread-18956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:33:14.607 [DEBUG] [Thread-18956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:33:14.607 [DEBUG] [Thread-18956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:33:14.632 [INFO] [Thread-18956] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:33:14.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:33:14.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:33:15.490 [DEBUG] [Thread-18956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:33:15.490 [DEBUG] [Thread-18956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:33:15.538 [DEBUG] [Thread-18956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:33:15.538 [DEBUG] [Thread-18956] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:33:15.547 [DEBUG] [Thread-18956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:33:15.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:33:15.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')
2026-04-15T12:33:15.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
2026-04-15T12:33:15.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:33:15.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:33:15.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:33:15.581 [DEBUG] [Thread-18956] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:33:16.350 [DEBUG] [Thread-18958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:33:23.548 [DEBUG] [Thread-18959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:33:38.593 [DEBUG] [Thread-18960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:33:45.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:33:45.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:33:45.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:33:46.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 33, 34), 6.41439, 65.1479, 0.0, 20.7482, 13.7223, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:33:46.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:33:34
2026-04-15T12:33:47.170 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:33:47.171 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:33:47.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:33:47.739 [DEBUG] [Thread-18961] [transport.py] [_log()] starting thread (client mode): 0xee9067a0
2026-04-15T12:33:47.739 [DEBUG] [Thread-18961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:33:47.759 [DEBUG] [Thread-18961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:33:47.759 [INFO] [Thread-18961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:33:47.762 [DEBUG] [Thread-18961] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:33:47.762 [DEBUG] [Thread-18961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:33:47.762 [DEBUG] [Thread-18961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:33:47.763 [DEBUG] [Thread-18961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:33:47.763 [DEBUG] [Thread-18961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:33:47.763 [DEBUG] [Thread-18961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:33:47.763 [DEBUG] [Thread-18961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:33:47.763 [DEBUG] [Thread-18961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:33:47.763 [DEBUG] [Thread-18961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:33:47.763 [DEBUG] [Thread-18961] [transport.py] [_log()] client lang: <none>
2026-04-15T12:33:47.763 [DEBUG] [Thread-18961] [transport.py] [_log()] server lang: <none>
2026-04-15T12:33:47.763 [DEBUG] [Thread-18961] [transport.py] [_log()] kex follows: False
2026-04-15T12:33:47.763 [DEBUG] [Thread-18961] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:33:47.763 [DEBUG] [Thread-18961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:33:47.763 [DEBUG] [Thread-18961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:33:47.764 [DEBUG] [Thread-18961] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:33:47.764 [DEBUG] [Thread-18961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:33:47.764 [DEBUG] [Thread-18961] [transport.py] [_log()] Compression: none
2026-04-15T12:33:47.764 [DEBUG] [Thread-18961] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:33:47.781 [DEBUG] [Thread-18961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:33:47.782 [DEBUG] [Thread-18961] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:33:47.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:33:47.782 [DEBUG] [Thread-18961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:33:47.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:33:47.783 [DEBUG] [Thread-18961] [transport.py] [_log()] userauth is OK
2026-04-15T12:33:47.783 [DEBUG] [Thread-18961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:33:47.784 [DEBUG] [Thread-18961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:33:47.784 [DEBUG] [Thread-18961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:33:47.784 [DEBUG] [Thread-18961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:33:47.802 [INFO] [Thread-18961] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:33:47.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:33:48.396 [DEBUG] [Thread-18961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:33:48.396 [DEBUG] [Thread-18961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:33:48.397 [DEBUG] [Thread-18961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:33:48.437 [DEBUG] [Thread-18961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:33:48.437 [DEBUG] [Thread-18961] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:33:48.440 [DEBUG] [Thread-18961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:33:48.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:33:48.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:33:48.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:33:48.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:33:48.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:33:48.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:33:48.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:33:48.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:33:48.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:33:48.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.440069 -999.00  +12.10  23.38     71   +7.10 1 2 1 1 1   888    0 5.32 23.39 ----- 20.4 23.4 298.4 29.2 18.6 -11.3 17.8 -9.9 17.4 -11.7 18.2 -11.6
2026-04-15T12:33:48.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:33:48.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:33:48.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.440069
2026-04-15T12:33:48.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:33:48.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:33:48.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:33:48.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:33:48.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:33:48.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:33:34', tmtdew=6.41439, humidity=65.1479, cloud=0.0, wind=20.7482, temperature=13.7223, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:33:41.962', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:33:48.459 [DEBUG] [Thread-18961] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:33:48.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:33:48.679 [DEBUG] [Thread-18964] [transport.py] [_log()] starting thread (client mode): 0xee905840
2026-04-15T12:33:48.679 [DEBUG] [Thread-18964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:33:48.693 [DEBUG] [Thread-18964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:33:48.693 [INFO] [Thread-18964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:33:48.701 [DEBUG] [Thread-18964] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:33:48.701 [DEBUG] [Thread-18964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:33:48.701 [DEBUG] [Thread-18964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:33:48.701 [DEBUG] [Thread-18964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:33:48.701 [DEBUG] [Thread-18964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:33:48.701 [DEBUG] [Thread-18964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:33:48.701 [DEBUG] [Thread-18964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:33:48.701 [DEBUG] [Thread-18964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:33:48.701 [DEBUG] [Thread-18964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:33:48.701 [DEBUG] [Thread-18964] [transport.py] [_log()] client lang: <none>
2026-04-15T12:33:48.701 [DEBUG] [Thread-18964] [transport.py] [_log()] server lang: <none>
2026-04-15T12:33:48.702 [DEBUG] [Thread-18964] [transport.py] [_log()] kex follows: False
2026-04-15T12:33:48.702 [DEBUG] [Thread-18964] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:33:48.702 [DEBUG] [Thread-18964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:33:48.702 [DEBUG] [Thread-18964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:33:48.702 [DEBUG] [Thread-18964] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:33:48.702 [DEBUG] [Thread-18964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:33:48.702 [DEBUG] [Thread-18964] [transport.py] [_log()] Compression: none
2026-04-15T12:33:48.702 [DEBUG] [Thread-18964] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:33:48.761 [DEBUG] [Thread-18964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:33:48.761 [DEBUG] [Thread-18964] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:33:48.762 [DEBUG] [Thread-18964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:33:48.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:33:48.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:33:48.822 [DEBUG] [Thread-18964] [transport.py] [_log()] userauth is OK
2026-04-15T12:33:48.822 [DEBUG] [Thread-18964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:33:48.822 [DEBUG] [Thread-18964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:33:48.822 [DEBUG] [Thread-18964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:33:48.822 [DEBUG] [Thread-18964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:33:48.845 [INFO] [Thread-18964] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:33:48.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:33:48.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:33:49.697 [DEBUG] [Thread-18964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:33:49.697 [DEBUG] [Thread-18964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:33:49.748 [DEBUG] [Thread-18964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:33:49.749 [DEBUG] [Thread-18964] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:33:49.757 [DEBUG] [Thread-18964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:33:49.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:33:49.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')
2026-04-15T12:33:49.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
2026-04-15T12:33:49.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:33:49.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:33:49.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:33:49.792 [DEBUG] [Thread-18964] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:33:53.625 [DEBUG] [Thread-18966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:34:08.668 [DEBUG] [Thread-18967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:34:16.448 [DEBUG] [Thread-18968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:34:19.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:34:19.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:34:19.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
2026-04-15T12:34:21.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 34, 8), 6.29142, 65.5434, 0.0, 23.7488, 13.0429, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:34:21.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:34:08
2026-04-15T12:34:21.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:34:21.900 [DEBUG] [Thread-18969] [transport.py] [_log()] starting thread (client mode): 0xf13eef80
2026-04-15T12:34:21.900 [DEBUG] [Thread-18969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:34:21.920 [DEBUG] [Thread-18969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:34:21.920 [INFO] [Thread-18969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:34:21.923 [DEBUG] [Thread-18969] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:34:21.924 [DEBUG] [Thread-18969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:34:21.924 [DEBUG] [Thread-18969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:34:21.924 [DEBUG] [Thread-18969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:34:21.924 [DEBUG] [Thread-18969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:34:21.924 [DEBUG] [Thread-18969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:34:21.924 [DEBUG] [Thread-18969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:34:21.924 [DEBUG] [Thread-18969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:34:21.924 [DEBUG] [Thread-18969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:34:21.924 [DEBUG] [Thread-18969] [transport.py] [_log()] client lang: <none>
2026-04-15T12:34:21.924 [DEBUG] [Thread-18969] [transport.py] [_log()] server lang: <none>
2026-04-15T12:34:21.924 [DEBUG] [Thread-18969] [transport.py] [_log()] kex follows: False
2026-04-15T12:34:21.925 [DEBUG] [Thread-18969] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:34:21.925 [DEBUG] [Thread-18969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:34:21.925 [DEBUG] [Thread-18969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:34:21.925 [DEBUG] [Thread-18969] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:34:21.925 [DEBUG] [Thread-18969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:34:21.925 [DEBUG] [Thread-18969] [transport.py] [_log()] Compression: none
2026-04-15T12:34:21.925 [DEBUG] [Thread-18969] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:34:21.941 [DEBUG] [Thread-18969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:34:21.942 [DEBUG] [Thread-18969] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:34:21.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:34:21.942 [DEBUG] [Thread-18969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:34:21.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:34:21.943 [DEBUG] [Thread-18969] [transport.py] [_log()] userauth is OK
2026-04-15T12:34:21.943 [DEBUG] [Thread-18969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:34:21.944 [DEBUG] [Thread-18969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:34:21.944 [DEBUG] [Thread-18969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:34:21.944 [DEBUG] [Thread-18969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:34:21.962 [INFO] [Thread-18969] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:34:21.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:34:22.546 [DEBUG] [Thread-18969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:34:22.546 [DEBUG] [Thread-18969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:34:22.547 [DEBUG] [Thread-18969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:34:22.587 [DEBUG] [Thread-18969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:34:22.587 [DEBUG] [Thread-18969] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:34:22.589 [DEBUG] [Thread-18969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:34:22.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:34:22.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:34:22.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:34:22.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:34:22.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:34:22.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:34:22.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:34:22.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:34:22.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:34:22.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.440416 -999.00  +12.30  21.08     72   +7.60 1 2 1 1 1   888    0 5.28 21.94 ----- 22.0 21.1 304.7 24.9 18.6 -13.7 17.9 -10.4 17.4 -11.5 18.2 -15.0
2026-04-15T12:34:22.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:34:22.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:34:22.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.440416
2026-04-15T12:34:22.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:34:22.614 [DEBUG] [Thread-18969] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:34:22.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:34:22.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:34:22.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:34:22.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:34:22.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:34:08', tmtdew=6.29142, humidity=65.5434, cloud=0.0, wind=23.7488, temperature=13.0429, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:34:11.942', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:34:22.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:34:22.870 [DEBUG] [Thread-18972] [transport.py] [_log()] starting thread (client mode): 0xf13efe50
2026-04-15T12:34:22.871 [DEBUG] [Thread-18972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:34:22.885 [DEBUG] [Thread-18972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:34:22.885 [INFO] [Thread-18972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:34:22.893 [DEBUG] [Thread-18972] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:34:22.893 [DEBUG] [Thread-18972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:34:22.893 [DEBUG] [Thread-18972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:34:22.893 [DEBUG] [Thread-18972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:34:22.893 [DEBUG] [Thread-18972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:34:22.893 [DEBUG] [Thread-18972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:34:22.893 [DEBUG] [Thread-18972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:34:22.893 [DEBUG] [Thread-18972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:34:22.893 [DEBUG] [Thread-18972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:34:22.893 [DEBUG] [Thread-18972] [transport.py] [_log()] client lang: <none>
2026-04-15T12:34:22.894 [DEBUG] [Thread-18972] [transport.py] [_log()] server lang: <none>
2026-04-15T12:34:22.894 [DEBUG] [Thread-18972] [transport.py] [_log()] kex follows: False
2026-04-15T12:34:22.894 [DEBUG] [Thread-18972] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:34:22.894 [DEBUG] [Thread-18972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:34:22.894 [DEBUG] [Thread-18972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:34:22.894 [DEBUG] [Thread-18972] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:34:22.894 [DEBUG] [Thread-18972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:34:22.894 [DEBUG] [Thread-18972] [transport.py] [_log()] Compression: none
2026-04-15T12:34:22.894 [DEBUG] [Thread-18972] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:34:22.949 [DEBUG] [Thread-18972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:34:22.950 [DEBUG] [Thread-18972] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:34:22.950 [DEBUG] [Thread-18972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:34:22.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:34:22.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:34:23.011 [DEBUG] [Thread-18972] [transport.py] [_log()] userauth is OK
2026-04-15T12:34:23.011 [DEBUG] [Thread-18972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:34:23.012 [DEBUG] [Thread-18972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:34:23.012 [DEBUG] [Thread-18972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:34:23.012 [DEBUG] [Thread-18972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:34:23.039 [INFO] [Thread-18972] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:34:23.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:34:23.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:34:23.699 [DEBUG] [Thread-18974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:34:23.876 [DEBUG] [Thread-18972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:34:23.877 [DEBUG] [Thread-18972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:34:23.924 [DEBUG] [Thread-18972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:34:23.924 [DEBUG] [Thread-18972] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:34:23.933 [DEBUG] [Thread-18972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:34:23.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:34:23.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')
2026-04-15T12:34:23.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
2026-04-15T12:34:23.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:34:23.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:34:23.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:34:23.967 [DEBUG] [Thread-18972] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:34:38.745 [DEBUG] [Thread-18975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:34:47.310 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:34:47.311 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:34:53.779 [DEBUG] [Thread-18976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:34:53.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:34:53.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:34:53.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
2026-04-15T12:34:55.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 34, 44), 6.90939, 63.1254, 0.0, 27.3103, 14.3852, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:34:55.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:34:44
2026-04-15T12:34:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:34:56.175 [DEBUG] [Thread-18977] [transport.py] [_log()] starting thread (client mode): 0xf13fdc00
2026-04-15T12:34:56.175 [DEBUG] [Thread-18977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:34:56.185 [DEBUG] [Thread-18977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:34:56.186 [INFO] [Thread-18977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:34:56.187 [DEBUG] [Thread-18977] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:34:56.187 [DEBUG] [Thread-18977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:34:56.187 [DEBUG] [Thread-18977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:34:56.187 [DEBUG] [Thread-18977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:34:56.187 [DEBUG] [Thread-18977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:34:56.188 [DEBUG] [Thread-18977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:34:56.188 [DEBUG] [Thread-18977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:34:56.188 [DEBUG] [Thread-18977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:34:56.188 [DEBUG] [Thread-18977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:34:56.188 [DEBUG] [Thread-18977] [transport.py] [_log()] client lang: <none>
2026-04-15T12:34:56.188 [DEBUG] [Thread-18977] [transport.py] [_log()] server lang: <none>
2026-04-15T12:34:56.188 [DEBUG] [Thread-18977] [transport.py] [_log()] kex follows: False
2026-04-15T12:34:56.188 [DEBUG] [Thread-18977] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:34:56.188 [DEBUG] [Thread-18977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:34:56.188 [DEBUG] [Thread-18977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:34:56.188 [DEBUG] [Thread-18977] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:34:56.188 [DEBUG] [Thread-18977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:34:56.189 [DEBUG] [Thread-18977] [transport.py] [_log()] Compression: none
2026-04-15T12:34:56.189 [DEBUG] [Thread-18977] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:34:56.200 [DEBUG] [Thread-18977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:34:56.201 [DEBUG] [Thread-18977] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:34:56.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:34:56.201 [DEBUG] [Thread-18977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:34:56.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:34:56.202 [DEBUG] [Thread-18977] [transport.py] [_log()] userauth is OK
2026-04-15T12:34:56.202 [DEBUG] [Thread-18977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:34:56.202 [DEBUG] [Thread-18977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:34:56.202 [DEBUG] [Thread-18977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:34:56.202 [DEBUG] [Thread-18977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:34:56.216 [INFO] [Thread-18977] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:34:56.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:34:56.815 [DEBUG] [Thread-18977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:34:56.816 [DEBUG] [Thread-18977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:34:56.816 [DEBUG] [Thread-18977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:34:56.856 [DEBUG] [Thread-18977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:34:56.856 [DEBUG] [Thread-18977] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:34:56.858 [DEBUG] [Thread-18977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:34:56.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:34:56.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:34:56.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:34:56.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:34:56.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:34:56.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:34:56.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:34:56.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:34:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:34:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.440763 -999.00  +12.50  24.68     71   +7.60 1 2 1 1 1   888    0 5.14 17.03 ----- 23.3 24.7 318.5 32.3 18.5 -17.1 17.7 -13.5 17.3 -14.3 18.1 -18.6
2026-04-15T12:34:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:34:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:34:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.440763
2026-04-15T12:34:56.883 [DEBUG] [Thread-18977] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:34:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:34:56.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:34:56.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:34:56.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:34:56.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:34:56.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:34:44', tmtdew=6.90939, humidity=63.1254, cloud=0.0, wind=27.3103, temperature=14.3852, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:34:41.923', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:34:57.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:34:57.139 [DEBUG] [Thread-18980] [transport.py] [_log()] starting thread (client mode): 0xf13c98a0
2026-04-15T12:34:57.139 [DEBUG] [Thread-18980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:34:57.153 [DEBUG] [Thread-18980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:34:57.153 [INFO] [Thread-18980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:34:57.161 [DEBUG] [Thread-18980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:34:57.161 [DEBUG] [Thread-18980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:34:57.161 [DEBUG] [Thread-18980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:34:57.161 [DEBUG] [Thread-18980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:34:57.161 [DEBUG] [Thread-18980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:34:57.161 [DEBUG] [Thread-18980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:34:57.161 [DEBUG] [Thread-18980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:34:57.161 [DEBUG] [Thread-18980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:34:57.161 [DEBUG] [Thread-18980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:34:57.161 [DEBUG] [Thread-18980] [transport.py] [_log()] client lang: <none>
2026-04-15T12:34:57.161 [DEBUG] [Thread-18980] [transport.py] [_log()] server lang: <none>
2026-04-15T12:34:57.162 [DEBUG] [Thread-18980] [transport.py] [_log()] kex follows: False
2026-04-15T12:34:57.162 [DEBUG] [Thread-18980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:34:57.162 [DEBUG] [Thread-18980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:34:57.162 [DEBUG] [Thread-18980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:34:57.162 [DEBUG] [Thread-18980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:34:57.162 [DEBUG] [Thread-18980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:34:57.162 [DEBUG] [Thread-18980] [transport.py] [_log()] Compression: none
2026-04-15T12:34:57.162 [DEBUG] [Thread-18980] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:34:57.218 [DEBUG] [Thread-18980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:34:57.218 [DEBUG] [Thread-18980] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:34:57.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:34:57.219 [DEBUG] [Thread-18980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:34:57.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:34:57.275 [DEBUG] [Thread-18980] [transport.py] [_log()] userauth is OK
2026-04-15T12:34:57.275 [DEBUG] [Thread-18980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:34:57.275 [DEBUG] [Thread-18980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:34:57.275 [DEBUG] [Thread-18980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:34:57.276 [DEBUG] [Thread-18980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:34:57.301 [INFO] [Thread-18980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:34:57.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:34:57.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:34:58.117 [DEBUG] [Thread-18980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:34:58.118 [DEBUG] [Thread-18980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:34:58.170 [DEBUG] [Thread-18980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:34:58.171 [DEBUG] [Thread-18980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:34:58.180 [DEBUG] [Thread-18980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:34:58.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:34:58.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')
2026-04-15T12:34: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') -> 00000000
2026-04-15T12:34:58.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:34:58.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:34:58.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:34:58.214 [DEBUG] [Thread-18980] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:35:08.810 [DEBUG] [Thread-18982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:35:16.564 [DEBUG] [Thread-18983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:35:23.854 [DEBUG] [Thread-18984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:35:28.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:35:28.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:35:28.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
2026-04-15T12:35:29.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 35, 20), 6.68236, 63.6177, 0.0, 21.5438, 13.242, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:35:29.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:35:20
2026-04-15T12:35:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:35:30.348 [DEBUG] [Thread-18985] [transport.py] [_log()] starting thread (client mode): 0xee989690
2026-04-15T12:35:30.349 [DEBUG] [Thread-18985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:35:30.368 [DEBUG] [Thread-18985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:35:30.368 [INFO] [Thread-18985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:35:30.371 [DEBUG] [Thread-18985] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:35:30.371 [DEBUG] [Thread-18985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:35:30.371 [DEBUG] [Thread-18985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:35:30.372 [DEBUG] [Thread-18985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:35:30.372 [DEBUG] [Thread-18985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:35:30.372 [DEBUG] [Thread-18985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:35:30.372 [DEBUG] [Thread-18985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:35:30.372 [DEBUG] [Thread-18985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:35:30.372 [DEBUG] [Thread-18985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:35:30.372 [DEBUG] [Thread-18985] [transport.py] [_log()] client lang: <none>
2026-04-15T12:35:30.372 [DEBUG] [Thread-18985] [transport.py] [_log()] server lang: <none>
2026-04-15T12:35:30.372 [DEBUG] [Thread-18985] [transport.py] [_log()] kex follows: False
2026-04-15T12:35:30.372 [DEBUG] [Thread-18985] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:35:30.372 [DEBUG] [Thread-18985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:35:30.373 [DEBUG] [Thread-18985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:35:30.373 [DEBUG] [Thread-18985] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:35:30.373 [DEBUG] [Thread-18985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:35:30.373 [DEBUG] [Thread-18985] [transport.py] [_log()] Compression: none
2026-04-15T12:35:30.373 [DEBUG] [Thread-18985] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:35:30.390 [DEBUG] [Thread-18985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:35:30.390 [DEBUG] [Thread-18985] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:35:30.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:35:30.391 [DEBUG] [Thread-18985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:35:30.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:35:30.392 [DEBUG] [Thread-18985] [transport.py] [_log()] userauth is OK
2026-04-15T12:35:30.392 [DEBUG] [Thread-18985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:35:30.392 [DEBUG] [Thread-18985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:35:30.392 [DEBUG] [Thread-18985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:35:30.392 [DEBUG] [Thread-18985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:35:30.427 [INFO] [Thread-18985] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:35:30.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:35:31.024 [DEBUG] [Thread-18985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:35:31.024 [DEBUG] [Thread-18985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:35:31.025 [DEBUG] [Thread-18985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:35:31.064 [DEBUG] [Thread-18985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:35:31.065 [DEBUG] [Thread-18985] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:35:31.068 [DEBUG] [Thread-18985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:35:31.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:35:31.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:35:31.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:35:31.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:35:31.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:35:31.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:35:31.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:35:31.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:35:31.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:35:31.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.441111 -999.00  +12.80  21.76     72   +7.90 1 2 1 1 1   888    0 5.04 15.59 ----- 27.2 21.8 319.8 25.6 18.8 -16.1 17.7 -15.9 17.2 -15.6 18.5 -16.5
2026-04-15T12:35:31.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:35:31.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:35:31.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.441111
2026-04-15T12:35:31.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:35:31.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:35:31.090 [DEBUG] [Thread-18985] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:35:31.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:35:31.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:35:31.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:35:31.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:35:20', tmtdew=6.68236, humidity=63.6177, cloud=0.0, wind=21.5438, temperature=13.242, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:35:11.990', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:35:31.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:35:31.339 [DEBUG] [Thread-18988] [transport.py] [_log()] starting thread (client mode): 0xf1366f80
2026-04-15T12:35:31.339 [DEBUG] [Thread-18988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:35:31.355 [DEBUG] [Thread-18988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:35:31.355 [INFO] [Thread-18988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:35:31.362 [DEBUG] [Thread-18988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:35:31.362 [DEBUG] [Thread-18988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:35:31.362 [DEBUG] [Thread-18988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:35:31.362 [DEBUG] [Thread-18988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:35:31.362 [DEBUG] [Thread-18988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:35:31.362 [DEBUG] [Thread-18988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:35:31.362 [DEBUG] [Thread-18988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:35:31.362 [DEBUG] [Thread-18988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:35:31.363 [DEBUG] [Thread-18988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:35:31.363 [DEBUG] [Thread-18988] [transport.py] [_log()] client lang: <none>
2026-04-15T12:35:31.363 [DEBUG] [Thread-18988] [transport.py] [_log()] server lang: <none>
2026-04-15T12:35:31.363 [DEBUG] [Thread-18988] [transport.py] [_log()] kex follows: False
2026-04-15T12:35:31.363 [DEBUG] [Thread-18988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:35:31.363 [DEBUG] [Thread-18988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:35:31.363 [DEBUG] [Thread-18988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:35:31.363 [DEBUG] [Thread-18988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:35:31.363 [DEBUG] [Thread-18988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:35:31.363 [DEBUG] [Thread-18988] [transport.py] [_log()] Compression: none
2026-04-15T12:35:31.363 [DEBUG] [Thread-18988] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:35:31.418 [DEBUG] [Thread-18988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:35:31.419 [DEBUG] [Thread-18988] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:35:31.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:35:31.419 [DEBUG] [Thread-18988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:35:31.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:35:31.476 [DEBUG] [Thread-18988] [transport.py] [_log()] userauth is OK
2026-04-15T12:35:31.476 [DEBUG] [Thread-18988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:35:31.476 [DEBUG] [Thread-18988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:35:31.476 [DEBUG] [Thread-18988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:35:31.476 [DEBUG] [Thread-18988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:35:31.502 [INFO] [Thread-18988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:35:31.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:35:31.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:35:32.386 [DEBUG] [Thread-18988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:35:32.386 [DEBUG] [Thread-18988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:35:32.434 [DEBUG] [Thread-18988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:35:32.434 [DEBUG] [Thread-18988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:35:32.443 [DEBUG] [Thread-18988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:35:32.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:35:32.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')
2026-04-15T12:35:32.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
2026-04-15T12:35:32.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:35:32.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:35:32.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:35:32.478 [DEBUG] [Thread-18988] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:35:38.887 [DEBUG] [Thread-18990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:35:47.453 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:35:47.454 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:35:53.933 [DEBUG] [Thread-18991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:36:02.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:36:02.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:36:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:36:03.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 35, 56), 6.94003, 62.8691, 0.0, 20.9081, 13.3089, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:36:03.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:35:56
2026-04-15T12:36:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:36:04.566 [DEBUG] [Thread-18992] [transport.py] [_log()] starting thread (client mode): 0xf13c83a0
2026-04-15T12:36:04.566 [DEBUG] [Thread-18992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:36:04.582 [DEBUG] [Thread-18992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:36:04.583 [INFO] [Thread-18992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:36:04.584 [DEBUG] [Thread-18992] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:36:04.584 [DEBUG] [Thread-18992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:36:04.584 [DEBUG] [Thread-18992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:36:04.584 [DEBUG] [Thread-18992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:36:04.585 [DEBUG] [Thread-18992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:36:04.585 [DEBUG] [Thread-18992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:36:04.585 [DEBUG] [Thread-18992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:36:04.585 [DEBUG] [Thread-18992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:36:04.585 [DEBUG] [Thread-18992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:36:04.585 [DEBUG] [Thread-18992] [transport.py] [_log()] client lang: <none>
2026-04-15T12:36:04.585 [DEBUG] [Thread-18992] [transport.py] [_log()] server lang: <none>
2026-04-15T12:36:04.585 [DEBUG] [Thread-18992] [transport.py] [_log()] kex follows: False
2026-04-15T12:36:04.585 [DEBUG] [Thread-18992] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:36:04.585 [DEBUG] [Thread-18992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:36:04.585 [DEBUG] [Thread-18992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:36:04.586 [DEBUG] [Thread-18992] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:36:04.586 [DEBUG] [Thread-18992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:36:04.586 [DEBUG] [Thread-18992] [transport.py] [_log()] Compression: none
2026-04-15T12:36:04.586 [DEBUG] [Thread-18992] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:36:04.599 [DEBUG] [Thread-18992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:36:04.600 [DEBUG] [Thread-18992] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:36:04.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:36:04.600 [DEBUG] [Thread-18992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:36:04.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:36:04.601 [DEBUG] [Thread-18992] [transport.py] [_log()] userauth is OK
2026-04-15T12:36:04.602 [DEBUG] [Thread-18992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:36:04.602 [DEBUG] [Thread-18992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:36:04.602 [DEBUG] [Thread-18992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:36:04.602 [DEBUG] [Thread-18992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:36:04.620 [INFO] [Thread-18992] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:36:04.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:36:05.198 [DEBUG] [Thread-18992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:36:05.198 [DEBUG] [Thread-18992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:36:05.198 [DEBUG] [Thread-18992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:36:05.239 [DEBUG] [Thread-18992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:36:05.239 [DEBUG] [Thread-18992] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:36:05.241 [DEBUG] [Thread-18992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:36:05.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:36:05.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:36:05.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:36:05.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:36:05.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:36:05.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:36:05.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:36:05.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:36:05.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:36:05.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.441458 -999.00  +13.00  19.71     70   +7.80 1 2 1 1 1   888    0 4.94 14.59 ----- 19.7 19.7 295.4 32.3 19.1 -19.6 17.9 -18.0 17.6 -16.4 18.6 -18.4
2026-04-15T12:36:05.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:36:05.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:36:05.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.441458
2026-04-15T12:36:05.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:36:05.258 [DEBUG] [Thread-18992] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:36:05.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:36:05.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:36:05.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:36:05.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:36:05.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:35:56', tmtdew=6.94003, humidity=62.8691, cloud=0.0, wind=20.9081, temperature=13.3089, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:35:41.971', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:36:05.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:36:05.514 [DEBUG] [Thread-18995] [transport.py] [_log()] starting thread (client mode): 0xf13c9900
2026-04-15T12:36:05.514 [DEBUG] [Thread-18995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:36:05.529 [DEBUG] [Thread-18995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:36:05.529 [INFO] [Thread-18995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:36:05.536 [DEBUG] [Thread-18995] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:36:05.536 [DEBUG] [Thread-18995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:36:05.536 [DEBUG] [Thread-18995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:36:05.536 [DEBUG] [Thread-18995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:36:05.537 [DEBUG] [Thread-18995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:36:05.537 [DEBUG] [Thread-18995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:36:05.537 [DEBUG] [Thread-18995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:36:05.537 [DEBUG] [Thread-18995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:36:05.537 [DEBUG] [Thread-18995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:36:05.537 [DEBUG] [Thread-18995] [transport.py] [_log()] client lang: <none>
2026-04-15T12:36:05.537 [DEBUG] [Thread-18995] [transport.py] [_log()] server lang: <none>
2026-04-15T12:36:05.537 [DEBUG] [Thread-18995] [transport.py] [_log()] kex follows: False
2026-04-15T12:36:05.537 [DEBUG] [Thread-18995] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:36:05.537 [DEBUG] [Thread-18995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:36:05.537 [DEBUG] [Thread-18995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:36:05.538 [DEBUG] [Thread-18995] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:36:05.538 [DEBUG] [Thread-18995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:36:05.538 [DEBUG] [Thread-18995] [transport.py] [_log()] Compression: none
2026-04-15T12:36:05.538 [DEBUG] [Thread-18995] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:36:05.600 [DEBUG] [Thread-18995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:36:05.600 [DEBUG] [Thread-18995] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:36:05.600 [DEBUG] [Thread-18995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:36:05.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:36:05.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:36:05.656 [DEBUG] [Thread-18995] [transport.py] [_log()] userauth is OK
2026-04-15T12:36:05.657 [DEBUG] [Thread-18995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:36:05.657 [DEBUG] [Thread-18995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:36:05.657 [DEBUG] [Thread-18995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:36:05.657 [DEBUG] [Thread-18995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:36:05.684 [INFO] [Thread-18995] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:36:05.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:36:05.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:36:06.508 [DEBUG] [Thread-18995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:36:06.508 [DEBUG] [Thread-18995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:36:06.557 [DEBUG] [Thread-18995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:36:06.557 [DEBUG] [Thread-18995] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:36:06.566 [DEBUG] [Thread-18995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:36:06.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:36:06.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')
2026-04-15T12:36: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
2026-04-15T12:36:06.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:36:06.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:36:06.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:36:06.602 [DEBUG] [Thread-18995] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:36:08.966 [DEBUG] [Thread-18997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:36:16.677 [DEBUG] [Thread-18998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:36:24.009 [DEBUG] [Thread-18999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:36:36.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:36:36.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:36:36.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
2026-04-15T12:36:37.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 35, 56), 6.94003, 62.8691, 0.0, 20.9081, 13.3089, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:36:37.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:35:56
2026-04-15T12:36:38.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:36:38.702 [DEBUG] [Thread-19000] [transport.py] [_log()] starting thread (client mode): 0xee98d8a0
2026-04-15T12:36:38.702 [DEBUG] [Thread-19000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:36:38.721 [DEBUG] [Thread-19000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:36:38.721 [INFO] [Thread-19000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:36:38.725 [DEBUG] [Thread-19000] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:36:38.725 [DEBUG] [Thread-19000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:36:38.725 [DEBUG] [Thread-19000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:36:38.725 [DEBUG] [Thread-19000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:36:38.725 [DEBUG] [Thread-19000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:36:38.725 [DEBUG] [Thread-19000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:36:38.725 [DEBUG] [Thread-19000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:36:38.725 [DEBUG] [Thread-19000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:36:38.725 [DEBUG] [Thread-19000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:36:38.725 [DEBUG] [Thread-19000] [transport.py] [_log()] client lang: <none>
2026-04-15T12:36:38.725 [DEBUG] [Thread-19000] [transport.py] [_log()] server lang: <none>
2026-04-15T12:36:38.725 [DEBUG] [Thread-19000] [transport.py] [_log()] kex follows: False
2026-04-15T12:36:38.726 [DEBUG] [Thread-19000] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:36:38.726 [DEBUG] [Thread-19000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:36:38.726 [DEBUG] [Thread-19000] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:36:38.726 [DEBUG] [Thread-19000] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:36:38.726 [DEBUG] [Thread-19000] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:36:38.726 [DEBUG] [Thread-19000] [transport.py] [_log()] Compression: none
2026-04-15T12:36:38.726 [DEBUG] [Thread-19000] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:36:38.744 [DEBUG] [Thread-19000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:36:38.744 [DEBUG] [Thread-19000] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:36:38.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:36:38.745 [DEBUG] [Thread-19000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:36:38.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:36:38.746 [DEBUG] [Thread-19000] [transport.py] [_log()] userauth is OK
2026-04-15T12:36:38.746 [DEBUG] [Thread-19000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:36:38.746 [DEBUG] [Thread-19000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:36:38.746 [DEBUG] [Thread-19000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:36:38.746 [DEBUG] [Thread-19000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:36:38.770 [INFO] [Thread-19000] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:36:38.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:36:39.041 [DEBUG] [Thread-19002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:36:39.362 [DEBUG] [Thread-19000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:36:39.362 [DEBUG] [Thread-19000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:36:39.362 [DEBUG] [Thread-19000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:36:39.402 [DEBUG] [Thread-19000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:36:39.403 [DEBUG] [Thread-19000] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:36:39.404 [DEBUG] [Thread-19000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:36:39.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:36:39.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:36:39.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:36:39.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:36:39.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:36:39.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:36:39.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:36:39.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:36:39.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:36:39.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.441805 -999.00  +13.00  19.67     69   +7.60 1 2 1 1 1   888    0 5.16 15.84 ----- 25.5 19.7 315.6 27.1 19.3 -19.6 18.1 -19.6 17.7 -17.1 18.9 -17.7
2026-04-15T12:36:39.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:36:39.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:36:39.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.441805
2026-04-15T12:36:39.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:36:39.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:36:39.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:36:39.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:36:39.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:36:39.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:35:56', tmtdew=6.94003, humidity=62.8691, cloud=0.0, wind=20.9081, temperature=13.3089, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:36:11.952', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:36:39.415 [DEBUG] [Thread-19000] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:36:39.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:36:39.638 [DEBUG] [Thread-19004] [transport.py] [_log()] starting thread (client mode): 0xee98fbb0
2026-04-15T12:36:39.638 [DEBUG] [Thread-19004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:36:39.652 [DEBUG] [Thread-19004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:36:39.652 [INFO] [Thread-19004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:36:39.659 [DEBUG] [Thread-19004] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:36:39.660 [DEBUG] [Thread-19004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:36:39.660 [DEBUG] [Thread-19004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:36:39.660 [DEBUG] [Thread-19004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:36:39.660 [DEBUG] [Thread-19004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:36:39.660 [DEBUG] [Thread-19004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:36:39.660 [DEBUG] [Thread-19004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:36:39.660 [DEBUG] [Thread-19004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:36:39.660 [DEBUG] [Thread-19004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:36:39.660 [DEBUG] [Thread-19004] [transport.py] [_log()] client lang: <none>
2026-04-15T12:36:39.660 [DEBUG] [Thread-19004] [transport.py] [_log()] server lang: <none>
2026-04-15T12:36:39.660 [DEBUG] [Thread-19004] [transport.py] [_log()] kex follows: False
2026-04-15T12:36:39.661 [DEBUG] [Thread-19004] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:36:39.661 [DEBUG] [Thread-19004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:36:39.661 [DEBUG] [Thread-19004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:36:39.661 [DEBUG] [Thread-19004] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:36:39.661 [DEBUG] [Thread-19004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:36:39.661 [DEBUG] [Thread-19004] [transport.py] [_log()] Compression: none
2026-04-15T12:36:39.661 [DEBUG] [Thread-19004] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:36:39.717 [DEBUG] [Thread-19004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:36:39.717 [DEBUG] [Thread-19004] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:36:39.717 [DEBUG] [Thread-19004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:36:39.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:36:39.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:36:39.779 [DEBUG] [Thread-19004] [transport.py] [_log()] userauth is OK
2026-04-15T12:36:39.779 [DEBUG] [Thread-19004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:36:39.779 [DEBUG] [Thread-19004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:36:39.779 [DEBUG] [Thread-19004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:36:39.779 [DEBUG] [Thread-19004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:36:39.804 [INFO] [Thread-19004] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:36:39.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:36:39.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:36:40.649 [DEBUG] [Thread-19004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:36:40.649 [DEBUG] [Thread-19004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:36:40.697 [DEBUG] [Thread-19004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:36:40.697 [DEBUG] [Thread-19004] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:36:40.706 [DEBUG] [Thread-19004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:36:40.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:36:40.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')
2026-04-15T12:36:40.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
2026-04-15T12:36:40.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:36:40.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:36:40.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:36:40.741 [DEBUG] [Thread-19004] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:36:47.595 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:36:47.596 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:36:54.072 [DEBUG] [Thread-19006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:37:09.115 [DEBUG] [Thread-19007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:37:10.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:37:10.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:37:10.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
2026-04-15T12:37:12.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 36, 31), 6.97081, 62.753, 0.0, 20.9081, 13.3585, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:37:12.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:36:31
2026-04-15T12:37:12.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:37:12.911 [DEBUG] [Thread-19008] [transport.py] [_log()] starting thread (client mode): 0xee98e500
2026-04-15T12:37:12.911 [DEBUG] [Thread-19008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:37:12.930 [DEBUG] [Thread-19008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:37:12.930 [INFO] [Thread-19008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:37:12.933 [DEBUG] [Thread-19008] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:37:12.933 [DEBUG] [Thread-19008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:37:12.933 [DEBUG] [Thread-19008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:37:12.933 [DEBUG] [Thread-19008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:37:12.933 [DEBUG] [Thread-19008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:37:12.933 [DEBUG] [Thread-19008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:37:12.933 [DEBUG] [Thread-19008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:37:12.933 [DEBUG] [Thread-19008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:37:12.933 [DEBUG] [Thread-19008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:37:12.933 [DEBUG] [Thread-19008] [transport.py] [_log()] client lang: <none>
2026-04-15T12:37:12.933 [DEBUG] [Thread-19008] [transport.py] [_log()] server lang: <none>
2026-04-15T12:37:12.934 [DEBUG] [Thread-19008] [transport.py] [_log()] kex follows: False
2026-04-15T12:37:12.934 [DEBUG] [Thread-19008] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:37:12.934 [DEBUG] [Thread-19008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:37:12.934 [DEBUG] [Thread-19008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:37:12.934 [DEBUG] [Thread-19008] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:37:12.934 [DEBUG] [Thread-19008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:37:12.934 [DEBUG] [Thread-19008] [transport.py] [_log()] Compression: none
2026-04-15T12:37:12.934 [DEBUG] [Thread-19008] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:37:12.949 [DEBUG] [Thread-19008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:37:12.950 [DEBUG] [Thread-19008] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:37:12.950 [DEBUG] [Thread-19008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:37:12.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:37:12.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:37:12.951 [DEBUG] [Thread-19008] [transport.py] [_log()] userauth is OK
2026-04-15T12:37:12.951 [DEBUG] [Thread-19008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:37:12.951 [DEBUG] [Thread-19008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:37:12.951 [DEBUG] [Thread-19008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:37:12.952 [DEBUG] [Thread-19008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:37:12.968 [INFO] [Thread-19008] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:37:12.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:37:13.590 [DEBUG] [Thread-19008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:37:13.590 [DEBUG] [Thread-19008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:37:13.590 [DEBUG] [Thread-19008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:37:13.630 [DEBUG] [Thread-19008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:37:13.631 [DEBUG] [Thread-19008] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:37:13.632 [DEBUG] [Thread-19008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:37:13.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:37:13.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:37:13.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:37:13.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:37:13.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:37:13.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:37:13.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:37:13.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:37:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:37:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.442152 -999.00  +13.20  19.04     70   +7.90 1 2 1 1 1   888    0 5.22 15.81 ----- 24.1 19.0 291.6 28.6 19.4 -21.3 18.2 -19.7 17.8 -16.6 19.0 -17.6
2026-04-15T12:37:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:37:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:37:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.442152
2026-04-15T12:37:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:37:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:37:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:37:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:37:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:37:13.647 [DEBUG] [Thread-19008] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:37:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:36:31', tmtdew=6.97081, humidity=62.753, cloud=0.0, wind=20.9081, temperature=13.3585, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:36:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:37:13.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:37:13.875 [DEBUG] [Thread-19011] [transport.py] [_log()] starting thread (client mode): 0xee907cd0
2026-04-15T12:37:13.876 [DEBUG] [Thread-19011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:37:13.890 [DEBUG] [Thread-19011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:37:13.890 [INFO] [Thread-19011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:37:13.897 [DEBUG] [Thread-19011] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:37:13.897 [DEBUG] [Thread-19011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:37:13.897 [DEBUG] [Thread-19011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:37:13.898 [DEBUG] [Thread-19011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:37:13.898 [DEBUG] [Thread-19011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:37:13.898 [DEBUG] [Thread-19011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:37:13.898 [DEBUG] [Thread-19011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:37:13.898 [DEBUG] [Thread-19011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:37:13.898 [DEBUG] [Thread-19011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:37:13.898 [DEBUG] [Thread-19011] [transport.py] [_log()] client lang: <none>
2026-04-15T12:37:13.898 [DEBUG] [Thread-19011] [transport.py] [_log()] server lang: <none>
2026-04-15T12:37:13.898 [DEBUG] [Thread-19011] [transport.py] [_log()] kex follows: False
2026-04-15T12:37:13.898 [DEBUG] [Thread-19011] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:37:13.898 [DEBUG] [Thread-19011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:37:13.899 [DEBUG] [Thread-19011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:37:13.899 [DEBUG] [Thread-19011] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:37:13.899 [DEBUG] [Thread-19011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:37:13.899 [DEBUG] [Thread-19011] [transport.py] [_log()] Compression: none
2026-04-15T12:37:13.899 [DEBUG] [Thread-19011] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:37:13.956 [DEBUG] [Thread-19011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:37:13.956 [DEBUG] [Thread-19011] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:37:13.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:37:13.957 [DEBUG] [Thread-19011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:37:13.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:37:14.013 [DEBUG] [Thread-19011] [transport.py] [_log()] userauth is OK
2026-04-15T12:37:14.013 [DEBUG] [Thread-19011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:37:14.013 [DEBUG] [Thread-19011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:37:14.013 [DEBUG] [Thread-19011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:37:14.013 [DEBUG] [Thread-19011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:37:14.038 [INFO] [Thread-19011] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:37:14.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:37:14.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:37:14.874 [DEBUG] [Thread-19011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:37:14.874 [DEBUG] [Thread-19011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:37:14.922 [DEBUG] [Thread-19011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:37:14.922 [DEBUG] [Thread-19011] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:37:14.931 [DEBUG] [Thread-19011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:37:14.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:37:14.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')
2026-04-15T12:37: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') -> 00000000
2026-04-15T12:37:14.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:37:14.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:37:14.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:37:14.965 [DEBUG] [Thread-19011] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:37:16.757 [DEBUG] [Thread-19013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:37:24.146 [DEBUG] [Thread-19014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:37:39.192 [DEBUG] [Thread-19015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:37:44.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:37:44.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:37:44.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:37:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 37, 7), 7.01623, 62.5374, 0.0, 20.2907, 13.2424, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:37:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:37:07
2026-04-15T12:37:46.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:37:47.137 [DEBUG] [Thread-19016] [transport.py] [_log()] starting thread (client mode): 0xf13ffc10
2026-04-15T12:37:47.137 [DEBUG] [Thread-19016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:37:47.157 [DEBUG] [Thread-19016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:37:47.157 [INFO] [Thread-19016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:37:47.160 [DEBUG] [Thread-19016] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:37:47.160 [DEBUG] [Thread-19016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:37:47.160 [DEBUG] [Thread-19016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:37:47.160 [DEBUG] [Thread-19016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:37:47.160 [DEBUG] [Thread-19016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:37:47.160 [DEBUG] [Thread-19016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:37:47.161 [DEBUG] [Thread-19016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:37:47.161 [DEBUG] [Thread-19016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:37:47.161 [DEBUG] [Thread-19016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:37:47.161 [DEBUG] [Thread-19016] [transport.py] [_log()] client lang: <none>
2026-04-15T12:37:47.161 [DEBUG] [Thread-19016] [transport.py] [_log()] server lang: <none>
2026-04-15T12:37:47.161 [DEBUG] [Thread-19016] [transport.py] [_log()] kex follows: False
2026-04-15T12:37:47.161 [DEBUG] [Thread-19016] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:37:47.161 [DEBUG] [Thread-19016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:37:47.161 [DEBUG] [Thread-19016] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:37:47.161 [DEBUG] [Thread-19016] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:37:47.161 [DEBUG] [Thread-19016] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:37:47.161 [DEBUG] [Thread-19016] [transport.py] [_log()] Compression: none
2026-04-15T12:37:47.162 [DEBUG] [Thread-19016] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:37:47.171 [DEBUG] [Thread-19016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:37:47.171 [DEBUG] [Thread-19016] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:37:47.171 [DEBUG] [Thread-19016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:37:47.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:37:47.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:37:47.172 [DEBUG] [Thread-19016] [transport.py] [_log()] userauth is OK
2026-04-15T12:37:47.173 [DEBUG] [Thread-19016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:37:47.173 [DEBUG] [Thread-19016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:37:47.173 [DEBUG] [Thread-19016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:37:47.173 [DEBUG] [Thread-19016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:37:47.196 [INFO] [Thread-19016] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:37:47.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:37:47.735 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:37:47.736 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:37:47.765 [DEBUG] [Thread-19016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:37:47.765 [DEBUG] [Thread-19016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:37:47.766 [DEBUG] [Thread-19016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:37:47.805 [DEBUG] [Thread-19016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:37:47.806 [DEBUG] [Thread-19016] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:37:47.807 [DEBUG] [Thread-19016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:37:47.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:37:47.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:37:47.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:37:47.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:37:47.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:37:47.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:37:47.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:37:47.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:37:47.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:37:47.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.442847 -999.00  +13.00  22.28     70   +7.60 1 2 1 1 1   888    0 5.15 14.01 ----- 19.8 22.3 313.2 28.1 19.6 -21.0 18.4 -19.9 17.9 -18.4 19.2 -18.1
2026-04-15T12:37:47.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:37:47.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:37:47.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.442847
2026-04-15T12:37:47.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:37:47.819 [DEBUG] [Thread-19016] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:37:47.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:37:47.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:37:47.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:37:47.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:37:47.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:37:07', tmtdew=7.01623, humidity=62.5374, cloud=0.0, wind=20.2907, temperature=13.2424, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:37:41.981', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:37:48.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:37:48.042 [DEBUG] [Thread-19019] [transport.py] [_log()] starting thread (client mode): 0xee989870
2026-04-15T12:37:48.043 [DEBUG] [Thread-19019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:37:48.065 [DEBUG] [Thread-19019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:37:48.065 [INFO] [Thread-19019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:37:48.076 [DEBUG] [Thread-19019] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:37:48.076 [DEBUG] [Thread-19019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:37:48.076 [DEBUG] [Thread-19019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:37:48.076 [DEBUG] [Thread-19019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:37:48.076 [DEBUG] [Thread-19019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:37:48.076 [DEBUG] [Thread-19019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:37:48.076 [DEBUG] [Thread-19019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:37:48.076 [DEBUG] [Thread-19019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:37:48.076 [DEBUG] [Thread-19019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:37:48.076 [DEBUG] [Thread-19019] [transport.py] [_log()] client lang: <none>
2026-04-15T12:37:48.076 [DEBUG] [Thread-19019] [transport.py] [_log()] server lang: <none>
2026-04-15T12:37:48.077 [DEBUG] [Thread-19019] [transport.py] [_log()] kex follows: False
2026-04-15T12:37:48.077 [DEBUG] [Thread-19019] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:37:48.077 [DEBUG] [Thread-19019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:37:48.077 [DEBUG] [Thread-19019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:37:48.077 [DEBUG] [Thread-19019] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:37:48.077 [DEBUG] [Thread-19019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:37:48.077 [DEBUG] [Thread-19019] [transport.py] [_log()] Compression: none
2026-04-15T12:37:48.077 [DEBUG] [Thread-19019] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:37:48.133 [DEBUG] [Thread-19019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:37:48.134 [DEBUG] [Thread-19019] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:37:48.134 [DEBUG] [Thread-19019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:37:48.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:37:48.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:37:48.197 [DEBUG] [Thread-19019] [transport.py] [_log()] userauth is OK
2026-04-15T12:37:48.197 [DEBUG] [Thread-19019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:37:48.197 [DEBUG] [Thread-19019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:37:48.197 [DEBUG] [Thread-19019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:37:48.197 [DEBUG] [Thread-19019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:37:48.226 [INFO] [Thread-19019] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:37:48.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:37:48.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:37:49.078 [DEBUG] [Thread-19019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:37:49.079 [DEBUG] [Thread-19019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:37:49.126 [DEBUG] [Thread-19019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:37:49.126 [DEBUG] [Thread-19019] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:37:49.135 [DEBUG] [Thread-19019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:37:49.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:37:49.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')
2026-04-15T12:37:49.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
2026-04-15T12:37:49.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:37:49.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:37:49.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:37:49.175 [DEBUG] [Thread-19019] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:37:54.223 [DEBUG] [Thread-19021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:38:09.266 [DEBUG] [Thread-19022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:38:16.867 [DEBUG] [Thread-19023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:38:19.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:38:19.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:38:19.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:38:20.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 37, 42), 7.4916, 60.5722, 0.0, 26.9222, 14.0202, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:38:20.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:37:42
2026-04-15T12:38:20.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:38:21.394 [DEBUG] [Thread-19024] [transport.py] [_log()] starting thread (client mode): 0xee98ecb0
2026-04-15T12:38:21.394 [DEBUG] [Thread-19024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:38:21.420 [DEBUG] [Thread-19024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:38:21.420 [INFO] [Thread-19024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:38:21.423 [DEBUG] [Thread-19024] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:38:21.423 [DEBUG] [Thread-19024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:38:21.423 [DEBUG] [Thread-19024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:38:21.423 [DEBUG] [Thread-19024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:38:21.423 [DEBUG] [Thread-19024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:38:21.424 [DEBUG] [Thread-19024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:38:21.424 [DEBUG] [Thread-19024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:38:21.424 [DEBUG] [Thread-19024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:38:21.424 [DEBUG] [Thread-19024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:38:21.424 [DEBUG] [Thread-19024] [transport.py] [_log()] client lang: <none>
2026-04-15T12:38:21.424 [DEBUG] [Thread-19024] [transport.py] [_log()] server lang: <none>
2026-04-15T12:38:21.424 [DEBUG] [Thread-19024] [transport.py] [_log()] kex follows: False
2026-04-15T12:38:21.424 [DEBUG] [Thread-19024] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:38:21.424 [DEBUG] [Thread-19024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:38:21.424 [DEBUG] [Thread-19024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:38:21.424 [DEBUG] [Thread-19024] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:38:21.425 [DEBUG] [Thread-19024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:38:21.425 [DEBUG] [Thread-19024] [transport.py] [_log()] Compression: none
2026-04-15T12:38:21.425 [DEBUG] [Thread-19024] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:38:21.437 [DEBUG] [Thread-19024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:38:21.437 [DEBUG] [Thread-19024] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:38:21.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:38:21.438 [DEBUG] [Thread-19024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:38:21.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:38:21.439 [DEBUG] [Thread-19024] [transport.py] [_log()] userauth is OK
2026-04-15T12:38:21.439 [DEBUG] [Thread-19024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:38:21.440 [DEBUG] [Thread-19024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:38:21.440 [DEBUG] [Thread-19024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:38:21.440 [DEBUG] [Thread-19024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:38:21.476 [INFO] [Thread-19024] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:38:21.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:38:22.036 [DEBUG] [Thread-19024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:38:22.036 [DEBUG] [Thread-19024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:38:22.036 [DEBUG] [Thread-19024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:38:22.077 [DEBUG] [Thread-19024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:38:22.077 [DEBUG] [Thread-19024] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:38:22.078 [DEBUG] [Thread-19024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:38:22.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:38:22.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:38:22.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:38:22.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:38:22.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:38:22.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:38:22.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:38:22.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:38:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:38:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.443194 -999.00  +13.30  17.55     72   +8.40 1 2 1 1 1   888    0 5.14 12.21 ----- 18.5 17.6 295.6 22.8 19.9 -20.6 18.4 -20.0 18.1 -15.8 19.4 -18.4
2026-04-15T12:38:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:38:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:38:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.443194
2026-04-15T12:38:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:38:22.095 [DEBUG] [Thread-19024] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:38:22.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:38:22.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:38:22.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:38:22.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:38:22.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:37:42', tmtdew=7.4916, humidity=60.5722, cloud=0.0, wind=26.9222, temperature=14.0202, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:38:11.962', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:38:22.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:38:22.317 [DEBUG] [Thread-19027] [transport.py] [_log()] starting thread (client mode): 0xee904fd0
2026-04-15T12:38:22.317 [DEBUG] [Thread-19027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:38:22.336 [DEBUG] [Thread-19027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:38:22.336 [INFO] [Thread-19027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:38:22.344 [DEBUG] [Thread-19027] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:38:22.344 [DEBUG] [Thread-19027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:38:22.344 [DEBUG] [Thread-19027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:38:22.344 [DEBUG] [Thread-19027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:38:22.345 [DEBUG] [Thread-19027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:38:22.345 [DEBUG] [Thread-19027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:38:22.345 [DEBUG] [Thread-19027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:38:22.345 [DEBUG] [Thread-19027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:38:22.345 [DEBUG] [Thread-19027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:38:22.345 [DEBUG] [Thread-19027] [transport.py] [_log()] client lang: <none>
2026-04-15T12:38:22.345 [DEBUG] [Thread-19027] [transport.py] [_log()] server lang: <none>
2026-04-15T12:38:22.345 [DEBUG] [Thread-19027] [transport.py] [_log()] kex follows: False
2026-04-15T12:38:22.345 [DEBUG] [Thread-19027] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:38:22.345 [DEBUG] [Thread-19027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:38:22.345 [DEBUG] [Thread-19027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:38:22.346 [DEBUG] [Thread-19027] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:38:22.346 [DEBUG] [Thread-19027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:38:22.346 [DEBUG] [Thread-19027] [transport.py] [_log()] Compression: none
2026-04-15T12:38:22.346 [DEBUG] [Thread-19027] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:38:22.401 [DEBUG] [Thread-19027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:38:22.401 [DEBUG] [Thread-19027] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:38:22.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:38:22.402 [DEBUG] [Thread-19027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:38:22.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:38:22.458 [DEBUG] [Thread-19027] [transport.py] [_log()] userauth is OK
2026-04-15T12:38:22.458 [DEBUG] [Thread-19027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:38:22.458 [DEBUG] [Thread-19027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:38:22.459 [DEBUG] [Thread-19027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:38:22.459 [DEBUG] [Thread-19027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:38:22.486 [INFO] [Thread-19027] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:38:22.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:38:22.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:38:23.320 [DEBUG] [Thread-19027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:38:23.320 [DEBUG] [Thread-19027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:38:23.369 [DEBUG] [Thread-19027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:38:23.369 [DEBUG] [Thread-19027] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:38:23.381 [DEBUG] [Thread-19027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:38:23.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:38:23.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')
2026-04-15T12:38:23.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
2026-04-15T12:38:23.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:38:23.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:38:23.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:38:23.422 [DEBUG] [Thread-19027] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:38:24.298 [DEBUG] [Thread-19029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:38:39.341 [DEBUG] [Thread-19030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:38:47.878 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:38:47.879 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:38:53.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:38:53.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:38:53.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
2026-04-15T12:38:54.372 [DEBUG] [Thread-19031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:38:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 38, 18), 6.78355, 63.6481, 0.0, 18.2797, 13.2609, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:38:54.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:38:18
2026-04-15T12:38:55.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:38:55.574 [DEBUG] [Thread-19032] [transport.py] [_log()] starting thread (client mode): 0xf13eec50
2026-04-15T12:38:55.574 [DEBUG] [Thread-19032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:38:55.590 [DEBUG] [Thread-19032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:38:55.590 [INFO] [Thread-19032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:38:55.593 [DEBUG] [Thread-19032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:38:55.593 [DEBUG] [Thread-19032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:38:55.593 [DEBUG] [Thread-19032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:38:55.593 [DEBUG] [Thread-19032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:38:55.593 [DEBUG] [Thread-19032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:38:55.593 [DEBUG] [Thread-19032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:38:55.593 [DEBUG] [Thread-19032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:38:55.593 [DEBUG] [Thread-19032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:38:55.593 [DEBUG] [Thread-19032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:38:55.594 [DEBUG] [Thread-19032] [transport.py] [_log()] client lang: <none>
2026-04-15T12:38:55.594 [DEBUG] [Thread-19032] [transport.py] [_log()] server lang: <none>
2026-04-15T12:38:55.594 [DEBUG] [Thread-19032] [transport.py] [_log()] kex follows: False
2026-04-15T12:38:55.594 [DEBUG] [Thread-19032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:38:55.594 [DEBUG] [Thread-19032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:38:55.594 [DEBUG] [Thread-19032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:38:55.594 [DEBUG] [Thread-19032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:38:55.594 [DEBUG] [Thread-19032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:38:55.594 [DEBUG] [Thread-19032] [transport.py] [_log()] Compression: none
2026-04-15T12:38:55.594 [DEBUG] [Thread-19032] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:38:55.611 [DEBUG] [Thread-19032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:38:55.611 [DEBUG] [Thread-19032] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:38:55.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:38:55.612 [DEBUG] [Thread-19032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:38:55.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:38:55.613 [DEBUG] [Thread-19032] [transport.py] [_log()] userauth is OK
2026-04-15T12:38:55.613 [DEBUG] [Thread-19032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:38:55.613 [DEBUG] [Thread-19032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:38:55.613 [DEBUG] [Thread-19032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:38:55.613 [DEBUG] [Thread-19032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:38:55.630 [INFO] [Thread-19032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:38:55.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:38:56.227 [DEBUG] [Thread-19032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:38:56.227 [DEBUG] [Thread-19032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:38:56.227 [DEBUG] [Thread-19032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:38:56.268 [DEBUG] [Thread-19032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:38:56.268 [DEBUG] [Thread-19032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:38:56.269 [DEBUG] [Thread-19032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:38:56.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:38:56.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:38:56.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:38:56.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:38:56.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:38:56.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:38:56.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:38:56.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:38:56.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:38:56.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.443541 -999.00  +13.50  22.90     69   +7.90 1 2 1 1 1   888    0 5.07 12.47 ----- 20.5 22.9 330.4 27.5 20.1 -21.1 18.6 -20.5 18.2 -15.8 19.6 -17.8
2026-04-15T12:38:56.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:38:56.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:38:56.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.443541
2026-04-15T12:38:56.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:38:56.286 [DEBUG] [Thread-19032] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:38:56.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:38:56.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:38:56.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:38:56.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:38:56.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:38:18', tmtdew=6.78355, humidity=63.6481, cloud=0.0, wind=18.2797, temperature=13.2609, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:38:41.942', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:38:56.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:38:56.506 [DEBUG] [Thread-19035] [transport.py] [_log()] starting thread (client mode): 0xf13651e0
2026-04-15T12:38:56.506 [DEBUG] [Thread-19035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:38:56.520 [DEBUG] [Thread-19035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:38:56.520 [INFO] [Thread-19035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:38:56.528 [DEBUG] [Thread-19035] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:38:56.528 [DEBUG] [Thread-19035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:38:56.528 [DEBUG] [Thread-19035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:38:56.528 [DEBUG] [Thread-19035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:38:56.528 [DEBUG] [Thread-19035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:38:56.528 [DEBUG] [Thread-19035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:38:56.528 [DEBUG] [Thread-19035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:38:56.528 [DEBUG] [Thread-19035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:38:56.528 [DEBUG] [Thread-19035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:38:56.528 [DEBUG] [Thread-19035] [transport.py] [_log()] client lang: <none>
2026-04-15T12:38:56.528 [DEBUG] [Thread-19035] [transport.py] [_log()] server lang: <none>
2026-04-15T12:38:56.529 [DEBUG] [Thread-19035] [transport.py] [_log()] kex follows: False
2026-04-15T12:38:56.529 [DEBUG] [Thread-19035] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:38:56.529 [DEBUG] [Thread-19035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:38:56.529 [DEBUG] [Thread-19035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:38:56.529 [DEBUG] [Thread-19035] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:38:56.529 [DEBUG] [Thread-19035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:38:56.529 [DEBUG] [Thread-19035] [transport.py] [_log()] Compression: none
2026-04-15T12:38:56.529 [DEBUG] [Thread-19035] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:38:56.585 [DEBUG] [Thread-19035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:38:56.585 [DEBUG] [Thread-19035] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:38:56.586 [DEBUG] [Thread-19035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:38:56.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:38:56.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:38:56.642 [DEBUG] [Thread-19035] [transport.py] [_log()] userauth is OK
2026-04-15T12:38:56.642 [DEBUG] [Thread-19035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:38:56.642 [DEBUG] [Thread-19035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:38:56.642 [DEBUG] [Thread-19035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:38:56.642 [DEBUG] [Thread-19035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:38:56.667 [INFO] [Thread-19035] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:38:56.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:38:56.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:38:57.486 [DEBUG] [Thread-19035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:38:57.486 [DEBUG] [Thread-19035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:38:57.534 [DEBUG] [Thread-19035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:38:57.534 [DEBUG] [Thread-19035] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:38:57.543 [DEBUG] [Thread-19035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:38:57.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:38:57.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')
2026-04-15T12:38:57.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
2026-04-15T12:38:57.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:38:57.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:38:57.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:38:57.583 [DEBUG] [Thread-19035] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:39:09.402 [DEBUG] [Thread-19037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:39:16.981 [DEBUG] [Thread-19038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:39:24.445 [DEBUG] [Thread-19039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:39:27.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:39:27.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:39:27.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
2026-04-15T12:39:28.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 38, 53), 7.08856, 62.1967, 0.0, 17.3614, 13.6886, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:39:28.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:38:53
2026-04-15T12:39:29.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:39:29.740 [DEBUG] [Thread-19040] [transport.py] [_log()] starting thread (client mode): 0xf1365c00
2026-04-15T12:39:29.741 [DEBUG] [Thread-19040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:39:29.760 [DEBUG] [Thread-19040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:39:29.760 [INFO] [Thread-19040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:39:29.763 [DEBUG] [Thread-19040] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:39:29.763 [DEBUG] [Thread-19040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:39:29.763 [DEBUG] [Thread-19040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:39:29.763 [DEBUG] [Thread-19040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:39:29.763 [DEBUG] [Thread-19040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:39:29.764 [DEBUG] [Thread-19040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:39:29.764 [DEBUG] [Thread-19040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:39:29.764 [DEBUG] [Thread-19040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:39:29.764 [DEBUG] [Thread-19040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:39:29.764 [DEBUG] [Thread-19040] [transport.py] [_log()] client lang: <none>
2026-04-15T12:39:29.764 [DEBUG] [Thread-19040] [transport.py] [_log()] server lang: <none>
2026-04-15T12:39:29.764 [DEBUG] [Thread-19040] [transport.py] [_log()] kex follows: False
2026-04-15T12:39:29.764 [DEBUG] [Thread-19040] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:39:29.764 [DEBUG] [Thread-19040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:39:29.764 [DEBUG] [Thread-19040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:39:29.764 [DEBUG] [Thread-19040] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:39:29.765 [DEBUG] [Thread-19040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:39:29.765 [DEBUG] [Thread-19040] [transport.py] [_log()] Compression: none
2026-04-15T12:39:29.765 [DEBUG] [Thread-19040] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:39:29.781 [DEBUG] [Thread-19040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:39:29.782 [DEBUG] [Thread-19040] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:39:29.782 [DEBUG] [Thread-19040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:39:29.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:39:29.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:39:29.783 [DEBUG] [Thread-19040] [transport.py] [_log()] userauth is OK
2026-04-15T12:39:29.783 [DEBUG] [Thread-19040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:39:29.783 [DEBUG] [Thread-19040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:39:29.784 [DEBUG] [Thread-19040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:39:29.784 [DEBUG] [Thread-19040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:39:29.806 [INFO] [Thread-19040] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:39:29.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:39:30.382 [DEBUG] [Thread-19040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:39:30.382 [DEBUG] [Thread-19040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:39:30.383 [DEBUG] [Thread-19040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:39:30.423 [DEBUG] [Thread-19040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:39:30.423 [DEBUG] [Thread-19040] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:39:30.426 [DEBUG] [Thread-19040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:39:30.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:39:30.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:39:30.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:39:30.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:39:30.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:39:30.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:39:30.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:39:30.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:39:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:39:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.443888 -999.00  +13.50  10.25     68   +7.80 1 2 1 1 1   888    0 5.16 12.96 ----- 11.2 10.2 331.8 23.0 20.1 -21.2 18.8 -19.5 18.4 -15.6 19.4 -24.6
2026-04-15T12:39:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:39:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:39:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.443888
2026-04-15T12:39:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:39:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:39:30.447 [DEBUG] [Thread-19040] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:39:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:39:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:39:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:39:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:38:53', tmtdew=7.08856, humidity=62.1967, cloud=0.0, wind=17.3614, temperature=13.6886, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:39:11.923', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:39:30.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:39:30.666 [DEBUG] [Thread-19043] [transport.py] [_log()] starting thread (client mode): 0xf13ee320
2026-04-15T12:39:30.666 [DEBUG] [Thread-19043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:39:30.680 [DEBUG] [Thread-19043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:39:30.680 [INFO] [Thread-19043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:39:30.687 [DEBUG] [Thread-19043] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:39:30.688 [DEBUG] [Thread-19043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:39:30.688 [DEBUG] [Thread-19043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:39:30.688 [DEBUG] [Thread-19043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:39:30.688 [DEBUG] [Thread-19043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:39:30.688 [DEBUG] [Thread-19043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:39:30.688 [DEBUG] [Thread-19043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:39:30.688 [DEBUG] [Thread-19043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:39:30.688 [DEBUG] [Thread-19043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:39:30.688 [DEBUG] [Thread-19043] [transport.py] [_log()] client lang: <none>
2026-04-15T12:39:30.688 [DEBUG] [Thread-19043] [transport.py] [_log()] server lang: <none>
2026-04-15T12:39:30.688 [DEBUG] [Thread-19043] [transport.py] [_log()] kex follows: False
2026-04-15T12:39:30.688 [DEBUG] [Thread-19043] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:39:30.688 [DEBUG] [Thread-19043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:39:30.689 [DEBUG] [Thread-19043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:39:30.689 [DEBUG] [Thread-19043] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:39:30.689 [DEBUG] [Thread-19043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:39:30.689 [DEBUG] [Thread-19043] [transport.py] [_log()] Compression: none
2026-04-15T12:39:30.689 [DEBUG] [Thread-19043] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:39:30.745 [DEBUG] [Thread-19043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:39:30.745 [DEBUG] [Thread-19043] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:39:30.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:39:30.746 [DEBUG] [Thread-19043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:39:30.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:39:30.802 [DEBUG] [Thread-19043] [transport.py] [_log()] userauth is OK
2026-04-15T12:39:30.802 [DEBUG] [Thread-19043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:39:30.802 [DEBUG] [Thread-19043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:39:30.802 [DEBUG] [Thread-19043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:39:30.802 [DEBUG] [Thread-19043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:39:30.823 [INFO] [Thread-19043] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:39:30.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:39:30.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:39:31.629 [DEBUG] [Thread-19043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:39:31.629 [DEBUG] [Thread-19043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:39:31.679 [DEBUG] [Thread-19043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:39:31.679 [DEBUG] [Thread-19043] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:39:31.692 [DEBUG] [Thread-19043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:39:31.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:39:31.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')
2026-04-15T12:39:31.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
2026-04-15T12:39:31.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:39:31.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:39:31.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:39:31.733 [DEBUG] [Thread-19043] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:39:39.475 [DEBUG] [Thread-19045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:39:48.019 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:39:48.021 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:39:54.513 [DEBUG] [Thread-19046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:40:01.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:40:01.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:40:01.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
2026-04-15T12:40:03.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 39, 29), 6.71727, 63.6122, 0.0, 14.3636, 12.8951, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:40:03.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:39:29
2026-04-15T12:40:03.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:40:03.858 [DEBUG] [Thread-19047] [transport.py] [_log()] starting thread (client mode): 0xf13e2bc0
2026-04-15T12:40:03.858 [DEBUG] [Thread-19047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:40:03.877 [DEBUG] [Thread-19047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:40:03.877 [INFO] [Thread-19047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:40:03.880 [DEBUG] [Thread-19047] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:40:03.880 [DEBUG] [Thread-19047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:40:03.880 [DEBUG] [Thread-19047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:40:03.880 [DEBUG] [Thread-19047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:40:03.880 [DEBUG] [Thread-19047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:40:03.880 [DEBUG] [Thread-19047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:40:03.880 [DEBUG] [Thread-19047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:40:03.880 [DEBUG] [Thread-19047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:40:03.880 [DEBUG] [Thread-19047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:40:03.880 [DEBUG] [Thread-19047] [transport.py] [_log()] client lang: <none>
2026-04-15T12:40:03.880 [DEBUG] [Thread-19047] [transport.py] [_log()] server lang: <none>
2026-04-15T12:40:03.881 [DEBUG] [Thread-19047] [transport.py] [_log()] kex follows: False
2026-04-15T12:40:03.881 [DEBUG] [Thread-19047] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:40:03.881 [DEBUG] [Thread-19047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:40:03.881 [DEBUG] [Thread-19047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:40:03.881 [DEBUG] [Thread-19047] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:40:03.881 [DEBUG] [Thread-19047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:40:03.881 [DEBUG] [Thread-19047] [transport.py] [_log()] Compression: none
2026-04-15T12:40:03.881 [DEBUG] [Thread-19047] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:40:03.900 [DEBUG] [Thread-19047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:40:03.901 [DEBUG] [Thread-19047] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:40:03.901 [DEBUG] [Thread-19047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:40:03.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:40:03.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:40:03.902 [DEBUG] [Thread-19047] [transport.py] [_log()] userauth is OK
2026-04-15T12:40:03.902 [DEBUG] [Thread-19047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:40:03.902 [DEBUG] [Thread-19047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:40:03.902 [DEBUG] [Thread-19047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:40:03.902 [DEBUG] [Thread-19047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:40:03.926 [INFO] [Thread-19047] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:40:03.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:40:05.815 [DEBUG] [Thread-19047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:40:05.816 [DEBUG] [Thread-19047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:40:05.816 [DEBUG] [Thread-19047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:40:05.856 [DEBUG] [Thread-19047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:40:05.856 [DEBUG] [Thread-19047] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:40:05.859 [DEBUG] [Thread-19047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:40:05.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:40:05.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:40:05.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:40:05.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:40:05.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:40:05.920 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:40:05.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:40:05.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:40:05.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:40:05.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.444235 -999.00  +13.20  16.16     68   +7.60 1 2 1 1 1   888    0 5.22 14.80 ----- 10.1 16.2 341.9 19.0 19.9 -21.6 18.6 -20.2 18.4 -15.5 19.1 -20.2
2026-04-15T12:40:05.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:40:05.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:40:05.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.444235
2026-04-15T12:40:05.922 [DEBUG] [Thread-19047] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:40:05.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:40:05.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:40:05.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:40:05.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:40:05.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:40:05.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:39:29', tmtdew=6.71727, humidity=63.6122, cloud=0.0, wind=14.3636, temperature=12.8951, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:39:41.904', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:40:06.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:40:06.163 [DEBUG] [Thread-19050] [transport.py] [_log()] starting thread (client mode): 0xee98e6e0
2026-04-15T12:40:06.163 [DEBUG] [Thread-19050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:40:06.177 [DEBUG] [Thread-19050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:40:06.177 [INFO] [Thread-19050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:40:06.185 [DEBUG] [Thread-19050] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:40:06.185 [DEBUG] [Thread-19050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:40:06.185 [DEBUG] [Thread-19050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:40:06.185 [DEBUG] [Thread-19050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:40:06.185 [DEBUG] [Thread-19050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:40:06.185 [DEBUG] [Thread-19050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:40:06.185 [DEBUG] [Thread-19050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:40:06.185 [DEBUG] [Thread-19050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:40:06.186 [DEBUG] [Thread-19050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:40:06.186 [DEBUG] [Thread-19050] [transport.py] [_log()] client lang: <none>
2026-04-15T12:40:06.186 [DEBUG] [Thread-19050] [transport.py] [_log()] server lang: <none>
2026-04-15T12:40:06.186 [DEBUG] [Thread-19050] [transport.py] [_log()] kex follows: False
2026-04-15T12:40:06.186 [DEBUG] [Thread-19050] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:40:06.186 [DEBUG] [Thread-19050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:40:06.186 [DEBUG] [Thread-19050] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:40:06.186 [DEBUG] [Thread-19050] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:40:06.186 [DEBUG] [Thread-19050] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:40:06.186 [DEBUG] [Thread-19050] [transport.py] [_log()] Compression: none
2026-04-15T12:40:06.186 [DEBUG] [Thread-19050] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:40:06.241 [DEBUG] [Thread-19050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:40:06.241 [DEBUG] [Thread-19050] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:40:06.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:40:06.242 [DEBUG] [Thread-19050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:40:06.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:40:06.298 [DEBUG] [Thread-19050] [transport.py] [_log()] userauth is OK
2026-04-15T12:40:06.298 [DEBUG] [Thread-19050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:40:06.298 [DEBUG] [Thread-19050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:40:06.298 [DEBUG] [Thread-19050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:40:06.298 [DEBUG] [Thread-19050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:40:06.316 [INFO] [Thread-19050] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:40:06.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:40:06.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:40:07.135 [DEBUG] [Thread-19050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:40:07.136 [DEBUG] [Thread-19050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:40:07.183 [DEBUG] [Thread-19050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:40:07.183 [DEBUG] [Thread-19050] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:40:07.192 [DEBUG] [Thread-19050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:40:07.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:40:07.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')
2026-04-15T12:40:07.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
2026-04-15T12:40:07.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:40:07.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:40:07.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:40:07.228 [DEBUG] [Thread-19050] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:40:09.545 [DEBUG] [Thread-19052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:40:17.073 [DEBUG] [Thread-19053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:40:24.589 [DEBUG] [Thread-19054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:40:37.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:40:37.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:40:37.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
2026-04-15T12:40:38.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 40, 4), 6.64563, 63.9437, 0.0, 17.3448, 12.978, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:40:38.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:40:04
2026-04-15T12:40:38.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:40:39.333 [DEBUG] [Thread-19055] [transport.py] [_log()] starting thread (client mode): 0xee98ebc0
2026-04-15T12:40:39.333 [DEBUG] [Thread-19055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:40:39.352 [DEBUG] [Thread-19055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:40:39.352 [INFO] [Thread-19055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:40:39.354 [DEBUG] [Thread-19055] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:40:39.354 [DEBUG] [Thread-19055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:40:39.354 [DEBUG] [Thread-19055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:40:39.354 [DEBUG] [Thread-19055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:40:39.355 [DEBUG] [Thread-19055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:40:39.355 [DEBUG] [Thread-19055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:40:39.355 [DEBUG] [Thread-19055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:40:39.355 [DEBUG] [Thread-19055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:40:39.355 [DEBUG] [Thread-19055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:40:39.355 [DEBUG] [Thread-19055] [transport.py] [_log()] client lang: <none>
2026-04-15T12:40:39.355 [DEBUG] [Thread-19055] [transport.py] [_log()] server lang: <none>
2026-04-15T12:40:39.355 [DEBUG] [Thread-19055] [transport.py] [_log()] kex follows: False
2026-04-15T12:40:39.355 [DEBUG] [Thread-19055] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:40:39.355 [DEBUG] [Thread-19055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:40:39.355 [DEBUG] [Thread-19055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:40:39.356 [DEBUG] [Thread-19055] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:40:39.356 [DEBUG] [Thread-19055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:40:39.356 [DEBUG] [Thread-19055] [transport.py] [_log()] Compression: none
2026-04-15T12:40:39.356 [DEBUG] [Thread-19055] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:40:39.371 [DEBUG] [Thread-19055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:40:39.371 [DEBUG] [Thread-19055] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:40:39.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:40:39.372 [DEBUG] [Thread-19055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:40:39.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:40:39.373 [DEBUG] [Thread-19055] [transport.py] [_log()] userauth is OK
2026-04-15T12:40:39.373 [DEBUG] [Thread-19055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:40:39.373 [DEBUG] [Thread-19055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:40:39.373 [DEBUG] [Thread-19055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:40:39.373 [DEBUG] [Thread-19055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:40:39.392 [INFO] [Thread-19055] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:40:39.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:40:39.620 [DEBUG] [Thread-19057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:40:39.944 [DEBUG] [Thread-19055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:40:39.944 [DEBUG] [Thread-19055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:40:39.945 [DEBUG] [Thread-19055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:40:39.985 [DEBUG] [Thread-19055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:40:39.985 [DEBUG] [Thread-19055] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:40:39.987 [DEBUG] [Thread-19055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:40:39.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:40:39.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:40:39.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:40:39.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:40:40.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:40:40.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:40:40.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:40:40.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:40:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:40:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.444583 -999.00  +12.80  18.12     68   +7.00 1 2 1 1 1   888    0 5.46 18.79 ----- 13.4 18.1 326.2 22.7 20.2 -19.4 18.6 -19.6 18.4 -15.3 19.6 -16.8
2026-04-15T12:40:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:40:40.003 [DEBUG] [Thread-19055] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:40:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:40:40.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.444583
2026-04-15T12:40:40.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:40:40.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:40:40.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:40:40.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:40:40.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:40:40.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:40:04', tmtdew=6.64563, humidity=63.9437, cloud=0.0, wind=17.3448, temperature=12.978, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:40:11.971', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:40:40.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:40:40.258 [DEBUG] [Thread-19059] [transport.py] [_log()] starting thread (client mode): 0xee98ece0
2026-04-15T12:40:40.258 [DEBUG] [Thread-19059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:40:40.272 [DEBUG] [Thread-19059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:40:40.272 [INFO] [Thread-19059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:40:40.279 [DEBUG] [Thread-19059] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:40:40.280 [DEBUG] [Thread-19059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:40:40.280 [DEBUG] [Thread-19059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:40:40.280 [DEBUG] [Thread-19059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:40:40.280 [DEBUG] [Thread-19059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:40:40.280 [DEBUG] [Thread-19059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:40:40.280 [DEBUG] [Thread-19059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:40:40.280 [DEBUG] [Thread-19059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:40:40.280 [DEBUG] [Thread-19059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:40:40.280 [DEBUG] [Thread-19059] [transport.py] [_log()] client lang: <none>
2026-04-15T12:40:40.280 [DEBUG] [Thread-19059] [transport.py] [_log()] server lang: <none>
2026-04-15T12:40:40.280 [DEBUG] [Thread-19059] [transport.py] [_log()] kex follows: False
2026-04-15T12:40:40.281 [DEBUG] [Thread-19059] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:40:40.281 [DEBUG] [Thread-19059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:40:40.281 [DEBUG] [Thread-19059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:40:40.281 [DEBUG] [Thread-19059] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:40:40.281 [DEBUG] [Thread-19059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:40:40.281 [DEBUG] [Thread-19059] [transport.py] [_log()] Compression: none
2026-04-15T12:40:40.281 [DEBUG] [Thread-19059] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:40:40.338 [DEBUG] [Thread-19059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:40:40.338 [DEBUG] [Thread-19059] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:40:40.339 [DEBUG] [Thread-19059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:40:40.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:40:40.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:40:40.395 [DEBUG] [Thread-19059] [transport.py] [_log()] userauth is OK
2026-04-15T12:40:40.395 [DEBUG] [Thread-19059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:40:40.395 [DEBUG] [Thread-19059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:40:40.395 [DEBUG] [Thread-19059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:40:40.395 [DEBUG] [Thread-19059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:40:40.421 [INFO] [Thread-19059] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:40:40.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:40:40.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:40:41.309 [DEBUG] [Thread-19059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:40:41.310 [DEBUG] [Thread-19059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:40:41.357 [DEBUG] [Thread-19059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:40:41.357 [DEBUG] [Thread-19059] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:40:41.366 [DEBUG] [Thread-19059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:40:41.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:40:41.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')
2026-04-15T12:40:41.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
2026-04-15T12:40:41.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:40:41.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:40:41.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:40:41.400 [DEBUG] [Thread-19059] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:40:48.160 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:40:48.161 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:40:54.651 [DEBUG] [Thread-19061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:41:09.702 [DEBUG] [Thread-19062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:41:11.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:41:11.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:41:11.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
2026-04-15T12:41:12.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 40, 40), 7.00066, 62.5281, 0.0, 15.6679, 13.4896, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:41:12.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:40:40
2026-04-15T12:41:13.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:41:13.558 [DEBUG] [Thread-19063] [transport.py] [_log()] starting thread (client mode): 0xee9e4eb0
2026-04-15T12:41:13.558 [DEBUG] [Thread-19063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:41:13.577 [DEBUG] [Thread-19063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:41:13.578 [INFO] [Thread-19063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:41:13.581 [DEBUG] [Thread-19063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:41:13.581 [DEBUG] [Thread-19063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:41:13.581 [DEBUG] [Thread-19063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:41:13.581 [DEBUG] [Thread-19063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:41:13.581 [DEBUG] [Thread-19063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:41:13.581 [DEBUG] [Thread-19063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:41:13.581 [DEBUG] [Thread-19063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:41:13.581 [DEBUG] [Thread-19063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:41:13.581 [DEBUG] [Thread-19063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:41:13.582 [DEBUG] [Thread-19063] [transport.py] [_log()] client lang: <none>
2026-04-15T12:41:13.582 [DEBUG] [Thread-19063] [transport.py] [_log()] server lang: <none>
2026-04-15T12:41:13.582 [DEBUG] [Thread-19063] [transport.py] [_log()] kex follows: False
2026-04-15T12:41:13.582 [DEBUG] [Thread-19063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:41:13.582 [DEBUG] [Thread-19063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:41:13.582 [DEBUG] [Thread-19063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:41:13.582 [DEBUG] [Thread-19063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:41:13.582 [DEBUG] [Thread-19063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:41:13.582 [DEBUG] [Thread-19063] [transport.py] [_log()] Compression: none
2026-04-15T12:41:13.582 [DEBUG] [Thread-19063] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:41:13.599 [DEBUG] [Thread-19063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:41:13.600 [DEBUG] [Thread-19063] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:41:13.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:41:13.600 [DEBUG] [Thread-19063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:41:13.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:41:13.601 [DEBUG] [Thread-19063] [transport.py] [_log()] userauth is OK
2026-04-15T12:41:13.601 [DEBUG] [Thread-19063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:41:13.601 [DEBUG] [Thread-19063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:41:13.602 [DEBUG] [Thread-19063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:41:13.602 [DEBUG] [Thread-19063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:41:13.619 [INFO] [Thread-19063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:41:13.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:41:14.234 [DEBUG] [Thread-19063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:41:14.235 [DEBUG] [Thread-19063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:41:14.235 [DEBUG] [Thread-19063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:41:14.276 [DEBUG] [Thread-19063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:41:14.276 [DEBUG] [Thread-19063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:41:14.278 [DEBUG] [Thread-19063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:41:14.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:41:14.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:41:14.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:41:14.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:41:14.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:41:14.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:41:14.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:41:14.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:41:14.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:41:14.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.445277 -999.00  +12.70  18.81     67   +6.80 1 2 1 1 1   888    0 5.70 27.56 ----- 20.8 18.8 329.4 29.6 19.9 -19.0 18.6 -19.4 18.4 -16.5 19.6 -17.9
2026-04-15T12:41:14.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:41:14.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:41:14.296 [DEBUG] [Thread-19063] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:41:14.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.445277
2026-04-15T12:41:14.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:41:14.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:41:14.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:41:14.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:41:14.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:41:14.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:40:40', tmtdew=7.00066, humidity=62.5281, cloud=0.0, wind=15.6679, temperature=13.4896, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:41:11.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:41:14.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:41:14.555 [DEBUG] [Thread-19066] [transport.py] [_log()] starting thread (client mode): 0xf1365630
2026-04-15T12:41:14.555 [DEBUG] [Thread-19066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:41:14.570 [DEBUG] [Thread-19066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:41:14.570 [INFO] [Thread-19066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:41:14.577 [DEBUG] [Thread-19066] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:41:14.577 [DEBUG] [Thread-19066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:41:14.577 [DEBUG] [Thread-19066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:41:14.577 [DEBUG] [Thread-19066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:41:14.577 [DEBUG] [Thread-19066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:41:14.577 [DEBUG] [Thread-19066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:41:14.577 [DEBUG] [Thread-19066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:41:14.578 [DEBUG] [Thread-19066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:41:14.578 [DEBUG] [Thread-19066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:41:14.578 [DEBUG] [Thread-19066] [transport.py] [_log()] client lang: <none>
2026-04-15T12:41:14.578 [DEBUG] [Thread-19066] [transport.py] [_log()] server lang: <none>
2026-04-15T12:41:14.578 [DEBUG] [Thread-19066] [transport.py] [_log()] kex follows: False
2026-04-15T12:41:14.578 [DEBUG] [Thread-19066] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:41:14.578 [DEBUG] [Thread-19066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:41:14.578 [DEBUG] [Thread-19066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:41:14.578 [DEBUG] [Thread-19066] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:41:14.578 [DEBUG] [Thread-19066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:41:14.578 [DEBUG] [Thread-19066] [transport.py] [_log()] Compression: none
2026-04-15T12:41:14.579 [DEBUG] [Thread-19066] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:41:14.638 [DEBUG] [Thread-19066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:41:14.638 [DEBUG] [Thread-19066] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:41:14.639 [DEBUG] [Thread-19066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:41:14.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:41:14.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:41:14.699 [DEBUG] [Thread-19066] [transport.py] [_log()] userauth is OK
2026-04-15T12:41:14.699 [DEBUG] [Thread-19066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:41:14.699 [DEBUG] [Thread-19066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:41:14.699 [DEBUG] [Thread-19066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:41:14.699 [DEBUG] [Thread-19066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:41:14.723 [INFO] [Thread-19066] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:41:14.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:41:14.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:41:15.535 [DEBUG] [Thread-19066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:41:15.535 [DEBUG] [Thread-19066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:41:15.583 [DEBUG] [Thread-19066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:41:15.583 [DEBUG] [Thread-19066] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:41:15.592 [DEBUG] [Thread-19066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:41:15.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:41:15.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')
2026-04-15T12:41:15.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
2026-04-15T12:41:15.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:41:15.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:41:15.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:41:15.634 [DEBUG] [Thread-19066] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:41:17.184 [DEBUG] [Thread-19068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:41:24.734 [DEBUG] [Thread-19069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:41:39.778 [DEBUG] [Thread-19070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:41:45.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:41:45.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:41:45.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
2026-04-15T12:41:46.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 41, 15), 6.81629, 63.4298, 0.0, 17.0266, 13.1277, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:41:46.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:41:15
2026-04-15T12:41:47.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:41:47.791 [DEBUG] [Thread-19071] [transport.py] [_log()] starting thread (client mode): 0xee9e7f70
2026-04-15T12:41:47.792 [DEBUG] [Thread-19071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:41:47.811 [DEBUG] [Thread-19071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:41:47.811 [INFO] [Thread-19071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:41:47.814 [DEBUG] [Thread-19071] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:41:47.814 [DEBUG] [Thread-19071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:41:47.814 [DEBUG] [Thread-19071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:41:47.814 [DEBUG] [Thread-19071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:41:47.814 [DEBUG] [Thread-19071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:41:47.814 [DEBUG] [Thread-19071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:41:47.814 [DEBUG] [Thread-19071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:41:47.815 [DEBUG] [Thread-19071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:41:47.815 [DEBUG] [Thread-19071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:41:47.815 [DEBUG] [Thread-19071] [transport.py] [_log()] client lang: <none>
2026-04-15T12:41:47.815 [DEBUG] [Thread-19071] [transport.py] [_log()] server lang: <none>
2026-04-15T12:41:47.815 [DEBUG] [Thread-19071] [transport.py] [_log()] kex follows: False
2026-04-15T12:41:47.815 [DEBUG] [Thread-19071] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:41:47.815 [DEBUG] [Thread-19071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:41:47.815 [DEBUG] [Thread-19071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:41:47.815 [DEBUG] [Thread-19071] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:41:47.815 [DEBUG] [Thread-19071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:41:47.815 [DEBUG] [Thread-19071] [transport.py] [_log()] Compression: none
2026-04-15T12:41:47.815 [DEBUG] [Thread-19071] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:41:47.832 [DEBUG] [Thread-19071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:41:47.832 [DEBUG] [Thread-19071] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:41:47.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:41:47.833 [DEBUG] [Thread-19071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:41:47.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:41:47.876 [DEBUG] [Thread-19071] [transport.py] [_log()] userauth is OK
2026-04-15T12:41:47.876 [DEBUG] [Thread-19071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:41:47.877 [DEBUG] [Thread-19071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:41:47.877 [DEBUG] [Thread-19071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:41:47.877 [DEBUG] [Thread-19071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:41:47.901 [INFO] [Thread-19071] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:41:47.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:41:48.302 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:41:48.303 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:41:48.506 [DEBUG] [Thread-19071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:41:48.507 [DEBUG] [Thread-19071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:41:48.507 [DEBUG] [Thread-19071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:41:48.547 [DEBUG] [Thread-19071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:41:48.547 [DEBUG] [Thread-19071] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:41:48.550 [DEBUG] [Thread-19071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:41:48.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:41:48.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:41:48.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:41:48.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:41:48.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:41:48.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:41:48.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:41:48.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:41:48.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:41:48.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.445624 -999.00  +13.00  17.06     69   +7.50 1 2 1 1 1   888    0 5.75 31.05 ----- 20.5 17.1 315.8 29.4 20.2 -15.6 18.7 -15.2 18.6 -12.7 19.6 -14.6
2026-04-15T12:41:48.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:41:48.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:41:48.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.445624
2026-04-15T12:41:48.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:41:48.575 [DEBUG] [Thread-19071] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:41:48.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:41:48.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:41:48.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:41:48.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:41:48.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:41:15', tmtdew=6.81629, humidity=63.4298, cloud=0.0, wind=17.0266, temperature=13.1277, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:41:41.914', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:41:48.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:41:48.834 [DEBUG] [Thread-19074] [transport.py] [_log()] starting thread (client mode): 0xee988d90
2026-04-15T12:41:48.835 [DEBUG] [Thread-19074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:41:48.849 [DEBUG] [Thread-19074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:41:48.849 [INFO] [Thread-19074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:41:48.856 [DEBUG] [Thread-19074] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:41:48.856 [DEBUG] [Thread-19074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:41:48.856 [DEBUG] [Thread-19074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:41:48.856 [DEBUG] [Thread-19074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:41:48.856 [DEBUG] [Thread-19074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:41:48.857 [DEBUG] [Thread-19074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:41:48.857 [DEBUG] [Thread-19074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:41:48.857 [DEBUG] [Thread-19074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:41:48.857 [DEBUG] [Thread-19074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:41:48.857 [DEBUG] [Thread-19074] [transport.py] [_log()] client lang: <none>
2026-04-15T12:41:48.857 [DEBUG] [Thread-19074] [transport.py] [_log()] server lang: <none>
2026-04-15T12:41:48.857 [DEBUG] [Thread-19074] [transport.py] [_log()] kex follows: False
2026-04-15T12:41:48.857 [DEBUG] [Thread-19074] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:41:48.857 [DEBUG] [Thread-19074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:41:48.857 [DEBUG] [Thread-19074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:41:48.857 [DEBUG] [Thread-19074] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:41:48.857 [DEBUG] [Thread-19074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:41:48.858 [DEBUG] [Thread-19074] [transport.py] [_log()] Compression: none
2026-04-15T12:41:48.858 [DEBUG] [Thread-19074] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:41:48.914 [DEBUG] [Thread-19074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:41:48.914 [DEBUG] [Thread-19074] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:41:48.915 [DEBUG] [Thread-19074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:41:48.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:41:48.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:41:48.971 [DEBUG] [Thread-19074] [transport.py] [_log()] userauth is OK
2026-04-15T12:41:48.971 [DEBUG] [Thread-19074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:41:48.971 [DEBUG] [Thread-19074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:41:48.971 [DEBUG] [Thread-19074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:41:48.972 [DEBUG] [Thread-19074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:41:48.997 [INFO] [Thread-19074] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:41:48.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:41:48.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:41:49.822 [DEBUG] [Thread-19074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:41:49.822 [DEBUG] [Thread-19074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:41:49.870 [DEBUG] [Thread-19074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:41:49.870 [DEBUG] [Thread-19074] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:41:49.879 [DEBUG] [Thread-19074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:41:49.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:41:49.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')
2026-04-15T12:41:49.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
2026-04-15T12:41:49.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:41:49.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:41:49.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:41:49.919 [DEBUG] [Thread-19074] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:41:54.809 [DEBUG] [Thread-19076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:42:09.853 [DEBUG] [Thread-19077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:42:17.294 [DEBUG] [Thread-19078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:42:19.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:42:19.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:42:19.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
2026-04-15T12:42:21.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 41, 51), 7.36163, 61.0693, 0.0, 23.2531, 13.8211, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:42:21.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:41:51
2026-04-15T12:42:21.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:42:21.986 [DEBUG] [Thread-19079] [transport.py] [_log()] starting thread (client mode): 0xee9019c0
2026-04-15T12:42:21.987 [DEBUG] [Thread-19079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:42:21.998 [DEBUG] [Thread-19079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:42:21.998 [INFO] [Thread-19079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:42:21.999 [DEBUG] [Thread-19079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:42:22.000 [DEBUG] [Thread-19079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:42:22.000 [DEBUG] [Thread-19079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:42:22.000 [DEBUG] [Thread-19079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:42:22.000 [DEBUG] [Thread-19079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:42:22.000 [DEBUG] [Thread-19079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:42:22.000 [DEBUG] [Thread-19079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:42:22.000 [DEBUG] [Thread-19079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:42:22.000 [DEBUG] [Thread-19079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:42:22.000 [DEBUG] [Thread-19079] [transport.py] [_log()] client lang: <none>
2026-04-15T12:42:22.000 [DEBUG] [Thread-19079] [transport.py] [_log()] server lang: <none>
2026-04-15T12:42:22.000 [DEBUG] [Thread-19079] [transport.py] [_log()] kex follows: False
2026-04-15T12:42:22.000 [DEBUG] [Thread-19079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:42:22.000 [DEBUG] [Thread-19079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:42:22.001 [DEBUG] [Thread-19079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:42:22.001 [DEBUG] [Thread-19079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:42:22.001 [DEBUG] [Thread-19079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:42:22.001 [DEBUG] [Thread-19079] [transport.py] [_log()] Compression: none
2026-04-15T12:42:22.001 [DEBUG] [Thread-19079] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:42:22.009 [DEBUG] [Thread-19079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:42:22.010 [DEBUG] [Thread-19079] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:42:22.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:42:22.010 [DEBUG] [Thread-19079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:42:22.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:42:22.011 [DEBUG] [Thread-19079] [transport.py] [_log()] userauth is OK
2026-04-15T12:42:22.012 [DEBUG] [Thread-19079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:42:22.012 [DEBUG] [Thread-19079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:42:22.012 [DEBUG] [Thread-19079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:42:22.012 [DEBUG] [Thread-19079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:42:22.027 [INFO] [Thread-19079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:42:22.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:42:22.649 [DEBUG] [Thread-19079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:42:22.649 [DEBUG] [Thread-19079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:42:22.650 [DEBUG] [Thread-19079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:42:22.691 [DEBUG] [Thread-19079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:42:22.691 [DEBUG] [Thread-19079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:42:22.694 [DEBUG] [Thread-19079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:42:22.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:42:22.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:42:22.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:42:22.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:42:22.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:42:22.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:42:22.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:42:22.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:42:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:42:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.445972 -999.00  +13.50  20.70     68   +7.90 1 2 1 1 1   888    0 5.71 31.64 ----- 25.8 20.7 330.4 24.8 20.5 -15.3 18.9 -15.8 18.8 -11.5 19.9 -12.5
2026-04-15T12:42:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:42:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:42:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.445972
2026-04-15T12:42:22.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:42:22.712 [DEBUG] [Thread-19079] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:42:22.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:42:22.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:42:22.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:42:22.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:42:22.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:41:51', tmtdew=7.36163, humidity=61.0693, cloud=0.0, wind=23.2531, temperature=13.8211, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:42:11.981', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:42:22.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:42:22.985 [DEBUG] [Thread-19082] [transport.py] [_log()] starting thread (client mode): 0xee901d50
2026-04-15T12:42:22.985 [DEBUG] [Thread-19082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:42:22.999 [DEBUG] [Thread-19082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:42:22.999 [INFO] [Thread-19082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:42:23.007 [DEBUG] [Thread-19082] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:42:23.008 [DEBUG] [Thread-19082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:42:23.008 [DEBUG] [Thread-19082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:42:23.008 [DEBUG] [Thread-19082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:42:23.008 [DEBUG] [Thread-19082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:42:23.008 [DEBUG] [Thread-19082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:42:23.008 [DEBUG] [Thread-19082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:42:23.008 [DEBUG] [Thread-19082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:42:23.008 [DEBUG] [Thread-19082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:42:23.008 [DEBUG] [Thread-19082] [transport.py] [_log()] client lang: <none>
2026-04-15T12:42:23.008 [DEBUG] [Thread-19082] [transport.py] [_log()] server lang: <none>
2026-04-15T12:42:23.008 [DEBUG] [Thread-19082] [transport.py] [_log()] kex follows: False
2026-04-15T12:42:23.008 [DEBUG] [Thread-19082] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:42:23.009 [DEBUG] [Thread-19082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:42:23.009 [DEBUG] [Thread-19082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:42:23.009 [DEBUG] [Thread-19082] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:42:23.009 [DEBUG] [Thread-19082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:42:23.009 [DEBUG] [Thread-19082] [transport.py] [_log()] Compression: none
2026-04-15T12:42:23.009 [DEBUG] [Thread-19082] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:42:23.063 [DEBUG] [Thread-19082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:42:23.064 [DEBUG] [Thread-19082] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:42:23.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:42:23.064 [DEBUG] [Thread-19082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:42:23.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:42:23.119 [DEBUG] [Thread-19082] [transport.py] [_log()] userauth is OK
2026-04-15T12:42:23.119 [DEBUG] [Thread-19082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:42:23.120 [DEBUG] [Thread-19082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:42:23.120 [DEBUG] [Thread-19082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:42:23.120 [DEBUG] [Thread-19082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:42:23.143 [INFO] [Thread-19082] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:42:23.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:42:23.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:42:23.973 [DEBUG] [Thread-19082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:42:23.973 [DEBUG] [Thread-19082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:42:24.021 [DEBUG] [Thread-19082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:42:24.022 [DEBUG] [Thread-19082] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:42:24.031 [DEBUG] [Thread-19082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:42:24.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:42:24.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')
2026-04-15T12:42:24.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
2026-04-15T12:42:24.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:42:24.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:42:24.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:42:24.078 [DEBUG] [Thread-19082] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:42:24.886 [DEBUG] [Thread-19084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:42:39.930 [DEBUG] [Thread-19085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:42:48.442 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:42:48.444 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:42:54.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:42:54.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:42:54.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
2026-04-15T12:42:54.963 [DEBUG] [Thread-19086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:42:55.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 42, 27), 7.21472, 61.833, 0.0, 25.5481, 13.0934, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:42:55.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:42:27
2026-04-15T12:42:55.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:42:56.162 [DEBUG] [Thread-19087] [transport.py] [_log()] starting thread (client mode): 0xee902080
2026-04-15T12:42:56.162 [DEBUG] [Thread-19087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:42:56.183 [DEBUG] [Thread-19087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:42:56.183 [INFO] [Thread-19087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:42:56.186 [DEBUG] [Thread-19087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:42:56.187 [DEBUG] [Thread-19087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:42:56.187 [DEBUG] [Thread-19087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:42:56.187 [DEBUG] [Thread-19087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:42:56.187 [DEBUG] [Thread-19087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:42:56.187 [DEBUG] [Thread-19087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:42:56.187 [DEBUG] [Thread-19087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:42:56.187 [DEBUG] [Thread-19087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:42:56.187 [DEBUG] [Thread-19087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:42:56.187 [DEBUG] [Thread-19087] [transport.py] [_log()] client lang: <none>
2026-04-15T12:42:56.187 [DEBUG] [Thread-19087] [transport.py] [_log()] server lang: <none>
2026-04-15T12:42:56.187 [DEBUG] [Thread-19087] [transport.py] [_log()] kex follows: False
2026-04-15T12:42:56.187 [DEBUG] [Thread-19087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:42:56.188 [DEBUG] [Thread-19087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:42:56.188 [DEBUG] [Thread-19087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:42:56.188 [DEBUG] [Thread-19087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:42:56.188 [DEBUG] [Thread-19087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:42:56.188 [DEBUG] [Thread-19087] [transport.py] [_log()] Compression: none
2026-04-15T12:42:56.188 [DEBUG] [Thread-19087] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:42:56.205 [DEBUG] [Thread-19087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:42:56.205 [DEBUG] [Thread-19087] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:42:56.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:42:56.206 [DEBUG] [Thread-19087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:42:56.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:42:56.207 [DEBUG] [Thread-19087] [transport.py] [_log()] userauth is OK
2026-04-15T12:42:56.207 [DEBUG] [Thread-19087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:42:56.207 [DEBUG] [Thread-19087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:42:56.207 [DEBUG] [Thread-19087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:42:56.207 [DEBUG] [Thread-19087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:42:56.221 [INFO] [Thread-19087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:42:56.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:42:56.794 [DEBUG] [Thread-19087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:42:56.794 [DEBUG] [Thread-19087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:42:56.795 [DEBUG] [Thread-19087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:42:56.835 [DEBUG] [Thread-19087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:42:56.835 [DEBUG] [Thread-19087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:42:56.837 [DEBUG] [Thread-19087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:42:56.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:42:56.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:42:56.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:42:56.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:42:56.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:42:56.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:42:56.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:42:56.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:42:56.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:42:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.446319 -999.00  +13.60  19.12     66   +7.50 1 2 1 1 1   888    0 6.25 38.54 ----- 24.1 19.1 335.6 33.5 19.8 -20.6 18.8 -18.5 18.5 -15.8 20.1 -16.6
2026-04-15T12:42:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:42:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:42:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.446319
2026-04-15T12:42:56.854 [DEBUG] [Thread-19087] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:42:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:42:56.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:42:56.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:42:56.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:42:56.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:42:56.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:42:27', tmtdew=7.21472, humidity=61.833, cloud=0.0, wind=25.5481, temperature=13.0934, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:42:41.962', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:42:57.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:42:57.110 [DEBUG] [Thread-19090] [transport.py] [_log()] starting thread (client mode): 0xee98fb80
2026-04-15T12:42:57.110 [DEBUG] [Thread-19090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:42:57.124 [DEBUG] [Thread-19090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:42:57.125 [INFO] [Thread-19090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:42:57.132 [DEBUG] [Thread-19090] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:42:57.132 [DEBUG] [Thread-19090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:42:57.132 [DEBUG] [Thread-19090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:42:57.132 [DEBUG] [Thread-19090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:42:57.132 [DEBUG] [Thread-19090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:42:57.132 [DEBUG] [Thread-19090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:42:57.132 [DEBUG] [Thread-19090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:42:57.132 [DEBUG] [Thread-19090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:42:57.133 [DEBUG] [Thread-19090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:42:57.133 [DEBUG] [Thread-19090] [transport.py] [_log()] client lang: <none>
2026-04-15T12:42:57.133 [DEBUG] [Thread-19090] [transport.py] [_log()] server lang: <none>
2026-04-15T12:42:57.133 [DEBUG] [Thread-19090] [transport.py] [_log()] kex follows: False
2026-04-15T12:42:57.133 [DEBUG] [Thread-19090] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:42:57.133 [DEBUG] [Thread-19090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:42:57.133 [DEBUG] [Thread-19090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:42:57.133 [DEBUG] [Thread-19090] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:42:57.133 [DEBUG] [Thread-19090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:42:57.133 [DEBUG] [Thread-19090] [transport.py] [_log()] Compression: none
2026-04-15T12:42:57.134 [DEBUG] [Thread-19090] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:42:57.190 [DEBUG] [Thread-19090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:42:57.190 [DEBUG] [Thread-19090] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:42:57.191 [DEBUG] [Thread-19090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:42:57.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:42:57.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:42:57.248 [DEBUG] [Thread-19090] [transport.py] [_log()] userauth is OK
2026-04-15T12:42:57.248 [DEBUG] [Thread-19090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:42:57.248 [DEBUG] [Thread-19090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:42:57.248 [DEBUG] [Thread-19090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:42:57.248 [DEBUG] [Thread-19090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:42:57.274 [INFO] [Thread-19090] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:42:57.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:42:57.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:42:58.068 [DEBUG] [Thread-19090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:42:58.068 [DEBUG] [Thread-19090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:42:58.116 [DEBUG] [Thread-19090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:42:58.116 [DEBUG] [Thread-19090] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:42:58.125 [DEBUG] [Thread-19090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:42:58.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:42:58.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')
2026-04-15T12:42:58.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
2026-04-15T12:42:58.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:42:58.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:42:58.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:42:58.162 [DEBUG] [Thread-19090] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:43:09.995 [DEBUG] [Thread-19092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:43:17.419 [DEBUG] [Thread-19093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:43:25.038 [DEBUG] [Thread-19094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:43:28.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:43:28.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:43:28.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:43:29.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 43, 2), 7.35008, 61.2523, 0.0, 22.7257, 13.0432, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:43:29.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:43:02
2026-04-15T12:43:30.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:43:30.497 [DEBUG] [Thread-19095] [transport.py] [_log()] starting thread (client mode): 0xee98e2c0
2026-04-15T12:43:30.498 [DEBUG] [Thread-19095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:43:30.510 [DEBUG] [Thread-19095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:43:30.510 [INFO] [Thread-19095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:43:30.512 [DEBUG] [Thread-19095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:43:30.512 [DEBUG] [Thread-19095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:43:30.512 [DEBUG] [Thread-19095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:43:30.512 [DEBUG] [Thread-19095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:43:30.512 [DEBUG] [Thread-19095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:43:30.512 [DEBUG] [Thread-19095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:43:30.513 [DEBUG] [Thread-19095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:43:30.513 [DEBUG] [Thread-19095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:43:30.513 [DEBUG] [Thread-19095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:43:30.513 [DEBUG] [Thread-19095] [transport.py] [_log()] client lang: <none>
2026-04-15T12:43:30.513 [DEBUG] [Thread-19095] [transport.py] [_log()] server lang: <none>
2026-04-15T12:43:30.513 [DEBUG] [Thread-19095] [transport.py] [_log()] kex follows: False
2026-04-15T12:43:30.513 [DEBUG] [Thread-19095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:43:30.513 [DEBUG] [Thread-19095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:43:30.513 [DEBUG] [Thread-19095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:43:30.513 [DEBUG] [Thread-19095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:43:30.513 [DEBUG] [Thread-19095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:43:30.513 [DEBUG] [Thread-19095] [transport.py] [_log()] Compression: none
2026-04-15T12:43:30.514 [DEBUG] [Thread-19095] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:43:30.522 [DEBUG] [Thread-19095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:43:30.522 [DEBUG] [Thread-19095] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:43:30.522 [DEBUG] [Thread-19095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:43:30.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:43:30.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:43:30.524 [DEBUG] [Thread-19095] [transport.py] [_log()] userauth is OK
2026-04-15T12:43:30.524 [DEBUG] [Thread-19095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:43:30.524 [DEBUG] [Thread-19095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:43:30.524 [DEBUG] [Thread-19095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:43:30.524 [DEBUG] [Thread-19095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:43:30.540 [INFO] [Thread-19095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:43:30.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:43:31.084 [DEBUG] [Thread-19095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:43:31.084 [DEBUG] [Thread-19095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:43:31.085 [DEBUG] [Thread-19095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:43:31.125 [DEBUG] [Thread-19095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:43:31.125 [DEBUG] [Thread-19095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:43:31.127 [DEBUG] [Thread-19095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:43:31.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:43:31.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:43:31.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:43:31.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:43:31.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:43:31.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:43:31.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:43:31.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:43:31.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:43:31.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.446666 -999.00  +12.80  16.13     66   +6.70 1 2 1 1 1   888    0 6.45 45.68 ----- 25.6 16.1 338.1 28.4 19.5 -19.3 18.5 -18.6 18.3 -16.1 19.6 -17.2
2026-04-15T12:43:31.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:43:31.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:43:31.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.446666
2026-04-15T12:43:31.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:43:31.146 [DEBUG] [Thread-19095] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:43:31.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:43:31.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:43:31.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:43:31.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:43:31.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:43:02', tmtdew=7.35008, humidity=61.2523, cloud=0.0, wind=22.7257, temperature=13.0432, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:43:11.942', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:43:31.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:43:31.402 [DEBUG] [Thread-19098] [transport.py] [_log()] starting thread (client mode): 0xee98e8c0
2026-04-15T12:43:31.403 [DEBUG] [Thread-19098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:43:31.417 [DEBUG] [Thread-19098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:43:31.417 [INFO] [Thread-19098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:43:31.424 [DEBUG] [Thread-19098] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:43:31.424 [DEBUG] [Thread-19098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:43:31.424 [DEBUG] [Thread-19098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:43:31.424 [DEBUG] [Thread-19098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:43:31.425 [DEBUG] [Thread-19098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:43:31.425 [DEBUG] [Thread-19098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:43:31.425 [DEBUG] [Thread-19098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:43:31.425 [DEBUG] [Thread-19098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:43:31.425 [DEBUG] [Thread-19098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:43:31.425 [DEBUG] [Thread-19098] [transport.py] [_log()] client lang: <none>
2026-04-15T12:43:31.425 [DEBUG] [Thread-19098] [transport.py] [_log()] server lang: <none>
2026-04-15T12:43:31.425 [DEBUG] [Thread-19098] [transport.py] [_log()] kex follows: False
2026-04-15T12:43:31.425 [DEBUG] [Thread-19098] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:43:31.425 [DEBUG] [Thread-19098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:43:31.425 [DEBUG] [Thread-19098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:43:31.425 [DEBUG] [Thread-19098] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:43:31.426 [DEBUG] [Thread-19098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:43:31.426 [DEBUG] [Thread-19098] [transport.py] [_log()] Compression: none
2026-04-15T12:43:31.426 [DEBUG] [Thread-19098] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:43:31.482 [DEBUG] [Thread-19098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:43:31.483 [DEBUG] [Thread-19098] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:43:31.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:43:31.483 [DEBUG] [Thread-19098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:43:31.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:43:31.539 [DEBUG] [Thread-19098] [transport.py] [_log()] userauth is OK
2026-04-15T12:43:31.540 [DEBUG] [Thread-19098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:43:31.540 [DEBUG] [Thread-19098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:43:31.540 [DEBUG] [Thread-19098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:43:31.540 [DEBUG] [Thread-19098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:43:31.565 [INFO] [Thread-19098] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:43:31.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:43:31.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:43:32.456 [DEBUG] [Thread-19098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:43:32.456 [DEBUG] [Thread-19098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:43:32.503 [DEBUG] [Thread-19098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:43:32.503 [DEBUG] [Thread-19098] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:43:32.512 [DEBUG] [Thread-19098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:43:32.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:43:32.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')
2026-04-15T12:43:32.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
2026-04-15T12:43:32.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:43:32.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:43:32.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:43:32.543 [DEBUG] [Thread-19098] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:43:40.070 [DEBUG] [Thread-19100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:43:48.584 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:43:48.586 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:43:55.115 [DEBUG] [Thread-19101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:44:02.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:44:02.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:44:02.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:44:03.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 43, 37), 7.32754, 61.1346, 0.0, 21.9125, 13.4885, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:44:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:43:37
2026-04-15T12:44:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:44:04.621 [DEBUG] [Thread-19102] [transport.py] [_log()] starting thread (client mode): 0xee98e560
2026-04-15T12:44:04.621 [DEBUG] [Thread-19102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:44:04.633 [DEBUG] [Thread-19102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:44:04.633 [INFO] [Thread-19102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:44:04.636 [DEBUG] [Thread-19102] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:44:04.636 [DEBUG] [Thread-19102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:44:04.636 [DEBUG] [Thread-19102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:44:04.636 [DEBUG] [Thread-19102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:44:04.636 [DEBUG] [Thread-19102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:44:04.636 [DEBUG] [Thread-19102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:44:04.636 [DEBUG] [Thread-19102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:44:04.636 [DEBUG] [Thread-19102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:44:04.637 [DEBUG] [Thread-19102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:44:04.637 [DEBUG] [Thread-19102] [transport.py] [_log()] client lang: <none>
2026-04-15T12:44:04.637 [DEBUG] [Thread-19102] [transport.py] [_log()] server lang: <none>
2026-04-15T12:44:04.637 [DEBUG] [Thread-19102] [transport.py] [_log()] kex follows: False
2026-04-15T12:44:04.637 [DEBUG] [Thread-19102] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:44:04.637 [DEBUG] [Thread-19102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:44:04.637 [DEBUG] [Thread-19102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:44:04.637 [DEBUG] [Thread-19102] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:44:04.637 [DEBUG] [Thread-19102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:44:04.637 [DEBUG] [Thread-19102] [transport.py] [_log()] Compression: none
2026-04-15T12:44:04.637 [DEBUG] [Thread-19102] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:44:04.655 [DEBUG] [Thread-19102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:44:04.656 [DEBUG] [Thread-19102] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:44:04.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:44:04.656 [DEBUG] [Thread-19102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:44:04.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:44:04.658 [DEBUG] [Thread-19102] [transport.py] [_log()] userauth is OK
2026-04-15T12:44:04.658 [DEBUG] [Thread-19102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:44:04.658 [DEBUG] [Thread-19102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:44:04.658 [DEBUG] [Thread-19102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:44:04.658 [DEBUG] [Thread-19102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:44:04.693 [INFO] [Thread-19102] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:44:04.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:44:05.293 [DEBUG] [Thread-19102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:44:05.293 [DEBUG] [Thread-19102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:44:05.294 [DEBUG] [Thread-19102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:44:05.334 [DEBUG] [Thread-19102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:44:05.334 [DEBUG] [Thread-19102] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:44:05.336 [DEBUG] [Thread-19102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:44:05.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:44:05.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:44:05.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:44:05.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:44:05.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:44:05.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:44:05.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:44:05.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:44:05.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:44:05.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.447013 -999.00  +12.60  21.82     68   +7.00 1 2 1 1 1   888    0 6.30 45.26 ----- 31.0 21.8 330.0 31.4 19.3 -18.1 18.3 -17.5 18.1 -15.5 19.2 -16.5
2026-04-15T12:44:05.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:44:05.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:44:05.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.447013
2026-04-15T12:44:05.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:44:05.359 [DEBUG] [Thread-19102] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:44:05.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:44:05.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:44:05.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:44:05.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:44:05.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:43:37', tmtdew=7.32754, humidity=61.1346, cloud=0.0, wind=21.9125, temperature=13.4885, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:43:41.923', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:44:05.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:44:05.614 [DEBUG] [Thread-19105] [transport.py] [_log()] starting thread (client mode): 0xf13e0f40
2026-04-15T12:44:05.615 [DEBUG] [Thread-19105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:44:05.629 [DEBUG] [Thread-19105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:44:05.629 [INFO] [Thread-19105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:44:05.636 [DEBUG] [Thread-19105] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:44:05.636 [DEBUG] [Thread-19105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:44:05.636 [DEBUG] [Thread-19105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:44:05.636 [DEBUG] [Thread-19105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:44:05.636 [DEBUG] [Thread-19105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:44:05.637 [DEBUG] [Thread-19105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:44:05.637 [DEBUG] [Thread-19105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:44:05.637 [DEBUG] [Thread-19105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:44:05.637 [DEBUG] [Thread-19105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:44:05.637 [DEBUG] [Thread-19105] [transport.py] [_log()] client lang: <none>
2026-04-15T12:44:05.637 [DEBUG] [Thread-19105] [transport.py] [_log()] server lang: <none>
2026-04-15T12:44:05.637 [DEBUG] [Thread-19105] [transport.py] [_log()] kex follows: False
2026-04-15T12:44:05.637 [DEBUG] [Thread-19105] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:44:05.637 [DEBUG] [Thread-19105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:44:05.637 [DEBUG] [Thread-19105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:44:05.637 [DEBUG] [Thread-19105] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:44:05.638 [DEBUG] [Thread-19105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:44:05.638 [DEBUG] [Thread-19105] [transport.py] [_log()] Compression: none
2026-04-15T12:44:05.638 [DEBUG] [Thread-19105] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:44:05.699 [DEBUG] [Thread-19105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:44:05.699 [DEBUG] [Thread-19105] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:44:05.700 [DEBUG] [Thread-19105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:44:05.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:44:05.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:44:05.759 [DEBUG] [Thread-19105] [transport.py] [_log()] userauth is OK
2026-04-15T12:44:05.760 [DEBUG] [Thread-19105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:44:05.760 [DEBUG] [Thread-19105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:44:05.760 [DEBUG] [Thread-19105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:44:05.760 [DEBUG] [Thread-19105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:44:05.780 [INFO] [Thread-19105] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:44:05.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:44:05.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:44:06.649 [DEBUG] [Thread-19105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:44:06.650 [DEBUG] [Thread-19105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:44:06.697 [DEBUG] [Thread-19105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:44:06.697 [DEBUG] [Thread-19105] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:44:06.705 [DEBUG] [Thread-19105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:44:06.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:44:06.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')
2026-04-15T12:44:06.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T12:44:06.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:44:06.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:44:06.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:44:06.745 [DEBUG] [Thread-19105] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:44:10.146 [DEBUG] [Thread-19107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:44:17.545 [DEBUG] [Thread-19108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:44:25.190 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:44:36.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:44:36.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:44:36.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
2026-04-15T12:44:38.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 44, 12), 7.12191, 61.7326, 0.0, 19.7262, 12.9941, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:44:38.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:44:12
2026-04-15T12:44:38.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:44:38.823 [DEBUG] [Thread-19110] [transport.py] [_log()] starting thread (client mode): 0xee98e500
2026-04-15T12:44:38.823 [DEBUG] [Thread-19110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:44:38.841 [DEBUG] [Thread-19110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:44:38.841 [INFO] [Thread-19110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:44:38.844 [DEBUG] [Thread-19110] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:44:38.844 [DEBUG] [Thread-19110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:44:38.844 [DEBUG] [Thread-19110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:44:38.845 [DEBUG] [Thread-19110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:44:38.845 [DEBUG] [Thread-19110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:44:38.845 [DEBUG] [Thread-19110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:44:38.845 [DEBUG] [Thread-19110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:44:38.845 [DEBUG] [Thread-19110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:44:38.845 [DEBUG] [Thread-19110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:44:38.845 [DEBUG] [Thread-19110] [transport.py] [_log()] client lang: <none>
2026-04-15T12:44:38.845 [DEBUG] [Thread-19110] [transport.py] [_log()] server lang: <none>
2026-04-15T12:44:38.845 [DEBUG] [Thread-19110] [transport.py] [_log()] kex follows: False
2026-04-15T12:44:38.845 [DEBUG] [Thread-19110] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:44:38.845 [DEBUG] [Thread-19110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:44:38.845 [DEBUG] [Thread-19110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:44:38.846 [DEBUG] [Thread-19110] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:44:38.846 [DEBUG] [Thread-19110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:44:38.846 [DEBUG] [Thread-19110] [transport.py] [_log()] Compression: none
2026-04-15T12:44:38.846 [DEBUG] [Thread-19110] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:44:38.862 [DEBUG] [Thread-19110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:44:38.863 [DEBUG] [Thread-19110] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:44:38.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:44:38.864 [DEBUG] [Thread-19110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:44:38.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:44:38.864 [DEBUG] [Thread-19110] [transport.py] [_log()] userauth is OK
2026-04-15T12:44:38.864 [DEBUG] [Thread-19110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:44:38.865 [DEBUG] [Thread-19110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:44:38.865 [DEBUG] [Thread-19110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:44:38.865 [DEBUG] [Thread-19110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:44:38.883 [INFO] [Thread-19110] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:44:38.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:44:39.444 [DEBUG] [Thread-19110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:44:39.445 [DEBUG] [Thread-19110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:44:39.445 [DEBUG] [Thread-19110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:44:39.485 [DEBUG] [Thread-19110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:44:39.485 [DEBUG] [Thread-19110] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:44:39.488 [DEBUG] [Thread-19110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:44:39.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:44:39.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:44:39.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:44:39.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:44:39.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:44:39.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:44:39.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:44:39.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:44:39.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:44:39.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.447360 -999.00  +12.40  22.85     69   +7.00 1 2 1 1 1   888    0 6.74 59.14 ----- 27.3 22.9 335.2 35.0 19.1 -18.0 18.1 -17.0 18.0 -16.5 19.0 -16.1
2026-04-15T12:44:39.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:44:39.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:44:39.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.447360
2026-04-15T12:44:39.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:44:39.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:44:39.514 [DEBUG] [Thread-19110] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:44:39.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:44:39.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:44:39.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:44:39.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:44:12', tmtdew=7.12191, humidity=61.7326, cloud=0.0, wind=19.7262, temperature=12.9941, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:44:11.904', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:44:39.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:44:39.779 [DEBUG] [Thread-19113] [transport.py] [_log()] starting thread (client mode): 0xee9e5bd0
2026-04-15T12:44:39.779 [DEBUG] [Thread-19113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:44:39.793 [DEBUG] [Thread-19113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:44:39.794 [INFO] [Thread-19113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:44:39.801 [DEBUG] [Thread-19113] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:44:39.801 [DEBUG] [Thread-19113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:44:39.801 [DEBUG] [Thread-19113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:44:39.801 [DEBUG] [Thread-19113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:44:39.801 [DEBUG] [Thread-19113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:44:39.801 [DEBUG] [Thread-19113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:44:39.801 [DEBUG] [Thread-19113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:44:39.802 [DEBUG] [Thread-19113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:44:39.802 [DEBUG] [Thread-19113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:44:39.802 [DEBUG] [Thread-19113] [transport.py] [_log()] client lang: <none>
2026-04-15T12:44:39.802 [DEBUG] [Thread-19113] [transport.py] [_log()] server lang: <none>
2026-04-15T12:44:39.802 [DEBUG] [Thread-19113] [transport.py] [_log()] kex follows: False
2026-04-15T12:44:39.802 [DEBUG] [Thread-19113] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:44:39.802 [DEBUG] [Thread-19113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:44:39.802 [DEBUG] [Thread-19113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:44:39.802 [DEBUG] [Thread-19113] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:44:39.802 [DEBUG] [Thread-19113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:44:39.802 [DEBUG] [Thread-19113] [transport.py] [_log()] Compression: none
2026-04-15T12:44:39.803 [DEBUG] [Thread-19113] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:44:39.859 [DEBUG] [Thread-19113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:44:39.859 [DEBUG] [Thread-19113] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:44:39.859 [DEBUG] [Thread-19113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:44:39.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:44:39.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:44:39.915 [DEBUG] [Thread-19113] [transport.py] [_log()] userauth is OK
2026-04-15T12:44:39.916 [DEBUG] [Thread-19113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:44:39.916 [DEBUG] [Thread-19113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:44:39.916 [DEBUG] [Thread-19113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:44:39.916 [DEBUG] [Thread-19113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:44:39.940 [INFO] [Thread-19113] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:44:39.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:44:39.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:44:40.222 [DEBUG] [Thread-19115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:44:40.763 [DEBUG] [Thread-19113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:44:40.764 [DEBUG] [Thread-19113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:44:40.812 [DEBUG] [Thread-19113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:44:40.812 [DEBUG] [Thread-19113] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:44:40.821 [DEBUG] [Thread-19113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:44:40.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:44:40.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')
2026-04-15T12:44:40.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
2026-04-15T12:44:40.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:44:40.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:44:40.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:44:40.857 [DEBUG] [Thread-19113] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:44:48.725 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:44:48.726 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:44:55.267 [DEBUG] [Thread-19116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:45:10.301 [DEBUG] [Thread-19117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:45:10.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:45:10.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:45:10.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
2026-04-15T12:45:12.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 44, 48), 6.92134, 62.8246, 0.0, 23.9587, 13.2887, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:45:12.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:44:48
2026-04-15T12:45:12.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:45:12.941 [DEBUG] [Thread-19118] [transport.py] [_log()] starting thread (client mode): 0xf13e2f20
2026-04-15T12:45:12.941 [DEBUG] [Thread-19118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:45:12.958 [DEBUG] [Thread-19118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:45:12.958 [INFO] [Thread-19118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:45:12.961 [DEBUG] [Thread-19118] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:45:12.961 [DEBUG] [Thread-19118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:45:12.961 [DEBUG] [Thread-19118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:45:12.961 [DEBUG] [Thread-19118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:45:12.962 [DEBUG] [Thread-19118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:45:12.962 [DEBUG] [Thread-19118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:45:12.962 [DEBUG] [Thread-19118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:45:12.962 [DEBUG] [Thread-19118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:45:12.962 [DEBUG] [Thread-19118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:45:12.962 [DEBUG] [Thread-19118] [transport.py] [_log()] client lang: <none>
2026-04-15T12:45:12.962 [DEBUG] [Thread-19118] [transport.py] [_log()] server lang: <none>
2026-04-15T12:45:12.962 [DEBUG] [Thread-19118] [transport.py] [_log()] kex follows: False
2026-04-15T12:45:12.962 [DEBUG] [Thread-19118] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:45:12.962 [DEBUG] [Thread-19118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:45:12.962 [DEBUG] [Thread-19118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:45:12.962 [DEBUG] [Thread-19118] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:45:12.962 [DEBUG] [Thread-19118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:45:12.962 [DEBUG] [Thread-19118] [transport.py] [_log()] Compression: none
2026-04-15T12:45:12.962 [DEBUG] [Thread-19118] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:45:12.978 [DEBUG] [Thread-19118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:45:12.978 [DEBUG] [Thread-19118] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:45:12.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:45:12.979 [DEBUG] [Thread-19118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:45:12.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:45:12.980 [DEBUG] [Thread-19118] [transport.py] [_log()] userauth is OK
2026-04-15T12:45:12.980 [DEBUG] [Thread-19118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:45:12.980 [DEBUG] [Thread-19118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:45:12.980 [DEBUG] [Thread-19118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:45:12.980 [DEBUG] [Thread-19118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:45:12.993 [INFO] [Thread-19118] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:45:12.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:45:17.557 [DEBUG] [Thread-19118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:45:17.557 [DEBUG] [Thread-19118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:45:17.558 [DEBUG] [Thread-19118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:45:17.598 [DEBUG] [Thread-19118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:45:17.598 [DEBUG] [Thread-19118] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:45:17.600 [DEBUG] [Thread-19118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:45:17.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:45:17.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:45:17.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:45:17.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:45:17.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:45:17.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:45:17.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:45:17.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:45:17.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:45:17.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.447360 -999.00  +12.40  22.85     69   +7.00 1 2 1 1 1   888    0 6.74 59.14 ----- 27.3 22.9 335.2 35.0 19.1 -18.0 18.1 -17.0 18.0 -16.5 19.0 -16.1
2026-04-15T12:45:17.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:45:17.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:45:17.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.447360
2026-04-15T12:45:17.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:45:17.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:45:17.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:45:17.648 [DEBUG] [Thread-19118] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:45:17.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:45:17.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:45:17.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:44:48', tmtdew=6.92134, humidity=62.8246, cloud=0.0, wind=23.9587, temperature=13.2887, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:44:11.904', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:45:17.656 [DEBUG] [Thread-19121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:45:17.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:45:17.882 [DEBUG] [Thread-19122] [transport.py] [_log()] starting thread (client mode): 0xf13e1cc0
2026-04-15T12:45:17.882 [DEBUG] [Thread-19122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:45:17.896 [DEBUG] [Thread-19122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:45:17.897 [INFO] [Thread-19122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:45:17.904 [DEBUG] [Thread-19122] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:45:17.904 [DEBUG] [Thread-19122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:45:17.904 [DEBUG] [Thread-19122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:45:17.904 [DEBUG] [Thread-19122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:45:17.904 [DEBUG] [Thread-19122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:45:17.904 [DEBUG] [Thread-19122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:45:17.904 [DEBUG] [Thread-19122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:45:17.904 [DEBUG] [Thread-19122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:45:17.905 [DEBUG] [Thread-19122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:45:17.905 [DEBUG] [Thread-19122] [transport.py] [_log()] client lang: <none>
2026-04-15T12:45:17.905 [DEBUG] [Thread-19122] [transport.py] [_log()] server lang: <none>
2026-04-15T12:45:17.905 [DEBUG] [Thread-19122] [transport.py] [_log()] kex follows: False
2026-04-15T12:45:17.905 [DEBUG] [Thread-19122] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:45:17.905 [DEBUG] [Thread-19122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:45:17.905 [DEBUG] [Thread-19122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:45:17.905 [DEBUG] [Thread-19122] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:45:17.905 [DEBUG] [Thread-19122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:45:17.905 [DEBUG] [Thread-19122] [transport.py] [_log()] Compression: none
2026-04-15T12:45:17.905 [DEBUG] [Thread-19122] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:45:17.963 [DEBUG] [Thread-19122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:45:17.963 [DEBUG] [Thread-19122] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:45:17.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:45:17.964 [DEBUG] [Thread-19122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:45:17.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:45:18.020 [DEBUG] [Thread-19122] [transport.py] [_log()] userauth is OK
2026-04-15T12:45:18.020 [DEBUG] [Thread-19122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:45:18.020 [DEBUG] [Thread-19122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:45:18.020 [DEBUG] [Thread-19122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:45:18.020 [DEBUG] [Thread-19122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:45:18.046 [INFO] [Thread-19122] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:45:18.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:45:18.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:45:18.900 [DEBUG] [Thread-19122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:45:18.900 [DEBUG] [Thread-19122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:45:18.948 [DEBUG] [Thread-19122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:45:18.948 [DEBUG] [Thread-19122] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:45:18.958 [DEBUG] [Thread-19122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:45:18.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:45:18.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')
2026-04-15T12:45:18.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
2026-04-15T12:45:18.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:45:18.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:45:18.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:45:18.996 [DEBUG] [Thread-19122] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:45:25.337 [DEBUG] [Thread-19124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:45:40.382 [DEBUG] [Thread-19125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:45:48.868 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:45:48.869 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:45:49.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:45:49.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:45:49.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
2026-04-15T12:45:50.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 45, 24), 7.08156, 61.8296, 0.0, 21.4218, 12.9777, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:45:50.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:45:24
2026-04-15T12:45:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:45:51.210 [DEBUG] [Thread-19126] [transport.py] [_log()] starting thread (client mode): 0xf1337940
2026-04-15T12:45:51.210 [DEBUG] [Thread-19126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:45:51.226 [DEBUG] [Thread-19126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:45:51.227 [INFO] [Thread-19126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:45:51.230 [DEBUG] [Thread-19126] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:45:51.230 [DEBUG] [Thread-19126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:45:51.230 [DEBUG] [Thread-19126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:45:51.230 [DEBUG] [Thread-19126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:45:51.230 [DEBUG] [Thread-19126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:45:51.230 [DEBUG] [Thread-19126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:45:51.230 [DEBUG] [Thread-19126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:45:51.230 [DEBUG] [Thread-19126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:45:51.230 [DEBUG] [Thread-19126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:45:51.230 [DEBUG] [Thread-19126] [transport.py] [_log()] client lang: <none>
2026-04-15T12:45:51.230 [DEBUG] [Thread-19126] [transport.py] [_log()] server lang: <none>
2026-04-15T12:45:51.231 [DEBUG] [Thread-19126] [transport.py] [_log()] kex follows: False
2026-04-15T12:45:51.231 [DEBUG] [Thread-19126] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:45:51.231 [DEBUG] [Thread-19126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:45:51.231 [DEBUG] [Thread-19126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:45:51.231 [DEBUG] [Thread-19126] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:45:51.231 [DEBUG] [Thread-19126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:45:51.231 [DEBUG] [Thread-19126] [transport.py] [_log()] Compression: none
2026-04-15T12:45:51.231 [DEBUG] [Thread-19126] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:45:51.257 [DEBUG] [Thread-19126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:45:51.258 [DEBUG] [Thread-19126] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:45:51.258 [DEBUG] [Thread-19126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:45:51.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:45:51.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:45:51.259 [DEBUG] [Thread-19126] [transport.py] [_log()] userauth is OK
2026-04-15T12:45:51.260 [DEBUG] [Thread-19126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:45:51.260 [DEBUG] [Thread-19126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:45:51.260 [DEBUG] [Thread-19126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:45:51.260 [DEBUG] [Thread-19126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:45:51.278 [INFO] [Thread-19126] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:45:51.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:45:51.921 [DEBUG] [Thread-19126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:45:51.921 [DEBUG] [Thread-19126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:45:51.922 [DEBUG] [Thread-19126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:45:51.962 [DEBUG] [Thread-19126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:45:51.962 [DEBUG] [Thread-19126] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:45:51.965 [DEBUG] [Thread-19126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:45:51.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:45:51.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:45:51.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:45:51.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:45:51.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:45:51.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:45:51.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:45:51.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:45:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:45:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.448402 -999.00  +12.40  19.10     70   +7.20 1 2 1 1 1   888    0 7.60 81.55 ----- 23.2 19.1 326.2 27.2 19.1 -15.7 18.0 -15.4 17.9 -11.6 18.6 -14.8
2026-04-15T12:45:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:45:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:45:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.448402
2026-04-15T12:45:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:45:51.991 [DEBUG] [Thread-19126] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:45:51.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:45:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:45:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:45:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:45:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:45:24', tmtdew=7.08156, humidity=61.8296, cloud=0.0, wind=21.4218, temperature=12.9777, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:45:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:45:52.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:45:52.246 [DEBUG] [Thread-19129] [transport.py] [_log()] starting thread (client mode): 0xee901f00
2026-04-15T12:45:52.246 [DEBUG] [Thread-19129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:45:52.261 [DEBUG] [Thread-19129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:45:52.261 [INFO] [Thread-19129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:45:52.268 [DEBUG] [Thread-19129] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:45:52.268 [DEBUG] [Thread-19129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:45:52.269 [DEBUG] [Thread-19129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:45:52.269 [DEBUG] [Thread-19129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:45:52.269 [DEBUG] [Thread-19129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:45:52.269 [DEBUG] [Thread-19129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:45:52.269 [DEBUG] [Thread-19129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:45:52.269 [DEBUG] [Thread-19129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:45:52.269 [DEBUG] [Thread-19129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:45:52.269 [DEBUG] [Thread-19129] [transport.py] [_log()] client lang: <none>
2026-04-15T12:45:52.269 [DEBUG] [Thread-19129] [transport.py] [_log()] server lang: <none>
2026-04-15T12:45:52.270 [DEBUG] [Thread-19129] [transport.py] [_log()] kex follows: False
2026-04-15T12:45:52.270 [DEBUG] [Thread-19129] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:45:52.270 [DEBUG] [Thread-19129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:45:52.270 [DEBUG] [Thread-19129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:45:52.270 [DEBUG] [Thread-19129] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:45:52.270 [DEBUG] [Thread-19129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:45:52.270 [DEBUG] [Thread-19129] [transport.py] [_log()] Compression: none
2026-04-15T12:45:52.270 [DEBUG] [Thread-19129] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:45:52.331 [DEBUG] [Thread-19129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:45:52.331 [DEBUG] [Thread-19129] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:45:52.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:45:52.332 [DEBUG] [Thread-19129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:45:52.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:45:52.388 [DEBUG] [Thread-19129] [transport.py] [_log()] userauth is OK
2026-04-15T12:45:52.388 [DEBUG] [Thread-19129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:45:52.388 [DEBUG] [Thread-19129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:45:52.388 [DEBUG] [Thread-19129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:45:52.388 [DEBUG] [Thread-19129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:45:52.406 [INFO] [Thread-19129] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:45:52.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:45:52.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:45:53.231 [DEBUG] [Thread-19129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:45:53.231 [DEBUG] [Thread-19129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:45:53.278 [DEBUG] [Thread-19129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:45:53.278 [DEBUG] [Thread-19129] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:45:53.287 [DEBUG] [Thread-19129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:45:53.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:45:53.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')
2026-04-15T12:45:53.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
2026-04-15T12:45:53.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:45:53.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:45:53.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:45:53.322 [DEBUG] [Thread-19129] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:45:55.415 [DEBUG] [Thread-19131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:46:10.462 [DEBUG] [Thread-19132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:46:17.784 [DEBUG] [Thread-19133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:46:23.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:46:23.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:46:23.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:46:24.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 45, 59), 6.98083, 62.4152, 0.0, 17.9446, 12.7774, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:46:24.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:45:59
2026-04-15T12:46:25.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:46:25.421 [DEBUG] [Thread-19134] [transport.py] [_log()] starting thread (client mode): 0xee903bb0
2026-04-15T12:46:25.421 [DEBUG] [Thread-19134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:46:25.441 [DEBUG] [Thread-19134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:46:25.441 [INFO] [Thread-19134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:46:25.443 [DEBUG] [Thread-19134] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:46:25.443 [DEBUG] [Thread-19134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:46:25.443 [DEBUG] [Thread-19134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:46:25.443 [DEBUG] [Thread-19134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:46:25.443 [DEBUG] [Thread-19134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:46:25.443 [DEBUG] [Thread-19134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:46:25.444 [DEBUG] [Thread-19134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:46:25.444 [DEBUG] [Thread-19134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:46:25.444 [DEBUG] [Thread-19134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:46:25.444 [DEBUG] [Thread-19134] [transport.py] [_log()] client lang: <none>
2026-04-15T12:46:25.444 [DEBUG] [Thread-19134] [transport.py] [_log()] server lang: <none>
2026-04-15T12:46:25.444 [DEBUG] [Thread-19134] [transport.py] [_log()] kex follows: False
2026-04-15T12:46:25.444 [DEBUG] [Thread-19134] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:46:25.444 [DEBUG] [Thread-19134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:46:25.444 [DEBUG] [Thread-19134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:46:25.444 [DEBUG] [Thread-19134] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:46:25.444 [DEBUG] [Thread-19134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:46:25.444 [DEBUG] [Thread-19134] [transport.py] [_log()] Compression: none
2026-04-15T12:46:25.445 [DEBUG] [Thread-19134] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:46:25.452 [DEBUG] [Thread-19134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:46:25.453 [DEBUG] [Thread-19134] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:46:25.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:46:25.453 [DEBUG] [Thread-19134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:46:25.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:46:25.454 [DEBUG] [Thread-19134] [transport.py] [_log()] userauth is OK
2026-04-15T12:46:25.455 [DEBUG] [Thread-19134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:46:25.455 [DEBUG] [Thread-19134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:46:25.455 [DEBUG] [Thread-19134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:46:25.455 [DEBUG] [Thread-19134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:46:25.472 [INFO] [Thread-19134] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:46:25.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:46:25.493 [DEBUG] [Thread-19136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:46:26.242 [DEBUG] [Thread-19134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:46:26.242 [DEBUG] [Thread-19134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:46:26.242 [DEBUG] [Thread-19134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:46:26.283 [DEBUG] [Thread-19134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:46:26.283 [DEBUG] [Thread-19134] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:46:26.289 [DEBUG] [Thread-19134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:46:26.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:46:26.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:46:26.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:46:26.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:46:26.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:46:26.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:46:26.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:46:26.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:46:26.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:46:26.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.448402 -999.00  +12.40  19.10     70   +7.20 1 2 1 1 1   888    0 7.60 81.55 ----- 23.2 19.1 326.2 27.2 19.1 -15.7 18.0 -15.4 17.9 -11.6 18.6 -14.8
2026-04-15T12:46:26.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:46:26.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:46:26.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.448402
2026-04-15T12:46:26.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:46:26.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:46:26.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:46:26.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:46:26.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:46:26.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:45:59', tmtdew=6.98083, humidity=62.4152, cloud=0.0, wind=17.9446, temperature=12.7774, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:45:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:46:26.304 [DEBUG] [Thread-19134] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:46:26.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:46:26.523 [DEBUG] [Thread-19138] [transport.py] [_log()] starting thread (client mode): 0xf13ff850
2026-04-15T12:46:26.523 [DEBUG] [Thread-19138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:46:26.538 [DEBUG] [Thread-19138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:46:26.538 [INFO] [Thread-19138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:46:26.546 [DEBUG] [Thread-19138] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:46:26.546 [DEBUG] [Thread-19138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:46:26.546 [DEBUG] [Thread-19138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:46:26.546 [DEBUG] [Thread-19138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:46:26.546 [DEBUG] [Thread-19138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:46:26.546 [DEBUG] [Thread-19138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:46:26.546 [DEBUG] [Thread-19138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:46:26.546 [DEBUG] [Thread-19138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:46:26.546 [DEBUG] [Thread-19138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:46:26.546 [DEBUG] [Thread-19138] [transport.py] [_log()] client lang: <none>
2026-04-15T12:46:26.547 [DEBUG] [Thread-19138] [transport.py] [_log()] server lang: <none>
2026-04-15T12:46:26.547 [DEBUG] [Thread-19138] [transport.py] [_log()] kex follows: False
2026-04-15T12:46:26.547 [DEBUG] [Thread-19138] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:46:26.547 [DEBUG] [Thread-19138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:46:26.547 [DEBUG] [Thread-19138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:46:26.547 [DEBUG] [Thread-19138] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:46:26.547 [DEBUG] [Thread-19138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:46:26.547 [DEBUG] [Thread-19138] [transport.py] [_log()] Compression: none
2026-04-15T12:46:26.547 [DEBUG] [Thread-19138] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:46:26.606 [DEBUG] [Thread-19138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:46:26.606 [DEBUG] [Thread-19138] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:46:26.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:46:26.607 [DEBUG] [Thread-19138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:46:26.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:46:26.664 [DEBUG] [Thread-19138] [transport.py] [_log()] userauth is OK
2026-04-15T12:46:26.664 [DEBUG] [Thread-19138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:46:26.664 [DEBUG] [Thread-19138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:46:26.664 [DEBUG] [Thread-19138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:46:26.664 [DEBUG] [Thread-19138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:46:26.690 [INFO] [Thread-19138] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:46:26.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:46:26.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:46:27.544 [DEBUG] [Thread-19138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:46:27.544 [DEBUG] [Thread-19138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:46:27.592 [DEBUG] [Thread-19138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:46:27.592 [DEBUG] [Thread-19138] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:46:27.601 [DEBUG] [Thread-19138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:46:27.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:46:27.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')
2026-04-15T12:46:27.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
2026-04-15T12:46:27.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:46:27.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:46:27.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:46:27.635 [DEBUG] [Thread-19138] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:46:40.524 [DEBUG] [Thread-19140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:46:49.009 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:46:49.011 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:46:55.573 [DEBUG] [Thread-19141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:46:57.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:46:57.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:46:57.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
2026-04-15T12:46:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 46, 35), 7.1223, 62.029, 0.0, 18.8078, 13.5872, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:46:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:46:35
2026-04-15T12:46:59.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:46:59.775 [DEBUG] [Thread-19142] [transport.py] [_log()] starting thread (client mode): 0xf13346d0
2026-04-15T12:46:59.775 [DEBUG] [Thread-19142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:46:59.795 [DEBUG] [Thread-19142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:46:59.795 [INFO] [Thread-19142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:46:59.796 [DEBUG] [Thread-19142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:46:59.796 [DEBUG] [Thread-19142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:46:59.796 [DEBUG] [Thread-19142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:46:59.796 [DEBUG] [Thread-19142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:46:59.797 [DEBUG] [Thread-19142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:46:59.797 [DEBUG] [Thread-19142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:46:59.797 [DEBUG] [Thread-19142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:46:59.797 [DEBUG] [Thread-19142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:46:59.797 [DEBUG] [Thread-19142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:46:59.797 [DEBUG] [Thread-19142] [transport.py] [_log()] client lang: <none>
2026-04-15T12:46:59.797 [DEBUG] [Thread-19142] [transport.py] [_log()] server lang: <none>
2026-04-15T12:46:59.797 [DEBUG] [Thread-19142] [transport.py] [_log()] kex follows: False
2026-04-15T12:46:59.797 [DEBUG] [Thread-19142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:46:59.797 [DEBUG] [Thread-19142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:46:59.797 [DEBUG] [Thread-19142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:46:59.797 [DEBUG] [Thread-19142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:46:59.798 [DEBUG] [Thread-19142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:46:59.798 [DEBUG] [Thread-19142] [transport.py] [_log()] Compression: none
2026-04-15T12:46:59.798 [DEBUG] [Thread-19142] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:46:59.806 [DEBUG] [Thread-19142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:46:59.806 [DEBUG] [Thread-19142] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:46:59.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:46:59.807 [DEBUG] [Thread-19142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:46:59.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:46:59.808 [DEBUG] [Thread-19142] [transport.py] [_log()] userauth is OK
2026-04-15T12:46:59.808 [DEBUG] [Thread-19142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:46:59.808 [DEBUG] [Thread-19142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:46:59.808 [DEBUG] [Thread-19142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:46:59.808 [DEBUG] [Thread-19142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:46:59.826 [INFO] [Thread-19142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:46:59.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:47:00.400 [DEBUG] [Thread-19142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:47:00.401 [DEBUG] [Thread-19142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:47:00.401 [DEBUG] [Thread-19142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:47:00.442 [DEBUG] [Thread-19142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:47:00.442 [DEBUG] [Thread-19142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:47:00.445 [DEBUG] [Thread-19142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:47:00.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:47:00.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:47:00.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:47:00.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:47:00.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:47:00.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:47:00.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:47:00.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:47:00.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:47:00.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.449096 -999.00  +12.40  15.84     69   +6.90 1 2 1 1 1   888    0 7.35 77.92 ----- 19.3 15.8 325.0 24.9 18.9 -19.2 18.1 -15.4 17.9 -14.8 18.8 -14.3
2026-04-15T12:47:00.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:47:00.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:47:00.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.449096
2026-04-15T12:47:00.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:47:00.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:47:00.466 [DEBUG] [Thread-19142] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:47:00.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:47:00.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:47:00.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:47:00.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:46:35', tmtdew=7.1223, humidity=62.029, cloud=0.0, wind=18.8078, temperature=13.5872, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:46:41.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:47:00.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:47:00.723 [DEBUG] [Thread-19145] [transport.py] [_log()] starting thread (client mode): 0xf13642e0
2026-04-15T12:47:00.724 [DEBUG] [Thread-19145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:47:00.738 [DEBUG] [Thread-19145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:47:00.738 [INFO] [Thread-19145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:47:00.746 [DEBUG] [Thread-19145] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:47:00.746 [DEBUG] [Thread-19145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:47:00.746 [DEBUG] [Thread-19145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:47:00.746 [DEBUG] [Thread-19145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:47:00.746 [DEBUG] [Thread-19145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:47:00.746 [DEBUG] [Thread-19145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:47:00.746 [DEBUG] [Thread-19145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:47:00.746 [DEBUG] [Thread-19145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:47:00.746 [DEBUG] [Thread-19145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:47:00.746 [DEBUG] [Thread-19145] [transport.py] [_log()] client lang: <none>
2026-04-15T12:47:00.747 [DEBUG] [Thread-19145] [transport.py] [_log()] server lang: <none>
2026-04-15T12:47:00.747 [DEBUG] [Thread-19145] [transport.py] [_log()] kex follows: False
2026-04-15T12:47:00.747 [DEBUG] [Thread-19145] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:47:00.747 [DEBUG] [Thread-19145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:47:00.747 [DEBUG] [Thread-19145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:47:00.747 [DEBUG] [Thread-19145] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:47:00.747 [DEBUG] [Thread-19145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:47:00.747 [DEBUG] [Thread-19145] [transport.py] [_log()] Compression: none
2026-04-15T12:47:00.747 [DEBUG] [Thread-19145] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:47:00.804 [DEBUG] [Thread-19145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:47:00.805 [DEBUG] [Thread-19145] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:47:00.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:47:00.805 [DEBUG] [Thread-19145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:47:00.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:47:00.860 [DEBUG] [Thread-19145] [transport.py] [_log()] userauth is OK
2026-04-15T12:47:00.860 [DEBUG] [Thread-19145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:47:00.861 [DEBUG] [Thread-19145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:47:00.861 [DEBUG] [Thread-19145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:47:00.861 [DEBUG] [Thread-19145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:47:00.889 [INFO] [Thread-19145] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:47:00.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:47:00.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:47:01.714 [DEBUG] [Thread-19145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:47:01.714 [DEBUG] [Thread-19145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:47:01.762 [DEBUG] [Thread-19145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:47:01.762 [DEBUG] [Thread-19145] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:47:01.771 [DEBUG] [Thread-19145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:47:01.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:47:01.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')
2026-04-15T12:47:01.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
2026-04-15T12:47:01.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:47:01.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:47:01.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:47:01.808 [DEBUG] [Thread-19145] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:47:10.604 [DEBUG] [Thread-19147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:47:17.900 [DEBUG] [Thread-19148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:47:25.649 [DEBUG] [Thread-19149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:47:31.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:47:31.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:47:31.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:47:33.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 47, 10), 6.90725, 62.7797, 0.0, 18.4039, 13.1428, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:47:33.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:47:10
2026-04-15T12:47:33.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:47:33.938 [DEBUG] [Thread-19150] [transport.py] [_log()] starting thread (client mode): 0xee900430
2026-04-15T12:47:33.938 [DEBUG] [Thread-19150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:47:33.957 [DEBUG] [Thread-19150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:47:33.957 [INFO] [Thread-19150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:47:33.960 [DEBUG] [Thread-19150] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:47:33.960 [DEBUG] [Thread-19150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:47:33.960 [DEBUG] [Thread-19150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:47:33.961 [DEBUG] [Thread-19150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:47:33.961 [DEBUG] [Thread-19150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:47:33.961 [DEBUG] [Thread-19150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:47:33.961 [DEBUG] [Thread-19150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:47:33.961 [DEBUG] [Thread-19150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:47:33.961 [DEBUG] [Thread-19150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:47:33.961 [DEBUG] [Thread-19150] [transport.py] [_log()] client lang: <none>
2026-04-15T12:47:33.961 [DEBUG] [Thread-19150] [transport.py] [_log()] server lang: <none>
2026-04-15T12:47:33.961 [DEBUG] [Thread-19150] [transport.py] [_log()] kex follows: False
2026-04-15T12:47:33.961 [DEBUG] [Thread-19150] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:47:33.961 [DEBUG] [Thread-19150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:47:33.962 [DEBUG] [Thread-19150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:47:33.962 [DEBUG] [Thread-19150] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:47:33.962 [DEBUG] [Thread-19150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:47:33.962 [DEBUG] [Thread-19150] [transport.py] [_log()] Compression: none
2026-04-15T12:47:33.962 [DEBUG] [Thread-19150] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:47:33.978 [DEBUG] [Thread-19150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:47:33.979 [DEBUG] [Thread-19150] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:47:33.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:47:33.979 [DEBUG] [Thread-19150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:47:33.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:47:33.980 [DEBUG] [Thread-19150] [transport.py] [_log()] userauth is OK
2026-04-15T12:47:33.980 [DEBUG] [Thread-19150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:47:33.981 [DEBUG] [Thread-19150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:47:33.981 [DEBUG] [Thread-19150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:47:33.981 [DEBUG] [Thread-19150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:47:33.998 [INFO] [Thread-19150] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:47:33.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:47:34.635 [DEBUG] [Thread-19150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:47:34.635 [DEBUG] [Thread-19150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:47:34.635 [DEBUG] [Thread-19150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:47:34.677 [DEBUG] [Thread-19150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:47:34.677 [DEBUG] [Thread-19150] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:47:34.681 [DEBUG] [Thread-19150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:47:34.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:47:34.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:47:34.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:47:34.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:47:34.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:47:34.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:47:34.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:47:34.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:47:34.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:47:34.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.449444 -999.00  +12.30  16.18     69   +6.80 1 2 1 1 1   888    0 7.80 83.62 ----- 15.2 16.2 316.0 22.8 18.9 -17.8 18.0 -17.0 17.7 -15.2 18.7 -17.1
2026-04-15T12:47:34.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:47:34.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:47:34.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.449444
2026-04-15T12:47:34.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:47:34.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:47:34.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:47:34.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:47:34.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:47:34.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:47:10', tmtdew=6.90725, humidity=62.7797, cloud=0.0, wind=18.4039, temperature=13.1428, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:47:11.962', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:47:34.707 [DEBUG] [Thread-19150] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:47:34.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:47:34.963 [DEBUG] [Thread-19153] [transport.py] [_log()] starting thread (client mode): 0xf1336620
2026-04-15T12:47:34.963 [DEBUG] [Thread-19153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:47:34.979 [DEBUG] [Thread-19153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:47:34.979 [INFO] [Thread-19153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:47:34.986 [DEBUG] [Thread-19153] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:47:34.986 [DEBUG] [Thread-19153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:47:34.986 [DEBUG] [Thread-19153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:47:34.986 [DEBUG] [Thread-19153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:47:34.986 [DEBUG] [Thread-19153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:47:34.987 [DEBUG] [Thread-19153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:47:34.987 [DEBUG] [Thread-19153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:47:34.987 [DEBUG] [Thread-19153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:47:34.987 [DEBUG] [Thread-19153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:47:34.987 [DEBUG] [Thread-19153] [transport.py] [_log()] client lang: <none>
2026-04-15T12:47:34.987 [DEBUG] [Thread-19153] [transport.py] [_log()] server lang: <none>
2026-04-15T12:47:34.987 [DEBUG] [Thread-19153] [transport.py] [_log()] kex follows: False
2026-04-15T12:47:34.987 [DEBUG] [Thread-19153] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:47:34.987 [DEBUG] [Thread-19153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:47:34.987 [DEBUG] [Thread-19153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:47:34.987 [DEBUG] [Thread-19153] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:47:34.987 [DEBUG] [Thread-19153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:47:34.988 [DEBUG] [Thread-19153] [transport.py] [_log()] Compression: none
2026-04-15T12:47:34.988 [DEBUG] [Thread-19153] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:47:35.043 [DEBUG] [Thread-19153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:47:35.043 [DEBUG] [Thread-19153] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:47:35.044 [DEBUG] [Thread-19153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:47:35.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:47:35.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:47:35.100 [DEBUG] [Thread-19153] [transport.py] [_log()] userauth is OK
2026-04-15T12:47:35.100 [DEBUG] [Thread-19153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:47:35.101 [DEBUG] [Thread-19153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:47:35.101 [DEBUG] [Thread-19153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:47:35.101 [DEBUG] [Thread-19153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:47:35.123 [INFO] [Thread-19153] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:47:35.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:47:35.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:47:35.956 [DEBUG] [Thread-19153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:47:35.956 [DEBUG] [Thread-19153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:47:36.004 [DEBUG] [Thread-19153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:47:36.004 [DEBUG] [Thread-19153] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:47:36.014 [DEBUG] [Thread-19153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:47:36.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:47:36.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')
2026-04-15T12:47:36.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
2026-04-15T12:47:36.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:47:36.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:47:36.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:47:36.048 [DEBUG] [Thread-19153] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:47:40.681 [DEBUG] [Thread-19155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:47:49.152 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:47:49.153 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:47:55.728 [DEBUG] [Thread-19156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:48:06.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:48:06.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:48:06.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
2026-04-15T12:48:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 47, 46), 7.39414, 61.0337, 0.0, 33.7313, 14.2495, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:48:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:47:46
2026-04-15T12:48:07.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:48:08.182 [DEBUG] [Thread-19157] [transport.py] [_log()] starting thread (client mode): 0xee9eeb00
2026-04-15T12:48:08.182 [DEBUG] [Thread-19157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:48:08.192 [DEBUG] [Thread-19157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:48:08.192 [INFO] [Thread-19157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:48:08.194 [DEBUG] [Thread-19157] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:48:08.194 [DEBUG] [Thread-19157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:48:08.194 [DEBUG] [Thread-19157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:48:08.195 [DEBUG] [Thread-19157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:48:08.195 [DEBUG] [Thread-19157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:48:08.195 [DEBUG] [Thread-19157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:48:08.195 [DEBUG] [Thread-19157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:48:08.195 [DEBUG] [Thread-19157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:48:08.195 [DEBUG] [Thread-19157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:48:08.195 [DEBUG] [Thread-19157] [transport.py] [_log()] client lang: <none>
2026-04-15T12:48:08.195 [DEBUG] [Thread-19157] [transport.py] [_log()] server lang: <none>
2026-04-15T12:48:08.195 [DEBUG] [Thread-19157] [transport.py] [_log()] kex follows: False
2026-04-15T12:48:08.195 [DEBUG] [Thread-19157] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:48:08.195 [DEBUG] [Thread-19157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:48:08.195 [DEBUG] [Thread-19157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:48:08.195 [DEBUG] [Thread-19157] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:48:08.195 [DEBUG] [Thread-19157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:48:08.195 [DEBUG] [Thread-19157] [transport.py] [_log()] Compression: none
2026-04-15T12:48:08.196 [DEBUG] [Thread-19157] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:48:08.207 [DEBUG] [Thread-19157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:48:08.208 [DEBUG] [Thread-19157] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:48:08.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:48:08.208 [DEBUG] [Thread-19157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:48:08.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:48:08.209 [DEBUG] [Thread-19157] [transport.py] [_log()] userauth is OK
2026-04-15T12:48:08.209 [DEBUG] [Thread-19157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:48:08.209 [DEBUG] [Thread-19157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:48:08.209 [DEBUG] [Thread-19157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:48:08.209 [DEBUG] [Thread-19157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:48:08.242 [INFO] [Thread-19157] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:48:08.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:48:08.876 [DEBUG] [Thread-19157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:48:08.876 [DEBUG] [Thread-19157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:48:08.877 [DEBUG] [Thread-19157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:48:08.917 [DEBUG] [Thread-19157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:48:08.917 [DEBUG] [Thread-19157] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:48:08.920 [DEBUG] [Thread-19157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:48:08.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:48:08.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:48:08.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:48:08.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:48:08.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:48:08.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:48:08.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:48:08.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:48:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:48:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.449791 -999.00  +12.60  12.97     71   +7.50 1 2 1 1 1   888    0 7.77 88.79 ----- 24.1 13.0 297.7 17.0 19.3 -15.6 18.1 -15.7 17.9 -12.6 18.7 -15.4
2026-04-15T12:48:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:48:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:48:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.449791
2026-04-15T12:48:08.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:48:08.943 [DEBUG] [Thread-19157] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:48:08.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:48:08.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:48:08.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:48:08.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:48:08.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:47:46', tmtdew=7.39414, humidity=61.0337, cloud=0.0, wind=33.7313, temperature=14.2495, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:47:41.942', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:48:09.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:48:09.203 [DEBUG] [Thread-19160] [transport.py] [_log()] starting thread (client mode): 0xf13fd270
2026-04-15T12:48:09.203 [DEBUG] [Thread-19160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:48:09.217 [DEBUG] [Thread-19160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:48:09.217 [INFO] [Thread-19160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:48:09.224 [DEBUG] [Thread-19160] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:48:09.224 [DEBUG] [Thread-19160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:48:09.224 [DEBUG] [Thread-19160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:48:09.225 [DEBUG] [Thread-19160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:48:09.225 [DEBUG] [Thread-19160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:48:09.225 [DEBUG] [Thread-19160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:48:09.225 [DEBUG] [Thread-19160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:48:09.225 [DEBUG] [Thread-19160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:48:09.225 [DEBUG] [Thread-19160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:48:09.225 [DEBUG] [Thread-19160] [transport.py] [_log()] client lang: <none>
2026-04-15T12:48:09.225 [DEBUG] [Thread-19160] [transport.py] [_log()] server lang: <none>
2026-04-15T12:48:09.225 [DEBUG] [Thread-19160] [transport.py] [_log()] kex follows: False
2026-04-15T12:48:09.225 [DEBUG] [Thread-19160] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:48:09.225 [DEBUG] [Thread-19160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:48:09.226 [DEBUG] [Thread-19160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:48:09.226 [DEBUG] [Thread-19160] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:48:09.226 [DEBUG] [Thread-19160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:48:09.226 [DEBUG] [Thread-19160] [transport.py] [_log()] Compression: none
2026-04-15T12:48:09.226 [DEBUG] [Thread-19160] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:48:09.283 [DEBUG] [Thread-19160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:48:09.284 [DEBUG] [Thread-19160] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:48:09.284 [DEBUG] [Thread-19160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:48:09.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:48:09.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:48:09.340 [DEBUG] [Thread-19160] [transport.py] [_log()] userauth is OK
2026-04-15T12:48:09.340 [DEBUG] [Thread-19160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:48:09.340 [DEBUG] [Thread-19160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:48:09.340 [DEBUG] [Thread-19160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:48:09.341 [DEBUG] [Thread-19160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:48:09.365 [INFO] [Thread-19160] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:48:09.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:48:09.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:48:10.193 [DEBUG] [Thread-19160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:48:10.194 [DEBUG] [Thread-19160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:48:10.242 [DEBUG] [Thread-19160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:48:10.242 [DEBUG] [Thread-19160] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:48:10.251 [DEBUG] [Thread-19160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:48:10.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:48:10.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')
2026-04-15T12:48:10.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
2026-04-15T12:48:10.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:48:10.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:48:10.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:48:10.286 [DEBUG] [Thread-19160] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:48:10.760 [DEBUG] [Thread-19162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:48:18.027 [DEBUG] [Thread-19163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:48:25.803 [DEBUG] [Thread-19164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:48:40.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:48:40.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:48:40.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
2026-04-15T12:48:40.833 [DEBUG] [Thread-19165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:48:41.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 48, 23), 7.26165, 61.5362, 0.0, 22.6552, 13.2082, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:48:41.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:48:23
2026-04-15T12:48:41.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:48:42.426 [DEBUG] [Thread-19166] [transport.py] [_log()] starting thread (client mode): 0xee9edb70
2026-04-15T12:48:42.426 [DEBUG] [Thread-19166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:48:42.446 [DEBUG] [Thread-19166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:48:42.446 [INFO] [Thread-19166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:48:42.449 [DEBUG] [Thread-19166] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:48:42.449 [DEBUG] [Thread-19166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:48:42.449 [DEBUG] [Thread-19166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:48:42.449 [DEBUG] [Thread-19166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:48:42.450 [DEBUG] [Thread-19166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:48:42.450 [DEBUG] [Thread-19166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:48:42.450 [DEBUG] [Thread-19166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:48:42.450 [DEBUG] [Thread-19166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:48:42.450 [DEBUG] [Thread-19166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:48:42.450 [DEBUG] [Thread-19166] [transport.py] [_log()] client lang: <none>
2026-04-15T12:48:42.450 [DEBUG] [Thread-19166] [transport.py] [_log()] server lang: <none>
2026-04-15T12:48:42.450 [DEBUG] [Thread-19166] [transport.py] [_log()] kex follows: False
2026-04-15T12:48:42.450 [DEBUG] [Thread-19166] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:48:42.450 [DEBUG] [Thread-19166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:48:42.450 [DEBUG] [Thread-19166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:48:42.450 [DEBUG] [Thread-19166] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:48:42.451 [DEBUG] [Thread-19166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:48:42.451 [DEBUG] [Thread-19166] [transport.py] [_log()] Compression: none
2026-04-15T12:48:42.451 [DEBUG] [Thread-19166] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:48:42.467 [DEBUG] [Thread-19166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:48:42.468 [DEBUG] [Thread-19166] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:48:42.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:48:42.468 [DEBUG] [Thread-19166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:48:42.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:48:42.469 [DEBUG] [Thread-19166] [transport.py] [_log()] userauth is OK
2026-04-15T12:48:42.469 [DEBUG] [Thread-19166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:48:42.469 [DEBUG] [Thread-19166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:48:42.469 [DEBUG] [Thread-19166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:48:42.470 [DEBUG] [Thread-19166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:48:42.490 [INFO] [Thread-19166] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:48:42.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:48:43.040 [DEBUG] [Thread-19166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:48:43.040 [DEBUG] [Thread-19166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:48:43.041 [DEBUG] [Thread-19166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:48:43.081 [DEBUG] [Thread-19166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:48:43.081 [DEBUG] [Thread-19166] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:48:43.083 [DEBUG] [Thread-19166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:48:43.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:48:43.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:48:43.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:48:43.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:48:43.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:48:43.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:48:43.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:48:43.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:48:43.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:48:43.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.450138 -999.00  +12.90  21.63     72   +8.00 1 2 1 1 1   888    0 7.50 79.96 ----- 21.6 21.6 309.0 29.6 19.4 -17.5 18.4 -14.7 18.1 -11.7 19.1 -12.4
2026-04-15T12:48:43.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:48:43.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:48:43.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.450138
2026-04-15T12:48:43.100 [DEBUG] [Thread-19166] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:48:43.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:48:43.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:48:43.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:48:43.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:48:43.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:48:43.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:48:23', tmtdew=7.26165, humidity=61.5362, cloud=0.0, wind=22.6552, temperature=13.2082, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:48:11.923', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:48:43.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:48:43.353 [DEBUG] [Thread-19169] [transport.py] [_log()] starting thread (client mode): 0xee98f6a0
2026-04-15T12:48:43.354 [DEBUG] [Thread-19169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:48:43.367 [DEBUG] [Thread-19169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:48:43.367 [INFO] [Thread-19169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:48:43.375 [DEBUG] [Thread-19169] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:48:43.375 [DEBUG] [Thread-19169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:48:43.375 [DEBUG] [Thread-19169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:48:43.375 [DEBUG] [Thread-19169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:48:43.375 [DEBUG] [Thread-19169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:48:43.375 [DEBUG] [Thread-19169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:48:43.375 [DEBUG] [Thread-19169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:48:43.375 [DEBUG] [Thread-19169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:48:43.375 [DEBUG] [Thread-19169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:48:43.375 [DEBUG] [Thread-19169] [transport.py] [_log()] client lang: <none>
2026-04-15T12:48:43.376 [DEBUG] [Thread-19169] [transport.py] [_log()] server lang: <none>
2026-04-15T12:48:43.376 [DEBUG] [Thread-19169] [transport.py] [_log()] kex follows: False
2026-04-15T12:48:43.376 [DEBUG] [Thread-19169] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:48:43.376 [DEBUG] [Thread-19169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:48:43.376 [DEBUG] [Thread-19169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:48:43.376 [DEBUG] [Thread-19169] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:48:43.376 [DEBUG] [Thread-19169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:48:43.376 [DEBUG] [Thread-19169] [transport.py] [_log()] Compression: none
2026-04-15T12:48:43.376 [DEBUG] [Thread-19169] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:48:43.431 [DEBUG] [Thread-19169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:48:43.432 [DEBUG] [Thread-19169] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:48:43.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:48:43.433 [DEBUG] [Thread-19169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:48:43.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:48:43.488 [DEBUG] [Thread-19169] [transport.py] [_log()] userauth is OK
2026-04-15T12:48:43.489 [DEBUG] [Thread-19169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:48:43.489 [DEBUG] [Thread-19169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:48:43.489 [DEBUG] [Thread-19169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:48:43.489 [DEBUG] [Thread-19169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:48:43.516 [INFO] [Thread-19169] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:48:43.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:48:43.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:48:44.432 [DEBUG] [Thread-19169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:48:44.433 [DEBUG] [Thread-19169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:48:44.481 [DEBUG] [Thread-19169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:48:44.481 [DEBUG] [Thread-19169] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:48:44.490 [DEBUG] [Thread-19169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:48:44.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:48:44.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')
2026-04-15T12:48:44.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
2026-04-15T12:48:44.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:48:44.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:48:44.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:48:44.525 [DEBUG] [Thread-19169] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:48:49.293 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:48:49.294 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:48:55.865 [DEBUG] [Thread-19171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:49:10.907 [DEBUG] [Thread-19172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:49:14.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:49:14.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:49:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:49:15.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 48, 58), 7.01747, 62.5359, 0.0, 20.8206, 13.5574, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:49:15.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:48:58
2026-04-15T12:49:16.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:49:16.610 [DEBUG] [Thread-19173] [transport.py] [_log()] starting thread (client mode): 0xee989cf0
2026-04-15T12:49:16.610 [DEBUG] [Thread-19173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:49:16.625 [DEBUG] [Thread-19173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:49:16.625 [INFO] [Thread-19173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:49:16.628 [DEBUG] [Thread-19173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:49:16.629 [DEBUG] [Thread-19173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:49:16.629 [DEBUG] [Thread-19173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:49:16.629 [DEBUG] [Thread-19173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:49:16.629 [DEBUG] [Thread-19173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:49:16.629 [DEBUG] [Thread-19173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:49:16.629 [DEBUG] [Thread-19173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:49:16.629 [DEBUG] [Thread-19173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:49:16.629 [DEBUG] [Thread-19173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:49:16.629 [DEBUG] [Thread-19173] [transport.py] [_log()] client lang: <none>
2026-04-15T12:49:16.629 [DEBUG] [Thread-19173] [transport.py] [_log()] server lang: <none>
2026-04-15T12:49:16.629 [DEBUG] [Thread-19173] [transport.py] [_log()] kex follows: False
2026-04-15T12:49:16.629 [DEBUG] [Thread-19173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:49:16.629 [DEBUG] [Thread-19173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:49:16.630 [DEBUG] [Thread-19173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:49:16.630 [DEBUG] [Thread-19173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:49:16.630 [DEBUG] [Thread-19173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:49:16.630 [DEBUG] [Thread-19173] [transport.py] [_log()] Compression: none
2026-04-15T12:49:16.630 [DEBUG] [Thread-19173] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:49:16.647 [DEBUG] [Thread-19173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:49:16.647 [DEBUG] [Thread-19173] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:49:16.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:49:16.648 [DEBUG] [Thread-19173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:49:16.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:49:16.649 [DEBUG] [Thread-19173] [transport.py] [_log()] userauth is OK
2026-04-15T12:49:16.649 [DEBUG] [Thread-19173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:49:16.649 [DEBUG] [Thread-19173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:49:16.649 [DEBUG] [Thread-19173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:49:16.649 [DEBUG] [Thread-19173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:49:16.667 [INFO] [Thread-19173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:49:16.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:49:17.259 [DEBUG] [Thread-19173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:49:17.259 [DEBUG] [Thread-19173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:49:17.260 [DEBUG] [Thread-19173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:49:17.300 [DEBUG] [Thread-19173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:49:17.300 [DEBUG] [Thread-19173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:49:17.303 [DEBUG] [Thread-19173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:49:17.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:49:17.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:49:17.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:49:17.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:49:17.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:49:17.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:49:17.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:49:17.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:49:17.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:49:17.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.450833 -999.00  +12.70  22.29     70   +7.60 1 2 1 1 1   888    0 7.40 77.34 ----- 28.1 22.3 293.2 26.0 19.2 -19.0 18.3 -19.0 17.9 -16.2 19.1 -16.6
2026-04-15T12:49:17.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:49:17.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:49:17.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.450833
2026-04-15T12:49:17.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:49:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:49:17.327 [DEBUG] [Thread-19173] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:49:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:49:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:49:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:49:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:48:58', tmtdew=7.01747, humidity=62.5359, cloud=0.0, wind=20.8206, temperature=13.5574, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:49:11.971', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:49:17.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:49:17.588 [DEBUG] [Thread-19176] [transport.py] [_log()] starting thread (client mode): 0xee98e3e0
2026-04-15T12:49:17.588 [DEBUG] [Thread-19176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:49:17.603 [DEBUG] [Thread-19176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:49:17.603 [INFO] [Thread-19176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:49:17.610 [DEBUG] [Thread-19176] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:49:17.610 [DEBUG] [Thread-19176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:49:17.610 [DEBUG] [Thread-19176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:49:17.610 [DEBUG] [Thread-19176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:49:17.610 [DEBUG] [Thread-19176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:49:17.611 [DEBUG] [Thread-19176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:49:17.611 [DEBUG] [Thread-19176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:49:17.611 [DEBUG] [Thread-19176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:49:17.611 [DEBUG] [Thread-19176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:49:17.611 [DEBUG] [Thread-19176] [transport.py] [_log()] client lang: <none>
2026-04-15T12:49:17.611 [DEBUG] [Thread-19176] [transport.py] [_log()] server lang: <none>
2026-04-15T12:49:17.611 [DEBUG] [Thread-19176] [transport.py] [_log()] kex follows: False
2026-04-15T12:49:17.611 [DEBUG] [Thread-19176] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:49:17.611 [DEBUG] [Thread-19176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:49:17.611 [DEBUG] [Thread-19176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:49:17.611 [DEBUG] [Thread-19176] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:49:17.611 [DEBUG] [Thread-19176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:49:17.612 [DEBUG] [Thread-19176] [transport.py] [_log()] Compression: none
2026-04-15T12:49:17.612 [DEBUG] [Thread-19176] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:49:17.667 [DEBUG] [Thread-19176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:49:17.667 [DEBUG] [Thread-19176] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:49:17.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:49:17.668 [DEBUG] [Thread-19176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:49:17.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:49:17.724 [DEBUG] [Thread-19176] [transport.py] [_log()] userauth is OK
2026-04-15T12:49:17.724 [DEBUG] [Thread-19176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:49:17.724 [DEBUG] [Thread-19176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:49:17.724 [DEBUG] [Thread-19176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:49:17.725 [DEBUG] [Thread-19176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:49:17.753 [INFO] [Thread-19176] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:49:17.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:49:17.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:49:18.140 [DEBUG] [Thread-19178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:49:18.616 [DEBUG] [Thread-19176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:49:18.617 [DEBUG] [Thread-19176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:49:18.668 [DEBUG] [Thread-19176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:49:18.669 [DEBUG] [Thread-19176] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:49:18.681 [DEBUG] [Thread-19176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:49:18.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:49:18.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')
2026-04-15T12:49:18.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') -> 00000000
2026-04-15T12:49:18.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:49:18.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:49:18.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:49:18.721 [DEBUG] [Thread-19176] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:49:25.939 [DEBUG] [Thread-19179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:49:40.979 [DEBUG] [Thread-19180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:49:48.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:49:48.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:49:48.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
2026-04-15T12:49:49.434 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:49:49.435 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:49:50.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 49, 34), 7.92314, 58.812, 0.0, 20.5718, 14.0832, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:49:50.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:49:34
2026-04-15T12:49:50.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:49:50.876 [DEBUG] [Thread-19181] [transport.py] [_log()] starting thread (client mode): 0xf1334a60
2026-04-15T12:49:50.877 [DEBUG] [Thread-19181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:49:50.897 [DEBUG] [Thread-19181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:49:50.897 [INFO] [Thread-19181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:49:50.899 [DEBUG] [Thread-19181] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:49:50.899 [DEBUG] [Thread-19181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:49:50.900 [DEBUG] [Thread-19181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:49:50.900 [DEBUG] [Thread-19181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:49:50.900 [DEBUG] [Thread-19181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:49:50.900 [DEBUG] [Thread-19181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:49:50.900 [DEBUG] [Thread-19181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:49:50.900 [DEBUG] [Thread-19181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:49:50.900 [DEBUG] [Thread-19181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:49:50.900 [DEBUG] [Thread-19181] [transport.py] [_log()] client lang: <none>
2026-04-15T12:49:50.900 [DEBUG] [Thread-19181] [transport.py] [_log()] server lang: <none>
2026-04-15T12:49:50.900 [DEBUG] [Thread-19181] [transport.py] [_log()] kex follows: False
2026-04-15T12:49:50.900 [DEBUG] [Thread-19181] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:49:50.900 [DEBUG] [Thread-19181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:49:50.901 [DEBUG] [Thread-19181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:49:50.901 [DEBUG] [Thread-19181] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:49:50.901 [DEBUG] [Thread-19181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:49:50.901 [DEBUG] [Thread-19181] [transport.py] [_log()] Compression: none
2026-04-15T12:49:50.901 [DEBUG] [Thread-19181] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:49:50.914 [DEBUG] [Thread-19181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:49:50.915 [DEBUG] [Thread-19181] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:49:50.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:49:50.915 [DEBUG] [Thread-19181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:49:50.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:49:50.916 [DEBUG] [Thread-19181] [transport.py] [_log()] userauth is OK
2026-04-15T12:49:50.916 [DEBUG] [Thread-19181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:49:50.917 [DEBUG] [Thread-19181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:49:50.917 [DEBUG] [Thread-19181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:49:50.917 [DEBUG] [Thread-19181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:49:50.940 [INFO] [Thread-19181] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:49:50.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:49:51.543 [DEBUG] [Thread-19181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:49:51.543 [DEBUG] [Thread-19181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:49:51.544 [DEBUG] [Thread-19181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:49:51.584 [DEBUG] [Thread-19181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:49:51.584 [DEBUG] [Thread-19181] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:49:51.587 [DEBUG] [Thread-19181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:49:51.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:49:51.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:49:51.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:49:51.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:49:51.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:49:51.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:49:51.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:49:51.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:49:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:49:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.451180 -999.00  +12.50  24.76     70   +7.30 1 2 1 1 1   888    0 7.49 77.10 ----- 18.7 24.8 301.8 34.5 19.4 -19.1 18.3 -17.9 18.1 -13.1 19.1 -16.0
2026-04-15T12:49:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:49:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:49:51.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.451180
2026-04-15T12:49:51.607 [DEBUG] [Thread-19181] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:49:51.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:49:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:49:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:49:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:49:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:49:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:49:34', tmtdew=7.92314, humidity=58.812, cloud=0.0, wind=20.5718, temperature=14.0832, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:49:41.952', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:49:51.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:49:51.873 [DEBUG] [Thread-19184] [transport.py] [_log()] starting thread (client mode): 0xee906c80
2026-04-15T12:49:51.873 [DEBUG] [Thread-19184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:49:51.887 [DEBUG] [Thread-19184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:49:51.887 [INFO] [Thread-19184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:49:51.894 [DEBUG] [Thread-19184] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:49:51.894 [DEBUG] [Thread-19184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:49:51.894 [DEBUG] [Thread-19184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:49:51.895 [DEBUG] [Thread-19184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:49:51.895 [DEBUG] [Thread-19184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:49:51.895 [DEBUG] [Thread-19184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:49:51.895 [DEBUG] [Thread-19184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:49:51.895 [DEBUG] [Thread-19184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:49:51.895 [DEBUG] [Thread-19184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:49:51.895 [DEBUG] [Thread-19184] [transport.py] [_log()] client lang: <none>
2026-04-15T12:49:51.895 [DEBUG] [Thread-19184] [transport.py] [_log()] server lang: <none>
2026-04-15T12:49:51.895 [DEBUG] [Thread-19184] [transport.py] [_log()] kex follows: False
2026-04-15T12:49:51.895 [DEBUG] [Thread-19184] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:49:51.895 [DEBUG] [Thread-19184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:49:51.895 [DEBUG] [Thread-19184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:49:51.896 [DEBUG] [Thread-19184] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:49:51.896 [DEBUG] [Thread-19184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:49:51.896 [DEBUG] [Thread-19184] [transport.py] [_log()] Compression: none
2026-04-15T12:49:51.896 [DEBUG] [Thread-19184] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:49:51.951 [DEBUG] [Thread-19184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:49:51.952 [DEBUG] [Thread-19184] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:49:51.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:49:51.952 [DEBUG] [Thread-19184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:49:51.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:49:52.009 [DEBUG] [Thread-19184] [transport.py] [_log()] userauth is OK
2026-04-15T12:49:52.009 [DEBUG] [Thread-19184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:49:52.009 [DEBUG] [Thread-19184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:49:52.009 [DEBUG] [Thread-19184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:49:52.010 [DEBUG] [Thread-19184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:49:52.035 [INFO] [Thread-19184] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:49:52.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:49:52.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:49:52.850 [DEBUG] [Thread-19184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:49:52.851 [DEBUG] [Thread-19184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:49:52.898 [DEBUG] [Thread-19184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:49:52.898 [DEBUG] [Thread-19184] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:49:52.907 [DEBUG] [Thread-19184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:49:52.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:49:52.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')
2026-04-15T12:49:52.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') -> 00000000
2026-04-15T12:49:52.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:49:52.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:49:52.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:49:52.942 [DEBUG] [Thread-19184] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:49:56.014 [DEBUG] [Thread-19186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:50:11.057 [DEBUG] [Thread-19187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:50:18.265 [DEBUG] [Thread-19188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:50:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:50:22.952 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:50:22.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:50:24.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 50, 9), 7.02298, 62.4006, 0.0, 19.0919, 13.2414, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:50:24.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:50:09
2026-04-15T12:50:24.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:50:25.110 [DEBUG] [Thread-19189] [transport.py] [_log()] starting thread (client mode): 0xee98b820
2026-04-15T12:50:25.110 [DEBUG] [Thread-19189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:50:25.129 [DEBUG] [Thread-19189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:50:25.130 [INFO] [Thread-19189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:50:25.132 [DEBUG] [Thread-19189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:50:25.133 [DEBUG] [Thread-19189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:50:25.133 [DEBUG] [Thread-19189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:50:25.133 [DEBUG] [Thread-19189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:50:25.133 [DEBUG] [Thread-19189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:50:25.133 [DEBUG] [Thread-19189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:50:25.133 [DEBUG] [Thread-19189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:50:25.133 [DEBUG] [Thread-19189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:50:25.133 [DEBUG] [Thread-19189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:50:25.133 [DEBUG] [Thread-19189] [transport.py] [_log()] client lang: <none>
2026-04-15T12:50:25.133 [DEBUG] [Thread-19189] [transport.py] [_log()] server lang: <none>
2026-04-15T12:50:25.133 [DEBUG] [Thread-19189] [transport.py] [_log()] kex follows: False
2026-04-15T12:50:25.134 [DEBUG] [Thread-19189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:50:25.134 [DEBUG] [Thread-19189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:50:25.134 [DEBUG] [Thread-19189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:50:25.134 [DEBUG] [Thread-19189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:50:25.134 [DEBUG] [Thread-19189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:50:25.134 [DEBUG] [Thread-19189] [transport.py] [_log()] Compression: none
2026-04-15T12:50:25.134 [DEBUG] [Thread-19189] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:50:25.142 [DEBUG] [Thread-19189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:50:25.143 [DEBUG] [Thread-19189] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:50:25.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:50:25.143 [DEBUG] [Thread-19189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:50:25.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:50:25.144 [DEBUG] [Thread-19189] [transport.py] [_log()] userauth is OK
2026-04-15T12:50:25.144 [DEBUG] [Thread-19189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:50:25.145 [DEBUG] [Thread-19189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:50:25.145 [DEBUG] [Thread-19189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:50:25.145 [DEBUG] [Thread-19189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:50:25.168 [INFO] [Thread-19189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:50:25.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:50:26.090 [DEBUG] [Thread-19191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:50:26.857 [DEBUG] [Thread-19189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:50:26.858 [DEBUG] [Thread-19189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:50:26.858 [DEBUG] [Thread-19189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:50:26.898 [DEBUG] [Thread-19189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:50:26.898 [DEBUG] [Thread-19189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:50:26.900 [DEBUG] [Thread-19189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:50:26.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:50:26.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:50:26.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:50:26.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:50:26.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:50:26.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:50:26.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:50:26.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:50:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:50:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.451527 -999.00  +12.90  18.06     70   +7.70 1 2 1 1 1   888    0 7.60 78.52 ----- 20.1 18.1 299.6 28.6 19.6 -15.1 18.4 -18.0 18.0 -13.6 19.2 -15.0
2026-04-15T12:50:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:50:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:50:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.451527
2026-04-15T12:50:26.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:50:26.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:50:26.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:50:26.962 [DEBUG] [Thread-19189] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:50:26.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:50:26.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:50:26.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:50:09', tmtdew=7.02298, humidity=62.4006, cloud=0.0, wind=19.0919, temperature=13.2414, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:50:11.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:50:27.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:50:27.210 [DEBUG] [Thread-19193] [transport.py] [_log()] starting thread (client mode): 0xf1335b40
2026-04-15T12:50:27.211 [DEBUG] [Thread-19193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:50:27.225 [DEBUG] [Thread-19193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:50:27.225 [INFO] [Thread-19193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:50:27.232 [DEBUG] [Thread-19193] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:50:27.233 [DEBUG] [Thread-19193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:50:27.233 [DEBUG] [Thread-19193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:50:27.233 [DEBUG] [Thread-19193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:50:27.233 [DEBUG] [Thread-19193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:50:27.233 [DEBUG] [Thread-19193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:50:27.233 [DEBUG] [Thread-19193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:50:27.233 [DEBUG] [Thread-19193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:50:27.233 [DEBUG] [Thread-19193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:50:27.233 [DEBUG] [Thread-19193] [transport.py] [_log()] client lang: <none>
2026-04-15T12:50:27.233 [DEBUG] [Thread-19193] [transport.py] [_log()] server lang: <none>
2026-04-15T12:50:27.233 [DEBUG] [Thread-19193] [transport.py] [_log()] kex follows: False
2026-04-15T12:50:27.234 [DEBUG] [Thread-19193] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:50:27.234 [DEBUG] [Thread-19193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:50:27.234 [DEBUG] [Thread-19193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:50:27.234 [DEBUG] [Thread-19193] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:50:27.234 [DEBUG] [Thread-19193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:50:27.234 [DEBUG] [Thread-19193] [transport.py] [_log()] Compression: none
2026-04-15T12:50:27.234 [DEBUG] [Thread-19193] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:50:27.292 [DEBUG] [Thread-19193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:50:27.292 [DEBUG] [Thread-19193] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:50:27.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:50:27.293 [DEBUG] [Thread-19193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:50:27.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:50:27.348 [DEBUG] [Thread-19193] [transport.py] [_log()] userauth is OK
2026-04-15T12:50:27.348 [DEBUG] [Thread-19193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:50:27.348 [DEBUG] [Thread-19193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:50:27.349 [DEBUG] [Thread-19193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:50:27.349 [DEBUG] [Thread-19193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:50:27.374 [INFO] [Thread-19193] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:50:27.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:50:27.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:50:28.220 [DEBUG] [Thread-19193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:50:28.221 [DEBUG] [Thread-19193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:50:28.268 [DEBUG] [Thread-19193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:50:28.268 [DEBUG] [Thread-19193] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:50:28.277 [DEBUG] [Thread-19193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:50:28.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:50:28.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')
2026-04-15T12:50:28.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
2026-04-15T12:50:28.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:50:28.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:50:28.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:50:28.312 [DEBUG] [Thread-19193] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:50:41.121 [DEBUG] [Thread-19195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:50:49.575 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:50:49.576 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:50:56.165 [DEBUG] [Thread-19196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:50:58.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:50:58.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:50:58.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
2026-04-15T12:50:59.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 50, 45), 7.71741, 59.7403, 0.0, 21.9125, 14.4479, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:50:59.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:50:45
2026-04-15T12:50:59.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:51:00.444 [DEBUG] [Thread-19197] [transport.py] [_log()] starting thread (client mode): 0xee98aa70
2026-04-15T12:51:00.445 [DEBUG] [Thread-19197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:51:00.464 [DEBUG] [Thread-19197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:51:00.464 [INFO] [Thread-19197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:51:00.468 [DEBUG] [Thread-19197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:51:00.468 [DEBUG] [Thread-19197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:51:00.468 [DEBUG] [Thread-19197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:51:00.468 [DEBUG] [Thread-19197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:51:00.468 [DEBUG] [Thread-19197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:51:00.468 [DEBUG] [Thread-19197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:51:00.468 [DEBUG] [Thread-19197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:51:00.468 [DEBUG] [Thread-19197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:51:00.468 [DEBUG] [Thread-19197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:51:00.468 [DEBUG] [Thread-19197] [transport.py] [_log()] client lang: <none>
2026-04-15T12:51:00.468 [DEBUG] [Thread-19197] [transport.py] [_log()] server lang: <none>
2026-04-15T12:51:00.468 [DEBUG] [Thread-19197] [transport.py] [_log()] kex follows: False
2026-04-15T12:51:00.468 [DEBUG] [Thread-19197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:51:00.469 [DEBUG] [Thread-19197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:51:00.469 [DEBUG] [Thread-19197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:51:00.469 [DEBUG] [Thread-19197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:51:00.469 [DEBUG] [Thread-19197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:51:00.469 [DEBUG] [Thread-19197] [transport.py] [_log()] Compression: none
2026-04-15T12:51:00.469 [DEBUG] [Thread-19197] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:51:00.478 [DEBUG] [Thread-19197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:51:00.478 [DEBUG] [Thread-19197] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:51:00.479 [DEBUG] [Thread-19197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:51:00.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:51:00.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:51:00.480 [DEBUG] [Thread-19197] [transport.py] [_log()] userauth is OK
2026-04-15T12:51:00.480 [DEBUG] [Thread-19197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:51:00.480 [DEBUG] [Thread-19197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:51:00.480 [DEBUG] [Thread-19197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:51:00.480 [DEBUG] [Thread-19197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:51:00.503 [INFO] [Thread-19197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:51:00.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:51:01.106 [DEBUG] [Thread-19197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:51:01.106 [DEBUG] [Thread-19197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:51:01.106 [DEBUG] [Thread-19197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:51:01.146 [DEBUG] [Thread-19197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:51:01.147 [DEBUG] [Thread-19197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:51:01.148 [DEBUG] [Thread-19197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:51:01.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:51:01.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:51:01.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:51:01.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:51:01.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:51:01.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:51:01.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:51:01.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:51:01.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:51:01.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.451874 -999.00  +12.70  22.85     68   +7.10 1 2 1 1 1   888    0 7.55 81.92 ----- 15.5 22.9 283.8 33.1 19.4 -16.4 18.6 -15.5 18.1 -14.5 19.4 -12.9
2026-04-15T12:51:01.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:51:01.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:51:01.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.451874
2026-04-15T12:51:01.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:51:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:51:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:51:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:51:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:51:01.168 [DEBUG] [Thread-19197] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:51:01.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:50:45', tmtdew=7.71741, humidity=59.7403, cloud=0.0, wind=21.9125, temperature=14.4479, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:50:41.914', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:51:01.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:51:01.379 [DEBUG] [Thread-19200] [transport.py] [_log()] starting thread (client mode): 0xee98a2f0
2026-04-15T12:51:01.379 [DEBUG] [Thread-19200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:51:01.394 [DEBUG] [Thread-19200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:51:01.394 [INFO] [Thread-19200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:51:01.401 [DEBUG] [Thread-19200] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] client lang: <none>
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] server lang: <none>
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] kex follows: False
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:51:01.402 [DEBUG] [Thread-19200] [transport.py] [_log()] Compression: none
2026-04-15T12:51:01.403 [DEBUG] [Thread-19200] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:51:01.460 [DEBUG] [Thread-19200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:51:01.460 [DEBUG] [Thread-19200] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:51:01.461 [DEBUG] [Thread-19200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:51:01.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:51:01.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:51:01.516 [DEBUG] [Thread-19200] [transport.py] [_log()] userauth is OK
2026-04-15T12:51:01.516 [DEBUG] [Thread-19200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:51:01.516 [DEBUG] [Thread-19200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:51:01.516 [DEBUG] [Thread-19200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:51:01.516 [DEBUG] [Thread-19200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:51:01.542 [INFO] [Thread-19200] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:51:01.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:51:01.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:51:02.383 [DEBUG] [Thread-19200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:51:02.383 [DEBUG] [Thread-19200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:51:02.433 [DEBUG] [Thread-19200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:51:02.433 [DEBUG] [Thread-19200] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:51:02.444 [DEBUG] [Thread-19200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:51:02.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:51:02.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')
2026-04-15T12:51:02.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
2026-04-15T12:51:02.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:51:02.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:51:02.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:51:02.491 [DEBUG] [Thread-19200] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:51:11.197 [DEBUG] [Thread-19202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:51:18.383 [DEBUG] [Thread-19203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:51:26.238 [DEBUG] [Thread-19204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:51:32.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:51:32.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:51:32.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
2026-04-15T12:51:33.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 51, 20), 7.13622, 61.7373, 0.0, 15.6506, 13.2408, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:51:33.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:51:20
2026-04-15T12:51:34.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:51:34.600 [DEBUG] [Thread-19205] [transport.py] [_log()] starting thread (client mode): 0xf1337940
2026-04-15T12:51:34.600 [DEBUG] [Thread-19205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:51:34.620 [DEBUG] [Thread-19205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:51:34.620 [INFO] [Thread-19205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:51:34.623 [DEBUG] [Thread-19205] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:51:34.623 [DEBUG] [Thread-19205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:51:34.623 [DEBUG] [Thread-19205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:51:34.623 [DEBUG] [Thread-19205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:51:34.623 [DEBUG] [Thread-19205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:51:34.623 [DEBUG] [Thread-19205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:51:34.623 [DEBUG] [Thread-19205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:51:34.623 [DEBUG] [Thread-19205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:51:34.623 [DEBUG] [Thread-19205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:51:34.623 [DEBUG] [Thread-19205] [transport.py] [_log()] client lang: <none>
2026-04-15T12:51:34.623 [DEBUG] [Thread-19205] [transport.py] [_log()] server lang: <none>
2026-04-15T12:51:34.623 [DEBUG] [Thread-19205] [transport.py] [_log()] kex follows: False
2026-04-15T12:51:34.623 [DEBUG] [Thread-19205] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:51:34.623 [DEBUG] [Thread-19205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:51:34.623 [DEBUG] [Thread-19205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:51:34.624 [DEBUG] [Thread-19205] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:51:34.624 [DEBUG] [Thread-19205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:51:34.624 [DEBUG] [Thread-19205] [transport.py] [_log()] Compression: none
2026-04-15T12:51:34.624 [DEBUG] [Thread-19205] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:51:34.643 [DEBUG] [Thread-19205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:51:34.643 [DEBUG] [Thread-19205] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:51:34.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:51:34.644 [DEBUG] [Thread-19205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:51:34.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:51:34.644 [DEBUG] [Thread-19205] [transport.py] [_log()] userauth is OK
2026-04-15T12:51:34.645 [DEBUG] [Thread-19205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:51:34.645 [DEBUG] [Thread-19205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:51:34.645 [DEBUG] [Thread-19205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:51:34.645 [DEBUG] [Thread-19205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:51:34.677 [INFO] [Thread-19205] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:51:34.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:51:35.410 [DEBUG] [Thread-19205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:51:35.411 [DEBUG] [Thread-19205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:51:35.411 [DEBUG] [Thread-19205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:51:35.452 [DEBUG] [Thread-19205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:51:35.452 [DEBUG] [Thread-19205] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:51:35.455 [DEBUG] [Thread-19205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:51:35.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:51:35.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:51:35.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:51:35.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:51:35.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:51:35.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:51:35.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:51:35.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:51:35.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:51:35.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.452221 -999.00  +12.50  10.30     69   +7.10 1 2 1 1 1   888    0 7.59 82.51 ----- 14.7 10.3 293.2 17.9 19.5 -17.1 18.6 -15.2 18.1 -11.3 19.4 -13.4
2026-04-15T12:51:35.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:51:35.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:51:35.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.452221
2026-04-15T12:51:35.479 [DEBUG] [Thread-19205] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:51:35.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:51:35.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:51:35.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:51:35.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:51:35.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:51:35.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:51:20', tmtdew=7.13622, humidity=61.7373, cloud=0.0, wind=15.6506, temperature=13.2408, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:51:11.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:51:35.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:51:35.737 [DEBUG] [Thread-19208] [transport.py] [_log()] starting thread (client mode): 0xee9041c0
2026-04-15T12:51:35.737 [DEBUG] [Thread-19208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:51:35.751 [DEBUG] [Thread-19208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:51:35.751 [INFO] [Thread-19208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:51:35.758 [DEBUG] [Thread-19208] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:51:35.758 [DEBUG] [Thread-19208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:51:35.759 [DEBUG] [Thread-19208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:51:35.759 [DEBUG] [Thread-19208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:51:35.759 [DEBUG] [Thread-19208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:51:35.759 [DEBUG] [Thread-19208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:51:35.759 [DEBUG] [Thread-19208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:51:35.759 [DEBUG] [Thread-19208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:51:35.759 [DEBUG] [Thread-19208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:51:35.759 [DEBUG] [Thread-19208] [transport.py] [_log()] client lang: <none>
2026-04-15T12:51:35.759 [DEBUG] [Thread-19208] [transport.py] [_log()] server lang: <none>
2026-04-15T12:51:35.759 [DEBUG] [Thread-19208] [transport.py] [_log()] kex follows: False
2026-04-15T12:51:35.759 [DEBUG] [Thread-19208] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:51:35.760 [DEBUG] [Thread-19208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:51:35.760 [DEBUG] [Thread-19208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:51:35.760 [DEBUG] [Thread-19208] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:51:35.760 [DEBUG] [Thread-19208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:51:35.760 [DEBUG] [Thread-19208] [transport.py] [_log()] Compression: none
2026-04-15T12:51:35.760 [DEBUG] [Thread-19208] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:51:35.815 [DEBUG] [Thread-19208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:51:35.816 [DEBUG] [Thread-19208] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:51:35.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:51:35.816 [DEBUG] [Thread-19208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:51:35.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:51:35.872 [DEBUG] [Thread-19208] [transport.py] [_log()] userauth is OK
2026-04-15T12:51:35.872 [DEBUG] [Thread-19208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:51:35.873 [DEBUG] [Thread-19208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:51:35.873 [DEBUG] [Thread-19208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:51:35.873 [DEBUG] [Thread-19208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:51:35.900 [INFO] [Thread-19208] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:51:35.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:51:35.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:51:36.717 [DEBUG] [Thread-19208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:51:36.717 [DEBUG] [Thread-19208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:51:36.765 [DEBUG] [Thread-19208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:51:36.765 [DEBUG] [Thread-19208] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:51:36.774 [DEBUG] [Thread-19208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:51:36.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:51:36.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')
2026-04-15T12:51:36.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
2026-04-15T12:51:36.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:51:36.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:51:36.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:51:36.809 [DEBUG] [Thread-19208] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:51:41.267 [DEBUG] [Thread-19210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:51:49.717 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:51:49.719 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:51:56.313 [DEBUG] [Thread-19211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:52:06.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:52:06.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:52:06.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:52:08.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 51, 56), 7.04322, 62.367, 0.0, 16.4459, 13.4564, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:52:08.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:51:56
2026-04-15T12:52:08.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:52:08.899 [DEBUG] [Thread-19212] [transport.py] [_log()] starting thread (client mode): 0xee98ee60
2026-04-15T12:52:08.899 [DEBUG] [Thread-19212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:52:08.919 [DEBUG] [Thread-19212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:52:08.919 [INFO] [Thread-19212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:52:08.921 [DEBUG] [Thread-19212] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:52:08.921 [DEBUG] [Thread-19212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:52:08.921 [DEBUG] [Thread-19212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:52:08.921 [DEBUG] [Thread-19212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:52:08.921 [DEBUG] [Thread-19212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:52:08.921 [DEBUG] [Thread-19212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:52:08.921 [DEBUG] [Thread-19212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:52:08.922 [DEBUG] [Thread-19212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:52:08.922 [DEBUG] [Thread-19212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:52:08.922 [DEBUG] [Thread-19212] [transport.py] [_log()] client lang: <none>
2026-04-15T12:52:08.922 [DEBUG] [Thread-19212] [transport.py] [_log()] server lang: <none>
2026-04-15T12:52:08.922 [DEBUG] [Thread-19212] [transport.py] [_log()] kex follows: False
2026-04-15T12:52:08.922 [DEBUG] [Thread-19212] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:52:08.922 [DEBUG] [Thread-19212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:52:08.922 [DEBUG] [Thread-19212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:52:08.922 [DEBUG] [Thread-19212] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:52:08.922 [DEBUG] [Thread-19212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:52:08.922 [DEBUG] [Thread-19212] [transport.py] [_log()] Compression: none
2026-04-15T12:52:08.922 [DEBUG] [Thread-19212] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:52:08.934 [DEBUG] [Thread-19212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:52:08.935 [DEBUG] [Thread-19212] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:52:08.935 [DEBUG] [Thread-19212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:52:08.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:52:08.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:52:08.936 [DEBUG] [Thread-19212] [transport.py] [_log()] userauth is OK
2026-04-15T12:52:08.936 [DEBUG] [Thread-19212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:52:08.936 [DEBUG] [Thread-19212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:52:08.936 [DEBUG] [Thread-19212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:52:08.937 [DEBUG] [Thread-19212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:52:08.954 [INFO] [Thread-19212] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:52:08.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:52:09.542 [DEBUG] [Thread-19212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:52:09.542 [DEBUG] [Thread-19212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:52:09.542 [DEBUG] [Thread-19212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:52:09.582 [DEBUG] [Thread-19212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:52:09.583 [DEBUG] [Thread-19212] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:52:09.585 [DEBUG] [Thread-19212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:52:09.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:52:09.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:52:09.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:52:09.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:52:09.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:52:09.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:52:09.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:52:09.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:52:09.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:52:09.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.452569 -999.00  +12.50  17.99     70   +7.40 1 2 1 1 1   888    0 7.94 90.67 ----- 16.1 18.0 287.8 21.9 19.9 -14.2 18.6 -15.3 18.0 -13.1 19.3 -13.8
2026-04-15T12:52:09.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:52:09.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:52:09.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.452569
2026-04-15T12:52:09.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:52:09.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:52:09.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:52:09.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:52:09.609 [DEBUG] [Thread-19212] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:52:09.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:52:09.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:51:56', tmtdew=7.04322, humidity=62.367, cloud=0.0, wind=16.4459, temperature=13.4564, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:51:41.962', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:52:09.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:52:09.856 [DEBUG] [Thread-19215] [transport.py] [_log()] starting thread (client mode): 0xee9058a0
2026-04-15T12:52:09.856 [DEBUG] [Thread-19215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:52:09.871 [DEBUG] [Thread-19215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:52:09.871 [INFO] [Thread-19215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:52:09.878 [DEBUG] [Thread-19215] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:52:09.878 [DEBUG] [Thread-19215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:52:09.878 [DEBUG] [Thread-19215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:52:09.878 [DEBUG] [Thread-19215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:52:09.878 [DEBUG] [Thread-19215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:52:09.878 [DEBUG] [Thread-19215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:52:09.878 [DEBUG] [Thread-19215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:52:09.878 [DEBUG] [Thread-19215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:52:09.879 [DEBUG] [Thread-19215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:52:09.879 [DEBUG] [Thread-19215] [transport.py] [_log()] client lang: <none>
2026-04-15T12:52:09.879 [DEBUG] [Thread-19215] [transport.py] [_log()] server lang: <none>
2026-04-15T12:52:09.879 [DEBUG] [Thread-19215] [transport.py] [_log()] kex follows: False
2026-04-15T12:52:09.879 [DEBUG] [Thread-19215] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:52:09.879 [DEBUG] [Thread-19215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:52:09.879 [DEBUG] [Thread-19215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:52:09.879 [DEBUG] [Thread-19215] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:52:09.879 [DEBUG] [Thread-19215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:52:09.879 [DEBUG] [Thread-19215] [transport.py] [_log()] Compression: none
2026-04-15T12:52:09.880 [DEBUG] [Thread-19215] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:52:09.935 [DEBUG] [Thread-19215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:52:09.936 [DEBUG] [Thread-19215] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:52:09.936 [DEBUG] [Thread-19215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:52:09.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:52:09.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:52:09.992 [DEBUG] [Thread-19215] [transport.py] [_log()] userauth is OK
2026-04-15T12:52:09.992 [DEBUG] [Thread-19215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:52:09.992 [DEBUG] [Thread-19215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:52:09.993 [DEBUG] [Thread-19215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:52:09.993 [DEBUG] [Thread-19215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:52:10.018 [INFO] [Thread-19215] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:52:10.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:52:10.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:52:10.864 [DEBUG] [Thread-19215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:52:10.864 [DEBUG] [Thread-19215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:52:10.911 [DEBUG] [Thread-19215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:52:10.912 [DEBUG] [Thread-19215] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:52:10.921 [DEBUG] [Thread-19215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:52:10.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:52:10.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T12:52:10.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
2026-04-15T12:52:10.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:52:10.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:52:10.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:52:10.955 [DEBUG] [Thread-19215] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:52:11.341 [DEBUG] [Thread-19217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:52:18.493 [DEBUG] [Thread-19218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:52:26.385 [DEBUG] [Thread-19219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:52:40.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:52:40.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:52:40.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
2026-04-15T12:52:41.416 [DEBUG] [Thread-19220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:52:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 52, 31), 7.30098, 61.3559, 0.0, 22.7434, 13.6387, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:52:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:52:31
2026-04-15T12:52:42.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:52:43.082 [DEBUG] [Thread-19221] [transport.py] [_log()] starting thread (client mode): 0xee9e5fc0
2026-04-15T12:52:43.082 [DEBUG] [Thread-19221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:52:43.092 [DEBUG] [Thread-19221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:52:43.092 [INFO] [Thread-19221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:52:43.095 [DEBUG] [Thread-19221] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:52:43.095 [DEBUG] [Thread-19221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:52:43.095 [DEBUG] [Thread-19221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:52:43.095 [DEBUG] [Thread-19221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:52:43.095 [DEBUG] [Thread-19221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:52:43.095 [DEBUG] [Thread-19221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:52:43.095 [DEBUG] [Thread-19221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:52:43.095 [DEBUG] [Thread-19221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:52:43.096 [DEBUG] [Thread-19221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:52:43.096 [DEBUG] [Thread-19221] [transport.py] [_log()] client lang: <none>
2026-04-15T12:52:43.096 [DEBUG] [Thread-19221] [transport.py] [_log()] server lang: <none>
2026-04-15T12:52:43.096 [DEBUG] [Thread-19221] [transport.py] [_log()] kex follows: False
2026-04-15T12:52:43.096 [DEBUG] [Thread-19221] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:52:43.096 [DEBUG] [Thread-19221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:52:43.096 [DEBUG] [Thread-19221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:52:43.096 [DEBUG] [Thread-19221] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:52:43.096 [DEBUG] [Thread-19221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:52:43.096 [DEBUG] [Thread-19221] [transport.py] [_log()] Compression: none
2026-04-15T12:52:43.096 [DEBUG] [Thread-19221] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:52:43.105 [DEBUG] [Thread-19221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:52:43.106 [DEBUG] [Thread-19221] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:52:43.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:52:43.107 [DEBUG] [Thread-19221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:52:43.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:52:43.108 [DEBUG] [Thread-19221] [transport.py] [_log()] userauth is OK
2026-04-15T12:52:43.108 [DEBUG] [Thread-19221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:52:43.108 [DEBUG] [Thread-19221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:52:43.108 [DEBUG] [Thread-19221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:52:43.108 [DEBUG] [Thread-19221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:52:43.124 [INFO] [Thread-19221] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:52:43.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:52:43.749 [DEBUG] [Thread-19221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:52:43.749 [DEBUG] [Thread-19221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:52:43.749 [DEBUG] [Thread-19221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:52:43.789 [DEBUG] [Thread-19221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:52:43.790 [DEBUG] [Thread-19221] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:52:43.791 [DEBUG] [Thread-19221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:52:43.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:52:43.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:52:43.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:52:43.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:52:43.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:52:43.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:52:43.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:52:43.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:52:43.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:52:43.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.452916 -999.00  +13.00  13.74     71   +7.90 1 2 1 1 1   888    0 7.47 74.81 ----- 11.6 13.7 290.2 18.8 20.2 -15.6 18.9 -13.5 18.5 -11.0 19.7 -11.6
2026-04-15T12:52:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:52:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:52:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.452916
2026-04-15T12:52:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:52:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:52:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:52:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:52:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:52:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:52:31', tmtdew=7.30098, humidity=61.3559, cloud=0.0, wind=22.7434, temperature=13.6387, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:52:11.942', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:52:43.809 [DEBUG] [Thread-19221] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:52:44.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:52:44.032 [DEBUG] [Thread-19224] [transport.py] [_log()] starting thread (client mode): 0xee988430
2026-04-15T12:52:44.033 [DEBUG] [Thread-19224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:52:44.047 [DEBUG] [Thread-19224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:52:44.047 [INFO] [Thread-19224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:52:44.054 [DEBUG] [Thread-19224] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:52:44.055 [DEBUG] [Thread-19224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:52:44.055 [DEBUG] [Thread-19224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:52:44.055 [DEBUG] [Thread-19224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:52:44.055 [DEBUG] [Thread-19224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:52:44.055 [DEBUG] [Thread-19224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:52:44.055 [DEBUG] [Thread-19224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:52:44.055 [DEBUG] [Thread-19224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:52:44.055 [DEBUG] [Thread-19224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:52:44.056 [DEBUG] [Thread-19224] [transport.py] [_log()] client lang: <none>
2026-04-15T12:52:44.056 [DEBUG] [Thread-19224] [transport.py] [_log()] server lang: <none>
2026-04-15T12:52:44.056 [DEBUG] [Thread-19224] [transport.py] [_log()] kex follows: False
2026-04-15T12:52:44.056 [DEBUG] [Thread-19224] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:52:44.056 [DEBUG] [Thread-19224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:52:44.056 [DEBUG] [Thread-19224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:52:44.056 [DEBUG] [Thread-19224] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:52:44.056 [DEBUG] [Thread-19224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:52:44.056 [DEBUG] [Thread-19224] [transport.py] [_log()] Compression: none
2026-04-15T12:52:44.057 [DEBUG] [Thread-19224] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:52:44.115 [DEBUG] [Thread-19224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:52:44.116 [DEBUG] [Thread-19224] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:52:44.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:52:44.117 [DEBUG] [Thread-19224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:52:44.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:52:44.172 [DEBUG] [Thread-19224] [transport.py] [_log()] userauth is OK
2026-04-15T12:52:44.172 [DEBUG] [Thread-19224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:52:44.173 [DEBUG] [Thread-19224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:52:44.173 [DEBUG] [Thread-19224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:52:44.173 [DEBUG] [Thread-19224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:52:44.202 [INFO] [Thread-19224] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:52:44.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:52:44.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:52:45.028 [DEBUG] [Thread-19224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:52:45.028 [DEBUG] [Thread-19224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:52:45.076 [DEBUG] [Thread-19224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:52:45.076 [DEBUG] [Thread-19224] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:52:45.085 [DEBUG] [Thread-19224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:52:45.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:52:45.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')
2026-04-15T12:52:45.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
2026-04-15T12:52:45.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:52:45.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:52:45.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:52:45.119 [DEBUG] [Thread-19224] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:52:49.858 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:52:49.859 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:52:56.445 [DEBUG] [Thread-19226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:53:11.483 [DEBUG] [Thread-19227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:53:15.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:53:15.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:53:15.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
2026-04-15T12:53:16.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 53, 7), 7.57281, 60.1955, 0.0, 19.2859, 13.3071, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:53:16.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:53:07
2026-04-15T12:53:16.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:53:17.271 [DEBUG] [Thread-19228] [transport.py] [_log()] starting thread (client mode): 0xf13ee650
2026-04-15T12:53:17.271 [DEBUG] [Thread-19228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:53:17.283 [DEBUG] [Thread-19228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:53:17.283 [INFO] [Thread-19228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:53:17.284 [DEBUG] [Thread-19228] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:53:17.284 [DEBUG] [Thread-19228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:53:17.284 [DEBUG] [Thread-19228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:53:17.285 [DEBUG] [Thread-19228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:53:17.285 [DEBUG] [Thread-19228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:53:17.285 [DEBUG] [Thread-19228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:53:17.285 [DEBUG] [Thread-19228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:53:17.285 [DEBUG] [Thread-19228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:53:17.285 [DEBUG] [Thread-19228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:53:17.285 [DEBUG] [Thread-19228] [transport.py] [_log()] client lang: <none>
2026-04-15T12:53:17.285 [DEBUG] [Thread-19228] [transport.py] [_log()] server lang: <none>
2026-04-15T12:53:17.285 [DEBUG] [Thread-19228] [transport.py] [_log()] kex follows: False
2026-04-15T12:53:17.285 [DEBUG] [Thread-19228] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:53:17.285 [DEBUG] [Thread-19228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:53:17.285 [DEBUG] [Thread-19228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:53:17.285 [DEBUG] [Thread-19228] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:53:17.286 [DEBUG] [Thread-19228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:53:17.286 [DEBUG] [Thread-19228] [transport.py] [_log()] Compression: none
2026-04-15T12:53:17.286 [DEBUG] [Thread-19228] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:53:17.294 [DEBUG] [Thread-19228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:53:17.294 [DEBUG] [Thread-19228] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:53:17.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:53:17.295 [DEBUG] [Thread-19228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:53:17.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:53:17.300 [DEBUG] [Thread-19228] [transport.py] [_log()] userauth is OK
2026-04-15T12:53:17.300 [DEBUG] [Thread-19228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:53:17.300 [DEBUG] [Thread-19228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:53:17.300 [DEBUG] [Thread-19228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:53:17.300 [DEBUG] [Thread-19228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:53:17.317 [INFO] [Thread-19228] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:53:17.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:53:17.866 [DEBUG] [Thread-19228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:53:17.866 [DEBUG] [Thread-19228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:53:17.867 [DEBUG] [Thread-19228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:53:17.907 [DEBUG] [Thread-19228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:53:17.907 [DEBUG] [Thread-19228] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:53:17.910 [DEBUG] [Thread-19228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:53:17.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:53:17.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:53:17.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:53:17.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:53:17.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:53:17.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:53:17.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:53:17.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:53:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:53:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.453610 -999.00  +13.30  14.84     69   +7.70 1 2 1 1 1   888    0 7.17 66.99 ----- 18.9 14.8 304.0 22.5 20.1 -17.6 18.9 -17.8 18.5 -15.2 19.7 -17.5
2026-04-15T12:53:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:53:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:53:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.453610
2026-04-15T12:53:17.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:53:17.937 [DEBUG] [Thread-19228] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:53:17.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:53:17.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:53:17.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:53:17.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:53:17.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:53:07', tmtdew=7.57281, humidity=60.1955, cloud=0.0, wind=19.2859, temperature=13.3071, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:53:11.904', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:53:18.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:53:18.161 [DEBUG] [Thread-19231] [transport.py] [_log()] starting thread (client mode): 0xf1335840
2026-04-15T12:53:18.161 [DEBUG] [Thread-19231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:53:18.181 [DEBUG] [Thread-19231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:53:18.181 [INFO] [Thread-19231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:53:18.192 [DEBUG] [Thread-19231] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:53:18.192 [DEBUG] [Thread-19231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:53:18.192 [DEBUG] [Thread-19231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:53:18.193 [DEBUG] [Thread-19231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:53:18.193 [DEBUG] [Thread-19231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:53:18.193 [DEBUG] [Thread-19231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:53:18.193 [DEBUG] [Thread-19231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:53:18.193 [DEBUG] [Thread-19231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:53:18.193 [DEBUG] [Thread-19231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:53:18.193 [DEBUG] [Thread-19231] [transport.py] [_log()] client lang: <none>
2026-04-15T12:53:18.193 [DEBUG] [Thread-19231] [transport.py] [_log()] server lang: <none>
2026-04-15T12:53:18.193 [DEBUG] [Thread-19231] [transport.py] [_log()] kex follows: False
2026-04-15T12:53:18.193 [DEBUG] [Thread-19231] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:53:18.194 [DEBUG] [Thread-19231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:53:18.194 [DEBUG] [Thread-19231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:53:18.194 [DEBUG] [Thread-19231] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:53:18.194 [DEBUG] [Thread-19231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:53:18.194 [DEBUG] [Thread-19231] [transport.py] [_log()] Compression: none
2026-04-15T12:53:18.194 [DEBUG] [Thread-19231] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:53:18.248 [DEBUG] [Thread-19231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:53:18.249 [DEBUG] [Thread-19231] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:53:18.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:53:18.249 [DEBUG] [Thread-19231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:53:18.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:53:18.304 [DEBUG] [Thread-19231] [transport.py] [_log()] userauth is OK
2026-04-15T12:53:18.304 [DEBUG] [Thread-19231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:53:18.305 [DEBUG] [Thread-19231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:53:18.305 [DEBUG] [Thread-19231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:53:18.305 [DEBUG] [Thread-19231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:53:18.331 [INFO] [Thread-19231] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:53:18.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:53:18.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:53:18.617 [DEBUG] [Thread-19233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:53:19.178 [DEBUG] [Thread-19231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:53:19.179 [DEBUG] [Thread-19231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:53:19.231 [DEBUG] [Thread-19231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:53:19.231 [DEBUG] [Thread-19231] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:53:19.240 [DEBUG] [Thread-19231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:53:19.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:53:19.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')
2026-04-15T12:53:19.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
2026-04-15T12:53:19.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:53:19.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:53:19.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:53:19.275 [DEBUG] [Thread-19231] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:53:26.515 [DEBUG] [Thread-19234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:53:41.557 [DEBUG] [Thread-19235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:53:49.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:53:49.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:53:49.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
2026-04-15T12:53:50.000 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:53:50.001 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:53:50.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 53, 42), 8.13293, 57.949, 0.0, 20.219, 14.0158, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:53:50.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:53:42
2026-04-15T12:53:50.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:53:51.399 [DEBUG] [Thread-19236] [transport.py] [_log()] starting thread (client mode): 0xee9ef7c0
2026-04-15T12:53:51.399 [DEBUG] [Thread-19236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:53:51.412 [DEBUG] [Thread-19236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:53:51.412 [INFO] [Thread-19236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:53:51.415 [DEBUG] [Thread-19236] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:53:51.416 [DEBUG] [Thread-19236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:53:51.416 [DEBUG] [Thread-19236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:53:51.416 [DEBUG] [Thread-19236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:53:51.416 [DEBUG] [Thread-19236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:53:51.416 [DEBUG] [Thread-19236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:53:51.416 [DEBUG] [Thread-19236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:53:51.416 [DEBUG] [Thread-19236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:53:51.416 [DEBUG] [Thread-19236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:53:51.416 [DEBUG] [Thread-19236] [transport.py] [_log()] client lang: <none>
2026-04-15T12:53:51.416 [DEBUG] [Thread-19236] [transport.py] [_log()] server lang: <none>
2026-04-15T12:53:51.416 [DEBUG] [Thread-19236] [transport.py] [_log()] kex follows: False
2026-04-15T12:53:51.416 [DEBUG] [Thread-19236] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:53:51.417 [DEBUG] [Thread-19236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:53:51.417 [DEBUG] [Thread-19236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:53:51.417 [DEBUG] [Thread-19236] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:53:51.417 [DEBUG] [Thread-19236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:53:51.417 [DEBUG] [Thread-19236] [transport.py] [_log()] Compression: none
2026-04-15T12:53:51.417 [DEBUG] [Thread-19236] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:53:51.433 [DEBUG] [Thread-19236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:53:51.434 [DEBUG] [Thread-19236] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:53:51.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:53:51.434 [DEBUG] [Thread-19236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:53:51.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:53:51.435 [DEBUG] [Thread-19236] [transport.py] [_log()] userauth is OK
2026-04-15T12:53:51.435 [DEBUG] [Thread-19236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:53:51.435 [DEBUG] [Thread-19236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:53:51.436 [DEBUG] [Thread-19236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:53:51.436 [DEBUG] [Thread-19236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:53:51.453 [INFO] [Thread-19236] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:53:51.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:53:52.048 [DEBUG] [Thread-19236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:53:52.048 [DEBUG] [Thread-19236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:53:52.049 [DEBUG] [Thread-19236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:53:52.089 [DEBUG] [Thread-19236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:53:52.089 [DEBUG] [Thread-19236] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:53:52.093 [DEBUG] [Thread-19236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:53:52.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:53:52.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:53:52.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:53:52.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:53:52.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:53:52.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:53:52.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:53:52.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:53:52.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:53:52.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.453958 -999.00  +13.20  20.42     68   +7.50 1 2 1 1 1   888    0 7.49 74.11 ----- 16.8 20.4 295.0 24.2 19.9 -20.2 18.9 -17.7 18.6 -14.2 19.9 -15.4
2026-04-15T12:53:52.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:53:52.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:53:52.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.453958
2026-04-15T12:53:52.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:53:52.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:53:52.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:53:52.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:53:52.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:53:52.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:53:42', tmtdew=8.13293, humidity=57.949, cloud=0.0, wind=20.219, temperature=14.0158, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:53:41.971', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:53:52.125 [DEBUG] [Thread-19236] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:53:52.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:53:52.367 [DEBUG] [Thread-19239] [transport.py] [_log()] starting thread (client mode): 0xee9e5f60
2026-04-15T12:53:52.368 [DEBUG] [Thread-19239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:53:52.382 [DEBUG] [Thread-19239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:53:52.382 [INFO] [Thread-19239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:53:52.389 [DEBUG] [Thread-19239] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:53:52.389 [DEBUG] [Thread-19239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:53:52.389 [DEBUG] [Thread-19239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:53:52.389 [DEBUG] [Thread-19239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:53:52.389 [DEBUG] [Thread-19239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:53:52.390 [DEBUG] [Thread-19239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:53:52.390 [DEBUG] [Thread-19239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:53:52.390 [DEBUG] [Thread-19239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:53:52.390 [DEBUG] [Thread-19239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:53:52.390 [DEBUG] [Thread-19239] [transport.py] [_log()] client lang: <none>
2026-04-15T12:53:52.390 [DEBUG] [Thread-19239] [transport.py] [_log()] server lang: <none>
2026-04-15T12:53:52.390 [DEBUG] [Thread-19239] [transport.py] [_log()] kex follows: False
2026-04-15T12:53:52.390 [DEBUG] [Thread-19239] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:53:52.390 [DEBUG] [Thread-19239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:53:52.390 [DEBUG] [Thread-19239] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:53:52.390 [DEBUG] [Thread-19239] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:53:52.391 [DEBUG] [Thread-19239] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:53:52.391 [DEBUG] [Thread-19239] [transport.py] [_log()] Compression: none
2026-04-15T12:53:52.391 [DEBUG] [Thread-19239] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:53:52.447 [DEBUG] [Thread-19239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:53:52.448 [DEBUG] [Thread-19239] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:53:52.448 [DEBUG] [Thread-19239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:53:52.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:53:52.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:53:52.504 [DEBUG] [Thread-19239] [transport.py] [_log()] userauth is OK
2026-04-15T12:53:52.504 [DEBUG] [Thread-19239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:53:52.504 [DEBUG] [Thread-19239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:53:52.505 [DEBUG] [Thread-19239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:53:52.505 [DEBUG] [Thread-19239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:53:52.530 [INFO] [Thread-19239] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:53:52.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:53:52.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:53:53.361 [DEBUG] [Thread-19239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:53:53.361 [DEBUG] [Thread-19239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:53:53.409 [DEBUG] [Thread-19239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:53:53.409 [DEBUG] [Thread-19239] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:53:53.418 [DEBUG] [Thread-19239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:53:53.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:53:53.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')
2026-04-15T12:53:53.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
2026-04-15T12:53:53.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:53:53.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:53:53.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:53:53.453 [DEBUG] [Thread-19239] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:53:56.589 [DEBUG] [Thread-19241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:54:11.632 [DEBUG] [Thread-19242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:54:18.723 [DEBUG] [Thread-19243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:54:23.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:54:23.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:54:23.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
2026-04-15T12:54:24.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 53, 42), 8.13293, 57.949, 0.0, 20.219, 14.0158, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:54:24.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:53:42
2026-04-15T12:54:25.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:54:25.675 [DEBUG] [Thread-19244] [transport.py] [_log()] starting thread (client mode): 0xf13ec7c0
2026-04-15T12:54:25.676 [DEBUG] [Thread-19244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:54:25.697 [DEBUG] [Thread-19244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:54:25.697 [INFO] [Thread-19244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:54:25.700 [DEBUG] [Thread-19244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:54:25.700 [DEBUG] [Thread-19244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:54:25.700 [DEBUG] [Thread-19244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:54:25.700 [DEBUG] [Thread-19244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:54:25.700 [DEBUG] [Thread-19244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:54:25.700 [DEBUG] [Thread-19244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:54:25.700 [DEBUG] [Thread-19244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:54:25.700 [DEBUG] [Thread-19244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:54:25.700 [DEBUG] [Thread-19244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:54:25.700 [DEBUG] [Thread-19244] [transport.py] [_log()] client lang: <none>
2026-04-15T12:54:25.701 [DEBUG] [Thread-19244] [transport.py] [_log()] server lang: <none>
2026-04-15T12:54:25.701 [DEBUG] [Thread-19244] [transport.py] [_log()] kex follows: False
2026-04-15T12:54:25.701 [DEBUG] [Thread-19244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:54:25.701 [DEBUG] [Thread-19244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:54:25.701 [DEBUG] [Thread-19244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:54:25.701 [DEBUG] [Thread-19244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:54:25.701 [DEBUG] [Thread-19244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:54:25.701 [DEBUG] [Thread-19244] [transport.py] [_log()] Compression: none
2026-04-15T12:54:25.701 [DEBUG] [Thread-19244] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:54:25.712 [DEBUG] [Thread-19244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:54:25.712 [DEBUG] [Thread-19244] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:54:25.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:54:25.713 [DEBUG] [Thread-19244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:54:25.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:54:25.714 [DEBUG] [Thread-19244] [transport.py] [_log()] userauth is OK
2026-04-15T12:54:25.714 [DEBUG] [Thread-19244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:54:25.714 [DEBUG] [Thread-19244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:54:25.714 [DEBUG] [Thread-19244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:54:25.715 [DEBUG] [Thread-19244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:54:25.733 [INFO] [Thread-19244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:54:25.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:54:26.314 [DEBUG] [Thread-19244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:54:26.314 [DEBUG] [Thread-19244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:54:26.314 [DEBUG] [Thread-19244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:54:26.355 [DEBUG] [Thread-19244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:54:26.355 [DEBUG] [Thread-19244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:54:26.357 [DEBUG] [Thread-19244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:54:26.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:54:26.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:54:26.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:54:26.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:54:26.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:54:26.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:54:26.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:54:26.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:54:26.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:54:26.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.454305 -999.00  +13.10  18.84     68   +7.50 1 2 1 1 1   888    0 7.58 76.16 ----- 16.1 18.8 299.0 23.3 20.2 -16.0 18.9 -17.9 18.4 -13.8 19.7 -17.1
2026-04-15T12:54:26.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:54:26.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:54:26.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.454305
2026-04-15T12:54:26.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:54:26.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:54:26.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:54:26.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:54:26.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:54:26.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:53:42', tmtdew=8.13293, humidity=57.949, cloud=0.0, wind=20.219, temperature=14.0158, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:54:11.952', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:54:26.373 [DEBUG] [Thread-19244] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:54:26.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:54:26.587 [DEBUG] [Thread-19247] [transport.py] [_log()] starting thread (client mode): 0xf13ec820
2026-04-15T12:54:26.587 [DEBUG] [Thread-19247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:54:26.600 [DEBUG] [Thread-19247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:54:26.601 [INFO] [Thread-19247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:54:26.608 [DEBUG] [Thread-19247] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:54:26.608 [DEBUG] [Thread-19247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:54:26.608 [DEBUG] [Thread-19247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:54:26.608 [DEBUG] [Thread-19247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:54:26.608 [DEBUG] [Thread-19247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:54:26.608 [DEBUG] [Thread-19247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:54:26.608 [DEBUG] [Thread-19247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:54:26.608 [DEBUG] [Thread-19247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:54:26.608 [DEBUG] [Thread-19247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:54:26.608 [DEBUG] [Thread-19247] [transport.py] [_log()] client lang: <none>
2026-04-15T12:54:26.608 [DEBUG] [Thread-19247] [transport.py] [_log()] server lang: <none>
2026-04-15T12:54:26.608 [DEBUG] [Thread-19247] [transport.py] [_log()] kex follows: False
2026-04-15T12:54:26.608 [DEBUG] [Thread-19247] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:54:26.608 [DEBUG] [Thread-19247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:54:26.608 [DEBUG] [Thread-19247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:54:26.609 [DEBUG] [Thread-19247] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:54:26.609 [DEBUG] [Thread-19247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:54:26.609 [DEBUG] [Thread-19247] [transport.py] [_log()] Compression: none
2026-04-15T12:54:26.609 [DEBUG] [Thread-19247] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:54:26.662 [DEBUG] [Thread-19249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:54:26.675 [DEBUG] [Thread-19247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:54:26.675 [DEBUG] [Thread-19247] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:54:26.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:54:26.676 [DEBUG] [Thread-19247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:54:26.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:54:26.732 [DEBUG] [Thread-19247] [transport.py] [_log()] userauth is OK
2026-04-15T12:54:26.732 [DEBUG] [Thread-19247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:54:26.732 [DEBUG] [Thread-19247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:54:26.732 [DEBUG] [Thread-19247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:54:26.733 [DEBUG] [Thread-19247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:54:26.750 [INFO] [Thread-19247] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:54:26.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:54:26.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:54:27.558 [DEBUG] [Thread-19247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:54:27.559 [DEBUG] [Thread-19247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:54:27.606 [DEBUG] [Thread-19247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:54:27.606 [DEBUG] [Thread-19247] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:54:27.615 [DEBUG] [Thread-19247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:54:27.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:54:27.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')
2026-04-15T12:54:27.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
2026-04-15T12:54:27.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:54:27.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:54:27.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:54:27.650 [DEBUG] [Thread-19247] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:54:41.701 [DEBUG] [Thread-19250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:54:50.139 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:54:50.141 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:54:56.732 [DEBUG] [Thread-19251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:54:57.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:54:57.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:54:57.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
2026-04-15T12:54:58.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 54, 18), 7.18779, 61.6706, 0.0, 17.663, 13.0917, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:54:58.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:54:18
2026-04-15T12:54:59.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:54:59.984 [DEBUG] [Thread-19252] [transport.py] [_log()] starting thread (client mode): 0xf13ec730
2026-04-15T12:54:59.984 [DEBUG] [Thread-19252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:55:00.003 [DEBUG] [Thread-19252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:55:00.004 [INFO] [Thread-19252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:55:00.005 [DEBUG] [Thread-19252] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:55:00.005 [DEBUG] [Thread-19252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:55:00.006 [DEBUG] [Thread-19252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:55:00.006 [DEBUG] [Thread-19252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:55:00.006 [DEBUG] [Thread-19252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:55:00.006 [DEBUG] [Thread-19252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:55:00.006 [DEBUG] [Thread-19252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:55:00.006 [DEBUG] [Thread-19252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:55:00.006 [DEBUG] [Thread-19252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:55:00.006 [DEBUG] [Thread-19252] [transport.py] [_log()] client lang: <none>
2026-04-15T12:55:00.006 [DEBUG] [Thread-19252] [transport.py] [_log()] server lang: <none>
2026-04-15T12:55:00.006 [DEBUG] [Thread-19252] [transport.py] [_log()] kex follows: False
2026-04-15T12:55:00.006 [DEBUG] [Thread-19252] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:55:00.007 [DEBUG] [Thread-19252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:55:00.007 [DEBUG] [Thread-19252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:55:00.007 [DEBUG] [Thread-19252] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:55:00.007 [DEBUG] [Thread-19252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:55:00.007 [DEBUG] [Thread-19252] [transport.py] [_log()] Compression: none
2026-04-15T12:55:00.007 [DEBUG] [Thread-19252] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:55:00.023 [DEBUG] [Thread-19252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:55:00.023 [DEBUG] [Thread-19252] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:55:00.023 [DEBUG] [Thread-19252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:55:00.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:55:00.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:55:00.025 [DEBUG] [Thread-19252] [transport.py] [_log()] userauth is OK
2026-04-15T12:55:00.025 [DEBUG] [Thread-19252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:55:00.025 [DEBUG] [Thread-19252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:55:00.025 [DEBUG] [Thread-19252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:55:00.025 [DEBUG] [Thread-19252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:55:00.060 [INFO] [Thread-19252] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:55:00.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:55:00.656 [DEBUG] [Thread-19252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:55:00.656 [DEBUG] [Thread-19252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:55:00.657 [DEBUG] [Thread-19252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:55:00.696 [DEBUG] [Thread-19252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:55:00.697 [DEBUG] [Thread-19252] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:55:00.699 [DEBUG] [Thread-19252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:55:00.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:55:00.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:55:00.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:55:00.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:55:00.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:55:00.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:55:00.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:55:00.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:55:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:55:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.454652 -999.00  +12.90  15.98     69   +7.50 1 2 1 1 1   888    0 7.28 69.18 ----- 21.7 16.0 297.4 22.7 20.0 -19.4 19.1 -16.0 18.8 -12.7 19.9 -13.0
2026-04-15T12:55:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:55:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:55:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.454652
2026-04-15T12:55:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:55:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:55:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:55:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:55:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:55:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:54:18', tmtdew=7.18779, humidity=61.6706, cloud=0.0, wind=17.663, temperature=13.0917, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:54:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:55:00.713 [DEBUG] [Thread-19252] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:55:00.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:55:00.927 [DEBUG] [Thread-19255] [transport.py] [_log()] starting thread (client mode): 0xf13ecd90
2026-04-15T12:55:00.927 [DEBUG] [Thread-19255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:55:00.941 [DEBUG] [Thread-19255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:55:00.941 [INFO] [Thread-19255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:55:00.948 [DEBUG] [Thread-19255] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:55:00.948 [DEBUG] [Thread-19255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:55:00.948 [DEBUG] [Thread-19255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:55:00.948 [DEBUG] [Thread-19255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:55:00.948 [DEBUG] [Thread-19255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:55:00.949 [DEBUG] [Thread-19255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:55:00.949 [DEBUG] [Thread-19255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:55:00.949 [DEBUG] [Thread-19255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:55:00.949 [DEBUG] [Thread-19255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:55:00.949 [DEBUG] [Thread-19255] [transport.py] [_log()] client lang: <none>
2026-04-15T12:55:00.949 [DEBUG] [Thread-19255] [transport.py] [_log()] server lang: <none>
2026-04-15T12:55:00.949 [DEBUG] [Thread-19255] [transport.py] [_log()] kex follows: False
2026-04-15T12:55:00.949 [DEBUG] [Thread-19255] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:55:00.949 [DEBUG] [Thread-19255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:55:00.949 [DEBUG] [Thread-19255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:55:00.949 [DEBUG] [Thread-19255] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:55:00.950 [DEBUG] [Thread-19255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:55:00.950 [DEBUG] [Thread-19255] [transport.py] [_log()] Compression: none
2026-04-15T12:55:00.950 [DEBUG] [Thread-19255] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:55:01.007 [DEBUG] [Thread-19255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:55:01.007 [DEBUG] [Thread-19255] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:55:01.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:55:01.008 [DEBUG] [Thread-19255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:55:01.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:55:01.066 [DEBUG] [Thread-19255] [transport.py] [_log()] userauth is OK
2026-04-15T12:55:01.066 [DEBUG] [Thread-19255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:55:01.067 [DEBUG] [Thread-19255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:55:01.067 [DEBUG] [Thread-19255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:55:01.067 [DEBUG] [Thread-19255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:55:01.089 [INFO] [Thread-19255] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:55:01.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:55:01.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:55:01.950 [DEBUG] [Thread-19255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:55:01.950 [DEBUG] [Thread-19255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:55:01.998 [DEBUG] [Thread-19255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:55:01.998 [DEBUG] [Thread-19255] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:55:02.007 [DEBUG] [Thread-19255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:55:02.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:55:02.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')
2026-04-15T12:55:02.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
2026-04-15T12:55:02.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:55:02.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:55:02.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:55:02.041 [DEBUG] [Thread-19255] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:55:11.764 [DEBUG] [Thread-19257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:55:18.817 [DEBUG] [Thread-19258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:55:26.810 [DEBUG] [Thread-19259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:55:32.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:55:32.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:55:32.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
2026-04-15T12:55:33.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 54, 54), 7.60445, 60.0705, 0.0, 10.8346, 13.8829, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:55:33.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:54:54
2026-04-15T12:55:33.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:55:34.330 [DEBUG] [Thread-19260] [transport.py] [_log()] starting thread (client mode): 0xee9e7e50
2026-04-15T12:55:34.331 [DEBUG] [Thread-19260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:55:34.352 [DEBUG] [Thread-19260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:55:34.352 [INFO] [Thread-19260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:55:34.353 [DEBUG] [Thread-19260] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:55:34.353 [DEBUG] [Thread-19260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:55:34.353 [DEBUG] [Thread-19260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:55:34.353 [DEBUG] [Thread-19260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:55:34.353 [DEBUG] [Thread-19260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:55:34.354 [DEBUG] [Thread-19260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:55:34.354 [DEBUG] [Thread-19260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:55:34.354 [DEBUG] [Thread-19260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:55:34.354 [DEBUG] [Thread-19260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:55:34.354 [DEBUG] [Thread-19260] [transport.py] [_log()] client lang: <none>
2026-04-15T12:55:34.354 [DEBUG] [Thread-19260] [transport.py] [_log()] server lang: <none>
2026-04-15T12:55:34.354 [DEBUG] [Thread-19260] [transport.py] [_log()] kex follows: False
2026-04-15T12:55:34.354 [DEBUG] [Thread-19260] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:55:34.354 [DEBUG] [Thread-19260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:55:34.354 [DEBUG] [Thread-19260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:55:34.354 [DEBUG] [Thread-19260] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:55:34.354 [DEBUG] [Thread-19260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:55:34.354 [DEBUG] [Thread-19260] [transport.py] [_log()] Compression: none
2026-04-15T12:55:34.354 [DEBUG] [Thread-19260] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:55:34.363 [DEBUG] [Thread-19260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:55:34.364 [DEBUG] [Thread-19260] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:55:34.364 [DEBUG] [Thread-19260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:55:34.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:55:34.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:55:34.365 [DEBUG] [Thread-19260] [transport.py] [_log()] userauth is OK
2026-04-15T12:55:34.365 [DEBUG] [Thread-19260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:55:34.365 [DEBUG] [Thread-19260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:55:34.365 [DEBUG] [Thread-19260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:55:34.365 [DEBUG] [Thread-19260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:55:34.378 [INFO] [Thread-19260] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:55:34.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:55:36.403 [DEBUG] [Thread-19260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:55:36.404 [DEBUG] [Thread-19260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:55:36.404 [DEBUG] [Thread-19260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:55:36.445 [DEBUG] [Thread-19260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:55:36.445 [DEBUG] [Thread-19260] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:55:36.447 [DEBUG] [Thread-19260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:55:36.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:55:36.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:55:36.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:55:36.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:55:36.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:55:36.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:55:36.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:55:36.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:55:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:55:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.454652 -999.00  +12.90  15.98     69   +7.50 1 2 1 1 1   888    0 7.28 69.18 ----- 21.7 16.0 297.4 22.7 20.0 -19.4 19.1 -16.0 18.8 -12.7 19.9 -13.0
2026-04-15T12:55:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:55:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:55:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.454652
2026-04-15T12:55:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:55:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:55:36.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:55:36.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:55:36.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:55:36.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:54:54', tmtdew=7.60445, humidity=60.0705, cloud=0.0, wind=10.8346, temperature=13.8829, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:54:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:55:36.473 [DEBUG] [Thread-19260] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:55:36.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:55:36.693 [DEBUG] [Thread-19263] [transport.py] [_log()] starting thread (client mode): 0xee9052d0
2026-04-15T12:55:36.693 [DEBUG] [Thread-19263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:55:36.708 [DEBUG] [Thread-19263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:55:36.708 [INFO] [Thread-19263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:55:36.715 [DEBUG] [Thread-19263] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:55:36.715 [DEBUG] [Thread-19263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:55:36.715 [DEBUG] [Thread-19263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:55:36.715 [DEBUG] [Thread-19263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:55:36.715 [DEBUG] [Thread-19263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:55:36.715 [DEBUG] [Thread-19263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:55:36.715 [DEBUG] [Thread-19263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:55:36.716 [DEBUG] [Thread-19263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:55:36.716 [DEBUG] [Thread-19263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:55:36.716 [DEBUG] [Thread-19263] [transport.py] [_log()] client lang: <none>
2026-04-15T12:55:36.716 [DEBUG] [Thread-19263] [transport.py] [_log()] server lang: <none>
2026-04-15T12:55:36.716 [DEBUG] [Thread-19263] [transport.py] [_log()] kex follows: False
2026-04-15T12:55:36.716 [DEBUG] [Thread-19263] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:55:36.716 [DEBUG] [Thread-19263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:55:36.716 [DEBUG] [Thread-19263] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:55:36.716 [DEBUG] [Thread-19263] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:55:36.716 [DEBUG] [Thread-19263] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:55:36.716 [DEBUG] [Thread-19263] [transport.py] [_log()] Compression: none
2026-04-15T12:55:36.717 [DEBUG] [Thread-19263] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:55:36.771 [DEBUG] [Thread-19263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:55:36.772 [DEBUG] [Thread-19263] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:55:36.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:55:36.772 [DEBUG] [Thread-19263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:55:36.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:55:36.828 [DEBUG] [Thread-19263] [transport.py] [_log()] userauth is OK
2026-04-15T12:55:36.828 [DEBUG] [Thread-19263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:55:36.828 [DEBUG] [Thread-19263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:55:36.829 [DEBUG] [Thread-19263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:55:36.829 [DEBUG] [Thread-19263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:55:36.849 [INFO] [Thread-19263] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:55:36.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:55:36.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:55:37.702 [DEBUG] [Thread-19263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:55:37.702 [DEBUG] [Thread-19263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:55:37.750 [DEBUG] [Thread-19263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:55:37.750 [DEBUG] [Thread-19263] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:55:37.759 [DEBUG] [Thread-19263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:55:37.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:55:37.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')
2026-04-15T12:55:37.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
2026-04-15T12:55:37.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:55:37.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:55:37.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:55:37.793 [DEBUG] [Thread-19263] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:55:41.841 [DEBUG] [Thread-19265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:55:50.287 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:55:50.288 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:55:56.886 [DEBUG] [Thread-19266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:56:07.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:56:07.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:56:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:56:09.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 55, 29), 7.13368, 61.9689, 0.0, 15.1574, 13.5066, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:56:09.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:55:29
2026-04-15T12:56:09.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:56:09.967 [DEBUG] [Thread-19267] [transport.py] [_log()] starting thread (client mode): 0xee9e4df0
2026-04-15T12:56:09.967 [DEBUG] [Thread-19267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:56:09.988 [DEBUG] [Thread-19267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:56:09.988 [INFO] [Thread-19267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:56:09.991 [DEBUG] [Thread-19267] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:56:09.991 [DEBUG] [Thread-19267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:56:09.991 [DEBUG] [Thread-19267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:56:09.991 [DEBUG] [Thread-19267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:56:09.991 [DEBUG] [Thread-19267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:56:09.992 [DEBUG] [Thread-19267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:56:09.992 [DEBUG] [Thread-19267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:56:09.992 [DEBUG] [Thread-19267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:56:09.992 [DEBUG] [Thread-19267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:56:09.992 [DEBUG] [Thread-19267] [transport.py] [_log()] client lang: <none>
2026-04-15T12:56:09.992 [DEBUG] [Thread-19267] [transport.py] [_log()] server lang: <none>
2026-04-15T12:56:09.992 [DEBUG] [Thread-19267] [transport.py] [_log()] kex follows: False
2026-04-15T12:56:09.992 [DEBUG] [Thread-19267] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:56:09.992 [DEBUG] [Thread-19267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:56:09.992 [DEBUG] [Thread-19267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:56:09.992 [DEBUG] [Thread-19267] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:56:09.992 [DEBUG] [Thread-19267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:56:09.993 [DEBUG] [Thread-19267] [transport.py] [_log()] Compression: none
2026-04-15T12:56:09.993 [DEBUG] [Thread-19267] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:56:10.010 [DEBUG] [Thread-19267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:56:10.010 [DEBUG] [Thread-19267] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:56:10.011 [DEBUG] [Thread-19267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:56:10.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:56:10.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:56:10.012 [DEBUG] [Thread-19267] [transport.py] [_log()] userauth is OK
2026-04-15T12:56:10.012 [DEBUG] [Thread-19267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:56:10.012 [DEBUG] [Thread-19267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:56:10.012 [DEBUG] [Thread-19267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:56:10.012 [DEBUG] [Thread-19267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:56:10.035 [INFO] [Thread-19267] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:56:10.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:56:10.770 [DEBUG] [Thread-19267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:56:10.770 [DEBUG] [Thread-19267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:56:10.770 [DEBUG] [Thread-19267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:56:10.811 [DEBUG] [Thread-19267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:56:10.811 [DEBUG] [Thread-19267] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:56:10.814 [DEBUG] [Thread-19267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:56:10.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:56:10.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:56:10.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:56:10.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:56:10.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:56:10.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:56:10.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:56:10.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:56:10.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:56:10.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.454652 -999.00  +12.90  15.98     69   +7.50 1 2 1 1 1   888    0 7.28 69.18 ----- 21.7 16.0 297.4 22.7 20.0 -19.4 19.1 -16.0 18.8 -12.7 19.9 -13.0
2026-04-15T12:56:10.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:56:10.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:56:10.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.454652
2026-04-15T12:56:10.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:56:10.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:56:10.841 [DEBUG] [Thread-19267] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:56:10.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:56:10.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:56:10.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:56:10.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:55:29', tmtdew=7.13368, humidity=61.9689, cloud=0.0, wind=15.1574, temperature=13.5066, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:54:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:56:11.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:56:11.095 [DEBUG] [Thread-19270] [transport.py] [_log()] starting thread (client mode): 0xee9e7df0
2026-04-15T12:56:11.095 [DEBUG] [Thread-19270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:56:11.109 [DEBUG] [Thread-19270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:56:11.109 [INFO] [Thread-19270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:56:11.116 [DEBUG] [Thread-19270] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:56:11.116 [DEBUG] [Thread-19270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:56:11.116 [DEBUG] [Thread-19270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:56:11.116 [DEBUG] [Thread-19270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:56:11.116 [DEBUG] [Thread-19270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:56:11.117 [DEBUG] [Thread-19270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:56:11.117 [DEBUG] [Thread-19270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:56:11.117 [DEBUG] [Thread-19270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:56:11.117 [DEBUG] [Thread-19270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:56:11.117 [DEBUG] [Thread-19270] [transport.py] [_log()] client lang: <none>
2026-04-15T12:56:11.117 [DEBUG] [Thread-19270] [transport.py] [_log()] server lang: <none>
2026-04-15T12:56:11.117 [DEBUG] [Thread-19270] [transport.py] [_log()] kex follows: False
2026-04-15T12:56:11.117 [DEBUG] [Thread-19270] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:56:11.117 [DEBUG] [Thread-19270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:56:11.117 [DEBUG] [Thread-19270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:56:11.117 [DEBUG] [Thread-19270] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:56:11.117 [DEBUG] [Thread-19270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:56:11.117 [DEBUG] [Thread-19270] [transport.py] [_log()] Compression: none
2026-04-15T12:56:11.118 [DEBUG] [Thread-19270] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:56:11.175 [DEBUG] [Thread-19270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:56:11.175 [DEBUG] [Thread-19270] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:56:11.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:56:11.176 [DEBUG] [Thread-19270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:56:11.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:56:11.232 [DEBUG] [Thread-19270] [transport.py] [_log()] userauth is OK
2026-04-15T12:56:11.232 [DEBUG] [Thread-19270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:56:11.232 [DEBUG] [Thread-19270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:56:11.232 [DEBUG] [Thread-19270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:56:11.233 [DEBUG] [Thread-19270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:56:11.257 [INFO] [Thread-19270] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:56:11.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:56:11.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:56:11.917 [DEBUG] [Thread-19272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:56:12.085 [DEBUG] [Thread-19270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:56:12.086 [DEBUG] [Thread-19270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:56:12.133 [DEBUG] [Thread-19270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:56:12.133 [DEBUG] [Thread-19270] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:56:12.142 [DEBUG] [Thread-19270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:56:12.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:56:12.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')
2026-04-15T12:56:12.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
2026-04-15T12:56:12.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:56:12.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:56:12.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:56:12.174 [DEBUG] [Thread-19270] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:56:18.906 [DEBUG] [Thread-19273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:56:26.961 [DEBUG] [Thread-19274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:56:41.992 [DEBUG] [Thread-19275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:56:42.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:56:42.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:56:42.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
2026-04-15T12:56:43.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 56, 5), 7.18115, 61.77, 0.0, 15.5808, 13.49, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:56:43.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:56:05
2026-04-15T12:56:43.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:56:44.399 [DEBUG] [Thread-19276] [transport.py] [_log()] starting thread (client mode): 0xee988580
2026-04-15T12:56:44.400 [DEBUG] [Thread-19276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:56:44.420 [DEBUG] [Thread-19276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:56:44.420 [INFO] [Thread-19276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:56:44.423 [DEBUG] [Thread-19276] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:56:44.423 [DEBUG] [Thread-19276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:56:44.423 [DEBUG] [Thread-19276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:56:44.423 [DEBUG] [Thread-19276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:56:44.423 [DEBUG] [Thread-19276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:56:44.423 [DEBUG] [Thread-19276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:56:44.424 [DEBUG] [Thread-19276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:56:44.424 [DEBUG] [Thread-19276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:56:44.424 [DEBUG] [Thread-19276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:56:44.424 [DEBUG] [Thread-19276] [transport.py] [_log()] client lang: <none>
2026-04-15T12:56:44.424 [DEBUG] [Thread-19276] [transport.py] [_log()] server lang: <none>
2026-04-15T12:56:44.424 [DEBUG] [Thread-19276] [transport.py] [_log()] kex follows: False
2026-04-15T12:56:44.424 [DEBUG] [Thread-19276] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:56:44.424 [DEBUG] [Thread-19276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:56:44.424 [DEBUG] [Thread-19276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:56:44.424 [DEBUG] [Thread-19276] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:56:44.425 [DEBUG] [Thread-19276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:56:44.425 [DEBUG] [Thread-19276] [transport.py] [_log()] Compression: none
2026-04-15T12:56:44.425 [DEBUG] [Thread-19276] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:56:44.441 [DEBUG] [Thread-19276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:56:44.442 [DEBUG] [Thread-19276] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:56:44.442 [DEBUG] [Thread-19276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:56:44.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:56:44.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:56:44.443 [DEBUG] [Thread-19276] [transport.py] [_log()] userauth is OK
2026-04-15T12:56:44.444 [DEBUG] [Thread-19276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:56:44.444 [DEBUG] [Thread-19276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:56:44.444 [DEBUG] [Thread-19276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:56:44.444 [DEBUG] [Thread-19276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:56:44.462 [INFO] [Thread-19276] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:56:44.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:56:45.277 [DEBUG] [Thread-19276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:56:45.278 [DEBUG] [Thread-19276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:56:45.278 [DEBUG] [Thread-19276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:56:45.318 [DEBUG] [Thread-19276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:56:45.318 [DEBUG] [Thread-19276] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:56:45.320 [DEBUG] [Thread-19276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:56:45.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:56:45.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:56:45.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:56:45.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:56:45.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:56:45.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:56:45.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:56:45.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:56:45.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:56:45.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.454652 -999.00  +12.90  15.98     69   +7.50 1 2 1 1 1   888    0 7.28 69.18 ----- 21.7 16.0 297.4 22.7 20.0 -19.4 19.1 -16.0 18.8 -12.7 19.9 -13.0
2026-04-15T12:56:45.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:56:45.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:56:45.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.454652
2026-04-15T12:56:45.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:56:45.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:56:45.344 [DEBUG] [Thread-19276] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:56:45.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:56:45.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:56:45.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:56:45.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:56:05', tmtdew=7.18115, humidity=61.77, cloud=0.0, wind=15.5808, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:54:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:56:45.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:56:45.608 [DEBUG] [Thread-19279] [transport.py] [_log()] starting thread (client mode): 0xee988130
2026-04-15T12:56:45.608 [DEBUG] [Thread-19279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:56:45.622 [DEBUG] [Thread-19279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:56:45.622 [INFO] [Thread-19279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:56:45.629 [DEBUG] [Thread-19279] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:56:45.629 [DEBUG] [Thread-19279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:56:45.629 [DEBUG] [Thread-19279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:56:45.629 [DEBUG] [Thread-19279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:56:45.630 [DEBUG] [Thread-19279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:56:45.630 [DEBUG] [Thread-19279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:56:45.630 [DEBUG] [Thread-19279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:56:45.630 [DEBUG] [Thread-19279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:56:45.630 [DEBUG] [Thread-19279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:56:45.630 [DEBUG] [Thread-19279] [transport.py] [_log()] client lang: <none>
2026-04-15T12:56:45.630 [DEBUG] [Thread-19279] [transport.py] [_log()] server lang: <none>
2026-04-15T12:56:45.630 [DEBUG] [Thread-19279] [transport.py] [_log()] kex follows: False
2026-04-15T12:56:45.630 [DEBUG] [Thread-19279] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:56:45.630 [DEBUG] [Thread-19279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:56:45.630 [DEBUG] [Thread-19279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:56:45.630 [DEBUG] [Thread-19279] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:56:45.631 [DEBUG] [Thread-19279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:56:45.631 [DEBUG] [Thread-19279] [transport.py] [_log()] Compression: none
2026-04-15T12:56:45.631 [DEBUG] [Thread-19279] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:56:45.687 [DEBUG] [Thread-19279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:56:45.688 [DEBUG] [Thread-19279] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:56:45.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:56:45.688 [DEBUG] [Thread-19279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:56:45.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:56:45.751 [DEBUG] [Thread-19279] [transport.py] [_log()] userauth is OK
2026-04-15T12:56:45.751 [DEBUG] [Thread-19279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:56:45.751 [DEBUG] [Thread-19279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:56:45.751 [DEBUG] [Thread-19279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:56:45.752 [DEBUG] [Thread-19279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:56:45.776 [INFO] [Thread-19279] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:56:45.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:56:45.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:56:46.622 [DEBUG] [Thread-19279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:56:46.623 [DEBUG] [Thread-19279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:56:46.670 [DEBUG] [Thread-19279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:56:46.670 [DEBUG] [Thread-19279] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:56:46.679 [DEBUG] [Thread-19279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:56:46.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:56:46.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')
2026-04-15T12:56:46.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
2026-04-15T12:56:46.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:56:46.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:56:46.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:56:46.710 [DEBUG] [Thread-19279] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:56:50.427 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:56:50.428 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:56:57.025 [DEBUG] [Thread-19281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:57:12.069 [DEBUG] [Thread-19282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:57:16.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:57:16.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:57:16.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
2026-04-15T12:57:17.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 56, 40), 7.56649, 60.4017, 0.0, 19.7604, 14.6119, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:57:17.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:56:40
2026-04-15T12:57:18.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:57:18.800 [DEBUG] [Thread-19283] [transport.py] [_log()] starting thread (client mode): 0xee98a560
2026-04-15T12:57:18.801 [DEBUG] [Thread-19283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:57:18.821 [DEBUG] [Thread-19283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:57:18.821 [INFO] [Thread-19283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:57:18.824 [DEBUG] [Thread-19283] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:57:18.824 [DEBUG] [Thread-19283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:57:18.824 [DEBUG] [Thread-19283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:57:18.824 [DEBUG] [Thread-19283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:57:18.824 [DEBUG] [Thread-19283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:57:18.824 [DEBUG] [Thread-19283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:57:18.825 [DEBUG] [Thread-19283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:57:18.825 [DEBUG] [Thread-19283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:57:18.825 [DEBUG] [Thread-19283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:57:18.825 [DEBUG] [Thread-19283] [transport.py] [_log()] client lang: <none>
2026-04-15T12:57:18.825 [DEBUG] [Thread-19283] [transport.py] [_log()] server lang: <none>
2026-04-15T12:57:18.825 [DEBUG] [Thread-19283] [transport.py] [_log()] kex follows: False
2026-04-15T12:57:18.825 [DEBUG] [Thread-19283] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:57:18.825 [DEBUG] [Thread-19283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:57:18.825 [DEBUG] [Thread-19283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:57:18.825 [DEBUG] [Thread-19283] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:57:18.825 [DEBUG] [Thread-19283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:57:18.826 [DEBUG] [Thread-19283] [transport.py] [_log()] Compression: none
2026-04-15T12:57:18.826 [DEBUG] [Thread-19283] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:57:18.842 [DEBUG] [Thread-19283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:57:18.843 [DEBUG] [Thread-19283] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:57:18.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:57:18.843 [DEBUG] [Thread-19283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:57:18.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:57:18.844 [DEBUG] [Thread-19283] [transport.py] [_log()] userauth is OK
2026-04-15T12:57:18.844 [DEBUG] [Thread-19283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:57:18.845 [DEBUG] [Thread-19283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:57:18.845 [DEBUG] [Thread-19283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:57:18.845 [DEBUG] [Thread-19283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:57:18.873 [INFO] [Thread-19283] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:57:18.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:57:18.981 [DEBUG] [Thread-19285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:57:19.653 [DEBUG] [Thread-19283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:57:19.654 [DEBUG] [Thread-19283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:57:19.654 [DEBUG] [Thread-19283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:57:19.694 [DEBUG] [Thread-19283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:57:19.694 [DEBUG] [Thread-19283] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:57:19.696 [DEBUG] [Thread-19283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:57:19.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:57:19.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:57:19.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:57:19.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:57:19.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:57:19.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:57:19.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:57:19.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:57:19.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:57:19.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.454652 -999.00  +12.90  15.98     69   +7.50 1 2 1 1 1   888    0 7.28 69.18 ----- 21.7 16.0 297.4 22.7 20.0 -19.4 19.1 -16.0 18.8 -12.7 19.9 -13.0
2026-04-15T12:57:19.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:57:19.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:57:19.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.454652
2026-04-15T12:57:19.720 [DEBUG] [Thread-19283] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:57:19.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:57:19.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:57:19.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:57:19.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:57:19.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:57:19.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:56:40', tmtdew=7.56649, humidity=60.4017, cloud=0.0, wind=19.7604, temperature=14.6119, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:54:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:57:19.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:57:19.979 [DEBUG] [Thread-19287] [transport.py] [_log()] starting thread (client mode): 0xee9070a0
2026-04-15T12:57:19.979 [DEBUG] [Thread-19287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:57:19.993 [DEBUG] [Thread-19287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:57:19.993 [INFO] [Thread-19287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:57:20.000 [DEBUG] [Thread-19287] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:57:20.001 [DEBUG] [Thread-19287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:57:20.001 [DEBUG] [Thread-19287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:57:20.001 [DEBUG] [Thread-19287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:57:20.001 [DEBUG] [Thread-19287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:57:20.001 [DEBUG] [Thread-19287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:57:20.001 [DEBUG] [Thread-19287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:57:20.001 [DEBUG] [Thread-19287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:57:20.001 [DEBUG] [Thread-19287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:57:20.002 [DEBUG] [Thread-19287] [transport.py] [_log()] client lang: <none>
2026-04-15T12:57:20.002 [DEBUG] [Thread-19287] [transport.py] [_log()] server lang: <none>
2026-04-15T12:57:20.002 [DEBUG] [Thread-19287] [transport.py] [_log()] kex follows: False
2026-04-15T12:57:20.002 [DEBUG] [Thread-19287] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:57:20.002 [DEBUG] [Thread-19287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:57:20.002 [DEBUG] [Thread-19287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:57:20.002 [DEBUG] [Thread-19287] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:57:20.002 [DEBUG] [Thread-19287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:57:20.002 [DEBUG] [Thread-19287] [transport.py] [_log()] Compression: none
2026-04-15T12:57:20.003 [DEBUG] [Thread-19287] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:57:20.059 [DEBUG] [Thread-19287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:57:20.059 [DEBUG] [Thread-19287] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:57:20.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:57:20.060 [DEBUG] [Thread-19287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:57:20.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:57:20.116 [DEBUG] [Thread-19287] [transport.py] [_log()] userauth is OK
2026-04-15T12:57:20.116 [DEBUG] [Thread-19287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:57:20.116 [DEBUG] [Thread-19287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:57:20.116 [DEBUG] [Thread-19287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:57:20.117 [DEBUG] [Thread-19287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:57:20.141 [INFO] [Thread-19287] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:57:20.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:57:20.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:57:20.957 [DEBUG] [Thread-19287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:57:20.957 [DEBUG] [Thread-19287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:57:21.005 [DEBUG] [Thread-19287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:57:21.005 [DEBUG] [Thread-19287] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:57:21.014 [DEBUG] [Thread-19287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:57:21.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:57:21.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')
2026-04-15T12:57:21.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
2026-04-15T12:57:21.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:57:21.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:57:21.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:57:21.049 [DEBUG] [Thread-19287] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:57:27.102 [DEBUG] [Thread-19289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:57:42.147 [DEBUG] [Thread-19290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:57:50.566 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:57:50.567 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:57:51.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:57:51.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:57:51.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:57:52.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 57, 16), 6.90379, 62.7837, 0.0, 17.222, 13.2402, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:57:52.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:57:16
2026-04-15T12:57:52.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:57:53.176 [DEBUG] [Thread-19291] [transport.py] [_log()] starting thread (client mode): 0xee9e7c70
2026-04-15T12:57:53.177 [DEBUG] [Thread-19291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:57:53.196 [DEBUG] [Thread-19291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:57:53.196 [INFO] [Thread-19291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:57:53.199 [DEBUG] [Thread-19291] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:57:53.199 [DEBUG] [Thread-19291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:57:53.200 [DEBUG] [Thread-19291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:57:53.200 [DEBUG] [Thread-19291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:57:53.200 [DEBUG] [Thread-19291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:57:53.200 [DEBUG] [Thread-19291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:57:53.200 [DEBUG] [Thread-19291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:57:53.200 [DEBUG] [Thread-19291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:57:53.200 [DEBUG] [Thread-19291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:57:53.200 [DEBUG] [Thread-19291] [transport.py] [_log()] client lang: <none>
2026-04-15T12:57:53.200 [DEBUG] [Thread-19291] [transport.py] [_log()] server lang: <none>
2026-04-15T12:57:53.200 [DEBUG] [Thread-19291] [transport.py] [_log()] kex follows: False
2026-04-15T12:57:53.200 [DEBUG] [Thread-19291] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:57:53.200 [DEBUG] [Thread-19291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:57:53.201 [DEBUG] [Thread-19291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:57:53.201 [DEBUG] [Thread-19291] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:57:53.201 [DEBUG] [Thread-19291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:57:53.201 [DEBUG] [Thread-19291] [transport.py] [_log()] Compression: none
2026-04-15T12:57:53.201 [DEBUG] [Thread-19291] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:57:53.221 [DEBUG] [Thread-19291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:57:53.221 [DEBUG] [Thread-19291] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:57:53.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:57:53.222 [DEBUG] [Thread-19291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:57:53.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:57:53.223 [DEBUG] [Thread-19291] [transport.py] [_log()] userauth is OK
2026-04-15T12:57:53.223 [DEBUG] [Thread-19291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:57:53.223 [DEBUG] [Thread-19291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:57:53.223 [DEBUG] [Thread-19291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:57:53.223 [DEBUG] [Thread-19291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:57:53.246 [INFO] [Thread-19291] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:57:53.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:57:54.043 [DEBUG] [Thread-19291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:57:54.044 [DEBUG] [Thread-19291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:57:54.044 [DEBUG] [Thread-19291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:57:54.084 [DEBUG] [Thread-19291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:57:54.084 [DEBUG] [Thread-19291] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:57:54.087 [DEBUG] [Thread-19291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:57:54.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:57:54.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:57:54.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:57:54.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:57:54.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:57:54.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:57:54.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:57:54.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:57:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:57:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.454652 -999.00  +12.90  15.98     69   +7.50 1 2 1 1 1   888    0 7.28 69.18 ----- 21.7 16.0 297.4 22.7 20.0 -19.4 19.1 -16.0 18.8 -12.7 19.9 -13.0
2026-04-15T12:57:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:57:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:57:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.454652
2026-04-15T12:57:54.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:57:54.111 [DEBUG] [Thread-19291] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:57:54.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:57:54.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:57:54.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:57:54.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:57:54.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:57:16', tmtdew=6.90379, humidity=62.7837, cloud=0.0, wind=17.222, temperature=13.2402, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:54:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:57:54.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:57:54.367 [DEBUG] [Thread-19294] [transport.py] [_log()] starting thread (client mode): 0xee907af0
2026-04-15T12:57:54.367 [DEBUG] [Thread-19294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:57:54.382 [DEBUG] [Thread-19294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:57:54.382 [INFO] [Thread-19294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:57:54.391 [DEBUG] [Thread-19294] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:57:54.391 [DEBUG] [Thread-19294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:57:54.391 [DEBUG] [Thread-19294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:57:54.391 [DEBUG] [Thread-19294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:57:54.391 [DEBUG] [Thread-19294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:57:54.391 [DEBUG] [Thread-19294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:57:54.391 [DEBUG] [Thread-19294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:57:54.391 [DEBUG] [Thread-19294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:57:54.392 [DEBUG] [Thread-19294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:57:54.392 [DEBUG] [Thread-19294] [transport.py] [_log()] client lang: <none>
2026-04-15T12:57:54.392 [DEBUG] [Thread-19294] [transport.py] [_log()] server lang: <none>
2026-04-15T12:57:54.392 [DEBUG] [Thread-19294] [transport.py] [_log()] kex follows: False
2026-04-15T12:57:54.392 [DEBUG] [Thread-19294] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:57:54.392 [DEBUG] [Thread-19294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:57:54.392 [DEBUG] [Thread-19294] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:57:54.392 [DEBUG] [Thread-19294] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:57:54.392 [DEBUG] [Thread-19294] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:57:54.392 [DEBUG] [Thread-19294] [transport.py] [_log()] Compression: none
2026-04-15T12:57:54.392 [DEBUG] [Thread-19294] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:57:54.447 [DEBUG] [Thread-19294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:57:54.447 [DEBUG] [Thread-19294] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:57:54.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:57:54.448 [DEBUG] [Thread-19294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:57:54.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:57:54.505 [DEBUG] [Thread-19294] [transport.py] [_log()] userauth is OK
2026-04-15T12:57:54.505 [DEBUG] [Thread-19294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:57:54.505 [DEBUG] [Thread-19294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:57:54.505 [DEBUG] [Thread-19294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:57:54.505 [DEBUG] [Thread-19294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:57:54.534 [INFO] [Thread-19294] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:57:54.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:57:54.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:57:55.359 [DEBUG] [Thread-19294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:57:55.359 [DEBUG] [Thread-19294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:57:55.407 [DEBUG] [Thread-19294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:57:55.407 [DEBUG] [Thread-19294] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:57:55.416 [DEBUG] [Thread-19294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:57:55.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:57:55.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')
2026-04-15T12:57:55.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
2026-04-15T12:57:55.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:57:55.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:57:55.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:57:55.451 [DEBUG] [Thread-19294] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:57:57.177 [DEBUG] [Thread-19296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:58:12.223 [DEBUG] [Thread-19297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:58:19.090 [DEBUG] [Thread-19298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:58:25.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:58:25.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:58:25.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
2026-04-15T12:58:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 57, 52), 7.20265, 61.7939, 0.0, 17.185, 14.0482, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:58:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:57:52
2026-04-15T12:58:27.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:58:27.254 [DEBUG] [Thread-19299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:58:27.574 [DEBUG] [Thread-19300] [transport.py] [_log()] starting thread (client mode): 0xee905cf0
2026-04-15T12:58:27.575 [DEBUG] [Thread-19300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:58:27.590 [DEBUG] [Thread-19300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:58:27.590 [INFO] [Thread-19300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:58:27.593 [DEBUG] [Thread-19300] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:58:27.594 [DEBUG] [Thread-19300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:58:27.594 [DEBUG] [Thread-19300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:58:27.594 [DEBUG] [Thread-19300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:58:27.594 [DEBUG] [Thread-19300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:58:27.594 [DEBUG] [Thread-19300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:58:27.594 [DEBUG] [Thread-19300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:58:27.594 [DEBUG] [Thread-19300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:58:27.594 [DEBUG] [Thread-19300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:58:27.594 [DEBUG] [Thread-19300] [transport.py] [_log()] client lang: <none>
2026-04-15T12:58:27.594 [DEBUG] [Thread-19300] [transport.py] [_log()] server lang: <none>
2026-04-15T12:58:27.594 [DEBUG] [Thread-19300] [transport.py] [_log()] kex follows: False
2026-04-15T12:58:27.594 [DEBUG] [Thread-19300] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:58:27.595 [DEBUG] [Thread-19300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:58:27.595 [DEBUG] [Thread-19300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:58:27.595 [DEBUG] [Thread-19300] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:58:27.595 [DEBUG] [Thread-19300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:58:27.595 [DEBUG] [Thread-19300] [transport.py] [_log()] Compression: none
2026-04-15T12:58:27.595 [DEBUG] [Thread-19300] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:58:27.611 [DEBUG] [Thread-19300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:58:27.611 [DEBUG] [Thread-19300] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:58:27.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:58:27.612 [DEBUG] [Thread-19300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:58:27.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:58:27.613 [DEBUG] [Thread-19300] [transport.py] [_log()] userauth is OK
2026-04-15T12:58:27.613 [DEBUG] [Thread-19300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:58:27.613 [DEBUG] [Thread-19300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:58:27.613 [DEBUG] [Thread-19300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:58:27.613 [DEBUG] [Thread-19300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:58:27.636 [INFO] [Thread-19300] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:58:27.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:58:28.429 [DEBUG] [Thread-19300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:58:28.430 [DEBUG] [Thread-19300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:58:28.430 [DEBUG] [Thread-19300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:58:28.470 [DEBUG] [Thread-19300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:58:28.470 [DEBUG] [Thread-19300] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:58:28.472 [DEBUG] [Thread-19300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:58:28.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:58:28.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:58:28.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:58:28.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:58:28.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:58:28.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:58:28.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:58:28.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:58:28.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:58:28.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.454652 -999.00  +12.90  15.98     69   +7.50 1 2 1 1 1   888    0 7.28 69.18 ----- 21.7 16.0 297.4 22.7 20.0 -19.4 19.1 -16.0 18.8 -12.7 19.9 -13.0
2026-04-15T12:58:28.495 [DEBUG] [Thread-19300] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:58:28.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:58:28.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:58:28.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.454652
2026-04-15T12:58:28.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:58:28.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:58:28.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:58:28.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:58:28.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:58:28.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:57:52', tmtdew=7.20265, humidity=61.7939, cloud=0.0, wind=17.185, temperature=14.0482, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:54:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:58:28.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:58:28.754 [DEBUG] [Thread-19303] [transport.py] [_log()] starting thread (client mode): 0xf13347c0
2026-04-15T12:58:28.754 [DEBUG] [Thread-19303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:58:28.768 [DEBUG] [Thread-19303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:58:28.768 [INFO] [Thread-19303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:58:28.775 [DEBUG] [Thread-19303] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:58:28.776 [DEBUG] [Thread-19303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:58:28.776 [DEBUG] [Thread-19303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:58:28.776 [DEBUG] [Thread-19303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:58:28.776 [DEBUG] [Thread-19303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:58:28.776 [DEBUG] [Thread-19303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:58:28.776 [DEBUG] [Thread-19303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:58:28.776 [DEBUG] [Thread-19303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:58:28.776 [DEBUG] [Thread-19303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:58:28.776 [DEBUG] [Thread-19303] [transport.py] [_log()] client lang: <none>
2026-04-15T12:58:28.776 [DEBUG] [Thread-19303] [transport.py] [_log()] server lang: <none>
2026-04-15T12:58:28.776 [DEBUG] [Thread-19303] [transport.py] [_log()] kex follows: False
2026-04-15T12:58:28.776 [DEBUG] [Thread-19303] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:58:28.777 [DEBUG] [Thread-19303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:58:28.777 [DEBUG] [Thread-19303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:58:28.777 [DEBUG] [Thread-19303] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:58:28.777 [DEBUG] [Thread-19303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:58:28.777 [DEBUG] [Thread-19303] [transport.py] [_log()] Compression: none
2026-04-15T12:58:28.777 [DEBUG] [Thread-19303] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:58:28.831 [DEBUG] [Thread-19303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:58:28.831 [DEBUG] [Thread-19303] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:58:28.832 [DEBUG] [Thread-19303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:58:28.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:58:28.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:58:28.888 [DEBUG] [Thread-19303] [transport.py] [_log()] userauth is OK
2026-04-15T12:58:28.888 [DEBUG] [Thread-19303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:58:28.888 [DEBUG] [Thread-19303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:58:28.888 [DEBUG] [Thread-19303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:58:28.889 [DEBUG] [Thread-19303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:58:28.915 [INFO] [Thread-19303] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:58:28.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:58:28.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:58:29.737 [DEBUG] [Thread-19303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:58:29.737 [DEBUG] [Thread-19303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:58:29.785 [DEBUG] [Thread-19303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:58:29.785 [DEBUG] [Thread-19303] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:58:29.794 [DEBUG] [Thread-19303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:58:29.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:58:29.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')
2026-04-15T12:58:29.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
2026-04-15T12:58:29.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:58:29.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:58:29.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:58:29.829 [DEBUG] [Thread-19303] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:58:42.283 [DEBUG] [Thread-19305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:58:50.708 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:58:50.709 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:58:57.327 [DEBUG] [Thread-19306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:58:59.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:58:59.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:58:59.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T12:59:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 58, 27), 6.74739, 63.6456, 0.0, 19.1624, 13.307, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:59:01.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:58:27
2026-04-15T12:59:01.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:59:02.078 [DEBUG] [Thread-19307] [transport.py] [_log()] starting thread (client mode): 0xee906710
2026-04-15T12:59:02.078 [DEBUG] [Thread-19307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:59:02.098 [DEBUG] [Thread-19307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:59:02.098 [INFO] [Thread-19307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:59:02.101 [DEBUG] [Thread-19307] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:59:02.101 [DEBUG] [Thread-19307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:59:02.101 [DEBUG] [Thread-19307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:59:02.102 [DEBUG] [Thread-19307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:59:02.102 [DEBUG] [Thread-19307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:59:02.102 [DEBUG] [Thread-19307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:59:02.102 [DEBUG] [Thread-19307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:59:02.102 [DEBUG] [Thread-19307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:59:02.102 [DEBUG] [Thread-19307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:59:02.102 [DEBUG] [Thread-19307] [transport.py] [_log()] client lang: <none>
2026-04-15T12:59:02.102 [DEBUG] [Thread-19307] [transport.py] [_log()] server lang: <none>
2026-04-15T12:59:02.102 [DEBUG] [Thread-19307] [transport.py] [_log()] kex follows: False
2026-04-15T12:59:02.102 [DEBUG] [Thread-19307] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:59:02.102 [DEBUG] [Thread-19307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:59:02.102 [DEBUG] [Thread-19307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:59:02.102 [DEBUG] [Thread-19307] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:59:02.103 [DEBUG] [Thread-19307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:59:02.103 [DEBUG] [Thread-19307] [transport.py] [_log()] Compression: none
2026-04-15T12:59:02.103 [DEBUG] [Thread-19307] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:59:02.120 [DEBUG] [Thread-19307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:59:02.121 [DEBUG] [Thread-19307] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:59:02.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:59:02.121 [DEBUG] [Thread-19307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:59:02.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:59:02.123 [DEBUG] [Thread-19307] [transport.py] [_log()] userauth is OK
2026-04-15T12:59:02.123 [DEBUG] [Thread-19307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:59:02.123 [DEBUG] [Thread-19307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:59:02.123 [DEBUG] [Thread-19307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:59:02.123 [DEBUG] [Thread-19307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:59:02.160 [INFO] [Thread-19307] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:59:02.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:59:02.940 [DEBUG] [Thread-19307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:59:02.940 [DEBUG] [Thread-19307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:59:02.941 [DEBUG] [Thread-19307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:59:02.981 [DEBUG] [Thread-19307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:59:02.981 [DEBUG] [Thread-19307] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:59:02.984 [DEBUG] [Thread-19307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:59:02.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:59:02.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:59:02.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:59:02.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:59:03.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:59:03.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:59:03.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:59:03.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:59:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:59:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.454652 -999.00  +12.90  15.98     69   +7.50 1 2 1 1 1   888    0 7.28 69.18 ----- 21.7 16.0 297.4 22.7 20.0 -19.4 19.1 -16.0 18.8 -12.7 19.9 -13.0
2026-04-15T12:59:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:59:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:59:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.454652
2026-04-15T12:59:03.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:59:03.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:59:03.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:59:03.008 [DEBUG] [Thread-19307] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:59:03.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:59:03.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:59:03.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:58:27', tmtdew=6.74739, humidity=63.6456, cloud=0.0, wind=19.1624, temperature=13.307, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:54:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:59:03.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:59:03.272 [DEBUG] [Thread-19310] [transport.py] [_log()] starting thread (client mode): 0xf13c90c0
2026-04-15T12:59:03.272 [DEBUG] [Thread-19310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:59:03.286 [DEBUG] [Thread-19310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:59:03.286 [INFO] [Thread-19310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:59:03.294 [DEBUG] [Thread-19310] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:59:03.294 [DEBUG] [Thread-19310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:59:03.294 [DEBUG] [Thread-19310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:59:03.294 [DEBUG] [Thread-19310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:59:03.294 [DEBUG] [Thread-19310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:59:03.294 [DEBUG] [Thread-19310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:59:03.294 [DEBUG] [Thread-19310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:59:03.294 [DEBUG] [Thread-19310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:59:03.294 [DEBUG] [Thread-19310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:59:03.294 [DEBUG] [Thread-19310] [transport.py] [_log()] client lang: <none>
2026-04-15T12:59:03.294 [DEBUG] [Thread-19310] [transport.py] [_log()] server lang: <none>
2026-04-15T12:59:03.294 [DEBUG] [Thread-19310] [transport.py] [_log()] kex follows: False
2026-04-15T12:59:03.294 [DEBUG] [Thread-19310] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:59:03.294 [DEBUG] [Thread-19310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:59:03.294 [DEBUG] [Thread-19310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:59:03.295 [DEBUG] [Thread-19310] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:59:03.295 [DEBUG] [Thread-19310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:59:03.295 [DEBUG] [Thread-19310] [transport.py] [_log()] Compression: none
2026-04-15T12:59:03.295 [DEBUG] [Thread-19310] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:59:03.350 [DEBUG] [Thread-19310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:59:03.351 [DEBUG] [Thread-19310] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:59:03.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:59:03.351 [DEBUG] [Thread-19310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:59:03.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:59:03.408 [DEBUG] [Thread-19310] [transport.py] [_log()] userauth is OK
2026-04-15T12:59:03.409 [DEBUG] [Thread-19310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:59:03.409 [DEBUG] [Thread-19310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:59:03.409 [DEBUG] [Thread-19310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:59:03.409 [DEBUG] [Thread-19310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:59:03.430 [INFO] [Thread-19310] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:59:03.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:59:03.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:59:04.257 [DEBUG] [Thread-19310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:59:04.258 [DEBUG] [Thread-19310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:59:04.306 [DEBUG] [Thread-19310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:59:04.306 [DEBUG] [Thread-19310] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:59:04.315 [DEBUG] [Thread-19310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:59:04.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:59:04.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')
2026-04-15T12:59:04.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
2026-04-15T12:59:04.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:59:04.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:59:04.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:59:04.350 [DEBUG] [Thread-19310] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:59:12.361 [DEBUG] [Thread-19312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:59:19.181 [DEBUG] [Thread-19313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:59:27.406 [DEBUG] [Thread-19314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:59:34.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T12:59:34.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T12:59:34.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
2026-04-15T12:59:35.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 59, 3), 6.80077, 63.4301, 0.0, 17.663, 13.3567, 0, 0, 0, 2, 0, 0),)
2026-04-15T12:59:35.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:59:03
2026-04-15T12:59:36.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T12:59:36.531 [DEBUG] [Thread-19315] [transport.py] [_log()] starting thread (client mode): 0xf1365e40
2026-04-15T12:59:36.532 [DEBUG] [Thread-19315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:59:36.551 [DEBUG] [Thread-19315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T12:59:36.551 [INFO] [Thread-19315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T12:59:36.554 [DEBUG] [Thread-19315] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:59:36.554 [DEBUG] [Thread-19315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T12:59:36.555 [DEBUG] [Thread-19315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:59:36.555 [DEBUG] [Thread-19315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:59:36.555 [DEBUG] [Thread-19315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:59:36.555 [DEBUG] [Thread-19315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:59:36.555 [DEBUG] [Thread-19315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:59:36.555 [DEBUG] [Thread-19315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:59:36.555 [DEBUG] [Thread-19315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:59:36.555 [DEBUG] [Thread-19315] [transport.py] [_log()] client lang: <none>
2026-04-15T12:59:36.555 [DEBUG] [Thread-19315] [transport.py] [_log()] server lang: <none>
2026-04-15T12:59:36.555 [DEBUG] [Thread-19315] [transport.py] [_log()] kex follows: False
2026-04-15T12:59:36.555 [DEBUG] [Thread-19315] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:59:36.555 [DEBUG] [Thread-19315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:59:36.556 [DEBUG] [Thread-19315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:59:36.556 [DEBUG] [Thread-19315] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:59:36.556 [DEBUG] [Thread-19315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:59:36.556 [DEBUG] [Thread-19315] [transport.py] [_log()] Compression: none
2026-04-15T12:59:36.556 [DEBUG] [Thread-19315] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:59:36.573 [DEBUG] [Thread-19315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:59:36.574 [DEBUG] [Thread-19315] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:59:36.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T12:59:36.574 [DEBUG] [Thread-19315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T12:59:36.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:59:36.616 [DEBUG] [Thread-19315] [transport.py] [_log()] userauth is OK
2026-04-15T12:59:36.617 [DEBUG] [Thread-19315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:59:36.617 [DEBUG] [Thread-19315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:59:36.617 [DEBUG] [Thread-19315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T12:59:36.617 [DEBUG] [Thread-19315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:59:36.641 [INFO] [Thread-19315] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:59:36.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:59:37.451 [DEBUG] [Thread-19315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:59:37.452 [DEBUG] [Thread-19315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:59:37.452 [DEBUG] [Thread-19315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T12:59:37.493 [DEBUG] [Thread-19315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:59:37.493 [DEBUG] [Thread-19315] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:59:37.496 [DEBUG] [Thread-19315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:59:37.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:59:37.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T12:59:37.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T12:59:37.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T12:59:37.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:59:37.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T12:59:37.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:59:37.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:59:37.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T12:59:37.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.454652 -999.00  +12.90  15.98     69   +7.50 1 2 1 1 1   888    0 7.28 69.18 ----- 21.7 16.0 297.4 22.7 20.0 -19.4 19.1 -16.0 18.8 -12.7 19.9 -13.0
2026-04-15T12:59:37.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T12:59:37.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T12:59:37.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.454652
2026-04-15T12:59:37.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T12:59:37.515 [DEBUG] [Thread-19315] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:59:37.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T12:59:37.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T12:59:37.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T12:59:37.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T12:59:37.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:59:03', tmtdew=6.80077, humidity=63.4301, cloud=0.0, wind=17.663, temperature=13.3567, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:54:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T12:59:37.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T12:59:37.734 [DEBUG] [Thread-19318] [transport.py] [_log()] starting thread (client mode): 0xee9e5cc0
2026-04-15T12:59:37.734 [DEBUG] [Thread-19318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T12:59:37.757 [DEBUG] [Thread-19318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T12:59:37.757 [INFO] [Thread-19318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T12:59:37.764 [DEBUG] [Thread-19318] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T12:59:37.764 [DEBUG] [Thread-19318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T12:59:37.764 [DEBUG] [Thread-19318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T12:59:37.764 [DEBUG] [Thread-19318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:59:37.764 [DEBUG] [Thread-19318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T12:59:37.764 [DEBUG] [Thread-19318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:59:37.765 [DEBUG] [Thread-19318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T12:59:37.765 [DEBUG] [Thread-19318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T12:59:37.765 [DEBUG] [Thread-19318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T12:59:37.765 [DEBUG] [Thread-19318] [transport.py] [_log()] client lang: <none>
2026-04-15T12:59:37.765 [DEBUG] [Thread-19318] [transport.py] [_log()] server lang: <none>
2026-04-15T12:59:37.765 [DEBUG] [Thread-19318] [transport.py] [_log()] kex follows: False
2026-04-15T12:59:37.765 [DEBUG] [Thread-19318] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T12:59:37.765 [DEBUG] [Thread-19318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T12:59:37.765 [DEBUG] [Thread-19318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T12:59:37.765 [DEBUG] [Thread-19318] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T12:59:37.765 [DEBUG] [Thread-19318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T12:59:37.765 [DEBUG] [Thread-19318] [transport.py] [_log()] Compression: none
2026-04-15T12:59:37.766 [DEBUG] [Thread-19318] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T12:59:37.823 [DEBUG] [Thread-19318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T12:59:37.823 [DEBUG] [Thread-19318] [transport.py] [_log()] Switch to new keys ...
2026-04-15T12:59:37.824 [DEBUG] [Thread-19318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T12:59:37.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T12:59:37.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T12:59:37.880 [DEBUG] [Thread-19318] [transport.py] [_log()] userauth is OK
2026-04-15T12:59:37.880 [DEBUG] [Thread-19318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T12:59:37.880 [DEBUG] [Thread-19318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T12:59:37.880 [DEBUG] [Thread-19318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T12:59:37.880 [DEBUG] [Thread-19318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T12:59:37.904 [INFO] [Thread-19318] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T12:59:37.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T12:59:37.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T12:59:38.733 [DEBUG] [Thread-19318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T12:59:38.734 [DEBUG] [Thread-19318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T12:59:38.781 [DEBUG] [Thread-19318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T12:59:38.781 [DEBUG] [Thread-19318] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T12:59:38.790 [DEBUG] [Thread-19318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T12:59:38.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T12:59:38.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')
2026-04-15T12:59:38.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
2026-04-15T12:59:38.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T12:59:38.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T12:59:38.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T12:59:38.824 [DEBUG] [Thread-19318] [transport.py] [_log()] EOF in transport thread
2026-04-15T12:59:42.438 [DEBUG] [Thread-19320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:59:50.848 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:59:50.849 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T12:59:57.487 [DEBUG] [Thread-19321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:00:08.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:00:08.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:00:08.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
2026-04-15T13:00:10.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 12, 59, 38), 6.98078, 62.8547, 0.0, 19.337, 14.5454, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:00:10.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 12:59:38
2026-04-15T13:00:10.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:00:11.024 [DEBUG] [Thread-19322] [transport.py] [_log()] starting thread (client mode): 0xee988790
2026-04-15T13:00:11.024 [DEBUG] [Thread-19322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:00:11.048 [DEBUG] [Thread-19322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:00:11.048 [INFO] [Thread-19322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:00:11.052 [DEBUG] [Thread-19322] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:00:11.052 [DEBUG] [Thread-19322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:00:11.052 [DEBUG] [Thread-19322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:00:11.052 [DEBUG] [Thread-19322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:00:11.052 [DEBUG] [Thread-19322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:00:11.053 [DEBUG] [Thread-19322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:00:11.053 [DEBUG] [Thread-19322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:00:11.053 [DEBUG] [Thread-19322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:00:11.053 [DEBUG] [Thread-19322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:00:11.053 [DEBUG] [Thread-19322] [transport.py] [_log()] client lang: <none>
2026-04-15T13:00:11.053 [DEBUG] [Thread-19322] [transport.py] [_log()] server lang: <none>
2026-04-15T13:00:11.053 [DEBUG] [Thread-19322] [transport.py] [_log()] kex follows: False
2026-04-15T13:00:11.053 [DEBUG] [Thread-19322] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:00:11.053 [DEBUG] [Thread-19322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:00:11.053 [DEBUG] [Thread-19322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:00:11.053 [DEBUG] [Thread-19322] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:00:11.054 [DEBUG] [Thread-19322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:00:11.054 [DEBUG] [Thread-19322] [transport.py] [_log()] Compression: none
2026-04-15T13:00:11.054 [DEBUG] [Thread-19322] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:00:11.073 [DEBUG] [Thread-19322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:00:11.073 [DEBUG] [Thread-19322] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:00:11.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:00:11.074 [DEBUG] [Thread-19322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:00:11.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:00:11.075 [DEBUG] [Thread-19322] [transport.py] [_log()] userauth is OK
2026-04-15T13:00:11.075 [DEBUG] [Thread-19322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:00:11.075 [DEBUG] [Thread-19322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:00:11.075 [DEBUG] [Thread-19322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:00:11.075 [DEBUG] [Thread-19322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:00:11.100 [INFO] [Thread-19322] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:00:11.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:00:12.519 [DEBUG] [Thread-19324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:00:13.187 [DEBUG] [Thread-19322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:00:13.187 [DEBUG] [Thread-19322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:00:13.188 [DEBUG] [Thread-19322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:00:13.228 [DEBUG] [Thread-19322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:00:13.228 [DEBUG] [Thread-19322] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:00:13.231 [DEBUG] [Thread-19322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:00:13.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:00:13.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:00:13.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:00:13.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:00:13.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:00:13.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:00:13.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:00:13.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:00:13.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:00:13.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.454652 -999.00  +12.90  15.98     69   +7.50 1 2 1 1 1   888    0 7.28 69.18 ----- 21.7 16.0 297.4 22.7 20.0 -19.4 19.1 -16.0 18.8 -12.7 19.9 -13.0
2026-04-15T13:00:13.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:00:13.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:00:13.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.454652
2026-04-15T13:00:13.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:00:13.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:00:13.258 [DEBUG] [Thread-19322] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:00:13.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:00:13.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:00:13.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:00:13.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T12:59:38', tmtdew=6.98078, humidity=62.8547, cloud=0.0, wind=19.337, temperature=14.5454, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T10:54:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:00:13.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:00:13.513 [DEBUG] [Thread-19326] [transport.py] [_log()] starting thread (client mode): 0xee988130
2026-04-15T13:00:13.513 [DEBUG] [Thread-19326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:00:13.527 [DEBUG] [Thread-19326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:00:13.527 [INFO] [Thread-19326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:00:13.534 [DEBUG] [Thread-19326] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:00:13.534 [DEBUG] [Thread-19326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:00:13.534 [DEBUG] [Thread-19326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:00:13.534 [DEBUG] [Thread-19326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:00:13.534 [DEBUG] [Thread-19326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:00:13.535 [DEBUG] [Thread-19326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:00:13.535 [DEBUG] [Thread-19326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:00:13.535 [DEBUG] [Thread-19326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:00:13.535 [DEBUG] [Thread-19326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:00:13.535 [DEBUG] [Thread-19326] [transport.py] [_log()] client lang: <none>
2026-04-15T13:00:13.535 [DEBUG] [Thread-19326] [transport.py] [_log()] server lang: <none>
2026-04-15T13:00:13.535 [DEBUG] [Thread-19326] [transport.py] [_log()] kex follows: False
2026-04-15T13:00:13.535 [DEBUG] [Thread-19326] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:00:13.535 [DEBUG] [Thread-19326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:00:13.535 [DEBUG] [Thread-19326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:00:13.536 [DEBUG] [Thread-19326] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:00:13.536 [DEBUG] [Thread-19326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:00:13.536 [DEBUG] [Thread-19326] [transport.py] [_log()] Compression: none
2026-04-15T13:00:13.536 [DEBUG] [Thread-19326] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:00:13.590 [DEBUG] [Thread-19326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:00:13.591 [DEBUG] [Thread-19326] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:00:13.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:00:13.592 [DEBUG] [Thread-19326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:00:13.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:00:13.648 [DEBUG] [Thread-19326] [transport.py] [_log()] userauth is OK
2026-04-15T13:00:13.648 [DEBUG] [Thread-19326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:00:13.648 [DEBUG] [Thread-19326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:00:13.648 [DEBUG] [Thread-19326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:00:13.648 [DEBUG] [Thread-19326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:00:13.673 [INFO] [Thread-19326] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:00:13.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:00:13.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:00:14.497 [DEBUG] [Thread-19326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:00:14.498 [DEBUG] [Thread-19326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:00:14.545 [DEBUG] [Thread-19326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:00:14.545 [DEBUG] [Thread-19326] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:00:14.554 [DEBUG] [Thread-19326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:00:14.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:00:14.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')
2026-04-15T13:00:14.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
2026-04-15T13:00:14.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:00:14.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:00:14.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:00:14.589 [DEBUG] [Thread-19326] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:00:19.257 [DEBUG] [Thread-19328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:00:27.551 [DEBUG] [Thread-19329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:00:42.595 [DEBUG] [Thread-19330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:00:44.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:00:44.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:00:44.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
2026-04-15T13:00:45.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 0, 15), 7.16478, 61.7393, 0.0, 21.0316, 13.4395, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:00:45.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:00:15
2026-04-15T13:00:46.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:00:46.658 [DEBUG] [Thread-19331] [transport.py] [_log()] starting thread (client mode): 0xf1337df0
2026-04-15T13:00:46.658 [DEBUG] [Thread-19331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:00:46.670 [DEBUG] [Thread-19331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:00:46.671 [INFO] [Thread-19331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:00:46.674 [DEBUG] [Thread-19331] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:00:46.674 [DEBUG] [Thread-19331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:00:46.674 [DEBUG] [Thread-19331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:00:46.674 [DEBUG] [Thread-19331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:00:46.674 [DEBUG] [Thread-19331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:00:46.674 [DEBUG] [Thread-19331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:00:46.674 [DEBUG] [Thread-19331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:00:46.674 [DEBUG] [Thread-19331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:00:46.674 [DEBUG] [Thread-19331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:00:46.675 [DEBUG] [Thread-19331] [transport.py] [_log()] client lang: <none>
2026-04-15T13:00:46.675 [DEBUG] [Thread-19331] [transport.py] [_log()] server lang: <none>
2026-04-15T13:00:46.675 [DEBUG] [Thread-19331] [transport.py] [_log()] kex follows: False
2026-04-15T13:00:46.675 [DEBUG] [Thread-19331] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:00:46.675 [DEBUG] [Thread-19331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:00:46.675 [DEBUG] [Thread-19331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:00:46.675 [DEBUG] [Thread-19331] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:00:46.675 [DEBUG] [Thread-19331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:00:46.675 [DEBUG] [Thread-19331] [transport.py] [_log()] Compression: none
2026-04-15T13:00:46.675 [DEBUG] [Thread-19331] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:00:46.690 [DEBUG] [Thread-19331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:00:46.690 [DEBUG] [Thread-19331] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:00:46.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:00:46.691 [DEBUG] [Thread-19331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:00:46.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:00:46.692 [DEBUG] [Thread-19331] [transport.py] [_log()] userauth is OK
2026-04-15T13:00:46.692 [DEBUG] [Thread-19331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:00:46.692 [DEBUG] [Thread-19331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:00:46.692 [DEBUG] [Thread-19331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:00:46.692 [DEBUG] [Thread-19331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:00:46.716 [INFO] [Thread-19331] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:00:46.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:00:47.479 [DEBUG] [Thread-19331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:00:47.479 [DEBUG] [Thread-19331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:00:47.480 [DEBUG] [Thread-19331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:00:47.520 [DEBUG] [Thread-19331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:00:47.520 [DEBUG] [Thread-19331] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:00:47.522 [DEBUG] [Thread-19331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:00:47.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:00:47.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:00:47.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:00:47.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:00:47.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:00:47.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:00:47.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:00:47.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:00:47.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:00:47.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.458471 -999.00  +13.20  16.80     70   +8.00 1 2 1 1 1   888    0 5.89 16.99 NA 15.7 16.8 293.2 23.3 20.1 -19.2 19.1 -18.2 18.8 -14.2 19.9 -15.8
2026-04-15T13:00:47.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:00:47.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:00:47.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.458471
2026-04-15T13:00:47.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:00:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:00:47.547 [DEBUG] [Thread-19331] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:00:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:00:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:00:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:00:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:00:15', tmtdew=7.16478, humidity=61.7393, cloud=0.0, wind=21.0316, temperature=13.4395, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:00:11.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:00:47.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:00:47.800 [DEBUG] [Thread-19334] [transport.py] [_log()] starting thread (client mode): 0xf13c94e0
2026-04-15T13:00:47.800 [DEBUG] [Thread-19334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:00:47.816 [DEBUG] [Thread-19334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:00:47.816 [INFO] [Thread-19334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:00:47.823 [DEBUG] [Thread-19334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:00:47.823 [DEBUG] [Thread-19334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:00:47.823 [DEBUG] [Thread-19334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:00:47.823 [DEBUG] [Thread-19334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:00:47.823 [DEBUG] [Thread-19334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:00:47.823 [DEBUG] [Thread-19334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:00:47.824 [DEBUG] [Thread-19334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:00:47.824 [DEBUG] [Thread-19334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:00:47.824 [DEBUG] [Thread-19334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:00:47.824 [DEBUG] [Thread-19334] [transport.py] [_log()] client lang: <none>
2026-04-15T13:00:47.824 [DEBUG] [Thread-19334] [transport.py] [_log()] server lang: <none>
2026-04-15T13:00:47.824 [DEBUG] [Thread-19334] [transport.py] [_log()] kex follows: False
2026-04-15T13:00:47.824 [DEBUG] [Thread-19334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:00:47.824 [DEBUG] [Thread-19334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:00:47.824 [DEBUG] [Thread-19334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:00:47.824 [DEBUG] [Thread-19334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:00:47.824 [DEBUG] [Thread-19334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:00:47.825 [DEBUG] [Thread-19334] [transport.py] [_log()] Compression: none
2026-04-15T13:00:47.825 [DEBUG] [Thread-19334] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:00:47.879 [DEBUG] [Thread-19334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:00:47.879 [DEBUG] [Thread-19334] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:00:47.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:00:47.880 [DEBUG] [Thread-19334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:00:47.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:00:47.935 [DEBUG] [Thread-19334] [transport.py] [_log()] userauth is OK
2026-04-15T13:00:47.936 [DEBUG] [Thread-19334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:00:47.936 [DEBUG] [Thread-19334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:00:47.936 [DEBUG] [Thread-19334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:00:47.936 [DEBUG] [Thread-19334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:00:47.961 [INFO] [Thread-19334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:00:47.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:00:47.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:00:48.791 [DEBUG] [Thread-19334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:00:48.791 [DEBUG] [Thread-19334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:00:48.839 [DEBUG] [Thread-19334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:00:48.839 [DEBUG] [Thread-19334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:00:48.848 [DEBUG] [Thread-19334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:00:48.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:00:48.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')
2026-04-15T13:00:48.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') -> 00000000
2026-04-15T13:00:48.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:00:48.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:00:48.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:00:48.883 [DEBUG] [Thread-19334] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:00:50.988 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:00:50.988 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:00:57.627 [DEBUG] [Thread-19336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:01:12.673 [DEBUG] [Thread-19337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:01:18.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:01:18.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:01:18.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:01:19.332 [DEBUG] [Thread-19338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:01:20.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 0, 50), 7.86224, 59.0754, 0.0, 24.2762, 14.1475, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:01:20.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:00:50
2026-04-15T13:01:20.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:01:21.141 [DEBUG] [Thread-19339] [transport.py] [_log()] starting thread (client mode): 0xf13e1870
2026-04-15T13:01:21.142 [DEBUG] [Thread-19339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:01:21.161 [DEBUG] [Thread-19339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:01:21.161 [INFO] [Thread-19339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:01:21.165 [DEBUG] [Thread-19339] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:01:21.165 [DEBUG] [Thread-19339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:01:21.165 [DEBUG] [Thread-19339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:01:21.165 [DEBUG] [Thread-19339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:01:21.165 [DEBUG] [Thread-19339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:01:21.165 [DEBUG] [Thread-19339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:01:21.165 [DEBUG] [Thread-19339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:01:21.165 [DEBUG] [Thread-19339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:01:21.165 [DEBUG] [Thread-19339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:01:21.165 [DEBUG] [Thread-19339] [transport.py] [_log()] client lang: <none>
2026-04-15T13:01:21.165 [DEBUG] [Thread-19339] [transport.py] [_log()] server lang: <none>
2026-04-15T13:01:21.166 [DEBUG] [Thread-19339] [transport.py] [_log()] kex follows: False
2026-04-15T13:01:21.166 [DEBUG] [Thread-19339] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:01:21.166 [DEBUG] [Thread-19339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:01:21.166 [DEBUG] [Thread-19339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:01:21.166 [DEBUG] [Thread-19339] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:01:21.166 [DEBUG] [Thread-19339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:01:21.166 [DEBUG] [Thread-19339] [transport.py] [_log()] Compression: none
2026-04-15T13:01:21.166 [DEBUG] [Thread-19339] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:01:21.183 [DEBUG] [Thread-19339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:01:21.183 [DEBUG] [Thread-19339] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:01:21.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:01:21.184 [DEBUG] [Thread-19339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:01:21.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:01:21.185 [DEBUG] [Thread-19339] [transport.py] [_log()] userauth is OK
2026-04-15T13:01:21.185 [DEBUG] [Thread-19339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:01:21.185 [DEBUG] [Thread-19339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:01:21.185 [DEBUG] [Thread-19339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:01:21.186 [DEBUG] [Thread-19339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:01:21.212 [INFO] [Thread-19339] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:01:21.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:01:22.003 [DEBUG] [Thread-19339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:01:22.003 [DEBUG] [Thread-19339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:01:22.004 [DEBUG] [Thread-19339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:01:22.044 [DEBUG] [Thread-19339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:01:22.044 [DEBUG] [Thread-19339] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:01:22.047 [DEBUG] [Thread-19339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:01:22.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:01:22.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:01:22.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:01:22.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:01:22.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:01:22.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:01:22.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:01:22.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:01:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:01:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.458819 -999.00  +13.30  20.63     69   +7.80 1 2 1 1 1   888    0 5.79 14.29 NA 18.5 20.6 307.6 24.6 20.3 -18.9 19.2 -18.5 18.9 -16.6 20.1 -15.7
2026-04-15T13:01:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:01:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:01:22.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.458819
2026-04-15T13:01:22.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:01:22.071 [DEBUG] [Thread-19339] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:01:22.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:01:22.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:01:22.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:01:22.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:01:22.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:00:50', tmtdew=7.86224, humidity=59.0754, cloud=0.0, wind=24.2762, temperature=14.1475, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:00:41.962', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:01:22.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:01:22.335 [DEBUG] [Thread-19342] [transport.py] [_log()] starting thread (client mode): 0xee905150
2026-04-15T13:01:22.335 [DEBUG] [Thread-19342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:01:22.350 [DEBUG] [Thread-19342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:01:22.350 [INFO] [Thread-19342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:01:22.358 [DEBUG] [Thread-19342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:01:22.358 [DEBUG] [Thread-19342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:01:22.358 [DEBUG] [Thread-19342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:01:22.358 [DEBUG] [Thread-19342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:01:22.358 [DEBUG] [Thread-19342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:01:22.358 [DEBUG] [Thread-19342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:01:22.358 [DEBUG] [Thread-19342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:01:22.358 [DEBUG] [Thread-19342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:01:22.358 [DEBUG] [Thread-19342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:01:22.358 [DEBUG] [Thread-19342] [transport.py] [_log()] client lang: <none>
2026-04-15T13:01:22.358 [DEBUG] [Thread-19342] [transport.py] [_log()] server lang: <none>
2026-04-15T13:01:22.359 [DEBUG] [Thread-19342] [transport.py] [_log()] kex follows: False
2026-04-15T13:01:22.359 [DEBUG] [Thread-19342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:01:22.359 [DEBUG] [Thread-19342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:01:22.359 [DEBUG] [Thread-19342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:01:22.359 [DEBUG] [Thread-19342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:01:22.359 [DEBUG] [Thread-19342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:01:22.359 [DEBUG] [Thread-19342] [transport.py] [_log()] Compression: none
2026-04-15T13:01:22.359 [DEBUG] [Thread-19342] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:01:22.415 [DEBUG] [Thread-19342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:01:22.415 [DEBUG] [Thread-19342] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:01:22.415 [DEBUG] [Thread-19342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:01:22.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:01:22.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:01:22.471 [DEBUG] [Thread-19342] [transport.py] [_log()] userauth is OK
2026-04-15T13:01:22.472 [DEBUG] [Thread-19342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:01:22.472 [DEBUG] [Thread-19342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:01:22.472 [DEBUG] [Thread-19342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:01:22.472 [DEBUG] [Thread-19342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:01:22.497 [INFO] [Thread-19342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:01:22.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:01:22.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:01:23.311 [DEBUG] [Thread-19342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:01:23.311 [DEBUG] [Thread-19342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:01:23.359 [DEBUG] [Thread-19342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:01:23.359 [DEBUG] [Thread-19342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:01:23.367 [DEBUG] [Thread-19342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:01:23.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:01:23.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')
2026-04-15T13:01:23.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
2026-04-15T13:01:23.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:01:23.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:01:23.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:01:23.408 [DEBUG] [Thread-19342] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:01:27.705 [DEBUG] [Thread-19344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:01:42.752 [DEBUG] [Thread-19345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:01:51.129 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:01:51.130 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:01:53.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:01:53.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:01:53.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
2026-04-15T13:01:54.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 1, 25), 6.95307, 62.5515, 0.0, 20.362, 13.274, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:01:54.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:01:25
2026-04-15T13:01:55.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:01:55.544 [DEBUG] [Thread-19346] [transport.py] [_log()] starting thread (client mode): 0xf13ca620
2026-04-15T13:01:55.544 [DEBUG] [Thread-19346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:01:55.564 [DEBUG] [Thread-19346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:01:55.564 [INFO] [Thread-19346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:01:55.567 [DEBUG] [Thread-19346] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:01:55.567 [DEBUG] [Thread-19346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:01:55.568 [DEBUG] [Thread-19346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:01:55.568 [DEBUG] [Thread-19346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:01:55.568 [DEBUG] [Thread-19346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:01:55.568 [DEBUG] [Thread-19346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:01:55.568 [DEBUG] [Thread-19346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:01:55.568 [DEBUG] [Thread-19346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:01:55.568 [DEBUG] [Thread-19346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:01:55.568 [DEBUG] [Thread-19346] [transport.py] [_log()] client lang: <none>
2026-04-15T13:01:55.568 [DEBUG] [Thread-19346] [transport.py] [_log()] server lang: <none>
2026-04-15T13:01:55.568 [DEBUG] [Thread-19346] [transport.py] [_log()] kex follows: False
2026-04-15T13:01:55.568 [DEBUG] [Thread-19346] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:01:55.568 [DEBUG] [Thread-19346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:01:55.569 [DEBUG] [Thread-19346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:01:55.569 [DEBUG] [Thread-19346] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:01:55.569 [DEBUG] [Thread-19346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:01:55.569 [DEBUG] [Thread-19346] [transport.py] [_log()] Compression: none
2026-04-15T13:01:55.569 [DEBUG] [Thread-19346] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:01:55.586 [DEBUG] [Thread-19346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:01:55.586 [DEBUG] [Thread-19346] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:01:55.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:01:55.587 [DEBUG] [Thread-19346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:01:55.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:01:55.588 [DEBUG] [Thread-19346] [transport.py] [_log()] userauth is OK
2026-04-15T13:01:55.589 [DEBUG] [Thread-19346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:01:55.589 [DEBUG] [Thread-19346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:01:55.589 [DEBUG] [Thread-19346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:01:55.589 [DEBUG] [Thread-19346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:01:55.625 [INFO] [Thread-19346] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:01:55.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:01:56.436 [DEBUG] [Thread-19346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:01:56.436 [DEBUG] [Thread-19346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:01:56.436 [DEBUG] [Thread-19346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:01:56.477 [DEBUG] [Thread-19346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:01:56.477 [DEBUG] [Thread-19346] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:01:56.480 [DEBUG] [Thread-19346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:01:56.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:01:56.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:01:56.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:01:56.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:01:56.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:01:56.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:01:56.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:01:56.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:01:56.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:01:56.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.459166 -999.00  +13.00  21.31     69   +7.60 1 2 1 1 1   888    0 5.72 10.06 ----- 18.4 21.3 309.4 28.8 20.1 -18.4 19.1 -18.5 18.8 -15.3 20.0 -15.0
2026-04-15T13:01:56.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:01:56.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:01:56.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.459166
2026-04-15T13:01:56.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:01:56.504 [DEBUG] [Thread-19346] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:01:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:01:56.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:01:56.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:01:56.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:01:56.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:01:25', tmtdew=6.95307, humidity=62.5515, cloud=0.0, wind=20.362, temperature=13.274, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:01:11.942', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:01:56.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:01:56.762 [DEBUG] [Thread-19349] [transport.py] [_log()] starting thread (client mode): 0xf13c98a0
2026-04-15T13:01:56.762 [DEBUG] [Thread-19349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:01:56.780 [DEBUG] [Thread-19349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:01:56.780 [INFO] [Thread-19349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:01:56.787 [DEBUG] [Thread-19349] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:01:56.787 [DEBUG] [Thread-19349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:01:56.788 [DEBUG] [Thread-19349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:01:56.788 [DEBUG] [Thread-19349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:01:56.788 [DEBUG] [Thread-19349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:01:56.788 [DEBUG] [Thread-19349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:01:56.788 [DEBUG] [Thread-19349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:01:56.788 [DEBUG] [Thread-19349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:01:56.788 [DEBUG] [Thread-19349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:01:56.788 [DEBUG] [Thread-19349] [transport.py] [_log()] client lang: <none>
2026-04-15T13:01:56.788 [DEBUG] [Thread-19349] [transport.py] [_log()] server lang: <none>
2026-04-15T13:01:56.788 [DEBUG] [Thread-19349] [transport.py] [_log()] kex follows: False
2026-04-15T13:01:56.788 [DEBUG] [Thread-19349] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:01:56.788 [DEBUG] [Thread-19349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:01:56.789 [DEBUG] [Thread-19349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:01:56.789 [DEBUG] [Thread-19349] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:01:56.789 [DEBUG] [Thread-19349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:01:56.789 [DEBUG] [Thread-19349] [transport.py] [_log()] Compression: none
2026-04-15T13:01:56.789 [DEBUG] [Thread-19349] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:01:56.847 [DEBUG] [Thread-19349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:01:56.847 [DEBUG] [Thread-19349] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:01:56.847 [DEBUG] [Thread-19349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:01:56.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:01:56.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:01:56.903 [DEBUG] [Thread-19349] [transport.py] [_log()] userauth is OK
2026-04-15T13:01:56.904 [DEBUG] [Thread-19349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:01:56.904 [DEBUG] [Thread-19349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:01:56.904 [DEBUG] [Thread-19349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:01:56.904 [DEBUG] [Thread-19349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:01:56.931 [INFO] [Thread-19349] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:01:56.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:01:56.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:01:57.769 [DEBUG] [Thread-19349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:01:57.769 [DEBUG] [Thread-19349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:01:57.782 [DEBUG] [Thread-19351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:01:57.818 [DEBUG] [Thread-19349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:01:57.818 [DEBUG] [Thread-19349] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:01:57.827 [DEBUG] [Thread-19349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:01:57.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:01:57.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')
2026-04-15T13:01:57.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
2026-04-15T13:01:57.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:01:57.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:01:57.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:01:57.866 [DEBUG] [Thread-19349] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:02:12.821 [DEBUG] [Thread-19352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:02:19.406 [DEBUG] [Thread-19353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:02:27.853 [DEBUG] [Thread-19354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:02:27.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:02:27.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:02:27.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:02:29.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 2, 1), 7.1, 62.3857, 0.0, 16.5334, 13.74, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:02:29.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:02:01
2026-04-15T13:02:29.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:02:29.974 [DEBUG] [Thread-19355] [transport.py] [_log()] starting thread (client mode): 0xee9028f0
2026-04-15T13:02:29.974 [DEBUG] [Thread-19355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:02:29.994 [DEBUG] [Thread-19355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:02:29.994 [INFO] [Thread-19355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:02:29.997 [DEBUG] [Thread-19355] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:02:29.997 [DEBUG] [Thread-19355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:02:29.997 [DEBUG] [Thread-19355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:02:29.997 [DEBUG] [Thread-19355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:02:29.997 [DEBUG] [Thread-19355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:02:29.997 [DEBUG] [Thread-19355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:02:29.997 [DEBUG] [Thread-19355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:02:29.998 [DEBUG] [Thread-19355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:02:29.998 [DEBUG] [Thread-19355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:02:29.998 [DEBUG] [Thread-19355] [transport.py] [_log()] client lang: <none>
2026-04-15T13:02:29.998 [DEBUG] [Thread-19355] [transport.py] [_log()] server lang: <none>
2026-04-15T13:02:29.998 [DEBUG] [Thread-19355] [transport.py] [_log()] kex follows: False
2026-04-15T13:02:29.998 [DEBUG] [Thread-19355] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:02:29.998 [DEBUG] [Thread-19355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:02:29.998 [DEBUG] [Thread-19355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:02:29.998 [DEBUG] [Thread-19355] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:02:29.998 [DEBUG] [Thread-19355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:02:29.999 [DEBUG] [Thread-19355] [transport.py] [_log()] Compression: none
2026-04-15T13:02:29.999 [DEBUG] [Thread-19355] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:02:30.015 [DEBUG] [Thread-19355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:02:30.016 [DEBUG] [Thread-19355] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:02:30.016 [DEBUG] [Thread-19355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:02:30.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:02:30.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:02:30.018 [DEBUG] [Thread-19355] [transport.py] [_log()] userauth is OK
2026-04-15T13:02:30.018 [DEBUG] [Thread-19355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:02:30.018 [DEBUG] [Thread-19355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:02:30.018 [DEBUG] [Thread-19355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:02:30.018 [DEBUG] [Thread-19355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:02:30.043 [INFO] [Thread-19355] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:02:30.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:02:30.838 [DEBUG] [Thread-19355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:02:30.839 [DEBUG] [Thread-19355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:02:30.839 [DEBUG] [Thread-19355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:02:30.879 [DEBUG] [Thread-19355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:02:30.879 [DEBUG] [Thread-19355] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:02:30.881 [DEBUG] [Thread-19355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:02:30.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:02:30.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:02:30.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:02:30.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:02:30.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:02:30.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:02:30.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:02:30.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:02:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:02:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.459513 -999.00  +13.40  17.70     70   +8.20 1 2 1 1 1   888    0 5.63 5.34 ----- 22.1 17.7 321.4 23.4 20.1 -19.5 19.1 -16.9 18.9 -12.9 20.0 -14.5
2026-04-15T13:02:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:02:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:02:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.459513
2026-04-15T13:02:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:02:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:02:30.905 [DEBUG] [Thread-19355] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:02:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:02:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:02:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:02:30.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:02:01', tmtdew=7.1, humidity=62.3857, cloud=0.0, wind=16.5334, temperature=13.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:01:41.923', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:02:31.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:02:31.140 [DEBUG] [Thread-19358] [transport.py] [_log()] starting thread (client mode): 0xee900e80
2026-04-15T13:02:31.140 [DEBUG] [Thread-19358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:02:31.154 [DEBUG] [Thread-19358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:02:31.154 [INFO] [Thread-19358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:02:31.161 [DEBUG] [Thread-19358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:02:31.162 [DEBUG] [Thread-19358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:02:31.162 [DEBUG] [Thread-19358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:02:31.162 [DEBUG] [Thread-19358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:02:31.162 [DEBUG] [Thread-19358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:02:31.162 [DEBUG] [Thread-19358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:02:31.162 [DEBUG] [Thread-19358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:02:31.162 [DEBUG] [Thread-19358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:02:31.162 [DEBUG] [Thread-19358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:02:31.162 [DEBUG] [Thread-19358] [transport.py] [_log()] client lang: <none>
2026-04-15T13:02:31.162 [DEBUG] [Thread-19358] [transport.py] [_log()] server lang: <none>
2026-04-15T13:02:31.162 [DEBUG] [Thread-19358] [transport.py] [_log()] kex follows: False
2026-04-15T13:02:31.162 [DEBUG] [Thread-19358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:02:31.163 [DEBUG] [Thread-19358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:02:31.163 [DEBUG] [Thread-19358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:02:31.163 [DEBUG] [Thread-19358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:02:31.163 [DEBUG] [Thread-19358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:02:31.163 [DEBUG] [Thread-19358] [transport.py] [_log()] Compression: none
2026-04-15T13:02:31.163 [DEBUG] [Thread-19358] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:02:31.222 [DEBUG] [Thread-19358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:02:31.223 [DEBUG] [Thread-19358] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:02:31.223 [DEBUG] [Thread-19358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:02:31.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:02:31.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:02:31.279 [DEBUG] [Thread-19358] [transport.py] [_log()] userauth is OK
2026-04-15T13:02:31.279 [DEBUG] [Thread-19358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:02:31.280 [DEBUG] [Thread-19358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:02:31.280 [DEBUG] [Thread-19358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:02:31.280 [DEBUG] [Thread-19358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:02:31.305 [INFO] [Thread-19358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:02:31.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:02:31.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:02:32.130 [DEBUG] [Thread-19358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:02:32.130 [DEBUG] [Thread-19358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:02:32.178 [DEBUG] [Thread-19358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:02:32.178 [DEBUG] [Thread-19358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:02:32.187 [DEBUG] [Thread-19358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:02:32.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:02:32.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')
2026-04-15T13:02:32.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T13:02:32.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:02:32.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:02:32.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:02:32.222 [DEBUG] [Thread-19358] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:02:42.887 [DEBUG] [Thread-19360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:02:51.271 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:02:51.273 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:02:57.931 [DEBUG] [Thread-19361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:03:02.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:03:02.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:03:02.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
2026-04-15T13:03:03.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 2, 37), 7.77725, 59.4063, 0.0, 18.4198, 14.0805, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:03:03.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:02:37
2026-04-15T13:03:03.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:03:04.321 [DEBUG] [Thread-19362] [transport.py] [_log()] starting thread (client mode): 0xf1366f80
2026-04-15T13:03:04.321 [DEBUG] [Thread-19362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:03:04.340 [DEBUG] [Thread-19362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:03:04.341 [INFO] [Thread-19362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:03:04.344 [DEBUG] [Thread-19362] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:03:04.344 [DEBUG] [Thread-19362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:03:04.344 [DEBUG] [Thread-19362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:03:04.344 [DEBUG] [Thread-19362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:03:04.344 [DEBUG] [Thread-19362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:03:04.344 [DEBUG] [Thread-19362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:03:04.344 [DEBUG] [Thread-19362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:03:04.344 [DEBUG] [Thread-19362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:03:04.345 [DEBUG] [Thread-19362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:03:04.345 [DEBUG] [Thread-19362] [transport.py] [_log()] client lang: <none>
2026-04-15T13:03:04.345 [DEBUG] [Thread-19362] [transport.py] [_log()] server lang: <none>
2026-04-15T13:03:04.345 [DEBUG] [Thread-19362] [transport.py] [_log()] kex follows: False
2026-04-15T13:03:04.345 [DEBUG] [Thread-19362] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:03:04.345 [DEBUG] [Thread-19362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:03:04.345 [DEBUG] [Thread-19362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:03:04.345 [DEBUG] [Thread-19362] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:03:04.345 [DEBUG] [Thread-19362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:03:04.345 [DEBUG] [Thread-19362] [transport.py] [_log()] Compression: none
2026-04-15T13:03:04.345 [DEBUG] [Thread-19362] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:03:04.361 [DEBUG] [Thread-19362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:03:04.361 [DEBUG] [Thread-19362] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:03:04.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:03:04.362 [DEBUG] [Thread-19362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:03:04.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:03:04.363 [DEBUG] [Thread-19362] [transport.py] [_log()] userauth is OK
2026-04-15T13:03:04.363 [DEBUG] [Thread-19362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:03:04.363 [DEBUG] [Thread-19362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:03:04.363 [DEBUG] [Thread-19362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:03:04.363 [DEBUG] [Thread-19362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:03:04.394 [INFO] [Thread-19362] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:03:04.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:03:05.208 [DEBUG] [Thread-19362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:03:05.208 [DEBUG] [Thread-19362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:03:05.209 [DEBUG] [Thread-19362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:03:05.249 [DEBUG] [Thread-19362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:03:05.249 [DEBUG] [Thread-19362] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:03:05.252 [DEBUG] [Thread-19362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:03:05.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:03:05.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:03:05.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:03:05.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:03:05.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:03:05.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:03:05.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:03:05.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:03:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:03:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.460207 -999.00  +13.30  15.31     70   +7.90 1 2 1 1 1   888    0 5.34 1.98 ----- 11.6 15.3 316.2 19.8 20.5 -17.4 19.3 -17.0 19.2 -14.4 20.4 -14.1
2026-04-15T13:03:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:03:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:03:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.460207
2026-04-15T13:03:05.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:03:05.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:03:05.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:03:05.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:03:05.278 [DEBUG] [Thread-19362] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:03:05.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:03:05.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:02:37', tmtdew=7.77725, humidity=59.4063, cloud=0.0, wind=18.4198, temperature=14.0805, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:02:41.885', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:03:05.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:03:05.540 [DEBUG] [Thread-19365] [transport.py] [_log()] starting thread (client mode): 0xf1366d70
2026-04-15T13:03:05.540 [DEBUG] [Thread-19365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:03:05.554 [DEBUG] [Thread-19365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:03:05.554 [INFO] [Thread-19365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:03:05.562 [DEBUG] [Thread-19365] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:03:05.562 [DEBUG] [Thread-19365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:03:05.562 [DEBUG] [Thread-19365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:03:05.562 [DEBUG] [Thread-19365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:03:05.562 [DEBUG] [Thread-19365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:03:05.562 [DEBUG] [Thread-19365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:03:05.562 [DEBUG] [Thread-19365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:03:05.562 [DEBUG] [Thread-19365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:03:05.562 [DEBUG] [Thread-19365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:03:05.563 [DEBUG] [Thread-19365] [transport.py] [_log()] client lang: <none>
2026-04-15T13:03:05.563 [DEBUG] [Thread-19365] [transport.py] [_log()] server lang: <none>
2026-04-15T13:03:05.563 [DEBUG] [Thread-19365] [transport.py] [_log()] kex follows: False
2026-04-15T13:03:05.563 [DEBUG] [Thread-19365] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:03:05.563 [DEBUG] [Thread-19365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:03:05.563 [DEBUG] [Thread-19365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:03:05.563 [DEBUG] [Thread-19365] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:03:05.563 [DEBUG] [Thread-19365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:03:05.563 [DEBUG] [Thread-19365] [transport.py] [_log()] Compression: none
2026-04-15T13:03:05.563 [DEBUG] [Thread-19365] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:03:05.619 [DEBUG] [Thread-19365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:03:05.619 [DEBUG] [Thread-19365] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:03:05.620 [DEBUG] [Thread-19365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:03:05.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:03:05.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:03:05.675 [DEBUG] [Thread-19365] [transport.py] [_log()] userauth is OK
2026-04-15T13:03:05.675 [DEBUG] [Thread-19365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:03:05.676 [DEBUG] [Thread-19365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:03:05.676 [DEBUG] [Thread-19365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:03:05.676 [DEBUG] [Thread-19365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:03:05.699 [INFO] [Thread-19365] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:03:05.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:03:05.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:03:06.591 [DEBUG] [Thread-19365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:03:06.592 [DEBUG] [Thread-19365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:03:06.639 [DEBUG] [Thread-19365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:03:06.639 [DEBUG] [Thread-19365] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:03:06.648 [DEBUG] [Thread-19365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:03:06.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:03:06.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')
2026-04-15T13:03:06.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
2026-04-15T13:03:06.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:03:06.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:03:06.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:03:06.688 [DEBUG] [Thread-19365] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:03:12.962 [DEBUG] [Thread-19367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:03:19.509 [DEBUG] [Thread-19368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:03:28.009 [DEBUG] [Thread-19369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:03:36.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:03:36.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:03:36.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
2026-04-15T13:03:38.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 3, 12), 7.08872, 62.3659, 0.0, 12.8113, 13.6724, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:03:38.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:03:12
2026-04-15T13:03:38.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:03:38.894 [DEBUG] [Thread-19370] [transport.py] [_log()] starting thread (client mode): 0xf13cbdc0
2026-04-15T13:03:38.894 [DEBUG] [Thread-19370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:03:38.913 [DEBUG] [Thread-19370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:03:38.914 [INFO] [Thread-19370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:03:38.917 [DEBUG] [Thread-19370] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:03:38.917 [DEBUG] [Thread-19370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:03:38.917 [DEBUG] [Thread-19370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:03:38.917 [DEBUG] [Thread-19370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:03:38.917 [DEBUG] [Thread-19370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:03:38.917 [DEBUG] [Thread-19370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:03:38.917 [DEBUG] [Thread-19370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:03:38.917 [DEBUG] [Thread-19370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:03:38.917 [DEBUG] [Thread-19370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:03:38.917 [DEBUG] [Thread-19370] [transport.py] [_log()] client lang: <none>
2026-04-15T13:03:38.918 [DEBUG] [Thread-19370] [transport.py] [_log()] server lang: <none>
2026-04-15T13:03:38.918 [DEBUG] [Thread-19370] [transport.py] [_log()] kex follows: False
2026-04-15T13:03:38.918 [DEBUG] [Thread-19370] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:03:38.918 [DEBUG] [Thread-19370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:03:38.918 [DEBUG] [Thread-19370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:03:38.918 [DEBUG] [Thread-19370] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:03:38.918 [DEBUG] [Thread-19370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:03:38.918 [DEBUG] [Thread-19370] [transport.py] [_log()] Compression: none
2026-04-15T13:03:38.918 [DEBUG] [Thread-19370] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:03:38.934 [DEBUG] [Thread-19370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:03:38.934 [DEBUG] [Thread-19370] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:03:38.935 [DEBUG] [Thread-19370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:03:38.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:03:38.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:03:38.936 [DEBUG] [Thread-19370] [transport.py] [_log()] userauth is OK
2026-04-15T13:03:38.936 [DEBUG] [Thread-19370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:03:38.936 [DEBUG] [Thread-19370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:03:38.936 [DEBUG] [Thread-19370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:03:38.936 [DEBUG] [Thread-19370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:03:38.952 [INFO] [Thread-19370] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:03:38.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:03:39.757 [DEBUG] [Thread-19370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:03:39.758 [DEBUG] [Thread-19370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:03:39.758 [DEBUG] [Thread-19370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:03:39.798 [DEBUG] [Thread-19370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:03:39.798 [DEBUG] [Thread-19370] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:03:39.801 [DEBUG] [Thread-19370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:03:39.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:03:39.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:03:39.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:03:39.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:03:39.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:03:39.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:03:39.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:03:39.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:03:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:03:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.460555 -999.00  +13.60  10.71     68   +7.90 1 2 1 1 1   888    0 5.38 -0.15 ----- 22.1 10.7 321.2 15.1 20.5 -20.0 19.3 -17.6 19.2 -14.6 20.4 -15.1
2026-04-15T13:03:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:03:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:03:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.460555
2026-04-15T13:03:39.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:03:39.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:03:39.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:03:39.825 [DEBUG] [Thread-19370] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:03:39.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:03:39.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:03:39.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:03:12', tmtdew=7.08872, humidity=62.3659, cloud=0.0, wind=12.8113, temperature=13.6724, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:03:11.952', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:03:40.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:03:40.090 [DEBUG] [Thread-19373] [transport.py] [_log()] starting thread (client mode): 0xf13659c0
2026-04-15T13:03:40.090 [DEBUG] [Thread-19373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:03:40.104 [DEBUG] [Thread-19373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:03:40.105 [INFO] [Thread-19373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:03:40.117 [DEBUG] [Thread-19373] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:03:40.117 [DEBUG] [Thread-19373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:03:40.117 [DEBUG] [Thread-19373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:03:40.117 [DEBUG] [Thread-19373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:03:40.117 [DEBUG] [Thread-19373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:03:40.117 [DEBUG] [Thread-19373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:03:40.117 [DEBUG] [Thread-19373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:03:40.118 [DEBUG] [Thread-19373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:03:40.118 [DEBUG] [Thread-19373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:03:40.118 [DEBUG] [Thread-19373] [transport.py] [_log()] client lang: <none>
2026-04-15T13:03:40.118 [DEBUG] [Thread-19373] [transport.py] [_log()] server lang: <none>
2026-04-15T13:03:40.118 [DEBUG] [Thread-19373] [transport.py] [_log()] kex follows: False
2026-04-15T13:03:40.118 [DEBUG] [Thread-19373] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:03:40.118 [DEBUG] [Thread-19373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:03:40.118 [DEBUG] [Thread-19373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:03:40.118 [DEBUG] [Thread-19373] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:03:40.118 [DEBUG] [Thread-19373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:03:40.118 [DEBUG] [Thread-19373] [transport.py] [_log()] Compression: none
2026-04-15T13:03:40.118 [DEBUG] [Thread-19373] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:03:40.174 [DEBUG] [Thread-19373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:03:40.175 [DEBUG] [Thread-19373] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:03:40.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:03:40.176 [DEBUG] [Thread-19373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:03:40.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:03:40.231 [DEBUG] [Thread-19373] [transport.py] [_log()] userauth is OK
2026-04-15T13:03:40.231 [DEBUG] [Thread-19373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:03:40.231 [DEBUG] [Thread-19373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:03:40.231 [DEBUG] [Thread-19373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:03:40.231 [DEBUG] [Thread-19373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:03:40.248 [INFO] [Thread-19373] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:03:40.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:03:40.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:03:41.055 [DEBUG] [Thread-19373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:03:41.055 [DEBUG] [Thread-19373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:03:41.106 [DEBUG] [Thread-19373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:03:41.107 [DEBUG] [Thread-19373] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:03:41.118 [DEBUG] [Thread-19373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:03:41.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:03:41.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')
2026-04-15T13:03:41.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
2026-04-15T13:03:41.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:03:41.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:03:41.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:03:41.163 [DEBUG] [Thread-19373] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:03:43.040 [DEBUG] [Thread-19375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:03:51.412 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:03:51.413 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:03:58.085 [DEBUG] [Thread-19376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:04:11.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:04:11.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:04:11.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
2026-04-15T13:04:12.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 3, 48), 7.94084, 58.9417, 0.0, 21.2069, 14.9088, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:04:12.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:03:48
2026-04-15T13:04:12.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:04:13.115 [DEBUG] [Thread-19377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:04:13.330 [DEBUG] [Thread-19378] [transport.py] [_log()] starting thread (client mode): 0xee98d7e0
2026-04-15T13:04:13.330 [DEBUG] [Thread-19378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:04:13.351 [DEBUG] [Thread-19378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:04:13.351 [INFO] [Thread-19378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:04:13.354 [DEBUG] [Thread-19378] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:04:13.354 [DEBUG] [Thread-19378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:04:13.354 [DEBUG] [Thread-19378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:04:13.354 [DEBUG] [Thread-19378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:04:13.355 [DEBUG] [Thread-19378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:04:13.355 [DEBUG] [Thread-19378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:04:13.355 [DEBUG] [Thread-19378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:04:13.355 [DEBUG] [Thread-19378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:04:13.355 [DEBUG] [Thread-19378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:04:13.355 [DEBUG] [Thread-19378] [transport.py] [_log()] client lang: <none>
2026-04-15T13:04:13.355 [DEBUG] [Thread-19378] [transport.py] [_log()] server lang: <none>
2026-04-15T13:04:13.355 [DEBUG] [Thread-19378] [transport.py] [_log()] kex follows: False
2026-04-15T13:04:13.355 [DEBUG] [Thread-19378] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:04:13.355 [DEBUG] [Thread-19378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:04:13.355 [DEBUG] [Thread-19378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:04:13.356 [DEBUG] [Thread-19378] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:04:13.356 [DEBUG] [Thread-19378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:04:13.356 [DEBUG] [Thread-19378] [transport.py] [_log()] Compression: none
2026-04-15T13:04:13.356 [DEBUG] [Thread-19378] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:04:13.372 [DEBUG] [Thread-19378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:04:13.373 [DEBUG] [Thread-19378] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:04:13.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:04:13.373 [DEBUG] [Thread-19378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:04:13.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:04:13.374 [DEBUG] [Thread-19378] [transport.py] [_log()] userauth is OK
2026-04-15T13:04:13.374 [DEBUG] [Thread-19378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:04:13.374 [DEBUG] [Thread-19378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:04:13.374 [DEBUG] [Thread-19378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:04:13.374 [DEBUG] [Thread-19378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:04:13.392 [INFO] [Thread-19378] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:04:13.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:04:14.133 [DEBUG] [Thread-19378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:04:14.133 [DEBUG] [Thread-19378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:04:14.134 [DEBUG] [Thread-19378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:04:14.174 [DEBUG] [Thread-19378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:04:14.174 [DEBUG] [Thread-19378] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:04:14.176 [DEBUG] [Thread-19378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:04:14.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:04:14.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:04:14.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:04:14.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:04:14.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:04:14.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:04:14.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:04:14.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:04:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:04:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.460902 -999.00  +13.30  18.17     68   +7.50 1 2 1 1 1   888    0 5.31 -0.34 ----- 22.1 18.2 317.8 26.9 20.4 -21.5 19.1 -20.0 19.0 -17.4 20.2 -18.5
2026-04-15T13:04:14.198 [DEBUG] [Thread-19378] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:04:14.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:04:14.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:04:14.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.460902
2026-04-15T13:04:14.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:04:14.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:04:14.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:04:14.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:04:14.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:04:14.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:03:48', tmtdew=7.94084, humidity=58.9417, cloud=0.0, wind=21.2069, temperature=14.9088, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:03:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:04:14.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:04:14.459 [DEBUG] [Thread-19381] [transport.py] [_log()] starting thread (client mode): 0xee9e76d0
2026-04-15T13:04:14.459 [DEBUG] [Thread-19381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:04:14.473 [DEBUG] [Thread-19381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:04:14.473 [INFO] [Thread-19381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] client lang: <none>
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] server lang: <none>
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] kex follows: False
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:04:14.481 [DEBUG] [Thread-19381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:04:14.482 [DEBUG] [Thread-19381] [transport.py] [_log()] Compression: none
2026-04-15T13:04:14.482 [DEBUG] [Thread-19381] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:04:14.538 [DEBUG] [Thread-19381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:04:14.539 [DEBUG] [Thread-19381] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:04:14.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:04:14.540 [DEBUG] [Thread-19381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:04:14.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:04:14.595 [DEBUG] [Thread-19381] [transport.py] [_log()] userauth is OK
2026-04-15T13:04:14.595 [DEBUG] [Thread-19381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:04:14.596 [DEBUG] [Thread-19381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:04:14.596 [DEBUG] [Thread-19381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:04:14.596 [DEBUG] [Thread-19381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:04:14.622 [INFO] [Thread-19381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:04:14.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:04:14.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:04:15.443 [DEBUG] [Thread-19381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:04:15.443 [DEBUG] [Thread-19381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:04:15.491 [DEBUG] [Thread-19381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:04:15.491 [DEBUG] [Thread-19381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:04:15.500 [DEBUG] [Thread-19381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:04:15.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:04:15.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')
2026-04-15T13:04:15.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
2026-04-15T13:04:15.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:04:15.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:04:15.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:04:15.534 [DEBUG] [Thread-19381] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:04:19.587 [DEBUG] [Thread-19383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:04:28.145 [DEBUG] [Thread-19384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:04:43.188 [DEBUG] [Thread-19385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:04:45.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:04:45.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:04:45.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
2026-04-15T13:04:46.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 4, 23), 7.1826, 61.62, 0.0, 12.6166, 14.0878, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:04:46.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:04:23
2026-04-15T13:04:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:04:47.652 [DEBUG] [Thread-19386] [transport.py] [_log()] starting thread (client mode): 0xf13cb8b0
2026-04-15T13:04:47.652 [DEBUG] [Thread-19386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:04:47.673 [DEBUG] [Thread-19386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:04:47.673 [INFO] [Thread-19386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:04:47.677 [DEBUG] [Thread-19386] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:04:47.677 [DEBUG] [Thread-19386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:04:47.677 [DEBUG] [Thread-19386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:04:47.677 [DEBUG] [Thread-19386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:04:47.677 [DEBUG] [Thread-19386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:04:47.677 [DEBUG] [Thread-19386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:04:47.677 [DEBUG] [Thread-19386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:04:47.677 [DEBUG] [Thread-19386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:04:47.677 [DEBUG] [Thread-19386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:04:47.678 [DEBUG] [Thread-19386] [transport.py] [_log()] client lang: <none>
2026-04-15T13:04:47.678 [DEBUG] [Thread-19386] [transport.py] [_log()] server lang: <none>
2026-04-15T13:04:47.678 [DEBUG] [Thread-19386] [transport.py] [_log()] kex follows: False
2026-04-15T13:04:47.678 [DEBUG] [Thread-19386] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:04:47.678 [DEBUG] [Thread-19386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:04:47.678 [DEBUG] [Thread-19386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:04:47.678 [DEBUG] [Thread-19386] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:04:47.678 [DEBUG] [Thread-19386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:04:47.678 [DEBUG] [Thread-19386] [transport.py] [_log()] Compression: none
2026-04-15T13:04:47.678 [DEBUG] [Thread-19386] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:04:47.695 [DEBUG] [Thread-19386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:04:47.695 [DEBUG] [Thread-19386] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:04:47.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:04:47.696 [DEBUG] [Thread-19386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:04:47.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:04:47.697 [DEBUG] [Thread-19386] [transport.py] [_log()] userauth is OK
2026-04-15T13:04:47.697 [DEBUG] [Thread-19386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:04:47.697 [DEBUG] [Thread-19386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:04:47.698 [DEBUG] [Thread-19386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:04:47.698 [DEBUG] [Thread-19386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:04:47.717 [INFO] [Thread-19386] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:04:47.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:04:48.527 [DEBUG] [Thread-19386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:04:48.527 [DEBUG] [Thread-19386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:04:48.528 [DEBUG] [Thread-19386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:04:48.568 [DEBUG] [Thread-19386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:04:48.568 [DEBUG] [Thread-19386] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:04:48.571 [DEBUG] [Thread-19386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:04:48.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:04:48.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:04:48.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:04:48.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:04:48.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:04:48.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:04:48.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:04:48.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:04:48.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:04:48.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.461249 -999.00  +13.10  21.41     71   +8.00 1 2 1 1 1   888    0 5.41 -2.51 ----- 20.7 21.4 315.0 24.7 20.0 -21.0 19.0 -19.1 18.9 -15.7 19.9 -16.9
2026-04-15T13:04:48.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:04:48.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:04:48.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.461249
2026-04-15T13:04:48.595 [DEBUG] [Thread-19386] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:04:48.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:04:48.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:04:48.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:04:48.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:04:48.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:04:48.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:04:23', tmtdew=7.1826, humidity=61.62, cloud=0.0, wind=12.6166, temperature=14.0878, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:04:11.914', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:04:48.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:04:48.835 [DEBUG] [Thread-19389] [transport.py] [_log()] starting thread (client mode): 0xf1337940
2026-04-15T13:04:48.835 [DEBUG] [Thread-19389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:04:48.849 [DEBUG] [Thread-19389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:04:48.850 [INFO] [Thread-19389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:04:48.857 [DEBUG] [Thread-19389] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:04:48.857 [DEBUG] [Thread-19389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:04:48.857 [DEBUG] [Thread-19389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:04:48.857 [DEBUG] [Thread-19389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:04:48.857 [DEBUG] [Thread-19389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:04:48.857 [DEBUG] [Thread-19389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:04:48.857 [DEBUG] [Thread-19389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:04:48.857 [DEBUG] [Thread-19389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:04:48.858 [DEBUG] [Thread-19389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:04:48.858 [DEBUG] [Thread-19389] [transport.py] [_log()] client lang: <none>
2026-04-15T13:04:48.858 [DEBUG] [Thread-19389] [transport.py] [_log()] server lang: <none>
2026-04-15T13:04:48.858 [DEBUG] [Thread-19389] [transport.py] [_log()] kex follows: False
2026-04-15T13:04:48.858 [DEBUG] [Thread-19389] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:04:48.858 [DEBUG] [Thread-19389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:04:48.858 [DEBUG] [Thread-19389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:04:48.858 [DEBUG] [Thread-19389] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:04:48.858 [DEBUG] [Thread-19389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:04:48.858 [DEBUG] [Thread-19389] [transport.py] [_log()] Compression: none
2026-04-15T13:04:48.858 [DEBUG] [Thread-19389] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:04:48.915 [DEBUG] [Thread-19389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:04:48.915 [DEBUG] [Thread-19389] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:04:48.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:04:48.916 [DEBUG] [Thread-19389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:04:48.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:04:48.972 [DEBUG] [Thread-19389] [transport.py] [_log()] userauth is OK
2026-04-15T13:04:48.972 [DEBUG] [Thread-19389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:04:48.972 [DEBUG] [Thread-19389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:04:48.972 [DEBUG] [Thread-19389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:04:48.972 [DEBUG] [Thread-19389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:04:48.999 [INFO] [Thread-19389] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:04:48.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:04:48.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:04:49.845 [DEBUG] [Thread-19389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:04:49.845 [DEBUG] [Thread-19389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:04:49.893 [DEBUG] [Thread-19389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:04:49.893 [DEBUG] [Thread-19389] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:04:49.902 [DEBUG] [Thread-19389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:04:49.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:04:49.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')
2026-04-15T13:04:49.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
2026-04-15T13:04:49.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:04:49.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:04:49.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:04:49.937 [DEBUG] [Thread-19389] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:04:51.553 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:04:51.555 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:04:58.220 [DEBUG] [Thread-19391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:05:13.266 [DEBUG] [Thread-19392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:05:19.661 [DEBUG] [Thread-19393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:05:19.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:05:19.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:05:19.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
2026-04-15T13:05:21.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 4, 59), 7.42563, 61.0727, 0.0, 17.9798, 13.9034, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:05:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:04:59
2026-04-15T13:05:21.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:05:22.139 [DEBUG] [Thread-19394] [transport.py] [_log()] starting thread (client mode): 0xee9032e0
2026-04-15T13:05:22.139 [DEBUG] [Thread-19394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:05:22.158 [DEBUG] [Thread-19394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:05:22.158 [INFO] [Thread-19394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:05:22.161 [DEBUG] [Thread-19394] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:05:22.161 [DEBUG] [Thread-19394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:05:22.161 [DEBUG] [Thread-19394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:05:22.161 [DEBUG] [Thread-19394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:05:22.162 [DEBUG] [Thread-19394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:05:22.162 [DEBUG] [Thread-19394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:05:22.162 [DEBUG] [Thread-19394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:05:22.162 [DEBUG] [Thread-19394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:05:22.162 [DEBUG] [Thread-19394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:05:22.162 [DEBUG] [Thread-19394] [transport.py] [_log()] client lang: <none>
2026-04-15T13:05:22.162 [DEBUG] [Thread-19394] [transport.py] [_log()] server lang: <none>
2026-04-15T13:05:22.162 [DEBUG] [Thread-19394] [transport.py] [_log()] kex follows: False
2026-04-15T13:05:22.162 [DEBUG] [Thread-19394] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:05:22.162 [DEBUG] [Thread-19394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:05:22.162 [DEBUG] [Thread-19394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:05:22.162 [DEBUG] [Thread-19394] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:05:22.162 [DEBUG] [Thread-19394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:05:22.162 [DEBUG] [Thread-19394] [transport.py] [_log()] Compression: none
2026-04-15T13:05:22.162 [DEBUG] [Thread-19394] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:05:22.177 [DEBUG] [Thread-19394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:05:22.177 [DEBUG] [Thread-19394] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:05:22.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:05:22.178 [DEBUG] [Thread-19394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:05:22.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:05:22.179 [DEBUG] [Thread-19394] [transport.py] [_log()] userauth is OK
2026-04-15T13:05:22.179 [DEBUG] [Thread-19394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:05:22.179 [DEBUG] [Thread-19394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:05:22.179 [DEBUG] [Thread-19394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:05:22.179 [DEBUG] [Thread-19394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:05:22.197 [INFO] [Thread-19394] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:05:22.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:05:25.962 [DEBUG] [Thread-19394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:05:25.962 [DEBUG] [Thread-19394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:05:25.963 [DEBUG] [Thread-19394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:05:26.003 [DEBUG] [Thread-19394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:05:26.003 [DEBUG] [Thread-19394] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:05:26.005 [DEBUG] [Thread-19394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:05:26.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:05:26.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:05:26.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:05:26.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:05:26.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:05:26.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:05:26.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:05:26.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:05:26.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:05:26.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.461596 -999.00  +13.10  24.26     70   +7.80 1 2 1 1 1   888    0 5.20 -6.25 ----- 24.4 24.3 298.6 28.6 19.9 -20.9 18.8 -19.5 18.6 -18.6 19.8 -18.4
2026-04-15T13:05:26.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:05:26.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:05:26.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.461596
2026-04-15T13:05:26.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:05:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:05:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:05:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:05:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:05:26.101 [DEBUG] [Thread-19394] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:05:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:04:59', tmtdew=7.42563, humidity=61.0727, cloud=0.0, wind=17.9798, temperature=13.9034, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:04:41.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:05:26.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:05:26.368 [DEBUG] [Thread-19397] [transport.py] [_log()] starting thread (client mode): 0xee98ed70
2026-04-15T13:05:26.369 [DEBUG] [Thread-19397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:05:26.383 [DEBUG] [Thread-19397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:05:26.384 [INFO] [Thread-19397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:05:26.392 [DEBUG] [Thread-19397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:05:26.392 [DEBUG] [Thread-19397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:05:26.392 [DEBUG] [Thread-19397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:05:26.392 [DEBUG] [Thread-19397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:05:26.392 [DEBUG] [Thread-19397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:05:26.392 [DEBUG] [Thread-19397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:05:26.392 [DEBUG] [Thread-19397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:05:26.392 [DEBUG] [Thread-19397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:05:26.392 [DEBUG] [Thread-19397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:05:26.392 [DEBUG] [Thread-19397] [transport.py] [_log()] client lang: <none>
2026-04-15T13:05:26.392 [DEBUG] [Thread-19397] [transport.py] [_log()] server lang: <none>
2026-04-15T13:05:26.392 [DEBUG] [Thread-19397] [transport.py] [_log()] kex follows: False
2026-04-15T13:05:26.392 [DEBUG] [Thread-19397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:05:26.393 [DEBUG] [Thread-19397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:05:26.393 [DEBUG] [Thread-19397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:05:26.393 [DEBUG] [Thread-19397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:05:26.393 [DEBUG] [Thread-19397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:05:26.393 [DEBUG] [Thread-19397] [transport.py] [_log()] Compression: none
2026-04-15T13:05:26.393 [DEBUG] [Thread-19397] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:05:26.450 [DEBUG] [Thread-19397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:05:26.451 [DEBUG] [Thread-19397] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:05:26.451 [DEBUG] [Thread-19397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:05:26.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:05:26.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:05:26.508 [DEBUG] [Thread-19397] [transport.py] [_log()] userauth is OK
2026-04-15T13:05:26.508 [DEBUG] [Thread-19397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:05:26.509 [DEBUG] [Thread-19397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:05:26.509 [DEBUG] [Thread-19397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:05:26.509 [DEBUG] [Thread-19397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:05:26.532 [INFO] [Thread-19397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:05:26.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:05:26.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:05:27.423 [DEBUG] [Thread-19397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:05:27.423 [DEBUG] [Thread-19397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:05:27.471 [DEBUG] [Thread-19397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:05:27.472 [DEBUG] [Thread-19397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:05:27.481 [DEBUG] [Thread-19397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:05:27.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:05:27.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')
2026-04-15T13:05:27.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
2026-04-15T13:05:27.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:05:27.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:05:27.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:05:27.516 [DEBUG] [Thread-19397] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:05:28.300 [DEBUG] [Thread-19399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:05:43.345 [DEBUG] [Thread-19400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:05:51.702 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:05:51.703 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:05:57.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:05:57.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:05:57.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
2026-04-15T13:05:58.377 [DEBUG] [Thread-19401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:05:58.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 5, 34), 7.81993, 59.5038, 0.0, 28.3334, 15.2055, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:05:58.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:05:34
2026-04-15T13:05:59.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:05:59.695 [DEBUG] [Thread-19402] [transport.py] [_log()] starting thread (client mode): 0xee900070
2026-04-15T13:05:59.695 [DEBUG] [Thread-19402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:05:59.715 [DEBUG] [Thread-19402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:05:59.716 [INFO] [Thread-19402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:05:59.719 [DEBUG] [Thread-19402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:05:59.719 [DEBUG] [Thread-19402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:05:59.719 [DEBUG] [Thread-19402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:05:59.719 [DEBUG] [Thread-19402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:05:59.719 [DEBUG] [Thread-19402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:05:59.719 [DEBUG] [Thread-19402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:05:59.720 [DEBUG] [Thread-19402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:05:59.720 [DEBUG] [Thread-19402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:05:59.720 [DEBUG] [Thread-19402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:05:59.720 [DEBUG] [Thread-19402] [transport.py] [_log()] client lang: <none>
2026-04-15T13:05:59.720 [DEBUG] [Thread-19402] [transport.py] [_log()] server lang: <none>
2026-04-15T13:05:59.720 [DEBUG] [Thread-19402] [transport.py] [_log()] kex follows: False
2026-04-15T13:05:59.720 [DEBUG] [Thread-19402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:05:59.720 [DEBUG] [Thread-19402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:05:59.720 [DEBUG] [Thread-19402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:05:59.720 [DEBUG] [Thread-19402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:05:59.720 [DEBUG] [Thread-19402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:05:59.721 [DEBUG] [Thread-19402] [transport.py] [_log()] Compression: none
2026-04-15T13:05:59.721 [DEBUG] [Thread-19402] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:05:59.737 [DEBUG] [Thread-19402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:05:59.737 [DEBUG] [Thread-19402] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:05:59.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:05:59.738 [DEBUG] [Thread-19402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:05:59.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:05:59.739 [DEBUG] [Thread-19402] [transport.py] [_log()] userauth is OK
2026-04-15T13:05:59.739 [DEBUG] [Thread-19402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:05:59.739 [DEBUG] [Thread-19402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:05:59.739 [DEBUG] [Thread-19402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:05:59.739 [DEBUG] [Thread-19402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:05:59.776 [INFO] [Thread-19402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:05:59.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:06:00.582 [DEBUG] [Thread-19402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:06:00.582 [DEBUG] [Thread-19402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:06:00.583 [DEBUG] [Thread-19402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:06:00.623 [DEBUG] [Thread-19402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:06:00.623 [DEBUG] [Thread-19402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:06:00.626 [DEBUG] [Thread-19402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:06:00.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:06:00.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:06:00.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:06:00.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:06:00.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:06:00.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:06:00.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:06:00.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:06:00.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:06:00.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.461944 -999.00  +12.90  28.63     71   +7.70 1 2 1 1 1   888    0 5.13 -9.05 ----- 20.7 28.6 292.0 35.5 19.6 -20.4 18.8 -19.3 18.3 -19.9 19.4 -18.5
2026-04-15T13:06:00.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:06:00.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:06:00.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.461944
2026-04-15T13:06:00.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:06:00.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:06:00.649 [DEBUG] [Thread-19402] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:06:00.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:06:00.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:06:00.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:06:00.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:05:34', tmtdew=7.81993, humidity=59.5038, cloud=0.0, wind=28.3334, temperature=15.2055, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:05:11.962', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:06:00.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:06:00.909 [DEBUG] [Thread-19405] [transport.py] [_log()] starting thread (client mode): 0xee901180
2026-04-15T13:06:00.909 [DEBUG] [Thread-19405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:06:00.925 [DEBUG] [Thread-19405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:06:00.926 [INFO] [Thread-19405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:06:00.934 [DEBUG] [Thread-19405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:06:00.934 [DEBUG] [Thread-19405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:06:00.934 [DEBUG] [Thread-19405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:06:00.934 [DEBUG] [Thread-19405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:06:00.934 [DEBUG] [Thread-19405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:06:00.934 [DEBUG] [Thread-19405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:06:00.934 [DEBUG] [Thread-19405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:06:00.935 [DEBUG] [Thread-19405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:06:00.935 [DEBUG] [Thread-19405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:06:00.935 [DEBUG] [Thread-19405] [transport.py] [_log()] client lang: <none>
2026-04-15T13:06:00.935 [DEBUG] [Thread-19405] [transport.py] [_log()] server lang: <none>
2026-04-15T13:06:00.935 [DEBUG] [Thread-19405] [transport.py] [_log()] kex follows: False
2026-04-15T13:06:00.935 [DEBUG] [Thread-19405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:06:00.935 [DEBUG] [Thread-19405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:06:00.935 [DEBUG] [Thread-19405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:06:00.935 [DEBUG] [Thread-19405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:06:00.935 [DEBUG] [Thread-19405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:06:00.935 [DEBUG] [Thread-19405] [transport.py] [_log()] Compression: none
2026-04-15T13:06:00.935 [DEBUG] [Thread-19405] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:06:00.995 [DEBUG] [Thread-19405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:06:00.995 [DEBUG] [Thread-19405] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:06:00.996 [DEBUG] [Thread-19405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:06:00.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:06:00.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:06:01.057 [DEBUG] [Thread-19405] [transport.py] [_log()] userauth is OK
2026-04-15T13:06:01.057 [DEBUG] [Thread-19405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:06:01.057 [DEBUG] [Thread-19405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:06:01.057 [DEBUG] [Thread-19405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:06:01.057 [DEBUG] [Thread-19405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:06:01.084 [INFO] [Thread-19405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:06:01.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:06:01.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:06:01.983 [DEBUG] [Thread-19405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:06:01.983 [DEBUG] [Thread-19405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:06:02.031 [DEBUG] [Thread-19405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:06:02.031 [DEBUG] [Thread-19405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:06:02.041 [DEBUG] [Thread-19405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:06:02.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:06:02.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')
2026-04-15T13:06: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
2026-04-15T13:06:02.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:06:02.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:06:02.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:06:02.077 [DEBUG] [Thread-19405] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:06:13.409 [DEBUG] [Thread-19407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:06:19.782 [DEBUG] [Thread-19408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:06:28.455 [DEBUG] [Thread-19409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:06:32.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:06:32.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:06:32.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
2026-04-15T13:06:33.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 5, 34), 7.81993, 59.5038, 0.0, 28.3334, 15.2055, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:06:33.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:05:34
2026-04-15T13:06:33.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:06:34.283 [DEBUG] [Thread-19410] [transport.py] [_log()] starting thread (client mode): 0xf13e0520
2026-04-15T13:06:34.284 [DEBUG] [Thread-19410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:06:34.302 [DEBUG] [Thread-19410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:06:34.302 [INFO] [Thread-19410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:06:34.304 [DEBUG] [Thread-19410] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:06:34.304 [DEBUG] [Thread-19410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:06:34.304 [DEBUG] [Thread-19410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:06:34.304 [DEBUG] [Thread-19410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:06:34.304 [DEBUG] [Thread-19410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:06:34.304 [DEBUG] [Thread-19410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:06:34.304 [DEBUG] [Thread-19410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:06:34.304 [DEBUG] [Thread-19410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:06:34.304 [DEBUG] [Thread-19410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:06:34.305 [DEBUG] [Thread-19410] [transport.py] [_log()] client lang: <none>
2026-04-15T13:06:34.305 [DEBUG] [Thread-19410] [transport.py] [_log()] server lang: <none>
2026-04-15T13:06:34.305 [DEBUG] [Thread-19410] [transport.py] [_log()] kex follows: False
2026-04-15T13:06:34.305 [DEBUG] [Thread-19410] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:06:34.305 [DEBUG] [Thread-19410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:06:34.305 [DEBUG] [Thread-19410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:06:34.305 [DEBUG] [Thread-19410] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:06:34.305 [DEBUG] [Thread-19410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:06:34.305 [DEBUG] [Thread-19410] [transport.py] [_log()] Compression: none
2026-04-15T13:06:34.305 [DEBUG] [Thread-19410] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:06:34.318 [DEBUG] [Thread-19410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:06:34.318 [DEBUG] [Thread-19410] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:06:34.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:06:34.319 [DEBUG] [Thread-19410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:06:34.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:06:34.319 [DEBUG] [Thread-19410] [transport.py] [_log()] userauth is OK
2026-04-15T13:06:34.319 [DEBUG] [Thread-19410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:06:34.319 [DEBUG] [Thread-19410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:06:34.319 [DEBUG] [Thread-19410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:06:34.320 [DEBUG] [Thread-19410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:06:34.349 [INFO] [Thread-19410] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:06:34.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:06:35.130 [DEBUG] [Thread-19410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:06:35.130 [DEBUG] [Thread-19410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:06:35.131 [DEBUG] [Thread-19410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:06:35.171 [DEBUG] [Thread-19410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:06:35.171 [DEBUG] [Thread-19410] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:06:35.174 [DEBUG] [Thread-19410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:06:35.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:06:35.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:06:35.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:06:35.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:06:35.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:06:35.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:06:35.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:06:35.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:06:35.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:06:35.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.462291 -999.00  +12.80  24.48     71   +7.70 1 2 1 1 1   888    0 5.06 -10.77 ----- 22.3 24.5 312.4 30.9 19.6 -20.1 18.6 -20.8 18.3 -18.8 19.4 -19.8
2026-04-15T13:06:35.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:06:35.198 [DEBUG] [Thread-19410] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:06:35.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:06:35.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.462291
2026-04-15T13:06:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:06:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:06:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:06:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:06:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:06:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:05:34', tmtdew=7.81993, humidity=59.5038, cloud=0.0, wind=28.3334, temperature=15.2055, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:05:41.942', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:06:35.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:06:35.463 [DEBUG] [Thread-19413] [transport.py] [_log()] starting thread (client mode): 0xee903730
2026-04-15T13:06:35.463 [DEBUG] [Thread-19413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:06:35.477 [DEBUG] [Thread-19413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:06:35.477 [INFO] [Thread-19413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:06:35.484 [DEBUG] [Thread-19413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:06:35.484 [DEBUG] [Thread-19413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:06:35.485 [DEBUG] [Thread-19413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:06:35.485 [DEBUG] [Thread-19413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:06:35.485 [DEBUG] [Thread-19413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:06:35.485 [DEBUG] [Thread-19413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:06:35.485 [DEBUG] [Thread-19413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:06:35.485 [DEBUG] [Thread-19413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:06:35.485 [DEBUG] [Thread-19413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:06:35.485 [DEBUG] [Thread-19413] [transport.py] [_log()] client lang: <none>
2026-04-15T13:06:35.485 [DEBUG] [Thread-19413] [transport.py] [_log()] server lang: <none>
2026-04-15T13:06:35.485 [DEBUG] [Thread-19413] [transport.py] [_log()] kex follows: False
2026-04-15T13:06:35.485 [DEBUG] [Thread-19413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:06:35.485 [DEBUG] [Thread-19413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:06:35.485 [DEBUG] [Thread-19413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:06:35.486 [DEBUG] [Thread-19413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:06:35.486 [DEBUG] [Thread-19413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:06:35.486 [DEBUG] [Thread-19413] [transport.py] [_log()] Compression: none
2026-04-15T13:06:35.486 [DEBUG] [Thread-19413] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:06:35.542 [DEBUG] [Thread-19413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:06:35.543 [DEBUG] [Thread-19413] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:06:35.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:06:35.543 [DEBUG] [Thread-19413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:06:35.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:06:35.599 [DEBUG] [Thread-19413] [transport.py] [_log()] userauth is OK
2026-04-15T13:06:35.599 [DEBUG] [Thread-19413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:06:35.600 [DEBUG] [Thread-19413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:06:35.600 [DEBUG] [Thread-19413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:06:35.600 [DEBUG] [Thread-19413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:06:35.625 [INFO] [Thread-19413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:06:35.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:06:35.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:06:36.440 [DEBUG] [Thread-19413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:06:36.440 [DEBUG] [Thread-19413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:06:36.490 [DEBUG] [Thread-19413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:06:36.490 [DEBUG] [Thread-19413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:06:36.498 [DEBUG] [Thread-19413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:06:36.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:06:36.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')
2026-04-15T13:06:36.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
2026-04-15T13:06:36.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:06:36.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:06:36.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:06:36.532 [DEBUG] [Thread-19413] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:06:43.489 [DEBUG] [Thread-19415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:06:51.843 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:06:51.845 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:06:58.532 [DEBUG] [Thread-19416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:07:06.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:07:06.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:07:06.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
2026-04-15T13:07:07.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 6, 10), 7.09819, 62.1663, 0.0, 21.5269, 13.5704, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:07:07.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:06:10
2026-04-15T13:07:08.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:07:08.673 [DEBUG] [Thread-19417] [transport.py] [_log()] starting thread (client mode): 0xf13678b0
2026-04-15T13:07:08.673 [DEBUG] [Thread-19417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:07:08.694 [DEBUG] [Thread-19417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:07:08.694 [INFO] [Thread-19417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:07:08.697 [DEBUG] [Thread-19417] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:07:08.697 [DEBUG] [Thread-19417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:07:08.697 [DEBUG] [Thread-19417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:07:08.697 [DEBUG] [Thread-19417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:07:08.697 [DEBUG] [Thread-19417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:07:08.697 [DEBUG] [Thread-19417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:07:08.697 [DEBUG] [Thread-19417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:07:08.697 [DEBUG] [Thread-19417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:07:08.697 [DEBUG] [Thread-19417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:07:08.697 [DEBUG] [Thread-19417] [transport.py] [_log()] client lang: <none>
2026-04-15T13:07:08.697 [DEBUG] [Thread-19417] [transport.py] [_log()] server lang: <none>
2026-04-15T13:07:08.697 [DEBUG] [Thread-19417] [transport.py] [_log()] kex follows: False
2026-04-15T13:07:08.698 [DEBUG] [Thread-19417] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:07:08.698 [DEBUG] [Thread-19417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:07:08.698 [DEBUG] [Thread-19417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:07:08.698 [DEBUG] [Thread-19417] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:07:08.698 [DEBUG] [Thread-19417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:07:08.698 [DEBUG] [Thread-19417] [transport.py] [_log()] Compression: none
2026-04-15T13:07:08.698 [DEBUG] [Thread-19417] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:07:08.705 [DEBUG] [Thread-19417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:07:08.705 [DEBUG] [Thread-19417] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:07:08.706 [DEBUG] [Thread-19417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:07:08.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:07:08.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:07:08.707 [DEBUG] [Thread-19417] [transport.py] [_log()] userauth is OK
2026-04-15T13:07:08.707 [DEBUG] [Thread-19417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:07:08.707 [DEBUG] [Thread-19417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:07:08.707 [DEBUG] [Thread-19417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:07:08.707 [DEBUG] [Thread-19417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:07:08.720 [INFO] [Thread-19417] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:07:08.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:07:09.465 [DEBUG] [Thread-19417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:07:09.466 [DEBUG] [Thread-19417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:07:09.466 [DEBUG] [Thread-19417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:07:09.506 [DEBUG] [Thread-19417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:07:09.506 [DEBUG] [Thread-19417] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:07:09.509 [DEBUG] [Thread-19417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:07:09.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:07:09.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:07:09.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:07:09.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:07:09.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:07:09.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:07:09.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:07:09.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:07:09.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:07:09.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.462638 -999.00  +12.70  17.20     70   +7.50 1 2 1 1 1   888    0 4.97 -13.48 ----- 17.1 17.2 336.6 24.4 19.4 -19.6 18.6 -19.7 18.4 -17.2 19.2 -18.7
2026-04-15T13:07:09.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:07:09.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:07:09.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.462638
2026-04-15T13:07:09.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:07:09.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:07:09.537 [DEBUG] [Thread-19417] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:07:09.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:07:09.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:07:09.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:07:09.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:06:10', tmtdew=7.09819, humidity=62.1663, cloud=0.0, wind=21.5269, temperature=13.5704, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:06:11.923', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:07:09.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:07:09.798 [DEBUG] [Thread-19420] [transport.py] [_log()] starting thread (client mode): 0xf13347c0
2026-04-15T13:07:09.799 [DEBUG] [Thread-19420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:07:09.816 [DEBUG] [Thread-19420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:07:09.816 [INFO] [Thread-19420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:07:09.823 [DEBUG] [Thread-19420] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:07:09.823 [DEBUG] [Thread-19420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:07:09.823 [DEBUG] [Thread-19420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:07:09.823 [DEBUG] [Thread-19420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:07:09.823 [DEBUG] [Thread-19420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:07:09.823 [DEBUG] [Thread-19420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:07:09.824 [DEBUG] [Thread-19420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:07:09.824 [DEBUG] [Thread-19420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:07:09.824 [DEBUG] [Thread-19420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:07:09.824 [DEBUG] [Thread-19420] [transport.py] [_log()] client lang: <none>
2026-04-15T13:07:09.824 [DEBUG] [Thread-19420] [transport.py] [_log()] server lang: <none>
2026-04-15T13:07:09.824 [DEBUG] [Thread-19420] [transport.py] [_log()] kex follows: False
2026-04-15T13:07:09.824 [DEBUG] [Thread-19420] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:07:09.824 [DEBUG] [Thread-19420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:07:09.824 [DEBUG] [Thread-19420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:07:09.824 [DEBUG] [Thread-19420] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:07:09.824 [DEBUG] [Thread-19420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:07:09.825 [DEBUG] [Thread-19420] [transport.py] [_log()] Compression: none
2026-04-15T13:07:09.825 [DEBUG] [Thread-19420] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:07:09.883 [DEBUG] [Thread-19420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:07:09.883 [DEBUG] [Thread-19420] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:07:09.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:07:09.884 [DEBUG] [Thread-19420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:07:09.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:07:09.939 [DEBUG] [Thread-19420] [transport.py] [_log()] userauth is OK
2026-04-15T13:07:09.939 [DEBUG] [Thread-19420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:07:09.939 [DEBUG] [Thread-19420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:07:09.940 [DEBUG] [Thread-19420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:07:09.940 [DEBUG] [Thread-19420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:07:09.965 [INFO] [Thread-19420] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:07:09.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:07:09.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:07:10.786 [DEBUG] [Thread-19420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:07:10.786 [DEBUG] [Thread-19420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:07:10.834 [DEBUG] [Thread-19420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:07:10.834 [DEBUG] [Thread-19420] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:07:10.843 [DEBUG] [Thread-19420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:07:10.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:07:10.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')
2026-04-15T13:07:10.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
2026-04-15T13:07:10.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:07:10.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:07:10.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:07:10.878 [DEBUG] [Thread-19420] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:07:13.565 [DEBUG] [Thread-19422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:07:19.860 [DEBUG] [Thread-19423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:07:28.606 [DEBUG] [Thread-19424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:07:40.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:07:40.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:07:40.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
2026-04-15T13:07:42.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 7, 7), 6.9279, 62.8458, 0.0, 23.3615, 13.4378, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:07:42.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:07:07
2026-04-15T13:07:42.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:07:43.146 [DEBUG] [Thread-19425] [transport.py] [_log()] starting thread (client mode): 0xf13e1cc0
2026-04-15T13:07:43.146 [DEBUG] [Thread-19425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:07:43.159 [DEBUG] [Thread-19425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:07:43.160 [INFO] [Thread-19425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:07:43.162 [DEBUG] [Thread-19425] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:07:43.163 [DEBUG] [Thread-19425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:07:43.163 [DEBUG] [Thread-19425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:07:43.163 [DEBUG] [Thread-19425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:07:43.163 [DEBUG] [Thread-19425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:07:43.163 [DEBUG] [Thread-19425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:07:43.163 [DEBUG] [Thread-19425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:07:43.163 [DEBUG] [Thread-19425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:07:43.163 [DEBUG] [Thread-19425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:07:43.163 [DEBUG] [Thread-19425] [transport.py] [_log()] client lang: <none>
2026-04-15T13:07:43.163 [DEBUG] [Thread-19425] [transport.py] [_log()] server lang: <none>
2026-04-15T13:07:43.163 [DEBUG] [Thread-19425] [transport.py] [_log()] kex follows: False
2026-04-15T13:07:43.163 [DEBUG] [Thread-19425] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:07:43.164 [DEBUG] [Thread-19425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:07:43.164 [DEBUG] [Thread-19425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:07:43.164 [DEBUG] [Thread-19425] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:07:43.164 [DEBUG] [Thread-19425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:07:43.164 [DEBUG] [Thread-19425] [transport.py] [_log()] Compression: none
2026-04-15T13:07:43.164 [DEBUG] [Thread-19425] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:07:43.179 [DEBUG] [Thread-19425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:07:43.180 [DEBUG] [Thread-19425] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:07:43.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:07:43.181 [DEBUG] [Thread-19425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:07:43.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:07:43.181 [DEBUG] [Thread-19425] [transport.py] [_log()] userauth is OK
2026-04-15T13:07:43.181 [DEBUG] [Thread-19425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:07:43.182 [DEBUG] [Thread-19425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:07:43.182 [DEBUG] [Thread-19425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:07:43.182 [DEBUG] [Thread-19425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:07:43.199 [INFO] [Thread-19425] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:07:43.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:07:43.638 [DEBUG] [Thread-19427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:07:43.791 [DEBUG] [Thread-19425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:07:43.791 [DEBUG] [Thread-19425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:07:43.792 [DEBUG] [Thread-19425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:07:43.832 [DEBUG] [Thread-19425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:07:43.832 [DEBUG] [Thread-19425] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:07:43.834 [DEBUG] [Thread-19425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:07:43.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:07:43.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:07:43.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:07:43.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:07:43.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:07:43.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:07:43.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:07:43.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:07:43.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:07:43.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.463332 -999.00  +13.40  21.24     71   +8.30 1 2 1 1 1   888    0 4.72 -18.20 ----- 27.6 21.2 308.0 28.1 19.4 -22.3 18.5 -21.6 18.2 -19.7 19.2 -20.1
2026-04-15T13:07:43.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:07:43.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:07:43.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.463332
2026-04-15T13:07:43.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:07:43.859 [DEBUG] [Thread-19425] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:07:43.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:07:43.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:07:43.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:07:43.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:07:43.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:07:07', tmtdew=6.9279, humidity=62.8458, cloud=0.0, wind=23.3615, temperature=13.4378, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:07:11.885', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:07:44.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:07:44.116 [DEBUG] [Thread-19429] [transport.py] [_log()] starting thread (client mode): 0xee98e4a0
2026-04-15T13:07:44.116 [DEBUG] [Thread-19429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:07:44.132 [DEBUG] [Thread-19429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:07:44.132 [INFO] [Thread-19429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:07:44.140 [DEBUG] [Thread-19429] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:07:44.140 [DEBUG] [Thread-19429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:07:44.140 [DEBUG] [Thread-19429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:07:44.140 [DEBUG] [Thread-19429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:07:44.140 [DEBUG] [Thread-19429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:07:44.140 [DEBUG] [Thread-19429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:07:44.140 [DEBUG] [Thread-19429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:07:44.140 [DEBUG] [Thread-19429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:07:44.140 [DEBUG] [Thread-19429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:07:44.141 [DEBUG] [Thread-19429] [transport.py] [_log()] client lang: <none>
2026-04-15T13:07:44.141 [DEBUG] [Thread-19429] [transport.py] [_log()] server lang: <none>
2026-04-15T13:07:44.141 [DEBUG] [Thread-19429] [transport.py] [_log()] kex follows: False
2026-04-15T13:07:44.141 [DEBUG] [Thread-19429] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:07:44.141 [DEBUG] [Thread-19429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:07:44.141 [DEBUG] [Thread-19429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:07:44.141 [DEBUG] [Thread-19429] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:07:44.141 [DEBUG] [Thread-19429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:07:44.141 [DEBUG] [Thread-19429] [transport.py] [_log()] Compression: none
2026-04-15T13:07:44.141 [DEBUG] [Thread-19429] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:07:44.199 [DEBUG] [Thread-19429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:07:44.199 [DEBUG] [Thread-19429] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:07:44.200 [DEBUG] [Thread-19429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:07:44.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:07:44.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:07:44.256 [DEBUG] [Thread-19429] [transport.py] [_log()] userauth is OK
2026-04-15T13:07:44.256 [DEBUG] [Thread-19429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:07:44.257 [DEBUG] [Thread-19429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:07:44.257 [DEBUG] [Thread-19429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:07:44.257 [DEBUG] [Thread-19429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:07:44.285 [INFO] [Thread-19429] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:07:44.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:07:44.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:07:45.119 [DEBUG] [Thread-19429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:07:45.119 [DEBUG] [Thread-19429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:07:45.167 [DEBUG] [Thread-19429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:07:45.167 [DEBUG] [Thread-19429] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:07:45.179 [DEBUG] [Thread-19429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:07:45.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:07:45.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')
2026-04-15T13:07:45.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
2026-04-15T13:07:45.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:07:45.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:07:45.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:07:45.218 [DEBUG] [Thread-19429] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:07:51.985 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:07:51.987 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:07:58.669 [DEBUG] [Thread-19431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:08:13.714 [DEBUG] [Thread-19432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:08:15.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:08:15.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:08:15.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
2026-04-15T13:08:16.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 7, 46), 7.6603, 59.9342, 0.0, 16.8322, 14.2767, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:08:16.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:07:46
2026-04-15T13:08:16.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:08:17.401 [DEBUG] [Thread-19433] [transport.py] [_log()] starting thread (client mode): 0xf13e2260
2026-04-15T13:08:17.401 [DEBUG] [Thread-19433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:08:17.419 [DEBUG] [Thread-19433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:08:17.419 [INFO] [Thread-19433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:08:17.422 [DEBUG] [Thread-19433] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:08:17.422 [DEBUG] [Thread-19433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:08:17.422 [DEBUG] [Thread-19433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:08:17.422 [DEBUG] [Thread-19433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:08:17.422 [DEBUG] [Thread-19433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:08:17.423 [DEBUG] [Thread-19433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:08:17.423 [DEBUG] [Thread-19433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:08:17.423 [DEBUG] [Thread-19433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:08:17.423 [DEBUG] [Thread-19433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:08:17.423 [DEBUG] [Thread-19433] [transport.py] [_log()] client lang: <none>
2026-04-15T13:08:17.423 [DEBUG] [Thread-19433] [transport.py] [_log()] server lang: <none>
2026-04-15T13:08:17.423 [DEBUG] [Thread-19433] [transport.py] [_log()] kex follows: False
2026-04-15T13:08:17.423 [DEBUG] [Thread-19433] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:08:17.423 [DEBUG] [Thread-19433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:08:17.423 [DEBUG] [Thread-19433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:08:17.423 [DEBUG] [Thread-19433] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:08:17.423 [DEBUG] [Thread-19433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:08:17.424 [DEBUG] [Thread-19433] [transport.py] [_log()] Compression: none
2026-04-15T13:08:17.424 [DEBUG] [Thread-19433] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:08:17.435 [DEBUG] [Thread-19433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:08:17.435 [DEBUG] [Thread-19433] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:08:17.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:08:17.436 [DEBUG] [Thread-19433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:08:17.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:08:17.437 [DEBUG] [Thread-19433] [transport.py] [_log()] userauth is OK
2026-04-15T13:08:17.437 [DEBUG] [Thread-19433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:08:17.437 [DEBUG] [Thread-19433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:08:17.437 [DEBUG] [Thread-19433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:08:17.437 [DEBUG] [Thread-19433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:08:17.460 [INFO] [Thread-19433] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:08:17.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:08:18.067 [DEBUG] [Thread-19433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:08:18.067 [DEBUG] [Thread-19433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:08:18.068 [DEBUG] [Thread-19433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:08:18.108 [DEBUG] [Thread-19433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:08:18.108 [DEBUG] [Thread-19433] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:08:18.111 [DEBUG] [Thread-19433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:08:18.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:08:18.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:08:18.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:08:18.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:08:18.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:08:18.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:08:18.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:08:18.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:08:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:08:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.464027 -999.00  +12.90  19.40     71   +7.80 1 2 1 1 1   888    0 4.76 -20.39 ----- 17.2 19.4 310.2 28.0 19.0 -22.1 18.2 -22.5 18.0 -19.1 18.8 -20.3
2026-04-15T13:08:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:08:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:08:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.464027
2026-04-15T13:08:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:08:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:08:18.133 [DEBUG] [Thread-19433] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:08:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:08:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:08:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:08:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:07:46', tmtdew=7.6603, humidity=59.9342, cloud=0.0, wind=16.8322, temperature=14.2767, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:08:11.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:08:18.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:08:18.378 [DEBUG] [Thread-19436] [transport.py] [_log()] starting thread (client mode): 0xf13e0250
2026-04-15T13:08:18.378 [DEBUG] [Thread-19436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:08:18.392 [DEBUG] [Thread-19436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:08:18.392 [INFO] [Thread-19436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:08:18.399 [DEBUG] [Thread-19436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:08:18.399 [DEBUG] [Thread-19436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:08:18.400 [DEBUG] [Thread-19436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:08:18.400 [DEBUG] [Thread-19436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:08:18.400 [DEBUG] [Thread-19436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:08:18.400 [DEBUG] [Thread-19436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:08:18.400 [DEBUG] [Thread-19436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:08:18.400 [DEBUG] [Thread-19436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:08:18.400 [DEBUG] [Thread-19436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:08:18.400 [DEBUG] [Thread-19436] [transport.py] [_log()] client lang: <none>
2026-04-15T13:08:18.400 [DEBUG] [Thread-19436] [transport.py] [_log()] server lang: <none>
2026-04-15T13:08:18.400 [DEBUG] [Thread-19436] [transport.py] [_log()] kex follows: False
2026-04-15T13:08:18.400 [DEBUG] [Thread-19436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:08:18.400 [DEBUG] [Thread-19436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:08:18.401 [DEBUG] [Thread-19436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:08:18.401 [DEBUG] [Thread-19436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:08:18.401 [DEBUG] [Thread-19436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:08:18.401 [DEBUG] [Thread-19436] [transport.py] [_log()] Compression: none
2026-04-15T13:08:18.401 [DEBUG] [Thread-19436] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:08:18.459 [DEBUG] [Thread-19436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:08:18.459 [DEBUG] [Thread-19436] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:08:18.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:08:18.460 [DEBUG] [Thread-19436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:08:18.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:08:18.519 [DEBUG] [Thread-19436] [transport.py] [_log()] userauth is OK
2026-04-15T13:08:18.519 [DEBUG] [Thread-19436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:08:18.519 [DEBUG] [Thread-19436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:08:18.519 [DEBUG] [Thread-19436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:08:18.520 [DEBUG] [Thread-19436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:08:18.545 [INFO] [Thread-19436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:08:18.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:08:18.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:08:19.376 [DEBUG] [Thread-19436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:08:19.376 [DEBUG] [Thread-19436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:08:19.424 [DEBUG] [Thread-19436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:08:19.424 [DEBUG] [Thread-19436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:08:19.433 [DEBUG] [Thread-19436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:08:19.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:08: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')
2026-04-15T13:08: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
2026-04-15T13:08:19.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:08:19.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:08:19.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:08:19.467 [DEBUG] [Thread-19436] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:08:19.935 [DEBUG] [Thread-19438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:08:28.743 [DEBUG] [Thread-19439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:08:43.781 [DEBUG] [Thread-19440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:08:49.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:08:49.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:08:49.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
2026-04-15T13:08:50.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 8, 21), 6.8806, 63.2958, 0.0, 22.8506, 13.2718, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:08:50.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:08:21
2026-04-15T13:08:51.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:08:51.555 [DEBUG] [Thread-19441] [transport.py] [_log()] starting thread (client mode): 0xf1364970
2026-04-15T13:08:51.555 [DEBUG] [Thread-19441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:08:51.572 [DEBUG] [Thread-19441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:08:51.572 [INFO] [Thread-19441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:08:51.574 [DEBUG] [Thread-19441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:08:51.574 [DEBUG] [Thread-19441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:08:51.574 [DEBUG] [Thread-19441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:08:51.574 [DEBUG] [Thread-19441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:08:51.574 [DEBUG] [Thread-19441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:08:51.575 [DEBUG] [Thread-19441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:08:51.575 [DEBUG] [Thread-19441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:08:51.575 [DEBUG] [Thread-19441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:08:51.575 [DEBUG] [Thread-19441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:08:51.575 [DEBUG] [Thread-19441] [transport.py] [_log()] client lang: <none>
2026-04-15T13:08:51.575 [DEBUG] [Thread-19441] [transport.py] [_log()] server lang: <none>
2026-04-15T13:08:51.575 [DEBUG] [Thread-19441] [transport.py] [_log()] kex follows: False
2026-04-15T13:08:51.576 [DEBUG] [Thread-19441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:08:51.576 [DEBUG] [Thread-19441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:08:51.576 [DEBUG] [Thread-19441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:08:51.576 [DEBUG] [Thread-19441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:08:51.576 [DEBUG] [Thread-19441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:08:51.576 [DEBUG] [Thread-19441] [transport.py] [_log()] Compression: none
2026-04-15T13:08:51.577 [DEBUG] [Thread-19441] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:08:51.588 [DEBUG] [Thread-19441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:08:51.589 [DEBUG] [Thread-19441] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:08:51.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:08:51.589 [DEBUG] [Thread-19441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:08:51.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:08:51.591 [DEBUG] [Thread-19441] [transport.py] [_log()] userauth is OK
2026-04-15T13:08:51.591 [DEBUG] [Thread-19441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:08:51.591 [DEBUG] [Thread-19441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:08:51.591 [DEBUG] [Thread-19441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:08:51.591 [DEBUG] [Thread-19441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:08:51.608 [INFO] [Thread-19441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:08:51.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:08:52.128 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:08:52.129 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:08:52.187 [DEBUG] [Thread-19441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:08:52.187 [DEBUG] [Thread-19441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:08:52.188 [DEBUG] [Thread-19441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:08:52.228 [DEBUG] [Thread-19441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:08:52.228 [DEBUG] [Thread-19441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:08:52.231 [DEBUG] [Thread-19441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:08:52.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:08:52.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:08:52.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:08:52.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:08:52.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:08:52.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:08:52.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:08:52.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:08:52.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:08:52.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.464374 -999.00  +12.70  13.56     70   +7.40 1 2 1 1 1   888    0 4.69 -23.74 ----- 11.3 13.6 328.8 18.7 19.1 -18.3 18.4 -20.9 18.2 -18.3 18.9 -18.5
2026-04-15T13:08:52.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:08:52.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:08:52.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.464374
2026-04-15T13:08:52.256 [DEBUG] [Thread-19441] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:08:52.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:08:52.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:08:52.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:08:52.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:08:52.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:08:52.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:08:21', tmtdew=6.8806, humidity=63.2958, cloud=0.0, wind=22.8506, temperature=13.2718, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:08:41.914', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:08:52.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:08:52.517 [DEBUG] [Thread-19444] [transport.py] [_log()] starting thread (client mode): 0xf13361a0
2026-04-15T13:08:52.517 [DEBUG] [Thread-19444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:08:52.536 [DEBUG] [Thread-19444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:08:52.537 [INFO] [Thread-19444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:08:52.545 [DEBUG] [Thread-19444] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:08:52.545 [DEBUG] [Thread-19444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:08:52.546 [DEBUG] [Thread-19444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:08:52.546 [DEBUG] [Thread-19444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:08:52.546 [DEBUG] [Thread-19444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:08:52.546 [DEBUG] [Thread-19444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:08:52.546 [DEBUG] [Thread-19444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:08:52.546 [DEBUG] [Thread-19444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:08:52.546 [DEBUG] [Thread-19444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:08:52.546 [DEBUG] [Thread-19444] [transport.py] [_log()] client lang: <none>
2026-04-15T13:08:52.546 [DEBUG] [Thread-19444] [transport.py] [_log()] server lang: <none>
2026-04-15T13:08:52.546 [DEBUG] [Thread-19444] [transport.py] [_log()] kex follows: False
2026-04-15T13:08:52.546 [DEBUG] [Thread-19444] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:08:52.547 [DEBUG] [Thread-19444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:08:52.547 [DEBUG] [Thread-19444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:08:52.547 [DEBUG] [Thread-19444] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:08:52.547 [DEBUG] [Thread-19444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:08:52.547 [DEBUG] [Thread-19444] [transport.py] [_log()] Compression: none
2026-04-15T13:08:52.547 [DEBUG] [Thread-19444] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:08:52.608 [DEBUG] [Thread-19444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:08:52.608 [DEBUG] [Thread-19444] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:08:52.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:08:52.609 [DEBUG] [Thread-19444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:08:52.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:08:52.671 [DEBUG] [Thread-19444] [transport.py] [_log()] userauth is OK
2026-04-15T13:08:52.671 [DEBUG] [Thread-19444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:08:52.671 [DEBUG] [Thread-19444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:08:52.671 [DEBUG] [Thread-19444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:08:52.671 [DEBUG] [Thread-19444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:08:52.701 [INFO] [Thread-19444] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:08:52.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:08:52.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:08:53.525 [DEBUG] [Thread-19444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:08:53.525 [DEBUG] [Thread-19444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:08:53.573 [DEBUG] [Thread-19444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:08:53.573 [DEBUG] [Thread-19444] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:08:53.583 [DEBUG] [Thread-19444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:08:53.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:08:53.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')
2026-04-15T13:08:53.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
2026-04-15T13:08:53.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:08:53.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:08:53.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:08:53.619 [DEBUG] [Thread-19444] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:08:58.813 [DEBUG] [Thread-19446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:09:13.858 [DEBUG] [Thread-19447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:09:20.022 [DEBUG] [Thread-19448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:09:23.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:09:23.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:09:23.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
2026-04-15T13:09:24.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 8, 57), 6.77437, 63.5608, 0.0, 15.2986, 13.3376, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:09:24.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:08:57
2026-04-15T13:09:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:09:25.753 [DEBUG] [Thread-19449] [transport.py] [_log()] starting thread (client mode): 0xee9e7b20
2026-04-15T13:09:25.753 [DEBUG] [Thread-19449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:09:25.773 [DEBUG] [Thread-19449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:09:25.773 [INFO] [Thread-19449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:09:25.776 [DEBUG] [Thread-19449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:09:25.776 [DEBUG] [Thread-19449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:09:25.776 [DEBUG] [Thread-19449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:09:25.776 [DEBUG] [Thread-19449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:09:25.776 [DEBUG] [Thread-19449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:09:25.777 [DEBUG] [Thread-19449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:09:25.777 [DEBUG] [Thread-19449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:09:25.777 [DEBUG] [Thread-19449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:09:25.777 [DEBUG] [Thread-19449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:09:25.777 [DEBUG] [Thread-19449] [transport.py] [_log()] client lang: <none>
2026-04-15T13:09:25.777 [DEBUG] [Thread-19449] [transport.py] [_log()] server lang: <none>
2026-04-15T13:09:25.777 [DEBUG] [Thread-19449] [transport.py] [_log()] kex follows: False
2026-04-15T13:09:25.777 [DEBUG] [Thread-19449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:09:25.777 [DEBUG] [Thread-19449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:09:25.777 [DEBUG] [Thread-19449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:09:25.777 [DEBUG] [Thread-19449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:09:25.777 [DEBUG] [Thread-19449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:09:25.778 [DEBUG] [Thread-19449] [transport.py] [_log()] Compression: none
2026-04-15T13:09:25.778 [DEBUG] [Thread-19449] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:09:25.798 [DEBUG] [Thread-19449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:09:25.798 [DEBUG] [Thread-19449] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:09:25.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:09:25.799 [DEBUG] [Thread-19449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:09:25.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:09:25.800 [DEBUG] [Thread-19449] [transport.py] [_log()] userauth is OK
2026-04-15T13:09:25.800 [DEBUG] [Thread-19449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:09:25.801 [DEBUG] [Thread-19449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:09:25.801 [DEBUG] [Thread-19449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:09:25.801 [DEBUG] [Thread-19449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:09:25.822 [INFO] [Thread-19449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:09:25.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:09:26.443 [DEBUG] [Thread-19449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:09:26.443 [DEBUG] [Thread-19449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:09:26.443 [DEBUG] [Thread-19449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:09:26.484 [DEBUG] [Thread-19449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:09:26.484 [DEBUG] [Thread-19449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:09:26.487 [DEBUG] [Thread-19449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:09:26.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:09:26.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:09:26.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:09:26.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:09:26.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:09:26.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:09:26.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:09:26.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:09:26.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:09:26.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.464721 -999.00  +12.90  13.62     71   +7.80 1 2 1 1 1   888    0 4.50 -25.43 ----- 21.0 13.6 289.9 17.0 19.3 -17.6 18.5 -20.0 18.1 -20.5 19.1 -18.2
2026-04-15T13:09:26.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:09:26.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:09:26.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.464721
2026-04-15T13:09:26.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:09:26.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:09:26.513 [DEBUG] [Thread-19449] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:09:26.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:09:26.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:09:26.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:09:26.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:08:57', tmtdew=6.77437, humidity=63.5608, cloud=0.0, wind=15.2986, temperature=13.3376, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:09:11.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:09:26.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:09:26.768 [DEBUG] [Thread-19452] [transport.py] [_log()] starting thread (client mode): 0xf1337790
2026-04-15T13:09:26.768 [DEBUG] [Thread-19452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:09:26.783 [DEBUG] [Thread-19452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:09:26.783 [INFO] [Thread-19452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:09:26.790 [DEBUG] [Thread-19452] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:09:26.790 [DEBUG] [Thread-19452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:09:26.790 [DEBUG] [Thread-19452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:09:26.790 [DEBUG] [Thread-19452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:09:26.790 [DEBUG] [Thread-19452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:09:26.791 [DEBUG] [Thread-19452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:09:26.791 [DEBUG] [Thread-19452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:09:26.791 [DEBUG] [Thread-19452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:09:26.791 [DEBUG] [Thread-19452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:09:26.791 [DEBUG] [Thread-19452] [transport.py] [_log()] client lang: <none>
2026-04-15T13:09:26.791 [DEBUG] [Thread-19452] [transport.py] [_log()] server lang: <none>
2026-04-15T13:09:26.791 [DEBUG] [Thread-19452] [transport.py] [_log()] kex follows: False
2026-04-15T13:09:26.791 [DEBUG] [Thread-19452] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:09:26.791 [DEBUG] [Thread-19452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:09:26.791 [DEBUG] [Thread-19452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:09:26.791 [DEBUG] [Thread-19452] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:09:26.792 [DEBUG] [Thread-19452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:09:26.792 [DEBUG] [Thread-19452] [transport.py] [_log()] Compression: none
2026-04-15T13:09:26.792 [DEBUG] [Thread-19452] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:09:26.847 [DEBUG] [Thread-19452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:09:26.847 [DEBUG] [Thread-19452] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:09:26.848 [DEBUG] [Thread-19452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:09:26.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:09:26.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:09:26.904 [DEBUG] [Thread-19452] [transport.py] [_log()] userauth is OK
2026-04-15T13:09:26.904 [DEBUG] [Thread-19452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:09:26.905 [DEBUG] [Thread-19452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:09:26.905 [DEBUG] [Thread-19452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:09:26.905 [DEBUG] [Thread-19452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:09:26.930 [INFO] [Thread-19452] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:09:26.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:09:26.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:09:27.758 [DEBUG] [Thread-19452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:09:27.758 [DEBUG] [Thread-19452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:09:27.806 [DEBUG] [Thread-19452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:09:27.806 [DEBUG] [Thread-19452] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:09:27.816 [DEBUG] [Thread-19452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:09:27.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:09:27.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')
2026-04-15T13:09:27.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
2026-04-15T13:09:27.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:09:27.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:09:27.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:09:27.851 [DEBUG] [Thread-19452] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:09:28.888 [DEBUG] [Thread-19454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:09:43.933 [DEBUG] [Thread-19455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:09:52.268 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:09:52.269 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:09:57.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:09:57.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:09:57.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:09:58.963 [DEBUG] [Thread-19456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:09:59.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 9, 32), 6.84069, 63.2956, 0.0, 15.6337, 13.4039, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:09:59.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:09:32
2026-04-15T13:09:59.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:10:00.073 [DEBUG] [Thread-19457] [transport.py] [_log()] starting thread (client mode): 0xf13673a0
2026-04-15T13:10:00.073 [DEBUG] [Thread-19457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:10:00.091 [DEBUG] [Thread-19457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:10:00.092 [INFO] [Thread-19457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:10:00.095 [DEBUG] [Thread-19457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:10:00.095 [DEBUG] [Thread-19457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:10:00.095 [DEBUG] [Thread-19457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:10:00.095 [DEBUG] [Thread-19457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:10:00.095 [DEBUG] [Thread-19457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:10:00.095 [DEBUG] [Thread-19457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:10:00.095 [DEBUG] [Thread-19457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:10:00.095 [DEBUG] [Thread-19457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:10:00.096 [DEBUG] [Thread-19457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:10:00.096 [DEBUG] [Thread-19457] [transport.py] [_log()] client lang: <none>
2026-04-15T13:10:00.096 [DEBUG] [Thread-19457] [transport.py] [_log()] server lang: <none>
2026-04-15T13:10:00.096 [DEBUG] [Thread-19457] [transport.py] [_log()] kex follows: False
2026-04-15T13:10:00.096 [DEBUG] [Thread-19457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:10:00.096 [DEBUG] [Thread-19457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:10:00.096 [DEBUG] [Thread-19457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:10:00.096 [DEBUG] [Thread-19457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:10:00.096 [DEBUG] [Thread-19457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:10:00.096 [DEBUG] [Thread-19457] [transport.py] [_log()] Compression: none
2026-04-15T13:10:00.096 [DEBUG] [Thread-19457] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:10:00.114 [DEBUG] [Thread-19457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:10:00.114 [DEBUG] [Thread-19457] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:10:00.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:10:00.115 [DEBUG] [Thread-19457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:10:00.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:10:00.116 [DEBUG] [Thread-19457] [transport.py] [_log()] userauth is OK
2026-04-15T13:10:00.116 [DEBUG] [Thread-19457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:10:00.116 [DEBUG] [Thread-19457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:10:00.116 [DEBUG] [Thread-19457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:10:00.116 [DEBUG] [Thread-19457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:10:00.141 [INFO] [Thread-19457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:10:00.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:10:00.770 [DEBUG] [Thread-19457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:10:00.770 [DEBUG] [Thread-19457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:10:00.770 [DEBUG] [Thread-19457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:10:00.811 [DEBUG] [Thread-19457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:10:00.811 [DEBUG] [Thread-19457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:10:00.814 [DEBUG] [Thread-19457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:10:00.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:10:00.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:10:00.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:10:00.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:10:00.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:10:00.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:10:00.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:10:00.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:10:00.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:10:00.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.465068 -999.00  +12.70  17.47     69   +7.20 1 2 1 1 1   888    0 4.67 -20.79 ----- 15.7 17.5 297.4 22.8 19.0 -22.9 18.2 -22.8 17.9 -20.3 18.8 -22.0
2026-04-15T13:10:00.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:10:00.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:10:00.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.465068
2026-04-15T13:10:00.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:10:00.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:10:00.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:10:00.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:10:00.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:10:00.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:09:32', tmtdew=6.84069, humidity=63.2956, cloud=0.0, wind=15.6337, temperature=13.4039, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:09:41.875', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:10:00.838 [DEBUG] [Thread-19457] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:10:01.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:10:01.089 [DEBUG] [Thread-19460] [transport.py] [_log()] starting thread (client mode): 0xf1367dc0
2026-04-15T13:10:01.089 [DEBUG] [Thread-19460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:10:01.104 [DEBUG] [Thread-19460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:10:01.104 [INFO] [Thread-19460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:10:01.111 [DEBUG] [Thread-19460] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:10:01.111 [DEBUG] [Thread-19460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:10:01.111 [DEBUG] [Thread-19460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:10:01.111 [DEBUG] [Thread-19460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:10:01.111 [DEBUG] [Thread-19460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:10:01.111 [DEBUG] [Thread-19460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:10:01.111 [DEBUG] [Thread-19460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:10:01.111 [DEBUG] [Thread-19460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:10:01.112 [DEBUG] [Thread-19460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:10:01.112 [DEBUG] [Thread-19460] [transport.py] [_log()] client lang: <none>
2026-04-15T13:10:01.112 [DEBUG] [Thread-19460] [transport.py] [_log()] server lang: <none>
2026-04-15T13:10:01.112 [DEBUG] [Thread-19460] [transport.py] [_log()] kex follows: False
2026-04-15T13:10:01.112 [DEBUG] [Thread-19460] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:10:01.112 [DEBUG] [Thread-19460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:10:01.112 [DEBUG] [Thread-19460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:10:01.112 [DEBUG] [Thread-19460] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:10:01.112 [DEBUG] [Thread-19460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:10:01.112 [DEBUG] [Thread-19460] [transport.py] [_log()] Compression: none
2026-04-15T13:10:01.112 [DEBUG] [Thread-19460] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:10:01.166 [DEBUG] [Thread-19460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:10:01.167 [DEBUG] [Thread-19460] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:10:01.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:10:01.168 [DEBUG] [Thread-19460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:10:01.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:10:01.224 [DEBUG] [Thread-19460] [transport.py] [_log()] userauth is OK
2026-04-15T13:10:01.224 [DEBUG] [Thread-19460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:10:01.224 [DEBUG] [Thread-19460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:10:01.224 [DEBUG] [Thread-19460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:10:01.224 [DEBUG] [Thread-19460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:10:01.250 [INFO] [Thread-19460] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:10:01.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:10:01.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:10:02.105 [DEBUG] [Thread-19460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:10:02.105 [DEBUG] [Thread-19460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:10:02.153 [DEBUG] [Thread-19460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:10:02.153 [DEBUG] [Thread-19460] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:10:02.161 [DEBUG] [Thread-19460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:10:02.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:10:02.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')
2026-04-15T13:10:02.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') -> 00000000
2026-04-15T13:10:02.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:10:02.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:10:02.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:10:02.193 [DEBUG] [Thread-19460] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:10:13.995 [DEBUG] [Thread-19462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:10:20.098 [DEBUG] [Thread-19463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:10:29.039 [DEBUG] [Thread-19464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:10:32.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:10:32.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:10:32.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
2026-04-15T13:10:33.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 10, 8), 6.91233, 62.9639, 0.0, 13.8168, 13.2711, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:10:33.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:10:08
2026-04-15T13:10:33.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:10:34.334 [DEBUG] [Thread-19465] [transport.py] [_log()] starting thread (client mode): 0xee9e7700
2026-04-15T13:10:34.334 [DEBUG] [Thread-19465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:10:34.353 [DEBUG] [Thread-19465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:10:34.353 [INFO] [Thread-19465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:10:34.355 [DEBUG] [Thread-19465] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:10:34.355 [DEBUG] [Thread-19465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:10:34.355 [DEBUG] [Thread-19465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:10:34.355 [DEBUG] [Thread-19465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:10:34.355 [DEBUG] [Thread-19465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:10:34.355 [DEBUG] [Thread-19465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:10:34.355 [DEBUG] [Thread-19465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:10:34.355 [DEBUG] [Thread-19465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:10:34.355 [DEBUG] [Thread-19465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:10:34.355 [DEBUG] [Thread-19465] [transport.py] [_log()] client lang: <none>
2026-04-15T13:10:34.355 [DEBUG] [Thread-19465] [transport.py] [_log()] server lang: <none>
2026-04-15T13:10:34.355 [DEBUG] [Thread-19465] [transport.py] [_log()] kex follows: False
2026-04-15T13:10:34.355 [DEBUG] [Thread-19465] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:10:34.355 [DEBUG] [Thread-19465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:10:34.356 [DEBUG] [Thread-19465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:10:34.356 [DEBUG] [Thread-19465] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:10:34.356 [DEBUG] [Thread-19465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:10:34.356 [DEBUG] [Thread-19465] [transport.py] [_log()] Compression: none
2026-04-15T13:10:34.356 [DEBUG] [Thread-19465] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:10:34.372 [DEBUG] [Thread-19465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:10:34.372 [DEBUG] [Thread-19465] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:10:34.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:10:34.373 [DEBUG] [Thread-19465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:10:34.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:10:34.374 [DEBUG] [Thread-19465] [transport.py] [_log()] userauth is OK
2026-04-15T13:10:34.374 [DEBUG] [Thread-19465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:10:34.374 [DEBUG] [Thread-19465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:10:34.374 [DEBUG] [Thread-19465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:10:34.374 [DEBUG] [Thread-19465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:10:34.395 [INFO] [Thread-19465] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:10:34.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:10:34.979 [DEBUG] [Thread-19465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:10:34.979 [DEBUG] [Thread-19465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:10:34.980 [DEBUG] [Thread-19465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:10:35.020 [DEBUG] [Thread-19465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:10:35.020 [DEBUG] [Thread-19465] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:10:35.023 [DEBUG] [Thread-19465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:10:35.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:10:35.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:10:35.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:10:35.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:10:35.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:10:35.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:10:35.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:10:35.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:10:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:10:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.465416 -999.00  +12.60  13.37     71   +7.50 1 2 1 1 1   888    0 4.69 -21.21 ----- 10.9 13.4 297.8 18.0 18.9 -21.0 18.2 -22.2 17.9 -21.0 18.8 -20.3
2026-04-15T13:10:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:10:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:10:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.465416
2026-04-15T13:10:35.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:10:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:10:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:10:35.046 [DEBUG] [Thread-19465] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:10:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:10:35.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:10:35.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:10:08', tmtdew=6.91233, humidity=62.9639, cloud=0.0, wind=13.8168, temperature=13.2711, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:10:11.942', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:10:35.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:10:35.305 [DEBUG] [Thread-19468] [transport.py] [_log()] starting thread (client mode): 0xf13e1780
2026-04-15T13:10:35.305 [DEBUG] [Thread-19468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:10:35.320 [DEBUG] [Thread-19468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:10:35.320 [INFO] [Thread-19468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:10:35.327 [DEBUG] [Thread-19468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:10:35.327 [DEBUG] [Thread-19468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:10:35.327 [DEBUG] [Thread-19468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:10:35.327 [DEBUG] [Thread-19468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:10:35.327 [DEBUG] [Thread-19468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:10:35.327 [DEBUG] [Thread-19468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:10:35.328 [DEBUG] [Thread-19468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:10:35.328 [DEBUG] [Thread-19468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:10:35.328 [DEBUG] [Thread-19468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:10:35.328 [DEBUG] [Thread-19468] [transport.py] [_log()] client lang: <none>
2026-04-15T13:10:35.328 [DEBUG] [Thread-19468] [transport.py] [_log()] server lang: <none>
2026-04-15T13:10:35.328 [DEBUG] [Thread-19468] [transport.py] [_log()] kex follows: False
2026-04-15T13:10:35.328 [DEBUG] [Thread-19468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:10:35.328 [DEBUG] [Thread-19468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:10:35.328 [DEBUG] [Thread-19468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:10:35.328 [DEBUG] [Thread-19468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:10:35.328 [DEBUG] [Thread-19468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:10:35.328 [DEBUG] [Thread-19468] [transport.py] [_log()] Compression: none
2026-04-15T13:10:35.329 [DEBUG] [Thread-19468] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:10:35.386 [DEBUG] [Thread-19468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:10:35.386 [DEBUG] [Thread-19468] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:10:35.387 [DEBUG] [Thread-19468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:10:35.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:10:35.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:10:35.444 [DEBUG] [Thread-19468] [transport.py] [_log()] userauth is OK
2026-04-15T13:10:35.444 [DEBUG] [Thread-19468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:10:35.444 [DEBUG] [Thread-19468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:10:35.444 [DEBUG] [Thread-19468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:10:35.445 [DEBUG] [Thread-19468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:10:35.467 [INFO] [Thread-19468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:10:35.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:10:35.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:10:36.360 [DEBUG] [Thread-19468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:10:36.360 [DEBUG] [Thread-19468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:10:36.408 [DEBUG] [Thread-19468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:10:36.409 [DEBUG] [Thread-19468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:10:36.417 [DEBUG] [Thread-19468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:10:36.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:10:36.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')
2026-04-15T13:10:36.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
2026-04-15T13:10:36.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:10:36.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:10:36.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:10:36.449 [DEBUG] [Thread-19468] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:10:44.073 [DEBUG] [Thread-19470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:10:52.409 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:10:52.410 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:10:59.118 [DEBUG] [Thread-19471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:11:06.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:11:06.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:11:06.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
2026-04-15T13:11:07.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 10, 44), 7.26734, 61.5577, 0.0, 16.7616, 14.2096, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:11:07.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:10:44
2026-04-15T13:11:08.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:11:08.552 [DEBUG] [Thread-19472] [transport.py] [_log()] starting thread (client mode): 0xee9e7b20
2026-04-15T13:11:08.552 [DEBUG] [Thread-19472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:11:08.572 [DEBUG] [Thread-19472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:11:08.573 [INFO] [Thread-19472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:11:08.576 [DEBUG] [Thread-19472] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:11:08.576 [DEBUG] [Thread-19472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:11:08.576 [DEBUG] [Thread-19472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:11:08.576 [DEBUG] [Thread-19472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:11:08.576 [DEBUG] [Thread-19472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:11:08.576 [DEBUG] [Thread-19472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:11:08.576 [DEBUG] [Thread-19472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:11:08.576 [DEBUG] [Thread-19472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:11:08.577 [DEBUG] [Thread-19472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:11:08.577 [DEBUG] [Thread-19472] [transport.py] [_log()] client lang: <none>
2026-04-15T13:11:08.577 [DEBUG] [Thread-19472] [transport.py] [_log()] server lang: <none>
2026-04-15T13:11:08.577 [DEBUG] [Thread-19472] [transport.py] [_log()] kex follows: False
2026-04-15T13:11:08.577 [DEBUG] [Thread-19472] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:11:08.577 [DEBUG] [Thread-19472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:11:08.577 [DEBUG] [Thread-19472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:11:08.577 [DEBUG] [Thread-19472] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:11:08.577 [DEBUG] [Thread-19472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:11:08.577 [DEBUG] [Thread-19472] [transport.py] [_log()] Compression: none
2026-04-15T13:11:08.577 [DEBUG] [Thread-19472] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:11:08.590 [DEBUG] [Thread-19472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:11:08.591 [DEBUG] [Thread-19472] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:11:08.591 [DEBUG] [Thread-19472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:11:08.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:11:08.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:11:08.592 [DEBUG] [Thread-19472] [transport.py] [_log()] userauth is OK
2026-04-15T13:11:08.592 [DEBUG] [Thread-19472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:11:08.592 [DEBUG] [Thread-19472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:11:08.593 [DEBUG] [Thread-19472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:11:08.593 [DEBUG] [Thread-19472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:11:08.615 [INFO] [Thread-19472] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:11:08.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:11:09.214 [DEBUG] [Thread-19472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:11:09.215 [DEBUG] [Thread-19472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:11:09.215 [DEBUG] [Thread-19472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:11:09.255 [DEBUG] [Thread-19472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:11:09.255 [DEBUG] [Thread-19472] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:11:09.258 [DEBUG] [Thread-19472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:11:09.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:11:09.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:11:09.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:11:09.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:11:09.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:11:09.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:11:09.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:11:09.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:11:09.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:11:09.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.465763 -999.00  +12.80  11.51     71   +7.70 1 2 1 1 1   888    0 4.73 -21.35 ----- 13.1 11.5 296.2 13.0 19.0 -20.4 18.4 -20.0 18.1 -18.8 19.0 -17.5
2026-04-15T13:11:09.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:11:09.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:11:09.275 [DEBUG] [Thread-19472] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:11:09.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.465763
2026-04-15T13:11:09.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:11:09.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:11:09.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:11:09.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:11:09.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:11:09.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:10:44', tmtdew=7.26734, humidity=61.5577, cloud=0.0, wind=16.7616, temperature=14.2096, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:10:41.923', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:11:09.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:11:09.528 [DEBUG] [Thread-19475] [transport.py] [_log()] starting thread (client mode): 0xee98ea10
2026-04-15T13:11:09.529 [DEBUG] [Thread-19475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:11:09.548 [DEBUG] [Thread-19475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:11:09.548 [INFO] [Thread-19475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:11:09.555 [DEBUG] [Thread-19475] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:11:09.555 [DEBUG] [Thread-19475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:11:09.555 [DEBUG] [Thread-19475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:11:09.556 [DEBUG] [Thread-19475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:11:09.556 [DEBUG] [Thread-19475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:11:09.556 [DEBUG] [Thread-19475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:11:09.556 [DEBUG] [Thread-19475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:11:09.556 [DEBUG] [Thread-19475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:11:09.556 [DEBUG] [Thread-19475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:11:09.556 [DEBUG] [Thread-19475] [transport.py] [_log()] client lang: <none>
2026-04-15T13:11:09.556 [DEBUG] [Thread-19475] [transport.py] [_log()] server lang: <none>
2026-04-15T13:11:09.556 [DEBUG] [Thread-19475] [transport.py] [_log()] kex follows: False
2026-04-15T13:11:09.556 [DEBUG] [Thread-19475] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:11:09.556 [DEBUG] [Thread-19475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:11:09.557 [DEBUG] [Thread-19475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:11:09.557 [DEBUG] [Thread-19475] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:11:09.557 [DEBUG] [Thread-19475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:11:09.557 [DEBUG] [Thread-19475] [transport.py] [_log()] Compression: none
2026-04-15T13:11:09.557 [DEBUG] [Thread-19475] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:11:09.611 [DEBUG] [Thread-19475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:11:09.612 [DEBUG] [Thread-19475] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:11:09.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:11:09.613 [DEBUG] [Thread-19475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:11:09.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:11:09.668 [DEBUG] [Thread-19475] [transport.py] [_log()] userauth is OK
2026-04-15T13:11:09.668 [DEBUG] [Thread-19475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:11:09.668 [DEBUG] [Thread-19475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:11:09.669 [DEBUG] [Thread-19475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:11:09.669 [DEBUG] [Thread-19475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:11:09.695 [INFO] [Thread-19475] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:11:09.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:11:09.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:11:10.506 [DEBUG] [Thread-19475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:11:10.507 [DEBUG] [Thread-19475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:11:10.554 [DEBUG] [Thread-19475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:11:10.554 [DEBUG] [Thread-19475] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:11:10.563 [DEBUG] [Thread-19475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:11:10.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:11:10.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')
2026-04-15T13:11:10.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
2026-04-15T13:11:10.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:11:10.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:11:10.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:11:10.599 [DEBUG] [Thread-19475] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:11:14.150 [DEBUG] [Thread-19477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:11:20.201 [DEBUG] [Thread-19478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:11:29.194 [DEBUG] [Thread-19479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:11:40.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:11:40.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:11:40.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
2026-04-15T13:11:41.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 11, 19), 6.90753, 62.6627, 0.0, 12.8106, 13.3384, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:11:41.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:11:19
2026-04-15T13:11:42.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:11:42.714 [DEBUG] [Thread-19480] [transport.py] [_log()] starting thread (client mode): 0xf13e05b0
2026-04-15T13:11:42.714 [DEBUG] [Thread-19480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:11:42.733 [DEBUG] [Thread-19480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:11:42.733 [INFO] [Thread-19480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:11:42.736 [DEBUG] [Thread-19480] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:11:42.737 [DEBUG] [Thread-19480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:11:42.737 [DEBUG] [Thread-19480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:11:42.737 [DEBUG] [Thread-19480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:11:42.737 [DEBUG] [Thread-19480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:11:42.737 [DEBUG] [Thread-19480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:11:42.737 [DEBUG] [Thread-19480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:11:42.737 [DEBUG] [Thread-19480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:11:42.737 [DEBUG] [Thread-19480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:11:42.737 [DEBUG] [Thread-19480] [transport.py] [_log()] client lang: <none>
2026-04-15T13:11:42.737 [DEBUG] [Thread-19480] [transport.py] [_log()] server lang: <none>
2026-04-15T13:11:42.737 [DEBUG] [Thread-19480] [transport.py] [_log()] kex follows: False
2026-04-15T13:11:42.738 [DEBUG] [Thread-19480] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:11:42.738 [DEBUG] [Thread-19480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:11:42.738 [DEBUG] [Thread-19480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:11:42.738 [DEBUG] [Thread-19480] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:11:42.738 [DEBUG] [Thread-19480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:11:42.738 [DEBUG] [Thread-19480] [transport.py] [_log()] Compression: none
2026-04-15T13:11:42.738 [DEBUG] [Thread-19480] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:11:42.754 [DEBUG] [Thread-19480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:11:42.754 [DEBUG] [Thread-19480] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:11:42.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:11:42.755 [DEBUG] [Thread-19480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:11:42.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:11:42.756 [DEBUG] [Thread-19480] [transport.py] [_log()] userauth is OK
2026-04-15T13:11:42.756 [DEBUG] [Thread-19480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:11:42.756 [DEBUG] [Thread-19480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:11:42.756 [DEBUG] [Thread-19480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:11:42.756 [DEBUG] [Thread-19480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:11:42.776 [INFO] [Thread-19480] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:11:42.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:11:43.360 [DEBUG] [Thread-19480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:11:43.360 [DEBUG] [Thread-19480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:11:43.361 [DEBUG] [Thread-19480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:11:43.401 [DEBUG] [Thread-19480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:11:43.401 [DEBUG] [Thread-19480] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:11:43.404 [DEBUG] [Thread-19480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:11:43.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:11:43.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:11:43.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:11:43.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:11:43.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:11:43.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:11:43.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:11:43.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:11:43.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:11:43.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.466110 -999.00  +13.20  16.82     71   +8.20 1 2 1 1 1   888    0 4.63 -20.09 ----- 18.6 16.8 305.8 23.2 19.4 -18.5 18.6 -20.3 18.3 -16.4 19.3 -18.0
2026-04-15T13:11:43.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:11:43.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:11:43.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.466110
2026-04-15T13:11:43.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:11:43.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:11:43.431 [DEBUG] [Thread-19480] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:11:43.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:11:43.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:11:43.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:11:43.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:11:19', tmtdew=6.90753, humidity=62.6627, cloud=0.0, wind=12.8106, temperature=13.3384, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:11:11.904', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:11:43.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:11:43.689 [DEBUG] [Thread-19483] [transport.py] [_log()] starting thread (client mode): 0xee9026e0
2026-04-15T13:11:43.690 [DEBUG] [Thread-19483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:11:43.704 [DEBUG] [Thread-19483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:11:43.705 [INFO] [Thread-19483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:11:43.712 [DEBUG] [Thread-19483] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:11:43.712 [DEBUG] [Thread-19483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:11:43.712 [DEBUG] [Thread-19483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:11:43.712 [DEBUG] [Thread-19483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:11:43.712 [DEBUG] [Thread-19483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:11:43.712 [DEBUG] [Thread-19483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:11:43.712 [DEBUG] [Thread-19483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:11:43.712 [DEBUG] [Thread-19483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:11:43.712 [DEBUG] [Thread-19483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:11:43.713 [DEBUG] [Thread-19483] [transport.py] [_log()] client lang: <none>
2026-04-15T13:11:43.713 [DEBUG] [Thread-19483] [transport.py] [_log()] server lang: <none>
2026-04-15T13:11:43.713 [DEBUG] [Thread-19483] [transport.py] [_log()] kex follows: False
2026-04-15T13:11:43.713 [DEBUG] [Thread-19483] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:11:43.713 [DEBUG] [Thread-19483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:11:43.713 [DEBUG] [Thread-19483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:11:43.713 [DEBUG] [Thread-19483] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:11:43.713 [DEBUG] [Thread-19483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:11:43.713 [DEBUG] [Thread-19483] [transport.py] [_log()] Compression: none
2026-04-15T13:11:43.713 [DEBUG] [Thread-19483] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:11:43.768 [DEBUG] [Thread-19483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:11:43.768 [DEBUG] [Thread-19483] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:11:43.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:11:43.769 [DEBUG] [Thread-19483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:11:43.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:11:43.828 [DEBUG] [Thread-19483] [transport.py] [_log()] userauth is OK
2026-04-15T13:11:43.828 [DEBUG] [Thread-19483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:11:43.828 [DEBUG] [Thread-19483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:11:43.829 [DEBUG] [Thread-19483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:11:43.829 [DEBUG] [Thread-19483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:11:43.854 [INFO] [Thread-19483] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:11:43.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:11:43.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:11:44.226 [DEBUG] [Thread-19485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:11:44.660 [DEBUG] [Thread-19483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:11:44.660 [DEBUG] [Thread-19483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:11:44.710 [DEBUG] [Thread-19483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:11:44.711 [DEBUG] [Thread-19483] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:11:44.719 [DEBUG] [Thread-19483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:11:44.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:11:44.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')
2026-04-15T13:11:44.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
2026-04-15T13:11:44.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:11:44.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:11:44.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:11:44.755 [DEBUG] [Thread-19483] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:11:52.552 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:11:52.553 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:11:59.270 [DEBUG] [Thread-19486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:12:14.302 [DEBUG] [Thread-19487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:12:14.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:12:14.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:12:14.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
2026-04-15T13:12:16.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 11, 55), 6.99046, 62.5632, 0.0, 22.9374, 13.8541, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:12:16.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:11:55
2026-04-15T13:12:16.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:12:17.075 [DEBUG] [Thread-19488] [transport.py] [_log()] starting thread (client mode): 0xf13656c0
2026-04-15T13:12:17.075 [DEBUG] [Thread-19488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:12:17.094 [DEBUG] [Thread-19488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:12:17.094 [INFO] [Thread-19488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:12:17.097 [DEBUG] [Thread-19488] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:12:17.097 [DEBUG] [Thread-19488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:12:17.097 [DEBUG] [Thread-19488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:12:17.097 [DEBUG] [Thread-19488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:12:17.097 [DEBUG] [Thread-19488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:12:17.097 [DEBUG] [Thread-19488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:12:17.097 [DEBUG] [Thread-19488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:12:17.097 [DEBUG] [Thread-19488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:12:17.098 [DEBUG] [Thread-19488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:12:17.098 [DEBUG] [Thread-19488] [transport.py] [_log()] client lang: <none>
2026-04-15T13:12:17.098 [DEBUG] [Thread-19488] [transport.py] [_log()] server lang: <none>
2026-04-15T13:12:17.098 [DEBUG] [Thread-19488] [transport.py] [_log()] kex follows: False
2026-04-15T13:12:17.098 [DEBUG] [Thread-19488] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:12:17.098 [DEBUG] [Thread-19488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:12:17.098 [DEBUG] [Thread-19488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:12:17.098 [DEBUG] [Thread-19488] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:12:17.098 [DEBUG] [Thread-19488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:12:17.098 [DEBUG] [Thread-19488] [transport.py] [_log()] Compression: none
2026-04-15T13:12:17.098 [DEBUG] [Thread-19488] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:12:17.116 [DEBUG] [Thread-19488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:12:17.116 [DEBUG] [Thread-19488] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:12:17.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:12:17.117 [DEBUG] [Thread-19488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:12:17.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:12:17.118 [DEBUG] [Thread-19488] [transport.py] [_log()] userauth is OK
2026-04-15T13:12:17.118 [DEBUG] [Thread-19488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:12:17.118 [DEBUG] [Thread-19488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:12:17.118 [DEBUG] [Thread-19488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:12:17.118 [DEBUG] [Thread-19488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:12:17.136 [INFO] [Thread-19488] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:12:17.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:12:17.775 [DEBUG] [Thread-19488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:12:17.775 [DEBUG] [Thread-19488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:12:17.776 [DEBUG] [Thread-19488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:12:17.816 [DEBUG] [Thread-19488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:12:17.816 [DEBUG] [Thread-19488] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:12:17.819 [DEBUG] [Thread-19488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:12:17.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:12:17.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:12:17.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:12:17.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:12:17.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:12:17.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:12:17.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:12:17.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:12:17.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:12:17.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.466805 -999.00  +13.80  14.49     67   +7.80 1 2 1 1 1   888    0 4.84 -14.50 ----- 18.1 14.5 352.2 29.7 19.9 -20.0 18.9 -20.2 18.8 -15.8 19.8 -17.4
2026-04-15T13:12:17.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:12:17.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:12:17.841 [DEBUG] [Thread-19488] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:12:17.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.466805
2026-04-15T13:12:17.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:12:17.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:12:17.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:12:17.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:12:17.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:12:17.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:11:55', tmtdew=6.99046, humidity=62.5632, cloud=0.0, wind=22.9374, temperature=13.8541, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:12:11.952', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:12:18.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:12:18.096 [DEBUG] [Thread-19491] [transport.py] [_log()] starting thread (client mode): 0xf13c8a60
2026-04-15T13:12:18.096 [DEBUG] [Thread-19491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:12:18.110 [DEBUG] [Thread-19491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:12:18.110 [INFO] [Thread-19491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:12:18.118 [DEBUG] [Thread-19491] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:12:18.118 [DEBUG] [Thread-19491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:12:18.118 [DEBUG] [Thread-19491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:12:18.118 [DEBUG] [Thread-19491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:12:18.118 [DEBUG] [Thread-19491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:12:18.118 [DEBUG] [Thread-19491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:12:18.118 [DEBUG] [Thread-19491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:12:18.118 [DEBUG] [Thread-19491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:12:18.118 [DEBUG] [Thread-19491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:12:18.118 [DEBUG] [Thread-19491] [transport.py] [_log()] client lang: <none>
2026-04-15T13:12:18.119 [DEBUG] [Thread-19491] [transport.py] [_log()] server lang: <none>
2026-04-15T13:12:18.119 [DEBUG] [Thread-19491] [transport.py] [_log()] kex follows: False
2026-04-15T13:12:18.119 [DEBUG] [Thread-19491] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:12:18.119 [DEBUG] [Thread-19491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:12:18.119 [DEBUG] [Thread-19491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:12:18.119 [DEBUG] [Thread-19491] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:12:18.119 [DEBUG] [Thread-19491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:12:18.119 [DEBUG] [Thread-19491] [transport.py] [_log()] Compression: none
2026-04-15T13:12:18.119 [DEBUG] [Thread-19491] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:12:18.176 [DEBUG] [Thread-19491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:12:18.176 [DEBUG] [Thread-19491] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:12:18.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:12:18.177 [DEBUG] [Thread-19491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:12:18.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:12:18.237 [DEBUG] [Thread-19491] [transport.py] [_log()] userauth is OK
2026-04-15T13:12:18.237 [DEBUG] [Thread-19491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:12:18.237 [DEBUG] [Thread-19491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:12:18.237 [DEBUG] [Thread-19491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:12:18.237 [DEBUG] [Thread-19491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:12:18.264 [INFO] [Thread-19491] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:12:18.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:12:18.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:12:19.089 [DEBUG] [Thread-19491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:12:19.089 [DEBUG] [Thread-19491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:12:19.137 [DEBUG] [Thread-19491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:12:19.137 [DEBUG] [Thread-19491] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:12:19.146 [DEBUG] [Thread-19491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:12:19.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:12:19.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')
2026-04-15T13:12:19.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
2026-04-15T13:12:19.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:12:19.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:12:19.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:12:19.180 [DEBUG] [Thread-19491] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:12:20.309 [DEBUG] [Thread-19493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:12:29.333 [DEBUG] [Thread-19494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:12:44.376 [DEBUG] [Thread-19495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:12:49.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:12:49.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:12:49.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
2026-04-15T13:12:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 12, 30), 7.10486, 62.099, 0.0, 20.3443, 13.9037, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:12:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:12:30
2026-04-15T13:12:50.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:12:51.262 [DEBUG] [Thread-19496] [transport.py] [_log()] starting thread (client mode): 0xee904a60
2026-04-15T13:12:51.262 [DEBUG] [Thread-19496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:12:51.282 [DEBUG] [Thread-19496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:12:51.282 [INFO] [Thread-19496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:12:51.285 [DEBUG] [Thread-19496] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:12:51.286 [DEBUG] [Thread-19496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:12:51.286 [DEBUG] [Thread-19496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:12:51.286 [DEBUG] [Thread-19496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:12:51.286 [DEBUG] [Thread-19496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:12:51.286 [DEBUG] [Thread-19496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:12:51.286 [DEBUG] [Thread-19496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:12:51.286 [DEBUG] [Thread-19496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:12:51.286 [DEBUG] [Thread-19496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:12:51.286 [DEBUG] [Thread-19496] [transport.py] [_log()] client lang: <none>
2026-04-15T13:12:51.286 [DEBUG] [Thread-19496] [transport.py] [_log()] server lang: <none>
2026-04-15T13:12:51.287 [DEBUG] [Thread-19496] [transport.py] [_log()] kex follows: False
2026-04-15T13:12:51.287 [DEBUG] [Thread-19496] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:12:51.287 [DEBUG] [Thread-19496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:12:51.287 [DEBUG] [Thread-19496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:12:51.287 [DEBUG] [Thread-19496] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:12:51.287 [DEBUG] [Thread-19496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:12:51.287 [DEBUG] [Thread-19496] [transport.py] [_log()] Compression: none
2026-04-15T13:12:51.287 [DEBUG] [Thread-19496] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:12:51.304 [DEBUG] [Thread-19496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:12:51.304 [DEBUG] [Thread-19496] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:12:51.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:12:51.305 [DEBUG] [Thread-19496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:12:51.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:12:51.306 [DEBUG] [Thread-19496] [transport.py] [_log()] userauth is OK
2026-04-15T13:12:51.306 [DEBUG] [Thread-19496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:12:51.306 [DEBUG] [Thread-19496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:12:51.306 [DEBUG] [Thread-19496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:12:51.306 [DEBUG] [Thread-19496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:12:51.325 [INFO] [Thread-19496] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:12:51.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:12:51.994 [DEBUG] [Thread-19496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:12:51.995 [DEBUG] [Thread-19496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:12:51.995 [DEBUG] [Thread-19496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:12:52.035 [DEBUG] [Thread-19496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:12:52.035 [DEBUG] [Thread-19496] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:12:52.038 [DEBUG] [Thread-19496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:12:52.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:12:52.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:12:52.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:12:52.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:12:52.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:12:52.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:12:52.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:12:52.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:12:52.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:12:52.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.467152 -999.00  +13.50  21.41     65   +7.30 1 2 1 1 1   888    0 5.00 -9.50 ----- 15.8 21.4 19.2 31.8 19.9 -22.1 18.8 -20.5 18.8 -16.9 19.7 -17.5
2026-04-15T13:12:52.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:12:52.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:12:52.062 [DEBUG] [Thread-19496] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:12:52.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.467152
2026-04-15T13:12:52.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:12:52.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:12:52.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:12:52.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:12:52.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:12:52.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:12:30', tmtdew=7.10486, humidity=62.099, cloud=0.0, wind=20.3443, temperature=13.9037, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:12:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:12:52.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:12:52.327 [DEBUG] [Thread-19499] [transport.py] [_log()] starting thread (client mode): 0xf1337910
2026-04-15T13:12:52.327 [DEBUG] [Thread-19499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:12:52.341 [DEBUG] [Thread-19499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:12:52.342 [INFO] [Thread-19499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:12:52.349 [DEBUG] [Thread-19499] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:12:52.349 [DEBUG] [Thread-19499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:12:52.349 [DEBUG] [Thread-19499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:12:52.349 [DEBUG] [Thread-19499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:12:52.349 [DEBUG] [Thread-19499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:12:52.349 [DEBUG] [Thread-19499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:12:52.349 [DEBUG] [Thread-19499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:12:52.350 [DEBUG] [Thread-19499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:12:52.350 [DEBUG] [Thread-19499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:12:52.350 [DEBUG] [Thread-19499] [transport.py] [_log()] client lang: <none>
2026-04-15T13:12:52.350 [DEBUG] [Thread-19499] [transport.py] [_log()] server lang: <none>
2026-04-15T13:12:52.350 [DEBUG] [Thread-19499] [transport.py] [_log()] kex follows: False
2026-04-15T13:12:52.350 [DEBUG] [Thread-19499] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:12:52.350 [DEBUG] [Thread-19499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:12:52.350 [DEBUG] [Thread-19499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:12:52.350 [DEBUG] [Thread-19499] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:12:52.350 [DEBUG] [Thread-19499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:12:52.350 [DEBUG] [Thread-19499] [transport.py] [_log()] Compression: none
2026-04-15T13:12:52.350 [DEBUG] [Thread-19499] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:12:52.408 [DEBUG] [Thread-19499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:12:52.408 [DEBUG] [Thread-19499] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:12:52.409 [DEBUG] [Thread-19499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:12:52.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:12:52.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:12:52.467 [DEBUG] [Thread-19499] [transport.py] [_log()] userauth is OK
2026-04-15T13:12:52.467 [DEBUG] [Thread-19499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:12:52.468 [DEBUG] [Thread-19499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:12:52.468 [DEBUG] [Thread-19499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:12:52.468 [DEBUG] [Thread-19499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:12:52.493 [INFO] [Thread-19499] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:12:52.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:12:52.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:12:52.695 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:12:52.696 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:12:53.313 [DEBUG] [Thread-19499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:12:53.314 [DEBUG] [Thread-19499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:12:53.361 [DEBUG] [Thread-19499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:12:53.361 [DEBUG] [Thread-19499] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:12:53.369 [DEBUG] [Thread-19499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:12:53.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:12:53.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')
2026-04-15T13:12:53.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
2026-04-15T13:12:53.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:12:53.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:12:53.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:12:53.403 [DEBUG] [Thread-19499] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:12:59.406 [DEBUG] [Thread-19501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:13:14.451 [DEBUG] [Thread-19502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:13:20.402 [DEBUG] [Thread-19503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:13:23.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:13:23.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:13:23.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
2026-04-15T13:13:24.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 13, 6), 7.43433, 60.7897, 0.0, 17.8924, 14.0032, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:13:24.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:13:06
2026-04-15T13:13:25.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:13:25.491 [DEBUG] [Thread-19504] [transport.py] [_log()] starting thread (client mode): 0xee98bc70
2026-04-15T13:13:25.492 [DEBUG] [Thread-19504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:13:25.511 [DEBUG] [Thread-19504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:13:25.511 [INFO] [Thread-19504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:13:25.514 [DEBUG] [Thread-19504] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:13:25.514 [DEBUG] [Thread-19504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:13:25.514 [DEBUG] [Thread-19504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:13:25.515 [DEBUG] [Thread-19504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:13:25.515 [DEBUG] [Thread-19504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:13:25.515 [DEBUG] [Thread-19504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:13:25.515 [DEBUG] [Thread-19504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:13:25.515 [DEBUG] [Thread-19504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:13:25.515 [DEBUG] [Thread-19504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:13:25.515 [DEBUG] [Thread-19504] [transport.py] [_log()] client lang: <none>
2026-04-15T13:13:25.515 [DEBUG] [Thread-19504] [transport.py] [_log()] server lang: <none>
2026-04-15T13:13:25.515 [DEBUG] [Thread-19504] [transport.py] [_log()] kex follows: False
2026-04-15T13:13:25.515 [DEBUG] [Thread-19504] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:13:25.515 [DEBUG] [Thread-19504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:13:25.515 [DEBUG] [Thread-19504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:13:25.516 [DEBUG] [Thread-19504] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:13:25.516 [DEBUG] [Thread-19504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:13:25.516 [DEBUG] [Thread-19504] [transport.py] [_log()] Compression: none
2026-04-15T13:13:25.516 [DEBUG] [Thread-19504] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:13:25.532 [DEBUG] [Thread-19504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:13:25.533 [DEBUG] [Thread-19504] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:13:25.533 [DEBUG] [Thread-19504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:13:25.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:13:25.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:13:25.576 [DEBUG] [Thread-19504] [transport.py] [_log()] userauth is OK
2026-04-15T13:13:25.576 [DEBUG] [Thread-19504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:13:25.576 [DEBUG] [Thread-19504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:13:25.577 [DEBUG] [Thread-19504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:13:25.577 [DEBUG] [Thread-19504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:13:25.600 [INFO] [Thread-19504] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:13:25.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:13:26.255 [DEBUG] [Thread-19504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:13:26.255 [DEBUG] [Thread-19504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:13:26.256 [DEBUG] [Thread-19504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:13:26.296 [DEBUG] [Thread-19504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:13:26.296 [DEBUG] [Thread-19504] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:13:26.298 [DEBUG] [Thread-19504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:13:26.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:13:26.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:13:26.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:13:26.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:13:26.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:13:26.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:13:26.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:13:26.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:13:26.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:13:26.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.467499 -999.00  +13.30  13.82     65   +7.10 1 2 1 1 1   888    0 5.29 -0.42 ----- 14.4 13.8 7.5 22.9 19.9 -21.8 18.7 -21.0 18.7 -15.0 19.5 -18.1
2026-04-15T13:13:26.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:13:26.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:13:26.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.467499
2026-04-15T13:13:26.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:13:26.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:13:26.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:13:26.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:13:26.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:13:26.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:13:06', tmtdew=7.43433, humidity=60.7897, cloud=0.0, wind=17.8924, temperature=14.0032, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:13:11.914', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:13:26.318 [DEBUG] [Thread-19504] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:13:26.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:13:26.536 [DEBUG] [Thread-19507] [transport.py] [_log()] starting thread (client mode): 0xf13c92a0
2026-04-15T13:13:26.536 [DEBUG] [Thread-19507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:13:26.551 [DEBUG] [Thread-19507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:13:26.551 [INFO] [Thread-19507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:13:26.558 [DEBUG] [Thread-19507] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:13:26.558 [DEBUG] [Thread-19507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:13:26.559 [DEBUG] [Thread-19507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:13:26.559 [DEBUG] [Thread-19507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:13:26.559 [DEBUG] [Thread-19507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:13:26.559 [DEBUG] [Thread-19507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:13:26.559 [DEBUG] [Thread-19507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:13:26.559 [DEBUG] [Thread-19507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:13:26.559 [DEBUG] [Thread-19507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:13:26.559 [DEBUG] [Thread-19507] [transport.py] [_log()] client lang: <none>
2026-04-15T13:13:26.559 [DEBUG] [Thread-19507] [transport.py] [_log()] server lang: <none>
2026-04-15T13:13:26.559 [DEBUG] [Thread-19507] [transport.py] [_log()] kex follows: False
2026-04-15T13:13:26.559 [DEBUG] [Thread-19507] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:13:26.559 [DEBUG] [Thread-19507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:13:26.560 [DEBUG] [Thread-19507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:13:26.560 [DEBUG] [Thread-19507] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:13:26.560 [DEBUG] [Thread-19507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:13:26.560 [DEBUG] [Thread-19507] [transport.py] [_log()] Compression: none
2026-04-15T13:13:26.560 [DEBUG] [Thread-19507] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:13:26.616 [DEBUG] [Thread-19507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:13:26.617 [DEBUG] [Thread-19507] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:13:26.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:13:26.617 [DEBUG] [Thread-19507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:13:26.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:13:26.673 [DEBUG] [Thread-19507] [transport.py] [_log()] userauth is OK
2026-04-15T13:13:26.673 [DEBUG] [Thread-19507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:13:26.673 [DEBUG] [Thread-19507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:13:26.673 [DEBUG] [Thread-19507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:13:26.674 [DEBUG] [Thread-19507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:13:26.698 [INFO] [Thread-19507] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:13:26.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:13:26.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:13:27.537 [DEBUG] [Thread-19507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:13:27.537 [DEBUG] [Thread-19507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:13:27.585 [DEBUG] [Thread-19507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:13:27.585 [DEBUG] [Thread-19507] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:13:27.594 [DEBUG] [Thread-19507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:13:27.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:13:27.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')
2026-04-15T13:13:27.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
2026-04-15T13:13:27.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:13:27.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:13:27.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:13:27.629 [DEBUG] [Thread-19507] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:13:29.482 [DEBUG] [Thread-19509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:13:44.525 [DEBUG] [Thread-19510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:13:52.836 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:13:52.837 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:13:57.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:13:57.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:13:57.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
2026-04-15T13:13:58.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 13, 41), 8.48319, 56.7173, 0.0, 14.292, 14.6398, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:13:58.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:13:41
2026-04-15T13:13:59.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:13:59.554 [DEBUG] [Thread-19511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:13:59.702 [DEBUG] [Thread-19512] [transport.py] [_log()] starting thread (client mode): 0xee98bc70
2026-04-15T13:13:59.702 [DEBUG] [Thread-19512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:13:59.721 [DEBUG] [Thread-19512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:13:59.721 [INFO] [Thread-19512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:13:59.724 [DEBUG] [Thread-19512] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:13:59.724 [DEBUG] [Thread-19512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:13:59.724 [DEBUG] [Thread-19512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:13:59.725 [DEBUG] [Thread-19512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:13:59.725 [DEBUG] [Thread-19512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:13:59.725 [DEBUG] [Thread-19512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:13:59.725 [DEBUG] [Thread-19512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:13:59.725 [DEBUG] [Thread-19512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:13:59.725 [DEBUG] [Thread-19512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:13:59.725 [DEBUG] [Thread-19512] [transport.py] [_log()] client lang: <none>
2026-04-15T13:13:59.725 [DEBUG] [Thread-19512] [transport.py] [_log()] server lang: <none>
2026-04-15T13:13:59.725 [DEBUG] [Thread-19512] [transport.py] [_log()] kex follows: False
2026-04-15T13:13:59.725 [DEBUG] [Thread-19512] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:13:59.725 [DEBUG] [Thread-19512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:13:59.726 [DEBUG] [Thread-19512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:13:59.726 [DEBUG] [Thread-19512] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:13:59.726 [DEBUG] [Thread-19512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:13:59.726 [DEBUG] [Thread-19512] [transport.py] [_log()] Compression: none
2026-04-15T13:13:59.726 [DEBUG] [Thread-19512] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:13:59.743 [DEBUG] [Thread-19512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:13:59.744 [DEBUG] [Thread-19512] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:13:59.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:13:59.744 [DEBUG] [Thread-19512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:13:59.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:13:59.745 [DEBUG] [Thread-19512] [transport.py] [_log()] userauth is OK
2026-04-15T13:13:59.746 [DEBUG] [Thread-19512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:13:59.746 [DEBUG] [Thread-19512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:13:59.746 [DEBUG] [Thread-19512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:13:59.746 [DEBUG] [Thread-19512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:13:59.771 [INFO] [Thread-19512] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:13:59.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:14:00.429 [DEBUG] [Thread-19512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:14:00.430 [DEBUG] [Thread-19512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:14:00.430 [DEBUG] [Thread-19512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:14:00.470 [DEBUG] [Thread-19512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:14:00.470 [DEBUG] [Thread-19512] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:14:00.473 [DEBUG] [Thread-19512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:14:00.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:14:00.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:14:00.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:14:00.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:14:00.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:14:00.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:14:00.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:14:00.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:14:00.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:14:00.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.467846 -999.00  +13.30  10.17     66   +7.10 1 2 1 1 1   888    0 5.58 6.49 ----- 10.9 10.2 15.0 18.7 20.0 -20.5 18.8 -19.7 18.9 -14.0 19.6 -18.1
2026-04-15T13:14:00.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:14:00.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:14:00.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.467846
2026-04-15T13:14:00.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:14:00.496 [DEBUG] [Thread-19512] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:14:00.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:14:00.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:14:00.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:14:00.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:14:00.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:13:41', tmtdew=8.48319, humidity=56.7173, cloud=0.0, wind=14.292, temperature=14.6398, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:13:41.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:14:00.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:14:00.763 [DEBUG] [Thread-19515] [transport.py] [_log()] starting thread (client mode): 0xee9e7e80
2026-04-15T13:14:00.763 [DEBUG] [Thread-19515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:14:00.777 [DEBUG] [Thread-19515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:14:00.777 [INFO] [Thread-19515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:14:00.784 [DEBUG] [Thread-19515] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:14:00.785 [DEBUG] [Thread-19515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:14:00.785 [DEBUG] [Thread-19515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:14:00.785 [DEBUG] [Thread-19515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:14:00.785 [DEBUG] [Thread-19515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:14:00.785 [DEBUG] [Thread-19515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:14:00.785 [DEBUG] [Thread-19515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:14:00.785 [DEBUG] [Thread-19515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:14:00.785 [DEBUG] [Thread-19515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:14:00.785 [DEBUG] [Thread-19515] [transport.py] [_log()] client lang: <none>
2026-04-15T13:14:00.785 [DEBUG] [Thread-19515] [transport.py] [_log()] server lang: <none>
2026-04-15T13:14:00.785 [DEBUG] [Thread-19515] [transport.py] [_log()] kex follows: False
2026-04-15T13:14:00.785 [DEBUG] [Thread-19515] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:14:00.786 [DEBUG] [Thread-19515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:14:00.786 [DEBUG] [Thread-19515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:14:00.786 [DEBUG] [Thread-19515] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:14:00.786 [DEBUG] [Thread-19515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:14:00.786 [DEBUG] [Thread-19515] [transport.py] [_log()] Compression: none
2026-04-15T13:14:00.786 [DEBUG] [Thread-19515] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:14:00.840 [DEBUG] [Thread-19515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:14:00.841 [DEBUG] [Thread-19515] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:14:00.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:14:00.842 [DEBUG] [Thread-19515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:14:00.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:14:00.897 [DEBUG] [Thread-19515] [transport.py] [_log()] userauth is OK
2026-04-15T13:14:00.897 [DEBUG] [Thread-19515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:14:00.897 [DEBUG] [Thread-19515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:14:00.897 [DEBUG] [Thread-19515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:14:00.897 [DEBUG] [Thread-19515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:14:00.919 [INFO] [Thread-19515] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:14:00.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:14:00.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:14:01.749 [DEBUG] [Thread-19515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:14:01.749 [DEBUG] [Thread-19515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:14:01.797 [DEBUG] [Thread-19515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:14:01.797 [DEBUG] [Thread-19515] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:14:01.806 [DEBUG] [Thread-19515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:14:01.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:14:01.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')
2026-04-15T13:14:01.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
2026-04-15T13:14:01.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:14:01.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:14:01.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:14:01.845 [DEBUG] [Thread-19515] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:14:14.584 [DEBUG] [Thread-19517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:14:20.478 [DEBUG] [Thread-19518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:14:29.627 [DEBUG] [Thread-19519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:14:31.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:14:31.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:14:31.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:14:33.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 14, 17), 8.09064, 58.2399, 0.0, 18.0688, 14.1036, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:14:33.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:14:17
2026-04-15T13:14:33.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:14:33.951 [DEBUG] [Thread-19520] [transport.py] [_log()] starting thread (client mode): 0xee900220
2026-04-15T13:14:33.951 [DEBUG] [Thread-19520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:14:33.972 [DEBUG] [Thread-19520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:14:33.972 [INFO] [Thread-19520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:14:33.976 [DEBUG] [Thread-19520] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:14:33.976 [DEBUG] [Thread-19520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:14:33.976 [DEBUG] [Thread-19520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:14:33.976 [DEBUG] [Thread-19520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:14:33.976 [DEBUG] [Thread-19520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:14:33.976 [DEBUG] [Thread-19520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:14:33.976 [DEBUG] [Thread-19520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:14:33.976 [DEBUG] [Thread-19520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:14:33.976 [DEBUG] [Thread-19520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:14:33.976 [DEBUG] [Thread-19520] [transport.py] [_log()] client lang: <none>
2026-04-15T13:14:33.976 [DEBUG] [Thread-19520] [transport.py] [_log()] server lang: <none>
2026-04-15T13:14:33.977 [DEBUG] [Thread-19520] [transport.py] [_log()] kex follows: False
2026-04-15T13:14:33.977 [DEBUG] [Thread-19520] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:14:33.977 [DEBUG] [Thread-19520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:14:33.977 [DEBUG] [Thread-19520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:14:33.977 [DEBUG] [Thread-19520] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:14:33.977 [DEBUG] [Thread-19520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:14:33.977 [DEBUG] [Thread-19520] [transport.py] [_log()] Compression: none
2026-04-15T13:14:33.977 [DEBUG] [Thread-19520] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:14:33.993 [DEBUG] [Thread-19520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:14:33.993 [DEBUG] [Thread-19520] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:14:33.994 [DEBUG] [Thread-19520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:14:33.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:14:33.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:14:33.995 [DEBUG] [Thread-19520] [transport.py] [_log()] userauth is OK
2026-04-15T13:14:33.995 [DEBUG] [Thread-19520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:14:33.995 [DEBUG] [Thread-19520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:14:33.995 [DEBUG] [Thread-19520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:14:33.996 [DEBUG] [Thread-19520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:14:34.020 [INFO] [Thread-19520] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:14:34.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:14:34.629 [DEBUG] [Thread-19520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:14:34.629 [DEBUG] [Thread-19520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:14:34.629 [DEBUG] [Thread-19520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:14:34.670 [DEBUG] [Thread-19520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:14:34.670 [DEBUG] [Thread-19520] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:14:34.673 [DEBUG] [Thread-19520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:14:34.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:14:34.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:14:34.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:14:34.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:14:34.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:14:34.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:14:34.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:14:34.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:14:34.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:14:34.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.468193 -999.00  +13.60  16.57     68   +7.80 1 2 1 1 1   888    0 5.67 10.35 ----- 19.7 16.6 317.4 23.9 20.2 -18.5 18.9 -17.2 19.1 -12.4 20.1 -15.1
2026-04-15T13:14:34.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:14:34.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:14:34.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.468193
2026-04-15T13:14:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:14:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:14:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:14:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:14:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:14:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:14:17', tmtdew=8.09064, humidity=58.2399, cloud=0.0, wind=18.0688, temperature=14.1036, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:14:11.875', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:14:34.691 [DEBUG] [Thread-19520] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:14:34.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:14:34.935 [DEBUG] [Thread-19523] [transport.py] [_log()] starting thread (client mode): 0xee989870
2026-04-15T13:14:34.935 [DEBUG] [Thread-19523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:14:34.951 [DEBUG] [Thread-19523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:14:34.951 [INFO] [Thread-19523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:14:34.958 [DEBUG] [Thread-19523] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:14:34.959 [DEBUG] [Thread-19523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:14:34.959 [DEBUG] [Thread-19523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:14:34.959 [DEBUG] [Thread-19523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:14:34.959 [DEBUG] [Thread-19523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:14:34.959 [DEBUG] [Thread-19523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:14:34.959 [DEBUG] [Thread-19523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:14:34.959 [DEBUG] [Thread-19523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:14:34.959 [DEBUG] [Thread-19523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:14:34.959 [DEBUG] [Thread-19523] [transport.py] [_log()] client lang: <none>
2026-04-15T13:14:34.959 [DEBUG] [Thread-19523] [transport.py] [_log()] server lang: <none>
2026-04-15T13:14:34.960 [DEBUG] [Thread-19523] [transport.py] [_log()] kex follows: False
2026-04-15T13:14:34.960 [DEBUG] [Thread-19523] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:14:34.960 [DEBUG] [Thread-19523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:14:34.960 [DEBUG] [Thread-19523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:14:34.960 [DEBUG] [Thread-19523] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:14:34.960 [DEBUG] [Thread-19523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:14:34.960 [DEBUG] [Thread-19523] [transport.py] [_log()] Compression: none
2026-04-15T13:14:34.960 [DEBUG] [Thread-19523] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:14:35.016 [DEBUG] [Thread-19523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:14:35.017 [DEBUG] [Thread-19523] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:14:35.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:14:35.017 [DEBUG] [Thread-19523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:14:35.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:14:35.073 [DEBUG] [Thread-19523] [transport.py] [_log()] userauth is OK
2026-04-15T13:14:35.074 [DEBUG] [Thread-19523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:14:35.074 [DEBUG] [Thread-19523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:14:35.074 [DEBUG] [Thread-19523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:14:35.074 [DEBUG] [Thread-19523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:14:35.099 [INFO] [Thread-19523] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:14:35.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:14:35.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:14:35.939 [DEBUG] [Thread-19523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:14:35.939 [DEBUG] [Thread-19523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:14:35.987 [DEBUG] [Thread-19523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:14:35.987 [DEBUG] [Thread-19523] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:14:35.995 [DEBUG] [Thread-19523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:14:36.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:14:36.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')
2026-04-15T13:14:36.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
2026-04-15T13:14:36.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:14:36.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:14:36.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:14:36.030 [DEBUG] [Thread-19523] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:14:44.656 [DEBUG] [Thread-19525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:14:52.977 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:14:52.978 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:14:59.700 [DEBUG] [Thread-19526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:15:06.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:15:06.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:15:06.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
2026-04-15T13:15:07.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 14, 52), 8.3462, 57.2144, 0.0, 15.3504, 14.4739, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:15:07.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:14:52
2026-04-15T13:15:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:15:08.106 [DEBUG] [Thread-19527] [transport.py] [_log()] starting thread (client mode): 0xee988ca0
2026-04-15T13:15:08.106 [DEBUG] [Thread-19527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:15:08.127 [DEBUG] [Thread-19527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:15:08.127 [INFO] [Thread-19527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:15:08.130 [DEBUG] [Thread-19527] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:15:08.130 [DEBUG] [Thread-19527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:15:08.130 [DEBUG] [Thread-19527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:15:08.130 [DEBUG] [Thread-19527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:15:08.131 [DEBUG] [Thread-19527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:15:08.131 [DEBUG] [Thread-19527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:15:08.131 [DEBUG] [Thread-19527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:15:08.131 [DEBUG] [Thread-19527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:15:08.131 [DEBUG] [Thread-19527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:15:08.131 [DEBUG] [Thread-19527] [transport.py] [_log()] client lang: <none>
2026-04-15T13:15:08.131 [DEBUG] [Thread-19527] [transport.py] [_log()] server lang: <none>
2026-04-15T13:15:08.131 [DEBUG] [Thread-19527] [transport.py] [_log()] kex follows: False
2026-04-15T13:15:08.131 [DEBUG] [Thread-19527] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:15:08.131 [DEBUG] [Thread-19527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:15:08.131 [DEBUG] [Thread-19527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:15:08.132 [DEBUG] [Thread-19527] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:15:08.132 [DEBUG] [Thread-19527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:15:08.132 [DEBUG] [Thread-19527] [transport.py] [_log()] Compression: none
2026-04-15T13:15:08.132 [DEBUG] [Thread-19527] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:15:08.149 [DEBUG] [Thread-19527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:15:08.149 [DEBUG] [Thread-19527] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:15:08.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:15:08.150 [DEBUG] [Thread-19527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:15:08.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:15:08.151 [DEBUG] [Thread-19527] [transport.py] [_log()] userauth is OK
2026-04-15T13:15:08.151 [DEBUG] [Thread-19527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:15:08.151 [DEBUG] [Thread-19527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:15:08.152 [DEBUG] [Thread-19527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:15:08.152 [DEBUG] [Thread-19527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:15:08.176 [INFO] [Thread-19527] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:15:08.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:15:10.629 [DEBUG] [Thread-19527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:15:10.630 [DEBUG] [Thread-19527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:15:10.630 [DEBUG] [Thread-19527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:15:10.670 [DEBUG] [Thread-19527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:15:10.670 [DEBUG] [Thread-19527] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:15:10.672 [DEBUG] [Thread-19527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:15:10.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:15:10.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:15:10.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:15:10.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:15:10.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:15:10.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:15:10.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:15:10.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:15:10.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:15:10.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.468541 -999.00  +13.50  22.82     66   +7.30 1 2 1 1 1   888    0 5.74 13.08 ----- 18.8 22.8 320.8 31.0 20.3 -18.4 19.1 -17.0 19.1 -12.3 20.3 -15.2
2026-04-15T13:15:10.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:15:10.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:15:10.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.468541
2026-04-15T13:15:10.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:15:10.745 [DEBUG] [Thread-19527] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:15:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:15:10.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:15:10.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:15:10.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:15:10.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:14:52', tmtdew=8.3462, humidity=57.2144, cloud=0.0, wind=15.3504, temperature=14.4739, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:14:41.942', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:15:10.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:15:10.983 [DEBUG] [Thread-19530] [transport.py] [_log()] starting thread (client mode): 0xf1335180
2026-04-15T13:15:10.983 [DEBUG] [Thread-19530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:15:10.999 [DEBUG] [Thread-19530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:15:10.999 [INFO] [Thread-19530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:15:11.006 [DEBUG] [Thread-19530] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:15:11.006 [DEBUG] [Thread-19530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:15:11.006 [DEBUG] [Thread-19530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:15:11.007 [DEBUG] [Thread-19530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:15:11.007 [DEBUG] [Thread-19530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:15:11.007 [DEBUG] [Thread-19530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:15:11.007 [DEBUG] [Thread-19530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:15:11.007 [DEBUG] [Thread-19530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:15:11.007 [DEBUG] [Thread-19530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:15:11.007 [DEBUG] [Thread-19530] [transport.py] [_log()] client lang: <none>
2026-04-15T13:15:11.007 [DEBUG] [Thread-19530] [transport.py] [_log()] server lang: <none>
2026-04-15T13:15:11.008 [DEBUG] [Thread-19530] [transport.py] [_log()] kex follows: False
2026-04-15T13:15:11.008 [DEBUG] [Thread-19530] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:15:11.008 [DEBUG] [Thread-19530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:15:11.008 [DEBUG] [Thread-19530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:15:11.008 [DEBUG] [Thread-19530] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:15:11.008 [DEBUG] [Thread-19530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:15:11.009 [DEBUG] [Thread-19530] [transport.py] [_log()] Compression: none
2026-04-15T13:15:11.009 [DEBUG] [Thread-19530] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:15:11.064 [DEBUG] [Thread-19530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:15:11.065 [DEBUG] [Thread-19530] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:15:11.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:15:11.065 [DEBUG] [Thread-19530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:15:11.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:15:11.121 [DEBUG] [Thread-19530] [transport.py] [_log()] userauth is OK
2026-04-15T13:15:11.121 [DEBUG] [Thread-19530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:15:11.122 [DEBUG] [Thread-19530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:15:11.122 [DEBUG] [Thread-19530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:15:11.122 [DEBUG] [Thread-19530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:15:11.146 [INFO] [Thread-19530] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:15:11.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:15:11.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:15:11.994 [DEBUG] [Thread-19530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:15:11.994 [DEBUG] [Thread-19530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:15:12.045 [DEBUG] [Thread-19530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:15:12.045 [DEBUG] [Thread-19530] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:15:12.056 [DEBUG] [Thread-19530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:15:12.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:15:12.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')
2026-04-15T13:15:12.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
2026-04-15T13:15:12.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:15:12.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:15:12.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:15:12.092 [DEBUG] [Thread-19530] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:15:14.730 [DEBUG] [Thread-19532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:15:20.598 [DEBUG] [Thread-19533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:15:29.773 [DEBUG] [Thread-19534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:15:42.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:15:42.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:15:42.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
2026-04-15T13:15:43.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 15, 28), 7.99901, 58.7066, 0.0, 18.3334, 14.0035, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:15:43.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:15:28
2026-04-15T13:15:43.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:15:44.218 [DEBUG] [Thread-19535] [transport.py] [_log()] starting thread (client mode): 0xee9e7e80
2026-04-15T13:15:44.218 [DEBUG] [Thread-19535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:15:44.238 [DEBUG] [Thread-19535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:15:44.238 [INFO] [Thread-19535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:15:44.241 [DEBUG] [Thread-19535] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:15:44.242 [DEBUG] [Thread-19535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:15:44.242 [DEBUG] [Thread-19535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:15:44.242 [DEBUG] [Thread-19535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:15:44.242 [DEBUG] [Thread-19535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:15:44.242 [DEBUG] [Thread-19535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:15:44.242 [DEBUG] [Thread-19535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:15:44.242 [DEBUG] [Thread-19535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:15:44.242 [DEBUG] [Thread-19535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:15:44.242 [DEBUG] [Thread-19535] [transport.py] [_log()] client lang: <none>
2026-04-15T13:15:44.242 [DEBUG] [Thread-19535] [transport.py] [_log()] server lang: <none>
2026-04-15T13:15:44.242 [DEBUG] [Thread-19535] [transport.py] [_log()] kex follows: False
2026-04-15T13:15:44.243 [DEBUG] [Thread-19535] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:15:44.243 [DEBUG] [Thread-19535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:15:44.243 [DEBUG] [Thread-19535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:15:44.243 [DEBUG] [Thread-19535] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:15:44.243 [DEBUG] [Thread-19535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:15:44.243 [DEBUG] [Thread-19535] [transport.py] [_log()] Compression: none
2026-04-15T13:15:44.243 [DEBUG] [Thread-19535] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:15:44.261 [DEBUG] [Thread-19535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:15:44.261 [DEBUG] [Thread-19535] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:15:44.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:15:44.262 [DEBUG] [Thread-19535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:15:44.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:15:44.263 [DEBUG] [Thread-19535] [transport.py] [_log()] userauth is OK
2026-04-15T13:15:44.263 [DEBUG] [Thread-19535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:15:44.264 [DEBUG] [Thread-19535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:15:44.264 [DEBUG] [Thread-19535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:15:44.264 [DEBUG] [Thread-19535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:15:44.288 [INFO] [Thread-19535] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:15:44.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:15:44.801 [DEBUG] [Thread-19537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:15:44.890 [DEBUG] [Thread-19535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:15:44.891 [DEBUG] [Thread-19535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:15:44.891 [DEBUG] [Thread-19535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:15:44.931 [DEBUG] [Thread-19535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:15:44.931 [DEBUG] [Thread-19535] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:15:44.934 [DEBUG] [Thread-19535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:15:44.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:15:44.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:15:44.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:15:44.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:15:44.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:15:44.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:15:44.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:15:44.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:15:44.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:15:44.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.468888 -999.00  +13.50  24.21     67   +7.50 1 2 1 1 1   888    0 5.98 18.07 ----- 19.5 24.2 309.0 27.4 20.4 -18.3 19.2 -16.5 19.1 -14.1 20.4 -14.7
2026-04-15T13:15:44.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:15:44.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:15:44.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.468888
2026-04-15T13:15:44.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:15:44.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:15:44.959 [DEBUG] [Thread-19535] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:15:44.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:15:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:15:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:15:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:15:28', tmtdew=7.99901, humidity=58.7066, cloud=0.0, wind=18.3334, temperature=14.0035, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:15:11.923', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:15:45.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:15:45.217 [DEBUG] [Thread-19539] [transport.py] [_log()] starting thread (client mode): 0xf13cbb80
2026-04-15T13:15:45.217 [DEBUG] [Thread-19539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:15:45.233 [DEBUG] [Thread-19539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:15:45.233 [INFO] [Thread-19539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:15:45.240 [DEBUG] [Thread-19539] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:15:45.240 [DEBUG] [Thread-19539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:15:45.240 [DEBUG] [Thread-19539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:15:45.241 [DEBUG] [Thread-19539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:15:45.241 [DEBUG] [Thread-19539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:15:45.241 [DEBUG] [Thread-19539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:15:45.241 [DEBUG] [Thread-19539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:15:45.241 [DEBUG] [Thread-19539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:15:45.241 [DEBUG] [Thread-19539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:15:45.241 [DEBUG] [Thread-19539] [transport.py] [_log()] client lang: <none>
2026-04-15T13:15:45.241 [DEBUG] [Thread-19539] [transport.py] [_log()] server lang: <none>
2026-04-15T13:15:45.241 [DEBUG] [Thread-19539] [transport.py] [_log()] kex follows: False
2026-04-15T13:15:45.241 [DEBUG] [Thread-19539] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:15:45.241 [DEBUG] [Thread-19539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:15:45.241 [DEBUG] [Thread-19539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:15:45.242 [DEBUG] [Thread-19539] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:15:45.242 [DEBUG] [Thread-19539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:15:45.242 [DEBUG] [Thread-19539] [transport.py] [_log()] Compression: none
2026-04-15T13:15:45.242 [DEBUG] [Thread-19539] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:15:45.296 [DEBUG] [Thread-19539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:15:45.297 [DEBUG] [Thread-19539] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:15:45.297 [DEBUG] [Thread-19539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:15:45.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:15:45.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:15:45.354 [DEBUG] [Thread-19539] [transport.py] [_log()] userauth is OK
2026-04-15T13:15:45.354 [DEBUG] [Thread-19539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:15:45.354 [DEBUG] [Thread-19539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:15:45.354 [DEBUG] [Thread-19539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:15:45.355 [DEBUG] [Thread-19539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:15:45.380 [INFO] [Thread-19539] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:15:45.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:15:45.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:15:46.224 [DEBUG] [Thread-19539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:15:46.224 [DEBUG] [Thread-19539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:15:46.272 [DEBUG] [Thread-19539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:15:46.273 [DEBUG] [Thread-19539] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:15:46.281 [DEBUG] [Thread-19539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:15:46.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:15:46.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')
2026-04-15T13:15:46.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
2026-04-15T13:15:46.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:15:46.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:15:46.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:15:46.325 [DEBUG] [Thread-19539] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:15:53.121 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:15:53.123 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:15:59.834 [DEBUG] [Thread-19541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:16:14.878 [DEBUG] [Thread-19542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:16:16.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:16:16.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:16:16.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:16:17.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 16, 3), 8.05672, 58.458, 0.0, 18.1922, 13.9206, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:16:17.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:16:03
2026-04-15T13:16:18.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:16:18.469 [DEBUG] [Thread-19543] [transport.py] [_log()] starting thread (client mode): 0xee9023e0
2026-04-15T13:16:18.469 [DEBUG] [Thread-19543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:16:18.489 [DEBUG] [Thread-19543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:16:18.489 [INFO] [Thread-19543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:16:18.492 [DEBUG] [Thread-19543] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:16:18.492 [DEBUG] [Thread-19543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:16:18.492 [DEBUG] [Thread-19543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:16:18.493 [DEBUG] [Thread-19543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:16:18.493 [DEBUG] [Thread-19543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:16:18.493 [DEBUG] [Thread-19543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:16:18.493 [DEBUG] [Thread-19543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:16:18.493 [DEBUG] [Thread-19543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:16:18.493 [DEBUG] [Thread-19543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:16:18.493 [DEBUG] [Thread-19543] [transport.py] [_log()] client lang: <none>
2026-04-15T13:16:18.493 [DEBUG] [Thread-19543] [transport.py] [_log()] server lang: <none>
2026-04-15T13:16:18.493 [DEBUG] [Thread-19543] [transport.py] [_log()] kex follows: False
2026-04-15T13:16:18.493 [DEBUG] [Thread-19543] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:16:18.493 [DEBUG] [Thread-19543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:16:18.493 [DEBUG] [Thread-19543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:16:18.494 [DEBUG] [Thread-19543] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:16:18.494 [DEBUG] [Thread-19543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:16:18.494 [DEBUG] [Thread-19543] [transport.py] [_log()] Compression: none
2026-04-15T13:16:18.494 [DEBUG] [Thread-19543] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:16:18.511 [DEBUG] [Thread-19543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:16:18.511 [DEBUG] [Thread-19543] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:16:18.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:16:18.512 [DEBUG] [Thread-19543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:16:18.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:16:18.513 [DEBUG] [Thread-19543] [transport.py] [_log()] userauth is OK
2026-04-15T13:16:18.513 [DEBUG] [Thread-19543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:16:18.513 [DEBUG] [Thread-19543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:16:18.513 [DEBUG] [Thread-19543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:16:18.513 [DEBUG] [Thread-19543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:16:18.536 [INFO] [Thread-19543] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:16:18.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:16:19.198 [DEBUG] [Thread-19543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:16:19.198 [DEBUG] [Thread-19543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:16:19.198 [DEBUG] [Thread-19543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:16:19.239 [DEBUG] [Thread-19543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:16:19.239 [DEBUG] [Thread-19543] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:16:19.242 [DEBUG] [Thread-19543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:16:19.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:16:19.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:16:19.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:16:19.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:16:19.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:16:19.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:16:19.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:16:19.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:16:19.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:16:19.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.469235 -999.00  +13.20  13.66     67   +7.30 1 2 1 1 1   888    0 6.08 20.44 ----- 13.9 13.7 346.2 24.3 20.4 -18.5 19.1 -16.7 19.4 -12.1 20.5 -15.1
2026-04-15T13:16:19.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:16:19.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:16:19.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.469235
2026-04-15T13:16:19.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:16:19.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:16:19.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:16:19.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:16:19.266 [DEBUG] [Thread-19543] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:16:19.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:16:19.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:16:03', tmtdew=8.05672, humidity=58.458, cloud=0.0, wind=18.1922, temperature=13.9206, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:15:41.904', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:16:19.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:16:19.491 [DEBUG] [Thread-19546] [transport.py] [_log()] starting thread (client mode): 0xf13e0070
2026-04-15T13:16:19.491 [DEBUG] [Thread-19546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:16:19.505 [DEBUG] [Thread-19546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:16:19.505 [INFO] [Thread-19546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:16:19.513 [DEBUG] [Thread-19546] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:16:19.513 [DEBUG] [Thread-19546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:16:19.513 [DEBUG] [Thread-19546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:16:19.513 [DEBUG] [Thread-19546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:16:19.513 [DEBUG] [Thread-19546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:16:19.513 [DEBUG] [Thread-19546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:16:19.514 [DEBUG] [Thread-19546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:16:19.514 [DEBUG] [Thread-19546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:16:19.514 [DEBUG] [Thread-19546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:16:19.514 [DEBUG] [Thread-19546] [transport.py] [_log()] client lang: <none>
2026-04-15T13:16:19.514 [DEBUG] [Thread-19546] [transport.py] [_log()] server lang: <none>
2026-04-15T13:16:19.514 [DEBUG] [Thread-19546] [transport.py] [_log()] kex follows: False
2026-04-15T13:16:19.514 [DEBUG] [Thread-19546] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:16:19.514 [DEBUG] [Thread-19546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:16:19.514 [DEBUG] [Thread-19546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:16:19.514 [DEBUG] [Thread-19546] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:16:19.514 [DEBUG] [Thread-19546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:16:19.515 [DEBUG] [Thread-19546] [transport.py] [_log()] Compression: none
2026-04-15T13:16:19.515 [DEBUG] [Thread-19546] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:16:19.568 [DEBUG] [Thread-19546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:16:19.569 [DEBUG] [Thread-19546] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:16:19.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:16:19.570 [DEBUG] [Thread-19546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:16:19.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:16:19.625 [DEBUG] [Thread-19546] [transport.py] [_log()] userauth is OK
2026-04-15T13:16:19.626 [DEBUG] [Thread-19546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:16:19.626 [DEBUG] [Thread-19546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:16:19.626 [DEBUG] [Thread-19546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:16:19.626 [DEBUG] [Thread-19546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:16:19.651 [INFO] [Thread-19546] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:16:19.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:16:19.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:16:20.481 [DEBUG] [Thread-19546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:16:20.481 [DEBUG] [Thread-19546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:16:20.530 [DEBUG] [Thread-19546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:16:20.530 [DEBUG] [Thread-19546] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:16:20.539 [DEBUG] [Thread-19546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:16:20.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:16:20.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')
2026-04-15T13:16: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
2026-04-15T13:16:20.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:16:20.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:16:20.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:16:20.574 [DEBUG] [Thread-19546] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:16:20.716 [DEBUG] [Thread-19548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:16:29.910 [DEBUG] [Thread-19549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:16:44.952 [DEBUG] [Thread-19550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:16:50.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:16:50.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:16:50.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
2026-04-15T13:16:52.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 16, 39), 8.21886, 57.6452, 0.0, 13.7275, 14.1755, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:16:52.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:16:39
2026-04-15T13:16:52.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:16:52.877 [DEBUG] [Thread-19551] [transport.py] [_log()] starting thread (client mode): 0xf13ef2b0
2026-04-15T13:16:52.877 [DEBUG] [Thread-19551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:16:52.896 [DEBUG] [Thread-19551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:16:52.896 [INFO] [Thread-19551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:16:52.899 [DEBUG] [Thread-19551] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:16:52.899 [DEBUG] [Thread-19551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:16:52.899 [DEBUG] [Thread-19551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:16:52.899 [DEBUG] [Thread-19551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:16:52.899 [DEBUG] [Thread-19551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:16:52.899 [DEBUG] [Thread-19551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:16:52.899 [DEBUG] [Thread-19551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:16:52.899 [DEBUG] [Thread-19551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:16:52.899 [DEBUG] [Thread-19551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:16:52.899 [DEBUG] [Thread-19551] [transport.py] [_log()] client lang: <none>
2026-04-15T13:16:52.900 [DEBUG] [Thread-19551] [transport.py] [_log()] server lang: <none>
2026-04-15T13:16:52.900 [DEBUG] [Thread-19551] [transport.py] [_log()] kex follows: False
2026-04-15T13:16:52.900 [DEBUG] [Thread-19551] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:16:52.900 [DEBUG] [Thread-19551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:16:52.900 [DEBUG] [Thread-19551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:16:52.900 [DEBUG] [Thread-19551] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:16:52.900 [DEBUG] [Thread-19551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:16:52.900 [DEBUG] [Thread-19551] [transport.py] [_log()] Compression: none
2026-04-15T13:16:52.900 [DEBUG] [Thread-19551] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:16:52.916 [DEBUG] [Thread-19551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:16:52.916 [DEBUG] [Thread-19551] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:16:52.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:16:52.917 [DEBUG] [Thread-19551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:16:52.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:16:52.918 [DEBUG] [Thread-19551] [transport.py] [_log()] userauth is OK
2026-04-15T13:16:52.918 [DEBUG] [Thread-19551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:16:52.918 [DEBUG] [Thread-19551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:16:52.918 [DEBUG] [Thread-19551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:16:52.919 [DEBUG] [Thread-19551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:16:52.936 [INFO] [Thread-19551] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:16:52.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:16:53.262 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:16:53.263 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:16:53.542 [DEBUG] [Thread-19551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:16:53.542 [DEBUG] [Thread-19551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:16:53.542 [DEBUG] [Thread-19551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:16:53.582 [DEBUG] [Thread-19551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:16:53.583 [DEBUG] [Thread-19551] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:16:53.585 [DEBUG] [Thread-19551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:16:53.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:16:53.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:16:53.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:16:53.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:16:53.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:16:53.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:16:53.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:16:53.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:16:53.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:16:53.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.469582 -999.00  +13.50  17.81     66   +7.30 1 2 1 1 1   888    0 6.20 25.22 ----- 12.8 17.8 321.6 19.9 20.6 -18.5 19.3 -17.1 19.4 -14.9 20.6 -17.6
2026-04-15T13:16:53.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:16:53.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:16:53.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.469582
2026-04-15T13:16:53.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:16:53.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:16:53.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:16:53.601 [DEBUG] [Thread-19551] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:16:53.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:16:53.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:16:53.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:16:39', tmtdew=8.21886, humidity=57.6452, cloud=0.0, wind=13.7275, temperature=14.1755, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:16:11.885', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:16:53.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:16:53.821 [DEBUG] [Thread-19554] [transport.py] [_log()] starting thread (client mode): 0xf13ed900
2026-04-15T13:16:53.822 [DEBUG] [Thread-19554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:16:53.837 [DEBUG] [Thread-19554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:16:53.838 [INFO] [Thread-19554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:16:53.845 [DEBUG] [Thread-19554] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:16:53.845 [DEBUG] [Thread-19554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:16:53.845 [DEBUG] [Thread-19554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:16:53.845 [DEBUG] [Thread-19554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:16:53.845 [DEBUG] [Thread-19554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:16:53.845 [DEBUG] [Thread-19554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:16:53.845 [DEBUG] [Thread-19554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:16:53.845 [DEBUG] [Thread-19554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:16:53.845 [DEBUG] [Thread-19554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:16:53.846 [DEBUG] [Thread-19554] [transport.py] [_log()] client lang: <none>
2026-04-15T13:16:53.846 [DEBUG] [Thread-19554] [transport.py] [_log()] server lang: <none>
2026-04-15T13:16:53.846 [DEBUG] [Thread-19554] [transport.py] [_log()] kex follows: False
2026-04-15T13:16:53.846 [DEBUG] [Thread-19554] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:16:53.846 [DEBUG] [Thread-19554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:16:53.846 [DEBUG] [Thread-19554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:16:53.846 [DEBUG] [Thread-19554] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:16:53.846 [DEBUG] [Thread-19554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:16:53.846 [DEBUG] [Thread-19554] [transport.py] [_log()] Compression: none
2026-04-15T13:16:53.846 [DEBUG] [Thread-19554] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:16:53.901 [DEBUG] [Thread-19554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:16:53.902 [DEBUG] [Thread-19554] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:16:53.902 [DEBUG] [Thread-19554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:16:53.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:16:53.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:16:53.958 [DEBUG] [Thread-19554] [transport.py] [_log()] userauth is OK
2026-04-15T13:16:53.958 [DEBUG] [Thread-19554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:16:53.958 [DEBUG] [Thread-19554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:16:53.959 [DEBUG] [Thread-19554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:16:53.959 [DEBUG] [Thread-19554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:16:53.986 [INFO] [Thread-19554] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:16:53.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:16:53.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:16:54.835 [DEBUG] [Thread-19554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:16:54.835 [DEBUG] [Thread-19554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:16:54.883 [DEBUG] [Thread-19554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:16:54.883 [DEBUG] [Thread-19554] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:16:54.892 [DEBUG] [Thread-19554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:16:54.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:16:54.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')
2026-04-15T13:16:54.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
2026-04-15T13:16:54.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:16:54.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:16:54.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:16:54.928 [DEBUG] [Thread-19554] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:16:59.982 [DEBUG] [Thread-19556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:17:15.028 [DEBUG] [Thread-19557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:17:20.808 [DEBUG] [Thread-19558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:17:24.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:17:24.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:17:24.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:17:26.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 17, 15), 7.78605, 59.5878, 0.0, 7.46496, 13.8717, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:17:26.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:17:15
2026-04-15T13:17:26.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:17:27.054 [DEBUG] [Thread-19559] [transport.py] [_log()] starting thread (client mode): 0xee906bc0
2026-04-15T13:17:27.054 [DEBUG] [Thread-19559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:17:27.074 [DEBUG] [Thread-19559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:17:27.074 [INFO] [Thread-19559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:17:27.077 [DEBUG] [Thread-19559] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:17:27.077 [DEBUG] [Thread-19559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:17:27.078 [DEBUG] [Thread-19559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:17:27.078 [DEBUG] [Thread-19559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:17:27.078 [DEBUG] [Thread-19559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:17:27.078 [DEBUG] [Thread-19559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:17:27.078 [DEBUG] [Thread-19559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:17:27.078 [DEBUG] [Thread-19559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:17:27.078 [DEBUG] [Thread-19559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:17:27.078 [DEBUG] [Thread-19559] [transport.py] [_log()] client lang: <none>
2026-04-15T13:17:27.078 [DEBUG] [Thread-19559] [transport.py] [_log()] server lang: <none>
2026-04-15T13:17:27.078 [DEBUG] [Thread-19559] [transport.py] [_log()] kex follows: False
2026-04-15T13:17:27.078 [DEBUG] [Thread-19559] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:17:27.079 [DEBUG] [Thread-19559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:17:27.079 [DEBUG] [Thread-19559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:17:27.079 [DEBUG] [Thread-19559] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:17:27.079 [DEBUG] [Thread-19559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:17:27.079 [DEBUG] [Thread-19559] [transport.py] [_log()] Compression: none
2026-04-15T13:17:27.079 [DEBUG] [Thread-19559] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:17:27.096 [DEBUG] [Thread-19559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:17:27.096 [DEBUG] [Thread-19559] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:17:27.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:17:27.097 [DEBUG] [Thread-19559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:17:27.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:17:27.099 [DEBUG] [Thread-19559] [transport.py] [_log()] userauth is OK
2026-04-15T13:17:27.099 [DEBUG] [Thread-19559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:17:27.099 [DEBUG] [Thread-19559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:17:27.099 [DEBUG] [Thread-19559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:17:27.099 [DEBUG] [Thread-19559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:17:27.123 [INFO] [Thread-19559] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:17:27.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:17:27.912 [DEBUG] [Thread-19559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:17:27.912 [DEBUG] [Thread-19559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:17:27.913 [DEBUG] [Thread-19559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:17:27.953 [DEBUG] [Thread-19559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:17:27.953 [DEBUG] [Thread-19559] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:17:27.956 [DEBUG] [Thread-19559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:17:27.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:17:27.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:17:27.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:17:27.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:17:27.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:17:27.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:17:27.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:17:27.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:17:27.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:17:27.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.470277 -999.00  +13.80   8.82     66   +7.60 1 2 1 1 1   888    0 6.67 38.77 ----- 7.9 8.8 324.4 16.8 20.4 -20.1 19.2 -17.4 19.3 -14.3 20.4 -17.8
2026-04-15T13:17:27.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:17:27.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:17:27.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.470277
2026-04-15T13:17:27.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:17:27.981 [DEBUG] [Thread-19559] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:17:27.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:17:27.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:17:27.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:17:27.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:17:27.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:17:15', tmtdew=7.78605, humidity=59.5878, cloud=0.0, wind=7.46496, temperature=13.8717, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:17:11.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:17:28.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:17:28.239 [DEBUG] [Thread-19562] [transport.py] [_log()] starting thread (client mode): 0xee906650
2026-04-15T13:17:28.239 [DEBUG] [Thread-19562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:17:28.253 [DEBUG] [Thread-19562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:17:28.253 [INFO] [Thread-19562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:17:28.260 [DEBUG] [Thread-19562] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:17:28.260 [DEBUG] [Thread-19562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:17:28.260 [DEBUG] [Thread-19562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:17:28.260 [DEBUG] [Thread-19562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:17:28.260 [DEBUG] [Thread-19562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:17:28.260 [DEBUG] [Thread-19562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:17:28.260 [DEBUG] [Thread-19562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:17:28.261 [DEBUG] [Thread-19562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:17:28.261 [DEBUG] [Thread-19562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:17:28.261 [DEBUG] [Thread-19562] [transport.py] [_log()] client lang: <none>
2026-04-15T13:17:28.261 [DEBUG] [Thread-19562] [transport.py] [_log()] server lang: <none>
2026-04-15T13:17:28.261 [DEBUG] [Thread-19562] [transport.py] [_log()] kex follows: False
2026-04-15T13:17:28.261 [DEBUG] [Thread-19562] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:17:28.261 [DEBUG] [Thread-19562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:17:28.261 [DEBUG] [Thread-19562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:17:28.261 [DEBUG] [Thread-19562] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:17:28.261 [DEBUG] [Thread-19562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:17:28.261 [DEBUG] [Thread-19562] [transport.py] [_log()] Compression: none
2026-04-15T13:17:28.262 [DEBUG] [Thread-19562] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:17:28.318 [DEBUG] [Thread-19562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:17:28.319 [DEBUG] [Thread-19562] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:17:28.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:17:28.320 [DEBUG] [Thread-19562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:17:28.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:17:28.374 [DEBUG] [Thread-19562] [transport.py] [_log()] userauth is OK
2026-04-15T13:17:28.374 [DEBUG] [Thread-19562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:17:28.374 [DEBUG] [Thread-19562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:17:28.374 [DEBUG] [Thread-19562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:17:28.375 [DEBUG] [Thread-19562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:17:28.402 [INFO] [Thread-19562] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:17:28.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:17:28.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:17:29.236 [DEBUG] [Thread-19562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:17:29.237 [DEBUG] [Thread-19562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:17:29.284 [DEBUG] [Thread-19562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:17:29.284 [DEBUG] [Thread-19562] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:17:29.292 [DEBUG] [Thread-19562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:17:29.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:17:29.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')
2026-04-15T13:17:29.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
2026-04-15T13:17:29.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:17:29.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:17:29.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:17:29.326 [DEBUG] [Thread-19562] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:17:30.062 [DEBUG] [Thread-19564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:17:45.105 [DEBUG] [Thread-19565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:17:53.403 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:17:53.404 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:17:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:17:59.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:17:59.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:18:00.137 [DEBUG] [Thread-19566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:18:00.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 17, 50), 7.54726, 60.3302, 0.0, 7.69464, 13.9765, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:18:00.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:17:50
2026-04-15T13:18:01.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:18:01.524 [DEBUG] [Thread-19567] [transport.py] [_log()] starting thread (client mode): 0xee904a60
2026-04-15T13:18:01.524 [DEBUG] [Thread-19567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:18:01.545 [DEBUG] [Thread-19567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:18:01.545 [INFO] [Thread-19567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:18:01.548 [DEBUG] [Thread-19567] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:18:01.548 [DEBUG] [Thread-19567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:18:01.548 [DEBUG] [Thread-19567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:18:01.548 [DEBUG] [Thread-19567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:18:01.548 [DEBUG] [Thread-19567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:18:01.548 [DEBUG] [Thread-19567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:18:01.548 [DEBUG] [Thread-19567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:18:01.549 [DEBUG] [Thread-19567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:18:01.549 [DEBUG] [Thread-19567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:18:01.549 [DEBUG] [Thread-19567] [transport.py] [_log()] client lang: <none>
2026-04-15T13:18:01.549 [DEBUG] [Thread-19567] [transport.py] [_log()] server lang: <none>
2026-04-15T13:18:01.549 [DEBUG] [Thread-19567] [transport.py] [_log()] kex follows: False
2026-04-15T13:18:01.549 [DEBUG] [Thread-19567] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:18:01.549 [DEBUG] [Thread-19567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:18:01.549 [DEBUG] [Thread-19567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:18:01.549 [DEBUG] [Thread-19567] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:18:01.549 [DEBUG] [Thread-19567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:18:01.549 [DEBUG] [Thread-19567] [transport.py] [_log()] Compression: none
2026-04-15T13:18:01.550 [DEBUG] [Thread-19567] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:18:01.565 [DEBUG] [Thread-19567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:18:01.566 [DEBUG] [Thread-19567] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:18:01.566 [DEBUG] [Thread-19567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:18:01.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:18:01.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:18:01.567 [DEBUG] [Thread-19567] [transport.py] [_log()] userauth is OK
2026-04-15T13:18:01.568 [DEBUG] [Thread-19567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:18:01.568 [DEBUG] [Thread-19567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:18:01.568 [DEBUG] [Thread-19567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:18:01.568 [DEBUG] [Thread-19567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:18:01.592 [INFO] [Thread-19567] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:18:01.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:18:02.395 [DEBUG] [Thread-19567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:18:02.395 [DEBUG] [Thread-19567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:18:02.396 [DEBUG] [Thread-19567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:18:02.437 [DEBUG] [Thread-19567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:18:02.437 [DEBUG] [Thread-19567] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:18:02.439 [DEBUG] [Thread-19567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:18:02.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:18:02.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:18:02.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:18:02.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:18:02.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:18:02.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:18:02.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:18:02.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:18:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:18:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.470624 -999.00  +13.90   6.83     65   +7.60 1 2 1 1 1   888    0 6.74 40.54 ----- 8.5 6.8 327.5 15.3 20.5 -19.6 19.4 -17.6 19.6 -13.4 20.5 -16.8
2026-04-15T13:18:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:18:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:18:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.470624
2026-04-15T13:18:02.462 [DEBUG] [Thread-19567] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:18:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:18:02.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:18:02.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:18:02.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:18:02.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:18:02.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:17:50', tmtdew=7.54726, humidity=60.3302, cloud=0.0, wind=7.69464, temperature=13.9765, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:17:41.914', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:18:02.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:18:02.715 [DEBUG] [Thread-19570] [transport.py] [_log()] starting thread (client mode): 0xee904430
2026-04-15T13:18:02.716 [DEBUG] [Thread-19570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:18:02.730 [DEBUG] [Thread-19570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:18:02.730 [INFO] [Thread-19570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:18:02.737 [DEBUG] [Thread-19570] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:18:02.737 [DEBUG] [Thread-19570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:18:02.737 [DEBUG] [Thread-19570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:18:02.737 [DEBUG] [Thread-19570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:18:02.738 [DEBUG] [Thread-19570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:18:02.738 [DEBUG] [Thread-19570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:18:02.738 [DEBUG] [Thread-19570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:18:02.738 [DEBUG] [Thread-19570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:18:02.738 [DEBUG] [Thread-19570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:18:02.738 [DEBUG] [Thread-19570] [transport.py] [_log()] client lang: <none>
2026-04-15T13:18:02.738 [DEBUG] [Thread-19570] [transport.py] [_log()] server lang: <none>
2026-04-15T13:18:02.738 [DEBUG] [Thread-19570] [transport.py] [_log()] kex follows: False
2026-04-15T13:18:02.738 [DEBUG] [Thread-19570] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:18:02.738 [DEBUG] [Thread-19570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:18:02.738 [DEBUG] [Thread-19570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:18:02.739 [DEBUG] [Thread-19570] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:18:02.739 [DEBUG] [Thread-19570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:18:02.739 [DEBUG] [Thread-19570] [transport.py] [_log()] Compression: none
2026-04-15T13:18:02.739 [DEBUG] [Thread-19570] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:18:02.797 [DEBUG] [Thread-19570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:18:02.798 [DEBUG] [Thread-19570] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:18:02.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:18:02.798 [DEBUG] [Thread-19570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:18:02.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:18:02.854 [DEBUG] [Thread-19570] [transport.py] [_log()] userauth is OK
2026-04-15T13:18:02.854 [DEBUG] [Thread-19570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:18:02.854 [DEBUG] [Thread-19570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:18:02.854 [DEBUG] [Thread-19570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:18:02.855 [DEBUG] [Thread-19570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:18:02.880 [INFO] [Thread-19570] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:18:02.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:18:02.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:18:03.719 [DEBUG] [Thread-19570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:18:03.720 [DEBUG] [Thread-19570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:18:03.767 [DEBUG] [Thread-19570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:18:03.767 [DEBUG] [Thread-19570] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:18:03.776 [DEBUG] [Thread-19570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:18:03.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:18:03.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')
2026-04-15T13:18:03.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
2026-04-15T13:18:03.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:18:03.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:18:03.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:18:03.811 [DEBUG] [Thread-19570] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:18:15.168 [DEBUG] [Thread-19572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:18:20.885 [DEBUG] [Thread-19573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:18:30.210 [DEBUG] [Thread-19574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:18:33.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:18:33.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:18:33.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
2026-04-15T13:18:35.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 18, 26), 7.33181, 61.1982, 0.0, 8.34696, 14.12, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:18:35.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:18:26
2026-04-15T13:18:35.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:18:35.985 [DEBUG] [Thread-19575] [transport.py] [_log()] starting thread (client mode): 0xf13ec460
2026-04-15T13:18:35.985 [DEBUG] [Thread-19575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:18:36.005 [DEBUG] [Thread-19575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:18:36.005 [INFO] [Thread-19575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:18:36.006 [DEBUG] [Thread-19575] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:18:36.006 [DEBUG] [Thread-19575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:18:36.006 [DEBUG] [Thread-19575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:18:36.006 [DEBUG] [Thread-19575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:18:36.006 [DEBUG] [Thread-19575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:18:36.007 [DEBUG] [Thread-19575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:18:36.007 [DEBUG] [Thread-19575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:18:36.007 [DEBUG] [Thread-19575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:18:36.007 [DEBUG] [Thread-19575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:18:36.007 [DEBUG] [Thread-19575] [transport.py] [_log()] client lang: <none>
2026-04-15T13:18:36.007 [DEBUG] [Thread-19575] [transport.py] [_log()] server lang: <none>
2026-04-15T13:18:36.007 [DEBUG] [Thread-19575] [transport.py] [_log()] kex follows: False
2026-04-15T13:18:36.007 [DEBUG] [Thread-19575] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:18:36.007 [DEBUG] [Thread-19575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:18:36.007 [DEBUG] [Thread-19575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:18:36.007 [DEBUG] [Thread-19575] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:18:36.008 [DEBUG] [Thread-19575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:18:36.008 [DEBUG] [Thread-19575] [transport.py] [_log()] Compression: none
2026-04-15T13:18:36.008 [DEBUG] [Thread-19575] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:18:36.025 [DEBUG] [Thread-19575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:18:36.026 [DEBUG] [Thread-19575] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:18:36.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:18:36.026 [DEBUG] [Thread-19575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:18:36.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:18:36.027 [DEBUG] [Thread-19575] [transport.py] [_log()] userauth is OK
2026-04-15T13:18:36.027 [DEBUG] [Thread-19575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:18:36.027 [DEBUG] [Thread-19575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:18:36.028 [DEBUG] [Thread-19575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:18:36.028 [DEBUG] [Thread-19575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:18:36.052 [INFO] [Thread-19575] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:18:36.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:18:36.783 [DEBUG] [Thread-19575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:18:36.783 [DEBUG] [Thread-19575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:18:36.784 [DEBUG] [Thread-19575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:18:36.824 [DEBUG] [Thread-19575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:18:36.824 [DEBUG] [Thread-19575] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:18:36.827 [DEBUG] [Thread-19575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:18:36.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:18:36.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:18:36.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:18:36.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:18:36.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:18:36.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:18:36.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:18:36.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:18:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:18:36.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.470971 -999.00  +13.70   3.63     64   +7.10 1 2 1 1 1   888    0 6.94 43.96 ----- 3.0 3.6 352.2 9.8 20.8 -19.1 19.6 -17.1 19.8 -15.3 20.9 -16.0
2026-04-15T13:18:36.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:18:36.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:18:36.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.470971
2026-04-15T13:18:36.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:18:36.852 [DEBUG] [Thread-19575] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:18:36.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:18:36.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:18:36.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:18:36.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:18:36.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:18:26', tmtdew=7.33181, humidity=61.1982, cloud=0.0, wind=8.34696, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:18:11.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:18:37.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:18:37.106 [DEBUG] [Thread-19578] [transport.py] [_log()] starting thread (client mode): 0xf13c8070
2026-04-15T13:18:37.106 [DEBUG] [Thread-19578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:18:37.120 [DEBUG] [Thread-19578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:18:37.120 [INFO] [Thread-19578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:18:37.128 [DEBUG] [Thread-19578] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:18:37.128 [DEBUG] [Thread-19578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:18:37.128 [DEBUG] [Thread-19578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:18:37.128 [DEBUG] [Thread-19578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:18:37.128 [DEBUG] [Thread-19578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:18:37.128 [DEBUG] [Thread-19578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:18:37.128 [DEBUG] [Thread-19578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:18:37.128 [DEBUG] [Thread-19578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:18:37.128 [DEBUG] [Thread-19578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:18:37.128 [DEBUG] [Thread-19578] [transport.py] [_log()] client lang: <none>
2026-04-15T13:18:37.128 [DEBUG] [Thread-19578] [transport.py] [_log()] server lang: <none>
2026-04-15T13:18:37.128 [DEBUG] [Thread-19578] [transport.py] [_log()] kex follows: False
2026-04-15T13:18:37.129 [DEBUG] [Thread-19578] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:18:37.129 [DEBUG] [Thread-19578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:18:37.129 [DEBUG] [Thread-19578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:18:37.129 [DEBUG] [Thread-19578] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:18:37.129 [DEBUG] [Thread-19578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:18:37.129 [DEBUG] [Thread-19578] [transport.py] [_log()] Compression: none
2026-04-15T13:18:37.129 [DEBUG] [Thread-19578] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:18:37.185 [DEBUG] [Thread-19578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:18:37.185 [DEBUG] [Thread-19578] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:18:37.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:18:37.186 [DEBUG] [Thread-19578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:18:37.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:18:37.243 [DEBUG] [Thread-19578] [transport.py] [_log()] userauth is OK
2026-04-15T13:18:37.243 [DEBUG] [Thread-19578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:18:37.243 [DEBUG] [Thread-19578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:18:37.243 [DEBUG] [Thread-19578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:18:37.243 [DEBUG] [Thread-19578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:18:37.269 [INFO] [Thread-19578] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:18:37.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:18:37.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:18:38.083 [DEBUG] [Thread-19578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:18:38.083 [DEBUG] [Thread-19578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:18:38.131 [DEBUG] [Thread-19578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:18:38.131 [DEBUG] [Thread-19578] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:18:38.139 [DEBUG] [Thread-19578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:18:38.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:18:38.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')
2026-04-15T13:18:38.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
2026-04-15T13:18:38.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:18:38.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:18:38.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:18:38.172 [DEBUG] [Thread-19578] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:18:45.241 [DEBUG] [Thread-19580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:18:53.544 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:18:53.545 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:19:00.286 [DEBUG] [Thread-19581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:19:08.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:19:08.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:19:08.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:19:09.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 19, 2), 7.34765, 61.1485, 0.0, 13.3214, 14.1863, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:19:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:19:02
2026-04-15T13:19:09.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:19:10.328 [DEBUG] [Thread-19582] [transport.py] [_log()] starting thread (client mode): 0xee98a890
2026-04-15T13:19:10.328 [DEBUG] [Thread-19582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:19:10.348 [DEBUG] [Thread-19582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:19:10.348 [INFO] [Thread-19582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:19:10.352 [DEBUG] [Thread-19582] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:19:10.352 [DEBUG] [Thread-19582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:19:10.352 [DEBUG] [Thread-19582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:19:10.352 [DEBUG] [Thread-19582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:19:10.352 [DEBUG] [Thread-19582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:19:10.352 [DEBUG] [Thread-19582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:19:10.352 [DEBUG] [Thread-19582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:19:10.352 [DEBUG] [Thread-19582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:19:10.352 [DEBUG] [Thread-19582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:19:10.352 [DEBUG] [Thread-19582] [transport.py] [_log()] client lang: <none>
2026-04-15T13:19:10.353 [DEBUG] [Thread-19582] [transport.py] [_log()] server lang: <none>
2026-04-15T13:19:10.353 [DEBUG] [Thread-19582] [transport.py] [_log()] kex follows: False
2026-04-15T13:19:10.353 [DEBUG] [Thread-19582] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:19:10.353 [DEBUG] [Thread-19582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:19:10.353 [DEBUG] [Thread-19582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:19:10.353 [DEBUG] [Thread-19582] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:19:10.353 [DEBUG] [Thread-19582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:19:10.353 [DEBUG] [Thread-19582] [transport.py] [_log()] Compression: none
2026-04-15T13:19:10.353 [DEBUG] [Thread-19582] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:19:10.369 [DEBUG] [Thread-19582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:19:10.370 [DEBUG] [Thread-19582] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:19:10.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:19:10.371 [DEBUG] [Thread-19582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:19:10.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:19:10.372 [DEBUG] [Thread-19582] [transport.py] [_log()] userauth is OK
2026-04-15T13:19:10.372 [DEBUG] [Thread-19582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:19:10.372 [DEBUG] [Thread-19582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:19:10.372 [DEBUG] [Thread-19582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:19:10.372 [DEBUG] [Thread-19582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:19:10.397 [INFO] [Thread-19582] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:19:10.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:19:11.139 [DEBUG] [Thread-19582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:19:11.139 [DEBUG] [Thread-19582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:19:11.140 [DEBUG] [Thread-19582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:19:11.180 [DEBUG] [Thread-19582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:19:11.180 [DEBUG] [Thread-19582] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:19:11.183 [DEBUG] [Thread-19582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:19:11.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:19:11.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:19:11.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:19:11.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:19:11.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:19:11.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:19:11.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:19:11.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:19:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:19:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.471318 -999.00  +13.70   8.25     65   +7.30 1 2 1 1 1   888    0 6.95 47.83 ----- 12.1 8.2 289.0 9.3 20.9 -19.1 19.6 -16.5 19.9 -13.4 20.9 -15.8
2026-04-15T13:19:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:19:11.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:19:11.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.471318
2026-04-15T13:19:11.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:19:11.207 [DEBUG] [Thread-19582] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:19:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:19:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:19:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:19:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:19:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:19:02', tmtdew=7.34765, humidity=61.1485, cloud=0.0, wind=13.3214, temperature=14.1863, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:18:41.875', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:19:11.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:19:11.471 [DEBUG] [Thread-19585] [transport.py] [_log()] starting thread (client mode): 0xf13ca560
2026-04-15T13:19:11.471 [DEBUG] [Thread-19585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:19:11.485 [DEBUG] [Thread-19585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:19:11.486 [INFO] [Thread-19585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:19:11.493 [DEBUG] [Thread-19585] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:19:11.493 [DEBUG] [Thread-19585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:19:11.493 [DEBUG] [Thread-19585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:19:11.493 [DEBUG] [Thread-19585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:19:11.493 [DEBUG] [Thread-19585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:19:11.493 [DEBUG] [Thread-19585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:19:11.493 [DEBUG] [Thread-19585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:19:11.493 [DEBUG] [Thread-19585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:19:11.493 [DEBUG] [Thread-19585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:19:11.494 [DEBUG] [Thread-19585] [transport.py] [_log()] client lang: <none>
2026-04-15T13:19:11.494 [DEBUG] [Thread-19585] [transport.py] [_log()] server lang: <none>
2026-04-15T13:19:11.494 [DEBUG] [Thread-19585] [transport.py] [_log()] kex follows: False
2026-04-15T13:19:11.494 [DEBUG] [Thread-19585] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:19:11.494 [DEBUG] [Thread-19585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:19:11.494 [DEBUG] [Thread-19585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:19:11.494 [DEBUG] [Thread-19585] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:19:11.494 [DEBUG] [Thread-19585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:19:11.494 [DEBUG] [Thread-19585] [transport.py] [_log()] Compression: none
2026-04-15T13:19:11.494 [DEBUG] [Thread-19585] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:19:11.549 [DEBUG] [Thread-19585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:19:11.549 [DEBUG] [Thread-19585] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:19:11.550 [DEBUG] [Thread-19585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:19:11.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:19:11.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:19:11.606 [DEBUG] [Thread-19585] [transport.py] [_log()] userauth is OK
2026-04-15T13:19:11.606 [DEBUG] [Thread-19585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:19:11.606 [DEBUG] [Thread-19585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:19:11.607 [DEBUG] [Thread-19585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:19:11.607 [DEBUG] [Thread-19585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:19:11.632 [INFO] [Thread-19585] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:19:11.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:19:11.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:19:12.462 [DEBUG] [Thread-19585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:19:12.463 [DEBUG] [Thread-19585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:19:12.510 [DEBUG] [Thread-19585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:19:12.510 [DEBUG] [Thread-19585] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:19:12.519 [DEBUG] [Thread-19585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:19:12.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:19: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')
2026-04-15T13:19:12.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
2026-04-15T13:19:12.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:19:12.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:19:12.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:19:12.554 [DEBUG] [Thread-19585] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:19:15.319 [DEBUG] [Thread-19587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:19:20.976 [DEBUG] [Thread-19588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:19:30.362 [DEBUG] [Thread-19589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:19:42.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:19:42.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:19:42.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
2026-04-15T13:19:43.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 19, 2), 7.34765, 61.1485, 0.0, 13.3214, 14.1863, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:19:43.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:19:02
2026-04-15T13:19:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:19:44.723 [DEBUG] [Thread-19590] [transport.py] [_log()] starting thread (client mode): 0xf13c8220
2026-04-15T13:19:44.723 [DEBUG] [Thread-19590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:19:44.743 [DEBUG] [Thread-19590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:19:44.743 [INFO] [Thread-19590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:19:44.746 [DEBUG] [Thread-19590] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:19:44.746 [DEBUG] [Thread-19590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:19:44.746 [DEBUG] [Thread-19590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:19:44.746 [DEBUG] [Thread-19590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:19:44.746 [DEBUG] [Thread-19590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:19:44.746 [DEBUG] [Thread-19590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:19:44.746 [DEBUG] [Thread-19590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:19:44.746 [DEBUG] [Thread-19590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:19:44.746 [DEBUG] [Thread-19590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:19:44.747 [DEBUG] [Thread-19590] [transport.py] [_log()] client lang: <none>
2026-04-15T13:19:44.747 [DEBUG] [Thread-19590] [transport.py] [_log()] server lang: <none>
2026-04-15T13:19:44.747 [DEBUG] [Thread-19590] [transport.py] [_log()] kex follows: False
2026-04-15T13:19:44.747 [DEBUG] [Thread-19590] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:19:44.747 [DEBUG] [Thread-19590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:19:44.747 [DEBUG] [Thread-19590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:19:44.747 [DEBUG] [Thread-19590] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:19:44.747 [DEBUG] [Thread-19590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:19:44.747 [DEBUG] [Thread-19590] [transport.py] [_log()] Compression: none
2026-04-15T13:19:44.747 [DEBUG] [Thread-19590] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:19:44.762 [DEBUG] [Thread-19590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:19:44.763 [DEBUG] [Thread-19590] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:19:44.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:19:44.763 [DEBUG] [Thread-19590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:19:44.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:19:44.804 [DEBUG] [Thread-19590] [transport.py] [_log()] userauth is OK
2026-04-15T13:19:44.804 [DEBUG] [Thread-19590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:19:44.805 [DEBUG] [Thread-19590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:19:44.805 [DEBUG] [Thread-19590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:19:44.805 [DEBUG] [Thread-19590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:19:44.829 [INFO] [Thread-19590] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:19:44.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:19:45.395 [DEBUG] [Thread-19592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:19:45.640 [DEBUG] [Thread-19590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:19:45.640 [DEBUG] [Thread-19590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:19:45.641 [DEBUG] [Thread-19590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:19:45.681 [DEBUG] [Thread-19590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:19:45.681 [DEBUG] [Thread-19590] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:19:45.684 [DEBUG] [Thread-19590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:19:45.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:19:45.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:19:45.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:19:45.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:19:45.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:19:45.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:19:45.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:19:45.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:19:45.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:19:45.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.471666 -999.00  +13.50  24.10     67   +7.60 1 2 1 1 1   888    0 7.07 48.33 ----- 23.5 24.1 312.4 26.3 21.0 -18.5 19.9 -16.9 19.8 -16.4 21.1 -16.8
2026-04-15T13:19:45.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:19:45.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:19:45.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.471666
2026-04-15T13:19:45.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:19:45.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:19:45.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:19:45.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:19:45.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:19:45.711 [DEBUG] [Thread-19590] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:19:45.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:19:02', tmtdew=7.34765, humidity=61.1485, cloud=0.0, wind=13.3214, temperature=14.1863, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:19:11.942', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:19:45.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:19:45.967 [DEBUG] [Thread-19594] [transport.py] [_log()] starting thread (client mode): 0xee98ea70
2026-04-15T13:19:45.967 [DEBUG] [Thread-19594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:19:45.981 [DEBUG] [Thread-19594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:19:45.981 [INFO] [Thread-19594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:19:45.988 [DEBUG] [Thread-19594] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:19:45.988 [DEBUG] [Thread-19594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:19:45.989 [DEBUG] [Thread-19594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:19:45.989 [DEBUG] [Thread-19594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:19:45.989 [DEBUG] [Thread-19594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:19:45.989 [DEBUG] [Thread-19594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:19:45.989 [DEBUG] [Thread-19594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:19:45.989 [DEBUG] [Thread-19594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:19:45.989 [DEBUG] [Thread-19594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:19:45.989 [DEBUG] [Thread-19594] [transport.py] [_log()] client lang: <none>
2026-04-15T13:19:45.989 [DEBUG] [Thread-19594] [transport.py] [_log()] server lang: <none>
2026-04-15T13:19:45.989 [DEBUG] [Thread-19594] [transport.py] [_log()] kex follows: False
2026-04-15T13:19:45.989 [DEBUG] [Thread-19594] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:19:45.989 [DEBUG] [Thread-19594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:19:45.989 [DEBUG] [Thread-19594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:19:45.990 [DEBUG] [Thread-19594] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:19:45.990 [DEBUG] [Thread-19594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:19:45.990 [DEBUG] [Thread-19594] [transport.py] [_log()] Compression: none
2026-04-15T13:19:45.990 [DEBUG] [Thread-19594] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:19:46.045 [DEBUG] [Thread-19594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:19:46.046 [DEBUG] [Thread-19594] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:19:46.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:19:46.046 [DEBUG] [Thread-19594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:19:46.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:19:46.102 [DEBUG] [Thread-19594] [transport.py] [_log()] userauth is OK
2026-04-15T13:19:46.102 [DEBUG] [Thread-19594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:19:46.102 [DEBUG] [Thread-19594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:19:46.102 [DEBUG] [Thread-19594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:19:46.102 [DEBUG] [Thread-19594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:19:46.122 [INFO] [Thread-19594] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:19:46.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:19:46.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:19:46.956 [DEBUG] [Thread-19594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:19:46.956 [DEBUG] [Thread-19594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:19:47.006 [DEBUG] [Thread-19594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:19:47.006 [DEBUG] [Thread-19594] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:19:47.018 [DEBUG] [Thread-19594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:19:47.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:19:47.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')
2026-04-15T13:19:47.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
2026-04-15T13:19:47.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:19:47.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:19:47.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:19:47.053 [DEBUG] [Thread-19594] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:19:53.685 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:19:53.687 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:20:00.427 [DEBUG] [Thread-19596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:20:15.470 [DEBUG] [Thread-19597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:20:17.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:20:17.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:20:17.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
2026-04-15T13:20:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 19, 37), 7.84041, 59.4677, 0.0, 27.4162, 15.4012, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:20:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:19:37
2026-04-15T13:20:18.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:20:19.300 [DEBUG] [Thread-19598] [transport.py] [_log()] starting thread (client mode): 0xf13efee0
2026-04-15T13:20:19.300 [DEBUG] [Thread-19598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:20:19.320 [DEBUG] [Thread-19598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:20:19.321 [INFO] [Thread-19598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:20:19.324 [DEBUG] [Thread-19598] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:20:19.324 [DEBUG] [Thread-19598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:20:19.324 [DEBUG] [Thread-19598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:20:19.324 [DEBUG] [Thread-19598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:20:19.324 [DEBUG] [Thread-19598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:20:19.324 [DEBUG] [Thread-19598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:20:19.324 [DEBUG] [Thread-19598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:20:19.324 [DEBUG] [Thread-19598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:20:19.324 [DEBUG] [Thread-19598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:20:19.324 [DEBUG] [Thread-19598] [transport.py] [_log()] client lang: <none>
2026-04-15T13:20:19.324 [DEBUG] [Thread-19598] [transport.py] [_log()] server lang: <none>
2026-04-15T13:20:19.325 [DEBUG] [Thread-19598] [transport.py] [_log()] kex follows: False
2026-04-15T13:20:19.325 [DEBUG] [Thread-19598] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:20:19.325 [DEBUG] [Thread-19598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:20:19.325 [DEBUG] [Thread-19598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:20:19.325 [DEBUG] [Thread-19598] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:20:19.325 [DEBUG] [Thread-19598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:20:19.325 [DEBUG] [Thread-19598] [transport.py] [_log()] Compression: none
2026-04-15T13:20:19.325 [DEBUG] [Thread-19598] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:20:19.341 [DEBUG] [Thread-19598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:20:19.341 [DEBUG] [Thread-19598] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:20:19.342 [DEBUG] [Thread-19598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:20:19.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:20:19.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:20:19.343 [DEBUG] [Thread-19598] [transport.py] [_log()] userauth is OK
2026-04-15T13:20:19.343 [DEBUG] [Thread-19598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:20:19.343 [DEBUG] [Thread-19598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:20:19.344 [DEBUG] [Thread-19598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:20:19.344 [DEBUG] [Thread-19598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:20:19.368 [INFO] [Thread-19598] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:20:19.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:20:21.076 [DEBUG] [Thread-19600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:20:22.244 [DEBUG] [Thread-19598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:20:22.244 [DEBUG] [Thread-19598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:20:22.245 [DEBUG] [Thread-19598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:20:22.285 [DEBUG] [Thread-19598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:20:22.285 [DEBUG] [Thread-19598] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:20:22.288 [DEBUG] [Thread-19598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:20:22.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:20:22.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:20:22.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:20:22.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:20:22.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:20:22.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:20:22.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:20:22.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:20:22.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:20:22.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.472013 -999.00  +13.50  18.37     68   +7.90 1 2 1 1 1   888    0 7.11 52.86 ----- 20.3 18.4 327.4 24.9 20.5 -22.5 19.5 -19.5 19.6 -15.4 20.6 -19.2
2026-04-15T13:20:22.312 [DEBUG] [Thread-19598] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:20:22.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:20:22.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:20:22.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.472013
2026-04-15T13:20:22.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:20:22.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:20:22.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:20:22.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:20:22.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:20:22.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:19:37', tmtdew=7.84041, humidity=59.4677, cloud=0.0, wind=27.4162, temperature=15.4012, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:19:41.923', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:20:22.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:20:22.581 [DEBUG] [Thread-19602] [transport.py] [_log()] starting thread (client mode): 0xf13c92a0
2026-04-15T13:20:22.581 [DEBUG] [Thread-19602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:20:22.597 [DEBUG] [Thread-19602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:20:22.597 [INFO] [Thread-19602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:20:22.604 [DEBUG] [Thread-19602] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:20:22.605 [DEBUG] [Thread-19602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:20:22.605 [DEBUG] [Thread-19602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:20:22.605 [DEBUG] [Thread-19602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:20:22.605 [DEBUG] [Thread-19602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:20:22.605 [DEBUG] [Thread-19602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:20:22.605 [DEBUG] [Thread-19602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:20:22.605 [DEBUG] [Thread-19602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:20:22.605 [DEBUG] [Thread-19602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:20:22.605 [DEBUG] [Thread-19602] [transport.py] [_log()] client lang: <none>
2026-04-15T13:20:22.605 [DEBUG] [Thread-19602] [transport.py] [_log()] server lang: <none>
2026-04-15T13:20:22.605 [DEBUG] [Thread-19602] [transport.py] [_log()] kex follows: False
2026-04-15T13:20:22.605 [DEBUG] [Thread-19602] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:20:22.606 [DEBUG] [Thread-19602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:20:22.606 [DEBUG] [Thread-19602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:20:22.606 [DEBUG] [Thread-19602] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:20:22.606 [DEBUG] [Thread-19602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:20:22.606 [DEBUG] [Thread-19602] [transport.py] [_log()] Compression: none
2026-04-15T13:20:22.606 [DEBUG] [Thread-19602] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:20:22.663 [DEBUG] [Thread-19602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:20:22.664 [DEBUG] [Thread-19602] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:20:22.664 [DEBUG] [Thread-19602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:20:22.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:20:22.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:20:22.725 [DEBUG] [Thread-19602] [transport.py] [_log()] userauth is OK
2026-04-15T13:20:22.725 [DEBUG] [Thread-19602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:20:22.726 [DEBUG] [Thread-19602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:20:22.726 [DEBUG] [Thread-19602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:20:22.726 [DEBUG] [Thread-19602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:20:22.751 [INFO] [Thread-19602] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:20:22.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:20:22.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:20:23.593 [DEBUG] [Thread-19602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:20:23.593 [DEBUG] [Thread-19602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:20:23.641 [DEBUG] [Thread-19602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:20:23.641 [DEBUG] [Thread-19602] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:20:23.651 [DEBUG] [Thread-19602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:20:23.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:20:23.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')
2026-04-15T13:20:23.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
2026-04-15T13:20:23.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:20:23.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:20:23.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:20:23.696 [DEBUG] [Thread-19602] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:20:30.502 [DEBUG] [Thread-19604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:20:45.547 [DEBUG] [Thread-19605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:20:53.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:20:53.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:20:53.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
2026-04-15T13:20:53.825 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:20:53.826 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:20:55.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 20, 12), 7.86141, 58.9052, 0.0, 17.7865, 14.252, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:20:55.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:20:12
2026-04-15T13:20:55.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:20:55.912 [DEBUG] [Thread-19606] [transport.py] [_log()] starting thread (client mode): 0xf13cab60
2026-04-15T13:20:55.912 [DEBUG] [Thread-19606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:20:55.932 [DEBUG] [Thread-19606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:20:55.932 [INFO] [Thread-19606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:20:55.935 [DEBUG] [Thread-19606] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:20:55.935 [DEBUG] [Thread-19606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:20:55.936 [DEBUG] [Thread-19606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:20:55.936 [DEBUG] [Thread-19606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:20:55.936 [DEBUG] [Thread-19606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:20:55.936 [DEBUG] [Thread-19606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:20:55.936 [DEBUG] [Thread-19606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:20:55.936 [DEBUG] [Thread-19606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:20:55.936 [DEBUG] [Thread-19606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:20:55.936 [DEBUG] [Thread-19606] [transport.py] [_log()] client lang: <none>
2026-04-15T13:20:55.936 [DEBUG] [Thread-19606] [transport.py] [_log()] server lang: <none>
2026-04-15T13:20:55.936 [DEBUG] [Thread-19606] [transport.py] [_log()] kex follows: False
2026-04-15T13:20:55.936 [DEBUG] [Thread-19606] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:20:55.936 [DEBUG] [Thread-19606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:20:55.936 [DEBUG] [Thread-19606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:20:55.937 [DEBUG] [Thread-19606] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:20:55.937 [DEBUG] [Thread-19606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:20:55.937 [DEBUG] [Thread-19606] [transport.py] [_log()] Compression: none
2026-04-15T13:20:55.937 [DEBUG] [Thread-19606] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:20:55.954 [DEBUG] [Thread-19606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:20:55.955 [DEBUG] [Thread-19606] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:20:55.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:20:55.956 [DEBUG] [Thread-19606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:20:55.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:20:55.957 [DEBUG] [Thread-19606] [transport.py] [_log()] userauth is OK
2026-04-15T13:20:55.957 [DEBUG] [Thread-19606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:20:55.957 [DEBUG] [Thread-19606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:20:55.957 [DEBUG] [Thread-19606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:20:55.957 [DEBUG] [Thread-19606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:20:55.990 [INFO] [Thread-19606] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:20:55.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:20:56.755 [DEBUG] [Thread-19606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:20:56.755 [DEBUG] [Thread-19606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:20:56.756 [DEBUG] [Thread-19606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:20:56.796 [DEBUG] [Thread-19606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:20:56.796 [DEBUG] [Thread-19606] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:20:56.799 [DEBUG] [Thread-19606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:20:56.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:20:56.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:20:56.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:20:56.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:20:56.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:20:56.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:20:56.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:20:56.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:20:56.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:20:56.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.472360 -999.00  +13.50  18.43     69   +8.00 1 2 1 1 1   888    0 7.23 48.81 ----- 13.3 18.4 315.0 27.2 20.8 -20.9 19.6 -20.1 -999.0 -999.0 20.8 -19.3
2026-04-15T13:20:56.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:20:56.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:20:56.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.472360
2026-04-15T13:20:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:20:56.823 [DEBUG] [Thread-19606] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:20:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:20:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:20:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:20:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:20:56.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:20:12', tmtdew=7.86141, humidity=58.9052, cloud=0.0, wind=17.7865, temperature=14.252, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:20:11.904', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:20:57.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:20:57.079 [DEBUG] [Thread-19609] [transport.py] [_log()] starting thread (client mode): 0xf13ca920
2026-04-15T13:20:57.079 [DEBUG] [Thread-19609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:20:57.093 [DEBUG] [Thread-19609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:20:57.093 [INFO] [Thread-19609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:20:57.100 [DEBUG] [Thread-19609] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:20:57.100 [DEBUG] [Thread-19609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:20:57.101 [DEBUG] [Thread-19609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:20:57.101 [DEBUG] [Thread-19609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:20:57.101 [DEBUG] [Thread-19609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:20:57.101 [DEBUG] [Thread-19609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:20:57.101 [DEBUG] [Thread-19609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:20:57.101 [DEBUG] [Thread-19609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:20:57.101 [DEBUG] [Thread-19609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:20:57.101 [DEBUG] [Thread-19609] [transport.py] [_log()] client lang: <none>
2026-04-15T13:20:57.101 [DEBUG] [Thread-19609] [transport.py] [_log()] server lang: <none>
2026-04-15T13:20:57.101 [DEBUG] [Thread-19609] [transport.py] [_log()] kex follows: False
2026-04-15T13:20:57.101 [DEBUG] [Thread-19609] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:20:57.101 [DEBUG] [Thread-19609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:20:57.102 [DEBUG] [Thread-19609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:20:57.102 [DEBUG] [Thread-19609] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:20:57.102 [DEBUG] [Thread-19609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:20:57.102 [DEBUG] [Thread-19609] [transport.py] [_log()] Compression: none
2026-04-15T13:20:57.102 [DEBUG] [Thread-19609] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:20:57.157 [DEBUG] [Thread-19609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:20:57.157 [DEBUG] [Thread-19609] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:20:57.158 [DEBUG] [Thread-19609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:20:57.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:20:57.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:20:57.214 [DEBUG] [Thread-19609] [transport.py] [_log()] userauth is OK
2026-04-15T13:20:57.215 [DEBUG] [Thread-19609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:20:57.215 [DEBUG] [Thread-19609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:20:57.215 [DEBUG] [Thread-19609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:20:57.215 [DEBUG] [Thread-19609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:20:57.240 [INFO] [Thread-19609] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:20:57.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:20:57.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:20:58.058 [DEBUG] [Thread-19609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:20:58.058 [DEBUG] [Thread-19609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:20:58.105 [DEBUG] [Thread-19609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:20:58.106 [DEBUG] [Thread-19609] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:20:58.114 [DEBUG] [Thread-19609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:20:58.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:20:58.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')
2026-04-15T13:20:58.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
2026-04-15T13:20:58.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:20:58.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:20:58.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:20:58.145 [DEBUG] [Thread-19609] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:21:00.578 [DEBUG] [Thread-19611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:21:15.623 [DEBUG] [Thread-19612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:21:21.155 [DEBUG] [Thread-19613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:21:28.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:21:28.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:21:28.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
2026-04-15T13:21:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 20, 48), 7.69809, 59.8655, 0.0, 18.5962, 14.6388, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:21:29.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:20:48
2026-04-15T13:21:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:21:30.432 [DEBUG] [Thread-19614] [transport.py] [_log()] starting thread (client mode): 0xee988430
2026-04-15T13:21:30.432 [DEBUG] [Thread-19614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:21:30.451 [DEBUG] [Thread-19614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:21:30.451 [INFO] [Thread-19614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:21:30.454 [DEBUG] [Thread-19614] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:21:30.454 [DEBUG] [Thread-19614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:21:30.454 [DEBUG] [Thread-19614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:21:30.454 [DEBUG] [Thread-19614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:21:30.454 [DEBUG] [Thread-19614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:21:30.454 [DEBUG] [Thread-19614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:21:30.454 [DEBUG] [Thread-19614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:21:30.454 [DEBUG] [Thread-19614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:21:30.455 [DEBUG] [Thread-19614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:21:30.455 [DEBUG] [Thread-19614] [transport.py] [_log()] client lang: <none>
2026-04-15T13:21:30.455 [DEBUG] [Thread-19614] [transport.py] [_log()] server lang: <none>
2026-04-15T13:21:30.455 [DEBUG] [Thread-19614] [transport.py] [_log()] kex follows: False
2026-04-15T13:21:30.455 [DEBUG] [Thread-19614] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:21:30.455 [DEBUG] [Thread-19614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:21:30.455 [DEBUG] [Thread-19614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:21:30.455 [DEBUG] [Thread-19614] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:21:30.455 [DEBUG] [Thread-19614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:21:30.455 [DEBUG] [Thread-19614] [transport.py] [_log()] Compression: none
2026-04-15T13:21:30.455 [DEBUG] [Thread-19614] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:21:30.470 [DEBUG] [Thread-19614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:21:30.470 [DEBUG] [Thread-19614] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:21:30.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:21:30.471 [DEBUG] [Thread-19614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:21:30.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:21:30.472 [DEBUG] [Thread-19614] [transport.py] [_log()] userauth is OK
2026-04-15T13:21:30.472 [DEBUG] [Thread-19614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:21:30.472 [DEBUG] [Thread-19614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:21:30.472 [DEBUG] [Thread-19614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:21:30.472 [DEBUG] [Thread-19614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:21:30.503 [INFO] [Thread-19614] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:21:30.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:21:30.655 [DEBUG] [Thread-19616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:21:31.310 [DEBUG] [Thread-19614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:21:31.310 [DEBUG] [Thread-19614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:21:31.311 [DEBUG] [Thread-19614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:21:31.351 [DEBUG] [Thread-19614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:21:31.351 [DEBUG] [Thread-19614] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:21:31.354 [DEBUG] [Thread-19614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:21:31.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:21:31.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:21:31.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:21:31.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:21:31.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:21:31.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:21:31.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:21:31.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:21:31.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:21:31.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.472707 -999.00  +13.70  15.34     68   +8.00 1 2 1 1 1   888    0 6.90 44.23 ----- 12.9 15.3 297.6 17.4 21.0 -21.5 19.8 -19.1 19.8 -18.3 21.0 -18.7
2026-04-15T13:21:31.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:21:31.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:21:31.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.472707
2026-04-15T13:21:31.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:21:31.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:21:31.379 [DEBUG] [Thread-19614] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:21:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:21:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:21:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:21:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:20:48', tmtdew=7.69809, humidity=59.8655, cloud=0.0, wind=18.5962, temperature=14.6388, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:20:41.885', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:21:31.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:21:31.637 [DEBUG] [Thread-19618] [transport.py] [_log()] starting thread (client mode): 0xf13643a0
2026-04-15T13:21:31.637 [DEBUG] [Thread-19618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:21:31.653 [DEBUG] [Thread-19618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:21:31.653 [INFO] [Thread-19618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:21:31.660 [DEBUG] [Thread-19618] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:21:31.660 [DEBUG] [Thread-19618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:21:31.660 [DEBUG] [Thread-19618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:21:31.661 [DEBUG] [Thread-19618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:21:31.661 [DEBUG] [Thread-19618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:21:31.661 [DEBUG] [Thread-19618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:21:31.661 [DEBUG] [Thread-19618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:21:31.661 [DEBUG] [Thread-19618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:21:31.661 [DEBUG] [Thread-19618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:21:31.661 [DEBUG] [Thread-19618] [transport.py] [_log()] client lang: <none>
2026-04-15T13:21:31.661 [DEBUG] [Thread-19618] [transport.py] [_log()] server lang: <none>
2026-04-15T13:21:31.661 [DEBUG] [Thread-19618] [transport.py] [_log()] kex follows: False
2026-04-15T13:21:31.661 [DEBUG] [Thread-19618] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:21:31.661 [DEBUG] [Thread-19618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:21:31.661 [DEBUG] [Thread-19618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:21:31.662 [DEBUG] [Thread-19618] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:21:31.662 [DEBUG] [Thread-19618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:21:31.662 [DEBUG] [Thread-19618] [transport.py] [_log()] Compression: none
2026-04-15T13:21:31.662 [DEBUG] [Thread-19618] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:21:31.717 [DEBUG] [Thread-19618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:21:31.718 [DEBUG] [Thread-19618] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:21:31.718 [DEBUG] [Thread-19618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:21:31.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:21:31.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:21:31.774 [DEBUG] [Thread-19618] [transport.py] [_log()] userauth is OK
2026-04-15T13:21:31.774 [DEBUG] [Thread-19618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:21:31.774 [DEBUG] [Thread-19618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:21:31.774 [DEBUG] [Thread-19618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:21:31.774 [DEBUG] [Thread-19618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:21:31.800 [INFO] [Thread-19618] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:21:31.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:21:31.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:21:32.650 [DEBUG] [Thread-19618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:21:32.650 [DEBUG] [Thread-19618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:21:32.698 [DEBUG] [Thread-19618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:21:32.698 [DEBUG] [Thread-19618] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:21:32.707 [DEBUG] [Thread-19618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:21:32.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:21:32.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')
2026-04-15T13:21:32.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
2026-04-15T13:21:32.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:21:32.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:21:32.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:21:32.744 [DEBUG] [Thread-19618] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:21:45.685 [DEBUG] [Thread-19620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:21:53.965 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:21:53.966 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:22:00.723 [DEBUG] [Thread-19621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:22:02.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:22:02.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:22:02.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
2026-04-15T13:22:04.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 21, 24), 7.60042, 60.2504, 0.0, 13.6051, 14.0354, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:22:04.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:21:24
2026-04-15T13:22:04.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:22:04.949 [DEBUG] [Thread-19622] [transport.py] [_log()] starting thread (client mode): 0xee989d20
2026-04-15T13:22:04.949 [DEBUG] [Thread-19622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:22:04.969 [DEBUG] [Thread-19622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:22:04.969 [INFO] [Thread-19622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:22:04.972 [DEBUG] [Thread-19622] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:22:04.972 [DEBUG] [Thread-19622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:22:04.972 [DEBUG] [Thread-19622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:22:04.972 [DEBUG] [Thread-19622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:22:04.972 [DEBUG] [Thread-19622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:22:04.973 [DEBUG] [Thread-19622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:22:04.973 [DEBUG] [Thread-19622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:22:04.973 [DEBUG] [Thread-19622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:22:04.973 [DEBUG] [Thread-19622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:22:04.973 [DEBUG] [Thread-19622] [transport.py] [_log()] client lang: <none>
2026-04-15T13:22:04.973 [DEBUG] [Thread-19622] [transport.py] [_log()] server lang: <none>
2026-04-15T13:22:04.973 [DEBUG] [Thread-19622] [transport.py] [_log()] kex follows: False
2026-04-15T13:22:04.973 [DEBUG] [Thread-19622] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:22:04.973 [DEBUG] [Thread-19622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:22:04.973 [DEBUG] [Thread-19622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:22:04.973 [DEBUG] [Thread-19622] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:22:04.973 [DEBUG] [Thread-19622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:22:04.974 [DEBUG] [Thread-19622] [transport.py] [_log()] Compression: none
2026-04-15T13:22:04.974 [DEBUG] [Thread-19622] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:22:04.994 [DEBUG] [Thread-19622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:22:04.995 [DEBUG] [Thread-19622] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:22:04.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:22:04.995 [DEBUG] [Thread-19622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:22:04.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:22:04.997 [DEBUG] [Thread-19622] [transport.py] [_log()] userauth is OK
2026-04-15T13:22:04.997 [DEBUG] [Thread-19622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:22:04.997 [DEBUG] [Thread-19622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:22:04.997 [DEBUG] [Thread-19622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:22:04.997 [DEBUG] [Thread-19622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:22:05.022 [INFO] [Thread-19622] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:22:05.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:22:05.782 [DEBUG] [Thread-19622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:22:05.783 [DEBUG] [Thread-19622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:22:05.783 [DEBUG] [Thread-19622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:22:05.824 [DEBUG] [Thread-19622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:22:05.824 [DEBUG] [Thread-19622] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:22:05.827 [DEBUG] [Thread-19622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:22:05.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:22:05.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:22:05.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:22:05.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:22:05.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:22:05.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:22:05.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:22:05.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:22:05.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:22:05.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.473054 -999.00  +14.00  15.80     68   +8.40 1 2 1 1 1   888    0 6.85 42.68 ----- 13.9 15.8 286.0 18.1 21.0 -20.3 19.9 -19.4 19.9 -17.9 21.2 -18.4
2026-04-15T13:22:05.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:22:05.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:22:05.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.473054
2026-04-15T13:22:05.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:22:05.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:22:05.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:22:05.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:22:05.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:22:05.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:21:24', tmtdew=7.60042, humidity=60.2504, cloud=0.0, wind=13.6051, temperature=14.0354, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:21:11.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:22:05.850 [DEBUG] [Thread-19622] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:22:06.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:22:15.758 [DEBUG] [Thread-19625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:22:21.255 [DEBUG] [Thread-19626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:22:30.803 [DEBUG] [Thread-19627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:22:45.832 [DEBUG] [Thread-19628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:22:54.106 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:22:54.107 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:23:00.863 [DEBUG] [Thread-19629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:23:15.893 [DEBUG] [Thread-19630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:23:21.384 [DEBUG] [Thread-19631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:23:30.923 [DEBUG] [Thread-19632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:23:45.952 [DEBUG] [Thread-19633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:23:54.248 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:23:54.249 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:24:00.983 [DEBUG] [Thread-19634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:24:16.027 [DEBUG] [Thread-19635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:24:20.746 [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
2026-04-15T13:24:21.464 [DEBUG] [Thread-19636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:24:31.059 [DEBUG] [Thread-19637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:24:46.091 [DEBUG] [Thread-19638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:24:50.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:24:50.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:24:50.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
2026-04-15T13:24:52.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 24, 22), 7.68343, 59.9715, 0.0, 19.5152, 14.0198, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:24:52.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:24:22
2026-04-15T13:24:52.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:24:52.900 [DEBUG] [Thread-19639] [transport.py] [_log()] starting thread (client mode): 0xf13cb490
2026-04-15T13:24:52.900 [DEBUG] [Thread-19639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:24:52.921 [DEBUG] [Thread-19639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:24:52.921 [INFO] [Thread-19639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:24:52.924 [DEBUG] [Thread-19639] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:24:52.924 [DEBUG] [Thread-19639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:24:52.924 [DEBUG] [Thread-19639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:24:52.924 [DEBUG] [Thread-19639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:24:52.925 [DEBUG] [Thread-19639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:24:52.925 [DEBUG] [Thread-19639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:24:52.925 [DEBUG] [Thread-19639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:24:52.925 [DEBUG] [Thread-19639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:24:52.925 [DEBUG] [Thread-19639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:24:52.925 [DEBUG] [Thread-19639] [transport.py] [_log()] client lang: <none>
2026-04-15T13:24:52.925 [DEBUG] [Thread-19639] [transport.py] [_log()] server lang: <none>
2026-04-15T13:24:52.925 [DEBUG] [Thread-19639] [transport.py] [_log()] kex follows: False
2026-04-15T13:24:52.925 [DEBUG] [Thread-19639] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:24:52.925 [DEBUG] [Thread-19639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:24:52.925 [DEBUG] [Thread-19639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:24:52.925 [DEBUG] [Thread-19639] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:24:52.926 [DEBUG] [Thread-19639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:24:52.926 [DEBUG] [Thread-19639] [transport.py] [_log()] Compression: none
2026-04-15T13:24:52.926 [DEBUG] [Thread-19639] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:24:52.941 [DEBUG] [Thread-19639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:24:52.942 [DEBUG] [Thread-19639] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:24:52.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:24:52.943 [DEBUG] [Thread-19639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:24:52.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:24:52.944 [DEBUG] [Thread-19639] [transport.py] [_log()] userauth is OK
2026-04-15T13:24:52.944 [DEBUG] [Thread-19639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:24:52.944 [DEBUG] [Thread-19639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:24:52.944 [DEBUG] [Thread-19639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:24:52.944 [DEBUG] [Thread-19639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:24:52.968 [INFO] [Thread-19639] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:24:52.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:24:53.728 [DEBUG] [Thread-19639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:24:53.728 [DEBUG] [Thread-19639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:24:53.728 [DEBUG] [Thread-19639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:24:53.770 [DEBUG] [Thread-19639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:24:53.770 [DEBUG] [Thread-19639] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:24:53.772 [DEBUG] [Thread-19639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:24:53.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:24:53.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:24:53.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:24:53.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:24:53.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:24:53.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:24:53.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:24:53.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:24:53.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:24:53.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.475138 -999.00  +14.40  14.50     67   +8.40 1 2 1 1 1   888    0 7.07 50.18 ----- 13.0 14.5 338.8 23.9 21.4 -22.2 20.1 -21.3 20.2 -17.0 21.5 -18.9
2026-04-15T13:24:53.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:24:53.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:24:53.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.475138
2026-04-15T13:24:53.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:24:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:24:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:24:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:24:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:24:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:24:22', tmtdew=7.68343, humidity=59.9715, cloud=0.0, wind=19.5152, temperature=14.0198, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:24:11.923', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:24:53.794 [DEBUG] [Thread-19639] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:24:54.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:24:54.043 [DEBUG] [Thread-19642] [transport.py] [_log()] starting thread (client mode): 0xf13ca470
2026-04-15T13:24:54.043 [DEBUG] [Thread-19642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:24:54.057 [DEBUG] [Thread-19642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:24:54.057 [INFO] [Thread-19642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:24:54.065 [DEBUG] [Thread-19642] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:24:54.065 [DEBUG] [Thread-19642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:24:54.065 [DEBUG] [Thread-19642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:24:54.065 [DEBUG] [Thread-19642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:24:54.065 [DEBUG] [Thread-19642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:24:54.065 [DEBUG] [Thread-19642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:24:54.065 [DEBUG] [Thread-19642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:24:54.065 [DEBUG] [Thread-19642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:24:54.065 [DEBUG] [Thread-19642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:24:54.066 [DEBUG] [Thread-19642] [transport.py] [_log()] client lang: <none>
2026-04-15T13:24:54.066 [DEBUG] [Thread-19642] [transport.py] [_log()] server lang: <none>
2026-04-15T13:24:54.066 [DEBUG] [Thread-19642] [transport.py] [_log()] kex follows: False
2026-04-15T13:24:54.066 [DEBUG] [Thread-19642] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:24:54.066 [DEBUG] [Thread-19642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:24:54.066 [DEBUG] [Thread-19642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:24:54.066 [DEBUG] [Thread-19642] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:24:54.066 [DEBUG] [Thread-19642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:24:54.066 [DEBUG] [Thread-19642] [transport.py] [_log()] Compression: none
2026-04-15T13:24:54.066 [DEBUG] [Thread-19642] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:24:54.121 [DEBUG] [Thread-19642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:24:54.122 [DEBUG] [Thread-19642] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:24:54.122 [DEBUG] [Thread-19642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:24:54.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:24:54.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:24:54.178 [DEBUG] [Thread-19642] [transport.py] [_log()] userauth is OK
2026-04-15T13:24:54.179 [DEBUG] [Thread-19642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:24:54.179 [DEBUG] [Thread-19642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:24:54.179 [DEBUG] [Thread-19642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:24:54.179 [DEBUG] [Thread-19642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:24:54.204 [INFO] [Thread-19642] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:24:54.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:24:54.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:24:54.389 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:24:54.391 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:24:55.023 [DEBUG] [Thread-19642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:24:55.024 [DEBUG] [Thread-19642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:24:55.071 [DEBUG] [Thread-19642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:24:55.071 [DEBUG] [Thread-19642] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:24:55.080 [DEBUG] [Thread-19642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:24:55.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:24:55.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')
2026-04-15T13:24:55.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
2026-04-15T13:24:55.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:24:55.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:24:55.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:24:55.115 [DEBUG] [Thread-19642] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:25:01.122 [DEBUG] [Thread-19644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:25:16.169 [DEBUG] [Thread-19645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:25:21.570 [DEBUG] [Thread-19646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:25:25.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:25:25.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:25:25.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:25:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 24, 57), 7.59069, 60.3357, 0.0, 16.5686, 14.0361, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:25:26.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:24:57
2026-04-15T13:25:26.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:25:27.394 [DEBUG] [Thread-19647] [transport.py] [_log()] starting thread (client mode): 0xf13ef040
2026-04-15T13:25:27.394 [DEBUG] [Thread-19647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:25:27.413 [DEBUG] [Thread-19647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:25:27.413 [INFO] [Thread-19647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:25:27.417 [DEBUG] [Thread-19647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:25:27.417 [DEBUG] [Thread-19647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:25:27.417 [DEBUG] [Thread-19647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:25:27.417 [DEBUG] [Thread-19647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:25:27.417 [DEBUG] [Thread-19647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:25:27.417 [DEBUG] [Thread-19647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:25:27.417 [DEBUG] [Thread-19647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:25:27.417 [DEBUG] [Thread-19647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:25:27.417 [DEBUG] [Thread-19647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:25:27.417 [DEBUG] [Thread-19647] [transport.py] [_log()] client lang: <none>
2026-04-15T13:25:27.418 [DEBUG] [Thread-19647] [transport.py] [_log()] server lang: <none>
2026-04-15T13:25:27.418 [DEBUG] [Thread-19647] [transport.py] [_log()] kex follows: False
2026-04-15T13:25:27.418 [DEBUG] [Thread-19647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:25:27.418 [DEBUG] [Thread-19647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:25:27.418 [DEBUG] [Thread-19647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:25:27.418 [DEBUG] [Thread-19647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:25:27.418 [DEBUG] [Thread-19647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:25:27.418 [DEBUG] [Thread-19647] [transport.py] [_log()] Compression: none
2026-04-15T13:25:27.418 [DEBUG] [Thread-19647] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:25:27.434 [DEBUG] [Thread-19647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:25:27.434 [DEBUG] [Thread-19647] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:25:27.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:25:27.435 [DEBUG] [Thread-19647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:25:27.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:25:27.436 [DEBUG] [Thread-19647] [transport.py] [_log()] userauth is OK
2026-04-15T13:25:27.436 [DEBUG] [Thread-19647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:25:27.436 [DEBUG] [Thread-19647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:25:27.436 [DEBUG] [Thread-19647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:25:27.436 [DEBUG] [Thread-19647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:25:27.454 [INFO] [Thread-19647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:25:27.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:25:31.199 [DEBUG] [Thread-19649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:25:34.276 [DEBUG] [Thread-19647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:25:34.277 [DEBUG] [Thread-19647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:25:34.277 [DEBUG] [Thread-19647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:25:34.318 [DEBUG] [Thread-19647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:25:34.318 [DEBUG] [Thread-19647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:25:34.320 [DEBUG] [Thread-19647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:25:34.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:25:34.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:25:34.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:25:34.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:25:34.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:25:34.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:25:34.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:25:34.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:25:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:25:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.475485 -999.00  +14.90  15.08     64   +8.20 1 2 1 1 1   888    0 7.53 59.06 ----- 15.0 15.1 335.6 23.7 21.5 -21.1 20.2 -19.8 20.4 -16.8 21.7 -18.5
2026-04-15T13:25:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:25:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:25:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.475485
2026-04-15T13:25:34.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:25:34.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:25:34.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:25:34.502 [DEBUG] [Thread-19647] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:25:34.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:25:34.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:25:34.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:24:57', tmtdew=7.59069, humidity=60.3357, cloud=0.0, wind=16.5686, temperature=14.0361, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:24:41.904', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:25:34.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:25:34.736 [DEBUG] [Thread-19651] [transport.py] [_log()] starting thread (client mode): 0xee98ece0
2026-04-15T13:25:34.737 [DEBUG] [Thread-19651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:25:34.751 [DEBUG] [Thread-19651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:25:34.751 [INFO] [Thread-19651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:25:34.760 [DEBUG] [Thread-19651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:25:34.760 [DEBUG] [Thread-19651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:25:34.760 [DEBUG] [Thread-19651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:25:34.760 [DEBUG] [Thread-19651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:25:34.760 [DEBUG] [Thread-19651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:25:34.760 [DEBUG] [Thread-19651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:25:34.760 [DEBUG] [Thread-19651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:25:34.760 [DEBUG] [Thread-19651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:25:34.760 [DEBUG] [Thread-19651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:25:34.760 [DEBUG] [Thread-19651] [transport.py] [_log()] client lang: <none>
2026-04-15T13:25:34.760 [DEBUG] [Thread-19651] [transport.py] [_log()] server lang: <none>
2026-04-15T13:25:34.761 [DEBUG] [Thread-19651] [transport.py] [_log()] kex follows: False
2026-04-15T13:25:34.761 [DEBUG] [Thread-19651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:25:34.761 [DEBUG] [Thread-19651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:25:34.761 [DEBUG] [Thread-19651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:25:34.761 [DEBUG] [Thread-19651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:25:34.761 [DEBUG] [Thread-19651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:25:34.762 [DEBUG] [Thread-19651] [transport.py] [_log()] Compression: none
2026-04-15T13:25:34.762 [DEBUG] [Thread-19651] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:25:34.818 [DEBUG] [Thread-19651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:25:34.819 [DEBUG] [Thread-19651] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:25:34.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:25:34.819 [DEBUG] [Thread-19651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:25:34.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:25:34.875 [DEBUG] [Thread-19651] [transport.py] [_log()] userauth is OK
2026-04-15T13:25:34.875 [DEBUG] [Thread-19651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:25:34.875 [DEBUG] [Thread-19651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:25:34.875 [DEBUG] [Thread-19651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:25:34.875 [DEBUG] [Thread-19651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:25:34.896 [INFO] [Thread-19651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:25:34.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:25:34.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:25:35.750 [DEBUG] [Thread-19651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:25:35.750 [DEBUG] [Thread-19651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:25:35.798 [DEBUG] [Thread-19651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:25:35.798 [DEBUG] [Thread-19651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:25:35.808 [DEBUG] [Thread-19651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:25:35.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:25:35.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')
2026-04-15T13:25:35.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') -> 00000000
2026-04-15T13:25:35.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:25:35.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:25:35.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:25:35.848 [DEBUG] [Thread-19651] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:25:46.228 [DEBUG] [Thread-19653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:25:54.529 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:25:54.530 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:26:01.269 [DEBUG] [Thread-19654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:26:05.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:26:05.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:26:05.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:26:07.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 25, 32), 7.67423, 59.9876, 0.0, 15.1927, 13.9864, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:26:07.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:25:32
2026-04-15T13:26:07.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:26:07.985 [DEBUG] [Thread-19655] [transport.py] [_log()] starting thread (client mode): 0xf13efd60
2026-04-15T13:26:07.985 [DEBUG] [Thread-19655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:26:08.005 [DEBUG] [Thread-19655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:26:08.005 [INFO] [Thread-19655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:26:08.006 [DEBUG] [Thread-19655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:26:08.006 [DEBUG] [Thread-19655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:26:08.006 [DEBUG] [Thread-19655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:26:08.006 [DEBUG] [Thread-19655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:26:08.006 [DEBUG] [Thread-19655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:26:08.006 [DEBUG] [Thread-19655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:26:08.006 [DEBUG] [Thread-19655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:26:08.007 [DEBUG] [Thread-19655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:26:08.007 [DEBUG] [Thread-19655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:26:08.007 [DEBUG] [Thread-19655] [transport.py] [_log()] client lang: <none>
2026-04-15T13:26:08.007 [DEBUG] [Thread-19655] [transport.py] [_log()] server lang: <none>
2026-04-15T13:26:08.007 [DEBUG] [Thread-19655] [transport.py] [_log()] kex follows: False
2026-04-15T13:26:08.007 [DEBUG] [Thread-19655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:26:08.007 [DEBUG] [Thread-19655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:26:08.007 [DEBUG] [Thread-19655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:26:08.007 [DEBUG] [Thread-19655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:26:08.007 [DEBUG] [Thread-19655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:26:08.007 [DEBUG] [Thread-19655] [transport.py] [_log()] Compression: none
2026-04-15T13:26:08.008 [DEBUG] [Thread-19655] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:26:08.021 [DEBUG] [Thread-19655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:26:08.022 [DEBUG] [Thread-19655] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:26:08.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:26:08.023 [DEBUG] [Thread-19655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:26:08.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:26:08.028 [DEBUG] [Thread-19655] [transport.py] [_log()] userauth is OK
2026-04-15T13:26:08.028 [DEBUG] [Thread-19655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:26:08.028 [DEBUG] [Thread-19655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:26:08.029 [DEBUG] [Thread-19655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:26:08.029 [DEBUG] [Thread-19655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:26:08.052 [INFO] [Thread-19655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:26:08.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:26:08.662 [DEBUG] [Thread-19655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:26:08.662 [DEBUG] [Thread-19655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:26:08.663 [DEBUG] [Thread-19655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:26:08.703 [DEBUG] [Thread-19655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:26:08.703 [DEBUG] [Thread-19655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:26:08.706 [DEBUG] [Thread-19655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:26:08.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:26:08.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:26:08.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:26:08.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:26:08.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:26:08.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:26:08.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:26:08.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:26:08.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:26:08.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.476179 -999.00  +14.00  10.59     64   +7.40 1 2 1 1 1   888    0 8.06 75.41 ----- 8.5 10.6 343.4 16.3 21.6 -20.9 20.2 -20.1 20.4 -17.6 21.5 -23.7
2026-04-15T13:26:08.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:26:08.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:26:08.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.476179
2026-04-15T13:26:08.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:26:08.728 [DEBUG] [Thread-19655] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:26:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:26:08.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:26:08.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:26:08.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:26:08.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:25:32', tmtdew=7.67423, humidity=59.9876, cloud=0.0, wind=15.1927, temperature=13.9864, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:25:41.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:26:08.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:26:08.986 [DEBUG] [Thread-19658] [transport.py] [_log()] starting thread (client mode): 0xf13ee8f0
2026-04-15T13:26:08.986 [DEBUG] [Thread-19658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:26:09.000 [DEBUG] [Thread-19658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:26:09.001 [INFO] [Thread-19658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:26:09.008 [DEBUG] [Thread-19658] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:26:09.008 [DEBUG] [Thread-19658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:26:09.008 [DEBUG] [Thread-19658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:26:09.008 [DEBUG] [Thread-19658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:26:09.008 [DEBUG] [Thread-19658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:26:09.008 [DEBUG] [Thread-19658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:26:09.008 [DEBUG] [Thread-19658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:26:09.008 [DEBUG] [Thread-19658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:26:09.009 [DEBUG] [Thread-19658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:26:09.009 [DEBUG] [Thread-19658] [transport.py] [_log()] client lang: <none>
2026-04-15T13:26:09.009 [DEBUG] [Thread-19658] [transport.py] [_log()] server lang: <none>
2026-04-15T13:26:09.009 [DEBUG] [Thread-19658] [transport.py] [_log()] kex follows: False
2026-04-15T13:26:09.009 [DEBUG] [Thread-19658] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:26:09.009 [DEBUG] [Thread-19658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:26:09.009 [DEBUG] [Thread-19658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:26:09.009 [DEBUG] [Thread-19658] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:26:09.009 [DEBUG] [Thread-19658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:26:09.009 [DEBUG] [Thread-19658] [transport.py] [_log()] Compression: none
2026-04-15T13:26:09.009 [DEBUG] [Thread-19658] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:26:09.066 [DEBUG] [Thread-19658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:26:09.066 [DEBUG] [Thread-19658] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:26:09.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:26:09.067 [DEBUG] [Thread-19658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:26:09.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:26:09.122 [DEBUG] [Thread-19658] [transport.py] [_log()] userauth is OK
2026-04-15T13:26:09.122 [DEBUG] [Thread-19658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:26:09.123 [DEBUG] [Thread-19658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:26:09.123 [DEBUG] [Thread-19658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:26:09.123 [DEBUG] [Thread-19658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:26:09.148 [INFO] [Thread-19658] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:26:09.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:26:09.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:26:09.997 [DEBUG] [Thread-19658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:26:09.997 [DEBUG] [Thread-19658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:26:10.048 [DEBUG] [Thread-19658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:26:10.049 [DEBUG] [Thread-19658] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:26:10.057 [DEBUG] [Thread-19658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:26:10.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:26:10.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')
2026-04-15T13:26:10.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
2026-04-15T13:26:10.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:26:10.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:26:10.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:26:10.092 [DEBUG] [Thread-19658] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:26:16.299 [DEBUG] [Thread-19660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:26:21.651 [DEBUG] [Thread-19661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:26:31.337 [DEBUG] [Thread-19662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:26:40.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:26:40.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:26:40.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
2026-04-15T13:26:41.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 26, 9), 7.52735, 60.6005, 0.0, 15.2633, 14.0688, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:26:41.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:26:09
2026-04-15T13:26:41.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:26:42.150 [DEBUG] [Thread-19663] [transport.py] [_log()] starting thread (client mode): 0xf13e1b70
2026-04-15T13:26:42.150 [DEBUG] [Thread-19663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:26:42.162 [DEBUG] [Thread-19663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:26:42.162 [INFO] [Thread-19663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:26:42.165 [DEBUG] [Thread-19663] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:26:42.165 [DEBUG] [Thread-19663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:26:42.165 [DEBUG] [Thread-19663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:26:42.165 [DEBUG] [Thread-19663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:26:42.165 [DEBUG] [Thread-19663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:26:42.165 [DEBUG] [Thread-19663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:26:42.165 [DEBUG] [Thread-19663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:26:42.165 [DEBUG] [Thread-19663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:26:42.165 [DEBUG] [Thread-19663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:26:42.165 [DEBUG] [Thread-19663] [transport.py] [_log()] client lang: <none>
2026-04-15T13:26:42.166 [DEBUG] [Thread-19663] [transport.py] [_log()] server lang: <none>
2026-04-15T13:26:42.166 [DEBUG] [Thread-19663] [transport.py] [_log()] kex follows: False
2026-04-15T13:26:42.166 [DEBUG] [Thread-19663] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:26:42.166 [DEBUG] [Thread-19663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:26:42.166 [DEBUG] [Thread-19663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:26:42.166 [DEBUG] [Thread-19663] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:26:42.166 [DEBUG] [Thread-19663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:26:42.166 [DEBUG] [Thread-19663] [transport.py] [_log()] Compression: none
2026-04-15T13:26:42.166 [DEBUG] [Thread-19663] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:26:42.183 [DEBUG] [Thread-19663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:26:42.183 [DEBUG] [Thread-19663] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:26:42.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:26:42.184 [DEBUG] [Thread-19663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:26:42.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:26:42.185 [DEBUG] [Thread-19663] [transport.py] [_log()] userauth is OK
2026-04-15T13:26:42.185 [DEBUG] [Thread-19663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:26:42.185 [DEBUG] [Thread-19663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:26:42.185 [DEBUG] [Thread-19663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:26:42.185 [DEBUG] [Thread-19663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:26:42.202 [INFO] [Thread-19663] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:26:42.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:26:42.793 [DEBUG] [Thread-19663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:26:42.794 [DEBUG] [Thread-19663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:26:42.794 [DEBUG] [Thread-19663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:26:42.834 [DEBUG] [Thread-19663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:26:42.834 [DEBUG] [Thread-19663] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:26:42.837 [DEBUG] [Thread-19663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:26:42.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:26:42.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:26:42.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:26:42.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:26:42.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:26:42.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:26:42.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:26:42.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:26:42.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:26:42.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.476527 -999.00  +14.20  16.39     68   +8.40 1 2 1 1 1   888    0 7.91 74.29 ----- 17.2 16.4 298.0 21.7 21.4 -22.1 20.1 -20.9 20.2 -18.5 21.4 -20.9
2026-04-15T13:26:42.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:26:42.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:26:42.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.476527
2026-04-15T13:26:42.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:26:42.863 [DEBUG] [Thread-19663] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:26:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:26:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:26:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:26:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:26:42.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:26:09', tmtdew=7.52735, humidity=60.6005, cloud=0.0, wind=15.2633, temperature=14.0688, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:26:11.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:26:43.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:26:43.119 [DEBUG] [Thread-19666] [transport.py] [_log()] starting thread (client mode): 0xf1364640
2026-04-15T13:26:43.119 [DEBUG] [Thread-19666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:26:43.133 [DEBUG] [Thread-19666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:26:43.133 [INFO] [Thread-19666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:26:43.140 [DEBUG] [Thread-19666] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:26:43.141 [DEBUG] [Thread-19666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:26:43.141 [DEBUG] [Thread-19666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:26:43.141 [DEBUG] [Thread-19666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:26:43.141 [DEBUG] [Thread-19666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:26:43.141 [DEBUG] [Thread-19666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:26:43.141 [DEBUG] [Thread-19666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:26:43.141 [DEBUG] [Thread-19666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:26:43.141 [DEBUG] [Thread-19666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:26:43.141 [DEBUG] [Thread-19666] [transport.py] [_log()] client lang: <none>
2026-04-15T13:26:43.141 [DEBUG] [Thread-19666] [transport.py] [_log()] server lang: <none>
2026-04-15T13:26:43.142 [DEBUG] [Thread-19666] [transport.py] [_log()] kex follows: False
2026-04-15T13:26:43.142 [DEBUG] [Thread-19666] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:26:43.142 [DEBUG] [Thread-19666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:26:43.142 [DEBUG] [Thread-19666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:26:43.142 [DEBUG] [Thread-19666] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:26:43.142 [DEBUG] [Thread-19666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:26:43.142 [DEBUG] [Thread-19666] [transport.py] [_log()] Compression: none
2026-04-15T13:26:43.142 [DEBUG] [Thread-19666] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:26:43.197 [DEBUG] [Thread-19666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:26:43.198 [DEBUG] [Thread-19666] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:26:43.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:26:43.199 [DEBUG] [Thread-19666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:26:43.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:26:43.254 [DEBUG] [Thread-19666] [transport.py] [_log()] userauth is OK
2026-04-15T13:26:43.254 [DEBUG] [Thread-19666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:26:43.255 [DEBUG] [Thread-19666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:26:43.255 [DEBUG] [Thread-19666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:26:43.255 [DEBUG] [Thread-19666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:26:43.282 [INFO] [Thread-19666] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:26:43.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:26:43.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:26:44.109 [DEBUG] [Thread-19666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:26:44.109 [DEBUG] [Thread-19666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:26:44.157 [DEBUG] [Thread-19666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:26:44.157 [DEBUG] [Thread-19666] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:26:44.166 [DEBUG] [Thread-19666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:26:44.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:26:44.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')
2026-04-15T13:26:44.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
2026-04-15T13:26:44.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:26:44.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:26:44.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:26:44.200 [DEBUG] [Thread-19666] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:26:46.368 [DEBUG] [Thread-19668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:26:54.671 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:26:54.672 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:27:01.407 [DEBUG] [Thread-19669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:27:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:27:14.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:27:14.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
2026-04-15T13:27:15.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 26, 44), 7.89944, 59.0352, 0.0, 17.9258, 14.6039, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:27:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:26:44
2026-04-15T13:27:15.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:27:16.335 [DEBUG] [Thread-19670] [transport.py] [_log()] starting thread (client mode): 0xee98e860
2026-04-15T13:27:16.335 [DEBUG] [Thread-19670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:27:16.356 [DEBUG] [Thread-19670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:27:16.356 [INFO] [Thread-19670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:27:16.359 [DEBUG] [Thread-19670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:27:16.359 [DEBUG] [Thread-19670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:27:16.359 [DEBUG] [Thread-19670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:27:16.359 [DEBUG] [Thread-19670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:27:16.359 [DEBUG] [Thread-19670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:27:16.360 [DEBUG] [Thread-19670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:27:16.360 [DEBUG] [Thread-19670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:27:16.360 [DEBUG] [Thread-19670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:27:16.360 [DEBUG] [Thread-19670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:27:16.360 [DEBUG] [Thread-19670] [transport.py] [_log()] client lang: <none>
2026-04-15T13:27:16.360 [DEBUG] [Thread-19670] [transport.py] [_log()] server lang: <none>
2026-04-15T13:27:16.360 [DEBUG] [Thread-19670] [transport.py] [_log()] kex follows: False
2026-04-15T13:27:16.360 [DEBUG] [Thread-19670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:27:16.360 [DEBUG] [Thread-19670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:27:16.360 [DEBUG] [Thread-19670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:27:16.360 [DEBUG] [Thread-19670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:27:16.361 [DEBUG] [Thread-19670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:27:16.361 [DEBUG] [Thread-19670] [transport.py] [_log()] Compression: none
2026-04-15T13:27:16.361 [DEBUG] [Thread-19670] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:27:16.376 [DEBUG] [Thread-19670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:27:16.376 [DEBUG] [Thread-19670] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:27:16.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:27:16.377 [DEBUG] [Thread-19670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:27:16.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:27:16.378 [DEBUG] [Thread-19670] [transport.py] [_log()] userauth is OK
2026-04-15T13:27:16.378 [DEBUG] [Thread-19670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:27:16.378 [DEBUG] [Thread-19670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:27:16.378 [DEBUG] [Thread-19670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:27:16.378 [DEBUG] [Thread-19670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:27:16.392 [INFO] [Thread-19670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:27:16.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:27:16.437 [DEBUG] [Thread-19672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:27:16.976 [DEBUG] [Thread-19670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:27:16.977 [DEBUG] [Thread-19670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:27:16.977 [DEBUG] [Thread-19670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:27:17.017 [DEBUG] [Thread-19670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:27:17.017 [DEBUG] [Thread-19670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:27:17.020 [DEBUG] [Thread-19670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:27:17.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:27:17.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:27:17.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:27:17.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:27:17.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:27:17.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:27:17.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:27:17.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:27:17.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:27:17.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.477221 -999.00  +13.80  24.10     66   +7.80 1 2 1 1 1   888    0 7.76 65.56 ----- 18.0 24.1 297.0 25.7 21.4 -19.4 20.3 -18.9 20.2 -20.5 21.6 -19.1
2026-04-15T13:27:17.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:27:17.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:27:17.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.477221
2026-04-15T13:27:17.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:27:17.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:27:17.045 [DEBUG] [Thread-19670] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:27:17.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:27:17.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:27:17.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:27:17.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:26:44', tmtdew=7.89944, humidity=59.0352, cloud=0.0, wind=17.9258, temperature=14.6039, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:27:11.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:27:17.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:27:17.301 [DEBUG] [Thread-19674] [transport.py] [_log()] starting thread (client mode): 0xf13cb8b0
2026-04-15T13:27:17.301 [DEBUG] [Thread-19674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:27:17.315 [DEBUG] [Thread-19674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:27:17.315 [INFO] [Thread-19674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:27:17.322 [DEBUG] [Thread-19674] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:27:17.322 [DEBUG] [Thread-19674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:27:17.322 [DEBUG] [Thread-19674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:27:17.322 [DEBUG] [Thread-19674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:27:17.323 [DEBUG] [Thread-19674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:27:17.323 [DEBUG] [Thread-19674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:27:17.323 [DEBUG] [Thread-19674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:27:17.323 [DEBUG] [Thread-19674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:27:17.323 [DEBUG] [Thread-19674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:27:17.323 [DEBUG] [Thread-19674] [transport.py] [_log()] client lang: <none>
2026-04-15T13:27:17.323 [DEBUG] [Thread-19674] [transport.py] [_log()] server lang: <none>
2026-04-15T13:27:17.323 [DEBUG] [Thread-19674] [transport.py] [_log()] kex follows: False
2026-04-15T13:27:17.323 [DEBUG] [Thread-19674] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:27:17.323 [DEBUG] [Thread-19674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:27:17.323 [DEBUG] [Thread-19674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:27:17.324 [DEBUG] [Thread-19674] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:27:17.324 [DEBUG] [Thread-19674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:27:17.324 [DEBUG] [Thread-19674] [transport.py] [_log()] Compression: none
2026-04-15T13:27:17.324 [DEBUG] [Thread-19674] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:27:17.382 [DEBUG] [Thread-19674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:27:17.382 [DEBUG] [Thread-19674] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:27:17.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:27:17.383 [DEBUG] [Thread-19674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:27:17.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:27:17.438 [DEBUG] [Thread-19674] [transport.py] [_log()] userauth is OK
2026-04-15T13:27:17.438 [DEBUG] [Thread-19674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:27:17.439 [DEBUG] [Thread-19674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:27:17.439 [DEBUG] [Thread-19674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:27:17.439 [DEBUG] [Thread-19674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:27:17.468 [INFO] [Thread-19674] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:27:17.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:27:17.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:27:18.266 [DEBUG] [Thread-19674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:27:18.266 [DEBUG] [Thread-19674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:27:18.314 [DEBUG] [Thread-19674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:27:18.314 [DEBUG] [Thread-19674] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:27:18.324 [DEBUG] [Thread-19674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:27:18.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:27:18.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')
2026-04-15T13:27:18.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
2026-04-15T13:27:18.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:27:18.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:27:18.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:27:18.360 [DEBUG] [Thread-19674] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:27:21.725 [DEBUG] [Thread-19676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:27:31.464 [DEBUG] [Thread-19677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:27:46.500 [DEBUG] [Thread-19678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:27:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:27:48.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:27:48.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
2026-04-15T13:27:49.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 27, 20), 7.56514, 60.3018, 0.0, 15.0347, 14.1505, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:27:49.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:27:20
2026-04-15T13:27:50.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:27:50.558 [DEBUG] [Thread-19679] [transport.py] [_log()] starting thread (client mode): 0xee901fc0
2026-04-15T13:27:50.558 [DEBUG] [Thread-19679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:27:50.577 [DEBUG] [Thread-19679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:27:50.577 [INFO] [Thread-19679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:27:50.580 [DEBUG] [Thread-19679] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:27:50.580 [DEBUG] [Thread-19679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:27:50.581 [DEBUG] [Thread-19679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:27:50.581 [DEBUG] [Thread-19679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:27:50.581 [DEBUG] [Thread-19679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:27:50.581 [DEBUG] [Thread-19679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:27:50.581 [DEBUG] [Thread-19679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:27:50.581 [DEBUG] [Thread-19679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:27:50.581 [DEBUG] [Thread-19679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:27:50.581 [DEBUG] [Thread-19679] [transport.py] [_log()] client lang: <none>
2026-04-15T13:27:50.581 [DEBUG] [Thread-19679] [transport.py] [_log()] server lang: <none>
2026-04-15T13:27:50.581 [DEBUG] [Thread-19679] [transport.py] [_log()] kex follows: False
2026-04-15T13:27:50.581 [DEBUG] [Thread-19679] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:27:50.582 [DEBUG] [Thread-19679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:27:50.582 [DEBUG] [Thread-19679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:27:50.582 [DEBUG] [Thread-19679] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:27:50.582 [DEBUG] [Thread-19679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:27:50.582 [DEBUG] [Thread-19679] [transport.py] [_log()] Compression: none
2026-04-15T13:27:50.582 [DEBUG] [Thread-19679] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:27:50.598 [DEBUG] [Thread-19679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:27:50.598 [DEBUG] [Thread-19679] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:27:50.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:27:50.599 [DEBUG] [Thread-19679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:27:50.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:27:50.600 [DEBUG] [Thread-19679] [transport.py] [_log()] userauth is OK
2026-04-15T13:27:50.600 [DEBUG] [Thread-19679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:27:50.600 [DEBUG] [Thread-19679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:27:50.600 [DEBUG] [Thread-19679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:27:50.600 [DEBUG] [Thread-19679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:27:50.623 [INFO] [Thread-19679] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:27:50.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:27:51.292 [DEBUG] [Thread-19679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:27:51.292 [DEBUG] [Thread-19679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:27:51.293 [DEBUG] [Thread-19679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:27:51.333 [DEBUG] [Thread-19679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:27:51.333 [DEBUG] [Thread-19679] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:27:51.336 [DEBUG] [Thread-19679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:27:51.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:27:51.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:27:51.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:27:51.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:27:51.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:27:51.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:27:51.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:27:51.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:27:51.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:27:51.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.477568 -999.00  +13.50  18.90     67   +7.70 1 2 1 1 1   888    0 7.59 62.13 ----- 14.3 18.9 304.2 24.6 21.4 -21.5 20.2 -20.4 20.2 -18.2 21.6 -19.5
2026-04-15T13:27:51.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:27:51.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:27:51.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.477568
2026-04-15T13:27:51.361 [DEBUG] [Thread-19679] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:27:51.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:27:51.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:27:51.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:27:51.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:27:51.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:27:51.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:27:20', tmtdew=7.56514, humidity=60.3018, cloud=0.0, wind=15.0347, temperature=14.1505, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:27:41.875', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:27:51.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:27:51.632 [DEBUG] [Thread-19682] [transport.py] [_log()] starting thread (client mode): 0xf13640d0
2026-04-15T13:27:51.632 [DEBUG] [Thread-19682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:27:51.646 [DEBUG] [Thread-19682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:27:51.646 [INFO] [Thread-19682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:27:51.654 [DEBUG] [Thread-19682] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:27:51.654 [DEBUG] [Thread-19682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:27:51.654 [DEBUG] [Thread-19682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:27:51.654 [DEBUG] [Thread-19682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:27:51.654 [DEBUG] [Thread-19682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:27:51.654 [DEBUG] [Thread-19682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:27:51.654 [DEBUG] [Thread-19682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:27:51.654 [DEBUG] [Thread-19682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:27:51.654 [DEBUG] [Thread-19682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:27:51.655 [DEBUG] [Thread-19682] [transport.py] [_log()] client lang: <none>
2026-04-15T13:27:51.655 [DEBUG] [Thread-19682] [transport.py] [_log()] server lang: <none>
2026-04-15T13:27:51.655 [DEBUG] [Thread-19682] [transport.py] [_log()] kex follows: False
2026-04-15T13:27:51.655 [DEBUG] [Thread-19682] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:27:51.655 [DEBUG] [Thread-19682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:27:51.655 [DEBUG] [Thread-19682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:27:51.655 [DEBUG] [Thread-19682] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:27:51.655 [DEBUG] [Thread-19682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:27:51.655 [DEBUG] [Thread-19682] [transport.py] [_log()] Compression: none
2026-04-15T13:27:51.655 [DEBUG] [Thread-19682] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:27:51.709 [DEBUG] [Thread-19682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:27:51.709 [DEBUG] [Thread-19682] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:27:51.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:27:51.710 [DEBUG] [Thread-19682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:27:51.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:27:51.766 [DEBUG] [Thread-19682] [transport.py] [_log()] userauth is OK
2026-04-15T13:27:51.766 [DEBUG] [Thread-19682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:27:51.767 [DEBUG] [Thread-19682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:27:51.767 [DEBUG] [Thread-19682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:27:51.767 [DEBUG] [Thread-19682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:27:51.792 [INFO] [Thread-19682] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:27:51.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:27:51.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:27:52.630 [DEBUG] [Thread-19682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:27:52.630 [DEBUG] [Thread-19682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:27:52.678 [DEBUG] [Thread-19682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:27:52.678 [DEBUG] [Thread-19682] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:27:52.687 [DEBUG] [Thread-19682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:27:52.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:27:52.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')
2026-04-15T13:27:52.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
2026-04-15T13:27:52.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:27:52.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:27:52.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:27:52.721 [DEBUG] [Thread-19682] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:27:54.810 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:27:54.812 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:28:01.531 [DEBUG] [Thread-19684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:28:16.574 [DEBUG] [Thread-19685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:28:21.800 [DEBUG] [Thread-19686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:28:22.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:28:22.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:28:22.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
2026-04-15T13:28:24.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 27, 55), 7.57614, 60.3875, 0.0, 16.0931, 13.8665, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:28:24.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:27:55
2026-04-15T13:28:24.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:28:24.926 [DEBUG] [Thread-19687] [transport.py] [_log()] starting thread (client mode): 0xf13c8550
2026-04-15T13:28:24.926 [DEBUG] [Thread-19687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:28:24.947 [DEBUG] [Thread-19687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:28:24.947 [INFO] [Thread-19687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:28:24.950 [DEBUG] [Thread-19687] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:28:24.950 [DEBUG] [Thread-19687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:28:24.950 [DEBUG] [Thread-19687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:28:24.950 [DEBUG] [Thread-19687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:28:24.950 [DEBUG] [Thread-19687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:28:24.950 [DEBUG] [Thread-19687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:28:24.950 [DEBUG] [Thread-19687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:28:24.951 [DEBUG] [Thread-19687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:28:24.951 [DEBUG] [Thread-19687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:28:24.951 [DEBUG] [Thread-19687] [transport.py] [_log()] client lang: <none>
2026-04-15T13:28:24.951 [DEBUG] [Thread-19687] [transport.py] [_log()] server lang: <none>
2026-04-15T13:28:24.951 [DEBUG] [Thread-19687] [transport.py] [_log()] kex follows: False
2026-04-15T13:28:24.951 [DEBUG] [Thread-19687] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:28:24.951 [DEBUG] [Thread-19687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:28:24.951 [DEBUG] [Thread-19687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:28:24.951 [DEBUG] [Thread-19687] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:28:24.951 [DEBUG] [Thread-19687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:28:24.951 [DEBUG] [Thread-19687] [transport.py] [_log()] Compression: none
2026-04-15T13:28:24.952 [DEBUG] [Thread-19687] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:28:24.963 [DEBUG] [Thread-19687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:28:24.964 [DEBUG] [Thread-19687] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:28:24.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:28:24.965 [DEBUG] [Thread-19687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:28:24.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:28:24.965 [DEBUG] [Thread-19687] [transport.py] [_log()] userauth is OK
2026-04-15T13:28:24.966 [DEBUG] [Thread-19687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:28:24.966 [DEBUG] [Thread-19687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:28:24.966 [DEBUG] [Thread-19687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:28:24.966 [DEBUG] [Thread-19687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:28:24.985 [INFO] [Thread-19687] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:28:24.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:28:25.641 [DEBUG] [Thread-19687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:28:25.641 [DEBUG] [Thread-19687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:28:25.642 [DEBUG] [Thread-19687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:28:25.682 [DEBUG] [Thread-19687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:28:25.682 [DEBUG] [Thread-19687] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:28:25.685 [DEBUG] [Thread-19687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:28:25.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:28:25.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:28:25.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:28:25.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:28:25.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:28:25.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:28:25.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:28:25.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:28:25.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:28:25.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.477915 -999.00  +13.60  15.65     69   +8.10 1 2 1 1 1   888    0 7.58 60.79 ----- 24.9 15.7 299.8 21.8 21.4 -21.9 20.3 -20.5 20.2 -18.1 21.6 -20.4
2026-04-15T13:28:25.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:28:25.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:28:25.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.477915
2026-04-15T13:28:25.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:28:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:28:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:28:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:28:25.710 [DEBUG] [Thread-19687] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:28:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:28:25.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:27:55', tmtdew=7.57614, humidity=60.3875, cloud=0.0, wind=16.0931, temperature=13.8665, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:28:11.856', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:28:25.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:28:25.970 [DEBUG] [Thread-19690] [transport.py] [_log()] starting thread (client mode): 0xee903cd0
2026-04-15T13:28:25.970 [DEBUG] [Thread-19690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:28:25.984 [DEBUG] [Thread-19690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:28:25.984 [INFO] [Thread-19690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] client lang: <none>
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] server lang: <none>
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] kex follows: False
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:28:25.992 [DEBUG] [Thread-19690] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:28:25.993 [DEBUG] [Thread-19690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:28:25.993 [DEBUG] [Thread-19690] [transport.py] [_log()] Compression: none
2026-04-15T13:28:25.993 [DEBUG] [Thread-19690] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:28:26.054 [DEBUG] [Thread-19690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:28:26.054 [DEBUG] [Thread-19690] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:28:26.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:28:26.055 [DEBUG] [Thread-19690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:28:26.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:28:26.110 [DEBUG] [Thread-19690] [transport.py] [_log()] userauth is OK
2026-04-15T13:28:26.111 [DEBUG] [Thread-19690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:28:26.111 [DEBUG] [Thread-19690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:28:26.111 [DEBUG] [Thread-19690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:28:26.111 [DEBUG] [Thread-19690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:28:26.135 [INFO] [Thread-19690] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:28:26.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:28:26.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:28:26.961 [DEBUG] [Thread-19690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:28:26.962 [DEBUG] [Thread-19690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:28:27.009 [DEBUG] [Thread-19690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:28:27.009 [DEBUG] [Thread-19690] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:28:27.018 [DEBUG] [Thread-19690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:28:27.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:28:27.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')
2026-04-15T13:28:27.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
2026-04-15T13:28:27.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:28:27.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:28:27.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:28:27.052 [DEBUG] [Thread-19690] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:28:31.607 [DEBUG] [Thread-19692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:28:46.651 [DEBUG] [Thread-19693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:28:54.959 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:28:54.960 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:28:57.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:28:57.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:28:57.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
2026-04-15T13:28:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 28, 31), 7.53439, 60.5696, 0.0, 19.2506, 13.9325, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:28:58.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:28:31
2026-04-15T13:28:58.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:28:59.178 [DEBUG] [Thread-19694] [transport.py] [_log()] starting thread (client mode): 0xee902380
2026-04-15T13:28:59.178 [DEBUG] [Thread-19694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:28:59.198 [DEBUG] [Thread-19694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:28:59.198 [INFO] [Thread-19694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:28:59.201 [DEBUG] [Thread-19694] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:28:59.201 [DEBUG] [Thread-19694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:28:59.201 [DEBUG] [Thread-19694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:28:59.201 [DEBUG] [Thread-19694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:28:59.201 [DEBUG] [Thread-19694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:28:59.201 [DEBUG] [Thread-19694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:28:59.201 [DEBUG] [Thread-19694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:28:59.201 [DEBUG] [Thread-19694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:28:59.202 [DEBUG] [Thread-19694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:28:59.202 [DEBUG] [Thread-19694] [transport.py] [_log()] client lang: <none>
2026-04-15T13:28:59.202 [DEBUG] [Thread-19694] [transport.py] [_log()] server lang: <none>
2026-04-15T13:28:59.202 [DEBUG] [Thread-19694] [transport.py] [_log()] kex follows: False
2026-04-15T13:28:59.202 [DEBUG] [Thread-19694] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:28:59.202 [DEBUG] [Thread-19694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:28:59.202 [DEBUG] [Thread-19694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:28:59.202 [DEBUG] [Thread-19694] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:28:59.202 [DEBUG] [Thread-19694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:28:59.202 [DEBUG] [Thread-19694] [transport.py] [_log()] Compression: none
2026-04-15T13:28:59.202 [DEBUG] [Thread-19694] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:28:59.219 [DEBUG] [Thread-19694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:28:59.220 [DEBUG] [Thread-19694] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:28:59.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:28:59.220 [DEBUG] [Thread-19694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:28:59.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:28:59.222 [DEBUG] [Thread-19694] [transport.py] [_log()] userauth is OK
2026-04-15T13:28:59.222 [DEBUG] [Thread-19694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:28:59.222 [DEBUG] [Thread-19694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:28:59.222 [DEBUG] [Thread-19694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:28:59.222 [DEBUG] [Thread-19694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:28:59.247 [INFO] [Thread-19694] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:28:59.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:28:59.870 [DEBUG] [Thread-19694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:28:59.870 [DEBUG] [Thread-19694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:28:59.871 [DEBUG] [Thread-19694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:28:59.911 [DEBUG] [Thread-19694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:28:59.911 [DEBUG] [Thread-19694] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:28:59.914 [DEBUG] [Thread-19694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:28:59.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:28:59.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:28:59.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:28:59.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:28:59.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:28:59.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:28:59.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:28:59.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:28:59.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:28:59.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.478263 -999.00  +13.70  19.43     67   +7.90 1 2 1 1 1   888    0 7.71 61.74 ----- 26.3 19.4 303.4 28.6 21.4 -23.8 20.3 -21.3 20.2 -19.0 21.6 -21.6
2026-04-15T13:28:59.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:28:59.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:28:59.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.478263
2026-04-15T13:28:59.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:28:59.941 [DEBUG] [Thread-19694] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:28:59.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:28:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:28:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:28:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:28:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:28:31', tmtdew=7.53439, humidity=60.5696, cloud=0.0, wind=19.2506, temperature=13.9325, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:28:41.923', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:29:00.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:29:00.197 [DEBUG] [Thread-19697] [transport.py] [_log()] starting thread (client mode): 0xee9e7820
2026-04-15T13:29:00.197 [DEBUG] [Thread-19697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:29:00.211 [DEBUG] [Thread-19697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:29:00.211 [INFO] [Thread-19697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:29:00.219 [DEBUG] [Thread-19697] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:29:00.219 [DEBUG] [Thread-19697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:29:00.219 [DEBUG] [Thread-19697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:29:00.219 [DEBUG] [Thread-19697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:29:00.219 [DEBUG] [Thread-19697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:29:00.219 [DEBUG] [Thread-19697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:29:00.219 [DEBUG] [Thread-19697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:29:00.219 [DEBUG] [Thread-19697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:29:00.219 [DEBUG] [Thread-19697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:29:00.219 [DEBUG] [Thread-19697] [transport.py] [_log()] client lang: <none>
2026-04-15T13:29:00.220 [DEBUG] [Thread-19697] [transport.py] [_log()] server lang: <none>
2026-04-15T13:29:00.220 [DEBUG] [Thread-19697] [transport.py] [_log()] kex follows: False
2026-04-15T13:29:00.220 [DEBUG] [Thread-19697] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:29:00.220 [DEBUG] [Thread-19697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:29:00.220 [DEBUG] [Thread-19697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:29:00.220 [DEBUG] [Thread-19697] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:29:00.220 [DEBUG] [Thread-19697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:29:00.220 [DEBUG] [Thread-19697] [transport.py] [_log()] Compression: none
2026-04-15T13:29:00.220 [DEBUG] [Thread-19697] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:29:00.278 [DEBUG] [Thread-19697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:29:00.278 [DEBUG] [Thread-19697] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:29:00.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:29:00.279 [DEBUG] [Thread-19697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:29:00.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:29:00.334 [DEBUG] [Thread-19697] [transport.py] [_log()] userauth is OK
2026-04-15T13:29:00.334 [DEBUG] [Thread-19697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:29:00.335 [DEBUG] [Thread-19697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:29:00.335 [DEBUG] [Thread-19697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:29:00.335 [DEBUG] [Thread-19697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:29:00.359 [INFO] [Thread-19697] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:29:00.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:29:00.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:29:01.180 [DEBUG] [Thread-19697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:29:01.180 [DEBUG] [Thread-19697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:29:01.228 [DEBUG] [Thread-19697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:29:01.228 [DEBUG] [Thread-19697] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:29:01.237 [DEBUG] [Thread-19697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:29:01.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:29:01.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')
2026-04-15T13:29:01.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
2026-04-15T13:29:01.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:29:01.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:29:01.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:29:01.277 [DEBUG] [Thread-19697] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:29:01.678 [DEBUG] [Thread-19699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:29:16.719 [DEBUG] [Thread-19700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:29:21.887 [DEBUG] [Thread-19701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:29:31.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:29:31.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:29:31.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
2026-04-15T13:29:31.751 [DEBUG] [Thread-19702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:29:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 29, 7), 7.86023, 59.2769, 0.0, 21.7026, 13.8497, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:29:32.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:29:07
2026-04-15T13:29:32.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:29:33.364 [DEBUG] [Thread-19703] [transport.py] [_log()] starting thread (client mode): 0xf13cb670
2026-04-15T13:29:33.364 [DEBUG] [Thread-19703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:29:33.386 [DEBUG] [Thread-19703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:29:33.386 [INFO] [Thread-19703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:29:33.390 [DEBUG] [Thread-19703] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:29:33.390 [DEBUG] [Thread-19703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:29:33.390 [DEBUG] [Thread-19703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:29:33.390 [DEBUG] [Thread-19703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:29:33.390 [DEBUG] [Thread-19703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:29:33.390 [DEBUG] [Thread-19703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:29:33.390 [DEBUG] [Thread-19703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:29:33.391 [DEBUG] [Thread-19703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:29:33.391 [DEBUG] [Thread-19703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:29:33.391 [DEBUG] [Thread-19703] [transport.py] [_log()] client lang: <none>
2026-04-15T13:29:33.391 [DEBUG] [Thread-19703] [transport.py] [_log()] server lang: <none>
2026-04-15T13:29:33.391 [DEBUG] [Thread-19703] [transport.py] [_log()] kex follows: False
2026-04-15T13:29:33.391 [DEBUG] [Thread-19703] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:29:33.391 [DEBUG] [Thread-19703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:29:33.391 [DEBUG] [Thread-19703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:29:33.391 [DEBUG] [Thread-19703] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:29:33.391 [DEBUG] [Thread-19703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:29:33.392 [DEBUG] [Thread-19703] [transport.py] [_log()] Compression: none
2026-04-15T13:29:33.392 [DEBUG] [Thread-19703] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:29:33.408 [DEBUG] [Thread-19703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:29:33.408 [DEBUG] [Thread-19703] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:29:33.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:29:33.409 [DEBUG] [Thread-19703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:29:33.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:29:33.410 [DEBUG] [Thread-19703] [transport.py] [_log()] userauth is OK
2026-04-15T13:29:33.410 [DEBUG] [Thread-19703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:29:33.410 [DEBUG] [Thread-19703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:29:33.410 [DEBUG] [Thread-19703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:29:33.410 [DEBUG] [Thread-19703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:29:33.444 [INFO] [Thread-19703] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:29:33.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:29:34.086 [DEBUG] [Thread-19703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:29:34.086 [DEBUG] [Thread-19703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:29:34.087 [DEBUG] [Thread-19703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:29:34.126 [DEBUG] [Thread-19703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:29:34.127 [DEBUG] [Thread-19703] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:29:34.128 [DEBUG] [Thread-19703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:29:34.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:29:34.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:29:34.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:29:34.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:29:34.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:29:34.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:29:34.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:29:34.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:29:34.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:29:34.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.478610 -999.00  +13.60  20.93     68   +8.00 1 2 1 1 1   888    0 7.51 56.56 ----- 22.8 20.9 297.0 32.2 21.4 -22.8 20.2 -21.7 20.2 -23.2 21.6 -21.4
2026-04-15T13:29:34.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:29:34.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:29:34.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.478610
2026-04-15T13:29:34.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:29:34.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:29:34.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:29:34.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:29:34.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:29:34.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:29:07', tmtdew=7.86023, humidity=59.2769, cloud=0.0, wind=21.7026, temperature=13.8497, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:29:11.904', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:29:34.147 [DEBUG] [Thread-19703] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:29:34.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:29:34.357 [DEBUG] [Thread-19706] [transport.py] [_log()] starting thread (client mode): 0xf13eebf0
2026-04-15T13:29:34.357 [DEBUG] [Thread-19706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:29:34.371 [DEBUG] [Thread-19706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:29:34.372 [INFO] [Thread-19706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:29:34.379 [DEBUG] [Thread-19706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:29:34.379 [DEBUG] [Thread-19706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:29:34.379 [DEBUG] [Thread-19706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:29:34.379 [DEBUG] [Thread-19706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:29:34.379 [DEBUG] [Thread-19706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:29:34.379 [DEBUG] [Thread-19706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:29:34.379 [DEBUG] [Thread-19706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:29:34.379 [DEBUG] [Thread-19706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:29:34.379 [DEBUG] [Thread-19706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:29:34.379 [DEBUG] [Thread-19706] [transport.py] [_log()] client lang: <none>
2026-04-15T13:29:34.379 [DEBUG] [Thread-19706] [transport.py] [_log()] server lang: <none>
2026-04-15T13:29:34.379 [DEBUG] [Thread-19706] [transport.py] [_log()] kex follows: False
2026-04-15T13:29:34.379 [DEBUG] [Thread-19706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:29:34.380 [DEBUG] [Thread-19706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:29:34.380 [DEBUG] [Thread-19706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:29:34.380 [DEBUG] [Thread-19706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:29:34.380 [DEBUG] [Thread-19706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:29:34.380 [DEBUG] [Thread-19706] [transport.py] [_log()] Compression: none
2026-04-15T13:29:34.380 [DEBUG] [Thread-19706] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:29:34.440 [DEBUG] [Thread-19706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:29:34.440 [DEBUG] [Thread-19706] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:29:34.440 [DEBUG] [Thread-19706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:29:34.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:29:34.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:29:34.498 [DEBUG] [Thread-19706] [transport.py] [_log()] userauth is OK
2026-04-15T13:29:34.498 [DEBUG] [Thread-19706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:29:34.498 [DEBUG] [Thread-19706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:29:34.498 [DEBUG] [Thread-19706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:29:34.498 [DEBUG] [Thread-19706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:29:34.516 [INFO] [Thread-19706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:29:34.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:29:34.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:29:35.343 [DEBUG] [Thread-19706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:29:35.344 [DEBUG] [Thread-19706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:29:35.391 [DEBUG] [Thread-19706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:29:35.391 [DEBUG] [Thread-19706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:29:35.400 [DEBUG] [Thread-19706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:29:35.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:29:35.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')
2026-04-15T13:29:35.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
2026-04-15T13:29:35.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:29:35.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:29:35.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:29:35.435 [DEBUG] [Thread-19706] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:29:46.783 [DEBUG] [Thread-19708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:29:55.099 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:29:55.100 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:30:01.827 [DEBUG] [Thread-19709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:30:05.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:30:05.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:30:05.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
2026-04-15T13:30:06.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 29, 42), 8.62028, 56.2826, 0.0, 25.6522, 15.0332, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:30:06.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:29:42
2026-04-15T13:30:07.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:30:07.642 [DEBUG] [Thread-19710] [transport.py] [_log()] starting thread (client mode): 0xee903430
2026-04-15T13:30:07.643 [DEBUG] [Thread-19710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:30:07.663 [DEBUG] [Thread-19710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:30:07.663 [INFO] [Thread-19710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:30:07.664 [DEBUG] [Thread-19710] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:30:07.665 [DEBUG] [Thread-19710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:30:07.665 [DEBUG] [Thread-19710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:30:07.665 [DEBUG] [Thread-19710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:30:07.665 [DEBUG] [Thread-19710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:30:07.665 [DEBUG] [Thread-19710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:30:07.665 [DEBUG] [Thread-19710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:30:07.665 [DEBUG] [Thread-19710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:30:07.665 [DEBUG] [Thread-19710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:30:07.665 [DEBUG] [Thread-19710] [transport.py] [_log()] client lang: <none>
2026-04-15T13:30:07.665 [DEBUG] [Thread-19710] [transport.py] [_log()] server lang: <none>
2026-04-15T13:30:07.665 [DEBUG] [Thread-19710] [transport.py] [_log()] kex follows: False
2026-04-15T13:30:07.665 [DEBUG] [Thread-19710] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:30:07.665 [DEBUG] [Thread-19710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:30:07.665 [DEBUG] [Thread-19710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:30:07.665 [DEBUG] [Thread-19710] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:30:07.666 [DEBUG] [Thread-19710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:30:07.666 [DEBUG] [Thread-19710] [transport.py] [_log()] Compression: none
2026-04-15T13:30:07.666 [DEBUG] [Thread-19710] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:30:07.675 [DEBUG] [Thread-19710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:30:07.675 [DEBUG] [Thread-19710] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:30:07.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:30:07.676 [DEBUG] [Thread-19710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:30:07.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:30:07.677 [DEBUG] [Thread-19710] [transport.py] [_log()] userauth is OK
2026-04-15T13:30:07.677 [DEBUG] [Thread-19710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:30:07.677 [DEBUG] [Thread-19710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:30:07.677 [DEBUG] [Thread-19710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:30:07.677 [DEBUG] [Thread-19710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:30:07.702 [INFO] [Thread-19710] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:30:07.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:30:13.678 [DEBUG] [Thread-19710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:30:13.678 [DEBUG] [Thread-19710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:30:13.679 [DEBUG] [Thread-19710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:30:13.719 [DEBUG] [Thread-19710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:30:13.719 [DEBUG] [Thread-19710] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:30:13.722 [DEBUG] [Thread-19710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:30:13.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:30:13.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:30:13.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:30:13.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:30:13.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:30:13.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:30:13.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:30:13.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:30:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:30:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.478957 -999.00  +13.80  19.58     66   +7.70 1 2 1 1 1   888    0 7.21 51.87 ----- 22.2 19.6 321.0 28.7 21.5 -24.2 20.2 -23.1 20.2 -22.8 21.5 -22.3
2026-04-15T13:30:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:30:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:30:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.478957
2026-04-15T13:30:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:30:13.759 [DEBUG] [Thread-19710] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:30:13.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:30:13.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:30:13.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:30:13.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:30:13.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:29:42', tmtdew=8.62028, humidity=56.2826, cloud=0.0, wind=25.6522, temperature=15.0332, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:29:41.885', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:30:14.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:30:14.020 [DEBUG] [Thread-19713] [transport.py] [_log()] starting thread (client mode): 0xf13e02b0
2026-04-15T13:30:14.020 [DEBUG] [Thread-19713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:30:14.034 [DEBUG] [Thread-19713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:30:14.034 [INFO] [Thread-19713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:30:14.041 [DEBUG] [Thread-19713] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:30:14.041 [DEBUG] [Thread-19713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:30:14.041 [DEBUG] [Thread-19713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:30:14.041 [DEBUG] [Thread-19713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:30:14.041 [DEBUG] [Thread-19713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:30:14.041 [DEBUG] [Thread-19713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:30:14.042 [DEBUG] [Thread-19713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:30:14.042 [DEBUG] [Thread-19713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:30:14.042 [DEBUG] [Thread-19713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:30:14.042 [DEBUG] [Thread-19713] [transport.py] [_log()] client lang: <none>
2026-04-15T13:30:14.042 [DEBUG] [Thread-19713] [transport.py] [_log()] server lang: <none>
2026-04-15T13:30:14.042 [DEBUG] [Thread-19713] [transport.py] [_log()] kex follows: False
2026-04-15T13:30:14.042 [DEBUG] [Thread-19713] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:30:14.042 [DEBUG] [Thread-19713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:30:14.042 [DEBUG] [Thread-19713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:30:14.042 [DEBUG] [Thread-19713] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:30:14.042 [DEBUG] [Thread-19713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:30:14.043 [DEBUG] [Thread-19713] [transport.py] [_log()] Compression: none
2026-04-15T13:30:14.043 [DEBUG] [Thread-19713] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:30:14.097 [DEBUG] [Thread-19713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:30:14.098 [DEBUG] [Thread-19713] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:30:14.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:30:14.099 [DEBUG] [Thread-19713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:30:14.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:30:14.154 [DEBUG] [Thread-19713] [transport.py] [_log()] userauth is OK
2026-04-15T13:30:14.155 [DEBUG] [Thread-19713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:30:14.155 [DEBUG] [Thread-19713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:30:14.155 [DEBUG] [Thread-19713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:30:14.155 [DEBUG] [Thread-19713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:30:14.180 [INFO] [Thread-19713] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:30:14.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:30:14.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:30:15.056 [DEBUG] [Thread-19713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:30:15.056 [DEBUG] [Thread-19713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:30:15.104 [DEBUG] [Thread-19713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:30:15.104 [DEBUG] [Thread-19713] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:30:15.113 [DEBUG] [Thread-19713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:30:15.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:30:15.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')
2026-04-15T13:30: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
2026-04-15T13:30:15.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:30:15.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:30:15.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:30:15.148 [DEBUG] [Thread-19713] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:30:16.858 [DEBUG] [Thread-19715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:30:21.966 [DEBUG] [Thread-19716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:30:31.900 [DEBUG] [Thread-19717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:30:45.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:30:45.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:30:45.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
2026-04-15T13:30:46.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 30, 18), 7.63289, 60.0887, 0.0, 20.1334, 14.0677, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:30:46.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:30:18
2026-04-15T13:30:46.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:30:46.929 [DEBUG] [Thread-19718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:30:47.329 [DEBUG] [Thread-19719] [transport.py] [_log()] starting thread (client mode): 0xee9060e0
2026-04-15T13:30:47.330 [DEBUG] [Thread-19719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:30:47.349 [DEBUG] [Thread-19719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:30:47.349 [INFO] [Thread-19719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:30:47.352 [DEBUG] [Thread-19719] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:30:47.353 [DEBUG] [Thread-19719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:30:47.353 [DEBUG] [Thread-19719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:30:47.353 [DEBUG] [Thread-19719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:30:47.353 [DEBUG] [Thread-19719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:30:47.353 [DEBUG] [Thread-19719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:30:47.353 [DEBUG] [Thread-19719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:30:47.353 [DEBUG] [Thread-19719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:30:47.353 [DEBUG] [Thread-19719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:30:47.353 [DEBUG] [Thread-19719] [transport.py] [_log()] client lang: <none>
2026-04-15T13:30:47.353 [DEBUG] [Thread-19719] [transport.py] [_log()] server lang: <none>
2026-04-15T13:30:47.353 [DEBUG] [Thread-19719] [transport.py] [_log()] kex follows: False
2026-04-15T13:30:47.354 [DEBUG] [Thread-19719] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:30:47.354 [DEBUG] [Thread-19719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:30:47.354 [DEBUG] [Thread-19719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:30:47.354 [DEBUG] [Thread-19719] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:30:47.354 [DEBUG] [Thread-19719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:30:47.354 [DEBUG] [Thread-19719] [transport.py] [_log()] Compression: none
2026-04-15T13:30:47.354 [DEBUG] [Thread-19719] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:30:47.371 [DEBUG] [Thread-19719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:30:47.371 [DEBUG] [Thread-19719] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:30:47.372 [DEBUG] [Thread-19719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:30:47.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:30:47.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:30:47.373 [DEBUG] [Thread-19719] [transport.py] [_log()] userauth is OK
2026-04-15T13:30:47.373 [DEBUG] [Thread-19719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:30:47.373 [DEBUG] [Thread-19719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:30:47.373 [DEBUG] [Thread-19719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:30:47.373 [DEBUG] [Thread-19719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:30:47.392 [INFO] [Thread-19719] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:30:47.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:30:48.017 [DEBUG] [Thread-19719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:30:48.018 [DEBUG] [Thread-19719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:30:48.018 [DEBUG] [Thread-19719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:30:48.058 [DEBUG] [Thread-19719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:30:48.058 [DEBUG] [Thread-19719] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:30:48.061 [DEBUG] [Thread-19719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:30:48.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:30:48.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:30:48.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:30:48.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:30:48.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:30:48.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:30:48.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:30:48.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:30:48.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:30:48.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.479304 -999.00  +13.70  23.57     65   +7.30 1 2 1 1 1   888    0 7.38 53.63 ----- 18.9 23.6 342.0 29.4 21.5 -24.3 20.2 -23.3 20.2 -21.3 21.6 -22.7
2026-04-15T13:30:48.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:30:48.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:30:48.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.479304
2026-04-15T13:30:48.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:30:48.088 [DEBUG] [Thread-19719] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:30:48.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:30:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:30:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:30:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:30:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:30:18', tmtdew=7.63289, humidity=60.0887, cloud=0.0, wind=20.1334, temperature=14.0677, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:30:11.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:30:48.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:30:48.349 [DEBUG] [Thread-19722] [transport.py] [_log()] starting thread (client mode): 0xee98ea10
2026-04-15T13:30:48.349 [DEBUG] [Thread-19722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:30:48.364 [DEBUG] [Thread-19722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:30:48.364 [INFO] [Thread-19722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:30:48.371 [DEBUG] [Thread-19722] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:30:48.371 [DEBUG] [Thread-19722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:30:48.371 [DEBUG] [Thread-19722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:30:48.371 [DEBUG] [Thread-19722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:30:48.371 [DEBUG] [Thread-19722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:30:48.372 [DEBUG] [Thread-19722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:30:48.372 [DEBUG] [Thread-19722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:30:48.372 [DEBUG] [Thread-19722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:30:48.372 [DEBUG] [Thread-19722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:30:48.372 [DEBUG] [Thread-19722] [transport.py] [_log()] client lang: <none>
2026-04-15T13:30:48.372 [DEBUG] [Thread-19722] [transport.py] [_log()] server lang: <none>
2026-04-15T13:30:48.372 [DEBUG] [Thread-19722] [transport.py] [_log()] kex follows: False
2026-04-15T13:30:48.372 [DEBUG] [Thread-19722] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:30:48.372 [DEBUG] [Thread-19722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:30:48.372 [DEBUG] [Thread-19722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:30:48.372 [DEBUG] [Thread-19722] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:30:48.372 [DEBUG] [Thread-19722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:30:48.373 [DEBUG] [Thread-19722] [transport.py] [_log()] Compression: none
2026-04-15T13:30:48.373 [DEBUG] [Thread-19722] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:30:48.430 [DEBUG] [Thread-19722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:30:48.430 [DEBUG] [Thread-19722] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:30:48.431 [DEBUG] [Thread-19722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:30:48.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:30:48.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:30:48.486 [DEBUG] [Thread-19722] [transport.py] [_log()] userauth is OK
2026-04-15T13:30:48.487 [DEBUG] [Thread-19722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:30:48.487 [DEBUG] [Thread-19722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:30:48.487 [DEBUG] [Thread-19722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:30:48.487 [DEBUG] [Thread-19722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:30:48.520 [INFO] [Thread-19722] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:30:48.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:30:48.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:30:49.351 [DEBUG] [Thread-19722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:30:49.352 [DEBUG] [Thread-19722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:30:49.399 [DEBUG] [Thread-19722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:30:49.399 [DEBUG] [Thread-19722] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:30:49.408 [DEBUG] [Thread-19722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:30:49.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:30:49.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')
2026-04-15T13:30:49.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
2026-04-15T13:30:49.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:30:49.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:30:49.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:30:49.449 [DEBUG] [Thread-19722] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:30:55.240 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:30:55.242 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:31:01.960 [DEBUG] [Thread-19724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:31:17.007 [DEBUG] [Thread-19725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:31:19.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:31:19.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:31:19.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
2026-04-15T13:31:20.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 30, 54), 8.06424, 58.3042, 0.0, 23.0414, 14.3368, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:31:20.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:30:54
2026-04-15T13:31:21.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:31:21.586 [DEBUG] [Thread-19726] [transport.py] [_log()] starting thread (client mode): 0xee9ae800
2026-04-15T13:31:21.586 [DEBUG] [Thread-19726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:31:21.610 [DEBUG] [Thread-19726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:31:21.611 [INFO] [Thread-19726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:31:21.614 [DEBUG] [Thread-19726] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:31:21.614 [DEBUG] [Thread-19726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:31:21.614 [DEBUG] [Thread-19726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:31:21.615 [DEBUG] [Thread-19726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:31:21.615 [DEBUG] [Thread-19726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:31:21.615 [DEBUG] [Thread-19726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:31:21.615 [DEBUG] [Thread-19726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:31:21.615 [DEBUG] [Thread-19726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:31:21.615 [DEBUG] [Thread-19726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:31:21.615 [DEBUG] [Thread-19726] [transport.py] [_log()] client lang: <none>
2026-04-15T13:31:21.615 [DEBUG] [Thread-19726] [transport.py] [_log()] server lang: <none>
2026-04-15T13:31:21.615 [DEBUG] [Thread-19726] [transport.py] [_log()] kex follows: False
2026-04-15T13:31:21.615 [DEBUG] [Thread-19726] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:31:21.615 [DEBUG] [Thread-19726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:31:21.616 [DEBUG] [Thread-19726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:31:21.616 [DEBUG] [Thread-19726] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:31:21.616 [DEBUG] [Thread-19726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:31:21.616 [DEBUG] [Thread-19726] [transport.py] [_log()] Compression: none
2026-04-15T13:31:21.616 [DEBUG] [Thread-19726] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:31:21.634 [DEBUG] [Thread-19726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:31:21.634 [DEBUG] [Thread-19726] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:31:21.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:31:21.634 [DEBUG] [Thread-19726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:31:21.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:31:21.635 [DEBUG] [Thread-19726] [transport.py] [_log()] userauth is OK
2026-04-15T13:31:21.635 [DEBUG] [Thread-19726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:31:21.635 [DEBUG] [Thread-19726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:31:21.636 [DEBUG] [Thread-19726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:31:21.636 [DEBUG] [Thread-19726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:31:21.671 [INFO] [Thread-19726] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:31:21.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:31:22.054 [DEBUG] [Thread-19728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:31:22.488 [DEBUG] [Thread-19726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:31:22.488 [DEBUG] [Thread-19726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:31:22.489 [DEBUG] [Thread-19726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:31:22.529 [DEBUG] [Thread-19726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:31:22.529 [DEBUG] [Thread-19726] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:31:22.532 [DEBUG] [Thread-19726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:31:22.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:31:22.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:31:22.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:31:22.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:31:22.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:31:22.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:31:22.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:31:22.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:31:22.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:31:22.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.479652 -999.00  +13.80  25.47     66   +7.80 1 1 1 1 1   888    0 7.57 54.19 ----- 23.6 25.5 304.6 29.7 21.4 -24.5 20.1 -23.5 20.1 -24.6 21.6 -22.5
2026-04-15T13:31:22.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:31:22.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:31:22.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.479652
2026-04-15T13:31:22.559 [DEBUG] [Thread-19726] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:31:22.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:31:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:31:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:31:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:31:22.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T13:31:22.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:30:54', tmtdew=8.06424, humidity=58.3042, cloud=0.0, wind=23.0414, temperature=14.3368, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:30:41.933', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:31:22.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:31:22.815 [DEBUG] [Thread-19730] [transport.py] [_log()] starting thread (client mode): 0xee9ad870
2026-04-15T13:31:22.816 [DEBUG] [Thread-19730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:31:22.834 [DEBUG] [Thread-19730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:31:22.834 [INFO] [Thread-19730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:31:22.845 [DEBUG] [Thread-19730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:31:22.845 [DEBUG] [Thread-19730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:31:22.845 [DEBUG] [Thread-19730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:31:22.845 [DEBUG] [Thread-19730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:31:22.845 [DEBUG] [Thread-19730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:31:22.845 [DEBUG] [Thread-19730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:31:22.845 [DEBUG] [Thread-19730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:31:22.845 [DEBUG] [Thread-19730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:31:22.845 [DEBUG] [Thread-19730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:31:22.846 [DEBUG] [Thread-19730] [transport.py] [_log()] client lang: <none>
2026-04-15T13:31:22.846 [DEBUG] [Thread-19730] [transport.py] [_log()] server lang: <none>
2026-04-15T13:31:22.846 [DEBUG] [Thread-19730] [transport.py] [_log()] kex follows: False
2026-04-15T13:31:22.846 [DEBUG] [Thread-19730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:31:22.846 [DEBUG] [Thread-19730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:31:22.846 [DEBUG] [Thread-19730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:31:22.846 [DEBUG] [Thread-19730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:31:22.846 [DEBUG] [Thread-19730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:31:22.846 [DEBUG] [Thread-19730] [transport.py] [_log()] Compression: none
2026-04-15T13:31:22.846 [DEBUG] [Thread-19730] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:31:22.897 [DEBUG] [Thread-19730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:31:22.898 [DEBUG] [Thread-19730] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:31:22.898 [DEBUG] [Thread-19730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:31:22.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:31:22.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:31:22.954 [DEBUG] [Thread-19730] [transport.py] [_log()] userauth is OK
2026-04-15T13:31:22.955 [DEBUG] [Thread-19730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:31:22.955 [DEBUG] [Thread-19730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:31:22.955 [DEBUG] [Thread-19730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:31:22.955 [DEBUG] [Thread-19730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:31:22.981 [INFO] [Thread-19730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:31:22.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:31:22.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:31:23.838 [DEBUG] [Thread-19730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:31:23.838 [DEBUG] [Thread-19730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:31:23.886 [DEBUG] [Thread-19730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:31:23.886 [DEBUG] [Thread-19730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:31:23.895 [DEBUG] [Thread-19730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:31:23.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:31:23.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')
2026-04-15T13:31:23.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
2026-04-15T13:31:23.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:31:23.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:31:23.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:31:23.930 [DEBUG] [Thread-19730] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:31:32.039 [DEBUG] [Thread-19732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:31:47.084 [DEBUG] [Thread-19733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:31:53.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:31:53.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:31: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
2026-04-15T13:31:55.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 31, 30), 7.55363, 60.6326, 0.0, 22.0561, 13.8525, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:31:55.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:31:30
2026-04-15T13:31:55.382 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:31:55.383 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:31:55.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:31:56.120 [DEBUG] [Thread-19734] [transport.py] [_log()] starting thread (client mode): 0xee9ae350
2026-04-15T13:31:56.120 [DEBUG] [Thread-19734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:31:56.139 [DEBUG] [Thread-19734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:31:56.139 [INFO] [Thread-19734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:31:56.142 [DEBUG] [Thread-19734] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:31:56.143 [DEBUG] [Thread-19734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:31:56.143 [DEBUG] [Thread-19734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:31:56.143 [DEBUG] [Thread-19734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:31:56.143 [DEBUG] [Thread-19734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:31:56.143 [DEBUG] [Thread-19734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:31:56.143 [DEBUG] [Thread-19734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:31:56.143 [DEBUG] [Thread-19734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:31:56.143 [DEBUG] [Thread-19734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:31:56.143 [DEBUG] [Thread-19734] [transport.py] [_log()] client lang: <none>
2026-04-15T13:31:56.143 [DEBUG] [Thread-19734] [transport.py] [_log()] server lang: <none>
2026-04-15T13:31:56.143 [DEBUG] [Thread-19734] [transport.py] [_log()] kex follows: False
2026-04-15T13:31:56.144 [DEBUG] [Thread-19734] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:31:56.144 [DEBUG] [Thread-19734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:31:56.144 [DEBUG] [Thread-19734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:31:56.144 [DEBUG] [Thread-19734] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:31:56.144 [DEBUG] [Thread-19734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:31:56.144 [DEBUG] [Thread-19734] [transport.py] [_log()] Compression: none
2026-04-15T13:31:56.144 [DEBUG] [Thread-19734] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:31:56.162 [DEBUG] [Thread-19734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:31:56.162 [DEBUG] [Thread-19734] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:31:56.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:31:56.163 [DEBUG] [Thread-19734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:31:56.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:31:56.164 [DEBUG] [Thread-19734] [transport.py] [_log()] userauth is OK
2026-04-15T13:31:56.164 [DEBUG] [Thread-19734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:31:56.164 [DEBUG] [Thread-19734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:31:56.164 [DEBUG] [Thread-19734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:31:56.164 [DEBUG] [Thread-19734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:31:56.189 [INFO] [Thread-19734] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:31:56.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:31:56.976 [DEBUG] [Thread-19734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:31:56.976 [DEBUG] [Thread-19734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:31:56.977 [DEBUG] [Thread-19734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:31:57.017 [DEBUG] [Thread-19734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:31:57.017 [DEBUG] [Thread-19734] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:31:57.020 [DEBUG] [Thread-19734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:31:57.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:31:57.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:31:57.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:31:57.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:31:57.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:31:57.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:31:57.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:31:57.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:31:57.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:31:57.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.479999 -999.00  +13.70  21.61     66   +7.40 1 2 1 1 1   888    0 7.39 54.12 ----- 22.6 21.6 301.6 28.0 21.4 -24.2 20.1 -23.3 20.2 -20.9 21.6 -22.4
2026-04-15T13:31:57.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:31:57.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:31:57.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.479999
2026-04-15T13:31:57.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:31:57.045 [DEBUG] [Thread-19734] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:31:57.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:31:57.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:31:57.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:31:57.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:31:57.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:31:30', tmtdew=7.55363, humidity=60.6326, cloud=0.0, wind=22.0561, temperature=13.8525, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:31:11.914', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:31:57.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:31:57.302 [DEBUG] [Thread-19737] [transport.py] [_log()] starting thread (client mode): 0xee9adc90
2026-04-15T13:31:57.302 [DEBUG] [Thread-19737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:31:57.316 [DEBUG] [Thread-19737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:31:57.316 [INFO] [Thread-19737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:31:57.328 [DEBUG] [Thread-19737] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:31:57.328 [DEBUG] [Thread-19737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:31:57.328 [DEBUG] [Thread-19737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:31:57.328 [DEBUG] [Thread-19737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:31:57.329 [DEBUG] [Thread-19737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:31:57.329 [DEBUG] [Thread-19737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:31:57.329 [DEBUG] [Thread-19737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:31:57.329 [DEBUG] [Thread-19737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:31:57.329 [DEBUG] [Thread-19737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:31:57.329 [DEBUG] [Thread-19737] [transport.py] [_log()] client lang: <none>
2026-04-15T13:31:57.329 [DEBUG] [Thread-19737] [transport.py] [_log()] server lang: <none>
2026-04-15T13:31:57.329 [DEBUG] [Thread-19737] [transport.py] [_log()] kex follows: False
2026-04-15T13:31:57.329 [DEBUG] [Thread-19737] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:31:57.329 [DEBUG] [Thread-19737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:31:57.329 [DEBUG] [Thread-19737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:31:57.330 [DEBUG] [Thread-19737] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:31:57.330 [DEBUG] [Thread-19737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:31:57.330 [DEBUG] [Thread-19737] [transport.py] [_log()] Compression: none
2026-04-15T13:31:57.330 [DEBUG] [Thread-19737] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:31:57.385 [DEBUG] [Thread-19737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:31:57.386 [DEBUG] [Thread-19737] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:31:57.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:31:57.387 [DEBUG] [Thread-19737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:31:57.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:31:57.442 [DEBUG] [Thread-19737] [transport.py] [_log()] userauth is OK
2026-04-15T13:31:57.442 [DEBUG] [Thread-19737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:31:57.443 [DEBUG] [Thread-19737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:31:57.443 [DEBUG] [Thread-19737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:31:57.443 [DEBUG] [Thread-19737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:31:57.471 [INFO] [Thread-19737] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:31:57.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:31:57.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:31:58.320 [DEBUG] [Thread-19737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:31:58.321 [DEBUG] [Thread-19737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:31:58.369 [DEBUG] [Thread-19737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:31:58.369 [DEBUG] [Thread-19737] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:31:58.378 [DEBUG] [Thread-19737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:31:58.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:31:58.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')
2026-04-15T13:31:58.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
2026-04-15T13:31:58.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:31:58.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:31:58.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:31:58.412 [DEBUG] [Thread-19737] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:32:02.114 [DEBUG] [Thread-19739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:32:17.153 [DEBUG] [Thread-19740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:32:22.130 [DEBUG] [Thread-19741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:32:28.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:32:28.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:32:28.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:32:29.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 32, 6), 7.42821, 61.2126, 0.0, 20.0099, 14.1177, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:32:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:32:06
2026-04-15T13:32:30.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:32:30.656 [DEBUG] [Thread-19742] [transport.py] [_log()] starting thread (client mode): 0xee9ae2f0
2026-04-15T13:32:30.656 [DEBUG] [Thread-19742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:32:30.676 [DEBUG] [Thread-19742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:32:30.676 [INFO] [Thread-19742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:32:30.679 [DEBUG] [Thread-19742] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:32:30.680 [DEBUG] [Thread-19742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:32:30.680 [DEBUG] [Thread-19742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:32:30.680 [DEBUG] [Thread-19742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:32:30.680 [DEBUG] [Thread-19742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:32:30.680 [DEBUG] [Thread-19742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:32:30.680 [DEBUG] [Thread-19742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:32:30.680 [DEBUG] [Thread-19742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:32:30.680 [DEBUG] [Thread-19742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:32:30.680 [DEBUG] [Thread-19742] [transport.py] [_log()] client lang: <none>
2026-04-15T13:32:30.680 [DEBUG] [Thread-19742] [transport.py] [_log()] server lang: <none>
2026-04-15T13:32:30.680 [DEBUG] [Thread-19742] [transport.py] [_log()] kex follows: False
2026-04-15T13:32:30.681 [DEBUG] [Thread-19742] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:32:30.681 [DEBUG] [Thread-19742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:32:30.681 [DEBUG] [Thread-19742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:32:30.681 [DEBUG] [Thread-19742] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:32:30.681 [DEBUG] [Thread-19742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:32:30.681 [DEBUG] [Thread-19742] [transport.py] [_log()] Compression: none
2026-04-15T13:32:30.681 [DEBUG] [Thread-19742] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:32:30.698 [DEBUG] [Thread-19742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:32:30.698 [DEBUG] [Thread-19742] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:32:30.699 [DEBUG] [Thread-19742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:32:30.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:32:30.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:32:30.700 [DEBUG] [Thread-19742] [transport.py] [_log()] userauth is OK
2026-04-15T13:32:30.700 [DEBUG] [Thread-19742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:32:30.700 [DEBUG] [Thread-19742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:32:30.700 [DEBUG] [Thread-19742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:32:30.700 [DEBUG] [Thread-19742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:32:30.720 [INFO] [Thread-19742] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:32:30.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:32:31.515 [DEBUG] [Thread-19742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:32:31.515 [DEBUG] [Thread-19742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:32:31.516 [DEBUG] [Thread-19742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:32:31.556 [DEBUG] [Thread-19742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:32:31.556 [DEBUG] [Thread-19742] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:32:31.559 [DEBUG] [Thread-19742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:32:31.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:32:31.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:32:31.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:32:31.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:32:31.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:32:31.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:32:31.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:32:31.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:32:31.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:32:31.585 [DEBUG] [Thread-19742] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:32:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.480693 -999.00  +14.00  20.52     67   +8.10 1 2 1 1 1   888    0 7.37 50.92 ----- 14.2 20.5 323.8 22.6 21.3 -24.2 20.1 -24.5 20.3 -18.6 21.6 -20.6
2026-04-15T13:32:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:32:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:32:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.480693
2026-04-15T13:32:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:32:31.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:32:31.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:32:31.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:32:31.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:32:31.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:32:06', tmtdew=7.42821, humidity=61.2126, cloud=0.0, wind=20.0099, temperature=14.1177, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:32:11.875', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:32:31.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:32:31.846 [DEBUG] [Thread-19745] [transport.py] [_log()] starting thread (client mode): 0xee9adf00
2026-04-15T13:32:31.846 [DEBUG] [Thread-19745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:32:31.860 [DEBUG] [Thread-19745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:32:31.860 [INFO] [Thread-19745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:32:31.867 [DEBUG] [Thread-19745] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:32:31.867 [DEBUG] [Thread-19745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:32:31.868 [DEBUG] [Thread-19745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:32:31.868 [DEBUG] [Thread-19745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:32:31.868 [DEBUG] [Thread-19745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:32:31.868 [DEBUG] [Thread-19745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:32:31.868 [DEBUG] [Thread-19745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:32:31.868 [DEBUG] [Thread-19745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:32:31.868 [DEBUG] [Thread-19745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:32:31.868 [DEBUG] [Thread-19745] [transport.py] [_log()] client lang: <none>
2026-04-15T13:32:31.868 [DEBUG] [Thread-19745] [transport.py] [_log()] server lang: <none>
2026-04-15T13:32:31.868 [DEBUG] [Thread-19745] [transport.py] [_log()] kex follows: False
2026-04-15T13:32:31.868 [DEBUG] [Thread-19745] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:32:31.869 [DEBUG] [Thread-19745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:32:31.869 [DEBUG] [Thread-19745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:32:31.869 [DEBUG] [Thread-19745] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:32:31.869 [DEBUG] [Thread-19745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:32:31.869 [DEBUG] [Thread-19745] [transport.py] [_log()] Compression: none
2026-04-15T13:32:31.869 [DEBUG] [Thread-19745] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:32:31.925 [DEBUG] [Thread-19745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:32:31.926 [DEBUG] [Thread-19745] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:32:31.926 [DEBUG] [Thread-19745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:32:31.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:32:31.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:32:31.982 [DEBUG] [Thread-19745] [transport.py] [_log()] userauth is OK
2026-04-15T13:32:31.982 [DEBUG] [Thread-19745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:32:31.983 [DEBUG] [Thread-19745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:32:31.983 [DEBUG] [Thread-19745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:32:31.983 [DEBUG] [Thread-19745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:32:32.008 [INFO] [Thread-19745] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:32:32.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:32:32.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:32:32.185 [DEBUG] [Thread-19747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:32:32.834 [DEBUG] [Thread-19745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:32:32.834 [DEBUG] [Thread-19745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:32:32.881 [DEBUG] [Thread-19745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:32:32.882 [DEBUG] [Thread-19745] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:32:32.891 [DEBUG] [Thread-19745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:32:32.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:32: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')
2026-04-15T13:32: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
2026-04-15T13:32:32.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:32:32.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:32:32.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:32:32.928 [DEBUG] [Thread-19745] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:32:47.229 [DEBUG] [Thread-19748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:32:55.523 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:32:55.524 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:33:02.262 [DEBUG] [Thread-19749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:33:02.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:33:02.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:33:02.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
2026-04-15T13:33:04.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 32, 41), 7.60371, 60.2927, 0.0, 16.8322, 14.8005, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:33:04.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:32:41
2026-04-15T13:33:04.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:33:05.055 [DEBUG] [Thread-19750] [transport.py] [_log()] starting thread (client mode): 0xee98ec80
2026-04-15T13:33:05.055 [DEBUG] [Thread-19750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:33:05.069 [DEBUG] [Thread-19750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:33:05.070 [INFO] [Thread-19750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:33:05.072 [DEBUG] [Thread-19750] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:33:05.072 [DEBUG] [Thread-19750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:33:05.072 [DEBUG] [Thread-19750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:33:05.072 [DEBUG] [Thread-19750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:33:05.072 [DEBUG] [Thread-19750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:33:05.072 [DEBUG] [Thread-19750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:33:05.072 [DEBUG] [Thread-19750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:33:05.072 [DEBUG] [Thread-19750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:33:05.072 [DEBUG] [Thread-19750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:33:05.073 [DEBUG] [Thread-19750] [transport.py] [_log()] client lang: <none>
2026-04-15T13:33:05.073 [DEBUG] [Thread-19750] [transport.py] [_log()] server lang: <none>
2026-04-15T13:33:05.073 [DEBUG] [Thread-19750] [transport.py] [_log()] kex follows: False
2026-04-15T13:33:05.073 [DEBUG] [Thread-19750] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:33:05.073 [DEBUG] [Thread-19750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:33:05.073 [DEBUG] [Thread-19750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:33:05.073 [DEBUG] [Thread-19750] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:33:05.073 [DEBUG] [Thread-19750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:33:05.073 [DEBUG] [Thread-19750] [transport.py] [_log()] Compression: none
2026-04-15T13:33:05.073 [DEBUG] [Thread-19750] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:33:05.082 [DEBUG] [Thread-19750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:33:05.082 [DEBUG] [Thread-19750] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:33:05.083 [DEBUG] [Thread-19750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:33:05.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:33:05.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:33:05.083 [DEBUG] [Thread-19750] [transport.py] [_log()] userauth is OK
2026-04-15T13:33:05.084 [DEBUG] [Thread-19750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:33:05.084 [DEBUG] [Thread-19750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:33:05.084 [DEBUG] [Thread-19750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:33:05.084 [DEBUG] [Thread-19750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:33:05.107 [INFO] [Thread-19750] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:33:05.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:33:05.901 [DEBUG] [Thread-19750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:33:05.901 [DEBUG] [Thread-19750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:33:05.902 [DEBUG] [Thread-19750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:33:05.942 [DEBUG] [Thread-19750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:33:05.942 [DEBUG] [Thread-19750] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:33:05.945 [DEBUG] [Thread-19750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:33:05.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:33:05.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:33:05.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:33:05.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:33:05.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:33:05.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:33:05.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:33:05.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:33:05.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:33:05.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.481040 -999.00  +13.90  12.25     66   +7.70 1 2 1 1 1   888    0 7.26 48.90 ----- 10.7 12.2 335.6 17.5 21.6 -23.5 20.2 -23.6 20.4 -20.6 21.7 -19.6
2026-04-15T13:33:05.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:33:05.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:33:05.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.481040
2026-04-15T13:33:05.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:33:05.973 [DEBUG] [Thread-19750] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:33:05.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:33:05.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:33:05.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:33:05.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:33:05.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:32:41', tmtdew=7.60371, humidity=60.2927, cloud=0.0, wind=16.8322, temperature=14.8005, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:32:41.856', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:33:06.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:33:06.230 [DEBUG] [Thread-19753] [transport.py] [_log()] starting thread (client mode): 0xee9af5b0
2026-04-15T13:33:06.230 [DEBUG] [Thread-19753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:33:06.245 [DEBUG] [Thread-19753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:33:06.245 [INFO] [Thread-19753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:33:06.252 [DEBUG] [Thread-19753] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:33:06.252 [DEBUG] [Thread-19753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:33:06.252 [DEBUG] [Thread-19753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] client lang: <none>
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] server lang: <none>
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] kex follows: False
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] Compression: none
2026-04-15T13:33:06.253 [DEBUG] [Thread-19753] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:33:06.311 [DEBUG] [Thread-19753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:33:06.311 [DEBUG] [Thread-19753] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:33:06.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:33:06.311 [DEBUG] [Thread-19753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:33:06.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:33:06.370 [DEBUG] [Thread-19753] [transport.py] [_log()] userauth is OK
2026-04-15T13:33:06.370 [DEBUG] [Thread-19753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:33:06.370 [DEBUG] [Thread-19753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:33:06.370 [DEBUG] [Thread-19753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:33:06.370 [DEBUG] [Thread-19753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:33:06.388 [INFO] [Thread-19753] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:33:06.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:33:06.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:33:07.260 [DEBUG] [Thread-19753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:33:07.260 [DEBUG] [Thread-19753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:33:07.308 [DEBUG] [Thread-19753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:33:07.308 [DEBUG] [Thread-19753] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:33:07.317 [DEBUG] [Thread-19753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:33:07.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:33:07.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')
2026-04-15T13:33:07.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') -> 00000000
2026-04-15T13:33:07.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:33:07.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:33:07.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:33:07.361 [DEBUG] [Thread-19753] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:33:17.296 [DEBUG] [Thread-19755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:33:22.219 [DEBUG] [Thread-19756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:33:32.337 [DEBUG] [Thread-19757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:33:37.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:33:37.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:33:37.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
2026-04-15T13:33:38.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 33, 16), 7.54088, 60.5027, 0.0, 12.4571, 14.0162, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:33:38.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:33:16
2026-04-15T13:33:39.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:33:39.480 [DEBUG] [Thread-19758] [transport.py] [_log()] starting thread (client mode): 0xee903fa0
2026-04-15T13:33:39.481 [DEBUG] [Thread-19758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:33:39.501 [DEBUG] [Thread-19758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:33:39.501 [INFO] [Thread-19758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:33:39.505 [DEBUG] [Thread-19758] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:33:39.505 [DEBUG] [Thread-19758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:33:39.505 [DEBUG] [Thread-19758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:33:39.505 [DEBUG] [Thread-19758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:33:39.505 [DEBUG] [Thread-19758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:33:39.505 [DEBUG] [Thread-19758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:33:39.505 [DEBUG] [Thread-19758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:33:39.505 [DEBUG] [Thread-19758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:33:39.505 [DEBUG] [Thread-19758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:33:39.506 [DEBUG] [Thread-19758] [transport.py] [_log()] client lang: <none>
2026-04-15T13:33:39.506 [DEBUG] [Thread-19758] [transport.py] [_log()] server lang: <none>
2026-04-15T13:33:39.506 [DEBUG] [Thread-19758] [transport.py] [_log()] kex follows: False
2026-04-15T13:33:39.506 [DEBUG] [Thread-19758] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:33:39.506 [DEBUG] [Thread-19758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:33:39.506 [DEBUG] [Thread-19758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:33:39.506 [DEBUG] [Thread-19758] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:33:39.506 [DEBUG] [Thread-19758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:33:39.506 [DEBUG] [Thread-19758] [transport.py] [_log()] Compression: none
2026-04-15T13:33:39.506 [DEBUG] [Thread-19758] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:33:39.523 [DEBUG] [Thread-19758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:33:39.523 [DEBUG] [Thread-19758] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:33:39.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:33:39.524 [DEBUG] [Thread-19758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:33:39.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:33:39.525 [DEBUG] [Thread-19758] [transport.py] [_log()] userauth is OK
2026-04-15T13:33:39.525 [DEBUG] [Thread-19758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:33:39.525 [DEBUG] [Thread-19758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:33:39.525 [DEBUG] [Thread-19758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:33:39.526 [DEBUG] [Thread-19758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:33:39.544 [INFO] [Thread-19758] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:33:39.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:33:40.329 [DEBUG] [Thread-19758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:33:40.330 [DEBUG] [Thread-19758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:33:40.330 [DEBUG] [Thread-19758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:33:40.370 [DEBUG] [Thread-19758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:33:40.370 [DEBUG] [Thread-19758] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:33:40.373 [DEBUG] [Thread-19758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:33:40.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:33:40.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:33:40.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:33:40.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:33:40.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:33:40.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:33:40.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:33:40.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:33:40.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:33:40.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.481388 -999.00  +14.10  11.52     67   +8.10 1 2 1 1 1   888    0 7.47 50.20 ----- 13.3 11.5 342.1 15.4 21.6 -23.4 20.3 -22.6 20.6 -17.4 21.8 -18.9
2026-04-15T13:33:40.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:33:40.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:33:40.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.481388
2026-04-15T13:33:40.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:33:40.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:33:40.400 [DEBUG] [Thread-19758] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:33:40.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:33:40.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:33:40.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:33:40.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:33:16', tmtdew=7.54088, humidity=60.5027, cloud=0.0, wind=12.4571, temperature=14.0162, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:33:11.923', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:33:40.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:33:40.657 [DEBUG] [Thread-19761] [transport.py] [_log()] starting thread (client mode): 0xf13e3a90
2026-04-15T13:33:40.658 [DEBUG] [Thread-19761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:33:40.678 [DEBUG] [Thread-19761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:33:40.678 [INFO] [Thread-19761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:33:40.685 [DEBUG] [Thread-19761] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:33:40.685 [DEBUG] [Thread-19761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:33:40.685 [DEBUG] [Thread-19761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:33:40.685 [DEBUG] [Thread-19761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:33:40.685 [DEBUG] [Thread-19761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:33:40.685 [DEBUG] [Thread-19761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:33:40.686 [DEBUG] [Thread-19761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:33:40.686 [DEBUG] [Thread-19761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:33:40.686 [DEBUG] [Thread-19761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:33:40.686 [DEBUG] [Thread-19761] [transport.py] [_log()] client lang: <none>
2026-04-15T13:33:40.686 [DEBUG] [Thread-19761] [transport.py] [_log()] server lang: <none>
2026-04-15T13:33:40.686 [DEBUG] [Thread-19761] [transport.py] [_log()] kex follows: False
2026-04-15T13:33:40.686 [DEBUG] [Thread-19761] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:33:40.686 [DEBUG] [Thread-19761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:33:40.686 [DEBUG] [Thread-19761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:33:40.686 [DEBUG] [Thread-19761] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:33:40.687 [DEBUG] [Thread-19761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:33:40.687 [DEBUG] [Thread-19761] [transport.py] [_log()] Compression: none
2026-04-15T13:33:40.687 [DEBUG] [Thread-19761] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:33:40.745 [DEBUG] [Thread-19761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:33:40.745 [DEBUG] [Thread-19761] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:33:40.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:33:40.746 [DEBUG] [Thread-19761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:33:40.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:33:40.810 [DEBUG] [Thread-19761] [transport.py] [_log()] userauth is OK
2026-04-15T13:33:40.811 [DEBUG] [Thread-19761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:33:40.811 [DEBUG] [Thread-19761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:33:40.811 [DEBUG] [Thread-19761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:33:40.811 [DEBUG] [Thread-19761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:33:40.840 [INFO] [Thread-19761] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:33:40.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:33:40.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:33:41.670 [DEBUG] [Thread-19761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:33:41.670 [DEBUG] [Thread-19761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:33:41.717 [DEBUG] [Thread-19761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:33:41.717 [DEBUG] [Thread-19761] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:33:41.728 [DEBUG] [Thread-19761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:33:41.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:33:41.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')
2026-04-15T13:33: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') -> 00000000
2026-04-15T13:33:41.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:33:41.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:33:41.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:33:41.765 [DEBUG] [Thread-19761] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:33:47.369 [DEBUG] [Thread-19763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:33:55.666 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:33:55.667 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:34:02.413 [DEBUG] [Thread-19764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:34:11.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:34:11.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:34:11.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:34:13.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 33, 53), 8.23396, 57.7732, 0.0, 14.7154, 14.9327, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:34:13.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:33:53
2026-04-15T13:34:13.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:34:13.955 [DEBUG] [Thread-19765] [transport.py] [_log()] starting thread (client mode): 0xee903340
2026-04-15T13:34:13.955 [DEBUG] [Thread-19765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:34:13.975 [DEBUG] [Thread-19765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:34:13.975 [INFO] [Thread-19765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:34:13.977 [DEBUG] [Thread-19765] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:34:13.978 [DEBUG] [Thread-19765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:34:13.978 [DEBUG] [Thread-19765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:34:13.978 [DEBUG] [Thread-19765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:34:13.978 [DEBUG] [Thread-19765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:34:13.978 [DEBUG] [Thread-19765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:34:13.978 [DEBUG] [Thread-19765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:34:13.978 [DEBUG] [Thread-19765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:34:13.978 [DEBUG] [Thread-19765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:34:13.978 [DEBUG] [Thread-19765] [transport.py] [_log()] client lang: <none>
2026-04-15T13:34:13.978 [DEBUG] [Thread-19765] [transport.py] [_log()] server lang: <none>
2026-04-15T13:34:13.978 [DEBUG] [Thread-19765] [transport.py] [_log()] kex follows: False
2026-04-15T13:34:13.978 [DEBUG] [Thread-19765] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:34:13.979 [DEBUG] [Thread-19765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:34:13.979 [DEBUG] [Thread-19765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:34:13.979 [DEBUG] [Thread-19765] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:34:13.979 [DEBUG] [Thread-19765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:34:13.979 [DEBUG] [Thread-19765] [transport.py] [_log()] Compression: none
2026-04-15T13:34:13.979 [DEBUG] [Thread-19765] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:34:13.996 [DEBUG] [Thread-19765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:34:13.996 [DEBUG] [Thread-19765] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:34:13.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:34:13.997 [DEBUG] [Thread-19765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:34:13.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:34:14.040 [DEBUG] [Thread-19765] [transport.py] [_log()] userauth is OK
2026-04-15T13:34:14.040 [DEBUG] [Thread-19765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:34:14.041 [DEBUG] [Thread-19765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:34:14.041 [DEBUG] [Thread-19765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:34:14.041 [DEBUG] [Thread-19765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:34:14.064 [INFO] [Thread-19765] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:34:14.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:34:14.846 [DEBUG] [Thread-19765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:34:14.846 [DEBUG] [Thread-19765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:34:14.846 [DEBUG] [Thread-19765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:34:14.887 [DEBUG] [Thread-19765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:34:14.887 [DEBUG] [Thread-19765] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:34:14.888 [DEBUG] [Thread-19765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:34:14.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:34:14.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:34:14.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:34:14.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:34:14.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:34:14.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:34:14.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:34:14.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:34:14.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:34:14.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.481735 -999.00  +14.20  17.34     66   +8.10 1 2 1 1 1   888    0 7.38 50.86 ----- 14.2 17.3 310.2 20.8 21.6 -21.8 20.2 -21.7 20.4 -19.8 21.8 -18.4
2026-04-15T13:34:14.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:34:14.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:34:14.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.481735
2026-04-15T13:34:14.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:34:14.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:34:14.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:34:14.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:34:14.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:34:14.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:33:53', tmtdew=8.23396, humidity=57.7732, cloud=0.0, wind=14.7154, temperature=14.9327, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:33:41.904', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:34:14.907 [DEBUG] [Thread-19765] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:34:15.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:34:15.118 [DEBUG] [Thread-19768] [transport.py] [_log()] starting thread (client mode): 0xee902f80
2026-04-15T13:34:15.118 [DEBUG] [Thread-19768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:34:15.132 [DEBUG] [Thread-19768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:34:15.132 [INFO] [Thread-19768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:34:15.142 [DEBUG] [Thread-19768] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:34:15.142 [DEBUG] [Thread-19768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:34:15.142 [DEBUG] [Thread-19768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:34:15.142 [DEBUG] [Thread-19768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:34:15.142 [DEBUG] [Thread-19768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:34:15.142 [DEBUG] [Thread-19768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:34:15.142 [DEBUG] [Thread-19768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:34:15.142 [DEBUG] [Thread-19768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:34:15.142 [DEBUG] [Thread-19768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:34:15.143 [DEBUG] [Thread-19768] [transport.py] [_log()] client lang: <none>
2026-04-15T13:34:15.143 [DEBUG] [Thread-19768] [transport.py] [_log()] server lang: <none>
2026-04-15T13:34:15.143 [DEBUG] [Thread-19768] [transport.py] [_log()] kex follows: False
2026-04-15T13:34:15.143 [DEBUG] [Thread-19768] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:34:15.143 [DEBUG] [Thread-19768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:34:15.143 [DEBUG] [Thread-19768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:34:15.143 [DEBUG] [Thread-19768] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:34:15.143 [DEBUG] [Thread-19768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:34:15.143 [DEBUG] [Thread-19768] [transport.py] [_log()] Compression: none
2026-04-15T13:34:15.143 [DEBUG] [Thread-19768] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:34:15.197 [DEBUG] [Thread-19768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:34:15.198 [DEBUG] [Thread-19768] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:34:15.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:34:15.198 [DEBUG] [Thread-19768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:34:15.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:34:15.255 [DEBUG] [Thread-19768] [transport.py] [_log()] userauth is OK
2026-04-15T13:34:15.255 [DEBUG] [Thread-19768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:34:15.255 [DEBUG] [Thread-19768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:34:15.255 [DEBUG] [Thread-19768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:34:15.255 [DEBUG] [Thread-19768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:34:15.280 [INFO] [Thread-19768] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:34:15.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:34:15.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:34:16.080 [DEBUG] [Thread-19768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:34:16.080 [DEBUG] [Thread-19768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:34:16.128 [DEBUG] [Thread-19768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:34:16.128 [DEBUG] [Thread-19768] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:34:16.137 [DEBUG] [Thread-19768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:34:16.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:34:16.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')
2026-04-15T13:34:16.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
2026-04-15T13:34:16.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:34:16.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:34:16.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:34:16.172 [DEBUG] [Thread-19768] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:34:17.445 [DEBUG] [Thread-19770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:34:22.293 [DEBUG] [Thread-19771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:34:32.489 [DEBUG] [Thread-19772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:34:46.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:34:46.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:34:46.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:34:47.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 34, 28), 7.48139, 60.6158, 0.0, 14.9458, 14.0501, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:34:47.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:34:28
2026-04-15T13:34:47.520 [DEBUG] [Thread-19773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:34:47.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:34:48.273 [DEBUG] [Thread-19774] [transport.py] [_log()] starting thread (client mode): 0xee9022c0
2026-04-15T13:34:48.273 [DEBUG] [Thread-19774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:34:48.296 [DEBUG] [Thread-19774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:34:48.296 [INFO] [Thread-19774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:34:48.300 [DEBUG] [Thread-19774] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:34:48.300 [DEBUG] [Thread-19774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:34:48.300 [DEBUG] [Thread-19774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:34:48.300 [DEBUG] [Thread-19774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:34:48.300 [DEBUG] [Thread-19774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:34:48.300 [DEBUG] [Thread-19774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:34:48.300 [DEBUG] [Thread-19774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:34:48.300 [DEBUG] [Thread-19774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:34:48.300 [DEBUG] [Thread-19774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:34:48.300 [DEBUG] [Thread-19774] [transport.py] [_log()] client lang: <none>
2026-04-15T13:34:48.301 [DEBUG] [Thread-19774] [transport.py] [_log()] server lang: <none>
2026-04-15T13:34:48.301 [DEBUG] [Thread-19774] [transport.py] [_log()] kex follows: False
2026-04-15T13:34:48.301 [DEBUG] [Thread-19774] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:34:48.301 [DEBUG] [Thread-19774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:34:48.301 [DEBUG] [Thread-19774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:34:48.301 [DEBUG] [Thread-19774] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:34:48.301 [DEBUG] [Thread-19774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:34:48.301 [DEBUG] [Thread-19774] [transport.py] [_log()] Compression: none
2026-04-15T13:34:48.301 [DEBUG] [Thread-19774] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:34:48.309 [DEBUG] [Thread-19774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:34:48.310 [DEBUG] [Thread-19774] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:34:48.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:34:48.310 [DEBUG] [Thread-19774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:34:48.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:34:48.311 [DEBUG] [Thread-19774] [transport.py] [_log()] userauth is OK
2026-04-15T13:34:48.311 [DEBUG] [Thread-19774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:34:48.312 [DEBUG] [Thread-19774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:34:48.312 [DEBUG] [Thread-19774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:34:48.312 [DEBUG] [Thread-19774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:34:48.336 [INFO] [Thread-19774] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:34:48.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:34:49.162 [DEBUG] [Thread-19774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:34:49.162 [DEBUG] [Thread-19774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:34:49.163 [DEBUG] [Thread-19774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:34:49.203 [DEBUG] [Thread-19774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:34:49.203 [DEBUG] [Thread-19774] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:34:49.206 [DEBUG] [Thread-19774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:34:49.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:34:49.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:34:49.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:34:49.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:34:49.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:34:49.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:34:49.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:34:49.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:34:49.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:34:49.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.482082 -999.00  +14.10  11.00     66   +8.00 1 2 1 1 1   888    0 7.61 54.06 ----- 16.5 11.0 292.0 17.6 21.2 -21.4 20.1 -20.6 20.2 -16.4 21.5 -18.5
2026-04-15T13:34:49.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:34:49.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:34:49.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.482082
2026-04-15T13:34:49.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:34:49.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:34:49.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:34:49.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:34:49.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:34:49.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:34:28', tmtdew=7.48139, humidity=60.6158, cloud=0.0, wind=14.9458, temperature=14.0501, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:34:11.885', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:34:49.227 [DEBUG] [Thread-19774] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:34:49.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:34:49.455 [DEBUG] [Thread-19777] [transport.py] [_log()] starting thread (client mode): 0xf1337940
2026-04-15T13:34:49.455 [DEBUG] [Thread-19777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:34:49.469 [DEBUG] [Thread-19777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:34:49.469 [INFO] [Thread-19777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:34:49.477 [DEBUG] [Thread-19777] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:34:49.477 [DEBUG] [Thread-19777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:34:49.477 [DEBUG] [Thread-19777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:34:49.477 [DEBUG] [Thread-19777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:34:49.477 [DEBUG] [Thread-19777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:34:49.477 [DEBUG] [Thread-19777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:34:49.477 [DEBUG] [Thread-19777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:34:49.477 [DEBUG] [Thread-19777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:34:49.477 [DEBUG] [Thread-19777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:34:49.478 [DEBUG] [Thread-19777] [transport.py] [_log()] client lang: <none>
2026-04-15T13:34:49.478 [DEBUG] [Thread-19777] [transport.py] [_log()] server lang: <none>
2026-04-15T13:34:49.478 [DEBUG] [Thread-19777] [transport.py] [_log()] kex follows: False
2026-04-15T13:34:49.478 [DEBUG] [Thread-19777] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:34:49.478 [DEBUG] [Thread-19777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:34:49.478 [DEBUG] [Thread-19777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:34:49.478 [DEBUG] [Thread-19777] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:34:49.478 [DEBUG] [Thread-19777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:34:49.478 [DEBUG] [Thread-19777] [transport.py] [_log()] Compression: none
2026-04-15T13:34:49.478 [DEBUG] [Thread-19777] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:34:49.533 [DEBUG] [Thread-19777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:34:49.533 [DEBUG] [Thread-19777] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:34:49.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:34:49.534 [DEBUG] [Thread-19777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:34:49.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:34:49.590 [DEBUG] [Thread-19777] [transport.py] [_log()] userauth is OK
2026-04-15T13:34:49.591 [DEBUG] [Thread-19777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:34:49.591 [DEBUG] [Thread-19777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:34:49.591 [DEBUG] [Thread-19777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:34:49.591 [DEBUG] [Thread-19777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:34:49.618 [INFO] [Thread-19777] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:34:49.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:34:49.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:34:50.431 [DEBUG] [Thread-19777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:34:50.431 [DEBUG] [Thread-19777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:34:50.479 [DEBUG] [Thread-19777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:34:50.479 [DEBUG] [Thread-19777] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:34:50.488 [DEBUG] [Thread-19777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:34:50.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:34:50.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')
2026-04-15T13:34:50.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
2026-04-15T13:34:50.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:34:50.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:34:50.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:34:50.526 [DEBUG] [Thread-19777] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:34:55.808 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:34:55.809 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:35:02.551 [DEBUG] [Thread-19779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:35:17.596 [DEBUG] [Thread-19780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:35:20.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:35:20.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:35:20.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:35:21.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 35, 4), 7.47929, 60.6324, 0.0, 15.2633, 14.0832, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:35:21.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:35:04
2026-04-15T13:35:22.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:35:22.368 [DEBUG] [Thread-19781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:35:22.687 [DEBUG] [Thread-19782] [transport.py] [_log()] starting thread (client mode): 0xf1336740
2026-04-15T13:35:22.687 [DEBUG] [Thread-19782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:35:22.701 [DEBUG] [Thread-19782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:35:22.701 [INFO] [Thread-19782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:35:22.705 [DEBUG] [Thread-19782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:35:22.705 [DEBUG] [Thread-19782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:35:22.705 [DEBUG] [Thread-19782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:35:22.705 [DEBUG] [Thread-19782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:35:22.705 [DEBUG] [Thread-19782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:35:22.705 [DEBUG] [Thread-19782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:35:22.705 [DEBUG] [Thread-19782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:35:22.705 [DEBUG] [Thread-19782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:35:22.705 [DEBUG] [Thread-19782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:35:22.705 [DEBUG] [Thread-19782] [transport.py] [_log()] client lang: <none>
2026-04-15T13:35:22.706 [DEBUG] [Thread-19782] [transport.py] [_log()] server lang: <none>
2026-04-15T13:35:22.706 [DEBUG] [Thread-19782] [transport.py] [_log()] kex follows: False
2026-04-15T13:35:22.706 [DEBUG] [Thread-19782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:35:22.706 [DEBUG] [Thread-19782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:35:22.706 [DEBUG] [Thread-19782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:35:22.706 [DEBUG] [Thread-19782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:35:22.706 [DEBUG] [Thread-19782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:35:22.706 [DEBUG] [Thread-19782] [transport.py] [_log()] Compression: none
2026-04-15T13:35:22.706 [DEBUG] [Thread-19782] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:35:22.723 [DEBUG] [Thread-19782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:35:22.724 [DEBUG] [Thread-19782] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:35:22.724 [DEBUG] [Thread-19782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:35:22.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:35:22.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:35:22.725 [DEBUG] [Thread-19782] [transport.py] [_log()] userauth is OK
2026-04-15T13:35:22.726 [DEBUG] [Thread-19782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:35:22.726 [DEBUG] [Thread-19782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:35:22.726 [DEBUG] [Thread-19782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:35:22.726 [DEBUG] [Thread-19782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:35:22.748 [INFO] [Thread-19782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:35:22.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:35:26.041 [DEBUG] [Thread-19782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:35:26.041 [DEBUG] [Thread-19782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:35:26.042 [DEBUG] [Thread-19782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:35:26.082 [DEBUG] [Thread-19782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:35:26.082 [DEBUG] [Thread-19782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:35:26.085 [DEBUG] [Thread-19782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:35:26.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:35:26.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:35:26.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:35:26.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:35:26.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:35:26.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:35:26.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:35:26.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:35:26.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:35:26.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.482429 -999.00  +14.10  15.90     67   +8.10 1 2 1 1 1   888    0 7.51 53.94 ----- 15.8 15.9 293.5 18.7 21.4 -20.3 20.2 -18.8 20.2 -16.4 21.6 -18.6
2026-04-15T13:35:26.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:35:26.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:35:26.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.482429
2026-04-15T13:35:26.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:35:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:35:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:35:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:35:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:35:26.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:35:04', tmtdew=7.47929, humidity=60.6324, cloud=0.0, wind=15.2633, temperature=14.0832, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:34:41.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:35:26.170 [DEBUG] [Thread-19782] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:35:26.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:35:26.423 [DEBUG] [Thread-19785] [transport.py] [_log()] starting thread (client mode): 0xee901b10
2026-04-15T13:35:26.423 [DEBUG] [Thread-19785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:35:26.437 [DEBUG] [Thread-19785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:35:26.437 [INFO] [Thread-19785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:35:26.444 [DEBUG] [Thread-19785] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:35:26.444 [DEBUG] [Thread-19785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:35:26.444 [DEBUG] [Thread-19785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:35:26.444 [DEBUG] [Thread-19785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:35:26.445 [DEBUG] [Thread-19785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:35:26.445 [DEBUG] [Thread-19785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:35:26.445 [DEBUG] [Thread-19785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:35:26.445 [DEBUG] [Thread-19785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:35:26.445 [DEBUG] [Thread-19785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:35:26.445 [DEBUG] [Thread-19785] [transport.py] [_log()] client lang: <none>
2026-04-15T13:35:26.445 [DEBUG] [Thread-19785] [transport.py] [_log()] server lang: <none>
2026-04-15T13:35:26.445 [DEBUG] [Thread-19785] [transport.py] [_log()] kex follows: False
2026-04-15T13:35:26.445 [DEBUG] [Thread-19785] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:35:26.445 [DEBUG] [Thread-19785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:35:26.445 [DEBUG] [Thread-19785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:35:26.445 [DEBUG] [Thread-19785] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:35:26.445 [DEBUG] [Thread-19785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:35:26.445 [DEBUG] [Thread-19785] [transport.py] [_log()] Compression: none
2026-04-15T13:35:26.445 [DEBUG] [Thread-19785] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:35:26.502 [DEBUG] [Thread-19785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:35:26.502 [DEBUG] [Thread-19785] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:35:26.502 [DEBUG] [Thread-19785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:35:26.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:35:26.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:35:26.558 [DEBUG] [Thread-19785] [transport.py] [_log()] userauth is OK
2026-04-15T13:35:26.558 [DEBUG] [Thread-19785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:35:26.558 [DEBUG] [Thread-19785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:35:26.559 [DEBUG] [Thread-19785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:35:26.559 [DEBUG] [Thread-19785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:35:26.582 [INFO] [Thread-19785] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:35:26.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:35:26.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:35:27.438 [DEBUG] [Thread-19785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:35:27.439 [DEBUG] [Thread-19785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:35:27.486 [DEBUG] [Thread-19785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:35:27.486 [DEBUG] [Thread-19785] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:35:27.494 [DEBUG] [Thread-19785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:35:27.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:35:27.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')
2026-04-15T13:35:27.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T13:35:27.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:35:27.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:35:27.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:35:27.526 [DEBUG] [Thread-19785] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:35:32.629 [DEBUG] [Thread-19787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:35:47.670 [DEBUG] [Thread-19788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:35:55.949 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:35:55.951 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:35:57.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:35:57.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:35:57.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:35:58.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 35, 39), 7.89944, 59.0989, 0.0, 32.6376, 14.8663, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:35:58.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:35:39
2026-04-15T13:35:59.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:35:59.704 [DEBUG] [Thread-19789] [transport.py] [_log()] starting thread (client mode): 0xf13e3eb0
2026-04-15T13:35:59.704 [DEBUG] [Thread-19789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:35:59.724 [DEBUG] [Thread-19789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:35:59.725 [INFO] [Thread-19789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:35:59.727 [DEBUG] [Thread-19789] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:35:59.727 [DEBUG] [Thread-19789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:35:59.727 [DEBUG] [Thread-19789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:35:59.727 [DEBUG] [Thread-19789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:35:59.728 [DEBUG] [Thread-19789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:35:59.728 [DEBUG] [Thread-19789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:35:59.728 [DEBUG] [Thread-19789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:35:59.728 [DEBUG] [Thread-19789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:35:59.728 [DEBUG] [Thread-19789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:35:59.728 [DEBUG] [Thread-19789] [transport.py] [_log()] client lang: <none>
2026-04-15T13:35:59.728 [DEBUG] [Thread-19789] [transport.py] [_log()] server lang: <none>
2026-04-15T13:35:59.728 [DEBUG] [Thread-19789] [transport.py] [_log()] kex follows: False
2026-04-15T13:35:59.728 [DEBUG] [Thread-19789] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:35:59.728 [DEBUG] [Thread-19789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:35:59.728 [DEBUG] [Thread-19789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:35:59.728 [DEBUG] [Thread-19789] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:35:59.729 [DEBUG] [Thread-19789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:35:59.729 [DEBUG] [Thread-19789] [transport.py] [_log()] Compression: none
2026-04-15T13:35:59.729 [DEBUG] [Thread-19789] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:35:59.743 [DEBUG] [Thread-19789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:35:59.744 [DEBUG] [Thread-19789] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:35:59.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:35:59.744 [DEBUG] [Thread-19789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:35:59.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:35:59.746 [DEBUG] [Thread-19789] [transport.py] [_log()] userauth is OK
2026-04-15T13:35:59.746 [DEBUG] [Thread-19789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:35:59.746 [DEBUG] [Thread-19789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:35:59.746 [DEBUG] [Thread-19789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:35:59.746 [DEBUG] [Thread-19789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:35:59.771 [INFO] [Thread-19789] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:35:59.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:36:00.577 [DEBUG] [Thread-19789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:36:00.577 [DEBUG] [Thread-19789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:36:00.577 [DEBUG] [Thread-19789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:36:00.618 [DEBUG] [Thread-19789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:36:00.618 [DEBUG] [Thread-19789] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:36:00.621 [DEBUG] [Thread-19789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:36:00.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:36:00.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:36:00.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:36:00.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:36:00.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:36:00.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:36:00.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:36:00.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:36:00.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:36:00.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.482777 -999.00  +14.10  17.53     66   +8.00 1 2 1 1 1   888    0 7.41 50.76 ----- 17.6 17.5 301.2 21.6 21.4 -19.2 20.3 -18.3 20.3 -17.3 21.6 -17.4
2026-04-15T13:36:00.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:36:00.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:36:00.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.482777
2026-04-15T13:36:00.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:36:00.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:36:00.648 [DEBUG] [Thread-19789] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:36:00.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:36:00.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:36:00.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:36:00.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:35:39', tmtdew=7.89944, humidity=59.0989, cloud=0.0, wind=32.6376, temperature=14.8663, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:35:11.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:36:00.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:36:00.905 [DEBUG] [Thread-19792] [transport.py] [_log()] starting thread (client mode): 0xee9033a0
2026-04-15T13:36:00.905 [DEBUG] [Thread-19792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:36:00.919 [DEBUG] [Thread-19792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:36:00.919 [INFO] [Thread-19792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:36:00.926 [DEBUG] [Thread-19792] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:36:00.926 [DEBUG] [Thread-19792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:36:00.927 [DEBUG] [Thread-19792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:36:00.927 [DEBUG] [Thread-19792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:36:00.927 [DEBUG] [Thread-19792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:36:00.927 [DEBUG] [Thread-19792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:36:00.927 [DEBUG] [Thread-19792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:36:00.927 [DEBUG] [Thread-19792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:36:00.927 [DEBUG] [Thread-19792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:36:00.927 [DEBUG] [Thread-19792] [transport.py] [_log()] client lang: <none>
2026-04-15T13:36:00.927 [DEBUG] [Thread-19792] [transport.py] [_log()] server lang: <none>
2026-04-15T13:36:00.927 [DEBUG] [Thread-19792] [transport.py] [_log()] kex follows: False
2026-04-15T13:36:00.927 [DEBUG] [Thread-19792] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:36:00.928 [DEBUG] [Thread-19792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:36:00.928 [DEBUG] [Thread-19792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:36:00.928 [DEBUG] [Thread-19792] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:36:00.928 [DEBUG] [Thread-19792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:36:00.928 [DEBUG] [Thread-19792] [transport.py] [_log()] Compression: none
2026-04-15T13:36:00.928 [DEBUG] [Thread-19792] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:36:00.986 [DEBUG] [Thread-19792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:36:00.986 [DEBUG] [Thread-19792] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:36:00.987 [DEBUG] [Thread-19792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:36:00.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:36:00.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:36:01.042 [DEBUG] [Thread-19792] [transport.py] [_log()] userauth is OK
2026-04-15T13:36:01.042 [DEBUG] [Thread-19792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:36:01.042 [DEBUG] [Thread-19792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:36:01.042 [DEBUG] [Thread-19792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:36:01.042 [DEBUG] [Thread-19792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:36:01.064 [INFO] [Thread-19792] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:36:01.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:36:01.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:36:01.919 [DEBUG] [Thread-19792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:36:01.919 [DEBUG] [Thread-19792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:36:01.968 [DEBUG] [Thread-19792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:36:01.968 [DEBUG] [Thread-19792] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:36:01.977 [DEBUG] [Thread-19792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:36:01.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:36:01.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')
2026-04-15T13:36:01.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') -> 00000000
2026-04-15T13:36:02.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:36:02.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:36:02.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:36:02.017 [DEBUG] [Thread-19792] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:36:02.699 [DEBUG] [Thread-19794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:36:17.744 [DEBUG] [Thread-19795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:36:22.442 [DEBUG] [Thread-19796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:36:32.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:36:32.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:36:32.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
2026-04-15T13:36:32.776 [DEBUG] [Thread-19797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:36:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 36, 15), 7.6087, 60.4031, 0.0, 19.638, 14.2999, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:36:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:36:15
2026-04-15T13:36:33.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:36:34.207 [DEBUG] [Thread-19798] [transport.py] [_log()] starting thread (client mode): 0xee902350
2026-04-15T13:36:34.207 [DEBUG] [Thread-19798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:36:34.228 [DEBUG] [Thread-19798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:36:34.228 [INFO] [Thread-19798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:36:34.231 [DEBUG] [Thread-19798] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:36:34.231 [DEBUG] [Thread-19798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:36:34.231 [DEBUG] [Thread-19798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:36:34.231 [DEBUG] [Thread-19798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:36:34.231 [DEBUG] [Thread-19798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:36:34.231 [DEBUG] [Thread-19798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:36:34.231 [DEBUG] [Thread-19798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:36:34.231 [DEBUG] [Thread-19798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:36:34.231 [DEBUG] [Thread-19798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:36:34.231 [DEBUG] [Thread-19798] [transport.py] [_log()] client lang: <none>
2026-04-15T13:36:34.231 [DEBUG] [Thread-19798] [transport.py] [_log()] server lang: <none>
2026-04-15T13:36:34.231 [DEBUG] [Thread-19798] [transport.py] [_log()] kex follows: False
2026-04-15T13:36:34.231 [DEBUG] [Thread-19798] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:36:34.231 [DEBUG] [Thread-19798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:36:34.232 [DEBUG] [Thread-19798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:36:34.232 [DEBUG] [Thread-19798] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:36:34.232 [DEBUG] [Thread-19798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:36:34.232 [DEBUG] [Thread-19798] [transport.py] [_log()] Compression: none
2026-04-15T13:36:34.232 [DEBUG] [Thread-19798] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:36:34.247 [DEBUG] [Thread-19798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:36:34.247 [DEBUG] [Thread-19798] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:36:34.248 [DEBUG] [Thread-19798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:36:34.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:36:34.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:36:34.249 [DEBUG] [Thread-19798] [transport.py] [_log()] userauth is OK
2026-04-15T13:36:34.249 [DEBUG] [Thread-19798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:36:34.249 [DEBUG] [Thread-19798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:36:34.249 [DEBUG] [Thread-19798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:36:34.249 [DEBUG] [Thread-19798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:36:34.279 [INFO] [Thread-19798] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:36:34.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:36:35.054 [DEBUG] [Thread-19798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:36:35.054 [DEBUG] [Thread-19798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:36:35.055 [DEBUG] [Thread-19798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:36:35.095 [DEBUG] [Thread-19798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:36:35.095 [DEBUG] [Thread-19798] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:36:35.097 [DEBUG] [Thread-19798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:36:35.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:36:35.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:36:35.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:36:35.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:36:35.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:36:35.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:36:35.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:36:35.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:36:35.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:36:35.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.483124 -999.00  +14.30  10.71     69   +8.70 1 2 1 1 1   888    0 7.24 42.89 ----- 11.2 10.7 307.4 20.2 21.5 -19.1 20.4 -18.9 20.5 -16.4 21.7 -18.6
2026-04-15T13:36:35.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:36:35.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:36:35.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.483124
2026-04-15T13:36:35.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:36:35.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:36:35.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:36:35.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:36:35.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:36:35.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:36:15', tmtdew=7.6087, humidity=60.4031, cloud=0.0, wind=19.638, temperature=14.2999, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:35:41.914', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:36:35.114 [DEBUG] [Thread-19798] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:36:35.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:36:35.338 [DEBUG] [Thread-19801] [transport.py] [_log()] starting thread (client mode): 0xf13ecc70
2026-04-15T13:36:35.338 [DEBUG] [Thread-19801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:36:35.352 [DEBUG] [Thread-19801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:36:35.352 [INFO] [Thread-19801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:36:35.359 [DEBUG] [Thread-19801] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] client lang: <none>
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] server lang: <none>
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] kex follows: False
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:36:35.360 [DEBUG] [Thread-19801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:36:35.361 [DEBUG] [Thread-19801] [transport.py] [_log()] Compression: none
2026-04-15T13:36:35.361 [DEBUG] [Thread-19801] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:36:35.417 [DEBUG] [Thread-19801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:36:35.417 [DEBUG] [Thread-19801] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:36:35.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:36:35.418 [DEBUG] [Thread-19801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:36:35.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:36:35.478 [DEBUG] [Thread-19801] [transport.py] [_log()] userauth is OK
2026-04-15T13:36:35.479 [DEBUG] [Thread-19801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:36:35.479 [DEBUG] [Thread-19801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:36:35.479 [DEBUG] [Thread-19801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:36:35.479 [DEBUG] [Thread-19801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:36:35.496 [INFO] [Thread-19801] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:36:35.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:36:35.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:36:36.355 [DEBUG] [Thread-19801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:36:36.355 [DEBUG] [Thread-19801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:36:36.403 [DEBUG] [Thread-19801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:36:36.403 [DEBUG] [Thread-19801] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:36:36.411 [DEBUG] [Thread-19801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:36:36.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:36:36.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')
2026-04-15T13:36:36.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
2026-04-15T13:36:36.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:36:36.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:36:36.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:36:36.443 [DEBUG] [Thread-19801] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:36:47.808 [DEBUG] [Thread-19803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:36:56.095 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:36:56.096 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:37:02.855 [DEBUG] [Thread-19804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:37:06.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:37:06.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:37:06.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
2026-04-15T13:37:07.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 36, 50), 8.18623, 57.9056, 0.0, 22.6534, 14.7005, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:37:07.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:36:50
2026-04-15T13:37:08.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:37:08.585 [DEBUG] [Thread-19805] [transport.py] [_log()] starting thread (client mode): 0xee902ec0
2026-04-15T13:37:08.586 [DEBUG] [Thread-19805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:37:08.605 [DEBUG] [Thread-19805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:37:08.605 [INFO] [Thread-19805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:37:08.608 [DEBUG] [Thread-19805] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:37:08.608 [DEBUG] [Thread-19805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:37:08.609 [DEBUG] [Thread-19805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:37:08.609 [DEBUG] [Thread-19805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:37:08.609 [DEBUG] [Thread-19805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:37:08.609 [DEBUG] [Thread-19805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:37:08.609 [DEBUG] [Thread-19805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:37:08.609 [DEBUG] [Thread-19805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:37:08.609 [DEBUG] [Thread-19805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:37:08.609 [DEBUG] [Thread-19805] [transport.py] [_log()] client lang: <none>
2026-04-15T13:37:08.609 [DEBUG] [Thread-19805] [transport.py] [_log()] server lang: <none>
2026-04-15T13:37:08.609 [DEBUG] [Thread-19805] [transport.py] [_log()] kex follows: False
2026-04-15T13:37:08.609 [DEBUG] [Thread-19805] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:37:08.609 [DEBUG] [Thread-19805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:37:08.610 [DEBUG] [Thread-19805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:37:08.610 [DEBUG] [Thread-19805] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:37:08.610 [DEBUG] [Thread-19805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:37:08.610 [DEBUG] [Thread-19805] [transport.py] [_log()] Compression: none
2026-04-15T13:37:08.610 [DEBUG] [Thread-19805] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:37:08.626 [DEBUG] [Thread-19805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:37:08.626 [DEBUG] [Thread-19805] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:37:08.627 [DEBUG] [Thread-19805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:37:08.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:37:08.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:37:08.628 [DEBUG] [Thread-19805] [transport.py] [_log()] userauth is OK
2026-04-15T13:37:08.628 [DEBUG] [Thread-19805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:37:08.628 [DEBUG] [Thread-19805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:37:08.628 [DEBUG] [Thread-19805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:37:08.628 [DEBUG] [Thread-19805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:37:08.645 [INFO] [Thread-19805] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:37:08.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:37:09.433 [DEBUG] [Thread-19805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:37:09.433 [DEBUG] [Thread-19805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:37:09.434 [DEBUG] [Thread-19805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:37:09.474 [DEBUG] [Thread-19805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:37:09.474 [DEBUG] [Thread-19805] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:37:09.478 [DEBUG] [Thread-19805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:37:09.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:37:09.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:37:09.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:37:09.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:37:09.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:37:09.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:37:09.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:37:09.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:37:09.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:37:09.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.483818 -999.00  +13.80  28.10     65   +7.40 1 2 1 1 1   888    0 7.24 40.09 ----- 23.7 28.1 315.4 30.9 21.4 -23.4 20.3 -22.1 20.3 -19.8 21.7 -21.4
2026-04-15T13:37:09.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:37:09.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:37:09.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.483818
2026-04-15T13:37:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:37:09.502 [DEBUG] [Thread-19805] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:37:09.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:37:09.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:37:09.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:37:09.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:37:09.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:36:50', tmtdew=8.18623, humidity=57.9056, cloud=0.0, wind=22.6534, temperature=14.7005, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:36:41.875', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:37:09.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:37:09.759 [DEBUG] [Thread-19808] [transport.py] [_log()] starting thread (client mode): 0xf13edb40
2026-04-15T13:37:09.759 [DEBUG] [Thread-19808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:37:09.774 [DEBUG] [Thread-19808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:37:09.774 [INFO] [Thread-19808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:37:09.782 [DEBUG] [Thread-19808] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:37:09.782 [DEBUG] [Thread-19808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:37:09.782 [DEBUG] [Thread-19808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:37:09.782 [DEBUG] [Thread-19808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:37:09.782 [DEBUG] [Thread-19808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:37:09.782 [DEBUG] [Thread-19808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:37:09.782 [DEBUG] [Thread-19808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:37:09.783 [DEBUG] [Thread-19808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:37:09.783 [DEBUG] [Thread-19808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:37:09.783 [DEBUG] [Thread-19808] [transport.py] [_log()] client lang: <none>
2026-04-15T13:37:09.783 [DEBUG] [Thread-19808] [transport.py] [_log()] server lang: <none>
2026-04-15T13:37:09.783 [DEBUG] [Thread-19808] [transport.py] [_log()] kex follows: False
2026-04-15T13:37:09.783 [DEBUG] [Thread-19808] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:37:09.783 [DEBUG] [Thread-19808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:37:09.783 [DEBUG] [Thread-19808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:37:09.783 [DEBUG] [Thread-19808] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:37:09.783 [DEBUG] [Thread-19808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:37:09.783 [DEBUG] [Thread-19808] [transport.py] [_log()] Compression: none
2026-04-15T13:37:09.783 [DEBUG] [Thread-19808] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:37:09.837 [DEBUG] [Thread-19808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:37:09.837 [DEBUG] [Thread-19808] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:37:09.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:37:09.838 [DEBUG] [Thread-19808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:37:09.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:37:09.894 [DEBUG] [Thread-19808] [transport.py] [_log()] userauth is OK
2026-04-15T13:37:09.894 [DEBUG] [Thread-19808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:37:09.895 [DEBUG] [Thread-19808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:37:09.895 [DEBUG] [Thread-19808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:37:09.895 [DEBUG] [Thread-19808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:37:09.920 [INFO] [Thread-19808] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:37:09.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:37:09.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:37:10.751 [DEBUG] [Thread-19808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:37:10.752 [DEBUG] [Thread-19808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:37:10.799 [DEBUG] [Thread-19808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:37:10.799 [DEBUG] [Thread-19808] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:37:10.807 [DEBUG] [Thread-19808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:37:10.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:37:10.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')
2026-04-15T13:37:10.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
2026-04-15T13:37:10.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:37:10.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:37:10.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:37:10.844 [DEBUG] [Thread-19808] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:37:17.886 [DEBUG] [Thread-19810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:37:22.516 [DEBUG] [Thread-19811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:37:32.929 [DEBUG] [Thread-19812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:37:40.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:37:40.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:37:40.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:37:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 37, 25), 7.73569, 59.298, 0.0, 21.4733, 14.1833, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:37:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:37:25
2026-04-15T13:37:42.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:37:43.018 [DEBUG] [Thread-19813] [transport.py] [_log()] starting thread (client mode): 0xee98a5c0
2026-04-15T13:37:43.018 [DEBUG] [Thread-19813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:37:43.037 [DEBUG] [Thread-19813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:37:43.037 [INFO] [Thread-19813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:37:43.040 [DEBUG] [Thread-19813] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:37:43.040 [DEBUG] [Thread-19813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:37:43.040 [DEBUG] [Thread-19813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:37:43.040 [DEBUG] [Thread-19813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:37:43.041 [DEBUG] [Thread-19813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:37:43.041 [DEBUG] [Thread-19813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:37:43.041 [DEBUG] [Thread-19813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:37:43.041 [DEBUG] [Thread-19813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:37:43.041 [DEBUG] [Thread-19813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:37:43.041 [DEBUG] [Thread-19813] [transport.py] [_log()] client lang: <none>
2026-04-15T13:37:43.041 [DEBUG] [Thread-19813] [transport.py] [_log()] server lang: <none>
2026-04-15T13:37:43.041 [DEBUG] [Thread-19813] [transport.py] [_log()] kex follows: False
2026-04-15T13:37:43.041 [DEBUG] [Thread-19813] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:37:43.041 [DEBUG] [Thread-19813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:37:43.041 [DEBUG] [Thread-19813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:37:43.042 [DEBUG] [Thread-19813] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:37:43.042 [DEBUG] [Thread-19813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:37:43.042 [DEBUG] [Thread-19813] [transport.py] [_log()] Compression: none
2026-04-15T13:37:43.042 [DEBUG] [Thread-19813] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:37:43.057 [DEBUG] [Thread-19813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:37:43.057 [DEBUG] [Thread-19813] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:37:43.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:37:43.058 [DEBUG] [Thread-19813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:37:43.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:37:43.059 [DEBUG] [Thread-19813] [transport.py] [_log()] userauth is OK
2026-04-15T13:37:43.059 [DEBUG] [Thread-19813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:37:43.059 [DEBUG] [Thread-19813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:37:43.059 [DEBUG] [Thread-19813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:37:43.059 [DEBUG] [Thread-19813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:37:43.083 [INFO] [Thread-19813] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:37:43.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:37:43.881 [DEBUG] [Thread-19813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:37:43.881 [DEBUG] [Thread-19813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:37:43.882 [DEBUG] [Thread-19813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:37:43.922 [DEBUG] [Thread-19813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:37:43.922 [DEBUG] [Thread-19813] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:37:43.925 [DEBUG] [Thread-19813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:37:43.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:37:43.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:37:43.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:37:43.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:37:43.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:37:43.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:37:43.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:37:43.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:37:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:37:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.484165 -999.00  +13.80  21.66     65   +7.50 1 2 1 1 1   888    0 7.04 34.73 ----- 17.7 21.7 317.4 29.5 21.5 -23.3 20.3 -22.5 20.4 -19.9 21.6 -22.1
2026-04-15T13:37:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:37:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:37:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.484165
2026-04-15T13:37:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:37:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:37:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:37:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:37:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:37:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:37:25', tmtdew=7.73569, humidity=59.298, cloud=0.0, wind=21.4733, temperature=14.1833, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:37:11.856', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:37:43.951 [DEBUG] [Thread-19813] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:37:44.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:37:44.211 [DEBUG] [Thread-19816] [transport.py] [_log()] starting thread (client mode): 0xee902770
2026-04-15T13:37:44.211 [DEBUG] [Thread-19816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:37:44.226 [DEBUG] [Thread-19816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:37:44.226 [INFO] [Thread-19816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:37:44.238 [DEBUG] [Thread-19816] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:37:44.238 [DEBUG] [Thread-19816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:37:44.238 [DEBUG] [Thread-19816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:37:44.238 [DEBUG] [Thread-19816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:37:44.239 [DEBUG] [Thread-19816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:37:44.239 [DEBUG] [Thread-19816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:37:44.239 [DEBUG] [Thread-19816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:37:44.239 [DEBUG] [Thread-19816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:37:44.239 [DEBUG] [Thread-19816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:37:44.239 [DEBUG] [Thread-19816] [transport.py] [_log()] client lang: <none>
2026-04-15T13:37:44.239 [DEBUG] [Thread-19816] [transport.py] [_log()] server lang: <none>
2026-04-15T13:37:44.239 [DEBUG] [Thread-19816] [transport.py] [_log()] kex follows: False
2026-04-15T13:37:44.239 [DEBUG] [Thread-19816] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:37:44.239 [DEBUG] [Thread-19816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:37:44.239 [DEBUG] [Thread-19816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:37:44.239 [DEBUG] [Thread-19816] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:37:44.240 [DEBUG] [Thread-19816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:37:44.240 [DEBUG] [Thread-19816] [transport.py] [_log()] Compression: none
2026-04-15T13:37:44.240 [DEBUG] [Thread-19816] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:37:44.294 [DEBUG] [Thread-19816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:37:44.294 [DEBUG] [Thread-19816] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:37:44.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:37:44.295 [DEBUG] [Thread-19816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:37:44.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:37:44.352 [DEBUG] [Thread-19816] [transport.py] [_log()] userauth is OK
2026-04-15T13:37:44.353 [DEBUG] [Thread-19816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:37:44.353 [DEBUG] [Thread-19816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:37:44.353 [DEBUG] [Thread-19816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:37:44.353 [DEBUG] [Thread-19816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:37:44.378 [INFO] [Thread-19816] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:37:44.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:37:44.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:37:45.239 [DEBUG] [Thread-19816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:37:45.239 [DEBUG] [Thread-19816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:37:45.290 [DEBUG] [Thread-19816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:37:45.290 [DEBUG] [Thread-19816] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:37:45.300 [DEBUG] [Thread-19816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:37:45.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:37:45.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')
2026-04-15T13:37:45.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
2026-04-15T13:37:45.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:37:45.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:37:45.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:37:45.336 [DEBUG] [Thread-19816] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:37:47.958 [DEBUG] [Thread-19818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:37:56.237 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:37:56.238 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:38:03.004 [DEBUG] [Thread-19819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:38:15.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:38:15.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:38:15.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
2026-04-15T13:38:16.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 38, 1), 7.78946, 59.5991, 0.0, 26.7145, 14.3662, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:38:16.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:38:01
2026-04-15T13:38:17.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:38:17.569 [DEBUG] [Thread-19820] [transport.py] [_log()] starting thread (client mode): 0xf13e0a60
2026-04-15T13:38:17.570 [DEBUG] [Thread-19820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:38:17.589 [DEBUG] [Thread-19820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:38:17.589 [INFO] [Thread-19820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:38:17.593 [DEBUG] [Thread-19820] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:38:17.593 [DEBUG] [Thread-19820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:38:17.593 [DEBUG] [Thread-19820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:38:17.593 [DEBUG] [Thread-19820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:38:17.593 [DEBUG] [Thread-19820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:38:17.593 [DEBUG] [Thread-19820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:38:17.593 [DEBUG] [Thread-19820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:38:17.593 [DEBUG] [Thread-19820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:38:17.593 [DEBUG] [Thread-19820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:38:17.593 [DEBUG] [Thread-19820] [transport.py] [_log()] client lang: <none>
2026-04-15T13:38:17.593 [DEBUG] [Thread-19820] [transport.py] [_log()] server lang: <none>
2026-04-15T13:38:17.593 [DEBUG] [Thread-19820] [transport.py] [_log()] kex follows: False
2026-04-15T13:38:17.593 [DEBUG] [Thread-19820] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:38:17.593 [DEBUG] [Thread-19820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:38:17.593 [DEBUG] [Thread-19820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:38:17.594 [DEBUG] [Thread-19820] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:38:17.594 [DEBUG] [Thread-19820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:38:17.594 [DEBUG] [Thread-19820] [transport.py] [_log()] Compression: none
2026-04-15T13:38:17.594 [DEBUG] [Thread-19820] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:38:17.609 [DEBUG] [Thread-19820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:38:17.609 [DEBUG] [Thread-19820] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:38:17.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:38:17.610 [DEBUG] [Thread-19820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:38:17.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:38:17.611 [DEBUG] [Thread-19820] [transport.py] [_log()] userauth is OK
2026-04-15T13:38:17.611 [DEBUG] [Thread-19820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:38:17.611 [DEBUG] [Thread-19820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:38:17.611 [DEBUG] [Thread-19820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:38:17.611 [DEBUG] [Thread-19820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:38:17.630 [INFO] [Thread-19820] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:38:17.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:38:18.038 [DEBUG] [Thread-19822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:38:18.443 [DEBUG] [Thread-19820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:38:18.444 [DEBUG] [Thread-19820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:38:18.444 [DEBUG] [Thread-19820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:38:18.484 [DEBUG] [Thread-19820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:38:18.484 [DEBUG] [Thread-19820] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:38:18.487 [DEBUG] [Thread-19820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:38:18.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:38:18.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:38:18.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:38:18.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:38:18.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:38:18.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:38:18.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:38:18.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:38:18.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:38:18.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.484513 -999.00  +14.30  24.50     65   +7.90 1 2 1 1 1   888    0 6.93 28.98 ----- 27.9 24.5 322.3 33.0 21.5 -23.4 20.3 -21.7 20.3 -21.7 21.6 -23.3
2026-04-15T13:38:18.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:38:18.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:38:18.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.484513
2026-04-15T13:38:18.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:38:18.513 [DEBUG] [Thread-19820] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:38:18.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:38:18.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:38:18.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:38:18.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:38:18.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:38:01', tmtdew=7.78946, humidity=59.5991, cloud=0.0, wind=26.7145, temperature=14.3662, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:37:41.923', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:38:18.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:38:18.774 [DEBUG] [Thread-19824] [transport.py] [_log()] starting thread (client mode): 0xf13e0c70
2026-04-15T13:38:18.774 [DEBUG] [Thread-19824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:38:18.791 [DEBUG] [Thread-19824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:38:18.791 [INFO] [Thread-19824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:38:18.798 [DEBUG] [Thread-19824] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:38:18.798 [DEBUG] [Thread-19824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:38:18.798 [DEBUG] [Thread-19824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:38:18.798 [DEBUG] [Thread-19824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:38:18.798 [DEBUG] [Thread-19824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:38:18.799 [DEBUG] [Thread-19824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:38:18.799 [DEBUG] [Thread-19824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:38:18.799 [DEBUG] [Thread-19824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:38:18.799 [DEBUG] [Thread-19824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:38:18.799 [DEBUG] [Thread-19824] [transport.py] [_log()] client lang: <none>
2026-04-15T13:38:18.799 [DEBUG] [Thread-19824] [transport.py] [_log()] server lang: <none>
2026-04-15T13:38:18.799 [DEBUG] [Thread-19824] [transport.py] [_log()] kex follows: False
2026-04-15T13:38:18.799 [DEBUG] [Thread-19824] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:38:18.799 [DEBUG] [Thread-19824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:38:18.799 [DEBUG] [Thread-19824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:38:18.799 [DEBUG] [Thread-19824] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:38:18.800 [DEBUG] [Thread-19824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:38:18.800 [DEBUG] [Thread-19824] [transport.py] [_log()] Compression: none
2026-04-15T13:38:18.800 [DEBUG] [Thread-19824] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:38:18.862 [DEBUG] [Thread-19824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:38:18.862 [DEBUG] [Thread-19824] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:38:18.863 [DEBUG] [Thread-19824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:38:18.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:38:18.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:38:18.923 [DEBUG] [Thread-19824] [transport.py] [_log()] userauth is OK
2026-04-15T13:38:18.923 [DEBUG] [Thread-19824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:38:18.923 [DEBUG] [Thread-19824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:38:18.923 [DEBUG] [Thread-19824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:38:18.924 [DEBUG] [Thread-19824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:38:18.949 [INFO] [Thread-19824] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:38:18.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:38:18.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:38:19.776 [DEBUG] [Thread-19824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:38:19.777 [DEBUG] [Thread-19824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:38:19.825 [DEBUG] [Thread-19824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:38:19.825 [DEBUG] [Thread-19824] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:38:19.834 [DEBUG] [Thread-19824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:38:19.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:38:19.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')
2026-04-15T13:38:19.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
2026-04-15T13:38:19.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:38:19.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:38:19.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:38:19.869 [DEBUG] [Thread-19824] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:38:22.604 [DEBUG] [Thread-19826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:38:33.070 [DEBUG] [Thread-19827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:38:48.116 [DEBUG] [Thread-19828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:38:49.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:38:49.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:38:49.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:38:51.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 38, 37), 8.92057, 55.1539, 0.0, 28.2276, 15.1307, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:38:51.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:38:37
2026-04-15T13:38:51.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:38:52.083 [DEBUG] [Thread-19829] [transport.py] [_log()] starting thread (client mode): 0xf1335750
2026-04-15T13:38:52.083 [DEBUG] [Thread-19829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:38:52.103 [DEBUG] [Thread-19829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:38:52.103 [INFO] [Thread-19829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:38:52.105 [DEBUG] [Thread-19829] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:38:52.105 [DEBUG] [Thread-19829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:38:52.105 [DEBUG] [Thread-19829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:38:52.105 [DEBUG] [Thread-19829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:38:52.105 [DEBUG] [Thread-19829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:38:52.105 [DEBUG] [Thread-19829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:38:52.105 [DEBUG] [Thread-19829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:38:52.105 [DEBUG] [Thread-19829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:38:52.105 [DEBUG] [Thread-19829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:38:52.105 [DEBUG] [Thread-19829] [transport.py] [_log()] client lang: <none>
2026-04-15T13:38:52.106 [DEBUG] [Thread-19829] [transport.py] [_log()] server lang: <none>
2026-04-15T13:38:52.106 [DEBUG] [Thread-19829] [transport.py] [_log()] kex follows: False
2026-04-15T13:38:52.106 [DEBUG] [Thread-19829] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:38:52.106 [DEBUG] [Thread-19829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:38:52.106 [DEBUG] [Thread-19829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:38:52.106 [DEBUG] [Thread-19829] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:38:52.106 [DEBUG] [Thread-19829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:38:52.106 [DEBUG] [Thread-19829] [transport.py] [_log()] Compression: none
2026-04-15T13:38:52.106 [DEBUG] [Thread-19829] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:38:52.114 [DEBUG] [Thread-19829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:38:52.115 [DEBUG] [Thread-19829] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:38:52.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:38:52.115 [DEBUG] [Thread-19829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:38:52.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:38:52.156 [DEBUG] [Thread-19829] [transport.py] [_log()] userauth is OK
2026-04-15T13:38:52.156 [DEBUG] [Thread-19829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:38:52.156 [DEBUG] [Thread-19829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:38:52.157 [DEBUG] [Thread-19829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:38:52.157 [DEBUG] [Thread-19829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:38:52.180 [INFO] [Thread-19829] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:38:52.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:38:52.940 [DEBUG] [Thread-19829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:38:52.941 [DEBUG] [Thread-19829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:38:52.941 [DEBUG] [Thread-19829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:38:52.982 [DEBUG] [Thread-19829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:38:52.982 [DEBUG] [Thread-19829] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:38:52.986 [DEBUG] [Thread-19829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:38:52.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:38:53.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:38:53.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:38:53.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:38:53.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:38:53.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:38:53.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:38:53.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:38:53.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:38:53.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.484860 -999.00  +14.00  23.10     64   +7.50 1 2 1 1 1   888    0 6.88 29.44 ----- 32.4 23.1 319.8 31.4 21.4 -25.0 20.2 -24.2 20.4 -21.0 21.6 -22.8
2026-04-15T13:38:53.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:38:53.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:38:53.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.484860
2026-04-15T13:38:53.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:38:53.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:38:53.014 [DEBUG] [Thread-19829] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:38:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:38:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:38:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:38:53.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:38:37', tmtdew=8.92057, humidity=55.1539, cloud=0.0, wind=28.2276, temperature=15.1307, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:38:11.904', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:38:53.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:38:53.270 [DEBUG] [Thread-19832] [transport.py] [_log()] starting thread (client mode): 0xf13efc10
2026-04-15T13:38:53.270 [DEBUG] [Thread-19832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:38:53.284 [DEBUG] [Thread-19832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:38:53.284 [INFO] [Thread-19832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:38:53.292 [DEBUG] [Thread-19832] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:38:53.292 [DEBUG] [Thread-19832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:38:53.292 [DEBUG] [Thread-19832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:38:53.292 [DEBUG] [Thread-19832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:38:53.292 [DEBUG] [Thread-19832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:38:53.292 [DEBUG] [Thread-19832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:38:53.292 [DEBUG] [Thread-19832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:38:53.292 [DEBUG] [Thread-19832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:38:53.292 [DEBUG] [Thread-19832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:38:53.292 [DEBUG] [Thread-19832] [transport.py] [_log()] client lang: <none>
2026-04-15T13:38:53.292 [DEBUG] [Thread-19832] [transport.py] [_log()] server lang: <none>
2026-04-15T13:38:53.292 [DEBUG] [Thread-19832] [transport.py] [_log()] kex follows: False
2026-04-15T13:38:53.293 [DEBUG] [Thread-19832] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:38:53.293 [DEBUG] [Thread-19832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:38:53.293 [DEBUG] [Thread-19832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:38:53.293 [DEBUG] [Thread-19832] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:38:53.293 [DEBUG] [Thread-19832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:38:53.293 [DEBUG] [Thread-19832] [transport.py] [_log()] Compression: none
2026-04-15T13:38:53.293 [DEBUG] [Thread-19832] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:38:53.352 [DEBUG] [Thread-19832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:38:53.352 [DEBUG] [Thread-19832] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:38:53.353 [DEBUG] [Thread-19832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:38:53.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:38:53.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:38:53.410 [DEBUG] [Thread-19832] [transport.py] [_log()] userauth is OK
2026-04-15T13:38:53.410 [DEBUG] [Thread-19832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:38:53.410 [DEBUG] [Thread-19832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:38:53.411 [DEBUG] [Thread-19832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:38:53.411 [DEBUG] [Thread-19832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:38:53.436 [INFO] [Thread-19832] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:38:53.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:38:53.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:38:54.252 [DEBUG] [Thread-19832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:38:54.252 [DEBUG] [Thread-19832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:38:54.300 [DEBUG] [Thread-19832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:38:54.300 [DEBUG] [Thread-19832] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:38:54.309 [DEBUG] [Thread-19832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:38:54.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:38:54.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')
2026-04-15T13:38:54.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
2026-04-15T13:38:54.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:38:54.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:38:54.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:38:54.344 [DEBUG] [Thread-19832] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:38:56.377 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:38:56.378 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:39:03.147 [DEBUG] [Thread-19834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:39:18.191 [DEBUG] [Thread-19835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:39:22.680 [DEBUG] [Thread-19836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:39:24.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:39:24.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:39:24.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:39:25.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 39, 12), 8.28047, 57.5244, 0.0, 24.7028, 14.0665, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:39:25.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:39:12
2026-04-15T13:39:26.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:39:26.540 [DEBUG] [Thread-19837] [transport.py] [_log()] starting thread (client mode): 0xee9e5b40
2026-04-15T13:39:26.540 [DEBUG] [Thread-19837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:39:26.561 [DEBUG] [Thread-19837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:39:26.561 [INFO] [Thread-19837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:39:26.563 [DEBUG] [Thread-19837] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:39:26.563 [DEBUG] [Thread-19837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:39:26.563 [DEBUG] [Thread-19837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:39:26.563 [DEBUG] [Thread-19837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:39:26.563 [DEBUG] [Thread-19837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:39:26.563 [DEBUG] [Thread-19837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:39:26.563 [DEBUG] [Thread-19837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:39:26.563 [DEBUG] [Thread-19837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:39:26.564 [DEBUG] [Thread-19837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:39:26.564 [DEBUG] [Thread-19837] [transport.py] [_log()] client lang: <none>
2026-04-15T13:39:26.564 [DEBUG] [Thread-19837] [transport.py] [_log()] server lang: <none>
2026-04-15T13:39:26.564 [DEBUG] [Thread-19837] [transport.py] [_log()] kex follows: False
2026-04-15T13:39:26.564 [DEBUG] [Thread-19837] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:39:26.564 [DEBUG] [Thread-19837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:39:26.564 [DEBUG] [Thread-19837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:39:26.564 [DEBUG] [Thread-19837] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:39:26.564 [DEBUG] [Thread-19837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:39:26.564 [DEBUG] [Thread-19837] [transport.py] [_log()] Compression: none
2026-04-15T13:39:26.564 [DEBUG] [Thread-19837] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:39:26.573 [DEBUG] [Thread-19837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:39:26.573 [DEBUG] [Thread-19837] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:39:26.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:39:26.574 [DEBUG] [Thread-19837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:39:26.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:39:26.575 [DEBUG] [Thread-19837] [transport.py] [_log()] userauth is OK
2026-04-15T13:39:26.575 [DEBUG] [Thread-19837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:39:26.575 [DEBUG] [Thread-19837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:39:26.575 [DEBUG] [Thread-19837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:39:26.575 [DEBUG] [Thread-19837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:39:26.593 [INFO] [Thread-19837] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:39:26.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:39:27.321 [DEBUG] [Thread-19837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:39:27.322 [DEBUG] [Thread-19837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:39:27.322 [DEBUG] [Thread-19837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:39:27.362 [DEBUG] [Thread-19837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:39:27.362 [DEBUG] [Thread-19837] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:39:27.365 [DEBUG] [Thread-19837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:39:27.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:39:27.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:39:27.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:39:27.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:39:27.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:39:27.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:39:27.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:39:27.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:39:27.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:39:27.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.485207 -999.00  +14.30  23.57     64   +7.60 1 1 1 1 1   888    0 6.86 26.94 ----- 13.7 23.6 322.4 38.6 21.4 -24.9 20.1 -24.2 20.3 -21.9 21.6 -23.9
2026-04-15T13:39:27.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:39:27.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:39:27.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.485207
2026-04-15T13:39:27.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:39:27.390 [DEBUG] [Thread-19837] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:39:27.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:39:27.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:39:27.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:39:27.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T13:39:27.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:39:12', tmtdew=8.28047, humidity=57.5244, cloud=0.0, wind=24.7028, temperature=14.0665, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:38:41.885', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:39:27.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:39:27.640 [DEBUG] [Thread-19840] [transport.py] [_log()] starting thread (client mode): 0xf13649a0
2026-04-15T13:39:27.640 [DEBUG] [Thread-19840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:39:27.656 [DEBUG] [Thread-19840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:39:27.656 [INFO] [Thread-19840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:39:27.663 [DEBUG] [Thread-19840] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:39:27.663 [DEBUG] [Thread-19840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:39:27.664 [DEBUG] [Thread-19840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:39:27.664 [DEBUG] [Thread-19840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:39:27.664 [DEBUG] [Thread-19840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:39:27.664 [DEBUG] [Thread-19840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:39:27.664 [DEBUG] [Thread-19840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:39:27.664 [DEBUG] [Thread-19840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:39:27.664 [DEBUG] [Thread-19840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:39:27.664 [DEBUG] [Thread-19840] [transport.py] [_log()] client lang: <none>
2026-04-15T13:39:27.664 [DEBUG] [Thread-19840] [transport.py] [_log()] server lang: <none>
2026-04-15T13:39:27.664 [DEBUG] [Thread-19840] [transport.py] [_log()] kex follows: False
2026-04-15T13:39:27.664 [DEBUG] [Thread-19840] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:39:27.664 [DEBUG] [Thread-19840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:39:27.664 [DEBUG] [Thread-19840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:39:27.665 [DEBUG] [Thread-19840] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:39:27.665 [DEBUG] [Thread-19840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:39:27.665 [DEBUG] [Thread-19840] [transport.py] [_log()] Compression: none
2026-04-15T13:39:27.665 [DEBUG] [Thread-19840] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:39:27.722 [DEBUG] [Thread-19840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:39:27.722 [DEBUG] [Thread-19840] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:39:27.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:39:27.723 [DEBUG] [Thread-19840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:39:27.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:39:27.778 [DEBUG] [Thread-19840] [transport.py] [_log()] userauth is OK
2026-04-15T13:39:27.778 [DEBUG] [Thread-19840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:39:27.778 [DEBUG] [Thread-19840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:39:27.778 [DEBUG] [Thread-19840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:39:27.778 [DEBUG] [Thread-19840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:39:27.802 [INFO] [Thread-19840] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:39:27.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:39:27.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:39:28.640 [DEBUG] [Thread-19840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:39:28.641 [DEBUG] [Thread-19840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:39:28.688 [DEBUG] [Thread-19840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:39:28.688 [DEBUG] [Thread-19840] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:39:28.697 [DEBUG] [Thread-19840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:39:28.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:39:28.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')
2026-04-15T13:39:28.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
2026-04-15T13:39:28.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:39:28.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:39:28.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:39:28.731 [DEBUG] [Thread-19840] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:39:33.221 [DEBUG] [Thread-19842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:39:48.263 [DEBUG] [Thread-19843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:39:56.518 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:39:56.520 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:39:58.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:39:58.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:39:58.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
2026-04-15T13:40:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 39, 48), 8.68, 55.9158, 0.0, 14.539, 14.5004, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:40:00.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:39:48
2026-04-15T13:40:00.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:40:00.898 [DEBUG] [Thread-19844] [transport.py] [_log()] starting thread (client mode): 0xee9033d0
2026-04-15T13:40:00.898 [DEBUG] [Thread-19844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:40:00.918 [DEBUG] [Thread-19844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:40:00.918 [INFO] [Thread-19844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:40:00.921 [DEBUG] [Thread-19844] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:40:00.921 [DEBUG] [Thread-19844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:40:00.921 [DEBUG] [Thread-19844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:40:00.922 [DEBUG] [Thread-19844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:40:00.922 [DEBUG] [Thread-19844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:40:00.922 [DEBUG] [Thread-19844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:40:00.922 [DEBUG] [Thread-19844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:40:00.922 [DEBUG] [Thread-19844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:40:00.922 [DEBUG] [Thread-19844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:40:00.922 [DEBUG] [Thread-19844] [transport.py] [_log()] client lang: <none>
2026-04-15T13:40:00.922 [DEBUG] [Thread-19844] [transport.py] [_log()] server lang: <none>
2026-04-15T13:40:00.922 [DEBUG] [Thread-19844] [transport.py] [_log()] kex follows: False
2026-04-15T13:40:00.922 [DEBUG] [Thread-19844] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:40:00.923 [DEBUG] [Thread-19844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:40:00.923 [DEBUG] [Thread-19844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:40:00.923 [DEBUG] [Thread-19844] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:40:00.923 [DEBUG] [Thread-19844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:40:00.923 [DEBUG] [Thread-19844] [transport.py] [_log()] Compression: none
2026-04-15T13:40:00.923 [DEBUG] [Thread-19844] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:40:00.942 [DEBUG] [Thread-19844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:40:00.943 [DEBUG] [Thread-19844] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:40:00.943 [DEBUG] [Thread-19844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:40:00.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:40:00.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:40:00.945 [DEBUG] [Thread-19844] [transport.py] [_log()] userauth is OK
2026-04-15T13:40:00.945 [DEBUG] [Thread-19844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:40:00.945 [DEBUG] [Thread-19844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:40:00.945 [DEBUG] [Thread-19844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:40:00.945 [DEBUG] [Thread-19844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:40:00.968 [INFO] [Thread-19844] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:40:00.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:40:01.747 [DEBUG] [Thread-19844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:40:01.748 [DEBUG] [Thread-19844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:40:01.748 [DEBUG] [Thread-19844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:40:01.788 [DEBUG] [Thread-19844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:40:01.788 [DEBUG] [Thread-19844] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:40:01.790 [DEBUG] [Thread-19844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:40:01.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:40:01.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:40:01.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:40:01.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:40:01.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:40:01.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:40:01.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:40:01.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:40:01.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:40:01.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.485554 -999.00  +14.10  15.99     62   +7.00 1 1 1 1 1   888    0 6.93 26.50 ----- 16.4 16.0 4.4 27.9 21.4 -26.4 20.1 -25.6 20.2 -23.0 21.5 -28.8
2026-04-15T13:40:01.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:40:01.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:40:01.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.485554
2026-04-15T13:40:01.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:40:01.812 [DEBUG] [Thread-19844] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:40:01.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:40:01.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:40:01.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:40:01.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T13:40:01.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:39:48', tmtdew=8.68, humidity=55.9158, cloud=0.0, wind=14.539, temperature=14.5004, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:39:11.866', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:40:02.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:40:02.071 [DEBUG] [Thread-19847] [transport.py] [_log()] starting thread (client mode): 0xee988880
2026-04-15T13:40:02.072 [DEBUG] [Thread-19847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:40:02.085 [DEBUG] [Thread-19847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:40:02.085 [INFO] [Thread-19847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] client lang: <none>
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] server lang: <none>
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] kex follows: False
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:40:02.093 [DEBUG] [Thread-19847] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:40:02.094 [DEBUG] [Thread-19847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:40:02.094 [DEBUG] [Thread-19847] [transport.py] [_log()] Compression: none
2026-04-15T13:40:02.094 [DEBUG] [Thread-19847] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:40:02.149 [DEBUG] [Thread-19847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:40:02.149 [DEBUG] [Thread-19847] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:40:02.149 [DEBUG] [Thread-19847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:40:02.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:40:02.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:40:02.211 [DEBUG] [Thread-19847] [transport.py] [_log()] userauth is OK
2026-04-15T13:40:02.211 [DEBUG] [Thread-19847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:40:02.211 [DEBUG] [Thread-19847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:40:02.211 [DEBUG] [Thread-19847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:40:02.211 [DEBUG] [Thread-19847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:40:02.228 [INFO] [Thread-19847] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:40:02.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:40:02.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:40:03.041 [DEBUG] [Thread-19847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:40:03.042 [DEBUG] [Thread-19847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:40:03.090 [DEBUG] [Thread-19847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:40:03.090 [DEBUG] [Thread-19847] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:40:03.099 [DEBUG] [Thread-19847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:40:03.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:40:03.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')
2026-04-15T13:40:03.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
2026-04-15T13:40:03.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:40:03.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:40:03.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:40:03.134 [DEBUG] [Thread-19847] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:40:03.296 [DEBUG] [Thread-19849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:40:18.342 [DEBUG] [Thread-19850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:40:22.754 [DEBUG] [Thread-19851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:40:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:40:33.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:40:33.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:40:33.374 [DEBUG] [Thread-19852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:40:34.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 40, 23), 8.20411, 57.4882, 0.0, 20.2216, 14.0002, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:40:34.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:40:23
2026-04-15T13:40:34.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:40:35.284 [DEBUG] [Thread-19853] [transport.py] [_log()] starting thread (client mode): 0xee9e78b0
2026-04-15T13:40:35.284 [DEBUG] [Thread-19853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:40:35.303 [DEBUG] [Thread-19853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:40:35.303 [INFO] [Thread-19853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:40:35.306 [DEBUG] [Thread-19853] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:40:35.307 [DEBUG] [Thread-19853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:40:35.307 [DEBUG] [Thread-19853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:40:35.307 [DEBUG] [Thread-19853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:40:35.307 [DEBUG] [Thread-19853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:40:35.307 [DEBUG] [Thread-19853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:40:35.307 [DEBUG] [Thread-19853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:40:35.307 [DEBUG] [Thread-19853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:40:35.307 [DEBUG] [Thread-19853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:40:35.307 [DEBUG] [Thread-19853] [transport.py] [_log()] client lang: <none>
2026-04-15T13:40:35.307 [DEBUG] [Thread-19853] [transport.py] [_log()] server lang: <none>
2026-04-15T13:40:35.307 [DEBUG] [Thread-19853] [transport.py] [_log()] kex follows: False
2026-04-15T13:40:35.308 [DEBUG] [Thread-19853] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:40:35.308 [DEBUG] [Thread-19853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:40:35.308 [DEBUG] [Thread-19853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:40:35.308 [DEBUG] [Thread-19853] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:40:35.308 [DEBUG] [Thread-19853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:40:35.308 [DEBUG] [Thread-19853] [transport.py] [_log()] Compression: none
2026-04-15T13:40:35.308 [DEBUG] [Thread-19853] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:40:35.325 [DEBUG] [Thread-19853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:40:35.325 [DEBUG] [Thread-19853] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:40:35.326 [DEBUG] [Thread-19853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:40:35.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:40:35.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:40:35.327 [DEBUG] [Thread-19853] [transport.py] [_log()] userauth is OK
2026-04-15T13:40:35.327 [DEBUG] [Thread-19853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:40:35.328 [DEBUG] [Thread-19853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:40:35.328 [DEBUG] [Thread-19853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:40:35.328 [DEBUG] [Thread-19853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:40:35.352 [INFO] [Thread-19853] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:40:35.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:40:38.144 [DEBUG] [Thread-19853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:40:38.144 [DEBUG] [Thread-19853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:40:38.145 [DEBUG] [Thread-19853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:40:38.185 [DEBUG] [Thread-19853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:40:38.185 [DEBUG] [Thread-19853] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:40:38.188 [DEBUG] [Thread-19853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:40:38.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:40:38.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:40:38.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:40:38.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:40:38.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:40:38.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:40:38.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:40:38.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:40:38.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:40:38.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.486249 -999.00  +13.70   8.08     64   +7.10 1 1 1 1 1   888    0 6.91 26.77 ----- 12.3 8.1 6.4 14.7 21.2 -25.9 19.9 -25.6 20.2 -21.9 21.4 -23.0
2026-04-15T13:40:38.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:40:38.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:40:38.207 [DEBUG] [Thread-19853] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:40:38.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.486249
2026-04-15T13:40:38.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:40:38.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:40:38.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:40:38.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:40:38.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T13:40:38.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:40:23', tmtdew=8.20411, humidity=57.4882, cloud=0.0, wind=20.2216, temperature=14.0002, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:40:11.914', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:40:38.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:40:38.466 [DEBUG] [Thread-19855] [transport.py] [_log()] starting thread (client mode): 0xf13c8f10
2026-04-15T13:40:38.466 [DEBUG] [Thread-19855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:40:38.480 [DEBUG] [Thread-19855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:40:38.480 [INFO] [Thread-19855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:40:38.487 [DEBUG] [Thread-19855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:40:38.487 [DEBUG] [Thread-19855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:40:38.487 [DEBUG] [Thread-19855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:40:38.488 [DEBUG] [Thread-19855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:40:38.488 [DEBUG] [Thread-19855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:40:38.488 [DEBUG] [Thread-19855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:40:38.488 [DEBUG] [Thread-19855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:40:38.488 [DEBUG] [Thread-19855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:40:38.488 [DEBUG] [Thread-19855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:40:38.488 [DEBUG] [Thread-19855] [transport.py] [_log()] client lang: <none>
2026-04-15T13:40:38.488 [DEBUG] [Thread-19855] [transport.py] [_log()] server lang: <none>
2026-04-15T13:40:38.488 [DEBUG] [Thread-19855] [transport.py] [_log()] kex follows: False
2026-04-15T13:40:38.488 [DEBUG] [Thread-19855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:40:38.488 [DEBUG] [Thread-19855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:40:38.488 [DEBUG] [Thread-19855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:40:38.489 [DEBUG] [Thread-19855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:40:38.489 [DEBUG] [Thread-19855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:40:38.489 [DEBUG] [Thread-19855] [transport.py] [_log()] Compression: none
2026-04-15T13:40:38.489 [DEBUG] [Thread-19855] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:40:38.545 [DEBUG] [Thread-19855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:40:38.545 [DEBUG] [Thread-19855] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:40:38.546 [DEBUG] [Thread-19855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:40:38.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:40:38.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:40:38.607 [DEBUG] [Thread-19855] [transport.py] [_log()] userauth is OK
2026-04-15T13:40:38.607 [DEBUG] [Thread-19855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:40:38.607 [DEBUG] [Thread-19855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:40:38.607 [DEBUG] [Thread-19855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:40:38.607 [DEBUG] [Thread-19855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:40:38.634 [INFO] [Thread-19855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:40:38.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:40:38.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:40:39.506 [DEBUG] [Thread-19855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:40:39.506 [DEBUG] [Thread-19855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:40:39.554 [DEBUG] [Thread-19855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:40:39.554 [DEBUG] [Thread-19855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:40:39.563 [DEBUG] [Thread-19855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:40:39.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:40:39.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')
2026-04-15T13:40:39.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
2026-04-15T13:40:39.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:40:39.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:40:39.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:40:39.598 [DEBUG] [Thread-19855] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:40:48.406 [DEBUG] [Thread-19857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:40:56.659 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:40:56.660 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:41:03.454 [DEBUG] [Thread-19858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:41:09.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:41:09.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:41:09.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
2026-04-15T13:41:10.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 40, 59), 8.31065, 57.4246, 0.0, 21.0323, 14.1323, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:41:10.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:40:59
2026-04-15T13:41:11.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:41:11.777 [DEBUG] [Thread-19859] [transport.py] [_log()] starting thread (client mode): 0xf13ca620
2026-04-15T13:41:11.777 [DEBUG] [Thread-19859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:41:11.797 [DEBUG] [Thread-19859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:41:11.797 [INFO] [Thread-19859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:41:11.801 [DEBUG] [Thread-19859] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:41:11.801 [DEBUG] [Thread-19859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:41:11.801 [DEBUG] [Thread-19859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:41:11.801 [DEBUG] [Thread-19859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:41:11.801 [DEBUG] [Thread-19859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:41:11.801 [DEBUG] [Thread-19859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:41:11.801 [DEBUG] [Thread-19859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:41:11.801 [DEBUG] [Thread-19859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:41:11.801 [DEBUG] [Thread-19859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:41:11.802 [DEBUG] [Thread-19859] [transport.py] [_log()] client lang: <none>
2026-04-15T13:41:11.802 [DEBUG] [Thread-19859] [transport.py] [_log()] server lang: <none>
2026-04-15T13:41:11.802 [DEBUG] [Thread-19859] [transport.py] [_log()] kex follows: False
2026-04-15T13:41:11.802 [DEBUG] [Thread-19859] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:41:11.802 [DEBUG] [Thread-19859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:41:11.802 [DEBUG] [Thread-19859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:41:11.802 [DEBUG] [Thread-19859] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:41:11.802 [DEBUG] [Thread-19859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:41:11.802 [DEBUG] [Thread-19859] [transport.py] [_log()] Compression: none
2026-04-15T13:41:11.802 [DEBUG] [Thread-19859] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:41:11.816 [DEBUG] [Thread-19859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:41:11.816 [DEBUG] [Thread-19859] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:41:11.817 [DEBUG] [Thread-19859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:41:11.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:41:11.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:41:11.818 [DEBUG] [Thread-19859] [transport.py] [_log()] userauth is OK
2026-04-15T13:41:11.818 [DEBUG] [Thread-19859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:41:11.818 [DEBUG] [Thread-19859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:41:11.818 [DEBUG] [Thread-19859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:41:11.818 [DEBUG] [Thread-19859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:41:11.833 [INFO] [Thread-19859] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:41:11.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:41:12.438 [DEBUG] [Thread-19859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:41:12.439 [DEBUG] [Thread-19859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:41:12.439 [DEBUG] [Thread-19859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:41:12.480 [DEBUG] [Thread-19859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:41:12.480 [DEBUG] [Thread-19859] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:41:12.482 [DEBUG] [Thread-19859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:41:12.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:41:12.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:41:12.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:41:12.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:41:12.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:41:12.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:41:12.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:41:12.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:41:12.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:41:12.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.486596 -999.00  +14.20  17.81     64   +7.60 1 2 1 1 1   888    0 6.78 24.67 ----- 21.6 17.8 304.0 22.5 21.2 -25.4 19.9 -24.6 20.3 -21.3 21.5 -23.5
2026-04-15T13:41:12.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:41:12.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:41:12.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.486596
2026-04-15T13:41:12.509 [DEBUG] [Thread-19859] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:41:12.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:41:12.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:41:12.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:41:12.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:41:12.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:41:12.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:40:59', tmtdew=8.31065, humidity=57.4246, cloud=0.0, wind=21.0323, temperature=14.1323, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:40:41.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:41:12.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:41:12.762 [DEBUG] [Thread-19862] [transport.py] [_log()] starting thread (client mode): 0xee9e5c60
2026-04-15T13:41:12.762 [DEBUG] [Thread-19862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:41:12.781 [DEBUG] [Thread-19862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:41:12.781 [INFO] [Thread-19862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:41:12.789 [DEBUG] [Thread-19862] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:41:12.789 [DEBUG] [Thread-19862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:41:12.789 [DEBUG] [Thread-19862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:41:12.789 [DEBUG] [Thread-19862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:41:12.789 [DEBUG] [Thread-19862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:41:12.789 [DEBUG] [Thread-19862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:41:12.789 [DEBUG] [Thread-19862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:41:12.789 [DEBUG] [Thread-19862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:41:12.789 [DEBUG] [Thread-19862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:41:12.789 [DEBUG] [Thread-19862] [transport.py] [_log()] client lang: <none>
2026-04-15T13:41:12.789 [DEBUG] [Thread-19862] [transport.py] [_log()] server lang: <none>
2026-04-15T13:41:12.790 [DEBUG] [Thread-19862] [transport.py] [_log()] kex follows: False
2026-04-15T13:41:12.790 [DEBUG] [Thread-19862] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:41:12.790 [DEBUG] [Thread-19862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:41:12.790 [DEBUG] [Thread-19862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:41:12.790 [DEBUG] [Thread-19862] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:41:12.790 [DEBUG] [Thread-19862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:41:12.790 [DEBUG] [Thread-19862] [transport.py] [_log()] Compression: none
2026-04-15T13:41:12.790 [DEBUG] [Thread-19862] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:41:12.852 [DEBUG] [Thread-19862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:41:12.852 [DEBUG] [Thread-19862] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:41:12.853 [DEBUG] [Thread-19862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:41:12.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:41:12.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:41:12.914 [DEBUG] [Thread-19862] [transport.py] [_log()] userauth is OK
2026-04-15T13:41:12.914 [DEBUG] [Thread-19862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:41:12.914 [DEBUG] [Thread-19862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:41:12.914 [DEBUG] [Thread-19862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:41:12.914 [DEBUG] [Thread-19862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:41:12.932 [INFO] [Thread-19862] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:41:12.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:41:12.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:41:13.849 [DEBUG] [Thread-19862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:41:13.850 [DEBUG] [Thread-19862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:41:13.897 [DEBUG] [Thread-19862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:41:13.898 [DEBUG] [Thread-19862] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:41:13.907 [DEBUG] [Thread-19862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:41:13.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:41:13.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')
2026-04-15T13:41:13.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
2026-04-15T13:41:13.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:41:13.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:41:13.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:41:13.942 [DEBUG] [Thread-19862] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:41:18.482 [DEBUG] [Thread-19864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:41:22.829 [DEBUG] [Thread-19865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:41:33.519 [DEBUG] [Thread-19866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:41:43.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:41:43.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:41:43.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
2026-04-15T13:41:45.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 41, 35), 8.94633, 54.9874, 0.0, 19.6193, 14.8646, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:41:45.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:41:35
2026-04-15T13:41:45.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:41:46.113 [DEBUG] [Thread-19867] [transport.py] [_log()] starting thread (client mode): 0xf1364640
2026-04-15T13:41:46.113 [DEBUG] [Thread-19867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:41:46.126 [DEBUG] [Thread-19867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:41:46.126 [INFO] [Thread-19867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:41:46.127 [DEBUG] [Thread-19867] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:41:46.127 [DEBUG] [Thread-19867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:41:46.127 [DEBUG] [Thread-19867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:41:46.127 [DEBUG] [Thread-19867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:41:46.127 [DEBUG] [Thread-19867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:41:46.127 [DEBUG] [Thread-19867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:41:46.128 [DEBUG] [Thread-19867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:41:46.128 [DEBUG] [Thread-19867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:41:46.128 [DEBUG] [Thread-19867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:41:46.128 [DEBUG] [Thread-19867] [transport.py] [_log()] client lang: <none>
2026-04-15T13:41:46.128 [DEBUG] [Thread-19867] [transport.py] [_log()] server lang: <none>
2026-04-15T13:41:46.128 [DEBUG] [Thread-19867] [transport.py] [_log()] kex follows: False
2026-04-15T13:41:46.128 [DEBUG] [Thread-19867] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:41:46.128 [DEBUG] [Thread-19867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:41:46.128 [DEBUG] [Thread-19867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:41:46.128 [DEBUG] [Thread-19867] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:41:46.128 [DEBUG] [Thread-19867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:41:46.129 [DEBUG] [Thread-19867] [transport.py] [_log()] Compression: none
2026-04-15T13:41:46.129 [DEBUG] [Thread-19867] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:41:46.137 [DEBUG] [Thread-19867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:41:46.137 [DEBUG] [Thread-19867] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:41:46.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:41:46.137 [DEBUG] [Thread-19867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:41:46.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:41:46.139 [DEBUG] [Thread-19867] [transport.py] [_log()] userauth is OK
2026-04-15T13:41:46.139 [DEBUG] [Thread-19867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:41:46.139 [DEBUG] [Thread-19867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:41:46.139 [DEBUG] [Thread-19867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:41:46.139 [DEBUG] [Thread-19867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:41:46.173 [INFO] [Thread-19867] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:41:46.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:41:46.744 [DEBUG] [Thread-19867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:41:46.745 [DEBUG] [Thread-19867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:41:46.745 [DEBUG] [Thread-19867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:41:46.786 [DEBUG] [Thread-19867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:41:46.786 [DEBUG] [Thread-19867] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:41:46.788 [DEBUG] [Thread-19867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:41:46.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:41:46.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:41:46.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:41:46.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:41:46.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:41:46.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:41:46.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:41:46.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:41:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:41:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.487290 -999.00  +14.20  23.00     63   +7.20 1 1 1 1 1   888    0 6.75 19.16 ----- 23.6 23.0 337.8 26.1 21.1 -26.3 20.0 -25.1 20.3 -21.3 21.6 -23.3
2026-04-15T13:41:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:41:46.813 [DEBUG] [Thread-19867] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:41:46.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:41:46.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.487290
2026-04-15T13:41:46.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:41:46.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:41:46.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:41:46.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:41:46.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T13:41:46.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:41:35', tmtdew=8.94633, humidity=54.9874, cloud=0.0, wind=19.6193, temperature=14.8646, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:41:41.856', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:41:47.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:41:47.072 [DEBUG] [Thread-19870] [transport.py] [_log()] starting thread (client mode): 0xee9e7c70
2026-04-15T13:41:47.072 [DEBUG] [Thread-19870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:41:47.087 [DEBUG] [Thread-19870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:41:47.087 [INFO] [Thread-19870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:41:47.097 [DEBUG] [Thread-19870] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:41:47.097 [DEBUG] [Thread-19870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:41:47.098 [DEBUG] [Thread-19870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:41:47.098 [DEBUG] [Thread-19870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:41:47.098 [DEBUG] [Thread-19870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:41:47.098 [DEBUG] [Thread-19870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:41:47.098 [DEBUG] [Thread-19870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:41:47.098 [DEBUG] [Thread-19870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:41:47.098 [DEBUG] [Thread-19870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:41:47.098 [DEBUG] [Thread-19870] [transport.py] [_log()] client lang: <none>
2026-04-15T13:41:47.098 [DEBUG] [Thread-19870] [transport.py] [_log()] server lang: <none>
2026-04-15T13:41:47.098 [DEBUG] [Thread-19870] [transport.py] [_log()] kex follows: False
2026-04-15T13:41:47.098 [DEBUG] [Thread-19870] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:41:47.098 [DEBUG] [Thread-19870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:41:47.099 [DEBUG] [Thread-19870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:41:47.099 [DEBUG] [Thread-19870] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:41:47.099 [DEBUG] [Thread-19870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:41:47.099 [DEBUG] [Thread-19870] [transport.py] [_log()] Compression: none
2026-04-15T13:41:47.099 [DEBUG] [Thread-19870] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:41:47.154 [DEBUG] [Thread-19870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:41:47.154 [DEBUG] [Thread-19870] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:41:47.155 [DEBUG] [Thread-19870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:41:47.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:41:47.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:41:47.210 [DEBUG] [Thread-19870] [transport.py] [_log()] userauth is OK
2026-04-15T13:41:47.210 [DEBUG] [Thread-19870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:41:47.210 [DEBUG] [Thread-19870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:41:47.210 [DEBUG] [Thread-19870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:41:47.210 [DEBUG] [Thread-19870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:41:47.228 [INFO] [Thread-19870] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:41:47.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:41:47.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:41:48.061 [DEBUG] [Thread-19870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:41:48.062 [DEBUG] [Thread-19870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:41:48.109 [DEBUG] [Thread-19870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:41:48.109 [DEBUG] [Thread-19870] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:41:48.118 [DEBUG] [Thread-19870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:41:48.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:41:48.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')
2026-04-15T13:41:48.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
2026-04-15T13:41:48.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:41:48.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:41:48.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:41:48.153 [DEBUG] [Thread-19870] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:41:48.550 [DEBUG] [Thread-19872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:41:56.801 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:41:56.803 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:42:03.590 [DEBUG] [Thread-19873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:42:18.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:42:18.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:42:18.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
2026-04-15T13:42:18.622 [DEBUG] [Thread-19874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:42:19.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 42, 11), 8.30851, 56.9242, 0.0, 17.3815, 14.0487, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:42:19.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:42:11
2026-04-15T13:42:19.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:42:20.260 [DEBUG] [Thread-19875] [transport.py] [_log()] starting thread (client mode): 0xee904880
2026-04-15T13:42:20.261 [DEBUG] [Thread-19875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:42:20.280 [DEBUG] [Thread-19875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:42:20.281 [INFO] [Thread-19875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:42:20.284 [DEBUG] [Thread-19875] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:42:20.284 [DEBUG] [Thread-19875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:42:20.284 [DEBUG] [Thread-19875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:42:20.284 [DEBUG] [Thread-19875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:42:20.284 [DEBUG] [Thread-19875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:42:20.284 [DEBUG] [Thread-19875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:42:20.284 [DEBUG] [Thread-19875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:42:20.284 [DEBUG] [Thread-19875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:42:20.284 [DEBUG] [Thread-19875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:42:20.284 [DEBUG] [Thread-19875] [transport.py] [_log()] client lang: <none>
2026-04-15T13:42:20.285 [DEBUG] [Thread-19875] [transport.py] [_log()] server lang: <none>
2026-04-15T13:42:20.285 [DEBUG] [Thread-19875] [transport.py] [_log()] kex follows: False
2026-04-15T13:42:20.285 [DEBUG] [Thread-19875] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:42:20.285 [DEBUG] [Thread-19875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:42:20.285 [DEBUG] [Thread-19875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:42:20.285 [DEBUG] [Thread-19875] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:42:20.285 [DEBUG] [Thread-19875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:42:20.285 [DEBUG] [Thread-19875] [transport.py] [_log()] Compression: none
2026-04-15T13:42:20.285 [DEBUG] [Thread-19875] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:42:20.302 [DEBUG] [Thread-19875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:42:20.303 [DEBUG] [Thread-19875] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:42:20.303 [DEBUG] [Thread-19875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:42:20.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:42:20.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:42:20.304 [DEBUG] [Thread-19875] [transport.py] [_log()] userauth is OK
2026-04-15T13:42:20.304 [DEBUG] [Thread-19875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:42:20.304 [DEBUG] [Thread-19875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:42:20.304 [DEBUG] [Thread-19875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:42:20.304 [DEBUG] [Thread-19875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:42:20.323 [INFO] [Thread-19875] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:42:20.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:42:20.997 [DEBUG] [Thread-19875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:42:20.997 [DEBUG] [Thread-19875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:42:20.998 [DEBUG] [Thread-19875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:42:21.038 [DEBUG] [Thread-19875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:42:21.038 [DEBUG] [Thread-19875] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:42:21.041 [DEBUG] [Thread-19875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:42:21.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:42:21.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:42:21.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:42:21.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:42:21.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:42:21.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:42:21.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:42:21.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:42:21.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:42:21.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.487637 -999.00  +14.00  16.21     64   +7.40 1 1 1 1 1   888    0 6.86 20.24 ----- 16.8 16.2 330.6 28.0 21.1 -27.1 19.9 -26.2 20.2 -20.9 21.5 -23.6
2026-04-15T13:42:21.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:42:21.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:42:21.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.487637
2026-04-15T13:42:21.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:42:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:42:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:42:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:42:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T13:42:21.068 [DEBUG] [Thread-19875] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:42:21.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:42:11', tmtdew=8.30851, humidity=56.9242, cloud=0.0, wind=17.3815, temperature=14.0487, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:42:11.837', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:42:21.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:42:21.323 [DEBUG] [Thread-19878] [transport.py] [_log()] starting thread (client mode): 0xee98fb50
2026-04-15T13:42:21.323 [DEBUG] [Thread-19878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:42:21.337 [DEBUG] [Thread-19878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:42:21.338 [INFO] [Thread-19878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:42:21.345 [DEBUG] [Thread-19878] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:42:21.345 [DEBUG] [Thread-19878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:42:21.345 [DEBUG] [Thread-19878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:42:21.345 [DEBUG] [Thread-19878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:42:21.345 [DEBUG] [Thread-19878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:42:21.345 [DEBUG] [Thread-19878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:42:21.345 [DEBUG] [Thread-19878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:42:21.345 [DEBUG] [Thread-19878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:42:21.346 [DEBUG] [Thread-19878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:42:21.346 [DEBUG] [Thread-19878] [transport.py] [_log()] client lang: <none>
2026-04-15T13:42:21.346 [DEBUG] [Thread-19878] [transport.py] [_log()] server lang: <none>
2026-04-15T13:42:21.346 [DEBUG] [Thread-19878] [transport.py] [_log()] kex follows: False
2026-04-15T13:42:21.346 [DEBUG] [Thread-19878] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:42:21.346 [DEBUG] [Thread-19878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:42:21.346 [DEBUG] [Thread-19878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:42:21.346 [DEBUG] [Thread-19878] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:42:21.346 [DEBUG] [Thread-19878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:42:21.346 [DEBUG] [Thread-19878] [transport.py] [_log()] Compression: none
2026-04-15T13:42:21.346 [DEBUG] [Thread-19878] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:42:21.401 [DEBUG] [Thread-19878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:42:21.401 [DEBUG] [Thread-19878] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:42:21.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:42:21.402 [DEBUG] [Thread-19878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:42:21.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:42:21.458 [DEBUG] [Thread-19878] [transport.py] [_log()] userauth is OK
2026-04-15T13:42:21.458 [DEBUG] [Thread-19878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:42:21.458 [DEBUG] [Thread-19878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:42:21.458 [DEBUG] [Thread-19878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:42:21.458 [DEBUG] [Thread-19878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:42:21.476 [INFO] [Thread-19878] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:42:21.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:42:21.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:42:22.317 [DEBUG] [Thread-19878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:42:22.317 [DEBUG] [Thread-19878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:42:22.365 [DEBUG] [Thread-19878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:42:22.365 [DEBUG] [Thread-19878] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:42:22.374 [DEBUG] [Thread-19878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:42:22.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:42:22.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')
2026-04-15T13:42:22.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
2026-04-15T13:42:22.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:42:22.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:42:22.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:42:22.415 [DEBUG] [Thread-19878] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:42:22.903 [DEBUG] [Thread-19880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:42:33.653 [DEBUG] [Thread-19881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:42:48.698 [DEBUG] [Thread-19882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:42:52.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:42:52.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:42:52.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
2026-04-15T13:42:53.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 42, 11), 8.30851, 56.9242, 0.0, 17.3815, 14.0487, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:42:53.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:42:11
2026-04-15T13:42:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:42:54.559 [DEBUG] [Thread-19883] [transport.py] [_log()] starting thread (client mode): 0xee9064a0
2026-04-15T13:42:54.560 [DEBUG] [Thread-19883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:42:54.579 [DEBUG] [Thread-19883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:42:54.579 [INFO] [Thread-19883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:42:54.582 [DEBUG] [Thread-19883] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:42:54.582 [DEBUG] [Thread-19883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:42:54.582 [DEBUG] [Thread-19883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:42:54.582 [DEBUG] [Thread-19883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:42:54.582 [DEBUG] [Thread-19883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:42:54.583 [DEBUG] [Thread-19883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:42:54.583 [DEBUG] [Thread-19883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:42:54.583 [DEBUG] [Thread-19883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:42:54.583 [DEBUG] [Thread-19883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:42:54.583 [DEBUG] [Thread-19883] [transport.py] [_log()] client lang: <none>
2026-04-15T13:42:54.583 [DEBUG] [Thread-19883] [transport.py] [_log()] server lang: <none>
2026-04-15T13:42:54.583 [DEBUG] [Thread-19883] [transport.py] [_log()] kex follows: False
2026-04-15T13:42:54.583 [DEBUG] [Thread-19883] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:42:54.583 [DEBUG] [Thread-19883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:42:54.583 [DEBUG] [Thread-19883] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:42:54.583 [DEBUG] [Thread-19883] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:42:54.583 [DEBUG] [Thread-19883] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:42:54.584 [DEBUG] [Thread-19883] [transport.py] [_log()] Compression: none
2026-04-15T13:42:54.584 [DEBUG] [Thread-19883] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:42:54.599 [DEBUG] [Thread-19883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:42:54.600 [DEBUG] [Thread-19883] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:42:54.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:42:54.600 [DEBUG] [Thread-19883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:42:54.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:42:54.645 [DEBUG] [Thread-19883] [transport.py] [_log()] userauth is OK
2026-04-15T13:42:54.645 [DEBUG] [Thread-19883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:42:54.645 [DEBUG] [Thread-19883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:42:54.645 [DEBUG] [Thread-19883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:42:54.645 [DEBUG] [Thread-19883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:42:54.680 [INFO] [Thread-19883] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:42:54.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:42:55.295 [DEBUG] [Thread-19883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:42:55.295 [DEBUG] [Thread-19883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:42:55.296 [DEBUG] [Thread-19883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:42:55.336 [DEBUG] [Thread-19883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:42:55.336 [DEBUG] [Thread-19883] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:42:55.339 [DEBUG] [Thread-19883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:42:55.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:42:55.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:42:55.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:42:55.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:42:55.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:42:55.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:42:55.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:42:55.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:42:55.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:42:55.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.487985 -999.00  +14.10  15.03     64   +7.50 1 1 1 1 1   888    0 6.81 21.00 ----- 17.1 15.0 322.8 24.0 21.2 -25.9 20.0 -25.1 20.2 -21.8 21.5 -23.1
2026-04-15T13:42:55.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:42:55.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:42:55.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.487985
2026-04-15T13:42:55.362 [DEBUG] [Thread-19883] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:42:55.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:42:55.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:42:55.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:42:55.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:42:55.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T13:42:55.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:42:11', tmtdew=8.30851, humidity=56.9242, cloud=0.0, wind=17.3815, temperature=14.0487, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:42:41.904', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:42:55.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:42:55.623 [DEBUG] [Thread-19886] [transport.py] [_log()] starting thread (client mode): 0xf13c86a0
2026-04-15T13:42:55.623 [DEBUG] [Thread-19886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:42:55.637 [DEBUG] [Thread-19886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:42:55.637 [INFO] [Thread-19886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] client lang: <none>
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] server lang: <none>
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] kex follows: False
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:42:55.645 [DEBUG] [Thread-19886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:42:55.646 [DEBUG] [Thread-19886] [transport.py] [_log()] Compression: none
2026-04-15T13:42:55.646 [DEBUG] [Thread-19886] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:42:55.701 [DEBUG] [Thread-19886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:42:55.702 [DEBUG] [Thread-19886] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:42:55.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:42:55.703 [DEBUG] [Thread-19886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:42:55.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:42:55.758 [DEBUG] [Thread-19886] [transport.py] [_log()] userauth is OK
2026-04-15T13:42:55.758 [DEBUG] [Thread-19886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:42:55.759 [DEBUG] [Thread-19886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:42:55.759 [DEBUG] [Thread-19886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:42:55.759 [DEBUG] [Thread-19886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:42:55.786 [INFO] [Thread-19886] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:42:55.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:42:55.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:42:56.612 [DEBUG] [Thread-19886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:42:56.613 [DEBUG] [Thread-19886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:42:56.660 [DEBUG] [Thread-19886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:42:56.660 [DEBUG] [Thread-19886] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:42:56.669 [DEBUG] [Thread-19886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:42:56.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:42:56.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')
2026-04-15T13:42:56.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
2026-04-15T13:42:56.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:42:56.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:42:56.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:42:56.704 [DEBUG] [Thread-19886] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:42:56.944 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:42:56.945 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:43:03.730 [DEBUG] [Thread-19888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:43:18.772 [DEBUG] [Thread-19889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:43:23.015 [DEBUG] [Thread-19890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:43:26.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:43:26.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:43:26.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
2026-04-15T13:43:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 42, 46), 8.63566, 56.1462, 0.0, 11.1521, 14.7305, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:43:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:42:46
2026-04-15T13:43:28.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:43:28.989 [DEBUG] [Thread-19891] [transport.py] [_log()] starting thread (client mode): 0xee9067a0
2026-04-15T13:43:28.990 [DEBUG] [Thread-19891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:43:29.009 [DEBUG] [Thread-19891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:43:29.009 [INFO] [Thread-19891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:43:29.012 [DEBUG] [Thread-19891] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:43:29.012 [DEBUG] [Thread-19891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:43:29.013 [DEBUG] [Thread-19891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:43:29.013 [DEBUG] [Thread-19891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:43:29.013 [DEBUG] [Thread-19891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:43:29.013 [DEBUG] [Thread-19891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:43:29.013 [DEBUG] [Thread-19891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:43:29.013 [DEBUG] [Thread-19891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:43:29.013 [DEBUG] [Thread-19891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:43:29.013 [DEBUG] [Thread-19891] [transport.py] [_log()] client lang: <none>
2026-04-15T13:43:29.013 [DEBUG] [Thread-19891] [transport.py] [_log()] server lang: <none>
2026-04-15T13:43:29.013 [DEBUG] [Thread-19891] [transport.py] [_log()] kex follows: False
2026-04-15T13:43:29.013 [DEBUG] [Thread-19891] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:43:29.013 [DEBUG] [Thread-19891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:43:29.014 [DEBUG] [Thread-19891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:43:29.014 [DEBUG] [Thread-19891] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:43:29.014 [DEBUG] [Thread-19891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:43:29.014 [DEBUG] [Thread-19891] [transport.py] [_log()] Compression: none
2026-04-15T13:43:29.014 [DEBUG] [Thread-19891] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:43:29.030 [DEBUG] [Thread-19891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:43:29.030 [DEBUG] [Thread-19891] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:43:29.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:43:29.031 [DEBUG] [Thread-19891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:43:29.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:43:29.032 [DEBUG] [Thread-19891] [transport.py] [_log()] userauth is OK
2026-04-15T13:43:29.032 [DEBUG] [Thread-19891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:43:29.032 [DEBUG] [Thread-19891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:43:29.032 [DEBUG] [Thread-19891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:43:29.032 [DEBUG] [Thread-19891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:43:29.068 [INFO] [Thread-19891] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:43:29.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:43:29.703 [DEBUG] [Thread-19891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:43:29.703 [DEBUG] [Thread-19891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:43:29.703 [DEBUG] [Thread-19891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:43:29.744 [DEBUG] [Thread-19891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:43:29.744 [DEBUG] [Thread-19891] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:43:29.746 [DEBUG] [Thread-19891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:43:29.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:43:29.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:43:29.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:43:29.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:43:29.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:43:29.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:43:29.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:43:29.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:43:29.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:43:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.488332 -999.00  +14.20  27.53     64   +7.60 1 2 1 1 1   888    0 6.90 22.30 ----- 26.6 27.5 329.2 32.7 21.1 -27.0 19.9 -25.5 20.2 -20.5 21.5 -23.3
2026-04-15T13:43:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:43:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:43:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.488332
2026-04-15T13:43:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:43:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:43:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:43:29.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:43:29.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:43:29.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:42:46', tmtdew=8.63566, humidity=56.1462, cloud=0.0, wind=11.1521, temperature=14.7305, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:43:11.885', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:43:29.765 [DEBUG] [Thread-19891] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:43:29.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:43:29.978 [DEBUG] [Thread-19894] [transport.py] [_log()] starting thread (client mode): 0xf1365660
2026-04-15T13:43:29.978 [DEBUG] [Thread-19894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:43:29.993 [DEBUG] [Thread-19894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:43:29.993 [INFO] [Thread-19894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:43:30.000 [DEBUG] [Thread-19894] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:43:30.000 [DEBUG] [Thread-19894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:43:30.000 [DEBUG] [Thread-19894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:43:30.000 [DEBUG] [Thread-19894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:43:30.000 [DEBUG] [Thread-19894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:43:30.000 [DEBUG] [Thread-19894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:43:30.000 [DEBUG] [Thread-19894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:43:30.000 [DEBUG] [Thread-19894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:43:30.000 [DEBUG] [Thread-19894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:43:30.000 [DEBUG] [Thread-19894] [transport.py] [_log()] client lang: <none>
2026-04-15T13:43:30.000 [DEBUG] [Thread-19894] [transport.py] [_log()] server lang: <none>
2026-04-15T13:43:30.000 [DEBUG] [Thread-19894] [transport.py] [_log()] kex follows: False
2026-04-15T13:43:30.000 [DEBUG] [Thread-19894] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:43:30.001 [DEBUG] [Thread-19894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:43:30.001 [DEBUG] [Thread-19894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:43:30.001 [DEBUG] [Thread-19894] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:43:30.001 [DEBUG] [Thread-19894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:43:30.001 [DEBUG] [Thread-19894] [transport.py] [_log()] Compression: none
2026-04-15T13:43:30.001 [DEBUG] [Thread-19894] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:43:30.057 [DEBUG] [Thread-19894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:43:30.057 [DEBUG] [Thread-19894] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:43:30.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:43:30.057 [DEBUG] [Thread-19894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:43:30.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:43:30.114 [DEBUG] [Thread-19894] [transport.py] [_log()] userauth is OK
2026-04-15T13:43:30.115 [DEBUG] [Thread-19894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:43:30.115 [DEBUG] [Thread-19894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:43:30.115 [DEBUG] [Thread-19894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:43:30.115 [DEBUG] [Thread-19894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:43:30.139 [INFO] [Thread-19894] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:43:30.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:43:30.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:43:30.980 [DEBUG] [Thread-19894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:43:30.980 [DEBUG] [Thread-19894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:43:31.029 [DEBUG] [Thread-19894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:43:31.029 [DEBUG] [Thread-19894] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:43:31.038 [DEBUG] [Thread-19894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:43:31.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:43:31.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')
2026-04-15T13:43: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') -> 00000000
2026-04-15T13:43:31.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:43:31.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:43:31.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:43:31.073 [DEBUG] [Thread-19894] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:43:33.803 [DEBUG] [Thread-19896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:43:48.847 [DEBUG] [Thread-19897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:43:57.085 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:43:57.086 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:44:01.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:44:01.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:44:01.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
2026-04-15T13:44:02.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 43, 22), 8.13268, 58.2222, 0.0, 17.5388, 14.065, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:44:02.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:43:22
2026-04-15T13:44:02.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:44:03.337 [DEBUG] [Thread-19898] [transport.py] [_log()] starting thread (client mode): 0xf13cbc10
2026-04-15T13:44:03.338 [DEBUG] [Thread-19898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:44:03.357 [DEBUG] [Thread-19898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:44:03.357 [INFO] [Thread-19898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:44:03.360 [DEBUG] [Thread-19898] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:44:03.361 [DEBUG] [Thread-19898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:44:03.361 [DEBUG] [Thread-19898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:44:03.361 [DEBUG] [Thread-19898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:44:03.361 [DEBUG] [Thread-19898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:44:03.361 [DEBUG] [Thread-19898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:44:03.361 [DEBUG] [Thread-19898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:44:03.361 [DEBUG] [Thread-19898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:44:03.361 [DEBUG] [Thread-19898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:44:03.361 [DEBUG] [Thread-19898] [transport.py] [_log()] client lang: <none>
2026-04-15T13:44:03.361 [DEBUG] [Thread-19898] [transport.py] [_log()] server lang: <none>
2026-04-15T13:44:03.361 [DEBUG] [Thread-19898] [transport.py] [_log()] kex follows: False
2026-04-15T13:44:03.361 [DEBUG] [Thread-19898] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:44:03.362 [DEBUG] [Thread-19898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:44:03.362 [DEBUG] [Thread-19898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:44:03.362 [DEBUG] [Thread-19898] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:44:03.362 [DEBUG] [Thread-19898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:44:03.362 [DEBUG] [Thread-19898] [transport.py] [_log()] Compression: none
2026-04-15T13:44:03.362 [DEBUG] [Thread-19898] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:44:03.379 [DEBUG] [Thread-19898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:44:03.379 [DEBUG] [Thread-19898] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:44:03.380 [DEBUG] [Thread-19898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:44:03.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:44:03.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:44:03.381 [DEBUG] [Thread-19898] [transport.py] [_log()] userauth is OK
2026-04-15T13:44:03.381 [DEBUG] [Thread-19898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:44:03.381 [DEBUG] [Thread-19898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:44:03.381 [DEBUG] [Thread-19898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:44:03.381 [DEBUG] [Thread-19898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:44:03.406 [INFO] [Thread-19898] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:44:03.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:44:03.877 [DEBUG] [Thread-19900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:44:04.018 [DEBUG] [Thread-19898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:44:04.019 [DEBUG] [Thread-19898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:44:04.019 [DEBUG] [Thread-19898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:44:04.059 [DEBUG] [Thread-19898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:44:04.060 [DEBUG] [Thread-19898] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:44:04.061 [DEBUG] [Thread-19898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:44:04.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:44:04.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:44:04.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:44:04.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:44:04.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:44:04.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:44:04.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:44:04.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:44:04.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:44:04.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.488679 -999.00  +14.10  18.50     65   +7.70 1 2 1 1 1   888    0 6.95 25.23 ----- 24.2 18.5 322.5 37.3 21.1 -25.5 19.9 -24.8 20.3 -20.7 21.6 -23.2
2026-04-15T13:44:04.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:44:04.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:44:04.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.488679
2026-04-15T13:44:04.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:44:04.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:44:04.074 [DEBUG] [Thread-19898] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:44:04.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:44:04.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:44:04.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:44:04.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:43:22', tmtdew=8.13268, humidity=58.2222, cloud=0.0, wind=17.5388, temperature=14.065, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:43:41.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:44:04.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:44:04.291 [DEBUG] [Thread-19902] [transport.py] [_log()] starting thread (client mode): 0xee904f70
2026-04-15T13:44:04.292 [DEBUG] [Thread-19902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:44:04.313 [DEBUG] [Thread-19902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:44:04.313 [INFO] [Thread-19902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:44:04.320 [DEBUG] [Thread-19902] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:44:04.321 [DEBUG] [Thread-19902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:44:04.321 [DEBUG] [Thread-19902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:44:04.321 [DEBUG] [Thread-19902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:44:04.321 [DEBUG] [Thread-19902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:44:04.321 [DEBUG] [Thread-19902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:44:04.321 [DEBUG] [Thread-19902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:44:04.321 [DEBUG] [Thread-19902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:44:04.321 [DEBUG] [Thread-19902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:44:04.321 [DEBUG] [Thread-19902] [transport.py] [_log()] client lang: <none>
2026-04-15T13:44:04.321 [DEBUG] [Thread-19902] [transport.py] [_log()] server lang: <none>
2026-04-15T13:44:04.321 [DEBUG] [Thread-19902] [transport.py] [_log()] kex follows: False
2026-04-15T13:44:04.322 [DEBUG] [Thread-19902] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:44:04.322 [DEBUG] [Thread-19902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:44:04.322 [DEBUG] [Thread-19902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:44:04.322 [DEBUG] [Thread-19902] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:44:04.322 [DEBUG] [Thread-19902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:44:04.322 [DEBUG] [Thread-19902] [transport.py] [_log()] Compression: none
2026-04-15T13:44:04.322 [DEBUG] [Thread-19902] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:44:04.378 [DEBUG] [Thread-19902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:44:04.378 [DEBUG] [Thread-19902] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:44:04.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:44:04.379 [DEBUG] [Thread-19902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:44:04.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:44:04.438 [DEBUG] [Thread-19902] [transport.py] [_log()] userauth is OK
2026-04-15T13:44:04.438 [DEBUG] [Thread-19902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:44:04.439 [DEBUG] [Thread-19902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:44:04.439 [DEBUG] [Thread-19902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:44:04.439 [DEBUG] [Thread-19902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:44:04.465 [INFO] [Thread-19902] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:44:04.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:44:04.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:44:05.280 [DEBUG] [Thread-19902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:44:05.280 [DEBUG] [Thread-19902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:44:05.328 [DEBUG] [Thread-19902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:44:05.328 [DEBUG] [Thread-19902] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:44:05.337 [DEBUG] [Thread-19902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:44:05.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:44:05.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')
2026-04-15T13:44:05.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
2026-04-15T13:44:05.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:44:05.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:44:05.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:44:05.373 [DEBUG] [Thread-19902] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:44:18.909 [DEBUG] [Thread-19904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:44:23.090 [DEBUG] [Thread-19905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:44:33.954 [DEBUG] [Thread-19906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:44:35.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:44:35.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:44:35.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
2026-04-15T13:44:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 43, 59), 8.29768, 57.6891, 0.0, 24.0678, 14.2144, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:44:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:43:59
2026-04-15T13:44:37.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:44:37.653 [DEBUG] [Thread-19907] [transport.py] [_log()] starting thread (client mode): 0xee904ca0
2026-04-15T13:44:37.654 [DEBUG] [Thread-19907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:44:37.673 [DEBUG] [Thread-19907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:44:37.673 [INFO] [Thread-19907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:44:37.676 [DEBUG] [Thread-19907] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:44:37.676 [DEBUG] [Thread-19907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:44:37.677 [DEBUG] [Thread-19907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:44:37.677 [DEBUG] [Thread-19907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:44:37.677 [DEBUG] [Thread-19907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:44:37.677 [DEBUG] [Thread-19907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:44:37.677 [DEBUG] [Thread-19907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:44:37.677 [DEBUG] [Thread-19907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:44:37.677 [DEBUG] [Thread-19907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:44:37.677 [DEBUG] [Thread-19907] [transport.py] [_log()] client lang: <none>
2026-04-15T13:44:37.677 [DEBUG] [Thread-19907] [transport.py] [_log()] server lang: <none>
2026-04-15T13:44:37.677 [DEBUG] [Thread-19907] [transport.py] [_log()] kex follows: False
2026-04-15T13:44:37.677 [DEBUG] [Thread-19907] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:44:37.677 [DEBUG] [Thread-19907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:44:37.678 [DEBUG] [Thread-19907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:44:37.678 [DEBUG] [Thread-19907] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:44:37.678 [DEBUG] [Thread-19907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:44:37.678 [DEBUG] [Thread-19907] [transport.py] [_log()] Compression: none
2026-04-15T13:44:37.678 [DEBUG] [Thread-19907] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:44:37.695 [DEBUG] [Thread-19907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:44:37.695 [DEBUG] [Thread-19907] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:44:37.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:44:37.695 [DEBUG] [Thread-19907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:44:37.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:44:37.697 [DEBUG] [Thread-19907] [transport.py] [_log()] userauth is OK
2026-04-15T13:44:37.697 [DEBUG] [Thread-19907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:44:37.697 [DEBUG] [Thread-19907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:44:37.697 [DEBUG] [Thread-19907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:44:37.697 [DEBUG] [Thread-19907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:44:37.721 [INFO] [Thread-19907] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:44:37.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:44:38.357 [DEBUG] [Thread-19907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:44:38.357 [DEBUG] [Thread-19907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:44:38.357 [DEBUG] [Thread-19907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:44:38.398 [DEBUG] [Thread-19907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:44:38.398 [DEBUG] [Thread-19907] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:44:38.401 [DEBUG] [Thread-19907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:44:38.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:44:38.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:44:38.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:44:38.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:44:38.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:44:38.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:44:38.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:44:38.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:44:38.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:44:38.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.489026 -999.00  +14.30  22.89     65   +7.90 1 2 1 1 1   888    0 6.89 25.68 ----- 24.4 22.9 310.8 28.5 21.1 -26.5 19.9 -25.1 20.2 -20.4 21.5 -23.1
2026-04-15T13:44:38.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:44:38.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:44:38.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.489026
2026-04-15T13:44:38.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:44:38.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:44:38.425 [DEBUG] [Thread-19907] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:44:38.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:44:38.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:44:38.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:44:38.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:43:59', tmtdew=8.29768, humidity=57.6891, cloud=0.0, wind=24.0678, temperature=14.2144, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:44:11.846', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:44:38.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:44:38.681 [DEBUG] [Thread-19910] [transport.py] [_log()] starting thread (client mode): 0xee98e860
2026-04-15T13:44:38.681 [DEBUG] [Thread-19910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:44:38.697 [DEBUG] [Thread-19910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:44:38.697 [INFO] [Thread-19910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:44:38.704 [DEBUG] [Thread-19910] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:44:38.704 [DEBUG] [Thread-19910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:44:38.704 [DEBUG] [Thread-19910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:44:38.705 [DEBUG] [Thread-19910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:44:38.705 [DEBUG] [Thread-19910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:44:38.705 [DEBUG] [Thread-19910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:44:38.705 [DEBUG] [Thread-19910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:44:38.705 [DEBUG] [Thread-19910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:44:38.705 [DEBUG] [Thread-19910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:44:38.705 [DEBUG] [Thread-19910] [transport.py] [_log()] client lang: <none>
2026-04-15T13:44:38.705 [DEBUG] [Thread-19910] [transport.py] [_log()] server lang: <none>
2026-04-15T13:44:38.705 [DEBUG] [Thread-19910] [transport.py] [_log()] kex follows: False
2026-04-15T13:44:38.705 [DEBUG] [Thread-19910] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:44:38.705 [DEBUG] [Thread-19910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:44:38.705 [DEBUG] [Thread-19910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:44:38.706 [DEBUG] [Thread-19910] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:44:38.706 [DEBUG] [Thread-19910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:44:38.706 [DEBUG] [Thread-19910] [transport.py] [_log()] Compression: none
2026-04-15T13:44:38.706 [DEBUG] [Thread-19910] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:44:38.761 [DEBUG] [Thread-19910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:44:38.762 [DEBUG] [Thread-19910] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:44:38.762 [DEBUG] [Thread-19910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:44:38.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:44:38.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:44:38.818 [DEBUG] [Thread-19910] [transport.py] [_log()] userauth is OK
2026-04-15T13:44:38.819 [DEBUG] [Thread-19910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:44:38.819 [DEBUG] [Thread-19910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:44:38.819 [DEBUG] [Thread-19910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:44:38.819 [DEBUG] [Thread-19910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:44:38.844 [INFO] [Thread-19910] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:44:38.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:44:38.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:44:39.642 [DEBUG] [Thread-19910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:44:39.643 [DEBUG] [Thread-19910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:44:39.690 [DEBUG] [Thread-19910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:44:39.690 [DEBUG] [Thread-19910] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:44:39.699 [DEBUG] [Thread-19910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:44:39.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:44:39.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')
2026-04-15T13:44:39.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
2026-04-15T13:44:39.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:44:39.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:44:39.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:44:39.737 [DEBUG] [Thread-19910] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:44:48.985 [DEBUG] [Thread-19912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:44:57.229 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:44:57.230 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:45:04.029 [DEBUG] [Thread-19913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:45:09.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:45:09.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:45:09.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
2026-04-15T13:45:11.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 44, 35), 8.55725, 56.6097, 0.0, 24.3115, 15.3597, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:45:11.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:44:35
2026-04-15T13:45:11.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:45:11.899 [DEBUG] [Thread-19914] [transport.py] [_log()] starting thread (client mode): 0xee9e5ae0
2026-04-15T13:45:11.899 [DEBUG] [Thread-19914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:45:11.919 [DEBUG] [Thread-19914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:45:11.919 [INFO] [Thread-19914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:45:11.922 [DEBUG] [Thread-19914] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:45:11.922 [DEBUG] [Thread-19914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:45:11.922 [DEBUG] [Thread-19914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:45:11.922 [DEBUG] [Thread-19914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:45:11.922 [DEBUG] [Thread-19914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:45:11.922 [DEBUG] [Thread-19914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:45:11.922 [DEBUG] [Thread-19914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:45:11.922 [DEBUG] [Thread-19914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:45:11.922 [DEBUG] [Thread-19914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:45:11.922 [DEBUG] [Thread-19914] [transport.py] [_log()] client lang: <none>
2026-04-15T13:45:11.922 [DEBUG] [Thread-19914] [transport.py] [_log()] server lang: <none>
2026-04-15T13:45:11.922 [DEBUG] [Thread-19914] [transport.py] [_log()] kex follows: False
2026-04-15T13:45:11.922 [DEBUG] [Thread-19914] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:45:11.922 [DEBUG] [Thread-19914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:45:11.923 [DEBUG] [Thread-19914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:45:11.923 [DEBUG] [Thread-19914] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:45:11.923 [DEBUG] [Thread-19914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:45:11.923 [DEBUG] [Thread-19914] [transport.py] [_log()] Compression: none
2026-04-15T13:45:11.923 [DEBUG] [Thread-19914] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:45:11.938 [DEBUG] [Thread-19914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:45:11.938 [DEBUG] [Thread-19914] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:45:11.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:45:11.939 [DEBUG] [Thread-19914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:45:11.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:45:11.940 [DEBUG] [Thread-19914] [transport.py] [_log()] userauth is OK
2026-04-15T13:45:11.940 [DEBUG] [Thread-19914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:45:11.940 [DEBUG] [Thread-19914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:45:11.940 [DEBUG] [Thread-19914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:45:11.940 [DEBUG] [Thread-19914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:45:11.953 [INFO] [Thread-19914] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:45:11.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:45:12.576 [DEBUG] [Thread-19914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:45:12.576 [DEBUG] [Thread-19914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:45:12.576 [DEBUG] [Thread-19914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:45:12.617 [DEBUG] [Thread-19914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:45:12.617 [DEBUG] [Thread-19914] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:45:12.619 [DEBUG] [Thread-19914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:45:12.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:45:12.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:45:12.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:45:12.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:45:12.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:45:12.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:45:12.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:45:12.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:45:12.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:45:12.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.489374 -999.00  +14.20  20.92     64   +7.50 1 2 1 1 1   888    0 7.05 27.63 ----- 25.0 20.9 329.4 33.4 21.0 -24.8 19.9 -24.3 20.2 -20.6 21.5 -22.8
2026-04-15T13:45:12.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:45:12.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:45:12.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.489374
2026-04-15T13:45:12.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:45:12.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:45:12.643 [DEBUG] [Thread-19914] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:45:12.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:45:12.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:45:12.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:45:12.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:44:35', tmtdew=8.55725, humidity=56.6097, cloud=0.0, wind=24.3115, temperature=15.3597, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:44:41.914', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:45:12.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:45:12.869 [DEBUG] [Thread-19917] [transport.py] [_log()] starting thread (client mode): 0xee988880
2026-04-15T13:45:12.870 [DEBUG] [Thread-19917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:45:12.884 [DEBUG] [Thread-19917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:45:12.884 [INFO] [Thread-19917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:45:12.891 [DEBUG] [Thread-19917] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:45:12.892 [DEBUG] [Thread-19917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:45:12.892 [DEBUG] [Thread-19917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:45:12.892 [DEBUG] [Thread-19917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:45:12.892 [DEBUG] [Thread-19917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:45:12.892 [DEBUG] [Thread-19917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:45:12.892 [DEBUG] [Thread-19917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:45:12.892 [DEBUG] [Thread-19917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:45:12.892 [DEBUG] [Thread-19917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:45:12.892 [DEBUG] [Thread-19917] [transport.py] [_log()] client lang: <none>
2026-04-15T13:45:12.892 [DEBUG] [Thread-19917] [transport.py] [_log()] server lang: <none>
2026-04-15T13:45:12.892 [DEBUG] [Thread-19917] [transport.py] [_log()] kex follows: False
2026-04-15T13:45:12.893 [DEBUG] [Thread-19917] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:45:12.893 [DEBUG] [Thread-19917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:45:12.893 [DEBUG] [Thread-19917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:45:12.893 [DEBUG] [Thread-19917] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:45:12.893 [DEBUG] [Thread-19917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:45:12.893 [DEBUG] [Thread-19917] [transport.py] [_log()] Compression: none
2026-04-15T13:45:12.893 [DEBUG] [Thread-19917] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:45:12.950 [DEBUG] [Thread-19917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:45:12.950 [DEBUG] [Thread-19917] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:45:12.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:45:12.951 [DEBUG] [Thread-19917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:45:12.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:45:13.006 [DEBUG] [Thread-19917] [transport.py] [_log()] userauth is OK
2026-04-15T13:45:13.007 [DEBUG] [Thread-19917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:45:13.007 [DEBUG] [Thread-19917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:45:13.007 [DEBUG] [Thread-19917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:45:13.007 [DEBUG] [Thread-19917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:45:13.032 [INFO] [Thread-19917] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:45:13.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:45:13.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:45:13.833 [DEBUG] [Thread-19917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:45:13.834 [DEBUG] [Thread-19917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:45:13.881 [DEBUG] [Thread-19917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:45:13.881 [DEBUG] [Thread-19917] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:45:13.890 [DEBUG] [Thread-19917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:45:13.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:45:13.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')
2026-04-15T13:45:13.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
2026-04-15T13:45:13.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:45:13.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:45:13.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:45:13.928 [DEBUG] [Thread-19917] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:45:19.057 [DEBUG] [Thread-19919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:45:23.189 [DEBUG] [Thread-19920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:45:34.098 [DEBUG] [Thread-19921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:45:43.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:45:43.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:45:43.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
2026-04-15T13:45:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 45, 10), 8.17933, 57.7412, 0.0, 22.3031, 14.4959, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:45:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:45:10
2026-04-15T13:45:45.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:45:46.107 [DEBUG] [Thread-19922] [transport.py] [_log()] starting thread (client mode): 0xee98ee90
2026-04-15T13:45:46.107 [DEBUG] [Thread-19922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:45:46.127 [DEBUG] [Thread-19922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:45:46.127 [INFO] [Thread-19922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:45:46.128 [DEBUG] [Thread-19922] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:45:46.128 [DEBUG] [Thread-19922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:45:46.128 [DEBUG] [Thread-19922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:45:46.129 [DEBUG] [Thread-19922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:45:46.129 [DEBUG] [Thread-19922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:45:46.129 [DEBUG] [Thread-19922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:45:46.129 [DEBUG] [Thread-19922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:45:46.129 [DEBUG] [Thread-19922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:45:46.129 [DEBUG] [Thread-19922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:45:46.129 [DEBUG] [Thread-19922] [transport.py] [_log()] client lang: <none>
2026-04-15T13:45:46.129 [DEBUG] [Thread-19922] [transport.py] [_log()] server lang: <none>
2026-04-15T13:45:46.129 [DEBUG] [Thread-19922] [transport.py] [_log()] kex follows: False
2026-04-15T13:45:46.130 [DEBUG] [Thread-19922] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:45:46.130 [DEBUG] [Thread-19922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:45:46.130 [DEBUG] [Thread-19922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:45:46.130 [DEBUG] [Thread-19922] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:45:46.130 [DEBUG] [Thread-19922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:45:46.130 [DEBUG] [Thread-19922] [transport.py] [_log()] Compression: none
2026-04-15T13:45:46.130 [DEBUG] [Thread-19922] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:45:46.142 [DEBUG] [Thread-19922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:45:46.142 [DEBUG] [Thread-19922] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:45:46.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:45:46.143 [DEBUG] [Thread-19922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:45:46.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:45:46.188 [DEBUG] [Thread-19922] [transport.py] [_log()] userauth is OK
2026-04-15T13:45:46.188 [DEBUG] [Thread-19922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:45:46.189 [DEBUG] [Thread-19922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:45:46.189 [DEBUG] [Thread-19922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:45:46.189 [DEBUG] [Thread-19922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:45:46.205 [INFO] [Thread-19922] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:45:46.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:45:46.835 [DEBUG] [Thread-19922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:45:46.835 [DEBUG] [Thread-19922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:45:46.835 [DEBUG] [Thread-19922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:45:46.876 [DEBUG] [Thread-19922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:45:46.876 [DEBUG] [Thread-19922] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:45:46.879 [DEBUG] [Thread-19922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:45:46.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:45:46.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:45:46.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:45:46.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:45:46.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:45:46.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:45:46.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:45:46.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:45:46.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:45:46.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.489721 -999.00  +14.30  23.74     64   +7.70 1 2 1 1 1   888    0 7.15 30.74 ----- 25.4 23.7 320.8 28.6 21.0 -25.6 19.9 -23.9 20.2 -20.5 21.5 -22.9
2026-04-15T13:45:46.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:45:46.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:45:46.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.489721
2026-04-15T13:45:46.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:45:46.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:45:46.905 [DEBUG] [Thread-19922] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:45:46.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:45:46.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:45:46.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:45:46.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:45:10', tmtdew=8.17933, humidity=57.7412, cloud=0.0, wind=22.3031, temperature=14.4959, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:45:11.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:45:47.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:45:47.156 [DEBUG] [Thread-19925] [transport.py] [_log()] starting thread (client mode): 0xee9e5f60
2026-04-15T13:45:47.156 [DEBUG] [Thread-19925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:45:47.178 [DEBUG] [Thread-19925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:45:47.178 [INFO] [Thread-19925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:45:47.186 [DEBUG] [Thread-19925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:45:47.186 [DEBUG] [Thread-19925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:45:47.186 [DEBUG] [Thread-19925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:45:47.186 [DEBUG] [Thread-19925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:45:47.186 [DEBUG] [Thread-19925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:45:47.186 [DEBUG] [Thread-19925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:45:47.186 [DEBUG] [Thread-19925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:45:47.186 [DEBUG] [Thread-19925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:45:47.186 [DEBUG] [Thread-19925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:45:47.187 [DEBUG] [Thread-19925] [transport.py] [_log()] client lang: <none>
2026-04-15T13:45:47.187 [DEBUG] [Thread-19925] [transport.py] [_log()] server lang: <none>
2026-04-15T13:45:47.187 [DEBUG] [Thread-19925] [transport.py] [_log()] kex follows: False
2026-04-15T13:45:47.187 [DEBUG] [Thread-19925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:45:47.187 [DEBUG] [Thread-19925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:45:47.187 [DEBUG] [Thread-19925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:45:47.187 [DEBUG] [Thread-19925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:45:47.187 [DEBUG] [Thread-19925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:45:47.187 [DEBUG] [Thread-19925] [transport.py] [_log()] Compression: none
2026-04-15T13:45:47.187 [DEBUG] [Thread-19925] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:45:47.245 [DEBUG] [Thread-19925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:45:47.246 [DEBUG] [Thread-19925] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:45:47.246 [DEBUG] [Thread-19925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:45:47.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:45:47.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:45:47.305 [DEBUG] [Thread-19925] [transport.py] [_log()] userauth is OK
2026-04-15T13:45:47.305 [DEBUG] [Thread-19925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:45:47.305 [DEBUG] [Thread-19925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:45:47.305 [DEBUG] [Thread-19925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:45:47.305 [DEBUG] [Thread-19925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:45:47.326 [INFO] [Thread-19925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:45:47.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:45:47.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:45:48.147 [DEBUG] [Thread-19925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:45:48.147 [DEBUG] [Thread-19925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:45:48.195 [DEBUG] [Thread-19925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:45:48.195 [DEBUG] [Thread-19925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:45:48.204 [DEBUG] [Thread-19925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:45:48.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:45:48.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')
2026-04-15T13:45:48.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
2026-04-15T13:45:48.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:45:48.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:45:48.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:45:48.243 [DEBUG] [Thread-19925] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:45:49.130 [DEBUG] [Thread-19927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:45:57.368 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:45:57.370 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:46:04.176 [DEBUG] [Thread-19928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:46:18.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:46:18.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:46:18.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:46:19.207 [DEBUG] [Thread-19929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:46:19.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 45, 46), 9.16749, 54.2893, 0.0, 27.522, 15.3924, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:46:19.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:45:46
2026-04-15T13:46:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:46:20.371 [DEBUG] [Thread-19930] [transport.py] [_log()] starting thread (client mode): 0xf1366440
2026-04-15T13:46:20.371 [DEBUG] [Thread-19930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:46:20.392 [DEBUG] [Thread-19930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:46:20.392 [INFO] [Thread-19930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:46:20.395 [DEBUG] [Thread-19930] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:46:20.395 [DEBUG] [Thread-19930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:46:20.395 [DEBUG] [Thread-19930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:46:20.395 [DEBUG] [Thread-19930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:46:20.396 [DEBUG] [Thread-19930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:46:20.396 [DEBUG] [Thread-19930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:46:20.396 [DEBUG] [Thread-19930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:46:20.396 [DEBUG] [Thread-19930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:46:20.396 [DEBUG] [Thread-19930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:46:20.396 [DEBUG] [Thread-19930] [transport.py] [_log()] client lang: <none>
2026-04-15T13:46:20.396 [DEBUG] [Thread-19930] [transport.py] [_log()] server lang: <none>
2026-04-15T13:46:20.396 [DEBUG] [Thread-19930] [transport.py] [_log()] kex follows: False
2026-04-15T13:46:20.396 [DEBUG] [Thread-19930] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:46:20.396 [DEBUG] [Thread-19930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:46:20.396 [DEBUG] [Thread-19930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:46:20.396 [DEBUG] [Thread-19930] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:46:20.397 [DEBUG] [Thread-19930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:46:20.397 [DEBUG] [Thread-19930] [transport.py] [_log()] Compression: none
2026-04-15T13:46:20.397 [DEBUG] [Thread-19930] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:46:20.413 [DEBUG] [Thread-19930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:46:20.414 [DEBUG] [Thread-19930] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:46:20.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:46:20.414 [DEBUG] [Thread-19930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:46:20.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:46:20.415 [DEBUG] [Thread-19930] [transport.py] [_log()] userauth is OK
2026-04-15T13:46:20.415 [DEBUG] [Thread-19930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:46:20.415 [DEBUG] [Thread-19930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:46:20.415 [DEBUG] [Thread-19930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:46:20.416 [DEBUG] [Thread-19930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:46:20.451 [INFO] [Thread-19930] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:46:20.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:46:21.080 [DEBUG] [Thread-19930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:46:21.080 [DEBUG] [Thread-19930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:46:21.080 [DEBUG] [Thread-19930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:46:21.121 [DEBUG] [Thread-19930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:46:21.121 [DEBUG] [Thread-19930] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:46:21.125 [DEBUG] [Thread-19930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:46:21.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:46:21.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:46:21.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:46:21.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:46:21.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:46:21.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:46:21.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:46:21.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:46:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:46:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.490415 -999.00  +13.80  17.17     64   +7.20 1 1 1 1 1   888    0 7.27 33.92 ----- 16.4 17.2 333.4 28.2 20.9 -25.9 19.6 -25.2 20.1 -21.6 21.2 -23.3
2026-04-15T13:46:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:46:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:46:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.490415
2026-04-15T13:46:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:46:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:46:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:46:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:46:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T13:46:21.150 [DEBUG] [Thread-19930] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:46:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:45:46', tmtdew=9.16749, humidity=54.2893, cloud=0.0, wind=27.522, temperature=15.3924, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:46:11.856', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:46:21.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:46:21.407 [DEBUG] [Thread-19933] [transport.py] [_log()] starting thread (client mode): 0xf13efc70
2026-04-15T13:46:21.407 [DEBUG] [Thread-19933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:46:21.421 [DEBUG] [Thread-19933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:46:21.421 [INFO] [Thread-19933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:46:21.429 [DEBUG] [Thread-19933] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:46:21.429 [DEBUG] [Thread-19933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:46:21.429 [DEBUG] [Thread-19933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:46:21.429 [DEBUG] [Thread-19933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:46:21.429 [DEBUG] [Thread-19933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:46:21.429 [DEBUG] [Thread-19933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:46:21.429 [DEBUG] [Thread-19933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:46:21.429 [DEBUG] [Thread-19933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:46:21.429 [DEBUG] [Thread-19933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:46:21.429 [DEBUG] [Thread-19933] [transport.py] [_log()] client lang: <none>
2026-04-15T13:46:21.430 [DEBUG] [Thread-19933] [transport.py] [_log()] server lang: <none>
2026-04-15T13:46:21.430 [DEBUG] [Thread-19933] [transport.py] [_log()] kex follows: False
2026-04-15T13:46:21.430 [DEBUG] [Thread-19933] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:46:21.430 [DEBUG] [Thread-19933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:46:21.430 [DEBUG] [Thread-19933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:46:21.430 [DEBUG] [Thread-19933] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:46:21.430 [DEBUG] [Thread-19933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:46:21.430 [DEBUG] [Thread-19933] [transport.py] [_log()] Compression: none
2026-04-15T13:46:21.430 [DEBUG] [Thread-19933] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:46:21.486 [DEBUG] [Thread-19933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:46:21.486 [DEBUG] [Thread-19933] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:46:21.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:46:21.487 [DEBUG] [Thread-19933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:46:21.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:46:21.543 [DEBUG] [Thread-19933] [transport.py] [_log()] userauth is OK
2026-04-15T13:46:21.543 [DEBUG] [Thread-19933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:46:21.543 [DEBUG] [Thread-19933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:46:21.543 [DEBUG] [Thread-19933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:46:21.543 [DEBUG] [Thread-19933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:46:21.568 [INFO] [Thread-19933] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:46:21.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:46:21.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:46:22.383 [DEBUG] [Thread-19933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:46:22.383 [DEBUG] [Thread-19933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:46:22.431 [DEBUG] [Thread-19933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:46:22.431 [DEBUG] [Thread-19933] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:46:22.440 [DEBUG] [Thread-19933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:46:22.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:46:22.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T13:46:22.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T13:46:22.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:46:22.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:46:22.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:46:22.475 [DEBUG] [Thread-19933] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:46:23.295 [DEBUG] [Thread-19935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:46:34.238 [DEBUG] [Thread-19936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:46:49.277 [DEBUG] [Thread-19937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:46:52.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:46:52.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:46:52.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
2026-04-15T13:46:53.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 46, 22), 8.49998, 56.9429, 0.0, 19.9033, 14.3299, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:46:53.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:46:22
2026-04-15T13:46:54.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:46:54.653 [DEBUG] [Thread-19938] [transport.py] [_log()] starting thread (client mode): 0xf13c86a0
2026-04-15T13:46:54.653 [DEBUG] [Thread-19938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:46:54.673 [DEBUG] [Thread-19938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:46:54.674 [INFO] [Thread-19938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:46:54.676 [DEBUG] [Thread-19938] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:46:54.677 [DEBUG] [Thread-19938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:46:54.677 [DEBUG] [Thread-19938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:46:54.677 [DEBUG] [Thread-19938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:46:54.677 [DEBUG] [Thread-19938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:46:54.677 [DEBUG] [Thread-19938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:46:54.677 [DEBUG] [Thread-19938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:46:54.677 [DEBUG] [Thread-19938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:46:54.677 [DEBUG] [Thread-19938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:46:54.677 [DEBUG] [Thread-19938] [transport.py] [_log()] client lang: <none>
2026-04-15T13:46:54.677 [DEBUG] [Thread-19938] [transport.py] [_log()] server lang: <none>
2026-04-15T13:46:54.677 [DEBUG] [Thread-19938] [transport.py] [_log()] kex follows: False
2026-04-15T13:46:54.677 [DEBUG] [Thread-19938] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:46:54.677 [DEBUG] [Thread-19938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:46:54.678 [DEBUG] [Thread-19938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:46:54.678 [DEBUG] [Thread-19938] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:46:54.678 [DEBUG] [Thread-19938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:46:54.678 [DEBUG] [Thread-19938] [transport.py] [_log()] Compression: none
2026-04-15T13:46:54.678 [DEBUG] [Thread-19938] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:46:54.696 [DEBUG] [Thread-19938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:46:54.696 [DEBUG] [Thread-19938] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:46:54.697 [DEBUG] [Thread-19938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:46:54.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:46:54.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:46:54.698 [DEBUG] [Thread-19938] [transport.py] [_log()] userauth is OK
2026-04-15T13:46:54.698 [DEBUG] [Thread-19938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:46:54.698 [DEBUG] [Thread-19938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:46:54.698 [DEBUG] [Thread-19938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:46:54.698 [DEBUG] [Thread-19938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:46:54.716 [INFO] [Thread-19938] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:46:54.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:46:55.324 [DEBUG] [Thread-19938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:46:55.325 [DEBUG] [Thread-19938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:46:55.325 [DEBUG] [Thread-19938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:46:55.365 [DEBUG] [Thread-19938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:46:55.365 [DEBUG] [Thread-19938] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:46:55.368 [DEBUG] [Thread-19938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:46:55.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:46:55.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:46:55.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:46:55.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:46:55.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:46:55.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:46:55.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:46:55.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:46:55.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:46:55.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.490762 -999.00  +14.00  16.64     65   +7.70 1 2 1 1 1   888    0 7.23 32.24 ----- 23.8 16.6 26.7 23.9 20.9 -25.4 19.6 -24.3 20.2 -21.7 21.2 -22.8
2026-04-15T13:46:55.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:46:55.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:46:55.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.490762
2026-04-15T13:46:55.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:46:55.393 [DEBUG] [Thread-19938] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:46:55.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:46:55.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:46:55.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:46:55.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:46:55.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:46:22', tmtdew=8.49998, humidity=56.9429, cloud=0.0, wind=19.9033, temperature=14.3299, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:46:41.837', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:46:55.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:46:55.650 [DEBUG] [Thread-19941] [transport.py] [_log()] starting thread (client mode): 0xee9e5de0
2026-04-15T13:46:55.650 [DEBUG] [Thread-19941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:46:55.664 [DEBUG] [Thread-19941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:46:55.664 [INFO] [Thread-19941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:46:55.671 [DEBUG] [Thread-19941] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:46:55.671 [DEBUG] [Thread-19941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:46:55.671 [DEBUG] [Thread-19941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:46:55.671 [DEBUG] [Thread-19941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:46:55.671 [DEBUG] [Thread-19941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:46:55.672 [DEBUG] [Thread-19941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:46:55.672 [DEBUG] [Thread-19941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:46:55.672 [DEBUG] [Thread-19941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:46:55.672 [DEBUG] [Thread-19941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:46:55.672 [DEBUG] [Thread-19941] [transport.py] [_log()] client lang: <none>
2026-04-15T13:46:55.672 [DEBUG] [Thread-19941] [transport.py] [_log()] server lang: <none>
2026-04-15T13:46:55.672 [DEBUG] [Thread-19941] [transport.py] [_log()] kex follows: False
2026-04-15T13:46:55.672 [DEBUG] [Thread-19941] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:46:55.672 [DEBUG] [Thread-19941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:46:55.672 [DEBUG] [Thread-19941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:46:55.672 [DEBUG] [Thread-19941] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:46:55.672 [DEBUG] [Thread-19941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:46:55.673 [DEBUG] [Thread-19941] [transport.py] [_log()] Compression: none
2026-04-15T13:46:55.673 [DEBUG] [Thread-19941] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:46:55.730 [DEBUG] [Thread-19941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:46:55.730 [DEBUG] [Thread-19941] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:46:55.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:46:55.731 [DEBUG] [Thread-19941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:46:55.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:46:55.787 [DEBUG] [Thread-19941] [transport.py] [_log()] userauth is OK
2026-04-15T13:46:55.787 [DEBUG] [Thread-19941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:46:55.787 [DEBUG] [Thread-19941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:46:55.788 [DEBUG] [Thread-19941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:46:55.788 [DEBUG] [Thread-19941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:46:55.815 [INFO] [Thread-19941] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:46:55.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:46:55.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:46:56.692 [DEBUG] [Thread-19941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:46:56.692 [DEBUG] [Thread-19941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:46:56.742 [DEBUG] [Thread-19941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:46:56.742 [DEBUG] [Thread-19941] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:46:56.751 [DEBUG] [Thread-19941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:46:56.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:46:56.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')
2026-04-15T13:46:56.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
2026-04-15T13:46:56.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:46:56.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:46:56.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:46:56.787 [DEBUG] [Thread-19941] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:46:57.509 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:46:57.511 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:47:04.309 [DEBUG] [Thread-19943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:47:19.351 [DEBUG] [Thread-19944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:47:23.373 [DEBUG] [Thread-19945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:47:26.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:47:26.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:47:26.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
2026-04-15T13:47:28.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 46, 57), 8.32026, 57.2079, 0.0, 17.1148, 14.3306, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:47:28.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:46:57
2026-04-15T13:47:28.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:47:29.005 [DEBUG] [Thread-19946] [transport.py] [_log()] starting thread (client mode): 0xee905ed0
2026-04-15T13:47:29.005 [DEBUG] [Thread-19946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:47:29.025 [DEBUG] [Thread-19946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:47:29.025 [INFO] [Thread-19946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:47:29.028 [DEBUG] [Thread-19946] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:47:29.028 [DEBUG] [Thread-19946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:47:29.028 [DEBUG] [Thread-19946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:47:29.028 [DEBUG] [Thread-19946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:47:29.028 [DEBUG] [Thread-19946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:47:29.029 [DEBUG] [Thread-19946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:47:29.029 [DEBUG] [Thread-19946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:47:29.029 [DEBUG] [Thread-19946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:47:29.029 [DEBUG] [Thread-19946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:47:29.029 [DEBUG] [Thread-19946] [transport.py] [_log()] client lang: <none>
2026-04-15T13:47:29.029 [DEBUG] [Thread-19946] [transport.py] [_log()] server lang: <none>
2026-04-15T13:47:29.029 [DEBUG] [Thread-19946] [transport.py] [_log()] kex follows: False
2026-04-15T13:47:29.029 [DEBUG] [Thread-19946] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:47:29.029 [DEBUG] [Thread-19946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:47:29.029 [DEBUG] [Thread-19946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:47:29.030 [DEBUG] [Thread-19946] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:47:29.030 [DEBUG] [Thread-19946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:47:29.030 [DEBUG] [Thread-19946] [transport.py] [_log()] Compression: none
2026-04-15T13:47:29.030 [DEBUG] [Thread-19946] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:47:29.046 [DEBUG] [Thread-19946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:47:29.046 [DEBUG] [Thread-19946] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:47:29.047 [DEBUG] [Thread-19946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:47:29.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:47:29.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:47:29.048 [DEBUG] [Thread-19946] [transport.py] [_log()] userauth is OK
2026-04-15T13:47:29.048 [DEBUG] [Thread-19946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:47:29.048 [DEBUG] [Thread-19946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:47:29.048 [DEBUG] [Thread-19946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:47:29.048 [DEBUG] [Thread-19946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:47:29.074 [INFO] [Thread-19946] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:47:29.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:47:29.708 [DEBUG] [Thread-19946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:47:29.708 [DEBUG] [Thread-19946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:47:29.709 [DEBUG] [Thread-19946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:47:29.749 [DEBUG] [Thread-19946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:47:29.749 [DEBUG] [Thread-19946] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:47:29.752 [DEBUG] [Thread-19946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:47:29.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:47:29.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:47:29.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:47:29.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:47:29.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:47:29.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:47:29.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:47:29.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:47:29.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:47:29.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.491110 -999.00  +14.00  21.55     64   +7.40 1 1 1 1 1   888    0 7.27 32.89 ----- 24.1 21.6 341.0 32.2 20.9 -25.3 19.8 -25.1 20.1 -22.1 21.4 -24.1
2026-04-15T13:47:29.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:47:29.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:47:29.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.491110
2026-04-15T13:47:29.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:47:29.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:47:29.777 [DEBUG] [Thread-19946] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:47:29.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:47:29.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:47:29.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T13:47:29.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:46:57', tmtdew=8.32026, humidity=57.2079, cloud=0.0, wind=17.1148, temperature=14.3306, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:47:11.904', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:47:30.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:47:30.033 [DEBUG] [Thread-19949] [transport.py] [_log()] starting thread (client mode): 0xee98a5c0
2026-04-15T13:47:30.033 [DEBUG] [Thread-19949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:47:30.048 [DEBUG] [Thread-19949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:47:30.048 [INFO] [Thread-19949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:47:30.055 [DEBUG] [Thread-19949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:47:30.055 [DEBUG] [Thread-19949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:47:30.055 [DEBUG] [Thread-19949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:47:30.056 [DEBUG] [Thread-19949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:47:30.056 [DEBUG] [Thread-19949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:47:30.056 [DEBUG] [Thread-19949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:47:30.056 [DEBUG] [Thread-19949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:47:30.056 [DEBUG] [Thread-19949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:47:30.056 [DEBUG] [Thread-19949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:47:30.056 [DEBUG] [Thread-19949] [transport.py] [_log()] client lang: <none>
2026-04-15T13:47:30.056 [DEBUG] [Thread-19949] [transport.py] [_log()] server lang: <none>
2026-04-15T13:47:30.056 [DEBUG] [Thread-19949] [transport.py] [_log()] kex follows: False
2026-04-15T13:47:30.056 [DEBUG] [Thread-19949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:47:30.056 [DEBUG] [Thread-19949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:47:30.056 [DEBUG] [Thread-19949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:47:30.057 [DEBUG] [Thread-19949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:47:30.057 [DEBUG] [Thread-19949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:47:30.057 [DEBUG] [Thread-19949] [transport.py] [_log()] Compression: none
2026-04-15T13:47:30.057 [DEBUG] [Thread-19949] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:47:30.114 [DEBUG] [Thread-19949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:47:30.114 [DEBUG] [Thread-19949] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:47:30.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:47:30.115 [DEBUG] [Thread-19949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:47:30.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:47:30.171 [DEBUG] [Thread-19949] [transport.py] [_log()] userauth is OK
2026-04-15T13:47:30.171 [DEBUG] [Thread-19949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:47:30.171 [DEBUG] [Thread-19949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:47:30.171 [DEBUG] [Thread-19949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:47:30.171 [DEBUG] [Thread-19949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:47:30.196 [INFO] [Thread-19949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:47:30.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:47:30.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:47:31.020 [DEBUG] [Thread-19949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:47:31.021 [DEBUG] [Thread-19949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:47:31.068 [DEBUG] [Thread-19949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:47:31.069 [DEBUG] [Thread-19949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:47:31.077 [DEBUG] [Thread-19949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:47:31.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:47:31.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')
2026-04-15T13:47:31.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
2026-04-15T13:47:31.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:47:31.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:47:31.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:47:31.113 [DEBUG] [Thread-19949] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:47:34.382 [DEBUG] [Thread-19951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:47:49.420 [DEBUG] [Thread-19952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:47:57.653 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:47:57.654 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:48:01.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:48:01.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:48:01.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
2026-04-15T13:48:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 47, 33), 9.03873, 54.6533, 0.0, 17.6436, 14.9277, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:48:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:47:33
2026-04-15T13:48:02.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:48:03.270 [DEBUG] [Thread-19953] [transport.py] [_log()] starting thread (client mode): 0xee9e5c90
2026-04-15T13:48:03.270 [DEBUG] [Thread-19953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:48:03.289 [DEBUG] [Thread-19953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:48:03.290 [INFO] [Thread-19953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:48:03.293 [DEBUG] [Thread-19953] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:48:03.293 [DEBUG] [Thread-19953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:48:03.293 [DEBUG] [Thread-19953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:48:03.293 [DEBUG] [Thread-19953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:48:03.293 [DEBUG] [Thread-19953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:48:03.293 [DEBUG] [Thread-19953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:48:03.294 [DEBUG] [Thread-19953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:48:03.294 [DEBUG] [Thread-19953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:48:03.294 [DEBUG] [Thread-19953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:48:03.294 [DEBUG] [Thread-19953] [transport.py] [_log()] client lang: <none>
2026-04-15T13:48:03.294 [DEBUG] [Thread-19953] [transport.py] [_log()] server lang: <none>
2026-04-15T13:48:03.294 [DEBUG] [Thread-19953] [transport.py] [_log()] kex follows: False
2026-04-15T13:48:03.294 [DEBUG] [Thread-19953] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:48:03.294 [DEBUG] [Thread-19953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:48:03.294 [DEBUG] [Thread-19953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:48:03.294 [DEBUG] [Thread-19953] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:48:03.294 [DEBUG] [Thread-19953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:48:03.295 [DEBUG] [Thread-19953] [transport.py] [_log()] Compression: none
2026-04-15T13:48:03.295 [DEBUG] [Thread-19953] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:48:03.312 [DEBUG] [Thread-19953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:48:03.312 [DEBUG] [Thread-19953] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:48:03.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:48:03.313 [DEBUG] [Thread-19953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:48:03.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:48:03.314 [DEBUG] [Thread-19953] [transport.py] [_log()] userauth is OK
2026-04-15T13:48:03.314 [DEBUG] [Thread-19953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:48:03.314 [DEBUG] [Thread-19953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:48:03.314 [DEBUG] [Thread-19953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:48:03.314 [DEBUG] [Thread-19953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:48:03.338 [INFO] [Thread-19953] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:48:03.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:48:03.992 [DEBUG] [Thread-19953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:48:03.993 [DEBUG] [Thread-19953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:48:03.993 [DEBUG] [Thread-19953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:48:04.033 [DEBUG] [Thread-19953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:48:04.033 [DEBUG] [Thread-19953] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:48:04.036 [DEBUG] [Thread-19953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:48:04.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:48:04.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:48:04.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:48:04.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:48:04.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:48:04.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:48:04.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:48:04.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:48:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:48:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.491457 -999.00  +14.10  20.32     65   +7.70 1 2 1 1 1   888    0 7.22 35.35 ----- 19.9 20.3 328.0 33.7 20.9 -26.1 19.6 -23.8 20.2 -21.7 21.4 -22.8
2026-04-15T13:48:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:48:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:48:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.491457
2026-04-15T13:48:04.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:48:04.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:48:04.060 [DEBUG] [Thread-19953] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:48:04.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:48:04.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:48:04.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:48:04.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:47:33', tmtdew=9.03873, humidity=54.6533, cloud=0.0, wind=17.6436, temperature=14.9277, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:47:41.885', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:48:04.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:48:04.311 [DEBUG] [Thread-19956] [transport.py] [_log()] starting thread (client mode): 0xf1334a60
2026-04-15T13:48:04.311 [DEBUG] [Thread-19956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:48:04.325 [DEBUG] [Thread-19956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:48:04.326 [INFO] [Thread-19956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:48:04.333 [DEBUG] [Thread-19956] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:48:04.333 [DEBUG] [Thread-19956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:48:04.333 [DEBUG] [Thread-19956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:48:04.333 [DEBUG] [Thread-19956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:48:04.333 [DEBUG] [Thread-19956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:48:04.334 [DEBUG] [Thread-19956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:48:04.334 [DEBUG] [Thread-19956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:48:04.334 [DEBUG] [Thread-19956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:48:04.334 [DEBUG] [Thread-19956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:48:04.334 [DEBUG] [Thread-19956] [transport.py] [_log()] client lang: <none>
2026-04-15T13:48:04.334 [DEBUG] [Thread-19956] [transport.py] [_log()] server lang: <none>
2026-04-15T13:48:04.334 [DEBUG] [Thread-19956] [transport.py] [_log()] kex follows: False
2026-04-15T13:48:04.334 [DEBUG] [Thread-19956] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:48:04.334 [DEBUG] [Thread-19956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:48:04.334 [DEBUG] [Thread-19956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:48:04.334 [DEBUG] [Thread-19956] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:48:04.335 [DEBUG] [Thread-19956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:48:04.335 [DEBUG] [Thread-19956] [transport.py] [_log()] Compression: none
2026-04-15T13:48:04.335 [DEBUG] [Thread-19956] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:48:04.395 [DEBUG] [Thread-19956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:48:04.395 [DEBUG] [Thread-19956] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:48:04.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:48:04.396 [DEBUG] [Thread-19956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:48:04.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:48:04.451 [DEBUG] [Thread-19956] [transport.py] [_log()] userauth is OK
2026-04-15T13:48:04.451 [DEBUG] [Thread-19956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:48:04.451 [DEBUG] [Thread-19956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:48:04.451 [DEBUG] [Thread-19956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:48:04.452 [DEBUG] [Thread-19956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:48:04.453 [DEBUG] [Thread-19958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:48:04.476 [INFO] [Thread-19956] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:48:04.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:48:04.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:48:05.296 [DEBUG] [Thread-19956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:48:05.297 [DEBUG] [Thread-19956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:48:05.344 [DEBUG] [Thread-19956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:48:05.344 [DEBUG] [Thread-19956] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:48:05.353 [DEBUG] [Thread-19956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:48:05.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:48:05.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')
2026-04-15T13:48:05.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
2026-04-15T13:48:05.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:48:05.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:48:05.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:48:05.388 [DEBUG] [Thread-19956] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:48:19.495 [DEBUG] [Thread-19959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:48:23.486 [DEBUG] [Thread-19960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:48:34.525 [DEBUG] [Thread-19961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:48:35.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:48:35.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:48:35.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
2026-04-15T13:48:36.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 48, 9), 8.72139, 55.9952, 0.0, 25.232, 14.3627, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:48:36.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:48:09
2026-04-15T13:48:37.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:48:37.469 [DEBUG] [Thread-19962] [transport.py] [_log()] starting thread (client mode): 0xf13c98a0
2026-04-15T13:48:37.469 [DEBUG] [Thread-19962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:48:37.484 [DEBUG] [Thread-19962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:48:37.484 [INFO] [Thread-19962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:48:37.487 [DEBUG] [Thread-19962] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:48:37.487 [DEBUG] [Thread-19962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:48:37.487 [DEBUG] [Thread-19962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:48:37.487 [DEBUG] [Thread-19962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:48:37.487 [DEBUG] [Thread-19962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:48:37.488 [DEBUG] [Thread-19962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:48:37.488 [DEBUG] [Thread-19962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:48:37.488 [DEBUG] [Thread-19962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:48:37.488 [DEBUG] [Thread-19962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:48:37.488 [DEBUG] [Thread-19962] [transport.py] [_log()] client lang: <none>
2026-04-15T13:48:37.488 [DEBUG] [Thread-19962] [transport.py] [_log()] server lang: <none>
2026-04-15T13:48:37.488 [DEBUG] [Thread-19962] [transport.py] [_log()] kex follows: False
2026-04-15T13:48:37.488 [DEBUG] [Thread-19962] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:48:37.488 [DEBUG] [Thread-19962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:48:37.488 [DEBUG] [Thread-19962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:48:37.488 [DEBUG] [Thread-19962] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:48:37.488 [DEBUG] [Thread-19962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:48:37.489 [DEBUG] [Thread-19962] [transport.py] [_log()] Compression: none
2026-04-15T13:48:37.489 [DEBUG] [Thread-19962] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:48:37.505 [DEBUG] [Thread-19962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:48:37.506 [DEBUG] [Thread-19962] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:48:37.506 [DEBUG] [Thread-19962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:48:37.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:48:37.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:48:37.507 [DEBUG] [Thread-19962] [transport.py] [_log()] userauth is OK
2026-04-15T13:48:37.508 [DEBUG] [Thread-19962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:48:37.508 [DEBUG] [Thread-19962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:48:37.508 [DEBUG] [Thread-19962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:48:37.508 [DEBUG] [Thread-19962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:48:37.532 [INFO] [Thread-19962] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:48:37.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:48:38.178 [DEBUG] [Thread-19962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:48:38.178 [DEBUG] [Thread-19962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:48:38.179 [DEBUG] [Thread-19962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:48:38.219 [DEBUG] [Thread-19962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:48:38.219 [DEBUG] [Thread-19962] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:48:38.222 [DEBUG] [Thread-19962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:48:38.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:48:38.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:48:38.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:48:38.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:48:38.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:48:38.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:48:38.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:48:38.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:48:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:48:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.491804 -999.00  +14.10  20.30     64   +7.50 1 2 1 1 1   888    0 7.38 38.53 ----- 21.5 20.3 313.5 27.0 21.0 -24.9 19.7 -23.6 20.1 -21.6 21.4 -23.1
2026-04-15T13:48:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:48:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:48:38.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.491804
2026-04-15T13:48:38.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:48:38.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:48:38.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:48:38.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:48:38.249 [DEBUG] [Thread-19962] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:48:38.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:48:38.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:48:09', tmtdew=8.72139, humidity=55.9952, cloud=0.0, wind=25.232, temperature=14.3627, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:48:11.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:48:38.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:48:38.497 [DEBUG] [Thread-19965] [transport.py] [_log()] starting thread (client mode): 0xee98a5c0
2026-04-15T13:48:38.497 [DEBUG] [Thread-19965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:48:38.510 [DEBUG] [Thread-19965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:48:38.510 [INFO] [Thread-19965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:48:38.518 [DEBUG] [Thread-19965] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:48:38.518 [DEBUG] [Thread-19965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:48:38.518 [DEBUG] [Thread-19965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:48:38.518 [DEBUG] [Thread-19965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:48:38.518 [DEBUG] [Thread-19965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:48:38.518 [DEBUG] [Thread-19965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:48:38.518 [DEBUG] [Thread-19965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:48:38.518 [DEBUG] [Thread-19965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:48:38.518 [DEBUG] [Thread-19965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:48:38.518 [DEBUG] [Thread-19965] [transport.py] [_log()] client lang: <none>
2026-04-15T13:48:38.518 [DEBUG] [Thread-19965] [transport.py] [_log()] server lang: <none>
2026-04-15T13:48:38.519 [DEBUG] [Thread-19965] [transport.py] [_log()] kex follows: False
2026-04-15T13:48:38.519 [DEBUG] [Thread-19965] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:48:38.519 [DEBUG] [Thread-19965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:48:38.519 [DEBUG] [Thread-19965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:48:38.519 [DEBUG] [Thread-19965] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:48:38.519 [DEBUG] [Thread-19965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:48:38.519 [DEBUG] [Thread-19965] [transport.py] [_log()] Compression: none
2026-04-15T13:48:38.519 [DEBUG] [Thread-19965] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:48:38.573 [DEBUG] [Thread-19965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:48:38.573 [DEBUG] [Thread-19965] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:48:38.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:48:38.574 [DEBUG] [Thread-19965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:48:38.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:48:38.633 [DEBUG] [Thread-19965] [transport.py] [_log()] userauth is OK
2026-04-15T13:48:38.633 [DEBUG] [Thread-19965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:48:38.634 [DEBUG] [Thread-19965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:48:38.634 [DEBUG] [Thread-19965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:48:38.634 [DEBUG] [Thread-19965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:48:38.663 [INFO] [Thread-19965] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:48:38.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:48:38.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:48:39.468 [DEBUG] [Thread-19965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:48:39.469 [DEBUG] [Thread-19965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:48:39.516 [DEBUG] [Thread-19965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:48:39.516 [DEBUG] [Thread-19965] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:48:39.525 [DEBUG] [Thread-19965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:48:39.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:48:39.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')
2026-04-15T13:48:39.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
2026-04-15T13:48:39.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:48:39.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:48:39.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:48:39.562 [DEBUG] [Thread-19965] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:48:49.554 [DEBUG] [Thread-19967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:48:57.796 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:48:57.797 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:49:04.599 [DEBUG] [Thread-19968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:49:09.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:49:09.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:49:09.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
2026-04-15T13:49:11.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 48, 45), 9.2598, 53.8577, 0.0, 20.9246, 15.0601, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:49:11.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:48:45
2026-04-15T13:49:11.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:49:11.872 [DEBUG] [Thread-19969] [transport.py] [_log()] starting thread (client mode): 0xee9884f0
2026-04-15T13:49:11.873 [DEBUG] [Thread-19969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:49:11.896 [DEBUG] [Thread-19969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:49:11.897 [INFO] [Thread-19969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:49:11.898 [DEBUG] [Thread-19969] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:49:11.898 [DEBUG] [Thread-19969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:49:11.898 [DEBUG] [Thread-19969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:49:11.898 [DEBUG] [Thread-19969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:49:11.899 [DEBUG] [Thread-19969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:49:11.899 [DEBUG] [Thread-19969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:49:11.899 [DEBUG] [Thread-19969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:49:11.899 [DEBUG] [Thread-19969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:49:11.899 [DEBUG] [Thread-19969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:49:11.899 [DEBUG] [Thread-19969] [transport.py] [_log()] client lang: <none>
2026-04-15T13:49:11.899 [DEBUG] [Thread-19969] [transport.py] [_log()] server lang: <none>
2026-04-15T13:49:11.899 [DEBUG] [Thread-19969] [transport.py] [_log()] kex follows: False
2026-04-15T13:49:11.899 [DEBUG] [Thread-19969] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:49:11.899 [DEBUG] [Thread-19969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:49:11.899 [DEBUG] [Thread-19969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:49:11.900 [DEBUG] [Thread-19969] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:49:11.900 [DEBUG] [Thread-19969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:49:11.900 [DEBUG] [Thread-19969] [transport.py] [_log()] Compression: none
2026-04-15T13:49:11.900 [DEBUG] [Thread-19969] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:49:11.917 [DEBUG] [Thread-19969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:49:11.918 [DEBUG] [Thread-19969] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:49:11.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:49:11.918 [DEBUG] [Thread-19969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:49:11.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:49:11.919 [DEBUG] [Thread-19969] [transport.py] [_log()] userauth is OK
2026-04-15T13:49:11.919 [DEBUG] [Thread-19969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:49:11.919 [DEBUG] [Thread-19969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:49:11.920 [DEBUG] [Thread-19969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:49:11.920 [DEBUG] [Thread-19969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:49:11.945 [INFO] [Thread-19969] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:49:11.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:49:12.541 [DEBUG] [Thread-19969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:49:12.541 [DEBUG] [Thread-19969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:49:12.542 [DEBUG] [Thread-19969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:49:12.582 [DEBUG] [Thread-19969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:49:12.582 [DEBUG] [Thread-19969] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:49:12.585 [DEBUG] [Thread-19969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:49:12.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:49:12.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:49:12.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:49:12.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:49:12.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:49:12.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:49:12.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:49:12.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:49:12.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:49:12.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.492152 -999.00  +14.10  19.50     64   +7.40 1 2 1 1 1   888    0 7.62 44.60 ----- 19.2 19.5 327.4 25.0 20.9 -25.0 19.8 -24.3 20.3 -20.1 21.4 -22.6
2026-04-15T13:49:12.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:49:12.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:49:12.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.492152
2026-04-15T13:49:12.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:49:12.610 [DEBUG] [Thread-19969] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:49:12.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:49:12.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:49:12.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:49:12.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:49:12.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:48:45', tmtdew=9.2598, humidity=53.8577, cloud=0.0, wind=20.9246, temperature=15.0601, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:48:41.933', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:49:12.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:49:12.866 [DEBUG] [Thread-19972] [transport.py] [_log()] starting thread (client mode): 0xee98e350
2026-04-15T13:49:12.866 [DEBUG] [Thread-19972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:49:12.882 [DEBUG] [Thread-19972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:49:12.882 [INFO] [Thread-19972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:49:12.889 [DEBUG] [Thread-19972] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:49:12.889 [DEBUG] [Thread-19972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:49:12.889 [DEBUG] [Thread-19972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:49:12.890 [DEBUG] [Thread-19972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:49:12.890 [DEBUG] [Thread-19972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:49:12.890 [DEBUG] [Thread-19972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:49:12.890 [DEBUG] [Thread-19972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:49:12.890 [DEBUG] [Thread-19972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:49:12.890 [DEBUG] [Thread-19972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:49:12.890 [DEBUG] [Thread-19972] [transport.py] [_log()] client lang: <none>
2026-04-15T13:49:12.890 [DEBUG] [Thread-19972] [transport.py] [_log()] server lang: <none>
2026-04-15T13:49:12.890 [DEBUG] [Thread-19972] [transport.py] [_log()] kex follows: False
2026-04-15T13:49:12.890 [DEBUG] [Thread-19972] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:49:12.890 [DEBUG] [Thread-19972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:49:12.890 [DEBUG] [Thread-19972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:49:12.891 [DEBUG] [Thread-19972] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:49:12.891 [DEBUG] [Thread-19972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:49:12.891 [DEBUG] [Thread-19972] [transport.py] [_log()] Compression: none
2026-04-15T13:49:12.891 [DEBUG] [Thread-19972] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:49:12.947 [DEBUG] [Thread-19972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:49:12.948 [DEBUG] [Thread-19972] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:49:12.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:49:12.948 [DEBUG] [Thread-19972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:49:12.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:49:13.004 [DEBUG] [Thread-19972] [transport.py] [_log()] userauth is OK
2026-04-15T13:49:13.004 [DEBUG] [Thread-19972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:49:13.004 [DEBUG] [Thread-19972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:49:13.005 [DEBUG] [Thread-19972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:49:13.005 [DEBUG] [Thread-19972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:49:13.032 [INFO] [Thread-19972] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:49:13.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:49:13.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:49:13.870 [DEBUG] [Thread-19972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:49:13.870 [DEBUG] [Thread-19972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:49:13.918 [DEBUG] [Thread-19972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:49:13.918 [DEBUG] [Thread-19972] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:49:13.927 [DEBUG] [Thread-19972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:49:13.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:49:13.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')
2026-04-15T13:49:13.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
2026-04-15T13:49:13.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:49:13.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:49:13.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:49:13.962 [DEBUG] [Thread-19972] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:49:19.632 [DEBUG] [Thread-19974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:49:23.560 [DEBUG] [Thread-19975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:49:34.677 [DEBUG] [Thread-19976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:49:43.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:49:43.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:49:43.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
2026-04-15T13:49:45.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 49, 20), 8.47913, 56.8403, 0.0, 19.9922, 14.1309, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:49:45.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:49:20
2026-04-15T13:49:45.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:49:46.311 [DEBUG] [Thread-19977] [transport.py] [_log()] starting thread (client mode): 0xf13c82b0
2026-04-15T13:49:46.311 [DEBUG] [Thread-19977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:49:46.330 [DEBUG] [Thread-19977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:49:46.330 [INFO] [Thread-19977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:49:46.333 [DEBUG] [Thread-19977] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:49:46.333 [DEBUG] [Thread-19977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:49:46.333 [DEBUG] [Thread-19977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:49:46.333 [DEBUG] [Thread-19977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:49:46.333 [DEBUG] [Thread-19977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:49:46.333 [DEBUG] [Thread-19977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:49:46.334 [DEBUG] [Thread-19977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:49:46.334 [DEBUG] [Thread-19977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:49:46.334 [DEBUG] [Thread-19977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:49:46.334 [DEBUG] [Thread-19977] [transport.py] [_log()] client lang: <none>
2026-04-15T13:49:46.334 [DEBUG] [Thread-19977] [transport.py] [_log()] server lang: <none>
2026-04-15T13:49:46.334 [DEBUG] [Thread-19977] [transport.py] [_log()] kex follows: False
2026-04-15T13:49:46.334 [DEBUG] [Thread-19977] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:49:46.334 [DEBUG] [Thread-19977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:49:46.334 [DEBUG] [Thread-19977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:49:46.334 [DEBUG] [Thread-19977] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:49:46.334 [DEBUG] [Thread-19977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:49:46.334 [DEBUG] [Thread-19977] [transport.py] [_log()] Compression: none
2026-04-15T13:49:46.334 [DEBUG] [Thread-19977] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:49:46.351 [DEBUG] [Thread-19977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:49:46.351 [DEBUG] [Thread-19977] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:49:46.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:49:46.352 [DEBUG] [Thread-19977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:49:46.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:49:46.353 [DEBUG] [Thread-19977] [transport.py] [_log()] userauth is OK
2026-04-15T13:49:46.353 [DEBUG] [Thread-19977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:49:46.353 [DEBUG] [Thread-19977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:49:46.353 [DEBUG] [Thread-19977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:49:46.353 [DEBUG] [Thread-19977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:49:46.373 [INFO] [Thread-19977] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:49:46.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:49:46.978 [DEBUG] [Thread-19977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:49:46.978 [DEBUG] [Thread-19977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:49:46.978 [DEBUG] [Thread-19977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:49:47.019 [DEBUG] [Thread-19977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:49:47.019 [DEBUG] [Thread-19977] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:49:47.022 [DEBUG] [Thread-19977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:49:47.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:49:47.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:49:47.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:49:47.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:49:47.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:49:47.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:49:47.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:49:47.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:49:47.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:49:47.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.492499 -999.00  +14.00   8.81     63   +7.20 1 2 1 1 1   888    0 7.75 49.36 ----- 14.8 8.8 51.8 23.9 21.0 -26.3 19.9 -23.9 20.3 -21.5 21.5 -22.8
2026-04-15T13:49:47.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:49:47.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:49:47.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.492499
2026-04-15T13:49:47.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:49:47.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:49:47.043 [DEBUG] [Thread-19977] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:49:47.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:49:47.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:49:47.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:49:47.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:49:20', tmtdew=8.47913, humidity=56.8403, cloud=0.0, wind=19.9922, temperature=14.1309, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:49:11.914', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:49:47.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:49:47.300 [DEBUG] [Thread-19980] [transport.py] [_log()] starting thread (client mode): 0xf13ec460
2026-04-15T13:49:47.300 [DEBUG] [Thread-19980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:49:47.315 [DEBUG] [Thread-19980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:49:47.315 [INFO] [Thread-19980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:49:47.322 [DEBUG] [Thread-19980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:49:47.323 [DEBUG] [Thread-19980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:49:47.323 [DEBUG] [Thread-19980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:49:47.323 [DEBUG] [Thread-19980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:49:47.323 [DEBUG] [Thread-19980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:49:47.323 [DEBUG] [Thread-19980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:49:47.323 [DEBUG] [Thread-19980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:49:47.323 [DEBUG] [Thread-19980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:49:47.323 [DEBUG] [Thread-19980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:49:47.323 [DEBUG] [Thread-19980] [transport.py] [_log()] client lang: <none>
2026-04-15T13:49:47.323 [DEBUG] [Thread-19980] [transport.py] [_log()] server lang: <none>
2026-04-15T13:49:47.323 [DEBUG] [Thread-19980] [transport.py] [_log()] kex follows: False
2026-04-15T13:49:47.324 [DEBUG] [Thread-19980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:49:47.324 [DEBUG] [Thread-19980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:49:47.324 [DEBUG] [Thread-19980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:49:47.324 [DEBUG] [Thread-19980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:49:47.324 [DEBUG] [Thread-19980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:49:47.324 [DEBUG] [Thread-19980] [transport.py] [_log()] Compression: none
2026-04-15T13:49:47.324 [DEBUG] [Thread-19980] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:49:47.378 [DEBUG] [Thread-19980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:49:47.379 [DEBUG] [Thread-19980] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:49:47.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:49:47.379 [DEBUG] [Thread-19980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:49:47.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:49:47.435 [DEBUG] [Thread-19980] [transport.py] [_log()] userauth is OK
2026-04-15T13:49:47.435 [DEBUG] [Thread-19980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:49:47.435 [DEBUG] [Thread-19980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:49:47.436 [DEBUG] [Thread-19980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:49:47.436 [DEBUG] [Thread-19980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:49:47.461 [INFO] [Thread-19980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:49:47.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:49:47.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:49:48.285 [DEBUG] [Thread-19980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:49:48.285 [DEBUG] [Thread-19980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:49:48.333 [DEBUG] [Thread-19980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:49:48.333 [DEBUG] [Thread-19980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:49:48.342 [DEBUG] [Thread-19980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:49:48.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:49: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')
2026-04-15T13:49:48.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T13:49:48.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:49:48.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:49:48.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:49:48.377 [DEBUG] [Thread-19980] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:49:49.708 [DEBUG] [Thread-19982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:49:57.939 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:49:57.941 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:50:04.757 [DEBUG] [Thread-19983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:50:18.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:50:18.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:50:18.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
2026-04-15T13:50:19.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 49, 56), 8.26805, 57.5888, 0.0, 13.9565, 14.2305, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:50:19.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:49:56
2026-04-15T13:50:19.790 [DEBUG] [Thread-19984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:50:20.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:50:20.557 [DEBUG] [Thread-19985] [transport.py] [_log()] starting thread (client mode): 0xf1334910
2026-04-15T13:50:20.557 [DEBUG] [Thread-19985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:50:20.575 [DEBUG] [Thread-19985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:50:20.575 [INFO] [Thread-19985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:50:20.577 [DEBUG] [Thread-19985] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:50:20.577 [DEBUG] [Thread-19985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:50:20.577 [DEBUG] [Thread-19985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:50:20.577 [DEBUG] [Thread-19985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:50:20.577 [DEBUG] [Thread-19985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:50:20.577 [DEBUG] [Thread-19985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:50:20.577 [DEBUG] [Thread-19985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:50:20.577 [DEBUG] [Thread-19985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:50:20.577 [DEBUG] [Thread-19985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:50:20.577 [DEBUG] [Thread-19985] [transport.py] [_log()] client lang: <none>
2026-04-15T13:50:20.577 [DEBUG] [Thread-19985] [transport.py] [_log()] server lang: <none>
2026-04-15T13:50:20.578 [DEBUG] [Thread-19985] [transport.py] [_log()] kex follows: False
2026-04-15T13:50:20.578 [DEBUG] [Thread-19985] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:50:20.578 [DEBUG] [Thread-19985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:50:20.578 [DEBUG] [Thread-19985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:50:20.578 [DEBUG] [Thread-19985] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:50:20.578 [DEBUG] [Thread-19985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:50:20.578 [DEBUG] [Thread-19985] [transport.py] [_log()] Compression: none
2026-04-15T13:50:20.578 [DEBUG] [Thread-19985] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:50:20.594 [DEBUG] [Thread-19985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:50:20.595 [DEBUG] [Thread-19985] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:50:20.595 [DEBUG] [Thread-19985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:50:20.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:50:20.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:50:20.596 [DEBUG] [Thread-19985] [transport.py] [_log()] userauth is OK
2026-04-15T13:50:20.596 [DEBUG] [Thread-19985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:50:20.596 [DEBUG] [Thread-19985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:50:20.596 [DEBUG] [Thread-19985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:50:20.596 [DEBUG] [Thread-19985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:50:20.610 [INFO] [Thread-19985] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:50:20.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:50:21.194 [DEBUG] [Thread-19985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:50:21.195 [DEBUG] [Thread-19985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:50:21.195 [DEBUG] [Thread-19985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:50:21.236 [DEBUG] [Thread-19985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:50:21.236 [DEBUG] [Thread-19985] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:50:21.239 [DEBUG] [Thread-19985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:50:21.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:50:21.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:50:21.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:50:21.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:50:21.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:50:21.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:50:21.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:50:21.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:50:21.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:50:21.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.492846 -999.00  +13.90  11.43     64   +7.20 1 2 1 1 1   888    0 7.88 51.22 ----- 17.7 11.4 13.5 17.5 21.1 -25.3 19.9 -24.4 20.3 -21.6 21.5 -25.2
2026-04-15T13:50:21.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:50:21.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:50:21.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.492846
2026-04-15T13:50:21.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:50:21.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:50:21.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:50:21.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:50:21.264 [DEBUG] [Thread-19985] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:50:21.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:50:21.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:49:56', tmtdew=8.26805, humidity=57.5888, cloud=0.0, wind=13.9565, temperature=14.2305, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:49:41.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:50:21.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:50:21.521 [DEBUG] [Thread-19988] [transport.py] [_log()] starting thread (client mode): 0xf13c85e0
2026-04-15T13:50:21.521 [DEBUG] [Thread-19988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:50:21.535 [DEBUG] [Thread-19988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:50:21.535 [INFO] [Thread-19988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:50:21.542 [DEBUG] [Thread-19988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:50:21.542 [DEBUG] [Thread-19988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] client lang: <none>
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] server lang: <none>
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] kex follows: False
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] Compression: none
2026-04-15T13:50:21.543 [DEBUG] [Thread-19988] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:50:21.597 [DEBUG] [Thread-19988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:50:21.598 [DEBUG] [Thread-19988] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:50:21.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:50:21.598 [DEBUG] [Thread-19988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:50:21.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:50:21.655 [DEBUG] [Thread-19988] [transport.py] [_log()] userauth is OK
2026-04-15T13:50:21.655 [DEBUG] [Thread-19988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:50:21.655 [DEBUG] [Thread-19988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:50:21.655 [DEBUG] [Thread-19988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:50:21.655 [DEBUG] [Thread-19988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:50:21.674 [INFO] [Thread-19988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:50:21.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:50:21.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:50:22.490 [DEBUG] [Thread-19988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:50:22.490 [DEBUG] [Thread-19988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:50:22.538 [DEBUG] [Thread-19988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:50:22.538 [DEBUG] [Thread-19988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:50:22.547 [DEBUG] [Thread-19988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:50:22.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13: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')
2026-04-15T13:50:22.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
2026-04-15T13:50:22.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:50:22.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:50:22.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:50:22.582 [DEBUG] [Thread-19988] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:50:23.650 [DEBUG] [Thread-19990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:50:34.820 [DEBUG] [Thread-19991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:50:49.864 [DEBUG] [Thread-19992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:50:52.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:50:52.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:50:52.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
2026-04-15T13:50:53.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 50, 32), 8.2127, 57.8208, 0.0, 11.6986, 14.2968, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:50:53.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:50:32
2026-04-15T13:50:54.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:50:54.730 [DEBUG] [Thread-19993] [transport.py] [_log()] starting thread (client mode): 0xf13edbd0
2026-04-15T13:50:54.730 [DEBUG] [Thread-19993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:50:54.749 [DEBUG] [Thread-19993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:50:54.749 [INFO] [Thread-19993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:50:54.752 [DEBUG] [Thread-19993] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:50:54.752 [DEBUG] [Thread-19993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:50:54.752 [DEBUG] [Thread-19993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:50:54.753 [DEBUG] [Thread-19993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:50:54.753 [DEBUG] [Thread-19993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:50:54.753 [DEBUG] [Thread-19993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:50:54.753 [DEBUG] [Thread-19993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:50:54.753 [DEBUG] [Thread-19993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:50:54.753 [DEBUG] [Thread-19993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:50:54.753 [DEBUG] [Thread-19993] [transport.py] [_log()] client lang: <none>
2026-04-15T13:50:54.753 [DEBUG] [Thread-19993] [transport.py] [_log()] server lang: <none>
2026-04-15T13:50:54.753 [DEBUG] [Thread-19993] [transport.py] [_log()] kex follows: False
2026-04-15T13:50:54.753 [DEBUG] [Thread-19993] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:50:54.753 [DEBUG] [Thread-19993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:50:54.753 [DEBUG] [Thread-19993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:50:54.753 [DEBUG] [Thread-19993] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:50:54.754 [DEBUG] [Thread-19993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:50:54.754 [DEBUG] [Thread-19993] [transport.py] [_log()] Compression: none
2026-04-15T13:50:54.754 [DEBUG] [Thread-19993] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:50:54.770 [DEBUG] [Thread-19993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:50:54.770 [DEBUG] [Thread-19993] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:50:54.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:50:54.771 [DEBUG] [Thread-19993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:50:54.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:50:54.772 [DEBUG] [Thread-19993] [transport.py] [_log()] userauth is OK
2026-04-15T13:50:54.772 [DEBUG] [Thread-19993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:50:54.772 [DEBUG] [Thread-19993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:50:54.772 [DEBUG] [Thread-19993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:50:54.772 [DEBUG] [Thread-19993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:50:54.792 [INFO] [Thread-19993] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:50:54.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:50:55.370 [DEBUG] [Thread-19993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:50:55.371 [DEBUG] [Thread-19993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:50:55.371 [DEBUG] [Thread-19993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:50:55.411 [DEBUG] [Thread-19993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:50:55.411 [DEBUG] [Thread-19993] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:50:55.414 [DEBUG] [Thread-19993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:50:55.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:50:55.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:50:55.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:50:55.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:50:55.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:50:55.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:50:55.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:50:55.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:50:55.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:50:55.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.493540 -999.00  +14.10  13.56     66   +7.80 1 2 1 1 1   888    0 7.87 49.27 ----- 17.9 13.6 332.8 24.2 21.0 -25.2 19.6 -23.9 20.3 -20.0 21.4 -22.6
2026-04-15T13:50:55.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:50:55.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:50:55.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.493540
2026-04-15T13:50:55.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:50:55.439 [DEBUG] [Thread-19993] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:50:55.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:50:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:50:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:50:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:50:55.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:50:32', tmtdew=8.2127, humidity=57.8208, cloud=0.0, wind=11.6986, temperature=14.2968, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:50:41.856', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:50:55.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:50:55.696 [DEBUG] [Thread-19996] [transport.py] [_log()] starting thread (client mode): 0xee9e7b50
2026-04-15T13:50:55.696 [DEBUG] [Thread-19996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:50:55.710 [DEBUG] [Thread-19996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:50:55.710 [INFO] [Thread-19996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:50:55.717 [DEBUG] [Thread-19996] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:50:55.717 [DEBUG] [Thread-19996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:50:55.717 [DEBUG] [Thread-19996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:50:55.718 [DEBUG] [Thread-19996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:50:55.718 [DEBUG] [Thread-19996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:50:55.718 [DEBUG] [Thread-19996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:50:55.718 [DEBUG] [Thread-19996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:50:55.718 [DEBUG] [Thread-19996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:50:55.718 [DEBUG] [Thread-19996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:50:55.718 [DEBUG] [Thread-19996] [transport.py] [_log()] client lang: <none>
2026-04-15T13:50:55.718 [DEBUG] [Thread-19996] [transport.py] [_log()] server lang: <none>
2026-04-15T13:50:55.718 [DEBUG] [Thread-19996] [transport.py] [_log()] kex follows: False
2026-04-15T13:50:55.718 [DEBUG] [Thread-19996] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:50:55.718 [DEBUG] [Thread-19996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:50:55.718 [DEBUG] [Thread-19996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:50:55.719 [DEBUG] [Thread-19996] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:50:55.719 [DEBUG] [Thread-19996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:50:55.719 [DEBUG] [Thread-19996] [transport.py] [_log()] Compression: none
2026-04-15T13:50:55.719 [DEBUG] [Thread-19996] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:50:55.774 [DEBUG] [Thread-19996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:50:55.775 [DEBUG] [Thread-19996] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:50:55.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:50:55.775 [DEBUG] [Thread-19996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:50:55.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:50:55.831 [DEBUG] [Thread-19996] [transport.py] [_log()] userauth is OK
2026-04-15T13:50:55.831 [DEBUG] [Thread-19996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:50:55.831 [DEBUG] [Thread-19996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:50:55.832 [DEBUG] [Thread-19996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:50:55.832 [DEBUG] [Thread-19996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:50:55.856 [INFO] [Thread-19996] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:50:55.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:50:55.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:50:56.658 [DEBUG] [Thread-19996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:50:56.659 [DEBUG] [Thread-19996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:50:56.706 [DEBUG] [Thread-19996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:50:56.706 [DEBUG] [Thread-19996] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:50:56.715 [DEBUG] [Thread-19996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:50:56.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:50:56.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')
2026-04-15T13:50:56.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
2026-04-15T13:50:56.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:50:56.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:50:56.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:50:56.750 [DEBUG] [Thread-19996] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:50:58.081 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:50:58.082 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:51:04.896 [DEBUG] [Thread-19998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:51:19.940 [DEBUG] [Thread-19999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:51:23.741 [DEBUG] [Thread-20000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:51:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:51:26.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:51:26.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
2026-04-15T13:51:28.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 51, 8), 8.31109, 57.4562, 0.0, 14.3269, 14.363, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:51:28.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:51:08
2026-04-15T13:51:28.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:51:28.802 [DEBUG] [Thread-20001] [transport.py] [_log()] starting thread (client mode): 0xf13ec160
2026-04-15T13:51:28.803 [DEBUG] [Thread-20001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:51:28.824 [DEBUG] [Thread-20001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:51:28.824 [INFO] [Thread-20001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:51:28.826 [DEBUG] [Thread-20001] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:51:28.826 [DEBUG] [Thread-20001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:51:28.826 [DEBUG] [Thread-20001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:51:28.826 [DEBUG] [Thread-20001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:51:28.826 [DEBUG] [Thread-20001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:51:28.826 [DEBUG] [Thread-20001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:51:28.827 [DEBUG] [Thread-20001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:51:28.827 [DEBUG] [Thread-20001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:51:28.827 [DEBUG] [Thread-20001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:51:28.827 [DEBUG] [Thread-20001] [transport.py] [_log()] client lang: <none>
2026-04-15T13:51:28.827 [DEBUG] [Thread-20001] [transport.py] [_log()] server lang: <none>
2026-04-15T13:51:28.827 [DEBUG] [Thread-20001] [transport.py] [_log()] kex follows: False
2026-04-15T13:51:28.827 [DEBUG] [Thread-20001] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:51:28.827 [DEBUG] [Thread-20001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:51:28.827 [DEBUG] [Thread-20001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:51:28.827 [DEBUG] [Thread-20001] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:51:28.827 [DEBUG] [Thread-20001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:51:28.827 [DEBUG] [Thread-20001] [transport.py] [_log()] Compression: none
2026-04-15T13:51:28.827 [DEBUG] [Thread-20001] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:51:28.838 [DEBUG] [Thread-20001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:51:28.838 [DEBUG] [Thread-20001] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:51:28.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:51:28.839 [DEBUG] [Thread-20001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:51:28.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:51:28.840 [DEBUG] [Thread-20001] [transport.py] [_log()] userauth is OK
2026-04-15T13:51:28.840 [DEBUG] [Thread-20001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:51:28.840 [DEBUG] [Thread-20001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:51:28.840 [DEBUG] [Thread-20001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:51:28.840 [DEBUG] [Thread-20001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:51:28.858 [INFO] [Thread-20001] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:51:28.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:51:29.489 [DEBUG] [Thread-20001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:51:29.490 [DEBUG] [Thread-20001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:51:29.490 [DEBUG] [Thread-20001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:51:29.531 [DEBUG] [Thread-20001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:51:29.531 [DEBUG] [Thread-20001] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:51:29.534 [DEBUG] [Thread-20001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:51:29.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:51:29.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:51:29.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:51:29.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:51:29.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:51:29.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:51:29.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:51:29.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:51:29.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:51:29.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.493887 -999.00  +14.30  16.88     65   +7.90 1 2 1 1 1   888    0 7.67 44.00 ----- 19.1 16.9 348.9 25.2 21.1 -24.9 19.8 -23.6 20.4 -20.1 21.5 -22.7
2026-04-15T13:51:29.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:51:29.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:51:29.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.493887
2026-04-15T13:51:29.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:51:29.558 [DEBUG] [Thread-20001] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:51:29.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:51:29.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:51:29.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:51:29.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:51:29.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:51:08', tmtdew=8.31109, humidity=57.4562, cloud=0.0, wind=14.3269, temperature=14.363, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:51:11.837', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:51:29.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:51:29.808 [DEBUG] [Thread-20004] [transport.py] [_log()] starting thread (client mode): 0xf13caad0
2026-04-15T13:51:29.808 [DEBUG] [Thread-20004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:51:29.822 [DEBUG] [Thread-20004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:51:29.822 [INFO] [Thread-20004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:51:29.829 [DEBUG] [Thread-20004] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:51:29.830 [DEBUG] [Thread-20004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:51:29.830 [DEBUG] [Thread-20004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:51:29.830 [DEBUG] [Thread-20004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:51:29.830 [DEBUG] [Thread-20004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:51:29.830 [DEBUG] [Thread-20004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:51:29.830 [DEBUG] [Thread-20004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:51:29.830 [DEBUG] [Thread-20004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:51:29.830 [DEBUG] [Thread-20004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:51:29.830 [DEBUG] [Thread-20004] [transport.py] [_log()] client lang: <none>
2026-04-15T13:51:29.830 [DEBUG] [Thread-20004] [transport.py] [_log()] server lang: <none>
2026-04-15T13:51:29.830 [DEBUG] [Thread-20004] [transport.py] [_log()] kex follows: False
2026-04-15T13:51:29.830 [DEBUG] [Thread-20004] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:51:29.831 [DEBUG] [Thread-20004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:51:29.831 [DEBUG] [Thread-20004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:51:29.831 [DEBUG] [Thread-20004] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:51:29.831 [DEBUG] [Thread-20004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:51:29.831 [DEBUG] [Thread-20004] [transport.py] [_log()] Compression: none
2026-04-15T13:51:29.831 [DEBUG] [Thread-20004] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:51:29.886 [DEBUG] [Thread-20004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:51:29.887 [DEBUG] [Thread-20004] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:51:29.887 [DEBUG] [Thread-20004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:51:29.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:51:29.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:51:29.951 [DEBUG] [Thread-20004] [transport.py] [_log()] userauth is OK
2026-04-15T13:51:29.951 [DEBUG] [Thread-20004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:51:29.951 [DEBUG] [Thread-20004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:51:29.951 [DEBUG] [Thread-20004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:51:29.951 [DEBUG] [Thread-20004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:51:29.976 [INFO] [Thread-20004] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:51:29.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:51:29.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:51:30.792 [DEBUG] [Thread-20004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:51:30.793 [DEBUG] [Thread-20004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:51:30.841 [DEBUG] [Thread-20004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:51:30.841 [DEBUG] [Thread-20004] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:51:30.851 [DEBUG] [Thread-20004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:51:30.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:51:30.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')
2026-04-15T13:51: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
2026-04-15T13:51:30.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:51:30.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:51:30.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:51:30.886 [DEBUG] [Thread-20004] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:51:34.971 [DEBUG] [Thread-20006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:51:50.020 [DEBUG] [Thread-20007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:51:58.223 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:51:58.224 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:52:00.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:52:00.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:52:00.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
2026-04-15T13:52:02.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 51, 44), 8.73109, 55.9454, 0.0, 25.6169, 15.3912, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:52:02.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:51:44
2026-04-15T13:52:02.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:52:03.213 [DEBUG] [Thread-20008] [transport.py] [_log()] starting thread (client mode): 0xee9ac250
2026-04-15T13:52:03.213 [DEBUG] [Thread-20008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:52:03.232 [DEBUG] [Thread-20008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:52:03.232 [INFO] [Thread-20008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:52:03.235 [DEBUG] [Thread-20008] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:52:03.235 [DEBUG] [Thread-20008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:52:03.235 [DEBUG] [Thread-20008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:52:03.235 [DEBUG] [Thread-20008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:52:03.235 [DEBUG] [Thread-20008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:52:03.235 [DEBUG] [Thread-20008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:52:03.235 [DEBUG] [Thread-20008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:52:03.235 [DEBUG] [Thread-20008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:52:03.235 [DEBUG] [Thread-20008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:52:03.235 [DEBUG] [Thread-20008] [transport.py] [_log()] client lang: <none>
2026-04-15T13:52:03.236 [DEBUG] [Thread-20008] [transport.py] [_log()] server lang: <none>
2026-04-15T13:52:03.236 [DEBUG] [Thread-20008] [transport.py] [_log()] kex follows: False
2026-04-15T13:52:03.236 [DEBUG] [Thread-20008] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:52:03.236 [DEBUG] [Thread-20008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:52:03.236 [DEBUG] [Thread-20008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:52:03.236 [DEBUG] [Thread-20008] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:52:03.236 [DEBUG] [Thread-20008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:52:03.236 [DEBUG] [Thread-20008] [transport.py] [_log()] Compression: none
2026-04-15T13:52:03.236 [DEBUG] [Thread-20008] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:52:03.253 [DEBUG] [Thread-20008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:52:03.254 [DEBUG] [Thread-20008] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:52:03.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:52:03.254 [DEBUG] [Thread-20008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:52:03.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:52:03.255 [DEBUG] [Thread-20008] [transport.py] [_log()] userauth is OK
2026-04-15T13:52:03.255 [DEBUG] [Thread-20008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:52:03.255 [DEBUG] [Thread-20008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:52:03.255 [DEBUG] [Thread-20008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:52:03.255 [DEBUG] [Thread-20008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:52:03.287 [INFO] [Thread-20008] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:52:03.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:52:03.877 [DEBUG] [Thread-20008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:52:03.877 [DEBUG] [Thread-20008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:52:03.877 [DEBUG] [Thread-20008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:52:03.918 [DEBUG] [Thread-20008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:52:03.918 [DEBUG] [Thread-20008] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:52:03.921 [DEBUG] [Thread-20008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:52:03.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:52:03.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:52:03.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:52:03.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:52:03.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:52:03.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:52:03.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:52:03.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:52:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:52:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.494235 -999.00  +14.90  18.94     65   +8.50 1 2 1 1 1   888    0 7.59 39.53 ----- 20.8 18.9 317.4 27.2 21.1 -24.7 19.9 -23.5 20.4 -19.9 21.6 -22.4
2026-04-15T13:52:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:52:03.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:52:03.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.494235
2026-04-15T13:52:03.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:52:03.947 [DEBUG] [Thread-20008] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:52:03.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:52:03.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:52:03.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:52:03.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:52:03.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:51:44', tmtdew=8.73109, humidity=55.9454, cloud=0.0, wind=25.6169, temperature=15.3912, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:51:41.904', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:52:04.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:52:04.208 [DEBUG] [Thread-20011] [transport.py] [_log()] starting thread (client mode): 0xee9af190
2026-04-15T13:52:04.208 [DEBUG] [Thread-20011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:52:04.222 [DEBUG] [Thread-20011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:52:04.222 [INFO] [Thread-20011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:52:04.230 [DEBUG] [Thread-20011] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:52:04.230 [DEBUG] [Thread-20011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:52:04.230 [DEBUG] [Thread-20011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:52:04.230 [DEBUG] [Thread-20011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:52:04.230 [DEBUG] [Thread-20011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:52:04.230 [DEBUG] [Thread-20011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:52:04.231 [DEBUG] [Thread-20011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:52:04.231 [DEBUG] [Thread-20011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:52:04.231 [DEBUG] [Thread-20011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:52:04.231 [DEBUG] [Thread-20011] [transport.py] [_log()] client lang: <none>
2026-04-15T13:52:04.231 [DEBUG] [Thread-20011] [transport.py] [_log()] server lang: <none>
2026-04-15T13:52:04.231 [DEBUG] [Thread-20011] [transport.py] [_log()] kex follows: False
2026-04-15T13:52:04.231 [DEBUG] [Thread-20011] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:52:04.231 [DEBUG] [Thread-20011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:52:04.231 [DEBUG] [Thread-20011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:52:04.231 [DEBUG] [Thread-20011] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:52:04.231 [DEBUG] [Thread-20011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:52:04.232 [DEBUG] [Thread-20011] [transport.py] [_log()] Compression: none
2026-04-15T13:52:04.232 [DEBUG] [Thread-20011] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:52:04.288 [DEBUG] [Thread-20011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:52:04.289 [DEBUG] [Thread-20011] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:52:04.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:52:04.289 [DEBUG] [Thread-20011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:52:04.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:52:04.347 [DEBUG] [Thread-20011] [transport.py] [_log()] userauth is OK
2026-04-15T13:52:04.347 [DEBUG] [Thread-20011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:52:04.348 [DEBUG] [Thread-20011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:52:04.348 [DEBUG] [Thread-20011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:52:04.348 [DEBUG] [Thread-20011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:52:04.374 [INFO] [Thread-20011] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:52:04.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:52:04.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:52:05.051 [DEBUG] [Thread-20013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:52:05.213 [DEBUG] [Thread-20011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:52:05.214 [DEBUG] [Thread-20011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:52:05.261 [DEBUG] [Thread-20011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:52:05.261 [DEBUG] [Thread-20011] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:52:05.270 [DEBUG] [Thread-20011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:52:05.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:52:05.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')
2026-04-15T13:52:05.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
2026-04-15T13:52:05.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:52:05.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:52:05.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:52:05.304 [DEBUG] [Thread-20011] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:52:20.097 [DEBUG] [Thread-20014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:52:23.834 [DEBUG] [Thread-20015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:52:35.129 [DEBUG] [Thread-20016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:52:35.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:52:35.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:52:35.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
2026-04-15T13:52:36.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 52, 19), 8.59282, 56.2767, 0.0, 20.7324, 14.5627, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:52:36.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:52:19
2026-04-15T13:52:37.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:52:37.484 [DEBUG] [Thread-20017] [transport.py] [_log()] starting thread (client mode): 0xee9af700
2026-04-15T13:52:37.484 [DEBUG] [Thread-20017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:52:37.504 [DEBUG] [Thread-20017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:52:37.504 [INFO] [Thread-20017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:52:37.507 [DEBUG] [Thread-20017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:52:37.507 [DEBUG] [Thread-20017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:52:37.507 [DEBUG] [Thread-20017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:52:37.507 [DEBUG] [Thread-20017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:52:37.507 [DEBUG] [Thread-20017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:52:37.507 [DEBUG] [Thread-20017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:52:37.507 [DEBUG] [Thread-20017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:52:37.507 [DEBUG] [Thread-20017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:52:37.507 [DEBUG] [Thread-20017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:52:37.507 [DEBUG] [Thread-20017] [transport.py] [_log()] client lang: <none>
2026-04-15T13:52:37.507 [DEBUG] [Thread-20017] [transport.py] [_log()] server lang: <none>
2026-04-15T13:52:37.507 [DEBUG] [Thread-20017] [transport.py] [_log()] kex follows: False
2026-04-15T13:52:37.507 [DEBUG] [Thread-20017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:52:37.508 [DEBUG] [Thread-20017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:52:37.508 [DEBUG] [Thread-20017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:52:37.508 [DEBUG] [Thread-20017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:52:37.508 [DEBUG] [Thread-20017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:52:37.508 [DEBUG] [Thread-20017] [transport.py] [_log()] Compression: none
2026-04-15T13:52:37.508 [DEBUG] [Thread-20017] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:52:37.524 [DEBUG] [Thread-20017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:52:37.524 [DEBUG] [Thread-20017] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:52:37.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:52:37.525 [DEBUG] [Thread-20017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:52:37.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:52:37.526 [DEBUG] [Thread-20017] [transport.py] [_log()] userauth is OK
2026-04-15T13:52:37.526 [DEBUG] [Thread-20017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:52:37.526 [DEBUG] [Thread-20017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:52:37.526 [DEBUG] [Thread-20017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:52:37.526 [DEBUG] [Thread-20017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:52:37.541 [INFO] [Thread-20017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:52:37.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:52:38.314 [DEBUG] [Thread-20017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:52:38.314 [DEBUG] [Thread-20017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:52:38.315 [DEBUG] [Thread-20017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:52:38.355 [DEBUG] [Thread-20017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:52:38.355 [DEBUG] [Thread-20017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:52:38.358 [DEBUG] [Thread-20017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:52:38.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:52:38.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:52:38.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:52:38.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:52:38.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:52:38.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:52:38.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:52:38.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:52:38.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:52:38.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.494582 -999.00  +14.80  17.38     64   +8.00 1 2 1 1 1   888    0 7.62 40.72 ----- 23.9 17.4 334.0 27.8 21.1 -25.7 20.0 -24.1 20.4 -20.5 21.7 -22.6
2026-04-15T13:52:38.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:52:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:52:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.494582
2026-04-15T13:52:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:52:38.384 [DEBUG] [Thread-20017] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:52:38.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:52:38.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:52:38.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:52:38.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:52:38.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:52:19', tmtdew=8.59282, humidity=56.2767, cloud=0.0, wind=20.7324, temperature=14.5627, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:52:11.885', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:52:38.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:52:38.632 [DEBUG] [Thread-20020] [transport.py] [_log()] starting thread (client mode): 0xf13ee950
2026-04-15T13:52:38.632 [DEBUG] [Thread-20020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:52:38.647 [DEBUG] [Thread-20020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:52:38.647 [INFO] [Thread-20020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:52:38.654 [DEBUG] [Thread-20020] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:52:38.654 [DEBUG] [Thread-20020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:52:38.654 [DEBUG] [Thread-20020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:52:38.654 [DEBUG] [Thread-20020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:52:38.654 [DEBUG] [Thread-20020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:52:38.654 [DEBUG] [Thread-20020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:52:38.655 [DEBUG] [Thread-20020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:52:38.655 [DEBUG] [Thread-20020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:52:38.655 [DEBUG] [Thread-20020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:52:38.655 [DEBUG] [Thread-20020] [transport.py] [_log()] client lang: <none>
2026-04-15T13:52:38.655 [DEBUG] [Thread-20020] [transport.py] [_log()] server lang: <none>
2026-04-15T13:52:38.655 [DEBUG] [Thread-20020] [transport.py] [_log()] kex follows: False
2026-04-15T13:52:38.655 [DEBUG] [Thread-20020] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:52:38.655 [DEBUG] [Thread-20020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:52:38.655 [DEBUG] [Thread-20020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:52:38.655 [DEBUG] [Thread-20020] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:52:38.655 [DEBUG] [Thread-20020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:52:38.655 [DEBUG] [Thread-20020] [transport.py] [_log()] Compression: none
2026-04-15T13:52:38.656 [DEBUG] [Thread-20020] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:52:38.717 [DEBUG] [Thread-20020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:52:38.718 [DEBUG] [Thread-20020] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:52:38.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:52:38.718 [DEBUG] [Thread-20020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:52:38.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:52:38.775 [DEBUG] [Thread-20020] [transport.py] [_log()] userauth is OK
2026-04-15T13:52:38.776 [DEBUG] [Thread-20020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:52:38.776 [DEBUG] [Thread-20020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:52:38.776 [DEBUG] [Thread-20020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:52:38.776 [DEBUG] [Thread-20020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:52:38.804 [INFO] [Thread-20020] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:52:38.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:52:38.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:52:39.634 [DEBUG] [Thread-20020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:52:39.634 [DEBUG] [Thread-20020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:52:39.682 [DEBUG] [Thread-20020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:52:39.682 [DEBUG] [Thread-20020] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:52:39.691 [DEBUG] [Thread-20020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:52:39.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:52:39.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')
2026-04-15T13:52:39.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
2026-04-15T13:52:39.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:52:39.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:52:39.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:52:39.726 [DEBUG] [Thread-20020] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:52:50.161 [DEBUG] [Thread-20022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:52:58.364 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:52:58.365 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:53:05.199 [DEBUG] [Thread-20023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:53:09.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:53:09.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:53:09.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
2026-04-15T13:53:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 52, 54), 8.20039, 58.0058, 0.0, 17.5741, 14.1461, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:53:11.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:52:54
2026-04-15T13:53:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:53:11.917 [DEBUG] [Thread-20024] [transport.py] [_log()] starting thread (client mode): 0xee9071f0
2026-04-15T13:53:11.918 [DEBUG] [Thread-20024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:53:11.938 [DEBUG] [Thread-20024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:53:11.939 [INFO] [Thread-20024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:53:11.942 [DEBUG] [Thread-20024] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:53:11.942 [DEBUG] [Thread-20024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:53:11.942 [DEBUG] [Thread-20024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:53:11.942 [DEBUG] [Thread-20024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:53:11.942 [DEBUG] [Thread-20024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:53:11.942 [DEBUG] [Thread-20024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:53:11.942 [DEBUG] [Thread-20024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:53:11.942 [DEBUG] [Thread-20024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:53:11.942 [DEBUG] [Thread-20024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:53:11.942 [DEBUG] [Thread-20024] [transport.py] [_log()] client lang: <none>
2026-04-15T13:53:11.942 [DEBUG] [Thread-20024] [transport.py] [_log()] server lang: <none>
2026-04-15T13:53:11.942 [DEBUG] [Thread-20024] [transport.py] [_log()] kex follows: False
2026-04-15T13:53:11.942 [DEBUG] [Thread-20024] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:53:11.943 [DEBUG] [Thread-20024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:53:11.943 [DEBUG] [Thread-20024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:53:11.943 [DEBUG] [Thread-20024] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:53:11.943 [DEBUG] [Thread-20024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:53:11.943 [DEBUG] [Thread-20024] [transport.py] [_log()] Compression: none
2026-04-15T13:53:11.943 [DEBUG] [Thread-20024] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:53:11.961 [DEBUG] [Thread-20024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:53:11.961 [DEBUG] [Thread-20024] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:53:11.962 [DEBUG] [Thread-20024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:53:11.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:53:11.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:53:11.963 [DEBUG] [Thread-20024] [transport.py] [_log()] userauth is OK
2026-04-15T13:53:11.963 [DEBUG] [Thread-20024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:53:11.963 [DEBUG] [Thread-20024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:53:11.963 [DEBUG] [Thread-20024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:53:11.963 [DEBUG] [Thread-20024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:53:11.980 [INFO] [Thread-20024] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:53:11.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:53:12.756 [DEBUG] [Thread-20024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:53:12.756 [DEBUG] [Thread-20024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:53:12.757 [DEBUG] [Thread-20024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:53:12.797 [DEBUG] [Thread-20024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:53:12.797 [DEBUG] [Thread-20024] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:53:12.800 [DEBUG] [Thread-20024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:53:12.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:53:12.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:53:12.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:53:12.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:53:12.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:53:12.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:53:12.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:53:12.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:53:12.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:53:12.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.494929 -999.00  +14.20  22.36     63   +7.20 1 2 1 1 1   888    0 7.72 42.96 ----- 22.0 22.4 332.4 28.9 21.1 -25.3 19.9 -23.9 20.4 -21.7 21.7 -23.6
2026-04-15T13:53:12.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:53:12.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:53:12.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.494929
2026-04-15T13:53:12.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:53:12.824 [DEBUG] [Thread-20024] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:53:12.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:53:12.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:53:12.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:53:12.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:53:12.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:52:54', tmtdew=8.20039, humidity=58.0058, cloud=0.0, wind=17.5741, temperature=14.1461, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:52:41.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:53:13.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:53:13.079 [DEBUG] [Thread-20027] [transport.py] [_log()] starting thread (client mode): 0xee9e5750
2026-04-15T13:53:13.080 [DEBUG] [Thread-20027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:53:13.094 [DEBUG] [Thread-20027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:53:13.094 [INFO] [Thread-20027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:53:13.101 [DEBUG] [Thread-20027] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:53:13.102 [DEBUG] [Thread-20027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:53:13.102 [DEBUG] [Thread-20027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:53:13.102 [DEBUG] [Thread-20027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:53:13.102 [DEBUG] [Thread-20027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:53:13.102 [DEBUG] [Thread-20027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:53:13.102 [DEBUG] [Thread-20027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:53:13.102 [DEBUG] [Thread-20027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:53:13.102 [DEBUG] [Thread-20027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:53:13.102 [DEBUG] [Thread-20027] [transport.py] [_log()] client lang: <none>
2026-04-15T13:53:13.102 [DEBUG] [Thread-20027] [transport.py] [_log()] server lang: <none>
2026-04-15T13:53:13.102 [DEBUG] [Thread-20027] [transport.py] [_log()] kex follows: False
2026-04-15T13:53:13.102 [DEBUG] [Thread-20027] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:53:13.103 [DEBUG] [Thread-20027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:53:13.103 [DEBUG] [Thread-20027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:53:13.103 [DEBUG] [Thread-20027] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:53:13.103 [DEBUG] [Thread-20027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:53:13.103 [DEBUG] [Thread-20027] [transport.py] [_log()] Compression: none
2026-04-15T13:53:13.103 [DEBUG] [Thread-20027] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:53:13.159 [DEBUG] [Thread-20027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:53:13.159 [DEBUG] [Thread-20027] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:53:13.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:53:13.160 [DEBUG] [Thread-20027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:53:13.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:53:13.215 [DEBUG] [Thread-20027] [transport.py] [_log()] userauth is OK
2026-04-15T13:53:13.215 [DEBUG] [Thread-20027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:53:13.216 [DEBUG] [Thread-20027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:53:13.216 [DEBUG] [Thread-20027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:53:13.216 [DEBUG] [Thread-20027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:53:13.241 [INFO] [Thread-20027] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:53:13.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:53:13.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:53:14.062 [DEBUG] [Thread-20027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:53:14.062 [DEBUG] [Thread-20027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:53:14.110 [DEBUG] [Thread-20027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:53:14.110 [DEBUG] [Thread-20027] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:53:14.119 [DEBUG] [Thread-20027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:53:14.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:53:14.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')
2026-04-15T13:53:14.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
2026-04-15T13:53:14.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:53:14.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:53:14.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:53:14.153 [DEBUG] [Thread-20027] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:53:20.231 [DEBUG] [Thread-20029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:53:23.910 [DEBUG] [Thread-20030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:53:35.275 [DEBUG] [Thread-20031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:53:44.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:53:44.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:53:44.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
2026-04-15T13:53:45.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 53, 31), 8.11384, 58.3538, 0.0, 17.2037, 14.1958, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:53:45.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:53:31
2026-04-15T13:53:45.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:53:46.322 [DEBUG] [Thread-20032] [transport.py] [_log()] starting thread (client mode): 0xf13ee770
2026-04-15T13:53:46.322 [DEBUG] [Thread-20032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:53:46.340 [DEBUG] [Thread-20032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:53:46.341 [INFO] [Thread-20032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:53:46.342 [DEBUG] [Thread-20032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:53:46.342 [DEBUG] [Thread-20032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:53:46.342 [DEBUG] [Thread-20032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:53:46.342 [DEBUG] [Thread-20032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:53:46.342 [DEBUG] [Thread-20032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:53:46.342 [DEBUG] [Thread-20032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:53:46.342 [DEBUG] [Thread-20032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:53:46.342 [DEBUG] [Thread-20032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:53:46.343 [DEBUG] [Thread-20032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:53:46.343 [DEBUG] [Thread-20032] [transport.py] [_log()] client lang: <none>
2026-04-15T13:53:46.343 [DEBUG] [Thread-20032] [transport.py] [_log()] server lang: <none>
2026-04-15T13:53:46.343 [DEBUG] [Thread-20032] [transport.py] [_log()] kex follows: False
2026-04-15T13:53:46.343 [DEBUG] [Thread-20032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:53:46.343 [DEBUG] [Thread-20032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:53:46.343 [DEBUG] [Thread-20032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:53:46.343 [DEBUG] [Thread-20032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:53:46.343 [DEBUG] [Thread-20032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:53:46.343 [DEBUG] [Thread-20032] [transport.py] [_log()] Compression: none
2026-04-15T13:53:46.343 [DEBUG] [Thread-20032] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:53:46.352 [DEBUG] [Thread-20032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:53:46.352 [DEBUG] [Thread-20032] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:53:46.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:53:46.353 [DEBUG] [Thread-20032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:53:46.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:53:46.354 [DEBUG] [Thread-20032] [transport.py] [_log()] userauth is OK
2026-04-15T13:53:46.354 [DEBUG] [Thread-20032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:53:46.354 [DEBUG] [Thread-20032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:53:46.354 [DEBUG] [Thread-20032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:53:46.354 [DEBUG] [Thread-20032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:53:46.367 [INFO] [Thread-20032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:53:46.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:53:47.119 [DEBUG] [Thread-20032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:53:47.119 [DEBUG] [Thread-20032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:53:47.120 [DEBUG] [Thread-20032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:53:47.160 [DEBUG] [Thread-20032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:53:47.160 [DEBUG] [Thread-20032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:53:47.163 [DEBUG] [Thread-20032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:53:47.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:53:47.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:53:47.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:53:47.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:53:47.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:53:47.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:53:47.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:53:47.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:53:47.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:53:47.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.495276 -999.00  +13.80  21.90     64   +7.10 1 2 1 1 1   888    0 7.55 41.31 ----- 15.6 21.9 7.2 26.5 21.1 -25.9 19.9 -23.9 20.4 -21.5 21.6 -23.5
2026-04-15T13:53:47.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:53:47.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:53:47.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.495276
2026-04-15T13:53:47.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:53:47.187 [DEBUG] [Thread-20032] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:53:47.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:53:47.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:53:47.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:53:47.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:53:47.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:53:31', tmtdew=8.11384, humidity=58.3538, cloud=0.0, wind=17.2037, temperature=14.1958, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:53:11.846', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:53:47.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:53:47.445 [DEBUG] [Thread-20035] [transport.py] [_log()] starting thread (client mode): 0xee9034c0
2026-04-15T13:53:47.446 [DEBUG] [Thread-20035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:53:47.460 [DEBUG] [Thread-20035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:53:47.460 [INFO] [Thread-20035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:53:47.467 [DEBUG] [Thread-20035] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:53:47.467 [DEBUG] [Thread-20035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:53:47.467 [DEBUG] [Thread-20035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:53:47.467 [DEBUG] [Thread-20035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:53:47.468 [DEBUG] [Thread-20035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:53:47.468 [DEBUG] [Thread-20035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:53:47.468 [DEBUG] [Thread-20035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:53:47.468 [DEBUG] [Thread-20035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:53:47.468 [DEBUG] [Thread-20035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:53:47.468 [DEBUG] [Thread-20035] [transport.py] [_log()] client lang: <none>
2026-04-15T13:53:47.468 [DEBUG] [Thread-20035] [transport.py] [_log()] server lang: <none>
2026-04-15T13:53:47.468 [DEBUG] [Thread-20035] [transport.py] [_log()] kex follows: False
2026-04-15T13:53:47.468 [DEBUG] [Thread-20035] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:53:47.468 [DEBUG] [Thread-20035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:53:47.468 [DEBUG] [Thread-20035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:53:47.468 [DEBUG] [Thread-20035] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:53:47.469 [DEBUG] [Thread-20035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:53:47.469 [DEBUG] [Thread-20035] [transport.py] [_log()] Compression: none
2026-04-15T13:53:47.469 [DEBUG] [Thread-20035] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:53:47.526 [DEBUG] [Thread-20035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:53:47.527 [DEBUG] [Thread-20035] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:53:47.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:53:47.527 [DEBUG] [Thread-20035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:53:47.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:53:47.583 [DEBUG] [Thread-20035] [transport.py] [_log()] userauth is OK
2026-04-15T13:53:47.584 [DEBUG] [Thread-20035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:53:47.584 [DEBUG] [Thread-20035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:53:47.584 [DEBUG] [Thread-20035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:53:47.584 [DEBUG] [Thread-20035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:53:47.612 [INFO] [Thread-20035] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:53:47.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:53:47.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:53:48.432 [DEBUG] [Thread-20035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:53:48.433 [DEBUG] [Thread-20035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:53:48.480 [DEBUG] [Thread-20035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:53:48.481 [DEBUG] [Thread-20035] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:53:48.490 [DEBUG] [Thread-20035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:53:48.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:53:48.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')
2026-04-15T13:53:48.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
2026-04-15T13:53:48.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:53:48.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:53:48.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:53:48.529 [DEBUG] [Thread-20035] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:53:50.305 [DEBUG] [Thread-20037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:53:58.506 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:53:58.508 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:54:05.344 [DEBUG] [Thread-20038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:54:18.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:54:18.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:54:18.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
2026-04-15T13:54:19.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 54, 8), 8.08413, 58.4697, 0.0, 16.798, 14.1958, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:54:19.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:54:08
2026-04-15T13:54:20.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:54:20.374 [DEBUG] [Thread-20039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:54:20.702 [DEBUG] [Thread-20040] [transport.py] [_log()] starting thread (client mode): 0xee902dd0
2026-04-15T13:54:20.702 [DEBUG] [Thread-20040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:54:20.721 [DEBUG] [Thread-20040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:54:20.722 [INFO] [Thread-20040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:54:20.725 [DEBUG] [Thread-20040] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:54:20.725 [DEBUG] [Thread-20040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:54:20.725 [DEBUG] [Thread-20040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:54:20.725 [DEBUG] [Thread-20040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:54:20.725 [DEBUG] [Thread-20040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:54:20.725 [DEBUG] [Thread-20040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:54:20.725 [DEBUG] [Thread-20040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:54:20.725 [DEBUG] [Thread-20040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:54:20.725 [DEBUG] [Thread-20040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:54:20.726 [DEBUG] [Thread-20040] [transport.py] [_log()] client lang: <none>
2026-04-15T13:54:20.726 [DEBUG] [Thread-20040] [transport.py] [_log()] server lang: <none>
2026-04-15T13:54:20.726 [DEBUG] [Thread-20040] [transport.py] [_log()] kex follows: False
2026-04-15T13:54:20.726 [DEBUG] [Thread-20040] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:54:20.726 [DEBUG] [Thread-20040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:54:20.726 [DEBUG] [Thread-20040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:54:20.726 [DEBUG] [Thread-20040] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:54:20.726 [DEBUG] [Thread-20040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:54:20.726 [DEBUG] [Thread-20040] [transport.py] [_log()] Compression: none
2026-04-15T13:54:20.726 [DEBUG] [Thread-20040] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:54:20.743 [DEBUG] [Thread-20040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:54:20.743 [DEBUG] [Thread-20040] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:54:20.744 [DEBUG] [Thread-20040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:54:20.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:54:20.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:54:20.745 [DEBUG] [Thread-20040] [transport.py] [_log()] userauth is OK
2026-04-15T13:54:20.745 [DEBUG] [Thread-20040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:54:20.745 [DEBUG] [Thread-20040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:54:20.745 [DEBUG] [Thread-20040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:54:20.745 [DEBUG] [Thread-20040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:54:20.763 [INFO] [Thread-20040] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:54:20.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:54:21.635 [DEBUG] [Thread-20040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:54:21.636 [DEBUG] [Thread-20040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:54:21.636 [DEBUG] [Thread-20040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:54:21.676 [DEBUG] [Thread-20040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:54:21.676 [DEBUG] [Thread-20040] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:54:21.679 [DEBUG] [Thread-20040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:54:21.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:54:21.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:54:21.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:54:21.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:54:21.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:54:21.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:54:21.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:54:21.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:54:21.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:54:21.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.495623 -999.00  +13.70  14.39     65   +7.30 1 1 1 1 1   888    0 7.82 43.53 ----- 13.3 14.4 335.4 24.7 20.9 -28.3 19.7 -25.7 20.3 -21.6 21.1 -27.3
2026-04-15T13:54:21.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:54:21.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:54:21.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.495623
2026-04-15T13:54:21.704 [DEBUG] [Thread-20040] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:54:21.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:54:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:54:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:54:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:54:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T13:54:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:54:08', tmtdew=8.08413, humidity=58.4697, cloud=0.0, wind=16.798, temperature=14.1958, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:53:41.827', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:54:21.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:54:21.963 [DEBUG] [Thread-20043] [transport.py] [_log()] starting thread (client mode): 0xee902020
2026-04-15T13:54:21.964 [DEBUG] [Thread-20043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:54:21.978 [DEBUG] [Thread-20043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:54:21.978 [INFO] [Thread-20043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:54:21.986 [DEBUG] [Thread-20043] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:54:21.986 [DEBUG] [Thread-20043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:54:21.986 [DEBUG] [Thread-20043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:54:21.986 [DEBUG] [Thread-20043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:54:21.986 [DEBUG] [Thread-20043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:54:21.987 [DEBUG] [Thread-20043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:54:21.987 [DEBUG] [Thread-20043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:54:21.987 [DEBUG] [Thread-20043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:54:21.987 [DEBUG] [Thread-20043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:54:21.987 [DEBUG] [Thread-20043] [transport.py] [_log()] client lang: <none>
2026-04-15T13:54:21.987 [DEBUG] [Thread-20043] [transport.py] [_log()] server lang: <none>
2026-04-15T13:54:21.987 [DEBUG] [Thread-20043] [transport.py] [_log()] kex follows: False
2026-04-15T13:54:21.987 [DEBUG] [Thread-20043] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:54:21.987 [DEBUG] [Thread-20043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:54:21.987 [DEBUG] [Thread-20043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:54:21.987 [DEBUG] [Thread-20043] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:54:21.988 [DEBUG] [Thread-20043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:54:21.988 [DEBUG] [Thread-20043] [transport.py] [_log()] Compression: none
2026-04-15T13:54:21.988 [DEBUG] [Thread-20043] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:54:22.042 [DEBUG] [Thread-20043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:54:22.043 [DEBUG] [Thread-20043] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:54:22.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:54:22.043 [DEBUG] [Thread-20043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:54:22.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:54:22.099 [DEBUG] [Thread-20043] [transport.py] [_log()] userauth is OK
2026-04-15T13:54:22.100 [DEBUG] [Thread-20043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:54:22.100 [DEBUG] [Thread-20043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:54:22.100 [DEBUG] [Thread-20043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:54:22.100 [DEBUG] [Thread-20043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:54:22.127 [INFO] [Thread-20043] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:54:22.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:54:22.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:54:22.971 [DEBUG] [Thread-20043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:54:22.971 [DEBUG] [Thread-20043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:54:23.020 [DEBUG] [Thread-20043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:54:23.020 [DEBUG] [Thread-20043] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:54:23.029 [DEBUG] [Thread-20043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:54:23.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:54:23.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')
2026-04-15T13:54:23.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
2026-04-15T13:54:23.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:54:23.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:54:23.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:54:23.065 [DEBUG] [Thread-20043] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:54:24.002 [DEBUG] [Thread-20045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:54:35.403 [DEBUG] [Thread-20046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:54:50.449 [DEBUG] [Thread-20047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:54:53.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:54:53.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:54:53.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:54:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 54, 43), 8.71172, 56.0115, 0.0, 21.3127, 15.3578, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:54:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:54:43
2026-04-15T13:54:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:54:55.227 [DEBUG] [Thread-20048] [transport.py] [_log()] starting thread (client mode): 0xee9af670
2026-04-15T13:54:55.227 [DEBUG] [Thread-20048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:54:55.249 [DEBUG] [Thread-20048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:54:55.250 [INFO] [Thread-20048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:54:55.253 [DEBUG] [Thread-20048] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:54:55.253 [DEBUG] [Thread-20048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:54:55.253 [DEBUG] [Thread-20048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:54:55.253 [DEBUG] [Thread-20048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:54:55.254 [DEBUG] [Thread-20048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:54:55.254 [DEBUG] [Thread-20048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:54:55.254 [DEBUG] [Thread-20048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:54:55.254 [DEBUG] [Thread-20048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:54:55.254 [DEBUG] [Thread-20048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:54:55.254 [DEBUG] [Thread-20048] [transport.py] [_log()] client lang: <none>
2026-04-15T13:54:55.254 [DEBUG] [Thread-20048] [transport.py] [_log()] server lang: <none>
2026-04-15T13:54:55.254 [DEBUG] [Thread-20048] [transport.py] [_log()] kex follows: False
2026-04-15T13:54:55.254 [DEBUG] [Thread-20048] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:54:55.254 [DEBUG] [Thread-20048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:54:55.254 [DEBUG] [Thread-20048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:54:55.255 [DEBUG] [Thread-20048] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:54:55.255 [DEBUG] [Thread-20048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:54:55.255 [DEBUG] [Thread-20048] [transport.py] [_log()] Compression: none
2026-04-15T13:54:55.255 [DEBUG] [Thread-20048] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:54:55.271 [DEBUG] [Thread-20048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:54:55.272 [DEBUG] [Thread-20048] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:54:55.272 [DEBUG] [Thread-20048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:54:55.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:54:55.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:54:55.274 [DEBUG] [Thread-20048] [transport.py] [_log()] userauth is OK
2026-04-15T13:54:55.274 [DEBUG] [Thread-20048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:54:55.274 [DEBUG] [Thread-20048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:54:55.274 [DEBUG] [Thread-20048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:54:55.274 [DEBUG] [Thread-20048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:54:55.299 [INFO] [Thread-20048] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:54:55.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:54:56.083 [DEBUG] [Thread-20048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:54:56.084 [DEBUG] [Thread-20048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:54:56.084 [DEBUG] [Thread-20048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:54:56.124 [DEBUG] [Thread-20048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:54:56.124 [DEBUG] [Thread-20048] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:54:56.127 [DEBUG] [Thread-20048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:54:56.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:54:56.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:54:56.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:54:56.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:54:56.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:54:56.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:54:56.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:54:56.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:54:56.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:54:56.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.495971 -999.00  +13.60  17.14     65   +7.20 1 2 1 1 1   888    0 7.58 39.92 ----- 14.3 17.1 352.0 27.7 20.9 -26.0 19.7 -24.6 20.4 -21.2 21.4 -22.7
2026-04-15T13:54:56.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:54:56.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:54:56.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.495971
2026-04-15T13:54:56.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:54:56.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:54:56.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:54:56.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:54:56.154 [DEBUG] [Thread-20048] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:54:56.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:54:56.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:54:43', tmtdew=8.71172, humidity=56.0115, cloud=0.0, wind=21.3127, temperature=15.3578, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:54:11.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:54:56.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:54:56.398 [DEBUG] [Thread-20051] [transport.py] [_log()] starting thread (client mode): 0xee9033d0
2026-04-15T13:54:56.398 [DEBUG] [Thread-20051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:54:56.412 [DEBUG] [Thread-20051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:54:56.412 [INFO] [Thread-20051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:54:56.419 [DEBUG] [Thread-20051] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] client lang: <none>
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] server lang: <none>
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] kex follows: False
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:54:56.420 [DEBUG] [Thread-20051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:54:56.421 [DEBUG] [Thread-20051] [transport.py] [_log()] Compression: none
2026-04-15T13:54:56.421 [DEBUG] [Thread-20051] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:54:56.479 [DEBUG] [Thread-20051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:54:56.480 [DEBUG] [Thread-20051] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:54:56.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:54:56.480 [DEBUG] [Thread-20051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:54:56.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:54:56.535 [DEBUG] [Thread-20051] [transport.py] [_log()] userauth is OK
2026-04-15T13:54:56.536 [DEBUG] [Thread-20051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:54:56.536 [DEBUG] [Thread-20051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:54:56.536 [DEBUG] [Thread-20051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:54:56.536 [DEBUG] [Thread-20051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:54:56.560 [INFO] [Thread-20051] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:54:56.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:54:56.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:54:57.401 [DEBUG] [Thread-20051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:54:57.401 [DEBUG] [Thread-20051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:54:57.449 [DEBUG] [Thread-20051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:54:57.449 [DEBUG] [Thread-20051] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:54:57.457 [DEBUG] [Thread-20051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:54:57.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:54:57.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')
2026-04-15T13:54:57.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
2026-04-15T13:54:57.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:54:57.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:54:57.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:54:57.489 [DEBUG] [Thread-20051] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:54:58.648 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:54:58.649 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:55:05.483 [DEBUG] [Thread-20053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:55:20.528 [DEBUG] [Thread-20054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:55:24.124 [DEBUG] [Thread-20055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:55:27.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:55:27.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:55:27.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
2026-04-15T13:55:28.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 55, 19), 8.35112, 57.3235, 0.0, 20.7684, 14.4958, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:55:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:55:19
2026-04-15T13:55:29.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:55:29.624 [DEBUG] [Thread-20056] [transport.py] [_log()] starting thread (client mode): 0xee9adab0
2026-04-15T13:55:29.624 [DEBUG] [Thread-20056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:55:29.646 [DEBUG] [Thread-20056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:55:29.646 [INFO] [Thread-20056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:55:29.649 [DEBUG] [Thread-20056] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:55:29.649 [DEBUG] [Thread-20056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:55:29.649 [DEBUG] [Thread-20056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:55:29.649 [DEBUG] [Thread-20056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:55:29.649 [DEBUG] [Thread-20056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:55:29.649 [DEBUG] [Thread-20056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:55:29.650 [DEBUG] [Thread-20056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:55:29.650 [DEBUG] [Thread-20056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:55:29.650 [DEBUG] [Thread-20056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:55:29.650 [DEBUG] [Thread-20056] [transport.py] [_log()] client lang: <none>
2026-04-15T13:55:29.650 [DEBUG] [Thread-20056] [transport.py] [_log()] server lang: <none>
2026-04-15T13:55:29.650 [DEBUG] [Thread-20056] [transport.py] [_log()] kex follows: False
2026-04-15T13:55:29.650 [DEBUG] [Thread-20056] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:55:29.650 [DEBUG] [Thread-20056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:55:29.650 [DEBUG] [Thread-20056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:55:29.650 [DEBUG] [Thread-20056] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:55:29.651 [DEBUG] [Thread-20056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:55:29.651 [DEBUG] [Thread-20056] [transport.py] [_log()] Compression: none
2026-04-15T13:55:29.651 [DEBUG] [Thread-20056] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:55:29.668 [DEBUG] [Thread-20056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:55:29.668 [DEBUG] [Thread-20056] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:55:29.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:55:29.669 [DEBUG] [Thread-20056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:55:29.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:55:29.670 [DEBUG] [Thread-20056] [transport.py] [_log()] userauth is OK
2026-04-15T13:55:29.670 [DEBUG] [Thread-20056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:55:29.671 [DEBUG] [Thread-20056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:55:29.671 [DEBUG] [Thread-20056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:55:29.671 [DEBUG] [Thread-20056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:55:29.696 [INFO] [Thread-20056] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:55:29.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:55:30.491 [DEBUG] [Thread-20056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:55:30.491 [DEBUG] [Thread-20056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:55:30.492 [DEBUG] [Thread-20056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:55:30.532 [DEBUG] [Thread-20056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:55:30.532 [DEBUG] [Thread-20056] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:55:30.535 [DEBUG] [Thread-20056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:55:30.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:55:30.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:55:30.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:55:30.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:55:30.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:55:30.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:55:30.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:55:30.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:55:30.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:55:30.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.496318 -999.00  +13.40  20.85     66   +7.20 1 2 1 1 1   888    0 7.58 37.71 ----- 19.1 20.9 328.6 28.7 21.0 -25.3 19.7 -24.3 20.4 -20.8 21.4 -22.4
2026-04-15T13:55:30.559 [DEBUG] [Thread-20056] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:55:30.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:55:30.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:55:30.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.496318
2026-04-15T13:55:30.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:55:30.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:55:30.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:55:30.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:55:30.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:55:30.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:55:19', tmtdew=8.35112, humidity=57.3235, cloud=0.0, wind=20.7684, temperature=14.4958, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:54:41.875', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:55:30.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:55:30.820 [DEBUG] [Thread-20059] [transport.py] [_log()] starting thread (client mode): 0xee9af520
2026-04-15T13:55:30.820 [DEBUG] [Thread-20059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:55:30.835 [DEBUG] [Thread-20059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:55:30.835 [INFO] [Thread-20059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] client lang: <none>
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] server lang: <none>
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] kex follows: False
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:55:30.843 [DEBUG] [Thread-20059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:55:30.844 [DEBUG] [Thread-20059] [transport.py] [_log()] Compression: none
2026-04-15T13:55:30.844 [DEBUG] [Thread-20059] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:55:30.898 [DEBUG] [Thread-20059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:55:30.899 [DEBUG] [Thread-20059] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:55:30.899 [DEBUG] [Thread-20059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:55:30.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:55:30.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:55:30.960 [DEBUG] [Thread-20059] [transport.py] [_log()] userauth is OK
2026-04-15T13:55:30.960 [DEBUG] [Thread-20059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:55:30.960 [DEBUG] [Thread-20059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:55:30.960 [DEBUG] [Thread-20059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:55:30.961 [DEBUG] [Thread-20059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:55:30.986 [INFO] [Thread-20059] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:55:30.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:55:30.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:55:31.817 [DEBUG] [Thread-20059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:55:31.818 [DEBUG] [Thread-20059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:55:31.866 [DEBUG] [Thread-20059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:55:31.866 [DEBUG] [Thread-20059] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:55:31.880 [DEBUG] [Thread-20059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:55:31.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:55:31.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')
2026-04-15T13:55:31.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
2026-04-15T13:55:31.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:55:31.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:55:31.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:55:31.915 [DEBUG] [Thread-20059] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:55:35.559 [DEBUG] [Thread-20061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:55:50.607 [DEBUG] [Thread-20062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:55:58.790 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:55:58.791 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:56:01.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:56:01.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:56:01.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T13:56:03.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 55, 54), 8.37473, 57.0086, 0.0, 15.1222, 14.4132, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:56:03.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:55:54
2026-04-15T13:56:03.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:56:04.206 [DEBUG] [Thread-20063] [transport.py] [_log()] starting thread (client mode): 0xee900160
2026-04-15T13:56:04.207 [DEBUG] [Thread-20063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:56:04.226 [DEBUG] [Thread-20063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:56:04.226 [INFO] [Thread-20063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:56:04.229 [DEBUG] [Thread-20063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:56:04.229 [DEBUG] [Thread-20063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:56:04.229 [DEBUG] [Thread-20063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:56:04.229 [DEBUG] [Thread-20063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:56:04.229 [DEBUG] [Thread-20063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:56:04.229 [DEBUG] [Thread-20063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:56:04.229 [DEBUG] [Thread-20063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:56:04.229 [DEBUG] [Thread-20063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:56:04.229 [DEBUG] [Thread-20063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:56:04.229 [DEBUG] [Thread-20063] [transport.py] [_log()] client lang: <none>
2026-04-15T13:56:04.230 [DEBUG] [Thread-20063] [transport.py] [_log()] server lang: <none>
2026-04-15T13:56:04.230 [DEBUG] [Thread-20063] [transport.py] [_log()] kex follows: False
2026-04-15T13:56:04.230 [DEBUG] [Thread-20063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:56:04.230 [DEBUG] [Thread-20063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:56:04.230 [DEBUG] [Thread-20063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:56:04.230 [DEBUG] [Thread-20063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:56:04.230 [DEBUG] [Thread-20063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:56:04.230 [DEBUG] [Thread-20063] [transport.py] [_log()] Compression: none
2026-04-15T13:56:04.230 [DEBUG] [Thread-20063] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:56:04.246 [DEBUG] [Thread-20063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:56:04.246 [DEBUG] [Thread-20063] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:56:04.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:56:04.247 [DEBUG] [Thread-20063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:56:04.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:56:04.248 [DEBUG] [Thread-20063] [transport.py] [_log()] userauth is OK
2026-04-15T13:56:04.248 [DEBUG] [Thread-20063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:56:04.248 [DEBUG] [Thread-20063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:56:04.248 [DEBUG] [Thread-20063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:56:04.249 [DEBUG] [Thread-20063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:56:04.266 [INFO] [Thread-20063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:56:04.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:56:05.049 [DEBUG] [Thread-20063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:56:05.050 [DEBUG] [Thread-20063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:56:05.050 [DEBUG] [Thread-20063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:56:05.090 [DEBUG] [Thread-20063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:56:05.090 [DEBUG] [Thread-20063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:56:05.093 [DEBUG] [Thread-20063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:56:05.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:56:05.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:56:05.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:56:05.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:56:05.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:56:05.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:56:05.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:56:05.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:56:05.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:56:05.116 [DEBUG] [Thread-20063] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:56:05.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.497012 -999.00  +14.10  13.49     65   +7.80 1 2 1 1 1   888    0 7.89 42.60 ----- 11.4 13.5 331.6 20.1 21.2 -23.7 19.9 -23.2 20.6 -19.5 21.8 -20.9
2026-04-15T13:56:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:56:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:56:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.497012
2026-04-15T13:56:05.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:56:05.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:56:05.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:56:05.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:56:05.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:56:05.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:55:54', tmtdew=8.37473, humidity=57.0086, cloud=0.0, wind=15.1222, temperature=14.4132, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:55:41.837', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:56:05.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:56:05.382 [DEBUG] [Thread-20066] [transport.py] [_log()] starting thread (client mode): 0xee901ff0
2026-04-15T13:56:05.382 [DEBUG] [Thread-20066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:56:05.397 [DEBUG] [Thread-20066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:56:05.397 [INFO] [Thread-20066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:56:05.404 [DEBUG] [Thread-20066] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:56:05.404 [DEBUG] [Thread-20066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:56:05.405 [DEBUG] [Thread-20066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:56:05.405 [DEBUG] [Thread-20066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:56:05.405 [DEBUG] [Thread-20066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:56:05.405 [DEBUG] [Thread-20066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:56:05.405 [DEBUG] [Thread-20066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:56:05.405 [DEBUG] [Thread-20066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:56:05.405 [DEBUG] [Thread-20066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:56:05.406 [DEBUG] [Thread-20066] [transport.py] [_log()] client lang: <none>
2026-04-15T13:56:05.406 [DEBUG] [Thread-20066] [transport.py] [_log()] server lang: <none>
2026-04-15T13:56:05.406 [DEBUG] [Thread-20066] [transport.py] [_log()] kex follows: False
2026-04-15T13:56:05.406 [DEBUG] [Thread-20066] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:56:05.406 [DEBUG] [Thread-20066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:56:05.406 [DEBUG] [Thread-20066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:56:05.407 [DEBUG] [Thread-20066] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:56:05.407 [DEBUG] [Thread-20066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:56:05.407 [DEBUG] [Thread-20066] [transport.py] [_log()] Compression: none
2026-04-15T13:56:05.407 [DEBUG] [Thread-20066] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:56:05.463 [DEBUG] [Thread-20066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:56:05.463 [DEBUG] [Thread-20066] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:56:05.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:56:05.464 [DEBUG] [Thread-20066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:56:05.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:56:05.519 [DEBUG] [Thread-20066] [transport.py] [_log()] userauth is OK
2026-04-15T13:56:05.519 [DEBUG] [Thread-20066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:56:05.520 [DEBUG] [Thread-20066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:56:05.520 [DEBUG] [Thread-20066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:56:05.520 [DEBUG] [Thread-20066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:56:05.545 [INFO] [Thread-20066] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:56:05.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:56:05.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:56:05.639 [DEBUG] [Thread-20068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:56:06.415 [DEBUG] [Thread-20066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:56:06.415 [DEBUG] [Thread-20066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:56:06.464 [DEBUG] [Thread-20066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:56:06.464 [DEBUG] [Thread-20066] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:56:06.472 [DEBUG] [Thread-20066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:56:06.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:56:06.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')
2026-04-15T13:56:06.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
2026-04-15T13:56:06.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:56:06.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:56:06.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:56:06.506 [DEBUG] [Thread-20066] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:56:20.683 [DEBUG] [Thread-20069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:56:24.229 [DEBUG] [Thread-20070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:56:35.717 [DEBUG] [Thread-20071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:56:36.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:56:36.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:56:36.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
2026-04-15T13:56:37.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 55, 54), 8.37473, 57.0086, 0.0, 15.1222, 14.4132, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:56:37.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:55:54
2026-04-15T13:56:38.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:56:38.644 [DEBUG] [Thread-20072] [transport.py] [_log()] starting thread (client mode): 0xee9aed40
2026-04-15T13:56:38.645 [DEBUG] [Thread-20072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:56:38.665 [DEBUG] [Thread-20072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:56:38.665 [INFO] [Thread-20072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:56:38.668 [DEBUG] [Thread-20072] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:56:38.668 [DEBUG] [Thread-20072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:56:38.668 [DEBUG] [Thread-20072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:56:38.668 [DEBUG] [Thread-20072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:56:38.668 [DEBUG] [Thread-20072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:56:38.668 [DEBUG] [Thread-20072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:56:38.668 [DEBUG] [Thread-20072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:56:38.669 [DEBUG] [Thread-20072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:56:38.669 [DEBUG] [Thread-20072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:56:38.669 [DEBUG] [Thread-20072] [transport.py] [_log()] client lang: <none>
2026-04-15T13:56:38.669 [DEBUG] [Thread-20072] [transport.py] [_log()] server lang: <none>
2026-04-15T13:56:38.669 [DEBUG] [Thread-20072] [transport.py] [_log()] kex follows: False
2026-04-15T13:56:38.669 [DEBUG] [Thread-20072] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:56:38.669 [DEBUG] [Thread-20072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:56:38.669 [DEBUG] [Thread-20072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:56:38.669 [DEBUG] [Thread-20072] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:56:38.669 [DEBUG] [Thread-20072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:56:38.669 [DEBUG] [Thread-20072] [transport.py] [_log()] Compression: none
2026-04-15T13:56:38.670 [DEBUG] [Thread-20072] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:56:38.686 [DEBUG] [Thread-20072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:56:38.687 [DEBUG] [Thread-20072] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:56:38.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:56:38.688 [DEBUG] [Thread-20072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:56:38.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:56:38.688 [DEBUG] [Thread-20072] [transport.py] [_log()] userauth is OK
2026-04-15T13:56:38.688 [DEBUG] [Thread-20072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:56:38.689 [DEBUG] [Thread-20072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:56:38.689 [DEBUG] [Thread-20072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:56:38.689 [DEBUG] [Thread-20072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:56:38.707 [INFO] [Thread-20072] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:56:38.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:56:39.523 [DEBUG] [Thread-20072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:56:39.524 [DEBUG] [Thread-20072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:56:39.524 [DEBUG] [Thread-20072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:56:39.564 [DEBUG] [Thread-20072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:56:39.564 [DEBUG] [Thread-20072] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:56:39.567 [DEBUG] [Thread-20072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:56:39.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:56:39.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:56:39.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:56:39.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:56:39.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:56:39.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:56:39.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:56:39.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:56:39.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:56:39.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.497360 -999.00  +14.20  12.08     64   +7.70 1 2 1 1 1   888    0 7.81 42.52 ----- 9.4 12.1 348.4 18.4 21.4 -24.2 20.2 -22.6 20.7 -19.6 21.9 -20.8
2026-04-15T13:56:39.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:56:39.592 [DEBUG] [Thread-20072] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:56:39.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:56:39.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.497360
2026-04-15T13:56:39.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:56:39.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:56:39.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:56:39.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:56:39.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:56:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:55:54', tmtdew=8.37473, humidity=57.0086, cloud=0.0, wind=15.1222, temperature=14.4132, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:56:11.904', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:56:39.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:56:39.852 [DEBUG] [Thread-20075] [transport.py] [_log()] starting thread (client mode): 0xf13e2440
2026-04-15T13:56:39.852 [DEBUG] [Thread-20075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:56:39.866 [DEBUG] [Thread-20075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:56:39.866 [INFO] [Thread-20075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:56:39.874 [DEBUG] [Thread-20075] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:56:39.874 [DEBUG] [Thread-20075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:56:39.874 [DEBUG] [Thread-20075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:56:39.874 [DEBUG] [Thread-20075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:56:39.874 [DEBUG] [Thread-20075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:56:39.874 [DEBUG] [Thread-20075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:56:39.874 [DEBUG] [Thread-20075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:56:39.874 [DEBUG] [Thread-20075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:56:39.874 [DEBUG] [Thread-20075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:56:39.875 [DEBUG] [Thread-20075] [transport.py] [_log()] client lang: <none>
2026-04-15T13:56:39.875 [DEBUG] [Thread-20075] [transport.py] [_log()] server lang: <none>
2026-04-15T13:56:39.875 [DEBUG] [Thread-20075] [transport.py] [_log()] kex follows: False
2026-04-15T13:56:39.875 [DEBUG] [Thread-20075] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:56:39.875 [DEBUG] [Thread-20075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:56:39.875 [DEBUG] [Thread-20075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:56:39.875 [DEBUG] [Thread-20075] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:56:39.875 [DEBUG] [Thread-20075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:56:39.875 [DEBUG] [Thread-20075] [transport.py] [_log()] Compression: none
2026-04-15T13:56:39.875 [DEBUG] [Thread-20075] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:56:39.930 [DEBUG] [Thread-20075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:56:39.931 [DEBUG] [Thread-20075] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:56:39.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:56:39.931 [DEBUG] [Thread-20075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:56:39.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:56:39.987 [DEBUG] [Thread-20075] [transport.py] [_log()] userauth is OK
2026-04-15T13:56:39.988 [DEBUG] [Thread-20075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:56:39.988 [DEBUG] [Thread-20075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:56:39.988 [DEBUG] [Thread-20075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:56:39.988 [DEBUG] [Thread-20075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:56:40.009 [INFO] [Thread-20075] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:56:40.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:56:40.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:56:40.838 [DEBUG] [Thread-20075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:56:40.838 [DEBUG] [Thread-20075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:56:40.888 [DEBUG] [Thread-20075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:56:40.888 [DEBUG] [Thread-20075] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:56:40.901 [DEBUG] [Thread-20075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:56:40.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:56:40.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')
2026-04-15T13:56:40.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
2026-04-15T13:56:40.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:56:40.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:56:40.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:56:40.939 [DEBUG] [Thread-20075] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:56:50.750 [DEBUG] [Thread-20077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:56:58.932 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:56:58.933 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:57:05.795 [DEBUG] [Thread-20078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:57:10.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:57:10.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:57:10.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
2026-04-15T13:57:12.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 56, 31), 8.30173, 57.2406, 0.0, 11.1884, 14.2308, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:57:12.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:56:31
2026-04-15T13:57:12.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:57:13.088 [DEBUG] [Thread-20079] [transport.py] [_log()] starting thread (client mode): 0xee903eb0
2026-04-15T13:57:13.088 [DEBUG] [Thread-20079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:57:13.106 [DEBUG] [Thread-20079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:57:13.107 [INFO] [Thread-20079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:57:13.110 [DEBUG] [Thread-20079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:57:13.110 [DEBUG] [Thread-20079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:57:13.110 [DEBUG] [Thread-20079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:57:13.110 [DEBUG] [Thread-20079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:57:13.110 [DEBUG] [Thread-20079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:57:13.110 [DEBUG] [Thread-20079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:57:13.110 [DEBUG] [Thread-20079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:57:13.110 [DEBUG] [Thread-20079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:57:13.110 [DEBUG] [Thread-20079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:57:13.110 [DEBUG] [Thread-20079] [transport.py] [_log()] client lang: <none>
2026-04-15T13:57:13.111 [DEBUG] [Thread-20079] [transport.py] [_log()] server lang: <none>
2026-04-15T13:57:13.111 [DEBUG] [Thread-20079] [transport.py] [_log()] kex follows: False
2026-04-15T13:57:13.111 [DEBUG] [Thread-20079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:57:13.111 [DEBUG] [Thread-20079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:57:13.111 [DEBUG] [Thread-20079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:57:13.111 [DEBUG] [Thread-20079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:57:13.111 [DEBUG] [Thread-20079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:57:13.111 [DEBUG] [Thread-20079] [transport.py] [_log()] Compression: none
2026-04-15T13:57:13.111 [DEBUG] [Thread-20079] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:57:13.127 [DEBUG] [Thread-20079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:57:13.128 [DEBUG] [Thread-20079] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:57:13.128 [DEBUG] [Thread-20079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:57:13.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:57:13.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:57:13.129 [DEBUG] [Thread-20079] [transport.py] [_log()] userauth is OK
2026-04-15T13:57:13.129 [DEBUG] [Thread-20079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:57:13.129 [DEBUG] [Thread-20079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:57:13.130 [DEBUG] [Thread-20079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:57:13.130 [DEBUG] [Thread-20079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:57:13.147 [INFO] [Thread-20079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:57:13.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:57:13.907 [DEBUG] [Thread-20079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:57:13.907 [DEBUG] [Thread-20079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:57:13.907 [DEBUG] [Thread-20079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:57:13.948 [DEBUG] [Thread-20079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:57:13.948 [DEBUG] [Thread-20079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:57:13.951 [DEBUG] [Thread-20079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:57:13.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:57:13.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:57:13.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:57:13.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:57:13.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:57:13.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:57:13.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:57:13.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:57:13.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:57:13.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.497707 -999.00  +14.50   7.26     64   +7.90 1 2 1 1 1   888    0 7.65 39.16 ----- 14.2 7.3 22.3 15.2 21.2 -25.1 20.0 -24.6 20.6 -19.8 21.8 -22.4
2026-04-15T13:57:13.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:57:13.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:57:13.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.497707
2026-04-15T13:57:13.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:57:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:57:13.968 [DEBUG] [Thread-20079] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:57:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:57:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:57:13.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:57:13.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:56:31', tmtdew=8.30173, humidity=57.2406, cloud=0.0, wind=11.1884, temperature=14.2308, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:56:41.885', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:57:14.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:57:14.224 [DEBUG] [Thread-20082] [transport.py] [_log()] starting thread (client mode): 0xee900220
2026-04-15T13:57:14.224 [DEBUG] [Thread-20082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:57:14.238 [DEBUG] [Thread-20082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:57:14.238 [INFO] [Thread-20082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:57:14.246 [DEBUG] [Thread-20082] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:57:14.246 [DEBUG] [Thread-20082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:57:14.246 [DEBUG] [Thread-20082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:57:14.246 [DEBUG] [Thread-20082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:57:14.246 [DEBUG] [Thread-20082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:57:14.246 [DEBUG] [Thread-20082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:57:14.246 [DEBUG] [Thread-20082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:57:14.247 [DEBUG] [Thread-20082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:57:14.247 [DEBUG] [Thread-20082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:57:14.247 [DEBUG] [Thread-20082] [transport.py] [_log()] client lang: <none>
2026-04-15T13:57:14.247 [DEBUG] [Thread-20082] [transport.py] [_log()] server lang: <none>
2026-04-15T13:57:14.247 [DEBUG] [Thread-20082] [transport.py] [_log()] kex follows: False
2026-04-15T13:57:14.247 [DEBUG] [Thread-20082] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:57:14.247 [DEBUG] [Thread-20082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:57:14.247 [DEBUG] [Thread-20082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:57:14.247 [DEBUG] [Thread-20082] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:57:14.247 [DEBUG] [Thread-20082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:57:14.247 [DEBUG] [Thread-20082] [transport.py] [_log()] Compression: none
2026-04-15T13:57:14.247 [DEBUG] [Thread-20082] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:57:14.303 [DEBUG] [Thread-20082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:57:14.303 [DEBUG] [Thread-20082] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:57:14.303 [DEBUG] [Thread-20082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:57:14.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:57:14.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:57:14.363 [DEBUG] [Thread-20082] [transport.py] [_log()] userauth is OK
2026-04-15T13:57:14.363 [DEBUG] [Thread-20082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:57:14.363 [DEBUG] [Thread-20082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:57:14.363 [DEBUG] [Thread-20082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:57:14.364 [DEBUG] [Thread-20082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:57:14.385 [INFO] [Thread-20082] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:57:14.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:57:14.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:57:15.194 [DEBUG] [Thread-20082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:57:15.195 [DEBUG] [Thread-20082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:57:15.242 [DEBUG] [Thread-20082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:57:15.242 [DEBUG] [Thread-20082] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:57:15.252 [DEBUG] [Thread-20082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:57:15.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:57:15.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')
2026-04-15T13:57:15.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
2026-04-15T13:57:15.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:57:15.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:57:15.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:57:15.287 [DEBUG] [Thread-20082] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:57:20.826 [DEBUG] [Thread-20084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:57:24.322 [DEBUG] [Thread-20085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:57:35.875 [DEBUG] [Thread-20086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:57:45.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:57:45.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:57:45.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
2026-04-15T13:57:46.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 57, 6), 8.14359, 57.8703, 0.0, 12.7584, 14.2971, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:57:46.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:57:06
2026-04-15T13:57:46.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:57:47.448 [DEBUG] [Thread-20087] [transport.py] [_log()] starting thread (client mode): 0xf1337e50
2026-04-15T13:57:47.448 [DEBUG] [Thread-20087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:57:47.467 [DEBUG] [Thread-20087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:57:47.467 [INFO] [Thread-20087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:57:47.470 [DEBUG] [Thread-20087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:57:47.470 [DEBUG] [Thread-20087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:57:47.470 [DEBUG] [Thread-20087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:57:47.470 [DEBUG] [Thread-20087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:57:47.470 [DEBUG] [Thread-20087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:57:47.471 [DEBUG] [Thread-20087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:57:47.471 [DEBUG] [Thread-20087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:57:47.471 [DEBUG] [Thread-20087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:57:47.471 [DEBUG] [Thread-20087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:57:47.471 [DEBUG] [Thread-20087] [transport.py] [_log()] client lang: <none>
2026-04-15T13:57:47.471 [DEBUG] [Thread-20087] [transport.py] [_log()] server lang: <none>
2026-04-15T13:57:47.471 [DEBUG] [Thread-20087] [transport.py] [_log()] kex follows: False
2026-04-15T13:57:47.471 [DEBUG] [Thread-20087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:57:47.471 [DEBUG] [Thread-20087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:57:47.471 [DEBUG] [Thread-20087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:57:47.471 [DEBUG] [Thread-20087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:57:47.472 [DEBUG] [Thread-20087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:57:47.472 [DEBUG] [Thread-20087] [transport.py] [_log()] Compression: none
2026-04-15T13:57:47.472 [DEBUG] [Thread-20087] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:57:47.489 [DEBUG] [Thread-20087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:57:47.489 [DEBUG] [Thread-20087] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:57:47.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:57:47.490 [DEBUG] [Thread-20087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:57:47.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:57:47.532 [DEBUG] [Thread-20087] [transport.py] [_log()] userauth is OK
2026-04-15T13:57:47.532 [DEBUG] [Thread-20087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:57:47.533 [DEBUG] [Thread-20087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:57:47.533 [DEBUG] [Thread-20087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:57:47.533 [DEBUG] [Thread-20087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:57:47.569 [INFO] [Thread-20087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:57:47.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:57:48.352 [DEBUG] [Thread-20087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:57:48.353 [DEBUG] [Thread-20087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:57:48.353 [DEBUG] [Thread-20087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:57:48.393 [DEBUG] [Thread-20087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:57:48.393 [DEBUG] [Thread-20087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:57:48.396 [DEBUG] [Thread-20087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:57:48.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:57:48.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:57:48.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:57:48.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:57:48.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:57:48.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:57:48.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:57:48.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:57:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:57:48.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.498054 -999.00  +14.70   9.24     62   +7.60 1 2 1 1 1   888    0 7.61 38.09 ----- 13.0 9.2 6.8 15.5 21.1 -25.3 20.0 -24.1 20.6 -19.1 21.7 -21.9
2026-04-15T13:57:48.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:57:48.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:57:48.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.498054
2026-04-15T13:57:48.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:57:48.421 [DEBUG] [Thread-20087] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:57:48.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:57:48.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:57:48.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:57:48.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:57:48.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:57:06', tmtdew=8.14359, humidity=57.8703, cloud=0.0, wind=12.7584, temperature=14.2971, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:57:11.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:57:48.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:57:48.680 [DEBUG] [Thread-20090] [transport.py] [_log()] starting thread (client mode): 0xf1335390
2026-04-15T13:57:48.680 [DEBUG] [Thread-20090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:57:48.695 [DEBUG] [Thread-20090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:57:48.695 [INFO] [Thread-20090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:57:48.702 [DEBUG] [Thread-20090] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:57:48.703 [DEBUG] [Thread-20090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:57:48.703 [DEBUG] [Thread-20090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:57:48.703 [DEBUG] [Thread-20090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:57:48.703 [DEBUG] [Thread-20090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:57:48.703 [DEBUG] [Thread-20090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:57:48.703 [DEBUG] [Thread-20090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:57:48.703 [DEBUG] [Thread-20090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:57:48.703 [DEBUG] [Thread-20090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:57:48.703 [DEBUG] [Thread-20090] [transport.py] [_log()] client lang: <none>
2026-04-15T13:57:48.703 [DEBUG] [Thread-20090] [transport.py] [_log()] server lang: <none>
2026-04-15T13:57:48.703 [DEBUG] [Thread-20090] [transport.py] [_log()] kex follows: False
2026-04-15T13:57:48.703 [DEBUG] [Thread-20090] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:57:48.703 [DEBUG] [Thread-20090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:57:48.704 [DEBUG] [Thread-20090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:57:48.704 [DEBUG] [Thread-20090] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:57:48.704 [DEBUG] [Thread-20090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:57:48.704 [DEBUG] [Thread-20090] [transport.py] [_log()] Compression: none
2026-04-15T13:57:48.704 [DEBUG] [Thread-20090] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:57:48.758 [DEBUG] [Thread-20090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:57:48.759 [DEBUG] [Thread-20090] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:57:48.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:57:48.760 [DEBUG] [Thread-20090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:57:48.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:57:48.815 [DEBUG] [Thread-20090] [transport.py] [_log()] userauth is OK
2026-04-15T13:57:48.815 [DEBUG] [Thread-20090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:57:48.816 [DEBUG] [Thread-20090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:57:48.816 [DEBUG] [Thread-20090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:57:48.816 [DEBUG] [Thread-20090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:57:48.841 [INFO] [Thread-20090] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:57:48.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:57:48.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:57:49.659 [DEBUG] [Thread-20090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:57:49.660 [DEBUG] [Thread-20090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:57:49.707 [DEBUG] [Thread-20090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:57:49.707 [DEBUG] [Thread-20090] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:57:49.716 [DEBUG] [Thread-20090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:57:49.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:57:49.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')
2026-04-15T13:57:49.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
2026-04-15T13:57:49.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:57:49.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:57:49.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:57:49.751 [DEBUG] [Thread-20090] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:57:50.906 [DEBUG] [Thread-20092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:57:59.072 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:57:59.073 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:58:05.948 [DEBUG] [Thread-20093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:58:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:58:19.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:58:19.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
2026-04-15T13:58:20.978 [DEBUG] [Thread-20094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:58:21.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 57, 42), 8.5552, 56.5085, 0.0, 9.0, 14.9268, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:58:21.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:57:42
2026-04-15T13:58:21.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:58:21.987 [DEBUG] [Thread-20095] [transport.py] [_log()] starting thread (client mode): 0xee9af250
2026-04-15T13:58:21.987 [DEBUG] [Thread-20095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:58:22.009 [DEBUG] [Thread-20095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:58:22.009 [INFO] [Thread-20095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:58:22.012 [DEBUG] [Thread-20095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:58:22.012 [DEBUG] [Thread-20095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:58:22.012 [DEBUG] [Thread-20095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:58:22.012 [DEBUG] [Thread-20095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:58:22.013 [DEBUG] [Thread-20095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:58:22.013 [DEBUG] [Thread-20095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:58:22.013 [DEBUG] [Thread-20095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:58:22.013 [DEBUG] [Thread-20095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:58:22.013 [DEBUG] [Thread-20095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:58:22.013 [DEBUG] [Thread-20095] [transport.py] [_log()] client lang: <none>
2026-04-15T13:58:22.013 [DEBUG] [Thread-20095] [transport.py] [_log()] server lang: <none>
2026-04-15T13:58:22.013 [DEBUG] [Thread-20095] [transport.py] [_log()] kex follows: False
2026-04-15T13:58:22.013 [DEBUG] [Thread-20095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:58:22.013 [DEBUG] [Thread-20095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:58:22.013 [DEBUG] [Thread-20095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:58:22.013 [DEBUG] [Thread-20095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:58:22.014 [DEBUG] [Thread-20095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:58:22.014 [DEBUG] [Thread-20095] [transport.py] [_log()] Compression: none
2026-04-15T13:58:22.014 [DEBUG] [Thread-20095] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:58:22.030 [DEBUG] [Thread-20095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:58:22.031 [DEBUG] [Thread-20095] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:58:22.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:58:22.032 [DEBUG] [Thread-20095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:58:22.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:58:22.033 [DEBUG] [Thread-20095] [transport.py] [_log()] userauth is OK
2026-04-15T13:58:22.033 [DEBUG] [Thread-20095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:58:22.033 [DEBUG] [Thread-20095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:58:22.033 [DEBUG] [Thread-20095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:58:22.033 [DEBUG] [Thread-20095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:58:22.059 [INFO] [Thread-20095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:58:22.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:58:22.818 [DEBUG] [Thread-20095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:58:22.818 [DEBUG] [Thread-20095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:58:22.819 [DEBUG] [Thread-20095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:58:22.859 [DEBUG] [Thread-20095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:58:22.859 [DEBUG] [Thread-20095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:58:22.861 [DEBUG] [Thread-20095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:58:22.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:58:22.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:58:22.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:58:22.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:58:22.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:58:22.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:58:22.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:58:22.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:58:22.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:58:22.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.498401 -999.00  +14.30  10.23     62   +7.20 1 2 1 1 1   888    0 7.62 43.11 ----- 10.4 10.2 2.2 14.5 21.4 -24.1 20.1 -23.3 20.6 -19.5 21.7 -21.0
2026-04-15T13:58:22.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:58:22.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:58:22.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.498401
2026-04-15T13:58:22.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:58:22.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:58:22.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:58:22.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:58:22.881 [DEBUG] [Thread-20095] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:58:22.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:58:22.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:57:42', tmtdew=8.5552, humidity=56.5085, cloud=0.0, wind=9.0, temperature=14.9268, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:57:41.846', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:58:23.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:58:23.091 [DEBUG] [Thread-20098] [transport.py] [_log()] starting thread (client mode): 0xee902140
2026-04-15T13:58:23.091 [DEBUG] [Thread-20098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:58:23.105 [DEBUG] [Thread-20098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:58:23.105 [INFO] [Thread-20098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:58:23.113 [DEBUG] [Thread-20098] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:58:23.113 [DEBUG] [Thread-20098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:58:23.113 [DEBUG] [Thread-20098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:58:23.113 [DEBUG] [Thread-20098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:58:23.113 [DEBUG] [Thread-20098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:58:23.113 [DEBUG] [Thread-20098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:58:23.113 [DEBUG] [Thread-20098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:58:23.113 [DEBUG] [Thread-20098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:58:23.113 [DEBUG] [Thread-20098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:58:23.113 [DEBUG] [Thread-20098] [transport.py] [_log()] client lang: <none>
2026-04-15T13:58:23.114 [DEBUG] [Thread-20098] [transport.py] [_log()] server lang: <none>
2026-04-15T13:58:23.114 [DEBUG] [Thread-20098] [transport.py] [_log()] kex follows: False
2026-04-15T13:58:23.114 [DEBUG] [Thread-20098] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:58:23.114 [DEBUG] [Thread-20098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:58:23.114 [DEBUG] [Thread-20098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:58:23.114 [DEBUG] [Thread-20098] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:58:23.114 [DEBUG] [Thread-20098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:58:23.114 [DEBUG] [Thread-20098] [transport.py] [_log()] Compression: none
2026-04-15T13:58:23.114 [DEBUG] [Thread-20098] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:58:23.170 [DEBUG] [Thread-20098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:58:23.171 [DEBUG] [Thread-20098] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:58:23.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:58:23.171 [DEBUG] [Thread-20098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:58:23.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:58:23.227 [DEBUG] [Thread-20098] [transport.py] [_log()] userauth is OK
2026-04-15T13:58:23.227 [DEBUG] [Thread-20098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:58:23.228 [DEBUG] [Thread-20098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:58:23.228 [DEBUG] [Thread-20098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:58:23.228 [DEBUG] [Thread-20098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:58:23.254 [INFO] [Thread-20098] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:58:23.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:58:23.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:58:24.122 [DEBUG] [Thread-20098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:58:24.123 [DEBUG] [Thread-20098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:58:24.170 [DEBUG] [Thread-20098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:58:24.170 [DEBUG] [Thread-20098] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:58:24.180 [DEBUG] [Thread-20098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:58:24.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:58:24.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')
2026-04-15T13:58:24.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
2026-04-15T13:58:24.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:58:24.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:58:24.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:58:24.216 [DEBUG] [Thread-20098] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:58:24.416 [DEBUG] [Thread-20100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:58:36.008 [DEBUG] [Thread-20101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:58:51.050 [DEBUG] [Thread-20102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:58:54.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:58:54.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:58:54.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
2026-04-15T13:58:55.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 58, 17), 8.27026, 57.5885, 0.0, 9.72432, 14.3134, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:58:55.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:58:17
2026-04-15T13:58:56.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:58:56.469 [DEBUG] [Thread-20103] [transport.py] [_log()] starting thread (client mode): 0xee901ff0
2026-04-15T13:58:56.470 [DEBUG] [Thread-20103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:58:56.489 [DEBUG] [Thread-20103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:58:56.489 [INFO] [Thread-20103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:58:56.492 [DEBUG] [Thread-20103] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:58:56.492 [DEBUG] [Thread-20103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:58:56.492 [DEBUG] [Thread-20103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:58:56.492 [DEBUG] [Thread-20103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:58:56.492 [DEBUG] [Thread-20103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:58:56.493 [DEBUG] [Thread-20103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:58:56.493 [DEBUG] [Thread-20103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:58:56.493 [DEBUG] [Thread-20103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:58:56.493 [DEBUG] [Thread-20103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:58:56.493 [DEBUG] [Thread-20103] [transport.py] [_log()] client lang: <none>
2026-04-15T13:58:56.493 [DEBUG] [Thread-20103] [transport.py] [_log()] server lang: <none>
2026-04-15T13:58:56.493 [DEBUG] [Thread-20103] [transport.py] [_log()] kex follows: False
2026-04-15T13:58:56.493 [DEBUG] [Thread-20103] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:58:56.493 [DEBUG] [Thread-20103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:58:56.493 [DEBUG] [Thread-20103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:58:56.493 [DEBUG] [Thread-20103] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:58:56.494 [DEBUG] [Thread-20103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:58:56.494 [DEBUG] [Thread-20103] [transport.py] [_log()] Compression: none
2026-04-15T13:58:56.494 [DEBUG] [Thread-20103] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:58:56.513 [DEBUG] [Thread-20103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:58:56.513 [DEBUG] [Thread-20103] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:58:56.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:58:56.514 [DEBUG] [Thread-20103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:58:56.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:58:56.515 [DEBUG] [Thread-20103] [transport.py] [_log()] userauth is OK
2026-04-15T13:58:56.515 [DEBUG] [Thread-20103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:58:56.515 [DEBUG] [Thread-20103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:58:56.515 [DEBUG] [Thread-20103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:58:56.515 [DEBUG] [Thread-20103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:58:56.532 [INFO] [Thread-20103] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:58:56.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:58:57.251 [DEBUG] [Thread-20103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:58:57.251 [DEBUG] [Thread-20103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:58:57.252 [DEBUG] [Thread-20103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:58:57.292 [DEBUG] [Thread-20103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:58:57.292 [DEBUG] [Thread-20103] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:58:57.295 [DEBUG] [Thread-20103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:58:57.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:58:57.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:58:57.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:58:57.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:58:57.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:58:57.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:58:57.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:58:57.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:58:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:58:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.498748 -999.00  +13.90   9.35     63   +7.20 1 2 1 1 1   888    0 7.61 41.32 ----- 9.2 9.3 323.8 11.6 21.3 -22.4 20.0 -23.2 20.6 -18.5 21.8 -19.1
2026-04-15T13:58:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:58:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:58:57.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.498748
2026-04-15T13:58:57.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:58:57.320 [DEBUG] [Thread-20103] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:58:57.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:58:57.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:58:57.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:58:57.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:58:57.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:58:17', tmtdew=8.27026, humidity=57.5885, cloud=0.0, wind=9.72432, temperature=14.3134, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:58:11.827', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:58:57.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:58:57.580 [DEBUG] [Thread-20106] [transport.py] [_log()] starting thread (client mode): 0xf13e1f60
2026-04-15T13:58:57.580 [DEBUG] [Thread-20106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:58:57.594 [DEBUG] [Thread-20106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:58:57.594 [INFO] [Thread-20106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:58:57.602 [DEBUG] [Thread-20106] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:58:57.602 [DEBUG] [Thread-20106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:58:57.602 [DEBUG] [Thread-20106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:58:57.602 [DEBUG] [Thread-20106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:58:57.602 [DEBUG] [Thread-20106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:58:57.602 [DEBUG] [Thread-20106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:58:57.602 [DEBUG] [Thread-20106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:58:57.602 [DEBUG] [Thread-20106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:58:57.602 [DEBUG] [Thread-20106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:58:57.602 [DEBUG] [Thread-20106] [transport.py] [_log()] client lang: <none>
2026-04-15T13:58:57.602 [DEBUG] [Thread-20106] [transport.py] [_log()] server lang: <none>
2026-04-15T13:58:57.603 [DEBUG] [Thread-20106] [transport.py] [_log()] kex follows: False
2026-04-15T13:58:57.603 [DEBUG] [Thread-20106] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:58:57.603 [DEBUG] [Thread-20106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:58:57.603 [DEBUG] [Thread-20106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:58:57.603 [DEBUG] [Thread-20106] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:58:57.603 [DEBUG] [Thread-20106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:58:57.603 [DEBUG] [Thread-20106] [transport.py] [_log()] Compression: none
2026-04-15T13:58:57.603 [DEBUG] [Thread-20106] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:58:57.659 [DEBUG] [Thread-20106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:58:57.660 [DEBUG] [Thread-20106] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:58:57.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:58:57.660 [DEBUG] [Thread-20106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:58:57.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:58:57.716 [DEBUG] [Thread-20106] [transport.py] [_log()] userauth is OK
2026-04-15T13:58:57.716 [DEBUG] [Thread-20106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:58:57.716 [DEBUG] [Thread-20106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:58:57.716 [DEBUG] [Thread-20106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:58:57.716 [DEBUG] [Thread-20106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:58:57.741 [INFO] [Thread-20106] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:58:57.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:58:57.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:58:58.572 [DEBUG] [Thread-20106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:58:58.572 [DEBUG] [Thread-20106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:58:58.620 [DEBUG] [Thread-20106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:58:58.620 [DEBUG] [Thread-20106] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:58:58.629 [DEBUG] [Thread-20106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:58:58.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:58:58.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')
2026-04-15T13:58:58.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
2026-04-15T13:58:58.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:58:58.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:58:58.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:58:58.663 [DEBUG] [Thread-20106] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:58:59.212 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:58:59.214 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:59:06.081 [DEBUG] [Thread-20108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:59:21.123 [DEBUG] [Thread-20109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:59:24.507 [DEBUG] [Thread-20110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:59:28.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T13:59:28.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T13:59:28.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
2026-04-15T13:59:29.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 58, 54), 8.48522, 56.8399, 0.0, 9.38808, 15.1588, 0, 0, 0, 2, 0, 0),)
2026-04-15T13:59:29.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:58:54
2026-04-15T13:59:30.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T13:59:30.873 [DEBUG] [Thread-20111] [transport.py] [_log()] starting thread (client mode): 0xf13e3d00
2026-04-15T13:59:30.873 [DEBUG] [Thread-20111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:59:30.893 [DEBUG] [Thread-20111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T13:59:30.893 [INFO] [Thread-20111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T13:59:30.896 [DEBUG] [Thread-20111] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:59:30.896 [DEBUG] [Thread-20111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T13:59:30.896 [DEBUG] [Thread-20111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:59:30.897 [DEBUG] [Thread-20111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:59:30.897 [DEBUG] [Thread-20111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:59:30.897 [DEBUG] [Thread-20111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:59:30.897 [DEBUG] [Thread-20111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:59:30.897 [DEBUG] [Thread-20111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:59:30.897 [DEBUG] [Thread-20111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:59:30.897 [DEBUG] [Thread-20111] [transport.py] [_log()] client lang: <none>
2026-04-15T13:59:30.897 [DEBUG] [Thread-20111] [transport.py] [_log()] server lang: <none>
2026-04-15T13:59:30.897 [DEBUG] [Thread-20111] [transport.py] [_log()] kex follows: False
2026-04-15T13:59:30.897 [DEBUG] [Thread-20111] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:59:30.897 [DEBUG] [Thread-20111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:59:30.898 [DEBUG] [Thread-20111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:59:30.898 [DEBUG] [Thread-20111] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:59:30.898 [DEBUG] [Thread-20111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:59:30.898 [DEBUG] [Thread-20111] [transport.py] [_log()] Compression: none
2026-04-15T13:59:30.898 [DEBUG] [Thread-20111] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:59:30.915 [DEBUG] [Thread-20111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:59:30.915 [DEBUG] [Thread-20111] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:59:30.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T13:59:30.916 [DEBUG] [Thread-20111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T13:59:30.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:59:30.917 [DEBUG] [Thread-20111] [transport.py] [_log()] userauth is OK
2026-04-15T13:59:30.917 [DEBUG] [Thread-20111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:59:30.917 [DEBUG] [Thread-20111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:59:30.917 [DEBUG] [Thread-20111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T13:59:30.917 [DEBUG] [Thread-20111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:59:30.935 [INFO] [Thread-20111] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:59:30.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:59:31.733 [DEBUG] [Thread-20111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:59:31.733 [DEBUG] [Thread-20111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:59:31.734 [DEBUG] [Thread-20111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T13:59:31.774 [DEBUG] [Thread-20111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:59:31.774 [DEBUG] [Thread-20111] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:59:31.777 [DEBUG] [Thread-20111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:59:31.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:59:31.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T13:59:31.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T13:59:31.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T13:59:31.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:59:31.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T13:59:31.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:59:31.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:59:31.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T13:59:31.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.499096 -999.00  +13.90   8.60     64   +7.30 1 2 1 1 1   888    0 7.74 36.77 ----- 10.0 8.6 327.5 10.3 21.6 -20.2 20.3 -21.2 20.9 -17.7 22.1 -18.2
2026-04-15T13:59:31.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T13:59:31.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T13:59:31.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.499096
2026-04-15T13:59:31.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T13:59:31.802 [DEBUG] [Thread-20111] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:59:31.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T13:59:31.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T13:59:31.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T13:59:31.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T13:59:31.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:58:54', tmtdew=8.48522, humidity=56.8399, cloud=0.0, wind=9.38808, temperature=15.1588, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:58:41.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T13:59:32.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T13:59:32.063 [DEBUG] [Thread-20114] [transport.py] [_log()] starting thread (client mode): 0xf13ee860
2026-04-15T13:59:32.063 [DEBUG] [Thread-20114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T13:59:32.078 [DEBUG] [Thread-20114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T13:59:32.078 [INFO] [Thread-20114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T13:59:32.085 [DEBUG] [Thread-20114] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T13:59:32.085 [DEBUG] [Thread-20114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T13:59:32.086 [DEBUG] [Thread-20114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T13:59:32.086 [DEBUG] [Thread-20114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:59:32.086 [DEBUG] [Thread-20114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T13:59:32.086 [DEBUG] [Thread-20114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:59:32.086 [DEBUG] [Thread-20114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T13:59:32.086 [DEBUG] [Thread-20114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T13:59:32.086 [DEBUG] [Thread-20114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T13:59:32.086 [DEBUG] [Thread-20114] [transport.py] [_log()] client lang: <none>
2026-04-15T13:59:32.086 [DEBUG] [Thread-20114] [transport.py] [_log()] server lang: <none>
2026-04-15T13:59:32.086 [DEBUG] [Thread-20114] [transport.py] [_log()] kex follows: False
2026-04-15T13:59:32.086 [DEBUG] [Thread-20114] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T13:59:32.087 [DEBUG] [Thread-20114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T13:59:32.087 [DEBUG] [Thread-20114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T13:59:32.087 [DEBUG] [Thread-20114] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T13:59:32.087 [DEBUG] [Thread-20114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T13:59:32.087 [DEBUG] [Thread-20114] [transport.py] [_log()] Compression: none
2026-04-15T13:59:32.087 [DEBUG] [Thread-20114] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T13:59:32.143 [DEBUG] [Thread-20114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T13:59:32.143 [DEBUG] [Thread-20114] [transport.py] [_log()] Switch to new keys ...
2026-04-15T13:59:32.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T13:59:32.144 [DEBUG] [Thread-20114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T13:59:32.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T13:59:32.199 [DEBUG] [Thread-20114] [transport.py] [_log()] userauth is OK
2026-04-15T13:59:32.199 [DEBUG] [Thread-20114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T13:59:32.200 [DEBUG] [Thread-20114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T13:59:32.200 [DEBUG] [Thread-20114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T13:59:32.200 [DEBUG] [Thread-20114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T13:59:32.225 [INFO] [Thread-20114] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T13:59:32.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T13:59:32.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T13:59:33.062 [DEBUG] [Thread-20114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T13:59:33.063 [DEBUG] [Thread-20114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T13:59:33.111 [DEBUG] [Thread-20114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T13:59:33.111 [DEBUG] [Thread-20114] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T13:59:33.120 [DEBUG] [Thread-20114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T13:59:33.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T13:59: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')
2026-04-15T13:59: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
2026-04-15T13:59:33.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T13:59:33.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T13:59:33.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T13:59:33.153 [DEBUG] [Thread-20114] [transport.py] [_log()] EOF in transport thread
2026-04-15T13:59:36.155 [DEBUG] [Thread-20116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:59:51.201 [DEBUG] [Thread-20117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:59:59.354 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T13:59:59.355 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:00:03.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:00:03.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:00:03.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
2026-04-15T14:00:04.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 13, 59, 30), 8.24605, 57.5057, 0.0, 6.54768, 14.4797, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:00:04.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 13:59:30
2026-04-15T14:00:04.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:00:05.272 [DEBUG] [Thread-20118] [transport.py] [_log()] starting thread (client mode): 0xf13e3df0
2026-04-15T14:00:05.272 [DEBUG] [Thread-20118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:00:05.294 [DEBUG] [Thread-20118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:00:05.294 [INFO] [Thread-20118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:00:05.298 [DEBUG] [Thread-20118] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:00:05.298 [DEBUG] [Thread-20118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:00:05.298 [DEBUG] [Thread-20118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:00:05.298 [DEBUG] [Thread-20118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:00:05.298 [DEBUG] [Thread-20118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:00:05.298 [DEBUG] [Thread-20118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:00:05.299 [DEBUG] [Thread-20118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:00:05.299 [DEBUG] [Thread-20118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:00:05.299 [DEBUG] [Thread-20118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:00:05.299 [DEBUG] [Thread-20118] [transport.py] [_log()] client lang: <none>
2026-04-15T14:00:05.299 [DEBUG] [Thread-20118] [transport.py] [_log()] server lang: <none>
2026-04-15T14:00:05.299 [DEBUG] [Thread-20118] [transport.py] [_log()] kex follows: False
2026-04-15T14:00:05.299 [DEBUG] [Thread-20118] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:00:05.299 [DEBUG] [Thread-20118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:00:05.299 [DEBUG] [Thread-20118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:00:05.299 [DEBUG] [Thread-20118] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:00:05.299 [DEBUG] [Thread-20118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:00:05.300 [DEBUG] [Thread-20118] [transport.py] [_log()] Compression: none
2026-04-15T14:00:05.300 [DEBUG] [Thread-20118] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:00:05.317 [DEBUG] [Thread-20118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:00:05.317 [DEBUG] [Thread-20118] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:00:05.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:00:05.318 [DEBUG] [Thread-20118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:00:05.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:00:05.318 [DEBUG] [Thread-20118] [transport.py] [_log()] userauth is OK
2026-04-15T14:00:05.319 [DEBUG] [Thread-20118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:00:05.319 [DEBUG] [Thread-20118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:00:05.319 [DEBUG] [Thread-20118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:00:05.319 [DEBUG] [Thread-20118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:00:05.335 [INFO] [Thread-20118] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:00:05.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:00:06.233 [DEBUG] [Thread-20120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:00:12.239 [DEBUG] [Thread-20118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:00:12.240 [DEBUG] [Thread-20118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:00:12.240 [DEBUG] [Thread-20118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:00:12.280 [DEBUG] [Thread-20118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:00:12.280 [DEBUG] [Thread-20118] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:00:12.283 [DEBUG] [Thread-20118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:00:12.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:00:12.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:00:12.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:00:12.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:00:12.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:00:12.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:00:12.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:00:12.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:00:12.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:00:12.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.499443 -999.00  +14.10  11.31     65   +7.60 1 2 1 1 1   888    0 7.58 35.12 ----- 8.0 11.3 318.6 12.6 21.7 -21.9 20.4 -20.5 21.0 -17.7 22.1 -18.2
2026-04-15T14:00:12.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:00:12.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:00:12.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.499443
2026-04-15T14:00:12.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:00:12.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:00:12.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:00:12.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:00:12.379 [DEBUG] [Thread-20118] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:00:12.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:00:12.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T13:59:30', tmtdew=8.24605, humidity=57.5057, cloud=0.0, wind=6.54768, temperature=14.4797, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T11:59:11.875', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:00:12.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:00:12.635 [DEBUG] [Thread-20122] [transport.py] [_log()] starting thread (client mode): 0xf13e39d0
2026-04-15T14:00:12.635 [DEBUG] [Thread-20122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:00:12.650 [DEBUG] [Thread-20122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:00:12.650 [INFO] [Thread-20122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:00:12.657 [DEBUG] [Thread-20122] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:00:12.657 [DEBUG] [Thread-20122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:00:12.657 [DEBUG] [Thread-20122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:00:12.657 [DEBUG] [Thread-20122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:00:12.657 [DEBUG] [Thread-20122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:00:12.657 [DEBUG] [Thread-20122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:00:12.658 [DEBUG] [Thread-20122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:00:12.658 [DEBUG] [Thread-20122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:00:12.658 [DEBUG] [Thread-20122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:00:12.658 [DEBUG] [Thread-20122] [transport.py] [_log()] client lang: <none>
2026-04-15T14:00:12.658 [DEBUG] [Thread-20122] [transport.py] [_log()] server lang: <none>
2026-04-15T14:00:12.658 [DEBUG] [Thread-20122] [transport.py] [_log()] kex follows: False
2026-04-15T14:00:12.658 [DEBUG] [Thread-20122] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:00:12.658 [DEBUG] [Thread-20122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:00:12.658 [DEBUG] [Thread-20122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:00:12.658 [DEBUG] [Thread-20122] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:00:12.658 [DEBUG] [Thread-20122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:00:12.659 [DEBUG] [Thread-20122] [transport.py] [_log()] Compression: none
2026-04-15T14:00:12.659 [DEBUG] [Thread-20122] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:00:12.716 [DEBUG] [Thread-20122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:00:12.716 [DEBUG] [Thread-20122] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:00:12.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:00:12.717 [DEBUG] [Thread-20122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:00:12.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:00:12.773 [DEBUG] [Thread-20122] [transport.py] [_log()] userauth is OK
2026-04-15T14:00:12.773 [DEBUG] [Thread-20122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:00:12.773 [DEBUG] [Thread-20122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:00:12.773 [DEBUG] [Thread-20122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:00:12.773 [DEBUG] [Thread-20122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:00:12.798 [INFO] [Thread-20122] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:00:12.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:00:12.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:00:13.609 [DEBUG] [Thread-20122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:00:13.610 [DEBUG] [Thread-20122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:00:13.657 [DEBUG] [Thread-20122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:00:13.657 [DEBUG] [Thread-20122] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:00:13.666 [DEBUG] [Thread-20122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:00:13.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:00:13.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')
2026-04-15T14:00:13.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
2026-04-15T14:00:13.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:00:13.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:00:13.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:00:13.701 [DEBUG] [Thread-20122] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:00:21.263 [DEBUG] [Thread-20124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:00:24.601 [DEBUG] [Thread-20125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:00:36.307 [DEBUG] [Thread-20126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:00:43.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:00:43.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:00:43.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
2026-04-15T14:00:45.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 0, 5), 8.06555, 58.2348, 0.0, 11.1164, 14.5791, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:00:45.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:00:05
2026-04-15T14:00:45.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:00:46.114 [DEBUG] [Thread-20127] [transport.py] [_log()] starting thread (client mode): 0xf13e2f20
2026-04-15T14:00:46.114 [DEBUG] [Thread-20127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:00:46.132 [DEBUG] [Thread-20127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:00:46.132 [INFO] [Thread-20127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:00:46.135 [DEBUG] [Thread-20127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:00:46.135 [DEBUG] [Thread-20127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:00:46.136 [DEBUG] [Thread-20127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:00:46.136 [DEBUG] [Thread-20127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:00:46.136 [DEBUG] [Thread-20127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:00:46.136 [DEBUG] [Thread-20127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:00:46.136 [DEBUG] [Thread-20127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:00:46.136 [DEBUG] [Thread-20127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:00:46.136 [DEBUG] [Thread-20127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:00:46.136 [DEBUG] [Thread-20127] [transport.py] [_log()] client lang: <none>
2026-04-15T14:00:46.136 [DEBUG] [Thread-20127] [transport.py] [_log()] server lang: <none>
2026-04-15T14:00:46.136 [DEBUG] [Thread-20127] [transport.py] [_log()] kex follows: False
2026-04-15T14:00:46.136 [DEBUG] [Thread-20127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:00:46.137 [DEBUG] [Thread-20127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:00:46.137 [DEBUG] [Thread-20127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:00:46.137 [DEBUG] [Thread-20127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:00:46.137 [DEBUG] [Thread-20127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:00:46.137 [DEBUG] [Thread-20127] [transport.py] [_log()] Compression: none
2026-04-15T14:00:46.137 [DEBUG] [Thread-20127] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:00:46.145 [DEBUG] [Thread-20127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:00:46.145 [DEBUG] [Thread-20127] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:00:46.146 [DEBUG] [Thread-20127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:00:46.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:00:46.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:00:46.147 [DEBUG] [Thread-20127] [transport.py] [_log()] userauth is OK
2026-04-15T14:00:46.147 [DEBUG] [Thread-20127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:00:46.147 [DEBUG] [Thread-20127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:00:46.147 [DEBUG] [Thread-20127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:00:46.147 [DEBUG] [Thread-20127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:00:46.169 [INFO] [Thread-20127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:00:46.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:00:46.963 [DEBUG] [Thread-20127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:00:46.963 [DEBUG] [Thread-20127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:00:46.964 [DEBUG] [Thread-20127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:00:47.004 [DEBUG] [Thread-20127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:00:47.004 [DEBUG] [Thread-20127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:00:47.007 [DEBUG] [Thread-20127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:00:47.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:00:47.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:00:47.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:00:47.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:00:47.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:00:47.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:00:47.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:00:47.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:00:47.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:00:47.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.500137 -999.00  +14.40   5.52     64   +7.90 1 2 1 1 1   888    0 7.37 28.22 ----- 5.8 5.5 346.6 11.3 21.8 -21.7 20.6 -20.9 21.1 -18.5 22.3 -20.6
2026-04-15T14:00:47.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:00:47.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:00:47.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.500137
2026-04-15T14:00:47.032 [DEBUG] [Thread-20127] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:00:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:00:47.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:00:47.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:00:47.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:00:47.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:00:47.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:00:05', tmtdew=8.06555, humidity=58.2348, cloud=0.0, wind=11.1164, temperature=14.5791, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:00:11.837', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:00:47.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:00:47.285 [DEBUG] [Thread-20130] [transport.py] [_log()] starting thread (client mode): 0xf13e0250
2026-04-15T14:00:47.285 [DEBUG] [Thread-20130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:00:47.301 [DEBUG] [Thread-20130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:00:47.301 [INFO] [Thread-20130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:00:47.310 [DEBUG] [Thread-20130] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:00:47.310 [DEBUG] [Thread-20130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:00:47.310 [DEBUG] [Thread-20130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:00:47.310 [DEBUG] [Thread-20130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:00:47.310 [DEBUG] [Thread-20130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:00:47.310 [DEBUG] [Thread-20130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:00:47.310 [DEBUG] [Thread-20130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:00:47.310 [DEBUG] [Thread-20130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:00:47.310 [DEBUG] [Thread-20130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:00:47.311 [DEBUG] [Thread-20130] [transport.py] [_log()] client lang: <none>
2026-04-15T14:00:47.311 [DEBUG] [Thread-20130] [transport.py] [_log()] server lang: <none>
2026-04-15T14:00:47.311 [DEBUG] [Thread-20130] [transport.py] [_log()] kex follows: False
2026-04-15T14:00:47.311 [DEBUG] [Thread-20130] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:00:47.311 [DEBUG] [Thread-20130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:00:47.311 [DEBUG] [Thread-20130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:00:47.311 [DEBUG] [Thread-20130] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:00:47.311 [DEBUG] [Thread-20130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:00:47.311 [DEBUG] [Thread-20130] [transport.py] [_log()] Compression: none
2026-04-15T14:00:47.311 [DEBUG] [Thread-20130] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:00:47.367 [DEBUG] [Thread-20130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:00:47.367 [DEBUG] [Thread-20130] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:00:47.367 [DEBUG] [Thread-20130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:00:47.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:00:47.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:00:47.424 [DEBUG] [Thread-20130] [transport.py] [_log()] userauth is OK
2026-04-15T14:00:47.424 [DEBUG] [Thread-20130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:00:47.424 [DEBUG] [Thread-20130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:00:47.424 [DEBUG] [Thread-20130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:00:47.424 [DEBUG] [Thread-20130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:00:47.450 [INFO] [Thread-20130] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:00:47.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:00:47.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:00:48.258 [DEBUG] [Thread-20130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:00:48.259 [DEBUG] [Thread-20130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:00:48.306 [DEBUG] [Thread-20130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:00:48.306 [DEBUG] [Thread-20130] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:00:48.315 [DEBUG] [Thread-20130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:00:48.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:00:48.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')
2026-04-15T14:00:48.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
2026-04-15T14:00:48.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:00:48.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:00:48.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:00:48.351 [DEBUG] [Thread-20130] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:00:51.337 [DEBUG] [Thread-20132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:00:59.500 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:00:59.501 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:01:06.380 [DEBUG] [Thread-20133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:01:18.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:01:18.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:01:18.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
2026-04-15T14:01:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 0, 40), 8.56825, 56.5747, 0.0, 19.6546, 15.3907, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:01:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:00:40
2026-04-15T14:01:20.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:01:20.624 [DEBUG] [Thread-20134] [transport.py] [_log()] starting thread (client mode): 0xf1335390
2026-04-15T14:01:20.625 [DEBUG] [Thread-20134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:01:20.645 [DEBUG] [Thread-20134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:01:20.645 [INFO] [Thread-20134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:01:20.649 [DEBUG] [Thread-20134] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:01:20.649 [DEBUG] [Thread-20134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:01:20.649 [DEBUG] [Thread-20134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:01:20.649 [DEBUG] [Thread-20134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:01:20.649 [DEBUG] [Thread-20134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:01:20.649 [DEBUG] [Thread-20134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:01:20.649 [DEBUG] [Thread-20134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:01:20.649 [DEBUG] [Thread-20134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:01:20.649 [DEBUG] [Thread-20134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:01:20.649 [DEBUG] [Thread-20134] [transport.py] [_log()] client lang: <none>
2026-04-15T14:01:20.650 [DEBUG] [Thread-20134] [transport.py] [_log()] server lang: <none>
2026-04-15T14:01:20.650 [DEBUG] [Thread-20134] [transport.py] [_log()] kex follows: False
2026-04-15T14:01:20.650 [DEBUG] [Thread-20134] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:01:20.650 [DEBUG] [Thread-20134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:01:20.650 [DEBUG] [Thread-20134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:01:20.650 [DEBUG] [Thread-20134] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:01:20.650 [DEBUG] [Thread-20134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:01:20.650 [DEBUG] [Thread-20134] [transport.py] [_log()] Compression: none
2026-04-15T14:01:20.650 [DEBUG] [Thread-20134] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:01:20.668 [DEBUG] [Thread-20134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:01:20.668 [DEBUG] [Thread-20134] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:01:20.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:01:20.669 [DEBUG] [Thread-20134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:01:20.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:01:20.670 [DEBUG] [Thread-20134] [transport.py] [_log()] userauth is OK
2026-04-15T14:01:20.670 [DEBUG] [Thread-20134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:01:20.670 [DEBUG] [Thread-20134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:01:20.670 [DEBUG] [Thread-20134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:01:20.670 [DEBUG] [Thread-20134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:01:20.693 [INFO] [Thread-20134] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:01:20.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:01:21.410 [DEBUG] [Thread-20136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:01:21.434 [DEBUG] [Thread-20134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:01:21.435 [DEBUG] [Thread-20134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:01:21.435 [DEBUG] [Thread-20134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:01:21.476 [DEBUG] [Thread-20134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:01:21.476 [DEBUG] [Thread-20134] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:01:21.479 [DEBUG] [Thread-20134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:01:21.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:01:21.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:01:21.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:01:21.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:01:21.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:01:21.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:01:21.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:01:21.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:01:21.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:01:21.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.500485 -999.00  +14.50  15.76     64   +7.90 1 2 1 1 1   888    0 7.22 24.21 ----- 14.7 15.8 301.0 17.1 21.8 -24.0 20.7 -21.5 20.9 -21.2 22.3 -21.4
2026-04-15T14:01:21.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:01:21.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:01:21.505 [DEBUG] [Thread-20134] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:01:21.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.500485
2026-04-15T14:01:21.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:01:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:01:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:01:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:01:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:01:21.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:00:40', tmtdew=8.56825, humidity=56.5747, cloud=0.0, wind=19.6546, temperature=15.3907, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:00:41.904', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:01:21.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:01:21.765 [DEBUG] [Thread-20138] [transport.py] [_log()] starting thread (client mode): 0xee902260
2026-04-15T14:01:21.765 [DEBUG] [Thread-20138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:01:21.778 [DEBUG] [Thread-20138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:01:21.778 [INFO] [Thread-20138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:01:21.785 [DEBUG] [Thread-20138] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:01:21.785 [DEBUG] [Thread-20138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:01:21.785 [DEBUG] [Thread-20138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:01:21.785 [DEBUG] [Thread-20138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:01:21.786 [DEBUG] [Thread-20138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:01:21.786 [DEBUG] [Thread-20138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:01:21.786 [DEBUG] [Thread-20138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:01:21.786 [DEBUG] [Thread-20138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:01:21.786 [DEBUG] [Thread-20138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:01:21.786 [DEBUG] [Thread-20138] [transport.py] [_log()] client lang: <none>
2026-04-15T14:01:21.786 [DEBUG] [Thread-20138] [transport.py] [_log()] server lang: <none>
2026-04-15T14:01:21.786 [DEBUG] [Thread-20138] [transport.py] [_log()] kex follows: False
2026-04-15T14:01:21.786 [DEBUG] [Thread-20138] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:01:21.786 [DEBUG] [Thread-20138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:01:21.786 [DEBUG] [Thread-20138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:01:21.786 [DEBUG] [Thread-20138] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:01:21.786 [DEBUG] [Thread-20138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:01:21.786 [DEBUG] [Thread-20138] [transport.py] [_log()] Compression: none
2026-04-15T14:01:21.786 [DEBUG] [Thread-20138] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:01:21.843 [DEBUG] [Thread-20138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:01:21.843 [DEBUG] [Thread-20138] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:01:21.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:01:21.844 [DEBUG] [Thread-20138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:01:21.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:01:21.899 [DEBUG] [Thread-20138] [transport.py] [_log()] userauth is OK
2026-04-15T14:01:21.900 [DEBUG] [Thread-20138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:01:21.900 [DEBUG] [Thread-20138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:01:21.900 [DEBUG] [Thread-20138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:01:21.900 [DEBUG] [Thread-20138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:01:21.924 [INFO] [Thread-20138] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:01:21.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:01:21.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:01:22.775 [DEBUG] [Thread-20138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:01:22.775 [DEBUG] [Thread-20138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:01:22.823 [DEBUG] [Thread-20138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:01:22.823 [DEBUG] [Thread-20138] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:01:22.832 [DEBUG] [Thread-20138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:01:22.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:01:22.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')
2026-04-15T14:01:22.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
2026-04-15T14:01:22.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:01:22.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:01:22.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:01:22.869 [DEBUG] [Thread-20138] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:01:24.703 [DEBUG] [Thread-20140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:01:36.440 [DEBUG] [Thread-20141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:01:51.481 [DEBUG] [Thread-20142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:01:52.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:01:52.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:01:52.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:01:54.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 1, 17), 8.22883, 57.8037, 0.0, 14.5739, 14.5285, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:01:54.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:01:17
2026-04-15T14:01:54.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:01:55.174 [DEBUG] [Thread-20143] [transport.py] [_log()] starting thread (client mode): 0xf13c92a0
2026-04-15T14:01:55.174 [DEBUG] [Thread-20143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:01:55.195 [DEBUG] [Thread-20143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:01:55.195 [INFO] [Thread-20143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:01:55.197 [DEBUG] [Thread-20143] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:01:55.197 [DEBUG] [Thread-20143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:01:55.198 [DEBUG] [Thread-20143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:01:55.198 [DEBUG] [Thread-20143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:01:55.198 [DEBUG] [Thread-20143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:01:55.198 [DEBUG] [Thread-20143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:01:55.198 [DEBUG] [Thread-20143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:01:55.198 [DEBUG] [Thread-20143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:01:55.198 [DEBUG] [Thread-20143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:01:55.198 [DEBUG] [Thread-20143] [transport.py] [_log()] client lang: <none>
2026-04-15T14:01:55.198 [DEBUG] [Thread-20143] [transport.py] [_log()] server lang: <none>
2026-04-15T14:01:55.198 [DEBUG] [Thread-20143] [transport.py] [_log()] kex follows: False
2026-04-15T14:01:55.198 [DEBUG] [Thread-20143] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:01:55.198 [DEBUG] [Thread-20143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:01:55.199 [DEBUG] [Thread-20143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:01:55.199 [DEBUG] [Thread-20143] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:01:55.199 [DEBUG] [Thread-20143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:01:55.199 [DEBUG] [Thread-20143] [transport.py] [_log()] Compression: none
2026-04-15T14:01:55.199 [DEBUG] [Thread-20143] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:01:55.214 [DEBUG] [Thread-20143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:01:55.214 [DEBUG] [Thread-20143] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:01:55.215 [DEBUG] [Thread-20143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:01:55.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:01:55.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:01:55.216 [DEBUG] [Thread-20143] [transport.py] [_log()] userauth is OK
2026-04-15T14:01:55.216 [DEBUG] [Thread-20143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:01:55.216 [DEBUG] [Thread-20143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:01:55.216 [DEBUG] [Thread-20143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:01:55.216 [DEBUG] [Thread-20143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:01:55.233 [INFO] [Thread-20143] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:01:55.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:01:55.831 [DEBUG] [Thread-20143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:01:55.831 [DEBUG] [Thread-20143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:01:55.831 [DEBUG] [Thread-20143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:01:55.872 [DEBUG] [Thread-20143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:01:55.872 [DEBUG] [Thread-20143] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:01:55.875 [DEBUG] [Thread-20143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:01:55.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:01:55.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:01:55.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:01:55.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:01:55.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:01:55.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:01:55.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:01:55.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:01:55.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:01:55.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.501179 -999.00  +14.40  15.58     65   +8.10 1 2 1 1 1   888    0 7.32 22.28 ----- 23.4 15.6 302.4 22.7 21.7 -23.4 20.6 -22.2 20.9 -21.1 22.2 -21.8
2026-04-15T14:01:55.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:01:55.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:01:55.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.501179
2026-04-15T14:01:55.895 [DEBUG] [Thread-20143] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:01:55.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:01:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:01:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:01:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:01:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:01:55.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:01:17', tmtdew=8.22883, humidity=57.8037, cloud=0.0, wind=14.5739, temperature=14.5285, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:01:41.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:01:56.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:01:56.133 [DEBUG] [Thread-20146] [transport.py] [_log()] starting thread (client mode): 0xf13ed720
2026-04-15T14:01:56.133 [DEBUG] [Thread-20146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:01:56.147 [DEBUG] [Thread-20146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:01:56.148 [INFO] [Thread-20146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:01:56.155 [DEBUG] [Thread-20146] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:01:56.156 [DEBUG] [Thread-20146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:01:56.156 [DEBUG] [Thread-20146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:01:56.156 [DEBUG] [Thread-20146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:01:56.156 [DEBUG] [Thread-20146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:01:56.156 [DEBUG] [Thread-20146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:01:56.156 [DEBUG] [Thread-20146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:01:56.156 [DEBUG] [Thread-20146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:01:56.156 [DEBUG] [Thread-20146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:01:56.156 [DEBUG] [Thread-20146] [transport.py] [_log()] client lang: <none>
2026-04-15T14:01:56.156 [DEBUG] [Thread-20146] [transport.py] [_log()] server lang: <none>
2026-04-15T14:01:56.156 [DEBUG] [Thread-20146] [transport.py] [_log()] kex follows: False
2026-04-15T14:01:56.157 [DEBUG] [Thread-20146] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:01:56.157 [DEBUG] [Thread-20146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:01:56.157 [DEBUG] [Thread-20146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:01:56.157 [DEBUG] [Thread-20146] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:01:56.157 [DEBUG] [Thread-20146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:01:56.157 [DEBUG] [Thread-20146] [transport.py] [_log()] Compression: none
2026-04-15T14:01:56.157 [DEBUG] [Thread-20146] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:01:56.210 [DEBUG] [Thread-20146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:01:56.211 [DEBUG] [Thread-20146] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:01:56.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:01:56.211 [DEBUG] [Thread-20146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:01:56.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:01:56.267 [DEBUG] [Thread-20146] [transport.py] [_log()] userauth is OK
2026-04-15T14:01:56.267 [DEBUG] [Thread-20146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:01:56.268 [DEBUG] [Thread-20146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:01:56.268 [DEBUG] [Thread-20146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:01:56.268 [DEBUG] [Thread-20146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:01:56.285 [INFO] [Thread-20146] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:01:56.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:01:56.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:01:57.102 [DEBUG] [Thread-20146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:01:57.102 [DEBUG] [Thread-20146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:01:57.150 [DEBUG] [Thread-20146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:01:57.150 [DEBUG] [Thread-20146] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:01:57.159 [DEBUG] [Thread-20146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:01:57.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:01:57.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')
2026-04-15T14:01:57.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') -> 00000000
2026-04-15T14:01:57.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:01:57.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:01:57.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:01:57.195 [DEBUG] [Thread-20146] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:01:59.643 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:01:59.644 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:02:06.512 [DEBUG] [Thread-20148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:02:21.556 [DEBUG] [Thread-20149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:02:24.813 [DEBUG] [Thread-20150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:02:27.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:02:27.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:02:27.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:02:28.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 1, 52), 9.03761, 54.7514, 0.0, 23.1826, 15.2907, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:02:28.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:01:52
2026-04-15T14:02:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:02:29.389 [DEBUG] [Thread-20151] [transport.py] [_log()] starting thread (client mode): 0xf13e00a0
2026-04-15T14:02:29.389 [DEBUG] [Thread-20151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:02:29.410 [DEBUG] [Thread-20151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:02:29.410 [INFO] [Thread-20151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:02:29.412 [DEBUG] [Thread-20151] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:02:29.412 [DEBUG] [Thread-20151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:02:29.412 [DEBUG] [Thread-20151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:02:29.412 [DEBUG] [Thread-20151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:02:29.412 [DEBUG] [Thread-20151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:02:29.412 [DEBUG] [Thread-20151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:02:29.413 [DEBUG] [Thread-20151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:02:29.413 [DEBUG] [Thread-20151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:02:29.413 [DEBUG] [Thread-20151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:02:29.413 [DEBUG] [Thread-20151] [transport.py] [_log()] client lang: <none>
2026-04-15T14:02:29.413 [DEBUG] [Thread-20151] [transport.py] [_log()] server lang: <none>
2026-04-15T14:02:29.413 [DEBUG] [Thread-20151] [transport.py] [_log()] kex follows: False
2026-04-15T14:02:29.413 [DEBUG] [Thread-20151] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:02:29.413 [DEBUG] [Thread-20151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:02:29.413 [DEBUG] [Thread-20151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:02:29.413 [DEBUG] [Thread-20151] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:02:29.413 [DEBUG] [Thread-20151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:02:29.413 [DEBUG] [Thread-20151] [transport.py] [_log()] Compression: none
2026-04-15T14:02:29.414 [DEBUG] [Thread-20151] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:02:29.428 [DEBUG] [Thread-20151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:02:29.428 [DEBUG] [Thread-20151] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:02:29.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:02:29.429 [DEBUG] [Thread-20151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:02:29.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:02:29.430 [DEBUG] [Thread-20151] [transport.py] [_log()] userauth is OK
2026-04-15T14:02:29.430 [DEBUG] [Thread-20151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:02:29.430 [DEBUG] [Thread-20151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:02:29.430 [DEBUG] [Thread-20151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:02:29.430 [DEBUG] [Thread-20151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:02:29.448 [INFO] [Thread-20151] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:02:29.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:02:30.024 [DEBUG] [Thread-20151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:02:30.025 [DEBUG] [Thread-20151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:02:30.025 [DEBUG] [Thread-20151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:02:30.065 [DEBUG] [Thread-20151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:02:30.065 [DEBUG] [Thread-20151] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:02:30.067 [DEBUG] [Thread-20151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:02:30.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:02:30.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:02:30.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:02:30.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:02:30.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:02:30.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:02:30.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:02:30.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:02:30.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:02:30.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.501526 -999.00  +14.30  19.67     65   +7.90 1 2 1 1 1   888    0 7.29 20.45 ----- 19.1 19.7 308.0 29.3 21.4 -26.2 20.4 -22.6 20.7 -20.1 21.9 -23.5
2026-04-15T14:02:30.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:02:30.086 [DEBUG] [Thread-20151] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:02:30.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:02:30.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.501526
2026-04-15T14:02:30.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:02:30.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:02:30.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:02:30.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:02:30.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:02:30.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:01:52', tmtdew=9.03761, humidity=54.7514, cloud=0.0, wind=23.1826, temperature=15.2907, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:02:11.846', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:02:30.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:02:30.352 [DEBUG] [Thread-20154] [transport.py] [_log()] starting thread (client mode): 0xf13e0f70
2026-04-15T14:02:30.352 [DEBUG] [Thread-20154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:02:30.366 [DEBUG] [Thread-20154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:02:30.366 [INFO] [Thread-20154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:02:30.374 [DEBUG] [Thread-20154] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:02:30.374 [DEBUG] [Thread-20154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:02:30.374 [DEBUG] [Thread-20154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:02:30.374 [DEBUG] [Thread-20154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:02:30.374 [DEBUG] [Thread-20154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:02:30.374 [DEBUG] [Thread-20154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:02:30.374 [DEBUG] [Thread-20154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:02:30.374 [DEBUG] [Thread-20154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:02:30.374 [DEBUG] [Thread-20154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:02:30.374 [DEBUG] [Thread-20154] [transport.py] [_log()] client lang: <none>
2026-04-15T14:02:30.375 [DEBUG] [Thread-20154] [transport.py] [_log()] server lang: <none>
2026-04-15T14:02:30.375 [DEBUG] [Thread-20154] [transport.py] [_log()] kex follows: False
2026-04-15T14:02:30.375 [DEBUG] [Thread-20154] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:02:30.375 [DEBUG] [Thread-20154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:02:30.375 [DEBUG] [Thread-20154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:02:30.375 [DEBUG] [Thread-20154] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:02:30.375 [DEBUG] [Thread-20154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:02:30.375 [DEBUG] [Thread-20154] [transport.py] [_log()] Compression: none
2026-04-15T14:02:30.375 [DEBUG] [Thread-20154] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:02:30.430 [DEBUG] [Thread-20154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:02:30.431 [DEBUG] [Thread-20154] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:02:30.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:02:30.431 [DEBUG] [Thread-20154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:02:30.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:02:30.488 [DEBUG] [Thread-20154] [transport.py] [_log()] userauth is OK
2026-04-15T14:02:30.488 [DEBUG] [Thread-20154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:02:30.488 [DEBUG] [Thread-20154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:02:30.489 [DEBUG] [Thread-20154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:02:30.489 [DEBUG] [Thread-20154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:02:30.520 [INFO] [Thread-20154] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:02:30.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:02:30.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:02:31.321 [DEBUG] [Thread-20154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:02:31.321 [DEBUG] [Thread-20154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:02:31.369 [DEBUG] [Thread-20154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:02:31.369 [DEBUG] [Thread-20154] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:02:31.378 [DEBUG] [Thread-20154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:02:31.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:02:31.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')
2026-04-15T14:02:31.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
2026-04-15T14:02:31.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:02:31.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:02:31.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:02:31.413 [DEBUG] [Thread-20154] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:02:36.588 [DEBUG] [Thread-20156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:02:51.635 [DEBUG] [Thread-20157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:02:59.783 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:02:59.783 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:03:01.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:03:01.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:03:01.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
2026-04-15T14:03:02.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 2, 28), 8.27949, 57.3895, 0.0, 14.31, 14.4291, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:03:02.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:02:28
2026-04-15T14:03:03.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:03:03.586 [DEBUG] [Thread-20158] [transport.py] [_log()] starting thread (client mode): 0xf13c8520
2026-04-15T14:03:03.586 [DEBUG] [Thread-20158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:03:03.606 [DEBUG] [Thread-20158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:03:03.606 [INFO] [Thread-20158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:03:03.609 [DEBUG] [Thread-20158] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:03:03.609 [DEBUG] [Thread-20158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:03:03.609 [DEBUG] [Thread-20158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:03:03.609 [DEBUG] [Thread-20158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:03:03.610 [DEBUG] [Thread-20158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:03:03.610 [DEBUG] [Thread-20158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:03:03.610 [DEBUG] [Thread-20158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:03:03.610 [DEBUG] [Thread-20158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:03:03.610 [DEBUG] [Thread-20158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:03:03.610 [DEBUG] [Thread-20158] [transport.py] [_log()] client lang: <none>
2026-04-15T14:03:03.610 [DEBUG] [Thread-20158] [transport.py] [_log()] server lang: <none>
2026-04-15T14:03:03.610 [DEBUG] [Thread-20158] [transport.py] [_log()] kex follows: False
2026-04-15T14:03:03.610 [DEBUG] [Thread-20158] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:03:03.610 [DEBUG] [Thread-20158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:03:03.610 [DEBUG] [Thread-20158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:03:03.610 [DEBUG] [Thread-20158] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:03:03.611 [DEBUG] [Thread-20158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:03:03.611 [DEBUG] [Thread-20158] [transport.py] [_log()] Compression: none
2026-04-15T14:03:03.611 [DEBUG] [Thread-20158] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:03:03.624 [DEBUG] [Thread-20158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:03:03.624 [DEBUG] [Thread-20158] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:03:03.625 [DEBUG] [Thread-20158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:03:03.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:03:03.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:03:03.626 [DEBUG] [Thread-20158] [transport.py] [_log()] userauth is OK
2026-04-15T14:03:03.626 [DEBUG] [Thread-20158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:03:03.626 [DEBUG] [Thread-20158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:03:03.626 [DEBUG] [Thread-20158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:03:03.626 [DEBUG] [Thread-20158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:03:03.649 [INFO] [Thread-20158] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:03:03.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:03:04.278 [DEBUG] [Thread-20158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:03:04.278 [DEBUG] [Thread-20158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:03:04.279 [DEBUG] [Thread-20158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:03:04.319 [DEBUG] [Thread-20158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:03:04.319 [DEBUG] [Thread-20158] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:03:04.322 [DEBUG] [Thread-20158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:03:04.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:03:04.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:03:04.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:03:04.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:03:04.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:03:04.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:03:04.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:03:04.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:03:04.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:03:04.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.501873 -999.00  +14.00  20.55     63   +7.30 1 2 1 1 1   888    0 7.13 18.90 ----- 17.0 20.6 312.2 26.1 21.3 -24.9 20.3 -24.5 20.6 -20.7 21.8 -22.0
2026-04-15T14:03:04.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:03:04.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:03:04.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.501873
2026-04-15T14:03:04.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:03:04.349 [DEBUG] [Thread-20158] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:03:04.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:03:04.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:03:04.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:03:04.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:03:04.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:02:28', tmtdew=8.27949, humidity=57.3895, cloud=0.0, wind=14.31, temperature=14.4291, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:02:41.827', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:03:04.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:03:04.606 [DEBUG] [Thread-20161] [transport.py] [_log()] starting thread (client mode): 0xee904c10
2026-04-15T14:03:04.606 [DEBUG] [Thread-20161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:03:04.621 [DEBUG] [Thread-20161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:03:04.621 [INFO] [Thread-20161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:03:04.629 [DEBUG] [Thread-20161] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:03:04.629 [DEBUG] [Thread-20161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:03:04.629 [DEBUG] [Thread-20161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:03:04.629 [DEBUG] [Thread-20161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:03:04.629 [DEBUG] [Thread-20161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:03:04.629 [DEBUG] [Thread-20161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:03:04.629 [DEBUG] [Thread-20161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:03:04.629 [DEBUG] [Thread-20161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:03:04.629 [DEBUG] [Thread-20161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:03:04.629 [DEBUG] [Thread-20161] [transport.py] [_log()] client lang: <none>
2026-04-15T14:03:04.630 [DEBUG] [Thread-20161] [transport.py] [_log()] server lang: <none>
2026-04-15T14:03:04.630 [DEBUG] [Thread-20161] [transport.py] [_log()] kex follows: False
2026-04-15T14:03:04.630 [DEBUG] [Thread-20161] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:03:04.630 [DEBUG] [Thread-20161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:03:04.630 [DEBUG] [Thread-20161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:03:04.630 [DEBUG] [Thread-20161] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:03:04.630 [DEBUG] [Thread-20161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:03:04.630 [DEBUG] [Thread-20161] [transport.py] [_log()] Compression: none
2026-04-15T14:03:04.630 [DEBUG] [Thread-20161] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:03:04.687 [DEBUG] [Thread-20161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:03:04.687 [DEBUG] [Thread-20161] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:03:04.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:03:04.688 [DEBUG] [Thread-20161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:03:04.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:03:04.743 [DEBUG] [Thread-20161] [transport.py] [_log()] userauth is OK
2026-04-15T14:03:04.744 [DEBUG] [Thread-20161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:03:04.744 [DEBUG] [Thread-20161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:03:04.744 [DEBUG] [Thread-20161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:03:04.744 [DEBUG] [Thread-20161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:03:04.769 [INFO] [Thread-20161] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:03:04.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:03:04.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:03:05.598 [DEBUG] [Thread-20161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:03:05.598 [DEBUG] [Thread-20161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:03:05.646 [DEBUG] [Thread-20161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:03:05.646 [DEBUG] [Thread-20161] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:03:05.655 [DEBUG] [Thread-20161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:03:05.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:03:05.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')
2026-04-15T14:03:05.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
2026-04-15T14:03:05.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:03:05.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:03:05.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:03:05.691 [DEBUG] [Thread-20161] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:03:06.666 [DEBUG] [Thread-20163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:03:21.709 [DEBUG] [Thread-20164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:03:24.914 [DEBUG] [Thread-20165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:03:35.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:03:35.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:03:35.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
2026-04-15T14:03:36.740 [DEBUG] [Thread-20166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:03:36.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 3, 3), 8.26868, 57.4226, 0.0, 16.0387, 14.396, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:03:36.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:03:03
2026-04-15T14:03:37.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:03:37.806 [DEBUG] [Thread-20167] [transport.py] [_log()] starting thread (client mode): 0xf1367010
2026-04-15T14:03:37.807 [DEBUG] [Thread-20167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:03:37.827 [DEBUG] [Thread-20167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:03:37.827 [INFO] [Thread-20167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:03:37.830 [DEBUG] [Thread-20167] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:03:37.830 [DEBUG] [Thread-20167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:03:37.830 [DEBUG] [Thread-20167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:03:37.830 [DEBUG] [Thread-20167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:03:37.830 [DEBUG] [Thread-20167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:03:37.830 [DEBUG] [Thread-20167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:03:37.831 [DEBUG] [Thread-20167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:03:37.831 [DEBUG] [Thread-20167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:03:37.831 [DEBUG] [Thread-20167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:03:37.831 [DEBUG] [Thread-20167] [transport.py] [_log()] client lang: <none>
2026-04-15T14:03:37.831 [DEBUG] [Thread-20167] [transport.py] [_log()] server lang: <none>
2026-04-15T14:03:37.831 [DEBUG] [Thread-20167] [transport.py] [_log()] kex follows: False
2026-04-15T14:03:37.831 [DEBUG] [Thread-20167] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:03:37.831 [DEBUG] [Thread-20167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:03:37.831 [DEBUG] [Thread-20167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:03:37.831 [DEBUG] [Thread-20167] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:03:37.831 [DEBUG] [Thread-20167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:03:37.832 [DEBUG] [Thread-20167] [transport.py] [_log()] Compression: none
2026-04-15T14:03:37.832 [DEBUG] [Thread-20167] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:03:37.848 [DEBUG] [Thread-20167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:03:37.848 [DEBUG] [Thread-20167] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:03:37.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:03:37.849 [DEBUG] [Thread-20167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:03:37.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:03:37.850 [DEBUG] [Thread-20167] [transport.py] [_log()] userauth is OK
2026-04-15T14:03:37.850 [DEBUG] [Thread-20167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:03:37.850 [DEBUG] [Thread-20167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:03:37.850 [DEBUG] [Thread-20167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:03:37.850 [DEBUG] [Thread-20167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:03:37.875 [INFO] [Thread-20167] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:03:37.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:03:38.481 [DEBUG] [Thread-20167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:03:38.481 [DEBUG] [Thread-20167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:03:38.481 [DEBUG] [Thread-20167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:03:38.522 [DEBUG] [Thread-20167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:03:38.522 [DEBUG] [Thread-20167] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:03:38.524 [DEBUG] [Thread-20167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:03:38.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:03:38.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:03:38.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:03:38.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:03:38.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:03:38.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:03:38.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:03:38.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:03:38.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:03:38.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.502221 -999.00  +14.10  15.13     63   +7.40 1 2 1 1 1   888    0 6.92 14.90 ----- 9.6 15.1 342.7 20.3 21.2 -24.6 20.3 -23.3 20.5 -20.6 21.6 -22.8
2026-04-15T14:03:38.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:03:38.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:03:38.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.502221
2026-04-15T14:03:38.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:03:38.551 [DEBUG] [Thread-20167] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:03:38.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:03:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:03:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:03:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:03:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:03:03', tmtdew=8.26868, humidity=57.4226, cloud=0.0, wind=16.0387, temperature=14.396, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:03:11.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:03:38.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:03:38.806 [DEBUG] [Thread-20170] [transport.py] [_log()] starting thread (client mode): 0xee989f30
2026-04-15T14:03:38.807 [DEBUG] [Thread-20170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:03:38.821 [DEBUG] [Thread-20170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:03:38.821 [INFO] [Thread-20170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:03:38.828 [DEBUG] [Thread-20170] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:03:38.828 [DEBUG] [Thread-20170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:03:38.828 [DEBUG] [Thread-20170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:03:38.828 [DEBUG] [Thread-20170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:03:38.829 [DEBUG] [Thread-20170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:03:38.829 [DEBUG] [Thread-20170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:03:38.829 [DEBUG] [Thread-20170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:03:38.829 [DEBUG] [Thread-20170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:03:38.829 [DEBUG] [Thread-20170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:03:38.829 [DEBUG] [Thread-20170] [transport.py] [_log()] client lang: <none>
2026-04-15T14:03:38.829 [DEBUG] [Thread-20170] [transport.py] [_log()] server lang: <none>
2026-04-15T14:03:38.829 [DEBUG] [Thread-20170] [transport.py] [_log()] kex follows: False
2026-04-15T14:03:38.829 [DEBUG] [Thread-20170] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:03:38.829 [DEBUG] [Thread-20170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:03:38.829 [DEBUG] [Thread-20170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:03:38.830 [DEBUG] [Thread-20170] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:03:38.830 [DEBUG] [Thread-20170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:03:38.830 [DEBUG] [Thread-20170] [transport.py] [_log()] Compression: none
2026-04-15T14:03:38.830 [DEBUG] [Thread-20170] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:03:38.887 [DEBUG] [Thread-20170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:03:38.887 [DEBUG] [Thread-20170] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:03:38.888 [DEBUG] [Thread-20170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:03:38.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:03:38.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:03:38.944 [DEBUG] [Thread-20170] [transport.py] [_log()] userauth is OK
2026-04-15T14:03:38.944 [DEBUG] [Thread-20170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:03:38.944 [DEBUG] [Thread-20170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:03:38.944 [DEBUG] [Thread-20170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:03:38.944 [DEBUG] [Thread-20170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:03:38.967 [INFO] [Thread-20170] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:03:38.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:03:38.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:03:39.767 [DEBUG] [Thread-20170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:03:39.767 [DEBUG] [Thread-20170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:03:39.815 [DEBUG] [Thread-20170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:03:39.815 [DEBUG] [Thread-20170] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:03:39.823 [DEBUG] [Thread-20170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:03:39.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:03: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')
2026-04-15T14:03:39.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
2026-04-15T14:03:39.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:03:39.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:03:39.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:03:39.857 [DEBUG] [Thread-20170] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:03:51.772 [DEBUG] [Thread-20172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:03:59.924 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:03:59.925 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:04:06.816 [DEBUG] [Thread-20173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:04:09.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:04:09.858 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:04:09.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
2026-04-15T14:04:11.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 3, 39), 8.7199, 55.8448, 0.0, 15.1034, 14.8264, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:04:11.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:03:39
2026-04-15T14:04:11.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:04:11.978 [DEBUG] [Thread-20174] [transport.py] [_log()] starting thread (client mode): 0xf1337190
2026-04-15T14:04:11.978 [DEBUG] [Thread-20174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:04:11.997 [DEBUG] [Thread-20174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:04:11.997 [INFO] [Thread-20174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:04:11.999 [DEBUG] [Thread-20174] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:04:11.999 [DEBUG] [Thread-20174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:04:11.999 [DEBUG] [Thread-20174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:04:11.999 [DEBUG] [Thread-20174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:04:12.000 [DEBUG] [Thread-20174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:04:12.000 [DEBUG] [Thread-20174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:04:12.000 [DEBUG] [Thread-20174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:04:12.000 [DEBUG] [Thread-20174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:04:12.000 [DEBUG] [Thread-20174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:04:12.000 [DEBUG] [Thread-20174] [transport.py] [_log()] client lang: <none>
2026-04-15T14:04:12.000 [DEBUG] [Thread-20174] [transport.py] [_log()] server lang: <none>
2026-04-15T14:04:12.000 [DEBUG] [Thread-20174] [transport.py] [_log()] kex follows: False
2026-04-15T14:04:12.000 [DEBUG] [Thread-20174] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:04:12.000 [DEBUG] [Thread-20174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:04:12.000 [DEBUG] [Thread-20174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:04:12.001 [DEBUG] [Thread-20174] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:04:12.001 [DEBUG] [Thread-20174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:04:12.001 [DEBUG] [Thread-20174] [transport.py] [_log()] Compression: none
2026-04-15T14:04:12.001 [DEBUG] [Thread-20174] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:04:12.009 [DEBUG] [Thread-20174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:04:12.010 [DEBUG] [Thread-20174] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:04:12.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:04:12.010 [DEBUG] [Thread-20174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:04:12.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:04:12.011 [DEBUG] [Thread-20174] [transport.py] [_log()] userauth is OK
2026-04-15T14:04:12.011 [DEBUG] [Thread-20174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:04:12.011 [DEBUG] [Thread-20174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:04:12.011 [DEBUG] [Thread-20174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:04:12.011 [DEBUG] [Thread-20174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:04:12.027 [INFO] [Thread-20174] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:04:12.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:04:12.665 [DEBUG] [Thread-20174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:04:12.665 [DEBUG] [Thread-20174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:04:12.666 [DEBUG] [Thread-20174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:04:12.706 [DEBUG] [Thread-20174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:04:12.706 [DEBUG] [Thread-20174] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:04:12.709 [DEBUG] [Thread-20174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:04:12.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:04:12.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:04:12.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:04:12.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:04:12.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:04:12.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:04:12.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:04:12.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:04:12.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:04:12.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.502568 -999.00  +14.00   7.79     64   +7.30 1 2 1 1 1   888    0 6.89 14.06 ----- 12.9 7.8 23.2 13.6 21.1 -24.5 20.0 -24.1 20.4 -19.1 21.2 -22.6
2026-04-15T14:04:12.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:04:12.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:04:12.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.502568
2026-04-15T14:04:12.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:04:12.731 [DEBUG] [Thread-20174] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:04:12.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:04:12.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:04:12.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:04:12.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:04:12.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:03:39', tmtdew=8.7199, humidity=55.8448, cloud=0.0, wind=15.1034, temperature=14.8264, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:03:41.875', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:04:12.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:04:12.986 [DEBUG] [Thread-20177] [transport.py] [_log()] starting thread (client mode): 0xee900ee0
2026-04-15T14:04:12.986 [DEBUG] [Thread-20177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:04:13.000 [DEBUG] [Thread-20177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:04:13.001 [INFO] [Thread-20177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:04:13.008 [DEBUG] [Thread-20177] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:04:13.008 [DEBUG] [Thread-20177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:04:13.008 [DEBUG] [Thread-20177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:04:13.008 [DEBUG] [Thread-20177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:04:13.008 [DEBUG] [Thread-20177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:04:13.008 [DEBUG] [Thread-20177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:04:13.008 [DEBUG] [Thread-20177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:04:13.008 [DEBUG] [Thread-20177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:04:13.009 [DEBUG] [Thread-20177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:04:13.009 [DEBUG] [Thread-20177] [transport.py] [_log()] client lang: <none>
2026-04-15T14:04:13.009 [DEBUG] [Thread-20177] [transport.py] [_log()] server lang: <none>
2026-04-15T14:04:13.009 [DEBUG] [Thread-20177] [transport.py] [_log()] kex follows: False
2026-04-15T14:04:13.009 [DEBUG] [Thread-20177] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:04:13.009 [DEBUG] [Thread-20177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:04:13.009 [DEBUG] [Thread-20177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:04:13.009 [DEBUG] [Thread-20177] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:04:13.009 [DEBUG] [Thread-20177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:04:13.009 [DEBUG] [Thread-20177] [transport.py] [_log()] Compression: none
2026-04-15T14:04:13.010 [DEBUG] [Thread-20177] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:04:13.067 [DEBUG] [Thread-20177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:04:13.067 [DEBUG] [Thread-20177] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:04:13.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:04:13.068 [DEBUG] [Thread-20177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:04:13.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:04:13.124 [DEBUG] [Thread-20177] [transport.py] [_log()] userauth is OK
2026-04-15T14:04:13.124 [DEBUG] [Thread-20177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:04:13.124 [DEBUG] [Thread-20177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:04:13.124 [DEBUG] [Thread-20177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:04:13.124 [DEBUG] [Thread-20177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:04:13.152 [INFO] [Thread-20177] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:04:13.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:04:13.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:04:13.957 [DEBUG] [Thread-20177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:04:13.957 [DEBUG] [Thread-20177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:04:14.005 [DEBUG] [Thread-20177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:04:14.005 [DEBUG] [Thread-20177] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:04:14.014 [DEBUG] [Thread-20177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:04:14.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:04:14.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')
2026-04-15T14:04:14.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
2026-04-15T14:04:14.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:04:14.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:04:14.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:04:14.049 [DEBUG] [Thread-20177] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:04:21.847 [DEBUG] [Thread-20179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:04:25.017 [DEBUG] [Thread-20180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:04:36.894 [DEBUG] [Thread-20181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:04:44.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:04:44.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:04:44.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
2026-04-15T14:04:45.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 4, 15), 8.04784, 58.3201, 0.0, 12.3689, 13.9141, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:04:45.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:04:15
2026-04-15T14:04:45.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:04:46.249 [DEBUG] [Thread-20182] [transport.py] [_log()] starting thread (client mode): 0xf13cb4c0
2026-04-15T14:04:46.250 [DEBUG] [Thread-20182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:04:46.267 [DEBUG] [Thread-20182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:04:46.267 [INFO] [Thread-20182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:04:46.270 [DEBUG] [Thread-20182] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:04:46.270 [DEBUG] [Thread-20182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:04:46.270 [DEBUG] [Thread-20182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:04:46.270 [DEBUG] [Thread-20182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:04:46.270 [DEBUG] [Thread-20182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:04:46.270 [DEBUG] [Thread-20182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:04:46.270 [DEBUG] [Thread-20182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:04:46.270 [DEBUG] [Thread-20182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:04:46.270 [DEBUG] [Thread-20182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:04:46.270 [DEBUG] [Thread-20182] [transport.py] [_log()] client lang: <none>
2026-04-15T14:04:46.270 [DEBUG] [Thread-20182] [transport.py] [_log()] server lang: <none>
2026-04-15T14:04:46.271 [DEBUG] [Thread-20182] [transport.py] [_log()] kex follows: False
2026-04-15T14:04:46.271 [DEBUG] [Thread-20182] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:04:46.271 [DEBUG] [Thread-20182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:04:46.271 [DEBUG] [Thread-20182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:04:46.271 [DEBUG] [Thread-20182] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:04:46.271 [DEBUG] [Thread-20182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:04:46.271 [DEBUG] [Thread-20182] [transport.py] [_log()] Compression: none
2026-04-15T14:04:46.271 [DEBUG] [Thread-20182] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:04:46.288 [DEBUG] [Thread-20182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:04:46.289 [DEBUG] [Thread-20182] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:04:46.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:04:46.289 [DEBUG] [Thread-20182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:04:46.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:04:46.290 [DEBUG] [Thread-20182] [transport.py] [_log()] userauth is OK
2026-04-15T14:04:46.290 [DEBUG] [Thread-20182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:04:46.290 [DEBUG] [Thread-20182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:04:46.290 [DEBUG] [Thread-20182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:04:46.290 [DEBUG] [Thread-20182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:04:46.309 [INFO] [Thread-20182] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:04:46.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:04:46.945 [DEBUG] [Thread-20182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:04:46.945 [DEBUG] [Thread-20182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:04:46.946 [DEBUG] [Thread-20182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:04:46.986 [DEBUG] [Thread-20182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:04:46.986 [DEBUG] [Thread-20182] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:04:46.989 [DEBUG] [Thread-20182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:04:47.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:04:47.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:04:47.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:04:47.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:04:47.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:04:47.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:04:47.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:04:47.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:04:47.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:04:47.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.502915 -999.00  +14.00   7.32     64   +7.30 1 2 1 1 1   888    0 6.87 12.43 ----- 8.5 7.3 13.0 15.7 21.1 -23.4 20.1 -21.8 20.4 -19.3 21.3 -21.1
2026-04-15T14:04:47.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:04:47.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:04:47.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.502915
2026-04-15T14:04:47.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:04:47.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:04:47.016 [DEBUG] [Thread-20182] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:04:47.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:04:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:04:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:04:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:04:15', tmtdew=8.04784, humidity=58.3201, cloud=0.0, wind=12.3689, temperature=13.9141, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:04:11.856', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:04:47.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:04:47.273 [DEBUG] [Thread-20185] [transport.py] [_log()] starting thread (client mode): 0xf13ee3e0
2026-04-15T14:04:47.274 [DEBUG] [Thread-20185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:04:47.287 [DEBUG] [Thread-20185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:04:47.287 [INFO] [Thread-20185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:04:47.295 [DEBUG] [Thread-20185] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:04:47.295 [DEBUG] [Thread-20185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:04:47.295 [DEBUG] [Thread-20185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:04:47.295 [DEBUG] [Thread-20185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:04:47.295 [DEBUG] [Thread-20185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:04:47.295 [DEBUG] [Thread-20185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:04:47.295 [DEBUG] [Thread-20185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:04:47.295 [DEBUG] [Thread-20185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:04:47.296 [DEBUG] [Thread-20185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:04:47.296 [DEBUG] [Thread-20185] [transport.py] [_log()] client lang: <none>
2026-04-15T14:04:47.296 [DEBUG] [Thread-20185] [transport.py] [_log()] server lang: <none>
2026-04-15T14:04:47.296 [DEBUG] [Thread-20185] [transport.py] [_log()] kex follows: False
2026-04-15T14:04:47.296 [DEBUG] [Thread-20185] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:04:47.296 [DEBUG] [Thread-20185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:04:47.296 [DEBUG] [Thread-20185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:04:47.296 [DEBUG] [Thread-20185] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:04:47.296 [DEBUG] [Thread-20185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:04:47.296 [DEBUG] [Thread-20185] [transport.py] [_log()] Compression: none
2026-04-15T14:04:47.296 [DEBUG] [Thread-20185] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:04:47.351 [DEBUG] [Thread-20185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:04:47.351 [DEBUG] [Thread-20185] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:04:47.352 [DEBUG] [Thread-20185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:04:47.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:04:47.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:04:47.407 [DEBUG] [Thread-20185] [transport.py] [_log()] userauth is OK
2026-04-15T14:04:47.408 [DEBUG] [Thread-20185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:04:47.408 [DEBUG] [Thread-20185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:04:47.408 [DEBUG] [Thread-20185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:04:47.408 [DEBUG] [Thread-20185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:04:47.433 [INFO] [Thread-20185] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:04:47.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:04:47.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:04:48.256 [DEBUG] [Thread-20185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:04:48.256 [DEBUG] [Thread-20185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:04:48.304 [DEBUG] [Thread-20185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:04:48.304 [DEBUG] [Thread-20185] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:04:48.312 [DEBUG] [Thread-20185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:04:48.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:04:48.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')
2026-04-15T14:04:48.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') -> 00000000
2026-04-15T14:04:48.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:04:48.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:04:48.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:04:48.345 [DEBUG] [Thread-20185] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:04:51.925 [DEBUG] [Thread-20187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:05:00.063 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:05:00.065 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:05:06.969 [DEBUG] [Thread-20188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:05:18.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:05:18.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:05:18.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:05:19.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 4, 50), 8.19995, 57.7999, 0.0, 11.0462, 14.4946, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:05:19.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:04:50
2026-04-15T14:05:20.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:05:20.483 [DEBUG] [Thread-20189] [transport.py] [_log()] starting thread (client mode): 0xf13eef80
2026-04-15T14:05:20.483 [DEBUG] [Thread-20189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:05:20.503 [DEBUG] [Thread-20189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:05:20.503 [INFO] [Thread-20189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:05:20.506 [DEBUG] [Thread-20189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:05:20.506 [DEBUG] [Thread-20189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:05:20.507 [DEBUG] [Thread-20189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:05:20.507 [DEBUG] [Thread-20189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:05:20.507 [DEBUG] [Thread-20189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:05:20.507 [DEBUG] [Thread-20189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:05:20.507 [DEBUG] [Thread-20189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:05:20.507 [DEBUG] [Thread-20189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:05:20.507 [DEBUG] [Thread-20189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:05:20.507 [DEBUG] [Thread-20189] [transport.py] [_log()] client lang: <none>
2026-04-15T14:05:20.507 [DEBUG] [Thread-20189] [transport.py] [_log()] server lang: <none>
2026-04-15T14:05:20.507 [DEBUG] [Thread-20189] [transport.py] [_log()] kex follows: False
2026-04-15T14:05:20.507 [DEBUG] [Thread-20189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:05:20.507 [DEBUG] [Thread-20189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:05:20.508 [DEBUG] [Thread-20189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:05:20.508 [DEBUG] [Thread-20189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:05:20.508 [DEBUG] [Thread-20189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:05:20.508 [DEBUG] [Thread-20189] [transport.py] [_log()] Compression: none
2026-04-15T14:05:20.508 [DEBUG] [Thread-20189] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:05:20.524 [DEBUG] [Thread-20189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:05:20.525 [DEBUG] [Thread-20189] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:05:20.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:05:20.525 [DEBUG] [Thread-20189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:05:20.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:05:20.568 [DEBUG] [Thread-20189] [transport.py] [_log()] userauth is OK
2026-04-15T14:05:20.568 [DEBUG] [Thread-20189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:05:20.569 [DEBUG] [Thread-20189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:05:20.569 [DEBUG] [Thread-20189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:05:20.569 [DEBUG] [Thread-20189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:05:20.594 [INFO] [Thread-20189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:05:20.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:05:21.195 [DEBUG] [Thread-20189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:05:21.196 [DEBUG] [Thread-20189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:05:21.196 [DEBUG] [Thread-20189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:05:21.237 [DEBUG] [Thread-20189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:05:21.237 [DEBUG] [Thread-20189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:05:21.239 [DEBUG] [Thread-20189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:05:21.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:05:21.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:05:21.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:05:21.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:05:21.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:05:21.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:05:21.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:05:21.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:05:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:05:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.503609 -999.00  +14.00   9.86     64   +7.40 1 2 1 1 1   888    0 6.82 6.98 ----- 15.4 9.9 320.4 13.6 21.0 -22.1 20.1 -21.3 20.3 -18.6 21.3 -20.3
2026-04-15T14:05:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:05:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:05:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.503609
2026-04-15T14:05:21.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:05:21.257 [DEBUG] [Thread-20189] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:05:21.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:05:21.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:05:21.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:05:21.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:05:21.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:04:50', tmtdew=8.19995, humidity=57.7999, cloud=0.0, wind=11.0462, temperature=14.4946, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:05:11.818', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:05:21.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:05:21.513 [DEBUG] [Thread-20192] [transport.py] [_log()] starting thread (client mode): 0xee98ea10
2026-04-15T14:05:21.513 [DEBUG] [Thread-20192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:05:21.527 [DEBUG] [Thread-20192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:05:21.528 [INFO] [Thread-20192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:05:21.535 [DEBUG] [Thread-20192] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:05:21.535 [DEBUG] [Thread-20192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:05:21.535 [DEBUG] [Thread-20192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:05:21.535 [DEBUG] [Thread-20192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:05:21.535 [DEBUG] [Thread-20192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:05:21.536 [DEBUG] [Thread-20192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:05:21.536 [DEBUG] [Thread-20192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:05:21.536 [DEBUG] [Thread-20192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:05:21.536 [DEBUG] [Thread-20192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:05:21.536 [DEBUG] [Thread-20192] [transport.py] [_log()] client lang: <none>
2026-04-15T14:05:21.536 [DEBUG] [Thread-20192] [transport.py] [_log()] server lang: <none>
2026-04-15T14:05:21.536 [DEBUG] [Thread-20192] [transport.py] [_log()] kex follows: False
2026-04-15T14:05:21.536 [DEBUG] [Thread-20192] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:05:21.536 [DEBUG] [Thread-20192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:05:21.536 [DEBUG] [Thread-20192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:05:21.536 [DEBUG] [Thread-20192] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:05:21.537 [DEBUG] [Thread-20192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:05:21.537 [DEBUG] [Thread-20192] [transport.py] [_log()] Compression: none
2026-04-15T14:05:21.537 [DEBUG] [Thread-20192] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:05:21.591 [DEBUG] [Thread-20192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:05:21.592 [DEBUG] [Thread-20192] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:05:21.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:05:21.593 [DEBUG] [Thread-20192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:05:21.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:05:21.648 [DEBUG] [Thread-20192] [transport.py] [_log()] userauth is OK
2026-04-15T14:05:21.648 [DEBUG] [Thread-20192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:05:21.648 [DEBUG] [Thread-20192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:05:21.648 [DEBUG] [Thread-20192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:05:21.648 [DEBUG] [Thread-20192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:05:21.673 [INFO] [Thread-20192] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:05:21.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:05:21.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:05:22.001 [DEBUG] [Thread-20194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:05:22.515 [DEBUG] [Thread-20192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:05:22.515 [DEBUG] [Thread-20192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:05:22.563 [DEBUG] [Thread-20192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:05:22.563 [DEBUG] [Thread-20192] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:05:22.572 [DEBUG] [Thread-20192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:05:22.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:05:22.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')
2026-04-15T14:05:22.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
2026-04-15T14:05:22.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:05:22.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:05:22.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:05:22.610 [DEBUG] [Thread-20192] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:05:25.110 [DEBUG] [Thread-20195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:05:37.046 [DEBUG] [Thread-20196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:05:52.079 [DEBUG] [Thread-20197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:05:52.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:05:52.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:05:52.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
2026-04-15T14:05:53.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 5, 26), 8.08459, 58.0686, 0.0, 12.3167, 13.964, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:05:53.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:05:26
2026-04-15T14:05:54.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:05:54.716 [DEBUG] [Thread-20198] [transport.py] [_log()] starting thread (client mode): 0xee9e7970
2026-04-15T14:05:54.716 [DEBUG] [Thread-20198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:05:54.736 [DEBUG] [Thread-20198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:05:54.736 [INFO] [Thread-20198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:05:54.739 [DEBUG] [Thread-20198] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:05:54.739 [DEBUG] [Thread-20198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:05:54.739 [DEBUG] [Thread-20198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:05:54.739 [DEBUG] [Thread-20198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:05:54.739 [DEBUG] [Thread-20198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:05:54.739 [DEBUG] [Thread-20198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:05:54.739 [DEBUG] [Thread-20198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:05:54.739 [DEBUG] [Thread-20198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:05:54.739 [DEBUG] [Thread-20198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:05:54.740 [DEBUG] [Thread-20198] [transport.py] [_log()] client lang: <none>
2026-04-15T14:05:54.740 [DEBUG] [Thread-20198] [transport.py] [_log()] server lang: <none>
2026-04-15T14:05:54.740 [DEBUG] [Thread-20198] [transport.py] [_log()] kex follows: False
2026-04-15T14:05:54.740 [DEBUG] [Thread-20198] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:05:54.740 [DEBUG] [Thread-20198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:05:54.740 [DEBUG] [Thread-20198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:05:54.740 [DEBUG] [Thread-20198] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:05:54.740 [DEBUG] [Thread-20198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:05:54.740 [DEBUG] [Thread-20198] [transport.py] [_log()] Compression: none
2026-04-15T14:05:54.740 [DEBUG] [Thread-20198] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:05:54.757 [DEBUG] [Thread-20198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:05:54.757 [DEBUG] [Thread-20198] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:05:54.758 [DEBUG] [Thread-20198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:05:54.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:05:54.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:05:54.759 [DEBUG] [Thread-20198] [transport.py] [_log()] userauth is OK
2026-04-15T14:05:54.759 [DEBUG] [Thread-20198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:05:54.759 [DEBUG] [Thread-20198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:05:54.759 [DEBUG] [Thread-20198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:05:54.759 [DEBUG] [Thread-20198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:05:54.775 [INFO] [Thread-20198] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:05:54.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:05:55.389 [DEBUG] [Thread-20198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:05:55.389 [DEBUG] [Thread-20198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:05:55.390 [DEBUG] [Thread-20198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:05:55.430 [DEBUG] [Thread-20198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:05:55.430 [DEBUG] [Thread-20198] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:05:55.432 [DEBUG] [Thread-20198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:05:55.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:05:55.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:05:55.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:05:55.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:05:55.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:05:55.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:05:55.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:05:55.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:05:55.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:05:55.449 [DEBUG] [Thread-20198] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:05:55.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.503957 -999.00  +14.00  22.28     64   +7.50 1 2 1 1 1   888    0 6.78 3.91 ----- 21.9 22.3 333.0 26.5 20.7 -23.1 19.9 -22.3 20.1 -19.9 20.9 -20.9
2026-04-15T14:05:55.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:05:55.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:05:55.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.503957
2026-04-15T14:05:55.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:05:55.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:05:55.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:05:55.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:05:55.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:05:55.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:05:26', tmtdew=8.08459, humidity=58.0686, cloud=0.0, wind=12.3167, temperature=13.964, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:05:41.885', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:05:55.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:05:55.708 [DEBUG] [Thread-20201] [transport.py] [_log()] starting thread (client mode): 0xf1367b20
2026-04-15T14:05:55.708 [DEBUG] [Thread-20201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:05:55.722 [DEBUG] [Thread-20201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:05:55.723 [INFO] [Thread-20201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:05:55.730 [DEBUG] [Thread-20201] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:05:55.730 [DEBUG] [Thread-20201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:05:55.730 [DEBUG] [Thread-20201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:05:55.730 [DEBUG] [Thread-20201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:05:55.730 [DEBUG] [Thread-20201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:05:55.730 [DEBUG] [Thread-20201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:05:55.731 [DEBUG] [Thread-20201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:05:55.731 [DEBUG] [Thread-20201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:05:55.731 [DEBUG] [Thread-20201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:05:55.731 [DEBUG] [Thread-20201] [transport.py] [_log()] client lang: <none>
2026-04-15T14:05:55.731 [DEBUG] [Thread-20201] [transport.py] [_log()] server lang: <none>
2026-04-15T14:05:55.731 [DEBUG] [Thread-20201] [transport.py] [_log()] kex follows: False
2026-04-15T14:05:55.731 [DEBUG] [Thread-20201] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:05:55.731 [DEBUG] [Thread-20201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:05:55.731 [DEBUG] [Thread-20201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:05:55.731 [DEBUG] [Thread-20201] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:05:55.731 [DEBUG] [Thread-20201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:05:55.732 [DEBUG] [Thread-20201] [transport.py] [_log()] Compression: none
2026-04-15T14:05:55.732 [DEBUG] [Thread-20201] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:05:55.787 [DEBUG] [Thread-20201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:05:55.787 [DEBUG] [Thread-20201] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:05:55.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:05:55.788 [DEBUG] [Thread-20201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:05:55.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:05:55.846 [DEBUG] [Thread-20201] [transport.py] [_log()] userauth is OK
2026-04-15T14:05:55.846 [DEBUG] [Thread-20201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:05:55.846 [DEBUG] [Thread-20201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:05:55.847 [DEBUG] [Thread-20201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:05:55.847 [DEBUG] [Thread-20201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:05:55.879 [INFO] [Thread-20201] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:05:55.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:05:55.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:05:56.698 [DEBUG] [Thread-20201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:05:56.699 [DEBUG] [Thread-20201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:05:56.746 [DEBUG] [Thread-20201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:05:56.746 [DEBUG] [Thread-20201] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:05:56.755 [DEBUG] [Thread-20201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:05:56.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:05:56.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')
2026-04-15T14:05:56.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
2026-04-15T14:05:56.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:05:56.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:05:56.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:05:56.794 [DEBUG] [Thread-20201] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:06:00.205 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:06:00.206 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:06:07.111 [DEBUG] [Thread-20203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:06:22.156 [DEBUG] [Thread-20204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:06:25.215 [DEBUG] [Thread-20205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:06:26.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:06:26.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:06:26.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
2026-04-15T14:06:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 6, 2), 8.02808, 58.284, 0.0, 16.268, 13.9308, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:06:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:06:02
2026-04-15T14:06:28.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:06:28.911 [DEBUG] [Thread-20206] [transport.py] [_log()] starting thread (client mode): 0xee907b80
2026-04-15T14:06:28.911 [DEBUG] [Thread-20206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:06:28.931 [DEBUG] [Thread-20206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:06:28.931 [INFO] [Thread-20206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:06:28.934 [DEBUG] [Thread-20206] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:06:28.934 [DEBUG] [Thread-20206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:06:28.934 [DEBUG] [Thread-20206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:06:28.934 [DEBUG] [Thread-20206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:06:28.934 [DEBUG] [Thread-20206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:06:28.934 [DEBUG] [Thread-20206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:06:28.934 [DEBUG] [Thread-20206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:06:28.934 [DEBUG] [Thread-20206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:06:28.934 [DEBUG] [Thread-20206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:06:28.935 [DEBUG] [Thread-20206] [transport.py] [_log()] client lang: <none>
2026-04-15T14:06:28.935 [DEBUG] [Thread-20206] [transport.py] [_log()] server lang: <none>
2026-04-15T14:06:28.935 [DEBUG] [Thread-20206] [transport.py] [_log()] kex follows: False
2026-04-15T14:06:28.935 [DEBUG] [Thread-20206] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:06:28.935 [DEBUG] [Thread-20206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:06:28.935 [DEBUG] [Thread-20206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:06:28.935 [DEBUG] [Thread-20206] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:06:28.935 [DEBUG] [Thread-20206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:06:28.935 [DEBUG] [Thread-20206] [transport.py] [_log()] Compression: none
2026-04-15T14:06:28.935 [DEBUG] [Thread-20206] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:06:28.950 [DEBUG] [Thread-20206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:06:28.950 [DEBUG] [Thread-20206] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:06:28.950 [DEBUG] [Thread-20206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:06:28.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:06:28.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:06:28.992 [DEBUG] [Thread-20206] [transport.py] [_log()] userauth is OK
2026-04-15T14:06:28.993 [DEBUG] [Thread-20206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:06:28.993 [DEBUG] [Thread-20206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:06:28.993 [DEBUG] [Thread-20206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:06:28.993 [DEBUG] [Thread-20206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:06:29.017 [INFO] [Thread-20206] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:06:29.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:06:29.591 [DEBUG] [Thread-20206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:06:29.591 [DEBUG] [Thread-20206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:06:29.591 [DEBUG] [Thread-20206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:06:29.632 [DEBUG] [Thread-20206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:06:29.632 [DEBUG] [Thread-20206] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:06:29.634 [DEBUG] [Thread-20206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:06:29.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:06:29.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:06:29.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:06:29.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:06:29.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:06:29.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:06:29.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:06:29.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:06:29.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:06:29.648 [DEBUG] [Thread-20206] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:06:29.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.504304 -999.00  +13.80  17.53     64   +7.20 1 2 1 1 1   888    0 6.52 0.76 ----- 18.7 17.5 328.8 25.5 20.7 -22.2 19.8 -20.8 20.0 -19.1 20.9 -20.7
2026-04-15T14:06:29.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:06:29.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:06:29.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.504304
2026-04-15T14:06:29.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:06:29.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:06:29.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:06:29.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:06:29.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:06:29.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:06:02', tmtdew=8.02808, humidity=58.284, cloud=0.0, wind=16.268, temperature=13.9308, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:06:11.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:06:29.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:06:29.893 [DEBUG] [Thread-20209] [transport.py] [_log()] starting thread (client mode): 0xee9050f0
2026-04-15T14:06:29.893 [DEBUG] [Thread-20209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:06:29.907 [DEBUG] [Thread-20209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:06:29.907 [INFO] [Thread-20209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:06:29.915 [DEBUG] [Thread-20209] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:06:29.915 [DEBUG] [Thread-20209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:06:29.915 [DEBUG] [Thread-20209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:06:29.915 [DEBUG] [Thread-20209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:06:29.915 [DEBUG] [Thread-20209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:06:29.915 [DEBUG] [Thread-20209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:06:29.915 [DEBUG] [Thread-20209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:06:29.915 [DEBUG] [Thread-20209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:06:29.915 [DEBUG] [Thread-20209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:06:29.915 [DEBUG] [Thread-20209] [transport.py] [_log()] client lang: <none>
2026-04-15T14:06:29.915 [DEBUG] [Thread-20209] [transport.py] [_log()] server lang: <none>
2026-04-15T14:06:29.915 [DEBUG] [Thread-20209] [transport.py] [_log()] kex follows: False
2026-04-15T14:06:29.916 [DEBUG] [Thread-20209] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:06:29.916 [DEBUG] [Thread-20209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:06:29.916 [DEBUG] [Thread-20209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:06:29.916 [DEBUG] [Thread-20209] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:06:29.916 [DEBUG] [Thread-20209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:06:29.916 [DEBUG] [Thread-20209] [transport.py] [_log()] Compression: none
2026-04-15T14:06:29.916 [DEBUG] [Thread-20209] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:06:29.970 [DEBUG] [Thread-20209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:06:29.971 [DEBUG] [Thread-20209] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:06:29.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:06:29.972 [DEBUG] [Thread-20209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:06:29.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:06:30.028 [DEBUG] [Thread-20209] [transport.py] [_log()] userauth is OK
2026-04-15T14:06:30.028 [DEBUG] [Thread-20209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:06:30.029 [DEBUG] [Thread-20209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:06:30.029 [DEBUG] [Thread-20209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:06:30.029 [DEBUG] [Thread-20209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:06:30.056 [INFO] [Thread-20209] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:06:30.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:06:30.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:06:30.867 [DEBUG] [Thread-20209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:06:30.868 [DEBUG] [Thread-20209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:06:30.914 [DEBUG] [Thread-20209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:06:30.915 [DEBUG] [Thread-20209] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:06:30.926 [DEBUG] [Thread-20209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:06:30.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:06:30.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')
2026-04-15T14:06:30.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
2026-04-15T14:06:30.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:06:30.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:06:30.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:06:30.960 [DEBUG] [Thread-20209] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:06:37.186 [DEBUG] [Thread-20211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:06:52.229 [DEBUG] [Thread-20212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:07:00.347 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:07:00.348 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:07:00.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:07:00.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:07:00.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
2026-04-15T14:07:02.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 6, 37), 8.31254, 57.4024, 0.0, 22.7945, 14.6937, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:07:02.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:06:37
2026-04-15T14:07:02.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:07:03.065 [DEBUG] [Thread-20213] [transport.py] [_log()] starting thread (client mode): 0xee905ed0
2026-04-15T14:07:03.066 [DEBUG] [Thread-20213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:07:03.086 [DEBUG] [Thread-20213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:07:03.086 [INFO] [Thread-20213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:07:03.089 [DEBUG] [Thread-20213] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:07:03.089 [DEBUG] [Thread-20213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:07:03.089 [DEBUG] [Thread-20213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:07:03.089 [DEBUG] [Thread-20213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:07:03.089 [DEBUG] [Thread-20213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:07:03.089 [DEBUG] [Thread-20213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:07:03.089 [DEBUG] [Thread-20213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:07:03.090 [DEBUG] [Thread-20213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:07:03.090 [DEBUG] [Thread-20213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:07:03.090 [DEBUG] [Thread-20213] [transport.py] [_log()] client lang: <none>
2026-04-15T14:07:03.090 [DEBUG] [Thread-20213] [transport.py] [_log()] server lang: <none>
2026-04-15T14:07:03.090 [DEBUG] [Thread-20213] [transport.py] [_log()] kex follows: False
2026-04-15T14:07:03.090 [DEBUG] [Thread-20213] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:07:03.090 [DEBUG] [Thread-20213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:07:03.090 [DEBUG] [Thread-20213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:07:03.090 [DEBUG] [Thread-20213] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:07:03.090 [DEBUG] [Thread-20213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:07:03.090 [DEBUG] [Thread-20213] [transport.py] [_log()] Compression: none
2026-04-15T14:07:03.091 [DEBUG] [Thread-20213] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:07:03.109 [DEBUG] [Thread-20213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:07:03.109 [DEBUG] [Thread-20213] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:07:03.110 [DEBUG] [Thread-20213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:07:03.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:07:03.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:07:03.111 [DEBUG] [Thread-20213] [transport.py] [_log()] userauth is OK
2026-04-15T14:07:03.111 [DEBUG] [Thread-20213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:07:03.112 [DEBUG] [Thread-20213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:07:03.112 [DEBUG] [Thread-20213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:07:03.112 [DEBUG] [Thread-20213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:07:03.136 [INFO] [Thread-20213] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:07:03.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:07:03.732 [DEBUG] [Thread-20213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:07:03.732 [DEBUG] [Thread-20213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:07:03.733 [DEBUG] [Thread-20213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:07:03.773 [DEBUG] [Thread-20213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:07:03.773 [DEBUG] [Thread-20213] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:07:03.777 [DEBUG] [Thread-20213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:07:03.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:07:03.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:07:03.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:07:03.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:07:03.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:07:03.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:07:03.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:07:03.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:07:03.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:07:03.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.504651 -999.00  +14.00  24.99     65   +7.50 1 2 1 1 1   888    0 6.65 -0.53 ----- 24.1 25.0 326.8 26.1 20.6 -22.4 19.8 -21.1 20.1 -18.9 20.8 -20.1
2026-04-15T14:07:03.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:07:03.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:07:03.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.504651
2026-04-15T14:07:03.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:07:03.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:07:03.799 [DEBUG] [Thread-20213] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:07:03.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:07:03.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:07:03.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:07:03.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:06:37', tmtdew=8.31254, humidity=57.4024, cloud=0.0, wind=22.7945, temperature=14.6937, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:06:41.846', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:07:04.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:07:04.049 [DEBUG] [Thread-20216] [transport.py] [_log()] starting thread (client mode): 0xee98e200
2026-04-15T14:07:04.049 [DEBUG] [Thread-20216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:07:04.063 [DEBUG] [Thread-20216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:07:04.063 [INFO] [Thread-20216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:07:04.070 [DEBUG] [Thread-20216] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:07:04.070 [DEBUG] [Thread-20216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:07:04.070 [DEBUG] [Thread-20216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:07:04.070 [DEBUG] [Thread-20216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:07:04.071 [DEBUG] [Thread-20216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:07:04.071 [DEBUG] [Thread-20216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:07:04.071 [DEBUG] [Thread-20216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:07:04.071 [DEBUG] [Thread-20216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:07:04.071 [DEBUG] [Thread-20216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:07:04.071 [DEBUG] [Thread-20216] [transport.py] [_log()] client lang: <none>
2026-04-15T14:07:04.071 [DEBUG] [Thread-20216] [transport.py] [_log()] server lang: <none>
2026-04-15T14:07:04.071 [DEBUG] [Thread-20216] [transport.py] [_log()] kex follows: False
2026-04-15T14:07:04.071 [DEBUG] [Thread-20216] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:07:04.071 [DEBUG] [Thread-20216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:07:04.071 [DEBUG] [Thread-20216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:07:04.072 [DEBUG] [Thread-20216] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:07:04.072 [DEBUG] [Thread-20216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:07:04.072 [DEBUG] [Thread-20216] [transport.py] [_log()] Compression: none
2026-04-15T14:07:04.072 [DEBUG] [Thread-20216] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:07:04.127 [DEBUG] [Thread-20216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:07:04.127 [DEBUG] [Thread-20216] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:07:04.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:07:04.128 [DEBUG] [Thread-20216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:07:04.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:07:04.184 [DEBUG] [Thread-20216] [transport.py] [_log()] userauth is OK
2026-04-15T14:07:04.184 [DEBUG] [Thread-20216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:07:04.184 [DEBUG] [Thread-20216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:07:04.184 [DEBUG] [Thread-20216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:07:04.184 [DEBUG] [Thread-20216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:07:04.210 [INFO] [Thread-20216] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:07:04.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:07:04.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:07:05.033 [DEBUG] [Thread-20216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:07:05.034 [DEBUG] [Thread-20216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:07:05.081 [DEBUG] [Thread-20216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:07:05.081 [DEBUG] [Thread-20216] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:07:05.090 [DEBUG] [Thread-20216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:07:05.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:07:05.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')
2026-04-15T14:07:05.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
2026-04-15T14:07:05.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:07:05.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:07:05.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:07:05.125 [DEBUG] [Thread-20216] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:07:07.262 [DEBUG] [Thread-20218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:07:22.306 [DEBUG] [Thread-20219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:07:25.317 [DEBUG] [Thread-20220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:07:35.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:07:35.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:07:35.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
2026-04-15T14:07:36.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 7, 12), 7.92804, 59.0488, 0.0, 19.4623, 14.2455, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:07:36.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:07:12
2026-04-15T14:07:36.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:07:37.208 [DEBUG] [Thread-20221] [transport.py] [_log()] starting thread (client mode): 0xee9e5ab0
2026-04-15T14:07:37.209 [DEBUG] [Thread-20221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:07:37.228 [DEBUG] [Thread-20221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:07:37.228 [INFO] [Thread-20221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:07:37.231 [DEBUG] [Thread-20221] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:07:37.231 [DEBUG] [Thread-20221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:07:37.231 [DEBUG] [Thread-20221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:07:37.231 [DEBUG] [Thread-20221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:07:37.232 [DEBUG] [Thread-20221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:07:37.232 [DEBUG] [Thread-20221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:07:37.232 [DEBUG] [Thread-20221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:07:37.232 [DEBUG] [Thread-20221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:07:37.232 [DEBUG] [Thread-20221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:07:37.232 [DEBUG] [Thread-20221] [transport.py] [_log()] client lang: <none>
2026-04-15T14:07:37.232 [DEBUG] [Thread-20221] [transport.py] [_log()] server lang: <none>
2026-04-15T14:07:37.232 [DEBUG] [Thread-20221] [transport.py] [_log()] kex follows: False
2026-04-15T14:07:37.232 [DEBUG] [Thread-20221] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:07:37.232 [DEBUG] [Thread-20221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:07:37.232 [DEBUG] [Thread-20221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:07:37.232 [DEBUG] [Thread-20221] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:07:37.232 [DEBUG] [Thread-20221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:07:37.232 [DEBUG] [Thread-20221] [transport.py] [_log()] Compression: none
2026-04-15T14:07:37.232 [DEBUG] [Thread-20221] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:07:37.239 [DEBUG] [Thread-20221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:07:37.240 [DEBUG] [Thread-20221] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:07:37.240 [DEBUG] [Thread-20221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:07:37.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:07:37.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:07:37.241 [DEBUG] [Thread-20221] [transport.py] [_log()] userauth is OK
2026-04-15T14:07:37.241 [DEBUG] [Thread-20221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:07:37.241 [DEBUG] [Thread-20221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:07:37.241 [DEBUG] [Thread-20221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:07:37.241 [DEBUG] [Thread-20221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:07:37.254 [INFO] [Thread-20221] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:07:37.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:07:37.336 [DEBUG] [Thread-20223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:07:37.885 [DEBUG] [Thread-20221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:07:37.885 [DEBUG] [Thread-20221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:07:37.885 [DEBUG] [Thread-20221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:07:37.926 [DEBUG] [Thread-20221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:07:37.926 [DEBUG] [Thread-20221] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:07:37.929 [DEBUG] [Thread-20221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:07:37.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:07:37.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:07:37.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:07:37.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:07:37.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:07:37.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:07:37.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:07:37.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:07:37.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:07:37.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.504998 -999.00  +14.10  22.76     65   +7.70 1 2 1 1 1   888    0 6.46 -2.47 ----- 21.1 22.8 319.4 29.2 20.6 -22.3 19.8 -21.4 20.0 -18.8 20.8 -19.9
2026-04-15T14:07:37.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:07:37.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:07:37.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.504998
2026-04-15T14:07:37.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:07:37.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:07:37.955 [DEBUG] [Thread-20221] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:07:37.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:07:37.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:07:37.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:07:37.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:07:12', tmtdew=7.92804, humidity=59.0488, cloud=0.0, wind=19.4623, temperature=14.2455, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:07:11.827', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:07:38.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:07:38.220 [DEBUG] [Thread-20225] [transport.py] [_log()] starting thread (client mode): 0xf1365030
2026-04-15T14:07:38.220 [DEBUG] [Thread-20225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:07:38.234 [DEBUG] [Thread-20225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:07:38.234 [INFO] [Thread-20225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:07:38.241 [DEBUG] [Thread-20225] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:07:38.241 [DEBUG] [Thread-20225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:07:38.241 [DEBUG] [Thread-20225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:07:38.242 [DEBUG] [Thread-20225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:07:38.242 [DEBUG] [Thread-20225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:07:38.242 [DEBUG] [Thread-20225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:07:38.242 [DEBUG] [Thread-20225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:07:38.242 [DEBUG] [Thread-20225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:07:38.242 [DEBUG] [Thread-20225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:07:38.242 [DEBUG] [Thread-20225] [transport.py] [_log()] client lang: <none>
2026-04-15T14:07:38.242 [DEBUG] [Thread-20225] [transport.py] [_log()] server lang: <none>
2026-04-15T14:07:38.242 [DEBUG] [Thread-20225] [transport.py] [_log()] kex follows: False
2026-04-15T14:07:38.242 [DEBUG] [Thread-20225] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:07:38.242 [DEBUG] [Thread-20225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:07:38.242 [DEBUG] [Thread-20225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:07:38.243 [DEBUG] [Thread-20225] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:07:38.243 [DEBUG] [Thread-20225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:07:38.243 [DEBUG] [Thread-20225] [transport.py] [_log()] Compression: none
2026-04-15T14:07:38.243 [DEBUG] [Thread-20225] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:07:38.299 [DEBUG] [Thread-20225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:07:38.299 [DEBUG] [Thread-20225] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:07:38.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:07:38.300 [DEBUG] [Thread-20225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:07:38.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:07:38.356 [DEBUG] [Thread-20225] [transport.py] [_log()] userauth is OK
2026-04-15T14:07:38.356 [DEBUG] [Thread-20225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:07:38.356 [DEBUG] [Thread-20225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:07:38.357 [DEBUG] [Thread-20225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:07:38.357 [DEBUG] [Thread-20225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:07:38.382 [INFO] [Thread-20225] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:07:38.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:07:38.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:07:39.194 [DEBUG] [Thread-20225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:07:39.194 [DEBUG] [Thread-20225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:07:39.242 [DEBUG] [Thread-20225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:07:39.242 [DEBUG] [Thread-20225] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:07:39.251 [DEBUG] [Thread-20225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:07:39.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:07:39.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')
2026-04-15T14:07:39.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
2026-04-15T14:07:39.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:07:39.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:07:39.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:07:39.286 [DEBUG] [Thread-20225] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:07:52.364 [DEBUG] [Thread-20227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:08:00.490 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:08:00.491 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:08:07.403 [DEBUG] [Thread-20228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:08:09.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:08:09.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:08:09.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
2026-04-15T14:08:10.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 7, 48), 8.60511, 56.5398, 0.0, 27.0634, 15.8195, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:08:10.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:07:48
2026-04-15T14:08:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:08:11.367 [DEBUG] [Thread-20229] [transport.py] [_log()] starting thread (client mode): 0xf13cb4c0
2026-04-15T14:08:11.367 [DEBUG] [Thread-20229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:08:11.385 [DEBUG] [Thread-20229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:08:11.385 [INFO] [Thread-20229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:08:11.388 [DEBUG] [Thread-20229] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:08:11.389 [DEBUG] [Thread-20229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:08:11.389 [DEBUG] [Thread-20229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:08:11.389 [DEBUG] [Thread-20229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:08:11.389 [DEBUG] [Thread-20229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:08:11.389 [DEBUG] [Thread-20229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:08:11.389 [DEBUG] [Thread-20229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:08:11.389 [DEBUG] [Thread-20229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:08:11.389 [DEBUG] [Thread-20229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:08:11.389 [DEBUG] [Thread-20229] [transport.py] [_log()] client lang: <none>
2026-04-15T14:08:11.389 [DEBUG] [Thread-20229] [transport.py] [_log()] server lang: <none>
2026-04-15T14:08:11.389 [DEBUG] [Thread-20229] [transport.py] [_log()] kex follows: False
2026-04-15T14:08:11.390 [DEBUG] [Thread-20229] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:08:11.390 [DEBUG] [Thread-20229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:08:11.390 [DEBUG] [Thread-20229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:08:11.390 [DEBUG] [Thread-20229] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:08:11.390 [DEBUG] [Thread-20229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:08:11.390 [DEBUG] [Thread-20229] [transport.py] [_log()] Compression: none
2026-04-15T14:08:11.390 [DEBUG] [Thread-20229] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:08:11.398 [DEBUG] [Thread-20229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:08:11.399 [DEBUG] [Thread-20229] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:08:11.399 [DEBUG] [Thread-20229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:08:11.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:08:11.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:08:11.400 [DEBUG] [Thread-20229] [transport.py] [_log()] userauth is OK
2026-04-15T14:08:11.400 [DEBUG] [Thread-20229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:08:11.400 [DEBUG] [Thread-20229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:08:11.400 [DEBUG] [Thread-20229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:08:11.400 [DEBUG] [Thread-20229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:08:11.422 [INFO] [Thread-20229] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:08:11.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:08:12.079 [DEBUG] [Thread-20229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:08:12.080 [DEBUG] [Thread-20229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:08:12.080 [DEBUG] [Thread-20229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:08:12.120 [DEBUG] [Thread-20229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:08:12.120 [DEBUG] [Thread-20229] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:08:12.123 [DEBUG] [Thread-20229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:08:12.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:08:12.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:08:12.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:08:12.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:08:12.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:08:12.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:08:12.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:08:12.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:08:12.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:08:12.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.505346 -999.00  +13.90  19.51     65   +7.60 1 2 1 1 1   888    0 6.46 -4.90 ----- 22.0 19.5 330.0 24.4 20.6 -21.6 19.8 -21.6 20.1 -19.0 20.9 -20.6
2026-04-15T14:08:12.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:08:12.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:08:12.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.505346
2026-04-15T14:08:12.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:08:12.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:08:12.147 [DEBUG] [Thread-20229] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:08:12.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:08:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:08:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:08:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:07:48', tmtdew=8.60511, humidity=56.5398, cloud=0.0, wind=27.0634, temperature=15.8195, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:07:41.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:08:12.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:08:12.401 [DEBUG] [Thread-20232] [transport.py] [_log()] starting thread (client mode): 0xee988c40
2026-04-15T14:08:12.401 [DEBUG] [Thread-20232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:08:12.416 [DEBUG] [Thread-20232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:08:12.416 [INFO] [Thread-20232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:08:12.425 [DEBUG] [Thread-20232] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:08:12.425 [DEBUG] [Thread-20232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:08:12.425 [DEBUG] [Thread-20232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:08:12.426 [DEBUG] [Thread-20232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:08:12.426 [DEBUG] [Thread-20232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:08:12.426 [DEBUG] [Thread-20232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:08:12.426 [DEBUG] [Thread-20232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:08:12.426 [DEBUG] [Thread-20232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:08:12.426 [DEBUG] [Thread-20232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:08:12.426 [DEBUG] [Thread-20232] [transport.py] [_log()] client lang: <none>
2026-04-15T14:08:12.426 [DEBUG] [Thread-20232] [transport.py] [_log()] server lang: <none>
2026-04-15T14:08:12.426 [DEBUG] [Thread-20232] [transport.py] [_log()] kex follows: False
2026-04-15T14:08:12.426 [DEBUG] [Thread-20232] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:08:12.426 [DEBUG] [Thread-20232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:08:12.426 [DEBUG] [Thread-20232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:08:12.427 [DEBUG] [Thread-20232] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:08:12.427 [DEBUG] [Thread-20232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:08:12.427 [DEBUG] [Thread-20232] [transport.py] [_log()] Compression: none
2026-04-15T14:08:12.427 [DEBUG] [Thread-20232] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:08:12.447 [DEBUG] [Thread-20232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:08:12.447 [DEBUG] [Thread-20232] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:08:12.448 [DEBUG] [Thread-20232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:08:12.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:08:12.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:08:12.503 [DEBUG] [Thread-20232] [transport.py] [_log()] userauth is OK
2026-04-15T14:08:12.504 [DEBUG] [Thread-20232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:08:12.504 [DEBUG] [Thread-20232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:08:12.504 [DEBUG] [Thread-20232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:08:12.504 [DEBUG] [Thread-20232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:08:12.526 [INFO] [Thread-20232] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:08:12.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:08:12.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:08:13.380 [DEBUG] [Thread-20232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:08:13.381 [DEBUG] [Thread-20232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:08:13.429 [DEBUG] [Thread-20232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:08:13.429 [DEBUG] [Thread-20232] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:08:13.438 [DEBUG] [Thread-20232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:08:13.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:08:13.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')
2026-04-15T14:08:13.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
2026-04-15T14:08:13.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:08:13.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:08:13.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:08:13.477 [DEBUG] [Thread-20232] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:08:22.436 [DEBUG] [Thread-20234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:08:25.412 [DEBUG] [Thread-20235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:08:37.480 [DEBUG] [Thread-20236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:08:43.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:08:43.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:08:43.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
2026-04-15T14:08:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 8, 23), 8.3814, 57.3751, 0.0, 19.6733, 14.5269, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:08:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:08:23
2026-04-15T14:08:45.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:08:45.561 [DEBUG] [Thread-20237] [transport.py] [_log()] starting thread (client mode): 0xee9e4c10
2026-04-15T14:08:45.561 [DEBUG] [Thread-20237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:08:45.582 [DEBUG] [Thread-20237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:08:45.582 [INFO] [Thread-20237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:08:45.583 [DEBUG] [Thread-20237] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:08:45.583 [DEBUG] [Thread-20237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:08:45.583 [DEBUG] [Thread-20237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:08:45.583 [DEBUG] [Thread-20237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:08:45.583 [DEBUG] [Thread-20237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:08:45.583 [DEBUG] [Thread-20237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:08:45.583 [DEBUG] [Thread-20237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:08:45.584 [DEBUG] [Thread-20237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:08:45.584 [DEBUG] [Thread-20237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:08:45.584 [DEBUG] [Thread-20237] [transport.py] [_log()] client lang: <none>
2026-04-15T14:08:45.584 [DEBUG] [Thread-20237] [transport.py] [_log()] server lang: <none>
2026-04-15T14:08:45.584 [DEBUG] [Thread-20237] [transport.py] [_log()] kex follows: False
2026-04-15T14:08:45.584 [DEBUG] [Thread-20237] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:08:45.584 [DEBUG] [Thread-20237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:08:45.584 [DEBUG] [Thread-20237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:08:45.584 [DEBUG] [Thread-20237] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:08:45.584 [DEBUG] [Thread-20237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:08:45.584 [DEBUG] [Thread-20237] [transport.py] [_log()] Compression: none
2026-04-15T14:08:45.584 [DEBUG] [Thread-20237] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:08:45.602 [DEBUG] [Thread-20237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:08:45.603 [DEBUG] [Thread-20237] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:08:45.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:08:45.603 [DEBUG] [Thread-20237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:08:45.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:08:45.604 [DEBUG] [Thread-20237] [transport.py] [_log()] userauth is OK
2026-04-15T14:08:45.604 [DEBUG] [Thread-20237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:08:45.604 [DEBUG] [Thread-20237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:08:45.604 [DEBUG] [Thread-20237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:08:45.604 [DEBUG] [Thread-20237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:08:45.628 [INFO] [Thread-20237] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:08:45.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:08:46.262 [DEBUG] [Thread-20237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:08:46.262 [DEBUG] [Thread-20237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:08:46.263 [DEBUG] [Thread-20237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:08:46.303 [DEBUG] [Thread-20237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:08:46.303 [DEBUG] [Thread-20237] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:08:46.305 [DEBUG] [Thread-20237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:08:46.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:08:46.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:08:46.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:08:46.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:08:46.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:08:46.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:08:46.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:08:46.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:08:46.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:08:46.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.505693 -999.00  +13.80  17.26     64   +7.20 1 2 1 1 1   888    0 6.49 -5.90 ----- 23.5 17.3 330.6 26.6 20.6 -23.2 19.6 -22.0 20.0 -19.0 20.9 -21.8
2026-04-15T14:08:46.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:08:46.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:08:46.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.505693
2026-04-15T14:08:46.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:08:46.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:08:46.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:08:46.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:08:46.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:08:46.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:08:23', tmtdew=8.3814, humidity=57.3751, cloud=0.0, wind=19.6733, temperature=14.5269, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:08:11.875', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:08:46.324 [DEBUG] [Thread-20237] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:08:46.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:08:46.540 [DEBUG] [Thread-20240] [transport.py] [_log()] starting thread (client mode): 0xf13c96c0
2026-04-15T14:08:46.540 [DEBUG] [Thread-20240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:08:46.556 [DEBUG] [Thread-20240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:08:46.556 [INFO] [Thread-20240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:08:46.563 [DEBUG] [Thread-20240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:08:46.564 [DEBUG] [Thread-20240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:08:46.564 [DEBUG] [Thread-20240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:08:46.564 [DEBUG] [Thread-20240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:08:46.564 [DEBUG] [Thread-20240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:08:46.564 [DEBUG] [Thread-20240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:08:46.564 [DEBUG] [Thread-20240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:08:46.564 [DEBUG] [Thread-20240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:08:46.564 [DEBUG] [Thread-20240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:08:46.564 [DEBUG] [Thread-20240] [transport.py] [_log()] client lang: <none>
2026-04-15T14:08:46.564 [DEBUG] [Thread-20240] [transport.py] [_log()] server lang: <none>
2026-04-15T14:08:46.565 [DEBUG] [Thread-20240] [transport.py] [_log()] kex follows: False
2026-04-15T14:08:46.565 [DEBUG] [Thread-20240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:08:46.565 [DEBUG] [Thread-20240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:08:46.565 [DEBUG] [Thread-20240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:08:46.565 [DEBUG] [Thread-20240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:08:46.565 [DEBUG] [Thread-20240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:08:46.565 [DEBUG] [Thread-20240] [transport.py] [_log()] Compression: none
2026-04-15T14:08:46.565 [DEBUG] [Thread-20240] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:08:46.623 [DEBUG] [Thread-20240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:08:46.624 [DEBUG] [Thread-20240] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:08:46.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:08:46.624 [DEBUG] [Thread-20240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:08:46.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:08:46.680 [DEBUG] [Thread-20240] [transport.py] [_log()] userauth is OK
2026-04-15T14:08:46.680 [DEBUG] [Thread-20240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:08:46.680 [DEBUG] [Thread-20240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:08:46.680 [DEBUG] [Thread-20240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:08:46.680 [DEBUG] [Thread-20240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:08:46.707 [INFO] [Thread-20240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:08:46.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:08:46.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:08:47.569 [DEBUG] [Thread-20240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:08:47.569 [DEBUG] [Thread-20240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:08:47.617 [DEBUG] [Thread-20240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:08:47.617 [DEBUG] [Thread-20240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:08:47.626 [DEBUG] [Thread-20240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:08:47.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:08:47.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')
2026-04-15T14:08:47.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
2026-04-15T14:08:47.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:08:47.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:08:47.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:08:47.661 [DEBUG] [Thread-20240] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:08:52.512 [DEBUG] [Thread-20242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:09:00.631 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:09:00.632 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:09:07.558 [DEBUG] [Thread-20243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:09:17.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:09:17.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:09:17.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
2026-04-15T14:09:18.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 8, 59), 8.34058, 57.1099, 0.0, 18.8449, 14.4112, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:09:18.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:08:59
2026-04-15T14:09:19.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:09:19.809 [DEBUG] [Thread-20244] [transport.py] [_log()] starting thread (client mode): 0xee9e4820
2026-04-15T14:09:19.809 [DEBUG] [Thread-20244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:09:19.830 [DEBUG] [Thread-20244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:09:19.830 [INFO] [Thread-20244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:09:19.833 [DEBUG] [Thread-20244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:09:19.833 [DEBUG] [Thread-20244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:09:19.833 [DEBUG] [Thread-20244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:09:19.833 [DEBUG] [Thread-20244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:09:19.833 [DEBUG] [Thread-20244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:09:19.833 [DEBUG] [Thread-20244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:09:19.833 [DEBUG] [Thread-20244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:09:19.834 [DEBUG] [Thread-20244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:09:19.834 [DEBUG] [Thread-20244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:09:19.834 [DEBUG] [Thread-20244] [transport.py] [_log()] client lang: <none>
2026-04-15T14:09:19.834 [DEBUG] [Thread-20244] [transport.py] [_log()] server lang: <none>
2026-04-15T14:09:19.834 [DEBUG] [Thread-20244] [transport.py] [_log()] kex follows: False
2026-04-15T14:09:19.834 [DEBUG] [Thread-20244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:09:19.834 [DEBUG] [Thread-20244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:09:19.834 [DEBUG] [Thread-20244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:09:19.834 [DEBUG] [Thread-20244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:09:19.834 [DEBUG] [Thread-20244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:09:19.834 [DEBUG] [Thread-20244] [transport.py] [_log()] Compression: none
2026-04-15T14:09:19.834 [DEBUG] [Thread-20244] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:09:19.851 [DEBUG] [Thread-20244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:09:19.851 [DEBUG] [Thread-20244] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:09:19.852 [DEBUG] [Thread-20244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:09:19.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:09:19.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:09:19.853 [DEBUG] [Thread-20244] [transport.py] [_log()] userauth is OK
2026-04-15T14:09:19.853 [DEBUG] [Thread-20244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:09:19.853 [DEBUG] [Thread-20244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:09:19.853 [DEBUG] [Thread-20244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:09:19.854 [DEBUG] [Thread-20244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:09:19.888 [INFO] [Thread-20244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:09:19.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:09:20.517 [DEBUG] [Thread-20244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:09:20.518 [DEBUG] [Thread-20244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:09:20.518 [DEBUG] [Thread-20244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:09:20.558 [DEBUG] [Thread-20244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:09:20.558 [DEBUG] [Thread-20244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:09:20.562 [DEBUG] [Thread-20244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:09:20.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:09:20.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:09:20.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:09:20.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:09:20.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:09:20.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:09:20.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:09:20.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:09:20.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:09:20.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.506387 -999.00  +13.90  14.79     64   +7.20 1 2 1 1 1   888    0 6.38 -5.76 ----- 18.4 14.8 332.4 29.1 20.4 -22.4 19.6 -22.2 19.8 -21.0 20.8 -19.6
2026-04-15T14:09:20.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:09:20.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:09:20.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.506387
2026-04-15T14:09:20.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:09:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:09:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:09:20.593 [DEBUG] [Thread-20244] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:09:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:09:20.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:09:20.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:08:59', tmtdew=8.34058, humidity=57.1099, cloud=0.0, wind=18.8449, temperature=14.4112, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:09:11.837', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:09:20.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:09:20.846 [DEBUG] [Thread-20247] [transport.py] [_log()] starting thread (client mode): 0xf13edc00
2026-04-15T14:09:20.846 [DEBUG] [Thread-20247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:09:20.860 [DEBUG] [Thread-20247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:09:20.860 [INFO] [Thread-20247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:09:20.867 [DEBUG] [Thread-20247] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:09:20.867 [DEBUG] [Thread-20247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:09:20.867 [DEBUG] [Thread-20247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:09:20.867 [DEBUG] [Thread-20247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:09:20.868 [DEBUG] [Thread-20247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:09:20.868 [DEBUG] [Thread-20247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:09:20.868 [DEBUG] [Thread-20247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:09:20.868 [DEBUG] [Thread-20247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:09:20.868 [DEBUG] [Thread-20247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:09:20.868 [DEBUG] [Thread-20247] [transport.py] [_log()] client lang: <none>
2026-04-15T14:09:20.868 [DEBUG] [Thread-20247] [transport.py] [_log()] server lang: <none>
2026-04-15T14:09:20.868 [DEBUG] [Thread-20247] [transport.py] [_log()] kex follows: False
2026-04-15T14:09:20.868 [DEBUG] [Thread-20247] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:09:20.868 [DEBUG] [Thread-20247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:09:20.868 [DEBUG] [Thread-20247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:09:20.869 [DEBUG] [Thread-20247] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:09:20.869 [DEBUG] [Thread-20247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:09:20.869 [DEBUG] [Thread-20247] [transport.py] [_log()] Compression: none
2026-04-15T14:09:20.869 [DEBUG] [Thread-20247] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:09:20.922 [DEBUG] [Thread-20247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:09:20.923 [DEBUG] [Thread-20247] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:09:20.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:09:20.923 [DEBUG] [Thread-20247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:09:20.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:09:20.983 [DEBUG] [Thread-20247] [transport.py] [_log()] userauth is OK
2026-04-15T14:09:20.984 [DEBUG] [Thread-20247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:09:20.984 [DEBUG] [Thread-20247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:09:20.984 [DEBUG] [Thread-20247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:09:20.984 [DEBUG] [Thread-20247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:09:21.011 [INFO] [Thread-20247] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:09:21.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:09:21.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:09:21.809 [DEBUG] [Thread-20247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:09:21.809 [DEBUG] [Thread-20247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:09:21.859 [DEBUG] [Thread-20247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:09:21.859 [DEBUG] [Thread-20247] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:09:21.868 [DEBUG] [Thread-20247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:09:21.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:09:21.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')
2026-04-15T14:09:21.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') -> 00000000
2026-04-15T14:09:21.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:09:21.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:09:21.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:09:21.908 [DEBUG] [Thread-20247] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:09:22.588 [DEBUG] [Thread-20249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:09:25.518 [DEBUG] [Thread-20250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:09:37.625 [DEBUG] [Thread-20251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:09:51.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:09:51.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:09:51.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:09:52.656 [DEBUG] [Thread-20252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:09:53.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 9, 34), 9.32026, 53.6232, 0.0, 21.7361, 15.0239, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:09:53.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:09:34
2026-04-15T14:09:53.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:09:54.065 [DEBUG] [Thread-20253] [transport.py] [_log()] starting thread (client mode): 0xf1364e80
2026-04-15T14:09:54.065 [DEBUG] [Thread-20253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:09:54.084 [DEBUG] [Thread-20253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:09:54.084 [INFO] [Thread-20253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:09:54.088 [DEBUG] [Thread-20253] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:09:54.088 [DEBUG] [Thread-20253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:09:54.088 [DEBUG] [Thread-20253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:09:54.088 [DEBUG] [Thread-20253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:09:54.088 [DEBUG] [Thread-20253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:09:54.088 [DEBUG] [Thread-20253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:09:54.088 [DEBUG] [Thread-20253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:09:54.088 [DEBUG] [Thread-20253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:09:54.089 [DEBUG] [Thread-20253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:09:54.089 [DEBUG] [Thread-20253] [transport.py] [_log()] client lang: <none>
2026-04-15T14:09:54.089 [DEBUG] [Thread-20253] [transport.py] [_log()] server lang: <none>
2026-04-15T14:09:54.089 [DEBUG] [Thread-20253] [transport.py] [_log()] kex follows: False
2026-04-15T14:09:54.089 [DEBUG] [Thread-20253] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:09:54.089 [DEBUG] [Thread-20253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:09:54.089 [DEBUG] [Thread-20253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:09:54.089 [DEBUG] [Thread-20253] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:09:54.089 [DEBUG] [Thread-20253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:09:54.089 [DEBUG] [Thread-20253] [transport.py] [_log()] Compression: none
2026-04-15T14:09:54.089 [DEBUG] [Thread-20253] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:09:54.107 [DEBUG] [Thread-20253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:09:54.108 [DEBUG] [Thread-20253] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:09:54.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:09:54.108 [DEBUG] [Thread-20253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:09:54.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:09:54.109 [DEBUG] [Thread-20253] [transport.py] [_log()] userauth is OK
2026-04-15T14:09:54.109 [DEBUG] [Thread-20253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:09:54.109 [DEBUG] [Thread-20253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:09:54.109 [DEBUG] [Thread-20253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:09:54.109 [DEBUG] [Thread-20253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:09:54.127 [INFO] [Thread-20253] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:09:54.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:09:54.781 [DEBUG] [Thread-20253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:09:54.782 [DEBUG] [Thread-20253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:09:54.782 [DEBUG] [Thread-20253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:09:54.822 [DEBUG] [Thread-20253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:09:54.822 [DEBUG] [Thread-20253] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:09:54.825 [DEBUG] [Thread-20253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:09:54.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:09:54.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:09:54.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:09:54.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:09:54.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:09:54.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:09:54.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:09:54.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:09:54.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:09:54.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.506734 -999.00  +13.80  20.18     64   +7.10 1 2 1 1 1   888    0 6.37 -3.00 ----- 17.8 20.2 309.6 22.7 20.6 -21.8 19.6 -22.4 20.0 -18.7 20.9 -19.7
2026-04-15T14:09:54.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:09:54.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:09:54.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.506734
2026-04-15T14:09:54.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:09:54.849 [DEBUG] [Thread-20253] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:09:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:09:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:09:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:09:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:09:54.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:09:34', tmtdew=9.32026, humidity=53.6232, cloud=0.0, wind=21.7361, temperature=15.0239, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:09:41.818', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:09:55.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:09:55.102 [DEBUG] [Thread-20256] [transport.py] [_log()] starting thread (client mode): 0xee907a60
2026-04-15T14:09:55.102 [DEBUG] [Thread-20256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:09:55.117 [DEBUG] [Thread-20256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:09:55.117 [INFO] [Thread-20256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:09:55.124 [DEBUG] [Thread-20256] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:09:55.125 [DEBUG] [Thread-20256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:09:55.125 [DEBUG] [Thread-20256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:09:55.125 [DEBUG] [Thread-20256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:09:55.125 [DEBUG] [Thread-20256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:09:55.125 [DEBUG] [Thread-20256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:09:55.125 [DEBUG] [Thread-20256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:09:55.125 [DEBUG] [Thread-20256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:09:55.125 [DEBUG] [Thread-20256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:09:55.125 [DEBUG] [Thread-20256] [transport.py] [_log()] client lang: <none>
2026-04-15T14:09:55.125 [DEBUG] [Thread-20256] [transport.py] [_log()] server lang: <none>
2026-04-15T14:09:55.126 [DEBUG] [Thread-20256] [transport.py] [_log()] kex follows: False
2026-04-15T14:09:55.126 [DEBUG] [Thread-20256] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:09:55.126 [DEBUG] [Thread-20256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:09:55.126 [DEBUG] [Thread-20256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:09:55.126 [DEBUG] [Thread-20256] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:09:55.126 [DEBUG] [Thread-20256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:09:55.126 [DEBUG] [Thread-20256] [transport.py] [_log()] Compression: none
2026-04-15T14:09:55.126 [DEBUG] [Thread-20256] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:09:55.182 [DEBUG] [Thread-20256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:09:55.183 [DEBUG] [Thread-20256] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:09:55.183 [DEBUG] [Thread-20256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:09:55.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:09:55.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:09:55.239 [DEBUG] [Thread-20256] [transport.py] [_log()] userauth is OK
2026-04-15T14:09:55.240 [DEBUG] [Thread-20256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:09:55.240 [DEBUG] [Thread-20256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:09:55.240 [DEBUG] [Thread-20256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:09:55.240 [DEBUG] [Thread-20256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:09:55.269 [INFO] [Thread-20256] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:09:55.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:09:55.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:09:56.068 [DEBUG] [Thread-20256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:09:56.068 [DEBUG] [Thread-20256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:09:56.117 [DEBUG] [Thread-20256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:09:56.117 [DEBUG] [Thread-20256] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:09:56.127 [DEBUG] [Thread-20256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:09:56.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:09:56.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')
2026-04-15T14:09:56.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
2026-04-15T14:09:56.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:09:56.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:09:56.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:09:56.164 [DEBUG] [Thread-20256] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:10:00.774 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:10:00.775 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:10:07.688 [DEBUG] [Thread-20258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:10:22.731 [DEBUG] [Thread-20259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:10:25.599 [DEBUG] [Thread-20260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:10:26.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:10:26.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:10:26.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
2026-04-15T14:10:27.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 10, 9), 8.57596, 56.2755, 0.0, 19.8857, 14.2128, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:10:27.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:10:09
2026-04-15T14:10:27.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:10:28.294 [DEBUG] [Thread-20261] [transport.py] [_log()] starting thread (client mode): 0xf13643d0
2026-04-15T14:10:28.295 [DEBUG] [Thread-20261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:10:28.314 [DEBUG] [Thread-20261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:10:28.314 [INFO] [Thread-20261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:10:28.319 [DEBUG] [Thread-20261] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:10:28.319 [DEBUG] [Thread-20261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:10:28.319 [DEBUG] [Thread-20261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:10:28.319 [DEBUG] [Thread-20261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:10:28.319 [DEBUG] [Thread-20261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:10:28.319 [DEBUG] [Thread-20261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:10:28.319 [DEBUG] [Thread-20261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:10:28.319 [DEBUG] [Thread-20261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:10:28.319 [DEBUG] [Thread-20261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:10:28.319 [DEBUG] [Thread-20261] [transport.py] [_log()] client lang: <none>
2026-04-15T14:10:28.320 [DEBUG] [Thread-20261] [transport.py] [_log()] server lang: <none>
2026-04-15T14:10:28.320 [DEBUG] [Thread-20261] [transport.py] [_log()] kex follows: False
2026-04-15T14:10:28.320 [DEBUG] [Thread-20261] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:10:28.320 [DEBUG] [Thread-20261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:10:28.320 [DEBUG] [Thread-20261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:10:28.320 [DEBUG] [Thread-20261] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:10:28.320 [DEBUG] [Thread-20261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:10:28.320 [DEBUG] [Thread-20261] [transport.py] [_log()] Compression: none
2026-04-15T14:10:28.320 [DEBUG] [Thread-20261] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:10:28.337 [DEBUG] [Thread-20261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:10:28.337 [DEBUG] [Thread-20261] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:10:28.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:10:28.338 [DEBUG] [Thread-20261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:10:28.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:10:28.339 [DEBUG] [Thread-20261] [transport.py] [_log()] userauth is OK
2026-04-15T14:10:28.339 [DEBUG] [Thread-20261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:10:28.339 [DEBUG] [Thread-20261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:10:28.340 [DEBUG] [Thread-20261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:10:28.340 [DEBUG] [Thread-20261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:10:28.375 [INFO] [Thread-20261] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:10:28.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:10:29.000 [DEBUG] [Thread-20261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:10:29.000 [DEBUG] [Thread-20261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:10:29.001 [DEBUG] [Thread-20261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:10:29.041 [DEBUG] [Thread-20261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:10:29.041 [DEBUG] [Thread-20261] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:10:29.044 [DEBUG] [Thread-20261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:10:29.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:10:29.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:10:29.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:10:29.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:10:29.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:10:29.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:10:29.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:10:29.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:10:29.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:10:29.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.507082 -999.00  +14.20  21.66     64   +7.60 1 2 1 1 1   888    0 6.50 -2.56 ----- 21.3 21.7 315.4 24.7 20.6 -23.7 19.7 -21.3 19.9 -21.7 21.0 -21.2
2026-04-15T14:10:29.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:10:29.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:10:29.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.507082
2026-04-15T14:10:29.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:10:29.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:10:29.073 [DEBUG] [Thread-20261] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:10:29.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:10:29.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:10:29.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:10:29.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:10:09', tmtdew=8.57596, humidity=56.2755, cloud=0.0, wind=19.8857, temperature=14.2128, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:10:11.885', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:10:29.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:10:29.329 [DEBUG] [Thread-20264] [transport.py] [_log()] starting thread (client mode): 0xee9892a0
2026-04-15T14:10:29.330 [DEBUG] [Thread-20264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:10:29.344 [DEBUG] [Thread-20264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:10:29.344 [INFO] [Thread-20264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:10:29.351 [DEBUG] [Thread-20264] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:10:29.351 [DEBUG] [Thread-20264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:10:29.351 [DEBUG] [Thread-20264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:10:29.351 [DEBUG] [Thread-20264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:10:29.352 [DEBUG] [Thread-20264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:10:29.352 [DEBUG] [Thread-20264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:10:29.352 [DEBUG] [Thread-20264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:10:29.352 [DEBUG] [Thread-20264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:10:29.352 [DEBUG] [Thread-20264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:10:29.352 [DEBUG] [Thread-20264] [transport.py] [_log()] client lang: <none>
2026-04-15T14:10:29.352 [DEBUG] [Thread-20264] [transport.py] [_log()] server lang: <none>
2026-04-15T14:10:29.352 [DEBUG] [Thread-20264] [transport.py] [_log()] kex follows: False
2026-04-15T14:10:29.352 [DEBUG] [Thread-20264] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:10:29.352 [DEBUG] [Thread-20264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:10:29.352 [DEBUG] [Thread-20264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:10:29.353 [DEBUG] [Thread-20264] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:10:29.353 [DEBUG] [Thread-20264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:10:29.353 [DEBUG] [Thread-20264] [transport.py] [_log()] Compression: none
2026-04-15T14:10:29.353 [DEBUG] [Thread-20264] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:10:29.412 [DEBUG] [Thread-20264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:10:29.413 [DEBUG] [Thread-20264] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:10:29.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:10:29.414 [DEBUG] [Thread-20264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:10:29.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:10:29.467 [DEBUG] [Thread-20264] [transport.py] [_log()] userauth is OK
2026-04-15T14:10:29.468 [DEBUG] [Thread-20264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:10:29.468 [DEBUG] [Thread-20264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:10:29.468 [DEBUG] [Thread-20264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:10:29.468 [DEBUG] [Thread-20264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:10:29.494 [INFO] [Thread-20264] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:10:29.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:10:29.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:10:30.333 [DEBUG] [Thread-20264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:10:30.333 [DEBUG] [Thread-20264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:10:30.385 [DEBUG] [Thread-20264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:10:30.385 [DEBUG] [Thread-20264] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:10:30.394 [DEBUG] [Thread-20264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:10:30.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:10:30.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')
2026-04-15T14:10:30.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
2026-04-15T14:10:30.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:10:30.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:10:30.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:10:30.429 [DEBUG] [Thread-20264] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:10:37.762 [DEBUG] [Thread-20266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:10:52.805 [DEBUG] [Thread-20267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:11:00.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:11:00.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:11:00.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
2026-04-15T14:11:00.916 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:11:00.917 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:11:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 10, 45), 9.02725, 54.5842, 0.0, 21.5597, 14.4936, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:11:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:10:45
2026-04-15T14:11:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:11:02.575 [DEBUG] [Thread-20268] [transport.py] [_log()] starting thread (client mode): 0xf13efdf0
2026-04-15T14:11:02.576 [DEBUG] [Thread-20268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:11:02.595 [DEBUG] [Thread-20268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:11:02.595 [INFO] [Thread-20268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:11:02.598 [DEBUG] [Thread-20268] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:11:02.598 [DEBUG] [Thread-20268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:11:02.598 [DEBUG] [Thread-20268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:11:02.599 [DEBUG] [Thread-20268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:11:02.599 [DEBUG] [Thread-20268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:11:02.599 [DEBUG] [Thread-20268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:11:02.599 [DEBUG] [Thread-20268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:11:02.599 [DEBUG] [Thread-20268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:11:02.599 [DEBUG] [Thread-20268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:11:02.599 [DEBUG] [Thread-20268] [transport.py] [_log()] client lang: <none>
2026-04-15T14:11:02.599 [DEBUG] [Thread-20268] [transport.py] [_log()] server lang: <none>
2026-04-15T14:11:02.599 [DEBUG] [Thread-20268] [transport.py] [_log()] kex follows: False
2026-04-15T14:11:02.599 [DEBUG] [Thread-20268] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:11:02.599 [DEBUG] [Thread-20268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:11:02.600 [DEBUG] [Thread-20268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:11:02.600 [DEBUG] [Thread-20268] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:11:02.600 [DEBUG] [Thread-20268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:11:02.600 [DEBUG] [Thread-20268] [transport.py] [_log()] Compression: none
2026-04-15T14:11:02.600 [DEBUG] [Thread-20268] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:11:02.618 [DEBUG] [Thread-20268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:11:02.618 [DEBUG] [Thread-20268] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:11:02.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:11:02.619 [DEBUG] [Thread-20268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:11:02.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:11:02.660 [DEBUG] [Thread-20268] [transport.py] [_log()] userauth is OK
2026-04-15T14:11:02.661 [DEBUG] [Thread-20268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:11:02.661 [DEBUG] [Thread-20268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:11:02.661 [DEBUG] [Thread-20268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:11:02.661 [DEBUG] [Thread-20268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:11:02.697 [INFO] [Thread-20268] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:11:02.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:11:03.332 [DEBUG] [Thread-20268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:11:03.332 [DEBUG] [Thread-20268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:11:03.333 [DEBUG] [Thread-20268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:11:03.373 [DEBUG] [Thread-20268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:11:03.373 [DEBUG] [Thread-20268] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:11:03.376 [DEBUG] [Thread-20268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:11:03.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:11:03.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:11:03.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:11:03.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:11:03.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:11:03.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:11:03.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:11:03.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:11:03.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:11:03.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.507429 -999.00  +13.80  12.17     63   +7.00 1 2 1 1 1   888    0 6.59 -1.44 ----- 12.1 12.2 277.2 23.2 20.5 -23.1 19.7 -22.4 19.9 -23.0 20.9 -22.6
2026-04-15T14:11:03.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:11:03.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:11:03.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.507429
2026-04-15T14:11:03.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:11:03.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:11:03.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:11:03.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:11:03.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:11:03.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:10:45', tmtdew=9.02725, humidity=54.5842, cloud=0.0, wind=21.5597, temperature=14.4936, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:10:41.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:11:03.397 [DEBUG] [Thread-20268] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:11:03.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:11:03.610 [DEBUG] [Thread-20271] [transport.py] [_log()] starting thread (client mode): 0xf1336890
2026-04-15T14:11:03.611 [DEBUG] [Thread-20271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:11:03.624 [DEBUG] [Thread-20271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:11:03.625 [INFO] [Thread-20271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:11:03.632 [DEBUG] [Thread-20271] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:11:03.632 [DEBUG] [Thread-20271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:11:03.632 [DEBUG] [Thread-20271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:11:03.632 [DEBUG] [Thread-20271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:11:03.632 [DEBUG] [Thread-20271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:11:03.632 [DEBUG] [Thread-20271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:11:03.632 [DEBUG] [Thread-20271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:11:03.632 [DEBUG] [Thread-20271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:11:03.632 [DEBUG] [Thread-20271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:11:03.632 [DEBUG] [Thread-20271] [transport.py] [_log()] client lang: <none>
2026-04-15T14:11:03.632 [DEBUG] [Thread-20271] [transport.py] [_log()] server lang: <none>
2026-04-15T14:11:03.632 [DEBUG] [Thread-20271] [transport.py] [_log()] kex follows: False
2026-04-15T14:11:03.632 [DEBUG] [Thread-20271] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:11:03.632 [DEBUG] [Thread-20271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:11:03.633 [DEBUG] [Thread-20271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:11:03.633 [DEBUG] [Thread-20271] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:11:03.633 [DEBUG] [Thread-20271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:11:03.633 [DEBUG] [Thread-20271] [transport.py] [_log()] Compression: none
2026-04-15T14:11:03.633 [DEBUG] [Thread-20271] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:11:03.690 [DEBUG] [Thread-20271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:11:03.690 [DEBUG] [Thread-20271] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:11:03.691 [DEBUG] [Thread-20271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:11:03.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:11:03.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:11:03.748 [DEBUG] [Thread-20271] [transport.py] [_log()] userauth is OK
2026-04-15T14:11:03.748 [DEBUG] [Thread-20271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:11:03.749 [DEBUG] [Thread-20271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:11:03.749 [DEBUG] [Thread-20271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:11:03.749 [DEBUG] [Thread-20271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:11:03.767 [INFO] [Thread-20271] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:11:03.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:11:03.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:11:04.605 [DEBUG] [Thread-20271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:11:04.605 [DEBUG] [Thread-20271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:11:04.653 [DEBUG] [Thread-20271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:11:04.653 [DEBUG] [Thread-20271] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:11:04.662 [DEBUG] [Thread-20271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:11:04.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:11:04.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')
2026-04-15T14:11:04.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
2026-04-15T14:11:04.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:11:04.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:11:04.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:11:04.698 [DEBUG] [Thread-20271] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:11:07.833 [DEBUG] [Thread-20273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:11:22.872 [DEBUG] [Thread-20274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:11:25.675 [DEBUG] [Thread-20275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:11:34.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:11:34.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:11:34.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
2026-04-15T14:11:36.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 11, 21), 8.51221, 56.405, 0.0, 18.2797, 13.979, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:11:36.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:11:21
2026-04-15T14:11:36.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:11:36.817 [DEBUG] [Thread-20276] [transport.py] [_log()] starting thread (client mode): 0xee98ab30
2026-04-15T14:11:36.818 [DEBUG] [Thread-20276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:11:36.837 [DEBUG] [Thread-20276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:11:36.837 [INFO] [Thread-20276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:11:36.840 [DEBUG] [Thread-20276] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:11:36.840 [DEBUG] [Thread-20276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:11:36.840 [DEBUG] [Thread-20276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:11:36.840 [DEBUG] [Thread-20276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:11:36.841 [DEBUG] [Thread-20276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:11:36.841 [DEBUG] [Thread-20276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:11:36.841 [DEBUG] [Thread-20276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:11:36.841 [DEBUG] [Thread-20276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:11:36.841 [DEBUG] [Thread-20276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:11:36.841 [DEBUG] [Thread-20276] [transport.py] [_log()] client lang: <none>
2026-04-15T14:11:36.841 [DEBUG] [Thread-20276] [transport.py] [_log()] server lang: <none>
2026-04-15T14:11:36.841 [DEBUG] [Thread-20276] [transport.py] [_log()] kex follows: False
2026-04-15T14:11:36.841 [DEBUG] [Thread-20276] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:11:36.841 [DEBUG] [Thread-20276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:11:36.841 [DEBUG] [Thread-20276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:11:36.841 [DEBUG] [Thread-20276] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:11:36.842 [DEBUG] [Thread-20276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:11:36.842 [DEBUG] [Thread-20276] [transport.py] [_log()] Compression: none
2026-04-15T14:11:36.842 [DEBUG] [Thread-20276] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:11:36.858 [DEBUG] [Thread-20276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:11:36.858 [DEBUG] [Thread-20276] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:11:36.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:11:36.859 [DEBUG] [Thread-20276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:11:36.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:11:36.860 [DEBUG] [Thread-20276] [transport.py] [_log()] userauth is OK
2026-04-15T14:11:36.860 [DEBUG] [Thread-20276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:11:36.860 [DEBUG] [Thread-20276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:11:36.860 [DEBUG] [Thread-20276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:11:36.860 [DEBUG] [Thread-20276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:11:36.884 [INFO] [Thread-20276] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:11:36.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:11:37.512 [DEBUG] [Thread-20276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:11:37.512 [DEBUG] [Thread-20276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:11:37.513 [DEBUG] [Thread-20276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:11:37.553 [DEBUG] [Thread-20276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:11:37.553 [DEBUG] [Thread-20276] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:11:37.557 [DEBUG] [Thread-20276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:11:37.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:11:37.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:11:37.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:11:37.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:11:37.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:11:37.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:11:37.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:11:37.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:11:37.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:11:37.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.507776 -999.00  +14.20  15.44     65   +7.70 1 2 1 1 1   888    0 6.53 -2.24 ----- 17.5 15.4 344.0 18.8 20.4 -24.3 19.7 -23.0 19.8 -22.0 20.7 -23.2
2026-04-15T14:11:37.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:11:37.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:11:37.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.507776
2026-04-15T14:11:37.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:11:37.581 [DEBUG] [Thread-20276] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:11:37.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:11:37.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:11:37.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:11:37.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:11:37.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:11:21', tmtdew=8.51221, humidity=56.405, cloud=0.0, wind=18.2797, temperature=13.979, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:11:11.846', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:11:37.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:11:37.841 [DEBUG] [Thread-20279] [transport.py] [_log()] starting thread (client mode): 0xf1365d80
2026-04-15T14:11:37.841 [DEBUG] [Thread-20279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:11:37.855 [DEBUG] [Thread-20279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:11:37.855 [INFO] [Thread-20279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:11:37.862 [DEBUG] [Thread-20279] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:11:37.863 [DEBUG] [Thread-20279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:11:37.863 [DEBUG] [Thread-20279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:11:37.863 [DEBUG] [Thread-20279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:11:37.863 [DEBUG] [Thread-20279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:11:37.863 [DEBUG] [Thread-20279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:11:37.863 [DEBUG] [Thread-20279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:11:37.863 [DEBUG] [Thread-20279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:11:37.863 [DEBUG] [Thread-20279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:11:37.863 [DEBUG] [Thread-20279] [transport.py] [_log()] client lang: <none>
2026-04-15T14:11:37.863 [DEBUG] [Thread-20279] [transport.py] [_log()] server lang: <none>
2026-04-15T14:11:37.863 [DEBUG] [Thread-20279] [transport.py] [_log()] kex follows: False
2026-04-15T14:11:37.864 [DEBUG] [Thread-20279] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:11:37.864 [DEBUG] [Thread-20279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:11:37.864 [DEBUG] [Thread-20279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:11:37.864 [DEBUG] [Thread-20279] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:11:37.864 [DEBUG] [Thread-20279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:11:37.864 [DEBUG] [Thread-20279] [transport.py] [_log()] Compression: none
2026-04-15T14:11:37.864 [DEBUG] [Thread-20279] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:11:37.904 [DEBUG] [Thread-20281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:11:37.922 [DEBUG] [Thread-20279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:11:37.922 [DEBUG] [Thread-20279] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:11:37.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:11:37.923 [DEBUG] [Thread-20279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:11:37.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:11:37.980 [DEBUG] [Thread-20279] [transport.py] [_log()] userauth is OK
2026-04-15T14:11:37.980 [DEBUG] [Thread-20279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:11:37.980 [DEBUG] [Thread-20279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:11:37.981 [DEBUG] [Thread-20279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:11:37.981 [DEBUG] [Thread-20279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:11:38.006 [INFO] [Thread-20279] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:11:38.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:11:38.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:11:38.853 [DEBUG] [Thread-20279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:11:38.854 [DEBUG] [Thread-20279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:11:38.901 [DEBUG] [Thread-20279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:11:38.901 [DEBUG] [Thread-20279] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:11:38.910 [DEBUG] [Thread-20279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:11:38.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:11: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')
2026-04-15T14:11:38.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') -> 00000000
2026-04-15T14:11:38.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:11:38.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:11:38.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:11:38.944 [DEBUG] [Thread-20279] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:11:52.947 [DEBUG] [Thread-20282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:12:01.057 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:12:01.058 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:12:07.977 [DEBUG] [Thread-20283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:12:08.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:12:08.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:12:08.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
2026-04-15T14:12:10.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 11, 56), 8.36823, 57.0073, 0.0, 17.0626, 14.1122, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:12:10.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:11:56
2026-04-15T14:12:10.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:12:11.015 [DEBUG] [Thread-20284] [transport.py] [_log()] starting thread (client mode): 0xf1364e80
2026-04-15T14:12:11.015 [DEBUG] [Thread-20284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:12:11.034 [DEBUG] [Thread-20284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:12:11.034 [INFO] [Thread-20284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:12:11.037 [DEBUG] [Thread-20284] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:12:11.037 [DEBUG] [Thread-20284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:12:11.037 [DEBUG] [Thread-20284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:12:11.038 [DEBUG] [Thread-20284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:12:11.038 [DEBUG] [Thread-20284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:12:11.038 [DEBUG] [Thread-20284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:12:11.038 [DEBUG] [Thread-20284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:12:11.038 [DEBUG] [Thread-20284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:12:11.038 [DEBUG] [Thread-20284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:12:11.038 [DEBUG] [Thread-20284] [transport.py] [_log()] client lang: <none>
2026-04-15T14:12:11.038 [DEBUG] [Thread-20284] [transport.py] [_log()] server lang: <none>
2026-04-15T14:12:11.038 [DEBUG] [Thread-20284] [transport.py] [_log()] kex follows: False
2026-04-15T14:12:11.038 [DEBUG] [Thread-20284] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:12:11.038 [DEBUG] [Thread-20284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:12:11.039 [DEBUG] [Thread-20284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:12:11.039 [DEBUG] [Thread-20284] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:12:11.039 [DEBUG] [Thread-20284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:12:11.039 [DEBUG] [Thread-20284] [transport.py] [_log()] Compression: none
2026-04-15T14:12:11.039 [DEBUG] [Thread-20284] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:12:11.056 [DEBUG] [Thread-20284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:12:11.057 [DEBUG] [Thread-20284] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:12:11.057 [DEBUG] [Thread-20284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:12:11.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:12:11.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:12:11.059 [DEBUG] [Thread-20284] [transport.py] [_log()] userauth is OK
2026-04-15T14:12:11.059 [DEBUG] [Thread-20284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:12:11.059 [DEBUG] [Thread-20284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:12:11.059 [DEBUG] [Thread-20284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:12:11.059 [DEBUG] [Thread-20284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:12:11.072 [INFO] [Thread-20284] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:12:11.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:12:11.703 [DEBUG] [Thread-20284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:12:11.703 [DEBUG] [Thread-20284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:12:11.704 [DEBUG] [Thread-20284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:12:11.744 [DEBUG] [Thread-20284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:12:11.744 [DEBUG] [Thread-20284] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:12:11.747 [DEBUG] [Thread-20284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:12:11.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:12:11.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:12:11.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:12:11.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:12:11.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:12:11.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:12:11.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:12:11.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:12:11.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:12:11.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.508123 -999.00  +14.00  22.54     63   +7.00 1 2 1 1 1   888    0 6.58 -0.12 ----- 18.7 22.5 324.4 24.8 20.3 -25.0 19.6 -24.0 19.8 -20.5 20.5 -22.9
2026-04-15T14:12:11.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:12:11.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:12:11.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.508123
2026-04-15T14:12:11.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:12:11.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:12:11.773 [DEBUG] [Thread-20284] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:12:11.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:12:11.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:12:11.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:12:11.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:11:56', tmtdew=8.36823, humidity=57.0073, cloud=0.0, wind=17.0626, temperature=14.1122, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:11:41.827', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:12:12.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:12:12.042 [DEBUG] [Thread-20287] [transport.py] [_log()] starting thread (client mode): 0xf13643d0
2026-04-15T14:12:12.043 [DEBUG] [Thread-20287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:12:12.057 [DEBUG] [Thread-20287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:12:12.057 [INFO] [Thread-20287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:12:12.065 [DEBUG] [Thread-20287] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:12:12.065 [DEBUG] [Thread-20287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:12:12.065 [DEBUG] [Thread-20287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:12:12.065 [DEBUG] [Thread-20287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:12:12.065 [DEBUG] [Thread-20287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:12:12.065 [DEBUG] [Thread-20287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:12:12.065 [DEBUG] [Thread-20287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:12:12.065 [DEBUG] [Thread-20287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:12:12.066 [DEBUG] [Thread-20287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:12:12.066 [DEBUG] [Thread-20287] [transport.py] [_log()] client lang: <none>
2026-04-15T14:12:12.066 [DEBUG] [Thread-20287] [transport.py] [_log()] server lang: <none>
2026-04-15T14:12:12.066 [DEBUG] [Thread-20287] [transport.py] [_log()] kex follows: False
2026-04-15T14:12:12.066 [DEBUG] [Thread-20287] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:12:12.066 [DEBUG] [Thread-20287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:12:12.066 [DEBUG] [Thread-20287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:12:12.066 [DEBUG] [Thread-20287] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:12:12.066 [DEBUG] [Thread-20287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:12:12.066 [DEBUG] [Thread-20287] [transport.py] [_log()] Compression: none
2026-04-15T14:12:12.066 [DEBUG] [Thread-20287] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:12:12.122 [DEBUG] [Thread-20287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:12:12.122 [DEBUG] [Thread-20287] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:12:12.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:12:12.123 [DEBUG] [Thread-20287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:12:12.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:12:12.179 [DEBUG] [Thread-20287] [transport.py] [_log()] userauth is OK
2026-04-15T14:12:12.180 [DEBUG] [Thread-20287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:12:12.180 [DEBUG] [Thread-20287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:12:12.180 [DEBUG] [Thread-20287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:12:12.180 [DEBUG] [Thread-20287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:12:12.205 [INFO] [Thread-20287] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:12:12.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:12:12.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:12:13.024 [DEBUG] [Thread-20287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:12:13.024 [DEBUG] [Thread-20287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:12:13.072 [DEBUG] [Thread-20287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:12:13.072 [DEBUG] [Thread-20287] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:12:13.081 [DEBUG] [Thread-20287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:12:13.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:12:13.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')
2026-04-15T14:12:13.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
2026-04-15T14:12:13.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:12:13.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:12:13.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:12:13.117 [DEBUG] [Thread-20287] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:12:23.005 [DEBUG] [Thread-20289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:12:25.779 [DEBUG] [Thread-20290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:12:38.046 [DEBUG] [Thread-20291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:12:43.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:12:43.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:12:43.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
2026-04-15T14:12:44.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 12, 32), 8.41971, 56.8248, 0.0, 19.4792, 14.1616, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:12:44.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:12:32
2026-04-15T14:12:44.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:12:45.178 [DEBUG] [Thread-20292] [transport.py] [_log()] starting thread (client mode): 0xf13ec670
2026-04-15T14:12:45.179 [DEBUG] [Thread-20292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:12:45.198 [DEBUG] [Thread-20292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:12:45.198 [INFO] [Thread-20292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:12:45.201 [DEBUG] [Thread-20292] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:12:45.202 [DEBUG] [Thread-20292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:12:45.202 [DEBUG] [Thread-20292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:12:45.202 [DEBUG] [Thread-20292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:12:45.202 [DEBUG] [Thread-20292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:12:45.202 [DEBUG] [Thread-20292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:12:45.202 [DEBUG] [Thread-20292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:12:45.202 [DEBUG] [Thread-20292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:12:45.202 [DEBUG] [Thread-20292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:12:45.202 [DEBUG] [Thread-20292] [transport.py] [_log()] client lang: <none>
2026-04-15T14:12:45.202 [DEBUG] [Thread-20292] [transport.py] [_log()] server lang: <none>
2026-04-15T14:12:45.203 [DEBUG] [Thread-20292] [transport.py] [_log()] kex follows: False
2026-04-15T14:12:45.203 [DEBUG] [Thread-20292] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:12:45.203 [DEBUG] [Thread-20292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:12:45.203 [DEBUG] [Thread-20292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:12:45.203 [DEBUG] [Thread-20292] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:12:45.203 [DEBUG] [Thread-20292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:12:45.203 [DEBUG] [Thread-20292] [transport.py] [_log()] Compression: none
2026-04-15T14:12:45.203 [DEBUG] [Thread-20292] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:12:45.222 [DEBUG] [Thread-20292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:12:45.222 [DEBUG] [Thread-20292] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:12:45.223 [DEBUG] [Thread-20292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:12:45.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:12:45.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:12:45.224 [DEBUG] [Thread-20292] [transport.py] [_log()] userauth is OK
2026-04-15T14:12:45.224 [DEBUG] [Thread-20292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:12:45.224 [DEBUG] [Thread-20292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:12:45.224 [DEBUG] [Thread-20292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:12:45.225 [DEBUG] [Thread-20292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:12:45.249 [INFO] [Thread-20292] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:12:45.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:12:45.854 [DEBUG] [Thread-20292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:12:45.854 [DEBUG] [Thread-20292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:12:45.855 [DEBUG] [Thread-20292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:12:45.895 [DEBUG] [Thread-20292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:12:45.895 [DEBUG] [Thread-20292] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:12:45.898 [DEBUG] [Thread-20292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:12:45.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:12:45.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:12:45.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:12:45.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:12:45.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:12:45.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:12:45.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:12:45.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:12:45.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:12:45.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.508471 -999.00  +13.80  17.11     64   +7.20 1 2 1 1 1   888    0 6.64 2.28 ----- 15.4 17.1 310.0 21.5 20.1 -25.1 19.4 -24.0 19.6 -21.5 20.3 -23.0
2026-04-15T14:12:45.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:12:45.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:12:45.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.508471
2026-04-15T14:12:45.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:12:45.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:12:45.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:12:45.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:12:45.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:12:45.923 [DEBUG] [Thread-20292] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:12:45.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:12:32', tmtdew=8.41971, humidity=56.8248, cloud=0.0, wind=19.4792, temperature=14.1616, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:12:11.894', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:12:46.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:12:46.184 [DEBUG] [Thread-20295] [transport.py] [_log()] starting thread (client mode): 0xee9e59f0
2026-04-15T14:12:46.185 [DEBUG] [Thread-20295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:12:46.199 [DEBUG] [Thread-20295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:12:46.199 [INFO] [Thread-20295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:12:46.206 [DEBUG] [Thread-20295] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:12:46.206 [DEBUG] [Thread-20295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:12:46.206 [DEBUG] [Thread-20295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] client lang: <none>
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] server lang: <none>
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] kex follows: False
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] Compression: none
2026-04-15T14:12:46.207 [DEBUG] [Thread-20295] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:12:46.262 [DEBUG] [Thread-20295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:12:46.263 [DEBUG] [Thread-20295] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:12:46.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:12:46.263 [DEBUG] [Thread-20295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:12:46.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:12:46.323 [DEBUG] [Thread-20295] [transport.py] [_log()] userauth is OK
2026-04-15T14:12:46.323 [DEBUG] [Thread-20295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:12:46.323 [DEBUG] [Thread-20295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:12:46.323 [DEBUG] [Thread-20295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:12:46.323 [DEBUG] [Thread-20295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:12:46.345 [INFO] [Thread-20295] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:12:46.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:12:46.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:12:47.193 [DEBUG] [Thread-20295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:12:47.194 [DEBUG] [Thread-20295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:12:47.241 [DEBUG] [Thread-20295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:12:47.241 [DEBUG] [Thread-20295] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:12:47.250 [DEBUG] [Thread-20295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:12:47.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:12:47.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')
2026-04-15T14:12:47.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
2026-04-15T14:12:47.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:12:47.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:12:47.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:12:47.285 [DEBUG] [Thread-20295] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:12:53.079 [DEBUG] [Thread-20297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:13:01.211 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:13:01.212 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:13:08.125 [DEBUG] [Thread-20298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:13:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:13:17.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:13:17.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
2026-04-15T14:13:18.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 13, 7), 8.36168, 57.0236, 0.0, 14.2931, 14.0788, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:13:18.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:13:07
2026-04-15T14:13:18.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:13:19.383 [DEBUG] [Thread-20299] [transport.py] [_log()] starting thread (client mode): 0xf1337130
2026-04-15T14:13:19.383 [DEBUG] [Thread-20299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:13:19.403 [DEBUG] [Thread-20299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:13:19.403 [INFO] [Thread-20299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:13:19.406 [DEBUG] [Thread-20299] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:13:19.406 [DEBUG] [Thread-20299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:13:19.406 [DEBUG] [Thread-20299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:13:19.406 [DEBUG] [Thread-20299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:13:19.406 [DEBUG] [Thread-20299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:13:19.407 [DEBUG] [Thread-20299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:13:19.407 [DEBUG] [Thread-20299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:13:19.407 [DEBUG] [Thread-20299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:13:19.407 [DEBUG] [Thread-20299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:13:19.407 [DEBUG] [Thread-20299] [transport.py] [_log()] client lang: <none>
2026-04-15T14:13:19.407 [DEBUG] [Thread-20299] [transport.py] [_log()] server lang: <none>
2026-04-15T14:13:19.407 [DEBUG] [Thread-20299] [transport.py] [_log()] kex follows: False
2026-04-15T14:13:19.407 [DEBUG] [Thread-20299] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:13:19.407 [DEBUG] [Thread-20299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:13:19.407 [DEBUG] [Thread-20299] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:13:19.407 [DEBUG] [Thread-20299] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:13:19.408 [DEBUG] [Thread-20299] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:13:19.408 [DEBUG] [Thread-20299] [transport.py] [_log()] Compression: none
2026-04-15T14:13:19.408 [DEBUG] [Thread-20299] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:13:19.424 [DEBUG] [Thread-20299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:13:19.425 [DEBUG] [Thread-20299] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:13:19.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:13:19.425 [DEBUG] [Thread-20299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:13:19.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:13:19.468 [DEBUG] [Thread-20299] [transport.py] [_log()] userauth is OK
2026-04-15T14:13:19.469 [DEBUG] [Thread-20299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:13:19.469 [DEBUG] [Thread-20299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:13:19.469 [DEBUG] [Thread-20299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:13:19.469 [DEBUG] [Thread-20299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:13:19.505 [INFO] [Thread-20299] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:13:19.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:13:20.159 [DEBUG] [Thread-20299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:13:20.160 [DEBUG] [Thread-20299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:13:20.160 [DEBUG] [Thread-20299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:13:20.200 [DEBUG] [Thread-20299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:13:20.200 [DEBUG] [Thread-20299] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:13:20.203 [DEBUG] [Thread-20299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:13:20.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:13:20.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:13:20.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:13:20.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:13:20.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:13:20.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:13:20.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:13:20.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:13:20.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:13:20.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.508818 -999.00  +13.50  17.01     63   +6.80 1 2 1 1 1   888    0 6.71 2.69 ----- 19.0 17.0 333.0 19.0 20.2 -23.7 19.4 -23.0 19.4 -21.3 20.4 -21.3
2026-04-15T14:13:20.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:13:20.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:13:20.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.508818
2026-04-15T14:13:20.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:13:20.231 [DEBUG] [Thread-20299] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:13:20.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:13:20.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:13:20.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:13:20.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:13:20.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:13:07', tmtdew=8.36168, humidity=57.0236, cloud=0.0, wind=14.2931, temperature=14.0788, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:12:41.875', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:13:20.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:13:20.486 [DEBUG] [Thread-20302] [transport.py] [_log()] starting thread (client mode): 0xf1364430
2026-04-15T14:13:20.487 [DEBUG] [Thread-20302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:13:20.501 [DEBUG] [Thread-20302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:13:20.501 [INFO] [Thread-20302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:13:20.509 [DEBUG] [Thread-20302] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:13:20.509 [DEBUG] [Thread-20302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:13:20.509 [DEBUG] [Thread-20302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:13:20.509 [DEBUG] [Thread-20302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:13:20.509 [DEBUG] [Thread-20302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:13:20.509 [DEBUG] [Thread-20302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:13:20.509 [DEBUG] [Thread-20302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:13:20.509 [DEBUG] [Thread-20302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:13:20.509 [DEBUG] [Thread-20302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:13:20.509 [DEBUG] [Thread-20302] [transport.py] [_log()] client lang: <none>
2026-04-15T14:13:20.509 [DEBUG] [Thread-20302] [transport.py] [_log()] server lang: <none>
2026-04-15T14:13:20.510 [DEBUG] [Thread-20302] [transport.py] [_log()] kex follows: False
2026-04-15T14:13:20.510 [DEBUG] [Thread-20302] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:13:20.510 [DEBUG] [Thread-20302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:13:20.510 [DEBUG] [Thread-20302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:13:20.510 [DEBUG] [Thread-20302] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:13:20.510 [DEBUG] [Thread-20302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:13:20.510 [DEBUG] [Thread-20302] [transport.py] [_log()] Compression: none
2026-04-15T14:13:20.510 [DEBUG] [Thread-20302] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:13:20.566 [DEBUG] [Thread-20302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:13:20.567 [DEBUG] [Thread-20302] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:13:20.567 [DEBUG] [Thread-20302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:13:20.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:13:20.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:13:20.623 [DEBUG] [Thread-20302] [transport.py] [_log()] userauth is OK
2026-04-15T14:13:20.624 [DEBUG] [Thread-20302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:13:20.624 [DEBUG] [Thread-20302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:13:20.624 [DEBUG] [Thread-20302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:13:20.624 [DEBUG] [Thread-20302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:13:20.649 [INFO] [Thread-20302] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:13:20.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:13:20.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:13:21.473 [DEBUG] [Thread-20302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:13:21.474 [DEBUG] [Thread-20302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:13:21.522 [DEBUG] [Thread-20302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:13:21.522 [DEBUG] [Thread-20302] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:13:21.531 [DEBUG] [Thread-20302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:13:21.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:13:21.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')
2026-04-15T14:13:21.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
2026-04-15T14:13:21.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:13:21.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:13:21.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:13:21.567 [DEBUG] [Thread-20302] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:13:23.154 [DEBUG] [Thread-20304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:13:25.887 [DEBUG] [Thread-20305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:13:38.199 [DEBUG] [Thread-20306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:13:51.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:13:51.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:13:51.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:13:52.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 13, 43), 9.09603, 54.3841, 0.0, 10.1995, 14.724, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:13:52.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:13:43
2026-04-15T14:13:53.231 [DEBUG] [Thread-20307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:13:53.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:13:53.685 [DEBUG] [Thread-20308] [transport.py] [_log()] starting thread (client mode): 0xf13ed8a0
2026-04-15T14:13:53.685 [DEBUG] [Thread-20308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:13:53.705 [DEBUG] [Thread-20308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:13:53.705 [INFO] [Thread-20308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:13:53.709 [DEBUG] [Thread-20308] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:13:53.710 [DEBUG] [Thread-20308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:13:53.710 [DEBUG] [Thread-20308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:13:53.710 [DEBUG] [Thread-20308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:13:53.710 [DEBUG] [Thread-20308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:13:53.710 [DEBUG] [Thread-20308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:13:53.710 [DEBUG] [Thread-20308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:13:53.710 [DEBUG] [Thread-20308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:13:53.710 [DEBUG] [Thread-20308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:13:53.710 [DEBUG] [Thread-20308] [transport.py] [_log()] client lang: <none>
2026-04-15T14:13:53.710 [DEBUG] [Thread-20308] [transport.py] [_log()] server lang: <none>
2026-04-15T14:13:53.710 [DEBUG] [Thread-20308] [transport.py] [_log()] kex follows: False
2026-04-15T14:13:53.710 [DEBUG] [Thread-20308] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:13:53.711 [DEBUG] [Thread-20308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:13:53.711 [DEBUG] [Thread-20308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:13:53.711 [DEBUG] [Thread-20308] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:13:53.711 [DEBUG] [Thread-20308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:13:53.711 [DEBUG] [Thread-20308] [transport.py] [_log()] Compression: none
2026-04-15T14:13:53.711 [DEBUG] [Thread-20308] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:13:53.727 [DEBUG] [Thread-20308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:13:53.728 [DEBUG] [Thread-20308] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:13:53.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:13:53.728 [DEBUG] [Thread-20308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:13:53.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:13:53.729 [DEBUG] [Thread-20308] [transport.py] [_log()] userauth is OK
2026-04-15T14:13:53.730 [DEBUG] [Thread-20308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:13:53.730 [DEBUG] [Thread-20308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:13:53.730 [DEBUG] [Thread-20308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:13:53.730 [DEBUG] [Thread-20308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:13:53.766 [INFO] [Thread-20308] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:13:53.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:13:54.409 [DEBUG] [Thread-20308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:13:54.410 [DEBUG] [Thread-20308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:13:54.410 [DEBUG] [Thread-20308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:13:54.450 [DEBUG] [Thread-20308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:13:54.450 [DEBUG] [Thread-20308] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:13:54.454 [DEBUG] [Thread-20308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:13:54.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:13:54.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:13:54.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:13:54.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:13:54.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:13:54.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:13:54.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:13:54.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:13:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:13:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.509165 -999.00  +13.60  12.82     64   +7.10 1 2 1 1 1   888    0 6.68 2.04 ----- 15.2 12.8 334.0 20.3 20.2 -24.0 19.4 -22.3 19.6 -20.1 20.4 -24.0
2026-04-15T14:13:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:13:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:13:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.509165
2026-04-15T14:13:54.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:13:54.479 [DEBUG] [Thread-20308] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:13:54.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:13:54.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:13:54.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:13:54.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:13:54.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:13:43', tmtdew=9.09603, humidity=54.3841, cloud=0.0, wind=10.1995, temperature=14.724, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:13:11.856', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:13:54.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:13:54.736 [DEBUG] [Thread-20311] [transport.py] [_log()] starting thread (client mode): 0xee98af80
2026-04-15T14:13:54.736 [DEBUG] [Thread-20311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:13:54.752 [DEBUG] [Thread-20311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:13:54.752 [INFO] [Thread-20311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:13:54.760 [DEBUG] [Thread-20311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:13:54.760 [DEBUG] [Thread-20311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:13:54.760 [DEBUG] [Thread-20311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:13:54.760 [DEBUG] [Thread-20311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:13:54.760 [DEBUG] [Thread-20311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:13:54.760 [DEBUG] [Thread-20311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:13:54.760 [DEBUG] [Thread-20311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:13:54.760 [DEBUG] [Thread-20311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:13:54.760 [DEBUG] [Thread-20311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:13:54.760 [DEBUG] [Thread-20311] [transport.py] [_log()] client lang: <none>
2026-04-15T14:13:54.761 [DEBUG] [Thread-20311] [transport.py] [_log()] server lang: <none>
2026-04-15T14:13:54.761 [DEBUG] [Thread-20311] [transport.py] [_log()] kex follows: False
2026-04-15T14:13:54.761 [DEBUG] [Thread-20311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:13:54.761 [DEBUG] [Thread-20311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:13:54.761 [DEBUG] [Thread-20311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:13:54.761 [DEBUG] [Thread-20311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:13:54.761 [DEBUG] [Thread-20311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:13:54.761 [DEBUG] [Thread-20311] [transport.py] [_log()] Compression: none
2026-04-15T14:13:54.761 [DEBUG] [Thread-20311] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:13:54.818 [DEBUG] [Thread-20311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:13:54.819 [DEBUG] [Thread-20311] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:13:54.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:13:54.819 [DEBUG] [Thread-20311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:13:54.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:13:54.876 [DEBUG] [Thread-20311] [transport.py] [_log()] userauth is OK
2026-04-15T14:13:54.876 [DEBUG] [Thread-20311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:13:54.876 [DEBUG] [Thread-20311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:13:54.876 [DEBUG] [Thread-20311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:13:54.876 [DEBUG] [Thread-20311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:13:54.902 [INFO] [Thread-20311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:13:54.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:13:54.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:13:55.711 [DEBUG] [Thread-20311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:13:55.712 [DEBUG] [Thread-20311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:13:55.759 [DEBUG] [Thread-20311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:13:55.759 [DEBUG] [Thread-20311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:13:55.768 [DEBUG] [Thread-20311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:13:55.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:13:55.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')
2026-04-15T14:13:55.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
2026-04-15T14:13:55.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:13:55.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:13:55.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:13:55.803 [DEBUG] [Thread-20311] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:14:01.361 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:14:01.362 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:14:08.260 [DEBUG] [Thread-20313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:14:23.304 [DEBUG] [Thread-20314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:14:25.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:14:25.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:14:25.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
2026-04-15T14:14:25.971 [DEBUG] [Thread-20315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:14:27.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 14, 19), 8.37883, 56.924, 0.0, 14.0814, 14.046, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:14:27.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:14:19
2026-04-15T14:14:27.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:14:27.866 [DEBUG] [Thread-20316] [transport.py] [_log()] starting thread (client mode): 0xf13c9900
2026-04-15T14:14:27.867 [DEBUG] [Thread-20316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:14:27.887 [DEBUG] [Thread-20316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:14:27.887 [INFO] [Thread-20316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:14:27.890 [DEBUG] [Thread-20316] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:14:27.890 [DEBUG] [Thread-20316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:14:27.890 [DEBUG] [Thread-20316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:14:27.890 [DEBUG] [Thread-20316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:14:27.890 [DEBUG] [Thread-20316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:14:27.890 [DEBUG] [Thread-20316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:14:27.890 [DEBUG] [Thread-20316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:14:27.890 [DEBUG] [Thread-20316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:14:27.890 [DEBUG] [Thread-20316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:14:27.890 [DEBUG] [Thread-20316] [transport.py] [_log()] client lang: <none>
2026-04-15T14:14:27.890 [DEBUG] [Thread-20316] [transport.py] [_log()] server lang: <none>
2026-04-15T14:14:27.890 [DEBUG] [Thread-20316] [transport.py] [_log()] kex follows: False
2026-04-15T14:14:27.890 [DEBUG] [Thread-20316] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:14:27.891 [DEBUG] [Thread-20316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:14:27.891 [DEBUG] [Thread-20316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:14:27.891 [DEBUG] [Thread-20316] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:14:27.891 [DEBUG] [Thread-20316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:14:27.891 [DEBUG] [Thread-20316] [transport.py] [_log()] Compression: none
2026-04-15T14:14:27.891 [DEBUG] [Thread-20316] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:14:27.907 [DEBUG] [Thread-20316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:14:27.907 [DEBUG] [Thread-20316] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:14:27.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:14:27.908 [DEBUG] [Thread-20316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:14:27.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:14:27.908 [DEBUG] [Thread-20316] [transport.py] [_log()] userauth is OK
2026-04-15T14:14:27.908 [DEBUG] [Thread-20316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:14:27.909 [DEBUG] [Thread-20316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:14:27.909 [DEBUG] [Thread-20316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:14:27.909 [DEBUG] [Thread-20316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:14:27.921 [INFO] [Thread-20316] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:14:27.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:14:28.712 [DEBUG] [Thread-20316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:14:28.712 [DEBUG] [Thread-20316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:14:28.713 [DEBUG] [Thread-20316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:14:28.753 [DEBUG] [Thread-20316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:14:28.753 [DEBUG] [Thread-20316] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:14:28.756 [DEBUG] [Thread-20316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:14:28.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:14:28.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:14:28.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:14:28.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:14:28.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:14:28.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:14:28.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:14:28.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:14:28.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:14:28.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.509859 -999.00  +13.70  14.47     63   +6.80 1 2 1 1 1   888    0 6.54 2.96 ----- 10.2 14.5 10.0 19.1 19.9 -26.2 19.1 -24.8 19.4 -20.5 19.8 -24.4
2026-04-15T14:14:28.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:14:28.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:14:28.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.509859
2026-04-15T14:14:28.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:14:28.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:14:28.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:14:28.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:14:28.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:14:28.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:14:19', tmtdew=8.37883, humidity=56.924, cloud=0.0, wind=14.0814, temperature=14.046, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:14:11.818', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:14:28.783 [DEBUG] [Thread-20316] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:14:29.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:14:29.040 [DEBUG] [Thread-20319] [transport.py] [_log()] starting thread (client mode): 0xee989bd0
2026-04-15T14:14:29.040 [DEBUG] [Thread-20319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:14:29.053 [DEBUG] [Thread-20319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:14:29.053 [INFO] [Thread-20319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:14:29.061 [DEBUG] [Thread-20319] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:14:29.061 [DEBUG] [Thread-20319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:14:29.061 [DEBUG] [Thread-20319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:14:29.061 [DEBUG] [Thread-20319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:14:29.061 [DEBUG] [Thread-20319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:14:29.061 [DEBUG] [Thread-20319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:14:29.061 [DEBUG] [Thread-20319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:14:29.061 [DEBUG] [Thread-20319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:14:29.062 [DEBUG] [Thread-20319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:14:29.062 [DEBUG] [Thread-20319] [transport.py] [_log()] client lang: <none>
2026-04-15T14:14:29.062 [DEBUG] [Thread-20319] [transport.py] [_log()] server lang: <none>
2026-04-15T14:14:29.062 [DEBUG] [Thread-20319] [transport.py] [_log()] kex follows: False
2026-04-15T14:14:29.062 [DEBUG] [Thread-20319] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:14:29.062 [DEBUG] [Thread-20319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:14:29.062 [DEBUG] [Thread-20319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:14:29.062 [DEBUG] [Thread-20319] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:14:29.062 [DEBUG] [Thread-20319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:14:29.062 [DEBUG] [Thread-20319] [transport.py] [_log()] Compression: none
2026-04-15T14:14:29.062 [DEBUG] [Thread-20319] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:14:29.119 [DEBUG] [Thread-20319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:14:29.119 [DEBUG] [Thread-20319] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:14:29.120 [DEBUG] [Thread-20319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:14:29.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:14:29.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:14:29.175 [DEBUG] [Thread-20319] [transport.py] [_log()] userauth is OK
2026-04-15T14:14:29.176 [DEBUG] [Thread-20319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:14:29.176 [DEBUG] [Thread-20319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:14:29.176 [DEBUG] [Thread-20319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:14:29.176 [DEBUG] [Thread-20319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:14:29.201 [INFO] [Thread-20319] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:14:29.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:14:29.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:14:30.012 [DEBUG] [Thread-20319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:14:30.013 [DEBUG] [Thread-20319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:14:30.060 [DEBUG] [Thread-20319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:14:30.060 [DEBUG] [Thread-20319] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:14:30.069 [DEBUG] [Thread-20319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:14:30.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:14:30.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')
2026-04-15T14:14:30.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
2026-04-15T14:14:30.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:14:30.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:14:30.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:14:30.104 [DEBUG] [Thread-20319] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:14:38.335 [DEBUG] [Thread-20321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:14:53.380 [DEBUG] [Thread-20322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:15:00.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:15:00.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:15:00.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
2026-04-15T14:15:01.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 14, 54), 8.73063, 55.7094, 0.0, 16.1618, 14.4586, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:15:01.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:14:54
2026-04-15T14:15:01.504 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:15:01.505 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:15:01.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:15:02.179 [DEBUG] [Thread-20323] [transport.py] [_log()] starting thread (client mode): 0xee9027d0
2026-04-15T14:15:02.179 [DEBUG] [Thread-20323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:15:02.199 [DEBUG] [Thread-20323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:15:02.200 [INFO] [Thread-20323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:15:02.202 [DEBUG] [Thread-20323] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:15:02.202 [DEBUG] [Thread-20323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:15:02.202 [DEBUG] [Thread-20323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:15:02.202 [DEBUG] [Thread-20323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:15:02.202 [DEBUG] [Thread-20323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:15:02.202 [DEBUG] [Thread-20323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:15:02.203 [DEBUG] [Thread-20323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:15:02.203 [DEBUG] [Thread-20323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:15:02.203 [DEBUG] [Thread-20323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:15:02.203 [DEBUG] [Thread-20323] [transport.py] [_log()] client lang: <none>
2026-04-15T14:15:02.203 [DEBUG] [Thread-20323] [transport.py] [_log()] server lang: <none>
2026-04-15T14:15:02.203 [DEBUG] [Thread-20323] [transport.py] [_log()] kex follows: False
2026-04-15T14:15:02.203 [DEBUG] [Thread-20323] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:15:02.203 [DEBUG] [Thread-20323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:15:02.203 [DEBUG] [Thread-20323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:15:02.203 [DEBUG] [Thread-20323] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:15:02.203 [DEBUG] [Thread-20323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:15:02.203 [DEBUG] [Thread-20323] [transport.py] [_log()] Compression: none
2026-04-15T14:15:02.203 [DEBUG] [Thread-20323] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:15:02.220 [DEBUG] [Thread-20323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:15:02.220 [DEBUG] [Thread-20323] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:15:02.220 [DEBUG] [Thread-20323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:15:02.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:15:02.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:15:02.264 [DEBUG] [Thread-20323] [transport.py] [_log()] userauth is OK
2026-04-15T14:15:02.264 [DEBUG] [Thread-20323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:15:02.264 [DEBUG] [Thread-20323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:15:02.264 [DEBUG] [Thread-20323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:15:02.264 [DEBUG] [Thread-20323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:15:02.283 [INFO] [Thread-20323] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:15:02.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:15:03.117 [DEBUG] [Thread-20323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:15:03.117 [DEBUG] [Thread-20323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:15:03.118 [DEBUG] [Thread-20323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:15:03.158 [DEBUG] [Thread-20323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:15:03.158 [DEBUG] [Thread-20323] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:15:03.161 [DEBUG] [Thread-20323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:15:03.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:15:03.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:15:03.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:15:03.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:15:03.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:15:03.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:15:03.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:15:03.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:15:03.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:15:03.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.510206 -999.00  +13.60  12.15     63   +6.90 1 1 1 1 1   888    0 6.82 4.62 ----- 8.8 12.2 19.6 15.1 19.9 -24.9 19.0 -24.6 19.4 -22.3 19.9 -27.2
2026-04-15T14:15:03.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:15:03.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:15:03.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.510206
2026-04-15T14:15:03.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:15:03.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:15:03.180 [DEBUG] [Thread-20323] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:15:03.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:15:03.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:15:03.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:15:03.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:14:54', tmtdew=8.73063, humidity=55.7094, cloud=0.0, wind=16.1618, temperature=14.4586, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:14:41.798', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:15:03.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:15:03.437 [DEBUG] [Thread-20326] [transport.py] [_log()] starting thread (client mode): 0xf13ee440
2026-04-15T14:15:03.438 [DEBUG] [Thread-20326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:15:03.452 [DEBUG] [Thread-20326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:15:03.452 [INFO] [Thread-20326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:15:03.459 [DEBUG] [Thread-20326] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:15:03.459 [DEBUG] [Thread-20326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:15:03.460 [DEBUG] [Thread-20326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:15:03.460 [DEBUG] [Thread-20326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:15:03.460 [DEBUG] [Thread-20326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:15:03.460 [DEBUG] [Thread-20326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:15:03.460 [DEBUG] [Thread-20326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:15:03.460 [DEBUG] [Thread-20326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:15:03.460 [DEBUG] [Thread-20326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:15:03.460 [DEBUG] [Thread-20326] [transport.py] [_log()] client lang: <none>
2026-04-15T14:15:03.460 [DEBUG] [Thread-20326] [transport.py] [_log()] server lang: <none>
2026-04-15T14:15:03.460 [DEBUG] [Thread-20326] [transport.py] [_log()] kex follows: False
2026-04-15T14:15:03.460 [DEBUG] [Thread-20326] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:15:03.460 [DEBUG] [Thread-20326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:15:03.461 [DEBUG] [Thread-20326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:15:03.461 [DEBUG] [Thread-20326] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:15:03.461 [DEBUG] [Thread-20326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:15:03.461 [DEBUG] [Thread-20326] [transport.py] [_log()] Compression: none
2026-04-15T14:15:03.461 [DEBUG] [Thread-20326] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:15:03.520 [DEBUG] [Thread-20326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:15:03.520 [DEBUG] [Thread-20326] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:15:03.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:15:03.521 [DEBUG] [Thread-20326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:15:03.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:15:03.578 [DEBUG] [Thread-20326] [transport.py] [_log()] userauth is OK
2026-04-15T14:15:03.579 [DEBUG] [Thread-20326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:15:03.579 [DEBUG] [Thread-20326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:15:03.579 [DEBUG] [Thread-20326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:15:03.579 [DEBUG] [Thread-20326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:15:03.605 [INFO] [Thread-20326] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:15:03.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:15:03.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:15:04.474 [DEBUG] [Thread-20326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:15:04.475 [DEBUG] [Thread-20326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:15:04.522 [DEBUG] [Thread-20326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:15:04.522 [DEBUG] [Thread-20326] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:15:04.531 [DEBUG] [Thread-20326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:15:04.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:15:04.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')
2026-04-15T14:15:04.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') -> 00000000
2026-04-15T14:15:04.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:15:04.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:15:04.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:15:04.571 [DEBUG] [Thread-20326] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:15:08.412 [DEBUG] [Thread-20328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:15:23.455 [DEBUG] [Thread-20329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:15:26.054 [DEBUG] [Thread-20330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:15:34.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:15:34.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:15:34.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
2026-04-15T14:15:35.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 14, 54), 8.73063, 55.7094, 0.0, 16.1618, 14.4586, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:15:35.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:14:54
2026-04-15T14:15:36.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:15:36.789 [DEBUG] [Thread-20331] [transport.py] [_log()] starting thread (client mode): 0xf13ca920
2026-04-15T14:15:36.789 [DEBUG] [Thread-20331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:15:36.808 [DEBUG] [Thread-20331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:15:36.809 [INFO] [Thread-20331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:15:36.812 [DEBUG] [Thread-20331] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:15:36.812 [DEBUG] [Thread-20331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:15:36.812 [DEBUG] [Thread-20331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:15:36.812 [DEBUG] [Thread-20331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:15:36.812 [DEBUG] [Thread-20331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:15:36.812 [DEBUG] [Thread-20331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:15:36.812 [DEBUG] [Thread-20331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:15:36.812 [DEBUG] [Thread-20331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:15:36.812 [DEBUG] [Thread-20331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:15:36.812 [DEBUG] [Thread-20331] [transport.py] [_log()] client lang: <none>
2026-04-15T14:15:36.813 [DEBUG] [Thread-20331] [transport.py] [_log()] server lang: <none>
2026-04-15T14:15:36.813 [DEBUG] [Thread-20331] [transport.py] [_log()] kex follows: False
2026-04-15T14:15:36.813 [DEBUG] [Thread-20331] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:15:36.813 [DEBUG] [Thread-20331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:15:36.813 [DEBUG] [Thread-20331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:15:36.813 [DEBUG] [Thread-20331] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:15:36.813 [DEBUG] [Thread-20331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:15:36.813 [DEBUG] [Thread-20331] [transport.py] [_log()] Compression: none
2026-04-15T14:15:36.813 [DEBUG] [Thread-20331] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:15:36.830 [DEBUG] [Thread-20331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:15:36.830 [DEBUG] [Thread-20331] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:15:36.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:15:36.831 [DEBUG] [Thread-20331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:15:36.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:15:36.832 [DEBUG] [Thread-20331] [transport.py] [_log()] userauth is OK
2026-04-15T14:15:36.832 [DEBUG] [Thread-20331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:15:36.833 [DEBUG] [Thread-20331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:15:36.833 [DEBUG] [Thread-20331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:15:36.833 [DEBUG] [Thread-20331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:15:36.852 [INFO] [Thread-20331] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:15:36.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:15:37.485 [DEBUG] [Thread-20331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:15:37.485 [DEBUG] [Thread-20331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:15:37.486 [DEBUG] [Thread-20331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:15:37.526 [DEBUG] [Thread-20331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:15:37.526 [DEBUG] [Thread-20331] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:15:37.529 [DEBUG] [Thread-20331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:15:37.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:15:37.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:15:37.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:15:37.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:15:37.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:15:37.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:15:37.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:15:37.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:15:37.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:15:37.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.510554 -999.00  +13.80  11.37     65   +7.40 1 2 1 1 1   888    0 6.81 4.71 ----- 16.6 11.4 10.2 12.1 19.9 -23.5 19.1 -23.8 19.3 -21.0 20.1 -22.4
2026-04-15T14:15:37.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:15:37.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:15:37.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.510554
2026-04-15T14:15:37.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:15:37.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:15:37.553 [DEBUG] [Thread-20331] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:15:37.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:15:37.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:15:37.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:15:37.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:14:54', tmtdew=8.73063, humidity=55.7094, cloud=0.0, wind=16.1618, temperature=14.4586, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:15:11.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:15:37.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:15:37.820 [DEBUG] [Thread-20334] [transport.py] [_log()] starting thread (client mode): 0xee988940
2026-04-15T14:15:37.820 [DEBUG] [Thread-20334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:15:37.834 [DEBUG] [Thread-20334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:15:37.834 [INFO] [Thread-20334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:15:37.843 [DEBUG] [Thread-20334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:15:37.844 [DEBUG] [Thread-20334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:15:37.844 [DEBUG] [Thread-20334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:15:37.844 [DEBUG] [Thread-20334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:15:37.844 [DEBUG] [Thread-20334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:15:37.844 [DEBUG] [Thread-20334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:15:37.844 [DEBUG] [Thread-20334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:15:37.844 [DEBUG] [Thread-20334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:15:37.844 [DEBUG] [Thread-20334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:15:37.844 [DEBUG] [Thread-20334] [transport.py] [_log()] client lang: <none>
2026-04-15T14:15:37.844 [DEBUG] [Thread-20334] [transport.py] [_log()] server lang: <none>
2026-04-15T14:15:37.844 [DEBUG] [Thread-20334] [transport.py] [_log()] kex follows: False
2026-04-15T14:15:37.845 [DEBUG] [Thread-20334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:15:37.845 [DEBUG] [Thread-20334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:15:37.845 [DEBUG] [Thread-20334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:15:37.845 [DEBUG] [Thread-20334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:15:37.845 [DEBUG] [Thread-20334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:15:37.845 [DEBUG] [Thread-20334] [transport.py] [_log()] Compression: none
2026-04-15T14:15:37.845 [DEBUG] [Thread-20334] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:15:37.904 [DEBUG] [Thread-20334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:15:37.904 [DEBUG] [Thread-20334] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:15:37.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:15:37.905 [DEBUG] [Thread-20334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:15:37.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:15:37.964 [DEBUG] [Thread-20334] [transport.py] [_log()] userauth is OK
2026-04-15T14:15:37.964 [DEBUG] [Thread-20334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:15:37.964 [DEBUG] [Thread-20334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:15:37.964 [DEBUG] [Thread-20334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:15:37.965 [DEBUG] [Thread-20334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:15:37.993 [INFO] [Thread-20334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:15:37.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:15:37.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:15:38.485 [DEBUG] [Thread-20336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:15:38.834 [DEBUG] [Thread-20334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:15:38.834 [DEBUG] [Thread-20334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:15:38.884 [DEBUG] [Thread-20334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:15:38.884 [DEBUG] [Thread-20334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:15:38.896 [DEBUG] [Thread-20334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:15:38.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:15:38.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')
2026-04-15T14:15:38.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
2026-04-15T14:15:38.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:15:38.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:15:38.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:15:38.940 [DEBUG] [Thread-20334] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:15:53.530 [DEBUG] [Thread-20337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:16:01.646 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:16:01.647 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:16:08.563 [DEBUG] [Thread-20338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:16:08.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:16:08.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:16:08.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
2026-04-15T14:16:10.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 15, 29), 8.25025, 57.6998, 0.0, 16.3217, 14.1459, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:16:10.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:15:29
2026-04-15T14:16:10.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:16:11.066 [DEBUG] [Thread-20339] [transport.py] [_log()] starting thread (client mode): 0xf1337880
2026-04-15T14:16:11.066 [DEBUG] [Thread-20339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:16:11.086 [DEBUG] [Thread-20339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:16:11.087 [INFO] [Thread-20339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:16:11.090 [DEBUG] [Thread-20339] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:16:11.090 [DEBUG] [Thread-20339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:16:11.090 [DEBUG] [Thread-20339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:16:11.090 [DEBUG] [Thread-20339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:16:11.090 [DEBUG] [Thread-20339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:16:11.090 [DEBUG] [Thread-20339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:16:11.090 [DEBUG] [Thread-20339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:16:11.090 [DEBUG] [Thread-20339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:16:11.090 [DEBUG] [Thread-20339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:16:11.091 [DEBUG] [Thread-20339] [transport.py] [_log()] client lang: <none>
2026-04-15T14:16:11.091 [DEBUG] [Thread-20339] [transport.py] [_log()] server lang: <none>
2026-04-15T14:16:11.091 [DEBUG] [Thread-20339] [transport.py] [_log()] kex follows: False
2026-04-15T14:16:11.091 [DEBUG] [Thread-20339] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:16:11.091 [DEBUG] [Thread-20339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:16:11.091 [DEBUG] [Thread-20339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:16:11.091 [DEBUG] [Thread-20339] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:16:11.091 [DEBUG] [Thread-20339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:16:11.091 [DEBUG] [Thread-20339] [transport.py] [_log()] Compression: none
2026-04-15T14:16:11.091 [DEBUG] [Thread-20339] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:16:11.108 [DEBUG] [Thread-20339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:16:11.108 [DEBUG] [Thread-20339] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:16:11.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:16:11.109 [DEBUG] [Thread-20339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:16:11.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:16:11.110 [DEBUG] [Thread-20339] [transport.py] [_log()] userauth is OK
2026-04-15T14:16:11.110 [DEBUG] [Thread-20339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:16:11.110 [DEBUG] [Thread-20339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:16:11.110 [DEBUG] [Thread-20339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:16:11.111 [DEBUG] [Thread-20339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:16:11.146 [INFO] [Thread-20339] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:16:11.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:16:12.322 [DEBUG] [Thread-20339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:16:12.322 [DEBUG] [Thread-20339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:16:12.323 [DEBUG] [Thread-20339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:16:12.363 [DEBUG] [Thread-20339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:16:12.363 [DEBUG] [Thread-20339] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:16:12.366 [DEBUG] [Thread-20339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:16:12.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:16:12.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:16:12.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:16:12.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:16:12.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:16:12.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:16:12.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:16:12.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:16:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:16:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.510901 -999.00  +14.10  12.30     64   +7.60 1 2 1 1 1   888    0 6.75 5.08 ----- 16.7 12.3 322.2 23.5 20.0 -24.7 19.1 -22.9 19.4 -20.9 20.1 -22.7
2026-04-15T14:16:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:16:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:16:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.510901
2026-04-15T14:16:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:16:12.392 [DEBUG] [Thread-20339] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:16:12.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:16:12.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:16:12.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:16:12.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:16:12.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:15:29', tmtdew=8.25025, humidity=57.6998, cloud=0.0, wind=16.3217, temperature=14.1459, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:15:41.846', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:16:12.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:16:12.662 [DEBUG] [Thread-20342] [transport.py] [_log()] starting thread (client mode): 0xee98af80
2026-04-15T14:16:12.663 [DEBUG] [Thread-20342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:16:12.683 [DEBUG] [Thread-20342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:16:12.683 [INFO] [Thread-20342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:16:12.690 [DEBUG] [Thread-20342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:16:12.690 [DEBUG] [Thread-20342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:16:12.690 [DEBUG] [Thread-20342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:16:12.690 [DEBUG] [Thread-20342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:16:12.691 [DEBUG] [Thread-20342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:16:12.691 [DEBUG] [Thread-20342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:16:12.691 [DEBUG] [Thread-20342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:16:12.691 [DEBUG] [Thread-20342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:16:12.691 [DEBUG] [Thread-20342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:16:12.691 [DEBUG] [Thread-20342] [transport.py] [_log()] client lang: <none>
2026-04-15T14:16:12.691 [DEBUG] [Thread-20342] [transport.py] [_log()] server lang: <none>
2026-04-15T14:16:12.691 [DEBUG] [Thread-20342] [transport.py] [_log()] kex follows: False
2026-04-15T14:16:12.691 [DEBUG] [Thread-20342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:16:12.691 [DEBUG] [Thread-20342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:16:12.691 [DEBUG] [Thread-20342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:16:12.691 [DEBUG] [Thread-20342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:16:12.692 [DEBUG] [Thread-20342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:16:12.692 [DEBUG] [Thread-20342] [transport.py] [_log()] Compression: none
2026-04-15T14:16:12.692 [DEBUG] [Thread-20342] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:16:12.747 [DEBUG] [Thread-20342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:16:12.748 [DEBUG] [Thread-20342] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:16:12.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:16:12.748 [DEBUG] [Thread-20342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:16:12.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:16:12.805 [DEBUG] [Thread-20342] [transport.py] [_log()] userauth is OK
2026-04-15T14:16:12.805 [DEBUG] [Thread-20342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:16:12.805 [DEBUG] [Thread-20342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:16:12.805 [DEBUG] [Thread-20342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:16:12.805 [DEBUG] [Thread-20342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:16:12.831 [INFO] [Thread-20342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:16:12.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:16:12.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:16:13.634 [DEBUG] [Thread-20342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:16:13.634 [DEBUG] [Thread-20342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:16:13.682 [DEBUG] [Thread-20342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:16:13.682 [DEBUG] [Thread-20342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:16:13.691 [DEBUG] [Thread-20342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:16:13.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:16:13.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')
2026-04-15T14:16:13.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
2026-04-15T14:16:13.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:16:13.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:16:13.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:16:13.728 [DEBUG] [Thread-20342] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:16:23.595 [DEBUG] [Thread-20344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:16:26.143 [DEBUG] [Thread-20345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:16:38.640 [DEBUG] [Thread-20346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:16:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:16:43.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:16:43.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
2026-04-15T14:16:45.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 16, 6), 8.31964, 57.4677, 0.0, 16.2158, 14.3114, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:16:45.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:16:06
2026-04-15T14:16:45.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:16:45.917 [DEBUG] [Thread-20347] [transport.py] [_log()] starting thread (client mode): 0xee9ad420
2026-04-15T14:16:45.917 [DEBUG] [Thread-20347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:16:45.937 [DEBUG] [Thread-20347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:16:45.937 [INFO] [Thread-20347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:16:45.940 [DEBUG] [Thread-20347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:16:45.940 [DEBUG] [Thread-20347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:16:45.941 [DEBUG] [Thread-20347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:16:45.941 [DEBUG] [Thread-20347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:16:45.941 [DEBUG] [Thread-20347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:16:45.941 [DEBUG] [Thread-20347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:16:45.941 [DEBUG] [Thread-20347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:16:45.941 [DEBUG] [Thread-20347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:16:45.941 [DEBUG] [Thread-20347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:16:45.941 [DEBUG] [Thread-20347] [transport.py] [_log()] client lang: <none>
2026-04-15T14:16:45.941 [DEBUG] [Thread-20347] [transport.py] [_log()] server lang: <none>
2026-04-15T14:16:45.941 [DEBUG] [Thread-20347] [transport.py] [_log()] kex follows: False
2026-04-15T14:16:45.941 [DEBUG] [Thread-20347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:16:45.941 [DEBUG] [Thread-20347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:16:45.941 [DEBUG] [Thread-20347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:16:45.942 [DEBUG] [Thread-20347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:16:45.942 [DEBUG] [Thread-20347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:16:45.942 [DEBUG] [Thread-20347] [transport.py] [_log()] Compression: none
2026-04-15T14:16:45.942 [DEBUG] [Thread-20347] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:16:45.958 [DEBUG] [Thread-20347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:16:45.959 [DEBUG] [Thread-20347] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:16:45.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:16:45.959 [DEBUG] [Thread-20347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:16:45.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:16:45.960 [DEBUG] [Thread-20347] [transport.py] [_log()] userauth is OK
2026-04-15T14:16:45.960 [DEBUG] [Thread-20347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:16:45.960 [DEBUG] [Thread-20347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:16:45.960 [DEBUG] [Thread-20347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:16:45.960 [DEBUG] [Thread-20347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:16:45.976 [INFO] [Thread-20347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:16:45.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:16:46.739 [DEBUG] [Thread-20347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:16:46.740 [DEBUG] [Thread-20347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:16:46.740 [DEBUG] [Thread-20347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:16:46.780 [DEBUG] [Thread-20347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:16:46.780 [DEBUG] [Thread-20347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:16:46.782 [DEBUG] [Thread-20347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:16:46.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:16:46.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:16:46.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:16:46.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:16:46.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:16:46.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:16:46.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:16:46.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:16:46.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:16:46.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.511248 -999.00  +14.00   9.38     63   +7.20 1 2 1 1 1   888    0 6.90 7.73 ----- 14.0 9.4 337.0 21.1 20.0 -25.2 19.2 -23.9 19.4 -21.1 20.2 -22.5
2026-04-15T14:16:46.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:16:46.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:16:46.799 [DEBUG] [Thread-20347] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:16:46.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.511248
2026-04-15T14:16:46.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:16:46.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:16:46.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:16:46.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:16:46.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:16:46.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:16:06', tmtdew=8.31964, humidity=57.4677, cloud=0.0, wind=16.2158, temperature=14.3114, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:16:11.827', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:16:47.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:16:47.058 [DEBUG] [Thread-20350] [transport.py] [_log()] starting thread (client mode): 0xee985390
2026-04-15T14:16:47.058 [DEBUG] [Thread-20350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:16:47.073 [DEBUG] [Thread-20350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:16:47.073 [INFO] [Thread-20350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:16:47.084 [DEBUG] [Thread-20350] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:16:47.084 [DEBUG] [Thread-20350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:16:47.085 [DEBUG] [Thread-20350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:16:47.085 [DEBUG] [Thread-20350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:16:47.085 [DEBUG] [Thread-20350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:16:47.085 [DEBUG] [Thread-20350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:16:47.085 [DEBUG] [Thread-20350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:16:47.085 [DEBUG] [Thread-20350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:16:47.085 [DEBUG] [Thread-20350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:16:47.085 [DEBUG] [Thread-20350] [transport.py] [_log()] client lang: <none>
2026-04-15T14:16:47.086 [DEBUG] [Thread-20350] [transport.py] [_log()] server lang: <none>
2026-04-15T14:16:47.086 [DEBUG] [Thread-20350] [transport.py] [_log()] kex follows: False
2026-04-15T14:16:47.086 [DEBUG] [Thread-20350] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:16:47.086 [DEBUG] [Thread-20350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:16:47.086 [DEBUG] [Thread-20350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:16:47.086 [DEBUG] [Thread-20350] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:16:47.086 [DEBUG] [Thread-20350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:16:47.086 [DEBUG] [Thread-20350] [transport.py] [_log()] Compression: none
2026-04-15T14:16:47.086 [DEBUG] [Thread-20350] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:16:47.140 [DEBUG] [Thread-20350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:16:47.140 [DEBUG] [Thread-20350] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:16:47.141 [DEBUG] [Thread-20350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:16:47.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:16:47.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:16:47.195 [DEBUG] [Thread-20350] [transport.py] [_log()] userauth is OK
2026-04-15T14:16:47.196 [DEBUG] [Thread-20350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:16:47.196 [DEBUG] [Thread-20350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:16:47.196 [DEBUG] [Thread-20350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:16:47.196 [DEBUG] [Thread-20350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:16:47.221 [INFO] [Thread-20350] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:16:47.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:16:47.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:16:48.063 [DEBUG] [Thread-20350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:16:48.064 [DEBUG] [Thread-20350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:16:48.111 [DEBUG] [Thread-20350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:16:48.111 [DEBUG] [Thread-20350] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:16:48.120 [DEBUG] [Thread-20350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:16:48.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:16:48.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')
2026-04-15T14:16:48.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
2026-04-15T14:16:48.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:16:48.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:16:48.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:16:48.155 [DEBUG] [Thread-20350] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:16:53.670 [DEBUG] [Thread-20352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:17:01.792 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:17:01.794 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:17:08.709 [DEBUG] [Thread-20353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:17:18.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:17:18.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:17:18.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
2026-04-15T14:17:19.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 16, 41), 8.87784, 55.2121, 0.0, 8.96472, 14.7234, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:17:19.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:16:41
2026-04-15T14:17:19.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:17:20.244 [DEBUG] [Thread-20354] [transport.py] [_log()] starting thread (client mode): 0xee9ad360
2026-04-15T14:17:20.244 [DEBUG] [Thread-20354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:17:20.264 [DEBUG] [Thread-20354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:17:20.264 [INFO] [Thread-20354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:17:20.267 [DEBUG] [Thread-20354] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:17:20.268 [DEBUG] [Thread-20354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:17:20.268 [DEBUG] [Thread-20354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:17:20.268 [DEBUG] [Thread-20354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:17:20.268 [DEBUG] [Thread-20354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:17:20.268 [DEBUG] [Thread-20354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:17:20.268 [DEBUG] [Thread-20354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:17:20.268 [DEBUG] [Thread-20354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:17:20.268 [DEBUG] [Thread-20354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:17:20.268 [DEBUG] [Thread-20354] [transport.py] [_log()] client lang: <none>
2026-04-15T14:17:20.268 [DEBUG] [Thread-20354] [transport.py] [_log()] server lang: <none>
2026-04-15T14:17:20.268 [DEBUG] [Thread-20354] [transport.py] [_log()] kex follows: False
2026-04-15T14:17:20.268 [DEBUG] [Thread-20354] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:17:20.269 [DEBUG] [Thread-20354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:17:20.269 [DEBUG] [Thread-20354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:17:20.269 [DEBUG] [Thread-20354] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:17:20.269 [DEBUG] [Thread-20354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:17:20.269 [DEBUG] [Thread-20354] [transport.py] [_log()] Compression: none
2026-04-15T14:17:20.269 [DEBUG] [Thread-20354] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:17:20.286 [DEBUG] [Thread-20354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:17:20.286 [DEBUG] [Thread-20354] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:17:20.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:17:20.287 [DEBUG] [Thread-20354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:17:20.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:17:20.288 [DEBUG] [Thread-20354] [transport.py] [_log()] userauth is OK
2026-04-15T14:17:20.288 [DEBUG] [Thread-20354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:17:20.289 [DEBUG] [Thread-20354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:17:20.289 [DEBUG] [Thread-20354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:17:20.289 [DEBUG] [Thread-20354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:17:20.313 [INFO] [Thread-20354] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:17:20.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:17:21.069 [DEBUG] [Thread-20354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:17:21.069 [DEBUG] [Thread-20354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:17:21.070 [DEBUG] [Thread-20354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:17:21.110 [DEBUG] [Thread-20354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:17:21.110 [DEBUG] [Thread-20354] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:17:21.113 [DEBUG] [Thread-20354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:17:21.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:17:21.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:17:21.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:17:21.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:17:21.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:17:21.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:17:21.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:17:21.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:17:21.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:17:21.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.511595 -999.00  +13.80  16.91     63   +7.00 1 1 1 1 1   888    0 6.80 8.91 ----- 22.7 16.9 327.0 19.7 19.9 -25.3 19.1 -25.5 19.4 -21.7 20.1 -23.5
2026-04-15T14:17:21.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:17:21.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:17:21.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.511595
2026-04-15T14:17:21.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:17:21.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:17:21.138 [DEBUG] [Thread-20354] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:17:21.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:17:21.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:17:21.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:17:21.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:16:41', tmtdew=8.87784, humidity=55.2121, cloud=0.0, wind=8.96472, temperature=14.7234, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:16:41.808', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:17:21.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:17:21.400 [DEBUG] [Thread-20357] [transport.py] [_log()] starting thread (client mode): 0xee9adae0
2026-04-15T14:17:21.400 [DEBUG] [Thread-20357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:17:21.414 [DEBUG] [Thread-20357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:17:21.414 [INFO] [Thread-20357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:17:21.421 [DEBUG] [Thread-20357] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:17:21.421 [DEBUG] [Thread-20357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:17:21.421 [DEBUG] [Thread-20357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:17:21.421 [DEBUG] [Thread-20357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:17:21.422 [DEBUG] [Thread-20357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:17:21.422 [DEBUG] [Thread-20357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:17:21.422 [DEBUG] [Thread-20357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:17:21.422 [DEBUG] [Thread-20357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:17:21.422 [DEBUG] [Thread-20357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:17:21.422 [DEBUG] [Thread-20357] [transport.py] [_log()] client lang: <none>
2026-04-15T14:17:21.422 [DEBUG] [Thread-20357] [transport.py] [_log()] server lang: <none>
2026-04-15T14:17:21.422 [DEBUG] [Thread-20357] [transport.py] [_log()] kex follows: False
2026-04-15T14:17:21.422 [DEBUG] [Thread-20357] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:17:21.422 [DEBUG] [Thread-20357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:17:21.422 [DEBUG] [Thread-20357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:17:21.422 [DEBUG] [Thread-20357] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:17:21.423 [DEBUG] [Thread-20357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:17:21.423 [DEBUG] [Thread-20357] [transport.py] [_log()] Compression: none
2026-04-15T14:17:21.423 [DEBUG] [Thread-20357] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:17:21.479 [DEBUG] [Thread-20357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:17:21.479 [DEBUG] [Thread-20357] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:17:21.479 [DEBUG] [Thread-20357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:17:21.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:17:21.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:17:21.539 [DEBUG] [Thread-20357] [transport.py] [_log()] userauth is OK
2026-04-15T14:17:21.539 [DEBUG] [Thread-20357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:17:21.539 [DEBUG] [Thread-20357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:17:21.539 [DEBUG] [Thread-20357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:17:21.539 [DEBUG] [Thread-20357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:17:21.566 [INFO] [Thread-20357] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:17:21.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:17:21.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:17:22.366 [DEBUG] [Thread-20357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:17:22.366 [DEBUG] [Thread-20357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:17:22.414 [DEBUG] [Thread-20357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:17:22.414 [DEBUG] [Thread-20357] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:17:22.423 [DEBUG] [Thread-20357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:17:22.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:17:22.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')
2026-04-15T14:17:22.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
2026-04-15T14:17:22.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:17:22.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:17:22.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:17:22.457 [DEBUG] [Thread-20357] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:17:23.741 [DEBUG] [Thread-20359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:17:26.236 [DEBUG] [Thread-20360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:17:38.784 [DEBUG] [Thread-20361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:17:52.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:17:52.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:17:52.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
2026-04-15T14:17:53.817 [DEBUG] [Thread-20362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:17:53.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 17, 17), 8.58671, 56.106, 0.0, 12.0352, 14.0285, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:17:53.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:17:17
2026-04-15T14:17:54.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:17:54.694 [DEBUG] [Thread-20363] [transport.py] [_log()] starting thread (client mode): 0xee9acbb0
2026-04-15T14:17:54.694 [DEBUG] [Thread-20363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:17:54.713 [DEBUG] [Thread-20363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:17:54.713 [INFO] [Thread-20363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:17:54.716 [DEBUG] [Thread-20363] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:17:54.716 [DEBUG] [Thread-20363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:17:54.716 [DEBUG] [Thread-20363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:17:54.716 [DEBUG] [Thread-20363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:17:54.716 [DEBUG] [Thread-20363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:17:54.716 [DEBUG] [Thread-20363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:17:54.717 [DEBUG] [Thread-20363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:17:54.717 [DEBUG] [Thread-20363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:17:54.717 [DEBUG] [Thread-20363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:17:54.717 [DEBUG] [Thread-20363] [transport.py] [_log()] client lang: <none>
2026-04-15T14:17:54.717 [DEBUG] [Thread-20363] [transport.py] [_log()] server lang: <none>
2026-04-15T14:17:54.717 [DEBUG] [Thread-20363] [transport.py] [_log()] kex follows: False
2026-04-15T14:17:54.717 [DEBUG] [Thread-20363] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:17:54.717 [DEBUG] [Thread-20363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:17:54.717 [DEBUG] [Thread-20363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:17:54.717 [DEBUG] [Thread-20363] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:17:54.717 [DEBUG] [Thread-20363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:17:54.717 [DEBUG] [Thread-20363] [transport.py] [_log()] Compression: none
2026-04-15T14:17:54.718 [DEBUG] [Thread-20363] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:17:54.735 [DEBUG] [Thread-20363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:17:54.735 [DEBUG] [Thread-20363] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:17:54.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:17:54.736 [DEBUG] [Thread-20363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:17:54.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:17:54.737 [DEBUG] [Thread-20363] [transport.py] [_log()] userauth is OK
2026-04-15T14:17:54.737 [DEBUG] [Thread-20363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:17:54.737 [DEBUG] [Thread-20363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:17:54.737 [DEBUG] [Thread-20363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:17:54.738 [DEBUG] [Thread-20363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:17:54.773 [INFO] [Thread-20363] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:17:54.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:17:55.563 [DEBUG] [Thread-20363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:17:55.564 [DEBUG] [Thread-20363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:17:55.564 [DEBUG] [Thread-20363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:17:55.604 [DEBUG] [Thread-20363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:17:55.604 [DEBUG] [Thread-20363] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:17:55.607 [DEBUG] [Thread-20363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:17:55.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:17:55.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:17:55.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:17:55.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:17:55.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:17:55.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:17:55.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:17:55.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:17:55.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:17:55.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.511943 -999.00  +13.50  15.68     63   +6.80 1 1 1 1 1   888    0 6.86 9.65 ----- 8.1 15.7 337.0 27.6 19.8 -26.1 18.9 -25.2 19.3 -22.7 20.0 -24.2
2026-04-15T14:17:55.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:17:55.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:17:55.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.511943
2026-04-15T14:17:55.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:17:55.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:17:55.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:17:55.634 [DEBUG] [Thread-20363] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:17:55.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:17:55.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:17:55.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:17:17', tmtdew=8.58671, humidity=56.106, cloud=0.0, wind=12.0352, temperature=14.0285, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:17:11.875', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:17:55.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:17:55.897 [DEBUG] [Thread-20366] [transport.py] [_log()] starting thread (client mode): 0xee9ae200
2026-04-15T14:17:55.897 [DEBUG] [Thread-20366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:17:55.912 [DEBUG] [Thread-20366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:17:55.912 [INFO] [Thread-20366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:17:55.924 [DEBUG] [Thread-20366] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:17:55.924 [DEBUG] [Thread-20366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:17:55.924 [DEBUG] [Thread-20366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:17:55.925 [DEBUG] [Thread-20366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:17:55.925 [DEBUG] [Thread-20366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:17:55.925 [DEBUG] [Thread-20366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:17:55.925 [DEBUG] [Thread-20366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:17:55.925 [DEBUG] [Thread-20366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:17:55.925 [DEBUG] [Thread-20366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:17:55.925 [DEBUG] [Thread-20366] [transport.py] [_log()] client lang: <none>
2026-04-15T14:17:55.925 [DEBUG] [Thread-20366] [transport.py] [_log()] server lang: <none>
2026-04-15T14:17:55.925 [DEBUG] [Thread-20366] [transport.py] [_log()] kex follows: False
2026-04-15T14:17:55.925 [DEBUG] [Thread-20366] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:17:55.925 [DEBUG] [Thread-20366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:17:55.925 [DEBUG] [Thread-20366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:17:55.925 [DEBUG] [Thread-20366] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:17:55.925 [DEBUG] [Thread-20366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:17:55.926 [DEBUG] [Thread-20366] [transport.py] [_log()] Compression: none
2026-04-15T14:17:55.926 [DEBUG] [Thread-20366] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:17:55.982 [DEBUG] [Thread-20366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:17:55.982 [DEBUG] [Thread-20366] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:17:55.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:17:55.983 [DEBUG] [Thread-20366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:17:55.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:17:56.040 [DEBUG] [Thread-20366] [transport.py] [_log()] userauth is OK
2026-04-15T14:17:56.040 [DEBUG] [Thread-20366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:17:56.040 [DEBUG] [Thread-20366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:17:56.041 [DEBUG] [Thread-20366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:17:56.041 [DEBUG] [Thread-20366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:17:56.063 [INFO] [Thread-20366] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:17:56.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:17:56.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:17:56.876 [DEBUG] [Thread-20366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:17:56.877 [DEBUG] [Thread-20366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:17:56.924 [DEBUG] [Thread-20366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:17:56.924 [DEBUG] [Thread-20366] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:17:56.933 [DEBUG] [Thread-20366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:17:56.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:17:56.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')
2026-04-15T14:17:56.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
2026-04-15T14:17:56.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:17:56.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:17:56.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:17:56.967 [DEBUG] [Thread-20366] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:18:01.931 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:18:01.932 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:18:08.848 [DEBUG] [Thread-20368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:18:23.891 [DEBUG] [Thread-20369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:18:26.313 [DEBUG] [Thread-20370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:18:26.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:18:26.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:18:26.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:18:28.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 17, 52), 8.69438, 55.8748, 0.0, 14.5037, 14.5575, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:18:28.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:17:52
2026-04-15T14:18:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:18:29.042 [DEBUG] [Thread-20371] [transport.py] [_log()] starting thread (client mode): 0xee9af7c0
2026-04-15T14:18:29.042 [DEBUG] [Thread-20371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:18:29.062 [DEBUG] [Thread-20371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:18:29.062 [INFO] [Thread-20371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:18:29.065 [DEBUG] [Thread-20371] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:18:29.065 [DEBUG] [Thread-20371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:18:29.065 [DEBUG] [Thread-20371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:18:29.065 [DEBUG] [Thread-20371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:18:29.065 [DEBUG] [Thread-20371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:18:29.066 [DEBUG] [Thread-20371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:18:29.066 [DEBUG] [Thread-20371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:18:29.066 [DEBUG] [Thread-20371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:18:29.066 [DEBUG] [Thread-20371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:18:29.066 [DEBUG] [Thread-20371] [transport.py] [_log()] client lang: <none>
2026-04-15T14:18:29.066 [DEBUG] [Thread-20371] [transport.py] [_log()] server lang: <none>
2026-04-15T14:18:29.066 [DEBUG] [Thread-20371] [transport.py] [_log()] kex follows: False
2026-04-15T14:18:29.066 [DEBUG] [Thread-20371] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:18:29.066 [DEBUG] [Thread-20371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:18:29.066 [DEBUG] [Thread-20371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:18:29.066 [DEBUG] [Thread-20371] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:18:29.066 [DEBUG] [Thread-20371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:18:29.067 [DEBUG] [Thread-20371] [transport.py] [_log()] Compression: none
2026-04-15T14:18:29.067 [DEBUG] [Thread-20371] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:18:29.083 [DEBUG] [Thread-20371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:18:29.084 [DEBUG] [Thread-20371] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:18:29.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:18:29.084 [DEBUG] [Thread-20371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:18:29.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:18:29.086 [DEBUG] [Thread-20371] [transport.py] [_log()] userauth is OK
2026-04-15T14:18:29.086 [DEBUG] [Thread-20371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:18:29.086 [DEBUG] [Thread-20371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:18:29.086 [DEBUG] [Thread-20371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:18:29.086 [DEBUG] [Thread-20371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:18:29.123 [INFO] [Thread-20371] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:18:29.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:18:29.910 [DEBUG] [Thread-20371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:18:29.910 [DEBUG] [Thread-20371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:18:29.911 [DEBUG] [Thread-20371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:18:29.951 [DEBUG] [Thread-20371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:18:29.951 [DEBUG] [Thread-20371] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:18:29.954 [DEBUG] [Thread-20371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:18:29.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:18:29.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:18:29.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:18:29.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:18:29.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:18:29.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:18:29.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:18:29.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:18:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:18:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.512290 -999.00  +13.60  11.36     64   +6.90 1 1 1 1 1   888    0 7.02 9.14 ----- 6.5 11.4 340.2 13.1 19.6 -26.6 18.9 -25.3 19.2 -21.9 19.9 -24.5
2026-04-15T14:18:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:18:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:18:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.512290
2026-04-15T14:18:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:18:29.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:18:29.979 [DEBUG] [Thread-20371] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:18:29.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:18:29.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:18:29.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:18:29.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:17:52', tmtdew=8.69438, humidity=55.8748, cloud=0.0, wind=14.5037, temperature=14.5575, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:17:41.856', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:18:30.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:18:30.236 [DEBUG] [Thread-20374] [transport.py] [_log()] starting thread (client mode): 0xee9ae650
2026-04-15T14:18:30.237 [DEBUG] [Thread-20374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:18:30.256 [DEBUG] [Thread-20374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:18:30.256 [INFO] [Thread-20374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:18:30.267 [DEBUG] [Thread-20374] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:18:30.267 [DEBUG] [Thread-20374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:18:30.267 [DEBUG] [Thread-20374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:18:30.267 [DEBUG] [Thread-20374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:18:30.267 [DEBUG] [Thread-20374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:18:30.267 [DEBUG] [Thread-20374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:18:30.267 [DEBUG] [Thread-20374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:18:30.267 [DEBUG] [Thread-20374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:18:30.268 [DEBUG] [Thread-20374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:18:30.268 [DEBUG] [Thread-20374] [transport.py] [_log()] client lang: <none>
2026-04-15T14:18:30.268 [DEBUG] [Thread-20374] [transport.py] [_log()] server lang: <none>
2026-04-15T14:18:30.268 [DEBUG] [Thread-20374] [transport.py] [_log()] kex follows: False
2026-04-15T14:18:30.268 [DEBUG] [Thread-20374] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:18:30.268 [DEBUG] [Thread-20374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:18:30.268 [DEBUG] [Thread-20374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:18:30.268 [DEBUG] [Thread-20374] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:18:30.268 [DEBUG] [Thread-20374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:18:30.268 [DEBUG] [Thread-20374] [transport.py] [_log()] Compression: none
2026-04-15T14:18:30.268 [DEBUG] [Thread-20374] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:18:30.328 [DEBUG] [Thread-20374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:18:30.328 [DEBUG] [Thread-20374] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:18:30.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:18:30.329 [DEBUG] [Thread-20374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:18:30.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:18:30.391 [DEBUG] [Thread-20374] [transport.py] [_log()] userauth is OK
2026-04-15T14:18:30.391 [DEBUG] [Thread-20374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:18:30.392 [DEBUG] [Thread-20374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:18:30.392 [DEBUG] [Thread-20374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:18:30.392 [DEBUG] [Thread-20374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:18:30.423 [INFO] [Thread-20374] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:18:30.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:18:30.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:18:31.225 [DEBUG] [Thread-20374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:18:31.225 [DEBUG] [Thread-20374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:18:31.273 [DEBUG] [Thread-20374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:18:31.274 [DEBUG] [Thread-20374] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:18:31.287 [DEBUG] [Thread-20374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:18:31.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:18:31.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')
2026-04-15T14:18:31.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') -> 00000000
2026-04-15T14:18:31.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:18:31.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:18:31.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:18:31.335 [DEBUG] [Thread-20374] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:18:38.922 [DEBUG] [Thread-20376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:18:53.967 [DEBUG] [Thread-20377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:19:01.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:19:01.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:19:01.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:19:02.075 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:19:02.076 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:19:02.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 18, 28), 8.20174, 57.5338, 0.0, 14.5217, 14.0447, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:19:02.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:18:28
2026-04-15T14:19:02.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:19:03.434 [DEBUG] [Thread-20378] [transport.py] [_log()] starting thread (client mode): 0xee9af700
2026-04-15T14:19:03.434 [DEBUG] [Thread-20378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:19:03.453 [DEBUG] [Thread-20378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:19:03.453 [INFO] [Thread-20378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:19:03.455 [DEBUG] [Thread-20378] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:19:03.455 [DEBUG] [Thread-20378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:19:03.455 [DEBUG] [Thread-20378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:19:03.455 [DEBUG] [Thread-20378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:19:03.456 [DEBUG] [Thread-20378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:19:03.456 [DEBUG] [Thread-20378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:19:03.456 [DEBUG] [Thread-20378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:19:03.456 [DEBUG] [Thread-20378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:19:03.456 [DEBUG] [Thread-20378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:19:03.456 [DEBUG] [Thread-20378] [transport.py] [_log()] client lang: <none>
2026-04-15T14:19:03.456 [DEBUG] [Thread-20378] [transport.py] [_log()] server lang: <none>
2026-04-15T14:19:03.456 [DEBUG] [Thread-20378] [transport.py] [_log()] kex follows: False
2026-04-15T14:19:03.456 [DEBUG] [Thread-20378] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:19:03.456 [DEBUG] [Thread-20378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:19:03.456 [DEBUG] [Thread-20378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:19:03.457 [DEBUG] [Thread-20378] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:19:03.457 [DEBUG] [Thread-20378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:19:03.457 [DEBUG] [Thread-20378] [transport.py] [_log()] Compression: none
2026-04-15T14:19:03.457 [DEBUG] [Thread-20378] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:19:03.468 [DEBUG] [Thread-20378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:19:03.468 [DEBUG] [Thread-20378] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:19:03.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:19:03.469 [DEBUG] [Thread-20378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:19:03.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:19:03.469 [DEBUG] [Thread-20378] [transport.py] [_log()] userauth is OK
2026-04-15T14:19:03.469 [DEBUG] [Thread-20378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:19:03.469 [DEBUG] [Thread-20378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:19:03.470 [DEBUG] [Thread-20378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:19:03.470 [DEBUG] [Thread-20378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:19:03.482 [INFO] [Thread-20378] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:19:03.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:19:04.240 [DEBUG] [Thread-20378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:19:04.240 [DEBUG] [Thread-20378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:19:04.241 [DEBUG] [Thread-20378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:19:04.281 [DEBUG] [Thread-20378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:19:04.281 [DEBUG] [Thread-20378] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:19:04.284 [DEBUG] [Thread-20378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:19:04.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:19:04.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:19:04.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:19:04.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:19:04.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:19:04.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:19:04.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:19:04.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:19:04.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:19:04.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.512984 -999.00  +13.70   6.57     64   +7.00 1 1 1 1 1   888    0 6.97 8.88 ----- 8.7 6.6 354.3 12.8 19.6 -25.9 18.9 -25.4 19.2 -22.4 19.8 -24.3
2026-04-15T14:19:04.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:19:04.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:19:04.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.512984
2026-04-15T14:19:04.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:19:04.303 [DEBUG] [Thread-20378] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:19:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:19:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:19:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:19:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:19:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:18:28', tmtdew=8.20174, humidity=57.5338, cloud=0.0, wind=14.5217, temperature=14.0447, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:18:41.818', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:19:04.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:19:04.550 [DEBUG] [Thread-20381] [transport.py] [_log()] starting thread (client mode): 0xee9ae9e0
2026-04-15T14:19:04.550 [DEBUG] [Thread-20381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:19:04.566 [DEBUG] [Thread-20381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:19:04.566 [INFO] [Thread-20381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:19:04.573 [DEBUG] [Thread-20381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:19:04.573 [DEBUG] [Thread-20381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:19:04.573 [DEBUG] [Thread-20381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:19:04.573 [DEBUG] [Thread-20381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:19:04.573 [DEBUG] [Thread-20381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:19:04.574 [DEBUG] [Thread-20381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:19:04.574 [DEBUG] [Thread-20381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:19:04.574 [DEBUG] [Thread-20381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:19:04.574 [DEBUG] [Thread-20381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:19:04.574 [DEBUG] [Thread-20381] [transport.py] [_log()] client lang: <none>
2026-04-15T14:19:04.574 [DEBUG] [Thread-20381] [transport.py] [_log()] server lang: <none>
2026-04-15T14:19:04.574 [DEBUG] [Thread-20381] [transport.py] [_log()] kex follows: False
2026-04-15T14:19:04.574 [DEBUG] [Thread-20381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:19:04.574 [DEBUG] [Thread-20381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:19:04.574 [DEBUG] [Thread-20381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:19:04.574 [DEBUG] [Thread-20381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:19:04.574 [DEBUG] [Thread-20381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:19:04.575 [DEBUG] [Thread-20381] [transport.py] [_log()] Compression: none
2026-04-15T14:19:04.575 [DEBUG] [Thread-20381] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:19:04.631 [DEBUG] [Thread-20381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:19:04.631 [DEBUG] [Thread-20381] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:19:04.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:19:04.632 [DEBUG] [Thread-20381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:19:04.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:19:04.687 [DEBUG] [Thread-20381] [transport.py] [_log()] userauth is OK
2026-04-15T14:19:04.688 [DEBUG] [Thread-20381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:19:04.688 [DEBUG] [Thread-20381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:19:04.688 [DEBUG] [Thread-20381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:19:04.688 [DEBUG] [Thread-20381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:19:04.715 [INFO] [Thread-20381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:19:04.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:19:04.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:19:05.536 [DEBUG] [Thread-20381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:19:05.537 [DEBUG] [Thread-20381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:19:05.584 [DEBUG] [Thread-20381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:19:05.584 [DEBUG] [Thread-20381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:19:05.593 [DEBUG] [Thread-20381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:19:05.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:19:05.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')
2026-04-15T14:19:05.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
2026-04-15T14:19:05.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:19:05.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:19:05.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:19:05.628 [DEBUG] [Thread-20381] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:19:08.998 [DEBUG] [Thread-20383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:19:24.041 [DEBUG] [Thread-20384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:19:26.397 [DEBUG] [Thread-20385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:19:35.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:19:35.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:19:35.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
2026-04-15T14:19:36.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 19, 4), 8.26523, 57.3018, 0.0, 15.9682, 14.111, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:19:36.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:19:04
2026-04-15T14:19:37.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:19:37.850 [DEBUG] [Thread-20386] [transport.py] [_log()] starting thread (client mode): 0xee902080
2026-04-15T14:19:37.850 [DEBUG] [Thread-20386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:19:37.864 [DEBUG] [Thread-20386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:19:37.864 [INFO] [Thread-20386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:19:37.867 [DEBUG] [Thread-20386] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:19:37.867 [DEBUG] [Thread-20386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:19:37.867 [DEBUG] [Thread-20386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:19:37.867 [DEBUG] [Thread-20386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:19:37.867 [DEBUG] [Thread-20386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:19:37.867 [DEBUG] [Thread-20386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:19:37.867 [DEBUG] [Thread-20386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:19:37.867 [DEBUG] [Thread-20386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:19:37.868 [DEBUG] [Thread-20386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:19:37.868 [DEBUG] [Thread-20386] [transport.py] [_log()] client lang: <none>
2026-04-15T14:19:37.868 [DEBUG] [Thread-20386] [transport.py] [_log()] server lang: <none>
2026-04-15T14:19:37.868 [DEBUG] [Thread-20386] [transport.py] [_log()] kex follows: False
2026-04-15T14:19:37.868 [DEBUG] [Thread-20386] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:19:37.868 [DEBUG] [Thread-20386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:19:37.868 [DEBUG] [Thread-20386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:19:37.868 [DEBUG] [Thread-20386] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:19:37.868 [DEBUG] [Thread-20386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:19:37.868 [DEBUG] [Thread-20386] [transport.py] [_log()] Compression: none
2026-04-15T14:19:37.868 [DEBUG] [Thread-20386] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:19:37.885 [DEBUG] [Thread-20386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:19:37.885 [DEBUG] [Thread-20386] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:19:37.886 [DEBUG] [Thread-20386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:19:37.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:19:37.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:19:37.887 [DEBUG] [Thread-20386] [transport.py] [_log()] userauth is OK
2026-04-15T14:19:37.887 [DEBUG] [Thread-20386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:19:37.887 [DEBUG] [Thread-20386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:19:37.887 [DEBUG] [Thread-20386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:19:37.887 [DEBUG] [Thread-20386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:19:37.910 [INFO] [Thread-20386] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:19:37.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:19:38.689 [DEBUG] [Thread-20386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:19:38.689 [DEBUG] [Thread-20386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:19:38.689 [DEBUG] [Thread-20386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:19:38.729 [DEBUG] [Thread-20386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:19:38.729 [DEBUG] [Thread-20386] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:19:38.737 [DEBUG] [Thread-20386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:19:38.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:19:38.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:19:38.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:19:38.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:19:38.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:19:38.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:19:38.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:19:38.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:19:38.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:19:38.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.513332 -999.00  +13.70   9.81     64   +7.10 1 1 1 1 1   888    0 6.70 8.51 ----- 9.3 9.8 329.8 16.9 19.6 -25.2 18.9 -24.6 19.1 -23.1 19.9 -22.9
2026-04-15T14:19:38.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:19:38.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:19:38.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.513332
2026-04-15T14:19:38.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:19:38.750 [DEBUG] [Thread-20386] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:19:38.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:19:38.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:19:38.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:19:38.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:19:38.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:19:04', tmtdew=8.26523, humidity=57.3018, cloud=0.0, wind=15.9682, temperature=14.111, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:19:11.885', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:19:38.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:19:38.961 [DEBUG] [Thread-20389] [transport.py] [_log()] starting thread (client mode): 0xf13e0520
2026-04-15T14:19:38.961 [DEBUG] [Thread-20389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:19:38.975 [DEBUG] [Thread-20389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:19:38.975 [INFO] [Thread-20389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:19:38.982 [DEBUG] [Thread-20389] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:19:38.982 [DEBUG] [Thread-20389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] client lang: <none>
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] server lang: <none>
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] kex follows: False
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] Compression: none
2026-04-15T14:19:38.983 [DEBUG] [Thread-20389] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:19:39.040 [DEBUG] [Thread-20389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:19:39.040 [DEBUG] [Thread-20389] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:19:39.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:19:39.041 [DEBUG] [Thread-20389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:19:39.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:19:39.071 [DEBUG] [Thread-20391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:19:39.095 [DEBUG] [Thread-20389] [transport.py] [_log()] userauth is OK
2026-04-15T14:19:39.096 [DEBUG] [Thread-20389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:19:39.096 [DEBUG] [Thread-20389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:19:39.096 [DEBUG] [Thread-20389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:19:39.096 [DEBUG] [Thread-20389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:19:39.113 [INFO] [Thread-20389] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:19:39.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:19:39.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:19:39.935 [DEBUG] [Thread-20389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:19:39.936 [DEBUG] [Thread-20389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:19:39.983 [DEBUG] [Thread-20389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:19:39.983 [DEBUG] [Thread-20389] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:19:39.992 [DEBUG] [Thread-20389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:19:40.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:19: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')
2026-04-15T14:19: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
2026-04-15T14:19:40.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:19:40.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:19:40.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:19:40.027 [DEBUG] [Thread-20389] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:19:54.111 [DEBUG] [Thread-20392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:20:02.218 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:20:02.219 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:20:09.141 [DEBUG] [Thread-20393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:20:10.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:20:10.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:20:10.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
2026-04-15T14:20:11.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 19, 39), 8.73789, 55.8082, 0.0, 18.2434, 14.9549, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:20:11.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:19:39
2026-04-15T14:20:11.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:20:12.150 [DEBUG] [Thread-20394] [transport.py] [_log()] starting thread (client mode): 0xee901870
2026-04-15T14:20:12.150 [DEBUG] [Thread-20394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:20:12.170 [DEBUG] [Thread-20394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:20:12.170 [INFO] [Thread-20394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:20:12.174 [DEBUG] [Thread-20394] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:20:12.174 [DEBUG] [Thread-20394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:20:12.174 [DEBUG] [Thread-20394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:20:12.174 [DEBUG] [Thread-20394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:20:12.174 [DEBUG] [Thread-20394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:20:12.174 [DEBUG] [Thread-20394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:20:12.174 [DEBUG] [Thread-20394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:20:12.174 [DEBUG] [Thread-20394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:20:12.174 [DEBUG] [Thread-20394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:20:12.174 [DEBUG] [Thread-20394] [transport.py] [_log()] client lang: <none>
2026-04-15T14:20:12.174 [DEBUG] [Thread-20394] [transport.py] [_log()] server lang: <none>
2026-04-15T14:20:12.175 [DEBUG] [Thread-20394] [transport.py] [_log()] kex follows: False
2026-04-15T14:20:12.175 [DEBUG] [Thread-20394] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:20:12.175 [DEBUG] [Thread-20394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:20:12.175 [DEBUG] [Thread-20394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:20:12.175 [DEBUG] [Thread-20394] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:20:12.175 [DEBUG] [Thread-20394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:20:12.175 [DEBUG] [Thread-20394] [transport.py] [_log()] Compression: none
2026-04-15T14:20:12.175 [DEBUG] [Thread-20394] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:20:12.191 [DEBUG] [Thread-20394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:20:12.191 [DEBUG] [Thread-20394] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:20:12.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:20:12.192 [DEBUG] [Thread-20394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:20:12.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:20:12.193 [DEBUG] [Thread-20394] [transport.py] [_log()] userauth is OK
2026-04-15T14:20:12.193 [DEBUG] [Thread-20394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:20:12.193 [DEBUG] [Thread-20394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:20:12.194 [DEBUG] [Thread-20394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:20:12.194 [DEBUG] [Thread-20394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:20:12.217 [INFO] [Thread-20394] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:20:12.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:20:15.586 [DEBUG] [Thread-20394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:20:15.586 [DEBUG] [Thread-20394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:20:15.587 [DEBUG] [Thread-20394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:20:15.627 [DEBUG] [Thread-20394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:20:15.627 [DEBUG] [Thread-20394] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:20:15.630 [DEBUG] [Thread-20394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:20:15.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:20:15.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:20:15.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:20:15.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:20:15.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:20:15.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:20:15.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:20:15.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:20:15.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:20:15.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.513679 -999.00  +13.70  20.07     65   +7.20 1 2 1 1 1   888    0 6.73 8.64 ----- 18.5 20.1 324.6 26.6 19.6 -24.8 18.9 -25.5 19.1 -20.3 19.9 -22.9
2026-04-15T14:20:15.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:20:15.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:20:15.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.513679
2026-04-15T14:20:15.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:20:15.740 [DEBUG] [Thread-20394] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:20:15.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:20:15.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:20:15.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:20:15.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:20:15.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:19:39', tmtdew=8.73789, humidity=55.8082, cloud=0.0, wind=18.2434, temperature=14.9549, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:19:41.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:20:15.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:20:15.998 [DEBUG] [Thread-20397] [transport.py] [_log()] starting thread (client mode): 0xee902920
2026-04-15T14:20:15.998 [DEBUG] [Thread-20397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:20:16.013 [DEBUG] [Thread-20397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:20:16.013 [INFO] [Thread-20397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:20:16.020 [DEBUG] [Thread-20397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:20:16.020 [DEBUG] [Thread-20397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:20:16.020 [DEBUG] [Thread-20397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:20:16.020 [DEBUG] [Thread-20397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:20:16.021 [DEBUG] [Thread-20397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:20:16.021 [DEBUG] [Thread-20397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:20:16.021 [DEBUG] [Thread-20397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:20:16.021 [DEBUG] [Thread-20397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:20:16.021 [DEBUG] [Thread-20397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:20:16.021 [DEBUG] [Thread-20397] [transport.py] [_log()] client lang: <none>
2026-04-15T14:20:16.021 [DEBUG] [Thread-20397] [transport.py] [_log()] server lang: <none>
2026-04-15T14:20:16.021 [DEBUG] [Thread-20397] [transport.py] [_log()] kex follows: False
2026-04-15T14:20:16.021 [DEBUG] [Thread-20397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:20:16.021 [DEBUG] [Thread-20397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:20:16.021 [DEBUG] [Thread-20397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:20:16.021 [DEBUG] [Thread-20397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:20:16.022 [DEBUG] [Thread-20397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:20:16.022 [DEBUG] [Thread-20397] [transport.py] [_log()] Compression: none
2026-04-15T14:20:16.022 [DEBUG] [Thread-20397] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:20:16.078 [DEBUG] [Thread-20397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:20:16.079 [DEBUG] [Thread-20397] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:20:16.079 [DEBUG] [Thread-20397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:20:16.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:20:16.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:20:16.135 [DEBUG] [Thread-20397] [transport.py] [_log()] userauth is OK
2026-04-15T14:20:16.136 [DEBUG] [Thread-20397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:20:16.136 [DEBUG] [Thread-20397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:20:16.136 [DEBUG] [Thread-20397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:20:16.136 [DEBUG] [Thread-20397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:20:16.155 [INFO] [Thread-20397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:20:16.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:20:16.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:20:16.987 [DEBUG] [Thread-20397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:20:16.987 [DEBUG] [Thread-20397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:20:17.035 [DEBUG] [Thread-20397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:20:17.035 [DEBUG] [Thread-20397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:20:17.044 [DEBUG] [Thread-20397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:20:17.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:20: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')
2026-04-15T14:20: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') -> 00000000
2026-04-15T14:20:17.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:20:17.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:20:17.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:20:17.079 [DEBUG] [Thread-20397] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:20:24.174 [DEBUG] [Thread-20399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:20:26.502 [DEBUG] [Thread-20400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:20:39.219 [DEBUG] [Thread-20401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:20:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:20:47.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:20:47.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
2026-04-15T14:20:48.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 20, 15), 8.14792, 58.2715, 0.0, 13.0576, 14.2446, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:20:48.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:20:15
2026-04-15T14:20:48.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:20:49.186 [DEBUG] [Thread-20402] [transport.py] [_log()] starting thread (client mode): 0xf1335180
2026-04-15T14:20:49.186 [DEBUG] [Thread-20402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:20:49.205 [DEBUG] [Thread-20402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:20:49.205 [INFO] [Thread-20402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:20:49.208 [DEBUG] [Thread-20402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:20:49.208 [DEBUG] [Thread-20402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:20:49.208 [DEBUG] [Thread-20402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:20:49.208 [DEBUG] [Thread-20402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:20:49.208 [DEBUG] [Thread-20402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:20:49.209 [DEBUG] [Thread-20402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:20:49.209 [DEBUG] [Thread-20402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:20:49.209 [DEBUG] [Thread-20402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:20:49.209 [DEBUG] [Thread-20402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:20:49.209 [DEBUG] [Thread-20402] [transport.py] [_log()] client lang: <none>
2026-04-15T14:20:49.209 [DEBUG] [Thread-20402] [transport.py] [_log()] server lang: <none>
2026-04-15T14:20:49.209 [DEBUG] [Thread-20402] [transport.py] [_log()] kex follows: False
2026-04-15T14:20:49.209 [DEBUG] [Thread-20402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:20:49.209 [DEBUG] [Thread-20402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:20:49.209 [DEBUG] [Thread-20402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:20:49.209 [DEBUG] [Thread-20402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:20:49.209 [DEBUG] [Thread-20402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:20:49.209 [DEBUG] [Thread-20402] [transport.py] [_log()] Compression: none
2026-04-15T14:20:49.210 [DEBUG] [Thread-20402] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:20:49.220 [DEBUG] [Thread-20402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:20:49.221 [DEBUG] [Thread-20402] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:20:49.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:20:49.221 [DEBUG] [Thread-20402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:20:49.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:20:49.222 [DEBUG] [Thread-20402] [transport.py] [_log()] userauth is OK
2026-04-15T14:20:49.222 [DEBUG] [Thread-20402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:20:49.222 [DEBUG] [Thread-20402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:20:49.223 [DEBUG] [Thread-20402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:20:49.223 [DEBUG] [Thread-20402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:20:49.244 [INFO] [Thread-20402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:20:49.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:20:50.036 [DEBUG] [Thread-20402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:20:50.037 [DEBUG] [Thread-20402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:20:50.038 [DEBUG] [Thread-20402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:20:50.077 [DEBUG] [Thread-20402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:20:50.077 [DEBUG] [Thread-20402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:20:50.080 [DEBUG] [Thread-20402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:20:50.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:20:50.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:20:50.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:20:50.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:20:50.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:20:50.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:20:50.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:20:50.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:20:50.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:20:50.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.514026 -999.00  +14.00  18.30     65   +7.50 1 2 1 1 1   888    0 6.86 9.02 ----- 17.7 18.3 326.2 21.2 19.7 -24.5 18.9 -24.4 19.2 -21.4 20.0 -21.8
2026-04-15T14:20:50.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:20:50.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:20:50.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.514026
2026-04-15T14:20:50.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:20:50.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:20:50.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:20:50.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:20:50.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:20:50.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:20:15', tmtdew=8.14792, humidity=58.2715, cloud=0.0, wind=13.0576, temperature=14.2446, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:20:11.846', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:20:50.108 [DEBUG] [Thread-20402] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:20:50.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:20:50.325 [DEBUG] [Thread-20405] [transport.py] [_log()] starting thread (client mode): 0xf1334f40
2026-04-15T14:20:50.326 [DEBUG] [Thread-20405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:20:50.340 [DEBUG] [Thread-20405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:20:50.340 [INFO] [Thread-20405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:20:50.347 [DEBUG] [Thread-20405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:20:50.347 [DEBUG] [Thread-20405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:20:50.347 [DEBUG] [Thread-20405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:20:50.347 [DEBUG] [Thread-20405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:20:50.348 [DEBUG] [Thread-20405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:20:50.348 [DEBUG] [Thread-20405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:20:50.348 [DEBUG] [Thread-20405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:20:50.348 [DEBUG] [Thread-20405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:20:50.348 [DEBUG] [Thread-20405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:20:50.348 [DEBUG] [Thread-20405] [transport.py] [_log()] client lang: <none>
2026-04-15T14:20:50.348 [DEBUG] [Thread-20405] [transport.py] [_log()] server lang: <none>
2026-04-15T14:20:50.348 [DEBUG] [Thread-20405] [transport.py] [_log()] kex follows: False
2026-04-15T14:20:50.348 [DEBUG] [Thread-20405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:20:50.348 [DEBUG] [Thread-20405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:20:50.348 [DEBUG] [Thread-20405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:20:50.348 [DEBUG] [Thread-20405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:20:50.349 [DEBUG] [Thread-20405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:20:50.349 [DEBUG] [Thread-20405] [transport.py] [_log()] Compression: none
2026-04-15T14:20:50.349 [DEBUG] [Thread-20405] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:20:50.402 [DEBUG] [Thread-20405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:20:50.403 [DEBUG] [Thread-20405] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:20:50.403 [DEBUG] [Thread-20405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:20:50.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:20:50.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:20:50.464 [DEBUG] [Thread-20405] [transport.py] [_log()] userauth is OK
2026-04-15T14:20:50.464 [DEBUG] [Thread-20405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:20:50.464 [DEBUG] [Thread-20405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:20:50.464 [DEBUG] [Thread-20405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:20:50.464 [DEBUG] [Thread-20405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:20:50.490 [INFO] [Thread-20405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:20:50.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:20:50.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:20:51.308 [DEBUG] [Thread-20405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:20:51.309 [DEBUG] [Thread-20405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:20:51.356 [DEBUG] [Thread-20405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:20:51.356 [DEBUG] [Thread-20405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:20:51.365 [DEBUG] [Thread-20405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:20:51.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:20:51.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')
2026-04-15T14:20:51.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
2026-04-15T14:20:51.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:20:51.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:20:51.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:20:51.400 [DEBUG] [Thread-20405] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:20:54.251 [DEBUG] [Thread-20407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:21:02.358 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:21:02.359 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:21:09.293 [DEBUG] [Thread-20408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:21:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:21:21.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:21:21.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
2026-04-15T14:21:22.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 20, 50), 8.52622, 56.6035, 0.0, 16.4088, 14.8554, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:21:22.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:20:50
2026-04-15T14:21:23.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:21:23.511 [DEBUG] [Thread-20409] [transport.py] [_log()] starting thread (client mode): 0xf1334310
2026-04-15T14:21:23.512 [DEBUG] [Thread-20409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:21:23.532 [DEBUG] [Thread-20409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:21:23.532 [INFO] [Thread-20409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:21:23.535 [DEBUG] [Thread-20409] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:21:23.536 [DEBUG] [Thread-20409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:21:23.536 [DEBUG] [Thread-20409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:21:23.536 [DEBUG] [Thread-20409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:21:23.536 [DEBUG] [Thread-20409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:21:23.536 [DEBUG] [Thread-20409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:21:23.536 [DEBUG] [Thread-20409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:21:23.536 [DEBUG] [Thread-20409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:21:23.536 [DEBUG] [Thread-20409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:21:23.536 [DEBUG] [Thread-20409] [transport.py] [_log()] client lang: <none>
2026-04-15T14:21:23.536 [DEBUG] [Thread-20409] [transport.py] [_log()] server lang: <none>
2026-04-15T14:21:23.536 [DEBUG] [Thread-20409] [transport.py] [_log()] kex follows: False
2026-04-15T14:21:23.536 [DEBUG] [Thread-20409] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:21:23.537 [DEBUG] [Thread-20409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:21:23.537 [DEBUG] [Thread-20409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:21:23.537 [DEBUG] [Thread-20409] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:21:23.537 [DEBUG] [Thread-20409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:21:23.537 [DEBUG] [Thread-20409] [transport.py] [_log()] Compression: none
2026-04-15T14:21:23.537 [DEBUG] [Thread-20409] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:21:23.554 [DEBUG] [Thread-20409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:21:23.554 [DEBUG] [Thread-20409] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:21:23.554 [DEBUG] [Thread-20409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:21:23.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:21:23.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:21:23.556 [DEBUG] [Thread-20409] [transport.py] [_log()] userauth is OK
2026-04-15T14:21:23.556 [DEBUG] [Thread-20409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:21:23.556 [DEBUG] [Thread-20409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:21:23.556 [DEBUG] [Thread-20409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:21:23.556 [DEBUG] [Thread-20409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:21:23.576 [INFO] [Thread-20409] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:21:23.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:21:24.327 [DEBUG] [Thread-20411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:21:24.378 [DEBUG] [Thread-20409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:21:24.378 [DEBUG] [Thread-20409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:21:24.379 [DEBUG] [Thread-20409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:21:24.420 [DEBUG] [Thread-20409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:21:24.420 [DEBUG] [Thread-20409] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:21:24.422 [DEBUG] [Thread-20409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:21:24.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:21:24.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:21:24.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:21:24.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:21:24.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:21:24.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:21:24.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:21:24.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:21:24.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:21:24.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.514373 -999.00  +13.90  15.58     65   +7.60 1 1 1 1 1   888    0 6.84 8.49 ----- 14.9 15.6 330.2 21.0 19.7 -24.3 18.9 -24.7 19.2 -22.0 20.0 -22.9
2026-04-15T14:21:24.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:21:24.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:21:24.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.514373
2026-04-15T14:21:24.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:21:24.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:21:24.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:21:24.443 [DEBUG] [Thread-20409] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:21:24.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:21:24.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:21:24.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:20:50', tmtdew=8.52622, humidity=56.6035, cloud=0.0, wind=16.4088, temperature=14.8554, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:20:41.827', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:21:24.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:21:24.686 [DEBUG] [Thread-20413] [transport.py] [_log()] starting thread (client mode): 0xf13e3b80
2026-04-15T14:21:24.686 [DEBUG] [Thread-20413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:21:24.701 [DEBUG] [Thread-20413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:21:24.701 [INFO] [Thread-20413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:21:24.709 [DEBUG] [Thread-20413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:21:24.709 [DEBUG] [Thread-20413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:21:24.709 [DEBUG] [Thread-20413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:21:24.709 [DEBUG] [Thread-20413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:21:24.709 [DEBUG] [Thread-20413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:21:24.709 [DEBUG] [Thread-20413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:21:24.709 [DEBUG] [Thread-20413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:21:24.709 [DEBUG] [Thread-20413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:21:24.709 [DEBUG] [Thread-20413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:21:24.710 [DEBUG] [Thread-20413] [transport.py] [_log()] client lang: <none>
2026-04-15T14:21:24.710 [DEBUG] [Thread-20413] [transport.py] [_log()] server lang: <none>
2026-04-15T14:21:24.710 [DEBUG] [Thread-20413] [transport.py] [_log()] kex follows: False
2026-04-15T14:21:24.710 [DEBUG] [Thread-20413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:21:24.710 [DEBUG] [Thread-20413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:21:24.710 [DEBUG] [Thread-20413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:21:24.710 [DEBUG] [Thread-20413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:21:24.710 [DEBUG] [Thread-20413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:21:24.710 [DEBUG] [Thread-20413] [transport.py] [_log()] Compression: none
2026-04-15T14:21:24.710 [DEBUG] [Thread-20413] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:21:24.768 [DEBUG] [Thread-20413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:21:24.769 [DEBUG] [Thread-20413] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:21:24.769 [DEBUG] [Thread-20413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:21:24.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:21:24.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:21:24.823 [DEBUG] [Thread-20413] [transport.py] [_log()] userauth is OK
2026-04-15T14:21:24.824 [DEBUG] [Thread-20413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:21:24.824 [DEBUG] [Thread-20413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:21:24.824 [DEBUG] [Thread-20413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:21:24.824 [DEBUG] [Thread-20413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:21:24.848 [INFO] [Thread-20413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:21:24.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:21:24.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:21:25.753 [DEBUG] [Thread-20413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:21:25.754 [DEBUG] [Thread-20413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:21:25.801 [DEBUG] [Thread-20413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:21:25.801 [DEBUG] [Thread-20413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:21:25.810 [DEBUG] [Thread-20413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:21:25.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:21:25.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')
2026-04-15T14:21:25.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
2026-04-15T14:21:25.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:21:25.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:21:25.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:21:25.852 [DEBUG] [Thread-20413] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:21:26.596 [DEBUG] [Thread-20415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:21:39.357 [DEBUG] [Thread-20416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:21:54.402 [DEBUG] [Thread-20417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:21:55.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:21:55.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:21:55.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
2026-04-15T14:21:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 21, 26), 8.25177, 57.5337, 0.0, 13.9572, 14.3445, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:21:57.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:21:26
2026-04-15T14:21:57.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:21:57.987 [DEBUG] [Thread-20418] [transport.py] [_log()] starting thread (client mode): 0xee9027a0
2026-04-15T14:21:57.987 [DEBUG] [Thread-20418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:21:58.006 [DEBUG] [Thread-20418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:21:58.007 [INFO] [Thread-20418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:21:58.008 [DEBUG] [Thread-20418] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:21:58.008 [DEBUG] [Thread-20418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:21:58.008 [DEBUG] [Thread-20418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:21:58.008 [DEBUG] [Thread-20418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:21:58.008 [DEBUG] [Thread-20418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:21:58.008 [DEBUG] [Thread-20418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:21:58.008 [DEBUG] [Thread-20418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:21:58.009 [DEBUG] [Thread-20418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:21:58.009 [DEBUG] [Thread-20418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:21:58.009 [DEBUG] [Thread-20418] [transport.py] [_log()] client lang: <none>
2026-04-15T14:21:58.009 [DEBUG] [Thread-20418] [transport.py] [_log()] server lang: <none>
2026-04-15T14:21:58.009 [DEBUG] [Thread-20418] [transport.py] [_log()] kex follows: False
2026-04-15T14:21:58.009 [DEBUG] [Thread-20418] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:21:58.009 [DEBUG] [Thread-20418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:21:58.009 [DEBUG] [Thread-20418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:21:58.009 [DEBUG] [Thread-20418] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:21:58.009 [DEBUG] [Thread-20418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:21:58.010 [DEBUG] [Thread-20418] [transport.py] [_log()] Compression: none
2026-04-15T14:21:58.010 [DEBUG] [Thread-20418] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:21:58.027 [DEBUG] [Thread-20418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:21:58.027 [DEBUG] [Thread-20418] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:21:58.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:21:58.028 [DEBUG] [Thread-20418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:21:58.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:21:58.029 [DEBUG] [Thread-20418] [transport.py] [_log()] userauth is OK
2026-04-15T14:21:58.029 [DEBUG] [Thread-20418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:21:58.029 [DEBUG] [Thread-20418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:21:58.029 [DEBUG] [Thread-20418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:21:58.030 [DEBUG] [Thread-20418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:21:58.055 [INFO] [Thread-20418] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:21:58.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:21:58.845 [DEBUG] [Thread-20418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:21:58.845 [DEBUG] [Thread-20418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:21:58.845 [DEBUG] [Thread-20418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:21:58.886 [DEBUG] [Thread-20418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:21:58.886 [DEBUG] [Thread-20418] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:21:58.888 [DEBUG] [Thread-20418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:21:58.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:21:58.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:21:58.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:21:58.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:21:58.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:21:58.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:21:58.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:21:58.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:21:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:21:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.514720 -999.00  +14.20  19.59     63   +7.40 1 1 1 1 1   888    0 6.75 6.54 ----- 21.8 19.6 320.2 22.2 19.6 -24.6 18.9 -25.4 19.1 -22.5 20.0 -22.7
2026-04-15T14:21:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:21:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:21:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.514720
2026-04-15T14:21:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:21:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:21:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:21:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:21:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:21:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:21:26', tmtdew=8.25177, humidity=57.5337, cloud=0.0, wind=13.9572, temperature=14.3445, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:21:11.808', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:21:58.907 [DEBUG] [Thread-20418] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:21:59.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:21:59.119 [DEBUG] [Thread-20421] [transport.py] [_log()] starting thread (client mode): 0xf13e3d00
2026-04-15T14:21:59.119 [DEBUG] [Thread-20421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:21:59.134 [DEBUG] [Thread-20421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:21:59.134 [INFO] [Thread-20421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:21:59.141 [DEBUG] [Thread-20421] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:21:59.141 [DEBUG] [Thread-20421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:21:59.141 [DEBUG] [Thread-20421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:21:59.141 [DEBUG] [Thread-20421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:21:59.141 [DEBUG] [Thread-20421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:21:59.142 [DEBUG] [Thread-20421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:21:59.142 [DEBUG] [Thread-20421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:21:59.142 [DEBUG] [Thread-20421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:21:59.142 [DEBUG] [Thread-20421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:21:59.142 [DEBUG] [Thread-20421] [transport.py] [_log()] client lang: <none>
2026-04-15T14:21:59.142 [DEBUG] [Thread-20421] [transport.py] [_log()] server lang: <none>
2026-04-15T14:21:59.142 [DEBUG] [Thread-20421] [transport.py] [_log()] kex follows: False
2026-04-15T14:21:59.142 [DEBUG] [Thread-20421] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:21:59.142 [DEBUG] [Thread-20421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:21:59.142 [DEBUG] [Thread-20421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:21:59.142 [DEBUG] [Thread-20421] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:21:59.142 [DEBUG] [Thread-20421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:21:59.142 [DEBUG] [Thread-20421] [transport.py] [_log()] Compression: none
2026-04-15T14:21:59.142 [DEBUG] [Thread-20421] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:21:59.198 [DEBUG] [Thread-20421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:21:59.198 [DEBUG] [Thread-20421] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:21:59.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:21:59.199 [DEBUG] [Thread-20421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:21:59.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:21:59.255 [DEBUG] [Thread-20421] [transport.py] [_log()] userauth is OK
2026-04-15T14:21:59.255 [DEBUG] [Thread-20421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:21:59.255 [DEBUG] [Thread-20421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:21:59.256 [DEBUG] [Thread-20421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:21:59.256 [DEBUG] [Thread-20421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:21:59.272 [INFO] [Thread-20421] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:21:59.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:21:59.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:22:00.090 [DEBUG] [Thread-20421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:22:00.090 [DEBUG] [Thread-20421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:22:00.138 [DEBUG] [Thread-20421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:22:00.138 [DEBUG] [Thread-20421] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:22:00.147 [DEBUG] [Thread-20421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:22:00.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:22:00.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')
2026-04-15T14:22:00.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
2026-04-15T14:22:00.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:22:00.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:22:00.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:22:00.186 [DEBUG] [Thread-20421] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:22:02.500 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:22:02.501 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:22:09.431 [DEBUG] [Thread-20423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:22:24.472 [DEBUG] [Thread-20424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:22:26.674 [DEBUG] [Thread-20425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:22:30.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:22:30.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:22:30.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
2026-04-15T14:22:31.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 22, 1), 8.24755, 57.6, 0.0, 13.4104, 14.5434, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:22:31.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:22:01
2026-04-15T14:22:31.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:22:32.356 [DEBUG] [Thread-20426] [transport.py] [_log()] starting thread (client mode): 0xf13eee00
2026-04-15T14:22:32.356 [DEBUG] [Thread-20426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:22:32.376 [DEBUG] [Thread-20426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:22:32.376 [INFO] [Thread-20426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:22:32.377 [DEBUG] [Thread-20426] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:22:32.378 [DEBUG] [Thread-20426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:22:32.378 [DEBUG] [Thread-20426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:22:32.378 [DEBUG] [Thread-20426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:22:32.378 [DEBUG] [Thread-20426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:22:32.378 [DEBUG] [Thread-20426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:22:32.378 [DEBUG] [Thread-20426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:22:32.378 [DEBUG] [Thread-20426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:22:32.378 [DEBUG] [Thread-20426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:22:32.378 [DEBUG] [Thread-20426] [transport.py] [_log()] client lang: <none>
2026-04-15T14:22:32.378 [DEBUG] [Thread-20426] [transport.py] [_log()] server lang: <none>
2026-04-15T14:22:32.378 [DEBUG] [Thread-20426] [transport.py] [_log()] kex follows: False
2026-04-15T14:22:32.378 [DEBUG] [Thread-20426] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:22:32.379 [DEBUG] [Thread-20426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:22:32.379 [DEBUG] [Thread-20426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:22:32.379 [DEBUG] [Thread-20426] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:22:32.379 [DEBUG] [Thread-20426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:22:32.379 [DEBUG] [Thread-20426] [transport.py] [_log()] Compression: none
2026-04-15T14:22:32.379 [DEBUG] [Thread-20426] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:22:32.387 [DEBUG] [Thread-20426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:22:32.387 [DEBUG] [Thread-20426] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:22:32.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:22:32.388 [DEBUG] [Thread-20426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:22:32.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:22:32.389 [DEBUG] [Thread-20426] [transport.py] [_log()] userauth is OK
2026-04-15T14:22:32.389 [DEBUG] [Thread-20426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:22:32.389 [DEBUG] [Thread-20426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:22:32.389 [DEBUG] [Thread-20426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:22:32.389 [DEBUG] [Thread-20426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:22:32.412 [INFO] [Thread-20426] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:22:32.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:22:33.202 [DEBUG] [Thread-20426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:22:33.202 [DEBUG] [Thread-20426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:22:33.203 [DEBUG] [Thread-20426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:22:33.243 [DEBUG] [Thread-20426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:22:33.243 [DEBUG] [Thread-20426] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:22:33.246 [DEBUG] [Thread-20426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:22:33.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:22:33.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:22:33.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:22:33.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:22:33.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:22:33.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:22:33.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:22:33.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:22:33.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:22:33.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.515068 -999.00  +13.60  20.69     63   +6.80 1 1 1 1 1   888    0 6.93 6.39 ----- 16.2 20.7 317.8 24.0 19.6 -24.2 18.9 -25.2 19.1 -22.2 20.0 -21.4
2026-04-15T14:22:33.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:22:33.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:22:33.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.515068
2026-04-15T14:22:33.265 [DEBUG] [Thread-20426] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:22:33.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:22:33.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:22:33.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:22:33.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:22:33.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:22:33.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:22:01', tmtdew=8.24755, humidity=57.6, cloud=0.0, wind=13.4104, temperature=14.5434, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:21:41.875', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:22:33.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:22:33.520 [DEBUG] [Thread-20429] [transport.py] [_log()] starting thread (client mode): 0xee988430
2026-04-15T14:22:33.520 [DEBUG] [Thread-20429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:22:33.534 [DEBUG] [Thread-20429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:22:33.534 [INFO] [Thread-20429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:22:33.542 [DEBUG] [Thread-20429] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:22:33.542 [DEBUG] [Thread-20429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:22:33.542 [DEBUG] [Thread-20429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:22:33.542 [DEBUG] [Thread-20429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:22:33.542 [DEBUG] [Thread-20429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:22:33.542 [DEBUG] [Thread-20429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:22:33.542 [DEBUG] [Thread-20429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:22:33.542 [DEBUG] [Thread-20429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:22:33.542 [DEBUG] [Thread-20429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:22:33.543 [DEBUG] [Thread-20429] [transport.py] [_log()] client lang: <none>
2026-04-15T14:22:33.543 [DEBUG] [Thread-20429] [transport.py] [_log()] server lang: <none>
2026-04-15T14:22:33.543 [DEBUG] [Thread-20429] [transport.py] [_log()] kex follows: False
2026-04-15T14:22:33.543 [DEBUG] [Thread-20429] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:22:33.543 [DEBUG] [Thread-20429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:22:33.543 [DEBUG] [Thread-20429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:22:33.543 [DEBUG] [Thread-20429] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:22:33.543 [DEBUG] [Thread-20429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:22:33.543 [DEBUG] [Thread-20429] [transport.py] [_log()] Compression: none
2026-04-15T14:22:33.543 [DEBUG] [Thread-20429] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:22:33.601 [DEBUG] [Thread-20429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:22:33.602 [DEBUG] [Thread-20429] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:22:33.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:22:33.602 [DEBUG] [Thread-20429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:22:33.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:22:33.670 [DEBUG] [Thread-20429] [transport.py] [_log()] userauth is OK
2026-04-15T14:22:33.670 [DEBUG] [Thread-20429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:22:33.670 [DEBUG] [Thread-20429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:22:33.670 [DEBUG] [Thread-20429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:22:33.670 [DEBUG] [Thread-20429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:22:33.700 [INFO] [Thread-20429] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:22:33.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:22:33.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:22:34.546 [DEBUG] [Thread-20429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:22:34.546 [DEBUG] [Thread-20429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:22:34.594 [DEBUG] [Thread-20429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:22:34.594 [DEBUG] [Thread-20429] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:22:34.603 [DEBUG] [Thread-20429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:22:34.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:22:34.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')
2026-04-15T14:22:34.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
2026-04-15T14:22:34.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:22:34.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:22:34.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:22:34.636 [DEBUG] [Thread-20429] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:22:39.502 [DEBUG] [Thread-20431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:22:54.546 [DEBUG] [Thread-20432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:23:02.642 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:23:02.643 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:23:04.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:23:04.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:23:04.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
2026-04-15T14:23:05.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 22, 37), 8.68651, 56.04, 0.0, 22.477, 15.0872, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:23:05.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:22:37
2026-04-15T14:23:06.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:23:06.707 [DEBUG] [Thread-20433] [transport.py] [_log()] starting thread (client mode): 0xee9005b0
2026-04-15T14:23:06.707 [DEBUG] [Thread-20433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:23:06.728 [DEBUG] [Thread-20433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:23:06.728 [INFO] [Thread-20433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:23:06.731 [DEBUG] [Thread-20433] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:23:06.731 [DEBUG] [Thread-20433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:23:06.731 [DEBUG] [Thread-20433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:23:06.731 [DEBUG] [Thread-20433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:23:06.731 [DEBUG] [Thread-20433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:23:06.731 [DEBUG] [Thread-20433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:23:06.732 [DEBUG] [Thread-20433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:23:06.732 [DEBUG] [Thread-20433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:23:06.732 [DEBUG] [Thread-20433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:23:06.732 [DEBUG] [Thread-20433] [transport.py] [_log()] client lang: <none>
2026-04-15T14:23:06.732 [DEBUG] [Thread-20433] [transport.py] [_log()] server lang: <none>
2026-04-15T14:23:06.732 [DEBUG] [Thread-20433] [transport.py] [_log()] kex follows: False
2026-04-15T14:23:06.732 [DEBUG] [Thread-20433] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:23:06.732 [DEBUG] [Thread-20433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:23:06.732 [DEBUG] [Thread-20433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:23:06.732 [DEBUG] [Thread-20433] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:23:06.732 [DEBUG] [Thread-20433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:23:06.732 [DEBUG] [Thread-20433] [transport.py] [_log()] Compression: none
2026-04-15T14:23:06.732 [DEBUG] [Thread-20433] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:23:06.750 [DEBUG] [Thread-20433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:23:06.751 [DEBUG] [Thread-20433] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:23:06.751 [DEBUG] [Thread-20433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:23:06.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:23:06.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:23:06.753 [DEBUG] [Thread-20433] [transport.py] [_log()] userauth is OK
2026-04-15T14:23:06.753 [DEBUG] [Thread-20433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:23:06.753 [DEBUG] [Thread-20433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:23:06.753 [DEBUG] [Thread-20433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:23:06.753 [DEBUG] [Thread-20433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:23:06.787 [INFO] [Thread-20433] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:23:06.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:23:07.533 [DEBUG] [Thread-20433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:23:07.534 [DEBUG] [Thread-20433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:23:07.534 [DEBUG] [Thread-20433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:23:07.574 [DEBUG] [Thread-20433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:23:07.574 [DEBUG] [Thread-20433] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:23:07.577 [DEBUG] [Thread-20433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:23:07.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:23:07.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:23:07.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:23:07.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:23:07.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:23:07.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:23:07.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:23:07.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:23:07.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:23:07.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.515415 -999.00  +13.80  22.93     65   +7.40 1 1 1 1 1   888    0 6.65 5.47 ----- 23.9 22.9 307.4 27.1 19.7 -24.2 18.9 -25.2 19.1 -21.5 20.1 -22.2
2026-04-15T14:23:07.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:23:07.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:23:07.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.515415
2026-04-15T14:23:07.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:23:07.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:23:07.600 [DEBUG] [Thread-20433] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:23:07.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:23:07.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:23:07.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:23:07.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:22:37', tmtdew=8.68651, humidity=56.04, cloud=0.0, wind=22.477, temperature=15.0872, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:22:11.856', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:23:07.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:23:07.863 [DEBUG] [Thread-20436] [transport.py] [_log()] starting thread (client mode): 0xf13ecb50
2026-04-15T14:23:07.863 [DEBUG] [Thread-20436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:23:07.878 [DEBUG] [Thread-20436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:23:07.878 [INFO] [Thread-20436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] client lang: <none>
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] server lang: <none>
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] kex follows: False
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:23:07.886 [DEBUG] [Thread-20436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:23:07.887 [DEBUG] [Thread-20436] [transport.py] [_log()] Compression: none
2026-04-15T14:23:07.887 [DEBUG] [Thread-20436] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:23:07.946 [DEBUG] [Thread-20436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:23:07.947 [DEBUG] [Thread-20436] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:23:07.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:23:07.947 [DEBUG] [Thread-20436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:23:07.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:23:08.005 [DEBUG] [Thread-20436] [transport.py] [_log()] userauth is OK
2026-04-15T14:23:08.005 [DEBUG] [Thread-20436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:23:08.005 [DEBUG] [Thread-20436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:23:08.005 [DEBUG] [Thread-20436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:23:08.005 [DEBUG] [Thread-20436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:23:08.030 [INFO] [Thread-20436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:23:08.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:23:08.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:23:08.905 [DEBUG] [Thread-20436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:23:08.906 [DEBUG] [Thread-20436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:23:08.955 [DEBUG] [Thread-20436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:23:08.955 [DEBUG] [Thread-20436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:23:08.966 [DEBUG] [Thread-20436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:23:08.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:23:08.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')
2026-04-15T14:23:08.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
2026-04-15T14:23:09.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:23:09.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:23:09.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:23:09.010 [DEBUG] [Thread-20436] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:23:09.577 [DEBUG] [Thread-20438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:23:24.622 [DEBUG] [Thread-20439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:23:26.750 [DEBUG] [Thread-20440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:23:39.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:23:39.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:23:39.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
2026-04-15T14:23:39.653 [DEBUG] [Thread-20441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:23:40.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 23, 12), 8.40481, 56.6749, 0.0, 18.792, 13.9945, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:23:40.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:23:12
2026-04-15T14:23:40.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:23:41.201 [DEBUG] [Thread-20442] [transport.py] [_log()] starting thread (client mode): 0xf13efcd0
2026-04-15T14:23:41.201 [DEBUG] [Thread-20442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:23:41.214 [DEBUG] [Thread-20442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:23:41.214 [INFO] [Thread-20442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:23:41.215 [DEBUG] [Thread-20442] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:23:41.215 [DEBUG] [Thread-20442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:23:41.215 [DEBUG] [Thread-20442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:23:41.215 [DEBUG] [Thread-20442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:23:41.215 [DEBUG] [Thread-20442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:23:41.216 [DEBUG] [Thread-20442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:23:41.216 [DEBUG] [Thread-20442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:23:41.216 [DEBUG] [Thread-20442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:23:41.216 [DEBUG] [Thread-20442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:23:41.216 [DEBUG] [Thread-20442] [transport.py] [_log()] client lang: <none>
2026-04-15T14:23:41.216 [DEBUG] [Thread-20442] [transport.py] [_log()] server lang: <none>
2026-04-15T14:23:41.216 [DEBUG] [Thread-20442] [transport.py] [_log()] kex follows: False
2026-04-15T14:23:41.216 [DEBUG] [Thread-20442] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:23:41.216 [DEBUG] [Thread-20442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:23:41.216 [DEBUG] [Thread-20442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:23:41.216 [DEBUG] [Thread-20442] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:23:41.216 [DEBUG] [Thread-20442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:23:41.217 [DEBUG] [Thread-20442] [transport.py] [_log()] Compression: none
2026-04-15T14:23:41.217 [DEBUG] [Thread-20442] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:23:41.227 [DEBUG] [Thread-20442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:23:41.227 [DEBUG] [Thread-20442] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:23:41.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:23:41.228 [DEBUG] [Thread-20442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:23:41.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:23:41.229 [DEBUG] [Thread-20442] [transport.py] [_log()] userauth is OK
2026-04-15T14:23:41.229 [DEBUG] [Thread-20442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:23:41.229 [DEBUG] [Thread-20442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:23:41.229 [DEBUG] [Thread-20442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:23:41.229 [DEBUG] [Thread-20442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:23:41.244 [INFO] [Thread-20442] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:23:41.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:23:41.860 [DEBUG] [Thread-20442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:23:41.861 [DEBUG] [Thread-20442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:23:41.861 [DEBUG] [Thread-20442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:23:41.901 [DEBUG] [Thread-20442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:23:41.901 [DEBUG] [Thread-20442] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:23:41.904 [DEBUG] [Thread-20442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:23:41.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:23:41.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:23:41.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:23:41.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:23:41.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:23:41.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:23:41.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:23:41.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:23:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:23:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.516109 -999.00  +13.90  13.10     63   +7.00 1 2 1 1 1   888    0 6.95 7.54 ----- 29.9 13.1 342.5 22.6 19.8 -24.7 18.9 -23.8 19.2 -21.6 20.1 -21.2
2026-04-15T14:23:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:23:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:23:41.925 [DEBUG] [Thread-20442] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:23:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.516109
2026-04-15T14:23:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:23:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:23:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:23:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:23:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:23:41.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:23:12', tmtdew=8.40481, humidity=56.6749, cloud=0.0, wind=18.792, temperature=13.9945, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:23:11.818', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:23:42.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:23:42.183 [DEBUG] [Thread-20445] [transport.py] [_log()] starting thread (client mode): 0xee903cd0
2026-04-15T14:23:42.183 [DEBUG] [Thread-20445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:23:42.198 [DEBUG] [Thread-20445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:23:42.198 [INFO] [Thread-20445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:23:42.205 [DEBUG] [Thread-20445] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:23:42.206 [DEBUG] [Thread-20445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:23:42.206 [DEBUG] [Thread-20445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:23:42.206 [DEBUG] [Thread-20445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:23:42.206 [DEBUG] [Thread-20445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:23:42.206 [DEBUG] [Thread-20445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:23:42.206 [DEBUG] [Thread-20445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:23:42.206 [DEBUG] [Thread-20445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:23:42.206 [DEBUG] [Thread-20445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:23:42.206 [DEBUG] [Thread-20445] [transport.py] [_log()] client lang: <none>
2026-04-15T14:23:42.206 [DEBUG] [Thread-20445] [transport.py] [_log()] server lang: <none>
2026-04-15T14:23:42.206 [DEBUG] [Thread-20445] [transport.py] [_log()] kex follows: False
2026-04-15T14:23:42.207 [DEBUG] [Thread-20445] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:23:42.207 [DEBUG] [Thread-20445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:23:42.207 [DEBUG] [Thread-20445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:23:42.207 [DEBUG] [Thread-20445] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:23:42.207 [DEBUG] [Thread-20445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:23:42.207 [DEBUG] [Thread-20445] [transport.py] [_log()] Compression: none
2026-04-15T14:23:42.207 [DEBUG] [Thread-20445] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:23:42.262 [DEBUG] [Thread-20445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:23:42.263 [DEBUG] [Thread-20445] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:23:42.263 [DEBUG] [Thread-20445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:23:42.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:23:42.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:23:42.319 [DEBUG] [Thread-20445] [transport.py] [_log()] userauth is OK
2026-04-15T14:23:42.320 [DEBUG] [Thread-20445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:23:42.320 [DEBUG] [Thread-20445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:23:42.320 [DEBUG] [Thread-20445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:23:42.320 [DEBUG] [Thread-20445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:23:42.345 [INFO] [Thread-20445] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:23:42.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:23:42.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:23:43.171 [DEBUG] [Thread-20445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:23:43.171 [DEBUG] [Thread-20445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:23:43.219 [DEBUG] [Thread-20445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:23:43.219 [DEBUG] [Thread-20445] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:23:43.228 [DEBUG] [Thread-20445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:23:43.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:23:43.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')
2026-04-15T14:23:43.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
2026-04-15T14:23:43.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:23:43.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:23:43.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:23:43.264 [DEBUG] [Thread-20445] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:23:54.685 [DEBUG] [Thread-20447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:24:02.783 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:24:02.784 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:24:09.728 [DEBUG] [Thread-20448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:24:13.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:24:13.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:24:13.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
2026-04-15T14:24:14.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 23, 48), 8.62185, 56.1725, 0.0, 22.6886, 14.6232, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:24:14.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:23:48
2026-04-15T14:24:14.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:24:15.408 [DEBUG] [Thread-20449] [transport.py] [_log()] starting thread (client mode): 0xee9aea10
2026-04-15T14:24:15.409 [DEBUG] [Thread-20449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:24:15.428 [DEBUG] [Thread-20449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:24:15.428 [INFO] [Thread-20449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:24:15.431 [DEBUG] [Thread-20449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:24:15.431 [DEBUG] [Thread-20449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:24:15.431 [DEBUG] [Thread-20449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:24:15.431 [DEBUG] [Thread-20449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:24:15.431 [DEBUG] [Thread-20449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:24:15.432 [DEBUG] [Thread-20449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:24:15.432 [DEBUG] [Thread-20449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:24:15.432 [DEBUG] [Thread-20449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:24:15.432 [DEBUG] [Thread-20449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:24:15.432 [DEBUG] [Thread-20449] [transport.py] [_log()] client lang: <none>
2026-04-15T14:24:15.432 [DEBUG] [Thread-20449] [transport.py] [_log()] server lang: <none>
2026-04-15T14:24:15.432 [DEBUG] [Thread-20449] [transport.py] [_log()] kex follows: False
2026-04-15T14:24:15.432 [DEBUG] [Thread-20449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:24:15.432 [DEBUG] [Thread-20449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:24:15.432 [DEBUG] [Thread-20449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:24:15.432 [DEBUG] [Thread-20449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:24:15.432 [DEBUG] [Thread-20449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:24:15.433 [DEBUG] [Thread-20449] [transport.py] [_log()] Compression: none
2026-04-15T14:24:15.433 [DEBUG] [Thread-20449] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:24:15.450 [DEBUG] [Thread-20449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:24:15.450 [DEBUG] [Thread-20449] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:24:15.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:24:15.451 [DEBUG] [Thread-20449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:24:15.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:24:15.452 [DEBUG] [Thread-20449] [transport.py] [_log()] userauth is OK
2026-04-15T14:24:15.452 [DEBUG] [Thread-20449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:24:15.452 [DEBUG] [Thread-20449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:24:15.452 [DEBUG] [Thread-20449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:24:15.452 [DEBUG] [Thread-20449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:24:15.470 [INFO] [Thread-20449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:24:15.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:24:16.080 [DEBUG] [Thread-20449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:24:16.081 [DEBUG] [Thread-20449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:24:16.081 [DEBUG] [Thread-20449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:24:16.122 [DEBUG] [Thread-20449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:24:16.122 [DEBUG] [Thread-20449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:24:16.125 [DEBUG] [Thread-20449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:24:16.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:24:16.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:24:16.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:24:16.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:24:16.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:24:16.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:24:16.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:24:16.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:24:16.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:24:16.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.516804 -999.00  +13.80  22.21     63   +7.00 1 2 1 1 1   888    0 6.92 7.08 ----- 21.5 22.2 328.6 27.1 19.8 -25.6 18.9 -23.8 19.2 -22.0 20.2 -24.1
2026-04-15T14:24:16.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:24:16.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:24:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.516804
2026-04-15T14:24:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:24:16.146 [DEBUG] [Thread-20449] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:24:16.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:24:16.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:24:16.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:24:16.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:24:16.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:23:48', tmtdew=8.62185, humidity=56.1725, cloud=0.0, wind=22.6886, temperature=14.6232, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:24:11.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:24:16.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:24:16.398 [DEBUG] [Thread-20452] [transport.py] [_log()] starting thread (client mode): 0xf13efe20
2026-04-15T14:24:16.398 [DEBUG] [Thread-20452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:24:16.413 [DEBUG] [Thread-20452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:24:16.413 [INFO] [Thread-20452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:24:16.421 [DEBUG] [Thread-20452] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:24:16.421 [DEBUG] [Thread-20452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:24:16.421 [DEBUG] [Thread-20452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:24:16.421 [DEBUG] [Thread-20452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:24:16.421 [DEBUG] [Thread-20452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:24:16.421 [DEBUG] [Thread-20452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:24:16.421 [DEBUG] [Thread-20452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:24:16.421 [DEBUG] [Thread-20452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:24:16.421 [DEBUG] [Thread-20452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:24:16.421 [DEBUG] [Thread-20452] [transport.py] [_log()] client lang: <none>
2026-04-15T14:24:16.421 [DEBUG] [Thread-20452] [transport.py] [_log()] server lang: <none>
2026-04-15T14:24:16.422 [DEBUG] [Thread-20452] [transport.py] [_log()] kex follows: False
2026-04-15T14:24:16.422 [DEBUG] [Thread-20452] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:24:16.422 [DEBUG] [Thread-20452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:24:16.422 [DEBUG] [Thread-20452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:24:16.422 [DEBUG] [Thread-20452] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:24:16.422 [DEBUG] [Thread-20452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:24:16.422 [DEBUG] [Thread-20452] [transport.py] [_log()] Compression: none
2026-04-15T14:24:16.422 [DEBUG] [Thread-20452] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:24:16.479 [DEBUG] [Thread-20452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:24:16.480 [DEBUG] [Thread-20452] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:24:16.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:24:16.481 [DEBUG] [Thread-20452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:24:16.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:24:16.536 [DEBUG] [Thread-20452] [transport.py] [_log()] userauth is OK
2026-04-15T14:24:16.536 [DEBUG] [Thread-20452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:24:16.536 [DEBUG] [Thread-20452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:24:16.537 [DEBUG] [Thread-20452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:24:16.537 [DEBUG] [Thread-20452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:24:16.569 [INFO] [Thread-20452] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:24:16.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:24:16.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:24:17.383 [DEBUG] [Thread-20452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:24:17.383 [DEBUG] [Thread-20452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:24:17.431 [DEBUG] [Thread-20452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:24:17.431 [DEBUG] [Thread-20452] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:24:17.440 [DEBUG] [Thread-20452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:24:17.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:24:17.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T14:24:17.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T14:24:17.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:24:17.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:24:17.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:24:17.474 [DEBUG] [Thread-20452] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:24:24.759 [DEBUG] [Thread-20454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:24:26.838 [DEBUG] [Thread-20455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:24:39.803 [DEBUG] [Thread-20456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:24:47.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:24:47.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:24:47.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
2026-04-15T14:24:48.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 24, 24), 8.3791, 57.02, 0.0, 22.9036, 14.2282, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:24:48.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:24:24
2026-04-15T14:24:49.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:24:49.608 [DEBUG] [Thread-20457] [transport.py] [_log()] starting thread (client mode): 0xee9892a0
2026-04-15T14:24:49.608 [DEBUG] [Thread-20457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:24:49.628 [DEBUG] [Thread-20457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:24:49.628 [INFO] [Thread-20457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:24:49.630 [DEBUG] [Thread-20457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:24:49.630 [DEBUG] [Thread-20457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:24:49.631 [DEBUG] [Thread-20457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:24:49.631 [DEBUG] [Thread-20457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:24:49.631 [DEBUG] [Thread-20457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:24:49.631 [DEBUG] [Thread-20457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:24:49.631 [DEBUG] [Thread-20457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:24:49.631 [DEBUG] [Thread-20457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:24:49.631 [DEBUG] [Thread-20457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:24:49.631 [DEBUG] [Thread-20457] [transport.py] [_log()] client lang: <none>
2026-04-15T14:24:49.631 [DEBUG] [Thread-20457] [transport.py] [_log()] server lang: <none>
2026-04-15T14:24:49.631 [DEBUG] [Thread-20457] [transport.py] [_log()] kex follows: False
2026-04-15T14:24:49.631 [DEBUG] [Thread-20457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:24:49.632 [DEBUG] [Thread-20457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:24:49.632 [DEBUG] [Thread-20457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:24:49.632 [DEBUG] [Thread-20457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:24:49.632 [DEBUG] [Thread-20457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:24:49.632 [DEBUG] [Thread-20457] [transport.py] [_log()] Compression: none
2026-04-15T14:24:49.632 [DEBUG] [Thread-20457] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:24:49.645 [DEBUG] [Thread-20457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:24:49.645 [DEBUG] [Thread-20457] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:24:49.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:24:49.646 [DEBUG] [Thread-20457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:24:49.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:24:49.647 [DEBUG] [Thread-20457] [transport.py] [_log()] userauth is OK
2026-04-15T14:24:49.647 [DEBUG] [Thread-20457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:24:49.647 [DEBUG] [Thread-20457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:24:49.647 [DEBUG] [Thread-20457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:24:49.647 [DEBUG] [Thread-20457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:24:49.663 [INFO] [Thread-20457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:24:49.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:24:50.259 [DEBUG] [Thread-20457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:24:50.259 [DEBUG] [Thread-20457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:24:50.260 [DEBUG] [Thread-20457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:24:50.300 [DEBUG] [Thread-20457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:24:50.300 [DEBUG] [Thread-20457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:24:50.303 [DEBUG] [Thread-20457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:24:50.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:24:50.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:24:50.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:24:50.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:24:50.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:24:50.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:24:50.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:24:50.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:24:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:24:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.517151 -999.00  +13.80  25.28     62   +6.80 1 1 1 1 1   888    0 6.63 6.94 ----- 23.9 25.3 312.2 27.5 19.8 -24.6 18.8 -25.0 19.1 -23.1 20.2 -22.6
2026-04-15T14:24:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:24:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:24:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.517151
2026-04-15T14:24:50.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:24:50.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:24:50.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:24:50.323 [DEBUG] [Thread-20457] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:24:50.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:24:50.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:24:50.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:24:24', tmtdew=8.3791, humidity=57.02, cloud=0.0, wind=22.9036, temperature=14.2282, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:24:41.846', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:24:50.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:24:50.596 [DEBUG] [Thread-20460] [transport.py] [_log()] starting thread (client mode): 0xf1334880
2026-04-15T14:24:50.596 [DEBUG] [Thread-20460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:24:50.610 [DEBUG] [Thread-20460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:24:50.610 [INFO] [Thread-20460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:24:50.617 [DEBUG] [Thread-20460] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:24:50.617 [DEBUG] [Thread-20460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:24:50.617 [DEBUG] [Thread-20460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:24:50.617 [DEBUG] [Thread-20460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:24:50.618 [DEBUG] [Thread-20460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:24:50.618 [DEBUG] [Thread-20460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:24:50.618 [DEBUG] [Thread-20460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:24:50.618 [DEBUG] [Thread-20460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:24:50.618 [DEBUG] [Thread-20460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:24:50.618 [DEBUG] [Thread-20460] [transport.py] [_log()] client lang: <none>
2026-04-15T14:24:50.618 [DEBUG] [Thread-20460] [transport.py] [_log()] server lang: <none>
2026-04-15T14:24:50.618 [DEBUG] [Thread-20460] [transport.py] [_log()] kex follows: False
2026-04-15T14:24:50.618 [DEBUG] [Thread-20460] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:24:50.618 [DEBUG] [Thread-20460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:24:50.618 [DEBUG] [Thread-20460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:24:50.618 [DEBUG] [Thread-20460] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:24:50.619 [DEBUG] [Thread-20460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:24:50.619 [DEBUG] [Thread-20460] [transport.py] [_log()] Compression: none
2026-04-15T14:24:50.619 [DEBUG] [Thread-20460] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:24:50.675 [DEBUG] [Thread-20460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:24:50.675 [DEBUG] [Thread-20460] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:24:50.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:24:50.676 [DEBUG] [Thread-20460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:24:50.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:24:50.731 [DEBUG] [Thread-20460] [transport.py] [_log()] userauth is OK
2026-04-15T14:24:50.731 [DEBUG] [Thread-20460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:24:50.732 [DEBUG] [Thread-20460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:24:50.732 [DEBUG] [Thread-20460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:24:50.732 [DEBUG] [Thread-20460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:24:50.751 [INFO] [Thread-20460] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:24:50.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:24:50.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:24:51.571 [DEBUG] [Thread-20460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:24:51.572 [DEBUG] [Thread-20460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:24:51.619 [DEBUG] [Thread-20460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:24:51.620 [DEBUG] [Thread-20460] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:24:51.629 [DEBUG] [Thread-20460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:24:51.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:24:51.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')
2026-04-15T14:24:51.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
2026-04-15T14:24:51.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:24:51.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:24:51.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:24:51.663 [DEBUG] [Thread-20460] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:24:54.835 [DEBUG] [Thread-20462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:25:02.923 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:25:02.924 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:25:09.877 [DEBUG] [Thread-20463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:25:21.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:25:21.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:25:21.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
2026-04-15T14:25:22.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 24, 59), 8.59816, 56.1388, 0.0, 22.4442, 14.3764, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:25:22.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:24:59
2026-04-15T14:25:23.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:25:23.765 [DEBUG] [Thread-20464] [transport.py] [_log()] starting thread (client mode): 0xf1335c60
2026-04-15T14:25:23.765 [DEBUG] [Thread-20464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:25:23.784 [DEBUG] [Thread-20464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:25:23.784 [INFO] [Thread-20464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:25:23.788 [DEBUG] [Thread-20464] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:25:23.788 [DEBUG] [Thread-20464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:25:23.788 [DEBUG] [Thread-20464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:25:23.788 [DEBUG] [Thread-20464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:25:23.788 [DEBUG] [Thread-20464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:25:23.788 [DEBUG] [Thread-20464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:25:23.788 [DEBUG] [Thread-20464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:25:23.789 [DEBUG] [Thread-20464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:25:23.789 [DEBUG] [Thread-20464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:25:23.789 [DEBUG] [Thread-20464] [transport.py] [_log()] client lang: <none>
2026-04-15T14:25:23.789 [DEBUG] [Thread-20464] [transport.py] [_log()] server lang: <none>
2026-04-15T14:25:23.789 [DEBUG] [Thread-20464] [transport.py] [_log()] kex follows: False
2026-04-15T14:25:23.789 [DEBUG] [Thread-20464] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:25:23.789 [DEBUG] [Thread-20464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:25:23.789 [DEBUG] [Thread-20464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:25:23.789 [DEBUG] [Thread-20464] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:25:23.789 [DEBUG] [Thread-20464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:25:23.790 [DEBUG] [Thread-20464] [transport.py] [_log()] Compression: none
2026-04-15T14:25:23.790 [DEBUG] [Thread-20464] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:25:23.806 [DEBUG] [Thread-20464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:25:23.807 [DEBUG] [Thread-20464] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:25:23.807 [DEBUG] [Thread-20464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:25:23.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:25:23.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:25:23.808 [DEBUG] [Thread-20464] [transport.py] [_log()] userauth is OK
2026-04-15T14:25:23.809 [DEBUG] [Thread-20464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:25:23.809 [DEBUG] [Thread-20464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:25:23.809 [DEBUG] [Thread-20464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:25:23.809 [DEBUG] [Thread-20464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:25:23.833 [INFO] [Thread-20464] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:25:23.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:25:24.908 [DEBUG] [Thread-20466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:25:26.965 [DEBUG] [Thread-20467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:25:28.754 [DEBUG] [Thread-20464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:25:28.754 [DEBUG] [Thread-20464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:25:28.755 [DEBUG] [Thread-20464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:25:28.795 [DEBUG] [Thread-20464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:25:28.795 [DEBUG] [Thread-20464] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:25:28.796 [DEBUG] [Thread-20464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:25:28.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:25:28.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:25:28.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:25:28.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:25:28.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:25:28.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:25:28.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:25:28.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:25:28.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:25:28.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.517151 -999.00  +13.80  25.28     62   +6.80 1 1 1 1 1   888    0 6.63 6.94 ----- 23.9 25.3 312.2 27.5 19.8 -24.6 18.8 -25.0 19.1 -23.1 20.2 -22.6
2026-04-15T14:25:28.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:25:28.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:25:28.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.517151
2026-04-15T14:25:28.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:25:28.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:25:28.824 [DEBUG] [Thread-20464] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:25:28.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:25:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:25:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:25:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:24:59', tmtdew=8.59816, humidity=56.1388, cloud=0.0, wind=22.4442, temperature=14.3764, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:24:41.846', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:25:29.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:25:29.081 [DEBUG] [Thread-20469] [transport.py] [_log()] starting thread (client mode): 0xee98d8a0
2026-04-15T14:25:29.081 [DEBUG] [Thread-20469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:25:29.095 [DEBUG] [Thread-20469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:25:29.095 [INFO] [Thread-20469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:25:29.103 [DEBUG] [Thread-20469] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:25:29.103 [DEBUG] [Thread-20469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:25:29.103 [DEBUG] [Thread-20469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:25:29.103 [DEBUG] [Thread-20469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:25:29.103 [DEBUG] [Thread-20469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:25:29.103 [DEBUG] [Thread-20469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:25:29.103 [DEBUG] [Thread-20469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:25:29.103 [DEBUG] [Thread-20469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:25:29.103 [DEBUG] [Thread-20469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:25:29.103 [DEBUG] [Thread-20469] [transport.py] [_log()] client lang: <none>
2026-04-15T14:25:29.104 [DEBUG] [Thread-20469] [transport.py] [_log()] server lang: <none>
2026-04-15T14:25:29.104 [DEBUG] [Thread-20469] [transport.py] [_log()] kex follows: False
2026-04-15T14:25:29.104 [DEBUG] [Thread-20469] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:25:29.104 [DEBUG] [Thread-20469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:25:29.104 [DEBUG] [Thread-20469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:25:29.104 [DEBUG] [Thread-20469] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:25:29.104 [DEBUG] [Thread-20469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:25:29.104 [DEBUG] [Thread-20469] [transport.py] [_log()] Compression: none
2026-04-15T14:25:29.104 [DEBUG] [Thread-20469] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:25:29.161 [DEBUG] [Thread-20469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:25:29.161 [DEBUG] [Thread-20469] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:25:29.162 [DEBUG] [Thread-20469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:25:29.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:25:29.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:25:29.219 [DEBUG] [Thread-20469] [transport.py] [_log()] userauth is OK
2026-04-15T14:25:29.219 [DEBUG] [Thread-20469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:25:29.220 [DEBUG] [Thread-20469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:25:29.220 [DEBUG] [Thread-20469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:25:29.220 [DEBUG] [Thread-20469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:25:29.242 [INFO] [Thread-20469] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:25:29.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:25:29.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:25:30.060 [DEBUG] [Thread-20469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:25:30.061 [DEBUG] [Thread-20469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:25:30.108 [DEBUG] [Thread-20469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:25:30.108 [DEBUG] [Thread-20469] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:25:30.123 [DEBUG] [Thread-20469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:25:30.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:25:30.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')
2026-04-15T14:25:30.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
2026-04-15T14:25:30.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:25:30.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:25:30.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:25:30.158 [DEBUG] [Thread-20469] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:25:39.940 [DEBUG] [Thread-20471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:25:54.985 [DEBUG] [Thread-20472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:26:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:26:00.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:26:00.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
2026-04-15T14:26:01.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 25, 35), 9.48497, 53.0573, 0.0, 18.6667, 15.1866, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:26:01.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:25:35
2026-04-15T14:26:01.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:26:02.310 [DEBUG] [Thread-20473] [transport.py] [_log()] starting thread (client mode): 0xee906b30
2026-04-15T14:26:02.310 [DEBUG] [Thread-20473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:26:02.334 [DEBUG] [Thread-20473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:26:02.334 [INFO] [Thread-20473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:26:02.336 [DEBUG] [Thread-20473] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:26:02.336 [DEBUG] [Thread-20473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:26:02.336 [DEBUG] [Thread-20473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:26:02.336 [DEBUG] [Thread-20473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:26:02.336 [DEBUG] [Thread-20473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:26:02.336 [DEBUG] [Thread-20473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:26:02.336 [DEBUG] [Thread-20473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:26:02.336 [DEBUG] [Thread-20473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:26:02.337 [DEBUG] [Thread-20473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:26:02.337 [DEBUG] [Thread-20473] [transport.py] [_log()] client lang: <none>
2026-04-15T14:26:02.337 [DEBUG] [Thread-20473] [transport.py] [_log()] server lang: <none>
2026-04-15T14:26:02.337 [DEBUG] [Thread-20473] [transport.py] [_log()] kex follows: False
2026-04-15T14:26:02.337 [DEBUG] [Thread-20473] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:26:02.337 [DEBUG] [Thread-20473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:26:02.337 [DEBUG] [Thread-20473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:26:02.337 [DEBUG] [Thread-20473] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:26:02.337 [DEBUG] [Thread-20473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:26:02.337 [DEBUG] [Thread-20473] [transport.py] [_log()] Compression: none
2026-04-15T14:26:02.338 [DEBUG] [Thread-20473] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:26:02.347 [DEBUG] [Thread-20473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:26:02.347 [DEBUG] [Thread-20473] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:26:02.347 [DEBUG] [Thread-20473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:26:02.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:26:02.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:26:02.348 [DEBUG] [Thread-20473] [transport.py] [_log()] userauth is OK
2026-04-15T14:26:02.349 [DEBUG] [Thread-20473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:26:02.349 [DEBUG] [Thread-20473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:26:02.349 [DEBUG] [Thread-20473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:26:02.349 [DEBUG] [Thread-20473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:26:02.367 [INFO] [Thread-20473] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:26:02.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:26:03.032 [DEBUG] [Thread-20473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:26:03.032 [DEBUG] [Thread-20473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:26:03.033 [DEBUG] [Thread-20473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:26:03.063 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:26:03.064 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:26:03.073 [DEBUG] [Thread-20473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:26:03.073 [DEBUG] [Thread-20473] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:26:03.076 [DEBUG] [Thread-20473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:26:03.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:26:03.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:26:03.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:26:03.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:26:03.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:26:03.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:26:03.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:26:03.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:26:03.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:26:03.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.517845 -999.00  +13.90  20.94     61   +6.60 1 1 1 1 1   888    0 6.73 4.59 ----- 16.8 20.9 330.8 23.3 19.8 -25.6 18.9 -24.6 19.2 -21.6 20.3 -23.7
2026-04-15T14:26:03.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:26:03.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:26:03.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.517845
2026-04-15T14:26:03.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:26:03.103 [DEBUG] [Thread-20473] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:26:03.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:26:03.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:26:03.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:26:03.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:26:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:25:35', tmtdew=9.48497, humidity=53.0573, cloud=0.0, wind=18.6667, temperature=15.1866, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:25:41.808', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:26:03.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:26:03.362 [DEBUG] [Thread-20476] [transport.py] [_log()] starting thread (client mode): 0xf1337190
2026-04-15T14:26:03.362 [DEBUG] [Thread-20476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:26:03.376 [DEBUG] [Thread-20476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:26:03.376 [INFO] [Thread-20476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:26:03.383 [DEBUG] [Thread-20476] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:26:03.384 [DEBUG] [Thread-20476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:26:03.384 [DEBUG] [Thread-20476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:26:03.384 [DEBUG] [Thread-20476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:26:03.384 [DEBUG] [Thread-20476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:26:03.384 [DEBUG] [Thread-20476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:26:03.384 [DEBUG] [Thread-20476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:26:03.384 [DEBUG] [Thread-20476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:26:03.384 [DEBUG] [Thread-20476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:26:03.384 [DEBUG] [Thread-20476] [transport.py] [_log()] client lang: <none>
2026-04-15T14:26:03.384 [DEBUG] [Thread-20476] [transport.py] [_log()] server lang: <none>
2026-04-15T14:26:03.384 [DEBUG] [Thread-20476] [transport.py] [_log()] kex follows: False
2026-04-15T14:26:03.384 [DEBUG] [Thread-20476] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:26:03.385 [DEBUG] [Thread-20476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:26:03.385 [DEBUG] [Thread-20476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:26:03.385 [DEBUG] [Thread-20476] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:26:03.385 [DEBUG] [Thread-20476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:26:03.385 [DEBUG] [Thread-20476] [transport.py] [_log()] Compression: none
2026-04-15T14:26:03.385 [DEBUG] [Thread-20476] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:26:03.443 [DEBUG] [Thread-20476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:26:03.443 [DEBUG] [Thread-20476] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:26:03.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:26:03.444 [DEBUG] [Thread-20476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:26:03.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:26:03.504 [DEBUG] [Thread-20476] [transport.py] [_log()] userauth is OK
2026-04-15T14:26:03.504 [DEBUG] [Thread-20476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:26:03.504 [DEBUG] [Thread-20476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:26:03.505 [DEBUG] [Thread-20476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:26:03.505 [DEBUG] [Thread-20476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:26:03.534 [INFO] [Thread-20476] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:26:03.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:26:03.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:26:04.363 [DEBUG] [Thread-20476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:26:04.363 [DEBUG] [Thread-20476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:26:04.414 [DEBUG] [Thread-20476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:26:04.414 [DEBUG] [Thread-20476] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:26:04.422 [DEBUG] [Thread-20476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:26:04.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:26:04.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')
2026-04-15T14:26:04.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
2026-04-15T14:26:04.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:26:04.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:26:04.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:26:04.454 [DEBUG] [Thread-20476] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:26:10.016 [DEBUG] [Thread-20478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:26:25.061 [DEBUG] [Thread-20479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:26:27.060 [DEBUG] [Thread-20480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:26:34.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:26:34.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:26:34.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
2026-04-15T14:26:35.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 26, 11), 8.60481, 56.1749, 0.0, 17.4866, 14.1444, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:26:35.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:26:11
2026-04-15T14:26:36.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:26:36.558 [DEBUG] [Thread-20481] [transport.py] [_log()] starting thread (client mode): 0xf1365000
2026-04-15T14:26:36.558 [DEBUG] [Thread-20481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:26:36.577 [DEBUG] [Thread-20481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:26:36.577 [INFO] [Thread-20481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:26:36.578 [DEBUG] [Thread-20481] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:26:36.578 [DEBUG] [Thread-20481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:26:36.578 [DEBUG] [Thread-20481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:26:36.578 [DEBUG] [Thread-20481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:26:36.579 [DEBUG] [Thread-20481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:26:36.579 [DEBUG] [Thread-20481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:26:36.579 [DEBUG] [Thread-20481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:26:36.579 [DEBUG] [Thread-20481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:26:36.579 [DEBUG] [Thread-20481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:26:36.579 [DEBUG] [Thread-20481] [transport.py] [_log()] client lang: <none>
2026-04-15T14:26:36.579 [DEBUG] [Thread-20481] [transport.py] [_log()] server lang: <none>
2026-04-15T14:26:36.579 [DEBUG] [Thread-20481] [transport.py] [_log()] kex follows: False
2026-04-15T14:26:36.579 [DEBUG] [Thread-20481] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:26:36.579 [DEBUG] [Thread-20481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:26:36.579 [DEBUG] [Thread-20481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:26:36.579 [DEBUG] [Thread-20481] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:26:36.580 [DEBUG] [Thread-20481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:26:36.580 [DEBUG] [Thread-20481] [transport.py] [_log()] Compression: none
2026-04-15T14:26:36.580 [DEBUG] [Thread-20481] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:26:36.588 [DEBUG] [Thread-20481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:26:36.588 [DEBUG] [Thread-20481] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:26:36.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:26:36.589 [DEBUG] [Thread-20481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:26:36.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:26:36.590 [DEBUG] [Thread-20481] [transport.py] [_log()] userauth is OK
2026-04-15T14:26:36.590 [DEBUG] [Thread-20481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:26:36.590 [DEBUG] [Thread-20481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:26:36.590 [DEBUG] [Thread-20481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:26:36.590 [DEBUG] [Thread-20481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:26:36.613 [INFO] [Thread-20481] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:26:36.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:26:37.202 [DEBUG] [Thread-20481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:26:37.202 [DEBUG] [Thread-20481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:26:37.203 [DEBUG] [Thread-20481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:26:37.243 [DEBUG] [Thread-20481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:26:37.243 [DEBUG] [Thread-20481] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:26:37.246 [DEBUG] [Thread-20481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:26:37.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:26:37.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:26:37.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:26:37.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:26:37.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:26:37.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:26:37.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:26:37.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:26:37.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:26:37.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.518193 -999.00  +13.70  13.81     64   +7.00 1 1 1 1 1   888    0 6.76 4.66 ----- 12.4 13.8 306.4 17.9 19.9 -25.0 18.9 -23.7 19.3 -22.5 20.3 -23.7
2026-04-15T14:26:37.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:26:37.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:26:37.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.518193
2026-04-15T14:26:37.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:26:37.273 [DEBUG] [Thread-20481] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:26:37.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:26:37.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:26:37.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:26:37.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:26:37.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:26:11', tmtdew=8.60481, humidity=56.1749, cloud=0.0, wind=17.4866, temperature=14.1444, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:26:11.875', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:26:37.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:26:37.524 [DEBUG] [Thread-20484] [transport.py] [_log()] starting thread (client mode): 0xee989a20
2026-04-15T14:26:37.524 [DEBUG] [Thread-20484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:26:37.539 [DEBUG] [Thread-20484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:26:37.539 [INFO] [Thread-20484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:26:37.547 [DEBUG] [Thread-20484] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:26:37.547 [DEBUG] [Thread-20484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:26:37.547 [DEBUG] [Thread-20484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:26:37.547 [DEBUG] [Thread-20484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:26:37.547 [DEBUG] [Thread-20484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:26:37.547 [DEBUG] [Thread-20484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:26:37.547 [DEBUG] [Thread-20484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:26:37.547 [DEBUG] [Thread-20484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:26:37.548 [DEBUG] [Thread-20484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:26:37.548 [DEBUG] [Thread-20484] [transport.py] [_log()] client lang: <none>
2026-04-15T14:26:37.548 [DEBUG] [Thread-20484] [transport.py] [_log()] server lang: <none>
2026-04-15T14:26:37.548 [DEBUG] [Thread-20484] [transport.py] [_log()] kex follows: False
2026-04-15T14:26:37.548 [DEBUG] [Thread-20484] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:26:37.548 [DEBUG] [Thread-20484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:26:37.548 [DEBUG] [Thread-20484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:26:37.548 [DEBUG] [Thread-20484] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:26:37.548 [DEBUG] [Thread-20484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:26:37.548 [DEBUG] [Thread-20484] [transport.py] [_log()] Compression: none
2026-04-15T14:26:37.548 [DEBUG] [Thread-20484] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:26:37.603 [DEBUG] [Thread-20484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:26:37.603 [DEBUG] [Thread-20484] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:26:37.603 [DEBUG] [Thread-20484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:26:37.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:26:37.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:26:37.660 [DEBUG] [Thread-20484] [transport.py] [_log()] userauth is OK
2026-04-15T14:26:37.660 [DEBUG] [Thread-20484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:26:37.661 [DEBUG] [Thread-20484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:26:37.661 [DEBUG] [Thread-20484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:26:37.661 [DEBUG] [Thread-20484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:26:37.686 [INFO] [Thread-20484] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:26:37.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:26:37.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:26:38.501 [DEBUG] [Thread-20484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:26:38.501 [DEBUG] [Thread-20484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:26:38.549 [DEBUG] [Thread-20484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:26:38.549 [DEBUG] [Thread-20484] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:26:38.560 [DEBUG] [Thread-20484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:26:38.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:26:38.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')
2026-04-15T14:26:38.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
2026-04-15T14:26:38.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:26:38.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:26:38.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:26:38.598 [DEBUG] [Thread-20484] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:26:40.091 [DEBUG] [Thread-20486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:26:55.143 [DEBUG] [Thread-20487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:27:03.204 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:27:03.205 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:27:08.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:27:08.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:27:08.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
2026-04-15T14:27:09.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 26, 46), 8.69247, 55.9073, 0.0, 22.23, 14.6563, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:27:09.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:26:46
2026-04-15T14:27:10.175 [DEBUG] [Thread-20488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:27:10.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:27:10.784 [DEBUG] [Thread-20489] [transport.py] [_log()] starting thread (client mode): 0xee9ac610
2026-04-15T14:27:10.784 [DEBUG] [Thread-20489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:27:10.804 [DEBUG] [Thread-20489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:27:10.804 [INFO] [Thread-20489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:27:10.805 [DEBUG] [Thread-20489] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:27:10.805 [DEBUG] [Thread-20489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:27:10.805 [DEBUG] [Thread-20489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:27:10.805 [DEBUG] [Thread-20489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:27:10.805 [DEBUG] [Thread-20489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:27:10.806 [DEBUG] [Thread-20489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:27:10.806 [DEBUG] [Thread-20489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:27:10.806 [DEBUG] [Thread-20489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:27:10.806 [DEBUG] [Thread-20489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:27:10.806 [DEBUG] [Thread-20489] [transport.py] [_log()] client lang: <none>
2026-04-15T14:27:10.806 [DEBUG] [Thread-20489] [transport.py] [_log()] server lang: <none>
2026-04-15T14:27:10.806 [DEBUG] [Thread-20489] [transport.py] [_log()] kex follows: False
2026-04-15T14:27:10.806 [DEBUG] [Thread-20489] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:27:10.806 [DEBUG] [Thread-20489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:27:10.806 [DEBUG] [Thread-20489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:27:10.806 [DEBUG] [Thread-20489] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:27:10.806 [DEBUG] [Thread-20489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:27:10.807 [DEBUG] [Thread-20489] [transport.py] [_log()] Compression: none
2026-04-15T14:27:10.807 [DEBUG] [Thread-20489] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:27:10.816 [DEBUG] [Thread-20489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:27:10.816 [DEBUG] [Thread-20489] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:27:10.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:27:10.817 [DEBUG] [Thread-20489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:27:10.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:27:10.817 [DEBUG] [Thread-20489] [transport.py] [_log()] userauth is OK
2026-04-15T14:27:10.817 [DEBUG] [Thread-20489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:27:10.818 [DEBUG] [Thread-20489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:27:10.818 [DEBUG] [Thread-20489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:27:10.818 [DEBUG] [Thread-20489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:27:10.832 [INFO] [Thread-20489] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:27:10.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:27:11.445 [DEBUG] [Thread-20489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:27:11.445 [DEBUG] [Thread-20489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:27:11.445 [DEBUG] [Thread-20489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:27:11.486 [DEBUG] [Thread-20489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:27:11.486 [DEBUG] [Thread-20489] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:27:11.487 [DEBUG] [Thread-20489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:27:11.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:27:11.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:27:11.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:27:11.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:27:11.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:27:11.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:27:11.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:27:11.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:27:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:27:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.518540 -999.00  +14.00  11.60     64   +7.30 1 2 1 1 1   888    0 6.75 3.55 ----- 12.9 11.6 305.2 16.2 20.0 -25.2 19.0 -24.5 19.4 -21.4 20.3 -24.0
2026-04-15T14:27:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:27:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:27:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.518540
2026-04-15T14:27:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:27:11.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:27:11.507 [DEBUG] [Thread-20489] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:27:11.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:27:11.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:27:11.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:27:11.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:26:46', tmtdew=8.69247, humidity=55.9073, cloud=0.0, wind=22.23, temperature=14.6563, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:26:41.856', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:27:11.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:27:11.730 [DEBUG] [Thread-20492] [transport.py] [_log()] starting thread (client mode): 0xee904f70
2026-04-15T14:27:11.730 [DEBUG] [Thread-20492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:27:11.744 [DEBUG] [Thread-20492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:27:11.744 [INFO] [Thread-20492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:27:11.752 [DEBUG] [Thread-20492] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:27:11.752 [DEBUG] [Thread-20492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:27:11.752 [DEBUG] [Thread-20492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:27:11.752 [DEBUG] [Thread-20492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:27:11.752 [DEBUG] [Thread-20492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:27:11.752 [DEBUG] [Thread-20492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:27:11.752 [DEBUG] [Thread-20492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:27:11.752 [DEBUG] [Thread-20492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:27:11.753 [DEBUG] [Thread-20492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:27:11.753 [DEBUG] [Thread-20492] [transport.py] [_log()] client lang: <none>
2026-04-15T14:27:11.753 [DEBUG] [Thread-20492] [transport.py] [_log()] server lang: <none>
2026-04-15T14:27:11.753 [DEBUG] [Thread-20492] [transport.py] [_log()] kex follows: False
2026-04-15T14:27:11.753 [DEBUG] [Thread-20492] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:27:11.753 [DEBUG] [Thread-20492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:27:11.753 [DEBUG] [Thread-20492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:27:11.753 [DEBUG] [Thread-20492] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:27:11.753 [DEBUG] [Thread-20492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:27:11.753 [DEBUG] [Thread-20492] [transport.py] [_log()] Compression: none
2026-04-15T14:27:11.753 [DEBUG] [Thread-20492] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:27:11.810 [DEBUG] [Thread-20492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:27:11.811 [DEBUG] [Thread-20492] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:27:11.811 [DEBUG] [Thread-20492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:27:11.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:27:11.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:27:11.870 [DEBUG] [Thread-20492] [transport.py] [_log()] userauth is OK
2026-04-15T14:27:11.870 [DEBUG] [Thread-20492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:27:11.870 [DEBUG] [Thread-20492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:27:11.870 [DEBUG] [Thread-20492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:27:11.871 [DEBUG] [Thread-20492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:27:11.895 [INFO] [Thread-20492] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:27:11.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:27:11.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:27:12.697 [DEBUG] [Thread-20492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:27:12.697 [DEBUG] [Thread-20492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:27:12.745 [DEBUG] [Thread-20492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:27:12.745 [DEBUG] [Thread-20492] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:27:12.754 [DEBUG] [Thread-20492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:27:12.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:27:12.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')
2026-04-15T14:27:12.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
2026-04-15T14:27:12.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:27:12.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:27:12.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:27:12.793 [DEBUG] [Thread-20492] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:27:25.207 [DEBUG] [Thread-20494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:27:27.135 [DEBUG] [Thread-20495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:27:40.256 [DEBUG] [Thread-20496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:27:42.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:27:42.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:27:42.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
2026-04-15T14:27:44.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 27, 21), 8.48822, 56.3045, 0.0, 19.1264, 13.9278, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:27:44.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:27:21
2026-04-15T14:27:44.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:27:45.163 [DEBUG] [Thread-20497] [transport.py] [_log()] starting thread (client mode): 0xf13ef730
2026-04-15T14:27:45.163 [DEBUG] [Thread-20497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:27:45.177 [DEBUG] [Thread-20497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:27:45.177 [INFO] [Thread-20497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:27:45.180 [DEBUG] [Thread-20497] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:27:45.180 [DEBUG] [Thread-20497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:27:45.180 [DEBUG] [Thread-20497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:27:45.180 [DEBUG] [Thread-20497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:27:45.180 [DEBUG] [Thread-20497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:27:45.180 [DEBUG] [Thread-20497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:27:45.181 [DEBUG] [Thread-20497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:27:45.181 [DEBUG] [Thread-20497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:27:45.181 [DEBUG] [Thread-20497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:27:45.181 [DEBUG] [Thread-20497] [transport.py] [_log()] client lang: <none>
2026-04-15T14:27:45.181 [DEBUG] [Thread-20497] [transport.py] [_log()] server lang: <none>
2026-04-15T14:27:45.181 [DEBUG] [Thread-20497] [transport.py] [_log()] kex follows: False
2026-04-15T14:27:45.181 [DEBUG] [Thread-20497] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:27:45.181 [DEBUG] [Thread-20497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:27:45.181 [DEBUG] [Thread-20497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:27:45.181 [DEBUG] [Thread-20497] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:27:45.181 [DEBUG] [Thread-20497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:27:45.182 [DEBUG] [Thread-20497] [transport.py] [_log()] Compression: none
2026-04-15T14:27:45.182 [DEBUG] [Thread-20497] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:27:45.197 [DEBUG] [Thread-20497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:27:45.198 [DEBUG] [Thread-20497] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:27:45.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:27:45.198 [DEBUG] [Thread-20497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:27:45.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:27:45.199 [DEBUG] [Thread-20497] [transport.py] [_log()] userauth is OK
2026-04-15T14:27:45.199 [DEBUG] [Thread-20497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:27:45.200 [DEBUG] [Thread-20497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:27:45.200 [DEBUG] [Thread-20497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:27:45.200 [DEBUG] [Thread-20497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:27:45.223 [INFO] [Thread-20497] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:27:45.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:27:45.828 [DEBUG] [Thread-20497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:27:45.829 [DEBUG] [Thread-20497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:27:45.829 [DEBUG] [Thread-20497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:27:45.869 [DEBUG] [Thread-20497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:27:45.869 [DEBUG] [Thread-20497] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:27:45.872 [DEBUG] [Thread-20497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:27:45.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:27:45.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:27:45.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:27:45.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:27:45.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:27:45.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:27:45.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:27:45.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:27:45.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:27:45.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.518887 -999.00  +14.20  19.63     63   +7.30 1 1 1 1 1   888    0 6.74 3.82 ----- 21.1 19.6 304.8 25.3 19.8 -26.7 19.0 -25.0 19.4 -22.1 20.4 -24.0
2026-04-15T14:27:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:27:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:27:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.518887
2026-04-15T14:27:45.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:27:45.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:27:45.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:27:45.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:27:45.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:27:45.899 [DEBUG] [Thread-20497] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:27:45.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:27:21', tmtdew=8.48822, humidity=56.3045, cloud=0.0, wind=19.1264, temperature=13.9278, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:27:11.837', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:27:46.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:27:46.152 [DEBUG] [Thread-20500] [transport.py] [_log()] starting thread (client mode): 0xf13eca90
2026-04-15T14:27:46.152 [DEBUG] [Thread-20500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:27:46.166 [DEBUG] [Thread-20500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:27:46.166 [INFO] [Thread-20500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:27:46.173 [DEBUG] [Thread-20500] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:27:46.174 [DEBUG] [Thread-20500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:27:46.174 [DEBUG] [Thread-20500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:27:46.174 [DEBUG] [Thread-20500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:27:46.174 [DEBUG] [Thread-20500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:27:46.174 [DEBUG] [Thread-20500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:27:46.174 [DEBUG] [Thread-20500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:27:46.174 [DEBUG] [Thread-20500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:27:46.174 [DEBUG] [Thread-20500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:27:46.174 [DEBUG] [Thread-20500] [transport.py] [_log()] client lang: <none>
2026-04-15T14:27:46.174 [DEBUG] [Thread-20500] [transport.py] [_log()] server lang: <none>
2026-04-15T14:27:46.174 [DEBUG] [Thread-20500] [transport.py] [_log()] kex follows: False
2026-04-15T14:27:46.174 [DEBUG] [Thread-20500] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:27:46.175 [DEBUG] [Thread-20500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:27:46.175 [DEBUG] [Thread-20500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:27:46.175 [DEBUG] [Thread-20500] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:27:46.175 [DEBUG] [Thread-20500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:27:46.175 [DEBUG] [Thread-20500] [transport.py] [_log()] Compression: none
2026-04-15T14:27:46.175 [DEBUG] [Thread-20500] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:27:46.235 [DEBUG] [Thread-20500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:27:46.235 [DEBUG] [Thread-20500] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:27:46.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:27:46.236 [DEBUG] [Thread-20500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:27:46.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:27:46.291 [DEBUG] [Thread-20500] [transport.py] [_log()] userauth is OK
2026-04-15T14:27:46.291 [DEBUG] [Thread-20500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:27:46.291 [DEBUG] [Thread-20500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:27:46.291 [DEBUG] [Thread-20500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:27:46.291 [DEBUG] [Thread-20500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:27:46.309 [INFO] [Thread-20500] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:27:46.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:27:46.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:27:47.165 [DEBUG] [Thread-20500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:27:47.165 [DEBUG] [Thread-20500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:27:47.212 [DEBUG] [Thread-20500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:27:47.213 [DEBUG] [Thread-20500] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:27:47.221 [DEBUG] [Thread-20500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:27:47.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:27:47.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')
2026-04-15T14:27:47.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
2026-04-15T14:27:47.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:27:47.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:27:47.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:27:47.261 [DEBUG] [Thread-20500] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:27:55.287 [DEBUG] [Thread-20502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:28:03.345 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:28:03.346 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:28:10.331 [DEBUG] [Thread-20503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:28:17.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:28:17.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:28:17.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
2026-04-15T14:28:18.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 27, 57), 8.77763, 55.3932, 0.0, 23.8738, 13.8613, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:28:18.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:27:57
2026-04-15T14:28:18.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:28:19.430 [DEBUG] [Thread-20504] [transport.py] [_log()] starting thread (client mode): 0xee905e40
2026-04-15T14:28:19.431 [DEBUG] [Thread-20504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:28:19.451 [DEBUG] [Thread-20504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:28:19.451 [INFO] [Thread-20504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:28:19.455 [DEBUG] [Thread-20504] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:28:19.455 [DEBUG] [Thread-20504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:28:19.455 [DEBUG] [Thread-20504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:28:19.455 [DEBUG] [Thread-20504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:28:19.455 [DEBUG] [Thread-20504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:28:19.455 [DEBUG] [Thread-20504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:28:19.455 [DEBUG] [Thread-20504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:28:19.455 [DEBUG] [Thread-20504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:28:19.455 [DEBUG] [Thread-20504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:28:19.456 [DEBUG] [Thread-20504] [transport.py] [_log()] client lang: <none>
2026-04-15T14:28:19.456 [DEBUG] [Thread-20504] [transport.py] [_log()] server lang: <none>
2026-04-15T14:28:19.456 [DEBUG] [Thread-20504] [transport.py] [_log()] kex follows: False
2026-04-15T14:28:19.456 [DEBUG] [Thread-20504] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:28:19.456 [DEBUG] [Thread-20504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:28:19.456 [DEBUG] [Thread-20504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:28:19.456 [DEBUG] [Thread-20504] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:28:19.456 [DEBUG] [Thread-20504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:28:19.456 [DEBUG] [Thread-20504] [transport.py] [_log()] Compression: none
2026-04-15T14:28:19.456 [DEBUG] [Thread-20504] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:28:19.472 [DEBUG] [Thread-20504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:28:19.473 [DEBUG] [Thread-20504] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:28:19.473 [DEBUG] [Thread-20504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:28:19.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:28:19.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:28:19.475 [DEBUG] [Thread-20504] [transport.py] [_log()] userauth is OK
2026-04-15T14:28:19.475 [DEBUG] [Thread-20504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:28:19.475 [DEBUG] [Thread-20504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:28:19.475 [DEBUG] [Thread-20504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:28:19.475 [DEBUG] [Thread-20504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:28:19.500 [INFO] [Thread-20504] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:28:19.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:28:20.147 [DEBUG] [Thread-20504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:28:20.147 [DEBUG] [Thread-20504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:28:20.148 [DEBUG] [Thread-20504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:28:20.188 [DEBUG] [Thread-20504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:28:20.188 [DEBUG] [Thread-20504] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:28:20.191 [DEBUG] [Thread-20504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:28:20.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:28:20.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:28:20.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:28:20.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:28:20.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:28:20.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:28:20.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:28:20.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:28:20.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:28:20.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.519581 -999.00  +14.10  21.51     62   +7.10 1 1 1 1 1   888    0 7.07 10.77 ----- 26.8 21.5 311.4 25.9 19.8 -26.1 18.9 -24.9 19.1 -24.6 20.3 -23.8
2026-04-15T14:28:20.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:28:20.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:28:20.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.519581
2026-04-15T14:28:20.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:28:20.215 [DEBUG] [Thread-20504] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:28:20.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:28:20.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:28:20.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:28:20.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:28:20.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:27:57', tmtdew=8.77763, humidity=55.3932, cloud=0.0, wind=23.8738, temperature=13.8613, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:28:11.798', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:28:20.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:28:20.474 [DEBUG] [Thread-20507] [transport.py] [_log()] starting thread (client mode): 0xee98e200
2026-04-15T14:28:20.474 [DEBUG] [Thread-20507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:28:20.488 [DEBUG] [Thread-20507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:28:20.488 [INFO] [Thread-20507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:28:20.496 [DEBUG] [Thread-20507] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:28:20.496 [DEBUG] [Thread-20507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:28:20.496 [DEBUG] [Thread-20507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:28:20.496 [DEBUG] [Thread-20507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:28:20.496 [DEBUG] [Thread-20507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:28:20.496 [DEBUG] [Thread-20507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:28:20.496 [DEBUG] [Thread-20507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:28:20.496 [DEBUG] [Thread-20507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:28:20.496 [DEBUG] [Thread-20507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:28:20.496 [DEBUG] [Thread-20507] [transport.py] [_log()] client lang: <none>
2026-04-15T14:28:20.497 [DEBUG] [Thread-20507] [transport.py] [_log()] server lang: <none>
2026-04-15T14:28:20.497 [DEBUG] [Thread-20507] [transport.py] [_log()] kex follows: False
2026-04-15T14:28:20.497 [DEBUG] [Thread-20507] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:28:20.497 [DEBUG] [Thread-20507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:28:20.497 [DEBUG] [Thread-20507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:28:20.497 [DEBUG] [Thread-20507] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:28:20.497 [DEBUG] [Thread-20507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:28:20.497 [DEBUG] [Thread-20507] [transport.py] [_log()] Compression: none
2026-04-15T14:28:20.497 [DEBUG] [Thread-20507] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:28:20.555 [DEBUG] [Thread-20507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:28:20.555 [DEBUG] [Thread-20507] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:28:20.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:28:20.556 [DEBUG] [Thread-20507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:28:20.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:28:20.611 [DEBUG] [Thread-20507] [transport.py] [_log()] userauth is OK
2026-04-15T14:28:20.612 [DEBUG] [Thread-20507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:28:20.612 [DEBUG] [Thread-20507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:28:20.612 [DEBUG] [Thread-20507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:28:20.612 [DEBUG] [Thread-20507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:28:20.637 [INFO] [Thread-20507] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:28:20.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:28:20.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:28:21.492 [DEBUG] [Thread-20507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:28:21.493 [DEBUG] [Thread-20507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:28:21.540 [DEBUG] [Thread-20507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:28:21.540 [DEBUG] [Thread-20507] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:28:21.549 [DEBUG] [Thread-20507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:28:21.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:28:21.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')
2026-04-15T14:28:21.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
2026-04-15T14:28:21.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:28:21.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:28:21.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:28:21.584 [DEBUG] [Thread-20507] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:28:25.363 [DEBUG] [Thread-20509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:28:27.210 [DEBUG] [Thread-20510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:28:40.406 [DEBUG] [Thread-20511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:28:51.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:28:51.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:28:51.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
2026-04-15T14:28:52.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 28, 33), 9.27724, 53.6869, 0.0, 18.7373, 14.6562, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:28:52.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:28:33
2026-04-15T14:28:53.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:28:53.648 [DEBUG] [Thread-20512] [transport.py] [_log()] starting thread (client mode): 0xf1366e00
2026-04-15T14:28:53.648 [DEBUG] [Thread-20512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:28:53.668 [DEBUG] [Thread-20512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:28:53.668 [INFO] [Thread-20512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:28:53.671 [DEBUG] [Thread-20512] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:28:53.671 [DEBUG] [Thread-20512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:28:53.671 [DEBUG] [Thread-20512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:28:53.671 [DEBUG] [Thread-20512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:28:53.671 [DEBUG] [Thread-20512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:28:53.671 [DEBUG] [Thread-20512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:28:53.671 [DEBUG] [Thread-20512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:28:53.671 [DEBUG] [Thread-20512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:28:53.672 [DEBUG] [Thread-20512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:28:53.672 [DEBUG] [Thread-20512] [transport.py] [_log()] client lang: <none>
2026-04-15T14:28:53.672 [DEBUG] [Thread-20512] [transport.py] [_log()] server lang: <none>
2026-04-15T14:28:53.672 [DEBUG] [Thread-20512] [transport.py] [_log()] kex follows: False
2026-04-15T14:28:53.672 [DEBUG] [Thread-20512] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:28:53.672 [DEBUG] [Thread-20512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:28:53.672 [DEBUG] [Thread-20512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:28:53.672 [DEBUG] [Thread-20512] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:28:53.672 [DEBUG] [Thread-20512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:28:53.672 [DEBUG] [Thread-20512] [transport.py] [_log()] Compression: none
2026-04-15T14:28:53.672 [DEBUG] [Thread-20512] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:28:53.691 [DEBUG] [Thread-20512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:28:53.691 [DEBUG] [Thread-20512] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:28:53.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:28:53.692 [DEBUG] [Thread-20512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:28:53.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:28:53.693 [DEBUG] [Thread-20512] [transport.py] [_log()] userauth is OK
2026-04-15T14:28:53.693 [DEBUG] [Thread-20512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:28:53.693 [DEBUG] [Thread-20512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:28:53.693 [DEBUG] [Thread-20512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:28:53.693 [DEBUG] [Thread-20512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:28:53.717 [INFO] [Thread-20512] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:28:53.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:28:54.339 [DEBUG] [Thread-20512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:28:54.340 [DEBUG] [Thread-20512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:28:54.340 [DEBUG] [Thread-20512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:28:54.380 [DEBUG] [Thread-20512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:28:54.380 [DEBUG] [Thread-20512] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:28:54.383 [DEBUG] [Thread-20512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:28:54.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:28:54.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:28:54.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:28:54.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:28:54.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:28:54.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:28:54.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:28:54.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:28:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:28:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.519929 -999.00  +14.10  19.89     62   +7.10 1 1 1 1 1   888    0 7.04 13.10 ----- 17.8 19.9 323.6 28.3 19.7 -24.7 18.9 -23.8 19.1 -22.8 20.1 -24.3
2026-04-15T14:28:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:28:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:28:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.519929
2026-04-15T14:28:54.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:28:54.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:28:54.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:28:54.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:28:54.409 [DEBUG] [Thread-20512] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:28:54.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:28:54.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:28:33', tmtdew=9.27724, humidity=53.6869, cloud=0.0, wind=18.7373, temperature=14.6562, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:28:41.866', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:28:54.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:28:54.662 [DEBUG] [Thread-20515] [transport.py] [_log()] starting thread (client mode): 0xf13cafb0
2026-04-15T14:28:54.663 [DEBUG] [Thread-20515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:28:54.683 [DEBUG] [Thread-20515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:28:54.683 [INFO] [Thread-20515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:28:54.692 [DEBUG] [Thread-20515] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:28:54.692 [DEBUG] [Thread-20515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:28:54.692 [DEBUG] [Thread-20515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:28:54.692 [DEBUG] [Thread-20515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:28:54.692 [DEBUG] [Thread-20515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:28:54.692 [DEBUG] [Thread-20515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:28:54.692 [DEBUG] [Thread-20515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:28:54.692 [DEBUG] [Thread-20515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:28:54.692 [DEBUG] [Thread-20515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:28:54.692 [DEBUG] [Thread-20515] [transport.py] [_log()] client lang: <none>
2026-04-15T14:28:54.692 [DEBUG] [Thread-20515] [transport.py] [_log()] server lang: <none>
2026-04-15T14:28:54.692 [DEBUG] [Thread-20515] [transport.py] [_log()] kex follows: False
2026-04-15T14:28:54.693 [DEBUG] [Thread-20515] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:28:54.693 [DEBUG] [Thread-20515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:28:54.693 [DEBUG] [Thread-20515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:28:54.693 [DEBUG] [Thread-20515] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:28:54.693 [DEBUG] [Thread-20515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:28:54.693 [DEBUG] [Thread-20515] [transport.py] [_log()] Compression: none
2026-04-15T14:28:54.693 [DEBUG] [Thread-20515] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:28:54.753 [DEBUG] [Thread-20515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:28:54.754 [DEBUG] [Thread-20515] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:28:54.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:28:54.754 [DEBUG] [Thread-20515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:28:54.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:28:54.818 [DEBUG] [Thread-20515] [transport.py] [_log()] userauth is OK
2026-04-15T14:28:54.818 [DEBUG] [Thread-20515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:28:54.818 [DEBUG] [Thread-20515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:28:54.818 [DEBUG] [Thread-20515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:28:54.818 [DEBUG] [Thread-20515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:28:54.848 [INFO] [Thread-20515] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:28:54.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:28:54.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:28:55.440 [DEBUG] [Thread-20517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:28:55.698 [DEBUG] [Thread-20515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:28:55.699 [DEBUG] [Thread-20515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:28:55.749 [DEBUG] [Thread-20515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:28:55.750 [DEBUG] [Thread-20515] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:28:55.759 [DEBUG] [Thread-20515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:28:55.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:28:55.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')
2026-04-15T14:28:55.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T14:28:55.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:28:55.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:28:55.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:28:55.798 [DEBUG] [Thread-20515] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:29:03.485 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:29:03.486 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:29:10.483 [DEBUG] [Thread-20518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:29:25.515 [DEBUG] [Thread-20519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:29:25.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:29:25.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:29:25.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
2026-04-15T14:29:27.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 29, 9), 8.55107, 56.3737, 0.0, 13.5169, 14.0278, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:29:27.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:29:09
2026-04-15T14:29:27.309 [DEBUG] [Thread-20520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:29:27.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:29:27.959 [DEBUG] [Thread-20521] [transport.py] [_log()] starting thread (client mode): 0xee905ed0
2026-04-15T14:29:27.959 [DEBUG] [Thread-20521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:29:27.978 [DEBUG] [Thread-20521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:29:27.978 [INFO] [Thread-20521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:29:27.981 [DEBUG] [Thread-20521] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:29:27.981 [DEBUG] [Thread-20521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:29:27.982 [DEBUG] [Thread-20521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:29:27.982 [DEBUG] [Thread-20521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:29:27.982 [DEBUG] [Thread-20521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:29:27.982 [DEBUG] [Thread-20521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:29:27.982 [DEBUG] [Thread-20521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:29:27.982 [DEBUG] [Thread-20521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:29:27.982 [DEBUG] [Thread-20521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:29:27.982 [DEBUG] [Thread-20521] [transport.py] [_log()] client lang: <none>
2026-04-15T14:29:27.982 [DEBUG] [Thread-20521] [transport.py] [_log()] server lang: <none>
2026-04-15T14:29:27.982 [DEBUG] [Thread-20521] [transport.py] [_log()] kex follows: False
2026-04-15T14:29:27.982 [DEBUG] [Thread-20521] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:29:27.982 [DEBUG] [Thread-20521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:29:27.983 [DEBUG] [Thread-20521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:29:27.983 [DEBUG] [Thread-20521] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:29:27.983 [DEBUG] [Thread-20521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:29:27.983 [DEBUG] [Thread-20521] [transport.py] [_log()] Compression: none
2026-04-15T14:29:27.983 [DEBUG] [Thread-20521] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:29:28.001 [DEBUG] [Thread-20521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:29:28.001 [DEBUG] [Thread-20521] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:29:28.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:29:28.002 [DEBUG] [Thread-20521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:29:28.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:29:28.003 [DEBUG] [Thread-20521] [transport.py] [_log()] userauth is OK
2026-04-15T14:29:28.003 [DEBUG] [Thread-20521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:29:28.003 [DEBUG] [Thread-20521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:29:28.003 [DEBUG] [Thread-20521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:29:28.004 [DEBUG] [Thread-20521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:29:28.028 [INFO] [Thread-20521] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:29:28.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:29:28.667 [DEBUG] [Thread-20521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:29:28.667 [DEBUG] [Thread-20521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:29:28.668 [DEBUG] [Thread-20521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:29:28.708 [DEBUG] [Thread-20521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:29:28.708 [DEBUG] [Thread-20521] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:29:28.711 [DEBUG] [Thread-20521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:29:28.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:29:28.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:29:28.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:29:28.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:29:28.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:29:28.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:29:28.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:29:28.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:29:28.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:29:28.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.520276 -999.00  +14.30   9.81     61   +6.90 1 2 1 1 1   888    0 7.14 14.64 ----- 12.2 9.8 354.9 20.1 19.8 -24.6 18.9 -24.4 19.3 -21.1 20.3 -22.0
2026-04-15T14:29:28.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:29:28.736 [DEBUG] [Thread-20521] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:29:28.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:29:28.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.520276
2026-04-15T14:29:28.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:29:28.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:29:28.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:29:28.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:29:28.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:29:28.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:29:09', tmtdew=8.55107, humidity=56.3737, cloud=0.0, wind=13.5169, temperature=14.0278, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:29:11.846', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:29:28.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:29:28.994 [DEBUG] [Thread-20524] [transport.py] [_log()] starting thread (client mode): 0xee904430
2026-04-15T14:29:28.994 [DEBUG] [Thread-20524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:29:29.008 [DEBUG] [Thread-20524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:29:29.008 [INFO] [Thread-20524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:29:29.015 [DEBUG] [Thread-20524] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:29:29.015 [DEBUG] [Thread-20524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:29:29.015 [DEBUG] [Thread-20524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:29:29.015 [DEBUG] [Thread-20524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:29:29.015 [DEBUG] [Thread-20524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:29:29.015 [DEBUG] [Thread-20524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:29:29.016 [DEBUG] [Thread-20524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:29:29.016 [DEBUG] [Thread-20524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:29:29.016 [DEBUG] [Thread-20524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:29:29.016 [DEBUG] [Thread-20524] [transport.py] [_log()] client lang: <none>
2026-04-15T14:29:29.016 [DEBUG] [Thread-20524] [transport.py] [_log()] server lang: <none>
2026-04-15T14:29:29.016 [DEBUG] [Thread-20524] [transport.py] [_log()] kex follows: False
2026-04-15T14:29:29.016 [DEBUG] [Thread-20524] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:29:29.016 [DEBUG] [Thread-20524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:29:29.016 [DEBUG] [Thread-20524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:29:29.016 [DEBUG] [Thread-20524] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:29:29.016 [DEBUG] [Thread-20524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:29:29.017 [DEBUG] [Thread-20524] [transport.py] [_log()] Compression: none
2026-04-15T14:29:29.017 [DEBUG] [Thread-20524] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:29:29.074 [DEBUG] [Thread-20524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:29:29.075 [DEBUG] [Thread-20524] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:29:29.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:29:29.075 [DEBUG] [Thread-20524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:29:29.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:29:29.131 [DEBUG] [Thread-20524] [transport.py] [_log()] userauth is OK
2026-04-15T14:29:29.131 [DEBUG] [Thread-20524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:29:29.132 [DEBUG] [Thread-20524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:29:29.132 [DEBUG] [Thread-20524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:29:29.132 [DEBUG] [Thread-20524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:29:29.160 [INFO] [Thread-20524] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:29:29.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:29:29.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:29:29.978 [DEBUG] [Thread-20524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:29:29.979 [DEBUG] [Thread-20524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:29:30.026 [DEBUG] [Thread-20524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:29:30.026 [DEBUG] [Thread-20524] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:29:30.035 [DEBUG] [Thread-20524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:29:30.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:29:30.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')
2026-04-15T14:29:30.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
2026-04-15T14:29:30.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:29:30.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:29:30.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:29:30.070 [DEBUG] [Thread-20524] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:29:40.547 [DEBUG] [Thread-20526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:29:55.592 [DEBUG] [Thread-20527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:30:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:30:00.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:30:00.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:30:01.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 29, 45), 9.21405, 54.0183, 0.0, 11.6107, 15.0208, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:30:01.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:29:45
2026-04-15T14:30:01.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:30:02.317 [DEBUG] [Thread-20528] [transport.py] [_log()] starting thread (client mode): 0xf13cb4c0
2026-04-15T14:30:02.317 [DEBUG] [Thread-20528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:30:02.339 [DEBUG] [Thread-20528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:30:02.339 [INFO] [Thread-20528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:30:02.342 [DEBUG] [Thread-20528] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:30:02.342 [DEBUG] [Thread-20528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:30:02.342 [DEBUG] [Thread-20528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] client lang: <none>
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] server lang: <none>
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] kex follows: False
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] Compression: none
2026-04-15T14:30:02.343 [DEBUG] [Thread-20528] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:30:02.358 [DEBUG] [Thread-20528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:30:02.358 [DEBUG] [Thread-20528] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:30:02.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:30:02.358 [DEBUG] [Thread-20528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:30:02.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:30:02.359 [DEBUG] [Thread-20528] [transport.py] [_log()] userauth is OK
2026-04-15T14:30:02.359 [DEBUG] [Thread-20528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:30:02.359 [DEBUG] [Thread-20528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:30:02.359 [DEBUG] [Thread-20528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:30:02.359 [DEBUG] [Thread-20528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:30:02.372 [INFO] [Thread-20528] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:30:02.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:30:02.916 [DEBUG] [Thread-20528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:30:02.916 [DEBUG] [Thread-20528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:30:02.917 [DEBUG] [Thread-20528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:30:02.957 [DEBUG] [Thread-20528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:30:02.958 [DEBUG] [Thread-20528] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:30:02.960 [DEBUG] [Thread-20528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:30:02.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:30:02.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:30:02.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:30:02.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:30:03.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:30:03.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:30:03.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:30:03.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:30:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:30:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.520623 -999.00  +14.40  14.82     60   +7.00 1 1 1 1 1   888    0 7.30 16.15 ----- 9.5 14.8 329.0 21.4 19.9 -25.4 18.9 -25.1 19.4 -21.8 20.4 -22.3
2026-04-15T14:30:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:30:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:30:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.520623
2026-04-15T14:30:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:30:03.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:30:03.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:30:03.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:30:03.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:30:03.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:29:45', tmtdew=9.21405, humidity=54.0183, cloud=0.0, wind=11.6107, temperature=15.0208, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:29:41.827', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:30:03.007 [DEBUG] [Thread-20528] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:30:03.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:30:03.208 [DEBUG] [Thread-20531] [transport.py] [_log()] starting thread (client mode): 0xf13651e0
2026-04-15T14:30:03.208 [DEBUG] [Thread-20531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:30:03.224 [DEBUG] [Thread-20531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:30:03.224 [INFO] [Thread-20531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:30:03.232 [DEBUG] [Thread-20531] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:30:03.232 [DEBUG] [Thread-20531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:30:03.232 [DEBUG] [Thread-20531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:30:03.232 [DEBUG] [Thread-20531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:30:03.232 [DEBUG] [Thread-20531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:30:03.232 [DEBUG] [Thread-20531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:30:03.232 [DEBUG] [Thread-20531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:30:03.232 [DEBUG] [Thread-20531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:30:03.233 [DEBUG] [Thread-20531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:30:03.233 [DEBUG] [Thread-20531] [transport.py] [_log()] client lang: <none>
2026-04-15T14:30:03.233 [DEBUG] [Thread-20531] [transport.py] [_log()] server lang: <none>
2026-04-15T14:30:03.233 [DEBUG] [Thread-20531] [transport.py] [_log()] kex follows: False
2026-04-15T14:30:03.233 [DEBUG] [Thread-20531] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:30:03.233 [DEBUG] [Thread-20531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:30:03.233 [DEBUG] [Thread-20531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:30:03.233 [DEBUG] [Thread-20531] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:30:03.233 [DEBUG] [Thread-20531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:30:03.233 [DEBUG] [Thread-20531] [transport.py] [_log()] Compression: none
2026-04-15T14:30:03.233 [DEBUG] [Thread-20531] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:30:03.291 [DEBUG] [Thread-20531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:30:03.291 [DEBUG] [Thread-20531] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:30:03.291 [DEBUG] [Thread-20531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:30:03.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:30:03.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:30:03.347 [DEBUG] [Thread-20531] [transport.py] [_log()] userauth is OK
2026-04-15T14:30:03.347 [DEBUG] [Thread-20531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:30:03.347 [DEBUG] [Thread-20531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:30:03.347 [DEBUG] [Thread-20531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:30:03.347 [DEBUG] [Thread-20531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:30:03.365 [INFO] [Thread-20531] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:30:03.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:30:03.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:30:03.626 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:30:03.628 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:30:04.266 [DEBUG] [Thread-20531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:30:04.267 [DEBUG] [Thread-20531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:30:04.314 [DEBUG] [Thread-20531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:30:04.314 [DEBUG] [Thread-20531] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:30:04.323 [DEBUG] [Thread-20531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:30:04.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:30:04.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')
2026-04-15T14:30:04.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') -> 00000000
2026-04-15T14:30:04.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:30:04.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:30:04.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:30:04.357 [DEBUG] [Thread-20531] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:30:10.624 [DEBUG] [Thread-20533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:30:25.669 [DEBUG] [Thread-20534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:30:27.387 [DEBUG] [Thread-20535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:30:34.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:30:34.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:30:34.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
2026-04-15T14:30:35.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 30, 20), 8.95935, 54.9623, 0.0, 15.1758, 14.4267, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:30:35.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:30:20
2026-04-15T14:30:36.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:30:36.530 [DEBUG] [Thread-20536] [transport.py] [_log()] starting thread (client mode): 0xf1364a60
2026-04-15T14:30:36.530 [DEBUG] [Thread-20536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:30:36.550 [DEBUG] [Thread-20536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:30:36.550 [INFO] [Thread-20536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:30:36.553 [DEBUG] [Thread-20536] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:30:36.554 [DEBUG] [Thread-20536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:30:36.554 [DEBUG] [Thread-20536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:30:36.554 [DEBUG] [Thread-20536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:30:36.554 [DEBUG] [Thread-20536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:30:36.554 [DEBUG] [Thread-20536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:30:36.554 [DEBUG] [Thread-20536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:30:36.554 [DEBUG] [Thread-20536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:30:36.554 [DEBUG] [Thread-20536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:30:36.554 [DEBUG] [Thread-20536] [transport.py] [_log()] client lang: <none>
2026-04-15T14:30:36.554 [DEBUG] [Thread-20536] [transport.py] [_log()] server lang: <none>
2026-04-15T14:30:36.554 [DEBUG] [Thread-20536] [transport.py] [_log()] kex follows: False
2026-04-15T14:30:36.554 [DEBUG] [Thread-20536] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:30:36.555 [DEBUG] [Thread-20536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:30:36.555 [DEBUG] [Thread-20536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:30:36.555 [DEBUG] [Thread-20536] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:30:36.555 [DEBUG] [Thread-20536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:30:36.555 [DEBUG] [Thread-20536] [transport.py] [_log()] Compression: none
2026-04-15T14:30:36.555 [DEBUG] [Thread-20536] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:30:36.572 [DEBUG] [Thread-20536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:30:36.572 [DEBUG] [Thread-20536] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:30:36.572 [DEBUG] [Thread-20536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:30:36.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:30:36.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:30:36.573 [DEBUG] [Thread-20536] [transport.py] [_log()] userauth is OK
2026-04-15T14:30:36.573 [DEBUG] [Thread-20536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:30:36.573 [DEBUG] [Thread-20536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:30:36.574 [DEBUG] [Thread-20536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:30:36.574 [DEBUG] [Thread-20536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:30:36.608 [INFO] [Thread-20536] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:30:36.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:30:37.206 [DEBUG] [Thread-20536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:30:37.206 [DEBUG] [Thread-20536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:30:37.207 [DEBUG] [Thread-20536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:30:37.247 [DEBUG] [Thread-20536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:30:37.247 [DEBUG] [Thread-20536] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:30:37.250 [DEBUG] [Thread-20536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:30:37.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:30:37.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:30:37.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:30:37.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:30:37.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:30:37.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:30:37.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:30:37.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:30:37.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:30:37.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.520970 -999.00  +14.30  19.74     60   +6.80 1 1 1 1 1   888    0 7.28 19.37 ----- 16.5 19.7 317.6 21.5 19.9 -25.6 19.0 -25.1 19.4 -23.1 20.4 -23.1
2026-04-15T14:30:37.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:30:37.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:30:37.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.520970
2026-04-15T14:30:37.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:30:37.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:30:37.276 [DEBUG] [Thread-20536] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:30:37.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:30:37.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:30:37.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:30:37.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:30:20', tmtdew=8.95935, humidity=54.9623, cloud=0.0, wind=15.1758, temperature=14.4267, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:30:11.808', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:30:37.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:30:37.537 [DEBUG] [Thread-20539] [transport.py] [_log()] starting thread (client mode): 0xee98c820
2026-04-15T14:30:37.537 [DEBUG] [Thread-20539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:30:37.552 [DEBUG] [Thread-20539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:30:37.552 [INFO] [Thread-20539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:30:37.565 [DEBUG] [Thread-20539] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:30:37.565 [DEBUG] [Thread-20539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:30:37.566 [DEBUG] [Thread-20539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:30:37.566 [DEBUG] [Thread-20539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:30:37.566 [DEBUG] [Thread-20539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:30:37.566 [DEBUG] [Thread-20539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:30:37.566 [DEBUG] [Thread-20539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:30:37.566 [DEBUG] [Thread-20539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:30:37.566 [DEBUG] [Thread-20539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:30:37.566 [DEBUG] [Thread-20539] [transport.py] [_log()] client lang: <none>
2026-04-15T14:30:37.566 [DEBUG] [Thread-20539] [transport.py] [_log()] server lang: <none>
2026-04-15T14:30:37.567 [DEBUG] [Thread-20539] [transport.py] [_log()] kex follows: False
2026-04-15T14:30:37.567 [DEBUG] [Thread-20539] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:30:37.567 [DEBUG] [Thread-20539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:30:37.567 [DEBUG] [Thread-20539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:30:37.567 [DEBUG] [Thread-20539] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:30:37.567 [DEBUG] [Thread-20539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:30:37.567 [DEBUG] [Thread-20539] [transport.py] [_log()] Compression: none
2026-04-15T14:30:37.568 [DEBUG] [Thread-20539] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:30:37.618 [DEBUG] [Thread-20539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:30:37.619 [DEBUG] [Thread-20539] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:30:37.619 [DEBUG] [Thread-20539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:30:37.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:30:37.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:30:37.680 [DEBUG] [Thread-20539] [transport.py] [_log()] userauth is OK
2026-04-15T14:30:37.680 [DEBUG] [Thread-20539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:30:37.680 [DEBUG] [Thread-20539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:30:37.680 [DEBUG] [Thread-20539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:30:37.680 [DEBUG] [Thread-20539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:30:37.706 [INFO] [Thread-20539] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:30:37.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:30:37.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:30:38.546 [DEBUG] [Thread-20539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:30:38.547 [DEBUG] [Thread-20539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:30:38.595 [DEBUG] [Thread-20539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:30:38.595 [DEBUG] [Thread-20539] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:30:38.604 [DEBUG] [Thread-20539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:30:38.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:30:38.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')
2026-04-15T14:30:38.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
2026-04-15T14:30:38.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:30:38.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:30:38.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:30:38.643 [DEBUG] [Thread-20539] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:30:40.700 [DEBUG] [Thread-20541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:30:55.746 [DEBUG] [Thread-20542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:31:03.768 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:31:03.770 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:31:08.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:31:08.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:31:08.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
2026-04-15T14:31:09.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 30, 56), 9.18984, 53.9652, 0.0, 14.3122, 14.2938, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:31:09.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:30:56
2026-04-15T14:31:10.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:31:10.778 [DEBUG] [Thread-20543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:31:10.866 [DEBUG] [Thread-20544] [transport.py] [_log()] starting thread (client mode): 0xee98e4a0
2026-04-15T14:31:10.866 [DEBUG] [Thread-20544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:31:10.886 [DEBUG] [Thread-20544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:31:10.886 [INFO] [Thread-20544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:31:10.889 [DEBUG] [Thread-20544] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:31:10.889 [DEBUG] [Thread-20544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:31:10.889 [DEBUG] [Thread-20544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:31:10.889 [DEBUG] [Thread-20544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:31:10.890 [DEBUG] [Thread-20544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:31:10.890 [DEBUG] [Thread-20544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:31:10.890 [DEBUG] [Thread-20544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:31:10.890 [DEBUG] [Thread-20544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:31:10.890 [DEBUG] [Thread-20544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:31:10.890 [DEBUG] [Thread-20544] [transport.py] [_log()] client lang: <none>
2026-04-15T14:31:10.890 [DEBUG] [Thread-20544] [transport.py] [_log()] server lang: <none>
2026-04-15T14:31:10.890 [DEBUG] [Thread-20544] [transport.py] [_log()] kex follows: False
2026-04-15T14:31:10.891 [DEBUG] [Thread-20544] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:31:10.891 [DEBUG] [Thread-20544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:31:10.891 [DEBUG] [Thread-20544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:31:10.891 [DEBUG] [Thread-20544] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:31:10.891 [DEBUG] [Thread-20544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:31:10.891 [DEBUG] [Thread-20544] [transport.py] [_log()] Compression: none
2026-04-15T14:31:10.891 [DEBUG] [Thread-20544] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:31:10.909 [DEBUG] [Thread-20544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:31:10.909 [DEBUG] [Thread-20544] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:31:10.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:31:10.910 [DEBUG] [Thread-20544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:31:10.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:31:10.951 [DEBUG] [Thread-20544] [transport.py] [_log()] userauth is OK
2026-04-15T14:31:10.951 [DEBUG] [Thread-20544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:31:10.951 [DEBUG] [Thread-20544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:31:10.952 [DEBUG] [Thread-20544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:31:10.952 [DEBUG] [Thread-20544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:31:10.988 [INFO] [Thread-20544] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:31:10.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:31:11.601 [DEBUG] [Thread-20544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:31:11.601 [DEBUG] [Thread-20544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:31:11.602 [DEBUG] [Thread-20544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:31:11.642 [DEBUG] [Thread-20544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:31:11.642 [DEBUG] [Thread-20544] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:31:11.645 [DEBUG] [Thread-20544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:31:11.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:31:11.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:31:11.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:31:11.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:31:11.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:31:11.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:31:11.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:31:11.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:31:11.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:31:11.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.521317 -999.00  +14.20  16.78     62   +7.00 1 1 1 1 1   888    0 7.46 23.02 ----- 14.4 16.8 302.8 21.2 19.9 -26.6 19.0 -24.2 19.4 -23.4 -999.0 -999.0
2026-04-15T14:31:11.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:31:11.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:31:11.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.521317
2026-04-15T14:31:11.668 [DEBUG] [Thread-20544] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:31:11.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:31:11.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:31:11.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:31:11.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:31:11.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:31:11.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:30:56', tmtdew=9.18984, humidity=53.9652, cloud=0.0, wind=14.3122, temperature=14.2938, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:30:41.789', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:31:11.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:31:11.926 [DEBUG] [Thread-20547] [transport.py] [_log()] starting thread (client mode): 0xee988430
2026-04-15T14:31:11.926 [DEBUG] [Thread-20547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:31:11.940 [DEBUG] [Thread-20547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:31:11.940 [INFO] [Thread-20547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:31:11.947 [DEBUG] [Thread-20547] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:31:11.948 [DEBUG] [Thread-20547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:31:11.948 [DEBUG] [Thread-20547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:31:11.948 [DEBUG] [Thread-20547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:31:11.948 [DEBUG] [Thread-20547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:31:11.948 [DEBUG] [Thread-20547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:31:11.948 [DEBUG] [Thread-20547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:31:11.948 [DEBUG] [Thread-20547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:31:11.948 [DEBUG] [Thread-20547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:31:11.948 [DEBUG] [Thread-20547] [transport.py] [_log()] client lang: <none>
2026-04-15T14:31:11.948 [DEBUG] [Thread-20547] [transport.py] [_log()] server lang: <none>
2026-04-15T14:31:11.948 [DEBUG] [Thread-20547] [transport.py] [_log()] kex follows: False
2026-04-15T14:31:11.948 [DEBUG] [Thread-20547] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:31:11.949 [DEBUG] [Thread-20547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:31:11.949 [DEBUG] [Thread-20547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:31:11.949 [DEBUG] [Thread-20547] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:31:11.949 [DEBUG] [Thread-20547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:31:11.949 [DEBUG] [Thread-20547] [transport.py] [_log()] Compression: none
2026-04-15T14:31:11.949 [DEBUG] [Thread-20547] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:31:12.007 [DEBUG] [Thread-20547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:31:12.008 [DEBUG] [Thread-20547] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:31:12.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:31:12.008 [DEBUG] [Thread-20547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:31:12.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:31:12.063 [DEBUG] [Thread-20547] [transport.py] [_log()] userauth is OK
2026-04-15T14:31:12.063 [DEBUG] [Thread-20547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:31:12.064 [DEBUG] [Thread-20547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:31:12.064 [DEBUG] [Thread-20547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:31:12.064 [DEBUG] [Thread-20547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:31:12.089 [INFO] [Thread-20547] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:31:12.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:31:12.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:31:12.892 [DEBUG] [Thread-20547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:31:12.892 [DEBUG] [Thread-20547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:31:12.940 [DEBUG] [Thread-20547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:31:12.940 [DEBUG] [Thread-20547] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:31:12.949 [DEBUG] [Thread-20547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:31:12.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:31:12.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')
2026-04-15T14:31:12.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T14:31:12.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:31:12.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:31:12.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:31:12.983 [DEBUG] [Thread-20547] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:31:25.807 [DEBUG] [Thread-20549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:31:27.491 [DEBUG] [Thread-20550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:31:40.851 [DEBUG] [Thread-20551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:31:42.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:31:42.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:31:42.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
2026-04-15T14:31:44.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 31, 31), 9.01806, 54.5617, 0.0, 18.1753, 14.1778, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:31:44.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:31:31
2026-04-15T14:31:44.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:31:45.116 [DEBUG] [Thread-20552] [transport.py] [_log()] starting thread (client mode): 0xee98a320
2026-04-15T14:31:45.116 [DEBUG] [Thread-20552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:31:45.130 [DEBUG] [Thread-20552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:31:45.130 [INFO] [Thread-20552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:31:45.134 [DEBUG] [Thread-20552] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:31:45.134 [DEBUG] [Thread-20552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:31:45.134 [DEBUG] [Thread-20552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:31:45.134 [DEBUG] [Thread-20552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:31:45.134 [DEBUG] [Thread-20552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:31:45.134 [DEBUG] [Thread-20552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:31:45.134 [DEBUG] [Thread-20552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:31:45.134 [DEBUG] [Thread-20552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:31:45.135 [DEBUG] [Thread-20552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:31:45.135 [DEBUG] [Thread-20552] [transport.py] [_log()] client lang: <none>
2026-04-15T14:31:45.135 [DEBUG] [Thread-20552] [transport.py] [_log()] server lang: <none>
2026-04-15T14:31:45.135 [DEBUG] [Thread-20552] [transport.py] [_log()] kex follows: False
2026-04-15T14:31:45.135 [DEBUG] [Thread-20552] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:31:45.135 [DEBUG] [Thread-20552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:31:45.135 [DEBUG] [Thread-20552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:31:45.135 [DEBUG] [Thread-20552] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:31:45.135 [DEBUG] [Thread-20552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:31:45.135 [DEBUG] [Thread-20552] [transport.py] [_log()] Compression: none
2026-04-15T14:31:45.135 [DEBUG] [Thread-20552] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:31:45.148 [DEBUG] [Thread-20552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:31:45.149 [DEBUG] [Thread-20552] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:31:45.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:31:45.149 [DEBUG] [Thread-20552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:31:45.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:31:45.150 [DEBUG] [Thread-20552] [transport.py] [_log()] userauth is OK
2026-04-15T14:31:45.150 [DEBUG] [Thread-20552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:31:45.150 [DEBUG] [Thread-20552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:31:45.150 [DEBUG] [Thread-20552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:31:45.151 [DEBUG] [Thread-20552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:31:45.174 [INFO] [Thread-20552] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:31:45.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:31:45.808 [DEBUG] [Thread-20552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:31:45.809 [DEBUG] [Thread-20552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:31:45.809 [DEBUG] [Thread-20552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:31:45.850 [DEBUG] [Thread-20552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:31:45.850 [DEBUG] [Thread-20552] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:31:45.853 [DEBUG] [Thread-20552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:31:45.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:31:45.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:31:45.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:31:45.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:31:45.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:31:45.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:31:45.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:31:45.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:31:45.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:31:45.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.521665 -999.00  +14.10  13.48     60   +6.60 1 1 1 1 1   888    0 7.39 24.49 ----- 18.1 13.5 301.7 22.8 19.7 -27.0 18.9 -25.4 19.3 -23.4 20.4 -25.1
2026-04-15T14:31:45.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:31:45.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:31:45.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.521665
2026-04-15T14:31:45.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:31:45.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:31:45.878 [DEBUG] [Thread-20552] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:31:45.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:31:45.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:31:45.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:31:45.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:31:31', tmtdew=9.01806, humidity=54.5617, cloud=0.0, wind=18.1753, temperature=14.1778, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:31:11.856', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:31:46.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:31:46.136 [DEBUG] [Thread-20555] [transport.py] [_log()] starting thread (client mode): 0xee9e4910
2026-04-15T14:31:46.137 [DEBUG] [Thread-20555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:31:46.150 [DEBUG] [Thread-20555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:31:46.150 [INFO] [Thread-20555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:31:46.157 [DEBUG] [Thread-20555] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:31:46.157 [DEBUG] [Thread-20555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:31:46.157 [DEBUG] [Thread-20555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:31:46.157 [DEBUG] [Thread-20555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:31:46.157 [DEBUG] [Thread-20555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:31:46.157 [DEBUG] [Thread-20555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:31:46.158 [DEBUG] [Thread-20555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:31:46.158 [DEBUG] [Thread-20555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:31:46.158 [DEBUG] [Thread-20555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:31:46.158 [DEBUG] [Thread-20555] [transport.py] [_log()] client lang: <none>
2026-04-15T14:31:46.158 [DEBUG] [Thread-20555] [transport.py] [_log()] server lang: <none>
2026-04-15T14:31:46.158 [DEBUG] [Thread-20555] [transport.py] [_log()] kex follows: False
2026-04-15T14:31:46.158 [DEBUG] [Thread-20555] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:31:46.158 [DEBUG] [Thread-20555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:31:46.158 [DEBUG] [Thread-20555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:31:46.158 [DEBUG] [Thread-20555] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:31:46.158 [DEBUG] [Thread-20555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:31:46.158 [DEBUG] [Thread-20555] [transport.py] [_log()] Compression: none
2026-04-15T14:31:46.159 [DEBUG] [Thread-20555] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:31:46.218 [DEBUG] [Thread-20555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:31:46.219 [DEBUG] [Thread-20555] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:31:46.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:31:46.219 [DEBUG] [Thread-20555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:31:46.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:31:46.275 [DEBUG] [Thread-20555] [transport.py] [_log()] userauth is OK
2026-04-15T14:31:46.275 [DEBUG] [Thread-20555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:31:46.275 [DEBUG] [Thread-20555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:31:46.276 [DEBUG] [Thread-20555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:31:46.276 [DEBUG] [Thread-20555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:31:46.295 [INFO] [Thread-20555] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:31:46.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:31:46.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:31:47.145 [DEBUG] [Thread-20555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:31:47.145 [DEBUG] [Thread-20555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:31:47.193 [DEBUG] [Thread-20555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:31:47.193 [DEBUG] [Thread-20555] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:31:47.202 [DEBUG] [Thread-20555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:31:47.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:31:47.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')
2026-04-15T14:31:47.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') -> 00000000
2026-04-15T14:31:47.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:31:47.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:31:47.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:31:47.237 [DEBUG] [Thread-20555] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:31:55.885 [DEBUG] [Thread-20557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:32:03.914 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:32:03.915 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:32:10.927 [DEBUG] [Thread-20558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:32:17.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:32:17.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:32:17.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
2026-04-15T14:32:18.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 32, 7), 8.92204, 54.9097, 0.0, 21.5093, 14.1447, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:32:18.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:32:07
2026-04-15T14:32:18.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:32:19.358 [DEBUG] [Thread-20559] [transport.py] [_log()] starting thread (client mode): 0xee9046d0
2026-04-15T14:32:19.359 [DEBUG] [Thread-20559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:32:19.379 [DEBUG] [Thread-20559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:32:19.379 [INFO] [Thread-20559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:32:19.381 [DEBUG] [Thread-20559] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:32:19.382 [DEBUG] [Thread-20559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:32:19.382 [DEBUG] [Thread-20559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:32:19.382 [DEBUG] [Thread-20559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:32:19.382 [DEBUG] [Thread-20559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:32:19.382 [DEBUG] [Thread-20559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:32:19.382 [DEBUG] [Thread-20559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:32:19.382 [DEBUG] [Thread-20559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:32:19.382 [DEBUG] [Thread-20559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:32:19.382 [DEBUG] [Thread-20559] [transport.py] [_log()] client lang: <none>
2026-04-15T14:32:19.382 [DEBUG] [Thread-20559] [transport.py] [_log()] server lang: <none>
2026-04-15T14:32:19.382 [DEBUG] [Thread-20559] [transport.py] [_log()] kex follows: False
2026-04-15T14:32:19.383 [DEBUG] [Thread-20559] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:32:19.383 [DEBUG] [Thread-20559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:32:19.383 [DEBUG] [Thread-20559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:32:19.383 [DEBUG] [Thread-20559] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:32:19.383 [DEBUG] [Thread-20559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:32:19.383 [DEBUG] [Thread-20559] [transport.py] [_log()] Compression: none
2026-04-15T14:32:19.383 [DEBUG] [Thread-20559] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:32:19.399 [DEBUG] [Thread-20559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:32:19.400 [DEBUG] [Thread-20559] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:32:19.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:32:19.400 [DEBUG] [Thread-20559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:32:19.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:32:19.401 [DEBUG] [Thread-20559] [transport.py] [_log()] userauth is OK
2026-04-15T14:32:19.401 [DEBUG] [Thread-20559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:32:19.402 [DEBUG] [Thread-20559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:32:19.402 [DEBUG] [Thread-20559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:32:19.402 [DEBUG] [Thread-20559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:32:19.439 [INFO] [Thread-20559] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:32:19.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:32:20.084 [DEBUG] [Thread-20559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:32:20.085 [DEBUG] [Thread-20559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:32:20.085 [DEBUG] [Thread-20559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:32:20.125 [DEBUG] [Thread-20559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:32:20.125 [DEBUG] [Thread-20559] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:32:20.128 [DEBUG] [Thread-20559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:32:20.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:32:20.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:32:20.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:32:20.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:32:20.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:32:20.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:32:20.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:32:20.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:32:20.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:32:20.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.522012 -999.00  +13.80  17.41     61   +6.50 1 1 1 1 1   888    0 7.72 28.74 ----- 20.0 17.4 291.6 22.2 19.6 -26.0 18.9 -25.6 19.1 -24.6 20.2 -24.4
2026-04-15T14:32:20.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:32:20.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:32:20.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.522012
2026-04-15T14:32:20.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:32:20.153 [DEBUG] [Thread-20559] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:32:20.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:32:20.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:32:20.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:32:20.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:32:20.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:32:07', tmtdew=8.92204, humidity=54.9097, cloud=0.0, wind=21.5093, temperature=14.1447, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:31:41.837', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:32:20.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:32:20.411 [DEBUG] [Thread-20562] [transport.py] [_log()] starting thread (client mode): 0xf13edb40
2026-04-15T14:32:20.411 [DEBUG] [Thread-20562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:32:20.425 [DEBUG] [Thread-20562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:32:20.425 [INFO] [Thread-20562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:32:20.433 [DEBUG] [Thread-20562] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:32:20.433 [DEBUG] [Thread-20562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:32:20.434 [DEBUG] [Thread-20562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:32:20.434 [DEBUG] [Thread-20562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:32:20.434 [DEBUG] [Thread-20562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:32:20.434 [DEBUG] [Thread-20562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:32:20.434 [DEBUG] [Thread-20562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:32:20.434 [DEBUG] [Thread-20562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:32:20.434 [DEBUG] [Thread-20562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:32:20.434 [DEBUG] [Thread-20562] [transport.py] [_log()] client lang: <none>
2026-04-15T14:32:20.434 [DEBUG] [Thread-20562] [transport.py] [_log()] server lang: <none>
2026-04-15T14:32:20.434 [DEBUG] [Thread-20562] [transport.py] [_log()] kex follows: False
2026-04-15T14:32:20.434 [DEBUG] [Thread-20562] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:32:20.434 [DEBUG] [Thread-20562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:32:20.435 [DEBUG] [Thread-20562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:32:20.435 [DEBUG] [Thread-20562] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:32:20.435 [DEBUG] [Thread-20562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:32:20.435 [DEBUG] [Thread-20562] [transport.py] [_log()] Compression: none
2026-04-15T14:32:20.435 [DEBUG] [Thread-20562] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:32:20.490 [DEBUG] [Thread-20562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:32:20.490 [DEBUG] [Thread-20562] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:32:20.491 [DEBUG] [Thread-20562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:32:20.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:32:20.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:32:20.547 [DEBUG] [Thread-20562] [transport.py] [_log()] userauth is OK
2026-04-15T14:32:20.547 [DEBUG] [Thread-20562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:32:20.548 [DEBUG] [Thread-20562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:32:20.548 [DEBUG] [Thread-20562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:32:20.548 [DEBUG] [Thread-20562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:32:20.572 [INFO] [Thread-20562] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:32:20.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:32:20.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:32:21.407 [DEBUG] [Thread-20562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:32:21.407 [DEBUG] [Thread-20562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:32:21.455 [DEBUG] [Thread-20562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:32:21.455 [DEBUG] [Thread-20562] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:32:21.464 [DEBUG] [Thread-20562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:32:21.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:32:21.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')
2026-04-15T14:32:21.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
2026-04-15T14:32:21.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:32:21.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:32:21.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:32:21.498 [DEBUG] [Thread-20562] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:32:25.958 [DEBUG] [Thread-20564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:32:27.569 [DEBUG] [Thread-20565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:32:40.997 [DEBUG] [Thread-20566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:32:51.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:32:51.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:32:51.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
2026-04-15T14:32:52.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 32, 42), 8.99761, 54.7473, 0.0, 22.3006, 14.6893, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:32:52.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:32:42
2026-04-15T14:32:53.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:32:53.685 [DEBUG] [Thread-20567] [transport.py] [_log()] starting thread (client mode): 0xf13c81f0
2026-04-15T14:32:53.686 [DEBUG] [Thread-20567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:32:53.707 [DEBUG] [Thread-20567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:32:53.707 [INFO] [Thread-20567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:32:53.711 [DEBUG] [Thread-20567] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:32:53.711 [DEBUG] [Thread-20567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:32:53.711 [DEBUG] [Thread-20567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:32:53.711 [DEBUG] [Thread-20567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:32:53.711 [DEBUG] [Thread-20567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:32:53.711 [DEBUG] [Thread-20567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:32:53.711 [DEBUG] [Thread-20567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:32:53.711 [DEBUG] [Thread-20567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:32:53.711 [DEBUG] [Thread-20567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:32:53.711 [DEBUG] [Thread-20567] [transport.py] [_log()] client lang: <none>
2026-04-15T14:32:53.711 [DEBUG] [Thread-20567] [transport.py] [_log()] server lang: <none>
2026-04-15T14:32:53.712 [DEBUG] [Thread-20567] [transport.py] [_log()] kex follows: False
2026-04-15T14:32:53.712 [DEBUG] [Thread-20567] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:32:53.712 [DEBUG] [Thread-20567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:32:53.712 [DEBUG] [Thread-20567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:32:53.712 [DEBUG] [Thread-20567] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:32:53.712 [DEBUG] [Thread-20567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:32:53.712 [DEBUG] [Thread-20567] [transport.py] [_log()] Compression: none
2026-04-15T14:32:53.712 [DEBUG] [Thread-20567] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:32:53.728 [DEBUG] [Thread-20567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:32:53.728 [DEBUG] [Thread-20567] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:32:53.729 [DEBUG] [Thread-20567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:32:53.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:32:53.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:32:53.730 [DEBUG] [Thread-20567] [transport.py] [_log()] userauth is OK
2026-04-15T14:32:53.730 [DEBUG] [Thread-20567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:32:53.730 [DEBUG] [Thread-20567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:32:53.730 [DEBUG] [Thread-20567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:32:53.731 [DEBUG] [Thread-20567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:32:53.755 [INFO] [Thread-20567] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:32:53.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:32:54.399 [DEBUG] [Thread-20567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:32:54.399 [DEBUG] [Thread-20567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:32:54.399 [DEBUG] [Thread-20567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:32:54.439 [DEBUG] [Thread-20567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:32:54.440 [DEBUG] [Thread-20567] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:32:54.442 [DEBUG] [Thread-20567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:32:54.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:32:54.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:32:54.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:32:54.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:32:54.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:32:54.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:32:54.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:32:54.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:32:54.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:32:54.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.522706 -999.00  +13.50  13.95     62   +6.40 1 2 1 1 1   888    0 7.77 28.94 ----- 12.4 13.9 301.8 19.8 19.9 -24.0 19.1 -24.1 19.3 -20.4 20.2 -20.6
2026-04-15T14:32:54.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:32:54.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:32:54.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.522706
2026-04-15T14:32:54.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:32:54.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:32:54.462 [DEBUG] [Thread-20567] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:32:54.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:32:54.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:32:54.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:32:54.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:32:42', tmtdew=8.99761, humidity=54.7473, cloud=0.0, wind=22.3006, temperature=14.6893, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:32:41.798', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:32:54.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:32:54.679 [DEBUG] [Thread-20570] [transport.py] [_log()] starting thread (client mode): 0xee9e62f0
2026-04-15T14:32:54.679 [DEBUG] [Thread-20570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:32:54.694 [DEBUG] [Thread-20570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:32:54.694 [INFO] [Thread-20570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:32:54.702 [DEBUG] [Thread-20570] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:32:54.702 [DEBUG] [Thread-20570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:32:54.702 [DEBUG] [Thread-20570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:32:54.702 [DEBUG] [Thread-20570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:32:54.702 [DEBUG] [Thread-20570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:32:54.702 [DEBUG] [Thread-20570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:32:54.702 [DEBUG] [Thread-20570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:32:54.702 [DEBUG] [Thread-20570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:32:54.702 [DEBUG] [Thread-20570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:32:54.702 [DEBUG] [Thread-20570] [transport.py] [_log()] client lang: <none>
2026-04-15T14:32:54.702 [DEBUG] [Thread-20570] [transport.py] [_log()] server lang: <none>
2026-04-15T14:32:54.702 [DEBUG] [Thread-20570] [transport.py] [_log()] kex follows: False
2026-04-15T14:32:54.702 [DEBUG] [Thread-20570] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:32:54.702 [DEBUG] [Thread-20570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:32:54.703 [DEBUG] [Thread-20570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:32:54.703 [DEBUG] [Thread-20570] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:32:54.703 [DEBUG] [Thread-20570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:32:54.703 [DEBUG] [Thread-20570] [transport.py] [_log()] Compression: none
2026-04-15T14:32:54.703 [DEBUG] [Thread-20570] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:32:54.759 [DEBUG] [Thread-20570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:32:54.759 [DEBUG] [Thread-20570] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:32:54.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:32:54.760 [DEBUG] [Thread-20570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:32:54.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:32:54.818 [DEBUG] [Thread-20570] [transport.py] [_log()] userauth is OK
2026-04-15T14:32:54.818 [DEBUG] [Thread-20570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:32:54.818 [DEBUG] [Thread-20570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:32:54.818 [DEBUG] [Thread-20570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:32:54.818 [DEBUG] [Thread-20570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:32:54.838 [INFO] [Thread-20570] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:32:54.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:32:54.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:32:55.672 [DEBUG] [Thread-20570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:32:55.672 [DEBUG] [Thread-20570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:32:55.720 [DEBUG] [Thread-20570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:32:55.720 [DEBUG] [Thread-20570] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:32:55.730 [DEBUG] [Thread-20570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:32:55.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:32:55.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')
2026-04-15T14:32:55.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
2026-04-15T14:32:55.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:32:55.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:32:55.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:32:55.774 [DEBUG] [Thread-20570] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:32:56.028 [DEBUG] [Thread-20572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:33:04.054 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:33:04.056 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:33:11.073 [DEBUG] [Thread-20573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:33:25.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:33:25.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:33:25.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
2026-04-15T14:33:26.105 [DEBUG] [Thread-20574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:33:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 33, 18), 8.53986, 55.9868, 0.0, 14.0807, 13.8112, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:33:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:33:18
2026-04-15T14:33:27.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:33:27.664 [DEBUG] [Thread-20575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:33:27.932 [DEBUG] [Thread-20576] [transport.py] [_log()] starting thread (client mode): 0xee9e7ca0
2026-04-15T14:33:27.932 [DEBUG] [Thread-20576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:33:27.953 [DEBUG] [Thread-20576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:33:27.953 [INFO] [Thread-20576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:33:27.956 [DEBUG] [Thread-20576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:33:27.956 [DEBUG] [Thread-20576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:33:27.956 [DEBUG] [Thread-20576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:33:27.956 [DEBUG] [Thread-20576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:33:27.956 [DEBUG] [Thread-20576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:33:27.956 [DEBUG] [Thread-20576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:33:27.956 [DEBUG] [Thread-20576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:33:27.956 [DEBUG] [Thread-20576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:33:27.957 [DEBUG] [Thread-20576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:33:27.957 [DEBUG] [Thread-20576] [transport.py] [_log()] client lang: <none>
2026-04-15T14:33:27.957 [DEBUG] [Thread-20576] [transport.py] [_log()] server lang: <none>
2026-04-15T14:33:27.957 [DEBUG] [Thread-20576] [transport.py] [_log()] kex follows: False
2026-04-15T14:33:27.957 [DEBUG] [Thread-20576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:33:27.957 [DEBUG] [Thread-20576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:33:27.957 [DEBUG] [Thread-20576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:33:27.957 [DEBUG] [Thread-20576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:33:27.957 [DEBUG] [Thread-20576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:33:27.957 [DEBUG] [Thread-20576] [transport.py] [_log()] Compression: none
2026-04-15T14:33:27.958 [DEBUG] [Thread-20576] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:33:27.973 [DEBUG] [Thread-20576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:33:27.974 [DEBUG] [Thread-20576] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:33:27.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:33:27.974 [DEBUG] [Thread-20576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:33:27.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:33:27.975 [DEBUG] [Thread-20576] [transport.py] [_log()] userauth is OK
2026-04-15T14:33:27.975 [DEBUG] [Thread-20576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:33:27.976 [DEBUG] [Thread-20576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:33:27.976 [DEBUG] [Thread-20576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:33:27.976 [DEBUG] [Thread-20576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:33:28.001 [INFO] [Thread-20576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:33:28.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:33:28.638 [DEBUG] [Thread-20576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:33:28.638 [DEBUG] [Thread-20576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:33:28.639 [DEBUG] [Thread-20576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:33:28.679 [DEBUG] [Thread-20576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:33:28.679 [DEBUG] [Thread-20576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:33:28.682 [DEBUG] [Thread-20576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:33:28.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:33:28.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:33:28.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:33:28.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:33:28.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:33:28.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:33:28.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:33:28.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:33:28.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:33:28.705 [DEBUG] [Thread-20576] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:33:28.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.523054 -999.00  +13.80  16.93     62   +6.80 1 2 1 1 1   888    0 7.67 27.65 ----- 16.4 16.9 307.0 19.8 20.1 -24.3 19.1 -23.8 19.4 -20.6 20.5 -20.6
2026-04-15T14:33:28.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:33:28.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:33:28.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.523054
2026-04-15T14:33:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:33:28.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:33:28.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:33:28.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:33:28.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:33:28.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:33:18', tmtdew=8.53986, humidity=55.9868, cloud=0.0, wind=14.0807, temperature=13.8112, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:33:11.866', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:33:28.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:33:28.969 [DEBUG] [Thread-20579] [transport.py] [_log()] starting thread (client mode): 0xee9e7c70
2026-04-15T14:33:28.969 [DEBUG] [Thread-20579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:33:28.983 [DEBUG] [Thread-20579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:33:28.983 [INFO] [Thread-20579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:33:28.991 [DEBUG] [Thread-20579] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:33:28.991 [DEBUG] [Thread-20579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:33:28.991 [DEBUG] [Thread-20579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:33:28.991 [DEBUG] [Thread-20579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:33:28.991 [DEBUG] [Thread-20579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:33:28.991 [DEBUG] [Thread-20579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:33:28.991 [DEBUG] [Thread-20579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:33:28.991 [DEBUG] [Thread-20579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:33:28.991 [DEBUG] [Thread-20579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:33:28.991 [DEBUG] [Thread-20579] [transport.py] [_log()] client lang: <none>
2026-04-15T14:33:28.991 [DEBUG] [Thread-20579] [transport.py] [_log()] server lang: <none>
2026-04-15T14:33:28.992 [DEBUG] [Thread-20579] [transport.py] [_log()] kex follows: False
2026-04-15T14:33:28.992 [DEBUG] [Thread-20579] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:33:28.992 [DEBUG] [Thread-20579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:33:28.992 [DEBUG] [Thread-20579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:33:28.992 [DEBUG] [Thread-20579] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:33:28.992 [DEBUG] [Thread-20579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:33:28.992 [DEBUG] [Thread-20579] [transport.py] [_log()] Compression: none
2026-04-15T14:33:28.992 [DEBUG] [Thread-20579] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:33:29.046 [DEBUG] [Thread-20579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:33:29.046 [DEBUG] [Thread-20579] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:33:29.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:33:29.047 [DEBUG] [Thread-20579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:33:29.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:33:29.103 [DEBUG] [Thread-20579] [transport.py] [_log()] userauth is OK
2026-04-15T14:33:29.103 [DEBUG] [Thread-20579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:33:29.103 [DEBUG] [Thread-20579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:33:29.103 [DEBUG] [Thread-20579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:33:29.103 [DEBUG] [Thread-20579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:33:29.126 [INFO] [Thread-20579] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:33:29.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:33:29.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:33:29.970 [DEBUG] [Thread-20579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:33:29.970 [DEBUG] [Thread-20579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:33:30.017 [DEBUG] [Thread-20579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:33:30.018 [DEBUG] [Thread-20579] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:33:30.026 [DEBUG] [Thread-20579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:33:30.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:33:30.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')
2026-04-15T14:33:30.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
2026-04-15T14:33:30.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:33:30.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:33:30.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:33:30.058 [DEBUG] [Thread-20579] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:33:41.134 [DEBUG] [Thread-20581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:33:56.173 [DEBUG] [Thread-20582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:34:00.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:34:00.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:34:00.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:34:01.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 33, 53), 8.61971, 56.1723, 0.0, 18.4198, 14.5899, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:34:01.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:33:53
2026-04-15T14:34:01.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:34:02.181 [DEBUG] [Thread-20583] [transport.py] [_log()] starting thread (client mode): 0xee98a800
2026-04-15T14:34:02.181 [DEBUG] [Thread-20583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:34:02.201 [DEBUG] [Thread-20583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:34:02.201 [INFO] [Thread-20583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:34:02.204 [DEBUG] [Thread-20583] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:34:02.204 [DEBUG] [Thread-20583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:34:02.204 [DEBUG] [Thread-20583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:34:02.204 [DEBUG] [Thread-20583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:34:02.204 [DEBUG] [Thread-20583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:34:02.205 [DEBUG] [Thread-20583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:34:02.205 [DEBUG] [Thread-20583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:34:02.205 [DEBUG] [Thread-20583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:34:02.205 [DEBUG] [Thread-20583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:34:02.205 [DEBUG] [Thread-20583] [transport.py] [_log()] client lang: <none>
2026-04-15T14:34:02.205 [DEBUG] [Thread-20583] [transport.py] [_log()] server lang: <none>
2026-04-15T14:34:02.205 [DEBUG] [Thread-20583] [transport.py] [_log()] kex follows: False
2026-04-15T14:34:02.205 [DEBUG] [Thread-20583] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:34:02.205 [DEBUG] [Thread-20583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:34:02.205 [DEBUG] [Thread-20583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:34:02.205 [DEBUG] [Thread-20583] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:34:02.206 [DEBUG] [Thread-20583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:34:02.206 [DEBUG] [Thread-20583] [transport.py] [_log()] Compression: none
2026-04-15T14:34:02.206 [DEBUG] [Thread-20583] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:34:02.223 [DEBUG] [Thread-20583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:34:02.223 [DEBUG] [Thread-20583] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:34:02.224 [DEBUG] [Thread-20583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:34:02.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:34:02.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:34:02.225 [DEBUG] [Thread-20583] [transport.py] [_log()] userauth is OK
2026-04-15T14:34:02.225 [DEBUG] [Thread-20583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:34:02.226 [DEBUG] [Thread-20583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:34:02.226 [DEBUG] [Thread-20583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:34:02.226 [DEBUG] [Thread-20583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:34:02.260 [INFO] [Thread-20583] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:34:02.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:34:02.876 [DEBUG] [Thread-20583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:34:02.876 [DEBUG] [Thread-20583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:34:02.877 [DEBUG] [Thread-20583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:34:02.917 [DEBUG] [Thread-20583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:34:02.917 [DEBUG] [Thread-20583] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:34:02.920 [DEBUG] [Thread-20583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:34:02.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:34:02.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:34:02.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:34:02.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:34:02.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:34:02.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:34:02.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:34:02.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:34:02.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:34:02.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.523401 -999.00  +13.80  12.64     63   +7.00 1 2 1 1 1   888    0 7.66 30.57 ----- 12.9 12.6 314.4 17.8 20.2 -23.7 19.2 -23.6 19.6 -21.6 20.6 -21.6
2026-04-15T14:34:02.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:34:02.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:34:02.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.523401
2026-04-15T14:34:02.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:34:02.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:34:02.947 [DEBUG] [Thread-20583] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:34:02.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:34:02.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:34:02.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:34:02.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:33:53', tmtdew=8.61971, humidity=56.1723, cloud=0.0, wind=18.4198, temperature=14.5899, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:33:41.846', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:34:03.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:34:03.205 [DEBUG] [Thread-20586] [transport.py] [_log()] starting thread (client mode): 0xf1334880
2026-04-15T14:34:03.205 [DEBUG] [Thread-20586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:34:03.220 [DEBUG] [Thread-20586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:34:03.220 [INFO] [Thread-20586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:34:03.227 [DEBUG] [Thread-20586] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:34:03.227 [DEBUG] [Thread-20586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:34:03.227 [DEBUG] [Thread-20586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:34:03.228 [DEBUG] [Thread-20586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:34:03.228 [DEBUG] [Thread-20586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:34:03.228 [DEBUG] [Thread-20586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:34:03.228 [DEBUG] [Thread-20586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:34:03.228 [DEBUG] [Thread-20586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:34:03.228 [DEBUG] [Thread-20586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:34:03.228 [DEBUG] [Thread-20586] [transport.py] [_log()] client lang: <none>
2026-04-15T14:34:03.228 [DEBUG] [Thread-20586] [transport.py] [_log()] server lang: <none>
2026-04-15T14:34:03.228 [DEBUG] [Thread-20586] [transport.py] [_log()] kex follows: False
2026-04-15T14:34:03.228 [DEBUG] [Thread-20586] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:34:03.228 [DEBUG] [Thread-20586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:34:03.228 [DEBUG] [Thread-20586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:34:03.229 [DEBUG] [Thread-20586] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:34:03.229 [DEBUG] [Thread-20586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:34:03.229 [DEBUG] [Thread-20586] [transport.py] [_log()] Compression: none
2026-04-15T14:34:03.229 [DEBUG] [Thread-20586] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:34:03.297 [DEBUG] [Thread-20586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:34:03.297 [DEBUG] [Thread-20586] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:34:03.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:34:03.298 [DEBUG] [Thread-20586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:34:03.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:34:03.355 [DEBUG] [Thread-20586] [transport.py] [_log()] userauth is OK
2026-04-15T14:34:03.356 [DEBUG] [Thread-20586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:34:03.356 [DEBUG] [Thread-20586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:34:03.356 [DEBUG] [Thread-20586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:34:03.356 [DEBUG] [Thread-20586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:34:03.379 [INFO] [Thread-20586] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:34:03.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:34:03.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:34:04.193 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:34:04.194 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:34:04.213 [DEBUG] [Thread-20586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:34:04.213 [DEBUG] [Thread-20586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:34:04.261 [DEBUG] [Thread-20586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:34:04.261 [DEBUG] [Thread-20586] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:34:04.270 [DEBUG] [Thread-20586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:34:04.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:34:04.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')
2026-04-15T14:34:04.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
2026-04-15T14:34:04.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:34:04.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:34:04.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:34:04.305 [DEBUG] [Thread-20586] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:34:11.204 [DEBUG] [Thread-20588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:34:26.244 [DEBUG] [Thread-20589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:34:27.737 [DEBUG] [Thread-20590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:34:34.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:34:34.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:34:34.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
2026-04-15T14:34:35.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 34, 28), 8.51231, 56.3873, 0.0, 12.9701, 13.8615, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:34:35.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:34:28
2026-04-15T14:34:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:34:36.418 [DEBUG] [Thread-20591] [transport.py] [_log()] starting thread (client mode): 0xf1367a30
2026-04-15T14:34:36.418 [DEBUG] [Thread-20591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:34:36.436 [DEBUG] [Thread-20591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:34:36.436 [INFO] [Thread-20591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:34:36.438 [DEBUG] [Thread-20591] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:34:36.438 [DEBUG] [Thread-20591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:34:36.438 [DEBUG] [Thread-20591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:34:36.438 [DEBUG] [Thread-20591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:34:36.438 [DEBUG] [Thread-20591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:34:36.438 [DEBUG] [Thread-20591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:34:36.438 [DEBUG] [Thread-20591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:34:36.438 [DEBUG] [Thread-20591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:34:36.438 [DEBUG] [Thread-20591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:34:36.438 [DEBUG] [Thread-20591] [transport.py] [_log()] client lang: <none>
2026-04-15T14:34:36.438 [DEBUG] [Thread-20591] [transport.py] [_log()] server lang: <none>
2026-04-15T14:34:36.438 [DEBUG] [Thread-20591] [transport.py] [_log()] kex follows: False
2026-04-15T14:34:36.439 [DEBUG] [Thread-20591] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:34:36.439 [DEBUG] [Thread-20591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:34:36.439 [DEBUG] [Thread-20591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:34:36.439 [DEBUG] [Thread-20591] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:34:36.439 [DEBUG] [Thread-20591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:34:36.439 [DEBUG] [Thread-20591] [transport.py] [_log()] Compression: none
2026-04-15T14:34:36.439 [DEBUG] [Thread-20591] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:34:36.450 [DEBUG] [Thread-20591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:34:36.451 [DEBUG] [Thread-20591] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:34:36.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:34:36.451 [DEBUG] [Thread-20591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:34:36.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:34:36.452 [DEBUG] [Thread-20591] [transport.py] [_log()] userauth is OK
2026-04-15T14:34:36.452 [DEBUG] [Thread-20591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:34:36.452 [DEBUG] [Thread-20591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:34:36.452 [DEBUG] [Thread-20591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:34:36.452 [DEBUG] [Thread-20591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:34:36.465 [INFO] [Thread-20591] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:34:36.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:34:37.213 [DEBUG] [Thread-20591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:34:37.213 [DEBUG] [Thread-20591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:34:37.214 [DEBUG] [Thread-20591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:34:37.254 [DEBUG] [Thread-20591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:34:37.254 [DEBUG] [Thread-20591] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:34:37.257 [DEBUG] [Thread-20591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:34:37.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:34:37.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:34:37.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:34:37.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:34:37.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:34:37.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:34:37.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:34:37.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:34:37.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:34:37.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.523748 -999.00  +14.20  11.31     62   +7.20 1 2 1 1 1   888    0 7.98 36.35 ----- 13.8 11.3 345.3 19.8 20.3 -24.7 19.3 -24.6 19.8 -20.6 20.8 -21.1
2026-04-15T14:34:37.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:34:37.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:34:37.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.523748
2026-04-15T14:34:37.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:34:37.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:34:37.284 [DEBUG] [Thread-20591] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:34:37.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:34:37.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:34:37.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:34:37.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:34:28', tmtdew=8.51231, humidity=56.3873, cloud=0.0, wind=12.9701, temperature=13.8615, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:34:11.827', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:34:37.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:34:37.537 [DEBUG] [Thread-20594] [transport.py] [_log()] starting thread (client mode): 0xee904610
2026-04-15T14:34:37.537 [DEBUG] [Thread-20594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:34:37.551 [DEBUG] [Thread-20594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:34:37.551 [INFO] [Thread-20594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:34:37.558 [DEBUG] [Thread-20594] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:34:37.558 [DEBUG] [Thread-20594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:34:37.559 [DEBUG] [Thread-20594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:34:37.559 [DEBUG] [Thread-20594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:34:37.559 [DEBUG] [Thread-20594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:34:37.559 [DEBUG] [Thread-20594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:34:37.559 [DEBUG] [Thread-20594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:34:37.559 [DEBUG] [Thread-20594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:34:37.559 [DEBUG] [Thread-20594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:34:37.559 [DEBUG] [Thread-20594] [transport.py] [_log()] client lang: <none>
2026-04-15T14:34:37.559 [DEBUG] [Thread-20594] [transport.py] [_log()] server lang: <none>
2026-04-15T14:34:37.559 [DEBUG] [Thread-20594] [transport.py] [_log()] kex follows: False
2026-04-15T14:34:37.559 [DEBUG] [Thread-20594] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:34:37.559 [DEBUG] [Thread-20594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:34:37.560 [DEBUG] [Thread-20594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:34:37.560 [DEBUG] [Thread-20594] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:34:37.560 [DEBUG] [Thread-20594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:34:37.560 [DEBUG] [Thread-20594] [transport.py] [_log()] Compression: none
2026-04-15T14:34:37.560 [DEBUG] [Thread-20594] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:34:37.615 [DEBUG] [Thread-20594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:34:37.615 [DEBUG] [Thread-20594] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:34:37.616 [DEBUG] [Thread-20594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:34:37.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:34:37.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:34:37.677 [DEBUG] [Thread-20594] [transport.py] [_log()] userauth is OK
2026-04-15T14:34:37.677 [DEBUG] [Thread-20594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:34:37.678 [DEBUG] [Thread-20594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:34:37.678 [DEBUG] [Thread-20594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:34:37.678 [DEBUG] [Thread-20594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:34:37.703 [INFO] [Thread-20594] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:34:37.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:34:37.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:34:38.510 [DEBUG] [Thread-20594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:34:38.510 [DEBUG] [Thread-20594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:34:38.558 [DEBUG] [Thread-20594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:34:38.558 [DEBUG] [Thread-20594] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:34:38.570 [DEBUG] [Thread-20594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:34:38.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:34:38.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')
2026-04-15T14:34:38.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
2026-04-15T14:34:38.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:34:38.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:34:38.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:34:38.611 [DEBUG] [Thread-20594] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:34:41.273 [DEBUG] [Thread-20596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:34:56.316 [DEBUG] [Thread-20597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:35:04.334 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:35:04.336 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:35:08.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:35:08.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:35:08.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
2026-04-15T14:35:09.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 34, 28), 8.51231, 56.3873, 0.0, 12.9701, 13.8615, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:35:09.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:34:28
2026-04-15T14:35:10.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:35:10.755 [DEBUG] [Thread-20598] [transport.py] [_log()] starting thread (client mode): 0xf13efdf0
2026-04-15T14:35:10.755 [DEBUG] [Thread-20598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:35:10.775 [DEBUG] [Thread-20598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:35:10.775 [INFO] [Thread-20598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:35:10.778 [DEBUG] [Thread-20598] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:35:10.778 [DEBUG] [Thread-20598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:35:10.778 [DEBUG] [Thread-20598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:35:10.779 [DEBUG] [Thread-20598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:35:10.779 [DEBUG] [Thread-20598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:35:10.779 [DEBUG] [Thread-20598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:35:10.779 [DEBUG] [Thread-20598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:35:10.779 [DEBUG] [Thread-20598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:35:10.779 [DEBUG] [Thread-20598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:35:10.779 [DEBUG] [Thread-20598] [transport.py] [_log()] client lang: <none>
2026-04-15T14:35:10.779 [DEBUG] [Thread-20598] [transport.py] [_log()] server lang: <none>
2026-04-15T14:35:10.779 [DEBUG] [Thread-20598] [transport.py] [_log()] kex follows: False
2026-04-15T14:35:10.779 [DEBUG] [Thread-20598] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:35:10.780 [DEBUG] [Thread-20598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:35:10.780 [DEBUG] [Thread-20598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:35:10.780 [DEBUG] [Thread-20598] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:35:10.780 [DEBUG] [Thread-20598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:35:10.780 [DEBUG] [Thread-20598] [transport.py] [_log()] Compression: none
2026-04-15T14:35:10.780 [DEBUG] [Thread-20598] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:35:10.797 [DEBUG] [Thread-20598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:35:10.798 [DEBUG] [Thread-20598] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:35:10.798 [DEBUG] [Thread-20598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:35:10.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:35:10.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:35:10.799 [DEBUG] [Thread-20598] [transport.py] [_log()] userauth is OK
2026-04-15T14:35:10.799 [DEBUG] [Thread-20598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:35:10.799 [DEBUG] [Thread-20598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:35:10.799 [DEBUG] [Thread-20598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:35:10.799 [DEBUG] [Thread-20598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:35:10.832 [INFO] [Thread-20598] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:35:10.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:35:11.345 [DEBUG] [Thread-20600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:35:12.247 [DEBUG] [Thread-20598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:35:12.247 [DEBUG] [Thread-20598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:35:12.248 [DEBUG] [Thread-20598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:35:12.288 [DEBUG] [Thread-20598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:35:12.288 [DEBUG] [Thread-20598] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:35:12.291 [DEBUG] [Thread-20598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:35:12.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:35:12.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:35:12.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:35:12.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:35:12.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:35:12.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:35:12.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:35:12.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:35:12.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:35:12.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.524095 -999.00  +14.40  13.59     64   +7.80 1 2 1 1 1   888    0 7.95 37.41 ----- 15.6 13.6 321.9 17.3 20.4 -24.4 19.3 -24.1 19.9 -21.2 21.0 -22.4
2026-04-15T14:35:12.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:35:12.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:35:12.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.524095
2026-04-15T14:35:12.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:35:12.315 [DEBUG] [Thread-20598] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:35:12.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:35:12.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:35:12.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:35:12.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:35:12.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:34:28', tmtdew=8.51231, humidity=56.3873, cloud=0.0, wind=12.9701, temperature=13.8615, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:34:41.808', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:35:12.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:35:12.571 [DEBUG] [Thread-20602] [transport.py] [_log()] starting thread (client mode): 0xee907610
2026-04-15T14:35:12.571 [DEBUG] [Thread-20602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:35:12.587 [DEBUG] [Thread-20602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:35:12.587 [INFO] [Thread-20602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:35:12.594 [DEBUG] [Thread-20602] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:35:12.594 [DEBUG] [Thread-20602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:35:12.594 [DEBUG] [Thread-20602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:35:12.594 [DEBUG] [Thread-20602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:35:12.594 [DEBUG] [Thread-20602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:35:12.594 [DEBUG] [Thread-20602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:35:12.595 [DEBUG] [Thread-20602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:35:12.595 [DEBUG] [Thread-20602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:35:12.595 [DEBUG] [Thread-20602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:35:12.595 [DEBUG] [Thread-20602] [transport.py] [_log()] client lang: <none>
2026-04-15T14:35:12.595 [DEBUG] [Thread-20602] [transport.py] [_log()] server lang: <none>
2026-04-15T14:35:12.595 [DEBUG] [Thread-20602] [transport.py] [_log()] kex follows: False
2026-04-15T14:35:12.595 [DEBUG] [Thread-20602] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:35:12.595 [DEBUG] [Thread-20602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:35:12.595 [DEBUG] [Thread-20602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:35:12.595 [DEBUG] [Thread-20602] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:35:12.595 [DEBUG] [Thread-20602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:35:12.596 [DEBUG] [Thread-20602] [transport.py] [_log()] Compression: none
2026-04-15T14:35:12.596 [DEBUG] [Thread-20602] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:35:12.650 [DEBUG] [Thread-20602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:35:12.650 [DEBUG] [Thread-20602] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:35:12.651 [DEBUG] [Thread-20602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:35:12.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:35:12.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:35:12.707 [DEBUG] [Thread-20602] [transport.py] [_log()] userauth is OK
2026-04-15T14:35:12.707 [DEBUG] [Thread-20602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:35:12.708 [DEBUG] [Thread-20602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:35:12.708 [DEBUG] [Thread-20602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:35:12.708 [DEBUG] [Thread-20602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:35:12.733 [INFO] [Thread-20602] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:35:12.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:35:12.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:35:13.551 [DEBUG] [Thread-20602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:35:13.552 [DEBUG] [Thread-20602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:35:13.600 [DEBUG] [Thread-20602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:35:13.600 [DEBUG] [Thread-20602] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:35:13.609 [DEBUG] [Thread-20602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:35:13.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:35:13.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')
2026-04-15T14:35:13.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
2026-04-15T14:35:13.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:35:13.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:35:13.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:35:13.644 [DEBUG] [Thread-20602] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:35:26.375 [DEBUG] [Thread-20604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:35:27.813 [DEBUG] [Thread-20605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:35:41.414 [DEBUG] [Thread-20606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:35:43.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:35:43.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:35:43.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
2026-04-15T14:35:44.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 35, 4), 8.40458, 56.8016, 0.0, 13.3934, 13.8449, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:35:44.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:35:04
2026-04-15T14:35:45.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:35:45.932 [DEBUG] [Thread-20607] [transport.py] [_log()] starting thread (client mode): 0xf13caad0
2026-04-15T14:35:45.932 [DEBUG] [Thread-20607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:35:45.952 [DEBUG] [Thread-20607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:35:45.952 [INFO] [Thread-20607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:35:45.956 [DEBUG] [Thread-20607] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:35:45.956 [DEBUG] [Thread-20607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:35:45.956 [DEBUG] [Thread-20607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:35:45.956 [DEBUG] [Thread-20607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:35:45.956 [DEBUG] [Thread-20607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:35:45.956 [DEBUG] [Thread-20607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:35:45.956 [DEBUG] [Thread-20607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:35:45.956 [DEBUG] [Thread-20607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:35:45.956 [DEBUG] [Thread-20607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:35:45.956 [DEBUG] [Thread-20607] [transport.py] [_log()] client lang: <none>
2026-04-15T14:35:45.956 [DEBUG] [Thread-20607] [transport.py] [_log()] server lang: <none>
2026-04-15T14:35:45.956 [DEBUG] [Thread-20607] [transport.py] [_log()] kex follows: False
2026-04-15T14:35:45.957 [DEBUG] [Thread-20607] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:35:45.957 [DEBUG] [Thread-20607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:35:45.957 [DEBUG] [Thread-20607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:35:45.957 [DEBUG] [Thread-20607] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:35:45.957 [DEBUG] [Thread-20607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:35:45.957 [DEBUG] [Thread-20607] [transport.py] [_log()] Compression: none
2026-04-15T14:35:45.957 [DEBUG] [Thread-20607] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:35:45.974 [DEBUG] [Thread-20607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:35:45.975 [DEBUG] [Thread-20607] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:35:45.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:35:45.975 [DEBUG] [Thread-20607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:35:45.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:35:45.976 [DEBUG] [Thread-20607] [transport.py] [_log()] userauth is OK
2026-04-15T14:35:45.976 [DEBUG] [Thread-20607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:35:45.977 [DEBUG] [Thread-20607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:35:45.977 [DEBUG] [Thread-20607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:35:45.977 [DEBUG] [Thread-20607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:35:46.001 [INFO] [Thread-20607] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:35:46.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:35:46.807 [DEBUG] [Thread-20607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:35:46.807 [DEBUG] [Thread-20607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:35:46.808 [DEBUG] [Thread-20607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:35:46.848 [DEBUG] [Thread-20607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:35:46.848 [DEBUG] [Thread-20607] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:35:46.852 [DEBUG] [Thread-20607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:35:46.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:35:46.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:35:46.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:35:46.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:35:46.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:35:46.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:35:46.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:35:46.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:35:46.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:35:46.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.524442 -999.00  +14.40  24.13     61   +7.20 1 1 1 1 1   888    0 7.76 35.94 ----- 21.1 24.1 314.2 26.6 20.3 -24.8 19.3 -25.3 19.9 -22.3 21.0 -21.9
2026-04-15T14:35:46.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:35:46.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:35:46.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.524442
2026-04-15T14:35:46.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:35:46.876 [DEBUG] [Thread-20607] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:35:46.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:35:46.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:35:46.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:35:46.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:35:46.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:35:04', tmtdew=8.40458, humidity=56.8016, cloud=0.0, wind=13.3934, temperature=13.8449, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:35:11.789', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:35:47.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:35:47.134 [DEBUG] [Thread-20610] [transport.py] [_log()] starting thread (client mode): 0xf13c9d20
2026-04-15T14:35:47.135 [DEBUG] [Thread-20610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:35:47.149 [DEBUG] [Thread-20610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:35:47.149 [INFO] [Thread-20610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:35:47.156 [DEBUG] [Thread-20610] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:35:47.156 [DEBUG] [Thread-20610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:35:47.156 [DEBUG] [Thread-20610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:35:47.156 [DEBUG] [Thread-20610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:35:47.156 [DEBUG] [Thread-20610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:35:47.157 [DEBUG] [Thread-20610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:35:47.157 [DEBUG] [Thread-20610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:35:47.157 [DEBUG] [Thread-20610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:35:47.157 [DEBUG] [Thread-20610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:35:47.157 [DEBUG] [Thread-20610] [transport.py] [_log()] client lang: <none>
2026-04-15T14:35:47.157 [DEBUG] [Thread-20610] [transport.py] [_log()] server lang: <none>
2026-04-15T14:35:47.157 [DEBUG] [Thread-20610] [transport.py] [_log()] kex follows: False
2026-04-15T14:35:47.157 [DEBUG] [Thread-20610] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:35:47.157 [DEBUG] [Thread-20610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:35:47.157 [DEBUG] [Thread-20610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:35:47.157 [DEBUG] [Thread-20610] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:35:47.158 [DEBUG] [Thread-20610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:35:47.158 [DEBUG] [Thread-20610] [transport.py] [_log()] Compression: none
2026-04-15T14:35:47.158 [DEBUG] [Thread-20610] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:35:47.218 [DEBUG] [Thread-20610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:35:47.219 [DEBUG] [Thread-20610] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:35:47.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:35:47.219 [DEBUG] [Thread-20610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:35:47.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:35:47.275 [DEBUG] [Thread-20610] [transport.py] [_log()] userauth is OK
2026-04-15T14:35:47.275 [DEBUG] [Thread-20610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:35:47.275 [DEBUG] [Thread-20610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:35:47.275 [DEBUG] [Thread-20610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:35:47.276 [DEBUG] [Thread-20610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:35:47.303 [INFO] [Thread-20610] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:35:47.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:35:47.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:35:48.168 [DEBUG] [Thread-20610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:35:48.169 [DEBUG] [Thread-20610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:35:48.216 [DEBUG] [Thread-20610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:35:48.216 [DEBUG] [Thread-20610] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:35:48.225 [DEBUG] [Thread-20610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:35:48.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:35:48.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')
2026-04-15T14:35:48.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
2026-04-15T14:35:48.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:35:48.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:35:48.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:35:48.260 [DEBUG] [Thread-20610] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:35:56.444 [DEBUG] [Thread-20612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:36:04.477 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:36:04.478 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:36:11.485 [DEBUG] [Thread-20613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:36:18.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:36:18.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:36:18.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
2026-04-15T14:36:19.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 35, 39), 8.49226, 56.7362, 0.0, 21.0305, 14.8555, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:36:19.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:35:39
2026-04-15T14:36:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:36:20.557 [DEBUG] [Thread-20614] [transport.py] [_log()] starting thread (client mode): 0xf1337790
2026-04-15T14:36:20.557 [DEBUG] [Thread-20614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:36:20.576 [DEBUG] [Thread-20614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:36:20.576 [INFO] [Thread-20614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:36:20.579 [DEBUG] [Thread-20614] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:36:20.579 [DEBUG] [Thread-20614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:36:20.579 [DEBUG] [Thread-20614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:36:20.579 [DEBUG] [Thread-20614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:36:20.579 [DEBUG] [Thread-20614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:36:20.580 [DEBUG] [Thread-20614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:36:20.580 [DEBUG] [Thread-20614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:36:20.580 [DEBUG] [Thread-20614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:36:20.580 [DEBUG] [Thread-20614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:36:20.580 [DEBUG] [Thread-20614] [transport.py] [_log()] client lang: <none>
2026-04-15T14:36:20.580 [DEBUG] [Thread-20614] [transport.py] [_log()] server lang: <none>
2026-04-15T14:36:20.580 [DEBUG] [Thread-20614] [transport.py] [_log()] kex follows: False
2026-04-15T14:36:20.580 [DEBUG] [Thread-20614] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:36:20.580 [DEBUG] [Thread-20614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:36:20.580 [DEBUG] [Thread-20614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:36:20.580 [DEBUG] [Thread-20614] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:36:20.581 [DEBUG] [Thread-20614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:36:20.581 [DEBUG] [Thread-20614] [transport.py] [_log()] Compression: none
2026-04-15T14:36:20.581 [DEBUG] [Thread-20614] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:36:20.597 [DEBUG] [Thread-20614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:36:20.597 [DEBUG] [Thread-20614] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:36:20.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:36:20.598 [DEBUG] [Thread-20614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:36:20.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:36:20.599 [DEBUG] [Thread-20614] [transport.py] [_log()] userauth is OK
2026-04-15T14:36:20.599 [DEBUG] [Thread-20614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:36:20.599 [DEBUG] [Thread-20614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:36:20.599 [DEBUG] [Thread-20614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:36:20.599 [DEBUG] [Thread-20614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:36:20.624 [INFO] [Thread-20614] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:36:20.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:36:21.410 [DEBUG] [Thread-20614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:36:21.410 [DEBUG] [Thread-20614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:36:21.411 [DEBUG] [Thread-20614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:36:21.451 [DEBUG] [Thread-20614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:36:21.451 [DEBUG] [Thread-20614] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:36:21.454 [DEBUG] [Thread-20614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:36:21.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:36:21.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:36:21.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:36:21.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:36:21.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:36:21.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:36:21.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:36:21.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:36:21.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:36:21.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.524790 -999.00  +14.50  14.94     64   +7.70 1 1 1 1 1   888    0 7.80 32.36 ----- 15.3 14.9 326.6 24.2 20.5 -23.9 19.4 -24.6 19.8 -21.6 21.0 -22.6
2026-04-15T14:36:21.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:36:21.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:36:21.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.524790
2026-04-15T14:36:21.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:36:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:36:21.472 [DEBUG] [Thread-20614] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:36:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:36:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:36:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:36:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:35:39', tmtdew=8.49226, humidity=56.7362, cloud=0.0, wind=21.0305, temperature=14.8555, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:35:41.856', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:36:21.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:36:21.729 [DEBUG] [Thread-20617] [transport.py] [_log()] starting thread (client mode): 0xf13ca650
2026-04-15T14:36:21.729 [DEBUG] [Thread-20617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:36:21.742 [DEBUG] [Thread-20617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:36:21.742 [INFO] [Thread-20617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:36:21.750 [DEBUG] [Thread-20617] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:36:21.750 [DEBUG] [Thread-20617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:36:21.750 [DEBUG] [Thread-20617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:36:21.750 [DEBUG] [Thread-20617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:36:21.750 [DEBUG] [Thread-20617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:36:21.750 [DEBUG] [Thread-20617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:36:21.750 [DEBUG] [Thread-20617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:36:21.750 [DEBUG] [Thread-20617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:36:21.750 [DEBUG] [Thread-20617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:36:21.750 [DEBUG] [Thread-20617] [transport.py] [_log()] client lang: <none>
2026-04-15T14:36:21.751 [DEBUG] [Thread-20617] [transport.py] [_log()] server lang: <none>
2026-04-15T14:36:21.751 [DEBUG] [Thread-20617] [transport.py] [_log()] kex follows: False
2026-04-15T14:36:21.751 [DEBUG] [Thread-20617] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:36:21.751 [DEBUG] [Thread-20617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:36:21.751 [DEBUG] [Thread-20617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:36:21.751 [DEBUG] [Thread-20617] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:36:21.751 [DEBUG] [Thread-20617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:36:21.751 [DEBUG] [Thread-20617] [transport.py] [_log()] Compression: none
2026-04-15T14:36:21.751 [DEBUG] [Thread-20617] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:36:21.806 [DEBUG] [Thread-20617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:36:21.806 [DEBUG] [Thread-20617] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:36:21.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:36:21.807 [DEBUG] [Thread-20617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:36:21.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:36:21.863 [DEBUG] [Thread-20617] [transport.py] [_log()] userauth is OK
2026-04-15T14:36:21.863 [DEBUG] [Thread-20617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:36:21.864 [DEBUG] [Thread-20617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:36:21.864 [DEBUG] [Thread-20617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:36:21.864 [DEBUG] [Thread-20617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:36:21.889 [INFO] [Thread-20617] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:36:21.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:36:21.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:36:22.717 [DEBUG] [Thread-20617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:36:22.717 [DEBUG] [Thread-20617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:36:22.765 [DEBUG] [Thread-20617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:36:22.765 [DEBUG] [Thread-20617] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:36:22.777 [DEBUG] [Thread-20617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:36:22.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:36:22.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')
2026-04-15T14:36:22.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
2026-04-15T14:36:22.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:36:22.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:36:22.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:36:22.817 [DEBUG] [Thread-20617] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:36:26.517 [DEBUG] [Thread-20619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:36:27.888 [DEBUG] [Thread-20620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:36:41.563 [DEBUG] [Thread-20621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:36:52.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:36:52.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:36:52.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
2026-04-15T14:36:54.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 36, 15), 8.49928, 56.8349, 0.0, 18.068, 14.4949, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:36:54.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:36:15
2026-04-15T14:36:54.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:36:54.964 [DEBUG] [Thread-20622] [transport.py] [_log()] starting thread (client mode): 0xf13347c0
2026-04-15T14:36:54.964 [DEBUG] [Thread-20622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:36:54.977 [DEBUG] [Thread-20622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:36:54.977 [INFO] [Thread-20622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:36:54.980 [DEBUG] [Thread-20622] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:36:54.980 [DEBUG] [Thread-20622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:36:54.980 [DEBUG] [Thread-20622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:36:54.980 [DEBUG] [Thread-20622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:36:54.980 [DEBUG] [Thread-20622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:36:54.981 [DEBUG] [Thread-20622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:36:54.981 [DEBUG] [Thread-20622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:36:54.981 [DEBUG] [Thread-20622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:36:54.981 [DEBUG] [Thread-20622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:36:54.981 [DEBUG] [Thread-20622] [transport.py] [_log()] client lang: <none>
2026-04-15T14:36:54.981 [DEBUG] [Thread-20622] [transport.py] [_log()] server lang: <none>
2026-04-15T14:36:54.981 [DEBUG] [Thread-20622] [transport.py] [_log()] kex follows: False
2026-04-15T14:36:54.981 [DEBUG] [Thread-20622] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:36:54.981 [DEBUG] [Thread-20622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:36:54.981 [DEBUG] [Thread-20622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:36:54.981 [DEBUG] [Thread-20622] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:36:54.981 [DEBUG] [Thread-20622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:36:54.981 [DEBUG] [Thread-20622] [transport.py] [_log()] Compression: none
2026-04-15T14:36:54.982 [DEBUG] [Thread-20622] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:36:54.998 [DEBUG] [Thread-20622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:36:54.999 [DEBUG] [Thread-20622] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:36:54.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:36:54.999 [DEBUG] [Thread-20622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:36:55.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:36:55.000 [DEBUG] [Thread-20622] [transport.py] [_log()] userauth is OK
2026-04-15T14:36:55.001 [DEBUG] [Thread-20622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:36:55.001 [DEBUG] [Thread-20622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:36:55.001 [DEBUG] [Thread-20622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:36:55.001 [DEBUG] [Thread-20622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:36:55.024 [INFO] [Thread-20622] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:36:55.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:36:55.804 [DEBUG] [Thread-20622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:36:55.804 [DEBUG] [Thread-20622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:36:55.805 [DEBUG] [Thread-20622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:36:55.845 [DEBUG] [Thread-20622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:36:55.845 [DEBUG] [Thread-20622] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:36:55.848 [DEBUG] [Thread-20622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:36:55.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:36:55.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:36:55.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:36:55.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:36:55.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:36:55.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:36:55.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:36:55.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:36:55.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:36:55.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.525137 -999.00  +14.90  17.28     64   +8.20 1 2 1 1 1   888    0 7.64 26.86 ----- 20.9 17.3 327.2 21.0 20.5 -23.9 19.6 -23.8 20.1 -20.6 21.2 -21.9
2026-04-15T14:36:55.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:36:55.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:36:55.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.525137
2026-04-15T14:36:55.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:36:55.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:36:55.875 [DEBUG] [Thread-20622] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:36:55.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:36:55.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:36:55.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:36:55.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:36:15', tmtdew=8.49928, humidity=56.8349, cloud=0.0, wind=18.068, temperature=14.4949, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:36:11.837', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:36:56.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:36:56.128 [DEBUG] [Thread-20625] [transport.py] [_log()] starting thread (client mode): 0xf13e2fe0
2026-04-15T14:36:56.128 [DEBUG] [Thread-20625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:36:56.143 [DEBUG] [Thread-20625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:36:56.143 [INFO] [Thread-20625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:36:56.150 [DEBUG] [Thread-20625] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:36:56.150 [DEBUG] [Thread-20625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:36:56.150 [DEBUG] [Thread-20625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:36:56.150 [DEBUG] [Thread-20625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:36:56.150 [DEBUG] [Thread-20625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:36:56.150 [DEBUG] [Thread-20625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:36:56.150 [DEBUG] [Thread-20625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:36:56.150 [DEBUG] [Thread-20625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:36:56.150 [DEBUG] [Thread-20625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:36:56.151 [DEBUG] [Thread-20625] [transport.py] [_log()] client lang: <none>
2026-04-15T14:36:56.151 [DEBUG] [Thread-20625] [transport.py] [_log()] server lang: <none>
2026-04-15T14:36:56.151 [DEBUG] [Thread-20625] [transport.py] [_log()] kex follows: False
2026-04-15T14:36:56.151 [DEBUG] [Thread-20625] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:36:56.151 [DEBUG] [Thread-20625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:36:56.151 [DEBUG] [Thread-20625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:36:56.151 [DEBUG] [Thread-20625] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:36:56.151 [DEBUG] [Thread-20625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:36:56.151 [DEBUG] [Thread-20625] [transport.py] [_log()] Compression: none
2026-04-15T14:36:56.151 [DEBUG] [Thread-20625] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:36:56.209 [DEBUG] [Thread-20625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:36:56.209 [DEBUG] [Thread-20625] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:36:56.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:36:56.210 [DEBUG] [Thread-20625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:36:56.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:36:56.266 [DEBUG] [Thread-20625] [transport.py] [_log()] userauth is OK
2026-04-15T14:36:56.266 [DEBUG] [Thread-20625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:36:56.267 [DEBUG] [Thread-20625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:36:56.267 [DEBUG] [Thread-20625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:36:56.267 [DEBUG] [Thread-20625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:36:56.285 [INFO] [Thread-20625] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:36:56.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:36:56.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:36:56.594 [DEBUG] [Thread-20627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:36:57.104 [DEBUG] [Thread-20625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:36:57.105 [DEBUG] [Thread-20625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:36:57.152 [DEBUG] [Thread-20625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:36:57.152 [DEBUG] [Thread-20625] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:36:57.161 [DEBUG] [Thread-20625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:36:57.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:36:57.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')
2026-04-15T14:36:57.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T14:36:57.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:36:57.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:36:57.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:36:57.197 [DEBUG] [Thread-20625] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:37:04.617 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:37:04.619 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:37:11.639 [DEBUG] [Thread-20628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:37:26.671 [DEBUG] [Thread-20629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:37:27.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:37:27.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:37: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
2026-04-15T14:37:27.990 [DEBUG] [Thread-20630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:37:28.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 36, 51), 8.54087, 56.471, 0.0, 25.5463, 14.5572, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:37:28.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:36:51
2026-04-15T14:37:28.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:37:29.246 [DEBUG] [Thread-20631] [transport.py] [_log()] starting thread (client mode): 0xee9e4be0
2026-04-15T14:37:29.247 [DEBUG] [Thread-20631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:37:29.269 [DEBUG] [Thread-20631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:37:29.270 [INFO] [Thread-20631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:37:29.273 [DEBUG] [Thread-20631] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:37:29.273 [DEBUG] [Thread-20631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:37:29.273 [DEBUG] [Thread-20631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:37:29.273 [DEBUG] [Thread-20631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:37:29.273 [DEBUG] [Thread-20631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:37:29.273 [DEBUG] [Thread-20631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:37:29.273 [DEBUG] [Thread-20631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:37:29.274 [DEBUG] [Thread-20631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:37:29.274 [DEBUG] [Thread-20631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:37:29.274 [DEBUG] [Thread-20631] [transport.py] [_log()] client lang: <none>
2026-04-15T14:37:29.274 [DEBUG] [Thread-20631] [transport.py] [_log()] server lang: <none>
2026-04-15T14:37:29.274 [DEBUG] [Thread-20631] [transport.py] [_log()] kex follows: False
2026-04-15T14:37:29.274 [DEBUG] [Thread-20631] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:37:29.274 [DEBUG] [Thread-20631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:37:29.274 [DEBUG] [Thread-20631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:37:29.274 [DEBUG] [Thread-20631] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:37:29.274 [DEBUG] [Thread-20631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:37:29.274 [DEBUG] [Thread-20631] [transport.py] [_log()] Compression: none
2026-04-15T14:37:29.275 [DEBUG] [Thread-20631] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:37:29.294 [DEBUG] [Thread-20631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:37:29.294 [DEBUG] [Thread-20631] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:37:29.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:37:29.295 [DEBUG] [Thread-20631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:37:29.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:37:29.296 [DEBUG] [Thread-20631] [transport.py] [_log()] userauth is OK
2026-04-15T14:37:29.296 [DEBUG] [Thread-20631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:37:29.296 [DEBUG] [Thread-20631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:37:29.297 [DEBUG] [Thread-20631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:37:29.297 [DEBUG] [Thread-20631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:37:29.333 [INFO] [Thread-20631] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:37:29.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:37:30.167 [DEBUG] [Thread-20631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:37:30.168 [DEBUG] [Thread-20631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:37:30.168 [DEBUG] [Thread-20631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:37:30.209 [DEBUG] [Thread-20631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:37:30.209 [DEBUG] [Thread-20631] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:37:30.212 [DEBUG] [Thread-20631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:37:30.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:37:30.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:37:30.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:37:30.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:37:30.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:37:30.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:37:30.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:37:30.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:37:30.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:37:30.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.525484 -999.00  +14.40  17.52     62   +7.30 1 1 1 1 1   888    0 7.70 27.34 ----- 16.8 17.5 304.2 27.0 20.6 -25.8 19.4 -26.1 20.0 -24.4 21.2 -23.7
2026-04-15T14:37:30.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:37:30.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:37:30.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.525484
2026-04-15T14:37:30.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:37:30.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:37:30.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:37:30.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:37:30.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:37:30.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:36:51', tmtdew=8.54087, humidity=56.471, cloud=0.0, wind=25.5463, temperature=14.5572, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:36:41.818', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:37:30.237 [DEBUG] [Thread-20631] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:37:30.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:37:30.494 [DEBUG] [Thread-20634] [transport.py] [_log()] starting thread (client mode): 0xf13ec2b0
2026-04-15T14:37:30.494 [DEBUG] [Thread-20634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:37:30.510 [DEBUG] [Thread-20634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:37:30.510 [INFO] [Thread-20634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:37:30.521 [DEBUG] [Thread-20634] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:37:30.521 [DEBUG] [Thread-20634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:37:30.521 [DEBUG] [Thread-20634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:37:30.521 [DEBUG] [Thread-20634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:37:30.521 [DEBUG] [Thread-20634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:37:30.521 [DEBUG] [Thread-20634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:37:30.521 [DEBUG] [Thread-20634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:37:30.521 [DEBUG] [Thread-20634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:37:30.521 [DEBUG] [Thread-20634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:37:30.522 [DEBUG] [Thread-20634] [transport.py] [_log()] client lang: <none>
2026-04-15T14:37:30.522 [DEBUG] [Thread-20634] [transport.py] [_log()] server lang: <none>
2026-04-15T14:37:30.522 [DEBUG] [Thread-20634] [transport.py] [_log()] kex follows: False
2026-04-15T14:37:30.522 [DEBUG] [Thread-20634] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:37:30.522 [DEBUG] [Thread-20634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:37:30.522 [DEBUG] [Thread-20634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:37:30.522 [DEBUG] [Thread-20634] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:37:30.522 [DEBUG] [Thread-20634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:37:30.522 [DEBUG] [Thread-20634] [transport.py] [_log()] Compression: none
2026-04-15T14:37:30.522 [DEBUG] [Thread-20634] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:37:30.574 [DEBUG] [Thread-20634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:37:30.574 [DEBUG] [Thread-20634] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:37:30.574 [DEBUG] [Thread-20634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:37:30.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:37:30.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:37:30.631 [DEBUG] [Thread-20634] [transport.py] [_log()] userauth is OK
2026-04-15T14:37:30.631 [DEBUG] [Thread-20634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:37:30.631 [DEBUG] [Thread-20634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:37:30.631 [DEBUG] [Thread-20634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:37:30.631 [DEBUG] [Thread-20634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:37:30.658 [INFO] [Thread-20634] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:37:30.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:37:30.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:37:31.492 [DEBUG] [Thread-20634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:37:31.493 [DEBUG] [Thread-20634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:37:31.540 [DEBUG] [Thread-20634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:37:31.541 [DEBUG] [Thread-20634] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:37:31.553 [DEBUG] [Thread-20634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:37:31.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:37:31.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')
2026-04-15T14:37:31.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') -> 00000000
2026-04-15T14:37:31.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:37:31.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:37:31.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:37:31.588 [DEBUG] [Thread-20634] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:37:41.702 [DEBUG] [Thread-20636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:37:56.746 [DEBUG] [Thread-20637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:38:01.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:38:01.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:38:01.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
2026-04-15T14:38:02.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 37, 26), 8.55232, 56.1029, 0.0, 22.5148, 14.0454, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:38:02.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:37:26
2026-04-15T14:38:03.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:38:03.854 [DEBUG] [Thread-20638] [transport.py] [_log()] starting thread (client mode): 0xee9ad4e0
2026-04-15T14:38:03.854 [DEBUG] [Thread-20638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:38:03.873 [DEBUG] [Thread-20638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:38:03.874 [INFO] [Thread-20638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:38:03.877 [DEBUG] [Thread-20638] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:38:03.877 [DEBUG] [Thread-20638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:38:03.877 [DEBUG] [Thread-20638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:38:03.877 [DEBUG] [Thread-20638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:38:03.877 [DEBUG] [Thread-20638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:38:03.877 [DEBUG] [Thread-20638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:38:03.877 [DEBUG] [Thread-20638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:38:03.877 [DEBUG] [Thread-20638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:38:03.877 [DEBUG] [Thread-20638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:38:03.878 [DEBUG] [Thread-20638] [transport.py] [_log()] client lang: <none>
2026-04-15T14:38:03.878 [DEBUG] [Thread-20638] [transport.py] [_log()] server lang: <none>
2026-04-15T14:38:03.878 [DEBUG] [Thread-20638] [transport.py] [_log()] kex follows: False
2026-04-15T14:38:03.878 [DEBUG] [Thread-20638] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:38:03.878 [DEBUG] [Thread-20638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:38:03.878 [DEBUG] [Thread-20638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:38:03.878 [DEBUG] [Thread-20638] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:38:03.878 [DEBUG] [Thread-20638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:38:03.878 [DEBUG] [Thread-20638] [transport.py] [_log()] Compression: none
2026-04-15T14:38:03.878 [DEBUG] [Thread-20638] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:38:03.897 [DEBUG] [Thread-20638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:38:03.897 [DEBUG] [Thread-20638] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:38:03.897 [DEBUG] [Thread-20638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:38:03.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:38:03.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:38:03.898 [DEBUG] [Thread-20638] [transport.py] [_log()] userauth is OK
2026-04-15T14:38:03.899 [DEBUG] [Thread-20638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:38:03.899 [DEBUG] [Thread-20638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:38:03.899 [DEBUG] [Thread-20638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:38:03.899 [DEBUG] [Thread-20638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:38:03.924 [INFO] [Thread-20638] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:38:03.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:38:04.704 [DEBUG] [Thread-20638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:38:04.704 [DEBUG] [Thread-20638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:38:04.705 [DEBUG] [Thread-20638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:38:04.745 [DEBUG] [Thread-20638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:38:04.745 [DEBUG] [Thread-20638] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:38:04.748 [DEBUG] [Thread-20638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:38:04.757 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:38:04.758 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:38:04.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:38:04.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:38:04.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:38:04.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:38:04.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:38:04.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:38:04.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:38:04.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:38:04.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:38:04.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.525831 -999.00  +14.10  18.48     63   +7.20 1 1 1 1 1   888    0 7.60 27.56 ----- 16.4 18.5 309.4 20.6 20.4 -26.2 19.4 -24.9 19.9 -21.3 21.1 -23.2
2026-04-15T14:38:04.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:38:04.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:38:04.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.525831
2026-04-15T14:38:04.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:38:04.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:38:04.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:38:04.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:38:04.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:38:04.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:37:26', tmtdew=8.55232, humidity=56.1029, cloud=0.0, wind=22.5148, temperature=14.0454, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:37:11.798', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:38:04.773 [DEBUG] [Thread-20638] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:38:05.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:38:05.012 [DEBUG] [Thread-20641] [transport.py] [_log()] starting thread (client mode): 0xee9ad120
2026-04-15T14:38:05.012 [DEBUG] [Thread-20641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:38:05.026 [DEBUG] [Thread-20641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:38:05.026 [INFO] [Thread-20641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:38:05.034 [DEBUG] [Thread-20641] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:38:05.034 [DEBUG] [Thread-20641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:38:05.034 [DEBUG] [Thread-20641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:38:05.034 [DEBUG] [Thread-20641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:38:05.034 [DEBUG] [Thread-20641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:38:05.034 [DEBUG] [Thread-20641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:38:05.034 [DEBUG] [Thread-20641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:38:05.034 [DEBUG] [Thread-20641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:38:05.034 [DEBUG] [Thread-20641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:38:05.034 [DEBUG] [Thread-20641] [transport.py] [_log()] client lang: <none>
2026-04-15T14:38:05.034 [DEBUG] [Thread-20641] [transport.py] [_log()] server lang: <none>
2026-04-15T14:38:05.034 [DEBUG] [Thread-20641] [transport.py] [_log()] kex follows: False
2026-04-15T14:38:05.035 [DEBUG] [Thread-20641] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:38:05.035 [DEBUG] [Thread-20641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:38:05.035 [DEBUG] [Thread-20641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:38:05.035 [DEBUG] [Thread-20641] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:38:05.035 [DEBUG] [Thread-20641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:38:05.035 [DEBUG] [Thread-20641] [transport.py] [_log()] Compression: none
2026-04-15T14:38:05.035 [DEBUG] [Thread-20641] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:38:05.090 [DEBUG] [Thread-20641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:38:05.090 [DEBUG] [Thread-20641] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:38:05.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:38:05.091 [DEBUG] [Thread-20641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:38:05.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:38:05.150 [DEBUG] [Thread-20641] [transport.py] [_log()] userauth is OK
2026-04-15T14:38:05.150 [DEBUG] [Thread-20641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:38:05.151 [DEBUG] [Thread-20641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:38:05.151 [DEBUG] [Thread-20641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:38:05.151 [DEBUG] [Thread-20641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:38:05.176 [INFO] [Thread-20641] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:38:05.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:38:05.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:38:06.000 [DEBUG] [Thread-20641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:38:06.000 [DEBUG] [Thread-20641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:38:06.048 [DEBUG] [Thread-20641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:38:06.048 [DEBUG] [Thread-20641] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:38:06.057 [DEBUG] [Thread-20641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:38:06.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:38:06.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')
2026-04-15T14:38:06.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
2026-04-15T14:38:06.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:38:06.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:38:06.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:38:06.091 [DEBUG] [Thread-20641] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:38:11.776 [DEBUG] [Thread-20643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:38:26.823 [DEBUG] [Thread-20644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:38:28.066 [DEBUG] [Thread-20645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:38:36.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:38:36.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:38:36.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
2026-04-15T14:38:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 38, 2), 8.43596, 56.5503, 0.0, 23.9083, 14.0123, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:38:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:38:02
2026-04-15T14:38:37.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:38:38.388 [DEBUG] [Thread-20646] [transport.py] [_log()] starting thread (client mode): 0xee9af0d0
2026-04-15T14:38:38.389 [DEBUG] [Thread-20646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:38:38.409 [DEBUG] [Thread-20646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:38:38.409 [INFO] [Thread-20646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:38:38.410 [DEBUG] [Thread-20646] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] client lang: <none>
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] server lang: <none>
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] kex follows: False
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] Compression: none
2026-04-15T14:38:38.411 [DEBUG] [Thread-20646] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:38:38.427 [DEBUG] [Thread-20646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:38:38.428 [DEBUG] [Thread-20646] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:38:38.428 [DEBUG] [Thread-20646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:38:38.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:38:38.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:38:38.429 [DEBUG] [Thread-20646] [transport.py] [_log()] userauth is OK
2026-04-15T14:38:38.429 [DEBUG] [Thread-20646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:38:38.429 [DEBUG] [Thread-20646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:38:38.429 [DEBUG] [Thread-20646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:38:38.429 [DEBUG] [Thread-20646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:38:38.442 [INFO] [Thread-20646] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:38:38.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:38:39.228 [DEBUG] [Thread-20646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:38:39.228 [DEBUG] [Thread-20646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:38:39.229 [DEBUG] [Thread-20646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:38:39.269 [DEBUG] [Thread-20646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:38:39.269 [DEBUG] [Thread-20646] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:38:39.272 [DEBUG] [Thread-20646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:38:39.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:38:39.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:38:39.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:38:39.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:38:39.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:38:39.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:38:39.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:38:39.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:38:39.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:38:39.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.526526 -999.00  +14.50  22.18     62   +7.40 1 1 1 1 1   888    0 7.55 22.87 ----- 14.0 22.2 330.6 24.3 20.8 -24.3 19.7 -24.2 20.3 -22.8 21.5 -22.5
2026-04-15T14:38:39.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:38:39.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:38:39.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.526526
2026-04-15T14:38:39.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:38:39.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:38:39.295 [DEBUG] [Thread-20646] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:38:39.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:38:39.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:38:39.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:38:39.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:38:02', tmtdew=8.43596, humidity=56.5503, cloud=0.0, wind=23.9083, temperature=14.0123, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:38:11.846', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:38:39.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:38:39.551 [DEBUG] [Thread-20649] [transport.py] [_log()] starting thread (client mode): 0xf13c9360
2026-04-15T14:38:39.551 [DEBUG] [Thread-20649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:38:39.564 [DEBUG] [Thread-20649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:38:39.564 [INFO] [Thread-20649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:38:39.572 [DEBUG] [Thread-20649] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:38:39.572 [DEBUG] [Thread-20649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:38:39.572 [DEBUG] [Thread-20649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:38:39.572 [DEBUG] [Thread-20649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:38:39.572 [DEBUG] [Thread-20649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:38:39.572 [DEBUG] [Thread-20649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:38:39.572 [DEBUG] [Thread-20649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:38:39.572 [DEBUG] [Thread-20649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:38:39.572 [DEBUG] [Thread-20649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:38:39.573 [DEBUG] [Thread-20649] [transport.py] [_log()] client lang: <none>
2026-04-15T14:38:39.573 [DEBUG] [Thread-20649] [transport.py] [_log()] server lang: <none>
2026-04-15T14:38:39.573 [DEBUG] [Thread-20649] [transport.py] [_log()] kex follows: False
2026-04-15T14:38:39.573 [DEBUG] [Thread-20649] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:38:39.573 [DEBUG] [Thread-20649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:38:39.573 [DEBUG] [Thread-20649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:38:39.573 [DEBUG] [Thread-20649] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:38:39.573 [DEBUG] [Thread-20649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:38:39.573 [DEBUG] [Thread-20649] [transport.py] [_log()] Compression: none
2026-04-15T14:38:39.573 [DEBUG] [Thread-20649] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:38:39.629 [DEBUG] [Thread-20649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:38:39.630 [DEBUG] [Thread-20649] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:38:39.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:38:39.631 [DEBUG] [Thread-20649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:38:39.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:38:39.687 [DEBUG] [Thread-20649] [transport.py] [_log()] userauth is OK
2026-04-15T14:38:39.687 [DEBUG] [Thread-20649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:38:39.687 [DEBUG] [Thread-20649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:38:39.687 [DEBUG] [Thread-20649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:38:39.687 [DEBUG] [Thread-20649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:38:39.714 [INFO] [Thread-20649] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:38:39.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:38:39.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:38:40.567 [DEBUG] [Thread-20649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:38:40.567 [DEBUG] [Thread-20649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:38:40.615 [DEBUG] [Thread-20649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:38:40.615 [DEBUG] [Thread-20649] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:38:40.624 [DEBUG] [Thread-20649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:38:40.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:38:40.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')
2026-04-15T14:38:40.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
2026-04-15T14:38:40.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:38:40.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:38:40.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:38:40.662 [DEBUG] [Thread-20649] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:38:41.855 [DEBUG] [Thread-20651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:38:56.900 [DEBUG] [Thread-20652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:39:04.898 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:39:04.899 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:39:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:39:10.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:39:10.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
2026-04-15T14:39:11.933 [DEBUG] [Thread-20653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:39:11.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 38, 38), 8.43088, 56.9016, 0.0, 24.0646, 14.557, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:39:11.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:38:38
2026-04-15T14:39:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:39:12.781 [DEBUG] [Thread-20654] [transport.py] [_log()] starting thread (client mode): 0xf13ef820
2026-04-15T14:39:12.781 [DEBUG] [Thread-20654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:39:12.796 [DEBUG] [Thread-20654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:39:12.796 [INFO] [Thread-20654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:39:12.799 [DEBUG] [Thread-20654] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:39:12.799 [DEBUG] [Thread-20654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:39:12.799 [DEBUG] [Thread-20654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:39:12.799 [DEBUG] [Thread-20654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:39:12.799 [DEBUG] [Thread-20654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:39:12.799 [DEBUG] [Thread-20654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:39:12.799 [DEBUG] [Thread-20654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:39:12.799 [DEBUG] [Thread-20654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:39:12.799 [DEBUG] [Thread-20654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:39:12.799 [DEBUG] [Thread-20654] [transport.py] [_log()] client lang: <none>
2026-04-15T14:39:12.800 [DEBUG] [Thread-20654] [transport.py] [_log()] server lang: <none>
2026-04-15T14:39:12.800 [DEBUG] [Thread-20654] [transport.py] [_log()] kex follows: False
2026-04-15T14:39:12.800 [DEBUG] [Thread-20654] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:39:12.800 [DEBUG] [Thread-20654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:39:12.800 [DEBUG] [Thread-20654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:39:12.800 [DEBUG] [Thread-20654] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:39:12.800 [DEBUG] [Thread-20654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:39:12.800 [DEBUG] [Thread-20654] [transport.py] [_log()] Compression: none
2026-04-15T14:39:12.800 [DEBUG] [Thread-20654] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:39:12.818 [DEBUG] [Thread-20654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:39:12.818 [DEBUG] [Thread-20654] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:39:12.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:39:12.818 [DEBUG] [Thread-20654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:39:12.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:39:12.819 [DEBUG] [Thread-20654] [transport.py] [_log()] userauth is OK
2026-04-15T14:39:12.819 [DEBUG] [Thread-20654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:39:12.820 [DEBUG] [Thread-20654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:39:12.820 [DEBUG] [Thread-20654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:39:12.820 [DEBUG] [Thread-20654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:39:12.840 [INFO] [Thread-20654] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:39:12.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:39:13.617 [DEBUG] [Thread-20654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:39:13.617 [DEBUG] [Thread-20654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:39:13.618 [DEBUG] [Thread-20654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:39:13.658 [DEBUG] [Thread-20654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:39:13.658 [DEBUG] [Thread-20654] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:39:13.660 [DEBUG] [Thread-20654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:39:13.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:39:13.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:39:13.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:39:13.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:39:13.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:39:13.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:39:13.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:39:13.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:39:13.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:39:13.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.526873 -999.00  +14.90  18.27     63   +7.90 1 2 1 1 1   888    0 7.58 22.14 ----- 15.9 18.3 327.4 24.7 20.9 -23.7 19.9 -24.0 20.5 -20.1 21.6 -21.4
2026-04-15T14:39:13.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:39:13.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:39:13.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.526873
2026-04-15T14:39:13.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:39:13.684 [DEBUG] [Thread-20654] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:39:13.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:39:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:39:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:39:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:39:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:38:38', tmtdew=8.43088, humidity=56.9016, cloud=0.0, wind=24.0646, temperature=14.557, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:38:41.827', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:39:13.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:39:13.948 [DEBUG] [Thread-20657] [transport.py] [_log()] starting thread (client mode): 0xee9e5990
2026-04-15T14:39:13.948 [DEBUG] [Thread-20657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:39:13.962 [DEBUG] [Thread-20657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:39:13.962 [INFO] [Thread-20657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:39:13.969 [DEBUG] [Thread-20657] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:39:13.969 [DEBUG] [Thread-20657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:39:13.970 [DEBUG] [Thread-20657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:39:13.970 [DEBUG] [Thread-20657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:39:13.970 [DEBUG] [Thread-20657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:39:13.970 [DEBUG] [Thread-20657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:39:13.970 [DEBUG] [Thread-20657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:39:13.970 [DEBUG] [Thread-20657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:39:13.970 [DEBUG] [Thread-20657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:39:13.970 [DEBUG] [Thread-20657] [transport.py] [_log()] client lang: <none>
2026-04-15T14:39:13.970 [DEBUG] [Thread-20657] [transport.py] [_log()] server lang: <none>
2026-04-15T14:39:13.970 [DEBUG] [Thread-20657] [transport.py] [_log()] kex follows: False
2026-04-15T14:39:13.970 [DEBUG] [Thread-20657] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:39:13.971 [DEBUG] [Thread-20657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:39:13.971 [DEBUG] [Thread-20657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:39:13.971 [DEBUG] [Thread-20657] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:39:13.971 [DEBUG] [Thread-20657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:39:13.971 [DEBUG] [Thread-20657] [transport.py] [_log()] Compression: none
2026-04-15T14:39:13.971 [DEBUG] [Thread-20657] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:39:14.030 [DEBUG] [Thread-20657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:39:14.030 [DEBUG] [Thread-20657] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:39:14.031 [DEBUG] [Thread-20657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:39:14.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:39:14.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:39:14.092 [DEBUG] [Thread-20657] [transport.py] [_log()] userauth is OK
2026-04-15T14:39:14.093 [DEBUG] [Thread-20657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:39:14.093 [DEBUG] [Thread-20657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:39:14.093 [DEBUG] [Thread-20657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:39:14.093 [DEBUG] [Thread-20657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:39:14.118 [INFO] [Thread-20657] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:39:14.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:39:14.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:39:14.914 [DEBUG] [Thread-20657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:39:14.914 [DEBUG] [Thread-20657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:39:14.962 [DEBUG] [Thread-20657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:39:14.962 [DEBUG] [Thread-20657] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:39:14.971 [DEBUG] [Thread-20657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:39:14.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:39:14.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')
2026-04-15T14:39:14.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
2026-04-15T14:39:15.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:39:15.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:39:15.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:39:15.014 [DEBUG] [Thread-20657] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:39:26.965 [DEBUG] [Thread-20659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:39:28.187 [DEBUG] [Thread-20660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:39:42.008 [DEBUG] [Thread-20661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:39:45.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:39:45.037 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:39:45.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
2026-04-15T14:39:46.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 39, 13), 8.24813, 57.636, 0.0, 16.2158, 14.2617, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:39:46.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:39:13
2026-04-15T14:39:46.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:39:47.417 [DEBUG] [Thread-20662] [transport.py] [_log()] starting thread (client mode): 0xee902920
2026-04-15T14:39:47.417 [DEBUG] [Thread-20662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:39:47.437 [DEBUG] [Thread-20662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:39:47.438 [INFO] [Thread-20662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:39:47.441 [DEBUG] [Thread-20662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:39:47.441 [DEBUG] [Thread-20662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:39:47.441 [DEBUG] [Thread-20662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:39:47.441 [DEBUG] [Thread-20662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:39:47.441 [DEBUG] [Thread-20662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:39:47.441 [DEBUG] [Thread-20662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:39:47.441 [DEBUG] [Thread-20662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:39:47.441 [DEBUG] [Thread-20662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:39:47.442 [DEBUG] [Thread-20662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:39:47.442 [DEBUG] [Thread-20662] [transport.py] [_log()] client lang: <none>
2026-04-15T14:39:47.442 [DEBUG] [Thread-20662] [transport.py] [_log()] server lang: <none>
2026-04-15T14:39:47.442 [DEBUG] [Thread-20662] [transport.py] [_log()] kex follows: False
2026-04-15T14:39:47.442 [DEBUG] [Thread-20662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:39:47.442 [DEBUG] [Thread-20662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:39:47.442 [DEBUG] [Thread-20662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:39:47.442 [DEBUG] [Thread-20662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:39:47.442 [DEBUG] [Thread-20662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:39:47.442 [DEBUG] [Thread-20662] [transport.py] [_log()] Compression: none
2026-04-15T14:39:47.442 [DEBUG] [Thread-20662] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:39:47.459 [DEBUG] [Thread-20662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:39:47.460 [DEBUG] [Thread-20662] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:39:47.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:39:47.460 [DEBUG] [Thread-20662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:39:47.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:39:47.503 [DEBUG] [Thread-20662] [transport.py] [_log()] userauth is OK
2026-04-15T14:39:47.503 [DEBUG] [Thread-20662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:39:47.503 [DEBUG] [Thread-20662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:39:47.503 [DEBUG] [Thread-20662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:39:47.503 [DEBUG] [Thread-20662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:39:47.539 [INFO] [Thread-20662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:39:47.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:39:48.305 [DEBUG] [Thread-20662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:39:48.305 [DEBUG] [Thread-20662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:39:48.306 [DEBUG] [Thread-20662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:39:48.346 [DEBUG] [Thread-20662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:39:48.346 [DEBUG] [Thread-20662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:39:48.349 [DEBUG] [Thread-20662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:39:48.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:39:48.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:39:48.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:39:48.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:39:48.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:39:48.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:39:48.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:39:48.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:39:48.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:39:48.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.527220 -999.00  +14.60  11.64     61   +7.30 1 2 1 1 1   888    0 7.59 22.48 ----- 12.4 11.6 346.0 18.6 21.0 -25.3 19.8 -24.7 20.6 -20.8 21.7 -24.2
2026-04-15T14:39:48.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:39:48.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:39:48.365 [DEBUG] [Thread-20662] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:39:48.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.527220
2026-04-15T14:39:48.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:39:48.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:39:48.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:39:48.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:39:48.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:39:48.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:39:13', tmtdew=8.24813, humidity=57.636, cloud=0.0, wind=16.2158, temperature=14.2617, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:39:11.808', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:39:48.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:39:48.631 [DEBUG] [Thread-20665] [transport.py] [_log()] starting thread (client mode): 0xee98e4d0
2026-04-15T14:39:48.632 [DEBUG] [Thread-20665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:39:48.645 [DEBUG] [Thread-20665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:39:48.646 [INFO] [Thread-20665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:39:48.653 [DEBUG] [Thread-20665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:39:48.653 [DEBUG] [Thread-20665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:39:48.653 [DEBUG] [Thread-20665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:39:48.654 [DEBUG] [Thread-20665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:39:48.654 [DEBUG] [Thread-20665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:39:48.654 [DEBUG] [Thread-20665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:39:48.654 [DEBUG] [Thread-20665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:39:48.654 [DEBUG] [Thread-20665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:39:48.654 [DEBUG] [Thread-20665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:39:48.654 [DEBUG] [Thread-20665] [transport.py] [_log()] client lang: <none>
2026-04-15T14:39:48.654 [DEBUG] [Thread-20665] [transport.py] [_log()] server lang: <none>
2026-04-15T14:39:48.654 [DEBUG] [Thread-20665] [transport.py] [_log()] kex follows: False
2026-04-15T14:39:48.654 [DEBUG] [Thread-20665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:39:48.654 [DEBUG] [Thread-20665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:39:48.655 [DEBUG] [Thread-20665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:39:48.655 [DEBUG] [Thread-20665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:39:48.655 [DEBUG] [Thread-20665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:39:48.655 [DEBUG] [Thread-20665] [transport.py] [_log()] Compression: none
2026-04-15T14:39:48.655 [DEBUG] [Thread-20665] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:39:48.710 [DEBUG] [Thread-20665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:39:48.710 [DEBUG] [Thread-20665] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:39:48.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:39:48.711 [DEBUG] [Thread-20665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:39:48.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:39:48.767 [DEBUG] [Thread-20665] [transport.py] [_log()] userauth is OK
2026-04-15T14:39:48.767 [DEBUG] [Thread-20665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:39:48.767 [DEBUG] [Thread-20665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:39:48.768 [DEBUG] [Thread-20665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:39:48.768 [DEBUG] [Thread-20665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:39:48.794 [INFO] [Thread-20665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:39:48.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:39:48.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:39:49.674 [DEBUG] [Thread-20665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:39:49.675 [DEBUG] [Thread-20665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:39:49.722 [DEBUG] [Thread-20665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:39:49.723 [DEBUG] [Thread-20665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:39:49.732 [DEBUG] [Thread-20665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:39:49.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:39:49.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')
2026-04-15T14:39:49.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
2026-04-15T14:39:49.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:39:49.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:39:49.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:39:49.767 [DEBUG] [Thread-20665] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:39:57.039 [DEBUG] [Thread-20667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:40:05.040 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:40:05.041 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:40:12.084 [DEBUG] [Thread-20668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:40:19.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:40:19.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:40:19.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
2026-04-15T14:40:21.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 39, 48), 8.6603, 56.0404, 0.0, 16.1618, 14.6901, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:40:21.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:39:48
2026-04-15T14:40:21.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:40:21.932 [DEBUG] [Thread-20669] [transport.py] [_log()] starting thread (client mode): 0xee903d00
2026-04-15T14:40:21.933 [DEBUG] [Thread-20669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:40:21.953 [DEBUG] [Thread-20669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:40:21.953 [INFO] [Thread-20669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:40:21.956 [DEBUG] [Thread-20669] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:40:21.956 [DEBUG] [Thread-20669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:40:21.956 [DEBUG] [Thread-20669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:40:21.956 [DEBUG] [Thread-20669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:40:21.956 [DEBUG] [Thread-20669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:40:21.956 [DEBUG] [Thread-20669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:40:21.956 [DEBUG] [Thread-20669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:40:21.956 [DEBUG] [Thread-20669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:40:21.957 [DEBUG] [Thread-20669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:40:21.957 [DEBUG] [Thread-20669] [transport.py] [_log()] client lang: <none>
2026-04-15T14:40:21.957 [DEBUG] [Thread-20669] [transport.py] [_log()] server lang: <none>
2026-04-15T14:40:21.957 [DEBUG] [Thread-20669] [transport.py] [_log()] kex follows: False
2026-04-15T14:40:21.957 [DEBUG] [Thread-20669] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:40:21.957 [DEBUG] [Thread-20669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:40:21.957 [DEBUG] [Thread-20669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:40:21.957 [DEBUG] [Thread-20669] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:40:21.957 [DEBUG] [Thread-20669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:40:21.957 [DEBUG] [Thread-20669] [transport.py] [_log()] Compression: none
2026-04-15T14:40:21.957 [DEBUG] [Thread-20669] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:40:21.974 [DEBUG] [Thread-20669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:40:21.975 [DEBUG] [Thread-20669] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:40:21.975 [DEBUG] [Thread-20669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:40:21.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:40:21.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:40:21.976 [DEBUG] [Thread-20669] [transport.py] [_log()] userauth is OK
2026-04-15T14:40:21.977 [DEBUG] [Thread-20669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:40:21.977 [DEBUG] [Thread-20669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:40:21.977 [DEBUG] [Thread-20669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:40:21.977 [DEBUG] [Thread-20669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:40:22.012 [INFO] [Thread-20669] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:40:22.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:40:23.890 [DEBUG] [Thread-20669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:40:23.890 [DEBUG] [Thread-20669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:40:23.891 [DEBUG] [Thread-20669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:40:23.931 [DEBUG] [Thread-20669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:40:23.931 [DEBUG] [Thread-20669] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:40:23.934 [DEBUG] [Thread-20669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:40:23.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:40:23.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:40:23.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:40:23.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:40:23.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:40:23.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:40:23.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:40:23.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:40:23.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:40:23.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.527567 -999.00  +14.40  13.69     62   +7.20 1 2 1 1 1   888    0 7.48 22.19 ----- 20.8 13.7 327.4 17.4 21.0 -25.4 19.9 -24.1 20.7 -21.4 21.7 -25.7
2026-04-15T14:40:23.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:40:23.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:40:23.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.527567
2026-04-15T14:40:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:40:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:40:23.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:40:23.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:40:23.972 [DEBUG] [Thread-20669] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:40:23.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:40:23.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:39:48', tmtdew=8.6603, humidity=56.0404, cloud=0.0, wind=16.1618, temperature=14.6901, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:39:41.789', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:40:24.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:40:24.229 [DEBUG] [Thread-20672] [transport.py] [_log()] starting thread (client mode): 0xee9005b0
2026-04-15T14:40:24.230 [DEBUG] [Thread-20672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:40:24.245 [DEBUG] [Thread-20672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:40:24.245 [INFO] [Thread-20672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:40:24.252 [DEBUG] [Thread-20672] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:40:24.252 [DEBUG] [Thread-20672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:40:24.252 [DEBUG] [Thread-20672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:40:24.252 [DEBUG] [Thread-20672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:40:24.252 [DEBUG] [Thread-20672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:40:24.253 [DEBUG] [Thread-20672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:40:24.253 [DEBUG] [Thread-20672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:40:24.253 [DEBUG] [Thread-20672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:40:24.253 [DEBUG] [Thread-20672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:40:24.253 [DEBUG] [Thread-20672] [transport.py] [_log()] client lang: <none>
2026-04-15T14:40:24.253 [DEBUG] [Thread-20672] [transport.py] [_log()] server lang: <none>
2026-04-15T14:40:24.253 [DEBUG] [Thread-20672] [transport.py] [_log()] kex follows: False
2026-04-15T14:40:24.253 [DEBUG] [Thread-20672] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:40:24.253 [DEBUG] [Thread-20672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:40:24.253 [DEBUG] [Thread-20672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:40:24.253 [DEBUG] [Thread-20672] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:40:24.254 [DEBUG] [Thread-20672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:40:24.254 [DEBUG] [Thread-20672] [transport.py] [_log()] Compression: none
2026-04-15T14:40:24.254 [DEBUG] [Thread-20672] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:40:24.311 [DEBUG] [Thread-20672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:40:24.311 [DEBUG] [Thread-20672] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:40:24.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:40:24.312 [DEBUG] [Thread-20672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:40:24.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:40:24.368 [DEBUG] [Thread-20672] [transport.py] [_log()] userauth is OK
2026-04-15T14:40:24.368 [DEBUG] [Thread-20672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:40:24.368 [DEBUG] [Thread-20672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:40:24.369 [DEBUG] [Thread-20672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:40:24.369 [DEBUG] [Thread-20672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:40:24.393 [INFO] [Thread-20672] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:40:24.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:40:24.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:40:25.226 [DEBUG] [Thread-20672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:40:25.226 [DEBUG] [Thread-20672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:40:25.274 [DEBUG] [Thread-20672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:40:25.274 [DEBUG] [Thread-20672] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:40:25.283 [DEBUG] [Thread-20672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:40:25.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:40:25.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')
2026-04-15T14:40:25.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
2026-04-15T14:40:25.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:40:25.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:40:25.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:40:25.320 [DEBUG] [Thread-20672] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:40:27.116 [DEBUG] [Thread-20674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:40:28.265 [DEBUG] [Thread-20675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:40:42.158 [DEBUG] [Thread-20676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:40:55.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:40:55.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:40:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:40:56.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 40, 24), 8.48868, 56.8848, 0.0, 14.2218, 14.5282, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:40:56.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:40:24
2026-04-15T14:40:57.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:40:57.185 [DEBUG] [Thread-20677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:40:57.508 [DEBUG] [Thread-20678] [transport.py] [_log()] starting thread (client mode): 0xee9864a0
2026-04-15T14:40:57.508 [DEBUG] [Thread-20678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:40:57.528 [DEBUG] [Thread-20678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:40:57.528 [INFO] [Thread-20678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:40:57.531 [DEBUG] [Thread-20678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:40:57.531 [DEBUG] [Thread-20678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:40:57.531 [DEBUG] [Thread-20678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:40:57.531 [DEBUG] [Thread-20678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:40:57.531 [DEBUG] [Thread-20678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:40:57.531 [DEBUG] [Thread-20678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:40:57.531 [DEBUG] [Thread-20678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:40:57.531 [DEBUG] [Thread-20678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:40:57.532 [DEBUG] [Thread-20678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:40:57.532 [DEBUG] [Thread-20678] [transport.py] [_log()] client lang: <none>
2026-04-15T14:40:57.532 [DEBUG] [Thread-20678] [transport.py] [_log()] server lang: <none>
2026-04-15T14:40:57.532 [DEBUG] [Thread-20678] [transport.py] [_log()] kex follows: False
2026-04-15T14:40:57.532 [DEBUG] [Thread-20678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:40:57.532 [DEBUG] [Thread-20678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:40:57.532 [DEBUG] [Thread-20678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:40:57.532 [DEBUG] [Thread-20678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:40:57.532 [DEBUG] [Thread-20678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:40:57.532 [DEBUG] [Thread-20678] [transport.py] [_log()] Compression: none
2026-04-15T14:40:57.532 [DEBUG] [Thread-20678] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:40:57.551 [DEBUG] [Thread-20678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:40:57.552 [DEBUG] [Thread-20678] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:40:57.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:40:57.553 [DEBUG] [Thread-20678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:40:57.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:40:57.554 [DEBUG] [Thread-20678] [transport.py] [_log()] userauth is OK
2026-04-15T14:40:57.554 [DEBUG] [Thread-20678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:40:57.554 [DEBUG] [Thread-20678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:40:57.554 [DEBUG] [Thread-20678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:40:57.554 [DEBUG] [Thread-20678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:40:57.578 [INFO] [Thread-20678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:40:57.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:40:58.379 [DEBUG] [Thread-20678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:40:58.379 [DEBUG] [Thread-20678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:40:58.380 [DEBUG] [Thread-20678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:40:58.420 [DEBUG] [Thread-20678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:40:58.420 [DEBUG] [Thread-20678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:40:58.423 [DEBUG] [Thread-20678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:40:58.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:40:58.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:40:58.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:40:58.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:40:58.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:40:58.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:40:58.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:40:58.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:40:58.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:40:58.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.527915 -999.00  +14.30  16.21     63   +7.40 1 1 1 1 1   888    0 7.55 23.01 ----- 22.6 16.2 316.2 24.9 21.1 -25.1 19.9 -24.6 20.7 -21.7 21.8 -23.5
2026-04-15T14:40:58.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:40:58.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:40:58.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.527915
2026-04-15T14:40:58.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:40:58.449 [DEBUG] [Thread-20678] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:40:58.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:40:58.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:40:58.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:40:58.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:40:58.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:40:24', tmtdew=8.48868, humidity=56.8848, cloud=0.0, wind=14.2218, temperature=14.5282, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:40:11.856', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:40:58.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:40:58.709 [DEBUG] [Thread-20681] [transport.py] [_log()] starting thread (client mode): 0xee903010
2026-04-15T14:40:58.709 [DEBUG] [Thread-20681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:40:58.723 [DEBUG] [Thread-20681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:40:58.723 [INFO] [Thread-20681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:40:58.731 [DEBUG] [Thread-20681] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:40:58.731 [DEBUG] [Thread-20681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:40:58.731 [DEBUG] [Thread-20681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:40:58.731 [DEBUG] [Thread-20681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:40:58.731 [DEBUG] [Thread-20681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:40:58.731 [DEBUG] [Thread-20681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:40:58.732 [DEBUG] [Thread-20681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:40:58.732 [DEBUG] [Thread-20681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:40:58.732 [DEBUG] [Thread-20681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:40:58.732 [DEBUG] [Thread-20681] [transport.py] [_log()] client lang: <none>
2026-04-15T14:40:58.732 [DEBUG] [Thread-20681] [transport.py] [_log()] server lang: <none>
2026-04-15T14:40:58.732 [DEBUG] [Thread-20681] [transport.py] [_log()] kex follows: False
2026-04-15T14:40:58.732 [DEBUG] [Thread-20681] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:40:58.732 [DEBUG] [Thread-20681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:40:58.732 [DEBUG] [Thread-20681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:40:58.732 [DEBUG] [Thread-20681] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:40:58.732 [DEBUG] [Thread-20681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:40:58.733 [DEBUG] [Thread-20681] [transport.py] [_log()] Compression: none
2026-04-15T14:40:58.733 [DEBUG] [Thread-20681] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:40:58.790 [DEBUG] [Thread-20681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:40:58.790 [DEBUG] [Thread-20681] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:40:58.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:40:58.791 [DEBUG] [Thread-20681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:40:58.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:40:58.848 [DEBUG] [Thread-20681] [transport.py] [_log()] userauth is OK
2026-04-15T14:40:58.848 [DEBUG] [Thread-20681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:40:58.848 [DEBUG] [Thread-20681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:40:58.848 [DEBUG] [Thread-20681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:40:58.848 [DEBUG] [Thread-20681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:40:58.874 [INFO] [Thread-20681] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:40:58.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:40:58.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:40:59.654 [DEBUG] [Thread-20681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:40:59.654 [DEBUG] [Thread-20681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:40:59.703 [DEBUG] [Thread-20681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:40:59.703 [DEBUG] [Thread-20681] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:40:59.712 [DEBUG] [Thread-20681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:40:59.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:40:59.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')
2026-04-15T14:40:59.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') -> 00000000
2026-04-15T14:40:59.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:40:59.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:40:59.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:40:59.747 [DEBUG] [Thread-20681] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:41:05.181 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:41:05.182 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:41:12.214 [DEBUG] [Thread-20683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:41:27.259 [DEBUG] [Thread-20684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:41:28.364 [DEBUG] [Thread-20685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:41:29.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:41:29.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:41:29.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
2026-04-15T14:41:31.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 41), 8.77122, 55.4207, 0.0, 19.4983, 14.5269, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:41:31.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:41:00
2026-04-15T14:41:31.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:41:31.870 [DEBUG] [Thread-20686] [transport.py] [_log()] starting thread (client mode): 0xee9aee90
2026-04-15T14:41:31.870 [DEBUG] [Thread-20686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:41:31.889 [DEBUG] [Thread-20686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:41:31.889 [INFO] [Thread-20686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:41:31.892 [DEBUG] [Thread-20686] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:41:31.892 [DEBUG] [Thread-20686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:41:31.893 [DEBUG] [Thread-20686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:41:31.893 [DEBUG] [Thread-20686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:41:31.893 [DEBUG] [Thread-20686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:41:31.893 [DEBUG] [Thread-20686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:41:31.893 [DEBUG] [Thread-20686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:41:31.893 [DEBUG] [Thread-20686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:41:31.893 [DEBUG] [Thread-20686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:41:31.893 [DEBUG] [Thread-20686] [transport.py] [_log()] client lang: <none>
2026-04-15T14:41:31.893 [DEBUG] [Thread-20686] [transport.py] [_log()] server lang: <none>
2026-04-15T14:41:31.893 [DEBUG] [Thread-20686] [transport.py] [_log()] kex follows: False
2026-04-15T14:41:31.893 [DEBUG] [Thread-20686] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:41:31.893 [DEBUG] [Thread-20686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:41:31.894 [DEBUG] [Thread-20686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:41:31.894 [DEBUG] [Thread-20686] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:41:31.894 [DEBUG] [Thread-20686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:41:31.894 [DEBUG] [Thread-20686] [transport.py] [_log()] Compression: none
2026-04-15T14:41:31.894 [DEBUG] [Thread-20686] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:41:31.910 [DEBUG] [Thread-20686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:41:31.911 [DEBUG] [Thread-20686] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:41:31.911 [DEBUG] [Thread-20686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:41:31.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:41:31.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:41:31.955 [DEBUG] [Thread-20686] [transport.py] [_log()] userauth is OK
2026-04-15T14:41:31.955 [DEBUG] [Thread-20686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:41:31.955 [DEBUG] [Thread-20686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:41:31.955 [DEBUG] [Thread-20686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:41:31.955 [DEBUG] [Thread-20686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:41:31.990 [INFO] [Thread-20686] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:41:31.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:41:32.748 [DEBUG] [Thread-20686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:41:32.748 [DEBUG] [Thread-20686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:41:32.749 [DEBUG] [Thread-20686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:41:32.789 [DEBUG] [Thread-20686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:41:32.789 [DEBUG] [Thread-20686] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:41:32.792 [DEBUG] [Thread-20686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:41:32.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:41:32.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:41:32.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:41:32.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:41:32.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:41:32.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:41:32.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:41:32.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:41:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:41:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.528262 -999.00  +14.30  18.13     62   +7.10 1 2 1 1 1   888    0 7.49 20.86 ----- 21.0 18.1 313.2 24.3 21.1 -24.5 20.0 -24.1 20.7 -21.7 21.9 -23.2
2026-04-15T14:41:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:41:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:41:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.528262
2026-04-15T14:41:32.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:41:32.812 [DEBUG] [Thread-20686] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:41:32.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:41:32.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:41:32.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:41:32.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T14:41:32.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:41:00', tmtdew=8.77122, humidity=55.4207, cloud=0.0, wind=19.4983, temperature=14.5269, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:40:41.837', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:41:33.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:41:33.071 [DEBUG] [Thread-20689] [transport.py] [_log()] starting thread (client mode): 0xee9afa90
2026-04-15T14:41:33.071 [DEBUG] [Thread-20689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:41:33.093 [DEBUG] [Thread-20689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:41:33.093 [INFO] [Thread-20689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:41:33.101 [DEBUG] [Thread-20689] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:41:33.101 [DEBUG] [Thread-20689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:41:33.101 [DEBUG] [Thread-20689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:41:33.102 [DEBUG] [Thread-20689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:41:33.102 [DEBUG] [Thread-20689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:41:33.102 [DEBUG] [Thread-20689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:41:33.102 [DEBUG] [Thread-20689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:41:33.102 [DEBUG] [Thread-20689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:41:33.102 [DEBUG] [Thread-20689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:41:33.102 [DEBUG] [Thread-20689] [transport.py] [_log()] client lang: <none>
2026-04-15T14:41:33.102 [DEBUG] [Thread-20689] [transport.py] [_log()] server lang: <none>
2026-04-15T14:41:33.102 [DEBUG] [Thread-20689] [transport.py] [_log()] kex follows: False
2026-04-15T14:41:33.102 [DEBUG] [Thread-20689] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:41:33.102 [DEBUG] [Thread-20689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:41:33.103 [DEBUG] [Thread-20689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:41:33.103 [DEBUG] [Thread-20689] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:41:33.103 [DEBUG] [Thread-20689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:41:33.103 [DEBUG] [Thread-20689] [transport.py] [_log()] Compression: none
2026-04-15T14:41:33.103 [DEBUG] [Thread-20689] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:41:33.158 [DEBUG] [Thread-20689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:41:33.158 [DEBUG] [Thread-20689] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:41:33.159 [DEBUG] [Thread-20689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:41:33.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:41:33.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:41:33.215 [DEBUG] [Thread-20689] [transport.py] [_log()] userauth is OK
2026-04-15T14:41:33.215 [DEBUG] [Thread-20689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:41:33.216 [DEBUG] [Thread-20689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:41:33.216 [DEBUG] [Thread-20689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:41:33.216 [DEBUG] [Thread-20689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:41:33.242 [INFO] [Thread-20689] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:41:33.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:41:33.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:41:34.093 [DEBUG] [Thread-20689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:41:34.094 [DEBUG] [Thread-20689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:41:34.141 [DEBUG] [Thread-20689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:41:34.141 [DEBUG] [Thread-20689] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:41:34.150 [DEBUG] [Thread-20689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:41:34.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:41:34.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')
2026-04-15T14:41:34.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
2026-04-15T14:41:34.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:41:34.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:41:34.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:41:34.188 [DEBUG] [Thread-20689] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:41:42.291 [DEBUG] [Thread-20691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:41:57.334 [DEBUG] [Thread-20692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:42:04.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:42:04.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:42:04.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:42:05.323 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:42:05.324 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:42:05.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 41, 36), 8.94627, 55.0792, 0.0, 21.4891, 15.2201, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:42:05.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:41:36
2026-04-15T14:42:05.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:42:06.421 [DEBUG] [Thread-20693] [transport.py] [_log()] starting thread (client mode): 0xee903250
2026-04-15T14:42:06.421 [DEBUG] [Thread-20693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:42:06.441 [DEBUG] [Thread-20693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:42:06.441 [INFO] [Thread-20693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:42:06.444 [DEBUG] [Thread-20693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:42:06.444 [DEBUG] [Thread-20693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] client lang: <none>
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] server lang: <none>
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] kex follows: False
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:42:06.445 [DEBUG] [Thread-20693] [transport.py] [_log()] Compression: none
2026-04-15T14:42:06.446 [DEBUG] [Thread-20693] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:42:06.461 [DEBUG] [Thread-20693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:42:06.462 [DEBUG] [Thread-20693] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:42:06.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:42:06.462 [DEBUG] [Thread-20693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:42:06.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:42:06.463 [DEBUG] [Thread-20693] [transport.py] [_log()] userauth is OK
2026-04-15T14:42:06.463 [DEBUG] [Thread-20693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:42:06.463 [DEBUG] [Thread-20693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:42:06.464 [DEBUG] [Thread-20693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:42:06.464 [DEBUG] [Thread-20693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:42:06.480 [INFO] [Thread-20693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:42:06.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:42:07.203 [DEBUG] [Thread-20693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:42:07.204 [DEBUG] [Thread-20693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:42:07.204 [DEBUG] [Thread-20693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:42:07.244 [DEBUG] [Thread-20693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:42:07.244 [DEBUG] [Thread-20693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:42:07.248 [DEBUG] [Thread-20693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:42:07.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:42:07.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:42:07.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:42:07.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:42:07.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:42:07.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:42:07.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:42:07.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:42:07.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:42:07.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.528609 -999.00  +13.70  18.09     62   +6.70 1 1 1 1 1   888    0 7.61 22.61 ----- 22.1 18.1 320.6 28.3 21.1 -25.6 19.9 -25.3 20.7 -22.7 21.9 -24.4
2026-04-15T14:42:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:42:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:42:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.528609
2026-04-15T14:42:07.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:42:07.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:42:07.273 [DEBUG] [Thread-20693] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:42:07.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:42:07.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:42:07.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:42:07.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:41:36', tmtdew=8.94627, humidity=55.0792, cloud=0.0, wind=21.4891, temperature=15.2201, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:41:11.818', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:42:07.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:42:07.529 [DEBUG] [Thread-20696] [transport.py] [_log()] starting thread (client mode): 0xee901f00
2026-04-15T14:42:07.529 [DEBUG] [Thread-20696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:42:07.544 [DEBUG] [Thread-20696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:42:07.544 [INFO] [Thread-20696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:42:07.552 [DEBUG] [Thread-20696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:42:07.552 [DEBUG] [Thread-20696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:42:07.552 [DEBUG] [Thread-20696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:42:07.552 [DEBUG] [Thread-20696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:42:07.552 [DEBUG] [Thread-20696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:42:07.552 [DEBUG] [Thread-20696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:42:07.552 [DEBUG] [Thread-20696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:42:07.552 [DEBUG] [Thread-20696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:42:07.552 [DEBUG] [Thread-20696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:42:07.552 [DEBUG] [Thread-20696] [transport.py] [_log()] client lang: <none>
2026-04-15T14:42:07.552 [DEBUG] [Thread-20696] [transport.py] [_log()] server lang: <none>
2026-04-15T14:42:07.552 [DEBUG] [Thread-20696] [transport.py] [_log()] kex follows: False
2026-04-15T14:42:07.553 [DEBUG] [Thread-20696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:42:07.553 [DEBUG] [Thread-20696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:42:07.553 [DEBUG] [Thread-20696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:42:07.553 [DEBUG] [Thread-20696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:42:07.553 [DEBUG] [Thread-20696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:42:07.553 [DEBUG] [Thread-20696] [transport.py] [_log()] Compression: none
2026-04-15T14:42:07.553 [DEBUG] [Thread-20696] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:42:07.610 [DEBUG] [Thread-20696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:42:07.610 [DEBUG] [Thread-20696] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:42:07.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:42:07.611 [DEBUG] [Thread-20696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:42:07.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:42:07.667 [DEBUG] [Thread-20696] [transport.py] [_log()] userauth is OK
2026-04-15T14:42:07.667 [DEBUG] [Thread-20696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:42:07.667 [DEBUG] [Thread-20696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:42:07.668 [DEBUG] [Thread-20696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:42:07.668 [DEBUG] [Thread-20696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:42:07.695 [INFO] [Thread-20696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:42:07.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:42:07.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:42:08.524 [DEBUG] [Thread-20696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:42:08.525 [DEBUG] [Thread-20696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:42:08.572 [DEBUG] [Thread-20696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:42:08.572 [DEBUG] [Thread-20696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:42:08.581 [DEBUG] [Thread-20696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:42:08.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:42:08.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')
2026-04-15T14:42:08.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
2026-04-15T14:42:08.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:42:08.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:42:08.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:42:08.616 [DEBUG] [Thread-20696] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:42:12.368 [DEBUG] [Thread-20698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:42:27.412 [DEBUG] [Thread-20699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:42:28.446 [DEBUG] [Thread-20700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:42:38.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:42:38.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:42:38.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
2026-04-15T14:42:39.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 42, 11), 8.76297, 55.5259, 0.0, 19.1448, 14.5097, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:42:39.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:42:11
2026-04-15T14:42:40.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:42:40.761 [DEBUG] [Thread-20701] [transport.py] [_log()] starting thread (client mode): 0xee902b30
2026-04-15T14:42:40.761 [DEBUG] [Thread-20701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:42:40.777 [DEBUG] [Thread-20701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:42:40.778 [INFO] [Thread-20701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:42:40.781 [DEBUG] [Thread-20701] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:42:40.781 [DEBUG] [Thread-20701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:42:40.781 [DEBUG] [Thread-20701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:42:40.781 [DEBUG] [Thread-20701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:42:40.781 [DEBUG] [Thread-20701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:42:40.781 [DEBUG] [Thread-20701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:42:40.781 [DEBUG] [Thread-20701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:42:40.781 [DEBUG] [Thread-20701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:42:40.781 [DEBUG] [Thread-20701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:42:40.782 [DEBUG] [Thread-20701] [transport.py] [_log()] client lang: <none>
2026-04-15T14:42:40.782 [DEBUG] [Thread-20701] [transport.py] [_log()] server lang: <none>
2026-04-15T14:42:40.782 [DEBUG] [Thread-20701] [transport.py] [_log()] kex follows: False
2026-04-15T14:42:40.782 [DEBUG] [Thread-20701] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:42:40.782 [DEBUG] [Thread-20701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:42:40.782 [DEBUG] [Thread-20701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:42:40.782 [DEBUG] [Thread-20701] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:42:40.782 [DEBUG] [Thread-20701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:42:40.782 [DEBUG] [Thread-20701] [transport.py] [_log()] Compression: none
2026-04-15T14:42:40.782 [DEBUG] [Thread-20701] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:42:40.800 [DEBUG] [Thread-20701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:42:40.800 [DEBUG] [Thread-20701] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:42:40.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:42:40.801 [DEBUG] [Thread-20701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:42:40.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:42:40.802 [DEBUG] [Thread-20701] [transport.py] [_log()] userauth is OK
2026-04-15T14:42:40.802 [DEBUG] [Thread-20701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:42:40.802 [DEBUG] [Thread-20701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:42:40.802 [DEBUG] [Thread-20701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:42:40.802 [DEBUG] [Thread-20701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:42:40.822 [INFO] [Thread-20701] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:42:40.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:42:41.420 [DEBUG] [Thread-20701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:42:41.420 [DEBUG] [Thread-20701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:42:41.421 [DEBUG] [Thread-20701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:42:41.461 [DEBUG] [Thread-20701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:42:41.461 [DEBUG] [Thread-20701] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:42:41.463 [DEBUG] [Thread-20701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:42:41.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:42:41.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:42:41.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:42:41.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:42:41.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:42:41.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:42:41.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:42:41.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:42:41.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:42:41.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.529303 -999.00  +13.90  12.82     64   +7.30 1 1 1 1 1   888    0 7.58 21.94 ----- 8.7 12.8 314.8 16.2 21.0 -25.9 19.9 -25.3 20.6 -22.6 21.9 -24.0
2026-04-15T14:42:41.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:42:41.484 [DEBUG] [Thread-20701] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:42:41.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:42:41.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.529303
2026-04-15T14:42:41.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:42:41.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:42:41.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:42:41.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:42:41.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:42:41.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:42:11', tmtdew=8.76297, humidity=55.5259, cloud=0.0, wind=19.1448, temperature=14.5097, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:42:11.779', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:42:41.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:42:41.745 [DEBUG] [Thread-20704] [transport.py] [_log()] starting thread (client mode): 0xee98d120
2026-04-15T14:42:41.745 [DEBUG] [Thread-20704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:42:41.759 [DEBUG] [Thread-20704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:42:41.759 [INFO] [Thread-20704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:42:41.766 [DEBUG] [Thread-20704] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:42:41.767 [DEBUG] [Thread-20704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:42:41.767 [DEBUG] [Thread-20704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:42:41.767 [DEBUG] [Thread-20704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:42:41.767 [DEBUG] [Thread-20704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:42:41.767 [DEBUG] [Thread-20704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:42:41.767 [DEBUG] [Thread-20704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:42:41.767 [DEBUG] [Thread-20704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:42:41.767 [DEBUG] [Thread-20704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:42:41.767 [DEBUG] [Thread-20704] [transport.py] [_log()] client lang: <none>
2026-04-15T14:42:41.767 [DEBUG] [Thread-20704] [transport.py] [_log()] server lang: <none>
2026-04-15T14:42:41.767 [DEBUG] [Thread-20704] [transport.py] [_log()] kex follows: False
2026-04-15T14:42:41.767 [DEBUG] [Thread-20704] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:42:41.768 [DEBUG] [Thread-20704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:42:41.768 [DEBUG] [Thread-20704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:42:41.768 [DEBUG] [Thread-20704] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:42:41.768 [DEBUG] [Thread-20704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:42:41.768 [DEBUG] [Thread-20704] [transport.py] [_log()] Compression: none
2026-04-15T14:42:41.768 [DEBUG] [Thread-20704] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:42:41.822 [DEBUG] [Thread-20704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:42:41.822 [DEBUG] [Thread-20704] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:42:41.823 [DEBUG] [Thread-20704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:42:41.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:42:41.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:42:41.879 [DEBUG] [Thread-20704] [transport.py] [_log()] userauth is OK
2026-04-15T14:42:41.879 [DEBUG] [Thread-20704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:42:41.879 [DEBUG] [Thread-20704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:42:41.880 [DEBUG] [Thread-20704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:42:41.880 [DEBUG] [Thread-20704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:42:41.903 [INFO] [Thread-20704] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:42:41.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:42:41.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:42:42.443 [DEBUG] [Thread-20706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:42:42.730 [DEBUG] [Thread-20704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:42:42.730 [DEBUG] [Thread-20704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:42:42.778 [DEBUG] [Thread-20704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:42:42.778 [DEBUG] [Thread-20704] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:42:42.787 [DEBUG] [Thread-20704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:42:42.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:42:42.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')
2026-04-15T14:42:42.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
2026-04-15T14:42:42.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:42:42.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:42:42.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:42:42.821 [DEBUG] [Thread-20704] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:42:57.488 [DEBUG] [Thread-20707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:43:05.465 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:43:05.466 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:43:12.518 [DEBUG] [Thread-20708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:43:12.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:43:12.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:43:12.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
2026-04-15T14:43:14.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 42, 47), 9.4054, 53.2895, 0.0, 14.1509, 14.9549, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:43:14.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:42:47
2026-04-15T14:43:14.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:43:14.944 [DEBUG] [Thread-20709] [transport.py] [_log()] starting thread (client mode): 0xee9ad1b0
2026-04-15T14:43:14.944 [DEBUG] [Thread-20709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:43:14.964 [DEBUG] [Thread-20709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:43:14.964 [INFO] [Thread-20709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:43:14.967 [DEBUG] [Thread-20709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:43:14.967 [DEBUG] [Thread-20709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:43:14.967 [DEBUG] [Thread-20709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:43:14.967 [DEBUG] [Thread-20709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:43:14.968 [DEBUG] [Thread-20709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:43:14.968 [DEBUG] [Thread-20709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:43:14.968 [DEBUG] [Thread-20709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:43:14.968 [DEBUG] [Thread-20709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:43:14.968 [DEBUG] [Thread-20709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:43:14.968 [DEBUG] [Thread-20709] [transport.py] [_log()] client lang: <none>
2026-04-15T14:43:14.968 [DEBUG] [Thread-20709] [transport.py] [_log()] server lang: <none>
2026-04-15T14:43:14.968 [DEBUG] [Thread-20709] [transport.py] [_log()] kex follows: False
2026-04-15T14:43:14.968 [DEBUG] [Thread-20709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:43:14.968 [DEBUG] [Thread-20709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:43:14.968 [DEBUG] [Thread-20709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:43:14.969 [DEBUG] [Thread-20709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:43:14.969 [DEBUG] [Thread-20709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:43:14.969 [DEBUG] [Thread-20709] [transport.py] [_log()] Compression: none
2026-04-15T14:43:14.969 [DEBUG] [Thread-20709] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:43:14.977 [DEBUG] [Thread-20709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:43:14.977 [DEBUG] [Thread-20709] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:43:14.978 [DEBUG] [Thread-20709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:43:14.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:43:14.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:43:14.979 [DEBUG] [Thread-20709] [transport.py] [_log()] userauth is OK
2026-04-15T14:43:14.979 [DEBUG] [Thread-20709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:43:14.979 [DEBUG] [Thread-20709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:43:14.979 [DEBUG] [Thread-20709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:43:14.979 [DEBUG] [Thread-20709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:43:14.997 [INFO] [Thread-20709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:43:14.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:43:15.602 [DEBUG] [Thread-20709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:43:15.602 [DEBUG] [Thread-20709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:43:15.603 [DEBUG] [Thread-20709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:43:15.643 [DEBUG] [Thread-20709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:43:15.643 [DEBUG] [Thread-20709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:43:15.646 [DEBUG] [Thread-20709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:43:15.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:43:15.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:43:15.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:43:15.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:43:15.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:43:15.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:43:15.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:43:15.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:43:15.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:43:15.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.529998 -999.00  +14.00  11.91     62   +6.90 1 1 1 1 1   888    0 7.64 23.32 ----- 14.7 11.9 21.4 16.3 20.9 -27.2 19.9 -25.8 20.7 -22.1 21.5 -27.8
2026-04-15T14:43:15.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:43:15.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:43:15.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.529998
2026-04-15T14:43:15.671 [DEBUG] [Thread-20709] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:43:15.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:43:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:43:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:43:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:43:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:43:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:42:47', tmtdew=9.4054, humidity=53.2895, cloud=0.0, wind=14.1509, temperature=14.9549, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:43:11.827', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:43:15.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:43:15.934 [DEBUG] [Thread-20712] [transport.py] [_log()] starting thread (client mode): 0xee9af430
2026-04-15T14:43:15.934 [DEBUG] [Thread-20712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:43:15.948 [DEBUG] [Thread-20712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:43:15.948 [INFO] [Thread-20712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:43:15.955 [DEBUG] [Thread-20712] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:43:15.955 [DEBUG] [Thread-20712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:43:15.956 [DEBUG] [Thread-20712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:43:15.956 [DEBUG] [Thread-20712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:43:15.956 [DEBUG] [Thread-20712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:43:15.956 [DEBUG] [Thread-20712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:43:15.956 [DEBUG] [Thread-20712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:43:15.956 [DEBUG] [Thread-20712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:43:15.956 [DEBUG] [Thread-20712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:43:15.956 [DEBUG] [Thread-20712] [transport.py] [_log()] client lang: <none>
2026-04-15T14:43:15.956 [DEBUG] [Thread-20712] [transport.py] [_log()] server lang: <none>
2026-04-15T14:43:15.956 [DEBUG] [Thread-20712] [transport.py] [_log()] kex follows: False
2026-04-15T14:43:15.956 [DEBUG] [Thread-20712] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:43:15.956 [DEBUG] [Thread-20712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:43:15.957 [DEBUG] [Thread-20712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:43:15.957 [DEBUG] [Thread-20712] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:43:15.957 [DEBUG] [Thread-20712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:43:15.957 [DEBUG] [Thread-20712] [transport.py] [_log()] Compression: none
2026-04-15T14:43:15.957 [DEBUG] [Thread-20712] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:43:16.014 [DEBUG] [Thread-20712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:43:16.014 [DEBUG] [Thread-20712] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:43:16.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:43:16.015 [DEBUG] [Thread-20712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:43:16.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:43:16.071 [DEBUG] [Thread-20712] [transport.py] [_log()] userauth is OK
2026-04-15T14:43:16.071 [DEBUG] [Thread-20712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:43:16.071 [DEBUG] [Thread-20712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:43:16.071 [DEBUG] [Thread-20712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:43:16.072 [DEBUG] [Thread-20712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:43:16.096 [INFO] [Thread-20712] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:43:16.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:43:16.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:43:16.921 [DEBUG] [Thread-20712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:43:16.921 [DEBUG] [Thread-20712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:43:16.969 [DEBUG] [Thread-20712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:43:16.969 [DEBUG] [Thread-20712] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:43:16.978 [DEBUG] [Thread-20712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:43:16.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:43:16.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')
2026-04-15T14:43:16.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
2026-04-15T14:43:17.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:43:17.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:43:17.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:43:17.012 [DEBUG] [Thread-20712] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:43:27.550 [DEBUG] [Thread-20714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:43:28.550 [DEBUG] [Thread-20715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:43:42.594 [DEBUG] [Thread-20716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:43:47.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:43:47.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:43:47.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:43:48.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 43, 23), 8.82102, 55.4266, 0.0, 13.3582, 14.0948, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:43:48.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:43:23
2026-04-15T14:43:48.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:43:48.976 [DEBUG] [Thread-20717] [transport.py] [_log()] starting thread (client mode): 0xf13e3790
2026-04-15T14:43:48.976 [DEBUG] [Thread-20717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:43:48.996 [DEBUG] [Thread-20717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:43:48.996 [INFO] [Thread-20717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:43:48.997 [DEBUG] [Thread-20717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:43:48.997 [DEBUG] [Thread-20717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] client lang: <none>
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] server lang: <none>
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] kex follows: False
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] Compression: none
2026-04-15T14:43:48.998 [DEBUG] [Thread-20717] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:43:49.015 [DEBUG] [Thread-20717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:43:49.015 [DEBUG] [Thread-20717] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:43:49.016 [DEBUG] [Thread-20717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:43:49.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:43:49.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:43:49.017 [DEBUG] [Thread-20717] [transport.py] [_log()] userauth is OK
2026-04-15T14:43:49.017 [DEBUG] [Thread-20717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:43:49.017 [DEBUG] [Thread-20717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:43:49.017 [DEBUG] [Thread-20717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:43:49.017 [DEBUG] [Thread-20717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:43:49.030 [INFO] [Thread-20717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:43:49.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:43:49.630 [DEBUG] [Thread-20717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:43:49.630 [DEBUG] [Thread-20717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:43:49.631 [DEBUG] [Thread-20717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:43:49.671 [DEBUG] [Thread-20717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:43:49.671 [DEBUG] [Thread-20717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:43:49.674 [DEBUG] [Thread-20717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:43:49.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:43:49.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:43:49.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:43:49.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:43:49.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:43:49.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:43:49.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:43:49.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:43:49.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:43:49.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.530345 -999.00  +14.10  11.42     63   +7.30 1 1 1 1 1   888    0 7.65 22.48 ----- 12.1 11.4 314.8 20.1 21.1 -26.5 20.0 -25.4 20.7 -22.8 21.8 -24.4
2026-04-15T14:43:49.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:43:49.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:43:49.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.530345
2026-04-15T14:43:49.700 [DEBUG] [Thread-20717] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:43:49.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:43:49.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:43:49.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:43:49.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:43:49.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:43:49.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:43:23', tmtdew=8.82102, humidity=55.4266, cloud=0.0, wind=13.3582, temperature=14.0948, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:43:41.808', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:43:49.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:43:49.967 [DEBUG] [Thread-20720] [transport.py] [_log()] starting thread (client mode): 0xf13e3880
2026-04-15T14:43:49.968 [DEBUG] [Thread-20720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:43:49.982 [DEBUG] [Thread-20720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:43:49.982 [INFO] [Thread-20720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:43:49.990 [DEBUG] [Thread-20720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:43:49.990 [DEBUG] [Thread-20720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:43:49.990 [DEBUG] [Thread-20720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:43:49.990 [DEBUG] [Thread-20720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:43:49.990 [DEBUG] [Thread-20720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:43:49.991 [DEBUG] [Thread-20720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:43:49.991 [DEBUG] [Thread-20720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:43:49.991 [DEBUG] [Thread-20720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:43:49.991 [DEBUG] [Thread-20720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:43:49.991 [DEBUG] [Thread-20720] [transport.py] [_log()] client lang: <none>
2026-04-15T14:43:49.991 [DEBUG] [Thread-20720] [transport.py] [_log()] server lang: <none>
2026-04-15T14:43:49.991 [DEBUG] [Thread-20720] [transport.py] [_log()] kex follows: False
2026-04-15T14:43:49.991 [DEBUG] [Thread-20720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:43:49.991 [DEBUG] [Thread-20720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:43:49.991 [DEBUG] [Thread-20720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:43:49.991 [DEBUG] [Thread-20720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:43:49.991 [DEBUG] [Thread-20720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:43:49.992 [DEBUG] [Thread-20720] [transport.py] [_log()] Compression: none
2026-04-15T14:43:49.992 [DEBUG] [Thread-20720] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:43:50.046 [DEBUG] [Thread-20720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:43:50.047 [DEBUG] [Thread-20720] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:43:50.047 [DEBUG] [Thread-20720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:43:50.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:43:50.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:43:50.103 [DEBUG] [Thread-20720] [transport.py] [_log()] userauth is OK
2026-04-15T14:43:50.103 [DEBUG] [Thread-20720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:43:50.103 [DEBUG] [Thread-20720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:43:50.104 [DEBUG] [Thread-20720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:43:50.104 [DEBUG] [Thread-20720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:43:50.128 [INFO] [Thread-20720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:43:50.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:43:50.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:43:50.967 [DEBUG] [Thread-20720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:43:50.967 [DEBUG] [Thread-20720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:43:51.015 [DEBUG] [Thread-20720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:43:51.015 [DEBUG] [Thread-20720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:43:51.025 [DEBUG] [Thread-20720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:43:51.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:43:51.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')
2026-04-15T14:43:51.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
2026-04-15T14:43:51.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:43:51.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:43:51.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:43:51.059 [DEBUG] [Thread-20720] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:43:57.626 [DEBUG] [Thread-20722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:44:05.607 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:44:05.608 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:44:12.664 [DEBUG] [Thread-20723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:44:21.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:44:21.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:44:21.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
2026-04-15T14:44:22.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 43, 58), 8.7431, 55.5095, 0.0, 13.3582, 14.312, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:44:22.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:43:58
2026-04-15T14:44:22.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:44:23.202 [DEBUG] [Thread-20724] [transport.py] [_log()] starting thread (client mode): 0xee901d50
2026-04-15T14:44:23.202 [DEBUG] [Thread-20724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:44:23.217 [DEBUG] [Thread-20724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:44:23.218 [INFO] [Thread-20724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:44:23.218 [DEBUG] [Thread-20724] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:44:23.219 [DEBUG] [Thread-20724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:44:23.219 [DEBUG] [Thread-20724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:44:23.219 [DEBUG] [Thread-20724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:44:23.219 [DEBUG] [Thread-20724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:44:23.219 [DEBUG] [Thread-20724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:44:23.219 [DEBUG] [Thread-20724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:44:23.219 [DEBUG] [Thread-20724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:44:23.219 [DEBUG] [Thread-20724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:44:23.219 [DEBUG] [Thread-20724] [transport.py] [_log()] client lang: <none>
2026-04-15T14:44:23.219 [DEBUG] [Thread-20724] [transport.py] [_log()] server lang: <none>
2026-04-15T14:44:23.219 [DEBUG] [Thread-20724] [transport.py] [_log()] kex follows: False
2026-04-15T14:44:23.220 [DEBUG] [Thread-20724] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:44:23.220 [DEBUG] [Thread-20724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:44:23.220 [DEBUG] [Thread-20724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:44:23.220 [DEBUG] [Thread-20724] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:44:23.220 [DEBUG] [Thread-20724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:44:23.220 [DEBUG] [Thread-20724] [transport.py] [_log()] Compression: none
2026-04-15T14:44:23.220 [DEBUG] [Thread-20724] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:44:23.230 [DEBUG] [Thread-20724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:44:23.231 [DEBUG] [Thread-20724] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:44:23.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:44:23.232 [DEBUG] [Thread-20724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:44:23.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:44:23.232 [DEBUG] [Thread-20724] [transport.py] [_log()] userauth is OK
2026-04-15T14:44:23.232 [DEBUG] [Thread-20724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:44:23.232 [DEBUG] [Thread-20724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:44:23.233 [DEBUG] [Thread-20724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:44:23.233 [DEBUG] [Thread-20724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:44:23.247 [INFO] [Thread-20724] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:44:23.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:44:23.788 [DEBUG] [Thread-20724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:44:23.788 [DEBUG] [Thread-20724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:44:23.789 [DEBUG] [Thread-20724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:44:23.829 [DEBUG] [Thread-20724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:44:23.829 [DEBUG] [Thread-20724] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:44:23.832 [DEBUG] [Thread-20724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:44:23.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:44:23.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:44:23.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:44:23.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:44:23.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:44:23.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:44:23.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:44:23.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:44:23.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:44:23.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.530692 -999.00  +14.40  12.92     61   +7.20 1 1 1 1 1   888    0 7.63 23.03 ----- 10.5 12.9 304.4 17.8 21.1 -26.3 20.1 -25.0 20.8 -23.1 21.9 -24.4
2026-04-15T14:44:23.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:44:23.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:44:23.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.530692
2026-04-15T14:44:23.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:44:23.855 [DEBUG] [Thread-20724] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:44:23.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:44:23.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:44:23.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:44:23.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:44:23.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:43:58', tmtdew=8.7431, humidity=55.5095, cloud=0.0, wind=13.3582, temperature=14.312, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:44:11.789', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:44:24.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:44:24.113 [DEBUG] [Thread-20727] [transport.py] [_log()] starting thread (client mode): 0xee9adc00
2026-04-15T14:44:24.113 [DEBUG] [Thread-20727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:44:24.127 [DEBUG] [Thread-20727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:44:24.127 [INFO] [Thread-20727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:44:24.135 [DEBUG] [Thread-20727] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:44:24.135 [DEBUG] [Thread-20727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:44:24.135 [DEBUG] [Thread-20727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:44:24.135 [DEBUG] [Thread-20727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:44:24.135 [DEBUG] [Thread-20727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:44:24.135 [DEBUG] [Thread-20727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:44:24.135 [DEBUG] [Thread-20727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:44:24.135 [DEBUG] [Thread-20727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:44:24.135 [DEBUG] [Thread-20727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:44:24.135 [DEBUG] [Thread-20727] [transport.py] [_log()] client lang: <none>
2026-04-15T14:44:24.136 [DEBUG] [Thread-20727] [transport.py] [_log()] server lang: <none>
2026-04-15T14:44:24.136 [DEBUG] [Thread-20727] [transport.py] [_log()] kex follows: False
2026-04-15T14:44:24.136 [DEBUG] [Thread-20727] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:44:24.136 [DEBUG] [Thread-20727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:44:24.136 [DEBUG] [Thread-20727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:44:24.136 [DEBUG] [Thread-20727] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:44:24.136 [DEBUG] [Thread-20727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:44:24.136 [DEBUG] [Thread-20727] [transport.py] [_log()] Compression: none
2026-04-15T14:44:24.136 [DEBUG] [Thread-20727] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:44:24.190 [DEBUG] [Thread-20727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:44:24.190 [DEBUG] [Thread-20727] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:44:24.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:44:24.191 [DEBUG] [Thread-20727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:44:24.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:44:24.247 [DEBUG] [Thread-20727] [transport.py] [_log()] userauth is OK
2026-04-15T14:44:24.247 [DEBUG] [Thread-20727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:44:24.247 [DEBUG] [Thread-20727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:44:24.247 [DEBUG] [Thread-20727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:44:24.248 [DEBUG] [Thread-20727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:44:24.275 [INFO] [Thread-20727] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:44:24.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:44:24.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:44:25.095 [DEBUG] [Thread-20727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:44:25.095 [DEBUG] [Thread-20727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:44:25.143 [DEBUG] [Thread-20727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:44:25.143 [DEBUG] [Thread-20727] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:44:25.152 [DEBUG] [Thread-20727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:44:25.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:44:25.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')
2026-04-15T14:44:25.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
2026-04-15T14:44:25.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:44:25.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:44:25.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:44:25.186 [DEBUG] [Thread-20727] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:44:27.696 [DEBUG] [Thread-20729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:44:28.642 [DEBUG] [Thread-20730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:44:42.740 [DEBUG] [Thread-20731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:44:55.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:44:55.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:44:55.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
2026-04-15T14:44:56.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 44, 33), 9.06719, 54.4496, 0.0, 19.6898, 14.5575, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:44:56.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:44:33
2026-04-15T14:44:56.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:44:57.341 [DEBUG] [Thread-20732] [transport.py] [_log()] starting thread (client mode): 0xee9ac670
2026-04-15T14:44:57.341 [DEBUG] [Thread-20732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:44:57.361 [DEBUG] [Thread-20732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:44:57.362 [INFO] [Thread-20732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:44:57.365 [DEBUG] [Thread-20732] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:44:57.365 [DEBUG] [Thread-20732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:44:57.365 [DEBUG] [Thread-20732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:44:57.365 [DEBUG] [Thread-20732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:44:57.365 [DEBUG] [Thread-20732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:44:57.365 [DEBUG] [Thread-20732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:44:57.365 [DEBUG] [Thread-20732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:44:57.365 [DEBUG] [Thread-20732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:44:57.366 [DEBUG] [Thread-20732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:44:57.366 [DEBUG] [Thread-20732] [transport.py] [_log()] client lang: <none>
2026-04-15T14:44:57.366 [DEBUG] [Thread-20732] [transport.py] [_log()] server lang: <none>
2026-04-15T14:44:57.366 [DEBUG] [Thread-20732] [transport.py] [_log()] kex follows: False
2026-04-15T14:44:57.366 [DEBUG] [Thread-20732] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:44:57.366 [DEBUG] [Thread-20732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:44:57.366 [DEBUG] [Thread-20732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:44:57.366 [DEBUG] [Thread-20732] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:44:57.366 [DEBUG] [Thread-20732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:44:57.366 [DEBUG] [Thread-20732] [transport.py] [_log()] Compression: none
2026-04-15T14:44:57.366 [DEBUG] [Thread-20732] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:44:57.383 [DEBUG] [Thread-20732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:44:57.383 [DEBUG] [Thread-20732] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:44:57.384 [DEBUG] [Thread-20732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:44:57.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:44:57.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:44:57.385 [DEBUG] [Thread-20732] [transport.py] [_log()] userauth is OK
2026-04-15T14:44:57.385 [DEBUG] [Thread-20732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:44:57.385 [DEBUG] [Thread-20732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:44:57.385 [DEBUG] [Thread-20732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:44:57.386 [DEBUG] [Thread-20732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:44:57.409 [INFO] [Thread-20732] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:44:57.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:44:57.771 [DEBUG] [Thread-20734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:44:58.011 [DEBUG] [Thread-20732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:44:58.011 [DEBUG] [Thread-20732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:44:58.012 [DEBUG] [Thread-20732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:44:58.052 [DEBUG] [Thread-20732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:44:58.052 [DEBUG] [Thread-20732] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:44:58.054 [DEBUG] [Thread-20732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:44:58.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:44:58.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:44:58.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:44:58.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:44:58.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:44:58.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:44:58.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:44:58.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:44:58.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:44:58.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.531039 -999.00  +14.80  12.46     60   +7.20 1 1 1 1 1   888    0 7.76 26.64 ----- 14.6 12.5 305.8 19.3 21.2 -26.1 20.2 -25.1 20.8 -22.8 22.1 -24.8
2026-04-15T14:44:58.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:44:58.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:44:58.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.531039
2026-04-15T14:44:58.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:44:58.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:44:58.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:44:58.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:44:58.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:44:58.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:44:33', tmtdew=9.06719, humidity=54.4496, cloud=0.0, wind=19.6898, temperature=14.5575, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:44:41.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:44:58.073 [DEBUG] [Thread-20732] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:44:58.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:44:58.301 [DEBUG] [Thread-20736] [transport.py] [_log()] starting thread (client mode): 0xee901c00
2026-04-15T14:44:58.301 [DEBUG] [Thread-20736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:44:58.316 [DEBUG] [Thread-20736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:44:58.316 [INFO] [Thread-20736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:44:58.323 [DEBUG] [Thread-20736] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:44:58.323 [DEBUG] [Thread-20736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:44:58.323 [DEBUG] [Thread-20736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:44:58.323 [DEBUG] [Thread-20736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:44:58.324 [DEBUG] [Thread-20736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:44:58.324 [DEBUG] [Thread-20736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:44:58.324 [DEBUG] [Thread-20736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:44:58.324 [DEBUG] [Thread-20736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:44:58.324 [DEBUG] [Thread-20736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:44:58.324 [DEBUG] [Thread-20736] [transport.py] [_log()] client lang: <none>
2026-04-15T14:44:58.324 [DEBUG] [Thread-20736] [transport.py] [_log()] server lang: <none>
2026-04-15T14:44:58.324 [DEBUG] [Thread-20736] [transport.py] [_log()] kex follows: False
2026-04-15T14:44:58.324 [DEBUG] [Thread-20736] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:44:58.324 [DEBUG] [Thread-20736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:44:58.324 [DEBUG] [Thread-20736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:44:58.325 [DEBUG] [Thread-20736] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:44:58.325 [DEBUG] [Thread-20736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:44:58.325 [DEBUG] [Thread-20736] [transport.py] [_log()] Compression: none
2026-04-15T14:44:58.325 [DEBUG] [Thread-20736] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:44:58.382 [DEBUG] [Thread-20736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:44:58.382 [DEBUG] [Thread-20736] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:44:58.383 [DEBUG] [Thread-20736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:44:58.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:44:58.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:44:58.439 [DEBUG] [Thread-20736] [transport.py] [_log()] userauth is OK
2026-04-15T14:44:58.439 [DEBUG] [Thread-20736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:44:58.439 [DEBUG] [Thread-20736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:44:58.439 [DEBUG] [Thread-20736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:44:58.439 [DEBUG] [Thread-20736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:44:58.463 [INFO] [Thread-20736] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:44:58.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:44:58.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:44:59.302 [DEBUG] [Thread-20736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:44:59.302 [DEBUG] [Thread-20736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:44:59.350 [DEBUG] [Thread-20736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:44:59.350 [DEBUG] [Thread-20736] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:44:59.359 [DEBUG] [Thread-20736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:44:59.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:44:59.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')
2026-04-15T14:44:59.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
2026-04-15T14:44:59.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:44:59.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:44:59.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:44:59.400 [DEBUG] [Thread-20736] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:45:05.748 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:45:05.749 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:45:12.802 [DEBUG] [Thread-20738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:45:27.845 [DEBUG] [Thread-20739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:45:28.737 [DEBUG] [Thread-20740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:45:29.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:45:29.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:45:29.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
2026-04-15T14:45:30.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 45, 9), 9.23992, 53.6616, 0.0, 21.8261, 14.2118, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:45:30.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:45:09
2026-04-15T14:45:31.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:45:31.638 [DEBUG] [Thread-20741] [transport.py] [_log()] starting thread (client mode): 0xf1336e00
2026-04-15T14:45:31.638 [DEBUG] [Thread-20741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:45:31.650 [DEBUG] [Thread-20741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:45:31.650 [INFO] [Thread-20741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:45:31.651 [DEBUG] [Thread-20741] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:45:31.651 [DEBUG] [Thread-20741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:45:31.652 [DEBUG] [Thread-20741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:45:31.652 [DEBUG] [Thread-20741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:45:31.652 [DEBUG] [Thread-20741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:45:31.652 [DEBUG] [Thread-20741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:45:31.652 [DEBUG] [Thread-20741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:45:31.652 [DEBUG] [Thread-20741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:45:31.652 [DEBUG] [Thread-20741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:45:31.652 [DEBUG] [Thread-20741] [transport.py] [_log()] client lang: <none>
2026-04-15T14:45:31.652 [DEBUG] [Thread-20741] [transport.py] [_log()] server lang: <none>
2026-04-15T14:45:31.652 [DEBUG] [Thread-20741] [transport.py] [_log()] kex follows: False
2026-04-15T14:45:31.652 [DEBUG] [Thread-20741] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:45:31.652 [DEBUG] [Thread-20741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:45:31.653 [DEBUG] [Thread-20741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:45:31.653 [DEBUG] [Thread-20741] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:45:31.653 [DEBUG] [Thread-20741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:45:31.653 [DEBUG] [Thread-20741] [transport.py] [_log()] Compression: none
2026-04-15T14:45:31.653 [DEBUG] [Thread-20741] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:45:31.664 [DEBUG] [Thread-20741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:45:31.664 [DEBUG] [Thread-20741] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:45:31.665 [DEBUG] [Thread-20741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:45:31.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:45:31.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:45:31.666 [DEBUG] [Thread-20741] [transport.py] [_log()] userauth is OK
2026-04-15T14:45:31.666 [DEBUG] [Thread-20741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:45:31.666 [DEBUG] [Thread-20741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:45:31.666 [DEBUG] [Thread-20741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:45:31.666 [DEBUG] [Thread-20741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:45:31.683 [INFO] [Thread-20741] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:45:31.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:45:32.226 [DEBUG] [Thread-20741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:45:32.226 [DEBUG] [Thread-20741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:45:32.227 [DEBUG] [Thread-20741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:45:32.267 [DEBUG] [Thread-20741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:45:32.267 [DEBUG] [Thread-20741] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:45:32.270 [DEBUG] [Thread-20741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:45:32.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:45:32.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:45:32.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:45:32.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:45:32.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:45:32.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:45:32.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:45:32.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:45:32.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:45:32.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.531387 -999.00  +15.00  15.26     57   +6.80 1 1 1 1 1   888    0 8.07 33.29 ----- 16.9 15.3 22.6 23.3 21.4 -27.1 20.2 -27.1 21.0 -22.8 22.2 -24.8
2026-04-15T14:45:32.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:45:32.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:45:32.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.531387
2026-04-15T14:45:32.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:45:32.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:45:32.295 [DEBUG] [Thread-20741] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:45:32.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:45:32.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:45:32.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:45:32.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:45:09', tmtdew=9.23992, humidity=53.6616, cloud=0.0, wind=21.8261, temperature=14.2118, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:45:11.837', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:45:32.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:45:32.551 [DEBUG] [Thread-20744] [transport.py] [_log()] starting thread (client mode): 0xf13eebf0
2026-04-15T14:45:32.551 [DEBUG] [Thread-20744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:45:32.570 [DEBUG] [Thread-20744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:45:32.570 [INFO] [Thread-20744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:45:32.578 [DEBUG] [Thread-20744] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:45:32.578 [DEBUG] [Thread-20744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:45:32.578 [DEBUG] [Thread-20744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:45:32.578 [DEBUG] [Thread-20744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:45:32.578 [DEBUG] [Thread-20744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:45:32.578 [DEBUG] [Thread-20744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:45:32.578 [DEBUG] [Thread-20744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:45:32.578 [DEBUG] [Thread-20744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:45:32.578 [DEBUG] [Thread-20744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:45:32.578 [DEBUG] [Thread-20744] [transport.py] [_log()] client lang: <none>
2026-04-15T14:45:32.579 [DEBUG] [Thread-20744] [transport.py] [_log()] server lang: <none>
2026-04-15T14:45:32.579 [DEBUG] [Thread-20744] [transport.py] [_log()] kex follows: False
2026-04-15T14:45:32.579 [DEBUG] [Thread-20744] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:45:32.579 [DEBUG] [Thread-20744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:45:32.579 [DEBUG] [Thread-20744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:45:32.579 [DEBUG] [Thread-20744] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:45:32.579 [DEBUG] [Thread-20744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:45:32.579 [DEBUG] [Thread-20744] [transport.py] [_log()] Compression: none
2026-04-15T14:45:32.579 [DEBUG] [Thread-20744] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:45:32.634 [DEBUG] [Thread-20744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:45:32.634 [DEBUG] [Thread-20744] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:45:32.635 [DEBUG] [Thread-20744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:45:32.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:45:32.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:45:32.691 [DEBUG] [Thread-20744] [transport.py] [_log()] userauth is OK
2026-04-15T14:45:32.691 [DEBUG] [Thread-20744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:45:32.691 [DEBUG] [Thread-20744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:45:32.692 [DEBUG] [Thread-20744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:45:32.692 [DEBUG] [Thread-20744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:45:32.716 [INFO] [Thread-20744] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:45:32.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:45:32.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:45:33.549 [DEBUG] [Thread-20744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:45:33.550 [DEBUG] [Thread-20744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:45:33.597 [DEBUG] [Thread-20744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:45:33.597 [DEBUG] [Thread-20744] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:45:33.606 [DEBUG] [Thread-20744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:45:33.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:45:33.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')
2026-04-15T14:45:33.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
2026-04-15T14:45:33.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:45:33.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:45:33.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:45:33.642 [DEBUG] [Thread-20744] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:45:42.877 [DEBUG] [Thread-20746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:45:57.924 [DEBUG] [Thread-20747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:46:03.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:46:03.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:46:03.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
2026-04-15T14:46:05.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 45, 45), 9.46054, 53.0249, 0.0, 21.348, 14.7236, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:46:05.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:45:45
2026-04-15T14:46:05.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:46:05.889 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:46:05.890 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:46:05.921 [DEBUG] [Thread-20748] [transport.py] [_log()] starting thread (client mode): 0xee9acb20
2026-04-15T14:46:05.921 [DEBUG] [Thread-20748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:46:05.933 [DEBUG] [Thread-20748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:46:05.933 [INFO] [Thread-20748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:46:05.936 [DEBUG] [Thread-20748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:46:05.936 [DEBUG] [Thread-20748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:46:05.936 [DEBUG] [Thread-20748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:46:05.936 [DEBUG] [Thread-20748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:46:05.936 [DEBUG] [Thread-20748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:46:05.936 [DEBUG] [Thread-20748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:46:05.936 [DEBUG] [Thread-20748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:46:05.936 [DEBUG] [Thread-20748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:46:05.936 [DEBUG] [Thread-20748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:46:05.936 [DEBUG] [Thread-20748] [transport.py] [_log()] client lang: <none>
2026-04-15T14:46:05.936 [DEBUG] [Thread-20748] [transport.py] [_log()] server lang: <none>
2026-04-15T14:46:05.936 [DEBUG] [Thread-20748] [transport.py] [_log()] kex follows: False
2026-04-15T14:46:05.936 [DEBUG] [Thread-20748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:46:05.937 [DEBUG] [Thread-20748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:46:05.937 [DEBUG] [Thread-20748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:46:05.937 [DEBUG] [Thread-20748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:46:05.937 [DEBUG] [Thread-20748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:46:05.937 [DEBUG] [Thread-20748] [transport.py] [_log()] Compression: none
2026-04-15T14:46:05.937 [DEBUG] [Thread-20748] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:46:05.947 [DEBUG] [Thread-20748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:46:05.948 [DEBUG] [Thread-20748] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:46:05.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:46:05.948 [DEBUG] [Thread-20748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:46:05.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:46:05.949 [DEBUG] [Thread-20748] [transport.py] [_log()] userauth is OK
2026-04-15T14:46:05.949 [DEBUG] [Thread-20748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:46:05.950 [DEBUG] [Thread-20748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:46:05.950 [DEBUG] [Thread-20748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:46:05.950 [DEBUG] [Thread-20748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:46:05.973 [INFO] [Thread-20748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:46:05.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:46:06.613 [DEBUG] [Thread-20748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:46:06.613 [DEBUG] [Thread-20748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:46:06.614 [DEBUG] [Thread-20748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:46:06.654 [DEBUG] [Thread-20748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:46:06.654 [DEBUG] [Thread-20748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:46:06.657 [DEBUG] [Thread-20748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:46:06.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:46:06.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:46:06.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:46:06.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:46:06.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:46:06.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:46:06.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:46:06.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:46:06.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:46:06.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.531734 -999.00  +14.50  15.65     57   +6.30 1 1 1 1 1   888    0 8.19 39.59 ----- 21.5 15.7 351.0 24.2 21.2 -28.9 20.1 -28.5 20.8 -24.7 22.0 -25.9
2026-04-15T14:46:06.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:46:06.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:46:06.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.531734
2026-04-15T14:46:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:46:06.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:46:06.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:46:06.681 [DEBUG] [Thread-20748] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:46:06.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:46:06.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:46:06.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:45:45', tmtdew=9.46054, humidity=53.0249, cloud=0.0, wind=21.348, temperature=14.7236, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:45:41.818', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:46:06.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:46:06.928 [DEBUG] [Thread-20751] [transport.py] [_log()] starting thread (client mode): 0xf13e1870
2026-04-15T14:46:06.928 [DEBUG] [Thread-20751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:46:06.943 [DEBUG] [Thread-20751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:46:06.943 [INFO] [Thread-20751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:46:06.951 [DEBUG] [Thread-20751] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:46:06.951 [DEBUG] [Thread-20751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:46:06.951 [DEBUG] [Thread-20751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:46:06.951 [DEBUG] [Thread-20751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:46:06.951 [DEBUG] [Thread-20751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:46:06.951 [DEBUG] [Thread-20751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:46:06.952 [DEBUG] [Thread-20751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:46:06.952 [DEBUG] [Thread-20751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:46:06.952 [DEBUG] [Thread-20751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:46:06.952 [DEBUG] [Thread-20751] [transport.py] [_log()] client lang: <none>
2026-04-15T14:46:06.952 [DEBUG] [Thread-20751] [transport.py] [_log()] server lang: <none>
2026-04-15T14:46:06.952 [DEBUG] [Thread-20751] [transport.py] [_log()] kex follows: False
2026-04-15T14:46:06.952 [DEBUG] [Thread-20751] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:46:06.952 [DEBUG] [Thread-20751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:46:06.952 [DEBUG] [Thread-20751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:46:06.952 [DEBUG] [Thread-20751] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:46:06.952 [DEBUG] [Thread-20751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:46:06.953 [DEBUG] [Thread-20751] [transport.py] [_log()] Compression: none
2026-04-15T14:46:06.953 [DEBUG] [Thread-20751] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:46:07.009 [DEBUG] [Thread-20751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:46:07.009 [DEBUG] [Thread-20751] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:46:07.010 [DEBUG] [Thread-20751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:46:07.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:46:07.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:46:07.067 [DEBUG] [Thread-20751] [transport.py] [_log()] userauth is OK
2026-04-15T14:46:07.067 [DEBUG] [Thread-20751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:46:07.067 [DEBUG] [Thread-20751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:46:07.068 [DEBUG] [Thread-20751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:46:07.068 [DEBUG] [Thread-20751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:46:07.093 [INFO] [Thread-20751] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:46:07.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:46:07.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:46:07.966 [DEBUG] [Thread-20751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:46:07.966 [DEBUG] [Thread-20751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:46:08.019 [DEBUG] [Thread-20751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:46:08.019 [DEBUG] [Thread-20751] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:46:08.031 [DEBUG] [Thread-20751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:46:08.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:46:08.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')
2026-04-15T14:46:08.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
2026-04-15T14:46:08.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:46:08.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:46:08.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:46:08.080 [DEBUG] [Thread-20751] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:46:12.954 [DEBUG] [Thread-20753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:46:27.998 [DEBUG] [Thread-20754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:46:28.815 [DEBUG] [Thread-20755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:46:38.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:46:38.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:46:38.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
2026-04-15T14:46:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 46, 20), 9.39705, 53.2805, 0.0, 24.1729, 14.3615, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:46:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:46:20
2026-04-15T14:46:39.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:46:40.211 [DEBUG] [Thread-20756] [transport.py] [_log()] starting thread (client mode): 0xee98fa60
2026-04-15T14:46:40.211 [DEBUG] [Thread-20756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:46:40.230 [DEBUG] [Thread-20756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:46:40.230 [INFO] [Thread-20756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:46:40.233 [DEBUG] [Thread-20756] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:46:40.233 [DEBUG] [Thread-20756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:46:40.233 [DEBUG] [Thread-20756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:46:40.233 [DEBUG] [Thread-20756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:46:40.233 [DEBUG] [Thread-20756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:46:40.233 [DEBUG] [Thread-20756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:46:40.233 [DEBUG] [Thread-20756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:46:40.233 [DEBUG] [Thread-20756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:46:40.234 [DEBUG] [Thread-20756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:46:40.234 [DEBUG] [Thread-20756] [transport.py] [_log()] client lang: <none>
2026-04-15T14:46:40.234 [DEBUG] [Thread-20756] [transport.py] [_log()] server lang: <none>
2026-04-15T14:46:40.234 [DEBUG] [Thread-20756] [transport.py] [_log()] kex follows: False
2026-04-15T14:46:40.234 [DEBUG] [Thread-20756] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:46:40.234 [DEBUG] [Thread-20756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:46:40.234 [DEBUG] [Thread-20756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:46:40.234 [DEBUG] [Thread-20756] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:46:40.234 [DEBUG] [Thread-20756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:46:40.234 [DEBUG] [Thread-20756] [transport.py] [_log()] Compression: none
2026-04-15T14:46:40.234 [DEBUG] [Thread-20756] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:46:40.251 [DEBUG] [Thread-20756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:46:40.251 [DEBUG] [Thread-20756] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:46:40.252 [DEBUG] [Thread-20756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:46:40.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:46:40.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:46:40.253 [DEBUG] [Thread-20756] [transport.py] [_log()] userauth is OK
2026-04-15T14:46:40.253 [DEBUG] [Thread-20756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:46:40.253 [DEBUG] [Thread-20756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:46:40.253 [DEBUG] [Thread-20756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:46:40.253 [DEBUG] [Thread-20756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:46:40.270 [INFO] [Thread-20756] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:46:40.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:46:40.876 [DEBUG] [Thread-20756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:46:40.876 [DEBUG] [Thread-20756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:46:40.877 [DEBUG] [Thread-20756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:46:40.917 [DEBUG] [Thread-20756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:46:40.917 [DEBUG] [Thread-20756] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:46:40.920 [DEBUG] [Thread-20756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:46:40.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:46:40.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:46:40.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:46:40.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:46:40.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:46:40.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:46:40.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:46:40.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:46:40.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:46:40.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.532081 -999.00  +14.20  23.52     58   +6.20 1 1 1 1 1   888    0 8.28 39.98 ----- 18.6 23.5 327.0 31.0 21.1 -28.2 19.9 -27.1 20.7 -24.6 21.8 -25.7
2026-04-15T14:46:40.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:46:40.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:46:40.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.532081
2026-04-15T14:46:40.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:46:40.942 [DEBUG] [Thread-20756] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:46:40.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:46:40.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:46:40.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:46:40.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:46:40.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:46:20', tmtdew=9.39705, humidity=53.2805, cloud=0.0, wind=24.1729, temperature=14.3615, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:46:11.798', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:46:41.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:46:41.186 [DEBUG] [Thread-20759] [transport.py] [_log()] starting thread (client mode): 0xee98e350
2026-04-15T14:46:41.186 [DEBUG] [Thread-20759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:46:41.200 [DEBUG] [Thread-20759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:46:41.200 [INFO] [Thread-20759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:46:41.207 [DEBUG] [Thread-20759] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:46:41.208 [DEBUG] [Thread-20759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:46:41.208 [DEBUG] [Thread-20759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:46:41.208 [DEBUG] [Thread-20759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:46:41.208 [DEBUG] [Thread-20759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:46:41.208 [DEBUG] [Thread-20759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:46:41.208 [DEBUG] [Thread-20759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:46:41.208 [DEBUG] [Thread-20759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:46:41.208 [DEBUG] [Thread-20759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:46:41.208 [DEBUG] [Thread-20759] [transport.py] [_log()] client lang: <none>
2026-04-15T14:46:41.208 [DEBUG] [Thread-20759] [transport.py] [_log()] server lang: <none>
2026-04-15T14:46:41.208 [DEBUG] [Thread-20759] [transport.py] [_log()] kex follows: False
2026-04-15T14:46:41.208 [DEBUG] [Thread-20759] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:46:41.209 [DEBUG] [Thread-20759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:46:41.209 [DEBUG] [Thread-20759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:46:41.209 [DEBUG] [Thread-20759] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:46:41.209 [DEBUG] [Thread-20759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:46:41.209 [DEBUG] [Thread-20759] [transport.py] [_log()] Compression: none
2026-04-15T14:46:41.209 [DEBUG] [Thread-20759] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:46:41.269 [DEBUG] [Thread-20759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:46:41.269 [DEBUG] [Thread-20759] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:46:41.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:46:41.270 [DEBUG] [Thread-20759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:46:41.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:46:41.331 [DEBUG] [Thread-20759] [transport.py] [_log()] userauth is OK
2026-04-15T14:46:41.331 [DEBUG] [Thread-20759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:46:41.331 [DEBUG] [Thread-20759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:46:41.331 [DEBUG] [Thread-20759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:46:41.331 [DEBUG] [Thread-20759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:46:41.355 [INFO] [Thread-20759] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:46:41.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:46:41.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:46:42.198 [DEBUG] [Thread-20759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:46:42.199 [DEBUG] [Thread-20759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:46:42.248 [DEBUG] [Thread-20759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:46:42.248 [DEBUG] [Thread-20759] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:46:42.262 [DEBUG] [Thread-20759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:46:42.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:46:42.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')
2026-04-15T14:46:42.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
2026-04-15T14:46:42.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:46:42.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:46:42.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:46:42.297 [DEBUG] [Thread-20759] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:46:43.030 [DEBUG] [Thread-20761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:46:58.075 [DEBUG] [Thread-20762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:47:06.030 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:47:06.031 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:47:12.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:47:12.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:47:12.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
2026-04-15T14:47:13.107 [DEBUG] [Thread-20763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:47:13.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 46, 56), 9.78751, 51.9187, 0.0, 22.1972, 14.478, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:47:13.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:46:56
2026-04-15T14:47:13.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:47:14.438 [DEBUG] [Thread-20764] [transport.py] [_log()] starting thread (client mode): 0xee9af4c0
2026-04-15T14:47:14.439 [DEBUG] [Thread-20764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:47:14.461 [DEBUG] [Thread-20764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:47:14.461 [INFO] [Thread-20764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:47:14.464 [DEBUG] [Thread-20764] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:47:14.464 [DEBUG] [Thread-20764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:47:14.464 [DEBUG] [Thread-20764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:47:14.464 [DEBUG] [Thread-20764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:47:14.464 [DEBUG] [Thread-20764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:47:14.465 [DEBUG] [Thread-20764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:47:14.465 [DEBUG] [Thread-20764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:47:14.465 [DEBUG] [Thread-20764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:47:14.465 [DEBUG] [Thread-20764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:47:14.465 [DEBUG] [Thread-20764] [transport.py] [_log()] client lang: <none>
2026-04-15T14:47:14.465 [DEBUG] [Thread-20764] [transport.py] [_log()] server lang: <none>
2026-04-15T14:47:14.465 [DEBUG] [Thread-20764] [transport.py] [_log()] kex follows: False
2026-04-15T14:47:14.465 [DEBUG] [Thread-20764] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:47:14.465 [DEBUG] [Thread-20764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:47:14.465 [DEBUG] [Thread-20764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:47:14.466 [DEBUG] [Thread-20764] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:47:14.466 [DEBUG] [Thread-20764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:47:14.466 [DEBUG] [Thread-20764] [transport.py] [_log()] Compression: none
2026-04-15T14:47:14.466 [DEBUG] [Thread-20764] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:47:14.482 [DEBUG] [Thread-20764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:47:14.483 [DEBUG] [Thread-20764] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:47:14.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:47:14.483 [DEBUG] [Thread-20764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:47:14.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:47:14.484 [DEBUG] [Thread-20764] [transport.py] [_log()] userauth is OK
2026-04-15T14:47:14.485 [DEBUG] [Thread-20764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:47:14.485 [DEBUG] [Thread-20764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:47:14.485 [DEBUG] [Thread-20764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:47:14.485 [DEBUG] [Thread-20764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:47:14.510 [INFO] [Thread-20764] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:47:14.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:47:15.150 [DEBUG] [Thread-20764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:47:15.150 [DEBUG] [Thread-20764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:47:15.151 [DEBUG] [Thread-20764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:47:15.191 [DEBUG] [Thread-20764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:47:15.191 [DEBUG] [Thread-20764] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:47:15.194 [DEBUG] [Thread-20764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:47:15.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:47:15.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:47:15.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:47:15.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:47:15.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:47:15.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:47:15.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:47:15.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:47:15.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:47:15.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.532428 -999.00  +14.50   9.94     59   +6.70 1 1 1 1 1   888    0 8.48 47.53 ----- 23.5 9.9 357.5 20.9 21.1 -27.3 20.1 -25.6 20.8 -23.4 21.9 -24.8
2026-04-15T14:47:15.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:47:15.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:47:15.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.532428
2026-04-15T14:47:15.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:47:15.219 [DEBUG] [Thread-20764] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:47:15.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:47:15.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:47:15.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:47:15.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:47:15.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:46:56', tmtdew=9.78751, humidity=51.9187, cloud=0.0, wind=22.1972, temperature=14.478, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:46:41.779', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:47:15.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:47:15.477 [DEBUG] [Thread-20767] [transport.py] [_log()] starting thread (client mode): 0xf1335d50
2026-04-15T14:47:15.477 [DEBUG] [Thread-20767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:47:15.491 [DEBUG] [Thread-20767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:47:15.492 [INFO] [Thread-20767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:47:15.502 [DEBUG] [Thread-20767] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:47:15.502 [DEBUG] [Thread-20767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:47:15.502 [DEBUG] [Thread-20767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:47:15.502 [DEBUG] [Thread-20767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:47:15.502 [DEBUG] [Thread-20767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:47:15.502 [DEBUG] [Thread-20767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:47:15.502 [DEBUG] [Thread-20767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:47:15.503 [DEBUG] [Thread-20767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:47:15.503 [DEBUG] [Thread-20767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:47:15.503 [DEBUG] [Thread-20767] [transport.py] [_log()] client lang: <none>
2026-04-15T14:47:15.503 [DEBUG] [Thread-20767] [transport.py] [_log()] server lang: <none>
2026-04-15T14:47:15.503 [DEBUG] [Thread-20767] [transport.py] [_log()] kex follows: False
2026-04-15T14:47:15.503 [DEBUG] [Thread-20767] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:47:15.503 [DEBUG] [Thread-20767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:47:15.503 [DEBUG] [Thread-20767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:47:15.503 [DEBUG] [Thread-20767] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:47:15.503 [DEBUG] [Thread-20767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:47:15.503 [DEBUG] [Thread-20767] [transport.py] [_log()] Compression: none
2026-04-15T14:47:15.504 [DEBUG] [Thread-20767] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:47:15.558 [DEBUG] [Thread-20767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:47:15.558 [DEBUG] [Thread-20767] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:47:15.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:47:15.559 [DEBUG] [Thread-20767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:47:15.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:47:15.616 [DEBUG] [Thread-20767] [transport.py] [_log()] userauth is OK
2026-04-15T14:47:15.616 [DEBUG] [Thread-20767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:47:15.616 [DEBUG] [Thread-20767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:47:15.616 [DEBUG] [Thread-20767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:47:15.617 [DEBUG] [Thread-20767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:47:15.641 [INFO] [Thread-20767] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:47:15.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:47:15.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:47:16.468 [DEBUG] [Thread-20767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:47:16.468 [DEBUG] [Thread-20767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:47:16.516 [DEBUG] [Thread-20767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:47:16.516 [DEBUG] [Thread-20767] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:47:16.525 [DEBUG] [Thread-20767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:47:16.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:47:16.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')
2026-04-15T14:47:16.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
2026-04-15T14:47:16.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:47:16.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:47:16.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:47:16.560 [DEBUG] [Thread-20767] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:47:28.137 [DEBUG] [Thread-20769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:47:28.916 [DEBUG] [Thread-20770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:47:43.177 [DEBUG] [Thread-20771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:47:46.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:47:46.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:47:46.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
2026-04-15T14:47:47.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 47, 31), 9.63914, 52.4323, 0.0, 21.474, 14.4116, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:47:47.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:47:31
2026-04-15T14:47:48.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:47:48.699 [DEBUG] [Thread-20772] [transport.py] [_log()] starting thread (client mode): 0xee98e1a0
2026-04-15T14:47:48.699 [DEBUG] [Thread-20772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:47:48.719 [DEBUG] [Thread-20772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:47:48.719 [INFO] [Thread-20772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:47:48.722 [DEBUG] [Thread-20772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:47:48.723 [DEBUG] [Thread-20772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:47:48.723 [DEBUG] [Thread-20772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:47:48.723 [DEBUG] [Thread-20772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:47:48.723 [DEBUG] [Thread-20772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:47:48.723 [DEBUG] [Thread-20772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:47:48.723 [DEBUG] [Thread-20772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:47:48.723 [DEBUG] [Thread-20772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:47:48.723 [DEBUG] [Thread-20772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:47:48.723 [DEBUG] [Thread-20772] [transport.py] [_log()] client lang: <none>
2026-04-15T14:47:48.723 [DEBUG] [Thread-20772] [transport.py] [_log()] server lang: <none>
2026-04-15T14:47:48.723 [DEBUG] [Thread-20772] [transport.py] [_log()] kex follows: False
2026-04-15T14:47:48.723 [DEBUG] [Thread-20772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:47:48.724 [DEBUG] [Thread-20772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:47:48.724 [DEBUG] [Thread-20772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:47:48.724 [DEBUG] [Thread-20772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:47:48.724 [DEBUG] [Thread-20772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:47:48.724 [DEBUG] [Thread-20772] [transport.py] [_log()] Compression: none
2026-04-15T14:47:48.724 [DEBUG] [Thread-20772] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:47:48.742 [DEBUG] [Thread-20772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:47:48.743 [DEBUG] [Thread-20772] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:47:48.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:47:48.743 [DEBUG] [Thread-20772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:47:48.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:47:48.744 [DEBUG] [Thread-20772] [transport.py] [_log()] userauth is OK
2026-04-15T14:47:48.744 [DEBUG] [Thread-20772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:47:48.744 [DEBUG] [Thread-20772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:47:48.745 [DEBUG] [Thread-20772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:47:48.745 [DEBUG] [Thread-20772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:47:48.763 [INFO] [Thread-20772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:47:48.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:47:49.386 [DEBUG] [Thread-20772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:47:49.386 [DEBUG] [Thread-20772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:47:49.387 [DEBUG] [Thread-20772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:47:49.427 [DEBUG] [Thread-20772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:47:49.427 [DEBUG] [Thread-20772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:47:49.430 [DEBUG] [Thread-20772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:47:49.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:47:49.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:47:49.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:47:49.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:47:49.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:47:49.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:47:49.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:47:49.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:47:49.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:47:49.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.532776 -999.00  +14.20  21.07     58   +6.10 1 1 1 1 1   888    0 8.70 50.49 ----- 21.9 21.1 320.2 26.2 21.1 -28.3 19.9 -27.0 20.7 -24.5 21.9 -25.3
2026-04-15T14:47:49.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:47:49.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:47:49.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.532776
2026-04-15T14:47:49.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:47:49.455 [DEBUG] [Thread-20772] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:47:49.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:47:49.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:47:49.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:47:49.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:47:49.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:47:31', tmtdew=9.63914, humidity=52.4323, cloud=0.0, wind=21.474, temperature=14.4116, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:47:11.846', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:47:49.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:47:49.715 [DEBUG] [Thread-20775] [transport.py] [_log()] starting thread (client mode): 0xee98a5c0
2026-04-15T14:47:49.715 [DEBUG] [Thread-20775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:47:49.729 [DEBUG] [Thread-20775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:47:49.730 [INFO] [Thread-20775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:47:49.737 [DEBUG] [Thread-20775] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:47:49.737 [DEBUG] [Thread-20775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:47:49.737 [DEBUG] [Thread-20775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:47:49.737 [DEBUG] [Thread-20775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:47:49.737 [DEBUG] [Thread-20775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:47:49.737 [DEBUG] [Thread-20775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:47:49.737 [DEBUG] [Thread-20775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:47:49.737 [DEBUG] [Thread-20775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:47:49.738 [DEBUG] [Thread-20775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:47:49.738 [DEBUG] [Thread-20775] [transport.py] [_log()] client lang: <none>
2026-04-15T14:47:49.738 [DEBUG] [Thread-20775] [transport.py] [_log()] server lang: <none>
2026-04-15T14:47:49.738 [DEBUG] [Thread-20775] [transport.py] [_log()] kex follows: False
2026-04-15T14:47:49.738 [DEBUG] [Thread-20775] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:47:49.738 [DEBUG] [Thread-20775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:47:49.738 [DEBUG] [Thread-20775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:47:49.738 [DEBUG] [Thread-20775] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:47:49.738 [DEBUG] [Thread-20775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:47:49.738 [DEBUG] [Thread-20775] [transport.py] [_log()] Compression: none
2026-04-15T14:47:49.738 [DEBUG] [Thread-20775] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:47:49.794 [DEBUG] [Thread-20775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:47:49.794 [DEBUG] [Thread-20775] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:47:49.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:47:49.795 [DEBUG] [Thread-20775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:47:49.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:47:49.857 [DEBUG] [Thread-20775] [transport.py] [_log()] userauth is OK
2026-04-15T14:47:49.858 [DEBUG] [Thread-20775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:47:49.858 [DEBUG] [Thread-20775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:47:49.858 [DEBUG] [Thread-20775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:47:49.858 [DEBUG] [Thread-20775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:47:49.885 [INFO] [Thread-20775] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:47:49.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:47:49.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:47:50.754 [DEBUG] [Thread-20775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:47:50.754 [DEBUG] [Thread-20775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:47:50.802 [DEBUG] [Thread-20775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:47:50.802 [DEBUG] [Thread-20775] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:47:50.810 [DEBUG] [Thread-20775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:47:50.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:47:50.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')
2026-04-15T14:47:50.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
2026-04-15T14:47:50.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:47:50.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:47:50.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:47:50.850 [DEBUG] [Thread-20775] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:47:58.208 [DEBUG] [Thread-20777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:48:06.181 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:48:06.182 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:48:13.252 [DEBUG] [Thread-20778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:48:20.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:48:20.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:48:20.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
2026-04-15T14:48:22.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 48, 7), 9.63578, 52.4489, 0.0, 18.8809, 14.4281, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:48:22.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:48:07
2026-04-15T14:48:22.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:48:23.180 [DEBUG] [Thread-20779] [transport.py] [_log()] starting thread (client mode): 0xee988f70
2026-04-15T14:48:23.180 [DEBUG] [Thread-20779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:48:23.195 [DEBUG] [Thread-20779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:48:23.195 [INFO] [Thread-20779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:48:23.198 [DEBUG] [Thread-20779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:48:23.198 [DEBUG] [Thread-20779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:48:23.198 [DEBUG] [Thread-20779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:48:23.198 [DEBUG] [Thread-20779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:48:23.199 [DEBUG] [Thread-20779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:48:23.199 [DEBUG] [Thread-20779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:48:23.199 [DEBUG] [Thread-20779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:48:23.199 [DEBUG] [Thread-20779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:48:23.199 [DEBUG] [Thread-20779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:48:23.199 [DEBUG] [Thread-20779] [transport.py] [_log()] client lang: <none>
2026-04-15T14:48:23.199 [DEBUG] [Thread-20779] [transport.py] [_log()] server lang: <none>
2026-04-15T14:48:23.199 [DEBUG] [Thread-20779] [transport.py] [_log()] kex follows: False
2026-04-15T14:48:23.199 [DEBUG] [Thread-20779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:48:23.199 [DEBUG] [Thread-20779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:48:23.199 [DEBUG] [Thread-20779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:48:23.199 [DEBUG] [Thread-20779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:48:23.200 [DEBUG] [Thread-20779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:48:23.200 [DEBUG] [Thread-20779] [transport.py] [_log()] Compression: none
2026-04-15T14:48:23.200 [DEBUG] [Thread-20779] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:48:23.214 [DEBUG] [Thread-20779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:48:23.215 [DEBUG] [Thread-20779] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:48:23.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:48:23.215 [DEBUG] [Thread-20779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:48:23.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:48:23.216 [DEBUG] [Thread-20779] [transport.py] [_log()] userauth is OK
2026-04-15T14:48:23.216 [DEBUG] [Thread-20779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:48:23.216 [DEBUG] [Thread-20779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:48:23.216 [DEBUG] [Thread-20779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:48:23.216 [DEBUG] [Thread-20779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:48:23.239 [INFO] [Thread-20779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:48:23.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:48:23.809 [DEBUG] [Thread-20779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:48:23.809 [DEBUG] [Thread-20779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:48:23.809 [DEBUG] [Thread-20779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:48:23.850 [DEBUG] [Thread-20779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:48:23.850 [DEBUG] [Thread-20779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:48:23.853 [DEBUG] [Thread-20779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:48:23.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:48:23.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:48:23.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:48:23.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:48:23.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:48:23.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:48:23.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:48:23.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:48:23.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:48:23.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.533470 -999.00  +14.20  15.04     58   +6.00 1 1 1 1 1   888    0 8.70 53.98 ----- 12.1 15.0 3.5 22.9 21.1 -26.9 19.9 -28.0 20.8 -24.6 22.0 -25.0
2026-04-15T14:48:23.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:48:23.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:48:23.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.533470
2026-04-15T14:48:23.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:48:23.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:48:23.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:48:23.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:48:23.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:48:23.879 [DEBUG] [Thread-20779] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:48:23.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:48:07', tmtdew=9.63578, humidity=52.4489, cloud=0.0, wind=18.8809, temperature=14.4281, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:48:11.808', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:48:24.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:48:24.135 [DEBUG] [Thread-20782] [transport.py] [_log()] starting thread (client mode): 0xf13caad0
2026-04-15T14:48:24.135 [DEBUG] [Thread-20782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:48:24.150 [DEBUG] [Thread-20782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:48:24.150 [INFO] [Thread-20782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:48:24.158 [DEBUG] [Thread-20782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:48:24.158 [DEBUG] [Thread-20782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:48:24.158 [DEBUG] [Thread-20782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:48:24.158 [DEBUG] [Thread-20782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:48:24.158 [DEBUG] [Thread-20782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:48:24.158 [DEBUG] [Thread-20782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:48:24.158 [DEBUG] [Thread-20782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:48:24.158 [DEBUG] [Thread-20782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:48:24.158 [DEBUG] [Thread-20782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:48:24.158 [DEBUG] [Thread-20782] [transport.py] [_log()] client lang: <none>
2026-04-15T14:48:24.158 [DEBUG] [Thread-20782] [transport.py] [_log()] server lang: <none>
2026-04-15T14:48:24.158 [DEBUG] [Thread-20782] [transport.py] [_log()] kex follows: False
2026-04-15T14:48:24.159 [DEBUG] [Thread-20782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:48:24.159 [DEBUG] [Thread-20782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:48:24.159 [DEBUG] [Thread-20782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:48:24.159 [DEBUG] [Thread-20782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:48:24.159 [DEBUG] [Thread-20782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:48:24.159 [DEBUG] [Thread-20782] [transport.py] [_log()] Compression: none
2026-04-15T14:48:24.159 [DEBUG] [Thread-20782] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:48:24.218 [DEBUG] [Thread-20782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:48:24.218 [DEBUG] [Thread-20782] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:48:24.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:48:24.219 [DEBUG] [Thread-20782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:48:24.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:48:24.275 [DEBUG] [Thread-20782] [transport.py] [_log()] userauth is OK
2026-04-15T14:48:24.275 [DEBUG] [Thread-20782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:48:24.276 [DEBUG] [Thread-20782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:48:24.276 [DEBUG] [Thread-20782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:48:24.276 [DEBUG] [Thread-20782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:48:24.301 [INFO] [Thread-20782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:48:24.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:48:24.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:48:25.179 [DEBUG] [Thread-20782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:48:25.180 [DEBUG] [Thread-20782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:48:25.228 [DEBUG] [Thread-20782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:48:25.228 [DEBUG] [Thread-20782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:48:25.240 [DEBUG] [Thread-20782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:48:25.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:48:25.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')
2026-04-15T14: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') -> 00000000
2026-04-15T14:48:25.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:48:25.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:48:25.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:48:25.280 [DEBUG] [Thread-20782] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:48:28.283 [DEBUG] [Thread-20784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:48:29.010 [DEBUG] [Thread-20785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:48:43.328 [DEBUG] [Thread-20786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:48:55.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:48:55.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:48:55.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:48:56.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 48, 43), 9.70755, 52.1298, 29.3, 20.0074, 14.7563, 0, 0, 0, 0, 0, 0),)
2026-04-15T14:48:56.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:48:43
2026-04-15T14:48:57.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:48:57.487 [DEBUG] [Thread-20787] [transport.py] [_log()] starting thread (client mode): 0xf13e1cc0
2026-04-15T14:48:57.488 [DEBUG] [Thread-20787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:48:57.507 [DEBUG] [Thread-20787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:48:57.507 [INFO] [Thread-20787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:48:57.510 [DEBUG] [Thread-20787] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:48:57.510 [DEBUG] [Thread-20787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:48:57.511 [DEBUG] [Thread-20787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:48:57.511 [DEBUG] [Thread-20787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:48:57.511 [DEBUG] [Thread-20787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:48:57.511 [DEBUG] [Thread-20787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:48:57.511 [DEBUG] [Thread-20787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:48:57.511 [DEBUG] [Thread-20787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:48:57.511 [DEBUG] [Thread-20787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:48:57.511 [DEBUG] [Thread-20787] [transport.py] [_log()] client lang: <none>
2026-04-15T14:48:57.511 [DEBUG] [Thread-20787] [transport.py] [_log()] server lang: <none>
2026-04-15T14:48:57.511 [DEBUG] [Thread-20787] [transport.py] [_log()] kex follows: False
2026-04-15T14:48:57.511 [DEBUG] [Thread-20787] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:48:57.512 [DEBUG] [Thread-20787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:48:57.512 [DEBUG] [Thread-20787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:48:57.512 [DEBUG] [Thread-20787] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:48:57.512 [DEBUG] [Thread-20787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:48:57.512 [DEBUG] [Thread-20787] [transport.py] [_log()] Compression: none
2026-04-15T14:48:57.512 [DEBUG] [Thread-20787] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:48:57.531 [DEBUG] [Thread-20787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:48:57.531 [DEBUG] [Thread-20787] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:48:57.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:48:57.532 [DEBUG] [Thread-20787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:48:57.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:48:57.533 [DEBUG] [Thread-20787] [transport.py] [_log()] userauth is OK
2026-04-15T14:48:57.533 [DEBUG] [Thread-20787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:48:57.533 [DEBUG] [Thread-20787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:48:57.533 [DEBUG] [Thread-20787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:48:57.533 [DEBUG] [Thread-20787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:48:57.569 [INFO] [Thread-20787] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:48:57.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:48:58.205 [DEBUG] [Thread-20787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:48:58.205 [DEBUG] [Thread-20787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:48:58.206 [DEBUG] [Thread-20787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:48:58.246 [DEBUG] [Thread-20787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:48:58.246 [DEBUG] [Thread-20787] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:48:58.249 [DEBUG] [Thread-20787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:48:58.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:48:58.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:48:58.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:48:58.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:48:58.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:48:58.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:48:58.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:48:58.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:48:58.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:48:58.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.533817 -999.00  +14.10  14.63     58   +6.20 1 1 1 1 1   888    0 8.78 54.22 ----- 15.1 14.6 330.0 18.4 21.0 -27.5 19.8 -27.9 20.7 -24.6 21.8 -29.9
2026-04-15T14:48:58.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:48:58.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:48:58.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.533817
2026-04-15T14:48:58.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:48:58.274 [DEBUG] [Thread-20787] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:48:58.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:48:58.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:48:58.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:48:58.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:48:58.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:48:43', tmtdew=9.70755, humidity=52.1298, cloud=29.3, wind=20.0074, temperature=14.7563, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:48:41.789', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:48:58.358 [DEBUG] [Thread-20790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:48:58.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:48:58.529 [DEBUG] [Thread-20791] [transport.py] [_log()] starting thread (client mode): 0xf13367a0
2026-04-15T14:48:58.529 [DEBUG] [Thread-20791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:48:58.543 [DEBUG] [Thread-20791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:48:58.543 [INFO] [Thread-20791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:48:58.551 [DEBUG] [Thread-20791] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:48:58.551 [DEBUG] [Thread-20791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:48:58.551 [DEBUG] [Thread-20791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:48:58.551 [DEBUG] [Thread-20791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:48:58.551 [DEBUG] [Thread-20791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:48:58.551 [DEBUG] [Thread-20791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:48:58.551 [DEBUG] [Thread-20791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:48:58.551 [DEBUG] [Thread-20791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:48:58.551 [DEBUG] [Thread-20791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:48:58.551 [DEBUG] [Thread-20791] [transport.py] [_log()] client lang: <none>
2026-04-15T14:48:58.551 [DEBUG] [Thread-20791] [transport.py] [_log()] server lang: <none>
2026-04-15T14:48:58.552 [DEBUG] [Thread-20791] [transport.py] [_log()] kex follows: False
2026-04-15T14:48:58.552 [DEBUG] [Thread-20791] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:48:58.552 [DEBUG] [Thread-20791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:48:58.552 [DEBUG] [Thread-20791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:48:58.552 [DEBUG] [Thread-20791] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:48:58.552 [DEBUG] [Thread-20791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:48:58.552 [DEBUG] [Thread-20791] [transport.py] [_log()] Compression: none
2026-04-15T14:48:58.552 [DEBUG] [Thread-20791] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:48:58.613 [DEBUG] [Thread-20791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:48:58.613 [DEBUG] [Thread-20791] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:48:58.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:48:58.614 [DEBUG] [Thread-20791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:48:58.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:48:58.671 [DEBUG] [Thread-20791] [transport.py] [_log()] userauth is OK
2026-04-15T14:48:58.672 [DEBUG] [Thread-20791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:48:58.672 [DEBUG] [Thread-20791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:48:58.672 [DEBUG] [Thread-20791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:48:58.672 [DEBUG] [Thread-20791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:48:58.697 [INFO] [Thread-20791] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:48:58.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:48:58.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:48:59.537 [DEBUG] [Thread-20791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:48:59.537 [DEBUG] [Thread-20791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:48:59.588 [DEBUG] [Thread-20791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:48:59.588 [DEBUG] [Thread-20791] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:48:59.597 [DEBUG] [Thread-20791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:48:59.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:48:59.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')
2026-04-15T14:48:59.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
2026-04-15T14:48:59.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:48:59.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:48:59.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:48:59.629 [DEBUG] [Thread-20791] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:49:06.320 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:49:06.321 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:49:13.400 [DEBUG] [Thread-20793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:49:28.431 [DEBUG] [Thread-20794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:49:29.103 [DEBUG] [Thread-20795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:49:29.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:49:29.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:49: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
2026-04-15T14:49:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 49, 18), 9.82538, 51.8026, 29.3, 15.2449, 14.5941, 0, 0, 0, 0, 0, 0),)
2026-04-15T14:49:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:49:18
2026-04-15T14:49:31.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:49:31.740 [DEBUG] [Thread-20796] [transport.py] [_log()] starting thread (client mode): 0xee98ada0
2026-04-15T14:49:31.741 [DEBUG] [Thread-20796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:49:31.762 [DEBUG] [Thread-20796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:49:31.762 [INFO] [Thread-20796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:49:31.765 [DEBUG] [Thread-20796] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:49:31.765 [DEBUG] [Thread-20796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:49:31.765 [DEBUG] [Thread-20796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:49:31.765 [DEBUG] [Thread-20796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:49:31.765 [DEBUG] [Thread-20796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:49:31.765 [DEBUG] [Thread-20796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:49:31.766 [DEBUG] [Thread-20796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:49:31.766 [DEBUG] [Thread-20796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:49:31.766 [DEBUG] [Thread-20796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:49:31.766 [DEBUG] [Thread-20796] [transport.py] [_log()] client lang: <none>
2026-04-15T14:49:31.766 [DEBUG] [Thread-20796] [transport.py] [_log()] server lang: <none>
2026-04-15T14:49:31.766 [DEBUG] [Thread-20796] [transport.py] [_log()] kex follows: False
2026-04-15T14:49:31.766 [DEBUG] [Thread-20796] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:49:31.766 [DEBUG] [Thread-20796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:49:31.766 [DEBUG] [Thread-20796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:49:31.766 [DEBUG] [Thread-20796] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:49:31.766 [DEBUG] [Thread-20796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:49:31.767 [DEBUG] [Thread-20796] [transport.py] [_log()] Compression: none
2026-04-15T14:49:31.767 [DEBUG] [Thread-20796] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:49:31.783 [DEBUG] [Thread-20796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:49:31.783 [DEBUG] [Thread-20796] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:49:31.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:49:31.784 [DEBUG] [Thread-20796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:49:31.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:49:31.785 [DEBUG] [Thread-20796] [transport.py] [_log()] userauth is OK
2026-04-15T14:49:31.785 [DEBUG] [Thread-20796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:49:31.785 [DEBUG] [Thread-20796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:49:31.785 [DEBUG] [Thread-20796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:49:31.786 [DEBUG] [Thread-20796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:49:31.810 [INFO] [Thread-20796] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:49:31.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:49:32.431 [DEBUG] [Thread-20796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:49:32.431 [DEBUG] [Thread-20796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:49:32.432 [DEBUG] [Thread-20796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:49:32.472 [DEBUG] [Thread-20796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:49:32.472 [DEBUG] [Thread-20796] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:49:32.475 [DEBUG] [Thread-20796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:49:32.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:49:32.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:49:32.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:49:32.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:49:32.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:49:32.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:49:32.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:49:32.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:49:32.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:49:32.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.534164 -999.00  +14.30  19.32     59   +6.40 1 1 1 1 1   888    0 8.82 56.10 ----- 18.5 19.3 326.0 23.4 21.0 -26.9 19.9 -26.2 20.8 -23.8 21.9 -25.8
2026-04-15T14:49:32.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:49:32.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:49:32.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.534164
2026-04-15T14:49:32.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:49:32.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:49:32.503 [DEBUG] [Thread-20796] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:49:32.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:49:32.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:49:32.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:49:32.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:49:18', tmtdew=9.82538, humidity=51.8026, cloud=29.3, wind=15.2449, temperature=14.5941, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:49:11.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:49:32.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:49:32.760 [DEBUG] [Thread-20799] [transport.py] [_log()] starting thread (client mode): 0xf13e1570
2026-04-15T14:49:32.761 [DEBUG] [Thread-20799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:49:32.775 [DEBUG] [Thread-20799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:49:32.775 [INFO] [Thread-20799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:49:32.783 [DEBUG] [Thread-20799] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:49:32.783 [DEBUG] [Thread-20799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:49:32.783 [DEBUG] [Thread-20799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:49:32.783 [DEBUG] [Thread-20799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:49:32.783 [DEBUG] [Thread-20799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:49:32.783 [DEBUG] [Thread-20799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:49:32.784 [DEBUG] [Thread-20799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:49:32.784 [DEBUG] [Thread-20799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:49:32.784 [DEBUG] [Thread-20799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:49:32.784 [DEBUG] [Thread-20799] [transport.py] [_log()] client lang: <none>
2026-04-15T14:49:32.784 [DEBUG] [Thread-20799] [transport.py] [_log()] server lang: <none>
2026-04-15T14:49:32.784 [DEBUG] [Thread-20799] [transport.py] [_log()] kex follows: False
2026-04-15T14:49:32.784 [DEBUG] [Thread-20799] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:49:32.784 [DEBUG] [Thread-20799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:49:32.784 [DEBUG] [Thread-20799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:49:32.784 [DEBUG] [Thread-20799] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:49:32.784 [DEBUG] [Thread-20799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:49:32.784 [DEBUG] [Thread-20799] [transport.py] [_log()] Compression: none
2026-04-15T14:49:32.785 [DEBUG] [Thread-20799] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:49:32.839 [DEBUG] [Thread-20799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:49:32.839 [DEBUG] [Thread-20799] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:49:32.840 [DEBUG] [Thread-20799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:49:32.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:49:32.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:49:32.902 [DEBUG] [Thread-20799] [transport.py] [_log()] userauth is OK
2026-04-15T14:49:32.902 [DEBUG] [Thread-20799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:49:32.902 [DEBUG] [Thread-20799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:49:32.902 [DEBUG] [Thread-20799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:49:32.903 [DEBUG] [Thread-20799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:49:32.927 [INFO] [Thread-20799] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:49:32.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:49:32.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:49:33.738 [DEBUG] [Thread-20799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:49:33.739 [DEBUG] [Thread-20799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:49:33.786 [DEBUG] [Thread-20799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:49:33.786 [DEBUG] [Thread-20799] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:49:33.795 [DEBUG] [Thread-20799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:49:33.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:49:33.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')
2026-04-15T14:49:33.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
2026-04-15T14:49:33.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:49:33.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:49:33.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:49:33.827 [DEBUG] [Thread-20799] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:49:43.461 [DEBUG] [Thread-20801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:49:58.505 [DEBUG] [Thread-20802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:50:03.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:50:03.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:50:03.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:50:05.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 49, 54), 10.2346, 50.2738, 29.3, 17.1144, 14.8554, 0, 0, 0, 0, 0, 0),)
2026-04-15T14:50:05.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:49:54
2026-04-15T14:50:05.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:50:05.926 [DEBUG] [Thread-20803] [transport.py] [_log()] starting thread (client mode): 0xee9af4c0
2026-04-15T14:50:05.927 [DEBUG] [Thread-20803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:50:05.949 [DEBUG] [Thread-20803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:50:05.949 [INFO] [Thread-20803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:50:05.951 [DEBUG] [Thread-20803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:50:05.951 [DEBUG] [Thread-20803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:50:05.951 [DEBUG] [Thread-20803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:50:05.951 [DEBUG] [Thread-20803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:50:05.951 [DEBUG] [Thread-20803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:50:05.952 [DEBUG] [Thread-20803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:50:05.952 [DEBUG] [Thread-20803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:50:05.952 [DEBUG] [Thread-20803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:50:05.952 [DEBUG] [Thread-20803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:50:05.952 [DEBUG] [Thread-20803] [transport.py] [_log()] client lang: <none>
2026-04-15T14:50:05.952 [DEBUG] [Thread-20803] [transport.py] [_log()] server lang: <none>
2026-04-15T14:50:05.952 [DEBUG] [Thread-20803] [transport.py] [_log()] kex follows: False
2026-04-15T14:50:05.952 [DEBUG] [Thread-20803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:50:05.952 [DEBUG] [Thread-20803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:50:05.952 [DEBUG] [Thread-20803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:50:05.952 [DEBUG] [Thread-20803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:50:05.952 [DEBUG] [Thread-20803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:50:05.953 [DEBUG] [Thread-20803] [transport.py] [_log()] Compression: none
2026-04-15T14:50:05.953 [DEBUG] [Thread-20803] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:50:05.962 [DEBUG] [Thread-20803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:50:05.962 [DEBUG] [Thread-20803] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:50:05.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:50:05.963 [DEBUG] [Thread-20803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:50:05.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:50:05.964 [DEBUG] [Thread-20803] [transport.py] [_log()] userauth is OK
2026-04-15T14:50:05.964 [DEBUG] [Thread-20803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:50:05.964 [DEBUG] [Thread-20803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:50:05.964 [DEBUG] [Thread-20803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:50:05.964 [DEBUG] [Thread-20803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:50:05.989 [INFO] [Thread-20803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:50:05.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:50:06.461 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:50:06.462 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:50:07.789 [DEBUG] [Thread-20803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:50:07.789 [DEBUG] [Thread-20803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:50:07.789 [DEBUG] [Thread-20803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:50:07.829 [DEBUG] [Thread-20803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:50:07.830 [DEBUG] [Thread-20803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:50:07.831 [DEBUG] [Thread-20803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:50:07.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:50:07.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:50:07.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:50:07.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:50:07.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:50:07.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:50:07.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:50:07.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:50:07.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:50:07.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.534512 -999.00  +14.30  21.39     57   +6.00 1 1 1 1 1   888    0 9.22 63.14 ----- 16.2 21.4 309.0 26.3 21.1 -27.3 20.1 -27.2 20.7 -26.6 22.0 -25.1
2026-04-15T14:50:07.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:50:07.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:50:07.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.534512
2026-04-15T14:50:07.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:50:07.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:50:07.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:50:07.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:50:07.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:50:07.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:49:54', tmtdew=10.2346, humidity=50.2738, cloud=29.3, wind=17.1144, temperature=14.8554, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:49:41.837', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:50:07.868 [DEBUG] [Thread-20803] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:50:08.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:50:08.085 [DEBUG] [Thread-20806] [transport.py] [_log()] starting thread (client mode): 0xee98a740
2026-04-15T14:50:08.086 [DEBUG] [Thread-20806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:50:08.103 [DEBUG] [Thread-20806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:50:08.103 [INFO] [Thread-20806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:50:08.112 [DEBUG] [Thread-20806] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:50:08.112 [DEBUG] [Thread-20806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:50:08.112 [DEBUG] [Thread-20806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:50:08.112 [DEBUG] [Thread-20806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:50:08.113 [DEBUG] [Thread-20806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:50:08.113 [DEBUG] [Thread-20806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:50:08.113 [DEBUG] [Thread-20806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:50:08.113 [DEBUG] [Thread-20806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:50:08.113 [DEBUG] [Thread-20806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:50:08.113 [DEBUG] [Thread-20806] [transport.py] [_log()] client lang: <none>
2026-04-15T14:50:08.113 [DEBUG] [Thread-20806] [transport.py] [_log()] server lang: <none>
2026-04-15T14:50:08.113 [DEBUG] [Thread-20806] [transport.py] [_log()] kex follows: False
2026-04-15T14:50:08.113 [DEBUG] [Thread-20806] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:50:08.113 [DEBUG] [Thread-20806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:50:08.113 [DEBUG] [Thread-20806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:50:08.113 [DEBUG] [Thread-20806] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:50:08.113 [DEBUG] [Thread-20806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:50:08.114 [DEBUG] [Thread-20806] [transport.py] [_log()] Compression: none
2026-04-15T14:50:08.114 [DEBUG] [Thread-20806] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:50:08.166 [DEBUG] [Thread-20806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:50:08.167 [DEBUG] [Thread-20806] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:50:08.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:50:08.169 [DEBUG] [Thread-20806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:50:08.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:50:08.223 [DEBUG] [Thread-20806] [transport.py] [_log()] userauth is OK
2026-04-15T14:50:08.224 [DEBUG] [Thread-20806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:50:08.224 [DEBUG] [Thread-20806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:50:08.224 [DEBUG] [Thread-20806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:50:08.224 [DEBUG] [Thread-20806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:50:08.251 [INFO] [Thread-20806] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:50:08.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:50:08.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:50:09.087 [DEBUG] [Thread-20806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:50:09.087 [DEBUG] [Thread-20806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:50:09.135 [DEBUG] [Thread-20806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:50:09.135 [DEBUG] [Thread-20806] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:50:09.144 [DEBUG] [Thread-20806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:50:09.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:50:09.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')
2026-04-15T14:50:09.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
2026-04-15T14:50:09.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:50:09.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:50:09.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:50:09.178 [DEBUG] [Thread-20806] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:50:13.537 [DEBUG] [Thread-20808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:50:28.580 [DEBUG] [Thread-20809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:50:29.214 [DEBUG] [Thread-20810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:50:39.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:50:39.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:50:39.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
2026-04-15T14:50:40.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 50, 30), 10.0093, 50.8191, 29.3, 14.4695, 14.3949, 0, 0, 0, 0, 0, 0),)
2026-04-15T14:50:40.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:50:30
2026-04-15T14:50:40.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:50:41.352 [DEBUG] [Thread-20811] [transport.py] [_log()] starting thread (client mode): 0xf13ca4d0
2026-04-15T14:50:41.352 [DEBUG] [Thread-20811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:50:41.372 [DEBUG] [Thread-20811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:50:41.372 [INFO] [Thread-20811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:50:41.375 [DEBUG] [Thread-20811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:50:41.375 [DEBUG] [Thread-20811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:50:41.375 [DEBUG] [Thread-20811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:50:41.375 [DEBUG] [Thread-20811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:50:41.376 [DEBUG] [Thread-20811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:50:41.376 [DEBUG] [Thread-20811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:50:41.376 [DEBUG] [Thread-20811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:50:41.376 [DEBUG] [Thread-20811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:50:41.376 [DEBUG] [Thread-20811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:50:41.376 [DEBUG] [Thread-20811] [transport.py] [_log()] client lang: <none>
2026-04-15T14:50:41.376 [DEBUG] [Thread-20811] [transport.py] [_log()] server lang: <none>
2026-04-15T14:50:41.376 [DEBUG] [Thread-20811] [transport.py] [_log()] kex follows: False
2026-04-15T14:50:41.376 [DEBUG] [Thread-20811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:50:41.376 [DEBUG] [Thread-20811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:50:41.376 [DEBUG] [Thread-20811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:50:41.377 [DEBUG] [Thread-20811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:50:41.377 [DEBUG] [Thread-20811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:50:41.377 [DEBUG] [Thread-20811] [transport.py] [_log()] Compression: none
2026-04-15T14:50:41.377 [DEBUG] [Thread-20811] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:50:41.393 [DEBUG] [Thread-20811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:50:41.393 [DEBUG] [Thread-20811] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:50:41.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:50:41.394 [DEBUG] [Thread-20811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:50:41.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:50:41.395 [DEBUG] [Thread-20811] [transport.py] [_log()] userauth is OK
2026-04-15T14:50:41.395 [DEBUG] [Thread-20811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:50:41.396 [DEBUG] [Thread-20811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:50:41.396 [DEBUG] [Thread-20811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:50:41.396 [DEBUG] [Thread-20811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:50:41.414 [INFO] [Thread-20811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:50:41.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:50:42.029 [DEBUG] [Thread-20811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:50:42.030 [DEBUG] [Thread-20811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:50:42.030 [DEBUG] [Thread-20811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:50:42.071 [DEBUG] [Thread-20811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:50:42.071 [DEBUG] [Thread-20811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:50:42.074 [DEBUG] [Thread-20811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:50:42.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:50:42.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:50:42.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:50:42.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:50:42.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:50:42.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:50:42.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:50:42.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:50:42.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:50:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.534859 -999.00  +14.50  21.08     57   +6.30 1 1 1 1 1   888    0 8.92 54.42 ----- 20.7 21.1 308.2 22.6 21.0 -26.8 20.1 -28.1 20.8 -22.9 22.0 -24.9
2026-04-15T14:50:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:50:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:50:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.534859
2026-04-15T14:50:42.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:50:42.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:50:42.099 [DEBUG] [Thread-20811] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:50:42.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:50:42.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:50:42.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:50:42.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:50:30', tmtdew=10.0093, humidity=50.8191, cloud=29.3, wind=14.4695, temperature=14.3949, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:50:11.818', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:50:42.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:50:42.373 [DEBUG] [Thread-20814] [transport.py] [_log()] starting thread (client mode): 0xee900e80
2026-04-15T14:50:42.373 [DEBUG] [Thread-20814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:50:42.387 [DEBUG] [Thread-20814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:50:42.387 [INFO] [Thread-20814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:50:42.395 [DEBUG] [Thread-20814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:50:42.395 [DEBUG] [Thread-20814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:50:42.395 [DEBUG] [Thread-20814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:50:42.395 [DEBUG] [Thread-20814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:50:42.395 [DEBUG] [Thread-20814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:50:42.395 [DEBUG] [Thread-20814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:50:42.395 [DEBUG] [Thread-20814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:50:42.395 [DEBUG] [Thread-20814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:50:42.395 [DEBUG] [Thread-20814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:50:42.395 [DEBUG] [Thread-20814] [transport.py] [_log()] client lang: <none>
2026-04-15T14:50:42.395 [DEBUG] [Thread-20814] [transport.py] [_log()] server lang: <none>
2026-04-15T14:50:42.395 [DEBUG] [Thread-20814] [transport.py] [_log()] kex follows: False
2026-04-15T14:50:42.395 [DEBUG] [Thread-20814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:50:42.396 [DEBUG] [Thread-20814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:50:42.396 [DEBUG] [Thread-20814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:50:42.396 [DEBUG] [Thread-20814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:50:42.396 [DEBUG] [Thread-20814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:50:42.396 [DEBUG] [Thread-20814] [transport.py] [_log()] Compression: none
2026-04-15T14:50:42.396 [DEBUG] [Thread-20814] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:50:42.450 [DEBUG] [Thread-20814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:50:42.450 [DEBUG] [Thread-20814] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:50:42.450 [DEBUG] [Thread-20814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:50:42.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:50:42.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:50:42.507 [DEBUG] [Thread-20814] [transport.py] [_log()] userauth is OK
2026-04-15T14:50:42.507 [DEBUG] [Thread-20814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:50:42.507 [DEBUG] [Thread-20814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:50:42.507 [DEBUG] [Thread-20814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:50:42.507 [DEBUG] [Thread-20814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:50:42.524 [INFO] [Thread-20814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:50:42.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:50:42.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:50:43.352 [DEBUG] [Thread-20814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:50:43.352 [DEBUG] [Thread-20814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:50:43.400 [DEBUG] [Thread-20814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:50:43.400 [DEBUG] [Thread-20814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:50:43.409 [DEBUG] [Thread-20814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:50:43.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:50: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')
2026-04-15T14:50: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
2026-04-15T14:50:43.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:50:43.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:50:43.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:50:43.447 [DEBUG] [Thread-20814] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:50:43.611 [DEBUG] [Thread-20816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:50:58.657 [DEBUG] [Thread-20817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:51:06.602 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:51:06.603 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:51:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:51:13.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:51: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
2026-04-15T14:51:13.688 [DEBUG] [Thread-20818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:51:14.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 51, 5), 10.0199, 50.786, 29.3, 14.2578, 14.4114, 0, 0, 0, 0, 0, 0),)
2026-04-15T14:51:14.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:51:05
2026-04-15T14:51:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:51:15.602 [DEBUG] [Thread-20819] [transport.py] [_log()] starting thread (client mode): 0xee906590
2026-04-15T14:51:15.602 [DEBUG] [Thread-20819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:51:15.625 [DEBUG] [Thread-20819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:51:15.626 [INFO] [Thread-20819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:51:15.627 [DEBUG] [Thread-20819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:51:15.627 [DEBUG] [Thread-20819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:51:15.627 [DEBUG] [Thread-20819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:51:15.627 [DEBUG] [Thread-20819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:51:15.627 [DEBUG] [Thread-20819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:51:15.628 [DEBUG] [Thread-20819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:51:15.628 [DEBUG] [Thread-20819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:51:15.628 [DEBUG] [Thread-20819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:51:15.628 [DEBUG] [Thread-20819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:51:15.628 [DEBUG] [Thread-20819] [transport.py] [_log()] client lang: <none>
2026-04-15T14:51:15.628 [DEBUG] [Thread-20819] [transport.py] [_log()] server lang: <none>
2026-04-15T14:51:15.628 [DEBUG] [Thread-20819] [transport.py] [_log()] kex follows: False
2026-04-15T14:51:15.628 [DEBUG] [Thread-20819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:51:15.628 [DEBUG] [Thread-20819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:51:15.628 [DEBUG] [Thread-20819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:51:15.628 [DEBUG] [Thread-20819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:51:15.628 [DEBUG] [Thread-20819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:51:15.629 [DEBUG] [Thread-20819] [transport.py] [_log()] Compression: none
2026-04-15T14:51:15.629 [DEBUG] [Thread-20819] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:51:15.637 [DEBUG] [Thread-20819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:51:15.638 [DEBUG] [Thread-20819] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:51:15.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:51:15.638 [DEBUG] [Thread-20819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:51:15.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:51:15.639 [DEBUG] [Thread-20819] [transport.py] [_log()] userauth is OK
2026-04-15T14:51:15.639 [DEBUG] [Thread-20819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:51:15.639 [DEBUG] [Thread-20819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:51:15.639 [DEBUG] [Thread-20819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:51:15.640 [DEBUG] [Thread-20819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:51:15.658 [INFO] [Thread-20819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:51:15.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:51:16.397 [DEBUG] [Thread-20819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:51:16.397 [DEBUG] [Thread-20819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:51:16.398 [DEBUG] [Thread-20819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:51:16.439 [DEBUG] [Thread-20819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:51:16.439 [DEBUG] [Thread-20819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:51:16.441 [DEBUG] [Thread-20819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:51:16.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:51:16.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:51:16.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:51:16.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:51:16.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:51:16.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:51:16.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:51:16.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:51:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:51:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.535206 -999.00  +14.00  11.92     58   +6.00 1 1 1 1 1   888    0 8.86 55.54 ----- 11.2 11.9 323.4 23.2 21.0 -28.0 20.0 -26.8 20.8 -24.6 22.0 -25.7
2026-04-15T14:51:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:51:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:51:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.535206
2026-04-15T14:51:16.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:51:16.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:51:16.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:51:16.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:51:16.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:51:16.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:51:05', tmtdew=10.0199, humidity=50.786, cloud=29.3, wind=14.2578, temperature=14.4114, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:50:41.798', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:51:16.460 [DEBUG] [Thread-20819] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:51:16.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:51:16.676 [DEBUG] [Thread-20822] [transport.py] [_log()] starting thread (client mode): 0xee9e5ea0
2026-04-15T14:51:16.676 [DEBUG] [Thread-20822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:51:16.692 [DEBUG] [Thread-20822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:51:16.692 [INFO] [Thread-20822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:51:16.700 [DEBUG] [Thread-20822] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:51:16.700 [DEBUG] [Thread-20822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:51:16.700 [DEBUG] [Thread-20822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:51:16.700 [DEBUG] [Thread-20822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:51:16.700 [DEBUG] [Thread-20822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:51:16.701 [DEBUG] [Thread-20822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:51:16.701 [DEBUG] [Thread-20822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:51:16.701 [DEBUG] [Thread-20822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:51:16.701 [DEBUG] [Thread-20822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:51:16.701 [DEBUG] [Thread-20822] [transport.py] [_log()] client lang: <none>
2026-04-15T14:51:16.701 [DEBUG] [Thread-20822] [transport.py] [_log()] server lang: <none>
2026-04-15T14:51:16.701 [DEBUG] [Thread-20822] [transport.py] [_log()] kex follows: False
2026-04-15T14:51:16.701 [DEBUG] [Thread-20822] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:51:16.701 [DEBUG] [Thread-20822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:51:16.701 [DEBUG] [Thread-20822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:51:16.701 [DEBUG] [Thread-20822] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:51:16.701 [DEBUG] [Thread-20822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:51:16.702 [DEBUG] [Thread-20822] [transport.py] [_log()] Compression: none
2026-04-15T14:51:16.702 [DEBUG] [Thread-20822] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:51:16.759 [DEBUG] [Thread-20822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:51:16.760 [DEBUG] [Thread-20822] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:51:16.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:51:16.760 [DEBUG] [Thread-20822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:51:16.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:51:16.815 [DEBUG] [Thread-20822] [transport.py] [_log()] userauth is OK
2026-04-15T14:51:16.815 [DEBUG] [Thread-20822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:51:16.815 [DEBUG] [Thread-20822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:51:16.816 [DEBUG] [Thread-20822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:51:16.816 [DEBUG] [Thread-20822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:51:16.844 [INFO] [Thread-20822] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:51:16.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:51:16.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:51:17.688 [DEBUG] [Thread-20822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:51:17.689 [DEBUG] [Thread-20822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:51:17.736 [DEBUG] [Thread-20822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:51:17.736 [DEBUG] [Thread-20822] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:51:17.745 [DEBUG] [Thread-20822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:51:17.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:51:17.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')
2026-04-15T14:51:17.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
2026-04-15T14:51:17.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:51:17.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:51:17.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:51:17.783 [DEBUG] [Thread-20822] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:51:28.720 [DEBUG] [Thread-20824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:51:29.305 [DEBUG] [Thread-20825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:51:43.764 [DEBUG] [Thread-20826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:51:47.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:51:47.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:51:47.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:51:49.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 51, 40), 9.85813, 51.6656, 29.3, 16.4794, 15.0542, 0, 0, 0, 0, 0, 0),)
2026-04-15T14:51:49.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:51:40
2026-04-15T14:51:49.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:51:49.937 [DEBUG] [Thread-20827] [transport.py] [_log()] starting thread (client mode): 0xee9067a0
2026-04-15T14:51:49.937 [DEBUG] [Thread-20827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:51:49.957 [DEBUG] [Thread-20827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:51:49.957 [INFO] [Thread-20827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:51:49.960 [DEBUG] [Thread-20827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:51:49.960 [DEBUG] [Thread-20827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:51:49.960 [DEBUG] [Thread-20827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:51:49.960 [DEBUG] [Thread-20827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:51:49.960 [DEBUG] [Thread-20827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:51:49.961 [DEBUG] [Thread-20827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:51:49.961 [DEBUG] [Thread-20827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:51:49.961 [DEBUG] [Thread-20827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:51:49.961 [DEBUG] [Thread-20827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:51:49.961 [DEBUG] [Thread-20827] [transport.py] [_log()] client lang: <none>
2026-04-15T14:51:49.961 [DEBUG] [Thread-20827] [transport.py] [_log()] server lang: <none>
2026-04-15T14:51:49.961 [DEBUG] [Thread-20827] [transport.py] [_log()] kex follows: False
2026-04-15T14:51:49.961 [DEBUG] [Thread-20827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:51:49.961 [DEBUG] [Thread-20827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:51:49.961 [DEBUG] [Thread-20827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:51:49.961 [DEBUG] [Thread-20827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:51:49.962 [DEBUG] [Thread-20827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:51:49.962 [DEBUG] [Thread-20827] [transport.py] [_log()] Compression: none
2026-04-15T14:51:49.962 [DEBUG] [Thread-20827] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:51:49.978 [DEBUG] [Thread-20827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:51:49.979 [DEBUG] [Thread-20827] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:51:49.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:51:49.979 [DEBUG] [Thread-20827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:51:49.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:51:49.980 [DEBUG] [Thread-20827] [transport.py] [_log()] userauth is OK
2026-04-15T14:51:49.980 [DEBUG] [Thread-20827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:51:49.980 [DEBUG] [Thread-20827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:51:49.980 [DEBUG] [Thread-20827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:51:49.980 [DEBUG] [Thread-20827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:51:49.997 [INFO] [Thread-20827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:51:49.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:51:50.771 [DEBUG] [Thread-20827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:51:50.771 [DEBUG] [Thread-20827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:51:50.771 [DEBUG] [Thread-20827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:51:50.812 [DEBUG] [Thread-20827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:51:50.812 [DEBUG] [Thread-20827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:51:50.814 [DEBUG] [Thread-20827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:51:50.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:51:50.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:51:50.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:51:50.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:51:50.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:51:50.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:51:50.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:51:50.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:51:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:51:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.535553 -999.00  +14.00   9.27     59   +6.10 1 1 1 1 1   888    0 8.90 54.36 ----- 15.2 9.3 323.0 13.0 21.1 -27.7 20.1 -26.9 20.9 -24.1 22.1 -25.5
2026-04-15T14:51:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:51:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:51:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.535553
2026-04-15T14:51:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:51:50.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:51:50.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:51:50.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:51:50.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:51:50.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:51:40', tmtdew=9.85813, humidity=51.6656, cloud=29.3, wind=16.4794, temperature=15.0542, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:51:11.779', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:51:50.837 [DEBUG] [Thread-20827] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:51:51.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:51:51.095 [DEBUG] [Thread-20830] [transport.py] [_log()] starting thread (client mode): 0xee905ba0
2026-04-15T14:51:51.095 [DEBUG] [Thread-20830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:51:51.111 [DEBUG] [Thread-20830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:51:51.112 [INFO] [Thread-20830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:51:51.120 [DEBUG] [Thread-20830] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:51:51.120 [DEBUG] [Thread-20830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:51:51.120 [DEBUG] [Thread-20830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:51:51.120 [DEBUG] [Thread-20830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:51:51.120 [DEBUG] [Thread-20830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:51:51.120 [DEBUG] [Thread-20830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:51:51.120 [DEBUG] [Thread-20830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:51:51.120 [DEBUG] [Thread-20830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:51:51.120 [DEBUG] [Thread-20830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:51:51.120 [DEBUG] [Thread-20830] [transport.py] [_log()] client lang: <none>
2026-04-15T14:51:51.120 [DEBUG] [Thread-20830] [transport.py] [_log()] server lang: <none>
2026-04-15T14:51:51.121 [DEBUG] [Thread-20830] [transport.py] [_log()] kex follows: False
2026-04-15T14:51:51.121 [DEBUG] [Thread-20830] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:51:51.121 [DEBUG] [Thread-20830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:51:51.121 [DEBUG] [Thread-20830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:51:51.121 [DEBUG] [Thread-20830] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:51:51.121 [DEBUG] [Thread-20830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:51:51.121 [DEBUG] [Thread-20830] [transport.py] [_log()] Compression: none
2026-04-15T14:51:51.121 [DEBUG] [Thread-20830] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:51:51.137 [DEBUG] [Thread-20830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:51:51.137 [DEBUG] [Thread-20830] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:51:51.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:51:51.138 [DEBUG] [Thread-20830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:51:51.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:51:51.195 [DEBUG] [Thread-20830] [transport.py] [_log()] userauth is OK
2026-04-15T14:51:51.195 [DEBUG] [Thread-20830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:51:51.195 [DEBUG] [Thread-20830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:51:51.195 [DEBUG] [Thread-20830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:51:51.196 [DEBUG] [Thread-20830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:51:51.218 [INFO] [Thread-20830] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:51:51.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:51:51.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:51:52.034 [DEBUG] [Thread-20830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:51:52.034 [DEBUG] [Thread-20830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:51:52.082 [DEBUG] [Thread-20830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:51:52.082 [DEBUG] [Thread-20830] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:51:52.091 [DEBUG] [Thread-20830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:51:52.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:51:52.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')
2026-04-15T14:51:52.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
2026-04-15T14:51:52.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:51:52.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:51:52.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:51:52.131 [DEBUG] [Thread-20830] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:51:58.797 [DEBUG] [Thread-20832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:52:06.747 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:52:06.748 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:52:13.839 [DEBUG] [Thread-20833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:52:22.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:52:22.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:52:22.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
2026-04-15T14:52:23.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 52, 16), 9.70529, 52.2197, 29.3, 19.7615, 14.5268, 0, 0, 0, 0, 0, 0),)
2026-04-15T14:52:23.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:52:16
2026-04-15T14:52:23.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:52:24.278 [DEBUG] [Thread-20834] [transport.py] [_log()] starting thread (client mode): 0xf13cbc70
2026-04-15T14:52:24.278 [DEBUG] [Thread-20834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:52:24.297 [DEBUG] [Thread-20834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:52:24.297 [INFO] [Thread-20834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:52:24.300 [DEBUG] [Thread-20834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:52:24.300 [DEBUG] [Thread-20834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:52:24.301 [DEBUG] [Thread-20834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:52:24.301 [DEBUG] [Thread-20834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:52:24.301 [DEBUG] [Thread-20834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:52:24.301 [DEBUG] [Thread-20834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:52:24.301 [DEBUG] [Thread-20834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:52:24.301 [DEBUG] [Thread-20834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:52:24.301 [DEBUG] [Thread-20834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:52:24.301 [DEBUG] [Thread-20834] [transport.py] [_log()] client lang: <none>
2026-04-15T14:52:24.301 [DEBUG] [Thread-20834] [transport.py] [_log()] server lang: <none>
2026-04-15T14:52:24.301 [DEBUG] [Thread-20834] [transport.py] [_log()] kex follows: False
2026-04-15T14:52:24.301 [DEBUG] [Thread-20834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:52:24.302 [DEBUG] [Thread-20834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:52:24.302 [DEBUG] [Thread-20834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:52:24.302 [DEBUG] [Thread-20834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:52:24.302 [DEBUG] [Thread-20834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:52:24.302 [DEBUG] [Thread-20834] [transport.py] [_log()] Compression: none
2026-04-15T14:52:24.302 [DEBUG] [Thread-20834] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:52:24.318 [DEBUG] [Thread-20834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:52:24.318 [DEBUG] [Thread-20834] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:52:24.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:52:24.319 [DEBUG] [Thread-20834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:52:24.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:52:24.320 [DEBUG] [Thread-20834] [transport.py] [_log()] userauth is OK
2026-04-15T14:52:24.320 [DEBUG] [Thread-20834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:52:24.320 [DEBUG] [Thread-20834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:52:24.320 [DEBUG] [Thread-20834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:52:24.320 [DEBUG] [Thread-20834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:52:24.341 [INFO] [Thread-20834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:52:24.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:52:25.104 [DEBUG] [Thread-20834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:52:25.105 [DEBUG] [Thread-20834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:52:25.105 [DEBUG] [Thread-20834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:52:25.145 [DEBUG] [Thread-20834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:52:25.146 [DEBUG] [Thread-20834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:52:25.148 [DEBUG] [Thread-20834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:52:25.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:52:25.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:52:25.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:52:25.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:52:25.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:52:25.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:52:25.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:52:25.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:52:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:52:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.535900 -999.00  +13.90  22.46     59   +6.10 1 1 1 1 1   888    0 8.86 52.89 ----- 19.9 22.5 311.2 26.6 21.1 -27.9 20.0 -27.9 20.9 -24.9 22.1 -25.6
2026-04-15T14:52:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:52:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:52:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.535900
2026-04-15T14:52:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:52:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:52:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:52:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:52:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:52:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:52:16', tmtdew=9.70529, humidity=52.2197, cloud=29.3, wind=19.7615, temperature=14.5268, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:51:41.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:52:25.166 [DEBUG] [Thread-20834] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:52:25.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:52:25.375 [DEBUG] [Thread-20837] [transport.py] [_log()] starting thread (client mode): 0xf13cbb80
2026-04-15T14:52:25.375 [DEBUG] [Thread-20837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:52:25.390 [DEBUG] [Thread-20837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:52:25.390 [INFO] [Thread-20837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:52:25.397 [DEBUG] [Thread-20837] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:52:25.397 [DEBUG] [Thread-20837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:52:25.398 [DEBUG] [Thread-20837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:52:25.398 [DEBUG] [Thread-20837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:52:25.398 [DEBUG] [Thread-20837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:52:25.398 [DEBUG] [Thread-20837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:52:25.398 [DEBUG] [Thread-20837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:52:25.398 [DEBUG] [Thread-20837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:52:25.398 [DEBUG] [Thread-20837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:52:25.398 [DEBUG] [Thread-20837] [transport.py] [_log()] client lang: <none>
2026-04-15T14:52:25.398 [DEBUG] [Thread-20837] [transport.py] [_log()] server lang: <none>
2026-04-15T14:52:25.398 [DEBUG] [Thread-20837] [transport.py] [_log()] kex follows: False
2026-04-15T14:52:25.398 [DEBUG] [Thread-20837] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:52:25.398 [DEBUG] [Thread-20837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:52:25.399 [DEBUG] [Thread-20837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:52:25.399 [DEBUG] [Thread-20837] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:52:25.399 [DEBUG] [Thread-20837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:52:25.399 [DEBUG] [Thread-20837] [transport.py] [_log()] Compression: none
2026-04-15T14:52:25.399 [DEBUG] [Thread-20837] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:52:25.455 [DEBUG] [Thread-20837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:52:25.456 [DEBUG] [Thread-20837] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:52:25.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:52:25.457 [DEBUG] [Thread-20837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:52:25.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:52:25.515 [DEBUG] [Thread-20837] [transport.py] [_log()] userauth is OK
2026-04-15T14:52:25.515 [DEBUG] [Thread-20837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:52:25.516 [DEBUG] [Thread-20837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:52:25.516 [DEBUG] [Thread-20837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:52:25.516 [DEBUG] [Thread-20837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:52:25.541 [INFO] [Thread-20837] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:52:25.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:52:25.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:52:26.413 [DEBUG] [Thread-20837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:52:26.413 [DEBUG] [Thread-20837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:52:26.461 [DEBUG] [Thread-20837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:52:26.462 [DEBUG] [Thread-20837] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:52:26.470 [DEBUG] [Thread-20837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:52:26.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:52:26.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')
2026-04-15T14:52:26.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
2026-04-15T14:52:26.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:52:26.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:52:26.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:52:26.510 [DEBUG] [Thread-20837] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:52:28.870 [DEBUG] [Thread-20839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:52:29.382 [DEBUG] [Thread-20840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:52:43.913 [DEBUG] [Thread-20841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:52:56.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:52:56.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:52:56.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
2026-04-15T14:52:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 52, 16), 9.70529, 52.2197, 29.3, 19.7615, 14.5268, 0, 0, 0, 0, 0, 0),)
2026-04-15T14:52:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:52:16
2026-04-15T14:52:58.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:52:58.685 [DEBUG] [Thread-20842] [transport.py] [_log()] starting thread (client mode): 0xf13673a0
2026-04-15T14:52:58.685 [DEBUG] [Thread-20842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:52:58.706 [DEBUG] [Thread-20842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:52:58.706 [INFO] [Thread-20842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:52:58.709 [DEBUG] [Thread-20842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:52:58.709 [DEBUG] [Thread-20842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:52:58.709 [DEBUG] [Thread-20842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:52:58.709 [DEBUG] [Thread-20842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:52:58.710 [DEBUG] [Thread-20842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:52:58.710 [DEBUG] [Thread-20842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:52:58.710 [DEBUG] [Thread-20842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:52:58.710 [DEBUG] [Thread-20842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:52:58.710 [DEBUG] [Thread-20842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:52:58.710 [DEBUG] [Thread-20842] [transport.py] [_log()] client lang: <none>
2026-04-15T14:52:58.710 [DEBUG] [Thread-20842] [transport.py] [_log()] server lang: <none>
2026-04-15T14:52:58.710 [DEBUG] [Thread-20842] [transport.py] [_log()] kex follows: False
2026-04-15T14:52:58.710 [DEBUG] [Thread-20842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:52:58.710 [DEBUG] [Thread-20842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:52:58.710 [DEBUG] [Thread-20842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:52:58.710 [DEBUG] [Thread-20842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:52:58.711 [DEBUG] [Thread-20842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:52:58.711 [DEBUG] [Thread-20842] [transport.py] [_log()] Compression: none
2026-04-15T14:52:58.711 [DEBUG] [Thread-20842] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:52:58.728 [DEBUG] [Thread-20842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:52:58.728 [DEBUG] [Thread-20842] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:52:58.728 [DEBUG] [Thread-20842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:52:58.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:52:58.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:52:58.730 [DEBUG] [Thread-20842] [transport.py] [_log()] userauth is OK
2026-04-15T14:52:58.730 [DEBUG] [Thread-20842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:52:58.730 [DEBUG] [Thread-20842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:52:58.730 [DEBUG] [Thread-20842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:52:58.730 [DEBUG] [Thread-20842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:52:58.748 [INFO] [Thread-20842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:52:58.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:52:58.945 [DEBUG] [Thread-20844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:52:59.567 [DEBUG] [Thread-20842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:52:59.567 [DEBUG] [Thread-20842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:52:59.568 [DEBUG] [Thread-20842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:52:59.608 [DEBUG] [Thread-20842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:52:59.608 [DEBUG] [Thread-20842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:52:59.611 [DEBUG] [Thread-20842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:52:59.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:52:59.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:52:59.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:52:59.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:52:59.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:52:59.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:52:59.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:52:59.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:52:59.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:52:59.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.536248 -999.00  +14.00  13.54     60   +6.30 1 1 1 1 1   888    0 9.01 54.22 ----- 15.5 13.5 310.0 23.3 21.0 -28.0 20.0 -26.8 20.7 -25.3 22.0 -26.0
2026-04-15T14:52:59.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:52:59.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:52:59.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.536248
2026-04-15T14:52:59.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:52:59.636 [DEBUG] [Thread-20842] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:52:59.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:52:59.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:52:59.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:52:59.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:52:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:52:16', tmtdew=9.70529, humidity=52.2197, cloud=29.3, wind=19.7615, temperature=14.5268, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:52:11.827', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:52:59.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:53:06.885 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:53:06.887 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:53:13.977 [DEBUG] [Thread-20846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:53:29.021 [DEBUG] [Thread-20847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:53:29.471 [DEBUG] [Thread-20848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:53:44.051 [DEBUG] [Thread-20849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:53:59.080 [DEBUG] [Thread-20850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:54:07.027 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:54:07.028 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:54:14.110 [DEBUG] [Thread-20851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:54:29.143 [DEBUG] [Thread-20852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:54:29.556 [DEBUG] [Thread-20853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:54:44.174 [DEBUG] [Thread-20854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:54:59.207 [DEBUG] [Thread-20855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:55:07.169 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:55:07.170 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:55:12.522 [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
2026-04-15T14:55:14.238 [DEBUG] [Thread-20856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:55:29.271 [DEBUG] [Thread-20857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:55:29.631 [DEBUG] [Thread-20858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:55:42.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:55:42.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:55:42.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
2026-04-15T14:55:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 55, 14), 9.61932, 52.5011, 0.0, 18.2092, 14.3436, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:55:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:55:14
2026-04-15T14:55:44.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:55:44.303 [DEBUG] [Thread-20859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:55:44.721 [DEBUG] [Thread-20860] [transport.py] [_log()] starting thread (client mode): 0xee98ec80
2026-04-15T14:55:44.721 [DEBUG] [Thread-20860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:55:44.741 [DEBUG] [Thread-20860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:55:44.741 [INFO] [Thread-20860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:55:44.744 [DEBUG] [Thread-20860] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:55:44.744 [DEBUG] [Thread-20860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:55:44.744 [DEBUG] [Thread-20860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:55:44.744 [DEBUG] [Thread-20860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:55:44.744 [DEBUG] [Thread-20860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:55:44.744 [DEBUG] [Thread-20860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:55:44.744 [DEBUG] [Thread-20860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:55:44.745 [DEBUG] [Thread-20860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:55:44.745 [DEBUG] [Thread-20860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:55:44.745 [DEBUG] [Thread-20860] [transport.py] [_log()] client lang: <none>
2026-04-15T14:55:44.745 [DEBUG] [Thread-20860] [transport.py] [_log()] server lang: <none>
2026-04-15T14:55:44.745 [DEBUG] [Thread-20860] [transport.py] [_log()] kex follows: False
2026-04-15T14:55:44.745 [DEBUG] [Thread-20860] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:55:44.745 [DEBUG] [Thread-20860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:55:44.745 [DEBUG] [Thread-20860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:55:44.745 [DEBUG] [Thread-20860] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:55:44.745 [DEBUG] [Thread-20860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:55:44.745 [DEBUG] [Thread-20860] [transport.py] [_log()] Compression: none
2026-04-15T14:55:44.746 [DEBUG] [Thread-20860] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:55:44.762 [DEBUG] [Thread-20860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:55:44.763 [DEBUG] [Thread-20860] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:55:44.763 [DEBUG] [Thread-20860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:55:44.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:55:44.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:55:44.806 [DEBUG] [Thread-20860] [transport.py] [_log()] userauth is OK
2026-04-15T14:55:44.807 [DEBUG] [Thread-20860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:55:44.807 [DEBUG] [Thread-20860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:55:44.807 [DEBUG] [Thread-20860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:55:44.807 [DEBUG] [Thread-20860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:55:44.843 [INFO] [Thread-20860] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:55:44.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:55:45.438 [DEBUG] [Thread-20860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:55:45.438 [DEBUG] [Thread-20860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:55:45.438 [DEBUG] [Thread-20860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:55:45.479 [DEBUG] [Thread-20860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:55:45.479 [DEBUG] [Thread-20860] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:55:45.482 [DEBUG] [Thread-20860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:55:45.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:55:45.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:55:45.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:55:45.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:55:45.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:55:45.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:55:45.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:55:45.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:55:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:55:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.538331 -999.00  +15.10  17.19     61   +7.60 1 1 1 1 1   888    0 8.76 48.43 ----- 24.5 17.2 325.5 22.4 21.2 -27.0 20.2 -26.6 21.0 -23.4 22.2 -24.9
2026-04-15T14:55:45.505 [DEBUG] [Thread-20860] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:55:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:55:45.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:55:45.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.538331
2026-04-15T14:55:45.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:55:45.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:55:45.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:55:45.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:55:45.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:55:45.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:55:14', tmtdew=9.61932, humidity=52.5011, cloud=0.0, wind=18.2092, temperature=14.3436, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:55:11.798', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:55:45.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:55:45.764 [DEBUG] [Thread-20863] [transport.py] [_log()] starting thread (client mode): 0xee9e7790
2026-04-15T14:55:45.764 [DEBUG] [Thread-20863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:55:45.778 [DEBUG] [Thread-20863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:55:45.778 [INFO] [Thread-20863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:55:45.785 [DEBUG] [Thread-20863] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:55:45.785 [DEBUG] [Thread-20863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:55:45.785 [DEBUG] [Thread-20863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:55:45.785 [DEBUG] [Thread-20863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:55:45.786 [DEBUG] [Thread-20863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:55:45.786 [DEBUG] [Thread-20863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:55:45.786 [DEBUG] [Thread-20863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:55:45.786 [DEBUG] [Thread-20863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:55:45.786 [DEBUG] [Thread-20863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:55:45.786 [DEBUG] [Thread-20863] [transport.py] [_log()] client lang: <none>
2026-04-15T14:55:45.786 [DEBUG] [Thread-20863] [transport.py] [_log()] server lang: <none>
2026-04-15T14:55:45.786 [DEBUG] [Thread-20863] [transport.py] [_log()] kex follows: False
2026-04-15T14:55:45.786 [DEBUG] [Thread-20863] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:55:45.786 [DEBUG] [Thread-20863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:55:45.786 [DEBUG] [Thread-20863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:55:45.786 [DEBUG] [Thread-20863] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:55:45.787 [DEBUG] [Thread-20863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:55:45.787 [DEBUG] [Thread-20863] [transport.py] [_log()] Compression: none
2026-04-15T14:55:45.787 [DEBUG] [Thread-20863] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:55:45.846 [DEBUG] [Thread-20863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:55:45.846 [DEBUG] [Thread-20863] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:55:45.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:55:45.847 [DEBUG] [Thread-20863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:55:45.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:55:45.907 [DEBUG] [Thread-20863] [transport.py] [_log()] userauth is OK
2026-04-15T14:55:45.907 [DEBUG] [Thread-20863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:55:45.908 [DEBUG] [Thread-20863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:55:45.908 [DEBUG] [Thread-20863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:55:45.908 [DEBUG] [Thread-20863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:55:45.936 [INFO] [Thread-20863] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:55:45.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:55:45.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:55:46.778 [DEBUG] [Thread-20863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:55:46.778 [DEBUG] [Thread-20863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:55:46.826 [DEBUG] [Thread-20863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:55:46.826 [DEBUG] [Thread-20863] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:55:46.835 [DEBUG] [Thread-20863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:55:46.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:55: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')
2026-04-15T14:55: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') -> 00000000
2026-04-15T14:55:46.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:55:46.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:55:46.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:55:46.872 [DEBUG] [Thread-20863] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:55:59.334 [DEBUG] [Thread-20865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:56:07.311 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:56:07.313 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:56:14.380 [DEBUG] [Thread-20866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:56:16.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:56:16.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:56:16.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
2026-04-15T14:56:18.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 55, 50), 9.73637, 52.0959, 0.0, 19.4782, 15.0204, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:56:18.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:55:50
2026-04-15T14:56:18.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:56:19.076 [DEBUG] [Thread-20867] [transport.py] [_log()] starting thread (client mode): 0xf1365bd0
2026-04-15T14:56:19.076 [DEBUG] [Thread-20867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:56:19.097 [DEBUG] [Thread-20867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:56:19.097 [INFO] [Thread-20867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:56:19.100 [DEBUG] [Thread-20867] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:56:19.100 [DEBUG] [Thread-20867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:56:19.100 [DEBUG] [Thread-20867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:56:19.100 [DEBUG] [Thread-20867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:56:19.100 [DEBUG] [Thread-20867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:56:19.100 [DEBUG] [Thread-20867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:56:19.100 [DEBUG] [Thread-20867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:56:19.101 [DEBUG] [Thread-20867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:56:19.101 [DEBUG] [Thread-20867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:56:19.101 [DEBUG] [Thread-20867] [transport.py] [_log()] client lang: <none>
2026-04-15T14:56:19.101 [DEBUG] [Thread-20867] [transport.py] [_log()] server lang: <none>
2026-04-15T14:56:19.101 [DEBUG] [Thread-20867] [transport.py] [_log()] kex follows: False
2026-04-15T14:56:19.101 [DEBUG] [Thread-20867] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:56:19.101 [DEBUG] [Thread-20867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:56:19.101 [DEBUG] [Thread-20867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:56:19.101 [DEBUG] [Thread-20867] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:56:19.101 [DEBUG] [Thread-20867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:56:19.101 [DEBUG] [Thread-20867] [transport.py] [_log()] Compression: none
2026-04-15T14:56:19.102 [DEBUG] [Thread-20867] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:56:19.118 [DEBUG] [Thread-20867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:56:19.119 [DEBUG] [Thread-20867] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:56:19.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:56:19.119 [DEBUG] [Thread-20867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:56:19.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:56:19.120 [DEBUG] [Thread-20867] [transport.py] [_log()] userauth is OK
2026-04-15T14:56:19.121 [DEBUG] [Thread-20867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:56:19.121 [DEBUG] [Thread-20867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:56:19.121 [DEBUG] [Thread-20867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:56:19.121 [DEBUG] [Thread-20867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:56:19.145 [INFO] [Thread-20867] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:56:19.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:56:19.916 [DEBUG] [Thread-20867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:56:19.917 [DEBUG] [Thread-20867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:56:19.917 [DEBUG] [Thread-20867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:56:19.957 [DEBUG] [Thread-20867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:56:19.958 [DEBUG] [Thread-20867] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:56:19.959 [DEBUG] [Thread-20867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:56:19.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:56:19.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:56:19.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:56:19.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:56:19.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:56:19.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:56:19.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:56:19.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:56:19.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:56:19.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.538679 -999.00  +14.60  15.36     59   +6.80 1 1 1 1 1   888    0 8.87 48.20 ----- 22.6 15.4 326.5 28.3 21.2 -28.8 20.1 -27.9 20.9 -24.4 22.2 -26.3
2026-04-15T14:56:19.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:56:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:56:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.538679
2026-04-15T14:56:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:56:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:56:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:56:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:56:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:56:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:55:50', tmtdew=9.73637, humidity=52.0959, cloud=0.0, wind=19.4782, temperature=15.0204, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:55:41.866', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:56:19.977 [DEBUG] [Thread-20867] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:56:20.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:56:20.191 [DEBUG] [Thread-20870] [transport.py] [_log()] starting thread (client mode): 0xee98e350
2026-04-15T14:56:20.191 [DEBUG] [Thread-20870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:56:20.205 [DEBUG] [Thread-20870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:56:20.206 [INFO] [Thread-20870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:56:20.213 [DEBUG] [Thread-20870] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:56:20.213 [DEBUG] [Thread-20870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:56:20.213 [DEBUG] [Thread-20870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:56:20.213 [DEBUG] [Thread-20870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:56:20.213 [DEBUG] [Thread-20870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:56:20.213 [DEBUG] [Thread-20870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:56:20.213 [DEBUG] [Thread-20870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:56:20.214 [DEBUG] [Thread-20870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:56:20.214 [DEBUG] [Thread-20870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:56:20.214 [DEBUG] [Thread-20870] [transport.py] [_log()] client lang: <none>
2026-04-15T14:56:20.214 [DEBUG] [Thread-20870] [transport.py] [_log()] server lang: <none>
2026-04-15T14:56:20.214 [DEBUG] [Thread-20870] [transport.py] [_log()] kex follows: False
2026-04-15T14:56:20.214 [DEBUG] [Thread-20870] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:56:20.214 [DEBUG] [Thread-20870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:56:20.214 [DEBUG] [Thread-20870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:56:20.214 [DEBUG] [Thread-20870] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:56:20.214 [DEBUG] [Thread-20870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:56:20.214 [DEBUG] [Thread-20870] [transport.py] [_log()] Compression: none
2026-04-15T14:56:20.215 [DEBUG] [Thread-20870] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:56:20.270 [DEBUG] [Thread-20870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:56:20.271 [DEBUG] [Thread-20870] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:56:20.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:56:20.271 [DEBUG] [Thread-20870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:56:20.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:56:20.327 [DEBUG] [Thread-20870] [transport.py] [_log()] userauth is OK
2026-04-15T14:56:20.327 [DEBUG] [Thread-20870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:56:20.327 [DEBUG] [Thread-20870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:56:20.328 [DEBUG] [Thread-20870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:56:20.328 [DEBUG] [Thread-20870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:56:20.353 [INFO] [Thread-20870] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:56:20.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:56:20.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:56:21.186 [DEBUG] [Thread-20870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:56:21.187 [DEBUG] [Thread-20870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:56:21.234 [DEBUG] [Thread-20870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:56:21.234 [DEBUG] [Thread-20870] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:56:21.243 [DEBUG] [Thread-20870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:56:21.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:56:21.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')
2026-04-15T14:56:21.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
2026-04-15T14:56:21.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:56:21.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:56:21.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:56:21.277 [DEBUG] [Thread-20870] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:56:29.412 [DEBUG] [Thread-20872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:56:29.706 [DEBUG] [Thread-20873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:56:44.455 [DEBUG] [Thread-20874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:56:51.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:56:51.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:56:51.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T14:56:52.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 56, 25), 9.238, 54.0451, 0.0, 20.362, 14.5431, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:56:52.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:56:25
2026-04-15T14:56:52.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:56:53.447 [DEBUG] [Thread-20875] [transport.py] [_log()] starting thread (client mode): 0xee9058a0
2026-04-15T14:56:53.448 [DEBUG] [Thread-20875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:56:53.466 [DEBUG] [Thread-20875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:56:53.467 [INFO] [Thread-20875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:56:53.469 [DEBUG] [Thread-20875] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:56:53.470 [DEBUG] [Thread-20875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:56:53.470 [DEBUG] [Thread-20875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:56:53.470 [DEBUG] [Thread-20875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:56:53.470 [DEBUG] [Thread-20875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:56:53.470 [DEBUG] [Thread-20875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:56:53.470 [DEBUG] [Thread-20875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:56:53.470 [DEBUG] [Thread-20875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:56:53.470 [DEBUG] [Thread-20875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:56:53.470 [DEBUG] [Thread-20875] [transport.py] [_log()] client lang: <none>
2026-04-15T14:56:53.471 [DEBUG] [Thread-20875] [transport.py] [_log()] server lang: <none>
2026-04-15T14:56:53.471 [DEBUG] [Thread-20875] [transport.py] [_log()] kex follows: False
2026-04-15T14:56:53.471 [DEBUG] [Thread-20875] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:56:53.471 [DEBUG] [Thread-20875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:56:53.471 [DEBUG] [Thread-20875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:56:53.471 [DEBUG] [Thread-20875] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:56:53.471 [DEBUG] [Thread-20875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:56:53.471 [DEBUG] [Thread-20875] [transport.py] [_log()] Compression: none
2026-04-15T14:56:53.471 [DEBUG] [Thread-20875] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:56:53.489 [DEBUG] [Thread-20875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:56:53.489 [DEBUG] [Thread-20875] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:56:53.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:56:53.490 [DEBUG] [Thread-20875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:56:53.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:56:53.491 [DEBUG] [Thread-20875] [transport.py] [_log()] userauth is OK
2026-04-15T14:56:53.491 [DEBUG] [Thread-20875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:56:53.491 [DEBUG] [Thread-20875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:56:53.492 [DEBUG] [Thread-20875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:56:53.492 [DEBUG] [Thread-20875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:56:53.510 [INFO] [Thread-20875] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:56:53.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:56:54.300 [DEBUG] [Thread-20875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:56:54.300 [DEBUG] [Thread-20875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:56:54.301 [DEBUG] [Thread-20875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:56:54.341 [DEBUG] [Thread-20875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:56:54.341 [DEBUG] [Thread-20875] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:56:54.344 [DEBUG] [Thread-20875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:56:54.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:56:54.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:56:54.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:56:54.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:56:54.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:56:54.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:56:54.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:56:54.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:56:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:56:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.539026 -999.00  +14.30  22.98     58   +6.20 1 1 1 1 1   888    0 8.93 48.91 ----- 21.5 23.0 312.4 29.3 21.2 -28.1 20.1 -29.1 21.0 -24.0 22.2 -25.9
2026-04-15T14:56:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:56:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:56:54.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.539026
2026-04-15T14:56:54.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:56:54.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:56:54.369 [DEBUG] [Thread-20875] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:56:54.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:56:54.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:56:54.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:56:54.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:56:25', tmtdew=9.238, humidity=54.0451, cloud=0.0, wind=20.362, temperature=14.5431, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:56:11.846', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:56:54.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:56:54.622 [DEBUG] [Thread-20878] [transport.py] [_log()] starting thread (client mode): 0xf1366e60
2026-04-15T14:56:54.622 [DEBUG] [Thread-20878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:56:54.636 [DEBUG] [Thread-20878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:56:54.637 [INFO] [Thread-20878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:56:54.644 [DEBUG] [Thread-20878] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:56:54.644 [DEBUG] [Thread-20878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:56:54.644 [DEBUG] [Thread-20878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:56:54.644 [DEBUG] [Thread-20878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:56:54.644 [DEBUG] [Thread-20878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:56:54.644 [DEBUG] [Thread-20878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:56:54.645 [DEBUG] [Thread-20878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:56:54.645 [DEBUG] [Thread-20878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:56:54.645 [DEBUG] [Thread-20878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:56:54.645 [DEBUG] [Thread-20878] [transport.py] [_log()] client lang: <none>
2026-04-15T14:56:54.645 [DEBUG] [Thread-20878] [transport.py] [_log()] server lang: <none>
2026-04-15T14:56:54.645 [DEBUG] [Thread-20878] [transport.py] [_log()] kex follows: False
2026-04-15T14:56:54.645 [DEBUG] [Thread-20878] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:56:54.645 [DEBUG] [Thread-20878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:56:54.645 [DEBUG] [Thread-20878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:56:54.645 [DEBUG] [Thread-20878] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:56:54.646 [DEBUG] [Thread-20878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:56:54.646 [DEBUG] [Thread-20878] [transport.py] [_log()] Compression: none
2026-04-15T14:56:54.646 [DEBUG] [Thread-20878] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:56:54.702 [DEBUG] [Thread-20878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:56:54.703 [DEBUG] [Thread-20878] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:56:54.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:56:54.703 [DEBUG] [Thread-20878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:56:54.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:56:54.759 [DEBUG] [Thread-20878] [transport.py] [_log()] userauth is OK
2026-04-15T14:56:54.759 [DEBUG] [Thread-20878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:56:54.759 [DEBUG] [Thread-20878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:56:54.760 [DEBUG] [Thread-20878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:56:54.760 [DEBUG] [Thread-20878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:56:54.785 [INFO] [Thread-20878] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:56:54.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:56:54.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:56:55.623 [DEBUG] [Thread-20878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:56:55.623 [DEBUG] [Thread-20878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:56:55.670 [DEBUG] [Thread-20878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:56:55.671 [DEBUG] [Thread-20878] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:56:55.679 [DEBUG] [Thread-20878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:56:55.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:56:55.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')
2026-04-15T14:56:55.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') -> 00000000
2026-04-15T14:56:55.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:56:55.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:56:55.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:56:55.711 [DEBUG] [Thread-20878] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:56:59.484 [DEBUG] [Thread-20880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:57:07.454 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:57:07.455 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:57:14.531 [DEBUG] [Thread-20881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:57:25.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:57:25.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:57:25.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
2026-04-15T14:57:27.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 57, 1), 9.30882, 53.8296, 0.0, 18.598, 14.7088, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:57:27.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:57:01
2026-04-15T14:57:27.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:57:27.882 [DEBUG] [Thread-20882] [transport.py] [_log()] starting thread (client mode): 0xf13cbb80
2026-04-15T14:57:27.882 [DEBUG] [Thread-20882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:57:27.897 [DEBUG] [Thread-20882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:57:27.897 [INFO] [Thread-20882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:57:27.901 [DEBUG] [Thread-20882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:57:27.901 [DEBUG] [Thread-20882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:57:27.901 [DEBUG] [Thread-20882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:57:27.901 [DEBUG] [Thread-20882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:57:27.901 [DEBUG] [Thread-20882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:57:27.901 [DEBUG] [Thread-20882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:57:27.901 [DEBUG] [Thread-20882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:57:27.901 [DEBUG] [Thread-20882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:57:27.901 [DEBUG] [Thread-20882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:57:27.901 [DEBUG] [Thread-20882] [transport.py] [_log()] client lang: <none>
2026-04-15T14:57:27.902 [DEBUG] [Thread-20882] [transport.py] [_log()] server lang: <none>
2026-04-15T14:57:27.902 [DEBUG] [Thread-20882] [transport.py] [_log()] kex follows: False
2026-04-15T14:57:27.902 [DEBUG] [Thread-20882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:57:27.902 [DEBUG] [Thread-20882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:57:27.902 [DEBUG] [Thread-20882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:57:27.902 [DEBUG] [Thread-20882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:57:27.902 [DEBUG] [Thread-20882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:57:27.902 [DEBUG] [Thread-20882] [transport.py] [_log()] Compression: none
2026-04-15T14:57:27.902 [DEBUG] [Thread-20882] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:57:27.914 [DEBUG] [Thread-20882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:57:27.915 [DEBUG] [Thread-20882] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:57:27.915 [DEBUG] [Thread-20882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:57:27.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:57:27.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:57:27.916 [DEBUG] [Thread-20882] [transport.py] [_log()] userauth is OK
2026-04-15T14:57:27.916 [DEBUG] [Thread-20882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:57:27.916 [DEBUG] [Thread-20882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:57:27.917 [DEBUG] [Thread-20882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:57:27.917 [DEBUG] [Thread-20882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:57:27.939 [INFO] [Thread-20882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:57:27.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:57:28.760 [DEBUG] [Thread-20882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:57:28.760 [DEBUG] [Thread-20882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:57:28.761 [DEBUG] [Thread-20882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:57:28.801 [DEBUG] [Thread-20882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:57:28.801 [DEBUG] [Thread-20882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:57:28.804 [DEBUG] [Thread-20882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:57:28.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:57:28.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:57:28.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:57:28.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:57:28.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:57:28.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:57:28.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:57:28.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:57:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:57:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.539373 -999.00  +14.30  14.80     60   +6.70 1 1 1 1 1   888    0 8.91 49.41 ----- 16.5 14.8 305.8 24.9 21.1 -29.0 20.1 -28.0 20.9 -24.9 22.1 -26.2
2026-04-15T14:57:28.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:57:28.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:57:28.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.539373
2026-04-15T14:57:28.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:57:28.829 [DEBUG] [Thread-20882] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:57:28.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:57:28.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:57:28.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:57:28.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:57:28.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:57:01', tmtdew=9.30882, humidity=53.8296, cloud=0.0, wind=18.598, temperature=14.7088, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:56:41.827', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:57:29.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:57:29.085 [DEBUG] [Thread-20885] [transport.py] [_log()] starting thread (client mode): 0xee9e5cc0
2026-04-15T14:57:29.085 [DEBUG] [Thread-20885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:57:29.101 [DEBUG] [Thread-20885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:57:29.101 [INFO] [Thread-20885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:57:29.108 [DEBUG] [Thread-20885] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:57:29.109 [DEBUG] [Thread-20885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:57:29.109 [DEBUG] [Thread-20885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:57:29.109 [DEBUG] [Thread-20885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:57:29.109 [DEBUG] [Thread-20885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:57:29.109 [DEBUG] [Thread-20885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:57:29.109 [DEBUG] [Thread-20885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:57:29.109 [DEBUG] [Thread-20885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:57:29.109 [DEBUG] [Thread-20885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:57:29.109 [DEBUG] [Thread-20885] [transport.py] [_log()] client lang: <none>
2026-04-15T14:57:29.109 [DEBUG] [Thread-20885] [transport.py] [_log()] server lang: <none>
2026-04-15T14:57:29.109 [DEBUG] [Thread-20885] [transport.py] [_log()] kex follows: False
2026-04-15T14:57:29.110 [DEBUG] [Thread-20885] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:57:29.110 [DEBUG] [Thread-20885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:57:29.110 [DEBUG] [Thread-20885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:57:29.110 [DEBUG] [Thread-20885] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:57:29.110 [DEBUG] [Thread-20885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:57:29.110 [DEBUG] [Thread-20885] [transport.py] [_log()] Compression: none
2026-04-15T14:57:29.110 [DEBUG] [Thread-20885] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:57:29.166 [DEBUG] [Thread-20885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:57:29.167 [DEBUG] [Thread-20885] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:57:29.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:57:29.167 [DEBUG] [Thread-20885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:57:29.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:57:29.223 [DEBUG] [Thread-20885] [transport.py] [_log()] userauth is OK
2026-04-15T14:57:29.223 [DEBUG] [Thread-20885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:57:29.224 [DEBUG] [Thread-20885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:57:29.224 [DEBUG] [Thread-20885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:57:29.224 [DEBUG] [Thread-20885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:57:29.249 [INFO] [Thread-20885] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:57:29.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:57:29.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:57:29.562 [DEBUG] [Thread-20887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:57:29.824 [DEBUG] [Thread-20888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:57:30.095 [DEBUG] [Thread-20885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:57:30.095 [DEBUG] [Thread-20885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:57:30.143 [DEBUG] [Thread-20885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:57:30.143 [DEBUG] [Thread-20885] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:57:30.152 [DEBUG] [Thread-20885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:57:30.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:57:30.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')
2026-04-15T14:57:30.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
2026-04-15T14:57:30.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:57:30.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:57:30.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:57:30.187 [DEBUG] [Thread-20885] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:57:44.602 [DEBUG] [Thread-20889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:57:59.634 [DEBUG] [Thread-20890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:58:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:58:00.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:58:00.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
2026-04-15T14:58:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 57, 36), 9.77364, 52.1291, 0.0, 16.5852, 15.6501, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:58:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:57:36
2026-04-15T14:58:01.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:58:02.306 [DEBUG] [Thread-20891] [transport.py] [_log()] starting thread (client mode): 0xf13640d0
2026-04-15T14:58:02.306 [DEBUG] [Thread-20891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:58:02.326 [DEBUG] [Thread-20891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:58:02.326 [INFO] [Thread-20891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:58:02.329 [DEBUG] [Thread-20891] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:58:02.329 [DEBUG] [Thread-20891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:58:02.329 [DEBUG] [Thread-20891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:58:02.329 [DEBUG] [Thread-20891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:58:02.330 [DEBUG] [Thread-20891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:58:02.330 [DEBUG] [Thread-20891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:58:02.330 [DEBUG] [Thread-20891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:58:02.330 [DEBUG] [Thread-20891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:58:02.330 [DEBUG] [Thread-20891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:58:02.330 [DEBUG] [Thread-20891] [transport.py] [_log()] client lang: <none>
2026-04-15T14:58:02.330 [DEBUG] [Thread-20891] [transport.py] [_log()] server lang: <none>
2026-04-15T14:58:02.330 [DEBUG] [Thread-20891] [transport.py] [_log()] kex follows: False
2026-04-15T14:58:02.330 [DEBUG] [Thread-20891] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:58:02.330 [DEBUG] [Thread-20891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:58:02.330 [DEBUG] [Thread-20891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:58:02.331 [DEBUG] [Thread-20891] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:58:02.331 [DEBUG] [Thread-20891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:58:02.331 [DEBUG] [Thread-20891] [transport.py] [_log()] Compression: none
2026-04-15T14:58:02.331 [DEBUG] [Thread-20891] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:58:02.340 [DEBUG] [Thread-20891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:58:02.340 [DEBUG] [Thread-20891] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:58:02.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:58:02.341 [DEBUG] [Thread-20891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:58:02.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:58:02.342 [DEBUG] [Thread-20891] [transport.py] [_log()] userauth is OK
2026-04-15T14:58:02.342 [DEBUG] [Thread-20891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:58:02.342 [DEBUG] [Thread-20891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:58:02.342 [DEBUG] [Thread-20891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:58:02.342 [DEBUG] [Thread-20891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:58:02.378 [INFO] [Thread-20891] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:58:02.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:58:03.186 [DEBUG] [Thread-20891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:58:03.186 [DEBUG] [Thread-20891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:58:03.187 [DEBUG] [Thread-20891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:58:03.227 [DEBUG] [Thread-20891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:58:03.227 [DEBUG] [Thread-20891] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:58:03.229 [DEBUG] [Thread-20891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:58:03.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:58:03.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:58:03.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:58:03.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:58:03.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:58:03.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:58:03.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:58:03.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:58:03.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:58:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.540067 -999.00  +14.30  13.33     61   +7.00 1 1 1 1 1   888    0 8.88 48.61 ----- 15.4 13.3 311.6 17.7 21.2 -27.9 20.1 -28.0 20.9 -24.4 22.1 -25.3
2026-04-15T14:58:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:58:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:58:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.540067
2026-04-15T14:58:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:58:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:58:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:58:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:58:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:58:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:57:36', tmtdew=9.77364, humidity=52.1291, cloud=0.0, wind=16.5852, temperature=15.6501, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:57:41.789', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:58:03.250 [DEBUG] [Thread-20891] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:58:03.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:58:03.481 [DEBUG] [Thread-20894] [transport.py] [_log()] starting thread (client mode): 0xee989870
2026-04-15T14:58:03.482 [DEBUG] [Thread-20894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:58:03.496 [DEBUG] [Thread-20894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:58:03.497 [INFO] [Thread-20894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:58:03.504 [DEBUG] [Thread-20894] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:58:03.504 [DEBUG] [Thread-20894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:58:03.504 [DEBUG] [Thread-20894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:58:03.504 [DEBUG] [Thread-20894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:58:03.504 [DEBUG] [Thread-20894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:58:03.504 [DEBUG] [Thread-20894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:58:03.504 [DEBUG] [Thread-20894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:58:03.504 [DEBUG] [Thread-20894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:58:03.505 [DEBUG] [Thread-20894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:58:03.505 [DEBUG] [Thread-20894] [transport.py] [_log()] client lang: <none>
2026-04-15T14:58:03.505 [DEBUG] [Thread-20894] [transport.py] [_log()] server lang: <none>
2026-04-15T14:58:03.505 [DEBUG] [Thread-20894] [transport.py] [_log()] kex follows: False
2026-04-15T14:58:03.505 [DEBUG] [Thread-20894] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:58:03.505 [DEBUG] [Thread-20894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:58:03.505 [DEBUG] [Thread-20894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:58:03.505 [DEBUG] [Thread-20894] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:58:03.505 [DEBUG] [Thread-20894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:58:03.505 [DEBUG] [Thread-20894] [transport.py] [_log()] Compression: none
2026-04-15T14:58:03.505 [DEBUG] [Thread-20894] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:58:03.567 [DEBUG] [Thread-20894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:58:03.568 [DEBUG] [Thread-20894] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:58:03.568 [DEBUG] [Thread-20894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:58:03.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:58:03.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:58:03.624 [DEBUG] [Thread-20894] [transport.py] [_log()] userauth is OK
2026-04-15T14:58:03.624 [DEBUG] [Thread-20894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:58:03.624 [DEBUG] [Thread-20894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:58:03.624 [DEBUG] [Thread-20894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:58:03.624 [DEBUG] [Thread-20894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:58:03.651 [INFO] [Thread-20894] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:58:03.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:58:03.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:58:04.515 [DEBUG] [Thread-20894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:58:04.515 [DEBUG] [Thread-20894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:58:04.563 [DEBUG] [Thread-20894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:58:04.563 [DEBUG] [Thread-20894] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:58:04.572 [DEBUG] [Thread-20894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:58:04.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:58:04.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')
2026-04-15T14:58:04.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
2026-04-15T14:58:04.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:58:04.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:58:04.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:58:04.606 [DEBUG] [Thread-20894] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:58:07.597 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:58:07.598 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:58:14.668 [DEBUG] [Thread-20896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:58:29.712 [DEBUG] [Thread-20897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:58:29.917 [DEBUG] [Thread-20898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:58:34.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:58:34.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:58:34.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
2026-04-15T14:58:35.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 58, 12), 9.37212, 53.6308, 0.0, 14.5922, 14.7248, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:58:35.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:58:12
2026-04-15T14:58:36.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:58:36.742 [DEBUG] [Thread-20899] [transport.py] [_log()] starting thread (client mode): 0xee9e5ea0
2026-04-15T14:58:36.743 [DEBUG] [Thread-20899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:58:36.765 [DEBUG] [Thread-20899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:58:36.765 [INFO] [Thread-20899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:58:36.768 [DEBUG] [Thread-20899] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:58:36.768 [DEBUG] [Thread-20899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:58:36.768 [DEBUG] [Thread-20899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:58:36.768 [DEBUG] [Thread-20899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:58:36.768 [DEBUG] [Thread-20899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:58:36.768 [DEBUG] [Thread-20899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:58:36.769 [DEBUG] [Thread-20899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:58:36.769 [DEBUG] [Thread-20899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:58:36.769 [DEBUG] [Thread-20899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:58:36.769 [DEBUG] [Thread-20899] [transport.py] [_log()] client lang: <none>
2026-04-15T14:58:36.769 [DEBUG] [Thread-20899] [transport.py] [_log()] server lang: <none>
2026-04-15T14:58:36.769 [DEBUG] [Thread-20899] [transport.py] [_log()] kex follows: False
2026-04-15T14:58:36.769 [DEBUG] [Thread-20899] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:58:36.769 [DEBUG] [Thread-20899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:58:36.769 [DEBUG] [Thread-20899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:58:36.769 [DEBUG] [Thread-20899] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:58:36.769 [DEBUG] [Thread-20899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:58:36.770 [DEBUG] [Thread-20899] [transport.py] [_log()] Compression: none
2026-04-15T14:58:36.770 [DEBUG] [Thread-20899] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:58:36.787 [DEBUG] [Thread-20899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:58:36.787 [DEBUG] [Thread-20899] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:58:36.788 [DEBUG] [Thread-20899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:58:36.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:58:36.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:58:36.790 [DEBUG] [Thread-20899] [transport.py] [_log()] userauth is OK
2026-04-15T14:58:36.790 [DEBUG] [Thread-20899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:58:36.790 [DEBUG] [Thread-20899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:58:36.790 [DEBUG] [Thread-20899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:58:36.790 [DEBUG] [Thread-20899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:58:36.814 [INFO] [Thread-20899] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:58:36.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:58:37.583 [DEBUG] [Thread-20899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:58:37.584 [DEBUG] [Thread-20899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:58:37.584 [DEBUG] [Thread-20899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:58:37.624 [DEBUG] [Thread-20899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:58:37.624 [DEBUG] [Thread-20899] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:58:37.627 [DEBUG] [Thread-20899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:58:37.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:58:37.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:58:37.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:58:37.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:58:37.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:58:37.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:58:37.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:58:37.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:58:37.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:58:37.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.540414 -999.00  +14.40  15.16     60   +6.90 1 1 1 1 1   888    0 8.92 47.25 ----- 14.7 15.2 293.0 20.5 21.2 -28.1 20.2 -27.6 20.9 -25.5 22.2 -26.1
2026-04-15T14:58:37.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:58:37.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:58:37.648 [DEBUG] [Thread-20899] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:58:37.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.540414
2026-04-15T14:58:37.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:58:37.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:58:37.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:58:37.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:58:37.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:58:37.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:58:12', tmtdew=9.37212, humidity=53.6308, cloud=0.0, wind=14.5922, temperature=14.7248, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:58:11.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:58:37.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:58:37.912 [DEBUG] [Thread-20902] [transport.py] [_log()] starting thread (client mode): 0xee902a70
2026-04-15T14:58:37.912 [DEBUG] [Thread-20902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:58:37.928 [DEBUG] [Thread-20902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:58:37.929 [INFO] [Thread-20902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:58:37.938 [DEBUG] [Thread-20902] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:58:37.938 [DEBUG] [Thread-20902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:58:37.938 [DEBUG] [Thread-20902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:58:37.938 [DEBUG] [Thread-20902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:58:37.938 [DEBUG] [Thread-20902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:58:37.938 [DEBUG] [Thread-20902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:58:37.938 [DEBUG] [Thread-20902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:58:37.938 [DEBUG] [Thread-20902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:58:37.938 [DEBUG] [Thread-20902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:58:37.938 [DEBUG] [Thread-20902] [transport.py] [_log()] client lang: <none>
2026-04-15T14:58:37.938 [DEBUG] [Thread-20902] [transport.py] [_log()] server lang: <none>
2026-04-15T14:58:37.939 [DEBUG] [Thread-20902] [transport.py] [_log()] kex follows: False
2026-04-15T14:58:37.939 [DEBUG] [Thread-20902] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:58:37.939 [DEBUG] [Thread-20902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:58:37.939 [DEBUG] [Thread-20902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:58:37.939 [DEBUG] [Thread-20902] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:58:37.939 [DEBUG] [Thread-20902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:58:37.939 [DEBUG] [Thread-20902] [transport.py] [_log()] Compression: none
2026-04-15T14:58:37.939 [DEBUG] [Thread-20902] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:58:37.995 [DEBUG] [Thread-20902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:58:37.995 [DEBUG] [Thread-20902] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:58:37.996 [DEBUG] [Thread-20902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:58:37.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:58:37.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:58:38.053 [DEBUG] [Thread-20902] [transport.py] [_log()] userauth is OK
2026-04-15T14:58:38.053 [DEBUG] [Thread-20902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:58:38.054 [DEBUG] [Thread-20902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:58:38.054 [DEBUG] [Thread-20902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:58:38.054 [DEBUG] [Thread-20902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:58:38.083 [INFO] [Thread-20902] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:58:38.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:58:38.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:58:38.902 [DEBUG] [Thread-20902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:58:38.903 [DEBUG] [Thread-20902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:58:38.950 [DEBUG] [Thread-20902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:58:38.950 [DEBUG] [Thread-20902] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:58:38.959 [DEBUG] [Thread-20902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:58:38.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:58:38.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')
2026-04-15T14:58:38.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
2026-04-15T14:58:38.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:58:38.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:58:38.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:58:38.995 [DEBUG] [Thread-20902] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:58:44.743 [DEBUG] [Thread-20904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:58:59.787 [DEBUG] [Thread-20905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:59:07.737 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:59:07.738 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:59:09.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:59:09.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:59:09.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
2026-04-15T14:59:10.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 58, 47), 10.0416, 51.1349, 0.0, 16.4088, 15.5176, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:59:10.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:58:47
2026-04-15T14:59:10.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:59:11.130 [DEBUG] [Thread-20906] [transport.py] [_log()] starting thread (client mode): 0xee98e470
2026-04-15T14:59:11.130 [DEBUG] [Thread-20906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:59:11.150 [DEBUG] [Thread-20906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:59:11.150 [INFO] [Thread-20906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:59:11.153 [DEBUG] [Thread-20906] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:59:11.153 [DEBUG] [Thread-20906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:59:11.153 [DEBUG] [Thread-20906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:59:11.153 [DEBUG] [Thread-20906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:59:11.153 [DEBUG] [Thread-20906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:59:11.153 [DEBUG] [Thread-20906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:59:11.153 [DEBUG] [Thread-20906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:59:11.153 [DEBUG] [Thread-20906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:59:11.153 [DEBUG] [Thread-20906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:59:11.154 [DEBUG] [Thread-20906] [transport.py] [_log()] client lang: <none>
2026-04-15T14:59:11.154 [DEBUG] [Thread-20906] [transport.py] [_log()] server lang: <none>
2026-04-15T14:59:11.154 [DEBUG] [Thread-20906] [transport.py] [_log()] kex follows: False
2026-04-15T14:59:11.154 [DEBUG] [Thread-20906] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:59:11.154 [DEBUG] [Thread-20906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:59:11.154 [DEBUG] [Thread-20906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:59:11.154 [DEBUG] [Thread-20906] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:59:11.154 [DEBUG] [Thread-20906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:59:11.154 [DEBUG] [Thread-20906] [transport.py] [_log()] Compression: none
2026-04-15T14:59:11.154 [DEBUG] [Thread-20906] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:59:11.173 [DEBUG] [Thread-20906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:59:11.173 [DEBUG] [Thread-20906] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:59:11.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:59:11.174 [DEBUG] [Thread-20906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:59:11.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:59:11.175 [DEBUG] [Thread-20906] [transport.py] [_log()] userauth is OK
2026-04-15T14:59:11.175 [DEBUG] [Thread-20906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:59:11.175 [DEBUG] [Thread-20906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:59:11.175 [DEBUG] [Thread-20906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:59:11.175 [DEBUG] [Thread-20906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:59:11.194 [INFO] [Thread-20906] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:59:11.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:59:11.993 [DEBUG] [Thread-20906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:59:11.994 [DEBUG] [Thread-20906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:59:11.994 [DEBUG] [Thread-20906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:59:12.034 [DEBUG] [Thread-20906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:59:12.034 [DEBUG] [Thread-20906] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:59:12.037 [DEBUG] [Thread-20906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:59:12.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:59:12.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:59:12.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:59:12.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:59:12.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:59:12.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:59:12.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:59:12.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:59:12.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:59:12.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.540762 -999.00  +14.30  18.67     61   +6.90 1 1 1 1 1   888    0 8.87 48.89 ----- 21.7 18.7 289.6 22.5 21.2 -28.9 20.2 -27.9 20.8 -26.0 22.2 -26.6
2026-04-15T14:59:12.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:59:12.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:59:12.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.540762
2026-04-15T14:59:12.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:59:12.062 [DEBUG] [Thread-20906] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:59:12.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:59:12.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:59:12.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:59:12.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:59:12.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:58:47', tmtdew=10.0416, humidity=51.1349, cloud=0.0, wind=16.4088, temperature=15.5176, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:58:41.837', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:59:12.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:59:12.321 [DEBUG] [Thread-20909] [transport.py] [_log()] starting thread (client mode): 0xee906d40
2026-04-15T14:59:12.321 [DEBUG] [Thread-20909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:59:12.336 [DEBUG] [Thread-20909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:59:12.336 [INFO] [Thread-20909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:59:12.343 [DEBUG] [Thread-20909] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:59:12.343 [DEBUG] [Thread-20909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:59:12.343 [DEBUG] [Thread-20909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:59:12.344 [DEBUG] [Thread-20909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:59:12.344 [DEBUG] [Thread-20909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:59:12.344 [DEBUG] [Thread-20909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:59:12.344 [DEBUG] [Thread-20909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:59:12.344 [DEBUG] [Thread-20909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:59:12.344 [DEBUG] [Thread-20909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:59:12.344 [DEBUG] [Thread-20909] [transport.py] [_log()] client lang: <none>
2026-04-15T14:59:12.344 [DEBUG] [Thread-20909] [transport.py] [_log()] server lang: <none>
2026-04-15T14:59:12.344 [DEBUG] [Thread-20909] [transport.py] [_log()] kex follows: False
2026-04-15T14:59:12.344 [DEBUG] [Thread-20909] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:59:12.344 [DEBUG] [Thread-20909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:59:12.344 [DEBUG] [Thread-20909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:59:12.345 [DEBUG] [Thread-20909] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:59:12.345 [DEBUG] [Thread-20909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:59:12.345 [DEBUG] [Thread-20909] [transport.py] [_log()] Compression: none
2026-04-15T14:59:12.345 [DEBUG] [Thread-20909] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:59:12.403 [DEBUG] [Thread-20909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:59:12.403 [DEBUG] [Thread-20909] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:59:12.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:59:12.404 [DEBUG] [Thread-20909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:59:12.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:59:12.459 [DEBUG] [Thread-20909] [transport.py] [_log()] userauth is OK
2026-04-15T14:59:12.459 [DEBUG] [Thread-20909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:59:12.460 [DEBUG] [Thread-20909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:59:12.460 [DEBUG] [Thread-20909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:59:12.460 [DEBUG] [Thread-20909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:59:12.485 [INFO] [Thread-20909] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:59:12.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:59:12.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:59:13.323 [DEBUG] [Thread-20909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:59:13.323 [DEBUG] [Thread-20909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:59:13.373 [DEBUG] [Thread-20909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:59:13.374 [DEBUG] [Thread-20909] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:59:13.386 [DEBUG] [Thread-20909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:59:13.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:59: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')
2026-04-15T14:59:13.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
2026-04-15T14:59:13.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:59:13.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:59:13.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:59:13.435 [DEBUG] [Thread-20909] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:59:14.821 [DEBUG] [Thread-20911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:59:29.864 [DEBUG] [Thread-20912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:59:29.994 [DEBUG] [Thread-20913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:59:43.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T14:59:43.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T14:59:43.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
2026-04-15T14:59:44.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 59, 22), 9.19713, 53.664, 0.0, 17.4514, 14.4094, 0, 0, 0, 2, 0, 0),)
2026-04-15T14:59:44.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:59:22
2026-04-15T14:59:44.895 [DEBUG] [Thread-20914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T14:59:45.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T14:59:45.570 [DEBUG] [Thread-20915] [transport.py] [_log()] starting thread (client mode): 0xf13666e0
2026-04-15T14:59:45.570 [DEBUG] [Thread-20915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:59:45.595 [DEBUG] [Thread-20915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T14:59:45.595 [INFO] [Thread-20915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T14:59:45.598 [DEBUG] [Thread-20915] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:59:45.598 [DEBUG] [Thread-20915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T14:59:45.598 [DEBUG] [Thread-20915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:59:45.598 [DEBUG] [Thread-20915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:59:45.598 [DEBUG] [Thread-20915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:59:45.598 [DEBUG] [Thread-20915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:59:45.598 [DEBUG] [Thread-20915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:59:45.598 [DEBUG] [Thread-20915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:59:45.598 [DEBUG] [Thread-20915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:59:45.598 [DEBUG] [Thread-20915] [transport.py] [_log()] client lang: <none>
2026-04-15T14:59:45.598 [DEBUG] [Thread-20915] [transport.py] [_log()] server lang: <none>
2026-04-15T14:59:45.598 [DEBUG] [Thread-20915] [transport.py] [_log()] kex follows: False
2026-04-15T14:59:45.598 [DEBUG] [Thread-20915] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:59:45.598 [DEBUG] [Thread-20915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:59:45.598 [DEBUG] [Thread-20915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:59:45.599 [DEBUG] [Thread-20915] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:59:45.599 [DEBUG] [Thread-20915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:59:45.599 [DEBUG] [Thread-20915] [transport.py] [_log()] Compression: none
2026-04-15T14:59:45.599 [DEBUG] [Thread-20915] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:59:45.614 [DEBUG] [Thread-20915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:59:45.615 [DEBUG] [Thread-20915] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:59:45.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T14:59:45.615 [DEBUG] [Thread-20915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T14:59:45.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:59:45.616 [DEBUG] [Thread-20915] [transport.py] [_log()] userauth is OK
2026-04-15T14:59:45.616 [DEBUG] [Thread-20915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:59:45.616 [DEBUG] [Thread-20915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:59:45.616 [DEBUG] [Thread-20915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T14:59:45.616 [DEBUG] [Thread-20915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:59:45.636 [INFO] [Thread-20915] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:59:45.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:59:46.405 [DEBUG] [Thread-20915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:59:46.405 [DEBUG] [Thread-20915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:59:46.406 [DEBUG] [Thread-20915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T14:59:46.447 [DEBUG] [Thread-20915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:59:46.447 [DEBUG] [Thread-20915] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:59:46.449 [DEBUG] [Thread-20915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:59:46.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:59:46.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T14:59:46.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T14:59:46.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T14:59:46.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:59:46.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T14:59:46.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:59:46.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:59:46.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T14:59:46.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.541109 -999.00  +14.10  17.81     61   +6.90 1 1 1 1 1   888    0 8.94 49.71 ----- 14.3 17.8 315.8 25.6 21.1 -29.4 20.1 -28.1 20.8 -26.4 22.1 -26.9
2026-04-15T14:59:46.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T14:59:46.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T14:59:46.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.541109
2026-04-15T14:59:46.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T14:59:46.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T14:59:46.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T14:59:46.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T14:59:46.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T14:59:46.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:59:22', tmtdew=9.19713, humidity=53.664, cloud=0.0, wind=17.4514, temperature=14.4094, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:59:11.818', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T14:59:46.468 [DEBUG] [Thread-20915] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:59:46.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T14:59:46.690 [DEBUG] [Thread-20918] [transport.py] [_log()] starting thread (client mode): 0xf1336bf0
2026-04-15T14:59:46.691 [DEBUG] [Thread-20918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T14:59:46.705 [DEBUG] [Thread-20918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T14:59:46.705 [INFO] [Thread-20918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T14:59:46.712 [DEBUG] [Thread-20918] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T14:59:46.712 [DEBUG] [Thread-20918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T14:59:46.712 [DEBUG] [Thread-20918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T14:59:46.713 [DEBUG] [Thread-20918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:59:46.713 [DEBUG] [Thread-20918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T14:59:46.713 [DEBUG] [Thread-20918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:59:46.713 [DEBUG] [Thread-20918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T14:59:46.713 [DEBUG] [Thread-20918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T14:59:46.713 [DEBUG] [Thread-20918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T14:59:46.713 [DEBUG] [Thread-20918] [transport.py] [_log()] client lang: <none>
2026-04-15T14:59:46.713 [DEBUG] [Thread-20918] [transport.py] [_log()] server lang: <none>
2026-04-15T14:59:46.713 [DEBUG] [Thread-20918] [transport.py] [_log()] kex follows: False
2026-04-15T14:59:46.713 [DEBUG] [Thread-20918] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T14:59:46.713 [DEBUG] [Thread-20918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T14:59:46.713 [DEBUG] [Thread-20918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T14:59:46.714 [DEBUG] [Thread-20918] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T14:59:46.714 [DEBUG] [Thread-20918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T14:59:46.714 [DEBUG] [Thread-20918] [transport.py] [_log()] Compression: none
2026-04-15T14:59:46.714 [DEBUG] [Thread-20918] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T14:59:46.770 [DEBUG] [Thread-20918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T14:59:46.771 [DEBUG] [Thread-20918] [transport.py] [_log()] Switch to new keys ...
2026-04-15T14:59:46.771 [DEBUG] [Thread-20918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T14:59:46.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T14:59:46.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T14:59:46.827 [DEBUG] [Thread-20918] [transport.py] [_log()] userauth is OK
2026-04-15T14:59:46.828 [DEBUG] [Thread-20918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T14:59:46.828 [DEBUG] [Thread-20918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T14:59:46.828 [DEBUG] [Thread-20918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T14:59:46.828 [DEBUG] [Thread-20918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T14:59:46.852 [INFO] [Thread-20918] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T14:59:46.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T14:59:46.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T14:59:47.693 [DEBUG] [Thread-20918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T14:59:47.693 [DEBUG] [Thread-20918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T14:59:47.743 [DEBUG] [Thread-20918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T14:59:47.743 [DEBUG] [Thread-20918] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T14:59:47.755 [DEBUG] [Thread-20918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T14:59:47.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T14:59: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')
2026-04-15T14:59:47.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
2026-04-15T14:59:47.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T14:59:47.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T14:59:47.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T14:59:47.793 [DEBUG] [Thread-20918] [transport.py] [_log()] EOF in transport thread
2026-04-15T14:59:59.927 [DEBUG] [Thread-20920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:00:07.877 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:00:07.878 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:00:14.973 [DEBUG] [Thread-20921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:00:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:00:17.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:00:17.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
2026-04-15T15:00:19.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 14, 59, 58), 9.1237, 54.4622, 0.0, 11.6464, 14.5254, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:00:19.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 14:59:58
2026-04-15T15:00:19.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:00:19.877 [DEBUG] [Thread-20922] [transport.py] [_log()] starting thread (client mode): 0xf13354e0
2026-04-15T15:00:19.877 [DEBUG] [Thread-20922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:00:19.898 [DEBUG] [Thread-20922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:00:19.898 [INFO] [Thread-20922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:00:19.901 [DEBUG] [Thread-20922] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:00:19.901 [DEBUG] [Thread-20922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:00:19.901 [DEBUG] [Thread-20922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:00:19.901 [DEBUG] [Thread-20922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:00:19.901 [DEBUG] [Thread-20922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:00:19.902 [DEBUG] [Thread-20922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:00:19.902 [DEBUG] [Thread-20922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:00:19.902 [DEBUG] [Thread-20922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:00:19.902 [DEBUG] [Thread-20922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:00:19.902 [DEBUG] [Thread-20922] [transport.py] [_log()] client lang: <none>
2026-04-15T15:00:19.902 [DEBUG] [Thread-20922] [transport.py] [_log()] server lang: <none>
2026-04-15T15:00:19.902 [DEBUG] [Thread-20922] [transport.py] [_log()] kex follows: False
2026-04-15T15:00:19.902 [DEBUG] [Thread-20922] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:00:19.902 [DEBUG] [Thread-20922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:00:19.902 [DEBUG] [Thread-20922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:00:19.903 [DEBUG] [Thread-20922] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:00:19.903 [DEBUG] [Thread-20922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:00:19.903 [DEBUG] [Thread-20922] [transport.py] [_log()] Compression: none
2026-04-15T15:00:19.903 [DEBUG] [Thread-20922] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:00:19.920 [DEBUG] [Thread-20922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:00:19.920 [DEBUG] [Thread-20922] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:00:19.921 [DEBUG] [Thread-20922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:00:19.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:00:19.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:00:19.922 [DEBUG] [Thread-20922] [transport.py] [_log()] userauth is OK
2026-04-15T15:00:19.922 [DEBUG] [Thread-20922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:00:19.922 [DEBUG] [Thread-20922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:00:19.923 [DEBUG] [Thread-20922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:00:19.923 [DEBUG] [Thread-20922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:00:19.946 [INFO] [Thread-20922] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:00:19.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:00:21.994 [DEBUG] [Thread-20922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:00:21.994 [DEBUG] [Thread-20922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:00:21.995 [DEBUG] [Thread-20922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:00:22.035 [DEBUG] [Thread-20922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:00:22.035 [DEBUG] [Thread-20922] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:00:22.037 [DEBUG] [Thread-20922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:00:22.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:00:22.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:00:22.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:00:22.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:00:22.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:00:22.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:00:22.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:00:22.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:00:22.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:00:22.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.541456 -999.00  +14.00  11.04     61   +6.60 1 1 1 1 1   888    0 8.82 47.11 ----- 10.2 11.0 293.0 22.6 21.1 -28.8 20.2 -28.1 20.9 -25.9 22.1 -26.2
2026-04-15T15:00:22.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:00:22.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:00:22.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.541456
2026-04-15T15:00:22.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:00:22.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:00:22.061 [DEBUG] [Thread-20922] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:00:22.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:00:22.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:00:22.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:00:22.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T14:59:58', tmtdew=9.1237, humidity=54.4622, cloud=0.0, wind=11.6464, temperature=14.5254, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T12:59:41.798', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:00:22.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:00:22.318 [DEBUG] [Thread-20925] [transport.py] [_log()] starting thread (client mode): 0xf13eec80
2026-04-15T15:00:22.318 [DEBUG] [Thread-20925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:00:22.333 [DEBUG] [Thread-20925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:00:22.333 [INFO] [Thread-20925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:00:22.340 [DEBUG] [Thread-20925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:00:22.341 [DEBUG] [Thread-20925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:00:22.341 [DEBUG] [Thread-20925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:00:22.341 [DEBUG] [Thread-20925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:00:22.341 [DEBUG] [Thread-20925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:00:22.341 [DEBUG] [Thread-20925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:00:22.341 [DEBUG] [Thread-20925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:00:22.341 [DEBUG] [Thread-20925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:00:22.341 [DEBUG] [Thread-20925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:00:22.341 [DEBUG] [Thread-20925] [transport.py] [_log()] client lang: <none>
2026-04-15T15:00:22.341 [DEBUG] [Thread-20925] [transport.py] [_log()] server lang: <none>
2026-04-15T15:00:22.341 [DEBUG] [Thread-20925] [transport.py] [_log()] kex follows: False
2026-04-15T15:00:22.341 [DEBUG] [Thread-20925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:00:22.342 [DEBUG] [Thread-20925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:00:22.342 [DEBUG] [Thread-20925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:00:22.342 [DEBUG] [Thread-20925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:00:22.342 [DEBUG] [Thread-20925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:00:22.342 [DEBUG] [Thread-20925] [transport.py] [_log()] Compression: none
2026-04-15T15:00:22.342 [DEBUG] [Thread-20925] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:00:22.402 [DEBUG] [Thread-20925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:00:22.403 [DEBUG] [Thread-20925] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:00:22.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:00:22.403 [DEBUG] [Thread-20925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:00:22.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:00:22.459 [DEBUG] [Thread-20925] [transport.py] [_log()] userauth is OK
2026-04-15T15:00:22.459 [DEBUG] [Thread-20925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:00:22.460 [DEBUG] [Thread-20925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:00:22.460 [DEBUG] [Thread-20925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:00:22.460 [DEBUG] [Thread-20925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:00:22.485 [INFO] [Thread-20925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:00:22.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:00:22.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:00:23.338 [DEBUG] [Thread-20925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:00:23.339 [DEBUG] [Thread-20925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:00:23.386 [DEBUG] [Thread-20925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:00:23.386 [DEBUG] [Thread-20925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:00:23.395 [DEBUG] [Thread-20925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:00:23.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:00:23.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')
2026-04-15T15:00:23.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
2026-04-15T15:00:23.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:00:23.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:00:23.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:00:23.429 [DEBUG] [Thread-20925] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:00:30.003 [DEBUG] [Thread-20927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:00:30.069 [DEBUG] [Thread-20928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:00:45.042 [DEBUG] [Thread-20929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:00:53.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:00:53.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:00:53.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
2026-04-15T15:00:54.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 0, 34), 9.67367, 52.3938, 0.0, 12.4927, 15.2852, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:00:54.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:00:34
2026-04-15T15:00:55.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:00:55.687 [DEBUG] [Thread-20930] [transport.py] [_log()] starting thread (client mode): 0xee9892a0
2026-04-15T15:00:55.687 [DEBUG] [Thread-20930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:00:55.707 [DEBUG] [Thread-20930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:00:55.707 [INFO] [Thread-20930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:00:55.710 [DEBUG] [Thread-20930] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:00:55.710 [DEBUG] [Thread-20930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:00:55.710 [DEBUG] [Thread-20930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:00:55.710 [DEBUG] [Thread-20930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:00:55.710 [DEBUG] [Thread-20930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:00:55.710 [DEBUG] [Thread-20930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:00:55.710 [DEBUG] [Thread-20930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:00:55.710 [DEBUG] [Thread-20930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:00:55.711 [DEBUG] [Thread-20930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:00:55.711 [DEBUG] [Thread-20930] [transport.py] [_log()] client lang: <none>
2026-04-15T15:00:55.711 [DEBUG] [Thread-20930] [transport.py] [_log()] server lang: <none>
2026-04-15T15:00:55.711 [DEBUG] [Thread-20930] [transport.py] [_log()] kex follows: False
2026-04-15T15:00:55.711 [DEBUG] [Thread-20930] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:00:55.711 [DEBUG] [Thread-20930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:00:55.711 [DEBUG] [Thread-20930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:00:55.711 [DEBUG] [Thread-20930] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:00:55.711 [DEBUG] [Thread-20930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:00:55.711 [DEBUG] [Thread-20930] [transport.py] [_log()] Compression: none
2026-04-15T15:00:55.711 [DEBUG] [Thread-20930] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:00:55.728 [DEBUG] [Thread-20930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:00:55.728 [DEBUG] [Thread-20930] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:00:55.729 [DEBUG] [Thread-20930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:00:55.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:00:55.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:00:55.730 [DEBUG] [Thread-20930] [transport.py] [_log()] userauth is OK
2026-04-15T15:00:55.730 [DEBUG] [Thread-20930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:00:55.730 [DEBUG] [Thread-20930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:00:55.730 [DEBUG] [Thread-20930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:00:55.730 [DEBUG] [Thread-20930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:00:55.765 [INFO] [Thread-20930] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:00:55.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:00:56.514 [DEBUG] [Thread-20930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:00:56.514 [DEBUG] [Thread-20930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:00:56.515 [DEBUG] [Thread-20930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:00:56.555 [DEBUG] [Thread-20930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:00:56.555 [DEBUG] [Thread-20930] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:00:56.558 [DEBUG] [Thread-20930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:00:56.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:00:56.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:00:56.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:00:56.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:00:56.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:00:56.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:00:56.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:00:56.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:00:56.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:00:56.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.541803 -999.00  +14.20  10.26     62   +7.10 1 1 1 1 1   888    0 8.78 45.03 ----- 10.9 10.3 283.4 12.5 21.2 -27.7 20.3 -27.5 21.0 -25.4 22.3 -25.5
2026-04-15T15:00:56.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:00:56.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:00:56.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.541803
2026-04-15T15:00:56.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:00:56.582 [DEBUG] [Thread-20930] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:00:56.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:00:56.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:00:56.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:00:56.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:00:56.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:00:34', tmtdew=9.67367, humidity=52.3938, cloud=0.0, wind=12.4927, temperature=15.2852, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:00:11.779', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:00:56.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:00:56.839 [DEBUG] [Thread-20933] [transport.py] [_log()] starting thread (client mode): 0xee900ee0
2026-04-15T15:00:56.839 [DEBUG] [Thread-20933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:00:56.854 [DEBUG] [Thread-20933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:00:56.854 [INFO] [Thread-20933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:00:56.861 [DEBUG] [Thread-20933] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:00:56.861 [DEBUG] [Thread-20933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:00:56.861 [DEBUG] [Thread-20933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:00:56.861 [DEBUG] [Thread-20933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:00:56.862 [DEBUG] [Thread-20933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:00:56.862 [DEBUG] [Thread-20933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:00:56.862 [DEBUG] [Thread-20933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:00:56.862 [DEBUG] [Thread-20933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:00:56.862 [DEBUG] [Thread-20933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:00:56.862 [DEBUG] [Thread-20933] [transport.py] [_log()] client lang: <none>
2026-04-15T15:00:56.862 [DEBUG] [Thread-20933] [transport.py] [_log()] server lang: <none>
2026-04-15T15:00:56.862 [DEBUG] [Thread-20933] [transport.py] [_log()] kex follows: False
2026-04-15T15:00:56.862 [DEBUG] [Thread-20933] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:00:56.862 [DEBUG] [Thread-20933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:00:56.862 [DEBUG] [Thread-20933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:00:56.862 [DEBUG] [Thread-20933] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:00:56.863 [DEBUG] [Thread-20933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:00:56.863 [DEBUG] [Thread-20933] [transport.py] [_log()] Compression: none
2026-04-15T15:00:56.863 [DEBUG] [Thread-20933] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:00:56.918 [DEBUG] [Thread-20933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:00:56.919 [DEBUG] [Thread-20933] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:00:56.919 [DEBUG] [Thread-20933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:00:56.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:00:56.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:00:56.975 [DEBUG] [Thread-20933] [transport.py] [_log()] userauth is OK
2026-04-15T15:00:56.976 [DEBUG] [Thread-20933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:00:56.976 [DEBUG] [Thread-20933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:00:56.976 [DEBUG] [Thread-20933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:00:56.976 [DEBUG] [Thread-20933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:00:57.002 [INFO] [Thread-20933] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:00:57.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:00:57.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:00:57.800 [DEBUG] [Thread-20933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:00:57.800 [DEBUG] [Thread-20933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:00:57.848 [DEBUG] [Thread-20933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:00:57.848 [DEBUG] [Thread-20933] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:00:57.858 [DEBUG] [Thread-20933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:00:57.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:00:57.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')
2026-04-15T15:00:57.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
2026-04-15T15:00:57.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:00:57.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:00:57.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:00:57.894 [DEBUG] [Thread-20933] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:01:00.073 [DEBUG] [Thread-20935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:01:08.016 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:01:08.017 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:01:15.119 [DEBUG] [Thread-20936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:01:27.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:01:27.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:01: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
2026-04-15T15:01:29.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 1, 9), 9.13836, 54.2133, 0.0, 9.66996, 14.3752, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:01:29.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:01:09
2026-04-15T15:01:29.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:01:30.092 [DEBUG] [Thread-20937] [transport.py] [_log()] starting thread (client mode): 0xf1334910
2026-04-15T15:01:30.092 [DEBUG] [Thread-20937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:01:30.111 [DEBUG] [Thread-20937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:01:30.111 [INFO] [Thread-20937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:01:30.114 [DEBUG] [Thread-20937] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:01:30.114 [DEBUG] [Thread-20937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:01:30.115 [DEBUG] [Thread-20937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:01:30.115 [DEBUG] [Thread-20937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:01:30.115 [DEBUG] [Thread-20937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:01:30.115 [DEBUG] [Thread-20937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:01:30.115 [DEBUG] [Thread-20937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:01:30.115 [DEBUG] [Thread-20937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:01:30.115 [DEBUG] [Thread-20937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:01:30.115 [DEBUG] [Thread-20937] [transport.py] [_log()] client lang: <none>
2026-04-15T15:01:30.115 [DEBUG] [Thread-20937] [transport.py] [_log()] server lang: <none>
2026-04-15T15:01:30.115 [DEBUG] [Thread-20937] [transport.py] [_log()] kex follows: False
2026-04-15T15:01:30.115 [DEBUG] [Thread-20937] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:01:30.115 [DEBUG] [Thread-20937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:01:30.115 [DEBUG] [Thread-20937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:01:30.116 [DEBUG] [Thread-20937] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:01:30.116 [DEBUG] [Thread-20937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:01:30.116 [DEBUG] [Thread-20937] [transport.py] [_log()] Compression: none
2026-04-15T15:01:30.116 [DEBUG] [Thread-20937] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:01:30.132 [DEBUG] [Thread-20937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:01:30.132 [DEBUG] [Thread-20937] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:01:30.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:01:30.133 [DEBUG] [Thread-20937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:01:30.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:01:30.134 [DEBUG] [Thread-20937] [transport.py] [_log()] userauth is OK
2026-04-15T15:01:30.134 [DEBUG] [Thread-20937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:01:30.134 [DEBUG] [Thread-20937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:01:30.134 [DEBUG] [Thread-20937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:01:30.134 [DEBUG] [Thread-20937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:01:30.148 [DEBUG] [Thread-20939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:01:30.152 [DEBUG] [Thread-20940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:01:30.153 [INFO] [Thread-20937] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:01:30.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:01:30.949 [DEBUG] [Thread-20937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:01:30.950 [DEBUG] [Thread-20937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:01:30.950 [DEBUG] [Thread-20937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:01:30.990 [DEBUG] [Thread-20937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:01:30.990 [DEBUG] [Thread-20937] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:01:30.993 [DEBUG] [Thread-20937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:01:31.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:01:31.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:01:31.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:01:31.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:01:31.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:01:31.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:01:31.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:01:31.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:01:31.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:01:31.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.542150 -999.00  +14.20   7.55     61   +6.80 1 1 1 1 1   888    0 8.94 42.79 ----- 11.1 7.5 302.4 12.3 21.3 -28.8 20.3 -27.8 21.1 -25.3 22.3 -25.9
2026-04-15T15:01:31.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:01:31.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:01:31.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.542150
2026-04-15T15:01:31.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:01:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:01:31.017 [DEBUG] [Thread-20937] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:01:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:01:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:01:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:01:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:01:09', tmtdew=9.13836, humidity=54.2133, cloud=0.0, wind=9.66996, temperature=14.3752, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:00:41.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:01:31.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:01:31.271 [DEBUG] [Thread-20942] [transport.py] [_log()] starting thread (client mode): 0xf13e04c0
2026-04-15T15:01:31.271 [DEBUG] [Thread-20942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:01:31.285 [DEBUG] [Thread-20942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:01:31.285 [INFO] [Thread-20942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:01:31.293 [DEBUG] [Thread-20942] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:01:31.293 [DEBUG] [Thread-20942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:01:31.293 [DEBUG] [Thread-20942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:01:31.293 [DEBUG] [Thread-20942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:01:31.294 [DEBUG] [Thread-20942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:01:31.294 [DEBUG] [Thread-20942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:01:31.294 [DEBUG] [Thread-20942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:01:31.294 [DEBUG] [Thread-20942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:01:31.294 [DEBUG] [Thread-20942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:01:31.294 [DEBUG] [Thread-20942] [transport.py] [_log()] client lang: <none>
2026-04-15T15:01:31.294 [DEBUG] [Thread-20942] [transport.py] [_log()] server lang: <none>
2026-04-15T15:01:31.294 [DEBUG] [Thread-20942] [transport.py] [_log()] kex follows: False
2026-04-15T15:01:31.294 [DEBUG] [Thread-20942] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:01:31.294 [DEBUG] [Thread-20942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:01:31.294 [DEBUG] [Thread-20942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:01:31.294 [DEBUG] [Thread-20942] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:01:31.295 [DEBUG] [Thread-20942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:01:31.295 [DEBUG] [Thread-20942] [transport.py] [_log()] Compression: none
2026-04-15T15:01:31.295 [DEBUG] [Thread-20942] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:01:31.350 [DEBUG] [Thread-20942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:01:31.350 [DEBUG] [Thread-20942] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:01:31.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:01:31.351 [DEBUG] [Thread-20942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:01:31.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:01:31.407 [DEBUG] [Thread-20942] [transport.py] [_log()] userauth is OK
2026-04-15T15:01:31.407 [DEBUG] [Thread-20942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:01:31.407 [DEBUG] [Thread-20942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:01:31.407 [DEBUG] [Thread-20942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:01:31.407 [DEBUG] [Thread-20942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:01:31.426 [INFO] [Thread-20942] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:01:31.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:01:31.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:01:32.246 [DEBUG] [Thread-20942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:01:32.246 [DEBUG] [Thread-20942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:01:32.294 [DEBUG] [Thread-20942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:01:32.294 [DEBUG] [Thread-20942] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:01:32.303 [DEBUG] [Thread-20942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:01:32.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:01:32.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T15:01:32.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') -> 00000000
2026-04-15T15:01:32.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:01:32.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:01:32.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:01:32.338 [DEBUG] [Thread-20942] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:01:45.176 [DEBUG] [Thread-20944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:02:00.214 [DEBUG] [Thread-20945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:02:02.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:02:02.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:02:02.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:02:03.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 1, 44), 9.67785, 52.4929, 0.0, 19.4429, 15.7156, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:02:03.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:01:44
2026-04-15T15:02:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:02:04.465 [DEBUG] [Thread-20946] [transport.py] [_log()] starting thread (client mode): 0xee902680
2026-04-15T15:02:04.465 [DEBUG] [Thread-20946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:02:04.486 [DEBUG] [Thread-20946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:02:04.487 [INFO] [Thread-20946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:02:04.490 [DEBUG] [Thread-20946] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:02:04.490 [DEBUG] [Thread-20946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:02:04.490 [DEBUG] [Thread-20946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:02:04.490 [DEBUG] [Thread-20946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:02:04.490 [DEBUG] [Thread-20946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:02:04.490 [DEBUG] [Thread-20946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:02:04.490 [DEBUG] [Thread-20946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:02:04.490 [DEBUG] [Thread-20946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:02:04.490 [DEBUG] [Thread-20946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:02:04.491 [DEBUG] [Thread-20946] [transport.py] [_log()] client lang: <none>
2026-04-15T15:02:04.491 [DEBUG] [Thread-20946] [transport.py] [_log()] server lang: <none>
2026-04-15T15:02:04.491 [DEBUG] [Thread-20946] [transport.py] [_log()] kex follows: False
2026-04-15T15:02:04.491 [DEBUG] [Thread-20946] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:02:04.491 [DEBUG] [Thread-20946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:02:04.491 [DEBUG] [Thread-20946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:02:04.491 [DEBUG] [Thread-20946] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:02:04.491 [DEBUG] [Thread-20946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:02:04.491 [DEBUG] [Thread-20946] [transport.py] [_log()] Compression: none
2026-04-15T15:02:04.491 [DEBUG] [Thread-20946] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:02:04.507 [DEBUG] [Thread-20946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:02:04.507 [DEBUG] [Thread-20946] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:02:04.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:02:04.508 [DEBUG] [Thread-20946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:02:04.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:02:04.509 [DEBUG] [Thread-20946] [transport.py] [_log()] userauth is OK
2026-04-15T15:02:04.509 [DEBUG] [Thread-20946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:02:04.509 [DEBUG] [Thread-20946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:02:04.509 [DEBUG] [Thread-20946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:02:04.509 [DEBUG] [Thread-20946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:02:04.546 [INFO] [Thread-20946] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:02:04.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:02:05.354 [DEBUG] [Thread-20946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:02:05.355 [DEBUG] [Thread-20946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:02:05.355 [DEBUG] [Thread-20946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:02:05.395 [DEBUG] [Thread-20946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:02:05.395 [DEBUG] [Thread-20946] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:02:05.398 [DEBUG] [Thread-20946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:02:05.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:02:05.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:02:05.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:02:05.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:02:05.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:02:05.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:02:05.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:02:05.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:02:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:02:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.542498 -999.00  +14.20  16.96     61   +6.90 1 1 1 1 1   888    0 8.82 43.36 ----- 12.1 17.0 326.2 20.8 21.4 -28.9 20.4 -27.3 21.1 -25.2 22.4 -26.1
2026-04-15T15:02:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:02:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:02:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.542498
2026-04-15T15:02:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:02:05.423 [DEBUG] [Thread-20946] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:02:05.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:02:05.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:02:05.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:02:05.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:02:05.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:01:44', tmtdew=9.67785, humidity=52.4929, cloud=0.0, wind=19.4429, temperature=15.7156, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:01:11.827', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:02:05.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:02:05.674 [DEBUG] [Thread-20949] [transport.py] [_log()] starting thread (client mode): 0xee903f70
2026-04-15T15:02:05.674 [DEBUG] [Thread-20949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:02:05.688 [DEBUG] [Thread-20949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:02:05.688 [INFO] [Thread-20949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:02:05.695 [DEBUG] [Thread-20949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:02:05.696 [DEBUG] [Thread-20949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:02:05.696 [DEBUG] [Thread-20949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:02:05.696 [DEBUG] [Thread-20949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:02:05.696 [DEBUG] [Thread-20949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:02:05.696 [DEBUG] [Thread-20949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:02:05.696 [DEBUG] [Thread-20949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:02:05.696 [DEBUG] [Thread-20949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:02:05.696 [DEBUG] [Thread-20949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:02:05.696 [DEBUG] [Thread-20949] [transport.py] [_log()] client lang: <none>
2026-04-15T15:02:05.696 [DEBUG] [Thread-20949] [transport.py] [_log()] server lang: <none>
2026-04-15T15:02:05.696 [DEBUG] [Thread-20949] [transport.py] [_log()] kex follows: False
2026-04-15T15:02:05.696 [DEBUG] [Thread-20949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:02:05.697 [DEBUG] [Thread-20949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:02:05.697 [DEBUG] [Thread-20949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:02:05.697 [DEBUG] [Thread-20949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:02:05.697 [DEBUG] [Thread-20949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:02:05.697 [DEBUG] [Thread-20949] [transport.py] [_log()] Compression: none
2026-04-15T15:02:05.697 [DEBUG] [Thread-20949] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:02:05.754 [DEBUG] [Thread-20949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:02:05.755 [DEBUG] [Thread-20949] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:02:05.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:02:05.755 [DEBUG] [Thread-20949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:02:05.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:02:05.816 [DEBUG] [Thread-20949] [transport.py] [_log()] userauth is OK
2026-04-15T15:02:05.816 [DEBUG] [Thread-20949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:02:05.816 [DEBUG] [Thread-20949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:02:05.816 [DEBUG] [Thread-20949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:02:05.816 [DEBUG] [Thread-20949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:02:05.842 [INFO] [Thread-20949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:02:05.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:02:05.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:02:06.667 [DEBUG] [Thread-20949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:02:06.668 [DEBUG] [Thread-20949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:02:06.715 [DEBUG] [Thread-20949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:02:06.715 [DEBUG] [Thread-20949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:02:06.724 [DEBUG] [Thread-20949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:02:06.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:02:06.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')
2026-04-15T15:02:06.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
2026-04-15T15:02:06.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:02:06.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:02:06.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:02:06.758 [DEBUG] [Thread-20949] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:02:08.158 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:02:08.159 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:02:15.249 [DEBUG] [Thread-20951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:02:30.259 [DEBUG] [Thread-20952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:02:30.293 [DEBUG] [Thread-20953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:02:36.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:02:36.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:02:36.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
2026-04-15T15:02:38.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 2, 20), 9.17842, 54.067, 0.0, 13.6573, 14.6576, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:02:38.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:02:20
2026-04-15T15:02:38.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:02:38.912 [DEBUG] [Thread-20954] [transport.py] [_log()] starting thread (client mode): 0xee9030d0
2026-04-15T15:02:38.912 [DEBUG] [Thread-20954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:02:38.933 [DEBUG] [Thread-20954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:02:38.933 [INFO] [Thread-20954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:02:38.936 [DEBUG] [Thread-20954] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:02:38.936 [DEBUG] [Thread-20954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:02:38.936 [DEBUG] [Thread-20954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:02:38.936 [DEBUG] [Thread-20954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:02:38.936 [DEBUG] [Thread-20954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:02:38.937 [DEBUG] [Thread-20954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:02:38.937 [DEBUG] [Thread-20954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:02:38.937 [DEBUG] [Thread-20954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:02:38.937 [DEBUG] [Thread-20954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:02:38.937 [DEBUG] [Thread-20954] [transport.py] [_log()] client lang: <none>
2026-04-15T15:02:38.937 [DEBUG] [Thread-20954] [transport.py] [_log()] server lang: <none>
2026-04-15T15:02:38.937 [DEBUG] [Thread-20954] [transport.py] [_log()] kex follows: False
2026-04-15T15:02:38.937 [DEBUG] [Thread-20954] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:02:38.937 [DEBUG] [Thread-20954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:02:38.937 [DEBUG] [Thread-20954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:02:38.937 [DEBUG] [Thread-20954] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:02:38.938 [DEBUG] [Thread-20954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:02:38.938 [DEBUG] [Thread-20954] [transport.py] [_log()] Compression: none
2026-04-15T15:02:38.938 [DEBUG] [Thread-20954] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:02:38.953 [DEBUG] [Thread-20954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:02:38.954 [DEBUG] [Thread-20954] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:02:38.954 [DEBUG] [Thread-20954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:02:38.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:02:38.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:02:38.955 [DEBUG] [Thread-20954] [transport.py] [_log()] userauth is OK
2026-04-15T15:02:38.956 [DEBUG] [Thread-20954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:02:38.956 [DEBUG] [Thread-20954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:02:38.956 [DEBUG] [Thread-20954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:02:38.956 [DEBUG] [Thread-20954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:02:38.974 [INFO] [Thread-20954] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:02:38.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:02:39.780 [DEBUG] [Thread-20954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:02:39.781 [DEBUG] [Thread-20954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:02:39.781 [DEBUG] [Thread-20954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:02:39.821 [DEBUG] [Thread-20954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:02:39.821 [DEBUG] [Thread-20954] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:02:39.824 [DEBUG] [Thread-20954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:02:39.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:02:39.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:02:39.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:02:39.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:02:39.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:02:39.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:02:39.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:02:39.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:02:39.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:02:39.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.542845 -999.00  +14.30  12.75     61   +7.00 1 1 1 1 1   888    0 8.69 42.80 ----- 11.0 12.8 334.2 19.9 21.4 -28.8 20.3 -27.1 21.2 -23.8 22.4 -26.1
2026-04-15T15:02:39.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:02:39.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:02:39.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.542845
2026-04-15T15:02:39.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:02:39.847 [DEBUG] [Thread-20954] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:02:39.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:02:39.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:02:39.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:02:39.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:02:39.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:02:20', tmtdew=9.17842, humidity=54.067, cloud=0.0, wind=13.6573, temperature=14.6576, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:01:41.808', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:02:40.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:02:40.106 [DEBUG] [Thread-20957] [transport.py] [_log()] starting thread (client mode): 0xee901ea0
2026-04-15T15:02:40.106 [DEBUG] [Thread-20957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:02:40.120 [DEBUG] [Thread-20957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:02:40.120 [INFO] [Thread-20957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:02:40.127 [DEBUG] [Thread-20957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:02:40.127 [DEBUG] [Thread-20957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:02:40.127 [DEBUG] [Thread-20957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:02:40.127 [DEBUG] [Thread-20957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:02:40.128 [DEBUG] [Thread-20957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:02:40.128 [DEBUG] [Thread-20957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:02:40.128 [DEBUG] [Thread-20957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:02:40.128 [DEBUG] [Thread-20957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:02:40.128 [DEBUG] [Thread-20957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:02:40.128 [DEBUG] [Thread-20957] [transport.py] [_log()] client lang: <none>
2026-04-15T15:02:40.128 [DEBUG] [Thread-20957] [transport.py] [_log()] server lang: <none>
2026-04-15T15:02:40.128 [DEBUG] [Thread-20957] [transport.py] [_log()] kex follows: False
2026-04-15T15:02:40.128 [DEBUG] [Thread-20957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:02:40.128 [DEBUG] [Thread-20957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:02:40.128 [DEBUG] [Thread-20957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:02:40.129 [DEBUG] [Thread-20957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:02:40.129 [DEBUG] [Thread-20957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:02:40.129 [DEBUG] [Thread-20957] [transport.py] [_log()] Compression: none
2026-04-15T15:02:40.129 [DEBUG] [Thread-20957] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:02:40.186 [DEBUG] [Thread-20957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:02:40.187 [DEBUG] [Thread-20957] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:02:40.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:02:40.188 [DEBUG] [Thread-20957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:02:40.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:02:40.243 [DEBUG] [Thread-20957] [transport.py] [_log()] userauth is OK
2026-04-15T15:02:40.244 [DEBUG] [Thread-20957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:02:40.244 [DEBUG] [Thread-20957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:02:40.244 [DEBUG] [Thread-20957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:02:40.244 [DEBUG] [Thread-20957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:02:40.271 [INFO] [Thread-20957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:02:40.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:02:40.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:02:41.112 [DEBUG] [Thread-20957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:02:41.112 [DEBUG] [Thread-20957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:02:41.160 [DEBUG] [Thread-20957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:02:41.160 [DEBUG] [Thread-20957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:02:41.168 [DEBUG] [Thread-20957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:02:41.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:02:41.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')
2026-04-15T15:02:41.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
2026-04-15T15:02:41.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:02:41.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:02:41.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:02:41.200 [DEBUG] [Thread-20957] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:02:45.325 [DEBUG] [Thread-20959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:03:00.371 [DEBUG] [Thread-20960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:03:08.300 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:03:08.301 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:03:11.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:03:11.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:03:11.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:03:12.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 2, 56), 9.15741, 53.9149, 0.0, 12.5467, 14.3428, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:03:12.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:02:56
2026-04-15T15:03:13.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:03:13.472 [DEBUG] [Thread-20961] [transport.py] [_log()] starting thread (client mode): 0xf1337610
2026-04-15T15:03:13.472 [DEBUG] [Thread-20961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:03:13.488 [DEBUG] [Thread-20961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:03:13.488 [INFO] [Thread-20961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:03:13.491 [DEBUG] [Thread-20961] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:03:13.491 [DEBUG] [Thread-20961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:03:13.491 [DEBUG] [Thread-20961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:03:13.491 [DEBUG] [Thread-20961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:03:13.492 [DEBUG] [Thread-20961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:03:13.492 [DEBUG] [Thread-20961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:03:13.492 [DEBUG] [Thread-20961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:03:13.492 [DEBUG] [Thread-20961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:03:13.492 [DEBUG] [Thread-20961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:03:13.492 [DEBUG] [Thread-20961] [transport.py] [_log()] client lang: <none>
2026-04-15T15:03:13.492 [DEBUG] [Thread-20961] [transport.py] [_log()] server lang: <none>
2026-04-15T15:03:13.492 [DEBUG] [Thread-20961] [transport.py] [_log()] kex follows: False
2026-04-15T15:03:13.492 [DEBUG] [Thread-20961] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:03:13.492 [DEBUG] [Thread-20961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:03:13.492 [DEBUG] [Thread-20961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:03:13.492 [DEBUG] [Thread-20961] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:03:13.492 [DEBUG] [Thread-20961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:03:13.493 [DEBUG] [Thread-20961] [transport.py] [_log()] Compression: none
2026-04-15T15:03:13.493 [DEBUG] [Thread-20961] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:03:13.511 [DEBUG] [Thread-20961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:03:13.511 [DEBUG] [Thread-20961] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:03:13.512 [DEBUG] [Thread-20961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:03:13.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:03:13.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:03:13.513 [DEBUG] [Thread-20961] [transport.py] [_log()] userauth is OK
2026-04-15T15:03:13.513 [DEBUG] [Thread-20961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:03:13.513 [DEBUG] [Thread-20961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:03:13.513 [DEBUG] [Thread-20961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:03:13.513 [DEBUG] [Thread-20961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:03:13.540 [INFO] [Thread-20961] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:03:13.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:03:14.296 [DEBUG] [Thread-20961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:03:14.297 [DEBUG] [Thread-20961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:03:14.297 [DEBUG] [Thread-20961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:03:14.338 [DEBUG] [Thread-20961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:03:14.338 [DEBUG] [Thread-20961] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:03:14.341 [DEBUG] [Thread-20961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:03:14.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:03:14.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:03:14.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:03:14.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:03:14.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:03:14.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:03:14.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:03:14.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:03:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:03:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.543539 -999.00  +14.40  15.70     60   +6.80 1 1 1 1 1   888    0 8.56 36.26 ----- 15.1 15.7 307.0 20.8 21.5 -28.2 20.4 -28.7 21.3 -27.9 22.5 -25.8
2026-04-15T15:03:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:03:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:03:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.543539
2026-04-15T15:03:14.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:03:14.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:03:14.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:03:14.368 [DEBUG] [Thread-20961] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:03:14.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:03:14.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:03:14.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:02:56', tmtdew=9.15741, humidity=53.9149, cloud=0.0, wind=12.5467, temperature=14.3428, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:02:41.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:03:14.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:03:14.621 [DEBUG] [Thread-20964] [transport.py] [_log()] starting thread (client mode): 0xee98a620
2026-04-15T15:03:14.621 [DEBUG] [Thread-20964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:03:14.635 [DEBUG] [Thread-20964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:03:14.635 [INFO] [Thread-20964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:03:14.643 [DEBUG] [Thread-20964] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:03:14.643 [DEBUG] [Thread-20964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:03:14.643 [DEBUG] [Thread-20964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:03:14.644 [DEBUG] [Thread-20964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:03:14.644 [DEBUG] [Thread-20964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:03:14.644 [DEBUG] [Thread-20964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:03:14.644 [DEBUG] [Thread-20964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:03:14.644 [DEBUG] [Thread-20964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:03:14.644 [DEBUG] [Thread-20964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:03:14.644 [DEBUG] [Thread-20964] [transport.py] [_log()] client lang: <none>
2026-04-15T15:03:14.644 [DEBUG] [Thread-20964] [transport.py] [_log()] server lang: <none>
2026-04-15T15:03:14.644 [DEBUG] [Thread-20964] [transport.py] [_log()] kex follows: False
2026-04-15T15:03:14.644 [DEBUG] [Thread-20964] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:03:14.644 [DEBUG] [Thread-20964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:03:14.644 [DEBUG] [Thread-20964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:03:14.645 [DEBUG] [Thread-20964] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:03:14.645 [DEBUG] [Thread-20964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:03:14.645 [DEBUG] [Thread-20964] [transport.py] [_log()] Compression: none
2026-04-15T15:03:14.645 [DEBUG] [Thread-20964] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:03:14.703 [DEBUG] [Thread-20964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:03:14.703 [DEBUG] [Thread-20964] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:03:14.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:03:14.704 [DEBUG] [Thread-20964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:03:14.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:03:14.759 [DEBUG] [Thread-20964] [transport.py] [_log()] userauth is OK
2026-04-15T15:03:14.759 [DEBUG] [Thread-20964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:03:14.759 [DEBUG] [Thread-20964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:03:14.760 [DEBUG] [Thread-20964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:03:14.760 [DEBUG] [Thread-20964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:03:14.784 [INFO] [Thread-20964] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:03:14.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:03:14.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:03:15.403 [DEBUG] [Thread-20966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:03:15.603 [DEBUG] [Thread-20964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:03:15.603 [DEBUG] [Thread-20964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:03:15.652 [DEBUG] [Thread-20964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:03:15.652 [DEBUG] [Thread-20964] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:03:15.662 [DEBUG] [Thread-20964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:03:15.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:03:15.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')
2026-04-15T15:03:15.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
2026-04-15T15:03:15.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:03:15.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:03:15.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:03:15.697 [DEBUG] [Thread-20964] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:03:30.372 [DEBUG] [Thread-20967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:03:30.442 [DEBUG] [Thread-20968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:03:45.471 [DEBUG] [Thread-20969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:03:45.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:03:45.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:03:45.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
2026-04-15T15:03:47.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 3, 32), 8.86351, 54.9587, 0.0, 11.453, 14.2101, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:03:47.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:03:32
2026-04-15T15:03:47.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:03:47.855 [DEBUG] [Thread-20970] [transport.py] [_log()] starting thread (client mode): 0xf13cbd00
2026-04-15T15:03:47.855 [DEBUG] [Thread-20970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:03:47.876 [DEBUG] [Thread-20970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:03:47.876 [INFO] [Thread-20970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:03:47.877 [DEBUG] [Thread-20970] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:03:47.877 [DEBUG] [Thread-20970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:03:47.877 [DEBUG] [Thread-20970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:03:47.877 [DEBUG] [Thread-20970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:03:47.877 [DEBUG] [Thread-20970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:03:47.877 [DEBUG] [Thread-20970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:03:47.878 [DEBUG] [Thread-20970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:03:47.878 [DEBUG] [Thread-20970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:03:47.878 [DEBUG] [Thread-20970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:03:47.878 [DEBUG] [Thread-20970] [transport.py] [_log()] client lang: <none>
2026-04-15T15:03:47.878 [DEBUG] [Thread-20970] [transport.py] [_log()] server lang: <none>
2026-04-15T15:03:47.878 [DEBUG] [Thread-20970] [transport.py] [_log()] kex follows: False
2026-04-15T15:03:47.878 [DEBUG] [Thread-20970] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:03:47.878 [DEBUG] [Thread-20970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:03:47.878 [DEBUG] [Thread-20970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:03:47.878 [DEBUG] [Thread-20970] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:03:47.878 [DEBUG] [Thread-20970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:03:47.878 [DEBUG] [Thread-20970] [transport.py] [_log()] Compression: none
2026-04-15T15:03:47.878 [DEBUG] [Thread-20970] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:03:47.894 [DEBUG] [Thread-20970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:03:47.894 [DEBUG] [Thread-20970] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:03:47.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:03:47.895 [DEBUG] [Thread-20970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:03:47.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:03:47.896 [DEBUG] [Thread-20970] [transport.py] [_log()] userauth is OK
2026-04-15T15:03:47.896 [DEBUG] [Thread-20970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:03:47.896 [DEBUG] [Thread-20970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:03:47.896 [DEBUG] [Thread-20970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:03:47.897 [DEBUG] [Thread-20970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:03:47.915 [INFO] [Thread-20970] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:03:47.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:03:48.686 [DEBUG] [Thread-20970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:03:48.687 [DEBUG] [Thread-20970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:03:48.687 [DEBUG] [Thread-20970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:03:48.727 [DEBUG] [Thread-20970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:03:48.727 [DEBUG] [Thread-20970] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:03:48.730 [DEBUG] [Thread-20970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:03:48.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:03:48.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:03:48.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:03:48.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:03:48.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:03:48.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:03:48.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:03:48.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:03:48.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:03:48.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.543887 -999.00  +14.10  15.72     62   +7.00 1 1 1 1 1   888    0 8.60 35.51 ----- 13.4 15.7 312.6 18.5 21.5 -28.3 20.3 -28.0 21.2 -24.5 22.5 -26.3
2026-04-15T15:03:48.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:03:48.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:03:48.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.543887
2026-04-15T15:03:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:03:48.755 [DEBUG] [Thread-20970] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:03:48.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:03:48.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:03:48.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:03:48.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:03:48.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:03:32', tmtdew=8.86351, humidity=54.9587, cloud=0.0, wind=11.453, temperature=14.2101, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:03:11.837', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:03:49.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:03:49.013 [DEBUG] [Thread-20973] [transport.py] [_log()] starting thread (client mode): 0xee989cf0
2026-04-15T15:03:49.013 [DEBUG] [Thread-20973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:03:49.027 [DEBUG] [Thread-20973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:03:49.027 [INFO] [Thread-20973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:03:49.037 [DEBUG] [Thread-20973] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:03:49.037 [DEBUG] [Thread-20973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:03:49.037 [DEBUG] [Thread-20973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:03:49.037 [DEBUG] [Thread-20973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:03:49.037 [DEBUG] [Thread-20973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:03:49.037 [DEBUG] [Thread-20973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:03:49.037 [DEBUG] [Thread-20973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:03:49.037 [DEBUG] [Thread-20973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:03:49.037 [DEBUG] [Thread-20973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:03:49.037 [DEBUG] [Thread-20973] [transport.py] [_log()] client lang: <none>
2026-04-15T15:03:49.038 [DEBUG] [Thread-20973] [transport.py] [_log()] server lang: <none>
2026-04-15T15:03:49.038 [DEBUG] [Thread-20973] [transport.py] [_log()] kex follows: False
2026-04-15T15:03:49.038 [DEBUG] [Thread-20973] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:03:49.038 [DEBUG] [Thread-20973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:03:49.038 [DEBUG] [Thread-20973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:03:49.038 [DEBUG] [Thread-20973] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:03:49.038 [DEBUG] [Thread-20973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:03:49.038 [DEBUG] [Thread-20973] [transport.py] [_log()] Compression: none
2026-04-15T15:03:49.038 [DEBUG] [Thread-20973] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:03:49.095 [DEBUG] [Thread-20973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:03:49.096 [DEBUG] [Thread-20973] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:03:49.096 [DEBUG] [Thread-20973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:03:49.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:03:49.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:03:49.151 [DEBUG] [Thread-20973] [transport.py] [_log()] userauth is OK
2026-04-15T15:03:49.152 [DEBUG] [Thread-20973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:03:49.152 [DEBUG] [Thread-20973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:03:49.152 [DEBUG] [Thread-20973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:03:49.152 [DEBUG] [Thread-20973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:03:49.177 [INFO] [Thread-20973] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:03:49.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:03:49.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:03:49.999 [DEBUG] [Thread-20973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:03:50.000 [DEBUG] [Thread-20973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:03:50.047 [DEBUG] [Thread-20973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:03:50.047 [DEBUG] [Thread-20973] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:03:50.056 [DEBUG] [Thread-20973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:03:50.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:03:50.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')
2026-04-15T15:03:50.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
2026-04-15T15:03:50.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:03:50.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:03:50.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:03:50.090 [DEBUG] [Thread-20973] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:04:00.502 [DEBUG] [Thread-20975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:04:08.448 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:04:08.449 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:04:15.548 [DEBUG] [Thread-20976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:04:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:04:20.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:04:20.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
2026-04-15T15:04:21.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 4, 7), 9.04605, 54.2794, 0.0, 10.6416, 14.1935, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:04:21.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:04:07
2026-04-15T15:04:21.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:04:22.269 [DEBUG] [Thread-20977] [transport.py] [_log()] starting thread (client mode): 0xee98e6e0
2026-04-15T15:04:22.269 [DEBUG] [Thread-20977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:04:22.288 [DEBUG] [Thread-20977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:04:22.288 [INFO] [Thread-20977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:04:22.291 [DEBUG] [Thread-20977] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:04:22.291 [DEBUG] [Thread-20977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:04:22.291 [DEBUG] [Thread-20977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:04:22.291 [DEBUG] [Thread-20977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:04:22.291 [DEBUG] [Thread-20977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:04:22.291 [DEBUG] [Thread-20977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:04:22.291 [DEBUG] [Thread-20977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:04:22.291 [DEBUG] [Thread-20977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:04:22.292 [DEBUG] [Thread-20977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:04:22.292 [DEBUG] [Thread-20977] [transport.py] [_log()] client lang: <none>
2026-04-15T15:04:22.292 [DEBUG] [Thread-20977] [transport.py] [_log()] server lang: <none>
2026-04-15T15:04:22.292 [DEBUG] [Thread-20977] [transport.py] [_log()] kex follows: False
2026-04-15T15:04:22.292 [DEBUG] [Thread-20977] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:04:22.292 [DEBUG] [Thread-20977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:04:22.292 [DEBUG] [Thread-20977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:04:22.292 [DEBUG] [Thread-20977] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:04:22.292 [DEBUG] [Thread-20977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:04:22.292 [DEBUG] [Thread-20977] [transport.py] [_log()] Compression: none
2026-04-15T15:04:22.292 [DEBUG] [Thread-20977] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:04:22.309 [DEBUG] [Thread-20977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:04:22.309 [DEBUG] [Thread-20977] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:04:22.310 [DEBUG] [Thread-20977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:04:22.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:04:22.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:04:22.311 [DEBUG] [Thread-20977] [transport.py] [_log()] userauth is OK
2026-04-15T15:04:22.311 [DEBUG] [Thread-20977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:04:22.311 [DEBUG] [Thread-20977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:04:22.311 [DEBUG] [Thread-20977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:04:22.312 [DEBUG] [Thread-20977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:04:22.330 [INFO] [Thread-20977] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:04:22.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:04:22.918 [DEBUG] [Thread-20977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:04:22.918 [DEBUG] [Thread-20977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:04:22.919 [DEBUG] [Thread-20977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:04:22.959 [DEBUG] [Thread-20977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:04:22.959 [DEBUG] [Thread-20977] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:04:22.961 [DEBUG] [Thread-20977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:04:22.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:04:22.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:04:22.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:04:22.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:04:22.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:04:22.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:04:22.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:04:22.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:04:22.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:04:22.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.544581 -999.00  +14.10  13.86     61   +6.80 1 1 1 1 1   888    0 8.49 30.92 ----- 7.8 13.9 323.8 14.9 21.6 -28.4 20.4 -27.1 21.4 -23.6 22.6 -26.0
2026-04-15T15:04:22.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:04:22.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:04:22.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.544581
2026-04-15T15:04:22.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:04:22.979 [DEBUG] [Thread-20977] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:04:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:04:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:04:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:04:22.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:04:22.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:04:07', tmtdew=9.04605, humidity=54.2794, cloud=0.0, wind=10.6416, temperature=14.1935, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:04:11.798', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:04:23.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:04:23.236 [DEBUG] [Thread-20980] [transport.py] [_log()] starting thread (client mode): 0xee98b820
2026-04-15T15:04:23.236 [DEBUG] [Thread-20980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:04:23.250 [DEBUG] [Thread-20980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:04:23.250 [INFO] [Thread-20980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:04:23.257 [DEBUG] [Thread-20980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:04:23.258 [DEBUG] [Thread-20980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:04:23.258 [DEBUG] [Thread-20980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:04:23.258 [DEBUG] [Thread-20980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:04:23.258 [DEBUG] [Thread-20980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:04:23.258 [DEBUG] [Thread-20980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:04:23.258 [DEBUG] [Thread-20980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:04:23.258 [DEBUG] [Thread-20980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:04:23.258 [DEBUG] [Thread-20980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:04:23.258 [DEBUG] [Thread-20980] [transport.py] [_log()] client lang: <none>
2026-04-15T15:04:23.258 [DEBUG] [Thread-20980] [transport.py] [_log()] server lang: <none>
2026-04-15T15:04:23.258 [DEBUG] [Thread-20980] [transport.py] [_log()] kex follows: False
2026-04-15T15:04:23.258 [DEBUG] [Thread-20980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:04:23.259 [DEBUG] [Thread-20980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:04:23.259 [DEBUG] [Thread-20980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:04:23.259 [DEBUG] [Thread-20980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:04:23.259 [DEBUG] [Thread-20980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:04:23.259 [DEBUG] [Thread-20980] [transport.py] [_log()] Compression: none
2026-04-15T15:04:23.259 [DEBUG] [Thread-20980] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:04:23.315 [DEBUG] [Thread-20980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:04:23.315 [DEBUG] [Thread-20980] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:04:23.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:04:23.316 [DEBUG] [Thread-20980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:04:23.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:04:23.371 [DEBUG] [Thread-20980] [transport.py] [_log()] userauth is OK
2026-04-15T15:04:23.371 [DEBUG] [Thread-20980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:04:23.371 [DEBUG] [Thread-20980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:04:23.371 [DEBUG] [Thread-20980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:04:23.371 [DEBUG] [Thread-20980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:04:23.397 [INFO] [Thread-20980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:04:23.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:04:23.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:04:24.210 [DEBUG] [Thread-20980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:04:24.210 [DEBUG] [Thread-20980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:04:24.258 [DEBUG] [Thread-20980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:04:24.258 [DEBUG] [Thread-20980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:04:24.267 [DEBUG] [Thread-20980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:04:24.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:04:24.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')
2026-04-15T15:04: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') -> 00000000
2026-04-15T15:04:24.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:04:24.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:04:24.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:04:24.301 [DEBUG] [Thread-20980] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:04:30.464 [DEBUG] [Thread-20982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:04:30.581 [DEBUG] [Thread-20983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:04:45.626 [DEBUG] [Thread-20984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:04:54.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:04:54.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:04:54.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
2026-04-15T15:04:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 4, 43), 9.5312, 52.7905, 0.0, 10.2348, 14.82, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:04:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:04:43
2026-04-15T15:04:56.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:04:56.570 [DEBUG] [Thread-20985] [transport.py] [_log()] starting thread (client mode): 0xf13e0d30
2026-04-15T15:04:56.571 [DEBUG] [Thread-20985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:04:56.591 [DEBUG] [Thread-20985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:04:56.591 [INFO] [Thread-20985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:04:56.592 [DEBUG] [Thread-20985] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:04:56.592 [DEBUG] [Thread-20985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:04:56.592 [DEBUG] [Thread-20985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:04:56.592 [DEBUG] [Thread-20985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:04:56.592 [DEBUG] [Thread-20985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:04:56.592 [DEBUG] [Thread-20985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:04:56.592 [DEBUG] [Thread-20985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:04:56.593 [DEBUG] [Thread-20985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:04:56.593 [DEBUG] [Thread-20985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:04:56.593 [DEBUG] [Thread-20985] [transport.py] [_log()] client lang: <none>
2026-04-15T15:04:56.593 [DEBUG] [Thread-20985] [transport.py] [_log()] server lang: <none>
2026-04-15T15:04:56.593 [DEBUG] [Thread-20985] [transport.py] [_log()] kex follows: False
2026-04-15T15:04:56.593 [DEBUG] [Thread-20985] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:04:56.593 [DEBUG] [Thread-20985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:04:56.593 [DEBUG] [Thread-20985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:04:56.593 [DEBUG] [Thread-20985] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:04:56.593 [DEBUG] [Thread-20985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:04:56.593 [DEBUG] [Thread-20985] [transport.py] [_log()] Compression: none
2026-04-15T15:04:56.593 [DEBUG] [Thread-20985] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:04:56.609 [DEBUG] [Thread-20985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:04:56.609 [DEBUG] [Thread-20985] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:04:56.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:04:56.610 [DEBUG] [Thread-20985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:04:56.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:04:56.611 [DEBUG] [Thread-20985] [transport.py] [_log()] userauth is OK
2026-04-15T15:04:56.611 [DEBUG] [Thread-20985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:04:56.611 [DEBUG] [Thread-20985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:04:56.611 [DEBUG] [Thread-20985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:04:56.611 [DEBUG] [Thread-20985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:04:56.624 [INFO] [Thread-20985] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:04:56.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:04:57.230 [DEBUG] [Thread-20985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:04:57.230 [DEBUG] [Thread-20985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:04:57.230 [DEBUG] [Thread-20985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:04:57.270 [DEBUG] [Thread-20985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:04:57.271 [DEBUG] [Thread-20985] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:04:57.272 [DEBUG] [Thread-20985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:04:57.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:04:57.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:04:57.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:04:57.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:04:57.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:04:57.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:04:57.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:04:57.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:04:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:04:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.544928 -999.00  +14.00   9.20     60   +6.50 1 1 1 1 1   888    0 8.28 25.70 ----- 6.4 9.2 313.2 13.8 21.6 -28.8 20.4 -27.8 21.4 -25.7 22.7 -25.7
2026-04-15T15:04:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:04:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:04:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.544928
2026-04-15T15:04:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:04:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:04:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:04:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:04:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:04:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:04:43', tmtdew=9.5312, humidity=52.7905, cloud=0.0, wind=10.2348, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:04:41.779', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:04:57.293 [DEBUG] [Thread-20985] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:04:57.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:04:57.511 [DEBUG] [Thread-20988] [transport.py] [_log()] starting thread (client mode): 0xf13ef400
2026-04-15T15:04:57.511 [DEBUG] [Thread-20988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:04:57.525 [DEBUG] [Thread-20988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:04:57.525 [INFO] [Thread-20988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:04:57.532 [DEBUG] [Thread-20988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:04:57.533 [DEBUG] [Thread-20988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:04:57.533 [DEBUG] [Thread-20988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:04:57.533 [DEBUG] [Thread-20988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:04:57.533 [DEBUG] [Thread-20988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:04:57.533 [DEBUG] [Thread-20988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:04:57.533 [DEBUG] [Thread-20988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:04:57.533 [DEBUG] [Thread-20988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:04:57.533 [DEBUG] [Thread-20988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:04:57.533 [DEBUG] [Thread-20988] [transport.py] [_log()] client lang: <none>
2026-04-15T15:04:57.533 [DEBUG] [Thread-20988] [transport.py] [_log()] server lang: <none>
2026-04-15T15:04:57.533 [DEBUG] [Thread-20988] [transport.py] [_log()] kex follows: False
2026-04-15T15:04:57.533 [DEBUG] [Thread-20988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:04:57.534 [DEBUG] [Thread-20988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:04:57.534 [DEBUG] [Thread-20988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:04:57.534 [DEBUG] [Thread-20988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:04:57.534 [DEBUG] [Thread-20988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:04:57.534 [DEBUG] [Thread-20988] [transport.py] [_log()] Compression: none
2026-04-15T15:04:57.534 [DEBUG] [Thread-20988] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:04:57.590 [DEBUG] [Thread-20988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:04:57.591 [DEBUG] [Thread-20988] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:04:57.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:04:57.591 [DEBUG] [Thread-20988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:04:57.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:04:57.647 [DEBUG] [Thread-20988] [transport.py] [_log()] userauth is OK
2026-04-15T15:04:57.647 [DEBUG] [Thread-20988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:04:57.648 [DEBUG] [Thread-20988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:04:57.648 [DEBUG] [Thread-20988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:04:57.648 [DEBUG] [Thread-20988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:04:57.673 [INFO] [Thread-20988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:04:57.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:04:57.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:04:58.479 [DEBUG] [Thread-20988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:04:58.479 [DEBUG] [Thread-20988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:04:58.527 [DEBUG] [Thread-20988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:04:58.527 [DEBUG] [Thread-20988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:04:58.536 [DEBUG] [Thread-20988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:04:58.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:04:58.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')
2026-04-15T15:04:58.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
2026-04-15T15:04:58.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:04:58.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:04:58.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:04:58.572 [DEBUG] [Thread-20988] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:05:00.656 [DEBUG] [Thread-20990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:05:08.585 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:05:08.586 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:05:15.706 [DEBUG] [Thread-20991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:05:28.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:05:28.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:05:28.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
2026-04-15T15:05:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 5, 19), 9.07398, 54.3953, 0.0, 12.3336, 14.726, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:05:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:05:19
2026-04-15T15:05:30.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:05:30.538 [DEBUG] [Thread-20992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:05:30.655 [DEBUG] [Thread-20993] [transport.py] [_log()] starting thread (client mode): 0xee98e3b0
2026-04-15T15:05:30.656 [DEBUG] [Thread-20993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:05:30.669 [DEBUG] [Thread-20993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:05:30.669 [INFO] [Thread-20993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:05:30.672 [DEBUG] [Thread-20993] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:05:30.672 [DEBUG] [Thread-20993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:05:30.672 [DEBUG] [Thread-20993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:05:30.673 [DEBUG] [Thread-20993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:05:30.673 [DEBUG] [Thread-20993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:05:30.673 [DEBUG] [Thread-20993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:05:30.673 [DEBUG] [Thread-20993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:05:30.673 [DEBUG] [Thread-20993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:05:30.673 [DEBUG] [Thread-20993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:05:30.673 [DEBUG] [Thread-20993] [transport.py] [_log()] client lang: <none>
2026-04-15T15:05:30.673 [DEBUG] [Thread-20993] [transport.py] [_log()] server lang: <none>
2026-04-15T15:05:30.673 [DEBUG] [Thread-20993] [transport.py] [_log()] kex follows: False
2026-04-15T15:05:30.673 [DEBUG] [Thread-20993] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:05:30.673 [DEBUG] [Thread-20993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:05:30.673 [DEBUG] [Thread-20993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:05:30.674 [DEBUG] [Thread-20993] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:05:30.674 [DEBUG] [Thread-20993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:05:30.674 [DEBUG] [Thread-20993] [transport.py] [_log()] Compression: none
2026-04-15T15:05:30.674 [DEBUG] [Thread-20993] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:05:30.693 [DEBUG] [Thread-20993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:05:30.693 [DEBUG] [Thread-20993] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:05:30.694 [DEBUG] [Thread-20993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:05:30.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:05:30.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:05:30.695 [DEBUG] [Thread-20993] [transport.py] [_log()] userauth is OK
2026-04-15T15:05:30.695 [DEBUG] [Thread-20993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:05:30.695 [DEBUG] [Thread-20993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:05:30.695 [DEBUG] [Thread-20993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:05:30.695 [DEBUG] [Thread-20993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:05:30.712 [INFO] [Thread-20993] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:05:30.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:05:30.737 [DEBUG] [Thread-20995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:05:31.363 [DEBUG] [Thread-20993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:05:31.363 [DEBUG] [Thread-20993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:05:31.364 [DEBUG] [Thread-20993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:05:31.404 [DEBUG] [Thread-20993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:05:31.404 [DEBUG] [Thread-20993] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:05:31.407 [DEBUG] [Thread-20993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:05:31.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:05:31.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:05:31.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:05:31.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:05:31.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:05:31.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:05:31.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:05:31.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:05:31.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:05:31.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.545275 -999.00  +14.20   9.30     61   +6.90 1 1 1 1 1   888    0 8.20 23.64 ----- 10.2 9.3 283.4 12.4 21.7 -28.1 20.6 -27.1 21.6 -24.7 22.8 -25.8
2026-04-15T15:05:31.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:05:31.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:05:31.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.545275
2026-04-15T15:05:31.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:05:31.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:05:31.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:05:31.434 [DEBUG] [Thread-20993] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:05:31.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:05:31.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:05:31.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:05:19', tmtdew=9.07398, humidity=54.3953, cloud=0.0, wind=12.3336, temperature=14.726, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:05:11.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:05:31.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:05:31.683 [DEBUG] [Thread-20997] [transport.py] [_log()] starting thread (client mode): 0xee9bf910
2026-04-15T15:05:31.683 [DEBUG] [Thread-20997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:05:31.698 [DEBUG] [Thread-20997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:05:31.698 [INFO] [Thread-20997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:05:31.706 [DEBUG] [Thread-20997] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:05:31.706 [DEBUG] [Thread-20997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:05:31.706 [DEBUG] [Thread-20997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:05:31.706 [DEBUG] [Thread-20997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:05:31.706 [DEBUG] [Thread-20997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:05:31.706 [DEBUG] [Thread-20997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:05:31.706 [DEBUG] [Thread-20997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:05:31.707 [DEBUG] [Thread-20997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:05:31.707 [DEBUG] [Thread-20997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:05:31.707 [DEBUG] [Thread-20997] [transport.py] [_log()] client lang: <none>
2026-04-15T15:05:31.707 [DEBUG] [Thread-20997] [transport.py] [_log()] server lang: <none>
2026-04-15T15:05:31.707 [DEBUG] [Thread-20997] [transport.py] [_log()] kex follows: False
2026-04-15T15:05:31.707 [DEBUG] [Thread-20997] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:05:31.707 [DEBUG] [Thread-20997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:05:31.707 [DEBUG] [Thread-20997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:05:31.707 [DEBUG] [Thread-20997] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:05:31.707 [DEBUG] [Thread-20997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:05:31.707 [DEBUG] [Thread-20997] [transport.py] [_log()] Compression: none
2026-04-15T15:05:31.708 [DEBUG] [Thread-20997] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:05:31.763 [DEBUG] [Thread-20997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:05:31.764 [DEBUG] [Thread-20997] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:05:31.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:05:31.765 [DEBUG] [Thread-20997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:05:31.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:05:31.819 [DEBUG] [Thread-20997] [transport.py] [_log()] userauth is OK
2026-04-15T15:05:31.819 [DEBUG] [Thread-20997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:05:31.820 [DEBUG] [Thread-20997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:05:31.820 [DEBUG] [Thread-20997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:05:31.820 [DEBUG] [Thread-20997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:05:31.845 [INFO] [Thread-20997] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:05:31.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:05:31.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:05:32.696 [DEBUG] [Thread-20997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:05:32.696 [DEBUG] [Thread-20997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:05:32.744 [DEBUG] [Thread-20997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:05:32.744 [DEBUG] [Thread-20997] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:05:32.753 [DEBUG] [Thread-20997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:05:32.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:05:32.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')
2026-04-15T15:05:32.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
2026-04-15T15:05:32.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:05:32.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:05:32.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:05:32.790 [DEBUG] [Thread-20997] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:05:45.769 [DEBUG] [Thread-20999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:06:00.812 [DEBUG] [Thread-21000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:06:02.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:06:02.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:06:02.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
2026-04-15T15:06:04.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 5, 54), 9.56977, 52.9147, 0.0, 8.24112, 14.7082, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:06:04.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:05:54
2026-04-15T15:06:04.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:06:04.900 [DEBUG] [Thread-21001] [transport.py] [_log()] starting thread (client mode): 0xee9ade70
2026-04-15T15:06:04.900 [DEBUG] [Thread-21001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:06:04.918 [DEBUG] [Thread-21001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:06:04.918 [INFO] [Thread-21001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:06:04.921 [DEBUG] [Thread-21001] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:06:04.921 [DEBUG] [Thread-21001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:06:04.921 [DEBUG] [Thread-21001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:06:04.921 [DEBUG] [Thread-21001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:06:04.921 [DEBUG] [Thread-21001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:06:04.921 [DEBUG] [Thread-21001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:06:04.921 [DEBUG] [Thread-21001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:06:04.922 [DEBUG] [Thread-21001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:06:04.922 [DEBUG] [Thread-21001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:06:04.922 [DEBUG] [Thread-21001] [transport.py] [_log()] client lang: <none>
2026-04-15T15:06:04.922 [DEBUG] [Thread-21001] [transport.py] [_log()] server lang: <none>
2026-04-15T15:06:04.922 [DEBUG] [Thread-21001] [transport.py] [_log()] kex follows: False
2026-04-15T15:06:04.922 [DEBUG] [Thread-21001] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:06:04.922 [DEBUG] [Thread-21001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:06:04.922 [DEBUG] [Thread-21001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:06:04.922 [DEBUG] [Thread-21001] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:06:04.922 [DEBUG] [Thread-21001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:06:04.922 [DEBUG] [Thread-21001] [transport.py] [_log()] Compression: none
2026-04-15T15:06:04.923 [DEBUG] [Thread-21001] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:06:04.932 [DEBUG] [Thread-21001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:06:04.932 [DEBUG] [Thread-21001] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:06:04.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:06:04.933 [DEBUG] [Thread-21001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:06:04.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:06:04.934 [DEBUG] [Thread-21001] [transport.py] [_log()] userauth is OK
2026-04-15T15:06:04.934 [DEBUG] [Thread-21001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:06:04.934 [DEBUG] [Thread-21001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:06:04.934 [DEBUG] [Thread-21001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:06:04.934 [DEBUG] [Thread-21001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:06:04.951 [INFO] [Thread-21001] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:06:04.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:06:05.571 [DEBUG] [Thread-21001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:06:05.571 [DEBUG] [Thread-21001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:06:05.572 [DEBUG] [Thread-21001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:06:05.612 [DEBUG] [Thread-21001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:06:05.612 [DEBUG] [Thread-21001] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:06:05.615 [DEBUG] [Thread-21001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:06:05.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:06:05.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:06:05.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:06:05.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:06:05.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:06:05.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:06:05.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:06:05.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:06:05.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:06:05.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.545623 -999.00  +14.30   6.72     60   +6.70 1 1 1 1 1   888    0 8.02 20.41 ----- 10.2 6.7 305.4 11.9 21.7 -28.5 20.6 -26.9 21.5 -23.7 22.9 -26.1
2026-04-15T15:06:05.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:06:05.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:06:05.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.545623
2026-04-15T15:06:05.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:06:05.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:06:05.634 [DEBUG] [Thread-21001] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:06:05.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:06:05.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:06:05.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:06:05.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:05:54', tmtdew=9.56977, humidity=52.9147, cloud=0.0, wind=8.24112, temperature=14.7082, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:05:41.827', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:06:05.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:06:05.880 [DEBUG] [Thread-21004] [transport.py] [_log()] starting thread (client mode): 0xee9ad1e0
2026-04-15T15:06:05.880 [DEBUG] [Thread-21004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:06:05.894 [DEBUG] [Thread-21004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:06:05.894 [INFO] [Thread-21004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:06:05.902 [DEBUG] [Thread-21004] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:06:05.902 [DEBUG] [Thread-21004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:06:05.902 [DEBUG] [Thread-21004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:06:05.902 [DEBUG] [Thread-21004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:06:05.902 [DEBUG] [Thread-21004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:06:05.902 [DEBUG] [Thread-21004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:06:05.902 [DEBUG] [Thread-21004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:06:05.902 [DEBUG] [Thread-21004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:06:05.902 [DEBUG] [Thread-21004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:06:05.902 [DEBUG] [Thread-21004] [transport.py] [_log()] client lang: <none>
2026-04-15T15:06:05.902 [DEBUG] [Thread-21004] [transport.py] [_log()] server lang: <none>
2026-04-15T15:06:05.903 [DEBUG] [Thread-21004] [transport.py] [_log()] kex follows: False
2026-04-15T15:06:05.903 [DEBUG] [Thread-21004] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:06:05.903 [DEBUG] [Thread-21004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:06:05.903 [DEBUG] [Thread-21004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:06:05.903 [DEBUG] [Thread-21004] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:06:05.903 [DEBUG] [Thread-21004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:06:05.903 [DEBUG] [Thread-21004] [transport.py] [_log()] Compression: none
2026-04-15T15:06:05.903 [DEBUG] [Thread-21004] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:06:05.962 [DEBUG] [Thread-21004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:06:05.963 [DEBUG] [Thread-21004] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:06:05.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:06:05.963 [DEBUG] [Thread-21004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:06:05.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:06:06.019 [DEBUG] [Thread-21004] [transport.py] [_log()] userauth is OK
2026-04-15T15:06:06.019 [DEBUG] [Thread-21004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:06:06.019 [DEBUG] [Thread-21004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:06:06.019 [DEBUG] [Thread-21004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:06:06.019 [DEBUG] [Thread-21004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:06:06.039 [INFO] [Thread-21004] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:06:06.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:06:06.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:06:06.862 [DEBUG] [Thread-21004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:06:06.862 [DEBUG] [Thread-21004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:06:06.910 [DEBUG] [Thread-21004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:06:06.910 [DEBUG] [Thread-21004] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:06:06.919 [DEBUG] [Thread-21004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:06:06.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:06:06.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')
2026-04-15T15:06:06.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
2026-04-15T15:06:06.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:06:06.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:06:06.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:06:06.954 [DEBUG] [Thread-21004] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:06:08.726 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:06:08.727 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:06:15.842 [DEBUG] [Thread-21006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:06:30.612 [DEBUG] [Thread-21007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:06:30.879 [DEBUG] [Thread-21008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:06:36.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:06:36.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:06:36.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
2026-04-15T15:06:38.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 6, 31), 9.6736, 52.517, 0.0, 9.96984, 14.6088, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:06:38.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:06:31
2026-04-15T15:06:38.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:06:39.103 [DEBUG] [Thread-21009] [transport.py] [_log()] starting thread (client mode): 0xee9be770
2026-04-15T15:06:39.103 [DEBUG] [Thread-21009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:06:39.117 [DEBUG] [Thread-21009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:06:39.117 [INFO] [Thread-21009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:06:39.119 [DEBUG] [Thread-21009] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:06:39.119 [DEBUG] [Thread-21009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:06:39.119 [DEBUG] [Thread-21009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:06:39.119 [DEBUG] [Thread-21009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:06:39.119 [DEBUG] [Thread-21009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:06:39.119 [DEBUG] [Thread-21009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:06:39.120 [DEBUG] [Thread-21009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:06:39.120 [DEBUG] [Thread-21009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:06:39.120 [DEBUG] [Thread-21009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:06:39.120 [DEBUG] [Thread-21009] [transport.py] [_log()] client lang: <none>
2026-04-15T15:06:39.120 [DEBUG] [Thread-21009] [transport.py] [_log()] server lang: <none>
2026-04-15T15:06:39.120 [DEBUG] [Thread-21009] [transport.py] [_log()] kex follows: False
2026-04-15T15:06:39.120 [DEBUG] [Thread-21009] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:06:39.120 [DEBUG] [Thread-21009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:06:39.120 [DEBUG] [Thread-21009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:06:39.120 [DEBUG] [Thread-21009] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:06:39.120 [DEBUG] [Thread-21009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:06:39.121 [DEBUG] [Thread-21009] [transport.py] [_log()] Compression: none
2026-04-15T15:06:39.121 [DEBUG] [Thread-21009] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:06:39.134 [DEBUG] [Thread-21009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:06:39.135 [DEBUG] [Thread-21009] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:06:39.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:06:39.135 [DEBUG] [Thread-21009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:06:39.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:06:39.136 [DEBUG] [Thread-21009] [transport.py] [_log()] userauth is OK
2026-04-15T15:06:39.136 [DEBUG] [Thread-21009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:06:39.137 [DEBUG] [Thread-21009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:06:39.137 [DEBUG] [Thread-21009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:06:39.137 [DEBUG] [Thread-21009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:06:39.154 [INFO] [Thread-21009] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:06:39.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:06:39.800 [DEBUG] [Thread-21009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:06:39.800 [DEBUG] [Thread-21009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:06:39.800 [DEBUG] [Thread-21009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:06:39.841 [DEBUG] [Thread-21009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:06:39.841 [DEBUG] [Thread-21009] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:06:39.844 [DEBUG] [Thread-21009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:06:39.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:06:39.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:06:39.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:06:39.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:06:39.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:06:39.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:06:39.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:06:39.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:06:39.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:06:39.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.545970 -999.00  +14.40  10.33     60   +6.90 1 1 1 1 1   888    0 8.01 17.30 ----- 7.1 10.3 305.1 14.3 21.8 -28.5 20.8 -26.3 21.6 -23.4 23.0 -25.8
2026-04-15T15:06:39.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:06:39.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:06:39.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.545970
2026-04-15T15:06:39.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:06:39.867 [DEBUG] [Thread-21009] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:06:39.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:06:39.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:06:39.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:06:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:06:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:06:31', tmtdew=9.6736, humidity=52.517, cloud=0.0, wind=9.96984, temperature=14.6088, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:06:11.808', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:06:40.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:06:40.128 [DEBUG] [Thread-21012] [transport.py] [_log()] starting thread (client mode): 0xee9bf2b0
2026-04-15T15:06:40.128 [DEBUG] [Thread-21012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:06:40.142 [DEBUG] [Thread-21012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:06:40.142 [INFO] [Thread-21012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:06:40.150 [DEBUG] [Thread-21012] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:06:40.150 [DEBUG] [Thread-21012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:06:40.150 [DEBUG] [Thread-21012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:06:40.150 [DEBUG] [Thread-21012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:06:40.150 [DEBUG] [Thread-21012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:06:40.150 [DEBUG] [Thread-21012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:06:40.150 [DEBUG] [Thread-21012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:06:40.150 [DEBUG] [Thread-21012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:06:40.150 [DEBUG] [Thread-21012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:06:40.151 [DEBUG] [Thread-21012] [transport.py] [_log()] client lang: <none>
2026-04-15T15:06:40.151 [DEBUG] [Thread-21012] [transport.py] [_log()] server lang: <none>
2026-04-15T15:06:40.151 [DEBUG] [Thread-21012] [transport.py] [_log()] kex follows: False
2026-04-15T15:06:40.151 [DEBUG] [Thread-21012] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:06:40.151 [DEBUG] [Thread-21012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:06:40.151 [DEBUG] [Thread-21012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:06:40.151 [DEBUG] [Thread-21012] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:06:40.151 [DEBUG] [Thread-21012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:06:40.151 [DEBUG] [Thread-21012] [transport.py] [_log()] Compression: none
2026-04-15T15:06:40.151 [DEBUG] [Thread-21012] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:06:40.206 [DEBUG] [Thread-21012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:06:40.206 [DEBUG] [Thread-21012] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:06:40.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:06:40.207 [DEBUG] [Thread-21012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:06:40.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:06:40.263 [DEBUG] [Thread-21012] [transport.py] [_log()] userauth is OK
2026-04-15T15:06:40.263 [DEBUG] [Thread-21012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:06:40.263 [DEBUG] [Thread-21012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:06:40.263 [DEBUG] [Thread-21012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:06:40.263 [DEBUG] [Thread-21012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:06:40.288 [INFO] [Thread-21012] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:06:40.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:06:40.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:06:41.122 [DEBUG] [Thread-21012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:06:41.122 [DEBUG] [Thread-21012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:06:41.170 [DEBUG] [Thread-21012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:06:41.170 [DEBUG] [Thread-21012] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:06:41.179 [DEBUG] [Thread-21012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:06:41.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:06:41.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')
2026-04-15T15:06:41.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
2026-04-15T15:06:41.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:06:41.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:06:41.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:06:41.213 [DEBUG] [Thread-21012] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:06:45.912 [DEBUG] [Thread-21014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:07:00.955 [DEBUG] [Thread-21015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:07:08.865 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:07:08.866 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:07:11.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:07:11.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:07:11.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
2026-04-15T15:07:12.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 6, 31), 9.6736, 52.517, 0.0, 9.96984, 14.6088, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:07:12.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:06:31
2026-04-15T15:07:13.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:07:13.447 [DEBUG] [Thread-21016] [transport.py] [_log()] starting thread (client mode): 0xee9bde70
2026-04-15T15:07:13.447 [DEBUG] [Thread-21016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:07:13.465 [DEBUG] [Thread-21016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:07:13.466 [INFO] [Thread-21016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:07:13.469 [DEBUG] [Thread-21016] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:07:13.469 [DEBUG] [Thread-21016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:07:13.469 [DEBUG] [Thread-21016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:07:13.469 [DEBUG] [Thread-21016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:07:13.469 [DEBUG] [Thread-21016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:07:13.469 [DEBUG] [Thread-21016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:07:13.469 [DEBUG] [Thread-21016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:07:13.469 [DEBUG] [Thread-21016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:07:13.469 [DEBUG] [Thread-21016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:07:13.470 [DEBUG] [Thread-21016] [transport.py] [_log()] client lang: <none>
2026-04-15T15:07:13.470 [DEBUG] [Thread-21016] [transport.py] [_log()] server lang: <none>
2026-04-15T15:07:13.470 [DEBUG] [Thread-21016] [transport.py] [_log()] kex follows: False
2026-04-15T15:07:13.470 [DEBUG] [Thread-21016] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:07:13.470 [DEBUG] [Thread-21016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:07:13.470 [DEBUG] [Thread-21016] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:07:13.470 [DEBUG] [Thread-21016] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:07:13.470 [DEBUG] [Thread-21016] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:07:13.470 [DEBUG] [Thread-21016] [transport.py] [_log()] Compression: none
2026-04-15T15:07:13.470 [DEBUG] [Thread-21016] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:07:13.485 [DEBUG] [Thread-21016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:07:13.486 [DEBUG] [Thread-21016] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:07:13.486 [DEBUG] [Thread-21016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:07:13.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:07:13.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:07:13.487 [DEBUG] [Thread-21016] [transport.py] [_log()] userauth is OK
2026-04-15T15:07:13.487 [DEBUG] [Thread-21016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:07:13.488 [DEBUG] [Thread-21016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:07:13.488 [DEBUG] [Thread-21016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:07:13.488 [DEBUG] [Thread-21016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:07:13.507 [INFO] [Thread-21016] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:07:13.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:07:14.164 [DEBUG] [Thread-21016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:07:14.165 [DEBUG] [Thread-21016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:07:14.165 [DEBUG] [Thread-21016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:07:14.205 [DEBUG] [Thread-21016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:07:14.205 [DEBUG] [Thread-21016] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:07:14.208 [DEBUG] [Thread-21016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:07:14.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:07:14.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:07:14.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:07:14.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:07:14.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:07:14.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:07:14.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:07:14.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:07:14.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:07:14.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.546317 -999.00  +14.50  13.03     60   +6.90 1 1 1 1 1   888    0 7.88 14.57 ----- 11.7 13.0 333.4 15.2 21.9 -28.4 20.8 -27.5 21.6 -23.6 23.1 -26.2
2026-04-15T15:07:14.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:07:14.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:07:14.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.546317
2026-04-15T15:07:14.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:07:14.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:07:14.232 [DEBUG] [Thread-21016] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:07:14.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:07:14.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:07:14.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:07:14.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:06:31', tmtdew=9.6736, humidity=52.517, cloud=0.0, wind=9.96984, temperature=14.6088, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:06:41.789', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:07:14.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:07:14.488 [DEBUG] [Thread-21019] [transport.py] [_log()] starting thread (client mode): 0xee9bd180
2026-04-15T15:07:14.488 [DEBUG] [Thread-21019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:07:14.502 [DEBUG] [Thread-21019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:07:14.503 [INFO] [Thread-21019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:07:14.510 [DEBUG] [Thread-21019] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:07:14.510 [DEBUG] [Thread-21019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:07:14.510 [DEBUG] [Thread-21019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:07:14.510 [DEBUG] [Thread-21019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:07:14.510 [DEBUG] [Thread-21019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:07:14.510 [DEBUG] [Thread-21019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:07:14.510 [DEBUG] [Thread-21019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:07:14.511 [DEBUG] [Thread-21019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:07:14.511 [DEBUG] [Thread-21019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:07:14.511 [DEBUG] [Thread-21019] [transport.py] [_log()] client lang: <none>
2026-04-15T15:07:14.511 [DEBUG] [Thread-21019] [transport.py] [_log()] server lang: <none>
2026-04-15T15:07:14.511 [DEBUG] [Thread-21019] [transport.py] [_log()] kex follows: False
2026-04-15T15:07:14.511 [DEBUG] [Thread-21019] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:07:14.511 [DEBUG] [Thread-21019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:07:14.511 [DEBUG] [Thread-21019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:07:14.511 [DEBUG] [Thread-21019] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:07:14.511 [DEBUG] [Thread-21019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:07:14.511 [DEBUG] [Thread-21019] [transport.py] [_log()] Compression: none
2026-04-15T15:07:14.512 [DEBUG] [Thread-21019] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:07:14.566 [DEBUG] [Thread-21019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:07:14.566 [DEBUG] [Thread-21019] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:07:14.567 [DEBUG] [Thread-21019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:07:14.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:07:14.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:07:14.623 [DEBUG] [Thread-21019] [transport.py] [_log()] userauth is OK
2026-04-15T15:07:14.623 [DEBUG] [Thread-21019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:07:14.623 [DEBUG] [Thread-21019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:07:14.624 [DEBUG] [Thread-21019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:07:14.624 [DEBUG] [Thread-21019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:07:14.649 [INFO] [Thread-21019] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:07:14.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:07:14.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:07:15.491 [DEBUG] [Thread-21019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:07:15.492 [DEBUG] [Thread-21019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:07:15.539 [DEBUG] [Thread-21019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:07:15.539 [DEBUG] [Thread-21019] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:07:15.548 [DEBUG] [Thread-21019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:07:15.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:07:15.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')
2026-04-15T15:07:15.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
2026-04-15T15:07:15.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:07:15.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:07:15.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:07:15.583 [DEBUG] [Thread-21019] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:07:15.987 [DEBUG] [Thread-21021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:07:30.714 [DEBUG] [Thread-21022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:07:31.030 [DEBUG] [Thread-21023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:07:45.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:07:45.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:07:45.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
2026-04-15T15:07:46.059 [DEBUG] [Thread-21024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:07:46.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 7, 6), 9.50768, 53.1298, 0.0, 10.5167, 14.6747, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:07:46.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:07:06
2026-04-15T15:07:47.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:07:47.777 [DEBUG] [Thread-21025] [transport.py] [_log()] starting thread (client mode): 0xee9bc910
2026-04-15T15:07:47.777 [DEBUG] [Thread-21025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:07:47.797 [DEBUG] [Thread-21025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:07:47.797 [INFO] [Thread-21025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:07:47.800 [DEBUG] [Thread-21025] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:07:47.800 [DEBUG] [Thread-21025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:07:47.800 [DEBUG] [Thread-21025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:07:47.800 [DEBUG] [Thread-21025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:07:47.800 [DEBUG] [Thread-21025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:07:47.800 [DEBUG] [Thread-21025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:07:47.801 [DEBUG] [Thread-21025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:07:47.801 [DEBUG] [Thread-21025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:07:47.801 [DEBUG] [Thread-21025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:07:47.801 [DEBUG] [Thread-21025] [transport.py] [_log()] client lang: <none>
2026-04-15T15:07:47.801 [DEBUG] [Thread-21025] [transport.py] [_log()] server lang: <none>
2026-04-15T15:07:47.801 [DEBUG] [Thread-21025] [transport.py] [_log()] kex follows: False
2026-04-15T15:07:47.801 [DEBUG] [Thread-21025] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:07:47.801 [DEBUG] [Thread-21025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:07:47.801 [DEBUG] [Thread-21025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:07:47.801 [DEBUG] [Thread-21025] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:07:47.801 [DEBUG] [Thread-21025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:07:47.802 [DEBUG] [Thread-21025] [transport.py] [_log()] Compression: none
2026-04-15T15:07:47.802 [DEBUG] [Thread-21025] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:07:47.817 [DEBUG] [Thread-21025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:07:47.817 [DEBUG] [Thread-21025] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:07:47.818 [DEBUG] [Thread-21025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:07:47.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:07:47.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:07:47.819 [DEBUG] [Thread-21025] [transport.py] [_log()] userauth is OK
2026-04-15T15:07:47.819 [DEBUG] [Thread-21025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:07:47.819 [DEBUG] [Thread-21025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:07:47.820 [DEBUG] [Thread-21025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:07:47.820 [DEBUG] [Thread-21025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:07:47.845 [INFO] [Thread-21025] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:07:47.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:07:48.495 [DEBUG] [Thread-21025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:07:48.495 [DEBUG] [Thread-21025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:07:48.496 [DEBUG] [Thread-21025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:07:48.536 [DEBUG] [Thread-21025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:07:48.536 [DEBUG] [Thread-21025] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:07:48.539 [DEBUG] [Thread-21025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:07:48.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:07:48.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:07:48.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:07:48.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:07:48.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:07:48.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:07:48.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:07:48.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:07:48.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:07:48.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.547011 -999.00  +15.10  15.36     60   +7.40 1 1 1 1 1   888    0 7.94 8.45 ----- 21.6 15.4 321.6 21.7 21.9 -28.4 20.9 -26.6 21.8 -23.2 23.1 -25.7
2026-04-15T15:07:48.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:07:48.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:07:48.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.547011
2026-04-15T15:07:48.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:07:48.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:07:48.566 [DEBUG] [Thread-21025] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:07:48.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:07:48.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:07:48.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:07:48.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:07:06', tmtdew=9.50768, humidity=53.1298, cloud=0.0, wind=10.5167, temperature=14.6747, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:07:41.750', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:07:48.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:07:48.807 [DEBUG] [Thread-21028] [transport.py] [_log()] starting thread (client mode): 0xee9bf580
2026-04-15T15:07:48.807 [DEBUG] [Thread-21028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:07:48.821 [DEBUG] [Thread-21028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:07:48.821 [INFO] [Thread-21028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:07:48.829 [DEBUG] [Thread-21028] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:07:48.829 [DEBUG] [Thread-21028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:07:48.829 [DEBUG] [Thread-21028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:07:48.829 [DEBUG] [Thread-21028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:07:48.829 [DEBUG] [Thread-21028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:07:48.829 [DEBUG] [Thread-21028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:07:48.829 [DEBUG] [Thread-21028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:07:48.829 [DEBUG] [Thread-21028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:07:48.829 [DEBUG] [Thread-21028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:07:48.830 [DEBUG] [Thread-21028] [transport.py] [_log()] client lang: <none>
2026-04-15T15:07:48.830 [DEBUG] [Thread-21028] [transport.py] [_log()] server lang: <none>
2026-04-15T15:07:48.830 [DEBUG] [Thread-21028] [transport.py] [_log()] kex follows: False
2026-04-15T15:07:48.830 [DEBUG] [Thread-21028] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:07:48.830 [DEBUG] [Thread-21028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:07:48.830 [DEBUG] [Thread-21028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:07:48.830 [DEBUG] [Thread-21028] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:07:48.830 [DEBUG] [Thread-21028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:07:48.830 [DEBUG] [Thread-21028] [transport.py] [_log()] Compression: none
2026-04-15T15:07:48.830 [DEBUG] [Thread-21028] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:07:48.890 [DEBUG] [Thread-21028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:07:48.890 [DEBUG] [Thread-21028] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:07:48.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:07:48.891 [DEBUG] [Thread-21028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:07:48.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:07:48.947 [DEBUG] [Thread-21028] [transport.py] [_log()] userauth is OK
2026-04-15T15:07:48.947 [DEBUG] [Thread-21028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:07:48.947 [DEBUG] [Thread-21028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:07:48.948 [DEBUG] [Thread-21028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:07:48.948 [DEBUG] [Thread-21028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:07:48.973 [INFO] [Thread-21028] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:07:48.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:07:48.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:07:49.822 [DEBUG] [Thread-21028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:07:49.822 [DEBUG] [Thread-21028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:07:49.870 [DEBUG] [Thread-21028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:07:49.870 [DEBUG] [Thread-21028] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:07:49.879 [DEBUG] [Thread-21028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:07:49.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:07:49.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')
2026-04-15T15:07:49.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
2026-04-15T15:07:49.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:07:49.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:07:49.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:07:49.916 [DEBUG] [Thread-21028] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:08:01.089 [DEBUG] [Thread-21030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:08:09.007 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:08:09.009 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:08:16.137 [DEBUG] [Thread-21031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:08:19.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:08:19.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:08:19.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
2026-04-15T15:08:21.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 7, 43), 9.85315, 51.7625, 0.0, 19.584, 15.3494, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:08:21.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:07:43
2026-04-15T15:08:21.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:08:22.251 [DEBUG] [Thread-21032] [transport.py] [_log()] starting thread (client mode): 0xee9be2c0
2026-04-15T15:08:22.251 [DEBUG] [Thread-21032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:08:22.270 [DEBUG] [Thread-21032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:08:22.270 [INFO] [Thread-21032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:08:22.273 [DEBUG] [Thread-21032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:08:22.273 [DEBUG] [Thread-21032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:08:22.273 [DEBUG] [Thread-21032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:08:22.274 [DEBUG] [Thread-21032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:08:22.274 [DEBUG] [Thread-21032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:08:22.274 [DEBUG] [Thread-21032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:08:22.274 [DEBUG] [Thread-21032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:08:22.274 [DEBUG] [Thread-21032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:08:22.274 [DEBUG] [Thread-21032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:08:22.274 [DEBUG] [Thread-21032] [transport.py] [_log()] client lang: <none>
2026-04-15T15:08:22.274 [DEBUG] [Thread-21032] [transport.py] [_log()] server lang: <none>
2026-04-15T15:08:22.274 [DEBUG] [Thread-21032] [transport.py] [_log()] kex follows: False
2026-04-15T15:08:22.274 [DEBUG] [Thread-21032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:08:22.274 [DEBUG] [Thread-21032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:08:22.274 [DEBUG] [Thread-21032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:08:22.275 [DEBUG] [Thread-21032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:08:22.275 [DEBUG] [Thread-21032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:08:22.275 [DEBUG] [Thread-21032] [transport.py] [_log()] Compression: none
2026-04-15T15:08:22.275 [DEBUG] [Thread-21032] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:08:22.290 [DEBUG] [Thread-21032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:08:22.290 [DEBUG] [Thread-21032] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:08:22.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:08:22.291 [DEBUG] [Thread-21032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:08:22.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:08:22.292 [DEBUG] [Thread-21032] [transport.py] [_log()] userauth is OK
2026-04-15T15:08:22.292 [DEBUG] [Thread-21032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:08:22.292 [DEBUG] [Thread-21032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:08:22.292 [DEBUG] [Thread-21032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:08:22.292 [DEBUG] [Thread-21032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:08:22.316 [INFO] [Thread-21032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:08:22.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:08:22.941 [DEBUG] [Thread-21032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:08:22.941 [DEBUG] [Thread-21032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:08:22.942 [DEBUG] [Thread-21032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:08:22.982 [DEBUG] [Thread-21032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:08:22.982 [DEBUG] [Thread-21032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:08:22.985 [DEBUG] [Thread-21032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:08:22.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:08:22.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:08:22.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:08:23.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:08:23.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:08:23.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:08:23.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:08:23.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:08:23.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:08:23.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.547359 -999.00  +15.10  15.16     58   +7.10 1 1 1 1 1   888    0 7.64 7.14 ----- 20.7 15.2 324.6 25.1 21.9 -28.2 20.9 -27.8 21.9 -23.9 23.1 -26.0
2026-04-15T15:08:23.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:08:23.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:08:23.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.547359
2026-04-15T15:08:23.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:08:23.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:08:23.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:08:23.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:08:23.015 [DEBUG] [Thread-21032] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:08:23.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:08:23.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:07:43', tmtdew=9.85315, humidity=51.7625, cloud=0.0, wind=19.584, temperature=15.3494, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:08:11.818', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:08:23.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:08:23.262 [DEBUG] [Thread-21035] [transport.py] [_log()] starting thread (client mode): 0xee9bcee0
2026-04-15T15:08:23.262 [DEBUG] [Thread-21035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:08:23.276 [DEBUG] [Thread-21035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:08:23.277 [INFO] [Thread-21035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:08:23.285 [DEBUG] [Thread-21035] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:08:23.285 [DEBUG] [Thread-21035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:08:23.285 [DEBUG] [Thread-21035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:08:23.285 [DEBUG] [Thread-21035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:08:23.285 [DEBUG] [Thread-21035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:08:23.285 [DEBUG] [Thread-21035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:08:23.285 [DEBUG] [Thread-21035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:08:23.286 [DEBUG] [Thread-21035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:08:23.286 [DEBUG] [Thread-21035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:08:23.286 [DEBUG] [Thread-21035] [transport.py] [_log()] client lang: <none>
2026-04-15T15:08:23.286 [DEBUG] [Thread-21035] [transport.py] [_log()] server lang: <none>
2026-04-15T15:08:23.286 [DEBUG] [Thread-21035] [transport.py] [_log()] kex follows: False
2026-04-15T15:08:23.286 [DEBUG] [Thread-21035] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:08:23.286 [DEBUG] [Thread-21035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:08:23.286 [DEBUG] [Thread-21035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:08:23.286 [DEBUG] [Thread-21035] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:08:23.286 [DEBUG] [Thread-21035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:08:23.286 [DEBUG] [Thread-21035] [transport.py] [_log()] Compression: none
2026-04-15T15:08:23.287 [DEBUG] [Thread-21035] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:08:23.342 [DEBUG] [Thread-21035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:08:23.342 [DEBUG] [Thread-21035] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:08:23.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:08:23.343 [DEBUG] [Thread-21035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:08:23.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:08:23.399 [DEBUG] [Thread-21035] [transport.py] [_log()] userauth is OK
2026-04-15T15:08:23.400 [DEBUG] [Thread-21035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:08:23.400 [DEBUG] [Thread-21035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:08:23.400 [DEBUG] [Thread-21035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:08:23.400 [DEBUG] [Thread-21035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:08:23.418 [INFO] [Thread-21035] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:08:23.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:08:23.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:08:24.302 [DEBUG] [Thread-21035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:08:24.302 [DEBUG] [Thread-21035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:08:24.350 [DEBUG] [Thread-21035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:08:24.350 [DEBUG] [Thread-21035] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:08:24.360 [DEBUG] [Thread-21035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:08:24.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:08:24.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')
2026-04-15T15:08:24.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
2026-04-15T15:08:24.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:08:24.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:08:24.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:08:24.395 [DEBUG] [Thread-21035] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:08:30.822 [DEBUG] [Thread-21037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:08:31.168 [DEBUG] [Thread-21038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:08:46.210 [DEBUG] [Thread-21039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:08:54.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:08:54.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:08:54.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
2026-04-15T15:08:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 8, 18), 9.47014, 52.931, 0.0, 16.6921, 14.8741, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:08:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:08:18
2026-04-15T15:08:56.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:08:56.459 [DEBUG] [Thread-21040] [transport.py] [_log()] starting thread (client mode): 0xee9bc730
2026-04-15T15:08:56.459 [DEBUG] [Thread-21040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:08:56.481 [DEBUG] [Thread-21040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:08:56.481 [INFO] [Thread-21040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:08:56.484 [DEBUG] [Thread-21040] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:08:56.484 [DEBUG] [Thread-21040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:08:56.484 [DEBUG] [Thread-21040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:08:56.484 [DEBUG] [Thread-21040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:08:56.484 [DEBUG] [Thread-21040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:08:56.485 [DEBUG] [Thread-21040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:08:56.485 [DEBUG] [Thread-21040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:08:56.485 [DEBUG] [Thread-21040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:08:56.485 [DEBUG] [Thread-21040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:08:56.485 [DEBUG] [Thread-21040] [transport.py] [_log()] client lang: <none>
2026-04-15T15:08:56.485 [DEBUG] [Thread-21040] [transport.py] [_log()] server lang: <none>
2026-04-15T15:08:56.485 [DEBUG] [Thread-21040] [transport.py] [_log()] kex follows: False
2026-04-15T15:08:56.485 [DEBUG] [Thread-21040] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:08:56.485 [DEBUG] [Thread-21040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:08:56.485 [DEBUG] [Thread-21040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:08:56.485 [DEBUG] [Thread-21040] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:08:56.485 [DEBUG] [Thread-21040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:08:56.485 [DEBUG] [Thread-21040] [transport.py] [_log()] Compression: none
2026-04-15T15:08:56.485 [DEBUG] [Thread-21040] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:08:56.495 [DEBUG] [Thread-21040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:08:56.495 [DEBUG] [Thread-21040] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:08:56.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:08:56.496 [DEBUG] [Thread-21040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:08:56.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:08:56.497 [DEBUG] [Thread-21040] [transport.py] [_log()] userauth is OK
2026-04-15T15:08:56.497 [DEBUG] [Thread-21040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:08:56.497 [DEBUG] [Thread-21040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:08:56.497 [DEBUG] [Thread-21040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:08:56.498 [DEBUG] [Thread-21040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:08:56.533 [INFO] [Thread-21040] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:08:56.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:08:57.181 [DEBUG] [Thread-21040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:08:57.181 [DEBUG] [Thread-21040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:08:57.182 [DEBUG] [Thread-21040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:08:57.222 [DEBUG] [Thread-21040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:08:57.222 [DEBUG] [Thread-21040] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:08:57.225 [DEBUG] [Thread-21040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:08:57.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:08:57.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:08:57.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:08:57.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:08:57.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:08:57.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:08:57.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:08:57.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:08:57.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:08:57.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.547706 -999.00  +14.90  21.11     57   +6.50 1 1 1 1 1   888    0 7.72 6.76 ----- 17.6 21.1 344.6 24.8 21.9 -28.2 20.8 -30.4 21.9 -24.3 23.1 -25.4
2026-04-15T15:08:57.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:08:57.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:08:57.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.547706
2026-04-15T15:08:57.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:08:57.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:08:57.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:08:57.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:08:57.253 [DEBUG] [Thread-21040] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:08:57.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:08:57.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:08:18', tmtdew=9.47014, humidity=52.931, cloud=0.0, wind=16.6921, temperature=14.8741, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:08:41.798', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:08:57.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:08:57.509 [DEBUG] [Thread-21043] [transport.py] [_log()] starting thread (client mode): 0xee9beda0
2026-04-15T15:08:57.509 [DEBUG] [Thread-21043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:08:57.524 [DEBUG] [Thread-21043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:08:57.524 [INFO] [Thread-21043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:08:57.531 [DEBUG] [Thread-21043] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:08:57.531 [DEBUG] [Thread-21043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:08:57.531 [DEBUG] [Thread-21043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:08:57.531 [DEBUG] [Thread-21043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:08:57.531 [DEBUG] [Thread-21043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:08:57.532 [DEBUG] [Thread-21043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:08:57.532 [DEBUG] [Thread-21043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:08:57.532 [DEBUG] [Thread-21043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:08:57.532 [DEBUG] [Thread-21043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:08:57.532 [DEBUG] [Thread-21043] [transport.py] [_log()] client lang: <none>
2026-04-15T15:08:57.532 [DEBUG] [Thread-21043] [transport.py] [_log()] server lang: <none>
2026-04-15T15:08:57.532 [DEBUG] [Thread-21043] [transport.py] [_log()] kex follows: False
2026-04-15T15:08:57.532 [DEBUG] [Thread-21043] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:08:57.532 [DEBUG] [Thread-21043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:08:57.532 [DEBUG] [Thread-21043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:08:57.532 [DEBUG] [Thread-21043] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:08:57.532 [DEBUG] [Thread-21043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:08:57.533 [DEBUG] [Thread-21043] [transport.py] [_log()] Compression: none
2026-04-15T15:08:57.533 [DEBUG] [Thread-21043] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:08:57.590 [DEBUG] [Thread-21043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:08:57.590 [DEBUG] [Thread-21043] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:08:57.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:08:57.590 [DEBUG] [Thread-21043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:08:57.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:08:57.647 [DEBUG] [Thread-21043] [transport.py] [_log()] userauth is OK
2026-04-15T15:08:57.647 [DEBUG] [Thread-21043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:08:57.647 [DEBUG] [Thread-21043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:08:57.647 [DEBUG] [Thread-21043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:08:57.647 [DEBUG] [Thread-21043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:08:57.664 [INFO] [Thread-21043] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:08:57.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:08:57.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:08:58.477 [DEBUG] [Thread-21043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:08:58.477 [DEBUG] [Thread-21043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:08:58.525 [DEBUG] [Thread-21043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:08:58.525 [DEBUG] [Thread-21043] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:08:58.534 [DEBUG] [Thread-21043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:08:58.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:08:58.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')
2026-04-15T15:08:58.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
2026-04-15T15:08:58.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:08:58.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:08:58.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:08:58.569 [DEBUG] [Thread-21043] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:09:01.240 [DEBUG] [Thread-21045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:09:09.150 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:09:09.151 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:09:16.285 [DEBUG] [Thread-21046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:09:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:09:28.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:09:28.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:09:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 8, 54), 9.57996, 52.699, 0.0, 17.0978, 14.8578, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:09:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:08:54
2026-04-15T15:09:30.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:09:30.695 [DEBUG] [Thread-21047] [transport.py] [_log()] starting thread (client mode): 0xee9bf610
2026-04-15T15:09:30.696 [DEBUG] [Thread-21047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:09:30.715 [DEBUG] [Thread-21047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:09:30.715 [INFO] [Thread-21047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:09:30.718 [DEBUG] [Thread-21047] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:09:30.718 [DEBUG] [Thread-21047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:09:30.718 [DEBUG] [Thread-21047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:09:30.718 [DEBUG] [Thread-21047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:09:30.718 [DEBUG] [Thread-21047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:09:30.718 [DEBUG] [Thread-21047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:09:30.719 [DEBUG] [Thread-21047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:09:30.719 [DEBUG] [Thread-21047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:09:30.719 [DEBUG] [Thread-21047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:09:30.719 [DEBUG] [Thread-21047] [transport.py] [_log()] client lang: <none>
2026-04-15T15:09:30.719 [DEBUG] [Thread-21047] [transport.py] [_log()] server lang: <none>
2026-04-15T15:09:30.719 [DEBUG] [Thread-21047] [transport.py] [_log()] kex follows: False
2026-04-15T15:09:30.719 [DEBUG] [Thread-21047] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:09:30.719 [DEBUG] [Thread-21047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:09:30.719 [DEBUG] [Thread-21047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:09:30.719 [DEBUG] [Thread-21047] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:09:30.719 [DEBUG] [Thread-21047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:09:30.720 [DEBUG] [Thread-21047] [transport.py] [_log()] Compression: none
2026-04-15T15:09:30.720 [DEBUG] [Thread-21047] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:09:30.736 [DEBUG] [Thread-21047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:09:30.736 [DEBUG] [Thread-21047] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:09:30.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:09:30.737 [DEBUG] [Thread-21047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:09:30.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:09:30.738 [DEBUG] [Thread-21047] [transport.py] [_log()] userauth is OK
2026-04-15T15:09:30.738 [DEBUG] [Thread-21047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:09:30.738 [DEBUG] [Thread-21047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:09:30.738 [DEBUG] [Thread-21047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:09:30.738 [DEBUG] [Thread-21047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:09:30.764 [INFO] [Thread-21047] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:09:30.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:09:30.899 [DEBUG] [Thread-21049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:09:31.315 [DEBUG] [Thread-21050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:09:31.412 [DEBUG] [Thread-21047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:09:31.413 [DEBUG] [Thread-21047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:09:31.413 [DEBUG] [Thread-21047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:09:31.453 [DEBUG] [Thread-21047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:09:31.453 [DEBUG] [Thread-21047] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:09:31.456 [DEBUG] [Thread-21047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:09:31.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:09:31.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:09:31.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:09:31.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:09:31.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:09:31.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:09:31.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:09:31.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:09:31.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:09:31.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.548053 -999.00  +14.50  11.34     58   +6.30 1 1 1 1 1   888    0 7.83 9.03 ----- 8.4 11.3 342.7 20.2 21.8 -29.1 20.7 -27.6 21.8 -25.1 22.8 -26.3
2026-04-15T15:09:31.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:09:31.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:09:31.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.548053
2026-04-15T15:09:31.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:09:31.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:09:31.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:09:31.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:09:31.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:09:31.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:08:54', tmtdew=9.57996, humidity=52.699, cloud=0.0, wind=17.0978, temperature=14.8578, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:09:11.779', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:09:31.473 [DEBUG] [Thread-21047] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:09:31.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:09:31.728 [DEBUG] [Thread-21052] [transport.py] [_log()] starting thread (client mode): 0xee9be080
2026-04-15T15:09:31.728 [DEBUG] [Thread-21052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:09:31.744 [DEBUG] [Thread-21052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:09:31.744 [INFO] [Thread-21052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:09:31.751 [DEBUG] [Thread-21052] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:09:31.751 [DEBUG] [Thread-21052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:09:31.752 [DEBUG] [Thread-21052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:09:31.752 [DEBUG] [Thread-21052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:09:31.752 [DEBUG] [Thread-21052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:09:31.752 [DEBUG] [Thread-21052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:09:31.752 [DEBUG] [Thread-21052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:09:31.752 [DEBUG] [Thread-21052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:09:31.752 [DEBUG] [Thread-21052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:09:31.752 [DEBUG] [Thread-21052] [transport.py] [_log()] client lang: <none>
2026-04-15T15:09:31.752 [DEBUG] [Thread-21052] [transport.py] [_log()] server lang: <none>
2026-04-15T15:09:31.752 [DEBUG] [Thread-21052] [transport.py] [_log()] kex follows: False
2026-04-15T15:09:31.752 [DEBUG] [Thread-21052] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:09:31.752 [DEBUG] [Thread-21052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:09:31.753 [DEBUG] [Thread-21052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:09:31.753 [DEBUG] [Thread-21052] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:09:31.753 [DEBUG] [Thread-21052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:09:31.753 [DEBUG] [Thread-21052] [transport.py] [_log()] Compression: none
2026-04-15T15:09:31.753 [DEBUG] [Thread-21052] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:09:31.809 [DEBUG] [Thread-21052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:09:31.810 [DEBUG] [Thread-21052] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:09:31.810 [DEBUG] [Thread-21052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:09:31.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:09:31.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:09:31.871 [DEBUG] [Thread-21052] [transport.py] [_log()] userauth is OK
2026-04-15T15:09:31.871 [DEBUG] [Thread-21052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:09:31.871 [DEBUG] [Thread-21052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:09:31.871 [DEBUG] [Thread-21052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:09:31.871 [DEBUG] [Thread-21052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:09:31.889 [INFO] [Thread-21052] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:09:31.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:09:31.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:09:32.766 [DEBUG] [Thread-21052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:09:32.766 [DEBUG] [Thread-21052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:09:32.814 [DEBUG] [Thread-21052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:09:32.814 [DEBUG] [Thread-21052] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:09:32.823 [DEBUG] [Thread-21052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:09:32.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:09:32.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')
2026-04-15T15:09:32.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
2026-04-15T15:09:32.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:09:32.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:09:32.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:09:32.863 [DEBUG] [Thread-21052] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:09:46.344 [DEBUG] [Thread-21054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:10:01.382 [DEBUG] [Thread-21055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:10:02.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:10:02.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:10:02.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:10:04.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 9, 32), 9.5927, 52.6491, 0.0, 18.4208, 14.841, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:10:04.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:09:32
2026-04-15T15:10:04.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:10:05.061 [DEBUG] [Thread-21056] [transport.py] [_log()] starting thread (client mode): 0xee9bdd20
2026-04-15T15:10:05.061 [DEBUG] [Thread-21056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:10:05.080 [DEBUG] [Thread-21056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:10:05.080 [INFO] [Thread-21056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:10:05.084 [DEBUG] [Thread-21056] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:10:05.084 [DEBUG] [Thread-21056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:10:05.084 [DEBUG] [Thread-21056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:10:05.084 [DEBUG] [Thread-21056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:10:05.084 [DEBUG] [Thread-21056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:10:05.084 [DEBUG] [Thread-21056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:10:05.084 [DEBUG] [Thread-21056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:10:05.084 [DEBUG] [Thread-21056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:10:05.084 [DEBUG] [Thread-21056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:10:05.085 [DEBUG] [Thread-21056] [transport.py] [_log()] client lang: <none>
2026-04-15T15:10:05.085 [DEBUG] [Thread-21056] [transport.py] [_log()] server lang: <none>
2026-04-15T15:10:05.085 [DEBUG] [Thread-21056] [transport.py] [_log()] kex follows: False
2026-04-15T15:10:05.085 [DEBUG] [Thread-21056] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:10:05.085 [DEBUG] [Thread-21056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:10:05.085 [DEBUG] [Thread-21056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:10:05.085 [DEBUG] [Thread-21056] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:10:05.085 [DEBUG] [Thread-21056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:10:05.085 [DEBUG] [Thread-21056] [transport.py] [_log()] Compression: none
2026-04-15T15:10:05.085 [DEBUG] [Thread-21056] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:10:05.101 [DEBUG] [Thread-21056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:10:05.101 [DEBUG] [Thread-21056] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:10:05.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:10:05.102 [DEBUG] [Thread-21056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:10:05.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:10:05.103 [DEBUG] [Thread-21056] [transport.py] [_log()] userauth is OK
2026-04-15T15:10:05.103 [DEBUG] [Thread-21056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:10:05.103 [DEBUG] [Thread-21056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:10:05.103 [DEBUG] [Thread-21056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:10:05.103 [DEBUG] [Thread-21056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:10:05.128 [INFO] [Thread-21056] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:10:05.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:10:08.264 [DEBUG] [Thread-21056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:10:08.265 [DEBUG] [Thread-21056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:10:08.265 [DEBUG] [Thread-21056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:10:08.305 [DEBUG] [Thread-21056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:10:08.305 [DEBUG] [Thread-21056] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:10:08.307 [DEBUG] [Thread-21056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:10:08.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:10:08.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:10:08.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:10:08.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:10:08.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:10:08.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:10:08.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:10:08.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:10:08.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:10:08.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.548400 -999.00  +15.00  13.13     60   +7.40 1 1 1 1 1   888    0 7.77 8.65 ----- 18.9 13.1 315.2 18.9 21.8 -28.2 20.8 -26.9 21.8 -23.6 22.9 -25.8
2026-04-15T15:10:08.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:10:08.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:10:08.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.548400
2026-04-15T15:10:08.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:10:08.348 [DEBUG] [Thread-21056] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:10:08.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:10:08.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:10:08.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:10:08.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:10:08.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:09:32', tmtdew=9.5927, humidity=52.6491, cloud=0.0, wind=18.4208, temperature=14.841, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:09:41.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:10:08.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:10:08.569 [DEBUG] [Thread-21059] [transport.py] [_log()] starting thread (client mode): 0xee9bfc70
2026-04-15T15:10:08.569 [DEBUG] [Thread-21059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:10:08.583 [DEBUG] [Thread-21059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:10:08.584 [INFO] [Thread-21059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:10:08.591 [DEBUG] [Thread-21059] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:10:08.591 [DEBUG] [Thread-21059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:10:08.591 [DEBUG] [Thread-21059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:10:08.591 [DEBUG] [Thread-21059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:10:08.591 [DEBUG] [Thread-21059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:10:08.591 [DEBUG] [Thread-21059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:10:08.592 [DEBUG] [Thread-21059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:10:08.592 [DEBUG] [Thread-21059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:10:08.592 [DEBUG] [Thread-21059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:10:08.592 [DEBUG] [Thread-21059] [transport.py] [_log()] client lang: <none>
2026-04-15T15:10:08.592 [DEBUG] [Thread-21059] [transport.py] [_log()] server lang: <none>
2026-04-15T15:10:08.592 [DEBUG] [Thread-21059] [transport.py] [_log()] kex follows: False
2026-04-15T15:10:08.592 [DEBUG] [Thread-21059] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:10:08.592 [DEBUG] [Thread-21059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:10:08.592 [DEBUG] [Thread-21059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:10:08.592 [DEBUG] [Thread-21059] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:10:08.592 [DEBUG] [Thread-21059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:10:08.593 [DEBUG] [Thread-21059] [transport.py] [_log()] Compression: none
2026-04-15T15:10:08.593 [DEBUG] [Thread-21059] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:10:08.650 [DEBUG] [Thread-21059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:10:08.650 [DEBUG] [Thread-21059] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:10:08.651 [DEBUG] [Thread-21059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:10:08.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:10:08.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:10:08.707 [DEBUG] [Thread-21059] [transport.py] [_log()] userauth is OK
2026-04-15T15:10:08.707 [DEBUG] [Thread-21059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:10:08.707 [DEBUG] [Thread-21059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:10:08.707 [DEBUG] [Thread-21059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:10:08.707 [DEBUG] [Thread-21059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:10:08.733 [INFO] [Thread-21059] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:10:08.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:10:08.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:10:09.291 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:10:09.292 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:10:09.568 [DEBUG] [Thread-21059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:10:09.568 [DEBUG] [Thread-21059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:10:09.616 [DEBUG] [Thread-21059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:10:09.616 [DEBUG] [Thread-21059] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:10:09.625 [DEBUG] [Thread-21059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:10:09.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:10:09.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')
2026-04-15T15:10:09.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
2026-04-15T15:10:09.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:10:09.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:10:09.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:10:09.660 [DEBUG] [Thread-21059] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:10:16.412 [DEBUG] [Thread-21061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:10:30.985 [DEBUG] [Thread-21062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:10:31.449 [DEBUG] [Thread-21063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:10:39.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:10:39.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:10:39.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:10:40.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 10, 8), 9.53093, 52.8478, 0.0, 18.6678, 14.7579, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:10:40.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:10:08
2026-04-15T15:10:41.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:10:41.791 [DEBUG] [Thread-21064] [transport.py] [_log()] starting thread (client mode): 0xee9acfd0
2026-04-15T15:10:41.791 [DEBUG] [Thread-21064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:10:41.808 [DEBUG] [Thread-21064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:10:41.808 [INFO] [Thread-21064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:10:41.811 [DEBUG] [Thread-21064] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:10:41.811 [DEBUG] [Thread-21064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:10:41.811 [DEBUG] [Thread-21064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:10:41.811 [DEBUG] [Thread-21064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:10:41.811 [DEBUG] [Thread-21064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:10:41.811 [DEBUG] [Thread-21064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:10:41.812 [DEBUG] [Thread-21064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:10:41.812 [DEBUG] [Thread-21064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:10:41.812 [DEBUG] [Thread-21064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:10:41.812 [DEBUG] [Thread-21064] [transport.py] [_log()] client lang: <none>
2026-04-15T15:10:41.812 [DEBUG] [Thread-21064] [transport.py] [_log()] server lang: <none>
2026-04-15T15:10:41.812 [DEBUG] [Thread-21064] [transport.py] [_log()] kex follows: False
2026-04-15T15:10:41.812 [DEBUG] [Thread-21064] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:10:41.812 [DEBUG] [Thread-21064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:10:41.812 [DEBUG] [Thread-21064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:10:41.812 [DEBUG] [Thread-21064] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:10:41.812 [DEBUG] [Thread-21064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:10:41.813 [DEBUG] [Thread-21064] [transport.py] [_log()] Compression: none
2026-04-15T15:10:41.813 [DEBUG] [Thread-21064] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:10:41.828 [DEBUG] [Thread-21064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:10:41.829 [DEBUG] [Thread-21064] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:10:41.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:10:41.829 [DEBUG] [Thread-21064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:10:41.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:10:41.830 [DEBUG] [Thread-21064] [transport.py] [_log()] userauth is OK
2026-04-15T15:10:41.830 [DEBUG] [Thread-21064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:10:41.830 [DEBUG] [Thread-21064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:10:41.830 [DEBUG] [Thread-21064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:10:41.831 [DEBUG] [Thread-21064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:10:41.865 [INFO] [Thread-21064] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:10:41.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:10:42.498 [DEBUG] [Thread-21064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:10:42.499 [DEBUG] [Thread-21064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:10:42.499 [DEBUG] [Thread-21064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:10:42.539 [DEBUG] [Thread-21064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:10:42.539 [DEBUG] [Thread-21064] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:10:42.542 [DEBUG] [Thread-21064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:10:42.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:10:42.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:10:42.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:10:42.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:10:42.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:10:42.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:10:42.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:10:42.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:10:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:10:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.548748 -999.00  +14.80  18.32     57   +6.50 1 1 1 1 1   888    0 7.92 7.50 ----- 15.8 18.3 329.8 23.8 21.9 -28.5 20.8 -27.6 21.9 -23.8 23.0 -26.1
2026-04-15T15:10:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:10:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:10:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.548748
2026-04-15T15:10:42.567 [DEBUG] [Thread-21064] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:10:42.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:10:42.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:10:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:10:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:10:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:10:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:10:08', tmtdew=9.53093, humidity=52.8478, cloud=0.0, wind=18.6678, temperature=14.7579, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:10:11.827', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:10:42.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:10:42.827 [DEBUG] [Thread-21067] [transport.py] [_log()] starting thread (client mode): 0xee9afd60
2026-04-15T15:10:42.827 [DEBUG] [Thread-21067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:10:42.841 [DEBUG] [Thread-21067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:10:42.841 [INFO] [Thread-21067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:10:42.849 [DEBUG] [Thread-21067] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:10:42.849 [DEBUG] [Thread-21067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:10:42.849 [DEBUG] [Thread-21067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:10:42.849 [DEBUG] [Thread-21067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:10:42.849 [DEBUG] [Thread-21067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:10:42.849 [DEBUG] [Thread-21067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:10:42.849 [DEBUG] [Thread-21067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:10:42.849 [DEBUG] [Thread-21067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:10:42.849 [DEBUG] [Thread-21067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:10:42.849 [DEBUG] [Thread-21067] [transport.py] [_log()] client lang: <none>
2026-04-15T15:10:42.849 [DEBUG] [Thread-21067] [transport.py] [_log()] server lang: <none>
2026-04-15T15:10:42.849 [DEBUG] [Thread-21067] [transport.py] [_log()] kex follows: False
2026-04-15T15:10:42.850 [DEBUG] [Thread-21067] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:10:42.850 [DEBUG] [Thread-21067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:10:42.850 [DEBUG] [Thread-21067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:10:42.850 [DEBUG] [Thread-21067] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:10:42.850 [DEBUG] [Thread-21067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:10:42.850 [DEBUG] [Thread-21067] [transport.py] [_log()] Compression: none
2026-04-15T15:10:42.850 [DEBUG] [Thread-21067] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:10:42.907 [DEBUG] [Thread-21067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:10:42.907 [DEBUG] [Thread-21067] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:10:42.907 [DEBUG] [Thread-21067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:10:42.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:10:42.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:10:42.963 [DEBUG] [Thread-21067] [transport.py] [_log()] userauth is OK
2026-04-15T15:10:42.963 [DEBUG] [Thread-21067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:10:42.963 [DEBUG] [Thread-21067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:10:42.963 [DEBUG] [Thread-21067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:10:42.964 [DEBUG] [Thread-21067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:10:42.991 [INFO] [Thread-21067] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:10:42.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:10:42.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:10:43.861 [DEBUG] [Thread-21067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:10:43.861 [DEBUG] [Thread-21067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:10:43.909 [DEBUG] [Thread-21067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:10:43.909 [DEBUG] [Thread-21067] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:10:43.918 [DEBUG] [Thread-21067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:10:43.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:10:43.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')
2026-04-15T15:10:43.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
2026-04-15T15:10:43.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:10:43.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:10:43.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:10:43.953 [DEBUG] [Thread-21067] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:10:46.479 [DEBUG] [Thread-21069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:11:01.518 [DEBUG] [Thread-21070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:11:09.429 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:11:09.430 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:11:13.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:11:13.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:11:13.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
2026-04-15T15:11:15.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 10, 44), 10.0356, 51.0659, 0.0, 17.7142, 15.1827, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:11:15.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:10:44
2026-04-15T15:11:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:11:16.103 [DEBUG] [Thread-21071] [transport.py] [_log()] starting thread (client mode): 0xee9af100
2026-04-15T15:11:16.103 [DEBUG] [Thread-21071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:11:16.123 [DEBUG] [Thread-21071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:11:16.123 [INFO] [Thread-21071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:11:16.126 [DEBUG] [Thread-21071] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:11:16.126 [DEBUG] [Thread-21071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:11:16.126 [DEBUG] [Thread-21071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:11:16.126 [DEBUG] [Thread-21071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:11:16.127 [DEBUG] [Thread-21071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:11:16.127 [DEBUG] [Thread-21071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:11:16.127 [DEBUG] [Thread-21071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:11:16.127 [DEBUG] [Thread-21071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:11:16.127 [DEBUG] [Thread-21071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:11:16.127 [DEBUG] [Thread-21071] [transport.py] [_log()] client lang: <none>
2026-04-15T15:11:16.127 [DEBUG] [Thread-21071] [transport.py] [_log()] server lang: <none>
2026-04-15T15:11:16.127 [DEBUG] [Thread-21071] [transport.py] [_log()] kex follows: False
2026-04-15T15:11:16.127 [DEBUG] [Thread-21071] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:11:16.127 [DEBUG] [Thread-21071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:11:16.127 [DEBUG] [Thread-21071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:11:16.127 [DEBUG] [Thread-21071] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:11:16.127 [DEBUG] [Thread-21071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:11:16.128 [DEBUG] [Thread-21071] [transport.py] [_log()] Compression: none
2026-04-15T15:11:16.128 [DEBUG] [Thread-21071] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:11:16.135 [DEBUG] [Thread-21071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:11:16.136 [DEBUG] [Thread-21071] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:11:16.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:11:16.136 [DEBUG] [Thread-21071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:11:16.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:11:16.137 [DEBUG] [Thread-21071] [transport.py] [_log()] userauth is OK
2026-04-15T15:11:16.137 [DEBUG] [Thread-21071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:11:16.137 [DEBUG] [Thread-21071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:11:16.138 [DEBUG] [Thread-21071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:11:16.138 [DEBUG] [Thread-21071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:11:16.153 [INFO] [Thread-21071] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:11:16.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:11:16.549 [DEBUG] [Thread-21073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:11:16.786 [DEBUG] [Thread-21071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:11:16.786 [DEBUG] [Thread-21071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:11:16.787 [DEBUG] [Thread-21071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:11:16.827 [DEBUG] [Thread-21071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:11:16.827 [DEBUG] [Thread-21071] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:11:16.830 [DEBUG] [Thread-21071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:11:16.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:11:16.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:11:16.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:11:16.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:11:16.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:11:16.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:11:16.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:11:16.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:11:16.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:11:16.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.549095 -999.00  +14.90  15.37     58   +6.80 1 1 1 1 1   888    0 7.89 6.69 ----- 13.8 15.4 323.8 21.0 21.8 -28.9 20.8 -27.2 21.9 -24.3 22.9 -26.1
2026-04-15T15:11:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:11:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:11:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.549095
2026-04-15T15:11:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:11:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:11:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:11:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:11:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:11:16.858 [DEBUG] [Thread-21071] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:11:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:10:44', tmtdew=10.0356, humidity=51.0659, cloud=0.0, wind=17.7142, temperature=15.1827, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:10:41.808', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:11:17.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:11:17.111 [DEBUG] [Thread-21075] [transport.py] [_log()] starting thread (client mode): 0xee9bda80
2026-04-15T15:11:17.112 [DEBUG] [Thread-21075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:11:17.126 [DEBUG] [Thread-21075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:11:17.126 [INFO] [Thread-21075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:11:17.133 [DEBUG] [Thread-21075] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:11:17.133 [DEBUG] [Thread-21075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:11:17.134 [DEBUG] [Thread-21075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:11:17.134 [DEBUG] [Thread-21075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:11:17.134 [DEBUG] [Thread-21075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:11:17.134 [DEBUG] [Thread-21075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:11:17.134 [DEBUG] [Thread-21075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:11:17.134 [DEBUG] [Thread-21075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:11:17.134 [DEBUG] [Thread-21075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:11:17.134 [DEBUG] [Thread-21075] [transport.py] [_log()] client lang: <none>
2026-04-15T15:11:17.134 [DEBUG] [Thread-21075] [transport.py] [_log()] server lang: <none>
2026-04-15T15:11:17.134 [DEBUG] [Thread-21075] [transport.py] [_log()] kex follows: False
2026-04-15T15:11:17.135 [DEBUG] [Thread-21075] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:11:17.135 [DEBUG] [Thread-21075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:11:17.135 [DEBUG] [Thread-21075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:11:17.135 [DEBUG] [Thread-21075] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:11:17.135 [DEBUG] [Thread-21075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:11:17.135 [DEBUG] [Thread-21075] [transport.py] [_log()] Compression: none
2026-04-15T15:11:17.135 [DEBUG] [Thread-21075] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:11:17.190 [DEBUG] [Thread-21075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:11:17.190 [DEBUG] [Thread-21075] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:11:17.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:11:17.191 [DEBUG] [Thread-21075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:11:17.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:11:17.247 [DEBUG] [Thread-21075] [transport.py] [_log()] userauth is OK
2026-04-15T15:11:17.247 [DEBUG] [Thread-21075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:11:17.248 [DEBUG] [Thread-21075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:11:17.248 [DEBUG] [Thread-21075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:11:17.248 [DEBUG] [Thread-21075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:11:17.273 [INFO] [Thread-21075] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:11:17.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:11:17.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:11:18.104 [DEBUG] [Thread-21075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:11:18.105 [DEBUG] [Thread-21075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:11:18.153 [DEBUG] [Thread-21075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:11:18.153 [DEBUG] [Thread-21075] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:11:18.163 [DEBUG] [Thread-21075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:11:18.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:11:18.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')
2026-04-15T15:11:18.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
2026-04-15T15:11:18.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:11:18.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:11:18.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:11:18.200 [DEBUG] [Thread-21075] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:11:31.059 [DEBUG] [Thread-21077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:11:31.580 [DEBUG] [Thread-21078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:11:46.625 [DEBUG] [Thread-21079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:11:48.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:11:48.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:11:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:11:49.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 11, 19), 9.51188, 53.0495, 0.0, 18.7567, 14.7748, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:11:49.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:11:19
2026-04-15T15:11:49.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:11:50.378 [DEBUG] [Thread-21080] [transport.py] [_log()] starting thread (client mode): 0xee9be530
2026-04-15T15:11:50.378 [DEBUG] [Thread-21080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:11:50.394 [DEBUG] [Thread-21080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:11:50.394 [INFO] [Thread-21080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:11:50.401 [DEBUG] [Thread-21080] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:11:50.401 [DEBUG] [Thread-21080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:11:50.402 [DEBUG] [Thread-21080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:11:50.402 [DEBUG] [Thread-21080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:11:50.402 [DEBUG] [Thread-21080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:11:50.402 [DEBUG] [Thread-21080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:11:50.402 [DEBUG] [Thread-21080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:11:50.402 [DEBUG] [Thread-21080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:11:50.402 [DEBUG] [Thread-21080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:11:50.402 [DEBUG] [Thread-21080] [transport.py] [_log()] client lang: <none>
2026-04-15T15:11:50.402 [DEBUG] [Thread-21080] [transport.py] [_log()] server lang: <none>
2026-04-15T15:11:50.402 [DEBUG] [Thread-21080] [transport.py] [_log()] kex follows: False
2026-04-15T15:11:50.403 [DEBUG] [Thread-21080] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:11:50.403 [DEBUG] [Thread-21080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:11:50.403 [DEBUG] [Thread-21080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:11:50.403 [DEBUG] [Thread-21080] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:11:50.403 [DEBUG] [Thread-21080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:11:50.403 [DEBUG] [Thread-21080] [transport.py] [_log()] Compression: none
2026-04-15T15:11:50.403 [DEBUG] [Thread-21080] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:11:50.411 [DEBUG] [Thread-21080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:11:50.412 [DEBUG] [Thread-21080] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:11:50.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:11:50.412 [DEBUG] [Thread-21080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:11:50.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:11:50.413 [DEBUG] [Thread-21080] [transport.py] [_log()] userauth is OK
2026-04-15T15:11:50.413 [DEBUG] [Thread-21080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:11:50.413 [DEBUG] [Thread-21080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:11:50.413 [DEBUG] [Thread-21080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:11:50.414 [DEBUG] [Thread-21080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:11:50.430 [INFO] [Thread-21080] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:11:50.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:11:51.213 [DEBUG] [Thread-21080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:11:51.214 [DEBUG] [Thread-21080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:11:51.214 [DEBUG] [Thread-21080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:11:51.254 [DEBUG] [Thread-21080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:11:51.254 [DEBUG] [Thread-21080] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:11:51.258 [DEBUG] [Thread-21080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:11:51.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:11:51.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:11:51.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:11:51.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:11:51.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:11:51.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:11:51.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:11:51.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:11:51.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:11:51.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.549442 -999.00  +15.30  13.45     59   +7.40 1 1 1 1 1   888    0 7.74 6.12 ----- 13.5 13.4 308.3 16.2 21.9 -27.9 20.9 -27.2 21.9 -24.9 23.0 -26.0
2026-04-15T15:11:51.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:11:51.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:11:51.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.549442
2026-04-15T15:11:51.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:11:51.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:11:51.282 [DEBUG] [Thread-21080] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:11:51.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:11:51.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:11:51.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:11:51.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:11:19', tmtdew=9.51188, humidity=53.0495, cloud=0.0, wind=18.7567, temperature=14.7748, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:11:11.789', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:11:51.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:11:51.532 [DEBUG] [Thread-21083] [transport.py] [_log()] starting thread (client mode): 0xee9bf460
2026-04-15T15:11:51.532 [DEBUG] [Thread-21083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:11:51.549 [DEBUG] [Thread-21083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:11:51.549 [INFO] [Thread-21083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:11:51.557 [DEBUG] [Thread-21083] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:11:51.557 [DEBUG] [Thread-21083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:11:51.557 [DEBUG] [Thread-21083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:11:51.557 [DEBUG] [Thread-21083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:11:51.557 [DEBUG] [Thread-21083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:11:51.557 [DEBUG] [Thread-21083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:11:51.557 [DEBUG] [Thread-21083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:11:51.557 [DEBUG] [Thread-21083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:11:51.557 [DEBUG] [Thread-21083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:11:51.558 [DEBUG] [Thread-21083] [transport.py] [_log()] client lang: <none>
2026-04-15T15:11:51.558 [DEBUG] [Thread-21083] [transport.py] [_log()] server lang: <none>
2026-04-15T15:11:51.558 [DEBUG] [Thread-21083] [transport.py] [_log()] kex follows: False
2026-04-15T15:11:51.558 [DEBUG] [Thread-21083] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:11:51.558 [DEBUG] [Thread-21083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:11:51.558 [DEBUG] [Thread-21083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:11:51.558 [DEBUG] [Thread-21083] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:11:51.558 [DEBUG] [Thread-21083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:11:51.558 [DEBUG] [Thread-21083] [transport.py] [_log()] Compression: none
2026-04-15T15:11:51.558 [DEBUG] [Thread-21083] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:11:51.614 [DEBUG] [Thread-21083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:11:51.615 [DEBUG] [Thread-21083] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:11:51.615 [DEBUG] [Thread-21083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:11:51.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:11:51.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:11:51.672 [DEBUG] [Thread-21083] [transport.py] [_log()] userauth is OK
2026-04-15T15:11:51.672 [DEBUG] [Thread-21083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:11:51.673 [DEBUG] [Thread-21083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:11:51.673 [DEBUG] [Thread-21083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:11:51.673 [DEBUG] [Thread-21083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:11:51.695 [INFO] [Thread-21083] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:11:51.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:11:51.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:11:52.498 [DEBUG] [Thread-21083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:11:52.498 [DEBUG] [Thread-21083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:11:52.546 [DEBUG] [Thread-21083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:11:52.546 [DEBUG] [Thread-21083] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:11:52.555 [DEBUG] [Thread-21083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:11:52.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:11:52.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')
2026-04-15T15:11:52.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
2026-04-15T15:11:52.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:11:52.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:11:52.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:11:52.598 [DEBUG] [Thread-21083] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:12:01.660 [DEBUG] [Thread-21085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:12:09.573 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:12:09.574 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:12:16.704 [DEBUG] [Thread-21086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:12:22.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:12:22.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:12:22.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
2026-04-15T15:12:23.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 11, 54), 10.0543, 50.9993, 0.0, 15.5268, 15.1824, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:12:23.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:11:54
2026-04-15T15:12:24.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:12:24.719 [DEBUG] [Thread-21087] [transport.py] [_log()] starting thread (client mode): 0xee9aecb0
2026-04-15T15:12:24.719 [DEBUG] [Thread-21087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:12:24.740 [DEBUG] [Thread-21087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:12:24.740 [INFO] [Thread-21087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:12:24.741 [DEBUG] [Thread-21087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:12:24.742 [DEBUG] [Thread-21087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:12:24.742 [DEBUG] [Thread-21087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:12:24.742 [DEBUG] [Thread-21087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:12:24.742 [DEBUG] [Thread-21087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:12:24.742 [DEBUG] [Thread-21087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:12:24.742 [DEBUG] [Thread-21087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:12:24.742 [DEBUG] [Thread-21087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:12:24.742 [DEBUG] [Thread-21087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:12:24.742 [DEBUG] [Thread-21087] [transport.py] [_log()] client lang: <none>
2026-04-15T15:12:24.742 [DEBUG] [Thread-21087] [transport.py] [_log()] server lang: <none>
2026-04-15T15:12:24.742 [DEBUG] [Thread-21087] [transport.py] [_log()] kex follows: False
2026-04-15T15:12:24.743 [DEBUG] [Thread-21087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:12:24.743 [DEBUG] [Thread-21087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:12:24.743 [DEBUG] [Thread-21087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:12:24.743 [DEBUG] [Thread-21087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:12:24.743 [DEBUG] [Thread-21087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:12:24.743 [DEBUG] [Thread-21087] [transport.py] [_log()] Compression: none
2026-04-15T15:12:24.743 [DEBUG] [Thread-21087] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:12:24.761 [DEBUG] [Thread-21087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:12:24.762 [DEBUG] [Thread-21087] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:12:24.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:12:24.762 [DEBUG] [Thread-21087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:12:24.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:12:24.764 [DEBUG] [Thread-21087] [transport.py] [_log()] userauth is OK
2026-04-15T15:12:24.764 [DEBUG] [Thread-21087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:12:24.764 [DEBUG] [Thread-21087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:12:24.764 [DEBUG] [Thread-21087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:12:24.764 [DEBUG] [Thread-21087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:12:24.788 [INFO] [Thread-21087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:12:24.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:12:25.595 [DEBUG] [Thread-21087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:12:25.596 [DEBUG] [Thread-21087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:12:25.596 [DEBUG] [Thread-21087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:12:25.636 [DEBUG] [Thread-21087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:12:25.636 [DEBUG] [Thread-21087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:12:25.639 [DEBUG] [Thread-21087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:12:25.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:12:25.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:12:25.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:12:25.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:12:25.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:12:25.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:12:25.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:12:25.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:12:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:12:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.549789 -999.00  +15.20  10.61     56   +6.60 1 1 1 1 1   888    0 7.82 6.39 ----- 15.5 10.6 339.3 14.8 21.9 -28.9 20.9 -28.1 21.8 -24.7 23.1 -26.4
2026-04-15T15:12:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:12:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:12:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.549789
2026-04-15T15:12:25.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:12:25.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:12:25.665 [DEBUG] [Thread-21087] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:12:25.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:12:25.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:12:25.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:12:25.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:11:54', tmtdew=10.0543, humidity=50.9993, cloud=0.0, wind=15.5268, temperature=15.1824, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:11:41.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:12:25.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:12:25.921 [DEBUG] [Thread-21090] [transport.py] [_log()] starting thread (client mode): 0xee9afeb0
2026-04-15T15:12:25.922 [DEBUG] [Thread-21090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:12:25.936 [DEBUG] [Thread-21090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:12:25.936 [INFO] [Thread-21090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:12:25.943 [DEBUG] [Thread-21090] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:12:25.943 [DEBUG] [Thread-21090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:12:25.943 [DEBUG] [Thread-21090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:12:25.943 [DEBUG] [Thread-21090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:12:25.944 [DEBUG] [Thread-21090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:12:25.944 [DEBUG] [Thread-21090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:12:25.944 [DEBUG] [Thread-21090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:12:25.944 [DEBUG] [Thread-21090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:12:25.944 [DEBUG] [Thread-21090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:12:25.944 [DEBUG] [Thread-21090] [transport.py] [_log()] client lang: <none>
2026-04-15T15:12:25.944 [DEBUG] [Thread-21090] [transport.py] [_log()] server lang: <none>
2026-04-15T15:12:25.944 [DEBUG] [Thread-21090] [transport.py] [_log()] kex follows: False
2026-04-15T15:12:25.944 [DEBUG] [Thread-21090] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:12:25.944 [DEBUG] [Thread-21090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:12:25.944 [DEBUG] [Thread-21090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:12:25.944 [DEBUG] [Thread-21090] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:12:25.945 [DEBUG] [Thread-21090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:12:25.945 [DEBUG] [Thread-21090] [transport.py] [_log()] Compression: none
2026-04-15T15:12:25.945 [DEBUG] [Thread-21090] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:12:26.003 [DEBUG] [Thread-21090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:12:26.003 [DEBUG] [Thread-21090] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:12:26.004 [DEBUG] [Thread-21090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:12:26.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:12:26.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:12:26.058 [DEBUG] [Thread-21090] [transport.py] [_log()] userauth is OK
2026-04-15T15:12:26.059 [DEBUG] [Thread-21090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:12:26.059 [DEBUG] [Thread-21090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:12:26.059 [DEBUG] [Thread-21090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:12:26.059 [DEBUG] [Thread-21090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:12:26.077 [INFO] [Thread-21090] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:12:26.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:12:26.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:12:26.909 [DEBUG] [Thread-21090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:12:26.909 [DEBUG] [Thread-21090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:12:26.957 [DEBUG] [Thread-21090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:12:26.957 [DEBUG] [Thread-21090] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:12:26.966 [DEBUG] [Thread-21090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:12:26.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:12:26.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')
2026-04-15T15:12:26.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
2026-04-15T15:12:26.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:12:26.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:12:26.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:12:27.000 [DEBUG] [Thread-21090] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:12:31.165 [DEBUG] [Thread-21092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:12:31.733 [DEBUG] [Thread-21093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:12:46.776 [DEBUG] [Thread-21094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:12:57.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:12:57.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:12:57.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
2026-04-15T15:12:58.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 12, 30), 9.68526, 52.3144, 0.0, 12.3527, 14.4913, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:12:58.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:12:30
2026-04-15T15:12:58.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:12:59.160 [DEBUG] [Thread-21095] [transport.py] [_log()] starting thread (client mode): 0xee9beb00
2026-04-15T15:12:59.160 [DEBUG] [Thread-21095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:12:59.179 [DEBUG] [Thread-21095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:12:59.179 [INFO] [Thread-21095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:12:59.182 [DEBUG] [Thread-21095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:12:59.182 [DEBUG] [Thread-21095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:12:59.183 [DEBUG] [Thread-21095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:12:59.183 [DEBUG] [Thread-21095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:12:59.183 [DEBUG] [Thread-21095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:12:59.183 [DEBUG] [Thread-21095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:12:59.183 [DEBUG] [Thread-21095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:12:59.183 [DEBUG] [Thread-21095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:12:59.183 [DEBUG] [Thread-21095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:12:59.183 [DEBUG] [Thread-21095] [transport.py] [_log()] client lang: <none>
2026-04-15T15:12:59.183 [DEBUG] [Thread-21095] [transport.py] [_log()] server lang: <none>
2026-04-15T15:12:59.184 [DEBUG] [Thread-21095] [transport.py] [_log()] kex follows: False
2026-04-15T15:12:59.184 [DEBUG] [Thread-21095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:12:59.184 [DEBUG] [Thread-21095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:12:59.184 [DEBUG] [Thread-21095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:12:59.184 [DEBUG] [Thread-21095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:12:59.184 [DEBUG] [Thread-21095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:12:59.184 [DEBUG] [Thread-21095] [transport.py] [_log()] Compression: none
2026-04-15T15:12:59.184 [DEBUG] [Thread-21095] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:12:59.204 [DEBUG] [Thread-21095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:12:59.205 [DEBUG] [Thread-21095] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:12:59.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:12:59.205 [DEBUG] [Thread-21095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:12:59.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:12:59.206 [DEBUG] [Thread-21095] [transport.py] [_log()] userauth is OK
2026-04-15T15:12:59.207 [DEBUG] [Thread-21095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:12:59.207 [DEBUG] [Thread-21095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:12:59.207 [DEBUG] [Thread-21095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:12:59.207 [DEBUG] [Thread-21095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:12:59.236 [INFO] [Thread-21095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:12:59.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:12:59.990 [DEBUG] [Thread-21095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:12:59.991 [DEBUG] [Thread-21095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:12:59.991 [DEBUG] [Thread-21095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:13:00.031 [DEBUG] [Thread-21095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:13:00.031 [DEBUG] [Thread-21095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:13:00.034 [DEBUG] [Thread-21095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:13:00.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:13:00.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:13:00.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:13:00.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:13:00.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:13:00.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:13:00.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:13:00.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:13:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:13:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.550484 -999.00  +15.10  19.45     56   +6.50 1 1 1 1 1   888    0 7.65 3.11 ----- 14.8 19.4 288.4 21.5 21.9 -29.0 20.9 -29.3 21.9 -25.7 23.0 -27.6
2026-04-15T15:13:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:13:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:13:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.550484
2026-04-15T15:13:00.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:13:00.056 [DEBUG] [Thread-21095] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:13:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:13:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:13:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:13:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:13:00.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:12:30', tmtdew=9.68526, humidity=52.3144, cloud=0.0, wind=12.3527, temperature=14.4913, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:12:41.818', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:13:00.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:13:00.313 [DEBUG] [Thread-21098] [transport.py] [_log()] starting thread (client mode): 0xee9bf520
2026-04-15T15:13:00.313 [DEBUG] [Thread-21098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:13:00.327 [DEBUG] [Thread-21098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:13:00.327 [INFO] [Thread-21098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:13:00.335 [DEBUG] [Thread-21098] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:13:00.335 [DEBUG] [Thread-21098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:13:00.335 [DEBUG] [Thread-21098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:13:00.335 [DEBUG] [Thread-21098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:13:00.335 [DEBUG] [Thread-21098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:13:00.335 [DEBUG] [Thread-21098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:13:00.335 [DEBUG] [Thread-21098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:13:00.335 [DEBUG] [Thread-21098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:13:00.335 [DEBUG] [Thread-21098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:13:00.335 [DEBUG] [Thread-21098] [transport.py] [_log()] client lang: <none>
2026-04-15T15:13:00.335 [DEBUG] [Thread-21098] [transport.py] [_log()] server lang: <none>
2026-04-15T15:13:00.335 [DEBUG] [Thread-21098] [transport.py] [_log()] kex follows: False
2026-04-15T15:13:00.335 [DEBUG] [Thread-21098] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:13:00.335 [DEBUG] [Thread-21098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:13:00.335 [DEBUG] [Thread-21098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:13:00.336 [DEBUG] [Thread-21098] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:13:00.336 [DEBUG] [Thread-21098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:13:00.336 [DEBUG] [Thread-21098] [transport.py] [_log()] Compression: none
2026-04-15T15:13:00.336 [DEBUG] [Thread-21098] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:13:00.394 [DEBUG] [Thread-21098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:13:00.395 [DEBUG] [Thread-21098] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:13:00.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:13:00.396 [DEBUG] [Thread-21098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:13:00.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:13:00.451 [DEBUG] [Thread-21098] [transport.py] [_log()] userauth is OK
2026-04-15T15:13:00.451 [DEBUG] [Thread-21098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:13:00.451 [DEBUG] [Thread-21098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:13:00.451 [DEBUG] [Thread-21098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:13:00.451 [DEBUG] [Thread-21098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:13:00.477 [INFO] [Thread-21098] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:13:00.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:13:00.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:13:01.306 [DEBUG] [Thread-21098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:13:01.306 [DEBUG] [Thread-21098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:13:01.357 [DEBUG] [Thread-21098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:13:01.357 [DEBUG] [Thread-21098] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:13:01.370 [DEBUG] [Thread-21098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:13:01.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:13:01.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')
2026-04-15T15:13:01.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
2026-04-15T15:13:01.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:13:01.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:13:01.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:13:01.404 [DEBUG] [Thread-21098] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:13:01.809 [DEBUG] [Thread-21100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:13:09.713 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:13:09.714 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:13:16.852 [DEBUG] [Thread-21101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:13:31.260 [DEBUG] [Thread-21102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:13:31.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:13:31.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:13:31.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
2026-04-15T15:13:31.884 [DEBUG] [Thread-21103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:13:32.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 13, 6), 9.63008, 52.5132, 0.0, 12.2116, 14.4913, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:13:32.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:13:06
2026-04-15T15:13:33.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:13:33.517 [DEBUG] [Thread-21104] [transport.py] [_log()] starting thread (client mode): 0xee9bc790
2026-04-15T15:13:33.518 [DEBUG] [Thread-21104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:13:33.538 [DEBUG] [Thread-21104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:13:33.538 [INFO] [Thread-21104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:13:33.541 [DEBUG] [Thread-21104] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:13:33.541 [DEBUG] [Thread-21104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:13:33.541 [DEBUG] [Thread-21104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:13:33.541 [DEBUG] [Thread-21104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:13:33.541 [DEBUG] [Thread-21104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:13:33.541 [DEBUG] [Thread-21104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:13:33.541 [DEBUG] [Thread-21104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:13:33.541 [DEBUG] [Thread-21104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:13:33.541 [DEBUG] [Thread-21104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:13:33.541 [DEBUG] [Thread-21104] [transport.py] [_log()] client lang: <none>
2026-04-15T15:13:33.542 [DEBUG] [Thread-21104] [transport.py] [_log()] server lang: <none>
2026-04-15T15:13:33.542 [DEBUG] [Thread-21104] [transport.py] [_log()] kex follows: False
2026-04-15T15:13:33.542 [DEBUG] [Thread-21104] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:13:33.542 [DEBUG] [Thread-21104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:13:33.542 [DEBUG] [Thread-21104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:13:33.542 [DEBUG] [Thread-21104] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:13:33.542 [DEBUG] [Thread-21104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:13:33.542 [DEBUG] [Thread-21104] [transport.py] [_log()] Compression: none
2026-04-15T15:13:33.542 [DEBUG] [Thread-21104] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:13:33.559 [DEBUG] [Thread-21104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:13:33.559 [DEBUG] [Thread-21104] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:13:33.560 [DEBUG] [Thread-21104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:13:33.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:13:33.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:13:33.561 [DEBUG] [Thread-21104] [transport.py] [_log()] userauth is OK
2026-04-15T15:13:33.561 [DEBUG] [Thread-21104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:13:33.561 [DEBUG] [Thread-21104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:13:33.561 [DEBUG] [Thread-21104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:13:33.561 [DEBUG] [Thread-21104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:13:33.580 [INFO] [Thread-21104] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:13:33.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:13:34.348 [DEBUG] [Thread-21104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:13:34.348 [DEBUG] [Thread-21104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:13:34.348 [DEBUG] [Thread-21104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:13:34.388 [DEBUG] [Thread-21104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:13:34.389 [DEBUG] [Thread-21104] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:13:34.391 [DEBUG] [Thread-21104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:13:34.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:13:34.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:13:34.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:13:34.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:13:34.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:13:34.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:13:34.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:13:34.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:13:34.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:13:34.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.550831 -999.00  +14.80  14.59     57   +6.40 1 1 1 1 1   888    0 7.77 4.75 ----- 12.0 14.6 300.8 20.0 21.8 -29.4 20.9 -28.0 21.7 -24.1 22.9 -26.6
2026-04-15T15:13:34.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:13:34.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:13:34.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.550831
2026-04-15T15:13:34.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:13:34.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:13:34.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:13:34.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:13:34.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:13:34.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:13:06', tmtdew=9.63008, humidity=52.5132, cloud=0.0, wind=12.2116, temperature=14.4913, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:13:11.798', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:13:34.410 [DEBUG] [Thread-21104] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:13:34.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:13:34.626 [DEBUG] [Thread-21107] [transport.py] [_log()] starting thread (client mode): 0xee9bc520
2026-04-15T15:13:34.627 [DEBUG] [Thread-21107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:13:34.642 [DEBUG] [Thread-21107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:13:34.642 [INFO] [Thread-21107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:13:34.650 [DEBUG] [Thread-21107] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:13:34.650 [DEBUG] [Thread-21107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:13:34.650 [DEBUG] [Thread-21107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:13:34.650 [DEBUG] [Thread-21107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:13:34.650 [DEBUG] [Thread-21107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:13:34.650 [DEBUG] [Thread-21107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:13:34.650 [DEBUG] [Thread-21107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:13:34.651 [DEBUG] [Thread-21107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:13:34.651 [DEBUG] [Thread-21107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:13:34.651 [DEBUG] [Thread-21107] [transport.py] [_log()] client lang: <none>
2026-04-15T15:13:34.651 [DEBUG] [Thread-21107] [transport.py] [_log()] server lang: <none>
2026-04-15T15:13:34.651 [DEBUG] [Thread-21107] [transport.py] [_log()] kex follows: False
2026-04-15T15:13:34.651 [DEBUG] [Thread-21107] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:13:34.651 [DEBUG] [Thread-21107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:13:34.651 [DEBUG] [Thread-21107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:13:34.651 [DEBUG] [Thread-21107] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:13:34.651 [DEBUG] [Thread-21107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:13:34.651 [DEBUG] [Thread-21107] [transport.py] [_log()] Compression: none
2026-04-15T15:13:34.652 [DEBUG] [Thread-21107] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:13:34.706 [DEBUG] [Thread-21107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:13:34.706 [DEBUG] [Thread-21107] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:13:34.707 [DEBUG] [Thread-21107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:13:34.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:13:34.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:13:34.763 [DEBUG] [Thread-21107] [transport.py] [_log()] userauth is OK
2026-04-15T15:13:34.763 [DEBUG] [Thread-21107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:13:34.763 [DEBUG] [Thread-21107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:13:34.764 [DEBUG] [Thread-21107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:13:34.764 [DEBUG] [Thread-21107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:13:34.788 [INFO] [Thread-21107] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:13:34.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:13:34.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:13:35.592 [DEBUG] [Thread-21107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:13:35.593 [DEBUG] [Thread-21107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:13:35.643 [DEBUG] [Thread-21107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:13:35.643 [DEBUG] [Thread-21107] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:13:35.653 [DEBUG] [Thread-21107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:13:35.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:13:35.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')
2026-04-15T15:13:35.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
2026-04-15T15:13:35.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:13:35.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:13:35.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:13:35.692 [DEBUG] [Thread-21107] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:13:46.915 [DEBUG] [Thread-21109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:14:01.952 [DEBUG] [Thread-21110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:14:05.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:14:05.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:14:05.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
2026-04-15T15:14:07.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 13, 41), 9.71077, 52.2582, 0.0, 15.5268, 15.2813, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:14:07.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:13:41
2026-04-15T15:14:07.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:14:07.878 [DEBUG] [Thread-21111] [transport.py] [_log()] starting thread (client mode): 0xee9afd30
2026-04-15T15:14:07.878 [DEBUG] [Thread-21111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:14:07.893 [DEBUG] [Thread-21111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:14:07.893 [INFO] [Thread-21111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:14:07.896 [DEBUG] [Thread-21111] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:14:07.896 [DEBUG] [Thread-21111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:14:07.896 [DEBUG] [Thread-21111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:14:07.896 [DEBUG] [Thread-21111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:14:07.896 [DEBUG] [Thread-21111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:14:07.896 [DEBUG] [Thread-21111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:14:07.897 [DEBUG] [Thread-21111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:14:07.897 [DEBUG] [Thread-21111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:14:07.897 [DEBUG] [Thread-21111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:14:07.897 [DEBUG] [Thread-21111] [transport.py] [_log()] client lang: <none>
2026-04-15T15:14:07.897 [DEBUG] [Thread-21111] [transport.py] [_log()] server lang: <none>
2026-04-15T15:14:07.897 [DEBUG] [Thread-21111] [transport.py] [_log()] kex follows: False
2026-04-15T15:14:07.897 [DEBUG] [Thread-21111] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:14:07.897 [DEBUG] [Thread-21111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:14:07.897 [DEBUG] [Thread-21111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:14:07.897 [DEBUG] [Thread-21111] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:14:07.897 [DEBUG] [Thread-21111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:14:07.897 [DEBUG] [Thread-21111] [transport.py] [_log()] Compression: none
2026-04-15T15:14:07.897 [DEBUG] [Thread-21111] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:14:07.909 [DEBUG] [Thread-21111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:14:07.909 [DEBUG] [Thread-21111] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:14:07.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:14:07.909 [DEBUG] [Thread-21111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:14:07.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:14:07.910 [DEBUG] [Thread-21111] [transport.py] [_log()] userauth is OK
2026-04-15T15:14:07.910 [DEBUG] [Thread-21111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:14:07.910 [DEBUG] [Thread-21111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:14:07.910 [DEBUG] [Thread-21111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:14:07.911 [DEBUG] [Thread-21111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:14:07.923 [INFO] [Thread-21111] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:14:07.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:14:08.698 [DEBUG] [Thread-21111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:14:08.698 [DEBUG] [Thread-21111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:14:08.699 [DEBUG] [Thread-21111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:14:08.738 [DEBUG] [Thread-21111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:14:08.739 [DEBUG] [Thread-21111] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:14:08.741 [DEBUG] [Thread-21111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:14:08.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:14:08.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:14:08.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:14:08.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:14:08.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:14:08.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:14:08.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:14:08.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:14:08.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:14:08.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.551178 -999.00  +14.50  14.23     58   +6.50 1 1 1 1 1   888    0 7.86 3.39 ----- 16.9 14.2 306.6 17.7 21.8 -28.7 20.9 -27.7 21.7 -26.0 22.9 -25.9
2026-04-15T15:14:08.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:14:08.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:14:08.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.551178
2026-04-15T15:14:08.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:14:08.762 [DEBUG] [Thread-21111] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:14:08.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:14:08.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:14:08.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:14:08.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:14:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:13:41', tmtdew=9.71077, humidity=52.2582, cloud=0.0, wind=15.5268, temperature=15.2813, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:13:41.779', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:14:09.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:14:09.013 [DEBUG] [Thread-21114] [transport.py] [_log()] starting thread (client mode): 0xee9ac460
2026-04-15T15:14:09.013 [DEBUG] [Thread-21114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:14:09.027 [DEBUG] [Thread-21114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:14:09.027 [INFO] [Thread-21114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:14:09.035 [DEBUG] [Thread-21114] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:14:09.035 [DEBUG] [Thread-21114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:14:09.035 [DEBUG] [Thread-21114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:14:09.035 [DEBUG] [Thread-21114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:14:09.035 [DEBUG] [Thread-21114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:14:09.035 [DEBUG] [Thread-21114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:14:09.035 [DEBUG] [Thread-21114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:14:09.035 [DEBUG] [Thread-21114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:14:09.035 [DEBUG] [Thread-21114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:14:09.035 [DEBUG] [Thread-21114] [transport.py] [_log()] client lang: <none>
2026-04-15T15:14:09.036 [DEBUG] [Thread-21114] [transport.py] [_log()] server lang: <none>
2026-04-15T15:14:09.036 [DEBUG] [Thread-21114] [transport.py] [_log()] kex follows: False
2026-04-15T15:14:09.036 [DEBUG] [Thread-21114] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:14:09.036 [DEBUG] [Thread-21114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:14:09.036 [DEBUG] [Thread-21114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:14:09.036 [DEBUG] [Thread-21114] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:14:09.036 [DEBUG] [Thread-21114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:14:09.036 [DEBUG] [Thread-21114] [transport.py] [_log()] Compression: none
2026-04-15T15:14:09.036 [DEBUG] [Thread-21114] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:14:09.094 [DEBUG] [Thread-21114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:14:09.095 [DEBUG] [Thread-21114] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:14:09.095 [DEBUG] [Thread-21114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:14:09.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:14:09.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:14:09.151 [DEBUG] [Thread-21114] [transport.py] [_log()] userauth is OK
2026-04-15T15:14:09.152 [DEBUG] [Thread-21114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:14:09.152 [DEBUG] [Thread-21114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:14:09.152 [DEBUG] [Thread-21114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:14:09.152 [DEBUG] [Thread-21114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:14:09.179 [INFO] [Thread-21114] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:14:09.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:14:09.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:14:09.855 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:14:09.856 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:14:09.981 [DEBUG] [Thread-21114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:14:09.982 [DEBUG] [Thread-21114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:14:10.029 [DEBUG] [Thread-21114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:14:10.029 [DEBUG] [Thread-21114] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:14:10.038 [DEBUG] [Thread-21114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:14:10.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:14:10.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')
2026-04-15T15:14:10.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
2026-04-15T15:14:10.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:14:10.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:14:10.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:14:10.073 [DEBUG] [Thread-21114] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:14:16.984 [DEBUG] [Thread-21116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:14:31.344 [DEBUG] [Thread-21117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:14:32.025 [DEBUG] [Thread-21118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:14:40.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:14:40.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:14:40.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
2026-04-15T15:14:41.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 14, 17), 9.5801, 52.6983, 0.0, 14.0101, 14.5569, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:14:41.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:14:17
2026-04-15T15:14:41.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:14:42.232 [DEBUG] [Thread-21119] [transport.py] [_log()] starting thread (client mode): 0xee9bfeb0
2026-04-15T15:14:42.232 [DEBUG] [Thread-21119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:14:42.252 [DEBUG] [Thread-21119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:14:42.252 [INFO] [Thread-21119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:14:42.255 [DEBUG] [Thread-21119] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:14:42.255 [DEBUG] [Thread-21119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:14:42.255 [DEBUG] [Thread-21119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:14:42.255 [DEBUG] [Thread-21119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:14:42.255 [DEBUG] [Thread-21119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:14:42.256 [DEBUG] [Thread-21119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:14:42.256 [DEBUG] [Thread-21119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:14:42.256 [DEBUG] [Thread-21119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:14:42.256 [DEBUG] [Thread-21119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:14:42.256 [DEBUG] [Thread-21119] [transport.py] [_log()] client lang: <none>
2026-04-15T15:14:42.256 [DEBUG] [Thread-21119] [transport.py] [_log()] server lang: <none>
2026-04-15T15:14:42.256 [DEBUG] [Thread-21119] [transport.py] [_log()] kex follows: False
2026-04-15T15:14:42.256 [DEBUG] [Thread-21119] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:14:42.256 [DEBUG] [Thread-21119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:14:42.256 [DEBUG] [Thread-21119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:14:42.257 [DEBUG] [Thread-21119] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:14:42.257 [DEBUG] [Thread-21119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:14:42.257 [DEBUG] [Thread-21119] [transport.py] [_log()] Compression: none
2026-04-15T15:14:42.257 [DEBUG] [Thread-21119] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:14:42.274 [DEBUG] [Thread-21119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:14:42.274 [DEBUG] [Thread-21119] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:14:42.275 [DEBUG] [Thread-21119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:14:42.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:14:42.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:14:42.276 [DEBUG] [Thread-21119] [transport.py] [_log()] userauth is OK
2026-04-15T15:14:42.276 [DEBUG] [Thread-21119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:14:42.276 [DEBUG] [Thread-21119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:14:42.276 [DEBUG] [Thread-21119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:14:42.277 [DEBUG] [Thread-21119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:14:42.300 [INFO] [Thread-21119] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:14:42.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:14:43.053 [DEBUG] [Thread-21119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:14:43.053 [DEBUG] [Thread-21119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:14:43.054 [DEBUG] [Thread-21119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:14:43.094 [DEBUG] [Thread-21119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:14:43.094 [DEBUG] [Thread-21119] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:14:43.097 [DEBUG] [Thread-21119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:14:43.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:14:43.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:14:43.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:14:43.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:14:43.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:14:43.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:14:43.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:14:43.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:14:43.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:14:43.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.551525 -999.00  +14.30  12.29     59   +6.50 1 1 1 1 1   888    0 7.79 0.62 ----- 11.0 12.3 296.6 17.7 21.8 -28.7 20.9 -27.3 21.6 -23.2 22.9 -26.1
2026-04-15T15:14:43.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:14:43.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:14:43.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.551525
2026-04-15T15:14:43.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:14:43.119 [DEBUG] [Thread-21119] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:14:43.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:14:43.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:14:43.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:14:43.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:14:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:14:17', tmtdew=9.5801, humidity=52.6983, cloud=0.0, wind=14.0101, temperature=14.5569, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:14:11.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:14:43.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:14:43.378 [DEBUG] [Thread-21122] [transport.py] [_log()] starting thread (client mode): 0xee9bc670
2026-04-15T15:14:43.378 [DEBUG] [Thread-21122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:14:43.392 [DEBUG] [Thread-21122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:14:43.392 [INFO] [Thread-21122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:14:43.399 [DEBUG] [Thread-21122] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:14:43.399 [DEBUG] [Thread-21122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:14:43.399 [DEBUG] [Thread-21122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:14:43.399 [DEBUG] [Thread-21122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:14:43.400 [DEBUG] [Thread-21122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:14:43.400 [DEBUG] [Thread-21122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:14:43.400 [DEBUG] [Thread-21122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:14:43.400 [DEBUG] [Thread-21122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:14:43.400 [DEBUG] [Thread-21122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:14:43.400 [DEBUG] [Thread-21122] [transport.py] [_log()] client lang: <none>
2026-04-15T15:14:43.400 [DEBUG] [Thread-21122] [transport.py] [_log()] server lang: <none>
2026-04-15T15:14:43.400 [DEBUG] [Thread-21122] [transport.py] [_log()] kex follows: False
2026-04-15T15:14:43.400 [DEBUG] [Thread-21122] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:14:43.400 [DEBUG] [Thread-21122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:14:43.400 [DEBUG] [Thread-21122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:14:43.400 [DEBUG] [Thread-21122] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:14:43.400 [DEBUG] [Thread-21122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:14:43.401 [DEBUG] [Thread-21122] [transport.py] [_log()] Compression: none
2026-04-15T15:14:43.401 [DEBUG] [Thread-21122] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:14:43.459 [DEBUG] [Thread-21122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:14:43.459 [DEBUG] [Thread-21122] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:14:43.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:14:43.460 [DEBUG] [Thread-21122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:14:43.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:14:43.515 [DEBUG] [Thread-21122] [transport.py] [_log()] userauth is OK
2026-04-15T15:14:43.515 [DEBUG] [Thread-21122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:14:43.516 [DEBUG] [Thread-21122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:14:43.516 [DEBUG] [Thread-21122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:14:43.516 [DEBUG] [Thread-21122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:14:43.542 [INFO] [Thread-21122] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:14:43.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:14:43.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:14:44.374 [DEBUG] [Thread-21122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:14:44.374 [DEBUG] [Thread-21122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:14:44.422 [DEBUG] [Thread-21122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:14:44.422 [DEBUG] [Thread-21122] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:14:44.431 [DEBUG] [Thread-21122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:14:44.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:14:44.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')
2026-04-15T15:14:44.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
2026-04-15T15:14:44.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:14:44.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:14:44.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:14:44.466 [DEBUG] [Thread-21122] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:14:47.056 [DEBUG] [Thread-21124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:15:02.097 [DEBUG] [Thread-21125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:15:09.997 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:15:09.998 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:15:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:15:14.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:15:14.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
2026-04-15T15:15:15.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 14, 52), 9.94301, 51.529, 0.0, 20.4307, 15.6788, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:15:15.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:14:52
2026-04-15T15:15:16.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:15:16.577 [DEBUG] [Thread-21126] [transport.py] [_log()] starting thread (client mode): 0xee9beb60
2026-04-15T15:15:16.577 [DEBUG] [Thread-21126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:15:16.597 [DEBUG] [Thread-21126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:15:16.597 [INFO] [Thread-21126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:15:16.600 [DEBUG] [Thread-21126] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:15:16.600 [DEBUG] [Thread-21126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:15:16.600 [DEBUG] [Thread-21126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:15:16.600 [DEBUG] [Thread-21126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:15:16.600 [DEBUG] [Thread-21126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:15:16.600 [DEBUG] [Thread-21126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:15:16.600 [DEBUG] [Thread-21126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:15:16.601 [DEBUG] [Thread-21126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:15:16.601 [DEBUG] [Thread-21126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:15:16.601 [DEBUG] [Thread-21126] [transport.py] [_log()] client lang: <none>
2026-04-15T15:15:16.601 [DEBUG] [Thread-21126] [transport.py] [_log()] server lang: <none>
2026-04-15T15:15:16.601 [DEBUG] [Thread-21126] [transport.py] [_log()] kex follows: False
2026-04-15T15:15:16.601 [DEBUG] [Thread-21126] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:15:16.601 [DEBUG] [Thread-21126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:15:16.601 [DEBUG] [Thread-21126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:15:16.601 [DEBUG] [Thread-21126] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:15:16.601 [DEBUG] [Thread-21126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:15:16.601 [DEBUG] [Thread-21126] [transport.py] [_log()] Compression: none
2026-04-15T15:15:16.601 [DEBUG] [Thread-21126] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:15:16.620 [DEBUG] [Thread-21126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:15:16.621 [DEBUG] [Thread-21126] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:15:16.621 [DEBUG] [Thread-21126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:15:16.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:15:16.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:15:16.661 [DEBUG] [Thread-21126] [transport.py] [_log()] userauth is OK
2026-04-15T15:15:16.662 [DEBUG] [Thread-21126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:15:16.662 [DEBUG] [Thread-21126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:15:16.662 [DEBUG] [Thread-21126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:15:16.662 [DEBUG] [Thread-21126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:15:16.697 [INFO] [Thread-21126] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:15:16.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:15:17.124 [DEBUG] [Thread-21128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:15:20.004 [DEBUG] [Thread-21126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:15:20.004 [DEBUG] [Thread-21126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:15:20.005 [DEBUG] [Thread-21126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:15:20.045 [DEBUG] [Thread-21126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:15:20.045 [DEBUG] [Thread-21126] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:15:20.048 [DEBUG] [Thread-21126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:15:20.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:15:20.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:15:20.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:15:20.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:15:20.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:15:20.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:15:20.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:15:20.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:15:20.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:15:20.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.551872 -999.00  +14.40  12.57     59   +6.70 1 1 1 1 1   888    0 7.59 -1.03 ----- 14.9 12.6 304.2 15.1 21.8 -28.7 20.9 -26.9 21.7 -24.4 22.9 -25.4
2026-04-15T15:15:20.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:15:20.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:15:20.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.551872
2026-04-15T15:15:20.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:15:20.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:15:20.173 [DEBUG] [Thread-21126] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:15:20.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:15:20.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:15:20.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:15:20.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:14:52', tmtdew=9.94301, humidity=51.529, cloud=0.0, wind=20.4307, temperature=15.6788, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:14:41.741', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:15:20.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:15:20.425 [DEBUG] [Thread-21130] [transport.py] [_log()] starting thread (client mode): 0xee9aecb0
2026-04-15T15:15:20.425 [DEBUG] [Thread-21130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:15:20.440 [DEBUG] [Thread-21130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:15:20.440 [INFO] [Thread-21130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:15:20.447 [DEBUG] [Thread-21130] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:15:20.447 [DEBUG] [Thread-21130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:15:20.447 [DEBUG] [Thread-21130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:15:20.447 [DEBUG] [Thread-21130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:15:20.447 [DEBUG] [Thread-21130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:15:20.448 [DEBUG] [Thread-21130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:15:20.448 [DEBUG] [Thread-21130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:15:20.448 [DEBUG] [Thread-21130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:15:20.448 [DEBUG] [Thread-21130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:15:20.448 [DEBUG] [Thread-21130] [transport.py] [_log()] client lang: <none>
2026-04-15T15:15:20.448 [DEBUG] [Thread-21130] [transport.py] [_log()] server lang: <none>
2026-04-15T15:15:20.448 [DEBUG] [Thread-21130] [transport.py] [_log()] kex follows: False
2026-04-15T15:15:20.448 [DEBUG] [Thread-21130] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:15:20.448 [DEBUG] [Thread-21130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:15:20.448 [DEBUG] [Thread-21130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:15:20.448 [DEBUG] [Thread-21130] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:15:20.449 [DEBUG] [Thread-21130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:15:20.449 [DEBUG] [Thread-21130] [transport.py] [_log()] Compression: none
2026-04-15T15:15:20.449 [DEBUG] [Thread-21130] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:15:20.503 [DEBUG] [Thread-21130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:15:20.503 [DEBUG] [Thread-21130] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:15:20.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:15:20.504 [DEBUG] [Thread-21130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:15:20.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:15:20.559 [DEBUG] [Thread-21130] [transport.py] [_log()] userauth is OK
2026-04-15T15:15:20.559 [DEBUG] [Thread-21130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:15:20.560 [DEBUG] [Thread-21130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:15:20.560 [DEBUG] [Thread-21130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:15:20.560 [DEBUG] [Thread-21130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:15:20.587 [INFO] [Thread-21130] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:15:20.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:15:20.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:15:21.421 [DEBUG] [Thread-21130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:15:21.422 [DEBUG] [Thread-21130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:15:21.469 [DEBUG] [Thread-21130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:15:21.469 [DEBUG] [Thread-21130] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:15:21.477 [DEBUG] [Thread-21130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:15:21.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:15:21.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')
2026-04-15T15:15:21.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
2026-04-15T15:15:21.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:15:21.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:15:21.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:15:21.514 [DEBUG] [Thread-21130] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:15:31.447 [DEBUG] [Thread-21132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:15:32.154 [DEBUG] [Thread-21133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:15:47.198 [DEBUG] [Thread-21134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:15:51.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:15:51.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:15:51.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
2026-04-15T15:15:52.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 15, 28), 9.84272, 51.9556, 0.0, 13.4809, 14.6397, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:15:52.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:15:28
2026-04-15T15:15:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:15:53.612 [DEBUG] [Thread-21135] [transport.py] [_log()] starting thread (client mode): 0xee924340
2026-04-15T15:15:53.612 [DEBUG] [Thread-21135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:15:53.629 [DEBUG] [Thread-21135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:15:53.629 [INFO] [Thread-21135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:15:53.632 [DEBUG] [Thread-21135] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:15:53.632 [DEBUG] [Thread-21135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:15:53.632 [DEBUG] [Thread-21135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:15:53.633 [DEBUG] [Thread-21135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:15:53.633 [DEBUG] [Thread-21135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:15:53.633 [DEBUG] [Thread-21135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:15:53.633 [DEBUG] [Thread-21135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:15:53.633 [DEBUG] [Thread-21135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:15:53.633 [DEBUG] [Thread-21135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:15:53.633 [DEBUG] [Thread-21135] [transport.py] [_log()] client lang: <none>
2026-04-15T15:15:53.633 [DEBUG] [Thread-21135] [transport.py] [_log()] server lang: <none>
2026-04-15T15:15:53.633 [DEBUG] [Thread-21135] [transport.py] [_log()] kex follows: False
2026-04-15T15:15:53.633 [DEBUG] [Thread-21135] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:15:53.633 [DEBUG] [Thread-21135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:15:53.633 [DEBUG] [Thread-21135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:15:53.634 [DEBUG] [Thread-21135] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:15:53.634 [DEBUG] [Thread-21135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:15:53.634 [DEBUG] [Thread-21135] [transport.py] [_log()] Compression: none
2026-04-15T15:15:53.634 [DEBUG] [Thread-21135] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:15:53.651 [DEBUG] [Thread-21135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:15:53.651 [DEBUG] [Thread-21135] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:15:53.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:15:53.652 [DEBUG] [Thread-21135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:15:53.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:15:53.653 [DEBUG] [Thread-21135] [transport.py] [_log()] userauth is OK
2026-04-15T15:15:53.653 [DEBUG] [Thread-21135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:15:53.653 [DEBUG] [Thread-21135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:15:53.653 [DEBUG] [Thread-21135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:15:53.654 [DEBUG] [Thread-21135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:15:53.678 [INFO] [Thread-21135] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:15:53.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:15:54.457 [DEBUG] [Thread-21135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:15:54.457 [DEBUG] [Thread-21135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:15:54.457 [DEBUG] [Thread-21135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:15:54.498 [DEBUG] [Thread-21135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:15:54.498 [DEBUG] [Thread-21135] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:15:54.500 [DEBUG] [Thread-21135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:15:54.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:15:54.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:15:54.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:15:54.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:15:54.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:15:54.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:15:54.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:15:54.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:15:54.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:15:54.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.552220 -999.00  +14.60  16.04     59   +6.70 1 1 1 1 1   888    0 7.74 -1.49 ----- 12.9 16.0 328.0 21.5 21.9 -28.4 20.9 -27.6 21.8 -24.8 22.9 -25.1
2026-04-15T15:15:54.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:15:54.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:15:54.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.552220
2026-04-15T15:15:54.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:15:54.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:15:54.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:15:54.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:15:54.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:15:54.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:15:28', tmtdew=9.84272, humidity=51.9556, cloud=0.0, wind=13.4809, temperature=14.6397, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:15:11.808', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:15:54.520 [DEBUG] [Thread-21135] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:15:54.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:15:54.736 [DEBUG] [Thread-21138] [transport.py] [_log()] starting thread (client mode): 0xee927100
2026-04-15T15:15:54.737 [DEBUG] [Thread-21138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:15:54.754 [DEBUG] [Thread-21138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:15:54.754 [INFO] [Thread-21138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:15:54.762 [DEBUG] [Thread-21138] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:15:54.762 [DEBUG] [Thread-21138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:15:54.762 [DEBUG] [Thread-21138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:15:54.762 [DEBUG] [Thread-21138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:15:54.762 [DEBUG] [Thread-21138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:15:54.762 [DEBUG] [Thread-21138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:15:54.763 [DEBUG] [Thread-21138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:15:54.763 [DEBUG] [Thread-21138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:15:54.763 [DEBUG] [Thread-21138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:15:54.763 [DEBUG] [Thread-21138] [transport.py] [_log()] client lang: <none>
2026-04-15T15:15:54.763 [DEBUG] [Thread-21138] [transport.py] [_log()] server lang: <none>
2026-04-15T15:15:54.763 [DEBUG] [Thread-21138] [transport.py] [_log()] kex follows: False
2026-04-15T15:15:54.763 [DEBUG] [Thread-21138] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:15:54.763 [DEBUG] [Thread-21138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:15:54.763 [DEBUG] [Thread-21138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:15:54.763 [DEBUG] [Thread-21138] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:15:54.763 [DEBUG] [Thread-21138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:15:54.764 [DEBUG] [Thread-21138] [transport.py] [_log()] Compression: none
2026-04-15T15:15:54.764 [DEBUG] [Thread-21138] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:15:54.819 [DEBUG] [Thread-21138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:15:54.819 [DEBUG] [Thread-21138] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:15:54.820 [DEBUG] [Thread-21138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:15:54.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:15:54.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:15:54.876 [DEBUG] [Thread-21138] [transport.py] [_log()] userauth is OK
2026-04-15T15:15:54.876 [DEBUG] [Thread-21138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:15:54.876 [DEBUG] [Thread-21138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:15:54.876 [DEBUG] [Thread-21138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:15:54.876 [DEBUG] [Thread-21138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:15:54.901 [INFO] [Thread-21138] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:15:54.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:15:54.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:15:55.730 [DEBUG] [Thread-21138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:15:55.731 [DEBUG] [Thread-21138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:15:55.778 [DEBUG] [Thread-21138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:15:55.778 [DEBUG] [Thread-21138] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:15:55.787 [DEBUG] [Thread-21138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:15:55.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:15:55.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')
2026-04-15T15:15:55.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
2026-04-15T15:15:55.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:15:55.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:15:55.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:15:55.821 [DEBUG] [Thread-21138] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:16:02.229 [DEBUG] [Thread-21140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:16:10.142 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:16:10.143 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:16:17.276 [DEBUG] [Thread-21141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:16:25.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:16:25.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:16:25.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
2026-04-15T15:16:27.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 16, 4), 9.70742, 52.4029, 0.0, 10.2175, 14.5733, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:16:27.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:16:04
2026-04-15T15:16:27.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:16:28.061 [DEBUG] [Thread-21142] [transport.py] [_log()] starting thread (client mode): 0xee9245b0
2026-04-15T15:16:28.061 [DEBUG] [Thread-21142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:16:28.081 [DEBUG] [Thread-21142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:16:28.082 [INFO] [Thread-21142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:16:28.084 [DEBUG] [Thread-21142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:16:28.085 [DEBUG] [Thread-21142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:16:28.085 [DEBUG] [Thread-21142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:16:28.085 [DEBUG] [Thread-21142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:16:28.085 [DEBUG] [Thread-21142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:16:28.085 [DEBUG] [Thread-21142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:16:28.085 [DEBUG] [Thread-21142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:16:28.085 [DEBUG] [Thread-21142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:16:28.085 [DEBUG] [Thread-21142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:16:28.085 [DEBUG] [Thread-21142] [transport.py] [_log()] client lang: <none>
2026-04-15T15:16:28.085 [DEBUG] [Thread-21142] [transport.py] [_log()] server lang: <none>
2026-04-15T15:16:28.085 [DEBUG] [Thread-21142] [transport.py] [_log()] kex follows: False
2026-04-15T15:16:28.086 [DEBUG] [Thread-21142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:16:28.086 [DEBUG] [Thread-21142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:16:28.086 [DEBUG] [Thread-21142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:16:28.086 [DEBUG] [Thread-21142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:16:28.086 [DEBUG] [Thread-21142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:16:28.086 [DEBUG] [Thread-21142] [transport.py] [_log()] Compression: none
2026-04-15T15:16:28.086 [DEBUG] [Thread-21142] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:16:28.103 [DEBUG] [Thread-21142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:16:28.104 [DEBUG] [Thread-21142] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:16:28.104 [DEBUG] [Thread-21142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:16:28.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:16:28.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:16:28.105 [DEBUG] [Thread-21142] [transport.py] [_log()] userauth is OK
2026-04-15T15:16:28.105 [DEBUG] [Thread-21142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:16:28.105 [DEBUG] [Thread-21142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:16:28.105 [DEBUG] [Thread-21142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:16:28.106 [DEBUG] [Thread-21142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:16:28.123 [INFO] [Thread-21142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:16:28.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:16:29.215 [DEBUG] [Thread-21142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:16:29.215 [DEBUG] [Thread-21142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:16:29.215 [DEBUG] [Thread-21142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:16:29.256 [DEBUG] [Thread-21142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:16:29.256 [DEBUG] [Thread-21142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:16:29.259 [DEBUG] [Thread-21142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:16:29.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:16:29.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:16:29.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:16:29.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:16:29.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:16:29.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:16:29.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:16:29.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:16:29.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:16:29.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.552567 -999.00  +14.30  13.22     57   +6.00 1 1 1 1 1   888    0 7.94 3.96 ----- 11.6 13.2 11.0 19.6 21.8 -28.6 20.6 -28.8 21.8 -24.4 22.9 -25.2
2026-04-15T15:16:29.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:16:29.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:16:29.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.552567
2026-04-15T15:16:29.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:16:29.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:16:29.283 [DEBUG] [Thread-21142] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:16:29.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:16:29.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:16:29.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:16:29.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:16:04', tmtdew=9.70742, humidity=52.4029, cloud=0.0, wind=10.2175, temperature=14.5733, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:15:41.789', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:16:29.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:16:29.540 [DEBUG] [Thread-21145] [transport.py] [_log()] starting thread (client mode): 0xee925210
2026-04-15T15:16:29.540 [DEBUG] [Thread-21145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:16:29.555 [DEBUG] [Thread-21145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:16:29.555 [INFO] [Thread-21145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:16:29.562 [DEBUG] [Thread-21145] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:16:29.562 [DEBUG] [Thread-21145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:16:29.562 [DEBUG] [Thread-21145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:16:29.562 [DEBUG] [Thread-21145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:16:29.562 [DEBUG] [Thread-21145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:16:29.562 [DEBUG] [Thread-21145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:16:29.563 [DEBUG] [Thread-21145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:16:29.563 [DEBUG] [Thread-21145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:16:29.563 [DEBUG] [Thread-21145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:16:29.563 [DEBUG] [Thread-21145] [transport.py] [_log()] client lang: <none>
2026-04-15T15:16:29.563 [DEBUG] [Thread-21145] [transport.py] [_log()] server lang: <none>
2026-04-15T15:16:29.563 [DEBUG] [Thread-21145] [transport.py] [_log()] kex follows: False
2026-04-15T15:16:29.563 [DEBUG] [Thread-21145] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:16:29.563 [DEBUG] [Thread-21145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:16:29.563 [DEBUG] [Thread-21145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:16:29.563 [DEBUG] [Thread-21145] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:16:29.563 [DEBUG] [Thread-21145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:16:29.563 [DEBUG] [Thread-21145] [transport.py] [_log()] Compression: none
2026-04-15T15:16:29.564 [DEBUG] [Thread-21145] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:16:29.619 [DEBUG] [Thread-21145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:16:29.619 [DEBUG] [Thread-21145] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:16:29.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:16:29.620 [DEBUG] [Thread-21145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:16:29.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:16:29.675 [DEBUG] [Thread-21145] [transport.py] [_log()] userauth is OK
2026-04-15T15:16:29.676 [DEBUG] [Thread-21145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:16:29.676 [DEBUG] [Thread-21145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:16:29.676 [DEBUG] [Thread-21145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:16:29.676 [DEBUG] [Thread-21145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:16:29.701 [INFO] [Thread-21145] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:16:29.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:16:29.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:16:30.561 [DEBUG] [Thread-21145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:16:30.562 [DEBUG] [Thread-21145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:16:30.609 [DEBUG] [Thread-21145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:16:30.609 [DEBUG] [Thread-21145] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:16:30.618 [DEBUG] [Thread-21145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:16:30.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:16:30.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')
2026-04-15T15:16:30.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
2026-04-15T15:16:30.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:16:30.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:16:30.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:16:30.652 [DEBUG] [Thread-21145] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:16:31.527 [DEBUG] [Thread-21147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:16:32.307 [DEBUG] [Thread-21148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:16:47.348 [DEBUG] [Thread-21149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:17:00.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:17:00.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:17:00.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:17:01.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 16, 39), 10.1386, 50.7005, 0.0, 13.9745, 15.1816, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:17:01.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:16:39
2026-04-15T15:17:02.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:17:02.380 [DEBUG] [Thread-21150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:17:02.782 [DEBUG] [Thread-21151] [transport.py] [_log()] starting thread (client mode): 0xee925f00
2026-04-15T15:17:02.783 [DEBUG] [Thread-21151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:17:02.802 [DEBUG] [Thread-21151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:17:02.802 [INFO] [Thread-21151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:17:02.805 [DEBUG] [Thread-21151] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:17:02.805 [DEBUG] [Thread-21151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:17:02.805 [DEBUG] [Thread-21151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:17:02.805 [DEBUG] [Thread-21151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:17:02.805 [DEBUG] [Thread-21151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:17:02.806 [DEBUG] [Thread-21151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:17:02.806 [DEBUG] [Thread-21151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:17:02.806 [DEBUG] [Thread-21151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:17:02.806 [DEBUG] [Thread-21151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:17:02.806 [DEBUG] [Thread-21151] [transport.py] [_log()] client lang: <none>
2026-04-15T15:17:02.806 [DEBUG] [Thread-21151] [transport.py] [_log()] server lang: <none>
2026-04-15T15:17:02.806 [DEBUG] [Thread-21151] [transport.py] [_log()] kex follows: False
2026-04-15T15:17:02.806 [DEBUG] [Thread-21151] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:17:02.806 [DEBUG] [Thread-21151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:17:02.806 [DEBUG] [Thread-21151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:17:02.807 [DEBUG] [Thread-21151] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:17:02.807 [DEBUG] [Thread-21151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:17:02.807 [DEBUG] [Thread-21151] [transport.py] [_log()] Compression: none
2026-04-15T15:17:02.807 [DEBUG] [Thread-21151] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:17:02.823 [DEBUG] [Thread-21151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:17:02.824 [DEBUG] [Thread-21151] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:17:02.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:17:02.824 [DEBUG] [Thread-21151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:17:02.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:17:02.826 [DEBUG] [Thread-21151] [transport.py] [_log()] userauth is OK
2026-04-15T15:17:02.826 [DEBUG] [Thread-21151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:17:02.826 [DEBUG] [Thread-21151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:17:02.826 [DEBUG] [Thread-21151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:17:02.826 [DEBUG] [Thread-21151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:17:02.851 [INFO] [Thread-21151] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:17:02.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:17:03.681 [DEBUG] [Thread-21151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:17:03.682 [DEBUG] [Thread-21151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:17:03.682 [DEBUG] [Thread-21151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:17:03.722 [DEBUG] [Thread-21151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:17:03.722 [DEBUG] [Thread-21151] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:17:03.725 [DEBUG] [Thread-21151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:17:03.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:17:03.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:17:03.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:17:03.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:17:03.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:17:03.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:17:03.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:17:03.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:17:03.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:17:03.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.552914 -999.00  +14.40  11.80     58   +6.30 1 1 1 1 1   888    0 8.04 8.04 ----- 10.0 11.8 8.4 14.8 21.6 -28.8 20.6 -27.7 21.6 -24.0 22.6 -25.6
2026-04-15T15:17:03.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:17:03.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:17:03.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.552914
2026-04-15T15:17:03.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:17:03.751 [DEBUG] [Thread-21151] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:17:03.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:17:03.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:17:03.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:17:03.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:17:03.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:16:39', tmtdew=10.1386, humidity=50.7005, cloud=0.0, wind=13.9745, temperature=15.1816, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:16:11.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:17:03.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:17:04.008 [DEBUG] [Thread-21154] [transport.py] [_log()] starting thread (client mode): 0xee9261d0
2026-04-15T15:17:04.008 [DEBUG] [Thread-21154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:17:04.025 [DEBUG] [Thread-21154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:17:04.025 [INFO] [Thread-21154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:17:04.032 [DEBUG] [Thread-21154] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:17:04.032 [DEBUG] [Thread-21154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:17:04.033 [DEBUG] [Thread-21154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:17:04.033 [DEBUG] [Thread-21154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:17:04.033 [DEBUG] [Thread-21154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:17:04.033 [DEBUG] [Thread-21154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:17:04.033 [DEBUG] [Thread-21154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:17:04.033 [DEBUG] [Thread-21154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:17:04.033 [DEBUG] [Thread-21154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:17:04.033 [DEBUG] [Thread-21154] [transport.py] [_log()] client lang: <none>
2026-04-15T15:17:04.033 [DEBUG] [Thread-21154] [transport.py] [_log()] server lang: <none>
2026-04-15T15:17:04.034 [DEBUG] [Thread-21154] [transport.py] [_log()] kex follows: False
2026-04-15T15:17:04.034 [DEBUG] [Thread-21154] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:17:04.034 [DEBUG] [Thread-21154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:17:04.034 [DEBUG] [Thread-21154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:17:04.034 [DEBUG] [Thread-21154] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:17:04.034 [DEBUG] [Thread-21154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:17:04.034 [DEBUG] [Thread-21154] [transport.py] [_log()] Compression: none
2026-04-15T15:17:04.034 [DEBUG] [Thread-21154] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:17:04.092 [DEBUG] [Thread-21154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:17:04.093 [DEBUG] [Thread-21154] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:17:04.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:17:04.093 [DEBUG] [Thread-21154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:17:04.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:17:04.148 [DEBUG] [Thread-21154] [transport.py] [_log()] userauth is OK
2026-04-15T15:17:04.148 [DEBUG] [Thread-21154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:17:04.148 [DEBUG] [Thread-21154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:17:04.148 [DEBUG] [Thread-21154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:17:04.149 [DEBUG] [Thread-21154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:17:04.174 [INFO] [Thread-21154] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:17:04.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:17:04.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:17:05.011 [DEBUG] [Thread-21154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:17:05.011 [DEBUG] [Thread-21154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:17:05.059 [DEBUG] [Thread-21154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:17:05.059 [DEBUG] [Thread-21154] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:17:05.068 [DEBUG] [Thread-21154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:17:05.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:17:05.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')
2026-04-15T15:17:05.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
2026-04-15T15:17:05.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:17:05.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:17:05.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:17:05.103 [DEBUG] [Thread-21154] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:17:10.284 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:17:10.285 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:17:17.411 [DEBUG] [Thread-21156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:17:31.617 [DEBUG] [Thread-21157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:17:32.456 [DEBUG] [Thread-21158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:17:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:17:35.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:17:35.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
2026-04-15T15:17:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 17, 14), 9.66089, 52.2313, 0.0, 16.1269, 14.8242, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:17:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:17:14
2026-04-15T15:17:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:17:37.206 [DEBUG] [Thread-21159] [transport.py] [_log()] starting thread (client mode): 0xee924e80
2026-04-15T15:17:37.207 [DEBUG] [Thread-21159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:17:37.227 [DEBUG] [Thread-21159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:17:37.227 [INFO] [Thread-21159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:17:37.230 [DEBUG] [Thread-21159] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:17:37.230 [DEBUG] [Thread-21159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:17:37.230 [DEBUG] [Thread-21159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:17:37.230 [DEBUG] [Thread-21159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:17:37.230 [DEBUG] [Thread-21159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:17:37.230 [DEBUG] [Thread-21159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:17:37.230 [DEBUG] [Thread-21159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:17:37.231 [DEBUG] [Thread-21159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:17:37.231 [DEBUG] [Thread-21159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:17:37.231 [DEBUG] [Thread-21159] [transport.py] [_log()] client lang: <none>
2026-04-15T15:17:37.231 [DEBUG] [Thread-21159] [transport.py] [_log()] server lang: <none>
2026-04-15T15:17:37.231 [DEBUG] [Thread-21159] [transport.py] [_log()] kex follows: False
2026-04-15T15:17:37.231 [DEBUG] [Thread-21159] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:17:37.231 [DEBUG] [Thread-21159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:17:37.231 [DEBUG] [Thread-21159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:17:37.231 [DEBUG] [Thread-21159] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:17:37.231 [DEBUG] [Thread-21159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:17:37.231 [DEBUG] [Thread-21159] [transport.py] [_log()] Compression: none
2026-04-15T15:17:37.232 [DEBUG] [Thread-21159] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:17:37.249 [DEBUG] [Thread-21159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:17:37.250 [DEBUG] [Thread-21159] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:17:37.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:17:37.250 [DEBUG] [Thread-21159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:17:37.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:17:37.251 [DEBUG] [Thread-21159] [transport.py] [_log()] userauth is OK
2026-04-15T15:17:37.251 [DEBUG] [Thread-21159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:17:37.252 [DEBUG] [Thread-21159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:17:37.252 [DEBUG] [Thread-21159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:17:37.252 [DEBUG] [Thread-21159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:17:37.277 [INFO] [Thread-21159] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:17:37.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:17:38.094 [DEBUG] [Thread-21159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:17:38.094 [DEBUG] [Thread-21159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:17:38.095 [DEBUG] [Thread-21159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:17:38.135 [DEBUG] [Thread-21159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:17:38.135 [DEBUG] [Thread-21159] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:17:38.138 [DEBUG] [Thread-21159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:17:38.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:17:38.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:17:38.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:17:38.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:17:38.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:17:38.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:17:38.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:17:38.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:17:38.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:17:38.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.553261 -999.00  +14.30   6.18     58   +6.30 1 1 1 1 1   888    0 8.27 10.03 ----- 12.5 6.2 5.0 12.1 21.6 -27.8 20.7 -26.0 21.6 -22.5 22.5 -26.6
2026-04-15T15:17:38.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:17:38.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:17:38.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.553261
2026-04-15T15:17:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:17:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:17:38.158 [DEBUG] [Thread-21159] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:17:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:17:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:17:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:17:38.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:17:14', tmtdew=9.66089, humidity=52.2313, cloud=0.0, wind=16.1269, temperature=14.8242, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:16:41.750', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:17:38.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:17:38.414 [DEBUG] [Thread-21162] [transport.py] [_log()] starting thread (client mode): 0xee9256c0
2026-04-15T15:17:38.415 [DEBUG] [Thread-21162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:17:38.428 [DEBUG] [Thread-21162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:17:38.429 [INFO] [Thread-21162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:17:38.436 [DEBUG] [Thread-21162] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:17:38.436 [DEBUG] [Thread-21162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:17:38.436 [DEBUG] [Thread-21162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:17:38.436 [DEBUG] [Thread-21162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:17:38.436 [DEBUG] [Thread-21162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:17:38.436 [DEBUG] [Thread-21162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:17:38.436 [DEBUG] [Thread-21162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:17:38.437 [DEBUG] [Thread-21162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:17:38.437 [DEBUG] [Thread-21162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:17:38.437 [DEBUG] [Thread-21162] [transport.py] [_log()] client lang: <none>
2026-04-15T15:17:38.437 [DEBUG] [Thread-21162] [transport.py] [_log()] server lang: <none>
2026-04-15T15:17:38.437 [DEBUG] [Thread-21162] [transport.py] [_log()] kex follows: False
2026-04-15T15:17:38.437 [DEBUG] [Thread-21162] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:17:38.437 [DEBUG] [Thread-21162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:17:38.437 [DEBUG] [Thread-21162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:17:38.437 [DEBUG] [Thread-21162] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:17:38.437 [DEBUG] [Thread-21162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:17:38.437 [DEBUG] [Thread-21162] [transport.py] [_log()] Compression: none
2026-04-15T15:17:38.437 [DEBUG] [Thread-21162] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:17:38.499 [DEBUG] [Thread-21162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:17:38.499 [DEBUG] [Thread-21162] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:17:38.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:17:38.500 [DEBUG] [Thread-21162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:17:38.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:17:38.556 [DEBUG] [Thread-21162] [transport.py] [_log()] userauth is OK
2026-04-15T15:17:38.557 [DEBUG] [Thread-21162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:17:38.557 [DEBUG] [Thread-21162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:17:38.557 [DEBUG] [Thread-21162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:17:38.557 [DEBUG] [Thread-21162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:17:38.582 [INFO] [Thread-21162] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:17:38.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:17:38.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:17:39.426 [DEBUG] [Thread-21162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:17:39.427 [DEBUG] [Thread-21162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:17:39.473 [DEBUG] [Thread-21162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:17:39.474 [DEBUG] [Thread-21162] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:17:39.482 [DEBUG] [Thread-21162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:17:39.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:17:39.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')
2026-04-15T15:17:39.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
2026-04-15T15:17:39.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:17:39.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:17:39.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:17:39.516 [DEBUG] [Thread-21162] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:17:47.487 [DEBUG] [Thread-21164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:18:02.529 [DEBUG] [Thread-21165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:18:09.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:18:09.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:18:09.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
2026-04-15T15:18:10.425 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:18:10.426 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:18:10.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 17, 50), 10.5595, 49.2423, 0.0, 20.4307, 15.2146, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:18:10.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:17:50
2026-04-15T15:18:11.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:18:11.613 [DEBUG] [Thread-21166] [transport.py] [_log()] starting thread (client mode): 0xee925a80
2026-04-15T15:18:11.613 [DEBUG] [Thread-21166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:18:11.633 [DEBUG] [Thread-21166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:18:11.633 [INFO] [Thread-21166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:18:11.635 [DEBUG] [Thread-21166] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:18:11.635 [DEBUG] [Thread-21166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:18:11.635 [DEBUG] [Thread-21166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:18:11.635 [DEBUG] [Thread-21166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:18:11.635 [DEBUG] [Thread-21166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:18:11.635 [DEBUG] [Thread-21166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:18:11.635 [DEBUG] [Thread-21166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:18:11.635 [DEBUG] [Thread-21166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:18:11.635 [DEBUG] [Thread-21166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:18:11.636 [DEBUG] [Thread-21166] [transport.py] [_log()] client lang: <none>
2026-04-15T15:18:11.636 [DEBUG] [Thread-21166] [transport.py] [_log()] server lang: <none>
2026-04-15T15:18:11.636 [DEBUG] [Thread-21166] [transport.py] [_log()] kex follows: False
2026-04-15T15:18:11.636 [DEBUG] [Thread-21166] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:18:11.636 [DEBUG] [Thread-21166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:18:11.636 [DEBUG] [Thread-21166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:18:11.636 [DEBUG] [Thread-21166] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:18:11.636 [DEBUG] [Thread-21166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:18:11.636 [DEBUG] [Thread-21166] [transport.py] [_log()] Compression: none
2026-04-15T15:18:11.636 [DEBUG] [Thread-21166] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:18:11.645 [DEBUG] [Thread-21166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:18:11.646 [DEBUG] [Thread-21166] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:18:11.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:18:11.646 [DEBUG] [Thread-21166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:18:11.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:18:11.647 [DEBUG] [Thread-21166] [transport.py] [_log()] userauth is OK
2026-04-15T15:18:11.647 [DEBUG] [Thread-21166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:18:11.647 [DEBUG] [Thread-21166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:18:11.647 [DEBUG] [Thread-21166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:18:11.647 [DEBUG] [Thread-21166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:18:11.660 [INFO] [Thread-21166] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:18:11.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:18:12.470 [DEBUG] [Thread-21166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:18:12.470 [DEBUG] [Thread-21166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:18:12.471 [DEBUG] [Thread-21166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:18:12.511 [DEBUG] [Thread-21166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:18:12.511 [DEBUG] [Thread-21166] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:18:12.514 [DEBUG] [Thread-21166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:18:12.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:18:12.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:18:12.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:18:12.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:18:12.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:18:12.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:18:12.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:18:12.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:18:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:18:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.553609 -999.00  +14.80  10.17     58   +6.80 1 1 1 1 1   888    0 8.20 11.37 ----- 14.9 10.2 7.6 15.8 21.7 -27.9 20.8 -27.1 21.7 -22.8 22.6 -25.4
2026-04-15T15:18:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:18:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:18:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.553609
2026-04-15T15:18:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:18:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:18:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:18:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:18:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:18:12.538 [DEBUG] [Thread-21166] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:18:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:17:50', tmtdew=10.5595, humidity=49.2423, cloud=0.0, wind=20.4307, temperature=15.2146, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:17:11.818', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:18:12.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:18:12.783 [DEBUG] [Thread-21169] [transport.py] [_log()] starting thread (client mode): 0xee927790
2026-04-15T15:18:12.783 [DEBUG] [Thread-21169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:18:12.798 [DEBUG] [Thread-21169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:18:12.798 [INFO] [Thread-21169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:18:12.805 [DEBUG] [Thread-21169] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:18:12.805 [DEBUG] [Thread-21169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:18:12.805 [DEBUG] [Thread-21169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:18:12.805 [DEBUG] [Thread-21169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:18:12.805 [DEBUG] [Thread-21169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:18:12.805 [DEBUG] [Thread-21169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:18:12.806 [DEBUG] [Thread-21169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:18:12.806 [DEBUG] [Thread-21169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:18:12.806 [DEBUG] [Thread-21169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:18:12.806 [DEBUG] [Thread-21169] [transport.py] [_log()] client lang: <none>
2026-04-15T15:18:12.806 [DEBUG] [Thread-21169] [transport.py] [_log()] server lang: <none>
2026-04-15T15:18:12.806 [DEBUG] [Thread-21169] [transport.py] [_log()] kex follows: False
2026-04-15T15:18:12.806 [DEBUG] [Thread-21169] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:18:12.806 [DEBUG] [Thread-21169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:18:12.806 [DEBUG] [Thread-21169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:18:12.806 [DEBUG] [Thread-21169] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:18:12.806 [DEBUG] [Thread-21169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:18:12.807 [DEBUG] [Thread-21169] [transport.py] [_log()] Compression: none
2026-04-15T15:18:12.807 [DEBUG] [Thread-21169] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:18:12.864 [DEBUG] [Thread-21169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:18:12.864 [DEBUG] [Thread-21169] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:18:12.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:18:12.865 [DEBUG] [Thread-21169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:18:12.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:18:12.920 [DEBUG] [Thread-21169] [transport.py] [_log()] userauth is OK
2026-04-15T15:18:12.920 [DEBUG] [Thread-21169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:18:12.920 [DEBUG] [Thread-21169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:18:12.921 [DEBUG] [Thread-21169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:18:12.921 [DEBUG] [Thread-21169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:18:12.946 [INFO] [Thread-21169] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:18:12.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:18:12.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:18:13.754 [DEBUG] [Thread-21169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:18:13.754 [DEBUG] [Thread-21169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:18:13.802 [DEBUG] [Thread-21169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:18:13.802 [DEBUG] [Thread-21169] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:18:13.811 [DEBUG] [Thread-21169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:18:13.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:18:13.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')
2026-04-15T15:18:13.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') -> 00000000
2026-04-15T15:18:13.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:18:13.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:18:13.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:18:13.845 [DEBUG] [Thread-21169] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:18:17.559 [DEBUG] [Thread-21171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:18:31.721 [DEBUG] [Thread-21172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:18:32.597 [DEBUG] [Thread-21173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:18:43.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:18:43.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:18:43.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
2026-04-15T15:18:45.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 18, 26), 9.92583, 51.1513, 0.0, 17.239, 14.7407, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:18:45.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:18:26
2026-04-15T15:18:45.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:18:46.016 [DEBUG] [Thread-21174] [transport.py] [_log()] starting thread (client mode): 0xee926800
2026-04-15T15:18:46.016 [DEBUG] [Thread-21174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:18:46.036 [DEBUG] [Thread-21174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:18:46.037 [INFO] [Thread-21174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:18:46.040 [DEBUG] [Thread-21174] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:18:46.040 [DEBUG] [Thread-21174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:18:46.040 [DEBUG] [Thread-21174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:18:46.040 [DEBUG] [Thread-21174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:18:46.040 [DEBUG] [Thread-21174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:18:46.040 [DEBUG] [Thread-21174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:18:46.040 [DEBUG] [Thread-21174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:18:46.040 [DEBUG] [Thread-21174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:18:46.040 [DEBUG] [Thread-21174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:18:46.041 [DEBUG] [Thread-21174] [transport.py] [_log()] client lang: <none>
2026-04-15T15:18:46.041 [DEBUG] [Thread-21174] [transport.py] [_log()] server lang: <none>
2026-04-15T15:18:46.041 [DEBUG] [Thread-21174] [transport.py] [_log()] kex follows: False
2026-04-15T15:18:46.041 [DEBUG] [Thread-21174] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:18:46.041 [DEBUG] [Thread-21174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:18:46.041 [DEBUG] [Thread-21174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:18:46.041 [DEBUG] [Thread-21174] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:18:46.041 [DEBUG] [Thread-21174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:18:46.041 [DEBUG] [Thread-21174] [transport.py] [_log()] Compression: none
2026-04-15T15:18:46.041 [DEBUG] [Thread-21174] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:18:46.057 [DEBUG] [Thread-21174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:18:46.057 [DEBUG] [Thread-21174] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:18:46.057 [DEBUG] [Thread-21174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:18:46.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:18:46.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:18:46.059 [DEBUG] [Thread-21174] [transport.py] [_log()] userauth is OK
2026-04-15T15:18:46.059 [DEBUG] [Thread-21174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:18:46.059 [DEBUG] [Thread-21174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:18:46.059 [DEBUG] [Thread-21174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:18:46.059 [DEBUG] [Thread-21174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:18:46.078 [INFO] [Thread-21174] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:18:46.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:18:46.824 [DEBUG] [Thread-21174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:18:46.824 [DEBUG] [Thread-21174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:18:46.824 [DEBUG] [Thread-21174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:18:46.865 [DEBUG] [Thread-21174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:18:46.865 [DEBUG] [Thread-21174] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:18:46.868 [DEBUG] [Thread-21174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:18:46.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:18:46.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:18:46.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:18:46.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:18:46.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:18:46.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:18:46.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:18:46.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:18:46.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:18:46.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.554303 -999.00  +14.70  18.58     57   +6.30 1 1 1 1 1   888    0 8.52 23.37 ----- 17.6 18.6 348.6 21.8 21.6 -27.5 20.6 -26.6 21.6 -22.5 22.5 -24.3
2026-04-15T15:18:46.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:18:46.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:18:46.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.554303
2026-04-15T15:18:46.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:18:46.894 [DEBUG] [Thread-21174] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:18:46.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:18:46.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:18:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:18:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:18:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:18:26', tmtdew=9.92583, humidity=51.1513, cloud=0.0, wind=17.239, temperature=14.7407, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:18:11.779', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:18:47.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:18:47.146 [DEBUG] [Thread-21177] [transport.py] [_log()] starting thread (client mode): 0xee927d00
2026-04-15T15:18:47.147 [DEBUG] [Thread-21177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:18:47.160 [DEBUG] [Thread-21177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:18:47.160 [INFO] [Thread-21177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:18:47.168 [DEBUG] [Thread-21177] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:18:47.168 [DEBUG] [Thread-21177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:18:47.168 [DEBUG] [Thread-21177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:18:47.168 [DEBUG] [Thread-21177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:18:47.168 [DEBUG] [Thread-21177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:18:47.168 [DEBUG] [Thread-21177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:18:47.168 [DEBUG] [Thread-21177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:18:47.168 [DEBUG] [Thread-21177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:18:47.168 [DEBUG] [Thread-21177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:18:47.168 [DEBUG] [Thread-21177] [transport.py] [_log()] client lang: <none>
2026-04-15T15:18:47.168 [DEBUG] [Thread-21177] [transport.py] [_log()] server lang: <none>
2026-04-15T15:18:47.169 [DEBUG] [Thread-21177] [transport.py] [_log()] kex follows: False
2026-04-15T15:18:47.169 [DEBUG] [Thread-21177] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:18:47.169 [DEBUG] [Thread-21177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:18:47.169 [DEBUG] [Thread-21177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:18:47.169 [DEBUG] [Thread-21177] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:18:47.169 [DEBUG] [Thread-21177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:18:47.169 [DEBUG] [Thread-21177] [transport.py] [_log()] Compression: none
2026-04-15T15:18:47.169 [DEBUG] [Thread-21177] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:18:47.225 [DEBUG] [Thread-21177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:18:47.226 [DEBUG] [Thread-21177] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:18:47.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:18:47.226 [DEBUG] [Thread-21177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:18:47.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:18:47.280 [DEBUG] [Thread-21177] [transport.py] [_log()] userauth is OK
2026-04-15T15:18:47.280 [DEBUG] [Thread-21177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:18:47.280 [DEBUG] [Thread-21177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:18:47.281 [DEBUG] [Thread-21177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:18:47.281 [DEBUG] [Thread-21177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:18:47.306 [INFO] [Thread-21177] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:18:47.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:18:47.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:18:47.630 [DEBUG] [Thread-21179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:18:48.156 [DEBUG] [Thread-21177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:18:48.157 [DEBUG] [Thread-21177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:18:48.203 [DEBUG] [Thread-21177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:18:48.204 [DEBUG] [Thread-21177] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:18:48.213 [DEBUG] [Thread-21177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:18:48.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:18:48.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')
2026-04-15T15:18:48.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
2026-04-15T15:18:48.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:18:48.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:18:48.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:18:48.247 [DEBUG] [Thread-21177] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:19:02.673 [DEBUG] [Thread-21180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:19:10.568 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:19:10.569 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:19:17.706 [DEBUG] [Thread-21181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:19:18.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:19:18.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:19: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
2026-04-15T15:19:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 19, 1), 9.97537, 50.9691, 0.0, 16.5686, 14.7075, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:19:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:19:01
2026-04-15T15:19:19.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:19:20.397 [DEBUG] [Thread-21182] [transport.py] [_log()] starting thread (client mode): 0xee9272e0
2026-04-15T15:19:20.397 [DEBUG] [Thread-21182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:19:20.418 [DEBUG] [Thread-21182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:19:20.419 [INFO] [Thread-21182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:19:20.422 [DEBUG] [Thread-21182] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:19:20.422 [DEBUG] [Thread-21182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:19:20.422 [DEBUG] [Thread-21182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:19:20.422 [DEBUG] [Thread-21182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:19:20.422 [DEBUG] [Thread-21182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:19:20.422 [DEBUG] [Thread-21182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:19:20.422 [DEBUG] [Thread-21182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:19:20.422 [DEBUG] [Thread-21182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:19:20.422 [DEBUG] [Thread-21182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:19:20.423 [DEBUG] [Thread-21182] [transport.py] [_log()] client lang: <none>
2026-04-15T15:19:20.423 [DEBUG] [Thread-21182] [transport.py] [_log()] server lang: <none>
2026-04-15T15:19:20.423 [DEBUG] [Thread-21182] [transport.py] [_log()] kex follows: False
2026-04-15T15:19:20.423 [DEBUG] [Thread-21182] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:19:20.423 [DEBUG] [Thread-21182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:19:20.423 [DEBUG] [Thread-21182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:19:20.423 [DEBUG] [Thread-21182] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:19:20.423 [DEBUG] [Thread-21182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:19:20.423 [DEBUG] [Thread-21182] [transport.py] [_log()] Compression: none
2026-04-15T15:19:20.423 [DEBUG] [Thread-21182] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:19:20.439 [DEBUG] [Thread-21182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:19:20.440 [DEBUG] [Thread-21182] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:19:20.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:19:20.440 [DEBUG] [Thread-21182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:19:20.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:19:20.441 [DEBUG] [Thread-21182] [transport.py] [_log()] userauth is OK
2026-04-15T15:19:20.442 [DEBUG] [Thread-21182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:19:20.442 [DEBUG] [Thread-21182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:19:20.442 [DEBUG] [Thread-21182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:19:20.442 [DEBUG] [Thread-21182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:19:20.466 [INFO] [Thread-21182] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:19:20.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:19:21.269 [DEBUG] [Thread-21182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:19:21.269 [DEBUG] [Thread-21182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:19:21.270 [DEBUG] [Thread-21182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:19:21.310 [DEBUG] [Thread-21182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:19:21.310 [DEBUG] [Thread-21182] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:19:21.313 [DEBUG] [Thread-21182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:19:21.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:19:21.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:19:21.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:19:21.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:19:21.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:19:21.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:19:21.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:19:21.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:19:21.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:19:21.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.554650 -999.00  +14.60  15.46     57   +6.20 1 1 1 1 1   888    0 8.94 31.31 ----- 14.5 15.5 9.3 22.2 21.5 -28.2 20.5 -27.3 21.6 -23.7 22.4 -27.1
2026-04-15T15:19:21.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:19:21.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:19:21.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.554650
2026-04-15T15:19:21.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:19:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:19:21.340 [DEBUG] [Thread-21182] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:19:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:19:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:19:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:19:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:19:01', tmtdew=9.97537, humidity=50.9691, cloud=0.0, wind=16.5686, temperature=14.7075, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:18:41.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:19:21.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:19:21.603 [DEBUG] [Thread-21185] [transport.py] [_log()] starting thread (client mode): 0xee924130
2026-04-15T15:19:21.603 [DEBUG] [Thread-21185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:19:21.617 [DEBUG] [Thread-21185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:19:21.617 [INFO] [Thread-21185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:19:21.624 [DEBUG] [Thread-21185] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:19:21.624 [DEBUG] [Thread-21185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:19:21.624 [DEBUG] [Thread-21185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:19:21.625 [DEBUG] [Thread-21185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:19:21.625 [DEBUG] [Thread-21185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:19:21.625 [DEBUG] [Thread-21185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:19:21.625 [DEBUG] [Thread-21185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:19:21.625 [DEBUG] [Thread-21185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:19:21.625 [DEBUG] [Thread-21185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:19:21.625 [DEBUG] [Thread-21185] [transport.py] [_log()] client lang: <none>
2026-04-15T15:19:21.625 [DEBUG] [Thread-21185] [transport.py] [_log()] server lang: <none>
2026-04-15T15:19:21.625 [DEBUG] [Thread-21185] [transport.py] [_log()] kex follows: False
2026-04-15T15:19:21.625 [DEBUG] [Thread-21185] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:19:21.625 [DEBUG] [Thread-21185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:19:21.625 [DEBUG] [Thread-21185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:19:21.626 [DEBUG] [Thread-21185] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:19:21.626 [DEBUG] [Thread-21185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:19:21.626 [DEBUG] [Thread-21185] [transport.py] [_log()] Compression: none
2026-04-15T15:19:21.626 [DEBUG] [Thread-21185] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:19:21.683 [DEBUG] [Thread-21185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:19:21.684 [DEBUG] [Thread-21185] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:19:21.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:19:21.684 [DEBUG] [Thread-21185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:19:21.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:19:21.740 [DEBUG] [Thread-21185] [transport.py] [_log()] userauth is OK
2026-04-15T15:19:21.741 [DEBUG] [Thread-21185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:19:21.741 [DEBUG] [Thread-21185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:19:21.741 [DEBUG] [Thread-21185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:19:21.741 [DEBUG] [Thread-21185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:19:21.766 [INFO] [Thread-21185] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:19:21.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:19:21.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:19:22.594 [DEBUG] [Thread-21185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:19:22.595 [DEBUG] [Thread-21185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:19:22.642 [DEBUG] [Thread-21185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:19:22.642 [DEBUG] [Thread-21185] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:19:22.651 [DEBUG] [Thread-21185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:19:22.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:19:22.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')
2026-04-15T15:19:22.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
2026-04-15T15:19:22.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:19:22.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:19:22.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:19:22.686 [DEBUG] [Thread-21185] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:19:31.814 [DEBUG] [Thread-21187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:19:32.739 [DEBUG] [Thread-21188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:19:47.784 [DEBUG] [Thread-21189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:19:52.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:19:52.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:19:52.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
2026-04-15T15:19:54.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 19, 37), 10.2508, 50.2695, 0.0, 15.174, 15.0487, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:19:54.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:19:37
2026-04-15T15:19:54.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:19:54.879 [DEBUG] [Thread-21190] [transport.py] [_log()] starting thread (client mode): 0xee927040
2026-04-15T15:19:54.879 [DEBUG] [Thread-21190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:19:54.904 [DEBUG] [Thread-21190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:19:54.904 [INFO] [Thread-21190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:19:54.906 [DEBUG] [Thread-21190] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:19:54.906 [DEBUG] [Thread-21190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:19:54.906 [DEBUG] [Thread-21190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:19:54.906 [DEBUG] [Thread-21190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:19:54.906 [DEBUG] [Thread-21190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:19:54.906 [DEBUG] [Thread-21190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:19:54.907 [DEBUG] [Thread-21190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:19:54.907 [DEBUG] [Thread-21190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:19:54.907 [DEBUG] [Thread-21190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:19:54.907 [DEBUG] [Thread-21190] [transport.py] [_log()] client lang: <none>
2026-04-15T15:19:54.907 [DEBUG] [Thread-21190] [transport.py] [_log()] server lang: <none>
2026-04-15T15:19:54.907 [DEBUG] [Thread-21190] [transport.py] [_log()] kex follows: False
2026-04-15T15:19:54.907 [DEBUG] [Thread-21190] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:19:54.907 [DEBUG] [Thread-21190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:19:54.907 [DEBUG] [Thread-21190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:19:54.907 [DEBUG] [Thread-21190] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:19:54.907 [DEBUG] [Thread-21190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:19:54.908 [DEBUG] [Thread-21190] [transport.py] [_log()] Compression: none
2026-04-15T15:19:54.908 [DEBUG] [Thread-21190] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:19:54.917 [DEBUG] [Thread-21190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:19:54.917 [DEBUG] [Thread-21190] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:19:54.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:19:54.918 [DEBUG] [Thread-21190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:19:54.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:19:54.919 [DEBUG] [Thread-21190] [transport.py] [_log()] userauth is OK
2026-04-15T15:19:54.919 [DEBUG] [Thread-21190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:19:54.919 [DEBUG] [Thread-21190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:19:54.919 [DEBUG] [Thread-21190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:19:54.919 [DEBUG] [Thread-21190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:19:54.937 [INFO] [Thread-21190] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:19:54.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:19:55.535 [DEBUG] [Thread-21190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:19:55.535 [DEBUG] [Thread-21190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:19:55.536 [DEBUG] [Thread-21190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:19:55.576 [DEBUG] [Thread-21190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:19:55.576 [DEBUG] [Thread-21190] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:19:55.579 [DEBUG] [Thread-21190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:19:55.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:19:55.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:19:55.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:19:55.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:19:55.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:19:55.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:19:55.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:19:55.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:19:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:19:55.605 [DEBUG] [Thread-21190] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:19:55.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.555345 -999.00  +14.60  11.04     58   +6.50 1 1 1 1 1   888    0 9.05 38.08 ----- 20.7 11.0 334.0 17.8 21.4 -27.0 20.5 -25.3 21.6 -22.6 22.3 -23.9
2026-04-15T15:19:55.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:19:55.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:19:55.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.555345
2026-04-15T15:19:55.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:19:55.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:19:55.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:19:55.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:19:55.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:19:55.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:19:37', tmtdew=10.2508, humidity=50.2695, cloud=0.0, wind=15.174, temperature=15.0487, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:19:41.808', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:19:55.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:19:55.863 [DEBUG] [Thread-21193] [transport.py] [_log()] starting thread (client mode): 0xee925c30
2026-04-15T15:19:55.863 [DEBUG] [Thread-21193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:19:55.877 [DEBUG] [Thread-21193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:19:55.877 [INFO] [Thread-21193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:19:55.885 [DEBUG] [Thread-21193] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:19:55.885 [DEBUG] [Thread-21193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:19:55.885 [DEBUG] [Thread-21193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:19:55.885 [DEBUG] [Thread-21193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:19:55.885 [DEBUG] [Thread-21193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:19:55.885 [DEBUG] [Thread-21193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:19:55.885 [DEBUG] [Thread-21193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:19:55.885 [DEBUG] [Thread-21193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:19:55.885 [DEBUG] [Thread-21193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:19:55.885 [DEBUG] [Thread-21193] [transport.py] [_log()] client lang: <none>
2026-04-15T15:19:55.886 [DEBUG] [Thread-21193] [transport.py] [_log()] server lang: <none>
2026-04-15T15:19:55.886 [DEBUG] [Thread-21193] [transport.py] [_log()] kex follows: False
2026-04-15T15:19:55.886 [DEBUG] [Thread-21193] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:19:55.886 [DEBUG] [Thread-21193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:19:55.886 [DEBUG] [Thread-21193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:19:55.886 [DEBUG] [Thread-21193] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:19:55.886 [DEBUG] [Thread-21193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:19:55.886 [DEBUG] [Thread-21193] [transport.py] [_log()] Compression: none
2026-04-15T15:19:55.886 [DEBUG] [Thread-21193] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:19:55.944 [DEBUG] [Thread-21193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:19:55.944 [DEBUG] [Thread-21193] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:19:55.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:19:55.945 [DEBUG] [Thread-21193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:19:55.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:19:56.000 [DEBUG] [Thread-21193] [transport.py] [_log()] userauth is OK
2026-04-15T15:19:56.001 [DEBUG] [Thread-21193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:19:56.001 [DEBUG] [Thread-21193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:19:56.001 [DEBUG] [Thread-21193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:19:56.001 [DEBUG] [Thread-21193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:19:56.026 [INFO] [Thread-21193] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:19:56.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:19:56.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:19:56.840 [DEBUG] [Thread-21193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:19:56.841 [DEBUG] [Thread-21193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:19:56.888 [DEBUG] [Thread-21193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:19:56.888 [DEBUG] [Thread-21193] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:19:56.897 [DEBUG] [Thread-21193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:19:56.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:19:56.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T15:19:56.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') -> 00000000
2026-04-15T15:19:56.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:19:56.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:19:56.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:19:56.932 [DEBUG] [Thread-21193] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:20:02.816 [DEBUG] [Thread-21195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:20:10.710 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:20:10.712 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:20:17.861 [DEBUG] [Thread-21196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:20:26.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:20:26.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:20:26.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
2026-04-15T15:20:28.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 20, 13), 9.72281, 52.0791, 0.0, 18.5972, 14.9901, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:20:28.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:20:13
2026-04-15T15:20:28.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:20:29.123 [DEBUG] [Thread-21197] [transport.py] [_log()] starting thread (client mode): 0xee924f40
2026-04-15T15:20:29.123 [DEBUG] [Thread-21197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:20:29.142 [DEBUG] [Thread-21197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:20:29.142 [INFO] [Thread-21197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:20:29.145 [DEBUG] [Thread-21197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:20:29.145 [DEBUG] [Thread-21197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:20:29.146 [DEBUG] [Thread-21197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:20:29.146 [DEBUG] [Thread-21197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:20:29.146 [DEBUG] [Thread-21197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:20:29.146 [DEBUG] [Thread-21197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:20:29.146 [DEBUG] [Thread-21197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:20:29.146 [DEBUG] [Thread-21197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:20:29.146 [DEBUG] [Thread-21197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:20:29.146 [DEBUG] [Thread-21197] [transport.py] [_log()] client lang: <none>
2026-04-15T15:20:29.146 [DEBUG] [Thread-21197] [transport.py] [_log()] server lang: <none>
2026-04-15T15:20:29.146 [DEBUG] [Thread-21197] [transport.py] [_log()] kex follows: False
2026-04-15T15:20:29.146 [DEBUG] [Thread-21197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:20:29.146 [DEBUG] [Thread-21197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:20:29.147 [DEBUG] [Thread-21197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:20:29.147 [DEBUG] [Thread-21197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:20:29.147 [DEBUG] [Thread-21197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:20:29.147 [DEBUG] [Thread-21197] [transport.py] [_log()] Compression: none
2026-04-15T15:20:29.147 [DEBUG] [Thread-21197] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:20:29.162 [DEBUG] [Thread-21197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:20:29.163 [DEBUG] [Thread-21197] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:20:29.163 [DEBUG] [Thread-21197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:20:29.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:20:29.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:20:29.165 [DEBUG] [Thread-21197] [transport.py] [_log()] userauth is OK
2026-04-15T15:20:29.165 [DEBUG] [Thread-21197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:20:29.165 [DEBUG] [Thread-21197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:20:29.165 [DEBUG] [Thread-21197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:20:29.165 [DEBUG] [Thread-21197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:20:29.190 [INFO] [Thread-21197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:20:29.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:20:31.231 [DEBUG] [Thread-21197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:20:31.231 [DEBUG] [Thread-21197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:20:31.232 [DEBUG] [Thread-21197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:20:31.272 [DEBUG] [Thread-21197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:20:31.272 [DEBUG] [Thread-21197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:20:31.275 [DEBUG] [Thread-21197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:20:31.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:20:31.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:20:31.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:20:31.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:20:31.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:20:31.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:20:31.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:20:31.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:20:31.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:20:31.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.555692 -999.00  +14.40  21.82     58   +6.20 1 1 1 1 1   888    0 9.07 40.78 ----- 17.0 21.8 315.6 24.9 21.4 -27.9 20.4 -26.0 21.5 -23.3 22.4 -25.4
2026-04-15T15:20:31.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:20:31.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:20:31.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.555692
2026-04-15T15:20:31.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:20:31.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:20:31.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:20:31.304 [DEBUG] [Thread-21197] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:20:31.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:20:31.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:20:31.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:20:13', tmtdew=9.72281, humidity=52.0791, cloud=0.0, wind=18.5972, temperature=14.9901, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:20:11.789', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:20:31.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:20:31.550 [DEBUG] [Thread-21200] [transport.py] [_log()] starting thread (client mode): 0xee927dc0
2026-04-15T15:20:31.550 [DEBUG] [Thread-21200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:20:31.564 [DEBUG] [Thread-21200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:20:31.564 [INFO] [Thread-21200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:20:31.572 [DEBUG] [Thread-21200] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:20:31.572 [DEBUG] [Thread-21200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:20:31.573 [DEBUG] [Thread-21200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:20:31.573 [DEBUG] [Thread-21200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:20:31.573 [DEBUG] [Thread-21200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:20:31.573 [DEBUG] [Thread-21200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:20:31.573 [DEBUG] [Thread-21200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:20:31.573 [DEBUG] [Thread-21200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:20:31.573 [DEBUG] [Thread-21200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:20:31.573 [DEBUG] [Thread-21200] [transport.py] [_log()] client lang: <none>
2026-04-15T15:20:31.573 [DEBUG] [Thread-21200] [transport.py] [_log()] server lang: <none>
2026-04-15T15:20:31.573 [DEBUG] [Thread-21200] [transport.py] [_log()] kex follows: False
2026-04-15T15:20:31.573 [DEBUG] [Thread-21200] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:20:31.573 [DEBUG] [Thread-21200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:20:31.574 [DEBUG] [Thread-21200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:20:31.574 [DEBUG] [Thread-21200] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:20:31.574 [DEBUG] [Thread-21200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:20:31.574 [DEBUG] [Thread-21200] [transport.py] [_log()] Compression: none
2026-04-15T15:20:31.574 [DEBUG] [Thread-21200] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:20:31.629 [DEBUG] [Thread-21200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:20:31.629 [DEBUG] [Thread-21200] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:20:31.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:20:31.630 [DEBUG] [Thread-21200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:20:31.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:20:31.684 [DEBUG] [Thread-21200] [transport.py] [_log()] userauth is OK
2026-04-15T15:20:31.684 [DEBUG] [Thread-21200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:20:31.684 [DEBUG] [Thread-21200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:20:31.685 [DEBUG] [Thread-21200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:20:31.685 [DEBUG] [Thread-21200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:20:31.703 [INFO] [Thread-21200] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:20:31.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:20:31.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:20:31.892 [DEBUG] [Thread-21202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:20:32.533 [DEBUG] [Thread-21200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:20:32.533 [DEBUG] [Thread-21200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:20:32.581 [DEBUG] [Thread-21200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:20:32.581 [DEBUG] [Thread-21200] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:20:32.592 [DEBUG] [Thread-21200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:20:32.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:20:32.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')
2026-04-15T15:20:32.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
2026-04-15T15:20:32.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:20:32.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:20:32.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:20:32.631 [DEBUG] [Thread-21200] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:20:32.893 [DEBUG] [Thread-21203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:20:47.938 [DEBUG] [Thread-21204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:21:02.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:21:02.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:21:02.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
2026-04-15T15:21:02.970 [DEBUG] [Thread-21205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:21:03.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 20, 48), 10.462, 49.7057, 0.0, 16.0913, 15.6777, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:21:03.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:20:48
2026-04-15T15:21:04.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:21:04.792 [DEBUG] [Thread-21206] [transport.py] [_log()] starting thread (client mode): 0xee9aea10
2026-04-15T15:21:04.793 [DEBUG] [Thread-21206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:21:04.812 [DEBUG] [Thread-21206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:21:04.812 [INFO] [Thread-21206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:21:04.815 [DEBUG] [Thread-21206] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:21:04.815 [DEBUG] [Thread-21206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:21:04.816 [DEBUG] [Thread-21206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:21:04.816 [DEBUG] [Thread-21206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:21:04.816 [DEBUG] [Thread-21206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:21:04.816 [DEBUG] [Thread-21206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:21:04.816 [DEBUG] [Thread-21206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:21:04.816 [DEBUG] [Thread-21206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:21:04.816 [DEBUG] [Thread-21206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:21:04.816 [DEBUG] [Thread-21206] [transport.py] [_log()] client lang: <none>
2026-04-15T15:21:04.816 [DEBUG] [Thread-21206] [transport.py] [_log()] server lang: <none>
2026-04-15T15:21:04.816 [DEBUG] [Thread-21206] [transport.py] [_log()] kex follows: False
2026-04-15T15:21:04.816 [DEBUG] [Thread-21206] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:21:04.816 [DEBUG] [Thread-21206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:21:04.817 [DEBUG] [Thread-21206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:21:04.817 [DEBUG] [Thread-21206] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:21:04.817 [DEBUG] [Thread-21206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:21:04.817 [DEBUG] [Thread-21206] [transport.py] [_log()] Compression: none
2026-04-15T15:21:04.817 [DEBUG] [Thread-21206] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:21:04.833 [DEBUG] [Thread-21206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:21:04.834 [DEBUG] [Thread-21206] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:21:04.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:21:04.834 [DEBUG] [Thread-21206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:21:04.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:21:04.835 [DEBUG] [Thread-21206] [transport.py] [_log()] userauth is OK
2026-04-15T15:21:04.835 [DEBUG] [Thread-21206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:21:04.835 [DEBUG] [Thread-21206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:21:04.836 [DEBUG] [Thread-21206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:21:04.836 [DEBUG] [Thread-21206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:21:04.860 [INFO] [Thread-21206] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:21:04.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:21:05.436 [DEBUG] [Thread-21206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:21:05.436 [DEBUG] [Thread-21206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:21:05.437 [DEBUG] [Thread-21206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:21:05.477 [DEBUG] [Thread-21206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:21:05.477 [DEBUG] [Thread-21206] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:21:05.480 [DEBUG] [Thread-21206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:21:05.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:21:05.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:21:05.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:21:05.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:21:05.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:21:05.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:21:05.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:21:05.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:21:05.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:21:05.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.556039 -999.00  +14.60  15.07     59   +6.90 1 1 1 1 1   888    0 9.24 42.40 ----- 17.0 15.1 313.8 20.0 21.4 -26.8 20.5 -26.0 21.6 -23.0 22.5 -24.3
2026-04-15T15:21:05.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:21:05.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:21:05.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.556039
2026-04-15T15:21:05.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:21:05.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:21:05.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:21:05.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:21:05.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:21:05.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:20:48', tmtdew=10.462, humidity=49.7057, cloud=0.0, wind=16.0913, temperature=15.6777, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:20:41.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:21:05.500 [DEBUG] [Thread-21206] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:21:05.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:21:05.747 [DEBUG] [Thread-21209] [transport.py] [_log()] starting thread (client mode): 0xee9af2b0
2026-04-15T15:21:05.747 [DEBUG] [Thread-21209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:21:05.762 [DEBUG] [Thread-21209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:21:05.762 [INFO] [Thread-21209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:21:05.770 [DEBUG] [Thread-21209] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:21:05.771 [DEBUG] [Thread-21209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:21:05.771 [DEBUG] [Thread-21209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:21:05.771 [DEBUG] [Thread-21209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:21:05.771 [DEBUG] [Thread-21209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:21:05.771 [DEBUG] [Thread-21209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:21:05.771 [DEBUG] [Thread-21209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:21:05.771 [DEBUG] [Thread-21209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:21:05.771 [DEBUG] [Thread-21209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:21:05.771 [DEBUG] [Thread-21209] [transport.py] [_log()] client lang: <none>
2026-04-15T15:21:05.771 [DEBUG] [Thread-21209] [transport.py] [_log()] server lang: <none>
2026-04-15T15:21:05.771 [DEBUG] [Thread-21209] [transport.py] [_log()] kex follows: False
2026-04-15T15:21:05.772 [DEBUG] [Thread-21209] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:21:05.772 [DEBUG] [Thread-21209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:21:05.772 [DEBUG] [Thread-21209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:21:05.772 [DEBUG] [Thread-21209] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:21:05.772 [DEBUG] [Thread-21209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:21:05.772 [DEBUG] [Thread-21209] [transport.py] [_log()] Compression: none
2026-04-15T15:21:05.772 [DEBUG] [Thread-21209] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:21:05.828 [DEBUG] [Thread-21209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:21:05.828 [DEBUG] [Thread-21209] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:21:05.828 [DEBUG] [Thread-21209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:21:05.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:21:05.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:21:05.884 [DEBUG] [Thread-21209] [transport.py] [_log()] userauth is OK
2026-04-15T15:21:05.885 [DEBUG] [Thread-21209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:21:05.885 [DEBUG] [Thread-21209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:21:05.885 [DEBUG] [Thread-21209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:21:05.885 [DEBUG] [Thread-21209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:21:05.910 [INFO] [Thread-21209] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:21:05.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:21:05.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:21:06.781 [DEBUG] [Thread-21209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:21:06.781 [DEBUG] [Thread-21209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:21:06.829 [DEBUG] [Thread-21209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:21:06.829 [DEBUG] [Thread-21209] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:21:06.838 [DEBUG] [Thread-21209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:21:06.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:21: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')
2026-04-15T15:21: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
2026-04-15T15:21:06.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:21:06.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:21:06.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:21:06.879 [DEBUG] [Thread-21209] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:21:10.851 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:21:10.852 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:21:18.000 [DEBUG] [Thread-21211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:21:31.967 [DEBUG] [Thread-21212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:21:33.040 [DEBUG] [Thread-21213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:21:36.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:21:36.894 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:21:36.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
2026-04-15T15:21:38.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 21, 23), 10.2319, 50.5185, 0.0, 14.8399, 14.8723, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:21:38.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:21:23
2026-04-15T15:21:38.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:21:39.064 [DEBUG] [Thread-21214] [transport.py] [_log()] starting thread (client mode): 0xee927370
2026-04-15T15:21:39.064 [DEBUG] [Thread-21214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:21:39.085 [DEBUG] [Thread-21214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:21:39.085 [INFO] [Thread-21214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:21:39.088 [DEBUG] [Thread-21214] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:21:39.089 [DEBUG] [Thread-21214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:21:39.089 [DEBUG] [Thread-21214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:21:39.089 [DEBUG] [Thread-21214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:21:39.089 [DEBUG] [Thread-21214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:21:39.089 [DEBUG] [Thread-21214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:21:39.089 [DEBUG] [Thread-21214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:21:39.089 [DEBUG] [Thread-21214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:21:39.089 [DEBUG] [Thread-21214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:21:39.089 [DEBUG] [Thread-21214] [transport.py] [_log()] client lang: <none>
2026-04-15T15:21:39.089 [DEBUG] [Thread-21214] [transport.py] [_log()] server lang: <none>
2026-04-15T15:21:39.089 [DEBUG] [Thread-21214] [transport.py] [_log()] kex follows: False
2026-04-15T15:21:39.090 [DEBUG] [Thread-21214] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:21:39.090 [DEBUG] [Thread-21214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:21:39.090 [DEBUG] [Thread-21214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:21:39.090 [DEBUG] [Thread-21214] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:21:39.090 [DEBUG] [Thread-21214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:21:39.090 [DEBUG] [Thread-21214] [transport.py] [_log()] Compression: none
2026-04-15T15:21:39.090 [DEBUG] [Thread-21214] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:21:39.106 [DEBUG] [Thread-21214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:21:39.106 [DEBUG] [Thread-21214] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:21:39.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:21:39.107 [DEBUG] [Thread-21214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:21:39.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:21:39.107 [DEBUG] [Thread-21214] [transport.py] [_log()] userauth is OK
2026-04-15T15:21:39.107 [DEBUG] [Thread-21214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:21:39.108 [DEBUG] [Thread-21214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:21:39.108 [DEBUG] [Thread-21214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:21:39.108 [DEBUG] [Thread-21214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:21:39.130 [INFO] [Thread-21214] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:21:39.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:21:39.728 [DEBUG] [Thread-21214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:21:39.728 [DEBUG] [Thread-21214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:21:39.729 [DEBUG] [Thread-21214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:21:39.768 [DEBUG] [Thread-21214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:21:39.769 [DEBUG] [Thread-21214] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:21:39.771 [DEBUG] [Thread-21214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:21:39.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:21:39.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:21:39.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:21:39.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:21:39.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:21:39.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:21:39.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:21:39.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:21:39.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:21:39.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.556386 -999.00  +14.70   9.55     57   +6.40 1 1 1 1 1   888    0 9.28 46.33 NA 16.6 9.6 8.2 19.7 21.4 -28.3 20.5 -26.4 21.5 -22.5 22.5 -27.1
2026-04-15T15:21:39.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:21:39.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:21:39.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.556386
2026-04-15T15:21:39.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:21:39.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:21:39.801 [DEBUG] [Thread-21214] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:21:39.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:21:39.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:21:39.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:21:39.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:21:23', tmtdew=10.2319, humidity=50.5185, cloud=0.0, wind=14.8399, temperature=14.8723, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:21:11.750', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:21:40.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:21:40.018 [DEBUG] [Thread-21217] [transport.py] [_log()] starting thread (client mode): 0xee9ae350
2026-04-15T15:21:40.018 [DEBUG] [Thread-21217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:21:40.032 [DEBUG] [Thread-21217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:21:40.033 [INFO] [Thread-21217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:21:40.040 [DEBUG] [Thread-21217] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:21:40.040 [DEBUG] [Thread-21217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:21:40.040 [DEBUG] [Thread-21217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:21:40.040 [DEBUG] [Thread-21217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:21:40.040 [DEBUG] [Thread-21217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:21:40.040 [DEBUG] [Thread-21217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:21:40.041 [DEBUG] [Thread-21217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:21:40.041 [DEBUG] [Thread-21217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:21:40.041 [DEBUG] [Thread-21217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:21:40.041 [DEBUG] [Thread-21217] [transport.py] [_log()] client lang: <none>
2026-04-15T15:21:40.041 [DEBUG] [Thread-21217] [transport.py] [_log()] server lang: <none>
2026-04-15T15:21:40.041 [DEBUG] [Thread-21217] [transport.py] [_log()] kex follows: False
2026-04-15T15:21:40.041 [DEBUG] [Thread-21217] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:21:40.042 [DEBUG] [Thread-21217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:21:40.042 [DEBUG] [Thread-21217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:21:40.042 [DEBUG] [Thread-21217] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:21:40.042 [DEBUG] [Thread-21217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:21:40.042 [DEBUG] [Thread-21217] [transport.py] [_log()] Compression: none
2026-04-15T15:21:40.042 [DEBUG] [Thread-21217] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:21:40.096 [DEBUG] [Thread-21217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:21:40.097 [DEBUG] [Thread-21217] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:21:40.097 [DEBUG] [Thread-21217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:21:40.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:21:40.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:21:40.157 [DEBUG] [Thread-21217] [transport.py] [_log()] userauth is OK
2026-04-15T15:21:40.157 [DEBUG] [Thread-21217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:21:40.157 [DEBUG] [Thread-21217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:21:40.157 [DEBUG] [Thread-21217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:21:40.157 [DEBUG] [Thread-21217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:21:40.181 [INFO] [Thread-21217] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:21:40.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:21:40.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:21:41.010 [DEBUG] [Thread-21217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:21:41.011 [DEBUG] [Thread-21217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:21:41.058 [DEBUG] [Thread-21217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:21:41.058 [DEBUG] [Thread-21217] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:21:41.067 [DEBUG] [Thread-21217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:21:41.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:21: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')
2026-04-15T15:21:41.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
2026-04-15T15:21:41.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:21:41.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:21:41.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:21:41.102 [DEBUG] [Thread-21217] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:21:48.071 [DEBUG] [Thread-21219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:22:03.114 [DEBUG] [Thread-21220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:22:10.991 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:22:10.992 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:22:11.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:22:11.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:22:11.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
2026-04-15T15:22:12.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 21, 59), 9.91597, 51.7174, 0.0, 15.6337, 14.7064, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:22:12.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:21:59
2026-04-15T15:22:12.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:22:13.225 [DEBUG] [Thread-21221] [transport.py] [_log()] starting thread (client mode): 0xee926f80
2026-04-15T15:22:13.225 [DEBUG] [Thread-21221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:22:13.246 [DEBUG] [Thread-21221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:22:13.246 [INFO] [Thread-21221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:22:13.249 [DEBUG] [Thread-21221] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:22:13.249 [DEBUG] [Thread-21221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:22:13.249 [DEBUG] [Thread-21221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:22:13.250 [DEBUG] [Thread-21221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:22:13.250 [DEBUG] [Thread-21221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:22:13.250 [DEBUG] [Thread-21221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:22:13.250 [DEBUG] [Thread-21221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:22:13.250 [DEBUG] [Thread-21221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:22:13.250 [DEBUG] [Thread-21221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:22:13.250 [DEBUG] [Thread-21221] [transport.py] [_log()] client lang: <none>
2026-04-15T15:22:13.250 [DEBUG] [Thread-21221] [transport.py] [_log()] server lang: <none>
2026-04-15T15:22:13.250 [DEBUG] [Thread-21221] [transport.py] [_log()] kex follows: False
2026-04-15T15:22:13.250 [DEBUG] [Thread-21221] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:22:13.250 [DEBUG] [Thread-21221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:22:13.251 [DEBUG] [Thread-21221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:22:13.251 [DEBUG] [Thread-21221] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:22:13.251 [DEBUG] [Thread-21221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:22:13.251 [DEBUG] [Thread-21221] [transport.py] [_log()] Compression: none
2026-04-15T15:22:13.251 [DEBUG] [Thread-21221] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:22:13.267 [DEBUG] [Thread-21221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:22:13.268 [DEBUG] [Thread-21221] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:22:13.268 [DEBUG] [Thread-21221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:22:13.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:22:13.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:22:13.269 [DEBUG] [Thread-21221] [transport.py] [_log()] userauth is OK
2026-04-15T15:22:13.269 [DEBUG] [Thread-21221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:22:13.269 [DEBUG] [Thread-21221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:22:13.270 [DEBUG] [Thread-21221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:22:13.270 [DEBUG] [Thread-21221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:22:13.287 [INFO] [Thread-21221] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:22:13.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:22:13.930 [DEBUG] [Thread-21221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:22:13.931 [DEBUG] [Thread-21221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:22:13.931 [DEBUG] [Thread-21221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:22:13.971 [DEBUG] [Thread-21221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:22:13.971 [DEBUG] [Thread-21221] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:22:13.974 [DEBUG] [Thread-21221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:22:13.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:22:13.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:22:13.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:22:13.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:22:13.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:22:13.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:22:13.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:22:13.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:22:13.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:22:13.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.556733 -999.00  +14.80  14.39     58   +6.70 1 1 1 1 1   888    0 9.19 42.48 ----- 13.2 14.4 336.8 19.6 21.5 -27.2 20.6 -25.3 21.6 -22.5 22.7 -24.4
2026-04-15T15:22:13.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:22:13.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:22:13.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.556733
2026-04-15T15:22:13.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:22:13.993 [DEBUG] [Thread-21221] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:22:13.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:22:13.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:22:13.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:22:13.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:22:13.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:21:59', tmtdew=9.91597, humidity=51.7174, cloud=0.0, wind=15.6337, temperature=14.7064, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:21:41.731', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:22:14.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:22:14.212 [DEBUG] [Thread-21224] [transport.py] [_log()] starting thread (client mode): 0xee925420
2026-04-15T15:22:14.212 [DEBUG] [Thread-21224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:22:14.227 [DEBUG] [Thread-21224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:22:14.227 [INFO] [Thread-21224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:22:14.234 [DEBUG] [Thread-21224] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:22:14.235 [DEBUG] [Thread-21224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:22:14.235 [DEBUG] [Thread-21224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:22:14.235 [DEBUG] [Thread-21224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:22:14.235 [DEBUG] [Thread-21224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:22:14.235 [DEBUG] [Thread-21224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:22:14.235 [DEBUG] [Thread-21224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:22:14.235 [DEBUG] [Thread-21224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:22:14.235 [DEBUG] [Thread-21224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:22:14.235 [DEBUG] [Thread-21224] [transport.py] [_log()] client lang: <none>
2026-04-15T15:22:14.235 [DEBUG] [Thread-21224] [transport.py] [_log()] server lang: <none>
2026-04-15T15:22:14.235 [DEBUG] [Thread-21224] [transport.py] [_log()] kex follows: False
2026-04-15T15:22:14.235 [DEBUG] [Thread-21224] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:22:14.236 [DEBUG] [Thread-21224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:22:14.236 [DEBUG] [Thread-21224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:22:14.236 [DEBUG] [Thread-21224] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:22:14.236 [DEBUG] [Thread-21224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:22:14.236 [DEBUG] [Thread-21224] [transport.py] [_log()] Compression: none
2026-04-15T15:22:14.236 [DEBUG] [Thread-21224] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:22:14.292 [DEBUG] [Thread-21224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:22:14.292 [DEBUG] [Thread-21224] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:22:14.292 [DEBUG] [Thread-21224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:22:14.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:22:14.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:22:14.349 [DEBUG] [Thread-21224] [transport.py] [_log()] userauth is OK
2026-04-15T15:22:14.349 [DEBUG] [Thread-21224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:22:14.349 [DEBUG] [Thread-21224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:22:14.349 [DEBUG] [Thread-21224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:22:14.349 [DEBUG] [Thread-21224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:22:14.375 [INFO] [Thread-21224] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:22:14.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:22:14.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:22:15.212 [DEBUG] [Thread-21224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:22:15.213 [DEBUG] [Thread-21224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:22:15.260 [DEBUG] [Thread-21224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:22:15.260 [DEBUG] [Thread-21224] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:22:15.269 [DEBUG] [Thread-21224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:22:15.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:22:15.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')
2026-04-15T15:22:15.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
2026-04-15T15:22:15.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:22:15.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:22:15.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:22:15.304 [DEBUG] [Thread-21224] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:22:18.146 [DEBUG] [Thread-21226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:22:32.042 [DEBUG] [Thread-21227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:22:33.188 [DEBUG] [Thread-21228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:22:45.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:22:45.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:22:45.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
2026-04-15T15:22:46.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 22, 34), 10.5134, 49.4738, 0.0, 24.0293, 15.479, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:22:46.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:22:34
2026-04-15T15:22:47.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:22:47.463 [DEBUG] [Thread-21229] [transport.py] [_log()] starting thread (client mode): 0xee924190
2026-04-15T15:22:47.464 [DEBUG] [Thread-21229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:22:47.483 [DEBUG] [Thread-21229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:22:47.483 [INFO] [Thread-21229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:22:47.486 [DEBUG] [Thread-21229] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:22:47.487 [DEBUG] [Thread-21229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:22:47.487 [DEBUG] [Thread-21229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:22:47.487 [DEBUG] [Thread-21229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:22:47.487 [DEBUG] [Thread-21229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:22:47.487 [DEBUG] [Thread-21229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:22:47.487 [DEBUG] [Thread-21229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:22:47.487 [DEBUG] [Thread-21229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:22:47.487 [DEBUG] [Thread-21229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:22:47.487 [DEBUG] [Thread-21229] [transport.py] [_log()] client lang: <none>
2026-04-15T15:22:47.487 [DEBUG] [Thread-21229] [transport.py] [_log()] server lang: <none>
2026-04-15T15:22:47.487 [DEBUG] [Thread-21229] [transport.py] [_log()] kex follows: False
2026-04-15T15:22:47.487 [DEBUG] [Thread-21229] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:22:47.487 [DEBUG] [Thread-21229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:22:47.487 [DEBUG] [Thread-21229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:22:47.487 [DEBUG] [Thread-21229] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:22:47.488 [DEBUG] [Thread-21229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:22:47.488 [DEBUG] [Thread-21229] [transport.py] [_log()] Compression: none
2026-04-15T15:22:47.488 [DEBUG] [Thread-21229] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:22:47.506 [DEBUG] [Thread-21229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:22:47.506 [DEBUG] [Thread-21229] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:22:47.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:22:47.507 [DEBUG] [Thread-21229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:22:47.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:22:47.508 [DEBUG] [Thread-21229] [transport.py] [_log()] userauth is OK
2026-04-15T15:22:47.508 [DEBUG] [Thread-21229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:22:47.508 [DEBUG] [Thread-21229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:22:47.508 [DEBUG] [Thread-21229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:22:47.508 [DEBUG] [Thread-21229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:22:47.523 [INFO] [Thread-21229] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:22:47.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:22:48.152 [DEBUG] [Thread-21229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:22:48.153 [DEBUG] [Thread-21229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:22:48.153 [DEBUG] [Thread-21229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:22:48.193 [DEBUG] [Thread-21229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:22:48.193 [DEBUG] [Thread-21229] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:22:48.196 [DEBUG] [Thread-21229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:22:48.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:22:48.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:22:48.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:22:48.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:22:48.216 [DEBUG] [Thread-21232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:22:48.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:22:48.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:22:48.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:22:48.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:22:48.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:22:48.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.557428 -999.00  +14.50  15.05     57   +6.30 1 1 1 1 1   888    0 9.14 42.32 ----- 12.9 15.1 322.4 21.7 21.5 -28.2 20.6 -26.7 21.6 -23.0 22.7 -25.6
2026-04-15T15:22:48.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:22:48.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:22:48.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.557428
2026-04-15T15:22:48.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:22:48.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:22:48.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:22:48.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:22:48.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:22:48.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:22:34', tmtdew=10.5134, humidity=49.4738, cloud=0.0, wind=24.0293, temperature=15.479, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:22:41.779', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:22:48.220 [DEBUG] [Thread-21229] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:22:48.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:22:48.436 [DEBUG] [Thread-21233] [transport.py] [_log()] starting thread (client mode): 0xee924fa0
2026-04-15T15:22:48.437 [DEBUG] [Thread-21233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:22:48.451 [DEBUG] [Thread-21233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:22:48.452 [INFO] [Thread-21233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:22:48.459 [DEBUG] [Thread-21233] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:22:48.459 [DEBUG] [Thread-21233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:22:48.459 [DEBUG] [Thread-21233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:22:48.459 [DEBUG] [Thread-21233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:22:48.459 [DEBUG] [Thread-21233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:22:48.459 [DEBUG] [Thread-21233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:22:48.460 [DEBUG] [Thread-21233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:22:48.460 [DEBUG] [Thread-21233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:22:48.460 [DEBUG] [Thread-21233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:22:48.460 [DEBUG] [Thread-21233] [transport.py] [_log()] client lang: <none>
2026-04-15T15:22:48.460 [DEBUG] [Thread-21233] [transport.py] [_log()] server lang: <none>
2026-04-15T15:22:48.460 [DEBUG] [Thread-21233] [transport.py] [_log()] kex follows: False
2026-04-15T15:22:48.460 [DEBUG] [Thread-21233] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:22:48.460 [DEBUG] [Thread-21233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:22:48.460 [DEBUG] [Thread-21233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:22:48.460 [DEBUG] [Thread-21233] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:22:48.460 [DEBUG] [Thread-21233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:22:48.460 [DEBUG] [Thread-21233] [transport.py] [_log()] Compression: none
2026-04-15T15:22:48.461 [DEBUG] [Thread-21233] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:22:48.516 [DEBUG] [Thread-21233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:22:48.516 [DEBUG] [Thread-21233] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:22:48.517 [DEBUG] [Thread-21233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:22:48.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:22:48.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:22:48.574 [DEBUG] [Thread-21233] [transport.py] [_log()] userauth is OK
2026-04-15T15:22:48.574 [DEBUG] [Thread-21233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:22:48.575 [DEBUG] [Thread-21233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:22:48.575 [DEBUG] [Thread-21233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:22:48.575 [DEBUG] [Thread-21233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:22:48.600 [INFO] [Thread-21233] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:22:48.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:22:48.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:22:49.438 [DEBUG] [Thread-21233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:22:49.438 [DEBUG] [Thread-21233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:22:49.486 [DEBUG] [Thread-21233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:22:49.486 [DEBUG] [Thread-21233] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:22:49.494 [DEBUG] [Thread-21233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:22:49.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:22:49.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')
2026-04-15T15:22:49.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
2026-04-15T15:22:49.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:22:49.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:22:49.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:22:49.528 [DEBUG] [Thread-21233] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:23:03.246 [DEBUG] [Thread-21235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:23:11.130 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:23:11.132 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:23:18.289 [DEBUG] [Thread-21236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:23:19.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:23:19.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:23:19.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
2026-04-15T15:23:20.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 23, 10), 10.0452, 51.1041, 0.0, 15.4397, 14.6892, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:23:20.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:23:10
2026-04-15T15:23:21.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:23:21.679 [DEBUG] [Thread-21237] [transport.py] [_log()] starting thread (client mode): 0xee9afb50
2026-04-15T15:23:21.679 [DEBUG] [Thread-21237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:23:21.699 [DEBUG] [Thread-21237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:23:21.700 [INFO] [Thread-21237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:23:21.703 [DEBUG] [Thread-21237] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:23:21.703 [DEBUG] [Thread-21237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:23:21.703 [DEBUG] [Thread-21237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:23:21.703 [DEBUG] [Thread-21237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:23:21.703 [DEBUG] [Thread-21237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:23:21.703 [DEBUG] [Thread-21237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:23:21.703 [DEBUG] [Thread-21237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:23:21.703 [DEBUG] [Thread-21237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:23:21.703 [DEBUG] [Thread-21237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:23:21.703 [DEBUG] [Thread-21237] [transport.py] [_log()] client lang: <none>
2026-04-15T15:23:21.703 [DEBUG] [Thread-21237] [transport.py] [_log()] server lang: <none>
2026-04-15T15:23:21.704 [DEBUG] [Thread-21237] [transport.py] [_log()] kex follows: False
2026-04-15T15:23:21.704 [DEBUG] [Thread-21237] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:23:21.704 [DEBUG] [Thread-21237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:23:21.704 [DEBUG] [Thread-21237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:23:21.704 [DEBUG] [Thread-21237] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:23:21.704 [DEBUG] [Thread-21237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:23:21.704 [DEBUG] [Thread-21237] [transport.py] [_log()] Compression: none
2026-04-15T15:23:21.704 [DEBUG] [Thread-21237] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:23:21.722 [DEBUG] [Thread-21237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:23:21.723 [DEBUG] [Thread-21237] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:23:21.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:23:21.723 [DEBUG] [Thread-21237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:23:21.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:23:21.724 [DEBUG] [Thread-21237] [transport.py] [_log()] userauth is OK
2026-04-15T15:23:21.725 [DEBUG] [Thread-21237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:23:21.725 [DEBUG] [Thread-21237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:23:21.725 [DEBUG] [Thread-21237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:23:21.725 [DEBUG] [Thread-21237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:23:21.749 [INFO] [Thread-21237] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:23:21.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:23:22.400 [DEBUG] [Thread-21237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:23:22.401 [DEBUG] [Thread-21237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:23:22.401 [DEBUG] [Thread-21237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:23:22.441 [DEBUG] [Thread-21237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:23:22.441 [DEBUG] [Thread-21237] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:23:22.443 [DEBUG] [Thread-21237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:23:22.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:23:22.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:23:22.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:23:22.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:23:22.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:23:22.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:23:22.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:23:22.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:23:22.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:23:22.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.557776 -999.00  +14.60  25.16     58   +6.60 1 1 1 1 1   888    0 9.13 43.09 ----- 28.2 25.2 314.8 26.8 21.5 -28.5 20.5 -26.5 21.6 -25.8 22.7 -26.1
2026-04-15T15:23:22.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:23:22.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:23:22.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.557776
2026-04-15T15:23:22.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:23:22.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:23:22.463 [DEBUG] [Thread-21237] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:23:22.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:23:22.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:23:22.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:23:22.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:23:10', tmtdew=10.0452, humidity=51.1041, cloud=0.0, wind=15.4397, temperature=14.6892, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:23:11.846', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:23:22.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:23:22.675 [DEBUG] [Thread-21240] [transport.py] [_log()] starting thread (client mode): 0xee9af190
2026-04-15T15:23:22.675 [DEBUG] [Thread-21240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:23:22.689 [DEBUG] [Thread-21240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:23:22.689 [INFO] [Thread-21240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:23:22.703 [DEBUG] [Thread-21240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:23:22.703 [DEBUG] [Thread-21240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:23:22.703 [DEBUG] [Thread-21240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:23:22.703 [DEBUG] [Thread-21240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:23:22.703 [DEBUG] [Thread-21240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:23:22.703 [DEBUG] [Thread-21240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:23:22.703 [DEBUG] [Thread-21240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:23:22.703 [DEBUG] [Thread-21240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:23:22.703 [DEBUG] [Thread-21240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:23:22.703 [DEBUG] [Thread-21240] [transport.py] [_log()] client lang: <none>
2026-04-15T15:23:22.704 [DEBUG] [Thread-21240] [transport.py] [_log()] server lang: <none>
2026-04-15T15:23:22.704 [DEBUG] [Thread-21240] [transport.py] [_log()] kex follows: False
2026-04-15T15:23:22.704 [DEBUG] [Thread-21240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:23:22.704 [DEBUG] [Thread-21240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:23:22.704 [DEBUG] [Thread-21240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:23:22.704 [DEBUG] [Thread-21240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:23:22.704 [DEBUG] [Thread-21240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:23:22.704 [DEBUG] [Thread-21240] [transport.py] [_log()] Compression: none
2026-04-15T15:23:22.704 [DEBUG] [Thread-21240] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:23:22.760 [DEBUG] [Thread-21240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:23:22.761 [DEBUG] [Thread-21240] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:23:22.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:23:22.762 [DEBUG] [Thread-21240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:23:22.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:23:22.817 [DEBUG] [Thread-21240] [transport.py] [_log()] userauth is OK
2026-04-15T15:23:22.817 [DEBUG] [Thread-21240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:23:22.817 [DEBUG] [Thread-21240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:23:22.817 [DEBUG] [Thread-21240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:23:22.817 [DEBUG] [Thread-21240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:23:22.843 [INFO] [Thread-21240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:23:22.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:23:22.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:23:23.674 [DEBUG] [Thread-21240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:23:23.674 [DEBUG] [Thread-21240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:23:23.722 [DEBUG] [Thread-21240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:23:23.722 [DEBUG] [Thread-21240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:23:23.731 [DEBUG] [Thread-21240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:23:23.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:23:23.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')
2026-04-15T15:23:23.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
2026-04-15T15:23:23.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:23:23.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:23:23.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:23:23.769 [DEBUG] [Thread-21240] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:23:32.131 [DEBUG] [Thread-21242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:23:33.320 [DEBUG] [Thread-21243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:23:48.365 [DEBUG] [Thread-21244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:23:53.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:23:53.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:23: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
2026-04-15T15:23:55.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 23, 46), 10.2758, 50.3346, 0.0, 27.6631, 15.6106, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:23:55.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:23:46
2026-04-15T15:23:55.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:23:55.925 [DEBUG] [Thread-21245] [transport.py] [_log()] starting thread (client mode): 0xee926d10
2026-04-15T15:23:55.925 [DEBUG] [Thread-21245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:23:55.935 [DEBUG] [Thread-21245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:23:55.935 [INFO] [Thread-21245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:23:55.938 [DEBUG] [Thread-21245] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:23:55.939 [DEBUG] [Thread-21245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:23:55.939 [DEBUG] [Thread-21245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:23:55.939 [DEBUG] [Thread-21245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:23:55.939 [DEBUG] [Thread-21245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:23:55.939 [DEBUG] [Thread-21245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:23:55.939 [DEBUG] [Thread-21245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:23:55.939 [DEBUG] [Thread-21245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:23:55.939 [DEBUG] [Thread-21245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:23:55.939 [DEBUG] [Thread-21245] [transport.py] [_log()] client lang: <none>
2026-04-15T15:23:55.939 [DEBUG] [Thread-21245] [transport.py] [_log()] server lang: <none>
2026-04-15T15:23:55.939 [DEBUG] [Thread-21245] [transport.py] [_log()] kex follows: False
2026-04-15T15:23:55.939 [DEBUG] [Thread-21245] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:23:55.940 [DEBUG] [Thread-21245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:23:55.940 [DEBUG] [Thread-21245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:23:55.940 [DEBUG] [Thread-21245] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:23:55.940 [DEBUG] [Thread-21245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:23:55.940 [DEBUG] [Thread-21245] [transport.py] [_log()] Compression: none
2026-04-15T15:23:55.940 [DEBUG] [Thread-21245] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:23:55.956 [DEBUG] [Thread-21245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:23:55.956 [DEBUG] [Thread-21245] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:23:55.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:23:55.957 [DEBUG] [Thread-21245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:23:55.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:23:55.958 [DEBUG] [Thread-21245] [transport.py] [_log()] userauth is OK
2026-04-15T15:23:55.958 [DEBUG] [Thread-21245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:23:55.958 [DEBUG] [Thread-21245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:23:55.958 [DEBUG] [Thread-21245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:23:55.959 [DEBUG] [Thread-21245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:23:55.982 [INFO] [Thread-21245] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:23:55.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:23:56.615 [DEBUG] [Thread-21245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:23:56.616 [DEBUG] [Thread-21245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:23:56.616 [DEBUG] [Thread-21245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:23:56.656 [DEBUG] [Thread-21245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:23:56.656 [DEBUG] [Thread-21245] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:23:56.658 [DEBUG] [Thread-21245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:23:56.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:23:56.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:23:56.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:23:56.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:23:56.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:23:56.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:23:56.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:23:56.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:23:56.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:23:56.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.558122 -999.00  +14.80  23.26     60   +7.20 1 1 1 1 1   888    0 9.22 45.51 ----- 24.5 23.3 317.0 29.9 21.4 -27.5 20.5 -26.1 21.6 -24.4 22.7 -24.9
2026-04-15T15:23:56.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:23:56.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:23:56.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.558122
2026-04-15T15:23:56.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:23:56.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:23:56.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:23:56.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:23:56.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:23:56.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:23:46', tmtdew=10.2758, humidity=50.3346, cloud=0.0, wind=27.6631, temperature=15.6106, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:23:41.741', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:23:56.678 [DEBUG] [Thread-21245] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:23:56.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:23:56.895 [DEBUG] [Thread-21248] [transport.py] [_log()] starting thread (client mode): 0xee927c70
2026-04-15T15:23:56.895 [DEBUG] [Thread-21248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:23:56.909 [DEBUG] [Thread-21248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:23:56.909 [INFO] [Thread-21248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:23:56.916 [DEBUG] [Thread-21248] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:23:56.916 [DEBUG] [Thread-21248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:23:56.916 [DEBUG] [Thread-21248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:23:56.916 [DEBUG] [Thread-21248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:23:56.916 [DEBUG] [Thread-21248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:23:56.917 [DEBUG] [Thread-21248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:23:56.917 [DEBUG] [Thread-21248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:23:56.917 [DEBUG] [Thread-21248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:23:56.917 [DEBUG] [Thread-21248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:23:56.917 [DEBUG] [Thread-21248] [transport.py] [_log()] client lang: <none>
2026-04-15T15:23:56.917 [DEBUG] [Thread-21248] [transport.py] [_log()] server lang: <none>
2026-04-15T15:23:56.917 [DEBUG] [Thread-21248] [transport.py] [_log()] kex follows: False
2026-04-15T15:23:56.917 [DEBUG] [Thread-21248] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:23:56.917 [DEBUG] [Thread-21248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:23:56.917 [DEBUG] [Thread-21248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:23:56.917 [DEBUG] [Thread-21248] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:23:56.918 [DEBUG] [Thread-21248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:23:56.918 [DEBUG] [Thread-21248] [transport.py] [_log()] Compression: none
2026-04-15T15:23:56.918 [DEBUG] [Thread-21248] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:23:56.972 [DEBUG] [Thread-21248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:23:56.973 [DEBUG] [Thread-21248] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:23:56.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:23:56.973 [DEBUG] [Thread-21248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:23:56.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:23:57.029 [DEBUG] [Thread-21248] [transport.py] [_log()] userauth is OK
2026-04-15T15:23:57.029 [DEBUG] [Thread-21248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:23:57.029 [DEBUG] [Thread-21248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:23:57.030 [DEBUG] [Thread-21248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:23:57.030 [DEBUG] [Thread-21248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:23:57.054 [INFO] [Thread-21248] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:23:57.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:23:57.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:23:57.884 [DEBUG] [Thread-21248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:23:57.884 [DEBUG] [Thread-21248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:23:57.932 [DEBUG] [Thread-21248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:23:57.932 [DEBUG] [Thread-21248] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:23:57.941 [DEBUG] [Thread-21248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:23:57.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:23:57.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')
2026-04-15T15:23:57.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
2026-04-15T15:23:57.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:23:57.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:23:57.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:23:57.976 [DEBUG] [Thread-21248] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:24:03.397 [DEBUG] [Thread-21250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:24:11.274 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:24:11.276 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:24:18.443 [DEBUG] [Thread-21251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:24:27.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:24:27.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:24:27.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:24:29.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 24, 21), 9.43888, 52.8632, 0.0, 18.9677, 14.7222, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:24:29.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:24:21
2026-04-15T15:24:29.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:24:30.094 [DEBUG] [Thread-21252] [transport.py] [_log()] starting thread (client mode): 0xee9be6e0
2026-04-15T15:24:30.094 [DEBUG] [Thread-21252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:24:30.114 [DEBUG] [Thread-21252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:24:30.114 [INFO] [Thread-21252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:24:30.117 [DEBUG] [Thread-21252] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:24:30.117 [DEBUG] [Thread-21252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:24:30.117 [DEBUG] [Thread-21252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:24:30.117 [DEBUG] [Thread-21252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:24:30.117 [DEBUG] [Thread-21252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:24:30.117 [DEBUG] [Thread-21252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:24:30.117 [DEBUG] [Thread-21252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:24:30.118 [DEBUG] [Thread-21252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:24:30.118 [DEBUG] [Thread-21252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:24:30.118 [DEBUG] [Thread-21252] [transport.py] [_log()] client lang: <none>
2026-04-15T15:24:30.118 [DEBUG] [Thread-21252] [transport.py] [_log()] server lang: <none>
2026-04-15T15:24:30.118 [DEBUG] [Thread-21252] [transport.py] [_log()] kex follows: False
2026-04-15T15:24:30.118 [DEBUG] [Thread-21252] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:24:30.118 [DEBUG] [Thread-21252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:24:30.118 [DEBUG] [Thread-21252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:24:30.118 [DEBUG] [Thread-21252] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:24:30.118 [DEBUG] [Thread-21252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:24:30.118 [DEBUG] [Thread-21252] [transport.py] [_log()] Compression: none
2026-04-15T15:24:30.118 [DEBUG] [Thread-21252] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:24:30.135 [DEBUG] [Thread-21252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:24:30.136 [DEBUG] [Thread-21252] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:24:30.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:24:30.136 [DEBUG] [Thread-21252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:24:30.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:24:30.179 [DEBUG] [Thread-21252] [transport.py] [_log()] userauth is OK
2026-04-15T15:24:30.179 [DEBUG] [Thread-21252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:24:30.179 [DEBUG] [Thread-21252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:24:30.180 [DEBUG] [Thread-21252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:24:30.180 [DEBUG] [Thread-21252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:24:30.216 [INFO] [Thread-21252] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:24:30.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:24:30.854 [DEBUG] [Thread-21252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:24:30.855 [DEBUG] [Thread-21252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:24:30.855 [DEBUG] [Thread-21252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:24:30.895 [DEBUG] [Thread-21252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:24:30.895 [DEBUG] [Thread-21252] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:24:30.897 [DEBUG] [Thread-21252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:24:30.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:24:30.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:24:30.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:24:30.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:24:30.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:24:30.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:24:30.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:24:30.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:24:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:24:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.558470 -999.00  +14.70  20.97     60   +7.10 1 1 1 1 1   888    0 9.28 45.72 ----- 24.9 21.0 320.2 28.6 21.4 -28.5 20.5 -25.7 21.5 -22.8 22.6 -25.4
2026-04-15T15:24:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:24:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:24:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.558470
2026-04-15T15:24:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:24:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:24:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:24:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:24:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:24:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:24:21', tmtdew=9.43888, humidity=52.8632, cloud=0.0, wind=18.9677, temperature=14.7222, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:24:11.808', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:24:30.918 [DEBUG] [Thread-21252] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:24:31.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:24:31.132 [DEBUG] [Thread-21255] [transport.py] [_log()] starting thread (client mode): 0xee9be560
2026-04-15T15:24:31.133 [DEBUG] [Thread-21255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:24:31.147 [DEBUG] [Thread-21255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:24:31.147 [INFO] [Thread-21255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:24:31.154 [DEBUG] [Thread-21255] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:24:31.155 [DEBUG] [Thread-21255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:24:31.155 [DEBUG] [Thread-21255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:24:31.155 [DEBUG] [Thread-21255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:24:31.155 [DEBUG] [Thread-21255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:24:31.155 [DEBUG] [Thread-21255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:24:31.155 [DEBUG] [Thread-21255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:24:31.155 [DEBUG] [Thread-21255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:24:31.155 [DEBUG] [Thread-21255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:24:31.155 [DEBUG] [Thread-21255] [transport.py] [_log()] client lang: <none>
2026-04-15T15:24:31.155 [DEBUG] [Thread-21255] [transport.py] [_log()] server lang: <none>
2026-04-15T15:24:31.155 [DEBUG] [Thread-21255] [transport.py] [_log()] kex follows: False
2026-04-15T15:24:31.156 [DEBUG] [Thread-21255] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:24:31.156 [DEBUG] [Thread-21255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:24:31.156 [DEBUG] [Thread-21255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:24:31.156 [DEBUG] [Thread-21255] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:24:31.156 [DEBUG] [Thread-21255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:24:31.156 [DEBUG] [Thread-21255] [transport.py] [_log()] Compression: none
2026-04-15T15:24:31.156 [DEBUG] [Thread-21255] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:24:31.212 [DEBUG] [Thread-21255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:24:31.213 [DEBUG] [Thread-21255] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:24:31.213 [DEBUG] [Thread-21255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:24:31.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:24:31.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:24:31.269 [DEBUG] [Thread-21255] [transport.py] [_log()] userauth is OK
2026-04-15T15:24:31.269 [DEBUG] [Thread-21255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:24:31.269 [DEBUG] [Thread-21255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:24:31.269 [DEBUG] [Thread-21255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:24:31.270 [DEBUG] [Thread-21255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:24:31.295 [INFO] [Thread-21255] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:24:31.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:24:31.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:24:32.161 [DEBUG] [Thread-21255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:24:32.161 [DEBUG] [Thread-21255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:24:32.209 [DEBUG] [Thread-21255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:24:32.209 [DEBUG] [Thread-21255] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:24:32.217 [DEBUG] [Thread-21255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:24:32.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:24:32.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')
2026-04-15T15:24:32.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
2026-04-15T15:24:32.236 [DEBUG] [Thread-21257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:24:32.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:24:32.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:24:32.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:24:32.250 [DEBUG] [Thread-21255] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:24:33.474 [DEBUG] [Thread-21258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:24:48.518 [DEBUG] [Thread-21259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:25:02.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:25:02.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:25:02.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:25:03.550 [DEBUG] [Thread-21260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:25:03.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 24, 21), 9.43888, 52.8632, 0.0, 18.9677, 14.7222, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:25:03.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:24:21
2026-04-15T15:25:04.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:25:04.563 [DEBUG] [Thread-21261] [transport.py] [_log()] starting thread (client mode): 0xee9afac0
2026-04-15T15:25:04.563 [DEBUG] [Thread-21261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:25:04.583 [DEBUG] [Thread-21261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:25:04.583 [INFO] [Thread-21261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:25:04.587 [DEBUG] [Thread-21261] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:25:04.587 [DEBUG] [Thread-21261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:25:04.587 [DEBUG] [Thread-21261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:25:04.587 [DEBUG] [Thread-21261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:25:04.587 [DEBUG] [Thread-21261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:25:04.587 [DEBUG] [Thread-21261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:25:04.588 [DEBUG] [Thread-21261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:25:04.588 [DEBUG] [Thread-21261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:25:04.588 [DEBUG] [Thread-21261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:25:04.588 [DEBUG] [Thread-21261] [transport.py] [_log()] client lang: <none>
2026-04-15T15:25:04.588 [DEBUG] [Thread-21261] [transport.py] [_log()] server lang: <none>
2026-04-15T15:25:04.588 [DEBUG] [Thread-21261] [transport.py] [_log()] kex follows: False
2026-04-15T15:25:04.588 [DEBUG] [Thread-21261] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:25:04.588 [DEBUG] [Thread-21261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:25:04.588 [DEBUG] [Thread-21261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:25:04.588 [DEBUG] [Thread-21261] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:25:04.588 [DEBUG] [Thread-21261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:25:04.589 [DEBUG] [Thread-21261] [transport.py] [_log()] Compression: none
2026-04-15T15:25:04.589 [DEBUG] [Thread-21261] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:25:04.607 [DEBUG] [Thread-21261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:25:04.607 [DEBUG] [Thread-21261] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:25:04.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:25:04.608 [DEBUG] [Thread-21261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:25:04.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:25:04.609 [DEBUG] [Thread-21261] [transport.py] [_log()] userauth is OK
2026-04-15T15:25:04.609 [DEBUG] [Thread-21261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:25:04.610 [DEBUG] [Thread-21261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:25:04.610 [DEBUG] [Thread-21261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:25:04.610 [DEBUG] [Thread-21261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:25:04.636 [INFO] [Thread-21261] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:25:04.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:25:05.502 [DEBUG] [Thread-21261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:25:05.502 [DEBUG] [Thread-21261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:25:05.502 [DEBUG] [Thread-21261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:25:05.543 [DEBUG] [Thread-21261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:25:05.543 [DEBUG] [Thread-21261] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:25:05.546 [DEBUG] [Thread-21261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:25:05.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:25:05.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:25:05.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:25:05.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:25:05.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:25:05.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:25:05.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:25:05.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:25:05.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:25:05.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.558817 -999.00  +14.50  18.50     59   +6.70 1 1 1 1 1   888    0 9.10 43.28 ----- 14.9 18.5 323.3 26.9 21.4 -27.8 20.5 -26.7 21.6 -24.0 22.6 -25.6
2026-04-15T15:25:05.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:25:05.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:25:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.558817
2026-04-15T15:25:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:25:05.570 [DEBUG] [Thread-21261] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:25:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:25:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:25:05.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:25:05.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:25:05.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:24:21', tmtdew=9.43888, humidity=52.8632, cloud=0.0, wind=18.9677, temperature=14.7222, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:24:41.789', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:25:05.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:25:05.828 [DEBUG] [Thread-21264] [transport.py] [_log()] starting thread (client mode): 0xee9ada20
2026-04-15T15:25:05.828 [DEBUG] [Thread-21264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:25:05.844 [DEBUG] [Thread-21264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:25:05.844 [INFO] [Thread-21264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:25:05.852 [DEBUG] [Thread-21264] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:25:05.852 [DEBUG] [Thread-21264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:25:05.852 [DEBUG] [Thread-21264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:25:05.852 [DEBUG] [Thread-21264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:25:05.852 [DEBUG] [Thread-21264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:25:05.852 [DEBUG] [Thread-21264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:25:05.852 [DEBUG] [Thread-21264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:25:05.852 [DEBUG] [Thread-21264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:25:05.852 [DEBUG] [Thread-21264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:25:05.852 [DEBUG] [Thread-21264] [transport.py] [_log()] client lang: <none>
2026-04-15T15:25:05.852 [DEBUG] [Thread-21264] [transport.py] [_log()] server lang: <none>
2026-04-15T15:25:05.853 [DEBUG] [Thread-21264] [transport.py] [_log()] kex follows: False
2026-04-15T15:25:05.853 [DEBUG] [Thread-21264] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:25:05.853 [DEBUG] [Thread-21264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:25:05.853 [DEBUG] [Thread-21264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:25:05.853 [DEBUG] [Thread-21264] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:25:05.853 [DEBUG] [Thread-21264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:25:05.853 [DEBUG] [Thread-21264] [transport.py] [_log()] Compression: none
2026-04-15T15:25:05.853 [DEBUG] [Thread-21264] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:25:05.913 [DEBUG] [Thread-21264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:25:05.913 [DEBUG] [Thread-21264] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:25:05.914 [DEBUG] [Thread-21264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:25:05.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:25:05.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:25:05.973 [DEBUG] [Thread-21264] [transport.py] [_log()] userauth is OK
2026-04-15T15:25:05.973 [DEBUG] [Thread-21264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:25:05.974 [DEBUG] [Thread-21264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:25:05.974 [DEBUG] [Thread-21264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:25:05.974 [DEBUG] [Thread-21264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:25:06.000 [INFO] [Thread-21264] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:25:06.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:25:06.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:25:06.844 [DEBUG] [Thread-21264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:25:06.844 [DEBUG] [Thread-21264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:25:06.892 [DEBUG] [Thread-21264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:25:06.893 [DEBUG] [Thread-21264] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:25:06.902 [DEBUG] [Thread-21264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:25:06.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:25:06.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')
2026-04-15T15:25:06.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
2026-04-15T15:25:06.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:25:06.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:25:06.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:25:06.942 [DEBUG] [Thread-21264] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:25:11.416 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:25:11.417 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:25:18.581 [DEBUG] [Thread-21266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:25:32.316 [DEBUG] [Thread-21267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:25:33.625 [DEBUG] [Thread-21268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:25:36.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:25:36.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:25:36.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:25:38.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 24, 56), 9.77684, 51.9548, 0.0, 16.304, 14.6898, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:25:38.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:24:56
2026-04-15T15:25:38.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:25:39.121 [DEBUG] [Thread-21269] [transport.py] [_log()] starting thread (client mode): 0xee927a90
2026-04-15T15:25:39.121 [DEBUG] [Thread-21269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:25:39.141 [DEBUG] [Thread-21269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:25:39.141 [INFO] [Thread-21269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:25:39.144 [DEBUG] [Thread-21269] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:25:39.145 [DEBUG] [Thread-21269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:25:39.145 [DEBUG] [Thread-21269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:25:39.145 [DEBUG] [Thread-21269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:25:39.145 [DEBUG] [Thread-21269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:25:39.145 [DEBUG] [Thread-21269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:25:39.145 [DEBUG] [Thread-21269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:25:39.145 [DEBUG] [Thread-21269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:25:39.145 [DEBUG] [Thread-21269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:25:39.145 [DEBUG] [Thread-21269] [transport.py] [_log()] client lang: <none>
2026-04-15T15:25:39.145 [DEBUG] [Thread-21269] [transport.py] [_log()] server lang: <none>
2026-04-15T15:25:39.145 [DEBUG] [Thread-21269] [transport.py] [_log()] kex follows: False
2026-04-15T15:25:39.145 [DEBUG] [Thread-21269] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:25:39.145 [DEBUG] [Thread-21269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:25:39.146 [DEBUG] [Thread-21269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:25:39.146 [DEBUG] [Thread-21269] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:25:39.146 [DEBUG] [Thread-21269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:25:39.146 [DEBUG] [Thread-21269] [transport.py] [_log()] Compression: none
2026-04-15T15:25:39.146 [DEBUG] [Thread-21269] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:25:39.160 [DEBUG] [Thread-21269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:25:39.161 [DEBUG] [Thread-21269] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:25:39.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:25:39.162 [DEBUG] [Thread-21269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:25:39.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:25:39.162 [DEBUG] [Thread-21269] [transport.py] [_log()] userauth is OK
2026-04-15T15:25:39.162 [DEBUG] [Thread-21269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:25:39.163 [DEBUG] [Thread-21269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:25:39.163 [DEBUG] [Thread-21269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:25:39.163 [DEBUG] [Thread-21269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:25:39.189 [INFO] [Thread-21269] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:25:39.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:25:39.834 [DEBUG] [Thread-21269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:25:39.834 [DEBUG] [Thread-21269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:25:39.835 [DEBUG] [Thread-21269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:25:39.875 [DEBUG] [Thread-21269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:25:39.875 [DEBUG] [Thread-21269] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:25:39.878 [DEBUG] [Thread-21269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:25:39.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:25:39.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:25:39.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:25:39.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:25:39.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:25:39.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:25:39.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:25:39.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:25:39.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:25:39.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.559164 -999.00  +14.40  19.84     61   +7.00 1 1 1 1 1   887    0 9.01 40.12 ----- 19.5 19.8 301.6 23.1 21.5 -28.1 20.4 -26.2 21.5 -23.5 22.6 -25.6
2026-04-15T15:25:39.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:25:39.901 [DEBUG] [Thread-21269] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:25:39.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:25:39.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.559164
2026-04-15T15:25:39.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:25:39.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:25:39.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:25:39.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:25:39.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:25:39.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:24:56', tmtdew=9.77684, humidity=51.9548, cloud=0.0, wind=16.304, temperature=14.6898, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:25:11.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:25:40.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:25:40.166 [DEBUG] [Thread-21272] [transport.py] [_log()] starting thread (client mode): 0xee926860
2026-04-15T15:25:40.166 [DEBUG] [Thread-21272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:25:40.186 [DEBUG] [Thread-21272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:25:40.186 [INFO] [Thread-21272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:25:40.193 [DEBUG] [Thread-21272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:25:40.194 [DEBUG] [Thread-21272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:25:40.194 [DEBUG] [Thread-21272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:25:40.194 [DEBUG] [Thread-21272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:25:40.194 [DEBUG] [Thread-21272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:25:40.194 [DEBUG] [Thread-21272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:25:40.194 [DEBUG] [Thread-21272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:25:40.194 [DEBUG] [Thread-21272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:25:40.194 [DEBUG] [Thread-21272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:25:40.194 [DEBUG] [Thread-21272] [transport.py] [_log()] client lang: <none>
2026-04-15T15:25:40.195 [DEBUG] [Thread-21272] [transport.py] [_log()] server lang: <none>
2026-04-15T15:25:40.195 [DEBUG] [Thread-21272] [transport.py] [_log()] kex follows: False
2026-04-15T15:25:40.195 [DEBUG] [Thread-21272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:25:40.195 [DEBUG] [Thread-21272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:25:40.195 [DEBUG] [Thread-21272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:25:40.195 [DEBUG] [Thread-21272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:25:40.195 [DEBUG] [Thread-21272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:25:40.195 [DEBUG] [Thread-21272] [transport.py] [_log()] Compression: none
2026-04-15T15:25:40.195 [DEBUG] [Thread-21272] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:25:40.257 [DEBUG] [Thread-21272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:25:40.257 [DEBUG] [Thread-21272] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:25:40.258 [DEBUG] [Thread-21272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:25:40.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:25:40.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:25:40.317 [DEBUG] [Thread-21272] [transport.py] [_log()] userauth is OK
2026-04-15T15:25:40.318 [DEBUG] [Thread-21272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:25:40.318 [DEBUG] [Thread-21272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:25:40.318 [DEBUG] [Thread-21272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:25:40.318 [DEBUG] [Thread-21272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:25:40.348 [INFO] [Thread-21272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:25:40.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:25:40.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:25:41.156 [DEBUG] [Thread-21272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:25:41.156 [DEBUG] [Thread-21272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:25:41.204 [DEBUG] [Thread-21272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:25:41.204 [DEBUG] [Thread-21272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:25:41.213 [DEBUG] [Thread-21272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:25:41.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:25:41.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')
2026-04-15T15:25:41.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
2026-04-15T15:25:41.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:25:41.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:25:41.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:25:41.248 [DEBUG] [Thread-21272] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:25:48.655 [DEBUG] [Thread-21274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:26:03.695 [DEBUG] [Thread-21275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:26:11.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:26:11.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:26:11.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
2026-04-15T15:26:11.557 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:26:11.558 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:26:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 25, 32), 9.37801, 53.3134, 0.0, 15.1045, 14.5407, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:26:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:25:32
2026-04-15T15:26:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:26:13.427 [DEBUG] [Thread-21276] [transport.py] [_log()] starting thread (client mode): 0xee9bcd00
2026-04-15T15:26:13.427 [DEBUG] [Thread-21276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:26:13.446 [DEBUG] [Thread-21276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:26:13.446 [INFO] [Thread-21276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:26:13.449 [DEBUG] [Thread-21276] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:26:13.450 [DEBUG] [Thread-21276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:26:13.450 [DEBUG] [Thread-21276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:26:13.450 [DEBUG] [Thread-21276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:26:13.450 [DEBUG] [Thread-21276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:26:13.450 [DEBUG] [Thread-21276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:26:13.450 [DEBUG] [Thread-21276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:26:13.450 [DEBUG] [Thread-21276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:26:13.450 [DEBUG] [Thread-21276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:26:13.450 [DEBUG] [Thread-21276] [transport.py] [_log()] client lang: <none>
2026-04-15T15:26:13.450 [DEBUG] [Thread-21276] [transport.py] [_log()] server lang: <none>
2026-04-15T15:26:13.450 [DEBUG] [Thread-21276] [transport.py] [_log()] kex follows: False
2026-04-15T15:26:13.450 [DEBUG] [Thread-21276] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:26:13.450 [DEBUG] [Thread-21276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:26:13.451 [DEBUG] [Thread-21276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:26:13.451 [DEBUG] [Thread-21276] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:26:13.451 [DEBUG] [Thread-21276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:26:13.451 [DEBUG] [Thread-21276] [transport.py] [_log()] Compression: none
2026-04-15T15:26:13.451 [DEBUG] [Thread-21276] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:26:13.468 [DEBUG] [Thread-21276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:26:13.468 [DEBUG] [Thread-21276] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:26:13.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:26:13.469 [DEBUG] [Thread-21276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:26:13.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:26:13.470 [DEBUG] [Thread-21276] [transport.py] [_log()] userauth is OK
2026-04-15T15:26:13.470 [DEBUG] [Thread-21276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:26:13.470 [DEBUG] [Thread-21276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:26:13.470 [DEBUG] [Thread-21276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:26:13.471 [DEBUG] [Thread-21276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:26:13.505 [INFO] [Thread-21276] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:26:13.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:26:14.154 [DEBUG] [Thread-21276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:26:14.154 [DEBUG] [Thread-21276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:26:14.154 [DEBUG] [Thread-21276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:26:14.195 [DEBUG] [Thread-21276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:26:14.195 [DEBUG] [Thread-21276] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:26:14.198 [DEBUG] [Thread-21276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:26:14.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:26:14.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:26:14.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:26:14.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:26:14.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:26:14.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:26:14.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:26:14.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:26:14.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:26:14.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.559511 -999.00  +14.70  17.30     62   +7.40 1 1 1 1 1   887    0 9.01 35.62 ----- 23.7 17.3 317.0 24.9 21.4 -27.9 20.5 -26.2 21.5 -23.9 22.6 -25.2
2026-04-15T15:26:14.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:26:14.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:26:14.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.559511
2026-04-15T15:26:14.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:26:14.223 [DEBUG] [Thread-21276] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:26:14.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:26:14.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:26:14.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:26:14.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:26:14.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:25:32', tmtdew=9.37801, humidity=53.3134, cloud=0.0, wind=15.1045, temperature=14.5407, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:25:41.750', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:26:14.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:26:14.477 [DEBUG] [Thread-21279] [transport.py] [_log()] starting thread (client mode): 0xee9befe0
2026-04-15T15:26:14.477 [DEBUG] [Thread-21279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:26:14.493 [DEBUG] [Thread-21279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:26:14.493 [INFO] [Thread-21279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:26:14.500 [DEBUG] [Thread-21279] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:26:14.501 [DEBUG] [Thread-21279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:26:14.501 [DEBUG] [Thread-21279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:26:14.501 [DEBUG] [Thread-21279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:26:14.501 [DEBUG] [Thread-21279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:26:14.501 [DEBUG] [Thread-21279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:26:14.501 [DEBUG] [Thread-21279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:26:14.501 [DEBUG] [Thread-21279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:26:14.501 [DEBUG] [Thread-21279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:26:14.501 [DEBUG] [Thread-21279] [transport.py] [_log()] client lang: <none>
2026-04-15T15:26:14.501 [DEBUG] [Thread-21279] [transport.py] [_log()] server lang: <none>
2026-04-15T15:26:14.501 [DEBUG] [Thread-21279] [transport.py] [_log()] kex follows: False
2026-04-15T15:26:14.501 [DEBUG] [Thread-21279] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:26:14.502 [DEBUG] [Thread-21279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:26:14.502 [DEBUG] [Thread-21279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:26:14.502 [DEBUG] [Thread-21279] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:26:14.502 [DEBUG] [Thread-21279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:26:14.502 [DEBUG] [Thread-21279] [transport.py] [_log()] Compression: none
2026-04-15T15:26:14.502 [DEBUG] [Thread-21279] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:26:14.561 [DEBUG] [Thread-21279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:26:14.561 [DEBUG] [Thread-21279] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:26:14.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:26:14.562 [DEBUG] [Thread-21279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:26:14.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:26:14.618 [DEBUG] [Thread-21279] [transport.py] [_log()] userauth is OK
2026-04-15T15:26:14.618 [DEBUG] [Thread-21279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:26:14.618 [DEBUG] [Thread-21279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:26:14.618 [DEBUG] [Thread-21279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:26:14.618 [DEBUG] [Thread-21279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:26:14.644 [INFO] [Thread-21279] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:26:14.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:26:14.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:26:15.467 [DEBUG] [Thread-21279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:26:15.467 [DEBUG] [Thread-21279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:26:15.515 [DEBUG] [Thread-21279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:26:15.515 [DEBUG] [Thread-21279] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:26:15.525 [DEBUG] [Thread-21279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:26:15.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:26:15.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')
2026-04-15T15:26:15.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
2026-04-15T15:26:15.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:26:15.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:26:15.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:26:15.562 [DEBUG] [Thread-21279] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:26:18.726 [DEBUG] [Thread-21281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:26:32.404 [DEBUG] [Thread-21282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:26:33.770 [DEBUG] [Thread-21283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:26:45.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:26:45.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:26:45.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
2026-04-15T15:26:46.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 26, 8), 9.11208, 54.3074, 0.0, 14.2225, 14.6234, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:26:46.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:26:08
2026-04-15T15:26:47.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:26:47.796 [DEBUG] [Thread-21284] [transport.py] [_log()] starting thread (client mode): 0xee9ad9c0
2026-04-15T15:26:47.796 [DEBUG] [Thread-21284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:26:47.815 [DEBUG] [Thread-21284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:26:47.815 [INFO] [Thread-21284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:26:47.818 [DEBUG] [Thread-21284] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:26:47.818 [DEBUG] [Thread-21284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:26:47.818 [DEBUG] [Thread-21284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:26:47.818 [DEBUG] [Thread-21284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:26:47.818 [DEBUG] [Thread-21284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:26:47.819 [DEBUG] [Thread-21284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:26:47.819 [DEBUG] [Thread-21284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:26:47.819 [DEBUG] [Thread-21284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:26:47.819 [DEBUG] [Thread-21284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:26:47.819 [DEBUG] [Thread-21284] [transport.py] [_log()] client lang: <none>
2026-04-15T15:26:47.819 [DEBUG] [Thread-21284] [transport.py] [_log()] server lang: <none>
2026-04-15T15:26:47.819 [DEBUG] [Thread-21284] [transport.py] [_log()] kex follows: False
2026-04-15T15:26:47.819 [DEBUG] [Thread-21284] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:26:47.819 [DEBUG] [Thread-21284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:26:47.819 [DEBUG] [Thread-21284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:26:47.819 [DEBUG] [Thread-21284] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:26:47.819 [DEBUG] [Thread-21284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:26:47.819 [DEBUG] [Thread-21284] [transport.py] [_log()] Compression: none
2026-04-15T15:26:47.819 [DEBUG] [Thread-21284] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:26:47.834 [DEBUG] [Thread-21284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:26:47.834 [DEBUG] [Thread-21284] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:26:47.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:26:47.835 [DEBUG] [Thread-21284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:26:47.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:26:47.836 [DEBUG] [Thread-21284] [transport.py] [_log()] userauth is OK
2026-04-15T15:26:47.836 [DEBUG] [Thread-21284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:26:47.836 [DEBUG] [Thread-21284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:26:47.836 [DEBUG] [Thread-21284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:26:47.836 [DEBUG] [Thread-21284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:26:47.849 [INFO] [Thread-21284] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:26:47.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:26:48.480 [DEBUG] [Thread-21284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:26:48.480 [DEBUG] [Thread-21284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:26:48.481 [DEBUG] [Thread-21284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:26:48.521 [DEBUG] [Thread-21284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:26:48.521 [DEBUG] [Thread-21284] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:26:48.524 [DEBUG] [Thread-21284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:26:48.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:26:48.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:26:48.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:26:48.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:26:48.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:26:48.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:26:48.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:26:48.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:26:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:26:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.559858 -999.00  +14.30  22.69     61   +7.00 1 1 1 1 1   887    0 8.80 34.18 ----- 22.4 22.7 307.0 29.0 21.2 -28.7 20.2 -26.6 21.2 -24.7 22.4 -25.8
2026-04-15T15:26:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:26:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:26:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.559858
2026-04-15T15:26:48.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:26:48.547 [DEBUG] [Thread-21284] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:26:48.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:26:48.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:26:48.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:26:48.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:26:48.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:26:08', tmtdew=9.11208, humidity=54.3074, cloud=0.0, wind=14.2225, temperature=14.6234, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:26:11.731', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:26:48.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:26:48.800 [DEBUG] [Thread-21287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:26:48.806 [DEBUG] [Thread-21288] [transport.py] [_log()] starting thread (client mode): 0xee9264a0
2026-04-15T15:26:48.807 [DEBUG] [Thread-21288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:26:48.821 [DEBUG] [Thread-21288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:26:48.821 [INFO] [Thread-21288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:26:48.829 [DEBUG] [Thread-21288] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:26:48.829 [DEBUG] [Thread-21288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:26:48.829 [DEBUG] [Thread-21288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:26:48.829 [DEBUG] [Thread-21288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:26:48.829 [DEBUG] [Thread-21288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:26:48.830 [DEBUG] [Thread-21288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:26:48.830 [DEBUG] [Thread-21288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:26:48.830 [DEBUG] [Thread-21288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:26:48.830 [DEBUG] [Thread-21288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:26:48.830 [DEBUG] [Thread-21288] [transport.py] [_log()] client lang: <none>
2026-04-15T15:26:48.830 [DEBUG] [Thread-21288] [transport.py] [_log()] server lang: <none>
2026-04-15T15:26:48.830 [DEBUG] [Thread-21288] [transport.py] [_log()] kex follows: False
2026-04-15T15:26:48.830 [DEBUG] [Thread-21288] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:26:48.830 [DEBUG] [Thread-21288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:26:48.830 [DEBUG] [Thread-21288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:26:48.830 [DEBUG] [Thread-21288] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:26:48.830 [DEBUG] [Thread-21288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:26:48.831 [DEBUG] [Thread-21288] [transport.py] [_log()] Compression: none
2026-04-15T15:26:48.831 [DEBUG] [Thread-21288] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:26:48.888 [DEBUG] [Thread-21288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:26:48.889 [DEBUG] [Thread-21288] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:26:48.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:26:48.889 [DEBUG] [Thread-21288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:26:48.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:26:48.944 [DEBUG] [Thread-21288] [transport.py] [_log()] userauth is OK
2026-04-15T15:26:48.945 [DEBUG] [Thread-21288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:26:48.945 [DEBUG] [Thread-21288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:26:48.945 [DEBUG] [Thread-21288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:26:48.945 [DEBUG] [Thread-21288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:26:48.972 [INFO] [Thread-21288] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:26:48.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:26:48.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:26:49.814 [DEBUG] [Thread-21288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:26:49.815 [DEBUG] [Thread-21288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:26:49.862 [DEBUG] [Thread-21288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:26:49.862 [DEBUG] [Thread-21288] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:26:49.871 [DEBUG] [Thread-21288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:26:49.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:26:49.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')
2026-04-15T15:26:49.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
2026-04-15T15:26:49.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:26:49.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:26:49.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:26:49.905 [DEBUG] [Thread-21288] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:27:03.841 [DEBUG] [Thread-21290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:27:11.702 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:27:11.703 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:27:18.871 [DEBUG] [Thread-21291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:27:19.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:27:19.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:27:19.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
2026-04-15T15:27:21.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 26, 43), 9.33733, 53.5484, 0.0, 16.2677, 14.9805, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:27:21.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:26:43
2026-04-15T15:27:21.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:27:22.152 [DEBUG] [Thread-21292] [transport.py] [_log()] starting thread (client mode): 0xee925e10
2026-04-15T15:27:22.152 [DEBUG] [Thread-21292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:27:22.172 [DEBUG] [Thread-21292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:27:22.172 [INFO] [Thread-21292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:27:22.174 [DEBUG] [Thread-21292] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:27:22.174 [DEBUG] [Thread-21292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:27:22.174 [DEBUG] [Thread-21292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:27:22.175 [DEBUG] [Thread-21292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:27:22.175 [DEBUG] [Thread-21292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:27:22.175 [DEBUG] [Thread-21292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:27:22.175 [DEBUG] [Thread-21292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:27:22.175 [DEBUG] [Thread-21292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:27:22.175 [DEBUG] [Thread-21292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:27:22.175 [DEBUG] [Thread-21292] [transport.py] [_log()] client lang: <none>
2026-04-15T15:27:22.175 [DEBUG] [Thread-21292] [transport.py] [_log()] server lang: <none>
2026-04-15T15:27:22.175 [DEBUG] [Thread-21292] [transport.py] [_log()] kex follows: False
2026-04-15T15:27:22.175 [DEBUG] [Thread-21292] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:27:22.175 [DEBUG] [Thread-21292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:27:22.176 [DEBUG] [Thread-21292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:27:22.176 [DEBUG] [Thread-21292] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:27:22.176 [DEBUG] [Thread-21292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:27:22.176 [DEBUG] [Thread-21292] [transport.py] [_log()] Compression: none
2026-04-15T15:27:22.176 [DEBUG] [Thread-21292] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:27:22.193 [DEBUG] [Thread-21292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:27:22.193 [DEBUG] [Thread-21292] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:27:22.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:27:22.194 [DEBUG] [Thread-21292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:27:22.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:27:22.195 [DEBUG] [Thread-21292] [transport.py] [_log()] userauth is OK
2026-04-15T15:27:22.195 [DEBUG] [Thread-21292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:27:22.195 [DEBUG] [Thread-21292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:27:22.195 [DEBUG] [Thread-21292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:27:22.195 [DEBUG] [Thread-21292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:27:22.212 [INFO] [Thread-21292] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:27:22.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:27:22.871 [DEBUG] [Thread-21292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:27:22.871 [DEBUG] [Thread-21292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:27:22.872 [DEBUG] [Thread-21292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:27:22.912 [DEBUG] [Thread-21292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:27:22.912 [DEBUG] [Thread-21292] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:27:22.915 [DEBUG] [Thread-21292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:27:22.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:27:22.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:27:22.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:27:22.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:27:22.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:27:22.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:27:22.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:27:22.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:27:22.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:27:22.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.560553 -999.00  +14.40  20.83     59   +6.70 1 1 1 1 1   887    0 8.76 31.43 ----- 21.4 20.8 330.5 25.2 21.2 -28.1 20.3 -26.7 21.3 -23.1 22.3 -24.8
2026-04-15T15:27:22.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:27:22.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:27:22.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.560553
2026-04-15T15:27:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:27:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:27:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:27:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:27:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:27:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:26:43', tmtdew=9.33733, humidity=53.5484, cloud=0.0, wind=16.2677, temperature=14.9805, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:27:11.779', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:27:22.941 [DEBUG] [Thread-21292] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:27:23.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:27:23.197 [DEBUG] [Thread-21295] [transport.py] [_log()] starting thread (client mode): 0xee9276d0
2026-04-15T15:27:23.197 [DEBUG] [Thread-21295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:27:23.215 [DEBUG] [Thread-21295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:27:23.215 [INFO] [Thread-21295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:27:23.223 [DEBUG] [Thread-21295] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:27:23.223 [DEBUG] [Thread-21295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:27:23.223 [DEBUG] [Thread-21295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:27:23.223 [DEBUG] [Thread-21295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:27:23.223 [DEBUG] [Thread-21295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:27:23.223 [DEBUG] [Thread-21295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:27:23.223 [DEBUG] [Thread-21295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:27:23.223 [DEBUG] [Thread-21295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:27:23.223 [DEBUG] [Thread-21295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:27:23.223 [DEBUG] [Thread-21295] [transport.py] [_log()] client lang: <none>
2026-04-15T15:27:23.223 [DEBUG] [Thread-21295] [transport.py] [_log()] server lang: <none>
2026-04-15T15:27:23.224 [DEBUG] [Thread-21295] [transport.py] [_log()] kex follows: False
2026-04-15T15:27:23.224 [DEBUG] [Thread-21295] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:27:23.224 [DEBUG] [Thread-21295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:27:23.224 [DEBUG] [Thread-21295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:27:23.224 [DEBUG] [Thread-21295] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:27:23.224 [DEBUG] [Thread-21295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:27:23.224 [DEBUG] [Thread-21295] [transport.py] [_log()] Compression: none
2026-04-15T15:27:23.224 [DEBUG] [Thread-21295] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:27:23.280 [DEBUG] [Thread-21295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:27:23.280 [DEBUG] [Thread-21295] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:27:23.280 [DEBUG] [Thread-21295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:27:23.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:27:23.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:27:23.337 [DEBUG] [Thread-21295] [transport.py] [_log()] userauth is OK
2026-04-15T15:27:23.337 [DEBUG] [Thread-21295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:27:23.337 [DEBUG] [Thread-21295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:27:23.337 [DEBUG] [Thread-21295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:27:23.337 [DEBUG] [Thread-21295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:27:23.362 [INFO] [Thread-21295] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:27:23.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:27:23.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:27:24.223 [DEBUG] [Thread-21295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:27:24.223 [DEBUG] [Thread-21295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:27:24.271 [DEBUG] [Thread-21295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:27:24.271 [DEBUG] [Thread-21295] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:27:24.280 [DEBUG] [Thread-21295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:27:24.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:27:24.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')
2026-04-15T15:27:24.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
2026-04-15T15:27:24.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:27:24.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:27:24.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:27:24.315 [DEBUG] [Thread-21295] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:27:32.479 [DEBUG] [Thread-21297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:27:33.900 [DEBUG] [Thread-21298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:27:48.943 [DEBUG] [Thread-21299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:27:54.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:27:54.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:27: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
2026-04-15T15:27:55.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 27, 19), 9.11707, 54.4593, 0.0, 20.1856, 14.4224, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:27:55.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:27:19
2026-04-15T15:27:56.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:27:56.483 [DEBUG] [Thread-21300] [transport.py] [_log()] starting thread (client mode): 0xee924be0
2026-04-15T15:27:56.483 [DEBUG] [Thread-21300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:27:56.503 [DEBUG] [Thread-21300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:27:56.503 [INFO] [Thread-21300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:27:56.506 [DEBUG] [Thread-21300] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:27:56.506 [DEBUG] [Thread-21300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:27:56.506 [DEBUG] [Thread-21300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:27:56.506 [DEBUG] [Thread-21300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:27:56.507 [DEBUG] [Thread-21300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:27:56.507 [DEBUG] [Thread-21300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:27:56.507 [DEBUG] [Thread-21300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:27:56.507 [DEBUG] [Thread-21300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:27:56.507 [DEBUG] [Thread-21300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:27:56.507 [DEBUG] [Thread-21300] [transport.py] [_log()] client lang: <none>
2026-04-15T15:27:56.507 [DEBUG] [Thread-21300] [transport.py] [_log()] server lang: <none>
2026-04-15T15:27:56.507 [DEBUG] [Thread-21300] [transport.py] [_log()] kex follows: False
2026-04-15T15:27:56.507 [DEBUG] [Thread-21300] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:27:56.507 [DEBUG] [Thread-21300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:27:56.507 [DEBUG] [Thread-21300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:27:56.507 [DEBUG] [Thread-21300] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:27:56.507 [DEBUG] [Thread-21300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:27:56.507 [DEBUG] [Thread-21300] [transport.py] [_log()] Compression: none
2026-04-15T15:27:56.507 [DEBUG] [Thread-21300] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:27:56.524 [DEBUG] [Thread-21300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:27:56.524 [DEBUG] [Thread-21300] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:27:56.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:27:56.524 [DEBUG] [Thread-21300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:27:56.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:27:56.525 [DEBUG] [Thread-21300] [transport.py] [_log()] userauth is OK
2026-04-15T15:27:56.525 [DEBUG] [Thread-21300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:27:56.525 [DEBUG] [Thread-21300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:27:56.525 [DEBUG] [Thread-21300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:27:56.525 [DEBUG] [Thread-21300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:27:56.544 [INFO] [Thread-21300] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:27:56.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:27:57.170 [DEBUG] [Thread-21300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:27:57.170 [DEBUG] [Thread-21300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:27:57.171 [DEBUG] [Thread-21300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:27:57.211 [DEBUG] [Thread-21300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:27:57.211 [DEBUG] [Thread-21300] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:27:57.214 [DEBUG] [Thread-21300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:27:57.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:27:57.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:27:57.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:27:57.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:27:57.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:27:57.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:27:57.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:27:57.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:27:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:27:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.560900 -999.00  +14.20  12.87     61   +6.90 1 1 1 1 1   887    0 8.76 32.11 ----- 15.5 12.9 299.7 23.1 21.2 -27.3 20.3 -25.2 21.4 -22.2 22.3 -24.6
2026-04-15T15:27:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:27:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:27:57.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.560900
2026-04-15T15:27:57.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:27:57.236 [DEBUG] [Thread-21300] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:27:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:27:57.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:27:57.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:27:57.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:27:57.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:27:19', tmtdew=9.11707, humidity=54.4593, cloud=0.0, wind=20.1856, temperature=14.4224, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:27:41.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:27:57.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:27:57.496 [DEBUG] [Thread-21303] [transport.py] [_log()] starting thread (client mode): 0xee925b70
2026-04-15T15:27:57.496 [DEBUG] [Thread-21303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:27:57.511 [DEBUG] [Thread-21303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:27:57.511 [INFO] [Thread-21303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:27:57.519 [DEBUG] [Thread-21303] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:27:57.519 [DEBUG] [Thread-21303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:27:57.519 [DEBUG] [Thread-21303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:27:57.519 [DEBUG] [Thread-21303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:27:57.519 [DEBUG] [Thread-21303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:27:57.519 [DEBUG] [Thread-21303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:27:57.519 [DEBUG] [Thread-21303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:27:57.519 [DEBUG] [Thread-21303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:27:57.519 [DEBUG] [Thread-21303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:27:57.519 [DEBUG] [Thread-21303] [transport.py] [_log()] client lang: <none>
2026-04-15T15:27:57.519 [DEBUG] [Thread-21303] [transport.py] [_log()] server lang: <none>
2026-04-15T15:27:57.520 [DEBUG] [Thread-21303] [transport.py] [_log()] kex follows: False
2026-04-15T15:27:57.520 [DEBUG] [Thread-21303] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:27:57.520 [DEBUG] [Thread-21303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:27:57.520 [DEBUG] [Thread-21303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:27:57.520 [DEBUG] [Thread-21303] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:27:57.520 [DEBUG] [Thread-21303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:27:57.520 [DEBUG] [Thread-21303] [transport.py] [_log()] Compression: none
2026-04-15T15:27:57.520 [DEBUG] [Thread-21303] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:27:57.578 [DEBUG] [Thread-21303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:27:57.579 [DEBUG] [Thread-21303] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:27:57.579 [DEBUG] [Thread-21303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:27:57.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:27:57.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:27:57.637 [DEBUG] [Thread-21303] [transport.py] [_log()] userauth is OK
2026-04-15T15:27:57.637 [DEBUG] [Thread-21303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:27:57.637 [DEBUG] [Thread-21303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:27:57.637 [DEBUG] [Thread-21303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:27:57.637 [DEBUG] [Thread-21303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:27:57.663 [INFO] [Thread-21303] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:27:57.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:27:57.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:27:58.500 [DEBUG] [Thread-21303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:27:58.500 [DEBUG] [Thread-21303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:27:58.548 [DEBUG] [Thread-21303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:27:58.548 [DEBUG] [Thread-21303] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:27:58.557 [DEBUG] [Thread-21303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:27:58.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:27:58.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')
2026-04-15T15:27:58.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
2026-04-15T15:27:58.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:27:58.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:27:58.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:27:58.592 [DEBUG] [Thread-21303] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:28:03.974 [DEBUG] [Thread-21305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:28:11.843 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:28:11.844 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:28:19.013 [DEBUG] [Thread-21306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:28:28.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:28:28.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:28:28.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
2026-04-15T15:28:29.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 27, 55), 9.13452, 54.5919, 0.0, 17.5918, 14.7721, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:28:29.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:27:55
2026-04-15T15:28:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:28:30.722 [DEBUG] [Thread-21307] [transport.py] [_log()] starting thread (client mode): 0xee924e80
2026-04-15T15:28:30.722 [DEBUG] [Thread-21307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:28:30.743 [DEBUG] [Thread-21307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:28:30.743 [INFO] [Thread-21307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:28:30.746 [DEBUG] [Thread-21307] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:28:30.747 [DEBUG] [Thread-21307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:28:30.747 [DEBUG] [Thread-21307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:28:30.747 [DEBUG] [Thread-21307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:28:30.747 [DEBUG] [Thread-21307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:28:30.747 [DEBUG] [Thread-21307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:28:30.747 [DEBUG] [Thread-21307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:28:30.747 [DEBUG] [Thread-21307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:28:30.747 [DEBUG] [Thread-21307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:28:30.747 [DEBUG] [Thread-21307] [transport.py] [_log()] client lang: <none>
2026-04-15T15:28:30.747 [DEBUG] [Thread-21307] [transport.py] [_log()] server lang: <none>
2026-04-15T15:28:30.747 [DEBUG] [Thread-21307] [transport.py] [_log()] kex follows: False
2026-04-15T15:28:30.747 [DEBUG] [Thread-21307] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:28:30.748 [DEBUG] [Thread-21307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:28:30.748 [DEBUG] [Thread-21307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:28:30.748 [DEBUG] [Thread-21307] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:28:30.748 [DEBUG] [Thread-21307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:28:30.748 [DEBUG] [Thread-21307] [transport.py] [_log()] Compression: none
2026-04-15T15:28:30.748 [DEBUG] [Thread-21307] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:28:30.766 [DEBUG] [Thread-21307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:28:30.766 [DEBUG] [Thread-21307] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:28:30.767 [DEBUG] [Thread-21307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:28:30.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:28:30.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:28:30.768 [DEBUG] [Thread-21307] [transport.py] [_log()] userauth is OK
2026-04-15T15:28:30.768 [DEBUG] [Thread-21307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:28:30.768 [DEBUG] [Thread-21307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:28:30.768 [DEBUG] [Thread-21307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:28:30.768 [DEBUG] [Thread-21307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:28:30.803 [INFO] [Thread-21307] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:28:30.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:28:31.445 [DEBUG] [Thread-21307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:28:31.445 [DEBUG] [Thread-21307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:28:31.446 [DEBUG] [Thread-21307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:28:31.486 [DEBUG] [Thread-21307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:28:31.486 [DEBUG] [Thread-21307] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:28:31.490 [DEBUG] [Thread-21307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:28:31.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:28:31.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:28:31.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:28:31.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:28:31.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:28:31.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:28:31.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:28:31.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:28:31.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:28:31.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.561247 -999.00  +14.30  13.82     61   +7.00 1 1 1 1 1   887    0 8.76 28.29 ----- 18.1 13.8 313.2 20.5 21.2 -27.6 20.3 -25.7 21.2 -22.5 22.4 -24.7
2026-04-15T15:28:31.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:28:31.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:28:31.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.561247
2026-04-15T15:28:31.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:28:31.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:28:31.513 [DEBUG] [Thread-21307] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:28:31.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:28:31.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:28:31.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:28:31.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:27:55', tmtdew=9.13452, humidity=54.5919, cloud=0.0, wind=17.5918, temperature=14.7721, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:28:11.741', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:28:31.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:28:31.765 [DEBUG] [Thread-21310] [transport.py] [_log()] starting thread (client mode): 0xee9bcd60
2026-04-15T15:28:31.766 [DEBUG] [Thread-21310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:28:31.781 [DEBUG] [Thread-21310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:28:31.781 [INFO] [Thread-21310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:28:31.788 [DEBUG] [Thread-21310] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:28:31.788 [DEBUG] [Thread-21310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:28:31.788 [DEBUG] [Thread-21310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:28:31.788 [DEBUG] [Thread-21310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:28:31.788 [DEBUG] [Thread-21310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:28:31.788 [DEBUG] [Thread-21310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:28:31.788 [DEBUG] [Thread-21310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:28:31.789 [DEBUG] [Thread-21310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:28:31.789 [DEBUG] [Thread-21310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:28:31.789 [DEBUG] [Thread-21310] [transport.py] [_log()] client lang: <none>
2026-04-15T15:28:31.789 [DEBUG] [Thread-21310] [transport.py] [_log()] server lang: <none>
2026-04-15T15:28:31.789 [DEBUG] [Thread-21310] [transport.py] [_log()] kex follows: False
2026-04-15T15:28:31.789 [DEBUG] [Thread-21310] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:28:31.789 [DEBUG] [Thread-21310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:28:31.789 [DEBUG] [Thread-21310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:28:31.789 [DEBUG] [Thread-21310] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:28:31.789 [DEBUG] [Thread-21310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:28:31.789 [DEBUG] [Thread-21310] [transport.py] [_log()] Compression: none
2026-04-15T15:28:31.789 [DEBUG] [Thread-21310] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:28:31.844 [DEBUG] [Thread-21310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:28:31.845 [DEBUG] [Thread-21310] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:28:31.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:28:31.845 [DEBUG] [Thread-21310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:28:31.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:28:31.900 [DEBUG] [Thread-21310] [transport.py] [_log()] userauth is OK
2026-04-15T15:28:31.901 [DEBUG] [Thread-21310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:28:31.901 [DEBUG] [Thread-21310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:28:31.901 [DEBUG] [Thread-21310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:28:31.901 [DEBUG] [Thread-21310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:28:31.926 [INFO] [Thread-21310] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:28:31.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:28:31.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:28:32.570 [DEBUG] [Thread-21312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:28:32.746 [DEBUG] [Thread-21310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:28:32.747 [DEBUG] [Thread-21310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:28:32.794 [DEBUG] [Thread-21310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:28:32.794 [DEBUG] [Thread-21310] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:28:32.803 [DEBUG] [Thread-21310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:28:32.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:28:32.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')
2026-04-15T15:28:32.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
2026-04-15T15:28:32.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:28:32.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:28:32.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:28:32.840 [DEBUG] [Thread-21310] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:28:34.044 [DEBUG] [Thread-21313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:28:49.087 [DEBUG] [Thread-21314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:29:02.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:29:02.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:29:02.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:29:04.116 [DEBUG] [Thread-21315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:29:04.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 28, 30), 9.4009, 53.6638, 0.0, 18.6149, 14.9043, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:29:04.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:28:30
2026-04-15T15:29:04.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:29:05.005 [DEBUG] [Thread-21316] [transport.py] [_log()] starting thread (client mode): 0xee9bcc70
2026-04-15T15:29:05.005 [DEBUG] [Thread-21316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:29:05.025 [DEBUG] [Thread-21316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:29:05.025 [INFO] [Thread-21316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:29:05.029 [DEBUG] [Thread-21316] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:29:05.029 [DEBUG] [Thread-21316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:29:05.029 [DEBUG] [Thread-21316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:29:05.029 [DEBUG] [Thread-21316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:29:05.029 [DEBUG] [Thread-21316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:29:05.029 [DEBUG] [Thread-21316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:29:05.029 [DEBUG] [Thread-21316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:29:05.029 [DEBUG] [Thread-21316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:29:05.029 [DEBUG] [Thread-21316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:29:05.030 [DEBUG] [Thread-21316] [transport.py] [_log()] client lang: <none>
2026-04-15T15:29:05.030 [DEBUG] [Thread-21316] [transport.py] [_log()] server lang: <none>
2026-04-15T15:29:05.030 [DEBUG] [Thread-21316] [transport.py] [_log()] kex follows: False
2026-04-15T15:29:05.030 [DEBUG] [Thread-21316] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:29:05.030 [DEBUG] [Thread-21316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:29:05.030 [DEBUG] [Thread-21316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:29:05.030 [DEBUG] [Thread-21316] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:29:05.030 [DEBUG] [Thread-21316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:29:05.030 [DEBUG] [Thread-21316] [transport.py] [_log()] Compression: none
2026-04-15T15:29:05.030 [DEBUG] [Thread-21316] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:29:05.039 [DEBUG] [Thread-21316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:29:05.039 [DEBUG] [Thread-21316] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:29:05.040 [DEBUG] [Thread-21316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:29:05.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:29:05.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:29:05.041 [DEBUG] [Thread-21316] [transport.py] [_log()] userauth is OK
2026-04-15T15:29:05.041 [DEBUG] [Thread-21316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:29:05.041 [DEBUG] [Thread-21316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:29:05.041 [DEBUG] [Thread-21316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:29:05.041 [DEBUG] [Thread-21316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:29:05.065 [INFO] [Thread-21316] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:29:05.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:29:05.695 [DEBUG] [Thread-21316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:29:05.695 [DEBUG] [Thread-21316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:29:05.696 [DEBUG] [Thread-21316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:29:05.736 [DEBUG] [Thread-21316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:29:05.736 [DEBUG] [Thread-21316] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:29:05.740 [DEBUG] [Thread-21316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:29:05.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:29:05.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:29:05.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:29:05.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:29:05.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:29:05.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:29:05.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:29:05.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:29:05.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:29:05.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.561594 -999.00  +14.40  20.00     61   +7.00 1 1 1 1 1   887    0 8.32 23.05 ----- 17.5 20.0 326.0 26.4 21.2 -27.0 20.2 -26.5 21.3 -23.3 22.4 -24.9
2026-04-15T15:29:05.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:29:05.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:29:05.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.561594
2026-04-15T15:29:05.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:29:05.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:29:05.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:29:05.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:29:05.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:29:05.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:28:30', tmtdew=9.4009, humidity=53.6638, cloud=0.0, wind=18.6149, temperature=14.9043, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:28:41.722', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:29:05.764 [DEBUG] [Thread-21316] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:29:06.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:29:06.019 [DEBUG] [Thread-21319] [transport.py] [_log()] starting thread (client mode): 0xee9be200
2026-04-15T15:29:06.019 [DEBUG] [Thread-21319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:29:06.037 [DEBUG] [Thread-21319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:29:06.037 [INFO] [Thread-21319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:29:06.044 [DEBUG] [Thread-21319] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:29:06.044 [DEBUG] [Thread-21319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:29:06.044 [DEBUG] [Thread-21319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:29:06.044 [DEBUG] [Thread-21319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:29:06.045 [DEBUG] [Thread-21319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:29:06.045 [DEBUG] [Thread-21319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:29:06.045 [DEBUG] [Thread-21319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:29:06.045 [DEBUG] [Thread-21319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:29:06.045 [DEBUG] [Thread-21319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:29:06.045 [DEBUG] [Thread-21319] [transport.py] [_log()] client lang: <none>
2026-04-15T15:29:06.045 [DEBUG] [Thread-21319] [transport.py] [_log()] server lang: <none>
2026-04-15T15:29:06.045 [DEBUG] [Thread-21319] [transport.py] [_log()] kex follows: False
2026-04-15T15:29:06.045 [DEBUG] [Thread-21319] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:29:06.045 [DEBUG] [Thread-21319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:29:06.045 [DEBUG] [Thread-21319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:29:06.045 [DEBUG] [Thread-21319] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:29:06.046 [DEBUG] [Thread-21319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:29:06.046 [DEBUG] [Thread-21319] [transport.py] [_log()] Compression: none
2026-04-15T15:29:06.046 [DEBUG] [Thread-21319] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:29:06.100 [DEBUG] [Thread-21319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:29:06.100 [DEBUG] [Thread-21319] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:29:06.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:29:06.101 [DEBUG] [Thread-21319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:29:06.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:29:06.156 [DEBUG] [Thread-21319] [transport.py] [_log()] userauth is OK
2026-04-15T15:29:06.157 [DEBUG] [Thread-21319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:29:06.157 [DEBUG] [Thread-21319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:29:06.157 [DEBUG] [Thread-21319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:29:06.157 [DEBUG] [Thread-21319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:29:06.183 [INFO] [Thread-21319] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:29:06.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:29:06.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:29:07.030 [DEBUG] [Thread-21319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:29:07.031 [DEBUG] [Thread-21319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:29:07.079 [DEBUG] [Thread-21319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:29:07.079 [DEBUG] [Thread-21319] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:29:07.087 [DEBUG] [Thread-21319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:29:07.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:29:07.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')
2026-04-15T15:29:07.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
2026-04-15T15:29:07.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:29:07.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:29:07.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:29:07.120 [DEBUG] [Thread-21319] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:29:11.983 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:29:11.984 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:29:19.147 [DEBUG] [Thread-21321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:29:32.659 [DEBUG] [Thread-21322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:29:34.192 [DEBUG] [Thread-21323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:29:37.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:29:37.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:29:37.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
2026-04-15T15:29:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 29, 6), 9.29169, 54.0283, 0.0, 15.5808, 14.8049, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:29:38.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:29:06
2026-04-15T15:29:38.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:29:39.224 [DEBUG] [Thread-21324] [transport.py] [_log()] starting thread (client mode): 0xee926b30
2026-04-15T15:29:39.224 [DEBUG] [Thread-21324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:29:39.245 [DEBUG] [Thread-21324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:29:39.245 [INFO] [Thread-21324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:29:39.248 [DEBUG] [Thread-21324] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:29:39.248 [DEBUG] [Thread-21324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:29:39.248 [DEBUG] [Thread-21324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:29:39.248 [DEBUG] [Thread-21324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:29:39.248 [DEBUG] [Thread-21324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:29:39.248 [DEBUG] [Thread-21324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:29:39.248 [DEBUG] [Thread-21324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:29:39.248 [DEBUG] [Thread-21324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:29:39.248 [DEBUG] [Thread-21324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:29:39.248 [DEBUG] [Thread-21324] [transport.py] [_log()] client lang: <none>
2026-04-15T15:29:39.249 [DEBUG] [Thread-21324] [transport.py] [_log()] server lang: <none>
2026-04-15T15:29:39.249 [DEBUG] [Thread-21324] [transport.py] [_log()] kex follows: False
2026-04-15T15:29:39.249 [DEBUG] [Thread-21324] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:29:39.249 [DEBUG] [Thread-21324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:29:39.249 [DEBUG] [Thread-21324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:29:39.249 [DEBUG] [Thread-21324] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:29:39.249 [DEBUG] [Thread-21324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:29:39.249 [DEBUG] [Thread-21324] [transport.py] [_log()] Compression: none
2026-04-15T15:29:39.249 [DEBUG] [Thread-21324] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:29:39.267 [DEBUG] [Thread-21324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:29:39.268 [DEBUG] [Thread-21324] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:29:39.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:29:39.268 [DEBUG] [Thread-21324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:29:39.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:29:39.270 [DEBUG] [Thread-21324] [transport.py] [_log()] userauth is OK
2026-04-15T15:29:39.270 [DEBUG] [Thread-21324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:29:39.270 [DEBUG] [Thread-21324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:29:39.270 [DEBUG] [Thread-21324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:29:39.270 [DEBUG] [Thread-21324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:29:39.295 [INFO] [Thread-21324] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:29:39.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:29:39.942 [DEBUG] [Thread-21324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:29:39.942 [DEBUG] [Thread-21324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:29:39.943 [DEBUG] [Thread-21324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:29:39.983 [DEBUG] [Thread-21324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:29:39.983 [DEBUG] [Thread-21324] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:29:39.986 [DEBUG] [Thread-21324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:29:39.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:29:40.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:29:40.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:29:40.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:29:40.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:29:40.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:29:40.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:29:40.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:29:40.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:29:40.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.561942 -999.00  +14.30  13.55     60   +6.70 1 1 1 1 1   887    0 8.48 20.74 ----- 10.3 13.6 320.0 19.8 21.3 -27.2 20.3 -26.7 21.4 -23.2 22.5 -25.0
2026-04-15T15:29:40.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:29:40.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:29:40.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.561942
2026-04-15T15:29:40.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:29:40.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:29:40.013 [DEBUG] [Thread-21324] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:29:40.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:29:40.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:29:40.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:29:40.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:29:06', tmtdew=9.29169, humidity=54.0283, cloud=0.0, wind=15.5808, temperature=14.8049, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:29:11.789', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:29:40.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:29:40.271 [DEBUG] [Thread-21327] [transport.py] [_log()] starting thread (client mode): 0xee925450
2026-04-15T15:29:40.271 [DEBUG] [Thread-21327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:29:40.285 [DEBUG] [Thread-21327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:29:40.285 [INFO] [Thread-21327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:29:40.292 [DEBUG] [Thread-21327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:29:40.292 [DEBUG] [Thread-21327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:29:40.292 [DEBUG] [Thread-21327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:29:40.292 [DEBUG] [Thread-21327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:29:40.293 [DEBUG] [Thread-21327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:29:40.293 [DEBUG] [Thread-21327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:29:40.293 [DEBUG] [Thread-21327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:29:40.293 [DEBUG] [Thread-21327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:29:40.293 [DEBUG] [Thread-21327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:29:40.293 [DEBUG] [Thread-21327] [transport.py] [_log()] client lang: <none>
2026-04-15T15:29:40.293 [DEBUG] [Thread-21327] [transport.py] [_log()] server lang: <none>
2026-04-15T15:29:40.293 [DEBUG] [Thread-21327] [transport.py] [_log()] kex follows: False
2026-04-15T15:29:40.293 [DEBUG] [Thread-21327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:29:40.293 [DEBUG] [Thread-21327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:29:40.293 [DEBUG] [Thread-21327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:29:40.293 [DEBUG] [Thread-21327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:29:40.294 [DEBUG] [Thread-21327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:29:40.294 [DEBUG] [Thread-21327] [transport.py] [_log()] Compression: none
2026-04-15T15:29:40.294 [DEBUG] [Thread-21327] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:29:40.348 [DEBUG] [Thread-21327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:29:40.348 [DEBUG] [Thread-21327] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:29:40.349 [DEBUG] [Thread-21327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:29:40.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:29:40.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:29:40.408 [DEBUG] [Thread-21327] [transport.py] [_log()] userauth is OK
2026-04-15T15:29:40.408 [DEBUG] [Thread-21327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:29:40.409 [DEBUG] [Thread-21327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:29:40.409 [DEBUG] [Thread-21327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:29:40.409 [DEBUG] [Thread-21327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:29:40.432 [INFO] [Thread-21327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:29:40.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:29:40.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:29:41.270 [DEBUG] [Thread-21327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:29:41.271 [DEBUG] [Thread-21327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:29:41.318 [DEBUG] [Thread-21327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:29:41.318 [DEBUG] [Thread-21327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:29:41.327 [DEBUG] [Thread-21327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:29:41.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:29:41.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')
2026-04-15T15:29:41.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
2026-04-15T15:29:41.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:29:41.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:29:41.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:29:41.369 [DEBUG] [Thread-21327] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:29:49.225 [DEBUG] [Thread-21329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:30:04.269 [DEBUG] [Thread-21330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:30:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:30:11.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:30:11.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:30:12.125 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:30:12.127 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:30:12.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 29, 42), 9.80675, 51.9898, 0.0, 14.539, 15.5755, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:30:12.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:29:42
2026-04-15T15:30:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:30:13.457 [DEBUG] [Thread-21331] [transport.py] [_log()] starting thread (client mode): 0xee9bcd60
2026-04-15T15:30:13.457 [DEBUG] [Thread-21331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:30:13.477 [DEBUG] [Thread-21331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:30:13.477 [INFO] [Thread-21331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:30:13.480 [DEBUG] [Thread-21331] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:30:13.480 [DEBUG] [Thread-21331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:30:13.480 [DEBUG] [Thread-21331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:30:13.480 [DEBUG] [Thread-21331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:30:13.480 [DEBUG] [Thread-21331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:30:13.481 [DEBUG] [Thread-21331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:30:13.481 [DEBUG] [Thread-21331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:30:13.481 [DEBUG] [Thread-21331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:30:13.481 [DEBUG] [Thread-21331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:30:13.481 [DEBUG] [Thread-21331] [transport.py] [_log()] client lang: <none>
2026-04-15T15:30:13.481 [DEBUG] [Thread-21331] [transport.py] [_log()] server lang: <none>
2026-04-15T15:30:13.481 [DEBUG] [Thread-21331] [transport.py] [_log()] kex follows: False
2026-04-15T15:30:13.481 [DEBUG] [Thread-21331] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:30:13.481 [DEBUG] [Thread-21331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:30:13.481 [DEBUG] [Thread-21331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:30:13.481 [DEBUG] [Thread-21331] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:30:13.481 [DEBUG] [Thread-21331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:30:13.482 [DEBUG] [Thread-21331] [transport.py] [_log()] Compression: none
2026-04-15T15:30:13.482 [DEBUG] [Thread-21331] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:30:13.498 [DEBUG] [Thread-21331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:30:13.499 [DEBUG] [Thread-21331] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:30:13.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:30:13.499 [DEBUG] [Thread-21331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:30:13.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:30:13.500 [DEBUG] [Thread-21331] [transport.py] [_log()] userauth is OK
2026-04-15T15:30:13.500 [DEBUG] [Thread-21331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:30:13.500 [DEBUG] [Thread-21331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:30:13.501 [DEBUG] [Thread-21331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:30:13.501 [DEBUG] [Thread-21331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:30:13.518 [INFO] [Thread-21331] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:30:13.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:30:17.048 [DEBUG] [Thread-21331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:30:17.049 [DEBUG] [Thread-21331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:30:17.049 [DEBUG] [Thread-21331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:30:17.089 [DEBUG] [Thread-21331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:30:17.089 [DEBUG] [Thread-21331] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:30:17.092 [DEBUG] [Thread-21331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:30:17.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:30:17.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:30:17.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:30:17.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:30:17.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:30:17.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:30:17.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:30:17.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:30:17.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:30:17.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.562289 -999.00  +14.40  10.64     59   +6.60 1 1 1 1 1   887    0 8.31 17.36 ----- 10.8 10.6 350.6 13.9 21.2 -27.9 20.2 -26.6 21.4 -23.5 22.3 -25.0
2026-04-15T15:30:17.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:30:17.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:30:17.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.562289
2026-04-15T15:30:17.119 [DEBUG] [Thread-21331] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:30:17.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:30:17.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:30:17.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:30:17.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:30:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:30:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:29:42', tmtdew=9.80675, humidity=51.9898, cloud=0.0, wind=14.539, temperature=15.5755, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:29:41.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:30:17.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:30:17.382 [DEBUG] [Thread-21334] [transport.py] [_log()] starting thread (client mode): 0xee9bf730
2026-04-15T15:30:17.382 [DEBUG] [Thread-21334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:30:17.396 [DEBUG] [Thread-21334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:30:17.396 [INFO] [Thread-21334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:30:17.403 [DEBUG] [Thread-21334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:30:17.404 [DEBUG] [Thread-21334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:30:17.404 [DEBUG] [Thread-21334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:30:17.404 [DEBUG] [Thread-21334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:30:17.404 [DEBUG] [Thread-21334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:30:17.404 [DEBUG] [Thread-21334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:30:17.404 [DEBUG] [Thread-21334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:30:17.404 [DEBUG] [Thread-21334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:30:17.404 [DEBUG] [Thread-21334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:30:17.404 [DEBUG] [Thread-21334] [transport.py] [_log()] client lang: <none>
2026-04-15T15:30:17.404 [DEBUG] [Thread-21334] [transport.py] [_log()] server lang: <none>
2026-04-15T15:30:17.404 [DEBUG] [Thread-21334] [transport.py] [_log()] kex follows: False
2026-04-15T15:30:17.405 [DEBUG] [Thread-21334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:30:17.405 [DEBUG] [Thread-21334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:30:17.405 [DEBUG] [Thread-21334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:30:17.405 [DEBUG] [Thread-21334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:30:17.405 [DEBUG] [Thread-21334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:30:17.405 [DEBUG] [Thread-21334] [transport.py] [_log()] Compression: none
2026-04-15T15:30:17.405 [DEBUG] [Thread-21334] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:30:17.459 [DEBUG] [Thread-21334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:30:17.460 [DEBUG] [Thread-21334] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:30:17.460 [DEBUG] [Thread-21334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:30:17.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:30:17.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:30:17.516 [DEBUG] [Thread-21334] [transport.py] [_log()] userauth is OK
2026-04-15T15:30:17.517 [DEBUG] [Thread-21334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:30:17.517 [DEBUG] [Thread-21334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:30:17.517 [DEBUG] [Thread-21334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:30:17.517 [DEBUG] [Thread-21334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:30:17.541 [INFO] [Thread-21334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:30:17.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:30:17.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:30:18.349 [DEBUG] [Thread-21334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:30:18.350 [DEBUG] [Thread-21334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:30:18.397 [DEBUG] [Thread-21334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:30:18.397 [DEBUG] [Thread-21334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:30:18.406 [DEBUG] [Thread-21334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:30:18.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:30:18.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')
2026-04-15T15:30:18.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
2026-04-15T15:30:18.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:30:18.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:30:18.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:30:18.439 [DEBUG] [Thread-21334] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:30:19.297 [DEBUG] [Thread-21336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:30:32.749 [DEBUG] [Thread-21337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:30:34.336 [DEBUG] [Thread-21338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:30:48.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:30:48.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:30:48.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
2026-04-15T15:30:49.366 [DEBUG] [Thread-21339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:30:49.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 30, 18), 9.55865, 52.6139, 0.0, 11.9286, 15.1212, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:30:49.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:30:18
2026-04-15T15:30:50.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:30:50.560 [DEBUG] [Thread-21340] [transport.py] [_log()] starting thread (client mode): 0xee9bd180
2026-04-15T15:30:50.560 [DEBUG] [Thread-21340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:30:50.581 [DEBUG] [Thread-21340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:30:50.581 [INFO] [Thread-21340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:30:50.584 [DEBUG] [Thread-21340] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:30:50.584 [DEBUG] [Thread-21340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:30:50.585 [DEBUG] [Thread-21340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:30:50.585 [DEBUG] [Thread-21340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:30:50.585 [DEBUG] [Thread-21340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:30:50.585 [DEBUG] [Thread-21340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:30:50.585 [DEBUG] [Thread-21340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:30:50.585 [DEBUG] [Thread-21340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:30:50.585 [DEBUG] [Thread-21340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:30:50.585 [DEBUG] [Thread-21340] [transport.py] [_log()] client lang: <none>
2026-04-15T15:30:50.585 [DEBUG] [Thread-21340] [transport.py] [_log()] server lang: <none>
2026-04-15T15:30:50.585 [DEBUG] [Thread-21340] [transport.py] [_log()] kex follows: False
2026-04-15T15:30:50.585 [DEBUG] [Thread-21340] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:30:50.585 [DEBUG] [Thread-21340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:30:50.586 [DEBUG] [Thread-21340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:30:50.586 [DEBUG] [Thread-21340] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:30:50.586 [DEBUG] [Thread-21340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:30:50.586 [DEBUG] [Thread-21340] [transport.py] [_log()] Compression: none
2026-04-15T15:30:50.586 [DEBUG] [Thread-21340] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:30:50.603 [DEBUG] [Thread-21340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:30:50.603 [DEBUG] [Thread-21340] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:30:50.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:30:50.604 [DEBUG] [Thread-21340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:30:50.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:30:50.605 [DEBUG] [Thread-21340] [transport.py] [_log()] userauth is OK
2026-04-15T15:30:50.605 [DEBUG] [Thread-21340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:30:50.605 [DEBUG] [Thread-21340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:30:50.606 [DEBUG] [Thread-21340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:30:50.606 [DEBUG] [Thread-21340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:30:50.632 [INFO] [Thread-21340] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:30:50.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:30:51.405 [DEBUG] [Thread-21340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:30:51.405 [DEBUG] [Thread-21340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:30:51.406 [DEBUG] [Thread-21340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:30:51.446 [DEBUG] [Thread-21340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:30:51.446 [DEBUG] [Thread-21340] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:30:51.449 [DEBUG] [Thread-21340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:30:51.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:30:51.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:30:51.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:30:51.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:30:51.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:30:51.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:30:51.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:30:51.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:30:51.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:30:51.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.562636 -999.00  +14.50  19.17     60   +6.80 1 1 1 1 1   887    0 8.14 12.85 ----- 27.8 19.2 340.5 24.1 21.2 -28.1 20.2 -26.7 21.3 -24.3 22.3 -26.1
2026-04-15T15:30:51.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:30:51.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:30:51.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.562636
2026-04-15T15:30:51.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:30:51.475 [DEBUG] [Thread-21340] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:30:51.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:30:51.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:30:51.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:30:51.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:30:51.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:30:18', tmtdew=9.55865, humidity=52.6139, cloud=0.0, wind=11.9286, temperature=15.1212, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:30:11.750', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:30:51.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:30:51.730 [DEBUG] [Thread-21343] [transport.py] [_log()] starting thread (client mode): 0xee9246a0
2026-04-15T15:30:51.730 [DEBUG] [Thread-21343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:30:51.745 [DEBUG] [Thread-21343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:30:51.745 [INFO] [Thread-21343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:30:51.752 [DEBUG] [Thread-21343] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:30:51.752 [DEBUG] [Thread-21343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:30:51.752 [DEBUG] [Thread-21343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:30:51.752 [DEBUG] [Thread-21343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:30:51.753 [DEBUG] [Thread-21343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:30:51.753 [DEBUG] [Thread-21343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:30:51.753 [DEBUG] [Thread-21343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:30:51.753 [DEBUG] [Thread-21343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:30:51.753 [DEBUG] [Thread-21343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:30:51.753 [DEBUG] [Thread-21343] [transport.py] [_log()] client lang: <none>
2026-04-15T15:30:51.753 [DEBUG] [Thread-21343] [transport.py] [_log()] server lang: <none>
2026-04-15T15:30:51.753 [DEBUG] [Thread-21343] [transport.py] [_log()] kex follows: False
2026-04-15T15:30:51.753 [DEBUG] [Thread-21343] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:30:51.753 [DEBUG] [Thread-21343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:30:51.753 [DEBUG] [Thread-21343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:30:51.753 [DEBUG] [Thread-21343] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:30:51.754 [DEBUG] [Thread-21343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:30:51.754 [DEBUG] [Thread-21343] [transport.py] [_log()] Compression: none
2026-04-15T15:30:51.754 [DEBUG] [Thread-21343] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:30:51.808 [DEBUG] [Thread-21343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:30:51.808 [DEBUG] [Thread-21343] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:30:51.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:30:51.809 [DEBUG] [Thread-21343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:30:51.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:30:51.864 [DEBUG] [Thread-21343] [transport.py] [_log()] userauth is OK
2026-04-15T15:30:51.864 [DEBUG] [Thread-21343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:30:51.865 [DEBUG] [Thread-21343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:30:51.865 [DEBUG] [Thread-21343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:30:51.865 [DEBUG] [Thread-21343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:30:51.890 [INFO] [Thread-21343] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:30:51.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:30:51.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:30:52.684 [DEBUG] [Thread-21343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:30:52.685 [DEBUG] [Thread-21343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:30:52.732 [DEBUG] [Thread-21343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:30:52.732 [DEBUG] [Thread-21343] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:30:52.745 [DEBUG] [Thread-21343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:30:52.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:30:52.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')
2026-04-15T15:30:52.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') -> 00000000
2026-04-15T15:30:52.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:30:52.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:30:52.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:30:52.785 [DEBUG] [Thread-21343] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:31:04.397 [DEBUG] [Thread-21345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:31:12.267 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:31:12.267 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:31:19.443 [DEBUG] [Thread-21346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:31:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:31:22.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:31:22.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
2026-04-15T15:31:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 30, 53), 9.65943, 52.6191, 0.0, 18.3492, 15.9395, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:31:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:30:53
2026-04-15T15:31:24.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:31:24.927 [DEBUG] [Thread-21347] [transport.py] [_log()] starting thread (client mode): 0xee9aeaa0
2026-04-15T15:31:24.927 [DEBUG] [Thread-21347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:31:24.950 [DEBUG] [Thread-21347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:31:24.950 [INFO] [Thread-21347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:31:24.953 [DEBUG] [Thread-21347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:31:24.953 [DEBUG] [Thread-21347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:31:24.953 [DEBUG] [Thread-21347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:31:24.953 [DEBUG] [Thread-21347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:31:24.953 [DEBUG] [Thread-21347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:31:24.953 [DEBUG] [Thread-21347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:31:24.953 [DEBUG] [Thread-21347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:31:24.953 [DEBUG] [Thread-21347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:31:24.953 [DEBUG] [Thread-21347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:31:24.954 [DEBUG] [Thread-21347] [transport.py] [_log()] client lang: <none>
2026-04-15T15:31:24.954 [DEBUG] [Thread-21347] [transport.py] [_log()] server lang: <none>
2026-04-15T15:31:24.954 [DEBUG] [Thread-21347] [transport.py] [_log()] kex follows: False
2026-04-15T15:31:24.954 [DEBUG] [Thread-21347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:31:24.954 [DEBUG] [Thread-21347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:31:24.954 [DEBUG] [Thread-21347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:31:24.954 [DEBUG] [Thread-21347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:31:24.954 [DEBUG] [Thread-21347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:31:24.954 [DEBUG] [Thread-21347] [transport.py] [_log()] Compression: none
2026-04-15T15:31:24.954 [DEBUG] [Thread-21347] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:31:24.971 [DEBUG] [Thread-21347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:31:24.972 [DEBUG] [Thread-21347] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:31:24.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:31:24.972 [DEBUG] [Thread-21347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:31:24.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:31:24.973 [DEBUG] [Thread-21347] [transport.py] [_log()] userauth is OK
2026-04-15T15:31:24.973 [DEBUG] [Thread-21347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:31:24.974 [DEBUG] [Thread-21347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:31:24.974 [DEBUG] [Thread-21347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:31:24.974 [DEBUG] [Thread-21347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:31:24.998 [INFO] [Thread-21347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:31:24.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:31:25.829 [DEBUG] [Thread-21347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:31:25.829 [DEBUG] [Thread-21347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:31:25.830 [DEBUG] [Thread-21347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:31:25.870 [DEBUG] [Thread-21347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:31:25.870 [DEBUG] [Thread-21347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:31:25.873 [DEBUG] [Thread-21347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:31:25.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:31:25.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:31:25.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:31:25.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:31:25.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:31:25.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:31:25.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:31:25.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:31:25.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:31:25.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.562983 -999.00  +14.50  18.59     61   +7.20 1 1 1 1 1   887    0 8.20 8.60 ----- 14.9 18.6 326.6 31.0 21.0 -28.4 20.2 -26.4 21.2 -24.8 22.2 -26.5
2026-04-15T15:31:25.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:31:25.900 [DEBUG] [Thread-21347] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:31:25.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:31:25.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.562983
2026-04-15T15:31:25.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:31:25.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:31:25.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:31:25.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:31:25.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:31:25.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:30:53', tmtdew=9.65943, humidity=52.6191, cloud=0.0, wind=18.3492, temperature=15.9395, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:30:41.731', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:31:26.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:31:26.162 [DEBUG] [Thread-21350] [transport.py] [_log()] starting thread (client mode): 0xee9ae320
2026-04-15T15:31:26.162 [DEBUG] [Thread-21350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:31:26.179 [DEBUG] [Thread-21350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:31:26.179 [INFO] [Thread-21350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:31:26.191 [DEBUG] [Thread-21350] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:31:26.191 [DEBUG] [Thread-21350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:31:26.191 [DEBUG] [Thread-21350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:31:26.191 [DEBUG] [Thread-21350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:31:26.191 [DEBUG] [Thread-21350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:31:26.191 [DEBUG] [Thread-21350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:31:26.191 [DEBUG] [Thread-21350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:31:26.191 [DEBUG] [Thread-21350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:31:26.192 [DEBUG] [Thread-21350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:31:26.192 [DEBUG] [Thread-21350] [transport.py] [_log()] client lang: <none>
2026-04-15T15:31:26.192 [DEBUG] [Thread-21350] [transport.py] [_log()] server lang: <none>
2026-04-15T15:31:26.192 [DEBUG] [Thread-21350] [transport.py] [_log()] kex follows: False
2026-04-15T15:31:26.192 [DEBUG] [Thread-21350] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:31:26.192 [DEBUG] [Thread-21350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:31:26.192 [DEBUG] [Thread-21350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:31:26.192 [DEBUG] [Thread-21350] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:31:26.192 [DEBUG] [Thread-21350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:31:26.192 [DEBUG] [Thread-21350] [transport.py] [_log()] Compression: none
2026-04-15T15:31:26.192 [DEBUG] [Thread-21350] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:31:26.248 [DEBUG] [Thread-21350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:31:26.248 [DEBUG] [Thread-21350] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:31:26.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:31:26.248 [DEBUG] [Thread-21350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:31:26.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:31:26.306 [DEBUG] [Thread-21350] [transport.py] [_log()] userauth is OK
2026-04-15T15:31:26.306 [DEBUG] [Thread-21350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:31:26.307 [DEBUG] [Thread-21350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:31:26.307 [DEBUG] [Thread-21350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:31:26.307 [DEBUG] [Thread-21350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:31:26.325 [INFO] [Thread-21350] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:31:26.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:31:26.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:31:27.175 [DEBUG] [Thread-21350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:31:27.176 [DEBUG] [Thread-21350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:31:27.223 [DEBUG] [Thread-21350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:31:27.223 [DEBUG] [Thread-21350] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:31:27.232 [DEBUG] [Thread-21350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:31:27.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:31:27.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')
2026-04-15T15:31:27.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
2026-04-15T15:31:27.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:31:27.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:31:27.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:31:27.266 [DEBUG] [Thread-21350] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:31:32.825 [DEBUG] [Thread-21352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:31:34.473 [DEBUG] [Thread-21353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:31:49.511 [DEBUG] [Thread-21354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:31:57.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:31:57.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:31:57.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:31:58.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 31, 29), 9.74858, 52.2297, 0.0, 11.0819, 15.5192, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:31:58.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:31:29
2026-04-15T15:31:58.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:31:59.412 [DEBUG] [Thread-21355] [transport.py] [_log()] starting thread (client mode): 0xee926a10
2026-04-15T15:31:59.413 [DEBUG] [Thread-21355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:31:59.433 [DEBUG] [Thread-21355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:31:59.433 [INFO] [Thread-21355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:31:59.434 [DEBUG] [Thread-21355] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:31:59.435 [DEBUG] [Thread-21355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:31:59.435 [DEBUG] [Thread-21355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:31:59.435 [DEBUG] [Thread-21355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:31:59.435 [DEBUG] [Thread-21355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:31:59.435 [DEBUG] [Thread-21355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:31:59.435 [DEBUG] [Thread-21355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:31:59.435 [DEBUG] [Thread-21355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:31:59.435 [DEBUG] [Thread-21355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:31:59.435 [DEBUG] [Thread-21355] [transport.py] [_log()] client lang: <none>
2026-04-15T15:31:59.435 [DEBUG] [Thread-21355] [transport.py] [_log()] server lang: <none>
2026-04-15T15:31:59.435 [DEBUG] [Thread-21355] [transport.py] [_log()] kex follows: False
2026-04-15T15:31:59.436 [DEBUG] [Thread-21355] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:31:59.436 [DEBUG] [Thread-21355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:31:59.436 [DEBUG] [Thread-21355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:31:59.436 [DEBUG] [Thread-21355] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:31:59.436 [DEBUG] [Thread-21355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:31:59.436 [DEBUG] [Thread-21355] [transport.py] [_log()] Compression: none
2026-04-15T15:31:59.436 [DEBUG] [Thread-21355] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:31:59.453 [DEBUG] [Thread-21355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:31:59.454 [DEBUG] [Thread-21355] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:31:59.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:31:59.454 [DEBUG] [Thread-21355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:31:59.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:31:59.455 [DEBUG] [Thread-21355] [transport.py] [_log()] userauth is OK
2026-04-15T15:31:59.455 [DEBUG] [Thread-21355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:31:59.455 [DEBUG] [Thread-21355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:31:59.455 [DEBUG] [Thread-21355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:31:59.456 [DEBUG] [Thread-21355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:31:59.491 [INFO] [Thread-21355] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:31:59.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:32:00.295 [DEBUG] [Thread-21355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:32:00.295 [DEBUG] [Thread-21355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:32:00.296 [DEBUG] [Thread-21355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:32:00.336 [DEBUG] [Thread-21355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:32:00.336 [DEBUG] [Thread-21355] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:32:00.339 [DEBUG] [Thread-21355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:32:00.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:32:00.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:32:00.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:32:00.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:32:00.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:32:00.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:32:00.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:32:00.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:32:00.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:32:00.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.563331 -999.00  +14.70  15.00     60   +7.20 1 1 1 1 1   887    0 7.92 3.57 ----- 16.2 15.0 298.3 20.8 21.0 -28.4 20.1 -27.2 21.1 -26.1 22.2 -26.5
2026-04-15T15:32:00.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:32:00.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:32:00.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.563331
2026-04-15T15:32:00.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:32:00.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:32:00.364 [DEBUG] [Thread-21355] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:32:00.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:32:00.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:32:00.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:32:00.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:31:29', tmtdew=9.74858, humidity=52.2297, cloud=0.0, wind=11.0819, temperature=15.5192, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:31:11.798', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:32:00.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:32:00.629 [DEBUG] [Thread-21358] [transport.py] [_log()] starting thread (client mode): 0xee9bdb70
2026-04-15T15:32:00.629 [DEBUG] [Thread-21358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:32:00.644 [DEBUG] [Thread-21358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:32:00.644 [INFO] [Thread-21358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:32:00.651 [DEBUG] [Thread-21358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:32:00.651 [DEBUG] [Thread-21358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:32:00.652 [DEBUG] [Thread-21358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:32:00.652 [DEBUG] [Thread-21358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:32:00.652 [DEBUG] [Thread-21358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:32:00.652 [DEBUG] [Thread-21358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:32:00.652 [DEBUG] [Thread-21358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:32:00.652 [DEBUG] [Thread-21358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:32:00.652 [DEBUG] [Thread-21358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:32:00.652 [DEBUG] [Thread-21358] [transport.py] [_log()] client lang: <none>
2026-04-15T15:32:00.652 [DEBUG] [Thread-21358] [transport.py] [_log()] server lang: <none>
2026-04-15T15:32:00.652 [DEBUG] [Thread-21358] [transport.py] [_log()] kex follows: False
2026-04-15T15:32:00.652 [DEBUG] [Thread-21358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:32:00.652 [DEBUG] [Thread-21358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:32:00.653 [DEBUG] [Thread-21358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:32:00.653 [DEBUG] [Thread-21358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:32:00.653 [DEBUG] [Thread-21358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:32:00.653 [DEBUG] [Thread-21358] [transport.py] [_log()] Compression: none
2026-04-15T15:32:00.653 [DEBUG] [Thread-21358] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:32:00.707 [DEBUG] [Thread-21358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:32:00.708 [DEBUG] [Thread-21358] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:32:00.708 [DEBUG] [Thread-21358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:32:00.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:32:00.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:32:00.764 [DEBUG] [Thread-21358] [transport.py] [_log()] userauth is OK
2026-04-15T15:32:00.764 [DEBUG] [Thread-21358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:32:00.765 [DEBUG] [Thread-21358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:32:00.765 [DEBUG] [Thread-21358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:32:00.765 [DEBUG] [Thread-21358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:32:00.790 [INFO] [Thread-21358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:32:00.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:32:00.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:32:01.628 [DEBUG] [Thread-21358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:32:01.628 [DEBUG] [Thread-21358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:32:01.676 [DEBUG] [Thread-21358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:32:01.676 [DEBUG] [Thread-21358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:32:01.685 [DEBUG] [Thread-21358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:32:01.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:32:01.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')
2026-04-15T15:32:01.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
2026-04-15T15:32:01.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:32:01.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:32:01.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:32:01.722 [DEBUG] [Thread-21358] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:32:04.541 [DEBUG] [Thread-21360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:32:12.408 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:32:12.409 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:32:19.584 [DEBUG] [Thread-21361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:32:31.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:32:31.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:32:31.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
2026-04-15T15:32:32.899 [DEBUG] [Thread-21362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:32:33.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 32, 4), 9.7979, 52.0638, 0.0, 13.1281, 15.5521, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:32:33.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:32:04
2026-04-15T15:32:33.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:32:33.892 [DEBUG] [Thread-21363] [transport.py] [_log()] starting thread (client mode): 0xee925a50
2026-04-15T15:32:33.893 [DEBUG] [Thread-21363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:32:33.913 [DEBUG] [Thread-21363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:32:33.913 [INFO] [Thread-21363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:32:33.916 [DEBUG] [Thread-21363] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:32:33.916 [DEBUG] [Thread-21363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:32:33.917 [DEBUG] [Thread-21363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:32:33.917 [DEBUG] [Thread-21363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:32:33.917 [DEBUG] [Thread-21363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:32:33.917 [DEBUG] [Thread-21363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:32:33.917 [DEBUG] [Thread-21363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:32:33.917 [DEBUG] [Thread-21363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:32:33.917 [DEBUG] [Thread-21363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:32:33.917 [DEBUG] [Thread-21363] [transport.py] [_log()] client lang: <none>
2026-04-15T15:32:33.917 [DEBUG] [Thread-21363] [transport.py] [_log()] server lang: <none>
2026-04-15T15:32:33.917 [DEBUG] [Thread-21363] [transport.py] [_log()] kex follows: False
2026-04-15T15:32:33.917 [DEBUG] [Thread-21363] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:32:33.918 [DEBUG] [Thread-21363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:32:33.918 [DEBUG] [Thread-21363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:32:33.918 [DEBUG] [Thread-21363] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:32:33.918 [DEBUG] [Thread-21363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:32:33.918 [DEBUG] [Thread-21363] [transport.py] [_log()] Compression: none
2026-04-15T15:32:33.918 [DEBUG] [Thread-21363] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:32:33.928 [DEBUG] [Thread-21363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:32:33.929 [DEBUG] [Thread-21363] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:32:33.929 [DEBUG] [Thread-21363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:32:33.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:32:33.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:32:33.930 [DEBUG] [Thread-21363] [transport.py] [_log()] userauth is OK
2026-04-15T15:32:33.930 [DEBUG] [Thread-21363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:32:33.931 [DEBUG] [Thread-21363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:32:33.931 [DEBUG] [Thread-21363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:32:33.931 [DEBUG] [Thread-21363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:32:33.947 [INFO] [Thread-21363] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:32:33.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:32:34.614 [DEBUG] [Thread-21365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:32:34.723 [DEBUG] [Thread-21363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:32:34.723 [DEBUG] [Thread-21363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:32:34.724 [DEBUG] [Thread-21363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:32:34.765 [DEBUG] [Thread-21363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:32:34.765 [DEBUG] [Thread-21363] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:32:34.767 [DEBUG] [Thread-21363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:32:34.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:32:34.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:32:34.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:32:34.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:32:34.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:32:34.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:32:34.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:32:34.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:32:34.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:32:34.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.564025 -999.00  +14.50   6.21     60   +6.80 1 1 1 1 1   887    0 7.76 -3.39 ----- 9.4 6.2 33.0 13.2 21.0 -27.7 20.1 -26.9 21.1 -23.5 22.1 -26.6
2026-04-15T15:32:34.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:32:34.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:32:34.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.564025
2026-04-15T15:32:34.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:32:34.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:32:34.790 [DEBUG] [Thread-21363] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:32:34.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:32:34.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:32:34.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:32:34.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:32:04', tmtdew=9.7979, humidity=52.0638, cloud=0.0, wind=13.1281, temperature=15.5521, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:32:11.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:32:35.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:32:35.053 [DEBUG] [Thread-21367] [transport.py] [_log()] starting thread (client mode): 0xee9af760
2026-04-15T15:32:35.053 [DEBUG] [Thread-21367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:32:35.077 [DEBUG] [Thread-21367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:32:35.077 [INFO] [Thread-21367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:32:35.085 [DEBUG] [Thread-21367] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:32:35.085 [DEBUG] [Thread-21367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:32:35.085 [DEBUG] [Thread-21367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:32:35.085 [DEBUG] [Thread-21367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:32:35.085 [DEBUG] [Thread-21367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:32:35.085 [DEBUG] [Thread-21367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:32:35.085 [DEBUG] [Thread-21367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:32:35.085 [DEBUG] [Thread-21367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:32:35.085 [DEBUG] [Thread-21367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:32:35.086 [DEBUG] [Thread-21367] [transport.py] [_log()] client lang: <none>
2026-04-15T15:32:35.086 [DEBUG] [Thread-21367] [transport.py] [_log()] server lang: <none>
2026-04-15T15:32:35.086 [DEBUG] [Thread-21367] [transport.py] [_log()] kex follows: False
2026-04-15T15:32:35.086 [DEBUG] [Thread-21367] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:32:35.086 [DEBUG] [Thread-21367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:32:35.086 [DEBUG] [Thread-21367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:32:35.086 [DEBUG] [Thread-21367] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:32:35.086 [DEBUG] [Thread-21367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:32:35.086 [DEBUG] [Thread-21367] [transport.py] [_log()] Compression: none
2026-04-15T15:32:35.087 [DEBUG] [Thread-21367] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:32:35.148 [DEBUG] [Thread-21367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:32:35.149 [DEBUG] [Thread-21367] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:32:35.149 [DEBUG] [Thread-21367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:32:35.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:32:35.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:32:35.205 [DEBUG] [Thread-21367] [transport.py] [_log()] userauth is OK
2026-04-15T15:32:35.205 [DEBUG] [Thread-21367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:32:35.205 [DEBUG] [Thread-21367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:32:35.205 [DEBUG] [Thread-21367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:32:35.205 [DEBUG] [Thread-21367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:32:35.233 [INFO] [Thread-21367] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:32:35.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:32:35.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:32:36.061 [DEBUG] [Thread-21367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:32:36.062 [DEBUG] [Thread-21367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:32:36.108 [DEBUG] [Thread-21367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:32:36.109 [DEBUG] [Thread-21367] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:32:36.117 [DEBUG] [Thread-21367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:32:36.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:32:36.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')
2026-04-15T15:32:36.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
2026-04-15T15:32:36.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:32:36.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:32:36.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:32:36.151 [DEBUG] [Thread-21367] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:32:49.643 [DEBUG] [Thread-21369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:33:04.689 [DEBUG] [Thread-21370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:33:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:33:06.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:33:06.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
2026-04-15T15:33:07.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 32, 40), 10.0252, 51.3596, 0.0, 13.9745, 16.138, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:33:07.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:32:40
2026-04-15T15:33:07.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:33:08.247 [DEBUG] [Thread-21371] [transport.py] [_log()] starting thread (client mode): 0xee9ac9d0
2026-04-15T15:33:08.247 [DEBUG] [Thread-21371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:33:08.261 [DEBUG] [Thread-21371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:33:08.261 [INFO] [Thread-21371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:33:08.264 [DEBUG] [Thread-21371] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:33:08.265 [DEBUG] [Thread-21371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:33:08.265 [DEBUG] [Thread-21371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:33:08.265 [DEBUG] [Thread-21371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:33:08.265 [DEBUG] [Thread-21371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:33:08.265 [DEBUG] [Thread-21371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:33:08.265 [DEBUG] [Thread-21371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:33:08.265 [DEBUG] [Thread-21371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:33:08.265 [DEBUG] [Thread-21371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:33:08.265 [DEBUG] [Thread-21371] [transport.py] [_log()] client lang: <none>
2026-04-15T15:33:08.265 [DEBUG] [Thread-21371] [transport.py] [_log()] server lang: <none>
2026-04-15T15:33:08.265 [DEBUG] [Thread-21371] [transport.py] [_log()] kex follows: False
2026-04-15T15:33:08.265 [DEBUG] [Thread-21371] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:33:08.266 [DEBUG] [Thread-21371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:33:08.266 [DEBUG] [Thread-21371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:33:08.266 [DEBUG] [Thread-21371] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:33:08.266 [DEBUG] [Thread-21371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:33:08.266 [DEBUG] [Thread-21371] [transport.py] [_log()] Compression: none
2026-04-15T15:33:08.266 [DEBUG] [Thread-21371] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:33:08.281 [DEBUG] [Thread-21371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:33:08.282 [DEBUG] [Thread-21371] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:33:08.282 [DEBUG] [Thread-21371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:33:08.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:33:08.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:33:08.283 [DEBUG] [Thread-21371] [transport.py] [_log()] userauth is OK
2026-04-15T15:33:08.283 [DEBUG] [Thread-21371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:33:08.283 [DEBUG] [Thread-21371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:33:08.283 [DEBUG] [Thread-21371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:33:08.283 [DEBUG] [Thread-21371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:33:08.299 [INFO] [Thread-21371] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:33:08.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:33:09.094 [DEBUG] [Thread-21371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:33:09.095 [DEBUG] [Thread-21371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:33:09.095 [DEBUG] [Thread-21371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:33:09.135 [DEBUG] [Thread-21371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:33:09.135 [DEBUG] [Thread-21371] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:33:09.138 [DEBUG] [Thread-21371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:33:09.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:33:09.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:33:09.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:33:09.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:33:09.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:33:09.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:33:09.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:33:09.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:33:09.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:33:09.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.564372 -999.00  +14.70   9.76     61   +7.30 1 1 1 1 1   887    0 7.60 -8.17 ----- 10.9 9.8 311.2 11.3 21.1 -27.7 20.2 -26.5 21.3 -23.9 22.3 -25.4
2026-04-15T15:33:09.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:33:09.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:33:09.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.564372
2026-04-15T15:33:09.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:33:09.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:33:09.161 [DEBUG] [Thread-21371] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:33:09.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:33:09.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:33:09.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:33:09.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:32:40', tmtdew=10.0252, humidity=51.3596, cloud=0.0, wind=13.9745, temperature=16.138, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:32:41.741', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:33:09.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:33:09.417 [DEBUG] [Thread-21374] [transport.py] [_log()] starting thread (client mode): 0xee9ac7c0
2026-04-15T15:33:09.418 [DEBUG] [Thread-21374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:33:09.431 [DEBUG] [Thread-21374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:33:09.431 [INFO] [Thread-21374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:33:09.439 [DEBUG] [Thread-21374] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:33:09.439 [DEBUG] [Thread-21374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:33:09.439 [DEBUG] [Thread-21374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:33:09.439 [DEBUG] [Thread-21374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:33:09.439 [DEBUG] [Thread-21374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:33:09.439 [DEBUG] [Thread-21374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:33:09.439 [DEBUG] [Thread-21374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:33:09.439 [DEBUG] [Thread-21374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:33:09.439 [DEBUG] [Thread-21374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:33:09.439 [DEBUG] [Thread-21374] [transport.py] [_log()] client lang: <none>
2026-04-15T15:33:09.440 [DEBUG] [Thread-21374] [transport.py] [_log()] server lang: <none>
2026-04-15T15:33:09.440 [DEBUG] [Thread-21374] [transport.py] [_log()] kex follows: False
2026-04-15T15:33:09.440 [DEBUG] [Thread-21374] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:33:09.440 [DEBUG] [Thread-21374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:33:09.440 [DEBUG] [Thread-21374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:33:09.440 [DEBUG] [Thread-21374] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:33:09.440 [DEBUG] [Thread-21374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:33:09.440 [DEBUG] [Thread-21374] [transport.py] [_log()] Compression: none
2026-04-15T15:33:09.440 [DEBUG] [Thread-21374] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:33:09.495 [DEBUG] [Thread-21374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:33:09.496 [DEBUG] [Thread-21374] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:33:09.496 [DEBUG] [Thread-21374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:33:09.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:33:09.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:33:09.553 [DEBUG] [Thread-21374] [transport.py] [_log()] userauth is OK
2026-04-15T15:33:09.553 [DEBUG] [Thread-21374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:33:09.553 [DEBUG] [Thread-21374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:33:09.553 [DEBUG] [Thread-21374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:33:09.553 [DEBUG] [Thread-21374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:33:09.579 [INFO] [Thread-21374] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:33:09.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:33:09.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:33:10.390 [DEBUG] [Thread-21374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:33:10.391 [DEBUG] [Thread-21374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:33:10.438 [DEBUG] [Thread-21374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:33:10.438 [DEBUG] [Thread-21374] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:33:10.446 [DEBUG] [Thread-21374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:33:10.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:33:10.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')
2026-04-15T15:33:10.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
2026-04-15T15:33:10.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:33:10.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:33:10.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:33:10.478 [DEBUG] [Thread-21374] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:33:12.550 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:33:12.551 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:33:19.719 [DEBUG] [Thread-21376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:33:32.989 [DEBUG] [Thread-21377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:33:34.762 [DEBUG] [Thread-21378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:33:40.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:33:40.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:33:40.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
2026-04-15T15:33:41.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 33, 15), 9.49522, 53.246, 0.0, 11.2223, 15.2854, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:33:41.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:33:15
2026-04-15T15:33:42.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:33:42.784 [DEBUG] [Thread-21379] [transport.py] [_log()] starting thread (client mode): 0xee9be050
2026-04-15T15:33:42.785 [DEBUG] [Thread-21379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:33:42.803 [DEBUG] [Thread-21379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:33:42.804 [INFO] [Thread-21379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:33:42.806 [DEBUG] [Thread-21379] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:33:42.806 [DEBUG] [Thread-21379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:33:42.806 [DEBUG] [Thread-21379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:33:42.806 [DEBUG] [Thread-21379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:33:42.807 [DEBUG] [Thread-21379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:33:42.807 [DEBUG] [Thread-21379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:33:42.807 [DEBUG] [Thread-21379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:33:42.807 [DEBUG] [Thread-21379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:33:42.807 [DEBUG] [Thread-21379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:33:42.807 [DEBUG] [Thread-21379] [transport.py] [_log()] client lang: <none>
2026-04-15T15:33:42.807 [DEBUG] [Thread-21379] [transport.py] [_log()] server lang: <none>
2026-04-15T15:33:42.807 [DEBUG] [Thread-21379] [transport.py] [_log()] kex follows: False
2026-04-15T15:33:42.807 [DEBUG] [Thread-21379] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:33:42.807 [DEBUG] [Thread-21379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:33:42.807 [DEBUG] [Thread-21379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:33:42.808 [DEBUG] [Thread-21379] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:33:42.808 [DEBUG] [Thread-21379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:33:42.808 [DEBUG] [Thread-21379] [transport.py] [_log()] Compression: none
2026-04-15T15:33:42.808 [DEBUG] [Thread-21379] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:33:42.824 [DEBUG] [Thread-21379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:33:42.824 [DEBUG] [Thread-21379] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:33:42.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:33:42.825 [DEBUG] [Thread-21379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:33:42.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:33:42.826 [DEBUG] [Thread-21379] [transport.py] [_log()] userauth is OK
2026-04-15T15:33:42.826 [DEBUG] [Thread-21379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:33:42.826 [DEBUG] [Thread-21379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:33:42.826 [DEBUG] [Thread-21379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:33:42.826 [DEBUG] [Thread-21379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:33:42.850 [INFO] [Thread-21379] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:33:42.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:33:43.638 [DEBUG] [Thread-21379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:33:43.638 [DEBUG] [Thread-21379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:33:43.639 [DEBUG] [Thread-21379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:33:43.679 [DEBUG] [Thread-21379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:33:43.679 [DEBUG] [Thread-21379] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:33:43.682 [DEBUG] [Thread-21379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:33:43.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:33:43.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:33:43.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:33:43.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:33:43.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:33:43.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:33:43.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:33:43.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:33:43.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:33:43.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.564720 -999.00  +14.40  13.78     60   +6.70 1 1 1 1 1   887    0 7.57 -11.33 ----- 14.0 13.8 310.2 17.5 21.1 -28.4 20.2 -26.8 21.2 -23.3 22.3 -25.7
2026-04-15T15:33:43.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:33:43.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:33:43.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.564720
2026-04-15T15:33:43.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:33:43.707 [DEBUG] [Thread-21379] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:33:43.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:33:43.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:33:43.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:33:43.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:33:43.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:33:15', tmtdew=9.49522, humidity=53.246, cloud=0.0, wind=11.2223, temperature=15.2854, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:33:11.808', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:33:43.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:33:43.963 [DEBUG] [Thread-21382] [transport.py] [_log()] starting thread (client mode): 0xee9bd330
2026-04-15T15:33:43.963 [DEBUG] [Thread-21382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:33:43.978 [DEBUG] [Thread-21382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:33:43.978 [INFO] [Thread-21382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:33:43.985 [DEBUG] [Thread-21382] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:33:43.985 [DEBUG] [Thread-21382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:33:43.985 [DEBUG] [Thread-21382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:33:43.985 [DEBUG] [Thread-21382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:33:43.986 [DEBUG] [Thread-21382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:33:43.986 [DEBUG] [Thread-21382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:33:43.986 [DEBUG] [Thread-21382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:33:43.986 [DEBUG] [Thread-21382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:33:43.986 [DEBUG] [Thread-21382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:33:43.986 [DEBUG] [Thread-21382] [transport.py] [_log()] client lang: <none>
2026-04-15T15:33:43.986 [DEBUG] [Thread-21382] [transport.py] [_log()] server lang: <none>
2026-04-15T15:33:43.986 [DEBUG] [Thread-21382] [transport.py] [_log()] kex follows: False
2026-04-15T15:33:43.986 [DEBUG] [Thread-21382] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:33:43.986 [DEBUG] [Thread-21382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:33:43.986 [DEBUG] [Thread-21382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:33:43.987 [DEBUG] [Thread-21382] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:33:43.987 [DEBUG] [Thread-21382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:33:43.987 [DEBUG] [Thread-21382] [transport.py] [_log()] Compression: none
2026-04-15T15:33:43.987 [DEBUG] [Thread-21382] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:33:44.044 [DEBUG] [Thread-21382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:33:44.044 [DEBUG] [Thread-21382] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:33:44.045 [DEBUG] [Thread-21382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:33:44.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:33:44.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:33:44.100 [DEBUG] [Thread-21382] [transport.py] [_log()] userauth is OK
2026-04-15T15:33:44.100 [DEBUG] [Thread-21382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:33:44.101 [DEBUG] [Thread-21382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:33:44.101 [DEBUG] [Thread-21382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:33:44.101 [DEBUG] [Thread-21382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:33:44.126 [INFO] [Thread-21382] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:33:44.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:33:44.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:33:45.005 [DEBUG] [Thread-21382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:33:45.005 [DEBUG] [Thread-21382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:33:45.054 [DEBUG] [Thread-21382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:33:45.055 [DEBUG] [Thread-21382] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:33:45.067 [DEBUG] [Thread-21382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:33:45.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:33:45.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')
2026-04-15T15:33:45.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
2026-04-15T15:33:45.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:33:45.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:33:45.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:33:45.101 [DEBUG] [Thread-21382] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:33:49.791 [DEBUG] [Thread-21384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:34:04.838 [DEBUG] [Thread-21385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:34:12.690 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:34:12.691 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:34:15.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:34:15.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:34:15.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
2026-04-15T15:34:16.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 33, 51), 10.2157, 50.6967, 0.0, 14.8565, 16.1708, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:34:16.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:33:51
2026-04-15T15:34:16.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:34:17.276 [DEBUG] [Thread-21386] [transport.py] [_log()] starting thread (client mode): 0xee9263b0
2026-04-15T15:34:17.276 [DEBUG] [Thread-21386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:34:17.295 [DEBUG] [Thread-21386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:34:17.295 [INFO] [Thread-21386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:34:17.298 [DEBUG] [Thread-21386] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:34:17.298 [DEBUG] [Thread-21386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:34:17.298 [DEBUG] [Thread-21386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:34:17.298 [DEBUG] [Thread-21386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:34:17.298 [DEBUG] [Thread-21386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:34:17.299 [DEBUG] [Thread-21386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:34:17.299 [DEBUG] [Thread-21386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:34:17.299 [DEBUG] [Thread-21386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:34:17.299 [DEBUG] [Thread-21386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:34:17.299 [DEBUG] [Thread-21386] [transport.py] [_log()] client lang: <none>
2026-04-15T15:34:17.299 [DEBUG] [Thread-21386] [transport.py] [_log()] server lang: <none>
2026-04-15T15:34:17.299 [DEBUG] [Thread-21386] [transport.py] [_log()] kex follows: False
2026-04-15T15:34:17.299 [DEBUG] [Thread-21386] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:34:17.299 [DEBUG] [Thread-21386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:34:17.299 [DEBUG] [Thread-21386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:34:17.299 [DEBUG] [Thread-21386] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:34:17.300 [DEBUG] [Thread-21386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:34:17.300 [DEBUG] [Thread-21386] [transport.py] [_log()] Compression: none
2026-04-15T15:34:17.300 [DEBUG] [Thread-21386] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:34:17.316 [DEBUG] [Thread-21386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:34:17.317 [DEBUG] [Thread-21386] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:34:17.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:34:17.317 [DEBUG] [Thread-21386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:34:17.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:34:17.318 [DEBUG] [Thread-21386] [transport.py] [_log()] userauth is OK
2026-04-15T15:34:17.319 [DEBUG] [Thread-21386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:34:17.319 [DEBUG] [Thread-21386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:34:17.319 [DEBUG] [Thread-21386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:34:17.319 [DEBUG] [Thread-21386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:34:17.336 [INFO] [Thread-21386] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:34:17.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:34:18.137 [DEBUG] [Thread-21386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:34:18.137 [DEBUG] [Thread-21386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:34:18.138 [DEBUG] [Thread-21386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:34:18.178 [DEBUG] [Thread-21386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:34:18.178 [DEBUG] [Thread-21386] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:34:18.181 [DEBUG] [Thread-21386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:34:18.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:34:18.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:34:18.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:34:18.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:34:18.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:34:18.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:34:18.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:34:18.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:34:18.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:34:18.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.565067 -999.00  +14.20  13.20     61   +6.90 1 1 1 1 1   887    0 7.32 -16.85 ----- 13.0 13.2 307.8 16.0 21.2 -27.9 20.3 -26.9 21.2 -25.3 22.4 -25.6
2026-04-15T15:34:18.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:34:18.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:34:18.205 [DEBUG] [Thread-21386] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:34:18.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.565067
2026-04-15T15:34:18.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:34:18.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:34:18.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:34:18.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:34:18.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:34:18.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:33:51', tmtdew=10.2157, humidity=50.6967, cloud=0.0, wind=14.8565, temperature=16.1708, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:33:41.789', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:34:18.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:34:18.466 [DEBUG] [Thread-21389] [transport.py] [_log()] starting thread (client mode): 0xee9ac220
2026-04-15T15:34:18.466 [DEBUG] [Thread-21389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:34:18.480 [DEBUG] [Thread-21389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:34:18.480 [INFO] [Thread-21389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:34:18.487 [DEBUG] [Thread-21389] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:34:18.487 [DEBUG] [Thread-21389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:34:18.488 [DEBUG] [Thread-21389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:34:18.488 [DEBUG] [Thread-21389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:34:18.488 [DEBUG] [Thread-21389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:34:18.488 [DEBUG] [Thread-21389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:34:18.488 [DEBUG] [Thread-21389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:34:18.488 [DEBUG] [Thread-21389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:34:18.488 [DEBUG] [Thread-21389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:34:18.488 [DEBUG] [Thread-21389] [transport.py] [_log()] client lang: <none>
2026-04-15T15:34:18.488 [DEBUG] [Thread-21389] [transport.py] [_log()] server lang: <none>
2026-04-15T15:34:18.488 [DEBUG] [Thread-21389] [transport.py] [_log()] kex follows: False
2026-04-15T15:34:18.488 [DEBUG] [Thread-21389] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:34:18.488 [DEBUG] [Thread-21389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:34:18.489 [DEBUG] [Thread-21389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:34:18.489 [DEBUG] [Thread-21389] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:34:18.489 [DEBUG] [Thread-21389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:34:18.489 [DEBUG] [Thread-21389] [transport.py] [_log()] Compression: none
2026-04-15T15:34:18.489 [DEBUG] [Thread-21389] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:34:18.544 [DEBUG] [Thread-21389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:34:18.544 [DEBUG] [Thread-21389] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:34:18.544 [DEBUG] [Thread-21389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:34:18.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:34:18.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:34:18.600 [DEBUG] [Thread-21389] [transport.py] [_log()] userauth is OK
2026-04-15T15:34:18.601 [DEBUG] [Thread-21389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:34:18.601 [DEBUG] [Thread-21389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:34:18.601 [DEBUG] [Thread-21389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:34:18.601 [DEBUG] [Thread-21389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:34:18.626 [INFO] [Thread-21389] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:34:18.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:34:18.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:34:19.444 [DEBUG] [Thread-21389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:34:19.444 [DEBUG] [Thread-21389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:34:19.492 [DEBUG] [Thread-21389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:34:19.492 [DEBUG] [Thread-21389] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:34:19.500 [DEBUG] [Thread-21389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:34:19.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:34:19.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')
2026-04-15T15:34:19.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
2026-04-15T15:34:19.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:34:19.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:34:19.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:34:19.534 [DEBUG] [Thread-21389] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:34:19.869 [DEBUG] [Thread-21391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:34:33.080 [DEBUG] [Thread-21392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:34:34.913 [DEBUG] [Thread-21393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:34:49.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:34:49.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:34:49.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
2026-04-15T15:34:49.946 [DEBUG] [Thread-21394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:34:50.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 34, 26), 9.77921, 52.4311, 0.0, 11.0282, 15.269, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:34:50.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:34:26
2026-04-15T15:34:51.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:34:51.640 [DEBUG] [Thread-21395] [transport.py] [_log()] starting thread (client mode): 0xee91ca60
2026-04-15T15:34:51.640 [DEBUG] [Thread-21395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:34:51.659 [DEBUG] [Thread-21395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:34:51.660 [INFO] [Thread-21395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:34:51.663 [DEBUG] [Thread-21395] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:34:51.663 [DEBUG] [Thread-21395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:34:51.663 [DEBUG] [Thread-21395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:34:51.663 [DEBUG] [Thread-21395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:34:51.663 [DEBUG] [Thread-21395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:34:51.663 [DEBUG] [Thread-21395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:34:51.663 [DEBUG] [Thread-21395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:34:51.663 [DEBUG] [Thread-21395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:34:51.663 [DEBUG] [Thread-21395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:34:51.664 [DEBUG] [Thread-21395] [transport.py] [_log()] client lang: <none>
2026-04-15T15:34:51.664 [DEBUG] [Thread-21395] [transport.py] [_log()] server lang: <none>
2026-04-15T15:34:51.664 [DEBUG] [Thread-21395] [transport.py] [_log()] kex follows: False
2026-04-15T15:34:51.664 [DEBUG] [Thread-21395] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:34:51.664 [DEBUG] [Thread-21395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:34:51.664 [DEBUG] [Thread-21395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:34:51.664 [DEBUG] [Thread-21395] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:34:51.664 [DEBUG] [Thread-21395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:34:51.664 [DEBUG] [Thread-21395] [transport.py] [_log()] Compression: none
2026-04-15T15:34:51.664 [DEBUG] [Thread-21395] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:34:51.683 [DEBUG] [Thread-21395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:34:51.684 [DEBUG] [Thread-21395] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:34:51.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:34:51.684 [DEBUG] [Thread-21395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:34:51.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:34:51.685 [DEBUG] [Thread-21395] [transport.py] [_log()] userauth is OK
2026-04-15T15:34:51.686 [DEBUG] [Thread-21395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:34:51.686 [DEBUG] [Thread-21395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:34:51.686 [DEBUG] [Thread-21395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:34:51.686 [DEBUG] [Thread-21395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:34:51.711 [INFO] [Thread-21395] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:34:51.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:34:52.491 [DEBUG] [Thread-21395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:34:52.491 [DEBUG] [Thread-21395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:34:52.492 [DEBUG] [Thread-21395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:34:52.532 [DEBUG] [Thread-21395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:34:52.532 [DEBUG] [Thread-21395] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:34:52.535 [DEBUG] [Thread-21395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:34:52.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:34:52.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:34:52.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:34:52.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:34:52.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:34:52.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:34:52.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:34:52.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:34:52.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:34:52.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.565414 -999.00  +14.40  17.71     61   +7.10 1 1 1 1 1   887    0 7.15 -22.08 ----- 19.9 17.7 305.0 21.3 21.2 -28.4 20.3 -27.4 21.3 -23.8 22.4 -25.8
2026-04-15T15:34:52.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:34:52.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:34:52.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.565414
2026-04-15T15:34:52.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:34:52.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:34:52.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:34:52.561 [DEBUG] [Thread-21395] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:34:52.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:34:52.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:34:52.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:34:26', tmtdew=9.77921, humidity=52.4311, cloud=0.0, wind=11.0282, temperature=15.269, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:34:11.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:34:52.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:34:52.821 [DEBUG] [Thread-21398] [transport.py] [_log()] starting thread (client mode): 0xee91e4a0
2026-04-15T15:34:52.821 [DEBUG] [Thread-21398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:34:52.836 [DEBUG] [Thread-21398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:34:52.836 [INFO] [Thread-21398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:34:52.845 [DEBUG] [Thread-21398] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:34:52.845 [DEBUG] [Thread-21398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:34:52.845 [DEBUG] [Thread-21398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:34:52.846 [DEBUG] [Thread-21398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:34:52.846 [DEBUG] [Thread-21398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:34:52.846 [DEBUG] [Thread-21398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:34:52.846 [DEBUG] [Thread-21398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:34:52.846 [DEBUG] [Thread-21398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:34:52.846 [DEBUG] [Thread-21398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:34:52.846 [DEBUG] [Thread-21398] [transport.py] [_log()] client lang: <none>
2026-04-15T15:34:52.846 [DEBUG] [Thread-21398] [transport.py] [_log()] server lang: <none>
2026-04-15T15:34:52.846 [DEBUG] [Thread-21398] [transport.py] [_log()] kex follows: False
2026-04-15T15:34:52.846 [DEBUG] [Thread-21398] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:34:52.846 [DEBUG] [Thread-21398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:34:52.846 [DEBUG] [Thread-21398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:34:52.846 [DEBUG] [Thread-21398] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:34:52.847 [DEBUG] [Thread-21398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:34:52.847 [DEBUG] [Thread-21398] [transport.py] [_log()] Compression: none
2026-04-15T15:34:52.847 [DEBUG] [Thread-21398] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:34:52.903 [DEBUG] [Thread-21398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:34:52.904 [DEBUG] [Thread-21398] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:34:52.904 [DEBUG] [Thread-21398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:34:52.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:34:52.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:34:52.961 [DEBUG] [Thread-21398] [transport.py] [_log()] userauth is OK
2026-04-15T15:34:52.962 [DEBUG] [Thread-21398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:34:52.962 [DEBUG] [Thread-21398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:34:52.962 [DEBUG] [Thread-21398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:34:52.962 [DEBUG] [Thread-21398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:34:52.992 [INFO] [Thread-21398] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:34:52.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:34:52.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:34:53.902 [DEBUG] [Thread-21398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:34:53.902 [DEBUG] [Thread-21398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:34:53.951 [DEBUG] [Thread-21398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:34:53.952 [DEBUG] [Thread-21398] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:34:53.964 [DEBUG] [Thread-21398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:34:53.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:34:53.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')
2026-04-15T15:34:53.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
2026-04-15T15:34:53.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:34:54.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:34:54.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:34:54.011 [DEBUG] [Thread-21398] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:35:04.977 [DEBUG] [Thread-21400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:35:12.832 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:35:12.833 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:35:20.019 [DEBUG] [Thread-21401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:35:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:35:24.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:35:24.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
2026-04-15T15:35:25.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 35, 2), 9.80623, 52.3317, 0.0, 15.2089, 15.2524, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:35:25.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:35:02
2026-04-15T15:35:25.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:35:26.127 [DEBUG] [Thread-21402] [transport.py] [_log()] starting thread (client mode): 0xee925090
2026-04-15T15:35:26.127 [DEBUG] [Thread-21402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:35:26.148 [DEBUG] [Thread-21402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:35:26.148 [INFO] [Thread-21402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:35:26.152 [DEBUG] [Thread-21402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:35:26.152 [DEBUG] [Thread-21402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:35:26.152 [DEBUG] [Thread-21402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:35:26.152 [DEBUG] [Thread-21402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:35:26.152 [DEBUG] [Thread-21402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:35:26.152 [DEBUG] [Thread-21402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:35:26.152 [DEBUG] [Thread-21402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:35:26.152 [DEBUG] [Thread-21402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:35:26.152 [DEBUG] [Thread-21402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:35:26.152 [DEBUG] [Thread-21402] [transport.py] [_log()] client lang: <none>
2026-04-15T15:35:26.152 [DEBUG] [Thread-21402] [transport.py] [_log()] server lang: <none>
2026-04-15T15:35:26.153 [DEBUG] [Thread-21402] [transport.py] [_log()] kex follows: False
2026-04-15T15:35:26.153 [DEBUG] [Thread-21402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:35:26.153 [DEBUG] [Thread-21402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:35:26.153 [DEBUG] [Thread-21402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:35:26.153 [DEBUG] [Thread-21402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:35:26.153 [DEBUG] [Thread-21402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:35:26.153 [DEBUG] [Thread-21402] [transport.py] [_log()] Compression: none
2026-04-15T15:35:26.153 [DEBUG] [Thread-21402] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:35:26.171 [DEBUG] [Thread-21402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:35:26.172 [DEBUG] [Thread-21402] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:35:26.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:35:26.172 [DEBUG] [Thread-21402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:35:26.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:35:26.173 [DEBUG] [Thread-21402] [transport.py] [_log()] userauth is OK
2026-04-15T15:35:26.173 [DEBUG] [Thread-21402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:35:26.173 [DEBUG] [Thread-21402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:35:26.174 [DEBUG] [Thread-21402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:35:26.174 [DEBUG] [Thread-21402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:35:26.199 [INFO] [Thread-21402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:35:26.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:35:28.551 [DEBUG] [Thread-21402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:35:28.552 [DEBUG] [Thread-21402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:35:28.552 [DEBUG] [Thread-21402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:35:28.593 [DEBUG] [Thread-21402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:35:28.593 [DEBUG] [Thread-21402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:35:28.596 [DEBUG] [Thread-21402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:35:28.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:35:28.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:35:28.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:35:28.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:35:28.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:35:28.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:35:28.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:35:28.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:35:28.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:35:28.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.565761 -999.00  +14.50  25.45     60   +7.00 1 1 1 1 1   887    0 7.13 -26.18 ----- 14.7 25.4 328.2 27.4 21.1 -28.4 20.2 -27.2 21.2 -26.8 22.4 -26.5
2026-04-15T15:35:28.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:35:28.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:35:28.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.565761
2026-04-15T15:35:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:35:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:35:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:35:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:35:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:35:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:35:02', tmtdew=9.80623, humidity=52.3317, cloud=0.0, wind=15.2089, temperature=15.2524, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:34:41.750', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:35:28.664 [DEBUG] [Thread-21402] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:35:28.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:35:28.925 [DEBUG] [Thread-21405] [transport.py] [_log()] starting thread (client mode): 0xee9be530
2026-04-15T15:35:28.925 [DEBUG] [Thread-21405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:35:28.939 [DEBUG] [Thread-21405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:35:28.939 [INFO] [Thread-21405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:35:28.946 [DEBUG] [Thread-21405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:35:28.947 [DEBUG] [Thread-21405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:35:28.947 [DEBUG] [Thread-21405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:35:28.947 [DEBUG] [Thread-21405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:35:28.947 [DEBUG] [Thread-21405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:35:28.947 [DEBUG] [Thread-21405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:35:28.947 [DEBUG] [Thread-21405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:35:28.947 [DEBUG] [Thread-21405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:35:28.947 [DEBUG] [Thread-21405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:35:28.947 [DEBUG] [Thread-21405] [transport.py] [_log()] client lang: <none>
2026-04-15T15:35:28.947 [DEBUG] [Thread-21405] [transport.py] [_log()] server lang: <none>
2026-04-15T15:35:28.947 [DEBUG] [Thread-21405] [transport.py] [_log()] kex follows: False
2026-04-15T15:35:28.948 [DEBUG] [Thread-21405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:35:28.948 [DEBUG] [Thread-21405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:35:28.948 [DEBUG] [Thread-21405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:35:28.948 [DEBUG] [Thread-21405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:35:28.948 [DEBUG] [Thread-21405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:35:28.948 [DEBUG] [Thread-21405] [transport.py] [_log()] Compression: none
2026-04-15T15:35:28.948 [DEBUG] [Thread-21405] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:35:29.003 [DEBUG] [Thread-21405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:35:29.004 [DEBUG] [Thread-21405] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:35:29.004 [DEBUG] [Thread-21405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:35:29.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:35:29.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:35:29.060 [DEBUG] [Thread-21405] [transport.py] [_log()] userauth is OK
2026-04-15T15:35:29.061 [DEBUG] [Thread-21405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:35:29.061 [DEBUG] [Thread-21405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:35:29.061 [DEBUG] [Thread-21405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:35:29.061 [DEBUG] [Thread-21405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:35:29.090 [INFO] [Thread-21405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:35:29.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:35:29.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:35:29.905 [DEBUG] [Thread-21405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:35:29.905 [DEBUG] [Thread-21405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:35:29.953 [DEBUG] [Thread-21405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:35:29.953 [DEBUG] [Thread-21405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:35:29.962 [DEBUG] [Thread-21405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:35:29.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:35:29.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')
2026-04-15T15:35:29.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
2026-04-15T15:35:29.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:35:29.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:35:29.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:35:29.997 [DEBUG] [Thread-21405] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:35:33.156 [DEBUG] [Thread-21407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:35:35.050 [DEBUG] [Thread-21408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:35:50.095 [DEBUG] [Thread-21409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:36:00.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:36:00.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:36:00.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
2026-04-15T15:36:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 35, 37), 10.2281, 50.5639, 0.0, 21.9125, 15.839, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:36:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:35:37
2026-04-15T15:36:01.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:36:02.230 [DEBUG] [Thread-21410] [transport.py] [_log()] starting thread (client mode): 0xee927430
2026-04-15T15:36:02.230 [DEBUG] [Thread-21410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:36:02.251 [DEBUG] [Thread-21410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:36:02.251 [INFO] [Thread-21410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:36:02.254 [DEBUG] [Thread-21410] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:36:02.254 [DEBUG] [Thread-21410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:36:02.254 [DEBUG] [Thread-21410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:36:02.254 [DEBUG] [Thread-21410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:36:02.254 [DEBUG] [Thread-21410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:36:02.254 [DEBUG] [Thread-21410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:36:02.255 [DEBUG] [Thread-21410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:36:02.255 [DEBUG] [Thread-21410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:36:02.255 [DEBUG] [Thread-21410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:36:02.255 [DEBUG] [Thread-21410] [transport.py] [_log()] client lang: <none>
2026-04-15T15:36:02.255 [DEBUG] [Thread-21410] [transport.py] [_log()] server lang: <none>
2026-04-15T15:36:02.255 [DEBUG] [Thread-21410] [transport.py] [_log()] kex follows: False
2026-04-15T15:36:02.255 [DEBUG] [Thread-21410] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:36:02.255 [DEBUG] [Thread-21410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:36:02.255 [DEBUG] [Thread-21410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:36:02.255 [DEBUG] [Thread-21410] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:36:02.255 [DEBUG] [Thread-21410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:36:02.256 [DEBUG] [Thread-21410] [transport.py] [_log()] Compression: none
2026-04-15T15:36:02.256 [DEBUG] [Thread-21410] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:36:02.273 [DEBUG] [Thread-21410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:36:02.273 [DEBUG] [Thread-21410] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:36:02.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:36:02.274 [DEBUG] [Thread-21410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:36:02.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:36:02.275 [DEBUG] [Thread-21410] [transport.py] [_log()] userauth is OK
2026-04-15T15:36:02.275 [DEBUG] [Thread-21410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:36:02.275 [DEBUG] [Thread-21410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:36:02.275 [DEBUG] [Thread-21410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:36:02.276 [DEBUG] [Thread-21410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:36:02.294 [INFO] [Thread-21410] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:36:02.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:36:03.120 [DEBUG] [Thread-21410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:36:03.120 [DEBUG] [Thread-21410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:36:03.121 [DEBUG] [Thread-21410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:36:03.161 [DEBUG] [Thread-21410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:36:03.161 [DEBUG] [Thread-21410] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:36:03.164 [DEBUG] [Thread-21410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:36:03.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:36:03.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:36:03.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:36:03.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:36:03.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:36:03.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:36:03.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:36:03.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:36:03.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:36:03.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.566108 -999.00  +14.30  23.45     59   +6.50 1 1 1 1 1   887    0 7.03 -27.49 ----- 17.6 23.4 319.8 28.6 20.8 -29.9 20.0 -28.2 20.9 -24.9 21.9 -27.1
2026-04-15T15:36:03.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:36:03.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:36:03.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.566108
2026-04-15T15:36:03.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:36:03.190 [DEBUG] [Thread-21410] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:36:03.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:36:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:36:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:36:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:36:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:35:37', tmtdew=10.2281, humidity=50.5639, cloud=0.0, wind=21.9125, temperature=15.839, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:35:11.731', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:36:03.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:36:03.449 [DEBUG] [Thread-21413] [transport.py] [_log()] starting thread (client mode): 0xee9adcf0
2026-04-15T15:36:03.449 [DEBUG] [Thread-21413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:36:03.463 [DEBUG] [Thread-21413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:36:03.463 [INFO] [Thread-21413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:36:03.471 [DEBUG] [Thread-21413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:36:03.471 [DEBUG] [Thread-21413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:36:03.471 [DEBUG] [Thread-21413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:36:03.471 [DEBUG] [Thread-21413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:36:03.471 [DEBUG] [Thread-21413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:36:03.471 [DEBUG] [Thread-21413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:36:03.471 [DEBUG] [Thread-21413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:36:03.471 [DEBUG] [Thread-21413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:36:03.471 [DEBUG] [Thread-21413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:36:03.471 [DEBUG] [Thread-21413] [transport.py] [_log()] client lang: <none>
2026-04-15T15:36:03.471 [DEBUG] [Thread-21413] [transport.py] [_log()] server lang: <none>
2026-04-15T15:36:03.472 [DEBUG] [Thread-21413] [transport.py] [_log()] kex follows: False
2026-04-15T15:36:03.472 [DEBUG] [Thread-21413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:36:03.472 [DEBUG] [Thread-21413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:36:03.472 [DEBUG] [Thread-21413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:36:03.472 [DEBUG] [Thread-21413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:36:03.472 [DEBUG] [Thread-21413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:36:03.472 [DEBUG] [Thread-21413] [transport.py] [_log()] Compression: none
2026-04-15T15:36:03.472 [DEBUG] [Thread-21413] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:36:03.528 [DEBUG] [Thread-21413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:36:03.528 [DEBUG] [Thread-21413] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:36:03.529 [DEBUG] [Thread-21413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:36:03.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:36:03.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:36:03.588 [DEBUG] [Thread-21413] [transport.py] [_log()] userauth is OK
2026-04-15T15:36:03.589 [DEBUG] [Thread-21413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:36:03.589 [DEBUG] [Thread-21413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:36:03.589 [DEBUG] [Thread-21413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:36:03.589 [DEBUG] [Thread-21413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:36:03.627 [INFO] [Thread-21413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:36:03.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:36:03.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:36:04.491 [DEBUG] [Thread-21413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:36:04.492 [DEBUG] [Thread-21413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:36:04.539 [DEBUG] [Thread-21413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:36:04.539 [DEBUG] [Thread-21413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:36:04.548 [DEBUG] [Thread-21413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:36:04.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:36:04.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')
2026-04-15T15:36:04.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
2026-04-15T15:36:04.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:36:04.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:36:04.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:36:04.583 [DEBUG] [Thread-21413] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:36:05.127 [DEBUG] [Thread-21415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:36:12.973 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:36:12.975 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:36:20.171 [DEBUG] [Thread-21416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:36:33.231 [DEBUG] [Thread-21417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:36:34.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:36:34.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:36: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
2026-04-15T15:36:35.203 [DEBUG] [Thread-21418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:36:35.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 36, 12), 9.79648, 52.0168, 0.0, 20.8735, 15.1023, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:36:35.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:36:12
2026-04-15T15:36:36.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:36:36.725 [DEBUG] [Thread-21419] [transport.py] [_log()] starting thread (client mode): 0xee9bc6d0
2026-04-15T15:36:36.726 [DEBUG] [Thread-21419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:36:36.746 [DEBUG] [Thread-21419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:36:36.746 [INFO] [Thread-21419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:36:36.748 [DEBUG] [Thread-21419] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:36:36.748 [DEBUG] [Thread-21419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:36:36.748 [DEBUG] [Thread-21419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:36:36.748 [DEBUG] [Thread-21419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:36:36.748 [DEBUG] [Thread-21419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:36:36.748 [DEBUG] [Thread-21419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:36:36.749 [DEBUG] [Thread-21419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:36:36.749 [DEBUG] [Thread-21419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:36:36.749 [DEBUG] [Thread-21419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:36:36.749 [DEBUG] [Thread-21419] [transport.py] [_log()] client lang: <none>
2026-04-15T15:36:36.749 [DEBUG] [Thread-21419] [transport.py] [_log()] server lang: <none>
2026-04-15T15:36:36.749 [DEBUG] [Thread-21419] [transport.py] [_log()] kex follows: False
2026-04-15T15:36:36.749 [DEBUG] [Thread-21419] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:36:36.749 [DEBUG] [Thread-21419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:36:36.749 [DEBUG] [Thread-21419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:36:36.749 [DEBUG] [Thread-21419] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:36:36.749 [DEBUG] [Thread-21419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:36:36.750 [DEBUG] [Thread-21419] [transport.py] [_log()] Compression: none
2026-04-15T15:36:36.750 [DEBUG] [Thread-21419] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:36:36.758 [DEBUG] [Thread-21419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:36:36.758 [DEBUG] [Thread-21419] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:36:36.759 [DEBUG] [Thread-21419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:36:36.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:36:36.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:36:36.760 [DEBUG] [Thread-21419] [transport.py] [_log()] userauth is OK
2026-04-15T15:36:36.760 [DEBUG] [Thread-21419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:36:36.760 [DEBUG] [Thread-21419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:36:36.760 [DEBUG] [Thread-21419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:36:36.760 [DEBUG] [Thread-21419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:36:36.796 [INFO] [Thread-21419] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:36:36.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:36:37.534 [DEBUG] [Thread-21419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:36:37.534 [DEBUG] [Thread-21419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:36:37.534 [DEBUG] [Thread-21419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:36:37.575 [DEBUG] [Thread-21419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:36:37.575 [DEBUG] [Thread-21419] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:36:37.578 [DEBUG] [Thread-21419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:36:37.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:36:37.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:36:37.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:36:37.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:36:37.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:36:37.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:36:37.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:36:37.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:36:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:36:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.566456 -999.00  +14.80  19.66     61   +7.50 1 1 1 1 1   887    0 6.80 -29.09 ----- 20.5 19.7 324.6 22.5 21.0 -27.2 20.2 -26.7 21.1 -23.3 22.1 -24.7
2026-04-15T15:36:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:36:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:36:37.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.566456
2026-04-15T15:36:37.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:36:37.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:36:37.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:36:37.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:36:37.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:36:37.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:36:12', tmtdew=9.79648, humidity=52.0168, cloud=0.0, wind=20.8735, temperature=15.1023, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:35:41.798', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:36:37.605 [DEBUG] [Thread-21419] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:36:37.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:36:37.861 [DEBUG] [Thread-21422] [transport.py] [_log()] starting thread (client mode): 0xee9ad2d0
2026-04-15T15:36:37.862 [DEBUG] [Thread-21422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:36:37.876 [DEBUG] [Thread-21422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:36:37.876 [INFO] [Thread-21422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:36:37.883 [DEBUG] [Thread-21422] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:36:37.883 [DEBUG] [Thread-21422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:36:37.883 [DEBUG] [Thread-21422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:36:37.883 [DEBUG] [Thread-21422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:36:37.883 [DEBUG] [Thread-21422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:36:37.883 [DEBUG] [Thread-21422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:36:37.883 [DEBUG] [Thread-21422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:36:37.884 [DEBUG] [Thread-21422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:36:37.884 [DEBUG] [Thread-21422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:36:37.884 [DEBUG] [Thread-21422] [transport.py] [_log()] client lang: <none>
2026-04-15T15:36:37.884 [DEBUG] [Thread-21422] [transport.py] [_log()] server lang: <none>
2026-04-15T15:36:37.884 [DEBUG] [Thread-21422] [transport.py] [_log()] kex follows: False
2026-04-15T15:36:37.884 [DEBUG] [Thread-21422] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:36:37.884 [DEBUG] [Thread-21422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:36:37.884 [DEBUG] [Thread-21422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:36:37.884 [DEBUG] [Thread-21422] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:36:37.884 [DEBUG] [Thread-21422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:36:37.884 [DEBUG] [Thread-21422] [transport.py] [_log()] Compression: none
2026-04-15T15:36:37.884 [DEBUG] [Thread-21422] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:36:37.940 [DEBUG] [Thread-21422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:36:37.940 [DEBUG] [Thread-21422] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:36:37.941 [DEBUG] [Thread-21422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:36:37.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:36:37.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:36:37.996 [DEBUG] [Thread-21422] [transport.py] [_log()] userauth is OK
2026-04-15T15:36:37.996 [DEBUG] [Thread-21422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:36:37.997 [DEBUG] [Thread-21422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:36:37.997 [DEBUG] [Thread-21422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:36:37.997 [DEBUG] [Thread-21422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:36:38.021 [INFO] [Thread-21422] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:36:38.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:36:38.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:36:38.858 [DEBUG] [Thread-21422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:36:38.859 [DEBUG] [Thread-21422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:36:38.905 [DEBUG] [Thread-21422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:36:38.906 [DEBUG] [Thread-21422] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:36:38.914 [DEBUG] [Thread-21422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:36:38.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:36:38.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')
2026-04-15T15:36:38.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
2026-04-15T15:36:38.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:36:38.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:36:38.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:36:38.945 [DEBUG] [Thread-21422] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:36:50.235 [DEBUG] [Thread-21424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:37:05.279 [DEBUG] [Thread-21425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:37:08.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:37:08.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:37:08.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
2026-04-15T15:37:10.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 36, 48), 10.5377, 49.4703, 0.0, 25.4405, 15.7726, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:37:10.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:36:48
2026-04-15T15:37:10.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:37:11.059 [DEBUG] [Thread-21426] [transport.py] [_log()] starting thread (client mode): 0xee91ef80
2026-04-15T15:37:11.060 [DEBUG] [Thread-21426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:37:11.078 [DEBUG] [Thread-21426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:37:11.078 [INFO] [Thread-21426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:37:11.081 [DEBUG] [Thread-21426] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:37:11.081 [DEBUG] [Thread-21426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:37:11.081 [DEBUG] [Thread-21426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:37:11.082 [DEBUG] [Thread-21426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:37:11.082 [DEBUG] [Thread-21426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:37:11.082 [DEBUG] [Thread-21426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:37:11.082 [DEBUG] [Thread-21426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:37:11.082 [DEBUG] [Thread-21426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:37:11.082 [DEBUG] [Thread-21426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:37:11.082 [DEBUG] [Thread-21426] [transport.py] [_log()] client lang: <none>
2026-04-15T15:37:11.082 [DEBUG] [Thread-21426] [transport.py] [_log()] server lang: <none>
2026-04-15T15:37:11.082 [DEBUG] [Thread-21426] [transport.py] [_log()] kex follows: False
2026-04-15T15:37:11.082 [DEBUG] [Thread-21426] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:37:11.082 [DEBUG] [Thread-21426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:37:11.082 [DEBUG] [Thread-21426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:37:11.083 [DEBUG] [Thread-21426] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:37:11.083 [DEBUG] [Thread-21426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:37:11.083 [DEBUG] [Thread-21426] [transport.py] [_log()] Compression: none
2026-04-15T15:37:11.083 [DEBUG] [Thread-21426] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:37:11.099 [DEBUG] [Thread-21426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:37:11.100 [DEBUG] [Thread-21426] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:37:11.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:37:11.100 [DEBUG] [Thread-21426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:37:11.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:37:11.102 [DEBUG] [Thread-21426] [transport.py] [_log()] userauth is OK
2026-04-15T15:37:11.102 [DEBUG] [Thread-21426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:37:11.102 [DEBUG] [Thread-21426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:37:11.102 [DEBUG] [Thread-21426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:37:11.102 [DEBUG] [Thread-21426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:37:11.120 [INFO] [Thread-21426] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:37:11.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:37:11.899 [DEBUG] [Thread-21426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:37:11.900 [DEBUG] [Thread-21426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:37:11.900 [DEBUG] [Thread-21426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:37:11.940 [DEBUG] [Thread-21426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:37:11.940 [DEBUG] [Thread-21426] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:37:11.944 [DEBUG] [Thread-21426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:37:11.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:37:11.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:37:11.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:37:11.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:37:11.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:37:11.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:37:11.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:37:11.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:37:11.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:37:11.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.566803 -999.00  +15.10  19.05     59   +7.30 1 1 1 1 1   887    0 6.77 -33.35 ----- 8.1 19.1 303.2 22.9 21.0 -28.1 20.2 -26.6 21.0 -22.6 22.1 -24.8
2026-04-15T15:37:11.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:37:11.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:37:11.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.566803
2026-04-15T15:37:11.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:37:11.970 [DEBUG] [Thread-21426] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:37:11.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:37:11.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:37:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:37:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:37:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:36:48', tmtdew=10.5377, humidity=49.4703, cloud=0.0, wind=25.4405, temperature=15.7726, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:36:11.779', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:37:12.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:37:12.227 [DEBUG] [Thread-21429] [transport.py] [_log()] starting thread (client mode): 0xee926050
2026-04-15T15:37:12.228 [DEBUG] [Thread-21429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:37:12.242 [DEBUG] [Thread-21429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:37:12.242 [INFO] [Thread-21429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:37:12.250 [DEBUG] [Thread-21429] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:37:12.250 [DEBUG] [Thread-21429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:37:12.250 [DEBUG] [Thread-21429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:37:12.250 [DEBUG] [Thread-21429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:37:12.250 [DEBUG] [Thread-21429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:37:12.250 [DEBUG] [Thread-21429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:37:12.251 [DEBUG] [Thread-21429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:37:12.251 [DEBUG] [Thread-21429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:37:12.251 [DEBUG] [Thread-21429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:37:12.251 [DEBUG] [Thread-21429] [transport.py] [_log()] client lang: <none>
2026-04-15T15:37:12.251 [DEBUG] [Thread-21429] [transport.py] [_log()] server lang: <none>
2026-04-15T15:37:12.251 [DEBUG] [Thread-21429] [transport.py] [_log()] kex follows: False
2026-04-15T15:37:12.251 [DEBUG] [Thread-21429] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:37:12.251 [DEBUG] [Thread-21429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:37:12.252 [DEBUG] [Thread-21429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:37:12.252 [DEBUG] [Thread-21429] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:37:12.252 [DEBUG] [Thread-21429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:37:12.252 [DEBUG] [Thread-21429] [transport.py] [_log()] Compression: none
2026-04-15T15:37:12.252 [DEBUG] [Thread-21429] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:37:12.312 [DEBUG] [Thread-21429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:37:12.312 [DEBUG] [Thread-21429] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:37:12.313 [DEBUG] [Thread-21429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:37:12.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:37:12.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:37:12.368 [DEBUG] [Thread-21429] [transport.py] [_log()] userauth is OK
2026-04-15T15:37:12.368 [DEBUG] [Thread-21429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:37:12.369 [DEBUG] [Thread-21429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:37:12.369 [DEBUG] [Thread-21429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:37:12.369 [DEBUG] [Thread-21429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:37:12.392 [INFO] [Thread-21429] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:37:12.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:37:12.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:37:13.115 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:37:13.116 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:37:13.236 [DEBUG] [Thread-21429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:37:13.236 [DEBUG] [Thread-21429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:37:13.284 [DEBUG] [Thread-21429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:37:13.284 [DEBUG] [Thread-21429] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:37:13.293 [DEBUG] [Thread-21429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:37:13.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:37:13.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')
2026-04-15T15:37: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
2026-04-15T15:37:13.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:37:13.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:37:13.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:37:13.328 [DEBUG] [Thread-21429] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:37:20.311 [DEBUG] [Thread-21431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:37:33.311 [DEBUG] [Thread-21432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:37:35.355 [DEBUG] [Thread-21433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:37:43.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:37:43.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:37: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
2026-04-15T15:37:44.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 37, 24), 9.83503, 51.6523, 0.0, 20.7148, 14.9869, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:37:44.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:37:24
2026-04-15T15:37:44.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:37:45.407 [DEBUG] [Thread-21434] [transport.py] [_log()] starting thread (client mode): 0xee925e70
2026-04-15T15:37:45.408 [DEBUG] [Thread-21434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:37:45.426 [DEBUG] [Thread-21434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:37:45.426 [INFO] [Thread-21434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:37:45.430 [DEBUG] [Thread-21434] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:37:45.430 [DEBUG] [Thread-21434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:37:45.430 [DEBUG] [Thread-21434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:37:45.430 [DEBUG] [Thread-21434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:37:45.430 [DEBUG] [Thread-21434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:37:45.430 [DEBUG] [Thread-21434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:37:45.430 [DEBUG] [Thread-21434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:37:45.430 [DEBUG] [Thread-21434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:37:45.430 [DEBUG] [Thread-21434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:37:45.430 [DEBUG] [Thread-21434] [transport.py] [_log()] client lang: <none>
2026-04-15T15:37:45.430 [DEBUG] [Thread-21434] [transport.py] [_log()] server lang: <none>
2026-04-15T15:37:45.431 [DEBUG] [Thread-21434] [transport.py] [_log()] kex follows: False
2026-04-15T15:37:45.431 [DEBUG] [Thread-21434] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:37:45.431 [DEBUG] [Thread-21434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:37:45.431 [DEBUG] [Thread-21434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:37:45.431 [DEBUG] [Thread-21434] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:37:45.431 [DEBUG] [Thread-21434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:37:45.431 [DEBUG] [Thread-21434] [transport.py] [_log()] Compression: none
2026-04-15T15:37:45.431 [DEBUG] [Thread-21434] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:37:45.443 [DEBUG] [Thread-21434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:37:45.443 [DEBUG] [Thread-21434] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:37:45.444 [DEBUG] [Thread-21434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:37:45.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:37:45.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:37:45.445 [DEBUG] [Thread-21434] [transport.py] [_log()] userauth is OK
2026-04-15T15:37:45.445 [DEBUG] [Thread-21434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:37:45.445 [DEBUG] [Thread-21434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:37:45.445 [DEBUG] [Thread-21434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:37:45.445 [DEBUG] [Thread-21434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:37:45.463 [INFO] [Thread-21434] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:37:45.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:37:46.216 [DEBUG] [Thread-21434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:37:46.216 [DEBUG] [Thread-21434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:37:46.216 [DEBUG] [Thread-21434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:37:46.257 [DEBUG] [Thread-21434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:37:46.257 [DEBUG] [Thread-21434] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:37:46.259 [DEBUG] [Thread-21434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:37:46.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:37:46.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:37:46.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:37:46.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:37:46.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:37:46.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:37:46.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:37:46.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:37:46.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:37:46.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.567497 -999.00  +15.40  21.38     57   +7.10 1 1 1 1 1   887    0 6.83 -33.98 ----- 23.1 21.4 315.8 27.9 21.1 -27.9 20.2 -27.3 21.1 -27.1 22.2 -25.4
2026-04-15T15:37:46.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:37:46.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:37:46.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.567497
2026-04-15T15:37:46.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:37:46.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:37:46.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:37:46.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:37:46.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:37:46.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:37:24', tmtdew=9.83503, humidity=51.6523, cloud=0.0, wind=20.7148, temperature=14.9869, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:37:11.741', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:37:46.280 [DEBUG] [Thread-21434] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:37:46.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:37:46.500 [DEBUG] [Thread-21437] [transport.py] [_log()] starting thread (client mode): 0xee925210
2026-04-15T15:37:46.500 [DEBUG] [Thread-21437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:37:46.517 [DEBUG] [Thread-21437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:37:46.517 [INFO] [Thread-21437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:37:46.524 [DEBUG] [Thread-21437] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:37:46.524 [DEBUG] [Thread-21437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:37:46.524 [DEBUG] [Thread-21437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:37:46.524 [DEBUG] [Thread-21437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:37:46.525 [DEBUG] [Thread-21437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:37:46.525 [DEBUG] [Thread-21437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:37:46.525 [DEBUG] [Thread-21437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:37:46.525 [DEBUG] [Thread-21437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:37:46.525 [DEBUG] [Thread-21437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:37:46.525 [DEBUG] [Thread-21437] [transport.py] [_log()] client lang: <none>
2026-04-15T15:37:46.525 [DEBUG] [Thread-21437] [transport.py] [_log()] server lang: <none>
2026-04-15T15:37:46.525 [DEBUG] [Thread-21437] [transport.py] [_log()] kex follows: False
2026-04-15T15:37:46.525 [DEBUG] [Thread-21437] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:37:46.525 [DEBUG] [Thread-21437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:37:46.525 [DEBUG] [Thread-21437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:37:46.526 [DEBUG] [Thread-21437] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:37:46.526 [DEBUG] [Thread-21437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:37:46.526 [DEBUG] [Thread-21437] [transport.py] [_log()] Compression: none
2026-04-15T15:37:46.526 [DEBUG] [Thread-21437] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:37:46.587 [DEBUG] [Thread-21437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:37:46.588 [DEBUG] [Thread-21437] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:37:46.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:37:46.589 [DEBUG] [Thread-21437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:37:46.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:37:46.644 [DEBUG] [Thread-21437] [transport.py] [_log()] userauth is OK
2026-04-15T15:37:46.645 [DEBUG] [Thread-21437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:37:46.645 [DEBUG] [Thread-21437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:37:46.645 [DEBUG] [Thread-21437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:37:46.645 [DEBUG] [Thread-21437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:37:46.674 [INFO] [Thread-21437] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:37:46.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:37:46.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:37:47.498 [DEBUG] [Thread-21437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:37:47.499 [DEBUG] [Thread-21437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:37:47.546 [DEBUG] [Thread-21437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:37:47.546 [DEBUG] [Thread-21437] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:37:47.555 [DEBUG] [Thread-21437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:37:47.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:37:47.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')
2026-04-15T15:37:47.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
2026-04-15T15:37:47.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:37:47.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:37:47.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:37:47.590 [DEBUG] [Thread-21437] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:37:50.386 [DEBUG] [Thread-21439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:38:05.430 [DEBUG] [Thread-21440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:38:13.257 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:38:13.258 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:38:17.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:38:17.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:38:17.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
2026-04-15T15:38:18.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 37, 59), 9.81672, 51.881, 0.0, 19.6042, 14.6706, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:38:18.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:37:59
2026-04-15T15:38:19.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:38:19.857 [DEBUG] [Thread-21441] [transport.py] [_log()] starting thread (client mode): 0xee91e770
2026-04-15T15:38:19.858 [DEBUG] [Thread-21441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:38:19.876 [DEBUG] [Thread-21441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:38:19.876 [INFO] [Thread-21441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:38:19.879 [DEBUG] [Thread-21441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:38:19.879 [DEBUG] [Thread-21441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:38:19.879 [DEBUG] [Thread-21441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:38:19.879 [DEBUG] [Thread-21441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:38:19.880 [DEBUG] [Thread-21441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:38:19.880 [DEBUG] [Thread-21441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:38:19.880 [DEBUG] [Thread-21441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:38:19.880 [DEBUG] [Thread-21441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:38:19.880 [DEBUG] [Thread-21441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:38:19.880 [DEBUG] [Thread-21441] [transport.py] [_log()] client lang: <none>
2026-04-15T15:38:19.880 [DEBUG] [Thread-21441] [transport.py] [_log()] server lang: <none>
2026-04-15T15:38:19.880 [DEBUG] [Thread-21441] [transport.py] [_log()] kex follows: False
2026-04-15T15:38:19.880 [DEBUG] [Thread-21441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:38:19.880 [DEBUG] [Thread-21441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:38:19.880 [DEBUG] [Thread-21441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:38:19.880 [DEBUG] [Thread-21441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:38:19.881 [DEBUG] [Thread-21441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:38:19.881 [DEBUG] [Thread-21441] [transport.py] [_log()] Compression: none
2026-04-15T15:38:19.881 [DEBUG] [Thread-21441] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:38:19.897 [DEBUG] [Thread-21441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:38:19.897 [DEBUG] [Thread-21441] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:38:19.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:38:19.898 [DEBUG] [Thread-21441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:38:19.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:38:19.899 [DEBUG] [Thread-21441] [transport.py] [_log()] userauth is OK
2026-04-15T15:38:19.899 [DEBUG] [Thread-21441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:38:19.899 [DEBUG] [Thread-21441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:38:19.899 [DEBUG] [Thread-21441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:38:19.899 [DEBUG] [Thread-21441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:38:19.918 [INFO] [Thread-21441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:38:19.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:38:20.461 [DEBUG] [Thread-21443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:38:20.492 [DEBUG] [Thread-21441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:38:20.493 [DEBUG] [Thread-21441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:38:20.493 [DEBUG] [Thread-21441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:38:20.533 [DEBUG] [Thread-21441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:38:20.533 [DEBUG] [Thread-21441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:38:20.537 [DEBUG] [Thread-21441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:38:20.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:38:20.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:38:20.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:38:20.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:38:20.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:38:20.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:38:20.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:38:20.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:38:20.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:38:20.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.568192 -999.00  +14.90  21.45     58   +6.70 1 1 1 1 1   887    0 6.86 -30.41 ----- 22.9 21.4 293.8 24.3 20.9 -28.3 20.2 -26.9 21.0 -26.1 22.1 -25.9
2026-04-15T15:38:20.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:38:20.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:38:20.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.568192
2026-04-15T15:38:20.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:38:20.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:38:20.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:38:20.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:38:20.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:38:20.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:37:59', tmtdew=9.81672, humidity=51.881, cloud=0.0, wind=19.6042, temperature=14.6706, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:38:11.789', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:38:20.554 [DEBUG] [Thread-21441] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:38:20.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:38:20.794 [DEBUG] [Thread-21445] [transport.py] [_log()] starting thread (client mode): 0xee91c370
2026-04-15T15:38:20.794 [DEBUG] [Thread-21445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:38:20.811 [DEBUG] [Thread-21445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:38:20.811 [INFO] [Thread-21445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:38:20.820 [DEBUG] [Thread-21445] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:38:20.820 [DEBUG] [Thread-21445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:38:20.820 [DEBUG] [Thread-21445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:38:20.820 [DEBUG] [Thread-21445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:38:20.821 [DEBUG] [Thread-21445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:38:20.821 [DEBUG] [Thread-21445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:38:20.821 [DEBUG] [Thread-21445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:38:20.821 [DEBUG] [Thread-21445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:38:20.821 [DEBUG] [Thread-21445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:38:20.821 [DEBUG] [Thread-21445] [transport.py] [_log()] client lang: <none>
2026-04-15T15:38:20.821 [DEBUG] [Thread-21445] [transport.py] [_log()] server lang: <none>
2026-04-15T15:38:20.821 [DEBUG] [Thread-21445] [transport.py] [_log()] kex follows: False
2026-04-15T15:38:20.821 [DEBUG] [Thread-21445] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:38:20.821 [DEBUG] [Thread-21445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:38:20.821 [DEBUG] [Thread-21445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:38:20.821 [DEBUG] [Thread-21445] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:38:20.821 [DEBUG] [Thread-21445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:38:20.822 [DEBUG] [Thread-21445] [transport.py] [_log()] Compression: none
2026-04-15T15:38:20.822 [DEBUG] [Thread-21445] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:38:20.885 [DEBUG] [Thread-21445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:38:20.885 [DEBUG] [Thread-21445] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:38:20.886 [DEBUG] [Thread-21445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:38:20.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:38:20.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:38:20.946 [DEBUG] [Thread-21445] [transport.py] [_log()] userauth is OK
2026-04-15T15:38:20.947 [DEBUG] [Thread-21445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:38:20.947 [DEBUG] [Thread-21445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:38:20.947 [DEBUG] [Thread-21445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:38:20.947 [DEBUG] [Thread-21445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:38:20.973 [INFO] [Thread-21445] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:38:20.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:38:20.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:38:21.787 [DEBUG] [Thread-21445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:38:21.788 [DEBUG] [Thread-21445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:38:21.835 [DEBUG] [Thread-21445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:38:21.835 [DEBUG] [Thread-21445] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:38:21.847 [DEBUG] [Thread-21445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:38:21.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:38:21.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')
2026-04-15T15:38:21.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') -> 00000000
2026-04-15T15:38:21.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:38:21.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:38:21.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:38:21.883 [DEBUG] [Thread-21445] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:38:33.417 [DEBUG] [Thread-21447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:38:35.492 [DEBUG] [Thread-21448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:38:50.533 [DEBUG] [Thread-21449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:38:51.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:38:51.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:38:51.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
2026-04-15T15:38:53.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 38, 35), 10.1871, 50.6626, 0.0, 20.8541, 15.6726, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:38:53.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:38:35
2026-04-15T15:38:53.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:38:53.999 [DEBUG] [Thread-21450] [transport.py] [_log()] starting thread (client mode): 0xee9265c0
2026-04-15T15:38:54.000 [DEBUG] [Thread-21450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:38:54.020 [DEBUG] [Thread-21450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:38:54.020 [INFO] [Thread-21450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:38:54.022 [DEBUG] [Thread-21450] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:38:54.022 [DEBUG] [Thread-21450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:38:54.022 [DEBUG] [Thread-21450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:38:54.023 [DEBUG] [Thread-21450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:38:54.023 [DEBUG] [Thread-21450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:38:54.023 [DEBUG] [Thread-21450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:38:54.023 [DEBUG] [Thread-21450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:38:54.023 [DEBUG] [Thread-21450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:38:54.023 [DEBUG] [Thread-21450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:38:54.023 [DEBUG] [Thread-21450] [transport.py] [_log()] client lang: <none>
2026-04-15T15:38:54.023 [DEBUG] [Thread-21450] [transport.py] [_log()] server lang: <none>
2026-04-15T15:38:54.023 [DEBUG] [Thread-21450] [transport.py] [_log()] kex follows: False
2026-04-15T15:38:54.023 [DEBUG] [Thread-21450] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:38:54.023 [DEBUG] [Thread-21450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:38:54.024 [DEBUG] [Thread-21450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:38:54.024 [DEBUG] [Thread-21450] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:38:54.024 [DEBUG] [Thread-21450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:38:54.024 [DEBUG] [Thread-21450] [transport.py] [_log()] Compression: none
2026-04-15T15:38:54.024 [DEBUG] [Thread-21450] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:38:54.038 [DEBUG] [Thread-21450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:38:54.038 [DEBUG] [Thread-21450] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:38:54.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:38:54.039 [DEBUG] [Thread-21450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:38:54.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:38:54.039 [DEBUG] [Thread-21450] [transport.py] [_log()] userauth is OK
2026-04-15T15:38:54.040 [DEBUG] [Thread-21450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:38:54.040 [DEBUG] [Thread-21450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:38:54.040 [DEBUG] [Thread-21450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:38:54.040 [DEBUG] [Thread-21450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:38:54.064 [INFO] [Thread-21450] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:38:54.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:38:54.694 [DEBUG] [Thread-21450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:38:54.694 [DEBUG] [Thread-21450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:38:54.695 [DEBUG] [Thread-21450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:38:54.735 [DEBUG] [Thread-21450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:38:54.735 [DEBUG] [Thread-21450] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:38:54.740 [DEBUG] [Thread-21450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:38:54.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:38:54.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:38:54.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:38:54.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:38:54.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:38:54.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:38:54.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:38:54.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:38:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:38:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.568539 -999.00  +14.60  17.30     59   +6.70 1 1 1 1 1   887    0 6.99 -27.16 ----- 16.8 17.3 297.4 24.8 20.9 -28.1 20.1 -25.9 20.9 -22.6 22.1 -24.9
2026-04-15T15:38:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:38:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:38:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.568539
2026-04-15T15:38:54.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:38:54.757 [DEBUG] [Thread-21450] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:38:54.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:38:54.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:38:54.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:38:54.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:38:54.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:38:35', tmtdew=10.1871, humidity=50.6626, cloud=0.0, wind=20.8541, temperature=15.6726, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:38:41.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:38:55.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:38:55.017 [DEBUG] [Thread-21453] [transport.py] [_log()] starting thread (client mode): 0xee9260e0
2026-04-15T15:38:55.017 [DEBUG] [Thread-21453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:38:55.031 [DEBUG] [Thread-21453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:38:55.032 [INFO] [Thread-21453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:38:55.039 [DEBUG] [Thread-21453] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:38:55.039 [DEBUG] [Thread-21453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:38:55.040 [DEBUG] [Thread-21453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:38:55.040 [DEBUG] [Thread-21453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:38:55.040 [DEBUG] [Thread-21453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:38:55.040 [DEBUG] [Thread-21453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:38:55.040 [DEBUG] [Thread-21453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:38:55.040 [DEBUG] [Thread-21453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:38:55.040 [DEBUG] [Thread-21453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:38:55.040 [DEBUG] [Thread-21453] [transport.py] [_log()] client lang: <none>
2026-04-15T15:38:55.040 [DEBUG] [Thread-21453] [transport.py] [_log()] server lang: <none>
2026-04-15T15:38:55.040 [DEBUG] [Thread-21453] [transport.py] [_log()] kex follows: False
2026-04-15T15:38:55.040 [DEBUG] [Thread-21453] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:38:55.040 [DEBUG] [Thread-21453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:38:55.041 [DEBUG] [Thread-21453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:38:55.041 [DEBUG] [Thread-21453] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:38:55.041 [DEBUG] [Thread-21453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:38:55.041 [DEBUG] [Thread-21453] [transport.py] [_log()] Compression: none
2026-04-15T15:38:55.041 [DEBUG] [Thread-21453] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:38:55.095 [DEBUG] [Thread-21453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:38:55.096 [DEBUG] [Thread-21453] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:38:55.096 [DEBUG] [Thread-21453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:38:55.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:38:55.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:38:55.152 [DEBUG] [Thread-21453] [transport.py] [_log()] userauth is OK
2026-04-15T15:38:55.152 [DEBUG] [Thread-21453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:38:55.153 [DEBUG] [Thread-21453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:38:55.153 [DEBUG] [Thread-21453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:38:55.153 [DEBUG] [Thread-21453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:38:55.178 [INFO] [Thread-21453] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:38:55.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:38:55.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:38:55.984 [DEBUG] [Thread-21453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:38:55.984 [DEBUG] [Thread-21453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:38:56.032 [DEBUG] [Thread-21453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:38:56.032 [DEBUG] [Thread-21453] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:38:56.041 [DEBUG] [Thread-21453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:38:56.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:38:56.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')
2026-04-15T15:38:56.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
2026-04-15T15:38:56.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:38:56.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:38:56.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:38:56.076 [DEBUG] [Thread-21453] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:39:05.565 [DEBUG] [Thread-21455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:39:13.399 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:39:13.400 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:39:20.604 [DEBUG] [Thread-21456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:39:26.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:39:26.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:39:26.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
2026-04-15T15:39:27.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 39, 10), 9.72186, 52.2319, 0.0, 19.4969, 14.6863, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:39:27.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:39:10
2026-04-15T15:39:27.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:39:28.187 [DEBUG] [Thread-21457] [transport.py] [_log()] starting thread (client mode): 0xee925ba0
2026-04-15T15:39:28.187 [DEBUG] [Thread-21457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:39:28.200 [DEBUG] [Thread-21457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:39:28.201 [INFO] [Thread-21457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:39:28.202 [DEBUG] [Thread-21457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:39:28.202 [DEBUG] [Thread-21457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:39:28.202 [DEBUG] [Thread-21457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:39:28.202 [DEBUG] [Thread-21457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:39:28.202 [DEBUG] [Thread-21457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:39:28.202 [DEBUG] [Thread-21457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:39:28.202 [DEBUG] [Thread-21457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:39:28.203 [DEBUG] [Thread-21457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:39:28.203 [DEBUG] [Thread-21457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:39:28.203 [DEBUG] [Thread-21457] [transport.py] [_log()] client lang: <none>
2026-04-15T15:39:28.203 [DEBUG] [Thread-21457] [transport.py] [_log()] server lang: <none>
2026-04-15T15:39:28.203 [DEBUG] [Thread-21457] [transport.py] [_log()] kex follows: False
2026-04-15T15:39:28.203 [DEBUG] [Thread-21457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:39:28.203 [DEBUG] [Thread-21457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:39:28.203 [DEBUG] [Thread-21457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:39:28.203 [DEBUG] [Thread-21457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:39:28.203 [DEBUG] [Thread-21457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:39:28.203 [DEBUG] [Thread-21457] [transport.py] [_log()] Compression: none
2026-04-15T15:39:28.204 [DEBUG] [Thread-21457] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:39:28.220 [DEBUG] [Thread-21457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:39:28.220 [DEBUG] [Thread-21457] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:39:28.221 [DEBUG] [Thread-21457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:39:28.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:39:28.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:39:28.222 [DEBUG] [Thread-21457] [transport.py] [_log()] userauth is OK
2026-04-15T15:39:28.222 [DEBUG] [Thread-21457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:39:28.222 [DEBUG] [Thread-21457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:39:28.222 [DEBUG] [Thread-21457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:39:28.222 [DEBUG] [Thread-21457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:39:28.239 [INFO] [Thread-21457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:39:28.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:39:28.813 [DEBUG] [Thread-21457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:39:28.814 [DEBUG] [Thread-21457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:39:28.815 [DEBUG] [Thread-21457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:39:28.854 [DEBUG] [Thread-21457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:39:28.854 [DEBUG] [Thread-21457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:39:28.857 [DEBUG] [Thread-21457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:39:28.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:39:28.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:39:28.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:39:28.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:39:28.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:39:28.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:39:28.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:39:28.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:39:28.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:39:28.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.568886 -999.00  +15.00  18.06     59   +7.30 1 1 1 1 1   887    0 6.95 -26.04 ----- 24.5 18.1 317.2 23.7 20.9 -27.8 20.1 -27.0 20.9 -23.4 22.1 -25.4
2026-04-15T15:39:28.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:39:28.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:39:28.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.568886
2026-04-15T15:39:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:39:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:39:28.879 [DEBUG] [Thread-21457] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:39:28.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:39:28.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:39:28.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:39:28.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:39:10', tmtdew=9.72186, humidity=52.2319, cloud=0.0, wind=19.4969, temperature=14.6863, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:39:11.750', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:39:29.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:39:29.135 [DEBUG] [Thread-21460] [transport.py] [_log()] starting thread (client mode): 0xee91cfd0
2026-04-15T15:39:29.136 [DEBUG] [Thread-21460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:39:29.150 [DEBUG] [Thread-21460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:39:29.150 [INFO] [Thread-21460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:39:29.158 [DEBUG] [Thread-21460] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:39:29.158 [DEBUG] [Thread-21460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:39:29.158 [DEBUG] [Thread-21460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:39:29.158 [DEBUG] [Thread-21460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:39:29.158 [DEBUG] [Thread-21460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:39:29.158 [DEBUG] [Thread-21460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:39:29.158 [DEBUG] [Thread-21460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:39:29.158 [DEBUG] [Thread-21460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:39:29.158 [DEBUG] [Thread-21460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:39:29.158 [DEBUG] [Thread-21460] [transport.py] [_log()] client lang: <none>
2026-04-15T15:39:29.158 [DEBUG] [Thread-21460] [transport.py] [_log()] server lang: <none>
2026-04-15T15:39:29.159 [DEBUG] [Thread-21460] [transport.py] [_log()] kex follows: False
2026-04-15T15:39:29.159 [DEBUG] [Thread-21460] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:39:29.159 [DEBUG] [Thread-21460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:39:29.159 [DEBUG] [Thread-21460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:39:29.159 [DEBUG] [Thread-21460] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:39:29.159 [DEBUG] [Thread-21460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:39:29.159 [DEBUG] [Thread-21460] [transport.py] [_log()] Compression: none
2026-04-15T15:39:29.159 [DEBUG] [Thread-21460] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:39:29.219 [DEBUG] [Thread-21460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:39:29.220 [DEBUG] [Thread-21460] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:39:29.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:39:29.220 [DEBUG] [Thread-21460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:39:29.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:39:29.276 [DEBUG] [Thread-21460] [transport.py] [_log()] userauth is OK
2026-04-15T15:39:29.277 [DEBUG] [Thread-21460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:39:29.277 [DEBUG] [Thread-21460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:39:29.277 [DEBUG] [Thread-21460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:39:29.277 [DEBUG] [Thread-21460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:39:29.303 [INFO] [Thread-21460] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:39:29.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:39:29.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:39:30.150 [DEBUG] [Thread-21460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:39:30.150 [DEBUG] [Thread-21460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:39:30.198 [DEBUG] [Thread-21460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:39:30.198 [DEBUG] [Thread-21460] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:39:30.207 [DEBUG] [Thread-21460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:39:30.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:39:30.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')
2026-04-15T15:39:30.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
2026-04-15T15:39:30.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:39:30.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:39:30.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:39:30.242 [DEBUG] [Thread-21460] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:39:33.508 [DEBUG] [Thread-21462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:39:35.636 [DEBUG] [Thread-21463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:39:50.682 [DEBUG] [Thread-21464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:40:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:40:00.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:40:00.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
2026-04-15T15:40:01.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 39, 45), 10.4531, 49.7349, 0.0, 25.6874, 15.6726, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:40:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:39:45
2026-04-15T15:40:01.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:40:02.397 [DEBUG] [Thread-21465] [transport.py] [_log()] starting thread (client mode): 0xee9aef50
2026-04-15T15:40:02.397 [DEBUG] [Thread-21465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:40:02.417 [DEBUG] [Thread-21465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:40:02.417 [INFO] [Thread-21465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:40:02.419 [DEBUG] [Thread-21465] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:40:02.419 [DEBUG] [Thread-21465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:40:02.419 [DEBUG] [Thread-21465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:40:02.419 [DEBUG] [Thread-21465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:40:02.419 [DEBUG] [Thread-21465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:40:02.419 [DEBUG] [Thread-21465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:40:02.419 [DEBUG] [Thread-21465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:40:02.419 [DEBUG] [Thread-21465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:40:02.420 [DEBUG] [Thread-21465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:40:02.420 [DEBUG] [Thread-21465] [transport.py] [_log()] client lang: <none>
2026-04-15T15:40:02.420 [DEBUG] [Thread-21465] [transport.py] [_log()] server lang: <none>
2026-04-15T15:40:02.420 [DEBUG] [Thread-21465] [transport.py] [_log()] kex follows: False
2026-04-15T15:40:02.420 [DEBUG] [Thread-21465] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:40:02.420 [DEBUG] [Thread-21465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:40:02.420 [DEBUG] [Thread-21465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:40:02.420 [DEBUG] [Thread-21465] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:40:02.420 [DEBUG] [Thread-21465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:40:02.420 [DEBUG] [Thread-21465] [transport.py] [_log()] Compression: none
2026-04-15T15:40:02.420 [DEBUG] [Thread-21465] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:40:02.445 [DEBUG] [Thread-21465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:40:02.446 [DEBUG] [Thread-21465] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:40:02.446 [DEBUG] [Thread-21465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:40:02.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:40:02.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:40:02.447 [DEBUG] [Thread-21465] [transport.py] [_log()] userauth is OK
2026-04-15T15:40:02.447 [DEBUG] [Thread-21465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:40:02.447 [DEBUG] [Thread-21465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:40:02.447 [DEBUG] [Thread-21465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:40:02.448 [DEBUG] [Thread-21465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:40:02.478 [INFO] [Thread-21465] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:40:02.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:40:03.123 [DEBUG] [Thread-21465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:40:03.123 [DEBUG] [Thread-21465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:40:03.123 [DEBUG] [Thread-21465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:40:03.164 [DEBUG] [Thread-21465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:40:03.164 [DEBUG] [Thread-21465] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:40:03.166 [DEBUG] [Thread-21465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:40:03.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:40:03.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:40:03.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:40:03.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:40:03.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:40:03.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:40:03.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:40:03.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:40:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:40:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.569233 -999.00  +14.50  25.64     58   +6.40 1 1 1 1 1   887    0 7.09 -23.09 ----- 23.2 25.6 310.0 28.6 20.9 -27.8 20.0 -26.6 20.9 -25.4 22.0 -25.7
2026-04-15T15:40:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:40:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:40:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.569233
2026-04-15T15:40:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:40:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:40:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:40:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:40:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:40:03.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:39:45', tmtdew=10.4531, humidity=49.7349, cloud=0.0, wind=25.6874, temperature=15.6726, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:39:41.731', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:40:03.194 [DEBUG] [Thread-21465] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:40:03.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:40:03.424 [DEBUG] [Thread-21468] [transport.py] [_log()] starting thread (client mode): 0xee9ad420
2026-04-15T15:40:03.424 [DEBUG] [Thread-21468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:40:03.438 [DEBUG] [Thread-21468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:40:03.438 [INFO] [Thread-21468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:40:03.446 [DEBUG] [Thread-21468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:40:03.446 [DEBUG] [Thread-21468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:40:03.446 [DEBUG] [Thread-21468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:40:03.446 [DEBUG] [Thread-21468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:40:03.446 [DEBUG] [Thread-21468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:40:03.446 [DEBUG] [Thread-21468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:40:03.446 [DEBUG] [Thread-21468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:40:03.446 [DEBUG] [Thread-21468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:40:03.446 [DEBUG] [Thread-21468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:40:03.447 [DEBUG] [Thread-21468] [transport.py] [_log()] client lang: <none>
2026-04-15T15:40:03.447 [DEBUG] [Thread-21468] [transport.py] [_log()] server lang: <none>
2026-04-15T15:40:03.447 [DEBUG] [Thread-21468] [transport.py] [_log()] kex follows: False
2026-04-15T15:40:03.447 [DEBUG] [Thread-21468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:40:03.447 [DEBUG] [Thread-21468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:40:03.447 [DEBUG] [Thread-21468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:40:03.447 [DEBUG] [Thread-21468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:40:03.447 [DEBUG] [Thread-21468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:40:03.447 [DEBUG] [Thread-21468] [transport.py] [_log()] Compression: none
2026-04-15T15:40:03.447 [DEBUG] [Thread-21468] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:40:03.507 [DEBUG] [Thread-21468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:40:03.508 [DEBUG] [Thread-21468] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:40:03.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:40:03.509 [DEBUG] [Thread-21468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:40:03.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:40:03.568 [DEBUG] [Thread-21468] [transport.py] [_log()] userauth is OK
2026-04-15T15:40:03.568 [DEBUG] [Thread-21468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:40:03.568 [DEBUG] [Thread-21468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:40:03.568 [DEBUG] [Thread-21468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:40:03.568 [DEBUG] [Thread-21468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:40:03.586 [INFO] [Thread-21468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:40:03.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:40:03.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:40:04.439 [DEBUG] [Thread-21468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:40:04.440 [DEBUG] [Thread-21468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:40:04.486 [DEBUG] [Thread-21468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:40:04.487 [DEBUG] [Thread-21468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:40:04.496 [DEBUG] [Thread-21468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:40:04.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:40:04.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')
2026-04-15T15:40:04.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
2026-04-15T15:40:04.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:40:04.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:40:04.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:40:04.530 [DEBUG] [Thread-21468] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:40:05.715 [DEBUG] [Thread-21470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:40:13.541 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:40:13.542 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:40:20.759 [DEBUG] [Thread-21471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:40:33.585 [DEBUG] [Thread-21472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:40:34.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:40:34.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:40:34.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
2026-04-15T15:40:35.793 [DEBUG] [Thread-21473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:40:35.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 40, 21), 9.73227, 51.9668, 0.0, 20.7331, 14.8375, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:40:35.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:40:21
2026-04-15T15:40:36.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:40:36.640 [DEBUG] [Thread-21474] [transport.py] [_log()] starting thread (client mode): 0xee91d7e0
2026-04-15T15:40:36.640 [DEBUG] [Thread-21474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:40:36.655 [DEBUG] [Thread-21474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:40:36.655 [INFO] [Thread-21474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:40:36.657 [DEBUG] [Thread-21474] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:40:36.657 [DEBUG] [Thread-21474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:40:36.657 [DEBUG] [Thread-21474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:40:36.657 [DEBUG] [Thread-21474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:40:36.657 [DEBUG] [Thread-21474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:40:36.657 [DEBUG] [Thread-21474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:40:36.658 [DEBUG] [Thread-21474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:40:36.658 [DEBUG] [Thread-21474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:40:36.658 [DEBUG] [Thread-21474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:40:36.658 [DEBUG] [Thread-21474] [transport.py] [_log()] client lang: <none>
2026-04-15T15:40:36.658 [DEBUG] [Thread-21474] [transport.py] [_log()] server lang: <none>
2026-04-15T15:40:36.658 [DEBUG] [Thread-21474] [transport.py] [_log()] kex follows: False
2026-04-15T15:40:36.658 [DEBUG] [Thread-21474] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:40:36.658 [DEBUG] [Thread-21474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:40:36.658 [DEBUG] [Thread-21474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:40:36.658 [DEBUG] [Thread-21474] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:40:36.658 [DEBUG] [Thread-21474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:40:36.659 [DEBUG] [Thread-21474] [transport.py] [_log()] Compression: none
2026-04-15T15:40:36.659 [DEBUG] [Thread-21474] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:40:36.669 [DEBUG] [Thread-21474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:40:36.669 [DEBUG] [Thread-21474] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:40:36.670 [DEBUG] [Thread-21474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:40:36.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:40:36.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:40:36.671 [DEBUG] [Thread-21474] [transport.py] [_log()] userauth is OK
2026-04-15T15:40:36.671 [DEBUG] [Thread-21474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:40:36.671 [DEBUG] [Thread-21474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:40:36.671 [DEBUG] [Thread-21474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:40:36.671 [DEBUG] [Thread-21474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:40:36.687 [INFO] [Thread-21474] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:40:36.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:40:37.287 [DEBUG] [Thread-21474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:40:37.287 [DEBUG] [Thread-21474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:40:37.288 [DEBUG] [Thread-21474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:40:37.328 [DEBUG] [Thread-21474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:40:37.328 [DEBUG] [Thread-21474] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:40:37.331 [DEBUG] [Thread-21474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:40:37.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:40:37.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:40:37.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:40:37.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:40:37.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:40:37.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:40:37.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:40:37.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:40:37.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:40:37.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.569581 -999.00  +14.40  12.12     59   +6.60 1 1 1 1 1   887    0 7.16 -22.28 ----- 15.2 12.1 278.8 24.4 20.8 -27.8 20.0 -26.5 20.9 -25.5 21.9 -25.6
2026-04-15T15:40:37.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:40:37.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:40:37.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.569581
2026-04-15T15:40:37.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:40:37.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:40:37.360 [DEBUG] [Thread-21474] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:40:37.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:40:37.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:40:37.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:40:37.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:40:21', tmtdew=9.73227, humidity=51.9668, cloud=0.0, wind=20.7331, temperature=14.8375, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:40:11.798', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:40:37.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:40:37.609 [DEBUG] [Thread-21477] [transport.py] [_log()] starting thread (client mode): 0xee926d10
2026-04-15T15:40:37.609 [DEBUG] [Thread-21477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:40:37.623 [DEBUG] [Thread-21477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:40:37.623 [INFO] [Thread-21477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:40:37.630 [DEBUG] [Thread-21477] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:40:37.630 [DEBUG] [Thread-21477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:40:37.630 [DEBUG] [Thread-21477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:40:37.630 [DEBUG] [Thread-21477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:40:37.630 [DEBUG] [Thread-21477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:40:37.630 [DEBUG] [Thread-21477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:40:37.631 [DEBUG] [Thread-21477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:40:37.631 [DEBUG] [Thread-21477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:40:37.631 [DEBUG] [Thread-21477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:40:37.631 [DEBUG] [Thread-21477] [transport.py] [_log()] client lang: <none>
2026-04-15T15:40:37.631 [DEBUG] [Thread-21477] [transport.py] [_log()] server lang: <none>
2026-04-15T15:40:37.631 [DEBUG] [Thread-21477] [transport.py] [_log()] kex follows: False
2026-04-15T15:40:37.631 [DEBUG] [Thread-21477] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:40:37.631 [DEBUG] [Thread-21477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:40:37.631 [DEBUG] [Thread-21477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:40:37.631 [DEBUG] [Thread-21477] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:40:37.631 [DEBUG] [Thread-21477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:40:37.631 [DEBUG] [Thread-21477] [transport.py] [_log()] Compression: none
2026-04-15T15:40:37.632 [DEBUG] [Thread-21477] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:40:37.688 [DEBUG] [Thread-21477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:40:37.688 [DEBUG] [Thread-21477] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:40:37.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:40:37.689 [DEBUG] [Thread-21477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:40:37.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:40:37.749 [DEBUG] [Thread-21477] [transport.py] [_log()] userauth is OK
2026-04-15T15:40:37.749 [DEBUG] [Thread-21477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:40:37.749 [DEBUG] [Thread-21477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:40:37.749 [DEBUG] [Thread-21477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:40:37.749 [DEBUG] [Thread-21477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:40:37.774 [INFO] [Thread-21477] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:40:37.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:40:37.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:40:38.603 [DEBUG] [Thread-21477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:40:38.603 [DEBUG] [Thread-21477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:40:38.651 [DEBUG] [Thread-21477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:40:38.651 [DEBUG] [Thread-21477] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:40:38.660 [DEBUG] [Thread-21477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:40:38.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:40: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')
2026-04-15T15:40:38.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
2026-04-15T15:40:38.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:40:38.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:40:38.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:40:38.695 [DEBUG] [Thread-21477] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:40:50.826 [DEBUG] [Thread-21479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:41:05.871 [DEBUG] [Thread-21480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:41:08.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:41:08.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:41:08.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
2026-04-15T15:41:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 40, 56), 9.70837, 51.8477, 0.0, 14.2402, 14.3884, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:41:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:40:56
2026-04-15T15:41:10.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:41:10.830 [DEBUG] [Thread-21481] [transport.py] [_log()] starting thread (client mode): 0xee91d900
2026-04-15T15:41:10.830 [DEBUG] [Thread-21481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:41:10.845 [DEBUG] [Thread-21481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:41:10.845 [INFO] [Thread-21481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:41:10.848 [DEBUG] [Thread-21481] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:41:10.848 [DEBUG] [Thread-21481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:41:10.849 [DEBUG] [Thread-21481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:41:10.849 [DEBUG] [Thread-21481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:41:10.849 [DEBUG] [Thread-21481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:41:10.849 [DEBUG] [Thread-21481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:41:10.849 [DEBUG] [Thread-21481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:41:10.849 [DEBUG] [Thread-21481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:41:10.849 [DEBUG] [Thread-21481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:41:10.849 [DEBUG] [Thread-21481] [transport.py] [_log()] client lang: <none>
2026-04-15T15:41:10.849 [DEBUG] [Thread-21481] [transport.py] [_log()] server lang: <none>
2026-04-15T15:41:10.849 [DEBUG] [Thread-21481] [transport.py] [_log()] kex follows: False
2026-04-15T15:41:10.849 [DEBUG] [Thread-21481] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:41:10.850 [DEBUG] [Thread-21481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:41:10.850 [DEBUG] [Thread-21481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:41:10.850 [DEBUG] [Thread-21481] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:41:10.850 [DEBUG] [Thread-21481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:41:10.850 [DEBUG] [Thread-21481] [transport.py] [_log()] Compression: none
2026-04-15T15:41:10.850 [DEBUG] [Thread-21481] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:41:10.859 [DEBUG] [Thread-21481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:41:10.859 [DEBUG] [Thread-21481] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:41:10.860 [DEBUG] [Thread-21481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:41:10.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:41:10.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:41:10.861 [DEBUG] [Thread-21481] [transport.py] [_log()] userauth is OK
2026-04-15T15:41:10.861 [DEBUG] [Thread-21481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:41:10.861 [DEBUG] [Thread-21481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:41:10.861 [DEBUG] [Thread-21481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:41:10.861 [DEBUG] [Thread-21481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:41:10.882 [INFO] [Thread-21481] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:41:10.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:41:11.546 [DEBUG] [Thread-21481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:41:11.546 [DEBUG] [Thread-21481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:41:11.547 [DEBUG] [Thread-21481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:41:11.587 [DEBUG] [Thread-21481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:41:11.587 [DEBUG] [Thread-21481] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:41:11.590 [DEBUG] [Thread-21481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:41:11.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:41:11.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:41:11.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:41:11.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:41:11.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:41:11.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:41:11.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:41:11.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:41:11.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:41:11.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.569928 -999.00  +14.50  13.43     60   +7.00 1 1 1 1 1   887    0 7.13 -21.60 ----- 15.9 13.4 314.4 17.6 20.9 -27.4 20.0 -25.6 21.0 -22.9 22.0 -25.0
2026-04-15T15:41:11.613 [DEBUG] [Thread-21481] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:41:11.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:41:11.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:41:11.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.569928
2026-04-15T15:41:11.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:41:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:41:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:41:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:41:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:41:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:40:56', tmtdew=9.70837, humidity=51.8477, cloud=0.0, wind=14.2402, temperature=14.3884, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:40:41.779', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:41:11.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:41:11.870 [DEBUG] [Thread-21484] [transport.py] [_log()] starting thread (client mode): 0xee91de40
2026-04-15T15:41:11.870 [DEBUG] [Thread-21484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:41:11.886 [DEBUG] [Thread-21484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:41:11.886 [INFO] [Thread-21484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:41:11.896 [DEBUG] [Thread-21484] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:41:11.896 [DEBUG] [Thread-21484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:41:11.896 [DEBUG] [Thread-21484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:41:11.896 [DEBUG] [Thread-21484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:41:11.896 [DEBUG] [Thread-21484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:41:11.897 [DEBUG] [Thread-21484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:41:11.897 [DEBUG] [Thread-21484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:41:11.897 [DEBUG] [Thread-21484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:41:11.897 [DEBUG] [Thread-21484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:41:11.897 [DEBUG] [Thread-21484] [transport.py] [_log()] client lang: <none>
2026-04-15T15:41:11.897 [DEBUG] [Thread-21484] [transport.py] [_log()] server lang: <none>
2026-04-15T15:41:11.897 [DEBUG] [Thread-21484] [transport.py] [_log()] kex follows: False
2026-04-15T15:41:11.897 [DEBUG] [Thread-21484] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:41:11.897 [DEBUG] [Thread-21484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:41:11.897 [DEBUG] [Thread-21484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:41:11.897 [DEBUG] [Thread-21484] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:41:11.898 [DEBUG] [Thread-21484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:41:11.898 [DEBUG] [Thread-21484] [transport.py] [_log()] Compression: none
2026-04-15T15:41:11.898 [DEBUG] [Thread-21484] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:41:11.951 [DEBUG] [Thread-21484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:41:11.952 [DEBUG] [Thread-21484] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:41:11.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:41:11.952 [DEBUG] [Thread-21484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:41:11.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:41:12.008 [DEBUG] [Thread-21484] [transport.py] [_log()] userauth is OK
2026-04-15T15:41:12.009 [DEBUG] [Thread-21484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:41:12.009 [DEBUG] [Thread-21484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:41:12.009 [DEBUG] [Thread-21484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:41:12.009 [DEBUG] [Thread-21484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:41:12.038 [INFO] [Thread-21484] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:41:12.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:41:12.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:41:12.854 [DEBUG] [Thread-21484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:41:12.854 [DEBUG] [Thread-21484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:41:12.902 [DEBUG] [Thread-21484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:41:12.902 [DEBUG] [Thread-21484] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:41:12.914 [DEBUG] [Thread-21484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:41:12.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:41:12.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')
2026-04-15T15:41:12.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
2026-04-15T15:41:12.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:41:12.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:41:12.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:41:12.954 [DEBUG] [Thread-21484] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:41:13.684 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:41:13.685 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:41:20.903 [DEBUG] [Thread-21486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:41:33.659 [DEBUG] [Thread-21487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:41:35.949 [DEBUG] [Thread-21488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:41:42.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:41:42.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:41:42.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:41:44.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 41, 32), 9.56364, 52.3778, 0.0, 14.8752, 14.4381, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:41:44.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:41:32
2026-04-15T15:41:44.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:41:45.097 [DEBUG] [Thread-21489] [transport.py] [_log()] starting thread (client mode): 0xee9ae4d0
2026-04-15T15:41:45.097 [DEBUG] [Thread-21489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:41:45.118 [DEBUG] [Thread-21489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:41:45.118 [INFO] [Thread-21489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:41:45.121 [DEBUG] [Thread-21489] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:41:45.121 [DEBUG] [Thread-21489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:41:45.121 [DEBUG] [Thread-21489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:41:45.121 [DEBUG] [Thread-21489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:41:45.121 [DEBUG] [Thread-21489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:41:45.121 [DEBUG] [Thread-21489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:41:45.122 [DEBUG] [Thread-21489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:41:45.122 [DEBUG] [Thread-21489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:41:45.122 [DEBUG] [Thread-21489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:41:45.122 [DEBUG] [Thread-21489] [transport.py] [_log()] client lang: <none>
2026-04-15T15:41:45.122 [DEBUG] [Thread-21489] [transport.py] [_log()] server lang: <none>
2026-04-15T15:41:45.122 [DEBUG] [Thread-21489] [transport.py] [_log()] kex follows: False
2026-04-15T15:41:45.122 [DEBUG] [Thread-21489] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:41:45.122 [DEBUG] [Thread-21489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:41:45.122 [DEBUG] [Thread-21489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:41:45.122 [DEBUG] [Thread-21489] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:41:45.123 [DEBUG] [Thread-21489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:41:45.123 [DEBUG] [Thread-21489] [transport.py] [_log()] Compression: none
2026-04-15T15:41:45.123 [DEBUG] [Thread-21489] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:41:45.139 [DEBUG] [Thread-21489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:41:45.139 [DEBUG] [Thread-21489] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:41:45.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:41:45.140 [DEBUG] [Thread-21489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:41:45.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:41:45.141 [DEBUG] [Thread-21489] [transport.py] [_log()] userauth is OK
2026-04-15T15:41:45.141 [DEBUG] [Thread-21489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:41:45.141 [DEBUG] [Thread-21489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:41:45.141 [DEBUG] [Thread-21489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:41:45.141 [DEBUG] [Thread-21489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:41:45.165 [INFO] [Thread-21489] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:41:45.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:41:45.795 [DEBUG] [Thread-21489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:41:45.796 [DEBUG] [Thread-21489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:41:45.796 [DEBUG] [Thread-21489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:41:45.836 [DEBUG] [Thread-21489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:41:45.836 [DEBUG] [Thread-21489] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:41:45.839 [DEBUG] [Thread-21489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:41:45.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:41:45.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:41:45.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:41:45.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:41:45.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:41:45.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:41:45.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:41:45.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:41:45.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:41:45.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.570275 -999.00  +14.70  17.89     58   +6.60 1 1 1 1 1   887    0 7.20 -21.93 ----- 16.6 17.9 296.4 19.7 20.9 -27.7 20.1 -26.4 21.0 -23.3 22.1 -25.8
2026-04-15T15:41:45.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:41:45.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:41:45.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.570275
2026-04-15T15:41:45.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:41:45.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:41:45.860 [DEBUG] [Thread-21489] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:41:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:41:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:41:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:41:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:41:32', tmtdew=9.56364, humidity=52.3778, cloud=0.0, wind=14.8752, temperature=14.4381, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:41:11.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:41:46.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:41:46.123 [DEBUG] [Thread-21492] [transport.py] [_log()] starting thread (client mode): 0xee9ad780
2026-04-15T15:41:46.123 [DEBUG] [Thread-21492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:41:46.137 [DEBUG] [Thread-21492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:41:46.137 [INFO] [Thread-21492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:41:46.145 [DEBUG] [Thread-21492] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:41:46.145 [DEBUG] [Thread-21492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:41:46.145 [DEBUG] [Thread-21492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:41:46.145 [DEBUG] [Thread-21492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:41:46.145 [DEBUG] [Thread-21492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:41:46.145 [DEBUG] [Thread-21492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:41:46.145 [DEBUG] [Thread-21492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:41:46.145 [DEBUG] [Thread-21492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:41:46.145 [DEBUG] [Thread-21492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:41:46.145 [DEBUG] [Thread-21492] [transport.py] [_log()] client lang: <none>
2026-04-15T15:41:46.145 [DEBUG] [Thread-21492] [transport.py] [_log()] server lang: <none>
2026-04-15T15:41:46.145 [DEBUG] [Thread-21492] [transport.py] [_log()] kex follows: False
2026-04-15T15:41:46.146 [DEBUG] [Thread-21492] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:41:46.146 [DEBUG] [Thread-21492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:41:46.146 [DEBUG] [Thread-21492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:41:46.146 [DEBUG] [Thread-21492] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:41:46.146 [DEBUG] [Thread-21492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:41:46.146 [DEBUG] [Thread-21492] [transport.py] [_log()] Compression: none
2026-04-15T15:41:46.146 [DEBUG] [Thread-21492] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:41:46.203 [DEBUG] [Thread-21492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:41:46.203 [DEBUG] [Thread-21492] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:41:46.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:41:46.204 [DEBUG] [Thread-21492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:41:46.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:41:46.260 [DEBUG] [Thread-21492] [transport.py] [_log()] userauth is OK
2026-04-15T15:41:46.260 [DEBUG] [Thread-21492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:41:46.260 [DEBUG] [Thread-21492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:41:46.260 [DEBUG] [Thread-21492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:41:46.260 [DEBUG] [Thread-21492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:41:46.277 [INFO] [Thread-21492] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:41:46.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:41:46.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:41:47.119 [DEBUG] [Thread-21492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:41:47.119 [DEBUG] [Thread-21492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:41:47.167 [DEBUG] [Thread-21492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:41:47.167 [DEBUG] [Thread-21492] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:41:47.176 [DEBUG] [Thread-21492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:41:47.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:41:47.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')
2026-04-15T15:41:47.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
2026-04-15T15:41:47.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:41:47.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:41:47.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:41:47.210 [DEBUG] [Thread-21492] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:41:50.979 [DEBUG] [Thread-21494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:42:06.022 [DEBUG] [Thread-21495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:42:13.823 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:42:13.824 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:42:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:42:17.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:42:17.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:42:18.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 42, 8), 9.62832, 52.1457, 0.0, 17.2919, 14.4379, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:42:18.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:42:08
2026-04-15T15:42:18.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:42:19.348 [DEBUG] [Thread-21496] [transport.py] [_log()] starting thread (client mode): 0xee9255d0
2026-04-15T15:42:19.349 [DEBUG] [Thread-21496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:42:19.367 [DEBUG] [Thread-21496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:42:19.367 [INFO] [Thread-21496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:42:19.370 [DEBUG] [Thread-21496] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:42:19.370 [DEBUG] [Thread-21496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:42:19.370 [DEBUG] [Thread-21496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:42:19.370 [DEBUG] [Thread-21496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:42:19.370 [DEBUG] [Thread-21496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:42:19.371 [DEBUG] [Thread-21496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:42:19.371 [DEBUG] [Thread-21496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:42:19.371 [DEBUG] [Thread-21496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:42:19.371 [DEBUG] [Thread-21496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:42:19.371 [DEBUG] [Thread-21496] [transport.py] [_log()] client lang: <none>
2026-04-15T15:42:19.371 [DEBUG] [Thread-21496] [transport.py] [_log()] server lang: <none>
2026-04-15T15:42:19.371 [DEBUG] [Thread-21496] [transport.py] [_log()] kex follows: False
2026-04-15T15:42:19.371 [DEBUG] [Thread-21496] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:42:19.371 [DEBUG] [Thread-21496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:42:19.371 [DEBUG] [Thread-21496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:42:19.371 [DEBUG] [Thread-21496] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:42:19.371 [DEBUG] [Thread-21496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:42:19.372 [DEBUG] [Thread-21496] [transport.py] [_log()] Compression: none
2026-04-15T15:42:19.372 [DEBUG] [Thread-21496] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:42:19.389 [DEBUG] [Thread-21496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:42:19.389 [DEBUG] [Thread-21496] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:42:19.390 [DEBUG] [Thread-21496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:42:19.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:42:19.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:42:19.391 [DEBUG] [Thread-21496] [transport.py] [_log()] userauth is OK
2026-04-15T15:42:19.391 [DEBUG] [Thread-21496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:42:19.391 [DEBUG] [Thread-21496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:42:19.391 [DEBUG] [Thread-21496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:42:19.391 [DEBUG] [Thread-21496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:42:19.414 [INFO] [Thread-21496] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:42:19.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:42:20.054 [DEBUG] [Thread-21496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:42:20.054 [DEBUG] [Thread-21496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:42:20.054 [DEBUG] [Thread-21496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:42:20.095 [DEBUG] [Thread-21496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:42:20.095 [DEBUG] [Thread-21496] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:42:20.097 [DEBUG] [Thread-21496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:42:20.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:42:20.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:42:20.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:42:20.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:42:20.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:42:20.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:42:20.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:42:20.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:42:20.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:42:20.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.570969 -999.00  +14.70  15.22     58   +6.70 1 1 1 1 1   887    0 7.33 -18.15 ----- 16.5 15.2 292.4 18.4 20.8 -27.9 20.1 -26.5 20.9 -24.2 22.0 -25.9
2026-04-15T15:42:20.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:42:20.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:42:20.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.570969
2026-04-15T15:42:20.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:42:20.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:42:20.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:42:20.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:42:20.121 [DEBUG] [Thread-21496] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:42:20.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:42:20.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:42:08', tmtdew=9.62832, humidity=52.1457, cloud=0.0, wind=17.2919, temperature=14.4379, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:42:11.722', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:42:20.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:42:20.363 [DEBUG] [Thread-21499] [transport.py] [_log()] starting thread (client mode): 0xee926740
2026-04-15T15:42:20.363 [DEBUG] [Thread-21499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:42:20.377 [DEBUG] [Thread-21499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:42:20.377 [INFO] [Thread-21499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:42:20.384 [DEBUG] [Thread-21499] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:42:20.385 [DEBUG] [Thread-21499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:42:20.385 [DEBUG] [Thread-21499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:42:20.385 [DEBUG] [Thread-21499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:42:20.385 [DEBUG] [Thread-21499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:42:20.385 [DEBUG] [Thread-21499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:42:20.385 [DEBUG] [Thread-21499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:42:20.385 [DEBUG] [Thread-21499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:42:20.385 [DEBUG] [Thread-21499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:42:20.386 [DEBUG] [Thread-21499] [transport.py] [_log()] client lang: <none>
2026-04-15T15:42:20.386 [DEBUG] [Thread-21499] [transport.py] [_log()] server lang: <none>
2026-04-15T15:42:20.386 [DEBUG] [Thread-21499] [transport.py] [_log()] kex follows: False
2026-04-15T15:42:20.386 [DEBUG] [Thread-21499] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:42:20.386 [DEBUG] [Thread-21499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:42:20.386 [DEBUG] [Thread-21499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:42:20.386 [DEBUG] [Thread-21499] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:42:20.386 [DEBUG] [Thread-21499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:42:20.386 [DEBUG] [Thread-21499] [transport.py] [_log()] Compression: none
2026-04-15T15:42:20.386 [DEBUG] [Thread-21499] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:42:20.444 [DEBUG] [Thread-21499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:42:20.444 [DEBUG] [Thread-21499] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:42:20.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:42:20.445 [DEBUG] [Thread-21499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:42:20.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:42:20.500 [DEBUG] [Thread-21499] [transport.py] [_log()] userauth is OK
2026-04-15T15:42:20.501 [DEBUG] [Thread-21499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:42:20.501 [DEBUG] [Thread-21499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:42:20.501 [DEBUG] [Thread-21499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:42:20.501 [DEBUG] [Thread-21499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:42:20.527 [INFO] [Thread-21499] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:42:20.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:42:20.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:42:21.054 [DEBUG] [Thread-21501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:42:21.344 [DEBUG] [Thread-21499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:42:21.344 [DEBUG] [Thread-21499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:42:21.393 [DEBUG] [Thread-21499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:42:21.393 [DEBUG] [Thread-21499] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:42:21.402 [DEBUG] [Thread-21499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:42:21.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:42:21.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')
2026-04-15T15:42: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') -> 00000000
2026-04-15T15:42:21.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:42:21.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:42:21.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:42:21.437 [DEBUG] [Thread-21499] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:42:33.734 [DEBUG] [Thread-21502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:42:36.094 [DEBUG] [Thread-21503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:42:51.124 [DEBUG] [Thread-21504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:42:51.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:42:51.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:42: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
2026-04-15T15:42:52.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 42, 44), 9.88331, 51.5896, 0.0, 18.6314, 15.1083, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:42:52.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:42:44
2026-04-15T15:42:53.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:42:53.568 [DEBUG] [Thread-21505] [transport.py] [_log()] starting thread (client mode): 0xee9adf90
2026-04-15T15:42:53.569 [DEBUG] [Thread-21505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:42:53.589 [DEBUG] [Thread-21505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:42:53.589 [INFO] [Thread-21505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:42:53.593 [DEBUG] [Thread-21505] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:42:53.593 [DEBUG] [Thread-21505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:42:53.593 [DEBUG] [Thread-21505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:42:53.593 [DEBUG] [Thread-21505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:42:53.594 [DEBUG] [Thread-21505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:42:53.594 [DEBUG] [Thread-21505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:42:53.594 [DEBUG] [Thread-21505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:42:53.594 [DEBUG] [Thread-21505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:42:53.594 [DEBUG] [Thread-21505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:42:53.594 [DEBUG] [Thread-21505] [transport.py] [_log()] client lang: <none>
2026-04-15T15:42:53.594 [DEBUG] [Thread-21505] [transport.py] [_log()] server lang: <none>
2026-04-15T15:42:53.594 [DEBUG] [Thread-21505] [transport.py] [_log()] kex follows: False
2026-04-15T15:42:53.594 [DEBUG] [Thread-21505] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:42:53.594 [DEBUG] [Thread-21505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:42:53.594 [DEBUG] [Thread-21505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:42:53.594 [DEBUG] [Thread-21505] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:42:53.595 [DEBUG] [Thread-21505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:42:53.595 [DEBUG] [Thread-21505] [transport.py] [_log()] Compression: none
2026-04-15T15:42:53.595 [DEBUG] [Thread-21505] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:42:53.611 [DEBUG] [Thread-21505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:42:53.612 [DEBUG] [Thread-21505] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:42:53.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:42:53.612 [DEBUG] [Thread-21505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:42:53.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:42:53.613 [DEBUG] [Thread-21505] [transport.py] [_log()] userauth is OK
2026-04-15T15:42:53.614 [DEBUG] [Thread-21505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:42:53.614 [DEBUG] [Thread-21505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:42:53.614 [DEBUG] [Thread-21505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:42:53.614 [DEBUG] [Thread-21505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:42:53.650 [INFO] [Thread-21505] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:42:53.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:42:54.259 [DEBUG] [Thread-21505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:42:54.259 [DEBUG] [Thread-21505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:42:54.259 [DEBUG] [Thread-21505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:42:54.300 [DEBUG] [Thread-21505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:42:54.300 [DEBUG] [Thread-21505] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:42:54.302 [DEBUG] [Thread-21505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:42:54.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:42:54.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:42:54.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:42:54.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:42:54.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:42:54.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:42:54.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:42:54.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:42:54.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:42:54.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.571317 -999.00  +14.60  11.12     59   +6.70 1 1 1 1 1   887    0 7.40 -17.10 ----- 13.3 11.1 304.2 21.4 20.9 -27.7 20.1 -26.4 20.9 -23.5 22.1 -26.3
2026-04-15T15:42:54.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:42:54.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:42:54.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.571317
2026-04-15T15:42:54.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:42:54.326 [DEBUG] [Thread-21505] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:42:54.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:42:54.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:42:54.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:42:54.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:42:54.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:42:44', tmtdew=9.88331, humidity=51.5896, cloud=0.0, wind=18.6314, temperature=15.1083, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:42:41.789', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:42:54.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:42:54.589 [DEBUG] [Thread-21508] [transport.py] [_log()] starting thread (client mode): 0xee91d900
2026-04-15T15:42:54.590 [DEBUG] [Thread-21508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:42:54.612 [DEBUG] [Thread-21508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:42:54.612 [INFO] [Thread-21508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:42:54.619 [DEBUG] [Thread-21508] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:42:54.619 [DEBUG] [Thread-21508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:42:54.619 [DEBUG] [Thread-21508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:42:54.619 [DEBUG] [Thread-21508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:42:54.619 [DEBUG] [Thread-21508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:42:54.620 [DEBUG] [Thread-21508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:42:54.620 [DEBUG] [Thread-21508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:42:54.620 [DEBUG] [Thread-21508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:42:54.620 [DEBUG] [Thread-21508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:42:54.620 [DEBUG] [Thread-21508] [transport.py] [_log()] client lang: <none>
2026-04-15T15:42:54.620 [DEBUG] [Thread-21508] [transport.py] [_log()] server lang: <none>
2026-04-15T15:42:54.620 [DEBUG] [Thread-21508] [transport.py] [_log()] kex follows: False
2026-04-15T15:42:54.620 [DEBUG] [Thread-21508] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:42:54.620 [DEBUG] [Thread-21508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:42:54.620 [DEBUG] [Thread-21508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:42:54.620 [DEBUG] [Thread-21508] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:42:54.621 [DEBUG] [Thread-21508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:42:54.621 [DEBUG] [Thread-21508] [transport.py] [_log()] Compression: none
2026-04-15T15:42:54.621 [DEBUG] [Thread-21508] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:42:54.675 [DEBUG] [Thread-21508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:42:54.676 [DEBUG] [Thread-21508] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:42:54.676 [DEBUG] [Thread-21508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:42:54.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:42:54.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:42:54.732 [DEBUG] [Thread-21508] [transport.py] [_log()] userauth is OK
2026-04-15T15:42:54.733 [DEBUG] [Thread-21508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:42:54.733 [DEBUG] [Thread-21508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:42:54.733 [DEBUG] [Thread-21508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:42:54.733 [DEBUG] [Thread-21508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:42:54.761 [INFO] [Thread-21508] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:42:54.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:42:54.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:42:55.591 [DEBUG] [Thread-21508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:42:55.592 [DEBUG] [Thread-21508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:42:55.639 [DEBUG] [Thread-21508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:42:55.639 [DEBUG] [Thread-21508] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:42:55.648 [DEBUG] [Thread-21508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:42:55.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:42:55.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')
2026-04-15T15:42:55.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
2026-04-15T15:42:55.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:42:55.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:42:55.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:42:55.683 [DEBUG] [Thread-21508] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:43:06.155 [DEBUG] [Thread-21510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:43:13.964 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:43:13.965 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:43:21.199 [DEBUG] [Thread-21511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:43:25.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:43:25.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:43:25.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
2026-04-15T15:43:26.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 43, 19), 9.55032, 52.7949, 0.0, 11.6111, 14.4702, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:43:26.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:43:19
2026-04-15T15:43:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:43:27.849 [DEBUG] [Thread-21512] [transport.py] [_log()] starting thread (client mode): 0xee9bf880
2026-04-15T15:43:27.849 [DEBUG] [Thread-21512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:43:27.877 [DEBUG] [Thread-21512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:43:27.877 [INFO] [Thread-21512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:43:27.879 [DEBUG] [Thread-21512] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:43:27.879 [DEBUG] [Thread-21512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:43:27.879 [DEBUG] [Thread-21512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:43:27.879 [DEBUG] [Thread-21512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:43:27.879 [DEBUG] [Thread-21512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:43:27.880 [DEBUG] [Thread-21512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:43:27.880 [DEBUG] [Thread-21512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:43:27.880 [DEBUG] [Thread-21512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:43:27.880 [DEBUG] [Thread-21512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:43:27.880 [DEBUG] [Thread-21512] [transport.py] [_log()] client lang: <none>
2026-04-15T15:43:27.880 [DEBUG] [Thread-21512] [transport.py] [_log()] server lang: <none>
2026-04-15T15:43:27.880 [DEBUG] [Thread-21512] [transport.py] [_log()] kex follows: False
2026-04-15T15:43:27.880 [DEBUG] [Thread-21512] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:43:27.880 [DEBUG] [Thread-21512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:43:27.880 [DEBUG] [Thread-21512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:43:27.880 [DEBUG] [Thread-21512] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:43:27.881 [DEBUG] [Thread-21512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:43:27.881 [DEBUG] [Thread-21512] [transport.py] [_log()] Compression: none
2026-04-15T15:43:27.881 [DEBUG] [Thread-21512] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:43:27.891 [DEBUG] [Thread-21512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:43:27.891 [DEBUG] [Thread-21512] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:43:27.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:43:27.892 [DEBUG] [Thread-21512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:43:27.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:43:27.893 [DEBUG] [Thread-21512] [transport.py] [_log()] userauth is OK
2026-04-15T15:43:27.893 [DEBUG] [Thread-21512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:43:27.894 [DEBUG] [Thread-21512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:43:27.894 [DEBUG] [Thread-21512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:43:27.894 [DEBUG] [Thread-21512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:43:27.918 [INFO] [Thread-21512] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:43:27.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:43:28.565 [DEBUG] [Thread-21512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:43:28.565 [DEBUG] [Thread-21512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:43:28.566 [DEBUG] [Thread-21512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:43:28.606 [DEBUG] [Thread-21512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:43:28.606 [DEBUG] [Thread-21512] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:43:28.609 [DEBUG] [Thread-21512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:43:28.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:43:28.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:43:28.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:43:28.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:43:28.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:43:28.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:43:28.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:43:28.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:43:28.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:43:28.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.571664 -999.00  +14.70  19.63     59   +6.70 1 1 1 1 1   887    0 7.46 -12.97 ----- 16.6 19.6 319.8 22.2 20.9 -28.4 20.1 -27.0 21.0 -25.3 22.0 -26.7
2026-04-15T15:43:28.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:43:28.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:43:28.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.571664
2026-04-15T15:43:28.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:43:28.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:43:28.636 [DEBUG] [Thread-21512] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:43:28.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:43:28.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:43:28.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:43:28.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:43:19', tmtdew=9.55032, humidity=52.7949, cloud=0.0, wind=11.6111, temperature=14.4702, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:43:11.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:43:28.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:43:28.892 [DEBUG] [Thread-21515] [transport.py] [_log()] starting thread (client mode): 0xee9bf100
2026-04-15T15:43:28.892 [DEBUG] [Thread-21515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:43:28.906 [DEBUG] [Thread-21515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:43:28.907 [INFO] [Thread-21515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:43:28.914 [DEBUG] [Thread-21515] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:43:28.914 [DEBUG] [Thread-21515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:43:28.914 [DEBUG] [Thread-21515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:43:28.914 [DEBUG] [Thread-21515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:43:28.914 [DEBUG] [Thread-21515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:43:28.914 [DEBUG] [Thread-21515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:43:28.914 [DEBUG] [Thread-21515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:43:28.914 [DEBUG] [Thread-21515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:43:28.914 [DEBUG] [Thread-21515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:43:28.915 [DEBUG] [Thread-21515] [transport.py] [_log()] client lang: <none>
2026-04-15T15:43:28.915 [DEBUG] [Thread-21515] [transport.py] [_log()] server lang: <none>
2026-04-15T15:43:28.915 [DEBUG] [Thread-21515] [transport.py] [_log()] kex follows: False
2026-04-15T15:43:28.915 [DEBUG] [Thread-21515] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:43:28.915 [DEBUG] [Thread-21515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:43:28.915 [DEBUG] [Thread-21515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:43:28.915 [DEBUG] [Thread-21515] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:43:28.915 [DEBUG] [Thread-21515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:43:28.915 [DEBUG] [Thread-21515] [transport.py] [_log()] Compression: none
2026-04-15T15:43:28.915 [DEBUG] [Thread-21515] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:43:28.975 [DEBUG] [Thread-21515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:43:28.976 [DEBUG] [Thread-21515] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:43:28.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:43:28.976 [DEBUG] [Thread-21515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:43:28.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:43:29.032 [DEBUG] [Thread-21515] [transport.py] [_log()] userauth is OK
2026-04-15T15:43:29.033 [DEBUG] [Thread-21515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:43:29.033 [DEBUG] [Thread-21515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:43:29.033 [DEBUG] [Thread-21515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:43:29.033 [DEBUG] [Thread-21515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:43:29.058 [INFO] [Thread-21515] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:43:29.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:43:29.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:43:29.885 [DEBUG] [Thread-21515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:43:29.885 [DEBUG] [Thread-21515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:43:29.933 [DEBUG] [Thread-21515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:43:29.933 [DEBUG] [Thread-21515] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:43:29.942 [DEBUG] [Thread-21515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:43:29.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:43:29.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')
2026-04-15T15:43:29.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') -> 00000000
2026-04-15T15:43:29.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:43:29.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:43:29.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:43:29.984 [DEBUG] [Thread-21515] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:43:33.824 [DEBUG] [Thread-21517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:43:36.229 [DEBUG] [Thread-21518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:43:51.268 [DEBUG] [Thread-21519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:44:00.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:44:00.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:44:00.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
2026-04-15T15:44:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 43, 19), 9.55032, 52.7949, 0.0, 11.6111, 14.4702, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:44:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:43:19
2026-04-15T15:44:01.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:44:02.082 [DEBUG] [Thread-21520] [transport.py] [_log()] starting thread (client mode): 0xee9ada50
2026-04-15T15:44:02.082 [DEBUG] [Thread-21520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:44:02.102 [DEBUG] [Thread-21520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:44:02.102 [INFO] [Thread-21520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:44:02.105 [DEBUG] [Thread-21520] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:44:02.105 [DEBUG] [Thread-21520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:44:02.105 [DEBUG] [Thread-21520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:44:02.105 [DEBUG] [Thread-21520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:44:02.105 [DEBUG] [Thread-21520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:44:02.105 [DEBUG] [Thread-21520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:44:02.105 [DEBUG] [Thread-21520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:44:02.105 [DEBUG] [Thread-21520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:44:02.105 [DEBUG] [Thread-21520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:44:02.105 [DEBUG] [Thread-21520] [transport.py] [_log()] client lang: <none>
2026-04-15T15:44:02.106 [DEBUG] [Thread-21520] [transport.py] [_log()] server lang: <none>
2026-04-15T15:44:02.106 [DEBUG] [Thread-21520] [transport.py] [_log()] kex follows: False
2026-04-15T15:44:02.106 [DEBUG] [Thread-21520] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:44:02.106 [DEBUG] [Thread-21520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:44:02.106 [DEBUG] [Thread-21520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:44:02.106 [DEBUG] [Thread-21520] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:44:02.106 [DEBUG] [Thread-21520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:44:02.106 [DEBUG] [Thread-21520] [transport.py] [_log()] Compression: none
2026-04-15T15:44:02.106 [DEBUG] [Thread-21520] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:44:02.123 [DEBUG] [Thread-21520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:44:02.123 [DEBUG] [Thread-21520] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:44:02.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:44:02.124 [DEBUG] [Thread-21520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:44:02.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:44:02.125 [DEBUG] [Thread-21520] [transport.py] [_log()] userauth is OK
2026-04-15T15:44:02.125 [DEBUG] [Thread-21520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:44:02.125 [DEBUG] [Thread-21520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:44:02.125 [DEBUG] [Thread-21520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:44:02.125 [DEBUG] [Thread-21520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:44:02.144 [INFO] [Thread-21520] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:44:02.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:44:02.779 [DEBUG] [Thread-21520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:44:02.779 [DEBUG] [Thread-21520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:44:02.780 [DEBUG] [Thread-21520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:44:02.820 [DEBUG] [Thread-21520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:44:02.820 [DEBUG] [Thread-21520] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:44:02.823 [DEBUG] [Thread-21520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:44:02.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:44:02.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:44:02.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:44:02.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:44:02.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:44:02.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:44:02.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:44:02.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:44:02.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:44:02.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.572011 -999.00  +14.70  13.19     58   +6.60 1 1 1 1 1   887    0 7.49 -10.41 ----- 12.5 13.2 350.2 21.3 20.8 -28.0 20.1 -27.2 21.0 -24.0 22.0 -26.4
2026-04-15T15:44:02.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:44:02.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:44:02.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.572011
2026-04-15T15:44:02.848 [DEBUG] [Thread-21520] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:44:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:44:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:44:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:44:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:44:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:44:02.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:43:19', tmtdew=9.55032, humidity=52.7949, cloud=0.0, wind=11.6111, temperature=14.4702, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:43:41.750', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:44:03.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:44:03.107 [DEBUG] [Thread-21523] [transport.py] [_log()] starting thread (client mode): 0xee927790
2026-04-15T15:44:03.108 [DEBUG] [Thread-21523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:44:03.124 [DEBUG] [Thread-21523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:44:03.124 [INFO] [Thread-21523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:44:03.131 [DEBUG] [Thread-21523] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:44:03.131 [DEBUG] [Thread-21523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:44:03.132 [DEBUG] [Thread-21523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:44:03.132 [DEBUG] [Thread-21523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:44:03.132 [DEBUG] [Thread-21523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:44:03.132 [DEBUG] [Thread-21523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:44:03.132 [DEBUG] [Thread-21523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:44:03.132 [DEBUG] [Thread-21523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:44:03.132 [DEBUG] [Thread-21523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:44:03.132 [DEBUG] [Thread-21523] [transport.py] [_log()] client lang: <none>
2026-04-15T15:44:03.132 [DEBUG] [Thread-21523] [transport.py] [_log()] server lang: <none>
2026-04-15T15:44:03.132 [DEBUG] [Thread-21523] [transport.py] [_log()] kex follows: False
2026-04-15T15:44:03.132 [DEBUG] [Thread-21523] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:44:03.132 [DEBUG] [Thread-21523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:44:03.133 [DEBUG] [Thread-21523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:44:03.133 [DEBUG] [Thread-21523] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:44:03.133 [DEBUG] [Thread-21523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:44:03.133 [DEBUG] [Thread-21523] [transport.py] [_log()] Compression: none
2026-04-15T15:44:03.133 [DEBUG] [Thread-21523] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:44:03.187 [DEBUG] [Thread-21523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:44:03.187 [DEBUG] [Thread-21523] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:44:03.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:44:03.188 [DEBUG] [Thread-21523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:44:03.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:44:03.245 [DEBUG] [Thread-21523] [transport.py] [_log()] userauth is OK
2026-04-15T15:44:03.245 [DEBUG] [Thread-21523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:44:03.245 [DEBUG] [Thread-21523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:44:03.245 [DEBUG] [Thread-21523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:44:03.245 [DEBUG] [Thread-21523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:44:03.270 [INFO] [Thread-21523] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:44:03.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:44:03.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:44:04.123 [DEBUG] [Thread-21523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:44:04.123 [DEBUG] [Thread-21523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:44:04.171 [DEBUG] [Thread-21523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:44:04.171 [DEBUG] [Thread-21523] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:44:04.180 [DEBUG] [Thread-21523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:44:04.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:44:04.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')
2026-04-15T15:44:04.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
2026-04-15T15:44:04.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:44:04.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:44:04.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:44:04.217 [DEBUG] [Thread-21523] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:44:06.297 [DEBUG] [Thread-21525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:44:14.105 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:44:14.106 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:44:21.335 [DEBUG] [Thread-21526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:44:33.901 [DEBUG] [Thread-21527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:44:34.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:44:34.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:44:34.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
2026-04-15T15:44:35.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 43, 55), 10.1831, 50.5958, 0.0, 17.5025, 15.3736, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:44:35.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:43:55
2026-04-15T15:44:35.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:44:36.364 [DEBUG] [Thread-21528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:44:36.414 [DEBUG] [Thread-21529] [transport.py] [_log()] starting thread (client mode): 0xee9bff10
2026-04-15T15:44:36.414 [DEBUG] [Thread-21529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:44:36.433 [DEBUG] [Thread-21529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:44:36.433 [INFO] [Thread-21529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:44:36.436 [DEBUG] [Thread-21529] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:44:36.436 [DEBUG] [Thread-21529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:44:36.436 [DEBUG] [Thread-21529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] client lang: <none>
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] server lang: <none>
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] kex follows: False
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] Compression: none
2026-04-15T15:44:36.437 [DEBUG] [Thread-21529] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:44:36.454 [DEBUG] [Thread-21529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:44:36.455 [DEBUG] [Thread-21529] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:44:36.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:44:36.455 [DEBUG] [Thread-21529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:44:36.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:44:36.456 [DEBUG] [Thread-21529] [transport.py] [_log()] userauth is OK
2026-04-15T15:44:36.456 [DEBUG] [Thread-21529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:44:36.456 [DEBUG] [Thread-21529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:44:36.456 [DEBUG] [Thread-21529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:44:36.457 [DEBUG] [Thread-21529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:44:36.470 [INFO] [Thread-21529] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:44:36.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:44:37.116 [DEBUG] [Thread-21529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:44:37.116 [DEBUG] [Thread-21529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:44:37.117 [DEBUG] [Thread-21529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:44:37.157 [DEBUG] [Thread-21529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:44:37.157 [DEBUG] [Thread-21529] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:44:37.160 [DEBUG] [Thread-21529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:44:37.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:44:37.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:44:37.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:44:37.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:44:37.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:44:37.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:44:37.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:44:37.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:44:37.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:44:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.572358 -999.00  +14.90   9.81     58   +6.70 1 1 1 1 1   887    0 7.53 -8.47 ----- 20.3 9.8 2.2 19.9 20.9 -28.3 20.0 -26.8 21.0 -24.9 21.9 -26.6
2026-04-15T15:44:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:44:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:44:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.572358
2026-04-15T15:44:37.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:44:37.186 [DEBUG] [Thread-21529] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:44:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:44:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:44:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:44:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:44:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:43:55', tmtdew=10.1831, humidity=50.5958, cloud=0.0, wind=17.5025, temperature=15.3736, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:44:11.731', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:44:37.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:44:37.447 [DEBUG] [Thread-21532] [transport.py] [_log()] starting thread (client mode): 0xee9be200
2026-04-15T15:44:37.447 [DEBUG] [Thread-21532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:44:37.461 [DEBUG] [Thread-21532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:44:37.461 [INFO] [Thread-21532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:44:37.469 [DEBUG] [Thread-21532] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:44:37.469 [DEBUG] [Thread-21532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:44:37.469 [DEBUG] [Thread-21532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:44:37.469 [DEBUG] [Thread-21532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:44:37.469 [DEBUG] [Thread-21532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:44:37.469 [DEBUG] [Thread-21532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:44:37.469 [DEBUG] [Thread-21532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:44:37.469 [DEBUG] [Thread-21532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:44:37.469 [DEBUG] [Thread-21532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:44:37.470 [DEBUG] [Thread-21532] [transport.py] [_log()] client lang: <none>
2026-04-15T15:44:37.470 [DEBUG] [Thread-21532] [transport.py] [_log()] server lang: <none>
2026-04-15T15:44:37.470 [DEBUG] [Thread-21532] [transport.py] [_log()] kex follows: False
2026-04-15T15:44:37.470 [DEBUG] [Thread-21532] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:44:37.470 [DEBUG] [Thread-21532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:44:37.470 [DEBUG] [Thread-21532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:44:37.470 [DEBUG] [Thread-21532] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:44:37.470 [DEBUG] [Thread-21532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:44:37.470 [DEBUG] [Thread-21532] [transport.py] [_log()] Compression: none
2026-04-15T15:44:37.470 [DEBUG] [Thread-21532] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:44:37.527 [DEBUG] [Thread-21532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:44:37.527 [DEBUG] [Thread-21532] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:44:37.528 [DEBUG] [Thread-21532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:44:37.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:44:37.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:44:37.584 [DEBUG] [Thread-21532] [transport.py] [_log()] userauth is OK
2026-04-15T15:44:37.584 [DEBUG] [Thread-21532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:44:37.585 [DEBUG] [Thread-21532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:44:37.585 [DEBUG] [Thread-21532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:44:37.585 [DEBUG] [Thread-21532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:44:37.610 [INFO] [Thread-21532] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:44:37.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:44:37.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:44:38.444 [DEBUG] [Thread-21532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:44:38.444 [DEBUG] [Thread-21532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:44:38.494 [DEBUG] [Thread-21532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:44:38.494 [DEBUG] [Thread-21532] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:44:38.503 [DEBUG] [Thread-21532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:44:38.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:44:38.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')
2026-04-15T15:44:38.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
2026-04-15T15:44:38.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:44:38.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:44:38.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:44:38.541 [DEBUG] [Thread-21532] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:44:51.393 [DEBUG] [Thread-21534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:45:06.435 [DEBUG] [Thread-21535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:45:08.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:45:08.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:45:08.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:45:09.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 44, 30), 9.50819, 53.0794, 0.0, 11.5405, 14.6369, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:45:09.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:44:30
2026-04-15T15:45:10.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:45:10.709 [DEBUG] [Thread-21536] [transport.py] [_log()] starting thread (client mode): 0xee9be260
2026-04-15T15:45:10.710 [DEBUG] [Thread-21536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:45:10.728 [DEBUG] [Thread-21536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:45:10.729 [INFO] [Thread-21536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:45:10.732 [DEBUG] [Thread-21536] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:45:10.732 [DEBUG] [Thread-21536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:45:10.732 [DEBUG] [Thread-21536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:45:10.732 [DEBUG] [Thread-21536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:45:10.732 [DEBUG] [Thread-21536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:45:10.732 [DEBUG] [Thread-21536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:45:10.732 [DEBUG] [Thread-21536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:45:10.732 [DEBUG] [Thread-21536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:45:10.733 [DEBUG] [Thread-21536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:45:10.733 [DEBUG] [Thread-21536] [transport.py] [_log()] client lang: <none>
2026-04-15T15:45:10.733 [DEBUG] [Thread-21536] [transport.py] [_log()] server lang: <none>
2026-04-15T15:45:10.733 [DEBUG] [Thread-21536] [transport.py] [_log()] kex follows: False
2026-04-15T15:45:10.733 [DEBUG] [Thread-21536] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:45:10.733 [DEBUG] [Thread-21536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:45:10.733 [DEBUG] [Thread-21536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:45:10.733 [DEBUG] [Thread-21536] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:45:10.733 [DEBUG] [Thread-21536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:45:10.733 [DEBUG] [Thread-21536] [transport.py] [_log()] Compression: none
2026-04-15T15:45:10.734 [DEBUG] [Thread-21536] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:45:10.749 [DEBUG] [Thread-21536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:45:10.750 [DEBUG] [Thread-21536] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:45:10.750 [DEBUG] [Thread-21536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:45:10.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:45:10.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:45:10.751 [DEBUG] [Thread-21536] [transport.py] [_log()] userauth is OK
2026-04-15T15:45:10.752 [DEBUG] [Thread-21536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:45:10.752 [DEBUG] [Thread-21536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:45:10.752 [DEBUG] [Thread-21536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:45:10.752 [DEBUG] [Thread-21536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:45:10.775 [INFO] [Thread-21536] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:45:10.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:45:14.248 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:45:14.249 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:45:16.760 [DEBUG] [Thread-21536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:45:16.760 [DEBUG] [Thread-21536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:45:16.760 [DEBUG] [Thread-21536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:45:16.801 [DEBUG] [Thread-21536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:45:16.801 [DEBUG] [Thread-21536] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:45:16.804 [DEBUG] [Thread-21536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:45:16.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:45:16.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:45:16.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:45:16.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:45:16.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:45:16.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:45:16.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:45:16.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:45:16.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:45:16.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.572705 -999.00  +14.50  14.46     57   +6.20 1 1 1 1 1   887    0 7.56 -6.44 ----- 12.2 14.5 345.5 23.4 20.8 -29.5 19.9 -28.4 21.0 -25.0 22.0 -26.9
2026-04-15T15:45:16.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:45:16.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:45:16.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.572705
2026-04-15T15:45:16.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:45:16.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:45:16.883 [DEBUG] [Thread-21536] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:45:16.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:45:16.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:45:16.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:45:16.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:44:30', tmtdew=9.50819, humidity=53.0794, cloud=0.0, wind=11.5405, temperature=14.6369, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:44:41.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:45:17.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:45:17.142 [DEBUG] [Thread-21539] [transport.py] [_log()] starting thread (client mode): 0xee9bed70
2026-04-15T15:45:17.143 [DEBUG] [Thread-21539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:45:17.158 [DEBUG] [Thread-21539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:45:17.159 [INFO] [Thread-21539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:45:17.168 [DEBUG] [Thread-21539] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:45:17.168 [DEBUG] [Thread-21539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:45:17.169 [DEBUG] [Thread-21539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:45:17.169 [DEBUG] [Thread-21539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:45:17.169 [DEBUG] [Thread-21539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:45:17.169 [DEBUG] [Thread-21539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:45:17.169 [DEBUG] [Thread-21539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:45:17.169 [DEBUG] [Thread-21539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:45:17.169 [DEBUG] [Thread-21539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:45:17.169 [DEBUG] [Thread-21539] [transport.py] [_log()] client lang: <none>
2026-04-15T15:45:17.169 [DEBUG] [Thread-21539] [transport.py] [_log()] server lang: <none>
2026-04-15T15:45:17.169 [DEBUG] [Thread-21539] [transport.py] [_log()] kex follows: False
2026-04-15T15:45:17.169 [DEBUG] [Thread-21539] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:45:17.169 [DEBUG] [Thread-21539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:45:17.170 [DEBUG] [Thread-21539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:45:17.170 [DEBUG] [Thread-21539] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:45:17.170 [DEBUG] [Thread-21539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:45:17.170 [DEBUG] [Thread-21539] [transport.py] [_log()] Compression: none
2026-04-15T15:45:17.170 [DEBUG] [Thread-21539] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:45:17.223 [DEBUG] [Thread-21539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:45:17.224 [DEBUG] [Thread-21539] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:45:17.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:45:17.224 [DEBUG] [Thread-21539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:45:17.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:45:17.280 [DEBUG] [Thread-21539] [transport.py] [_log()] userauth is OK
2026-04-15T15:45:17.280 [DEBUG] [Thread-21539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:45:17.281 [DEBUG] [Thread-21539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:45:17.281 [DEBUG] [Thread-21539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:45:17.281 [DEBUG] [Thread-21539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:45:17.308 [INFO] [Thread-21539] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:45:17.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:45:17.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:45:18.191 [DEBUG] [Thread-21539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:45:18.191 [DEBUG] [Thread-21539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:45:18.239 [DEBUG] [Thread-21539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:45:18.239 [DEBUG] [Thread-21539] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:45:18.248 [DEBUG] [Thread-21539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:45:18.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:45:18.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')
2026-04-15T15:45:18.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
2026-04-15T15:45:18.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:45:18.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:45:18.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:45:18.283 [DEBUG] [Thread-21539] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:45:21.464 [DEBUG] [Thread-21541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:45:34.002 [DEBUG] [Thread-21542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:45:36.510 [DEBUG] [Thread-21543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:45:48.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:45:48.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:45:48.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
2026-04-15T15:45:49.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 45, 41), 10.1738, 50.6284, 0.0, 11.893, 15.3729, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:45:49.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:45:41
2026-04-15T15:45:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:45:50.441 [DEBUG] [Thread-21544] [transport.py] [_log()] starting thread (client mode): 0xee925ba0
2026-04-15T15:45:50.441 [DEBUG] [Thread-21544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:45:50.461 [DEBUG] [Thread-21544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:45:50.462 [INFO] [Thread-21544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:45:50.463 [DEBUG] [Thread-21544] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:45:50.463 [DEBUG] [Thread-21544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:45:50.463 [DEBUG] [Thread-21544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:45:50.463 [DEBUG] [Thread-21544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:45:50.464 [DEBUG] [Thread-21544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:45:50.464 [DEBUG] [Thread-21544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:45:50.464 [DEBUG] [Thread-21544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:45:50.464 [DEBUG] [Thread-21544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:45:50.464 [DEBUG] [Thread-21544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:45:50.464 [DEBUG] [Thread-21544] [transport.py] [_log()] client lang: <none>
2026-04-15T15:45:50.464 [DEBUG] [Thread-21544] [transport.py] [_log()] server lang: <none>
2026-04-15T15:45:50.464 [DEBUG] [Thread-21544] [transport.py] [_log()] kex follows: False
2026-04-15T15:45:50.464 [DEBUG] [Thread-21544] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:45:50.464 [DEBUG] [Thread-21544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:45:50.464 [DEBUG] [Thread-21544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:45:50.464 [DEBUG] [Thread-21544] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:45:50.465 [DEBUG] [Thread-21544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:45:50.465 [DEBUG] [Thread-21544] [transport.py] [_log()] Compression: none
2026-04-15T15:45:50.465 [DEBUG] [Thread-21544] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:45:50.473 [DEBUG] [Thread-21544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:45:50.474 [DEBUG] [Thread-21544] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:45:50.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:45:50.475 [DEBUG] [Thread-21544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:45:50.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:45:50.475 [DEBUG] [Thread-21544] [transport.py] [_log()] userauth is OK
2026-04-15T15:45:50.476 [DEBUG] [Thread-21544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:45:50.476 [DEBUG] [Thread-21544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:45:50.476 [DEBUG] [Thread-21544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:45:50.476 [DEBUG] [Thread-21544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:45:50.494 [INFO] [Thread-21544] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:45:50.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:45:51.242 [DEBUG] [Thread-21544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:45:51.243 [DEBUG] [Thread-21544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:45:51.243 [DEBUG] [Thread-21544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:45:51.283 [DEBUG] [Thread-21544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:45:51.283 [DEBUG] [Thread-21544] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:45:51.286 [DEBUG] [Thread-21544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:45:51.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:45:51.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:45:51.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:45:51.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:45:51.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:45:51.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:45:51.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:45:51.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:45:51.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:45:51.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.573053 -999.00  +14.50  11.96     58   +6.40 1 1 1 1 1   887    0 7.60 -6.24 ----- 12.7 12.0 298.6 15.1 20.8 -29.3 20.0 -27.9 21.0 -25.5 21.9 -27.1
2026-04-15T15:45:51.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:45:51.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:45:51.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.573053
2026-04-15T15:45:51.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:45:51.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:45:51.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:45:51.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:45:51.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:45:51.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:45:41', tmtdew=10.1738, humidity=50.6284, cloud=0.0, wind=11.893, temperature=15.3729, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:45:11.779', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:45:51.312 [DEBUG] [Thread-21544] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:45:51.540 [DEBUG] [Thread-21547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:45:51.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:45:51.566 [DEBUG] [Thread-21548] [transport.py] [_log()] starting thread (client mode): 0xee925f30
2026-04-15T15:45:51.567 [DEBUG] [Thread-21548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:45:51.581 [DEBUG] [Thread-21548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:45:51.581 [INFO] [Thread-21548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:45:51.588 [DEBUG] [Thread-21548] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:45:51.588 [DEBUG] [Thread-21548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:45:51.588 [DEBUG] [Thread-21548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:45:51.588 [DEBUG] [Thread-21548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:45:51.589 [DEBUG] [Thread-21548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:45:51.589 [DEBUG] [Thread-21548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:45:51.589 [DEBUG] [Thread-21548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:45:51.589 [DEBUG] [Thread-21548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:45:51.589 [DEBUG] [Thread-21548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:45:51.589 [DEBUG] [Thread-21548] [transport.py] [_log()] client lang: <none>
2026-04-15T15:45:51.589 [DEBUG] [Thread-21548] [transport.py] [_log()] server lang: <none>
2026-04-15T15:45:51.589 [DEBUG] [Thread-21548] [transport.py] [_log()] kex follows: False
2026-04-15T15:45:51.589 [DEBUG] [Thread-21548] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:45:51.589 [DEBUG] [Thread-21548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:45:51.589 [DEBUG] [Thread-21548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:45:51.590 [DEBUG] [Thread-21548] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:45:51.590 [DEBUG] [Thread-21548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:45:51.590 [DEBUG] [Thread-21548] [transport.py] [_log()] Compression: none
2026-04-15T15:45:51.590 [DEBUG] [Thread-21548] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:45:51.647 [DEBUG] [Thread-21548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:45:51.648 [DEBUG] [Thread-21548] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:45:51.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:45:51.649 [DEBUG] [Thread-21548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:45:51.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:45:51.704 [DEBUG] [Thread-21548] [transport.py] [_log()] userauth is OK
2026-04-15T15:45:51.704 [DEBUG] [Thread-21548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:45:51.704 [DEBUG] [Thread-21548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:45:51.705 [DEBUG] [Thread-21548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:45:51.705 [DEBUG] [Thread-21548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:45:51.729 [INFO] [Thread-21548] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:45:51.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:45:51.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:45:52.544 [DEBUG] [Thread-21548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:45:52.545 [DEBUG] [Thread-21548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:45:52.592 [DEBUG] [Thread-21548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:45:52.592 [DEBUG] [Thread-21548] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:45:52.601 [DEBUG] [Thread-21548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:45:52.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:45:52.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')
2026-04-15T15:45:52.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
2026-04-15T15:45:52.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:45:52.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:45:52.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:45:52.635 [DEBUG] [Thread-21548] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:46:06.580 [DEBUG] [Thread-21550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:46:14.389 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:46:14.391 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:46:21.610 [DEBUG] [Thread-21551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:46:22.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:46:22.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:46:22.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
2026-04-15T15:46:23.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 45, 41), 10.1738, 50.6284, 0.0, 11.893, 15.3729, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:46:23.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:45:41
2026-04-15T15:46:24.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:46:24.746 [DEBUG] [Thread-21552] [transport.py] [_log()] starting thread (client mode): 0xee9ad900
2026-04-15T15:46:24.747 [DEBUG] [Thread-21552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:46:24.767 [DEBUG] [Thread-21552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:46:24.767 [INFO] [Thread-21552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:46:24.769 [DEBUG] [Thread-21552] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:46:24.769 [DEBUG] [Thread-21552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:46:24.769 [DEBUG] [Thread-21552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:46:24.769 [DEBUG] [Thread-21552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:46:24.769 [DEBUG] [Thread-21552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:46:24.770 [DEBUG] [Thread-21552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:46:24.770 [DEBUG] [Thread-21552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:46:24.770 [DEBUG] [Thread-21552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:46:24.770 [DEBUG] [Thread-21552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:46:24.770 [DEBUG] [Thread-21552] [transport.py] [_log()] client lang: <none>
2026-04-15T15:46:24.770 [DEBUG] [Thread-21552] [transport.py] [_log()] server lang: <none>
2026-04-15T15:46:24.770 [DEBUG] [Thread-21552] [transport.py] [_log()] kex follows: False
2026-04-15T15:46:24.770 [DEBUG] [Thread-21552] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:46:24.770 [DEBUG] [Thread-21552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:46:24.770 [DEBUG] [Thread-21552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:46:24.770 [DEBUG] [Thread-21552] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:46:24.771 [DEBUG] [Thread-21552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:46:24.771 [DEBUG] [Thread-21552] [transport.py] [_log()] Compression: none
2026-04-15T15:46:24.771 [DEBUG] [Thread-21552] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:46:24.779 [DEBUG] [Thread-21552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:46:24.779 [DEBUG] [Thread-21552] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:46:24.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:46:24.780 [DEBUG] [Thread-21552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:46:24.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:46:24.781 [DEBUG] [Thread-21552] [transport.py] [_log()] userauth is OK
2026-04-15T15:46:24.781 [DEBUG] [Thread-21552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:46:24.781 [DEBUG] [Thread-21552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:46:24.781 [DEBUG] [Thread-21552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:46:24.781 [DEBUG] [Thread-21552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:46:24.800 [INFO] [Thread-21552] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:46:24.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:46:25.609 [DEBUG] [Thread-21552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:46:25.609 [DEBUG] [Thread-21552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:46:25.610 [DEBUG] [Thread-21552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:46:25.650 [DEBUG] [Thread-21552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:46:25.650 [DEBUG] [Thread-21552] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:46:25.653 [DEBUG] [Thread-21552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:46:25.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:46:25.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:46:25.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:46:25.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:46:25.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:46:25.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:46:25.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:46:25.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:46:25.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:46:25.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.573400 -999.00  +14.80  12.61     57   +6.50 1 1 1 1 1   887    0 7.70 -4.44 ----- 11.1 12.6 316.0 14.2 20.9 -29.6 20.1 -28.1 21.1 -26.3 22.1 -27.2
2026-04-15T15:46:25.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:46:25.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:46:25.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.573400
2026-04-15T15:46:25.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:46:25.679 [DEBUG] [Thread-21552] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:46:25.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:46:25.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:46:25.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:46:25.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:46:25.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:45:41', tmtdew=10.1738, humidity=50.6284, cloud=0.0, wind=11.893, temperature=15.3729, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:45:41.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:46:25.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:46:25.940 [DEBUG] [Thread-21555] [transport.py] [_log()] starting thread (client mode): 0xee925ed0
2026-04-15T15:46:25.940 [DEBUG] [Thread-21555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:46:25.955 [DEBUG] [Thread-21555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:46:25.955 [INFO] [Thread-21555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:46:25.963 [DEBUG] [Thread-21555] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:46:25.963 [DEBUG] [Thread-21555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:46:25.963 [DEBUG] [Thread-21555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:46:25.963 [DEBUG] [Thread-21555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:46:25.963 [DEBUG] [Thread-21555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:46:25.963 [DEBUG] [Thread-21555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:46:25.963 [DEBUG] [Thread-21555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:46:25.963 [DEBUG] [Thread-21555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:46:25.963 [DEBUG] [Thread-21555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:46:25.964 [DEBUG] [Thread-21555] [transport.py] [_log()] client lang: <none>
2026-04-15T15:46:25.964 [DEBUG] [Thread-21555] [transport.py] [_log()] server lang: <none>
2026-04-15T15:46:25.964 [DEBUG] [Thread-21555] [transport.py] [_log()] kex follows: False
2026-04-15T15:46:25.964 [DEBUG] [Thread-21555] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:46:25.964 [DEBUG] [Thread-21555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:46:25.964 [DEBUG] [Thread-21555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:46:25.964 [DEBUG] [Thread-21555] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:46:25.964 [DEBUG] [Thread-21555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:46:25.964 [DEBUG] [Thread-21555] [transport.py] [_log()] Compression: none
2026-04-15T15:46:25.964 [DEBUG] [Thread-21555] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:46:26.022 [DEBUG] [Thread-21555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:46:26.022 [DEBUG] [Thread-21555] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:46:26.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:46:26.023 [DEBUG] [Thread-21555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:46:26.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:46:26.080 [DEBUG] [Thread-21555] [transport.py] [_log()] userauth is OK
2026-04-15T15:46:26.080 [DEBUG] [Thread-21555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:46:26.081 [DEBUG] [Thread-21555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:46:26.081 [DEBUG] [Thread-21555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:46:26.081 [DEBUG] [Thread-21555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:46:26.108 [INFO] [Thread-21555] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:46:26.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:46:26.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:46:26.960 [DEBUG] [Thread-21555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:46:26.960 [DEBUG] [Thread-21555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:46:27.009 [DEBUG] [Thread-21555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:46:27.009 [DEBUG] [Thread-21555] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:46:27.017 [DEBUG] [Thread-21555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:46:27.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:46:27.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')
2026-04-15T15:46:27.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
2026-04-15T15:46:27.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:46:27.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:46:27.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:46:27.048 [DEBUG] [Thread-21555] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:46:34.095 [DEBUG] [Thread-21557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:46:36.640 [DEBUG] [Thread-21558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:46:51.686 [DEBUG] [Thread-21559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:46:57.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:46:57.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:46:57.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
2026-04-15T15:46:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 46, 17), 10.0518, 51.129, 0.0, 16.268, 14.8862, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:46:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:46:17
2026-04-15T15:46:58.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:46:59.202 [DEBUG] [Thread-21560] [transport.py] [_log()] starting thread (client mode): 0xee9be560
2026-04-15T15:46:59.202 [DEBUG] [Thread-21560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:46:59.228 [DEBUG] [Thread-21560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:46:59.228 [INFO] [Thread-21560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:46:59.228 [DEBUG] [Thread-21560] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:46:59.229 [DEBUG] [Thread-21560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:46:59.229 [DEBUG] [Thread-21560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:46:59.229 [DEBUG] [Thread-21560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:46:59.229 [DEBUG] [Thread-21560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:46:59.229 [DEBUG] [Thread-21560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:46:59.229 [DEBUG] [Thread-21560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:46:59.229 [DEBUG] [Thread-21560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:46:59.229 [DEBUG] [Thread-21560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:46:59.229 [DEBUG] [Thread-21560] [transport.py] [_log()] client lang: <none>
2026-04-15T15:46:59.229 [DEBUG] [Thread-21560] [transport.py] [_log()] server lang: <none>
2026-04-15T15:46:59.229 [DEBUG] [Thread-21560] [transport.py] [_log()] kex follows: False
2026-04-15T15:46:59.230 [DEBUG] [Thread-21560] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:46:59.230 [DEBUG] [Thread-21560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:46:59.230 [DEBUG] [Thread-21560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:46:59.230 [DEBUG] [Thread-21560] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:46:59.230 [DEBUG] [Thread-21560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:46:59.230 [DEBUG] [Thread-21560] [transport.py] [_log()] Compression: none
2026-04-15T15:46:59.230 [DEBUG] [Thread-21560] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:46:59.248 [DEBUG] [Thread-21560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:46:59.249 [DEBUG] [Thread-21560] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:46:59.249 [DEBUG] [Thread-21560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:46:59.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:46:59.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:46:59.251 [DEBUG] [Thread-21560] [transport.py] [_log()] userauth is OK
2026-04-15T15:46:59.251 [DEBUG] [Thread-21560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:46:59.251 [DEBUG] [Thread-21560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:46:59.251 [DEBUG] [Thread-21560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:46:59.251 [DEBUG] [Thread-21560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:46:59.275 [INFO] [Thread-21560] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:46:59.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:47:00.054 [DEBUG] [Thread-21560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:47:00.055 [DEBUG] [Thread-21560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:47:00.055 [DEBUG] [Thread-21560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:47:00.095 [DEBUG] [Thread-21560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:47:00.095 [DEBUG] [Thread-21560] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:47:00.098 [DEBUG] [Thread-21560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:47:00.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:47:00.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:47:00.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:47:00.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:47:00.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:47:00.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:47:00.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:47:00.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:47:00.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:47:00.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.574094 -999.00  +15.20  18.51     56   +6.50 1 1 1 1 1   887    0 7.90 0.47 ----- 19.6 18.5 313.4 23.4 20.9 -30.2 20.1 -29.1 21.1 -26.8 22.2 -27.7
2026-04-15T15:47:00.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:47:00.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:47:00.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.574094
2026-04-15T15:47:00.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:47:00.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:47:00.127 [DEBUG] [Thread-21560] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:47:00.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:47:00.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:47:00.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:47:00.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:46:17', tmtdew=10.0518, humidity=51.129, cloud=0.0, wind=16.268, temperature=14.8862, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:46:41.722', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:47:00.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:47:00.388 [DEBUG] [Thread-21563] [transport.py] [_log()] starting thread (client mode): 0xee9bff10
2026-04-15T15:47:00.388 [DEBUG] [Thread-21563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:47:00.401 [DEBUG] [Thread-21563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:47:00.401 [INFO] [Thread-21563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:47:00.409 [DEBUG] [Thread-21563] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:47:00.409 [DEBUG] [Thread-21563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:47:00.409 [DEBUG] [Thread-21563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:47:00.409 [DEBUG] [Thread-21563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:47:00.409 [DEBUG] [Thread-21563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:47:00.409 [DEBUG] [Thread-21563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:47:00.409 [DEBUG] [Thread-21563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:47:00.409 [DEBUG] [Thread-21563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:47:00.409 [DEBUG] [Thread-21563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:47:00.409 [DEBUG] [Thread-21563] [transport.py] [_log()] client lang: <none>
2026-04-15T15:47:00.410 [DEBUG] [Thread-21563] [transport.py] [_log()] server lang: <none>
2026-04-15T15:47:00.410 [DEBUG] [Thread-21563] [transport.py] [_log()] kex follows: False
2026-04-15T15:47:00.410 [DEBUG] [Thread-21563] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:47:00.410 [DEBUG] [Thread-21563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:47:00.410 [DEBUG] [Thread-21563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:47:00.410 [DEBUG] [Thread-21563] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:47:00.410 [DEBUG] [Thread-21563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:47:00.410 [DEBUG] [Thread-21563] [transport.py] [_log()] Compression: none
2026-04-15T15:47:00.410 [DEBUG] [Thread-21563] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:47:00.467 [DEBUG] [Thread-21563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:47:00.468 [DEBUG] [Thread-21563] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:47:00.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:47:00.468 [DEBUG] [Thread-21563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:47:00.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:47:00.526 [DEBUG] [Thread-21563] [transport.py] [_log()] userauth is OK
2026-04-15T15:47:00.526 [DEBUG] [Thread-21563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:47:00.527 [DEBUG] [Thread-21563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:47:00.527 [DEBUG] [Thread-21563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:47:00.527 [DEBUG] [Thread-21563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:47:00.554 [INFO] [Thread-21563] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:47:00.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:47:00.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:47:01.398 [DEBUG] [Thread-21563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:47:01.399 [DEBUG] [Thread-21563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:47:01.446 [DEBUG] [Thread-21563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:47:01.446 [DEBUG] [Thread-21563] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:47:01.455 [DEBUG] [Thread-21563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:47:01.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:47: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')
2026-04-15T15:47: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
2026-04-15T15:47:01.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:47:01.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:47:01.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:47:01.489 [DEBUG] [Thread-21563] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:47:06.719 [DEBUG] [Thread-21565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:47:14.531 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:47:14.532 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:47:21.764 [DEBUG] [Thread-21566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:47:31.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:47:31.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:47:31.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
2026-04-15T15:47:32.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 46, 52), 10.3864, 49.9655, 0.0, 21.8066, 15.6709, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:47:32.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:46:52
2026-04-15T15:47:33.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:47:33.656 [DEBUG] [Thread-21567] [transport.py] [_log()] starting thread (client mode): 0xee9ac130
2026-04-15T15:47:33.656 [DEBUG] [Thread-21567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:47:33.677 [DEBUG] [Thread-21567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:47:33.677 [INFO] [Thread-21567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:47:33.680 [DEBUG] [Thread-21567] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:47:33.680 [DEBUG] [Thread-21567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:47:33.681 [DEBUG] [Thread-21567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:47:33.681 [DEBUG] [Thread-21567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:47:33.681 [DEBUG] [Thread-21567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:47:33.681 [DEBUG] [Thread-21567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:47:33.681 [DEBUG] [Thread-21567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:47:33.681 [DEBUG] [Thread-21567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:47:33.681 [DEBUG] [Thread-21567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:47:33.681 [DEBUG] [Thread-21567] [transport.py] [_log()] client lang: <none>
2026-04-15T15:47:33.681 [DEBUG] [Thread-21567] [transport.py] [_log()] server lang: <none>
2026-04-15T15:47:33.681 [DEBUG] [Thread-21567] [transport.py] [_log()] kex follows: False
2026-04-15T15:47:33.681 [DEBUG] [Thread-21567] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:47:33.682 [DEBUG] [Thread-21567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:47:33.682 [DEBUG] [Thread-21567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:47:33.682 [DEBUG] [Thread-21567] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:47:33.682 [DEBUG] [Thread-21567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:47:33.682 [DEBUG] [Thread-21567] [transport.py] [_log()] Compression: none
2026-04-15T15:47:33.682 [DEBUG] [Thread-21567] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:47:33.698 [DEBUG] [Thread-21567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:47:33.699 [DEBUG] [Thread-21567] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:47:33.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:47:33.699 [DEBUG] [Thread-21567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:47:33.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:47:33.700 [DEBUG] [Thread-21567] [transport.py] [_log()] userauth is OK
2026-04-15T15:47:33.700 [DEBUG] [Thread-21567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:47:33.700 [DEBUG] [Thread-21567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:47:33.701 [DEBUG] [Thread-21567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:47:33.701 [DEBUG] [Thread-21567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:47:33.726 [INFO] [Thread-21567] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:47:33.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:47:34.188 [DEBUG] [Thread-21569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:47:34.503 [DEBUG] [Thread-21567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:47:34.503 [DEBUG] [Thread-21567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:47:34.503 [DEBUG] [Thread-21567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:47:34.544 [DEBUG] [Thread-21567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:47:34.544 [DEBUG] [Thread-21567] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:47:34.546 [DEBUG] [Thread-21567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:47:34.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:47:34.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:47:34.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:47:34.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:47:34.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:47:34.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:47:34.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:47:34.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:47:34.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:47:34.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.574442 -999.00  +14.70  16.46     55   +6.00 1 1 1 1 1   887    0 7.98 3.66 ----- 14.3 16.5 309.4 22.0 20.9 -29.6 20.0 -29.2 21.1 -26.2 22.1 -27.6
2026-04-15T15:47:34.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:47:34.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:47:34.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.574442
2026-04-15T15:47:34.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:47:34.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:47:34.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:47:34.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:47:34.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:47:34.567 [DEBUG] [Thread-21567] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:47:34.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:46:52', tmtdew=10.3864, humidity=49.9655, cloud=0.0, wind=21.8066, temperature=15.6709, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:47:11.789', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:47:34.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:47:34.776 [DEBUG] [Thread-21571] [transport.py] [_log()] starting thread (client mode): 0xee91c880
2026-04-15T15:47:34.776 [DEBUG] [Thread-21571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:47:34.790 [DEBUG] [Thread-21571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:47:34.790 [INFO] [Thread-21571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:47:34.797 [DEBUG] [Thread-21571] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:47:34.797 [DEBUG] [Thread-21571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:47:34.797 [DEBUG] [Thread-21571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:47:34.797 [DEBUG] [Thread-21571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:47:34.797 [DEBUG] [Thread-21571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:47:34.797 [DEBUG] [Thread-21571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:47:34.798 [DEBUG] [Thread-21571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:47:34.798 [DEBUG] [Thread-21571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:47:34.798 [DEBUG] [Thread-21571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:47:34.798 [DEBUG] [Thread-21571] [transport.py] [_log()] client lang: <none>
2026-04-15T15:47:34.798 [DEBUG] [Thread-21571] [transport.py] [_log()] server lang: <none>
2026-04-15T15:47:34.798 [DEBUG] [Thread-21571] [transport.py] [_log()] kex follows: False
2026-04-15T15:47:34.798 [DEBUG] [Thread-21571] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:47:34.798 [DEBUG] [Thread-21571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:47:34.798 [DEBUG] [Thread-21571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:47:34.798 [DEBUG] [Thread-21571] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:47:34.798 [DEBUG] [Thread-21571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:47:34.798 [DEBUG] [Thread-21571] [transport.py] [_log()] Compression: none
2026-04-15T15:47:34.799 [DEBUG] [Thread-21571] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:47:34.856 [DEBUG] [Thread-21571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:47:34.856 [DEBUG] [Thread-21571] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:47:34.857 [DEBUG] [Thread-21571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:47:34.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:47:34.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:47:34.912 [DEBUG] [Thread-21571] [transport.py] [_log()] userauth is OK
2026-04-15T15:47:34.912 [DEBUG] [Thread-21571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:47:34.913 [DEBUG] [Thread-21571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:47:34.913 [DEBUG] [Thread-21571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:47:34.913 [DEBUG] [Thread-21571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:47:34.939 [INFO] [Thread-21571] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:47:34.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:47:34.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:47:35.762 [DEBUG] [Thread-21571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:47:35.762 [DEBUG] [Thread-21571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:47:35.809 [DEBUG] [Thread-21571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:47:35.809 [DEBUG] [Thread-21571] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:47:35.818 [DEBUG] [Thread-21571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:47:35.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:47:35.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')
2026-04-15T15:47:35.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') -> 00000000
2026-04-15T15:47:35.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:47:35.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:47:35.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:47:35.851 [DEBUG] [Thread-21571] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:47:36.796 [DEBUG] [Thread-21573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:47:51.839 [DEBUG] [Thread-21574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:48:05.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:48:05.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:48:05.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
2026-04-15T15:48:06.873 [DEBUG] [Thread-21575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:48:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 47, 28), 10.2716, 50.1846, 0.0, 18.581, 14.836, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:48:07.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:47:28
2026-04-15T15:48:07.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:48:08.016 [DEBUG] [Thread-21576] [transport.py] [_log()] starting thread (client mode): 0xee91dc00
2026-04-15T15:48:08.016 [DEBUG] [Thread-21576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:48:08.035 [DEBUG] [Thread-21576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:48:08.036 [INFO] [Thread-21576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:48:08.039 [DEBUG] [Thread-21576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:48:08.039 [DEBUG] [Thread-21576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:48:08.039 [DEBUG] [Thread-21576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:48:08.039 [DEBUG] [Thread-21576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:48:08.039 [DEBUG] [Thread-21576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:48:08.039 [DEBUG] [Thread-21576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:48:08.039 [DEBUG] [Thread-21576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:48:08.039 [DEBUG] [Thread-21576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:48:08.039 [DEBUG] [Thread-21576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:48:08.039 [DEBUG] [Thread-21576] [transport.py] [_log()] client lang: <none>
2026-04-15T15:48:08.040 [DEBUG] [Thread-21576] [transport.py] [_log()] server lang: <none>
2026-04-15T15:48:08.040 [DEBUG] [Thread-21576] [transport.py] [_log()] kex follows: False
2026-04-15T15:48:08.040 [DEBUG] [Thread-21576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:48:08.040 [DEBUG] [Thread-21576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:48:08.040 [DEBUG] [Thread-21576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:48:08.040 [DEBUG] [Thread-21576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:48:08.040 [DEBUG] [Thread-21576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:48:08.040 [DEBUG] [Thread-21576] [transport.py] [_log()] Compression: none
2026-04-15T15:48:08.040 [DEBUG] [Thread-21576] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:48:08.057 [DEBUG] [Thread-21576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:48:08.057 [DEBUG] [Thread-21576] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:48:08.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:48:08.058 [DEBUG] [Thread-21576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:48:08.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:48:08.060 [DEBUG] [Thread-21576] [transport.py] [_log()] userauth is OK
2026-04-15T15:48:08.060 [DEBUG] [Thread-21576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:48:08.060 [DEBUG] [Thread-21576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:48:08.060 [DEBUG] [Thread-21576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:48:08.060 [DEBUG] [Thread-21576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:48:08.093 [INFO] [Thread-21576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:48:08.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:48:08.913 [DEBUG] [Thread-21576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:48:08.913 [DEBUG] [Thread-21576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:48:08.914 [DEBUG] [Thread-21576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:48:08.954 [DEBUG] [Thread-21576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:48:08.954 [DEBUG] [Thread-21576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:48:08.957 [DEBUG] [Thread-21576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:48:08.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:48:08.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:48:08.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:48:08.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:48:08.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:48:08.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:48:08.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:48:08.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:48:08.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:48:08.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.574789 -999.00  +14.70  20.52     57   +6.50 1 1 1 1 1   887    0 7.99 7.00 ----- 22.0 20.5 298.4 24.6 20.9 -29.4 20.1 -28.5 21.1 -25.6 22.1 -27.5
2026-04-15T15:48:08.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:48:08.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:48:08.981 [DEBUG] [Thread-21576] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:48:08.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.574789
2026-04-15T15:48:08.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:48:08.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:48:08.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:48:08.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:48:08.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:48:08.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:47:28', tmtdew=10.2716, humidity=50.1846, cloud=0.0, wind=18.581, temperature=14.836, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:47:41.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:48:09.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:48:09.240 [DEBUG] [Thread-21579] [transport.py] [_log()] starting thread (client mode): 0xee91ca90
2026-04-15T15:48:09.240 [DEBUG] [Thread-21579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:48:09.254 [DEBUG] [Thread-21579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:48:09.254 [INFO] [Thread-21579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:48:09.262 [DEBUG] [Thread-21579] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:48:09.262 [DEBUG] [Thread-21579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:48:09.262 [DEBUG] [Thread-21579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:48:09.262 [DEBUG] [Thread-21579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:48:09.262 [DEBUG] [Thread-21579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:48:09.262 [DEBUG] [Thread-21579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:48:09.262 [DEBUG] [Thread-21579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:48:09.262 [DEBUG] [Thread-21579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:48:09.262 [DEBUG] [Thread-21579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:48:09.263 [DEBUG] [Thread-21579] [transport.py] [_log()] client lang: <none>
2026-04-15T15:48:09.263 [DEBUG] [Thread-21579] [transport.py] [_log()] server lang: <none>
2026-04-15T15:48:09.263 [DEBUG] [Thread-21579] [transport.py] [_log()] kex follows: False
2026-04-15T15:48:09.263 [DEBUG] [Thread-21579] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:48:09.263 [DEBUG] [Thread-21579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:48:09.263 [DEBUG] [Thread-21579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:48:09.263 [DEBUG] [Thread-21579] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:48:09.263 [DEBUG] [Thread-21579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:48:09.263 [DEBUG] [Thread-21579] [transport.py] [_log()] Compression: none
2026-04-15T15:48:09.263 [DEBUG] [Thread-21579] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:48:09.319 [DEBUG] [Thread-21579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:48:09.320 [DEBUG] [Thread-21579] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:48:09.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:48:09.321 [DEBUG] [Thread-21579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:48:09.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:48:09.377 [DEBUG] [Thread-21579] [transport.py] [_log()] userauth is OK
2026-04-15T15:48:09.377 [DEBUG] [Thread-21579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:48:09.377 [DEBUG] [Thread-21579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:48:09.377 [DEBUG] [Thread-21579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:48:09.377 [DEBUG] [Thread-21579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:48:09.402 [INFO] [Thread-21579] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:48:09.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:48:09.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:48:10.229 [DEBUG] [Thread-21579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:48:10.230 [DEBUG] [Thread-21579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:48:10.277 [DEBUG] [Thread-21579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:48:10.277 [DEBUG] [Thread-21579] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:48:10.286 [DEBUG] [Thread-21579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:48:10.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:48:10.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')
2026-04-15T15:48:10.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
2026-04-15T15:48:10.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:48:10.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:48:10.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:48:10.321 [DEBUG] [Thread-21579] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:48:14.672 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:48:14.673 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:48:21.903 [DEBUG] [Thread-21581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:48:34.265 [DEBUG] [Thread-21582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:48:36.947 [DEBUG] [Thread-21583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:48:40.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:48:40.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:48:40.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
2026-04-15T15:48:41.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 48, 4), 10.1229, 50.7144, 0.0, 20.9977, 14.8854, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:48:41.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:48:04
2026-04-15T15:48:42.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:48:42.524 [DEBUG] [Thread-21584] [transport.py] [_log()] starting thread (client mode): 0xf1332860
2026-04-15T15:48:42.525 [DEBUG] [Thread-21584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:48:42.544 [DEBUG] [Thread-21584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:48:42.544 [INFO] [Thread-21584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:48:42.548 [DEBUG] [Thread-21584] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:48:42.548 [DEBUG] [Thread-21584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:48:42.548 [DEBUG] [Thread-21584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:48:42.548 [DEBUG] [Thread-21584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:48:42.548 [DEBUG] [Thread-21584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:48:42.548 [DEBUG] [Thread-21584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:48:42.548 [DEBUG] [Thread-21584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:48:42.548 [DEBUG] [Thread-21584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:48:42.548 [DEBUG] [Thread-21584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:48:42.548 [DEBUG] [Thread-21584] [transport.py] [_log()] client lang: <none>
2026-04-15T15:48:42.548 [DEBUG] [Thread-21584] [transport.py] [_log()] server lang: <none>
2026-04-15T15:48:42.548 [DEBUG] [Thread-21584] [transport.py] [_log()] kex follows: False
2026-04-15T15:48:42.549 [DEBUG] [Thread-21584] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:48:42.549 [DEBUG] [Thread-21584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:48:42.549 [DEBUG] [Thread-21584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:48:42.549 [DEBUG] [Thread-21584] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:48:42.549 [DEBUG] [Thread-21584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:48:42.549 [DEBUG] [Thread-21584] [transport.py] [_log()] Compression: none
2026-04-15T15:48:42.549 [DEBUG] [Thread-21584] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:48:42.565 [DEBUG] [Thread-21584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:48:42.565 [DEBUG] [Thread-21584] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:48:42.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:48:42.566 [DEBUG] [Thread-21584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:48:42.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:48:42.567 [DEBUG] [Thread-21584] [transport.py] [_log()] userauth is OK
2026-04-15T15:48:42.567 [DEBUG] [Thread-21584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:48:42.567 [DEBUG] [Thread-21584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:48:42.567 [DEBUG] [Thread-21584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:48:42.567 [DEBUG] [Thread-21584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:48:42.584 [INFO] [Thread-21584] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:48:42.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:48:43.366 [DEBUG] [Thread-21584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:48:43.366 [DEBUG] [Thread-21584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:48:43.367 [DEBUG] [Thread-21584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:48:43.407 [DEBUG] [Thread-21584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:48:43.407 [DEBUG] [Thread-21584] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:48:43.410 [DEBUG] [Thread-21584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:48:43.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:48:43.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:48:43.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:48:43.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:48:43.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:48:43.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:48:43.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:48:43.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:48:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:48:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.575136 -999.00  +14.60  17.41     57   +6.40 1 1 1 1 1   887    0 8.24 12.15 ----- 17.7 17.4 306.0 25.6 20.8 -29.7 20.0 -28.9 20.9 -27.0 22.1 -27.3
2026-04-15T15:48:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:48:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:48:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.575136
2026-04-15T15:48:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:48:43.435 [DEBUG] [Thread-21584] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:48:43.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:48:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:48:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:48:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:48:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:48:04', tmtdew=10.1229, humidity=50.7144, cloud=0.0, wind=20.9977, temperature=14.8854, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:48:11.750', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:48:43.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:48:43.689 [DEBUG] [Thread-21587] [transport.py] [_log()] starting thread (client mode): 0xf1332620
2026-04-15T15:48:43.689 [DEBUG] [Thread-21587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:48:43.703 [DEBUG] [Thread-21587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:48:43.703 [INFO] [Thread-21587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:48:43.714 [DEBUG] [Thread-21587] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:48:43.714 [DEBUG] [Thread-21587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:48:43.714 [DEBUG] [Thread-21587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:48:43.714 [DEBUG] [Thread-21587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:48:43.714 [DEBUG] [Thread-21587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:48:43.714 [DEBUG] [Thread-21587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:48:43.714 [DEBUG] [Thread-21587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:48:43.714 [DEBUG] [Thread-21587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:48:43.714 [DEBUG] [Thread-21587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:48:43.715 [DEBUG] [Thread-21587] [transport.py] [_log()] client lang: <none>
2026-04-15T15:48:43.715 [DEBUG] [Thread-21587] [transport.py] [_log()] server lang: <none>
2026-04-15T15:48:43.715 [DEBUG] [Thread-21587] [transport.py] [_log()] kex follows: False
2026-04-15T15:48:43.715 [DEBUG] [Thread-21587] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:48:43.715 [DEBUG] [Thread-21587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:48:43.715 [DEBUG] [Thread-21587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:48:43.715 [DEBUG] [Thread-21587] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:48:43.715 [DEBUG] [Thread-21587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:48:43.715 [DEBUG] [Thread-21587] [transport.py] [_log()] Compression: none
2026-04-15T15:48:43.715 [DEBUG] [Thread-21587] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:48:43.771 [DEBUG] [Thread-21587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:48:43.772 [DEBUG] [Thread-21587] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:48:43.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:48:43.773 [DEBUG] [Thread-21587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:48:43.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:48:43.831 [DEBUG] [Thread-21587] [transport.py] [_log()] userauth is OK
2026-04-15T15:48:43.831 [DEBUG] [Thread-21587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:48:43.831 [DEBUG] [Thread-21587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:48:43.831 [DEBUG] [Thread-21587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:48:43.832 [DEBUG] [Thread-21587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:48:43.867 [INFO] [Thread-21587] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:48:43.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:48:43.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:48:44.684 [DEBUG] [Thread-21587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:48:44.685 [DEBUG] [Thread-21587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:48:44.733 [DEBUG] [Thread-21587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:48:44.734 [DEBUG] [Thread-21587] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:48:44.742 [DEBUG] [Thread-21587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:48:44.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:48:44.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')
2026-04-15T15:48:44.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
2026-04-15T15:48:44.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:48:44.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:48:44.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:48:44.777 [DEBUG] [Thread-21587] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:48:51.979 [DEBUG] [Thread-21589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:49:07.026 [DEBUG] [Thread-21590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:49:14.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:49:14.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:49:14.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
2026-04-15T15:49:14.812 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:49:14.813 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:49:16.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 48, 39), 10.6072, 49.1035, 0.0, 21.348, 15.3057, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:49:16.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:48:39
2026-04-15T15:49:16.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:49:16.931 [DEBUG] [Thread-21591] [transport.py] [_log()] starting thread (client mode): 0xf13335e0
2026-04-15T15:49:16.931 [DEBUG] [Thread-21591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:49:16.951 [DEBUG] [Thread-21591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:49:16.951 [INFO] [Thread-21591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:49:16.954 [DEBUG] [Thread-21591] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:49:16.954 [DEBUG] [Thread-21591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:49:16.954 [DEBUG] [Thread-21591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:49:16.954 [DEBUG] [Thread-21591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:49:16.954 [DEBUG] [Thread-21591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:49:16.955 [DEBUG] [Thread-21591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:49:16.955 [DEBUG] [Thread-21591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:49:16.955 [DEBUG] [Thread-21591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:49:16.955 [DEBUG] [Thread-21591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:49:16.955 [DEBUG] [Thread-21591] [transport.py] [_log()] client lang: <none>
2026-04-15T15:49:16.955 [DEBUG] [Thread-21591] [transport.py] [_log()] server lang: <none>
2026-04-15T15:49:16.955 [DEBUG] [Thread-21591] [transport.py] [_log()] kex follows: False
2026-04-15T15:49:16.955 [DEBUG] [Thread-21591] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:49:16.955 [DEBUG] [Thread-21591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:49:16.955 [DEBUG] [Thread-21591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:49:16.955 [DEBUG] [Thread-21591] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:49:16.956 [DEBUG] [Thread-21591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:49:16.956 [DEBUG] [Thread-21591] [transport.py] [_log()] Compression: none
2026-04-15T15:49:16.956 [DEBUG] [Thread-21591] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:49:16.973 [DEBUG] [Thread-21591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:49:16.973 [DEBUG] [Thread-21591] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:49:16.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:49:16.974 [DEBUG] [Thread-21591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:49:16.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:49:16.975 [DEBUG] [Thread-21591] [transport.py] [_log()] userauth is OK
2026-04-15T15:49:16.975 [DEBUG] [Thread-21591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:49:16.975 [DEBUG] [Thread-21591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:49:16.975 [DEBUG] [Thread-21591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:49:16.975 [DEBUG] [Thread-21591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:49:16.993 [INFO] [Thread-21591] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:49:16.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:49:17.789 [DEBUG] [Thread-21591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:49:17.789 [DEBUG] [Thread-21591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:49:17.790 [DEBUG] [Thread-21591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:49:17.830 [DEBUG] [Thread-21591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:49:17.830 [DEBUG] [Thread-21591] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:49:17.841 [DEBUG] [Thread-21591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:49:17.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:49:17.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:49:17.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:49:17.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:49:17.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:49:17.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:49:17.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:49:17.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:49:17.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:49:17.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.575483 -999.00  +14.70  19.58     58   +6.70 1 1 1 1 1   887    0 8.45 15.77 ----- 18.3 19.6 324.0 24.9 20.8 -29.1 20.0 -28.2 21.0 -24.8 22.1 -26.7
2026-04-15T15:49:17.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:49:17.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:49:17.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.575483
2026-04-15T15:49:17.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:49:17.862 [DEBUG] [Thread-21591] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:49:17.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:49:17.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:49:17.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:49:17.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:49:17.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:48:39', tmtdew=10.6072, humidity=49.1035, cloud=0.0, wind=21.348, temperature=15.3057, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:48:41.731', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:49:18.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:49:18.121 [DEBUG] [Thread-21594] [transport.py] [_log()] starting thread (client mode): 0xee91ed40
2026-04-15T15:49:18.122 [DEBUG] [Thread-21594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:49:18.136 [DEBUG] [Thread-21594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:49:18.136 [INFO] [Thread-21594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] client lang: <none>
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] server lang: <none>
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] kex follows: False
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:49:18.144 [DEBUG] [Thread-21594] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:49:18.145 [DEBUG] [Thread-21594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:49:18.145 [DEBUG] [Thread-21594] [transport.py] [_log()] Compression: none
2026-04-15T15:49:18.145 [DEBUG] [Thread-21594] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:49:18.199 [DEBUG] [Thread-21594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:49:18.200 [DEBUG] [Thread-21594] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:49:18.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:49:18.200 [DEBUG] [Thread-21594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:49:18.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:49:18.256 [DEBUG] [Thread-21594] [transport.py] [_log()] userauth is OK
2026-04-15T15:49:18.257 [DEBUG] [Thread-21594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:49:18.257 [DEBUG] [Thread-21594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:49:18.257 [DEBUG] [Thread-21594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:49:18.257 [DEBUG] [Thread-21594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:49:18.284 [INFO] [Thread-21594] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:49:18.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:49:18.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:49:19.126 [DEBUG] [Thread-21594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:49:19.126 [DEBUG] [Thread-21594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:49:19.174 [DEBUG] [Thread-21594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:49:19.174 [DEBUG] [Thread-21594] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:49:19.183 [DEBUG] [Thread-21594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:49:19.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:49:19.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')
2026-04-15T15:49:19.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
2026-04-15T15:49:19.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:49:19.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:49:19.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:49:19.217 [DEBUG] [Thread-21594] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:49:22.060 [DEBUG] [Thread-21596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:49:34.341 [DEBUG] [Thread-21597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:49:37.104 [DEBUG] [Thread-21598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:49:49.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:49:49.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:49:49.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
2026-04-15T15:49:50.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 49, 15), 9.80293, 51.7942, 0.0, 17.2037, 14.6525, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:49:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:49:15
2026-04-15T15:49:51.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:49:51.583 [DEBUG] [Thread-21599] [transport.py] [_log()] starting thread (client mode): 0xf1331c30
2026-04-15T15:49:51.583 [DEBUG] [Thread-21599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:49:51.603 [DEBUG] [Thread-21599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:49:51.603 [INFO] [Thread-21599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:49:51.606 [DEBUG] [Thread-21599] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:49:51.606 [DEBUG] [Thread-21599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:49:51.606 [DEBUG] [Thread-21599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:49:51.606 [DEBUG] [Thread-21599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:49:51.607 [DEBUG] [Thread-21599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:49:51.607 [DEBUG] [Thread-21599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:49:51.607 [DEBUG] [Thread-21599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:49:51.607 [DEBUG] [Thread-21599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:49:51.607 [DEBUG] [Thread-21599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:49:51.607 [DEBUG] [Thread-21599] [transport.py] [_log()] client lang: <none>
2026-04-15T15:49:51.607 [DEBUG] [Thread-21599] [transport.py] [_log()] server lang: <none>
2026-04-15T15:49:51.607 [DEBUG] [Thread-21599] [transport.py] [_log()] kex follows: False
2026-04-15T15:49:51.607 [DEBUG] [Thread-21599] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:49:51.607 [DEBUG] [Thread-21599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:49:51.607 [DEBUG] [Thread-21599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:49:51.607 [DEBUG] [Thread-21599] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:49:51.608 [DEBUG] [Thread-21599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:49:51.608 [DEBUG] [Thread-21599] [transport.py] [_log()] Compression: none
2026-04-15T15:49:51.608 [DEBUG] [Thread-21599] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:49:51.624 [DEBUG] [Thread-21599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:49:51.624 [DEBUG] [Thread-21599] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:49:51.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:49:51.625 [DEBUG] [Thread-21599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:49:51.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:49:51.668 [DEBUG] [Thread-21599] [transport.py] [_log()] userauth is OK
2026-04-15T15:49:51.668 [DEBUG] [Thread-21599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:49:51.669 [DEBUG] [Thread-21599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:49:51.669 [DEBUG] [Thread-21599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:49:51.669 [DEBUG] [Thread-21599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:49:51.705 [INFO] [Thread-21599] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:49:51.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:49:52.136 [DEBUG] [Thread-21601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:49:52.508 [DEBUG] [Thread-21599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:49:52.508 [DEBUG] [Thread-21599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:49:52.509 [DEBUG] [Thread-21599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:49:52.550 [DEBUG] [Thread-21599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:49:52.550 [DEBUG] [Thread-21599] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:49:52.553 [DEBUG] [Thread-21599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:49:52.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:49:52.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:49:52.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:49:52.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:49:52.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:49:52.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:49:52.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:49:52.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:49:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:49:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.575830 -999.00  +14.60  15.74     60   +7.00 1 1 1 1 1   887    0 8.45 18.64 ----- 13.4 15.7 326.4 20.9 20.9 -29.6 20.0 -28.1 21.1 -24.5 22.1 -26.4
2026-04-15T15:49:52.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:49:52.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:49:52.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.575830
2026-04-15T15:49:52.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:49:52.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:49:52.578 [DEBUG] [Thread-21599] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:49:52.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:49:52.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:49:52.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:49:52.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:49:15', tmtdew=9.80293, humidity=51.7942, cloud=0.0, wind=17.2037, temperature=14.6525, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:49:11.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:49:52.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:49:52.841 [DEBUG] [Thread-21603] [transport.py] [_log()] starting thread (client mode): 0xf1333130
2026-04-15T15:49:52.842 [DEBUG] [Thread-21603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:49:52.856 [DEBUG] [Thread-21603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:49:52.856 [INFO] [Thread-21603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:49:52.864 [DEBUG] [Thread-21603] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:49:52.864 [DEBUG] [Thread-21603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:49:52.864 [DEBUG] [Thread-21603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:49:52.864 [DEBUG] [Thread-21603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:49:52.864 [DEBUG] [Thread-21603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:49:52.864 [DEBUG] [Thread-21603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:49:52.864 [DEBUG] [Thread-21603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:49:52.864 [DEBUG] [Thread-21603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:49:52.864 [DEBUG] [Thread-21603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:49:52.864 [DEBUG] [Thread-21603] [transport.py] [_log()] client lang: <none>
2026-04-15T15:49:52.864 [DEBUG] [Thread-21603] [transport.py] [_log()] server lang: <none>
2026-04-15T15:49:52.864 [DEBUG] [Thread-21603] [transport.py] [_log()] kex follows: False
2026-04-15T15:49:52.865 [DEBUG] [Thread-21603] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:49:52.865 [DEBUG] [Thread-21603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:49:52.865 [DEBUG] [Thread-21603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:49:52.865 [DEBUG] [Thread-21603] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:49:52.865 [DEBUG] [Thread-21603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:49:52.865 [DEBUG] [Thread-21603] [transport.py] [_log()] Compression: none
2026-04-15T15:49:52.865 [DEBUG] [Thread-21603] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:49:52.920 [DEBUG] [Thread-21603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:49:52.920 [DEBUG] [Thread-21603] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:49:52.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:49:52.921 [DEBUG] [Thread-21603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:49:52.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:49:52.976 [DEBUG] [Thread-21603] [transport.py] [_log()] userauth is OK
2026-04-15T15:49:52.976 [DEBUG] [Thread-21603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:49:52.977 [DEBUG] [Thread-21603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:49:52.977 [DEBUG] [Thread-21603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:49:52.977 [DEBUG] [Thread-21603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:49:53.002 [INFO] [Thread-21603] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:49:53.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:49:53.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:49:53.835 [DEBUG] [Thread-21603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:49:53.835 [DEBUG] [Thread-21603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:49:53.883 [DEBUG] [Thread-21603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:49:53.883 [DEBUG] [Thread-21603] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:49:53.892 [DEBUG] [Thread-21603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:49:53.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:49:53.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')
2026-04-15T15:49:53.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
2026-04-15T15:49:53.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:49:53.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:49:53.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:49:53.927 [DEBUG] [Thread-21603] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:50:07.167 [DEBUG] [Thread-21605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:50:14.955 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:50:14.956 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:50:22.208 [DEBUG] [Thread-21606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:50:23.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:50:23.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:50:23.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
2026-04-15T15:50:25.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 49, 50), 10.0866, 51.0252, 0.0, 19.831, 15.7032, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:50:25.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:49:50
2026-04-15T15:50:25.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:50:26.076 [DEBUG] [Thread-21607] [transport.py] [_log()] starting thread (client mode): 0xee9bfb20
2026-04-15T15:50:26.076 [DEBUG] [Thread-21607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:50:26.098 [DEBUG] [Thread-21607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:50:26.098 [INFO] [Thread-21607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:50:26.101 [DEBUG] [Thread-21607] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:50:26.101 [DEBUG] [Thread-21607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:50:26.101 [DEBUG] [Thread-21607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:50:26.101 [DEBUG] [Thread-21607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:50:26.101 [DEBUG] [Thread-21607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:50:26.102 [DEBUG] [Thread-21607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:50:26.102 [DEBUG] [Thread-21607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:50:26.102 [DEBUG] [Thread-21607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:50:26.102 [DEBUG] [Thread-21607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:50:26.102 [DEBUG] [Thread-21607] [transport.py] [_log()] client lang: <none>
2026-04-15T15:50:26.102 [DEBUG] [Thread-21607] [transport.py] [_log()] server lang: <none>
2026-04-15T15:50:26.102 [DEBUG] [Thread-21607] [transport.py] [_log()] kex follows: False
2026-04-15T15:50:26.102 [DEBUG] [Thread-21607] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:50:26.102 [DEBUG] [Thread-21607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:50:26.102 [DEBUG] [Thread-21607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:50:26.102 [DEBUG] [Thread-21607] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:50:26.102 [DEBUG] [Thread-21607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:50:26.102 [DEBUG] [Thread-21607] [transport.py] [_log()] Compression: none
2026-04-15T15:50:26.102 [DEBUG] [Thread-21607] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:50:26.118 [DEBUG] [Thread-21607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:50:26.119 [DEBUG] [Thread-21607] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:50:26.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:50:26.119 [DEBUG] [Thread-21607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:50:26.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:50:26.120 [DEBUG] [Thread-21607] [transport.py] [_log()] userauth is OK
2026-04-15T15:50:26.120 [DEBUG] [Thread-21607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:50:26.120 [DEBUG] [Thread-21607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:50:26.120 [DEBUG] [Thread-21607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:50:26.120 [DEBUG] [Thread-21607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:50:26.138 [INFO] [Thread-21607] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:50:26.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:50:27.575 [DEBUG] [Thread-21607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:50:27.575 [DEBUG] [Thread-21607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:50:27.576 [DEBUG] [Thread-21607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:50:27.616 [DEBUG] [Thread-21607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:50:27.616 [DEBUG] [Thread-21607] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:50:27.619 [DEBUG] [Thread-21607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:50:27.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:50:27.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:50:27.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:50:27.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:50:27.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:50:27.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:50:27.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:50:27.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:50:27.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:50:27.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.576178 -999.00  +14.70  15.63     59   +6.90 1 1 1 1 1   887    0 8.55 21.06 ----- 18.2 15.6 15.6 25.8 20.7 -29.9 19.9 -29.0 21.0 -27.7 22.0 -27.2
2026-04-15T15:50:27.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:50:27.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:50:27.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.576178
2026-04-15T15:50:27.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:50:27.648 [DEBUG] [Thread-21607] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:50:27.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:50:27.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:50:27.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:50:27.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:50:27.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:49:50', tmtdew=10.0866, humidity=51.0252, cloud=0.0, wind=19.831, temperature=15.7032, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:49:41.779', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:50:27.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:50:27.907 [DEBUG] [Thread-21610] [transport.py] [_log()] starting thread (client mode): 0xee9bfd90
2026-04-15T15:50:27.907 [DEBUG] [Thread-21610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:50:27.922 [DEBUG] [Thread-21610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:50:27.922 [INFO] [Thread-21610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:50:27.929 [DEBUG] [Thread-21610] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:50:27.930 [DEBUG] [Thread-21610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:50:27.930 [DEBUG] [Thread-21610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:50:27.930 [DEBUG] [Thread-21610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:50:27.930 [DEBUG] [Thread-21610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:50:27.930 [DEBUG] [Thread-21610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:50:27.930 [DEBUG] [Thread-21610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:50:27.930 [DEBUG] [Thread-21610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:50:27.930 [DEBUG] [Thread-21610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:50:27.930 [DEBUG] [Thread-21610] [transport.py] [_log()] client lang: <none>
2026-04-15T15:50:27.930 [DEBUG] [Thread-21610] [transport.py] [_log()] server lang: <none>
2026-04-15T15:50:27.930 [DEBUG] [Thread-21610] [transport.py] [_log()] kex follows: False
2026-04-15T15:50:27.930 [DEBUG] [Thread-21610] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:50:27.931 [DEBUG] [Thread-21610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:50:27.931 [DEBUG] [Thread-21610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:50:27.931 [DEBUG] [Thread-21610] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:50:27.931 [DEBUG] [Thread-21610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:50:27.931 [DEBUG] [Thread-21610] [transport.py] [_log()] Compression: none
2026-04-15T15:50:27.931 [DEBUG] [Thread-21610] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:50:27.988 [DEBUG] [Thread-21610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:50:27.989 [DEBUG] [Thread-21610] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:50:27.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:50:27.989 [DEBUG] [Thread-21610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:50:27.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:50:28.045 [DEBUG] [Thread-21610] [transport.py] [_log()] userauth is OK
2026-04-15T15:50:28.045 [DEBUG] [Thread-21610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:50:28.045 [DEBUG] [Thread-21610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:50:28.045 [DEBUG] [Thread-21610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:50:28.045 [DEBUG] [Thread-21610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:50:28.070 [INFO] [Thread-21610] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:50:28.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:50:28.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:50:28.912 [DEBUG] [Thread-21610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:50:28.912 [DEBUG] [Thread-21610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:50:28.960 [DEBUG] [Thread-21610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:50:28.960 [DEBUG] [Thread-21610] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:50:28.969 [DEBUG] [Thread-21610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:50:28.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:50:28.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')
2026-04-15T15:50:28.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
2026-04-15T15:50:28.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:50:28.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:50:28.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:50:29.004 [DEBUG] [Thread-21610] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:50:34.424 [DEBUG] [Thread-21612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:50:37.239 [DEBUG] [Thread-21613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:50:52.281 [DEBUG] [Thread-21614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:50:59.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:50:59.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:50:59.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
2026-04-15T15:51:00.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 50, 26), 9.67795, 52.3635, 0.0, 20.3098, 14.7022, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:51:00.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:50:26
2026-04-15T15:51:00.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:51:01.162 [DEBUG] [Thread-21615] [transport.py] [_log()] starting thread (client mode): 0xf13332e0
2026-04-15T15:51:01.162 [DEBUG] [Thread-21615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:51:01.181 [DEBUG] [Thread-21615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:51:01.181 [INFO] [Thread-21615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:51:01.184 [DEBUG] [Thread-21615] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:51:01.185 [DEBUG] [Thread-21615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:51:01.185 [DEBUG] [Thread-21615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:51:01.185 [DEBUG] [Thread-21615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:51:01.185 [DEBUG] [Thread-21615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:51:01.185 [DEBUG] [Thread-21615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:51:01.185 [DEBUG] [Thread-21615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:51:01.185 [DEBUG] [Thread-21615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:51:01.185 [DEBUG] [Thread-21615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:51:01.185 [DEBUG] [Thread-21615] [transport.py] [_log()] client lang: <none>
2026-04-15T15:51:01.185 [DEBUG] [Thread-21615] [transport.py] [_log()] server lang: <none>
2026-04-15T15:51:01.185 [DEBUG] [Thread-21615] [transport.py] [_log()] kex follows: False
2026-04-15T15:51:01.185 [DEBUG] [Thread-21615] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:51:01.185 [DEBUG] [Thread-21615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:51:01.185 [DEBUG] [Thread-21615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:51:01.185 [DEBUG] [Thread-21615] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:51:01.186 [DEBUG] [Thread-21615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:51:01.186 [DEBUG] [Thread-21615] [transport.py] [_log()] Compression: none
2026-04-15T15:51:01.186 [DEBUG] [Thread-21615] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:51:01.202 [DEBUG] [Thread-21615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:51:01.202 [DEBUG] [Thread-21615] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:51:01.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:51:01.203 [DEBUG] [Thread-21615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:51:01.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:51:01.203 [DEBUG] [Thread-21615] [transport.py] [_log()] userauth is OK
2026-04-15T15:51:01.204 [DEBUG] [Thread-21615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:51:01.204 [DEBUG] [Thread-21615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:51:01.204 [DEBUG] [Thread-21615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:51:01.204 [DEBUG] [Thread-21615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:51:01.222 [INFO] [Thread-21615] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:51:01.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:51:01.992 [DEBUG] [Thread-21615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:51:01.992 [DEBUG] [Thread-21615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:51:01.993 [DEBUG] [Thread-21615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:51:02.033 [DEBUG] [Thread-21615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:51:02.033 [DEBUG] [Thread-21615] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:51:02.036 [DEBUG] [Thread-21615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:51:02.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:51:02.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:51:02.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:51:02.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:51:02.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:51:02.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:51:02.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:51:02.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:51:02.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:51:02.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.576525 -999.00  +14.60  12.70     59   +6.70 1 1 1 1 1   887    0 8.58 21.01 ----- 10.2 12.7 355.0 22.4 20.6 -30.3 19.8 -30.0 20.9 -26.4 21.8 -28.2
2026-04-15T15:51:02.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:51:02.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:51:02.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.576525
2026-04-15T15:51:02.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:51:02.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:51:02.062 [DEBUG] [Thread-21615] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:51:02.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:51:02.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:51:02.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:51:02.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:50:26', tmtdew=9.67795, humidity=52.3635, cloud=0.0, wind=20.3098, temperature=14.7022, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:50:11.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:51:02.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:51:02.329 [DEBUG] [Thread-21618] [transport.py] [_log()] starting thread (client mode): 0xee9bc910
2026-04-15T15:51:02.330 [DEBUG] [Thread-21618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:51:02.346 [DEBUG] [Thread-21618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:51:02.346 [INFO] [Thread-21618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:51:02.353 [DEBUG] [Thread-21618] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:51:02.353 [DEBUG] [Thread-21618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:51:02.354 [DEBUG] [Thread-21618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:51:02.354 [DEBUG] [Thread-21618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:51:02.354 [DEBUG] [Thread-21618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:51:02.354 [DEBUG] [Thread-21618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:51:02.354 [DEBUG] [Thread-21618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:51:02.354 [DEBUG] [Thread-21618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:51:02.354 [DEBUG] [Thread-21618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:51:02.354 [DEBUG] [Thread-21618] [transport.py] [_log()] client lang: <none>
2026-04-15T15:51:02.354 [DEBUG] [Thread-21618] [transport.py] [_log()] server lang: <none>
2026-04-15T15:51:02.354 [DEBUG] [Thread-21618] [transport.py] [_log()] kex follows: False
2026-04-15T15:51:02.354 [DEBUG] [Thread-21618] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:51:02.354 [DEBUG] [Thread-21618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:51:02.355 [DEBUG] [Thread-21618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:51:02.355 [DEBUG] [Thread-21618] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:51:02.355 [DEBUG] [Thread-21618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:51:02.355 [DEBUG] [Thread-21618] [transport.py] [_log()] Compression: none
2026-04-15T15:51:02.355 [DEBUG] [Thread-21618] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:51:02.412 [DEBUG] [Thread-21618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:51:02.412 [DEBUG] [Thread-21618] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:51:02.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:51:02.413 [DEBUG] [Thread-21618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:51:02.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:51:02.468 [DEBUG] [Thread-21618] [transport.py] [_log()] userauth is OK
2026-04-15T15:51:02.468 [DEBUG] [Thread-21618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:51:02.469 [DEBUG] [Thread-21618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:51:02.469 [DEBUG] [Thread-21618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:51:02.469 [DEBUG] [Thread-21618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:51:02.495 [INFO] [Thread-21618] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:51:02.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:51:02.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:51:03.352 [DEBUG] [Thread-21618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:51:03.352 [DEBUG] [Thread-21618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:51:03.402 [DEBUG] [Thread-21618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:51:03.402 [DEBUG] [Thread-21618] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:51:03.412 [DEBUG] [Thread-21618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:51:03.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:51:03.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')
2026-04-15T15:51:03.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
2026-04-15T15:51:03.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:51:03.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:51:03.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:51:03.444 [DEBUG] [Thread-21618] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:51:07.313 [DEBUG] [Thread-21620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:51:15.095 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:51:15.096 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:51:22.361 [DEBUG] [Thread-21621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:51:33.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:51:33.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:51:33.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
2026-04-15T15:51:34.499 [DEBUG] [Thread-21622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:51:34.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 51, 1), 9.61797, 52.5623, 0.0, 19.3925, 14.6525, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:51:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:51:01
2026-04-15T15:51:35.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:51:35.661 [DEBUG] [Thread-21623] [transport.py] [_log()] starting thread (client mode): 0xee9beef0
2026-04-15T15:51:35.661 [DEBUG] [Thread-21623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:51:35.682 [DEBUG] [Thread-21623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:51:35.682 [INFO] [Thread-21623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:51:35.685 [DEBUG] [Thread-21623] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:51:35.685 [DEBUG] [Thread-21623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:51:35.685 [DEBUG] [Thread-21623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:51:35.685 [DEBUG] [Thread-21623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:51:35.686 [DEBUG] [Thread-21623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:51:35.686 [DEBUG] [Thread-21623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:51:35.686 [DEBUG] [Thread-21623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:51:35.686 [DEBUG] [Thread-21623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:51:35.686 [DEBUG] [Thread-21623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:51:35.686 [DEBUG] [Thread-21623] [transport.py] [_log()] client lang: <none>
2026-04-15T15:51:35.686 [DEBUG] [Thread-21623] [transport.py] [_log()] server lang: <none>
2026-04-15T15:51:35.686 [DEBUG] [Thread-21623] [transport.py] [_log()] kex follows: False
2026-04-15T15:51:35.686 [DEBUG] [Thread-21623] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:51:35.686 [DEBUG] [Thread-21623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:51:35.686 [DEBUG] [Thread-21623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:51:35.687 [DEBUG] [Thread-21623] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:51:35.687 [DEBUG] [Thread-21623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:51:35.687 [DEBUG] [Thread-21623] [transport.py] [_log()] Compression: none
2026-04-15T15:51:35.687 [DEBUG] [Thread-21623] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:51:35.695 [DEBUG] [Thread-21623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:51:35.695 [DEBUG] [Thread-21623] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:51:35.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:51:35.696 [DEBUG] [Thread-21623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:51:35.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:51:35.697 [DEBUG] [Thread-21623] [transport.py] [_log()] userauth is OK
2026-04-15T15:51:35.697 [DEBUG] [Thread-21623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:51:35.697 [DEBUG] [Thread-21623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:51:35.697 [DEBUG] [Thread-21623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:51:35.697 [DEBUG] [Thread-21623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:51:35.714 [INFO] [Thread-21623] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:51:35.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:51:36.471 [DEBUG] [Thread-21623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:51:36.471 [DEBUG] [Thread-21623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:51:36.472 [DEBUG] [Thread-21623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:51:36.513 [DEBUG] [Thread-21623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:51:36.513 [DEBUG] [Thread-21623] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:51:36.516 [DEBUG] [Thread-21623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:51:36.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:51:36.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:51:36.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:51:36.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:51:36.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:51:36.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:51:36.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:51:36.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:51:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:51:36.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.576872 -999.00  +14.50   8.34     59   +6.70 1 1 1 1 1   887    0 8.35 20.00 ----- 11.6 8.3 352.7 13.6 20.6 -29.6 19.7 -28.5 20.9 -25.1 21.9 -27.0
2026-04-15T15:51:36.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:51:36.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:51:36.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.576872
2026-04-15T15:51:36.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:51:36.538 [DEBUG] [Thread-21623] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:51:36.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:51:36.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:51:36.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:51:36.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:51:36.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:51:01', tmtdew=9.61797, humidity=52.5623, cloud=0.0, wind=19.3925, temperature=14.6525, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:50:41.741', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:51:36.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:51:36.801 [DEBUG] [Thread-21626] [transport.py] [_log()] starting thread (client mode): 0xee9bfee0
2026-04-15T15:51:36.801 [DEBUG] [Thread-21626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:51:36.815 [DEBUG] [Thread-21626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:51:36.815 [INFO] [Thread-21626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:51:36.823 [DEBUG] [Thread-21626] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:51:36.823 [DEBUG] [Thread-21626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:51:36.823 [DEBUG] [Thread-21626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:51:36.823 [DEBUG] [Thread-21626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:51:36.823 [DEBUG] [Thread-21626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:51:36.823 [DEBUG] [Thread-21626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:51:36.823 [DEBUG] [Thread-21626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:51:36.823 [DEBUG] [Thread-21626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:51:36.823 [DEBUG] [Thread-21626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:51:36.824 [DEBUG] [Thread-21626] [transport.py] [_log()] client lang: <none>
2026-04-15T15:51:36.824 [DEBUG] [Thread-21626] [transport.py] [_log()] server lang: <none>
2026-04-15T15:51:36.824 [DEBUG] [Thread-21626] [transport.py] [_log()] kex follows: False
2026-04-15T15:51:36.824 [DEBUG] [Thread-21626] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:51:36.824 [DEBUG] [Thread-21626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:51:36.824 [DEBUG] [Thread-21626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:51:36.824 [DEBUG] [Thread-21626] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:51:36.824 [DEBUG] [Thread-21626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:51:36.824 [DEBUG] [Thread-21626] [transport.py] [_log()] Compression: none
2026-04-15T15:51:36.824 [DEBUG] [Thread-21626] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:51:36.880 [DEBUG] [Thread-21626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:51:36.880 [DEBUG] [Thread-21626] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:51:36.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:51:36.881 [DEBUG] [Thread-21626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:51:36.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:51:36.936 [DEBUG] [Thread-21626] [transport.py] [_log()] userauth is OK
2026-04-15T15:51:36.936 [DEBUG] [Thread-21626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:51:36.937 [DEBUG] [Thread-21626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:51:36.937 [DEBUG] [Thread-21626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:51:36.937 [DEBUG] [Thread-21626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:51:36.962 [INFO] [Thread-21626] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:51:36.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:51:36.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:51:37.392 [DEBUG] [Thread-21628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:51:37.851 [DEBUG] [Thread-21626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:51:37.851 [DEBUG] [Thread-21626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:51:37.899 [DEBUG] [Thread-21626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:51:37.899 [DEBUG] [Thread-21626] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:51:37.908 [DEBUG] [Thread-21626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:51:37.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:51:37.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')
2026-04-15T15:51:37.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') -> 00000000
2026-04-15T15:51:37.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:51:37.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:51:37.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:51:37.942 [DEBUG] [Thread-21626] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:51:52.436 [DEBUG] [Thread-21629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:52:07.468 [DEBUG] [Thread-21630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:52:07.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:52:07.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:52:07.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:52:09.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 51, 36), 9.85783, 51.7872, 0.0, 16.056, 15.5043, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:52:09.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:51:36
2026-04-15T15:52:09.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:52:10.075 [DEBUG] [Thread-21631] [transport.py] [_log()] starting thread (client mode): 0xee926830
2026-04-15T15:52:10.075 [DEBUG] [Thread-21631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:52:10.094 [DEBUG] [Thread-21631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:52:10.094 [INFO] [Thread-21631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:52:10.098 [DEBUG] [Thread-21631] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:52:10.098 [DEBUG] [Thread-21631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:52:10.098 [DEBUG] [Thread-21631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:52:10.098 [DEBUG] [Thread-21631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:52:10.098 [DEBUG] [Thread-21631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:52:10.098 [DEBUG] [Thread-21631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:52:10.098 [DEBUG] [Thread-21631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:52:10.098 [DEBUG] [Thread-21631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:52:10.098 [DEBUG] [Thread-21631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:52:10.098 [DEBUG] [Thread-21631] [transport.py] [_log()] client lang: <none>
2026-04-15T15:52:10.098 [DEBUG] [Thread-21631] [transport.py] [_log()] server lang: <none>
2026-04-15T15:52:10.099 [DEBUG] [Thread-21631] [transport.py] [_log()] kex follows: False
2026-04-15T15:52:10.099 [DEBUG] [Thread-21631] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:52:10.099 [DEBUG] [Thread-21631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:52:10.099 [DEBUG] [Thread-21631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:52:10.099 [DEBUG] [Thread-21631] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:52:10.099 [DEBUG] [Thread-21631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:52:10.099 [DEBUG] [Thread-21631] [transport.py] [_log()] Compression: none
2026-04-15T15:52:10.099 [DEBUG] [Thread-21631] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:52:10.115 [DEBUG] [Thread-21631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:52:10.116 [DEBUG] [Thread-21631] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:52:10.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:52:10.116 [DEBUG] [Thread-21631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:52:10.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:52:10.117 [DEBUG] [Thread-21631] [transport.py] [_log()] userauth is OK
2026-04-15T15:52:10.118 [DEBUG] [Thread-21631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:52:10.118 [DEBUG] [Thread-21631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:52:10.118 [DEBUG] [Thread-21631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:52:10.118 [DEBUG] [Thread-21631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:52:10.136 [INFO] [Thread-21631] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:52:10.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:52:10.890 [DEBUG] [Thread-21631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:52:10.891 [DEBUG] [Thread-21631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:52:10.891 [DEBUG] [Thread-21631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:52:10.932 [DEBUG] [Thread-21631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:52:10.932 [DEBUG] [Thread-21631] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:52:10.935 [DEBUG] [Thread-21631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:52:10.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:52:10.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:52:10.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:52:10.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:52:10.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:52:10.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:52:10.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:52:10.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:52:10.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:52:10.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.577566 -999.00  +14.50   9.48     59   +6.70 1 1 1 1 1   887    0 8.57 22.28 ----- 12.4 9.5 23.6 23.6 20.6 -29.5 19.8 -28.9 21.0 -24.4 21.9 -26.3
2026-04-15T15:52:10.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:52:10.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:52:10.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.577566
2026-04-15T15:52:10.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:52:10.962 [DEBUG] [Thread-21631] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:52:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:52:10.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:52:10.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:52:10.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:52:10.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:51:36', tmtdew=9.85783, humidity=51.7872, cloud=0.0, wind=16.056, temperature=15.5043, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:51:41.702', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:52:11.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:52:11.215 [DEBUG] [Thread-21634] [transport.py] [_log()] starting thread (client mode): 0xee925210
2026-04-15T15:52:11.215 [DEBUG] [Thread-21634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:52:11.231 [DEBUG] [Thread-21634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:52:11.231 [INFO] [Thread-21634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:52:11.239 [DEBUG] [Thread-21634] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:52:11.239 [DEBUG] [Thread-21634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:52:11.239 [DEBUG] [Thread-21634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:52:11.239 [DEBUG] [Thread-21634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:52:11.239 [DEBUG] [Thread-21634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:52:11.239 [DEBUG] [Thread-21634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:52:11.240 [DEBUG] [Thread-21634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:52:11.240 [DEBUG] [Thread-21634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:52:11.240 [DEBUG] [Thread-21634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:52:11.240 [DEBUG] [Thread-21634] [transport.py] [_log()] client lang: <none>
2026-04-15T15:52:11.240 [DEBUG] [Thread-21634] [transport.py] [_log()] server lang: <none>
2026-04-15T15:52:11.240 [DEBUG] [Thread-21634] [transport.py] [_log()] kex follows: False
2026-04-15T15:52:11.240 [DEBUG] [Thread-21634] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:52:11.240 [DEBUG] [Thread-21634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:52:11.240 [DEBUG] [Thread-21634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:52:11.240 [DEBUG] [Thread-21634] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:52:11.240 [DEBUG] [Thread-21634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:52:11.240 [DEBUG] [Thread-21634] [transport.py] [_log()] Compression: none
2026-04-15T15:52:11.241 [DEBUG] [Thread-21634] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:52:11.296 [DEBUG] [Thread-21634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:52:11.296 [DEBUG] [Thread-21634] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:52:11.297 [DEBUG] [Thread-21634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:52:11.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:52:11.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:52:11.353 [DEBUG] [Thread-21634] [transport.py] [_log()] userauth is OK
2026-04-15T15:52:11.353 [DEBUG] [Thread-21634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:52:11.353 [DEBUG] [Thread-21634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:52:11.353 [DEBUG] [Thread-21634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:52:11.353 [DEBUG] [Thread-21634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:52:11.378 [INFO] [Thread-21634] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:52:11.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:52:11.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:52:12.265 [DEBUG] [Thread-21634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:52:12.266 [DEBUG] [Thread-21634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:52:12.313 [DEBUG] [Thread-21634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:52:12.313 [DEBUG] [Thread-21634] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:52:12.322 [DEBUG] [Thread-21634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:52:12.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:52:12.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')
2026-04-15T15:52:12.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
2026-04-15T15:52:12.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:52:12.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:52:12.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:52:12.354 [DEBUG] [Thread-21634] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:52:15.240 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:52:15.241 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:52:22.504 [DEBUG] [Thread-21636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:52:34.575 [DEBUG] [Thread-21637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:52:37.549 [DEBUG] [Thread-21638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:52:42.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:52:42.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:52:42.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
2026-04-15T15:52:43.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 52, 12), 9.50184, 52.6285, 0.0, 11.3994, 14.9856, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:52:43.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:52:12
2026-04-15T15:52:44.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:52:44.463 [DEBUG] [Thread-21639] [transport.py] [_log()] starting thread (client mode): 0xf1332c50
2026-04-15T15:52:44.463 [DEBUG] [Thread-21639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:52:44.482 [DEBUG] [Thread-21639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:52:44.482 [INFO] [Thread-21639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:52:44.485 [DEBUG] [Thread-21639] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:52:44.485 [DEBUG] [Thread-21639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:52:44.485 [DEBUG] [Thread-21639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:52:44.486 [DEBUG] [Thread-21639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:52:44.486 [DEBUG] [Thread-21639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:52:44.486 [DEBUG] [Thread-21639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:52:44.486 [DEBUG] [Thread-21639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:52:44.486 [DEBUG] [Thread-21639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:52:44.486 [DEBUG] [Thread-21639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:52:44.486 [DEBUG] [Thread-21639] [transport.py] [_log()] client lang: <none>
2026-04-15T15:52:44.486 [DEBUG] [Thread-21639] [transport.py] [_log()] server lang: <none>
2026-04-15T15:52:44.486 [DEBUG] [Thread-21639] [transport.py] [_log()] kex follows: False
2026-04-15T15:52:44.486 [DEBUG] [Thread-21639] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:52:44.486 [DEBUG] [Thread-21639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:52:44.487 [DEBUG] [Thread-21639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:52:44.487 [DEBUG] [Thread-21639] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:52:44.487 [DEBUG] [Thread-21639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:52:44.487 [DEBUG] [Thread-21639] [transport.py] [_log()] Compression: none
2026-04-15T15:52:44.487 [DEBUG] [Thread-21639] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:52:44.504 [DEBUG] [Thread-21639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:52:44.505 [DEBUG] [Thread-21639] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:52:44.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:52:44.505 [DEBUG] [Thread-21639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:52:44.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:52:44.506 [DEBUG] [Thread-21639] [transport.py] [_log()] userauth is OK
2026-04-15T15:52:44.506 [DEBUG] [Thread-21639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:52:44.506 [DEBUG] [Thread-21639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:52:44.507 [DEBUG] [Thread-21639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:52:44.507 [DEBUG] [Thread-21639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:52:44.524 [INFO] [Thread-21639] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:52:44.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:52:45.336 [DEBUG] [Thread-21639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:52:45.337 [DEBUG] [Thread-21639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:52:45.337 [DEBUG] [Thread-21639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:52:45.377 [DEBUG] [Thread-21639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:52:45.377 [DEBUG] [Thread-21639] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:52:45.380 [DEBUG] [Thread-21639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:52:45.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:52:45.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:52:45.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:52:45.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:52:45.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:52:45.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:52:45.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:52:45.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:52:45.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:52:45.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.577914 -999.00  +14.60  10.38     60   +7.10 1 1 1 1 1   887    0 8.47 22.57 ----- 12.6 10.4 31.7 14.3 20.6 -28.9 19.7 -28.4 20.9 -24.2 21.8 -27.2
2026-04-15T15:52:45.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:52:45.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:52:45.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.577914
2026-04-15T15:52:45.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:52:45.404 [DEBUG] [Thread-21639] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:52:45.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:52:45.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:52:45.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:52:45.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:52:45.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:52:12', tmtdew=9.50184, humidity=52.6285, cloud=0.0, wind=11.3994, temperature=14.9856, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:52:11.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:52:45.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:52:45.663 [DEBUG] [Thread-21642] [transport.py] [_log()] starting thread (client mode): 0xee9bdab0
2026-04-15T15:52:45.663 [DEBUG] [Thread-21642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:52:45.677 [DEBUG] [Thread-21642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:52:45.677 [INFO] [Thread-21642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:52:45.684 [DEBUG] [Thread-21642] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:52:45.685 [DEBUG] [Thread-21642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:52:45.685 [DEBUG] [Thread-21642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:52:45.685 [DEBUG] [Thread-21642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:52:45.685 [DEBUG] [Thread-21642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:52:45.685 [DEBUG] [Thread-21642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:52:45.685 [DEBUG] [Thread-21642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:52:45.685 [DEBUG] [Thread-21642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:52:45.685 [DEBUG] [Thread-21642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:52:45.685 [DEBUG] [Thread-21642] [transport.py] [_log()] client lang: <none>
2026-04-15T15:52:45.685 [DEBUG] [Thread-21642] [transport.py] [_log()] server lang: <none>
2026-04-15T15:52:45.685 [DEBUG] [Thread-21642] [transport.py] [_log()] kex follows: False
2026-04-15T15:52:45.685 [DEBUG] [Thread-21642] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:52:45.685 [DEBUG] [Thread-21642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:52:45.686 [DEBUG] [Thread-21642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:52:45.686 [DEBUG] [Thread-21642] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:52:45.686 [DEBUG] [Thread-21642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:52:45.686 [DEBUG] [Thread-21642] [transport.py] [_log()] Compression: none
2026-04-15T15:52:45.686 [DEBUG] [Thread-21642] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:52:45.743 [DEBUG] [Thread-21642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:52:45.744 [DEBUG] [Thread-21642] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:52:45.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:52:45.744 [DEBUG] [Thread-21642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:52:45.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:52:45.800 [DEBUG] [Thread-21642] [transport.py] [_log()] userauth is OK
2026-04-15T15:52:45.800 [DEBUG] [Thread-21642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:52:45.800 [DEBUG] [Thread-21642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:52:45.800 [DEBUG] [Thread-21642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:52:45.801 [DEBUG] [Thread-21642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:52:45.825 [INFO] [Thread-21642] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:52:45.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:52:45.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:52:46.691 [DEBUG] [Thread-21642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:52:46.691 [DEBUG] [Thread-21642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:52:46.738 [DEBUG] [Thread-21642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:52:46.739 [DEBUG] [Thread-21642] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:52:46.748 [DEBUG] [Thread-21642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:52:46.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:52:46.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')
2026-04-15T15:52:46.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') -> 00000000
2026-04-15T15:52:46.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:52:46.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:52:46.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:52:46.782 [DEBUG] [Thread-21642] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:52:52.582 [DEBUG] [Thread-21644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:53:07.624 [DEBUG] [Thread-21645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:53:15.385 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:53:15.386 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:53:16.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:53:16.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:53:16.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
2026-04-15T15:53:18.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 52, 48), 9.88918, 51.6215, 0.0, 16.7263, 15.3055, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:53:18.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:52:48
2026-04-15T15:53:18.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:53:19.009 [DEBUG] [Thread-21646] [transport.py] [_log()] starting thread (client mode): 0xee9252a0
2026-04-15T15:53:19.009 [DEBUG] [Thread-21646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:53:19.029 [DEBUG] [Thread-21646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:53:19.029 [INFO] [Thread-21646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:53:19.032 [DEBUG] [Thread-21646] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] client lang: <none>
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] server lang: <none>
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] kex follows: False
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:53:19.033 [DEBUG] [Thread-21646] [transport.py] [_log()] Compression: none
2026-04-15T15:53:19.034 [DEBUG] [Thread-21646] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:53:19.050 [DEBUG] [Thread-21646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:53:19.050 [DEBUG] [Thread-21646] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:53:19.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:53:19.050 [DEBUG] [Thread-21646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:53:19.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:53:19.051 [DEBUG] [Thread-21646] [transport.py] [_log()] userauth is OK
2026-04-15T15:53:19.051 [DEBUG] [Thread-21646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:53:19.051 [DEBUG] [Thread-21646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:53:19.052 [DEBUG] [Thread-21646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:53:19.052 [DEBUG] [Thread-21646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:53:19.071 [INFO] [Thread-21646] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:53:19.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:53:19.864 [DEBUG] [Thread-21646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:53:19.864 [DEBUG] [Thread-21646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:53:19.864 [DEBUG] [Thread-21646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:53:19.905 [DEBUG] [Thread-21646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:53:19.905 [DEBUG] [Thread-21646] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:53:19.908 [DEBUG] [Thread-21646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:53:19.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:53:19.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:53:19.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:53:19.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:53:19.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:53:19.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:53:19.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:53:19.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:53:19.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:53:19.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.578261 -999.00  +14.80  16.27     59   +6.90 1 1 1 1 1   887    0 8.61 23.76 ----- 12.1 16.3 24.4 19.7 20.5 -30.6 19.6 -29.7 20.9 -25.1 21.6 -29.4
2026-04-15T15:53:19.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:53:19.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:53:19.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.578261
2026-04-15T15:53:19.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:53:19.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:53:19.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:53:19.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:53:19.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:53:19.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:52:48', tmtdew=9.88918, humidity=51.6215, cloud=0.0, wind=16.7263, temperature=15.3055, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:52:41.750', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:53:19.935 [DEBUG] [Thread-21646] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:53:20.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:53:20.192 [DEBUG] [Thread-21649] [transport.py] [_log()] starting thread (client mode): 0xee925210
2026-04-15T15:53:20.192 [DEBUG] [Thread-21649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:53:20.210 [DEBUG] [Thread-21649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:53:20.210 [INFO] [Thread-21649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:53:20.218 [DEBUG] [Thread-21649] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:53:20.218 [DEBUG] [Thread-21649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:53:20.218 [DEBUG] [Thread-21649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:53:20.218 [DEBUG] [Thread-21649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:53:20.218 [DEBUG] [Thread-21649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:53:20.218 [DEBUG] [Thread-21649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:53:20.218 [DEBUG] [Thread-21649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:53:20.218 [DEBUG] [Thread-21649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:53:20.218 [DEBUG] [Thread-21649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:53:20.218 [DEBUG] [Thread-21649] [transport.py] [_log()] client lang: <none>
2026-04-15T15:53:20.218 [DEBUG] [Thread-21649] [transport.py] [_log()] server lang: <none>
2026-04-15T15:53:20.218 [DEBUG] [Thread-21649] [transport.py] [_log()] kex follows: False
2026-04-15T15:53:20.219 [DEBUG] [Thread-21649] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:53:20.219 [DEBUG] [Thread-21649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:53:20.219 [DEBUG] [Thread-21649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:53:20.219 [DEBUG] [Thread-21649] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:53:20.219 [DEBUG] [Thread-21649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:53:20.219 [DEBUG] [Thread-21649] [transport.py] [_log()] Compression: none
2026-04-15T15:53:20.219 [DEBUG] [Thread-21649] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:53:20.275 [DEBUG] [Thread-21649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:53:20.276 [DEBUG] [Thread-21649] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:53:20.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:53:20.277 [DEBUG] [Thread-21649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:53:20.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:53:20.335 [DEBUG] [Thread-21649] [transport.py] [_log()] userauth is OK
2026-04-15T15:53:20.335 [DEBUG] [Thread-21649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:53:20.335 [DEBUG] [Thread-21649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:53:20.335 [DEBUG] [Thread-21649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:53:20.335 [DEBUG] [Thread-21649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:53:20.361 [INFO] [Thread-21649] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:53:20.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:53:20.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:53:21.199 [DEBUG] [Thread-21649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:53:21.199 [DEBUG] [Thread-21649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:53:21.250 [DEBUG] [Thread-21649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:53:21.251 [DEBUG] [Thread-21649] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:53:21.260 [DEBUG] [Thread-21649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:53:21.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:53:21.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')
2026-04-15T15:53:21.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') -> 00000000
2026-04-15T15:53:21.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:53:21.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:53:21.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:53:21.294 [DEBUG] [Thread-21649] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:53:22.655 [DEBUG] [Thread-21651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:53:34.650 [DEBUG] [Thread-21652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:53:37.699 [DEBUG] [Thread-21653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:53:51.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:53:51.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:53:51.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
2026-04-15T15:53:52.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 53, 23), 9.54955, 52.8107, 0.0, 13.9756, 15.019, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:53:52.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:53:23
2026-04-15T15:53:52.730 [DEBUG] [Thread-21654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:53:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:53:53.446 [DEBUG] [Thread-21655] [transport.py] [_log()] starting thread (client mode): 0xee91cfa0
2026-04-15T15:53:53.446 [DEBUG] [Thread-21655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:53:53.465 [DEBUG] [Thread-21655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:53:53.466 [INFO] [Thread-21655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:53:53.469 [DEBUG] [Thread-21655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:53:53.469 [DEBUG] [Thread-21655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:53:53.469 [DEBUG] [Thread-21655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:53:53.469 [DEBUG] [Thread-21655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:53:53.469 [DEBUG] [Thread-21655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:53:53.469 [DEBUG] [Thread-21655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:53:53.469 [DEBUG] [Thread-21655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:53:53.469 [DEBUG] [Thread-21655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:53:53.469 [DEBUG] [Thread-21655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:53:53.469 [DEBUG] [Thread-21655] [transport.py] [_log()] client lang: <none>
2026-04-15T15:53:53.470 [DEBUG] [Thread-21655] [transport.py] [_log()] server lang: <none>
2026-04-15T15:53:53.470 [DEBUG] [Thread-21655] [transport.py] [_log()] kex follows: False
2026-04-15T15:53:53.470 [DEBUG] [Thread-21655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:53:53.470 [DEBUG] [Thread-21655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:53:53.470 [DEBUG] [Thread-21655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:53:53.470 [DEBUG] [Thread-21655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:53:53.470 [DEBUG] [Thread-21655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:53:53.470 [DEBUG] [Thread-21655] [transport.py] [_log()] Compression: none
2026-04-15T15:53:53.470 [DEBUG] [Thread-21655] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:53:53.485 [DEBUG] [Thread-21655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:53:53.485 [DEBUG] [Thread-21655] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:53:53.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:53:53.486 [DEBUG] [Thread-21655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:53:53.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:53:53.486 [DEBUG] [Thread-21655] [transport.py] [_log()] userauth is OK
2026-04-15T15:53:53.487 [DEBUG] [Thread-21655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:53:53.487 [DEBUG] [Thread-21655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:53:53.487 [DEBUG] [Thread-21655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:53:53.487 [DEBUG] [Thread-21655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:53:53.511 [INFO] [Thread-21655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:53:53.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:53:54.307 [DEBUG] [Thread-21655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:53:54.308 [DEBUG] [Thread-21655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:53:54.308 [DEBUG] [Thread-21655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:53:54.348 [DEBUG] [Thread-21655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:53:54.348 [DEBUG] [Thread-21655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:53:54.351 [DEBUG] [Thread-21655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:53:54.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:53:54.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:53:54.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:53:54.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:53:54.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:53:54.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:53:54.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:53:54.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:53:54.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:53:54.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.578608 -999.00  +14.70  16.68     58   +6.70 1 1 1 1 1   887    0 8.63 28.45 ----- 14.0 16.7 344.0 18.0 20.4 -29.9 19.6 -29.1 20.8 -25.3 21.5 -27.3
2026-04-15T15:53:54.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:53:54.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:53:54.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.578608
2026-04-15T15:53:54.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:53:54.375 [DEBUG] [Thread-21655] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:53:54.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:53:54.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:53:54.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:53:54.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:53:54.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:53:23', tmtdew=9.54955, humidity=52.8107, cloud=0.0, wind=13.9756, temperature=15.019, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:53:11.731', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:53:54.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:53:54.632 [DEBUG] [Thread-21658] [transport.py] [_log()] starting thread (client mode): 0xf13310f0
2026-04-15T15:53:54.632 [DEBUG] [Thread-21658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:53:54.647 [DEBUG] [Thread-21658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:53:54.647 [INFO] [Thread-21658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:53:54.654 [DEBUG] [Thread-21658] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:53:54.654 [DEBUG] [Thread-21658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:53:54.654 [DEBUG] [Thread-21658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:53:54.654 [DEBUG] [Thread-21658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:53:54.655 [DEBUG] [Thread-21658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:53:54.655 [DEBUG] [Thread-21658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:53:54.655 [DEBUG] [Thread-21658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:53:54.655 [DEBUG] [Thread-21658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:53:54.655 [DEBUG] [Thread-21658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:53:54.655 [DEBUG] [Thread-21658] [transport.py] [_log()] client lang: <none>
2026-04-15T15:53:54.655 [DEBUG] [Thread-21658] [transport.py] [_log()] server lang: <none>
2026-04-15T15:53:54.655 [DEBUG] [Thread-21658] [transport.py] [_log()] kex follows: False
2026-04-15T15:53:54.655 [DEBUG] [Thread-21658] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:53:54.655 [DEBUG] [Thread-21658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:53:54.655 [DEBUG] [Thread-21658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:53:54.656 [DEBUG] [Thread-21658] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:53:54.656 [DEBUG] [Thread-21658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:53:54.656 [DEBUG] [Thread-21658] [transport.py] [_log()] Compression: none
2026-04-15T15:53:54.656 [DEBUG] [Thread-21658] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:53:54.711 [DEBUG] [Thread-21658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:53:54.712 [DEBUG] [Thread-21658] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:53:54.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:53:54.712 [DEBUG] [Thread-21658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:53:54.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:53:54.768 [DEBUG] [Thread-21658] [transport.py] [_log()] userauth is OK
2026-04-15T15:53:54.768 [DEBUG] [Thread-21658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:53:54.769 [DEBUG] [Thread-21658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:53:54.769 [DEBUG] [Thread-21658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:53:54.769 [DEBUG] [Thread-21658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:53:54.794 [INFO] [Thread-21658] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:53:54.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:53:54.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:53:55.628 [DEBUG] [Thread-21658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:53:55.629 [DEBUG] [Thread-21658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:53:55.677 [DEBUG] [Thread-21658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:53:55.677 [DEBUG] [Thread-21658] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:53:55.686 [DEBUG] [Thread-21658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:53:55.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:53:55.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')
2026-04-15T15:53:55.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
2026-04-15T15:53:55.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:53:55.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:53:55.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:53:55.726 [DEBUG] [Thread-21658] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:54:07.762 [DEBUG] [Thread-21660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:54:15.526 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:54:15.527 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:54:22.806 [DEBUG] [Thread-21661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:54:25.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:54:25.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:54:25.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
2026-04-15T15:54:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 53, 59), 9.64594, 52.6451, 0.0, 18.5789, 14.819, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:54:27.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:53:59
2026-04-15T15:54:27.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:54:27.862 [DEBUG] [Thread-21662] [transport.py] [_log()] starting thread (client mode): 0xee9bd060
2026-04-15T15:54:27.862 [DEBUG] [Thread-21662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:54:27.880 [DEBUG] [Thread-21662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:54:27.881 [INFO] [Thread-21662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:54:27.884 [DEBUG] [Thread-21662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:54:27.884 [DEBUG] [Thread-21662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:54:27.884 [DEBUG] [Thread-21662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:54:27.884 [DEBUG] [Thread-21662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:54:27.884 [DEBUG] [Thread-21662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:54:27.884 [DEBUG] [Thread-21662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:54:27.884 [DEBUG] [Thread-21662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:54:27.884 [DEBUG] [Thread-21662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:54:27.884 [DEBUG] [Thread-21662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:54:27.884 [DEBUG] [Thread-21662] [transport.py] [_log()] client lang: <none>
2026-04-15T15:54:27.884 [DEBUG] [Thread-21662] [transport.py] [_log()] server lang: <none>
2026-04-15T15:54:27.884 [DEBUG] [Thread-21662] [transport.py] [_log()] kex follows: False
2026-04-15T15:54:27.885 [DEBUG] [Thread-21662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:54:27.885 [DEBUG] [Thread-21662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:54:27.885 [DEBUG] [Thread-21662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:54:27.885 [DEBUG] [Thread-21662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:54:27.885 [DEBUG] [Thread-21662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:54:27.885 [DEBUG] [Thread-21662] [transport.py] [_log()] Compression: none
2026-04-15T15:54:27.885 [DEBUG] [Thread-21662] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:54:27.902 [DEBUG] [Thread-21662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:54:27.902 [DEBUG] [Thread-21662] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:54:27.903 [DEBUG] [Thread-21662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:54:27.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:54:27.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:54:27.904 [DEBUG] [Thread-21662] [transport.py] [_log()] userauth is OK
2026-04-15T15:54:27.904 [DEBUG] [Thread-21662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:54:27.904 [DEBUG] [Thread-21662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:54:27.904 [DEBUG] [Thread-21662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:54:27.904 [DEBUG] [Thread-21662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:54:27.929 [INFO] [Thread-21662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:54:27.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:54:28.673 [DEBUG] [Thread-21662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:54:28.674 [DEBUG] [Thread-21662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:54:28.674 [DEBUG] [Thread-21662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:54:28.714 [DEBUG] [Thread-21662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:54:28.714 [DEBUG] [Thread-21662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:54:28.716 [DEBUG] [Thread-21662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:54:28.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:54:28.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:54:28.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:54:28.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:54:28.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:54:28.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:54:28.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:54:28.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:54:28.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:54:28.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.578955 -999.00  +14.40   7.93     59   +6.60 1 1 1 1 1   887    0 8.76 27.30 ----- 5.6 7.9 332.4 16.1 20.3 -30.5 19.5 -29.6 20.7 -25.5 21.3 -32.9
2026-04-15T15:54:28.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:54:28.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:54:28.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.578955
2026-04-15T15:54:28.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:54:28.743 [DEBUG] [Thread-21662] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:54:28.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:54:28.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:54:28.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:54:28.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:54:28.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:53:59', tmtdew=9.64594, humidity=52.6451, cloud=0.0, wind=18.5789, temperature=14.819, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:53:41.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:54:28.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:54:28.999 [DEBUG] [Thread-21665] [transport.py] [_log()] starting thread (client mode): 0xee9bc5e0
2026-04-15T15:54:28.999 [DEBUG] [Thread-21665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:54:29.013 [DEBUG] [Thread-21665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:54:29.013 [INFO] [Thread-21665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:54:29.020 [DEBUG] [Thread-21665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:54:29.021 [DEBUG] [Thread-21665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:54:29.021 [DEBUG] [Thread-21665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:54:29.021 [DEBUG] [Thread-21665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:54:29.021 [DEBUG] [Thread-21665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:54:29.021 [DEBUG] [Thread-21665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:54:29.021 [DEBUG] [Thread-21665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:54:29.021 [DEBUG] [Thread-21665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:54:29.021 [DEBUG] [Thread-21665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:54:29.021 [DEBUG] [Thread-21665] [transport.py] [_log()] client lang: <none>
2026-04-15T15:54:29.021 [DEBUG] [Thread-21665] [transport.py] [_log()] server lang: <none>
2026-04-15T15:54:29.021 [DEBUG] [Thread-21665] [transport.py] [_log()] kex follows: False
2026-04-15T15:54:29.021 [DEBUG] [Thread-21665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:54:29.022 [DEBUG] [Thread-21665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:54:29.022 [DEBUG] [Thread-21665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:54:29.022 [DEBUG] [Thread-21665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:54:29.022 [DEBUG] [Thread-21665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:54:29.022 [DEBUG] [Thread-21665] [transport.py] [_log()] Compression: none
2026-04-15T15:54:29.022 [DEBUG] [Thread-21665] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:54:29.080 [DEBUG] [Thread-21665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:54:29.080 [DEBUG] [Thread-21665] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:54:29.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:54:29.081 [DEBUG] [Thread-21665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:54:29.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:54:29.136 [DEBUG] [Thread-21665] [transport.py] [_log()] userauth is OK
2026-04-15T15:54:29.136 [DEBUG] [Thread-21665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:54:29.137 [DEBUG] [Thread-21665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:54:29.137 [DEBUG] [Thread-21665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:54:29.137 [DEBUG] [Thread-21665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:54:29.162 [INFO] [Thread-21665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:54:29.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:54:29.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:54:30.007 [DEBUG] [Thread-21665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:54:30.007 [DEBUG] [Thread-21665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:54:30.055 [DEBUG] [Thread-21665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:54:30.055 [DEBUG] [Thread-21665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:54:30.064 [DEBUG] [Thread-21665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:54:30.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:54:30.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')
2026-04-15T15:54:30.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
2026-04-15T15:54:30.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:54:30.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:54:30.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:54:30.098 [DEBUG] [Thread-21665] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:54:34.724 [DEBUG] [Thread-21667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:54:37.838 [DEBUG] [Thread-21668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:54:52.883 [DEBUG] [Thread-21669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:55:00.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:55:00.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:55:00.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
2026-04-15T15:55:01.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 54, 34), 10.0402, 51.0914, 0.0, 20.3954, 15.3386, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:55:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:54:34
2026-04-15T15:55:01.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:55:02.251 [DEBUG] [Thread-21670] [transport.py] [_log()] starting thread (client mode): 0xee9274c0
2026-04-15T15:55:02.251 [DEBUG] [Thread-21670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:55:02.271 [DEBUG] [Thread-21670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:55:02.271 [INFO] [Thread-21670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:55:02.275 [DEBUG] [Thread-21670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:55:02.275 [DEBUG] [Thread-21670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:55:02.275 [DEBUG] [Thread-21670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:55:02.275 [DEBUG] [Thread-21670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:55:02.275 [DEBUG] [Thread-21670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:55:02.275 [DEBUG] [Thread-21670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:55:02.275 [DEBUG] [Thread-21670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:55:02.275 [DEBUG] [Thread-21670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:55:02.275 [DEBUG] [Thread-21670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:55:02.275 [DEBUG] [Thread-21670] [transport.py] [_log()] client lang: <none>
2026-04-15T15:55:02.276 [DEBUG] [Thread-21670] [transport.py] [_log()] server lang: <none>
2026-04-15T15:55:02.276 [DEBUG] [Thread-21670] [transport.py] [_log()] kex follows: False
2026-04-15T15:55:02.276 [DEBUG] [Thread-21670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:55:02.276 [DEBUG] [Thread-21670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:55:02.276 [DEBUG] [Thread-21670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:55:02.276 [DEBUG] [Thread-21670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:55:02.276 [DEBUG] [Thread-21670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:55:02.276 [DEBUG] [Thread-21670] [transport.py] [_log()] Compression: none
2026-04-15T15:55:02.276 [DEBUG] [Thread-21670] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:55:02.285 [DEBUG] [Thread-21670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:55:02.285 [DEBUG] [Thread-21670] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:55:02.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:55:02.286 [DEBUG] [Thread-21670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:55:02.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:55:02.287 [DEBUG] [Thread-21670] [transport.py] [_log()] userauth is OK
2026-04-15T15:55:02.287 [DEBUG] [Thread-21670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:55:02.287 [DEBUG] [Thread-21670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:55:02.287 [DEBUG] [Thread-21670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:55:02.287 [DEBUG] [Thread-21670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:55:02.311 [INFO] [Thread-21670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:55:02.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:55:02.911 [DEBUG] [Thread-21670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:55:02.912 [DEBUG] [Thread-21670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:55:02.912 [DEBUG] [Thread-21670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:55:02.952 [DEBUG] [Thread-21670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:55:02.952 [DEBUG] [Thread-21670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:55:02.955 [DEBUG] [Thread-21670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:55:02.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:55:02.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:55:02.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:55:02.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:55:02.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:55:02.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:55:02.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:55:02.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:55:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:55:02.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.579650 -999.00  +14.50  18.27     60   +6.90 1 1 1 1 1   887    0 8.54 26.87 ----- 18.7 18.3 318.6 20.8 20.1 -30.0 19.4 -28.9 20.4 -25.2 21.2 -27.5
2026-04-15T15:55:02.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:55:02.978 [DEBUG] [Thread-21670] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:55:02.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:55:02.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.579650
2026-04-15T15:55:02.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:55:02.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:55:02.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:55:02.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:55:02.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:55:02.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:54:34', tmtdew=10.0402, humidity=51.0914, cloud=0.0, wind=20.3954, temperature=15.3386, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:54:41.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:55:03.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:55:03.240 [DEBUG] [Thread-21673] [transport.py] [_log()] starting thread (client mode): 0xee926770
2026-04-15T15:55:03.240 [DEBUG] [Thread-21673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:55:03.254 [DEBUG] [Thread-21673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:55:03.254 [INFO] [Thread-21673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:55:03.261 [DEBUG] [Thread-21673] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:55:03.262 [DEBUG] [Thread-21673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:55:03.262 [DEBUG] [Thread-21673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:55:03.262 [DEBUG] [Thread-21673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:55:03.262 [DEBUG] [Thread-21673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:55:03.262 [DEBUG] [Thread-21673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:55:03.262 [DEBUG] [Thread-21673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:55:03.262 [DEBUG] [Thread-21673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:55:03.262 [DEBUG] [Thread-21673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:55:03.262 [DEBUG] [Thread-21673] [transport.py] [_log()] client lang: <none>
2026-04-15T15:55:03.262 [DEBUG] [Thread-21673] [transport.py] [_log()] server lang: <none>
2026-04-15T15:55:03.262 [DEBUG] [Thread-21673] [transport.py] [_log()] kex follows: False
2026-04-15T15:55:03.263 [DEBUG] [Thread-21673] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:55:03.263 [DEBUG] [Thread-21673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:55:03.263 [DEBUG] [Thread-21673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:55:03.263 [DEBUG] [Thread-21673] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:55:03.263 [DEBUG] [Thread-21673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:55:03.263 [DEBUG] [Thread-21673] [transport.py] [_log()] Compression: none
2026-04-15T15:55:03.263 [DEBUG] [Thread-21673] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:55:03.324 [DEBUG] [Thread-21673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:55:03.324 [DEBUG] [Thread-21673] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:55:03.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:55:03.325 [DEBUG] [Thread-21673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:55:03.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:55:03.380 [DEBUG] [Thread-21673] [transport.py] [_log()] userauth is OK
2026-04-15T15:55:03.381 [DEBUG] [Thread-21673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:55:03.381 [DEBUG] [Thread-21673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:55:03.381 [DEBUG] [Thread-21673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:55:03.381 [DEBUG] [Thread-21673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:55:03.406 [INFO] [Thread-21673] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:55:03.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:55:03.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:55:04.260 [DEBUG] [Thread-21673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:55:04.261 [DEBUG] [Thread-21673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:55:04.308 [DEBUG] [Thread-21673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:55:04.308 [DEBUG] [Thread-21673] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:55:04.317 [DEBUG] [Thread-21673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:55:04.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:55:04.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')
2026-04-15T15:55:04.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
2026-04-15T15:55:04.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:55:04.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:55:04.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:55:04.352 [DEBUG] [Thread-21673] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:55:07.913 [DEBUG] [Thread-21675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:55:15.669 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:55:15.670 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:55:22.951 [DEBUG] [Thread-21676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:55:34.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:55:34.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:55:34.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
2026-04-15T15:55:34.798 [DEBUG] [Thread-21677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:55:35.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 55, 10), 9.57678, 52.5622, 0.0, 15.8969, 14.9184, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:55:35.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:55:10
2026-04-15T15:55:36.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:55:36.493 [DEBUG] [Thread-21678] [transport.py] [_log()] starting thread (client mode): 0xee91d3c0
2026-04-15T15:55:36.493 [DEBUG] [Thread-21678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:55:36.513 [DEBUG] [Thread-21678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:55:36.513 [INFO] [Thread-21678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:55:36.515 [DEBUG] [Thread-21678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:55:36.515 [DEBUG] [Thread-21678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:55:36.515 [DEBUG] [Thread-21678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:55:36.515 [DEBUG] [Thread-21678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:55:36.515 [DEBUG] [Thread-21678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:55:36.515 [DEBUG] [Thread-21678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:55:36.515 [DEBUG] [Thread-21678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:55:36.515 [DEBUG] [Thread-21678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:55:36.515 [DEBUG] [Thread-21678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:55:36.515 [DEBUG] [Thread-21678] [transport.py] [_log()] client lang: <none>
2026-04-15T15:55:36.516 [DEBUG] [Thread-21678] [transport.py] [_log()] server lang: <none>
2026-04-15T15:55:36.516 [DEBUG] [Thread-21678] [transport.py] [_log()] kex follows: False
2026-04-15T15:55:36.516 [DEBUG] [Thread-21678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:55:36.516 [DEBUG] [Thread-21678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:55:36.516 [DEBUG] [Thread-21678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:55:36.516 [DEBUG] [Thread-21678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:55:36.516 [DEBUG] [Thread-21678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:55:36.516 [DEBUG] [Thread-21678] [transport.py] [_log()] Compression: none
2026-04-15T15:55:36.516 [DEBUG] [Thread-21678] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:55:36.534 [DEBUG] [Thread-21678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:55:36.534 [DEBUG] [Thread-21678] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:55:36.534 [DEBUG] [Thread-21678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:55:36.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:55:36.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:55:36.535 [DEBUG] [Thread-21678] [transport.py] [_log()] userauth is OK
2026-04-15T15:55:36.536 [DEBUG] [Thread-21678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:55:36.536 [DEBUG] [Thread-21678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:55:36.536 [DEBUG] [Thread-21678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:55:36.536 [DEBUG] [Thread-21678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:55:36.560 [INFO] [Thread-21678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:55:36.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:55:37.983 [DEBUG] [Thread-21680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:55:38.228 [DEBUG] [Thread-21678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:55:38.228 [DEBUG] [Thread-21678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:55:38.229 [DEBUG] [Thread-21678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:55:38.269 [DEBUG] [Thread-21678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:55:38.269 [DEBUG] [Thread-21678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:55:38.272 [DEBUG] [Thread-21678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:55:38.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:55:38.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:55:38.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:55:38.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:55:38.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:55:38.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:55:38.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:55:38.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:55:38.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:55:38.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.579997 -999.00  +14.40  23.12     59   +6.50 1 1 1 1 1   887    0 8.58 25.77 ----- 18.6 23.1 311.8 26.4 20.1 -29.2 19.4 -27.9 20.3 -25.4 21.1 -26.4
2026-04-15T15:55:38.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:55:38.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:55:38.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.579997
2026-04-15T15:55:38.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:55:38.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:55:38.336 [DEBUG] [Thread-21678] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:55:38.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:55:38.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:55:38.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:55:38.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:55:10', tmtdew=9.57678, humidity=52.5622, cloud=0.0, wind=15.8969, temperature=14.9184, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:55:11.741', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:55:38.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:55:38.597 [DEBUG] [Thread-21682] [transport.py] [_log()] starting thread (client mode): 0xee9ac100
2026-04-15T15:55:38.597 [DEBUG] [Thread-21682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:55:38.611 [DEBUG] [Thread-21682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:55:38.611 [INFO] [Thread-21682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:55:38.619 [DEBUG] [Thread-21682] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:55:38.619 [DEBUG] [Thread-21682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:55:38.619 [DEBUG] [Thread-21682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:55:38.619 [DEBUG] [Thread-21682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:55:38.619 [DEBUG] [Thread-21682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:55:38.619 [DEBUG] [Thread-21682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:55:38.619 [DEBUG] [Thread-21682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:55:38.619 [DEBUG] [Thread-21682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:55:38.619 [DEBUG] [Thread-21682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:55:38.619 [DEBUG] [Thread-21682] [transport.py] [_log()] client lang: <none>
2026-04-15T15:55:38.619 [DEBUG] [Thread-21682] [transport.py] [_log()] server lang: <none>
2026-04-15T15:55:38.619 [DEBUG] [Thread-21682] [transport.py] [_log()] kex follows: False
2026-04-15T15:55:38.620 [DEBUG] [Thread-21682] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:55:38.620 [DEBUG] [Thread-21682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:55:38.620 [DEBUG] [Thread-21682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:55:38.620 [DEBUG] [Thread-21682] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:55:38.620 [DEBUG] [Thread-21682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:55:38.620 [DEBUG] [Thread-21682] [transport.py] [_log()] Compression: none
2026-04-15T15:55:38.620 [DEBUG] [Thread-21682] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:55:38.677 [DEBUG] [Thread-21682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:55:38.677 [DEBUG] [Thread-21682] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:55:38.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:55:38.678 [DEBUG] [Thread-21682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:55:38.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:55:38.733 [DEBUG] [Thread-21682] [transport.py] [_log()] userauth is OK
2026-04-15T15:55:38.733 [DEBUG] [Thread-21682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:55:38.733 [DEBUG] [Thread-21682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:55:38.733 [DEBUG] [Thread-21682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:55:38.733 [DEBUG] [Thread-21682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:55:38.759 [INFO] [Thread-21682] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:55:38.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:55:38.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:55:39.617 [DEBUG] [Thread-21682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:55:39.617 [DEBUG] [Thread-21682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:55:39.665 [DEBUG] [Thread-21682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:55:39.665 [DEBUG] [Thread-21682] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:55:39.674 [DEBUG] [Thread-21682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:55:39.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:55:39.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')
2026-04-15T15:55:39.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
2026-04-15T15:55:39.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:55:39.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:55:39.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:55:39.713 [DEBUG] [Thread-21682] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:55:53.014 [DEBUG] [Thread-21684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:56:08.057 [DEBUG] [Thread-21685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:56:09.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:56:09.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:56:09.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:56:11.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 55, 47), 10.1765, 50.6275, 0.0, 21.6655, 15.4049, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:56:11.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:55:47
2026-04-15T15:56:11.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:56:11.844 [DEBUG] [Thread-21686] [transport.py] [_log()] starting thread (client mode): 0xee9bc880
2026-04-15T15:56:11.845 [DEBUG] [Thread-21686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:56:11.865 [DEBUG] [Thread-21686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:56:11.865 [INFO] [Thread-21686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:56:11.867 [DEBUG] [Thread-21686] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:56:11.867 [DEBUG] [Thread-21686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:56:11.867 [DEBUG] [Thread-21686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:56:11.867 [DEBUG] [Thread-21686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:56:11.867 [DEBUG] [Thread-21686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:56:11.867 [DEBUG] [Thread-21686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:56:11.867 [DEBUG] [Thread-21686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:56:11.867 [DEBUG] [Thread-21686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:56:11.868 [DEBUG] [Thread-21686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:56:11.868 [DEBUG] [Thread-21686] [transport.py] [_log()] client lang: <none>
2026-04-15T15:56:11.868 [DEBUG] [Thread-21686] [transport.py] [_log()] server lang: <none>
2026-04-15T15:56:11.868 [DEBUG] [Thread-21686] [transport.py] [_log()] kex follows: False
2026-04-15T15:56:11.868 [DEBUG] [Thread-21686] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:56:11.868 [DEBUG] [Thread-21686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:56:11.868 [DEBUG] [Thread-21686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:56:11.868 [DEBUG] [Thread-21686] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:56:11.868 [DEBUG] [Thread-21686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:56:11.868 [DEBUG] [Thread-21686] [transport.py] [_log()] Compression: none
2026-04-15T15:56:11.868 [DEBUG] [Thread-21686] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:56:11.883 [DEBUG] [Thread-21686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:56:11.884 [DEBUG] [Thread-21686] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:56:11.884 [DEBUG] [Thread-21686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:56:11.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:56:11.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:56:11.886 [DEBUG] [Thread-21686] [transport.py] [_log()] userauth is OK
2026-04-15T15:56:11.886 [DEBUG] [Thread-21686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:56:11.886 [DEBUG] [Thread-21686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:56:11.886 [DEBUG] [Thread-21686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:56:11.886 [DEBUG] [Thread-21686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:56:11.903 [INFO] [Thread-21686] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:56:11.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:56:12.518 [DEBUG] [Thread-21686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:56:12.518 [DEBUG] [Thread-21686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:56:12.519 [DEBUG] [Thread-21686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:56:12.559 [DEBUG] [Thread-21686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:56:12.559 [DEBUG] [Thread-21686] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:56:12.561 [DEBUG] [Thread-21686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:56:12.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:56:12.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:56:12.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:56:12.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:56:12.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:56:12.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:56:12.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:56:12.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:56:12.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:56:12.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.580344 -999.00  +14.60  13.74     61   +7.10 1 1 1 1 1   887    0 8.50 22.48 ----- 13.1 13.7 329.2 21.3 20.1 -28.3 19.4 -26.9 20.4 -24.0 21.2 -25.7
2026-04-15T15:56:12.580 [DEBUG] [Thread-21686] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:56:12.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:56:12.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:56:12.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.580344
2026-04-15T15:56:12.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:56:12.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:56:12.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:56:12.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:56:12.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:56:12.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:55:47', tmtdew=10.1765, humidity=50.6275, cloud=0.0, wind=21.6655, temperature=15.4049, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:55:41.722', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:56:12.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:56:12.823 [DEBUG] [Thread-21689] [transport.py] [_log()] starting thread (client mode): 0xee9bcfa0
2026-04-15T15:56:12.823 [DEBUG] [Thread-21689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:56:12.837 [DEBUG] [Thread-21689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:56:12.837 [INFO] [Thread-21689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:56:12.845 [DEBUG] [Thread-21689] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:56:12.845 [DEBUG] [Thread-21689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:56:12.845 [DEBUG] [Thread-21689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:56:12.845 [DEBUG] [Thread-21689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:56:12.845 [DEBUG] [Thread-21689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:56:12.845 [DEBUG] [Thread-21689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:56:12.845 [DEBUG] [Thread-21689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:56:12.845 [DEBUG] [Thread-21689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:56:12.845 [DEBUG] [Thread-21689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:56:12.845 [DEBUG] [Thread-21689] [transport.py] [_log()] client lang: <none>
2026-04-15T15:56:12.845 [DEBUG] [Thread-21689] [transport.py] [_log()] server lang: <none>
2026-04-15T15:56:12.846 [DEBUG] [Thread-21689] [transport.py] [_log()] kex follows: False
2026-04-15T15:56:12.846 [DEBUG] [Thread-21689] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:56:12.846 [DEBUG] [Thread-21689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:56:12.846 [DEBUG] [Thread-21689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:56:12.846 [DEBUG] [Thread-21689] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:56:12.846 [DEBUG] [Thread-21689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:56:12.846 [DEBUG] [Thread-21689] [transport.py] [_log()] Compression: none
2026-04-15T15:56:12.846 [DEBUG] [Thread-21689] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:56:12.904 [DEBUG] [Thread-21689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:56:12.904 [DEBUG] [Thread-21689] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:56:12.905 [DEBUG] [Thread-21689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:56:12.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:56:12.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:56:12.961 [DEBUG] [Thread-21689] [transport.py] [_log()] userauth is OK
2026-04-15T15:56:12.961 [DEBUG] [Thread-21689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:56:12.962 [DEBUG] [Thread-21689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:56:12.962 [DEBUG] [Thread-21689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:56:12.962 [DEBUG] [Thread-21689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:56:12.983 [INFO] [Thread-21689] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:56:12.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:56:12.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:56:13.831 [DEBUG] [Thread-21689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:56:13.832 [DEBUG] [Thread-21689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:56:13.879 [DEBUG] [Thread-21689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:56:13.879 [DEBUG] [Thread-21689] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:56:13.888 [DEBUG] [Thread-21689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:56:13.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:56:13.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')
2026-04-15T15:56:13.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T15:56:13.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:56:13.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:56:13.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:56:13.924 [DEBUG] [Thread-21689] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:56:15.813 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:56:15.814 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:56:23.085 [DEBUG] [Thread-21691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:56:34.895 [DEBUG] [Thread-21692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:56:38.127 [DEBUG] [Thread-21693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:56:43.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:56:43.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:56:43.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
2026-04-15T15:56:45.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 56, 22), 9.72084, 52.1812, 0.0, 18.6862, 14.7862, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:56:45.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:56:22
2026-04-15T15:56:45.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:56:46.047 [DEBUG] [Thread-21694] [transport.py] [_log()] starting thread (client mode): 0xee924370
2026-04-15T15:56:46.048 [DEBUG] [Thread-21694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:56:46.062 [DEBUG] [Thread-21694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:56:46.062 [INFO] [Thread-21694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:56:46.065 [DEBUG] [Thread-21694] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:56:46.065 [DEBUG] [Thread-21694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:56:46.065 [DEBUG] [Thread-21694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:56:46.065 [DEBUG] [Thread-21694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:56:46.065 [DEBUG] [Thread-21694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:56:46.065 [DEBUG] [Thread-21694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:56:46.065 [DEBUG] [Thread-21694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:56:46.065 [DEBUG] [Thread-21694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:56:46.066 [DEBUG] [Thread-21694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:56:46.066 [DEBUG] [Thread-21694] [transport.py] [_log()] client lang: <none>
2026-04-15T15:56:46.066 [DEBUG] [Thread-21694] [transport.py] [_log()] server lang: <none>
2026-04-15T15:56:46.066 [DEBUG] [Thread-21694] [transport.py] [_log()] kex follows: False
2026-04-15T15:56:46.066 [DEBUG] [Thread-21694] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:56:46.066 [DEBUG] [Thread-21694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:56:46.066 [DEBUG] [Thread-21694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:56:46.066 [DEBUG] [Thread-21694] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:56:46.066 [DEBUG] [Thread-21694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:56:46.066 [DEBUG] [Thread-21694] [transport.py] [_log()] Compression: none
2026-04-15T15:56:46.066 [DEBUG] [Thread-21694] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:56:46.079 [DEBUG] [Thread-21694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:56:46.079 [DEBUG] [Thread-21694] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:56:46.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:56:46.080 [DEBUG] [Thread-21694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:56:46.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:56:46.080 [DEBUG] [Thread-21694] [transport.py] [_log()] userauth is OK
2026-04-15T15:56:46.081 [DEBUG] [Thread-21694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:56:46.081 [DEBUG] [Thread-21694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:56:46.081 [DEBUG] [Thread-21694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:56:46.081 [DEBUG] [Thread-21694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:56:46.103 [INFO] [Thread-21694] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:56:46.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:56:46.687 [DEBUG] [Thread-21694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:56:46.687 [DEBUG] [Thread-21694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:56:46.688 [DEBUG] [Thread-21694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:56:46.728 [DEBUG] [Thread-21694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:56:46.728 [DEBUG] [Thread-21694] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:56:46.730 [DEBUG] [Thread-21694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:56:46.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:56:46.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:56:46.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:56:46.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:56:46.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:56:46.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:56:46.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:56:46.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:56:46.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:56:46.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.581039 -999.00  +14.30  19.36     59   +6.60 1 1 1 1 1   887    0 8.60 19.30 ----- 22.4 19.4 317.4 24.9 19.7 -30.6 19.1 -28.3 19.8 -25.3 20.6 -27.9
2026-04-15T15:56:46.744 [DEBUG] [Thread-21694] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:56:46.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:56:46.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:56:46.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.581039
2026-04-15T15:56:46.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:56:46.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:56:46.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:56:46.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:56:46.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:56:46.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:56:22', tmtdew=9.72084, humidity=52.1812, cloud=0.0, wind=18.6862, temperature=14.7862, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:56:41.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:56:46.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:56:47.002 [DEBUG] [Thread-21697] [transport.py] [_log()] starting thread (client mode): 0xf1331ea0
2026-04-15T15:56:47.003 [DEBUG] [Thread-21697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:56:47.017 [DEBUG] [Thread-21697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:56:47.018 [INFO] [Thread-21697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:56:47.025 [DEBUG] [Thread-21697] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:56:47.025 [DEBUG] [Thread-21697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:56:47.025 [DEBUG] [Thread-21697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:56:47.025 [DEBUG] [Thread-21697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:56:47.025 [DEBUG] [Thread-21697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:56:47.025 [DEBUG] [Thread-21697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:56:47.025 [DEBUG] [Thread-21697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:56:47.025 [DEBUG] [Thread-21697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:56:47.026 [DEBUG] [Thread-21697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:56:47.026 [DEBUG] [Thread-21697] [transport.py] [_log()] client lang: <none>
2026-04-15T15:56:47.026 [DEBUG] [Thread-21697] [transport.py] [_log()] server lang: <none>
2026-04-15T15:56:47.026 [DEBUG] [Thread-21697] [transport.py] [_log()] kex follows: False
2026-04-15T15:56:47.026 [DEBUG] [Thread-21697] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:56:47.026 [DEBUG] [Thread-21697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:56:47.026 [DEBUG] [Thread-21697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:56:47.026 [DEBUG] [Thread-21697] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:56:47.026 [DEBUG] [Thread-21697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:56:47.026 [DEBUG] [Thread-21697] [transport.py] [_log()] Compression: none
2026-04-15T15:56:47.026 [DEBUG] [Thread-21697] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:56:47.084 [DEBUG] [Thread-21697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:56:47.084 [DEBUG] [Thread-21697] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:56:47.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:56:47.085 [DEBUG] [Thread-21697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:56:47.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:56:47.140 [DEBUG] [Thread-21697] [transport.py] [_log()] userauth is OK
2026-04-15T15:56:47.140 [DEBUG] [Thread-21697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:56:47.141 [DEBUG] [Thread-21697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:56:47.141 [DEBUG] [Thread-21697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:56:47.141 [DEBUG] [Thread-21697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:56:47.166 [INFO] [Thread-21697] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:56:47.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:56:47.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:56:48.018 [DEBUG] [Thread-21697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:56:48.019 [DEBUG] [Thread-21697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:56:48.066 [DEBUG] [Thread-21697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:56:48.066 [DEBUG] [Thread-21697] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:56:48.075 [DEBUG] [Thread-21697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:56:48.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:56:48.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')
2026-04-15T15:56:48.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
2026-04-15T15:56:48.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:56:48.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:56:48.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:56:48.110 [DEBUG] [Thread-21697] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:56:53.159 [DEBUG] [Thread-21699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:57:08.202 [DEBUG] [Thread-21700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:57:15.953 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:57:15.954 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:57:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:57:18.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15: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
2026-04-15T15:57:19.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 56, 58), 9.66885, 52.1614, 0.0, 20.0621, 14.3705, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:57:19.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:56:58
2026-04-15T15:57:19.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:57:20.435 [DEBUG] [Thread-21701] [transport.py] [_log()] starting thread (client mode): 0xee91d420
2026-04-15T15:57:20.435 [DEBUG] [Thread-21701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:57:20.446 [DEBUG] [Thread-21701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:57:20.446 [INFO] [Thread-21701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:57:20.447 [DEBUG] [Thread-21701] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:57:20.447 [DEBUG] [Thread-21701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:57:20.447 [DEBUG] [Thread-21701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] client lang: <none>
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] server lang: <none>
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] kex follows: False
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] Compression: none
2026-04-15T15:57:20.448 [DEBUG] [Thread-21701] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:57:20.457 [DEBUG] [Thread-21701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:57:20.457 [DEBUG] [Thread-21701] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:57:20.458 [DEBUG] [Thread-21701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:57:20.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:57:20.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:57:20.459 [DEBUG] [Thread-21701] [transport.py] [_log()] userauth is OK
2026-04-15T15:57:20.459 [DEBUG] [Thread-21701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:57:20.459 [DEBUG] [Thread-21701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:57:20.459 [DEBUG] [Thread-21701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:57:20.459 [DEBUG] [Thread-21701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:57:20.474 [INFO] [Thread-21701] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:57:20.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:57:21.088 [DEBUG] [Thread-21701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:57:21.089 [DEBUG] [Thread-21701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:57:21.089 [DEBUG] [Thread-21701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:57:21.129 [DEBUG] [Thread-21701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:57:21.129 [DEBUG] [Thread-21701] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:57:21.132 [DEBUG] [Thread-21701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:57:21.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:57:21.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:57:21.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:57:21.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:57:21.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:57:21.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:57:21.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:57:21.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:57:21.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:57:21.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.581386 -999.00  +14.40  16.21     60   +6.80 1 1 1 1 1   887    0 8.33 16.57 ----- 19.2 16.2 322.6 23.4 19.6 -29.6 19.1 -28.4 19.7 -24.6 20.5 -27.5
2026-04-15T15:57:21.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:57:21.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:57:21.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.581386
2026-04-15T15:57:21.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:57:21.158 [DEBUG] [Thread-21701] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:57:21.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:57:21.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:57:21.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:57:21.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:57:21.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:56:58', tmtdew=9.66885, humidity=52.1614, cloud=0.0, wind=20.0621, temperature=14.3705, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:57:11.750', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:57:21.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:57:21.422 [DEBUG] [Thread-21704] [transport.py] [_log()] starting thread (client mode): 0xee9aff10
2026-04-15T15:57:21.422 [DEBUG] [Thread-21704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:57:21.444 [DEBUG] [Thread-21704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:57:21.444 [INFO] [Thread-21704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:57:21.451 [DEBUG] [Thread-21704] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:57:21.451 [DEBUG] [Thread-21704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:57:21.451 [DEBUG] [Thread-21704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:57:21.451 [DEBUG] [Thread-21704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:57:21.451 [DEBUG] [Thread-21704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:57:21.452 [DEBUG] [Thread-21704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:57:21.452 [DEBUG] [Thread-21704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:57:21.452 [DEBUG] [Thread-21704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:57:21.452 [DEBUG] [Thread-21704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:57:21.452 [DEBUG] [Thread-21704] [transport.py] [_log()] client lang: <none>
2026-04-15T15:57:21.452 [DEBUG] [Thread-21704] [transport.py] [_log()] server lang: <none>
2026-04-15T15:57:21.452 [DEBUG] [Thread-21704] [transport.py] [_log()] kex follows: False
2026-04-15T15:57:21.452 [DEBUG] [Thread-21704] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:57:21.452 [DEBUG] [Thread-21704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:57:21.452 [DEBUG] [Thread-21704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:57:21.452 [DEBUG] [Thread-21704] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:57:21.452 [DEBUG] [Thread-21704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:57:21.453 [DEBUG] [Thread-21704] [transport.py] [_log()] Compression: none
2026-04-15T15:57:21.453 [DEBUG] [Thread-21704] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:57:21.513 [DEBUG] [Thread-21704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:57:21.513 [DEBUG] [Thread-21704] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:57:21.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:57:21.514 [DEBUG] [Thread-21704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:57:21.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:57:21.568 [DEBUG] [Thread-21704] [transport.py] [_log()] userauth is OK
2026-04-15T15:57:21.568 [DEBUG] [Thread-21704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:57:21.568 [DEBUG] [Thread-21704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:57:21.569 [DEBUG] [Thread-21704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:57:21.569 [DEBUG] [Thread-21704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:57:21.595 [INFO] [Thread-21704] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:57:21.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:57:21.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:57:22.461 [DEBUG] [Thread-21704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:57:22.462 [DEBUG] [Thread-21704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:57:22.509 [DEBUG] [Thread-21704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:57:22.509 [DEBUG] [Thread-21704] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:57:22.518 [DEBUG] [Thread-21704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:57:22.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:57:22.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')
2026-04-15T15:57:22.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
2026-04-15T15:57:22.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:57:22.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:57:22.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:57:22.553 [DEBUG] [Thread-21704] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:57:23.235 [DEBUG] [Thread-21706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:57:34.989 [DEBUG] [Thread-21707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:57:38.278 [DEBUG] [Thread-21708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:57:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:57:52.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:57:52.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:57:53.310 [DEBUG] [Thread-21709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:57:53.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 57, 34), 9.6193, 52.4825, 0.0, 26.9575, 14.8742, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:57:53.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:57:34
2026-04-15T15:57:54.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:57:54.783 [DEBUG] [Thread-21710] [transport.py] [_log()] starting thread (client mode): 0xee9af490
2026-04-15T15:57:54.784 [DEBUG] [Thread-21710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:57:54.803 [DEBUG] [Thread-21710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:57:54.803 [INFO] [Thread-21710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:57:54.807 [DEBUG] [Thread-21710] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:57:54.807 [DEBUG] [Thread-21710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:57:54.807 [DEBUG] [Thread-21710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:57:54.807 [DEBUG] [Thread-21710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:57:54.807 [DEBUG] [Thread-21710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:57:54.807 [DEBUG] [Thread-21710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:57:54.807 [DEBUG] [Thread-21710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:57:54.807 [DEBUG] [Thread-21710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:57:54.807 [DEBUG] [Thread-21710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:57:54.808 [DEBUG] [Thread-21710] [transport.py] [_log()] client lang: <none>
2026-04-15T15:57:54.808 [DEBUG] [Thread-21710] [transport.py] [_log()] server lang: <none>
2026-04-15T15:57:54.808 [DEBUG] [Thread-21710] [transport.py] [_log()] kex follows: False
2026-04-15T15:57:54.808 [DEBUG] [Thread-21710] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:57:54.808 [DEBUG] [Thread-21710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:57:54.808 [DEBUG] [Thread-21710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:57:54.808 [DEBUG] [Thread-21710] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:57:54.808 [DEBUG] [Thread-21710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:57:54.808 [DEBUG] [Thread-21710] [transport.py] [_log()] Compression: none
2026-04-15T15:57:54.808 [DEBUG] [Thread-21710] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:57:54.826 [DEBUG] [Thread-21710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:57:54.827 [DEBUG] [Thread-21710] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:57:54.827 [DEBUG] [Thread-21710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:57:54.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:57:54.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:57:54.869 [DEBUG] [Thread-21710] [transport.py] [_log()] userauth is OK
2026-04-15T15:57:54.869 [DEBUG] [Thread-21710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:57:54.869 [DEBUG] [Thread-21710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:57:54.869 [DEBUG] [Thread-21710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:57:54.869 [DEBUG] [Thread-21710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:57:54.905 [INFO] [Thread-21710] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:57:54.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:57:55.556 [DEBUG] [Thread-21710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:57:55.557 [DEBUG] [Thread-21710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:57:55.557 [DEBUG] [Thread-21710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:57:55.597 [DEBUG] [Thread-21710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:57:55.597 [DEBUG] [Thread-21710] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:57:55.600 [DEBUG] [Thread-21710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:57:55.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:57:55.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:57:55.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:57:55.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:57:55.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:57:55.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:57:55.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:57:55.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:57:55.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:57:55.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.581733 -999.00  +14.20  25.21     60   +6.70 1 1 1 1 1   887    0 8.29 14.13 ----- 21.9 25.2 326.0 30.6 19.5 -28.3 19.1 -27.0 19.6 -24.1 20.3 -25.2
2026-04-15T15:57:55.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:57:55.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:57:55.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.581733
2026-04-15T15:57:55.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:57:55.622 [DEBUG] [Thread-21710] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:57:55.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:57:55.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:57:55.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:57:55.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:57:55.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:57:34', tmtdew=9.6193, humidity=52.4825, cloud=0.0, wind=26.9575, temperature=14.8742, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:57:41.731', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:57:55.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:57:55.878 [DEBUG] [Thread-21713] [transport.py] [_log()] starting thread (client mode): 0xf1331c60
2026-04-15T15:57:55.878 [DEBUG] [Thread-21713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:57:55.892 [DEBUG] [Thread-21713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:57:55.892 [INFO] [Thread-21713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:57:55.900 [DEBUG] [Thread-21713] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:57:55.900 [DEBUG] [Thread-21713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:57:55.900 [DEBUG] [Thread-21713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:57:55.900 [DEBUG] [Thread-21713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:57:55.900 [DEBUG] [Thread-21713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:57:55.900 [DEBUG] [Thread-21713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:57:55.900 [DEBUG] [Thread-21713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:57:55.900 [DEBUG] [Thread-21713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:57:55.900 [DEBUG] [Thread-21713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:57:55.900 [DEBUG] [Thread-21713] [transport.py] [_log()] client lang: <none>
2026-04-15T15:57:55.900 [DEBUG] [Thread-21713] [transport.py] [_log()] server lang: <none>
2026-04-15T15:57:55.901 [DEBUG] [Thread-21713] [transport.py] [_log()] kex follows: False
2026-04-15T15:57:55.901 [DEBUG] [Thread-21713] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:57:55.901 [DEBUG] [Thread-21713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:57:55.901 [DEBUG] [Thread-21713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:57:55.901 [DEBUG] [Thread-21713] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:57:55.901 [DEBUG] [Thread-21713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:57:55.901 [DEBUG] [Thread-21713] [transport.py] [_log()] Compression: none
2026-04-15T15:57:55.901 [DEBUG] [Thread-21713] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:57:55.956 [DEBUG] [Thread-21713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:57:55.956 [DEBUG] [Thread-21713] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:57:55.957 [DEBUG] [Thread-21713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:57:55.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:57:55.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:57:56.014 [DEBUG] [Thread-21713] [transport.py] [_log()] userauth is OK
2026-04-15T15:57:56.014 [DEBUG] [Thread-21713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:57:56.015 [DEBUG] [Thread-21713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:57:56.015 [DEBUG] [Thread-21713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:57:56.015 [DEBUG] [Thread-21713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:57:56.040 [INFO] [Thread-21713] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:57:56.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:57:56.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:57:56.882 [DEBUG] [Thread-21713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:57:56.882 [DEBUG] [Thread-21713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:57:56.930 [DEBUG] [Thread-21713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:57:56.930 [DEBUG] [Thread-21713] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:57:56.939 [DEBUG] [Thread-21713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:57:56.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:57:56.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')
2026-04-15T15:57:56.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
2026-04-15T15:57:56.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:57:56.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:57:56.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:57:56.977 [DEBUG] [Thread-21713] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:58:08.342 [DEBUG] [Thread-21715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:58:16.095 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:58:16.096 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:58:23.385 [DEBUG] [Thread-21716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:58:26.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:58:26.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:58: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
2026-04-15T15:58:28.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 58, 9), 9.18189, 53.8075, 0.0, 17.5918, 14.1546, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:58:28.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:58:09
2026-04-15T15:58:28.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:58:29.114 [DEBUG] [Thread-21717] [transport.py] [_log()] starting thread (client mode): 0xf1331060
2026-04-15T15:58:29.115 [DEBUG] [Thread-21717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:58:29.134 [DEBUG] [Thread-21717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:58:29.134 [INFO] [Thread-21717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:58:29.138 [DEBUG] [Thread-21717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:58:29.138 [DEBUG] [Thread-21717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:58:29.138 [DEBUG] [Thread-21717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:58:29.138 [DEBUG] [Thread-21717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:58:29.138 [DEBUG] [Thread-21717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:58:29.138 [DEBUG] [Thread-21717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:58:29.138 [DEBUG] [Thread-21717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:58:29.138 [DEBUG] [Thread-21717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:58:29.138 [DEBUG] [Thread-21717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:58:29.138 [DEBUG] [Thread-21717] [transport.py] [_log()] client lang: <none>
2026-04-15T15:58:29.138 [DEBUG] [Thread-21717] [transport.py] [_log()] server lang: <none>
2026-04-15T15:58:29.139 [DEBUG] [Thread-21717] [transport.py] [_log()] kex follows: False
2026-04-15T15:58:29.139 [DEBUG] [Thread-21717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:58:29.139 [DEBUG] [Thread-21717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:58:29.139 [DEBUG] [Thread-21717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:58:29.139 [DEBUG] [Thread-21717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:58:29.139 [DEBUG] [Thread-21717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:58:29.139 [DEBUG] [Thread-21717] [transport.py] [_log()] Compression: none
2026-04-15T15:58:29.139 [DEBUG] [Thread-21717] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:58:29.156 [DEBUG] [Thread-21717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:58:29.156 [DEBUG] [Thread-21717] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:58:29.157 [DEBUG] [Thread-21717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:58:29.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:58:29.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:58:29.158 [DEBUG] [Thread-21717] [transport.py] [_log()] userauth is OK
2026-04-15T15:58:29.158 [DEBUG] [Thread-21717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:58:29.158 [DEBUG] [Thread-21717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:58:29.158 [DEBUG] [Thread-21717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:58:29.158 [DEBUG] [Thread-21717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:58:29.182 [INFO] [Thread-21717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:58:29.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:58:29.787 [DEBUG] [Thread-21717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:58:29.787 [DEBUG] [Thread-21717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:58:29.788 [DEBUG] [Thread-21717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:58:29.828 [DEBUG] [Thread-21717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:58:29.828 [DEBUG] [Thread-21717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:58:29.831 [DEBUG] [Thread-21717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:58:29.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:58:29.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:58:29.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:58:29.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:58:29.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:58:29.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:58:29.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:58:29.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:58:29.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:58:29.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.582080 -999.00  +14.50  20.64     61   +7.20 1 1 1 1 1   887    0 8.15 9.22 ----- 20.4 20.6 325.0 24.3 19.6 -27.7 19.1 -26.6 19.6 -24.4 20.4 -24.6
2026-04-15T15:58:29.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:58:29.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:58:29.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.582080
2026-04-15T15:58:29.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:58:29.850 [DEBUG] [Thread-21717] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:58:29.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:58:29.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:58:29.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:58:29.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:58:29.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:58:09', tmtdew=9.18189, humidity=53.8075, cloud=0.0, wind=17.5918, temperature=14.1546, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:58:11.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:58:30.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:58:30.114 [DEBUG] [Thread-21720] [transport.py] [_log()] starting thread (client mode): 0xf1330970
2026-04-15T15:58:30.114 [DEBUG] [Thread-21720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:58:30.128 [DEBUG] [Thread-21720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:58:30.129 [INFO] [Thread-21720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:58:30.136 [DEBUG] [Thread-21720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:58:30.136 [DEBUG] [Thread-21720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:58:30.136 [DEBUG] [Thread-21720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:58:30.136 [DEBUG] [Thread-21720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:58:30.136 [DEBUG] [Thread-21720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:58:30.136 [DEBUG] [Thread-21720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:58:30.136 [DEBUG] [Thread-21720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:58:30.136 [DEBUG] [Thread-21720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:58:30.137 [DEBUG] [Thread-21720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:58:30.137 [DEBUG] [Thread-21720] [transport.py] [_log()] client lang: <none>
2026-04-15T15:58:30.137 [DEBUG] [Thread-21720] [transport.py] [_log()] server lang: <none>
2026-04-15T15:58:30.137 [DEBUG] [Thread-21720] [transport.py] [_log()] kex follows: False
2026-04-15T15:58:30.137 [DEBUG] [Thread-21720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:58:30.137 [DEBUG] [Thread-21720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:58:30.137 [DEBUG] [Thread-21720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:58:30.137 [DEBUG] [Thread-21720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:58:30.137 [DEBUG] [Thread-21720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:58:30.137 [DEBUG] [Thread-21720] [transport.py] [_log()] Compression: none
2026-04-15T15:58:30.137 [DEBUG] [Thread-21720] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:58:30.191 [DEBUG] [Thread-21720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:58:30.192 [DEBUG] [Thread-21720] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:58:30.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:58:30.192 [DEBUG] [Thread-21720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:58:30.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:58:30.248 [DEBUG] [Thread-21720] [transport.py] [_log()] userauth is OK
2026-04-15T15:58:30.248 [DEBUG] [Thread-21720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:58:30.249 [DEBUG] [Thread-21720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:58:30.249 [DEBUG] [Thread-21720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:58:30.249 [DEBUG] [Thread-21720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:58:30.274 [INFO] [Thread-21720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:58:30.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:58:30.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:58:31.133 [DEBUG] [Thread-21720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:58:31.133 [DEBUG] [Thread-21720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:58:31.181 [DEBUG] [Thread-21720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:58:31.181 [DEBUG] [Thread-21720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:58:31.190 [DEBUG] [Thread-21720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:58:31.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:58:31.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')
2026-04-15T15:58:31.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
2026-04-15T15:58:31.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:58:31.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:58:31.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:58:31.225 [DEBUG] [Thread-21720] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:58:35.076 [DEBUG] [Thread-21722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:58:38.417 [DEBUG] [Thread-21723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:58:53.461 [DEBUG] [Thread-21724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:59:01.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:59:01.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:59:01.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
2026-04-15T15:59:02.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 58, 45), 9.28546, 53.6091, 0.0, 25.5816, 14.4767, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:59:02.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:58:45
2026-04-15T15:59:02.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:59:03.368 [DEBUG] [Thread-21725] [transport.py] [_log()] starting thread (client mode): 0xee9252a0
2026-04-15T15:59:03.368 [DEBUG] [Thread-21725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:59:03.390 [DEBUG] [Thread-21725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:59:03.390 [INFO] [Thread-21725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:59:03.393 [DEBUG] [Thread-21725] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:59:03.393 [DEBUG] [Thread-21725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:59:03.393 [DEBUG] [Thread-21725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:59:03.393 [DEBUG] [Thread-21725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:59:03.393 [DEBUG] [Thread-21725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:59:03.393 [DEBUG] [Thread-21725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:59:03.394 [DEBUG] [Thread-21725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:59:03.394 [DEBUG] [Thread-21725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:59:03.394 [DEBUG] [Thread-21725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:59:03.394 [DEBUG] [Thread-21725] [transport.py] [_log()] client lang: <none>
2026-04-15T15:59:03.394 [DEBUG] [Thread-21725] [transport.py] [_log()] server lang: <none>
2026-04-15T15:59:03.394 [DEBUG] [Thread-21725] [transport.py] [_log()] kex follows: False
2026-04-15T15:59:03.394 [DEBUG] [Thread-21725] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:59:03.394 [DEBUG] [Thread-21725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:59:03.394 [DEBUG] [Thread-21725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:59:03.394 [DEBUG] [Thread-21725] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:59:03.394 [DEBUG] [Thread-21725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:59:03.395 [DEBUG] [Thread-21725] [transport.py] [_log()] Compression: none
2026-04-15T15:59:03.395 [DEBUG] [Thread-21725] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:59:03.411 [DEBUG] [Thread-21725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:59:03.412 [DEBUG] [Thread-21725] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:59:03.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:59:03.412 [DEBUG] [Thread-21725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:59:03.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:59:03.413 [DEBUG] [Thread-21725] [transport.py] [_log()] userauth is OK
2026-04-15T15:59:03.414 [DEBUG] [Thread-21725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:59:03.414 [DEBUG] [Thread-21725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:59:03.414 [DEBUG] [Thread-21725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:59:03.414 [DEBUG] [Thread-21725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:59:03.438 [INFO] [Thread-21725] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:59:03.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:59:04.087 [DEBUG] [Thread-21725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:59:04.088 [DEBUG] [Thread-21725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:59:04.088 [DEBUG] [Thread-21725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:59:04.128 [DEBUG] [Thread-21725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:59:04.128 [DEBUG] [Thread-21725] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:59:04.131 [DEBUG] [Thread-21725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:59:04.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:59:04.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:59:04.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:59:04.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:59:04.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:59:04.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:59:04.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:59:04.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:59:04.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:59:04.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.582427 -999.00  +14.60  21.10     60   +7.10 1 1 1 1 1   887    0 8.01 6.02 ----- 19.9 21.1 319.2 25.7 19.6 -27.9 19.0 -26.5 19.6 -23.2 20.4 -24.3
2026-04-15T15:59:04.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:59:04.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:59:04.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.582427
2026-04-15T15:59:04.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:59:04.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:59:04.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:59:04.156 [DEBUG] [Thread-21725] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:59:04.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:59:04.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:59:04.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:58:45', tmtdew=9.28546, humidity=53.6091, cloud=0.0, wind=25.5816, temperature=14.4767, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:58:41.693', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:59:04.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:59:04.410 [DEBUG] [Thread-21728] [transport.py] [_log()] starting thread (client mode): 0xee925570
2026-04-15T15:59:04.410 [DEBUG] [Thread-21728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:59:04.424 [DEBUG] [Thread-21728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:59:04.424 [INFO] [Thread-21728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:59:04.431 [DEBUG] [Thread-21728] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:59:04.431 [DEBUG] [Thread-21728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:59:04.431 [DEBUG] [Thread-21728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:59:04.431 [DEBUG] [Thread-21728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:59:04.432 [DEBUG] [Thread-21728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:59:04.432 [DEBUG] [Thread-21728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:59:04.432 [DEBUG] [Thread-21728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:59:04.432 [DEBUG] [Thread-21728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:59:04.432 [DEBUG] [Thread-21728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:59:04.432 [DEBUG] [Thread-21728] [transport.py] [_log()] client lang: <none>
2026-04-15T15:59:04.432 [DEBUG] [Thread-21728] [transport.py] [_log()] server lang: <none>
2026-04-15T15:59:04.432 [DEBUG] [Thread-21728] [transport.py] [_log()] kex follows: False
2026-04-15T15:59:04.432 [DEBUG] [Thread-21728] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:59:04.432 [DEBUG] [Thread-21728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:59:04.432 [DEBUG] [Thread-21728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:59:04.433 [DEBUG] [Thread-21728] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:59:04.433 [DEBUG] [Thread-21728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:59:04.433 [DEBUG] [Thread-21728] [transport.py] [_log()] Compression: none
2026-04-15T15:59:04.433 [DEBUG] [Thread-21728] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:59:04.494 [DEBUG] [Thread-21728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:59:04.494 [DEBUG] [Thread-21728] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:59:04.495 [DEBUG] [Thread-21728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:59:04.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:59:04.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:59:04.550 [DEBUG] [Thread-21728] [transport.py] [_log()] userauth is OK
2026-04-15T15:59:04.551 [DEBUG] [Thread-21728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:59:04.551 [DEBUG] [Thread-21728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:59:04.551 [DEBUG] [Thread-21728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:59:04.551 [DEBUG] [Thread-21728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:59:04.576 [INFO] [Thread-21728] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:59:04.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:59:04.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:59:05.402 [DEBUG] [Thread-21728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:59:05.402 [DEBUG] [Thread-21728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:59:05.450 [DEBUG] [Thread-21728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:59:05.450 [DEBUG] [Thread-21728] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:59:05.459 [DEBUG] [Thread-21728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:59:05.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:59:05.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')
2026-04-15T15:59:05.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
2026-04-15T15:59:05.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:59:05.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:59:05.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:59:05.494 [DEBUG] [Thread-21728] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:59:08.493 [DEBUG] [Thread-21730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:59:16.235 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:59:16.235 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:59:23.541 [DEBUG] [Thread-21731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:59:35.167 [DEBUG] [Thread-21732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:59:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T15:59:35.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T15:59:35.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T15:59:36.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 59, 21), 9.04014, 54.6718, 0.0, 20.7317, 14.3038, 0, 0, 0, 2, 0, 0),)
2026-04-15T15:59:36.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:59:21
2026-04-15T15:59:37.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T15:59:37.629 [DEBUG] [Thread-21733] [transport.py] [_log()] starting thread (client mode): 0xf1333040
2026-04-15T15:59:37.629 [DEBUG] [Thread-21733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:59:37.650 [DEBUG] [Thread-21733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T15:59:37.650 [INFO] [Thread-21733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T15:59:37.653 [DEBUG] [Thread-21733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:59:37.653 [DEBUG] [Thread-21733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T15:59:37.653 [DEBUG] [Thread-21733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:59:37.653 [DEBUG] [Thread-21733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:59:37.653 [DEBUG] [Thread-21733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:59:37.654 [DEBUG] [Thread-21733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:59:37.654 [DEBUG] [Thread-21733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:59:37.654 [DEBUG] [Thread-21733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:59:37.654 [DEBUG] [Thread-21733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:59:37.654 [DEBUG] [Thread-21733] [transport.py] [_log()] client lang: <none>
2026-04-15T15:59:37.654 [DEBUG] [Thread-21733] [transport.py] [_log()] server lang: <none>
2026-04-15T15:59:37.654 [DEBUG] [Thread-21733] [transport.py] [_log()] kex follows: False
2026-04-15T15:59:37.654 [DEBUG] [Thread-21733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:59:37.654 [DEBUG] [Thread-21733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:59:37.654 [DEBUG] [Thread-21733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:59:37.655 [DEBUG] [Thread-21733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:59:37.655 [DEBUG] [Thread-21733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:59:37.655 [DEBUG] [Thread-21733] [transport.py] [_log()] Compression: none
2026-04-15T15:59:37.655 [DEBUG] [Thread-21733] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:59:37.672 [DEBUG] [Thread-21733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:59:37.673 [DEBUG] [Thread-21733] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:59:37.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T15:59:37.674 [DEBUG] [Thread-21733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T15:59:37.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:59:37.675 [DEBUG] [Thread-21733] [transport.py] [_log()] userauth is OK
2026-04-15T15:59:37.675 [DEBUG] [Thread-21733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:59:37.675 [DEBUG] [Thread-21733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:59:37.675 [DEBUG] [Thread-21733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T15:59:37.675 [DEBUG] [Thread-21733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:59:37.698 [INFO] [Thread-21733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:59:37.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:59:38.323 [DEBUG] [Thread-21733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:59:38.324 [DEBUG] [Thread-21733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:59:38.324 [DEBUG] [Thread-21733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T15:59:38.364 [DEBUG] [Thread-21733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:59:38.364 [DEBUG] [Thread-21733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:59:38.367 [DEBUG] [Thread-21733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:59:38.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:59:38.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T15:59:38.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T15:59:38.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T15:59:38.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:59:38.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T15:59:38.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:59:38.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:59:38.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T15:59:38.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.582775 -999.00  +14.40  27.04     60   +6.90 1 1 1 1 1   887    0 7.94 3.43 ----- 19.5 27.0 321.0 31.5 19.4 -28.1 18.9 -26.4 19.5 -24.0 20.3 -25.3
2026-04-15T15:59:38.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T15:59:38.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T15:59:38.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.582775
2026-04-15T15:59:38.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T15:59:38.393 [DEBUG] [Thread-21733] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:59:38.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T15:59:38.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T15:59:38.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T15:59:38.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T15:59:38.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:59:21', tmtdew=9.04014, humidity=54.6718, cloud=0.0, wind=20.7317, temperature=14.3038, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:59:11.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T15:59:38.571 [DEBUG] [Thread-21736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T15:59:38.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T15:59:38.652 [DEBUG] [Thread-21737] [transport.py] [_log()] starting thread (client mode): 0xf1330430
2026-04-15T15:59:38.653 [DEBUG] [Thread-21737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T15:59:38.667 [DEBUG] [Thread-21737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T15:59:38.667 [INFO] [Thread-21737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T15:59:38.674 [DEBUG] [Thread-21737] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T15:59:38.675 [DEBUG] [Thread-21737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T15:59:38.675 [DEBUG] [Thread-21737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T15:59:38.675 [DEBUG] [Thread-21737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:59:38.675 [DEBUG] [Thread-21737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T15:59:38.675 [DEBUG] [Thread-21737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:59:38.675 [DEBUG] [Thread-21737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T15:59:38.675 [DEBUG] [Thread-21737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T15:59:38.675 [DEBUG] [Thread-21737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T15:59:38.675 [DEBUG] [Thread-21737] [transport.py] [_log()] client lang: <none>
2026-04-15T15:59:38.675 [DEBUG] [Thread-21737] [transport.py] [_log()] server lang: <none>
2026-04-15T15:59:38.675 [DEBUG] [Thread-21737] [transport.py] [_log()] kex follows: False
2026-04-15T15:59:38.675 [DEBUG] [Thread-21737] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T15:59:38.676 [DEBUG] [Thread-21737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T15:59:38.676 [DEBUG] [Thread-21737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T15:59:38.676 [DEBUG] [Thread-21737] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T15:59:38.676 [DEBUG] [Thread-21737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T15:59:38.676 [DEBUG] [Thread-21737] [transport.py] [_log()] Compression: none
2026-04-15T15:59:38.676 [DEBUG] [Thread-21737] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T15:59:38.731 [DEBUG] [Thread-21737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T15:59:38.732 [DEBUG] [Thread-21737] [transport.py] [_log()] Switch to new keys ...
2026-04-15T15:59:38.732 [DEBUG] [Thread-21737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T15:59:38.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T15:59:38.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T15:59:38.789 [DEBUG] [Thread-21737] [transport.py] [_log()] userauth is OK
2026-04-15T15:59:38.789 [DEBUG] [Thread-21737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T15:59:38.789 [DEBUG] [Thread-21737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T15:59:38.789 [DEBUG] [Thread-21737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T15:59:38.789 [DEBUG] [Thread-21737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T15:59:38.815 [INFO] [Thread-21737] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T15:59:38.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T15:59:38.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T15:59:39.643 [DEBUG] [Thread-21737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T15:59:39.643 [DEBUG] [Thread-21737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T15:59:39.692 [DEBUG] [Thread-21737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T15:59:39.692 [DEBUG] [Thread-21737] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T15:59:39.701 [DEBUG] [Thread-21737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T15:59:39.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T15:59:39.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')
2026-04-15T15:59:39.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') -> 00000000
2026-04-15T15:59:39.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T15:59:39.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T15:59:39.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T15:59:39.735 [DEBUG] [Thread-21737] [transport.py] [_log()] EOF in transport thread
2026-04-15T15:59:53.610 [DEBUG] [Thread-21739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:00:08.641 [DEBUG] [Thread-21740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:00:09.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:00:09.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:00:09.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
2026-04-15T16:00:11.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 15, 59, 57), 9.2014, 53.9896, 0.0, 24.1207, 14.5194, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:00:11.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 15:59:57
2026-04-15T16:00:11.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:00:11.984 [DEBUG] [Thread-21741] [transport.py] [_log()] starting thread (client mode): 0xee927790
2026-04-15T16:00:11.984 [DEBUG] [Thread-21741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:00:12.003 [DEBUG] [Thread-21741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:00:12.003 [INFO] [Thread-21741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:00:12.005 [DEBUG] [Thread-21741] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:00:12.005 [DEBUG] [Thread-21741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:00:12.005 [DEBUG] [Thread-21741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:00:12.005 [DEBUG] [Thread-21741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:00:12.005 [DEBUG] [Thread-21741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:00:12.005 [DEBUG] [Thread-21741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:00:12.006 [DEBUG] [Thread-21741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:00:12.006 [DEBUG] [Thread-21741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:00:12.006 [DEBUG] [Thread-21741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:00:12.006 [DEBUG] [Thread-21741] [transport.py] [_log()] client lang: <none>
2026-04-15T16:00:12.006 [DEBUG] [Thread-21741] [transport.py] [_log()] server lang: <none>
2026-04-15T16:00:12.006 [DEBUG] [Thread-21741] [transport.py] [_log()] kex follows: False
2026-04-15T16:00:12.006 [DEBUG] [Thread-21741] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:00:12.006 [DEBUG] [Thread-21741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:00:12.006 [DEBUG] [Thread-21741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:00:12.006 [DEBUG] [Thread-21741] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:00:12.006 [DEBUG] [Thread-21741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:00:12.007 [DEBUG] [Thread-21741] [transport.py] [_log()] Compression: none
2026-04-15T16:00:12.007 [DEBUG] [Thread-21741] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:00:12.018 [DEBUG] [Thread-21741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:00:12.018 [DEBUG] [Thread-21741] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:00:12.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:00:12.019 [DEBUG] [Thread-21741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:00:12.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:00:12.020 [DEBUG] [Thread-21741] [transport.py] [_log()] userauth is OK
2026-04-15T16:00:12.020 [DEBUG] [Thread-21741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:00:12.020 [DEBUG] [Thread-21741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:00:12.020 [DEBUG] [Thread-21741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:00:12.020 [DEBUG] [Thread-21741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:00:12.036 [INFO] [Thread-21741] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:00:12.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:00:12.602 [DEBUG] [Thread-21741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:00:12.602 [DEBUG] [Thread-21741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:00:12.603 [DEBUG] [Thread-21741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:00:12.643 [DEBUG] [Thread-21741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:00:12.643 [DEBUG] [Thread-21741] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:00:12.645 [DEBUG] [Thread-21741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:00:12.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:00:12.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:00:12.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:00:12.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:00:12.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:00:12.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:00:12.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:00:12.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:00:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:00:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.583122 -999.00  +14.30  24.39     60   +6.70 1 1 1 1 1   887    0 7.77 1.43 ----- 23.1 24.4 327.2 29.6 19.4 -27.6 18.9 -26.2 19.6 -22.1 20.3 -24.7
2026-04-15T16:00:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:00:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:00:12.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.583122
2026-04-15T16:00:12.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:00:12.682 [DEBUG] [Thread-21741] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:00:12.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:00:12.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:00:12.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:00:12.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:00:12.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T15:59:57', tmtdew=9.2014, humidity=53.9896, cloud=0.0, wind=24.1207, temperature=14.5194, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T13:59:41.741', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:00:12.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:00:12.940 [DEBUG] [Thread-21744] [transport.py] [_log()] starting thread (client mode): 0xf1333fa0
2026-04-15T16:00:12.941 [DEBUG] [Thread-21744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:00:12.956 [DEBUG] [Thread-21744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:00:12.956 [INFO] [Thread-21744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:00:12.963 [DEBUG] [Thread-21744] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:00:12.964 [DEBUG] [Thread-21744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:00:12.964 [DEBUG] [Thread-21744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:00:12.964 [DEBUG] [Thread-21744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:00:12.964 [DEBUG] [Thread-21744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:00:12.964 [DEBUG] [Thread-21744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:00:12.964 [DEBUG] [Thread-21744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:00:12.964 [DEBUG] [Thread-21744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:00:12.964 [DEBUG] [Thread-21744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:00:12.964 [DEBUG] [Thread-21744] [transport.py] [_log()] client lang: <none>
2026-04-15T16:00:12.964 [DEBUG] [Thread-21744] [transport.py] [_log()] server lang: <none>
2026-04-15T16:00:12.964 [DEBUG] [Thread-21744] [transport.py] [_log()] kex follows: False
2026-04-15T16:00:12.964 [DEBUG] [Thread-21744] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:00:12.965 [DEBUG] [Thread-21744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:00:12.965 [DEBUG] [Thread-21744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:00:12.965 [DEBUG] [Thread-21744] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:00:12.965 [DEBUG] [Thread-21744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:00:12.965 [DEBUG] [Thread-21744] [transport.py] [_log()] Compression: none
2026-04-15T16:00:12.965 [DEBUG] [Thread-21744] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:00:13.021 [DEBUG] [Thread-21744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:00:13.022 [DEBUG] [Thread-21744] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:00:13.022 [DEBUG] [Thread-21744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:00:13.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:00:13.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:00:13.078 [DEBUG] [Thread-21744] [transport.py] [_log()] userauth is OK
2026-04-15T16:00:13.078 [DEBUG] [Thread-21744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:00:13.079 [DEBUG] [Thread-21744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:00:13.079 [DEBUG] [Thread-21744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:00:13.079 [DEBUG] [Thread-21744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:00:13.104 [INFO] [Thread-21744] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:00:13.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:00:13.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:00:13.960 [DEBUG] [Thread-21744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:00:13.960 [DEBUG] [Thread-21744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:00:14.010 [DEBUG] [Thread-21744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:00:14.010 [DEBUG] [Thread-21744] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:00:14.019 [DEBUG] [Thread-21744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:00:14.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:00:14.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')
2026-04-15T16:00:14.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
2026-04-15T16:00:14.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:00:14.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:00:14.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:00:14.054 [DEBUG] [Thread-21744] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:00:16.374 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:00:16.375 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:00:23.673 [DEBUG] [Thread-21746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:00:35.241 [DEBUG] [Thread-21747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:00:38.716 [DEBUG] [Thread-21748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:00:44.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:00:44.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:00:44.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
2026-04-15T16:00:45.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 0, 32), 9.22401, 53.9066, 0.0, 20.6456, 14.5193, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:00:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:00:32
2026-04-15T16:00:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:00:46.168 [DEBUG] [Thread-21749] [transport.py] [_log()] starting thread (client mode): 0xee9ad5a0
2026-04-15T16:00:46.168 [DEBUG] [Thread-21749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:00:46.185 [DEBUG] [Thread-21749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:00:46.185 [INFO] [Thread-21749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:00:46.188 [DEBUG] [Thread-21749] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:00:46.189 [DEBUG] [Thread-21749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:00:46.189 [DEBUG] [Thread-21749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:00:46.189 [DEBUG] [Thread-21749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:00:46.189 [DEBUG] [Thread-21749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:00:46.189 [DEBUG] [Thread-21749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:00:46.189 [DEBUG] [Thread-21749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:00:46.189 [DEBUG] [Thread-21749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:00:46.189 [DEBUG] [Thread-21749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:00:46.189 [DEBUG] [Thread-21749] [transport.py] [_log()] client lang: <none>
2026-04-15T16:00:46.189 [DEBUG] [Thread-21749] [transport.py] [_log()] server lang: <none>
2026-04-15T16:00:46.189 [DEBUG] [Thread-21749] [transport.py] [_log()] kex follows: False
2026-04-15T16:00:46.189 [DEBUG] [Thread-21749] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:00:46.190 [DEBUG] [Thread-21749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:00:46.190 [DEBUG] [Thread-21749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:00:46.190 [DEBUG] [Thread-21749] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:00:46.190 [DEBUG] [Thread-21749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:00:46.190 [DEBUG] [Thread-21749] [transport.py] [_log()] Compression: none
2026-04-15T16:00:46.190 [DEBUG] [Thread-21749] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:00:46.210 [DEBUG] [Thread-21749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:00:46.210 [DEBUG] [Thread-21749] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:00:46.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:00:46.211 [DEBUG] [Thread-21749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:00:46.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:00:46.212 [DEBUG] [Thread-21749] [transport.py] [_log()] userauth is OK
2026-04-15T16:00:46.212 [DEBUG] [Thread-21749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:00:46.212 [DEBUG] [Thread-21749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:00:46.212 [DEBUG] [Thread-21749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:00:46.212 [DEBUG] [Thread-21749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:00:46.225 [INFO] [Thread-21749] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:00:46.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:00:46.806 [DEBUG] [Thread-21749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:00:46.806 [DEBUG] [Thread-21749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:00:46.807 [DEBUG] [Thread-21749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:00:46.847 [DEBUG] [Thread-21749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:00:46.847 [DEBUG] [Thread-21749] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:00:46.850 [DEBUG] [Thread-21749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:00:46.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:00:46.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:00:46.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:00:46.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:00:46.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:00:46.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:00:46.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:00:46.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:00:46.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:00:46.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.583816 -999.00  +14.20  16.03     60   +6.60 1 1 1 1 1   887    0 7.82 -3.75 ----- 13.0 16.0 314.0 21.0 19.4 -26.8 18.8 -25.1 19.6 -21.7 20.3 -23.8
2026-04-15T16:00:46.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:00:46.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:00:46.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.583816
2026-04-15T16:00:46.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:00:46.874 [DEBUG] [Thread-21749] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:00:46.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:00:46.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:00:46.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:00:46.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:00:46.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:00:32', tmtdew=9.22401, humidity=53.9066, cloud=0.0, wind=20.6456, temperature=14.5193, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:00:41.702', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:00:47.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:00:47.118 [DEBUG] [Thread-21752] [transport.py] [_log()] starting thread (client mode): 0xee9ae170
2026-04-15T16:00:47.118 [DEBUG] [Thread-21752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:00:47.135 [DEBUG] [Thread-21752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:00:47.135 [INFO] [Thread-21752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:00:47.142 [DEBUG] [Thread-21752] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:00:47.143 [DEBUG] [Thread-21752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:00:47.143 [DEBUG] [Thread-21752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:00:47.143 [DEBUG] [Thread-21752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:00:47.143 [DEBUG] [Thread-21752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:00:47.143 [DEBUG] [Thread-21752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:00:47.143 [DEBUG] [Thread-21752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:00:47.143 [DEBUG] [Thread-21752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:00:47.143 [DEBUG] [Thread-21752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:00:47.143 [DEBUG] [Thread-21752] [transport.py] [_log()] client lang: <none>
2026-04-15T16:00:47.143 [DEBUG] [Thread-21752] [transport.py] [_log()] server lang: <none>
2026-04-15T16:00:47.143 [DEBUG] [Thread-21752] [transport.py] [_log()] kex follows: False
2026-04-15T16:00:47.143 [DEBUG] [Thread-21752] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:00:47.144 [DEBUG] [Thread-21752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:00:47.144 [DEBUG] [Thread-21752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:00:47.144 [DEBUG] [Thread-21752] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:00:47.144 [DEBUG] [Thread-21752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:00:47.144 [DEBUG] [Thread-21752] [transport.py] [_log()] Compression: none
2026-04-15T16:00:47.144 [DEBUG] [Thread-21752] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:00:47.200 [DEBUG] [Thread-21752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:00:47.200 [DEBUG] [Thread-21752] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:00:47.201 [DEBUG] [Thread-21752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:00:47.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:00:47.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:00:47.257 [DEBUG] [Thread-21752] [transport.py] [_log()] userauth is OK
2026-04-15T16:00:47.257 [DEBUG] [Thread-21752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:00:47.257 [DEBUG] [Thread-21752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:00:47.257 [DEBUG] [Thread-21752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:00:47.257 [DEBUG] [Thread-21752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:00:47.280 [INFO] [Thread-21752] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:00:47.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:00:47.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:00:48.143 [DEBUG] [Thread-21752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:00:48.143 [DEBUG] [Thread-21752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:00:48.191 [DEBUG] [Thread-21752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:00:48.191 [DEBUG] [Thread-21752] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:00:48.200 [DEBUG] [Thread-21752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:00:48.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:00:48.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')
2026-04-15T16:00:48.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
2026-04-15T16:00:48.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:00:48.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:00:48.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:00:48.235 [DEBUG] [Thread-21752] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:00:53.748 [DEBUG] [Thread-21754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:01:08.792 [DEBUG] [Thread-21755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:01:16.515 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:01:16.516 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:01:18.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:01:18.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:01:18.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
2026-04-15T16:01:19.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 1, 8), 9.15479, 54.2047, 0.0, 19.4461, 14.6848, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:01:19.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:01:08
2026-04-15T16:01:19.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:01:20.319 [DEBUG] [Thread-21756] [transport.py] [_log()] starting thread (client mode): 0xf1333ac0
2026-04-15T16:01:20.319 [DEBUG] [Thread-21756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:01:20.338 [DEBUG] [Thread-21756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:01:20.338 [INFO] [Thread-21756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:01:20.341 [DEBUG] [Thread-21756] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:01:20.341 [DEBUG] [Thread-21756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:01:20.341 [DEBUG] [Thread-21756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:01:20.341 [DEBUG] [Thread-21756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:01:20.341 [DEBUG] [Thread-21756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:01:20.341 [DEBUG] [Thread-21756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:01:20.341 [DEBUG] [Thread-21756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:01:20.342 [DEBUG] [Thread-21756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:01:20.342 [DEBUG] [Thread-21756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:01:20.342 [DEBUG] [Thread-21756] [transport.py] [_log()] client lang: <none>
2026-04-15T16:01:20.342 [DEBUG] [Thread-21756] [transport.py] [_log()] server lang: <none>
2026-04-15T16:01:20.342 [DEBUG] [Thread-21756] [transport.py] [_log()] kex follows: False
2026-04-15T16:01:20.342 [DEBUG] [Thread-21756] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:01:20.342 [DEBUG] [Thread-21756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:01:20.342 [DEBUG] [Thread-21756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:01:20.342 [DEBUG] [Thread-21756] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:01:20.342 [DEBUG] [Thread-21756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:01:20.342 [DEBUG] [Thread-21756] [transport.py] [_log()] Compression: none
2026-04-15T16:01:20.343 [DEBUG] [Thread-21756] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:01:20.351 [DEBUG] [Thread-21756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:01:20.351 [DEBUG] [Thread-21756] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:01:20.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:01:20.352 [DEBUG] [Thread-21756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:01:20.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:01:20.353 [DEBUG] [Thread-21756] [transport.py] [_log()] userauth is OK
2026-04-15T16:01:20.353 [DEBUG] [Thread-21756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:01:20.353 [DEBUG] [Thread-21756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:01:20.353 [DEBUG] [Thread-21756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:01:20.353 [DEBUG] [Thread-21756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:01:20.377 [INFO] [Thread-21756] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:01:20.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:01:21.043 [DEBUG] [Thread-21756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:01:21.043 [DEBUG] [Thread-21756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:01:21.044 [DEBUG] [Thread-21756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:01:21.084 [DEBUG] [Thread-21756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:01:21.084 [DEBUG] [Thread-21756] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:01:21.087 [DEBUG] [Thread-21756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:01:21.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:01:21.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:01:21.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:01:21.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:01:21.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:01:21.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:01:21.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:01:21.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:01:21.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:01:21.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.584164 -999.00  +14.40  13.10     61   +7.00 1 1 1 1 1   887    0 7.51 -8.59 ----- 16.1 13.1 311.6 15.2 19.4 -27.5 18.9 -25.6 19.6 -22.5 20.4 -24.4
2026-04-15T16:01:21.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:01:21.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:01:21.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.584164
2026-04-15T16:01:21.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:01:21.114 [DEBUG] [Thread-21756] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:01:21.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:01:21.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:01:21.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:01:21.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:01:21.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:01:08', tmtdew=9.15479, humidity=54.2047, cloud=0.0, wind=19.4461, temperature=14.6848, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:01:11.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:01:21.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:01:21.368 [DEBUG] [Thread-21759] [transport.py] [_log()] starting thread (client mode): 0xee9bcd00
2026-04-15T16:01:21.369 [DEBUG] [Thread-21759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:01:21.383 [DEBUG] [Thread-21759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:01:21.383 [INFO] [Thread-21759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:01:21.390 [DEBUG] [Thread-21759] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:01:21.390 [DEBUG] [Thread-21759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:01:21.390 [DEBUG] [Thread-21759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:01:21.391 [DEBUG] [Thread-21759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:01:21.391 [DEBUG] [Thread-21759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:01:21.391 [DEBUG] [Thread-21759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:01:21.391 [DEBUG] [Thread-21759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:01:21.391 [DEBUG] [Thread-21759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:01:21.391 [DEBUG] [Thread-21759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:01:21.391 [DEBUG] [Thread-21759] [transport.py] [_log()] client lang: <none>
2026-04-15T16:01:21.391 [DEBUG] [Thread-21759] [transport.py] [_log()] server lang: <none>
2026-04-15T16:01:21.391 [DEBUG] [Thread-21759] [transport.py] [_log()] kex follows: False
2026-04-15T16:01:21.391 [DEBUG] [Thread-21759] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:01:21.391 [DEBUG] [Thread-21759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:01:21.391 [DEBUG] [Thread-21759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:01:21.392 [DEBUG] [Thread-21759] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:01:21.392 [DEBUG] [Thread-21759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:01:21.392 [DEBUG] [Thread-21759] [transport.py] [_log()] Compression: none
2026-04-15T16:01:21.392 [DEBUG] [Thread-21759] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:01:21.449 [DEBUG] [Thread-21759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:01:21.449 [DEBUG] [Thread-21759] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:01:21.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:01:21.450 [DEBUG] [Thread-21759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:01:21.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:01:21.506 [DEBUG] [Thread-21759] [transport.py] [_log()] userauth is OK
2026-04-15T16:01:21.506 [DEBUG] [Thread-21759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:01:21.506 [DEBUG] [Thread-21759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:01:21.506 [DEBUG] [Thread-21759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:01:21.507 [DEBUG] [Thread-21759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:01:21.532 [INFO] [Thread-21759] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:01:21.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:01:21.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:01:22.411 [DEBUG] [Thread-21759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:01:22.411 [DEBUG] [Thread-21759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:01:22.459 [DEBUG] [Thread-21759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:01:22.459 [DEBUG] [Thread-21759] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:01:22.468 [DEBUG] [Thread-21759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:01:22.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:01:22.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')
2026-04-15T16:01:22.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
2026-04-15T16:01:22.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:01:22.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:01:22.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:01:22.503 [DEBUG] [Thread-21759] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:01:23.822 [DEBUG] [Thread-21761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:01:35.315 [DEBUG] [Thread-21762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:01:38.866 [DEBUG] [Thread-21763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:01:52.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:01:52.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:01:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T16:01:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 1, 43), 9.6952, 52.3823, 0.0, 18.8078, 15.5358, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:01:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:01:43
2026-04-15T16:01:53.898 [DEBUG] [Thread-21764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:01:54.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:01:54.547 [DEBUG] [Thread-21765] [transport.py] [_log()] starting thread (client mode): 0xf13337c0
2026-04-15T16:01:54.547 [DEBUG] [Thread-21765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:01:54.567 [DEBUG] [Thread-21765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:01:54.567 [INFO] [Thread-21765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:01:54.571 [DEBUG] [Thread-21765] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:01:54.571 [DEBUG] [Thread-21765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:01:54.571 [DEBUG] [Thread-21765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:01:54.571 [DEBUG] [Thread-21765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:01:54.571 [DEBUG] [Thread-21765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:01:54.571 [DEBUG] [Thread-21765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:01:54.571 [DEBUG] [Thread-21765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:01:54.571 [DEBUG] [Thread-21765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:01:54.571 [DEBUG] [Thread-21765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:01:54.571 [DEBUG] [Thread-21765] [transport.py] [_log()] client lang: <none>
2026-04-15T16:01:54.571 [DEBUG] [Thread-21765] [transport.py] [_log()] server lang: <none>
2026-04-15T16:01:54.572 [DEBUG] [Thread-21765] [transport.py] [_log()] kex follows: False
2026-04-15T16:01:54.572 [DEBUG] [Thread-21765] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:01:54.572 [DEBUG] [Thread-21765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:01:54.572 [DEBUG] [Thread-21765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:01:54.572 [DEBUG] [Thread-21765] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:01:54.572 [DEBUG] [Thread-21765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:01:54.572 [DEBUG] [Thread-21765] [transport.py] [_log()] Compression: none
2026-04-15T16:01:54.572 [DEBUG] [Thread-21765] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:01:54.583 [DEBUG] [Thread-21765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:01:54.583 [DEBUG] [Thread-21765] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:01:54.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:01:54.584 [DEBUG] [Thread-21765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:01:54.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:01:54.585 [DEBUG] [Thread-21765] [transport.py] [_log()] userauth is OK
2026-04-15T16:01:54.585 [DEBUG] [Thread-21765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:01:54.585 [DEBUG] [Thread-21765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:01:54.585 [DEBUG] [Thread-21765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:01:54.585 [DEBUG] [Thread-21765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:01:54.603 [INFO] [Thread-21765] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:01:54.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:01:55.225 [DEBUG] [Thread-21765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:01:55.225 [DEBUG] [Thread-21765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:01:55.225 [DEBUG] [Thread-21765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:01:55.266 [DEBUG] [Thread-21765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:01:55.266 [DEBUG] [Thread-21765] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:01:55.269 [DEBUG] [Thread-21765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:01:55.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:01:55.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:01:55.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:01:55.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:01:55.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:01:55.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:01:55.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:01:55.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:01:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:01:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.584510 -999.00  +14.30  17.91     60   +6.70 1 1 1 1 1   887    0 7.54 -10.25 ----- 13.3 17.9 310.0 20.6 19.4 -27.1 18.9 -25.3 19.6 -22.3 20.3 -24.4
2026-04-15T16:01:55.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:01:55.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:01:55.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.584510
2026-04-15T16:01:55.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:01:55.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:01:55.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:01:55.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:01:55.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:01:55.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:01:43', tmtdew=9.6952, humidity=52.3823, cloud=0.0, wind=18.8078, temperature=15.5358, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:01:41.664', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:01:55.294 [DEBUG] [Thread-21765] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:01:55.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:01:55.549 [DEBUG] [Thread-21768] [transport.py] [_log()] starting thread (client mode): 0xee925f00
2026-04-15T16:01:55.549 [DEBUG] [Thread-21768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:01:55.563 [DEBUG] [Thread-21768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:01:55.564 [INFO] [Thread-21768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:01:55.571 [DEBUG] [Thread-21768] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:01:55.571 [DEBUG] [Thread-21768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:01:55.571 [DEBUG] [Thread-21768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:01:55.571 [DEBUG] [Thread-21768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:01:55.571 [DEBUG] [Thread-21768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:01:55.571 [DEBUG] [Thread-21768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:01:55.571 [DEBUG] [Thread-21768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:01:55.571 [DEBUG] [Thread-21768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:01:55.572 [DEBUG] [Thread-21768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:01:55.572 [DEBUG] [Thread-21768] [transport.py] [_log()] client lang: <none>
2026-04-15T16:01:55.572 [DEBUG] [Thread-21768] [transport.py] [_log()] server lang: <none>
2026-04-15T16:01:55.572 [DEBUG] [Thread-21768] [transport.py] [_log()] kex follows: False
2026-04-15T16:01:55.572 [DEBUG] [Thread-21768] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:01:55.572 [DEBUG] [Thread-21768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:01:55.572 [DEBUG] [Thread-21768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:01:55.572 [DEBUG] [Thread-21768] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:01:55.572 [DEBUG] [Thread-21768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:01:55.572 [DEBUG] [Thread-21768] [transport.py] [_log()] Compression: none
2026-04-15T16:01:55.572 [DEBUG] [Thread-21768] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:01:55.626 [DEBUG] [Thread-21768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:01:55.627 [DEBUG] [Thread-21768] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:01:55.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:01:55.627 [DEBUG] [Thread-21768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:01:55.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:01:55.683 [DEBUG] [Thread-21768] [transport.py] [_log()] userauth is OK
2026-04-15T16:01:55.684 [DEBUG] [Thread-21768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:01:55.684 [DEBUG] [Thread-21768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:01:55.684 [DEBUG] [Thread-21768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:01:55.684 [DEBUG] [Thread-21768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:01:55.702 [INFO] [Thread-21768] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:01:55.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:01:55.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:01:56.525 [DEBUG] [Thread-21768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:01:56.525 [DEBUG] [Thread-21768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:01:56.574 [DEBUG] [Thread-21768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:01:56.574 [DEBUG] [Thread-21768] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:01:56.582 [DEBUG] [Thread-21768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:01:56.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:01:56.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')
2026-04-15T16:01:56.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
2026-04-15T16:01:56.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:01:56.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:01:56.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:01:56.619 [DEBUG] [Thread-21768] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:02:08.928 [DEBUG] [Thread-21770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:02:16.655 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:02:16.656 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:02:23.971 [DEBUG] [Thread-21771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:02:26.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:02:26.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:02:26.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
2026-04-15T16:02:27.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 2, 19), 9.42474, 53.0782, 0.0, 16.2695, 14.8007, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:02:27.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:02:19
2026-04-15T16:02:28.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:02:28.740 [DEBUG] [Thread-21772] [transport.py] [_log()] starting thread (client mode): 0xee91d7e0
2026-04-15T16:02:28.740 [DEBUG] [Thread-21772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:02:28.761 [DEBUG] [Thread-21772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:02:28.761 [INFO] [Thread-21772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:02:28.765 [DEBUG] [Thread-21772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:02:28.765 [DEBUG] [Thread-21772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:02:28.765 [DEBUG] [Thread-21772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:02:28.765 [DEBUG] [Thread-21772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:02:28.765 [DEBUG] [Thread-21772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:02:28.765 [DEBUG] [Thread-21772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:02:28.765 [DEBUG] [Thread-21772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:02:28.765 [DEBUG] [Thread-21772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:02:28.765 [DEBUG] [Thread-21772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:02:28.765 [DEBUG] [Thread-21772] [transport.py] [_log()] client lang: <none>
2026-04-15T16:02:28.766 [DEBUG] [Thread-21772] [transport.py] [_log()] server lang: <none>
2026-04-15T16:02:28.766 [DEBUG] [Thread-21772] [transport.py] [_log()] kex follows: False
2026-04-15T16:02:28.766 [DEBUG] [Thread-21772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:02:28.766 [DEBUG] [Thread-21772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:02:28.766 [DEBUG] [Thread-21772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:02:28.766 [DEBUG] [Thread-21772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:02:28.766 [DEBUG] [Thread-21772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:02:28.766 [DEBUG] [Thread-21772] [transport.py] [_log()] Compression: none
2026-04-15T16:02:28.766 [DEBUG] [Thread-21772] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:02:28.784 [DEBUG] [Thread-21772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:02:28.784 [DEBUG] [Thread-21772] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:02:28.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:02:28.785 [DEBUG] [Thread-21772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:02:28.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:02:28.786 [DEBUG] [Thread-21772] [transport.py] [_log()] userauth is OK
2026-04-15T16:02:28.786 [DEBUG] [Thread-21772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:02:28.786 [DEBUG] [Thread-21772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:02:28.786 [DEBUG] [Thread-21772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:02:28.786 [DEBUG] [Thread-21772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:02:28.811 [INFO] [Thread-21772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:02:28.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:02:29.505 [DEBUG] [Thread-21772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:02:29.506 [DEBUG] [Thread-21772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:02:29.506 [DEBUG] [Thread-21772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:02:29.546 [DEBUG] [Thread-21772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:02:29.546 [DEBUG] [Thread-21772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:02:29.549 [DEBUG] [Thread-21772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:02:29.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:02:29.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:02:29.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:02:29.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:02:29.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:02:29.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:02:29.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:02:29.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:02:29.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:02:29.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.584858 -999.00  +14.50  11.38     60   +6.90 1 1 1 1 1   887    0 7.36 -12.21 ----- 8.1 11.4 335.6 16.3 19.4 -26.5 18.9 -24.8 19.6 -21.8 20.5 -23.7
2026-04-15T16:02:29.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:02:29.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:02:29.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.584858
2026-04-15T16:02:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:02:29.572 [DEBUG] [Thread-21772] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:02:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:02:29.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:02:29.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:02:29.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:02:29.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:02:19', tmtdew=9.42474, humidity=53.0782, cloud=0.0, wind=16.2695, temperature=14.8007, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:02:11.731', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:02:29.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:02:29.812 [DEBUG] [Thread-21775] [transport.py] [_log()] starting thread (client mode): 0xee91d5d0
2026-04-15T16:02:29.812 [DEBUG] [Thread-21775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:02:29.828 [DEBUG] [Thread-21775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:02:29.828 [INFO] [Thread-21775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:02:29.836 [DEBUG] [Thread-21775] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:02:29.836 [DEBUG] [Thread-21775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:02:29.836 [DEBUG] [Thread-21775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:02:29.836 [DEBUG] [Thread-21775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:02:29.836 [DEBUG] [Thread-21775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:02:29.836 [DEBUG] [Thread-21775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:02:29.836 [DEBUG] [Thread-21775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:02:29.836 [DEBUG] [Thread-21775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:02:29.837 [DEBUG] [Thread-21775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:02:29.837 [DEBUG] [Thread-21775] [transport.py] [_log()] client lang: <none>
2026-04-15T16:02:29.837 [DEBUG] [Thread-21775] [transport.py] [_log()] server lang: <none>
2026-04-15T16:02:29.837 [DEBUG] [Thread-21775] [transport.py] [_log()] kex follows: False
2026-04-15T16:02:29.837 [DEBUG] [Thread-21775] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:02:29.837 [DEBUG] [Thread-21775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:02:29.837 [DEBUG] [Thread-21775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:02:29.837 [DEBUG] [Thread-21775] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:02:29.837 [DEBUG] [Thread-21775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:02:29.837 [DEBUG] [Thread-21775] [transport.py] [_log()] Compression: none
2026-04-15T16:02:29.837 [DEBUG] [Thread-21775] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:02:29.893 [DEBUG] [Thread-21775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:02:29.893 [DEBUG] [Thread-21775] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:02:29.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:02:29.894 [DEBUG] [Thread-21775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:02:29.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:02:29.950 [DEBUG] [Thread-21775] [transport.py] [_log()] userauth is OK
2026-04-15T16:02:29.950 [DEBUG] [Thread-21775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:02:29.950 [DEBUG] [Thread-21775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:02:29.950 [DEBUG] [Thread-21775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:02:29.950 [DEBUG] [Thread-21775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:02:29.977 [INFO] [Thread-21775] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:02:29.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:02:29.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:02:30.844 [DEBUG] [Thread-21775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:02:30.845 [DEBUG] [Thread-21775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:02:30.893 [DEBUG] [Thread-21775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:02:30.893 [DEBUG] [Thread-21775] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:02:30.902 [DEBUG] [Thread-21775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:02:30.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:02:30.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')
2026-04-15T16:02:30.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
2026-04-15T16:02:30.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:02:30.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:02:30.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:02:30.941 [DEBUG] [Thread-21775] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:02:35.389 [DEBUG] [Thread-21777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:02:39.002 [DEBUG] [Thread-21778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:02:54.046 [DEBUG] [Thread-21779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:03:00.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:03:00.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:03:00.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
2026-04-15T16:03:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 2, 55), 9.35273, 53.2769, 0.0, 12.5644, 14.4353, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:03:02.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:02:55
2026-04-15T16:03:02.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:03:03.051 [DEBUG] [Thread-21780] [transport.py] [_log()] starting thread (client mode): 0xee9acc10
2026-04-15T16:03:03.051 [DEBUG] [Thread-21780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:03:03.063 [DEBUG] [Thread-21780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:03:03.063 [INFO] [Thread-21780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:03:03.066 [DEBUG] [Thread-21780] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:03:03.066 [DEBUG] [Thread-21780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:03:03.066 [DEBUG] [Thread-21780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:03:03.066 [DEBUG] [Thread-21780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:03:03.066 [DEBUG] [Thread-21780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:03:03.066 [DEBUG] [Thread-21780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:03:03.066 [DEBUG] [Thread-21780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:03:03.066 [DEBUG] [Thread-21780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:03:03.066 [DEBUG] [Thread-21780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:03:03.066 [DEBUG] [Thread-21780] [transport.py] [_log()] client lang: <none>
2026-04-15T16:03:03.066 [DEBUG] [Thread-21780] [transport.py] [_log()] server lang: <none>
2026-04-15T16:03:03.066 [DEBUG] [Thread-21780] [transport.py] [_log()] kex follows: False
2026-04-15T16:03:03.067 [DEBUG] [Thread-21780] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:03:03.067 [DEBUG] [Thread-21780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:03:03.067 [DEBUG] [Thread-21780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:03:03.067 [DEBUG] [Thread-21780] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:03:03.067 [DEBUG] [Thread-21780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:03:03.067 [DEBUG] [Thread-21780] [transport.py] [_log()] Compression: none
2026-04-15T16:03:03.067 [DEBUG] [Thread-21780] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:03:03.084 [DEBUG] [Thread-21780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:03:03.084 [DEBUG] [Thread-21780] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:03:03.085 [DEBUG] [Thread-21780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:03:03.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:03:03.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:03:03.086 [DEBUG] [Thread-21780] [transport.py] [_log()] userauth is OK
2026-04-15T16:03:03.086 [DEBUG] [Thread-21780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:03:03.086 [DEBUG] [Thread-21780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:03:03.086 [DEBUG] [Thread-21780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:03:03.087 [DEBUG] [Thread-21780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:03:03.121 [INFO] [Thread-21780] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:03:03.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:03:03.762 [DEBUG] [Thread-21780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:03:03.762 [DEBUG] [Thread-21780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:03:03.763 [DEBUG] [Thread-21780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:03:03.803 [DEBUG] [Thread-21780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:03:03.803 [DEBUG] [Thread-21780] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:03:03.806 [DEBUG] [Thread-21780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:03:03.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:03:03.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:03:03.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:03:03.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:03:03.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:03:03.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:03:03.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:03:03.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:03:03.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:03:03.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.585205 -999.00  +14.50  10.31     59   +6.70 1 1 1 1 1   887    0 7.28 -14.23 ----- 19.1 10.3 342.8 17.4 19.4 -27.5 18.9 -24.8 19.5 -23.2 20.3 -25.4
2026-04-15T16:03:03.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:03:03.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:03:03.833 [DEBUG] [Thread-21780] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:03:03.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.585205
2026-04-15T16:03:03.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:03:03.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:03:03.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:03:03.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:03:03.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:03:03.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:02:55', tmtdew=9.35273, humidity=53.2769, cloud=0.0, wind=12.5644, temperature=14.4353, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:02:41.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:03:04.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:03:04.095 [DEBUG] [Thread-21783] [transport.py] [_log()] starting thread (client mode): 0xf1332620
2026-04-15T16:03:04.095 [DEBUG] [Thread-21783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:03:04.109 [DEBUG] [Thread-21783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:03:04.109 [INFO] [Thread-21783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:03:04.117 [DEBUG] [Thread-21783] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:03:04.117 [DEBUG] [Thread-21783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:03:04.117 [DEBUG] [Thread-21783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:03:04.117 [DEBUG] [Thread-21783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:03:04.117 [DEBUG] [Thread-21783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:03:04.117 [DEBUG] [Thread-21783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:03:04.117 [DEBUG] [Thread-21783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:03:04.117 [DEBUG] [Thread-21783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:03:04.117 [DEBUG] [Thread-21783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:03:04.117 [DEBUG] [Thread-21783] [transport.py] [_log()] client lang: <none>
2026-04-15T16:03:04.118 [DEBUG] [Thread-21783] [transport.py] [_log()] server lang: <none>
2026-04-15T16:03:04.118 [DEBUG] [Thread-21783] [transport.py] [_log()] kex follows: False
2026-04-15T16:03:04.118 [DEBUG] [Thread-21783] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:03:04.118 [DEBUG] [Thread-21783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:03:04.118 [DEBUG] [Thread-21783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:03:04.118 [DEBUG] [Thread-21783] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:03:04.118 [DEBUG] [Thread-21783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:03:04.118 [DEBUG] [Thread-21783] [transport.py] [_log()] Compression: none
2026-04-15T16:03:04.118 [DEBUG] [Thread-21783] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:03:04.178 [DEBUG] [Thread-21783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:03:04.179 [DEBUG] [Thread-21783] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:03:04.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:03:04.180 [DEBUG] [Thread-21783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:03:04.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:03:04.239 [DEBUG] [Thread-21783] [transport.py] [_log()] userauth is OK
2026-04-15T16:03:04.239 [DEBUG] [Thread-21783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:03:04.239 [DEBUG] [Thread-21783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:03:04.239 [DEBUG] [Thread-21783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:03:04.240 [DEBUG] [Thread-21783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:03:04.268 [INFO] [Thread-21783] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:03:04.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:03:04.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:03:05.158 [DEBUG] [Thread-21783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:03:05.158 [DEBUG] [Thread-21783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:03:05.207 [DEBUG] [Thread-21783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:03:05.207 [DEBUG] [Thread-21783] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:03:05.216 [DEBUG] [Thread-21783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:03:05.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:03:05.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')
2026-04-15T16:03:05.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
2026-04-15T16:03:05.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:03:05.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:03:05.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:03:05.251 [DEBUG] [Thread-21783] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:03:09.077 [DEBUG] [Thread-21785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:03:16.796 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:03:16.797 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:03:24.123 [DEBUG] [Thread-21786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:03:35.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:03:35.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:03:35.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T16:03:35.465 [DEBUG] [Thread-21787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:03:36.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 2, 55), 9.35273, 53.2769, 0.0, 12.5644, 14.4353, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:03:36.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:02:55
2026-04-15T16:03:36.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:03:37.424 [DEBUG] [Thread-21788] [transport.py] [_log()] starting thread (client mode): 0xf1330430
2026-04-15T16:03:37.424 [DEBUG] [Thread-21788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:03:37.444 [DEBUG] [Thread-21788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:03:37.444 [INFO] [Thread-21788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:03:37.447 [DEBUG] [Thread-21788] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:03:37.448 [DEBUG] [Thread-21788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:03:37.448 [DEBUG] [Thread-21788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:03:37.448 [DEBUG] [Thread-21788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:03:37.448 [DEBUG] [Thread-21788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:03:37.448 [DEBUG] [Thread-21788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:03:37.448 [DEBUG] [Thread-21788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:03:37.448 [DEBUG] [Thread-21788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:03:37.448 [DEBUG] [Thread-21788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:03:37.448 [DEBUG] [Thread-21788] [transport.py] [_log()] client lang: <none>
2026-04-15T16:03:37.448 [DEBUG] [Thread-21788] [transport.py] [_log()] server lang: <none>
2026-04-15T16:03:37.448 [DEBUG] [Thread-21788] [transport.py] [_log()] kex follows: False
2026-04-15T16:03:37.448 [DEBUG] [Thread-21788] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:03:37.449 [DEBUG] [Thread-21788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:03:37.449 [DEBUG] [Thread-21788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:03:37.449 [DEBUG] [Thread-21788] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:03:37.449 [DEBUG] [Thread-21788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:03:37.449 [DEBUG] [Thread-21788] [transport.py] [_log()] Compression: none
2026-04-15T16:03:37.449 [DEBUG] [Thread-21788] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:03:37.465 [DEBUG] [Thread-21788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:03:37.466 [DEBUG] [Thread-21788] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:03:37.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:03:37.466 [DEBUG] [Thread-21788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:03:37.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:03:37.468 [DEBUG] [Thread-21788] [transport.py] [_log()] userauth is OK
2026-04-15T16:03:37.468 [DEBUG] [Thread-21788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:03:37.468 [DEBUG] [Thread-21788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:03:37.468 [DEBUG] [Thread-21788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:03:37.468 [DEBUG] [Thread-21788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:03:37.492 [INFO] [Thread-21788] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:03:37.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:03:38.105 [DEBUG] [Thread-21788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:03:38.106 [DEBUG] [Thread-21788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:03:38.106 [DEBUG] [Thread-21788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:03:38.147 [DEBUG] [Thread-21788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:03:38.147 [DEBUG] [Thread-21788] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:03:38.150 [DEBUG] [Thread-21788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:03:38.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:03:38.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:03:38.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:03:38.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:03:38.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:03:38.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:03:38.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:03:38.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:03:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:03:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.585552 -999.00  +14.40  15.37     59   +6.50 1 1 1 1 1   887    0 7.53 -14.28 ----- 13.1 15.4 317.6 21.9 19.3 -27.2 18.8 -25.3 19.3 -22.2 20.1 -24.9
2026-04-15T16:03:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:03:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:03:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.585552
2026-04-15T16:03:38.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:03:38.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:03:38.176 [DEBUG] [Thread-21788] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:03:38.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:03:38.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:03:38.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:03:38.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:02:55', tmtdew=9.35273, humidity=53.2769, cloud=0.0, wind=12.5644, temperature=14.4353, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:03:11.693', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:03:38.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:03:38.436 [DEBUG] [Thread-21791] [transport.py] [_log()] starting thread (client mode): 0xee9ae350
2026-04-15T16:03:38.437 [DEBUG] [Thread-21791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:03:38.453 [DEBUG] [Thread-21791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:03:38.453 [INFO] [Thread-21791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:03:38.460 [DEBUG] [Thread-21791] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:03:38.461 [DEBUG] [Thread-21791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:03:38.461 [DEBUG] [Thread-21791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:03:38.461 [DEBUG] [Thread-21791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:03:38.461 [DEBUG] [Thread-21791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:03:38.461 [DEBUG] [Thread-21791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:03:38.461 [DEBUG] [Thread-21791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:03:38.461 [DEBUG] [Thread-21791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:03:38.461 [DEBUG] [Thread-21791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:03:38.461 [DEBUG] [Thread-21791] [transport.py] [_log()] client lang: <none>
2026-04-15T16:03:38.461 [DEBUG] [Thread-21791] [transport.py] [_log()] server lang: <none>
2026-04-15T16:03:38.461 [DEBUG] [Thread-21791] [transport.py] [_log()] kex follows: False
2026-04-15T16:03:38.461 [DEBUG] [Thread-21791] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:03:38.462 [DEBUG] [Thread-21791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:03:38.462 [DEBUG] [Thread-21791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:03:38.462 [DEBUG] [Thread-21791] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:03:38.462 [DEBUG] [Thread-21791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:03:38.462 [DEBUG] [Thread-21791] [transport.py] [_log()] Compression: none
2026-04-15T16:03:38.462 [DEBUG] [Thread-21791] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:03:38.520 [DEBUG] [Thread-21791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:03:38.520 [DEBUG] [Thread-21791] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:03:38.521 [DEBUG] [Thread-21791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:03:38.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:03:38.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:03:38.577 [DEBUG] [Thread-21791] [transport.py] [_log()] userauth is OK
2026-04-15T16:03:38.577 [DEBUG] [Thread-21791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:03:38.577 [DEBUG] [Thread-21791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:03:38.577 [DEBUG] [Thread-21791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:03:38.577 [DEBUG] [Thread-21791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:03:38.600 [INFO] [Thread-21791] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:03:38.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:03:38.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:03:39.154 [DEBUG] [Thread-21793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:03:39.463 [DEBUG] [Thread-21791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:03:39.463 [DEBUG] [Thread-21791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:03:39.511 [DEBUG] [Thread-21791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:03:39.511 [DEBUG] [Thread-21791] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:03:39.520 [DEBUG] [Thread-21791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:03:39.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:03:39.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')
2026-04-15T16:03:39.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
2026-04-15T16:03:39.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:03:39.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:03:39.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:03:39.555 [DEBUG] [Thread-21791] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:03:54.198 [DEBUG] [Thread-21794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:04:09.229 [DEBUG] [Thread-21795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:04:09.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:04:09.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:04:09.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
2026-04-15T16:04:10.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 3, 30), 9.15599, 53.9726, 0.0, 14.8752, 14.3689, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:04:10.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:03:30
2026-04-15T16:04:11.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:04:11.836 [DEBUG] [Thread-21796] [transport.py] [_log()] starting thread (client mode): 0xee9bc7f0
2026-04-15T16:04:11.836 [DEBUG] [Thread-21796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:04:11.855 [DEBUG] [Thread-21796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:04:11.855 [INFO] [Thread-21796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:04:11.858 [DEBUG] [Thread-21796] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:04:11.858 [DEBUG] [Thread-21796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:04:11.858 [DEBUG] [Thread-21796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:04:11.859 [DEBUG] [Thread-21796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:04:11.859 [DEBUG] [Thread-21796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:04:11.859 [DEBUG] [Thread-21796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:04:11.859 [DEBUG] [Thread-21796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:04:11.859 [DEBUG] [Thread-21796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:04:11.859 [DEBUG] [Thread-21796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:04:11.859 [DEBUG] [Thread-21796] [transport.py] [_log()] client lang: <none>
2026-04-15T16:04:11.859 [DEBUG] [Thread-21796] [transport.py] [_log()] server lang: <none>
2026-04-15T16:04:11.859 [DEBUG] [Thread-21796] [transport.py] [_log()] kex follows: False
2026-04-15T16:04:11.859 [DEBUG] [Thread-21796] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:04:11.859 [DEBUG] [Thread-21796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:04:11.860 [DEBUG] [Thread-21796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:04:11.860 [DEBUG] [Thread-21796] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:04:11.860 [DEBUG] [Thread-21796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:04:11.860 [DEBUG] [Thread-21796] [transport.py] [_log()] Compression: none
2026-04-15T16:04:11.860 [DEBUG] [Thread-21796] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:04:11.877 [DEBUG] [Thread-21796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:04:11.877 [DEBUG] [Thread-21796] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:04:11.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:04:11.878 [DEBUG] [Thread-21796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:04:11.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:04:11.879 [DEBUG] [Thread-21796] [transport.py] [_log()] userauth is OK
2026-04-15T16:04:11.879 [DEBUG] [Thread-21796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:04:11.879 [DEBUG] [Thread-21796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:04:11.879 [DEBUG] [Thread-21796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:04:11.879 [DEBUG] [Thread-21796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:04:11.904 [INFO] [Thread-21796] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:04:11.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:04:12.486 [DEBUG] [Thread-21796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:04:12.487 [DEBUG] [Thread-21796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:04:12.487 [DEBUG] [Thread-21796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:04:12.527 [DEBUG] [Thread-21796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:04:12.527 [DEBUG] [Thread-21796] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:04:12.530 [DEBUG] [Thread-21796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:04:12.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:04:12.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:04:12.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:04:12.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:04:12.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:04:12.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:04:12.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:04:12.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:04:12.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:04:12.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.585900 -999.00  +14.20  17.85     59   +6.40 1 1 1 1 1   887    0 7.33 -15.37 ----- 15.8 17.9 313.8 19.3 19.2 -26.9 18.7 -25.1 19.2 -23.2 19.9 -24.7
2026-04-15T16:04:12.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:04:12.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:04:12.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.585900
2026-04-15T16:04:12.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:04:12.557 [DEBUG] [Thread-21796] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:04:12.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:04:12.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:04:12.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:04:12.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:04:12.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:03:30', tmtdew=9.15599, humidity=53.9726, cloud=0.0, wind=14.8752, temperature=14.3689, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:03:41.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:04:12.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:04:12.816 [DEBUG] [Thread-21799] [transport.py] [_log()] starting thread (client mode): 0xee925f30
2026-04-15T16:04:12.816 [DEBUG] [Thread-21799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:04:12.830 [DEBUG] [Thread-21799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:04:12.830 [INFO] [Thread-21799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:04:12.837 [DEBUG] [Thread-21799] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:04:12.838 [DEBUG] [Thread-21799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:04:12.838 [DEBUG] [Thread-21799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:04:12.838 [DEBUG] [Thread-21799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:04:12.838 [DEBUG] [Thread-21799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:04:12.838 [DEBUG] [Thread-21799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:04:12.838 [DEBUG] [Thread-21799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:04:12.838 [DEBUG] [Thread-21799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:04:12.838 [DEBUG] [Thread-21799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:04:12.838 [DEBUG] [Thread-21799] [transport.py] [_log()] client lang: <none>
2026-04-15T16:04:12.838 [DEBUG] [Thread-21799] [transport.py] [_log()] server lang: <none>
2026-04-15T16:04:12.838 [DEBUG] [Thread-21799] [transport.py] [_log()] kex follows: False
2026-04-15T16:04:12.839 [DEBUG] [Thread-21799] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:04:12.839 [DEBUG] [Thread-21799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:04:12.839 [DEBUG] [Thread-21799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:04:12.839 [DEBUG] [Thread-21799] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:04:12.839 [DEBUG] [Thread-21799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:04:12.839 [DEBUG] [Thread-21799] [transport.py] [_log()] Compression: none
2026-04-15T16:04:12.839 [DEBUG] [Thread-21799] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:04:12.894 [DEBUG] [Thread-21799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:04:12.895 [DEBUG] [Thread-21799] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:04:12.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:04:12.896 [DEBUG] [Thread-21799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:04:12.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:04:12.951 [DEBUG] [Thread-21799] [transport.py] [_log()] userauth is OK
2026-04-15T16:04:12.951 [DEBUG] [Thread-21799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:04:12.952 [DEBUG] [Thread-21799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:04:12.952 [DEBUG] [Thread-21799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:04:12.952 [DEBUG] [Thread-21799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:04:12.979 [INFO] [Thread-21799] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:04:12.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:04:12.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:04:13.787 [DEBUG] [Thread-21799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:04:13.787 [DEBUG] [Thread-21799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:04:13.835 [DEBUG] [Thread-21799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:04:13.836 [DEBUG] [Thread-21799] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:04:13.845 [DEBUG] [Thread-21799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:04:13.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:04:13.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')
2026-04-15T16:04:13.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
2026-04-15T16:04:13.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:04:13.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:04:13.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:04:13.880 [DEBUG] [Thread-21799] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:04:16.939 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:04:16.940 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:04:24.261 [DEBUG] [Thread-21801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:04:35.552 [DEBUG] [Thread-21802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:04:39.307 [DEBUG] [Thread-21803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:04:43.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:04:43.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:04:43.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T16:04:45.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 4, 6), 9.10649, 54.1548, 0.0, 14.7517, 14.3689, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:04:45.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:04:06
2026-04-15T16:04:45.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:04:46.161 [DEBUG] [Thread-21804] [transport.py] [_log()] starting thread (client mode): 0xf1333b20
2026-04-15T16:04:46.161 [DEBUG] [Thread-21804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:04:46.179 [DEBUG] [Thread-21804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:04:46.179 [INFO] [Thread-21804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:04:46.182 [DEBUG] [Thread-21804] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:04:46.182 [DEBUG] [Thread-21804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:04:46.182 [DEBUG] [Thread-21804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:04:46.183 [DEBUG] [Thread-21804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:04:46.183 [DEBUG] [Thread-21804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:04:46.183 [DEBUG] [Thread-21804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:04:46.183 [DEBUG] [Thread-21804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:04:46.183 [DEBUG] [Thread-21804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:04:46.183 [DEBUG] [Thread-21804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:04:46.183 [DEBUG] [Thread-21804] [transport.py] [_log()] client lang: <none>
2026-04-15T16:04:46.183 [DEBUG] [Thread-21804] [transport.py] [_log()] server lang: <none>
2026-04-15T16:04:46.183 [DEBUG] [Thread-21804] [transport.py] [_log()] kex follows: False
2026-04-15T16:04:46.183 [DEBUG] [Thread-21804] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:04:46.183 [DEBUG] [Thread-21804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:04:46.183 [DEBUG] [Thread-21804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:04:46.184 [DEBUG] [Thread-21804] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:04:46.184 [DEBUG] [Thread-21804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:04:46.184 [DEBUG] [Thread-21804] [transport.py] [_log()] Compression: none
2026-04-15T16:04:46.184 [DEBUG] [Thread-21804] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:04:46.202 [DEBUG] [Thread-21804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:04:46.202 [DEBUG] [Thread-21804] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:04:46.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:04:46.203 [DEBUG] [Thread-21804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:04:46.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:04:46.204 [DEBUG] [Thread-21804] [transport.py] [_log()] userauth is OK
2026-04-15T16:04:46.204 [DEBUG] [Thread-21804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:04:46.204 [DEBUG] [Thread-21804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:04:46.204 [DEBUG] [Thread-21804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:04:46.205 [DEBUG] [Thread-21804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:04:46.224 [INFO] [Thread-21804] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:04:46.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:04:46.852 [DEBUG] [Thread-21804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:04:46.852 [DEBUG] [Thread-21804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:04:46.853 [DEBUG] [Thread-21804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:04:46.893 [DEBUG] [Thread-21804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:04:46.893 [DEBUG] [Thread-21804] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:04:46.896 [DEBUG] [Thread-21804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:04:46.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:04:46.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:04:46.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:04:46.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:04:46.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:04:46.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:04:46.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:04:46.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:04:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:04:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.586247 -999.00  +14.20  13.96     59   +6.40 1 1 1 1 1   887    0 7.36 -18.80 ----- 16.8 14.0 305.0 18.7 19.1 -26.4 18.7 -24.3 19.1 -22.3 19.9 -24.8
2026-04-15T16:04:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:04:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:04:46.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.586247
2026-04-15T16:04:46.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:04:46.913 [DEBUG] [Thread-21804] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:04:46.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:04:46.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:04:46.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:04:46.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:04:46.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:04:06', tmtdew=9.10649, humidity=54.1548, cloud=0.0, wind=14.7517, temperature=14.3689, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:04:11.741', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:04:47.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:04:47.169 [DEBUG] [Thread-21807] [transport.py] [_log()] starting thread (client mode): 0xf13321a0
2026-04-15T16:04:47.170 [DEBUG] [Thread-21807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:04:47.184 [DEBUG] [Thread-21807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:04:47.184 [INFO] [Thread-21807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:04:47.191 [DEBUG] [Thread-21807] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:04:47.191 [DEBUG] [Thread-21807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:04:47.191 [DEBUG] [Thread-21807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:04:47.191 [DEBUG] [Thread-21807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:04:47.192 [DEBUG] [Thread-21807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:04:47.192 [DEBUG] [Thread-21807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:04:47.192 [DEBUG] [Thread-21807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:04:47.192 [DEBUG] [Thread-21807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:04:47.192 [DEBUG] [Thread-21807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:04:47.192 [DEBUG] [Thread-21807] [transport.py] [_log()] client lang: <none>
2026-04-15T16:04:47.192 [DEBUG] [Thread-21807] [transport.py] [_log()] server lang: <none>
2026-04-15T16:04:47.192 [DEBUG] [Thread-21807] [transport.py] [_log()] kex follows: False
2026-04-15T16:04:47.192 [DEBUG] [Thread-21807] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:04:47.192 [DEBUG] [Thread-21807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:04:47.192 [DEBUG] [Thread-21807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:04:47.192 [DEBUG] [Thread-21807] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:04:47.193 [DEBUG] [Thread-21807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:04:47.193 [DEBUG] [Thread-21807] [transport.py] [_log()] Compression: none
2026-04-15T16:04:47.193 [DEBUG] [Thread-21807] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:04:47.254 [DEBUG] [Thread-21807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:04:47.254 [DEBUG] [Thread-21807] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:04:47.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:04:47.255 [DEBUG] [Thread-21807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:04:47.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:04:47.311 [DEBUG] [Thread-21807] [transport.py] [_log()] userauth is OK
2026-04-15T16:04:47.312 [DEBUG] [Thread-21807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:04:47.312 [DEBUG] [Thread-21807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:04:47.312 [DEBUG] [Thread-21807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:04:47.312 [DEBUG] [Thread-21807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:04:47.339 [INFO] [Thread-21807] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:04:47.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:04:47.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:04:48.182 [DEBUG] [Thread-21807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:04:48.182 [DEBUG] [Thread-21807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:04:48.230 [DEBUG] [Thread-21807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:04:48.230 [DEBUG] [Thread-21807] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:04:48.239 [DEBUG] [Thread-21807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:04:48.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:04:48.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')
2026-04-15T16:04:48.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T16:04:48.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:04:48.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:04:48.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:04:48.273 [DEBUG] [Thread-21807] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:04:54.339 [DEBUG] [Thread-21809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:05:09.382 [DEBUG] [Thread-21810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:05:17.079 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:05:17.080 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:05:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:05:18.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:05:18.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
2026-04-15T16:05:19.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 4, 42), 9.3212, 53.6408, 0.0, 16.6205, 15.1045, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:05:19.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:04:42
2026-04-15T16:05:20.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:05:20.490 [DEBUG] [Thread-21811] [transport.py] [_log()] starting thread (client mode): 0xee926b30
2026-04-15T16:05:20.490 [DEBUG] [Thread-21811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:05:20.509 [DEBUG] [Thread-21811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:05:20.509 [INFO] [Thread-21811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:05:20.512 [DEBUG] [Thread-21811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:05:20.512 [DEBUG] [Thread-21811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:05:20.512 [DEBUG] [Thread-21811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:05:20.513 [DEBUG] [Thread-21811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:05:20.513 [DEBUG] [Thread-21811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:05:20.513 [DEBUG] [Thread-21811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:05:20.513 [DEBUG] [Thread-21811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:05:20.513 [DEBUG] [Thread-21811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:05:20.513 [DEBUG] [Thread-21811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:05:20.513 [DEBUG] [Thread-21811] [transport.py] [_log()] client lang: <none>
2026-04-15T16:05:20.513 [DEBUG] [Thread-21811] [transport.py] [_log()] server lang: <none>
2026-04-15T16:05:20.513 [DEBUG] [Thread-21811] [transport.py] [_log()] kex follows: False
2026-04-15T16:05:20.513 [DEBUG] [Thread-21811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:05:20.513 [DEBUG] [Thread-21811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:05:20.513 [DEBUG] [Thread-21811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:05:20.514 [DEBUG] [Thread-21811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:05:20.514 [DEBUG] [Thread-21811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:05:20.514 [DEBUG] [Thread-21811] [transport.py] [_log()] Compression: none
2026-04-15T16:05:20.514 [DEBUG] [Thread-21811] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:05:20.530 [DEBUG] [Thread-21811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:05:20.531 [DEBUG] [Thread-21811] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:05:20.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:05:20.531 [DEBUG] [Thread-21811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:05:20.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:05:20.532 [DEBUG] [Thread-21811] [transport.py] [_log()] userauth is OK
2026-04-15T16:05:20.533 [DEBUG] [Thread-21811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:05:20.533 [DEBUG] [Thread-21811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:05:20.533 [DEBUG] [Thread-21811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:05:20.533 [DEBUG] [Thread-21811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:05:20.557 [INFO] [Thread-21811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:05:20.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:05:21.192 [DEBUG] [Thread-21811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:05:21.193 [DEBUG] [Thread-21811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:05:21.193 [DEBUG] [Thread-21811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:05:21.234 [DEBUG] [Thread-21811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:05:21.234 [DEBUG] [Thread-21811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:05:21.237 [DEBUG] [Thread-21811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:05:21.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:05:21.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:05:21.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:05:21.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:05:21.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:05:21.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:05:21.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:05:21.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:05:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:05:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.586594 -999.00  +14.00  10.65     59   +6.10 1 2 1 1 1   887    0 7.26 -19.65 ----- 9.7 10.7 307.6 19.0 19.1 -26.1 18.6 -24.2 19.1 -21.3 19.7 -23.6
2026-04-15T16:05:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:05:21.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:05:21.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.586594
2026-04-15T16:05:21.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:05:21.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:05:21.264 [DEBUG] [Thread-21811] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:05:21.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:05:21.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:05:21.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T16:05:21.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:04:42', tmtdew=9.3212, humidity=53.6408, cloud=0.0, wind=16.6205, temperature=15.1045, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:04:41.722', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:05:21.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:05:21.522 [DEBUG] [Thread-21814] [transport.py] [_log()] starting thread (client mode): 0xee927f10
2026-04-15T16:05:21.522 [DEBUG] [Thread-21814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:05:21.536 [DEBUG] [Thread-21814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:05:21.536 [INFO] [Thread-21814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:05:21.543 [DEBUG] [Thread-21814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:05:21.544 [DEBUG] [Thread-21814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:05:21.544 [DEBUG] [Thread-21814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:05:21.544 [DEBUG] [Thread-21814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:05:21.544 [DEBUG] [Thread-21814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:05:21.544 [DEBUG] [Thread-21814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:05:21.544 [DEBUG] [Thread-21814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:05:21.544 [DEBUG] [Thread-21814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:05:21.544 [DEBUG] [Thread-21814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:05:21.544 [DEBUG] [Thread-21814] [transport.py] [_log()] client lang: <none>
2026-04-15T16:05:21.544 [DEBUG] [Thread-21814] [transport.py] [_log()] server lang: <none>
2026-04-15T16:05:21.545 [DEBUG] [Thread-21814] [transport.py] [_log()] kex follows: False
2026-04-15T16:05:21.545 [DEBUG] [Thread-21814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:05:21.545 [DEBUG] [Thread-21814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:05:21.545 [DEBUG] [Thread-21814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:05:21.545 [DEBUG] [Thread-21814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:05:21.545 [DEBUG] [Thread-21814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:05:21.545 [DEBUG] [Thread-21814] [transport.py] [_log()] Compression: none
2026-04-15T16:05:21.545 [DEBUG] [Thread-21814] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:05:21.600 [DEBUG] [Thread-21814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:05:21.601 [DEBUG] [Thread-21814] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:05:21.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:05:21.601 [DEBUG] [Thread-21814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:05:21.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:05:21.656 [DEBUG] [Thread-21814] [transport.py] [_log()] userauth is OK
2026-04-15T16:05:21.656 [DEBUG] [Thread-21814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:05:21.657 [DEBUG] [Thread-21814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:05:21.657 [DEBUG] [Thread-21814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:05:21.657 [DEBUG] [Thread-21814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:05:21.682 [INFO] [Thread-21814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:05:21.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:05:21.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:05:22.555 [DEBUG] [Thread-21814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:05:22.555 [DEBUG] [Thread-21814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:05:22.602 [DEBUG] [Thread-21814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:05:22.603 [DEBUG] [Thread-21814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:05:22.611 [DEBUG] [Thread-21814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:05:22.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:05:22.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')
2026-04-15T16:05:22.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
2026-04-15T16:05:22.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:05:22.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:05:22.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:05:22.643 [DEBUG] [Thread-21814] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:05:24.413 [DEBUG] [Thread-21816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:05:35.628 [DEBUG] [Thread-21817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:05:39.459 [DEBUG] [Thread-21818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:05:52.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:05:52.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:05:52.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
2026-04-15T16:05:53.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 5, 18), 9.49647, 52.6246, 0.0, 12.5813, 14.3526, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:05:53.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:05:18
2026-04-15T16:05:54.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:05:54.489 [DEBUG] [Thread-21819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:05:54.752 [DEBUG] [Thread-21820] [transport.py] [_log()] starting thread (client mode): 0xee90caf0
2026-04-15T16:05:54.753 [DEBUG] [Thread-21820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:05:54.772 [DEBUG] [Thread-21820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:05:54.772 [INFO] [Thread-21820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:05:54.775 [DEBUG] [Thread-21820] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:05:54.775 [DEBUG] [Thread-21820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:05:54.775 [DEBUG] [Thread-21820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:05:54.775 [DEBUG] [Thread-21820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:05:54.775 [DEBUG] [Thread-21820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:05:54.775 [DEBUG] [Thread-21820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:05:54.776 [DEBUG] [Thread-21820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:05:54.776 [DEBUG] [Thread-21820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:05:54.776 [DEBUG] [Thread-21820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:05:54.776 [DEBUG] [Thread-21820] [transport.py] [_log()] client lang: <none>
2026-04-15T16:05:54.776 [DEBUG] [Thread-21820] [transport.py] [_log()] server lang: <none>
2026-04-15T16:05:54.776 [DEBUG] [Thread-21820] [transport.py] [_log()] kex follows: False
2026-04-15T16:05:54.776 [DEBUG] [Thread-21820] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:05:54.776 [DEBUG] [Thread-21820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:05:54.776 [DEBUG] [Thread-21820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:05:54.776 [DEBUG] [Thread-21820] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:05:54.776 [DEBUG] [Thread-21820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:05:54.776 [DEBUG] [Thread-21820] [transport.py] [_log()] Compression: none
2026-04-15T16:05:54.777 [DEBUG] [Thread-21820] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:05:54.793 [DEBUG] [Thread-21820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:05:54.794 [DEBUG] [Thread-21820] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:05:54.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:05:54.794 [DEBUG] [Thread-21820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:05:54.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:05:54.837 [DEBUG] [Thread-21820] [transport.py] [_log()] userauth is OK
2026-04-15T16:05:54.837 [DEBUG] [Thread-21820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:05:54.838 [DEBUG] [Thread-21820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:05:54.838 [DEBUG] [Thread-21820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:05:54.838 [DEBUG] [Thread-21820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:05:54.864 [INFO] [Thread-21820] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:05:54.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:05:55.500 [DEBUG] [Thread-21820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:05:55.501 [DEBUG] [Thread-21820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:05:55.501 [DEBUG] [Thread-21820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:05:55.541 [DEBUG] [Thread-21820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:05:55.541 [DEBUG] [Thread-21820] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:05:55.544 [DEBUG] [Thread-21820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:05:55.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:05:55.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:05:55.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:05:55.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:05:55.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:05:55.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:05:55.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:05:55.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:05:55.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:05:55.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.587289 -999.00  +14.10  12.95     59   +6.40 1 2 1 1 1   887    0 7.09 -22.64 ----- 10.7 12.9 301.1 17.5 18.9 -26.1 18.6 -23.9 18.9 -21.9 19.5 -24.9
2026-04-15T16:05:55.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:05:55.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:05:55.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.587289
2026-04-15T16:05:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:05:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:05:55.569 [DEBUG] [Thread-21820] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:05:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:05:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:05:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T16:05:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:05:18', tmtdew=9.49647, humidity=52.6246, cloud=0.0, wind=12.5813, temperature=14.3526, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:05:41.770', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:05:55.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:05:55.821 [DEBUG] [Thread-21823] [transport.py] [_log()] starting thread (client mode): 0xee90ee90
2026-04-15T16:05:55.821 [DEBUG] [Thread-21823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:05:55.835 [DEBUG] [Thread-21823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:05:55.836 [INFO] [Thread-21823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:05:55.843 [DEBUG] [Thread-21823] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:05:55.843 [DEBUG] [Thread-21823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:05:55.843 [DEBUG] [Thread-21823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:05:55.843 [DEBUG] [Thread-21823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:05:55.843 [DEBUG] [Thread-21823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:05:55.843 [DEBUG] [Thread-21823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:05:55.843 [DEBUG] [Thread-21823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:05:55.844 [DEBUG] [Thread-21823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:05:55.844 [DEBUG] [Thread-21823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:05:55.844 [DEBUG] [Thread-21823] [transport.py] [_log()] client lang: <none>
2026-04-15T16:05:55.844 [DEBUG] [Thread-21823] [transport.py] [_log()] server lang: <none>
2026-04-15T16:05:55.844 [DEBUG] [Thread-21823] [transport.py] [_log()] kex follows: False
2026-04-15T16:05:55.844 [DEBUG] [Thread-21823] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:05:55.844 [DEBUG] [Thread-21823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:05:55.844 [DEBUG] [Thread-21823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:05:55.844 [DEBUG] [Thread-21823] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:05:55.844 [DEBUG] [Thread-21823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:05:55.844 [DEBUG] [Thread-21823] [transport.py] [_log()] Compression: none
2026-04-15T16:05:55.844 [DEBUG] [Thread-21823] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:05:55.902 [DEBUG] [Thread-21823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:05:55.903 [DEBUG] [Thread-21823] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:05:55.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:05:55.903 [DEBUG] [Thread-21823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:05:55.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:05:55.963 [DEBUG] [Thread-21823] [transport.py] [_log()] userauth is OK
2026-04-15T16:05:55.963 [DEBUG] [Thread-21823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:05:55.964 [DEBUG] [Thread-21823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:05:55.964 [DEBUG] [Thread-21823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:05:55.964 [DEBUG] [Thread-21823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:05:55.994 [INFO] [Thread-21823] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:05:55.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:05:55.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:05:56.829 [DEBUG] [Thread-21823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:05:56.829 [DEBUG] [Thread-21823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:05:56.876 [DEBUG] [Thread-21823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:05:56.877 [DEBUG] [Thread-21823] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:05:56.885 [DEBUG] [Thread-21823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:05:56.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:05:56.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')
2026-04-15T16:05:56.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') -> 00000000
2026-04-15T16:05:56.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:05:56.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:05:56.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:05:56.918 [DEBUG] [Thread-21823] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:06:09.518 [DEBUG] [Thread-21825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:06:17.221 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:06:17.222 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:06:24.562 [DEBUG] [Thread-21826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:06:26.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:06:26.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:06:26.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
2026-04-15T16:06:28.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 5, 54), 9.2245, 53.9058, 0.0, 18.702, 14.74, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:06:28.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:05:54
2026-04-15T16:06:28.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:06:29.211 [DEBUG] [Thread-21827] [transport.py] [_log()] starting thread (client mode): 0xee90cb80
2026-04-15T16:06:29.212 [DEBUG] [Thread-21827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:06:29.231 [DEBUG] [Thread-21827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:06:29.231 [INFO] [Thread-21827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:06:29.234 [DEBUG] [Thread-21827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:06:29.234 [DEBUG] [Thread-21827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:06:29.234 [DEBUG] [Thread-21827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:06:29.234 [DEBUG] [Thread-21827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:06:29.234 [DEBUG] [Thread-21827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:06:29.234 [DEBUG] [Thread-21827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:06:29.234 [DEBUG] [Thread-21827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:06:29.235 [DEBUG] [Thread-21827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:06:29.235 [DEBUG] [Thread-21827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:06:29.235 [DEBUG] [Thread-21827] [transport.py] [_log()] client lang: <none>
2026-04-15T16:06:29.235 [DEBUG] [Thread-21827] [transport.py] [_log()] server lang: <none>
2026-04-15T16:06:29.235 [DEBUG] [Thread-21827] [transport.py] [_log()] kex follows: False
2026-04-15T16:06:29.235 [DEBUG] [Thread-21827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:06:29.235 [DEBUG] [Thread-21827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:06:29.235 [DEBUG] [Thread-21827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:06:29.235 [DEBUG] [Thread-21827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:06:29.235 [DEBUG] [Thread-21827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:06:29.235 [DEBUG] [Thread-21827] [transport.py] [_log()] Compression: none
2026-04-15T16:06:29.236 [DEBUG] [Thread-21827] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:06:29.252 [DEBUG] [Thread-21827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:06:29.252 [DEBUG] [Thread-21827] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:06:29.253 [DEBUG] [Thread-21827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:06:29.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:06:29.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:06:29.254 [DEBUG] [Thread-21827] [transport.py] [_log()] userauth is OK
2026-04-15T16:06:29.254 [DEBUG] [Thread-21827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:06:29.254 [DEBUG] [Thread-21827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:06:29.254 [DEBUG] [Thread-21827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:06:29.254 [DEBUG] [Thread-21827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:06:29.278 [INFO] [Thread-21827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:06:29.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:06:29.854 [DEBUG] [Thread-21827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:06:29.854 [DEBUG] [Thread-21827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:06:29.855 [DEBUG] [Thread-21827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:06:29.895 [DEBUG] [Thread-21827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:06:29.895 [DEBUG] [Thread-21827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:06:29.898 [DEBUG] [Thread-21827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:06:29.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:06:29.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:06:29.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:06:29.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:06:29.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:06:29.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:06:29.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:06:29.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:06:29.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:06:29.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.587636 -999.00  +14.10  17.76     60   +6.50 1 1 1 1 1   887    0 7.10 -23.98 ----- 19.8 17.8 284.6 19.8 18.7 -27.0 18.5 -24.4 18.6 -22.6 19.2 -25.5
2026-04-15T16:06:29.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:06:29.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:06:29.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.587636
2026-04-15T16:06:29.923 [DEBUG] [Thread-21827] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:06:29.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:06:29.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:06:29.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:06:29.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:06:29.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:06:29.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:05:54', tmtdew=9.2245, humidity=53.9058, cloud=0.0, wind=18.702, temperature=14.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:06:11.750', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:06:30.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:06:30.186 [DEBUG] [Thread-21830] [transport.py] [_log()] starting thread (client mode): 0xf1332c50
2026-04-15T16:06:30.186 [DEBUG] [Thread-21830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:06:30.203 [DEBUG] [Thread-21830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:06:30.203 [INFO] [Thread-21830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:06:30.214 [DEBUG] [Thread-21830] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:06:30.215 [DEBUG] [Thread-21830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:06:30.215 [DEBUG] [Thread-21830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:06:30.215 [DEBUG] [Thread-21830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:06:30.215 [DEBUG] [Thread-21830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:06:30.215 [DEBUG] [Thread-21830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:06:30.215 [DEBUG] [Thread-21830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:06:30.215 [DEBUG] [Thread-21830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:06:30.215 [DEBUG] [Thread-21830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:06:30.215 [DEBUG] [Thread-21830] [transport.py] [_log()] client lang: <none>
2026-04-15T16:06:30.215 [DEBUG] [Thread-21830] [transport.py] [_log()] server lang: <none>
2026-04-15T16:06:30.215 [DEBUG] [Thread-21830] [transport.py] [_log()] kex follows: False
2026-04-15T16:06:30.215 [DEBUG] [Thread-21830] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:06:30.216 [DEBUG] [Thread-21830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:06:30.216 [DEBUG] [Thread-21830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:06:30.216 [DEBUG] [Thread-21830] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:06:30.216 [DEBUG] [Thread-21830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:06:30.216 [DEBUG] [Thread-21830] [transport.py] [_log()] Compression: none
2026-04-15T16:06:30.216 [DEBUG] [Thread-21830] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:06:30.279 [DEBUG] [Thread-21830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:06:30.279 [DEBUG] [Thread-21830] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:06:30.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:06:30.280 [DEBUG] [Thread-21830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:06:30.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:06:30.341 [DEBUG] [Thread-21830] [transport.py] [_log()] userauth is OK
2026-04-15T16:06:30.341 [DEBUG] [Thread-21830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:06:30.342 [DEBUG] [Thread-21830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:06:30.342 [DEBUG] [Thread-21830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:06:30.342 [DEBUG] [Thread-21830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:06:30.371 [INFO] [Thread-21830] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:06:30.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:06:30.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:06:31.275 [DEBUG] [Thread-21830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:06:31.276 [DEBUG] [Thread-21830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:06:31.323 [DEBUG] [Thread-21830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:06:31.323 [DEBUG] [Thread-21830] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:06:31.332 [DEBUG] [Thread-21830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:06:31.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:06:31.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')
2026-04-15T16:06:31.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') -> 00000000
2026-04-15T16:06:31.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:06:31.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:06:31.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:06:31.367 [DEBUG] [Thread-21830] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:06:35.702 [DEBUG] [Thread-21832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:06:39.593 [DEBUG] [Thread-21833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:06:54.641 [DEBUG] [Thread-21834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:07:01.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:07:01.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:07:01.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
2026-04-15T16:07:02.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 6, 29), 9.16534, 54.2375, 0.0, 10.7291, 14.2037, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:07:02.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:06:29
2026-04-15T16:07:03.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:07:03.494 [DEBUG] [Thread-21835] [transport.py] [_log()] starting thread (client mode): 0xee926830
2026-04-15T16:07:03.494 [DEBUG] [Thread-21835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:07:03.514 [DEBUG] [Thread-21835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:07:03.514 [INFO] [Thread-21835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:07:03.517 [DEBUG] [Thread-21835] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:07:03.517 [DEBUG] [Thread-21835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:07:03.517 [DEBUG] [Thread-21835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:07:03.517 [DEBUG] [Thread-21835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:07:03.517 [DEBUG] [Thread-21835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:07:03.517 [DEBUG] [Thread-21835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:07:03.517 [DEBUG] [Thread-21835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:07:03.518 [DEBUG] [Thread-21835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:07:03.518 [DEBUG] [Thread-21835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:07:03.518 [DEBUG] [Thread-21835] [transport.py] [_log()] client lang: <none>
2026-04-15T16:07:03.518 [DEBUG] [Thread-21835] [transport.py] [_log()] server lang: <none>
2026-04-15T16:07:03.518 [DEBUG] [Thread-21835] [transport.py] [_log()] kex follows: False
2026-04-15T16:07:03.518 [DEBUG] [Thread-21835] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:07:03.518 [DEBUG] [Thread-21835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:07:03.518 [DEBUG] [Thread-21835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:07:03.518 [DEBUG] [Thread-21835] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:07:03.518 [DEBUG] [Thread-21835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:07:03.518 [DEBUG] [Thread-21835] [transport.py] [_log()] Compression: none
2026-04-15T16:07:03.518 [DEBUG] [Thread-21835] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:07:03.537 [DEBUG] [Thread-21835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:07:03.537 [DEBUG] [Thread-21835] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:07:03.538 [DEBUG] [Thread-21835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:07:03.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:07:03.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:07:03.539 [DEBUG] [Thread-21835] [transport.py] [_log()] userauth is OK
2026-04-15T16:07:03.539 [DEBUG] [Thread-21835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:07:03.540 [DEBUG] [Thread-21835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:07:03.540 [DEBUG] [Thread-21835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:07:03.540 [DEBUG] [Thread-21835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:07:03.565 [INFO] [Thread-21835] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:07:03.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:07:04.181 [DEBUG] [Thread-21835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:07:04.181 [DEBUG] [Thread-21835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:07:04.182 [DEBUG] [Thread-21835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:07:04.222 [DEBUG] [Thread-21835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:07:04.222 [DEBUG] [Thread-21835] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:07:04.225 [DEBUG] [Thread-21835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:07:04.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:07:04.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:07:04.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:07:04.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:07:04.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:07:04.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:07:04.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:07:04.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:07:04.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:07:04.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.587983 -999.00  +14.00  11.56     60   +6.50 1 1 1 1 1   887    0 7.00 -25.59 ----- 11.9 11.6 303.2 21.8 18.7 -26.1 18.4 -23.9 18.5 -23.2 19.1 -25.0
2026-04-15T16:07:04.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:07:04.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:07:04.254 [DEBUG] [Thread-21835] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:07:04.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.587983
2026-04-15T16:07:04.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:07:04.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:07:04.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:07:04.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:07:04.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:07:04.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:06:29', tmtdew=9.16534, humidity=54.2375, cloud=0.0, wind=10.7291, temperature=14.2037, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:06:41.731', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:07:04.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:07:04.510 [DEBUG] [Thread-21838] [transport.py] [_log()] starting thread (client mode): 0xee9ad900
2026-04-15T16:07:04.510 [DEBUG] [Thread-21838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:07:04.525 [DEBUG] [Thread-21838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:07:04.525 [INFO] [Thread-21838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:07:04.533 [DEBUG] [Thread-21838] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:07:04.533 [DEBUG] [Thread-21838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:07:04.533 [DEBUG] [Thread-21838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:07:04.533 [DEBUG] [Thread-21838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:07:04.533 [DEBUG] [Thread-21838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:07:04.533 [DEBUG] [Thread-21838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:07:04.533 [DEBUG] [Thread-21838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:07:04.533 [DEBUG] [Thread-21838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:07:04.533 [DEBUG] [Thread-21838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:07:04.534 [DEBUG] [Thread-21838] [transport.py] [_log()] client lang: <none>
2026-04-15T16:07:04.534 [DEBUG] [Thread-21838] [transport.py] [_log()] server lang: <none>
2026-04-15T16:07:04.534 [DEBUG] [Thread-21838] [transport.py] [_log()] kex follows: False
2026-04-15T16:07:04.534 [DEBUG] [Thread-21838] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:07:04.534 [DEBUG] [Thread-21838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:07:04.534 [DEBUG] [Thread-21838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:07:04.534 [DEBUG] [Thread-21838] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:07:04.534 [DEBUG] [Thread-21838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:07:04.534 [DEBUG] [Thread-21838] [transport.py] [_log()] Compression: none
2026-04-15T16:07:04.534 [DEBUG] [Thread-21838] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:07:04.591 [DEBUG] [Thread-21838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:07:04.592 [DEBUG] [Thread-21838] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:07:04.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:07:04.592 [DEBUG] [Thread-21838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:07:04.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:07:04.648 [DEBUG] [Thread-21838] [transport.py] [_log()] userauth is OK
2026-04-15T16:07:04.648 [DEBUG] [Thread-21838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:07:04.648 [DEBUG] [Thread-21838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:07:04.648 [DEBUG] [Thread-21838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:07:04.649 [DEBUG] [Thread-21838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:07:04.672 [INFO] [Thread-21838] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:07:04.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:07:04.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:07:05.527 [DEBUG] [Thread-21838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:07:05.527 [DEBUG] [Thread-21838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:07:05.575 [DEBUG] [Thread-21838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:07:05.575 [DEBUG] [Thread-21838] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:07:05.584 [DEBUG] [Thread-21838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:07:05.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:07:05.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T16:07:05.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
2026-04-15T16:07:05.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:07:05.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:07:05.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:07:05.618 [DEBUG] [Thread-21838] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:07:09.674 [DEBUG] [Thread-21840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:07:17.362 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:07:17.363 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:07:24.716 [DEBUG] [Thread-21841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:07:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:07:35.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:07:35.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
2026-04-15T16:07:35.776 [DEBUG] [Thread-21842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:07:36.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 7, 5), 9.04263, 54.7016, 0.0, 10.6409, 14.2205, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:07:36.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:07:05
2026-04-15T16:07:37.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:07:37.766 [DEBUG] [Thread-21843] [transport.py] [_log()] starting thread (client mode): 0xee9bc6d0
2026-04-15T16:07:37.766 [DEBUG] [Thread-21843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:07:37.786 [DEBUG] [Thread-21843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:07:37.787 [INFO] [Thread-21843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:07:37.790 [DEBUG] [Thread-21843] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:07:37.790 [DEBUG] [Thread-21843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:07:37.790 [DEBUG] [Thread-21843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:07:37.790 [DEBUG] [Thread-21843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:07:37.790 [DEBUG] [Thread-21843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:07:37.791 [DEBUG] [Thread-21843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:07:37.791 [DEBUG] [Thread-21843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:07:37.791 [DEBUG] [Thread-21843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:07:37.791 [DEBUG] [Thread-21843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:07:37.791 [DEBUG] [Thread-21843] [transport.py] [_log()] client lang: <none>
2026-04-15T16:07:37.791 [DEBUG] [Thread-21843] [transport.py] [_log()] server lang: <none>
2026-04-15T16:07:37.791 [DEBUG] [Thread-21843] [transport.py] [_log()] kex follows: False
2026-04-15T16:07:37.791 [DEBUG] [Thread-21843] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:07:37.791 [DEBUG] [Thread-21843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:07:37.791 [DEBUG] [Thread-21843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:07:37.791 [DEBUG] [Thread-21843] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:07:37.792 [DEBUG] [Thread-21843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:07:37.792 [DEBUG] [Thread-21843] [transport.py] [_log()] Compression: none
2026-04-15T16:07:37.792 [DEBUG] [Thread-21843] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:07:37.811 [DEBUG] [Thread-21843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:07:37.812 [DEBUG] [Thread-21843] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:07:37.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:07:37.813 [DEBUG] [Thread-21843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:07:37.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:07:37.814 [DEBUG] [Thread-21843] [transport.py] [_log()] userauth is OK
2026-04-15T16:07:37.814 [DEBUG] [Thread-21843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:07:37.814 [DEBUG] [Thread-21843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:07:37.814 [DEBUG] [Thread-21843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:07:37.814 [DEBUG] [Thread-21843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:07:37.850 [INFO] [Thread-21843] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:07:37.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:07:38.662 [DEBUG] [Thread-21843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:07:38.662 [DEBUG] [Thread-21843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:07:38.663 [DEBUG] [Thread-21843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:07:38.703 [DEBUG] [Thread-21843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:07:38.703 [DEBUG] [Thread-21843] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:07:38.705 [DEBUG] [Thread-21843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:07:38.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:07:38.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:07:38.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:07:38.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:07:38.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:07:38.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:07:38.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:07:38.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:07:38.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:07:38.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.588330 -999.00  +14.00   8.45     61   +6.60 1 2 1 1 1   887    0 7.09 -27.99 ----- 13.8 8.4 299.2 13.2 18.6 -26.3 18.4 -23.8 18.5 -22.2 18.9 -25.1
2026-04-15T16:07:38.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:07:38.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:07:38.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.588330
2026-04-15T16:07:38.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:07:38.731 [DEBUG] [Thread-21843] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:07:38.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:07:38.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:07:38.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:07:38.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T16:07:38.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:07:05', tmtdew=9.04263, humidity=54.7016, cloud=0.0, wind=10.6409, temperature=14.2205, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:07:11.712', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:07:38.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:07:39.001 [DEBUG] [Thread-21846] [transport.py] [_log()] starting thread (client mode): 0xee90e3e0
2026-04-15T16:07:39.001 [DEBUG] [Thread-21846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:07:39.015 [DEBUG] [Thread-21846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:07:39.015 [INFO] [Thread-21846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:07:39.022 [DEBUG] [Thread-21846] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:07:39.023 [DEBUG] [Thread-21846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:07:39.023 [DEBUG] [Thread-21846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:07:39.023 [DEBUG] [Thread-21846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:07:39.023 [DEBUG] [Thread-21846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:07:39.023 [DEBUG] [Thread-21846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:07:39.023 [DEBUG] [Thread-21846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:07:39.023 [DEBUG] [Thread-21846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:07:39.023 [DEBUG] [Thread-21846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:07:39.023 [DEBUG] [Thread-21846] [transport.py] [_log()] client lang: <none>
2026-04-15T16:07:39.023 [DEBUG] [Thread-21846] [transport.py] [_log()] server lang: <none>
2026-04-15T16:07:39.023 [DEBUG] [Thread-21846] [transport.py] [_log()] kex follows: False
2026-04-15T16:07:39.024 [DEBUG] [Thread-21846] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:07:39.024 [DEBUG] [Thread-21846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:07:39.024 [DEBUG] [Thread-21846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:07:39.024 [DEBUG] [Thread-21846] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:07:39.024 [DEBUG] [Thread-21846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:07:39.024 [DEBUG] [Thread-21846] [transport.py] [_log()] Compression: none
2026-04-15T16:07:39.024 [DEBUG] [Thread-21846] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:07:39.081 [DEBUG] [Thread-21846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:07:39.081 [DEBUG] [Thread-21846] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:07:39.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:07:39.082 [DEBUG] [Thread-21846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:07:39.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:07:39.137 [DEBUG] [Thread-21846] [transport.py] [_log()] userauth is OK
2026-04-15T16:07:39.137 [DEBUG] [Thread-21846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:07:39.138 [DEBUG] [Thread-21846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:07:39.138 [DEBUG] [Thread-21846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:07:39.138 [DEBUG] [Thread-21846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:07:39.165 [INFO] [Thread-21846] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:07:39.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:07:39.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:07:39.745 [DEBUG] [Thread-21848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:07:40.010 [DEBUG] [Thread-21846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:07:40.010 [DEBUG] [Thread-21846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:07:40.061 [DEBUG] [Thread-21846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:07:40.061 [DEBUG] [Thread-21846] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:07:40.070 [DEBUG] [Thread-21846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:07:40.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:07:40.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')
2026-04-15T16:07:40.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') -> 00000000
2026-04-15T16:07:40.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:07:40.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:07:40.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:07:40.105 [DEBUG] [Thread-21846] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:07:54.793 [DEBUG] [Thread-21849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:08:09.828 [DEBUG] [Thread-21850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:08:10.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:08:10.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:08:10.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
2026-04-15T16:08:11.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 7, 40), 8.89969, 55.0989, 0.0, 12.2105, 14.6079, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:08:11.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:07:40
2026-04-15T16:08:11.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:08:12.281 [DEBUG] [Thread-21851] [transport.py] [_log()] starting thread (client mode): 0xf1333370
2026-04-15T16:08:12.281 [DEBUG] [Thread-21851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:08:12.301 [DEBUG] [Thread-21851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:08:12.302 [INFO] [Thread-21851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:08:12.305 [DEBUG] [Thread-21851] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:08:12.305 [DEBUG] [Thread-21851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:08:12.305 [DEBUG] [Thread-21851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:08:12.305 [DEBUG] [Thread-21851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:08:12.305 [DEBUG] [Thread-21851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:08:12.305 [DEBUG] [Thread-21851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:08:12.305 [DEBUG] [Thread-21851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:08:12.305 [DEBUG] [Thread-21851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:08:12.305 [DEBUG] [Thread-21851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:08:12.305 [DEBUG] [Thread-21851] [transport.py] [_log()] client lang: <none>
2026-04-15T16:08:12.306 [DEBUG] [Thread-21851] [transport.py] [_log()] server lang: <none>
2026-04-15T16:08:12.306 [DEBUG] [Thread-21851] [transport.py] [_log()] kex follows: False
2026-04-15T16:08:12.306 [DEBUG] [Thread-21851] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:08:12.306 [DEBUG] [Thread-21851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:08:12.306 [DEBUG] [Thread-21851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:08:12.306 [DEBUG] [Thread-21851] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:08:12.306 [DEBUG] [Thread-21851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:08:12.306 [DEBUG] [Thread-21851] [transport.py] [_log()] Compression: none
2026-04-15T16:08:12.306 [DEBUG] [Thread-21851] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:08:12.323 [DEBUG] [Thread-21851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:08:12.324 [DEBUG] [Thread-21851] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:08:12.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:08:12.325 [DEBUG] [Thread-21851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:08:12.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:08:12.326 [DEBUG] [Thread-21851] [transport.py] [_log()] userauth is OK
2026-04-15T16:08:12.326 [DEBUG] [Thread-21851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:08:12.326 [DEBUG] [Thread-21851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:08:12.326 [DEBUG] [Thread-21851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:08:12.326 [DEBUG] [Thread-21851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:08:12.346 [INFO] [Thread-21851] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:08:12.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:08:13.123 [DEBUG] [Thread-21851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:08:13.123 [DEBUG] [Thread-21851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:08:13.124 [DEBUG] [Thread-21851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:08:13.164 [DEBUG] [Thread-21851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:08:13.164 [DEBUG] [Thread-21851] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:08:13.167 [DEBUG] [Thread-21851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:08:13.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:08:13.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:08:13.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:08:13.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:08:13.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:08:13.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:08:13.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:08:13.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:08:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:08:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.588677 -999.00  +13.80  17.33     60   +6.40 1 1 1 1 1   887    0 6.91 -27.44 ----- 13.4 17.3 294.4 17.8 18.5 -25.6 18.4 -23.8 18.3 -22.6 18.8 -23.3
2026-04-15T16:08:13.189 [DEBUG] [Thread-21851] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:08:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:08:13.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:08:13.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.588677
2026-04-15T16:08:13.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:08:13.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:08:13.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:08:13.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:08:13.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:08:13.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:07:40', tmtdew=8.89969, humidity=55.0989, cloud=0.0, wind=12.2105, temperature=14.6079, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:07:41.693', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:08:13.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:08:13.460 [DEBUG] [Thread-21854] [transport.py] [_log()] starting thread (client mode): 0xee91d2d0
2026-04-15T16:08:13.460 [DEBUG] [Thread-21854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:08:13.475 [DEBUG] [Thread-21854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:08:13.475 [INFO] [Thread-21854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:08:13.482 [DEBUG] [Thread-21854] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:08:13.482 [DEBUG] [Thread-21854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:08:13.482 [DEBUG] [Thread-21854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:08:13.482 [DEBUG] [Thread-21854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:08:13.482 [DEBUG] [Thread-21854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:08:13.483 [DEBUG] [Thread-21854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:08:13.483 [DEBUG] [Thread-21854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:08:13.483 [DEBUG] [Thread-21854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:08:13.483 [DEBUG] [Thread-21854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:08:13.483 [DEBUG] [Thread-21854] [transport.py] [_log()] client lang: <none>
2026-04-15T16:08:13.483 [DEBUG] [Thread-21854] [transport.py] [_log()] server lang: <none>
2026-04-15T16:08:13.483 [DEBUG] [Thread-21854] [transport.py] [_log()] kex follows: False
2026-04-15T16:08:13.483 [DEBUG] [Thread-21854] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:08:13.483 [DEBUG] [Thread-21854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:08:13.483 [DEBUG] [Thread-21854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:08:13.483 [DEBUG] [Thread-21854] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:08:13.484 [DEBUG] [Thread-21854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:08:13.484 [DEBUG] [Thread-21854] [transport.py] [_log()] Compression: none
2026-04-15T16:08:13.484 [DEBUG] [Thread-21854] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:08:13.541 [DEBUG] [Thread-21854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:08:13.542 [DEBUG] [Thread-21854] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:08:13.542 [DEBUG] [Thread-21854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:08:13.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:08:13.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:08:13.598 [DEBUG] [Thread-21854] [transport.py] [_log()] userauth is OK
2026-04-15T16:08:13.598 [DEBUG] [Thread-21854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:08:13.599 [DEBUG] [Thread-21854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:08:13.599 [DEBUG] [Thread-21854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:08:13.599 [DEBUG] [Thread-21854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:08:13.622 [INFO] [Thread-21854] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:08:13.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:08:13.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:08:14.464 [DEBUG] [Thread-21854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:08:14.464 [DEBUG] [Thread-21854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:08:14.517 [DEBUG] [Thread-21854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:08:14.517 [DEBUG] [Thread-21854] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:08:14.526 [DEBUG] [Thread-21854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:08:14.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:08:14.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')
2026-04-15T16:08:14.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
2026-04-15T16:08:14.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:08:14.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:08:14.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:08:14.564 [DEBUG] [Thread-21854] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:08:17.509 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:08:17.511 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:08:24.861 [DEBUG] [Thread-21856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:08:35.866 [DEBUG] [Thread-21857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:08:39.904 [DEBUG] [Thread-21858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:08:44.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:08:44.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:08:44.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
2026-04-15T16:08:45.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 8, 16), 8.8671, 55.1352, 0.0, 15.8623, 14.1198, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:08:45.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:08:16
2026-04-15T16:08:46.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:08:46.785 [DEBUG] [Thread-21859] [transport.py] [_log()] starting thread (client mode): 0xee91d4b0
2026-04-15T16:08:46.786 [DEBUG] [Thread-21859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:08:46.807 [DEBUG] [Thread-21859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:08:46.807 [INFO] [Thread-21859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:08:46.810 [DEBUG] [Thread-21859] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:08:46.810 [DEBUG] [Thread-21859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:08:46.810 [DEBUG] [Thread-21859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:08:46.810 [DEBUG] [Thread-21859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:08:46.810 [DEBUG] [Thread-21859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:08:46.810 [DEBUG] [Thread-21859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:08:46.810 [DEBUG] [Thread-21859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:08:46.810 [DEBUG] [Thread-21859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:08:46.811 [DEBUG] [Thread-21859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:08:46.811 [DEBUG] [Thread-21859] [transport.py] [_log()] client lang: <none>
2026-04-15T16:08:46.811 [DEBUG] [Thread-21859] [transport.py] [_log()] server lang: <none>
2026-04-15T16:08:46.811 [DEBUG] [Thread-21859] [transport.py] [_log()] kex follows: False
2026-04-15T16:08:46.811 [DEBUG] [Thread-21859] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:08:46.811 [DEBUG] [Thread-21859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:08:46.811 [DEBUG] [Thread-21859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:08:46.811 [DEBUG] [Thread-21859] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:08:46.811 [DEBUG] [Thread-21859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:08:46.811 [DEBUG] [Thread-21859] [transport.py] [_log()] Compression: none
2026-04-15T16:08:46.812 [DEBUG] [Thread-21859] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:08:46.828 [DEBUG] [Thread-21859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:08:46.828 [DEBUG] [Thread-21859] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:08:46.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:08:46.829 [DEBUG] [Thread-21859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:08:46.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:08:46.830 [DEBUG] [Thread-21859] [transport.py] [_log()] userauth is OK
2026-04-15T16:08:46.830 [DEBUG] [Thread-21859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:08:46.830 [DEBUG] [Thread-21859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:08:46.830 [DEBUG] [Thread-21859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:08:46.830 [DEBUG] [Thread-21859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:08:46.854 [INFO] [Thread-21859] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:08:46.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:08:47.612 [DEBUG] [Thread-21859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:08:47.612 [DEBUG] [Thread-21859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:08:47.613 [DEBUG] [Thread-21859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:08:47.653 [DEBUG] [Thread-21859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:08:47.653 [DEBUG] [Thread-21859] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:08:47.656 [DEBUG] [Thread-21859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:08:47.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:08:47.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:08:47.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:08:47.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:08:47.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:08:47.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:08:47.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:08:47.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:08:47.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:08:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.589025 -999.00  +13.90  12.56     61   +6.50 1 1 1 1 1   887    0 7.01 -25.75 ----- 17.4 12.6 307.2 22.5 18.6 -25.0 18.4 -23.3 18.5 -23.6 19.0 -22.7
2026-04-15T16:08:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:08:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:08:47.680 [DEBUG] [Thread-21859] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:08:47.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.589025
2026-04-15T16:08:47.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:08:47.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:08:47.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:08:47.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:08:47.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:08:47.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:08:16', tmtdew=8.8671, humidity=55.1352, cloud=0.0, wind=15.8623, temperature=14.1198, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:08:11.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:08:47.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:08:47.939 [DEBUG] [Thread-21862] [transport.py] [_log()] starting thread (client mode): 0xee9af2b0
2026-04-15T16:08:47.940 [DEBUG] [Thread-21862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:08:47.954 [DEBUG] [Thread-21862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:08:47.954 [INFO] [Thread-21862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:08:47.961 [DEBUG] [Thread-21862] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:08:47.961 [DEBUG] [Thread-21862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:08:47.961 [DEBUG] [Thread-21862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:08:47.961 [DEBUG] [Thread-21862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:08:47.961 [DEBUG] [Thread-21862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:08:47.961 [DEBUG] [Thread-21862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:08:47.961 [DEBUG] [Thread-21862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:08:47.962 [DEBUG] [Thread-21862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:08:47.962 [DEBUG] [Thread-21862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:08:47.962 [DEBUG] [Thread-21862] [transport.py] [_log()] client lang: <none>
2026-04-15T16:08:47.962 [DEBUG] [Thread-21862] [transport.py] [_log()] server lang: <none>
2026-04-15T16:08:47.962 [DEBUG] [Thread-21862] [transport.py] [_log()] kex follows: False
2026-04-15T16:08:47.962 [DEBUG] [Thread-21862] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:08:47.962 [DEBUG] [Thread-21862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:08:47.962 [DEBUG] [Thread-21862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:08:47.962 [DEBUG] [Thread-21862] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:08:47.962 [DEBUG] [Thread-21862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:08:47.962 [DEBUG] [Thread-21862] [transport.py] [_log()] Compression: none
2026-04-15T16:08:47.962 [DEBUG] [Thread-21862] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:08:48.021 [DEBUG] [Thread-21862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:08:48.022 [DEBUG] [Thread-21862] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:08:48.022 [DEBUG] [Thread-21862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:08:48.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:08:48.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:08:48.079 [DEBUG] [Thread-21862] [transport.py] [_log()] userauth is OK
2026-04-15T16:08:48.079 [DEBUG] [Thread-21862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:08:48.079 [DEBUG] [Thread-21862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:08:48.079 [DEBUG] [Thread-21862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:08:48.079 [DEBUG] [Thread-21862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:08:48.102 [INFO] [Thread-21862] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:08:48.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:08:48.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:08:48.953 [DEBUG] [Thread-21862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:08:48.953 [DEBUG] [Thread-21862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:08:49.001 [DEBUG] [Thread-21862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:08:49.001 [DEBUG] [Thread-21862] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:08:49.010 [DEBUG] [Thread-21862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:08:49.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:08:49.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')
2026-04-15T16:08:49.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
2026-04-15T16:08:49.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:08:49.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:08:49.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:08:49.044 [DEBUG] [Thread-21862] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:08:54.936 [DEBUG] [Thread-21864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:09:09.978 [DEBUG] [Thread-21865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:09:17.653 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:09:17.654 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:09:19.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:09:19.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:09:19.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T16:09:20.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 8, 52), 9.37387, 53.3759, 0.0, 22.6534, 14.8396, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:09:20.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:08:52
2026-04-15T16:09:20.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:09:21.182 [DEBUG] [Thread-21866] [transport.py] [_log()] starting thread (client mode): 0xee9ad780
2026-04-15T16:09:21.182 [DEBUG] [Thread-21866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:09:21.202 [DEBUG] [Thread-21866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:09:21.202 [INFO] [Thread-21866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:09:21.205 [DEBUG] [Thread-21866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:09:21.205 [DEBUG] [Thread-21866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:09:21.205 [DEBUG] [Thread-21866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:09:21.205 [DEBUG] [Thread-21866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:09:21.205 [DEBUG] [Thread-21866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:09:21.205 [DEBUG] [Thread-21866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:09:21.205 [DEBUG] [Thread-21866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:09:21.205 [DEBUG] [Thread-21866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:09:21.206 [DEBUG] [Thread-21866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:09:21.206 [DEBUG] [Thread-21866] [transport.py] [_log()] client lang: <none>
2026-04-15T16:09:21.206 [DEBUG] [Thread-21866] [transport.py] [_log()] server lang: <none>
2026-04-15T16:09:21.206 [DEBUG] [Thread-21866] [transport.py] [_log()] kex follows: False
2026-04-15T16:09:21.206 [DEBUG] [Thread-21866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:09:21.206 [DEBUG] [Thread-21866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:09:21.206 [DEBUG] [Thread-21866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:09:21.206 [DEBUG] [Thread-21866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:09:21.206 [DEBUG] [Thread-21866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:09:21.206 [DEBUG] [Thread-21866] [transport.py] [_log()] Compression: none
2026-04-15T16:09:21.206 [DEBUG] [Thread-21866] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:09:21.222 [DEBUG] [Thread-21866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:09:21.223 [DEBUG] [Thread-21866] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:09:21.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:09:21.223 [DEBUG] [Thread-21866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:09:21.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:09:21.224 [DEBUG] [Thread-21866] [transport.py] [_log()] userauth is OK
2026-04-15T16:09:21.225 [DEBUG] [Thread-21866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:09:21.225 [DEBUG] [Thread-21866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:09:21.225 [DEBUG] [Thread-21866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:09:21.225 [DEBUG] [Thread-21866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:09:21.249 [INFO] [Thread-21866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:09:21.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:09:22.009 [DEBUG] [Thread-21866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:09:22.010 [DEBUG] [Thread-21866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:09:22.010 [DEBUG] [Thread-21866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:09:22.050 [DEBUG] [Thread-21866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:09:22.050 [DEBUG] [Thread-21866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:09:22.053 [DEBUG] [Thread-21866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:09:22.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:09:22.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:09:22.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:09:22.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:09:22.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:09:22.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:09:22.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:09:22.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:09:22.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:09:22.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.589372 -999.00  +13.90  26.68     60   +6.30 1 2 1 1 1   887    0 6.98 -26.70 ----- 24.6 26.7 308.6 28.4 18.6 -25.0 18.3 -24.2 18.6 -20.5 19.1 -22.2
2026-04-15T16:09:22.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:09:22.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:09:22.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.589372
2026-04-15T16:09:22.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:09:22.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:09:22.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:09:22.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:09:22.080 [DEBUG] [Thread-21866] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:09:22.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T16:09:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:08:52', tmtdew=9.37387, humidity=53.3759, cloud=0.0, wind=22.6534, temperature=14.8396, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:08:41.741', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:09:22.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:09:22.338 [DEBUG] [Thread-21869] [transport.py] [_log()] starting thread (client mode): 0xee9ae440
2026-04-15T16:09:22.338 [DEBUG] [Thread-21869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:09:22.353 [DEBUG] [Thread-21869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:09:22.353 [INFO] [Thread-21869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:09:22.360 [DEBUG] [Thread-21869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:09:22.360 [DEBUG] [Thread-21869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:09:22.360 [DEBUG] [Thread-21869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:09:22.361 [DEBUG] [Thread-21869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:09:22.361 [DEBUG] [Thread-21869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:09:22.361 [DEBUG] [Thread-21869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:09:22.361 [DEBUG] [Thread-21869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:09:22.361 [DEBUG] [Thread-21869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:09:22.361 [DEBUG] [Thread-21869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:09:22.361 [DEBUG] [Thread-21869] [transport.py] [_log()] client lang: <none>
2026-04-15T16:09:22.361 [DEBUG] [Thread-21869] [transport.py] [_log()] server lang: <none>
2026-04-15T16:09:22.361 [DEBUG] [Thread-21869] [transport.py] [_log()] kex follows: False
2026-04-15T16:09:22.361 [DEBUG] [Thread-21869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:09:22.361 [DEBUG] [Thread-21869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:09:22.361 [DEBUG] [Thread-21869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:09:22.362 [DEBUG] [Thread-21869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:09:22.362 [DEBUG] [Thread-21869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:09:22.362 [DEBUG] [Thread-21869] [transport.py] [_log()] Compression: none
2026-04-15T16:09:22.362 [DEBUG] [Thread-21869] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:09:22.419 [DEBUG] [Thread-21869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:09:22.419 [DEBUG] [Thread-21869] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:09:22.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:09:22.420 [DEBUG] [Thread-21869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:09:22.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:09:22.476 [DEBUG] [Thread-21869] [transport.py] [_log()] userauth is OK
2026-04-15T16:09:22.476 [DEBUG] [Thread-21869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:09:22.476 [DEBUG] [Thread-21869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:09:22.476 [DEBUG] [Thread-21869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:09:22.477 [DEBUG] [Thread-21869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:09:22.502 [INFO] [Thread-21869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:09:22.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:09:22.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:09:23.343 [DEBUG] [Thread-21869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:09:23.343 [DEBUG] [Thread-21869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:09:23.393 [DEBUG] [Thread-21869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:09:23.394 [DEBUG] [Thread-21869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:09:23.402 [DEBUG] [Thread-21869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:09:23.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:09:23.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')
2026-04-15T16:09: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') -> 00000000
2026-04-15T16:09:23.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:09:23.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:09:23.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:09:23.437 [DEBUG] [Thread-21869] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:09:25.008 [DEBUG] [Thread-21871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:09:35.942 [DEBUG] [Thread-21872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:09:40.051 [DEBUG] [Thread-21873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:09:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:09:53.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:09:53.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
2026-04-15T16:09:54.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 9, 27), 8.9901, 54.5222, 0.0, 18.8089, 14.3357, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:09:54.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:09:27
2026-04-15T16:09:55.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:09:55.082 [DEBUG] [Thread-21874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:09:55.514 [DEBUG] [Thread-21875] [transport.py] [_log()] starting thread (client mode): 0xee9265c0
2026-04-15T16:09:55.514 [DEBUG] [Thread-21875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:09:55.534 [DEBUG] [Thread-21875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:09:55.534 [INFO] [Thread-21875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:09:55.537 [DEBUG] [Thread-21875] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:09:55.537 [DEBUG] [Thread-21875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:09:55.537 [DEBUG] [Thread-21875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:09:55.537 [DEBUG] [Thread-21875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:09:55.537 [DEBUG] [Thread-21875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:09:55.538 [DEBUG] [Thread-21875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:09:55.538 [DEBUG] [Thread-21875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:09:55.538 [DEBUG] [Thread-21875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:09:55.538 [DEBUG] [Thread-21875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:09:55.538 [DEBUG] [Thread-21875] [transport.py] [_log()] client lang: <none>
2026-04-15T16:09:55.538 [DEBUG] [Thread-21875] [transport.py] [_log()] server lang: <none>
2026-04-15T16:09:55.538 [DEBUG] [Thread-21875] [transport.py] [_log()] kex follows: False
2026-04-15T16:09:55.538 [DEBUG] [Thread-21875] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:09:55.538 [DEBUG] [Thread-21875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:09:55.538 [DEBUG] [Thread-21875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:09:55.538 [DEBUG] [Thread-21875] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:09:55.538 [DEBUG] [Thread-21875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:09:55.539 [DEBUG] [Thread-21875] [transport.py] [_log()] Compression: none
2026-04-15T16:09:55.539 [DEBUG] [Thread-21875] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:09:55.555 [DEBUG] [Thread-21875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:09:55.555 [DEBUG] [Thread-21875] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:09:55.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:09:55.556 [DEBUG] [Thread-21875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:09:55.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:09:55.557 [DEBUG] [Thread-21875] [transport.py] [_log()] userauth is OK
2026-04-15T16:09:55.557 [DEBUG] [Thread-21875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:09:55.557 [DEBUG] [Thread-21875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:09:55.557 [DEBUG] [Thread-21875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:09:55.557 [DEBUG] [Thread-21875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:09:55.581 [INFO] [Thread-21875] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:09:55.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:09:56.385 [DEBUG] [Thread-21875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:09:56.385 [DEBUG] [Thread-21875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:09:56.386 [DEBUG] [Thread-21875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:09:56.426 [DEBUG] [Thread-21875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:09:56.426 [DEBUG] [Thread-21875] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:09:56.428 [DEBUG] [Thread-21875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:09:56.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:09:56.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:09:56.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:09:56.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:09:56.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:09:56.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:09:56.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:09:56.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:09:56.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:09:56.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.589719 -999.00  +13.90  19.81     62   +6.80 1 2 1 1 1   887    0 6.91 -30.24 ----- 21.5 19.8 310.4 26.0 18.7 -25.5 18.2 -24.0 18.6 -21.7 19.2 -22.9
2026-04-15T16:09:56.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:09:56.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:09:56.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.589719
2026-04-15T16:09:56.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:09:56.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:09:56.448 [DEBUG] [Thread-21875] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:09:56.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:09:56.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:09:56.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T16:09:56.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:09:27', tmtdew=8.9901, humidity=54.5222, cloud=0.0, wind=18.8089, temperature=14.3357, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:09:11.722', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:09:56.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:09:56.667 [DEBUG] [Thread-21878] [transport.py] [_log()] starting thread (client mode): 0xee91c670
2026-04-15T16:09:56.668 [DEBUG] [Thread-21878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:09:56.681 [DEBUG] [Thread-21878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:09:56.681 [INFO] [Thread-21878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:09:56.688 [DEBUG] [Thread-21878] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:09:56.689 [DEBUG] [Thread-21878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:09:56.689 [DEBUG] [Thread-21878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:09:56.689 [DEBUG] [Thread-21878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:09:56.689 [DEBUG] [Thread-21878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:09:56.689 [DEBUG] [Thread-21878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:09:56.689 [DEBUG] [Thread-21878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:09:56.689 [DEBUG] [Thread-21878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:09:56.689 [DEBUG] [Thread-21878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:09:56.689 [DEBUG] [Thread-21878] [transport.py] [_log()] client lang: <none>
2026-04-15T16:09:56.689 [DEBUG] [Thread-21878] [transport.py] [_log()] server lang: <none>
2026-04-15T16:09:56.689 [DEBUG] [Thread-21878] [transport.py] [_log()] kex follows: False
2026-04-15T16:09:56.689 [DEBUG] [Thread-21878] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:09:56.690 [DEBUG] [Thread-21878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:09:56.690 [DEBUG] [Thread-21878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:09:56.690 [DEBUG] [Thread-21878] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:09:56.690 [DEBUG] [Thread-21878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:09:56.690 [DEBUG] [Thread-21878] [transport.py] [_log()] Compression: none
2026-04-15T16:09:56.690 [DEBUG] [Thread-21878] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:09:56.744 [DEBUG] [Thread-21878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:09:56.744 [DEBUG] [Thread-21878] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:09:56.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:09:56.745 [DEBUG] [Thread-21878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:09:56.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:09:56.801 [DEBUG] [Thread-21878] [transport.py] [_log()] userauth is OK
2026-04-15T16:09:56.801 [DEBUG] [Thread-21878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:09:56.801 [DEBUG] [Thread-21878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:09:56.801 [DEBUG] [Thread-21878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:09:56.802 [DEBUG] [Thread-21878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:09:56.826 [INFO] [Thread-21878] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:09:56.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:09:56.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:09:57.739 [DEBUG] [Thread-21878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:09:57.739 [DEBUG] [Thread-21878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:09:57.787 [DEBUG] [Thread-21878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:09:57.787 [DEBUG] [Thread-21878] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:09:57.796 [DEBUG] [Thread-21878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:09:57.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:09:57.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')
2026-04-15T16:09:57.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
2026-04-15T16:09:57.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:09:57.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:09:57.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:09:57.831 [DEBUG] [Thread-21878] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:10:10.114 [DEBUG] [Thread-21880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:10:17.794 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:10:17.795 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:10:25.157 [DEBUG] [Thread-21881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:10:27.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:10:27.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:10:27.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
2026-04-15T16:10:29.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 10, 3), 8.99341, 54.5057, 0.0, 16.8685, 14.3191, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:10:29.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:10:03
2026-04-15T16:10:29.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:10:29.914 [DEBUG] [Thread-21882] [transport.py] [_log()] starting thread (client mode): 0xee9ae260
2026-04-15T16:10:29.914 [DEBUG] [Thread-21882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:10:29.935 [DEBUG] [Thread-21882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:10:29.935 [INFO] [Thread-21882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:10:29.936 [DEBUG] [Thread-21882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:10:29.936 [DEBUG] [Thread-21882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:10:29.937 [DEBUG] [Thread-21882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:10:29.937 [DEBUG] [Thread-21882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:10:29.937 [DEBUG] [Thread-21882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:10:29.937 [DEBUG] [Thread-21882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:10:29.937 [DEBUG] [Thread-21882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:10:29.937 [DEBUG] [Thread-21882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:10:29.937 [DEBUG] [Thread-21882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:10:29.937 [DEBUG] [Thread-21882] [transport.py] [_log()] client lang: <none>
2026-04-15T16:10:29.937 [DEBUG] [Thread-21882] [transport.py] [_log()] server lang: <none>
2026-04-15T16:10:29.937 [DEBUG] [Thread-21882] [transport.py] [_log()] kex follows: False
2026-04-15T16:10:29.937 [DEBUG] [Thread-21882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:10:29.938 [DEBUG] [Thread-21882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:10:29.938 [DEBUG] [Thread-21882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:10:29.938 [DEBUG] [Thread-21882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:10:29.938 [DEBUG] [Thread-21882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:10:29.938 [DEBUG] [Thread-21882] [transport.py] [_log()] Compression: none
2026-04-15T16:10:29.938 [DEBUG] [Thread-21882] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:10:29.950 [DEBUG] [Thread-21882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:10:29.950 [DEBUG] [Thread-21882] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:10:29.951 [DEBUG] [Thread-21882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:10:29.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:10:29.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:10:29.951 [DEBUG] [Thread-21882] [transport.py] [_log()] userauth is OK
2026-04-15T16:10:29.952 [DEBUG] [Thread-21882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:10:29.952 [DEBUG] [Thread-21882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:10:29.952 [DEBUG] [Thread-21882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:10:29.952 [DEBUG] [Thread-21882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:10:29.968 [INFO] [Thread-21882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:10:29.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:10:30.774 [DEBUG] [Thread-21882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:10:30.775 [DEBUG] [Thread-21882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:10:30.775 [DEBUG] [Thread-21882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:10:30.816 [DEBUG] [Thread-21882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:10:30.816 [DEBUG] [Thread-21882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:10:30.819 [DEBUG] [Thread-21882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:10:30.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:10:30.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:10:30.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:10:30.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:10:30.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:10:30.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:10:30.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:10:30.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:10:30.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:10:30.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.590066 -999.00  +14.10  20.76     61   +6.80 1 2 1 1 1   887    0 6.86 -29.83 ----- 18.3 20.8 311.4 24.7 18.8 -25.0 18.2 -24.1 18.8 -20.8 19.5 -22.4
2026-04-15T16:10:30.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:10:30.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:10:30.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.590066
2026-04-15T16:10:30.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:10:30.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:10:30.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:10:30.844 [DEBUG] [Thread-21882] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:10:30.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:10:30.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T16:10:30.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:10:03', tmtdew=8.99341, humidity=54.5057, cloud=0.0, wind=16.8685, temperature=14.3191, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:09:41.702', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:10:31.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:10:31.095 [DEBUG] [Thread-21885] [transport.py] [_log()] starting thread (client mode): 0xee91c7f0
2026-04-15T16:10:31.095 [DEBUG] [Thread-21885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:10:31.110 [DEBUG] [Thread-21885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:10:31.110 [INFO] [Thread-21885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:10:31.117 [DEBUG] [Thread-21885] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:10:31.117 [DEBUG] [Thread-21885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:10:31.117 [DEBUG] [Thread-21885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:10:31.117 [DEBUG] [Thread-21885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:10:31.117 [DEBUG] [Thread-21885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:10:31.117 [DEBUG] [Thread-21885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:10:31.117 [DEBUG] [Thread-21885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:10:31.117 [DEBUG] [Thread-21885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:10:31.117 [DEBUG] [Thread-21885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:10:31.117 [DEBUG] [Thread-21885] [transport.py] [_log()] client lang: <none>
2026-04-15T16:10:31.118 [DEBUG] [Thread-21885] [transport.py] [_log()] server lang: <none>
2026-04-15T16:10:31.118 [DEBUG] [Thread-21885] [transport.py] [_log()] kex follows: False
2026-04-15T16:10:31.118 [DEBUG] [Thread-21885] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:10:31.118 [DEBUG] [Thread-21885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:10:31.118 [DEBUG] [Thread-21885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:10:31.118 [DEBUG] [Thread-21885] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:10:31.118 [DEBUG] [Thread-21885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:10:31.118 [DEBUG] [Thread-21885] [transport.py] [_log()] Compression: none
2026-04-15T16:10:31.118 [DEBUG] [Thread-21885] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:10:31.172 [DEBUG] [Thread-21885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:10:31.173 [DEBUG] [Thread-21885] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:10:31.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:10:31.173 [DEBUG] [Thread-21885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:10:31.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:10:31.229 [DEBUG] [Thread-21885] [transport.py] [_log()] userauth is OK
2026-04-15T16:10:31.229 [DEBUG] [Thread-21885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:10:31.230 [DEBUG] [Thread-21885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:10:31.230 [DEBUG] [Thread-21885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:10:31.230 [DEBUG] [Thread-21885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:10:31.250 [INFO] [Thread-21885] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:10:31.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:10:31.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:10:32.111 [DEBUG] [Thread-21885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:10:32.111 [DEBUG] [Thread-21885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:10:32.159 [DEBUG] [Thread-21885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:10:32.159 [DEBUG] [Thread-21885] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:10:32.168 [DEBUG] [Thread-21885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:10:32.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:10:32.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')
2026-04-15T16:10:32.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
2026-04-15T16:10:32.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:10:32.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:10:32.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:10:32.203 [DEBUG] [Thread-21885] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:10:36.032 [DEBUG] [Thread-21887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:10:40.188 [DEBUG] [Thread-21888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:10:55.234 [DEBUG] [Thread-21889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:11:02.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:11:02.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:11:02.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T16:11:03.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 10, 38), 9.52149, 52.9454, 0.0, 19.9721, 15.2706, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:11:03.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:10:38
2026-04-15T16:11:03.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:11:04.351 [DEBUG] [Thread-21890] [transport.py] [_log()] starting thread (client mode): 0xee90d090
2026-04-15T16:11:04.351 [DEBUG] [Thread-21890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:11:04.371 [DEBUG] [Thread-21890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:11:04.371 [INFO] [Thread-21890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:11:04.374 [DEBUG] [Thread-21890] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:11:04.374 [DEBUG] [Thread-21890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:11:04.374 [DEBUG] [Thread-21890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:11:04.374 [DEBUG] [Thread-21890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:11:04.374 [DEBUG] [Thread-21890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:11:04.374 [DEBUG] [Thread-21890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:11:04.375 [DEBUG] [Thread-21890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:11:04.375 [DEBUG] [Thread-21890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:11:04.375 [DEBUG] [Thread-21890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:11:04.375 [DEBUG] [Thread-21890] [transport.py] [_log()] client lang: <none>
2026-04-15T16:11:04.375 [DEBUG] [Thread-21890] [transport.py] [_log()] server lang: <none>
2026-04-15T16:11:04.375 [DEBUG] [Thread-21890] [transport.py] [_log()] kex follows: False
2026-04-15T16:11:04.375 [DEBUG] [Thread-21890] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:11:04.375 [DEBUG] [Thread-21890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:11:04.375 [DEBUG] [Thread-21890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:11:04.375 [DEBUG] [Thread-21890] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:11:04.376 [DEBUG] [Thread-21890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:11:04.376 [DEBUG] [Thread-21890] [transport.py] [_log()] Compression: none
2026-04-15T16:11:04.376 [DEBUG] [Thread-21890] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:11:04.389 [DEBUG] [Thread-21890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:11:04.389 [DEBUG] [Thread-21890] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:11:04.389 [DEBUG] [Thread-21890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:11:04.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:11:04.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:11:04.390 [DEBUG] [Thread-21890] [transport.py] [_log()] userauth is OK
2026-04-15T16:11:04.391 [DEBUG] [Thread-21890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:11:04.391 [DEBUG] [Thread-21890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:11:04.391 [DEBUG] [Thread-21890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:11:04.391 [DEBUG] [Thread-21890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:11:04.414 [INFO] [Thread-21890] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:11:04.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:11:05.192 [DEBUG] [Thread-21890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:11:05.192 [DEBUG] [Thread-21890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:11:05.193 [DEBUG] [Thread-21890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:11:05.233 [DEBUG] [Thread-21890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:11:05.233 [DEBUG] [Thread-21890] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:11:05.236 [DEBUG] [Thread-21890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:11:05.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:11:05.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:11:05.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:11:05.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:11:05.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:11:05.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:11:05.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:11:05.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:11:05.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:11:05.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.590761 -999.00  +14.30  20.19     61   +6.90 1 1 1 1 1   887    0 6.94 -29.04 ----- 22.9 20.2 325.2 22.6 18.9 -25.1 18.4 -24.2 18.9 -22.3 19.6 -23.0
2026-04-15T16:11:05.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:11:05.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:11:05.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.590761
2026-04-15T16:11:05.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:11:05.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:11:05.259 [DEBUG] [Thread-21890] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:11:05.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:11:05.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:11:05.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:11:05.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:10:38', tmtdew=9.52149, humidity=52.9454, cloud=0.0, wind=19.9721, temperature=15.2706, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:10:41.750', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:11:05.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:11:05.516 [DEBUG] [Thread-21893] [transport.py] [_log()] starting thread (client mode): 0xee90f910
2026-04-15T16:11:05.516 [DEBUG] [Thread-21893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:11:05.530 [DEBUG] [Thread-21893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:11:05.530 [INFO] [Thread-21893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:11:05.537 [DEBUG] [Thread-21893] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:11:05.537 [DEBUG] [Thread-21893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:11:05.538 [DEBUG] [Thread-21893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:11:05.538 [DEBUG] [Thread-21893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:11:05.538 [DEBUG] [Thread-21893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:11:05.538 [DEBUG] [Thread-21893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:11:05.538 [DEBUG] [Thread-21893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:11:05.538 [DEBUG] [Thread-21893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:11:05.538 [DEBUG] [Thread-21893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:11:05.538 [DEBUG] [Thread-21893] [transport.py] [_log()] client lang: <none>
2026-04-15T16:11:05.538 [DEBUG] [Thread-21893] [transport.py] [_log()] server lang: <none>
2026-04-15T16:11:05.538 [DEBUG] [Thread-21893] [transport.py] [_log()] kex follows: False
2026-04-15T16:11:05.538 [DEBUG] [Thread-21893] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:11:05.539 [DEBUG] [Thread-21893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:11:05.539 [DEBUG] [Thread-21893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:11:05.539 [DEBUG] [Thread-21893] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:11:05.539 [DEBUG] [Thread-21893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:11:05.539 [DEBUG] [Thread-21893] [transport.py] [_log()] Compression: none
2026-04-15T16:11:05.539 [DEBUG] [Thread-21893] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:11:05.594 [DEBUG] [Thread-21893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:11:05.594 [DEBUG] [Thread-21893] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:11:05.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:11:05.595 [DEBUG] [Thread-21893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:11:05.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:11:05.651 [DEBUG] [Thread-21893] [transport.py] [_log()] userauth is OK
2026-04-15T16:11:05.651 [DEBUG] [Thread-21893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:11:05.651 [DEBUG] [Thread-21893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:11:05.651 [DEBUG] [Thread-21893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:11:05.651 [DEBUG] [Thread-21893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:11:05.676 [INFO] [Thread-21893] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:11:05.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:11:05.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:11:06.506 [DEBUG] [Thread-21893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:11:06.506 [DEBUG] [Thread-21893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:11:06.555 [DEBUG] [Thread-21893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:11:06.555 [DEBUG] [Thread-21893] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:11:06.563 [DEBUG] [Thread-21893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:11:06.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:11:06.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')
2026-04-15T16:11:06.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
2026-04-15T16:11:06.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:11:06.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:11:06.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:11:06.597 [DEBUG] [Thread-21893] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:11:10.266 [DEBUG] [Thread-21895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:11:17.941 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:11:17.941 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:11:25.311 [DEBUG] [Thread-21896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:11:36.139 [DEBUG] [Thread-21897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:11:36.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:11:36.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:11:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T16:11:37.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 11, 14), 9.38729, 53.3101, 0.0, 16.8516, 14.5025, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:11:37.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:11:14
2026-04-15T16:11:38.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:11:38.760 [DEBUG] [Thread-21898] [transport.py] [_log()] starting thread (client mode): 0xf17c1840
2026-04-15T16:11:38.760 [DEBUG] [Thread-21898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:11:38.779 [DEBUG] [Thread-21898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:11:38.780 [INFO] [Thread-21898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:11:38.783 [DEBUG] [Thread-21898] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:11:38.783 [DEBUG] [Thread-21898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:11:38.783 [DEBUG] [Thread-21898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:11:38.783 [DEBUG] [Thread-21898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:11:38.783 [DEBUG] [Thread-21898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:11:38.783 [DEBUG] [Thread-21898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:11:38.783 [DEBUG] [Thread-21898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:11:38.783 [DEBUG] [Thread-21898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:11:38.783 [DEBUG] [Thread-21898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:11:38.784 [DEBUG] [Thread-21898] [transport.py] [_log()] client lang: <none>
2026-04-15T16:11:38.784 [DEBUG] [Thread-21898] [transport.py] [_log()] server lang: <none>
2026-04-15T16:11:38.784 [DEBUG] [Thread-21898] [transport.py] [_log()] kex follows: False
2026-04-15T16:11:38.784 [DEBUG] [Thread-21898] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:11:38.784 [DEBUG] [Thread-21898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:11:38.784 [DEBUG] [Thread-21898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:11:38.784 [DEBUG] [Thread-21898] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:11:38.784 [DEBUG] [Thread-21898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:11:38.784 [DEBUG] [Thread-21898] [transport.py] [_log()] Compression: none
2026-04-15T16:11:38.784 [DEBUG] [Thread-21898] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:11:38.800 [DEBUG] [Thread-21898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:11:38.800 [DEBUG] [Thread-21898] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:11:38.801 [DEBUG] [Thread-21898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:11:38.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:11:38.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:11:38.802 [DEBUG] [Thread-21898] [transport.py] [_log()] userauth is OK
2026-04-15T16:11:38.802 [DEBUG] [Thread-21898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:11:38.802 [DEBUG] [Thread-21898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:11:38.802 [DEBUG] [Thread-21898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:11:38.802 [DEBUG] [Thread-21898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:11:38.819 [INFO] [Thread-21898] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:11:38.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:11:39.601 [DEBUG] [Thread-21898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:11:39.601 [DEBUG] [Thread-21898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:11:39.602 [DEBUG] [Thread-21898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:11:39.641 [DEBUG] [Thread-21898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:11:39.642 [DEBUG] [Thread-21898] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:11:39.644 [DEBUG] [Thread-21898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:11:39.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:11:39.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:11:39.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:11:39.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:11:39.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:11:39.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:11:39.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:11:39.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:11:39.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:11:39.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.591108 -999.00  +14.50  17.19     60   +6.80 1 2 1 1 1   887    0 6.83 -29.37 ----- 19.6 17.2 335.0 25.9 18.9 -26.0 18.2 -24.6 19.1 -20.9 19.8 -22.7
2026-04-15T16:11:39.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:11:39.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:11:39.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.591108
2026-04-15T16:11:39.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:11:39.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:11:39.671 [DEBUG] [Thread-21898] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:11:39.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:11:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:11:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T16:11:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:11:14', tmtdew=9.38729, humidity=53.3101, cloud=0.0, wind=16.8516, temperature=14.5025, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:11:11.731', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:11:39.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:11:40.343 [DEBUG] [Thread-21901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:11:55.387 [DEBUG] [Thread-21902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:12:10.419 [DEBUG] [Thread-21903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:12:18.081 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:12:18.083 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:12:25.452 [DEBUG] [Thread-21904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:12:36.235 [DEBUG] [Thread-21905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:12:40.484 [DEBUG] [Thread-21906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:12:55.516 [DEBUG] [Thread-21907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:13:10.548 [DEBUG] [Thread-21908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:13:18.224 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:13:18.225 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:13:25.581 [DEBUG] [Thread-21909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:13:36.316 [DEBUG] [Thread-21910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:13:40.612 [DEBUG] [Thread-21911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:13:55.211 [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
2026-04-15T16:13:55.643 [DEBUG] [Thread-21912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:14:10.674 [DEBUG] [Thread-21913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:14:18.364 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:14:18.365 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:14:25.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:14:25.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:14:25.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
2026-04-15T16:14:25.703 [DEBUG] [Thread-21914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:14:26.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 14, 12), 9.76241, 51.9261, 0.0, 16.7267, 14.852, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:14:26.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:14:12
2026-04-15T16:14:26.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:14:27.423 [DEBUG] [Thread-21915] [transport.py] [_log()] starting thread (client mode): 0xee90ffd0
2026-04-15T16:14:27.423 [DEBUG] [Thread-21915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:14:27.442 [DEBUG] [Thread-21915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:14:27.442 [INFO] [Thread-21915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:14:27.445 [DEBUG] [Thread-21915] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:14:27.445 [DEBUG] [Thread-21915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:14:27.445 [DEBUG] [Thread-21915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:14:27.445 [DEBUG] [Thread-21915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:14:27.446 [DEBUG] [Thread-21915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:14:27.446 [DEBUG] [Thread-21915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:14:27.446 [DEBUG] [Thread-21915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:14:27.446 [DEBUG] [Thread-21915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:14:27.446 [DEBUG] [Thread-21915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:14:27.446 [DEBUG] [Thread-21915] [transport.py] [_log()] client lang: <none>
2026-04-15T16:14:27.446 [DEBUG] [Thread-21915] [transport.py] [_log()] server lang: <none>
2026-04-15T16:14:27.446 [DEBUG] [Thread-21915] [transport.py] [_log()] kex follows: False
2026-04-15T16:14:27.446 [DEBUG] [Thread-21915] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:14:27.446 [DEBUG] [Thread-21915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:14:27.446 [DEBUG] [Thread-21915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:14:27.447 [DEBUG] [Thread-21915] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:14:27.447 [DEBUG] [Thread-21915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:14:27.447 [DEBUG] [Thread-21915] [transport.py] [_log()] Compression: none
2026-04-15T16:14:27.447 [DEBUG] [Thread-21915] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:14:27.462 [DEBUG] [Thread-21915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:14:27.462 [DEBUG] [Thread-21915] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:14:27.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:14:27.463 [DEBUG] [Thread-21915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:14:27.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:14:27.464 [DEBUG] [Thread-21915] [transport.py] [_log()] userauth is OK
2026-04-15T16:14:27.464 [DEBUG] [Thread-21915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:14:27.464 [DEBUG] [Thread-21915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:14:27.464 [DEBUG] [Thread-21915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:14:27.464 [DEBUG] [Thread-21915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:14:27.498 [INFO] [Thread-21915] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:14:27.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:14:28.277 [DEBUG] [Thread-21915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:14:28.277 [DEBUG] [Thread-21915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:14:28.278 [DEBUG] [Thread-21915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:14:28.318 [DEBUG] [Thread-21915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:14:28.318 [DEBUG] [Thread-21915] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:14:28.321 [DEBUG] [Thread-21915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:14:28.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:14:28.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:14:28.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:14:28.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:14:28.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:14:28.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:14:28.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:14:28.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:14:28.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:14:28.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.592844 -999.00  +14.50  18.45     59   +6.70 1 1 1 1 1   887    0 6.93 -27.83 ----- 21.2 18.4 307.6 22.8 19.1 -26.2 18.4 -25.0 19.4 -22.2 20.2 -24.0
2026-04-15T16:14:28.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:14:28.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:14:28.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.592844
2026-04-15T16:14:28.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:14:28.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:14:28.348 [DEBUG] [Thread-21915] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:14:28.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:14:28.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:14:28.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:14:28.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:14:12', tmtdew=9.76241, humidity=51.9261, cloud=0.0, wind=16.7267, temperature=14.852, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:13:41.722', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:14:28.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:14:28.604 [DEBUG] [Thread-21918] [transport.py] [_log()] starting thread (client mode): 0xee9255a0
2026-04-15T16:14:28.605 [DEBUG] [Thread-21918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:14:28.619 [DEBUG] [Thread-21918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:14:28.619 [INFO] [Thread-21918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:14:28.626 [DEBUG] [Thread-21918] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:14:28.626 [DEBUG] [Thread-21918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:14:28.626 [DEBUG] [Thread-21918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:14:28.626 [DEBUG] [Thread-21918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:14:28.626 [DEBUG] [Thread-21918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:14:28.626 [DEBUG] [Thread-21918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:14:28.627 [DEBUG] [Thread-21918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:14:28.627 [DEBUG] [Thread-21918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:14:28.627 [DEBUG] [Thread-21918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:14:28.627 [DEBUG] [Thread-21918] [transport.py] [_log()] client lang: <none>
2026-04-15T16:14:28.627 [DEBUG] [Thread-21918] [transport.py] [_log()] server lang: <none>
2026-04-15T16:14:28.627 [DEBUG] [Thread-21918] [transport.py] [_log()] kex follows: False
2026-04-15T16:14:28.627 [DEBUG] [Thread-21918] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:14:28.627 [DEBUG] [Thread-21918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:14:28.627 [DEBUG] [Thread-21918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:14:28.627 [DEBUG] [Thread-21918] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:14:28.627 [DEBUG] [Thread-21918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:14:28.628 [DEBUG] [Thread-21918] [transport.py] [_log()] Compression: none
2026-04-15T16:14:28.628 [DEBUG] [Thread-21918] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:14:28.687 [DEBUG] [Thread-21918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:14:28.687 [DEBUG] [Thread-21918] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:14:28.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:14:28.688 [DEBUG] [Thread-21918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:14:28.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:14:28.743 [DEBUG] [Thread-21918] [transport.py] [_log()] userauth is OK
2026-04-15T16:14:28.743 [DEBUG] [Thread-21918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:14:28.743 [DEBUG] [Thread-21918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:14:28.744 [DEBUG] [Thread-21918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:14:28.744 [DEBUG] [Thread-21918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:14:28.768 [INFO] [Thread-21918] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:14:28.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:14:28.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:14:29.637 [DEBUG] [Thread-21918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:14:29.637 [DEBUG] [Thread-21918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:14:29.685 [DEBUG] [Thread-21918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:14:29.686 [DEBUG] [Thread-21918] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:14:29.694 [DEBUG] [Thread-21918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:14:29.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:14:29.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')
2026-04-15T16:14:29.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') -> 00000000
2026-04-15T16:14:29.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:14:29.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:14:29.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:14:29.728 [DEBUG] [Thread-21918] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:14:36.394 [DEBUG] [Thread-21920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:14:40.732 [DEBUG] [Thread-21921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:14:55.781 [DEBUG] [Thread-21922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:14:59.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:14:59.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:14:59.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
2026-04-15T16:15:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 14, 48), 10.334, 50.0302, 0.0, 20.7482, 15.238, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:15:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:14:48
2026-04-15T16:15:01.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:15:01.998 [DEBUG] [Thread-21923] [transport.py] [_log()] starting thread (client mode): 0xee9adb70
2026-04-15T16:15:01.999 [DEBUG] [Thread-21923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:15:02.018 [DEBUG] [Thread-21923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:15:02.018 [INFO] [Thread-21923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:15:02.019 [DEBUG] [Thread-21923] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:15:02.019 [DEBUG] [Thread-21923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:15:02.019 [DEBUG] [Thread-21923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:15:02.019 [DEBUG] [Thread-21923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:15:02.019 [DEBUG] [Thread-21923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:15:02.019 [DEBUG] [Thread-21923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:15:02.020 [DEBUG] [Thread-21923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:15:02.020 [DEBUG] [Thread-21923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:15:02.020 [DEBUG] [Thread-21923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:15:02.020 [DEBUG] [Thread-21923] [transport.py] [_log()] client lang: <none>
2026-04-15T16:15:02.020 [DEBUG] [Thread-21923] [transport.py] [_log()] server lang: <none>
2026-04-15T16:15:02.020 [DEBUG] [Thread-21923] [transport.py] [_log()] kex follows: False
2026-04-15T16:15:02.020 [DEBUG] [Thread-21923] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:15:02.020 [DEBUG] [Thread-21923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:15:02.020 [DEBUG] [Thread-21923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:15:02.020 [DEBUG] [Thread-21923] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:15:02.020 [DEBUG] [Thread-21923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:15:02.020 [DEBUG] [Thread-21923] [transport.py] [_log()] Compression: none
2026-04-15T16:15:02.020 [DEBUG] [Thread-21923] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:15:02.028 [DEBUG] [Thread-21923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:15:02.028 [DEBUG] [Thread-21923] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:15:02.028 [DEBUG] [Thread-21923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:15:02.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:15:02.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:15:02.029 [DEBUG] [Thread-21923] [transport.py] [_log()] userauth is OK
2026-04-15T16:15:02.029 [DEBUG] [Thread-21923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:15:02.029 [DEBUG] [Thread-21923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:15:02.030 [DEBUG] [Thread-21923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:15:02.030 [DEBUG] [Thread-21923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:15:02.042 [INFO] [Thread-21923] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:15:02.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:15:02.758 [DEBUG] [Thread-21923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:15:02.759 [DEBUG] [Thread-21923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:15:02.759 [DEBUG] [Thread-21923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:15:02.799 [DEBUG] [Thread-21923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:15:02.800 [DEBUG] [Thread-21923] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:15:02.801 [DEBUG] [Thread-21923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:15:02.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:15:02.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:15:02.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:15:02.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:15:02.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:15:02.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:15:02.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:15:02.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:15:02.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:15:02.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.593191 -999.00  +14.40  17.32     58   +6.30 1 1 1 1 1   887    0 6.98 -25.61 ----- 15.6 17.3 324.8 23.9 18.9 -26.2 18.3 -25.6 19.3 -23.2 20.2 -25.2
2026-04-15T16:15:02.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:15:02.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:15:02.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.593191
2026-04-15T16:15:02.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:15:02.819 [DEBUG] [Thread-21923] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:15:02.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:15:02.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:15:02.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:15:02.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:15:02.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:14:48', tmtdew=10.334, humidity=50.0302, cloud=0.0, wind=20.7482, temperature=15.238, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:14:11.702', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:15:03.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:15:03.030 [DEBUG] [Thread-21926] [transport.py] [_log()] starting thread (client mode): 0xee9263b0
2026-04-15T16:15:03.031 [DEBUG] [Thread-21926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:15:03.045 [DEBUG] [Thread-21926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:15:03.045 [INFO] [Thread-21926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:15:03.052 [DEBUG] [Thread-21926] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:15:03.052 [DEBUG] [Thread-21926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:15:03.052 [DEBUG] [Thread-21926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:15:03.052 [DEBUG] [Thread-21926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:15:03.052 [DEBUG] [Thread-21926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:15:03.052 [DEBUG] [Thread-21926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:15:03.052 [DEBUG] [Thread-21926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:15:03.052 [DEBUG] [Thread-21926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:15:03.052 [DEBUG] [Thread-21926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:15:03.052 [DEBUG] [Thread-21926] [transport.py] [_log()] client lang: <none>
2026-04-15T16:15:03.053 [DEBUG] [Thread-21926] [transport.py] [_log()] server lang: <none>
2026-04-15T16:15:03.053 [DEBUG] [Thread-21926] [transport.py] [_log()] kex follows: False
2026-04-15T16:15:03.053 [DEBUG] [Thread-21926] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:15:03.053 [DEBUG] [Thread-21926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:15:03.053 [DEBUG] [Thread-21926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:15:03.053 [DEBUG] [Thread-21926] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:15:03.053 [DEBUG] [Thread-21926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:15:03.053 [DEBUG] [Thread-21926] [transport.py] [_log()] Compression: none
2026-04-15T16:15:03.053 [DEBUG] [Thread-21926] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:15:03.115 [DEBUG] [Thread-21926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:15:03.115 [DEBUG] [Thread-21926] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:15:03.115 [DEBUG] [Thread-21926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:15:03.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:15:03.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:15:03.171 [DEBUG] [Thread-21926] [transport.py] [_log()] userauth is OK
2026-04-15T16:15:03.172 [DEBUG] [Thread-21926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:15:03.172 [DEBUG] [Thread-21926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:15:03.172 [DEBUG] [Thread-21926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:15:03.172 [DEBUG] [Thread-21926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:15:03.191 [INFO] [Thread-21926] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:15:03.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:15:03.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:15:04.112 [DEBUG] [Thread-21926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:15:04.112 [DEBUG] [Thread-21926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:15:04.160 [DEBUG] [Thread-21926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:15:04.160 [DEBUG] [Thread-21926] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:15:04.169 [DEBUG] [Thread-21926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:15:04.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:15:04.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')
2026-04-15T16:15:04.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
2026-04-15T16:15:04.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:15:04.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:15:04.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:15:04.207 [DEBUG] [Thread-21926] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:15:10.812 [DEBUG] [Thread-21928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:15:18.505 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:15:18.506 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:15:25.854 [DEBUG] [Thread-21929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:15:34.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:15:34.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:15:34.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
2026-04-15T16:15:35.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 15, 24), 9.99909, 51.2304, 0.0, 19.233, 14.5862, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:15:35.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:15:24
2026-04-15T16:15:35.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:15:36.408 [DEBUG] [Thread-21930] [transport.py] [_log()] starting thread (client mode): 0xee9ae410
2026-04-15T16:15:36.408 [DEBUG] [Thread-21930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:15:36.430 [DEBUG] [Thread-21930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:15:36.430 [INFO] [Thread-21930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:15:36.433 [DEBUG] [Thread-21930] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:15:36.433 [DEBUG] [Thread-21930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:15:36.433 [DEBUG] [Thread-21930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:15:36.433 [DEBUG] [Thread-21930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:15:36.433 [DEBUG] [Thread-21930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:15:36.433 [DEBUG] [Thread-21930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:15:36.433 [DEBUG] [Thread-21930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:15:36.433 [DEBUG] [Thread-21930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:15:36.433 [DEBUG] [Thread-21930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:15:36.433 [DEBUG] [Thread-21930] [transport.py] [_log()] client lang: <none>
2026-04-15T16:15:36.433 [DEBUG] [Thread-21930] [transport.py] [_log()] server lang: <none>
2026-04-15T16:15:36.433 [DEBUG] [Thread-21930] [transport.py] [_log()] kex follows: False
2026-04-15T16:15:36.434 [DEBUG] [Thread-21930] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:15:36.434 [DEBUG] [Thread-21930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:15:36.434 [DEBUG] [Thread-21930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:15:36.434 [DEBUG] [Thread-21930] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:15:36.434 [DEBUG] [Thread-21930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:15:36.434 [DEBUG] [Thread-21930] [transport.py] [_log()] Compression: none
2026-04-15T16:15:36.434 [DEBUG] [Thread-21930] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:15:36.449 [DEBUG] [Thread-21930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:15:36.449 [DEBUG] [Thread-21930] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:15:36.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:15:36.450 [DEBUG] [Thread-21930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:15:36.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:15:36.451 [DEBUG] [Thread-21930] [transport.py] [_log()] userauth is OK
2026-04-15T16:15:36.451 [DEBUG] [Thread-21930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:15:36.451 [DEBUG] [Thread-21930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:15:36.451 [DEBUG] [Thread-21930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:15:36.451 [DEBUG] [Thread-21930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:15:36.464 [INFO] [Thread-21930] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:15:36.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:15:36.471 [DEBUG] [Thread-21932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:15:37.309 [DEBUG] [Thread-21930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:15:37.309 [DEBUG] [Thread-21930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:15:37.310 [DEBUG] [Thread-21930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:15:37.350 [DEBUG] [Thread-21930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:15:37.350 [DEBUG] [Thread-21930] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:15:37.353 [DEBUG] [Thread-21930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:15:37.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:15:37.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:15:37.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:15:37.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:15:37.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:15:37.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:15:37.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:15:37.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:15:37.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:15:37.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.593538 -999.00  +14.30  21.50     58   +6.20 1 1 1 1 1   887    0 6.99 -22.17 ----- 18.4 21.5 325.8 23.3 18.9 -25.7 18.3 -24.7 19.1 -23.1 20.0 -24.9
2026-04-15T16:15:37.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:15:37.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:15:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.593538
2026-04-15T16:15:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:15:37.379 [DEBUG] [Thread-21930] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:15:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:15:37.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:15:37.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:15:37.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:15:37.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:15:24', tmtdew=9.99909, humidity=51.2304, cloud=0.0, wind=19.233, temperature=14.5862, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:14:41.683', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:15:37.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:15:37.639 [DEBUG] [Thread-21934] [transport.py] [_log()] starting thread (client mode): 0xee9acb80
2026-04-15T16:15:37.639 [DEBUG] [Thread-21934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:15:37.653 [DEBUG] [Thread-21934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:15:37.653 [INFO] [Thread-21934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:15:37.660 [DEBUG] [Thread-21934] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:15:37.660 [DEBUG] [Thread-21934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:15:37.660 [DEBUG] [Thread-21934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:15:37.660 [DEBUG] [Thread-21934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:15:37.661 [DEBUG] [Thread-21934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:15:37.661 [DEBUG] [Thread-21934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:15:37.661 [DEBUG] [Thread-21934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:15:37.661 [DEBUG] [Thread-21934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:15:37.661 [DEBUG] [Thread-21934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:15:37.661 [DEBUG] [Thread-21934] [transport.py] [_log()] client lang: <none>
2026-04-15T16:15:37.661 [DEBUG] [Thread-21934] [transport.py] [_log()] server lang: <none>
2026-04-15T16:15:37.661 [DEBUG] [Thread-21934] [transport.py] [_log()] kex follows: False
2026-04-15T16:15:37.661 [DEBUG] [Thread-21934] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:15:37.661 [DEBUG] [Thread-21934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:15:37.661 [DEBUG] [Thread-21934] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:15:37.661 [DEBUG] [Thread-21934] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:15:37.661 [DEBUG] [Thread-21934] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:15:37.662 [DEBUG] [Thread-21934] [transport.py] [_log()] Compression: none
2026-04-15T16:15:37.662 [DEBUG] [Thread-21934] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:15:37.719 [DEBUG] [Thread-21934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:15:37.720 [DEBUG] [Thread-21934] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:15:37.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:15:37.720 [DEBUG] [Thread-21934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:15:37.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:15:37.781 [DEBUG] [Thread-21934] [transport.py] [_log()] userauth is OK
2026-04-15T16:15:37.781 [DEBUG] [Thread-21934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:15:37.781 [DEBUG] [Thread-21934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:15:37.781 [DEBUG] [Thread-21934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:15:37.781 [DEBUG] [Thread-21934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:15:37.806 [INFO] [Thread-21934] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:15:37.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:15:37.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:15:38.615 [DEBUG] [Thread-21934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:15:38.616 [DEBUG] [Thread-21934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:15:38.663 [DEBUG] [Thread-21934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:15:38.663 [DEBUG] [Thread-21934] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:15:38.672 [DEBUG] [Thread-21934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:15:38.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:15:38.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')
2026-04-15T16:15:38.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') -> 00000000
2026-04-15T16:15:38.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:15:38.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:15:38.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:15:38.703 [DEBUG] [Thread-21934] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:15:40.886 [DEBUG] [Thread-21936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:15:55.934 [DEBUG] [Thread-21937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:16:08.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:16:08.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:16:08.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
2026-04-15T16:16:09.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 15, 59), 9.80762, 51.5453, 0.0, 15.9689, 14.4032, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:16:09.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:15:59
2026-04-15T16:16:10.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:16:10.834 [DEBUG] [Thread-21938] [transport.py] [_log()] starting thread (client mode): 0xf17c3b80
2026-04-15T16:16:10.834 [DEBUG] [Thread-21938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:16:10.856 [DEBUG] [Thread-21938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:16:10.856 [INFO] [Thread-21938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:16:10.860 [DEBUG] [Thread-21938] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:16:10.860 [DEBUG] [Thread-21938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:16:10.860 [DEBUG] [Thread-21938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:16:10.860 [DEBUG] [Thread-21938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:16:10.861 [DEBUG] [Thread-21938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:16:10.861 [DEBUG] [Thread-21938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:16:10.861 [DEBUG] [Thread-21938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:16:10.861 [DEBUG] [Thread-21938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:16:10.861 [DEBUG] [Thread-21938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:16:10.861 [DEBUG] [Thread-21938] [transport.py] [_log()] client lang: <none>
2026-04-15T16:16:10.861 [DEBUG] [Thread-21938] [transport.py] [_log()] server lang: <none>
2026-04-15T16:16:10.861 [DEBUG] [Thread-21938] [transport.py] [_log()] kex follows: False
2026-04-15T16:16:10.861 [DEBUG] [Thread-21938] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:16:10.861 [DEBUG] [Thread-21938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:16:10.861 [DEBUG] [Thread-21938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:16:10.862 [DEBUG] [Thread-21938] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:16:10.862 [DEBUG] [Thread-21938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:16:10.862 [DEBUG] [Thread-21938] [transport.py] [_log()] Compression: none
2026-04-15T16:16:10.862 [DEBUG] [Thread-21938] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:16:10.878 [DEBUG] [Thread-21938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:16:10.879 [DEBUG] [Thread-21938] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:16:10.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:16:10.880 [DEBUG] [Thread-21938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:16:10.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:16:10.880 [DEBUG] [Thread-21938] [transport.py] [_log()] userauth is OK
2026-04-15T16:16:10.881 [DEBUG] [Thread-21938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:16:10.881 [DEBUG] [Thread-21938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:16:10.881 [DEBUG] [Thread-21938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:16:10.881 [DEBUG] [Thread-21938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:16:10.905 [INFO] [Thread-21938] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:16:10.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:16:10.964 [DEBUG] [Thread-21940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:16:11.728 [DEBUG] [Thread-21938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:16:11.728 [DEBUG] [Thread-21938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:16:11.728 [DEBUG] [Thread-21938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:16:11.768 [DEBUG] [Thread-21938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:16:11.768 [DEBUG] [Thread-21938] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:16:11.771 [DEBUG] [Thread-21938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:16:11.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:16:11.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:16:11.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:16:11.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:16:11.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:16:11.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:16:11.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:16:11.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:16:11.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:16:11.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.594233 -999.00  +14.20  11.94     59   +6.50 1 1 1 1 1   887    0 7.26 -17.45 ----- 14.5 11.9 308.6 16.1 19.0 -25.4 18.4 -24.4 19.3 -22.0 20.1 -23.5
2026-04-15T16:16:11.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:16:11.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:16:11.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.594233
2026-04-15T16:16:11.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:16:11.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:16:11.798 [DEBUG] [Thread-21938] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:16:11.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:16:11.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:16:11.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:16:11.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:15:59', tmtdew=9.80762, humidity=51.5453, cloud=0.0, wind=15.9689, temperature=14.4032, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:15:41.731', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:16:12.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:16:12.058 [DEBUG] [Thread-21942] [transport.py] [_log()] starting thread (client mode): 0xee9269e0
2026-04-15T16:16:12.058 [DEBUG] [Thread-21942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:16:12.071 [DEBUG] [Thread-21942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:16:12.071 [INFO] [Thread-21942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:16:12.079 [DEBUG] [Thread-21942] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:16:12.079 [DEBUG] [Thread-21942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:16:12.079 [DEBUG] [Thread-21942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:16:12.079 [DEBUG] [Thread-21942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:16:12.079 [DEBUG] [Thread-21942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:16:12.079 [DEBUG] [Thread-21942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:16:12.079 [DEBUG] [Thread-21942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:16:12.079 [DEBUG] [Thread-21942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:16:12.079 [DEBUG] [Thread-21942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:16:12.079 [DEBUG] [Thread-21942] [transport.py] [_log()] client lang: <none>
2026-04-15T16:16:12.079 [DEBUG] [Thread-21942] [transport.py] [_log()] server lang: <none>
2026-04-15T16:16:12.080 [DEBUG] [Thread-21942] [transport.py] [_log()] kex follows: False
2026-04-15T16:16:12.080 [DEBUG] [Thread-21942] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:16:12.080 [DEBUG] [Thread-21942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:16:12.080 [DEBUG] [Thread-21942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:16:12.080 [DEBUG] [Thread-21942] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:16:12.080 [DEBUG] [Thread-21942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:16:12.080 [DEBUG] [Thread-21942] [transport.py] [_log()] Compression: none
2026-04-15T16:16:12.080 [DEBUG] [Thread-21942] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:16:12.136 [DEBUG] [Thread-21942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:16:12.136 [DEBUG] [Thread-21942] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:16:12.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:16:12.137 [DEBUG] [Thread-21942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:16:12.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:16:12.198 [DEBUG] [Thread-21942] [transport.py] [_log()] userauth is OK
2026-04-15T16:16:12.198 [DEBUG] [Thread-21942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:16:12.198 [DEBUG] [Thread-21942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:16:12.198 [DEBUG] [Thread-21942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:16:12.198 [DEBUG] [Thread-21942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:16:12.225 [INFO] [Thread-21942] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:16:12.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:16:12.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:16:13.067 [DEBUG] [Thread-21942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:16:13.068 [DEBUG] [Thread-21942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:16:13.116 [DEBUG] [Thread-21942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:16:13.116 [DEBUG] [Thread-21942] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:16:13.125 [DEBUG] [Thread-21942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:16:13.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:16:13.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')
2026-04-15T16:16:13.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') -> 00000000
2026-04-15T16:16:13.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:16:13.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:16:13.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:16:13.160 [DEBUG] [Thread-21942] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:16:18.647 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:16:18.648 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:16:25.995 [DEBUG] [Thread-21944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:16:36.556 [DEBUG] [Thread-21945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:16:41.039 [DEBUG] [Thread-21946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:16:43.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:16:43.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:16:43.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
2026-04-15T16:16:44.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 16, 35), 10.1033, 50.8587, 0.0, 13.7981, 15.3045, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:16:44.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:16:35
2026-04-15T16:16:44.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:16:45.299 [DEBUG] [Thread-21947] [transport.py] [_log()] starting thread (client mode): 0xee9ae800
2026-04-15T16:16:45.299 [DEBUG] [Thread-21947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:16:45.321 [DEBUG] [Thread-21947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:16:45.321 [INFO] [Thread-21947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:16:45.323 [DEBUG] [Thread-21947] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:16:45.323 [DEBUG] [Thread-21947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:16:45.323 [DEBUG] [Thread-21947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:16:45.323 [DEBUG] [Thread-21947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:16:45.323 [DEBUG] [Thread-21947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:16:45.323 [DEBUG] [Thread-21947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:16:45.323 [DEBUG] [Thread-21947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:16:45.323 [DEBUG] [Thread-21947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:16:45.324 [DEBUG] [Thread-21947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:16:45.324 [DEBUG] [Thread-21947] [transport.py] [_log()] client lang: <none>
2026-04-15T16:16:45.324 [DEBUG] [Thread-21947] [transport.py] [_log()] server lang: <none>
2026-04-15T16:16:45.324 [DEBUG] [Thread-21947] [transport.py] [_log()] kex follows: False
2026-04-15T16:16:45.324 [DEBUG] [Thread-21947] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:16:45.324 [DEBUG] [Thread-21947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:16:45.324 [DEBUG] [Thread-21947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:16:45.324 [DEBUG] [Thread-21947] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:16:45.324 [DEBUG] [Thread-21947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:16:45.324 [DEBUG] [Thread-21947] [transport.py] [_log()] Compression: none
2026-04-15T16:16:45.324 [DEBUG] [Thread-21947] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:16:45.332 [DEBUG] [Thread-21947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:16:45.333 [DEBUG] [Thread-21947] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:16:45.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:16:45.333 [DEBUG] [Thread-21947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:16:45.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:16:45.334 [DEBUG] [Thread-21947] [transport.py] [_log()] userauth is OK
2026-04-15T16:16:45.335 [DEBUG] [Thread-21947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:16:45.335 [DEBUG] [Thread-21947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:16:45.335 [DEBUG] [Thread-21947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:16:45.335 [DEBUG] [Thread-21947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:16:45.357 [INFO] [Thread-21947] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:16:45.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:16:46.493 [DEBUG] [Thread-21947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:16:46.493 [DEBUG] [Thread-21947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:16:46.494 [DEBUG] [Thread-21947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:16:46.534 [DEBUG] [Thread-21947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:16:46.535 [DEBUG] [Thread-21947] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:16:46.537 [DEBUG] [Thread-21947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:16:46.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:16:46.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:16:46.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:16:46.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:16:46.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:16:46.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:16:46.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:16:46.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:16:46.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:16:46.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.594580 -999.00  +14.30  11.35     58   +6.20 1 1 1 1 1   887    0 7.22 -13.93 ----- 10.8 11.3 338.6 16.4 19.1 -25.6 18.4 -25.2 19.4 -23.2 20.2 -23.7
2026-04-15T16:16:46.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:16:46.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:16:46.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.594580
2026-04-15T16:16:46.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:16:46.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:16:46.555 [DEBUG] [Thread-21947] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:16:46.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:16:46.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:16:46.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:16:46.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:16:35', tmtdew=10.1033, humidity=50.8587, cloud=0.0, wind=13.7981, temperature=15.3045, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:16:11.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:16:46.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:16:46.767 [DEBUG] [Thread-21950] [transport.py] [_log()] starting thread (client mode): 0xf17c21d0
2026-04-15T16:16:46.767 [DEBUG] [Thread-21950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:16:46.781 [DEBUG] [Thread-21950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:16:46.781 [INFO] [Thread-21950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:16:46.788 [DEBUG] [Thread-21950] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:16:46.788 [DEBUG] [Thread-21950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] client lang: <none>
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] server lang: <none>
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] kex follows: False
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] Compression: none
2026-04-15T16:16:46.789 [DEBUG] [Thread-21950] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:16:46.844 [DEBUG] [Thread-21950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:16:46.844 [DEBUG] [Thread-21950] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:16:46.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:16:46.845 [DEBUG] [Thread-21950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:16:46.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:16:46.901 [DEBUG] [Thread-21950] [transport.py] [_log()] userauth is OK
2026-04-15T16:16:46.901 [DEBUG] [Thread-21950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:16:46.901 [DEBUG] [Thread-21950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:16:46.901 [DEBUG] [Thread-21950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:16:46.902 [DEBUG] [Thread-21950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:16:46.918 [INFO] [Thread-21950] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:16:46.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:16:46.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:16:47.739 [DEBUG] [Thread-21950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:16:47.740 [DEBUG] [Thread-21950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:16:47.787 [DEBUG] [Thread-21950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:16:47.787 [DEBUG] [Thread-21950] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:16:47.797 [DEBUG] [Thread-21950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:16:47.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:16:47.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')
2026-04-15T16:16:47.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
2026-04-15T16:16:47.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:16:47.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:16:47.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:16:47.839 [DEBUG] [Thread-21950] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:16:56.072 [DEBUG] [Thread-21952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:17:11.116 [DEBUG] [Thread-21953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:17:17.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:17:17.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:17:17.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
2026-04-15T16:17:18.790 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:17:18.791 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:17:19.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 17, 11), 9.72974, 51.8302, 0.0, 19.2859, 14.7026, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:17:19.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:17:11
2026-04-15T16:17:19.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:17:20.015 [DEBUG] [Thread-21954] [transport.py] [_log()] starting thread (client mode): 0xf1330430
2026-04-15T16:17:20.015 [DEBUG] [Thread-21954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:17:20.032 [DEBUG] [Thread-21954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:17:20.033 [INFO] [Thread-21954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:17:20.036 [DEBUG] [Thread-21954] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:17:20.036 [DEBUG] [Thread-21954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:17:20.036 [DEBUG] [Thread-21954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:17:20.036 [DEBUG] [Thread-21954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:17:20.036 [DEBUG] [Thread-21954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:17:20.036 [DEBUG] [Thread-21954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:17:20.036 [DEBUG] [Thread-21954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:17:20.036 [DEBUG] [Thread-21954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:17:20.036 [DEBUG] [Thread-21954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:17:20.036 [DEBUG] [Thread-21954] [transport.py] [_log()] client lang: <none>
2026-04-15T16:17:20.037 [DEBUG] [Thread-21954] [transport.py] [_log()] server lang: <none>
2026-04-15T16:17:20.037 [DEBUG] [Thread-21954] [transport.py] [_log()] kex follows: False
2026-04-15T16:17:20.037 [DEBUG] [Thread-21954] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:17:20.037 [DEBUG] [Thread-21954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:17:20.037 [DEBUG] [Thread-21954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:17:20.037 [DEBUG] [Thread-21954] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:17:20.037 [DEBUG] [Thread-21954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:17:20.037 [DEBUG] [Thread-21954] [transport.py] [_log()] Compression: none
2026-04-15T16:17:20.037 [DEBUG] [Thread-21954] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:17:20.054 [DEBUG] [Thread-21954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:17:20.054 [DEBUG] [Thread-21954] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:17:20.055 [DEBUG] [Thread-21954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:17:20.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:17:20.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:17:20.056 [DEBUG] [Thread-21954] [transport.py] [_log()] userauth is OK
2026-04-15T16:17:20.056 [DEBUG] [Thread-21954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:17:20.056 [DEBUG] [Thread-21954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:17:20.056 [DEBUG] [Thread-21954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:17:20.056 [DEBUG] [Thread-21954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:17:20.073 [INFO] [Thread-21954] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:17:20.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:17:20.864 [DEBUG] [Thread-21954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:17:20.864 [DEBUG] [Thread-21954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:17:20.865 [DEBUG] [Thread-21954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:17:20.905 [DEBUG] [Thread-21954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:17:20.905 [DEBUG] [Thread-21954] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:17:20.908 [DEBUG] [Thread-21954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:17:20.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:17:20.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:17:20.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:17:20.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:17:20.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:17:20.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:17:20.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:17:20.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:17:20.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:17:20.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.594927 -999.00  +14.50  14.38     59   +6.60 1 1 1 1 1   887    0 7.21 -11.52 ----- 19.1 14.4 21.8 20.2 19.1 -26.2 18.5 -24.7 19.4 -22.7 20.3 -24.2
2026-04-15T16:17:20.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:17:20.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:17:20.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.594927
2026-04-15T16:17:20.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:17:20.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:17:20.929 [DEBUG] [Thread-21954] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:17:20.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:17:20.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:17:20.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:17:20.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:17:11', tmtdew=9.72974, humidity=51.8302, cloud=0.0, wind=19.2859, temperature=14.7026, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:16:41.693', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:17:21.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:17:21.173 [DEBUG] [Thread-21957] [transport.py] [_log()] starting thread (client mode): 0xf1331b10
2026-04-15T16:17:21.174 [DEBUG] [Thread-21957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:17:21.188 [DEBUG] [Thread-21957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:17:21.188 [INFO] [Thread-21957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:17:21.195 [DEBUG] [Thread-21957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:17:21.196 [DEBUG] [Thread-21957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:17:21.196 [DEBUG] [Thread-21957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:17:21.196 [DEBUG] [Thread-21957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:17:21.196 [DEBUG] [Thread-21957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:17:21.196 [DEBUG] [Thread-21957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:17:21.196 [DEBUG] [Thread-21957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:17:21.196 [DEBUG] [Thread-21957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:17:21.196 [DEBUG] [Thread-21957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:17:21.196 [DEBUG] [Thread-21957] [transport.py] [_log()] client lang: <none>
2026-04-15T16:17:21.196 [DEBUG] [Thread-21957] [transport.py] [_log()] server lang: <none>
2026-04-15T16:17:21.196 [DEBUG] [Thread-21957] [transport.py] [_log()] kex follows: False
2026-04-15T16:17:21.196 [DEBUG] [Thread-21957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:17:21.197 [DEBUG] [Thread-21957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:17:21.197 [DEBUG] [Thread-21957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:17:21.197 [DEBUG] [Thread-21957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:17:21.197 [DEBUG] [Thread-21957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:17:21.197 [DEBUG] [Thread-21957] [transport.py] [_log()] Compression: none
2026-04-15T16:17:21.197 [DEBUG] [Thread-21957] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:17:21.262 [DEBUG] [Thread-21957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:17:21.262 [DEBUG] [Thread-21957] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:17:21.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:17:21.263 [DEBUG] [Thread-21957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:17:21.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:17:21.318 [DEBUG] [Thread-21957] [transport.py] [_log()] userauth is OK
2026-04-15T16:17:21.318 [DEBUG] [Thread-21957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:17:21.318 [DEBUG] [Thread-21957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:17:21.318 [DEBUG] [Thread-21957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:17:21.318 [DEBUG] [Thread-21957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:17:21.336 [INFO] [Thread-21957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:17:21.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:17:21.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:17:22.145 [DEBUG] [Thread-21957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:17:22.145 [DEBUG] [Thread-21957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:17:22.193 [DEBUG] [Thread-21957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:17:22.193 [DEBUG] [Thread-21957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:17:22.202 [DEBUG] [Thread-21957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:17:22.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:17:22.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')
2026-04-15T16:17:22.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') -> 00000000
2026-04-15T16:17:22.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:17:22.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:17:22.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:17:22.236 [DEBUG] [Thread-21957] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:17:26.147 [DEBUG] [Thread-21959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:17:36.648 [DEBUG] [Thread-21960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:17:41.190 [DEBUG] [Thread-21961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:17:52.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:17:52.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:17:52.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
2026-04-15T16:17:53.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 17, 11), 9.72974, 51.8302, 0.0, 19.2859, 14.7026, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:17:53.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:17:11
2026-04-15T16:17:54.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:17:54.458 [DEBUG] [Thread-21962] [transport.py] [_log()] starting thread (client mode): 0xf17c3790
2026-04-15T16:17:54.459 [DEBUG] [Thread-21962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:17:54.480 [DEBUG] [Thread-21962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:17:54.480 [INFO] [Thread-21962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:17:54.483 [DEBUG] [Thread-21962] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:17:54.483 [DEBUG] [Thread-21962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:17:54.483 [DEBUG] [Thread-21962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:17:54.483 [DEBUG] [Thread-21962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:17:54.483 [DEBUG] [Thread-21962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:17:54.483 [DEBUG] [Thread-21962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:17:54.483 [DEBUG] [Thread-21962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:17:54.483 [DEBUG] [Thread-21962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:17:54.483 [DEBUG] [Thread-21962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:17:54.483 [DEBUG] [Thread-21962] [transport.py] [_log()] client lang: <none>
2026-04-15T16:17:54.484 [DEBUG] [Thread-21962] [transport.py] [_log()] server lang: <none>
2026-04-15T16:17:54.484 [DEBUG] [Thread-21962] [transport.py] [_log()] kex follows: False
2026-04-15T16:17:54.484 [DEBUG] [Thread-21962] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:17:54.484 [DEBUG] [Thread-21962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:17:54.484 [DEBUG] [Thread-21962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:17:54.484 [DEBUG] [Thread-21962] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:17:54.484 [DEBUG] [Thread-21962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:17:54.484 [DEBUG] [Thread-21962] [transport.py] [_log()] Compression: none
2026-04-15T16:17:54.484 [DEBUG] [Thread-21962] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:17:54.502 [DEBUG] [Thread-21962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:17:54.502 [DEBUG] [Thread-21962] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:17:54.503 [DEBUG] [Thread-21962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:17:54.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:17:54.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:17:54.504 [DEBUG] [Thread-21962] [transport.py] [_log()] userauth is OK
2026-04-15T16:17:54.504 [DEBUG] [Thread-21962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:17:54.504 [DEBUG] [Thread-21962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:17:54.504 [DEBUG] [Thread-21962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:17:54.504 [DEBUG] [Thread-21962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:17:54.520 [INFO] [Thread-21962] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:17:54.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:17:55.332 [DEBUG] [Thread-21962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:17:55.333 [DEBUG] [Thread-21962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:17:55.333 [DEBUG] [Thread-21962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:17:55.373 [DEBUG] [Thread-21962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:17:55.373 [DEBUG] [Thread-21962] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:17:55.376 [DEBUG] [Thread-21962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:17:55.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:17:55.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:17:55.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:17:55.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:17:55.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:17:55.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:17:55.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:17:55.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:17:55.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:17:55.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.595275 -999.00  +14.50  14.01     57   +6.30 1 1 1 1 1   887    0 7.44 -5.67 ----- 18.0 14.0 325.8 22.4 19.2 -26.0 18.5 -25.6 19.6 -23.1 20.4 -24.6
2026-04-15T16:17:55.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:17:55.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:17:55.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.595275
2026-04-15T16:17:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:17:55.404 [DEBUG] [Thread-21962] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:17:55.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:17:55.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:17:55.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:17:55.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:17:55.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:17:11', tmtdew=9.72974, humidity=51.8302, cloud=0.0, wind=19.2859, temperature=14.7026, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:17:11.760', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:17:55.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:17:55.671 [DEBUG] [Thread-21965] [transport.py] [_log()] starting thread (client mode): 0xf17c2b60
2026-04-15T16:17:55.671 [DEBUG] [Thread-21965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:17:55.685 [DEBUG] [Thread-21965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:17:55.685 [INFO] [Thread-21965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:17:55.692 [DEBUG] [Thread-21965] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:17:55.693 [DEBUG] [Thread-21965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:17:55.693 [DEBUG] [Thread-21965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:17:55.693 [DEBUG] [Thread-21965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:17:55.693 [DEBUG] [Thread-21965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:17:55.693 [DEBUG] [Thread-21965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:17:55.693 [DEBUG] [Thread-21965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:17:55.693 [DEBUG] [Thread-21965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:17:55.693 [DEBUG] [Thread-21965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:17:55.693 [DEBUG] [Thread-21965] [transport.py] [_log()] client lang: <none>
2026-04-15T16:17:55.693 [DEBUG] [Thread-21965] [transport.py] [_log()] server lang: <none>
2026-04-15T16:17:55.693 [DEBUG] [Thread-21965] [transport.py] [_log()] kex follows: False
2026-04-15T16:17:55.693 [DEBUG] [Thread-21965] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:17:55.694 [DEBUG] [Thread-21965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:17:55.694 [DEBUG] [Thread-21965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:17:55.694 [DEBUG] [Thread-21965] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:17:55.694 [DEBUG] [Thread-21965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:17:55.694 [DEBUG] [Thread-21965] [transport.py] [_log()] Compression: none
2026-04-15T16:17:55.694 [DEBUG] [Thread-21965] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:17:55.750 [DEBUG] [Thread-21965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:17:55.751 [DEBUG] [Thread-21965] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:17:55.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:17:55.751 [DEBUG] [Thread-21965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:17:55.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:17:55.807 [DEBUG] [Thread-21965] [transport.py] [_log()] userauth is OK
2026-04-15T16:17:55.807 [DEBUG] [Thread-21965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:17:55.807 [DEBUG] [Thread-21965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:17:55.807 [DEBUG] [Thread-21965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:17:55.807 [DEBUG] [Thread-21965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:17:55.832 [INFO] [Thread-21965] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:17:55.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:17:55.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:17:56.219 [DEBUG] [Thread-21967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:17:56.665 [DEBUG] [Thread-21965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:17:56.665 [DEBUG] [Thread-21965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:17:56.712 [DEBUG] [Thread-21965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:17:56.712 [DEBUG] [Thread-21965] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:17:56.720 [DEBUG] [Thread-21965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:17:56.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:17: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')
2026-04-15T16:17: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
2026-04-15T16:17:56.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:17:56.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:17:56.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:17:56.752 [DEBUG] [Thread-21965] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:18:11.256 [DEBUG] [Thread-21968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:18:18.931 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:18:18.932 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:18:26.287 [DEBUG] [Thread-21969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:18:26.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:18:26.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:18:26.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
2026-04-15T16:18:28.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 17, 47), 10.3546, 49.9315, 0.0, 20.1485, 15.1396, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:18:28.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:17:47
2026-04-15T16:18:28.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:18:29.105 [DEBUG] [Thread-21970] [transport.py] [_log()] starting thread (client mode): 0xf17c1660
2026-04-15T16:18:29.105 [DEBUG] [Thread-21970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:18:29.124 [DEBUG] [Thread-21970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:18:29.124 [INFO] [Thread-21970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:18:29.127 [DEBUG] [Thread-21970] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:18:29.128 [DEBUG] [Thread-21970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:18:29.128 [DEBUG] [Thread-21970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:18:29.128 [DEBUG] [Thread-21970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:18:29.128 [DEBUG] [Thread-21970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:18:29.128 [DEBUG] [Thread-21970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:18:29.128 [DEBUG] [Thread-21970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:18:29.128 [DEBUG] [Thread-21970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:18:29.128 [DEBUG] [Thread-21970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:18:29.128 [DEBUG] [Thread-21970] [transport.py] [_log()] client lang: <none>
2026-04-15T16:18:29.128 [DEBUG] [Thread-21970] [transport.py] [_log()] server lang: <none>
2026-04-15T16:18:29.129 [DEBUG] [Thread-21970] [transport.py] [_log()] kex follows: False
2026-04-15T16:18:29.129 [DEBUG] [Thread-21970] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:18:29.129 [DEBUG] [Thread-21970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:18:29.129 [DEBUG] [Thread-21970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:18:29.129 [DEBUG] [Thread-21970] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:18:29.129 [DEBUG] [Thread-21970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:18:29.129 [DEBUG] [Thread-21970] [transport.py] [_log()] Compression: none
2026-04-15T16:18:29.129 [DEBUG] [Thread-21970] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:18:29.145 [DEBUG] [Thread-21970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:18:29.146 [DEBUG] [Thread-21970] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:18:29.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:18:29.147 [DEBUG] [Thread-21970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:18:29.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:18:29.190 [DEBUG] [Thread-21970] [transport.py] [_log()] userauth is OK
2026-04-15T16:18:29.190 [DEBUG] [Thread-21970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:18:29.190 [DEBUG] [Thread-21970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:18:29.190 [DEBUG] [Thread-21970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:18:29.190 [DEBUG] [Thread-21970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:18:29.226 [INFO] [Thread-21970] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:18:29.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:18:30.026 [DEBUG] [Thread-21970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:18:30.026 [DEBUG] [Thread-21970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:18:30.026 [DEBUG] [Thread-21970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:18:30.067 [DEBUG] [Thread-21970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:18:30.067 [DEBUG] [Thread-21970] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:18:30.070 [DEBUG] [Thread-21970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:18:30.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:18:30.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:18:30.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:18:30.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:18:30.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:18:30.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:18:30.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:18:30.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:18:30.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:18:30.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.595622 -999.00  +14.60  14.66     58   +6.50 1 1 1 1 1   887    0 7.66 -0.01 ----- 9.2 14.7 333.6 23.1 19.2 -26.5 18.5 -25.5 19.6 -23.7 20.4 -25.0
2026-04-15T16:18:30.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:18:30.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:18:30.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.595622
2026-04-15T16:18:30.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:18:30.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:18:30.097 [DEBUG] [Thread-21970] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:18:30.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:18:30.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:18:30.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:18:30.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:17:47', tmtdew=10.3546, humidity=49.9315, cloud=0.0, wind=20.1485, temperature=15.1396, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:17:41.741', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:18:30.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:18:30.356 [DEBUG] [Thread-21973] [transport.py] [_log()] starting thread (client mode): 0xee9ae410
2026-04-15T16:18:30.356 [DEBUG] [Thread-21973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:18:30.372 [DEBUG] [Thread-21973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:18:30.372 [INFO] [Thread-21973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:18:30.380 [DEBUG] [Thread-21973] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:18:30.380 [DEBUG] [Thread-21973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:18:30.380 [DEBUG] [Thread-21973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:18:30.380 [DEBUG] [Thread-21973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:18:30.380 [DEBUG] [Thread-21973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:18:30.380 [DEBUG] [Thread-21973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:18:30.380 [DEBUG] [Thread-21973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:18:30.380 [DEBUG] [Thread-21973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:18:30.380 [DEBUG] [Thread-21973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:18:30.380 [DEBUG] [Thread-21973] [transport.py] [_log()] client lang: <none>
2026-04-15T16:18:30.380 [DEBUG] [Thread-21973] [transport.py] [_log()] server lang: <none>
2026-04-15T16:18:30.381 [DEBUG] [Thread-21973] [transport.py] [_log()] kex follows: False
2026-04-15T16:18:30.381 [DEBUG] [Thread-21973] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:18:30.381 [DEBUG] [Thread-21973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:18:30.381 [DEBUG] [Thread-21973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:18:30.381 [DEBUG] [Thread-21973] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:18:30.381 [DEBUG] [Thread-21973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:18:30.381 [DEBUG] [Thread-21973] [transport.py] [_log()] Compression: none
2026-04-15T16:18:30.381 [DEBUG] [Thread-21973] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:18:30.438 [DEBUG] [Thread-21973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:18:30.439 [DEBUG] [Thread-21973] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:18:30.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:18:30.440 [DEBUG] [Thread-21973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:18:30.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:18:30.495 [DEBUG] [Thread-21973] [transport.py] [_log()] userauth is OK
2026-04-15T16:18:30.496 [DEBUG] [Thread-21973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:18:30.496 [DEBUG] [Thread-21973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:18:30.496 [DEBUG] [Thread-21973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:18:30.496 [DEBUG] [Thread-21973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:18:30.525 [INFO] [Thread-21973] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:18:30.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:18:30.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:18:31.366 [DEBUG] [Thread-21973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:18:31.366 [DEBUG] [Thread-21973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:18:31.414 [DEBUG] [Thread-21973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:18:31.414 [DEBUG] [Thread-21973] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:18:31.423 [DEBUG] [Thread-21973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:18:31.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:18:31.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')
2026-04-15T16:18:31.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
2026-04-15T16:18:31.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:18:31.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:18:31.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:18:31.459 [DEBUG] [Thread-21973] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:18:36.730 [DEBUG] [Thread-21975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:18:41.317 [DEBUG] [Thread-21976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:18:56.358 [DEBUG] [Thread-21977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:19:01.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:19:01.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:19:01.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
2026-04-15T16:19:02.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 18, 23), 9.78747, 51.7805, 0.0, 17.2735, 14.8698, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:19:02.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:18:23
2026-04-15T16:19:03.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:19:03.671 [DEBUG] [Thread-21978] [transport.py] [_log()] starting thread (client mode): 0xee90dff0
2026-04-15T16:19:03.672 [DEBUG] [Thread-21978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:19:03.691 [DEBUG] [Thread-21978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:19:03.691 [INFO] [Thread-21978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:19:03.692 [DEBUG] [Thread-21978] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:19:03.692 [DEBUG] [Thread-21978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:19:03.692 [DEBUG] [Thread-21978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:19:03.693 [DEBUG] [Thread-21978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:19:03.693 [DEBUG] [Thread-21978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:19:03.693 [DEBUG] [Thread-21978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:19:03.693 [DEBUG] [Thread-21978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:19:03.693 [DEBUG] [Thread-21978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:19:03.693 [DEBUG] [Thread-21978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:19:03.693 [DEBUG] [Thread-21978] [transport.py] [_log()] client lang: <none>
2026-04-15T16:19:03.693 [DEBUG] [Thread-21978] [transport.py] [_log()] server lang: <none>
2026-04-15T16:19:03.693 [DEBUG] [Thread-21978] [transport.py] [_log()] kex follows: False
2026-04-15T16:19:03.693 [DEBUG] [Thread-21978] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:19:03.693 [DEBUG] [Thread-21978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:19:03.693 [DEBUG] [Thread-21978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:19:03.694 [DEBUG] [Thread-21978] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:19:03.694 [DEBUG] [Thread-21978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:19:03.694 [DEBUG] [Thread-21978] [transport.py] [_log()] Compression: none
2026-04-15T16:19:03.694 [DEBUG] [Thread-21978] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:19:03.702 [DEBUG] [Thread-21978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:19:03.703 [DEBUG] [Thread-21978] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:19:03.703 [DEBUG] [Thread-21978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:19:03.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:19:03.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:19:03.704 [DEBUG] [Thread-21978] [transport.py] [_log()] userauth is OK
2026-04-15T16:19:03.705 [DEBUG] [Thread-21978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:19:03.705 [DEBUG] [Thread-21978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:19:03.705 [DEBUG] [Thread-21978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:19:03.705 [DEBUG] [Thread-21978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:19:03.723 [INFO] [Thread-21978] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:19:03.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:19:04.534 [DEBUG] [Thread-21978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:19:04.534 [DEBUG] [Thread-21978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:19:04.535 [DEBUG] [Thread-21978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:19:04.575 [DEBUG] [Thread-21978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:19:04.575 [DEBUG] [Thread-21978] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:19:04.578 [DEBUG] [Thread-21978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:19:04.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:19:04.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:19:04.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:19:04.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:19:04.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:19:04.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:19:04.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:19:04.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:19:04.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:19:04.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.595969 -999.00  +14.80  23.51     57   +6.30 1 1 1 1 1   887    0 7.91 6.35 ----- 20.7 23.5 326.4 24.4 19.2 -26.5 18.6 -26.5 19.6 -24.3 20.4 -25.2
2026-04-15T16:19:04.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:19:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:19:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.595969
2026-04-15T16:19:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:19:04.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:19:04.601 [DEBUG] [Thread-21978] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:19:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:19:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:19:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:19:04.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:18:23', tmtdew=9.78747, humidity=51.7805, cloud=0.0, wind=17.2735, temperature=14.8698, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:18:11.722', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:19:04.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:19:04.864 [DEBUG] [Thread-21981] [transport.py] [_log()] starting thread (client mode): 0xee9bcdf0
2026-04-15T16:19:04.864 [DEBUG] [Thread-21981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:19:04.878 [DEBUG] [Thread-21981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:19:04.878 [INFO] [Thread-21981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:19:04.887 [DEBUG] [Thread-21981] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:19:04.887 [DEBUG] [Thread-21981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:19:04.887 [DEBUG] [Thread-21981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:19:04.887 [DEBUG] [Thread-21981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:19:04.887 [DEBUG] [Thread-21981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:19:04.887 [DEBUG] [Thread-21981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:19:04.887 [DEBUG] [Thread-21981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:19:04.887 [DEBUG] [Thread-21981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:19:04.887 [DEBUG] [Thread-21981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:19:04.887 [DEBUG] [Thread-21981] [transport.py] [_log()] client lang: <none>
2026-04-15T16:19:04.888 [DEBUG] [Thread-21981] [transport.py] [_log()] server lang: <none>
2026-04-15T16:19:04.888 [DEBUG] [Thread-21981] [transport.py] [_log()] kex follows: False
2026-04-15T16:19:04.888 [DEBUG] [Thread-21981] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:19:04.888 [DEBUG] [Thread-21981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:19:04.888 [DEBUG] [Thread-21981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:19:04.888 [DEBUG] [Thread-21981] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:19:04.888 [DEBUG] [Thread-21981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:19:04.888 [DEBUG] [Thread-21981] [transport.py] [_log()] Compression: none
2026-04-15T16:19:04.888 [DEBUG] [Thread-21981] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:19:04.949 [DEBUG] [Thread-21981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:19:04.950 [DEBUG] [Thread-21981] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:19:04.950 [DEBUG] [Thread-21981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:19:04.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:19:04.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:19:05.012 [DEBUG] [Thread-21981] [transport.py] [_log()] userauth is OK
2026-04-15T16:19:05.012 [DEBUG] [Thread-21981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:19:05.012 [DEBUG] [Thread-21981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:19:05.013 [DEBUG] [Thread-21981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:19:05.013 [DEBUG] [Thread-21981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:19:05.041 [INFO] [Thread-21981] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:19:05.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:19:05.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:19:05.878 [DEBUG] [Thread-21981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:19:05.878 [DEBUG] [Thread-21981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:19:05.930 [DEBUG] [Thread-21981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:19:05.930 [DEBUG] [Thread-21981] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:19:05.941 [DEBUG] [Thread-21981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:19:05.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:19:05.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')
2026-04-15T16:19:05.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
2026-04-15T16:19:05.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:19:05.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:19:05.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:19:05.986 [DEBUG] [Thread-21981] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:19:11.387 [DEBUG] [Thread-21983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:19:19.072 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:19:19.073 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:19:26.430 [DEBUG] [Thread-21984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:19:36.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:19:36.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:19:36.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
2026-04-15T16:19:36.817 [DEBUG] [Thread-21985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:19:37.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 18, 58), 10.123, 50.8137, 0.0, 18.6678, 14.6535, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:19:37.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:18:58
2026-04-15T16:19:37.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:19:38.278 [DEBUG] [Thread-21986] [transport.py] [_log()] starting thread (client mode): 0xee9bd960
2026-04-15T16:19:38.279 [DEBUG] [Thread-21986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:19:38.298 [DEBUG] [Thread-21986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:19:38.298 [INFO] [Thread-21986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:19:38.301 [DEBUG] [Thread-21986] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:19:38.301 [DEBUG] [Thread-21986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:19:38.301 [DEBUG] [Thread-21986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:19:38.301 [DEBUG] [Thread-21986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:19:38.302 [DEBUG] [Thread-21986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:19:38.302 [DEBUG] [Thread-21986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:19:38.302 [DEBUG] [Thread-21986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:19:38.302 [DEBUG] [Thread-21986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:19:38.302 [DEBUG] [Thread-21986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:19:38.302 [DEBUG] [Thread-21986] [transport.py] [_log()] client lang: <none>
2026-04-15T16:19:38.302 [DEBUG] [Thread-21986] [transport.py] [_log()] server lang: <none>
2026-04-15T16:19:38.302 [DEBUG] [Thread-21986] [transport.py] [_log()] kex follows: False
2026-04-15T16:19:38.302 [DEBUG] [Thread-21986] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:19:38.302 [DEBUG] [Thread-21986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:19:38.302 [DEBUG] [Thread-21986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:19:38.302 [DEBUG] [Thread-21986] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:19:38.302 [DEBUG] [Thread-21986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:19:38.302 [DEBUG] [Thread-21986] [transport.py] [_log()] Compression: none
2026-04-15T16:19:38.302 [DEBUG] [Thread-21986] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:19:38.319 [DEBUG] [Thread-21986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:19:38.319 [DEBUG] [Thread-21986] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:19:38.319 [DEBUG] [Thread-21986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:19:38.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:19:38.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:19:38.320 [DEBUG] [Thread-21986] [transport.py] [_log()] userauth is OK
2026-04-15T16:19:38.320 [DEBUG] [Thread-21986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:19:38.321 [DEBUG] [Thread-21986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:19:38.321 [DEBUG] [Thread-21986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:19:38.321 [DEBUG] [Thread-21986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:19:38.339 [INFO] [Thread-21986] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:19:38.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:19:39.120 [DEBUG] [Thread-21986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:19:39.121 [DEBUG] [Thread-21986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:19:39.121 [DEBUG] [Thread-21986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:19:39.161 [DEBUG] [Thread-21986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:19:39.161 [DEBUG] [Thread-21986] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:19:39.164 [DEBUG] [Thread-21986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:19:39.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:19:39.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:19:39.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:19:39.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:19:39.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:19:39.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:19:39.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:19:39.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:19:39.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:19:39.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.596316 -999.00  +14.30  23.70     57   +5.90 1 1 1 1 1   887    0 8.14 13.25 ----- 16.9 23.7 326.4 26.7 19.3 -27.6 18.6 -26.2 19.6 -24.1 20.5 -25.7
2026-04-15T16:19:39.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:19:39.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:19:39.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.596316
2026-04-15T16:19:39.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:19:39.191 [DEBUG] [Thread-21986] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:19:39.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:19:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:19:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:19:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:19:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:18:58', tmtdew=10.123, humidity=50.8137, cloud=0.0, wind=18.6678, temperature=14.6535, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:18:41.702', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:19:39.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:19:39.451 [DEBUG] [Thread-21989] [transport.py] [_log()] starting thread (client mode): 0xee9ae1a0
2026-04-15T16:19:39.451 [DEBUG] [Thread-21989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:19:39.465 [DEBUG] [Thread-21989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:19:39.465 [INFO] [Thread-21989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:19:39.473 [DEBUG] [Thread-21989] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:19:39.473 [DEBUG] [Thread-21989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:19:39.473 [DEBUG] [Thread-21989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:19:39.473 [DEBUG] [Thread-21989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:19:39.473 [DEBUG] [Thread-21989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:19:39.473 [DEBUG] [Thread-21989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:19:39.473 [DEBUG] [Thread-21989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:19:39.473 [DEBUG] [Thread-21989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:19:39.474 [DEBUG] [Thread-21989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:19:39.474 [DEBUG] [Thread-21989] [transport.py] [_log()] client lang: <none>
2026-04-15T16:19:39.474 [DEBUG] [Thread-21989] [transport.py] [_log()] server lang: <none>
2026-04-15T16:19:39.474 [DEBUG] [Thread-21989] [transport.py] [_log()] kex follows: False
2026-04-15T16:19:39.474 [DEBUG] [Thread-21989] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:19:39.474 [DEBUG] [Thread-21989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:19:39.474 [DEBUG] [Thread-21989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:19:39.474 [DEBUG] [Thread-21989] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:19:39.474 [DEBUG] [Thread-21989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:19:39.474 [DEBUG] [Thread-21989] [transport.py] [_log()] Compression: none
2026-04-15T16:19:39.474 [DEBUG] [Thread-21989] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:19:39.532 [DEBUG] [Thread-21989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:19:39.532 [DEBUG] [Thread-21989] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:19:39.532 [DEBUG] [Thread-21989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:19:39.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:19:39.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:19:39.588 [DEBUG] [Thread-21989] [transport.py] [_log()] userauth is OK
2026-04-15T16:19:39.589 [DEBUG] [Thread-21989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:19:39.589 [DEBUG] [Thread-21989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:19:39.589 [DEBUG] [Thread-21989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:19:39.589 [DEBUG] [Thread-21989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:19:39.611 [INFO] [Thread-21989] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:19:39.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:19:39.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:19:40.446 [DEBUG] [Thread-21989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:19:40.447 [DEBUG] [Thread-21989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:19:40.494 [DEBUG] [Thread-21989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:19:40.494 [DEBUG] [Thread-21989] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:19:40.503 [DEBUG] [Thread-21989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:19:40.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:19:40.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')
2026-04-15T16:19:40.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
2026-04-15T16:19:40.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:19:40.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:19:40.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:19:40.537 [DEBUG] [Thread-21989] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:19:41.459 [DEBUG] [Thread-21991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:19:56.501 [DEBUG] [Thread-21992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:20:10.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:20:10.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:20:10.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
2026-04-15T16:20:11.531 [DEBUG] [Thread-21993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:20:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 19, 34), 10.2623, 50.2633, 0.0, 22.9709, 15.1733, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:20:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:19:34
2026-04-15T16:20:12.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:20:12.756 [DEBUG] [Thread-21994] [transport.py] [_log()] starting thread (client mode): 0xf17c3130
2026-04-15T16:20:12.756 [DEBUG] [Thread-21994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:20:12.780 [DEBUG] [Thread-21994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:20:12.780 [INFO] [Thread-21994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:20:12.783 [DEBUG] [Thread-21994] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:20:12.783 [DEBUG] [Thread-21994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:20:12.783 [DEBUG] [Thread-21994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:20:12.783 [DEBUG] [Thread-21994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:20:12.783 [DEBUG] [Thread-21994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:20:12.784 [DEBUG] [Thread-21994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:20:12.784 [DEBUG] [Thread-21994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:20:12.784 [DEBUG] [Thread-21994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:20:12.784 [DEBUG] [Thread-21994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:20:12.784 [DEBUG] [Thread-21994] [transport.py] [_log()] client lang: <none>
2026-04-15T16:20:12.784 [DEBUG] [Thread-21994] [transport.py] [_log()] server lang: <none>
2026-04-15T16:20:12.784 [DEBUG] [Thread-21994] [transport.py] [_log()] kex follows: False
2026-04-15T16:20:12.784 [DEBUG] [Thread-21994] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:20:12.784 [DEBUG] [Thread-21994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:20:12.784 [DEBUG] [Thread-21994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:20:12.784 [DEBUG] [Thread-21994] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:20:12.785 [DEBUG] [Thread-21994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:20:12.785 [DEBUG] [Thread-21994] [transport.py] [_log()] Compression: none
2026-04-15T16:20:12.785 [DEBUG] [Thread-21994] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:20:12.803 [DEBUG] [Thread-21994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:20:12.803 [DEBUG] [Thread-21994] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:20:12.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:20:12.804 [DEBUG] [Thread-21994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:20:12.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:20:12.805 [DEBUG] [Thread-21994] [transport.py] [_log()] userauth is OK
2026-04-15T16:20:12.805 [DEBUG] [Thread-21994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:20:12.805 [DEBUG] [Thread-21994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:20:12.805 [DEBUG] [Thread-21994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:20:12.805 [DEBUG] [Thread-21994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:20:12.823 [INFO] [Thread-21994] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:20:12.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:20:15.634 [DEBUG] [Thread-21994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:20:15.634 [DEBUG] [Thread-21994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:20:15.635 [DEBUG] [Thread-21994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:20:15.675 [DEBUG] [Thread-21994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:20:15.675 [DEBUG] [Thread-21994] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:20:15.678 [DEBUG] [Thread-21994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:20:15.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:20:15.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:20:15.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:20:15.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:20:15.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:20:15.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:20:15.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:20:15.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:20:15.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:20:15.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.596663 -999.00  +14.70  12.95     58   +6.70 1 1 1 1 1   887    0 8.25 16.69 ----- 15.4 12.9 320.2 18.9 19.3 -27.1 18.7 -25.9 19.7 -24.0 20.6 -25.8
2026-04-15T16:20:15.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:20:15.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:20:15.734 [DEBUG] [Thread-21994] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:20:15.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.596663
2026-04-15T16:20:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:20:15.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:20:15.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:20:15.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:20:15.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:20:15.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:19:34', tmtdew=10.2623, humidity=50.2633, cloud=0.0, wind=22.9709, temperature=15.1733, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:19:11.683', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:20:15.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:20:15.997 [DEBUG] [Thread-21997] [transport.py] [_log()] starting thread (client mode): 0xee9af100
2026-04-15T16:20:15.997 [DEBUG] [Thread-21997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:20:16.012 [DEBUG] [Thread-21997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:20:16.012 [INFO] [Thread-21997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:20:16.019 [DEBUG] [Thread-21997] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:20:16.019 [DEBUG] [Thread-21997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:20:16.020 [DEBUG] [Thread-21997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:20:16.020 [DEBUG] [Thread-21997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:20:16.020 [DEBUG] [Thread-21997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:20:16.020 [DEBUG] [Thread-21997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:20:16.020 [DEBUG] [Thread-21997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:20:16.020 [DEBUG] [Thread-21997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:20:16.020 [DEBUG] [Thread-21997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:20:16.020 [DEBUG] [Thread-21997] [transport.py] [_log()] client lang: <none>
2026-04-15T16:20:16.020 [DEBUG] [Thread-21997] [transport.py] [_log()] server lang: <none>
2026-04-15T16:20:16.020 [DEBUG] [Thread-21997] [transport.py] [_log()] kex follows: False
2026-04-15T16:20:16.020 [DEBUG] [Thread-21997] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:20:16.020 [DEBUG] [Thread-21997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:20:16.021 [DEBUG] [Thread-21997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:20:16.021 [DEBUG] [Thread-21997] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:20:16.021 [DEBUG] [Thread-21997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:20:16.021 [DEBUG] [Thread-21997] [transport.py] [_log()] Compression: none
2026-04-15T16:20:16.021 [DEBUG] [Thread-21997] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:20:16.077 [DEBUG] [Thread-21997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:20:16.078 [DEBUG] [Thread-21997] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:20:16.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:20:16.078 [DEBUG] [Thread-21997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:20:16.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:20:16.133 [DEBUG] [Thread-21997] [transport.py] [_log()] userauth is OK
2026-04-15T16:20:16.133 [DEBUG] [Thread-21997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:20:16.133 [DEBUG] [Thread-21997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:20:16.133 [DEBUG] [Thread-21997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:20:16.134 [DEBUG] [Thread-21997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:20:16.163 [INFO] [Thread-21997] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:20:16.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:20:16.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:20:16.989 [DEBUG] [Thread-21997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:20:16.989 [DEBUG] [Thread-21997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:20:17.038 [DEBUG] [Thread-21997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:20:17.038 [DEBUG] [Thread-21997] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:20:17.047 [DEBUG] [Thread-21997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:20:17.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:20:17.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')
2026-04-15T16:20:17.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
2026-04-15T16:20:17.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:20:17.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:20:17.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:20:17.081 [DEBUG] [Thread-21997] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:20:19.212 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:20:19.213 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:20:26.562 [DEBUG] [Thread-21999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:20:36.892 [DEBUG] [Thread-22000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:20:41.606 [DEBUG] [Thread-22001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:20:47.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:20:47.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:20:47.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
2026-04-15T16:20:48.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 20, 10), 10.3114, 50.0021, 0.0, 20.0804, 14.5701, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:20:48.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:20:10
2026-04-15T16:20:48.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:20:49.376 [DEBUG] [Thread-22002] [transport.py] [_log()] starting thread (client mode): 0xee9bc5e0
2026-04-15T16:20:49.376 [DEBUG] [Thread-22002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:20:49.392 [DEBUG] [Thread-22002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:20:49.392 [INFO] [Thread-22002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:20:49.394 [DEBUG] [Thread-22002] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:20:49.394 [DEBUG] [Thread-22002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:20:49.394 [DEBUG] [Thread-22002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:20:49.394 [DEBUG] [Thread-22002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:20:49.395 [DEBUG] [Thread-22002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:20:49.395 [DEBUG] [Thread-22002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:20:49.395 [DEBUG] [Thread-22002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:20:49.395 [DEBUG] [Thread-22002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:20:49.395 [DEBUG] [Thread-22002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:20:49.395 [DEBUG] [Thread-22002] [transport.py] [_log()] client lang: <none>
2026-04-15T16:20:49.395 [DEBUG] [Thread-22002] [transport.py] [_log()] server lang: <none>
2026-04-15T16:20:49.395 [DEBUG] [Thread-22002] [transport.py] [_log()] kex follows: False
2026-04-15T16:20:49.395 [DEBUG] [Thread-22002] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:20:49.395 [DEBUG] [Thread-22002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:20:49.396 [DEBUG] [Thread-22002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:20:49.396 [DEBUG] [Thread-22002] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:20:49.396 [DEBUG] [Thread-22002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:20:49.396 [DEBUG] [Thread-22002] [transport.py] [_log()] Compression: none
2026-04-15T16:20:49.396 [DEBUG] [Thread-22002] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:20:49.410 [DEBUG] [Thread-22002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:20:49.410 [DEBUG] [Thread-22002] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:20:49.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:20:49.411 [DEBUG] [Thread-22002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:20:49.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:20:49.412 [DEBUG] [Thread-22002] [transport.py] [_log()] userauth is OK
2026-04-15T16:20:49.412 [DEBUG] [Thread-22002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:20:49.412 [DEBUG] [Thread-22002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:20:49.412 [DEBUG] [Thread-22002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:20:49.412 [DEBUG] [Thread-22002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:20:49.434 [INFO] [Thread-22002] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:20:49.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:20:50.054 [DEBUG] [Thread-22002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:20:50.054 [DEBUG] [Thread-22002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:20:50.055 [DEBUG] [Thread-22002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:20:50.095 [DEBUG] [Thread-22002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:20:50.095 [DEBUG] [Thread-22002] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:20:50.098 [DEBUG] [Thread-22002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:20:50.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:20:50.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:20:50.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:20:50.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:20:50.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:20:50.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:20:50.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:20:50.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:20:50.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:20:50.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.597705 -999.00  +14.90  12.73     57   +6.50 1 1 1 1 1   887    0 8.51 28.44 ----- 15.8 12.7 308.8 21.4 19.4 -28.2 18.7 -26.9 19.8 -25.3 20.7 -26.8
2026-04-15T16:20:50.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:20:50.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:20:50.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.597705
2026-04-15T16:20:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:20:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:20:50.124 [DEBUG] [Thread-22002] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:20:50.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:20:50.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:20:50.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:20:50.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:20:10', tmtdew=10.3114, humidity=50.0021, cloud=0.0, wind=20.0804, temperature=14.5701, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:20:41.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:20:50.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:20:50.381 [DEBUG] [Thread-22005] [transport.py] [_log()] starting thread (client mode): 0xee9bfdf0
2026-04-15T16:20:50.382 [DEBUG] [Thread-22005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:20:50.396 [DEBUG] [Thread-22005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:20:50.396 [INFO] [Thread-22005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:20:50.403 [DEBUG] [Thread-22005] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:20:50.404 [DEBUG] [Thread-22005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:20:50.404 [DEBUG] [Thread-22005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:20:50.404 [DEBUG] [Thread-22005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:20:50.404 [DEBUG] [Thread-22005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:20:50.404 [DEBUG] [Thread-22005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:20:50.404 [DEBUG] [Thread-22005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:20:50.404 [DEBUG] [Thread-22005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:20:50.404 [DEBUG] [Thread-22005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:20:50.404 [DEBUG] [Thread-22005] [transport.py] [_log()] client lang: <none>
2026-04-15T16:20:50.404 [DEBUG] [Thread-22005] [transport.py] [_log()] server lang: <none>
2026-04-15T16:20:50.404 [DEBUG] [Thread-22005] [transport.py] [_log()] kex follows: False
2026-04-15T16:20:50.404 [DEBUG] [Thread-22005] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:20:50.405 [DEBUG] [Thread-22005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:20:50.405 [DEBUG] [Thread-22005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:20:50.405 [DEBUG] [Thread-22005] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:20:50.405 [DEBUG] [Thread-22005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:20:50.405 [DEBUG] [Thread-22005] [transport.py] [_log()] Compression: none
2026-04-15T16:20:50.405 [DEBUG] [Thread-22005] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:20:50.461 [DEBUG] [Thread-22005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:20:50.462 [DEBUG] [Thread-22005] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:20:50.462 [DEBUG] [Thread-22005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:20:50.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:20:50.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:20:50.518 [DEBUG] [Thread-22005] [transport.py] [_log()] userauth is OK
2026-04-15T16:20:50.518 [DEBUG] [Thread-22005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:20:50.518 [DEBUG] [Thread-22005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:20:50.518 [DEBUG] [Thread-22005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:20:50.518 [DEBUG] [Thread-22005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:20:50.543 [INFO] [Thread-22005] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:20:50.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:20:50.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:20:51.406 [DEBUG] [Thread-22005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:20:51.406 [DEBUG] [Thread-22005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:20:51.454 [DEBUG] [Thread-22005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:20:51.454 [DEBUG] [Thread-22005] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:20:51.464 [DEBUG] [Thread-22005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:20:51.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:20:51.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')
2026-04-15T16:20:51.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
2026-04-15T16:20:51.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:20:51.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:20:51.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:20:51.504 [DEBUG] [Thread-22005] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:20:56.636 [DEBUG] [Thread-22007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:21:11.680 [DEBUG] [Thread-22008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:21:19.353 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:21:19.354 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:21:21.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:21:21.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:21:21.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
2026-04-15T16:21:22.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 20, 45), 10.4099, 49.7662, 0.0, 23.8529, 15.2395, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:21:22.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:20:45
2026-04-15T16:21:23.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:21:23.604 [DEBUG] [Thread-22009] [transport.py] [_log()] starting thread (client mode): 0xee90fd90
2026-04-15T16:21:23.604 [DEBUG] [Thread-22009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:21:23.615 [DEBUG] [Thread-22009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:21:23.615 [INFO] [Thread-22009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:21:23.617 [DEBUG] [Thread-22009] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:21:23.617 [DEBUG] [Thread-22009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:21:23.617 [DEBUG] [Thread-22009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:21:23.617 [DEBUG] [Thread-22009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:21:23.617 [DEBUG] [Thread-22009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:21:23.617 [DEBUG] [Thread-22009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:21:23.617 [DEBUG] [Thread-22009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:21:23.618 [DEBUG] [Thread-22009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:21:23.618 [DEBUG] [Thread-22009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:21:23.618 [DEBUG] [Thread-22009] [transport.py] [_log()] client lang: <none>
2026-04-15T16:21:23.618 [DEBUG] [Thread-22009] [transport.py] [_log()] server lang: <none>
2026-04-15T16:21:23.618 [DEBUG] [Thread-22009] [transport.py] [_log()] kex follows: False
2026-04-15T16:21:23.618 [DEBUG] [Thread-22009] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:21:23.618 [DEBUG] [Thread-22009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:21:23.618 [DEBUG] [Thread-22009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:21:23.618 [DEBUG] [Thread-22009] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:21:23.618 [DEBUG] [Thread-22009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:21:23.618 [DEBUG] [Thread-22009] [transport.py] [_log()] Compression: none
2026-04-15T16:21:23.619 [DEBUG] [Thread-22009] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:21:23.631 [DEBUG] [Thread-22009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:21:23.631 [DEBUG] [Thread-22009] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:21:23.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:21:23.632 [DEBUG] [Thread-22009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:21:23.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:21:23.633 [DEBUG] [Thread-22009] [transport.py] [_log()] userauth is OK
2026-04-15T16:21:23.633 [DEBUG] [Thread-22009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:21:23.633 [DEBUG] [Thread-22009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:21:23.633 [DEBUG] [Thread-22009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:21:23.633 [DEBUG] [Thread-22009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:21:23.649 [INFO] [Thread-22009] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:21:23.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:21:24.261 [DEBUG] [Thread-22009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:21:24.261 [DEBUG] [Thread-22009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:21:24.262 [DEBUG] [Thread-22009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:21:24.302 [DEBUG] [Thread-22009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:21:24.302 [DEBUG] [Thread-22009] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:21:24.304 [DEBUG] [Thread-22009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:21:24.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:21:24.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:21:24.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:21:24.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:21:24.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:21:24.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:21:24.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:21:24.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:21:24.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:21:24.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.598052 -999.00  +15.10  18.48     56   +6.40 1 1 1 1 1   887    0 8.71 33.49 ----- 21.7 18.5 292.4 22.4 19.4 -28.0 18.7 -27.6 19.8 -24.3 20.8 -26.1
2026-04-15T16:21:24.326 [DEBUG] [Thread-22009] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:21:24.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:21:24.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:21:24.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.598052
2026-04-15T16:21:24.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:21:24.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:21:24.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:21:24.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:21:24.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:21:24.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:20:45', tmtdew=10.4099, humidity=49.7662, cloud=0.0, wind=23.8529, temperature=15.2395, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:21:11.693', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:21:24.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:21:24.587 [DEBUG] [Thread-22012] [transport.py] [_log()] starting thread (client mode): 0xf17c3130
2026-04-15T16:21:24.587 [DEBUG] [Thread-22012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:21:24.601 [DEBUG] [Thread-22012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:21:24.601 [INFO] [Thread-22012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:21:24.609 [DEBUG] [Thread-22012] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:21:24.609 [DEBUG] [Thread-22012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:21:24.609 [DEBUG] [Thread-22012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:21:24.609 [DEBUG] [Thread-22012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:21:24.609 [DEBUG] [Thread-22012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:21:24.609 [DEBUG] [Thread-22012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:21:24.609 [DEBUG] [Thread-22012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:21:24.609 [DEBUG] [Thread-22012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:21:24.609 [DEBUG] [Thread-22012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:21:24.610 [DEBUG] [Thread-22012] [transport.py] [_log()] client lang: <none>
2026-04-15T16:21:24.610 [DEBUG] [Thread-22012] [transport.py] [_log()] server lang: <none>
2026-04-15T16:21:24.610 [DEBUG] [Thread-22012] [transport.py] [_log()] kex follows: False
2026-04-15T16:21:24.610 [DEBUG] [Thread-22012] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:21:24.610 [DEBUG] [Thread-22012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:21:24.610 [DEBUG] [Thread-22012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:21:24.610 [DEBUG] [Thread-22012] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:21:24.610 [DEBUG] [Thread-22012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:21:24.610 [DEBUG] [Thread-22012] [transport.py] [_log()] Compression: none
2026-04-15T16:21:24.610 [DEBUG] [Thread-22012] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:21:24.665 [DEBUG] [Thread-22012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:21:24.665 [DEBUG] [Thread-22012] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:21:24.666 [DEBUG] [Thread-22012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:21:24.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:21:24.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:21:24.722 [DEBUG] [Thread-22012] [transport.py] [_log()] userauth is OK
2026-04-15T16:21:24.722 [DEBUG] [Thread-22012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:21:24.722 [DEBUG] [Thread-22012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:21:24.723 [DEBUG] [Thread-22012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:21:24.723 [DEBUG] [Thread-22012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:21:24.748 [INFO] [Thread-22012] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:21:24.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:21:24.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:21:25.590 [DEBUG] [Thread-22012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:21:25.591 [DEBUG] [Thread-22012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:21:25.641 [DEBUG] [Thread-22012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:21:25.642 [DEBUG] [Thread-22012] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:21:25.651 [DEBUG] [Thread-22012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:21:25.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:21:25.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')
2026-04-15T16:21:25.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
2026-04-15T16:21:25.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:21:25.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:21:25.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:21:25.687 [DEBUG] [Thread-22012] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:21:26.711 [DEBUG] [Thread-22014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:21:36.993 [DEBUG] [Thread-22015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:21:41.749 [DEBUG] [Thread-22016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:21:55.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:21:55.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:21: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
2026-04-15T16:21:56.782 [DEBUG] [Thread-22017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:21:56.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 21, 21), 10.3503, 50.0714, 0.0, 17.7152, 14.6191, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:21:56.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:21:21
2026-04-15T16:21:57.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:21:57.895 [DEBUG] [Thread-22018] [transport.py] [_log()] starting thread (client mode): 0xf17c2d40
2026-04-15T16:21:57.895 [DEBUG] [Thread-22018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:21:57.915 [DEBUG] [Thread-22018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:21:57.915 [INFO] [Thread-22018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:21:57.918 [DEBUG] [Thread-22018] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:21:57.918 [DEBUG] [Thread-22018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:21:57.918 [DEBUG] [Thread-22018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:21:57.918 [DEBUG] [Thread-22018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:21:57.918 [DEBUG] [Thread-22018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:21:57.919 [DEBUG] [Thread-22018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:21:57.919 [DEBUG] [Thread-22018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:21:57.919 [DEBUG] [Thread-22018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:21:57.919 [DEBUG] [Thread-22018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:21:57.919 [DEBUG] [Thread-22018] [transport.py] [_log()] client lang: <none>
2026-04-15T16:21:57.919 [DEBUG] [Thread-22018] [transport.py] [_log()] server lang: <none>
2026-04-15T16:21:57.919 [DEBUG] [Thread-22018] [transport.py] [_log()] kex follows: False
2026-04-15T16:21:57.919 [DEBUG] [Thread-22018] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:21:57.919 [DEBUG] [Thread-22018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:21:57.919 [DEBUG] [Thread-22018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:21:57.919 [DEBUG] [Thread-22018] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:21:57.920 [DEBUG] [Thread-22018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:21:57.920 [DEBUG] [Thread-22018] [transport.py] [_log()] Compression: none
2026-04-15T16:21:57.921 [DEBUG] [Thread-22018] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:21:57.937 [DEBUG] [Thread-22018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:21:57.938 [DEBUG] [Thread-22018] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:21:57.938 [DEBUG] [Thread-22018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:21:57.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:21:57.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:21:57.939 [DEBUG] [Thread-22018] [transport.py] [_log()] userauth is OK
2026-04-15T16:21:57.939 [DEBUG] [Thread-22018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:21:57.939 [DEBUG] [Thread-22018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:21:57.940 [DEBUG] [Thread-22018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:21:57.940 [DEBUG] [Thread-22018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:21:57.963 [INFO] [Thread-22018] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:21:57.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:21:58.626 [DEBUG] [Thread-22018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:21:58.626 [DEBUG] [Thread-22018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:21:58.626 [DEBUG] [Thread-22018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:21:58.667 [DEBUG] [Thread-22018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:21:58.667 [DEBUG] [Thread-22018] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:21:58.670 [DEBUG] [Thread-22018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:21:58.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:21:58.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:21:58.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:21:58.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:21:58.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:21:58.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:21:58.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:21:58.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:21:58.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:21:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.598399 -999.00  +14.70  16.91     56   +6.20 1 1 1 1 1   887    0 8.88 38.29 ----- 16.2 16.9 300.2 25.1 19.4 -29.0 18.7 -27.6 19.6 -26.9 20.7 -27.5
2026-04-15T16:21:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:21:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:21:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.598399
2026-04-15T16:21:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:21:58.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:21:58.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:21:58.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:21:58.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:21:58.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:21:21', tmtdew=10.3503, humidity=50.0714, cloud=0.0, wind=17.7152, temperature=14.6191, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:21:41.674', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:21:58.695 [DEBUG] [Thread-22018] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:21:58.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:21:58.949 [DEBUG] [Thread-22021] [transport.py] [_log()] starting thread (client mode): 0xf13337c0
2026-04-15T16:21:58.950 [DEBUG] [Thread-22021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:21:58.964 [DEBUG] [Thread-22021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:21:58.964 [INFO] [Thread-22021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:21:58.971 [DEBUG] [Thread-22021] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:21:58.971 [DEBUG] [Thread-22021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:21:58.972 [DEBUG] [Thread-22021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:21:58.972 [DEBUG] [Thread-22021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:21:58.972 [DEBUG] [Thread-22021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:21:58.972 [DEBUG] [Thread-22021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:21:58.972 [DEBUG] [Thread-22021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:21:58.972 [DEBUG] [Thread-22021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:21:58.972 [DEBUG] [Thread-22021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:21:58.972 [DEBUG] [Thread-22021] [transport.py] [_log()] client lang: <none>
2026-04-15T16:21:58.972 [DEBUG] [Thread-22021] [transport.py] [_log()] server lang: <none>
2026-04-15T16:21:58.972 [DEBUG] [Thread-22021] [transport.py] [_log()] kex follows: False
2026-04-15T16:21:58.972 [DEBUG] [Thread-22021] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:21:58.972 [DEBUG] [Thread-22021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:21:58.973 [DEBUG] [Thread-22021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:21:58.973 [DEBUG] [Thread-22021] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:21:58.973 [DEBUG] [Thread-22021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:21:58.973 [DEBUG] [Thread-22021] [transport.py] [_log()] Compression: none
2026-04-15T16:21:58.973 [DEBUG] [Thread-22021] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:21:59.029 [DEBUG] [Thread-22021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:21:59.030 [DEBUG] [Thread-22021] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:21:59.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:21:59.030 [DEBUG] [Thread-22021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:21:59.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:21:59.086 [DEBUG] [Thread-22021] [transport.py] [_log()] userauth is OK
2026-04-15T16:21:59.086 [DEBUG] [Thread-22021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:21:59.087 [DEBUG] [Thread-22021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:21:59.087 [DEBUG] [Thread-22021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:21:59.087 [DEBUG] [Thread-22021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:21:59.112 [INFO] [Thread-22021] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:21:59.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:21:59.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:21:59.938 [DEBUG] [Thread-22021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:21:59.938 [DEBUG] [Thread-22021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:21:59.991 [DEBUG] [Thread-22021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:21:59.991 [DEBUG] [Thread-22021] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:22:00.000 [DEBUG] [Thread-22021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:22:00.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:22:00.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')
2026-04-15T16:22:00.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
2026-04-15T16:22:00.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:22:00.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:22:00.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:22:00.034 [DEBUG] [Thread-22021] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:22:11.813 [DEBUG] [Thread-22023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:22:19.494 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:22:19.496 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:22:26.857 [DEBUG] [Thread-22024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:22:30.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:22:30.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:22:30.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T16:22:31.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 21, 57), 10.3574, 49.8891, 0.0, 20.3972, 14.7022, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:22:31.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:21:57
2026-04-15T16:22:31.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:22:32.195 [DEBUG] [Thread-22025] [transport.py] [_log()] starting thread (client mode): 0xee927970
2026-04-15T16:22:32.195 [DEBUG] [Thread-22025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:22:32.215 [DEBUG] [Thread-22025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:22:32.215 [INFO] [Thread-22025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:22:32.218 [DEBUG] [Thread-22025] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:22:32.218 [DEBUG] [Thread-22025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:22:32.218 [DEBUG] [Thread-22025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:22:32.218 [DEBUG] [Thread-22025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:22:32.218 [DEBUG] [Thread-22025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:22:32.218 [DEBUG] [Thread-22025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:22:32.218 [DEBUG] [Thread-22025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:22:32.218 [DEBUG] [Thread-22025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:22:32.218 [DEBUG] [Thread-22025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:22:32.218 [DEBUG] [Thread-22025] [transport.py] [_log()] client lang: <none>
2026-04-15T16:22:32.219 [DEBUG] [Thread-22025] [transport.py] [_log()] server lang: <none>
2026-04-15T16:22:32.219 [DEBUG] [Thread-22025] [transport.py] [_log()] kex follows: False
2026-04-15T16:22:32.219 [DEBUG] [Thread-22025] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:22:32.219 [DEBUG] [Thread-22025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:22:32.219 [DEBUG] [Thread-22025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:22:32.219 [DEBUG] [Thread-22025] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:22:32.219 [DEBUG] [Thread-22025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:22:32.219 [DEBUG] [Thread-22025] [transport.py] [_log()] Compression: none
2026-04-15T16:22:32.219 [DEBUG] [Thread-22025] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:22:32.237 [DEBUG] [Thread-22025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:22:32.237 [DEBUG] [Thread-22025] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:22:32.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:22:32.238 [DEBUG] [Thread-22025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:22:32.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:22:32.239 [DEBUG] [Thread-22025] [transport.py] [_log()] userauth is OK
2026-04-15T16:22:32.239 [DEBUG] [Thread-22025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:22:32.239 [DEBUG] [Thread-22025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:22:32.239 [DEBUG] [Thread-22025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:22:32.239 [DEBUG] [Thread-22025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:22:32.258 [INFO] [Thread-22025] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:22:32.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:22:32.880 [DEBUG] [Thread-22025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:22:32.881 [DEBUG] [Thread-22025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:22:32.881 [DEBUG] [Thread-22025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:22:32.921 [DEBUG] [Thread-22025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:22:32.921 [DEBUG] [Thread-22025] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:22:32.924 [DEBUG] [Thread-22025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:22:32.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:22:32.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:22:32.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:22:32.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:22:32.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:22:32.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:22:32.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:22:32.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:22:32.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:22:32.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.598746 -999.00  +14.60  22.58     57   +6.20 1 1 1 1 1   887    0 9.23 47.36 ----- 20.4 22.6 307.8 26.5 19.4 -28.1 18.7 -27.8 19.7 -24.7 20.6 -26.7
2026-04-15T16:22:32.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:22:32.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:22:32.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.598746
2026-04-15T16:22:32.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:22:32.950 [DEBUG] [Thread-22025] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:22:32.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:22:32.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:22:32.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:22:32.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:22:32.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:21:57', tmtdew=10.3574, humidity=49.8891, cloud=0.0, wind=20.3972, temperature=14.7022, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:22:11.654', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:22:33.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:22:33.210 [DEBUG] [Thread-22028] [transport.py] [_log()] starting thread (client mode): 0xf17c17b0
2026-04-15T16:22:33.210 [DEBUG] [Thread-22028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:22:33.224 [DEBUG] [Thread-22028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:22:33.224 [INFO] [Thread-22028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:22:33.232 [DEBUG] [Thread-22028] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:22:33.232 [DEBUG] [Thread-22028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:22:33.232 [DEBUG] [Thread-22028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:22:33.232 [DEBUG] [Thread-22028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:22:33.232 [DEBUG] [Thread-22028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:22:33.232 [DEBUG] [Thread-22028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:22:33.232 [DEBUG] [Thread-22028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:22:33.233 [DEBUG] [Thread-22028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:22:33.233 [DEBUG] [Thread-22028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:22:33.233 [DEBUG] [Thread-22028] [transport.py] [_log()] client lang: <none>
2026-04-15T16:22:33.233 [DEBUG] [Thread-22028] [transport.py] [_log()] server lang: <none>
2026-04-15T16:22:33.233 [DEBUG] [Thread-22028] [transport.py] [_log()] kex follows: False
2026-04-15T16:22:33.233 [DEBUG] [Thread-22028] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:22:33.233 [DEBUG] [Thread-22028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:22:33.233 [DEBUG] [Thread-22028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:22:33.233 [DEBUG] [Thread-22028] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:22:33.233 [DEBUG] [Thread-22028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:22:33.233 [DEBUG] [Thread-22028] [transport.py] [_log()] Compression: none
2026-04-15T16:22:33.234 [DEBUG] [Thread-22028] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:22:33.290 [DEBUG] [Thread-22028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:22:33.290 [DEBUG] [Thread-22028] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:22:33.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:22:33.291 [DEBUG] [Thread-22028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:22:33.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:22:33.347 [DEBUG] [Thread-22028] [transport.py] [_log()] userauth is OK
2026-04-15T16:22:33.347 [DEBUG] [Thread-22028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:22:33.347 [DEBUG] [Thread-22028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:22:33.347 [DEBUG] [Thread-22028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:22:33.347 [DEBUG] [Thread-22028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:22:33.370 [INFO] [Thread-22028] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:22:33.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:22:33.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:22:34.182 [DEBUG] [Thread-22028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:22:34.182 [DEBUG] [Thread-22028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:22:34.232 [DEBUG] [Thread-22028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:22:34.233 [DEBUG] [Thread-22028] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:22:34.245 [DEBUG] [Thread-22028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:22:34.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:22: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')
2026-04-15T16:22:34.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
2026-04-15T16:22:34.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:22:34.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:22:34.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:22:34.286 [DEBUG] [Thread-22028] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:22:37.075 [DEBUG] [Thread-22030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:22:41.889 [DEBUG] [Thread-22031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:22:56.936 [DEBUG] [Thread-22032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:23:04.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:23:04.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:23:04.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
2026-04-15T16:23:05.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 22, 33), 10.8489, 48.3083, 0.0, 18.1375, 15.4051, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:23:05.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:22:33
2026-04-15T16:23:06.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:23:06.472 [DEBUG] [Thread-22033] [transport.py] [_log()] starting thread (client mode): 0xf17c2950
2026-04-15T16:23:06.472 [DEBUG] [Thread-22033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:23:06.492 [DEBUG] [Thread-22033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:23:06.492 [INFO] [Thread-22033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:23:06.495 [DEBUG] [Thread-22033] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:23:06.495 [DEBUG] [Thread-22033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:23:06.495 [DEBUG] [Thread-22033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:23:06.495 [DEBUG] [Thread-22033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:23:06.495 [DEBUG] [Thread-22033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:23:06.495 [DEBUG] [Thread-22033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:23:06.496 [DEBUG] [Thread-22033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:23:06.496 [DEBUG] [Thread-22033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:23:06.496 [DEBUG] [Thread-22033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:23:06.496 [DEBUG] [Thread-22033] [transport.py] [_log()] client lang: <none>
2026-04-15T16:23:06.496 [DEBUG] [Thread-22033] [transport.py] [_log()] server lang: <none>
2026-04-15T16:23:06.496 [DEBUG] [Thread-22033] [transport.py] [_log()] kex follows: False
2026-04-15T16:23:06.496 [DEBUG] [Thread-22033] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:23:06.496 [DEBUG] [Thread-22033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:23:06.496 [DEBUG] [Thread-22033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:23:06.496 [DEBUG] [Thread-22033] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:23:06.497 [DEBUG] [Thread-22033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:23:06.497 [DEBUG] [Thread-22033] [transport.py] [_log()] Compression: none
2026-04-15T16:23:06.497 [DEBUG] [Thread-22033] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:23:06.513 [DEBUG] [Thread-22033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:23:06.514 [DEBUG] [Thread-22033] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:23:06.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:23:06.514 [DEBUG] [Thread-22033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:23:06.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:23:06.516 [DEBUG] [Thread-22033] [transport.py] [_log()] userauth is OK
2026-04-15T16:23:06.516 [DEBUG] [Thread-22033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:23:06.516 [DEBUG] [Thread-22033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:23:06.516 [DEBUG] [Thread-22033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:23:06.516 [DEBUG] [Thread-22033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:23:06.541 [INFO] [Thread-22033] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:23:06.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:23:07.168 [DEBUG] [Thread-22033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:23:07.168 [DEBUG] [Thread-22033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:23:07.169 [DEBUG] [Thread-22033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:23:07.209 [DEBUG] [Thread-22033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:23:07.209 [DEBUG] [Thread-22033] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:23:07.213 [DEBUG] [Thread-22033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:23:07.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:23:07.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:23:07.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:23:07.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:23:07.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:23:07.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:23:07.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:23:07.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:23:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:23:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.599094 -999.00  +14.40  21.70     56   +5.90 1 1 1 1 1   887    0 9.33 46.07 ----- 20.6 21.7 292.8 26.1 19.3 -28.4 18.6 -28.3 19.6 -24.9 20.6 -26.9
2026-04-15T16:23:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:23:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:23:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.599094
2026-04-15T16:23:07.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:23:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:23:07.238 [DEBUG] [Thread-22033] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:23:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:23:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:23:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:23:07.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:22:33', tmtdew=10.8489, humidity=48.3083, cloud=0.0, wind=18.1375, temperature=15.4051, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:22:41.722', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:23:07.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:23:07.499 [DEBUG] [Thread-22036] [transport.py] [_log()] starting thread (client mode): 0xee9be8f0
2026-04-15T16:23:07.499 [DEBUG] [Thread-22036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:23:07.514 [DEBUG] [Thread-22036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:23:07.514 [INFO] [Thread-22036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:23:07.521 [DEBUG] [Thread-22036] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:23:07.521 [DEBUG] [Thread-22036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:23:07.521 [DEBUG] [Thread-22036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:23:07.521 [DEBUG] [Thread-22036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:23:07.522 [DEBUG] [Thread-22036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:23:07.522 [DEBUG] [Thread-22036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:23:07.522 [DEBUG] [Thread-22036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:23:07.522 [DEBUG] [Thread-22036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:23:07.522 [DEBUG] [Thread-22036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:23:07.522 [DEBUG] [Thread-22036] [transport.py] [_log()] client lang: <none>
2026-04-15T16:23:07.522 [DEBUG] [Thread-22036] [transport.py] [_log()] server lang: <none>
2026-04-15T16:23:07.522 [DEBUG] [Thread-22036] [transport.py] [_log()] kex follows: False
2026-04-15T16:23:07.522 [DEBUG] [Thread-22036] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:23:07.522 [DEBUG] [Thread-22036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:23:07.522 [DEBUG] [Thread-22036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:23:07.522 [DEBUG] [Thread-22036] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:23:07.523 [DEBUG] [Thread-22036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:23:07.523 [DEBUG] [Thread-22036] [transport.py] [_log()] Compression: none
2026-04-15T16:23:07.523 [DEBUG] [Thread-22036] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:23:07.579 [DEBUG] [Thread-22036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:23:07.580 [DEBUG] [Thread-22036] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:23:07.580 [DEBUG] [Thread-22036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:23:07.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:23:07.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:23:07.635 [DEBUG] [Thread-22036] [transport.py] [_log()] userauth is OK
2026-04-15T16:23:07.635 [DEBUG] [Thread-22036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:23:07.636 [DEBUG] [Thread-22036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:23:07.636 [DEBUG] [Thread-22036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:23:07.636 [DEBUG] [Thread-22036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:23:07.662 [INFO] [Thread-22036] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:23:07.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:23:07.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:23:08.497 [DEBUG] [Thread-22036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:23:08.497 [DEBUG] [Thread-22036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:23:08.550 [DEBUG] [Thread-22036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:23:08.551 [DEBUG] [Thread-22036] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:23:08.561 [DEBUG] [Thread-22036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:23:08.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:23:08.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')
2026-04-15T16:23:08.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
2026-04-15T16:23:08.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:23:08.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:23:08.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:23:08.595 [DEBUG] [Thread-22036] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:23:11.968 [DEBUG] [Thread-22038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:23:19.637 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:23:19.638 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:23:27.015 [DEBUG] [Thread-22039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:23:37.177 [DEBUG] [Thread-22040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:23:38.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:23:38.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:23:38.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
2026-04-15T16:23:39.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 23, 9), 10.219, 50.1541, 0.0, 20.8742, 14.6363, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:23:39.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:23:09
2026-04-15T16:23:40.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:23:40.795 [DEBUG] [Thread-22041] [transport.py] [_log()] starting thread (client mode): 0xf17c3f10
2026-04-15T16:23:40.795 [DEBUG] [Thread-22041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:23:40.815 [DEBUG] [Thread-22041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:23:40.815 [INFO] [Thread-22041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:23:40.817 [DEBUG] [Thread-22041] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:23:40.817 [DEBUG] [Thread-22041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:23:40.817 [DEBUG] [Thread-22041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:23:40.817 [DEBUG] [Thread-22041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:23:40.817 [DEBUG] [Thread-22041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:23:40.817 [DEBUG] [Thread-22041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:23:40.817 [DEBUG] [Thread-22041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:23:40.817 [DEBUG] [Thread-22041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:23:40.818 [DEBUG] [Thread-22041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:23:40.818 [DEBUG] [Thread-22041] [transport.py] [_log()] client lang: <none>
2026-04-15T16:23:40.818 [DEBUG] [Thread-22041] [transport.py] [_log()] server lang: <none>
2026-04-15T16:23:40.818 [DEBUG] [Thread-22041] [transport.py] [_log()] kex follows: False
2026-04-15T16:23:40.818 [DEBUG] [Thread-22041] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:23:40.818 [DEBUG] [Thread-22041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:23:40.818 [DEBUG] [Thread-22041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:23:40.818 [DEBUG] [Thread-22041] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:23:40.818 [DEBUG] [Thread-22041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:23:40.818 [DEBUG] [Thread-22041] [transport.py] [_log()] Compression: none
2026-04-15T16:23:40.818 [DEBUG] [Thread-22041] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:23:40.837 [DEBUG] [Thread-22041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:23:40.838 [DEBUG] [Thread-22041] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:23:40.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:23:40.838 [DEBUG] [Thread-22041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:23:40.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:23:40.839 [DEBUG] [Thread-22041] [transport.py] [_log()] userauth is OK
2026-04-15T16:23:40.839 [DEBUG] [Thread-22041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:23:40.839 [DEBUG] [Thread-22041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:23:40.840 [DEBUG] [Thread-22041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:23:40.840 [DEBUG] [Thread-22041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:23:40.854 [INFO] [Thread-22041] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:23:40.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:23:41.481 [DEBUG] [Thread-22041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:23:41.481 [DEBUG] [Thread-22041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:23:41.482 [DEBUG] [Thread-22041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:23:41.522 [DEBUG] [Thread-22041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:23:41.522 [DEBUG] [Thread-22041] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:23:41.526 [DEBUG] [Thread-22041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:23:41.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:23:41.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:23:41.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:23:41.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:23:41.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:23:41.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:23:41.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:23:41.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:23:41.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:23:41.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.599441 -999.00  +14.40  18.66     57   +6.20 1 1 1 1 1   887    0 9.35 51.85 ----- 17.8 18.7 313.8 24.2 19.2 -28.4 18.6 -27.7 19.5 -25.2 20.5 -26.9
2026-04-15T16:23:41.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:23:41.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:23:41.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.599441
2026-04-15T16:23:41.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:23:41.550 [DEBUG] [Thread-22041] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:23:41.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:23:41.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:23:41.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:23:41.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:23:41.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:23:09', tmtdew=10.219, humidity=50.1541, cloud=0.0, wind=20.8742, temperature=14.6363, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:23:11.702', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:23:41.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:23:41.812 [DEBUG] [Thread-22044] [transport.py] [_log()] starting thread (client mode): 0xf13337f0
2026-04-15T16:23:41.813 [DEBUG] [Thread-22044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:23:41.827 [DEBUG] [Thread-22044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:23:41.827 [INFO] [Thread-22044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:23:41.835 [DEBUG] [Thread-22044] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:23:41.835 [DEBUG] [Thread-22044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:23:41.835 [DEBUG] [Thread-22044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:23:41.835 [DEBUG] [Thread-22044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:23:41.835 [DEBUG] [Thread-22044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:23:41.835 [DEBUG] [Thread-22044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:23:41.835 [DEBUG] [Thread-22044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:23:41.835 [DEBUG] [Thread-22044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:23:41.835 [DEBUG] [Thread-22044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:23:41.836 [DEBUG] [Thread-22044] [transport.py] [_log()] client lang: <none>
2026-04-15T16:23:41.836 [DEBUG] [Thread-22044] [transport.py] [_log()] server lang: <none>
2026-04-15T16:23:41.836 [DEBUG] [Thread-22044] [transport.py] [_log()] kex follows: False
2026-04-15T16:23:41.836 [DEBUG] [Thread-22044] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:23:41.836 [DEBUG] [Thread-22044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:23:41.836 [DEBUG] [Thread-22044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:23:41.836 [DEBUG] [Thread-22044] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:23:41.836 [DEBUG] [Thread-22044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:23:41.836 [DEBUG] [Thread-22044] [transport.py] [_log()] Compression: none
2026-04-15T16:23:41.836 [DEBUG] [Thread-22044] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:23:41.891 [DEBUG] [Thread-22044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:23:41.891 [DEBUG] [Thread-22044] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:23:41.892 [DEBUG] [Thread-22044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:23:41.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:23:41.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:23:41.948 [DEBUG] [Thread-22044] [transport.py] [_log()] userauth is OK
2026-04-15T16:23:41.948 [DEBUG] [Thread-22044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:23:41.948 [DEBUG] [Thread-22044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:23:41.948 [DEBUG] [Thread-22044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:23:41.948 [DEBUG] [Thread-22044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:23:41.973 [INFO] [Thread-22044] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:23:41.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:23:41.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:23:42.047 [DEBUG] [Thread-22046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:23:42.791 [DEBUG] [Thread-22044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:23:42.791 [DEBUG] [Thread-22044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:23:42.839 [DEBUG] [Thread-22044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:23:42.839 [DEBUG] [Thread-22044] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:23:42.848 [DEBUG] [Thread-22044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:23:42.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:23:42.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')
2026-04-15T16:23:42.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') -> 00000000
2026-04-15T16:23:42.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:23:42.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:23:42.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:23:42.890 [DEBUG] [Thread-22044] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:23:57.091 [DEBUG] [Thread-22047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:24:12.122 [DEBUG] [Thread-22048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:24:12.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:24:12.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:24:12.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T16:24:14.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 23, 44), 10.8059, 48.4077, 0.0, 16.7969, 15.2394, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:24:14.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:23:44
2026-04-15T16:24:14.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:24:15.025 [DEBUG] [Thread-22049] [transport.py] [_log()] starting thread (client mode): 0xf17c20e0
2026-04-15T16:24:15.026 [DEBUG] [Thread-22049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:24:15.045 [DEBUG] [Thread-22049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:24:15.045 [INFO] [Thread-22049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:24:15.047 [DEBUG] [Thread-22049] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:24:15.047 [DEBUG] [Thread-22049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:24:15.048 [DEBUG] [Thread-22049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:24:15.048 [DEBUG] [Thread-22049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:24:15.048 [DEBUG] [Thread-22049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:24:15.048 [DEBUG] [Thread-22049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:24:15.048 [DEBUG] [Thread-22049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:24:15.048 [DEBUG] [Thread-22049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:24:15.048 [DEBUG] [Thread-22049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:24:15.048 [DEBUG] [Thread-22049] [transport.py] [_log()] client lang: <none>
2026-04-15T16:24:15.048 [DEBUG] [Thread-22049] [transport.py] [_log()] server lang: <none>
2026-04-15T16:24:15.048 [DEBUG] [Thread-22049] [transport.py] [_log()] kex follows: False
2026-04-15T16:24:15.048 [DEBUG] [Thread-22049] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:24:15.049 [DEBUG] [Thread-22049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:24:15.049 [DEBUG] [Thread-22049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:24:15.049 [DEBUG] [Thread-22049] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:24:15.049 [DEBUG] [Thread-22049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:24:15.049 [DEBUG] [Thread-22049] [transport.py] [_log()] Compression: none
2026-04-15T16:24:15.049 [DEBUG] [Thread-22049] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:24:15.065 [DEBUG] [Thread-22049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:24:15.065 [DEBUG] [Thread-22049] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:24:15.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:24:15.066 [DEBUG] [Thread-22049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:24:15.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:24:15.067 [DEBUG] [Thread-22049] [transport.py] [_log()] userauth is OK
2026-04-15T16:24:15.067 [DEBUG] [Thread-22049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:24:15.067 [DEBUG] [Thread-22049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:24:15.067 [DEBUG] [Thread-22049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:24:15.067 [DEBUG] [Thread-22049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:24:15.087 [INFO] [Thread-22049] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:24:15.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:24:15.726 [DEBUG] [Thread-22049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:24:15.726 [DEBUG] [Thread-22049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:24:15.727 [DEBUG] [Thread-22049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:24:15.767 [DEBUG] [Thread-22049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:24:15.767 [DEBUG] [Thread-22049] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:24:15.770 [DEBUG] [Thread-22049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:24:15.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:24:15.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:24:15.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:24:15.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:24:15.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:24:15.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:24:15.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:24:15.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:24:15.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:24:15.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.599788 -999.00  +14.70  14.89     57   +6.30 1 1 1 1 1   887    0 9.44 51.83 ----- 14.5 14.9 302.9 20.2 19.3 -28.8 18.7 -27.9 19.6 -25.1 20.6 -26.9
2026-04-15T16:24:15.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:24:15.792 [DEBUG] [Thread-22049] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:24:15.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:24:15.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.599788
2026-04-15T16:24:15.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:24:15.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:24:15.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:24:15.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:24:15.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:24:15.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:23:44', tmtdew=10.8059, humidity=48.4077, cloud=0.0, wind=16.7969, temperature=15.2394, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:23:41.683', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:24:16.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:24:16.051 [DEBUG] [Thread-22052] [transport.py] [_log()] starting thread (client mode): 0xf1333af0
2026-04-15T16:24:16.052 [DEBUG] [Thread-22052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:24:16.066 [DEBUG] [Thread-22052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:24:16.066 [INFO] [Thread-22052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:24:16.074 [DEBUG] [Thread-22052] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:24:16.074 [DEBUG] [Thread-22052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:24:16.074 [DEBUG] [Thread-22052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:24:16.074 [DEBUG] [Thread-22052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:24:16.074 [DEBUG] [Thread-22052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:24:16.074 [DEBUG] [Thread-22052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:24:16.074 [DEBUG] [Thread-22052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:24:16.074 [DEBUG] [Thread-22052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:24:16.074 [DEBUG] [Thread-22052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:24:16.074 [DEBUG] [Thread-22052] [transport.py] [_log()] client lang: <none>
2026-04-15T16:24:16.074 [DEBUG] [Thread-22052] [transport.py] [_log()] server lang: <none>
2026-04-15T16:24:16.075 [DEBUG] [Thread-22052] [transport.py] [_log()] kex follows: False
2026-04-15T16:24:16.075 [DEBUG] [Thread-22052] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:24:16.075 [DEBUG] [Thread-22052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:24:16.075 [DEBUG] [Thread-22052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:24:16.075 [DEBUG] [Thread-22052] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:24:16.075 [DEBUG] [Thread-22052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:24:16.075 [DEBUG] [Thread-22052] [transport.py] [_log()] Compression: none
2026-04-15T16:24:16.075 [DEBUG] [Thread-22052] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:24:16.131 [DEBUG] [Thread-22052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:24:16.131 [DEBUG] [Thread-22052] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:24:16.132 [DEBUG] [Thread-22052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:24:16.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:24:16.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:24:16.188 [DEBUG] [Thread-22052] [transport.py] [_log()] userauth is OK
2026-04-15T16:24:16.188 [DEBUG] [Thread-22052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:24:16.188 [DEBUG] [Thread-22052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:24:16.188 [DEBUG] [Thread-22052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:24:16.188 [DEBUG] [Thread-22052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:24:16.210 [INFO] [Thread-22052] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:24:16.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:24:16.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:24:17.072 [DEBUG] [Thread-22052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:24:17.072 [DEBUG] [Thread-22052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:24:17.120 [DEBUG] [Thread-22052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:24:17.120 [DEBUG] [Thread-22052] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:24:17.129 [DEBUG] [Thread-22052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:24:17.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:24:17.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')
2026-04-15T16:24:17.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
2026-04-15T16:24:17.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:24:17.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:24:17.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:24:17.165 [DEBUG] [Thread-22052] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:24:19.778 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:24:19.779 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:24:27.155 [DEBUG] [Thread-22054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:24:37.255 [DEBUG] [Thread-22055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:24:42.199 [DEBUG] [Thread-22056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:24:47.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:24:47.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:24:47.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
2026-04-15T16:24:48.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 24, 20), 10.1633, 50.5186, 0.0, 17.6461, 14.5028, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:24:48.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:24:20
2026-04-15T16:24:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:24:49.271 [DEBUG] [Thread-22057] [transport.py] [_log()] starting thread (client mode): 0xf1330df0
2026-04-15T16:24:49.271 [DEBUG] [Thread-22057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:24:49.291 [DEBUG] [Thread-22057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:24:49.291 [INFO] [Thread-22057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:24:49.293 [DEBUG] [Thread-22057] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:24:49.293 [DEBUG] [Thread-22057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:24:49.293 [DEBUG] [Thread-22057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:24:49.293 [DEBUG] [Thread-22057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:24:49.293 [DEBUG] [Thread-22057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:24:49.293 [DEBUG] [Thread-22057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:24:49.293 [DEBUG] [Thread-22057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:24:49.293 [DEBUG] [Thread-22057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:24:49.294 [DEBUG] [Thread-22057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:24:49.294 [DEBUG] [Thread-22057] [transport.py] [_log()] client lang: <none>
2026-04-15T16:24:49.294 [DEBUG] [Thread-22057] [transport.py] [_log()] server lang: <none>
2026-04-15T16:24:49.294 [DEBUG] [Thread-22057] [transport.py] [_log()] kex follows: False
2026-04-15T16:24:49.294 [DEBUG] [Thread-22057] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:24:49.294 [DEBUG] [Thread-22057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:24:49.294 [DEBUG] [Thread-22057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:24:49.294 [DEBUG] [Thread-22057] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:24:49.294 [DEBUG] [Thread-22057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:24:49.294 [DEBUG] [Thread-22057] [transport.py] [_log()] Compression: none
2026-04-15T16:24:49.294 [DEBUG] [Thread-22057] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:24:49.305 [DEBUG] [Thread-22057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:24:49.306 [DEBUG] [Thread-22057] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:24:49.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:24:49.306 [DEBUG] [Thread-22057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:24:49.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:24:49.307 [DEBUG] [Thread-22057] [transport.py] [_log()] userauth is OK
2026-04-15T16:24:49.307 [DEBUG] [Thread-22057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:24:49.307 [DEBUG] [Thread-22057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:24:49.307 [DEBUG] [Thread-22057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:24:49.307 [DEBUG] [Thread-22057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:24:49.327 [INFO] [Thread-22057] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:24:49.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:24:49.970 [DEBUG] [Thread-22057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:24:49.970 [DEBUG] [Thread-22057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:24:49.971 [DEBUG] [Thread-22057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:24:50.011 [DEBUG] [Thread-22057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:24:50.011 [DEBUG] [Thread-22057] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:24:50.014 [DEBUG] [Thread-22057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:24:50.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:24:50.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:24:50.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:24:50.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:24:50.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:24:50.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:24:50.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:24:50.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:24:50.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:24:50.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.600136 -999.00  +14.50  14.18     56   +5.80 1 1 1 1 1   887    0 9.45 55.91 ----- 13.4 14.2 298.8 21.3 19.3 -29.2 18.7 -27.8 19.6 -26.1 20.5 -27.4
2026-04-15T16:24:50.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:24:50.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:24:50.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.600136
2026-04-15T16:24:50.038 [DEBUG] [Thread-22057] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:24:50.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:24:50.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:24:50.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:24:50.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:24:50.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:24:50.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:24:20', tmtdew=10.1633, humidity=50.5186, cloud=0.0, wind=17.6461, temperature=14.5028, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:24:11.750', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:24:50.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:24:50.299 [DEBUG] [Thread-22060] [transport.py] [_log()] starting thread (client mode): 0xee91e9e0
2026-04-15T16:24:50.299 [DEBUG] [Thread-22060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:24:50.313 [DEBUG] [Thread-22060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:24:50.314 [INFO] [Thread-22060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:24:50.321 [DEBUG] [Thread-22060] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:24:50.321 [DEBUG] [Thread-22060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:24:50.321 [DEBUG] [Thread-22060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:24:50.321 [DEBUG] [Thread-22060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:24:50.321 [DEBUG] [Thread-22060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:24:50.321 [DEBUG] [Thread-22060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:24:50.321 [DEBUG] [Thread-22060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:24:50.322 [DEBUG] [Thread-22060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:24:50.322 [DEBUG] [Thread-22060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:24:50.322 [DEBUG] [Thread-22060] [transport.py] [_log()] client lang: <none>
2026-04-15T16:24:50.322 [DEBUG] [Thread-22060] [transport.py] [_log()] server lang: <none>
2026-04-15T16:24:50.322 [DEBUG] [Thread-22060] [transport.py] [_log()] kex follows: False
2026-04-15T16:24:50.322 [DEBUG] [Thread-22060] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:24:50.322 [DEBUG] [Thread-22060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:24:50.322 [DEBUG] [Thread-22060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:24:50.322 [DEBUG] [Thread-22060] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:24:50.322 [DEBUG] [Thread-22060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:24:50.322 [DEBUG] [Thread-22060] [transport.py] [_log()] Compression: none
2026-04-15T16:24:50.323 [DEBUG] [Thread-22060] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:24:50.379 [DEBUG] [Thread-22060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:24:50.379 [DEBUG] [Thread-22060] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:24:50.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:24:50.380 [DEBUG] [Thread-22060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:24:50.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:24:50.436 [DEBUG] [Thread-22060] [transport.py] [_log()] userauth is OK
2026-04-15T16:24:50.436 [DEBUG] [Thread-22060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:24:50.437 [DEBUG] [Thread-22060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:24:50.437 [DEBUG] [Thread-22060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:24:50.437 [DEBUG] [Thread-22060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:24:50.463 [INFO] [Thread-22060] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:24:50.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:24:50.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:24:51.328 [DEBUG] [Thread-22060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:24:51.328 [DEBUG] [Thread-22060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:24:51.376 [DEBUG] [Thread-22060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:24:51.376 [DEBUG] [Thread-22060] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:24:51.385 [DEBUG] [Thread-22060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:24:51.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:24:51.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')
2026-04-15T16:24: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') -> 00000000
2026-04-15T16:24:51.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:24:51.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:24:51.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:24:51.419 [DEBUG] [Thread-22060] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:24:57.230 [DEBUG] [Thread-22062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:25:12.273 [DEBUG] [Thread-22063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:25:19.918 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:25:19.920 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:25:21.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:25:21.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:25:21.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
2026-04-15T16:25:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 24, 56), 10.1575, 50.7204, 0.0, 14.4871, 14.6356, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:25:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:24:56
2026-04-15T16:25:23.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:25:23.560 [DEBUG] [Thread-22064] [transport.py] [_log()] starting thread (client mode): 0xf17c20e0
2026-04-15T16:25:23.560 [DEBUG] [Thread-22064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:25:23.583 [DEBUG] [Thread-22064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:25:23.583 [INFO] [Thread-22064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:25:23.584 [DEBUG] [Thread-22064] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:25:23.584 [DEBUG] [Thread-22064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:25:23.584 [DEBUG] [Thread-22064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:25:23.584 [DEBUG] [Thread-22064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:25:23.585 [DEBUG] [Thread-22064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:25:23.585 [DEBUG] [Thread-22064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:25:23.585 [DEBUG] [Thread-22064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:25:23.585 [DEBUG] [Thread-22064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:25:23.585 [DEBUG] [Thread-22064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:25:23.585 [DEBUG] [Thread-22064] [transport.py] [_log()] client lang: <none>
2026-04-15T16:25:23.585 [DEBUG] [Thread-22064] [transport.py] [_log()] server lang: <none>
2026-04-15T16:25:23.585 [DEBUG] [Thread-22064] [transport.py] [_log()] kex follows: False
2026-04-15T16:25:23.585 [DEBUG] [Thread-22064] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:25:23.585 [DEBUG] [Thread-22064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:25:23.585 [DEBUG] [Thread-22064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:25:23.585 [DEBUG] [Thread-22064] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:25:23.585 [DEBUG] [Thread-22064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:25:23.585 [DEBUG] [Thread-22064] [transport.py] [_log()] Compression: none
2026-04-15T16:25:23.585 [DEBUG] [Thread-22064] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:25:23.593 [DEBUG] [Thread-22064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:25:23.594 [DEBUG] [Thread-22064] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:25:23.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:25:23.594 [DEBUG] [Thread-22064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:25:23.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:25:23.595 [DEBUG] [Thread-22064] [transport.py] [_log()] userauth is OK
2026-04-15T16:25:23.595 [DEBUG] [Thread-22064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:25:23.595 [DEBUG] [Thread-22064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:25:23.595 [DEBUG] [Thread-22064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:25:23.595 [DEBUG] [Thread-22064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:25:23.613 [INFO] [Thread-22064] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:25:23.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:25:24.161 [DEBUG] [Thread-22064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:25:24.162 [DEBUG] [Thread-22064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:25:24.162 [DEBUG] [Thread-22064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:25:24.203 [DEBUG] [Thread-22064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:25:24.203 [DEBUG] [Thread-22064] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:25:24.206 [DEBUG] [Thread-22064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:25:24.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:25:24.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:25:24.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:25:24.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:25:24.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:25:24.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:25:24.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:25:24.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:25:24.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:25:24.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.600830 -999.00  +14.50  11.66     56   +5.90 1 1 1 1 1   887    0 9.46 54.11 ----- 9.2 11.7 276.5 16.6 19.3 -28.7 18.8 -27.9 19.7 -25.3 20.6 -26.9
2026-04-15T16:25:24.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:25:24.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:25:24.232 [DEBUG] [Thread-22064] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:25:24.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.600830
2026-04-15T16:25:24.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:25:24.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:25:24.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:25:24.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:25:24.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:25:24.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:24:56', tmtdew=10.1575, humidity=50.7204, cloud=0.0, wind=14.4871, temperature=14.6356, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:25:11.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:25:24.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:25:24.491 [DEBUG] [Thread-22067] [transport.py] [_log()] starting thread (client mode): 0xee926d10
2026-04-15T16:25:24.492 [DEBUG] [Thread-22067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:25:24.506 [DEBUG] [Thread-22067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:25:24.506 [INFO] [Thread-22067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:25:24.513 [DEBUG] [Thread-22067] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:25:24.513 [DEBUG] [Thread-22067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:25:24.513 [DEBUG] [Thread-22067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:25:24.513 [DEBUG] [Thread-22067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:25:24.514 [DEBUG] [Thread-22067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:25:24.514 [DEBUG] [Thread-22067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:25:24.514 [DEBUG] [Thread-22067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:25:24.514 [DEBUG] [Thread-22067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:25:24.514 [DEBUG] [Thread-22067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:25:24.514 [DEBUG] [Thread-22067] [transport.py] [_log()] client lang: <none>
2026-04-15T16:25:24.514 [DEBUG] [Thread-22067] [transport.py] [_log()] server lang: <none>
2026-04-15T16:25:24.514 [DEBUG] [Thread-22067] [transport.py] [_log()] kex follows: False
2026-04-15T16:25:24.514 [DEBUG] [Thread-22067] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:25:24.514 [DEBUG] [Thread-22067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:25:24.514 [DEBUG] [Thread-22067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:25:24.515 [DEBUG] [Thread-22067] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:25:24.515 [DEBUG] [Thread-22067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:25:24.515 [DEBUG] [Thread-22067] [transport.py] [_log()] Compression: none
2026-04-15T16:25:24.515 [DEBUG] [Thread-22067] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:25:24.572 [DEBUG] [Thread-22067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:25:24.572 [DEBUG] [Thread-22067] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:25:24.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:25:24.573 [DEBUG] [Thread-22067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:25:24.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:25:24.628 [DEBUG] [Thread-22067] [transport.py] [_log()] userauth is OK
2026-04-15T16:25:24.629 [DEBUG] [Thread-22067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:25:24.629 [DEBUG] [Thread-22067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:25:24.629 [DEBUG] [Thread-22067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:25:24.629 [DEBUG] [Thread-22067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:25:24.657 [INFO] [Thread-22067] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:25:24.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:25:24.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:25:25.500 [DEBUG] [Thread-22067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:25:25.501 [DEBUG] [Thread-22067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:25:25.548 [DEBUG] [Thread-22067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:25:25.548 [DEBUG] [Thread-22067] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:25:25.557 [DEBUG] [Thread-22067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:25:25.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:25:25.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')
2026-04-15T16:25:25.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
2026-04-15T16:25:25.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:25:25.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:25:25.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:25:25.593 [DEBUG] [Thread-22067] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:25:27.305 [DEBUG] [Thread-22069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:25:37.329 [DEBUG] [Thread-22070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:25:42.349 [DEBUG] [Thread-22071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:25:55.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:25:55.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:25:55.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
2026-04-15T16:25:56.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 25, 32), 10.1698, 50.6375, 0.0, 11.6471, 14.4865, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:25:56.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:25:32
2026-04-15T16:25:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:25:57.381 [DEBUG] [Thread-22072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:25:57.782 [DEBUG] [Thread-22073] [transport.py] [_log()] starting thread (client mode): 0xee9bf400
2026-04-15T16:25:57.782 [DEBUG] [Thread-22073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:25:57.799 [DEBUG] [Thread-22073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:25:57.799 [INFO] [Thread-22073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:25:57.800 [DEBUG] [Thread-22073] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:25:57.800 [DEBUG] [Thread-22073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:25:57.800 [DEBUG] [Thread-22073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:25:57.800 [DEBUG] [Thread-22073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:25:57.801 [DEBUG] [Thread-22073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:25:57.801 [DEBUG] [Thread-22073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:25:57.801 [DEBUG] [Thread-22073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:25:57.801 [DEBUG] [Thread-22073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:25:57.801 [DEBUG] [Thread-22073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:25:57.801 [DEBUG] [Thread-22073] [transport.py] [_log()] client lang: <none>
2026-04-15T16:25:57.801 [DEBUG] [Thread-22073] [transport.py] [_log()] server lang: <none>
2026-04-15T16:25:57.801 [DEBUG] [Thread-22073] [transport.py] [_log()] kex follows: False
2026-04-15T16:25:57.801 [DEBUG] [Thread-22073] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:25:57.801 [DEBUG] [Thread-22073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:25:57.801 [DEBUG] [Thread-22073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:25:57.801 [DEBUG] [Thread-22073] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:25:57.801 [DEBUG] [Thread-22073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:25:57.801 [DEBUG] [Thread-22073] [transport.py] [_log()] Compression: none
2026-04-15T16:25:57.801 [DEBUG] [Thread-22073] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:25:57.815 [DEBUG] [Thread-22073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:25:57.816 [DEBUG] [Thread-22073] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:25:57.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:25:57.816 [DEBUG] [Thread-22073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:25:57.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:25:57.817 [DEBUG] [Thread-22073] [transport.py] [_log()] userauth is OK
2026-04-15T16:25:57.817 [DEBUG] [Thread-22073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:25:57.817 [DEBUG] [Thread-22073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:25:57.817 [DEBUG] [Thread-22073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:25:57.817 [DEBUG] [Thread-22073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:25:57.836 [INFO] [Thread-22073] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:25:57.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:25:58.454 [DEBUG] [Thread-22073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:25:58.455 [DEBUG] [Thread-22073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:25:58.455 [DEBUG] [Thread-22073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:25:58.495 [DEBUG] [Thread-22073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:25:58.495 [DEBUG] [Thread-22073] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:25:58.498 [DEBUG] [Thread-22073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:25:58.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:25:58.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:25:58.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:25:58.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:25:58.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:25:58.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:25:58.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:25:58.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:25:58.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:25:58.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.601177 -999.00  +14.50   9.22     57   +6.30 1 1 1 1 1   887    0 9.56 53.15 ----- 8.5 9.2 300.3 13.9 19.4 -28.7 18.8 -27.9 19.8 -24.6 20.7 -26.9
2026-04-15T16:25:58.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:25:58.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:25:58.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.601177
2026-04-15T16:25:58.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:25:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:25:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:25:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:25:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:25:58.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:25:32', tmtdew=10.1698, humidity=50.6375, cloud=0.0, wind=11.6471, temperature=14.4865, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:25:41.693', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:25:58.524 [DEBUG] [Thread-22073] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:25:58.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:25:58.783 [DEBUG] [Thread-22076] [transport.py] [_log()] starting thread (client mode): 0xee9bcc70
2026-04-15T16:25:58.784 [DEBUG] [Thread-22076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:25:58.799 [DEBUG] [Thread-22076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:25:58.799 [INFO] [Thread-22076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:25:58.806 [DEBUG] [Thread-22076] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:25:58.806 [DEBUG] [Thread-22076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:25:58.806 [DEBUG] [Thread-22076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:25:58.806 [DEBUG] [Thread-22076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:25:58.807 [DEBUG] [Thread-22076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:25:58.807 [DEBUG] [Thread-22076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:25:58.807 [DEBUG] [Thread-22076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:25:58.807 [DEBUG] [Thread-22076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:25:58.807 [DEBUG] [Thread-22076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:25:58.807 [DEBUG] [Thread-22076] [transport.py] [_log()] client lang: <none>
2026-04-15T16:25:58.807 [DEBUG] [Thread-22076] [transport.py] [_log()] server lang: <none>
2026-04-15T16:25:58.807 [DEBUG] [Thread-22076] [transport.py] [_log()] kex follows: False
2026-04-15T16:25:58.807 [DEBUG] [Thread-22076] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:25:58.807 [DEBUG] [Thread-22076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:25:58.807 [DEBUG] [Thread-22076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:25:58.807 [DEBUG] [Thread-22076] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:25:58.808 [DEBUG] [Thread-22076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:25:58.808 [DEBUG] [Thread-22076] [transport.py] [_log()] Compression: none
2026-04-15T16:25:58.808 [DEBUG] [Thread-22076] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:25:58.864 [DEBUG] [Thread-22076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:25:58.865 [DEBUG] [Thread-22076] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:25:58.865 [DEBUG] [Thread-22076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:25:58.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:25:58.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:25:58.921 [DEBUG] [Thread-22076] [transport.py] [_log()] userauth is OK
2026-04-15T16:25:58.921 [DEBUG] [Thread-22076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:25:58.921 [DEBUG] [Thread-22076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:25:58.922 [DEBUG] [Thread-22076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:25:58.922 [DEBUG] [Thread-22076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:25:58.949 [INFO] [Thread-22076] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:25:58.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:25:58.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:25:59.788 [DEBUG] [Thread-22076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:25:59.788 [DEBUG] [Thread-22076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:25:59.836 [DEBUG] [Thread-22076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:25:59.836 [DEBUG] [Thread-22076] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:25:59.845 [DEBUG] [Thread-22076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:25:59.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:25:59.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')
2026-04-15T16:25:59.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
2026-04-15T16:25:59.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:25:59.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:25:59.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:25:59.880 [DEBUG] [Thread-22076] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:26:12.412 [DEBUG] [Thread-22078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:26:20.059 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:26:20.060 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:26:27.458 [DEBUG] [Thread-22079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:26:29.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:26:29.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:26:29.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
2026-04-15T16:26:31.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 26, 7), 9.91039, 51.5158, 0.0, 13.7992, 14.4371, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:26:31.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:26:07
2026-04-15T16:26:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:26:32.056 [DEBUG] [Thread-22080] [transport.py] [_log()] starting thread (client mode): 0xee91e170
2026-04-15T16:26:32.056 [DEBUG] [Thread-22080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:26:32.076 [DEBUG] [Thread-22080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:26:32.076 [INFO] [Thread-22080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:26:32.079 [DEBUG] [Thread-22080] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:26:32.080 [DEBUG] [Thread-22080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:26:32.080 [DEBUG] [Thread-22080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:26:32.080 [DEBUG] [Thread-22080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:26:32.080 [DEBUG] [Thread-22080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:26:32.080 [DEBUG] [Thread-22080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:26:32.080 [DEBUG] [Thread-22080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:26:32.080 [DEBUG] [Thread-22080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:26:32.080 [DEBUG] [Thread-22080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:26:32.080 [DEBUG] [Thread-22080] [transport.py] [_log()] client lang: <none>
2026-04-15T16:26:32.080 [DEBUG] [Thread-22080] [transport.py] [_log()] server lang: <none>
2026-04-15T16:26:32.080 [DEBUG] [Thread-22080] [transport.py] [_log()] kex follows: False
2026-04-15T16:26:32.080 [DEBUG] [Thread-22080] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:26:32.081 [DEBUG] [Thread-22080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:26:32.081 [DEBUG] [Thread-22080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:26:32.081 [DEBUG] [Thread-22080] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:26:32.081 [DEBUG] [Thread-22080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:26:32.081 [DEBUG] [Thread-22080] [transport.py] [_log()] Compression: none
2026-04-15T16:26:32.081 [DEBUG] [Thread-22080] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:26:32.097 [DEBUG] [Thread-22080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:26:32.098 [DEBUG] [Thread-22080] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:26:32.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:26:32.098 [DEBUG] [Thread-22080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:26:32.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:26:32.141 [DEBUG] [Thread-22080] [transport.py] [_log()] userauth is OK
2026-04-15T16:26:32.142 [DEBUG] [Thread-22080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:26:32.142 [DEBUG] [Thread-22080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:26:32.142 [DEBUG] [Thread-22080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:26:32.142 [DEBUG] [Thread-22080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:26:32.167 [INFO] [Thread-22080] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:26:32.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:26:32.822 [DEBUG] [Thread-22080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:26:32.823 [DEBUG] [Thread-22080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:26:32.823 [DEBUG] [Thread-22080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:26:32.863 [DEBUG] [Thread-22080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:26:32.863 [DEBUG] [Thread-22080] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:26:32.866 [DEBUG] [Thread-22080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:26:32.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:26:32.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:26:32.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:26:32.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:26:32.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:26:32.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:26:32.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:26:32.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:26:32.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:26:32.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.601524 -999.00  +14.60  11.33     57   +6.40 1 1 1 1 1   887    0 9.34 47.87 ----- 10.8 11.3 296.6 13.5 19.4 -28.4 18.9 -27.7 19.8 -24.7 20.7 -26.8
2026-04-15T16:26:32.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:26:32.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:26:32.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.601524
2026-04-15T16:26:32.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:26:32.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:26:32.894 [DEBUG] [Thread-22080] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:26:32.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:26:32.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:26:32.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:26:32.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:26:07', tmtdew=9.91039, humidity=51.5158, cloud=0.0, wind=13.7992, temperature=14.4371, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:26:11.674', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:26:33.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:26:33.153 [DEBUG] [Thread-22083] [transport.py] [_log()] starting thread (client mode): 0xee9bcfd0
2026-04-15T16:26:33.154 [DEBUG] [Thread-22083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:26:33.168 [DEBUG] [Thread-22083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:26:33.168 [INFO] [Thread-22083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:26:33.175 [DEBUG] [Thread-22083] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:26:33.175 [DEBUG] [Thread-22083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:26:33.175 [DEBUG] [Thread-22083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:26:33.175 [DEBUG] [Thread-22083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:26:33.175 [DEBUG] [Thread-22083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:26:33.176 [DEBUG] [Thread-22083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:26:33.176 [DEBUG] [Thread-22083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:26:33.176 [DEBUG] [Thread-22083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:26:33.176 [DEBUG] [Thread-22083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:26:33.176 [DEBUG] [Thread-22083] [transport.py] [_log()] client lang: <none>
2026-04-15T16:26:33.176 [DEBUG] [Thread-22083] [transport.py] [_log()] server lang: <none>
2026-04-15T16:26:33.176 [DEBUG] [Thread-22083] [transport.py] [_log()] kex follows: False
2026-04-15T16:26:33.176 [DEBUG] [Thread-22083] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:26:33.176 [DEBUG] [Thread-22083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:26:33.176 [DEBUG] [Thread-22083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:26:33.176 [DEBUG] [Thread-22083] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:26:33.177 [DEBUG] [Thread-22083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:26:33.177 [DEBUG] [Thread-22083] [transport.py] [_log()] Compression: none
2026-04-15T16:26:33.177 [DEBUG] [Thread-22083] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:26:33.234 [DEBUG] [Thread-22083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:26:33.234 [DEBUG] [Thread-22083] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:26:33.235 [DEBUG] [Thread-22083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:26:33.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:26:33.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:26:33.293 [DEBUG] [Thread-22083] [transport.py] [_log()] userauth is OK
2026-04-15T16:26:33.293 [DEBUG] [Thread-22083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:26:33.294 [DEBUG] [Thread-22083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:26:33.294 [DEBUG] [Thread-22083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:26:33.294 [DEBUG] [Thread-22083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:26:33.319 [INFO] [Thread-22083] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:26:33.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:26:33.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:26:34.131 [DEBUG] [Thread-22083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:26:34.132 [DEBUG] [Thread-22083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:26:34.179 [DEBUG] [Thread-22083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:26:34.179 [DEBUG] [Thread-22083] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:26:34.194 [DEBUG] [Thread-22083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:26:34.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:26:34.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')
2026-04-15T16:26:34.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
2026-04-15T16:26:34.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:26:34.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:26:34.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:26:34.229 [DEBUG] [Thread-22083] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:26:37.418 [DEBUG] [Thread-22085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:26:42.490 [DEBUG] [Thread-22086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:26:57.535 [DEBUG] [Thread-22087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:27:04.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:27:04.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:27:04.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T16:27:05.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 26, 42), 9.9268, 51.5225, 0.0, 24.3821, 15.4386, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:27:05.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:26:42
2026-04-15T16:27:05.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:27:06.396 [DEBUG] [Thread-22088] [transport.py] [_log()] starting thread (client mode): 0xee90e470
2026-04-15T16:27:06.396 [DEBUG] [Thread-22088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:27:06.416 [DEBUG] [Thread-22088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:27:06.416 [INFO] [Thread-22088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:27:06.419 [DEBUG] [Thread-22088] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:27:06.419 [DEBUG] [Thread-22088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:27:06.419 [DEBUG] [Thread-22088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:27:06.419 [DEBUG] [Thread-22088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:27:06.419 [DEBUG] [Thread-22088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:27:06.419 [DEBUG] [Thread-22088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:27:06.419 [DEBUG] [Thread-22088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:27:06.419 [DEBUG] [Thread-22088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:27:06.420 [DEBUG] [Thread-22088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:27:06.420 [DEBUG] [Thread-22088] [transport.py] [_log()] client lang: <none>
2026-04-15T16:27:06.420 [DEBUG] [Thread-22088] [transport.py] [_log()] server lang: <none>
2026-04-15T16:27:06.420 [DEBUG] [Thread-22088] [transport.py] [_log()] kex follows: False
2026-04-15T16:27:06.420 [DEBUG] [Thread-22088] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:27:06.420 [DEBUG] [Thread-22088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:27:06.420 [DEBUG] [Thread-22088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:27:06.420 [DEBUG] [Thread-22088] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:27:06.420 [DEBUG] [Thread-22088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:27:06.420 [DEBUG] [Thread-22088] [transport.py] [_log()] Compression: none
2026-04-15T16:27:06.420 [DEBUG] [Thread-22088] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:27:06.436 [DEBUG] [Thread-22088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:27:06.436 [DEBUG] [Thread-22088] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:27:06.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:27:06.437 [DEBUG] [Thread-22088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:27:06.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:27:06.477 [DEBUG] [Thread-22088] [transport.py] [_log()] userauth is OK
2026-04-15T16:27:06.477 [DEBUG] [Thread-22088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:27:06.477 [DEBUG] [Thread-22088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:27:06.477 [DEBUG] [Thread-22088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:27:06.478 [DEBUG] [Thread-22088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:27:06.508 [INFO] [Thread-22088] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:27:06.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:27:07.143 [DEBUG] [Thread-22088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:27:07.143 [DEBUG] [Thread-22088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:27:07.143 [DEBUG] [Thread-22088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:27:07.184 [DEBUG] [Thread-22088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:27:07.184 [DEBUG] [Thread-22088] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:27:07.187 [DEBUG] [Thread-22088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:27:07.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:27:07.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:27:07.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:27:07.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:27:07.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:27:07.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:27:07.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:27:07.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:27:07.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:27:07.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.601872 -999.00  +14.70  16.10     58   +6.60 1 1 1 1 1   887    0 9.78 54.87 ----- 15.1 16.1 292.4 22.6 19.5 -29.6 18.8 -28.3 19.9 -26.5 20.8 -27.1
2026-04-15T16:27:07.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:27:07.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:27:07.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.601872
2026-04-15T16:27:07.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:27:07.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:27:07.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:27:07.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:27:07.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:27:07.213 [DEBUG] [Thread-22088] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:27:07.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:26:42', tmtdew=9.9268, humidity=51.5225, cloud=0.0, wind=24.3821, temperature=15.4386, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:26:41.741', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:27:07.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:27:07.459 [DEBUG] [Thread-22091] [transport.py] [_log()] starting thread (client mode): 0xee90e3e0
2026-04-15T16:27:07.459 [DEBUG] [Thread-22091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:27:07.473 [DEBUG] [Thread-22091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:27:07.473 [INFO] [Thread-22091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:27:07.481 [DEBUG] [Thread-22091] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:27:07.481 [DEBUG] [Thread-22091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:27:07.481 [DEBUG] [Thread-22091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:27:07.481 [DEBUG] [Thread-22091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:27:07.481 [DEBUG] [Thread-22091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:27:07.481 [DEBUG] [Thread-22091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:27:07.481 [DEBUG] [Thread-22091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:27:07.481 [DEBUG] [Thread-22091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:27:07.481 [DEBUG] [Thread-22091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:27:07.481 [DEBUG] [Thread-22091] [transport.py] [_log()] client lang: <none>
2026-04-15T16:27:07.481 [DEBUG] [Thread-22091] [transport.py] [_log()] server lang: <none>
2026-04-15T16:27:07.481 [DEBUG] [Thread-22091] [transport.py] [_log()] kex follows: False
2026-04-15T16:27:07.481 [DEBUG] [Thread-22091] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:27:07.481 [DEBUG] [Thread-22091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:27:07.481 [DEBUG] [Thread-22091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:27:07.482 [DEBUG] [Thread-22091] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:27:07.482 [DEBUG] [Thread-22091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:27:07.482 [DEBUG] [Thread-22091] [transport.py] [_log()] Compression: none
2026-04-15T16:27:07.482 [DEBUG] [Thread-22091] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:27:07.541 [DEBUG] [Thread-22091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:27:07.541 [DEBUG] [Thread-22091] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:27:07.542 [DEBUG] [Thread-22091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:27:07.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:27:07.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:27:07.601 [DEBUG] [Thread-22091] [transport.py] [_log()] userauth is OK
2026-04-15T16:27:07.601 [DEBUG] [Thread-22091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:27:07.602 [DEBUG] [Thread-22091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:27:07.602 [DEBUG] [Thread-22091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:27:07.602 [DEBUG] [Thread-22091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:27:07.628 [INFO] [Thread-22091] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:27:07.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:27:07.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:27:08.490 [DEBUG] [Thread-22091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:27:08.490 [DEBUG] [Thread-22091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:27:08.538 [DEBUG] [Thread-22091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:27:08.538 [DEBUG] [Thread-22091] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:27:08.547 [DEBUG] [Thread-22091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:27:08.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:27:08.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')
2026-04-15T16:27:08.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
2026-04-15T16:27:08.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:27:08.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:27:08.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:27:08.582 [DEBUG] [Thread-22091] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:27:12.567 [DEBUG] [Thread-22093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:27:20.200 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:27:20.201 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:27:27.610 [DEBUG] [Thread-22094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:27:37.508 [DEBUG] [Thread-22095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:27:38.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:27:38.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:27:38.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
2026-04-15T16:27:39.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 27, 18), 9.91494, 51.3666, 0.0, 18.4385, 14.7861, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:27:39.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:27:18
2026-04-15T16:27:40.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:27:40.800 [DEBUG] [Thread-22096] [transport.py] [_log()] starting thread (client mode): 0xee90cd90
2026-04-15T16:27:40.800 [DEBUG] [Thread-22096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:27:40.820 [DEBUG] [Thread-22096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:27:40.820 [INFO] [Thread-22096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:27:40.823 [DEBUG] [Thread-22096] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:27:40.823 [DEBUG] [Thread-22096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:27:40.823 [DEBUG] [Thread-22096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:27:40.824 [DEBUG] [Thread-22096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:27:40.824 [DEBUG] [Thread-22096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:27:40.824 [DEBUG] [Thread-22096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:27:40.824 [DEBUG] [Thread-22096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:27:40.824 [DEBUG] [Thread-22096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:27:40.824 [DEBUG] [Thread-22096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:27:40.824 [DEBUG] [Thread-22096] [transport.py] [_log()] client lang: <none>
2026-04-15T16:27:40.824 [DEBUG] [Thread-22096] [transport.py] [_log()] server lang: <none>
2026-04-15T16:27:40.824 [DEBUG] [Thread-22096] [transport.py] [_log()] kex follows: False
2026-04-15T16:27:40.824 [DEBUG] [Thread-22096] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:27:40.824 [DEBUG] [Thread-22096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:27:40.824 [DEBUG] [Thread-22096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:27:40.825 [DEBUG] [Thread-22096] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:27:40.825 [DEBUG] [Thread-22096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:27:40.825 [DEBUG] [Thread-22096] [transport.py] [_log()] Compression: none
2026-04-15T16:27:40.825 [DEBUG] [Thread-22096] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:27:40.843 [DEBUG] [Thread-22096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:27:40.843 [DEBUG] [Thread-22096] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:27:40.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:27:40.844 [DEBUG] [Thread-22096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:27:40.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:27:40.845 [DEBUG] [Thread-22096] [transport.py] [_log()] userauth is OK
2026-04-15T16:27:40.845 [DEBUG] [Thread-22096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:27:40.845 [DEBUG] [Thread-22096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:27:40.845 [DEBUG] [Thread-22096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:27:40.846 [DEBUG] [Thread-22096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:27:40.880 [INFO] [Thread-22096] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:27:40.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:27:41.515 [DEBUG] [Thread-22096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:27:41.515 [DEBUG] [Thread-22096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:27:41.515 [DEBUG] [Thread-22096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:27:41.556 [DEBUG] [Thread-22096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:27:41.556 [DEBUG] [Thread-22096] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:27:41.559 [DEBUG] [Thread-22096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:27:41.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:27:41.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:27:41.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:27:41.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:27:41.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:27:41.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:27:41.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:27:41.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:27:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:27:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.602219 -999.00  +14.70  21.56     57   +6.50 1 1 1 1 1   887    0 9.63 51.70 ----- 21.7 21.6 332.4 23.1 19.4 -29.6 18.8 -28.6 19.8 -26.6 20.7 -27.3
2026-04-15T16:27:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:27:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:27:41.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.602219
2026-04-15T16:27:41.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:27:41.585 [DEBUG] [Thread-22096] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:27:41.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:27:41.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:27:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:27:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:27:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:27:18', tmtdew=9.91494, humidity=51.3666, cloud=0.0, wind=18.4385, temperature=14.7861, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:27:11.722', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:27:41.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:27:41.836 [DEBUG] [Thread-22099] [transport.py] [_log()] starting thread (client mode): 0xee90ef20
2026-04-15T16:27:41.836 [DEBUG] [Thread-22099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:27:41.851 [DEBUG] [Thread-22099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:27:41.851 [INFO] [Thread-22099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:27:41.858 [DEBUG] [Thread-22099] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:27:41.858 [DEBUG] [Thread-22099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:27:41.858 [DEBUG] [Thread-22099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:27:41.859 [DEBUG] [Thread-22099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:27:41.859 [DEBUG] [Thread-22099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:27:41.859 [DEBUG] [Thread-22099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:27:41.859 [DEBUG] [Thread-22099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:27:41.859 [DEBUG] [Thread-22099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:27:41.859 [DEBUG] [Thread-22099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:27:41.859 [DEBUG] [Thread-22099] [transport.py] [_log()] client lang: <none>
2026-04-15T16:27:41.859 [DEBUG] [Thread-22099] [transport.py] [_log()] server lang: <none>
2026-04-15T16:27:41.859 [DEBUG] [Thread-22099] [transport.py] [_log()] kex follows: False
2026-04-15T16:27:41.859 [DEBUG] [Thread-22099] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:27:41.859 [DEBUG] [Thread-22099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:27:41.859 [DEBUG] [Thread-22099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:27:41.859 [DEBUG] [Thread-22099] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:27:41.860 [DEBUG] [Thread-22099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:27:41.860 [DEBUG] [Thread-22099] [transport.py] [_log()] Compression: none
2026-04-15T16:27:41.860 [DEBUG] [Thread-22099] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:27:41.917 [DEBUG] [Thread-22099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:27:41.917 [DEBUG] [Thread-22099] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:27:41.918 [DEBUG] [Thread-22099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:27:41.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:27:41.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:27:41.974 [DEBUG] [Thread-22099] [transport.py] [_log()] userauth is OK
2026-04-15T16:27:41.974 [DEBUG] [Thread-22099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:27:41.975 [DEBUG] [Thread-22099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:27:41.975 [DEBUG] [Thread-22099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:27:41.975 [DEBUG] [Thread-22099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:27:42.001 [INFO] [Thread-22099] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:27:42.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:27:42.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:27:42.642 [DEBUG] [Thread-22101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:27:42.823 [DEBUG] [Thread-22099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:27:42.823 [DEBUG] [Thread-22099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:27:42.876 [DEBUG] [Thread-22099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:27:42.876 [DEBUG] [Thread-22099] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:27:42.891 [DEBUG] [Thread-22099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:27:42.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:27:42.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')
2026-04-15T16:27:42.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
2026-04-15T16:27:42.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:27:42.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:27:42.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:27:42.926 [DEBUG] [Thread-22099] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:27:57.688 [DEBUG] [Thread-22102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:28:12.724 [DEBUG] [Thread-22103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:28:12.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:28:12.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:28:12.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
2026-04-15T16:28:14.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 27, 54), 10.1937, 50.4953, 0.0, 27.4867, 15.1403, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:28:14.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:27:54
2026-04-15T16:28:14.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:28:15.041 [DEBUG] [Thread-22104] [transport.py] [_log()] starting thread (client mode): 0xf17c2e60
2026-04-15T16:28:15.041 [DEBUG] [Thread-22104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:28:15.061 [DEBUG] [Thread-22104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:28:15.061 [INFO] [Thread-22104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:28:15.064 [DEBUG] [Thread-22104] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:28:15.064 [DEBUG] [Thread-22104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:28:15.064 [DEBUG] [Thread-22104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:28:15.064 [DEBUG] [Thread-22104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:28:15.065 [DEBUG] [Thread-22104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:28:15.065 [DEBUG] [Thread-22104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:28:15.065 [DEBUG] [Thread-22104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:28:15.065 [DEBUG] [Thread-22104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:28:15.065 [DEBUG] [Thread-22104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:28:15.065 [DEBUG] [Thread-22104] [transport.py] [_log()] client lang: <none>
2026-04-15T16:28:15.065 [DEBUG] [Thread-22104] [transport.py] [_log()] server lang: <none>
2026-04-15T16:28:15.065 [DEBUG] [Thread-22104] [transport.py] [_log()] kex follows: False
2026-04-15T16:28:15.065 [DEBUG] [Thread-22104] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:28:15.065 [DEBUG] [Thread-22104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:28:15.065 [DEBUG] [Thread-22104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:28:15.066 [DEBUG] [Thread-22104] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:28:15.066 [DEBUG] [Thread-22104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:28:15.066 [DEBUG] [Thread-22104] [transport.py] [_log()] Compression: none
2026-04-15T16:28:15.066 [DEBUG] [Thread-22104] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:28:15.083 [DEBUG] [Thread-22104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:28:15.083 [DEBUG] [Thread-22104] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:28:15.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:28:15.084 [DEBUG] [Thread-22104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:28:15.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:28:15.085 [DEBUG] [Thread-22104] [transport.py] [_log()] userauth is OK
2026-04-15T16:28:15.085 [DEBUG] [Thread-22104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:28:15.085 [DEBUG] [Thread-22104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:28:15.085 [DEBUG] [Thread-22104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:28:15.085 [DEBUG] [Thread-22104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:28:15.109 [INFO] [Thread-22104] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:28:15.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:28:15.732 [DEBUG] [Thread-22104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:28:15.733 [DEBUG] [Thread-22104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:28:15.733 [DEBUG] [Thread-22104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:28:15.773 [DEBUG] [Thread-22104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:28:15.773 [DEBUG] [Thread-22104] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:28:15.776 [DEBUG] [Thread-22104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:28:15.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:28:15.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:28:15.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:28:15.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:28:15.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:28:15.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:28:15.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:28:15.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:28:15.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:28:15.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.602566 -999.00  +14.50  15.50     58   +6.40 1 1 1 1 1   887    0 9.54 52.78 ----- 18.8 15.5 304.6 23.3 19.4 -29.6 18.8 -28.6 19.8 -25.3 20.8 -27.3
2026-04-15T16:28:15.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:28:15.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:28:15.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.602566
2026-04-15T16:28:15.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:28:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:28:15.801 [DEBUG] [Thread-22104] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:28:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:28:15.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:28:15.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:28:15.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:27:54', tmtdew=10.1937, humidity=50.4953, cloud=0.0, wind=27.4867, temperature=15.1403, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:27:41.702', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:28:16.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:28:16.062 [DEBUG] [Thread-22107] [transport.py] [_log()] starting thread (client mode): 0xf17c2440
2026-04-15T16:28:16.062 [DEBUG] [Thread-22107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:28:16.077 [DEBUG] [Thread-22107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:28:16.077 [INFO] [Thread-22107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:28:16.084 [DEBUG] [Thread-22107] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:28:16.084 [DEBUG] [Thread-22107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:28:16.085 [DEBUG] [Thread-22107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:28:16.085 [DEBUG] [Thread-22107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:28:16.085 [DEBUG] [Thread-22107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:28:16.085 [DEBUG] [Thread-22107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:28:16.085 [DEBUG] [Thread-22107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:28:16.085 [DEBUG] [Thread-22107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:28:16.085 [DEBUG] [Thread-22107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:28:16.085 [DEBUG] [Thread-22107] [transport.py] [_log()] client lang: <none>
2026-04-15T16:28:16.085 [DEBUG] [Thread-22107] [transport.py] [_log()] server lang: <none>
2026-04-15T16:28:16.085 [DEBUG] [Thread-22107] [transport.py] [_log()] kex follows: False
2026-04-15T16:28:16.085 [DEBUG] [Thread-22107] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:28:16.085 [DEBUG] [Thread-22107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:28:16.086 [DEBUG] [Thread-22107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:28:16.086 [DEBUG] [Thread-22107] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:28:16.086 [DEBUG] [Thread-22107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:28:16.086 [DEBUG] [Thread-22107] [transport.py] [_log()] Compression: none
2026-04-15T16:28:16.086 [DEBUG] [Thread-22107] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:28:16.141 [DEBUG] [Thread-22107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:28:16.141 [DEBUG] [Thread-22107] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:28:16.142 [DEBUG] [Thread-22107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:28:16.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:28:16.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:28:16.199 [DEBUG] [Thread-22107] [transport.py] [_log()] userauth is OK
2026-04-15T16:28:16.199 [DEBUG] [Thread-22107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:28:16.199 [DEBUG] [Thread-22107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:28:16.199 [DEBUG] [Thread-22107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:28:16.199 [DEBUG] [Thread-22107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:28:16.221 [INFO] [Thread-22107] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:28:16.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:28:16.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:28:17.054 [DEBUG] [Thread-22107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:28:17.054 [DEBUG] [Thread-22107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:28:17.101 [DEBUG] [Thread-22107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:28:17.102 [DEBUG] [Thread-22107] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:28:17.110 [DEBUG] [Thread-22107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:28:17.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:28:17.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')
2026-04-15T16:28:17.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
2026-04-15T16:28:17.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:28:17.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:28:17.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:28:17.149 [DEBUG] [Thread-22107] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:28:20.343 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:28:20.344 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:28:27.756 [DEBUG] [Thread-22109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:28:37.584 [DEBUG] [Thread-22110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:28:42.798 [DEBUG] [Thread-22111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:28:47.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:28:47.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:28:47.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
2026-04-15T16:28:48.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 28, 29), 9.74389, 51.7777, 0.0, 21.2094, 14.6204, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:28:48.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:28:29
2026-04-15T16:28:48.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:28:49.271 [DEBUG] [Thread-22112] [transport.py] [_log()] starting thread (client mode): 0xf17c1f30
2026-04-15T16:28:49.271 [DEBUG] [Thread-22112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:28:49.292 [DEBUG] [Thread-22112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:28:49.292 [INFO] [Thread-22112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:28:49.295 [DEBUG] [Thread-22112] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:28:49.295 [DEBUG] [Thread-22112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:28:49.296 [DEBUG] [Thread-22112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:28:49.296 [DEBUG] [Thread-22112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:28:49.296 [DEBUG] [Thread-22112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:28:49.296 [DEBUG] [Thread-22112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:28:49.296 [DEBUG] [Thread-22112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:28:49.296 [DEBUG] [Thread-22112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:28:49.296 [DEBUG] [Thread-22112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:28:49.296 [DEBUG] [Thread-22112] [transport.py] [_log()] client lang: <none>
2026-04-15T16:28:49.296 [DEBUG] [Thread-22112] [transport.py] [_log()] server lang: <none>
2026-04-15T16:28:49.297 [DEBUG] [Thread-22112] [transport.py] [_log()] kex follows: False
2026-04-15T16:28:49.297 [DEBUG] [Thread-22112] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:28:49.297 [DEBUG] [Thread-22112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:28:49.297 [DEBUG] [Thread-22112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:28:49.297 [DEBUG] [Thread-22112] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:28:49.297 [DEBUG] [Thread-22112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:28:49.297 [DEBUG] [Thread-22112] [transport.py] [_log()] Compression: none
2026-04-15T16:28:49.297 [DEBUG] [Thread-22112] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:28:49.313 [DEBUG] [Thread-22112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:28:49.314 [DEBUG] [Thread-22112] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:28:49.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:28:49.314 [DEBUG] [Thread-22112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:28:49.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:28:49.316 [DEBUG] [Thread-22112] [transport.py] [_log()] userauth is OK
2026-04-15T16:28:49.316 [DEBUG] [Thread-22112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:28:49.316 [DEBUG] [Thread-22112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:28:49.316 [DEBUG] [Thread-22112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:28:49.316 [DEBUG] [Thread-22112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:28:49.341 [INFO] [Thread-22112] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:28:49.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:28:49.986 [DEBUG] [Thread-22112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:28:49.987 [DEBUG] [Thread-22112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:28:49.987 [DEBUG] [Thread-22112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:28:50.027 [DEBUG] [Thread-22112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:28:50.027 [DEBUG] [Thread-22112] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:28:50.030 [DEBUG] [Thread-22112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:28:50.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:28:50.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:28:50.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:28:50.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:28:50.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:28:50.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:28:50.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:28:50.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:28:50.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:28:50.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.602913 -999.00  +14.60  23.65     58   +6.60 1 1 1 1 1   887    0 9.36 48.35 ----- 22.3 23.6 323.0 26.9 19.4 -29.6 18.7 -28.1 19.7 -26.7 20.6 -27.6
2026-04-15T16:28:50.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:28:50.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:28:50.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.602913
2026-04-15T16:28:50.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:28:50.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:28:50.054 [DEBUG] [Thread-22112] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:28:50.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:28:50.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:28:50.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:28:50.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:28:29', tmtdew=9.74389, humidity=51.7777, cloud=0.0, wind=21.2094, temperature=14.6204, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:28:11.683', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:28:50.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:28:50.284 [DEBUG] [Thread-22115] [transport.py] [_log()] starting thread (client mode): 0xf13fec80
2026-04-15T16:28:50.284 [DEBUG] [Thread-22115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:28:50.299 [DEBUG] [Thread-22115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:28:50.299 [INFO] [Thread-22115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:28:50.306 [DEBUG] [Thread-22115] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:28:50.306 [DEBUG] [Thread-22115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:28:50.306 [DEBUG] [Thread-22115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:28:50.306 [DEBUG] [Thread-22115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:28:50.306 [DEBUG] [Thread-22115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:28:50.306 [DEBUG] [Thread-22115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:28:50.307 [DEBUG] [Thread-22115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:28:50.307 [DEBUG] [Thread-22115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:28:50.307 [DEBUG] [Thread-22115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:28:50.307 [DEBUG] [Thread-22115] [transport.py] [_log()] client lang: <none>
2026-04-15T16:28:50.307 [DEBUG] [Thread-22115] [transport.py] [_log()] server lang: <none>
2026-04-15T16:28:50.307 [DEBUG] [Thread-22115] [transport.py] [_log()] kex follows: False
2026-04-15T16:28:50.307 [DEBUG] [Thread-22115] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:28:50.307 [DEBUG] [Thread-22115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:28:50.307 [DEBUG] [Thread-22115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:28:50.307 [DEBUG] [Thread-22115] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:28:50.307 [DEBUG] [Thread-22115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:28:50.308 [DEBUG] [Thread-22115] [transport.py] [_log()] Compression: none
2026-04-15T16:28:50.308 [DEBUG] [Thread-22115] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:28:50.369 [DEBUG] [Thread-22115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:28:50.370 [DEBUG] [Thread-22115] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:28:50.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:28:50.371 [DEBUG] [Thread-22115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:28:50.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:28:50.427 [DEBUG] [Thread-22115] [transport.py] [_log()] userauth is OK
2026-04-15T16:28:50.428 [DEBUG] [Thread-22115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:28:50.428 [DEBUG] [Thread-22115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:28:50.428 [DEBUG] [Thread-22115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:28:50.428 [DEBUG] [Thread-22115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:28:50.455 [INFO] [Thread-22115] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:28:50.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:28:50.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:28:51.269 [DEBUG] [Thread-22115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:28:51.269 [DEBUG] [Thread-22115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:28:51.317 [DEBUG] [Thread-22115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:28:51.317 [DEBUG] [Thread-22115] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:28:51.326 [DEBUG] [Thread-22115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:28:51.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:28:51.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')
2026-04-15T16:28:51.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
2026-04-15T16:28:51.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:28:51.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:28:51.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:28:51.360 [DEBUG] [Thread-22115] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:28:57.830 [DEBUG] [Thread-22117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:29:12.877 [DEBUG] [Thread-22118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:29:20.486 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:29:20.487 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:29:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:29:21.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:29:21.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
2026-04-15T16:29:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 29, 5), 9.69998, 51.9268, 0.0, 19.7276, 14.5872, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:29:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:29:05
2026-04-15T16:29:23.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:29:23.531 [DEBUG] [Thread-22119] [transport.py] [_log()] starting thread (client mode): 0xee90f550
2026-04-15T16:29:23.531 [DEBUG] [Thread-22119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:29:23.552 [DEBUG] [Thread-22119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:29:23.552 [INFO] [Thread-22119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:29:23.555 [DEBUG] [Thread-22119] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:29:23.555 [DEBUG] [Thread-22119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:29:23.555 [DEBUG] [Thread-22119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:29:23.555 [DEBUG] [Thread-22119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:29:23.555 [DEBUG] [Thread-22119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:29:23.556 [DEBUG] [Thread-22119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:29:23.556 [DEBUG] [Thread-22119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:29:23.556 [DEBUG] [Thread-22119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:29:23.556 [DEBUG] [Thread-22119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:29:23.556 [DEBUG] [Thread-22119] [transport.py] [_log()] client lang: <none>
2026-04-15T16:29:23.556 [DEBUG] [Thread-22119] [transport.py] [_log()] server lang: <none>
2026-04-15T16:29:23.556 [DEBUG] [Thread-22119] [transport.py] [_log()] kex follows: False
2026-04-15T16:29:23.556 [DEBUG] [Thread-22119] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:29:23.556 [DEBUG] [Thread-22119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:29:23.556 [DEBUG] [Thread-22119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:29:23.556 [DEBUG] [Thread-22119] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:29:23.556 [DEBUG] [Thread-22119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:29:23.557 [DEBUG] [Thread-22119] [transport.py] [_log()] Compression: none
2026-04-15T16:29:23.557 [DEBUG] [Thread-22119] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:29:23.574 [DEBUG] [Thread-22119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:29:23.574 [DEBUG] [Thread-22119] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:29:23.575 [DEBUG] [Thread-22119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:29:23.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:29:23.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:29:23.576 [DEBUG] [Thread-22119] [transport.py] [_log()] userauth is OK
2026-04-15T16:29:23.576 [DEBUG] [Thread-22119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:29:23.576 [DEBUG] [Thread-22119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:29:23.576 [DEBUG] [Thread-22119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:29:23.577 [DEBUG] [Thread-22119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:29:23.600 [INFO] [Thread-22119] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:29:23.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:29:24.198 [DEBUG] [Thread-22119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:29:24.198 [DEBUG] [Thread-22119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:29:24.199 [DEBUG] [Thread-22119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:29:24.239 [DEBUG] [Thread-22119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:29:24.239 [DEBUG] [Thread-22119] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:29:24.242 [DEBUG] [Thread-22119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:29:24.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:29:24.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:29:24.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:29:24.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:29:24.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:29:24.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:29:24.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:29:24.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:29:24.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:29:24.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.603608 -999.00  +14.40  16.52     58   +6.30 1 1 1 1 1   887    0 9.25 42.39 ----- 17.1 16.5 327.8 21.9 19.3 -30.1 18.7 -28.6 19.7 -26.6 20.6 -27.5
2026-04-15T16:29:24.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:29:24.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:29:24.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.603608
2026-04-15T16:29:24.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:29:24.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:29:24.266 [DEBUG] [Thread-22119] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:29:24.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:29:24.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:29:24.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:29:24.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:29:05', tmtdew=9.69998, humidity=51.9268, cloud=0.0, wind=19.7276, temperature=14.5872, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:29:11.731', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:29:24.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:29:24.524 [DEBUG] [Thread-22122] [transport.py] [_log()] starting thread (client mode): 0xee90e470
2026-04-15T16:29:24.524 [DEBUG] [Thread-22122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:29:24.538 [DEBUG] [Thread-22122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:29:24.538 [INFO] [Thread-22122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:29:24.545 [DEBUG] [Thread-22122] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:29:24.545 [DEBUG] [Thread-22122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:29:24.545 [DEBUG] [Thread-22122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:29:24.545 [DEBUG] [Thread-22122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:29:24.545 [DEBUG] [Thread-22122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:29:24.546 [DEBUG] [Thread-22122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:29:24.546 [DEBUG] [Thread-22122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:29:24.546 [DEBUG] [Thread-22122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:29:24.546 [DEBUG] [Thread-22122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:29:24.546 [DEBUG] [Thread-22122] [transport.py] [_log()] client lang: <none>
2026-04-15T16:29:24.546 [DEBUG] [Thread-22122] [transport.py] [_log()] server lang: <none>
2026-04-15T16:29:24.546 [DEBUG] [Thread-22122] [transport.py] [_log()] kex follows: False
2026-04-15T16:29:24.546 [DEBUG] [Thread-22122] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:29:24.546 [DEBUG] [Thread-22122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:29:24.546 [DEBUG] [Thread-22122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:29:24.546 [DEBUG] [Thread-22122] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:29:24.547 [DEBUG] [Thread-22122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:29:24.547 [DEBUG] [Thread-22122] [transport.py] [_log()] Compression: none
2026-04-15T16:29:24.547 [DEBUG] [Thread-22122] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:29:24.602 [DEBUG] [Thread-22122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:29:24.603 [DEBUG] [Thread-22122] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:29:24.603 [DEBUG] [Thread-22122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:29:24.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:29:24.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:29:24.659 [DEBUG] [Thread-22122] [transport.py] [_log()] userauth is OK
2026-04-15T16:29:24.659 [DEBUG] [Thread-22122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:29:24.660 [DEBUG] [Thread-22122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:29:24.660 [DEBUG] [Thread-22122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:29:24.660 [DEBUG] [Thread-22122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:29:24.688 [INFO] [Thread-22122] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:29:24.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:29:24.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:29:25.501 [DEBUG] [Thread-22122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:29:25.501 [DEBUG] [Thread-22122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:29:25.549 [DEBUG] [Thread-22122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:29:25.549 [DEBUG] [Thread-22122] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:29:25.558 [DEBUG] [Thread-22122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:29:25.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:29:25.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')
2026-04-15T16:29:25.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
2026-04-15T16:29:25.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:29:25.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:29:25.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:29:25.592 [DEBUG] [Thread-22122] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:29:27.909 [DEBUG] [Thread-22124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:29:37.690 [DEBUG] [Thread-22125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:29:42.952 [DEBUG] [Thread-22126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:29:55.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:29:55.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:29:55.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
2026-04-15T16:29:56.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 29, 41), 10.1672, 50.5614, 0.0, 20.8541, 15.0407, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:29:56.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:29:41
2026-04-15T16:29:57.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:29:57.667 [DEBUG] [Thread-22127] [transport.py] [_log()] starting thread (client mode): 0xee9bfd90
2026-04-15T16:29:57.668 [DEBUG] [Thread-22127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:29:57.688 [DEBUG] [Thread-22127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:29:57.688 [INFO] [Thread-22127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:29:57.691 [DEBUG] [Thread-22127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:29:57.691 [DEBUG] [Thread-22127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:29:57.691 [DEBUG] [Thread-22127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:29:57.691 [DEBUG] [Thread-22127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:29:57.691 [DEBUG] [Thread-22127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:29:57.692 [DEBUG] [Thread-22127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:29:57.692 [DEBUG] [Thread-22127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:29:57.692 [DEBUG] [Thread-22127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:29:57.692 [DEBUG] [Thread-22127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:29:57.692 [DEBUG] [Thread-22127] [transport.py] [_log()] client lang: <none>
2026-04-15T16:29:57.692 [DEBUG] [Thread-22127] [transport.py] [_log()] server lang: <none>
2026-04-15T16:29:57.692 [DEBUG] [Thread-22127] [transport.py] [_log()] kex follows: False
2026-04-15T16:29:57.692 [DEBUG] [Thread-22127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:29:57.692 [DEBUG] [Thread-22127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:29:57.692 [DEBUG] [Thread-22127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:29:57.692 [DEBUG] [Thread-22127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:29:57.692 [DEBUG] [Thread-22127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:29:57.693 [DEBUG] [Thread-22127] [transport.py] [_log()] Compression: none
2026-04-15T16:29:57.693 [DEBUG] [Thread-22127] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:29:57.709 [DEBUG] [Thread-22127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:29:57.710 [DEBUG] [Thread-22127] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:29:57.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:29:57.710 [DEBUG] [Thread-22127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:29:57.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:29:57.712 [DEBUG] [Thread-22127] [transport.py] [_log()] userauth is OK
2026-04-15T16:29:57.712 [DEBUG] [Thread-22127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:29:57.712 [DEBUG] [Thread-22127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:29:57.712 [DEBUG] [Thread-22127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:29:57.712 [DEBUG] [Thread-22127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:29:57.727 [INFO] [Thread-22127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:29:57.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:29:57.986 [DEBUG] [Thread-22129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:29:58.346 [DEBUG] [Thread-22127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:29:58.346 [DEBUG] [Thread-22127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:29:58.347 [DEBUG] [Thread-22127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:29:58.387 [DEBUG] [Thread-22127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:29:58.387 [DEBUG] [Thread-22127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:29:58.390 [DEBUG] [Thread-22127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:29:58.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:29:58.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:29:58.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:29:58.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:29:58.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:29:58.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:29:58.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:29:58.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:29:58.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:29:58.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.603955 -999.00  +14.30  14.65     58   +6.20 1 1 1 1 1   887    0 9.13 41.62 ----- 15.2 14.7 308.6 20.5 19.3 -29.3 18.7 -28.6 19.8 -25.8 20.6 -27.0
2026-04-15T16:29:58.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:29:58.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:29:58.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.603955
2026-04-15T16:29:58.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:29:58.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:29:58.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:29:58.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:29:58.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:29:58.416 [DEBUG] [Thread-22127] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:29:58.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:29:41', tmtdew=10.1672, humidity=50.5614, cloud=0.0, wind=20.8541, temperature=15.0407, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:29:41.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:29:58.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:29:58.670 [DEBUG] [Thread-22131] [transport.py] [_log()] starting thread (client mode): 0xee9bfc70
2026-04-15T16:29:58.671 [DEBUG] [Thread-22131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:29:58.685 [DEBUG] [Thread-22131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:29:58.685 [INFO] [Thread-22131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:29:58.692 [DEBUG] [Thread-22131] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:29:58.692 [DEBUG] [Thread-22131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:29:58.692 [DEBUG] [Thread-22131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:29:58.692 [DEBUG] [Thread-22131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:29:58.693 [DEBUG] [Thread-22131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:29:58.693 [DEBUG] [Thread-22131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:29:58.693 [DEBUG] [Thread-22131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:29:58.693 [DEBUG] [Thread-22131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:29:58.693 [DEBUG] [Thread-22131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:29:58.693 [DEBUG] [Thread-22131] [transport.py] [_log()] client lang: <none>
2026-04-15T16:29:58.693 [DEBUG] [Thread-22131] [transport.py] [_log()] server lang: <none>
2026-04-15T16:29:58.693 [DEBUG] [Thread-22131] [transport.py] [_log()] kex follows: False
2026-04-15T16:29:58.693 [DEBUG] [Thread-22131] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:29:58.693 [DEBUG] [Thread-22131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:29:58.693 [DEBUG] [Thread-22131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:29:58.693 [DEBUG] [Thread-22131] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:29:58.694 [DEBUG] [Thread-22131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:29:58.694 [DEBUG] [Thread-22131] [transport.py] [_log()] Compression: none
2026-04-15T16:29:58.694 [DEBUG] [Thread-22131] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:29:58.750 [DEBUG] [Thread-22131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:29:58.751 [DEBUG] [Thread-22131] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:29:58.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:29:58.752 [DEBUG] [Thread-22131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:29:58.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:29:58.807 [DEBUG] [Thread-22131] [transport.py] [_log()] userauth is OK
2026-04-15T16:29:58.808 [DEBUG] [Thread-22131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:29:58.808 [DEBUG] [Thread-22131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:29:58.808 [DEBUG] [Thread-22131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:29:58.808 [DEBUG] [Thread-22131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:29:58.835 [INFO] [Thread-22131] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:29:58.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:29:58.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:29:59.657 [DEBUG] [Thread-22131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:29:59.658 [DEBUG] [Thread-22131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:29:59.705 [DEBUG] [Thread-22131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:29:59.705 [DEBUG] [Thread-22131] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:29:59.714 [DEBUG] [Thread-22131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:29:59.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:29:59.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')
2026-04-15T16:29:59.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
2026-04-15T16:29:59.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:29:59.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:29:59.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:29:59.748 [DEBUG] [Thread-22131] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:30:13.016 [DEBUG] [Thread-22133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:30:20.625 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:30:20.626 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:30:28.053 [DEBUG] [Thread-22134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:30:29.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:30:29.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:30:29.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
2026-04-15T16:30:31.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 30, 16), 9.82705, 51.963, 0.0, 17.1684, 14.6041, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:30:31.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:30:16
2026-04-15T16:30:31.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:30:31.902 [DEBUG] [Thread-22135] [transport.py] [_log()] starting thread (client mode): 0xee9bf250
2026-04-15T16:30:31.902 [DEBUG] [Thread-22135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:30:31.922 [DEBUG] [Thread-22135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:30:31.922 [INFO] [Thread-22135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:30:31.925 [DEBUG] [Thread-22135] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:30:31.925 [DEBUG] [Thread-22135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:30:31.925 [DEBUG] [Thread-22135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:30:31.926 [DEBUG] [Thread-22135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:30:31.926 [DEBUG] [Thread-22135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:30:31.926 [DEBUG] [Thread-22135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:30:31.926 [DEBUG] [Thread-22135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:30:31.926 [DEBUG] [Thread-22135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:30:31.926 [DEBUG] [Thread-22135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:30:31.926 [DEBUG] [Thread-22135] [transport.py] [_log()] client lang: <none>
2026-04-15T16:30:31.926 [DEBUG] [Thread-22135] [transport.py] [_log()] server lang: <none>
2026-04-15T16:30:31.926 [DEBUG] [Thread-22135] [transport.py] [_log()] kex follows: False
2026-04-15T16:30:31.926 [DEBUG] [Thread-22135] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:30:31.926 [DEBUG] [Thread-22135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:30:31.927 [DEBUG] [Thread-22135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:30:31.927 [DEBUG] [Thread-22135] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:30:31.927 [DEBUG] [Thread-22135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:30:31.927 [DEBUG] [Thread-22135] [transport.py] [_log()] Compression: none
2026-04-15T16:30:31.927 [DEBUG] [Thread-22135] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:30:31.943 [DEBUG] [Thread-22135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:30:31.944 [DEBUG] [Thread-22135] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:30:31.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:30:31.945 [DEBUG] [Thread-22135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:30:31.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:30:31.945 [DEBUG] [Thread-22135] [transport.py] [_log()] userauth is OK
2026-04-15T16:30:31.945 [DEBUG] [Thread-22135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:30:31.946 [DEBUG] [Thread-22135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:30:31.946 [DEBUG] [Thread-22135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:30:31.946 [DEBUG] [Thread-22135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:30:31.979 [INFO] [Thread-22135] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:30:31.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:30:32.635 [DEBUG] [Thread-22135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:30:32.635 [DEBUG] [Thread-22135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:30:32.636 [DEBUG] [Thread-22135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:30:32.676 [DEBUG] [Thread-22135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:30:32.676 [DEBUG] [Thread-22135] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:30:32.679 [DEBUG] [Thread-22135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:30:32.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:30:32.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:30:32.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:30:32.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:30:32.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:30:32.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:30:32.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:30:32.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:30:32.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:30:32.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.604302 -999.00  +14.10  19.74     58   +6.20 1 1 1 1 1   887    0 9.23 41.74 ----- 16.8 19.7 297.8 25.4 19.3 -29.9 18.6 -28.4 19.7 -26.7 20.6 -27.4
2026-04-15T16:30:32.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:30:32.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:30:32.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.604302
2026-04-15T16:30:32.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:30:32.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:30:32.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:30:32.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:30:32.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:30:32.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:30:16', tmtdew=9.82705, humidity=51.963, cloud=0.0, wind=17.1684, temperature=14.6041, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:30:11.693', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:30:32.704 [DEBUG] [Thread-22135] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:30:32.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:30:32.943 [DEBUG] [Thread-22138] [transport.py] [_log()] starting thread (client mode): 0xf13fd1e0
2026-04-15T16:30:32.943 [DEBUG] [Thread-22138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:30:32.958 [DEBUG] [Thread-22138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:30:32.958 [INFO] [Thread-22138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:30:32.965 [DEBUG] [Thread-22138] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:30:32.965 [DEBUG] [Thread-22138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:30:32.966 [DEBUG] [Thread-22138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:30:32.966 [DEBUG] [Thread-22138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:30:32.966 [DEBUG] [Thread-22138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:30:32.966 [DEBUG] [Thread-22138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:30:32.966 [DEBUG] [Thread-22138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:30:32.966 [DEBUG] [Thread-22138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:30:32.966 [DEBUG] [Thread-22138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:30:32.966 [DEBUG] [Thread-22138] [transport.py] [_log()] client lang: <none>
2026-04-15T16:30:32.966 [DEBUG] [Thread-22138] [transport.py] [_log()] server lang: <none>
2026-04-15T16:30:32.966 [DEBUG] [Thread-22138] [transport.py] [_log()] kex follows: False
2026-04-15T16:30:32.966 [DEBUG] [Thread-22138] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:30:32.966 [DEBUG] [Thread-22138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:30:32.967 [DEBUG] [Thread-22138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:30:32.967 [DEBUG] [Thread-22138] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:30:32.967 [DEBUG] [Thread-22138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:30:32.967 [DEBUG] [Thread-22138] [transport.py] [_log()] Compression: none
2026-04-15T16:30:32.967 [DEBUG] [Thread-22138] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:30:33.023 [DEBUG] [Thread-22138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:30:33.023 [DEBUG] [Thread-22138] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:30:33.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:30:33.024 [DEBUG] [Thread-22138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:30:33.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:30:33.080 [DEBUG] [Thread-22138] [transport.py] [_log()] userauth is OK
2026-04-15T16:30:33.080 [DEBUG] [Thread-22138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:30:33.080 [DEBUG] [Thread-22138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:30:33.081 [DEBUG] [Thread-22138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:30:33.081 [DEBUG] [Thread-22138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:30:33.108 [INFO] [Thread-22138] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:30:33.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:30:33.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:30:33.949 [DEBUG] [Thread-22138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:30:33.949 [DEBUG] [Thread-22138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:30:33.997 [DEBUG] [Thread-22138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:30:33.997 [DEBUG] [Thread-22138] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:30:34.006 [DEBUG] [Thread-22138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:30:34.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:30:34.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')
2026-04-15T16:30:34.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
2026-04-15T16:30:34.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:30:34.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:30:34.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:30:34.041 [DEBUG] [Thread-22138] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:30:37.764 [DEBUG] [Thread-22140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:30:43.085 [DEBUG] [Thread-22141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:30:58.132 [DEBUG] [Thread-22142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:31:04.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:31:04.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:31:04.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
2026-04-15T16:31:05.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 30, 52), 9.8913, 51.4895, 0.0, 17.3966, 14.8424, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:31:05.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:30:52
2026-04-15T16:31:05.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:31:06.192 [DEBUG] [Thread-22143] [transport.py] [_log()] starting thread (client mode): 0xf13fd540
2026-04-15T16:31:06.192 [DEBUG] [Thread-22143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:31:06.212 [DEBUG] [Thread-22143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:31:06.212 [INFO] [Thread-22143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:31:06.214 [DEBUG] [Thread-22143] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:31:06.214 [DEBUG] [Thread-22143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:31:06.214 [DEBUG] [Thread-22143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:31:06.214 [DEBUG] [Thread-22143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:31:06.214 [DEBUG] [Thread-22143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:31:06.214 [DEBUG] [Thread-22143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:31:06.214 [DEBUG] [Thread-22143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:31:06.215 [DEBUG] [Thread-22143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:31:06.215 [DEBUG] [Thread-22143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:31:06.215 [DEBUG] [Thread-22143] [transport.py] [_log()] client lang: <none>
2026-04-15T16:31:06.215 [DEBUG] [Thread-22143] [transport.py] [_log()] server lang: <none>
2026-04-15T16:31:06.215 [DEBUG] [Thread-22143] [transport.py] [_log()] kex follows: False
2026-04-15T16:31:06.215 [DEBUG] [Thread-22143] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:31:06.215 [DEBUG] [Thread-22143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:31:06.215 [DEBUG] [Thread-22143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:31:06.215 [DEBUG] [Thread-22143] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:31:06.215 [DEBUG] [Thread-22143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:31:06.215 [DEBUG] [Thread-22143] [transport.py] [_log()] Compression: none
2026-04-15T16:31:06.215 [DEBUG] [Thread-22143] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:31:06.226 [DEBUG] [Thread-22143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:31:06.226 [DEBUG] [Thread-22143] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:31:06.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:31:06.227 [DEBUG] [Thread-22143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:31:06.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:31:06.269 [DEBUG] [Thread-22143] [transport.py] [_log()] userauth is OK
2026-04-15T16:31:06.269 [DEBUG] [Thread-22143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:31:06.269 [DEBUG] [Thread-22143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:31:06.269 [DEBUG] [Thread-22143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:31:06.269 [DEBUG] [Thread-22143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:31:06.288 [INFO] [Thread-22143] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:31:06.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:31:06.937 [DEBUG] [Thread-22143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:31:06.937 [DEBUG] [Thread-22143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:31:06.938 [DEBUG] [Thread-22143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:31:06.978 [DEBUG] [Thread-22143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:31:06.978 [DEBUG] [Thread-22143] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:31:06.980 [DEBUG] [Thread-22143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:31:06.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:31:06.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:31:06.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:31:06.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:31:06.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:31:07.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:31:07.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:31:07.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:31:07.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:31:07.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.604649 -999.00  +14.20  16.95     60   +6.60 1 1 1 1 1   887    0 9.08 38.80 ----- 14.5 16.9 315.0 22.2 19.2 -30.0 18.6 -28.3 19.6 -26.5 20.5 -27.6
2026-04-15T16:31:07.002 [DEBUG] [Thread-22143] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:31:07.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:31:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:31:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.604649
2026-04-15T16:31:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:31:07.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:31:07.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:31:07.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:31:07.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:31:07.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:30:52', tmtdew=9.8913, humidity=51.4895, cloud=0.0, wind=17.3966, temperature=14.8424, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:30:41.674', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:31:07.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:31:07.251 [DEBUG] [Thread-22146] [transport.py] [_log()] starting thread (client mode): 0xf13ff8b0
2026-04-15T16:31:07.252 [DEBUG] [Thread-22146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:31:07.266 [DEBUG] [Thread-22146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:31:07.266 [INFO] [Thread-22146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:31:07.276 [DEBUG] [Thread-22146] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:31:07.276 [DEBUG] [Thread-22146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:31:07.276 [DEBUG] [Thread-22146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:31:07.276 [DEBUG] [Thread-22146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:31:07.276 [DEBUG] [Thread-22146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:31:07.276 [DEBUG] [Thread-22146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:31:07.276 [DEBUG] [Thread-22146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:31:07.277 [DEBUG] [Thread-22146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:31:07.277 [DEBUG] [Thread-22146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:31:07.277 [DEBUG] [Thread-22146] [transport.py] [_log()] client lang: <none>
2026-04-15T16:31:07.277 [DEBUG] [Thread-22146] [transport.py] [_log()] server lang: <none>
2026-04-15T16:31:07.277 [DEBUG] [Thread-22146] [transport.py] [_log()] kex follows: False
2026-04-15T16:31:07.277 [DEBUG] [Thread-22146] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:31:07.277 [DEBUG] [Thread-22146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:31:07.277 [DEBUG] [Thread-22146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:31:07.277 [DEBUG] [Thread-22146] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:31:07.278 [DEBUG] [Thread-22146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:31:07.278 [DEBUG] [Thread-22146] [transport.py] [_log()] Compression: none
2026-04-15T16:31:07.278 [DEBUG] [Thread-22146] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:31:07.331 [DEBUG] [Thread-22146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:31:07.332 [DEBUG] [Thread-22146] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:31:07.332 [DEBUG] [Thread-22146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:31:07.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:31:07.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:31:07.391 [DEBUG] [Thread-22146] [transport.py] [_log()] userauth is OK
2026-04-15T16:31:07.391 [DEBUG] [Thread-22146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:31:07.391 [DEBUG] [Thread-22146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:31:07.392 [DEBUG] [Thread-22146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:31:07.392 [DEBUG] [Thread-22146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:31:07.418 [INFO] [Thread-22146] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:31:07.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:31:07.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:31:08.242 [DEBUG] [Thread-22146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:31:08.243 [DEBUG] [Thread-22146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:31:08.290 [DEBUG] [Thread-22146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:31:08.290 [DEBUG] [Thread-22146] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:31:08.299 [DEBUG] [Thread-22146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:31:08.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:31: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')
2026-04-15T16:31:08.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') -> 00000000
2026-04-15T16:31:08.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:31:08.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:31:08.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:31:08.333 [DEBUG] [Thread-22146] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:31:13.162 [DEBUG] [Thread-22148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:31:20.768 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:31:20.768 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:31:28.215 [DEBUG] [Thread-22149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:31:37.840 [DEBUG] [Thread-22150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:31:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:31:38.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:31: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
2026-04-15T16:31:39.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 31, 27), 9.73897, 52.1258, 0.0, 13.3052, 14.3546, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:31:39.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:31:27
2026-04-15T16:31:40.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:31:40.430 [DEBUG] [Thread-22151] [transport.py] [_log()] starting thread (client mode): 0xf13ff9a0
2026-04-15T16:31:40.431 [DEBUG] [Thread-22151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:31:40.450 [DEBUG] [Thread-22151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:31:40.450 [INFO] [Thread-22151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:31:40.453 [DEBUG] [Thread-22151] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:31:40.453 [DEBUG] [Thread-22151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:31:40.453 [DEBUG] [Thread-22151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:31:40.453 [DEBUG] [Thread-22151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:31:40.453 [DEBUG] [Thread-22151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:31:40.454 [DEBUG] [Thread-22151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:31:40.454 [DEBUG] [Thread-22151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:31:40.454 [DEBUG] [Thread-22151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:31:40.454 [DEBUG] [Thread-22151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:31:40.454 [DEBUG] [Thread-22151] [transport.py] [_log()] client lang: <none>
2026-04-15T16:31:40.454 [DEBUG] [Thread-22151] [transport.py] [_log()] server lang: <none>
2026-04-15T16:31:40.454 [DEBUG] [Thread-22151] [transport.py] [_log()] kex follows: False
2026-04-15T16:31:40.454 [DEBUG] [Thread-22151] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:31:40.454 [DEBUG] [Thread-22151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:31:40.455 [DEBUG] [Thread-22151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:31:40.455 [DEBUG] [Thread-22151] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:31:40.455 [DEBUG] [Thread-22151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:31:40.455 [DEBUG] [Thread-22151] [transport.py] [_log()] Compression: none
2026-04-15T16:31:40.455 [DEBUG] [Thread-22151] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:31:40.468 [DEBUG] [Thread-22151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:31:40.468 [DEBUG] [Thread-22151] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:31:40.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:31:40.469 [DEBUG] [Thread-22151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:31:40.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:31:40.470 [DEBUG] [Thread-22151] [transport.py] [_log()] userauth is OK
2026-04-15T16:31:40.470 [DEBUG] [Thread-22151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:31:40.470 [DEBUG] [Thread-22151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:31:40.470 [DEBUG] [Thread-22151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:31:40.470 [DEBUG] [Thread-22151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:31:40.493 [INFO] [Thread-22151] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:31:40.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:31:41.139 [DEBUG] [Thread-22151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:31:41.140 [DEBUG] [Thread-22151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:31:41.140 [DEBUG] [Thread-22151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:31:41.180 [DEBUG] [Thread-22151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:31:41.180 [DEBUG] [Thread-22151] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:31:41.183 [DEBUG] [Thread-22151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:31:41.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:31:41.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:31:41.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:31:41.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:31:41.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:31:41.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:31:41.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:31:41.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:31:41.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:31:41.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.604996 -999.00  +14.30  18.76     59   +6.50 1 1 1 1 1   887    0 9.27 37.75 ----- 15.9 18.8 321.2 21.2 19.2 -29.4 18.6 -27.8 19.7 -25.3 20.5 -27.6
2026-04-15T16:31:41.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:31:41.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:31:41.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.604996
2026-04-15T16:31:41.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:31:41.210 [DEBUG] [Thread-22151] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:31:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:31:41.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:31:41.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:31:41.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:31:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:31:27', tmtdew=9.73897, humidity=52.1258, cloud=0.0, wind=13.3052, temperature=14.3546, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:31:11.654', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:31:41.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:31:41.469 [DEBUG] [Thread-22154] [transport.py] [_log()] starting thread (client mode): 0xf13fe230
2026-04-15T16:31:41.469 [DEBUG] [Thread-22154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:31:41.484 [DEBUG] [Thread-22154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:31:41.484 [INFO] [Thread-22154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:31:41.491 [DEBUG] [Thread-22154] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:31:41.491 [DEBUG] [Thread-22154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:31:41.491 [DEBUG] [Thread-22154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:31:41.491 [DEBUG] [Thread-22154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:31:41.492 [DEBUG] [Thread-22154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:31:41.492 [DEBUG] [Thread-22154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:31:41.492 [DEBUG] [Thread-22154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:31:41.492 [DEBUG] [Thread-22154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:31:41.492 [DEBUG] [Thread-22154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:31:41.492 [DEBUG] [Thread-22154] [transport.py] [_log()] client lang: <none>
2026-04-15T16:31:41.492 [DEBUG] [Thread-22154] [transport.py] [_log()] server lang: <none>
2026-04-15T16:31:41.492 [DEBUG] [Thread-22154] [transport.py] [_log()] kex follows: False
2026-04-15T16:31:41.492 [DEBUG] [Thread-22154] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:31:41.492 [DEBUG] [Thread-22154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:31:41.492 [DEBUG] [Thread-22154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:31:41.492 [DEBUG] [Thread-22154] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:31:41.493 [DEBUG] [Thread-22154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:31:41.493 [DEBUG] [Thread-22154] [transport.py] [_log()] Compression: none
2026-04-15T16:31:41.493 [DEBUG] [Thread-22154] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:31:41.548 [DEBUG] [Thread-22154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:31:41.548 [DEBUG] [Thread-22154] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:31:41.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:31:41.549 [DEBUG] [Thread-22154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:31:41.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:31:41.605 [DEBUG] [Thread-22154] [transport.py] [_log()] userauth is OK
2026-04-15T16:31:41.605 [DEBUG] [Thread-22154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:31:41.605 [DEBUG] [Thread-22154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:31:41.605 [DEBUG] [Thread-22154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:31:41.606 [DEBUG] [Thread-22154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:31:41.631 [INFO] [Thread-22154] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:31:41.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:31:41.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:31:42.449 [DEBUG] [Thread-22154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:31:42.449 [DEBUG] [Thread-22154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:31:42.498 [DEBUG] [Thread-22154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:31:42.499 [DEBUG] [Thread-22154] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:31:42.508 [DEBUG] [Thread-22154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:31:42.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:31:42.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')
2026-04-15T16:31:42.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
2026-04-15T16:31:42.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:31:42.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:31:42.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:31:42.547 [DEBUG] [Thread-22154] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:31:43.247 [DEBUG] [Thread-22156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:31:58.291 [DEBUG] [Thread-22157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:32:12.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:32:12.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:32:12.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
2026-04-15T16:32:13.323 [DEBUG] [Thread-22158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:32:13.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 32, 3), 9.75961, 52.0597, 0.0, 14.3284, 14.3879, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:32:13.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:32:03
2026-04-15T16:32:14.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:32:14.788 [DEBUG] [Thread-22159] [transport.py] [_log()] starting thread (client mode): 0xee925c00
2026-04-15T16:32:14.789 [DEBUG] [Thread-22159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:32:14.810 [DEBUG] [Thread-22159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:32:14.810 [INFO] [Thread-22159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:32:14.813 [DEBUG] [Thread-22159] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:32:14.813 [DEBUG] [Thread-22159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:32:14.813 [DEBUG] [Thread-22159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:32:14.813 [DEBUG] [Thread-22159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:32:14.813 [DEBUG] [Thread-22159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:32:14.814 [DEBUG] [Thread-22159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:32:14.814 [DEBUG] [Thread-22159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:32:14.814 [DEBUG] [Thread-22159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:32:14.814 [DEBUG] [Thread-22159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:32:14.814 [DEBUG] [Thread-22159] [transport.py] [_log()] client lang: <none>
2026-04-15T16:32:14.814 [DEBUG] [Thread-22159] [transport.py] [_log()] server lang: <none>
2026-04-15T16:32:14.814 [DEBUG] [Thread-22159] [transport.py] [_log()] kex follows: False
2026-04-15T16:32:14.814 [DEBUG] [Thread-22159] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:32:14.814 [DEBUG] [Thread-22159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:32:14.814 [DEBUG] [Thread-22159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:32:14.814 [DEBUG] [Thread-22159] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:32:14.815 [DEBUG] [Thread-22159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:32:14.815 [DEBUG] [Thread-22159] [transport.py] [_log()] Compression: none
2026-04-15T16:32:14.815 [DEBUG] [Thread-22159] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:32:14.832 [DEBUG] [Thread-22159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:32:14.832 [DEBUG] [Thread-22159] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:32:14.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:32:14.833 [DEBUG] [Thread-22159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:32:14.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:32:14.834 [DEBUG] [Thread-22159] [transport.py] [_log()] userauth is OK
2026-04-15T16:32:14.834 [DEBUG] [Thread-22159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:32:14.834 [DEBUG] [Thread-22159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:32:14.834 [DEBUG] [Thread-22159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:32:14.834 [DEBUG] [Thread-22159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:32:14.853 [INFO] [Thread-22159] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:32:14.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:32:15.471 [DEBUG] [Thread-22159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:32:15.472 [DEBUG] [Thread-22159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:32:15.472 [DEBUG] [Thread-22159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:32:15.513 [DEBUG] [Thread-22159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:32:15.513 [DEBUG] [Thread-22159] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:32:15.516 [DEBUG] [Thread-22159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:32:15.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:32:15.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:32:15.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:32:15.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:32:15.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:32:15.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:32:15.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:32:15.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:32:15.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:32:15.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.605344 -999.00  +14.50  11.06     60   +6.90 1 1 1 1 1   887    0 9.08 34.07 ----- 8.2 11.1 314.4 17.5 19.2 -29.2 18.7 -27.6 19.6 -25.9 20.5 -27.0
2026-04-15T16:32:15.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:32:15.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:32:15.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.605344
2026-04-15T16:32:15.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:32:15.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:32:15.541 [DEBUG] [Thread-22159] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:32:15.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:32:15.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:32:15.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:32:15.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:32:03', tmtdew=9.75961, humidity=52.0597, cloud=0.0, wind=14.3284, temperature=14.3879, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:31:41.722', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:32:15.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:32:15.799 [DEBUG] [Thread-22162] [transport.py] [_log()] starting thread (client mode): 0xf13fea40
2026-04-15T16:32:15.799 [DEBUG] [Thread-22162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:32:15.815 [DEBUG] [Thread-22162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:32:15.815 [INFO] [Thread-22162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:32:15.823 [DEBUG] [Thread-22162] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:32:15.823 [DEBUG] [Thread-22162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:32:15.823 [DEBUG] [Thread-22162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:32:15.823 [DEBUG] [Thread-22162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:32:15.823 [DEBUG] [Thread-22162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:32:15.823 [DEBUG] [Thread-22162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:32:15.823 [DEBUG] [Thread-22162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:32:15.823 [DEBUG] [Thread-22162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:32:15.823 [DEBUG] [Thread-22162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:32:15.823 [DEBUG] [Thread-22162] [transport.py] [_log()] client lang: <none>
2026-04-15T16:32:15.823 [DEBUG] [Thread-22162] [transport.py] [_log()] server lang: <none>
2026-04-15T16:32:15.824 [DEBUG] [Thread-22162] [transport.py] [_log()] kex follows: False
2026-04-15T16:32:15.824 [DEBUG] [Thread-22162] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:32:15.824 [DEBUG] [Thread-22162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:32:15.824 [DEBUG] [Thread-22162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:32:15.824 [DEBUG] [Thread-22162] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:32:15.824 [DEBUG] [Thread-22162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:32:15.824 [DEBUG] [Thread-22162] [transport.py] [_log()] Compression: none
2026-04-15T16:32:15.824 [DEBUG] [Thread-22162] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:32:15.880 [DEBUG] [Thread-22162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:32:15.881 [DEBUG] [Thread-22162] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:32:15.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:32:15.881 [DEBUG] [Thread-22162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:32:15.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:32:15.937 [DEBUG] [Thread-22162] [transport.py] [_log()] userauth is OK
2026-04-15T16:32:15.937 [DEBUG] [Thread-22162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:32:15.937 [DEBUG] [Thread-22162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:32:15.938 [DEBUG] [Thread-22162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:32:15.938 [DEBUG] [Thread-22162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:32:15.967 [INFO] [Thread-22162] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:32:15.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:32:15.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:32:16.855 [DEBUG] [Thread-22162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:32:16.855 [DEBUG] [Thread-22162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:32:16.903 [DEBUG] [Thread-22162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:32:16.903 [DEBUG] [Thread-22162] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:32:16.912 [DEBUG] [Thread-22162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:32:16.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:32:16.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')
2026-04-15T16:32:16.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
2026-04-15T16:32:16.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:32:16.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:32:16.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:32:16.947 [DEBUG] [Thread-22162] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:32:20.908 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:32:20.909 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:32:28.354 [DEBUG] [Thread-22164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:32:37.927 [DEBUG] [Thread-22165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:32:43.399 [DEBUG] [Thread-22166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:32:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:32:46.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:32:46.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
2026-04-15T16:32:48.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 32, 39), 10.1698, 50.4627, 0.0, 14.4331, 14.7102, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:32:48.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:32:39
2026-04-15T16:32:48.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:32:49.253 [DEBUG] [Thread-22167] [transport.py] [_log()] starting thread (client mode): 0xf13fd270
2026-04-15T16:32:49.253 [DEBUG] [Thread-22167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:32:49.273 [DEBUG] [Thread-22167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:32:49.273 [INFO] [Thread-22167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:32:49.277 [DEBUG] [Thread-22167] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:32:49.277 [DEBUG] [Thread-22167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:32:49.277 [DEBUG] [Thread-22167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:32:49.277 [DEBUG] [Thread-22167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:32:49.277 [DEBUG] [Thread-22167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:32:49.277 [DEBUG] [Thread-22167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:32:49.277 [DEBUG] [Thread-22167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:32:49.277 [DEBUG] [Thread-22167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:32:49.277 [DEBUG] [Thread-22167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:32:49.277 [DEBUG] [Thread-22167] [transport.py] [_log()] client lang: <none>
2026-04-15T16:32:49.277 [DEBUG] [Thread-22167] [transport.py] [_log()] server lang: <none>
2026-04-15T16:32:49.277 [DEBUG] [Thread-22167] [transport.py] [_log()] kex follows: False
2026-04-15T16:32:49.278 [DEBUG] [Thread-22167] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:32:49.278 [DEBUG] [Thread-22167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:32:49.278 [DEBUG] [Thread-22167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:32:49.278 [DEBUG] [Thread-22167] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:32:49.278 [DEBUG] [Thread-22167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:32:49.278 [DEBUG] [Thread-22167] [transport.py] [_log()] Compression: none
2026-04-15T16:32:49.278 [DEBUG] [Thread-22167] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:32:49.294 [DEBUG] [Thread-22167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:32:49.295 [DEBUG] [Thread-22167] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:32:49.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:32:49.295 [DEBUG] [Thread-22167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:32:49.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:32:49.296 [DEBUG] [Thread-22167] [transport.py] [_log()] userauth is OK
2026-04-15T16:32:49.297 [DEBUG] [Thread-22167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:32:49.297 [DEBUG] [Thread-22167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:32:49.297 [DEBUG] [Thread-22167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:32:49.297 [DEBUG] [Thread-22167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:32:49.322 [INFO] [Thread-22167] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:32:49.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:32:50.127 [DEBUG] [Thread-22167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:32:50.127 [DEBUG] [Thread-22167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:32:50.128 [DEBUG] [Thread-22167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:32:50.168 [DEBUG] [Thread-22167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:32:50.168 [DEBUG] [Thread-22167] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:32:50.171 [DEBUG] [Thread-22167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:32:50.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:32:50.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:32:50.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:32:50.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:32:50.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:32:50.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:32:50.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:32:50.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:32:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:32:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.605691 -999.00  +14.60   8.39     57   +6.30 1 1 1 1 1   887    0 9.02 31.74 ----- 11.4 8.4 345.8 14.8 19.2 -28.8 18.6 -28.4 19.7 -24.5 20.6 -26.7
2026-04-15T16:32:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:32:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:32:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.605691
2026-04-15T16:32:50.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:32:50.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:32:50.198 [DEBUG] [Thread-22167] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:32:50.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:32:50.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:32:50.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:32:50.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:32:39', tmtdew=10.1698, humidity=50.4627, cloud=0.0, wind=14.4331, temperature=14.7102, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:32:11.702', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:32:50.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:32:50.454 [DEBUG] [Thread-22170] [transport.py] [_log()] starting thread (client mode): 0xf13fc670
2026-04-15T16:32:50.454 [DEBUG] [Thread-22170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:32:50.469 [DEBUG] [Thread-22170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:32:50.469 [INFO] [Thread-22170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:32:50.476 [DEBUG] [Thread-22170] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:32:50.476 [DEBUG] [Thread-22170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:32:50.477 [DEBUG] [Thread-22170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:32:50.477 [DEBUG] [Thread-22170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:32:50.477 [DEBUG] [Thread-22170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:32:50.477 [DEBUG] [Thread-22170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:32:50.477 [DEBUG] [Thread-22170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:32:50.477 [DEBUG] [Thread-22170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:32:50.477 [DEBUG] [Thread-22170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:32:50.477 [DEBUG] [Thread-22170] [transport.py] [_log()] client lang: <none>
2026-04-15T16:32:50.477 [DEBUG] [Thread-22170] [transport.py] [_log()] server lang: <none>
2026-04-15T16:32:50.477 [DEBUG] [Thread-22170] [transport.py] [_log()] kex follows: False
2026-04-15T16:32:50.477 [DEBUG] [Thread-22170] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:32:50.477 [DEBUG] [Thread-22170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:32:50.478 [DEBUG] [Thread-22170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:32:50.478 [DEBUG] [Thread-22170] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:32:50.478 [DEBUG] [Thread-22170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:32:50.478 [DEBUG] [Thread-22170] [transport.py] [_log()] Compression: none
2026-04-15T16:32:50.478 [DEBUG] [Thread-22170] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:32:50.533 [DEBUG] [Thread-22170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:32:50.534 [DEBUG] [Thread-22170] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:32:50.534 [DEBUG] [Thread-22170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:32:50.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:32:50.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:32:50.592 [DEBUG] [Thread-22170] [transport.py] [_log()] userauth is OK
2026-04-15T16:32:50.592 [DEBUG] [Thread-22170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:32:50.592 [DEBUG] [Thread-22170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:32:50.592 [DEBUG] [Thread-22170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:32:50.592 [DEBUG] [Thread-22170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:32:50.617 [INFO] [Thread-22170] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:32:50.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:32:50.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:32:51.447 [DEBUG] [Thread-22170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:32:51.448 [DEBUG] [Thread-22170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:32:51.495 [DEBUG] [Thread-22170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:32:51.495 [DEBUG] [Thread-22170] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:32:51.504 [DEBUG] [Thread-22170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:32:51.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:32:51.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')
2026-04-15T16:32:51.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
2026-04-15T16:32:51.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:32:51.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:32:51.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:32:51.540 [DEBUG] [Thread-22170] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:32:58.431 [DEBUG] [Thread-22172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:33:13.474 [DEBUG] [Thread-22173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:33:21.049 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:33:21.050 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:33:21.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:33:21.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:33:21.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T16:33:22.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 33, 14), 9.633, 52.2947, 0.0, 14.7164, 14.4881, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:33:22.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:33:14
2026-04-15T16:33:23.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:33:23.711 [DEBUG] [Thread-22174] [transport.py] [_log()] starting thread (client mode): 0xf1350880
2026-04-15T16:33:23.711 [DEBUG] [Thread-22174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:33:23.731 [DEBUG] [Thread-22174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:33:23.731 [INFO] [Thread-22174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:33:23.734 [DEBUG] [Thread-22174] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:33:23.734 [DEBUG] [Thread-22174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:33:23.734 [DEBUG] [Thread-22174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:33:23.734 [DEBUG] [Thread-22174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:33:23.734 [DEBUG] [Thread-22174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:33:23.734 [DEBUG] [Thread-22174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:33:23.735 [DEBUG] [Thread-22174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:33:23.735 [DEBUG] [Thread-22174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:33:23.735 [DEBUG] [Thread-22174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:33:23.735 [DEBUG] [Thread-22174] [transport.py] [_log()] client lang: <none>
2026-04-15T16:33:23.735 [DEBUG] [Thread-22174] [transport.py] [_log()] server lang: <none>
2026-04-15T16:33:23.735 [DEBUG] [Thread-22174] [transport.py] [_log()] kex follows: False
2026-04-15T16:33:23.735 [DEBUG] [Thread-22174] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:33:23.735 [DEBUG] [Thread-22174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:33:23.735 [DEBUG] [Thread-22174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:33:23.735 [DEBUG] [Thread-22174] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:33:23.736 [DEBUG] [Thread-22174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:33:23.737 [DEBUG] [Thread-22174] [transport.py] [_log()] Compression: none
2026-04-15T16:33:23.737 [DEBUG] [Thread-22174] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:33:23.753 [DEBUG] [Thread-22174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:33:23.753 [DEBUG] [Thread-22174] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:33:23.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:33:23.754 [DEBUG] [Thread-22174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:33:23.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:33:23.755 [DEBUG] [Thread-22174] [transport.py] [_log()] userauth is OK
2026-04-15T16:33:23.755 [DEBUG] [Thread-22174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:33:23.756 [DEBUG] [Thread-22174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:33:23.756 [DEBUG] [Thread-22174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:33:23.756 [DEBUG] [Thread-22174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:33:23.780 [INFO] [Thread-22174] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:33:23.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:33:24.550 [DEBUG] [Thread-22174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:33:24.550 [DEBUG] [Thread-22174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:33:24.551 [DEBUG] [Thread-22174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:33:24.591 [DEBUG] [Thread-22174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:33:24.591 [DEBUG] [Thread-22174] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:33:24.594 [DEBUG] [Thread-22174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:33:24.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:33:24.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:33:24.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:33:24.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:33:24.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:33:24.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:33:24.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:33:24.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:33:24.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:33:24.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.606038 -999.00  +14.40  10.09     57   +6.10 1 1 1 1 1   887    0 9.01 30.83 ----- 12.9 10.1 342.5 24.9 19.2 -29.4 18.6 -28.4 19.7 -24.9 20.5 -27.2
2026-04-15T16:33:24.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:33:24.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:33:24.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.606038
2026-04-15T16:33:24.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:33:24.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:33:24.614 [DEBUG] [Thread-22174] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:33:24.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:33:24.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:33:24.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:33:24.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:33:14', tmtdew=9.633, humidity=52.2947, cloud=0.0, wind=14.7164, temperature=14.4881, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:32:41.683', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:33:24.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:33:24.874 [DEBUG] [Thread-22177] [transport.py] [_log()] starting thread (client mode): 0xf1353be0
2026-04-15T16:33:24.874 [DEBUG] [Thread-22177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:33:24.892 [DEBUG] [Thread-22177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:33:24.892 [INFO] [Thread-22177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:33:24.899 [DEBUG] [Thread-22177] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:33:24.899 [DEBUG] [Thread-22177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:33:24.899 [DEBUG] [Thread-22177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:33:24.899 [DEBUG] [Thread-22177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:33:24.900 [DEBUG] [Thread-22177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:33:24.900 [DEBUG] [Thread-22177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:33:24.900 [DEBUG] [Thread-22177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:33:24.900 [DEBUG] [Thread-22177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:33:24.900 [DEBUG] [Thread-22177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:33:24.900 [DEBUG] [Thread-22177] [transport.py] [_log()] client lang: <none>
2026-04-15T16:33:24.900 [DEBUG] [Thread-22177] [transport.py] [_log()] server lang: <none>
2026-04-15T16:33:24.900 [DEBUG] [Thread-22177] [transport.py] [_log()] kex follows: False
2026-04-15T16:33:24.900 [DEBUG] [Thread-22177] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:33:24.900 [DEBUG] [Thread-22177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:33:24.900 [DEBUG] [Thread-22177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:33:24.901 [DEBUG] [Thread-22177] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:33:24.901 [DEBUG] [Thread-22177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:33:24.901 [DEBUG] [Thread-22177] [transport.py] [_log()] Compression: none
2026-04-15T16:33:24.901 [DEBUG] [Thread-22177] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:33:24.958 [DEBUG] [Thread-22177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:33:24.959 [DEBUG] [Thread-22177] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:33:24.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:33:24.960 [DEBUG] [Thread-22177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:33:24.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:33:25.014 [DEBUG] [Thread-22177] [transport.py] [_log()] userauth is OK
2026-04-15T16:33:25.014 [DEBUG] [Thread-22177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:33:25.014 [DEBUG] [Thread-22177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:33:25.014 [DEBUG] [Thread-22177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:33:25.015 [DEBUG] [Thread-22177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:33:25.041 [INFO] [Thread-22177] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:33:25.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:33:25.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:33:25.864 [DEBUG] [Thread-22177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:33:25.864 [DEBUG] [Thread-22177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:33:25.913 [DEBUG] [Thread-22177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:33:25.913 [DEBUG] [Thread-22177] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:33:25.922 [DEBUG] [Thread-22177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:33:25.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:33:25.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')
2026-04-15T16:33:25.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') -> 00000000
2026-04-15T16:33:25.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:33:25.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:33:25.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:33:25.957 [DEBUG] [Thread-22177] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:33:28.506 [DEBUG] [Thread-22179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:33:38.017 [DEBUG] [Thread-22180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:33:43.550 [DEBUG] [Thread-22181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:33:55.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:33:55.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:33:55.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
2026-04-15T16:33:57.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 33, 14), 9.633, 52.2947, 0.0, 14.7164, 14.4881, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:33:57.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:33:14
2026-04-15T16:33:57.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:33:58.132 [DEBUG] [Thread-22182] [transport.py] [_log()] starting thread (client mode): 0xf1350c10
2026-04-15T16:33:58.132 [DEBUG] [Thread-22182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:33:58.152 [DEBUG] [Thread-22182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:33:58.153 [INFO] [Thread-22182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:33:58.156 [DEBUG] [Thread-22182] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:33:58.156 [DEBUG] [Thread-22182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:33:58.156 [DEBUG] [Thread-22182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:33:58.156 [DEBUG] [Thread-22182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:33:58.156 [DEBUG] [Thread-22182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:33:58.156 [DEBUG] [Thread-22182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:33:58.156 [DEBUG] [Thread-22182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:33:58.156 [DEBUG] [Thread-22182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:33:58.156 [DEBUG] [Thread-22182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:33:58.156 [DEBUG] [Thread-22182] [transport.py] [_log()] client lang: <none>
2026-04-15T16:33:58.156 [DEBUG] [Thread-22182] [transport.py] [_log()] server lang: <none>
2026-04-15T16:33:58.156 [DEBUG] [Thread-22182] [transport.py] [_log()] kex follows: False
2026-04-15T16:33:58.156 [DEBUG] [Thread-22182] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:33:58.157 [DEBUG] [Thread-22182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:33:58.157 [DEBUG] [Thread-22182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:33:58.157 [DEBUG] [Thread-22182] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:33:58.157 [DEBUG] [Thread-22182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:33:58.157 [DEBUG] [Thread-22182] [transport.py] [_log()] Compression: none
2026-04-15T16:33:58.157 [DEBUG] [Thread-22182] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:33:58.176 [DEBUG] [Thread-22182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:33:58.176 [DEBUG] [Thread-22182] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:33:58.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:33:58.177 [DEBUG] [Thread-22182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:33:58.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:33:58.178 [DEBUG] [Thread-22182] [transport.py] [_log()] userauth is OK
2026-04-15T16:33:58.178 [DEBUG] [Thread-22182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:33:58.178 [DEBUG] [Thread-22182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:33:58.178 [DEBUG] [Thread-22182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:33:58.178 [DEBUG] [Thread-22182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:33:58.190 [INFO] [Thread-22182] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:33:58.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:33:58.582 [DEBUG] [Thread-22184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:33:59.043 [DEBUG] [Thread-22182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:33:59.043 [DEBUG] [Thread-22182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:33:59.044 [DEBUG] [Thread-22182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:33:59.084 [DEBUG] [Thread-22182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:33:59.084 [DEBUG] [Thread-22182] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:33:59.087 [DEBUG] [Thread-22182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:33:59.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:33:59.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:33:59.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:33:59.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:33:59.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:33:59.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:33:59.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:33:59.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:33:59.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:33:59.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.606385 -999.00  +14.40   9.91     57   +6.10 1 1 1 1 1   887    0 9.08 35.01 ----- 8.5 9.9 340.7 14.9 19.2 -29.2 18.6 -28.1 19.7 -24.9 20.5 -27.1
2026-04-15T16:33:59.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:33:59.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:33:59.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.606385
2026-04-15T16:33:59.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:33:59.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:33:59.113 [DEBUG] [Thread-22182] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:33:59.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:33:59.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:33:59.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:33:59.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:33:14', tmtdew=9.633, humidity=52.2947, cloud=0.0, wind=14.7164, temperature=14.4881, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:33:11.664', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:33:59.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:33:59.377 [DEBUG] [Thread-22186] [transport.py] [_log()] starting thread (client mode): 0xf13532e0
2026-04-15T16:33:59.377 [DEBUG] [Thread-22186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:33:59.390 [DEBUG] [Thread-22186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:33:59.390 [INFO] [Thread-22186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:33:59.398 [DEBUG] [Thread-22186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:33:59.398 [DEBUG] [Thread-22186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:33:59.398 [DEBUG] [Thread-22186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:33:59.398 [DEBUG] [Thread-22186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:33:59.398 [DEBUG] [Thread-22186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:33:59.398 [DEBUG] [Thread-22186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:33:59.399 [DEBUG] [Thread-22186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:33:59.399 [DEBUG] [Thread-22186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:33:59.399 [DEBUG] [Thread-22186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:33:59.399 [DEBUG] [Thread-22186] [transport.py] [_log()] client lang: <none>
2026-04-15T16:33:59.399 [DEBUG] [Thread-22186] [transport.py] [_log()] server lang: <none>
2026-04-15T16:33:59.399 [DEBUG] [Thread-22186] [transport.py] [_log()] kex follows: False
2026-04-15T16:33:59.399 [DEBUG] [Thread-22186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:33:59.399 [DEBUG] [Thread-22186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:33:59.399 [DEBUG] [Thread-22186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:33:59.399 [DEBUG] [Thread-22186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:33:59.399 [DEBUG] [Thread-22186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:33:59.399 [DEBUG] [Thread-22186] [transport.py] [_log()] Compression: none
2026-04-15T16:33:59.399 [DEBUG] [Thread-22186] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:33:59.458 [DEBUG] [Thread-22186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:33:59.458 [DEBUG] [Thread-22186] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:33:59.459 [DEBUG] [Thread-22186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:33:59.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:33:59.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:33:59.514 [DEBUG] [Thread-22186] [transport.py] [_log()] userauth is OK
2026-04-15T16:33:59.514 [DEBUG] [Thread-22186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:33:59.515 [DEBUG] [Thread-22186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:33:59.515 [DEBUG] [Thread-22186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:33:59.515 [DEBUG] [Thread-22186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:33:59.539 [INFO] [Thread-22186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:33:59.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:33:59.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:34:00.384 [DEBUG] [Thread-22186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:34:00.384 [DEBUG] [Thread-22186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:34:00.432 [DEBUG] [Thread-22186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:34:00.432 [DEBUG] [Thread-22186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:34:00.441 [DEBUG] [Thread-22186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:34:00.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:34:00.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')
2026-04-15T16:34:00.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
2026-04-15T16:34:00.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:34:00.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:34:00.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:34:00.476 [DEBUG] [Thread-22186] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:34:13.613 [DEBUG] [Thread-22188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:34:21.191 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:34:21.192 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:34:28.657 [DEBUG] [Thread-22189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:34:30.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:34:30.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:34:30.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
2026-04-15T16:34:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 33, 50), 9.87344, 51.5895, 0.0, 22.1947, 14.9756, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:34:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:33:50
2026-04-15T16:34:32.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:34:32.759 [DEBUG] [Thread-22190] [transport.py] [_log()] starting thread (client mode): 0xee91e020
2026-04-15T16:34:32.759 [DEBUG] [Thread-22190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:34:32.779 [DEBUG] [Thread-22190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:34:32.779 [INFO] [Thread-22190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:34:32.781 [DEBUG] [Thread-22190] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:34:32.781 [DEBUG] [Thread-22190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:34:32.781 [DEBUG] [Thread-22190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:34:32.781 [DEBUG] [Thread-22190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:34:32.781 [DEBUG] [Thread-22190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:34:32.781 [DEBUG] [Thread-22190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:34:32.781 [DEBUG] [Thread-22190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:34:32.781 [DEBUG] [Thread-22190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:34:32.782 [DEBUG] [Thread-22190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:34:32.782 [DEBUG] [Thread-22190] [transport.py] [_log()] client lang: <none>
2026-04-15T16:34:32.782 [DEBUG] [Thread-22190] [transport.py] [_log()] server lang: <none>
2026-04-15T16:34:32.782 [DEBUG] [Thread-22190] [transport.py] [_log()] kex follows: False
2026-04-15T16:34:32.782 [DEBUG] [Thread-22190] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:34:32.782 [DEBUG] [Thread-22190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:34:32.782 [DEBUG] [Thread-22190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:34:32.782 [DEBUG] [Thread-22190] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:34:32.782 [DEBUG] [Thread-22190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:34:32.782 [DEBUG] [Thread-22190] [transport.py] [_log()] Compression: none
2026-04-15T16:34:32.782 [DEBUG] [Thread-22190] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:34:32.799 [DEBUG] [Thread-22190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:34:32.799 [DEBUG] [Thread-22190] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:34:32.800 [DEBUG] [Thread-22190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:34:32.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:34:32.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:34:32.801 [DEBUG] [Thread-22190] [transport.py] [_log()] userauth is OK
2026-04-15T16:34:32.801 [DEBUG] [Thread-22190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:34:32.801 [DEBUG] [Thread-22190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:34:32.801 [DEBUG] [Thread-22190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:34:32.802 [DEBUG] [Thread-22190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:34:32.820 [INFO] [Thread-22190] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:34:32.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:34:33.631 [DEBUG] [Thread-22190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:34:33.631 [DEBUG] [Thread-22190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:34:33.632 [DEBUG] [Thread-22190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:34:33.672 [DEBUG] [Thread-22190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:34:33.672 [DEBUG] [Thread-22190] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:34:33.675 [DEBUG] [Thread-22190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:34:33.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:34:33.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:34:33.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:34:33.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:34:33.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:34:33.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:34:33.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:34:33.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:34:33.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:34:33.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.607080 -999.00  +14.20  19.13     58   +6.20 1 1 1 1 1   887    0 9.08 35.71 ----- 19.5 19.1 330.8 22.2 19.1 -28.8 18.6 -27.9 19.7 -24.5 20.5 -26.4
2026-04-15T16:34:33.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:34:33.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:34:33.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.607080
2026-04-15T16:34:33.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:34:33.699 [DEBUG] [Thread-22190] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:34:33.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:34:33.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:34:33.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:34:33.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:34:33.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:33:50', tmtdew=9.87344, humidity=51.5895, cloud=0.0, wind=22.1947, temperature=14.9756, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:34:11.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:34:33.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:34:38.093 [DEBUG] [Thread-22193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:34:43.688 [DEBUG] [Thread-22194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:34:58.729 [DEBUG] [Thread-22195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:35:13.761 [DEBUG] [Thread-22196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:35:21.330 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:35:21.331 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:35:28.793 [DEBUG] [Thread-22197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:35:38.167 [DEBUG] [Thread-22198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:35:43.826 [DEBUG] [Thread-22199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:35:58.861 [DEBUG] [Thread-22200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:36:13.891 [DEBUG] [Thread-22201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:36:21.470 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:36:21.471 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:36:28.920 [DEBUG] [Thread-22202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:36:38.255 [DEBUG] [Thread-22203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:36:43.952 [DEBUG] [Thread-22204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:36:47.371 [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
2026-04-15T16:36:58.985 [DEBUG] [Thread-22205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:37:14.017 [DEBUG] [Thread-22206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:37:17.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:37:17.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:37:17.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
2026-04-15T16:37:18.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 36, 48), 9.13943, 54.174, 0.0, 12.6691, 14.5449, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:37:18.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:36:48
2026-04-15T16:37:19.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:37:19.523 [DEBUG] [Thread-22207] [transport.py] [_log()] starting thread (client mode): 0xee91fdf0
2026-04-15T16:37:19.524 [DEBUG] [Thread-22207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:37:19.543 [DEBUG] [Thread-22207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:37:19.543 [INFO] [Thread-22207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:37:19.546 [DEBUG] [Thread-22207] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:37:19.546 [DEBUG] [Thread-22207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:37:19.546 [DEBUG] [Thread-22207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:37:19.547 [DEBUG] [Thread-22207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:37:19.547 [DEBUG] [Thread-22207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:37:19.547 [DEBUG] [Thread-22207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:37:19.547 [DEBUG] [Thread-22207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:37:19.547 [DEBUG] [Thread-22207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:37:19.547 [DEBUG] [Thread-22207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:37:19.547 [DEBUG] [Thread-22207] [transport.py] [_log()] client lang: <none>
2026-04-15T16:37:19.547 [DEBUG] [Thread-22207] [transport.py] [_log()] server lang: <none>
2026-04-15T16:37:19.547 [DEBUG] [Thread-22207] [transport.py] [_log()] kex follows: False
2026-04-15T16:37:19.547 [DEBUG] [Thread-22207] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:37:19.547 [DEBUG] [Thread-22207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:37:19.547 [DEBUG] [Thread-22207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:37:19.548 [DEBUG] [Thread-22207] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:37:19.548 [DEBUG] [Thread-22207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:37:19.548 [DEBUG] [Thread-22207] [transport.py] [_log()] Compression: none
2026-04-15T16:37:19.548 [DEBUG] [Thread-22207] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:37:19.565 [DEBUG] [Thread-22207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:37:19.565 [DEBUG] [Thread-22207] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:37:19.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:37:19.566 [DEBUG] [Thread-22207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:37:19.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:37:19.567 [DEBUG] [Thread-22207] [transport.py] [_log()] userauth is OK
2026-04-15T16:37:19.568 [DEBUG] [Thread-22207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:37:19.568 [DEBUG] [Thread-22207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:37:19.568 [DEBUG] [Thread-22207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:37:19.568 [DEBUG] [Thread-22207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:37:19.592 [INFO] [Thread-22207] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:37:19.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:37:20.356 [DEBUG] [Thread-22207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:37:20.357 [DEBUG] [Thread-22207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:37:20.357 [DEBUG] [Thread-22207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:37:20.397 [DEBUG] [Thread-22207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:37:20.397 [DEBUG] [Thread-22207] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:37:20.400 [DEBUG] [Thread-22207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:37:20.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:37:20.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:37:20.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:37:20.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:37:20.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:37:20.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:37:20.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:37:20.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:37:20.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:37:20.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.608816 -999.00  +13.90   6.14     60   +6.30 1 1 1 1 1   887    0 8.40 17.73 ----- 5.7 6.1 11.6 11.7 18.7 -29.6 18.1 -28.6 19.0 -25.9 19.5 -28.4
2026-04-15T16:37:20.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:37:20.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:37:20.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.608816
2026-04-15T16:37:20.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:37:20.421 [DEBUG] [Thread-22207] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:37:20.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:37:20.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:37:20.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:37:20.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:37:20.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:36:48', tmtdew=9.13943, humidity=54.174, cloud=0.0, wind=12.6691, temperature=14.5449, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:36:41.702', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:37:20.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:37:20.687 [DEBUG] [Thread-22210] [transport.py] [_log()] starting thread (client mode): 0xee91eda0
2026-04-15T16:37:20.687 [DEBUG] [Thread-22210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:37:20.708 [DEBUG] [Thread-22210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:37:20.708 [INFO] [Thread-22210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:37:20.715 [DEBUG] [Thread-22210] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:37:20.715 [DEBUG] [Thread-22210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:37:20.715 [DEBUG] [Thread-22210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:37:20.715 [DEBUG] [Thread-22210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:37:20.716 [DEBUG] [Thread-22210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:37:20.716 [DEBUG] [Thread-22210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:37:20.716 [DEBUG] [Thread-22210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:37:20.716 [DEBUG] [Thread-22210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:37:20.716 [DEBUG] [Thread-22210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:37:20.716 [DEBUG] [Thread-22210] [transport.py] [_log()] client lang: <none>
2026-04-15T16:37:20.716 [DEBUG] [Thread-22210] [transport.py] [_log()] server lang: <none>
2026-04-15T16:37:20.716 [DEBUG] [Thread-22210] [transport.py] [_log()] kex follows: False
2026-04-15T16:37:20.716 [DEBUG] [Thread-22210] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:37:20.716 [DEBUG] [Thread-22210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:37:20.716 [DEBUG] [Thread-22210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:37:20.717 [DEBUG] [Thread-22210] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:37:20.717 [DEBUG] [Thread-22210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:37:20.717 [DEBUG] [Thread-22210] [transport.py] [_log()] Compression: none
2026-04-15T16:37:20.717 [DEBUG] [Thread-22210] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:37:20.775 [DEBUG] [Thread-22210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:37:20.775 [DEBUG] [Thread-22210] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:37:20.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:37:20.776 [DEBUG] [Thread-22210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:37:20.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:37:20.832 [DEBUG] [Thread-22210] [transport.py] [_log()] userauth is OK
2026-04-15T16:37:20.833 [DEBUG] [Thread-22210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:37:20.833 [DEBUG] [Thread-22210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:37:20.833 [DEBUG] [Thread-22210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:37:20.833 [DEBUG] [Thread-22210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:37:20.860 [INFO] [Thread-22210] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:37:20.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:37:20.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:37:21.611 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:37:21.613 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:37:21.680 [DEBUG] [Thread-22210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:37:21.680 [DEBUG] [Thread-22210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:37:21.728 [DEBUG] [Thread-22210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:37:21.728 [DEBUG] [Thread-22210] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:37:21.737 [DEBUG] [Thread-22210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:37:21.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:37:21.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')
2026-04-15T16:37:21.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
2026-04-15T16:37:21.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:37:21.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:37:21.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:37:21.772 [DEBUG] [Thread-22210] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:37:29.049 [DEBUG] [Thread-22212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:37:38.331 [DEBUG] [Thread-22213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:37:44.094 [DEBUG] [Thread-22214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:37:51.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:37:51.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:37:51.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
2026-04-15T16:37:53.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 37, 24), 9.12937, 54.1728, 0.0, 11.9992, 14.0059, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:37:53.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:37:24
2026-04-15T16:37:53.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:37:53.902 [DEBUG] [Thread-22215] [transport.py] [_log()] starting thread (client mode): 0xf1353fd0
2026-04-15T16:37:53.902 [DEBUG] [Thread-22215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:37:53.920 [DEBUG] [Thread-22215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:37:53.920 [INFO] [Thread-22215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:37:53.923 [DEBUG] [Thread-22215] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:37:53.923 [DEBUG] [Thread-22215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:37:53.923 [DEBUG] [Thread-22215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:37:53.923 [DEBUG] [Thread-22215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:37:53.923 [DEBUG] [Thread-22215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:37:53.923 [DEBUG] [Thread-22215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:37:53.923 [DEBUG] [Thread-22215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:37:53.923 [DEBUG] [Thread-22215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:37:53.924 [DEBUG] [Thread-22215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:37:53.924 [DEBUG] [Thread-22215] [transport.py] [_log()] client lang: <none>
2026-04-15T16:37:53.924 [DEBUG] [Thread-22215] [transport.py] [_log()] server lang: <none>
2026-04-15T16:37:53.924 [DEBUG] [Thread-22215] [transport.py] [_log()] kex follows: False
2026-04-15T16:37:53.924 [DEBUG] [Thread-22215] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:37:53.924 [DEBUG] [Thread-22215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:37:53.924 [DEBUG] [Thread-22215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:37:53.924 [DEBUG] [Thread-22215] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:37:53.924 [DEBUG] [Thread-22215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:37:53.924 [DEBUG] [Thread-22215] [transport.py] [_log()] Compression: none
2026-04-15T16:37:53.924 [DEBUG] [Thread-22215] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:37:53.942 [DEBUG] [Thread-22215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:37:53.942 [DEBUG] [Thread-22215] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:37:53.943 [DEBUG] [Thread-22215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:37:53.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:37:53.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:37:53.944 [DEBUG] [Thread-22215] [transport.py] [_log()] userauth is OK
2026-04-15T16:37:53.944 [DEBUG] [Thread-22215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:37:53.944 [DEBUG] [Thread-22215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:37:53.944 [DEBUG] [Thread-22215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:37:53.944 [DEBUG] [Thread-22215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:37:53.979 [INFO] [Thread-22215] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:37:53.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:37:54.762 [DEBUG] [Thread-22215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:37:54.762 [DEBUG] [Thread-22215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:37:54.763 [DEBUG] [Thread-22215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:37:54.803 [DEBUG] [Thread-22215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:37:54.803 [DEBUG] [Thread-22215] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:37:54.806 [DEBUG] [Thread-22215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:37:54.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:37:54.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:37:54.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:37:54.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:37:54.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:37:54.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:37:54.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:37:54.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:37:54.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:37:54.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.609163 -999.00  +13.90   4.44     60   +6.30 1 1 1 1 1   887    0 8.54 13.42 ----- 6.6 4.4 8.6 9.7 18.5 -29.7 18.1 -27.7 18.8 -25.8 19.4 -28.3
2026-04-15T16:37:54.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:37:54.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:37:54.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.609163
2026-04-15T16:37:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:37:54.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:37:54.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:37:54.828 [DEBUG] [Thread-22215] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:37:54.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:37:54.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:37:54.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:37:24', tmtdew=9.12937, humidity=54.1728, cloud=0.0, wind=11.9992, temperature=14.0059, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:37:11.683', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:37:55.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:37:55.087 [DEBUG] [Thread-22218] [transport.py] [_log()] starting thread (client mode): 0xee91f8e0
2026-04-15T16:37:55.087 [DEBUG] [Thread-22218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:37:55.102 [DEBUG] [Thread-22218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:37:55.102 [INFO] [Thread-22218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:37:55.110 [DEBUG] [Thread-22218] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:37:55.110 [DEBUG] [Thread-22218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:37:55.111 [DEBUG] [Thread-22218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:37:55.111 [DEBUG] [Thread-22218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:37:55.111 [DEBUG] [Thread-22218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:37:55.111 [DEBUG] [Thread-22218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:37:55.111 [DEBUG] [Thread-22218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:37:55.111 [DEBUG] [Thread-22218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:37:55.112 [DEBUG] [Thread-22218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:37:55.112 [DEBUG] [Thread-22218] [transport.py] [_log()] client lang: <none>
2026-04-15T16:37:55.112 [DEBUG] [Thread-22218] [transport.py] [_log()] server lang: <none>
2026-04-15T16:37:55.112 [DEBUG] [Thread-22218] [transport.py] [_log()] kex follows: False
2026-04-15T16:37:55.112 [DEBUG] [Thread-22218] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:37:55.112 [DEBUG] [Thread-22218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:37:55.113 [DEBUG] [Thread-22218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:37:55.113 [DEBUG] [Thread-22218] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:37:55.113 [DEBUG] [Thread-22218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:37:55.113 [DEBUG] [Thread-22218] [transport.py] [_log()] Compression: none
2026-04-15T16:37:55.113 [DEBUG] [Thread-22218] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:37:55.168 [DEBUG] [Thread-22218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:37:55.169 [DEBUG] [Thread-22218] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:37:55.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:37:55.169 [DEBUG] [Thread-22218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:37:55.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:37:55.225 [DEBUG] [Thread-22218] [transport.py] [_log()] userauth is OK
2026-04-15T16:37:55.225 [DEBUG] [Thread-22218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:37:55.225 [DEBUG] [Thread-22218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:37:55.225 [DEBUG] [Thread-22218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:37:55.225 [DEBUG] [Thread-22218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:37:55.251 [INFO] [Thread-22218] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:37:55.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:37:55.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:37:56.104 [DEBUG] [Thread-22218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:37:56.105 [DEBUG] [Thread-22218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:37:56.152 [DEBUG] [Thread-22218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:37:56.152 [DEBUG] [Thread-22218] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:37:56.161 [DEBUG] [Thread-22218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:37:56.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:37:56.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')
2026-04-15T16:37:56.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T16:37:56.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:37:56.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:37:56.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:37:56.196 [DEBUG] [Thread-22218] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:37:59.122 [DEBUG] [Thread-22220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:38:14.168 [DEBUG] [Thread-22221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:38:21.759 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:38:21.760 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:38:26.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:38:26.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:38:26.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
2026-04-15T16:38:27.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 37, 59), 8.97562, 54.6561, 0.0, 7.88832, 13.7898, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:38:27.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:37:59
2026-04-15T16:38:28.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:38:28.488 [DEBUG] [Thread-22222] [transport.py] [_log()] starting thread (client mode): 0xf13525c0
2026-04-15T16:38:28.489 [DEBUG] [Thread-22222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:38:28.510 [DEBUG] [Thread-22222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:38:28.510 [INFO] [Thread-22222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:38:28.513 [DEBUG] [Thread-22222] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:38:28.513 [DEBUG] [Thread-22222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:38:28.513 [DEBUG] [Thread-22222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:38:28.514 [DEBUG] [Thread-22222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:38:28.514 [DEBUG] [Thread-22222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:38:28.514 [DEBUG] [Thread-22222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:38:28.514 [DEBUG] [Thread-22222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:38:28.514 [DEBUG] [Thread-22222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:38:28.514 [DEBUG] [Thread-22222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:38:28.514 [DEBUG] [Thread-22222] [transport.py] [_log()] client lang: <none>
2026-04-15T16:38:28.514 [DEBUG] [Thread-22222] [transport.py] [_log()] server lang: <none>
2026-04-15T16:38:28.514 [DEBUG] [Thread-22222] [transport.py] [_log()] kex follows: False
2026-04-15T16:38:28.514 [DEBUG] [Thread-22222] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:38:28.514 [DEBUG] [Thread-22222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:38:28.514 [DEBUG] [Thread-22222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:38:28.515 [DEBUG] [Thread-22222] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:38:28.515 [DEBUG] [Thread-22222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:38:28.515 [DEBUG] [Thread-22222] [transport.py] [_log()] Compression: none
2026-04-15T16:38:28.515 [DEBUG] [Thread-22222] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:38:28.527 [DEBUG] [Thread-22222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:38:28.528 [DEBUG] [Thread-22222] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:38:28.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:38:28.528 [DEBUG] [Thread-22222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:38:28.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:38:28.529 [DEBUG] [Thread-22222] [transport.py] [_log()] userauth is OK
2026-04-15T16:38:28.530 [DEBUG] [Thread-22222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:38:28.530 [DEBUG] [Thread-22222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:38:28.530 [DEBUG] [Thread-22222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:38:28.530 [DEBUG] [Thread-22222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:38:28.565 [INFO] [Thread-22222] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:38:28.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:38:29.200 [DEBUG] [Thread-22224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:38:29.282 [DEBUG] [Thread-22222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:38:29.283 [DEBUG] [Thread-22222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:38:29.283 [DEBUG] [Thread-22222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:38:29.323 [DEBUG] [Thread-22222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:38:29.323 [DEBUG] [Thread-22222] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:38:29.326 [DEBUG] [Thread-22222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:38:29.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:38:29.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:38:29.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:38:29.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:38:29.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:38:29.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:38:29.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:38:29.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:38:29.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:38:29.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.609510 -999.00  +13.90  11.58     61   +6.50 1 1 1 1 1   887    0 8.28 9.86 ----- 10.8 11.6 18.4 12.8 18.5 -29.2 18.0 -28.6 18.7 -25.6 19.2 -27.9
2026-04-15T16:38:29.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:38:29.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:38:29.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.609510
2026-04-15T16:38:29.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:38:29.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:38:29.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:38:29.352 [DEBUG] [Thread-22222] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:38:29.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:38:29.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:38:29.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:37:59', tmtdew=8.97562, humidity=54.6561, cloud=0.0, wind=7.88832, temperature=13.7898, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:37:41.664', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:38:29.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:38:29.613 [DEBUG] [Thread-22226] [transport.py] [_log()] starting thread (client mode): 0xf1352b30
2026-04-15T16:38:29.613 [DEBUG] [Thread-22226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:38:29.628 [DEBUG] [Thread-22226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:38:29.628 [INFO] [Thread-22226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:38:29.635 [DEBUG] [Thread-22226] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:38:29.635 [DEBUG] [Thread-22226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:38:29.636 [DEBUG] [Thread-22226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:38:29.636 [DEBUG] [Thread-22226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:38:29.636 [DEBUG] [Thread-22226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:38:29.636 [DEBUG] [Thread-22226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:38:29.636 [DEBUG] [Thread-22226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:38:29.636 [DEBUG] [Thread-22226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:38:29.636 [DEBUG] [Thread-22226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:38:29.636 [DEBUG] [Thread-22226] [transport.py] [_log()] client lang: <none>
2026-04-15T16:38:29.636 [DEBUG] [Thread-22226] [transport.py] [_log()] server lang: <none>
2026-04-15T16:38:29.636 [DEBUG] [Thread-22226] [transport.py] [_log()] kex follows: False
2026-04-15T16:38:29.637 [DEBUG] [Thread-22226] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:38:29.637 [DEBUG] [Thread-22226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:38:29.637 [DEBUG] [Thread-22226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:38:29.637 [DEBUG] [Thread-22226] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:38:29.637 [DEBUG] [Thread-22226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:38:29.637 [DEBUG] [Thread-22226] [transport.py] [_log()] Compression: none
2026-04-15T16:38:29.637 [DEBUG] [Thread-22226] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:38:29.695 [DEBUG] [Thread-22226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:38:29.695 [DEBUG] [Thread-22226] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:38:29.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:38:29.696 [DEBUG] [Thread-22226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:38:29.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:38:29.754 [DEBUG] [Thread-22226] [transport.py] [_log()] userauth is OK
2026-04-15T16:38:29.754 [DEBUG] [Thread-22226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:38:29.755 [DEBUG] [Thread-22226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:38:29.755 [DEBUG] [Thread-22226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:38:29.755 [DEBUG] [Thread-22226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:38:29.781 [INFO] [Thread-22226] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:38:29.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:38:29.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:38:30.608 [DEBUG] [Thread-22226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:38:30.608 [DEBUG] [Thread-22226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:38:30.656 [DEBUG] [Thread-22226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:38:30.656 [DEBUG] [Thread-22226] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:38:30.665 [DEBUG] [Thread-22226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:38:30.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:38:30.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')
2026-04-15T16:38:30.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
2026-04-15T16:38:30.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:38:30.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:38:30.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:38:30.699 [DEBUG] [Thread-22226] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:38:38.435 [DEBUG] [Thread-22228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:38:44.232 [DEBUG] [Thread-22229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:38:59.277 [DEBUG] [Thread-22230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:39:00.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:39:00.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:39:00.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
2026-04-15T16:39:02.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 38, 35), 9.34237, 53.3452, 0.0, 7.5888, 14.2793, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:39:02.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:38:35
2026-04-15T16:39:02.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:39:02.843 [DEBUG] [Thread-22231] [transport.py] [_log()] starting thread (client mode): 0xf13514b0
2026-04-15T16:39:02.843 [DEBUG] [Thread-22231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:39:02.863 [DEBUG] [Thread-22231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:39:02.863 [INFO] [Thread-22231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:39:02.865 [DEBUG] [Thread-22231] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:39:02.865 [DEBUG] [Thread-22231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:39:02.865 [DEBUG] [Thread-22231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:39:02.865 [DEBUG] [Thread-22231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:39:02.865 [DEBUG] [Thread-22231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:39:02.866 [DEBUG] [Thread-22231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:39:02.866 [DEBUG] [Thread-22231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:39:02.866 [DEBUG] [Thread-22231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:39:02.866 [DEBUG] [Thread-22231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:39:02.866 [DEBUG] [Thread-22231] [transport.py] [_log()] client lang: <none>
2026-04-15T16:39:02.866 [DEBUG] [Thread-22231] [transport.py] [_log()] server lang: <none>
2026-04-15T16:39:02.866 [DEBUG] [Thread-22231] [transport.py] [_log()] kex follows: False
2026-04-15T16:39:02.866 [DEBUG] [Thread-22231] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:39:02.866 [DEBUG] [Thread-22231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:39:02.866 [DEBUG] [Thread-22231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:39:02.867 [DEBUG] [Thread-22231] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:39:02.867 [DEBUG] [Thread-22231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:39:02.867 [DEBUG] [Thread-22231] [transport.py] [_log()] Compression: none
2026-04-15T16:39:02.867 [DEBUG] [Thread-22231] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:39:02.880 [DEBUG] [Thread-22231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:39:02.881 [DEBUG] [Thread-22231] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:39:02.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:39:02.881 [DEBUG] [Thread-22231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:39:02.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:39:02.882 [DEBUG] [Thread-22231] [transport.py] [_log()] userauth is OK
2026-04-15T16:39:02.883 [DEBUG] [Thread-22231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:39:02.883 [DEBUG] [Thread-22231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:39:02.883 [DEBUG] [Thread-22231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:39:02.883 [DEBUG] [Thread-22231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:39:02.900 [INFO] [Thread-22231] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:39:02.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:39:03.692 [DEBUG] [Thread-22231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:39:03.692 [DEBUG] [Thread-22231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:39:03.693 [DEBUG] [Thread-22231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:39:03.735 [DEBUG] [Thread-22231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:39:03.735 [DEBUG] [Thread-22231] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:39:03.738 [DEBUG] [Thread-22231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:39:03.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:39:03.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:39:03.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:39:03.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:39:03.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:39:03.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:39:03.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:39:03.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:39:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:39:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.610205 -999.00  +14.00   7.70     59   +6.40 1 1 1 1 1   887    0 7.92 -0.45 ----- 8.0 7.7 334.2 13.7 18.5 -28.6 18.1 -27.8 18.7 -24.0 19.2 -25.5
2026-04-15T16:39:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:39:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:39:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.610205
2026-04-15T16:39:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:39:03.766 [DEBUG] [Thread-22231] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:39:03.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:39:03.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:39:03.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:39:03.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:39:03.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:38:35', tmtdew=9.34237, humidity=53.3452, cloud=0.0, wind=7.5888, temperature=14.2793, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:38:41.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:39:04.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:39:04.025 [DEBUG] [Thread-22234] [transport.py] [_log()] starting thread (client mode): 0xf1350eb0
2026-04-15T16:39:04.025 [DEBUG] [Thread-22234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:39:04.039 [DEBUG] [Thread-22234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:39:04.039 [INFO] [Thread-22234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:39:04.047 [DEBUG] [Thread-22234] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:39:04.047 [DEBUG] [Thread-22234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:39:04.047 [DEBUG] [Thread-22234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:39:04.047 [DEBUG] [Thread-22234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:39:04.047 [DEBUG] [Thread-22234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:39:04.047 [DEBUG] [Thread-22234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:39:04.047 [DEBUG] [Thread-22234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:39:04.047 [DEBUG] [Thread-22234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:39:04.047 [DEBUG] [Thread-22234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:39:04.047 [DEBUG] [Thread-22234] [transport.py] [_log()] client lang: <none>
2026-04-15T16:39:04.047 [DEBUG] [Thread-22234] [transport.py] [_log()] server lang: <none>
2026-04-15T16:39:04.048 [DEBUG] [Thread-22234] [transport.py] [_log()] kex follows: False
2026-04-15T16:39:04.048 [DEBUG] [Thread-22234] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:39:04.048 [DEBUG] [Thread-22234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:39:04.048 [DEBUG] [Thread-22234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:39:04.048 [DEBUG] [Thread-22234] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:39:04.048 [DEBUG] [Thread-22234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:39:04.048 [DEBUG] [Thread-22234] [transport.py] [_log()] Compression: none
2026-04-15T16:39:04.048 [DEBUG] [Thread-22234] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:39:04.108 [DEBUG] [Thread-22234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:39:04.108 [DEBUG] [Thread-22234] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:39:04.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:39:04.109 [DEBUG] [Thread-22234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:39:04.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:39:04.170 [DEBUG] [Thread-22234] [transport.py] [_log()] userauth is OK
2026-04-15T16:39:04.170 [DEBUG] [Thread-22234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:39:04.170 [DEBUG] [Thread-22234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:39:04.170 [DEBUG] [Thread-22234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:39:04.170 [DEBUG] [Thread-22234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:39:04.199 [INFO] [Thread-22234] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:39:04.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:39:04.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:39:05.031 [DEBUG] [Thread-22234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:39:05.031 [DEBUG] [Thread-22234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:39:05.079 [DEBUG] [Thread-22234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:39:05.079 [DEBUG] [Thread-22234] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:39:05.088 [DEBUG] [Thread-22234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:39:05.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:39:05.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')
2026-04-15T16:39:05.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
2026-04-15T16:39:05.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:39:05.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:39:05.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:39:05.123 [DEBUG] [Thread-22234] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:39:14.307 [DEBUG] [Thread-22236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:39:21.901 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:39:21.902 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:39:29.345 [DEBUG] [Thread-22237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:39:35.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:39:35.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:39:35.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
2026-04-15T16:39:36.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 39, 10), 8.88048, 54.8548, 0.0, 7.50024, 14.0056, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:39:36.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:39:10
2026-04-15T16:39:36.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:39:37.237 [DEBUG] [Thread-22238] [transport.py] [_log()] starting thread (client mode): 0xf1350ee0
2026-04-15T16:39:37.237 [DEBUG] [Thread-22238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:39:37.257 [DEBUG] [Thread-22238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:39:37.257 [INFO] [Thread-22238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:39:37.261 [DEBUG] [Thread-22238] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:39:37.261 [DEBUG] [Thread-22238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:39:37.261 [DEBUG] [Thread-22238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:39:37.261 [DEBUG] [Thread-22238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:39:37.261 [DEBUG] [Thread-22238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:39:37.261 [DEBUG] [Thread-22238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:39:37.261 [DEBUG] [Thread-22238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:39:37.261 [DEBUG] [Thread-22238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:39:37.261 [DEBUG] [Thread-22238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:39:37.262 [DEBUG] [Thread-22238] [transport.py] [_log()] client lang: <none>
2026-04-15T16:39:37.262 [DEBUG] [Thread-22238] [transport.py] [_log()] server lang: <none>
2026-04-15T16:39:37.262 [DEBUG] [Thread-22238] [transport.py] [_log()] kex follows: False
2026-04-15T16:39:37.262 [DEBUG] [Thread-22238] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:39:37.262 [DEBUG] [Thread-22238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:39:37.262 [DEBUG] [Thread-22238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:39:37.262 [DEBUG] [Thread-22238] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:39:37.262 [DEBUG] [Thread-22238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:39:37.262 [DEBUG] [Thread-22238] [transport.py] [_log()] Compression: none
2026-04-15T16:39:37.263 [DEBUG] [Thread-22238] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:39:37.281 [DEBUG] [Thread-22238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:39:37.281 [DEBUG] [Thread-22238] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:39:37.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:39:37.282 [DEBUG] [Thread-22238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:39:37.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:39:37.284 [DEBUG] [Thread-22238] [transport.py] [_log()] userauth is OK
2026-04-15T16:39:37.284 [DEBUG] [Thread-22238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:39:37.284 [DEBUG] [Thread-22238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:39:37.284 [DEBUG] [Thread-22238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:39:37.284 [DEBUG] [Thread-22238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:39:37.308 [INFO] [Thread-22238] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:39:37.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:39:38.101 [DEBUG] [Thread-22238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:39:38.102 [DEBUG] [Thread-22238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:39:38.102 [DEBUG] [Thread-22238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:39:38.143 [DEBUG] [Thread-22238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:39:38.143 [DEBUG] [Thread-22238] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:39:38.146 [DEBUG] [Thread-22238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:39:38.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:39:38.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:39:38.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:39:38.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:39:38.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:39:38.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:39:38.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:39:38.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:39:38.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:39:38.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.610552 -999.00  +14.20   7.49     59   +6.40 1 1 1 1 1   887    0 7.84 -4.62 ----- 6.5 7.5 336.2 9.3 18.6 -28.2 18.1 -26.8 18.9 -23.6 19.3 -26.3
2026-04-15T16:39:38.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:39:38.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:39:38.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.610552
2026-04-15T16:39:38.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:39:38.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:39:38.172 [DEBUG] [Thread-22238] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:39:38.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:39:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:39:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:39:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:39:10', tmtdew=8.88048, humidity=54.8548, cloud=0.0, wind=7.50024, temperature=14.0056, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:39:11.693', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:39:38.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:39:38.418 [DEBUG] [Thread-22241] [transport.py] [_log()] starting thread (client mode): 0xee9265c0
2026-04-15T16:39:38.418 [DEBUG] [Thread-22241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:39:38.432 [DEBUG] [Thread-22241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:39:38.432 [INFO] [Thread-22241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:39:38.439 [DEBUG] [Thread-22241] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] client lang: <none>
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] server lang: <none>
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] kex follows: False
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:39:38.440 [DEBUG] [Thread-22241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:39:38.441 [DEBUG] [Thread-22241] [transport.py] [_log()] Compression: none
2026-04-15T16:39:38.441 [DEBUG] [Thread-22241] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:39:38.496 [DEBUG] [Thread-22241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:39:38.497 [DEBUG] [Thread-22241] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:39:38.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:39:38.497 [DEBUG] [Thread-22241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:39:38.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:39:38.515 [DEBUG] [Thread-22243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:39:38.554 [DEBUG] [Thread-22241] [transport.py] [_log()] userauth is OK
2026-04-15T16:39:38.555 [DEBUG] [Thread-22241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:39:38.555 [DEBUG] [Thread-22241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:39:38.555 [DEBUG] [Thread-22241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:39:38.555 [DEBUG] [Thread-22241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:39:38.580 [INFO] [Thread-22241] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:39:38.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:39:38.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:39:39.416 [DEBUG] [Thread-22241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:39:39.416 [DEBUG] [Thread-22241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:39:39.464 [DEBUG] [Thread-22241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:39:39.464 [DEBUG] [Thread-22241] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:39:39.473 [DEBUG] [Thread-22241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:39:39.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:39:39.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')
2026-04-15T16:39:39.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
2026-04-15T16:39:39.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:39:39.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:39:39.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:39:39.508 [DEBUG] [Thread-22241] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:39:44.377 [DEBUG] [Thread-22244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:39:59.422 [DEBUG] [Thread-22245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:40:09.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:40:09.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:40:09.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
2026-04-15T16:40:10.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 39, 46), 9.54785, 52.6828, 0.0, 12.2458, 14.6441, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:40:10.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:39:46
2026-04-15T16:40:11.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:40:11.630 [DEBUG] [Thread-22246] [transport.py] [_log()] starting thread (client mode): 0xf1351a20
2026-04-15T16:40:11.631 [DEBUG] [Thread-22246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:40:11.651 [DEBUG] [Thread-22246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:40:11.651 [INFO] [Thread-22246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] client lang: <none>
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] server lang: <none>
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] kex follows: False
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:40:11.655 [DEBUG] [Thread-22246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:40:11.656 [DEBUG] [Thread-22246] [transport.py] [_log()] Compression: none
2026-04-15T16:40:11.656 [DEBUG] [Thread-22246] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:40:11.671 [DEBUG] [Thread-22246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:40:11.671 [DEBUG] [Thread-22246] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:40:11.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:40:11.672 [DEBUG] [Thread-22246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:40:11.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:40:11.672 [DEBUG] [Thread-22246] [transport.py] [_log()] userauth is OK
2026-04-15T16:40:11.673 [DEBUG] [Thread-22246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:40:11.673 [DEBUG] [Thread-22246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:40:11.673 [DEBUG] [Thread-22246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:40:11.673 [DEBUG] [Thread-22246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:40:11.686 [INFO] [Thread-22246] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:40:11.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:40:14.453 [DEBUG] [Thread-22248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:40:18.755 [DEBUG] [Thread-22246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:40:18.756 [DEBUG] [Thread-22246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:40:18.756 [DEBUG] [Thread-22246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:40:18.797 [DEBUG] [Thread-22246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:40:18.797 [DEBUG] [Thread-22246] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:40:18.800 [DEBUG] [Thread-22246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:40:18.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:40:18.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:40:18.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:40:18.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:40:18.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:40:18.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:40:18.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:40:18.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:40:18.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:40:18.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.610899 -999.00  +14.40  11.02     60   +6.80 1 1 1 1 1   887    0 7.59 -8.85 ----- 10.6 11.0 337.4 11.3 18.6 -27.5 18.3 -26.6 19.1 -22.9 19.6 -24.4
2026-04-15T16:40:18.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:40:18.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:40:18.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.610899
2026-04-15T16:40:18.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:40:18.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:40:18.899 [DEBUG] [Thread-22246] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:40:18.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:40:18.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:40:18.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:40:18.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:39:46', tmtdew=9.54785, humidity=52.6828, cloud=0.0, wind=12.2458, temperature=14.6441, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:39:41.674', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:40:19.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:40:19.161 [DEBUG] [Thread-22250] [transport.py] [_log()] starting thread (client mode): 0xf1350be0
2026-04-15T16:40:19.161 [DEBUG] [Thread-22250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:40:19.176 [DEBUG] [Thread-22250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:40:19.176 [INFO] [Thread-22250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:40:19.183 [DEBUG] [Thread-22250] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:40:19.183 [DEBUG] [Thread-22250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:40:19.183 [DEBUG] [Thread-22250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:40:19.183 [DEBUG] [Thread-22250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:40:19.183 [DEBUG] [Thread-22250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:40:19.184 [DEBUG] [Thread-22250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:40:19.184 [DEBUG] [Thread-22250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:40:19.184 [DEBUG] [Thread-22250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:40:19.184 [DEBUG] [Thread-22250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:40:19.184 [DEBUG] [Thread-22250] [transport.py] [_log()] client lang: <none>
2026-04-15T16:40:19.184 [DEBUG] [Thread-22250] [transport.py] [_log()] server lang: <none>
2026-04-15T16:40:19.184 [DEBUG] [Thread-22250] [transport.py] [_log()] kex follows: False
2026-04-15T16:40:19.184 [DEBUG] [Thread-22250] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:40:19.184 [DEBUG] [Thread-22250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:40:19.184 [DEBUG] [Thread-22250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:40:19.184 [DEBUG] [Thread-22250] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:40:19.185 [DEBUG] [Thread-22250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:40:19.185 [DEBUG] [Thread-22250] [transport.py] [_log()] Compression: none
2026-04-15T16:40:19.185 [DEBUG] [Thread-22250] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:40:19.241 [DEBUG] [Thread-22250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:40:19.242 [DEBUG] [Thread-22250] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:40:19.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:40:19.242 [DEBUG] [Thread-22250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:40:19.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:40:19.298 [DEBUG] [Thread-22250] [transport.py] [_log()] userauth is OK
2026-04-15T16:40:19.299 [DEBUG] [Thread-22250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:40:19.299 [DEBUG] [Thread-22250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:40:19.299 [DEBUG] [Thread-22250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:40:19.299 [DEBUG] [Thread-22250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:40:19.324 [INFO] [Thread-22250] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:40:19.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:40:19.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:40:20.144 [DEBUG] [Thread-22250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:40:20.144 [DEBUG] [Thread-22250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:40:20.192 [DEBUG] [Thread-22250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:40:20.192 [DEBUG] [Thread-22250] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:40:20.201 [DEBUG] [Thread-22250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:40:20.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:40:20.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')
2026-04-15T16:40:20.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') -> 00000000
2026-04-15T16:40:20.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:40:20.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:40:20.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:40:20.236 [DEBUG] [Thread-22250] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:40:22.046 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:40:22.048 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:40:29.485 [DEBUG] [Thread-22252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:40:38.603 [DEBUG] [Thread-22253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:40:44.528 [DEBUG] [Thread-22254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:40:50.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:40:50.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:40:50.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T16:40:51.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 40, 22), 9.04774, 54.2586, 0.0, 12.6342, 14.2886, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:40:51.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:40:22
2026-04-15T16:40:52.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:40:52.499 [DEBUG] [Thread-22255] [transport.py] [_log()] starting thread (client mode): 0xee9263b0
2026-04-15T16:40:52.499 [DEBUG] [Thread-22255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:40:52.520 [DEBUG] [Thread-22255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:40:52.520 [INFO] [Thread-22255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:40:52.523 [DEBUG] [Thread-22255] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:40:52.523 [DEBUG] [Thread-22255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:40:52.523 [DEBUG] [Thread-22255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:40:52.523 [DEBUG] [Thread-22255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:40:52.523 [DEBUG] [Thread-22255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:40:52.523 [DEBUG] [Thread-22255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:40:52.523 [DEBUG] [Thread-22255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:40:52.523 [DEBUG] [Thread-22255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:40:52.524 [DEBUG] [Thread-22255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:40:52.524 [DEBUG] [Thread-22255] [transport.py] [_log()] client lang: <none>
2026-04-15T16:40:52.524 [DEBUG] [Thread-22255] [transport.py] [_log()] server lang: <none>
2026-04-15T16:40:52.524 [DEBUG] [Thread-22255] [transport.py] [_log()] kex follows: False
2026-04-15T16:40:52.524 [DEBUG] [Thread-22255] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:40:52.524 [DEBUG] [Thread-22255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:40:52.524 [DEBUG] [Thread-22255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:40:52.524 [DEBUG] [Thread-22255] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:40:52.524 [DEBUG] [Thread-22255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:40:52.524 [DEBUG] [Thread-22255] [transport.py] [_log()] Compression: none
2026-04-15T16:40:52.524 [DEBUG] [Thread-22255] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:40:52.541 [DEBUG] [Thread-22255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:40:52.541 [DEBUG] [Thread-22255] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:40:52.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:40:52.542 [DEBUG] [Thread-22255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:40:52.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:40:52.543 [DEBUG] [Thread-22255] [transport.py] [_log()] userauth is OK
2026-04-15T16:40:52.543 [DEBUG] [Thread-22255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:40:52.543 [DEBUG] [Thread-22255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:40:52.543 [DEBUG] [Thread-22255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:40:52.543 [DEBUG] [Thread-22255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:40:52.567 [INFO] [Thread-22255] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:40:52.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:40:53.353 [DEBUG] [Thread-22255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:40:53.353 [DEBUG] [Thread-22255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:40:53.354 [DEBUG] [Thread-22255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:40:53.394 [DEBUG] [Thread-22255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:40:53.394 [DEBUG] [Thread-22255] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:40:53.397 [DEBUG] [Thread-22255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:40:53.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:40:53.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:40:53.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:40:53.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:40:53.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:40:53.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:40:53.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:40:53.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:40:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:40:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.611246 -999.00  +14.70  10.27     60   +7.10 1 1 1 1 1   887    0 7.59 -12.07 ----- 10.2 10.3 295.8 12.9 18.8 -27.9 18.3 -26.9 19.2 -23.3 19.8 -25.3
2026-04-15T16:40:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:40:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:40:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.611246
2026-04-15T16:40:53.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:40:53.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:40:53.425 [DEBUG] [Thread-22255] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:40:53.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:40:53.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:40:53.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:40:53.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:40:22', tmtdew=9.04774, humidity=54.2586, cloud=0.0, wind=12.6342, temperature=14.2886, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:40:11.654', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:40:53.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:40:53.698 [DEBUG] [Thread-22258] [transport.py] [_log()] starting thread (client mode): 0xf13fe590
2026-04-15T16:40:53.699 [DEBUG] [Thread-22258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:40:53.713 [DEBUG] [Thread-22258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:40:53.713 [INFO] [Thread-22258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:40:53.721 [DEBUG] [Thread-22258] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:40:53.721 [DEBUG] [Thread-22258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:40:53.721 [DEBUG] [Thread-22258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:40:53.721 [DEBUG] [Thread-22258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:40:53.721 [DEBUG] [Thread-22258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:40:53.721 [DEBUG] [Thread-22258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:40:53.721 [DEBUG] [Thread-22258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:40:53.721 [DEBUG] [Thread-22258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:40:53.721 [DEBUG] [Thread-22258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:40:53.721 [DEBUG] [Thread-22258] [transport.py] [_log()] client lang: <none>
2026-04-15T16:40:53.722 [DEBUG] [Thread-22258] [transport.py] [_log()] server lang: <none>
2026-04-15T16:40:53.722 [DEBUG] [Thread-22258] [transport.py] [_log()] kex follows: False
2026-04-15T16:40:53.722 [DEBUG] [Thread-22258] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:40:53.722 [DEBUG] [Thread-22258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:40:53.722 [DEBUG] [Thread-22258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:40:53.722 [DEBUG] [Thread-22258] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:40:53.722 [DEBUG] [Thread-22258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:40:53.722 [DEBUG] [Thread-22258] [transport.py] [_log()] Compression: none
2026-04-15T16:40:53.722 [DEBUG] [Thread-22258] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:40:53.778 [DEBUG] [Thread-22258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:40:53.778 [DEBUG] [Thread-22258] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:40:53.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:40:53.779 [DEBUG] [Thread-22258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:40:53.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:40:53.835 [DEBUG] [Thread-22258] [transport.py] [_log()] userauth is OK
2026-04-15T16:40:53.835 [DEBUG] [Thread-22258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:40:53.835 [DEBUG] [Thread-22258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:40:53.835 [DEBUG] [Thread-22258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:40:53.835 [DEBUG] [Thread-22258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:40:53.854 [INFO] [Thread-22258] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:40:53.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:40:53.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:40:54.683 [DEBUG] [Thread-22258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:40:54.683 [DEBUG] [Thread-22258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:40:54.731 [DEBUG] [Thread-22258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:40:54.731 [DEBUG] [Thread-22258] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:40:54.740 [DEBUG] [Thread-22258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:40:54.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:40:54.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')
2026-04-15T16:40:54.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
2026-04-15T16:40:54.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:40:54.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:40:54.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:40:54.774 [DEBUG] [Thread-22258] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:40:59.558 [DEBUG] [Thread-22260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:41:14.607 [DEBUG] [Thread-22261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:41:22.190 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:41:22.191 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:41:24.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:41:24.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:41:24.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
2026-04-15T16:41:26.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 40, 57), 8.99954, 54.9572, 0.0, 16.2518, 14.5713, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:41:26.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:40:57
2026-04-15T16:41:26.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:41:26.918 [DEBUG] [Thread-22262] [transport.py] [_log()] starting thread (client mode): 0xee9adb70
2026-04-15T16:41:26.919 [DEBUG] [Thread-22262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:41:26.933 [DEBUG] [Thread-22262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:41:26.933 [INFO] [Thread-22262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:41:26.936 [DEBUG] [Thread-22262] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:41:26.936 [DEBUG] [Thread-22262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:41:26.936 [DEBUG] [Thread-22262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:41:26.937 [DEBUG] [Thread-22262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:41:26.937 [DEBUG] [Thread-22262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:41:26.937 [DEBUG] [Thread-22262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:41:26.937 [DEBUG] [Thread-22262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:41:26.937 [DEBUG] [Thread-22262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:41:26.937 [DEBUG] [Thread-22262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:41:26.937 [DEBUG] [Thread-22262] [transport.py] [_log()] client lang: <none>
2026-04-15T16:41:26.937 [DEBUG] [Thread-22262] [transport.py] [_log()] server lang: <none>
2026-04-15T16:41:26.937 [DEBUG] [Thread-22262] [transport.py] [_log()] kex follows: False
2026-04-15T16:41:26.937 [DEBUG] [Thread-22262] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:41:26.937 [DEBUG] [Thread-22262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:41:26.938 [DEBUG] [Thread-22262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:41:26.938 [DEBUG] [Thread-22262] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:41:26.938 [DEBUG] [Thread-22262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:41:26.938 [DEBUG] [Thread-22262] [transport.py] [_log()] Compression: none
2026-04-15T16:41:26.938 [DEBUG] [Thread-22262] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:41:26.954 [DEBUG] [Thread-22262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:41:26.955 [DEBUG] [Thread-22262] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:41:26.955 [DEBUG] [Thread-22262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:41:26.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:41:26.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:41:26.956 [DEBUG] [Thread-22262] [transport.py] [_log()] userauth is OK
2026-04-15T16:41:26.956 [DEBUG] [Thread-22262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:41:26.956 [DEBUG] [Thread-22262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:41:26.956 [DEBUG] [Thread-22262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:41:26.956 [DEBUG] [Thread-22262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:41:26.972 [INFO] [Thread-22262] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:41:26.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:41:27.710 [DEBUG] [Thread-22262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:41:27.711 [DEBUG] [Thread-22262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:41:27.711 [DEBUG] [Thread-22262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:41:27.751 [DEBUG] [Thread-22262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:41:27.751 [DEBUG] [Thread-22262] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:41:27.754 [DEBUG] [Thread-22262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:41:27.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:41:27.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:41:27.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:41:27.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:41:27.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:41:27.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:41:27.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:41:27.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:41:27.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:41:27.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.611594 -999.00  +14.80  14.66     61   +7.50 1 1 1 1 1   887    0 7.49 -15.78 ----- 13.6 14.7 304.0 19.7 18.9 -28.0 18.4 -26.7 19.3 -24.0 20.0 -25.6
2026-04-15T16:41:27.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:41:27.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:41:27.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.611594
2026-04-15T16:41:27.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:41:27.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:41:27.777 [DEBUG] [Thread-22262] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:41:27.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:41:27.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:41:27.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:41:27.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:40:57', tmtdew=8.99954, humidity=54.9572, cloud=0.0, wind=16.2518, temperature=14.5713, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:40:41.722', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:41:28.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:41:28.035 [DEBUG] [Thread-22265] [transport.py] [_log()] starting thread (client mode): 0xee91cd60
2026-04-15T16:41:28.035 [DEBUG] [Thread-22265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:41:28.049 [DEBUG] [Thread-22265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:41:28.049 [INFO] [Thread-22265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:41:28.057 [DEBUG] [Thread-22265] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:41:28.057 [DEBUG] [Thread-22265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:41:28.057 [DEBUG] [Thread-22265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:41:28.057 [DEBUG] [Thread-22265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:41:28.057 [DEBUG] [Thread-22265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:41:28.057 [DEBUG] [Thread-22265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:41:28.057 [DEBUG] [Thread-22265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:41:28.057 [DEBUG] [Thread-22265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:41:28.057 [DEBUG] [Thread-22265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:41:28.057 [DEBUG] [Thread-22265] [transport.py] [_log()] client lang: <none>
2026-04-15T16:41:28.058 [DEBUG] [Thread-22265] [transport.py] [_log()] server lang: <none>
2026-04-15T16:41:28.058 [DEBUG] [Thread-22265] [transport.py] [_log()] kex follows: False
2026-04-15T16:41:28.058 [DEBUG] [Thread-22265] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:41:28.058 [DEBUG] [Thread-22265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:41:28.058 [DEBUG] [Thread-22265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:41:28.058 [DEBUG] [Thread-22265] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:41:28.058 [DEBUG] [Thread-22265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:41:28.058 [DEBUG] [Thread-22265] [transport.py] [_log()] Compression: none
2026-04-15T16:41:28.058 [DEBUG] [Thread-22265] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:41:28.114 [DEBUG] [Thread-22265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:41:28.114 [DEBUG] [Thread-22265] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:41:28.115 [DEBUG] [Thread-22265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:41:28.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:41:28.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:41:28.171 [DEBUG] [Thread-22265] [transport.py] [_log()] userauth is OK
2026-04-15T16:41:28.171 [DEBUG] [Thread-22265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:41:28.171 [DEBUG] [Thread-22265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:41:28.171 [DEBUG] [Thread-22265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:41:28.171 [DEBUG] [Thread-22265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:41:28.193 [INFO] [Thread-22265] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:41:28.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:41:28.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:41:29.100 [DEBUG] [Thread-22265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:41:29.100 [DEBUG] [Thread-22265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:41:29.148 [DEBUG] [Thread-22265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:41:29.148 [DEBUG] [Thread-22265] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:41:29.156 [DEBUG] [Thread-22265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:41:29.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:41:29.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')
2026-04-15T16:41:29.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') -> 00000000
2026-04-15T16:41:29.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:41:29.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:41:29.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:41:29.189 [DEBUG] [Thread-22265] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:41:29.638 [DEBUG] [Thread-22267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:41:38.692 [DEBUG] [Thread-22268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:41:44.682 [DEBUG] [Thread-22269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:41:59.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:41:59.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:41:59.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
2026-04-15T16:41:59.714 [DEBUG] [Thread-22270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:42:00.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 41, 32), 8.85585, 55.5205, 0.0, 16.8516, 14.6873, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:42:00.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:41:32
2026-04-15T16:42:00.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:42:01.318 [DEBUG] [Thread-22271] [transport.py] [_log()] starting thread (client mode): 0xee9af970
2026-04-15T16:42:01.319 [DEBUG] [Thread-22271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:42:01.339 [DEBUG] [Thread-22271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:42:01.339 [INFO] [Thread-22271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:42:01.342 [DEBUG] [Thread-22271] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:42:01.342 [DEBUG] [Thread-22271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:42:01.342 [DEBUG] [Thread-22271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:42:01.342 [DEBUG] [Thread-22271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:42:01.342 [DEBUG] [Thread-22271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:42:01.342 [DEBUG] [Thread-22271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:42:01.342 [DEBUG] [Thread-22271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:42:01.343 [DEBUG] [Thread-22271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:42:01.343 [DEBUG] [Thread-22271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:42:01.343 [DEBUG] [Thread-22271] [transport.py] [_log()] client lang: <none>
2026-04-15T16:42:01.343 [DEBUG] [Thread-22271] [transport.py] [_log()] server lang: <none>
2026-04-15T16:42:01.343 [DEBUG] [Thread-22271] [transport.py] [_log()] kex follows: False
2026-04-15T16:42:01.343 [DEBUG] [Thread-22271] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:42:01.343 [DEBUG] [Thread-22271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:42:01.343 [DEBUG] [Thread-22271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:42:01.343 [DEBUG] [Thread-22271] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:42:01.343 [DEBUG] [Thread-22271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:42:01.343 [DEBUG] [Thread-22271] [transport.py] [_log()] Compression: none
2026-04-15T16:42:01.344 [DEBUG] [Thread-22271] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:42:01.361 [DEBUG] [Thread-22271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:42:01.362 [DEBUG] [Thread-22271] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:42:01.362 [DEBUG] [Thread-22271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:42:01.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:42:01.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:42:01.363 [DEBUG] [Thread-22271] [transport.py] [_log()] userauth is OK
2026-04-15T16:42:01.363 [DEBUG] [Thread-22271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:42:01.364 [DEBUG] [Thread-22271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:42:01.364 [DEBUG] [Thread-22271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:42:01.364 [DEBUG] [Thread-22271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:42:01.382 [INFO] [Thread-22271] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:42:01.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:42:02.193 [DEBUG] [Thread-22271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:42:02.193 [DEBUG] [Thread-22271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:42:02.194 [DEBUG] [Thread-22271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:42:02.234 [DEBUG] [Thread-22271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:42:02.234 [DEBUG] [Thread-22271] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:42:02.237 [DEBUG] [Thread-22271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:42:02.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:42:02.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:42:02.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:42:02.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:42:02.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:42:02.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:42:02.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:42:02.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:42:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:42:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.611941 -999.00  +14.60  19.86     62   +7.40 1 1 1 1 1   887    0 7.36 -21.71 ----- 18.9 19.9 297.4 23.7 18.8 -28.3 18.4 -27.4 19.2 -24.5 20.1 -25.2
2026-04-15T16:42:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:42:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:42:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.611941
2026-04-15T16:42:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:42:02.257 [DEBUG] [Thread-22271] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:42:02.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:42:02.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:42:02.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:42:02.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:42:02.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:41:32', tmtdew=8.85585, humidity=55.5205, cloud=0.0, wind=16.8516, temperature=14.6873, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:41:11.702', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:42:02.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:42:02.480 [DEBUG] [Thread-22274] [transport.py] [_log()] starting thread (client mode): 0xf13fde10
2026-04-15T16:42:02.481 [DEBUG] [Thread-22274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:42:02.495 [DEBUG] [Thread-22274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:42:02.495 [INFO] [Thread-22274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:42:02.502 [DEBUG] [Thread-22274] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:42:02.502 [DEBUG] [Thread-22274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:42:02.503 [DEBUG] [Thread-22274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:42:02.503 [DEBUG] [Thread-22274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:42:02.503 [DEBUG] [Thread-22274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:42:02.503 [DEBUG] [Thread-22274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:42:02.503 [DEBUG] [Thread-22274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:42:02.503 [DEBUG] [Thread-22274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:42:02.503 [DEBUG] [Thread-22274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:42:02.503 [DEBUG] [Thread-22274] [transport.py] [_log()] client lang: <none>
2026-04-15T16:42:02.503 [DEBUG] [Thread-22274] [transport.py] [_log()] server lang: <none>
2026-04-15T16:42:02.503 [DEBUG] [Thread-22274] [transport.py] [_log()] kex follows: False
2026-04-15T16:42:02.503 [DEBUG] [Thread-22274] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:42:02.503 [DEBUG] [Thread-22274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:42:02.504 [DEBUG] [Thread-22274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:42:02.504 [DEBUG] [Thread-22274] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:42:02.504 [DEBUG] [Thread-22274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:42:02.504 [DEBUG] [Thread-22274] [transport.py] [_log()] Compression: none
2026-04-15T16:42:02.504 [DEBUG] [Thread-22274] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:42:02.559 [DEBUG] [Thread-22274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:42:02.559 [DEBUG] [Thread-22274] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:42:02.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:42:02.560 [DEBUG] [Thread-22274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:42:02.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:42:02.615 [DEBUG] [Thread-22274] [transport.py] [_log()] userauth is OK
2026-04-15T16:42:02.615 [DEBUG] [Thread-22274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:42:02.616 [DEBUG] [Thread-22274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:42:02.616 [DEBUG] [Thread-22274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:42:02.616 [DEBUG] [Thread-22274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:42:02.641 [INFO] [Thread-22274] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:42:02.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:42:02.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:42:03.541 [DEBUG] [Thread-22274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:42:03.541 [DEBUG] [Thread-22274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:42:03.591 [DEBUG] [Thread-22274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:42:03.591 [DEBUG] [Thread-22274] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:42:03.600 [DEBUG] [Thread-22274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:42:03.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:42:03.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')
2026-04-15T16:42:03.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
2026-04-15T16:42:03.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:42:03.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:42:03.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:42:03.638 [DEBUG] [Thread-22274] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:42:14.745 [DEBUG] [Thread-22276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:42:22.330 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:42:22.331 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:42:29.784 [DEBUG] [Thread-22277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:42:33.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:42:33.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:42:33.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
2026-04-15T16:42:34.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 42, 8), 8.56527, 56.6141, 0.0, 15.8285, 14.6377, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:42:34.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:42:08
2026-04-15T16:42:35.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:42:35.754 [DEBUG] [Thread-22278] [transport.py] [_log()] starting thread (client mode): 0xf1350100
2026-04-15T16:42:35.755 [DEBUG] [Thread-22278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:42:35.777 [DEBUG] [Thread-22278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:42:35.777 [INFO] [Thread-22278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:42:35.780 [DEBUG] [Thread-22278] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:42:35.780 [DEBUG] [Thread-22278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:42:35.780 [DEBUG] [Thread-22278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:42:35.780 [DEBUG] [Thread-22278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:42:35.781 [DEBUG] [Thread-22278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:42:35.781 [DEBUG] [Thread-22278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:42:35.781 [DEBUG] [Thread-22278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:42:35.781 [DEBUG] [Thread-22278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:42:35.781 [DEBUG] [Thread-22278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:42:35.781 [DEBUG] [Thread-22278] [transport.py] [_log()] client lang: <none>
2026-04-15T16:42:35.781 [DEBUG] [Thread-22278] [transport.py] [_log()] server lang: <none>
2026-04-15T16:42:35.781 [DEBUG] [Thread-22278] [transport.py] [_log()] kex follows: False
2026-04-15T16:42:35.781 [DEBUG] [Thread-22278] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:42:35.781 [DEBUG] [Thread-22278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:42:35.781 [DEBUG] [Thread-22278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:42:35.782 [DEBUG] [Thread-22278] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:42:35.782 [DEBUG] [Thread-22278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:42:35.782 [DEBUG] [Thread-22278] [transport.py] [_log()] Compression: none
2026-04-15T16:42:35.782 [DEBUG] [Thread-22278] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:42:35.798 [DEBUG] [Thread-22278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:42:35.799 [DEBUG] [Thread-22278] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:42:35.799 [DEBUG] [Thread-22278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:42:35.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:42:35.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:42:35.801 [DEBUG] [Thread-22278] [transport.py] [_log()] userauth is OK
2026-04-15T16:42:35.801 [DEBUG] [Thread-22278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:42:35.801 [DEBUG] [Thread-22278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:42:35.801 [DEBUG] [Thread-22278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:42:35.801 [DEBUG] [Thread-22278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:42:35.826 [INFO] [Thread-22278] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:42:35.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:42:36.582 [DEBUG] [Thread-22278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:42:36.583 [DEBUG] [Thread-22278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:42:36.583 [DEBUG] [Thread-22278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:42:36.624 [DEBUG] [Thread-22278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:42:36.624 [DEBUG] [Thread-22278] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:42:36.627 [DEBUG] [Thread-22278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:42:36.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:42:36.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:42:36.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:42:36.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:42:36.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:42:36.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:42:36.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:42:36.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:42:36.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:42:36.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.612288 -999.00  +14.40  23.64     62   +7.40 1 1 1 1 1   887    0 7.15 -26.49 ----- 21.2 23.6 306.6 25.4 18.8 -27.5 18.2 -26.7 19.3 -23.4 20.0 -25.0
2026-04-15T16:42:36.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:42:36.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:42:36.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.612288
2026-04-15T16:42:36.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:42:36.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:42:36.649 [DEBUG] [Thread-22278] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:42:36.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:42:36.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:42:36.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:42:36.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:42:08', tmtdew=8.56527, humidity=56.6141, cloud=0.0, wind=15.8285, temperature=14.6377, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:41:41.683', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:42:36.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:42:36.900 [DEBUG] [Thread-22281] [transport.py] [_log()] starting thread (client mode): 0xf17c3e20
2026-04-15T16:42:36.900 [DEBUG] [Thread-22281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:42:36.915 [DEBUG] [Thread-22281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:42:36.915 [INFO] [Thread-22281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:42:36.922 [DEBUG] [Thread-22281] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:42:36.922 [DEBUG] [Thread-22281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:42:36.922 [DEBUG] [Thread-22281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:42:36.922 [DEBUG] [Thread-22281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:42:36.922 [DEBUG] [Thread-22281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:42:36.923 [DEBUG] [Thread-22281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:42:36.923 [DEBUG] [Thread-22281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:42:36.923 [DEBUG] [Thread-22281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:42:36.923 [DEBUG] [Thread-22281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:42:36.923 [DEBUG] [Thread-22281] [transport.py] [_log()] client lang: <none>
2026-04-15T16:42:36.923 [DEBUG] [Thread-22281] [transport.py] [_log()] server lang: <none>
2026-04-15T16:42:36.923 [DEBUG] [Thread-22281] [transport.py] [_log()] kex follows: False
2026-04-15T16:42:36.923 [DEBUG] [Thread-22281] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:42:36.923 [DEBUG] [Thread-22281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:42:36.923 [DEBUG] [Thread-22281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:42:36.923 [DEBUG] [Thread-22281] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:42:36.924 [DEBUG] [Thread-22281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:42:36.924 [DEBUG] [Thread-22281] [transport.py] [_log()] Compression: none
2026-04-15T16:42:36.924 [DEBUG] [Thread-22281] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:42:36.979 [DEBUG] [Thread-22281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:42:36.980 [DEBUG] [Thread-22281] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:42:36.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:42:36.980 [DEBUG] [Thread-22281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:42:36.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:42:37.036 [DEBUG] [Thread-22281] [transport.py] [_log()] userauth is OK
2026-04-15T16:42:37.036 [DEBUG] [Thread-22281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:42:37.036 [DEBUG] [Thread-22281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:42:37.036 [DEBUG] [Thread-22281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:42:37.037 [DEBUG] [Thread-22281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:42:37.064 [INFO] [Thread-22281] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:42:37.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:42:37.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:42:37.890 [DEBUG] [Thread-22281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:42:37.890 [DEBUG] [Thread-22281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:42:37.938 [DEBUG] [Thread-22281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:42:37.938 [DEBUG] [Thread-22281] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:42:37.947 [DEBUG] [Thread-22281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:42:37.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:42:37.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')
2026-04-15T16:42:37.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
2026-04-15T16:42:37.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:42:37.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:42:37.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:42:37.982 [DEBUG] [Thread-22281] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:42:38.817 [DEBUG] [Thread-22283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:42:44.814 [DEBUG] [Thread-22284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:42:59.857 [DEBUG] [Thread-22285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:43:08.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:43:08.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:43:08.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
2026-04-15T16:43:09.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 42, 44), 8.556, 56.5595, 0.0, 14.7859, 15.1412, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:43:09.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:42:44
2026-04-15T16:43:09.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:43:10.173 [DEBUG] [Thread-22286] [transport.py] [_log()] starting thread (client mode): 0xf13fd9c0
2026-04-15T16:43:10.173 [DEBUG] [Thread-22286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:43:10.192 [DEBUG] [Thread-22286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:43:10.192 [INFO] [Thread-22286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:43:10.194 [DEBUG] [Thread-22286] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:43:10.194 [DEBUG] [Thread-22286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:43:10.194 [DEBUG] [Thread-22286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:43:10.194 [DEBUG] [Thread-22286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:43:10.194 [DEBUG] [Thread-22286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:43:10.194 [DEBUG] [Thread-22286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:43:10.194 [DEBUG] [Thread-22286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:43:10.194 [DEBUG] [Thread-22286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:43:10.195 [DEBUG] [Thread-22286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:43:10.195 [DEBUG] [Thread-22286] [transport.py] [_log()] client lang: <none>
2026-04-15T16:43:10.195 [DEBUG] [Thread-22286] [transport.py] [_log()] server lang: <none>
2026-04-15T16:43:10.195 [DEBUG] [Thread-22286] [transport.py] [_log()] kex follows: False
2026-04-15T16:43:10.195 [DEBUG] [Thread-22286] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:43:10.195 [DEBUG] [Thread-22286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:43:10.195 [DEBUG] [Thread-22286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:43:10.195 [DEBUG] [Thread-22286] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:43:10.195 [DEBUG] [Thread-22286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:43:10.195 [DEBUG] [Thread-22286] [transport.py] [_log()] Compression: none
2026-04-15T16:43:10.195 [DEBUG] [Thread-22286] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:43:10.208 [DEBUG] [Thread-22286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:43:10.208 [DEBUG] [Thread-22286] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:43:10.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:43:10.209 [DEBUG] [Thread-22286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:43:10.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:43:10.210 [DEBUG] [Thread-22286] [transport.py] [_log()] userauth is OK
2026-04-15T16:43:10.210 [DEBUG] [Thread-22286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:43:10.210 [DEBUG] [Thread-22286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:43:10.210 [DEBUG] [Thread-22286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:43:10.210 [DEBUG] [Thread-22286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:43:10.228 [INFO] [Thread-22286] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:43:10.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:43:10.862 [DEBUG] [Thread-22286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:43:10.862 [DEBUG] [Thread-22286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:43:10.862 [DEBUG] [Thread-22286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:43:10.903 [DEBUG] [Thread-22286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:43:10.903 [DEBUG] [Thread-22286] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:43:10.906 [DEBUG] [Thread-22286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:43:10.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:43:10.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:43:10.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:43:10.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:43:10.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:43:10.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:43:10.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:43:10.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:43:10.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:43:10.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.612982 -999.00  +14.40  19.32     62   +7.40 1 1 1 1 1   887    0 6.80 -37.44 ----- 21.4 19.3 308.6 26.1 18.8 -28.3 18.3 -26.9 19.3 -25.1 20.1 -25.5
2026-04-15T16:43:10.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:43:10.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:43:10.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.612982
2026-04-15T16:43:10.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:43:10.929 [DEBUG] [Thread-22286] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:43:10.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:43:10.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:43:10.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:43:10.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:43:10.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:42:44', tmtdew=8.556, humidity=56.5595, cloud=0.0, wind=14.7859, temperature=15.1412, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:42:41.645', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:43:11.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:43:11.167 [DEBUG] [Thread-22289] [transport.py] [_log()] starting thread (client mode): 0xf13ff910
2026-04-15T16:43:11.167 [DEBUG] [Thread-22289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:43:11.181 [DEBUG] [Thread-22289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:43:11.181 [INFO] [Thread-22289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:43:11.189 [DEBUG] [Thread-22289] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:43:11.189 [DEBUG] [Thread-22289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:43:11.189 [DEBUG] [Thread-22289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:43:11.189 [DEBUG] [Thread-22289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:43:11.189 [DEBUG] [Thread-22289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:43:11.189 [DEBUG] [Thread-22289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:43:11.189 [DEBUG] [Thread-22289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:43:11.189 [DEBUG] [Thread-22289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:43:11.190 [DEBUG] [Thread-22289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:43:11.190 [DEBUG] [Thread-22289] [transport.py] [_log()] client lang: <none>
2026-04-15T16:43:11.190 [DEBUG] [Thread-22289] [transport.py] [_log()] server lang: <none>
2026-04-15T16:43:11.190 [DEBUG] [Thread-22289] [transport.py] [_log()] kex follows: False
2026-04-15T16:43:11.190 [DEBUG] [Thread-22289] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:43:11.190 [DEBUG] [Thread-22289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:43:11.190 [DEBUG] [Thread-22289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:43:11.190 [DEBUG] [Thread-22289] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:43:11.190 [DEBUG] [Thread-22289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:43:11.190 [DEBUG] [Thread-22289] [transport.py] [_log()] Compression: none
2026-04-15T16:43:11.190 [DEBUG] [Thread-22289] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:43:11.248 [DEBUG] [Thread-22289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:43:11.249 [DEBUG] [Thread-22289] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:43:11.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:43:11.250 [DEBUG] [Thread-22289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:43:11.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:43:11.304 [DEBUG] [Thread-22289] [transport.py] [_log()] userauth is OK
2026-04-15T16:43:11.304 [DEBUG] [Thread-22289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:43:11.305 [DEBUG] [Thread-22289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:43:11.305 [DEBUG] [Thread-22289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:43:11.305 [DEBUG] [Thread-22289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:43:11.333 [INFO] [Thread-22289] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:43:11.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:43:11.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:43:12.150 [DEBUG] [Thread-22289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:43:12.150 [DEBUG] [Thread-22289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:43:12.198 [DEBUG] [Thread-22289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:43:12.198 [DEBUG] [Thread-22289] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:43:12.207 [DEBUG] [Thread-22289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:43:12.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:43:12.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')
2026-04-15T16:43:12.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
2026-04-15T16:43:12.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:43:12.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:43:12.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:43:12.248 [DEBUG] [Thread-22289] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:43:15.121 [DEBUG] [Thread-22291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:43:22.473 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:43:22.474 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:43:30.164 [DEBUG] [Thread-22292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:43:38.895 [DEBUG] [Thread-22293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:43:42.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:43:42.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:43:42.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
2026-04-15T16:43:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 43, 19), 8.33727, 57.3489, 0.0, 13.428, 14.6373, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:43:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:43:19
2026-04-15T16:43:43.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:43:44.385 [DEBUG] [Thread-22294] [transport.py] [_log()] starting thread (client mode): 0xee9bf400
2026-04-15T16:43:44.385 [DEBUG] [Thread-22294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:43:44.408 [DEBUG] [Thread-22294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:43:44.408 [INFO] [Thread-22294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:43:44.409 [DEBUG] [Thread-22294] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:43:44.409 [DEBUG] [Thread-22294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:43:44.409 [DEBUG] [Thread-22294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:43:44.410 [DEBUG] [Thread-22294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:43:44.410 [DEBUG] [Thread-22294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:43:44.410 [DEBUG] [Thread-22294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:43:44.410 [DEBUG] [Thread-22294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:43:44.410 [DEBUG] [Thread-22294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:43:44.410 [DEBUG] [Thread-22294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:43:44.410 [DEBUG] [Thread-22294] [transport.py] [_log()] client lang: <none>
2026-04-15T16:43:44.410 [DEBUG] [Thread-22294] [transport.py] [_log()] server lang: <none>
2026-04-15T16:43:44.410 [DEBUG] [Thread-22294] [transport.py] [_log()] kex follows: False
2026-04-15T16:43:44.410 [DEBUG] [Thread-22294] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:43:44.410 [DEBUG] [Thread-22294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:43:44.410 [DEBUG] [Thread-22294] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:43:44.411 [DEBUG] [Thread-22294] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:43:44.411 [DEBUG] [Thread-22294] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:43:44.411 [DEBUG] [Thread-22294] [transport.py] [_log()] Compression: none
2026-04-15T16:43:44.411 [DEBUG] [Thread-22294] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:43:44.419 [DEBUG] [Thread-22294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:43:44.419 [DEBUG] [Thread-22294] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:43:44.420 [DEBUG] [Thread-22294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:43:44.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:43:44.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:43:44.421 [DEBUG] [Thread-22294] [transport.py] [_log()] userauth is OK
2026-04-15T16:43:44.421 [DEBUG] [Thread-22294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:43:44.421 [DEBUG] [Thread-22294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:43:44.421 [DEBUG] [Thread-22294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:43:44.421 [DEBUG] [Thread-22294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:43:44.437 [INFO] [Thread-22294] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:43:44.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:43:44.981 [DEBUG] [Thread-22294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:43:44.982 [DEBUG] [Thread-22294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:43:44.982 [DEBUG] [Thread-22294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:43:45.023 [DEBUG] [Thread-22294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:43:45.023 [DEBUG] [Thread-22294] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:43:45.025 [DEBUG] [Thread-22294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:43:45.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:43:45.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:43:45.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:43:45.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:43:45.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:43:45.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:43:45.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:43:45.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:43:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:43:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.613677 -999.00  +14.30  18.09     63   +7.40 1 1 1 1 1   887    0 6.41 -47.69 ----- 21.0 18.1 293.6 21.3 18.8 -27.2 18.2 -27.4 19.2 -23.4 20.1 -25.1
2026-04-15T16:43:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:43:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:43:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.613677
2026-04-15T16:43:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:43:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:43:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:43:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:43:45.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:43:45.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:43:19', tmtdew=8.33727, humidity=57.3489, cloud=0.0, wind=13.428, temperature=14.6373, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:43:41.693', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:43:45.047 [DEBUG] [Thread-22294] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:43:45.192 [DEBUG] [Thread-22297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:43:45.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:43:45.269 [DEBUG] [Thread-22298] [transport.py] [_log()] starting thread (client mode): 0xee9ae3e0
2026-04-15T16:43:45.269 [DEBUG] [Thread-22298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:43:45.286 [DEBUG] [Thread-22298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:43:45.287 [INFO] [Thread-22298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:43:45.294 [DEBUG] [Thread-22298] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:43:45.294 [DEBUG] [Thread-22298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:43:45.294 [DEBUG] [Thread-22298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:43:45.294 [DEBUG] [Thread-22298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:43:45.294 [DEBUG] [Thread-22298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:43:45.294 [DEBUG] [Thread-22298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:43:45.295 [DEBUG] [Thread-22298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:43:45.295 [DEBUG] [Thread-22298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:43:45.295 [DEBUG] [Thread-22298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:43:45.295 [DEBUG] [Thread-22298] [transport.py] [_log()] client lang: <none>
2026-04-15T16:43:45.295 [DEBUG] [Thread-22298] [transport.py] [_log()] server lang: <none>
2026-04-15T16:43:45.295 [DEBUG] [Thread-22298] [transport.py] [_log()] kex follows: False
2026-04-15T16:43:45.295 [DEBUG] [Thread-22298] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:43:45.295 [DEBUG] [Thread-22298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:43:45.295 [DEBUG] [Thread-22298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:43:45.295 [DEBUG] [Thread-22298] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:43:45.295 [DEBUG] [Thread-22298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:43:45.296 [DEBUG] [Thread-22298] [transport.py] [_log()] Compression: none
2026-04-15T16:43:45.296 [DEBUG] [Thread-22298] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:43:45.352 [DEBUG] [Thread-22298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:43:45.352 [DEBUG] [Thread-22298] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:43:45.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:43:45.353 [DEBUG] [Thread-22298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:43:45.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:43:45.409 [DEBUG] [Thread-22298] [transport.py] [_log()] userauth is OK
2026-04-15T16:43:45.409 [DEBUG] [Thread-22298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:43:45.409 [DEBUG] [Thread-22298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:43:45.409 [DEBUG] [Thread-22298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:43:45.410 [DEBUG] [Thread-22298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:43:45.436 [INFO] [Thread-22298] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:43:45.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:43:45.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:43:46.372 [DEBUG] [Thread-22298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:43:46.372 [DEBUG] [Thread-22298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:43:46.419 [DEBUG] [Thread-22298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:43:46.420 [DEBUG] [Thread-22298] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:43:46.428 [DEBUG] [Thread-22298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:43:46.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:43: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')
2026-04-15T16:43: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
2026-04-15T16:43:46.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:43:46.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:43:46.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:43:46.460 [DEBUG] [Thread-22298] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:44:00.240 [DEBUG] [Thread-22300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:44:15.273 [DEBUG] [Thread-22301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:44:16.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:44:16.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:44:16.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
2026-04-15T16:44:17.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 43, 54), 8.51143, 56.4483, 0.0, 16.5694, 14.4373, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:44:17.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:43:54
2026-04-15T16:44:18.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:44:18.594 [DEBUG] [Thread-22302] [transport.py] [_log()] starting thread (client mode): 0xf1351de0
2026-04-15T16:44:18.595 [DEBUG] [Thread-22302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:44:18.612 [DEBUG] [Thread-22302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:44:18.612 [INFO] [Thread-22302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:44:18.615 [DEBUG] [Thread-22302] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:44:18.616 [DEBUG] [Thread-22302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:44:18.616 [DEBUG] [Thread-22302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:44:18.616 [DEBUG] [Thread-22302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:44:18.616 [DEBUG] [Thread-22302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:44:18.616 [DEBUG] [Thread-22302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:44:18.616 [DEBUG] [Thread-22302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:44:18.616 [DEBUG] [Thread-22302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:44:18.616 [DEBUG] [Thread-22302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:44:18.616 [DEBUG] [Thread-22302] [transport.py] [_log()] client lang: <none>
2026-04-15T16:44:18.616 [DEBUG] [Thread-22302] [transport.py] [_log()] server lang: <none>
2026-04-15T16:44:18.616 [DEBUG] [Thread-22302] [transport.py] [_log()] kex follows: False
2026-04-15T16:44:18.617 [DEBUG] [Thread-22302] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:44:18.617 [DEBUG] [Thread-22302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:44:18.617 [DEBUG] [Thread-22302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:44:18.617 [DEBUG] [Thread-22302] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:44:18.617 [DEBUG] [Thread-22302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:44:18.617 [DEBUG] [Thread-22302] [transport.py] [_log()] Compression: none
2026-04-15T16:44:18.617 [DEBUG] [Thread-22302] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:44:18.631 [DEBUG] [Thread-22302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:44:18.631 [DEBUG] [Thread-22302] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:44:18.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:44:18.632 [DEBUG] [Thread-22302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:44:18.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:44:18.633 [DEBUG] [Thread-22302] [transport.py] [_log()] userauth is OK
2026-04-15T16:44:18.633 [DEBUG] [Thread-22302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:44:18.633 [DEBUG] [Thread-22302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:44:18.633 [DEBUG] [Thread-22302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:44:18.633 [DEBUG] [Thread-22302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:44:18.668 [INFO] [Thread-22302] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:44:18.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:44:19.298 [DEBUG] [Thread-22302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:44:19.298 [DEBUG] [Thread-22302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:44:19.298 [DEBUG] [Thread-22302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:44:19.339 [DEBUG] [Thread-22302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:44:19.339 [DEBUG] [Thread-22302] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:44:19.341 [DEBUG] [Thread-22302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:44:19.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:44:19.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:44:19.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:44:19.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:44:19.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:44:19.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:44:19.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:44:19.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:44:19.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:44:19.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.614024 -999.00  +14.10  18.22     63   +7.30 1 1 1 1 1   887    0 6.25 -54.11 ----- 18.5 18.2 295.4 23.2 18.7 -28.4 18.2 -27.1 19.3 -23.8 20.1 -25.3
2026-04-15T16:44:19.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:44:19.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:44:19.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.614024
2026-04-15T16:44:19.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:44:19.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:44:19.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:44:19.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:44:19.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:44:19.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:43:54', tmtdew=8.51143, humidity=56.4483, cloud=0.0, wind=16.5694, temperature=14.4373, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:44:11.674', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:44:19.365 [DEBUG] [Thread-22302] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:44:19.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:44:19.618 [DEBUG] [Thread-22305] [transport.py] [_log()] starting thread (client mode): 0xf13fc970
2026-04-15T16:44:19.619 [DEBUG] [Thread-22305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:44:19.632 [DEBUG] [Thread-22305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:44:19.633 [INFO] [Thread-22305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:44:19.640 [DEBUG] [Thread-22305] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:44:19.640 [DEBUG] [Thread-22305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:44:19.640 [DEBUG] [Thread-22305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:44:19.640 [DEBUG] [Thread-22305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:44:19.640 [DEBUG] [Thread-22305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:44:19.640 [DEBUG] [Thread-22305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:44:19.641 [DEBUG] [Thread-22305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:44:19.641 [DEBUG] [Thread-22305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:44:19.641 [DEBUG] [Thread-22305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:44:19.641 [DEBUG] [Thread-22305] [transport.py] [_log()] client lang: <none>
2026-04-15T16:44:19.641 [DEBUG] [Thread-22305] [transport.py] [_log()] server lang: <none>
2026-04-15T16:44:19.641 [DEBUG] [Thread-22305] [transport.py] [_log()] kex follows: False
2026-04-15T16:44:19.641 [DEBUG] [Thread-22305] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:44:19.641 [DEBUG] [Thread-22305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:44:19.641 [DEBUG] [Thread-22305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:44:19.641 [DEBUG] [Thread-22305] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:44:19.641 [DEBUG] [Thread-22305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:44:19.641 [DEBUG] [Thread-22305] [transport.py] [_log()] Compression: none
2026-04-15T16:44:19.642 [DEBUG] [Thread-22305] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:44:19.696 [DEBUG] [Thread-22305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:44:19.697 [DEBUG] [Thread-22305] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:44:19.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:44:19.697 [DEBUG] [Thread-22305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:44:19.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:44:19.757 [DEBUG] [Thread-22305] [transport.py] [_log()] userauth is OK
2026-04-15T16:44:19.757 [DEBUG] [Thread-22305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:44:19.758 [DEBUG] [Thread-22305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:44:19.758 [DEBUG] [Thread-22305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:44:19.758 [DEBUG] [Thread-22305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:44:19.785 [INFO] [Thread-22305] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:44:19.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:44:19.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:44:20.606 [DEBUG] [Thread-22305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:44:20.606 [DEBUG] [Thread-22305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:44:20.654 [DEBUG] [Thread-22305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:44:20.654 [DEBUG] [Thread-22305] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:44:20.663 [DEBUG] [Thread-22305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:44:20.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:44:20.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')
2026-04-15T16:44:20.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
2026-04-15T16:44:20.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:44:20.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:44:20.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:44:20.705 [DEBUG] [Thread-22305] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:44:22.614 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:44:22.615 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:44:30.305 [DEBUG] [Thread-22307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:44:38.985 [DEBUG] [Thread-22308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:44:45.351 [DEBUG] [Thread-22309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:44:50.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:44:50.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:44:50.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
2026-04-15T16:44:52.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 44, 30), 8.50183, 56.4979, 0.0, 20.4325, 14.4869, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:44:52.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:44:30
2026-04-15T16:44:52.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:44:52.821 [DEBUG] [Thread-22310] [transport.py] [_log()] starting thread (client mode): 0xee9bd570
2026-04-15T16:44:52.821 [DEBUG] [Thread-22310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:44:52.841 [DEBUG] [Thread-22310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:44:52.841 [INFO] [Thread-22310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:44:52.845 [DEBUG] [Thread-22310] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:44:52.845 [DEBUG] [Thread-22310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:44:52.845 [DEBUG] [Thread-22310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:44:52.845 [DEBUG] [Thread-22310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:44:52.845 [DEBUG] [Thread-22310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:44:52.845 [DEBUG] [Thread-22310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:44:52.845 [DEBUG] [Thread-22310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:44:52.845 [DEBUG] [Thread-22310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:44:52.845 [DEBUG] [Thread-22310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:44:52.845 [DEBUG] [Thread-22310] [transport.py] [_log()] client lang: <none>
2026-04-15T16:44:52.845 [DEBUG] [Thread-22310] [transport.py] [_log()] server lang: <none>
2026-04-15T16:44:52.845 [DEBUG] [Thread-22310] [transport.py] [_log()] kex follows: False
2026-04-15T16:44:52.846 [DEBUG] [Thread-22310] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:44:52.846 [DEBUG] [Thread-22310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:44:52.846 [DEBUG] [Thread-22310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:44:52.846 [DEBUG] [Thread-22310] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:44:52.846 [DEBUG] [Thread-22310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:44:52.846 [DEBUG] [Thread-22310] [transport.py] [_log()] Compression: none
2026-04-15T16:44:52.846 [DEBUG] [Thread-22310] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:44:52.867 [DEBUG] [Thread-22310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:44:52.868 [DEBUG] [Thread-22310] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:44:52.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:44:52.868 [DEBUG] [Thread-22310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:44:52.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:44:52.869 [DEBUG] [Thread-22310] [transport.py] [_log()] userauth is OK
2026-04-15T16:44:52.869 [DEBUG] [Thread-22310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:44:52.870 [DEBUG] [Thread-22310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:44:52.870 [DEBUG] [Thread-22310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:44:52.870 [DEBUG] [Thread-22310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:44:52.895 [INFO] [Thread-22310] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:44:52.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:44:53.533 [DEBUG] [Thread-22310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:44:53.533 [DEBUG] [Thread-22310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:44:53.533 [DEBUG] [Thread-22310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:44:53.574 [DEBUG] [Thread-22310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:44:53.574 [DEBUG] [Thread-22310] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:44:53.577 [DEBUG] [Thread-22310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:44:53.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:44:53.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:44:53.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:44:53.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:44:53.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:44:53.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:44:53.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:44:53.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:44:53.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:44:53.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.614371 -999.00  +14.10  15.02     64   +7.60 1 1 1 1 1   887    0 6.05 -58.70 ----- 16.3 15.0 299.4 22.3 18.7 -27.9 18.2 -26.8 19.2 -24.0 20.0 -25.3
2026-04-15T16:44:53.601 [DEBUG] [Thread-22310] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:44:53.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:44:53.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:44:53.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.614371
2026-04-15T16:44:53.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:44:53.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:44:53.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:44:53.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:44:53.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:44:53.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:44:30', tmtdew=8.50183, humidity=56.4979, cloud=0.0, wind=20.4325, temperature=14.4869, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:44:41.654', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:44:53.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:44:53.862 [DEBUG] [Thread-22313] [transport.py] [_log()] starting thread (client mode): 0xee9bd060
2026-04-15T16:44:53.862 [DEBUG] [Thread-22313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:44:53.877 [DEBUG] [Thread-22313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:44:53.877 [INFO] [Thread-22313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:44:53.884 [DEBUG] [Thread-22313] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:44:53.884 [DEBUG] [Thread-22313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:44:53.884 [DEBUG] [Thread-22313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:44:53.884 [DEBUG] [Thread-22313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:44:53.884 [DEBUG] [Thread-22313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:44:53.884 [DEBUG] [Thread-22313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:44:53.885 [DEBUG] [Thread-22313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:44:53.885 [DEBUG] [Thread-22313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:44:53.885 [DEBUG] [Thread-22313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:44:53.885 [DEBUG] [Thread-22313] [transport.py] [_log()] client lang: <none>
2026-04-15T16:44:53.885 [DEBUG] [Thread-22313] [transport.py] [_log()] server lang: <none>
2026-04-15T16:44:53.885 [DEBUG] [Thread-22313] [transport.py] [_log()] kex follows: False
2026-04-15T16:44:53.885 [DEBUG] [Thread-22313] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:44:53.885 [DEBUG] [Thread-22313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:44:53.885 [DEBUG] [Thread-22313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:44:53.885 [DEBUG] [Thread-22313] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:44:53.885 [DEBUG] [Thread-22313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:44:53.886 [DEBUG] [Thread-22313] [transport.py] [_log()] Compression: none
2026-04-15T16:44:53.886 [DEBUG] [Thread-22313] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:44:53.941 [DEBUG] [Thread-22313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:44:53.941 [DEBUG] [Thread-22313] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:44:53.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:44:53.942 [DEBUG] [Thread-22313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:44:53.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:44:53.997 [DEBUG] [Thread-22313] [transport.py] [_log()] userauth is OK
2026-04-15T16:44:53.998 [DEBUG] [Thread-22313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:44:53.998 [DEBUG] [Thread-22313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:44:53.998 [DEBUG] [Thread-22313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:44:53.998 [DEBUG] [Thread-22313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:44:54.023 [INFO] [Thread-22313] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:44:54.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:44:54.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:44:54.855 [DEBUG] [Thread-22313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:44:54.855 [DEBUG] [Thread-22313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:44:54.903 [DEBUG] [Thread-22313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:44:54.903 [DEBUG] [Thread-22313] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:44:54.912 [DEBUG] [Thread-22313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:44:54.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:44:54.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')
2026-04-15T16:44:54.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T16:44:54.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:44:54.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:44:54.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:44:54.949 [DEBUG] [Thread-22313] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:45:00.382 [DEBUG] [Thread-22315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:45:15.427 [DEBUG] [Thread-22316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:45:22.754 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:45:22.755 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:45:24.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:45:24.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:45:24.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
2026-04-15T16:45:26.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 45, 6), 8.45681, 56.6636, 0.0, 19.8151, 14.4538, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:45:26.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:45:06
2026-04-15T16:45:26.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:45:27.131 [DEBUG] [Thread-22317] [transport.py] [_log()] starting thread (client mode): 0xee9bc910
2026-04-15T16:45:27.131 [DEBUG] [Thread-22317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:45:27.150 [DEBUG] [Thread-22317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:45:27.150 [INFO] [Thread-22317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:45:27.154 [DEBUG] [Thread-22317] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:45:27.154 [DEBUG] [Thread-22317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:45:27.154 [DEBUG] [Thread-22317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:45:27.154 [DEBUG] [Thread-22317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:45:27.154 [DEBUG] [Thread-22317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:45:27.154 [DEBUG] [Thread-22317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:45:27.154 [DEBUG] [Thread-22317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:45:27.154 [DEBUG] [Thread-22317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:45:27.154 [DEBUG] [Thread-22317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:45:27.155 [DEBUG] [Thread-22317] [transport.py] [_log()] client lang: <none>
2026-04-15T16:45:27.155 [DEBUG] [Thread-22317] [transport.py] [_log()] server lang: <none>
2026-04-15T16:45:27.155 [DEBUG] [Thread-22317] [transport.py] [_log()] kex follows: False
2026-04-15T16:45:27.155 [DEBUG] [Thread-22317] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:45:27.155 [DEBUG] [Thread-22317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:45:27.155 [DEBUG] [Thread-22317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:45:27.155 [DEBUG] [Thread-22317] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:45:27.155 [DEBUG] [Thread-22317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:45:27.155 [DEBUG] [Thread-22317] [transport.py] [_log()] Compression: none
2026-04-15T16:45:27.155 [DEBUG] [Thread-22317] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:45:27.173 [DEBUG] [Thread-22317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:45:27.174 [DEBUG] [Thread-22317] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:45:27.174 [DEBUG] [Thread-22317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:45:27.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:45:27.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:45:27.175 [DEBUG] [Thread-22317] [transport.py] [_log()] userauth is OK
2026-04-15T16:45:27.176 [DEBUG] [Thread-22317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:45:27.176 [DEBUG] [Thread-22317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:45:27.176 [DEBUG] [Thread-22317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:45:27.176 [DEBUG] [Thread-22317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:45:27.195 [INFO] [Thread-22317] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:45:27.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:45:27.807 [DEBUG] [Thread-22317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:45:27.807 [DEBUG] [Thread-22317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:45:27.808 [DEBUG] [Thread-22317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:45:27.848 [DEBUG] [Thread-22317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:45:27.848 [DEBUG] [Thread-22317] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:45:27.851 [DEBUG] [Thread-22317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:45:27.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:45:27.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:45:27.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:45:27.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:45:27.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:45:27.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:45:27.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:45:27.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:45:27.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:45:27.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.614719 -999.00  +14.20  20.53     62   +7.20 1 1 1 1 1   887    0 5.81 -64.72 ----- 19.0 20.5 294.0 26.2 18.7 -27.9 18.2 -27.4 19.2 -25.6 20.0 -25.6
2026-04-15T16:45:27.873 [DEBUG] [Thread-22317] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:45:27.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:45:27.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:45:27.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.614719
2026-04-15T16:45:27.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:45:27.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:45:27.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:45:27.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:45:27.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:45:27.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:45:06', tmtdew=8.45681, humidity=56.6636, cloud=0.0, wind=19.8151, temperature=14.4538, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:45:11.722', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:45:28.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:45:28.138 [DEBUG] [Thread-22320] [transport.py] [_log()] starting thread (client mode): 0xf17c15d0
2026-04-15T16:45:28.138 [DEBUG] [Thread-22320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:45:28.152 [DEBUG] [Thread-22320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:45:28.152 [INFO] [Thread-22320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:45:28.160 [DEBUG] [Thread-22320] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:45:28.160 [DEBUG] [Thread-22320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:45:28.160 [DEBUG] [Thread-22320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:45:28.160 [DEBUG] [Thread-22320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:45:28.160 [DEBUG] [Thread-22320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:45:28.160 [DEBUG] [Thread-22320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:45:28.160 [DEBUG] [Thread-22320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:45:28.160 [DEBUG] [Thread-22320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:45:28.160 [DEBUG] [Thread-22320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:45:28.160 [DEBUG] [Thread-22320] [transport.py] [_log()] client lang: <none>
2026-04-15T16:45:28.161 [DEBUG] [Thread-22320] [transport.py] [_log()] server lang: <none>
2026-04-15T16:45:28.161 [DEBUG] [Thread-22320] [transport.py] [_log()] kex follows: False
2026-04-15T16:45:28.161 [DEBUG] [Thread-22320] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:45:28.161 [DEBUG] [Thread-22320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:45:28.161 [DEBUG] [Thread-22320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:45:28.161 [DEBUG] [Thread-22320] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:45:28.161 [DEBUG] [Thread-22320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:45:28.161 [DEBUG] [Thread-22320] [transport.py] [_log()] Compression: none
2026-04-15T16:45:28.161 [DEBUG] [Thread-22320] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:45:28.217 [DEBUG] [Thread-22320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:45:28.217 [DEBUG] [Thread-22320] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:45:28.218 [DEBUG] [Thread-22320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:45:28.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:45:28.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:45:28.274 [DEBUG] [Thread-22320] [transport.py] [_log()] userauth is OK
2026-04-15T16:45:28.274 [DEBUG] [Thread-22320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:45:28.274 [DEBUG] [Thread-22320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:45:28.275 [DEBUG] [Thread-22320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:45:28.275 [DEBUG] [Thread-22320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:45:28.300 [INFO] [Thread-22320] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:45:28.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:45:28.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:45:29.154 [DEBUG] [Thread-22320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:45:29.154 [DEBUG] [Thread-22320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:45:29.202 [DEBUG] [Thread-22320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:45:29.202 [DEBUG] [Thread-22320] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:45:29.211 [DEBUG] [Thread-22320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:45:29.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:45:29.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')
2026-04-15T16:45:29.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
2026-04-15T16:45:29.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:45:29.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:45:29.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:45:29.246 [DEBUG] [Thread-22320] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:45:30.458 [DEBUG] [Thread-22322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:45:39.059 [DEBUG] [Thread-22323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:45:45.501 [DEBUG] [Thread-22324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:45:59.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:45:59.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:45:59.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
2026-04-15T16:46:00.533 [DEBUG] [Thread-22325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:46:00.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 45, 41), 8.84379, 55.4324, 0.0, 19.3723, 15.0742, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:46:00.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:45:41
2026-04-15T16:46:00.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:46:01.458 [DEBUG] [Thread-22326] [transport.py] [_log()] starting thread (client mode): 0xf13534f0
2026-04-15T16:46:01.458 [DEBUG] [Thread-22326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:46:01.480 [DEBUG] [Thread-22326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:46:01.480 [INFO] [Thread-22326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:46:01.483 [DEBUG] [Thread-22326] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:46:01.484 [DEBUG] [Thread-22326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:46:01.484 [DEBUG] [Thread-22326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:46:01.484 [DEBUG] [Thread-22326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:46:01.484 [DEBUG] [Thread-22326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:46:01.484 [DEBUG] [Thread-22326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:46:01.484 [DEBUG] [Thread-22326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:46:01.484 [DEBUG] [Thread-22326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:46:01.484 [DEBUG] [Thread-22326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:46:01.484 [DEBUG] [Thread-22326] [transport.py] [_log()] client lang: <none>
2026-04-15T16:46:01.484 [DEBUG] [Thread-22326] [transport.py] [_log()] server lang: <none>
2026-04-15T16:46:01.485 [DEBUG] [Thread-22326] [transport.py] [_log()] kex follows: False
2026-04-15T16:46:01.485 [DEBUG] [Thread-22326] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:46:01.485 [DEBUG] [Thread-22326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:46:01.485 [DEBUG] [Thread-22326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:46:01.485 [DEBUG] [Thread-22326] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:46:01.485 [DEBUG] [Thread-22326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:46:01.485 [DEBUG] [Thread-22326] [transport.py] [_log()] Compression: none
2026-04-15T16:46:01.485 [DEBUG] [Thread-22326] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:46:01.501 [DEBUG] [Thread-22326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:46:01.502 [DEBUG] [Thread-22326] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:46:01.502 [DEBUG] [Thread-22326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:46:01.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:46:01.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:46:01.506 [DEBUG] [Thread-22326] [transport.py] [_log()] userauth is OK
2026-04-15T16:46:01.506 [DEBUG] [Thread-22326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:46:01.506 [DEBUG] [Thread-22326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:46:01.506 [DEBUG] [Thread-22326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:46:01.506 [DEBUG] [Thread-22326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:46:01.530 [INFO] [Thread-22326] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:46:01.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:46:02.200 [DEBUG] [Thread-22326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:46:02.201 [DEBUG] [Thread-22326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:46:02.201 [DEBUG] [Thread-22326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:46:02.241 [DEBUG] [Thread-22326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:46:02.241 [DEBUG] [Thread-22326] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:46:02.244 [DEBUG] [Thread-22326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:46:02.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:46:02.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:46:02.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:46:02.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:46:02.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:46:02.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:46:02.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:46:02.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:46:02.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:46:02.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.615066 -999.00  +14.10  17.94     63   +7.30 1 1 1 1 1   887    0 5.66 -72.38 ----- 19.2 17.9 312.6 22.8 18.7 -27.4 18.2 -27.6 19.1 -23.5 20.0 -25.4
2026-04-15T16:46:02.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:46:02.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:46:02.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.615066
2026-04-15T16:46:02.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:46:02.272 [DEBUG] [Thread-22326] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:46:02.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:46:02.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:46:02.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:46:02.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:46:02.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:45:41', tmtdew=8.84379, humidity=55.4324, cloud=0.0, wind=19.3723, temperature=15.0742, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:45:41.702', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:46:02.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:46:02.531 [DEBUG] [Thread-22329] [transport.py] [_log()] starting thread (client mode): 0xf13332e0
2026-04-15T16:46:02.531 [DEBUG] [Thread-22329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:46:02.545 [DEBUG] [Thread-22329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:46:02.545 [INFO] [Thread-22329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:46:02.552 [DEBUG] [Thread-22329] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:46:02.552 [DEBUG] [Thread-22329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:46:02.553 [DEBUG] [Thread-22329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:46:02.553 [DEBUG] [Thread-22329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:46:02.553 [DEBUG] [Thread-22329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:46:02.553 [DEBUG] [Thread-22329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:46:02.553 [DEBUG] [Thread-22329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:46:02.553 [DEBUG] [Thread-22329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:46:02.553 [DEBUG] [Thread-22329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:46:02.553 [DEBUG] [Thread-22329] [transport.py] [_log()] client lang: <none>
2026-04-15T16:46:02.553 [DEBUG] [Thread-22329] [transport.py] [_log()] server lang: <none>
2026-04-15T16:46:02.553 [DEBUG] [Thread-22329] [transport.py] [_log()] kex follows: False
2026-04-15T16:46:02.553 [DEBUG] [Thread-22329] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:46:02.553 [DEBUG] [Thread-22329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:46:02.554 [DEBUG] [Thread-22329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:46:02.554 [DEBUG] [Thread-22329] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:46:02.554 [DEBUG] [Thread-22329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:46:02.554 [DEBUG] [Thread-22329] [transport.py] [_log()] Compression: none
2026-04-15T16:46:02.554 [DEBUG] [Thread-22329] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:46:02.610 [DEBUG] [Thread-22329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:46:02.610 [DEBUG] [Thread-22329] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:46:02.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:46:02.611 [DEBUG] [Thread-22329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:46:02.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:46:02.666 [DEBUG] [Thread-22329] [transport.py] [_log()] userauth is OK
2026-04-15T16:46:02.666 [DEBUG] [Thread-22329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:46:02.666 [DEBUG] [Thread-22329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:46:02.667 [DEBUG] [Thread-22329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:46:02.667 [DEBUG] [Thread-22329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:46:02.692 [INFO] [Thread-22329] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:46:02.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:46:02.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:46:03.513 [DEBUG] [Thread-22329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:46:03.513 [DEBUG] [Thread-22329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:46:03.561 [DEBUG] [Thread-22329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:46:03.561 [DEBUG] [Thread-22329] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:46:03.570 [DEBUG] [Thread-22329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:46:03.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:46:03.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')
2026-04-15T16:46:03.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
2026-04-15T16:46:03.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:46:03.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:46:03.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:46:03.605 [DEBUG] [Thread-22329] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:46:15.567 [DEBUG] [Thread-22331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:46:22.898 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:46:22.899 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:46:30.611 [DEBUG] [Thread-22332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:46:33.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:46:33.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:46:33.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
2026-04-15T16:46:34.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 46, 16), 8.31635, 57.2162, 0.0, 14.152, 14.3043, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:46:34.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:46:16
2026-04-15T16:46:35.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:46:35.793 [DEBUG] [Thread-22333] [transport.py] [_log()] starting thread (client mode): 0xee9adf30
2026-04-15T16:46:35.793 [DEBUG] [Thread-22333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:46:35.812 [DEBUG] [Thread-22333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:46:35.812 [INFO] [Thread-22333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:46:35.814 [DEBUG] [Thread-22333] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:46:35.814 [DEBUG] [Thread-22333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:46:35.814 [DEBUG] [Thread-22333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:46:35.814 [DEBUG] [Thread-22333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:46:35.814 [DEBUG] [Thread-22333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:46:35.814 [DEBUG] [Thread-22333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:46:35.814 [DEBUG] [Thread-22333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:46:35.814 [DEBUG] [Thread-22333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:46:35.814 [DEBUG] [Thread-22333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:46:35.814 [DEBUG] [Thread-22333] [transport.py] [_log()] client lang: <none>
2026-04-15T16:46:35.814 [DEBUG] [Thread-22333] [transport.py] [_log()] server lang: <none>
2026-04-15T16:46:35.814 [DEBUG] [Thread-22333] [transport.py] [_log()] kex follows: False
2026-04-15T16:46:35.814 [DEBUG] [Thread-22333] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:46:35.815 [DEBUG] [Thread-22333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:46:35.815 [DEBUG] [Thread-22333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:46:35.815 [DEBUG] [Thread-22333] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:46:35.815 [DEBUG] [Thread-22333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:46:35.815 [DEBUG] [Thread-22333] [transport.py] [_log()] Compression: none
2026-04-15T16:46:35.815 [DEBUG] [Thread-22333] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:46:35.824 [DEBUG] [Thread-22333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:46:35.824 [DEBUG] [Thread-22333] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:46:35.824 [DEBUG] [Thread-22333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:46:35.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:46:35.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:46:35.826 [DEBUG] [Thread-22333] [transport.py] [_log()] userauth is OK
2026-04-15T16:46:35.826 [DEBUG] [Thread-22333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:46:35.826 [DEBUG] [Thread-22333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:46:35.826 [DEBUG] [Thread-22333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:46:35.826 [DEBUG] [Thread-22333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:46:35.843 [INFO] [Thread-22333] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:46:35.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:46:36.485 [DEBUG] [Thread-22333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:46:36.485 [DEBUG] [Thread-22333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:46:36.486 [DEBUG] [Thread-22333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:46:36.526 [DEBUG] [Thread-22333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:46:36.526 [DEBUG] [Thread-22333] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:46:36.529 [DEBUG] [Thread-22333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:46:36.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:46:36.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:46:36.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:46:36.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:46:36.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:46:36.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:46:36.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:46:36.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:46:36.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:46:36.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.615414 -999.00  +14.00  12.16     63   +7.20 1 1 1 1 1   887    0 5.38 -78.17 ----- 13.3 12.2 314.0 22.2 18.7 -27.7 18.3 -26.6 19.2 -24.7 19.9 -25.6
2026-04-15T16:46:36.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:46:36.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:46:36.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.615414
2026-04-15T16:46:36.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:46:36.553 [DEBUG] [Thread-22333] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:46:36.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:46:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:46:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:46:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:46:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:46:16', tmtdew=8.31635, humidity=57.2162, cloud=0.0, wind=14.152, temperature=14.3043, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:46:11.770', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:46:36.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:46:36.814 [DEBUG] [Thread-22336] [transport.py] [_log()] starting thread (client mode): 0xee9be770
2026-04-15T16:46:36.815 [DEBUG] [Thread-22336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:46:36.830 [DEBUG] [Thread-22336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:46:36.830 [INFO] [Thread-22336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:46:36.839 [DEBUG] [Thread-22336] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:46:36.839 [DEBUG] [Thread-22336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:46:36.839 [DEBUG] [Thread-22336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:46:36.839 [DEBUG] [Thread-22336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:46:36.839 [DEBUG] [Thread-22336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:46:36.839 [DEBUG] [Thread-22336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:46:36.840 [DEBUG] [Thread-22336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:46:36.840 [DEBUG] [Thread-22336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:46:36.840 [DEBUG] [Thread-22336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:46:36.840 [DEBUG] [Thread-22336] [transport.py] [_log()] client lang: <none>
2026-04-15T16:46:36.840 [DEBUG] [Thread-22336] [transport.py] [_log()] server lang: <none>
2026-04-15T16:46:36.840 [DEBUG] [Thread-22336] [transport.py] [_log()] kex follows: False
2026-04-15T16:46:36.840 [DEBUG] [Thread-22336] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:46:36.840 [DEBUG] [Thread-22336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:46:36.840 [DEBUG] [Thread-22336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:46:36.840 [DEBUG] [Thread-22336] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:46:36.840 [DEBUG] [Thread-22336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:46:36.841 [DEBUG] [Thread-22336] [transport.py] [_log()] Compression: none
2026-04-15T16:46:36.841 [DEBUG] [Thread-22336] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:46:36.894 [DEBUG] [Thread-22336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:46:36.894 [DEBUG] [Thread-22336] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:46:36.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:46:36.895 [DEBUG] [Thread-22336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:46:36.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:46:36.950 [DEBUG] [Thread-22336] [transport.py] [_log()] userauth is OK
2026-04-15T16:46:36.951 [DEBUG] [Thread-22336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:46:36.951 [DEBUG] [Thread-22336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:46:36.952 [DEBUG] [Thread-22336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:46:36.952 [DEBUG] [Thread-22336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:46:36.981 [INFO] [Thread-22336] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:46:36.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:46:36.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:46:37.784 [DEBUG] [Thread-22336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:46:37.784 [DEBUG] [Thread-22336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:46:37.832 [DEBUG] [Thread-22336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:46:37.832 [DEBUG] [Thread-22336] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:46:37.841 [DEBUG] [Thread-22336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:46:37.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:46:37.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')
2026-04-15T16:46:37.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
2026-04-15T16:46:37.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:46:37.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:46:37.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:46:37.876 [DEBUG] [Thread-22336] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:46:39.134 [DEBUG] [Thread-22338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:46:45.642 [DEBUG] [Thread-22340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:46:55.285 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:47:00.684 [DEBUG] [Thread-22341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:47:07.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:47:07.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:47:07.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
2026-04-15T16:47:09.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 46, 53), 8.72076, 55.8961, 0.0, 11.1168, 15.0409, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:47:09.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:46:53
2026-04-15T16:47:09.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:47:10.035 [DEBUG] [Thread-22342] [transport.py] [_log()] starting thread (client mode): 0xf17c2080
2026-04-15T16:47:10.035 [DEBUG] [Thread-22342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:47:10.055 [DEBUG] [Thread-22342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:47:10.055 [INFO] [Thread-22342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:47:10.058 [DEBUG] [Thread-22342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:47:10.058 [DEBUG] [Thread-22342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:47:10.058 [DEBUG] [Thread-22342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:47:10.058 [DEBUG] [Thread-22342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:47:10.058 [DEBUG] [Thread-22342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:47:10.058 [DEBUG] [Thread-22342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:47:10.058 [DEBUG] [Thread-22342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:47:10.059 [DEBUG] [Thread-22342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:47:10.059 [DEBUG] [Thread-22342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:47:10.059 [DEBUG] [Thread-22342] [transport.py] [_log()] client lang: <none>
2026-04-15T16:47:10.059 [DEBUG] [Thread-22342] [transport.py] [_log()] server lang: <none>
2026-04-15T16:47:10.059 [DEBUG] [Thread-22342] [transport.py] [_log()] kex follows: False
2026-04-15T16:47:10.059 [DEBUG] [Thread-22342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:47:10.059 [DEBUG] [Thread-22342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:47:10.059 [DEBUG] [Thread-22342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:47:10.059 [DEBUG] [Thread-22342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:47:10.059 [DEBUG] [Thread-22342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:47:10.059 [DEBUG] [Thread-22342] [transport.py] [_log()] Compression: none
2026-04-15T16:47:10.059 [DEBUG] [Thread-22342] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:47:10.078 [DEBUG] [Thread-22342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:47:10.078 [DEBUG] [Thread-22342] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:47:10.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:47:10.079 [DEBUG] [Thread-22342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:47:10.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:47:10.080 [DEBUG] [Thread-22342] [transport.py] [_log()] userauth is OK
2026-04-15T16:47:10.081 [DEBUG] [Thread-22342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:47:10.081 [DEBUG] [Thread-22342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:47:10.081 [DEBUG] [Thread-22342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:47:10.081 [DEBUG] [Thread-22342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:47:10.105 [INFO] [Thread-22342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:47:10.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:47:10.726 [DEBUG] [Thread-22342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:47:10.726 [DEBUG] [Thread-22342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:47:10.727 [DEBUG] [Thread-22342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:47:10.767 [DEBUG] [Thread-22342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:47:10.767 [DEBUG] [Thread-22342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:47:10.770 [DEBUG] [Thread-22342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:47:10.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:47:10.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:47:10.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:47:10.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:47:10.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:47:10.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:47:10.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:47:10.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:47:10.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:47:10.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.615760 -999.00  +14.00  13.00     64   +7.30 1 1 1 1 1   887    0 5.63 -72.90 ----- 14.4 13.0 304.4 16.4 18.8 -27.3 18.2 -26.9 19.3 -23.7 20.0 -25.0
2026-04-15T16:47:10.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:47:10.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:47:10.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.615760
2026-04-15T16:47:10.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:47:10.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:47:10.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:47:10.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:47:10.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:47:10.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:46:53', tmtdew=8.72076, humidity=55.8961, cloud=0.0, wind=11.1168, temperature=15.0409, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:46:41.664', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:47:10.794 [DEBUG] [Thread-22342] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:47:11.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:47:11.043 [DEBUG] [Thread-22345] [transport.py] [_log()] starting thread (client mode): 0xf17c3940
2026-04-15T16:47:11.044 [DEBUG] [Thread-22345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:47:11.057 [DEBUG] [Thread-22345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:47:11.057 [INFO] [Thread-22345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:47:11.065 [DEBUG] [Thread-22345] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:47:11.065 [DEBUG] [Thread-22345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:47:11.065 [DEBUG] [Thread-22345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:47:11.065 [DEBUG] [Thread-22345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:47:11.065 [DEBUG] [Thread-22345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:47:11.065 [DEBUG] [Thread-22345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:47:11.065 [DEBUG] [Thread-22345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:47:11.065 [DEBUG] [Thread-22345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:47:11.065 [DEBUG] [Thread-22345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:47:11.065 [DEBUG] [Thread-22345] [transport.py] [_log()] client lang: <none>
2026-04-15T16:47:11.065 [DEBUG] [Thread-22345] [transport.py] [_log()] server lang: <none>
2026-04-15T16:47:11.065 [DEBUG] [Thread-22345] [transport.py] [_log()] kex follows: False
2026-04-15T16:47:11.066 [DEBUG] [Thread-22345] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:47:11.066 [DEBUG] [Thread-22345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:47:11.066 [DEBUG] [Thread-22345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:47:11.066 [DEBUG] [Thread-22345] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:47:11.066 [DEBUG] [Thread-22345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:47:11.066 [DEBUG] [Thread-22345] [transport.py] [_log()] Compression: none
2026-04-15T16:47:11.066 [DEBUG] [Thread-22345] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:47:11.122 [DEBUG] [Thread-22345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:47:11.122 [DEBUG] [Thread-22345] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:47:11.123 [DEBUG] [Thread-22345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:47:11.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:47:11.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:47:11.179 [DEBUG] [Thread-22345] [transport.py] [_log()] userauth is OK
2026-04-15T16:47:11.179 [DEBUG] [Thread-22345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:47:11.179 [DEBUG] [Thread-22345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:47:11.179 [DEBUG] [Thread-22345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:47:11.180 [DEBUG] [Thread-22345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:47:11.204 [INFO] [Thread-22345] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:47:11.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:47:11.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:47:12.028 [DEBUG] [Thread-22345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:47:12.028 [DEBUG] [Thread-22345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:47:12.078 [DEBUG] [Thread-22345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:47:12.078 [DEBUG] [Thread-22345] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:47:12.087 [DEBUG] [Thread-22345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:47:12.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:47:12.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')
2026-04-15T16:47:12.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
2026-04-15T16:47:12.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:47:12.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:47:12.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:47:12.119 [DEBUG] [Thread-22345] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:47:15.716 [DEBUG] [Thread-22347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:47:23.039 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:47:23.041 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:47:30.758 [DEBUG] [Thread-22348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:47:35.795 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:47:39.209 [DEBUG] [Thread-22349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:47:42.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:47:42.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:47:42.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
2026-04-15T16:47:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 47, 28), 8.41646, 56.7327, 0.0, 15.2456, 14.3205, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:47:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:47:28
2026-04-15T16:47:43.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:47:44.286 [DEBUG] [Thread-22350] [transport.py] [_log()] starting thread (client mode): 0xee9bf100
2026-04-15T16:47:44.286 [DEBUG] [Thread-22350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:47:44.306 [DEBUG] [Thread-22350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:47:44.306 [INFO] [Thread-22350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:47:44.309 [DEBUG] [Thread-22350] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:47:44.309 [DEBUG] [Thread-22350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:47:44.309 [DEBUG] [Thread-22350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:47:44.309 [DEBUG] [Thread-22350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:47:44.310 [DEBUG] [Thread-22350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:47:44.310 [DEBUG] [Thread-22350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:47:44.310 [DEBUG] [Thread-22350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:47:44.310 [DEBUG] [Thread-22350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:47:44.310 [DEBUG] [Thread-22350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:47:44.310 [DEBUG] [Thread-22350] [transport.py] [_log()] client lang: <none>
2026-04-15T16:47:44.310 [DEBUG] [Thread-22350] [transport.py] [_log()] server lang: <none>
2026-04-15T16:47:44.310 [DEBUG] [Thread-22350] [transport.py] [_log()] kex follows: False
2026-04-15T16:47:44.310 [DEBUG] [Thread-22350] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:47:44.310 [DEBUG] [Thread-22350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:47:44.310 [DEBUG] [Thread-22350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:47:44.310 [DEBUG] [Thread-22350] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:47:44.311 [DEBUG] [Thread-22350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:47:44.311 [DEBUG] [Thread-22350] [transport.py] [_log()] Compression: none
2026-04-15T16:47:44.311 [DEBUG] [Thread-22350] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:47:44.327 [DEBUG] [Thread-22350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:47:44.327 [DEBUG] [Thread-22350] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:47:44.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:47:44.328 [DEBUG] [Thread-22350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:47:44.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:47:44.329 [DEBUG] [Thread-22350] [transport.py] [_log()] userauth is OK
2026-04-15T16:47:44.329 [DEBUG] [Thread-22350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:47:44.329 [DEBUG] [Thread-22350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:47:44.329 [DEBUG] [Thread-22350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:47:44.330 [DEBUG] [Thread-22350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:47:44.365 [INFO] [Thread-22350] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:47:44.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:47:44.964 [DEBUG] [Thread-22350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:47:44.964 [DEBUG] [Thread-22350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:47:44.965 [DEBUG] [Thread-22350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:47:45.005 [DEBUG] [Thread-22350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:47:45.005 [DEBUG] [Thread-22350] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:47:45.008 [DEBUG] [Thread-22350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:47:45.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:47:45.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:47:45.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:47:45.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:47:45.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:47:45.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:47:45.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:47:45.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:47:45.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:47:45.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.616107 -999.00  +14.10  12.64     64   +7.40 1 1 1 1 1   887    0 5.10 -85.53 ----- 12.9 12.6 317.0 18.4 18.8 -27.5 18.2 -27.0 19.2 -23.5 20.1 -25.5
2026-04-15T16:47:45.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:47:45.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:47:45.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.616107
2026-04-15T16:47:45.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:47:45.032 [DEBUG] [Thread-22350] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:47:45.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:47:45.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:47:45.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:47:45.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:47:45.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:47:28', tmtdew=8.41646, humidity=56.7327, cloud=0.0, wind=15.2456, temperature=14.3205, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:47:11.645', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:47:45.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:47:45.289 [DEBUG] [Thread-22353] [transport.py] [_log()] starting thread (client mode): 0xee9bf1f0
2026-04-15T16:47:45.289 [DEBUG] [Thread-22353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:47:45.303 [DEBUG] [Thread-22353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:47:45.303 [INFO] [Thread-22353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:47:45.311 [DEBUG] [Thread-22353] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:47:45.311 [DEBUG] [Thread-22353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:47:45.311 [DEBUG] [Thread-22353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:47:45.311 [DEBUG] [Thread-22353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:47:45.311 [DEBUG] [Thread-22353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:47:45.311 [DEBUG] [Thread-22353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:47:45.311 [DEBUG] [Thread-22353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:47:45.311 [DEBUG] [Thread-22353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:47:45.311 [DEBUG] [Thread-22353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:47:45.312 [DEBUG] [Thread-22353] [transport.py] [_log()] client lang: <none>
2026-04-15T16:47:45.312 [DEBUG] [Thread-22353] [transport.py] [_log()] server lang: <none>
2026-04-15T16:47:45.312 [DEBUG] [Thread-22353] [transport.py] [_log()] kex follows: False
2026-04-15T16:47:45.312 [DEBUG] [Thread-22353] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:47:45.312 [DEBUG] [Thread-22353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:47:45.312 [DEBUG] [Thread-22353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:47:45.312 [DEBUG] [Thread-22353] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:47:45.312 [DEBUG] [Thread-22353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:47:45.312 [DEBUG] [Thread-22353] [transport.py] [_log()] Compression: none
2026-04-15T16:47:45.312 [DEBUG] [Thread-22353] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:47:45.366 [DEBUG] [Thread-22353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:47:45.366 [DEBUG] [Thread-22353] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:47:45.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:47:45.367 [DEBUG] [Thread-22353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:47:45.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:47:45.423 [DEBUG] [Thread-22353] [transport.py] [_log()] userauth is OK
2026-04-15T16:47:45.423 [DEBUG] [Thread-22353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:47:45.424 [DEBUG] [Thread-22353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:47:45.424 [DEBUG] [Thread-22353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:47:45.424 [DEBUG] [Thread-22353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:47:45.451 [INFO] [Thread-22353] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:47:45.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:47:45.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:47:45.790 [DEBUG] [Thread-22355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:47:46.316 [DEBUG] [Thread-22353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:47:46.316 [DEBUG] [Thread-22353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:47:46.364 [DEBUG] [Thread-22353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:47:46.364 [DEBUG] [Thread-22353] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:47:46.373 [DEBUG] [Thread-22353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:47:46.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:47:46.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')
2026-04-15T16:47:46.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
2026-04-15T16:47:46.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:47:46.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:47:46.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:47:46.404 [DEBUG] [Thread-22353] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:48:00.833 [DEBUG] [Thread-22356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:48:15.866 [DEBUG] [Thread-22357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:48:16.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:48:16.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:48:16.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
2026-04-15T16:48:17.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 48, 4), 8.30258, 57.1799, 0.0, 16.7098, 14.3535, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:48:17.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:48:04
2026-04-15T16:48:18.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:48:18.554 [DEBUG] [Thread-22358] [transport.py] [_log()] starting thread (client mode): 0xee90f070
2026-04-15T16:48:18.554 [DEBUG] [Thread-22358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:48:18.574 [DEBUG] [Thread-22358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:48:18.574 [INFO] [Thread-22358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:48:18.577 [DEBUG] [Thread-22358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:48:18.577 [DEBUG] [Thread-22358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:48:18.577 [DEBUG] [Thread-22358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:48:18.577 [DEBUG] [Thread-22358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:48:18.577 [DEBUG] [Thread-22358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:48:18.577 [DEBUG] [Thread-22358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:48:18.578 [DEBUG] [Thread-22358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:48:18.578 [DEBUG] [Thread-22358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:48:18.578 [DEBUG] [Thread-22358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:48:18.578 [DEBUG] [Thread-22358] [transport.py] [_log()] client lang: <none>
2026-04-15T16:48:18.578 [DEBUG] [Thread-22358] [transport.py] [_log()] server lang: <none>
2026-04-15T16:48:18.578 [DEBUG] [Thread-22358] [transport.py] [_log()] kex follows: False
2026-04-15T16:48:18.578 [DEBUG] [Thread-22358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:48:18.578 [DEBUG] [Thread-22358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:48:18.578 [DEBUG] [Thread-22358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:48:18.578 [DEBUG] [Thread-22358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:48:18.578 [DEBUG] [Thread-22358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:48:18.578 [DEBUG] [Thread-22358] [transport.py] [_log()] Compression: none
2026-04-15T16:48:18.579 [DEBUG] [Thread-22358] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:48:18.595 [DEBUG] [Thread-22358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:48:18.595 [DEBUG] [Thread-22358] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:48:18.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:48:18.596 [DEBUG] [Thread-22358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:48:18.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:48:18.597 [DEBUG] [Thread-22358] [transport.py] [_log()] userauth is OK
2026-04-15T16:48:18.597 [DEBUG] [Thread-22358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:48:18.597 [DEBUG] [Thread-22358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:48:18.598 [DEBUG] [Thread-22358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:48:18.598 [DEBUG] [Thread-22358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:48:18.617 [INFO] [Thread-22358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:48:18.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:48:19.235 [DEBUG] [Thread-22358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:48:19.236 [DEBUG] [Thread-22358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:48:19.236 [DEBUG] [Thread-22358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:48:19.277 [DEBUG] [Thread-22358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:48:19.277 [DEBUG] [Thread-22358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:48:19.280 [DEBUG] [Thread-22358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:48:19.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:48:19.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:48:19.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:48:19.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:48:19.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:48:19.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:48:19.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:48:19.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:48:19.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:48:19.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.616455 -999.00  +14.20  15.21     63   +7.40 1 1 1 1 1   887    0 4.98 -87.25 ----- 18.5 15.2 308.8 17.5 18.7 -28.4 18.2 -27.0 19.2 -25.2 20.0 -26.3
2026-04-15T16:48:19.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:48:19.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:48:19.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.616455
2026-04-15T16:48:19.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:48:19.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:48:19.306 [DEBUG] [Thread-22358] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:48:19.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:48:19.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:48:19.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:48:19.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:48:04', tmtdew=8.30258, humidity=57.1799, cloud=0.0, wind=16.7098, temperature=14.3535, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:47:41.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:48:19.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:48:19.562 [DEBUG] [Thread-22361] [transport.py] [_log()] starting thread (client mode): 0xee91df00
2026-04-15T16:48:19.562 [DEBUG] [Thread-22361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:48:19.581 [DEBUG] [Thread-22361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:48:19.581 [INFO] [Thread-22361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:48:19.588 [DEBUG] [Thread-22361] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:48:19.588 [DEBUG] [Thread-22361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:48:19.589 [DEBUG] [Thread-22361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:48:19.589 [DEBUG] [Thread-22361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:48:19.589 [DEBUG] [Thread-22361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:48:19.589 [DEBUG] [Thread-22361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:48:19.589 [DEBUG] [Thread-22361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:48:19.589 [DEBUG] [Thread-22361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:48:19.589 [DEBUG] [Thread-22361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:48:19.589 [DEBUG] [Thread-22361] [transport.py] [_log()] client lang: <none>
2026-04-15T16:48:19.589 [DEBUG] [Thread-22361] [transport.py] [_log()] server lang: <none>
2026-04-15T16:48:19.589 [DEBUG] [Thread-22361] [transport.py] [_log()] kex follows: False
2026-04-15T16:48:19.589 [DEBUG] [Thread-22361] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:48:19.590 [DEBUG] [Thread-22361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:48:19.590 [DEBUG] [Thread-22361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:48:19.590 [DEBUG] [Thread-22361] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:48:19.590 [DEBUG] [Thread-22361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:48:19.590 [DEBUG] [Thread-22361] [transport.py] [_log()] Compression: none
2026-04-15T16:48:19.590 [DEBUG] [Thread-22361] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:48:19.650 [DEBUG] [Thread-22361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:48:19.651 [DEBUG] [Thread-22361] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:48:19.651 [DEBUG] [Thread-22361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:48:19.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:48:19.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:48:19.708 [DEBUG] [Thread-22361] [transport.py] [_log()] userauth is OK
2026-04-15T16:48:19.708 [DEBUG] [Thread-22361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:48:19.708 [DEBUG] [Thread-22361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:48:19.708 [DEBUG] [Thread-22361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:48:19.709 [DEBUG] [Thread-22361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:48:19.733 [INFO] [Thread-22361] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:48:19.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:48:19.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:48:20.579 [DEBUG] [Thread-22361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:48:20.579 [DEBUG] [Thread-22361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:48:20.627 [DEBUG] [Thread-22361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:48:20.627 [DEBUG] [Thread-22361] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:48:20.636 [DEBUG] [Thread-22361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:48:20.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:48:20.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')
2026-04-15T16:48:20.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') -> 00000000
2026-04-15T16:48:20.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:48:20.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:48:20.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:48:20.670 [DEBUG] [Thread-22361] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:48:23.181 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:48:23.182 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:48:30.897 [DEBUG] [Thread-22363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:48:39.306 [DEBUG] [Thread-22364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:48:40.593 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:48:45.940 [DEBUG] [Thread-22365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:48:50.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:48:50.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:48:50.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
2026-04-15T16:48:51.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 48, 39), 9.00927, 54.8026, 0.0, 21.5597, 15.0739, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:48:51.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:48:39
2026-04-15T16:48:52.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:48:52.793 [DEBUG] [Thread-22366] [transport.py] [_log()] starting thread (client mode): 0xf1333880
2026-04-15T16:48:52.794 [DEBUG] [Thread-22366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:48:52.812 [DEBUG] [Thread-22366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:48:52.812 [INFO] [Thread-22366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:48:52.815 [DEBUG] [Thread-22366] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:48:52.815 [DEBUG] [Thread-22366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:48:52.816 [DEBUG] [Thread-22366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:48:52.816 [DEBUG] [Thread-22366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:48:52.816 [DEBUG] [Thread-22366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:48:52.816 [DEBUG] [Thread-22366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:48:52.816 [DEBUG] [Thread-22366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:48:52.816 [DEBUG] [Thread-22366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:48:52.816 [DEBUG] [Thread-22366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:48:52.816 [DEBUG] [Thread-22366] [transport.py] [_log()] client lang: <none>
2026-04-15T16:48:52.816 [DEBUG] [Thread-22366] [transport.py] [_log()] server lang: <none>
2026-04-15T16:48:52.816 [DEBUG] [Thread-22366] [transport.py] [_log()] kex follows: False
2026-04-15T16:48:52.816 [DEBUG] [Thread-22366] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:48:52.816 [DEBUG] [Thread-22366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:48:52.817 [DEBUG] [Thread-22366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:48:52.817 [DEBUG] [Thread-22366] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:48:52.817 [DEBUG] [Thread-22366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:48:52.817 [DEBUG] [Thread-22366] [transport.py] [_log()] Compression: none
2026-04-15T16:48:52.817 [DEBUG] [Thread-22366] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:48:52.836 [DEBUG] [Thread-22366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:48:52.836 [DEBUG] [Thread-22366] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:48:52.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:48:52.837 [DEBUG] [Thread-22366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:48:52.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:48:52.838 [DEBUG] [Thread-22366] [transport.py] [_log()] userauth is OK
2026-04-15T16:48:52.838 [DEBUG] [Thread-22366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:48:52.838 [DEBUG] [Thread-22366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:48:52.838 [DEBUG] [Thread-22366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:48:52.838 [DEBUG] [Thread-22366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:48:52.862 [INFO] [Thread-22366] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:48:52.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:48:53.475 [DEBUG] [Thread-22366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:48:53.475 [DEBUG] [Thread-22366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:48:53.475 [DEBUG] [Thread-22366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:48:53.516 [DEBUG] [Thread-22366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:48:53.516 [DEBUG] [Thread-22366] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:48:53.519 [DEBUG] [Thread-22366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:48:53.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:48:53.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:48:53.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:48:53.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:48:53.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:48:53.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:48:53.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:48:53.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:48:53.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:48:53.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.617149 -999.00  +14.20  22.54     62   +7.10 1 1 1 1 1   887    0 4.72 -93.66 ----- 19.9 22.5 296.2 28.3 18.7 -29.4 18.2 -27.2 19.1 -27.4 20.0 -27.1
2026-04-15T16:48:53.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:48:53.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:48:53.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.617149
2026-04-15T16:48:53.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:48:53.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:48:53.545 [DEBUG] [Thread-22366] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:48:53.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:48:53.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:48:53.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:48:53.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:48:39', tmtdew=9.00927, humidity=54.8026, cloud=0.0, wind=21.5597, temperature=15.0739, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:48:41.674', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:48:53.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:48:53.801 [DEBUG] [Thread-22369] [transport.py] [_log()] starting thread (client mode): 0xee9bf520
2026-04-15T16:48:53.802 [DEBUG] [Thread-22369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:48:53.816 [DEBUG] [Thread-22369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:48:53.817 [INFO] [Thread-22369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:48:53.825 [DEBUG] [Thread-22369] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:48:53.825 [DEBUG] [Thread-22369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:48:53.825 [DEBUG] [Thread-22369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:48:53.825 [DEBUG] [Thread-22369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:48:53.825 [DEBUG] [Thread-22369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:48:53.825 [DEBUG] [Thread-22369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:48:53.825 [DEBUG] [Thread-22369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:48:53.825 [DEBUG] [Thread-22369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:48:53.825 [DEBUG] [Thread-22369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:48:53.825 [DEBUG] [Thread-22369] [transport.py] [_log()] client lang: <none>
2026-04-15T16:48:53.826 [DEBUG] [Thread-22369] [transport.py] [_log()] server lang: <none>
2026-04-15T16:48:53.826 [DEBUG] [Thread-22369] [transport.py] [_log()] kex follows: False
2026-04-15T16:48:53.826 [DEBUG] [Thread-22369] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:48:53.826 [DEBUG] [Thread-22369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:48:53.826 [DEBUG] [Thread-22369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:48:53.826 [DEBUG] [Thread-22369] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:48:53.826 [DEBUG] [Thread-22369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:48:53.826 [DEBUG] [Thread-22369] [transport.py] [_log()] Compression: none
2026-04-15T16:48:53.826 [DEBUG] [Thread-22369] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:48:53.883 [DEBUG] [Thread-22369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:48:53.883 [DEBUG] [Thread-22369] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:48:53.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:48:53.884 [DEBUG] [Thread-22369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:48:53.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:48:53.940 [DEBUG] [Thread-22369] [transport.py] [_log()] userauth is OK
2026-04-15T16:48:53.940 [DEBUG] [Thread-22369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:48:53.940 [DEBUG] [Thread-22369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:48:53.940 [DEBUG] [Thread-22369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:48:53.941 [DEBUG] [Thread-22369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:48:53.966 [INFO] [Thread-22369] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:48:53.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:48:53.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:48:54.791 [DEBUG] [Thread-22369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:48:54.792 [DEBUG] [Thread-22369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:48:54.842 [DEBUG] [Thread-22369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:48:54.842 [DEBUG] [Thread-22369] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:48:54.855 [DEBUG] [Thread-22369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:48:54.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:48:54.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')
2026-04-15T16:48:54.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
2026-04-15T16:48:54.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:48:54.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:48:54.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:48:54.903 [DEBUG] [Thread-22369] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:49:00.972 [DEBUG] [Thread-22371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:49:04.165 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:49:16.016 [DEBUG] [Thread-22372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:49:23.322 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:49:23.323 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:49:24.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:49:24.894 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:49:24.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
2026-04-15T16:49:26.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 49, 15), 8.70647, 55.7358, 0.0, 22.5677, 14.5532, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:49:26.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:49:15
2026-04-15T16:49:26.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:49:26.733 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:49:27.064 [DEBUG] [Thread-22373] [transport.py] [_log()] starting thread (client mode): 0xf1333880
2026-04-15T16:49:27.065 [DEBUG] [Thread-22373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:49:27.085 [DEBUG] [Thread-22373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:49:27.085 [INFO] [Thread-22373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:49:27.086 [DEBUG] [Thread-22373] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:49:27.087 [DEBUG] [Thread-22373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:49:27.087 [DEBUG] [Thread-22373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:49:27.087 [DEBUG] [Thread-22373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:49:27.087 [DEBUG] [Thread-22373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:49:27.087 [DEBUG] [Thread-22373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:49:27.087 [DEBUG] [Thread-22373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:49:27.087 [DEBUG] [Thread-22373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:49:27.087 [DEBUG] [Thread-22373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:49:27.087 [DEBUG] [Thread-22373] [transport.py] [_log()] client lang: <none>
2026-04-15T16:49:27.087 [DEBUG] [Thread-22373] [transport.py] [_log()] server lang: <none>
2026-04-15T16:49:27.087 [DEBUG] [Thread-22373] [transport.py] [_log()] kex follows: False
2026-04-15T16:49:27.087 [DEBUG] [Thread-22373] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:49:27.088 [DEBUG] [Thread-22373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:49:27.088 [DEBUG] [Thread-22373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:49:27.088 [DEBUG] [Thread-22373] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:49:27.088 [DEBUG] [Thread-22373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:49:27.088 [DEBUG] [Thread-22373] [transport.py] [_log()] Compression: none
2026-04-15T16:49:27.088 [DEBUG] [Thread-22373] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:49:27.106 [DEBUG] [Thread-22373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:49:27.106 [DEBUG] [Thread-22373] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:49:27.107 [DEBUG] [Thread-22373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:49:27.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:49:27.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:49:27.108 [DEBUG] [Thread-22373] [transport.py] [_log()] userauth is OK
2026-04-15T16:49:27.108 [DEBUG] [Thread-22373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:49:27.108 [DEBUG] [Thread-22373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:49:27.108 [DEBUG] [Thread-22373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:49:27.108 [DEBUG] [Thread-22373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:49:27.126 [INFO] [Thread-22373] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:49:27.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:49:27.699 [DEBUG] [Thread-22373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:49:27.699 [DEBUG] [Thread-22373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:49:27.700 [DEBUG] [Thread-22373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:49:27.740 [DEBUG] [Thread-22373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:49:27.740 [DEBUG] [Thread-22373] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:49:27.743 [DEBUG] [Thread-22373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:49:27.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:49:27.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:49:27.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:49:27.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:49:27.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:49:27.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:49:27.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:49:27.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:49:27.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:49:27.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.617496 -999.00  +14.10  19.77     63   +7.20 1 1 1 1 1   887    0 4.76 -99.11 ----- 22.3 19.8 293.6 23.1 18.6 -27.7 18.1 -27.0 19.1 -24.2 19.9 -26.2
2026-04-15T16:49:27.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:49:27.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:49:27.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.617496
2026-04-15T16:49:27.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:49:27.767 [DEBUG] [Thread-22373] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:49:27.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:49:27.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:49:27.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:49:27.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:49:27.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:49:15', tmtdew=8.70647, humidity=55.7358, cloud=0.0, wind=22.5677, temperature=14.5532, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:49:11.654', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:49:28.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:49:28.028 [DEBUG] [Thread-22376] [transport.py] [_log()] starting thread (client mode): 0xf13304f0
2026-04-15T16:49:28.028 [DEBUG] [Thread-22376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:49:28.043 [DEBUG] [Thread-22376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:49:28.043 [INFO] [Thread-22376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:49:28.053 [DEBUG] [Thread-22376] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:49:28.053 [DEBUG] [Thread-22376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:49:28.053 [DEBUG] [Thread-22376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:49:28.053 [DEBUG] [Thread-22376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:49:28.054 [DEBUG] [Thread-22376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:49:28.054 [DEBUG] [Thread-22376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:49:28.054 [DEBUG] [Thread-22376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:49:28.054 [DEBUG] [Thread-22376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:49:28.054 [DEBUG] [Thread-22376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:49:28.054 [DEBUG] [Thread-22376] [transport.py] [_log()] client lang: <none>
2026-04-15T16:49:28.054 [DEBUG] [Thread-22376] [transport.py] [_log()] server lang: <none>
2026-04-15T16:49:28.054 [DEBUG] [Thread-22376] [transport.py] [_log()] kex follows: False
2026-04-15T16:49:28.054 [DEBUG] [Thread-22376] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:49:28.054 [DEBUG] [Thread-22376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:49:28.054 [DEBUG] [Thread-22376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:49:28.055 [DEBUG] [Thread-22376] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:49:28.055 [DEBUG] [Thread-22376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:49:28.055 [DEBUG] [Thread-22376] [transport.py] [_log()] Compression: none
2026-04-15T16:49:28.055 [DEBUG] [Thread-22376] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:49:28.113 [DEBUG] [Thread-22376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:49:28.113 [DEBUG] [Thread-22376] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:49:28.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:49:28.114 [DEBUG] [Thread-22376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:49:28.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:49:28.174 [DEBUG] [Thread-22376] [transport.py] [_log()] userauth is OK
2026-04-15T16:49:28.175 [DEBUG] [Thread-22376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:49:28.175 [DEBUG] [Thread-22376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:49:28.175 [DEBUG] [Thread-22376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:49:28.175 [DEBUG] [Thread-22376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:49:28.206 [INFO] [Thread-22376] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:49:28.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:49:28.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:49:29.060 [DEBUG] [Thread-22376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:49:29.061 [DEBUG] [Thread-22376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:49:29.108 [DEBUG] [Thread-22376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:49:29.108 [DEBUG] [Thread-22376] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:49:29.117 [DEBUG] [Thread-22376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:49:29.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:49:29.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')
2026-04-15T16:49:29.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
2026-04-15T16:49:29.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:49:29.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:49:29.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:49:29.151 [DEBUG] [Thread-22376] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:49:31.045 [DEBUG] [Thread-22378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:49:39.423 [DEBUG] [Thread-22379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:49:46.088 [DEBUG] [Thread-22380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:49:49.297 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:49:59.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:49:59.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:49: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
2026-04-15T16:50:00.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 49, 51), 9.68216, 52.3509, 0.0, 25.511, 15.2399, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:50:00.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:49:51
2026-04-15T16:50:00.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:50:01.120 [DEBUG] [Thread-22381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:50:01.305 [DEBUG] [Thread-22382] [transport.py] [_log()] starting thread (client mode): 0xee90e380
2026-04-15T16:50:01.305 [DEBUG] [Thread-22382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:50:01.325 [DEBUG] [Thread-22382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:50:01.325 [INFO] [Thread-22382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:50:01.328 [DEBUG] [Thread-22382] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:50:01.328 [DEBUG] [Thread-22382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:50:01.328 [DEBUG] [Thread-22382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:50:01.328 [DEBUG] [Thread-22382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:50:01.328 [DEBUG] [Thread-22382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:50:01.328 [DEBUG] [Thread-22382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:50:01.328 [DEBUG] [Thread-22382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:50:01.328 [DEBUG] [Thread-22382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:50:01.328 [DEBUG] [Thread-22382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:50:01.328 [DEBUG] [Thread-22382] [transport.py] [_log()] client lang: <none>
2026-04-15T16:50:01.329 [DEBUG] [Thread-22382] [transport.py] [_log()] server lang: <none>
2026-04-15T16:50:01.329 [DEBUG] [Thread-22382] [transport.py] [_log()] kex follows: False
2026-04-15T16:50:01.329 [DEBUG] [Thread-22382] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:50:01.329 [DEBUG] [Thread-22382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:50:01.329 [DEBUG] [Thread-22382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:50:01.329 [DEBUG] [Thread-22382] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:50:01.329 [DEBUG] [Thread-22382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:50:01.329 [DEBUG] [Thread-22382] [transport.py] [_log()] Compression: none
2026-04-15T16:50:01.329 [DEBUG] [Thread-22382] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:50:01.344 [DEBUG] [Thread-22382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:50:01.345 [DEBUG] [Thread-22382] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:50:01.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:50:01.345 [DEBUG] [Thread-22382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:50:01.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:50:01.346 [DEBUG] [Thread-22382] [transport.py] [_log()] userauth is OK
2026-04-15T16:50:01.346 [DEBUG] [Thread-22382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:50:01.347 [DEBUG] [Thread-22382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:50:01.347 [DEBUG] [Thread-22382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:50:01.347 [DEBUG] [Thread-22382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:50:01.365 [INFO] [Thread-22382] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:50:01.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:50:02.026 [DEBUG] [Thread-22382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:50:02.027 [DEBUG] [Thread-22382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:50:02.027 [DEBUG] [Thread-22382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:50:02.068 [DEBUG] [Thread-22382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:50:02.068 [DEBUG] [Thread-22382] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:50:02.070 [DEBUG] [Thread-22382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:50:02.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:50:02.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:50:02.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:50:02.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:50:02.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:50:02.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:50:02.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:50:02.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:50:02.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:50:02.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.617843 -999.00  +14.00  21.61     62   +7.00 1 1 1 1 1   887    0 4.39 -104.30 ----- 23.9 21.6 296.7 27.5 18.5 -28.0 18.1 -27.2 19.0 -26.0 19.9 -26.4
2026-04-15T16:50:02.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:50:02.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:50:02.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.617843
2026-04-15T16:50:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:50:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:50:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:50:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:50:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:50:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:49:51', tmtdew=9.68216, humidity=52.3509, cloud=0.0, wind=25.511, temperature=15.2399, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:49:41.635', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:50:02.089 [DEBUG] [Thread-22382] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:50:02.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:50:02.303 [DEBUG] [Thread-22385] [transport.py] [_log()] starting thread (client mode): 0xee9af640
2026-04-15T16:50:02.303 [DEBUG] [Thread-22385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:50:02.321 [DEBUG] [Thread-22385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:50:02.321 [INFO] [Thread-22385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:50:02.329 [DEBUG] [Thread-22385] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:50:02.329 [DEBUG] [Thread-22385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:50:02.329 [DEBUG] [Thread-22385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:50:02.329 [DEBUG] [Thread-22385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:50:02.329 [DEBUG] [Thread-22385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:50:02.329 [DEBUG] [Thread-22385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:50:02.329 [DEBUG] [Thread-22385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:50:02.329 [DEBUG] [Thread-22385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:50:02.329 [DEBUG] [Thread-22385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:50:02.330 [DEBUG] [Thread-22385] [transport.py] [_log()] client lang: <none>
2026-04-15T16:50:02.330 [DEBUG] [Thread-22385] [transport.py] [_log()] server lang: <none>
2026-04-15T16:50:02.330 [DEBUG] [Thread-22385] [transport.py] [_log()] kex follows: False
2026-04-15T16:50:02.330 [DEBUG] [Thread-22385] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:50:02.330 [DEBUG] [Thread-22385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:50:02.330 [DEBUG] [Thread-22385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:50:02.330 [DEBUG] [Thread-22385] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:50:02.331 [DEBUG] [Thread-22385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:50:02.331 [DEBUG] [Thread-22385] [transport.py] [_log()] Compression: none
2026-04-15T16:50:02.331 [DEBUG] [Thread-22385] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:50:02.388 [DEBUG] [Thread-22385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:50:02.389 [DEBUG] [Thread-22385] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:50:02.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:50:02.389 [DEBUG] [Thread-22385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:50:02.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:50:02.444 [DEBUG] [Thread-22385] [transport.py] [_log()] userauth is OK
2026-04-15T16:50:02.445 [DEBUG] [Thread-22385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:50:02.445 [DEBUG] [Thread-22385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:50:02.445 [DEBUG] [Thread-22385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:50:02.445 [DEBUG] [Thread-22385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:50:02.473 [INFO] [Thread-22385] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:50:02.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:50:02.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:50:03.334 [DEBUG] [Thread-22385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:50:03.335 [DEBUG] [Thread-22385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:50:03.381 [DEBUG] [Thread-22385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:50:03.382 [DEBUG] [Thread-22385] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:50:03.390 [DEBUG] [Thread-22385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:50:03.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:50:03.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')
2026-04-15T16:50:03.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
2026-04-15T16:50:03.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:50:03.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:50:03.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:50:03.422 [DEBUG] [Thread-22385] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:50:11.865 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:50:16.150 [DEBUG] [Thread-22387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:50:23.465 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:50:23.466 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:50:31.194 [DEBUG] [Thread-22388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:50:33.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:50:33.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:50:33.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
2026-04-15T16:50:34.481 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:50:34.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 50, 27), 8.74234, 55.7914, 0.0, 23.5026, 14.338, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:50:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:50:27
2026-04-15T16:50:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:50:35.567 [DEBUG] [Thread-22389] [transport.py] [_log()] starting thread (client mode): 0xee9ae260
2026-04-15T16:50:35.567 [DEBUG] [Thread-22389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:50:35.587 [DEBUG] [Thread-22389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:50:35.587 [INFO] [Thread-22389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:50:35.590 [DEBUG] [Thread-22389] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:50:35.590 [DEBUG] [Thread-22389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:50:35.590 [DEBUG] [Thread-22389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:50:35.590 [DEBUG] [Thread-22389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:50:35.590 [DEBUG] [Thread-22389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:50:35.591 [DEBUG] [Thread-22389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:50:35.591 [DEBUG] [Thread-22389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:50:35.591 [DEBUG] [Thread-22389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:50:35.591 [DEBUG] [Thread-22389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:50:35.591 [DEBUG] [Thread-22389] [transport.py] [_log()] client lang: <none>
2026-04-15T16:50:35.591 [DEBUG] [Thread-22389] [transport.py] [_log()] server lang: <none>
2026-04-15T16:50:35.591 [DEBUG] [Thread-22389] [transport.py] [_log()] kex follows: False
2026-04-15T16:50:35.591 [DEBUG] [Thread-22389] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:50:35.591 [DEBUG] [Thread-22389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:50:35.591 [DEBUG] [Thread-22389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:50:35.591 [DEBUG] [Thread-22389] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:50:35.592 [DEBUG] [Thread-22389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:50:35.592 [DEBUG] [Thread-22389] [transport.py] [_log()] Compression: none
2026-04-15T16:50:35.592 [DEBUG] [Thread-22389] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:50:35.606 [DEBUG] [Thread-22389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:50:35.606 [DEBUG] [Thread-22389] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:50:35.607 [DEBUG] [Thread-22389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:50:35.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:50:35.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:50:35.608 [DEBUG] [Thread-22389] [transport.py] [_log()] userauth is OK
2026-04-15T16:50:35.608 [DEBUG] [Thread-22389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:50:35.608 [DEBUG] [Thread-22389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:50:35.608 [DEBUG] [Thread-22389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:50:35.608 [DEBUG] [Thread-22389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:50:35.632 [INFO] [Thread-22389] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:50:35.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:50:36.229 [DEBUG] [Thread-22389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:50:36.229 [DEBUG] [Thread-22389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:50:36.229 [DEBUG] [Thread-22389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:50:36.270 [DEBUG] [Thread-22389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:50:36.270 [DEBUG] [Thread-22389] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:50:36.272 [DEBUG] [Thread-22389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:50:36.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:50:36.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:50:36.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:50:36.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:50:36.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:50:36.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:50:36.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:50:36.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:50:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:50:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.618191 -999.00  +13.70  23.13     62   +6.80 1 1 1 1 1   887    0 4.45 -102.84 ----- 27.0 23.1 299.2 30.5 18.4 -28.1 18.0 -27.4 18.9 -26.2 19.7 -26.4
2026-04-15T16:50:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:50:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:50:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.618191
2026-04-15T16:50:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:50:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:50:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:50:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:50:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:50:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:50:27', tmtdew=8.74234, humidity=55.7914, cloud=0.0, wind=23.5026, temperature=14.338, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:50:11.702', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:50:36.292 [DEBUG] [Thread-22389] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:50:36.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:50:36.510 [DEBUG] [Thread-22392] [transport.py] [_log()] starting thread (client mode): 0xf1352cb0
2026-04-15T16:50:36.510 [DEBUG] [Thread-22392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:50:36.525 [DEBUG] [Thread-22392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:50:36.525 [INFO] [Thread-22392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:50:36.532 [DEBUG] [Thread-22392] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:50:36.532 [DEBUG] [Thread-22392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:50:36.532 [DEBUG] [Thread-22392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:50:36.532 [DEBUG] [Thread-22392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:50:36.532 [DEBUG] [Thread-22392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:50:36.532 [DEBUG] [Thread-22392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:50:36.532 [DEBUG] [Thread-22392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:50:36.532 [DEBUG] [Thread-22392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:50:36.532 [DEBUG] [Thread-22392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:50:36.533 [DEBUG] [Thread-22392] [transport.py] [_log()] client lang: <none>
2026-04-15T16:50:36.533 [DEBUG] [Thread-22392] [transport.py] [_log()] server lang: <none>
2026-04-15T16:50:36.533 [DEBUG] [Thread-22392] [transport.py] [_log()] kex follows: False
2026-04-15T16:50:36.533 [DEBUG] [Thread-22392] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:50:36.533 [DEBUG] [Thread-22392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:50:36.533 [DEBUG] [Thread-22392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:50:36.533 [DEBUG] [Thread-22392] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:50:36.533 [DEBUG] [Thread-22392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:50:36.533 [DEBUG] [Thread-22392] [transport.py] [_log()] Compression: none
2026-04-15T16:50:36.533 [DEBUG] [Thread-22392] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:50:36.588 [DEBUG] [Thread-22392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:50:36.589 [DEBUG] [Thread-22392] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:50:36.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:50:36.589 [DEBUG] [Thread-22392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:50:36.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:50:36.646 [DEBUG] [Thread-22392] [transport.py] [_log()] userauth is OK
2026-04-15T16:50:36.647 [DEBUG] [Thread-22392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:50:36.647 [DEBUG] [Thread-22392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:50:36.647 [DEBUG] [Thread-22392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:50:36.647 [DEBUG] [Thread-22392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:50:36.672 [INFO] [Thread-22392] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:50:36.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:50:36.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:50:37.521 [DEBUG] [Thread-22392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:50:37.521 [DEBUG] [Thread-22392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:50:37.569 [DEBUG] [Thread-22392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:50:37.569 [DEBUG] [Thread-22392] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:50:37.578 [DEBUG] [Thread-22392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:50:37.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:50:37.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')
2026-04-15T16:50:37.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
2026-04-15T16:50:37.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:50:37.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:50:37.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:50:37.613 [DEBUG] [Thread-22392] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:50:39.501 [DEBUG] [Thread-22394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:50:46.225 [DEBUG] [Thread-22395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:50:57.058 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:51:01.263 [DEBUG] [Thread-22396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:51:07.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:51:07.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:51:07.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
2026-04-15T16:51:08.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 50, 27), 8.74234, 55.7914, 0.0, 23.5026, 14.338, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:51:08.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:50:27
2026-04-15T16:51:09.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:51:09.776 [DEBUG] [Thread-22397] [transport.py] [_log()] starting thread (client mode): 0xee91cfa0
2026-04-15T16:51:09.776 [DEBUG] [Thread-22397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:51:09.795 [DEBUG] [Thread-22397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:51:09.796 [INFO] [Thread-22397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:51:09.797 [DEBUG] [Thread-22397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:51:09.797 [DEBUG] [Thread-22397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:51:09.797 [DEBUG] [Thread-22397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:51:09.797 [DEBUG] [Thread-22397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:51:09.797 [DEBUG] [Thread-22397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:51:09.798 [DEBUG] [Thread-22397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:51:09.798 [DEBUG] [Thread-22397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:51:09.798 [DEBUG] [Thread-22397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:51:09.798 [DEBUG] [Thread-22397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:51:09.798 [DEBUG] [Thread-22397] [transport.py] [_log()] client lang: <none>
2026-04-15T16:51:09.798 [DEBUG] [Thread-22397] [transport.py] [_log()] server lang: <none>
2026-04-15T16:51:09.798 [DEBUG] [Thread-22397] [transport.py] [_log()] kex follows: False
2026-04-15T16:51:09.798 [DEBUG] [Thread-22397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:51:09.798 [DEBUG] [Thread-22397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:51:09.798 [DEBUG] [Thread-22397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:51:09.798 [DEBUG] [Thread-22397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:51:09.798 [DEBUG] [Thread-22397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:51:09.799 [DEBUG] [Thread-22397] [transport.py] [_log()] Compression: none
2026-04-15T16:51:09.799 [DEBUG] [Thread-22397] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:51:09.816 [DEBUG] [Thread-22397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:51:09.816 [DEBUG] [Thread-22397] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:51:09.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:51:09.817 [DEBUG] [Thread-22397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:51:09.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:51:09.818 [DEBUG] [Thread-22397] [transport.py] [_log()] userauth is OK
2026-04-15T16:51:09.818 [DEBUG] [Thread-22397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:51:09.818 [DEBUG] [Thread-22397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:51:09.818 [DEBUG] [Thread-22397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:51:09.818 [DEBUG] [Thread-22397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:51:09.836 [INFO] [Thread-22397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:51:09.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:51:10.448 [DEBUG] [Thread-22397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:51:10.448 [DEBUG] [Thread-22397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:51:10.448 [DEBUG] [Thread-22397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:51:10.489 [DEBUG] [Thread-22397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:51:10.489 [DEBUG] [Thread-22397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:51:10.492 [DEBUG] [Thread-22397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:51:10.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:51:10.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:51:10.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:51:10.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:51:10.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:51:10.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:51:10.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:51:10.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:51:10.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:51:10.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.618538 -999.00  +13.70  24.52     63   +6.90 1 1 1 1 1   887    0 4.59 -98.67 ----- 17.9 24.5 291.2 29.8 18.3 -27.9 17.9 -26.4 18.8 -25.5 19.6 -26.1
2026-04-15T16:51:10.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:51:10.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:51:10.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.618538
2026-04-15T16:51:10.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:51:10.516 [DEBUG] [Thread-22397] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:51:10.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:51:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:51:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:51:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:51:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:50:27', tmtdew=8.74234, humidity=55.7914, cloud=0.0, wind=23.5026, temperature=14.338, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:50:41.683', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:51:10.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:51:10.772 [DEBUG] [Thread-22400] [transport.py] [_log()] starting thread (client mode): 0xee91f040
2026-04-15T16:51:10.772 [DEBUG] [Thread-22400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:51:10.787 [DEBUG] [Thread-22400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:51:10.787 [INFO] [Thread-22400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:51:10.797 [DEBUG] [Thread-22400] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:51:10.797 [DEBUG] [Thread-22400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:51:10.797 [DEBUG] [Thread-22400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:51:10.798 [DEBUG] [Thread-22400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:51:10.798 [DEBUG] [Thread-22400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:51:10.798 [DEBUG] [Thread-22400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:51:10.798 [DEBUG] [Thread-22400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:51:10.798 [DEBUG] [Thread-22400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:51:10.798 [DEBUG] [Thread-22400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:51:10.798 [DEBUG] [Thread-22400] [transport.py] [_log()] client lang: <none>
2026-04-15T16:51:10.798 [DEBUG] [Thread-22400] [transport.py] [_log()] server lang: <none>
2026-04-15T16:51:10.798 [DEBUG] [Thread-22400] [transport.py] [_log()] kex follows: False
2026-04-15T16:51:10.798 [DEBUG] [Thread-22400] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:51:10.798 [DEBUG] [Thread-22400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:51:10.799 [DEBUG] [Thread-22400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:51:10.799 [DEBUG] [Thread-22400] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:51:10.799 [DEBUG] [Thread-22400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:51:10.799 [DEBUG] [Thread-22400] [transport.py] [_log()] Compression: none
2026-04-15T16:51:10.799 [DEBUG] [Thread-22400] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:51:10.861 [DEBUG] [Thread-22400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:51:10.861 [DEBUG] [Thread-22400] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:51:10.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:51:10.862 [DEBUG] [Thread-22400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:51:10.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:51:10.917 [DEBUG] [Thread-22400] [transport.py] [_log()] userauth is OK
2026-04-15T16:51:10.917 [DEBUG] [Thread-22400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:51:10.918 [DEBUG] [Thread-22400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:51:10.918 [DEBUG] [Thread-22400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:51:10.918 [DEBUG] [Thread-22400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:51:10.942 [INFO] [Thread-22400] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:51:10.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:51:10.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:51:11.758 [DEBUG] [Thread-22400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:51:11.758 [DEBUG] [Thread-22400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:51:11.806 [DEBUG] [Thread-22400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:51:11.806 [DEBUG] [Thread-22400] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:51:11.815 [DEBUG] [Thread-22400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:51:11.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:51:11.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')
2026-04-15T16:51:11.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
2026-04-15T16:51:11.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:51:11.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:51:11.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:51:11.850 [DEBUG] [Thread-22400] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:51:16.292 [DEBUG] [Thread-22402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:51:19.613 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:51:23.607 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:51:23.608 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:51:31.329 [DEBUG] [Thread-22403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:51:39.590 [DEBUG] [Thread-22404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:51:41.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:51:41.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:51:41.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
2026-04-15T16:51:42.218 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:51:43.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 51, 2), 8.66877, 56.0399, 0.0, 21.4034, 14.2552, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:51:43.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:51:02
2026-04-15T16:51:43.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:51:44.059 [DEBUG] [Thread-22405] [transport.py] [_log()] starting thread (client mode): 0xf1350f10
2026-04-15T16:51:44.059 [DEBUG] [Thread-22405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:51:44.070 [DEBUG] [Thread-22405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:51:44.071 [INFO] [Thread-22405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:51:44.072 [DEBUG] [Thread-22405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:51:44.072 [DEBUG] [Thread-22405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:51:44.072 [DEBUG] [Thread-22405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:51:44.072 [DEBUG] [Thread-22405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:51:44.073 [DEBUG] [Thread-22405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:51:44.073 [DEBUG] [Thread-22405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:51:44.073 [DEBUG] [Thread-22405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:51:44.073 [DEBUG] [Thread-22405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:51:44.073 [DEBUG] [Thread-22405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:51:44.073 [DEBUG] [Thread-22405] [transport.py] [_log()] client lang: <none>
2026-04-15T16:51:44.073 [DEBUG] [Thread-22405] [transport.py] [_log()] server lang: <none>
2026-04-15T16:51:44.073 [DEBUG] [Thread-22405] [transport.py] [_log()] kex follows: False
2026-04-15T16:51:44.073 [DEBUG] [Thread-22405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:51:44.073 [DEBUG] [Thread-22405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:51:44.073 [DEBUG] [Thread-22405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:51:44.073 [DEBUG] [Thread-22405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:51:44.074 [DEBUG] [Thread-22405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:51:44.074 [DEBUG] [Thread-22405] [transport.py] [_log()] Compression: none
2026-04-15T16:51:44.074 [DEBUG] [Thread-22405] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:51:44.086 [DEBUG] [Thread-22405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:51:44.087 [DEBUG] [Thread-22405] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:51:44.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:51:44.087 [DEBUG] [Thread-22405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:51:44.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:51:44.088 [DEBUG] [Thread-22405] [transport.py] [_log()] userauth is OK
2026-04-15T16:51:44.088 [DEBUG] [Thread-22405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:51:44.088 [DEBUG] [Thread-22405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:51:44.088 [DEBUG] [Thread-22405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:51:44.088 [DEBUG] [Thread-22405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:51:44.107 [INFO] [Thread-22405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:51:44.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:51:44.702 [DEBUG] [Thread-22405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:51:44.702 [DEBUG] [Thread-22405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:51:44.703 [DEBUG] [Thread-22405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:51:44.743 [DEBUG] [Thread-22405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:51:44.743 [DEBUG] [Thread-22405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:51:44.746 [DEBUG] [Thread-22405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:51:44.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:51:44.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:51:44.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:51:44.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:51:44.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:51:44.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:51:44.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:51:44.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:51:44.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:51:44.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.618885 -999.00  +13.70  20.74     63   +6.90 1 1 1 1 1   887    0 4.48 -101.86 ----- 18.7 20.7 307.0 27.8 18.4 -27.6 17.9 -26.3 18.7 -24.7 19.5 -25.8
2026-04-15T16:51:44.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:51:44.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:51:44.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.618885
2026-04-15T16:51:44.770 [DEBUG] [Thread-22405] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:51:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:51:44.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:51:44.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:51:44.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:51:44.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:51:44.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:51:02', tmtdew=8.66877, humidity=56.0399, cloud=0.0, wind=21.4034, temperature=14.2552, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:51:11.664', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:51:45.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:51:45.029 [DEBUG] [Thread-22408] [transport.py] [_log()] starting thread (client mode): 0xf1352bc0
2026-04-15T16:51:45.030 [DEBUG] [Thread-22408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:51:45.044 [DEBUG] [Thread-22408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:51:45.044 [INFO] [Thread-22408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:51:45.054 [DEBUG] [Thread-22408] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:51:45.055 [DEBUG] [Thread-22408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:51:45.055 [DEBUG] [Thread-22408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:51:45.055 [DEBUG] [Thread-22408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:51:45.055 [DEBUG] [Thread-22408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:51:45.055 [DEBUG] [Thread-22408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:51:45.055 [DEBUG] [Thread-22408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:51:45.055 [DEBUG] [Thread-22408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:51:45.055 [DEBUG] [Thread-22408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:51:45.055 [DEBUG] [Thread-22408] [transport.py] [_log()] client lang: <none>
2026-04-15T16:51:45.055 [DEBUG] [Thread-22408] [transport.py] [_log()] server lang: <none>
2026-04-15T16:51:45.055 [DEBUG] [Thread-22408] [transport.py] [_log()] kex follows: False
2026-04-15T16:51:45.056 [DEBUG] [Thread-22408] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:51:45.056 [DEBUG] [Thread-22408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:51:45.056 [DEBUG] [Thread-22408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:51:45.056 [DEBUG] [Thread-22408] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:51:45.056 [DEBUG] [Thread-22408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:51:45.056 [DEBUG] [Thread-22408] [transport.py] [_log()] Compression: none
2026-04-15T16:51:45.056 [DEBUG] [Thread-22408] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:51:45.113 [DEBUG] [Thread-22408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:51:45.113 [DEBUG] [Thread-22408] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:51:45.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:51:45.114 [DEBUG] [Thread-22408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:51:45.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:51:45.170 [DEBUG] [Thread-22408] [transport.py] [_log()] userauth is OK
2026-04-15T16:51:45.170 [DEBUG] [Thread-22408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:51:45.170 [DEBUG] [Thread-22408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:51:45.170 [DEBUG] [Thread-22408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:51:45.171 [DEBUG] [Thread-22408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:51:45.197 [INFO] [Thread-22408] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:51:45.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:51:45.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:51:46.038 [DEBUG] [Thread-22408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:51:46.038 [DEBUG] [Thread-22408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:51:46.086 [DEBUG] [Thread-22408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:51:46.086 [DEBUG] [Thread-22408] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:51:46.095 [DEBUG] [Thread-22408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:51:46.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:51:46.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')
2026-04-15T16:51:46.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
2026-04-15T16:51:46.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:51:46.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:51:46.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:51:46.128 [DEBUG] [Thread-22408] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:51:46.359 [DEBUG] [Thread-22410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:01.397 [DEBUG] [Thread-22411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:04.773 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:16.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:52:16.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:52:16.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T16:52:16.427 [DEBUG] [Thread-22412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:17.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 51, 38), 9.22324, 53.8418, 0.0, 23.0767, 14.4777, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:52:17.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:51:38
2026-04-15T16:52:17.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:52:18.408 [DEBUG] [Thread-22413] [transport.py] [_log()] starting thread (client mode): 0xf17c2710
2026-04-15T16:52:18.408 [DEBUG] [Thread-22413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:52:18.422 [DEBUG] [Thread-22413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:52:18.422 [INFO] [Thread-22413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:52:18.424 [DEBUG] [Thread-22413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:52:18.424 [DEBUG] [Thread-22413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:52:18.424 [DEBUG] [Thread-22413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:52:18.424 [DEBUG] [Thread-22413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:52:18.424 [DEBUG] [Thread-22413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:52:18.424 [DEBUG] [Thread-22413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:52:18.425 [DEBUG] [Thread-22413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:52:18.425 [DEBUG] [Thread-22413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:52:18.425 [DEBUG] [Thread-22413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:52:18.425 [DEBUG] [Thread-22413] [transport.py] [_log()] client lang: <none>
2026-04-15T16:52:18.425 [DEBUG] [Thread-22413] [transport.py] [_log()] server lang: <none>
2026-04-15T16:52:18.425 [DEBUG] [Thread-22413] [transport.py] [_log()] kex follows: False
2026-04-15T16:52:18.425 [DEBUG] [Thread-22413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:52:18.425 [DEBUG] [Thread-22413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:52:18.425 [DEBUG] [Thread-22413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:52:18.425 [DEBUG] [Thread-22413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:52:18.425 [DEBUG] [Thread-22413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:52:18.425 [DEBUG] [Thread-22413] [transport.py] [_log()] Compression: none
2026-04-15T16:52:18.425 [DEBUG] [Thread-22413] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:52:18.438 [DEBUG] [Thread-22413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:52:18.439 [DEBUG] [Thread-22413] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:52:18.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:52:18.439 [DEBUG] [Thread-22413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:52:18.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:52:18.440 [DEBUG] [Thread-22413] [transport.py] [_log()] userauth is OK
2026-04-15T16:52:18.440 [DEBUG] [Thread-22413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:52:18.440 [DEBUG] [Thread-22413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:52:18.441 [DEBUG] [Thread-22413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:52:18.441 [DEBUG] [Thread-22413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:52:18.460 [INFO] [Thread-22413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:52:18.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:52:19.072 [DEBUG] [Thread-22413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:52:19.072 [DEBUG] [Thread-22413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:52:19.073 [DEBUG] [Thread-22413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:52:19.113 [DEBUG] [Thread-22413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:52:19.113 [DEBUG] [Thread-22413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:52:19.116 [DEBUG] [Thread-22413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:52:19.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:52:19.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:52:19.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:52:19.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:52:19.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:52:19.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:52:19.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:52:19.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:52:19.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:52:19.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.619232 -999.00  +13.80  19.24     62   +6.80 1 1 1 1 1   887    0 4.51 -96.77 ----- 15.8 19.2 299.4 24.6 18.3 -27.0 17.9 -25.8 18.7 -24.1 19.5 -25.5
2026-04-15T16:52:19.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:52:19.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:52:19.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.619232
2026-04-15T16:52:19.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:52:19.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:52:19.135 [DEBUG] [Thread-22413] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:52:19.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:52:19.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:52:19.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:52:19.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:51:38', tmtdew=9.22324, humidity=53.8418, cloud=0.0, wind=23.0767, temperature=14.4777, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:51:41.645', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:52:19.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:52:19.394 [DEBUG] [Thread-22416] [transport.py] [_log()] starting thread (client mode): 0xf13ff760
2026-04-15T16:52:19.394 [DEBUG] [Thread-22416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:52:19.409 [DEBUG] [Thread-22416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:52:19.409 [INFO] [Thread-22416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:52:19.416 [DEBUG] [Thread-22416] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:52:19.416 [DEBUG] [Thread-22416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:52:19.416 [DEBUG] [Thread-22416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:52:19.416 [DEBUG] [Thread-22416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:52:19.416 [DEBUG] [Thread-22416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:52:19.417 [DEBUG] [Thread-22416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:52:19.417 [DEBUG] [Thread-22416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:52:19.417 [DEBUG] [Thread-22416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:52:19.417 [DEBUG] [Thread-22416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:52:19.417 [DEBUG] [Thread-22416] [transport.py] [_log()] client lang: <none>
2026-04-15T16:52:19.417 [DEBUG] [Thread-22416] [transport.py] [_log()] server lang: <none>
2026-04-15T16:52:19.417 [DEBUG] [Thread-22416] [transport.py] [_log()] kex follows: False
2026-04-15T16:52:19.417 [DEBUG] [Thread-22416] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:52:19.417 [DEBUG] [Thread-22416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:52:19.417 [DEBUG] [Thread-22416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:52:19.417 [DEBUG] [Thread-22416] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:52:19.418 [DEBUG] [Thread-22416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:52:19.418 [DEBUG] [Thread-22416] [transport.py] [_log()] Compression: none
2026-04-15T16:52:19.418 [DEBUG] [Thread-22416] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:52:19.473 [DEBUG] [Thread-22416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:52:19.474 [DEBUG] [Thread-22416] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:52:19.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:52:19.474 [DEBUG] [Thread-22416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:52:19.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:52:19.530 [DEBUG] [Thread-22416] [transport.py] [_log()] userauth is OK
2026-04-15T16:52:19.530 [DEBUG] [Thread-22416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:52:19.530 [DEBUG] [Thread-22416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:52:19.531 [DEBUG] [Thread-22416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:52:19.531 [DEBUG] [Thread-22416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:52:19.556 [INFO] [Thread-22416] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:52:19.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:52:19.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:52:20.372 [DEBUG] [Thread-22416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:52:20.372 [DEBUG] [Thread-22416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:52:20.420 [DEBUG] [Thread-22416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:52:20.420 [DEBUG] [Thread-22416] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:52:20.429 [DEBUG] [Thread-22416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:52:20.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:52:20.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')
2026-04-15T16:52:20.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
2026-04-15T16:52:20.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:52:20.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:52:20.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:52:20.464 [DEBUG] [Thread-22416] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:52:23.748 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:23.749 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:27.336 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:28.407 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:30.879 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:31.456 [DEBUG] [Thread-22418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:32.379 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:32.866 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:33.356 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:34.853 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:36.409 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:37.896 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:38.387 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:38.885 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:39.697 [DEBUG] [Thread-22419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:40.382 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:40.933 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:46.498 [DEBUG] [Thread-22420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:49.484 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:52:50.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:52:50.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:52:50.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
2026-04-15T16:52:51.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 52, 13), 8.78059, 55.1726, 0.0, 20.7508, 13.9722, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:52:51.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:52:13
2026-04-15T16:52:52.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:52:52.686 [DEBUG] [Thread-22421] [transport.py] [_log()] starting thread (client mode): 0xf13fcbe0
2026-04-15T16:52:52.686 [DEBUG] [Thread-22421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:52:52.707 [DEBUG] [Thread-22421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:52:52.707 [INFO] [Thread-22421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:52:52.710 [DEBUG] [Thread-22421] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:52:52.710 [DEBUG] [Thread-22421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:52:52.710 [DEBUG] [Thread-22421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:52:52.710 [DEBUG] [Thread-22421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:52:52.710 [DEBUG] [Thread-22421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:52:52.710 [DEBUG] [Thread-22421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:52:52.710 [DEBUG] [Thread-22421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:52:52.710 [DEBUG] [Thread-22421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:52:52.710 [DEBUG] [Thread-22421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:52:52.710 [DEBUG] [Thread-22421] [transport.py] [_log()] client lang: <none>
2026-04-15T16:52:52.710 [DEBUG] [Thread-22421] [transport.py] [_log()] server lang: <none>
2026-04-15T16:52:52.710 [DEBUG] [Thread-22421] [transport.py] [_log()] kex follows: False
2026-04-15T16:52:52.711 [DEBUG] [Thread-22421] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:52:52.711 [DEBUG] [Thread-22421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:52:52.711 [DEBUG] [Thread-22421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:52:52.711 [DEBUG] [Thread-22421] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:52:52.711 [DEBUG] [Thread-22421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:52:52.711 [DEBUG] [Thread-22421] [transport.py] [_log()] Compression: none
2026-04-15T16:52:52.711 [DEBUG] [Thread-22421] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:52:52.727 [DEBUG] [Thread-22421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:52:52.727 [DEBUG] [Thread-22421] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:52:52.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:52:52.728 [DEBUG] [Thread-22421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:52:52.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:52:52.729 [DEBUG] [Thread-22421] [transport.py] [_log()] userauth is OK
2026-04-15T16:52:52.729 [DEBUG] [Thread-22421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:52:52.729 [DEBUG] [Thread-22421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:52:52.729 [DEBUG] [Thread-22421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:52:52.729 [DEBUG] [Thread-22421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:52:52.750 [INFO] [Thread-22421] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:52:52.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:52:53.376 [DEBUG] [Thread-22421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:52:53.376 [DEBUG] [Thread-22421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:52:53.377 [DEBUG] [Thread-22421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:52:53.417 [DEBUG] [Thread-22421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:52:53.417 [DEBUG] [Thread-22421] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:52:53.420 [DEBUG] [Thread-22421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:52:53.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:52:53.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:52:53.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:52:53.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:52:53.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:52:53.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:52:53.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:52:53.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:52:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:52:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.619580 -999.00  +14.00  22.02     63   +7.20 1 1 1 1 1   887    0 4.67 -93.40 ----- 19.8 22.0 299.0 23.6 18.4 -26.4 17.9 -25.3 18.7 -24.1 19.5 -24.8
2026-04-15T16:52:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:52:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:52:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.619580
2026-04-15T16:52:53.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:52:53.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:52:53.444 [DEBUG] [Thread-22421] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:52:53.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:52:53.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:52:53.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:52:53.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:52:13', tmtdew=8.78059, humidity=55.1726, cloud=0.0, wind=20.7508, temperature=13.9722, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:52:11.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:52:53.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:52:53.695 [DEBUG] [Thread-22424] [transport.py] [_log()] starting thread (client mode): 0xee91f8e0
2026-04-15T16:52:53.695 [DEBUG] [Thread-22424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:52:53.712 [DEBUG] [Thread-22424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:52:53.712 [INFO] [Thread-22424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:52:53.721 [DEBUG] [Thread-22424] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:52:53.721 [DEBUG] [Thread-22424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:52:53.721 [DEBUG] [Thread-22424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:52:53.721 [DEBUG] [Thread-22424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:52:53.721 [DEBUG] [Thread-22424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:52:53.722 [DEBUG] [Thread-22424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:52:53.722 [DEBUG] [Thread-22424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:52:53.722 [DEBUG] [Thread-22424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:52:53.722 [DEBUG] [Thread-22424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:52:53.722 [DEBUG] [Thread-22424] [transport.py] [_log()] client lang: <none>
2026-04-15T16:52:53.722 [DEBUG] [Thread-22424] [transport.py] [_log()] server lang: <none>
2026-04-15T16:52:53.722 [DEBUG] [Thread-22424] [transport.py] [_log()] kex follows: False
2026-04-15T16:52:53.722 [DEBUG] [Thread-22424] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:52:53.722 [DEBUG] [Thread-22424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:52:53.722 [DEBUG] [Thread-22424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:52:53.722 [DEBUG] [Thread-22424] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:52:53.723 [DEBUG] [Thread-22424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:52:53.723 [DEBUG] [Thread-22424] [transport.py] [_log()] Compression: none
2026-04-15T16:52:53.723 [DEBUG] [Thread-22424] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:52:53.780 [DEBUG] [Thread-22424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:52:53.781 [DEBUG] [Thread-22424] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:52:53.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:52:53.782 [DEBUG] [Thread-22424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:52:53.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:52:53.842 [DEBUG] [Thread-22424] [transport.py] [_log()] userauth is OK
2026-04-15T16:52:53.842 [DEBUG] [Thread-22424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:52:53.842 [DEBUG] [Thread-22424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:52:53.842 [DEBUG] [Thread-22424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:52:53.843 [DEBUG] [Thread-22424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:52:53.868 [INFO] [Thread-22424] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:52:53.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:52:53.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:52:54.676 [DEBUG] [Thread-22424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:52:54.676 [DEBUG] [Thread-22424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:52:54.724 [DEBUG] [Thread-22424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:52:54.724 [DEBUG] [Thread-22424] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:52:54.733 [DEBUG] [Thread-22424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:52:54.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:52:54.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')
2026-04-15T16:52:54.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
2026-04-15T16:52:54.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:52:54.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:52:54.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:52:54.767 [DEBUG] [Thread-22424] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:52:56.000 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:01.526 [DEBUG] [Thread-22426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:02.502 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:09.012 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:15.517 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:16.567 [DEBUG] [Thread-22427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:22.024 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:23.889 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:23.890 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:24.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:53:24.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:53:24.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
2026-04-15T16:53:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 52, 49), 9.24406, 53.8422, 0.0, 21.7714, 14.7763, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:53:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:52:49
2026-04-15T16:53:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:53:26.960 [DEBUG] [Thread-22428] [transport.py] [_log()] starting thread (client mode): 0xee90c760
2026-04-15T16:53:26.960 [DEBUG] [Thread-22428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:53:26.979 [DEBUG] [Thread-22428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:53:26.979 [INFO] [Thread-22428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:53:26.983 [DEBUG] [Thread-22428] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:53:26.983 [DEBUG] [Thread-22428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:53:26.983 [DEBUG] [Thread-22428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:53:26.983 [DEBUG] [Thread-22428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:53:26.983 [DEBUG] [Thread-22428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:53:26.983 [DEBUG] [Thread-22428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:53:26.983 [DEBUG] [Thread-22428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:53:26.983 [DEBUG] [Thread-22428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:53:26.983 [DEBUG] [Thread-22428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:53:26.983 [DEBUG] [Thread-22428] [transport.py] [_log()] client lang: <none>
2026-04-15T16:53:26.983 [DEBUG] [Thread-22428] [transport.py] [_log()] server lang: <none>
2026-04-15T16:53:26.984 [DEBUG] [Thread-22428] [transport.py] [_log()] kex follows: False
2026-04-15T16:53:26.984 [DEBUG] [Thread-22428] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:53:26.984 [DEBUG] [Thread-22428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:53:26.984 [DEBUG] [Thread-22428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:53:26.984 [DEBUG] [Thread-22428] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:53:26.984 [DEBUG] [Thread-22428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:53:26.984 [DEBUG] [Thread-22428] [transport.py] [_log()] Compression: none
2026-04-15T16:53:26.984 [DEBUG] [Thread-22428] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:53:27.001 [DEBUG] [Thread-22428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:53:27.001 [DEBUG] [Thread-22428] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:53:27.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:53:27.002 [DEBUG] [Thread-22428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:53:27.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:53:27.003 [DEBUG] [Thread-22428] [transport.py] [_log()] userauth is OK
2026-04-15T16:53:27.003 [DEBUG] [Thread-22428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:53:27.003 [DEBUG] [Thread-22428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:53:27.003 [DEBUG] [Thread-22428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:53:27.003 [DEBUG] [Thread-22428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:53:27.027 [INFO] [Thread-22428] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:53:27.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:53:27.822 [DEBUG] [Thread-22428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:53:27.822 [DEBUG] [Thread-22428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:53:27.822 [DEBUG] [Thread-22428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:53:27.863 [DEBUG] [Thread-22428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:53:27.863 [DEBUG] [Thread-22428] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:53:27.866 [DEBUG] [Thread-22428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:53:27.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:53:27.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:53:27.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:53:27.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:53:27.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:53:27.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:53:27.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:53:27.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:53:27.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:53:27.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.620274 -999.00  +14.10  14.91     60   +6.70 1 1 1 1 1   887    0 4.85 -82.75 ----- 19.7 14.9 323.0 22.8 18.4 -26.3 17.9 -25.4 18.8 -22.9 19.6 -24.8
2026-04-15T16:53:27.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:53:27.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:53:27.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.620274
2026-04-15T16:53:27.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:53:27.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:53:27.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:53:27.892 [DEBUG] [Thread-22428] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:53:27.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:53:27.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:53:27.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:52:49', tmtdew=9.24406, humidity=53.8422, cloud=0.0, wind=21.7714, temperature=14.7763, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:53:11.674', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:53:28.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:53:28.148 [DEBUG] [Thread-22431] [transport.py] [_log()] starting thread (client mode): 0xee90c160
2026-04-15T16:53:28.149 [DEBUG] [Thread-22431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:53:28.168 [DEBUG] [Thread-22431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:53:28.168 [INFO] [Thread-22431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:53:28.175 [DEBUG] [Thread-22431] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:53:28.176 [DEBUG] [Thread-22431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:53:28.176 [DEBUG] [Thread-22431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:53:28.176 [DEBUG] [Thread-22431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:53:28.176 [DEBUG] [Thread-22431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:53:28.176 [DEBUG] [Thread-22431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:53:28.176 [DEBUG] [Thread-22431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:53:28.176 [DEBUG] [Thread-22431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:53:28.176 [DEBUG] [Thread-22431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:53:28.176 [DEBUG] [Thread-22431] [transport.py] [_log()] client lang: <none>
2026-04-15T16:53:28.176 [DEBUG] [Thread-22431] [transport.py] [_log()] server lang: <none>
2026-04-15T16:53:28.176 [DEBUG] [Thread-22431] [transport.py] [_log()] kex follows: False
2026-04-15T16:53:28.177 [DEBUG] [Thread-22431] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:53:28.177 [DEBUG] [Thread-22431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:53:28.177 [DEBUG] [Thread-22431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:53:28.177 [DEBUG] [Thread-22431] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:53:28.177 [DEBUG] [Thread-22431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:53:28.177 [DEBUG] [Thread-22431] [transport.py] [_log()] Compression: none
2026-04-15T16:53:28.177 [DEBUG] [Thread-22431] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:53:28.234 [DEBUG] [Thread-22431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:53:28.235 [DEBUG] [Thread-22431] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:53:28.235 [DEBUG] [Thread-22431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:53:28.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:53:28.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:53:28.295 [DEBUG] [Thread-22431] [transport.py] [_log()] userauth is OK
2026-04-15T16:53:28.295 [DEBUG] [Thread-22431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:53:28.295 [DEBUG] [Thread-22431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:53:28.295 [DEBUG] [Thread-22431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:53:28.295 [DEBUG] [Thread-22431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:53:28.321 [INFO] [Thread-22431] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:53:28.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:53:28.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:53:28.551 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:29.187 [DEBUG] [Thread-22431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:53:29.187 [DEBUG] [Thread-22431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:53:29.235 [DEBUG] [Thread-22431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:53:29.235 [DEBUG] [Thread-22431] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:53:29.244 [DEBUG] [Thread-22431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:53:29.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:53:29.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')
2026-04-15T16:53:29.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
2026-04-15T16:53:29.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:53:29.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:53:29.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:53:29.279 [DEBUG] [Thread-22431] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:53:31.598 [DEBUG] [Thread-22433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:35.092 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:39.806 [DEBUG] [Thread-22434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:41.615 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:46.642 [DEBUG] [Thread-22435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:48.124 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:48.536 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:51.027 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:51.617 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:52.103 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:52.665 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:53.196 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:53.686 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:54.176 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:54.663 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:55.142 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:55.641 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:53:59.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:53:59.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:53:59.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
2026-04-15T16:54:00.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 53, 25), 8.58979, 55.8548, 0.0, 18.5098, 14.0881, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:54:00.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:53:25
2026-04-15T16:54:00.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:54:01.363 [DEBUG] [Thread-22436] [transport.py] [_log()] starting thread (client mode): 0xf1352860
2026-04-15T16:54:01.364 [DEBUG] [Thread-22436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:54:01.383 [DEBUG] [Thread-22436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:54:01.383 [INFO] [Thread-22436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:54:01.386 [DEBUG] [Thread-22436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:54:01.386 [DEBUG] [Thread-22436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:54:01.386 [DEBUG] [Thread-22436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:54:01.386 [DEBUG] [Thread-22436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:54:01.386 [DEBUG] [Thread-22436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:54:01.386 [DEBUG] [Thread-22436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:54:01.387 [DEBUG] [Thread-22436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:54:01.387 [DEBUG] [Thread-22436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:54:01.387 [DEBUG] [Thread-22436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:54:01.387 [DEBUG] [Thread-22436] [transport.py] [_log()] client lang: <none>
2026-04-15T16:54:01.387 [DEBUG] [Thread-22436] [transport.py] [_log()] server lang: <none>
2026-04-15T16:54:01.387 [DEBUG] [Thread-22436] [transport.py] [_log()] kex follows: False
2026-04-15T16:54:01.387 [DEBUG] [Thread-22436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:54:01.387 [DEBUG] [Thread-22436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:54:01.387 [DEBUG] [Thread-22436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:54:01.387 [DEBUG] [Thread-22436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:54:01.387 [DEBUG] [Thread-22436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:54:01.387 [DEBUG] [Thread-22436] [transport.py] [_log()] Compression: none
2026-04-15T16:54:01.387 [DEBUG] [Thread-22436] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:54:01.402 [DEBUG] [Thread-22436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:54:01.402 [DEBUG] [Thread-22436] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:54:01.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:54:01.403 [DEBUG] [Thread-22436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:54:01.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:54:01.404 [DEBUG] [Thread-22436] [transport.py] [_log()] userauth is OK
2026-04-15T16:54:01.404 [DEBUG] [Thread-22436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:54:01.404 [DEBUG] [Thread-22436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:54:01.404 [DEBUG] [Thread-22436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:54:01.404 [DEBUG] [Thread-22436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:54:01.423 [INFO] [Thread-22436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:54:01.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:54:01.671 [DEBUG] [Thread-22438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:54:02.182 [DEBUG] [Thread-22436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:54:02.183 [DEBUG] [Thread-22436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:54:02.183 [DEBUG] [Thread-22436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:54:02.224 [DEBUG] [Thread-22436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:54:02.224 [DEBUG] [Thread-22436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:54:02.226 [DEBUG] [Thread-22436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:54:02.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:54:02.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:54:02.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:54:02.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:54:02.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:54:02.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:54:02.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:54:02.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:54:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:54:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.620621 -999.00  +14.20  14.47     60   +6.70 1 1 1 1 1   887    0 4.99 -79.97 ----- 20.3 14.5 323.6 21.4 18.4 -26.4 17.9 -26.3 18.9 -22.9 19.6 -24.7
2026-04-15T16:54:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:54:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:54:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.620621
2026-04-15T16:54:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:54:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:54:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:54:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:54:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:54:02.241 [DEBUG] [Thread-22436] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:54:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:53:25', tmtdew=8.58979, humidity=55.8548, cloud=0.0, wind=18.5098, temperature=14.0881, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:53:41.654', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:54:02.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:54:02.452 [DEBUG] [Thread-22440] [transport.py] [_log()] starting thread (client mode): 0xee90ead0
2026-04-15T16:54:02.452 [DEBUG] [Thread-22440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:54:02.469 [DEBUG] [Thread-22440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:54:02.469 [INFO] [Thread-22440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:54:02.476 [DEBUG] [Thread-22440] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:54:02.476 [DEBUG] [Thread-22440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:54:02.476 [DEBUG] [Thread-22440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:54:02.476 [DEBUG] [Thread-22440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:54:02.476 [DEBUG] [Thread-22440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:54:02.476 [DEBUG] [Thread-22440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:54:02.476 [DEBUG] [Thread-22440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:54:02.476 [DEBUG] [Thread-22440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:54:02.476 [DEBUG] [Thread-22440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:54:02.476 [DEBUG] [Thread-22440] [transport.py] [_log()] client lang: <none>
2026-04-15T16:54:02.476 [DEBUG] [Thread-22440] [transport.py] [_log()] server lang: <none>
2026-04-15T16:54:02.476 [DEBUG] [Thread-22440] [transport.py] [_log()] kex follows: False
2026-04-15T16:54:02.477 [DEBUG] [Thread-22440] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:54:02.477 [DEBUG] [Thread-22440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:54:02.477 [DEBUG] [Thread-22440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:54:02.477 [DEBUG] [Thread-22440] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:54:02.477 [DEBUG] [Thread-22440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:54:02.477 [DEBUG] [Thread-22440] [transport.py] [_log()] Compression: none
2026-04-15T16:54:02.477 [DEBUG] [Thread-22440] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:54:02.534 [DEBUG] [Thread-22440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:54:02.535 [DEBUG] [Thread-22440] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:54:02.535 [DEBUG] [Thread-22440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:54:02.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:54:02.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:54:02.596 [DEBUG] [Thread-22440] [transport.py] [_log()] userauth is OK
2026-04-15T16:54:02.596 [DEBUG] [Thread-22440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:54:02.596 [DEBUG] [Thread-22440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:54:02.596 [DEBUG] [Thread-22440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:54:02.596 [DEBUG] [Thread-22440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:54:02.614 [INFO] [Thread-22440] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:54:02.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:54:02.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:54:03.471 [DEBUG] [Thread-22440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:54:03.471 [DEBUG] [Thread-22440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:54:03.519 [DEBUG] [Thread-22440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:54:03.519 [DEBUG] [Thread-22440] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:54:03.532 [DEBUG] [Thread-22440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:54:03.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:54:03.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')
2026-04-15T16:54:03.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
2026-04-15T16:54:03.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:54:03.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:54:03.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:54:03.567 [DEBUG] [Thread-22440] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:54:16.699 [DEBUG] [Thread-22442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:54:24.030 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:54:24.032 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:54:31.737 [DEBUG] [Thread-22443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:54:33.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:54:33.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:54:33.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T16:54:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 54), 8.82421, 55.358, 0.0, 15.7219, 14.2383, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:54:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:54:00
2026-04-15T16:54:35.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:54:35.670 [DEBUG] [Thread-22444] [transport.py] [_log()] starting thread (client mode): 0xf1352f50
2026-04-15T16:54:35.670 [DEBUG] [Thread-22444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:54:35.681 [DEBUG] [Thread-22444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:54:35.681 [INFO] [Thread-22444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:54:35.684 [DEBUG] [Thread-22444] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:54:35.684 [DEBUG] [Thread-22444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:54:35.684 [DEBUG] [Thread-22444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:54:35.684 [DEBUG] [Thread-22444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:54:35.684 [DEBUG] [Thread-22444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:54:35.684 [DEBUG] [Thread-22444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:54:35.684 [DEBUG] [Thread-22444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:54:35.684 [DEBUG] [Thread-22444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:54:35.684 [DEBUG] [Thread-22444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:54:35.684 [DEBUG] [Thread-22444] [transport.py] [_log()] client lang: <none>
2026-04-15T16:54:35.684 [DEBUG] [Thread-22444] [transport.py] [_log()] server lang: <none>
2026-04-15T16:54:35.684 [DEBUG] [Thread-22444] [transport.py] [_log()] kex follows: False
2026-04-15T16:54:35.685 [DEBUG] [Thread-22444] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:54:35.685 [DEBUG] [Thread-22444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:54:35.685 [DEBUG] [Thread-22444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:54:35.685 [DEBUG] [Thread-22444] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:54:35.685 [DEBUG] [Thread-22444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:54:35.685 [DEBUG] [Thread-22444] [transport.py] [_log()] Compression: none
2026-04-15T16:54:35.685 [DEBUG] [Thread-22444] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:54:35.700 [DEBUG] [Thread-22444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:54:35.701 [DEBUG] [Thread-22444] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:54:35.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:54:35.701 [DEBUG] [Thread-22444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:54:35.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:54:35.702 [DEBUG] [Thread-22444] [transport.py] [_log()] userauth is OK
2026-04-15T16:54:35.702 [DEBUG] [Thread-22444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:54:35.702 [DEBUG] [Thread-22444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:54:35.702 [DEBUG] [Thread-22444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:54:35.702 [DEBUG] [Thread-22444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:54:35.721 [INFO] [Thread-22444] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:54:35.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:54:36.521 [DEBUG] [Thread-22444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:54:36.521 [DEBUG] [Thread-22444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:54:36.521 [DEBUG] [Thread-22444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:54:36.562 [DEBUG] [Thread-22444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:54:36.562 [DEBUG] [Thread-22444] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:54:36.565 [DEBUG] [Thread-22444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:54:36.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:54:36.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:54:36.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:54:36.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:54:36.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:54:36.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:54:36.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:54:36.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:54:36.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:54:36.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.620969 -999.00  +14.00   7.95     60   +6.40 1 1 1 1 1   887    0 5.12 -73.01 ----- 13.6 8.0 22.1 22.5 18.4 -27.1 17.8 -26.5 18.9 -23.6 19.5 -25.6
2026-04-15T16:54:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:54:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:54:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.620969
2026-04-15T16:54:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:54:36.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:54:36.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:54:36.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:54:36.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:54:36.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:54:00', tmtdew=8.82421, humidity=55.358, cloud=0.0, wind=15.7219, temperature=14.2383, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:54:11.722', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:54:36.588 [DEBUG] [Thread-22444] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:54:36.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:54:36.843 [DEBUG] [Thread-22447] [transport.py] [_log()] starting thread (client mode): 0xf1352c20
2026-04-15T16:54:36.843 [DEBUG] [Thread-22447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:54:36.857 [DEBUG] [Thread-22447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:54:36.857 [INFO] [Thread-22447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:54:36.865 [DEBUG] [Thread-22447] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:54:36.865 [DEBUG] [Thread-22447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:54:36.865 [DEBUG] [Thread-22447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:54:36.865 [DEBUG] [Thread-22447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:54:36.865 [DEBUG] [Thread-22447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:54:36.865 [DEBUG] [Thread-22447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:54:36.865 [DEBUG] [Thread-22447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:54:36.865 [DEBUG] [Thread-22447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:54:36.865 [DEBUG] [Thread-22447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:54:36.865 [DEBUG] [Thread-22447] [transport.py] [_log()] client lang: <none>
2026-04-15T16:54:36.866 [DEBUG] [Thread-22447] [transport.py] [_log()] server lang: <none>
2026-04-15T16:54:36.866 [DEBUG] [Thread-22447] [transport.py] [_log()] kex follows: False
2026-04-15T16:54:36.866 [DEBUG] [Thread-22447] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:54:36.866 [DEBUG] [Thread-22447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:54:36.866 [DEBUG] [Thread-22447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:54:36.866 [DEBUG] [Thread-22447] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:54:36.866 [DEBUG] [Thread-22447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:54:36.866 [DEBUG] [Thread-22447] [transport.py] [_log()] Compression: none
2026-04-15T16:54:36.866 [DEBUG] [Thread-22447] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:54:36.924 [DEBUG] [Thread-22447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:54:36.924 [DEBUG] [Thread-22447] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:54:36.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:54:36.925 [DEBUG] [Thread-22447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:54:36.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:54:36.981 [DEBUG] [Thread-22447] [transport.py] [_log()] userauth is OK
2026-04-15T16:54:36.981 [DEBUG] [Thread-22447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:54:36.981 [DEBUG] [Thread-22447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:54:36.981 [DEBUG] [Thread-22447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:54:36.981 [DEBUG] [Thread-22447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:54:37.007 [INFO] [Thread-22447] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:54:37.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:54:37.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:54:37.841 [DEBUG] [Thread-22447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:54:37.841 [DEBUG] [Thread-22447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:54:37.889 [DEBUG] [Thread-22447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:54:37.889 [DEBUG] [Thread-22447] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:54:37.898 [DEBUG] [Thread-22447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:54:37.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:54:37.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')
2026-04-15T16:54:37.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') -> 00000000
2026-04-15T16:54:37.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:54:37.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:54:37.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:54:37.933 [DEBUG] [Thread-22447] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:54:39.898 [DEBUG] [Thread-22449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:54:46.768 [DEBUG] [Thread-22450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:55:01.812 [DEBUG] [Thread-22451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:55:07.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:55:07.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:55:07.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
2026-04-15T16:55:09.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 54, 36), 9.34932, 53.5113, 0.0, 17.2555, 15.0088, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:55:09.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:54:36
2026-04-15T16:55:09.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:55:10.100 [DEBUG] [Thread-22452] [transport.py] [_log()] starting thread (client mode): 0xf1353b50
2026-04-15T16:55:10.101 [DEBUG] [Thread-22452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:55:10.123 [DEBUG] [Thread-22452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:55:10.123 [INFO] [Thread-22452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:55:10.126 [DEBUG] [Thread-22452] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:55:10.126 [DEBUG] [Thread-22452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:55:10.126 [DEBUG] [Thread-22452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:55:10.126 [DEBUG] [Thread-22452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:55:10.126 [DEBUG] [Thread-22452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:55:10.127 [DEBUG] [Thread-22452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:55:10.127 [DEBUG] [Thread-22452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:55:10.127 [DEBUG] [Thread-22452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:55:10.127 [DEBUG] [Thread-22452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:55:10.127 [DEBUG] [Thread-22452] [transport.py] [_log()] client lang: <none>
2026-04-15T16:55:10.127 [DEBUG] [Thread-22452] [transport.py] [_log()] server lang: <none>
2026-04-15T16:55:10.127 [DEBUG] [Thread-22452] [transport.py] [_log()] kex follows: False
2026-04-15T16:55:10.127 [DEBUG] [Thread-22452] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:55:10.127 [DEBUG] [Thread-22452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:55:10.127 [DEBUG] [Thread-22452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:55:10.127 [DEBUG] [Thread-22452] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:55:10.128 [DEBUG] [Thread-22452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:55:10.128 [DEBUG] [Thread-22452] [transport.py] [_log()] Compression: none
2026-04-15T16:55:10.128 [DEBUG] [Thread-22452] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:55:10.144 [DEBUG] [Thread-22452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:55:10.145 [DEBUG] [Thread-22452] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:55:10.145 [DEBUG] [Thread-22452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:55:10.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:55:10.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:55:10.146 [DEBUG] [Thread-22452] [transport.py] [_log()] userauth is OK
2026-04-15T16:55:10.147 [DEBUG] [Thread-22452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:55:10.147 [DEBUG] [Thread-22452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:55:10.147 [DEBUG] [Thread-22452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:55:10.147 [DEBUG] [Thread-22452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:55:10.171 [INFO] [Thread-22452] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:55:10.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:55:12.942 [DEBUG] [Thread-22452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:55:12.942 [DEBUG] [Thread-22452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:55:12.943 [DEBUG] [Thread-22452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:55:12.983 [DEBUG] [Thread-22452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:55:12.983 [DEBUG] [Thread-22452] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:55:12.986 [DEBUG] [Thread-22452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:55:12.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:55:12.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:55:12.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:55:13.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:55:13.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:55:13.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:55:13.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:55:13.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:55:13.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:55:13.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.621316 -999.00  +13.80  13.05     60   +6.40 1 1 1 1 1   887    0 5.33 -65.94 ----- 14.1 13.1 325.2 17.2 18.3 -27.2 17.8 -26.2 18.9 -23.5 19.5 -25.4
2026-04-15T16:55:13.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:55:13.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:55:13.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.621316
2026-04-15T16:55:13.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:55:13.009 [DEBUG] [Thread-22452] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:55:13.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:55:13.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:55:13.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:55:13.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:55:13.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:54:36', tmtdew=9.34932, humidity=53.5113, cloud=0.0, wind=17.2555, temperature=15.0088, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:54:41.702', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:55:13.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:55:13.266 [DEBUG] [Thread-22455] [transport.py] [_log()] starting thread (client mode): 0xf13fc670
2026-04-15T16:55:13.266 [DEBUG] [Thread-22455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:55:13.280 [DEBUG] [Thread-22455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:55:13.280 [INFO] [Thread-22455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:55:13.287 [DEBUG] [Thread-22455] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:55:13.288 [DEBUG] [Thread-22455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:55:13.288 [DEBUG] [Thread-22455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:55:13.288 [DEBUG] [Thread-22455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:55:13.288 [DEBUG] [Thread-22455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:55:13.288 [DEBUG] [Thread-22455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:55:13.288 [DEBUG] [Thread-22455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:55:13.288 [DEBUG] [Thread-22455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:55:13.288 [DEBUG] [Thread-22455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:55:13.288 [DEBUG] [Thread-22455] [transport.py] [_log()] client lang: <none>
2026-04-15T16:55:13.288 [DEBUG] [Thread-22455] [transport.py] [_log()] server lang: <none>
2026-04-15T16:55:13.288 [DEBUG] [Thread-22455] [transport.py] [_log()] kex follows: False
2026-04-15T16:55:13.289 [DEBUG] [Thread-22455] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:55:13.289 [DEBUG] [Thread-22455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:55:13.289 [DEBUG] [Thread-22455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:55:13.289 [DEBUG] [Thread-22455] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:55:13.289 [DEBUG] [Thread-22455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:55:13.289 [DEBUG] [Thread-22455] [transport.py] [_log()] Compression: none
2026-04-15T16:55:13.289 [DEBUG] [Thread-22455] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:55:13.344 [DEBUG] [Thread-22455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:55:13.345 [DEBUG] [Thread-22455] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:55:13.345 [DEBUG] [Thread-22455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:55:13.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:55:13.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:55:13.400 [DEBUG] [Thread-22455] [transport.py] [_log()] userauth is OK
2026-04-15T16:55:13.400 [DEBUG] [Thread-22455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:55:13.400 [DEBUG] [Thread-22455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:55:13.400 [DEBUG] [Thread-22455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:55:13.400 [DEBUG] [Thread-22455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:55:13.423 [INFO] [Thread-22455] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:55:13.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:55:13.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:55:14.256 [DEBUG] [Thread-22455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:55:14.256 [DEBUG] [Thread-22455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:55:14.304 [DEBUG] [Thread-22455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:55:14.304 [DEBUG] [Thread-22455] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:55:14.313 [DEBUG] [Thread-22455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:55:14.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:55:14.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')
2026-04-15T16:55:14.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
2026-04-15T16:55:14.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:55:14.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:55:14.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:55:14.351 [DEBUG] [Thread-22455] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:55:16.841 [DEBUG] [Thread-22457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:55:24.171 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:55:24.173 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:55:31.883 [DEBUG] [Thread-22458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:55:39.974 [DEBUG] [Thread-22459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:55:44.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:55:44.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:55:44.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
2026-04-15T16:55:45.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 55, 11), 9.16754, 53.8912, 0.0, 15.9336, 14.2716, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:55:45.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:55:11
2026-04-15T16:55:46.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:55:46.567 [DEBUG] [Thread-22460] [transport.py] [_log()] starting thread (client mode): 0xf1351270
2026-04-15T16:55:46.568 [DEBUG] [Thread-22460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:55:46.588 [DEBUG] [Thread-22460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:55:46.588 [INFO] [Thread-22460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:55:46.591 [DEBUG] [Thread-22460] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:55:46.591 [DEBUG] [Thread-22460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:55:46.591 [DEBUG] [Thread-22460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:55:46.592 [DEBUG] [Thread-22460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:55:46.592 [DEBUG] [Thread-22460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:55:46.592 [DEBUG] [Thread-22460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:55:46.592 [DEBUG] [Thread-22460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:55:46.592 [DEBUG] [Thread-22460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:55:46.592 [DEBUG] [Thread-22460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:55:46.592 [DEBUG] [Thread-22460] [transport.py] [_log()] client lang: <none>
2026-04-15T16:55:46.592 [DEBUG] [Thread-22460] [transport.py] [_log()] server lang: <none>
2026-04-15T16:55:46.592 [DEBUG] [Thread-22460] [transport.py] [_log()] kex follows: False
2026-04-15T16:55:46.592 [DEBUG] [Thread-22460] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:55:46.592 [DEBUG] [Thread-22460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:55:46.592 [DEBUG] [Thread-22460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:55:46.593 [DEBUG] [Thread-22460] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:55:46.593 [DEBUG] [Thread-22460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:55:46.593 [DEBUG] [Thread-22460] [transport.py] [_log()] Compression: none
2026-04-15T16:55:46.593 [DEBUG] [Thread-22460] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:55:46.609 [DEBUG] [Thread-22460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:55:46.609 [DEBUG] [Thread-22460] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:55:46.610 [DEBUG] [Thread-22460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:55:46.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:55:46.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:55:46.611 [DEBUG] [Thread-22460] [transport.py] [_log()] userauth is OK
2026-04-15T16:55:46.611 [DEBUG] [Thread-22460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:55:46.611 [DEBUG] [Thread-22460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:55:46.611 [DEBUG] [Thread-22460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:55:46.611 [DEBUG] [Thread-22460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:55:46.635 [INFO] [Thread-22460] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:55:46.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:55:46.913 [DEBUG] [Thread-22462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:55:47.382 [DEBUG] [Thread-22460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:55:47.383 [DEBUG] [Thread-22460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:55:47.383 [DEBUG] [Thread-22460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:55:47.423 [DEBUG] [Thread-22460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:55:47.423 [DEBUG] [Thread-22460] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:55:47.426 [DEBUG] [Thread-22460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:55:47.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:55:47.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:55:47.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:55:47.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:55:47.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:55:47.449 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:55:47.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:55:47.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:55:47.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:55:47.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.621663 -999.00  +13.90  16.39     60   +6.50 1 1 1 1 1   887    0 5.49 -59.58 ----- 17.4 16.4 335.4 19.4 18.2 -27.7 17.8 -26.6 18.7 -24.6 19.4 -27.1
2026-04-15T16:55:47.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:55:47.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:55:47.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.621663
2026-04-15T16:55:47.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:55:47.452 [DEBUG] [Thread-22460] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:55:47.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:55:47.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:55:47.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:55:47.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:55:47.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:55:11', tmtdew=9.16754, humidity=53.8912, cloud=0.0, wind=15.9336, temperature=14.2716, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:55:11.683', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:55:47.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:55:47.692 [DEBUG] [Thread-22464] [transport.py] [_log()] starting thread (client mode): 0xee9be890
2026-04-15T16:55:47.692 [DEBUG] [Thread-22464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:55:47.708 [DEBUG] [Thread-22464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:55:47.708 [INFO] [Thread-22464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:55:47.716 [DEBUG] [Thread-22464] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:55:47.716 [DEBUG] [Thread-22464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:55:47.716 [DEBUG] [Thread-22464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:55:47.716 [DEBUG] [Thread-22464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:55:47.716 [DEBUG] [Thread-22464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:55:47.716 [DEBUG] [Thread-22464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:55:47.716 [DEBUG] [Thread-22464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:55:47.716 [DEBUG] [Thread-22464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:55:47.716 [DEBUG] [Thread-22464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:55:47.717 [DEBUG] [Thread-22464] [transport.py] [_log()] client lang: <none>
2026-04-15T16:55:47.717 [DEBUG] [Thread-22464] [transport.py] [_log()] server lang: <none>
2026-04-15T16:55:47.717 [DEBUG] [Thread-22464] [transport.py] [_log()] kex follows: False
2026-04-15T16:55:47.717 [DEBUG] [Thread-22464] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:55:47.717 [DEBUG] [Thread-22464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:55:47.717 [DEBUG] [Thread-22464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:55:47.717 [DEBUG] [Thread-22464] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:55:47.717 [DEBUG] [Thread-22464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:55:47.717 [DEBUG] [Thread-22464] [transport.py] [_log()] Compression: none
2026-04-15T16:55:47.717 [DEBUG] [Thread-22464] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:55:47.776 [DEBUG] [Thread-22464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:55:47.777 [DEBUG] [Thread-22464] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:55:47.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:55:47.777 [DEBUG] [Thread-22464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:55:47.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:55:47.836 [DEBUG] [Thread-22464] [transport.py] [_log()] userauth is OK
2026-04-15T16:55:47.836 [DEBUG] [Thread-22464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:55:47.837 [DEBUG] [Thread-22464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:55:47.837 [DEBUG] [Thread-22464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:55:47.837 [DEBUG] [Thread-22464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:55:47.862 [INFO] [Thread-22464] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:55:47.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:55:47.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:55:48.737 [DEBUG] [Thread-22464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:55:48.737 [DEBUG] [Thread-22464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:55:48.785 [DEBUG] [Thread-22464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:55:48.785 [DEBUG] [Thread-22464] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:55:48.794 [DEBUG] [Thread-22464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:55:48.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:55:48.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')
2026-04-15T16:55:48.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') -> 00000000
2026-04-15T16:55:48.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:55:48.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:55:48.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:55:48.829 [DEBUG] [Thread-22464] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:56:01.943 [DEBUG] [Thread-22466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:56:16.987 [DEBUG] [Thread-22467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:56:18.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:56:18.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:56:18.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
2026-04-15T16:56:19.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 55, 47), 9.39827, 53.3127, 0.0, 21.7361, 14.9428, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:56:19.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:55:47
2026-04-15T16:56:20.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:56:20.863 [DEBUG] [Thread-22468] [transport.py] [_log()] starting thread (client mode): 0xee90e680
2026-04-15T16:56:20.864 [DEBUG] [Thread-22468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:56:20.883 [DEBUG] [Thread-22468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:56:20.883 [INFO] [Thread-22468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:56:20.886 [DEBUG] [Thread-22468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:56:20.886 [DEBUG] [Thread-22468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:56:20.886 [DEBUG] [Thread-22468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:56:20.886 [DEBUG] [Thread-22468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:56:20.886 [DEBUG] [Thread-22468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:56:20.886 [DEBUG] [Thread-22468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:56:20.886 [DEBUG] [Thread-22468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:56:20.886 [DEBUG] [Thread-22468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:56:20.887 [DEBUG] [Thread-22468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:56:20.887 [DEBUG] [Thread-22468] [transport.py] [_log()] client lang: <none>
2026-04-15T16:56:20.887 [DEBUG] [Thread-22468] [transport.py] [_log()] server lang: <none>
2026-04-15T16:56:20.887 [DEBUG] [Thread-22468] [transport.py] [_log()] kex follows: False
2026-04-15T16:56:20.887 [DEBUG] [Thread-22468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:56:20.887 [DEBUG] [Thread-22468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:56:20.887 [DEBUG] [Thread-22468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:56:20.887 [DEBUG] [Thread-22468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:56:20.887 [DEBUG] [Thread-22468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:56:20.887 [DEBUG] [Thread-22468] [transport.py] [_log()] Compression: none
2026-04-15T16:56:20.887 [DEBUG] [Thread-22468] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:56:20.905 [DEBUG] [Thread-22468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:56:20.906 [DEBUG] [Thread-22468] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:56:20.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:56:20.906 [DEBUG] [Thread-22468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:56:20.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:56:20.907 [DEBUG] [Thread-22468] [transport.py] [_log()] userauth is OK
2026-04-15T16:56:20.908 [DEBUG] [Thread-22468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:56:20.908 [DEBUG] [Thread-22468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:56:20.908 [DEBUG] [Thread-22468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:56:20.908 [DEBUG] [Thread-22468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:56:20.934 [INFO] [Thread-22468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:56:20.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:56:21.736 [DEBUG] [Thread-22468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:56:21.737 [DEBUG] [Thread-22468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:56:21.737 [DEBUG] [Thread-22468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:56:21.777 [DEBUG] [Thread-22468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:56:21.777 [DEBUG] [Thread-22468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:56:21.780 [DEBUG] [Thread-22468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:56:21.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:56:21.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:56:21.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:56:21.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:56:21.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:56:21.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:56:21.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:56:21.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:56:21.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:56:21.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.622010 -999.00  +13.90  11.48     61   +6.50 1 1 1 1 1   887    0 5.70 -54.26 ----- 15.6 11.5 338.8 20.0 18.2 -27.4 17.7 -27.2 18.8 -23.9 19.4 -26.1
2026-04-15T16:56:21.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:56:21.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:56:21.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.622010
2026-04-15T16:56:21.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:56:21.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:56:21.808 [DEBUG] [Thread-22468] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:56:21.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:56:21.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:56:21.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:56:21.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:55:47', tmtdew=9.39827, humidity=53.3127, cloud=0.0, wind=21.7361, temperature=14.9428, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:55:41.664', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:56:22.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:56:22.065 [DEBUG] [Thread-22471] [transport.py] [_log()] starting thread (client mode): 0xf1351d20
2026-04-15T16:56:22.066 [DEBUG] [Thread-22471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:56:22.079 [DEBUG] [Thread-22471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:56:22.080 [INFO] [Thread-22471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:56:22.087 [DEBUG] [Thread-22471] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:56:22.087 [DEBUG] [Thread-22471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:56:22.087 [DEBUG] [Thread-22471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:56:22.087 [DEBUG] [Thread-22471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:56:22.087 [DEBUG] [Thread-22471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:56:22.087 [DEBUG] [Thread-22471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:56:22.087 [DEBUG] [Thread-22471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:56:22.087 [DEBUG] [Thread-22471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:56:22.088 [DEBUG] [Thread-22471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:56:22.088 [DEBUG] [Thread-22471] [transport.py] [_log()] client lang: <none>
2026-04-15T16:56:22.088 [DEBUG] [Thread-22471] [transport.py] [_log()] server lang: <none>
2026-04-15T16:56:22.088 [DEBUG] [Thread-22471] [transport.py] [_log()] kex follows: False
2026-04-15T16:56:22.088 [DEBUG] [Thread-22471] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:56:22.088 [DEBUG] [Thread-22471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:56:22.088 [DEBUG] [Thread-22471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:56:22.088 [DEBUG] [Thread-22471] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:56:22.088 [DEBUG] [Thread-22471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:56:22.088 [DEBUG] [Thread-22471] [transport.py] [_log()] Compression: none
2026-04-15T16:56:22.088 [DEBUG] [Thread-22471] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:56:22.144 [DEBUG] [Thread-22471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:56:22.145 [DEBUG] [Thread-22471] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:56:22.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:56:22.145 [DEBUG] [Thread-22471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:56:22.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:56:22.202 [DEBUG] [Thread-22471] [transport.py] [_log()] userauth is OK
2026-04-15T16:56:22.202 [DEBUG] [Thread-22471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:56:22.202 [DEBUG] [Thread-22471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:56:22.203 [DEBUG] [Thread-22471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:56:22.203 [DEBUG] [Thread-22471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:56:22.228 [INFO] [Thread-22471] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:56:22.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:56:22.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:56:23.019 [DEBUG] [Thread-22471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:56:23.019 [DEBUG] [Thread-22471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:56:23.067 [DEBUG] [Thread-22471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:56:23.067 [DEBUG] [Thread-22471] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:56:23.076 [DEBUG] [Thread-22471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:56:23.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:56:23.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')
2026-04-15T16:56:23.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
2026-04-15T16:56:23.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:56:23.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:56:23.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:56:23.111 [DEBUG] [Thread-22471] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:56:24.313 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:56:24.315 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:56:32.018 [DEBUG] [Thread-22473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:56:40.067 [DEBUG] [Thread-22474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:56:47.063 [DEBUG] [Thread-22475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:56:53.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:56:53.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:56:53.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
2026-04-15T16:56:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 56, 22), 9.14617, 53.9741, 0.0, 16.8332, 14.1883, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:56:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:56:22
2026-04-15T16:56:54.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:56:55.282 [DEBUG] [Thread-22476] [transport.py] [_log()] starting thread (client mode): 0xf1334a90
2026-04-15T16:56:55.282 [DEBUG] [Thread-22476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:56:55.295 [DEBUG] [Thread-22476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:56:55.295 [INFO] [Thread-22476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:56:55.297 [DEBUG] [Thread-22476] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:56:55.297 [DEBUG] [Thread-22476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:56:55.297 [DEBUG] [Thread-22476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:56:55.297 [DEBUG] [Thread-22476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:56:55.298 [DEBUG] [Thread-22476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:56:55.298 [DEBUG] [Thread-22476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:56:55.298 [DEBUG] [Thread-22476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:56:55.298 [DEBUG] [Thread-22476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:56:55.298 [DEBUG] [Thread-22476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:56:55.298 [DEBUG] [Thread-22476] [transport.py] [_log()] client lang: <none>
2026-04-15T16:56:55.298 [DEBUG] [Thread-22476] [transport.py] [_log()] server lang: <none>
2026-04-15T16:56:55.298 [DEBUG] [Thread-22476] [transport.py] [_log()] kex follows: False
2026-04-15T16:56:55.298 [DEBUG] [Thread-22476] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:56:55.298 [DEBUG] [Thread-22476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:56:55.298 [DEBUG] [Thread-22476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:56:55.298 [DEBUG] [Thread-22476] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:56:55.298 [DEBUG] [Thread-22476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:56:55.298 [DEBUG] [Thread-22476] [transport.py] [_log()] Compression: none
2026-04-15T16:56:55.298 [DEBUG] [Thread-22476] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:56:55.313 [DEBUG] [Thread-22476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:56:55.314 [DEBUG] [Thread-22476] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:56:55.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:56:55.314 [DEBUG] [Thread-22476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:56:55.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:56:55.315 [DEBUG] [Thread-22476] [transport.py] [_log()] userauth is OK
2026-04-15T16:56:55.315 [DEBUG] [Thread-22476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:56:55.315 [DEBUG] [Thread-22476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:56:55.315 [DEBUG] [Thread-22476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:56:55.315 [DEBUG] [Thread-22476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:56:55.328 [INFO] [Thread-22476] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:56:55.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:56:56.131 [DEBUG] [Thread-22476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:56:56.131 [DEBUG] [Thread-22476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:56:56.132 [DEBUG] [Thread-22476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:56:56.172 [DEBUG] [Thread-22476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:56:56.172 [DEBUG] [Thread-22476] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:56:56.175 [DEBUG] [Thread-22476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:56:56.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:56:56.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:56:56.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:56:56.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:56:56.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:56:56.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:56:56.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:56:56.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:56:56.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:56:56.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.622357 -999.00  +13.80   8.42     61   +6.50 1 1 1 1 1   887    0 5.83 -50.64 ----- 8.7 8.4 349.2 18.7 18.1 -28.4 17.7 -26.8 18.5 -25.1 19.1 -27.4
2026-04-15T16:56:56.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:56:56.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:56:56.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.622357
2026-04-15T16:56:56.196 [DEBUG] [Thread-22476] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:56:56.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:56:56.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:56:56.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:56:56.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:56:56.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:56:56.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:56:22', tmtdew=9.14617, humidity=53.9741, cloud=0.0, wind=16.8332, temperature=14.1883, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:56:11.645', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:56:56.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:56:56.432 [DEBUG] [Thread-22479] [transport.py] [_log()] starting thread (client mode): 0xf13fe0e0
2026-04-15T16:56:56.433 [DEBUG] [Thread-22479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:56:56.446 [DEBUG] [Thread-22479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:56:56.447 [INFO] [Thread-22479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:56:56.455 [DEBUG] [Thread-22479] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:56:56.455 [DEBUG] [Thread-22479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:56:56.455 [DEBUG] [Thread-22479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:56:56.455 [DEBUG] [Thread-22479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:56:56.456 [DEBUG] [Thread-22479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:56:56.456 [DEBUG] [Thread-22479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:56:56.456 [DEBUG] [Thread-22479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:56:56.456 [DEBUG] [Thread-22479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:56:56.456 [DEBUG] [Thread-22479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:56:56.456 [DEBUG] [Thread-22479] [transport.py] [_log()] client lang: <none>
2026-04-15T16:56:56.456 [DEBUG] [Thread-22479] [transport.py] [_log()] server lang: <none>
2026-04-15T16:56:56.456 [DEBUG] [Thread-22479] [transport.py] [_log()] kex follows: False
2026-04-15T16:56:56.456 [DEBUG] [Thread-22479] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:56:56.456 [DEBUG] [Thread-22479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:56:56.456 [DEBUG] [Thread-22479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:56:56.456 [DEBUG] [Thread-22479] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:56:56.456 [DEBUG] [Thread-22479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:56:56.457 [DEBUG] [Thread-22479] [transport.py] [_log()] Compression: none
2026-04-15T16:56:56.457 [DEBUG] [Thread-22479] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:56:56.513 [DEBUG] [Thread-22479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:56:56.513 [DEBUG] [Thread-22479] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:56:56.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:56:56.514 [DEBUG] [Thread-22479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:56:56.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:56:56.570 [DEBUG] [Thread-22479] [transport.py] [_log()] userauth is OK
2026-04-15T16:56:56.570 [DEBUG] [Thread-22479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:56:56.570 [DEBUG] [Thread-22479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:56:56.571 [DEBUG] [Thread-22479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:56:56.571 [DEBUG] [Thread-22479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:56:56.596 [INFO] [Thread-22479] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:56:56.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:56:56.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:56:57.421 [DEBUG] [Thread-22479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:56:57.421 [DEBUG] [Thread-22479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:56:57.469 [DEBUG] [Thread-22479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:56:57.469 [DEBUG] [Thread-22479] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:56:57.478 [DEBUG] [Thread-22479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:56:57.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:56:57.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')
2026-04-15T16:56:57.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
2026-04-15T16:56:57.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:56:57.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:56:57.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:56:57.514 [DEBUG] [Thread-22479] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:57:02.094 [DEBUG] [Thread-22481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:57:17.136 [DEBUG] [Thread-22482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:57:24.459 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:57:24.460 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:57:27.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:57:27.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:57:27.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T16:57:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 56, 58), 8.95517, 54.789, 0.0, 18.4032, 14.0055, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:57:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:56:58
2026-04-15T16:57:29.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:57:29.702 [DEBUG] [Thread-22483] [transport.py] [_log()] starting thread (client mode): 0xf13fc6a0
2026-04-15T16:57:29.703 [DEBUG] [Thread-22483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:57:29.723 [DEBUG] [Thread-22483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:57:29.723 [INFO] [Thread-22483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:57:29.726 [DEBUG] [Thread-22483] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:57:29.726 [DEBUG] [Thread-22483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:57:29.726 [DEBUG] [Thread-22483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:57:29.726 [DEBUG] [Thread-22483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:57:29.726 [DEBUG] [Thread-22483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:57:29.726 [DEBUG] [Thread-22483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:57:29.726 [DEBUG] [Thread-22483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:57:29.726 [DEBUG] [Thread-22483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:57:29.726 [DEBUG] [Thread-22483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:57:29.726 [DEBUG] [Thread-22483] [transport.py] [_log()] client lang: <none>
2026-04-15T16:57:29.726 [DEBUG] [Thread-22483] [transport.py] [_log()] server lang: <none>
2026-04-15T16:57:29.726 [DEBUG] [Thread-22483] [transport.py] [_log()] kex follows: False
2026-04-15T16:57:29.727 [DEBUG] [Thread-22483] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:57:29.727 [DEBUG] [Thread-22483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:57:29.727 [DEBUG] [Thread-22483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:57:29.727 [DEBUG] [Thread-22483] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:57:29.727 [DEBUG] [Thread-22483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:57:29.727 [DEBUG] [Thread-22483] [transport.py] [_log()] Compression: none
2026-04-15T16:57:29.727 [DEBUG] [Thread-22483] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:57:29.744 [DEBUG] [Thread-22483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:57:29.744 [DEBUG] [Thread-22483] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:57:29.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:57:29.745 [DEBUG] [Thread-22483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:57:29.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:57:29.746 [DEBUG] [Thread-22483] [transport.py] [_log()] userauth is OK
2026-04-15T16:57:29.746 [DEBUG] [Thread-22483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:57:29.746 [DEBUG] [Thread-22483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:57:29.746 [DEBUG] [Thread-22483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:57:29.746 [DEBUG] [Thread-22483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:57:29.780 [INFO] [Thread-22483] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:57:29.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:57:30.562 [DEBUG] [Thread-22483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:57:30.562 [DEBUG] [Thread-22483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:57:30.563 [DEBUG] [Thread-22483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:57:30.603 [DEBUG] [Thread-22483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:57:30.603 [DEBUG] [Thread-22483] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:57:30.606 [DEBUG] [Thread-22483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:57:30.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:57:30.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:57:30.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:57:30.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:57:30.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:57:30.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:57:30.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:57:30.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:57:30.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:57:30.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.622705 -999.00  +13.80   7.60     61   +6.40 1 1 1 1 1   887    0 5.97 -47.52 ----- 8.4 7.6 341.4 13.3 18.0 -28.5 17.8 -26.4 18.5 -25.3 19.0 -27.6
2026-04-15T16:57:30.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:57:30.628 [DEBUG] [Thread-22483] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:57:30.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:57:30.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.622705
2026-04-15T16:57:30.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:57:30.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:57:30.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:57:30.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:57:30.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:57:30.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:56:58', tmtdew=8.95517, humidity=54.789, cloud=0.0, wind=18.4032, temperature=14.0055, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:56:41.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:57:30.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:57:30.893 [DEBUG] [Thread-22486] [transport.py] [_log()] starting thread (client mode): 0xf1336890
2026-04-15T16:57:30.893 [DEBUG] [Thread-22486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:57:30.907 [DEBUG] [Thread-22486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:57:30.907 [INFO] [Thread-22486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:57:30.914 [DEBUG] [Thread-22486] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:57:30.914 [DEBUG] [Thread-22486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:57:30.914 [DEBUG] [Thread-22486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:57:30.915 [DEBUG] [Thread-22486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:57:30.915 [DEBUG] [Thread-22486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:57:30.915 [DEBUG] [Thread-22486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:57:30.915 [DEBUG] [Thread-22486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:57:30.915 [DEBUG] [Thread-22486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:57:30.915 [DEBUG] [Thread-22486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:57:30.915 [DEBUG] [Thread-22486] [transport.py] [_log()] client lang: <none>
2026-04-15T16:57:30.915 [DEBUG] [Thread-22486] [transport.py] [_log()] server lang: <none>
2026-04-15T16:57:30.915 [DEBUG] [Thread-22486] [transport.py] [_log()] kex follows: False
2026-04-15T16:57:30.915 [DEBUG] [Thread-22486] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:57:30.915 [DEBUG] [Thread-22486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:57:30.916 [DEBUG] [Thread-22486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:57:30.916 [DEBUG] [Thread-22486] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:57:30.916 [DEBUG] [Thread-22486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:57:30.916 [DEBUG] [Thread-22486] [transport.py] [_log()] Compression: none
2026-04-15T16:57:30.916 [DEBUG] [Thread-22486] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:57:30.974 [DEBUG] [Thread-22486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:57:30.974 [DEBUG] [Thread-22486] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:57:30.975 [DEBUG] [Thread-22486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:57:30.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:57:30.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:57:31.030 [DEBUG] [Thread-22486] [transport.py] [_log()] userauth is OK
2026-04-15T16:57:31.030 [DEBUG] [Thread-22486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:57:31.030 [DEBUG] [Thread-22486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:57:31.030 [DEBUG] [Thread-22486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:57:31.030 [DEBUG] [Thread-22486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:57:31.055 [INFO] [Thread-22486] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:57:31.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:57:31.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:57:31.885 [DEBUG] [Thread-22486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:57:31.885 [DEBUG] [Thread-22486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:57:31.933 [DEBUG] [Thread-22486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:57:31.933 [DEBUG] [Thread-22486] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:57:31.944 [DEBUG] [Thread-22486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:57:31.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:57:31.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')
2026-04-15T16:57:31.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
2026-04-15T16:57:31.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:57:31.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:57:31.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:57:31.982 [DEBUG] [Thread-22486] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:57:32.166 [DEBUG] [Thread-22488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:57:40.193 [DEBUG] [Thread-22489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:57:47.209 [DEBUG] [Thread-22490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:58:02.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:58:02.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:58:02.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
2026-04-15T16:58:02.243 [DEBUG] [Thread-22491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:58:03.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 57, 33), 9.17733, 54.075, 0.0, 16.7969, 14.711, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:58:03.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:57:33
2026-04-15T16:58:03.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:58:04.130 [DEBUG] [Thread-22492] [transport.py] [_log()] starting thread (client mode): 0xf1337580
2026-04-15T16:58:04.130 [DEBUG] [Thread-22492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:58:04.150 [DEBUG] [Thread-22492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:58:04.150 [INFO] [Thread-22492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:58:04.153 [DEBUG] [Thread-22492] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:58:04.153 [DEBUG] [Thread-22492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:58:04.153 [DEBUG] [Thread-22492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:58:04.154 [DEBUG] [Thread-22492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:58:04.154 [DEBUG] [Thread-22492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:58:04.154 [DEBUG] [Thread-22492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:58:04.154 [DEBUG] [Thread-22492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:58:04.154 [DEBUG] [Thread-22492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:58:04.154 [DEBUG] [Thread-22492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:58:04.154 [DEBUG] [Thread-22492] [transport.py] [_log()] client lang: <none>
2026-04-15T16:58:04.154 [DEBUG] [Thread-22492] [transport.py] [_log()] server lang: <none>
2026-04-15T16:58:04.154 [DEBUG] [Thread-22492] [transport.py] [_log()] kex follows: False
2026-04-15T16:58:04.154 [DEBUG] [Thread-22492] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:58:04.155 [DEBUG] [Thread-22492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:58:04.155 [DEBUG] [Thread-22492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:58:04.155 [DEBUG] [Thread-22492] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:58:04.155 [DEBUG] [Thread-22492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:58:04.155 [DEBUG] [Thread-22492] [transport.py] [_log()] Compression: none
2026-04-15T16:58:04.155 [DEBUG] [Thread-22492] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:58:04.171 [DEBUG] [Thread-22492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:58:04.171 [DEBUG] [Thread-22492] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:58:04.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:58:04.172 [DEBUG] [Thread-22492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:58:04.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:58:04.173 [DEBUG] [Thread-22492] [transport.py] [_log()] userauth is OK
2026-04-15T16:58:04.173 [DEBUG] [Thread-22492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:58:04.173 [DEBUG] [Thread-22492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:58:04.173 [DEBUG] [Thread-22492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:58:04.173 [DEBUG] [Thread-22492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:58:04.191 [INFO] [Thread-22492] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:58:04.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:58:04.969 [DEBUG] [Thread-22492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:58:04.970 [DEBUG] [Thread-22492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:58:04.970 [DEBUG] [Thread-22492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:58:05.010 [DEBUG] [Thread-22492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:58:05.010 [DEBUG] [Thread-22492] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:58:05.013 [DEBUG] [Thread-22492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:58:05.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:58:05.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:58:05.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:58:05.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:58:05.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:58:05.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:58:05.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:58:05.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:58:05.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:58:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.623052 -999.00  +13.90  12.95     61   +6.50 1 1 1 1 1   887    0 6.01 -45.43 ----- 16.0 12.9 318.8 17.1 18.1 -28.1 17.6 -26.9 18.4 -24.8 19.0 -26.8
2026-04-15T16:58:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:58:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:58:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.623052
2026-04-15T16:58:05.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:58:05.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:58:05.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:58:05.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:58:05.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:58:05.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:57:33', tmtdew=9.17733, humidity=54.075, cloud=0.0, wind=16.7969, temperature=14.711, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:57:11.693', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:58:05.041 [DEBUG] [Thread-22492] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:58:05.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:58:05.297 [DEBUG] [Thread-22495] [transport.py] [_log()] starting thread (client mode): 0xf1337bb0
2026-04-15T16:58:05.297 [DEBUG] [Thread-22495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:58:05.314 [DEBUG] [Thread-22495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:58:05.314 [INFO] [Thread-22495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:58:05.324 [DEBUG] [Thread-22495] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:58:05.324 [DEBUG] [Thread-22495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:58:05.324 [DEBUG] [Thread-22495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:58:05.324 [DEBUG] [Thread-22495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:58:05.324 [DEBUG] [Thread-22495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:58:05.324 [DEBUG] [Thread-22495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:58:05.324 [DEBUG] [Thread-22495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:58:05.324 [DEBUG] [Thread-22495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:58:05.324 [DEBUG] [Thread-22495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:58:05.324 [DEBUG] [Thread-22495] [transport.py] [_log()] client lang: <none>
2026-04-15T16:58:05.324 [DEBUG] [Thread-22495] [transport.py] [_log()] server lang: <none>
2026-04-15T16:58:05.324 [DEBUG] [Thread-22495] [transport.py] [_log()] kex follows: False
2026-04-15T16:58:05.324 [DEBUG] [Thread-22495] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:58:05.325 [DEBUG] [Thread-22495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:58:05.325 [DEBUG] [Thread-22495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:58:05.325 [DEBUG] [Thread-22495] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:58:05.325 [DEBUG] [Thread-22495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:58:05.325 [DEBUG] [Thread-22495] [transport.py] [_log()] Compression: none
2026-04-15T16:58:05.325 [DEBUG] [Thread-22495] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:58:05.377 [DEBUG] [Thread-22495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:58:05.378 [DEBUG] [Thread-22495] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:58:05.378 [DEBUG] [Thread-22495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:58:05.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:58:05.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:58:05.434 [DEBUG] [Thread-22495] [transport.py] [_log()] userauth is OK
2026-04-15T16:58:05.434 [DEBUG] [Thread-22495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:58:05.434 [DEBUG] [Thread-22495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:58:05.434 [DEBUG] [Thread-22495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:58:05.434 [DEBUG] [Thread-22495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:58:05.459 [INFO] [Thread-22495] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:58:05.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:58:05.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:58:06.275 [DEBUG] [Thread-22495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:58:06.276 [DEBUG] [Thread-22495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:58:06.328 [DEBUG] [Thread-22495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:58:06.328 [DEBUG] [Thread-22495] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:58:06.336 [DEBUG] [Thread-22495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:58:06.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:58:06.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')
2026-04-15T16:58:06.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
2026-04-15T16:58:06.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:58:06.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:58:06.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:58:06.368 [DEBUG] [Thread-22495] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:58:17.275 [DEBUG] [Thread-22497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:58:24.601 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:58:24.602 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:58:32.321 [DEBUG] [Thread-22498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:58:36.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:58:36.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:58:36.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
2026-04-15T16:58:37.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 58, 9), 9.00665, 54.6068, 0.0, 14.6981, 14.0387, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:58:37.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:58:09
2026-04-15T16:58:38.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:58:38.548 [DEBUG] [Thread-22499] [transport.py] [_log()] starting thread (client mode): 0xf13fe0b0
2026-04-15T16:58:38.548 [DEBUG] [Thread-22499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:58:38.569 [DEBUG] [Thread-22499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:58:38.569 [INFO] [Thread-22499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:58:38.572 [DEBUG] [Thread-22499] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:58:38.572 [DEBUG] [Thread-22499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:58:38.572 [DEBUG] [Thread-22499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:58:38.572 [DEBUG] [Thread-22499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:58:38.572 [DEBUG] [Thread-22499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:58:38.572 [DEBUG] [Thread-22499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:58:38.572 [DEBUG] [Thread-22499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:58:38.573 [DEBUG] [Thread-22499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:58:38.573 [DEBUG] [Thread-22499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:58:38.573 [DEBUG] [Thread-22499] [transport.py] [_log()] client lang: <none>
2026-04-15T16:58:38.573 [DEBUG] [Thread-22499] [transport.py] [_log()] server lang: <none>
2026-04-15T16:58:38.573 [DEBUG] [Thread-22499] [transport.py] [_log()] kex follows: False
2026-04-15T16:58:38.573 [DEBUG] [Thread-22499] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:58:38.573 [DEBUG] [Thread-22499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:58:38.573 [DEBUG] [Thread-22499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:58:38.573 [DEBUG] [Thread-22499] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:58:38.573 [DEBUG] [Thread-22499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:58:38.573 [DEBUG] [Thread-22499] [transport.py] [_log()] Compression: none
2026-04-15T16:58:38.574 [DEBUG] [Thread-22499] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:58:38.591 [DEBUG] [Thread-22499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:58:38.591 [DEBUG] [Thread-22499] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:58:38.592 [DEBUG] [Thread-22499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:58:38.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:58:38.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:58:38.593 [DEBUG] [Thread-22499] [transport.py] [_log()] userauth is OK
2026-04-15T16:58:38.593 [DEBUG] [Thread-22499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:58:38.593 [DEBUG] [Thread-22499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:58:38.593 [DEBUG] [Thread-22499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:58:38.594 [DEBUG] [Thread-22499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:58:38.617 [INFO] [Thread-22499] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:58:38.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:58:39.424 [DEBUG] [Thread-22499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:58:39.424 [DEBUG] [Thread-22499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:58:39.425 [DEBUG] [Thread-22499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:58:39.465 [DEBUG] [Thread-22499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:58:39.465 [DEBUG] [Thread-22499] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:58:39.468 [DEBUG] [Thread-22499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:58:39.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:58:39.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:58:39.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:58:39.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:58:39.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:58:39.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:58:39.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:58:39.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:58:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:58:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.623399 -999.00  +14.10  10.84     62   +7.00 1 1 1 1 1   887    0 5.89 -44.11 ----- 15.5 10.8 291.7 17.0 18.1 -27.8 17.7 -26.6 18.3 -24.5 18.9 -26.0
2026-04-15T16:58:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:58:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:58:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.623399
2026-04-15T16:58:39.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:58:39.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:58:39.493 [DEBUG] [Thread-22499] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:58:39.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:58:39.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:58:39.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:58:39.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:58:09', tmtdew=9.00665, humidity=54.6068, cloud=0.0, wind=14.6981, temperature=14.0387, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:57:41.674', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:58:39.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:58:39.749 [DEBUG] [Thread-22502] [transport.py] [_log()] starting thread (client mode): 0xf13cb250
2026-04-15T16:58:39.749 [DEBUG] [Thread-22502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:58:39.763 [DEBUG] [Thread-22502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:58:39.763 [INFO] [Thread-22502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:58:39.770 [DEBUG] [Thread-22502] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:58:39.771 [DEBUG] [Thread-22502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:58:39.771 [DEBUG] [Thread-22502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:58:39.771 [DEBUG] [Thread-22502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:58:39.771 [DEBUG] [Thread-22502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:58:39.771 [DEBUG] [Thread-22502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:58:39.771 [DEBUG] [Thread-22502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:58:39.771 [DEBUG] [Thread-22502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:58:39.771 [DEBUG] [Thread-22502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:58:39.771 [DEBUG] [Thread-22502] [transport.py] [_log()] client lang: <none>
2026-04-15T16:58:39.771 [DEBUG] [Thread-22502] [transport.py] [_log()] server lang: <none>
2026-04-15T16:58:39.771 [DEBUG] [Thread-22502] [transport.py] [_log()] kex follows: False
2026-04-15T16:58:39.772 [DEBUG] [Thread-22502] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:58:39.772 [DEBUG] [Thread-22502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:58:39.772 [DEBUG] [Thread-22502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:58:39.773 [DEBUG] [Thread-22502] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:58:39.773 [DEBUG] [Thread-22502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:58:39.773 [DEBUG] [Thread-22502] [transport.py] [_log()] Compression: none
2026-04-15T16:58:39.773 [DEBUG] [Thread-22502] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:58:39.831 [DEBUG] [Thread-22502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:58:39.831 [DEBUG] [Thread-22502] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:58:39.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:58:39.832 [DEBUG] [Thread-22502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:58:39.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:58:39.888 [DEBUG] [Thread-22502] [transport.py] [_log()] userauth is OK
2026-04-15T16:58:39.889 [DEBUG] [Thread-22502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:58:39.889 [DEBUG] [Thread-22502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:58:39.889 [DEBUG] [Thread-22502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:58:39.889 [DEBUG] [Thread-22502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:58:39.915 [INFO] [Thread-22502] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:58:39.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:58:39.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:58:40.317 [DEBUG] [Thread-22504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:58:40.726 [DEBUG] [Thread-22502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:58:40.726 [DEBUG] [Thread-22502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:58:40.774 [DEBUG] [Thread-22502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:58:40.774 [DEBUG] [Thread-22502] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:58:40.783 [DEBUG] [Thread-22502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:58:40.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:58:40.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')
2026-04-15T16:58:40.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
2026-04-15T16:58:40.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:58:40.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:58:40.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:58:40.817 [DEBUG] [Thread-22502] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:58:47.350 [DEBUG] [Thread-22505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:59:02.387 [DEBUG] [Thread-22506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:59:10.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:59:10.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:59:10.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
2026-04-15T16:59:12.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 58, 44), 9.42226, 53.1805, 0.0, 23.4295, 14.7774, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:59:12.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:58:44
2026-04-15T16:59:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:59:12.913 [DEBUG] [Thread-22507] [transport.py] [_log()] starting thread (client mode): 0xf1337d60
2026-04-15T16:59:12.913 [DEBUG] [Thread-22507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:59:12.934 [DEBUG] [Thread-22507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:59:12.934 [INFO] [Thread-22507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:59:12.937 [DEBUG] [Thread-22507] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:59:12.937 [DEBUG] [Thread-22507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:59:12.937 [DEBUG] [Thread-22507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:59:12.937 [DEBUG] [Thread-22507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:59:12.937 [DEBUG] [Thread-22507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:59:12.937 [DEBUG] [Thread-22507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:59:12.937 [DEBUG] [Thread-22507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:59:12.937 [DEBUG] [Thread-22507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:59:12.938 [DEBUG] [Thread-22507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:59:12.938 [DEBUG] [Thread-22507] [transport.py] [_log()] client lang: <none>
2026-04-15T16:59:12.938 [DEBUG] [Thread-22507] [transport.py] [_log()] server lang: <none>
2026-04-15T16:59:12.938 [DEBUG] [Thread-22507] [transport.py] [_log()] kex follows: False
2026-04-15T16:59:12.938 [DEBUG] [Thread-22507] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:59:12.938 [DEBUG] [Thread-22507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:59:12.938 [DEBUG] [Thread-22507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:59:12.938 [DEBUG] [Thread-22507] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:59:12.938 [DEBUG] [Thread-22507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:59:12.938 [DEBUG] [Thread-22507] [transport.py] [_log()] Compression: none
2026-04-15T16:59:12.939 [DEBUG] [Thread-22507] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:59:12.956 [DEBUG] [Thread-22507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:59:12.957 [DEBUG] [Thread-22507] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:59:12.957 [DEBUG] [Thread-22507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:59:12.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:59:12.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:59:12.959 [DEBUG] [Thread-22507] [transport.py] [_log()] userauth is OK
2026-04-15T16:59:12.959 [DEBUG] [Thread-22507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:59:12.959 [DEBUG] [Thread-22507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:59:12.959 [DEBUG] [Thread-22507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:59:12.959 [DEBUG] [Thread-22507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:59:12.995 [INFO] [Thread-22507] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:59:12.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:59:13.790 [DEBUG] [Thread-22507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:59:13.790 [DEBUG] [Thread-22507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:59:13.791 [DEBUG] [Thread-22507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:59:13.831 [DEBUG] [Thread-22507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:59:13.831 [DEBUG] [Thread-22507] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:59:13.834 [DEBUG] [Thread-22507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:59:13.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:59:13.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:59:13.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:59:13.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:59:13.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:59:13.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:59:13.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:59:13.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:59:13.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:59:13.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.624093 -999.00  +14.20  20.08     60   +6.60 1 1 1 1 1   887    0 6.20 -37.15 ----- 18.8 20.1 293.2 22.7 18.0 -28.3 17.6 -26.6 18.3 -24.7 18.9 -26.4
2026-04-15T16:59:13.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:59:13.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:59:13.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.624093
2026-04-15T16:59:13.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:59:13.859 [DEBUG] [Thread-22507] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:59:13.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:59:13.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:59:13.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:59:13.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:59:13.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:58:44', tmtdew=9.42226, humidity=53.1805, cloud=0.0, wind=23.4295, temperature=14.7774, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:58:41.635', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:59:14.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:59:14.114 [DEBUG] [Thread-22510] [transport.py] [_log()] starting thread (client mode): 0xf1334550
2026-04-15T16:59:14.114 [DEBUG] [Thread-22510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:59:14.128 [DEBUG] [Thread-22510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:59:14.128 [INFO] [Thread-22510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:59:14.135 [DEBUG] [Thread-22510] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:59:14.135 [DEBUG] [Thread-22510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:59:14.135 [DEBUG] [Thread-22510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:59:14.136 [DEBUG] [Thread-22510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:59:14.136 [DEBUG] [Thread-22510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:59:14.136 [DEBUG] [Thread-22510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:59:14.136 [DEBUG] [Thread-22510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:59:14.136 [DEBUG] [Thread-22510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:59:14.136 [DEBUG] [Thread-22510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:59:14.136 [DEBUG] [Thread-22510] [transport.py] [_log()] client lang: <none>
2026-04-15T16:59:14.136 [DEBUG] [Thread-22510] [transport.py] [_log()] server lang: <none>
2026-04-15T16:59:14.136 [DEBUG] [Thread-22510] [transport.py] [_log()] kex follows: False
2026-04-15T16:59:14.136 [DEBUG] [Thread-22510] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:59:14.136 [DEBUG] [Thread-22510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:59:14.136 [DEBUG] [Thread-22510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:59:14.137 [DEBUG] [Thread-22510] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:59:14.137 [DEBUG] [Thread-22510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:59:14.137 [DEBUG] [Thread-22510] [transport.py] [_log()] Compression: none
2026-04-15T16:59:14.137 [DEBUG] [Thread-22510] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:59:14.194 [DEBUG] [Thread-22510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:59:14.194 [DEBUG] [Thread-22510] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:59:14.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:59:14.195 [DEBUG] [Thread-22510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:59:14.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:59:14.251 [DEBUG] [Thread-22510] [transport.py] [_log()] userauth is OK
2026-04-15T16:59:14.251 [DEBUG] [Thread-22510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:59:14.251 [DEBUG] [Thread-22510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:59:14.251 [DEBUG] [Thread-22510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:59:14.251 [DEBUG] [Thread-22510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:59:14.276 [INFO] [Thread-22510] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:59:14.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:59:14.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:59:15.108 [DEBUG] [Thread-22510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:59:15.109 [DEBUG] [Thread-22510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:59:15.156 [DEBUG] [Thread-22510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:59:15.156 [DEBUG] [Thread-22510] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:59:15.165 [DEBUG] [Thread-22510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:59:15.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:59:15.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')
2026-04-15T16:59:15.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
2026-04-15T16:59:15.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:59:15.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:59:15.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:59:15.199 [DEBUG] [Thread-22510] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:59:17.420 [DEBUG] [Thread-22512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:59:24.743 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:59:24.745 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:59:32.463 [DEBUG] [Thread-22513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:59:40.407 [DEBUG] [Thread-22514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:59:45.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T16:59:45.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T16:59:45.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
2026-04-15T16:59:46.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 59, 20), 8.94442, 54.9412, 0.0, 14.4871, 13.9894, 0, 0, 0, 2, 0, 0),)
2026-04-15T16:59:46.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:59:20
2026-04-15T16:59:46.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T16:59:47.327 [DEBUG] [Thread-22515] [transport.py] [_log()] starting thread (client mode): 0xf1335bd0
2026-04-15T16:59:47.328 [DEBUG] [Thread-22515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:59:47.356 [DEBUG] [Thread-22515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T16:59:47.356 [INFO] [Thread-22515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T16:59:47.360 [DEBUG] [Thread-22515] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:59:47.360 [DEBUG] [Thread-22515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T16:59:47.360 [DEBUG] [Thread-22515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:59:47.360 [DEBUG] [Thread-22515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:59:47.360 [DEBUG] [Thread-22515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:59:47.360 [DEBUG] [Thread-22515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:59:47.360 [DEBUG] [Thread-22515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:59:47.360 [DEBUG] [Thread-22515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:59:47.360 [DEBUG] [Thread-22515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:59:47.361 [DEBUG] [Thread-22515] [transport.py] [_log()] client lang: <none>
2026-04-15T16:59:47.361 [DEBUG] [Thread-22515] [transport.py] [_log()] server lang: <none>
2026-04-15T16:59:47.361 [DEBUG] [Thread-22515] [transport.py] [_log()] kex follows: False
2026-04-15T16:59:47.361 [DEBUG] [Thread-22515] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:59:47.361 [DEBUG] [Thread-22515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:59:47.361 [DEBUG] [Thread-22515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:59:47.361 [DEBUG] [Thread-22515] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:59:47.361 [DEBUG] [Thread-22515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:59:47.361 [DEBUG] [Thread-22515] [transport.py] [_log()] Compression: none
2026-04-15T16:59:47.361 [DEBUG] [Thread-22515] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:59:47.376 [DEBUG] [Thread-22515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:59:47.376 [DEBUG] [Thread-22515] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:59:47.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T16:59:47.377 [DEBUG] [Thread-22515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T16:59:47.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:59:47.378 [DEBUG] [Thread-22515] [transport.py] [_log()] userauth is OK
2026-04-15T16:59:47.378 [DEBUG] [Thread-22515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:59:47.378 [DEBUG] [Thread-22515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:59:47.378 [DEBUG] [Thread-22515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T16:59:47.379 [DEBUG] [Thread-22515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:59:47.402 [INFO] [Thread-22515] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:59:47.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:59:47.495 [DEBUG] [Thread-22517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T16:59:48.179 [DEBUG] [Thread-22515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:59:48.179 [DEBUG] [Thread-22515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:59:48.179 [DEBUG] [Thread-22515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T16:59:48.220 [DEBUG] [Thread-22515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:59:48.220 [DEBUG] [Thread-22515] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:59:48.223 [DEBUG] [Thread-22515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:59:48.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:59:48.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T16:59:48.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T16:59:48.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T16:59:48.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:59:48.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T16:59:48.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:59:48.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:59:48.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T16:59:48.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.624441 -999.00  +14.10  20.84     60   +6.60 1 1 1 1 1   887    0 6.19 -35.97 ----- 17.5 20.8 297.8 24.3 18.0 -28.0 17.6 -26.4 18.3 -24.3 18.9 -25.8
2026-04-15T16:59:48.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T16:59:48.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T16:59:48.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.624441
2026-04-15T16:59:48.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T16:59:48.248 [DEBUG] [Thread-22515] [transport.py] [_log()] EOF in transport thread
2026-04-15T16:59:48.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T16:59:48.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T16:59:48.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T16:59:48.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T16:59:48.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:59:20', tmtdew=8.94442, humidity=54.9412, cloud=0.0, wind=14.4871, temperature=13.9894, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T14:59:11.702', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T16:59:48.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T16:59:48.504 [DEBUG] [Thread-22519] [transport.py] [_log()] starting thread (client mode): 0xf1337910
2026-04-15T16:59:48.504 [DEBUG] [Thread-22519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T16:59:48.519 [DEBUG] [Thread-22519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T16:59:48.519 [INFO] [Thread-22519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T16:59:48.529 [DEBUG] [Thread-22519] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T16:59:48.529 [DEBUG] [Thread-22519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T16:59:48.529 [DEBUG] [Thread-22519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T16:59:48.529 [DEBUG] [Thread-22519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:59:48.529 [DEBUG] [Thread-22519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T16:59:48.529 [DEBUG] [Thread-22519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:59:48.529 [DEBUG] [Thread-22519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T16:59:48.530 [DEBUG] [Thread-22519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T16:59:48.530 [DEBUG] [Thread-22519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T16:59:48.530 [DEBUG] [Thread-22519] [transport.py] [_log()] client lang: <none>
2026-04-15T16:59:48.530 [DEBUG] [Thread-22519] [transport.py] [_log()] server lang: <none>
2026-04-15T16:59:48.530 [DEBUG] [Thread-22519] [transport.py] [_log()] kex follows: False
2026-04-15T16:59:48.530 [DEBUG] [Thread-22519] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T16:59:48.530 [DEBUG] [Thread-22519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T16:59:48.530 [DEBUG] [Thread-22519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T16:59:48.530 [DEBUG] [Thread-22519] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T16:59:48.530 [DEBUG] [Thread-22519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T16:59:48.530 [DEBUG] [Thread-22519] [transport.py] [_log()] Compression: none
2026-04-15T16:59:48.531 [DEBUG] [Thread-22519] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T16:59:48.588 [DEBUG] [Thread-22519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T16:59:48.588 [DEBUG] [Thread-22519] [transport.py] [_log()] Switch to new keys ...
2026-04-15T16:59:48.588 [DEBUG] [Thread-22519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T16:59:48.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T16:59:48.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T16:59:48.643 [DEBUG] [Thread-22519] [transport.py] [_log()] userauth is OK
2026-04-15T16:59:48.643 [DEBUG] [Thread-22519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T16:59:48.643 [DEBUG] [Thread-22519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T16:59:48.644 [DEBUG] [Thread-22519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T16:59:48.644 [DEBUG] [Thread-22519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T16:59:48.670 [INFO] [Thread-22519] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T16:59:48.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T16:59:48.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T16:59:49.525 [DEBUG] [Thread-22519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T16:59:49.525 [DEBUG] [Thread-22519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T16:59:49.572 [DEBUG] [Thread-22519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T16:59:49.572 [DEBUG] [Thread-22519] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T16:59:49.581 [DEBUG] [Thread-22519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T16:59:49.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T16:59:49.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')
2026-04-15T16:59:49.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
2026-04-15T16:59:49.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T16:59:49.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T16:59:49.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T16:59:49.613 [DEBUG] [Thread-22519] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:00:02.527 [DEBUG] [Thread-22521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:00:17.564 [DEBUG] [Thread-22522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:00:19.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:00:19.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:00:19.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
2026-04-15T17:00:20.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 16, 59, 55), 8.91498, 54.9216, 0.0, 18.5803, 13.9894, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:00:20.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 16:59:55
2026-04-15T17:00:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:00:21.830 [DEBUG] [Thread-22523] [transport.py] [_log()] starting thread (client mode): 0xf13363e0
2026-04-15T17:00:21.831 [DEBUG] [Thread-22523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:00:21.851 [DEBUG] [Thread-22523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:00:21.851 [INFO] [Thread-22523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:00:21.854 [DEBUG] [Thread-22523] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:00:21.854 [DEBUG] [Thread-22523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:00:21.854 [DEBUG] [Thread-22523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:00:21.854 [DEBUG] [Thread-22523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:00:21.854 [DEBUG] [Thread-22523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:00:21.854 [DEBUG] [Thread-22523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:00:21.854 [DEBUG] [Thread-22523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:00:21.855 [DEBUG] [Thread-22523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:00:21.855 [DEBUG] [Thread-22523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:00:21.855 [DEBUG] [Thread-22523] [transport.py] [_log()] client lang: <none>
2026-04-15T17:00:21.855 [DEBUG] [Thread-22523] [transport.py] [_log()] server lang: <none>
2026-04-15T17:00:21.855 [DEBUG] [Thread-22523] [transport.py] [_log()] kex follows: False
2026-04-15T17:00:21.855 [DEBUG] [Thread-22523] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:00:21.855 [DEBUG] [Thread-22523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:00:21.855 [DEBUG] [Thread-22523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:00:21.855 [DEBUG] [Thread-22523] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:00:21.855 [DEBUG] [Thread-22523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:00:21.855 [DEBUG] [Thread-22523] [transport.py] [_log()] Compression: none
2026-04-15T17:00:21.856 [DEBUG] [Thread-22523] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:00:21.874 [DEBUG] [Thread-22523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:00:21.874 [DEBUG] [Thread-22523] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:00:21.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:00:21.875 [DEBUG] [Thread-22523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:00:21.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:00:21.876 [DEBUG] [Thread-22523] [transport.py] [_log()] userauth is OK
2026-04-15T17:00:21.876 [DEBUG] [Thread-22523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:00:21.876 [DEBUG] [Thread-22523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:00:21.876 [DEBUG] [Thread-22523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:00:21.876 [DEBUG] [Thread-22523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:00:21.895 [INFO] [Thread-22523] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:00:21.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:00:24.885 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:00:24.886 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:00:25.926 [DEBUG] [Thread-22523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:00:25.927 [DEBUG] [Thread-22523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:00:25.927 [DEBUG] [Thread-22523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:00:25.968 [DEBUG] [Thread-22523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:00:25.968 [DEBUG] [Thread-22523] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:00:25.971 [DEBUG] [Thread-22523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:00:26.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:00:26.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:00:26.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:00:26.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:00:26.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:00:26.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:00:26.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:00:26.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:00:26.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:00:26.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.625135 -999.00  +14.20  21.86     60   +6.80 1 1 1 1 1   887    0 6.37 -32.22 ----- 18.8 21.9 332.4 23.6 18.0 -27.6 17.6 -26.5 18.4 -24.1 19.1 -25.5
2026-04-15T17:00:26.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:00:26.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:00:26.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.625135
2026-04-15T17:00:26.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:00:26.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:00:26.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:00:26.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:00:26.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:00:26.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T16:59:55', tmtdew=8.91498, humidity=54.9216, cloud=0.0, wind=18.5803, temperature=13.9894, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:00:11.664', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:00:26.074 [DEBUG] [Thread-22523] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:00:26.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:00:26.343 [DEBUG] [Thread-22526] [transport.py] [_log()] starting thread (client mode): 0xf13347f0
2026-04-15T17:00:26.343 [DEBUG] [Thread-22526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:00:26.357 [DEBUG] [Thread-22526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:00:26.357 [INFO] [Thread-22526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:00:26.364 [DEBUG] [Thread-22526] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:00:26.364 [DEBUG] [Thread-22526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:00:26.364 [DEBUG] [Thread-22526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:00:26.364 [DEBUG] [Thread-22526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:00:26.364 [DEBUG] [Thread-22526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:00:26.364 [DEBUG] [Thread-22526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:00:26.364 [DEBUG] [Thread-22526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:00:26.365 [DEBUG] [Thread-22526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:00:26.365 [DEBUG] [Thread-22526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:00:26.365 [DEBUG] [Thread-22526] [transport.py] [_log()] client lang: <none>
2026-04-15T17:00:26.365 [DEBUG] [Thread-22526] [transport.py] [_log()] server lang: <none>
2026-04-15T17:00:26.365 [DEBUG] [Thread-22526] [transport.py] [_log()] kex follows: False
2026-04-15T17:00:26.365 [DEBUG] [Thread-22526] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:00:26.365 [DEBUG] [Thread-22526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:00:26.365 [DEBUG] [Thread-22526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:00:26.365 [DEBUG] [Thread-22526] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:00:26.365 [DEBUG] [Thread-22526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:00:26.365 [DEBUG] [Thread-22526] [transport.py] [_log()] Compression: none
2026-04-15T17:00:26.365 [DEBUG] [Thread-22526] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:00:26.422 [DEBUG] [Thread-22526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:00:26.423 [DEBUG] [Thread-22526] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:00:26.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:00:26.423 [DEBUG] [Thread-22526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:00:26.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:00:26.479 [DEBUG] [Thread-22526] [transport.py] [_log()] userauth is OK
2026-04-15T17:00:26.480 [DEBUG] [Thread-22526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:00:26.480 [DEBUG] [Thread-22526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:00:26.480 [DEBUG] [Thread-22526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:00:26.480 [DEBUG] [Thread-22526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:00:26.502 [INFO] [Thread-22526] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:00:26.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:00:26.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:00:27.352 [DEBUG] [Thread-22526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:00:27.352 [DEBUG] [Thread-22526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:00:27.399 [DEBUG] [Thread-22526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:00:27.399 [DEBUG] [Thread-22526] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:00:27.408 [DEBUG] [Thread-22526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:00:27.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:00:27.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')
2026-04-15T17:00:27.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
2026-04-15T17:00:27.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:00:27.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:00:27.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:00:27.441 [DEBUG] [Thread-22526] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:00:32.594 [DEBUG] [Thread-22528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:00:40.518 [DEBUG] [Thread-22529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:00:47.638 [DEBUG] [Thread-22530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:00:57.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:00:57.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:00:57.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
2026-04-15T17:00:58.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 0, 31), 8.95208, 54.8222, 0.0, 19.039, 14.1385, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:00:58.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:00:31
2026-04-15T17:00:59.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:00:59.555 [DEBUG] [Thread-22531] [transport.py] [_log()] starting thread (client mode): 0xee9ada50
2026-04-15T17:00:59.555 [DEBUG] [Thread-22531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:00:59.575 [DEBUG] [Thread-22531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:00:59.575 [INFO] [Thread-22531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:00:59.578 [DEBUG] [Thread-22531] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:00:59.578 [DEBUG] [Thread-22531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:00:59.578 [DEBUG] [Thread-22531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:00:59.578 [DEBUG] [Thread-22531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:00:59.578 [DEBUG] [Thread-22531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:00:59.578 [DEBUG] [Thread-22531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:00:59.579 [DEBUG] [Thread-22531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:00:59.579 [DEBUG] [Thread-22531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:00:59.579 [DEBUG] [Thread-22531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:00:59.579 [DEBUG] [Thread-22531] [transport.py] [_log()] client lang: <none>
2026-04-15T17:00:59.579 [DEBUG] [Thread-22531] [transport.py] [_log()] server lang: <none>
2026-04-15T17:00:59.579 [DEBUG] [Thread-22531] [transport.py] [_log()] kex follows: False
2026-04-15T17:00:59.579 [DEBUG] [Thread-22531] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:00:59.579 [DEBUG] [Thread-22531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:00:59.579 [DEBUG] [Thread-22531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:00:59.579 [DEBUG] [Thread-22531] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:00:59.579 [DEBUG] [Thread-22531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:00:59.579 [DEBUG] [Thread-22531] [transport.py] [_log()] Compression: none
2026-04-15T17:00:59.579 [DEBUG] [Thread-22531] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:00:59.596 [DEBUG] [Thread-22531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:00:59.596 [DEBUG] [Thread-22531] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:00:59.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:00:59.596 [DEBUG] [Thread-22531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:00:59.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:00:59.597 [DEBUG] [Thread-22531] [transport.py] [_log()] userauth is OK
2026-04-15T17:00:59.597 [DEBUG] [Thread-22531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:00:59.597 [DEBUG] [Thread-22531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:00:59.597 [DEBUG] [Thread-22531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:00:59.598 [DEBUG] [Thread-22531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:00:59.610 [INFO] [Thread-22531] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:00:59.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:01:00.204 [DEBUG] [Thread-22531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:01:00.204 [DEBUG] [Thread-22531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:01:00.205 [DEBUG] [Thread-22531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:01:00.245 [DEBUG] [Thread-22531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:01:00.246 [DEBUG] [Thread-22531] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:01:00.248 [DEBUG] [Thread-22531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:01:00.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:01:00.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:01:00.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:01:00.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:01:00.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:01:00.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:01:00.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:01:00.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:01:00.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:01:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.625482 -999.00  +14.20  21.95     61   +6.70 1 1 1 1 1   887    0 6.31 -29.01 ----- 19.6 21.9 325.6 25.2 18.0 -28.3 17.6 -27.0 18.5 -23.7 19.1 -25.6
2026-04-15T17:01:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:01:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:01:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.625482
2026-04-15T17:01:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:01:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:01:00.267 [DEBUG] [Thread-22531] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:01:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:01:00.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:01:00.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:01:00.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:00:31', tmtdew=8.95208, humidity=54.8222, cloud=0.0, wind=19.039, temperature=14.1385, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:00:41.645', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:01:00.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:01:00.488 [DEBUG] [Thread-22534] [transport.py] [_log()] starting thread (client mode): 0xee9ad150
2026-04-15T17:01:00.489 [DEBUG] [Thread-22534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:01:00.503 [DEBUG] [Thread-22534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:01:00.503 [INFO] [Thread-22534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:01:00.511 [DEBUG] [Thread-22534] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:01:00.511 [DEBUG] [Thread-22534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:01:00.511 [DEBUG] [Thread-22534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:01:00.512 [DEBUG] [Thread-22534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:01:00.512 [DEBUG] [Thread-22534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:01:00.512 [DEBUG] [Thread-22534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:01:00.512 [DEBUG] [Thread-22534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:01:00.512 [DEBUG] [Thread-22534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:01:00.512 [DEBUG] [Thread-22534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:01:00.512 [DEBUG] [Thread-22534] [transport.py] [_log()] client lang: <none>
2026-04-15T17:01:00.512 [DEBUG] [Thread-22534] [transport.py] [_log()] server lang: <none>
2026-04-15T17:01:00.512 [DEBUG] [Thread-22534] [transport.py] [_log()] kex follows: False
2026-04-15T17:01:00.512 [DEBUG] [Thread-22534] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:01:00.512 [DEBUG] [Thread-22534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:01:00.512 [DEBUG] [Thread-22534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:01:00.512 [DEBUG] [Thread-22534] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:01:00.512 [DEBUG] [Thread-22534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:01:00.513 [DEBUG] [Thread-22534] [transport.py] [_log()] Compression: none
2026-04-15T17:01:00.513 [DEBUG] [Thread-22534] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:01:00.567 [DEBUG] [Thread-22534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:01:00.567 [DEBUG] [Thread-22534] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:01:00.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:01:00.567 [DEBUG] [Thread-22534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:01:00.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:01:00.624 [DEBUG] [Thread-22534] [transport.py] [_log()] userauth is OK
2026-04-15T17:01:00.624 [DEBUG] [Thread-22534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:01:00.624 [DEBUG] [Thread-22534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:01:00.624 [DEBUG] [Thread-22534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:01:00.624 [DEBUG] [Thread-22534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:01:00.643 [INFO] [Thread-22534] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:01:00.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:01:00.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:01:01.477 [DEBUG] [Thread-22534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:01:01.478 [DEBUG] [Thread-22534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:01:01.526 [DEBUG] [Thread-22534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:01:01.526 [DEBUG] [Thread-22534] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:01:01.535 [DEBUG] [Thread-22534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:01:01.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:01:01.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')
2026-04-15T17:01:01.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') -> 00000000
2026-04-15T17:01:01.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:01:01.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:01:01.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:01:01.568 [DEBUG] [Thread-22534] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:01:02.670 [DEBUG] [Thread-22536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:01:17.704 [DEBUG] [Thread-22537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:01:25.023 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:01:25.024 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:01:31.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:01:31.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:01:31.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
2026-04-15T17:01:32.729 [DEBUG] [Thread-22538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:01:32.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 1, 6), 9.08584, 54.3418, 0.0, 17.5748, 14.1882, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:01:32.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:01:06
2026-04-15T17:01:33.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:01:33.649 [DEBUG] [Thread-22539] [transport.py] [_log()] starting thread (client mode): 0xee9ad450
2026-04-15T17:01:33.649 [DEBUG] [Thread-22539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:01:33.667 [DEBUG] [Thread-22539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:01:33.667 [INFO] [Thread-22539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:01:33.671 [DEBUG] [Thread-22539] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:01:33.671 [DEBUG] [Thread-22539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:01:33.671 [DEBUG] [Thread-22539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:01:33.671 [DEBUG] [Thread-22539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:01:33.671 [DEBUG] [Thread-22539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:01:33.671 [DEBUG] [Thread-22539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:01:33.671 [DEBUG] [Thread-22539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:01:33.671 [DEBUG] [Thread-22539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:01:33.671 [DEBUG] [Thread-22539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:01:33.671 [DEBUG] [Thread-22539] [transport.py] [_log()] client lang: <none>
2026-04-15T17:01:33.671 [DEBUG] [Thread-22539] [transport.py] [_log()] server lang: <none>
2026-04-15T17:01:33.671 [DEBUG] [Thread-22539] [transport.py] [_log()] kex follows: False
2026-04-15T17:01:33.671 [DEBUG] [Thread-22539] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:01:33.671 [DEBUG] [Thread-22539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:01:33.672 [DEBUG] [Thread-22539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:01:33.672 [DEBUG] [Thread-22539] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:01:33.672 [DEBUG] [Thread-22539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:01:33.672 [DEBUG] [Thread-22539] [transport.py] [_log()] Compression: none
2026-04-15T17:01:33.672 [DEBUG] [Thread-22539] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:01:33.680 [DEBUG] [Thread-22539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:01:33.680 [DEBUG] [Thread-22539] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:01:33.681 [DEBUG] [Thread-22539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:01:33.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:01:33.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:01:33.682 [DEBUG] [Thread-22539] [transport.py] [_log()] userauth is OK
2026-04-15T17:01:33.682 [DEBUG] [Thread-22539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:01:33.682 [DEBUG] [Thread-22539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:01:33.682 [DEBUG] [Thread-22539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:01:33.682 [DEBUG] [Thread-22539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:01:33.713 [INFO] [Thread-22539] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:01:33.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:01:34.315 [DEBUG] [Thread-22539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:01:34.315 [DEBUG] [Thread-22539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:01:34.316 [DEBUG] [Thread-22539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:01:34.358 [DEBUG] [Thread-22539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:01:34.358 [DEBUG] [Thread-22539] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:01:34.360 [DEBUG] [Thread-22539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:01:34.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:01:34.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:01:34.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:01:34.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:01:34.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:01:34.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:01:34.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:01:34.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:01:34.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:01:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.625830 -999.00  +14.10  20.63     60   +6.60 1 1 1 1 1   887    0 6.46 -26.37 ----- 19.2 20.6 321.6 22.9 18.0 -28.2 17.6 -27.3 18.5 -24.2 19.1 -25.8
2026-04-15T17:01:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:01:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:01:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.625830
2026-04-15T17:01:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:01:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:01:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:01:34.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:01:34.379 [DEBUG] [Thread-22539] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:01:34.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:01:34.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:01:06', tmtdew=9.08584, humidity=54.3418, cloud=0.0, wind=17.5748, temperature=14.1882, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:01:11.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:01:34.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:01:40.594 [DEBUG] [Thread-22542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:01:47.752 [DEBUG] [Thread-22543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:02:02.787 [DEBUG] [Thread-22544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:02:17.811 [DEBUG] [Thread-22545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:02:25.163 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:02:25.164 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:02:32.835 [DEBUG] [Thread-22546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:02:40.696 [DEBUG] [Thread-22547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:02:47.861 [DEBUG] [Thread-22548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:03:02.886 [DEBUG] [Thread-22549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:03:17.915 [DEBUG] [Thread-22550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:03:25.300 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:03:25.302 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:03:32.945 [DEBUG] [Thread-22551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:03:40.779 [DEBUG] [Thread-22552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:03:47.981 [DEBUG] [Thread-22553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:03:49.386 [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
2026-04-15T17:04:03.009 [DEBUG] [Thread-22554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:04:18.040 [DEBUG] [Thread-22555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:04:19.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:04:19.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:04:19.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
2026-04-15T17:04:20.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 4, 3), 9.14732, 53.9744, 0.0, 14.5224, 14.4552, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:04:20.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:04:03
2026-04-15T17:04:21.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:04:21.572 [DEBUG] [Thread-22556] [transport.py] [_log()] starting thread (client mode): 0xf1336a10
2026-04-15T17:04:21.573 [DEBUG] [Thread-22556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:04:21.589 [DEBUG] [Thread-22556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:04:21.589 [INFO] [Thread-22556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:04:21.592 [DEBUG] [Thread-22556] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:04:21.592 [DEBUG] [Thread-22556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:04:21.593 [DEBUG] [Thread-22556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:04:21.593 [DEBUG] [Thread-22556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:04:21.593 [DEBUG] [Thread-22556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:04:21.593 [DEBUG] [Thread-22556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:04:21.593 [DEBUG] [Thread-22556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:04:21.593 [DEBUG] [Thread-22556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:04:21.593 [DEBUG] [Thread-22556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:04:21.593 [DEBUG] [Thread-22556] [transport.py] [_log()] client lang: <none>
2026-04-15T17:04:21.593 [DEBUG] [Thread-22556] [transport.py] [_log()] server lang: <none>
2026-04-15T17:04:21.593 [DEBUG] [Thread-22556] [transport.py] [_log()] kex follows: False
2026-04-15T17:04:21.593 [DEBUG] [Thread-22556] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:04:21.593 [DEBUG] [Thread-22556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:04:21.593 [DEBUG] [Thread-22556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:04:21.594 [DEBUG] [Thread-22556] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:04:21.594 [DEBUG] [Thread-22556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:04:21.594 [DEBUG] [Thread-22556] [transport.py] [_log()] Compression: none
2026-04-15T17:04:21.594 [DEBUG] [Thread-22556] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:04:21.611 [DEBUG] [Thread-22556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:04:21.612 [DEBUG] [Thread-22556] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:04:21.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:04:21.612 [DEBUG] [Thread-22556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:04:21.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:04:21.613 [DEBUG] [Thread-22556] [transport.py] [_log()] userauth is OK
2026-04-15T17:04:21.613 [DEBUG] [Thread-22556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:04:21.614 [DEBUG] [Thread-22556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:04:21.614 [DEBUG] [Thread-22556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:04:21.614 [DEBUG] [Thread-22556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:04:21.639 [INFO] [Thread-22556] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:04:21.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:04:22.262 [DEBUG] [Thread-22556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:04:22.262 [DEBUG] [Thread-22556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:04:22.263 [DEBUG] [Thread-22556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:04:22.303 [DEBUG] [Thread-22556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:04:22.303 [DEBUG] [Thread-22556] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:04:22.306 [DEBUG] [Thread-22556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:04:22.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:04:22.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:04:22.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:04:22.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:04:22.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:04:22.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:04:22.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:04:22.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:04:22.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:04:22.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.627913 -999.00  +13.90  12.49     61   +6.60 1 1 1 1 1   887    0 7.16 -5.34 ----- 13.4 12.5 295.8 15.0 18.1 -27.1 17.6 -25.3 18.7 -23.3 19.4 -24.5
2026-04-15T17:04:22.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:04:22.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:04:22.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.627913
2026-04-15T17:04:22.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:04:22.331 [DEBUG] [Thread-22556] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:04:22.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:04:22.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:04:22.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:04:22.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:04:22.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:04:03', tmtdew=9.14732, humidity=53.9744, cloud=0.0, wind=14.5224, temperature=14.4552, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:04:11.683', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:04:22.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:04:22.589 [DEBUG] [Thread-22559] [transport.py] [_log()] starting thread (client mode): 0xee90d750
2026-04-15T17:04:22.590 [DEBUG] [Thread-22559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:04:22.604 [DEBUG] [Thread-22559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:04:22.604 [INFO] [Thread-22559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:04:22.611 [DEBUG] [Thread-22559] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:04:22.611 [DEBUG] [Thread-22559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:04:22.611 [DEBUG] [Thread-22559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:04:22.612 [DEBUG] [Thread-22559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:04:22.612 [DEBUG] [Thread-22559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:04:22.612 [DEBUG] [Thread-22559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:04:22.612 [DEBUG] [Thread-22559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:04:22.612 [DEBUG] [Thread-22559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:04:22.612 [DEBUG] [Thread-22559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:04:22.612 [DEBUG] [Thread-22559] [transport.py] [_log()] client lang: <none>
2026-04-15T17:04:22.612 [DEBUG] [Thread-22559] [transport.py] [_log()] server lang: <none>
2026-04-15T17:04:22.612 [DEBUG] [Thread-22559] [transport.py] [_log()] kex follows: False
2026-04-15T17:04:22.612 [DEBUG] [Thread-22559] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:04:22.612 [DEBUG] [Thread-22559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:04:22.613 [DEBUG] [Thread-22559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:04:22.613 [DEBUG] [Thread-22559] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:04:22.613 [DEBUG] [Thread-22559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:04:22.613 [DEBUG] [Thread-22559] [transport.py] [_log()] Compression: none
2026-04-15T17:04:22.613 [DEBUG] [Thread-22559] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:04:22.669 [DEBUG] [Thread-22559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:04:22.670 [DEBUG] [Thread-22559] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:04:22.670 [DEBUG] [Thread-22559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:04:22.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:04:22.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:04:22.726 [DEBUG] [Thread-22559] [transport.py] [_log()] userauth is OK
2026-04-15T17:04:22.726 [DEBUG] [Thread-22559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:04:22.726 [DEBUG] [Thread-22559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:04:22.727 [DEBUG] [Thread-22559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:04:22.727 [DEBUG] [Thread-22559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:04:22.754 [INFO] [Thread-22559] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:04:22.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:04:22.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:04:23.568 [DEBUG] [Thread-22559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:04:23.568 [DEBUG] [Thread-22559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:04:23.615 [DEBUG] [Thread-22559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:04:23.615 [DEBUG] [Thread-22559] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:04:23.624 [DEBUG] [Thread-22559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:04:23.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:04:23.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')
2026-04-15T17:04:23.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
2026-04-15T17:04:23.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:04:23.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:04:23.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:04:23.660 [DEBUG] [Thread-22559] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:04:25.444 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:04:25.445 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:04:33.072 [DEBUG] [Thread-22561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:04:40.870 [DEBUG] [Thread-22562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:04:48.119 [DEBUG] [Thread-22563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:04:53.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:04:53.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:04:53.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
2026-04-15T17:04:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 4, 39), 9.54692, 52.7831, 0.0, 17.2202, 15.0097, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:04:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:04:39
2026-04-15T17:04:55.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:04:55.834 [DEBUG] [Thread-22564] [transport.py] [_log()] starting thread (client mode): 0xf13318a0
2026-04-15T17:04:55.835 [DEBUG] [Thread-22564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:04:55.854 [DEBUG] [Thread-22564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:04:55.855 [INFO] [Thread-22564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:04:55.858 [DEBUG] [Thread-22564] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:04:55.858 [DEBUG] [Thread-22564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:04:55.858 [DEBUG] [Thread-22564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:04:55.858 [DEBUG] [Thread-22564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:04:55.858 [DEBUG] [Thread-22564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:04:55.858 [DEBUG] [Thread-22564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:04:55.859 [DEBUG] [Thread-22564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:04:55.859 [DEBUG] [Thread-22564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:04:55.859 [DEBUG] [Thread-22564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:04:55.859 [DEBUG] [Thread-22564] [transport.py] [_log()] client lang: <none>
2026-04-15T17:04:55.859 [DEBUG] [Thread-22564] [transport.py] [_log()] server lang: <none>
2026-04-15T17:04:55.859 [DEBUG] [Thread-22564] [transport.py] [_log()] kex follows: False
2026-04-15T17:04:55.859 [DEBUG] [Thread-22564] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:04:55.859 [DEBUG] [Thread-22564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:04:55.859 [DEBUG] [Thread-22564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:04:55.859 [DEBUG] [Thread-22564] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:04:55.859 [DEBUG] [Thread-22564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:04:55.860 [DEBUG] [Thread-22564] [transport.py] [_log()] Compression: none
2026-04-15T17:04:55.860 [DEBUG] [Thread-22564] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:04:55.875 [DEBUG] [Thread-22564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:04:55.876 [DEBUG] [Thread-22564] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:04:55.876 [DEBUG] [Thread-22564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:04:55.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:04:55.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:04:55.877 [DEBUG] [Thread-22564] [transport.py] [_log()] userauth is OK
2026-04-15T17:04:55.877 [DEBUG] [Thread-22564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:04:55.877 [DEBUG] [Thread-22564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:04:55.878 [DEBUG] [Thread-22564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:04:55.878 [DEBUG] [Thread-22564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:04:55.895 [INFO] [Thread-22564] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:04:55.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:04:56.529 [DEBUG] [Thread-22564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:04:56.530 [DEBUG] [Thread-22564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:04:56.530 [DEBUG] [Thread-22564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:04:56.570 [DEBUG] [Thread-22564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:04:56.570 [DEBUG] [Thread-22564] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:04:56.573 [DEBUG] [Thread-22564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:04:56.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:04:56.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:04:56.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:04:56.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:04:56.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:04:56.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:04:56.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:04:56.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:04:56.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:04:56.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.628260 -999.00  +14.00  12.42     62   +6.90 1 1 1 1 1   887    0 7.20 -3.07 ----- 10.4 12.4 287.6 14.4 18.1 -26.8 17.7 -25.4 18.6 -21.7 19.4 -23.9
2026-04-15T17:04:56.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:04:56.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:04:56.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.628260
2026-04-15T17:04:56.597 [DEBUG] [Thread-22564] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:04:56.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:04:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:04:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:04:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:04:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:04:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:04:39', tmtdew=9.54692, humidity=52.7831, cloud=0.0, wind=17.2202, temperature=15.0097, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:04:41.664', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:04:56.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:04:56.856 [DEBUG] [Thread-22567] [transport.py] [_log()] starting thread (client mode): 0xf1337d30
2026-04-15T17:04:56.856 [DEBUG] [Thread-22567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:04:56.878 [DEBUG] [Thread-22567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:04:56.878 [INFO] [Thread-22567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:04:56.885 [DEBUG] [Thread-22567] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:04:56.885 [DEBUG] [Thread-22567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:04:56.885 [DEBUG] [Thread-22567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:04:56.885 [DEBUG] [Thread-22567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:04:56.885 [DEBUG] [Thread-22567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:04:56.886 [DEBUG] [Thread-22567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:04:56.886 [DEBUG] [Thread-22567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:04:56.886 [DEBUG] [Thread-22567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:04:56.886 [DEBUG] [Thread-22567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:04:56.886 [DEBUG] [Thread-22567] [transport.py] [_log()] client lang: <none>
2026-04-15T17:04:56.886 [DEBUG] [Thread-22567] [transport.py] [_log()] server lang: <none>
2026-04-15T17:04:56.886 [DEBUG] [Thread-22567] [transport.py] [_log()] kex follows: False
2026-04-15T17:04:56.886 [DEBUG] [Thread-22567] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:04:56.886 [DEBUG] [Thread-22567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:04:56.886 [DEBUG] [Thread-22567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:04:56.886 [DEBUG] [Thread-22567] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:04:56.887 [DEBUG] [Thread-22567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:04:56.887 [DEBUG] [Thread-22567] [transport.py] [_log()] Compression: none
2026-04-15T17:04:56.887 [DEBUG] [Thread-22567] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:04:56.942 [DEBUG] [Thread-22567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:04:56.943 [DEBUG] [Thread-22567] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:04:56.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:04:56.944 [DEBUG] [Thread-22567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:04:56.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:04:56.998 [DEBUG] [Thread-22567] [transport.py] [_log()] userauth is OK
2026-04-15T17:04:56.999 [DEBUG] [Thread-22567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:04:56.999 [DEBUG] [Thread-22567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:04:56.999 [DEBUG] [Thread-22567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:04:56.999 [DEBUG] [Thread-22567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:04:57.026 [INFO] [Thread-22567] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:04:57.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:04:57.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:04:57.911 [DEBUG] [Thread-22567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:04:57.911 [DEBUG] [Thread-22567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:04:57.959 [DEBUG] [Thread-22567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:04:57.959 [DEBUG] [Thread-22567] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:04:57.968 [DEBUG] [Thread-22567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:04:57.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:04:57.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')
2026-04-15T17:04:57.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
2026-04-15T17:04:57.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:04:57.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:04:57.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:04:58.003 [DEBUG] [Thread-22567] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:05:03.148 [DEBUG] [Thread-22569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:05:18.189 [DEBUG] [Thread-22570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:05:25.583 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:05:25.584 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:05:28.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:05:28.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:05:28.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
2026-04-15T17:05:29.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 5, 14), 9.07852, 54.1596, 0.0, 14.787, 14.1889, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:05:29.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:05:14
2026-04-15T17:05:29.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:05:30.115 [DEBUG] [Thread-22571] [transport.py] [_log()] starting thread (client mode): 0xf17c27d0
2026-04-15T17:05:30.115 [DEBUG] [Thread-22571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:05:30.135 [DEBUG] [Thread-22571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:05:30.135 [INFO] [Thread-22571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:05:30.138 [DEBUG] [Thread-22571] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:05:30.138 [DEBUG] [Thread-22571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:05:30.138 [DEBUG] [Thread-22571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:05:30.138 [DEBUG] [Thread-22571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:05:30.138 [DEBUG] [Thread-22571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:05:30.138 [DEBUG] [Thread-22571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:05:30.138 [DEBUG] [Thread-22571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:05:30.138 [DEBUG] [Thread-22571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:05:30.139 [DEBUG] [Thread-22571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:05:30.139 [DEBUG] [Thread-22571] [transport.py] [_log()] client lang: <none>
2026-04-15T17:05:30.139 [DEBUG] [Thread-22571] [transport.py] [_log()] server lang: <none>
2026-04-15T17:05:30.139 [DEBUG] [Thread-22571] [transport.py] [_log()] kex follows: False
2026-04-15T17:05:30.139 [DEBUG] [Thread-22571] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:05:30.139 [DEBUG] [Thread-22571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:05:30.139 [DEBUG] [Thread-22571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:05:30.139 [DEBUG] [Thread-22571] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:05:30.139 [DEBUG] [Thread-22571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:05:30.139 [DEBUG] [Thread-22571] [transport.py] [_log()] Compression: none
2026-04-15T17:05:30.139 [DEBUG] [Thread-22571] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:05:30.156 [DEBUG] [Thread-22571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:05:30.157 [DEBUG] [Thread-22571] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:05:30.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:05:30.157 [DEBUG] [Thread-22571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:05:30.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:05:30.158 [DEBUG] [Thread-22571] [transport.py] [_log()] userauth is OK
2026-04-15T17:05:30.159 [DEBUG] [Thread-22571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:05:30.159 [DEBUG] [Thread-22571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:05:30.159 [DEBUG] [Thread-22571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:05:30.159 [DEBUG] [Thread-22571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:05:30.181 [INFO] [Thread-22571] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:05:30.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:05:30.850 [DEBUG] [Thread-22571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:05:30.850 [DEBUG] [Thread-22571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:05:30.851 [DEBUG] [Thread-22571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:05:30.891 [DEBUG] [Thread-22571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:05:30.891 [DEBUG] [Thread-22571] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:05:30.894 [DEBUG] [Thread-22571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:05:30.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:05:30.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:05:30.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:05:30.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:05:30.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:05:30.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:05:30.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:05:30.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:05:30.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:05:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.628607 -999.00  +14.00  11.10     62   +7.00 1 1 1 1 1   887    0 7.30 -0.82 ----- 12.1 11.1 290.6 14.2 18.1 -27.2 17.7 -25.1 18.7 -23.6 19.5 -23.7
2026-04-15T17:05:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:05:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:05:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.628607
2026-04-15T17:05:30.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:05:30.917 [DEBUG] [Thread-22571] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:05:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:05:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:05:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:05:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:05:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:05:14', tmtdew=9.07852, humidity=54.1596, cloud=0.0, wind=14.787, temperature=14.1889, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:05:11.645', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:05:31.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:05:31.149 [DEBUG] [Thread-22574] [transport.py] [_log()] starting thread (client mode): 0xf17c2380
2026-04-15T17:05:31.150 [DEBUG] [Thread-22574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:05:31.164 [DEBUG] [Thread-22574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:05:31.164 [INFO] [Thread-22574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:05:31.172 [DEBUG] [Thread-22574] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:05:31.172 [DEBUG] [Thread-22574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:05:31.172 [DEBUG] [Thread-22574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:05:31.172 [DEBUG] [Thread-22574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:05:31.172 [DEBUG] [Thread-22574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:05:31.172 [DEBUG] [Thread-22574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:05:31.172 [DEBUG] [Thread-22574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:05:31.172 [DEBUG] [Thread-22574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:05:31.173 [DEBUG] [Thread-22574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:05:31.173 [DEBUG] [Thread-22574] [transport.py] [_log()] client lang: <none>
2026-04-15T17:05:31.173 [DEBUG] [Thread-22574] [transport.py] [_log()] server lang: <none>
2026-04-15T17:05:31.173 [DEBUG] [Thread-22574] [transport.py] [_log()] kex follows: False
2026-04-15T17:05:31.173 [DEBUG] [Thread-22574] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:05:31.173 [DEBUG] [Thread-22574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:05:31.173 [DEBUG] [Thread-22574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:05:31.173 [DEBUG] [Thread-22574] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:05:31.173 [DEBUG] [Thread-22574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:05:31.173 [DEBUG] [Thread-22574] [transport.py] [_log()] Compression: none
2026-04-15T17:05:31.173 [DEBUG] [Thread-22574] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:05:31.231 [DEBUG] [Thread-22574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:05:31.231 [DEBUG] [Thread-22574] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:05:31.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:05:31.232 [DEBUG] [Thread-22574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:05:31.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:05:31.287 [DEBUG] [Thread-22574] [transport.py] [_log()] userauth is OK
2026-04-15T17:05:31.288 [DEBUG] [Thread-22574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:05:31.288 [DEBUG] [Thread-22574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:05:31.288 [DEBUG] [Thread-22574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:05:31.288 [DEBUG] [Thread-22574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:05:31.313 [INFO] [Thread-22574] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:05:31.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:05:31.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:05:32.210 [DEBUG] [Thread-22574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:05:32.210 [DEBUG] [Thread-22574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:05:32.258 [DEBUG] [Thread-22574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:05:32.258 [DEBUG] [Thread-22574] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:05:32.267 [DEBUG] [Thread-22574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:05:32.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:05:32.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')
2026-04-15T17:05:32.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') -> 00000000
2026-04-15T17:05:32.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:05:32.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:05:32.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:05:32.303 [DEBUG] [Thread-22574] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:05:33.221 [DEBUG] [Thread-22576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:05:40.976 [DEBUG] [Thread-22577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:05:48.264 [DEBUG] [Thread-22578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:06:02.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:06:02.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:06:02.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
2026-04-15T17:06:03.295 [DEBUG] [Thread-22579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:06:03.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 5, 50), 9.45148, 53.0814, 0.0, 14.3626, 14.811, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:06:03.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:05:50
2026-04-15T17:06:03.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:06:04.383 [DEBUG] [Thread-22580] [transport.py] [_log()] starting thread (client mode): 0xf13fe170
2026-04-15T17:06:04.384 [DEBUG] [Thread-22580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:06:04.403 [DEBUG] [Thread-22580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:06:04.403 [INFO] [Thread-22580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:06:04.406 [DEBUG] [Thread-22580] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:06:04.407 [DEBUG] [Thread-22580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:06:04.407 [DEBUG] [Thread-22580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:06:04.407 [DEBUG] [Thread-22580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:06:04.407 [DEBUG] [Thread-22580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:06:04.407 [DEBUG] [Thread-22580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:06:04.407 [DEBUG] [Thread-22580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:06:04.407 [DEBUG] [Thread-22580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:06:04.407 [DEBUG] [Thread-22580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:06:04.407 [DEBUG] [Thread-22580] [transport.py] [_log()] client lang: <none>
2026-04-15T17:06:04.407 [DEBUG] [Thread-22580] [transport.py] [_log()] server lang: <none>
2026-04-15T17:06:04.407 [DEBUG] [Thread-22580] [transport.py] [_log()] kex follows: False
2026-04-15T17:06:04.407 [DEBUG] [Thread-22580] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:06:04.407 [DEBUG] [Thread-22580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:06:04.408 [DEBUG] [Thread-22580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:06:04.408 [DEBUG] [Thread-22580] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:06:04.408 [DEBUG] [Thread-22580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:06:04.408 [DEBUG] [Thread-22580] [transport.py] [_log()] Compression: none
2026-04-15T17:06:04.408 [DEBUG] [Thread-22580] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:06:04.426 [DEBUG] [Thread-22580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:06:04.426 [DEBUG] [Thread-22580] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:06:04.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:06:04.427 [DEBUG] [Thread-22580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:06:04.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:06:04.428 [DEBUG] [Thread-22580] [transport.py] [_log()] userauth is OK
2026-04-15T17:06:04.428 [DEBUG] [Thread-22580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:06:04.428 [DEBUG] [Thread-22580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:06:04.428 [DEBUG] [Thread-22580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:06:04.428 [DEBUG] [Thread-22580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:06:04.449 [INFO] [Thread-22580] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:06:04.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:06:05.093 [DEBUG] [Thread-22580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:06:05.093 [DEBUG] [Thread-22580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:06:05.094 [DEBUG] [Thread-22580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:06:05.133 [DEBUG] [Thread-22580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:06:05.134 [DEBUG] [Thread-22580] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:06:05.136 [DEBUG] [Thread-22580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:06:05.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:06:05.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:06:05.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:06:05.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:06:05.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:06:05.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:06:05.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:06:05.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:06:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:06:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.628954 -999.00  +14.00  13.18     61   +6.80 1 2 1 1 1   887    0 7.22 1.80 ----- 13.7 13.2 321.4 14.2 18.2 -26.1 17.8 -25.0 18.8 -20.3 19.5 -23.0
2026-04-15T17:06:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:06:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:06:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.628954
2026-04-15T17:06:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:06:05.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:06:05.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:06:05.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:06:05.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:06:05.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:05:50', tmtdew=9.45148, humidity=53.0814, cloud=0.0, wind=14.3626, temperature=14.811, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:05:41.626', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:06:05.155 [DEBUG] [Thread-22580] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:06:05.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:06:05.368 [DEBUG] [Thread-22583] [transport.py] [_log()] starting thread (client mode): 0xf13367a0
2026-04-15T17:06:05.368 [DEBUG] [Thread-22583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:06:05.386 [DEBUG] [Thread-22583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:06:05.386 [INFO] [Thread-22583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:06:05.394 [DEBUG] [Thread-22583] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:06:05.394 [DEBUG] [Thread-22583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:06:05.394 [DEBUG] [Thread-22583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:06:05.394 [DEBUG] [Thread-22583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:06:05.394 [DEBUG] [Thread-22583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:06:05.394 [DEBUG] [Thread-22583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:06:05.394 [DEBUG] [Thread-22583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:06:05.394 [DEBUG] [Thread-22583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:06:05.394 [DEBUG] [Thread-22583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:06:05.394 [DEBUG] [Thread-22583] [transport.py] [_log()] client lang: <none>
2026-04-15T17:06:05.395 [DEBUG] [Thread-22583] [transport.py] [_log()] server lang: <none>
2026-04-15T17:06:05.395 [DEBUG] [Thread-22583] [transport.py] [_log()] kex follows: False
2026-04-15T17:06:05.395 [DEBUG] [Thread-22583] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:06:05.395 [DEBUG] [Thread-22583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:06:05.395 [DEBUG] [Thread-22583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:06:05.395 [DEBUG] [Thread-22583] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:06:05.395 [DEBUG] [Thread-22583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:06:05.395 [DEBUG] [Thread-22583] [transport.py] [_log()] Compression: none
2026-04-15T17:06:05.395 [DEBUG] [Thread-22583] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:06:05.450 [DEBUG] [Thread-22583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:06:05.450 [DEBUG] [Thread-22583] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:06:05.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:06:05.451 [DEBUG] [Thread-22583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:06:05.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:06:05.507 [DEBUG] [Thread-22583] [transport.py] [_log()] userauth is OK
2026-04-15T17:06:05.507 [DEBUG] [Thread-22583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:06:05.507 [DEBUG] [Thread-22583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:06:05.508 [DEBUG] [Thread-22583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:06:05.508 [DEBUG] [Thread-22583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:06:05.536 [INFO] [Thread-22583] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:06:05.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:06:05.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:06:06.447 [DEBUG] [Thread-22583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:06:06.447 [DEBUG] [Thread-22583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:06:06.494 [DEBUG] [Thread-22583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:06:06.495 [DEBUG] [Thread-22583] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:06:06.503 [DEBUG] [Thread-22583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:06:06.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:06:06.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')
2026-04-15T17:06:06.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') -> 00000000
2026-04-15T17:06:06.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:06:06.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:06:06.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:06:06.537 [DEBUG] [Thread-22583] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:06:18.323 [DEBUG] [Thread-22585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:06:25.726 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:06:25.727 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:06:33.370 [DEBUG] [Thread-22586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:06:36.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:06:36.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:06:36.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
2026-04-15T17:06:37.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 6, 25), 8.80331, 55.1235, 0.0, 15.916, 14.0055, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:06:37.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:06:25
2026-04-15T17:06:38.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:06:38.663 [DEBUG] [Thread-22587] [transport.py] [_log()] starting thread (client mode): 0xf17c2c80
2026-04-15T17:06:38.663 [DEBUG] [Thread-22587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:06:38.682 [DEBUG] [Thread-22587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:06:38.682 [INFO] [Thread-22587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:06:38.685 [DEBUG] [Thread-22587] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:06:38.685 [DEBUG] [Thread-22587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:06:38.685 [DEBUG] [Thread-22587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:06:38.685 [DEBUG] [Thread-22587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:06:38.685 [DEBUG] [Thread-22587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:06:38.685 [DEBUG] [Thread-22587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:06:38.686 [DEBUG] [Thread-22587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:06:38.686 [DEBUG] [Thread-22587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:06:38.686 [DEBUG] [Thread-22587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:06:38.686 [DEBUG] [Thread-22587] [transport.py] [_log()] client lang: <none>
2026-04-15T17:06:38.686 [DEBUG] [Thread-22587] [transport.py] [_log()] server lang: <none>
2026-04-15T17:06:38.686 [DEBUG] [Thread-22587] [transport.py] [_log()] kex follows: False
2026-04-15T17:06:38.686 [DEBUG] [Thread-22587] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:06:38.686 [DEBUG] [Thread-22587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:06:38.686 [DEBUG] [Thread-22587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:06:38.686 [DEBUG] [Thread-22587] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:06:38.686 [DEBUG] [Thread-22587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:06:38.686 [DEBUG] [Thread-22587] [transport.py] [_log()] Compression: none
2026-04-15T17:06:38.686 [DEBUG] [Thread-22587] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:06:38.695 [DEBUG] [Thread-22587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:06:38.695 [DEBUG] [Thread-22587] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:06:38.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:06:38.696 [DEBUG] [Thread-22587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:06:38.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:06:38.697 [DEBUG] [Thread-22587] [transport.py] [_log()] userauth is OK
2026-04-15T17:06:38.697 [DEBUG] [Thread-22587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:06:38.697 [DEBUG] [Thread-22587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:06:38.697 [DEBUG] [Thread-22587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:06:38.697 [DEBUG] [Thread-22587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:06:38.732 [INFO] [Thread-22587] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:06:38.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:06:39.375 [DEBUG] [Thread-22587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:06:39.375 [DEBUG] [Thread-22587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:06:39.376 [DEBUG] [Thread-22587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:06:39.416 [DEBUG] [Thread-22587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:06:39.416 [DEBUG] [Thread-22587] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:06:39.419 [DEBUG] [Thread-22587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:06:39.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:06:39.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:06:39.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:06:39.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:06:39.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:06:39.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:06:39.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:06:39.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:06:39.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:06:39.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.629302 -999.00  +14.00  12.43     62   +7.00 1 2 1 1 1   887    0 7.35 3.07 ----- 11.2 12.4 299.4 16.5 18.1 -26.1 17.8 -24.6 18.7 -21.0 19.5 -23.0
2026-04-15T17:06:39.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:06:39.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:06:39.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.629302
2026-04-15T17:06:39.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:06:39.442 [DEBUG] [Thread-22587] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:06:39.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:06:39.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:06:39.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:06:39.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:06:39.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:06:25', tmtdew=8.80331, humidity=55.1235, cloud=0.0, wind=15.916, temperature=14.0055, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:06:11.693', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:06:39.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:06:39.709 [DEBUG] [Thread-22590] [transport.py] [_log()] starting thread (client mode): 0xf1334760
2026-04-15T17:06:39.709 [DEBUG] [Thread-22590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:06:39.723 [DEBUG] [Thread-22590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:06:39.723 [INFO] [Thread-22590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:06:39.731 [DEBUG] [Thread-22590] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:06:39.731 [DEBUG] [Thread-22590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:06:39.731 [DEBUG] [Thread-22590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:06:39.731 [DEBUG] [Thread-22590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:06:39.731 [DEBUG] [Thread-22590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:06:39.731 [DEBUG] [Thread-22590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:06:39.731 [DEBUG] [Thread-22590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:06:39.731 [DEBUG] [Thread-22590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:06:39.731 [DEBUG] [Thread-22590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:06:39.731 [DEBUG] [Thread-22590] [transport.py] [_log()] client lang: <none>
2026-04-15T17:06:39.731 [DEBUG] [Thread-22590] [transport.py] [_log()] server lang: <none>
2026-04-15T17:06:39.732 [DEBUG] [Thread-22590] [transport.py] [_log()] kex follows: False
2026-04-15T17:06:39.732 [DEBUG] [Thread-22590] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:06:39.732 [DEBUG] [Thread-22590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:06:39.732 [DEBUG] [Thread-22590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:06:39.732 [DEBUG] [Thread-22590] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:06:39.732 [DEBUG] [Thread-22590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:06:39.732 [DEBUG] [Thread-22590] [transport.py] [_log()] Compression: none
2026-04-15T17:06:39.732 [DEBUG] [Thread-22590] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:06:39.786 [DEBUG] [Thread-22590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:06:39.787 [DEBUG] [Thread-22590] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:06:39.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:06:39.787 [DEBUG] [Thread-22590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:06:39.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:06:39.844 [DEBUG] [Thread-22590] [transport.py] [_log()] userauth is OK
2026-04-15T17:06:39.844 [DEBUG] [Thread-22590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:06:39.844 [DEBUG] [Thread-22590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:06:39.844 [DEBUG] [Thread-22590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:06:39.844 [DEBUG] [Thread-22590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:06:39.869 [INFO] [Thread-22590] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:06:39.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:06:39.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:06:40.692 [DEBUG] [Thread-22590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:06:40.693 [DEBUG] [Thread-22590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:06:40.741 [DEBUG] [Thread-22590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:06:40.741 [DEBUG] [Thread-22590] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:06:40.750 [DEBUG] [Thread-22590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:06:40.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:06:40.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')
2026-04-15T17:06:40.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
2026-04-15T17:06:40.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:06:40.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:06:40.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:06:40.784 [DEBUG] [Thread-22590] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:06:41.051 [DEBUG] [Thread-22592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:06:48.403 [DEBUG] [Thread-22593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:07:03.448 [DEBUG] [Thread-22594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:07:10.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:07:10.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:07:10.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T17:07:12.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 7, 1), 8.77318, 55.2395, 0.0, 14.8046, 14.0221, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:07:12.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:07:01
2026-04-15T17:07:12.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:07:13.055 [DEBUG] [Thread-22595] [transport.py] [_log()] starting thread (client mode): 0xf13348b0
2026-04-15T17:07:13.055 [DEBUG] [Thread-22595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:07:13.074 [DEBUG] [Thread-22595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:07:13.074 [INFO] [Thread-22595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:07:13.076 [DEBUG] [Thread-22595] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:07:13.076 [DEBUG] [Thread-22595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:07:13.076 [DEBUG] [Thread-22595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:07:13.076 [DEBUG] [Thread-22595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:07:13.077 [DEBUG] [Thread-22595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:07:13.077 [DEBUG] [Thread-22595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:07:13.077 [DEBUG] [Thread-22595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:07:13.077 [DEBUG] [Thread-22595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:07:13.077 [DEBUG] [Thread-22595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:07:13.077 [DEBUG] [Thread-22595] [transport.py] [_log()] client lang: <none>
2026-04-15T17:07:13.077 [DEBUG] [Thread-22595] [transport.py] [_log()] server lang: <none>
2026-04-15T17:07:13.077 [DEBUG] [Thread-22595] [transport.py] [_log()] kex follows: False
2026-04-15T17:07:13.077 [DEBUG] [Thread-22595] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:07:13.077 [DEBUG] [Thread-22595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:07:13.077 [DEBUG] [Thread-22595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:07:13.078 [DEBUG] [Thread-22595] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:07:13.078 [DEBUG] [Thread-22595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:07:13.078 [DEBUG] [Thread-22595] [transport.py] [_log()] Compression: none
2026-04-15T17:07:13.078 [DEBUG] [Thread-22595] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:07:13.086 [DEBUG] [Thread-22595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:07:13.087 [DEBUG] [Thread-22595] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:07:13.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:07:13.087 [DEBUG] [Thread-22595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:07:13.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:07:13.088 [DEBUG] [Thread-22595] [transport.py] [_log()] userauth is OK
2026-04-15T17:07:13.089 [DEBUG] [Thread-22595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:07:13.089 [DEBUG] [Thread-22595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:07:13.089 [DEBUG] [Thread-22595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:07:13.089 [DEBUG] [Thread-22595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:07:13.106 [INFO] [Thread-22595] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:07:13.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:07:13.755 [DEBUG] [Thread-22595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:07:13.755 [DEBUG] [Thread-22595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:07:13.756 [DEBUG] [Thread-22595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:07:13.796 [DEBUG] [Thread-22595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:07:13.796 [DEBUG] [Thread-22595] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:07:13.799 [DEBUG] [Thread-22595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:07:13.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:07:13.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:07:13.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:07:13.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:07:13.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:07:13.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:07:13.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:07:13.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:07:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:07:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.629649 -999.00  +14.10  11.43     62   +7.10 1 2 1 1 1   887    0 7.50 4.28 ----- 12.9 11.4 293.0 13.6 18.2 -26.0 17.9 -24.0 18.9 -20.4 19.6 -22.9
2026-04-15T17:07:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:07:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:07:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.629649
2026-04-15T17:07:13.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:07:13.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:07:13.826 [DEBUG] [Thread-22595] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:07:13.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:07:13.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:07:13.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:07:13.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:07:01', tmtdew=8.77318, humidity=55.2395, cloud=0.0, wind=14.8046, temperature=14.0221, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:06:41.674', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:07:14.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:07:14.082 [DEBUG] [Thread-22598] [transport.py] [_log()] starting thread (client mode): 0xf1352c80
2026-04-15T17:07:14.082 [DEBUG] [Thread-22598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:07:14.097 [DEBUG] [Thread-22598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:07:14.097 [INFO] [Thread-22598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:07:14.106 [DEBUG] [Thread-22598] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:07:14.107 [DEBUG] [Thread-22598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:07:14.107 [DEBUG] [Thread-22598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:07:14.107 [DEBUG] [Thread-22598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:07:14.107 [DEBUG] [Thread-22598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:07:14.107 [DEBUG] [Thread-22598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:07:14.107 [DEBUG] [Thread-22598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:07:14.107 [DEBUG] [Thread-22598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:07:14.107 [DEBUG] [Thread-22598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:07:14.107 [DEBUG] [Thread-22598] [transport.py] [_log()] client lang: <none>
2026-04-15T17:07:14.107 [DEBUG] [Thread-22598] [transport.py] [_log()] server lang: <none>
2026-04-15T17:07:14.107 [DEBUG] [Thread-22598] [transport.py] [_log()] kex follows: False
2026-04-15T17:07:14.107 [DEBUG] [Thread-22598] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:07:14.107 [DEBUG] [Thread-22598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:07:14.107 [DEBUG] [Thread-22598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:07:14.107 [DEBUG] [Thread-22598] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:07:14.108 [DEBUG] [Thread-22598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:07:14.108 [DEBUG] [Thread-22598] [transport.py] [_log()] Compression: none
2026-04-15T17:07:14.108 [DEBUG] [Thread-22598] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:07:14.161 [DEBUG] [Thread-22598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:07:14.161 [DEBUG] [Thread-22598] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:07:14.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:07:14.162 [DEBUG] [Thread-22598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:07:14.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:07:14.218 [DEBUG] [Thread-22598] [transport.py] [_log()] userauth is OK
2026-04-15T17:07:14.218 [DEBUG] [Thread-22598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:07:14.218 [DEBUG] [Thread-22598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:07:14.218 [DEBUG] [Thread-22598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:07:14.218 [DEBUG] [Thread-22598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:07:14.235 [INFO] [Thread-22598] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:07:14.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:07:14.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:07:15.065 [DEBUG] [Thread-22598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:07:15.065 [DEBUG] [Thread-22598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:07:15.113 [DEBUG] [Thread-22598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:07:15.114 [DEBUG] [Thread-22598] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:07:15.129 [DEBUG] [Thread-22598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:07:15.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:07:15.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')
2026-04-15T17:07:15.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
2026-04-15T17:07:15.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:07:15.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:07:15.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:07:15.172 [DEBUG] [Thread-22598] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:07:18.478 [DEBUG] [Thread-22600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:07:25.870 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:07:25.871 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:07:33.520 [DEBUG] [Thread-22601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:07:41.125 [DEBUG] [Thread-22602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:07:45.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:07:45.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:07:45.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
2026-04-15T17:07:46.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 7, 36), 9.34779, 53.4128, 0.0, 16.9733, 14.6122, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:07:46.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:07:36
2026-04-15T17:07:46.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:07:47.311 [DEBUG] [Thread-22603] [transport.py] [_log()] starting thread (client mode): 0xee9af670
2026-04-15T17:07:47.311 [DEBUG] [Thread-22603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:07:47.332 [DEBUG] [Thread-22603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:07:47.332 [INFO] [Thread-22603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:07:47.335 [DEBUG] [Thread-22603] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:07:47.335 [DEBUG] [Thread-22603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:07:47.335 [DEBUG] [Thread-22603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:07:47.335 [DEBUG] [Thread-22603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:07:47.336 [DEBUG] [Thread-22603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:07:47.336 [DEBUG] [Thread-22603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:07:47.336 [DEBUG] [Thread-22603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:07:47.336 [DEBUG] [Thread-22603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:07:47.336 [DEBUG] [Thread-22603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:07:47.336 [DEBUG] [Thread-22603] [transport.py] [_log()] client lang: <none>
2026-04-15T17:07:47.336 [DEBUG] [Thread-22603] [transport.py] [_log()] server lang: <none>
2026-04-15T17:07:47.336 [DEBUG] [Thread-22603] [transport.py] [_log()] kex follows: False
2026-04-15T17:07:47.336 [DEBUG] [Thread-22603] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:07:47.336 [DEBUG] [Thread-22603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:07:47.336 [DEBUG] [Thread-22603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:07:47.337 [DEBUG] [Thread-22603] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:07:47.337 [DEBUG] [Thread-22603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:07:47.337 [DEBUG] [Thread-22603] [transport.py] [_log()] Compression: none
2026-04-15T17:07:47.337 [DEBUG] [Thread-22603] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:07:47.353 [DEBUG] [Thread-22603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:07:47.353 [DEBUG] [Thread-22603] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:07:47.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:07:47.354 [DEBUG] [Thread-22603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:07:47.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:07:47.355 [DEBUG] [Thread-22603] [transport.py] [_log()] userauth is OK
2026-04-15T17:07:47.355 [DEBUG] [Thread-22603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:07:47.355 [DEBUG] [Thread-22603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:07:47.355 [DEBUG] [Thread-22603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:07:47.355 [DEBUG] [Thread-22603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:07:47.379 [INFO] [Thread-22603] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:07:47.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:07:48.036 [DEBUG] [Thread-22603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:07:48.037 [DEBUG] [Thread-22603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:07:48.037 [DEBUG] [Thread-22603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:07:48.078 [DEBUG] [Thread-22603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:07:48.078 [DEBUG] [Thread-22603] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:07:48.081 [DEBUG] [Thread-22603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:07:48.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:07:48.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:07:48.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:07:48.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:07:48.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:07:48.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:07:48.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:07:48.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:07:48.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:07:48.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.629996 -999.00  +14.20  14.10     63   +7.30 1 2 1 1 1   887    0 7.20 4.74 ----- 16.1 14.1 293.0 17.5 18.2 -26.3 17.9 -23.6 18.8 -20.8 19.5 -23.5
2026-04-15T17:07:48.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:07:48.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:07:48.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.629996
2026-04-15T17:07:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:07:48.107 [DEBUG] [Thread-22603] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:07:48.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:07:48.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:07:48.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:07:48.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:07:48.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:07:36', tmtdew=9.34779, humidity=53.4128, cloud=0.0, wind=16.9733, temperature=14.6122, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:07:11.654', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:07:48.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:07:48.366 [DEBUG] [Thread-22606] [transport.py] [_log()] starting thread (client mode): 0xf1350310
2026-04-15T17:07:48.366 [DEBUG] [Thread-22606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:07:48.380 [DEBUG] [Thread-22606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:07:48.381 [INFO] [Thread-22606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:07:48.388 [DEBUG] [Thread-22606] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:07:48.388 [DEBUG] [Thread-22606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:07:48.388 [DEBUG] [Thread-22606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:07:48.388 [DEBUG] [Thread-22606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:07:48.388 [DEBUG] [Thread-22606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:07:48.388 [DEBUG] [Thread-22606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:07:48.388 [DEBUG] [Thread-22606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:07:48.388 [DEBUG] [Thread-22606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:07:48.389 [DEBUG] [Thread-22606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:07:48.389 [DEBUG] [Thread-22606] [transport.py] [_log()] client lang: <none>
2026-04-15T17:07:48.389 [DEBUG] [Thread-22606] [transport.py] [_log()] server lang: <none>
2026-04-15T17:07:48.389 [DEBUG] [Thread-22606] [transport.py] [_log()] kex follows: False
2026-04-15T17:07:48.389 [DEBUG] [Thread-22606] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:07:48.389 [DEBUG] [Thread-22606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:07:48.389 [DEBUG] [Thread-22606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:07:48.389 [DEBUG] [Thread-22606] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:07:48.389 [DEBUG] [Thread-22606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:07:48.389 [DEBUG] [Thread-22606] [transport.py] [_log()] Compression: none
2026-04-15T17:07:48.389 [DEBUG] [Thread-22606] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:07:48.446 [DEBUG] [Thread-22606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:07:48.447 [DEBUG] [Thread-22606] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:07:48.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:07:48.447 [DEBUG] [Thread-22606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:07:48.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:07:48.503 [DEBUG] [Thread-22606] [transport.py] [_log()] userauth is OK
2026-04-15T17:07:48.504 [DEBUG] [Thread-22606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:07:48.504 [DEBUG] [Thread-22606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:07:48.504 [DEBUG] [Thread-22606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:07:48.504 [DEBUG] [Thread-22606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:07:48.528 [INFO] [Thread-22606] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:07:48.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:07:48.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:07:48.552 [DEBUG] [Thread-22608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:07:49.367 [DEBUG] [Thread-22606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:07:49.368 [DEBUG] [Thread-22606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:07:49.414 [DEBUG] [Thread-22606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:07:49.415 [DEBUG] [Thread-22606] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:07:49.423 [DEBUG] [Thread-22606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:07:49.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:07:49.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')
2026-04-15T17:07:49.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
2026-04-15T17:07:49.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:07:49.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:07:49.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:07:49.455 [DEBUG] [Thread-22606] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:08:03.597 [DEBUG] [Thread-22609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:08:18.628 [DEBUG] [Thread-22610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:08:19.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:08:19.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:08:19.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
2026-04-15T17:08:20.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 8, 13), 8.51643, 56.6038, 0.0, 14.6804, 14.1393, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:08:20.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:08:13
2026-04-15T17:08:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:08:21.652 [DEBUG] [Thread-22611] [transport.py] [_log()] starting thread (client mode): 0xf17c2470
2026-04-15T17:08:21.652 [DEBUG] [Thread-22611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:08:21.673 [DEBUG] [Thread-22611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:08:21.674 [INFO] [Thread-22611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:08:21.677 [DEBUG] [Thread-22611] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:08:21.677 [DEBUG] [Thread-22611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:08:21.677 [DEBUG] [Thread-22611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:08:21.677 [DEBUG] [Thread-22611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:08:21.678 [DEBUG] [Thread-22611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:08:21.678 [DEBUG] [Thread-22611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:08:21.678 [DEBUG] [Thread-22611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:08:21.678 [DEBUG] [Thread-22611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:08:21.678 [DEBUG] [Thread-22611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:08:21.678 [DEBUG] [Thread-22611] [transport.py] [_log()] client lang: <none>
2026-04-15T17:08:21.678 [DEBUG] [Thread-22611] [transport.py] [_log()] server lang: <none>
2026-04-15T17:08:21.678 [DEBUG] [Thread-22611] [transport.py] [_log()] kex follows: False
2026-04-15T17:08:21.678 [DEBUG] [Thread-22611] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:08:21.678 [DEBUG] [Thread-22611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:08:21.678 [DEBUG] [Thread-22611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:08:21.679 [DEBUG] [Thread-22611] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:08:21.679 [DEBUG] [Thread-22611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:08:21.679 [DEBUG] [Thread-22611] [transport.py] [_log()] Compression: none
2026-04-15T17:08:21.679 [DEBUG] [Thread-22611] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:08:21.699 [DEBUG] [Thread-22611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:08:21.699 [DEBUG] [Thread-22611] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:08:21.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:08:21.700 [DEBUG] [Thread-22611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:08:21.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:08:21.701 [DEBUG] [Thread-22611] [transport.py] [_log()] userauth is OK
2026-04-15T17:08:21.701 [DEBUG] [Thread-22611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:08:21.701 [DEBUG] [Thread-22611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:08:21.702 [DEBUG] [Thread-22611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:08:21.702 [DEBUG] [Thread-22611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:08:21.728 [INFO] [Thread-22611] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:08:21.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:08:22.374 [DEBUG] [Thread-22611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:08:22.374 [DEBUG] [Thread-22611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:08:22.375 [DEBUG] [Thread-22611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:08:22.415 [DEBUG] [Thread-22611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:08:22.415 [DEBUG] [Thread-22611] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:08:22.418 [DEBUG] [Thread-22611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:08:22.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:08:22.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:08:22.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:08:22.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:08:22.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:08:22.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:08:22.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:08:22.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:08:22.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:08:22.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.630691 -999.00  +14.00  12.03     64   +7.50 1 2 1 1 1   887    0 7.26 3.52 ----- 11.8 12.0 305.8 19.3 18.2 -25.9 17.8 -23.7 18.7 -19.9 19.5 -22.8
2026-04-15T17:08:22.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:08:22.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:08:22.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.630691
2026-04-15T17:08:22.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:08:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:08:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:08:22.445 [DEBUG] [Thread-22611] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:08:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:08:22.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:08:22.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:08:13', tmtdew=8.51643, humidity=56.6038, cloud=0.0, wind=14.6804, temperature=14.1393, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:08:11.702', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:08:22.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:08:22.703 [DEBUG] [Thread-22614] [transport.py] [_log()] starting thread (client mode): 0xf1335d80
2026-04-15T17:08:22.703 [DEBUG] [Thread-22614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:08:22.718 [DEBUG] [Thread-22614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:08:22.718 [INFO] [Thread-22614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:08:22.725 [DEBUG] [Thread-22614] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:08:22.726 [DEBUG] [Thread-22614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:08:22.726 [DEBUG] [Thread-22614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:08:22.726 [DEBUG] [Thread-22614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:08:22.726 [DEBUG] [Thread-22614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:08:22.726 [DEBUG] [Thread-22614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:08:22.726 [DEBUG] [Thread-22614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:08:22.726 [DEBUG] [Thread-22614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:08:22.726 [DEBUG] [Thread-22614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:08:22.726 [DEBUG] [Thread-22614] [transport.py] [_log()] client lang: <none>
2026-04-15T17:08:22.726 [DEBUG] [Thread-22614] [transport.py] [_log()] server lang: <none>
2026-04-15T17:08:22.726 [DEBUG] [Thread-22614] [transport.py] [_log()] kex follows: False
2026-04-15T17:08:22.727 [DEBUG] [Thread-22614] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:08:22.727 [DEBUG] [Thread-22614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:08:22.727 [DEBUG] [Thread-22614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:08:22.727 [DEBUG] [Thread-22614] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:08:22.727 [DEBUG] [Thread-22614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:08:22.727 [DEBUG] [Thread-22614] [transport.py] [_log()] Compression: none
2026-04-15T17:08:22.727 [DEBUG] [Thread-22614] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:08:22.784 [DEBUG] [Thread-22614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:08:22.784 [DEBUG] [Thread-22614] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:08:22.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:08:22.785 [DEBUG] [Thread-22614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:08:22.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:08:22.841 [DEBUG] [Thread-22614] [transport.py] [_log()] userauth is OK
2026-04-15T17:08:22.841 [DEBUG] [Thread-22614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:08:22.841 [DEBUG] [Thread-22614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:08:22.841 [DEBUG] [Thread-22614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:08:22.841 [DEBUG] [Thread-22614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:08:22.866 [INFO] [Thread-22614] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:08:22.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:08:22.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:08:23.710 [DEBUG] [Thread-22614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:08:23.710 [DEBUG] [Thread-22614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:08:23.758 [DEBUG] [Thread-22614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:08:23.758 [DEBUG] [Thread-22614] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:08:23.767 [DEBUG] [Thread-22614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:08:23.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:08: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')
2026-04-15T17:08:23.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
2026-04-15T17:08:23.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:08:23.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:08:23.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:08:23.801 [DEBUG] [Thread-22614] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:08:26.012 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:08:26.013 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:08:33.660 [DEBUG] [Thread-22616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:08:41.213 [DEBUG] [Thread-22617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:08:48.705 [DEBUG] [Thread-22618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:08:53.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:08:53.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:08:53.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
2026-04-15T17:08:55.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 8, 13), 8.51643, 56.6038, 0.0, 14.6804, 14.1393, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:08:55.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:08:13
2026-04-15T17:08:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:08:55.945 [DEBUG] [Thread-22619] [transport.py] [_log()] starting thread (client mode): 0xf1336aa0
2026-04-15T17:08:55.945 [DEBUG] [Thread-22619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:08:55.965 [DEBUG] [Thread-22619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:08:55.965 [INFO] [Thread-22619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:08:55.968 [DEBUG] [Thread-22619] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:08:55.968 [DEBUG] [Thread-22619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:08:55.968 [DEBUG] [Thread-22619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:08:55.969 [DEBUG] [Thread-22619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:08:55.969 [DEBUG] [Thread-22619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:08:55.969 [DEBUG] [Thread-22619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:08:55.969 [DEBUG] [Thread-22619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:08:55.969 [DEBUG] [Thread-22619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:08:55.969 [DEBUG] [Thread-22619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:08:55.969 [DEBUG] [Thread-22619] [transport.py] [_log()] client lang: <none>
2026-04-15T17:08:55.969 [DEBUG] [Thread-22619] [transport.py] [_log()] server lang: <none>
2026-04-15T17:08:55.969 [DEBUG] [Thread-22619] [transport.py] [_log()] kex follows: False
2026-04-15T17:08:55.969 [DEBUG] [Thread-22619] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:08:55.969 [DEBUG] [Thread-22619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:08:55.969 [DEBUG] [Thread-22619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:08:55.969 [DEBUG] [Thread-22619] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:08:55.970 [DEBUG] [Thread-22619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:08:55.970 [DEBUG] [Thread-22619] [transport.py] [_log()] Compression: none
2026-04-15T17:08:55.970 [DEBUG] [Thread-22619] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:08:55.986 [DEBUG] [Thread-22619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:08:55.987 [DEBUG] [Thread-22619] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:08:55.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:08:55.987 [DEBUG] [Thread-22619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:08:55.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:08:55.988 [DEBUG] [Thread-22619] [transport.py] [_log()] userauth is OK
2026-04-15T17:08:55.988 [DEBUG] [Thread-22619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:08:55.988 [DEBUG] [Thread-22619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:08:55.989 [DEBUG] [Thread-22619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:08:55.989 [DEBUG] [Thread-22619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:08:56.008 [INFO] [Thread-22619] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:08:56.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:08:56.647 [DEBUG] [Thread-22619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:08:56.648 [DEBUG] [Thread-22619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:08:56.648 [DEBUG] [Thread-22619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:08:56.688 [DEBUG] [Thread-22619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:08:56.688 [DEBUG] [Thread-22619] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:08:56.691 [DEBUG] [Thread-22619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:08:56.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:08:56.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:08:56.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:08:56.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:08:56.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:08:56.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:08:56.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:08:56.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:08:56.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:08:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.631038 -999.00  +14.10  17.33     64   +7.50 1 2 1 1 1   887    0 7.15 2.37 ----- 17.1 17.3 296.0 21.9 18.2 -25.9 17.9 -23.5 18.7 -20.7 19.5 -23.2
2026-04-15T17:08:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:08:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:08:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.631038
2026-04-15T17:08:56.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:08:56.716 [DEBUG] [Thread-22619] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:08:56.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:08:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:08:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:08:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:08:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:08:13', tmtdew=8.51643, humidity=56.6038, cloud=0.0, wind=14.6804, temperature=14.1393, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:08:41.683', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:08:56.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:08:56.972 [DEBUG] [Thread-22622] [transport.py] [_log()] starting thread (client mode): 0xee91df00
2026-04-15T17:08:56.972 [DEBUG] [Thread-22622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:08:56.986 [DEBUG] [Thread-22622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:08:56.986 [INFO] [Thread-22622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:08:56.993 [DEBUG] [Thread-22622] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:08:56.994 [DEBUG] [Thread-22622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:08:56.994 [DEBUG] [Thread-22622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:08:56.994 [DEBUG] [Thread-22622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:08:56.994 [DEBUG] [Thread-22622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:08:56.994 [DEBUG] [Thread-22622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:08:56.994 [DEBUG] [Thread-22622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:08:56.994 [DEBUG] [Thread-22622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:08:56.994 [DEBUG] [Thread-22622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:08:56.994 [DEBUG] [Thread-22622] [transport.py] [_log()] client lang: <none>
2026-04-15T17:08:56.994 [DEBUG] [Thread-22622] [transport.py] [_log()] server lang: <none>
2026-04-15T17:08:56.994 [DEBUG] [Thread-22622] [transport.py] [_log()] kex follows: False
2026-04-15T17:08:56.995 [DEBUG] [Thread-22622] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:08:56.995 [DEBUG] [Thread-22622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:08:56.995 [DEBUG] [Thread-22622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:08:56.995 [DEBUG] [Thread-22622] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:08:56.995 [DEBUG] [Thread-22622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:08:56.995 [DEBUG] [Thread-22622] [transport.py] [_log()] Compression: none
2026-04-15T17:08:56.995 [DEBUG] [Thread-22622] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:08:57.051 [DEBUG] [Thread-22622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:08:57.051 [DEBUG] [Thread-22622] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:08:57.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:08:57.052 [DEBUG] [Thread-22622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:08:57.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:08:57.106 [DEBUG] [Thread-22622] [transport.py] [_log()] userauth is OK
2026-04-15T17:08:57.107 [DEBUG] [Thread-22622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:08:57.107 [DEBUG] [Thread-22622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:08:57.107 [DEBUG] [Thread-22622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:08:57.107 [DEBUG] [Thread-22622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:08:57.133 [INFO] [Thread-22622] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:08:57.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:08:57.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:08:57.957 [DEBUG] [Thread-22622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:08:57.957 [DEBUG] [Thread-22622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:08:58.005 [DEBUG] [Thread-22622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:08:58.005 [DEBUG] [Thread-22622] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:08:58.013 [DEBUG] [Thread-22622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:08:58.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:08: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')
2026-04-15T17:08:58.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
2026-04-15T17:08:58.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:08:58.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:08:58.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:08:58.048 [DEBUG] [Thread-22622] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:09:03.737 [DEBUG] [Thread-22624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:09:18.781 [DEBUG] [Thread-22625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:09:26.151 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:09:26.152 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:09:28.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:09:28.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:09:28.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T17:09:29.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 8, 48), 9.09538, 54.3401, 0.0, 16.4794, 14.5454, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:09:29.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:08:48
2026-04-15T17:09:29.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:09:30.247 [DEBUG] [Thread-22626] [transport.py] [_log()] starting thread (client mode): 0xf13504f0
2026-04-15T17:09:30.248 [DEBUG] [Thread-22626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:09:30.268 [DEBUG] [Thread-22626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:09:30.268 [INFO] [Thread-22626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:09:30.271 [DEBUG] [Thread-22626] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:09:30.271 [DEBUG] [Thread-22626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:09:30.271 [DEBUG] [Thread-22626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:09:30.272 [DEBUG] [Thread-22626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:09:30.272 [DEBUG] [Thread-22626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:09:30.272 [DEBUG] [Thread-22626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:09:30.272 [DEBUG] [Thread-22626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:09:30.272 [DEBUG] [Thread-22626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:09:30.272 [DEBUG] [Thread-22626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:09:30.272 [DEBUG] [Thread-22626] [transport.py] [_log()] client lang: <none>
2026-04-15T17:09:30.272 [DEBUG] [Thread-22626] [transport.py] [_log()] server lang: <none>
2026-04-15T17:09:30.272 [DEBUG] [Thread-22626] [transport.py] [_log()] kex follows: False
2026-04-15T17:09:30.272 [DEBUG] [Thread-22626] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:09:30.272 [DEBUG] [Thread-22626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:09:30.273 [DEBUG] [Thread-22626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:09:30.273 [DEBUG] [Thread-22626] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:09:30.273 [DEBUG] [Thread-22626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:09:30.273 [DEBUG] [Thread-22626] [transport.py] [_log()] Compression: none
2026-04-15T17:09:30.273 [DEBUG] [Thread-22626] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:09:30.289 [DEBUG] [Thread-22626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:09:30.289 [DEBUG] [Thread-22626] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:09:30.290 [DEBUG] [Thread-22626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:09:30.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:09:30.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:09:30.291 [DEBUG] [Thread-22626] [transport.py] [_log()] userauth is OK
2026-04-15T17:09:30.291 [DEBUG] [Thread-22626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:09:30.291 [DEBUG] [Thread-22626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:09:30.291 [DEBUG] [Thread-22626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:09:30.291 [DEBUG] [Thread-22626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:09:30.309 [INFO] [Thread-22626] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:09:30.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:09:30.933 [DEBUG] [Thread-22626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:09:30.934 [DEBUG] [Thread-22626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:09:30.934 [DEBUG] [Thread-22626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:09:30.974 [DEBUG] [Thread-22626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:09:30.974 [DEBUG] [Thread-22626] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:09:30.977 [DEBUG] [Thread-22626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:09:30.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:09:30.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:09:30.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:09:30.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:09:30.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:09:30.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:09:30.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:09:30.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:09:31.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:09:31.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.631385 -999.00  +14.30  13.72     64   +7.80 1 2 1 1 1   887    0 7.16 1.63 ----- 16.0 13.7 278.2 21.9 18.2 -25.2 17.9 -23.0 18.8 -19.8 19.4 -23.2
2026-04-15T17:09:31.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:09:31.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:09:31.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.631385
2026-04-15T17:09:31.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:09:31.001 [DEBUG] [Thread-22626] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:09:31.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:09:31.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:09:31.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:09:31.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:09:31.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:08:48', tmtdew=9.09538, humidity=54.3401, cloud=0.0, wind=16.4794, temperature=14.5454, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:09:11.664', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:09:31.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:09:31.259 [DEBUG] [Thread-22629] [transport.py] [_log()] starting thread (client mode): 0xee91d840
2026-04-15T17:09:31.259 [DEBUG] [Thread-22629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:09:31.274 [DEBUG] [Thread-22629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:09:31.275 [INFO] [Thread-22629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:09:31.282 [DEBUG] [Thread-22629] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:09:31.282 [DEBUG] [Thread-22629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:09:31.282 [DEBUG] [Thread-22629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:09:31.282 [DEBUG] [Thread-22629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:09:31.282 [DEBUG] [Thread-22629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:09:31.283 [DEBUG] [Thread-22629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:09:31.283 [DEBUG] [Thread-22629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:09:31.283 [DEBUG] [Thread-22629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:09:31.283 [DEBUG] [Thread-22629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:09:31.283 [DEBUG] [Thread-22629] [transport.py] [_log()] client lang: <none>
2026-04-15T17:09:31.283 [DEBUG] [Thread-22629] [transport.py] [_log()] server lang: <none>
2026-04-15T17:09:31.283 [DEBUG] [Thread-22629] [transport.py] [_log()] kex follows: False
2026-04-15T17:09:31.283 [DEBUG] [Thread-22629] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:09:31.283 [DEBUG] [Thread-22629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:09:31.283 [DEBUG] [Thread-22629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:09:31.284 [DEBUG] [Thread-22629] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:09:31.284 [DEBUG] [Thread-22629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:09:31.284 [DEBUG] [Thread-22629] [transport.py] [_log()] Compression: none
2026-04-15T17:09:31.284 [DEBUG] [Thread-22629] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:09:31.339 [DEBUG] [Thread-22629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:09:31.340 [DEBUG] [Thread-22629] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:09:31.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:09:31.340 [DEBUG] [Thread-22629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:09:31.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:09:31.396 [DEBUG] [Thread-22629] [transport.py] [_log()] userauth is OK
2026-04-15T17:09:31.397 [DEBUG] [Thread-22629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:09:31.397 [DEBUG] [Thread-22629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:09:31.397 [DEBUG] [Thread-22629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:09:31.397 [DEBUG] [Thread-22629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:09:31.422 [INFO] [Thread-22629] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:09:31.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:09:31.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:09:32.251 [DEBUG] [Thread-22629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:09:32.251 [DEBUG] [Thread-22629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:09:32.300 [DEBUG] [Thread-22629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:09:32.300 [DEBUG] [Thread-22629] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:09:32.310 [DEBUG] [Thread-22629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:09:32.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:09:32.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')
2026-04-15T17:09:32.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
2026-04-15T17:09:32.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:09:32.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:09:32.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:09:32.356 [DEBUG] [Thread-22629] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:09:33.813 [DEBUG] [Thread-22631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:09:41.327 [DEBUG] [Thread-22632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:09:48.855 [DEBUG] [Thread-22633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:10:02.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:10:02.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:10:02.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
2026-04-15T17:10:03.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 9, 24), 8.5622, 56.637, 0.0, 16.357, 14.2056, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:10:03.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:09:24
2026-04-15T17:10:03.887 [DEBUG] [Thread-22634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:10:04.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:10:04.679 [DEBUG] [Thread-22635] [transport.py] [_log()] starting thread (client mode): 0xf17c3b50
2026-04-15T17:10:04.679 [DEBUG] [Thread-22635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:10:04.700 [DEBUG] [Thread-22635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:10:04.700 [INFO] [Thread-22635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:10:04.701 [DEBUG] [Thread-22635] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:10:04.701 [DEBUG] [Thread-22635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:10:04.701 [DEBUG] [Thread-22635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:10:04.702 [DEBUG] [Thread-22635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:10:04.702 [DEBUG] [Thread-22635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:10:04.702 [DEBUG] [Thread-22635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:10:04.702 [DEBUG] [Thread-22635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:10:04.702 [DEBUG] [Thread-22635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:10:04.702 [DEBUG] [Thread-22635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:10:04.702 [DEBUG] [Thread-22635] [transport.py] [_log()] client lang: <none>
2026-04-15T17:10:04.702 [DEBUG] [Thread-22635] [transport.py] [_log()] server lang: <none>
2026-04-15T17:10:04.702 [DEBUG] [Thread-22635] [transport.py] [_log()] kex follows: False
2026-04-15T17:10:04.702 [DEBUG] [Thread-22635] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:10:04.702 [DEBUG] [Thread-22635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:10:04.702 [DEBUG] [Thread-22635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:10:04.703 [DEBUG] [Thread-22635] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:10:04.703 [DEBUG] [Thread-22635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:10:04.703 [DEBUG] [Thread-22635] [transport.py] [_log()] Compression: none
2026-04-15T17:10:04.703 [DEBUG] [Thread-22635] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:10:04.711 [DEBUG] [Thread-22635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:10:04.711 [DEBUG] [Thread-22635] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:10:04.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:10:04.712 [DEBUG] [Thread-22635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:10:04.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:10:04.713 [DEBUG] [Thread-22635] [transport.py] [_log()] userauth is OK
2026-04-15T17:10:04.713 [DEBUG] [Thread-22635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:10:04.713 [DEBUG] [Thread-22635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:10:04.713 [DEBUG] [Thread-22635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:10:04.713 [DEBUG] [Thread-22635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:10:04.736 [INFO] [Thread-22635] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:10:04.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:10:07.580 [DEBUG] [Thread-22635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:10:07.580 [DEBUG] [Thread-22635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:10:07.581 [DEBUG] [Thread-22635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:10:07.621 [DEBUG] [Thread-22635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:10:07.621 [DEBUG] [Thread-22635] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:10:07.624 [DEBUG] [Thread-22635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:10:07.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:10:07.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:10:07.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:10:07.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:10:07.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:10:07.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:10:07.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:10:07.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:10:07.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:10:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.631732 -999.00  +14.40  15.62     62   +7.30 1 2 1 1 1   887    0 7.21 3.92 ----- 15.8 15.6 312.6 21.5 18.1 -26.5 17.9 -23.7 18.7 -21.8 19.4 -25.2
2026-04-15T17:10:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:10:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:10:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.631732
2026-04-15T17:10:07.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:10:07.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:10:07.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:10:07.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:10:07.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:10:07.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:09:24', tmtdew=8.5622, humidity=56.637, cloud=0.0, wind=16.357, temperature=14.2056, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:09:41.645', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:10:07.651 [DEBUG] [Thread-22635] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:10:07.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:10:07.906 [DEBUG] [Thread-22638] [transport.py] [_log()] starting thread (client mode): 0xf13528f0
2026-04-15T17:10:07.906 [DEBUG] [Thread-22638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:10:07.925 [DEBUG] [Thread-22638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:10:07.925 [INFO] [Thread-22638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:10:07.932 [DEBUG] [Thread-22638] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] client lang: <none>
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] server lang: <none>
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] kex follows: False
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:10:07.933 [DEBUG] [Thread-22638] [transport.py] [_log()] Compression: none
2026-04-15T17:10:07.934 [DEBUG] [Thread-22638] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:10:07.989 [DEBUG] [Thread-22638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:10:07.990 [DEBUG] [Thread-22638] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:10:07.990 [DEBUG] [Thread-22638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:10:07.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:10:07.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:10:08.046 [DEBUG] [Thread-22638] [transport.py] [_log()] userauth is OK
2026-04-15T17:10:08.046 [DEBUG] [Thread-22638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:10:08.046 [DEBUG] [Thread-22638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:10:08.046 [DEBUG] [Thread-22638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:10:08.046 [DEBUG] [Thread-22638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:10:08.064 [INFO] [Thread-22638] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:10:08.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:10:08.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:10:08.886 [DEBUG] [Thread-22638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:10:08.887 [DEBUG] [Thread-22638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:10:08.934 [DEBUG] [Thread-22638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:10:08.935 [DEBUG] [Thread-22638] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:10:08.944 [DEBUG] [Thread-22638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:10:08.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:10:08.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')
2026-04-15T17:10:08.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
2026-04-15T17:10:08.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:10:08.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:10:08.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:10:08.979 [DEBUG] [Thread-22638] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:10:18.919 [DEBUG] [Thread-22640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:10:26.293 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:10:26.293 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:10:33.968 [DEBUG] [Thread-22641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:10:38.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:10:38.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:10:38.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T17:10:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 9, 24), 8.4622, 56.637, 0.0, 16.357, 14.0556, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:10:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:09:24
2026-04-15T17:10:40.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:10:41.133 [DEBUG] [Thread-22642] [transport.py] [_log()] starting thread (client mode): 0xf1335210
2026-04-15T17:10:41.133 [DEBUG] [Thread-22642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:10:41.153 [DEBUG] [Thread-22642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:10:41.153 [INFO] [Thread-22642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:10:41.156 [DEBUG] [Thread-22642] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:10:41.156 [DEBUG] [Thread-22642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:10:41.156 [DEBUG] [Thread-22642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:10:41.156 [DEBUG] [Thread-22642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:10:41.157 [DEBUG] [Thread-22642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:10:41.157 [DEBUG] [Thread-22642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:10:41.157 [DEBUG] [Thread-22642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:10:41.157 [DEBUG] [Thread-22642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:10:41.157 [DEBUG] [Thread-22642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:10:41.157 [DEBUG] [Thread-22642] [transport.py] [_log()] client lang: <none>
2026-04-15T17:10:41.157 [DEBUG] [Thread-22642] [transport.py] [_log()] server lang: <none>
2026-04-15T17:10:41.157 [DEBUG] [Thread-22642] [transport.py] [_log()] kex follows: False
2026-04-15T17:10:41.157 [DEBUG] [Thread-22642] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:10:41.157 [DEBUG] [Thread-22642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:10:41.157 [DEBUG] [Thread-22642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:10:41.158 [DEBUG] [Thread-22642] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:10:41.158 [DEBUG] [Thread-22642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:10:41.158 [DEBUG] [Thread-22642] [transport.py] [_log()] Compression: none
2026-04-15T17:10:41.158 [DEBUG] [Thread-22642] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:10:41.175 [DEBUG] [Thread-22642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:10:41.175 [DEBUG] [Thread-22642] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:10:41.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:10:41.176 [DEBUG] [Thread-22642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:10:41.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:10:41.177 [DEBUG] [Thread-22642] [transport.py] [_log()] userauth is OK
2026-04-15T17:10:41.177 [DEBUG] [Thread-22642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:10:41.177 [DEBUG] [Thread-22642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:10:41.177 [DEBUG] [Thread-22642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:10:41.177 [DEBUG] [Thread-22642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:10:41.210 [INFO] [Thread-22642] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:10:41.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:10:41.439 [DEBUG] [Thread-22644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:10:41.945 [DEBUG] [Thread-22642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:10:41.945 [DEBUG] [Thread-22642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:10:41.946 [DEBUG] [Thread-22642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:10:41.986 [DEBUG] [Thread-22642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:10:41.986 [DEBUG] [Thread-22642] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:10:41.989 [DEBUG] [Thread-22642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:10:42.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:10:42.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:10:42.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:10:42.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:10:42.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:10:42.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:10:42.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:10:42.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:10:42.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:10:42.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.632079 -999.00  +14.00  17.02     62   +6.90 1 1 1 1 1   887    0 7.32 7.21 ----- 17.2 17.0 317.0 23.8 17.9 -27.1 17.8 -24.5 18.4 -22.8 19.0 -25.9
2026-04-15T17:10:42.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:10:42.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:10:42.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.632079
2026-04-15T17:10:42.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:10:42.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:10:42.019 [DEBUG] [Thread-22642] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:10:42.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:10:42.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:10:42.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:10:42.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:09:24', tmtdew=8.4622, humidity=56.637, cloud=0.0, wind=16.357, temperature=14.0556, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:10:11.626', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:10:42.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:10:42.277 [DEBUG] [Thread-22646] [transport.py] [_log()] starting thread (client mode): 0xf1335750
2026-04-15T17:10:42.277 [DEBUG] [Thread-22646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:10:42.291 [DEBUG] [Thread-22646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:10:42.292 [INFO] [Thread-22646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:10:42.299 [DEBUG] [Thread-22646] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:10:42.299 [DEBUG] [Thread-22646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:10:42.299 [DEBUG] [Thread-22646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:10:42.299 [DEBUG] [Thread-22646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:10:42.299 [DEBUG] [Thread-22646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:10:42.299 [DEBUG] [Thread-22646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:10:42.299 [DEBUG] [Thread-22646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:10:42.299 [DEBUG] [Thread-22646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:10:42.299 [DEBUG] [Thread-22646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:10:42.299 [DEBUG] [Thread-22646] [transport.py] [_log()] client lang: <none>
2026-04-15T17:10:42.300 [DEBUG] [Thread-22646] [transport.py] [_log()] server lang: <none>
2026-04-15T17:10:42.300 [DEBUG] [Thread-22646] [transport.py] [_log()] kex follows: False
2026-04-15T17:10:42.300 [DEBUG] [Thread-22646] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:10:42.300 [DEBUG] [Thread-22646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:10:42.300 [DEBUG] [Thread-22646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:10:42.300 [DEBUG] [Thread-22646] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:10:42.300 [DEBUG] [Thread-22646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:10:42.300 [DEBUG] [Thread-22646] [transport.py] [_log()] Compression: none
2026-04-15T17:10:42.301 [DEBUG] [Thread-22646] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:10:42.355 [DEBUG] [Thread-22646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:10:42.356 [DEBUG] [Thread-22646] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:10:42.356 [DEBUG] [Thread-22646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:10:42.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:10:42.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:10:42.412 [DEBUG] [Thread-22646] [transport.py] [_log()] userauth is OK
2026-04-15T17:10:42.412 [DEBUG] [Thread-22646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:10:42.412 [DEBUG] [Thread-22646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:10:42.413 [DEBUG] [Thread-22646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:10:42.413 [DEBUG] [Thread-22646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:10:42.438 [INFO] [Thread-22646] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:10:42.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:10:42.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:10:43.239 [DEBUG] [Thread-22646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:10:43.239 [DEBUG] [Thread-22646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:10:43.287 [DEBUG] [Thread-22646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:10:43.287 [DEBUG] [Thread-22646] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:10:43.296 [DEBUG] [Thread-22646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:10:43.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:10:43.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')
2026-04-15T17:10:43.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') -> 00000000
2026-04-15T17:10:43.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:10:43.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:10:43.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:10:43.332 [DEBUG] [Thread-22646] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:10:48.999 [DEBUG] [Thread-22648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:11:04.042 [DEBUG] [Thread-22649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:11:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:11:13.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:11:13.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
2026-04-15T17:11:14.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 10, 35), 9.01389, 54.6054, 0.0, 14.1156, 14.38, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:11:14.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:10:35
2026-04-15T17:11:15.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:11:15.513 [DEBUG] [Thread-22650] [transport.py] [_log()] starting thread (client mode): 0xf1337430
2026-04-15T17:11:15.514 [DEBUG] [Thread-22650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:11:15.534 [DEBUG] [Thread-22650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:11:15.534 [INFO] [Thread-22650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:11:15.537 [DEBUG] [Thread-22650] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:11:15.538 [DEBUG] [Thread-22650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:11:15.538 [DEBUG] [Thread-22650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:11:15.538 [DEBUG] [Thread-22650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:11:15.538 [DEBUG] [Thread-22650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:11:15.538 [DEBUG] [Thread-22650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:11:15.538 [DEBUG] [Thread-22650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:11:15.538 [DEBUG] [Thread-22650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:11:15.538 [DEBUG] [Thread-22650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:11:15.538 [DEBUG] [Thread-22650] [transport.py] [_log()] client lang: <none>
2026-04-15T17:11:15.538 [DEBUG] [Thread-22650] [transport.py] [_log()] server lang: <none>
2026-04-15T17:11:15.538 [DEBUG] [Thread-22650] [transport.py] [_log()] kex follows: False
2026-04-15T17:11:15.539 [DEBUG] [Thread-22650] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:11:15.539 [DEBUG] [Thread-22650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:11:15.539 [DEBUG] [Thread-22650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:11:15.539 [DEBUG] [Thread-22650] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:11:15.539 [DEBUG] [Thread-22650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:11:15.539 [DEBUG] [Thread-22650] [transport.py] [_log()] Compression: none
2026-04-15T17:11:15.539 [DEBUG] [Thread-22650] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:11:15.556 [DEBUG] [Thread-22650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:11:15.556 [DEBUG] [Thread-22650] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:11:15.557 [DEBUG] [Thread-22650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:11:15.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:11:15.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:11:15.558 [DEBUG] [Thread-22650] [transport.py] [_log()] userauth is OK
2026-04-15T17:11:15.558 [DEBUG] [Thread-22650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:11:15.558 [DEBUG] [Thread-22650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:11:15.558 [DEBUG] [Thread-22650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:11:15.558 [DEBUG] [Thread-22650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:11:15.577 [INFO] [Thread-22650] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:11:15.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:11:16.377 [DEBUG] [Thread-22650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:11:16.377 [DEBUG] [Thread-22650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:11:16.378 [DEBUG] [Thread-22650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:11:16.420 [DEBUG] [Thread-22650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:11:16.420 [DEBUG] [Thread-22650] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:11:16.422 [DEBUG] [Thread-22650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:11:16.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:11:16.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:11:16.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:11:16.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:11:16.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:11:16.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:11:16.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:11:16.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:11:16.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:11:16.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.632427 -999.00  +13.80  18.71     63   +6.90 1 1 1 1 1   887    0 7.38 8.91 ----- 15.4 18.7 311.8 21.7 17.8 -26.6 17.6 -24.2 18.1 -22.6 18.7 -26.2
2026-04-15T17:11:16.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:11:16.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:11:16.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.632427
2026-04-15T17:11:16.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:11:16.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:11:16.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:11:16.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:11:16.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:11:16.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:10:35', tmtdew=9.01389, humidity=54.6054, cloud=0.0, wind=14.1156, temperature=14.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:10:41.693', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:11:16.442 [DEBUG] [Thread-22650] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:11:16.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:11:16.660 [DEBUG] [Thread-22653] [transport.py] [_log()] starting thread (client mode): 0xf13528f0
2026-04-15T17:11:16.660 [DEBUG] [Thread-22653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:11:16.674 [DEBUG] [Thread-22653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:11:16.674 [INFO] [Thread-22653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:11:16.681 [DEBUG] [Thread-22653] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:11:16.681 [DEBUG] [Thread-22653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:11:16.682 [DEBUG] [Thread-22653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:11:16.682 [DEBUG] [Thread-22653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:11:16.682 [DEBUG] [Thread-22653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:11:16.682 [DEBUG] [Thread-22653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:11:16.682 [DEBUG] [Thread-22653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:11:16.682 [DEBUG] [Thread-22653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:11:16.682 [DEBUG] [Thread-22653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:11:16.682 [DEBUG] [Thread-22653] [transport.py] [_log()] client lang: <none>
2026-04-15T17:11:16.682 [DEBUG] [Thread-22653] [transport.py] [_log()] server lang: <none>
2026-04-15T17:11:16.682 [DEBUG] [Thread-22653] [transport.py] [_log()] kex follows: False
2026-04-15T17:11:16.682 [DEBUG] [Thread-22653] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:11:16.682 [DEBUG] [Thread-22653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:11:16.683 [DEBUG] [Thread-22653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:11:16.683 [DEBUG] [Thread-22653] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:11:16.683 [DEBUG] [Thread-22653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:11:16.683 [DEBUG] [Thread-22653] [transport.py] [_log()] Compression: none
2026-04-15T17:11:16.683 [DEBUG] [Thread-22653] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:11:16.737 [DEBUG] [Thread-22653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:11:16.738 [DEBUG] [Thread-22653] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:11:16.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:11:16.739 [DEBUG] [Thread-22653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:11:16.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:11:16.794 [DEBUG] [Thread-22653] [transport.py] [_log()] userauth is OK
2026-04-15T17:11:16.795 [DEBUG] [Thread-22653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:11:16.795 [DEBUG] [Thread-22653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:11:16.795 [DEBUG] [Thread-22653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:11:16.795 [DEBUG] [Thread-22653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:11:16.819 [INFO] [Thread-22653] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:11:16.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:11:16.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:11:17.667 [DEBUG] [Thread-22653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:11:17.668 [DEBUG] [Thread-22653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:11:17.715 [DEBUG] [Thread-22653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:11:17.715 [DEBUG] [Thread-22653] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:11:17.724 [DEBUG] [Thread-22653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:11:17.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:11:17.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')
2026-04-15T17:11:17.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
2026-04-15T17:11:17.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:11:17.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:11:17.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:11:17.758 [DEBUG] [Thread-22653] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:11:19.074 [DEBUG] [Thread-22655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:11:26.431 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:11:26.432 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:11:34.118 [DEBUG] [Thread-22656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:11:41.529 [DEBUG] [Thread-22657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:11:47.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:11:47.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:11:47.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
2026-04-15T17:11:49.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 11, 11), 8.25065, 57.5512, 0.0, 15.5984, 14.0725, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:11:49.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:11:11
2026-04-15T17:11:49.151 [DEBUG] [Thread-22658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:11:49.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:11:49.955 [DEBUG] [Thread-22659] [transport.py] [_log()] starting thread (client mode): 0xf1336d70
2026-04-15T17:11:49.956 [DEBUG] [Thread-22659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:11:49.975 [DEBUG] [Thread-22659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:11:49.975 [INFO] [Thread-22659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:11:49.976 [DEBUG] [Thread-22659] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:11:49.977 [DEBUG] [Thread-22659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:11:49.977 [DEBUG] [Thread-22659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:11:49.977 [DEBUG] [Thread-22659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:11:49.977 [DEBUG] [Thread-22659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:11:49.977 [DEBUG] [Thread-22659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:11:49.977 [DEBUG] [Thread-22659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:11:49.977 [DEBUG] [Thread-22659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:11:49.977 [DEBUG] [Thread-22659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:11:49.977 [DEBUG] [Thread-22659] [transport.py] [_log()] client lang: <none>
2026-04-15T17:11:49.977 [DEBUG] [Thread-22659] [transport.py] [_log()] server lang: <none>
2026-04-15T17:11:49.977 [DEBUG] [Thread-22659] [transport.py] [_log()] kex follows: False
2026-04-15T17:11:49.977 [DEBUG] [Thread-22659] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:11:49.977 [DEBUG] [Thread-22659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:11:49.977 [DEBUG] [Thread-22659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:11:49.978 [DEBUG] [Thread-22659] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:11:49.978 [DEBUG] [Thread-22659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:11:49.978 [DEBUG] [Thread-22659] [transport.py] [_log()] Compression: none
2026-04-15T17:11:49.978 [DEBUG] [Thread-22659] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:11:49.990 [DEBUG] [Thread-22659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:11:49.991 [DEBUG] [Thread-22659] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:11:49.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:11:49.991 [DEBUG] [Thread-22659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:11:49.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:11:49.992 [DEBUG] [Thread-22659] [transport.py] [_log()] userauth is OK
2026-04-15T17:11:49.993 [DEBUG] [Thread-22659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:11:49.993 [DEBUG] [Thread-22659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:11:49.993 [DEBUG] [Thread-22659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:11:49.993 [DEBUG] [Thread-22659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:11:50.013 [INFO] [Thread-22659] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:11:50.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:11:50.821 [DEBUG] [Thread-22659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:11:50.821 [DEBUG] [Thread-22659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:11:50.822 [DEBUG] [Thread-22659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:11:50.862 [DEBUG] [Thread-22659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:11:50.862 [DEBUG] [Thread-22659] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:11:50.865 [DEBUG] [Thread-22659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:11:50.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:11:50.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:11:50.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:11:50.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:11:50.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:11:50.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:11:50.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:11:50.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:11:50.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:11:50.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.632774 -999.00  +13.80  10.65     63   +7.00 1 1 1 1 1   887    0 7.34 8.13 ----- 9.1 10.7 323.1 18.4 17.7 -26.5 17.6 -24.5 18.0 -22.4 18.5 -26.0
2026-04-15T17:11:50.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:11:50.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:11:50.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.632774
2026-04-15T17:11:50.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:11:50.890 [DEBUG] [Thread-22659] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:11:50.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:11:50.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:11:50.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:11:50.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:11:50.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:11:11', tmtdew=8.25065, humidity=57.5512, cloud=0.0, wind=15.5984, temperature=14.0725, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:11:11.674', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:11:51.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:11:51.154 [DEBUG] [Thread-22662] [transport.py] [_log()] starting thread (client mode): 0xf1335960
2026-04-15T17:11:51.154 [DEBUG] [Thread-22662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:11:51.173 [DEBUG] [Thread-22662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:11:51.173 [INFO] [Thread-22662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:11:51.180 [DEBUG] [Thread-22662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:11:51.180 [DEBUG] [Thread-22662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:11:51.180 [DEBUG] [Thread-22662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:11:51.180 [DEBUG] [Thread-22662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:11:51.180 [DEBUG] [Thread-22662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:11:51.180 [DEBUG] [Thread-22662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:11:51.181 [DEBUG] [Thread-22662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:11:51.181 [DEBUG] [Thread-22662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:11:51.181 [DEBUG] [Thread-22662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:11:51.181 [DEBUG] [Thread-22662] [transport.py] [_log()] client lang: <none>
2026-04-15T17:11:51.181 [DEBUG] [Thread-22662] [transport.py] [_log()] server lang: <none>
2026-04-15T17:11:51.181 [DEBUG] [Thread-22662] [transport.py] [_log()] kex follows: False
2026-04-15T17:11:51.181 [DEBUG] [Thread-22662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:11:51.181 [DEBUG] [Thread-22662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:11:51.181 [DEBUG] [Thread-22662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:11:51.181 [DEBUG] [Thread-22662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:11:51.181 [DEBUG] [Thread-22662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:11:51.182 [DEBUG] [Thread-22662] [transport.py] [_log()] Compression: none
2026-04-15T17:11:51.182 [DEBUG] [Thread-22662] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:11:51.238 [DEBUG] [Thread-22662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:11:51.239 [DEBUG] [Thread-22662] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:11:51.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:11:51.239 [DEBUG] [Thread-22662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:11:51.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:11:51.297 [DEBUG] [Thread-22662] [transport.py] [_log()] userauth is OK
2026-04-15T17:11:51.297 [DEBUG] [Thread-22662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:11:51.297 [DEBUG] [Thread-22662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:11:51.297 [DEBUG] [Thread-22662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:11:51.297 [DEBUG] [Thread-22662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:11:51.324 [INFO] [Thread-22662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:11:51.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:11:51.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:11:52.152 [DEBUG] [Thread-22662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:11:52.152 [DEBUG] [Thread-22662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:11:52.200 [DEBUG] [Thread-22662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:11:52.200 [DEBUG] [Thread-22662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:11:52.209 [DEBUG] [Thread-22662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:11:52.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:11:52.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')
2026-04-15T17:11:52.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
2026-04-15T17:11:52.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:11:52.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:11:52.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:11:52.247 [DEBUG] [Thread-22662] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:12:04.182 [DEBUG] [Thread-22664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:12:19.225 [DEBUG] [Thread-22665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:12:22.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:12:22.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:12:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T17:12:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 11, 46), 9.09533, 54.3404, 0.0, 13.1278, 14.5457, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:12:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:11:46
2026-04-15T17:12:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:12:24.478 [DEBUG] [Thread-22666] [transport.py] [_log()] starting thread (client mode): 0xf13ca500
2026-04-15T17:12:24.478 [DEBUG] [Thread-22666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:12:24.498 [DEBUG] [Thread-22666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:12:24.498 [INFO] [Thread-22666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:12:24.500 [DEBUG] [Thread-22666] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:12:24.500 [DEBUG] [Thread-22666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:12:24.500 [DEBUG] [Thread-22666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:12:24.500 [DEBUG] [Thread-22666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:12:24.500 [DEBUG] [Thread-22666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:12:24.500 [DEBUG] [Thread-22666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:12:24.500 [DEBUG] [Thread-22666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:12:24.501 [DEBUG] [Thread-22666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:12:24.501 [DEBUG] [Thread-22666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:12:24.501 [DEBUG] [Thread-22666] [transport.py] [_log()] client lang: <none>
2026-04-15T17:12:24.501 [DEBUG] [Thread-22666] [transport.py] [_log()] server lang: <none>
2026-04-15T17:12:24.501 [DEBUG] [Thread-22666] [transport.py] [_log()] kex follows: False
2026-04-15T17:12:24.501 [DEBUG] [Thread-22666] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:12:24.501 [DEBUG] [Thread-22666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:12:24.501 [DEBUG] [Thread-22666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:12:24.501 [DEBUG] [Thread-22666] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:12:24.501 [DEBUG] [Thread-22666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:12:24.501 [DEBUG] [Thread-22666] [transport.py] [_log()] Compression: none
2026-04-15T17:12:24.502 [DEBUG] [Thread-22666] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:12:24.510 [DEBUG] [Thread-22666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:12:24.510 [DEBUG] [Thread-22666] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:12:24.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:12:24.511 [DEBUG] [Thread-22666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:12:24.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:12:24.512 [DEBUG] [Thread-22666] [transport.py] [_log()] userauth is OK
2026-04-15T17:12:24.512 [DEBUG] [Thread-22666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:12:24.512 [DEBUG] [Thread-22666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:12:24.512 [DEBUG] [Thread-22666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:12:24.512 [DEBUG] [Thread-22666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:12:24.529 [INFO] [Thread-22666] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:12:24.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:12:25.303 [DEBUG] [Thread-22666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:12:25.304 [DEBUG] [Thread-22666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:12:25.304 [DEBUG] [Thread-22666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:12:25.344 [DEBUG] [Thread-22666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:12:25.344 [DEBUG] [Thread-22666] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:12:25.347 [DEBUG] [Thread-22666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:12:25.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:12:25.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:12:25.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:12:25.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:12:25.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:12:25.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:12:25.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:12:25.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:12:25.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:12:25.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.633121 -999.00  +13.70  21.97     63   +6.90 1 1 1 1 1   887    0 7.35 6.51 ----- 19.3 22.0 315.0 23.5 17.7 -27.4 17.5 -24.1 17.8 -23.1 18.3 -26.7
2026-04-15T17:12:25.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:12:25.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:12:25.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.633121
2026-04-15T17:12:25.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:12:25.370 [DEBUG] [Thread-22666] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:12:25.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:12:25.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:12:25.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:12:25.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:12:25.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:11:46', tmtdew=9.09533, humidity=54.3404, cloud=0.0, wind=13.1278, temperature=14.5457, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:11:41.654', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:12:25.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:12:25.623 [DEBUG] [Thread-22669] [transport.py] [_log()] starting thread (client mode): 0xf13fca30
2026-04-15T17:12:25.624 [DEBUG] [Thread-22669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:12:25.642 [DEBUG] [Thread-22669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:12:25.642 [INFO] [Thread-22669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:12:25.649 [DEBUG] [Thread-22669] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:12:25.649 [DEBUG] [Thread-22669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:12:25.649 [DEBUG] [Thread-22669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:12:25.650 [DEBUG] [Thread-22669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:12:25.650 [DEBUG] [Thread-22669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:12:25.650 [DEBUG] [Thread-22669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:12:25.650 [DEBUG] [Thread-22669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:12:25.650 [DEBUG] [Thread-22669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:12:25.650 [DEBUG] [Thread-22669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:12:25.650 [DEBUG] [Thread-22669] [transport.py] [_log()] client lang: <none>
2026-04-15T17:12:25.650 [DEBUG] [Thread-22669] [transport.py] [_log()] server lang: <none>
2026-04-15T17:12:25.650 [DEBUG] [Thread-22669] [transport.py] [_log()] kex follows: False
2026-04-15T17:12:25.650 [DEBUG] [Thread-22669] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:12:25.650 [DEBUG] [Thread-22669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:12:25.650 [DEBUG] [Thread-22669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:12:25.651 [DEBUG] [Thread-22669] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:12:25.651 [DEBUG] [Thread-22669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:12:25.651 [DEBUG] [Thread-22669] [transport.py] [_log()] Compression: none
2026-04-15T17:12:25.651 [DEBUG] [Thread-22669] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:12:25.706 [DEBUG] [Thread-22669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:12:25.707 [DEBUG] [Thread-22669] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:12:25.707 [DEBUG] [Thread-22669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:12:25.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:12:25.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:12:25.765 [DEBUG] [Thread-22669] [transport.py] [_log()] userauth is OK
2026-04-15T17:12:25.765 [DEBUG] [Thread-22669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:12:25.766 [DEBUG] [Thread-22669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:12:25.766 [DEBUG] [Thread-22669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:12:25.766 [DEBUG] [Thread-22669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:12:25.792 [INFO] [Thread-22669] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:12:25.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:12:25.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:12:26.580 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:12:26.581 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:12:26.650 [DEBUG] [Thread-22669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:12:26.650 [DEBUG] [Thread-22669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:12:26.699 [DEBUG] [Thread-22669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:12:26.700 [DEBUG] [Thread-22669] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:12:26.709 [DEBUG] [Thread-22669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:12:26.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:12:26.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')
2026-04-15T17:12:26.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') -> 00000000
2026-04-15T17:12:26.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:12:26.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:12:26.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:12:26.743 [DEBUG] [Thread-22669] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:12:34.258 [DEBUG] [Thread-22671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:12:41.635 [DEBUG] [Thread-22672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:12:49.300 [DEBUG] [Thread-22673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:12:56.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:12:56.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:12:56.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
2026-04-15T17:12:58.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 12, 22), 8.41681, 56.7696, 0.0, 13.9756, 13.8066, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:12:58.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:12:22
2026-04-15T17:12:58.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:12:58.879 [DEBUG] [Thread-22674] [transport.py] [_log()] starting thread (client mode): 0xee9aea70
2026-04-15T17:12:58.880 [DEBUG] [Thread-22674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:12:58.898 [DEBUG] [Thread-22674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:12:58.898 [INFO] [Thread-22674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:12:58.900 [DEBUG] [Thread-22674] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:12:58.900 [DEBUG] [Thread-22674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:12:58.900 [DEBUG] [Thread-22674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:12:58.900 [DEBUG] [Thread-22674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:12:58.900 [DEBUG] [Thread-22674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:12:58.900 [DEBUG] [Thread-22674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:12:58.900 [DEBUG] [Thread-22674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:12:58.900 [DEBUG] [Thread-22674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:12:58.900 [DEBUG] [Thread-22674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:12:58.900 [DEBUG] [Thread-22674] [transport.py] [_log()] client lang: <none>
2026-04-15T17:12:58.901 [DEBUG] [Thread-22674] [transport.py] [_log()] server lang: <none>
2026-04-15T17:12:58.901 [DEBUG] [Thread-22674] [transport.py] [_log()] kex follows: False
2026-04-15T17:12:58.901 [DEBUG] [Thread-22674] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:12:58.901 [DEBUG] [Thread-22674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:12:58.901 [DEBUG] [Thread-22674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:12:58.901 [DEBUG] [Thread-22674] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:12:58.901 [DEBUG] [Thread-22674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:12:58.901 [DEBUG] [Thread-22674] [transport.py] [_log()] Compression: none
2026-04-15T17:12:58.901 [DEBUG] [Thread-22674] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:12:58.910 [DEBUG] [Thread-22674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:12:58.910 [DEBUG] [Thread-22674] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:12:58.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:12:58.911 [DEBUG] [Thread-22674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:12:58.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:12:58.912 [DEBUG] [Thread-22674] [transport.py] [_log()] userauth is OK
2026-04-15T17:12:58.912 [DEBUG] [Thread-22674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:12:58.912 [DEBUG] [Thread-22674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:12:58.912 [DEBUG] [Thread-22674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:12:58.912 [DEBUG] [Thread-22674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:12:58.930 [INFO] [Thread-22674] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:12:58.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:12:59.687 [DEBUG] [Thread-22674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:12:59.687 [DEBUG] [Thread-22674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:12:59.688 [DEBUG] [Thread-22674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:12:59.728 [DEBUG] [Thread-22674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:12:59.728 [DEBUG] [Thread-22674] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:12:59.731 [DEBUG] [Thread-22674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:12:59.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:12:59.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:12:59.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:12:59.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:12:59.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:12:59.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:12:59.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:12:59.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:12:59.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:12:59.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.633468 -999.00  +13.60   9.24     65   +7.20 1 1 1 1 1   887    0 7.12 3.21 ----- 13.0 9.2 333.0 20.7 17.6 -26.9 17.4 -24.8 17.6 -23.2 18.1 -26.5
2026-04-15T17:12:59.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:12:59.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:12:59.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.633468
2026-04-15T17:12:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:12:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:12:59.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:12:59.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:12:59.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:12:59.756 [DEBUG] [Thread-22674] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:12:59.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:12:22', tmtdew=8.41681, humidity=56.7696, cloud=0.0, wind=13.9756, temperature=13.8066, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:12:11.635', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:12:59.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:13:00.003 [DEBUG] [Thread-22677] [transport.py] [_log()] starting thread (client mode): 0xf13ca080
2026-04-15T17:13:00.003 [DEBUG] [Thread-22677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:13:00.017 [DEBUG] [Thread-22677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:13:00.017 [INFO] [Thread-22677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:13:00.025 [DEBUG] [Thread-22677] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:13:00.025 [DEBUG] [Thread-22677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:13:00.025 [DEBUG] [Thread-22677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:13:00.025 [DEBUG] [Thread-22677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:13:00.025 [DEBUG] [Thread-22677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:13:00.025 [DEBUG] [Thread-22677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:13:00.025 [DEBUG] [Thread-22677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:13:00.025 [DEBUG] [Thread-22677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:13:00.025 [DEBUG] [Thread-22677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:13:00.026 [DEBUG] [Thread-22677] [transport.py] [_log()] client lang: <none>
2026-04-15T17:13:00.026 [DEBUG] [Thread-22677] [transport.py] [_log()] server lang: <none>
2026-04-15T17:13:00.026 [DEBUG] [Thread-22677] [transport.py] [_log()] kex follows: False
2026-04-15T17:13:00.026 [DEBUG] [Thread-22677] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:13:00.026 [DEBUG] [Thread-22677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:13:00.026 [DEBUG] [Thread-22677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:13:00.026 [DEBUG] [Thread-22677] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:13:00.026 [DEBUG] [Thread-22677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:13:00.026 [DEBUG] [Thread-22677] [transport.py] [_log()] Compression: none
2026-04-15T17:13:00.026 [DEBUG] [Thread-22677] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:13:00.081 [DEBUG] [Thread-22677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:13:00.082 [DEBUG] [Thread-22677] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:13:00.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:13:00.082 [DEBUG] [Thread-22677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:13:00.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:13:00.138 [DEBUG] [Thread-22677] [transport.py] [_log()] userauth is OK
2026-04-15T17:13:00.138 [DEBUG] [Thread-22677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:13:00.138 [DEBUG] [Thread-22677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:13:00.138 [DEBUG] [Thread-22677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:13:00.138 [DEBUG] [Thread-22677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:13:00.163 [INFO] [Thread-22677] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:13:00.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:13:00.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:13:01.005 [DEBUG] [Thread-22677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:13:01.005 [DEBUG] [Thread-22677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:13:01.053 [DEBUG] [Thread-22677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:13:01.053 [DEBUG] [Thread-22677] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:13:01.062 [DEBUG] [Thread-22677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:13:01.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:13:01.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')
2026-04-15T17:13:01.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
2026-04-15T17:13:01.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:13:01.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:13:01.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:13:01.096 [DEBUG] [Thread-22677] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:13:04.332 [DEBUG] [Thread-22679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:13:19.377 [DEBUG] [Thread-22680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:13:26.722 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:13:26.723 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:13:31.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:13:31.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:13:31.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
2026-04-15T17:13:32.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 12, 58), 8.17515, 57.9021, 0.0, 14.7517, 13.6572, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:13:32.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:12:58
2026-04-15T17:13:32.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:13:33.236 [DEBUG] [Thread-22681] [transport.py] [_log()] starting thread (client mode): 0xf13c9ff0
2026-04-15T17:13:33.237 [DEBUG] [Thread-22681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:13:33.257 [DEBUG] [Thread-22681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:13:33.257 [INFO] [Thread-22681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:13:33.260 [DEBUG] [Thread-22681] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:13:33.260 [DEBUG] [Thread-22681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:13:33.260 [DEBUG] [Thread-22681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:13:33.261 [DEBUG] [Thread-22681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:13:33.261 [DEBUG] [Thread-22681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:13:33.261 [DEBUG] [Thread-22681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:13:33.261 [DEBUG] [Thread-22681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:13:33.261 [DEBUG] [Thread-22681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:13:33.261 [DEBUG] [Thread-22681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:13:33.261 [DEBUG] [Thread-22681] [transport.py] [_log()] client lang: <none>
2026-04-15T17:13:33.261 [DEBUG] [Thread-22681] [transport.py] [_log()] server lang: <none>
2026-04-15T17:13:33.261 [DEBUG] [Thread-22681] [transport.py] [_log()] kex follows: False
2026-04-15T17:13:33.261 [DEBUG] [Thread-22681] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:13:33.261 [DEBUG] [Thread-22681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:13:33.261 [DEBUG] [Thread-22681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:13:33.262 [DEBUG] [Thread-22681] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:13:33.262 [DEBUG] [Thread-22681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:13:33.262 [DEBUG] [Thread-22681] [transport.py] [_log()] Compression: none
2026-04-15T17:13:33.262 [DEBUG] [Thread-22681] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:13:33.280 [DEBUG] [Thread-22681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:13:33.280 [DEBUG] [Thread-22681] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:13:33.281 [DEBUG] [Thread-22681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:13:33.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:13:33.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:13:33.322 [DEBUG] [Thread-22681] [transport.py] [_log()] userauth is OK
2026-04-15T17:13:33.322 [DEBUG] [Thread-22681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:13:33.322 [DEBUG] [Thread-22681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:13:33.322 [DEBUG] [Thread-22681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:13:33.322 [DEBUG] [Thread-22681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:13:33.357 [INFO] [Thread-22681] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:13:33.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:13:34.145 [DEBUG] [Thread-22681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:13:34.145 [DEBUG] [Thread-22681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:13:34.145 [DEBUG] [Thread-22681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:13:34.186 [DEBUG] [Thread-22681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:13:34.186 [DEBUG] [Thread-22681] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:13:34.188 [DEBUG] [Thread-22681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:13:34.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:13:34.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:13:34.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:13:34.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:13:34.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:13:34.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:13:34.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:13:34.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:13:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:13:34.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.634163 -999.00  +13.60  12.24     65   +7.30 1 1 1 1 1   887    0 6.95 -4.12 ----- 10.5 12.2 306.0 13.7 17.4 -27.2 17.3 -25.3 17.3 -23.7 17.7 -26.8
2026-04-15T17:13:34.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:13:34.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:13:34.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.634163
2026-04-15T17:13:34.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:13:34.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:13:34.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:13:34.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:13:34.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:13:34.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:12:58', tmtdew=8.17515, humidity=57.9021, cloud=0.0, wind=14.7517, temperature=13.6572, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:13:11.683', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:13:34.209 [DEBUG] [Thread-22681] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:13:34.406 [DEBUG] [Thread-22684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:13:34.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:13:34.437 [DEBUG] [Thread-22685] [transport.py] [_log()] starting thread (client mode): 0xee9af970
2026-04-15T17:13:34.437 [DEBUG] [Thread-22685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:13:34.451 [DEBUG] [Thread-22685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:13:34.451 [INFO] [Thread-22685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] client lang: <none>
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] server lang: <none>
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] kex follows: False
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:13:34.459 [DEBUG] [Thread-22685] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:13:34.460 [DEBUG] [Thread-22685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:13:34.460 [DEBUG] [Thread-22685] [transport.py] [_log()] Compression: none
2026-04-15T17:13:34.460 [DEBUG] [Thread-22685] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:13:34.515 [DEBUG] [Thread-22685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:13:34.515 [DEBUG] [Thread-22685] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:13:34.515 [DEBUG] [Thread-22685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:13:34.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:13:34.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:13:34.572 [DEBUG] [Thread-22685] [transport.py] [_log()] userauth is OK
2026-04-15T17:13:34.573 [DEBUG] [Thread-22685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:13:34.573 [DEBUG] [Thread-22685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:13:34.573 [DEBUG] [Thread-22685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:13:34.573 [DEBUG] [Thread-22685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:13:34.590 [INFO] [Thread-22685] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:13:34.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:13:34.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:13:35.416 [DEBUG] [Thread-22685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:13:35.416 [DEBUG] [Thread-22685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:13:35.464 [DEBUG] [Thread-22685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:13:35.464 [DEBUG] [Thread-22685] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:13:35.473 [DEBUG] [Thread-22685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:13:35.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:13:35.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')
2026-04-15T17:13:35.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
2026-04-15T17:13:35.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:13:35.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:13:35.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:13:35.508 [DEBUG] [Thread-22685] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:13:41.738 [DEBUG] [Thread-22687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:13:49.444 [DEBUG] [Thread-22688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:14:04.474 [DEBUG] [Thread-22689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:14:05.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:14:05.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:14:05.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
2026-04-15T17:14:06.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 13, 33), 8.78393, 55.467, 0.0, 9.31752, 14.3139, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:14:06.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:13:33
2026-04-15T17:14:07.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:14:07.684 [DEBUG] [Thread-22690] [transport.py] [_log()] starting thread (client mode): 0xee9ad8a0
2026-04-15T17:14:07.684 [DEBUG] [Thread-22690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:14:07.704 [DEBUG] [Thread-22690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:14:07.704 [INFO] [Thread-22690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:14:07.707 [DEBUG] [Thread-22690] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:14:07.707 [DEBUG] [Thread-22690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:14:07.707 [DEBUG] [Thread-22690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:14:07.707 [DEBUG] [Thread-22690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:14:07.707 [DEBUG] [Thread-22690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:14:07.708 [DEBUG] [Thread-22690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:14:07.708 [DEBUG] [Thread-22690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:14:07.708 [DEBUG] [Thread-22690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:14:07.708 [DEBUG] [Thread-22690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:14:07.708 [DEBUG] [Thread-22690] [transport.py] [_log()] client lang: <none>
2026-04-15T17:14:07.708 [DEBUG] [Thread-22690] [transport.py] [_log()] server lang: <none>
2026-04-15T17:14:07.708 [DEBUG] [Thread-22690] [transport.py] [_log()] kex follows: False
2026-04-15T17:14:07.708 [DEBUG] [Thread-22690] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:14:07.708 [DEBUG] [Thread-22690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:14:07.708 [DEBUG] [Thread-22690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:14:07.708 [DEBUG] [Thread-22690] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:14:07.709 [DEBUG] [Thread-22690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:14:07.709 [DEBUG] [Thread-22690] [transport.py] [_log()] Compression: none
2026-04-15T17:14:07.709 [DEBUG] [Thread-22690] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:14:07.725 [DEBUG] [Thread-22690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:14:07.726 [DEBUG] [Thread-22690] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:14:07.726 [DEBUG] [Thread-22690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:14:07.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:14:07.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:14:07.727 [DEBUG] [Thread-22690] [transport.py] [_log()] userauth is OK
2026-04-15T17:14:07.728 [DEBUG] [Thread-22690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:14:07.728 [DEBUG] [Thread-22690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:14:07.728 [DEBUG] [Thread-22690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:14:07.728 [DEBUG] [Thread-22690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:14:07.752 [INFO] [Thread-22690] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:14:07.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:14:08.506 [DEBUG] [Thread-22690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:14:08.507 [DEBUG] [Thread-22690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:14:08.507 [DEBUG] [Thread-22690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:14:08.547 [DEBUG] [Thread-22690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:14:08.547 [DEBUG] [Thread-22690] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:14:08.549 [DEBUG] [Thread-22690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:14:08.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:14:08.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:14:08.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:14:08.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:14:08.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:14:08.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:14:08.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:14:08.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:14:08.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:14:08.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.634510 -999.00  +13.60  12.17     65   +7.20 1 1 1 1 1   887    0 6.79 -7.97 ----- 13.3 12.2 312.0 14.7 17.3 -27.1 17.2 -24.9 17.2 -24.2 17.6 -26.6
2026-04-15T17:14:08.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:14:08.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:14:08.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.634510
2026-04-15T17:14:08.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:14:08.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:14:08.571 [DEBUG] [Thread-22690] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:14:08.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:14:08.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:14:08.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:14:08.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:13:33', tmtdew=8.78393, humidity=55.467, cloud=0.0, wind=9.31752, temperature=14.3139, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:13:41.664', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:14:08.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:14:08.838 [DEBUG] [Thread-22693] [transport.py] [_log()] starting thread (client mode): 0xee9ae350
2026-04-15T17:14:08.838 [DEBUG] [Thread-22693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:14:08.851 [DEBUG] [Thread-22693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:14:08.851 [INFO] [Thread-22693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:14:08.858 [DEBUG] [Thread-22693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:14:08.858 [DEBUG] [Thread-22693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] client lang: <none>
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] server lang: <none>
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] kex follows: False
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] Compression: none
2026-04-15T17:14:08.859 [DEBUG] [Thread-22693] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:14:08.914 [DEBUG] [Thread-22693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:14:08.914 [DEBUG] [Thread-22693] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:14:08.914 [DEBUG] [Thread-22693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:14:08.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:14:08.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:14:08.971 [DEBUG] [Thread-22693] [transport.py] [_log()] userauth is OK
2026-04-15T17:14:08.971 [DEBUG] [Thread-22693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:14:08.971 [DEBUG] [Thread-22693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:14:08.971 [DEBUG] [Thread-22693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:14:08.972 [DEBUG] [Thread-22693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:14:08.996 [INFO] [Thread-22693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:14:08.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:14:08.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:14:09.792 [DEBUG] [Thread-22693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:14:09.792 [DEBUG] [Thread-22693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:14:09.840 [DEBUG] [Thread-22693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:14:09.840 [DEBUG] [Thread-22693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:14:09.849 [DEBUG] [Thread-22693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:14:09.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:14:09.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')
2026-04-15T17:14:09.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
2026-04-15T17:14:09.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:14:09.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:14:09.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:14:09.884 [DEBUG] [Thread-22693] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:14:19.503 [DEBUG] [Thread-22695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:14:26.864 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:14:26.865 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:14:34.545 [DEBUG] [Thread-22696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:14:39.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:14:39.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:14:39.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
2026-04-15T17:14:41.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 14, 9), 8.18221, 57.7199, 0.0, 15.8983, 13.6898, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:14:41.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:14:09
2026-04-15T17:14:41.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:14:41.812 [DEBUG] [Thread-22697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:14:42.045 [DEBUG] [Thread-22698] [transport.py] [_log()] starting thread (client mode): 0xf13c96f0
2026-04-15T17:14:42.045 [DEBUG] [Thread-22698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:14:42.065 [DEBUG] [Thread-22698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:14:42.066 [INFO] [Thread-22698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:14:42.067 [DEBUG] [Thread-22698] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:14:42.068 [DEBUG] [Thread-22698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:14:42.068 [DEBUG] [Thread-22698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:14:42.068 [DEBUG] [Thread-22698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:14:42.068 [DEBUG] [Thread-22698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:14:42.068 [DEBUG] [Thread-22698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:14:42.068 [DEBUG] [Thread-22698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:14:42.068 [DEBUG] [Thread-22698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:14:42.068 [DEBUG] [Thread-22698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:14:42.068 [DEBUG] [Thread-22698] [transport.py] [_log()] client lang: <none>
2026-04-15T17:14:42.068 [DEBUG] [Thread-22698] [transport.py] [_log()] server lang: <none>
2026-04-15T17:14:42.068 [DEBUG] [Thread-22698] [transport.py] [_log()] kex follows: False
2026-04-15T17:14:42.069 [DEBUG] [Thread-22698] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:14:42.069 [DEBUG] [Thread-22698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:14:42.069 [DEBUG] [Thread-22698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:14:42.069 [DEBUG] [Thread-22698] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:14:42.069 [DEBUG] [Thread-22698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:14:42.069 [DEBUG] [Thread-22698] [transport.py] [_log()] Compression: none
2026-04-15T17:14:42.069 [DEBUG] [Thread-22698] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:14:42.082 [DEBUG] [Thread-22698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:14:42.082 [DEBUG] [Thread-22698] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:14:42.082 [DEBUG] [Thread-22698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:14:42.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:14:42.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:14:42.083 [DEBUG] [Thread-22698] [transport.py] [_log()] userauth is OK
2026-04-15T17:14:42.084 [DEBUG] [Thread-22698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:14:42.084 [DEBUG] [Thread-22698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:14:42.084 [DEBUG] [Thread-22698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:14:42.084 [DEBUG] [Thread-22698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:14:42.106 [INFO] [Thread-22698] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:14:42.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:14:42.892 [DEBUG] [Thread-22698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:14:42.893 [DEBUG] [Thread-22698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:14:42.893 [DEBUG] [Thread-22698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:14:42.933 [DEBUG] [Thread-22698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:14:42.933 [DEBUG] [Thread-22698] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:14:42.935 [DEBUG] [Thread-22698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:14:42.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:14:42.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:14:42.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:14:42.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:14:42.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:14:42.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:14:42.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:14:42.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:14:42.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:14:42.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.634857 -999.00  +13.70  11.15     65   +7.30 1 1 1 1 1   887    0 6.76 -10.27 ----- 9.6 11.2 316.2 15.9 17.2 -26.8 17.1 -25.1 17.1 -23.2 17.4 -26.1
2026-04-15T17:14:42.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:14:42.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:14:42.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.634857
2026-04-15T17:14:42.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:14:42.960 [DEBUG] [Thread-22698] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:14:42.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:14:42.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:14:42.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:14:42.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:14:42.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:14:09', tmtdew=8.18221, humidity=57.7199, cloud=0.0, wind=15.8983, temperature=13.6898, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:14:11.645', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:14:43.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:14:43.221 [DEBUG] [Thread-22701] [transport.py] [_log()] starting thread (client mode): 0xee91f040
2026-04-15T17:14:43.221 [DEBUG] [Thread-22701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:14:43.235 [DEBUG] [Thread-22701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:14:43.235 [INFO] [Thread-22701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:14:43.242 [DEBUG] [Thread-22701] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:14:43.242 [DEBUG] [Thread-22701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:14:43.243 [DEBUG] [Thread-22701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:14:43.243 [DEBUG] [Thread-22701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:14:43.243 [DEBUG] [Thread-22701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:14:43.243 [DEBUG] [Thread-22701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:14:43.243 [DEBUG] [Thread-22701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:14:43.243 [DEBUG] [Thread-22701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:14:43.243 [DEBUG] [Thread-22701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:14:43.243 [DEBUG] [Thread-22701] [transport.py] [_log()] client lang: <none>
2026-04-15T17:14:43.243 [DEBUG] [Thread-22701] [transport.py] [_log()] server lang: <none>
2026-04-15T17:14:43.243 [DEBUG] [Thread-22701] [transport.py] [_log()] kex follows: False
2026-04-15T17:14:43.243 [DEBUG] [Thread-22701] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:14:43.243 [DEBUG] [Thread-22701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:14:43.243 [DEBUG] [Thread-22701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:14:43.243 [DEBUG] [Thread-22701] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:14:43.244 [DEBUG] [Thread-22701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:14:43.244 [DEBUG] [Thread-22701] [transport.py] [_log()] Compression: none
2026-04-15T17:14:43.244 [DEBUG] [Thread-22701] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:14:43.300 [DEBUG] [Thread-22701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:14:43.301 [DEBUG] [Thread-22701] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:14:43.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:14:43.301 [DEBUG] [Thread-22701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:14:43.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:14:43.358 [DEBUG] [Thread-22701] [transport.py] [_log()] userauth is OK
2026-04-15T17:14:43.358 [DEBUG] [Thread-22701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:14:43.358 [DEBUG] [Thread-22701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:14:43.358 [DEBUG] [Thread-22701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:14:43.358 [DEBUG] [Thread-22701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:14:43.381 [INFO] [Thread-22701] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:14:43.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:14:43.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:14:44.195 [DEBUG] [Thread-22701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:14:44.196 [DEBUG] [Thread-22701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:14:44.243 [DEBUG] [Thread-22701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:14:44.243 [DEBUG] [Thread-22701] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:14:44.252 [DEBUG] [Thread-22701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:14:44.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:14:44.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')
2026-04-15T17:14:44.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
2026-04-15T17:14:44.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:14:44.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:14:44.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:14:44.291 [DEBUG] [Thread-22701] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:14:49.575 [DEBUG] [Thread-22703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:15:04.617 [DEBUG] [Thread-22704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:15:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:15:14.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:15: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
2026-04-15T17:15:15.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 14, 44), 9.14771, 54.1085, 0.0, 18.1375, 14.4133, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:15:15.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:14:44
2026-04-15T17:15:15.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:15:16.418 [DEBUG] [Thread-22705] [transport.py] [_log()] starting thread (client mode): 0xf13cb940
2026-04-15T17:15:16.418 [DEBUG] [Thread-22705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:15:16.431 [DEBUG] [Thread-22705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:15:16.431 [INFO] [Thread-22705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:15:16.434 [DEBUG] [Thread-22705] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:15:16.434 [DEBUG] [Thread-22705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:15:16.434 [DEBUG] [Thread-22705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:15:16.434 [DEBUG] [Thread-22705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:15:16.435 [DEBUG] [Thread-22705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:15:16.435 [DEBUG] [Thread-22705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:15:16.435 [DEBUG] [Thread-22705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:15:16.435 [DEBUG] [Thread-22705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:15:16.435 [DEBUG] [Thread-22705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:15:16.435 [DEBUG] [Thread-22705] [transport.py] [_log()] client lang: <none>
2026-04-15T17:15:16.435 [DEBUG] [Thread-22705] [transport.py] [_log()] server lang: <none>
2026-04-15T17:15:16.435 [DEBUG] [Thread-22705] [transport.py] [_log()] kex follows: False
2026-04-15T17:15:16.435 [DEBUG] [Thread-22705] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:15:16.435 [DEBUG] [Thread-22705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:15:16.435 [DEBUG] [Thread-22705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:15:16.435 [DEBUG] [Thread-22705] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:15:16.435 [DEBUG] [Thread-22705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:15:16.435 [DEBUG] [Thread-22705] [transport.py] [_log()] Compression: none
2026-04-15T17:15:16.435 [DEBUG] [Thread-22705] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:15:16.451 [DEBUG] [Thread-22705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:15:16.452 [DEBUG] [Thread-22705] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:15:16.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:15:16.452 [DEBUG] [Thread-22705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:15:16.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:15:16.453 [DEBUG] [Thread-22705] [transport.py] [_log()] userauth is OK
2026-04-15T17:15:16.453 [DEBUG] [Thread-22705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:15:16.453 [DEBUG] [Thread-22705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:15:16.453 [DEBUG] [Thread-22705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:15:16.453 [DEBUG] [Thread-22705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:15:16.466 [INFO] [Thread-22705] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:15:16.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:15:19.645 [DEBUG] [Thread-22705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:15:19.645 [DEBUG] [Thread-22705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:15:19.646 [DEBUG] [Thread-22705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:15:19.649 [DEBUG] [Thread-22707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:15:19.686 [DEBUG] [Thread-22705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:15:19.686 [DEBUG] [Thread-22705] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:15:19.689 [DEBUG] [Thread-22705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:15:19.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:15:19.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:15:19.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:15:19.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:15:19.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:15:19.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:15:19.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:15:19.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:15:19.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:15:19.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.635205 -999.00  +13.70   9.84     65   +7.40 1 1 1 1 1   887    0 6.62 -14.79 ----- 11.5 9.8 316.0 12.1 17.1 -27.0 17.1 -24.8 16.9 -24.6 17.4 -26.1
2026-04-15T17:15:19.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:15:19.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:15:19.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.635205
2026-04-15T17:15:19.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:15:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:15:19.766 [DEBUG] [Thread-22705] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:15:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:15:19.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:15:19.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:15:19.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:14:44', tmtdew=9.14771, humidity=54.1085, cloud=0.0, wind=18.1375, temperature=14.4133, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:14:41.712', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:15:20.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:15:20.023 [DEBUG] [Thread-22709] [transport.py] [_log()] starting thread (client mode): 0xf13c8400
2026-04-15T17:15:20.023 [DEBUG] [Thread-22709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:15:20.037 [DEBUG] [Thread-22709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:15:20.037 [INFO] [Thread-22709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:15:20.044 [DEBUG] [Thread-22709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:15:20.044 [DEBUG] [Thread-22709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:15:20.044 [DEBUG] [Thread-22709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:15:20.045 [DEBUG] [Thread-22709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:15:20.045 [DEBUG] [Thread-22709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:15:20.045 [DEBUG] [Thread-22709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:15:20.045 [DEBUG] [Thread-22709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:15:20.045 [DEBUG] [Thread-22709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:15:20.045 [DEBUG] [Thread-22709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:15:20.045 [DEBUG] [Thread-22709] [transport.py] [_log()] client lang: <none>
2026-04-15T17:15:20.045 [DEBUG] [Thread-22709] [transport.py] [_log()] server lang: <none>
2026-04-15T17:15:20.045 [DEBUG] [Thread-22709] [transport.py] [_log()] kex follows: False
2026-04-15T17:15:20.045 [DEBUG] [Thread-22709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:15:20.045 [DEBUG] [Thread-22709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:15:20.045 [DEBUG] [Thread-22709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:15:20.046 [DEBUG] [Thread-22709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:15:20.046 [DEBUG] [Thread-22709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:15:20.046 [DEBUG] [Thread-22709] [transport.py] [_log()] Compression: none
2026-04-15T17:15:20.046 [DEBUG] [Thread-22709] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:15:20.100 [DEBUG] [Thread-22709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:15:20.100 [DEBUG] [Thread-22709] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:15:20.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:15:20.101 [DEBUG] [Thread-22709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:15:20.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:15:20.157 [DEBUG] [Thread-22709] [transport.py] [_log()] userauth is OK
2026-04-15T17:15:20.157 [DEBUG] [Thread-22709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:15:20.157 [DEBUG] [Thread-22709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:15:20.157 [DEBUG] [Thread-22709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:15:20.157 [DEBUG] [Thread-22709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:15:20.184 [INFO] [Thread-22709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:15:20.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:15:20.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:15:21.016 [DEBUG] [Thread-22709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:15:21.016 [DEBUG] [Thread-22709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:15:21.064 [DEBUG] [Thread-22709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:15:21.064 [DEBUG] [Thread-22709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:15:21.073 [DEBUG] [Thread-22709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:15:21.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:15:21.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')
2026-04-15T17:15:21.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
2026-04-15T17:15:21.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:15:21.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:15:21.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:15:21.107 [DEBUG] [Thread-22709] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:15:27.005 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:15:27.006 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:15:34.679 [DEBUG] [Thread-22711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:15:41.900 [DEBUG] [Thread-22712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:15:49.716 [DEBUG] [Thread-22713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:15:51.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:15:51.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:15:51.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
2026-04-15T17:15:52.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 15, 20), 8.05907, 58.286, 0.0, 15.1391, 13.6067, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:15:52.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:15:20
2026-04-15T17:15:52.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:15:53.291 [DEBUG] [Thread-22714] [transport.py] [_log()] starting thread (client mode): 0xee9bf100
2026-04-15T17:15:53.291 [DEBUG] [Thread-22714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:15:53.310 [DEBUG] [Thread-22714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:15:53.310 [INFO] [Thread-22714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:15:53.314 [DEBUG] [Thread-22714] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:15:53.314 [DEBUG] [Thread-22714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:15:53.314 [DEBUG] [Thread-22714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:15:53.314 [DEBUG] [Thread-22714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:15:53.314 [DEBUG] [Thread-22714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:15:53.314 [DEBUG] [Thread-22714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:15:53.314 [DEBUG] [Thread-22714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:15:53.315 [DEBUG] [Thread-22714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:15:53.315 [DEBUG] [Thread-22714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:15:53.315 [DEBUG] [Thread-22714] [transport.py] [_log()] client lang: <none>
2026-04-15T17:15:53.315 [DEBUG] [Thread-22714] [transport.py] [_log()] server lang: <none>
2026-04-15T17:15:53.315 [DEBUG] [Thread-22714] [transport.py] [_log()] kex follows: False
2026-04-15T17:15:53.315 [DEBUG] [Thread-22714] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:15:53.316 [DEBUG] [Thread-22714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:15:53.316 [DEBUG] [Thread-22714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:15:53.316 [DEBUG] [Thread-22714] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:15:53.316 [DEBUG] [Thread-22714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:15:53.316 [DEBUG] [Thread-22714] [transport.py] [_log()] Compression: none
2026-04-15T17:15:53.316 [DEBUG] [Thread-22714] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:15:53.334 [DEBUG] [Thread-22714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:15:53.334 [DEBUG] [Thread-22714] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:15:53.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:15:53.335 [DEBUG] [Thread-22714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:15:53.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:15:53.336 [DEBUG] [Thread-22714] [transport.py] [_log()] userauth is OK
2026-04-15T17:15:53.336 [DEBUG] [Thread-22714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:15:53.336 [DEBUG] [Thread-22714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:15:53.337 [DEBUG] [Thread-22714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:15:53.337 [DEBUG] [Thread-22714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:15:53.373 [INFO] [Thread-22714] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:15:53.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:15:54.147 [DEBUG] [Thread-22714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:15:54.147 [DEBUG] [Thread-22714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:15:54.148 [DEBUG] [Thread-22714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:15:54.188 [DEBUG] [Thread-22714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:15:54.188 [DEBUG] [Thread-22714] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:15:54.191 [DEBUG] [Thread-22714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:15:54.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:15:54.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:15:54.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:15:54.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:15:54.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:15:54.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:15:54.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:15:54.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:15:54.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:15:54.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.635552 -999.00  +13.60  10.76     66   +7.40 1 1 1 1 1   887    0 6.39 -19.55 ----- 10.1 10.8 315.6 14.1 17.1 -26.5 17.0 -25.3 16.9 -23.4 17.2 -25.8
2026-04-15T17:15:54.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:15:54.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:15:54.215 [DEBUG] [Thread-22714] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:15:54.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.635552
2026-04-15T17:15:54.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:15:54.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:15:54.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:15:54.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:15:54.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:15:54.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:15:20', tmtdew=8.05907, humidity=58.286, cloud=0.0, wind=15.1391, temperature=13.6067, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:15:11.693', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:15:54.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:15:54.479 [DEBUG] [Thread-22717] [transport.py] [_log()] starting thread (client mode): 0xf1351960
2026-04-15T17:15:54.480 [DEBUG] [Thread-22717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:15:54.494 [DEBUG] [Thread-22717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:15:54.494 [INFO] [Thread-22717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:15:54.501 [DEBUG] [Thread-22717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:15:54.502 [DEBUG] [Thread-22717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:15:54.502 [DEBUG] [Thread-22717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:15:54.502 [DEBUG] [Thread-22717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:15:54.502 [DEBUG] [Thread-22717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:15:54.502 [DEBUG] [Thread-22717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:15:54.502 [DEBUG] [Thread-22717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:15:54.502 [DEBUG] [Thread-22717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:15:54.502 [DEBUG] [Thread-22717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:15:54.502 [DEBUG] [Thread-22717] [transport.py] [_log()] client lang: <none>
2026-04-15T17:15:54.502 [DEBUG] [Thread-22717] [transport.py] [_log()] server lang: <none>
2026-04-15T17:15:54.503 [DEBUG] [Thread-22717] [transport.py] [_log()] kex follows: False
2026-04-15T17:15:54.503 [DEBUG] [Thread-22717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:15:54.503 [DEBUG] [Thread-22717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:15:54.503 [DEBUG] [Thread-22717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:15:54.503 [DEBUG] [Thread-22717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:15:54.503 [DEBUG] [Thread-22717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:15:54.503 [DEBUG] [Thread-22717] [transport.py] [_log()] Compression: none
2026-04-15T17:15:54.503 [DEBUG] [Thread-22717] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:15:54.558 [DEBUG] [Thread-22717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:15:54.559 [DEBUG] [Thread-22717] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:15:54.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:15:54.560 [DEBUG] [Thread-22717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:15:54.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:15:54.615 [DEBUG] [Thread-22717] [transport.py] [_log()] userauth is OK
2026-04-15T17:15:54.616 [DEBUG] [Thread-22717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:15:54.616 [DEBUG] [Thread-22717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:15:54.616 [DEBUG] [Thread-22717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:15:54.616 [DEBUG] [Thread-22717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:15:54.640 [INFO] [Thread-22717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:15:54.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:15:54.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:15:55.469 [DEBUG] [Thread-22717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:15:55.470 [DEBUG] [Thread-22717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:15:55.517 [DEBUG] [Thread-22717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:15:55.517 [DEBUG] [Thread-22717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:15:55.526 [DEBUG] [Thread-22717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:15:55.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:15:55.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')
2026-04-15T17:15:55.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
2026-04-15T17:15:55.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:15:55.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:15:55.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:15:55.560 [DEBUG] [Thread-22717] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:16:04.748 [DEBUG] [Thread-22719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:16:19.791 [DEBUG] [Thread-22720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:16:25.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:16:25.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:16:25.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T17:16:26.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 15, 55), 7.98307, 58.402, 0.0, 15.4397, 13.573, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:16:26.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:15:55
2026-04-15T17:16:27.145 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:16:27.146 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:16:27.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:16:27.765 [DEBUG] [Thread-22721] [transport.py] [_log()] starting thread (client mode): 0xf13c8a00
2026-04-15T17:16:27.765 [DEBUG] [Thread-22721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:16:27.785 [DEBUG] [Thread-22721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:16:27.786 [INFO] [Thread-22721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:16:27.789 [DEBUG] [Thread-22721] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:16:27.789 [DEBUG] [Thread-22721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:16:27.789 [DEBUG] [Thread-22721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:16:27.789 [DEBUG] [Thread-22721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:16:27.789 [DEBUG] [Thread-22721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:16:27.789 [DEBUG] [Thread-22721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:16:27.789 [DEBUG] [Thread-22721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:16:27.789 [DEBUG] [Thread-22721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:16:27.789 [DEBUG] [Thread-22721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:16:27.789 [DEBUG] [Thread-22721] [transport.py] [_log()] client lang: <none>
2026-04-15T17:16:27.789 [DEBUG] [Thread-22721] [transport.py] [_log()] server lang: <none>
2026-04-15T17:16:27.790 [DEBUG] [Thread-22721] [transport.py] [_log()] kex follows: False
2026-04-15T17:16:27.790 [DEBUG] [Thread-22721] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:16:27.790 [DEBUG] [Thread-22721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:16:27.790 [DEBUG] [Thread-22721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:16:27.790 [DEBUG] [Thread-22721] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:16:27.790 [DEBUG] [Thread-22721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:16:27.790 [DEBUG] [Thread-22721] [transport.py] [_log()] Compression: none
2026-04-15T17:16:27.790 [DEBUG] [Thread-22721] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:16:27.807 [DEBUG] [Thread-22721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:16:27.807 [DEBUG] [Thread-22721] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:16:27.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:16:27.808 [DEBUG] [Thread-22721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:16:27.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:16:27.809 [DEBUG] [Thread-22721] [transport.py] [_log()] userauth is OK
2026-04-15T17:16:27.809 [DEBUG] [Thread-22721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:16:27.809 [DEBUG] [Thread-22721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:16:27.809 [DEBUG] [Thread-22721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:16:27.809 [DEBUG] [Thread-22721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:16:27.833 [INFO] [Thread-22721] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:16:27.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:16:28.621 [DEBUG] [Thread-22721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:16:28.621 [DEBUG] [Thread-22721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:16:28.622 [DEBUG] [Thread-22721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:16:28.662 [DEBUG] [Thread-22721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:16:28.662 [DEBUG] [Thread-22721] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:16:28.665 [DEBUG] [Thread-22721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:16:28.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:16:28.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:16:28.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:16:28.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:16:28.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:16:28.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:16:28.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:16:28.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:16:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:16:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.635899 -999.00  +13.50  16.78     65   +7.20 1 1 1 1 1   887    0 6.30 -23.14 ----- 14.9 16.8 306.0 20.9 17.0 -27.2 16.9 -24.8 16.8 -24.2 17.2 -26.1
2026-04-15T17:16:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:16:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:16:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.635899
2026-04-15T17:16:28.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:16:28.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:16:28.690 [DEBUG] [Thread-22721] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:16:28.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:16:28.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:16:28.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:16:28.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:15:55', tmtdew=7.98307, humidity=58.402, cloud=0.0, wind=15.4397, temperature=13.573, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:15:41.674', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:16:28.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:16:28.928 [DEBUG] [Thread-22724] [transport.py] [_log()] starting thread (client mode): 0xee91e9e0
2026-04-15T17:16:28.929 [DEBUG] [Thread-22724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:16:28.944 [DEBUG] [Thread-22724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:16:28.944 [INFO] [Thread-22724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:16:28.955 [DEBUG] [Thread-22724] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:16:28.955 [DEBUG] [Thread-22724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:16:28.955 [DEBUG] [Thread-22724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:16:28.955 [DEBUG] [Thread-22724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:16:28.955 [DEBUG] [Thread-22724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:16:28.955 [DEBUG] [Thread-22724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:16:28.956 [DEBUG] [Thread-22724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:16:28.956 [DEBUG] [Thread-22724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:16:28.956 [DEBUG] [Thread-22724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:16:28.956 [DEBUG] [Thread-22724] [transport.py] [_log()] client lang: <none>
2026-04-15T17:16:28.956 [DEBUG] [Thread-22724] [transport.py] [_log()] server lang: <none>
2026-04-15T17:16:28.956 [DEBUG] [Thread-22724] [transport.py] [_log()] kex follows: False
2026-04-15T17:16:28.956 [DEBUG] [Thread-22724] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:16:28.956 [DEBUG] [Thread-22724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:16:28.956 [DEBUG] [Thread-22724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:16:28.956 [DEBUG] [Thread-22724] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:16:28.956 [DEBUG] [Thread-22724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:16:28.956 [DEBUG] [Thread-22724] [transport.py] [_log()] Compression: none
2026-04-15T17:16:28.957 [DEBUG] [Thread-22724] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:16:29.013 [DEBUG] [Thread-22724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:16:29.014 [DEBUG] [Thread-22724] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:16:29.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:16:29.014 [DEBUG] [Thread-22724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:16:29.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:16:29.070 [DEBUG] [Thread-22724] [transport.py] [_log()] userauth is OK
2026-04-15T17:16:29.070 [DEBUG] [Thread-22724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:16:29.070 [DEBUG] [Thread-22724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:16:29.071 [DEBUG] [Thread-22724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:16:29.071 [DEBUG] [Thread-22724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:16:29.087 [INFO] [Thread-22724] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:16:29.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:16:29.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:16:29.903 [DEBUG] [Thread-22724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:16:29.904 [DEBUG] [Thread-22724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:16:29.953 [DEBUG] [Thread-22724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:16:29.953 [DEBUG] [Thread-22724] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:16:29.963 [DEBUG] [Thread-22724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:16:29.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:16:29.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')
2026-04-15T17:16:29.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
2026-04-15T17:16:29.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:16:29.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:16:29.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:16:29.997 [DEBUG] [Thread-22724] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:16:34.821 [DEBUG] [Thread-22726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:16:42.008 [DEBUG] [Thread-22727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:16:49.865 [DEBUG] [Thread-22728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:17:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:17:00.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:17:00.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
2026-04-15T17:17:01.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 16, 31), 7.88239, 58.7831, 0.0, 16.4981, 13.5565, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:17:01.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:16:31
2026-04-15T17:17:01.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:17:02.118 [DEBUG] [Thread-22729] [transport.py] [_log()] starting thread (client mode): 0xf1352e00
2026-04-15T17:17:02.118 [DEBUG] [Thread-22729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:17:02.138 [DEBUG] [Thread-22729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:17:02.138 [INFO] [Thread-22729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:17:02.141 [DEBUG] [Thread-22729] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:17:02.141 [DEBUG] [Thread-22729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:17:02.141 [DEBUG] [Thread-22729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:17:02.141 [DEBUG] [Thread-22729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:17:02.141 [DEBUG] [Thread-22729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:17:02.141 [DEBUG] [Thread-22729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:17:02.141 [DEBUG] [Thread-22729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:17:02.141 [DEBUG] [Thread-22729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:17:02.142 [DEBUG] [Thread-22729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:17:02.142 [DEBUG] [Thread-22729] [transport.py] [_log()] client lang: <none>
2026-04-15T17:17:02.142 [DEBUG] [Thread-22729] [transport.py] [_log()] server lang: <none>
2026-04-15T17:17:02.142 [DEBUG] [Thread-22729] [transport.py] [_log()] kex follows: False
2026-04-15T17:17:02.142 [DEBUG] [Thread-22729] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:17:02.142 [DEBUG] [Thread-22729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:17:02.142 [DEBUG] [Thread-22729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:17:02.142 [DEBUG] [Thread-22729] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:17:02.142 [DEBUG] [Thread-22729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:17:02.142 [DEBUG] [Thread-22729] [transport.py] [_log()] Compression: none
2026-04-15T17:17:02.142 [DEBUG] [Thread-22729] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:17:02.160 [DEBUG] [Thread-22729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:17:02.161 [DEBUG] [Thread-22729] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:17:02.161 [DEBUG] [Thread-22729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:17:02.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:17:02.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:17:02.162 [DEBUG] [Thread-22729] [transport.py] [_log()] userauth is OK
2026-04-15T17:17:02.163 [DEBUG] [Thread-22729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:17:02.163 [DEBUG] [Thread-22729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:17:02.163 [DEBUG] [Thread-22729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:17:02.163 [DEBUG] [Thread-22729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:17:02.186 [INFO] [Thread-22729] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:17:02.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:17:03.284 [DEBUG] [Thread-22729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:17:03.284 [DEBUG] [Thread-22729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:17:03.284 [DEBUG] [Thread-22729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:17:03.324 [DEBUG] [Thread-22729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:17:03.325 [DEBUG] [Thread-22729] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:17:03.327 [DEBUG] [Thread-22729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:17:03.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:17:03.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:17:03.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:17:03.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:17:03.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:17:03.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:17:03.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:17:03.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:17:03.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:17:03.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.636246 -999.00  +13.50  18.15     65   +7.20 1 1 1 1 1   887    0 6.18 -27.43 ----- 18.2 18.1 313.8 23.6 16.9 -26.4 16.9 -25.1 16.8 -22.9 17.2 -24.6
2026-04-15T17:17:03.346 [DEBUG] [Thread-22729] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:17:03.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:17:03.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:17:03.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.636246
2026-04-15T17:17:03.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:17:03.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:17:03.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:17:03.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:17:03.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:17:03.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:16:31', tmtdew=7.88239, humidity=58.7831, cloud=0.0, wind=16.4981, temperature=13.5565, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:16:11.654', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:17:03.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:17:03.589 [DEBUG] [Thread-22732] [transport.py] [_log()] starting thread (client mode): 0xf1350ac0
2026-04-15T17:17:03.589 [DEBUG] [Thread-22732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:17:03.604 [DEBUG] [Thread-22732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:17:03.604 [INFO] [Thread-22732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:17:03.612 [DEBUG] [Thread-22732] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:17:03.612 [DEBUG] [Thread-22732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:17:03.612 [DEBUG] [Thread-22732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:17:03.612 [DEBUG] [Thread-22732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:17:03.612 [DEBUG] [Thread-22732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:17:03.612 [DEBUG] [Thread-22732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:17:03.613 [DEBUG] [Thread-22732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:17:03.613 [DEBUG] [Thread-22732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:17:03.613 [DEBUG] [Thread-22732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:17:03.613 [DEBUG] [Thread-22732] [transport.py] [_log()] client lang: <none>
2026-04-15T17:17:03.613 [DEBUG] [Thread-22732] [transport.py] [_log()] server lang: <none>
2026-04-15T17:17:03.613 [DEBUG] [Thread-22732] [transport.py] [_log()] kex follows: False
2026-04-15T17:17:03.613 [DEBUG] [Thread-22732] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:17:03.613 [DEBUG] [Thread-22732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:17:03.613 [DEBUG] [Thread-22732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:17:03.613 [DEBUG] [Thread-22732] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:17:03.613 [DEBUG] [Thread-22732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:17:03.614 [DEBUG] [Thread-22732] [transport.py] [_log()] Compression: none
2026-04-15T17:17:03.614 [DEBUG] [Thread-22732] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:17:03.670 [DEBUG] [Thread-22732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:17:03.671 [DEBUG] [Thread-22732] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:17:03.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:17:03.671 [DEBUG] [Thread-22732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:17:03.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:17:03.730 [DEBUG] [Thread-22732] [transport.py] [_log()] userauth is OK
2026-04-15T17:17:03.730 [DEBUG] [Thread-22732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:17:03.730 [DEBUG] [Thread-22732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:17:03.730 [DEBUG] [Thread-22732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:17:03.731 [DEBUG] [Thread-22732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:17:03.758 [INFO] [Thread-22732] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:17:03.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:17:03.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:17:04.608 [DEBUG] [Thread-22732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:17:04.608 [DEBUG] [Thread-22732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:17:04.656 [DEBUG] [Thread-22732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:17:04.656 [DEBUG] [Thread-22732] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:17:04.665 [DEBUG] [Thread-22732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:17:04.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:17:04.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')
2026-04-15T17:17:04.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
2026-04-15T17:17:04.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:17:04.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:17:04.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:17:04.700 [DEBUG] [Thread-22732] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:17:04.897 [DEBUG] [Thread-22734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:17:19.943 [DEBUG] [Thread-22735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:17:27.286 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:17:27.287 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:17:34.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:17:34.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:17:34.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
2026-04-15T17:17:34.973 [DEBUG] [Thread-22736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:17:35.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 17, 6), 7.69737, 59.4955, 0.0, 15.863, 13.5234, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:17:35.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:17:06
2026-04-15T17:17:36.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:17:36.783 [DEBUG] [Thread-22737] [transport.py] [_log()] starting thread (client mode): 0xee91c7f0
2026-04-15T17:17:36.784 [DEBUG] [Thread-22737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:17:36.804 [DEBUG] [Thread-22737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:17:36.805 [INFO] [Thread-22737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:17:36.808 [DEBUG] [Thread-22737] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:17:36.808 [DEBUG] [Thread-22737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:17:36.808 [DEBUG] [Thread-22737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:17:36.808 [DEBUG] [Thread-22737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:17:36.808 [DEBUG] [Thread-22737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:17:36.808 [DEBUG] [Thread-22737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:17:36.808 [DEBUG] [Thread-22737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:17:36.808 [DEBUG] [Thread-22737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:17:36.809 [DEBUG] [Thread-22737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:17:36.809 [DEBUG] [Thread-22737] [transport.py] [_log()] client lang: <none>
2026-04-15T17:17:36.809 [DEBUG] [Thread-22737] [transport.py] [_log()] server lang: <none>
2026-04-15T17:17:36.809 [DEBUG] [Thread-22737] [transport.py] [_log()] kex follows: False
2026-04-15T17:17:36.809 [DEBUG] [Thread-22737] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:17:36.809 [DEBUG] [Thread-22737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:17:36.809 [DEBUG] [Thread-22737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:17:36.809 [DEBUG] [Thread-22737] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:17:36.809 [DEBUG] [Thread-22737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:17:36.809 [DEBUG] [Thread-22737] [transport.py] [_log()] Compression: none
2026-04-15T17:17:36.809 [DEBUG] [Thread-22737] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:17:36.826 [DEBUG] [Thread-22737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:17:36.827 [DEBUG] [Thread-22737] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:17:36.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:17:36.828 [DEBUG] [Thread-22737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:17:36.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:17:36.829 [DEBUG] [Thread-22737] [transport.py] [_log()] userauth is OK
2026-04-15T17:17:36.829 [DEBUG] [Thread-22737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:17:36.829 [DEBUG] [Thread-22737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:17:36.829 [DEBUG] [Thread-22737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:17:36.829 [DEBUG] [Thread-22737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:17:36.855 [INFO] [Thread-22737] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:17:36.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:17:37.608 [DEBUG] [Thread-22737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:17:37.608 [DEBUG] [Thread-22737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:17:37.609 [DEBUG] [Thread-22737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:17:37.649 [DEBUG] [Thread-22737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:17:37.649 [DEBUG] [Thread-22737] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:17:37.652 [DEBUG] [Thread-22737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:17:37.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:17:37.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:17:37.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:17:37.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:17:37.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:17:37.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:17:37.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:17:37.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:17:37.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:17:37.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.636593 -999.00  +13.50  16.52     66   +7.40 1 1 1 1 1   887    0 5.92 -33.63 ----- 17.2 16.5 323.8 22.1 17.0 -26.4 16.9 -25.1 16.9 -22.8 17.3 -24.5
2026-04-15T17:17:37.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:17:37.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:17:37.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.636593
2026-04-15T17:17:37.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:17:37.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:17:37.679 [DEBUG] [Thread-22737] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:17:37.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:17:37.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:17:37.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:17:37.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:17:06', tmtdew=7.69737, humidity=59.4955, cloud=0.0, wind=15.863, temperature=13.5234, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:16:41.635', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:17:37.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:17:37.944 [DEBUG] [Thread-22740] [transport.py] [_log()] starting thread (client mode): 0xee90da80
2026-04-15T17:17:37.944 [DEBUG] [Thread-22740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:17:37.962 [DEBUG] [Thread-22740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:17:37.963 [INFO] [Thread-22740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:17:37.973 [DEBUG] [Thread-22740] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:17:37.973 [DEBUG] [Thread-22740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:17:37.973 [DEBUG] [Thread-22740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:17:37.973 [DEBUG] [Thread-22740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:17:37.973 [DEBUG] [Thread-22740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:17:37.973 [DEBUG] [Thread-22740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:17:37.973 [DEBUG] [Thread-22740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:17:37.973 [DEBUG] [Thread-22740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:17:37.974 [DEBUG] [Thread-22740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:17:37.974 [DEBUG] [Thread-22740] [transport.py] [_log()] client lang: <none>
2026-04-15T17:17:37.974 [DEBUG] [Thread-22740] [transport.py] [_log()] server lang: <none>
2026-04-15T17:17:37.974 [DEBUG] [Thread-22740] [transport.py] [_log()] kex follows: False
2026-04-15T17:17:37.974 [DEBUG] [Thread-22740] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:17:37.974 [DEBUG] [Thread-22740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:17:37.974 [DEBUG] [Thread-22740] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:17:37.974 [DEBUG] [Thread-22740] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:17:37.974 [DEBUG] [Thread-22740] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:17:37.974 [DEBUG] [Thread-22740] [transport.py] [_log()] Compression: none
2026-04-15T17:17:37.974 [DEBUG] [Thread-22740] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:17:38.033 [DEBUG] [Thread-22740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:17:38.034 [DEBUG] [Thread-22740] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:17:38.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:17:38.035 [DEBUG] [Thread-22740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:17:38.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:17:38.092 [DEBUG] [Thread-22740] [transport.py] [_log()] userauth is OK
2026-04-15T17:17:38.093 [DEBUG] [Thread-22740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:17:38.093 [DEBUG] [Thread-22740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:17:38.093 [DEBUG] [Thread-22740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:17:38.093 [DEBUG] [Thread-22740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:17:38.120 [INFO] [Thread-22740] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:17:38.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:17:38.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:17:38.984 [DEBUG] [Thread-22740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:17:38.984 [DEBUG] [Thread-22740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:17:39.032 [DEBUG] [Thread-22740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:17:39.032 [DEBUG] [Thread-22740] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:17:39.041 [DEBUG] [Thread-22740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:17:39.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:17:39.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')
2026-04-15T17:17:39.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
2026-04-15T17:17:39.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:17:39.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:17:39.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:17:39.076 [DEBUG] [Thread-22740] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:17:42.117 [DEBUG] [Thread-22742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:17:50.003 [DEBUG] [Thread-22743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:18:05.041 [DEBUG] [Thread-22744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:18:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:18:09.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:18:09.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
2026-04-15T17:18:10.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 17, 42), 8.45584, 56.759, 0.0, 16.9027, 14.3799, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:18:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:17:42
2026-04-15T17:18:10.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:18:11.194 [DEBUG] [Thread-22745] [transport.py] [_log()] starting thread (client mode): 0xee90ef20
2026-04-15T17:18:11.195 [DEBUG] [Thread-22745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:18:11.214 [DEBUG] [Thread-22745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:18:11.214 [INFO] [Thread-22745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:18:11.217 [DEBUG] [Thread-22745] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:18:11.217 [DEBUG] [Thread-22745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] client lang: <none>
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] server lang: <none>
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] kex follows: False
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] Compression: none
2026-04-15T17:18:11.218 [DEBUG] [Thread-22745] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:18:11.235 [DEBUG] [Thread-22745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:18:11.235 [DEBUG] [Thread-22745] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:18:11.235 [DEBUG] [Thread-22745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:18:11.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:18:11.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:18:11.236 [DEBUG] [Thread-22745] [transport.py] [_log()] userauth is OK
2026-04-15T17:18:11.236 [DEBUG] [Thread-22745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:18:11.236 [DEBUG] [Thread-22745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:18:11.236 [DEBUG] [Thread-22745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:18:11.236 [DEBUG] [Thread-22745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:18:11.254 [INFO] [Thread-22745] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:18:11.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:18:12.064 [DEBUG] [Thread-22745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:18:12.064 [DEBUG] [Thread-22745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:18:12.065 [DEBUG] [Thread-22745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:18:12.105 [DEBUG] [Thread-22745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:18:12.105 [DEBUG] [Thread-22745] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:18:12.108 [DEBUG] [Thread-22745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:18:12.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:18:12.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:18:12.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:18:12.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:18:12.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:18:12.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:18:12.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:18:12.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:18:12.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:18:12.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.636941 -999.00  +13.50  17.47     66   +7.30 1 1 1 1 1   887    0 5.76 -37.73 ----- 16.1 17.5 309.8 22.8 16.9 -26.6 16.8 -25.2 16.9 -23.2 17.4 -24.9
2026-04-15T17:18:12.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:18:12.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:18:12.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.636941
2026-04-15T17:18:12.132 [DEBUG] [Thread-22745] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:18:12.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:18:12.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:18:12.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:18:12.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:18:12.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:18:12.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:17:42', tmtdew=8.45584, humidity=56.759, cloud=0.0, wind=16.9027, temperature=14.3799, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:17:11.702', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:18:12.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:18:12.392 [DEBUG] [Thread-22748] [transport.py] [_log()] starting thread (client mode): 0xee90c160
2026-04-15T17:18:12.392 [DEBUG] [Thread-22748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:18:12.411 [DEBUG] [Thread-22748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:18:12.411 [INFO] [Thread-22748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:18:12.418 [DEBUG] [Thread-22748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:18:12.418 [DEBUG] [Thread-22748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:18:12.418 [DEBUG] [Thread-22748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:18:12.418 [DEBUG] [Thread-22748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:18:12.419 [DEBUG] [Thread-22748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:18:12.419 [DEBUG] [Thread-22748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:18:12.419 [DEBUG] [Thread-22748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:18:12.419 [DEBUG] [Thread-22748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:18:12.419 [DEBUG] [Thread-22748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:18:12.419 [DEBUG] [Thread-22748] [transport.py] [_log()] client lang: <none>
2026-04-15T17:18:12.419 [DEBUG] [Thread-22748] [transport.py] [_log()] server lang: <none>
2026-04-15T17:18:12.419 [DEBUG] [Thread-22748] [transport.py] [_log()] kex follows: False
2026-04-15T17:18:12.419 [DEBUG] [Thread-22748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:18:12.419 [DEBUG] [Thread-22748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:18:12.419 [DEBUG] [Thread-22748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:18:12.420 [DEBUG] [Thread-22748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:18:12.420 [DEBUG] [Thread-22748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:18:12.420 [DEBUG] [Thread-22748] [transport.py] [_log()] Compression: none
2026-04-15T17:18:12.420 [DEBUG] [Thread-22748] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:18:12.479 [DEBUG] [Thread-22748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:18:12.480 [DEBUG] [Thread-22748] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:18:12.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:18:12.480 [DEBUG] [Thread-22748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:18:12.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:18:12.536 [DEBUG] [Thread-22748] [transport.py] [_log()] userauth is OK
2026-04-15T17:18:12.536 [DEBUG] [Thread-22748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:18:12.537 [DEBUG] [Thread-22748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:18:12.537 [DEBUG] [Thread-22748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:18:12.537 [DEBUG] [Thread-22748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:18:12.566 [INFO] [Thread-22748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:18:12.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:18:12.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:18:13.369 [DEBUG] [Thread-22748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:18:13.370 [DEBUG] [Thread-22748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:18:13.417 [DEBUG] [Thread-22748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:18:13.417 [DEBUG] [Thread-22748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:18:13.426 [DEBUG] [Thread-22748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:18:13.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:18:13.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')
2026-04-15T17:18:13.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
2026-04-15T17:18:13.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:18:13.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:18:13.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:18:13.461 [DEBUG] [Thread-22748] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:18:20.073 [DEBUG] [Thread-22750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:18:27.424 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:18:27.425 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:18:35.117 [DEBUG] [Thread-22751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:18:42.213 [DEBUG] [Thread-22752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:18:43.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:18:43.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:18:43.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
2026-04-15T17:18:44.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 18, 17), 7.95011, 58.6311, 0.0, 14.3629, 13.8725, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:18:44.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:18:17
2026-04-15T17:18:45.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:18:45.635 [DEBUG] [Thread-22753] [transport.py] [_log()] starting thread (client mode): 0xee91e7a0
2026-04-15T17:18:45.635 [DEBUG] [Thread-22753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:18:45.655 [DEBUG] [Thread-22753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:18:45.655 [INFO] [Thread-22753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:18:45.658 [DEBUG] [Thread-22753] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:18:45.658 [DEBUG] [Thread-22753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:18:45.659 [DEBUG] [Thread-22753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:18:45.659 [DEBUG] [Thread-22753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:18:45.659 [DEBUG] [Thread-22753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:18:45.659 [DEBUG] [Thread-22753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:18:45.659 [DEBUG] [Thread-22753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:18:45.659 [DEBUG] [Thread-22753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:18:45.659 [DEBUG] [Thread-22753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:18:45.659 [DEBUG] [Thread-22753] [transport.py] [_log()] client lang: <none>
2026-04-15T17:18:45.659 [DEBUG] [Thread-22753] [transport.py] [_log()] server lang: <none>
2026-04-15T17:18:45.659 [DEBUG] [Thread-22753] [transport.py] [_log()] kex follows: False
2026-04-15T17:18:45.659 [DEBUG] [Thread-22753] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:18:45.659 [DEBUG] [Thread-22753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:18:45.660 [DEBUG] [Thread-22753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:18:45.660 [DEBUG] [Thread-22753] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:18:45.660 [DEBUG] [Thread-22753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:18:45.660 [DEBUG] [Thread-22753] [transport.py] [_log()] Compression: none
2026-04-15T17:18:45.660 [DEBUG] [Thread-22753] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:18:45.677 [DEBUG] [Thread-22753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:18:45.678 [DEBUG] [Thread-22753] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:18:45.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:18:45.679 [DEBUG] [Thread-22753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:18:45.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:18:45.680 [DEBUG] [Thread-22753] [transport.py] [_log()] userauth is OK
2026-04-15T17:18:45.680 [DEBUG] [Thread-22753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:18:45.680 [DEBUG] [Thread-22753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:18:45.680 [DEBUG] [Thread-22753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:18:45.681 [DEBUG] [Thread-22753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:18:45.700 [INFO] [Thread-22753] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:18:45.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:18:46.280 [DEBUG] [Thread-22753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:18:46.280 [DEBUG] [Thread-22753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:18:46.280 [DEBUG] [Thread-22753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:18:46.321 [DEBUG] [Thread-22753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:18:46.321 [DEBUG] [Thread-22753] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:18:46.323 [DEBUG] [Thread-22753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:18:46.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:18:46.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:18:46.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:18:46.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:18:46.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:18:46.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:18:46.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:18:46.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:18:46.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:18:46.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.637982 -999.00  +13.50  16.00     65   +7.10 1 1 1 1 1   887    0 5.48 -48.84 ----- 14.7 16.0 286.2 19.3 16.8 -27.2 16.6 -25.0 17.0 -23.6 17.5 -25.2
2026-04-15T17:18:46.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:18:46.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:18:46.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.637982
2026-04-15T17:18:46.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:18:46.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:18:46.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:18:46.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:18:46.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:18:46.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:18:17', tmtdew=7.95011, humidity=58.6311, cloud=0.0, wind=14.3629, temperature=13.8725, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:18:41.645', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:18:46.337 [DEBUG] [Thread-22753] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:18:46.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:18:46.556 [DEBUG] [Thread-22756] [transport.py] [_log()] starting thread (client mode): 0xf1337250
2026-04-15T17:18:46.556 [DEBUG] [Thread-22756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:18:46.571 [DEBUG] [Thread-22756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:18:46.571 [INFO] [Thread-22756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:18:46.578 [DEBUG] [Thread-22756] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:18:46.578 [DEBUG] [Thread-22756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:18:46.578 [DEBUG] [Thread-22756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:18:46.579 [DEBUG] [Thread-22756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:18:46.579 [DEBUG] [Thread-22756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:18:46.579 [DEBUG] [Thread-22756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:18:46.579 [DEBUG] [Thread-22756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:18:46.579 [DEBUG] [Thread-22756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:18:46.579 [DEBUG] [Thread-22756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:18:46.579 [DEBUG] [Thread-22756] [transport.py] [_log()] client lang: <none>
2026-04-15T17:18:46.579 [DEBUG] [Thread-22756] [transport.py] [_log()] server lang: <none>
2026-04-15T17:18:46.579 [DEBUG] [Thread-22756] [transport.py] [_log()] kex follows: False
2026-04-15T17:18:46.579 [DEBUG] [Thread-22756] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:18:46.579 [DEBUG] [Thread-22756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:18:46.579 [DEBUG] [Thread-22756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:18:46.580 [DEBUG] [Thread-22756] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:18:46.580 [DEBUG] [Thread-22756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:18:46.580 [DEBUG] [Thread-22756] [transport.py] [_log()] Compression: none
2026-04-15T17:18:46.580 [DEBUG] [Thread-22756] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:18:46.634 [DEBUG] [Thread-22756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:18:46.635 [DEBUG] [Thread-22756] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:18:46.635 [DEBUG] [Thread-22756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:18:46.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:18:46.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:18:46.691 [DEBUG] [Thread-22756] [transport.py] [_log()] userauth is OK
2026-04-15T17:18:46.691 [DEBUG] [Thread-22756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:18:46.691 [DEBUG] [Thread-22756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:18:46.692 [DEBUG] [Thread-22756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:18:46.692 [DEBUG] [Thread-22756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:18:46.717 [INFO] [Thread-22756] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:18:46.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:18:46.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:18:47.600 [DEBUG] [Thread-22756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:18:47.600 [DEBUG] [Thread-22756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:18:47.648 [DEBUG] [Thread-22756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:18:47.648 [DEBUG] [Thread-22756] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:18:47.657 [DEBUG] [Thread-22756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:18:47.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:18:47.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')
2026-04-15T17:18:47.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
2026-04-15T17:18:47.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:18:47.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:18:47.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:18:47.692 [DEBUG] [Thread-22756] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:18:50.150 [DEBUG] [Thread-22758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:19:05.195 [DEBUG] [Thread-22759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:19:17.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:19:17.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:19:17.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
2026-04-15T17:19:18.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 18, 53), 8.51725, 56.5603, 0.0, 14.045, 14.5457, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:19:18.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:18:53
2026-04-15T17:19:19.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:19:19.791 [DEBUG] [Thread-22760] [transport.py] [_log()] starting thread (client mode): 0xf1350c40
2026-04-15T17:19:19.792 [DEBUG] [Thread-22760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:19:19.804 [DEBUG] [Thread-22760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:19:19.804 [INFO] [Thread-22760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:19:19.807 [DEBUG] [Thread-22760] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:19:19.807 [DEBUG] [Thread-22760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:19:19.807 [DEBUG] [Thread-22760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:19:19.807 [DEBUG] [Thread-22760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:19:19.807 [DEBUG] [Thread-22760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:19:19.807 [DEBUG] [Thread-22760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:19:19.808 [DEBUG] [Thread-22760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:19:19.808 [DEBUG] [Thread-22760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:19:19.808 [DEBUG] [Thread-22760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:19:19.808 [DEBUG] [Thread-22760] [transport.py] [_log()] client lang: <none>
2026-04-15T17:19:19.808 [DEBUG] [Thread-22760] [transport.py] [_log()] server lang: <none>
2026-04-15T17:19:19.808 [DEBUG] [Thread-22760] [transport.py] [_log()] kex follows: False
2026-04-15T17:19:19.808 [DEBUG] [Thread-22760] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:19:19.808 [DEBUG] [Thread-22760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:19:19.808 [DEBUG] [Thread-22760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:19:19.808 [DEBUG] [Thread-22760] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:19:19.808 [DEBUG] [Thread-22760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:19:19.809 [DEBUG] [Thread-22760] [transport.py] [_log()] Compression: none
2026-04-15T17:19:19.809 [DEBUG] [Thread-22760] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:19:19.825 [DEBUG] [Thread-22760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:19:19.825 [DEBUG] [Thread-22760] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:19:19.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:19:19.826 [DEBUG] [Thread-22760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:19:19.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:19:19.827 [DEBUG] [Thread-22760] [transport.py] [_log()] userauth is OK
2026-04-15T17:19:19.827 [DEBUG] [Thread-22760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:19:19.827 [DEBUG] [Thread-22760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:19:19.827 [DEBUG] [Thread-22760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:19:19.827 [DEBUG] [Thread-22760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:19:19.845 [INFO] [Thread-22760] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:19:19.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:19:20.225 [DEBUG] [Thread-22762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:19:20.467 [DEBUG] [Thread-22760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:19:20.467 [DEBUG] [Thread-22760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:19:20.468 [DEBUG] [Thread-22760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:19:20.508 [DEBUG] [Thread-22760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:19:20.508 [DEBUG] [Thread-22760] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:19:20.511 [DEBUG] [Thread-22760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:19:20.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:19:20.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:19:20.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:19:20.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:19:20.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:19:20.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:19:20.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:19:20.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:19:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:19:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.638329 -999.00  +13.50  17.00     64   +7.00 1 1 1 1 1   887    0 5.56 -46.54 ----- 15.8 17.0 297.8 18.6 16.9 -27.2 16.6 -25.1 17.1 -24.0 17.6 -25.7
2026-04-15T17:19:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:19:20.527 [DEBUG] [Thread-22760] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:19:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:19:20.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.638329
2026-04-15T17:19:20.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:19:20.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:19:20.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:19:20.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:19:20.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:19:20.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:18:53', tmtdew=8.51725, humidity=56.5603, cloud=0.0, wind=14.045, temperature=14.5457, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:19:11.626', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:19:20.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:19:20.792 [DEBUG] [Thread-22764] [transport.py] [_log()] starting thread (client mode): 0xee90cd90
2026-04-15T17:19:20.792 [DEBUG] [Thread-22764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:19:20.806 [DEBUG] [Thread-22764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:19:20.806 [INFO] [Thread-22764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:19:20.814 [DEBUG] [Thread-22764] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:19:20.815 [DEBUG] [Thread-22764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:19:20.815 [DEBUG] [Thread-22764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:19:20.815 [DEBUG] [Thread-22764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:19:20.815 [DEBUG] [Thread-22764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:19:20.815 [DEBUG] [Thread-22764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:19:20.815 [DEBUG] [Thread-22764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:19:20.815 [DEBUG] [Thread-22764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:19:20.815 [DEBUG] [Thread-22764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:19:20.815 [DEBUG] [Thread-22764] [transport.py] [_log()] client lang: <none>
2026-04-15T17:19:20.815 [DEBUG] [Thread-22764] [transport.py] [_log()] server lang: <none>
2026-04-15T17:19:20.815 [DEBUG] [Thread-22764] [transport.py] [_log()] kex follows: False
2026-04-15T17:19:20.815 [DEBUG] [Thread-22764] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:19:20.816 [DEBUG] [Thread-22764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:19:20.816 [DEBUG] [Thread-22764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:19:20.816 [DEBUG] [Thread-22764] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:19:20.816 [DEBUG] [Thread-22764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:19:20.816 [DEBUG] [Thread-22764] [transport.py] [_log()] Compression: none
2026-04-15T17:19:20.816 [DEBUG] [Thread-22764] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:19:20.869 [DEBUG] [Thread-22764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:19:20.870 [DEBUG] [Thread-22764] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:19:20.870 [DEBUG] [Thread-22764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:19:20.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:19:20.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:19:20.927 [DEBUG] [Thread-22764] [transport.py] [_log()] userauth is OK
2026-04-15T17:19:20.927 [DEBUG] [Thread-22764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:19:20.927 [DEBUG] [Thread-22764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:19:20.927 [DEBUG] [Thread-22764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:19:20.927 [DEBUG] [Thread-22764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:19:20.953 [INFO] [Thread-22764] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:19:20.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:19:20.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:19:21.801 [DEBUG] [Thread-22764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:19:21.801 [DEBUG] [Thread-22764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:19:21.849 [DEBUG] [Thread-22764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:19:21.849 [DEBUG] [Thread-22764] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:19:21.858 [DEBUG] [Thread-22764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:19:21.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:19:21.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')
2026-04-15T17:19:21.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
2026-04-15T17:19:21.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:19:21.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:19:21.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:19:21.894 [DEBUG] [Thread-22764] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:19:27.566 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:19:27.567 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:19:35.254 [DEBUG] [Thread-22766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:19:42.292 [DEBUG] [Thread-22767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:19:50.297 [DEBUG] [Thread-22768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:19:51.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:19:51.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:19:51.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
2026-04-15T17:19:53.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 19, 28), 8.07032, 58.2471, 0.0, 15.5815, 13.7726, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:19:53.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:19:28
2026-04-15T17:19:53.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:19:53.951 [DEBUG] [Thread-22769] [transport.py] [_log()] starting thread (client mode): 0xf1335ff0
2026-04-15T17:19:53.951 [DEBUG] [Thread-22769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:19:53.967 [DEBUG] [Thread-22769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:19:53.967 [INFO] [Thread-22769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:19:53.969 [DEBUG] [Thread-22769] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:19:53.969 [DEBUG] [Thread-22769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:19:53.969 [DEBUG] [Thread-22769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:19:53.969 [DEBUG] [Thread-22769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:19:53.969 [DEBUG] [Thread-22769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:19:53.969 [DEBUG] [Thread-22769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:19:53.969 [DEBUG] [Thread-22769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:19:53.969 [DEBUG] [Thread-22769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:19:53.969 [DEBUG] [Thread-22769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:19:53.969 [DEBUG] [Thread-22769] [transport.py] [_log()] client lang: <none>
2026-04-15T17:19:53.970 [DEBUG] [Thread-22769] [transport.py] [_log()] server lang: <none>
2026-04-15T17:19:53.970 [DEBUG] [Thread-22769] [transport.py] [_log()] kex follows: False
2026-04-15T17:19:53.970 [DEBUG] [Thread-22769] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:19:53.970 [DEBUG] [Thread-22769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:19:53.970 [DEBUG] [Thread-22769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:19:53.970 [DEBUG] [Thread-22769] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:19:53.970 [DEBUG] [Thread-22769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:19:53.970 [DEBUG] [Thread-22769] [transport.py] [_log()] Compression: none
2026-04-15T17:19:53.970 [DEBUG] [Thread-22769] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:19:53.985 [DEBUG] [Thread-22769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:19:53.985 [DEBUG] [Thread-22769] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:19:53.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:19:53.986 [DEBUG] [Thread-22769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:19:53.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:19:53.987 [DEBUG] [Thread-22769] [transport.py] [_log()] userauth is OK
2026-04-15T17:19:53.987 [DEBUG] [Thread-22769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:19:53.987 [DEBUG] [Thread-22769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:19:53.987 [DEBUG] [Thread-22769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:19:53.987 [DEBUG] [Thread-22769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:19:54.005 [INFO] [Thread-22769] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:19:54.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:19:54.613 [DEBUG] [Thread-22769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:19:54.613 [DEBUG] [Thread-22769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:19:54.613 [DEBUG] [Thread-22769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:19:54.654 [DEBUG] [Thread-22769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:19:54.654 [DEBUG] [Thread-22769] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:19:54.657 [DEBUG] [Thread-22769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:19:54.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:19:54.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:19:54.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:19:54.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:19:54.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:19:54.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:19:54.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:19:54.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:19:54.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:19:54.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.638676 -999.00  +13.50  12.92     65   +7.10 1 1 1 1 1   887    0 5.38 -50.70 ----- 13.4 12.9 284.8 17.7 16.8 -27.3 16.6 -25.5 17.1 -23.9 17.7 -25.5
2026-04-15T17:19:54.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:19:54.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:19:54.682 [DEBUG] [Thread-22769] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:19:54.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.638676
2026-04-15T17:19:54.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:19:54.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:19:54.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:19:54.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:19:54.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:19:54.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:19:28', tmtdew=8.07032, humidity=58.2471, cloud=0.0, wind=15.5815, temperature=13.7726, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:19:41.606', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:19:54.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:19:54.941 [DEBUG] [Thread-22772] [transport.py] [_log()] starting thread (client mode): 0xf1336080
2026-04-15T17:19:54.941 [DEBUG] [Thread-22772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:19:54.955 [DEBUG] [Thread-22772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:19:54.956 [INFO] [Thread-22772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:19:54.963 [DEBUG] [Thread-22772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:19:54.963 [DEBUG] [Thread-22772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:19:54.963 [DEBUG] [Thread-22772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:19:54.963 [DEBUG] [Thread-22772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:19:54.963 [DEBUG] [Thread-22772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:19:54.963 [DEBUG] [Thread-22772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:19:54.963 [DEBUG] [Thread-22772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:19:54.964 [DEBUG] [Thread-22772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:19:54.964 [DEBUG] [Thread-22772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:19:54.964 [DEBUG] [Thread-22772] [transport.py] [_log()] client lang: <none>
2026-04-15T17:19:54.964 [DEBUG] [Thread-22772] [transport.py] [_log()] server lang: <none>
2026-04-15T17:19:54.964 [DEBUG] [Thread-22772] [transport.py] [_log()] kex follows: False
2026-04-15T17:19:54.964 [DEBUG] [Thread-22772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:19:54.964 [DEBUG] [Thread-22772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:19:54.964 [DEBUG] [Thread-22772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:19:54.964 [DEBUG] [Thread-22772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:19:54.964 [DEBUG] [Thread-22772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:19:54.964 [DEBUG] [Thread-22772] [transport.py] [_log()] Compression: none
2026-04-15T17:19:54.964 [DEBUG] [Thread-22772] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:19:55.020 [DEBUG] [Thread-22772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:19:55.021 [DEBUG] [Thread-22772] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:19:55.021 [DEBUG] [Thread-22772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:19:55.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:19:55.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:19:55.078 [DEBUG] [Thread-22772] [transport.py] [_log()] userauth is OK
2026-04-15T17:19:55.078 [DEBUG] [Thread-22772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:19:55.078 [DEBUG] [Thread-22772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:19:55.078 [DEBUG] [Thread-22772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:19:55.078 [DEBUG] [Thread-22772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:19:55.103 [INFO] [Thread-22772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:19:55.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:19:55.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:19:55.908 [DEBUG] [Thread-22772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:19:55.908 [DEBUG] [Thread-22772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:19:55.956 [DEBUG] [Thread-22772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:19:55.956 [DEBUG] [Thread-22772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:19:55.965 [DEBUG] [Thread-22772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:19:55.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:19:55.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')
2026-04-15T17:19:55.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
2026-04-15T17:19:55.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:19:55.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:19:55.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:19:56.000 [DEBUG] [Thread-22772] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:20:05.331 [DEBUG] [Thread-22774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:20:20.373 [DEBUG] [Thread-22775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:20:26.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:20:26.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:20:26.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
2026-04-15T17:20:27.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 20, 4), 8.04275, 58.3465, 0.0, 15.7579, 13.7395, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:20:27.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:20:04
2026-04-15T17:20:27.708 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:20:27.709 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:20:27.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:20:28.237 [DEBUG] [Thread-22776] [transport.py] [_log()] starting thread (client mode): 0xf1350c40
2026-04-15T17:20:28.237 [DEBUG] [Thread-22776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:20:28.256 [DEBUG] [Thread-22776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:20:28.256 [INFO] [Thread-22776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:20:28.258 [DEBUG] [Thread-22776] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:20:28.258 [DEBUG] [Thread-22776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:20:28.258 [DEBUG] [Thread-22776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:20:28.258 [DEBUG] [Thread-22776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:20:28.258 [DEBUG] [Thread-22776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:20:28.259 [DEBUG] [Thread-22776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:20:28.259 [DEBUG] [Thread-22776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:20:28.259 [DEBUG] [Thread-22776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:20:28.259 [DEBUG] [Thread-22776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:20:28.259 [DEBUG] [Thread-22776] [transport.py] [_log()] client lang: <none>
2026-04-15T17:20:28.259 [DEBUG] [Thread-22776] [transport.py] [_log()] server lang: <none>
2026-04-15T17:20:28.259 [DEBUG] [Thread-22776] [transport.py] [_log()] kex follows: False
2026-04-15T17:20:28.259 [DEBUG] [Thread-22776] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:20:28.259 [DEBUG] [Thread-22776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:20:28.259 [DEBUG] [Thread-22776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:20:28.259 [DEBUG] [Thread-22776] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:20:28.260 [DEBUG] [Thread-22776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:20:28.260 [DEBUG] [Thread-22776] [transport.py] [_log()] Compression: none
2026-04-15T17:20:28.260 [DEBUG] [Thread-22776] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:20:28.270 [DEBUG] [Thread-22776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:20:28.270 [DEBUG] [Thread-22776] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:20:28.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:20:28.271 [DEBUG] [Thread-22776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:20:28.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:20:28.318 [DEBUG] [Thread-22776] [transport.py] [_log()] userauth is OK
2026-04-15T17:20:28.318 [DEBUG] [Thread-22776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:20:28.318 [DEBUG] [Thread-22776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:20:28.318 [DEBUG] [Thread-22776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:20:28.318 [DEBUG] [Thread-22776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:20:28.342 [INFO] [Thread-22776] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:20:28.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:20:28.950 [DEBUG] [Thread-22776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:20:28.950 [DEBUG] [Thread-22776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:20:28.951 [DEBUG] [Thread-22776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:20:28.991 [DEBUG] [Thread-22776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:20:28.991 [DEBUG] [Thread-22776] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:20:28.993 [DEBUG] [Thread-22776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:20:29.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:20:29.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:20:29.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:20:29.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:20:29.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:20:29.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:20:29.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:20:29.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:20:29.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:20:29.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.639024 -999.00  +13.50  12.02     65   +7.10 1 1 1 1 1   887    0 5.24 -54.36 ----- 12.9 12.0 296.6 16.6 16.9 -27.2 16.6 -25.6 17.2 -23.1 17.8 -25.2
2026-04-15T17:20:29.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:20:29.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:20:29.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.639024
2026-04-15T17:20:29.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:20:29.017 [DEBUG] [Thread-22776] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:20:29.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:20:29.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:20:29.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:20:29.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:20:29.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:20:04', tmtdew=8.04275, humidity=58.3465, cloud=0.0, wind=15.7579, temperature=13.7395, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:20:11.674', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:20:29.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:20:29.276 [DEBUG] [Thread-22779] [transport.py] [_log()] starting thread (client mode): 0xf13fdea0
2026-04-15T17:20:29.276 [DEBUG] [Thread-22779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:20:29.290 [DEBUG] [Thread-22779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:20:29.290 [INFO] [Thread-22779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:20:29.298 [DEBUG] [Thread-22779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:20:29.298 [DEBUG] [Thread-22779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:20:29.298 [DEBUG] [Thread-22779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:20:29.298 [DEBUG] [Thread-22779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:20:29.298 [DEBUG] [Thread-22779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:20:29.298 [DEBUG] [Thread-22779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:20:29.298 [DEBUG] [Thread-22779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:20:29.298 [DEBUG] [Thread-22779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:20:29.298 [DEBUG] [Thread-22779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:20:29.298 [DEBUG] [Thread-22779] [transport.py] [_log()] client lang: <none>
2026-04-15T17:20:29.298 [DEBUG] [Thread-22779] [transport.py] [_log()] server lang: <none>
2026-04-15T17:20:29.299 [DEBUG] [Thread-22779] [transport.py] [_log()] kex follows: False
2026-04-15T17:20:29.299 [DEBUG] [Thread-22779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:20:29.299 [DEBUG] [Thread-22779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:20:29.299 [DEBUG] [Thread-22779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:20:29.299 [DEBUG] [Thread-22779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:20:29.299 [DEBUG] [Thread-22779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:20:29.299 [DEBUG] [Thread-22779] [transport.py] [_log()] Compression: none
2026-04-15T17:20:29.299 [DEBUG] [Thread-22779] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:20:29.356 [DEBUG] [Thread-22779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:20:29.357 [DEBUG] [Thread-22779] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:20:29.357 [DEBUG] [Thread-22779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:20:29.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:20:29.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:20:29.413 [DEBUG] [Thread-22779] [transport.py] [_log()] userauth is OK
2026-04-15T17:20:29.413 [DEBUG] [Thread-22779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:20:29.414 [DEBUG] [Thread-22779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:20:29.414 [DEBUG] [Thread-22779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:20:29.414 [DEBUG] [Thread-22779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:20:29.439 [INFO] [Thread-22779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:20:29.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:20:29.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:20:30.263 [DEBUG] [Thread-22779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:20:30.263 [DEBUG] [Thread-22779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:20:30.310 [DEBUG] [Thread-22779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:20:30.311 [DEBUG] [Thread-22779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:20:30.319 [DEBUG] [Thread-22779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:20:30.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:20:30.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')
2026-04-15T17:20:30.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
2026-04-15T17:20:30.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:20:30.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:20:30.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:20:30.350 [DEBUG] [Thread-22779] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:20:35.404 [DEBUG] [Thread-22781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:20:42.369 [DEBUG] [Thread-22782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:20:50.451 [DEBUG] [Thread-22783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:21:00.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:21:00.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:21:00.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
2026-04-15T17:21:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 20, 39), 8.22311, 57.7533, 0.0, 13.7628, 14.6784, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:21:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:20:39
2026-04-15T17:21:02.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:21:02.458 [DEBUG] [Thread-22784] [transport.py] [_log()] starting thread (client mode): 0xf13ff730
2026-04-15T17:21:02.458 [DEBUG] [Thread-22784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:21:02.478 [DEBUG] [Thread-22784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:21:02.478 [INFO] [Thread-22784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:21:02.481 [DEBUG] [Thread-22784] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:21:02.481 [DEBUG] [Thread-22784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:21:02.481 [DEBUG] [Thread-22784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:21:02.481 [DEBUG] [Thread-22784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:21:02.481 [DEBUG] [Thread-22784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:21:02.481 [DEBUG] [Thread-22784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:21:02.481 [DEBUG] [Thread-22784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:21:02.482 [DEBUG] [Thread-22784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:21:02.482 [DEBUG] [Thread-22784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:21:02.482 [DEBUG] [Thread-22784] [transport.py] [_log()] client lang: <none>
2026-04-15T17:21:02.482 [DEBUG] [Thread-22784] [transport.py] [_log()] server lang: <none>
2026-04-15T17:21:02.482 [DEBUG] [Thread-22784] [transport.py] [_log()] kex follows: False
2026-04-15T17:21:02.482 [DEBUG] [Thread-22784] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:21:02.482 [DEBUG] [Thread-22784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:21:02.482 [DEBUG] [Thread-22784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:21:02.482 [DEBUG] [Thread-22784] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:21:02.482 [DEBUG] [Thread-22784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:21:02.482 [DEBUG] [Thread-22784] [transport.py] [_log()] Compression: none
2026-04-15T17:21:02.482 [DEBUG] [Thread-22784] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:21:02.491 [DEBUG] [Thread-22784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:21:02.491 [DEBUG] [Thread-22784] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:21:02.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:21:02.492 [DEBUG] [Thread-22784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:21:02.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:21:02.492 [DEBUG] [Thread-22784] [transport.py] [_log()] userauth is OK
2026-04-15T17:21:02.493 [DEBUG] [Thread-22784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:21:02.493 [DEBUG] [Thread-22784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:21:02.493 [DEBUG] [Thread-22784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:21:02.493 [DEBUG] [Thread-22784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:21:02.511 [INFO] [Thread-22784] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:21:02.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:21:03.154 [DEBUG] [Thread-22784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:21:03.155 [DEBUG] [Thread-22784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:21:03.155 [DEBUG] [Thread-22784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:21:03.195 [DEBUG] [Thread-22784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:21:03.195 [DEBUG] [Thread-22784] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:21:03.198 [DEBUG] [Thread-22784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:21:03.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:21:03.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:21:03.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:21:03.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:21:03.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:21:03.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:21:03.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:21:03.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:21:03.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:21:03.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.639371 -999.00  +13.50  12.10     64   +6.90 1 1 1 1 1   887    0 5.20 -55.40 ----- 11.0 12.1 301.6 15.1 16.9 -27.1 16.6 -25.5 17.3 -23.0 17.9 -25.1
2026-04-15T17:21:03.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:21:03.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:21:03.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.639371
2026-04-15T17:21:03.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:21:03.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:21:03.223 [DEBUG] [Thread-22784] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:21:03.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:21:03.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:21:03.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:21:03.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:20:39', tmtdew=8.22311, humidity=57.7533, cloud=0.0, wind=13.7628, temperature=14.6784, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:20:41.654', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:21:03.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:21:03.478 [DEBUG] [Thread-22787] [transport.py] [_log()] starting thread (client mode): 0xee91cf70
2026-04-15T17:21:03.478 [DEBUG] [Thread-22787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:21:03.492 [DEBUG] [Thread-22787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:21:03.492 [INFO] [Thread-22787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:21:03.500 [DEBUG] [Thread-22787] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:21:03.500 [DEBUG] [Thread-22787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:21:03.500 [DEBUG] [Thread-22787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:21:03.500 [DEBUG] [Thread-22787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:21:03.500 [DEBUG] [Thread-22787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:21:03.500 [DEBUG] [Thread-22787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:21:03.500 [DEBUG] [Thread-22787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:21:03.500 [DEBUG] [Thread-22787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:21:03.500 [DEBUG] [Thread-22787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:21:03.501 [DEBUG] [Thread-22787] [transport.py] [_log()] client lang: <none>
2026-04-15T17:21:03.501 [DEBUG] [Thread-22787] [transport.py] [_log()] server lang: <none>
2026-04-15T17:21:03.501 [DEBUG] [Thread-22787] [transport.py] [_log()] kex follows: False
2026-04-15T17:21:03.501 [DEBUG] [Thread-22787] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:21:03.501 [DEBUG] [Thread-22787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:21:03.501 [DEBUG] [Thread-22787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:21:03.501 [DEBUG] [Thread-22787] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:21:03.501 [DEBUG] [Thread-22787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:21:03.501 [DEBUG] [Thread-22787] [transport.py] [_log()] Compression: none
2026-04-15T17:21:03.501 [DEBUG] [Thread-22787] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:21:03.556 [DEBUG] [Thread-22787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:21:03.556 [DEBUG] [Thread-22787] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:21:03.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:21:03.557 [DEBUG] [Thread-22787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:21:03.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:21:03.612 [DEBUG] [Thread-22787] [transport.py] [_log()] userauth is OK
2026-04-15T17:21:03.613 [DEBUG] [Thread-22787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:21:03.613 [DEBUG] [Thread-22787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:21:03.613 [DEBUG] [Thread-22787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:21:03.613 [DEBUG] [Thread-22787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:21:03.638 [INFO] [Thread-22787] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:21:03.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:21:03.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:21:04.494 [DEBUG] [Thread-22787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:21:04.494 [DEBUG] [Thread-22787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:21:04.541 [DEBUG] [Thread-22787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:21:04.542 [DEBUG] [Thread-22787] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:21:04.551 [DEBUG] [Thread-22787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:21:04.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:21:04.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')
2026-04-15T17:21:04.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
2026-04-15T17:21:04.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:21:04.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:21:04.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:21:04.589 [DEBUG] [Thread-22787] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:21:05.480 [DEBUG] [Thread-22789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:21:20.525 [DEBUG] [Thread-22790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:21:27.849 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:21:27.850 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:21:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:21:34.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:21:34.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
2026-04-15T17:21:35.556 [DEBUG] [Thread-22791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:21:35.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 21, 15), 7.94598, 58.863, 0.0, 12.6695, 13.9054, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:21:35.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:21:15
2026-04-15T17:21:36.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:21:36.726 [DEBUG] [Thread-22792] [transport.py] [_log()] starting thread (client mode): 0xee90ff10
2026-04-15T17:21:36.726 [DEBUG] [Thread-22792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:21:36.745 [DEBUG] [Thread-22792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:21:36.745 [INFO] [Thread-22792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:21:36.748 [DEBUG] [Thread-22792] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:21:36.748 [DEBUG] [Thread-22792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:21:36.749 [DEBUG] [Thread-22792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:21:36.749 [DEBUG] [Thread-22792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:21:36.749 [DEBUG] [Thread-22792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:21:36.749 [DEBUG] [Thread-22792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:21:36.749 [DEBUG] [Thread-22792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:21:36.749 [DEBUG] [Thread-22792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:21:36.749 [DEBUG] [Thread-22792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:21:36.749 [DEBUG] [Thread-22792] [transport.py] [_log()] client lang: <none>
2026-04-15T17:21:36.749 [DEBUG] [Thread-22792] [transport.py] [_log()] server lang: <none>
2026-04-15T17:21:36.749 [DEBUG] [Thread-22792] [transport.py] [_log()] kex follows: False
2026-04-15T17:21:36.749 [DEBUG] [Thread-22792] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:21:36.749 [DEBUG] [Thread-22792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:21:36.750 [DEBUG] [Thread-22792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:21:36.750 [DEBUG] [Thread-22792] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:21:36.750 [DEBUG] [Thread-22792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:21:36.750 [DEBUG] [Thread-22792] [transport.py] [_log()] Compression: none
2026-04-15T17:21:36.750 [DEBUG] [Thread-22792] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:21:36.768 [DEBUG] [Thread-22792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:21:36.768 [DEBUG] [Thread-22792] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:21:36.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:21:36.769 [DEBUG] [Thread-22792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:21:36.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:21:36.770 [DEBUG] [Thread-22792] [transport.py] [_log()] userauth is OK
2026-04-15T17:21:36.770 [DEBUG] [Thread-22792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:21:36.770 [DEBUG] [Thread-22792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:21:36.771 [DEBUG] [Thread-22792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:21:36.771 [DEBUG] [Thread-22792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:21:36.806 [INFO] [Thread-22792] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:21:36.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:21:37.444 [DEBUG] [Thread-22792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:21:37.444 [DEBUG] [Thread-22792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:21:37.445 [DEBUG] [Thread-22792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:21:37.485 [DEBUG] [Thread-22792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:21:37.485 [DEBUG] [Thread-22792] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:21:37.488 [DEBUG] [Thread-22792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:21:37.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:21:37.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:21:37.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:21:37.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:21:37.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:21:37.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:21:37.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:21:37.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:21:37.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:21:37.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.639718 -999.00  +13.50  12.12     64   +6.90 1 1 1 1 1   887    0 5.14 -55.57 ----- 13.2 12.1 295.8 15.2 16.9 -27.2 16.6 -25.8 17.3 -24.3 17.9 -24.9
2026-04-15T17:21:37.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:21:37.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:21:37.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.639718
2026-04-15T17:21:37.514 [DEBUG] [Thread-22792] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:21:37.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:21:37.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:21:37.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:21:37.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:21:37.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:21:37.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:21:15', tmtdew=7.94598, humidity=58.863, cloud=0.0, wind=12.6695, temperature=13.9054, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:21:11.635', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:21:37.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:21:37.777 [DEBUG] [Thread-22795] [transport.py] [_log()] starting thread (client mode): 0xf13c9060
2026-04-15T17:21:37.777 [DEBUG] [Thread-22795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:21:37.792 [DEBUG] [Thread-22795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:21:37.792 [INFO] [Thread-22795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:21:37.800 [DEBUG] [Thread-22795] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:21:37.800 [DEBUG] [Thread-22795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:21:37.800 [DEBUG] [Thread-22795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:21:37.800 [DEBUG] [Thread-22795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:21:37.800 [DEBUG] [Thread-22795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:21:37.800 [DEBUG] [Thread-22795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:21:37.800 [DEBUG] [Thread-22795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:21:37.800 [DEBUG] [Thread-22795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:21:37.800 [DEBUG] [Thread-22795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:21:37.801 [DEBUG] [Thread-22795] [transport.py] [_log()] client lang: <none>
2026-04-15T17:21:37.801 [DEBUG] [Thread-22795] [transport.py] [_log()] server lang: <none>
2026-04-15T17:21:37.801 [DEBUG] [Thread-22795] [transport.py] [_log()] kex follows: False
2026-04-15T17:21:37.801 [DEBUG] [Thread-22795] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:21:37.801 [DEBUG] [Thread-22795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:21:37.801 [DEBUG] [Thread-22795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:21:37.801 [DEBUG] [Thread-22795] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:21:37.801 [DEBUG] [Thread-22795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:21:37.801 [DEBUG] [Thread-22795] [transport.py] [_log()] Compression: none
2026-04-15T17:21:37.801 [DEBUG] [Thread-22795] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:21:37.855 [DEBUG] [Thread-22795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:21:37.855 [DEBUG] [Thread-22795] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:21:37.856 [DEBUG] [Thread-22795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:21:37.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:21:37.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:21:37.912 [DEBUG] [Thread-22795] [transport.py] [_log()] userauth is OK
2026-04-15T17:21:37.912 [DEBUG] [Thread-22795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:21:37.912 [DEBUG] [Thread-22795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:21:37.912 [DEBUG] [Thread-22795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:21:37.912 [DEBUG] [Thread-22795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:21:37.936 [INFO] [Thread-22795] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:21:37.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:21:37.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:21:38.778 [DEBUG] [Thread-22795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:21:38.779 [DEBUG] [Thread-22795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:21:38.826 [DEBUG] [Thread-22795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:21:38.826 [DEBUG] [Thread-22795] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:21:38.835 [DEBUG] [Thread-22795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:21:38.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:21:38.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')
2026-04-15T17:21:38.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') -> 00000000
2026-04-15T17:21:38.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:21:38.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:21:38.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:21:38.870 [DEBUG] [Thread-22795] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:21:42.443 [DEBUG] [Thread-22797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:21:50.589 [DEBUG] [Thread-22798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:22:05.636 [DEBUG] [Thread-22799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:22:08.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:22:08.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:22:08.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
2026-04-15T17:22:10.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 21, 50), 8.53222, 56.5605, 0.0, 13.0219, 14.7778, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:22:10.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:21:50
2026-04-15T17:22:10.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:22:11.014 [DEBUG] [Thread-22800] [transport.py] [_log()] starting thread (client mode): 0xf13fff70
2026-04-15T17:22:11.014 [DEBUG] [Thread-22800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:22:11.032 [DEBUG] [Thread-22800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:22:11.032 [INFO] [Thread-22800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:22:11.034 [DEBUG] [Thread-22800] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:22:11.034 [DEBUG] [Thread-22800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:22:11.034 [DEBUG] [Thread-22800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:22:11.034 [DEBUG] [Thread-22800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:22:11.034 [DEBUG] [Thread-22800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:22:11.034 [DEBUG] [Thread-22800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:22:11.035 [DEBUG] [Thread-22800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:22:11.035 [DEBUG] [Thread-22800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:22:11.035 [DEBUG] [Thread-22800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:22:11.035 [DEBUG] [Thread-22800] [transport.py] [_log()] client lang: <none>
2026-04-15T17:22:11.035 [DEBUG] [Thread-22800] [transport.py] [_log()] server lang: <none>
2026-04-15T17:22:11.035 [DEBUG] [Thread-22800] [transport.py] [_log()] kex follows: False
2026-04-15T17:22:11.035 [DEBUG] [Thread-22800] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:22:11.035 [DEBUG] [Thread-22800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:22:11.035 [DEBUG] [Thread-22800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:22:11.035 [DEBUG] [Thread-22800] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:22:11.035 [DEBUG] [Thread-22800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:22:11.036 [DEBUG] [Thread-22800] [transport.py] [_log()] Compression: none
2026-04-15T17:22:11.036 [DEBUG] [Thread-22800] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:22:11.049 [DEBUG] [Thread-22800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:22:11.049 [DEBUG] [Thread-22800] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:22:11.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:22:11.050 [DEBUG] [Thread-22800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:22:11.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:22:11.051 [DEBUG] [Thread-22800] [transport.py] [_log()] userauth is OK
2026-04-15T17:22:11.051 [DEBUG] [Thread-22800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:22:11.051 [DEBUG] [Thread-22800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:22:11.051 [DEBUG] [Thread-22800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:22:11.051 [DEBUG] [Thread-22800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:22:11.069 [INFO] [Thread-22800] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:22:11.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:22:11.721 [DEBUG] [Thread-22800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:22:11.721 [DEBUG] [Thread-22800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:22:11.722 [DEBUG] [Thread-22800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:22:11.762 [DEBUG] [Thread-22800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:22:11.762 [DEBUG] [Thread-22800] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:22:11.765 [DEBUG] [Thread-22800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:22:11.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:22:11.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:22:11.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:22:11.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:22:11.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:22:11.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:22:11.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:22:11.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:22:11.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:22:11.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.640065 -999.00  +13.60  12.16     65   +7.20 1 1 1 1 1   887    0 5.15 -56.78 ----- 12.9 12.2 288.0 18.2 16.9 -27.0 16.6 -25.5 17.3 -22.8 17.9 -24.6
2026-04-15T17:22:11.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:22:11.788 [DEBUG] [Thread-22800] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:22:11.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:22:11.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.640065
2026-04-15T17:22:11.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:22:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:22:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:22:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:22:11.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:22:11.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:21:50', tmtdew=8.53222, humidity=56.5605, cloud=0.0, wind=13.0219, temperature=14.7778, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:21:41.616', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:22:12.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:22:12.043 [DEBUG] [Thread-22803] [transport.py] [_log()] starting thread (client mode): 0xf13ffac0
2026-04-15T17:22:12.044 [DEBUG] [Thread-22803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:22:12.058 [DEBUG] [Thread-22803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:22:12.058 [INFO] [Thread-22803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:22:12.065 [DEBUG] [Thread-22803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:22:12.066 [DEBUG] [Thread-22803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:22:12.066 [DEBUG] [Thread-22803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:22:12.066 [DEBUG] [Thread-22803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:22:12.066 [DEBUG] [Thread-22803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:22:12.066 [DEBUG] [Thread-22803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:22:12.066 [DEBUG] [Thread-22803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:22:12.066 [DEBUG] [Thread-22803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:22:12.066 [DEBUG] [Thread-22803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:22:12.066 [DEBUG] [Thread-22803] [transport.py] [_log()] client lang: <none>
2026-04-15T17:22:12.066 [DEBUG] [Thread-22803] [transport.py] [_log()] server lang: <none>
2026-04-15T17:22:12.066 [DEBUG] [Thread-22803] [transport.py] [_log()] kex follows: False
2026-04-15T17:22:12.067 [DEBUG] [Thread-22803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:22:12.067 [DEBUG] [Thread-22803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:22:12.067 [DEBUG] [Thread-22803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:22:12.067 [DEBUG] [Thread-22803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:22:12.067 [DEBUG] [Thread-22803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:22:12.067 [DEBUG] [Thread-22803] [transport.py] [_log()] Compression: none
2026-04-15T17:22:12.067 [DEBUG] [Thread-22803] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:22:12.123 [DEBUG] [Thread-22803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:22:12.123 [DEBUG] [Thread-22803] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:22:12.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:22:12.124 [DEBUG] [Thread-22803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:22:12.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:22:12.179 [DEBUG] [Thread-22803] [transport.py] [_log()] userauth is OK
2026-04-15T17:22:12.179 [DEBUG] [Thread-22803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:22:12.180 [DEBUG] [Thread-22803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:22:12.180 [DEBUG] [Thread-22803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:22:12.180 [DEBUG] [Thread-22803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:22:12.205 [INFO] [Thread-22803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:22:12.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:22:12.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:22:13.046 [DEBUG] [Thread-22803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:22:13.047 [DEBUG] [Thread-22803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:22:13.095 [DEBUG] [Thread-22803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:22:13.095 [DEBUG] [Thread-22803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:22:13.104 [DEBUG] [Thread-22803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:22:13.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:22:13.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')
2026-04-15T17:22: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') -> 00000000
2026-04-15T17:22:13.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:22:13.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:22:13.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:22:13.139 [DEBUG] [Thread-22803] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:22:20.666 [DEBUG] [Thread-22805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:22:27.990 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:22:27.990 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:22:35.707 [DEBUG] [Thread-22806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:22:42.518 [DEBUG] [Thread-22807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:22:43.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:22:43.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:22:43.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
2026-04-15T17:22:44.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 22, 26), 7.99067, 58.3796, 0.0, 14.9458, 14.0389, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:22:44.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:22:26
2026-04-15T17:22:44.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:22:45.359 [DEBUG] [Thread-22808] [transport.py] [_log()] starting thread (client mode): 0xf13fd5a0
2026-04-15T17:22:45.359 [DEBUG] [Thread-22808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:22:45.378 [DEBUG] [Thread-22808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:22:45.378 [INFO] [Thread-22808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:22:45.381 [DEBUG] [Thread-22808] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:22:45.382 [DEBUG] [Thread-22808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:22:45.382 [DEBUG] [Thread-22808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:22:45.382 [DEBUG] [Thread-22808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:22:45.382 [DEBUG] [Thread-22808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:22:45.382 [DEBUG] [Thread-22808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:22:45.382 [DEBUG] [Thread-22808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:22:45.382 [DEBUG] [Thread-22808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:22:45.382 [DEBUG] [Thread-22808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:22:45.382 [DEBUG] [Thread-22808] [transport.py] [_log()] client lang: <none>
2026-04-15T17:22:45.382 [DEBUG] [Thread-22808] [transport.py] [_log()] server lang: <none>
2026-04-15T17:22:45.382 [DEBUG] [Thread-22808] [transport.py] [_log()] kex follows: False
2026-04-15T17:22:45.383 [DEBUG] [Thread-22808] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:22:45.383 [DEBUG] [Thread-22808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:22:45.383 [DEBUG] [Thread-22808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:22:45.383 [DEBUG] [Thread-22808] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:22:45.383 [DEBUG] [Thread-22808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:22:45.383 [DEBUG] [Thread-22808] [transport.py] [_log()] Compression: none
2026-04-15T17:22:45.383 [DEBUG] [Thread-22808] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:22:45.401 [DEBUG] [Thread-22808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:22:45.401 [DEBUG] [Thread-22808] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:22:45.402 [DEBUG] [Thread-22808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:22:45.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:22:45.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:22:45.403 [DEBUG] [Thread-22808] [transport.py] [_log()] userauth is OK
2026-04-15T17:22:45.403 [DEBUG] [Thread-22808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:22:45.403 [DEBUG] [Thread-22808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:22:45.403 [DEBUG] [Thread-22808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:22:45.403 [DEBUG] [Thread-22808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:22:45.426 [INFO] [Thread-22808] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:22:45.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:22:46.074 [DEBUG] [Thread-22808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:22:46.074 [DEBUG] [Thread-22808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:22:46.075 [DEBUG] [Thread-22808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:22:46.115 [DEBUG] [Thread-22808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:22:46.115 [DEBUG] [Thread-22808] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:22:46.118 [DEBUG] [Thread-22808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:22:46.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:22:46.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:22:46.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:22:46.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:22:46.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:22:46.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:22:46.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:22:46.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:22:46.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:22:46.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.640413 -999.00  +13.80  12.64     65   +7.40 1 1 1 1 1   887    0 5.08 -60.09 ----- 11.1 12.6 290.6 17.2 17.0 -27.1 16.7 -25.5 17.4 -22.6 18.0 -25.1
2026-04-15T17:22:46.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:22:46.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:22:46.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.640413
2026-04-15T17:22:46.141 [DEBUG] [Thread-22808] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:22:46.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:22:46.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:22:46.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:22:46.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:22:46.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:22:46.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:22:26', tmtdew=7.99067, humidity=58.3796, cloud=0.0, wind=14.9458, temperature=14.0389, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:22:11.683', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:22:46.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:22:46.418 [DEBUG] [Thread-22811] [transport.py] [_log()] starting thread (client mode): 0xf1334a30
2026-04-15T17:22:46.418 [DEBUG] [Thread-22811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:22:46.433 [DEBUG] [Thread-22811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:22:46.434 [INFO] [Thread-22811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:22:46.441 [DEBUG] [Thread-22811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:22:46.442 [DEBUG] [Thread-22811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:22:46.442 [DEBUG] [Thread-22811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:22:46.442 [DEBUG] [Thread-22811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:22:46.442 [DEBUG] [Thread-22811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:22:46.442 [DEBUG] [Thread-22811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:22:46.442 [DEBUG] [Thread-22811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:22:46.442 [DEBUG] [Thread-22811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:22:46.442 [DEBUG] [Thread-22811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:22:46.442 [DEBUG] [Thread-22811] [transport.py] [_log()] client lang: <none>
2026-04-15T17:22:46.442 [DEBUG] [Thread-22811] [transport.py] [_log()] server lang: <none>
2026-04-15T17:22:46.442 [DEBUG] [Thread-22811] [transport.py] [_log()] kex follows: False
2026-04-15T17:22:46.442 [DEBUG] [Thread-22811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:22:46.442 [DEBUG] [Thread-22811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:22:46.442 [DEBUG] [Thread-22811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:22:46.442 [DEBUG] [Thread-22811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:22:46.443 [DEBUG] [Thread-22811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:22:46.443 [DEBUG] [Thread-22811] [transport.py] [_log()] Compression: none
2026-04-15T17:22:46.443 [DEBUG] [Thread-22811] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:22:46.502 [DEBUG] [Thread-22811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:22:46.502 [DEBUG] [Thread-22811] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:22:46.503 [DEBUG] [Thread-22811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:22:46.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:22:46.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:22:46.559 [DEBUG] [Thread-22811] [transport.py] [_log()] userauth is OK
2026-04-15T17:22:46.559 [DEBUG] [Thread-22811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:22:46.560 [DEBUG] [Thread-22811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:22:46.560 [DEBUG] [Thread-22811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:22:46.560 [DEBUG] [Thread-22811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:22:46.583 [INFO] [Thread-22811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:22:46.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:22:46.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:22:47.422 [DEBUG] [Thread-22811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:22:47.422 [DEBUG] [Thread-22811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:22:47.470 [DEBUG] [Thread-22811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:22:47.470 [DEBUG] [Thread-22811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:22:47.479 [DEBUG] [Thread-22811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:22:47.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:22:47.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')
2026-04-15T17:22:47.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
2026-04-15T17:22:47.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:22:47.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:22:47.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:22:47.517 [DEBUG] [Thread-22811] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:22:50.737 [DEBUG] [Thread-22813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:23:05.776 [DEBUG] [Thread-22814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:23:17.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:23:17.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:23:17.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T17:23:18.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 23, 2), 7.96213, 58.4791, 0.0, 17.239, 13.9892, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:23:18.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:23:02
2026-04-15T17:23:19.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:23:19.681 [DEBUG] [Thread-22815] [transport.py] [_log()] starting thread (client mode): 0xf13caef0
2026-04-15T17:23:19.681 [DEBUG] [Thread-22815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:23:19.700 [DEBUG] [Thread-22815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:23:19.700 [INFO] [Thread-22815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:23:19.703 [DEBUG] [Thread-22815] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:23:19.703 [DEBUG] [Thread-22815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:23:19.703 [DEBUG] [Thread-22815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:23:19.703 [DEBUG] [Thread-22815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:23:19.704 [DEBUG] [Thread-22815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:23:19.704 [DEBUG] [Thread-22815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:23:19.704 [DEBUG] [Thread-22815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:23:19.704 [DEBUG] [Thread-22815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:23:19.704 [DEBUG] [Thread-22815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:23:19.704 [DEBUG] [Thread-22815] [transport.py] [_log()] client lang: <none>
2026-04-15T17:23:19.704 [DEBUG] [Thread-22815] [transport.py] [_log()] server lang: <none>
2026-04-15T17:23:19.704 [DEBUG] [Thread-22815] [transport.py] [_log()] kex follows: False
2026-04-15T17:23:19.704 [DEBUG] [Thread-22815] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:23:19.704 [DEBUG] [Thread-22815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:23:19.704 [DEBUG] [Thread-22815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:23:19.704 [DEBUG] [Thread-22815] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:23:19.704 [DEBUG] [Thread-22815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:23:19.705 [DEBUG] [Thread-22815] [transport.py] [_log()] Compression: none
2026-04-15T17:23:19.705 [DEBUG] [Thread-22815] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:23:19.721 [DEBUG] [Thread-22815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:23:19.721 [DEBUG] [Thread-22815] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:23:19.722 [DEBUG] [Thread-22815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:23:19.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:23:19.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:23:19.762 [DEBUG] [Thread-22815] [transport.py] [_log()] userauth is OK
2026-04-15T17:23:19.762 [DEBUG] [Thread-22815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:23:19.762 [DEBUG] [Thread-22815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:23:19.762 [DEBUG] [Thread-22815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:23:19.762 [DEBUG] [Thread-22815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:23:19.794 [INFO] [Thread-22815] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:23:19.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:23:20.447 [DEBUG] [Thread-22815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:23:20.448 [DEBUG] [Thread-22815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:23:20.448 [DEBUG] [Thread-22815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:23:20.488 [DEBUG] [Thread-22815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:23:20.488 [DEBUG] [Thread-22815] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:23:20.491 [DEBUG] [Thread-22815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:23:20.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:23:20.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:23:20.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:23:20.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:23:20.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:23:20.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:23:20.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:23:20.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:23:20.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:23:20.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.640760 -999.00  +13.80  11.43     64   +7.30 1 1 1 1 1   887    0 4.96 -64.38 ----- 16.2 11.4 302.2 18.0 17.0 -27.1 16.8 -25.5 17.4 -22.5 18.1 -24.9
2026-04-15T17:23:20.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:23:20.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:23:20.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.640760
2026-04-15T17:23:20.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:23:20.515 [DEBUG] [Thread-22815] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:23:20.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:23:20.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:23:20.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:23:20.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:23:20.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:23:02', tmtdew=7.96213, humidity=58.4791, cloud=0.0, wind=17.239, temperature=13.9892, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:22:41.664', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:23:20.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:23:20.773 [DEBUG] [Thread-22818] [transport.py] [_log()] starting thread (client mode): 0xf13fc970
2026-04-15T17:23:20.773 [DEBUG] [Thread-22818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:23:20.791 [DEBUG] [Thread-22818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:23:20.791 [INFO] [Thread-22818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:23:20.802 [DEBUG] [Thread-22818] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:23:20.802 [DEBUG] [Thread-22818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:23:20.802 [DEBUG] [Thread-22818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:23:20.802 [DEBUG] [Thread-22818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:23:20.803 [DEBUG] [Thread-22818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:23:20.803 [DEBUG] [Thread-22818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:23:20.803 [DEBUG] [Thread-22818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:23:20.803 [DEBUG] [Thread-22818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:23:20.803 [DEBUG] [Thread-22818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:23:20.803 [DEBUG] [Thread-22818] [transport.py] [_log()] client lang: <none>
2026-04-15T17:23:20.803 [DEBUG] [Thread-22818] [transport.py] [_log()] server lang: <none>
2026-04-15T17:23:20.803 [DEBUG] [Thread-22818] [transport.py] [_log()] kex follows: False
2026-04-15T17:23:20.803 [DEBUG] [Thread-22818] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:23:20.803 [DEBUG] [Thread-22818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:23:20.803 [DEBUG] [Thread-22818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:23:20.803 [DEBUG] [Thread-22818] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:23:20.804 [DEBUG] [Thread-22818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:23:20.804 [DEBUG] [Thread-22818] [transport.py] [_log()] Compression: none
2026-04-15T17:23:20.804 [DEBUG] [Thread-22818] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:23:20.806 [DEBUG] [Thread-22820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:23:20.861 [DEBUG] [Thread-22818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:23:20.862 [DEBUG] [Thread-22818] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:23:20.862 [DEBUG] [Thread-22818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:23:20.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:23:20.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:23:20.918 [DEBUG] [Thread-22818] [transport.py] [_log()] userauth is OK
2026-04-15T17:23:20.919 [DEBUG] [Thread-22818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:23:20.919 [DEBUG] [Thread-22818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:23:20.919 [DEBUG] [Thread-22818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:23:20.919 [DEBUG] [Thread-22818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:23:20.945 [INFO] [Thread-22818] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:23:20.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:23:20.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:23:21.782 [DEBUG] [Thread-22818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:23:21.783 [DEBUG] [Thread-22818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:23:21.831 [DEBUG] [Thread-22818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:23:21.831 [DEBUG] [Thread-22818] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:23:21.839 [DEBUG] [Thread-22818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:23:21.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:23:21.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')
2026-04-15T17:23:21.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
2026-04-15T17:23:21.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:23:21.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:23:21.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:23:21.872 [DEBUG] [Thread-22818] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:23:28.131 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:23:28.132 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:23:35.851 [DEBUG] [Thread-22821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:23:42.607 [DEBUG] [Thread-22822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:23:50.881 [DEBUG] [Thread-22823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:23:51.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:23:51.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:23:51.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
2026-04-15T17:23:53.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 23, 37), 8.15061, 57.9521, 0.0, 21.0658, 14.314, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:23:53.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:23:37
2026-04-15T17:23:53.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:23:54.060 [DEBUG] [Thread-22824] [transport.py] [_log()] starting thread (client mode): 0xf13c9cf0
2026-04-15T17:23:54.060 [DEBUG] [Thread-22824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:23:54.079 [DEBUG] [Thread-22824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:23:54.079 [INFO] [Thread-22824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:23:54.082 [DEBUG] [Thread-22824] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:23:54.082 [DEBUG] [Thread-22824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:23:54.082 [DEBUG] [Thread-22824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:23:54.082 [DEBUG] [Thread-22824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:23:54.082 [DEBUG] [Thread-22824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:23:54.083 [DEBUG] [Thread-22824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:23:54.083 [DEBUG] [Thread-22824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:23:54.083 [DEBUG] [Thread-22824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:23:54.083 [DEBUG] [Thread-22824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:23:54.083 [DEBUG] [Thread-22824] [transport.py] [_log()] client lang: <none>
2026-04-15T17:23:54.083 [DEBUG] [Thread-22824] [transport.py] [_log()] server lang: <none>
2026-04-15T17:23:54.083 [DEBUG] [Thread-22824] [transport.py] [_log()] kex follows: False
2026-04-15T17:23:54.083 [DEBUG] [Thread-22824] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:23:54.083 [DEBUG] [Thread-22824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:23:54.083 [DEBUG] [Thread-22824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:23:54.083 [DEBUG] [Thread-22824] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:23:54.083 [DEBUG] [Thread-22824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:23:54.083 [DEBUG] [Thread-22824] [transport.py] [_log()] Compression: none
2026-04-15T17:23:54.083 [DEBUG] [Thread-22824] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:23:54.101 [DEBUG] [Thread-22824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:23:54.101 [DEBUG] [Thread-22824] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:23:54.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:23:54.101 [DEBUG] [Thread-22824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:23:54.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:23:54.103 [DEBUG] [Thread-22824] [transport.py] [_log()] userauth is OK
2026-04-15T17:23:54.103 [DEBUG] [Thread-22824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:23:54.103 [DEBUG] [Thread-22824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:23:54.103 [DEBUG] [Thread-22824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:23:54.103 [DEBUG] [Thread-22824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:23:54.127 [INFO] [Thread-22824] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:23:54.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:23:54.790 [DEBUG] [Thread-22824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:23:54.790 [DEBUG] [Thread-22824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:23:54.790 [DEBUG] [Thread-22824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:23:54.831 [DEBUG] [Thread-22824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:23:54.831 [DEBUG] [Thread-22824] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:23:54.834 [DEBUG] [Thread-22824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:23:54.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:23:54.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:23:54.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:23:54.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:23:54.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:23:54.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:23:54.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:23:54.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:23:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:23:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.641454 -999.00  +13.70  13.18     65   +7.20 1 1 1 1 1   887    0 4.85 -67.66 ----- 14.2 13.2 317.4 15.1 17.0 -26.7 16.7 -25.4 17.5 -22.3 18.1 -24.8
2026-04-15T17:23:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:23:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:23:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.641454
2026-04-15T17:23:54.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:23:54.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:23:54.860 [DEBUG] [Thread-22824] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:23:54.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:23:54.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:23:54.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:23:54.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:23:37', tmtdew=8.15061, humidity=57.9521, cloud=0.0, wind=21.0658, temperature=14.314, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:23:41.626', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:23:55.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:23:55.117 [DEBUG] [Thread-22827] [transport.py] [_log()] starting thread (client mode): 0xf13c9690
2026-04-15T17:23:55.118 [DEBUG] [Thread-22827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:23:55.131 [DEBUG] [Thread-22827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:23:55.131 [INFO] [Thread-22827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:23:55.139 [DEBUG] [Thread-22827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:23:55.139 [DEBUG] [Thread-22827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:23:55.139 [DEBUG] [Thread-22827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:23:55.139 [DEBUG] [Thread-22827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:23:55.139 [DEBUG] [Thread-22827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:23:55.139 [DEBUG] [Thread-22827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:23:55.139 [DEBUG] [Thread-22827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:23:55.139 [DEBUG] [Thread-22827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:23:55.139 [DEBUG] [Thread-22827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:23:55.140 [DEBUG] [Thread-22827] [transport.py] [_log()] client lang: <none>
2026-04-15T17:23:55.140 [DEBUG] [Thread-22827] [transport.py] [_log()] server lang: <none>
2026-04-15T17:23:55.140 [DEBUG] [Thread-22827] [transport.py] [_log()] kex follows: False
2026-04-15T17:23:55.140 [DEBUG] [Thread-22827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:23:55.140 [DEBUG] [Thread-22827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:23:55.140 [DEBUG] [Thread-22827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:23:55.140 [DEBUG] [Thread-22827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:23:55.140 [DEBUG] [Thread-22827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:23:55.140 [DEBUG] [Thread-22827] [transport.py] [_log()] Compression: none
2026-04-15T17:23:55.140 [DEBUG] [Thread-22827] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:23:55.197 [DEBUG] [Thread-22827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:23:55.197 [DEBUG] [Thread-22827] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:23:55.198 [DEBUG] [Thread-22827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:23:55.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:23:55.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:23:55.254 [DEBUG] [Thread-22827] [transport.py] [_log()] userauth is OK
2026-04-15T17:23:55.254 [DEBUG] [Thread-22827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:23:55.254 [DEBUG] [Thread-22827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:23:55.254 [DEBUG] [Thread-22827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:23:55.254 [DEBUG] [Thread-22827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:23:55.279 [INFO] [Thread-22827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:23:55.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:23:55.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:23:56.082 [DEBUG] [Thread-22827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:23:56.083 [DEBUG] [Thread-22827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:23:56.131 [DEBUG] [Thread-22827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:23:56.131 [DEBUG] [Thread-22827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:23:56.140 [DEBUG] [Thread-22827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:23:56.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:23:56.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')
2026-04-15T17:23:56.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') -> 00000000
2026-04-15T17:23:56.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:23:56.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:23:56.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:23:56.174 [DEBUG] [Thread-22827] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:24:05.911 [DEBUG] [Thread-22829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:24:20.952 [DEBUG] [Thread-22830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:24:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:24:26.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:24:26.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
2026-04-15T17:24:27.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 24, 13), 7.79293, 59.3072, 0.0, 16.304, 13.7567, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:24:27.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:24:13
2026-04-15T17:24:27.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:24:28.273 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:24:28.274 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:24:28.339 [DEBUG] [Thread-22831] [transport.py] [_log()] starting thread (client mode): 0xf1333040
2026-04-15T17:24:28.340 [DEBUG] [Thread-22831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:24:28.359 [DEBUG] [Thread-22831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:24:28.359 [INFO] [Thread-22831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:24:28.362 [DEBUG] [Thread-22831] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:24:28.362 [DEBUG] [Thread-22831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:24:28.362 [DEBUG] [Thread-22831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:24:28.362 [DEBUG] [Thread-22831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:24:28.362 [DEBUG] [Thread-22831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:24:28.362 [DEBUG] [Thread-22831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:24:28.362 [DEBUG] [Thread-22831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:24:28.362 [DEBUG] [Thread-22831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:24:28.362 [DEBUG] [Thread-22831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:24:28.362 [DEBUG] [Thread-22831] [transport.py] [_log()] client lang: <none>
2026-04-15T17:24:28.363 [DEBUG] [Thread-22831] [transport.py] [_log()] server lang: <none>
2026-04-15T17:24:28.363 [DEBUG] [Thread-22831] [transport.py] [_log()] kex follows: False
2026-04-15T17:24:28.363 [DEBUG] [Thread-22831] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:24:28.363 [DEBUG] [Thread-22831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:24:28.363 [DEBUG] [Thread-22831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:24:28.363 [DEBUG] [Thread-22831] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:24:28.363 [DEBUG] [Thread-22831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:24:28.363 [DEBUG] [Thread-22831] [transport.py] [_log()] Compression: none
2026-04-15T17:24:28.363 [DEBUG] [Thread-22831] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:24:28.371 [DEBUG] [Thread-22831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:24:28.371 [DEBUG] [Thread-22831] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:24:28.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:24:28.372 [DEBUG] [Thread-22831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:24:28.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:24:28.372 [DEBUG] [Thread-22831] [transport.py] [_log()] userauth is OK
2026-04-15T17:24:28.373 [DEBUG] [Thread-22831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:24:28.373 [DEBUG] [Thread-22831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:24:28.373 [DEBUG] [Thread-22831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:24:28.373 [DEBUG] [Thread-22831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:24:28.396 [INFO] [Thread-22831] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:24:28.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:24:29.040 [DEBUG] [Thread-22831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:24:29.040 [DEBUG] [Thread-22831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:24:29.041 [DEBUG] [Thread-22831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:24:29.081 [DEBUG] [Thread-22831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:24:29.081 [DEBUG] [Thread-22831] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:24:29.084 [DEBUG] [Thread-22831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:24:29.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:24:29.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:24:29.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:24:29.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:24:29.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:24:29.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:24:29.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:24:29.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:24:29.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:24:29.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.641801 -999.00  +13.60  18.83     66   +7.40 1 1 1 1 1   887    0 4.58 -73.39 ----- 18.3 18.8 308.4 24.6 17.0 -27.5 16.8 -25.5 17.5 -24.4 18.1 -25.1
2026-04-15T17:24:29.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:24:29.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:24:29.111 [DEBUG] [Thread-22831] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:24:29.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.641801
2026-04-15T17:24:29.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:24:29.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:24:29.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:24:29.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:24:29.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:24:29.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:24:13', tmtdew=7.79293, humidity=59.3072, cloud=0.0, wind=16.304, temperature=13.7567, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:24:11.606', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:24:29.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:24:29.372 [DEBUG] [Thread-22834] [transport.py] [_log()] starting thread (client mode): 0xf13e0520
2026-04-15T17:24:29.373 [DEBUG] [Thread-22834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:24:29.388 [DEBUG] [Thread-22834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:24:29.388 [INFO] [Thread-22834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:24:29.395 [DEBUG] [Thread-22834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:24:29.395 [DEBUG] [Thread-22834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:24:29.395 [DEBUG] [Thread-22834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:24:29.395 [DEBUG] [Thread-22834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:24:29.396 [DEBUG] [Thread-22834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:24:29.396 [DEBUG] [Thread-22834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:24:29.396 [DEBUG] [Thread-22834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:24:29.396 [DEBUG] [Thread-22834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:24:29.396 [DEBUG] [Thread-22834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:24:29.396 [DEBUG] [Thread-22834] [transport.py] [_log()] client lang: <none>
2026-04-15T17:24:29.396 [DEBUG] [Thread-22834] [transport.py] [_log()] server lang: <none>
2026-04-15T17:24:29.396 [DEBUG] [Thread-22834] [transport.py] [_log()] kex follows: False
2026-04-15T17:24:29.396 [DEBUG] [Thread-22834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:24:29.396 [DEBUG] [Thread-22834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:24:29.396 [DEBUG] [Thread-22834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:24:29.397 [DEBUG] [Thread-22834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:24:29.397 [DEBUG] [Thread-22834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:24:29.397 [DEBUG] [Thread-22834] [transport.py] [_log()] Compression: none
2026-04-15T17:24:29.397 [DEBUG] [Thread-22834] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:24:29.453 [DEBUG] [Thread-22834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:24:29.453 [DEBUG] [Thread-22834] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:24:29.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:24:29.454 [DEBUG] [Thread-22834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:24:29.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:24:29.509 [DEBUG] [Thread-22834] [transport.py] [_log()] userauth is OK
2026-04-15T17:24:29.510 [DEBUG] [Thread-22834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:24:29.510 [DEBUG] [Thread-22834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:24:29.510 [DEBUG] [Thread-22834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:24:29.510 [DEBUG] [Thread-22834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:24:29.540 [INFO] [Thread-22834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:24:29.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:24:29.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:24:30.352 [DEBUG] [Thread-22834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:24:30.352 [DEBUG] [Thread-22834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:24:30.400 [DEBUG] [Thread-22834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:24:30.400 [DEBUG] [Thread-22834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:24:30.409 [DEBUG] [Thread-22834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:24:30.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:24:30.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')
2026-04-15T17:24:30.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
2026-04-15T17:24:30.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:24:30.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:24:30.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:24:30.445 [DEBUG] [Thread-22834] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:24:35.985 [DEBUG] [Thread-22836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:24:42.681 [DEBUG] [Thread-22837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:24:51.025 [DEBUG] [Thread-22838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:25:00.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:25:00.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:25:00.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
2026-04-15T17:25:01.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 24, 49), 7.8084, 59.3433, 0.0, 17.3966, 14.3466, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:25:01.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:24:49
2026-04-15T17:25:02.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:25:02.655 [DEBUG] [Thread-22839] [transport.py] [_log()] starting thread (client mode): 0xf13e0a30
2026-04-15T17:25:02.655 [DEBUG] [Thread-22839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:25:02.668 [DEBUG] [Thread-22839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:25:02.668 [INFO] [Thread-22839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:25:02.672 [DEBUG] [Thread-22839] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:25:02.672 [DEBUG] [Thread-22839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:25:02.672 [DEBUG] [Thread-22839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:25:02.672 [DEBUG] [Thread-22839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:25:02.673 [DEBUG] [Thread-22839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:25:02.673 [DEBUG] [Thread-22839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:25:02.673 [DEBUG] [Thread-22839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:25:02.673 [DEBUG] [Thread-22839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:25:02.673 [DEBUG] [Thread-22839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:25:02.673 [DEBUG] [Thread-22839] [transport.py] [_log()] client lang: <none>
2026-04-15T17:25:02.673 [DEBUG] [Thread-22839] [transport.py] [_log()] server lang: <none>
2026-04-15T17:25:02.673 [DEBUG] [Thread-22839] [transport.py] [_log()] kex follows: False
2026-04-15T17:25:02.673 [DEBUG] [Thread-22839] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:25:02.673 [DEBUG] [Thread-22839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:25:02.673 [DEBUG] [Thread-22839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:25:02.674 [DEBUG] [Thread-22839] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:25:02.674 [DEBUG] [Thread-22839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:25:02.674 [DEBUG] [Thread-22839] [transport.py] [_log()] Compression: none
2026-04-15T17:25:02.674 [DEBUG] [Thread-22839] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:25:02.690 [DEBUG] [Thread-22839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:25:02.690 [DEBUG] [Thread-22839] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:25:02.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:25:02.691 [DEBUG] [Thread-22839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:25:02.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:25:02.692 [DEBUG] [Thread-22839] [transport.py] [_log()] userauth is OK
2026-04-15T17:25:02.692 [DEBUG] [Thread-22839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:25:02.692 [DEBUG] [Thread-22839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:25:02.692 [DEBUG] [Thread-22839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:25:02.692 [DEBUG] [Thread-22839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:25:02.715 [INFO] [Thread-22839] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:25:02.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:25:04.247 [DEBUG] [Thread-22839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:25:04.247 [DEBUG] [Thread-22839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:25:04.248 [DEBUG] [Thread-22839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:25:04.288 [DEBUG] [Thread-22839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:25:04.288 [DEBUG] [Thread-22839] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:25:04.291 [DEBUG] [Thread-22839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:25:04.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:25:04.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:25:04.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:25:04.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:25:04.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:25:04.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:25:04.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:25:04.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:25:04.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:25:04.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.642149 -999.00  +13.40  19.20     67   +7.40 1 1 1 1 1   887    0 4.20 -77.69 ----- 21.0 19.2 307.0 23.8 17.0 -27.2 16.7 -26.1 17.4 -22.7 18.1 -26.0
2026-04-15T17:25:04.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:25:04.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:25:04.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.642149
2026-04-15T17:25:04.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:25:04.315 [DEBUG] [Thread-22839] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:25:04.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:25:04.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:25:04.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:25:04.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:25:04.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:24:49', tmtdew=7.8084, humidity=59.3433, cloud=0.0, wind=17.3966, temperature=14.3466, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:24:41.674', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:25:04.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:25:04.573 [DEBUG] [Thread-22842] [transport.py] [_log()] starting thread (client mode): 0xf13e0790
2026-04-15T17:25:04.573 [DEBUG] [Thread-22842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:25:04.591 [DEBUG] [Thread-22842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:25:04.592 [INFO] [Thread-22842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:25:04.600 [DEBUG] [Thread-22842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:25:04.600 [DEBUG] [Thread-22842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:25:04.600 [DEBUG] [Thread-22842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:25:04.600 [DEBUG] [Thread-22842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:25:04.600 [DEBUG] [Thread-22842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:25:04.600 [DEBUG] [Thread-22842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:25:04.601 [DEBUG] [Thread-22842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:25:04.601 [DEBUG] [Thread-22842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:25:04.601 [DEBUG] [Thread-22842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:25:04.601 [DEBUG] [Thread-22842] [transport.py] [_log()] client lang: <none>
2026-04-15T17:25:04.601 [DEBUG] [Thread-22842] [transport.py] [_log()] server lang: <none>
2026-04-15T17:25:04.601 [DEBUG] [Thread-22842] [transport.py] [_log()] kex follows: False
2026-04-15T17:25:04.601 [DEBUG] [Thread-22842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:25:04.601 [DEBUG] [Thread-22842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:25:04.601 [DEBUG] [Thread-22842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:25:04.601 [DEBUG] [Thread-22842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:25:04.601 [DEBUG] [Thread-22842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:25:04.602 [DEBUG] [Thread-22842] [transport.py] [_log()] Compression: none
2026-04-15T17:25:04.602 [DEBUG] [Thread-22842] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:25:04.657 [DEBUG] [Thread-22842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:25:04.658 [DEBUG] [Thread-22842] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:25:04.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:25:04.658 [DEBUG] [Thread-22842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:25:04.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:25:04.713 [DEBUG] [Thread-22842] [transport.py] [_log()] userauth is OK
2026-04-15T17:25:04.714 [DEBUG] [Thread-22842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:25:04.714 [DEBUG] [Thread-22842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:25:04.714 [DEBUG] [Thread-22842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:25:04.714 [DEBUG] [Thread-22842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:25:04.741 [INFO] [Thread-22842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:25:04.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:25:04.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:25:05.627 [DEBUG] [Thread-22842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:25:05.627 [DEBUG] [Thread-22842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:25:05.675 [DEBUG] [Thread-22842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:25:05.675 [DEBUG] [Thread-22842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:25:05.684 [DEBUG] [Thread-22842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:25:05.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:25:05.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')
2026-04-15T17:25:05.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
2026-04-15T17:25:05.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:25:05.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:25:05.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:25:05.718 [DEBUG] [Thread-22842] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:25:06.056 [DEBUG] [Thread-22844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:25:21.098 [DEBUG] [Thread-22845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:25:28.413 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:25:28.414 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:25:35.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:25:35.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:25:35.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
2026-04-15T17:25:36.130 [DEBUG] [Thread-22846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:25:37.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 25, 25), 7.55628, 60.1552, 0.0, 16.0747, 13.8402, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:25:37.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:25:25
2026-04-15T17:25:37.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:25:37.883 [DEBUG] [Thread-22847] [transport.py] [_log()] starting thread (client mode): 0xee9bf1f0
2026-04-15T17:25:37.883 [DEBUG] [Thread-22847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:25:37.904 [DEBUG] [Thread-22847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:25:37.904 [INFO] [Thread-22847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:25:37.908 [DEBUG] [Thread-22847] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:25:37.908 [DEBUG] [Thread-22847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:25:37.908 [DEBUG] [Thread-22847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:25:37.908 [DEBUG] [Thread-22847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:25:37.908 [DEBUG] [Thread-22847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:25:37.908 [DEBUG] [Thread-22847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:25:37.908 [DEBUG] [Thread-22847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:25:37.908 [DEBUG] [Thread-22847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:25:37.909 [DEBUG] [Thread-22847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:25:37.909 [DEBUG] [Thread-22847] [transport.py] [_log()] client lang: <none>
2026-04-15T17:25:37.909 [DEBUG] [Thread-22847] [transport.py] [_log()] server lang: <none>
2026-04-15T17:25:37.909 [DEBUG] [Thread-22847] [transport.py] [_log()] kex follows: False
2026-04-15T17:25:37.909 [DEBUG] [Thread-22847] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:25:37.909 [DEBUG] [Thread-22847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:25:37.909 [DEBUG] [Thread-22847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:25:37.909 [DEBUG] [Thread-22847] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:25:37.909 [DEBUG] [Thread-22847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:25:37.909 [DEBUG] [Thread-22847] [transport.py] [_log()] Compression: none
2026-04-15T17:25:37.909 [DEBUG] [Thread-22847] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:25:37.924 [DEBUG] [Thread-22847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:25:37.925 [DEBUG] [Thread-22847] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:25:37.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:25:37.925 [DEBUG] [Thread-22847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:25:37.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:25:37.926 [DEBUG] [Thread-22847] [transport.py] [_log()] userauth is OK
2026-04-15T17:25:37.926 [DEBUG] [Thread-22847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:25:37.926 [DEBUG] [Thread-22847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:25:37.926 [DEBUG] [Thread-22847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:25:37.926 [DEBUG] [Thread-22847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:25:37.952 [INFO] [Thread-22847] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:25:37.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:25:38.595 [DEBUG] [Thread-22847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:25:38.595 [DEBUG] [Thread-22847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:25:38.596 [DEBUG] [Thread-22847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:25:38.636 [DEBUG] [Thread-22847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:25:38.636 [DEBUG] [Thread-22847] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:25:38.638 [DEBUG] [Thread-22847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:25:38.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:25:38.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:25:38.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:25:38.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:25:38.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:25:38.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:25:38.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:25:38.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:25:38.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:25:38.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.642496 -999.00  +13.40  22.72     67   +7.40 1 1 1 1 1   887    0 4.32 -83.11 ----- 18.6 22.7 310.8 24.9 17.0 -27.4 16.7 -26.1 17.4 -22.8 18.0 -25.3
2026-04-15T17:25:38.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:25:38.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:25:38.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.642496
2026-04-15T17:25:38.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:25:38.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:25:38.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:25:38.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:25:38.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:25:38.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:25:25', tmtdew=7.55628, humidity=60.1552, cloud=0.0, wind=16.0747, temperature=13.8402, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:25:11.654', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:25:38.673 [DEBUG] [Thread-22847] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:25:38.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:25:38.886 [DEBUG] [Thread-22850] [transport.py] [_log()] starting thread (client mode): 0xf13e2a40
2026-04-15T17:25:38.886 [DEBUG] [Thread-22850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:25:38.900 [DEBUG] [Thread-22850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:25:38.900 [INFO] [Thread-22850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:25:38.909 [DEBUG] [Thread-22850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:25:38.909 [DEBUG] [Thread-22850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:25:38.909 [DEBUG] [Thread-22850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:25:38.909 [DEBUG] [Thread-22850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:25:38.909 [DEBUG] [Thread-22850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:25:38.909 [DEBUG] [Thread-22850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:25:38.909 [DEBUG] [Thread-22850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:25:38.909 [DEBUG] [Thread-22850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:25:38.909 [DEBUG] [Thread-22850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:25:38.909 [DEBUG] [Thread-22850] [transport.py] [_log()] client lang: <none>
2026-04-15T17:25:38.909 [DEBUG] [Thread-22850] [transport.py] [_log()] server lang: <none>
2026-04-15T17:25:38.909 [DEBUG] [Thread-22850] [transport.py] [_log()] kex follows: False
2026-04-15T17:25:38.910 [DEBUG] [Thread-22850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:25:38.910 [DEBUG] [Thread-22850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:25:38.910 [DEBUG] [Thread-22850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:25:38.910 [DEBUG] [Thread-22850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:25:38.910 [DEBUG] [Thread-22850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:25:38.910 [DEBUG] [Thread-22850] [transport.py] [_log()] Compression: none
2026-04-15T17:25:38.910 [DEBUG] [Thread-22850] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:25:38.968 [DEBUG] [Thread-22850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:25:38.968 [DEBUG] [Thread-22850] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:25:38.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:25:38.969 [DEBUG] [Thread-22850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:25:38.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:25:39.025 [DEBUG] [Thread-22850] [transport.py] [_log()] userauth is OK
2026-04-15T17:25:39.025 [DEBUG] [Thread-22850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:25:39.025 [DEBUG] [Thread-22850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:25:39.026 [DEBUG] [Thread-22850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:25:39.026 [DEBUG] [Thread-22850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:25:39.054 [INFO] [Thread-22850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:25:39.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:25:39.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:25:39.841 [DEBUG] [Thread-22850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:25:39.841 [DEBUG] [Thread-22850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:25:39.889 [DEBUG] [Thread-22850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:25:39.889 [DEBUG] [Thread-22850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:25:39.898 [DEBUG] [Thread-22850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:25:39.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:25:39.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')
2026-04-15T17:25:39.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') -> 00000000
2026-04-15T17:25:39.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:25:39.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:25:39.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:25:39.933 [DEBUG] [Thread-22850] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:25:42.768 [DEBUG] [Thread-22852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:25:51.161 [DEBUG] [Thread-22853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:26:06.206 [DEBUG] [Thread-22854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:26:09.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:26:09.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:26:09.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
2026-04-15T17:26:11.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 26), 7.53909, 60.2214, 0.0, 16.7098, 13.7737, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:26:11.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:26:00
2026-04-15T17:26:11.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:26:12.055 [DEBUG] [Thread-22855] [transport.py] [_log()] starting thread (client mode): 0xf13e2320
2026-04-15T17:26:12.055 [DEBUG] [Thread-22855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:26:12.075 [DEBUG] [Thread-22855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:26:12.075 [INFO] [Thread-22855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:26:12.079 [DEBUG] [Thread-22855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:26:12.079 [DEBUG] [Thread-22855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:26:12.079 [DEBUG] [Thread-22855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:26:12.079 [DEBUG] [Thread-22855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:26:12.079 [DEBUG] [Thread-22855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:26:12.079 [DEBUG] [Thread-22855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:26:12.079 [DEBUG] [Thread-22855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:26:12.079 [DEBUG] [Thread-22855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:26:12.080 [DEBUG] [Thread-22855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:26:12.080 [DEBUG] [Thread-22855] [transport.py] [_log()] client lang: <none>
2026-04-15T17:26:12.080 [DEBUG] [Thread-22855] [transport.py] [_log()] server lang: <none>
2026-04-15T17:26:12.080 [DEBUG] [Thread-22855] [transport.py] [_log()] kex follows: False
2026-04-15T17:26:12.080 [DEBUG] [Thread-22855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:26:12.080 [DEBUG] [Thread-22855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:26:12.080 [DEBUG] [Thread-22855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:26:12.080 [DEBUG] [Thread-22855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:26:12.080 [DEBUG] [Thread-22855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:26:12.080 [DEBUG] [Thread-22855] [transport.py] [_log()] Compression: none
2026-04-15T17:26:12.080 [DEBUG] [Thread-22855] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:26:12.089 [DEBUG] [Thread-22855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:26:12.089 [DEBUG] [Thread-22855] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:26:12.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:26:12.090 [DEBUG] [Thread-22855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:26:12.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:26:12.091 [DEBUG] [Thread-22855] [transport.py] [_log()] userauth is OK
2026-04-15T17:26:12.091 [DEBUG] [Thread-22855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:26:12.091 [DEBUG] [Thread-22855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:26:12.092 [DEBUG] [Thread-22855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:26:12.092 [DEBUG] [Thread-22855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:26:12.110 [INFO] [Thread-22855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:26:12.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:26:12.735 [DEBUG] [Thread-22855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:26:12.735 [DEBUG] [Thread-22855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:26:12.736 [DEBUG] [Thread-22855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:26:12.776 [DEBUG] [Thread-22855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:26:12.776 [DEBUG] [Thread-22855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:26:12.779 [DEBUG] [Thread-22855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:26:12.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:26:12.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:26:12.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:26:12.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:26:12.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:26:12.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:26:12.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:26:12.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:26:12.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:26:12.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.642843 -999.00  +13.40  18.02     66   +7.40 1 1 1 1 1   887    0 4.31 -77.77 ----- 19.0 18.0 313.8 21.2 16.9 -27.2 16.6 -26.1 17.4 -22.8 18.1 -25.0
2026-04-15T17:26:12.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:26:12.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:26:12.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.642843
2026-04-15T17:26:12.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:26:12.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:26:12.799 [DEBUG] [Thread-22855] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:26:12.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:26:12.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:26:12.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:26:12.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:26:00', tmtdew=7.53909, humidity=60.2214, cloud=0.0, wind=16.7098, temperature=13.7737, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:25:41.635', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:26:13.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:26:13.055 [DEBUG] [Thread-22858] [transport.py] [_log()] starting thread (client mode): 0xf13501c0
2026-04-15T17:26:13.055 [DEBUG] [Thread-22858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:26:13.070 [DEBUG] [Thread-22858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:26:13.070 [INFO] [Thread-22858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:26:13.077 [DEBUG] [Thread-22858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:26:13.077 [DEBUG] [Thread-22858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:26:13.077 [DEBUG] [Thread-22858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:26:13.077 [DEBUG] [Thread-22858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:26:13.077 [DEBUG] [Thread-22858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:26:13.077 [DEBUG] [Thread-22858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:26:13.078 [DEBUG] [Thread-22858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:26:13.078 [DEBUG] [Thread-22858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:26:13.078 [DEBUG] [Thread-22858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:26:13.078 [DEBUG] [Thread-22858] [transport.py] [_log()] client lang: <none>
2026-04-15T17:26:13.078 [DEBUG] [Thread-22858] [transport.py] [_log()] server lang: <none>
2026-04-15T17:26:13.078 [DEBUG] [Thread-22858] [transport.py] [_log()] kex follows: False
2026-04-15T17:26:13.078 [DEBUG] [Thread-22858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:26:13.078 [DEBUG] [Thread-22858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:26:13.078 [DEBUG] [Thread-22858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:26:13.078 [DEBUG] [Thread-22858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:26:13.078 [DEBUG] [Thread-22858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:26:13.079 [DEBUG] [Thread-22858] [transport.py] [_log()] Compression: none
2026-04-15T17:26:13.079 [DEBUG] [Thread-22858] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:26:13.136 [DEBUG] [Thread-22858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:26:13.136 [DEBUG] [Thread-22858] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:26:13.136 [DEBUG] [Thread-22858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:26:13.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:26:13.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:26:13.192 [DEBUG] [Thread-22858] [transport.py] [_log()] userauth is OK
2026-04-15T17:26:13.193 [DEBUG] [Thread-22858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:26:13.193 [DEBUG] [Thread-22858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:26:13.193 [DEBUG] [Thread-22858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:26:13.193 [DEBUG] [Thread-22858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:26:13.218 [INFO] [Thread-22858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:26:13.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:26:13.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:26:14.042 [DEBUG] [Thread-22858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:26:14.042 [DEBUG] [Thread-22858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:26:14.091 [DEBUG] [Thread-22858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:26:14.091 [DEBUG] [Thread-22858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:26:14.100 [DEBUG] [Thread-22858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:26:14.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:26:14.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')
2026-04-15T17:26:14.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
2026-04-15T17:26:14.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:26:14.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:26:14.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:26:14.134 [DEBUG] [Thread-22858] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:26:21.235 [DEBUG] [Thread-22860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:26:28.554 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:26:28.555 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:26:36.277 [DEBUG] [Thread-22861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:26:42.859 [DEBUG] [Thread-22862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:26:44.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:26:44.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:26:44.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
2026-04-15T17:26:45.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 26, 36), 7.70904, 59.7743, 0.0, 20.713, 14.4462, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:26:45.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:26:36
2026-04-15T17:26:45.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:26:46.308 [DEBUG] [Thread-22863] [transport.py] [_log()] starting thread (client mode): 0xf13e3040
2026-04-15T17:26:46.308 [DEBUG] [Thread-22863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:26:46.329 [DEBUG] [Thread-22863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:26:46.329 [INFO] [Thread-22863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:26:46.332 [DEBUG] [Thread-22863] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:26:46.332 [DEBUG] [Thread-22863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:26:46.332 [DEBUG] [Thread-22863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:26:46.332 [DEBUG] [Thread-22863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:26:46.332 [DEBUG] [Thread-22863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:26:46.332 [DEBUG] [Thread-22863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:26:46.332 [DEBUG] [Thread-22863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:26:46.332 [DEBUG] [Thread-22863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:26:46.332 [DEBUG] [Thread-22863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:26:46.332 [DEBUG] [Thread-22863] [transport.py] [_log()] client lang: <none>
2026-04-15T17:26:46.332 [DEBUG] [Thread-22863] [transport.py] [_log()] server lang: <none>
2026-04-15T17:26:46.332 [DEBUG] [Thread-22863] [transport.py] [_log()] kex follows: False
2026-04-15T17:26:46.332 [DEBUG] [Thread-22863] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:26:46.332 [DEBUG] [Thread-22863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:26:46.333 [DEBUG] [Thread-22863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:26:46.333 [DEBUG] [Thread-22863] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:26:46.333 [DEBUG] [Thread-22863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:26:46.333 [DEBUG] [Thread-22863] [transport.py] [_log()] Compression: none
2026-04-15T17:26:46.333 [DEBUG] [Thread-22863] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:26:46.348 [DEBUG] [Thread-22863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:26:46.349 [DEBUG] [Thread-22863] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:26:46.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:26:46.349 [DEBUG] [Thread-22863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:26:46.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:26:46.350 [DEBUG] [Thread-22863] [transport.py] [_log()] userauth is OK
2026-04-15T17:26:46.350 [DEBUG] [Thread-22863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:26:46.350 [DEBUG] [Thread-22863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:26:46.350 [DEBUG] [Thread-22863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:26:46.350 [DEBUG] [Thread-22863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:26:46.369 [INFO] [Thread-22863] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:26:46.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:26:47.162 [DEBUG] [Thread-22863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:26:47.163 [DEBUG] [Thread-22863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:26:47.163 [DEBUG] [Thread-22863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:26:47.203 [DEBUG] [Thread-22863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:26:47.203 [DEBUG] [Thread-22863] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:26:47.206 [DEBUG] [Thread-22863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:26:47.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:26:47.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:26:47.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:26:47.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:26:47.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:26:47.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:26:47.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:26:47.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:26:47.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:26:47.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.643190 -999.00  +13.20  19.58     67   +7.30 1 1 1 1 1   887    0 4.42 -73.49 ----- 14.5 19.6 314.2 22.4 16.9 -27.6 16.6 -26.2 17.4 -22.9 18.0 -25.0
2026-04-15T17:26:47.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:26:47.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:26:47.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.643190
2026-04-15T17:26:47.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:26:47.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:26:47.232 [DEBUG] [Thread-22863] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:26:47.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:26:47.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:26:47.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:26:47.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:26:36', tmtdew=7.70904, humidity=59.7743, cloud=0.0, wind=20.713, temperature=14.4462, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:26:11.616', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:26:47.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:26:47.488 [DEBUG] [Thread-22866] [transport.py] [_log()] starting thread (client mode): 0xf13e3790
2026-04-15T17:26:47.488 [DEBUG] [Thread-22866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:26:47.503 [DEBUG] [Thread-22866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:26:47.503 [INFO] [Thread-22866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:26:47.512 [DEBUG] [Thread-22866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:26:47.512 [DEBUG] [Thread-22866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:26:47.512 [DEBUG] [Thread-22866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:26:47.512 [DEBUG] [Thread-22866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:26:47.512 [DEBUG] [Thread-22866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:26:47.512 [DEBUG] [Thread-22866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:26:47.512 [DEBUG] [Thread-22866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:26:47.512 [DEBUG] [Thread-22866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:26:47.512 [DEBUG] [Thread-22866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:26:47.512 [DEBUG] [Thread-22866] [transport.py] [_log()] client lang: <none>
2026-04-15T17:26:47.513 [DEBUG] [Thread-22866] [transport.py] [_log()] server lang: <none>
2026-04-15T17:26:47.513 [DEBUG] [Thread-22866] [transport.py] [_log()] kex follows: False
2026-04-15T17:26:47.513 [DEBUG] [Thread-22866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:26:47.513 [DEBUG] [Thread-22866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:26:47.513 [DEBUG] [Thread-22866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:26:47.513 [DEBUG] [Thread-22866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:26:47.513 [DEBUG] [Thread-22866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:26:47.513 [DEBUG] [Thread-22866] [transport.py] [_log()] Compression: none
2026-04-15T17:26:47.513 [DEBUG] [Thread-22866] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:26:47.570 [DEBUG] [Thread-22866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:26:47.571 [DEBUG] [Thread-22866] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:26:47.571 [DEBUG] [Thread-22866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:26:47.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:26:47.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:26:47.628 [DEBUG] [Thread-22866] [transport.py] [_log()] userauth is OK
2026-04-15T17:26:47.628 [DEBUG] [Thread-22866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:26:47.628 [DEBUG] [Thread-22866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:26:47.629 [DEBUG] [Thread-22866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:26:47.629 [DEBUG] [Thread-22866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:26:47.652 [INFO] [Thread-22866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:26:47.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:26:47.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:26:48.503 [DEBUG] [Thread-22866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:26:48.503 [DEBUG] [Thread-22866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:26:48.552 [DEBUG] [Thread-22866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:26:48.552 [DEBUG] [Thread-22866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:26:48.562 [DEBUG] [Thread-22866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:26:48.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:26: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')
2026-04-15T17:26:48.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
2026-04-15T17:26:48.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:26:48.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:26:48.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:26:48.605 [DEBUG] [Thread-22866] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:26:51.305 [DEBUG] [Thread-22868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:27:06.345 [DEBUG] [Thread-22869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:27:18.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:27:18.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:27:18.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T17:27:19.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 27, 12), 7.60699, 59.973, 0.0, 15.0685, 13.9897, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:27:19.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:27:12
2026-04-15T17:27:20.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:27:20.734 [DEBUG] [Thread-22870] [transport.py] [_log()] starting thread (client mode): 0xf13fdba0
2026-04-15T17:27:20.734 [DEBUG] [Thread-22870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:27:20.754 [DEBUG] [Thread-22870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:27:20.754 [INFO] [Thread-22870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:27:20.757 [DEBUG] [Thread-22870] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:27:20.757 [DEBUG] [Thread-22870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:27:20.757 [DEBUG] [Thread-22870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:27:20.757 [DEBUG] [Thread-22870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:27:20.758 [DEBUG] [Thread-22870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:27:20.758 [DEBUG] [Thread-22870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:27:20.758 [DEBUG] [Thread-22870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:27:20.758 [DEBUG] [Thread-22870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:27:20.758 [DEBUG] [Thread-22870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:27:20.758 [DEBUG] [Thread-22870] [transport.py] [_log()] client lang: <none>
2026-04-15T17:27:20.758 [DEBUG] [Thread-22870] [transport.py] [_log()] server lang: <none>
2026-04-15T17:27:20.758 [DEBUG] [Thread-22870] [transport.py] [_log()] kex follows: False
2026-04-15T17:27:20.758 [DEBUG] [Thread-22870] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:27:20.758 [DEBUG] [Thread-22870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:27:20.759 [DEBUG] [Thread-22870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:27:20.759 [DEBUG] [Thread-22870] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:27:20.759 [DEBUG] [Thread-22870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:27:20.759 [DEBUG] [Thread-22870] [transport.py] [_log()] Compression: none
2026-04-15T17:27:20.759 [DEBUG] [Thread-22870] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:27:20.777 [DEBUG] [Thread-22870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:27:20.778 [DEBUG] [Thread-22870] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:27:20.778 [DEBUG] [Thread-22870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:27:20.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:27:20.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:27:20.779 [DEBUG] [Thread-22870] [transport.py] [_log()] userauth is OK
2026-04-15T17:27:20.780 [DEBUG] [Thread-22870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:27:20.780 [DEBUG] [Thread-22870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:27:20.780 [DEBUG] [Thread-22870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:27:20.780 [DEBUG] [Thread-22870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:27:20.816 [INFO] [Thread-22870] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:27:20.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:27:21.374 [DEBUG] [Thread-22872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:27:21.597 [DEBUG] [Thread-22870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:27:21.597 [DEBUG] [Thread-22870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:27:21.598 [DEBUG] [Thread-22870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:27:21.639 [DEBUG] [Thread-22870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:27:21.639 [DEBUG] [Thread-22870] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:27:21.642 [DEBUG] [Thread-22870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:27:21.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:27:21.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:27:21.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:27:21.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:27:21.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:27:21.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:27:21.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:27:21.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:27:21.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:27:21.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.643537 -999.00  +13.40  13.77     67   +7.40 1 1 1 1 1   887    0 4.15 -80.35 ----- 12.5 13.8 308.2 16.3 16.9 -27.4 16.6 -25.9 17.4 -23.0 18.0 -24.3
2026-04-15T17:27:21.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:27:21.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:27:21.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.643537
2026-04-15T17:27:21.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:27:21.667 [DEBUG] [Thread-22870] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:27:21.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:27:21.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:27:21.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:27:21.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:27:21.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:27:12', tmtdew=7.60699, humidity=59.973, cloud=0.0, wind=15.0685, temperature=13.9897, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:26:41.597', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:27:21.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:27:21.926 [DEBUG] [Thread-22874] [transport.py] [_log()] starting thread (client mode): 0xf13fc5b0
2026-04-15T17:27:21.926 [DEBUG] [Thread-22874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:27:21.944 [DEBUG] [Thread-22874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:27:21.944 [INFO] [Thread-22874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:27:21.952 [DEBUG] [Thread-22874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:27:21.952 [DEBUG] [Thread-22874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:27:21.952 [DEBUG] [Thread-22874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:27:21.952 [DEBUG] [Thread-22874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:27:21.952 [DEBUG] [Thread-22874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:27:21.952 [DEBUG] [Thread-22874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:27:21.952 [DEBUG] [Thread-22874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:27:21.952 [DEBUG] [Thread-22874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:27:21.952 [DEBUG] [Thread-22874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:27:21.952 [DEBUG] [Thread-22874] [transport.py] [_log()] client lang: <none>
2026-04-15T17:27:21.953 [DEBUG] [Thread-22874] [transport.py] [_log()] server lang: <none>
2026-04-15T17:27:21.953 [DEBUG] [Thread-22874] [transport.py] [_log()] kex follows: False
2026-04-15T17:27:21.953 [DEBUG] [Thread-22874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:27:21.953 [DEBUG] [Thread-22874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:27:21.953 [DEBUG] [Thread-22874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:27:21.953 [DEBUG] [Thread-22874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:27:21.953 [DEBUG] [Thread-22874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:27:21.953 [DEBUG] [Thread-22874] [transport.py] [_log()] Compression: none
2026-04-15T17:27:21.953 [DEBUG] [Thread-22874] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:27:22.011 [DEBUG] [Thread-22874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:27:22.011 [DEBUG] [Thread-22874] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:27:22.012 [DEBUG] [Thread-22874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:27:22.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:27:22.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:27:22.068 [DEBUG] [Thread-22874] [transport.py] [_log()] userauth is OK
2026-04-15T17:27:22.068 [DEBUG] [Thread-22874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:27:22.068 [DEBUG] [Thread-22874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:27:22.069 [DEBUG] [Thread-22874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:27:22.069 [DEBUG] [Thread-22874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:27:22.094 [INFO] [Thread-22874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:27:22.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:27:22.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:27:22.888 [DEBUG] [Thread-22874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:27:22.888 [DEBUG] [Thread-22874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:27:22.938 [DEBUG] [Thread-22874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:27:22.938 [DEBUG] [Thread-22874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:27:22.948 [DEBUG] [Thread-22874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:27:22.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:27:22.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')
2026-04-15T17:27:22.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
2026-04-15T17:27:22.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:27:22.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:27:22.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:27:22.983 [DEBUG] [Thread-22874] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:27:28.696 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:27:28.697 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:27:36.405 [DEBUG] [Thread-22876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:27:42.935 [DEBUG] [Thread-22877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:27:51.444 [DEBUG] [Thread-22879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:27:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:27:52.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:27:53.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
2026-04-15T17:27:54.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 27, 12), 7.60699, 59.973, 0.0, 15.0685, 13.9897, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:27:54.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:27:12
2026-04-15T17:27:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:27:55.187 [DEBUG] [Thread-22880] [transport.py] [_log()] starting thread (client mode): 0xf13e3e50
2026-04-15T17:27:55.188 [DEBUG] [Thread-22880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:27:55.207 [DEBUG] [Thread-22880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:27:55.207 [INFO] [Thread-22880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:27:55.210 [DEBUG] [Thread-22880] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:27:55.211 [DEBUG] [Thread-22880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:27:55.211 [DEBUG] [Thread-22880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:27:55.211 [DEBUG] [Thread-22880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:27:55.211 [DEBUG] [Thread-22880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:27:55.211 [DEBUG] [Thread-22880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:27:55.211 [DEBUG] [Thread-22880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:27:55.211 [DEBUG] [Thread-22880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:27:55.211 [DEBUG] [Thread-22880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:27:55.211 [DEBUG] [Thread-22880] [transport.py] [_log()] client lang: <none>
2026-04-15T17:27:55.211 [DEBUG] [Thread-22880] [transport.py] [_log()] server lang: <none>
2026-04-15T17:27:55.211 [DEBUG] [Thread-22880] [transport.py] [_log()] kex follows: False
2026-04-15T17:27:55.211 [DEBUG] [Thread-22880] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:27:55.211 [DEBUG] [Thread-22880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:27:55.212 [DEBUG] [Thread-22880] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:27:55.212 [DEBUG] [Thread-22880] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:27:55.212 [DEBUG] [Thread-22880] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:27:55.212 [DEBUG] [Thread-22880] [transport.py] [_log()] Compression: none
2026-04-15T17:27:55.212 [DEBUG] [Thread-22880] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:27:55.227 [DEBUG] [Thread-22880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:27:55.228 [DEBUG] [Thread-22880] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:27:55.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:27:55.228 [DEBUG] [Thread-22880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:27:55.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:27:55.229 [DEBUG] [Thread-22880] [transport.py] [_log()] userauth is OK
2026-04-15T17:27:55.229 [DEBUG] [Thread-22880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:27:55.229 [DEBUG] [Thread-22880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:27:55.229 [DEBUG] [Thread-22880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:27:55.230 [DEBUG] [Thread-22880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:27:55.246 [INFO] [Thread-22880] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:27:55.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:27:56.033 [DEBUG] [Thread-22880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:27:56.033 [DEBUG] [Thread-22880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:27:56.034 [DEBUG] [Thread-22880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:27:56.073 [DEBUG] [Thread-22880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:27:56.073 [DEBUG] [Thread-22880] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:27:56.076 [DEBUG] [Thread-22880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:27:56.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:27:56.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:27:56.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:27:56.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:27:56.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:27:56.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:27:56.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:27:56.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:27:56.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:27:56.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.643885 -999.00  +13.30  18.67     67   +7.40 1 1 1 1 1   887    0 3.87 -89.89 ----- 18.5 18.7 312.6 22.2 16.9 -27.3 16.6 -25.9 17.4 -23.9 18.0 -24.7
2026-04-15T17:27:56.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:27:56.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:27:56.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.643885
2026-04-15T17:27:56.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:27:56.100 [DEBUG] [Thread-22880] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:27:56.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:27:56.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:27:56.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:27:56.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:27:56.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:27:12', tmtdew=7.60699, humidity=59.973, cloud=0.0, wind=15.0685, temperature=13.9897, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:27:11.664', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:27:56.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:27:56.363 [DEBUG] [Thread-22883] [transport.py] [_log()] starting thread (client mode): 0xf13510f0
2026-04-15T17:27:56.363 [DEBUG] [Thread-22883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:27:56.380 [DEBUG] [Thread-22883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:27:56.380 [INFO] [Thread-22883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:27:56.387 [DEBUG] [Thread-22883] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:27:56.387 [DEBUG] [Thread-22883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:27:56.387 [DEBUG] [Thread-22883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:27:56.387 [DEBUG] [Thread-22883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:27:56.388 [DEBUG] [Thread-22883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:27:56.388 [DEBUG] [Thread-22883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:27:56.388 [DEBUG] [Thread-22883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:27:56.388 [DEBUG] [Thread-22883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:27:56.388 [DEBUG] [Thread-22883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:27:56.388 [DEBUG] [Thread-22883] [transport.py] [_log()] client lang: <none>
2026-04-15T17:27:56.388 [DEBUG] [Thread-22883] [transport.py] [_log()] server lang: <none>
2026-04-15T17:27:56.388 [DEBUG] [Thread-22883] [transport.py] [_log()] kex follows: False
2026-04-15T17:27:56.388 [DEBUG] [Thread-22883] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:27:56.388 [DEBUG] [Thread-22883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:27:56.388 [DEBUG] [Thread-22883] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:27:56.388 [DEBUG] [Thread-22883] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:27:56.388 [DEBUG] [Thread-22883] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:27:56.388 [DEBUG] [Thread-22883] [transport.py] [_log()] Compression: none
2026-04-15T17:27:56.388 [DEBUG] [Thread-22883] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:27:56.446 [DEBUG] [Thread-22883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:27:56.446 [DEBUG] [Thread-22883] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:27:56.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:27:56.447 [DEBUG] [Thread-22883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:27:56.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:27:56.503 [DEBUG] [Thread-22883] [transport.py] [_log()] userauth is OK
2026-04-15T17:27:56.503 [DEBUG] [Thread-22883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:27:56.503 [DEBUG] [Thread-22883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:27:56.504 [DEBUG] [Thread-22883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:27:56.504 [DEBUG] [Thread-22883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:27:56.527 [INFO] [Thread-22883] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:27:56.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:27:56.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:27:57.394 [DEBUG] [Thread-22883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:27:57.394 [DEBUG] [Thread-22883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:27:57.442 [DEBUG] [Thread-22883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:27:57.442 [DEBUG] [Thread-22883] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:27:57.451 [DEBUG] [Thread-22883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:27:57.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:27:57.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')
2026-04-15T17:27:57.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
2026-04-15T17:27:57.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:27:57.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:27:57.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:27:57.489 [DEBUG] [Thread-22883] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:28:06.474 [DEBUG] [Thread-22885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:28:21.512 [DEBUG] [Thread-22886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:28:27.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:28:27.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:28:27.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
2026-04-15T17:28:28.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 27, 47), 7.88571, 59.0123, 0.0, 15.9502, 14.2806, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:28:28.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:27:47
2026-04-15T17:28:28.846 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:28:28.848 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:28:29.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:28:29.625 [DEBUG] [Thread-22887] [transport.py] [_log()] starting thread (client mode): 0xf1353850
2026-04-15T17:28:29.625 [DEBUG] [Thread-22887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:28:29.645 [DEBUG] [Thread-22887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:28:29.646 [INFO] [Thread-22887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:28:29.649 [DEBUG] [Thread-22887] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:28:29.649 [DEBUG] [Thread-22887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:28:29.649 [DEBUG] [Thread-22887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:28:29.649 [DEBUG] [Thread-22887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:28:29.649 [DEBUG] [Thread-22887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:28:29.649 [DEBUG] [Thread-22887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:28:29.649 [DEBUG] [Thread-22887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:28:29.649 [DEBUG] [Thread-22887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:28:29.650 [DEBUG] [Thread-22887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:28:29.650 [DEBUG] [Thread-22887] [transport.py] [_log()] client lang: <none>
2026-04-15T17:28:29.650 [DEBUG] [Thread-22887] [transport.py] [_log()] server lang: <none>
2026-04-15T17:28:29.650 [DEBUG] [Thread-22887] [transport.py] [_log()] kex follows: False
2026-04-15T17:28:29.650 [DEBUG] [Thread-22887] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:28:29.650 [DEBUG] [Thread-22887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:28:29.650 [DEBUG] [Thread-22887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:28:29.650 [DEBUG] [Thread-22887] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:28:29.650 [DEBUG] [Thread-22887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:28:29.650 [DEBUG] [Thread-22887] [transport.py] [_log()] Compression: none
2026-04-15T17:28:29.650 [DEBUG] [Thread-22887] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:28:29.668 [DEBUG] [Thread-22887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:28:29.668 [DEBUG] [Thread-22887] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:28:29.668 [DEBUG] [Thread-22887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:28:29.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:28:29.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:28:29.669 [DEBUG] [Thread-22887] [transport.py] [_log()] userauth is OK
2026-04-15T17:28:29.670 [DEBUG] [Thread-22887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:28:29.670 [DEBUG] [Thread-22887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:28:29.670 [DEBUG] [Thread-22887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:28:29.670 [DEBUG] [Thread-22887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:28:29.687 [INFO] [Thread-22887] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:28:29.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:28:30.505 [DEBUG] [Thread-22887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:28:30.505 [DEBUG] [Thread-22887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:28:30.506 [DEBUG] [Thread-22887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:28:30.546 [DEBUG] [Thread-22887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:28:30.546 [DEBUG] [Thread-22887] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:28:30.548 [DEBUG] [Thread-22887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:28:30.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:28:30.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:28:30.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:28:30.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:28:30.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:28:30.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:28:30.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:28:30.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:28:30.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:28:30.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.644232 -999.00  +13.30  15.23     68   +7.60 1 1 1 1 1   887    0 4.20 -82.07 ----- 15.3 15.2 301.8 22.2 16.9 -27.2 16.6 -25.9 17.3 -24.1 17.9 -24.3
2026-04-15T17:28:30.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:28:30.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:28:30.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.644232
2026-04-15T17:28:30.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:28:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:28:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:28:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:28:30.574 [DEBUG] [Thread-22887] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:28:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:28:30.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:27:47', tmtdew=7.88571, humidity=59.0123, cloud=0.0, wind=15.9502, temperature=14.2806, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:27:41.645', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:28:30.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:28:30.833 [DEBUG] [Thread-22890] [transport.py] [_log()] starting thread (client mode): 0xf1350190
2026-04-15T17:28:30.833 [DEBUG] [Thread-22890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:28:30.847 [DEBUG] [Thread-22890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:28:30.847 [INFO] [Thread-22890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:28:30.865 [DEBUG] [Thread-22890] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:28:30.865 [DEBUG] [Thread-22890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:28:30.865 [DEBUG] [Thread-22890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:28:30.865 [DEBUG] [Thread-22890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:28:30.865 [DEBUG] [Thread-22890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:28:30.865 [DEBUG] [Thread-22890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:28:30.865 [DEBUG] [Thread-22890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:28:30.865 [DEBUG] [Thread-22890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:28:30.865 [DEBUG] [Thread-22890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:28:30.866 [DEBUG] [Thread-22890] [transport.py] [_log()] client lang: <none>
2026-04-15T17:28:30.866 [DEBUG] [Thread-22890] [transport.py] [_log()] server lang: <none>
2026-04-15T17:28:30.866 [DEBUG] [Thread-22890] [transport.py] [_log()] kex follows: False
2026-04-15T17:28:30.866 [DEBUG] [Thread-22890] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:28:30.866 [DEBUG] [Thread-22890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:28:30.866 [DEBUG] [Thread-22890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:28:30.866 [DEBUG] [Thread-22890] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:28:30.866 [DEBUG] [Thread-22890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:28:30.866 [DEBUG] [Thread-22890] [transport.py] [_log()] Compression: none
2026-04-15T17:28:30.866 [DEBUG] [Thread-22890] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:28:30.911 [DEBUG] [Thread-22890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:28:30.911 [DEBUG] [Thread-22890] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:28:30.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:28:30.912 [DEBUG] [Thread-22890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:28:30.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:28:30.967 [DEBUG] [Thread-22890] [transport.py] [_log()] userauth is OK
2026-04-15T17:28:30.967 [DEBUG] [Thread-22890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:28:30.967 [DEBUG] [Thread-22890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:28:30.967 [DEBUG] [Thread-22890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:28:30.967 [DEBUG] [Thread-22890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:28:30.984 [INFO] [Thread-22890] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:28:30.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:28:30.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:28:31.803 [DEBUG] [Thread-22890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:28:31.803 [DEBUG] [Thread-22890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:28:31.850 [DEBUG] [Thread-22890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:28:31.851 [DEBUG] [Thread-22890] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:28:31.859 [DEBUG] [Thread-22890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:28:31.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:28:31.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')
2026-04-15T17:28:31.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
2026-04-15T17:28:31.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:28:31.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:28:31.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:28:31.894 [DEBUG] [Thread-22890] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:28:36.542 [DEBUG] [Thread-22892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:28:43.039 [DEBUG] [Thread-22893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:28:51.585 [DEBUG] [Thread-22894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:29:01.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:29:01.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:29:01.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
2026-04-15T17:29:03.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 28, 23), 7.48855, 60.4369, 0.0, 15.7219, 13.7569, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:29:03.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:28:23
2026-04-15T17:29:03.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:29:04.097 [DEBUG] [Thread-22895] [transport.py] [_log()] starting thread (client mode): 0xf13e1a20
2026-04-15T17:29:04.097 [DEBUG] [Thread-22895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:29:04.117 [DEBUG] [Thread-22895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:29:04.117 [INFO] [Thread-22895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:29:04.120 [DEBUG] [Thread-22895] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:29:04.121 [DEBUG] [Thread-22895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:29:04.121 [DEBUG] [Thread-22895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:29:04.121 [DEBUG] [Thread-22895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:29:04.121 [DEBUG] [Thread-22895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:29:04.121 [DEBUG] [Thread-22895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:29:04.121 [DEBUG] [Thread-22895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:29:04.121 [DEBUG] [Thread-22895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:29:04.121 [DEBUG] [Thread-22895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:29:04.121 [DEBUG] [Thread-22895] [transport.py] [_log()] client lang: <none>
2026-04-15T17:29:04.122 [DEBUG] [Thread-22895] [transport.py] [_log()] server lang: <none>
2026-04-15T17:29:04.122 [DEBUG] [Thread-22895] [transport.py] [_log()] kex follows: False
2026-04-15T17:29:04.122 [DEBUG] [Thread-22895] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:29:04.122 [DEBUG] [Thread-22895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:29:04.122 [DEBUG] [Thread-22895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:29:04.122 [DEBUG] [Thread-22895] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:29:04.122 [DEBUG] [Thread-22895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:29:04.122 [DEBUG] [Thread-22895] [transport.py] [_log()] Compression: none
2026-04-15T17:29:04.122 [DEBUG] [Thread-22895] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:29:04.139 [DEBUG] [Thread-22895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:29:04.139 [DEBUG] [Thread-22895] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:29:04.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:29:04.140 [DEBUG] [Thread-22895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:29:04.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:29:04.182 [DEBUG] [Thread-22895] [transport.py] [_log()] userauth is OK
2026-04-15T17:29:04.182 [DEBUG] [Thread-22895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:29:04.182 [DEBUG] [Thread-22895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:29:04.182 [DEBUG] [Thread-22895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:29:04.182 [DEBUG] [Thread-22895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:29:04.218 [INFO] [Thread-22895] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:29:04.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:29:05.033 [DEBUG] [Thread-22895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:29:05.033 [DEBUG] [Thread-22895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:29:05.034 [DEBUG] [Thread-22895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:29:05.074 [DEBUG] [Thread-22895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:29:05.074 [DEBUG] [Thread-22895] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:29:05.077 [DEBUG] [Thread-22895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:29:05.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:29:05.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:29:05.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:29:05.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:29:05.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:29:05.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:29:05.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:29:05.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:29:05.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:29:05.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.644926 -999.00  +13.10  17.05     68   +7.40 1 1 1 1 1   887    0 3.71 -91.80 ----- 13.5 17.1 311.6 19.4 16.9 -26.7 16.6 -25.4 17.3 -21.7 18.0 -23.7
2026-04-15T17:29:05.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:29:05.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:29:05.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.644926
2026-04-15T17:29:05.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:29:05.105 [DEBUG] [Thread-22895] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:29:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:29:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:29:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:29:05.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:29:05.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:28:23', tmtdew=7.48855, humidity=60.4369, cloud=0.0, wind=15.7219, temperature=13.7569, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:28:41.606', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:29:05.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:29:05.336 [DEBUG] [Thread-22898] [transport.py] [_log()] starting thread (client mode): 0xf1352410
2026-04-15T17:29:05.336 [DEBUG] [Thread-22898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:29:05.352 [DEBUG] [Thread-22898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:29:05.353 [INFO] [Thread-22898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:29:05.360 [DEBUG] [Thread-22898] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:29:05.360 [DEBUG] [Thread-22898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:29:05.360 [DEBUG] [Thread-22898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:29:05.360 [DEBUG] [Thread-22898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:29:05.360 [DEBUG] [Thread-22898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:29:05.360 [DEBUG] [Thread-22898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:29:05.360 [DEBUG] [Thread-22898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:29:05.361 [DEBUG] [Thread-22898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:29:05.361 [DEBUG] [Thread-22898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:29:05.361 [DEBUG] [Thread-22898] [transport.py] [_log()] client lang: <none>
2026-04-15T17:29:05.361 [DEBUG] [Thread-22898] [transport.py] [_log()] server lang: <none>
2026-04-15T17:29:05.361 [DEBUG] [Thread-22898] [transport.py] [_log()] kex follows: False
2026-04-15T17:29:05.361 [DEBUG] [Thread-22898] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:29:05.361 [DEBUG] [Thread-22898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:29:05.361 [DEBUG] [Thread-22898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:29:05.361 [DEBUG] [Thread-22898] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:29:05.361 [DEBUG] [Thread-22898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:29:05.362 [DEBUG] [Thread-22898] [transport.py] [_log()] Compression: none
2026-04-15T17:29:05.362 [DEBUG] [Thread-22898] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:29:05.418 [DEBUG] [Thread-22898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:29:05.418 [DEBUG] [Thread-22898] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:29:05.419 [DEBUG] [Thread-22898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:29:05.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:29:05.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:29:05.475 [DEBUG] [Thread-22898] [transport.py] [_log()] userauth is OK
2026-04-15T17:29:05.475 [DEBUG] [Thread-22898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:29:05.475 [DEBUG] [Thread-22898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:29:05.475 [DEBUG] [Thread-22898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:29:05.475 [DEBUG] [Thread-22898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:29:05.499 [INFO] [Thread-22898] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:29:05.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:29:05.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:29:06.395 [DEBUG] [Thread-22898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:29:06.395 [DEBUG] [Thread-22898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:29:06.444 [DEBUG] [Thread-22898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:29:06.445 [DEBUG] [Thread-22898] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:29:06.453 [DEBUG] [Thread-22898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:29:06.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:29:06.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')
2026-04-15T17:29:06.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
2026-04-15T17:29:06.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:29:06.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:29:06.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:29:06.485 [DEBUG] [Thread-22898] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:29:06.617 [DEBUG] [Thread-22900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:29:21.660 [DEBUG] [Thread-22901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:29:28.988 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:29:28.989 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:29:36.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:29:36.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:29:36.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
2026-04-15T17:29:36.692 [DEBUG] [Thread-22902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:29:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 28, 58), 7.39458, 61.1026, 0.0, 12.2285, 13.5906, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:29:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:28:58
2026-04-15T17:29:38.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:29:38.706 [DEBUG] [Thread-22903] [transport.py] [_log()] starting thread (client mode): 0xf13e30a0
2026-04-15T17:29:38.706 [DEBUG] [Thread-22903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:29:38.727 [DEBUG] [Thread-22903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:29:38.727 [INFO] [Thread-22903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:29:38.730 [DEBUG] [Thread-22903] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:29:38.730 [DEBUG] [Thread-22903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:29:38.730 [DEBUG] [Thread-22903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:29:38.730 [DEBUG] [Thread-22903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:29:38.730 [DEBUG] [Thread-22903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:29:38.730 [DEBUG] [Thread-22903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:29:38.730 [DEBUG] [Thread-22903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:29:38.731 [DEBUG] [Thread-22903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:29:38.731 [DEBUG] [Thread-22903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:29:38.731 [DEBUG] [Thread-22903] [transport.py] [_log()] client lang: <none>
2026-04-15T17:29:38.731 [DEBUG] [Thread-22903] [transport.py] [_log()] server lang: <none>
2026-04-15T17:29:38.731 [DEBUG] [Thread-22903] [transport.py] [_log()] kex follows: False
2026-04-15T17:29:38.731 [DEBUG] [Thread-22903] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:29:38.731 [DEBUG] [Thread-22903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:29:38.731 [DEBUG] [Thread-22903] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:29:38.731 [DEBUG] [Thread-22903] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:29:38.731 [DEBUG] [Thread-22903] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:29:38.731 [DEBUG] [Thread-22903] [transport.py] [_log()] Compression: none
2026-04-15T17:29:38.732 [DEBUG] [Thread-22903] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:29:38.749 [DEBUG] [Thread-22903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:29:38.749 [DEBUG] [Thread-22903] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:29:38.750 [DEBUG] [Thread-22903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:29:38.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:29:38.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:29:38.751 [DEBUG] [Thread-22903] [transport.py] [_log()] userauth is OK
2026-04-15T17:29:38.751 [DEBUG] [Thread-22903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:29:38.751 [DEBUG] [Thread-22903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:29:38.752 [DEBUG] [Thread-22903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:29:38.752 [DEBUG] [Thread-22903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:29:38.776 [INFO] [Thread-22903] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:29:38.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:29:39.568 [DEBUG] [Thread-22903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:29:39.569 [DEBUG] [Thread-22903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:29:39.569 [DEBUG] [Thread-22903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:29:39.609 [DEBUG] [Thread-22903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:29:39.609 [DEBUG] [Thread-22903] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:29:39.612 [DEBUG] [Thread-22903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:29:39.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:29:39.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:29:39.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:29:39.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:29:39.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:29:39.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:29:39.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:29:39.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:29:39.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:29:39.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.645274 -999.00  +13.10  10.60     68   +7.30 1 2 1 1 1   887    0 3.79 -88.07 ----- 8.3 10.6 322.8 14.5 16.9 -26.0 16.5 -25.0 17.4 -20.8 18.0 -22.9
2026-04-15T17:29:39.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:29:39.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:29:39.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.645274
2026-04-15T17:29:39.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:29:39.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:29:39.639 [DEBUG] [Thread-22903] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:29:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:29:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:29:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:29:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:28:58', tmtdew=7.39458, humidity=61.1026, cloud=0.0, wind=12.2285, temperature=13.5906, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:29:11.674', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:29:39.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:29:39.901 [DEBUG] [Thread-22906] [transport.py] [_log()] starting thread (client mode): 0xee90e3e0
2026-04-15T17:29:39.901 [DEBUG] [Thread-22906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:29:39.915 [DEBUG] [Thread-22906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:29:39.915 [INFO] [Thread-22906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:29:39.922 [DEBUG] [Thread-22906] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:29:39.923 [DEBUG] [Thread-22906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:29:39.923 [DEBUG] [Thread-22906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:29:39.923 [DEBUG] [Thread-22906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:29:39.923 [DEBUG] [Thread-22906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:29:39.923 [DEBUG] [Thread-22906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:29:39.923 [DEBUG] [Thread-22906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:29:39.923 [DEBUG] [Thread-22906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:29:39.923 [DEBUG] [Thread-22906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:29:39.923 [DEBUG] [Thread-22906] [transport.py] [_log()] client lang: <none>
2026-04-15T17:29:39.923 [DEBUG] [Thread-22906] [transport.py] [_log()] server lang: <none>
2026-04-15T17:29:39.923 [DEBUG] [Thread-22906] [transport.py] [_log()] kex follows: False
2026-04-15T17:29:39.923 [DEBUG] [Thread-22906] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:29:39.924 [DEBUG] [Thread-22906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:29:39.924 [DEBUG] [Thread-22906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:29:39.924 [DEBUG] [Thread-22906] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:29:39.924 [DEBUG] [Thread-22906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:29:39.924 [DEBUG] [Thread-22906] [transport.py] [_log()] Compression: none
2026-04-15T17:29:39.924 [DEBUG] [Thread-22906] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:29:39.982 [DEBUG] [Thread-22906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:29:39.982 [DEBUG] [Thread-22906] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:29:39.983 [DEBUG] [Thread-22906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:29:39.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:29:39.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:29:40.038 [DEBUG] [Thread-22906] [transport.py] [_log()] userauth is OK
2026-04-15T17:29:40.039 [DEBUG] [Thread-22906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:29:40.039 [DEBUG] [Thread-22906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:29:40.039 [DEBUG] [Thread-22906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:29:40.039 [DEBUG] [Thread-22906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:29:40.064 [INFO] [Thread-22906] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:29:40.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:29:40.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:29:40.906 [DEBUG] [Thread-22906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:29:40.907 [DEBUG] [Thread-22906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:29:40.955 [DEBUG] [Thread-22906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:29:40.955 [DEBUG] [Thread-22906] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:29:40.964 [DEBUG] [Thread-22906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:29:40.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:29:40.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')
2026-04-15T17:29:40.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') -> 00000000
2026-04-15T17:29:40.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:29:40.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:29:40.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:29:40.999 [DEBUG] [Thread-22906] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:29:43.145 [DEBUG] [Thread-22908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:29:51.723 [DEBUG] [Thread-22909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:30:06.770 [DEBUG] [Thread-22910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:30:11.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:30:11.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:30:11.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
2026-04-15T17:30:12.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 29, 34), 7.84697, 59.1781, 0.0, 19.1606, 14.3139, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:30:12.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:29:34
2026-04-15T17:30:12.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:30:13.288 [DEBUG] [Thread-22911] [transport.py] [_log()] starting thread (client mode): 0xee91cf70
2026-04-15T17:30:13.288 [DEBUG] [Thread-22911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:30:13.310 [DEBUG] [Thread-22911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:30:13.310 [INFO] [Thread-22911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:30:13.313 [DEBUG] [Thread-22911] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:30:13.313 [DEBUG] [Thread-22911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:30:13.313 [DEBUG] [Thread-22911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:30:13.313 [DEBUG] [Thread-22911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:30:13.314 [DEBUG] [Thread-22911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:30:13.314 [DEBUG] [Thread-22911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:30:13.314 [DEBUG] [Thread-22911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:30:13.314 [DEBUG] [Thread-22911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:30:13.314 [DEBUG] [Thread-22911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:30:13.314 [DEBUG] [Thread-22911] [transport.py] [_log()] client lang: <none>
2026-04-15T17:30:13.314 [DEBUG] [Thread-22911] [transport.py] [_log()] server lang: <none>
2026-04-15T17:30:13.314 [DEBUG] [Thread-22911] [transport.py] [_log()] kex follows: False
2026-04-15T17:30:13.314 [DEBUG] [Thread-22911] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:30:13.314 [DEBUG] [Thread-22911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:30:13.314 [DEBUG] [Thread-22911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:30:13.314 [DEBUG] [Thread-22911] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:30:13.315 [DEBUG] [Thread-22911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:30:13.315 [DEBUG] [Thread-22911] [transport.py] [_log()] Compression: none
2026-04-15T17:30:13.315 [DEBUG] [Thread-22911] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:30:13.331 [DEBUG] [Thread-22911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:30:13.332 [DEBUG] [Thread-22911] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:30:13.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:30:13.332 [DEBUG] [Thread-22911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:30:13.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:30:13.333 [DEBUG] [Thread-22911] [transport.py] [_log()] userauth is OK
2026-04-15T17:30:13.333 [DEBUG] [Thread-22911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:30:13.333 [DEBUG] [Thread-22911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:30:13.334 [DEBUG] [Thread-22911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:30:13.334 [DEBUG] [Thread-22911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:30:13.353 [INFO] [Thread-22911] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:30:13.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:30:17.791 [DEBUG] [Thread-22911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:30:17.791 [DEBUG] [Thread-22911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:30:17.792 [DEBUG] [Thread-22911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:30:17.832 [DEBUG] [Thread-22911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:30:17.832 [DEBUG] [Thread-22911] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:30:17.835 [DEBUG] [Thread-22911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:30:17.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:30:17.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:30:17.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:30:17.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:30:17.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:30:17.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:30:17.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:30:17.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:30:17.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:30:17.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.645621 -999.00  +13.20  13.51     68   +7.50 1 2 1 1 1   887    0 3.91 -83.80 ----- 11.7 13.5 323.0 14.9 16.9 -25.5 16.6 -24.2 17.5 -20.9 18.1 -22.4
2026-04-15T17:30:17.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:30:17.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:30:17.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.645621
2026-04-15T17:30:17.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:30:17.977 [DEBUG] [Thread-22911] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:30:17.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:30:17.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:30:17.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:30:17.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:30:17.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:29:34', tmtdew=7.84697, humidity=59.1781, cloud=0.0, wind=19.1606, temperature=14.3139, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:29:41.654', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:30:18.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:30:18.228 [DEBUG] [Thread-22914] [transport.py] [_log()] starting thread (client mode): 0xee91d150
2026-04-15T17:30:18.228 [DEBUG] [Thread-22914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:30:18.242 [DEBUG] [Thread-22914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:30:18.242 [INFO] [Thread-22914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:30:18.250 [DEBUG] [Thread-22914] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:30:18.250 [DEBUG] [Thread-22914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:30:18.250 [DEBUG] [Thread-22914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:30:18.250 [DEBUG] [Thread-22914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:30:18.250 [DEBUG] [Thread-22914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:30:18.250 [DEBUG] [Thread-22914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:30:18.250 [DEBUG] [Thread-22914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:30:18.250 [DEBUG] [Thread-22914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:30:18.250 [DEBUG] [Thread-22914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:30:18.250 [DEBUG] [Thread-22914] [transport.py] [_log()] client lang: <none>
2026-04-15T17:30:18.251 [DEBUG] [Thread-22914] [transport.py] [_log()] server lang: <none>
2026-04-15T17:30:18.251 [DEBUG] [Thread-22914] [transport.py] [_log()] kex follows: False
2026-04-15T17:30:18.251 [DEBUG] [Thread-22914] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:30:18.251 [DEBUG] [Thread-22914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:30:18.251 [DEBUG] [Thread-22914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:30:18.251 [DEBUG] [Thread-22914] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:30:18.251 [DEBUG] [Thread-22914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:30:18.251 [DEBUG] [Thread-22914] [transport.py] [_log()] Compression: none
2026-04-15T17:30:18.251 [DEBUG] [Thread-22914] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:30:18.305 [DEBUG] [Thread-22914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:30:18.305 [DEBUG] [Thread-22914] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:30:18.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:30:18.306 [DEBUG] [Thread-22914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:30:18.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:30:18.366 [DEBUG] [Thread-22914] [transport.py] [_log()] userauth is OK
2026-04-15T17:30:18.366 [DEBUG] [Thread-22914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:30:18.366 [DEBUG] [Thread-22914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:30:18.366 [DEBUG] [Thread-22914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:30:18.367 [DEBUG] [Thread-22914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:30:18.394 [INFO] [Thread-22914] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:30:18.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:30:18.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:30:19.229 [DEBUG] [Thread-22914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:30:19.229 [DEBUG] [Thread-22914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:30:19.277 [DEBUG] [Thread-22914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:30:19.277 [DEBUG] [Thread-22914] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:30:19.286 [DEBUG] [Thread-22914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:30:19.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:30:19.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')
2026-04-15T17:30:19.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') -> 00000000
2026-04-15T17:30:19.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:30:19.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:30:19.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:30:19.320 [DEBUG] [Thread-22914] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:30:21.802 [DEBUG] [Thread-22916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:30:29.129 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:30:29.130 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:30:36.845 [DEBUG] [Thread-22917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:30:43.224 [DEBUG] [Thread-22918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:30:49.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:30:49.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:30:49.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
2026-04-15T17:30:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 30, 9), 7.47876, 60.5393, 0.0, 10.7813, 13.591, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:30:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:30:09
2026-04-15T17:30:51.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:30:51.553 [DEBUG] [Thread-22919] [transport.py] [_log()] starting thread (client mode): 0xf13fd4e0
2026-04-15T17:30:51.553 [DEBUG] [Thread-22919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:30:51.572 [DEBUG] [Thread-22919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:30:51.572 [INFO] [Thread-22919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:30:51.575 [DEBUG] [Thread-22919] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:30:51.575 [DEBUG] [Thread-22919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:30:51.575 [DEBUG] [Thread-22919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:30:51.575 [DEBUG] [Thread-22919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:30:51.576 [DEBUG] [Thread-22919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:30:51.576 [DEBUG] [Thread-22919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:30:51.576 [DEBUG] [Thread-22919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:30:51.576 [DEBUG] [Thread-22919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:30:51.576 [DEBUG] [Thread-22919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:30:51.576 [DEBUG] [Thread-22919] [transport.py] [_log()] client lang: <none>
2026-04-15T17:30:51.576 [DEBUG] [Thread-22919] [transport.py] [_log()] server lang: <none>
2026-04-15T17:30:51.576 [DEBUG] [Thread-22919] [transport.py] [_log()] kex follows: False
2026-04-15T17:30:51.576 [DEBUG] [Thread-22919] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:30:51.576 [DEBUG] [Thread-22919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:30:51.576 [DEBUG] [Thread-22919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:30:51.576 [DEBUG] [Thread-22919] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:30:51.576 [DEBUG] [Thread-22919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:30:51.576 [DEBUG] [Thread-22919] [transport.py] [_log()] Compression: none
2026-04-15T17:30:51.576 [DEBUG] [Thread-22919] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:30:51.593 [DEBUG] [Thread-22919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:30:51.593 [DEBUG] [Thread-22919] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:30:51.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:30:51.594 [DEBUG] [Thread-22919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:30:51.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:30:51.638 [DEBUG] [Thread-22919] [transport.py] [_log()] userauth is OK
2026-04-15T17:30:51.638 [DEBUG] [Thread-22919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:30:51.638 [DEBUG] [Thread-22919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:30:51.638 [DEBUG] [Thread-22919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:30:51.638 [DEBUG] [Thread-22919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:30:51.673 [INFO] [Thread-22919] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:30:51.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:30:51.875 [DEBUG] [Thread-22921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:30:52.472 [DEBUG] [Thread-22919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:30:52.472 [DEBUG] [Thread-22919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:30:52.472 [DEBUG] [Thread-22919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:30:52.513 [DEBUG] [Thread-22919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:30:52.513 [DEBUG] [Thread-22919] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:30:52.516 [DEBUG] [Thread-22919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:30:52.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:30:52.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:30:52.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:30:52.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:30:52.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:30:52.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:30:52.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:30:52.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:30:52.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:30:52.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.645968 -999.00  +13.20  13.43     67   +7.30 1 2 1 1 1   887    0 3.66 -93.87 ----- 14.8 13.4 330.4 20.1 16.9 -25.1 16.6 -23.7 17.5 -19.6 18.1 -21.5
2026-04-15T17:30:52.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:30:52.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:30:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.645968
2026-04-15T17:30:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:30:52.542 [DEBUG] [Thread-22919] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:30:52.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:30:52.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:30:52.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:30:52.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:30:52.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:30:09', tmtdew=7.47876, humidity=60.5393, cloud=0.0, wind=10.7813, temperature=13.591, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:30:11.635', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:30:52.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:30:52.815 [DEBUG] [Thread-22923] [transport.py] [_log()] starting thread (client mode): 0xf13e3c70
2026-04-15T17:30:52.816 [DEBUG] [Thread-22923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:30:52.829 [DEBUG] [Thread-22923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:30:52.829 [INFO] [Thread-22923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:30:52.837 [DEBUG] [Thread-22923] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:30:52.837 [DEBUG] [Thread-22923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:30:52.837 [DEBUG] [Thread-22923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:30:52.837 [DEBUG] [Thread-22923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:30:52.837 [DEBUG] [Thread-22923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:30:52.837 [DEBUG] [Thread-22923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:30:52.837 [DEBUG] [Thread-22923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:30:52.837 [DEBUG] [Thread-22923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:30:52.837 [DEBUG] [Thread-22923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:30:52.838 [DEBUG] [Thread-22923] [transport.py] [_log()] client lang: <none>
2026-04-15T17:30:52.838 [DEBUG] [Thread-22923] [transport.py] [_log()] server lang: <none>
2026-04-15T17:30:52.838 [DEBUG] [Thread-22923] [transport.py] [_log()] kex follows: False
2026-04-15T17:30:52.838 [DEBUG] [Thread-22923] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:30:52.838 [DEBUG] [Thread-22923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:30:52.838 [DEBUG] [Thread-22923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:30:52.838 [DEBUG] [Thread-22923] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:30:52.838 [DEBUG] [Thread-22923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:30:52.838 [DEBUG] [Thread-22923] [transport.py] [_log()] Compression: none
2026-04-15T17:30:52.839 [DEBUG] [Thread-22923] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:30:52.894 [DEBUG] [Thread-22923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:30:52.894 [DEBUG] [Thread-22923] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:30:52.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:30:52.895 [DEBUG] [Thread-22923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:30:52.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:30:52.950 [DEBUG] [Thread-22923] [transport.py] [_log()] userauth is OK
2026-04-15T17:30:52.950 [DEBUG] [Thread-22923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:30:52.951 [DEBUG] [Thread-22923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:30:52.951 [DEBUG] [Thread-22923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:30:52.951 [DEBUG] [Thread-22923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:30:52.977 [INFO] [Thread-22923] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:30:52.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:30:52.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:30:53.792 [DEBUG] [Thread-22923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:30:53.792 [DEBUG] [Thread-22923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:30:53.840 [DEBUG] [Thread-22923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:30:53.840 [DEBUG] [Thread-22923] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:30:53.849 [DEBUG] [Thread-22923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:30:53.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:30: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')
2026-04-15T17:30: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
2026-04-15T17:30:53.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:30:53.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:30:53.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:30:53.883 [DEBUG] [Thread-22923] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:31:06.905 [DEBUG] [Thread-22925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:31:21.949 [DEBUG] [Thread-22926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:31:23.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:31:23.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:31:23.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
2026-04-15T17:31:25.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 30, 45), 7.60743, 60.1058, 0.0, 15.9854, 14.082, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:31:25.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:30:45
2026-04-15T17:31:25.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:31:26.077 [DEBUG] [Thread-22927] [transport.py] [_log()] starting thread (client mode): 0xf1335750
2026-04-15T17:31:26.077 [DEBUG] [Thread-22927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:31:26.097 [DEBUG] [Thread-22927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:31:26.097 [INFO] [Thread-22927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:31:26.100 [DEBUG] [Thread-22927] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:31:26.100 [DEBUG] [Thread-22927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:31:26.100 [DEBUG] [Thread-22927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:31:26.100 [DEBUG] [Thread-22927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:31:26.100 [DEBUG] [Thread-22927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:31:26.101 [DEBUG] [Thread-22927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:31:26.101 [DEBUG] [Thread-22927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:31:26.101 [DEBUG] [Thread-22927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:31:26.101 [DEBUG] [Thread-22927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:31:26.101 [DEBUG] [Thread-22927] [transport.py] [_log()] client lang: <none>
2026-04-15T17:31:26.101 [DEBUG] [Thread-22927] [transport.py] [_log()] server lang: <none>
2026-04-15T17:31:26.101 [DEBUG] [Thread-22927] [transport.py] [_log()] kex follows: False
2026-04-15T17:31:26.101 [DEBUG] [Thread-22927] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:31:26.101 [DEBUG] [Thread-22927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:31:26.101 [DEBUG] [Thread-22927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:31:26.101 [DEBUG] [Thread-22927] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:31:26.101 [DEBUG] [Thread-22927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:31:26.101 [DEBUG] [Thread-22927] [transport.py] [_log()] Compression: none
2026-04-15T17:31:26.102 [DEBUG] [Thread-22927] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:31:26.118 [DEBUG] [Thread-22927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:31:26.118 [DEBUG] [Thread-22927] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:31:26.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:31:26.119 [DEBUG] [Thread-22927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:31:26.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:31:26.120 [DEBUG] [Thread-22927] [transport.py] [_log()] userauth is OK
2026-04-15T17:31:26.120 [DEBUG] [Thread-22927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:31:26.120 [DEBUG] [Thread-22927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:31:26.120 [DEBUG] [Thread-22927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:31:26.120 [DEBUG] [Thread-22927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:31:26.133 [INFO] [Thread-22927] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:31:26.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:31:26.943 [DEBUG] [Thread-22927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:31:26.944 [DEBUG] [Thread-22927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:31:26.944 [DEBUG] [Thread-22927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:31:26.984 [DEBUG] [Thread-22927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:31:26.984 [DEBUG] [Thread-22927] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:31:26.987 [DEBUG] [Thread-22927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:31:27.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:31:27.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:31:27.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:31:27.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:31:27.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:31:27.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:31:27.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:31:27.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:31:27.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:31:27.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.646315 -999.00  +13.30  12.87     67   +7.50 1 2 1 1 1   887    0 3.96 -85.89 ----- 16.9 12.9 318.6 15.6 16.9 -24.7 16.6 -23.1 17.5 -19.3 18.1 -21.2
2026-04-15T17:31:27.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:31:27.011 [DEBUG] [Thread-22927] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:31:27.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:31:27.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.646315
2026-04-15T17:31:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:31:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:31:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:31:27.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:31:27.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:31:27.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:30:45', tmtdew=7.60743, humidity=60.1058, cloud=0.0, wind=15.9854, temperature=14.082, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:30:41.616', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:31:27.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:31:27.270 [DEBUG] [Thread-22930] [transport.py] [_log()] starting thread (client mode): 0xf13e3a60
2026-04-15T17:31:27.270 [DEBUG] [Thread-22930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:31:27.285 [DEBUG] [Thread-22930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:31:27.285 [INFO] [Thread-22930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:31:27.292 [DEBUG] [Thread-22930] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:31:27.292 [DEBUG] [Thread-22930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:31:27.292 [DEBUG] [Thread-22930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:31:27.292 [DEBUG] [Thread-22930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:31:27.292 [DEBUG] [Thread-22930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:31:27.292 [DEBUG] [Thread-22930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:31:27.292 [DEBUG] [Thread-22930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:31:27.293 [DEBUG] [Thread-22930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:31:27.293 [DEBUG] [Thread-22930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:31:27.293 [DEBUG] [Thread-22930] [transport.py] [_log()] client lang: <none>
2026-04-15T17:31:27.293 [DEBUG] [Thread-22930] [transport.py] [_log()] server lang: <none>
2026-04-15T17:31:27.293 [DEBUG] [Thread-22930] [transport.py] [_log()] kex follows: False
2026-04-15T17:31:27.293 [DEBUG] [Thread-22930] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:31:27.293 [DEBUG] [Thread-22930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:31:27.293 [DEBUG] [Thread-22930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:31:27.293 [DEBUG] [Thread-22930] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:31:27.293 [DEBUG] [Thread-22930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:31:27.293 [DEBUG] [Thread-22930] [transport.py] [_log()] Compression: none
2026-04-15T17:31:27.294 [DEBUG] [Thread-22930] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:31:27.349 [DEBUG] [Thread-22930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:31:27.350 [DEBUG] [Thread-22930] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:31:27.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:31:27.350 [DEBUG] [Thread-22930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:31:27.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:31:27.405 [DEBUG] [Thread-22930] [transport.py] [_log()] userauth is OK
2026-04-15T17:31:27.406 [DEBUG] [Thread-22930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:31:27.406 [DEBUG] [Thread-22930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:31:27.406 [DEBUG] [Thread-22930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:31:27.406 [DEBUG] [Thread-22930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:31:27.431 [INFO] [Thread-22930] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:31:27.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:31:27.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:31:28.255 [DEBUG] [Thread-22930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:31:28.255 [DEBUG] [Thread-22930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:31:28.303 [DEBUG] [Thread-22930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:31:28.303 [DEBUG] [Thread-22930] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:31:28.311 [DEBUG] [Thread-22930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:31:28.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:31:28.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')
2026-04-15T17:31:28.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
2026-04-15T17:31:28.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:31:28.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:31:28.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:31:28.342 [DEBUG] [Thread-22930] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:31:29.269 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:31:29.270 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:31:36.980 [DEBUG] [Thread-22932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:31:43.328 [DEBUG] [Thread-22933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:31:52.028 [DEBUG] [Thread-22934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:31:58.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:31:58.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:31:58.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
2026-04-15T17:31:59.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 31, 21), 7.58618, 60.092, 0.0, 14.5393, 13.5913, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:31:59.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:31:21
2026-04-15T17:32:00.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:32:00.742 [DEBUG] [Thread-22935] [transport.py] [_log()] starting thread (client mode): 0xf1334d90
2026-04-15T17:32:00.742 [DEBUG] [Thread-22935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:32:00.762 [DEBUG] [Thread-22935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:32:00.762 [INFO] [Thread-22935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:32:00.765 [DEBUG] [Thread-22935] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:32:00.766 [DEBUG] [Thread-22935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:32:00.766 [DEBUG] [Thread-22935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:32:00.766 [DEBUG] [Thread-22935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:32:00.766 [DEBUG] [Thread-22935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:32:00.766 [DEBUG] [Thread-22935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:32:00.766 [DEBUG] [Thread-22935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:32:00.766 [DEBUG] [Thread-22935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:32:00.766 [DEBUG] [Thread-22935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:32:00.766 [DEBUG] [Thread-22935] [transport.py] [_log()] client lang: <none>
2026-04-15T17:32:00.766 [DEBUG] [Thread-22935] [transport.py] [_log()] server lang: <none>
2026-04-15T17:32:00.766 [DEBUG] [Thread-22935] [transport.py] [_log()] kex follows: False
2026-04-15T17:32:00.767 [DEBUG] [Thread-22935] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:32:00.767 [DEBUG] [Thread-22935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:32:00.767 [DEBUG] [Thread-22935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:32:00.767 [DEBUG] [Thread-22935] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:32:00.767 [DEBUG] [Thread-22935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:32:00.767 [DEBUG] [Thread-22935] [transport.py] [_log()] Compression: none
2026-04-15T17:32:00.767 [DEBUG] [Thread-22935] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:32:00.784 [DEBUG] [Thread-22935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:32:00.784 [DEBUG] [Thread-22935] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:32:00.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:32:00.785 [DEBUG] [Thread-22935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:32:00.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:32:00.786 [DEBUG] [Thread-22935] [transport.py] [_log()] userauth is OK
2026-04-15T17:32:00.786 [DEBUG] [Thread-22935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:32:00.786 [DEBUG] [Thread-22935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:32:00.786 [DEBUG] [Thread-22935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:32:00.786 [DEBUG] [Thread-22935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:32:00.811 [INFO] [Thread-22935] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:32:00.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:32:01.561 [DEBUG] [Thread-22935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:32:01.561 [DEBUG] [Thread-22935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:32:01.562 [DEBUG] [Thread-22935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:32:01.602 [DEBUG] [Thread-22935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:32:01.602 [DEBUG] [Thread-22935] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:32:01.605 [DEBUG] [Thread-22935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:32:01.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:32:01.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:32:01.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:32:01.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:32:01.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:32:01.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:32:01.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:32:01.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:32:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:32:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.646663 -999.00  +13.50  11.64     68   +7.70 1 2 1 1 1   887    0 4.09 -78.87 ----- 12.7 11.6 315.8 18.4 16.9 -23.7 16.6 -22.7 17.6 -18.5 18.1 -20.5
2026-04-15T17:32:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:32:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:32:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.646663
2026-04-15T17:32:01.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:32:01.629 [DEBUG] [Thread-22935] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:32:01.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:32:01.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:32:01.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:32:01.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:32:01.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:31:21', tmtdew=7.58618, humidity=60.092, cloud=0.0, wind=14.5393, temperature=13.5913, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:31:11.683', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:32:01.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:32:01.872 [DEBUG] [Thread-22938] [transport.py] [_log()] starting thread (client mode): 0xee91ed70
2026-04-15T17:32:01.872 [DEBUG] [Thread-22938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:32:01.886 [DEBUG] [Thread-22938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:32:01.886 [INFO] [Thread-22938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:32:01.893 [DEBUG] [Thread-22938] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:32:01.894 [DEBUG] [Thread-22938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:32:01.894 [DEBUG] [Thread-22938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:32:01.894 [DEBUG] [Thread-22938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:32:01.894 [DEBUG] [Thread-22938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:32:01.894 [DEBUG] [Thread-22938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:32:01.894 [DEBUG] [Thread-22938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:32:01.894 [DEBUG] [Thread-22938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:32:01.894 [DEBUG] [Thread-22938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:32:01.894 [DEBUG] [Thread-22938] [transport.py] [_log()] client lang: <none>
2026-04-15T17:32:01.894 [DEBUG] [Thread-22938] [transport.py] [_log()] server lang: <none>
2026-04-15T17:32:01.894 [DEBUG] [Thread-22938] [transport.py] [_log()] kex follows: False
2026-04-15T17:32:01.894 [DEBUG] [Thread-22938] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:32:01.895 [DEBUG] [Thread-22938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:32:01.895 [DEBUG] [Thread-22938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:32:01.895 [DEBUG] [Thread-22938] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:32:01.895 [DEBUG] [Thread-22938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:32:01.895 [DEBUG] [Thread-22938] [transport.py] [_log()] Compression: none
2026-04-15T17:32:01.895 [DEBUG] [Thread-22938] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:32:01.960 [DEBUG] [Thread-22938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:32:01.960 [DEBUG] [Thread-22938] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:32:01.961 [DEBUG] [Thread-22938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:32:01.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:32:01.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:32:02.017 [DEBUG] [Thread-22938] [transport.py] [_log()] userauth is OK
2026-04-15T17:32:02.017 [DEBUG] [Thread-22938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:32:02.017 [DEBUG] [Thread-22938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:32:02.018 [DEBUG] [Thread-22938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:32:02.018 [DEBUG] [Thread-22938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:32:02.043 [INFO] [Thread-22938] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:32:02.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:32:02.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:32:02.916 [DEBUG] [Thread-22938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:32:02.916 [DEBUG] [Thread-22938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:32:02.966 [DEBUG] [Thread-22938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:32:02.967 [DEBUG] [Thread-22938] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:32:02.976 [DEBUG] [Thread-22938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:32:02.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:32:02.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')
2026-04-15T17:32:02.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
2026-04-15T17:32:03.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:32:03.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:32:03.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:32:03.011 [DEBUG] [Thread-22938] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:32:07.060 [DEBUG] [Thread-22940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:32:22.107 [DEBUG] [Thread-22941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:32:29.410 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:32:29.411 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:32:33.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:32:33.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:32:33.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
2026-04-15T17:32:34.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 31, 56), 7.82104, 59.0288, 0.0, 15.5279, 13.4919, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:32:34.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:31:56
2026-04-15T17:32:34.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:32:35.264 [DEBUG] [Thread-22942] [transport.py] [_log()] starting thread (client mode): 0xf13fe3b0
2026-04-15T17:32:35.264 [DEBUG] [Thread-22942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:32:35.280 [DEBUG] [Thread-22942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:32:35.280 [INFO] [Thread-22942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:32:35.283 [DEBUG] [Thread-22942] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:32:35.283 [DEBUG] [Thread-22942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:32:35.283 [DEBUG] [Thread-22942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:32:35.283 [DEBUG] [Thread-22942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:32:35.283 [DEBUG] [Thread-22942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:32:35.283 [DEBUG] [Thread-22942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:32:35.284 [DEBUG] [Thread-22942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:32:35.284 [DEBUG] [Thread-22942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:32:35.284 [DEBUG] [Thread-22942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:32:35.284 [DEBUG] [Thread-22942] [transport.py] [_log()] client lang: <none>
2026-04-15T17:32:35.284 [DEBUG] [Thread-22942] [transport.py] [_log()] server lang: <none>
2026-04-15T17:32:35.284 [DEBUG] [Thread-22942] [transport.py] [_log()] kex follows: False
2026-04-15T17:32:35.284 [DEBUG] [Thread-22942] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:32:35.284 [DEBUG] [Thread-22942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:32:35.284 [DEBUG] [Thread-22942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:32:35.284 [DEBUG] [Thread-22942] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:32:35.284 [DEBUG] [Thread-22942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:32:35.284 [DEBUG] [Thread-22942] [transport.py] [_log()] Compression: none
2026-04-15T17:32:35.285 [DEBUG] [Thread-22942] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:32:35.301 [DEBUG] [Thread-22942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:32:35.301 [DEBUG] [Thread-22942] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:32:35.302 [DEBUG] [Thread-22942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:32:35.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:32:35.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:32:35.303 [DEBUG] [Thread-22942] [transport.py] [_log()] userauth is OK
2026-04-15T17:32:35.303 [DEBUG] [Thread-22942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:32:35.303 [DEBUG] [Thread-22942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:32:35.303 [DEBUG] [Thread-22942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:32:35.303 [DEBUG] [Thread-22942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:32:35.326 [INFO] [Thread-22942] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:32:35.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:32:36.108 [DEBUG] [Thread-22942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:32:36.108 [DEBUG] [Thread-22942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:32:36.109 [DEBUG] [Thread-22942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:32:36.149 [DEBUG] [Thread-22942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:32:36.149 [DEBUG] [Thread-22942] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:32:36.151 [DEBUG] [Thread-22942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:32:36.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:32:36.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:32:36.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:32:36.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:32:36.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:32:36.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:32:36.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:32:36.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:32:36.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:32:36.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.647010 -999.00  +13.50  19.01     67   +7.60 1 2 1 1 1   887    0 4.10 -75.61 ----- 15.7 19.0 327.8 20.3 17.0 -23.3 16.6 -21.9 17.6 -17.9 18.1 -20.5
2026-04-15T17:32:36.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:32:36.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:32:36.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.647010
2026-04-15T17:32:36.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:32:36.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:32:36.177 [DEBUG] [Thread-22942] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:32:36.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:32:36.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:32:36.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:32:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:31:56', tmtdew=7.82104, humidity=59.0288, cloud=0.0, wind=15.5279, temperature=13.4919, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:31:41.664', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:32:36.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:32:36.412 [DEBUG] [Thread-22945] [transport.py] [_log()] starting thread (client mode): 0xee91cd60
2026-04-15T17:32:36.413 [DEBUG] [Thread-22945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:32:36.427 [DEBUG] [Thread-22945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:32:36.427 [INFO] [Thread-22945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:32:36.434 [DEBUG] [Thread-22945] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:32:36.434 [DEBUG] [Thread-22945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:32:36.434 [DEBUG] [Thread-22945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:32:36.434 [DEBUG] [Thread-22945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:32:36.434 [DEBUG] [Thread-22945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:32:36.434 [DEBUG] [Thread-22945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:32:36.434 [DEBUG] [Thread-22945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:32:36.434 [DEBUG] [Thread-22945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:32:36.435 [DEBUG] [Thread-22945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:32:36.435 [DEBUG] [Thread-22945] [transport.py] [_log()] client lang: <none>
2026-04-15T17:32:36.435 [DEBUG] [Thread-22945] [transport.py] [_log()] server lang: <none>
2026-04-15T17:32:36.435 [DEBUG] [Thread-22945] [transport.py] [_log()] kex follows: False
2026-04-15T17:32:36.435 [DEBUG] [Thread-22945] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:32:36.435 [DEBUG] [Thread-22945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:32:36.435 [DEBUG] [Thread-22945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:32:36.435 [DEBUG] [Thread-22945] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:32:36.435 [DEBUG] [Thread-22945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:32:36.435 [DEBUG] [Thread-22945] [transport.py] [_log()] Compression: none
2026-04-15T17:32:36.435 [DEBUG] [Thread-22945] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:32:36.492 [DEBUG] [Thread-22945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:32:36.492 [DEBUG] [Thread-22945] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:32:36.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:32:36.493 [DEBUG] [Thread-22945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:32:36.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:32:36.549 [DEBUG] [Thread-22945] [transport.py] [_log()] userauth is OK
2026-04-15T17:32:36.549 [DEBUG] [Thread-22945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:32:36.550 [DEBUG] [Thread-22945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:32:36.550 [DEBUG] [Thread-22945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:32:36.550 [DEBUG] [Thread-22945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:32:36.575 [INFO] [Thread-22945] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:32:36.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:32:36.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:32:37.139 [DEBUG] [Thread-22947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:32:37.397 [DEBUG] [Thread-22945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:32:37.397 [DEBUG] [Thread-22945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:32:37.445 [DEBUG] [Thread-22945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:32:37.445 [DEBUG] [Thread-22945] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:32:37.454 [DEBUG] [Thread-22945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:32:37.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:32:37.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')
2026-04-15T17:32:37.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
2026-04-15T17:32:37.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:32:37.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:32:37.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:32:37.488 [DEBUG] [Thread-22945] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:32:43.452 [DEBUG] [Thread-22948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:32:52.184 [DEBUG] [Thread-22949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:33:07.216 [DEBUG] [Thread-22950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:33:07.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:33:07.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:33:07.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
2026-04-15T17:33:08.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 32, 32), 7.89132, 58.7305, 0.0, 15.5632, 13.4091, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:33:08.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:32:32
2026-04-15T17:33:09.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:33:09.659 [DEBUG] [Thread-22951] [transport.py] [_log()] starting thread (client mode): 0xf17c2140
2026-04-15T17:33:09.660 [DEBUG] [Thread-22951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:33:09.679 [DEBUG] [Thread-22951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:33:09.679 [INFO] [Thread-22951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:33:09.682 [DEBUG] [Thread-22951] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:33:09.682 [DEBUG] [Thread-22951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:33:09.682 [DEBUG] [Thread-22951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:33:09.682 [DEBUG] [Thread-22951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:33:09.682 [DEBUG] [Thread-22951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:33:09.683 [DEBUG] [Thread-22951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:33:09.683 [DEBUG] [Thread-22951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:33:09.683 [DEBUG] [Thread-22951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:33:09.683 [DEBUG] [Thread-22951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:33:09.683 [DEBUG] [Thread-22951] [transport.py] [_log()] client lang: <none>
2026-04-15T17:33:09.683 [DEBUG] [Thread-22951] [transport.py] [_log()] server lang: <none>
2026-04-15T17:33:09.683 [DEBUG] [Thread-22951] [transport.py] [_log()] kex follows: False
2026-04-15T17:33:09.683 [DEBUG] [Thread-22951] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:33:09.683 [DEBUG] [Thread-22951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:33:09.683 [DEBUG] [Thread-22951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:33:09.683 [DEBUG] [Thread-22951] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:33:09.684 [DEBUG] [Thread-22951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:33:09.684 [DEBUG] [Thread-22951] [transport.py] [_log()] Compression: none
2026-04-15T17:33:09.684 [DEBUG] [Thread-22951] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:33:09.700 [DEBUG] [Thread-22951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:33:09.701 [DEBUG] [Thread-22951] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:33:09.701 [DEBUG] [Thread-22951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:33:09.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:33:09.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:33:09.702 [DEBUG] [Thread-22951] [transport.py] [_log()] userauth is OK
2026-04-15T17:33:09.703 [DEBUG] [Thread-22951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:33:09.703 [DEBUG] [Thread-22951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:33:09.703 [DEBUG] [Thread-22951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:33:09.703 [DEBUG] [Thread-22951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:33:09.727 [INFO] [Thread-22951] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:33:09.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:33:10.528 [DEBUG] [Thread-22951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:33:10.528 [DEBUG] [Thread-22951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:33:10.529 [DEBUG] [Thread-22951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:33:10.569 [DEBUG] [Thread-22951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:33:10.569 [DEBUG] [Thread-22951] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:33:10.572 [DEBUG] [Thread-22951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:33:10.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:33:10.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:33:10.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:33:10.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:33:10.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:33:10.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:33:10.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:33:10.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:33:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:33:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.647357 -999.00  +13.30  15.97     67   +7.40 1 2 1 1 1   887    0 4.11 -76.91 ----- 14.9 16.0 328.4 19.0 17.0 -23.3 16.7 -21.9 17.6 -18.0 18.1 -20.8
2026-04-15T17:33:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:33:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:33:10.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.647357
2026-04-15T17:33:10.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:33:10.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:33:10.591 [DEBUG] [Thread-22951] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:33:10.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:33:10.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:33:10.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:33:10.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:32:32', tmtdew=7.89132, humidity=58.7305, cloud=0.0, wind=15.5632, temperature=13.4091, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:32:11.645', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:33:10.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:33:10.855 [DEBUG] [Thread-22954] [transport.py] [_log()] starting thread (client mode): 0xf13e3bb0
2026-04-15T17:33:10.855 [DEBUG] [Thread-22954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:33:10.871 [DEBUG] [Thread-22954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:33:10.871 [INFO] [Thread-22954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:33:10.879 [DEBUG] [Thread-22954] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:33:10.879 [DEBUG] [Thread-22954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:33:10.879 [DEBUG] [Thread-22954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:33:10.879 [DEBUG] [Thread-22954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:33:10.879 [DEBUG] [Thread-22954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:33:10.879 [DEBUG] [Thread-22954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:33:10.879 [DEBUG] [Thread-22954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:33:10.879 [DEBUG] [Thread-22954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:33:10.879 [DEBUG] [Thread-22954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:33:10.879 [DEBUG] [Thread-22954] [transport.py] [_log()] client lang: <none>
2026-04-15T17:33:10.879 [DEBUG] [Thread-22954] [transport.py] [_log()] server lang: <none>
2026-04-15T17:33:10.880 [DEBUG] [Thread-22954] [transport.py] [_log()] kex follows: False
2026-04-15T17:33:10.880 [DEBUG] [Thread-22954] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:33:10.880 [DEBUG] [Thread-22954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:33:10.880 [DEBUG] [Thread-22954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:33:10.880 [DEBUG] [Thread-22954] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:33:10.880 [DEBUG] [Thread-22954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:33:10.880 [DEBUG] [Thread-22954] [transport.py] [_log()] Compression: none
2026-04-15T17:33:10.880 [DEBUG] [Thread-22954] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:33:10.936 [DEBUG] [Thread-22954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:33:10.936 [DEBUG] [Thread-22954] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:33:10.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:33:10.937 [DEBUG] [Thread-22954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:33:10.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:33:10.992 [DEBUG] [Thread-22954] [transport.py] [_log()] userauth is OK
2026-04-15T17:33:10.992 [DEBUG] [Thread-22954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:33:10.992 [DEBUG] [Thread-22954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:33:10.992 [DEBUG] [Thread-22954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:33:10.992 [DEBUG] [Thread-22954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:33:11.010 [INFO] [Thread-22954] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:33:11.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:33:11.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:33:11.864 [DEBUG] [Thread-22954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:33:11.865 [DEBUG] [Thread-22954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:33:11.912 [DEBUG] [Thread-22954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:33:11.912 [DEBUG] [Thread-22954] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:33:11.921 [DEBUG] [Thread-22954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:33:11.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:33:11.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T17:33:11.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
2026-04-15T17:33:11.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:33:11.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:33:11.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:33:11.956 [DEBUG] [Thread-22954] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:33:22.248 [DEBUG] [Thread-22956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:33:29.549 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:33:29.551 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:33:37.291 [DEBUG] [Thread-22957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:33:41.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:33:41.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:33:41.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
2026-04-15T17:33:43.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 33, 8), 7.89239, 58.7306, 0.0, 13.1818, 13.4256, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:33:43.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:33:08
2026-04-15T17:33:43.535 [DEBUG] [Thread-22958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:33:43.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:33:44.071 [DEBUG] [Thread-22959] [transport.py] [_log()] starting thread (client mode): 0xf1334730
2026-04-15T17:33:44.071 [DEBUG] [Thread-22959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:33:44.095 [DEBUG] [Thread-22959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:33:44.095 [INFO] [Thread-22959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:33:44.098 [DEBUG] [Thread-22959] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:33:44.098 [DEBUG] [Thread-22959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:33:44.099 [DEBUG] [Thread-22959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:33:44.099 [DEBUG] [Thread-22959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:33:44.099 [DEBUG] [Thread-22959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:33:44.099 [DEBUG] [Thread-22959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:33:44.099 [DEBUG] [Thread-22959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:33:44.099 [DEBUG] [Thread-22959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:33:44.099 [DEBUG] [Thread-22959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:33:44.099 [DEBUG] [Thread-22959] [transport.py] [_log()] client lang: <none>
2026-04-15T17:33:44.099 [DEBUG] [Thread-22959] [transport.py] [_log()] server lang: <none>
2026-04-15T17:33:44.099 [DEBUG] [Thread-22959] [transport.py] [_log()] kex follows: False
2026-04-15T17:33:44.099 [DEBUG] [Thread-22959] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:33:44.100 [DEBUG] [Thread-22959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:33:44.100 [DEBUG] [Thread-22959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:33:44.100 [DEBUG] [Thread-22959] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:33:44.100 [DEBUG] [Thread-22959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:33:44.100 [DEBUG] [Thread-22959] [transport.py] [_log()] Compression: none
2026-04-15T17:33:44.100 [DEBUG] [Thread-22959] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:33:44.117 [DEBUG] [Thread-22959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:33:44.117 [DEBUG] [Thread-22959] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:33:44.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:33:44.118 [DEBUG] [Thread-22959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:33:44.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:33:44.119 [DEBUG] [Thread-22959] [transport.py] [_log()] userauth is OK
2026-04-15T17:33:44.119 [DEBUG] [Thread-22959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:33:44.119 [DEBUG] [Thread-22959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:33:44.119 [DEBUG] [Thread-22959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:33:44.119 [DEBUG] [Thread-22959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:33:44.155 [INFO] [Thread-22959] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:33:44.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:33:44.900 [DEBUG] [Thread-22959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:33:44.900 [DEBUG] [Thread-22959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:33:44.900 [DEBUG] [Thread-22959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:33:44.941 [DEBUG] [Thread-22959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:33:44.941 [DEBUG] [Thread-22959] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:33:44.944 [DEBUG] [Thread-22959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:33:44.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:33:44.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:33:44.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:33:44.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:33:44.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:33:44.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:33:44.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:33:44.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:33:44.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:33:44.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.648398 -999.00  +13.60  11.29     68   +8.00 1 2 1 1 1   887    0 3.67 -86.38 ----- 13.6 11.3 301.6 13.4 17.0 -23.2 16.7 -21.1 -999.0 -999.0 18.1 -21.3
2026-04-15T17:33:44.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:33:44.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:33:44.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.648398
2026-04-15T17:33:44.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:33:44.969 [DEBUG] [Thread-22959] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:33:44.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:33:44.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:33:44.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:33:44.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:33:44.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:33:08', tmtdew=7.89239, humidity=58.7306, cloud=0.0, wind=13.1818, temperature=13.4256, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:33:41.587', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:33:45.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:33:45.228 [DEBUG] [Thread-22962] [transport.py] [_log()] starting thread (client mode): 0xf1351300
2026-04-15T17:33:45.228 [DEBUG] [Thread-22962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:33:45.243 [DEBUG] [Thread-22962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:33:45.243 [INFO] [Thread-22962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:33:45.250 [DEBUG] [Thread-22962] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:33:45.250 [DEBUG] [Thread-22962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:33:45.250 [DEBUG] [Thread-22962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:33:45.250 [DEBUG] [Thread-22962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:33:45.250 [DEBUG] [Thread-22962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:33:45.250 [DEBUG] [Thread-22962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:33:45.250 [DEBUG] [Thread-22962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:33:45.251 [DEBUG] [Thread-22962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:33:45.251 [DEBUG] [Thread-22962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:33:45.251 [DEBUG] [Thread-22962] [transport.py] [_log()] client lang: <none>
2026-04-15T17:33:45.251 [DEBUG] [Thread-22962] [transport.py] [_log()] server lang: <none>
2026-04-15T17:33:45.251 [DEBUG] [Thread-22962] [transport.py] [_log()] kex follows: False
2026-04-15T17:33:45.251 [DEBUG] [Thread-22962] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:33:45.251 [DEBUG] [Thread-22962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:33:45.251 [DEBUG] [Thread-22962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:33:45.251 [DEBUG] [Thread-22962] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:33:45.251 [DEBUG] [Thread-22962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:33:45.251 [DEBUG] [Thread-22962] [transport.py] [_log()] Compression: none
2026-04-15T17:33:45.252 [DEBUG] [Thread-22962] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:33:45.311 [DEBUG] [Thread-22962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:33:45.312 [DEBUG] [Thread-22962] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:33:45.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:33:45.312 [DEBUG] [Thread-22962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:33:45.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:33:45.368 [DEBUG] [Thread-22962] [transport.py] [_log()] userauth is OK
2026-04-15T17:33:45.368 [DEBUG] [Thread-22962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:33:45.369 [DEBUG] [Thread-22962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:33:45.369 [DEBUG] [Thread-22962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:33:45.369 [DEBUG] [Thread-22962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:33:45.394 [INFO] [Thread-22962] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:33:45.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:33:45.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:33:46.225 [DEBUG] [Thread-22962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:33:46.225 [DEBUG] [Thread-22962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:33:46.272 [DEBUG] [Thread-22962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:33:46.273 [DEBUG] [Thread-22962] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:33:46.281 [DEBUG] [Thread-22962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:33:46.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:33:46.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')
2026-04-15T17:33:46.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
2026-04-15T17:33:46.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:33:46.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:33:46.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:33:46.313 [DEBUG] [Thread-22962] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:33:52.323 [DEBUG] [Thread-22964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:34:07.367 [DEBUG] [Thread-22965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:34:16.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:34:16.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:34:16.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T17:34:17.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 33, 43), 8.33367, 57.0575, 0.0, 14.5742, 13.6513, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:34:17.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:33:43
2026-04-15T17:34:18.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:34:18.481 [DEBUG] [Thread-22966] [transport.py] [_log()] starting thread (client mode): 0xf13fcbe0
2026-04-15T17:34:18.481 [DEBUG] [Thread-22966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:34:18.500 [DEBUG] [Thread-22966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:34:18.500 [INFO] [Thread-22966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:34:18.503 [DEBUG] [Thread-22966] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:34:18.503 [DEBUG] [Thread-22966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:34:18.503 [DEBUG] [Thread-22966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:34:18.503 [DEBUG] [Thread-22966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:34:18.503 [DEBUG] [Thread-22966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:34:18.503 [DEBUG] [Thread-22966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:34:18.504 [DEBUG] [Thread-22966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:34:18.504 [DEBUG] [Thread-22966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:34:18.504 [DEBUG] [Thread-22966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:34:18.504 [DEBUG] [Thread-22966] [transport.py] [_log()] client lang: <none>
2026-04-15T17:34:18.504 [DEBUG] [Thread-22966] [transport.py] [_log()] server lang: <none>
2026-04-15T17:34:18.504 [DEBUG] [Thread-22966] [transport.py] [_log()] kex follows: False
2026-04-15T17:34:18.504 [DEBUG] [Thread-22966] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:34:18.504 [DEBUG] [Thread-22966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:34:18.504 [DEBUG] [Thread-22966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:34:18.504 [DEBUG] [Thread-22966] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:34:18.504 [DEBUG] [Thread-22966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:34:18.505 [DEBUG] [Thread-22966] [transport.py] [_log()] Compression: none
2026-04-15T17:34:18.505 [DEBUG] [Thread-22966] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:34:18.513 [DEBUG] [Thread-22966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:34:18.513 [DEBUG] [Thread-22966] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:34:18.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:34:18.514 [DEBUG] [Thread-22966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:34:18.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:34:18.515 [DEBUG] [Thread-22966] [transport.py] [_log()] userauth is OK
2026-04-15T17:34:18.515 [DEBUG] [Thread-22966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:34:18.515 [DEBUG] [Thread-22966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:34:18.515 [DEBUG] [Thread-22966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:34:18.515 [DEBUG] [Thread-22966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:34:18.531 [INFO] [Thread-22966] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:34:18.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:34:19.093 [DEBUG] [Thread-22966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:34:19.093 [DEBUG] [Thread-22966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:34:19.093 [DEBUG] [Thread-22966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:34:19.134 [DEBUG] [Thread-22966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:34:19.134 [DEBUG] [Thread-22966] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:34:19.136 [DEBUG] [Thread-22966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:34:19.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:34:19.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:34:19.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:34:19.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:34:19.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:34:19.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:34:19.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:34:19.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:34:19.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:34:19.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.648746 -999.00  +13.70  16.75     67   +7.80 1 2 1 1 1   887    0 3.68 -86.49 ----- 16.5 16.8 315.4 20.1 17.0 -23.6 16.8 -20.9 17.5 -18.2 18.1 -22.0
2026-04-15T17:34:19.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:34:19.158 [DEBUG] [Thread-22966] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:34:19.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:34:19.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.648746
2026-04-15T17:34:19.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:34:19.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:34:19.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:34:19.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:34:19.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:34:19.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:33:43', tmtdew=8.33367, humidity=57.0575, cloud=0.0, wind=14.5742, temperature=13.6513, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:34:11.654', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:34:19.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:34:19.416 [DEBUG] [Thread-22969] [transport.py] [_log()] starting thread (client mode): 0xf13ffd90
2026-04-15T17:34:19.416 [DEBUG] [Thread-22969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:34:19.434 [DEBUG] [Thread-22969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:34:19.435 [INFO] [Thread-22969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:34:19.442 [DEBUG] [Thread-22969] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:34:19.442 [DEBUG] [Thread-22969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:34:19.442 [DEBUG] [Thread-22969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:34:19.442 [DEBUG] [Thread-22969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:34:19.442 [DEBUG] [Thread-22969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:34:19.442 [DEBUG] [Thread-22969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:34:19.442 [DEBUG] [Thread-22969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:34:19.442 [DEBUG] [Thread-22969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:34:19.442 [DEBUG] [Thread-22969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:34:19.442 [DEBUG] [Thread-22969] [transport.py] [_log()] client lang: <none>
2026-04-15T17:34:19.442 [DEBUG] [Thread-22969] [transport.py] [_log()] server lang: <none>
2026-04-15T17:34:19.442 [DEBUG] [Thread-22969] [transport.py] [_log()] kex follows: False
2026-04-15T17:34:19.442 [DEBUG] [Thread-22969] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:34:19.442 [DEBUG] [Thread-22969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:34:19.442 [DEBUG] [Thread-22969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:34:19.443 [DEBUG] [Thread-22969] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:34:19.443 [DEBUG] [Thread-22969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:34:19.443 [DEBUG] [Thread-22969] [transport.py] [_log()] Compression: none
2026-04-15T17:34:19.443 [DEBUG] [Thread-22969] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:34:19.499 [DEBUG] [Thread-22969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:34:19.499 [DEBUG] [Thread-22969] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:34:19.500 [DEBUG] [Thread-22969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:34:19.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:34:19.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:34:19.556 [DEBUG] [Thread-22969] [transport.py] [_log()] userauth is OK
2026-04-15T17:34:19.556 [DEBUG] [Thread-22969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:34:19.556 [DEBUG] [Thread-22969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:34:19.557 [DEBUG] [Thread-22969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:34:19.557 [DEBUG] [Thread-22969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:34:19.582 [INFO] [Thread-22969] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:34:19.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:34:19.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:34:20.348 [DEBUG] [Thread-22969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:34:20.348 [DEBUG] [Thread-22969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:34:20.404 [DEBUG] [Thread-22969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:34:20.404 [DEBUG] [Thread-22969] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:34:20.413 [DEBUG] [Thread-22969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:34:20.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:34:20.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')
2026-04-15T17:34:20.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
2026-04-15T17:34:20.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:34:20.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:34:20.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:34:20.448 [DEBUG] [Thread-22969] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:34:22.399 [DEBUG] [Thread-22971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:34:29.690 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:34:29.692 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:34:37.444 [DEBUG] [Thread-22972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:34:43.624 [DEBUG] [Thread-22973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:34:50.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:34:50.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:34: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
2026-04-15T17:34:51.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 34, 18), 7.44763, 60.6222, 0.0, 15.6514, 13.5588, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:34:51.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:34:18
2026-04-15T17:34:52.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:34:52.474 [DEBUG] [Thread-22974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:34:52.558 [DEBUG] [Thread-22975] [transport.py] [_log()] starting thread (client mode): 0xf13c8fd0
2026-04-15T17:34:52.558 [DEBUG] [Thread-22975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:34:52.578 [DEBUG] [Thread-22975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:34:52.578 [INFO] [Thread-22975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:34:52.581 [DEBUG] [Thread-22975] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:34:52.581 [DEBUG] [Thread-22975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:34:52.581 [DEBUG] [Thread-22975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:34:52.581 [DEBUG] [Thread-22975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:34:52.581 [DEBUG] [Thread-22975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:34:52.581 [DEBUG] [Thread-22975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:34:52.581 [DEBUG] [Thread-22975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:34:52.581 [DEBUG] [Thread-22975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:34:52.582 [DEBUG] [Thread-22975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:34:52.582 [DEBUG] [Thread-22975] [transport.py] [_log()] client lang: <none>
2026-04-15T17:34:52.582 [DEBUG] [Thread-22975] [transport.py] [_log()] server lang: <none>
2026-04-15T17:34:52.582 [DEBUG] [Thread-22975] [transport.py] [_log()] kex follows: False
2026-04-15T17:34:52.582 [DEBUG] [Thread-22975] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:34:52.582 [DEBUG] [Thread-22975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:34:52.582 [DEBUG] [Thread-22975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:34:52.582 [DEBUG] [Thread-22975] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:34:52.582 [DEBUG] [Thread-22975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:34:52.582 [DEBUG] [Thread-22975] [transport.py] [_log()] Compression: none
2026-04-15T17:34:52.583 [DEBUG] [Thread-22975] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:34:52.599 [DEBUG] [Thread-22975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:34:52.599 [DEBUG] [Thread-22975] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:34:52.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:34:52.600 [DEBUG] [Thread-22975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:34:52.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:34:52.601 [DEBUG] [Thread-22975] [transport.py] [_log()] userauth is OK
2026-04-15T17:34:52.601 [DEBUG] [Thread-22975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:34:52.601 [DEBUG] [Thread-22975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:34:52.601 [DEBUG] [Thread-22975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:34:52.601 [DEBUG] [Thread-22975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:34:52.625 [INFO] [Thread-22975] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:34:52.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:34:53.241 [DEBUG] [Thread-22975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:34:53.242 [DEBUG] [Thread-22975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:34:53.243 [DEBUG] [Thread-22975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:34:53.282 [DEBUG] [Thread-22975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:34:53.282 [DEBUG] [Thread-22975] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:34:53.285 [DEBUG] [Thread-22975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:34:53.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:34:53.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:34:53.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:34:53.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:34:53.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:34:53.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:34:53.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:34:53.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:34:53.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:34:53.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.649093 -999.00  +13.40  15.78     67   +7.50 1 2 1 1 1   887    0 3.91 -78.03 ----- 17.6 15.8 333.4 21.1 17.0 -23.9 16.7 -21.6 17.4 -19.4 17.9 -22.7
2026-04-15T17:34:53.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:34:53.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:34:53.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.649093
2026-04-15T17:34:53.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:34:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:34:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:34:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:34:53.308 [DEBUG] [Thread-22975] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:34:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:34:53.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:34:18', tmtdew=7.44763, humidity=60.6222, cloud=0.0, wind=15.6514, temperature=13.5588, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:34:41.635', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:34:53.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:34:53.567 [DEBUG] [Thread-22978] [transport.py] [_log()] starting thread (client mode): 0xee91ed40
2026-04-15T17:34:53.567 [DEBUG] [Thread-22978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:34:53.584 [DEBUG] [Thread-22978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:34:53.584 [INFO] [Thread-22978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:34:53.591 [DEBUG] [Thread-22978] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:34:53.591 [DEBUG] [Thread-22978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:34:53.592 [DEBUG] [Thread-22978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:34:53.592 [DEBUG] [Thread-22978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:34:53.592 [DEBUG] [Thread-22978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:34:53.592 [DEBUG] [Thread-22978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:34:53.592 [DEBUG] [Thread-22978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:34:53.592 [DEBUG] [Thread-22978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:34:53.592 [DEBUG] [Thread-22978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:34:53.592 [DEBUG] [Thread-22978] [transport.py] [_log()] client lang: <none>
2026-04-15T17:34:53.592 [DEBUG] [Thread-22978] [transport.py] [_log()] server lang: <none>
2026-04-15T17:34:53.592 [DEBUG] [Thread-22978] [transport.py] [_log()] kex follows: False
2026-04-15T17:34:53.592 [DEBUG] [Thread-22978] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:34:53.592 [DEBUG] [Thread-22978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:34:53.593 [DEBUG] [Thread-22978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:34:53.593 [DEBUG] [Thread-22978] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:34:53.593 [DEBUG] [Thread-22978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:34:53.593 [DEBUG] [Thread-22978] [transport.py] [_log()] Compression: none
2026-04-15T17:34:53.593 [DEBUG] [Thread-22978] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:34:53.651 [DEBUG] [Thread-22978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:34:53.651 [DEBUG] [Thread-22978] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:34:53.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:34:53.652 [DEBUG] [Thread-22978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:34:53.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:34:53.707 [DEBUG] [Thread-22978] [transport.py] [_log()] userauth is OK
2026-04-15T17:34:53.707 [DEBUG] [Thread-22978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:34:53.707 [DEBUG] [Thread-22978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:34:53.708 [DEBUG] [Thread-22978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:34:53.708 [DEBUG] [Thread-22978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:34:53.725 [INFO] [Thread-22978] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:34:53.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:34:53.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:34:54.536 [DEBUG] [Thread-22978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:34:54.536 [DEBUG] [Thread-22978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:34:54.584 [DEBUG] [Thread-22978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:34:54.584 [DEBUG] [Thread-22978] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:34:54.593 [DEBUG] [Thread-22978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:34:54.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:34:54.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')
2026-04-15T17:34:54.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
2026-04-15T17:34:54.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:34:54.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:34:54.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:34:54.628 [DEBUG] [Thread-22978] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:35:07.504 [DEBUG] [Thread-22980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:35:22.549 [DEBUG] [Thread-22981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:35:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:35:24.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:35:24.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
2026-04-15T17:35:25.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 34, 54), 7.66473, 59.7415, 0.0, 18.702, 13.5519, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:35:25.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:34:54
2026-04-15T17:35:26.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:35:26.696 [DEBUG] [Thread-22982] [transport.py] [_log()] starting thread (client mode): 0xf13c9c60
2026-04-15T17:35:26.696 [DEBUG] [Thread-22982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:35:26.716 [DEBUG] [Thread-22982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:35:26.716 [INFO] [Thread-22982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:35:26.719 [DEBUG] [Thread-22982] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:35:26.720 [DEBUG] [Thread-22982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:35:26.720 [DEBUG] [Thread-22982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:35:26.720 [DEBUG] [Thread-22982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:35:26.720 [DEBUG] [Thread-22982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:35:26.720 [DEBUG] [Thread-22982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:35:26.720 [DEBUG] [Thread-22982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:35:26.720 [DEBUG] [Thread-22982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:35:26.720 [DEBUG] [Thread-22982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:35:26.720 [DEBUG] [Thread-22982] [transport.py] [_log()] client lang: <none>
2026-04-15T17:35:26.720 [DEBUG] [Thread-22982] [transport.py] [_log()] server lang: <none>
2026-04-15T17:35:26.720 [DEBUG] [Thread-22982] [transport.py] [_log()] kex follows: False
2026-04-15T17:35:26.721 [DEBUG] [Thread-22982] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:35:26.721 [DEBUG] [Thread-22982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:35:26.721 [DEBUG] [Thread-22982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:35:26.721 [DEBUG] [Thread-22982] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:35:26.721 [DEBUG] [Thread-22982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:35:26.721 [DEBUG] [Thread-22982] [transport.py] [_log()] Compression: none
2026-04-15T17:35:26.721 [DEBUG] [Thread-22982] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:35:26.738 [DEBUG] [Thread-22982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:35:26.739 [DEBUG] [Thread-22982] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:35:26.739 [DEBUG] [Thread-22982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:35:26.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:35:26.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:35:26.781 [DEBUG] [Thread-22982] [transport.py] [_log()] userauth is OK
2026-04-15T17:35:26.781 [DEBUG] [Thread-22982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:35:26.781 [DEBUG] [Thread-22982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:35:26.782 [DEBUG] [Thread-22982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:35:26.782 [DEBUG] [Thread-22982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:35:26.807 [INFO] [Thread-22982] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:35:26.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:35:27.412 [DEBUG] [Thread-22982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:35:27.413 [DEBUG] [Thread-22982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:35:27.413 [DEBUG] [Thread-22982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:35:27.453 [DEBUG] [Thread-22982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:35:27.453 [DEBUG] [Thread-22982] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:35:27.456 [DEBUG] [Thread-22982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:35:27.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:35:27.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:35:27.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:35:27.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:35:27.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:35:27.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:35:27.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:35:27.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:35:27.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:35:27.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.649440 -999.00  +13.20  12.77     68   +7.60 1 2 1 1 1   887    0 3.97 -79.56 ----- 11.0 12.8 310.4 20.5 16.8 -23.4 16.6 -21.2 17.2 -18.7 17.7 -22.8
2026-04-15T17:35:27.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:35:27.474 [DEBUG] [Thread-22982] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:35:27.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:35:27.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.649440
2026-04-15T17:35:27.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:35:27.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:35:27.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:35:27.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:35:27.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:35:27.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:34:54', tmtdew=7.66473, humidity=59.7415, cloud=0.0, wind=18.702, temperature=13.5519, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:35:11.616', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:35:27.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:35:27.735 [DEBUG] [Thread-22985] [transport.py] [_log()] starting thread (client mode): 0xf13e2350
2026-04-15T17:35:27.736 [DEBUG] [Thread-22985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:35:27.750 [DEBUG] [Thread-22985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:35:27.750 [INFO] [Thread-22985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:35:27.757 [DEBUG] [Thread-22985] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:35:27.757 [DEBUG] [Thread-22985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:35:27.757 [DEBUG] [Thread-22985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:35:27.758 [DEBUG] [Thread-22985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:35:27.758 [DEBUG] [Thread-22985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:35:27.758 [DEBUG] [Thread-22985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:35:27.758 [DEBUG] [Thread-22985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:35:27.758 [DEBUG] [Thread-22985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:35:27.758 [DEBUG] [Thread-22985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:35:27.758 [DEBUG] [Thread-22985] [transport.py] [_log()] client lang: <none>
2026-04-15T17:35:27.758 [DEBUG] [Thread-22985] [transport.py] [_log()] server lang: <none>
2026-04-15T17:35:27.758 [DEBUG] [Thread-22985] [transport.py] [_log()] kex follows: False
2026-04-15T17:35:27.758 [DEBUG] [Thread-22985] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:35:27.758 [DEBUG] [Thread-22985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:35:27.758 [DEBUG] [Thread-22985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:35:27.758 [DEBUG] [Thread-22985] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:35:27.759 [DEBUG] [Thread-22985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:35:27.759 [DEBUG] [Thread-22985] [transport.py] [_log()] Compression: none
2026-04-15T17:35:27.759 [DEBUG] [Thread-22985] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:35:27.814 [DEBUG] [Thread-22985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:35:27.815 [DEBUG] [Thread-22985] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:35:27.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:35:27.816 [DEBUG] [Thread-22985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:35:27.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:35:27.871 [DEBUG] [Thread-22985] [transport.py] [_log()] userauth is OK
2026-04-15T17:35:27.871 [DEBUG] [Thread-22985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:35:27.871 [DEBUG] [Thread-22985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:35:27.871 [DEBUG] [Thread-22985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:35:27.872 [DEBUG] [Thread-22985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:35:27.889 [INFO] [Thread-22985] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:35:27.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:35:27.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:35:28.787 [DEBUG] [Thread-22985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:35:28.787 [DEBUG] [Thread-22985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:35:28.835 [DEBUG] [Thread-22985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:35:28.835 [DEBUG] [Thread-22985] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:35:28.844 [DEBUG] [Thread-22985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:35:28.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:35:28.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')
2026-04-15T17:35:28.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
2026-04-15T17:35:28.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:35:28.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:35:28.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:35:28.877 [DEBUG] [Thread-22985] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:35:29.830 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:35:29.832 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:35:37.580 [DEBUG] [Thread-22987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:35:43.729 [DEBUG] [Thread-22988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:35:52.626 [DEBUG] [Thread-22989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:35:58.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:35:58.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:35:58.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
2026-04-15T17:36:00.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 35, 29), 7.36352, 60.7382, 0.0, 16.4628, 13.3094, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:36:00.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:35:29
2026-04-15T17:36:00.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:36:01.086 [DEBUG] [Thread-22990] [transport.py] [_log()] starting thread (client mode): 0xf1331810
2026-04-15T17:36:01.087 [DEBUG] [Thread-22990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:36:01.098 [DEBUG] [Thread-22990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:36:01.099 [INFO] [Thread-22990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:36:01.100 [DEBUG] [Thread-22990] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:36:01.100 [DEBUG] [Thread-22990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] client lang: <none>
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] server lang: <none>
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] kex follows: False
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] Compression: none
2026-04-15T17:36:01.101 [DEBUG] [Thread-22990] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:36:01.115 [DEBUG] [Thread-22990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:36:01.115 [DEBUG] [Thread-22990] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:36:01.115 [DEBUG] [Thread-22990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:36:01.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:36:01.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:36:01.116 [DEBUG] [Thread-22990] [transport.py] [_log()] userauth is OK
2026-04-15T17:36:01.116 [DEBUG] [Thread-22990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:36:01.116 [DEBUG] [Thread-22990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:36:01.116 [DEBUG] [Thread-22990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:36:01.117 [DEBUG] [Thread-22990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:36:01.130 [INFO] [Thread-22990] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:36:01.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:36:01.748 [DEBUG] [Thread-22990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:36:01.748 [DEBUG] [Thread-22990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:36:01.749 [DEBUG] [Thread-22990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:36:01.789 [DEBUG] [Thread-22990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:36:01.790 [DEBUG] [Thread-22990] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:36:01.792 [DEBUG] [Thread-22990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:36:01.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:36:01.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:36:01.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:36:01.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:36:01.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:36:01.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:36:01.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:36:01.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:36:01.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:36:01.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.649787 -999.00  +13.30  15.83     68   +7.60 1 2 1 1 1   887    0 4.03 -69.38 ----- 17.1 15.8 324.8 18.2 16.8 -23.5 16.6 -20.8 17.1 -19.0 17.6 -23.0
2026-04-15T17:36:01.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:36:01.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:36:01.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.649787
2026-04-15T17:36:01.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:36:01.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:36:01.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:36:01.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:36:01.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:36:01.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:35:29', tmtdew=7.36352, humidity=60.7382, cloud=0.0, wind=16.4628, temperature=13.3094, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:35:41.597', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:36:01.811 [DEBUG] [Thread-22990] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:36:02.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:36:02.023 [DEBUG] [Thread-22993] [transport.py] [_log()] starting thread (client mode): 0xf13c8700
2026-04-15T17:36:02.023 [DEBUG] [Thread-22993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:36:02.038 [DEBUG] [Thread-22993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:36:02.038 [INFO] [Thread-22993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:36:02.045 [DEBUG] [Thread-22993] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:36:02.045 [DEBUG] [Thread-22993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:36:02.045 [DEBUG] [Thread-22993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:36:02.045 [DEBUG] [Thread-22993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:36:02.045 [DEBUG] [Thread-22993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:36:02.045 [DEBUG] [Thread-22993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:36:02.045 [DEBUG] [Thread-22993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:36:02.045 [DEBUG] [Thread-22993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:36:02.045 [DEBUG] [Thread-22993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:36:02.046 [DEBUG] [Thread-22993] [transport.py] [_log()] client lang: <none>
2026-04-15T17:36:02.046 [DEBUG] [Thread-22993] [transport.py] [_log()] server lang: <none>
2026-04-15T17:36:02.046 [DEBUG] [Thread-22993] [transport.py] [_log()] kex follows: False
2026-04-15T17:36:02.046 [DEBUG] [Thread-22993] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:36:02.046 [DEBUG] [Thread-22993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:36:02.046 [DEBUG] [Thread-22993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:36:02.046 [DEBUG] [Thread-22993] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:36:02.046 [DEBUG] [Thread-22993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:36:02.046 [DEBUG] [Thread-22993] [transport.py] [_log()] Compression: none
2026-04-15T17:36:02.046 [DEBUG] [Thread-22993] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:36:02.103 [DEBUG] [Thread-22993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:36:02.103 [DEBUG] [Thread-22993] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:36:02.104 [DEBUG] [Thread-22993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:36:02.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:36:02.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:36:02.159 [DEBUG] [Thread-22993] [transport.py] [_log()] userauth is OK
2026-04-15T17:36:02.159 [DEBUG] [Thread-22993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:36:02.159 [DEBUG] [Thread-22993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:36:02.159 [DEBUG] [Thread-22993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:36:02.159 [DEBUG] [Thread-22993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:36:02.181 [INFO] [Thread-22993] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:36:02.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:36:02.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:36:03.057 [DEBUG] [Thread-22993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:36:03.057 [DEBUG] [Thread-22993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:36:03.105 [DEBUG] [Thread-22993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:36:03.105 [DEBUG] [Thread-22993] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:36:03.114 [DEBUG] [Thread-22993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:36:03.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:36:03.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')
2026-04-15T17:36:03.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
2026-04-15T17:36:03.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:36:03.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:36:03.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:36:03.151 [DEBUG] [Thread-22993] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:36:07.659 [DEBUG] [Thread-22995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:36:22.704 [DEBUG] [Thread-22996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:36:29.975 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:36:29.976 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:36:33.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:36:33.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:36:33.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
2026-04-15T17:36:34.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 36, 5), 7.39577, 60.6057, 0.0, 14.9634, 13.3094, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:36:34.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:36:05
2026-04-15T17:36:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:36:35.301 [DEBUG] [Thread-22997] [transport.py] [_log()] starting thread (client mode): 0xee9af670
2026-04-15T17:36:35.302 [DEBUG] [Thread-22997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:36:35.320 [DEBUG] [Thread-22997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:36:35.320 [INFO] [Thread-22997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:36:35.323 [DEBUG] [Thread-22997] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:36:35.323 [DEBUG] [Thread-22997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:36:35.323 [DEBUG] [Thread-22997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:36:35.324 [DEBUG] [Thread-22997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:36:35.324 [DEBUG] [Thread-22997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:36:35.324 [DEBUG] [Thread-22997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:36:35.324 [DEBUG] [Thread-22997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:36:35.324 [DEBUG] [Thread-22997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:36:35.324 [DEBUG] [Thread-22997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:36:35.324 [DEBUG] [Thread-22997] [transport.py] [_log()] client lang: <none>
2026-04-15T17:36:35.324 [DEBUG] [Thread-22997] [transport.py] [_log()] server lang: <none>
2026-04-15T17:36:35.324 [DEBUG] [Thread-22997] [transport.py] [_log()] kex follows: False
2026-04-15T17:36:35.324 [DEBUG] [Thread-22997] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:36:35.324 [DEBUG] [Thread-22997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:36:35.324 [DEBUG] [Thread-22997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:36:35.325 [DEBUG] [Thread-22997] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:36:35.325 [DEBUG] [Thread-22997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:36:35.325 [DEBUG] [Thread-22997] [transport.py] [_log()] Compression: none
2026-04-15T17:36:35.325 [DEBUG] [Thread-22997] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:36:35.338 [DEBUG] [Thread-22997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:36:35.338 [DEBUG] [Thread-22997] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:36:35.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:36:35.339 [DEBUG] [Thread-22997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:36:35.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:36:35.339 [DEBUG] [Thread-22997] [transport.py] [_log()] userauth is OK
2026-04-15T17:36:35.340 [DEBUG] [Thread-22997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:36:35.340 [DEBUG] [Thread-22997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:36:35.340 [DEBUG] [Thread-22997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:36:35.340 [DEBUG] [Thread-22997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:36:35.357 [INFO] [Thread-22997] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:36:35.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:36:35.953 [DEBUG] [Thread-22997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:36:35.954 [DEBUG] [Thread-22997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:36:35.954 [DEBUG] [Thread-22997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:36:35.994 [DEBUG] [Thread-22997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:36:35.994 [DEBUG] [Thread-22997] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:36:35.997 [DEBUG] [Thread-22997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:36:36.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:36:36.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:36:36.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:36:36.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:36:36.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:36:36.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:36:36.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:36:36.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:36:36.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:36:36.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.650135 -999.00  +13.20  11.59     68   +7.50 1 2 1 1 1   887    0 4.17 -66.05 ----- 14.9 11.6 321.8 19.4 16.7 -23.5 16.6 -20.8 16.9 -19.6 17.4 -23.1
2026-04-15T17:36:36.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:36:36.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:36:36.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.650135
2026-04-15T17:36:36.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:36:36.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:36:36.024 [DEBUG] [Thread-22997] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:36:36.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:36:36.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:36:36.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:36:36.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:36:05', tmtdew=7.39577, humidity=60.6057, cloud=0.0, wind=14.9634, temperature=13.3094, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:36:11.664', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:36:36.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:36:36.292 [DEBUG] [Thread-23000] [transport.py] [_log()] starting thread (client mode): 0xee9acb50
2026-04-15T17:36:36.292 [DEBUG] [Thread-23000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:36:36.305 [DEBUG] [Thread-23000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:36:36.305 [INFO] [Thread-23000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:36:36.312 [DEBUG] [Thread-23000] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:36:36.312 [DEBUG] [Thread-23000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:36:36.312 [DEBUG] [Thread-23000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] client lang: <none>
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] server lang: <none>
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] kex follows: False
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] Compression: none
2026-04-15T17:36:36.313 [DEBUG] [Thread-23000] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:36:36.370 [DEBUG] [Thread-23000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:36:36.370 [DEBUG] [Thread-23000] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:36:36.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:36:36.371 [DEBUG] [Thread-23000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:36:36.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:36:36.431 [DEBUG] [Thread-23000] [transport.py] [_log()] userauth is OK
2026-04-15T17:36:36.431 [DEBUG] [Thread-23000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:36:36.431 [DEBUG] [Thread-23000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:36:36.431 [DEBUG] [Thread-23000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:36:36.431 [DEBUG] [Thread-23000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:36:36.449 [INFO] [Thread-23000] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:36:36.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:36:36.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:36:37.319 [DEBUG] [Thread-23000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:36:37.320 [DEBUG] [Thread-23000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:36:37.367 [DEBUG] [Thread-23000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:36:37.367 [DEBUG] [Thread-23000] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:36:37.376 [DEBUG] [Thread-23000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:36:37.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:36:37.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')
2026-04-15T17:36:37.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
2026-04-15T17:36:37.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:36:37.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:36:37.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:36:37.411 [DEBUG] [Thread-23000] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:36:37.736 [DEBUG] [Thread-23002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:36:43.825 [DEBUG] [Thread-23003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:36:52.783 [DEBUG] [Thread-23004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:37:07.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:37:07.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:37:07.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T17:37:07.816 [DEBUG] [Thread-23005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:37:08.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 36, 40), 7.89076, 58.8137, 0.0, 18.067, 13.552, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:37:08.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:36:40
2026-04-15T17:37:09.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:37:09.532 [DEBUG] [Thread-23006] [transport.py] [_log()] starting thread (client mode): 0xee9acd30
2026-04-15T17:37:09.532 [DEBUG] [Thread-23006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:37:09.553 [DEBUG] [Thread-23006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:37:09.553 [INFO] [Thread-23006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:37:09.556 [DEBUG] [Thread-23006] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:37:09.556 [DEBUG] [Thread-23006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:37:09.556 [DEBUG] [Thread-23006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:37:09.556 [DEBUG] [Thread-23006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:37:09.556 [DEBUG] [Thread-23006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:37:09.556 [DEBUG] [Thread-23006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:37:09.556 [DEBUG] [Thread-23006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:37:09.557 [DEBUG] [Thread-23006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:37:09.557 [DEBUG] [Thread-23006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:37:09.557 [DEBUG] [Thread-23006] [transport.py] [_log()] client lang: <none>
2026-04-15T17:37:09.557 [DEBUG] [Thread-23006] [transport.py] [_log()] server lang: <none>
2026-04-15T17:37:09.557 [DEBUG] [Thread-23006] [transport.py] [_log()] kex follows: False
2026-04-15T17:37:09.557 [DEBUG] [Thread-23006] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:37:09.557 [DEBUG] [Thread-23006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:37:09.557 [DEBUG] [Thread-23006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:37:09.557 [DEBUG] [Thread-23006] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:37:09.557 [DEBUG] [Thread-23006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:37:09.558 [DEBUG] [Thread-23006] [transport.py] [_log()] Compression: none
2026-04-15T17:37:09.558 [DEBUG] [Thread-23006] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:37:09.574 [DEBUG] [Thread-23006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:37:09.575 [DEBUG] [Thread-23006] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:37:09.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:37:09.576 [DEBUG] [Thread-23006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:37:09.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:37:09.577 [DEBUG] [Thread-23006] [transport.py] [_log()] userauth is OK
2026-04-15T17:37:09.577 [DEBUG] [Thread-23006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:37:09.577 [DEBUG] [Thread-23006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:37:09.577 [DEBUG] [Thread-23006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:37:09.577 [DEBUG] [Thread-23006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:37:09.603 [INFO] [Thread-23006] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:37:09.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:37:10.261 [DEBUG] [Thread-23006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:37:10.261 [DEBUG] [Thread-23006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:37:10.262 [DEBUG] [Thread-23006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:37:10.302 [DEBUG] [Thread-23006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:37:10.302 [DEBUG] [Thread-23006] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:37:10.305 [DEBUG] [Thread-23006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:37:10.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:37:10.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:37:10.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:37:10.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:37:10.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:37:10.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:37:10.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:37:10.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:37:10.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:37:10.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.650482 -999.00  +13.20  15.33     68   +7.50 1 2 1 1 1   887    0 4.31 -65.14 ----- 10.6 15.3 332.6 17.0 16.6 -23.6 16.6 -20.6 16.8 -19.4 17.2 -23.2
2026-04-15T17:37:10.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:37:10.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:37:10.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.650482
2026-04-15T17:37:10.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:37:10.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:37:10.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:37:10.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:37:10.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:37:10.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:36:40', tmtdew=7.89076, humidity=58.8137, cloud=0.0, wind=18.067, temperature=13.552, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:36:41.645', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:37:10.325 [DEBUG] [Thread-23006] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:37:10.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:37:10.551 [DEBUG] [Thread-23009] [transport.py] [_log()] starting thread (client mode): 0xee91eda0
2026-04-15T17:37:10.552 [DEBUG] [Thread-23009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:37:10.567 [DEBUG] [Thread-23009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:37:10.567 [INFO] [Thread-23009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:37:10.579 [DEBUG] [Thread-23009] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] client lang: <none>
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] server lang: <none>
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] kex follows: False
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:37:10.580 [DEBUG] [Thread-23009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:37:10.581 [DEBUG] [Thread-23009] [transport.py] [_log()] Compression: none
2026-04-15T17:37:10.581 [DEBUG] [Thread-23009] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:37:10.630 [DEBUG] [Thread-23009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:37:10.631 [DEBUG] [Thread-23009] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:37:10.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:37:10.631 [DEBUG] [Thread-23009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:37:10.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:37:10.687 [DEBUG] [Thread-23009] [transport.py] [_log()] userauth is OK
2026-04-15T17:37:10.687 [DEBUG] [Thread-23009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:37:10.688 [DEBUG] [Thread-23009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:37:10.688 [DEBUG] [Thread-23009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:37:10.688 [DEBUG] [Thread-23009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:37:10.713 [INFO] [Thread-23009] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:37:10.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:37:10.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:37:11.529 [DEBUG] [Thread-23009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:37:11.529 [DEBUG] [Thread-23009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:37:11.577 [DEBUG] [Thread-23009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:37:11.577 [DEBUG] [Thread-23009] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:37:11.586 [DEBUG] [Thread-23009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:37:11.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:37:11.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')
2026-04-15T17:37:11.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
2026-04-15T17:37:11.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:37:11.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:37:11.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:37:11.621 [DEBUG] [Thread-23009] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:37:22.847 [DEBUG] [Thread-23011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:37:30.115 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:37:30.116 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:37:37.891 [DEBUG] [Thread-23012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:37:41.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:37:41.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:37:41.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
2026-04-15T17:37:42.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 37, 17), 7.20546, 61.4701, 0.0, 15.7396, 13.1263, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:37:42.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:37:17
2026-04-15T17:37:43.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:37:43.728 [DEBUG] [Thread-23013] [transport.py] [_log()] starting thread (client mode): 0xf1337190
2026-04-15T17:37:43.728 [DEBUG] [Thread-23013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:37:43.748 [DEBUG] [Thread-23013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:37:43.748 [INFO] [Thread-23013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:37:43.751 [DEBUG] [Thread-23013] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:37:43.751 [DEBUG] [Thread-23013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:37:43.751 [DEBUG] [Thread-23013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:37:43.751 [DEBUG] [Thread-23013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:37:43.751 [DEBUG] [Thread-23013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:37:43.752 [DEBUG] [Thread-23013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:37:43.752 [DEBUG] [Thread-23013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:37:43.752 [DEBUG] [Thread-23013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:37:43.752 [DEBUG] [Thread-23013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:37:43.752 [DEBUG] [Thread-23013] [transport.py] [_log()] client lang: <none>
2026-04-15T17:37:43.752 [DEBUG] [Thread-23013] [transport.py] [_log()] server lang: <none>
2026-04-15T17:37:43.752 [DEBUG] [Thread-23013] [transport.py] [_log()] kex follows: False
2026-04-15T17:37:43.752 [DEBUG] [Thread-23013] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:37:43.752 [DEBUG] [Thread-23013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:37:43.752 [DEBUG] [Thread-23013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:37:43.752 [DEBUG] [Thread-23013] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:37:43.753 [DEBUG] [Thread-23013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:37:43.753 [DEBUG] [Thread-23013] [transport.py] [_log()] Compression: none
2026-04-15T17:37:43.753 [DEBUG] [Thread-23013] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:37:43.769 [DEBUG] [Thread-23013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:37:43.770 [DEBUG] [Thread-23013] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:37:43.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:37:43.770 [DEBUG] [Thread-23013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:37:43.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:37:43.813 [DEBUG] [Thread-23013] [transport.py] [_log()] userauth is OK
2026-04-15T17:37:43.813 [DEBUG] [Thread-23013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:37:43.813 [DEBUG] [Thread-23013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:37:43.813 [DEBUG] [Thread-23013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:37:43.814 [DEBUG] [Thread-23013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:37:43.850 [INFO] [Thread-23013] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:37:43.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:37:43.916 [DEBUG] [Thread-23015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:37:44.491 [DEBUG] [Thread-23013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:37:44.491 [DEBUG] [Thread-23013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:37:44.492 [DEBUG] [Thread-23013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:37:44.532 [DEBUG] [Thread-23013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:37:44.532 [DEBUG] [Thread-23013] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:37:44.535 [DEBUG] [Thread-23013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:37:44.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:37:44.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:37:44.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:37:44.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:37:44.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:37:44.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:37:44.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:37:44.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:37:44.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:37:44.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.650829 -999.00  +13.20  18.63     68   +7.40 1 2 1 1 1   887    0 4.35 -59.08 ----- 15.1 18.6 309.2 20.2 16.6 -23.8 16.5 -20.5 16.6 -20.1 17.0 -23.6
2026-04-15T17:37:44.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:37:44.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:37:44.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.650829
2026-04-15T17:37:44.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:37:44.559 [DEBUG] [Thread-23013] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:37:44.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:37:44.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:37:44.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:37:44.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:37:44.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:37:17', tmtdew=7.20546, humidity=61.4701, cloud=0.0, wind=15.7396, temperature=13.1263, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:37:11.626', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:37:44.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:37:44.828 [DEBUG] [Thread-23017] [transport.py] [_log()] starting thread (client mode): 0xee90e950
2026-04-15T17:37:44.828 [DEBUG] [Thread-23017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:37:44.845 [DEBUG] [Thread-23017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:37:44.845 [INFO] [Thread-23017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:37:44.856 [DEBUG] [Thread-23017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:37:44.856 [DEBUG] [Thread-23017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:37:44.856 [DEBUG] [Thread-23017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:37:44.856 [DEBUG] [Thread-23017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:37:44.856 [DEBUG] [Thread-23017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:37:44.856 [DEBUG] [Thread-23017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:37:44.856 [DEBUG] [Thread-23017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:37:44.856 [DEBUG] [Thread-23017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:37:44.856 [DEBUG] [Thread-23017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:37:44.856 [DEBUG] [Thread-23017] [transport.py] [_log()] client lang: <none>
2026-04-15T17:37:44.857 [DEBUG] [Thread-23017] [transport.py] [_log()] server lang: <none>
2026-04-15T17:37:44.857 [DEBUG] [Thread-23017] [transport.py] [_log()] kex follows: False
2026-04-15T17:37:44.857 [DEBUG] [Thread-23017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:37:44.857 [DEBUG] [Thread-23017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:37:44.857 [DEBUG] [Thread-23017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:37:44.857 [DEBUG] [Thread-23017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:37:44.857 [DEBUG] [Thread-23017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:37:44.857 [DEBUG] [Thread-23017] [transport.py] [_log()] Compression: none
2026-04-15T17:37:44.857 [DEBUG] [Thread-23017] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:37:44.916 [DEBUG] [Thread-23017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:37:44.917 [DEBUG] [Thread-23017] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:37:44.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:37:44.917 [DEBUG] [Thread-23017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:37:44.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:37:44.979 [DEBUG] [Thread-23017] [transport.py] [_log()] userauth is OK
2026-04-15T17:37:44.979 [DEBUG] [Thread-23017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:37:44.979 [DEBUG] [Thread-23017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:37:44.979 [DEBUG] [Thread-23017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:37:44.980 [DEBUG] [Thread-23017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:37:45.008 [INFO] [Thread-23017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:37:45.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:37:45.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:37:45.846 [DEBUG] [Thread-23017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:37:45.846 [DEBUG] [Thread-23017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:37:45.895 [DEBUG] [Thread-23017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:37:45.895 [DEBUG] [Thread-23017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:37:45.908 [DEBUG] [Thread-23017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:37:45.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:37:45.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')
2026-04-15T17:37:45.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
2026-04-15T17:37:45.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:37:45.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:37:45.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:37:45.943 [DEBUG] [Thread-23017] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:37:52.923 [DEBUG] [Thread-23019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:38:07.967 [DEBUG] [Thread-23020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:38:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:38:15.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:38:15.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
2026-04-15T17:38:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 37, 54), 7.29488, 61.2331, 0.0, 16.5146, 13.3205, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:38:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:37:54
2026-04-15T17:38:17.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:38:18.070 [DEBUG] [Thread-23021] [transport.py] [_log()] starting thread (client mode): 0xf1337c40
2026-04-15T17:38:18.071 [DEBUG] [Thread-23021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:38:18.091 [DEBUG] [Thread-23021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:38:18.091 [INFO] [Thread-23021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:38:18.094 [DEBUG] [Thread-23021] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:38:18.094 [DEBUG] [Thread-23021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:38:18.094 [DEBUG] [Thread-23021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:38:18.094 [DEBUG] [Thread-23021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:38:18.094 [DEBUG] [Thread-23021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:38:18.095 [DEBUG] [Thread-23021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:38:18.095 [DEBUG] [Thread-23021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:38:18.095 [DEBUG] [Thread-23021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:38:18.095 [DEBUG] [Thread-23021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:38:18.095 [DEBUG] [Thread-23021] [transport.py] [_log()] client lang: <none>
2026-04-15T17:38:18.095 [DEBUG] [Thread-23021] [transport.py] [_log()] server lang: <none>
2026-04-15T17:38:18.095 [DEBUG] [Thread-23021] [transport.py] [_log()] kex follows: False
2026-04-15T17:38:18.095 [DEBUG] [Thread-23021] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:38:18.095 [DEBUG] [Thread-23021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:38:18.095 [DEBUG] [Thread-23021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:38:18.095 [DEBUG] [Thread-23021] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:38:18.095 [DEBUG] [Thread-23021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:38:18.096 [DEBUG] [Thread-23021] [transport.py] [_log()] Compression: none
2026-04-15T17:38:18.096 [DEBUG] [Thread-23021] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:38:18.112 [DEBUG] [Thread-23021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:38:18.112 [DEBUG] [Thread-23021] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:38:18.113 [DEBUG] [Thread-23021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:38:18.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:38:18.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:38:18.114 [DEBUG] [Thread-23021] [transport.py] [_log()] userauth is OK
2026-04-15T17:38:18.114 [DEBUG] [Thread-23021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:38:18.114 [DEBUG] [Thread-23021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:38:18.114 [DEBUG] [Thread-23021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:38:18.114 [DEBUG] [Thread-23021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:38:18.132 [INFO] [Thread-23021] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:38:18.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:38:18.771 [DEBUG] [Thread-23021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:38:18.772 [DEBUG] [Thread-23021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:38:18.772 [DEBUG] [Thread-23021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:38:18.812 [DEBUG] [Thread-23021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:38:18.812 [DEBUG] [Thread-23021] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:38:18.815 [DEBUG] [Thread-23021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:38:18.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:38:18.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:38:18.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:38:18.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:38:18.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:38:18.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:38:18.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:38:18.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:38:18.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:38:18.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.651176 -999.00  +13.10  14.45     69   +7.60 1 2 1 1 1   887    0 4.47 -56.70 ----- 12.1 14.4 324.4 16.4 16.4 -23.7 16.4 -20.9 16.5 -19.9 16.8 -23.8
2026-04-15T17:38:18.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:38:18.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:38:18.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.651176
2026-04-15T17:38:18.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:38:18.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:38:18.841 [DEBUG] [Thread-23021] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:38:18.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:38:18.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:38:18.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:38:18.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:37:54', tmtdew=7.29488, humidity=61.2331, cloud=0.0, wind=16.5146, temperature=13.3205, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:37:41.606', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:38:19.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:38:19.102 [DEBUG] [Thread-23024] [transport.py] [_log()] starting thread (client mode): 0xee91d4b0
2026-04-15T17:38:19.102 [DEBUG] [Thread-23024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:38:19.116 [DEBUG] [Thread-23024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:38:19.117 [INFO] [Thread-23024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:38:19.127 [DEBUG] [Thread-23024] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:38:19.127 [DEBUG] [Thread-23024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:38:19.127 [DEBUG] [Thread-23024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:38:19.127 [DEBUG] [Thread-23024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:38:19.127 [DEBUG] [Thread-23024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:38:19.127 [DEBUG] [Thread-23024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:38:19.127 [DEBUG] [Thread-23024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:38:19.127 [DEBUG] [Thread-23024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:38:19.127 [DEBUG] [Thread-23024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:38:19.128 [DEBUG] [Thread-23024] [transport.py] [_log()] client lang: <none>
2026-04-15T17:38:19.128 [DEBUG] [Thread-23024] [transport.py] [_log()] server lang: <none>
2026-04-15T17:38:19.128 [DEBUG] [Thread-23024] [transport.py] [_log()] kex follows: False
2026-04-15T17:38:19.128 [DEBUG] [Thread-23024] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:38:19.128 [DEBUG] [Thread-23024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:38:19.128 [DEBUG] [Thread-23024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:38:19.128 [DEBUG] [Thread-23024] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:38:19.128 [DEBUG] [Thread-23024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:38:19.128 [DEBUG] [Thread-23024] [transport.py] [_log()] Compression: none
2026-04-15T17:38:19.128 [DEBUG] [Thread-23024] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:38:19.181 [DEBUG] [Thread-23024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:38:19.181 [DEBUG] [Thread-23024] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:38:19.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:38:19.182 [DEBUG] [Thread-23024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:38:19.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:38:19.238 [DEBUG] [Thread-23024] [transport.py] [_log()] userauth is OK
2026-04-15T17:38:19.239 [DEBUG] [Thread-23024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:38:19.239 [DEBUG] [Thread-23024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:38:19.239 [DEBUG] [Thread-23024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:38:19.239 [DEBUG] [Thread-23024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:38:19.266 [INFO] [Thread-23024] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:38:19.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:38:19.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:38:20.027 [DEBUG] [Thread-23024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:38:20.027 [DEBUG] [Thread-23024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:38:20.078 [DEBUG] [Thread-23024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:38:20.079 [DEBUG] [Thread-23024] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:38:20.092 [DEBUG] [Thread-23024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:38:20.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:38:20.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')
2026-04-15T17:38:20.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
2026-04-15T17:38:20.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:38:20.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:38:20.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:38:20.133 [DEBUG] [Thread-23024] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:38:22.995 [DEBUG] [Thread-23026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:38:30.256 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:38:30.257 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:38:38.040 [DEBUG] [Thread-23027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:38:43.993 [DEBUG] [Thread-23028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:38:50.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:38:50.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:38:50.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
2026-04-15T17:38:51.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 38, 30), 6.89125, 62.8319, 0.0, 13.1288, 12.8609, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:38:51.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:38:30
2026-04-15T17:38:51.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:38:52.265 [DEBUG] [Thread-23029] [transport.py] [_log()] starting thread (client mode): 0xf13fc760
2026-04-15T17:38:52.265 [DEBUG] [Thread-23029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:38:52.284 [DEBUG] [Thread-23029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:38:52.284 [INFO] [Thread-23029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:38:52.288 [DEBUG] [Thread-23029] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:38:52.288 [DEBUG] [Thread-23029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:38:52.288 [DEBUG] [Thread-23029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:38:52.288 [DEBUG] [Thread-23029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:38:52.288 [DEBUG] [Thread-23029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:38:52.288 [DEBUG] [Thread-23029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:38:52.288 [DEBUG] [Thread-23029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:38:52.288 [DEBUG] [Thread-23029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:38:52.288 [DEBUG] [Thread-23029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:38:52.288 [DEBUG] [Thread-23029] [transport.py] [_log()] client lang: <none>
2026-04-15T17:38:52.289 [DEBUG] [Thread-23029] [transport.py] [_log()] server lang: <none>
2026-04-15T17:38:52.289 [DEBUG] [Thread-23029] [transport.py] [_log()] kex follows: False
2026-04-15T17:38:52.289 [DEBUG] [Thread-23029] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:38:52.289 [DEBUG] [Thread-23029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:38:52.289 [DEBUG] [Thread-23029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:38:52.289 [DEBUG] [Thread-23029] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:38:52.289 [DEBUG] [Thread-23029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:38:52.289 [DEBUG] [Thread-23029] [transport.py] [_log()] Compression: none
2026-04-15T17:38:52.289 [DEBUG] [Thread-23029] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:38:52.307 [DEBUG] [Thread-23029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:38:52.307 [DEBUG] [Thread-23029] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:38:52.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:38:52.308 [DEBUG] [Thread-23029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:38:52.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:38:52.309 [DEBUG] [Thread-23029] [transport.py] [_log()] userauth is OK
2026-04-15T17:38:52.310 [DEBUG] [Thread-23029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:38:52.310 [DEBUG] [Thread-23029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:38:52.310 [DEBUG] [Thread-23029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:38:52.310 [DEBUG] [Thread-23029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:38:52.347 [INFO] [Thread-23029] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:38:52.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:38:52.946 [DEBUG] [Thread-23029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:38:52.947 [DEBUG] [Thread-23029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:38:52.947 [DEBUG] [Thread-23029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:38:52.988 [DEBUG] [Thread-23029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:38:52.988 [DEBUG] [Thread-23029] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:38:52.991 [DEBUG] [Thread-23029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:38:53.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:38:53.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:38:53.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:38:53.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:38:53.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:38:53.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:38:53.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:38:53.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:38:53.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:38:53.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.651871 -999.00  +13.00  16.95     69   +7.50 1 2 1 1 1   887    0 4.06 -67.11 ----- 15.7 16.9 310.8 20.2 16.2 -24.5 16.3 -21.4 16.1 -21.0 16.5 -24.7
2026-04-15T17:38:53.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:38:53.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:38:53.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.651871
2026-04-15T17:38:53.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:38:53.016 [DEBUG] [Thread-23029] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:38:53.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:38:53.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:38:53.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:38:53.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:38:53.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:38:30', tmtdew=6.89125, humidity=62.8319, cloud=0.0, wind=13.1288, temperature=12.8609, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:38:41.654', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:38:53.072 [DEBUG] [Thread-23032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:38:53.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:38:53.276 [DEBUG] [Thread-23033] [transport.py] [_log()] starting thread (client mode): 0xee9bc910
2026-04-15T17:38:53.277 [DEBUG] [Thread-23033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:38:53.290 [DEBUG] [Thread-23033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:38:53.291 [INFO] [Thread-23033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:38:53.298 [DEBUG] [Thread-23033] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:38:53.298 [DEBUG] [Thread-23033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:38:53.298 [DEBUG] [Thread-23033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:38:53.298 [DEBUG] [Thread-23033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:38:53.298 [DEBUG] [Thread-23033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:38:53.298 [DEBUG] [Thread-23033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:38:53.298 [DEBUG] [Thread-23033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:38:53.298 [DEBUG] [Thread-23033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:38:53.299 [DEBUG] [Thread-23033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:38:53.299 [DEBUG] [Thread-23033] [transport.py] [_log()] client lang: <none>
2026-04-15T17:38:53.299 [DEBUG] [Thread-23033] [transport.py] [_log()] server lang: <none>
2026-04-15T17:38:53.299 [DEBUG] [Thread-23033] [transport.py] [_log()] kex follows: False
2026-04-15T17:38:53.299 [DEBUG] [Thread-23033] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:38:53.299 [DEBUG] [Thread-23033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:38:53.299 [DEBUG] [Thread-23033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:38:53.299 [DEBUG] [Thread-23033] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:38:53.299 [DEBUG] [Thread-23033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:38:53.299 [DEBUG] [Thread-23033] [transport.py] [_log()] Compression: none
2026-04-15T17:38:53.299 [DEBUG] [Thread-23033] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:38:53.353 [DEBUG] [Thread-23033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:38:53.354 [DEBUG] [Thread-23033] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:38:53.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:38:53.354 [DEBUG] [Thread-23033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:38:53.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:38:53.410 [DEBUG] [Thread-23033] [transport.py] [_log()] userauth is OK
2026-04-15T17:38:53.410 [DEBUG] [Thread-23033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:38:53.411 [DEBUG] [Thread-23033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:38:53.411 [DEBUG] [Thread-23033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:38:53.411 [DEBUG] [Thread-23033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:38:53.435 [INFO] [Thread-23033] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:38:53.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:38:53.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:38:54.258 [DEBUG] [Thread-23033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:38:54.258 [DEBUG] [Thread-23033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:38:54.306 [DEBUG] [Thread-23033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:38:54.306 [DEBUG] [Thread-23033] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:38:54.315 [DEBUG] [Thread-23033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:38:54.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:38:54.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')
2026-04-15T17:38:54.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
2026-04-15T17:38:54.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:38:54.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:38:54.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:38:54.349 [DEBUG] [Thread-23033] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:39:08.111 [DEBUG] [Thread-23035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:39:23.140 [DEBUG] [Thread-23036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:39:24.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:39:24.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:39:24.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T17:39:25.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 39, 5), 6.82162, 63.1301, 0.0, 12.8113, 12.8608, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:39:25.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:39:05
2026-04-15T17:39:26.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:39:26.516 [DEBUG] [Thread-23037] [transport.py] [_log()] starting thread (client mode): 0xf13c9990
2026-04-15T17:39:26.516 [DEBUG] [Thread-23037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:39:26.536 [DEBUG] [Thread-23037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:39:26.536 [INFO] [Thread-23037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:39:26.539 [DEBUG] [Thread-23037] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:39:26.539 [DEBUG] [Thread-23037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:39:26.539 [DEBUG] [Thread-23037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:39:26.539 [DEBUG] [Thread-23037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:39:26.539 [DEBUG] [Thread-23037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:39:26.539 [DEBUG] [Thread-23037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:39:26.539 [DEBUG] [Thread-23037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:39:26.540 [DEBUG] [Thread-23037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:39:26.540 [DEBUG] [Thread-23037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:39:26.540 [DEBUG] [Thread-23037] [transport.py] [_log()] client lang: <none>
2026-04-15T17:39:26.540 [DEBUG] [Thread-23037] [transport.py] [_log()] server lang: <none>
2026-04-15T17:39:26.540 [DEBUG] [Thread-23037] [transport.py] [_log()] kex follows: False
2026-04-15T17:39:26.540 [DEBUG] [Thread-23037] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:39:26.540 [DEBUG] [Thread-23037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:39:26.540 [DEBUG] [Thread-23037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:39:26.540 [DEBUG] [Thread-23037] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:39:26.540 [DEBUG] [Thread-23037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:39:26.541 [DEBUG] [Thread-23037] [transport.py] [_log()] Compression: none
2026-04-15T17:39:26.541 [DEBUG] [Thread-23037] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:39:26.559 [DEBUG] [Thread-23037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:39:26.559 [DEBUG] [Thread-23037] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:39:26.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:39:26.560 [DEBUG] [Thread-23037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:39:26.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:39:26.601 [DEBUG] [Thread-23037] [transport.py] [_log()] userauth is OK
2026-04-15T17:39:26.601 [DEBUG] [Thread-23037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:39:26.601 [DEBUG] [Thread-23037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:39:26.601 [DEBUG] [Thread-23037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:39:26.602 [DEBUG] [Thread-23037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:39:26.639 [INFO] [Thread-23037] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:39:26.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:39:27.247 [DEBUG] [Thread-23037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:39:27.247 [DEBUG] [Thread-23037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:39:27.248 [DEBUG] [Thread-23037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:39:27.288 [DEBUG] [Thread-23037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:39:27.288 [DEBUG] [Thread-23037] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:39:27.291 [DEBUG] [Thread-23037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:39:27.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:39:27.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:39:27.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:39:27.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:39:27.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:39:27.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:39:27.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:39:27.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:39:27.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:39:27.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.652218 -999.00  +12.90  15.93     69   +7.30 1 2 1 1 1   887    0 4.27 -62.67 ----- 13.5 15.9 305.8 18.1 16.2 -25.6 16.1 -22.0 16.0 -21.7 16.4 -24.9
2026-04-15T17:39:27.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:39:27.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:39:27.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.652218
2026-04-15T17:39:27.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:39:27.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:39:27.315 [DEBUG] [Thread-23037] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:39:27.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:39:27.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:39:27.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:39:27.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:39:05', tmtdew=6.82162, humidity=63.1301, cloud=0.0, wind=12.8113, temperature=12.8608, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:39:11.635', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:39:27.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:39:27.569 [DEBUG] [Thread-23040] [transport.py] [_log()] starting thread (client mode): 0xf13c93f0
2026-04-15T17:39:27.569 [DEBUG] [Thread-23040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:39:27.583 [DEBUG] [Thread-23040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:39:27.583 [INFO] [Thread-23040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:39:27.591 [DEBUG] [Thread-23040] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:39:27.591 [DEBUG] [Thread-23040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:39:27.591 [DEBUG] [Thread-23040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:39:27.591 [DEBUG] [Thread-23040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:39:27.591 [DEBUG] [Thread-23040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:39:27.591 [DEBUG] [Thread-23040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:39:27.591 [DEBUG] [Thread-23040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:39:27.591 [DEBUG] [Thread-23040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:39:27.591 [DEBUG] [Thread-23040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:39:27.591 [DEBUG] [Thread-23040] [transport.py] [_log()] client lang: <none>
2026-04-15T17:39:27.591 [DEBUG] [Thread-23040] [transport.py] [_log()] server lang: <none>
2026-04-15T17:39:27.592 [DEBUG] [Thread-23040] [transport.py] [_log()] kex follows: False
2026-04-15T17:39:27.592 [DEBUG] [Thread-23040] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:39:27.592 [DEBUG] [Thread-23040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:39:27.592 [DEBUG] [Thread-23040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:39:27.592 [DEBUG] [Thread-23040] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:39:27.592 [DEBUG] [Thread-23040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:39:27.592 [DEBUG] [Thread-23040] [transport.py] [_log()] Compression: none
2026-04-15T17:39:27.592 [DEBUG] [Thread-23040] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:39:27.649 [DEBUG] [Thread-23040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:39:27.649 [DEBUG] [Thread-23040] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:39:27.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:39:27.650 [DEBUG] [Thread-23040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:39:27.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:39:27.706 [DEBUG] [Thread-23040] [transport.py] [_log()] userauth is OK
2026-04-15T17:39:27.706 [DEBUG] [Thread-23040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:39:27.706 [DEBUG] [Thread-23040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:39:27.707 [DEBUG] [Thread-23040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:39:27.707 [DEBUG] [Thread-23040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:39:27.732 [INFO] [Thread-23040] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:39:27.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:39:27.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:39:28.540 [DEBUG] [Thread-23040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:39:28.541 [DEBUG] [Thread-23040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:39:28.589 [DEBUG] [Thread-23040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:39:28.589 [DEBUG] [Thread-23040] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:39:28.598 [DEBUG] [Thread-23040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:39:28.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:39:28.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')
2026-04-15T17:39:28.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
2026-04-15T17:39:28.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:39:28.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:39:28.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:39:28.632 [DEBUG] [Thread-23040] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:39:30.396 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:39:30.397 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:39:38.171 [DEBUG] [Thread-23042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:39:44.092 [DEBUG] [Thread-23043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:39:53.212 [DEBUG] [Thread-23044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:39:58.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:39:58.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:39:58.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
2026-04-15T17:39:59.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 39, 41), 6.90863, 62.8566, 0.0, 11.5402, 13.1879, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:39:59.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:39:41
2026-04-15T17:40:00.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:40:00.765 [DEBUG] [Thread-23045] [transport.py] [_log()] starting thread (client mode): 0xee90d960
2026-04-15T17:40:00.765 [DEBUG] [Thread-23045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:40:00.783 [DEBUG] [Thread-23045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:40:00.783 [INFO] [Thread-23045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:40:00.785 [DEBUG] [Thread-23045] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:40:00.785 [DEBUG] [Thread-23045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:40:00.785 [DEBUG] [Thread-23045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:40:00.785 [DEBUG] [Thread-23045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:40:00.785 [DEBUG] [Thread-23045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:40:00.785 [DEBUG] [Thread-23045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:40:00.785 [DEBUG] [Thread-23045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:40:00.785 [DEBUG] [Thread-23045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:40:00.785 [DEBUG] [Thread-23045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:40:00.786 [DEBUG] [Thread-23045] [transport.py] [_log()] client lang: <none>
2026-04-15T17:40:00.786 [DEBUG] [Thread-23045] [transport.py] [_log()] server lang: <none>
2026-04-15T17:40:00.786 [DEBUG] [Thread-23045] [transport.py] [_log()] kex follows: False
2026-04-15T17:40:00.786 [DEBUG] [Thread-23045] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:40:00.786 [DEBUG] [Thread-23045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:40:00.786 [DEBUG] [Thread-23045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:40:00.786 [DEBUG] [Thread-23045] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:40:00.786 [DEBUG] [Thread-23045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:40:00.786 [DEBUG] [Thread-23045] [transport.py] [_log()] Compression: none
2026-04-15T17:40:00.786 [DEBUG] [Thread-23045] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:40:00.795 [DEBUG] [Thread-23045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:40:00.795 [DEBUG] [Thread-23045] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:40:00.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:40:00.796 [DEBUG] [Thread-23045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:40:00.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:40:00.797 [DEBUG] [Thread-23045] [transport.py] [_log()] userauth is OK
2026-04-15T17:40:00.797 [DEBUG] [Thread-23045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:40:00.797 [DEBUG] [Thread-23045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:40:00.797 [DEBUG] [Thread-23045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:40:00.797 [DEBUG] [Thread-23045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:40:00.814 [INFO] [Thread-23045] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:40:00.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:40:01.436 [DEBUG] [Thread-23045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:40:01.437 [DEBUG] [Thread-23045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:40:01.437 [DEBUG] [Thread-23045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:40:01.477 [DEBUG] [Thread-23045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:40:01.477 [DEBUG] [Thread-23045] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:40:01.479 [DEBUG] [Thread-23045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:40:01.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:40:01.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:40:01.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:40:01.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:40:01.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:40:01.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:40:01.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:40:01.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:40:01.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:40:01.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.652565 -999.00  +12.90  14.57     69   +7.40 1 2 1 1 1   887    0 4.33 -59.10 ----- 13.4 14.6 314.6 18.6 16.1 -25.4 16.1 -22.5 15.9 -21.8 16.3 -25.4
2026-04-15T17:40:01.497 [DEBUG] [Thread-23045] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:40:01.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:40:01.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:40:01.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.652565
2026-04-15T17:40:01.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:40:01.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:40:01.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:40:01.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:40:01.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:40:01.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:39:41', tmtdew=6.90863, humidity=62.8566, cloud=0.0, wind=11.5402, temperature=13.1879, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:39:41.616', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:40:01.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:40:01.758 [DEBUG] [Thread-23048] [transport.py] [_log()] starting thread (client mode): 0xf13ffc40
2026-04-15T17:40:01.758 [DEBUG] [Thread-23048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:40:01.772 [DEBUG] [Thread-23048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:40:01.772 [INFO] [Thread-23048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:40:01.779 [DEBUG] [Thread-23048] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:40:01.779 [DEBUG] [Thread-23048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:40:01.780 [DEBUG] [Thread-23048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:40:01.780 [DEBUG] [Thread-23048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:40:01.780 [DEBUG] [Thread-23048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:40:01.780 [DEBUG] [Thread-23048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:40:01.780 [DEBUG] [Thread-23048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:40:01.780 [DEBUG] [Thread-23048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:40:01.780 [DEBUG] [Thread-23048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:40:01.780 [DEBUG] [Thread-23048] [transport.py] [_log()] client lang: <none>
2026-04-15T17:40:01.780 [DEBUG] [Thread-23048] [transport.py] [_log()] server lang: <none>
2026-04-15T17:40:01.780 [DEBUG] [Thread-23048] [transport.py] [_log()] kex follows: False
2026-04-15T17:40:01.781 [DEBUG] [Thread-23048] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:40:01.781 [DEBUG] [Thread-23048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:40:01.781 [DEBUG] [Thread-23048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:40:01.781 [DEBUG] [Thread-23048] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:40:01.781 [DEBUG] [Thread-23048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:40:01.781 [DEBUG] [Thread-23048] [transport.py] [_log()] Compression: none
2026-04-15T17:40:01.781 [DEBUG] [Thread-23048] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:40:01.836 [DEBUG] [Thread-23048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:40:01.837 [DEBUG] [Thread-23048] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:40:01.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:40:01.837 [DEBUG] [Thread-23048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:40:01.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:40:01.894 [DEBUG] [Thread-23048] [transport.py] [_log()] userauth is OK
2026-04-15T17:40:01.894 [DEBUG] [Thread-23048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:40:01.894 [DEBUG] [Thread-23048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:40:01.894 [DEBUG] [Thread-23048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:40:01.894 [DEBUG] [Thread-23048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:40:01.914 [INFO] [Thread-23048] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:40:01.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:40:01.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:40:02.743 [DEBUG] [Thread-23048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:40:02.743 [DEBUG] [Thread-23048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:40:02.791 [DEBUG] [Thread-23048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:40:02.791 [DEBUG] [Thread-23048] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:40:02.800 [DEBUG] [Thread-23048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:40:02.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:40:02.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')
2026-04-15T17:40:02.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
2026-04-15T17:40:02.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:40:02.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:40:02.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:40:02.835 [DEBUG] [Thread-23048] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:40:08.242 [DEBUG] [Thread-23050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:40:23.285 [DEBUG] [Thread-23051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:40:30.540 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:40:30.541 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:40:32.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:40:32.858 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:40:32.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
2026-04-15T17:40:34.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 40, 16), 6.69286, 63.978, 0.0, 13.2516, 12.7939, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:40:34.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:40:16
2026-04-15T17:40:34.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:40:34.956 [DEBUG] [Thread-23052] [transport.py] [_log()] starting thread (client mode): 0xf1351de0
2026-04-15T17:40:34.956 [DEBUG] [Thread-23052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:40:34.976 [DEBUG] [Thread-23052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:40:34.976 [INFO] [Thread-23052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:40:34.979 [DEBUG] [Thread-23052] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:40:34.979 [DEBUG] [Thread-23052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:40:34.979 [DEBUG] [Thread-23052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:40:34.979 [DEBUG] [Thread-23052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:40:34.979 [DEBUG] [Thread-23052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:40:34.979 [DEBUG] [Thread-23052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:40:34.979 [DEBUG] [Thread-23052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:40:34.979 [DEBUG] [Thread-23052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:40:34.979 [DEBUG] [Thread-23052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:40:34.979 [DEBUG] [Thread-23052] [transport.py] [_log()] client lang: <none>
2026-04-15T17:40:34.979 [DEBUG] [Thread-23052] [transport.py] [_log()] server lang: <none>
2026-04-15T17:40:34.980 [DEBUG] [Thread-23052] [transport.py] [_log()] kex follows: False
2026-04-15T17:40:34.980 [DEBUG] [Thread-23052] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:40:34.980 [DEBUG] [Thread-23052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:40:34.980 [DEBUG] [Thread-23052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:40:34.980 [DEBUG] [Thread-23052] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:40:34.980 [DEBUG] [Thread-23052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:40:34.980 [DEBUG] [Thread-23052] [transport.py] [_log()] Compression: none
2026-04-15T17:40:34.980 [DEBUG] [Thread-23052] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:40:34.996 [DEBUG] [Thread-23052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:40:34.996 [DEBUG] [Thread-23052] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:40:34.997 [DEBUG] [Thread-23052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:40:34.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:40:34.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:40:34.998 [DEBUG] [Thread-23052] [transport.py] [_log()] userauth is OK
2026-04-15T17:40:34.998 [DEBUG] [Thread-23052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:40:34.998 [DEBUG] [Thread-23052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:40:34.998 [DEBUG] [Thread-23052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:40:34.998 [DEBUG] [Thread-23052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:40:35.032 [INFO] [Thread-23052] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:40:35.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:40:35.662 [DEBUG] [Thread-23052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:40:35.663 [DEBUG] [Thread-23052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:40:35.663 [DEBUG] [Thread-23052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:40:35.703 [DEBUG] [Thread-23052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:40:35.703 [DEBUG] [Thread-23052] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:40:35.706 [DEBUG] [Thread-23052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:40:35.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:40:35.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:40:35.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:40:35.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:40:35.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:40:35.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:40:35.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:40:35.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:40:35.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:40:35.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.652912 -999.00  +12.90  11.64     69   +7.30 1 2 1 1 1   887    0 4.54 -50.65 ----- 13.8 11.6 298.4 16.0 16.0 -25.8 16.0 -22.8 15.8 -22.5 16.2 -25.9
2026-04-15T17:40:35.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:40:35.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:40:35.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.652912
2026-04-15T17:40:35.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:40:35.731 [DEBUG] [Thread-23052] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:40:35.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:40:35.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:40:35.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:40:35.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T17:40:35.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:40:16', tmtdew=6.69286, humidity=63.978, cloud=0.0, wind=13.2516, temperature=12.7939, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:40:11.597', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:40:35.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:40:38.316 [DEBUG] [Thread-23055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:40:44.201 [DEBUG] [Thread-23056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:40:53.361 [DEBUG] [Thread-23057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:41:08.393 [DEBUG] [Thread-23058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:41:23.425 [DEBUG] [Thread-23059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:41:30.680 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:41:30.682 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:41:38.456 [DEBUG] [Thread-23060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:41:44.295 [DEBUG] [Thread-23061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:41:53.488 [DEBUG] [Thread-23062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:42:08.521 [DEBUG] [Thread-23063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:42:23.553 [DEBUG] [Thread-23064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:42:30.821 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:42:30.822 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:42:38.585 [DEBUG] [Thread-23065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:42:44.372 [DEBUG] [Thread-23066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:42:48.202 [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
2026-04-15T17:42:53.618 [DEBUG] [Thread-23067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:43:08.649 [DEBUG] [Thread-23068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:43:18.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:43:18.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:43:18.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
2026-04-15T17:43:19.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 42, 39), 6.85335, 63.0893, 0.0, 15.9149, 13.1555, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:43:19.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:42:39
2026-04-15T17:43:19.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:43:20.381 [DEBUG] [Thread-23069] [transport.py] [_log()] starting thread (client mode): 0xf1351cc0
2026-04-15T17:43:20.381 [DEBUG] [Thread-23069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:43:20.400 [DEBUG] [Thread-23069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:43:20.400 [INFO] [Thread-23069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:43:20.403 [DEBUG] [Thread-23069] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:43:20.404 [DEBUG] [Thread-23069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:43:20.404 [DEBUG] [Thread-23069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:43:20.404 [DEBUG] [Thread-23069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:43:20.404 [DEBUG] [Thread-23069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:43:20.404 [DEBUG] [Thread-23069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:43:20.404 [DEBUG] [Thread-23069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:43:20.404 [DEBUG] [Thread-23069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:43:20.404 [DEBUG] [Thread-23069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:43:20.404 [DEBUG] [Thread-23069] [transport.py] [_log()] client lang: <none>
2026-04-15T17:43:20.404 [DEBUG] [Thread-23069] [transport.py] [_log()] server lang: <none>
2026-04-15T17:43:20.404 [DEBUG] [Thread-23069] [transport.py] [_log()] kex follows: False
2026-04-15T17:43:20.404 [DEBUG] [Thread-23069] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:43:20.405 [DEBUG] [Thread-23069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:43:20.405 [DEBUG] [Thread-23069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:43:20.405 [DEBUG] [Thread-23069] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:43:20.405 [DEBUG] [Thread-23069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:43:20.405 [DEBUG] [Thread-23069] [transport.py] [_log()] Compression: none
2026-04-15T17:43:20.405 [DEBUG] [Thread-23069] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:43:20.421 [DEBUG] [Thread-23069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:43:20.421 [DEBUG] [Thread-23069] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:43:20.422 [DEBUG] [Thread-23069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:43:20.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:43:20.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:43:20.423 [DEBUG] [Thread-23069] [transport.py] [_log()] userauth is OK
2026-04-15T17:43:20.423 [DEBUG] [Thread-23069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:43:20.423 [DEBUG] [Thread-23069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:43:20.423 [DEBUG] [Thread-23069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:43:20.424 [DEBUG] [Thread-23069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:43:20.447 [INFO] [Thread-23069] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:43:20.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:43:21.079 [DEBUG] [Thread-23069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:43:21.079 [DEBUG] [Thread-23069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:43:21.079 [DEBUG] [Thread-23069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:43:21.120 [DEBUG] [Thread-23069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:43:21.120 [DEBUG] [Thread-23069] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:43:21.122 [DEBUG] [Thread-23069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:43:21.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:43:21.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:43:21.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:43:21.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:43:21.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:43:21.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:43:21.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:43:21.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:43:21.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:43:21.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.654996 -999.00  +12.70  12.64     69   +7.30 1 1 1 1 1   887    0 4.10 -57.44 ----- 14.5 12.6 309.4 16.8 15.5 -27.4 15.4 -25.3 15.2 -24.2 15.4 -26.4
2026-04-15T17:43:21.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:43:21.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:43:21.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.654996
2026-04-15T17:43:21.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:43:21.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:43:21.148 [DEBUG] [Thread-23069] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:43:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:43:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:43:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:43:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:42:39', tmtdew=6.85335, humidity=63.0893, cloud=0.0, wind=15.9149, temperature=13.1555, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:43:11.654', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:43:21.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:43:21.404 [DEBUG] [Thread-23072] [transport.py] [_log()] starting thread (client mode): 0xee9bfee0
2026-04-15T17:43:21.404 [DEBUG] [Thread-23072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:43:21.419 [DEBUG] [Thread-23072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:43:21.419 [INFO] [Thread-23072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:43:21.426 [DEBUG] [Thread-23072] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:43:21.426 [DEBUG] [Thread-23072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:43:21.426 [DEBUG] [Thread-23072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:43:21.426 [DEBUG] [Thread-23072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:43:21.426 [DEBUG] [Thread-23072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:43:21.426 [DEBUG] [Thread-23072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:43:21.426 [DEBUG] [Thread-23072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:43:21.426 [DEBUG] [Thread-23072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:43:21.427 [DEBUG] [Thread-23072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:43:21.427 [DEBUG] [Thread-23072] [transport.py] [_log()] client lang: <none>
2026-04-15T17:43:21.427 [DEBUG] [Thread-23072] [transport.py] [_log()] server lang: <none>
2026-04-15T17:43:21.427 [DEBUG] [Thread-23072] [transport.py] [_log()] kex follows: False
2026-04-15T17:43:21.427 [DEBUG] [Thread-23072] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:43:21.427 [DEBUG] [Thread-23072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:43:21.427 [DEBUG] [Thread-23072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:43:21.427 [DEBUG] [Thread-23072] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:43:21.427 [DEBUG] [Thread-23072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:43:21.427 [DEBUG] [Thread-23072] [transport.py] [_log()] Compression: none
2026-04-15T17:43:21.427 [DEBUG] [Thread-23072] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:43:21.481 [DEBUG] [Thread-23072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:43:21.482 [DEBUG] [Thread-23072] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:43:21.482 [DEBUG] [Thread-23072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:43:21.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:43:21.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:43:21.538 [DEBUG] [Thread-23072] [transport.py] [_log()] userauth is OK
2026-04-15T17:43:21.538 [DEBUG] [Thread-23072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:43:21.539 [DEBUG] [Thread-23072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:43:21.539 [DEBUG] [Thread-23072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:43:21.539 [DEBUG] [Thread-23072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:43:21.561 [INFO] [Thread-23072] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:43:21.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:43:21.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:43:22.380 [DEBUG] [Thread-23072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:43:22.380 [DEBUG] [Thread-23072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:43:22.428 [DEBUG] [Thread-23072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:43:22.428 [DEBUG] [Thread-23072] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:43:22.437 [DEBUG] [Thread-23072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:43:22.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:43:22.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')
2026-04-15T17:43:22.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
2026-04-15T17:43:22.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:43:22.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:43:22.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:43:22.472 [DEBUG] [Thread-23072] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:43:23.681 [DEBUG] [Thread-23074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:43:30.962 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:43:30.963 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:43:38.726 [DEBUG] [Thread-23075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:43:44.457 [DEBUG] [Thread-23076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:43:52.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:43:52.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:43:52.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
2026-04-15T17:43:53.758 [DEBUG] [Thread-23077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:43:53.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 43, 15), 6.65418, 63.9291, 0.0, 14.0108, 12.7947, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:43:53.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:43:15
2026-04-15T17:43:54.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:43:54.707 [DEBUG] [Thread-23078] [transport.py] [_log()] starting thread (client mode): 0xee91e7a0
2026-04-15T17:43:54.707 [DEBUG] [Thread-23078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:43:54.727 [DEBUG] [Thread-23078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:43:54.727 [INFO] [Thread-23078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:43:54.730 [DEBUG] [Thread-23078] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:43:54.731 [DEBUG] [Thread-23078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:43:54.731 [DEBUG] [Thread-23078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:43:54.731 [DEBUG] [Thread-23078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:43:54.731 [DEBUG] [Thread-23078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:43:54.731 [DEBUG] [Thread-23078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:43:54.731 [DEBUG] [Thread-23078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:43:54.731 [DEBUG] [Thread-23078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:43:54.731 [DEBUG] [Thread-23078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:43:54.731 [DEBUG] [Thread-23078] [transport.py] [_log()] client lang: <none>
2026-04-15T17:43:54.731 [DEBUG] [Thread-23078] [transport.py] [_log()] server lang: <none>
2026-04-15T17:43:54.731 [DEBUG] [Thread-23078] [transport.py] [_log()] kex follows: False
2026-04-15T17:43:54.731 [DEBUG] [Thread-23078] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:43:54.732 [DEBUG] [Thread-23078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:43:54.732 [DEBUG] [Thread-23078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:43:54.732 [DEBUG] [Thread-23078] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:43:54.732 [DEBUG] [Thread-23078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:43:54.732 [DEBUG] [Thread-23078] [transport.py] [_log()] Compression: none
2026-04-15T17:43:54.732 [DEBUG] [Thread-23078] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:43:54.751 [DEBUG] [Thread-23078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:43:54.751 [DEBUG] [Thread-23078] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:43:54.752 [DEBUG] [Thread-23078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:43:54.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:43:54.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:43:54.753 [DEBUG] [Thread-23078] [transport.py] [_log()] userauth is OK
2026-04-15T17:43:54.753 [DEBUG] [Thread-23078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:43:54.753 [DEBUG] [Thread-23078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:43:54.753 [DEBUG] [Thread-23078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:43:54.753 [DEBUG] [Thread-23078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:43:54.779 [INFO] [Thread-23078] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:43:54.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:43:55.460 [DEBUG] [Thread-23078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:43:55.461 [DEBUG] [Thread-23078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:43:55.461 [DEBUG] [Thread-23078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:43:55.501 [DEBUG] [Thread-23078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:43:55.501 [DEBUG] [Thread-23078] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:43:55.504 [DEBUG] [Thread-23078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:43:55.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:43:55.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:43:55.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:43:55.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:43:55.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:43:55.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:43:55.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:43:55.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:43:55.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:43:55.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.655343 -999.00  +12.60  15.16     70   +7.30 1 1 1 1 1   887    0 4.10 -58.66 ----- 13.5 15.2 311.2 16.7 15.4 -27.2 15.4 -25.9 15.0 -24.5 15.3 -26.1
2026-04-15T17:43:55.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:43:55.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:43:55.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.655343
2026-04-15T17:43:55.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:43:55.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:43:55.529 [DEBUG] [Thread-23078] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:43:55.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:43:55.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:43:55.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:43:55.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:43:15', tmtdew=6.65418, humidity=63.9291, cloud=0.0, wind=14.0108, temperature=12.7947, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:43:41.635', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:43:55.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:43:55.787 [DEBUG] [Thread-23081] [transport.py] [_log()] starting thread (client mode): 0xee91cfa0
2026-04-15T17:43:55.787 [DEBUG] [Thread-23081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:43:55.801 [DEBUG] [Thread-23081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:43:55.801 [INFO] [Thread-23081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:43:55.808 [DEBUG] [Thread-23081] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:43:55.808 [DEBUG] [Thread-23081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:43:55.808 [DEBUG] [Thread-23081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:43:55.808 [DEBUG] [Thread-23081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:43:55.808 [DEBUG] [Thread-23081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:43:55.808 [DEBUG] [Thread-23081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:43:55.808 [DEBUG] [Thread-23081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:43:55.808 [DEBUG] [Thread-23081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:43:55.808 [DEBUG] [Thread-23081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:43:55.808 [DEBUG] [Thread-23081] [transport.py] [_log()] client lang: <none>
2026-04-15T17:43:55.808 [DEBUG] [Thread-23081] [transport.py] [_log()] server lang: <none>
2026-04-15T17:43:55.808 [DEBUG] [Thread-23081] [transport.py] [_log()] kex follows: False
2026-04-15T17:43:55.809 [DEBUG] [Thread-23081] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:43:55.809 [DEBUG] [Thread-23081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:43:55.809 [DEBUG] [Thread-23081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:43:55.809 [DEBUG] [Thread-23081] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:43:55.809 [DEBUG] [Thread-23081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:43:55.809 [DEBUG] [Thread-23081] [transport.py] [_log()] Compression: none
2026-04-15T17:43:55.809 [DEBUG] [Thread-23081] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:43:55.867 [DEBUG] [Thread-23081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:43:55.867 [DEBUG] [Thread-23081] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:43:55.868 [DEBUG] [Thread-23081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:43:55.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:43:55.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:43:55.922 [DEBUG] [Thread-23081] [transport.py] [_log()] userauth is OK
2026-04-15T17:43:55.923 [DEBUG] [Thread-23081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:43:55.923 [DEBUG] [Thread-23081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:43:55.923 [DEBUG] [Thread-23081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:43:55.923 [DEBUG] [Thread-23081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:43:55.948 [INFO] [Thread-23081] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:43:55.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:43:55.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:43:56.770 [DEBUG] [Thread-23081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:43:56.770 [DEBUG] [Thread-23081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:43:56.818 [DEBUG] [Thread-23081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:43:56.818 [DEBUG] [Thread-23081] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:43:56.827 [DEBUG] [Thread-23081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:43:56.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:43:56.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')
2026-04-15T17:43:56.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') -> 00000000
2026-04-15T17:43:56.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:43:56.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:43:56.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:43:56.861 [DEBUG] [Thread-23081] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:44:08.790 [DEBUG] [Thread-23083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:44:23.834 [DEBUG] [Thread-23084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:44:26.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:44:26.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:44:26.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
2026-04-15T17:44:28.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 43, 50), 6.8837, 62.9575, 0.0, 14.8565, 13.1564, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:44:28.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:43:50
2026-04-15T17:44:28.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:44:29.092 [DEBUG] [Thread-23085] [transport.py] [_log()] starting thread (client mode): 0xf1350a90
2026-04-15T17:44:29.092 [DEBUG] [Thread-23085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:44:29.113 [DEBUG] [Thread-23085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:44:29.114 [INFO] [Thread-23085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:44:29.115 [DEBUG] [Thread-23085] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:44:29.115 [DEBUG] [Thread-23085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:44:29.115 [DEBUG] [Thread-23085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:44:29.115 [DEBUG] [Thread-23085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:44:29.115 [DEBUG] [Thread-23085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:44:29.116 [DEBUG] [Thread-23085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:44:29.116 [DEBUG] [Thread-23085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:44:29.116 [DEBUG] [Thread-23085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:44:29.116 [DEBUG] [Thread-23085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:44:29.116 [DEBUG] [Thread-23085] [transport.py] [_log()] client lang: <none>
2026-04-15T17:44:29.116 [DEBUG] [Thread-23085] [transport.py] [_log()] server lang: <none>
2026-04-15T17:44:29.116 [DEBUG] [Thread-23085] [transport.py] [_log()] kex follows: False
2026-04-15T17:44:29.116 [DEBUG] [Thread-23085] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:44:29.116 [DEBUG] [Thread-23085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:44:29.116 [DEBUG] [Thread-23085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:44:29.116 [DEBUG] [Thread-23085] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:44:29.117 [DEBUG] [Thread-23085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:44:29.117 [DEBUG] [Thread-23085] [transport.py] [_log()] Compression: none
2026-04-15T17:44:29.117 [DEBUG] [Thread-23085] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:44:29.134 [DEBUG] [Thread-23085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:44:29.135 [DEBUG] [Thread-23085] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:44:29.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:44:29.135 [DEBUG] [Thread-23085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:44:29.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:44:29.136 [DEBUG] [Thread-23085] [transport.py] [_log()] userauth is OK
2026-04-15T17:44:29.136 [DEBUG] [Thread-23085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:44:29.136 [DEBUG] [Thread-23085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:44:29.137 [DEBUG] [Thread-23085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:44:29.137 [DEBUG] [Thread-23085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:44:29.162 [INFO] [Thread-23085] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:44:29.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:44:29.785 [DEBUG] [Thread-23085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:44:29.786 [DEBUG] [Thread-23085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:44:29.786 [DEBUG] [Thread-23085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:44:29.826 [DEBUG] [Thread-23085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:44:29.826 [DEBUG] [Thread-23085] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:44:29.829 [DEBUG] [Thread-23085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:44:29.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:44:29.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:44:29.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:44:29.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:44:29.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:44:29.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:44:29.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:44:29.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:44:29.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:44:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.655690 -999.00  +12.50  18.43     70   +7.30 1 1 1 1 1   887    0 4.05 -61.82 ----- 19.2 18.4 316.4 20.4 15.3 -27.6 15.3 -25.9 15.0 -24.0 15.3 -26.1
2026-04-15T17:44:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:44:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:44:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.655690
2026-04-15T17:44:29.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:44:29.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:44:29.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:44:29.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:44:29.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:44:29.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:43:50', tmtdew=6.8837, humidity=62.9575, cloud=0.0, wind=14.8565, temperature=13.1564, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:44:11.616', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:44:29.856 [DEBUG] [Thread-23085] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:44:30.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:44:30.105 [DEBUG] [Thread-23088] [transport.py] [_log()] starting thread (client mode): 0xee9bf700
2026-04-15T17:44:30.105 [DEBUG] [Thread-23088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:44:30.120 [DEBUG] [Thread-23088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:44:30.120 [INFO] [Thread-23088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:44:30.127 [DEBUG] [Thread-23088] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:44:30.127 [DEBUG] [Thread-23088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:44:30.127 [DEBUG] [Thread-23088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:44:30.127 [DEBUG] [Thread-23088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:44:30.127 [DEBUG] [Thread-23088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:44:30.128 [DEBUG] [Thread-23088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:44:30.128 [DEBUG] [Thread-23088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:44:30.128 [DEBUG] [Thread-23088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:44:30.128 [DEBUG] [Thread-23088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:44:30.128 [DEBUG] [Thread-23088] [transport.py] [_log()] client lang: <none>
2026-04-15T17:44:30.128 [DEBUG] [Thread-23088] [transport.py] [_log()] server lang: <none>
2026-04-15T17:44:30.128 [DEBUG] [Thread-23088] [transport.py] [_log()] kex follows: False
2026-04-15T17:44:30.128 [DEBUG] [Thread-23088] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:44:30.128 [DEBUG] [Thread-23088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:44:30.128 [DEBUG] [Thread-23088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:44:30.128 [DEBUG] [Thread-23088] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:44:30.129 [DEBUG] [Thread-23088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:44:30.129 [DEBUG] [Thread-23088] [transport.py] [_log()] Compression: none
2026-04-15T17:44:30.129 [DEBUG] [Thread-23088] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:44:30.186 [DEBUG] [Thread-23088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:44:30.186 [DEBUG] [Thread-23088] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:44:30.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:44:30.187 [DEBUG] [Thread-23088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:44:30.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:44:30.242 [DEBUG] [Thread-23088] [transport.py] [_log()] userauth is OK
2026-04-15T17:44:30.243 [DEBUG] [Thread-23088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:44:30.243 [DEBUG] [Thread-23088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:44:30.243 [DEBUG] [Thread-23088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:44:30.243 [DEBUG] [Thread-23088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:44:30.270 [INFO] [Thread-23088] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:44:30.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:44:30.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:44:31.080 [DEBUG] [Thread-23088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:44:31.080 [DEBUG] [Thread-23088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:44:31.110 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:44:31.111 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:44:31.128 [DEBUG] [Thread-23088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:44:31.128 [DEBUG] [Thread-23088] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:44:31.137 [DEBUG] [Thread-23088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:44:31.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:44:31.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')
2026-04-15T17:44:31.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
2026-04-15T17:44:31.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:44:31.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:44:31.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:44:31.172 [DEBUG] [Thread-23088] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:44:38.866 [DEBUG] [Thread-23090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:44:44.531 [DEBUG] [Thread-23091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:44:53.912 [DEBUG] [Thread-23092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:45:01.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:45:01.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:45:01.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
2026-04-15T17:45:02.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 44, 26), 6.5604, 64.3268, 0.0, 14.346, 12.6951, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:45:02.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:44:26
2026-04-15T17:45:02.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:45:03.305 [DEBUG] [Thread-23093] [transport.py] [_log()] starting thread (client mode): 0xf1350640
2026-04-15T17:45:03.305 [DEBUG] [Thread-23093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:45:03.325 [DEBUG] [Thread-23093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:45:03.325 [INFO] [Thread-23093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:45:03.328 [DEBUG] [Thread-23093] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:45:03.328 [DEBUG] [Thread-23093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:45:03.328 [DEBUG] [Thread-23093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:45:03.328 [DEBUG] [Thread-23093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:45:03.328 [DEBUG] [Thread-23093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:45:03.329 [DEBUG] [Thread-23093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:45:03.329 [DEBUG] [Thread-23093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:45:03.329 [DEBUG] [Thread-23093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:45:03.329 [DEBUG] [Thread-23093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:45:03.329 [DEBUG] [Thread-23093] [transport.py] [_log()] client lang: <none>
2026-04-15T17:45:03.329 [DEBUG] [Thread-23093] [transport.py] [_log()] server lang: <none>
2026-04-15T17:45:03.329 [DEBUG] [Thread-23093] [transport.py] [_log()] kex follows: False
2026-04-15T17:45:03.329 [DEBUG] [Thread-23093] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:45:03.329 [DEBUG] [Thread-23093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:45:03.329 [DEBUG] [Thread-23093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:45:03.329 [DEBUG] [Thread-23093] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:45:03.329 [DEBUG] [Thread-23093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:45:03.330 [DEBUG] [Thread-23093] [transport.py] [_log()] Compression: none
2026-04-15T17:45:03.330 [DEBUG] [Thread-23093] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:45:03.346 [DEBUG] [Thread-23093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:45:03.346 [DEBUG] [Thread-23093] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:45:03.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:45:03.347 [DEBUG] [Thread-23093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:45:03.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:45:03.348 [DEBUG] [Thread-23093] [transport.py] [_log()] userauth is OK
2026-04-15T17:45:03.348 [DEBUG] [Thread-23093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:45:03.348 [DEBUG] [Thread-23093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:45:03.348 [DEBUG] [Thread-23093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:45:03.348 [DEBUG] [Thread-23093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:45:03.384 [INFO] [Thread-23093] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:45:03.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:45:08.943 [DEBUG] [Thread-23095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:45:09.530 [DEBUG] [Thread-23093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:45:09.530 [DEBUG] [Thread-23093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:45:09.531 [DEBUG] [Thread-23093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:45:09.571 [DEBUG] [Thread-23093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:45:09.571 [DEBUG] [Thread-23093] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:45:09.574 [DEBUG] [Thread-23093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:45:09.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:45:09.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:45:09.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:45:09.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:45:09.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:45:09.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:45:09.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:45:09.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:45:09.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:45:09.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.656037 -999.00  +12.50  14.46     70   +7.30 1 1 1 1 1   887    0 4.01 -58.54 ----- 12.7 14.5 323.0 21.2 15.2 -27.3 15.2 -26.1 14.8 -25.1 15.1 -26.1
2026-04-15T17:45:09.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:45:09.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:45:09.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.656037
2026-04-15T17:45:09.598 [DEBUG] [Thread-23093] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:45:09.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:45:09.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:45:09.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:45:09.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:45:09.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:45:09.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:44:26', tmtdew=6.5604, humidity=64.3268, cloud=0.0, wind=14.346, temperature=12.6951, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:44:41.597', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:45:09.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:45:09.822 [DEBUG] [Thread-23097] [transport.py] [_log()] starting thread (client mode): 0xf13e2f20
2026-04-15T17:45:09.822 [DEBUG] [Thread-23097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:45:09.837 [DEBUG] [Thread-23097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:45:09.837 [INFO] [Thread-23097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:45:09.844 [DEBUG] [Thread-23097] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:45:09.844 [DEBUG] [Thread-23097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:45:09.844 [DEBUG] [Thread-23097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:45:09.844 [DEBUG] [Thread-23097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:45:09.845 [DEBUG] [Thread-23097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:45:09.845 [DEBUG] [Thread-23097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:45:09.845 [DEBUG] [Thread-23097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:45:09.845 [DEBUG] [Thread-23097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:45:09.845 [DEBUG] [Thread-23097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:45:09.845 [DEBUG] [Thread-23097] [transport.py] [_log()] client lang: <none>
2026-04-15T17:45:09.845 [DEBUG] [Thread-23097] [transport.py] [_log()] server lang: <none>
2026-04-15T17:45:09.845 [DEBUG] [Thread-23097] [transport.py] [_log()] kex follows: False
2026-04-15T17:45:09.845 [DEBUG] [Thread-23097] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:45:09.845 [DEBUG] [Thread-23097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:45:09.845 [DEBUG] [Thread-23097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:45:09.846 [DEBUG] [Thread-23097] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:45:09.846 [DEBUG] [Thread-23097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:45:09.846 [DEBUG] [Thread-23097] [transport.py] [_log()] Compression: none
2026-04-15T17:45:09.846 [DEBUG] [Thread-23097] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:45:09.902 [DEBUG] [Thread-23097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:45:09.903 [DEBUG] [Thread-23097] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:45:09.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:45:09.903 [DEBUG] [Thread-23097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:45:09.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:45:09.959 [DEBUG] [Thread-23097] [transport.py] [_log()] userauth is OK
2026-04-15T17:45:09.959 [DEBUG] [Thread-23097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:45:09.959 [DEBUG] [Thread-23097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:45:09.959 [DEBUG] [Thread-23097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:45:09.960 [DEBUG] [Thread-23097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:45:09.985 [INFO] [Thread-23097] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:45:09.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:45:09.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:45:10.813 [DEBUG] [Thread-23097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:45:10.814 [DEBUG] [Thread-23097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:45:10.861 [DEBUG] [Thread-23097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:45:10.861 [DEBUG] [Thread-23097] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:45:10.870 [DEBUG] [Thread-23097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:45:10.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:45:10.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')
2026-04-15T17:45:10.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
2026-04-15T17:45:10.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:45:10.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:45:10.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:45:10.905 [DEBUG] [Thread-23097] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:45:23.975 [DEBUG] [Thread-23099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:45:31.252 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:45:31.253 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:45:39.018 [DEBUG] [Thread-23100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:45:40.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:45:40.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:45:40.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
2026-04-15T17:45:42.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 45, 1), 6.51604, 64.5256, 0.0, 14.5048, 12.7117, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:45:42.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:45:01
2026-04-15T17:45:42.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:45:43.130 [DEBUG] [Thread-23101] [transport.py] [_log()] starting thread (client mode): 0xf1353880
2026-04-15T17:45:43.131 [DEBUG] [Thread-23101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:45:43.145 [DEBUG] [Thread-23101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:45:43.145 [INFO] [Thread-23101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:45:43.147 [DEBUG] [Thread-23101] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:45:43.147 [DEBUG] [Thread-23101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:45:43.148 [DEBUG] [Thread-23101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:45:43.148 [DEBUG] [Thread-23101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:45:43.148 [DEBUG] [Thread-23101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:45:43.148 [DEBUG] [Thread-23101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:45:43.148 [DEBUG] [Thread-23101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:45:43.148 [DEBUG] [Thread-23101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:45:43.148 [DEBUG] [Thread-23101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:45:43.148 [DEBUG] [Thread-23101] [transport.py] [_log()] client lang: <none>
2026-04-15T17:45:43.148 [DEBUG] [Thread-23101] [transport.py] [_log()] server lang: <none>
2026-04-15T17:45:43.148 [DEBUG] [Thread-23101] [transport.py] [_log()] kex follows: False
2026-04-15T17:45:43.148 [DEBUG] [Thread-23101] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:45:43.148 [DEBUG] [Thread-23101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:45:43.149 [DEBUG] [Thread-23101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:45:43.149 [DEBUG] [Thread-23101] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:45:43.149 [DEBUG] [Thread-23101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:45:43.149 [DEBUG] [Thread-23101] [transport.py] [_log()] Compression: none
2026-04-15T17:45:43.149 [DEBUG] [Thread-23101] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:45:43.164 [DEBUG] [Thread-23101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:45:43.164 [DEBUG] [Thread-23101] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:45:43.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:45:43.165 [DEBUG] [Thread-23101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:45:43.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:45:43.166 [DEBUG] [Thread-23101] [transport.py] [_log()] userauth is OK
2026-04-15T17:45:43.166 [DEBUG] [Thread-23101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:45:43.166 [DEBUG] [Thread-23101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:45:43.166 [DEBUG] [Thread-23101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:45:43.166 [DEBUG] [Thread-23101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:45:43.182 [INFO] [Thread-23101] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:45:43.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:45:43.738 [DEBUG] [Thread-23101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:45:43.738 [DEBUG] [Thread-23101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:45:43.739 [DEBUG] [Thread-23101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:45:43.779 [DEBUG] [Thread-23101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:45:43.779 [DEBUG] [Thread-23101] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:45:43.782 [DEBUG] [Thread-23101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:45:43.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:45:43.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:45:43.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:45:43.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:45:43.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:45:43.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:45:43.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:45:43.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:45:43.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:45:43.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.656385 -999.00  +12.50  16.26     70   +7.20 1 1 1 1 1   887    0 4.25 -54.25 ----- 19.4 16.3 328.4 18.6 15.2 -27.4 15.1 -26.0 14.8 -23.8 15.1 -25.8
2026-04-15T17:45:43.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:45:43.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:45:43.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.656385
2026-04-15T17:45:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:45:43.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:45:43.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:45:43.809 [DEBUG] [Thread-23101] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:45:43.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:45:43.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:45:43.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:45:01', tmtdew=6.51604, humidity=64.5256, cloud=0.0, wind=14.5048, temperature=12.7117, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:45:11.664', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:45:44.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:45:44.051 [DEBUG] [Thread-23104] [transport.py] [_log()] starting thread (client mode): 0xf13cb460
2026-04-15T17:45:44.051 [DEBUG] [Thread-23104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:45:44.065 [DEBUG] [Thread-23104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:45:44.065 [INFO] [Thread-23104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:45:44.072 [DEBUG] [Thread-23104] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:45:44.072 [DEBUG] [Thread-23104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:45:44.072 [DEBUG] [Thread-23104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:45:44.072 [DEBUG] [Thread-23104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:45:44.072 [DEBUG] [Thread-23104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:45:44.072 [DEBUG] [Thread-23104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:45:44.072 [DEBUG] [Thread-23104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:45:44.072 [DEBUG] [Thread-23104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:45:44.073 [DEBUG] [Thread-23104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:45:44.073 [DEBUG] [Thread-23104] [transport.py] [_log()] client lang: <none>
2026-04-15T17:45:44.073 [DEBUG] [Thread-23104] [transport.py] [_log()] server lang: <none>
2026-04-15T17:45:44.073 [DEBUG] [Thread-23104] [transport.py] [_log()] kex follows: False
2026-04-15T17:45:44.073 [DEBUG] [Thread-23104] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:45:44.073 [DEBUG] [Thread-23104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:45:44.073 [DEBUG] [Thread-23104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:45:44.073 [DEBUG] [Thread-23104] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:45:44.073 [DEBUG] [Thread-23104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:45:44.073 [DEBUG] [Thread-23104] [transport.py] [_log()] Compression: none
2026-04-15T17:45:44.073 [DEBUG] [Thread-23104] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:45:44.129 [DEBUG] [Thread-23104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:45:44.130 [DEBUG] [Thread-23104] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:45:44.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:45:44.130 [DEBUG] [Thread-23104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:45:44.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:45:44.187 [DEBUG] [Thread-23104] [transport.py] [_log()] userauth is OK
2026-04-15T17:45:44.187 [DEBUG] [Thread-23104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:45:44.187 [DEBUG] [Thread-23104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:45:44.187 [DEBUG] [Thread-23104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:45:44.187 [DEBUG] [Thread-23104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:45:44.205 [INFO] [Thread-23104] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:45:44.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:45:44.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:45:44.620 [DEBUG] [Thread-23106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:45:44.999 [DEBUG] [Thread-23104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:45:44.999 [DEBUG] [Thread-23104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:45:45.047 [DEBUG] [Thread-23104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:45:45.047 [DEBUG] [Thread-23104] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:45:45.056 [DEBUG] [Thread-23104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:45:45.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:45:45.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')
2026-04-15T17:45:45.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
2026-04-15T17:45:45.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:45:45.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:45:45.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:45:45.090 [DEBUG] [Thread-23104] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:45:54.051 [DEBUG] [Thread-23107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:46:09.097 [DEBUG] [Thread-23108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:46:15.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:46:15.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:46:15.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
2026-04-15T17:46:16.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 45, 37), 6.61775, 64.0849, 0.0, 13.4453, 12.9914, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:46:16.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:45:37
2026-04-15T17:46:16.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:46:17.300 [DEBUG] [Thread-23109] [transport.py] [_log()] starting thread (client mode): 0xf1353400
2026-04-15T17:46:17.301 [DEBUG] [Thread-23109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:46:17.320 [DEBUG] [Thread-23109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:46:17.320 [INFO] [Thread-23109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:46:17.323 [DEBUG] [Thread-23109] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:46:17.323 [DEBUG] [Thread-23109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] client lang: <none>
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] server lang: <none>
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] kex follows: False
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] Compression: none
2026-04-15T17:46:17.324 [DEBUG] [Thread-23109] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:46:17.340 [DEBUG] [Thread-23109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:46:17.340 [DEBUG] [Thread-23109] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:46:17.341 [DEBUG] [Thread-23109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:46:17.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:46:17.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:46:17.342 [DEBUG] [Thread-23109] [transport.py] [_log()] userauth is OK
2026-04-15T17:46:17.342 [DEBUG] [Thread-23109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:46:17.342 [DEBUG] [Thread-23109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:46:17.342 [DEBUG] [Thread-23109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:46:17.342 [DEBUG] [Thread-23109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:46:17.358 [INFO] [Thread-23109] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:46:17.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:46:17.996 [DEBUG] [Thread-23109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:46:17.996 [DEBUG] [Thread-23109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:46:17.997 [DEBUG] [Thread-23109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:46:18.037 [DEBUG] [Thread-23109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:46:18.037 [DEBUG] [Thread-23109] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:46:18.039 [DEBUG] [Thread-23109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:46:18.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:46:18.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:46:18.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:46:18.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:46:18.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:46:18.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:46:18.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:46:18.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:46:18.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:46:18.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.656732 -999.00  +12.50  13.65     70   +7.30 1 1 1 1 1   887    0 4.11 -54.73 ----- 16.2 13.7 324.0 20.7 15.1 -27.4 15.1 -26.3 14.8 -24.0 15.0 -25.9
2026-04-15T17:46:18.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:46:18.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:46:18.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.656732
2026-04-15T17:46:18.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:46:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:46:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:46:18.064 [DEBUG] [Thread-23109] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:46:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:46:18.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:46:18.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:45:37', tmtdew=6.61775, humidity=64.0849, cloud=0.0, wind=13.4453, temperature=12.9914, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:45:41.645', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:46:18.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:46:18.299 [DEBUG] [Thread-23112] [transport.py] [_log()] starting thread (client mode): 0xee91d7e0
2026-04-15T17:46:18.299 [DEBUG] [Thread-23112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:46:18.314 [DEBUG] [Thread-23112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:46:18.314 [INFO] [Thread-23112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:46:18.321 [DEBUG] [Thread-23112] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:46:18.321 [DEBUG] [Thread-23112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:46:18.321 [DEBUG] [Thread-23112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:46:18.321 [DEBUG] [Thread-23112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:46:18.321 [DEBUG] [Thread-23112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:46:18.322 [DEBUG] [Thread-23112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:46:18.322 [DEBUG] [Thread-23112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:46:18.322 [DEBUG] [Thread-23112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:46:18.322 [DEBUG] [Thread-23112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:46:18.322 [DEBUG] [Thread-23112] [transport.py] [_log()] client lang: <none>
2026-04-15T17:46:18.322 [DEBUG] [Thread-23112] [transport.py] [_log()] server lang: <none>
2026-04-15T17:46:18.322 [DEBUG] [Thread-23112] [transport.py] [_log()] kex follows: False
2026-04-15T17:46:18.322 [DEBUG] [Thread-23112] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:46:18.322 [DEBUG] [Thread-23112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:46:18.322 [DEBUG] [Thread-23112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:46:18.322 [DEBUG] [Thread-23112] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:46:18.323 [DEBUG] [Thread-23112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:46:18.323 [DEBUG] [Thread-23112] [transport.py] [_log()] Compression: none
2026-04-15T17:46:18.323 [DEBUG] [Thread-23112] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:46:18.379 [DEBUG] [Thread-23112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:46:18.379 [DEBUG] [Thread-23112] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:46:18.380 [DEBUG] [Thread-23112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:46:18.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:46:18.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:46:18.435 [DEBUG] [Thread-23112] [transport.py] [_log()] userauth is OK
2026-04-15T17:46:18.435 [DEBUG] [Thread-23112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:46:18.435 [DEBUG] [Thread-23112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:46:18.435 [DEBUG] [Thread-23112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:46:18.435 [DEBUG] [Thread-23112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:46:18.456 [INFO] [Thread-23112] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:46:18.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:46:18.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:46:19.273 [DEBUG] [Thread-23112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:46:19.273 [DEBUG] [Thread-23112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:46:19.321 [DEBUG] [Thread-23112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:46:19.321 [DEBUG] [Thread-23112] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:46:19.330 [DEBUG] [Thread-23112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:46:19.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:46:19.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')
2026-04-15T17:46:19.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
2026-04-15T17:46:19.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:46:19.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:46:19.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:46:19.364 [DEBUG] [Thread-23112] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:46:24.129 [DEBUG] [Thread-23114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:46:31.391 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:46:31.392 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:46:39.172 [DEBUG] [Thread-23115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:46:44.696 [DEBUG] [Thread-23116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:46:49.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:46:49.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:46:49.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
2026-04-15T17:46:50.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 46, 12), 6.3528, 65.291, 0.0, 11.417, 12.6457, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:46:50.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:46:12
2026-04-15T17:46:51.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:46:51.584 [DEBUG] [Thread-23117] [transport.py] [_log()] starting thread (client mode): 0xf1351cc0
2026-04-15T17:46:51.584 [DEBUG] [Thread-23117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:46:51.596 [DEBUG] [Thread-23117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:46:51.596 [INFO] [Thread-23117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:46:51.599 [DEBUG] [Thread-23117] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:46:51.599 [DEBUG] [Thread-23117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:46:51.599 [DEBUG] [Thread-23117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:46:51.599 [DEBUG] [Thread-23117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:46:51.599 [DEBUG] [Thread-23117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:46:51.599 [DEBUG] [Thread-23117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:46:51.599 [DEBUG] [Thread-23117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:46:51.599 [DEBUG] [Thread-23117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:46:51.599 [DEBUG] [Thread-23117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:46:51.599 [DEBUG] [Thread-23117] [transport.py] [_log()] client lang: <none>
2026-04-15T17:46:51.599 [DEBUG] [Thread-23117] [transport.py] [_log()] server lang: <none>
2026-04-15T17:46:51.599 [DEBUG] [Thread-23117] [transport.py] [_log()] kex follows: False
2026-04-15T17:46:51.600 [DEBUG] [Thread-23117] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:46:51.600 [DEBUG] [Thread-23117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:46:51.600 [DEBUG] [Thread-23117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:46:51.600 [DEBUG] [Thread-23117] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:46:51.600 [DEBUG] [Thread-23117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:46:51.600 [DEBUG] [Thread-23117] [transport.py] [_log()] Compression: none
2026-04-15T17:46:51.600 [DEBUG] [Thread-23117] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:46:51.615 [DEBUG] [Thread-23117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:46:51.616 [DEBUG] [Thread-23117] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:46:51.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:46:51.616 [DEBUG] [Thread-23117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:46:51.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:46:51.617 [DEBUG] [Thread-23117] [transport.py] [_log()] userauth is OK
2026-04-15T17:46:51.617 [DEBUG] [Thread-23117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:46:51.618 [DEBUG] [Thread-23117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:46:51.618 [DEBUG] [Thread-23117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:46:51.618 [DEBUG] [Thread-23117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:46:51.630 [INFO] [Thread-23117] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:46:51.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:46:52.428 [DEBUG] [Thread-23117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:46:52.428 [DEBUG] [Thread-23117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:46:52.429 [DEBUG] [Thread-23117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:46:52.469 [DEBUG] [Thread-23117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:46:52.469 [DEBUG] [Thread-23117] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:46:52.472 [DEBUG] [Thread-23117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:46:52.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:46:52.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:46:52.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:46:52.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:46:52.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:46:52.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:46:52.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:46:52.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:46:52.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:46:52.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.657079 -999.00  +12.40  19.55     70   +7.10 1 1 1 1 1   887    0 4.16 -53.82 ----- 19.9 19.6 311.8 22.5 15.0 -27.4 15.0 -26.1 14.7 -23.7 14.9 -25.8
2026-04-15T17:46:52.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:46:52.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:46:52.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.657079
2026-04-15T17:46:52.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:46:52.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:46:52.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:46:52.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:46:52.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:46:52.499 [DEBUG] [Thread-23117] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:46:52.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:46:12', tmtdew=6.3528, humidity=65.291, cloud=0.0, wind=11.417, temperature=12.6457, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:46:11.626', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:46:52.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:46:52.762 [DEBUG] [Thread-23120] [transport.py] [_log()] starting thread (client mode): 0xf1337580
2026-04-15T17:46:52.763 [DEBUG] [Thread-23120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:46:52.777 [DEBUG] [Thread-23120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:46:52.777 [INFO] [Thread-23120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:46:52.784 [DEBUG] [Thread-23120] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:46:52.784 [DEBUG] [Thread-23120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:46:52.784 [DEBUG] [Thread-23120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:46:52.784 [DEBUG] [Thread-23120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:46:52.785 [DEBUG] [Thread-23120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:46:52.785 [DEBUG] [Thread-23120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:46:52.785 [DEBUG] [Thread-23120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:46:52.785 [DEBUG] [Thread-23120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:46:52.785 [DEBUG] [Thread-23120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:46:52.785 [DEBUG] [Thread-23120] [transport.py] [_log()] client lang: <none>
2026-04-15T17:46:52.785 [DEBUG] [Thread-23120] [transport.py] [_log()] server lang: <none>
2026-04-15T17:46:52.785 [DEBUG] [Thread-23120] [transport.py] [_log()] kex follows: False
2026-04-15T17:46:52.785 [DEBUG] [Thread-23120] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:46:52.785 [DEBUG] [Thread-23120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:46:52.785 [DEBUG] [Thread-23120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:46:52.785 [DEBUG] [Thread-23120] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:46:52.786 [DEBUG] [Thread-23120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:46:52.786 [DEBUG] [Thread-23120] [transport.py] [_log()] Compression: none
2026-04-15T17:46:52.786 [DEBUG] [Thread-23120] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:46:52.842 [DEBUG] [Thread-23120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:46:52.842 [DEBUG] [Thread-23120] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:46:52.843 [DEBUG] [Thread-23120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:46:52.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:46:52.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:46:52.899 [DEBUG] [Thread-23120] [transport.py] [_log()] userauth is OK
2026-04-15T17:46:52.899 [DEBUG] [Thread-23120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:46:52.899 [DEBUG] [Thread-23120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:46:52.899 [DEBUG] [Thread-23120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:46:52.900 [DEBUG] [Thread-23120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:46:52.925 [INFO] [Thread-23120] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:46:52.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:46:52.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:46:53.718 [DEBUG] [Thread-23120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:46:53.719 [DEBUG] [Thread-23120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:46:53.766 [DEBUG] [Thread-23120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:46:53.766 [DEBUG] [Thread-23120] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:46:53.775 [DEBUG] [Thread-23120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:46:53.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:46:53.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')
2026-04-15T17:46:53.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
2026-04-15T17:46:53.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:46:53.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:46:53.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:46:53.810 [DEBUG] [Thread-23120] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:46:54.201 [DEBUG] [Thread-23122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:47:09.247 [DEBUG] [Thread-23123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:47:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:47:23.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:47:23.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T17:47:24.279 [DEBUG] [Thread-23124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:47:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 46, 48), 6.58102, 64.218, 0.0, 16.5499, 12.8594, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:47:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:46:48
2026-04-15T17:47:25.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:47:26.025 [DEBUG] [Thread-23125] [transport.py] [_log()] starting thread (client mode): 0xee91cb80
2026-04-15T17:47:26.026 [DEBUG] [Thread-23125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:47:26.045 [DEBUG] [Thread-23125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:47:26.045 [INFO] [Thread-23125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] client lang: <none>
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] server lang: <none>
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] kex follows: False
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:47:26.048 [DEBUG] [Thread-23125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:47:26.049 [DEBUG] [Thread-23125] [transport.py] [_log()] Compression: none
2026-04-15T17:47:26.049 [DEBUG] [Thread-23125] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:47:26.064 [DEBUG] [Thread-23125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:47:26.065 [DEBUG] [Thread-23125] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:47:26.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:47:26.066 [DEBUG] [Thread-23125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:47:26.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:47:26.066 [DEBUG] [Thread-23125] [transport.py] [_log()] userauth is OK
2026-04-15T17:47:26.066 [DEBUG] [Thread-23125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:47:26.067 [DEBUG] [Thread-23125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:47:26.067 [DEBUG] [Thread-23125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:47:26.067 [DEBUG] [Thread-23125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:47:26.084 [INFO] [Thread-23125] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:47:26.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:47:26.879 [DEBUG] [Thread-23125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:47:26.880 [DEBUG] [Thread-23125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:47:26.880 [DEBUG] [Thread-23125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:47:26.920 [DEBUG] [Thread-23125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:47:26.920 [DEBUG] [Thread-23125] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:47:26.923 [DEBUG] [Thread-23125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:47:26.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:47:26.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:47:26.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:47:26.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:47:26.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:47:26.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:47:26.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:47:26.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:47:26.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:47:26.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.657426 -999.00  +12.30  16.78     70   +7.10 1 1 1 1 1   887    0 4.10 -56.59 ----- 16.4 16.8 312.8 21.1 14.9 -27.3 14.9 -26.0 14.6 -24.1 14.8 -25.8
2026-04-15T17:47:26.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:47:26.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:47:26.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.657426
2026-04-15T17:47:26.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:47:26.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:47:26.946 [DEBUG] [Thread-23125] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:47:26.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:47:26.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:47:26.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:47:26.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:46:48', tmtdew=6.58102, humidity=64.218, cloud=0.0, wind=16.5499, temperature=12.8594, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:46:41.606', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:47:27.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:47:27.179 [DEBUG] [Thread-23128] [transport.py] [_log()] starting thread (client mode): 0xf13c81f0
2026-04-15T17:47:27.180 [DEBUG] [Thread-23128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:47:27.193 [DEBUG] [Thread-23128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:47:27.194 [INFO] [Thread-23128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:47:27.201 [DEBUG] [Thread-23128] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:47:27.201 [DEBUG] [Thread-23128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:47:27.201 [DEBUG] [Thread-23128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:47:27.201 [DEBUG] [Thread-23128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:47:27.201 [DEBUG] [Thread-23128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:47:27.201 [DEBUG] [Thread-23128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:47:27.202 [DEBUG] [Thread-23128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:47:27.202 [DEBUG] [Thread-23128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:47:27.202 [DEBUG] [Thread-23128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:47:27.202 [DEBUG] [Thread-23128] [transport.py] [_log()] client lang: <none>
2026-04-15T17:47:27.202 [DEBUG] [Thread-23128] [transport.py] [_log()] server lang: <none>
2026-04-15T17:47:27.202 [DEBUG] [Thread-23128] [transport.py] [_log()] kex follows: False
2026-04-15T17:47:27.202 [DEBUG] [Thread-23128] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:47:27.202 [DEBUG] [Thread-23128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:47:27.202 [DEBUG] [Thread-23128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:47:27.202 [DEBUG] [Thread-23128] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:47:27.202 [DEBUG] [Thread-23128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:47:27.203 [DEBUG] [Thread-23128] [transport.py] [_log()] Compression: none
2026-04-15T17:47:27.203 [DEBUG] [Thread-23128] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:47:27.258 [DEBUG] [Thread-23128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:47:27.258 [DEBUG] [Thread-23128] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:47:27.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:47:27.259 [DEBUG] [Thread-23128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:47:27.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:47:27.315 [DEBUG] [Thread-23128] [transport.py] [_log()] userauth is OK
2026-04-15T17:47:27.315 [DEBUG] [Thread-23128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:47:27.315 [DEBUG] [Thread-23128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:47:27.315 [DEBUG] [Thread-23128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:47:27.316 [DEBUG] [Thread-23128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:47:27.342 [INFO] [Thread-23128] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:47:27.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:47:27.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:47:28.157 [DEBUG] [Thread-23128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:47:28.157 [DEBUG] [Thread-23128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:47:28.205 [DEBUG] [Thread-23128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:47:28.205 [DEBUG] [Thread-23128] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:47:28.214 [DEBUG] [Thread-23128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:47:28.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:47:28.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')
2026-04-15T17:47:28.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') -> 00000000
2026-04-15T17:47:28.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:47:28.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:47:28.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:47:28.249 [DEBUG] [Thread-23128] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:47:31.534 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:47:31.535 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:47:39.310 [DEBUG] [Thread-23130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:47:44.814 [DEBUG] [Thread-23131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:47:54.354 [DEBUG] [Thread-23132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:47:58.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:47:58.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:47:58.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T17:47:59.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 47, 23), 6.45258, 64.5593, 0.0, 16.4635, 12.4963, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:47:59.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:47:23
2026-04-15T17:47:59.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:48:00.405 [DEBUG] [Thread-23133] [transport.py] [_log()] starting thread (client mode): 0xf17c2950
2026-04-15T17:48:00.405 [DEBUG] [Thread-23133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:48:00.425 [DEBUG] [Thread-23133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:48:00.425 [INFO] [Thread-23133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:48:00.426 [DEBUG] [Thread-23133] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:48:00.427 [DEBUG] [Thread-23133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:48:00.427 [DEBUG] [Thread-23133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:48:00.427 [DEBUG] [Thread-23133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:48:00.427 [DEBUG] [Thread-23133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:48:00.427 [DEBUG] [Thread-23133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:48:00.427 [DEBUG] [Thread-23133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:48:00.427 [DEBUG] [Thread-23133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:48:00.427 [DEBUG] [Thread-23133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:48:00.427 [DEBUG] [Thread-23133] [transport.py] [_log()] client lang: <none>
2026-04-15T17:48:00.427 [DEBUG] [Thread-23133] [transport.py] [_log()] server lang: <none>
2026-04-15T17:48:00.427 [DEBUG] [Thread-23133] [transport.py] [_log()] kex follows: False
2026-04-15T17:48:00.427 [DEBUG] [Thread-23133] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:48:00.428 [DEBUG] [Thread-23133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:48:00.428 [DEBUG] [Thread-23133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:48:00.428 [DEBUG] [Thread-23133] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:48:00.428 [DEBUG] [Thread-23133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:48:00.428 [DEBUG] [Thread-23133] [transport.py] [_log()] Compression: none
2026-04-15T17:48:00.428 [DEBUG] [Thread-23133] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:48:00.440 [DEBUG] [Thread-23133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:48:00.440 [DEBUG] [Thread-23133] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:48:00.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:48:00.441 [DEBUG] [Thread-23133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:48:00.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:48:00.442 [DEBUG] [Thread-23133] [transport.py] [_log()] userauth is OK
2026-04-15T17:48:00.442 [DEBUG] [Thread-23133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:48:00.442 [DEBUG] [Thread-23133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:48:00.442 [DEBUG] [Thread-23133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:48:00.442 [DEBUG] [Thread-23133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:48:00.458 [INFO] [Thread-23133] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:48:00.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:48:01.280 [DEBUG] [Thread-23133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:48:01.280 [DEBUG] [Thread-23133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:48:01.281 [DEBUG] [Thread-23133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:48:01.321 [DEBUG] [Thread-23133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:48:01.321 [DEBUG] [Thread-23133] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:48:01.325 [DEBUG] [Thread-23133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:48:01.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:48:01.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:48:01.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:48:01.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:48:01.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:48:01.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:48:01.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:48:01.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:48:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:48:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.658121 -999.00  +12.30  18.16     70   +7.10 1 1 1 1 1   887    0 3.95 -58.09 ----- 18.7 18.2 317.8 20.3 14.8 -27.1 14.8 -26.0 14.5 -23.7 14.8 -25.3
2026-04-15T17:48:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:48:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:48:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.658121
2026-04-15T17:48:01.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:48:01.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:48:01.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:48:01.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:48:01.353 [DEBUG] [Thread-23133] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:48:01.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:48:01.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:47:23', tmtdew=6.45258, humidity=64.5593, cloud=0.0, wind=16.4635, temperature=12.4963, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:47:41.654', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:48:01.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:48:01.636 [DEBUG] [Thread-23136] [transport.py] [_log()] starting thread (client mode): 0xf13cbf40
2026-04-15T17:48:01.637 [DEBUG] [Thread-23136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:48:01.651 [DEBUG] [Thread-23136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:48:01.651 [INFO] [Thread-23136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:48:01.658 [DEBUG] [Thread-23136] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:48:01.658 [DEBUG] [Thread-23136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:48:01.658 [DEBUG] [Thread-23136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:48:01.658 [DEBUG] [Thread-23136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:48:01.658 [DEBUG] [Thread-23136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:48:01.658 [DEBUG] [Thread-23136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:48:01.658 [DEBUG] [Thread-23136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:48:01.658 [DEBUG] [Thread-23136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:48:01.658 [DEBUG] [Thread-23136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:48:01.658 [DEBUG] [Thread-23136] [transport.py] [_log()] client lang: <none>
2026-04-15T17:48:01.658 [DEBUG] [Thread-23136] [transport.py] [_log()] server lang: <none>
2026-04-15T17:48:01.658 [DEBUG] [Thread-23136] [transport.py] [_log()] kex follows: False
2026-04-15T17:48:01.658 [DEBUG] [Thread-23136] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:48:01.658 [DEBUG] [Thread-23136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:48:01.659 [DEBUG] [Thread-23136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:48:01.659 [DEBUG] [Thread-23136] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:48:01.659 [DEBUG] [Thread-23136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:48:01.659 [DEBUG] [Thread-23136] [transport.py] [_log()] Compression: none
2026-04-15T17:48:01.659 [DEBUG] [Thread-23136] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:48:01.714 [DEBUG] [Thread-23136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:48:01.714 [DEBUG] [Thread-23136] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:48:01.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:48:01.715 [DEBUG] [Thread-23136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:48:01.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:48:01.771 [DEBUG] [Thread-23136] [transport.py] [_log()] userauth is OK
2026-04-15T17:48:01.771 [DEBUG] [Thread-23136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:48:01.771 [DEBUG] [Thread-23136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:48:01.771 [DEBUG] [Thread-23136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:48:01.772 [DEBUG] [Thread-23136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:48:01.794 [INFO] [Thread-23136] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:48:01.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:48:01.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:48:02.641 [DEBUG] [Thread-23136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:48:02.641 [DEBUG] [Thread-23136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:48:02.689 [DEBUG] [Thread-23136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:48:02.689 [DEBUG] [Thread-23136] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:48:02.698 [DEBUG] [Thread-23136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:48:02.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:48:02.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')
2026-04-15T17:48:02.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
2026-04-15T17:48:02.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:48:02.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:48:02.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:48:02.732 [DEBUG] [Thread-23136] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:48:09.386 [DEBUG] [Thread-23138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:48:24.428 [DEBUG] [Thread-23139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:48:31.686 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:48:31.687 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:48:32.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:48:32.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:48:32.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
2026-04-15T17:48:33.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 47, 59), 6.33826, 65.3411, 0.0, 11.8933, 12.4799, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:48:33.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:47:59
2026-04-15T17:48:34.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:48:34.790 [DEBUG] [Thread-23140] [transport.py] [_log()] starting thread (client mode): 0xee904460
2026-04-15T17:48:34.790 [DEBUG] [Thread-23140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:48:34.810 [DEBUG] [Thread-23140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:48:34.810 [INFO] [Thread-23140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:48:34.813 [DEBUG] [Thread-23140] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:48:34.813 [DEBUG] [Thread-23140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:48:34.813 [DEBUG] [Thread-23140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:48:34.813 [DEBUG] [Thread-23140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:48:34.813 [DEBUG] [Thread-23140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:48:34.813 [DEBUG] [Thread-23140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:48:34.813 [DEBUG] [Thread-23140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:48:34.813 [DEBUG] [Thread-23140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:48:34.814 [DEBUG] [Thread-23140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:48:34.814 [DEBUG] [Thread-23140] [transport.py] [_log()] client lang: <none>
2026-04-15T17:48:34.814 [DEBUG] [Thread-23140] [transport.py] [_log()] server lang: <none>
2026-04-15T17:48:34.814 [DEBUG] [Thread-23140] [transport.py] [_log()] kex follows: False
2026-04-15T17:48:34.814 [DEBUG] [Thread-23140] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:48:34.814 [DEBUG] [Thread-23140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:48:34.814 [DEBUG] [Thread-23140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:48:34.814 [DEBUG] [Thread-23140] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:48:34.814 [DEBUG] [Thread-23140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:48:34.814 [DEBUG] [Thread-23140] [transport.py] [_log()] Compression: none
2026-04-15T17:48:34.814 [DEBUG] [Thread-23140] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:48:34.826 [DEBUG] [Thread-23140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:48:34.826 [DEBUG] [Thread-23140] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:48:34.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:48:34.827 [DEBUG] [Thread-23140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:48:34.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:48:34.828 [DEBUG] [Thread-23140] [transport.py] [_log()] userauth is OK
2026-04-15T17:48:34.828 [DEBUG] [Thread-23140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:48:34.828 [DEBUG] [Thread-23140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:48:34.828 [DEBUG] [Thread-23140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:48:34.828 [DEBUG] [Thread-23140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:48:34.843 [INFO] [Thread-23140] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:48:34.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:48:35.626 [DEBUG] [Thread-23140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:48:35.626 [DEBUG] [Thread-23140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:48:35.627 [DEBUG] [Thread-23140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:48:35.667 [DEBUG] [Thread-23140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:48:35.667 [DEBUG] [Thread-23140] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:48:35.670 [DEBUG] [Thread-23140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:48:35.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:48:35.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:48:35.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:48:35.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:48:35.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:48:35.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:48:35.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:48:35.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:48:35.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:48:35.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.658468 -999.00  +12.30  15.11     70   +7.10 1 1 1 1 1   887    0 4.00 -55.26 ----- 12.7 15.1 302.2 19.4 14.8 -27.0 14.7 -25.9 14.5 -23.3 14.8 -25.3
2026-04-15T17:48:35.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:48:35.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:48:35.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.658468
2026-04-15T17:48:35.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:48:35.697 [DEBUG] [Thread-23140] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:48:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:48:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:48:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:48:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:48:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:47:59', tmtdew=6.33826, humidity=65.3411, cloud=0.0, wind=11.8933, temperature=12.4799, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:48:11.635', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:48:35.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:48:35.963 [DEBUG] [Thread-23143] [transport.py] [_log()] starting thread (client mode): 0xf1336b90
2026-04-15T17:48:35.963 [DEBUG] [Thread-23143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:48:35.977 [DEBUG] [Thread-23143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:48:35.977 [INFO] [Thread-23143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:48:35.985 [DEBUG] [Thread-23143] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:48:35.985 [DEBUG] [Thread-23143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:48:35.985 [DEBUG] [Thread-23143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:48:35.985 [DEBUG] [Thread-23143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:48:35.985 [DEBUG] [Thread-23143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:48:35.985 [DEBUG] [Thread-23143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:48:35.985 [DEBUG] [Thread-23143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:48:35.985 [DEBUG] [Thread-23143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:48:35.985 [DEBUG] [Thread-23143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:48:35.985 [DEBUG] [Thread-23143] [transport.py] [_log()] client lang: <none>
2026-04-15T17:48:35.985 [DEBUG] [Thread-23143] [transport.py] [_log()] server lang: <none>
2026-04-15T17:48:35.986 [DEBUG] [Thread-23143] [transport.py] [_log()] kex follows: False
2026-04-15T17:48:35.986 [DEBUG] [Thread-23143] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:48:35.986 [DEBUG] [Thread-23143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:48:35.986 [DEBUG] [Thread-23143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:48:35.986 [DEBUG] [Thread-23143] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:48:35.986 [DEBUG] [Thread-23143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:48:35.986 [DEBUG] [Thread-23143] [transport.py] [_log()] Compression: none
2026-04-15T17:48:35.986 [DEBUG] [Thread-23143] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:48:36.043 [DEBUG] [Thread-23143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:48:36.044 [DEBUG] [Thread-23143] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:48:36.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:48:36.044 [DEBUG] [Thread-23143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:48:36.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:48:36.099 [DEBUG] [Thread-23143] [transport.py] [_log()] userauth is OK
2026-04-15T17:48:36.099 [DEBUG] [Thread-23143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:48:36.099 [DEBUG] [Thread-23143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:48:36.100 [DEBUG] [Thread-23143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:48:36.100 [DEBUG] [Thread-23143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:48:36.124 [INFO] [Thread-23143] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:48:36.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:48:36.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:48:36.950 [DEBUG] [Thread-23143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:48:36.950 [DEBUG] [Thread-23143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:48:36.998 [DEBUG] [Thread-23143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:48:36.998 [DEBUG] [Thread-23143] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:48:37.008 [DEBUG] [Thread-23143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:48:37.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:48:37.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')
2026-04-15T17:48:37.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') -> 00000000
2026-04-15T17:48:37.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:48:37.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:48:37.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:48:37.043 [DEBUG] [Thread-23143] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:48:39.457 [DEBUG] [Thread-23145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:48:44.895 [DEBUG] [Thread-23146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:48:54.501 [DEBUG] [Thread-23147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:49:07.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:49:07.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:49:07.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
2026-04-15T17:49:08.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 48, 35), 6.36443, 65.2125, 0.0, 14.0803, 12.9923, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:49:08.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:48:35
2026-04-15T17:49:08.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:49:09.229 [DEBUG] [Thread-23148] [transport.py] [_log()] starting thread (client mode): 0xf1350b20
2026-04-15T17:49:09.229 [DEBUG] [Thread-23148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:49:09.249 [DEBUG] [Thread-23148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:49:09.249 [INFO] [Thread-23148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:49:09.252 [DEBUG] [Thread-23148] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:49:09.252 [DEBUG] [Thread-23148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:49:09.252 [DEBUG] [Thread-23148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:49:09.252 [DEBUG] [Thread-23148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:49:09.252 [DEBUG] [Thread-23148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:49:09.252 [DEBUG] [Thread-23148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:49:09.252 [DEBUG] [Thread-23148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:49:09.252 [DEBUG] [Thread-23148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:49:09.252 [DEBUG] [Thread-23148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:49:09.252 [DEBUG] [Thread-23148] [transport.py] [_log()] client lang: <none>
2026-04-15T17:49:09.252 [DEBUG] [Thread-23148] [transport.py] [_log()] server lang: <none>
2026-04-15T17:49:09.253 [DEBUG] [Thread-23148] [transport.py] [_log()] kex follows: False
2026-04-15T17:49:09.253 [DEBUG] [Thread-23148] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:49:09.253 [DEBUG] [Thread-23148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:49:09.253 [DEBUG] [Thread-23148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:49:09.253 [DEBUG] [Thread-23148] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:49:09.253 [DEBUG] [Thread-23148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:49:09.253 [DEBUG] [Thread-23148] [transport.py] [_log()] Compression: none
2026-04-15T17:49:09.253 [DEBUG] [Thread-23148] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:49:09.261 [DEBUG] [Thread-23148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:49:09.261 [DEBUG] [Thread-23148] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:49:09.261 [DEBUG] [Thread-23148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:49:09.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:49:09.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:49:09.262 [DEBUG] [Thread-23148] [transport.py] [_log()] userauth is OK
2026-04-15T17:49:09.262 [DEBUG] [Thread-23148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:49:09.262 [DEBUG] [Thread-23148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:49:09.263 [DEBUG] [Thread-23148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:49:09.263 [DEBUG] [Thread-23148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:49:09.278 [INFO] [Thread-23148] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:49:09.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:49:09.532 [DEBUG] [Thread-23150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:49:10.088 [DEBUG] [Thread-23148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:49:10.089 [DEBUG] [Thread-23148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:49:10.089 [DEBUG] [Thread-23148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:49:10.131 [DEBUG] [Thread-23148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:49:10.131 [DEBUG] [Thread-23148] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:49:10.133 [DEBUG] [Thread-23148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:49:10.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:49:10.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:49:10.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:49:10.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:49:10.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:49:10.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:49:10.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:49:10.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:49:10.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:49:10.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.658815 -999.00  +12.40  13.09     70   +7.20 1 1 1 1 1   887    0 3.92 -57.95 ----- 14.2 13.1 304.0 18.0 14.7 -27.1 14.7 -26.0 14.4 -24.2 14.8 -25.2
2026-04-15T17:49:10.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:49:10.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:49:10.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.658815
2026-04-15T17:49:10.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:49:10.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:49:10.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:49:10.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:49:10.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:49:10.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:48:35', tmtdew=6.36443, humidity=65.2125, cloud=0.0, wind=14.0803, temperature=12.9923, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:48:41.616', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:49:10.153 [DEBUG] [Thread-23148] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:49:10.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:49:10.385 [DEBUG] [Thread-23152] [transport.py] [_log()] starting thread (client mode): 0xf1350a30
2026-04-15T17:49:10.385 [DEBUG] [Thread-23152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:49:10.406 [DEBUG] [Thread-23152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:49:10.406 [INFO] [Thread-23152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:49:10.417 [DEBUG] [Thread-23152] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:49:10.417 [DEBUG] [Thread-23152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:49:10.417 [DEBUG] [Thread-23152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:49:10.417 [DEBUG] [Thread-23152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:49:10.417 [DEBUG] [Thread-23152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:49:10.417 [DEBUG] [Thread-23152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:49:10.417 [DEBUG] [Thread-23152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:49:10.417 [DEBUG] [Thread-23152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:49:10.417 [DEBUG] [Thread-23152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:49:10.418 [DEBUG] [Thread-23152] [transport.py] [_log()] client lang: <none>
2026-04-15T17:49:10.418 [DEBUG] [Thread-23152] [transport.py] [_log()] server lang: <none>
2026-04-15T17:49:10.418 [DEBUG] [Thread-23152] [transport.py] [_log()] kex follows: False
2026-04-15T17:49:10.418 [DEBUG] [Thread-23152] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:49:10.418 [DEBUG] [Thread-23152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:49:10.418 [DEBUG] [Thread-23152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:49:10.418 [DEBUG] [Thread-23152] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:49:10.418 [DEBUG] [Thread-23152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:49:10.418 [DEBUG] [Thread-23152] [transport.py] [_log()] Compression: none
2026-04-15T17:49:10.418 [DEBUG] [Thread-23152] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:49:10.477 [DEBUG] [Thread-23152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:49:10.477 [DEBUG] [Thread-23152] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:49:10.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:49:10.478 [DEBUG] [Thread-23152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:49:10.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:49:10.535 [DEBUG] [Thread-23152] [transport.py] [_log()] userauth is OK
2026-04-15T17:49:10.535 [DEBUG] [Thread-23152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:49:10.535 [DEBUG] [Thread-23152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:49:10.535 [DEBUG] [Thread-23152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:49:10.535 [DEBUG] [Thread-23152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:49:10.553 [INFO] [Thread-23152] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:49:10.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:49:10.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:49:11.348 [DEBUG] [Thread-23152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:49:11.349 [DEBUG] [Thread-23152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:49:11.396 [DEBUG] [Thread-23152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:49:11.396 [DEBUG] [Thread-23152] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:49:11.405 [DEBUG] [Thread-23152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:49:11.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:49:11.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')
2026-04-15T17:49:11.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
2026-04-15T17:49:11.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:49:11.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:49:11.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:49:11.439 [DEBUG] [Thread-23152] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:49:24.565 [DEBUG] [Thread-23154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:49:31.826 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:49:31.827 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:49:39.609 [DEBUG] [Thread-23155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:49:41.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:49:41.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:49:41.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
2026-04-15T17:49:42.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 49, 10), 6.36469, 65.4573, 0.0, 10.2344, 12.5798, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:49:42.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:49:10
2026-04-15T17:49:43.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:49:43.515 [DEBUG] [Thread-23156] [transport.py] [_log()] starting thread (client mode): 0xee9077f0
2026-04-15T17:49:43.515 [DEBUG] [Thread-23156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:49:43.534 [DEBUG] [Thread-23156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:49:43.534 [INFO] [Thread-23156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:49:43.537 [DEBUG] [Thread-23156] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:49:43.537 [DEBUG] [Thread-23156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:49:43.537 [DEBUG] [Thread-23156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:49:43.537 [DEBUG] [Thread-23156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:49:43.537 [DEBUG] [Thread-23156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:49:43.538 [DEBUG] [Thread-23156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:49:43.538 [DEBUG] [Thread-23156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:49:43.538 [DEBUG] [Thread-23156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:49:43.538 [DEBUG] [Thread-23156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:49:43.538 [DEBUG] [Thread-23156] [transport.py] [_log()] client lang: <none>
2026-04-15T17:49:43.538 [DEBUG] [Thread-23156] [transport.py] [_log()] server lang: <none>
2026-04-15T17:49:43.538 [DEBUG] [Thread-23156] [transport.py] [_log()] kex follows: False
2026-04-15T17:49:43.538 [DEBUG] [Thread-23156] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:49:43.538 [DEBUG] [Thread-23156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:49:43.538 [DEBUG] [Thread-23156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:49:43.538 [DEBUG] [Thread-23156] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:49:43.538 [DEBUG] [Thread-23156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:49:43.538 [DEBUG] [Thread-23156] [transport.py] [_log()] Compression: none
2026-04-15T17:49:43.538 [DEBUG] [Thread-23156] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:49:43.556 [DEBUG] [Thread-23156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:49:43.556 [DEBUG] [Thread-23156] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:49:43.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:49:43.557 [DEBUG] [Thread-23156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:49:43.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:49:43.558 [DEBUG] [Thread-23156] [transport.py] [_log()] userauth is OK
2026-04-15T17:49:43.558 [DEBUG] [Thread-23156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:49:43.558 [DEBUG] [Thread-23156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:49:43.558 [DEBUG] [Thread-23156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:49:43.558 [DEBUG] [Thread-23156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:49:43.572 [INFO] [Thread-23156] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:49:43.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:49:44.361 [DEBUG] [Thread-23156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:49:44.361 [DEBUG] [Thread-23156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:49:44.362 [DEBUG] [Thread-23156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:49:44.402 [DEBUG] [Thread-23156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:49:44.402 [DEBUG] [Thread-23156] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:49:44.405 [DEBUG] [Thread-23156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:49:44.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:49:44.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:49:44.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:49:44.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:49:44.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:49:44.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:49:44.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:49:44.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:49:44.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:49:44.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.659162 -999.00  +12.50  12.10     70   +7.30 1 1 1 1 1   887    0 4.12 -52.33 ----- 11.6 12.1 298.6 18.2 14.7 -26.7 14.6 -25.8 14.4 -23.0 14.8 -25.0
2026-04-15T17:49:44.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:49:44.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:49:44.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.659162
2026-04-15T17:49:44.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:49:44.430 [DEBUG] [Thread-23156] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:49:44.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:49:44.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:49:44.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:49:44.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:49:44.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:49:10', tmtdew=6.36469, humidity=65.4573, cloud=0.0, wind=10.2344, temperature=12.5798, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:49:11.597', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:49:44.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:49:44.694 [DEBUG] [Thread-23159] [transport.py] [_log()] starting thread (client mode): 0xee9bc790
2026-04-15T17:49:44.694 [DEBUG] [Thread-23159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:49:44.708 [DEBUG] [Thread-23159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:49:44.708 [INFO] [Thread-23159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:49:44.715 [DEBUG] [Thread-23159] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:49:44.716 [DEBUG] [Thread-23159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:49:44.716 [DEBUG] [Thread-23159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:49:44.716 [DEBUG] [Thread-23159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:49:44.716 [DEBUG] [Thread-23159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:49:44.716 [DEBUG] [Thread-23159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:49:44.716 [DEBUG] [Thread-23159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:49:44.716 [DEBUG] [Thread-23159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:49:44.716 [DEBUG] [Thread-23159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:49:44.716 [DEBUG] [Thread-23159] [transport.py] [_log()] client lang: <none>
2026-04-15T17:49:44.716 [DEBUG] [Thread-23159] [transport.py] [_log()] server lang: <none>
2026-04-15T17:49:44.716 [DEBUG] [Thread-23159] [transport.py] [_log()] kex follows: False
2026-04-15T17:49:44.716 [DEBUG] [Thread-23159] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:49:44.717 [DEBUG] [Thread-23159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:49:44.717 [DEBUG] [Thread-23159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:49:44.717 [DEBUG] [Thread-23159] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:49:44.717 [DEBUG] [Thread-23159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:49:44.717 [DEBUG] [Thread-23159] [transport.py] [_log()] Compression: none
2026-04-15T17:49:44.717 [DEBUG] [Thread-23159] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:49:44.775 [DEBUG] [Thread-23159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:49:44.776 [DEBUG] [Thread-23159] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:49:44.776 [DEBUG] [Thread-23159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:49:44.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:49:44.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:49:44.831 [DEBUG] [Thread-23159] [transport.py] [_log()] userauth is OK
2026-04-15T17:49:44.831 [DEBUG] [Thread-23159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:49:44.832 [DEBUG] [Thread-23159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:49:44.832 [DEBUG] [Thread-23159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:49:44.832 [DEBUG] [Thread-23159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:49:44.856 [INFO] [Thread-23159] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:49:44.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:49:44.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:49:44.970 [DEBUG] [Thread-23161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:49:45.674 [DEBUG] [Thread-23159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:49:45.674 [DEBUG] [Thread-23159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:49:45.722 [DEBUG] [Thread-23159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:49:45.722 [DEBUG] [Thread-23159] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:49:45.731 [DEBUG] [Thread-23159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:49:45.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:49:45.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')
2026-04-15T17:49:45.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
2026-04-15T17:49:45.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:49:45.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:49:45.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:49:45.766 [DEBUG] [Thread-23159] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:49:54.640 [DEBUG] [Thread-23162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:50:09.684 [DEBUG] [Thread-23163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:50:15.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:50:15.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:50:15.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
2026-04-15T17:50:17.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 49, 45), 6.52938, 64.4838, 0.0, 14.9623, 13.0258, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:50:17.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:49:45
2026-04-15T17:50:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:50:17.897 [DEBUG] [Thread-23164] [transport.py] [_log()] starting thread (client mode): 0xee9045b0
2026-04-15T17:50:17.897 [DEBUG] [Thread-23164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:50:17.916 [DEBUG] [Thread-23164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:50:17.916 [INFO] [Thread-23164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:50:17.919 [DEBUG] [Thread-23164] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:50:17.919 [DEBUG] [Thread-23164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:50:17.919 [DEBUG] [Thread-23164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:50:17.920 [DEBUG] [Thread-23164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:50:17.920 [DEBUG] [Thread-23164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:50:17.920 [DEBUG] [Thread-23164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:50:17.920 [DEBUG] [Thread-23164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:50:17.920 [DEBUG] [Thread-23164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:50:17.920 [DEBUG] [Thread-23164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:50:17.920 [DEBUG] [Thread-23164] [transport.py] [_log()] client lang: <none>
2026-04-15T17:50:17.920 [DEBUG] [Thread-23164] [transport.py] [_log()] server lang: <none>
2026-04-15T17:50:17.920 [DEBUG] [Thread-23164] [transport.py] [_log()] kex follows: False
2026-04-15T17:50:17.920 [DEBUG] [Thread-23164] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:50:17.920 [DEBUG] [Thread-23164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:50:17.921 [DEBUG] [Thread-23164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:50:17.921 [DEBUG] [Thread-23164] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:50:17.921 [DEBUG] [Thread-23164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:50:17.921 [DEBUG] [Thread-23164] [transport.py] [_log()] Compression: none
2026-04-15T17:50:17.921 [DEBUG] [Thread-23164] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:50:17.938 [DEBUG] [Thread-23164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:50:17.939 [DEBUG] [Thread-23164] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:50:17.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:50:17.939 [DEBUG] [Thread-23164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:50:17.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:50:17.940 [DEBUG] [Thread-23164] [transport.py] [_log()] userauth is OK
2026-04-15T17:50:17.940 [DEBUG] [Thread-23164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:50:17.941 [DEBUG] [Thread-23164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:50:17.941 [DEBUG] [Thread-23164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:50:17.941 [DEBUG] [Thread-23164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:50:17.966 [INFO] [Thread-23164] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:50:17.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:50:20.902 [DEBUG] [Thread-23164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:50:20.902 [DEBUG] [Thread-23164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:50:20.903 [DEBUG] [Thread-23164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:50:20.943 [DEBUG] [Thread-23164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:50:20.943 [DEBUG] [Thread-23164] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:50:20.946 [DEBUG] [Thread-23164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:50:20.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:50:20.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:50:20.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:50:20.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:50:21.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:50:21.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:50:21.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:50:21.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:50:21.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:50:21.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.659509 -999.00  +12.50  12.97     70   +7.30 1 1 1 1 1   887    0 4.05 -52.03 ----- 12.3 13.0 302.4 14.6 14.7 -26.6 14.6 -25.7 14.5 -23.3 14.8 -24.9
2026-04-15T17:50:21.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:50:21.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:50:21.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.659509
2026-04-15T17:50:21.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:50:21.004 [DEBUG] [Thread-23164] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:50:21.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:50:21.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:50:21.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:50:21.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:50:21.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:49:45', tmtdew=6.52938, humidity=64.4838, cloud=0.0, wind=14.9623, temperature=13.0258, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:49:41.578', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:50:21.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:50:21.262 [DEBUG] [Thread-23167] [transport.py] [_log()] starting thread (client mode): 0xee9053c0
2026-04-15T17:50:21.262 [DEBUG] [Thread-23167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:50:21.276 [DEBUG] [Thread-23167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:50:21.277 [INFO] [Thread-23167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:50:21.284 [DEBUG] [Thread-23167] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:50:21.284 [DEBUG] [Thread-23167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:50:21.284 [DEBUG] [Thread-23167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:50:21.284 [DEBUG] [Thread-23167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:50:21.285 [DEBUG] [Thread-23167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:50:21.285 [DEBUG] [Thread-23167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:50:21.285 [DEBUG] [Thread-23167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:50:21.285 [DEBUG] [Thread-23167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:50:21.285 [DEBUG] [Thread-23167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:50:21.285 [DEBUG] [Thread-23167] [transport.py] [_log()] client lang: <none>
2026-04-15T17:50:21.285 [DEBUG] [Thread-23167] [transport.py] [_log()] server lang: <none>
2026-04-15T17:50:21.285 [DEBUG] [Thread-23167] [transport.py] [_log()] kex follows: False
2026-04-15T17:50:21.285 [DEBUG] [Thread-23167] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:50:21.285 [DEBUG] [Thread-23167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:50:21.285 [DEBUG] [Thread-23167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:50:21.285 [DEBUG] [Thread-23167] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:50:21.286 [DEBUG] [Thread-23167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:50:21.286 [DEBUG] [Thread-23167] [transport.py] [_log()] Compression: none
2026-04-15T17:50:21.286 [DEBUG] [Thread-23167] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:50:21.347 [DEBUG] [Thread-23167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:50:21.347 [DEBUG] [Thread-23167] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:50:21.348 [DEBUG] [Thread-23167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:50:21.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:50:21.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:50:21.403 [DEBUG] [Thread-23167] [transport.py] [_log()] userauth is OK
2026-04-15T17:50:21.404 [DEBUG] [Thread-23167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:50:21.404 [DEBUG] [Thread-23167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:50:21.404 [DEBUG] [Thread-23167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:50:21.404 [DEBUG] [Thread-23167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:50:21.430 [INFO] [Thread-23167] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:50:21.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:50:21.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:50:22.231 [DEBUG] [Thread-23167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:50:22.231 [DEBUG] [Thread-23167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:50:22.279 [DEBUG] [Thread-23167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:50:22.279 [DEBUG] [Thread-23167] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:50:22.288 [DEBUG] [Thread-23167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:50:22.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:50:22.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')
2026-04-15T17:50: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') -> 00000000
2026-04-15T17:50:22.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:50:22.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:50:22.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:50:22.323 [DEBUG] [Thread-23167] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:50:24.716 [DEBUG] [Thread-23169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:50:31.964 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:50:31.966 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:50:39.760 [DEBUG] [Thread-23170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:50:45.072 [DEBUG] [Thread-23171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:50:52.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:50:52.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:50:52.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
2026-04-15T17:50:53.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 50, 21), 6.48622, 64.6429, 0.0, 10.7813, 12.6467, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:50:53.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:50:21
2026-04-15T17:50:54.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:50:54.466 [DEBUG] [Thread-23172] [transport.py] [_log()] starting thread (client mode): 0xee905f00
2026-04-15T17:50:54.466 [DEBUG] [Thread-23172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:50:54.485 [DEBUG] [Thread-23172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:50:54.485 [INFO] [Thread-23172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:50:54.489 [DEBUG] [Thread-23172] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:50:54.489 [DEBUG] [Thread-23172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:50:54.489 [DEBUG] [Thread-23172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:50:54.489 [DEBUG] [Thread-23172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:50:54.489 [DEBUG] [Thread-23172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:50:54.489 [DEBUG] [Thread-23172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:50:54.489 [DEBUG] [Thread-23172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:50:54.489 [DEBUG] [Thread-23172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:50:54.489 [DEBUG] [Thread-23172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:50:54.489 [DEBUG] [Thread-23172] [transport.py] [_log()] client lang: <none>
2026-04-15T17:50:54.489 [DEBUG] [Thread-23172] [transport.py] [_log()] server lang: <none>
2026-04-15T17:50:54.489 [DEBUG] [Thread-23172] [transport.py] [_log()] kex follows: False
2026-04-15T17:50:54.490 [DEBUG] [Thread-23172] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:50:54.490 [DEBUG] [Thread-23172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:50:54.490 [DEBUG] [Thread-23172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:50:54.490 [DEBUG] [Thread-23172] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:50:54.490 [DEBUG] [Thread-23172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:50:54.490 [DEBUG] [Thread-23172] [transport.py] [_log()] Compression: none
2026-04-15T17:50:54.490 [DEBUG] [Thread-23172] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:50:54.498 [DEBUG] [Thread-23172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:50:54.499 [DEBUG] [Thread-23172] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:50:54.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:50:54.499 [DEBUG] [Thread-23172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:50:54.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:50:54.500 [DEBUG] [Thread-23172] [transport.py] [_log()] userauth is OK
2026-04-15T17:50:54.500 [DEBUG] [Thread-23172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:50:54.500 [DEBUG] [Thread-23172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:50:54.500 [DEBUG] [Thread-23172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:50:54.500 [DEBUG] [Thread-23172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:50:54.518 [INFO] [Thread-23172] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:50:54.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:50:54.793 [DEBUG] [Thread-23174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:50:55.297 [DEBUG] [Thread-23172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:50:55.298 [DEBUG] [Thread-23172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:50:55.298 [DEBUG] [Thread-23172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:50:55.338 [DEBUG] [Thread-23172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:50:55.338 [DEBUG] [Thread-23172] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:50:55.341 [DEBUG] [Thread-23172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:50:55.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:50:55.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:50:55.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:50:55.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:50:55.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:50:55.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:50:55.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:50:55.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:50:55.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:50:55.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.659857 -999.00  +12.60  12.10     70   +7.40 1 1 1 1 1   887    0 3.98 -53.47 ----- 13.1 12.1 304.4 15.9 14.7 -26.6 14.6 -25.7 14.6 -22.9 14.9 -24.8
2026-04-15T17:50:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:50:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:50:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.659857
2026-04-15T17:50:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:50:55.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:50:55.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:50:55.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:50:55.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:50:55.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:50:21', tmtdew=6.48622, humidity=64.6429, cloud=0.0, wind=10.7813, temperature=12.6467, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:50:11.645', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:50:55.368 [DEBUG] [Thread-23172] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:50:55.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:50:55.625 [DEBUG] [Thread-23176] [transport.py] [_log()] starting thread (client mode): 0xee9053f0
2026-04-15T17:50:55.625 [DEBUG] [Thread-23176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:50:55.639 [DEBUG] [Thread-23176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:50:55.639 [INFO] [Thread-23176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:50:55.646 [DEBUG] [Thread-23176] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:50:55.647 [DEBUG] [Thread-23176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:50:55.647 [DEBUG] [Thread-23176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:50:55.647 [DEBUG] [Thread-23176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:50:55.647 [DEBUG] [Thread-23176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:50:55.647 [DEBUG] [Thread-23176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:50:55.647 [DEBUG] [Thread-23176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:50:55.647 [DEBUG] [Thread-23176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:50:55.647 [DEBUG] [Thread-23176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:50:55.647 [DEBUG] [Thread-23176] [transport.py] [_log()] client lang: <none>
2026-04-15T17:50:55.647 [DEBUG] [Thread-23176] [transport.py] [_log()] server lang: <none>
2026-04-15T17:50:55.647 [DEBUG] [Thread-23176] [transport.py] [_log()] kex follows: False
2026-04-15T17:50:55.647 [DEBUG] [Thread-23176] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:50:55.647 [DEBUG] [Thread-23176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:50:55.648 [DEBUG] [Thread-23176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:50:55.648 [DEBUG] [Thread-23176] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:50:55.648 [DEBUG] [Thread-23176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:50:55.648 [DEBUG] [Thread-23176] [transport.py] [_log()] Compression: none
2026-04-15T17:50:55.648 [DEBUG] [Thread-23176] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:50:55.702 [DEBUG] [Thread-23176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:50:55.703 [DEBUG] [Thread-23176] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:50:55.703 [DEBUG] [Thread-23176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:50:55.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:50:55.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:50:55.759 [DEBUG] [Thread-23176] [transport.py] [_log()] userauth is OK
2026-04-15T17:50:55.760 [DEBUG] [Thread-23176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:50:55.760 [DEBUG] [Thread-23176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:50:55.760 [DEBUG] [Thread-23176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:50:55.760 [DEBUG] [Thread-23176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:50:55.785 [INFO] [Thread-23176] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:50:55.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:50:55.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:50:56.596 [DEBUG] [Thread-23176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:50:56.597 [DEBUG] [Thread-23176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:50:56.644 [DEBUG] [Thread-23176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:50:56.644 [DEBUG] [Thread-23176] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:50:56.653 [DEBUG] [Thread-23176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:50:56.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:50:56.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')
2026-04-15T17:50:56.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
2026-04-15T17:50:56.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:50:56.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:50:56.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:50:56.687 [DEBUG] [Thread-23176] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:51:09.824 [DEBUG] [Thread-23178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:51:24.871 [DEBUG] [Thread-23179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:51:26.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:51:26.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:51:26.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
2026-04-15T17:51:27.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 50, 57), 6.47126, 64.7092, 0.0, 12.7048, 12.5967, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:51:27.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:50:57
2026-04-15T17:51:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:51:28.871 [DEBUG] [Thread-23180] [transport.py] [_log()] starting thread (client mode): 0xee904b50
2026-04-15T17:51:28.871 [DEBUG] [Thread-23180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:51:28.892 [DEBUG] [Thread-23180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:51:28.892 [INFO] [Thread-23180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:51:28.895 [DEBUG] [Thread-23180] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:51:28.895 [DEBUG] [Thread-23180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:51:28.895 [DEBUG] [Thread-23180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:51:28.895 [DEBUG] [Thread-23180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:51:28.896 [DEBUG] [Thread-23180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:51:28.896 [DEBUG] [Thread-23180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:51:28.896 [DEBUG] [Thread-23180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:51:28.896 [DEBUG] [Thread-23180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:51:28.896 [DEBUG] [Thread-23180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:51:28.896 [DEBUG] [Thread-23180] [transport.py] [_log()] client lang: <none>
2026-04-15T17:51:28.896 [DEBUG] [Thread-23180] [transport.py] [_log()] server lang: <none>
2026-04-15T17:51:28.896 [DEBUG] [Thread-23180] [transport.py] [_log()] kex follows: False
2026-04-15T17:51:28.896 [DEBUG] [Thread-23180] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:51:28.896 [DEBUG] [Thread-23180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:51:28.896 [DEBUG] [Thread-23180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:51:28.896 [DEBUG] [Thread-23180] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:51:28.897 [DEBUG] [Thread-23180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:51:28.897 [DEBUG] [Thread-23180] [transport.py] [_log()] Compression: none
2026-04-15T17:51:28.897 [DEBUG] [Thread-23180] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:51:28.914 [DEBUG] [Thread-23180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:51:28.914 [DEBUG] [Thread-23180] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:51:28.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:51:28.915 [DEBUG] [Thread-23180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:51:28.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:51:28.916 [DEBUG] [Thread-23180] [transport.py] [_log()] userauth is OK
2026-04-15T17:51:28.916 [DEBUG] [Thread-23180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:51:28.917 [DEBUG] [Thread-23180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:51:28.917 [DEBUG] [Thread-23180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:51:28.917 [DEBUG] [Thread-23180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:51:28.952 [INFO] [Thread-23180] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:51:28.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:51:29.758 [DEBUG] [Thread-23180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:51:29.758 [DEBUG] [Thread-23180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:51:29.758 [DEBUG] [Thread-23180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:51:29.799 [DEBUG] [Thread-23180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:51:29.799 [DEBUG] [Thread-23180] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:51:29.801 [DEBUG] [Thread-23180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:51:29.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:51:29.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:51:29.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:51:29.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:51:29.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:51:29.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:51:29.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:51:29.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:51:29.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:51:29.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.660204 -999.00  +12.60   9.16     70   +7.30 1 1 1 1 1   887    0 3.85 -53.08 ----- 16.5 9.2 304.6 15.1 14.7 -26.6 14.6 -25.4 14.6 -22.9 14.9 -24.7
2026-04-15T17:51:29.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:51:29.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:51:29.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.660204
2026-04-15T17:51:29.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:51:29.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:51:29.823 [DEBUG] [Thread-23180] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:51:29.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:51:29.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:51:29.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:51:29.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:50:57', tmtdew=6.47126, humidity=64.7092, cloud=0.0, wind=12.7048, temperature=12.5967, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:50:41.626', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:51:30.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:51:30.065 [DEBUG] [Thread-23183] [transport.py] [_log()] starting thread (client mode): 0xee904ee0
2026-04-15T17:51:30.065 [DEBUG] [Thread-23183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:51:30.080 [DEBUG] [Thread-23183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:51:30.080 [INFO] [Thread-23183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:51:30.087 [DEBUG] [Thread-23183] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:51:30.087 [DEBUG] [Thread-23183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:51:30.087 [DEBUG] [Thread-23183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:51:30.087 [DEBUG] [Thread-23183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:51:30.087 [DEBUG] [Thread-23183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:51:30.087 [DEBUG] [Thread-23183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:51:30.087 [DEBUG] [Thread-23183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:51:30.087 [DEBUG] [Thread-23183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:51:30.087 [DEBUG] [Thread-23183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:51:30.087 [DEBUG] [Thread-23183] [transport.py] [_log()] client lang: <none>
2026-04-15T17:51:30.087 [DEBUG] [Thread-23183] [transport.py] [_log()] server lang: <none>
2026-04-15T17:51:30.088 [DEBUG] [Thread-23183] [transport.py] [_log()] kex follows: False
2026-04-15T17:51:30.088 [DEBUG] [Thread-23183] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:51:30.088 [DEBUG] [Thread-23183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:51:30.088 [DEBUG] [Thread-23183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:51:30.088 [DEBUG] [Thread-23183] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:51:30.088 [DEBUG] [Thread-23183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:51:30.088 [DEBUG] [Thread-23183] [transport.py] [_log()] Compression: none
2026-04-15T17:51:30.088 [DEBUG] [Thread-23183] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:51:30.143 [DEBUG] [Thread-23183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:51:30.144 [DEBUG] [Thread-23183] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:51:30.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:51:30.144 [DEBUG] [Thread-23183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:51:30.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:51:30.200 [DEBUG] [Thread-23183] [transport.py] [_log()] userauth is OK
2026-04-15T17:51:30.200 [DEBUG] [Thread-23183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:51:30.200 [DEBUG] [Thread-23183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:51:30.200 [DEBUG] [Thread-23183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:51:30.200 [DEBUG] [Thread-23183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:51:30.223 [INFO] [Thread-23183] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:51:30.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:51:30.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:51:31.049 [DEBUG] [Thread-23183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:51:31.049 [DEBUG] [Thread-23183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:51:31.097 [DEBUG] [Thread-23183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:51:31.097 [DEBUG] [Thread-23183] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:51:31.106 [DEBUG] [Thread-23183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:51:31.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:51:31.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')
2026-04-15T17:51:31.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
2026-04-15T17:51:31.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:51:31.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:51:31.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:51:31.143 [DEBUG] [Thread-23183] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:51:32.105 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:51:32.107 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:51:39.902 [DEBUG] [Thread-23185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:51:45.150 [DEBUG] [Thread-23186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:51:54.944 [DEBUG] [Thread-23187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:52:01.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:52:01.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:52:01.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
2026-04-15T17:52:02.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 51, 32), 6.46166, 64.7592, 0.0, 12.3696, 12.6302, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:52:02.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:51:32
2026-04-15T17:52:02.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:52:03.272 [DEBUG] [Thread-23188] [transport.py] [_log()] starting thread (client mode): 0xee9bc880
2026-04-15T17:52:03.272 [DEBUG] [Thread-23188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:52:03.291 [DEBUG] [Thread-23188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:52:03.291 [INFO] [Thread-23188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:52:03.294 [DEBUG] [Thread-23188] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:52:03.295 [DEBUG] [Thread-23188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:52:03.295 [DEBUG] [Thread-23188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:52:03.295 [DEBUG] [Thread-23188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:52:03.295 [DEBUG] [Thread-23188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:52:03.295 [DEBUG] [Thread-23188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:52:03.295 [DEBUG] [Thread-23188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:52:03.295 [DEBUG] [Thread-23188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:52:03.295 [DEBUG] [Thread-23188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:52:03.295 [DEBUG] [Thread-23188] [transport.py] [_log()] client lang: <none>
2026-04-15T17:52:03.295 [DEBUG] [Thread-23188] [transport.py] [_log()] server lang: <none>
2026-04-15T17:52:03.295 [DEBUG] [Thread-23188] [transport.py] [_log()] kex follows: False
2026-04-15T17:52:03.296 [DEBUG] [Thread-23188] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:52:03.296 [DEBUG] [Thread-23188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:52:03.296 [DEBUG] [Thread-23188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:52:03.296 [DEBUG] [Thread-23188] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:52:03.296 [DEBUG] [Thread-23188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:52:03.296 [DEBUG] [Thread-23188] [transport.py] [_log()] Compression: none
2026-04-15T17:52:03.296 [DEBUG] [Thread-23188] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:52:03.314 [DEBUG] [Thread-23188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:52:03.314 [DEBUG] [Thread-23188] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:52:03.315 [DEBUG] [Thread-23188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:52:03.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:52:03.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:52:03.316 [DEBUG] [Thread-23188] [transport.py] [_log()] userauth is OK
2026-04-15T17:52:03.316 [DEBUG] [Thread-23188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:52:03.316 [DEBUG] [Thread-23188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:52:03.316 [DEBUG] [Thread-23188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:52:03.316 [DEBUG] [Thread-23188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:52:03.341 [INFO] [Thread-23188] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:52:03.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:52:04.137 [DEBUG] [Thread-23188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:52:04.138 [DEBUG] [Thread-23188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:52:04.138 [DEBUG] [Thread-23188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:52:04.178 [DEBUG] [Thread-23188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:52:04.178 [DEBUG] [Thread-23188] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:52:04.181 [DEBUG] [Thread-23188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:52:04.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:52:04.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:52:04.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:52:04.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:52:04.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:52:04.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:52:04.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:52:04.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:52:04.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:52:04.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.660551 -999.00  +12.60  16.52     69   +7.20 1 1 1 1 1   887    0 4.22 -48.74 ----- 14.0 16.5 309.4 18.3 14.8 -26.7 14.6 -25.5 14.6 -23.2 15.1 -25.1
2026-04-15T17:52:04.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:52:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:52:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.660551
2026-04-15T17:52:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:52:04.207 [DEBUG] [Thread-23188] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:52:04.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:52:04.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:52:04.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:52:04.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:52:04.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:51:32', tmtdew=6.46166, humidity=64.7592, cloud=0.0, wind=12.3696, temperature=12.6302, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:51:11.606', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:52:04.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:52:04.466 [DEBUG] [Thread-23191] [transport.py] [_log()] starting thread (client mode): 0xee9bd060
2026-04-15T17:52:04.466 [DEBUG] [Thread-23191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:52:04.483 [DEBUG] [Thread-23191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:52:04.483 [INFO] [Thread-23191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:52:04.491 [DEBUG] [Thread-23191] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:52:04.491 [DEBUG] [Thread-23191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:52:04.491 [DEBUG] [Thread-23191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:52:04.491 [DEBUG] [Thread-23191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:52:04.491 [DEBUG] [Thread-23191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:52:04.491 [DEBUG] [Thread-23191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:52:04.491 [DEBUG] [Thread-23191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:52:04.491 [DEBUG] [Thread-23191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:52:04.491 [DEBUG] [Thread-23191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:52:04.491 [DEBUG] [Thread-23191] [transport.py] [_log()] client lang: <none>
2026-04-15T17:52:04.491 [DEBUG] [Thread-23191] [transport.py] [_log()] server lang: <none>
2026-04-15T17:52:04.491 [DEBUG] [Thread-23191] [transport.py] [_log()] kex follows: False
2026-04-15T17:52:04.492 [DEBUG] [Thread-23191] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:52:04.492 [DEBUG] [Thread-23191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:52:04.492 [DEBUG] [Thread-23191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:52:04.492 [DEBUG] [Thread-23191] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:52:04.492 [DEBUG] [Thread-23191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:52:04.492 [DEBUG] [Thread-23191] [transport.py] [_log()] Compression: none
2026-04-15T17:52:04.492 [DEBUG] [Thread-23191] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:52:04.551 [DEBUG] [Thread-23191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:52:04.552 [DEBUG] [Thread-23191] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:52:04.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:52:04.552 [DEBUG] [Thread-23191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:52:04.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:52:04.608 [DEBUG] [Thread-23191] [transport.py] [_log()] userauth is OK
2026-04-15T17:52:04.608 [DEBUG] [Thread-23191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:52:04.608 [DEBUG] [Thread-23191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:52:04.608 [DEBUG] [Thread-23191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:52:04.608 [DEBUG] [Thread-23191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:52:04.634 [INFO] [Thread-23191] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:52:04.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:52:04.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:52:05.518 [DEBUG] [Thread-23191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:52:05.518 [DEBUG] [Thread-23191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:52:05.566 [DEBUG] [Thread-23191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:52:05.566 [DEBUG] [Thread-23191] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:52:05.575 [DEBUG] [Thread-23191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:52:05.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:52:05.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T17:52:05.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T17:52:05.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:52:05.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:52:05.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:52:05.610 [DEBUG] [Thread-23191] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:52:09.976 [DEBUG] [Thread-23193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:52:25.019 [DEBUG] [Thread-23194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:52:32.248 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:52:32.249 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:52:35.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:52:35.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:52:35.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
2026-04-15T17:52:36.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 52, 7), 6.53198, 64.4446, 0.0, 12.2461, 12.6138, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:52:36.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:52:07
2026-04-15T17:52:37.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:52:37.781 [DEBUG] [Thread-23195] [transport.py] [_log()] starting thread (client mode): 0xee9074f0
2026-04-15T17:52:37.781 [DEBUG] [Thread-23195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:52:37.802 [DEBUG] [Thread-23195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:52:37.802 [INFO] [Thread-23195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:52:37.806 [DEBUG] [Thread-23195] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:52:37.806 [DEBUG] [Thread-23195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:52:37.806 [DEBUG] [Thread-23195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:52:37.806 [DEBUG] [Thread-23195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:52:37.806 [DEBUG] [Thread-23195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:52:37.806 [DEBUG] [Thread-23195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:52:37.806 [DEBUG] [Thread-23195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:52:37.806 [DEBUG] [Thread-23195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:52:37.806 [DEBUG] [Thread-23195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:52:37.807 [DEBUG] [Thread-23195] [transport.py] [_log()] client lang: <none>
2026-04-15T17:52:37.807 [DEBUG] [Thread-23195] [transport.py] [_log()] server lang: <none>
2026-04-15T17:52:37.807 [DEBUG] [Thread-23195] [transport.py] [_log()] kex follows: False
2026-04-15T17:52:37.807 [DEBUG] [Thread-23195] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:52:37.807 [DEBUG] [Thread-23195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:52:37.807 [DEBUG] [Thread-23195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:52:37.807 [DEBUG] [Thread-23195] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:52:37.807 [DEBUG] [Thread-23195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:52:37.807 [DEBUG] [Thread-23195] [transport.py] [_log()] Compression: none
2026-04-15T17:52:37.807 [DEBUG] [Thread-23195] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:52:37.825 [DEBUG] [Thread-23195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:52:37.825 [DEBUG] [Thread-23195] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:52:37.825 [DEBUG] [Thread-23195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:52:37.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:52:37.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:52:37.826 [DEBUG] [Thread-23195] [transport.py] [_log()] userauth is OK
2026-04-15T17:52:37.827 [DEBUG] [Thread-23195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:52:37.827 [DEBUG] [Thread-23195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:52:37.827 [DEBUG] [Thread-23195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:52:37.827 [DEBUG] [Thread-23195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:52:37.854 [INFO] [Thread-23195] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:52:37.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:52:38.629 [DEBUG] [Thread-23195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:52:38.629 [DEBUG] [Thread-23195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:52:38.630 [DEBUG] [Thread-23195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:52:38.670 [DEBUG] [Thread-23195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:52:38.670 [DEBUG] [Thread-23195] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:52:38.673 [DEBUG] [Thread-23195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:52:38.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:52:38.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:52:38.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:52:38.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:52:38.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:52:38.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:52:38.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:52:38.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:52:38.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:52:38.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.660898 -999.00  +12.60  12.33     70   +7.30 1 1 1 1 1   887    0 4.11 -49.59 ----- 13.5 12.3 321.6 15.7 14.7 -26.7 14.6 -25.5 14.7 -23.2 15.2 -25.0
2026-04-15T17:52:38.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:52:38.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:52:38.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.660898
2026-04-15T17:52:38.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:52:38.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:52:38.700 [DEBUG] [Thread-23195] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:52:38.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:52:38.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:52:38.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:52:38.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:52:07', tmtdew=6.53198, humidity=64.4446, cloud=0.0, wind=12.2461, temperature=12.6138, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:51:41.587', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:52:38.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:52:38.959 [DEBUG] [Thread-23198] [transport.py] [_log()] starting thread (client mode): 0xee9be800
2026-04-15T17:52:38.959 [DEBUG] [Thread-23198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:52:38.973 [DEBUG] [Thread-23198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:52:38.973 [INFO] [Thread-23198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:52:38.980 [DEBUG] [Thread-23198] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:52:38.980 [DEBUG] [Thread-23198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:52:38.981 [DEBUG] [Thread-23198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:52:38.981 [DEBUG] [Thread-23198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:52:38.981 [DEBUG] [Thread-23198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:52:38.981 [DEBUG] [Thread-23198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:52:38.981 [DEBUG] [Thread-23198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:52:38.981 [DEBUG] [Thread-23198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:52:38.981 [DEBUG] [Thread-23198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:52:38.981 [DEBUG] [Thread-23198] [transport.py] [_log()] client lang: <none>
2026-04-15T17:52:38.981 [DEBUG] [Thread-23198] [transport.py] [_log()] server lang: <none>
2026-04-15T17:52:38.981 [DEBUG] [Thread-23198] [transport.py] [_log()] kex follows: False
2026-04-15T17:52:38.981 [DEBUG] [Thread-23198] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:52:38.981 [DEBUG] [Thread-23198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:52:38.982 [DEBUG] [Thread-23198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:52:38.982 [DEBUG] [Thread-23198] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:52:38.982 [DEBUG] [Thread-23198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:52:38.982 [DEBUG] [Thread-23198] [transport.py] [_log()] Compression: none
2026-04-15T17:52:38.982 [DEBUG] [Thread-23198] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:52:39.040 [DEBUG] [Thread-23198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:52:39.040 [DEBUG] [Thread-23198] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:52:39.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:52:39.041 [DEBUG] [Thread-23198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:52:39.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:52:39.095 [DEBUG] [Thread-23198] [transport.py] [_log()] userauth is OK
2026-04-15T17:52:39.096 [DEBUG] [Thread-23198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:52:39.096 [DEBUG] [Thread-23198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:52:39.096 [DEBUG] [Thread-23198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:52:39.096 [DEBUG] [Thread-23198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:52:39.122 [INFO] [Thread-23198] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:52:39.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:52:39.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:52:39.950 [DEBUG] [Thread-23198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:52:39.950 [DEBUG] [Thread-23198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:52:39.998 [DEBUG] [Thread-23198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:52:39.998 [DEBUG] [Thread-23198] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:52:40.007 [DEBUG] [Thread-23198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:52:40.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:52:40.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')
2026-04-15T17:52:40.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
2026-04-15T17:52:40.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:52:40.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:52:40.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:52:40.041 [DEBUG] [Thread-23198] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:52:40.051 [DEBUG] [Thread-23200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:52:45.225 [DEBUG] [Thread-23201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:52:55.094 [DEBUG] [Thread-23202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:53:10.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:53:10.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:53: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
2026-04-15T17:53:10.126 [DEBUG] [Thread-23203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:53:11.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 52, 43), 6.70502, 63.7236, 0.0, 15.0329, 13.094, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:53:11.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:52:43
2026-04-15T17:53:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:53:12.168 [DEBUG] [Thread-23204] [transport.py] [_log()] starting thread (client mode): 0xf17c3790
2026-04-15T17:53:12.168 [DEBUG] [Thread-23204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:53:12.188 [DEBUG] [Thread-23204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:53:12.189 [INFO] [Thread-23204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:53:12.192 [DEBUG] [Thread-23204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:53:12.192 [DEBUG] [Thread-23204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:53:12.192 [DEBUG] [Thread-23204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:53:12.192 [DEBUG] [Thread-23204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:53:12.192 [DEBUG] [Thread-23204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:53:12.192 [DEBUG] [Thread-23204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:53:12.192 [DEBUG] [Thread-23204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:53:12.192 [DEBUG] [Thread-23204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:53:12.192 [DEBUG] [Thread-23204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:53:12.193 [DEBUG] [Thread-23204] [transport.py] [_log()] client lang: <none>
2026-04-15T17:53:12.193 [DEBUG] [Thread-23204] [transport.py] [_log()] server lang: <none>
2026-04-15T17:53:12.193 [DEBUG] [Thread-23204] [transport.py] [_log()] kex follows: False
2026-04-15T17:53:12.193 [DEBUG] [Thread-23204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:53:12.193 [DEBUG] [Thread-23204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:53:12.193 [DEBUG] [Thread-23204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:53:12.193 [DEBUG] [Thread-23204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:53:12.193 [DEBUG] [Thread-23204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:53:12.193 [DEBUG] [Thread-23204] [transport.py] [_log()] Compression: none
2026-04-15T17:53:12.193 [DEBUG] [Thread-23204] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:53:12.210 [DEBUG] [Thread-23204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:53:12.210 [DEBUG] [Thread-23204] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:53:12.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:53:12.211 [DEBUG] [Thread-23204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:53:12.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:53:12.212 [DEBUG] [Thread-23204] [transport.py] [_log()] userauth is OK
2026-04-15T17:53:12.212 [DEBUG] [Thread-23204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:53:12.212 [DEBUG] [Thread-23204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:53:12.212 [DEBUG] [Thread-23204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:53:12.212 [DEBUG] [Thread-23204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:53:12.236 [INFO] [Thread-23204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:53:12.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:53:13.029 [DEBUG] [Thread-23204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:53:13.029 [DEBUG] [Thread-23204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:53:13.030 [DEBUG] [Thread-23204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:53:13.070 [DEBUG] [Thread-23204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:53:13.070 [DEBUG] [Thread-23204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:53:13.074 [DEBUG] [Thread-23204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:53:13.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:53:13.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:53:13.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:53:13.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:53:13.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:53:13.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:53:13.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:53:13.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:53:13.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:53:13.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.661593 -999.00  +12.60  13.49     70   +7.30 1 1 1 1 1   887    0 4.23 -45.80 ----- 12.3 13.5 310.6 17.0 14.7 -26.7 14.6 -25.7 14.8 -23.7 15.2 -25.1
2026-04-15T17:53:13.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:53:13.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:53:13.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.661593
2026-04-15T17:53:13.099 [DEBUG] [Thread-23204] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:53:13.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:53:13.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:53:13.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:53:13.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:53:13.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:53:13.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:52:43', tmtdew=6.70502, humidity=63.7236, cloud=0.0, wind=15.0329, temperature=13.094, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:52:41.635', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:53:13.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:53:13.364 [DEBUG] [Thread-23207] [transport.py] [_log()] starting thread (client mode): 0xee905c90
2026-04-15T17:53:13.364 [DEBUG] [Thread-23207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:53:13.380 [DEBUG] [Thread-23207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:53:13.380 [INFO] [Thread-23207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:53:13.389 [DEBUG] [Thread-23207] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:53:13.389 [DEBUG] [Thread-23207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:53:13.389 [DEBUG] [Thread-23207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:53:13.389 [DEBUG] [Thread-23207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:53:13.389 [DEBUG] [Thread-23207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:53:13.389 [DEBUG] [Thread-23207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:53:13.389 [DEBUG] [Thread-23207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:53:13.389 [DEBUG] [Thread-23207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:53:13.390 [DEBUG] [Thread-23207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:53:13.390 [DEBUG] [Thread-23207] [transport.py] [_log()] client lang: <none>
2026-04-15T17:53:13.390 [DEBUG] [Thread-23207] [transport.py] [_log()] server lang: <none>
2026-04-15T17:53:13.390 [DEBUG] [Thread-23207] [transport.py] [_log()] kex follows: False
2026-04-15T17:53:13.390 [DEBUG] [Thread-23207] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:53:13.390 [DEBUG] [Thread-23207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:53:13.390 [DEBUG] [Thread-23207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:53:13.390 [DEBUG] [Thread-23207] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:53:13.390 [DEBUG] [Thread-23207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:53:13.390 [DEBUG] [Thread-23207] [transport.py] [_log()] Compression: none
2026-04-15T17:53:13.390 [DEBUG] [Thread-23207] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:53:13.443 [DEBUG] [Thread-23207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:53:13.443 [DEBUG] [Thread-23207] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:53:13.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:53:13.444 [DEBUG] [Thread-23207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:53:13.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:53:13.500 [DEBUG] [Thread-23207] [transport.py] [_log()] userauth is OK
2026-04-15T17:53:13.501 [DEBUG] [Thread-23207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:53:13.501 [DEBUG] [Thread-23207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:53:13.501 [DEBUG] [Thread-23207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:53:13.501 [DEBUG] [Thread-23207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:53:13.528 [INFO] [Thread-23207] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:53:13.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:53:13.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:53:14.327 [DEBUG] [Thread-23207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:53:14.328 [DEBUG] [Thread-23207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:53:14.375 [DEBUG] [Thread-23207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:53:14.375 [DEBUG] [Thread-23207] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:53:14.384 [DEBUG] [Thread-23207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:53:14.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:53:14.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')
2026-04-15T17:53:14.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
2026-04-15T17:53:14.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:53:14.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:53:14.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:53:14.419 [DEBUG] [Thread-23207] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:53:25.157 [DEBUG] [Thread-23209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:53:32.387 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:53:32.388 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:53:40.201 [DEBUG] [Thread-23210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:53:44.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:53:44.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:53:44.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
2026-04-15T17:53:45.300 [DEBUG] [Thread-23211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:53:45.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 53, 18), 6.5912, 63.9115, 0.0, 9.91692, 12.797, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:53:45.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:53:18
2026-04-15T17:53:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:53:46.623 [DEBUG] [Thread-23212] [transport.py] [_log()] starting thread (client mode): 0xee907d30
2026-04-15T17:53:46.623 [DEBUG] [Thread-23212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:53:46.643 [DEBUG] [Thread-23212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:53:46.643 [INFO] [Thread-23212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:53:46.646 [DEBUG] [Thread-23212] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:53:46.646 [DEBUG] [Thread-23212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:53:46.646 [DEBUG] [Thread-23212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:53:46.646 [DEBUG] [Thread-23212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:53:46.646 [DEBUG] [Thread-23212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:53:46.646 [DEBUG] [Thread-23212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:53:46.646 [DEBUG] [Thread-23212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:53:46.646 [DEBUG] [Thread-23212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:53:46.646 [DEBUG] [Thread-23212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:53:46.646 [DEBUG] [Thread-23212] [transport.py] [_log()] client lang: <none>
2026-04-15T17:53:46.647 [DEBUG] [Thread-23212] [transport.py] [_log()] server lang: <none>
2026-04-15T17:53:46.647 [DEBUG] [Thread-23212] [transport.py] [_log()] kex follows: False
2026-04-15T17:53:46.647 [DEBUG] [Thread-23212] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:53:46.647 [DEBUG] [Thread-23212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:53:46.647 [DEBUG] [Thread-23212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:53:46.647 [DEBUG] [Thread-23212] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:53:46.647 [DEBUG] [Thread-23212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:53:46.647 [DEBUG] [Thread-23212] [transport.py] [_log()] Compression: none
2026-04-15T17:53:46.647 [DEBUG] [Thread-23212] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:53:46.664 [DEBUG] [Thread-23212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:53:46.664 [DEBUG] [Thread-23212] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:53:46.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:53:46.665 [DEBUG] [Thread-23212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:53:46.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:53:46.666 [DEBUG] [Thread-23212] [transport.py] [_log()] userauth is OK
2026-04-15T17:53:46.666 [DEBUG] [Thread-23212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:53:46.666 [DEBUG] [Thread-23212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:53:46.666 [DEBUG] [Thread-23212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:53:46.666 [DEBUG] [Thread-23212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:53:46.683 [INFO] [Thread-23212] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:53:46.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:53:47.468 [DEBUG] [Thread-23212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:53:47.468 [DEBUG] [Thread-23212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:53:47.469 [DEBUG] [Thread-23212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:53:47.509 [DEBUG] [Thread-23212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:53:47.509 [DEBUG] [Thread-23212] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:53:47.512 [DEBUG] [Thread-23212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:53:47.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:53:47.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:53:47.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:53:47.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:53:47.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:53:47.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:53:47.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:53:47.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:53:47.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:53:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.661940 -999.00  +12.60  11.81     70   +7.40 1 1 1 1 1   887    0 4.30 -43.62 ----- 15.2 11.8 323.2 17.4 14.7 -26.6 14.5 -25.5 14.8 -23.1 15.2 -25.1
2026-04-15T17:53:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:53:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:53:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.661940
2026-04-15T17:53:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:53:47.539 [DEBUG] [Thread-23212] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:53:47.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:53:47.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:53:47.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:53:47.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:53:47.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:53:18', tmtdew=6.5912, humidity=63.9115, cloud=0.0, wind=9.91692, temperature=12.797, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:53:11.616', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:53:47.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:53:47.805 [DEBUG] [Thread-23215] [transport.py] [_log()] starting thread (client mode): 0xee91cfa0
2026-04-15T17:53:47.805 [DEBUG] [Thread-23215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:53:47.819 [DEBUG] [Thread-23215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:53:47.819 [INFO] [Thread-23215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:53:47.827 [DEBUG] [Thread-23215] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:53:47.827 [DEBUG] [Thread-23215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:53:47.827 [DEBUG] [Thread-23215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:53:47.827 [DEBUG] [Thread-23215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:53:47.827 [DEBUG] [Thread-23215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:53:47.827 [DEBUG] [Thread-23215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:53:47.827 [DEBUG] [Thread-23215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:53:47.827 [DEBUG] [Thread-23215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:53:47.828 [DEBUG] [Thread-23215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:53:47.828 [DEBUG] [Thread-23215] [transport.py] [_log()] client lang: <none>
2026-04-15T17:53:47.828 [DEBUG] [Thread-23215] [transport.py] [_log()] server lang: <none>
2026-04-15T17:53:47.828 [DEBUG] [Thread-23215] [transport.py] [_log()] kex follows: False
2026-04-15T17:53:47.828 [DEBUG] [Thread-23215] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:53:47.828 [DEBUG] [Thread-23215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:53:47.828 [DEBUG] [Thread-23215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:53:47.828 [DEBUG] [Thread-23215] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:53:47.828 [DEBUG] [Thread-23215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:53:47.828 [DEBUG] [Thread-23215] [transport.py] [_log()] Compression: none
2026-04-15T17:53:47.828 [DEBUG] [Thread-23215] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:53:47.888 [DEBUG] [Thread-23215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:53:47.889 [DEBUG] [Thread-23215] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:53:47.889 [DEBUG] [Thread-23215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:53:47.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:53:47.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:53:47.944 [DEBUG] [Thread-23215] [transport.py] [_log()] userauth is OK
2026-04-15T17:53:47.944 [DEBUG] [Thread-23215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:53:47.944 [DEBUG] [Thread-23215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:53:47.944 [DEBUG] [Thread-23215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:53:47.944 [DEBUG] [Thread-23215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:53:47.969 [INFO] [Thread-23215] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:53:47.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:53:47.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:53:48.833 [DEBUG] [Thread-23215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:53:48.833 [DEBUG] [Thread-23215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:53:48.881 [DEBUG] [Thread-23215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:53:48.881 [DEBUG] [Thread-23215] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:53:48.889 [DEBUG] [Thread-23215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:53:48.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:53:48.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')
2026-04-15T17:53:48.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
2026-04-15T17:53:48.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:53:48.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:53:48.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:53:48.924 [DEBUG] [Thread-23215] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:53:55.234 [DEBUG] [Thread-23217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:54:10.278 [DEBUG] [Thread-23218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:54:18.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:54:18.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:54:18.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
2026-04-15T17:54:20.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 53, 54), 6.75948, 63.4925, 0.0, 15.2093, 13.128, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:54:20.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:53:54
2026-04-15T17:54:20.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:54:21.210 [DEBUG] [Thread-23219] [transport.py] [_log()] starting thread (client mode): 0xee91e590
2026-04-15T17:54:21.210 [DEBUG] [Thread-23219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:54:21.230 [DEBUG] [Thread-23219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:54:21.230 [INFO] [Thread-23219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:54:21.233 [DEBUG] [Thread-23219] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:54:21.233 [DEBUG] [Thread-23219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:54:21.234 [DEBUG] [Thread-23219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:54:21.234 [DEBUG] [Thread-23219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:54:21.234 [DEBUG] [Thread-23219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:54:21.234 [DEBUG] [Thread-23219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:54:21.234 [DEBUG] [Thread-23219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:54:21.234 [DEBUG] [Thread-23219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:54:21.234 [DEBUG] [Thread-23219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:54:21.234 [DEBUG] [Thread-23219] [transport.py] [_log()] client lang: <none>
2026-04-15T17:54:21.234 [DEBUG] [Thread-23219] [transport.py] [_log()] server lang: <none>
2026-04-15T17:54:21.234 [DEBUG] [Thread-23219] [transport.py] [_log()] kex follows: False
2026-04-15T17:54:21.234 [DEBUG] [Thread-23219] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:54:21.235 [DEBUG] [Thread-23219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:54:21.235 [DEBUG] [Thread-23219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:54:21.235 [DEBUG] [Thread-23219] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:54:21.235 [DEBUG] [Thread-23219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:54:21.235 [DEBUG] [Thread-23219] [transport.py] [_log()] Compression: none
2026-04-15T17:54:21.235 [DEBUG] [Thread-23219] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:54:21.254 [DEBUG] [Thread-23219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:54:21.254 [DEBUG] [Thread-23219] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:54:21.255 [DEBUG] [Thread-23219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:54:21.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:54:21.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:54:21.256 [DEBUG] [Thread-23219] [transport.py] [_log()] userauth is OK
2026-04-15T17:54:21.256 [DEBUG] [Thread-23219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:54:21.256 [DEBUG] [Thread-23219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:54:21.256 [DEBUG] [Thread-23219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:54:21.256 [DEBUG] [Thread-23219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:54:21.280 [INFO] [Thread-23219] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:54:21.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:54:22.005 [DEBUG] [Thread-23219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:54:22.006 [DEBUG] [Thread-23219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:54:22.006 [DEBUG] [Thread-23219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:54:22.046 [DEBUG] [Thread-23219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:54:22.046 [DEBUG] [Thread-23219] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:54:22.049 [DEBUG] [Thread-23219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:54:22.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:54:22.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:54:22.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:54:22.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:54:22.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:54:22.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:54:22.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:54:22.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:54:22.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:54:22.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.662287 -999.00  +12.70  11.69     69   +7.30 1 1 1 1 1   887    0 4.16 -43.49 ----- 11.5 11.7 295.2 17.3 14.7 -26.8 14.5 -25.3 14.8 -23.3 15.2 -25.4
2026-04-15T17:54:22.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:54:22.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:54:22.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.662287
2026-04-15T17:54:22.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:54:22.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:54:22.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:54:22.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:54:22.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:54:22.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:53:54', tmtdew=6.75948, humidity=63.4925, cloud=0.0, wind=15.2093, temperature=13.128, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:53:41.597', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:54:22.074 [DEBUG] [Thread-23219] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:54:22.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:54:22.315 [DEBUG] [Thread-23222] [transport.py] [_log()] starting thread (client mode): 0xee9073d0
2026-04-15T17:54:22.315 [DEBUG] [Thread-23222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:54:22.329 [DEBUG] [Thread-23222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:54:22.329 [INFO] [Thread-23222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:54:22.336 [DEBUG] [Thread-23222] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:54:22.336 [DEBUG] [Thread-23222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:54:22.336 [DEBUG] [Thread-23222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:54:22.336 [DEBUG] [Thread-23222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:54:22.336 [DEBUG] [Thread-23222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:54:22.337 [DEBUG] [Thread-23222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:54:22.337 [DEBUG] [Thread-23222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:54:22.337 [DEBUG] [Thread-23222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:54:22.337 [DEBUG] [Thread-23222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:54:22.337 [DEBUG] [Thread-23222] [transport.py] [_log()] client lang: <none>
2026-04-15T17:54:22.337 [DEBUG] [Thread-23222] [transport.py] [_log()] server lang: <none>
2026-04-15T17:54:22.337 [DEBUG] [Thread-23222] [transport.py] [_log()] kex follows: False
2026-04-15T17:54:22.337 [DEBUG] [Thread-23222] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:54:22.337 [DEBUG] [Thread-23222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:54:22.337 [DEBUG] [Thread-23222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:54:22.337 [DEBUG] [Thread-23222] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:54:22.337 [DEBUG] [Thread-23222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:54:22.338 [DEBUG] [Thread-23222] [transport.py] [_log()] Compression: none
2026-04-15T17:54:22.338 [DEBUG] [Thread-23222] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:54:22.395 [DEBUG] [Thread-23222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:54:22.395 [DEBUG] [Thread-23222] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:54:22.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:54:22.396 [DEBUG] [Thread-23222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:54:22.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:54:22.451 [DEBUG] [Thread-23222] [transport.py] [_log()] userauth is OK
2026-04-15T17:54:22.452 [DEBUG] [Thread-23222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:54:22.452 [DEBUG] [Thread-23222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:54:22.452 [DEBUG] [Thread-23222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:54:22.452 [DEBUG] [Thread-23222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:54:22.479 [INFO] [Thread-23222] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:54:22.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:54:22.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:54:23.306 [DEBUG] [Thread-23222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:54:23.306 [DEBUG] [Thread-23222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:54:23.357 [DEBUG] [Thread-23222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:54:23.358 [DEBUG] [Thread-23222] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:54:23.366 [DEBUG] [Thread-23222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:54:23.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:54:23.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')
2026-04-15T17:54:23.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
2026-04-15T17:54:23.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:54:23.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:54:23.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:54:23.401 [DEBUG] [Thread-23222] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:54:25.309 [DEBUG] [Thread-23224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:54:32.526 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:54:32.528 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:54:40.354 [DEBUG] [Thread-23225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:54:45.376 [DEBUG] [Thread-23226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:54:53.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:54:53.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:54:53.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
2026-04-15T17:54:54.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 54, 29), 6.68512, 63.5312, 0.0, 13.5522, 12.9804, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:54:54.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:54:29
2026-04-15T17:54:55.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:54:55.384 [DEBUG] [Thread-23227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:54:55.579 [DEBUG] [Thread-23228] [transport.py] [_log()] starting thread (client mode): 0xf17c1120
2026-04-15T17:54:55.579 [DEBUG] [Thread-23228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:54:55.597 [DEBUG] [Thread-23228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:54:55.598 [INFO] [Thread-23228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:54:55.599 [DEBUG] [Thread-23228] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:54:55.599 [DEBUG] [Thread-23228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:54:55.599 [DEBUG] [Thread-23228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:54:55.599 [DEBUG] [Thread-23228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:54:55.599 [DEBUG] [Thread-23228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:54:55.599 [DEBUG] [Thread-23228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:54:55.599 [DEBUG] [Thread-23228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:54:55.600 [DEBUG] [Thread-23228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:54:55.600 [DEBUG] [Thread-23228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:54:55.600 [DEBUG] [Thread-23228] [transport.py] [_log()] client lang: <none>
2026-04-15T17:54:55.600 [DEBUG] [Thread-23228] [transport.py] [_log()] server lang: <none>
2026-04-15T17:54:55.600 [DEBUG] [Thread-23228] [transport.py] [_log()] kex follows: False
2026-04-15T17:54:55.600 [DEBUG] [Thread-23228] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:54:55.600 [DEBUG] [Thread-23228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:54:55.600 [DEBUG] [Thread-23228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:54:55.600 [DEBUG] [Thread-23228] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:54:55.600 [DEBUG] [Thread-23228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:54:55.600 [DEBUG] [Thread-23228] [transport.py] [_log()] Compression: none
2026-04-15T17:54:55.601 [DEBUG] [Thread-23228] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:54:55.609 [DEBUG] [Thread-23228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:54:55.609 [DEBUG] [Thread-23228] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:54:55.609 [DEBUG] [Thread-23228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:54:55.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:54:55.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:54:55.611 [DEBUG] [Thread-23228] [transport.py] [_log()] userauth is OK
2026-04-15T17:54:55.611 [DEBUG] [Thread-23228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:54:55.611 [DEBUG] [Thread-23228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:54:55.611 [DEBUG] [Thread-23228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:54:55.611 [DEBUG] [Thread-23228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:54:55.628 [INFO] [Thread-23228] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:54:55.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:54:56.221 [DEBUG] [Thread-23228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:54:56.221 [DEBUG] [Thread-23228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:54:56.221 [DEBUG] [Thread-23228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:54:56.262 [DEBUG] [Thread-23228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:54:56.262 [DEBUG] [Thread-23228] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:54:56.264 [DEBUG] [Thread-23228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:54:56.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:54:56.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:54:56.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:54:56.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:54:56.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:54:56.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:54:56.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:54:56.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:54:56.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:54:56.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.662982 -999.00  +12.80  13.88     69   +7.30 1 1 1 1 1   887    0 4.44 -39.10 ----- 10.6 13.9 313.0 15.2 14.7 -26.8 14.5 -25.6 14.8 -23.5 15.3 -25.5
2026-04-15T17:54:56.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:54:56.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:54:56.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.662982
2026-04-15T17:54:56.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:54:56.282 [DEBUG] [Thread-23228] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:54:56.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:54:56.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:54:56.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:54:56.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:54:56.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:54:29', tmtdew=6.68512, humidity=63.5312, cloud=0.0, wind=13.5522, temperature=12.9804, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:54:41.645', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:54:56.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:54:56.498 [DEBUG] [Thread-23231] [transport.py] [_log()] starting thread (client mode): 0xf13e0ca0
2026-04-15T17:54:56.498 [DEBUG] [Thread-23231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:54:56.511 [DEBUG] [Thread-23231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:54:56.512 [INFO] [Thread-23231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:54:56.519 [DEBUG] [Thread-23231] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:54:56.519 [DEBUG] [Thread-23231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:54:56.519 [DEBUG] [Thread-23231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:54:56.519 [DEBUG] [Thread-23231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:54:56.519 [DEBUG] [Thread-23231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:54:56.519 [DEBUG] [Thread-23231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:54:56.520 [DEBUG] [Thread-23231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:54:56.520 [DEBUG] [Thread-23231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:54:56.520 [DEBUG] [Thread-23231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:54:56.520 [DEBUG] [Thread-23231] [transport.py] [_log()] client lang: <none>
2026-04-15T17:54:56.520 [DEBUG] [Thread-23231] [transport.py] [_log()] server lang: <none>
2026-04-15T17:54:56.520 [DEBUG] [Thread-23231] [transport.py] [_log()] kex follows: False
2026-04-15T17:54:56.520 [DEBUG] [Thread-23231] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:54:56.520 [DEBUG] [Thread-23231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:54:56.520 [DEBUG] [Thread-23231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:54:56.520 [DEBUG] [Thread-23231] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:54:56.520 [DEBUG] [Thread-23231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:54:56.520 [DEBUG] [Thread-23231] [transport.py] [_log()] Compression: none
2026-04-15T17:54:56.521 [DEBUG] [Thread-23231] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:54:56.575 [DEBUG] [Thread-23231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:54:56.575 [DEBUG] [Thread-23231] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:54:56.576 [DEBUG] [Thread-23231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:54:56.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:54:56.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:54:56.632 [DEBUG] [Thread-23231] [transport.py] [_log()] userauth is OK
2026-04-15T17:54:56.632 [DEBUG] [Thread-23231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:54:56.632 [DEBUG] [Thread-23231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:54:56.632 [DEBUG] [Thread-23231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:54:56.632 [DEBUG] [Thread-23231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:54:56.655 [INFO] [Thread-23231] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:54:56.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:54:56.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:54:57.465 [DEBUG] [Thread-23231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:54:57.465 [DEBUG] [Thread-23231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:54:57.513 [DEBUG] [Thread-23231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:54:57.513 [DEBUG] [Thread-23231] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:54:57.522 [DEBUG] [Thread-23231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:54:57.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:54: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')
2026-04-15T17:54:57.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
2026-04-15T17:54:57.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:54:57.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:54:57.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:54:57.557 [DEBUG] [Thread-23231] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:55:10.412 [DEBUG] [Thread-23233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:55:25.457 [DEBUG] [Thread-23234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:55:27.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:55:27.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:55:27.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
2026-04-15T17:55:28.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 55, 4), 6.75619, 63.2164, 0.0, 14.981, 12.9472, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:55:28.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:55:04
2026-04-15T17:55:29.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:55:29.709 [DEBUG] [Thread-23235] [transport.py] [_log()] starting thread (client mode): 0xee904130
2026-04-15T17:55:29.709 [DEBUG] [Thread-23235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:55:29.728 [DEBUG] [Thread-23235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:55:29.728 [INFO] [Thread-23235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:55:29.730 [DEBUG] [Thread-23235] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:55:29.730 [DEBUG] [Thread-23235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:55:29.730 [DEBUG] [Thread-23235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:55:29.731 [DEBUG] [Thread-23235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:55:29.731 [DEBUG] [Thread-23235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:55:29.731 [DEBUG] [Thread-23235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:55:29.731 [DEBUG] [Thread-23235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:55:29.731 [DEBUG] [Thread-23235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:55:29.731 [DEBUG] [Thread-23235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:55:29.731 [DEBUG] [Thread-23235] [transport.py] [_log()] client lang: <none>
2026-04-15T17:55:29.731 [DEBUG] [Thread-23235] [transport.py] [_log()] server lang: <none>
2026-04-15T17:55:29.731 [DEBUG] [Thread-23235] [transport.py] [_log()] kex follows: False
2026-04-15T17:55:29.731 [DEBUG] [Thread-23235] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:55:29.731 [DEBUG] [Thread-23235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:55:29.732 [DEBUG] [Thread-23235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:55:29.732 [DEBUG] [Thread-23235] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:55:29.732 [DEBUG] [Thread-23235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:55:29.732 [DEBUG] [Thread-23235] [transport.py] [_log()] Compression: none
2026-04-15T17:55:29.732 [DEBUG] [Thread-23235] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:55:29.750 [DEBUG] [Thread-23235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:55:29.751 [DEBUG] [Thread-23235] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:55:29.751 [DEBUG] [Thread-23235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:55:29.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:55:29.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:55:29.752 [DEBUG] [Thread-23235] [transport.py] [_log()] userauth is OK
2026-04-15T17:55:29.753 [DEBUG] [Thread-23235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:55:29.753 [DEBUG] [Thread-23235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:55:29.753 [DEBUG] [Thread-23235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:55:29.753 [DEBUG] [Thread-23235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:55:29.777 [INFO] [Thread-23235] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:55:29.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:55:30.647 [DEBUG] [Thread-23235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:55:30.647 [DEBUG] [Thread-23235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:55:30.648 [DEBUG] [Thread-23235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:55:30.688 [DEBUG] [Thread-23235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:55:30.688 [DEBUG] [Thread-23235] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:55:30.690 [DEBUG] [Thread-23235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:55:30.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:55:30.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:55:30.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:55:30.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:55:30.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:55:30.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:55:30.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:55:30.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:55:30.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:55:30.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.663329 -999.00  +12.70  10.43     68   +7.10 1 1 1 1 1   887    0 4.29 -37.74 ----- 11.0 10.4 296.2 15.4 14.7 -26.8 14.6 -25.7 14.8 -23.5 15.3 -25.5
2026-04-15T17:55:30.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:55:30.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:55:30.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.663329
2026-04-15T17:55:30.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:55:30.715 [DEBUG] [Thread-23235] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:55:30.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:55:30.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:55:30.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:55:30.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:55:30.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:55:04', tmtdew=6.75619, humidity=63.2164, cloud=0.0, wind=14.981, temperature=12.9472, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:55:11.626', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:55:30.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:55:30.973 [DEBUG] [Thread-23238] [transport.py] [_log()] starting thread (client mode): 0xf13c8b80
2026-04-15T17:55:30.974 [DEBUG] [Thread-23238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:55:30.988 [DEBUG] [Thread-23238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:55:30.988 [INFO] [Thread-23238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:55:30.995 [DEBUG] [Thread-23238] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:55:30.995 [DEBUG] [Thread-23238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:55:30.995 [DEBUG] [Thread-23238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:55:30.995 [DEBUG] [Thread-23238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:55:30.995 [DEBUG] [Thread-23238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:55:30.996 [DEBUG] [Thread-23238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:55:30.996 [DEBUG] [Thread-23238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:55:30.996 [DEBUG] [Thread-23238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:55:30.996 [DEBUG] [Thread-23238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:55:30.996 [DEBUG] [Thread-23238] [transport.py] [_log()] client lang: <none>
2026-04-15T17:55:30.996 [DEBUG] [Thread-23238] [transport.py] [_log()] server lang: <none>
2026-04-15T17:55:30.996 [DEBUG] [Thread-23238] [transport.py] [_log()] kex follows: False
2026-04-15T17:55:30.996 [DEBUG] [Thread-23238] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:55:30.996 [DEBUG] [Thread-23238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:55:30.996 [DEBUG] [Thread-23238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:55:30.996 [DEBUG] [Thread-23238] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:55:30.997 [DEBUG] [Thread-23238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:55:30.997 [DEBUG] [Thread-23238] [transport.py] [_log()] Compression: none
2026-04-15T17:55:30.997 [DEBUG] [Thread-23238] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:55:31.050 [DEBUG] [Thread-23238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:55:31.051 [DEBUG] [Thread-23238] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:55:31.051 [DEBUG] [Thread-23238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:55:31.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:55:31.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:55:31.108 [DEBUG] [Thread-23238] [transport.py] [_log()] userauth is OK
2026-04-15T17:55:31.108 [DEBUG] [Thread-23238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:55:31.108 [DEBUG] [Thread-23238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:55:31.108 [DEBUG] [Thread-23238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:55:31.108 [DEBUG] [Thread-23238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:55:31.135 [INFO] [Thread-23238] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:55:31.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:55:31.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:55:31.942 [DEBUG] [Thread-23238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:55:31.942 [DEBUG] [Thread-23238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:55:31.989 [DEBUG] [Thread-23238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:55:31.989 [DEBUG] [Thread-23238] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:55:31.998 [DEBUG] [Thread-23238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:55:32.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:55:32.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T17:55:32.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') -> 00000000
2026-04-15T17:55:32.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:55:32.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:55:32.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:55:32.029 [DEBUG] [Thread-23238] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:55:32.667 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:55:32.668 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:55:40.488 [DEBUG] [Thread-23240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:55:45.451 [DEBUG] [Thread-23241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:55:55.536 [DEBUG] [Thread-23242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:56:02.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:56:02.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:56:02.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
2026-04-15T17:56:03.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 55, 41), 7.02245, 62.3666, 0.0, 13.3394, 13.195, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:56:03.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:55:41
2026-04-15T17:56:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:56:04.290 [DEBUG] [Thread-23243] [transport.py] [_log()] starting thread (client mode): 0xf13e2770
2026-04-15T17:56:04.290 [DEBUG] [Thread-23243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:56:04.313 [DEBUG] [Thread-23243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:56:04.314 [INFO] [Thread-23243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:56:04.315 [DEBUG] [Thread-23243] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:56:04.315 [DEBUG] [Thread-23243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:56:04.315 [DEBUG] [Thread-23243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:56:04.315 [DEBUG] [Thread-23243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:56:04.315 [DEBUG] [Thread-23243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:56:04.316 [DEBUG] [Thread-23243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:56:04.316 [DEBUG] [Thread-23243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:56:04.316 [DEBUG] [Thread-23243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:56:04.316 [DEBUG] [Thread-23243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:56:04.316 [DEBUG] [Thread-23243] [transport.py] [_log()] client lang: <none>
2026-04-15T17:56:04.316 [DEBUG] [Thread-23243] [transport.py] [_log()] server lang: <none>
2026-04-15T17:56:04.316 [DEBUG] [Thread-23243] [transport.py] [_log()] kex follows: False
2026-04-15T17:56:04.316 [DEBUG] [Thread-23243] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:56:04.316 [DEBUG] [Thread-23243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:56:04.316 [DEBUG] [Thread-23243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:56:04.316 [DEBUG] [Thread-23243] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:56:04.316 [DEBUG] [Thread-23243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:56:04.317 [DEBUG] [Thread-23243] [transport.py] [_log()] Compression: none
2026-04-15T17:56:04.317 [DEBUG] [Thread-23243] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:56:04.325 [DEBUG] [Thread-23243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:56:04.326 [DEBUG] [Thread-23243] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:56:04.326 [DEBUG] [Thread-23243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:56:04.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:56:04.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:56:04.327 [DEBUG] [Thread-23243] [transport.py] [_log()] userauth is OK
2026-04-15T17:56:04.328 [DEBUG] [Thread-23243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:56:04.328 [DEBUG] [Thread-23243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:56:04.328 [DEBUG] [Thread-23243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:56:04.328 [DEBUG] [Thread-23243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:56:04.344 [INFO] [Thread-23243] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:56:04.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:56:04.925 [DEBUG] [Thread-23243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:56:04.925 [DEBUG] [Thread-23243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:56:04.925 [DEBUG] [Thread-23243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:56:04.966 [DEBUG] [Thread-23243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:56:04.966 [DEBUG] [Thread-23243] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:56:04.969 [DEBUG] [Thread-23243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:56:04.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:56:04.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:56:04.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:56:04.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:56:04.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:56:04.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:56:04.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:56:04.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:56:04.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:56:04.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.663676 -999.00  +12.70  10.09     68   +7.20 1 1 1 1 1   887    0 4.41 -37.27 ----- 8.7 10.1 305.8 13.8 14.7 -26.8 14.6 -25.5 14.8 -23.1 15.2 -25.4
2026-04-15T17:56:04.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:56:04.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:56:04.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.663676
2026-04-15T17:56:04.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:56:04.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:56:04.994 [DEBUG] [Thread-23243] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:56:04.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:56:04.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:56:04.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:56:04.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:55:41', tmtdew=7.02245, humidity=62.3666, cloud=0.0, wind=13.3394, temperature=13.195, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:55:41.606', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:56:05.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:56:05.251 [DEBUG] [Thread-23246] [transport.py] [_log()] starting thread (client mode): 0xf13e09d0
2026-04-15T17:56:05.252 [DEBUG] [Thread-23246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:56:05.266 [DEBUG] [Thread-23246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:56:05.266 [INFO] [Thread-23246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:56:05.273 [DEBUG] [Thread-23246] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:56:05.273 [DEBUG] [Thread-23246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:56:05.273 [DEBUG] [Thread-23246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:56:05.273 [DEBUG] [Thread-23246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:56:05.273 [DEBUG] [Thread-23246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:56:05.274 [DEBUG] [Thread-23246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:56:05.274 [DEBUG] [Thread-23246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:56:05.274 [DEBUG] [Thread-23246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:56:05.274 [DEBUG] [Thread-23246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:56:05.274 [DEBUG] [Thread-23246] [transport.py] [_log()] client lang: <none>
2026-04-15T17:56:05.274 [DEBUG] [Thread-23246] [transport.py] [_log()] server lang: <none>
2026-04-15T17:56:05.274 [DEBUG] [Thread-23246] [transport.py] [_log()] kex follows: False
2026-04-15T17:56:05.274 [DEBUG] [Thread-23246] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:56:05.274 [DEBUG] [Thread-23246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:56:05.274 [DEBUG] [Thread-23246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:56:05.274 [DEBUG] [Thread-23246] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:56:05.274 [DEBUG] [Thread-23246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:56:05.275 [DEBUG] [Thread-23246] [transport.py] [_log()] Compression: none
2026-04-15T17:56:05.275 [DEBUG] [Thread-23246] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:56:05.331 [DEBUG] [Thread-23246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:56:05.332 [DEBUG] [Thread-23246] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:56:05.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:56:05.332 [DEBUG] [Thread-23246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:56:05.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:56:05.387 [DEBUG] [Thread-23246] [transport.py] [_log()] userauth is OK
2026-04-15T17:56:05.388 [DEBUG] [Thread-23246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:56:05.388 [DEBUG] [Thread-23246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:56:05.388 [DEBUG] [Thread-23246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:56:05.388 [DEBUG] [Thread-23246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:56:05.413 [INFO] [Thread-23246] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:56:05.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:56:05.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:56:06.217 [DEBUG] [Thread-23246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:56:06.217 [DEBUG] [Thread-23246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:56:06.264 [DEBUG] [Thread-23246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:56:06.265 [DEBUG] [Thread-23246] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:56:06.273 [DEBUG] [Thread-23246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:56:06.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:56:06.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')
2026-04-15T17:56:06.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') -> 00000000
2026-04-15T17:56:06.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:56:06.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:56:06.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:56:06.305 [DEBUG] [Thread-23246] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:56:10.568 [DEBUG] [Thread-23248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:56:25.613 [DEBUG] [Thread-23249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:56:32.807 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:56:32.808 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:56:36.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:56:36.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:56:36.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
2026-04-15T17:56:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 56, 16), 6.96887, 62.6504, 0.0, 11.7522, 12.7978, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:56:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:56:16
2026-04-15T17:56:38.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:56:38.470 [DEBUG] [Thread-23250] [transport.py] [_log()] starting thread (client mode): 0xf1353f40
2026-04-15T17:56:38.470 [DEBUG] [Thread-23250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:56:38.497 [DEBUG] [Thread-23250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:56:38.497 [INFO] [Thread-23250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:56:38.500 [DEBUG] [Thread-23250] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:56:38.500 [DEBUG] [Thread-23250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:56:38.500 [DEBUG] [Thread-23250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:56:38.501 [DEBUG] [Thread-23250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:56:38.501 [DEBUG] [Thread-23250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:56:38.501 [DEBUG] [Thread-23250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:56:38.501 [DEBUG] [Thread-23250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:56:38.501 [DEBUG] [Thread-23250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:56:38.501 [DEBUG] [Thread-23250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:56:38.501 [DEBUG] [Thread-23250] [transport.py] [_log()] client lang: <none>
2026-04-15T17:56:38.501 [DEBUG] [Thread-23250] [transport.py] [_log()] server lang: <none>
2026-04-15T17:56:38.501 [DEBUG] [Thread-23250] [transport.py] [_log()] kex follows: False
2026-04-15T17:56:38.501 [DEBUG] [Thread-23250] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:56:38.501 [DEBUG] [Thread-23250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:56:38.502 [DEBUG] [Thread-23250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:56:38.502 [DEBUG] [Thread-23250] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:56:38.502 [DEBUG] [Thread-23250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:56:38.502 [DEBUG] [Thread-23250] [transport.py] [_log()] Compression: none
2026-04-15T17:56:38.502 [DEBUG] [Thread-23250] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:56:38.518 [DEBUG] [Thread-23250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:56:38.519 [DEBUG] [Thread-23250] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:56:38.519 [DEBUG] [Thread-23250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:56:38.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:56:38.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:56:38.520 [DEBUG] [Thread-23250] [transport.py] [_log()] userauth is OK
2026-04-15T17:56:38.520 [DEBUG] [Thread-23250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:56:38.521 [DEBUG] [Thread-23250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:56:38.521 [DEBUG] [Thread-23250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:56:38.521 [DEBUG] [Thread-23250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:56:38.546 [INFO] [Thread-23250] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:56:38.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:56:39.164 [DEBUG] [Thread-23250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:56:39.165 [DEBUG] [Thread-23250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:56:39.165 [DEBUG] [Thread-23250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:56:39.205 [DEBUG] [Thread-23250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:56:39.205 [DEBUG] [Thread-23250] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:56:39.207 [DEBUG] [Thread-23250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:56:39.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:56:39.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:56:39.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:56:39.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:56:39.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:56:39.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:56:39.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:56:39.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:56:39.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:56:39.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.664023 -999.00  +12.80  10.70     68   +7.20 1 1 1 1 1   887    0 4.34 -35.06 ----- 11.8 10.7 305.6 11.9 14.7 -26.4 14.6 -25.4 14.8 -23.4 15.3 -25.3
2026-04-15T17:56:39.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:56:39.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:56:39.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.664023
2026-04-15T17:56:39.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:56:39.236 [DEBUG] [Thread-23250] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:56:39.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:56:39.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:56:39.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:56:39.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:56:39.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:56:16', tmtdew=6.96887, humidity=62.6504, cloud=0.0, wind=11.7522, temperature=12.7978, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:56:11.587', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:56:39.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:56:39.494 [DEBUG] [Thread-23253] [transport.py] [_log()] starting thread (client mode): 0xf1353220
2026-04-15T17:56:39.494 [DEBUG] [Thread-23253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:56:39.510 [DEBUG] [Thread-23253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:56:39.510 [INFO] [Thread-23253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:56:39.518 [DEBUG] [Thread-23253] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:56:39.518 [DEBUG] [Thread-23253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:56:39.518 [DEBUG] [Thread-23253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:56:39.518 [DEBUG] [Thread-23253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:56:39.518 [DEBUG] [Thread-23253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:56:39.518 [DEBUG] [Thread-23253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:56:39.518 [DEBUG] [Thread-23253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:56:39.518 [DEBUG] [Thread-23253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:56:39.518 [DEBUG] [Thread-23253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:56:39.519 [DEBUG] [Thread-23253] [transport.py] [_log()] client lang: <none>
2026-04-15T17:56:39.519 [DEBUG] [Thread-23253] [transport.py] [_log()] server lang: <none>
2026-04-15T17:56:39.519 [DEBUG] [Thread-23253] [transport.py] [_log()] kex follows: False
2026-04-15T17:56:39.519 [DEBUG] [Thread-23253] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:56:39.519 [DEBUG] [Thread-23253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:56:39.519 [DEBUG] [Thread-23253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:56:39.519 [DEBUG] [Thread-23253] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:56:39.519 [DEBUG] [Thread-23253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:56:39.519 [DEBUG] [Thread-23253] [transport.py] [_log()] Compression: none
2026-04-15T17:56:39.519 [DEBUG] [Thread-23253] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:56:39.574 [DEBUG] [Thread-23253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:56:39.575 [DEBUG] [Thread-23253] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:56:39.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:56:39.576 [DEBUG] [Thread-23253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:56:39.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:56:39.631 [DEBUG] [Thread-23253] [transport.py] [_log()] userauth is OK
2026-04-15T17:56:39.632 [DEBUG] [Thread-23253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:56:39.632 [DEBUG] [Thread-23253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:56:39.632 [DEBUG] [Thread-23253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:56:39.632 [DEBUG] [Thread-23253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:56:39.661 [INFO] [Thread-23253] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:56:39.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:56:39.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:56:40.458 [DEBUG] [Thread-23253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:56:40.458 [DEBUG] [Thread-23253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:56:40.505 [DEBUG] [Thread-23253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:56:40.505 [DEBUG] [Thread-23253] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:56:40.514 [DEBUG] [Thread-23253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:56:40.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:56:40.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')
2026-04-15T17:56:40.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') -> 00000000
2026-04-15T17:56:40.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:56:40.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:56:40.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:56:40.547 [DEBUG] [Thread-23253] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:56:40.644 [DEBUG] [Thread-23255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:56:45.525 [DEBUG] [Thread-23256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:56:55.689 [DEBUG] [Thread-23257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:57:10.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:57:10.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:57:10.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
2026-04-15T17:57:10.720 [DEBUG] [Thread-23258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:57:11.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 56, 51), 7.14409, 61.8374, 0.0, 12.1399, 13.163, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:57:11.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:56:51
2026-04-15T17:57:12.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:57:12.708 [DEBUG] [Thread-23259] [transport.py] [_log()] starting thread (client mode): 0xee905ed0
2026-04-15T17:57:12.708 [DEBUG] [Thread-23259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:57:12.727 [DEBUG] [Thread-23259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:57:12.727 [INFO] [Thread-23259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:57:12.730 [DEBUG] [Thread-23259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:57:12.730 [DEBUG] [Thread-23259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:57:12.730 [DEBUG] [Thread-23259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:57:12.730 [DEBUG] [Thread-23259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:57:12.730 [DEBUG] [Thread-23259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:57:12.730 [DEBUG] [Thread-23259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:57:12.730 [DEBUG] [Thread-23259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:57:12.730 [DEBUG] [Thread-23259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:57:12.730 [DEBUG] [Thread-23259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:57:12.730 [DEBUG] [Thread-23259] [transport.py] [_log()] client lang: <none>
2026-04-15T17:57:12.730 [DEBUG] [Thread-23259] [transport.py] [_log()] server lang: <none>
2026-04-15T17:57:12.730 [DEBUG] [Thread-23259] [transport.py] [_log()] kex follows: False
2026-04-15T17:57:12.731 [DEBUG] [Thread-23259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:57:12.731 [DEBUG] [Thread-23259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:57:12.731 [DEBUG] [Thread-23259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:57:12.731 [DEBUG] [Thread-23259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:57:12.731 [DEBUG] [Thread-23259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:57:12.731 [DEBUG] [Thread-23259] [transport.py] [_log()] Compression: none
2026-04-15T17:57:12.731 [DEBUG] [Thread-23259] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:57:12.746 [DEBUG] [Thread-23259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:57:12.746 [DEBUG] [Thread-23259] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:57:12.747 [DEBUG] [Thread-23259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:57:12.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:57:12.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:57:12.755 [DEBUG] [Thread-23259] [transport.py] [_log()] userauth is OK
2026-04-15T17:57:12.755 [DEBUG] [Thread-23259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:57:12.755 [DEBUG] [Thread-23259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:57:12.756 [DEBUG] [Thread-23259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:57:12.756 [DEBUG] [Thread-23259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:57:12.773 [INFO] [Thread-23259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:57:12.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:57:13.375 [DEBUG] [Thread-23259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:57:13.376 [DEBUG] [Thread-23259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:57:13.376 [DEBUG] [Thread-23259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:57:13.416 [DEBUG] [Thread-23259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:57:13.416 [DEBUG] [Thread-23259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:57:13.419 [DEBUG] [Thread-23259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:57:13.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:57:13.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:57:13.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:57:13.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:57:13.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:57:13.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:57:13.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:57:13.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:57:13.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:57:13.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.664370 -999.00  +12.70  11.22     68   +7.20 1 1 1 1 1   887    0 4.34 -33.56 ----- 10.0 11.2 307.8 14.1 14.7 -26.8 14.6 -25.4 14.8 -23.7 15.3 -25.5
2026-04-15T17:57:13.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:57:13.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:57:13.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.664370
2026-04-15T17:57:13.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:57:13.441 [DEBUG] [Thread-23259] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:57:13.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:57:13.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:57:13.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:57:13.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:57:13.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:56:51', tmtdew=7.14409, humidity=61.8374, cloud=0.0, wind=12.1399, temperature=13.163, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:56:41.568', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:57:13.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:57:13.700 [DEBUG] [Thread-23262] [transport.py] [_log()] starting thread (client mode): 0xee91f4f0
2026-04-15T17:57:13.700 [DEBUG] [Thread-23262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:57:13.715 [DEBUG] [Thread-23262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:57:13.715 [INFO] [Thread-23262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:57:13.722 [DEBUG] [Thread-23262] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:57:13.722 [DEBUG] [Thread-23262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:57:13.722 [DEBUG] [Thread-23262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:57:13.723 [DEBUG] [Thread-23262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:57:13.723 [DEBUG] [Thread-23262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:57:13.723 [DEBUG] [Thread-23262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:57:13.723 [DEBUG] [Thread-23262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:57:13.723 [DEBUG] [Thread-23262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:57:13.723 [DEBUG] [Thread-23262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:57:13.723 [DEBUG] [Thread-23262] [transport.py] [_log()] client lang: <none>
2026-04-15T17:57:13.723 [DEBUG] [Thread-23262] [transport.py] [_log()] server lang: <none>
2026-04-15T17:57:13.723 [DEBUG] [Thread-23262] [transport.py] [_log()] kex follows: False
2026-04-15T17:57:13.723 [DEBUG] [Thread-23262] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:57:13.723 [DEBUG] [Thread-23262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:57:13.724 [DEBUG] [Thread-23262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:57:13.724 [DEBUG] [Thread-23262] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:57:13.724 [DEBUG] [Thread-23262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:57:13.724 [DEBUG] [Thread-23262] [transport.py] [_log()] Compression: none
2026-04-15T17:57:13.724 [DEBUG] [Thread-23262] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:57:13.779 [DEBUG] [Thread-23262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:57:13.779 [DEBUG] [Thread-23262] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:57:13.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:57:13.780 [DEBUG] [Thread-23262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:57:13.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:57:13.835 [DEBUG] [Thread-23262] [transport.py] [_log()] userauth is OK
2026-04-15T17:57:13.836 [DEBUG] [Thread-23262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:57:13.836 [DEBUG] [Thread-23262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:57:13.836 [DEBUG] [Thread-23262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:57:13.836 [DEBUG] [Thread-23262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:57:13.863 [INFO] [Thread-23262] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:57:13.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:57:13.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:57:14.669 [DEBUG] [Thread-23262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:57:14.669 [DEBUG] [Thread-23262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:57:14.718 [DEBUG] [Thread-23262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:57:14.718 [DEBUG] [Thread-23262] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:57:14.726 [DEBUG] [Thread-23262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:57:14.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:57:14.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')
2026-04-15T17:57: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
2026-04-15T17:57:14.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:57:14.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:57:14.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:57:14.758 [DEBUG] [Thread-23262] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:57:25.750 [DEBUG] [Thread-23264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:57:32.947 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:57:32.948 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:57:40.793 [DEBUG] [Thread-23265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:57:44.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:57:44.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:57:44.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
2026-04-15T17:57:45.600 [DEBUG] [Thread-23266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:57:46.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 57, 27), 6.90655, 62.985, 0.0, 9.37008, 12.7815, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:57:46.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:57:27
2026-04-15T17:57:46.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:57:46.893 [DEBUG] [Thread-23267] [transport.py] [_log()] starting thread (client mode): 0xf13c98d0
2026-04-15T17:57:46.893 [DEBUG] [Thread-23267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:57:46.912 [DEBUG] [Thread-23267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:57:46.912 [INFO] [Thread-23267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:57:46.915 [DEBUG] [Thread-23267] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:57:46.915 [DEBUG] [Thread-23267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:57:46.915 [DEBUG] [Thread-23267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:57:46.915 [DEBUG] [Thread-23267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:57:46.915 [DEBUG] [Thread-23267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:57:46.916 [DEBUG] [Thread-23267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:57:46.916 [DEBUG] [Thread-23267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:57:46.916 [DEBUG] [Thread-23267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:57:46.916 [DEBUG] [Thread-23267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:57:46.916 [DEBUG] [Thread-23267] [transport.py] [_log()] client lang: <none>
2026-04-15T17:57:46.916 [DEBUG] [Thread-23267] [transport.py] [_log()] server lang: <none>
2026-04-15T17:57:46.916 [DEBUG] [Thread-23267] [transport.py] [_log()] kex follows: False
2026-04-15T17:57:46.916 [DEBUG] [Thread-23267] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:57:46.916 [DEBUG] [Thread-23267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:57:46.916 [DEBUG] [Thread-23267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:57:46.916 [DEBUG] [Thread-23267] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:57:46.916 [DEBUG] [Thread-23267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:57:46.917 [DEBUG] [Thread-23267] [transport.py] [_log()] Compression: none
2026-04-15T17:57:46.917 [DEBUG] [Thread-23267] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:57:46.933 [DEBUG] [Thread-23267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:57:46.933 [DEBUG] [Thread-23267] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:57:46.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:57:46.934 [DEBUG] [Thread-23267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:57:46.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:57:46.935 [DEBUG] [Thread-23267] [transport.py] [_log()] userauth is OK
2026-04-15T17:57:46.935 [DEBUG] [Thread-23267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:57:46.935 [DEBUG] [Thread-23267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:57:46.935 [DEBUG] [Thread-23267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:57:46.936 [DEBUG] [Thread-23267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:57:46.953 [INFO] [Thread-23267] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:57:46.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:57:47.614 [DEBUG] [Thread-23267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:57:47.614 [DEBUG] [Thread-23267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:57:47.615 [DEBUG] [Thread-23267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:57:47.656 [DEBUG] [Thread-23267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:57:47.656 [DEBUG] [Thread-23267] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:57:47.659 [DEBUG] [Thread-23267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:57:47.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:57:47.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:57:47.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:57:47.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:57:47.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:57:47.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:57:47.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:57:47.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:57:47.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:57:47.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.665065 -999.00  +12.70   9.32     69   +7.20 1 1 1 1 1   887    0 4.64 -27.96 ----- 11.4 9.3 309.0 13.4 14.8 -26.5 14.6 -25.3 14.8 -23.2 15.3 -25.5
2026-04-15T17:57:47.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:57:47.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:57:47.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.665065
2026-04-15T17:57:47.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:57:47.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:57:47.685 [DEBUG] [Thread-23267] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:57:47.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:57:47.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:57:47.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:57:47.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:57:27', tmtdew=6.90655, humidity=62.985, cloud=0.0, wind=9.37008, temperature=12.7815, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:57:41.616', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:57:47.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:57:47.952 [DEBUG] [Thread-23270] [transport.py] [_log()] starting thread (client mode): 0xf13caa70
2026-04-15T17:57:47.952 [DEBUG] [Thread-23270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:57:47.966 [DEBUG] [Thread-23270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:57:47.966 [INFO] [Thread-23270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:57:47.973 [DEBUG] [Thread-23270] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:57:47.973 [DEBUG] [Thread-23270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:57:47.973 [DEBUG] [Thread-23270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:57:47.973 [DEBUG] [Thread-23270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:57:47.974 [DEBUG] [Thread-23270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:57:47.974 [DEBUG] [Thread-23270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:57:47.974 [DEBUG] [Thread-23270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:57:47.974 [DEBUG] [Thread-23270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:57:47.974 [DEBUG] [Thread-23270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:57:47.974 [DEBUG] [Thread-23270] [transport.py] [_log()] client lang: <none>
2026-04-15T17:57:47.974 [DEBUG] [Thread-23270] [transport.py] [_log()] server lang: <none>
2026-04-15T17:57:47.974 [DEBUG] [Thread-23270] [transport.py] [_log()] kex follows: False
2026-04-15T17:57:47.974 [DEBUG] [Thread-23270] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:57:47.974 [DEBUG] [Thread-23270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:57:47.974 [DEBUG] [Thread-23270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:57:47.974 [DEBUG] [Thread-23270] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:57:47.974 [DEBUG] [Thread-23270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:57:47.974 [DEBUG] [Thread-23270] [transport.py] [_log()] Compression: none
2026-04-15T17:57:47.974 [DEBUG] [Thread-23270] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:57:48.031 [DEBUG] [Thread-23270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:57:48.031 [DEBUG] [Thread-23270] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:57:48.031 [DEBUG] [Thread-23270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:57:48.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:57:48.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:57:48.087 [DEBUG] [Thread-23270] [transport.py] [_log()] userauth is OK
2026-04-15T17:57:48.088 [DEBUG] [Thread-23270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:57:48.088 [DEBUG] [Thread-23270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:57:48.088 [DEBUG] [Thread-23270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:57:48.088 [DEBUG] [Thread-23270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:57:48.105 [INFO] [Thread-23270] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:57:48.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:57:48.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:57:48.969 [DEBUG] [Thread-23270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:57:48.969 [DEBUG] [Thread-23270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:57:49.021 [DEBUG] [Thread-23270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:57:49.021 [DEBUG] [Thread-23270] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:57:49.030 [DEBUG] [Thread-23270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:57:49.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:57:49.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')
2026-04-15T17:57:49.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
2026-04-15T17:57:49.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:57:49.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:57:49.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:57:49.065 [DEBUG] [Thread-23270] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:57:55.822 [DEBUG] [Thread-23272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:58:10.866 [DEBUG] [Thread-23273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:58:19.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:58:19.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:58: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
2026-04-15T17:58:20.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 58, 3), 6.85543, 63.2008, 0.0, 11.2046, 12.7654, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:58:20.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:58:03
2026-04-15T17:58:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:58:21.343 [DEBUG] [Thread-23274] [transport.py] [_log()] starting thread (client mode): 0xf13c9990
2026-04-15T17:58:21.344 [DEBUG] [Thread-23274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:58:21.362 [DEBUG] [Thread-23274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:58:21.362 [INFO] [Thread-23274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:58:21.365 [DEBUG] [Thread-23274] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:58:21.366 [DEBUG] [Thread-23274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:58:21.366 [DEBUG] [Thread-23274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:58:21.366 [DEBUG] [Thread-23274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:58:21.366 [DEBUG] [Thread-23274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:58:21.366 [DEBUG] [Thread-23274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:58:21.366 [DEBUG] [Thread-23274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:58:21.366 [DEBUG] [Thread-23274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:58:21.366 [DEBUG] [Thread-23274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:58:21.366 [DEBUG] [Thread-23274] [transport.py] [_log()] client lang: <none>
2026-04-15T17:58:21.366 [DEBUG] [Thread-23274] [transport.py] [_log()] server lang: <none>
2026-04-15T17:58:21.366 [DEBUG] [Thread-23274] [transport.py] [_log()] kex follows: False
2026-04-15T17:58:21.366 [DEBUG] [Thread-23274] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:58:21.367 [DEBUG] [Thread-23274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:58:21.367 [DEBUG] [Thread-23274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:58:21.367 [DEBUG] [Thread-23274] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:58:21.367 [DEBUG] [Thread-23274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:58:21.367 [DEBUG] [Thread-23274] [transport.py] [_log()] Compression: none
2026-04-15T17:58:21.367 [DEBUG] [Thread-23274] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:58:21.383 [DEBUG] [Thread-23274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:58:21.383 [DEBUG] [Thread-23274] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:58:21.384 [DEBUG] [Thread-23274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:58:21.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:58:21.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:58:21.385 [DEBUG] [Thread-23274] [transport.py] [_log()] userauth is OK
2026-04-15T17:58:21.385 [DEBUG] [Thread-23274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:58:21.385 [DEBUG] [Thread-23274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:58:21.385 [DEBUG] [Thread-23274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:58:21.385 [DEBUG] [Thread-23274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:58:21.409 [INFO] [Thread-23274] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:58:21.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:58:22.078 [DEBUG] [Thread-23274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:58:22.078 [DEBUG] [Thread-23274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:58:22.078 [DEBUG] [Thread-23274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:58:22.119 [DEBUG] [Thread-23274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:58:22.119 [DEBUG] [Thread-23274] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:58:22.122 [DEBUG] [Thread-23274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:58:22.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:58:22.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:58:22.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:58:22.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:58:22.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:58:22.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:58:22.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:58:22.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:58:22.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:58:22.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.665412 -999.00  +12.70  13.50     68   +7.10 1 1 1 1 1   887    0 4.87 -24.76 ----- 13.3 13.5 312.0 16.3 14.7 -26.5 14.6 -25.4 14.8 -23.5 15.3 -25.6
2026-04-15T17:58:22.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:58:22.146 [DEBUG] [Thread-23274] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:58:22.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:58:22.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.665412
2026-04-15T17:58:22.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:58:22.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:58:22.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:58:22.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:58:22.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:58:22.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:58:03', tmtdew=6.85543, humidity=63.2008, cloud=0.0, wind=11.2046, temperature=12.7654, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:58:11.597', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:58:22.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:58:22.414 [DEBUG] [Thread-23277] [transport.py] [_log()] starting thread (client mode): 0xee91e020
2026-04-15T17:58:22.415 [DEBUG] [Thread-23277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:58:22.430 [DEBUG] [Thread-23277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:58:22.430 [INFO] [Thread-23277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:58:22.437 [DEBUG] [Thread-23277] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:58:22.437 [DEBUG] [Thread-23277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:58:22.437 [DEBUG] [Thread-23277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:58:22.437 [DEBUG] [Thread-23277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:58:22.437 [DEBUG] [Thread-23277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:58:22.437 [DEBUG] [Thread-23277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:58:22.438 [DEBUG] [Thread-23277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:58:22.438 [DEBUG] [Thread-23277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:58:22.438 [DEBUG] [Thread-23277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:58:22.438 [DEBUG] [Thread-23277] [transport.py] [_log()] client lang: <none>
2026-04-15T17:58:22.438 [DEBUG] [Thread-23277] [transport.py] [_log()] server lang: <none>
2026-04-15T17:58:22.438 [DEBUG] [Thread-23277] [transport.py] [_log()] kex follows: False
2026-04-15T17:58:22.438 [DEBUG] [Thread-23277] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:58:22.438 [DEBUG] [Thread-23277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:58:22.438 [DEBUG] [Thread-23277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:58:22.438 [DEBUG] [Thread-23277] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:58:22.438 [DEBUG] [Thread-23277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:58:22.439 [DEBUG] [Thread-23277] [transport.py] [_log()] Compression: none
2026-04-15T17:58:22.439 [DEBUG] [Thread-23277] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:58:22.494 [DEBUG] [Thread-23277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:58:22.495 [DEBUG] [Thread-23277] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:58:22.495 [DEBUG] [Thread-23277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:58:22.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:58:22.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:58:22.552 [DEBUG] [Thread-23277] [transport.py] [_log()] userauth is OK
2026-04-15T17:58:22.552 [DEBUG] [Thread-23277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:58:22.552 [DEBUG] [Thread-23277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:58:22.552 [DEBUG] [Thread-23277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:58:22.552 [DEBUG] [Thread-23277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:58:22.579 [INFO] [Thread-23277] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:58:22.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:58:22.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:58:23.394 [DEBUG] [Thread-23277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:58:23.395 [DEBUG] [Thread-23277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:58:23.442 [DEBUG] [Thread-23277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:58:23.442 [DEBUG] [Thread-23277] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:58:23.451 [DEBUG] [Thread-23277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:58:23.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:58:23.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')
2026-04-15T17:58:23.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
2026-04-15T17:58:23.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:58:23.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:58:23.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:58:23.486 [DEBUG] [Thread-23277] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:58:25.896 [DEBUG] [Thread-23279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:58:33.087 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:58:33.089 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:58:40.937 [DEBUG] [Thread-23280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:58:45.675 [DEBUG] [Thread-23281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:58:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:58:53.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:58:53.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
2026-04-15T17:58:54.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 58, 38), 7.12897, 61.8714, 0.0, 11.9635, 13.0313, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:58:54.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:58:38
2026-04-15T17:58:55.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:58:55.603 [DEBUG] [Thread-23282] [transport.py] [_log()] starting thread (client mode): 0xf13c9240
2026-04-15T17:58:55.603 [DEBUG] [Thread-23282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:58:55.623 [DEBUG] [Thread-23282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:58:55.623 [INFO] [Thread-23282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:58:55.625 [DEBUG] [Thread-23282] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:58:55.626 [DEBUG] [Thread-23282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:58:55.626 [DEBUG] [Thread-23282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:58:55.626 [DEBUG] [Thread-23282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:58:55.626 [DEBUG] [Thread-23282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:58:55.626 [DEBUG] [Thread-23282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:58:55.626 [DEBUG] [Thread-23282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:58:55.626 [DEBUG] [Thread-23282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:58:55.626 [DEBUG] [Thread-23282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:58:55.626 [DEBUG] [Thread-23282] [transport.py] [_log()] client lang: <none>
2026-04-15T17:58:55.626 [DEBUG] [Thread-23282] [transport.py] [_log()] server lang: <none>
2026-04-15T17:58:55.626 [DEBUG] [Thread-23282] [transport.py] [_log()] kex follows: False
2026-04-15T17:58:55.626 [DEBUG] [Thread-23282] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:58:55.627 [DEBUG] [Thread-23282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:58:55.627 [DEBUG] [Thread-23282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:58:55.627 [DEBUG] [Thread-23282] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:58:55.627 [DEBUG] [Thread-23282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:58:55.627 [DEBUG] [Thread-23282] [transport.py] [_log()] Compression: none
2026-04-15T17:58:55.627 [DEBUG] [Thread-23282] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:58:55.636 [DEBUG] [Thread-23282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:58:55.636 [DEBUG] [Thread-23282] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:58:55.636 [DEBUG] [Thread-23282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:58:55.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:58:55.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:58:55.680 [DEBUG] [Thread-23282] [transport.py] [_log()] userauth is OK
2026-04-15T17:58:55.680 [DEBUG] [Thread-23282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:58:55.681 [DEBUG] [Thread-23282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:58:55.681 [DEBUG] [Thread-23282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:58:55.681 [DEBUG] [Thread-23282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:58:55.704 [INFO] [Thread-23282] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:58:55.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:58:55.969 [DEBUG] [Thread-23284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:58:56.344 [DEBUG] [Thread-23282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:58:56.344 [DEBUG] [Thread-23282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:58:56.345 [DEBUG] [Thread-23282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:58:56.386 [DEBUG] [Thread-23282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:58:56.386 [DEBUG] [Thread-23282] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:58:56.388 [DEBUG] [Thread-23282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:58:56.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:58:56.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:58:56.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:58:56.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:58:56.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:58:56.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:58:56.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:58:56.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:58:56.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:58:56.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.665759 -999.00  +12.70  13.57     69   +7.20 1 1 1 1 1   887    0 4.79 -25.39 ----- 11.7 13.6 309.0 14.0 14.7 -26.7 14.6 -25.5 14.8 -23.8 15.3 -25.5
2026-04-15T17:58:56.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:58:56.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:58:56.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.665759
2026-04-15T17:58:56.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:58:56.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:58:56.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:58:56.410 [DEBUG] [Thread-23282] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:58:56.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:58:56.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:58:56.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:58:38', tmtdew=7.12897, humidity=61.8714, cloud=0.0, wind=11.9635, temperature=13.0313, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:58:41.578', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:58:56.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:58:56.624 [DEBUG] [Thread-23286] [transport.py] [_log()] starting thread (client mode): 0xf13ff760
2026-04-15T17:58:56.624 [DEBUG] [Thread-23286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:58:56.638 [DEBUG] [Thread-23286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:58:56.638 [INFO] [Thread-23286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:58:56.646 [DEBUG] [Thread-23286] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:58:56.646 [DEBUG] [Thread-23286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:58:56.646 [DEBUG] [Thread-23286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:58:56.646 [DEBUG] [Thread-23286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:58:56.646 [DEBUG] [Thread-23286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:58:56.646 [DEBUG] [Thread-23286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:58:56.646 [DEBUG] [Thread-23286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:58:56.646 [DEBUG] [Thread-23286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:58:56.646 [DEBUG] [Thread-23286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:58:56.646 [DEBUG] [Thread-23286] [transport.py] [_log()] client lang: <none>
2026-04-15T17:58:56.647 [DEBUG] [Thread-23286] [transport.py] [_log()] server lang: <none>
2026-04-15T17:58:56.647 [DEBUG] [Thread-23286] [transport.py] [_log()] kex follows: False
2026-04-15T17:58:56.647 [DEBUG] [Thread-23286] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:58:56.647 [DEBUG] [Thread-23286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:58:56.647 [DEBUG] [Thread-23286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:58:56.647 [DEBUG] [Thread-23286] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:58:56.647 [DEBUG] [Thread-23286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:58:56.647 [DEBUG] [Thread-23286] [transport.py] [_log()] Compression: none
2026-04-15T17:58:56.647 [DEBUG] [Thread-23286] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:58:56.702 [DEBUG] [Thread-23286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:58:56.703 [DEBUG] [Thread-23286] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:58:56.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:58:56.703 [DEBUG] [Thread-23286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:58:56.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:58:56.759 [DEBUG] [Thread-23286] [transport.py] [_log()] userauth is OK
2026-04-15T17:58:56.760 [DEBUG] [Thread-23286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:58:56.760 [DEBUG] [Thread-23286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:58:56.760 [DEBUG] [Thread-23286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:58:56.760 [DEBUG] [Thread-23286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:58:56.789 [INFO] [Thread-23286] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:58:56.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:58:56.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:58:57.610 [DEBUG] [Thread-23286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:58:57.610 [DEBUG] [Thread-23286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:58:57.658 [DEBUG] [Thread-23286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:58:57.658 [DEBUG] [Thread-23286] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:58:57.667 [DEBUG] [Thread-23286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:58:57.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:58:57.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')
2026-04-15T17:58:57.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
2026-04-15T17:58:57.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:58:57.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:58:57.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:58:57.701 [DEBUG] [Thread-23286] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:59:11.001 [DEBUG] [Thread-23288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:59:26.046 [DEBUG] [Thread-23289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:59:27.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T17:59:27.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T17:59:27.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
2026-04-15T17:59:28.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 59, 14), 6.94296, 62.7509, 0.0, 12.1932, 12.7492, 0, 0, 0, 2, 0, 0),)
2026-04-15T17:59:28.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:59:14
2026-04-15T17:59:29.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T17:59:29.816 [DEBUG] [Thread-23290] [transport.py] [_log()] starting thread (client mode): 0xee9af670
2026-04-15T17:59:29.816 [DEBUG] [Thread-23290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:59:29.837 [DEBUG] [Thread-23290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T17:59:29.837 [INFO] [Thread-23290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T17:59:29.840 [DEBUG] [Thread-23290] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:59:29.840 [DEBUG] [Thread-23290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T17:59:29.840 [DEBUG] [Thread-23290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:59:29.840 [DEBUG] [Thread-23290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:59:29.840 [DEBUG] [Thread-23290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:59:29.840 [DEBUG] [Thread-23290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:59:29.841 [DEBUG] [Thread-23290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:59:29.841 [DEBUG] [Thread-23290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:59:29.841 [DEBUG] [Thread-23290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:59:29.841 [DEBUG] [Thread-23290] [transport.py] [_log()] client lang: <none>
2026-04-15T17:59:29.841 [DEBUG] [Thread-23290] [transport.py] [_log()] server lang: <none>
2026-04-15T17:59:29.841 [DEBUG] [Thread-23290] [transport.py] [_log()] kex follows: False
2026-04-15T17:59:29.841 [DEBUG] [Thread-23290] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:59:29.841 [DEBUG] [Thread-23290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:59:29.841 [DEBUG] [Thread-23290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:59:29.841 [DEBUG] [Thread-23290] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:59:29.841 [DEBUG] [Thread-23290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:59:29.842 [DEBUG] [Thread-23290] [transport.py] [_log()] Compression: none
2026-04-15T17:59:29.842 [DEBUG] [Thread-23290] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:59:29.859 [DEBUG] [Thread-23290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:59:29.859 [DEBUG] [Thread-23290] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:59:29.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T17:59:29.860 [DEBUG] [Thread-23290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T17:59:29.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:59:29.861 [DEBUG] [Thread-23290] [transport.py] [_log()] userauth is OK
2026-04-15T17:59:29.861 [DEBUG] [Thread-23290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:59:29.861 [DEBUG] [Thread-23290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:59:29.862 [DEBUG] [Thread-23290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T17:59:29.862 [DEBUG] [Thread-23290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:59:29.881 [INFO] [Thread-23290] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:59:29.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:59:30.523 [DEBUG] [Thread-23290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:59:30.523 [DEBUG] [Thread-23290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:59:30.524 [DEBUG] [Thread-23290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T17:59:30.564 [DEBUG] [Thread-23290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:59:30.564 [DEBUG] [Thread-23290] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:59:30.567 [DEBUG] [Thread-23290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:59:30.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:59:30.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T17:59:30.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T17:59:30.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T17:59:30.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:59:30.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T17:59:30.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:59:30.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:59:30.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T17:59:30.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.666107 -999.00  +12.60  12.11     68   +7.00 1 1 1 1 1   887    0 4.79 -21.98 ----- 11.2 12.1 314.4 15.8 14.7 -26.7 14.6 -25.4 14.8 -23.6 15.2 -25.6
2026-04-15T17:59:30.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T17:59:30.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T17:59:30.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.666107
2026-04-15T17:59:30.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T17:59:30.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T17:59:30.593 [DEBUG] [Thread-23290] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:59:30.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T17:59:30.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T17:59:30.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T17:59:30.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:59:14', tmtdew=6.94296, humidity=62.7509, cloud=0.0, wind=12.1932, temperature=12.7492, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:59:11.645', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T17:59:30.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T17:59:30.852 [DEBUG] [Thread-23293] [transport.py] [_log()] starting thread (client mode): 0xee9ad570
2026-04-15T17:59:30.852 [DEBUG] [Thread-23293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T17:59:30.866 [DEBUG] [Thread-23293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T17:59:30.866 [INFO] [Thread-23293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T17:59:30.874 [DEBUG] [Thread-23293] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T17:59:30.874 [DEBUG] [Thread-23293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T17:59:30.874 [DEBUG] [Thread-23293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T17:59:30.874 [DEBUG] [Thread-23293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:59:30.874 [DEBUG] [Thread-23293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T17:59:30.874 [DEBUG] [Thread-23293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:59:30.874 [DEBUG] [Thread-23293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T17:59:30.874 [DEBUG] [Thread-23293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T17:59:30.875 [DEBUG] [Thread-23293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T17:59:30.875 [DEBUG] [Thread-23293] [transport.py] [_log()] client lang: <none>
2026-04-15T17:59:30.875 [DEBUG] [Thread-23293] [transport.py] [_log()] server lang: <none>
2026-04-15T17:59:30.875 [DEBUG] [Thread-23293] [transport.py] [_log()] kex follows: False
2026-04-15T17:59:30.875 [DEBUG] [Thread-23293] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T17:59:30.875 [DEBUG] [Thread-23293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T17:59:30.875 [DEBUG] [Thread-23293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T17:59:30.875 [DEBUG] [Thread-23293] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T17:59:30.875 [DEBUG] [Thread-23293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T17:59:30.875 [DEBUG] [Thread-23293] [transport.py] [_log()] Compression: none
2026-04-15T17:59:30.875 [DEBUG] [Thread-23293] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T17:59:30.931 [DEBUG] [Thread-23293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T17:59:30.931 [DEBUG] [Thread-23293] [transport.py] [_log()] Switch to new keys ...
2026-04-15T17:59:30.932 [DEBUG] [Thread-23293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T17:59:30.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T17:59:30.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T17:59:30.987 [DEBUG] [Thread-23293] [transport.py] [_log()] userauth is OK
2026-04-15T17:59:30.987 [DEBUG] [Thread-23293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T17:59:30.988 [DEBUG] [Thread-23293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T17:59:30.988 [DEBUG] [Thread-23293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T17:59:30.988 [DEBUG] [Thread-23293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T17:59:31.016 [INFO] [Thread-23293] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T17:59:31.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T17:59:31.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T17:59:31.847 [DEBUG] [Thread-23293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T17:59:31.848 [DEBUG] [Thread-23293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T17:59:31.896 [DEBUG] [Thread-23293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T17:59:31.896 [DEBUG] [Thread-23293] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T17:59:31.909 [DEBUG] [Thread-23293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T17:59:31.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T17:59:31.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')
2026-04-15T17:59: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
2026-04-15T17:59:31.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T17:59:31.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T17:59:31.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T17:59:31.951 [DEBUG] [Thread-23293] [transport.py] [_log()] EOF in transport thread
2026-04-15T17:59:33.229 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:59:33.231 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:59:41.077 [DEBUG] [Thread-23295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:59:45.749 [DEBUG] [Thread-23296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T17:59:56.124 [DEBUG] [Thread-23297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:00:01.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:00:01.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:00:01.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
2026-04-15T18:00:03.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 17, 59, 49), 6.97823, 62.5349, 0.0, 14.4331, 13.0983, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:00:03.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 17:59:49
2026-04-15T18:00:03.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:00:04.184 [DEBUG] [Thread-23298] [transport.py] [_log()] starting thread (client mode): 0xf1350640
2026-04-15T18:00:04.185 [DEBUG] [Thread-23298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:00:04.204 [DEBUG] [Thread-23298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:00:04.205 [INFO] [Thread-23298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:00:04.208 [DEBUG] [Thread-23298] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:00:04.208 [DEBUG] [Thread-23298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:00:04.208 [DEBUG] [Thread-23298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:00:04.208 [DEBUG] [Thread-23298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:00:04.208 [DEBUG] [Thread-23298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:00:04.208 [DEBUG] [Thread-23298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:00:04.208 [DEBUG] [Thread-23298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:00:04.208 [DEBUG] [Thread-23298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:00:04.208 [DEBUG] [Thread-23298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:00:04.208 [DEBUG] [Thread-23298] [transport.py] [_log()] client lang: <none>
2026-04-15T18:00:04.208 [DEBUG] [Thread-23298] [transport.py] [_log()] server lang: <none>
2026-04-15T18:00:04.208 [DEBUG] [Thread-23298] [transport.py] [_log()] kex follows: False
2026-04-15T18:00:04.208 [DEBUG] [Thread-23298] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:00:04.208 [DEBUG] [Thread-23298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:00:04.209 [DEBUG] [Thread-23298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:00:04.209 [DEBUG] [Thread-23298] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:00:04.209 [DEBUG] [Thread-23298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:00:04.209 [DEBUG] [Thread-23298] [transport.py] [_log()] Compression: none
2026-04-15T18:00:04.209 [DEBUG] [Thread-23298] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:00:04.228 [DEBUG] [Thread-23298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:00:04.228 [DEBUG] [Thread-23298] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:00:04.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:00:04.229 [DEBUG] [Thread-23298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:00:04.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:00:04.230 [DEBUG] [Thread-23298] [transport.py] [_log()] userauth is OK
2026-04-15T18:00:04.230 [DEBUG] [Thread-23298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:00:04.230 [DEBUG] [Thread-23298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:00:04.230 [DEBUG] [Thread-23298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:00:04.230 [DEBUG] [Thread-23298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:00:04.252 [INFO] [Thread-23298] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:00:04.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:00:05.335 [DEBUG] [Thread-23298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:00:05.335 [DEBUG] [Thread-23298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:00:05.336 [DEBUG] [Thread-23298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:00:05.376 [DEBUG] [Thread-23298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:00:05.376 [DEBUG] [Thread-23298] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:00:05.378 [DEBUG] [Thread-23298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:00:05.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:00:05.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:00:05.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:00:05.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:00:05.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:00:05.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:00:05.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:00:05.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:00:05.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:00:05.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.666454 -999.00  +12.60  12.38     69   +7.10 1 1 1 1 1   887    0 4.87 -18.91 ----- 12.2 12.4 314.6 13.6 14.7 -26.7 14.5 -25.5 14.8 -23.9 15.3 -25.7
2026-04-15T18:00:05.402 [DEBUG] [Thread-23298] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:00:05.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:00:05.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:00:05.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.666454
2026-04-15T18:00:05.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:00:05.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:00:05.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:00:05.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:00:05.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:00:05.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T17:59:49', tmtdew=6.97823, humidity=62.5349, cloud=0.0, wind=14.4331, temperature=13.0983, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T15:59:41.626', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:00:05.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:00:05.660 [DEBUG] [Thread-23301] [transport.py] [_log()] starting thread (client mode): 0xee905060
2026-04-15T18:00:05.660 [DEBUG] [Thread-23301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:00:05.675 [DEBUG] [Thread-23301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:00:05.675 [INFO] [Thread-23301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:00:05.682 [DEBUG] [Thread-23301] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:00:05.682 [DEBUG] [Thread-23301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:00:05.682 [DEBUG] [Thread-23301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:00:05.682 [DEBUG] [Thread-23301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:00:05.682 [DEBUG] [Thread-23301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:00:05.682 [DEBUG] [Thread-23301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:00:05.683 [DEBUG] [Thread-23301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:00:05.683 [DEBUG] [Thread-23301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:00:05.683 [DEBUG] [Thread-23301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:00:05.683 [DEBUG] [Thread-23301] [transport.py] [_log()] client lang: <none>
2026-04-15T18:00:05.683 [DEBUG] [Thread-23301] [transport.py] [_log()] server lang: <none>
2026-04-15T18:00:05.683 [DEBUG] [Thread-23301] [transport.py] [_log()] kex follows: False
2026-04-15T18:00:05.683 [DEBUG] [Thread-23301] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:00:05.683 [DEBUG] [Thread-23301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:00:05.683 [DEBUG] [Thread-23301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:00:05.683 [DEBUG] [Thread-23301] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:00:05.683 [DEBUG] [Thread-23301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:00:05.684 [DEBUG] [Thread-23301] [transport.py] [_log()] Compression: none
2026-04-15T18:00:05.684 [DEBUG] [Thread-23301] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:00:05.742 [DEBUG] [Thread-23301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:00:05.743 [DEBUG] [Thread-23301] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:00:05.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:00:05.743 [DEBUG] [Thread-23301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:00:05.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:00:05.800 [DEBUG] [Thread-23301] [transport.py] [_log()] userauth is OK
2026-04-15T18:00:05.800 [DEBUG] [Thread-23301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:00:05.800 [DEBUG] [Thread-23301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:00:05.800 [DEBUG] [Thread-23301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:00:05.800 [DEBUG] [Thread-23301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:00:05.819 [INFO] [Thread-23301] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:00:05.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:00:05.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:00:06.653 [DEBUG] [Thread-23301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:00:06.653 [DEBUG] [Thread-23301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:00:06.701 [DEBUG] [Thread-23301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:00:06.701 [DEBUG] [Thread-23301] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:00:06.710 [DEBUG] [Thread-23301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:00:06.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:00:06.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')
2026-04-15T18:00:06.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
2026-04-15T18:00:06.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:00:06.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:00:06.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:00:06.745 [DEBUG] [Thread-23301] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:00:11.155 [DEBUG] [Thread-23303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:00:26.199 [DEBUG] [Thread-23304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:00:33.372 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:00:33.373 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:00:36.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:00:36.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:00:36.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
2026-04-15T18:00:38.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 0, 25), 6.83291, 62.9997, 0.0, 12.6166, 12.7497, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:00:38.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:00:25
2026-04-15T18:00:38.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:00:38.883 [DEBUG] [Thread-23305] [transport.py] [_log()] starting thread (client mode): 0xee90c7f0
2026-04-15T18:00:38.883 [DEBUG] [Thread-23305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:00:38.902 [DEBUG] [Thread-23305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:00:38.902 [INFO] [Thread-23305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:00:38.905 [DEBUG] [Thread-23305] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:00:38.905 [DEBUG] [Thread-23305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:00:38.905 [DEBUG] [Thread-23305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:00:38.905 [DEBUG] [Thread-23305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:00:38.905 [DEBUG] [Thread-23305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:00:38.905 [DEBUG] [Thread-23305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:00:38.905 [DEBUG] [Thread-23305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:00:38.905 [DEBUG] [Thread-23305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:00:38.905 [DEBUG] [Thread-23305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:00:38.905 [DEBUG] [Thread-23305] [transport.py] [_log()] client lang: <none>
2026-04-15T18:00:38.905 [DEBUG] [Thread-23305] [transport.py] [_log()] server lang: <none>
2026-04-15T18:00:38.906 [DEBUG] [Thread-23305] [transport.py] [_log()] kex follows: False
2026-04-15T18:00:38.906 [DEBUG] [Thread-23305] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:00:38.906 [DEBUG] [Thread-23305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:00:38.906 [DEBUG] [Thread-23305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:00:38.906 [DEBUG] [Thread-23305] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:00:38.906 [DEBUG] [Thread-23305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:00:38.906 [DEBUG] [Thread-23305] [transport.py] [_log()] Compression: none
2026-04-15T18:00:38.906 [DEBUG] [Thread-23305] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:00:38.921 [DEBUG] [Thread-23305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:00:38.922 [DEBUG] [Thread-23305] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:00:38.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:00:38.922 [DEBUG] [Thread-23305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:00:38.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:00:38.923 [DEBUG] [Thread-23305] [transport.py] [_log()] userauth is OK
2026-04-15T18:00:38.923 [DEBUG] [Thread-23305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:00:38.923 [DEBUG] [Thread-23305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:00:38.923 [DEBUG] [Thread-23305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:00:38.924 [DEBUG] [Thread-23305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:00:38.947 [INFO] [Thread-23305] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:00:38.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:00:39.614 [DEBUG] [Thread-23305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:00:39.614 [DEBUG] [Thread-23305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:00:39.615 [DEBUG] [Thread-23305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:00:39.655 [DEBUG] [Thread-23305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:00:39.655 [DEBUG] [Thread-23305] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:00:39.658 [DEBUG] [Thread-23305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:00:39.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:00:39.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:00:39.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:00:39.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:00:39.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:00:39.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:00:39.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:00:39.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:00:39.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:00:39.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.666801 -999.00  +12.60  10.17     70   +7.30 1 1 1 1 1   887    0 5.02 -16.93 ----- 11.9 10.2 313.0 12.9 14.7 -26.5 14.5 -25.4 14.7 -23.4 15.2 -25.6
2026-04-15T18:00:39.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:00:39.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:00:39.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.666801
2026-04-15T18:00:39.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:00:39.681 [DEBUG] [Thread-23305] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:00:39.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:00:39.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:00:39.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:00:39.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:00:39.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:00:25', tmtdew=6.83291, humidity=62.9997, cloud=0.0, wind=12.6166, temperature=12.7497, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:00:11.606', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:00:39.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:00:39.936 [DEBUG] [Thread-23308] [transport.py] [_log()] starting thread (client mode): 0xf1337be0
2026-04-15T18:00:39.936 [DEBUG] [Thread-23308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:00:39.950 [DEBUG] [Thread-23308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:00:39.950 [INFO] [Thread-23308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:00:39.957 [DEBUG] [Thread-23308] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:00:39.958 [DEBUG] [Thread-23308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:00:39.958 [DEBUG] [Thread-23308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:00:39.958 [DEBUG] [Thread-23308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:00:39.958 [DEBUG] [Thread-23308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:00:39.958 [DEBUG] [Thread-23308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:00:39.958 [DEBUG] [Thread-23308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:00:39.958 [DEBUG] [Thread-23308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:00:39.958 [DEBUG] [Thread-23308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:00:39.958 [DEBUG] [Thread-23308] [transport.py] [_log()] client lang: <none>
2026-04-15T18:00:39.959 [DEBUG] [Thread-23308] [transport.py] [_log()] server lang: <none>
2026-04-15T18:00:39.959 [DEBUG] [Thread-23308] [transport.py] [_log()] kex follows: False
2026-04-15T18:00:39.959 [DEBUG] [Thread-23308] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:00:39.959 [DEBUG] [Thread-23308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:00:39.959 [DEBUG] [Thread-23308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:00:39.959 [DEBUG] [Thread-23308] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:00:39.959 [DEBUG] [Thread-23308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:00:39.959 [DEBUG] [Thread-23308] [transport.py] [_log()] Compression: none
2026-04-15T18:00:39.959 [DEBUG] [Thread-23308] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:00:40.015 [DEBUG] [Thread-23308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:00:40.015 [DEBUG] [Thread-23308] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:00:40.015 [DEBUG] [Thread-23308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:00:40.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:00:40.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:00:40.072 [DEBUG] [Thread-23308] [transport.py] [_log()] userauth is OK
2026-04-15T18:00:40.072 [DEBUG] [Thread-23308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:00:40.072 [DEBUG] [Thread-23308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:00:40.072 [DEBUG] [Thread-23308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:00:40.072 [DEBUG] [Thread-23308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:00:40.089 [INFO] [Thread-23308] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:00:40.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:00:40.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:00:40.950 [DEBUG] [Thread-23308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:00:40.951 [DEBUG] [Thread-23308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:00:40.998 [DEBUG] [Thread-23308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:00:40.998 [DEBUG] [Thread-23308] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:00:41.007 [DEBUG] [Thread-23308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:00:41.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:00:41.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')
2026-04-15T18:00:41.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') -> 00000000
2026-04-15T18:00:41.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:00:41.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:00:41.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:00:41.042 [DEBUG] [Thread-23308] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:00:41.229 [DEBUG] [Thread-23310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:00:45.852 [DEBUG] [Thread-23311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:00:56.274 [DEBUG] [Thread-23312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:01:11.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:01:11.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:01:11.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
2026-04-15T18:01:11.302 [DEBUG] [Thread-23313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:01:12.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 1), 6.8279, 63.0329, 0.0, 12.5284, 12.7994, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:01:12.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:01:00
2026-04-15T18:01:12.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:01:13.166 [DEBUG] [Thread-23314] [transport.py] [_log()] starting thread (client mode): 0xee90d780
2026-04-15T18:01:13.166 [DEBUG] [Thread-23314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:01:13.186 [DEBUG] [Thread-23314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:01:13.186 [INFO] [Thread-23314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:01:13.189 [DEBUG] [Thread-23314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:01:13.189 [DEBUG] [Thread-23314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:01:13.189 [DEBUG] [Thread-23314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:01:13.189 [DEBUG] [Thread-23314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:01:13.189 [DEBUG] [Thread-23314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:01:13.190 [DEBUG] [Thread-23314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:01:13.190 [DEBUG] [Thread-23314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:01:13.190 [DEBUG] [Thread-23314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:01:13.190 [DEBUG] [Thread-23314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:01:13.190 [DEBUG] [Thread-23314] [transport.py] [_log()] client lang: <none>
2026-04-15T18:01:13.190 [DEBUG] [Thread-23314] [transport.py] [_log()] server lang: <none>
2026-04-15T18:01:13.190 [DEBUG] [Thread-23314] [transport.py] [_log()] kex follows: False
2026-04-15T18:01:13.190 [DEBUG] [Thread-23314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:01:13.190 [DEBUG] [Thread-23314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:01:13.190 [DEBUG] [Thread-23314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:01:13.190 [DEBUG] [Thread-23314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:01:13.190 [DEBUG] [Thread-23314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:01:13.191 [DEBUG] [Thread-23314] [transport.py] [_log()] Compression: none
2026-04-15T18:01:13.191 [DEBUG] [Thread-23314] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:01:13.208 [DEBUG] [Thread-23314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:01:13.208 [DEBUG] [Thread-23314] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:01:13.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:01:13.209 [DEBUG] [Thread-23314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:01:13.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:01:13.210 [DEBUG] [Thread-23314] [transport.py] [_log()] userauth is OK
2026-04-15T18:01:13.210 [DEBUG] [Thread-23314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:01:13.211 [DEBUG] [Thread-23314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:01:13.211 [DEBUG] [Thread-23314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:01:13.211 [DEBUG] [Thread-23314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:01:13.236 [INFO] [Thread-23314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:01:13.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:01:13.886 [DEBUG] [Thread-23314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:01:13.886 [DEBUG] [Thread-23314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:01:13.887 [DEBUG] [Thread-23314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:01:13.927 [DEBUG] [Thread-23314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:01:13.927 [DEBUG] [Thread-23314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:01:13.930 [DEBUG] [Thread-23314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:01:13.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:01:13.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:01:13.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:01:13.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:01:13.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:01:13.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:01:13.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:01:13.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:01:13.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:01:13.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.667148 -999.00  +12.60  15.82     69   +7.30 1 1 1 1 1   887    0 4.89 -17.41 ----- 11.7 15.8 308.4 18.5 14.7 -26.6 14.5 -25.4 14.7 -23.8 15.2 -25.5
2026-04-15T18:01:13.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:01:13.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:01:13.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.667148
2026-04-15T18:01:13.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:01:13.954 [DEBUG] [Thread-23314] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:01:13.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:01:13.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:01:13.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:01:13.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:01:13.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:01:00', tmtdew=6.8279, humidity=63.0329, cloud=0.0, wind=12.5284, temperature=12.7994, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:00:41.587', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:01:14.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:01:14.212 [DEBUG] [Thread-23317] [transport.py] [_log()] starting thread (client mode): 0xee9af100
2026-04-15T18:01:14.212 [DEBUG] [Thread-23317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:01:14.226 [DEBUG] [Thread-23317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:01:14.227 [INFO] [Thread-23317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:01:14.235 [DEBUG] [Thread-23317] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:01:14.235 [DEBUG] [Thread-23317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:01:14.235 [DEBUG] [Thread-23317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:01:14.235 [DEBUG] [Thread-23317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:01:14.235 [DEBUG] [Thread-23317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:01:14.235 [DEBUG] [Thread-23317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:01:14.235 [DEBUG] [Thread-23317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:01:14.235 [DEBUG] [Thread-23317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:01:14.235 [DEBUG] [Thread-23317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:01:14.235 [DEBUG] [Thread-23317] [transport.py] [_log()] client lang: <none>
2026-04-15T18:01:14.236 [DEBUG] [Thread-23317] [transport.py] [_log()] server lang: <none>
2026-04-15T18:01:14.236 [DEBUG] [Thread-23317] [transport.py] [_log()] kex follows: False
2026-04-15T18:01:14.236 [DEBUG] [Thread-23317] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:01:14.236 [DEBUG] [Thread-23317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:01:14.236 [DEBUG] [Thread-23317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:01:14.236 [DEBUG] [Thread-23317] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:01:14.236 [DEBUG] [Thread-23317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:01:14.236 [DEBUG] [Thread-23317] [transport.py] [_log()] Compression: none
2026-04-15T18:01:14.236 [DEBUG] [Thread-23317] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:01:14.291 [DEBUG] [Thread-23317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:01:14.291 [DEBUG] [Thread-23317] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:01:14.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:01:14.292 [DEBUG] [Thread-23317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:01:14.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:01:14.347 [DEBUG] [Thread-23317] [transport.py] [_log()] userauth is OK
2026-04-15T18:01:14.347 [DEBUG] [Thread-23317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:01:14.348 [DEBUG] [Thread-23317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:01:14.348 [DEBUG] [Thread-23317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:01:14.348 [DEBUG] [Thread-23317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:01:14.365 [INFO] [Thread-23317] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:01:14.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:01:14.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:01:15.183 [DEBUG] [Thread-23317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:01:15.183 [DEBUG] [Thread-23317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:01:15.231 [DEBUG] [Thread-23317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:01:15.231 [DEBUG] [Thread-23317] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:01:15.240 [DEBUG] [Thread-23317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:01:15.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:01:15.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')
2026-04-15T18:01:15.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
2026-04-15T18:01:15.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:01:15.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:01:15.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:01:15.275 [DEBUG] [Thread-23317] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:01:26.329 [DEBUG] [Thread-23319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:01:33.515 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:01:33.516 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:01:41.367 [DEBUG] [Thread-23320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:01:45.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:01:45.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:01:45.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T18:01:45.930 [DEBUG] [Thread-23321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:01:46.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 1, 36), 6.65123, 63.9615, 0.0, 14.5742, 13.0999, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:01:46.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:01:36
2026-04-15T18:01:47.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:01:47.507 [DEBUG] [Thread-23322] [transport.py] [_log()] starting thread (client mode): 0xf17c3160
2026-04-15T18:01:47.507 [DEBUG] [Thread-23322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:01:47.527 [DEBUG] [Thread-23322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:01:47.527 [INFO] [Thread-23322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:01:47.530 [DEBUG] [Thread-23322] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:01:47.530 [DEBUG] [Thread-23322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:01:47.530 [DEBUG] [Thread-23322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:01:47.530 [DEBUG] [Thread-23322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:01:47.530 [DEBUG] [Thread-23322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:01:47.530 [DEBUG] [Thread-23322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:01:47.530 [DEBUG] [Thread-23322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:01:47.531 [DEBUG] [Thread-23322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:01:47.531 [DEBUG] [Thread-23322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:01:47.531 [DEBUG] [Thread-23322] [transport.py] [_log()] client lang: <none>
2026-04-15T18:01:47.531 [DEBUG] [Thread-23322] [transport.py] [_log()] server lang: <none>
2026-04-15T18:01:47.531 [DEBUG] [Thread-23322] [transport.py] [_log()] kex follows: False
2026-04-15T18:01:47.531 [DEBUG] [Thread-23322] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:01:47.531 [DEBUG] [Thread-23322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:01:47.531 [DEBUG] [Thread-23322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:01:47.531 [DEBUG] [Thread-23322] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:01:47.531 [DEBUG] [Thread-23322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:01:47.531 [DEBUG] [Thread-23322] [transport.py] [_log()] Compression: none
2026-04-15T18:01:47.532 [DEBUG] [Thread-23322] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:01:47.548 [DEBUG] [Thread-23322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:01:47.549 [DEBUG] [Thread-23322] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:01:47.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:01:47.549 [DEBUG] [Thread-23322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:01:47.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:01:47.592 [DEBUG] [Thread-23322] [transport.py] [_log()] userauth is OK
2026-04-15T18:01:47.592 [DEBUG] [Thread-23322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:01:47.593 [DEBUG] [Thread-23322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:01:47.593 [DEBUG] [Thread-23322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:01:47.593 [DEBUG] [Thread-23322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:01:47.617 [INFO] [Thread-23322] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:01:47.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:01:48.262 [DEBUG] [Thread-23322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:01:48.263 [DEBUG] [Thread-23322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:01:48.263 [DEBUG] [Thread-23322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:01:48.303 [DEBUG] [Thread-23322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:01:48.303 [DEBUG] [Thread-23322] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:01:48.305 [DEBUG] [Thread-23322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:01:48.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:01:48.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:01:48.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:01:48.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:01:48.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:01:48.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:01:48.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:01:48.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:01:48.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:01:48.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.667495 -999.00  +12.60  11.54     69   +7.30 1 1 1 1 1   887    0 4.96 -16.29 ----- 13.8 11.5 318.2 15.9 14.7 -26.7 14.5 -25.4 14.7 -23.7 15.2 -25.8
2026-04-15T18:01:48.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:01:48.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:01:48.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.667495
2026-04-15T18:01:48.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:01:48.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:01:48.329 [DEBUG] [Thread-23322] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:01:48.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:01:48.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:01:48.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:01:48.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:01:36', tmtdew=6.65123, humidity=63.9615, cloud=0.0, wind=14.5742, temperature=13.0999, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:01:11.568', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:01:48.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:01:48.584 [DEBUG] [Thread-23325] [transport.py] [_log()] starting thread (client mode): 0xf1336f50
2026-04-15T18:01:48.584 [DEBUG] [Thread-23325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:01:48.598 [DEBUG] [Thread-23325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:01:48.598 [INFO] [Thread-23325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:01:48.606 [DEBUG] [Thread-23325] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:01:48.606 [DEBUG] [Thread-23325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:01:48.606 [DEBUG] [Thread-23325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:01:48.606 [DEBUG] [Thread-23325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:01:48.606 [DEBUG] [Thread-23325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:01:48.606 [DEBUG] [Thread-23325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:01:48.606 [DEBUG] [Thread-23325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:01:48.606 [DEBUG] [Thread-23325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:01:48.606 [DEBUG] [Thread-23325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:01:48.606 [DEBUG] [Thread-23325] [transport.py] [_log()] client lang: <none>
2026-04-15T18:01:48.606 [DEBUG] [Thread-23325] [transport.py] [_log()] server lang: <none>
2026-04-15T18:01:48.606 [DEBUG] [Thread-23325] [transport.py] [_log()] kex follows: False
2026-04-15T18:01:48.606 [DEBUG] [Thread-23325] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:01:48.607 [DEBUG] [Thread-23325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:01:48.607 [DEBUG] [Thread-23325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:01:48.607 [DEBUG] [Thread-23325] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:01:48.607 [DEBUG] [Thread-23325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:01:48.607 [DEBUG] [Thread-23325] [transport.py] [_log()] Compression: none
2026-04-15T18:01:48.607 [DEBUG] [Thread-23325] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:01:48.665 [DEBUG] [Thread-23325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:01:48.665 [DEBUG] [Thread-23325] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:01:48.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:01:48.666 [DEBUG] [Thread-23325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:01:48.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:01:48.727 [DEBUG] [Thread-23325] [transport.py] [_log()] userauth is OK
2026-04-15T18:01:48.728 [DEBUG] [Thread-23325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:01:48.728 [DEBUG] [Thread-23325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:01:48.728 [DEBUG] [Thread-23325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:01:48.728 [DEBUG] [Thread-23325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:01:48.753 [INFO] [Thread-23325] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:01:48.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:01:48.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:01:49.617 [DEBUG] [Thread-23325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:01:49.618 [DEBUG] [Thread-23325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:01:49.665 [DEBUG] [Thread-23325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:01:49.665 [DEBUG] [Thread-23325] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:01:49.674 [DEBUG] [Thread-23325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:01:49.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:01:49.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')
2026-04-15T18:01:49.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') -> 00000000
2026-04-15T18:01:49.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:01:49.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:01:49.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:01:49.711 [DEBUG] [Thread-23325] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:01:56.397 [DEBUG] [Thread-23327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:02:11.435 [DEBUG] [Thread-23328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:02:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:02:19.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:02:19.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
2026-04-15T18:02:20.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 2, 11), 6.6969, 63.6493, 0.0, 13.0223, 12.6671, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:02:20.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:02:11
2026-04-15T18:02:21.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:02:21.820 [DEBUG] [Thread-23329] [transport.py] [_log()] starting thread (client mode): 0xf13373d0
2026-04-15T18:02:21.820 [DEBUG] [Thread-23329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:02:21.841 [DEBUG] [Thread-23329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:02:21.841 [INFO] [Thread-23329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:02:21.844 [DEBUG] [Thread-23329] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:02:21.844 [DEBUG] [Thread-23329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:02:21.844 [DEBUG] [Thread-23329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:02:21.844 [DEBUG] [Thread-23329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:02:21.845 [DEBUG] [Thread-23329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:02:21.845 [DEBUG] [Thread-23329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:02:21.845 [DEBUG] [Thread-23329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:02:21.845 [DEBUG] [Thread-23329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:02:21.845 [DEBUG] [Thread-23329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:02:21.845 [DEBUG] [Thread-23329] [transport.py] [_log()] client lang: <none>
2026-04-15T18:02:21.845 [DEBUG] [Thread-23329] [transport.py] [_log()] server lang: <none>
2026-04-15T18:02:21.845 [DEBUG] [Thread-23329] [transport.py] [_log()] kex follows: False
2026-04-15T18:02:21.845 [DEBUG] [Thread-23329] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:02:21.845 [DEBUG] [Thread-23329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:02:21.845 [DEBUG] [Thread-23329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:02:21.846 [DEBUG] [Thread-23329] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:02:21.846 [DEBUG] [Thread-23329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:02:21.846 [DEBUG] [Thread-23329] [transport.py] [_log()] Compression: none
2026-04-15T18:02:21.846 [DEBUG] [Thread-23329] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:02:21.863 [DEBUG] [Thread-23329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:02:21.863 [DEBUG] [Thread-23329] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:02:21.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:02:21.864 [DEBUG] [Thread-23329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:02:21.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:02:21.865 [DEBUG] [Thread-23329] [transport.py] [_log()] userauth is OK
2026-04-15T18:02:21.865 [DEBUG] [Thread-23329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:02:21.865 [DEBUG] [Thread-23329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:02:21.866 [DEBUG] [Thread-23329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:02:21.866 [DEBUG] [Thread-23329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:02:21.891 [INFO] [Thread-23329] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:02:21.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:02:22.493 [DEBUG] [Thread-23329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:02:22.494 [DEBUG] [Thread-23329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:02:22.495 [DEBUG] [Thread-23329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:02:22.534 [DEBUG] [Thread-23329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:02:22.534 [DEBUG] [Thread-23329] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:02:22.536 [DEBUG] [Thread-23329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:02:22.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:02:22.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:02:22.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:02:22.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:02:22.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:02:22.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:02:22.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:02:22.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:02:22.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:02:22.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.667843 -999.00  +12.60  15.29     69   +7.10 1 1 1 1 1   887    0 4.88 -14.82 ----- 13.9 15.3 307.6 15.8 14.6 -26.9 14.5 -25.7 14.6 -23.8 15.1 -26.1
2026-04-15T18:02:22.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:02:22.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:02:22.559 [DEBUG] [Thread-23329] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:02:22.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.667843
2026-04-15T18:02:22.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:02:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:02:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:02:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:02:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:02:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:02:11', tmtdew=6.6969, humidity=63.6493, cloud=0.0, wind=13.0223, temperature=12.6671, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:01:41.635', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:02:22.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:02:22.810 [DEBUG] [Thread-23332] [transport.py] [_log()] starting thread (client mode): 0xf13fde40
2026-04-15T18:02:22.811 [DEBUG] [Thread-23332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:02:22.825 [DEBUG] [Thread-23332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:02:22.825 [INFO] [Thread-23332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:02:22.832 [DEBUG] [Thread-23332] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:02:22.832 [DEBUG] [Thread-23332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:02:22.832 [DEBUG] [Thread-23332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:02:22.833 [DEBUG] [Thread-23332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:02:22.833 [DEBUG] [Thread-23332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:02:22.833 [DEBUG] [Thread-23332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:02:22.833 [DEBUG] [Thread-23332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:02:22.833 [DEBUG] [Thread-23332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:02:22.833 [DEBUG] [Thread-23332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:02:22.833 [DEBUG] [Thread-23332] [transport.py] [_log()] client lang: <none>
2026-04-15T18:02:22.833 [DEBUG] [Thread-23332] [transport.py] [_log()] server lang: <none>
2026-04-15T18:02:22.833 [DEBUG] [Thread-23332] [transport.py] [_log()] kex follows: False
2026-04-15T18:02:22.833 [DEBUG] [Thread-23332] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:02:22.833 [DEBUG] [Thread-23332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:02:22.833 [DEBUG] [Thread-23332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:02:22.834 [DEBUG] [Thread-23332] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:02:22.834 [DEBUG] [Thread-23332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:02:22.834 [DEBUG] [Thread-23332] [transport.py] [_log()] Compression: none
2026-04-15T18:02:22.834 [DEBUG] [Thread-23332] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:02:22.890 [DEBUG] [Thread-23332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:02:22.891 [DEBUG] [Thread-23332] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:02:22.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:02:22.891 [DEBUG] [Thread-23332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:02:22.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:02:22.947 [DEBUG] [Thread-23332] [transport.py] [_log()] userauth is OK
2026-04-15T18:02:22.948 [DEBUG] [Thread-23332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:02:22.948 [DEBUG] [Thread-23332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:02:22.948 [DEBUG] [Thread-23332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:02:22.948 [DEBUG] [Thread-23332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:02:22.975 [INFO] [Thread-23332] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:02:22.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:02:22.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:02:23.813 [DEBUG] [Thread-23332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:02:23.814 [DEBUG] [Thread-23332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:02:23.861 [DEBUG] [Thread-23332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:02:23.861 [DEBUG] [Thread-23332] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:02:23.870 [DEBUG] [Thread-23332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:02:23.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:02:23.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')
2026-04-15T18:02:23.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') -> 00000000
2026-04-15T18:02:23.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:02:23.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:02:23.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:02:23.905 [DEBUG] [Thread-23332] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:02:26.463 [DEBUG] [Thread-23334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:02:33.656 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:02:33.658 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:02:41.500 [DEBUG] [Thread-23335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:02:46.004 [DEBUG] [Thread-23336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:02:53.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:02:53.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:02:53.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
2026-04-15T18:02:55.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 2, 47), 6.62766, 64.0286, 0.0, 15.2093, 12.9349, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:02:55.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:02:47
2026-04-15T18:02:55.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:02:56.074 [DEBUG] [Thread-23337] [transport.py] [_log()] starting thread (client mode): 0xee90eef0
2026-04-15T18:02:56.074 [DEBUG] [Thread-23337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:02:56.094 [DEBUG] [Thread-23337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:02:56.094 [INFO] [Thread-23337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:02:56.098 [DEBUG] [Thread-23337] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:02:56.098 [DEBUG] [Thread-23337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:02:56.098 [DEBUG] [Thread-23337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:02:56.098 [DEBUG] [Thread-23337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:02:56.098 [DEBUG] [Thread-23337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:02:56.098 [DEBUG] [Thread-23337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:02:56.098 [DEBUG] [Thread-23337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:02:56.098 [DEBUG] [Thread-23337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:02:56.098 [DEBUG] [Thread-23337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:02:56.098 [DEBUG] [Thread-23337] [transport.py] [_log()] client lang: <none>
2026-04-15T18:02:56.099 [DEBUG] [Thread-23337] [transport.py] [_log()] server lang: <none>
2026-04-15T18:02:56.099 [DEBUG] [Thread-23337] [transport.py] [_log()] kex follows: False
2026-04-15T18:02:56.099 [DEBUG] [Thread-23337] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:02:56.099 [DEBUG] [Thread-23337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:02:56.099 [DEBUG] [Thread-23337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:02:56.099 [DEBUG] [Thread-23337] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:02:56.099 [DEBUG] [Thread-23337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:02:56.099 [DEBUG] [Thread-23337] [transport.py] [_log()] Compression: none
2026-04-15T18:02:56.099 [DEBUG] [Thread-23337] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:02:56.115 [DEBUG] [Thread-23337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:02:56.115 [DEBUG] [Thread-23337] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:02:56.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:02:56.116 [DEBUG] [Thread-23337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:02:56.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:02:56.117 [DEBUG] [Thread-23337] [transport.py] [_log()] userauth is OK
2026-04-15T18:02:56.117 [DEBUG] [Thread-23337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:02:56.117 [DEBUG] [Thread-23337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:02:56.118 [DEBUG] [Thread-23337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:02:56.118 [DEBUG] [Thread-23337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:02:56.143 [INFO] [Thread-23337] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:02:56.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:02:56.528 [DEBUG] [Thread-23339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:02:56.777 [DEBUG] [Thread-23337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:02:56.777 [DEBUG] [Thread-23337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:02:56.778 [DEBUG] [Thread-23337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:02:56.818 [DEBUG] [Thread-23337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:02:56.818 [DEBUG] [Thread-23337] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:02:56.821 [DEBUG] [Thread-23337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:02:56.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:02:56.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:02:56.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:02:56.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:02:56.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:02:56.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:02:56.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:02:56.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:02:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:02:56.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.668537 -999.00  +12.40  11.91     70   +7.20 1 1 1 1 1   886    0 5.03 -12.31 ----- 11.5 11.9 314.4 14.9 14.5 -26.9 14.4 -25.7 14.3 -24.0 14.9 -25.9
2026-04-15T18:02:56.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:02:56.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:02:56.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.668537
2026-04-15T18:02:56.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:02:56.846 [DEBUG] [Thread-23337] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:02:56.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:02:56.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:02:56.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:02:56.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:02:56.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:02:47', tmtdew=6.62766, humidity=64.0286, cloud=0.0, wind=15.2093, temperature=12.9349, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:02:41.597', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:02:57.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:02:57.104 [DEBUG] [Thread-23341] [transport.py] [_log()] starting thread (client mode): 0xf1335cc0
2026-04-15T18:02:57.104 [DEBUG] [Thread-23341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:02:57.121 [DEBUG] [Thread-23341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:02:57.121 [INFO] [Thread-23341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:02:57.128 [DEBUG] [Thread-23341] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:02:57.129 [DEBUG] [Thread-23341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:02:57.129 [DEBUG] [Thread-23341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:02:57.129 [DEBUG] [Thread-23341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:02:57.129 [DEBUG] [Thread-23341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:02:57.129 [DEBUG] [Thread-23341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:02:57.129 [DEBUG] [Thread-23341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:02:57.129 [DEBUG] [Thread-23341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:02:57.129 [DEBUG] [Thread-23341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:02:57.129 [DEBUG] [Thread-23341] [transport.py] [_log()] client lang: <none>
2026-04-15T18:02:57.129 [DEBUG] [Thread-23341] [transport.py] [_log()] server lang: <none>
2026-04-15T18:02:57.129 [DEBUG] [Thread-23341] [transport.py] [_log()] kex follows: False
2026-04-15T18:02:57.130 [DEBUG] [Thread-23341] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:02:57.130 [DEBUG] [Thread-23341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:02:57.130 [DEBUG] [Thread-23341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:02:57.130 [DEBUG] [Thread-23341] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:02:57.130 [DEBUG] [Thread-23341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:02:57.130 [DEBUG] [Thread-23341] [transport.py] [_log()] Compression: none
2026-04-15T18:02:57.130 [DEBUG] [Thread-23341] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:02:57.187 [DEBUG] [Thread-23341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:02:57.188 [DEBUG] [Thread-23341] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:02:57.188 [DEBUG] [Thread-23341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:02:57.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:02:57.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:02:57.243 [DEBUG] [Thread-23341] [transport.py] [_log()] userauth is OK
2026-04-15T18:02:57.244 [DEBUG] [Thread-23341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:02:57.244 [DEBUG] [Thread-23341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:02:57.244 [DEBUG] [Thread-23341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:02:57.244 [DEBUG] [Thread-23341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:02:57.272 [INFO] [Thread-23341] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:02:57.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:02:57.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:02:58.100 [DEBUG] [Thread-23341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:02:58.100 [DEBUG] [Thread-23341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:02:58.148 [DEBUG] [Thread-23341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:02:58.148 [DEBUG] [Thread-23341] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:02:58.157 [DEBUG] [Thread-23341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:02:58.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:02:58.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')
2026-04-15T18:02:58.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
2026-04-15T18:02:58.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:02:58.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:02:58.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:02:58.192 [DEBUG] [Thread-23341] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:03:11.558 [DEBUG] [Thread-23343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:03:26.601 [DEBUG] [Thread-23344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:03:28.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:03:28.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:03:28.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
2026-04-15T18:03:29.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 3, 22), 6.53842, 64.1303, 0.0, 10.7284, 12.584, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:03:29.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:03:22
2026-04-15T18:03:29.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:03:30.259 [DEBUG] [Thread-23345] [transport.py] [_log()] starting thread (client mode): 0xee9af820
2026-04-15T18:03:30.259 [DEBUG] [Thread-23345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:03:30.279 [DEBUG] [Thread-23345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:03:30.279 [INFO] [Thread-23345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:03:30.281 [DEBUG] [Thread-23345] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:03:30.281 [DEBUG] [Thread-23345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:03:30.281 [DEBUG] [Thread-23345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:03:30.281 [DEBUG] [Thread-23345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:03:30.281 [DEBUG] [Thread-23345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:03:30.281 [DEBUG] [Thread-23345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:03:30.281 [DEBUG] [Thread-23345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:03:30.282 [DEBUG] [Thread-23345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:03:30.282 [DEBUG] [Thread-23345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:03:30.282 [DEBUG] [Thread-23345] [transport.py] [_log()] client lang: <none>
2026-04-15T18:03:30.282 [DEBUG] [Thread-23345] [transport.py] [_log()] server lang: <none>
2026-04-15T18:03:30.282 [DEBUG] [Thread-23345] [transport.py] [_log()] kex follows: False
2026-04-15T18:03:30.282 [DEBUG] [Thread-23345] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:03:30.282 [DEBUG] [Thread-23345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:03:30.282 [DEBUG] [Thread-23345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:03:30.282 [DEBUG] [Thread-23345] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:03:30.282 [DEBUG] [Thread-23345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:03:30.282 [DEBUG] [Thread-23345] [transport.py] [_log()] Compression: none
2026-04-15T18:03:30.282 [DEBUG] [Thread-23345] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:03:30.292 [DEBUG] [Thread-23345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:03:30.293 [DEBUG] [Thread-23345] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:03:30.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:03:30.293 [DEBUG] [Thread-23345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:03:30.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:03:30.336 [DEBUG] [Thread-23345] [transport.py] [_log()] userauth is OK
2026-04-15T18:03:30.337 [DEBUG] [Thread-23345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:03:30.337 [DEBUG] [Thread-23345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:03:30.337 [DEBUG] [Thread-23345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:03:30.337 [DEBUG] [Thread-23345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:03:30.369 [INFO] [Thread-23345] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:03:30.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:03:31.014 [DEBUG] [Thread-23345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:03:31.014 [DEBUG] [Thread-23345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:03:31.015 [DEBUG] [Thread-23345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:03:31.055 [DEBUG] [Thread-23345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:03:31.055 [DEBUG] [Thread-23345] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:03:31.058 [DEBUG] [Thread-23345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:03:31.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:03:31.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:03:31.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:03:31.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:03:31.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:03:31.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:03:31.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:03:31.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:03:31.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:03:31.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.668884 -999.00  +12.40  14.35     70   +7.10 1 1 1 1 1   886    0 5.16 -12.73 ----- 15.9 14.3 315.2 17.5 14.5 -26.8 14.4 -25.8 14.3 -23.6 14.8 -25.8
2026-04-15T18:03:31.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:03:31.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:03:31.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.668884
2026-04-15T18:03:31.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:03:31.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:03:31.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:03:31.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:03:31.084 [DEBUG] [Thread-23345] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:03:31.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:03:31.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:03:22', tmtdew=6.53842, humidity=64.1303, cloud=0.0, wind=10.7284, temperature=12.584, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:03:11.578', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:03:31.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:03:31.341 [DEBUG] [Thread-23348] [transport.py] [_log()] starting thread (client mode): 0xee90f280
2026-04-15T18:03:31.341 [DEBUG] [Thread-23348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:03:31.356 [DEBUG] [Thread-23348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:03:31.356 [INFO] [Thread-23348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:03:31.364 [DEBUG] [Thread-23348] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:03:31.364 [DEBUG] [Thread-23348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:03:31.364 [DEBUG] [Thread-23348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:03:31.364 [DEBUG] [Thread-23348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:03:31.365 [DEBUG] [Thread-23348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:03:31.365 [DEBUG] [Thread-23348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:03:31.365 [DEBUG] [Thread-23348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:03:31.365 [DEBUG] [Thread-23348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:03:31.365 [DEBUG] [Thread-23348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:03:31.365 [DEBUG] [Thread-23348] [transport.py] [_log()] client lang: <none>
2026-04-15T18:03:31.365 [DEBUG] [Thread-23348] [transport.py] [_log()] server lang: <none>
2026-04-15T18:03:31.365 [DEBUG] [Thread-23348] [transport.py] [_log()] kex follows: False
2026-04-15T18:03:31.365 [DEBUG] [Thread-23348] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:03:31.365 [DEBUG] [Thread-23348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:03:31.365 [DEBUG] [Thread-23348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:03:31.366 [DEBUG] [Thread-23348] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:03:31.366 [DEBUG] [Thread-23348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:03:31.366 [DEBUG] [Thread-23348] [transport.py] [_log()] Compression: none
2026-04-15T18:03:31.366 [DEBUG] [Thread-23348] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:03:31.422 [DEBUG] [Thread-23348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:03:31.423 [DEBUG] [Thread-23348] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:03:31.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:03:31.423 [DEBUG] [Thread-23348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:03:31.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:03:31.479 [DEBUG] [Thread-23348] [transport.py] [_log()] userauth is OK
2026-04-15T18:03:31.480 [DEBUG] [Thread-23348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:03:31.480 [DEBUG] [Thread-23348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:03:31.480 [DEBUG] [Thread-23348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:03:31.480 [DEBUG] [Thread-23348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:03:31.505 [INFO] [Thread-23348] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:03:31.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:03:31.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:03:32.348 [DEBUG] [Thread-23348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:03:32.349 [DEBUG] [Thread-23348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:03:32.396 [DEBUG] [Thread-23348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:03:32.396 [DEBUG] [Thread-23348] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:03:32.407 [DEBUG] [Thread-23348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:03:32.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:03:32.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')
2026-04-15T18:03:32.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
2026-04-15T18:03:32.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:03:32.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:03:32.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:03:32.441 [DEBUG] [Thread-23348] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:03:33.797 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:03:33.799 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:03:41.631 [DEBUG] [Thread-23350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:03:46.107 [DEBUG] [Thread-23351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:03:56.671 [DEBUG] [Thread-23352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:04:02.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:04:02.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:04:02.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
2026-04-15T18:04:03.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 3, 22), 6.53842, 64.1303, 0.0, 10.7284, 12.584, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:04:03.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:03:22
2026-04-15T18:04:04.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:04:04.593 [DEBUG] [Thread-23353] [transport.py] [_log()] starting thread (client mode): 0xf17c1120
2026-04-15T18:04:04.593 [DEBUG] [Thread-23353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:04:04.612 [DEBUG] [Thread-23353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:04:04.612 [INFO] [Thread-23353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:04:04.616 [DEBUG] [Thread-23353] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:04:04.616 [DEBUG] [Thread-23353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:04:04.616 [DEBUG] [Thread-23353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:04:04.616 [DEBUG] [Thread-23353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:04:04.616 [DEBUG] [Thread-23353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:04:04.616 [DEBUG] [Thread-23353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:04:04.616 [DEBUG] [Thread-23353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:04:04.616 [DEBUG] [Thread-23353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:04:04.616 [DEBUG] [Thread-23353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:04:04.616 [DEBUG] [Thread-23353] [transport.py] [_log()] client lang: <none>
2026-04-15T18:04:04.617 [DEBUG] [Thread-23353] [transport.py] [_log()] server lang: <none>
2026-04-15T18:04:04.617 [DEBUG] [Thread-23353] [transport.py] [_log()] kex follows: False
2026-04-15T18:04:04.617 [DEBUG] [Thread-23353] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:04:04.617 [DEBUG] [Thread-23353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:04:04.617 [DEBUG] [Thread-23353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:04:04.617 [DEBUG] [Thread-23353] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:04:04.617 [DEBUG] [Thread-23353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:04:04.617 [DEBUG] [Thread-23353] [transport.py] [_log()] Compression: none
2026-04-15T18:04:04.617 [DEBUG] [Thread-23353] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:04:04.634 [DEBUG] [Thread-23353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:04:04.635 [DEBUG] [Thread-23353] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:04:04.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:04:04.635 [DEBUG] [Thread-23353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:04:04.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:04:04.636 [DEBUG] [Thread-23353] [transport.py] [_log()] userauth is OK
2026-04-15T18:04:04.637 [DEBUG] [Thread-23353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:04:04.637 [DEBUG] [Thread-23353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:04:04.637 [DEBUG] [Thread-23353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:04:04.637 [DEBUG] [Thread-23353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:04:04.673 [INFO] [Thread-23353] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:04:04.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:04:05.280 [DEBUG] [Thread-23353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:04:05.281 [DEBUG] [Thread-23353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:04:05.281 [DEBUG] [Thread-23353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:04:05.321 [DEBUG] [Thread-23353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:04:05.321 [DEBUG] [Thread-23353] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:04:05.324 [DEBUG] [Thread-23353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:04:05.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:04:05.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:04:05.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:04:05.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:04:05.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:04:05.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:04:05.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:04:05.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:04:05.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:04:05.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.669231 -999.00  +12.30  12.73     70   +7.20 1 1 1 1 1   886    0 5.03 -13.35 ----- 12.5 12.7 313.8 18.6 14.5 -26.9 14.3 -25.8 14.2 -23.6 14.7 -25.8
2026-04-15T18:04:05.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:04:05.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:04:05.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.669231
2026-04-15T18:04:05.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:04:05.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:04:05.350 [DEBUG] [Thread-23353] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:04:05.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:04:05.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:04:05.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:04:05.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:03:22', tmtdew=6.53842, humidity=64.1303, cloud=0.0, wind=10.7284, temperature=12.584, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:03:41.558', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:04:05.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:04:05.608 [DEBUG] [Thread-23356] [transport.py] [_log()] starting thread (client mode): 0xf1353a90
2026-04-15T18:04:05.609 [DEBUG] [Thread-23356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:04:05.623 [DEBUG] [Thread-23356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:04:05.623 [INFO] [Thread-23356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:04:05.630 [DEBUG] [Thread-23356] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:04:05.630 [DEBUG] [Thread-23356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:04:05.631 [DEBUG] [Thread-23356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:04:05.631 [DEBUG] [Thread-23356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:04:05.631 [DEBUG] [Thread-23356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:04:05.631 [DEBUG] [Thread-23356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:04:05.631 [DEBUG] [Thread-23356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:04:05.631 [DEBUG] [Thread-23356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:04:05.631 [DEBUG] [Thread-23356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:04:05.631 [DEBUG] [Thread-23356] [transport.py] [_log()] client lang: <none>
2026-04-15T18:04:05.631 [DEBUG] [Thread-23356] [transport.py] [_log()] server lang: <none>
2026-04-15T18:04:05.631 [DEBUG] [Thread-23356] [transport.py] [_log()] kex follows: False
2026-04-15T18:04:05.631 [DEBUG] [Thread-23356] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:04:05.631 [DEBUG] [Thread-23356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:04:05.631 [DEBUG] [Thread-23356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:04:05.632 [DEBUG] [Thread-23356] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:04:05.632 [DEBUG] [Thread-23356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:04:05.632 [DEBUG] [Thread-23356] [transport.py] [_log()] Compression: none
2026-04-15T18:04:05.632 [DEBUG] [Thread-23356] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:04:05.692 [DEBUG] [Thread-23356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:04:05.692 [DEBUG] [Thread-23356] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:04:05.693 [DEBUG] [Thread-23356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:04:05.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:04:05.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:04:05.747 [DEBUG] [Thread-23356] [transport.py] [_log()] userauth is OK
2026-04-15T18:04:05.748 [DEBUG] [Thread-23356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:04:05.748 [DEBUG] [Thread-23356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:04:05.748 [DEBUG] [Thread-23356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:04:05.748 [DEBUG] [Thread-23356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:04:05.773 [INFO] [Thread-23356] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:04:05.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:04:05.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:04:06.610 [DEBUG] [Thread-23356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:04:06.610 [DEBUG] [Thread-23356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:04:06.658 [DEBUG] [Thread-23356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:04:06.658 [DEBUG] [Thread-23356] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:04:06.667 [DEBUG] [Thread-23356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:04:06.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:04:06.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')
2026-04-15T18:04:06.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
2026-04-15T18:04:06.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:04:06.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:04:06.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:04:06.702 [DEBUG] [Thread-23356] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:04:11.701 [DEBUG] [Thread-23358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:04:26.738 [DEBUG] [Thread-23359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:04:33.939 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:04:33.940 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:04:36.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:04:36.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:04:36.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
2026-04-15T18:04:38.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 3, 57), 6.44774, 64.7963, 0.0, 9.6876, 12.5181, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:04:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:03:57
2026-04-15T18:04:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:04:38.935 [DEBUG] [Thread-23360] [transport.py] [_log()] starting thread (client mode): 0xf17c2e00
2026-04-15T18:04:38.935 [DEBUG] [Thread-23360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:04:38.954 [DEBUG] [Thread-23360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:04:38.954 [INFO] [Thread-23360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:04:38.957 [DEBUG] [Thread-23360] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:04:38.957 [DEBUG] [Thread-23360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:04:38.957 [DEBUG] [Thread-23360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:04:38.957 [DEBUG] [Thread-23360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:04:38.958 [DEBUG] [Thread-23360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:04:38.958 [DEBUG] [Thread-23360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:04:38.958 [DEBUG] [Thread-23360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:04:38.958 [DEBUG] [Thread-23360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:04:38.958 [DEBUG] [Thread-23360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:04:38.958 [DEBUG] [Thread-23360] [transport.py] [_log()] client lang: <none>
2026-04-15T18:04:38.958 [DEBUG] [Thread-23360] [transport.py] [_log()] server lang: <none>
2026-04-15T18:04:38.958 [DEBUG] [Thread-23360] [transport.py] [_log()] kex follows: False
2026-04-15T18:04:38.958 [DEBUG] [Thread-23360] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:04:38.958 [DEBUG] [Thread-23360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:04:38.958 [DEBUG] [Thread-23360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:04:38.959 [DEBUG] [Thread-23360] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:04:38.959 [DEBUG] [Thread-23360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:04:38.959 [DEBUG] [Thread-23360] [transport.py] [_log()] Compression: none
2026-04-15T18:04:38.959 [DEBUG] [Thread-23360] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:04:38.975 [DEBUG] [Thread-23360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:04:38.975 [DEBUG] [Thread-23360] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:04:38.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:04:38.976 [DEBUG] [Thread-23360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:04:38.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:04:38.977 [DEBUG] [Thread-23360] [transport.py] [_log()] userauth is OK
2026-04-15T18:04:38.977 [DEBUG] [Thread-23360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:04:38.977 [DEBUG] [Thread-23360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:04:38.977 [DEBUG] [Thread-23360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:04:38.977 [DEBUG] [Thread-23360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:04:39.001 [INFO] [Thread-23360] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:04:39.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:04:39.751 [DEBUG] [Thread-23360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:04:39.751 [DEBUG] [Thread-23360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:04:39.751 [DEBUG] [Thread-23360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:04:39.791 [DEBUG] [Thread-23360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:04:39.792 [DEBUG] [Thread-23360] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:04:39.793 [DEBUG] [Thread-23360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:04:39.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:04:39.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:04:39.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:04:39.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:04:39.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:04:39.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:04:39.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:04:39.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:04:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:04:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.669579 -999.00  +12.30  13.51     70   +7.20 1 1 1 1 1   886    0 5.19 -12.19 ----- 11.6 13.5 300.8 16.9 14.4 -26.8 14.3 -25.7 14.1 -23.6 14.6 -25.7
2026-04-15T18:04:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:04:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:04:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.669579
2026-04-15T18:04:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:04:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:04:39.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:04:39.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:04:39.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:04:39.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:03:57', tmtdew=6.44774, humidity=64.7963, cloud=0.0, wind=9.6876, temperature=12.5181, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:04:11.626', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:04:39.808 [DEBUG] [Thread-23360] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:04:40.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:04:40.031 [DEBUG] [Thread-23363] [transport.py] [_log()] starting thread (client mode): 0xf1334760
2026-04-15T18:04:40.031 [DEBUG] [Thread-23363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:04:40.045 [DEBUG] [Thread-23363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:04:40.045 [INFO] [Thread-23363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:04:40.053 [DEBUG] [Thread-23363] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:04:40.053 [DEBUG] [Thread-23363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:04:40.053 [DEBUG] [Thread-23363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:04:40.053 [DEBUG] [Thread-23363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:04:40.053 [DEBUG] [Thread-23363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:04:40.053 [DEBUG] [Thread-23363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:04:40.053 [DEBUG] [Thread-23363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:04:40.053 [DEBUG] [Thread-23363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:04:40.053 [DEBUG] [Thread-23363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:04:40.053 [DEBUG] [Thread-23363] [transport.py] [_log()] client lang: <none>
2026-04-15T18:04:40.053 [DEBUG] [Thread-23363] [transport.py] [_log()] server lang: <none>
2026-04-15T18:04:40.053 [DEBUG] [Thread-23363] [transport.py] [_log()] kex follows: False
2026-04-15T18:04:40.053 [DEBUG] [Thread-23363] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:04:40.054 [DEBUG] [Thread-23363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:04:40.054 [DEBUG] [Thread-23363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:04:40.054 [DEBUG] [Thread-23363] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:04:40.054 [DEBUG] [Thread-23363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:04:40.054 [DEBUG] [Thread-23363] [transport.py] [_log()] Compression: none
2026-04-15T18:04:40.054 [DEBUG] [Thread-23363] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:04:40.110 [DEBUG] [Thread-23363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:04:40.110 [DEBUG] [Thread-23363] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:04:40.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:04:40.110 [DEBUG] [Thread-23363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:04:40.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:04:40.167 [DEBUG] [Thread-23363] [transport.py] [_log()] userauth is OK
2026-04-15T18:04:40.167 [DEBUG] [Thread-23363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:04:40.168 [DEBUG] [Thread-23363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:04:40.168 [DEBUG] [Thread-23363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:04:40.168 [DEBUG] [Thread-23363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:04:40.185 [INFO] [Thread-23363] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:04:40.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:04:40.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:04:40.982 [DEBUG] [Thread-23363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:04:40.982 [DEBUG] [Thread-23363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:04:41.030 [DEBUG] [Thread-23363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:04:41.030 [DEBUG] [Thread-23363] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:04:41.039 [DEBUG] [Thread-23363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:04:41.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:04:41.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')
2026-04-15T18:04:41.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
2026-04-15T18:04:41.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:04:41.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:04:41.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:04:41.074 [DEBUG] [Thread-23363] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:04:41.770 [DEBUG] [Thread-23365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:04:46.185 [DEBUG] [Thread-23366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:04:56.815 [DEBUG] [Thread-23367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:05:11.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:05:11.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:05:11.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
2026-04-15T18:05:11.846 [DEBUG] [Thread-23368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:05:12.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 4, 32), 6.43026, 64.8909, 0.0, 13.6217, 12.8693, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:05:12.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:04:32
2026-04-15T18:05:12.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:05:13.267 [DEBUG] [Thread-23369] [transport.py] [_log()] starting thread (client mode): 0xf13cb970
2026-04-15T18:05:13.267 [DEBUG] [Thread-23369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:05:13.286 [DEBUG] [Thread-23369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:05:13.287 [INFO] [Thread-23369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:05:13.290 [DEBUG] [Thread-23369] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:05:13.290 [DEBUG] [Thread-23369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:05:13.290 [DEBUG] [Thread-23369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:05:13.290 [DEBUG] [Thread-23369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:05:13.290 [DEBUG] [Thread-23369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:05:13.290 [DEBUG] [Thread-23369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:05:13.290 [DEBUG] [Thread-23369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:05:13.290 [DEBUG] [Thread-23369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:05:13.290 [DEBUG] [Thread-23369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:05:13.291 [DEBUG] [Thread-23369] [transport.py] [_log()] client lang: <none>
2026-04-15T18:05:13.291 [DEBUG] [Thread-23369] [transport.py] [_log()] server lang: <none>
2026-04-15T18:05:13.291 [DEBUG] [Thread-23369] [transport.py] [_log()] kex follows: False
2026-04-15T18:05:13.291 [DEBUG] [Thread-23369] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:05:13.291 [DEBUG] [Thread-23369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:05:13.291 [DEBUG] [Thread-23369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:05:13.291 [DEBUG] [Thread-23369] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:05:13.291 [DEBUG] [Thread-23369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:05:13.291 [DEBUG] [Thread-23369] [transport.py] [_log()] Compression: none
2026-04-15T18:05:13.291 [DEBUG] [Thread-23369] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:05:13.300 [DEBUG] [Thread-23369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:05:13.300 [DEBUG] [Thread-23369] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:05:13.301 [DEBUG] [Thread-23369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:05:13.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:05:13.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:05:13.302 [DEBUG] [Thread-23369] [transport.py] [_log()] userauth is OK
2026-04-15T18:05:13.302 [DEBUG] [Thread-23369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:05:13.302 [DEBUG] [Thread-23369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:05:13.302 [DEBUG] [Thread-23369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:05:13.302 [DEBUG] [Thread-23369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:05:13.320 [INFO] [Thread-23369] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:05:13.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:05:20.404 [DEBUG] [Thread-23369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:05:20.405 [DEBUG] [Thread-23369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:05:20.405 [DEBUG] [Thread-23369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:05:20.445 [DEBUG] [Thread-23369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:05:20.445 [DEBUG] [Thread-23369] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:05:20.448 [DEBUG] [Thread-23369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:05:20.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:05:20.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:05:20.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:05:20.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:05:20.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:05:20.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:05:20.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:05:20.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:05:20.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:05:20.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.669926 -999.00  +12.30  15.44     71   +7.20 1 1 1 1 1   886    0 5.18 -13.16 ----- 12.7 15.4 307.4 17.2 14.3 -26.7 14.2 -25.5 14.1 -24.2 14.5 -25.8
2026-04-15T18:05:20.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:05:20.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:05:20.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.669926
2026-04-15T18:05:20.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:05:20.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:05:20.480 [DEBUG] [Thread-23369] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:05:20.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:05:20.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:05:20.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:05:20.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:04:32', tmtdew=6.43026, humidity=64.8909, cloud=0.0, wind=13.6217, temperature=12.8693, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:04:41.606', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:05:20.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:05:20.742 [DEBUG] [Thread-23372] [transport.py] [_log()] starting thread (client mode): 0xf13c86a0
2026-04-15T18:05:20.742 [DEBUG] [Thread-23372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:05:20.760 [DEBUG] [Thread-23372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:05:20.760 [INFO] [Thread-23372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:05:20.768 [DEBUG] [Thread-23372] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:05:20.768 [DEBUG] [Thread-23372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:05:20.768 [DEBUG] [Thread-23372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:05:20.768 [DEBUG] [Thread-23372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:05:20.768 [DEBUG] [Thread-23372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:05:20.768 [DEBUG] [Thread-23372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:05:20.768 [DEBUG] [Thread-23372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:05:20.768 [DEBUG] [Thread-23372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:05:20.768 [DEBUG] [Thread-23372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:05:20.768 [DEBUG] [Thread-23372] [transport.py] [_log()] client lang: <none>
2026-04-15T18:05:20.768 [DEBUG] [Thread-23372] [transport.py] [_log()] server lang: <none>
2026-04-15T18:05:20.768 [DEBUG] [Thread-23372] [transport.py] [_log()] kex follows: False
2026-04-15T18:05:20.769 [DEBUG] [Thread-23372] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:05:20.769 [DEBUG] [Thread-23372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:05:20.769 [DEBUG] [Thread-23372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:05:20.769 [DEBUG] [Thread-23372] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:05:20.769 [DEBUG] [Thread-23372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:05:20.769 [DEBUG] [Thread-23372] [transport.py] [_log()] Compression: none
2026-04-15T18:05:20.769 [DEBUG] [Thread-23372] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:05:20.826 [DEBUG] [Thread-23372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:05:20.827 [DEBUG] [Thread-23372] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:05:20.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:05:20.827 [DEBUG] [Thread-23372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:05:20.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:05:20.884 [DEBUG] [Thread-23372] [transport.py] [_log()] userauth is OK
2026-04-15T18:05:20.884 [DEBUG] [Thread-23372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:05:20.884 [DEBUG] [Thread-23372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:05:20.884 [DEBUG] [Thread-23372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:05:20.884 [DEBUG] [Thread-23372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:05:20.909 [INFO] [Thread-23372] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:05:20.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:05:20.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:05:21.720 [DEBUG] [Thread-23372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:05:21.720 [DEBUG] [Thread-23372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:05:21.768 [DEBUG] [Thread-23372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:05:21.768 [DEBUG] [Thread-23372] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:05:21.778 [DEBUG] [Thread-23372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:05:21.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:05:21.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')
2026-04-15T18:05:21.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
2026-04-15T18:05:21.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:05:21.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:05:21.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:05:21.815 [DEBUG] [Thread-23372] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:05:26.877 [DEBUG] [Thread-23374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:05:34.080 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:05:34.081 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:05:41.918 [DEBUG] [Thread-23375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:05:46.271 [DEBUG] [Thread-23376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:05:51.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:05:51.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:05:51.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
2026-04-15T18:05:53.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 5, 44), 6.39244, 65.024, 0.0, 15.4915, 12.7041, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:05:53.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:05:44
2026-04-15T18:05:53.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:05:53.931 [DEBUG] [Thread-23377] [transport.py] [_log()] starting thread (client mode): 0xf13fff70
2026-04-15T18:05:53.931 [DEBUG] [Thread-23377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:05:53.952 [DEBUG] [Thread-23377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:05:53.952 [INFO] [Thread-23377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:05:53.955 [DEBUG] [Thread-23377] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:05:53.955 [DEBUG] [Thread-23377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:05:53.955 [DEBUG] [Thread-23377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:05:53.955 [DEBUG] [Thread-23377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:05:53.955 [DEBUG] [Thread-23377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:05:53.955 [DEBUG] [Thread-23377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:05:53.955 [DEBUG] [Thread-23377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:05:53.955 [DEBUG] [Thread-23377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:05:53.955 [DEBUG] [Thread-23377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:05:53.956 [DEBUG] [Thread-23377] [transport.py] [_log()] client lang: <none>
2026-04-15T18:05:53.956 [DEBUG] [Thread-23377] [transport.py] [_log()] server lang: <none>
2026-04-15T18:05:53.956 [DEBUG] [Thread-23377] [transport.py] [_log()] kex follows: False
2026-04-15T18:05:53.956 [DEBUG] [Thread-23377] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:05:53.956 [DEBUG] [Thread-23377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:05:53.956 [DEBUG] [Thread-23377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:05:53.956 [DEBUG] [Thread-23377] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:05:53.956 [DEBUG] [Thread-23377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:05:53.956 [DEBUG] [Thread-23377] [transport.py] [_log()] Compression: none
2026-04-15T18:05:53.956 [DEBUG] [Thread-23377] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:05:53.976 [DEBUG] [Thread-23377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:05:53.976 [DEBUG] [Thread-23377] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:05:53.976 [DEBUG] [Thread-23377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:05:53.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:05:53.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:05:53.978 [DEBUG] [Thread-23377] [transport.py] [_log()] userauth is OK
2026-04-15T18:05:53.978 [DEBUG] [Thread-23377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:05:53.978 [DEBUG] [Thread-23377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:05:53.978 [DEBUG] [Thread-23377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:05:53.978 [DEBUG] [Thread-23377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:05:54.002 [INFO] [Thread-23377] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:05:54.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:05:54.801 [DEBUG] [Thread-23377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:05:54.801 [DEBUG] [Thread-23377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:05:54.802 [DEBUG] [Thread-23377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:05:54.842 [DEBUG] [Thread-23377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:05:54.842 [DEBUG] [Thread-23377] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:05:54.845 [DEBUG] [Thread-23377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:05:54.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:05:54.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:05:54.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:05:54.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:05:54.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:05:54.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:05:54.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:05:54.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:05:54.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:05:54.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.670273 -999.00  +12.20  14.94     71   +7.10 1 1 1 1 1   886    0 5.00 -12.57 ----- 15.0 14.9 308.8 15.9 14.3 -26.7 14.2 -25.8 13.9 -23.3 14.4 -25.8
2026-04-15T18:05:54.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:05:54.867 [DEBUG] [Thread-23377] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:05:54.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:05:54.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.670273
2026-04-15T18:05:54.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:05:54.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:05:54.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:05:54.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:05:54.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:05:54.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:05:44', tmtdew=6.39244, humidity=65.024, cloud=0.0, wind=15.4915, temperature=12.7041, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:05:11.587', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:05:55.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:05:55.126 [DEBUG] [Thread-23380] [transport.py] [_log()] starting thread (client mode): 0xf13ca530
2026-04-15T18:05:55.127 [DEBUG] [Thread-23380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:05:55.141 [DEBUG] [Thread-23380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:05:55.141 [INFO] [Thread-23380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:05:55.148 [DEBUG] [Thread-23380] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:05:55.148 [DEBUG] [Thread-23380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:05:55.148 [DEBUG] [Thread-23380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:05:55.148 [DEBUG] [Thread-23380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:05:55.148 [DEBUG] [Thread-23380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:05:55.149 [DEBUG] [Thread-23380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:05:55.149 [DEBUG] [Thread-23380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:05:55.149 [DEBUG] [Thread-23380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:05:55.149 [DEBUG] [Thread-23380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:05:55.149 [DEBUG] [Thread-23380] [transport.py] [_log()] client lang: <none>
2026-04-15T18:05:55.149 [DEBUG] [Thread-23380] [transport.py] [_log()] server lang: <none>
2026-04-15T18:05:55.149 [DEBUG] [Thread-23380] [transport.py] [_log()] kex follows: False
2026-04-15T18:05:55.149 [DEBUG] [Thread-23380] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:05:55.149 [DEBUG] [Thread-23380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:05:55.149 [DEBUG] [Thread-23380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:05:55.149 [DEBUG] [Thread-23380] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:05:55.150 [DEBUG] [Thread-23380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:05:55.150 [DEBUG] [Thread-23380] [transport.py] [_log()] Compression: none
2026-04-15T18:05:55.150 [DEBUG] [Thread-23380] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:05:55.207 [DEBUG] [Thread-23380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:05:55.207 [DEBUG] [Thread-23380] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:05:55.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:05:55.208 [DEBUG] [Thread-23380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:05:55.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:05:55.264 [DEBUG] [Thread-23380] [transport.py] [_log()] userauth is OK
2026-04-15T18:05:55.264 [DEBUG] [Thread-23380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:05:55.264 [DEBUG] [Thread-23380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:05:55.264 [DEBUG] [Thread-23380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:05:55.264 [DEBUG] [Thread-23380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:05:55.289 [INFO] [Thread-23380] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:05:55.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:05:55.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:05:56.101 [DEBUG] [Thread-23380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:05:56.101 [DEBUG] [Thread-23380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:05:56.149 [DEBUG] [Thread-23380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:05:56.149 [DEBUG] [Thread-23380] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:05:56.158 [DEBUG] [Thread-23380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:05:56.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:05:56.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')
2026-04-15T18:05:56.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
2026-04-15T18:05:56.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:05:56.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:05:56.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:05:56.193 [DEBUG] [Thread-23380] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:05:56.948 [DEBUG] [Thread-23382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:06:11.993 [DEBUG] [Thread-23383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:06:26.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:06:26.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:06:26.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
2026-04-15T18:06:27.025 [DEBUG] [Thread-23384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:06:27.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 6, 19), 6.27403, 65.6116, 0.0, 12.987, 12.3522, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:06:27.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:06:19
2026-04-15T18:06:27.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:06:28.326 [DEBUG] [Thread-23385] [transport.py] [_log()] starting thread (client mode): 0xf1337be0
2026-04-15T18:06:28.326 [DEBUG] [Thread-23385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:06:28.347 [DEBUG] [Thread-23385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:06:28.347 [INFO] [Thread-23385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:06:28.350 [DEBUG] [Thread-23385] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:06:28.350 [DEBUG] [Thread-23385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:06:28.350 [DEBUG] [Thread-23385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:06:28.350 [DEBUG] [Thread-23385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:06:28.350 [DEBUG] [Thread-23385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:06:28.350 [DEBUG] [Thread-23385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:06:28.351 [DEBUG] [Thread-23385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:06:28.351 [DEBUG] [Thread-23385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:06:28.351 [DEBUG] [Thread-23385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:06:28.351 [DEBUG] [Thread-23385] [transport.py] [_log()] client lang: <none>
2026-04-15T18:06:28.351 [DEBUG] [Thread-23385] [transport.py] [_log()] server lang: <none>
2026-04-15T18:06:28.351 [DEBUG] [Thread-23385] [transport.py] [_log()] kex follows: False
2026-04-15T18:06:28.351 [DEBUG] [Thread-23385] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:06:28.351 [DEBUG] [Thread-23385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:06:28.351 [DEBUG] [Thread-23385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:06:28.351 [DEBUG] [Thread-23385] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:06:28.351 [DEBUG] [Thread-23385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:06:28.352 [DEBUG] [Thread-23385] [transport.py] [_log()] Compression: none
2026-04-15T18:06:28.352 [DEBUG] [Thread-23385] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:06:28.369 [DEBUG] [Thread-23385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:06:28.369 [DEBUG] [Thread-23385] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:06:28.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:06:28.370 [DEBUG] [Thread-23385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:06:28.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:06:28.371 [DEBUG] [Thread-23385] [transport.py] [_log()] userauth is OK
2026-04-15T18:06:28.371 [DEBUG] [Thread-23385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:06:28.371 [DEBUG] [Thread-23385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:06:28.371 [DEBUG] [Thread-23385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:06:28.371 [DEBUG] [Thread-23385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:06:28.395 [INFO] [Thread-23385] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:06:28.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:06:29.149 [DEBUG] [Thread-23385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:06:29.150 [DEBUG] [Thread-23385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:06:29.151 [DEBUG] [Thread-23385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:06:29.190 [DEBUG] [Thread-23385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:06:29.190 [DEBUG] [Thread-23385] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:06:29.193 [DEBUG] [Thread-23385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:06:29.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:06:29.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:06:29.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:06:29.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:06:29.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:06:29.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:06:29.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:06:29.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:06:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:06:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.670620 -999.00  +12.20  11.56     72   +7.30 1 1 1 1 1   886    0 4.85 -12.32 ----- 14.2 11.6 323.2 15.9 14.3 -26.5 14.2 -25.5 14.0 -23.3 14.3 -25.4
2026-04-15T18:06:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:06:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:06:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.670620
2026-04-15T18:06:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:06:29.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:06:29.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:06:29.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:06:29.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:06:29.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:06:19', tmtdew=6.27403, humidity=65.6116, cloud=0.0, wind=12.987, temperature=12.3522, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:05:41.568', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:06:29.216 [DEBUG] [Thread-23385] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:06:29.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:06:29.473 [DEBUG] [Thread-23388] [transport.py] [_log()] starting thread (client mode): 0xf13ffcd0
2026-04-15T18:06:29.473 [DEBUG] [Thread-23388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:06:29.488 [DEBUG] [Thread-23388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:06:29.488 [INFO] [Thread-23388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:06:29.495 [DEBUG] [Thread-23388] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:06:29.495 [DEBUG] [Thread-23388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:06:29.495 [DEBUG] [Thread-23388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:06:29.495 [DEBUG] [Thread-23388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:06:29.495 [DEBUG] [Thread-23388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:06:29.495 [DEBUG] [Thread-23388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:06:29.496 [DEBUG] [Thread-23388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:06:29.496 [DEBUG] [Thread-23388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:06:29.496 [DEBUG] [Thread-23388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:06:29.496 [DEBUG] [Thread-23388] [transport.py] [_log()] client lang: <none>
2026-04-15T18:06:29.496 [DEBUG] [Thread-23388] [transport.py] [_log()] server lang: <none>
2026-04-15T18:06:29.496 [DEBUG] [Thread-23388] [transport.py] [_log()] kex follows: False
2026-04-15T18:06:29.496 [DEBUG] [Thread-23388] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:06:29.496 [DEBUG] [Thread-23388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:06:29.496 [DEBUG] [Thread-23388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:06:29.496 [DEBUG] [Thread-23388] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:06:29.496 [DEBUG] [Thread-23388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:06:29.497 [DEBUG] [Thread-23388] [transport.py] [_log()] Compression: none
2026-04-15T18:06:29.497 [DEBUG] [Thread-23388] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:06:29.558 [DEBUG] [Thread-23388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:06:29.559 [DEBUG] [Thread-23388] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:06:29.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:06:29.559 [DEBUG] [Thread-23388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:06:29.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:06:29.615 [DEBUG] [Thread-23388] [transport.py] [_log()] userauth is OK
2026-04-15T18:06:29.615 [DEBUG] [Thread-23388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:06:29.616 [DEBUG] [Thread-23388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:06:29.616 [DEBUG] [Thread-23388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:06:29.616 [DEBUG] [Thread-23388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:06:29.639 [INFO] [Thread-23388] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:06:29.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:06:29.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:06:30.522 [DEBUG] [Thread-23388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:06:30.522 [DEBUG] [Thread-23388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:06:30.570 [DEBUG] [Thread-23388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:06:30.570 [DEBUG] [Thread-23388] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:06:30.579 [DEBUG] [Thread-23388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:06:30.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:06:30.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')
2026-04-15T18:06:30.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
2026-04-15T18:06:30.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:06:30.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:06:30.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:06:30.616 [DEBUG] [Thread-23388] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:06:34.220 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:06:34.222 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:06:42.055 [DEBUG] [Thread-23390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:06:46.350 [DEBUG] [Thread-23391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:06:57.091 [DEBUG] [Thread-23392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:07:00.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:07:00.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:07:00.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
2026-04-15T18:07:01.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 6, 19), 6.27403, 65.6116, 0.0, 12.987, 12.3522, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:07:01.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:06:19
2026-04-15T18:07:02.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:07:02.719 [DEBUG] [Thread-23393] [transport.py] [_log()] starting thread (client mode): 0xf1335c60
2026-04-15T18:07:02.720 [DEBUG] [Thread-23393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:07:02.739 [DEBUG] [Thread-23393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:07:02.740 [INFO] [Thread-23393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:07:02.743 [DEBUG] [Thread-23393] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:07:02.743 [DEBUG] [Thread-23393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:07:02.743 [DEBUG] [Thread-23393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:07:02.743 [DEBUG] [Thread-23393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:07:02.743 [DEBUG] [Thread-23393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:07:02.743 [DEBUG] [Thread-23393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:07:02.743 [DEBUG] [Thread-23393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:07:02.743 [DEBUG] [Thread-23393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:07:02.743 [DEBUG] [Thread-23393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:07:02.743 [DEBUG] [Thread-23393] [transport.py] [_log()] client lang: <none>
2026-04-15T18:07:02.744 [DEBUG] [Thread-23393] [transport.py] [_log()] server lang: <none>
2026-04-15T18:07:02.744 [DEBUG] [Thread-23393] [transport.py] [_log()] kex follows: False
2026-04-15T18:07:02.744 [DEBUG] [Thread-23393] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:07:02.744 [DEBUG] [Thread-23393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:07:02.744 [DEBUG] [Thread-23393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:07:02.744 [DEBUG] [Thread-23393] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:07:02.744 [DEBUG] [Thread-23393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:07:02.744 [DEBUG] [Thread-23393] [transport.py] [_log()] Compression: none
2026-04-15T18:07:02.744 [DEBUG] [Thread-23393] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:07:02.760 [DEBUG] [Thread-23393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:07:02.761 [DEBUG] [Thread-23393] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:07:02.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:07:02.761 [DEBUG] [Thread-23393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:07:02.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:07:02.763 [DEBUG] [Thread-23393] [transport.py] [_log()] userauth is OK
2026-04-15T18:07:02.763 [DEBUG] [Thread-23393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:07:02.763 [DEBUG] [Thread-23393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:07:02.763 [DEBUG] [Thread-23393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:07:02.763 [DEBUG] [Thread-23393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:07:02.787 [INFO] [Thread-23393] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:07:02.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:07:03.574 [DEBUG] [Thread-23393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:07:03.574 [DEBUG] [Thread-23393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:07:03.575 [DEBUG] [Thread-23393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:07:03.615 [DEBUG] [Thread-23393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:07:03.615 [DEBUG] [Thread-23393] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:07:03.618 [DEBUG] [Thread-23393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:07:03.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:07:03.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:07:03.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:07:03.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:07:03.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:07:03.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:07:03.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:07:03.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:07:03.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:07:03.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.670968 -999.00  +12.20  12.08     72   +7.40 1 1 1 1 1   885    0 4.99 -14.61 ----- 17.4 12.1 316.0 15.6 14.2 -26.7 14.1 -25.6 13.9 -23.3 14.2 -25.3
2026-04-15T18:07:03.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:07:03.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:07:03.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.670968
2026-04-15T18:07:03.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:07:03.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:07:03.645 [DEBUG] [Thread-23393] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:07:03.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:07:03.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:07:03.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:07:03.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:06:19', tmtdew=6.27403, humidity=65.6116, cloud=0.0, wind=12.987, temperature=12.3522, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:06:11.635', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:07:03.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:07:03.901 [DEBUG] [Thread-23396] [transport.py] [_log()] starting thread (client mode): 0xf17c3cd0
2026-04-15T18:07:03.901 [DEBUG] [Thread-23396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:07:03.915 [DEBUG] [Thread-23396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:07:03.915 [INFO] [Thread-23396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:07:03.922 [DEBUG] [Thread-23396] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:07:03.922 [DEBUG] [Thread-23396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:07:03.923 [DEBUG] [Thread-23396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:07:03.923 [DEBUG] [Thread-23396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:07:03.923 [DEBUG] [Thread-23396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:07:03.923 [DEBUG] [Thread-23396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:07:03.923 [DEBUG] [Thread-23396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:07:03.923 [DEBUG] [Thread-23396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:07:03.923 [DEBUG] [Thread-23396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:07:03.923 [DEBUG] [Thread-23396] [transport.py] [_log()] client lang: <none>
2026-04-15T18:07:03.923 [DEBUG] [Thread-23396] [transport.py] [_log()] server lang: <none>
2026-04-15T18:07:03.923 [DEBUG] [Thread-23396] [transport.py] [_log()] kex follows: False
2026-04-15T18:07:03.923 [DEBUG] [Thread-23396] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:07:03.923 [DEBUG] [Thread-23396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:07:03.924 [DEBUG] [Thread-23396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:07:03.924 [DEBUG] [Thread-23396] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:07:03.924 [DEBUG] [Thread-23396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:07:03.924 [DEBUG] [Thread-23396] [transport.py] [_log()] Compression: none
2026-04-15T18:07:03.924 [DEBUG] [Thread-23396] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:07:03.984 [DEBUG] [Thread-23396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:07:03.985 [DEBUG] [Thread-23396] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:07:03.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:07:03.985 [DEBUG] [Thread-23396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:07:03.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:07:04.042 [DEBUG] [Thread-23396] [transport.py] [_log()] userauth is OK
2026-04-15T18:07:04.042 [DEBUG] [Thread-23396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:07:04.042 [DEBUG] [Thread-23396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:07:04.042 [DEBUG] [Thread-23396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:07:04.042 [DEBUG] [Thread-23396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:07:04.067 [INFO] [Thread-23396] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:07:04.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:07:04.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:07:04.870 [DEBUG] [Thread-23396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:07:04.870 [DEBUG] [Thread-23396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:07:04.918 [DEBUG] [Thread-23396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:07:04.918 [DEBUG] [Thread-23396] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:07:04.927 [DEBUG] [Thread-23396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:07:04.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:07:04.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')
2026-04-15T18:07:04.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
2026-04-15T18:07:04.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:07:04.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:07:04.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:07:04.962 [DEBUG] [Thread-23396] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:07:12.123 [DEBUG] [Thread-23398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:07:27.165 [DEBUG] [Thread-23399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:07:34.362 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:07:34.363 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:07:34.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:07:34.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:07:34.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
2026-04-15T18:07:36.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 6, 55), 6.14177, 65.9762, 0.0, 15.0163, 12.3191, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:07:36.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:06:55
2026-04-15T18:07:36.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:07:37.110 [DEBUG] [Thread-23400] [transport.py] [_log()] starting thread (client mode): 0xee9aea70
2026-04-15T18:07:37.110 [DEBUG] [Thread-23400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:07:37.130 [DEBUG] [Thread-23400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:07:37.130 [INFO] [Thread-23400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:07:37.133 [DEBUG] [Thread-23400] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:07:37.133 [DEBUG] [Thread-23400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:07:37.133 [DEBUG] [Thread-23400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:07:37.133 [DEBUG] [Thread-23400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:07:37.133 [DEBUG] [Thread-23400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:07:37.133 [DEBUG] [Thread-23400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:07:37.134 [DEBUG] [Thread-23400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:07:37.134 [DEBUG] [Thread-23400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:07:37.134 [DEBUG] [Thread-23400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:07:37.134 [DEBUG] [Thread-23400] [transport.py] [_log()] client lang: <none>
2026-04-15T18:07:37.134 [DEBUG] [Thread-23400] [transport.py] [_log()] server lang: <none>
2026-04-15T18:07:37.134 [DEBUG] [Thread-23400] [transport.py] [_log()] kex follows: False
2026-04-15T18:07:37.134 [DEBUG] [Thread-23400] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:07:37.134 [DEBUG] [Thread-23400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:07:37.134 [DEBUG] [Thread-23400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:07:37.134 [DEBUG] [Thread-23400] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:07:37.134 [DEBUG] [Thread-23400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:07:37.134 [DEBUG] [Thread-23400] [transport.py] [_log()] Compression: none
2026-04-15T18:07:37.134 [DEBUG] [Thread-23400] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:07:37.150 [DEBUG] [Thread-23400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:07:37.150 [DEBUG] [Thread-23400] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:07:37.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:07:37.150 [DEBUG] [Thread-23400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:07:37.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:07:37.151 [DEBUG] [Thread-23400] [transport.py] [_log()] userauth is OK
2026-04-15T18:07:37.151 [DEBUG] [Thread-23400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:07:37.151 [DEBUG] [Thread-23400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:07:37.152 [DEBUG] [Thread-23400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:07:37.152 [DEBUG] [Thread-23400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:07:37.164 [INFO] [Thread-23400] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:07:37.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:07:37.968 [DEBUG] [Thread-23400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:07:37.968 [DEBUG] [Thread-23400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:07:37.969 [DEBUG] [Thread-23400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:07:38.009 [DEBUG] [Thread-23400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:07:38.009 [DEBUG] [Thread-23400] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:07:38.012 [DEBUG] [Thread-23400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:07:38.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:07:38.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:07:38.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:07:38.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:07:38.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:07:38.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:07:38.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:07:38.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:07:38.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:07:38.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.671315 -999.00  +12.10  17.50     72   +7.20 1 1 1 1 1   885    0 4.85 -16.36 ----- 17.5 17.5 331.6 18.4 14.1 -26.7 14.1 -25.5 13.8 -23.3 14.2 -25.4
2026-04-15T18:07:38.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:07:38.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:07:38.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.671315
2026-04-15T18:07:38.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:07:38.040 [DEBUG] [Thread-23400] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:07:38.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:07:38.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:07:38.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:07:38.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:07:38.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:06:55', tmtdew=6.14177, humidity=65.9762, cloud=0.0, wind=15.0163, temperature=12.3191, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:06:41.616', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:07:38.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:07:38.301 [DEBUG] [Thread-23403] [transport.py] [_log()] starting thread (client mode): 0xf17c16f0
2026-04-15T18:07:38.301 [DEBUG] [Thread-23403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:07:38.316 [DEBUG] [Thread-23403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:07:38.316 [INFO] [Thread-23403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:07:38.323 [DEBUG] [Thread-23403] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:07:38.323 [DEBUG] [Thread-23403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:07:38.323 [DEBUG] [Thread-23403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:07:38.323 [DEBUG] [Thread-23403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:07:38.323 [DEBUG] [Thread-23403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:07:38.324 [DEBUG] [Thread-23403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:07:38.324 [DEBUG] [Thread-23403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:07:38.324 [DEBUG] [Thread-23403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:07:38.324 [DEBUG] [Thread-23403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:07:38.324 [DEBUG] [Thread-23403] [transport.py] [_log()] client lang: <none>
2026-04-15T18:07:38.324 [DEBUG] [Thread-23403] [transport.py] [_log()] server lang: <none>
2026-04-15T18:07:38.324 [DEBUG] [Thread-23403] [transport.py] [_log()] kex follows: False
2026-04-15T18:07:38.324 [DEBUG] [Thread-23403] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:07:38.324 [DEBUG] [Thread-23403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:07:38.324 [DEBUG] [Thread-23403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:07:38.324 [DEBUG] [Thread-23403] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:07:38.324 [DEBUG] [Thread-23403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:07:38.325 [DEBUG] [Thread-23403] [transport.py] [_log()] Compression: none
2026-04-15T18:07:38.325 [DEBUG] [Thread-23403] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:07:38.382 [DEBUG] [Thread-23403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:07:38.383 [DEBUG] [Thread-23403] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:07:38.383 [DEBUG] [Thread-23403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:07:38.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:07:38.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:07:38.439 [DEBUG] [Thread-23403] [transport.py] [_log()] userauth is OK
2026-04-15T18:07:38.439 [DEBUG] [Thread-23403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:07:38.440 [DEBUG] [Thread-23403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:07:38.440 [DEBUG] [Thread-23403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:07:38.440 [DEBUG] [Thread-23403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:07:38.465 [INFO] [Thread-23403] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:07:38.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:07:38.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:07:39.299 [DEBUG] [Thread-23403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:07:39.300 [DEBUG] [Thread-23403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:07:39.348 [DEBUG] [Thread-23403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:07:39.349 [DEBUG] [Thread-23403] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:07:39.359 [DEBUG] [Thread-23403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:07:39.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:07:39.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')
2026-04-15T18:07:39.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
2026-04-15T18:07:39.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:07:39.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:07:39.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:07:39.400 [DEBUG] [Thread-23403] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:07:42.198 [DEBUG] [Thread-23405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:07:46.443 [DEBUG] [Thread-23406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:07:57.241 [DEBUG] [Thread-23407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:08:09.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:08:09.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:08:09.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
2026-04-15T18:08:10.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 7, 30), 6.15399, 65.9101, 0.0, 14.1167, 12.2695, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:08:10.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:07:30
2026-04-15T18:08:11.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:08:11.545 [DEBUG] [Thread-23408] [transport.py] [_log()] starting thread (client mode): 0xf13fea40
2026-04-15T18:08:11.545 [DEBUG] [Thread-23408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:08:11.559 [DEBUG] [Thread-23408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:08:11.560 [INFO] [Thread-23408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:08:11.562 [DEBUG] [Thread-23408] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:08:11.562 [DEBUG] [Thread-23408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:08:11.562 [DEBUG] [Thread-23408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:08:11.563 [DEBUG] [Thread-23408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:08:11.563 [DEBUG] [Thread-23408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:08:11.563 [DEBUG] [Thread-23408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:08:11.563 [DEBUG] [Thread-23408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:08:11.563 [DEBUG] [Thread-23408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:08:11.563 [DEBUG] [Thread-23408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:08:11.563 [DEBUG] [Thread-23408] [transport.py] [_log()] client lang: <none>
2026-04-15T18:08:11.563 [DEBUG] [Thread-23408] [transport.py] [_log()] server lang: <none>
2026-04-15T18:08:11.563 [DEBUG] [Thread-23408] [transport.py] [_log()] kex follows: False
2026-04-15T18:08:11.563 [DEBUG] [Thread-23408] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:08:11.563 [DEBUG] [Thread-23408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:08:11.563 [DEBUG] [Thread-23408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:08:11.563 [DEBUG] [Thread-23408] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:08:11.564 [DEBUG] [Thread-23408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:08:11.564 [DEBUG] [Thread-23408] [transport.py] [_log()] Compression: none
2026-04-15T18:08:11.564 [DEBUG] [Thread-23408] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:08:11.580 [DEBUG] [Thread-23408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:08:11.581 [DEBUG] [Thread-23408] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:08:11.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:08:11.581 [DEBUG] [Thread-23408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:08:11.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:08:11.582 [DEBUG] [Thread-23408] [transport.py] [_log()] userauth is OK
2026-04-15T18:08:11.582 [DEBUG] [Thread-23408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:08:11.582 [DEBUG] [Thread-23408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:08:11.583 [DEBUG] [Thread-23408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:08:11.583 [DEBUG] [Thread-23408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:08:11.607 [INFO] [Thread-23408] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:08:11.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:08:12.274 [DEBUG] [Thread-23410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:08:12.376 [DEBUG] [Thread-23408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:08:12.376 [DEBUG] [Thread-23408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:08:12.377 [DEBUG] [Thread-23408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:08:12.417 [DEBUG] [Thread-23408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:08:12.417 [DEBUG] [Thread-23408] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:08:12.420 [DEBUG] [Thread-23408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:08:12.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:08:12.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:08:12.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:08:12.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:08:12.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:08:12.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:08:12.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:08:12.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:08:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:08:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.672009 -999.00  +12.10  13.31     72   +7.30 1 1 1 1 1   885    0 4.77 -15.11 ----- 15.3 13.3 313.4 17.2 14.1 -26.6 14.0 -25.6 13.7 -23.2 14.1 -25.3
2026-04-15T18:08:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:08:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:08:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.672009
2026-04-15T18:08:12.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:08:12.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:08:12.445 [DEBUG] [Thread-23408] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:08:12.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:08:12.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:08:12.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:08:12.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:07:30', tmtdew=6.15399, humidity=65.9101, cloud=0.0, wind=14.1167, temperature=12.2695, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:07:41.578', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:08:12.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:08:12.703 [DEBUG] [Thread-23412] [transport.py] [_log()] starting thread (client mode): 0xf13ff550
2026-04-15T18:08:12.704 [DEBUG] [Thread-23412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:08:12.718 [DEBUG] [Thread-23412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:08:12.718 [INFO] [Thread-23412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:08:12.729 [DEBUG] [Thread-23412] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:08:12.729 [DEBUG] [Thread-23412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:08:12.729 [DEBUG] [Thread-23412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:08:12.729 [DEBUG] [Thread-23412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:08:12.729 [DEBUG] [Thread-23412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:08:12.729 [DEBUG] [Thread-23412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:08:12.730 [DEBUG] [Thread-23412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:08:12.730 [DEBUG] [Thread-23412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:08:12.730 [DEBUG] [Thread-23412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:08:12.730 [DEBUG] [Thread-23412] [transport.py] [_log()] client lang: <none>
2026-04-15T18:08:12.730 [DEBUG] [Thread-23412] [transport.py] [_log()] server lang: <none>
2026-04-15T18:08:12.730 [DEBUG] [Thread-23412] [transport.py] [_log()] kex follows: False
2026-04-15T18:08:12.730 [DEBUG] [Thread-23412] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:08:12.730 [DEBUG] [Thread-23412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:08:12.730 [DEBUG] [Thread-23412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:08:12.730 [DEBUG] [Thread-23412] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:08:12.730 [DEBUG] [Thread-23412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:08:12.731 [DEBUG] [Thread-23412] [transport.py] [_log()] Compression: none
2026-04-15T18:08:12.731 [DEBUG] [Thread-23412] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:08:12.789 [DEBUG] [Thread-23412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:08:12.789 [DEBUG] [Thread-23412] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:08:12.790 [DEBUG] [Thread-23412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:08:12.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:08:12.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:08:12.847 [DEBUG] [Thread-23412] [transport.py] [_log()] userauth is OK
2026-04-15T18:08:12.847 [DEBUG] [Thread-23412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:08:12.848 [DEBUG] [Thread-23412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:08:12.848 [DEBUG] [Thread-23412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:08:12.848 [DEBUG] [Thread-23412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:08:12.873 [INFO] [Thread-23412] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:08:12.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:08:12.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:08:13.692 [DEBUG] [Thread-23412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:08:13.692 [DEBUG] [Thread-23412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:08:13.740 [DEBUG] [Thread-23412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:08:13.740 [DEBUG] [Thread-23412] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:08:13.749 [DEBUG] [Thread-23412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:08:13.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:08:13.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')
2026-04-15T18:08:13.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
2026-04-15T18:08:13.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:08:13.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:08:13.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:08:13.784 [DEBUG] [Thread-23412] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:08:27.305 [DEBUG] [Thread-23414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:08:34.502 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:08:34.502 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:08:42.351 [DEBUG] [Thread-23415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:08:43.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:08:43.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:08:43.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
2026-04-15T18:08:45.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 8, 6), 6.09859, 66.1588, 0.0, 15.3338, 12.2531, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:08:45.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:08:06
2026-04-15T18:08:45.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:08:45.921 [DEBUG] [Thread-23416] [transport.py] [_log()] starting thread (client mode): 0xee90e860
2026-04-15T18:08:45.921 [DEBUG] [Thread-23416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:08:45.941 [DEBUG] [Thread-23416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:08:45.941 [INFO] [Thread-23416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:08:45.944 [DEBUG] [Thread-23416] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:08:45.944 [DEBUG] [Thread-23416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:08:45.944 [DEBUG] [Thread-23416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:08:45.944 [DEBUG] [Thread-23416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:08:45.944 [DEBUG] [Thread-23416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:08:45.944 [DEBUG] [Thread-23416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:08:45.944 [DEBUG] [Thread-23416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:08:45.944 [DEBUG] [Thread-23416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:08:45.944 [DEBUG] [Thread-23416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:08:45.945 [DEBUG] [Thread-23416] [transport.py] [_log()] client lang: <none>
2026-04-15T18:08:45.945 [DEBUG] [Thread-23416] [transport.py] [_log()] server lang: <none>
2026-04-15T18:08:45.945 [DEBUG] [Thread-23416] [transport.py] [_log()] kex follows: False
2026-04-15T18:08:45.945 [DEBUG] [Thread-23416] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:08:45.945 [DEBUG] [Thread-23416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:08:45.945 [DEBUG] [Thread-23416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:08:45.945 [DEBUG] [Thread-23416] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:08:45.945 [DEBUG] [Thread-23416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:08:45.945 [DEBUG] [Thread-23416] [transport.py] [_log()] Compression: none
2026-04-15T18:08:45.945 [DEBUG] [Thread-23416] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:08:45.963 [DEBUG] [Thread-23416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:08:45.963 [DEBUG] [Thread-23416] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:08:45.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:08:45.964 [DEBUG] [Thread-23416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:08:45.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:08:45.965 [DEBUG] [Thread-23416] [transport.py] [_log()] userauth is OK
2026-04-15T18:08:45.965 [DEBUG] [Thread-23416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:08:45.965 [DEBUG] [Thread-23416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:08:45.965 [DEBUG] [Thread-23416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:08:45.965 [DEBUG] [Thread-23416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:08:45.989 [INFO] [Thread-23416] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:08:45.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:08:46.522 [DEBUG] [Thread-23418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:08:46.767 [DEBUG] [Thread-23416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:08:46.768 [DEBUG] [Thread-23416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:08:46.768 [DEBUG] [Thread-23416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:08:46.809 [DEBUG] [Thread-23416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:08:46.809 [DEBUG] [Thread-23416] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:08:46.812 [DEBUG] [Thread-23416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:08:46.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:08:46.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:08:46.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:08:46.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:08:46.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:08:46.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:08:46.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:08:46.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:08:46.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:08:46.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.672356 -999.00  +12.10  12.97     72   +7.20 1 1 1 1 1   884    0 4.73 -14.49 ----- 16.5 13.0 308.3 17.5 14.1 -26.6 13.9 -25.4 13.7 -23.2 14.0 -25.2
2026-04-15T18:08:46.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:08:46.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:08:46.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.672356
2026-04-15T18:08:46.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:08:46.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:08:46.836 [DEBUG] [Thread-23416] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:08:46.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:08:46.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:08:46.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:08:46.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:08:06', tmtdew=6.09859, humidity=66.1588, cloud=0.0, wind=15.3338, temperature=12.2531, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:08:11.558', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:08:47.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:08:57.383 [DEBUG] [Thread-23420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:09:12.428 [DEBUG] [Thread-23421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:09:27.460 [DEBUG] [Thread-23422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:09:34.642 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:09:34.643 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:09:42.491 [DEBUG] [Thread-23423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:09:46.620 [DEBUG] [Thread-23424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:09:57.523 [DEBUG] [Thread-23425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:10:12.555 [DEBUG] [Thread-23426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:10:27.585 [DEBUG] [Thread-23427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:10:34.784 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:10:34.784 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:10:42.618 [DEBUG] [Thread-23428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:10:46.809 [DEBUG] [Thread-23429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:10:57.649 [DEBUG] [Thread-23430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:10:59.850 [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
2026-04-15T18:11:12.681 [DEBUG] [Thread-23431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:11:27.712 [DEBUG] [Thread-23432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:11:29.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:11:29.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:11:29.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
2026-04-15T18:11:31.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 11, 4), 5.91246, 67.0406, 0.0, 11.0459, 12.0875, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:11:31.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:11:04
2026-04-15T18:11:31.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:11:32.086 [DEBUG] [Thread-23433] [transport.py] [_log()] starting thread (client mode): 0xee90e5c0
2026-04-15T18:11:32.086 [DEBUG] [Thread-23433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:11:32.106 [DEBUG] [Thread-23433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:11:32.107 [INFO] [Thread-23433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:11:32.110 [DEBUG] [Thread-23433] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:11:32.110 [DEBUG] [Thread-23433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:11:32.110 [DEBUG] [Thread-23433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:11:32.110 [DEBUG] [Thread-23433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:11:32.110 [DEBUG] [Thread-23433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:11:32.110 [DEBUG] [Thread-23433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:11:32.110 [DEBUG] [Thread-23433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:11:32.110 [DEBUG] [Thread-23433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:11:32.110 [DEBUG] [Thread-23433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:11:32.110 [DEBUG] [Thread-23433] [transport.py] [_log()] client lang: <none>
2026-04-15T18:11:32.111 [DEBUG] [Thread-23433] [transport.py] [_log()] server lang: <none>
2026-04-15T18:11:32.111 [DEBUG] [Thread-23433] [transport.py] [_log()] kex follows: False
2026-04-15T18:11:32.111 [DEBUG] [Thread-23433] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:11:32.111 [DEBUG] [Thread-23433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:11:32.111 [DEBUG] [Thread-23433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:11:32.111 [DEBUG] [Thread-23433] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:11:32.111 [DEBUG] [Thread-23433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:11:32.111 [DEBUG] [Thread-23433] [transport.py] [_log()] Compression: none
2026-04-15T18:11:32.111 [DEBUG] [Thread-23433] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:11:32.128 [DEBUG] [Thread-23433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:11:32.128 [DEBUG] [Thread-23433] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:11:32.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:11:32.129 [DEBUG] [Thread-23433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:11:32.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:11:32.130 [DEBUG] [Thread-23433] [transport.py] [_log()] userauth is OK
2026-04-15T18:11:32.130 [DEBUG] [Thread-23433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:11:32.130 [DEBUG] [Thread-23433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:11:32.130 [DEBUG] [Thread-23433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:11:32.130 [DEBUG] [Thread-23433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:11:32.146 [INFO] [Thread-23433] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:11:32.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:11:32.948 [DEBUG] [Thread-23433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:11:32.949 [DEBUG] [Thread-23433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:11:32.950 [DEBUG] [Thread-23433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:11:32.990 [DEBUG] [Thread-23433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:11:32.990 [DEBUG] [Thread-23433] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:11:32.993 [DEBUG] [Thread-23433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:11:33.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:11:33.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:11:33.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:11:33.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:11:33.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:11:33.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:11:33.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:11:33.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:11:33.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:11:33.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.674092 -999.00  +12.00  12.30     72   +7.20 1 1 1 1 1   882    0 4.77 -18.61 ----- 16.8 12.3 319.6 16.4 13.8 -26.4 13.7 -25.2 13.4 -23.5 13.8 -25.1
2026-04-15T18:11:33.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:11:33.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:11:33.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.674092
2026-04-15T18:11:33.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:11:33.017 [DEBUG] [Thread-23433] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:11:33.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:11:33.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:11:33.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:11:33.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:11:33.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:11:04', tmtdew=5.91246, humidity=67.0406, cloud=0.0, wind=11.0459, temperature=12.0875, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:10:41.549', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:11:33.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:11:33.278 [DEBUG] [Thread-23436] [transport.py] [_log()] starting thread (client mode): 0xf13c8b20
2026-04-15T18:11:33.278 [DEBUG] [Thread-23436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:11:33.293 [DEBUG] [Thread-23436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:11:33.293 [INFO] [Thread-23436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:11:33.300 [DEBUG] [Thread-23436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:11:33.300 [DEBUG] [Thread-23436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:11:33.300 [DEBUG] [Thread-23436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:11:33.300 [DEBUG] [Thread-23436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:11:33.300 [DEBUG] [Thread-23436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:11:33.301 [DEBUG] [Thread-23436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:11:33.301 [DEBUG] [Thread-23436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:11:33.301 [DEBUG] [Thread-23436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:11:33.301 [DEBUG] [Thread-23436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:11:33.301 [DEBUG] [Thread-23436] [transport.py] [_log()] client lang: <none>
2026-04-15T18:11:33.301 [DEBUG] [Thread-23436] [transport.py] [_log()] server lang: <none>
2026-04-15T18:11:33.301 [DEBUG] [Thread-23436] [transport.py] [_log()] kex follows: False
2026-04-15T18:11:33.301 [DEBUG] [Thread-23436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:11:33.301 [DEBUG] [Thread-23436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:11:33.301 [DEBUG] [Thread-23436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:11:33.301 [DEBUG] [Thread-23436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:11:33.301 [DEBUG] [Thread-23436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:11:33.302 [DEBUG] [Thread-23436] [transport.py] [_log()] Compression: none
2026-04-15T18:11:33.302 [DEBUG] [Thread-23436] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:11:33.359 [DEBUG] [Thread-23436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:11:33.360 [DEBUG] [Thread-23436] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:11:33.360 [DEBUG] [Thread-23436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:11:33.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:11:33.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:11:33.419 [DEBUG] [Thread-23436] [transport.py] [_log()] userauth is OK
2026-04-15T18:11:33.419 [DEBUG] [Thread-23436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:11:33.419 [DEBUG] [Thread-23436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:11:33.419 [DEBUG] [Thread-23436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:11:33.419 [DEBUG] [Thread-23436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:11:33.443 [INFO] [Thread-23436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:11:33.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:11:33.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:11:34.291 [DEBUG] [Thread-23436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:11:34.291 [DEBUG] [Thread-23436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:11:34.339 [DEBUG] [Thread-23436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:11:34.339 [DEBUG] [Thread-23436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:11:34.348 [DEBUG] [Thread-23436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:11:34.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:11:34.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')
2026-04-15T18:11:34.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
2026-04-15T18:11:34.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:11:34.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:11:34.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:11:34.381 [DEBUG] [Thread-23436] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:11:34.924 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:11:34.925 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:11:42.744 [DEBUG] [Thread-23438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:11:46.973 [DEBUG] [Thread-23439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:11:57.790 [DEBUG] [Thread-23440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:12:04.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:12:04.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:12:04.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
2026-04-15T18:12:05.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 11, 39), 5.88603, 67.2474, 0.0, 15.8796, 12.3091, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:12:05.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:11:39
2026-04-15T18:12:06.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:12:06.523 [DEBUG] [Thread-23441] [transport.py] [_log()] starting thread (client mode): 0xee905990
2026-04-15T18:12:06.523 [DEBUG] [Thread-23441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:12:06.543 [DEBUG] [Thread-23441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:12:06.544 [INFO] [Thread-23441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:12:06.545 [DEBUG] [Thread-23441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:12:06.545 [DEBUG] [Thread-23441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:12:06.545 [DEBUG] [Thread-23441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:12:06.545 [DEBUG] [Thread-23441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:12:06.545 [DEBUG] [Thread-23441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:12:06.545 [DEBUG] [Thread-23441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:12:06.545 [DEBUG] [Thread-23441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:12:06.545 [DEBUG] [Thread-23441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:12:06.546 [DEBUG] [Thread-23441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:12:06.546 [DEBUG] [Thread-23441] [transport.py] [_log()] client lang: <none>
2026-04-15T18:12:06.546 [DEBUG] [Thread-23441] [transport.py] [_log()] server lang: <none>
2026-04-15T18:12:06.546 [DEBUG] [Thread-23441] [transport.py] [_log()] kex follows: False
2026-04-15T18:12:06.546 [DEBUG] [Thread-23441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:12:06.546 [DEBUG] [Thread-23441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:12:06.546 [DEBUG] [Thread-23441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:12:06.546 [DEBUG] [Thread-23441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:12:06.546 [DEBUG] [Thread-23441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:12:06.546 [DEBUG] [Thread-23441] [transport.py] [_log()] Compression: none
2026-04-15T18:12:06.546 [DEBUG] [Thread-23441] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:12:06.565 [DEBUG] [Thread-23441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:12:06.565 [DEBUG] [Thread-23441] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:12:06.565 [DEBUG] [Thread-23441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:12:06.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:12:06.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:12:06.608 [DEBUG] [Thread-23441] [transport.py] [_log()] userauth is OK
2026-04-15T18:12:06.608 [DEBUG] [Thread-23441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:12:06.609 [DEBUG] [Thread-23441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:12:06.609 [DEBUG] [Thread-23441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:12:06.609 [DEBUG] [Thread-23441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:12:06.644 [INFO] [Thread-23441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:12:06.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:12:07.461 [DEBUG] [Thread-23441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:12:07.461 [DEBUG] [Thread-23441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:12:07.461 [DEBUG] [Thread-23441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:12:07.502 [DEBUG] [Thread-23441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:12:07.502 [DEBUG] [Thread-23441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:12:07.505 [DEBUG] [Thread-23441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:12:07.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:12:07.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:12:07.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:12:07.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:12:07.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:12:07.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:12:07.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:12:07.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:12:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:12:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.674440 -999.00  +11.90  14.64     72   +7.20 1 1 1 1 1   882    0 4.62 -20.48 ----- 11.8 14.6 312.2 19.3 13.8 -26.3 13.7 -25.4 13.4 -23.5 13.7 -25.0
2026-04-15T18:12:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:12:07.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:12:07.530 [DEBUG] [Thread-23441] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:12:07.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.674440
2026-04-15T18:12:07.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:12:07.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:12:07.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:12:07.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:12:07.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:12:07.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:11:39', tmtdew=5.88603, humidity=67.2474, cloud=0.0, wind=15.8796, temperature=12.3091, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:11:11.616', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:12:07.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:12:07.789 [DEBUG] [Thread-23444] [transport.py] [_log()] starting thread (client mode): 0xf13502e0
2026-04-15T18:12:07.790 [DEBUG] [Thread-23444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:12:07.803 [DEBUG] [Thread-23444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:12:07.803 [INFO] [Thread-23444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:12:07.810 [DEBUG] [Thread-23444] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:12:07.811 [DEBUG] [Thread-23444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:12:07.811 [DEBUG] [Thread-23444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:12:07.811 [DEBUG] [Thread-23444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:12:07.811 [DEBUG] [Thread-23444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:12:07.811 [DEBUG] [Thread-23444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:12:07.811 [DEBUG] [Thread-23444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:12:07.811 [DEBUG] [Thread-23444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:12:07.811 [DEBUG] [Thread-23444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:12:07.811 [DEBUG] [Thread-23444] [transport.py] [_log()] client lang: <none>
2026-04-15T18:12:07.811 [DEBUG] [Thread-23444] [transport.py] [_log()] server lang: <none>
2026-04-15T18:12:07.811 [DEBUG] [Thread-23444] [transport.py] [_log()] kex follows: False
2026-04-15T18:12:07.811 [DEBUG] [Thread-23444] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:12:07.811 [DEBUG] [Thread-23444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:12:07.811 [DEBUG] [Thread-23444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:12:07.811 [DEBUG] [Thread-23444] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:12:07.812 [DEBUG] [Thread-23444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:12:07.812 [DEBUG] [Thread-23444] [transport.py] [_log()] Compression: none
2026-04-15T18:12:07.812 [DEBUG] [Thread-23444] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:12:07.870 [DEBUG] [Thread-23444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:12:07.870 [DEBUG] [Thread-23444] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:12:07.871 [DEBUG] [Thread-23444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:12:07.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:12:07.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:12:07.927 [DEBUG] [Thread-23444] [transport.py] [_log()] userauth is OK
2026-04-15T18:12:07.927 [DEBUG] [Thread-23444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:12:07.927 [DEBUG] [Thread-23444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:12:07.928 [DEBUG] [Thread-23444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:12:07.928 [DEBUG] [Thread-23444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:12:07.948 [INFO] [Thread-23444] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:12:07.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:12:07.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:12:08.814 [DEBUG] [Thread-23444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:12:08.814 [DEBUG] [Thread-23444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:12:08.862 [DEBUG] [Thread-23444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:12:08.862 [DEBUG] [Thread-23444] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:12:08.871 [DEBUG] [Thread-23444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:12:08.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:12:08.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')
2026-04-15T18:12:08.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
2026-04-15T18:12:08.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:12:08.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:12:08.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:12:08.911 [DEBUG] [Thread-23444] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:12:12.820 [DEBUG] [Thread-23446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:12:27.862 [DEBUG] [Thread-23447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:12:38.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:12:38.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:12:38.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
2026-04-15T18:12:40.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 12, 14), 5.85019, 67.3226, 0.0, 13.3751, 12.0046, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:12:40.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:12:14
2026-04-15T18:12:40.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:12:41.030 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:12:41.031 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:12:41.052 [DEBUG] [Thread-23448] [transport.py] [_log()] starting thread (client mode): 0xf1353c70
2026-04-15T18:12:41.052 [DEBUG] [Thread-23448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:12:41.071 [DEBUG] [Thread-23448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:12:41.071 [INFO] [Thread-23448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:12:41.074 [DEBUG] [Thread-23448] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:12:41.074 [DEBUG] [Thread-23448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:12:41.074 [DEBUG] [Thread-23448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:12:41.074 [DEBUG] [Thread-23448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:12:41.074 [DEBUG] [Thread-23448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:12:41.075 [DEBUG] [Thread-23448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:12:41.075 [DEBUG] [Thread-23448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:12:41.075 [DEBUG] [Thread-23448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:12:41.075 [DEBUG] [Thread-23448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:12:41.075 [DEBUG] [Thread-23448] [transport.py] [_log()] client lang: <none>
2026-04-15T18:12:41.075 [DEBUG] [Thread-23448] [transport.py] [_log()] server lang: <none>
2026-04-15T18:12:41.075 [DEBUG] [Thread-23448] [transport.py] [_log()] kex follows: False
2026-04-15T18:12:41.075 [DEBUG] [Thread-23448] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:12:41.075 [DEBUG] [Thread-23448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:12:41.075 [DEBUG] [Thread-23448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:12:41.076 [DEBUG] [Thread-23448] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:12:41.076 [DEBUG] [Thread-23448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:12:41.076 [DEBUG] [Thread-23448] [transport.py] [_log()] Compression: none
2026-04-15T18:12:41.076 [DEBUG] [Thread-23448] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:12:41.093 [DEBUG] [Thread-23448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:12:41.093 [DEBUG] [Thread-23448] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:12:41.094 [DEBUG] [Thread-23448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:12:41.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:12:41.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:12:41.095 [DEBUG] [Thread-23448] [transport.py] [_log()] userauth is OK
2026-04-15T18:12:41.095 [DEBUG] [Thread-23448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:12:41.095 [DEBUG] [Thread-23448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:12:41.095 [DEBUG] [Thread-23448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:12:41.095 [DEBUG] [Thread-23448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:12:41.113 [INFO] [Thread-23448] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:12:41.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:12:41.890 [DEBUG] [Thread-23448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:12:41.890 [DEBUG] [Thread-23448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:12:41.891 [DEBUG] [Thread-23448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:12:41.930 [DEBUG] [Thread-23448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:12:41.931 [DEBUG] [Thread-23448] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:12:41.933 [DEBUG] [Thread-23448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:12:41.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:12:41.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:12:41.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:12:41.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:12:41.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:12:41.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:12:41.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:12:41.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:12:41.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:12:41.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.674787 -999.00  +11.90  13.08     72   +7.10 1 1 1 1 1   881    0 4.51 -20.88 ----- 12.3 13.1 311.8 17.5 13.7 -26.3 13.6 -25.2 13.3 -22.9 13.6 -25.0
2026-04-15T18:12:41.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:12:41.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:12:41.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.674787
2026-04-15T18:12:41.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:12:41.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:12:41.960 [DEBUG] [Thread-23448] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:12:41.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:12:41.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:12:41.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:12:41.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:12:14', tmtdew=5.85019, humidity=67.3226, cloud=0.0, wind=13.3751, temperature=12.0046, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:11:41.597', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:12:42.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:12:42.197 [DEBUG] [Thread-23451] [transport.py] [_log()] starting thread (client mode): 0xee90c850
2026-04-15T18:12:42.198 [DEBUG] [Thread-23451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:12:42.212 [DEBUG] [Thread-23451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:12:42.212 [INFO] [Thread-23451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:12:42.219 [DEBUG] [Thread-23451] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:12:42.219 [DEBUG] [Thread-23451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:12:42.219 [DEBUG] [Thread-23451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:12:42.219 [DEBUG] [Thread-23451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:12:42.219 [DEBUG] [Thread-23451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:12:42.219 [DEBUG] [Thread-23451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:12:42.220 [DEBUG] [Thread-23451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:12:42.220 [DEBUG] [Thread-23451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:12:42.220 [DEBUG] [Thread-23451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:12:42.220 [DEBUG] [Thread-23451] [transport.py] [_log()] client lang: <none>
2026-04-15T18:12:42.220 [DEBUG] [Thread-23451] [transport.py] [_log()] server lang: <none>
2026-04-15T18:12:42.220 [DEBUG] [Thread-23451] [transport.py] [_log()] kex follows: False
2026-04-15T18:12:42.220 [DEBUG] [Thread-23451] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:12:42.220 [DEBUG] [Thread-23451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:12:42.220 [DEBUG] [Thread-23451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:12:42.220 [DEBUG] [Thread-23451] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:12:42.220 [DEBUG] [Thread-23451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:12:42.221 [DEBUG] [Thread-23451] [transport.py] [_log()] Compression: none
2026-04-15T18:12:42.221 [DEBUG] [Thread-23451] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:12:42.278 [DEBUG] [Thread-23451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:12:42.278 [DEBUG] [Thread-23451] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:12:42.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:12:42.279 [DEBUG] [Thread-23451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:12:42.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:12:42.335 [DEBUG] [Thread-23451] [transport.py] [_log()] userauth is OK
2026-04-15T18:12:42.335 [DEBUG] [Thread-23451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:12:42.335 [DEBUG] [Thread-23451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:12:42.336 [DEBUG] [Thread-23451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:12:42.336 [DEBUG] [Thread-23451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:12:42.362 [INFO] [Thread-23451] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:12:42.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:12:42.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:12:42.893 [DEBUG] [Thread-23453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:12:43.177 [DEBUG] [Thread-23451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:12:43.177 [DEBUG] [Thread-23451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:12:43.225 [DEBUG] [Thread-23451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:12:43.225 [DEBUG] [Thread-23451] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:12:43.234 [DEBUG] [Thread-23451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:12:43.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:12:43.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')
2026-04-15T18:12:43.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') -> 00000000
2026-04-15T18:12:43.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:12:43.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:12:43.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:12:43.269 [DEBUG] [Thread-23451] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:12:47.154 [DEBUG] [Thread-23454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:12:57.937 [DEBUG] [Thread-23455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:13:12.967 [DEBUG] [Thread-23456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:13:13.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:13:13.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:13:13.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
2026-04-15T18:13:14.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 12, 50), 5.74348, 67.9107, 0.0, 18.2434, 12.3095, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:13:14.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:12:50
2026-04-15T18:13:14.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:13:15.388 [DEBUG] [Thread-23457] [transport.py] [_log()] starting thread (client mode): 0xee907040
2026-04-15T18:13:15.388 [DEBUG] [Thread-23457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:13:15.408 [DEBUG] [Thread-23457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:13:15.408 [INFO] [Thread-23457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:13:15.411 [DEBUG] [Thread-23457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:13:15.412 [DEBUG] [Thread-23457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:13:15.412 [DEBUG] [Thread-23457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:13:15.412 [DEBUG] [Thread-23457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:13:15.412 [DEBUG] [Thread-23457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:13:15.412 [DEBUG] [Thread-23457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:13:15.412 [DEBUG] [Thread-23457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:13:15.412 [DEBUG] [Thread-23457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:13:15.412 [DEBUG] [Thread-23457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:13:15.412 [DEBUG] [Thread-23457] [transport.py] [_log()] client lang: <none>
2026-04-15T18:13:15.412 [DEBUG] [Thread-23457] [transport.py] [_log()] server lang: <none>
2026-04-15T18:13:15.412 [DEBUG] [Thread-23457] [transport.py] [_log()] kex follows: False
2026-04-15T18:13:15.412 [DEBUG] [Thread-23457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:13:15.413 [DEBUG] [Thread-23457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:13:15.413 [DEBUG] [Thread-23457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:13:15.413 [DEBUG] [Thread-23457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:13:15.413 [DEBUG] [Thread-23457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:13:15.413 [DEBUG] [Thread-23457] [transport.py] [_log()] Compression: none
2026-04-15T18:13:15.413 [DEBUG] [Thread-23457] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:13:15.433 [DEBUG] [Thread-23457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:13:15.433 [DEBUG] [Thread-23457] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:13:15.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:13:15.434 [DEBUG] [Thread-23457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:13:15.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:13:15.435 [DEBUG] [Thread-23457] [transport.py] [_log()] userauth is OK
2026-04-15T18:13:15.435 [DEBUG] [Thread-23457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:13:15.435 [DEBUG] [Thread-23457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:13:15.435 [DEBUG] [Thread-23457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:13:15.435 [DEBUG] [Thread-23457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:13:15.459 [INFO] [Thread-23457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:13:15.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:13:16.214 [DEBUG] [Thread-23457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:13:16.214 [DEBUG] [Thread-23457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:13:16.214 [DEBUG] [Thread-23457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:13:16.256 [DEBUG] [Thread-23457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:13:16.256 [DEBUG] [Thread-23457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:13:16.258 [DEBUG] [Thread-23457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:13:16.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:13:16.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:13:16.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:13:16.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:13:16.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:13:16.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:13:16.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:13:16.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:13:16.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:13:16.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.675481 -999.00  +11.90  14.09     72   +7.10 1 1 1 1 1   880    0 4.60 -22.91 ----- 15.4 14.1 316.2 17.9 13.7 -26.0 13.6 -25.0 13.2 -22.7 13.5 -24.7
2026-04-15T18:13:16.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:13:16.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:13:16.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.675481
2026-04-15T18:13:16.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:13:16.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:13:16.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:13:16.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:13:16.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:13:16.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:12:50', tmtdew=5.74348, humidity=67.9107, cloud=0.0, wind=18.2434, temperature=12.3095, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:12:41.558', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:13:16.279 [DEBUG] [Thread-23457] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:13:16.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:13:16.509 [DEBUG] [Thread-23460] [transport.py] [_log()] starting thread (client mode): 0xee9079d0
2026-04-15T18:13:16.510 [DEBUG] [Thread-23460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:13:16.524 [DEBUG] [Thread-23460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:13:16.524 [INFO] [Thread-23460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:13:16.531 [DEBUG] [Thread-23460] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:13:16.531 [DEBUG] [Thread-23460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:13:16.531 [DEBUG] [Thread-23460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:13:16.531 [DEBUG] [Thread-23460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:13:16.531 [DEBUG] [Thread-23460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:13:16.531 [DEBUG] [Thread-23460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:13:16.532 [DEBUG] [Thread-23460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:13:16.532 [DEBUG] [Thread-23460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:13:16.532 [DEBUG] [Thread-23460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:13:16.532 [DEBUG] [Thread-23460] [transport.py] [_log()] client lang: <none>
2026-04-15T18:13:16.532 [DEBUG] [Thread-23460] [transport.py] [_log()] server lang: <none>
2026-04-15T18:13:16.532 [DEBUG] [Thread-23460] [transport.py] [_log()] kex follows: False
2026-04-15T18:13:16.532 [DEBUG] [Thread-23460] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:13:16.532 [DEBUG] [Thread-23460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:13:16.532 [DEBUG] [Thread-23460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:13:16.532 [DEBUG] [Thread-23460] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:13:16.532 [DEBUG] [Thread-23460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:13:16.532 [DEBUG] [Thread-23460] [transport.py] [_log()] Compression: none
2026-04-15T18:13:16.533 [DEBUG] [Thread-23460] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:13:16.590 [DEBUG] [Thread-23460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:13:16.590 [DEBUG] [Thread-23460] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:13:16.591 [DEBUG] [Thread-23460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:13:16.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:13:16.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:13:16.647 [DEBUG] [Thread-23460] [transport.py] [_log()] userauth is OK
2026-04-15T18:13:16.647 [DEBUG] [Thread-23460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:13:16.647 [DEBUG] [Thread-23460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:13:16.648 [DEBUG] [Thread-23460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:13:16.648 [DEBUG] [Thread-23460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:13:16.673 [INFO] [Thread-23460] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:13:16.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:13:16.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:13:17.489 [DEBUG] [Thread-23460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:13:17.489 [DEBUG] [Thread-23460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:13:17.537 [DEBUG] [Thread-23460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:13:17.537 [DEBUG] [Thread-23460] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:13:17.546 [DEBUG] [Thread-23460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:13:17.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:13:17.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')
2026-04-15T18:13:17.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
2026-04-15T18:13:17.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:13:17.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:13:17.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:13:17.581 [DEBUG] [Thread-23460] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:13:28.001 [DEBUG] [Thread-23462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:13:43.044 [DEBUG] [Thread-23463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:13:45.935 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:13:45.936 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:13:47.318 [DEBUG] [Thread-23464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:13:47.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:13:47.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:13:47.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
2026-04-15T18:13:48.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 13, 25), 5.86747, 67.4719, 0.0, 14.8921, 11.9882, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:13:48.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:13:25
2026-04-15T18:13:49.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:13:49.720 [DEBUG] [Thread-23465] [transport.py] [_log()] starting thread (client mode): 0xee90c310
2026-04-15T18:13:49.721 [DEBUG] [Thread-23465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:13:49.741 [DEBUG] [Thread-23465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:13:49.741 [INFO] [Thread-23465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:13:49.744 [DEBUG] [Thread-23465] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:13:49.744 [DEBUG] [Thread-23465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:13:49.744 [DEBUG] [Thread-23465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:13:49.745 [DEBUG] [Thread-23465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:13:49.745 [DEBUG] [Thread-23465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:13:49.745 [DEBUG] [Thread-23465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:13:49.745 [DEBUG] [Thread-23465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:13:49.745 [DEBUG] [Thread-23465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:13:49.745 [DEBUG] [Thread-23465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:13:49.745 [DEBUG] [Thread-23465] [transport.py] [_log()] client lang: <none>
2026-04-15T18:13:49.746 [DEBUG] [Thread-23465] [transport.py] [_log()] server lang: <none>
2026-04-15T18:13:49.746 [DEBUG] [Thread-23465] [transport.py] [_log()] kex follows: False
2026-04-15T18:13:49.746 [DEBUG] [Thread-23465] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:13:49.746 [DEBUG] [Thread-23465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:13:49.746 [DEBUG] [Thread-23465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:13:49.746 [DEBUG] [Thread-23465] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:13:49.747 [DEBUG] [Thread-23465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:13:49.747 [DEBUG] [Thread-23465] [transport.py] [_log()] Compression: none
2026-04-15T18:13:49.747 [DEBUG] [Thread-23465] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:13:49.764 [DEBUG] [Thread-23465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:13:49.764 [DEBUG] [Thread-23465] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:13:49.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:13:49.765 [DEBUG] [Thread-23465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:13:49.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:13:49.766 [DEBUG] [Thread-23465] [transport.py] [_log()] userauth is OK
2026-04-15T18:13:49.766 [DEBUG] [Thread-23465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:13:49.767 [DEBUG] [Thread-23465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:13:49.767 [DEBUG] [Thread-23465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:13:49.767 [DEBUG] [Thread-23465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:13:49.791 [INFO] [Thread-23465] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:13:49.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:13:50.615 [DEBUG] [Thread-23465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:13:50.615 [DEBUG] [Thread-23465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:13:50.616 [DEBUG] [Thread-23465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:13:50.656 [DEBUG] [Thread-23465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:13:50.656 [DEBUG] [Thread-23465] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:13:50.659 [DEBUG] [Thread-23465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:13:50.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:13:50.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:13:50.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:13:50.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:13:50.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:13:50.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:13:50.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:13:50.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:13:50.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:13:50.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.675829 -999.00  +11.90  16.32     72   +7.10 1 1 1 1 1   879    0 4.33 -25.47 ----- 13.3 16.3 310.2 19.6 13.6 -26.1 13.5 -25.1 13.2 -22.7 13.5 -24.7
2026-04-15T18:13:50.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:13:50.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:13:50.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.675829
2026-04-15T18:13:50.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:13:50.683 [DEBUG] [Thread-23465] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:13:50.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:13:50.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:13:50.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:13:50.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:13:50.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:13:25', tmtdew=5.86747, humidity=67.4719, cloud=0.0, wind=14.8921, temperature=11.9882, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:13:11.626', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:13:50.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:13:50.943 [DEBUG] [Thread-23468] [transport.py] [_log()] starting thread (client mode): 0xee90f3d0
2026-04-15T18:13:50.943 [DEBUG] [Thread-23468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:13:50.957 [DEBUG] [Thread-23468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:13:50.957 [INFO] [Thread-23468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:13:50.964 [DEBUG] [Thread-23468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:13:50.965 [DEBUG] [Thread-23468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:13:50.965 [DEBUG] [Thread-23468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:13:50.965 [DEBUG] [Thread-23468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:13:50.965 [DEBUG] [Thread-23468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:13:50.965 [DEBUG] [Thread-23468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:13:50.965 [DEBUG] [Thread-23468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:13:50.965 [DEBUG] [Thread-23468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:13:50.965 [DEBUG] [Thread-23468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:13:50.965 [DEBUG] [Thread-23468] [transport.py] [_log()] client lang: <none>
2026-04-15T18:13:50.965 [DEBUG] [Thread-23468] [transport.py] [_log()] server lang: <none>
2026-04-15T18:13:50.965 [DEBUG] [Thread-23468] [transport.py] [_log()] kex follows: False
2026-04-15T18:13:50.966 [DEBUG] [Thread-23468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:13:50.966 [DEBUG] [Thread-23468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:13:50.966 [DEBUG] [Thread-23468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:13:50.966 [DEBUG] [Thread-23468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:13:50.966 [DEBUG] [Thread-23468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:13:50.966 [DEBUG] [Thread-23468] [transport.py] [_log()] Compression: none
2026-04-15T18:13:50.966 [DEBUG] [Thread-23468] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:13:51.022 [DEBUG] [Thread-23468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:13:51.023 [DEBUG] [Thread-23468] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:13:51.023 [DEBUG] [Thread-23468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:13:51.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:13:51.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:13:51.079 [DEBUG] [Thread-23468] [transport.py] [_log()] userauth is OK
2026-04-15T18:13:51.079 [DEBUG] [Thread-23468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:13:51.079 [DEBUG] [Thread-23468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:13:51.080 [DEBUG] [Thread-23468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:13:51.080 [DEBUG] [Thread-23468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:13:51.104 [INFO] [Thread-23468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:13:51.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:13:51.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:13:51.913 [DEBUG] [Thread-23468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:13:51.913 [DEBUG] [Thread-23468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:13:51.961 [DEBUG] [Thread-23468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:13:51.961 [DEBUG] [Thread-23468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:13:51.973 [DEBUG] [Thread-23468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:13:51.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:13:51.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')
2026-04-15T18:13:51.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
2026-04-15T18:13:51.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:13:51.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:13:52.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:13:52.008 [DEBUG] [Thread-23468] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:13:58.074 [DEBUG] [Thread-23470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:14:13.114 [DEBUG] [Thread-23471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:14:22.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:14:22.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:14:22.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
2026-04-15T18:14:23.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 14, 1), 5.88012, 67.4061, 0.0, 15.8094, 11.9554, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:14:23.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:14:01
2026-04-15T18:14:23.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:14:24.151 [DEBUG] [Thread-23472] [transport.py] [_log()] starting thread (client mode): 0xee907010
2026-04-15T18:14:24.152 [DEBUG] [Thread-23472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:14:24.171 [DEBUG] [Thread-23472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:14:24.171 [INFO] [Thread-23472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:14:24.174 [DEBUG] [Thread-23472] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:14:24.174 [DEBUG] [Thread-23472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:14:24.174 [DEBUG] [Thread-23472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:14:24.174 [DEBUG] [Thread-23472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:14:24.174 [DEBUG] [Thread-23472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:14:24.174 [DEBUG] [Thread-23472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:14:24.174 [DEBUG] [Thread-23472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:14:24.175 [DEBUG] [Thread-23472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:14:24.175 [DEBUG] [Thread-23472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:14:24.175 [DEBUG] [Thread-23472] [transport.py] [_log()] client lang: <none>
2026-04-15T18:14:24.175 [DEBUG] [Thread-23472] [transport.py] [_log()] server lang: <none>
2026-04-15T18:14:24.175 [DEBUG] [Thread-23472] [transport.py] [_log()] kex follows: False
2026-04-15T18:14:24.175 [DEBUG] [Thread-23472] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:14:24.175 [DEBUG] [Thread-23472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:14:24.175 [DEBUG] [Thread-23472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:14:24.175 [DEBUG] [Thread-23472] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:14:24.175 [DEBUG] [Thread-23472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:14:24.175 [DEBUG] [Thread-23472] [transport.py] [_log()] Compression: none
2026-04-15T18:14:24.176 [DEBUG] [Thread-23472] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:14:24.190 [DEBUG] [Thread-23472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:14:24.190 [DEBUG] [Thread-23472] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:14:24.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:14:24.191 [DEBUG] [Thread-23472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:14:24.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:14:24.232 [DEBUG] [Thread-23472] [transport.py] [_log()] userauth is OK
2026-04-15T18:14:24.233 [DEBUG] [Thread-23472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:14:24.233 [DEBUG] [Thread-23472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:14:24.233 [DEBUG] [Thread-23472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:14:24.233 [DEBUG] [Thread-23472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:14:24.257 [INFO] [Thread-23472] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:14:24.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:14:24.823 [DEBUG] [Thread-23472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:14:24.824 [DEBUG] [Thread-23472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:14:24.824 [DEBUG] [Thread-23472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:14:24.864 [DEBUG] [Thread-23472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:14:24.864 [DEBUG] [Thread-23472] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:14:24.867 [DEBUG] [Thread-23472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:14:24.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:14:24.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:14:24.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:14:24.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:14:24.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:14:24.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:14:24.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:14:24.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:14:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:14:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.676523 -999.00  +11.90  16.25     72   +7.20 1 1 1 1 1   877    0 4.23 -28.70 ----- 14.9 16.2 302.2 20.3 13.5 -26.0 13.4 -24.9 13.1 -22.8 13.4 -24.6
2026-04-15T18:14:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:14:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:14:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.676523
2026-04-15T18:14:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:14:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:14:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:14:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:14:24.893 [DEBUG] [Thread-23472] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:14:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:14:24.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:14:01', tmtdew=5.88012, humidity=67.4061, cloud=0.0, wind=15.8094, temperature=11.9554, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:14:11.587', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:14:25.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:14:25.149 [DEBUG] [Thread-23475] [transport.py] [_log()] starting thread (client mode): 0xf1353c70
2026-04-15T18:14:25.149 [DEBUG] [Thread-23475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:14:25.163 [DEBUG] [Thread-23475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:14:25.163 [INFO] [Thread-23475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:14:25.171 [DEBUG] [Thread-23475] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:14:25.171 [DEBUG] [Thread-23475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:14:25.171 [DEBUG] [Thread-23475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:14:25.171 [DEBUG] [Thread-23475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:14:25.171 [DEBUG] [Thread-23475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:14:25.171 [DEBUG] [Thread-23475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:14:25.171 [DEBUG] [Thread-23475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:14:25.171 [DEBUG] [Thread-23475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:14:25.171 [DEBUG] [Thread-23475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:14:25.172 [DEBUG] [Thread-23475] [transport.py] [_log()] client lang: <none>
2026-04-15T18:14:25.172 [DEBUG] [Thread-23475] [transport.py] [_log()] server lang: <none>
2026-04-15T18:14:25.172 [DEBUG] [Thread-23475] [transport.py] [_log()] kex follows: False
2026-04-15T18:14:25.172 [DEBUG] [Thread-23475] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:14:25.172 [DEBUG] [Thread-23475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:14:25.172 [DEBUG] [Thread-23475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:14:25.172 [DEBUG] [Thread-23475] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:14:25.172 [DEBUG] [Thread-23475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:14:25.172 [DEBUG] [Thread-23475] [transport.py] [_log()] Compression: none
2026-04-15T18:14:25.172 [DEBUG] [Thread-23475] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:14:25.231 [DEBUG] [Thread-23475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:14:25.231 [DEBUG] [Thread-23475] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:14:25.231 [DEBUG] [Thread-23475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:14:25.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:14:25.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:14:25.287 [DEBUG] [Thread-23475] [transport.py] [_log()] userauth is OK
2026-04-15T18:14:25.287 [DEBUG] [Thread-23475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:14:25.287 [DEBUG] [Thread-23475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:14:25.287 [DEBUG] [Thread-23475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:14:25.287 [DEBUG] [Thread-23475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:14:25.312 [INFO] [Thread-23475] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:14:25.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:14:25.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:14:26.113 [DEBUG] [Thread-23475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:14:26.113 [DEBUG] [Thread-23475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:14:26.161 [DEBUG] [Thread-23475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:14:26.161 [DEBUG] [Thread-23475] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:14:26.170 [DEBUG] [Thread-23475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:14:26.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:14:26.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T18:14:26.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') -> 00000000
2026-04-15T18:14:26.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:14:26.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:14:26.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:14:26.204 [DEBUG] [Thread-23475] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:14:28.145 [DEBUG] [Thread-23477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:14:43.190 [DEBUG] [Thread-23478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:14:47.485 [DEBUG] [Thread-23479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:14:50.222 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:14:50.223 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:14:56.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:14:56.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:14:56.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
2026-04-15T18:14:57.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 14, 36), 5.69649, 68.1105, 0.0, 19.1959, 12.2109, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:14:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:14:36
2026-04-15T18:14:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:14:58.221 [DEBUG] [Thread-23480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:14:58.348 [DEBUG] [Thread-23481] [transport.py] [_log()] starting thread (client mode): 0xee90cf40
2026-04-15T18:14:58.348 [DEBUG] [Thread-23481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:14:58.368 [DEBUG] [Thread-23481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:14:58.368 [INFO] [Thread-23481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:14:58.371 [DEBUG] [Thread-23481] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:14:58.371 [DEBUG] [Thread-23481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:14:58.371 [DEBUG] [Thread-23481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:14:58.372 [DEBUG] [Thread-23481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:14:58.372 [DEBUG] [Thread-23481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:14:58.372 [DEBUG] [Thread-23481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:14:58.372 [DEBUG] [Thread-23481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:14:58.372 [DEBUG] [Thread-23481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:14:58.372 [DEBUG] [Thread-23481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:14:58.372 [DEBUG] [Thread-23481] [transport.py] [_log()] client lang: <none>
2026-04-15T18:14:58.372 [DEBUG] [Thread-23481] [transport.py] [_log()] server lang: <none>
2026-04-15T18:14:58.372 [DEBUG] [Thread-23481] [transport.py] [_log()] kex follows: False
2026-04-15T18:14:58.372 [DEBUG] [Thread-23481] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:14:58.372 [DEBUG] [Thread-23481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:14:58.372 [DEBUG] [Thread-23481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:14:58.373 [DEBUG] [Thread-23481] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:14:58.373 [DEBUG] [Thread-23481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:14:58.373 [DEBUG] [Thread-23481] [transport.py] [_log()] Compression: none
2026-04-15T18:14:58.373 [DEBUG] [Thread-23481] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:14:58.381 [DEBUG] [Thread-23481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:14:58.381 [DEBUG] [Thread-23481] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:14:58.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:14:58.382 [DEBUG] [Thread-23481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:14:58.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:14:58.383 [DEBUG] [Thread-23481] [transport.py] [_log()] userauth is OK
2026-04-15T18:14:58.383 [DEBUG] [Thread-23481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:14:58.383 [DEBUG] [Thread-23481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:14:58.383 [DEBUG] [Thread-23481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:14:58.383 [DEBUG] [Thread-23481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:14:58.396 [INFO] [Thread-23481] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:14:58.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:14:59.011 [DEBUG] [Thread-23481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:14:59.012 [DEBUG] [Thread-23481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:14:59.012 [DEBUG] [Thread-23481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:14:59.053 [DEBUG] [Thread-23481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:14:59.053 [DEBUG] [Thread-23481] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:14:59.056 [DEBUG] [Thread-23481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:14:59.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:14:59.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:14:59.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:14:59.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:14:59.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:14:59.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:14:59.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:14:59.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:14:59.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:14:59.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.676870 -999.00  +11.90  13.52     73   +7.30 1 1 1 1 1   875    0 4.36 -28.69 ----- 14.3 13.5 307.6 16.6 13.4 -25.9 13.4 -24.8 13.1 -22.6 13.4 -24.6
2026-04-15T18:14:59.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:14:59.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:14:59.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.676870
2026-04-15T18:14:59.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:14:59.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:14:59.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:14:59.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:14:59.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:14:59.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:14:36', tmtdew=5.69649, humidity=68.1105, cloud=0.0, wind=19.1959, temperature=12.2109, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:14:41.568', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:14:59.093 [DEBUG] [Thread-23481] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:14:59.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:14:59.349 [DEBUG] [Thread-23484] [transport.py] [_log()] starting thread (client mode): 0xee90ffd0
2026-04-15T18:14:59.350 [DEBUG] [Thread-23484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:14:59.365 [DEBUG] [Thread-23484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:14:59.365 [INFO] [Thread-23484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:14:59.373 [DEBUG] [Thread-23484] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:14:59.373 [DEBUG] [Thread-23484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:14:59.373 [DEBUG] [Thread-23484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:14:59.373 [DEBUG] [Thread-23484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:14:59.373 [DEBUG] [Thread-23484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:14:59.373 [DEBUG] [Thread-23484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:14:59.373 [DEBUG] [Thread-23484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:14:59.373 [DEBUG] [Thread-23484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:14:59.374 [DEBUG] [Thread-23484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:14:59.374 [DEBUG] [Thread-23484] [transport.py] [_log()] client lang: <none>
2026-04-15T18:14:59.374 [DEBUG] [Thread-23484] [transport.py] [_log()] server lang: <none>
2026-04-15T18:14:59.374 [DEBUG] [Thread-23484] [transport.py] [_log()] kex follows: False
2026-04-15T18:14:59.374 [DEBUG] [Thread-23484] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:14:59.374 [DEBUG] [Thread-23484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:14:59.374 [DEBUG] [Thread-23484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:14:59.374 [DEBUG] [Thread-23484] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:14:59.374 [DEBUG] [Thread-23484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:14:59.374 [DEBUG] [Thread-23484] [transport.py] [_log()] Compression: none
2026-04-15T18:14:59.374 [DEBUG] [Thread-23484] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:14:59.430 [DEBUG] [Thread-23484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:14:59.430 [DEBUG] [Thread-23484] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:14:59.431 [DEBUG] [Thread-23484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:14:59.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:14:59.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:14:59.487 [DEBUG] [Thread-23484] [transport.py] [_log()] userauth is OK
2026-04-15T18:14:59.487 [DEBUG] [Thread-23484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:14:59.487 [DEBUG] [Thread-23484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:14:59.487 [DEBUG] [Thread-23484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:14:59.487 [DEBUG] [Thread-23484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:14:59.512 [INFO] [Thread-23484] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:14:59.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:14:59.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:15:00.338 [DEBUG] [Thread-23484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:15:00.338 [DEBUG] [Thread-23484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:15:00.386 [DEBUG] [Thread-23484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:15:00.386 [DEBUG] [Thread-23484] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:15:00.395 [DEBUG] [Thread-23484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:15:00.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:15:00.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')
2026-04-15T18:15: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') -> 00000000
2026-04-15T18:15:00.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:15:00.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:15:00.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:15:00.430 [DEBUG] [Thread-23484] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:15:13.249 [DEBUG] [Thread-23486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:15:28.291 [DEBUG] [Thread-23487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:15:30.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:15:30.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:15:30.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
2026-04-15T18:15:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 15, 13), 5.69392, 68.0722, 0.0, 15.1744, 11.8892, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:15:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:15:13
2026-04-15T18:15:32.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:15:32.572 [DEBUG] [Thread-23488] [transport.py] [_log()] starting thread (client mode): 0xf13cb9d0
2026-04-15T18:15:32.573 [DEBUG] [Thread-23488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:15:32.592 [DEBUG] [Thread-23488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:15:32.592 [INFO] [Thread-23488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:15:32.594 [DEBUG] [Thread-23488] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:15:32.595 [DEBUG] [Thread-23488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:15:32.595 [DEBUG] [Thread-23488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:15:32.595 [DEBUG] [Thread-23488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:15:32.595 [DEBUG] [Thread-23488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:15:32.595 [DEBUG] [Thread-23488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:15:32.595 [DEBUG] [Thread-23488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:15:32.595 [DEBUG] [Thread-23488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:15:32.595 [DEBUG] [Thread-23488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:15:32.595 [DEBUG] [Thread-23488] [transport.py] [_log()] client lang: <none>
2026-04-15T18:15:32.595 [DEBUG] [Thread-23488] [transport.py] [_log()] server lang: <none>
2026-04-15T18:15:32.595 [DEBUG] [Thread-23488] [transport.py] [_log()] kex follows: False
2026-04-15T18:15:32.595 [DEBUG] [Thread-23488] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:15:32.595 [DEBUG] [Thread-23488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:15:32.596 [DEBUG] [Thread-23488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:15:32.596 [DEBUG] [Thread-23488] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:15:32.596 [DEBUG] [Thread-23488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:15:32.596 [DEBUG] [Thread-23488] [transport.py] [_log()] Compression: none
2026-04-15T18:15:32.596 [DEBUG] [Thread-23488] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:15:32.612 [DEBUG] [Thread-23488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:15:32.612 [DEBUG] [Thread-23488] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:15:32.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:15:32.613 [DEBUG] [Thread-23488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:15:32.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:15:32.656 [DEBUG] [Thread-23488] [transport.py] [_log()] userauth is OK
2026-04-15T18:15:32.656 [DEBUG] [Thread-23488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:15:32.657 [DEBUG] [Thread-23488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:15:32.657 [DEBUG] [Thread-23488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:15:32.657 [DEBUG] [Thread-23488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:15:32.679 [INFO] [Thread-23488] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:15:32.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:15:33.637 [DEBUG] [Thread-23488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:15:33.637 [DEBUG] [Thread-23488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:15:33.638 [DEBUG] [Thread-23488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:15:33.678 [DEBUG] [Thread-23488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:15:33.678 [DEBUG] [Thread-23488] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:15:33.681 [DEBUG] [Thread-23488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:15:33.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:15:33.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:15:33.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:15:33.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:15:33.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:15:33.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:15:33.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:15:33.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:15:33.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:15:33.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.677217 -999.00  +11.80  17.31     73   +7.30 1 1 1 1 1   874    0 4.10 -32.78 ----- 15.6 17.3 308.4 19.9 13.4 -26.0 13.3 -25.0 13.1 -22.4 13.4 -24.7
2026-04-15T18:15:33.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:15:33.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:15:33.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.677217
2026-04-15T18:15:33.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:15:33.704 [DEBUG] [Thread-23488] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:15:33.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:15:33.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:15:33.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:15:33.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:15:33.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:15:13', tmtdew=5.69392, humidity=68.0722, cloud=0.0, wind=15.1744, temperature=11.8892, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:15:11.549', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:15:33.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:15:33.968 [DEBUG] [Thread-23491] [transport.py] [_log()] starting thread (client mode): 0xee90f9a0
2026-04-15T18:15:33.968 [DEBUG] [Thread-23491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:15:33.983 [DEBUG] [Thread-23491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:15:33.983 [INFO] [Thread-23491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:15:33.991 [DEBUG] [Thread-23491] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:15:33.991 [DEBUG] [Thread-23491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:15:33.991 [DEBUG] [Thread-23491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:15:33.991 [DEBUG] [Thread-23491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:15:33.991 [DEBUG] [Thread-23491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:15:33.991 [DEBUG] [Thread-23491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:15:33.991 [DEBUG] [Thread-23491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:15:33.991 [DEBUG] [Thread-23491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:15:33.991 [DEBUG] [Thread-23491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:15:33.991 [DEBUG] [Thread-23491] [transport.py] [_log()] client lang: <none>
2026-04-15T18:15:33.991 [DEBUG] [Thread-23491] [transport.py] [_log()] server lang: <none>
2026-04-15T18:15:33.992 [DEBUG] [Thread-23491] [transport.py] [_log()] kex follows: False
2026-04-15T18:15:33.992 [DEBUG] [Thread-23491] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:15:33.992 [DEBUG] [Thread-23491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:15:33.992 [DEBUG] [Thread-23491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:15:33.992 [DEBUG] [Thread-23491] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:15:33.992 [DEBUG] [Thread-23491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:15:33.992 [DEBUG] [Thread-23491] [transport.py] [_log()] Compression: none
2026-04-15T18:15:33.992 [DEBUG] [Thread-23491] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:15:34.050 [DEBUG] [Thread-23491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:15:34.050 [DEBUG] [Thread-23491] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:15:34.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:15:34.051 [DEBUG] [Thread-23491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:15:34.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:15:34.112 [DEBUG] [Thread-23491] [transport.py] [_log()] userauth is OK
2026-04-15T18:15:34.113 [DEBUG] [Thread-23491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:15:34.113 [DEBUG] [Thread-23491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:15:34.113 [DEBUG] [Thread-23491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:15:34.113 [DEBUG] [Thread-23491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:15:34.140 [INFO] [Thread-23491] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:15:34.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:15:34.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:15:34.959 [DEBUG] [Thread-23491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:15:34.959 [DEBUG] [Thread-23491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:15:35.007 [DEBUG] [Thread-23491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:15:35.007 [DEBUG] [Thread-23491] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:15:35.016 [DEBUG] [Thread-23491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:15:35.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:15:35.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')
2026-04-15T18:15:35.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
2026-04-15T18:15:35.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:15:35.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:15:35.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:15:35.049 [DEBUG] [Thread-23491] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:15:43.321 [DEBUG] [Thread-23493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:15:47.630 [DEBUG] [Thread-23494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:15:55.948 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:15:55.949 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:15:58.369 [DEBUG] [Thread-23495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:16:05.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:16:05.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:16:05.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T18:16:06.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 15, 48), 5.7303, 67.9454, 0.0, 17.3614, 12.1784, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:16:06.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:15:48
2026-04-15T18:16:06.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:16:07.362 [DEBUG] [Thread-23496] [transport.py] [_log()] starting thread (client mode): 0xf13e29e0
2026-04-15T18:16:07.362 [DEBUG] [Thread-23496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:16:07.383 [DEBUG] [Thread-23496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:16:07.383 [INFO] [Thread-23496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:16:07.384 [DEBUG] [Thread-23496] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:16:07.384 [DEBUG] [Thread-23496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:16:07.384 [DEBUG] [Thread-23496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] client lang: <none>
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] server lang: <none>
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] kex follows: False
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] Compression: none
2026-04-15T18:16:07.385 [DEBUG] [Thread-23496] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:16:07.394 [DEBUG] [Thread-23496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:16:07.395 [DEBUG] [Thread-23496] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:16:07.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:16:07.395 [DEBUG] [Thread-23496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:16:07.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:16:07.396 [DEBUG] [Thread-23496] [transport.py] [_log()] userauth is OK
2026-04-15T18:16:07.396 [DEBUG] [Thread-23496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:16:07.396 [DEBUG] [Thread-23496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:16:07.396 [DEBUG] [Thread-23496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:16:07.396 [DEBUG] [Thread-23496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:16:07.409 [INFO] [Thread-23496] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:16:07.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:16:08.025 [DEBUG] [Thread-23496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:16:08.025 [DEBUG] [Thread-23496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:16:08.025 [DEBUG] [Thread-23496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:16:08.065 [DEBUG] [Thread-23496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:16:08.066 [DEBUG] [Thread-23496] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:16:08.068 [DEBUG] [Thread-23496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:16:08.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:16:08.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:16:08.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:16:08.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:16:08.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:16:08.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:16:08.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:16:08.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:16:08.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:16:08.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.677565 -999.00  +11.80  17.39     73   +7.20 1 1 1 1 1   873    0 4.09 -32.87 ----- 17.1 17.4 310.0 19.1 13.4 -26.0 13.3 -24.8 13.0 -22.9 13.3 -24.5
2026-04-15T18:16:08.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:16:08.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:16:08.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.677565
2026-04-15T18:16:08.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:16:08.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:16:08.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:16:08.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:16:08.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:16:08.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:15:48', tmtdew=5.7303, humidity=67.9454, cloud=0.0, wind=17.3614, temperature=12.1784, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:15:41.616', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:16:08.090 [DEBUG] [Thread-23496] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:16:08.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:16:08.303 [DEBUG] [Thread-23499] [transport.py] [_log()] starting thread (client mode): 0xf13e3df0
2026-04-15T18:16:08.303 [DEBUG] [Thread-23499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:16:08.318 [DEBUG] [Thread-23499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:16:08.318 [INFO] [Thread-23499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:16:08.325 [DEBUG] [Thread-23499] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:16:08.326 [DEBUG] [Thread-23499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:16:08.326 [DEBUG] [Thread-23499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:16:08.326 [DEBUG] [Thread-23499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:16:08.326 [DEBUG] [Thread-23499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:16:08.326 [DEBUG] [Thread-23499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:16:08.326 [DEBUG] [Thread-23499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:16:08.326 [DEBUG] [Thread-23499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:16:08.326 [DEBUG] [Thread-23499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:16:08.326 [DEBUG] [Thread-23499] [transport.py] [_log()] client lang: <none>
2026-04-15T18:16:08.326 [DEBUG] [Thread-23499] [transport.py] [_log()] server lang: <none>
2026-04-15T18:16:08.326 [DEBUG] [Thread-23499] [transport.py] [_log()] kex follows: False
2026-04-15T18:16:08.327 [DEBUG] [Thread-23499] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:16:08.327 [DEBUG] [Thread-23499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:16:08.327 [DEBUG] [Thread-23499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:16:08.327 [DEBUG] [Thread-23499] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:16:08.327 [DEBUG] [Thread-23499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:16:08.327 [DEBUG] [Thread-23499] [transport.py] [_log()] Compression: none
2026-04-15T18:16:08.327 [DEBUG] [Thread-23499] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:16:08.383 [DEBUG] [Thread-23499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:16:08.384 [DEBUG] [Thread-23499] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:16:08.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:16:08.384 [DEBUG] [Thread-23499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:16:08.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:16:08.439 [DEBUG] [Thread-23499] [transport.py] [_log()] userauth is OK
2026-04-15T18:16:08.440 [DEBUG] [Thread-23499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:16:08.440 [DEBUG] [Thread-23499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:16:08.440 [DEBUG] [Thread-23499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:16:08.440 [DEBUG] [Thread-23499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:16:08.466 [INFO] [Thread-23499] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:16:08.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:16:08.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:16:09.274 [DEBUG] [Thread-23499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:16:09.275 [DEBUG] [Thread-23499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:16:09.322 [DEBUG] [Thread-23499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:16:09.322 [DEBUG] [Thread-23499] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:16:09.331 [DEBUG] [Thread-23499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:16:09.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:16:09.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')
2026-04-15T18:16: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') -> 00000000
2026-04-15T18:16:09.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:16:09.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:16:09.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:16:09.366 [DEBUG] [Thread-23499] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:16:13.401 [DEBUG] [Thread-23501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:16:28.444 [DEBUG] [Thread-23502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:16:39.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:16:39.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:16:39.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
2026-04-15T18:16:40.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 16, 24), 5.70875, 68.0062, 0.0, 17.7689, 11.856, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:16:40.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:16:24
2026-04-15T18:16:41.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:16:41.514 [DEBUG] [Thread-23503] [transport.py] [_log()] starting thread (client mode): 0xf13e25f0
2026-04-15T18:16:41.514 [DEBUG] [Thread-23503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:16:41.534 [DEBUG] [Thread-23503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:16:41.534 [INFO] [Thread-23503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:16:41.538 [DEBUG] [Thread-23503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:16:41.538 [DEBUG] [Thread-23503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:16:41.538 [DEBUG] [Thread-23503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:16:41.538 [DEBUG] [Thread-23503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:16:41.538 [DEBUG] [Thread-23503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:16:41.538 [DEBUG] [Thread-23503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:16:41.538 [DEBUG] [Thread-23503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:16:41.539 [DEBUG] [Thread-23503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:16:41.539 [DEBUG] [Thread-23503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:16:41.539 [DEBUG] [Thread-23503] [transport.py] [_log()] client lang: <none>
2026-04-15T18:16:41.539 [DEBUG] [Thread-23503] [transport.py] [_log()] server lang: <none>
2026-04-15T18:16:41.539 [DEBUG] [Thread-23503] [transport.py] [_log()] kex follows: False
2026-04-15T18:16:41.539 [DEBUG] [Thread-23503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:16:41.539 [DEBUG] [Thread-23503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:16:41.539 [DEBUG] [Thread-23503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:16:41.539 [DEBUG] [Thread-23503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:16:41.539 [DEBUG] [Thread-23503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:16:41.539 [DEBUG] [Thread-23503] [transport.py] [_log()] Compression: none
2026-04-15T18:16:41.540 [DEBUG] [Thread-23503] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:16:41.555 [DEBUG] [Thread-23503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:16:41.555 [DEBUG] [Thread-23503] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:16:41.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:16:41.556 [DEBUG] [Thread-23503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:16:41.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:16:41.557 [DEBUG] [Thread-23503] [transport.py] [_log()] userauth is OK
2026-04-15T18:16:41.557 [DEBUG] [Thread-23503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:16:41.557 [DEBUG] [Thread-23503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:16:41.557 [DEBUG] [Thread-23503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:16:41.557 [DEBUG] [Thread-23503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:16:41.589 [INFO] [Thread-23503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:16:41.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:16:42.192 [DEBUG] [Thread-23503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:16:42.192 [DEBUG] [Thread-23503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:16:42.192 [DEBUG] [Thread-23503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:16:42.233 [DEBUG] [Thread-23503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:16:42.233 [DEBUG] [Thread-23503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:16:42.236 [DEBUG] [Thread-23503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:16:42.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:16:42.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:16:42.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:16:42.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:16:42.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:16:42.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:16:42.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:16:42.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:16:42.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:16:42.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.677912 -999.00  +11.80  14.70     74   +7.30 1 1 1 1 1   871    0 3.92 -36.50 ----- 16.4 14.7 326.6 18.4 13.3 -26.0 13.3 -24.7 12.9 -22.6 13.3 -24.6
2026-04-15T18:16:42.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:16:42.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:16:42.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.677912
2026-04-15T18:16:42.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:16:42.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:16:42.261 [DEBUG] [Thread-23503] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:16:42.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:16:42.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:16:42.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:16:42.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:16:24', tmtdew=5.70875, humidity=68.0062, cloud=0.0, wind=17.7689, temperature=11.856, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:16:11.597', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:16:42.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:16:42.514 [DEBUG] [Thread-23506] [transport.py] [_log()] starting thread (client mode): 0xf13e1ba0
2026-04-15T18:16:42.515 [DEBUG] [Thread-23506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:16:42.529 [DEBUG] [Thread-23506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:16:42.529 [INFO] [Thread-23506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:16:42.537 [DEBUG] [Thread-23506] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:16:42.537 [DEBUG] [Thread-23506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:16:42.537 [DEBUG] [Thread-23506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:16:42.537 [DEBUG] [Thread-23506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:16:42.537 [DEBUG] [Thread-23506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:16:42.537 [DEBUG] [Thread-23506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:16:42.537 [DEBUG] [Thread-23506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:16:42.537 [DEBUG] [Thread-23506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:16:42.537 [DEBUG] [Thread-23506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:16:42.537 [DEBUG] [Thread-23506] [transport.py] [_log()] client lang: <none>
2026-04-15T18:16:42.537 [DEBUG] [Thread-23506] [transport.py] [_log()] server lang: <none>
2026-04-15T18:16:42.538 [DEBUG] [Thread-23506] [transport.py] [_log()] kex follows: False
2026-04-15T18:16:42.538 [DEBUG] [Thread-23506] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:16:42.538 [DEBUG] [Thread-23506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:16:42.538 [DEBUG] [Thread-23506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:16:42.538 [DEBUG] [Thread-23506] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:16:42.538 [DEBUG] [Thread-23506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:16:42.538 [DEBUG] [Thread-23506] [transport.py] [_log()] Compression: none
2026-04-15T18:16:42.538 [DEBUG] [Thread-23506] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:16:42.592 [DEBUG] [Thread-23506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:16:42.593 [DEBUG] [Thread-23506] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:16:42.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:16:42.594 [DEBUG] [Thread-23506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:16:42.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:16:42.651 [DEBUG] [Thread-23506] [transport.py] [_log()] userauth is OK
2026-04-15T18:16:42.651 [DEBUG] [Thread-23506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:16:42.651 [DEBUG] [Thread-23506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:16:42.651 [DEBUG] [Thread-23506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:16:42.651 [DEBUG] [Thread-23506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:16:42.676 [INFO] [Thread-23506] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:16:42.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:16:42.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:16:43.476 [DEBUG] [Thread-23508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:16:43.538 [DEBUG] [Thread-23506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:16:43.538 [DEBUG] [Thread-23506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:16:43.586 [DEBUG] [Thread-23506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:16:43.586 [DEBUG] [Thread-23506] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:16:43.595 [DEBUG] [Thread-23506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:16:43.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:16:43.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')
2026-04-15T18:16:43.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
2026-04-15T18:16:43.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:16:43.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:16:43.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:16:43.634 [DEBUG] [Thread-23506] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:16:47.777 [DEBUG] [Thread-23509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:16:58.521 [DEBUG] [Thread-23510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:17:00.845 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:17:00.846 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:17:13.553 [DEBUG] [Thread-23511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:17:13.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:17:13.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:17:13.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
2026-04-15T18:17:14.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 16, 59), 5.57342, 68.6719, 0.0, 14.8223, 11.856, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:17:14.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:16:59
2026-04-15T18:17:15.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:17:15.772 [DEBUG] [Thread-23512] [transport.py] [_log()] starting thread (client mode): 0xf13ff280
2026-04-15T18:17:15.773 [DEBUG] [Thread-23512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:17:15.788 [DEBUG] [Thread-23512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:17:15.788 [INFO] [Thread-23512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:17:15.790 [DEBUG] [Thread-23512] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:17:15.790 [DEBUG] [Thread-23512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:17:15.790 [DEBUG] [Thread-23512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:17:15.790 [DEBUG] [Thread-23512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:17:15.790 [DEBUG] [Thread-23512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:17:15.790 [DEBUG] [Thread-23512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:17:15.790 [DEBUG] [Thread-23512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:17:15.790 [DEBUG] [Thread-23512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:17:15.790 [DEBUG] [Thread-23512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:17:15.790 [DEBUG] [Thread-23512] [transport.py] [_log()] client lang: <none>
2026-04-15T18:17:15.790 [DEBUG] [Thread-23512] [transport.py] [_log()] server lang: <none>
2026-04-15T18:17:15.790 [DEBUG] [Thread-23512] [transport.py] [_log()] kex follows: False
2026-04-15T18:17:15.790 [DEBUG] [Thread-23512] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:17:15.790 [DEBUG] [Thread-23512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:17:15.790 [DEBUG] [Thread-23512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:17:15.791 [DEBUG] [Thread-23512] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:17:15.791 [DEBUG] [Thread-23512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:17:15.791 [DEBUG] [Thread-23512] [transport.py] [_log()] Compression: none
2026-04-15T18:17:15.791 [DEBUG] [Thread-23512] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:17:15.798 [DEBUG] [Thread-23512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:17:15.798 [DEBUG] [Thread-23512] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:17:15.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:17:15.799 [DEBUG] [Thread-23512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:17:15.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:17:15.800 [DEBUG] [Thread-23512] [transport.py] [_log()] userauth is OK
2026-04-15T18:17:15.800 [DEBUG] [Thread-23512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:17:15.800 [DEBUG] [Thread-23512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:17:15.800 [DEBUG] [Thread-23512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:17:15.800 [DEBUG] [Thread-23512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:17:15.814 [INFO] [Thread-23512] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:17:15.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:17:16.392 [DEBUG] [Thread-23512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:17:16.392 [DEBUG] [Thread-23512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:17:16.393 [DEBUG] [Thread-23512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:17:16.432 [DEBUG] [Thread-23512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:17:16.433 [DEBUG] [Thread-23512] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:17:16.435 [DEBUG] [Thread-23512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:17:16.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:17:16.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:17:16.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:17:16.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:17:16.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:17:16.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:17:16.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:17:16.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:17:16.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:17:16.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.678606 -999.00  +11.70  17.18     73   +7.10 1 1 1 1 1   868    0 3.81 -43.62 ----- 17.0 17.2 315.6 21.3 13.2 -26.0 13.2 -24.9 12.9 -22.6 13.2 -24.5
2026-04-15T18:17:16.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:17:16.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:17:16.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.678606
2026-04-15T18:17:16.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:17:16.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:17:16.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:17:16.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:17:16.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:17:16.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:16:59', tmtdew=5.57342, humidity=68.6719, cloud=0.0, wind=14.8223, temperature=11.856, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:17:11.558', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:17:16.449 [DEBUG] [Thread-23512] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:17:16.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:17:16.664 [DEBUG] [Thread-23515] [transport.py] [_log()] starting thread (client mode): 0xee9ad960
2026-04-15T18:17:16.664 [DEBUG] [Thread-23515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:17:16.679 [DEBUG] [Thread-23515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:17:16.679 [INFO] [Thread-23515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:17:16.686 [DEBUG] [Thread-23515] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:17:16.686 [DEBUG] [Thread-23515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:17:16.686 [DEBUG] [Thread-23515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:17:16.687 [DEBUG] [Thread-23515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:17:16.687 [DEBUG] [Thread-23515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:17:16.687 [DEBUG] [Thread-23515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:17:16.687 [DEBUG] [Thread-23515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:17:16.687 [DEBUG] [Thread-23515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:17:16.687 [DEBUG] [Thread-23515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:17:16.687 [DEBUG] [Thread-23515] [transport.py] [_log()] client lang: <none>
2026-04-15T18:17:16.687 [DEBUG] [Thread-23515] [transport.py] [_log()] server lang: <none>
2026-04-15T18:17:16.687 [DEBUG] [Thread-23515] [transport.py] [_log()] kex follows: False
2026-04-15T18:17:16.687 [DEBUG] [Thread-23515] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:17:16.688 [DEBUG] [Thread-23515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:17:16.688 [DEBUG] [Thread-23515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:17:16.688 [DEBUG] [Thread-23515] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:17:16.688 [DEBUG] [Thread-23515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:17:16.688 [DEBUG] [Thread-23515] [transport.py] [_log()] Compression: none
2026-04-15T18:17:16.688 [DEBUG] [Thread-23515] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:17:16.743 [DEBUG] [Thread-23515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:17:16.743 [DEBUG] [Thread-23515] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:17:16.744 [DEBUG] [Thread-23515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:17:16.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:17:16.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:17:16.800 [DEBUG] [Thread-23515] [transport.py] [_log()] userauth is OK
2026-04-15T18:17:16.800 [DEBUG] [Thread-23515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:17:16.800 [DEBUG] [Thread-23515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:17:16.800 [DEBUG] [Thread-23515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:17:16.801 [DEBUG] [Thread-23515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:17:16.823 [INFO] [Thread-23515] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:17:16.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:17:16.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:17:17.684 [DEBUG] [Thread-23515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:17:17.685 [DEBUG] [Thread-23515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:17:17.732 [DEBUG] [Thread-23515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:17:17.732 [DEBUG] [Thread-23515] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:17:17.741 [DEBUG] [Thread-23515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:17:17.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:17:17.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')
2026-04-15T18:17:17.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
2026-04-15T18:17:17.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:17:17.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:17:17.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:17:17.777 [DEBUG] [Thread-23515] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:17:28.585 [DEBUG] [Thread-23517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:17:43.627 [DEBUG] [Thread-23518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:17:47.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:17:47.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:17:47.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
2026-04-15T18:17:47.926 [DEBUG] [Thread-23519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:17:49.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 17, 35), 5.63829, 68.3773, 0.0, 14.5037, 12.1793, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:17:49.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:17:35
2026-04-15T18:17:49.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:17:49.911 [DEBUG] [Thread-23520] [transport.py] [_log()] starting thread (client mode): 0xee9be9b0
2026-04-15T18:17:49.912 [DEBUG] [Thread-23520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:17:49.925 [DEBUG] [Thread-23520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:17:49.925 [INFO] [Thread-23520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:17:49.929 [DEBUG] [Thread-23520] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:17:49.929 [DEBUG] [Thread-23520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:17:49.929 [DEBUG] [Thread-23520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:17:49.929 [DEBUG] [Thread-23520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:17:49.930 [DEBUG] [Thread-23520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:17:49.930 [DEBUG] [Thread-23520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:17:49.930 [DEBUG] [Thread-23520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:17:49.930 [DEBUG] [Thread-23520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:17:49.930 [DEBUG] [Thread-23520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:17:49.930 [DEBUG] [Thread-23520] [transport.py] [_log()] client lang: <none>
2026-04-15T18:17:49.930 [DEBUG] [Thread-23520] [transport.py] [_log()] server lang: <none>
2026-04-15T18:17:49.930 [DEBUG] [Thread-23520] [transport.py] [_log()] kex follows: False
2026-04-15T18:17:49.930 [DEBUG] [Thread-23520] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:17:49.930 [DEBUG] [Thread-23520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:17:49.931 [DEBUG] [Thread-23520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:17:49.931 [DEBUG] [Thread-23520] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:17:49.931 [DEBUG] [Thread-23520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:17:49.931 [DEBUG] [Thread-23520] [transport.py] [_log()] Compression: none
2026-04-15T18:17:49.931 [DEBUG] [Thread-23520] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:17:49.948 [DEBUG] [Thread-23520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:17:49.948 [DEBUG] [Thread-23520] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:17:49.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:17:49.949 [DEBUG] [Thread-23520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:17:49.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:17:49.950 [DEBUG] [Thread-23520] [transport.py] [_log()] userauth is OK
2026-04-15T18:17:49.950 [DEBUG] [Thread-23520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:17:49.950 [DEBUG] [Thread-23520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:17:49.950 [DEBUG] [Thread-23520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:17:49.951 [DEBUG] [Thread-23520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:17:49.973 [INFO] [Thread-23520] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:17:49.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:17:50.566 [DEBUG] [Thread-23520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:17:50.566 [DEBUG] [Thread-23520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:17:50.566 [DEBUG] [Thread-23520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:17:50.607 [DEBUG] [Thread-23520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:17:50.607 [DEBUG] [Thread-23520] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:17:50.609 [DEBUG] [Thread-23520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:17:50.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:17:50.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:17:50.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:17:50.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:17:50.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:17:50.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:17:50.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:17:50.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:17:50.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:17:50.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.678954 -999.00  +11.70  16.43     74   +7.20 1 1 1 1 1   865    0 3.61 -48.90 ----- 14.3 16.4 308.6 19.1 13.2 -25.8 13.1 -24.6 -999.0 -999.0 13.1 -24.4
2026-04-15T18:17:50.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:17:50.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:17:50.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.678954
2026-04-15T18:17:50.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:17:50.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:17:50.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:17:50.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:17:50.627 [DEBUG] [Thread-23520] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:17:50.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:17:50.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:17:35', tmtdew=5.63829, humidity=68.3773, cloud=0.0, wind=14.5037, temperature=12.1793, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:17:41.626', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:17:50.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:17:50.847 [DEBUG] [Thread-23523] [transport.py] [_log()] starting thread (client mode): 0xee9bc580
2026-04-15T18:17:50.847 [DEBUG] [Thread-23523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:17:50.861 [DEBUG] [Thread-23523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:17:50.861 [INFO] [Thread-23523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:17:50.870 [DEBUG] [Thread-23523] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:17:50.870 [DEBUG] [Thread-23523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:17:50.870 [DEBUG] [Thread-23523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:17:50.870 [DEBUG] [Thread-23523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:17:50.870 [DEBUG] [Thread-23523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:17:50.870 [DEBUG] [Thread-23523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:17:50.870 [DEBUG] [Thread-23523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:17:50.870 [DEBUG] [Thread-23523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:17:50.870 [DEBUG] [Thread-23523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:17:50.870 [DEBUG] [Thread-23523] [transport.py] [_log()] client lang: <none>
2026-04-15T18:17:50.870 [DEBUG] [Thread-23523] [transport.py] [_log()] server lang: <none>
2026-04-15T18:17:50.870 [DEBUG] [Thread-23523] [transport.py] [_log()] kex follows: False
2026-04-15T18:17:50.871 [DEBUG] [Thread-23523] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:17:50.871 [DEBUG] [Thread-23523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:17:50.871 [DEBUG] [Thread-23523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:17:50.871 [DEBUG] [Thread-23523] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:17:50.871 [DEBUG] [Thread-23523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:17:50.871 [DEBUG] [Thread-23523] [transport.py] [_log()] Compression: none
2026-04-15T18:17:50.871 [DEBUG] [Thread-23523] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:17:50.924 [DEBUG] [Thread-23523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:17:50.924 [DEBUG] [Thread-23523] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:17:50.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:17:50.925 [DEBUG] [Thread-23523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:17:50.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:17:50.982 [DEBUG] [Thread-23523] [transport.py] [_log()] userauth is OK
2026-04-15T18:17:50.982 [DEBUG] [Thread-23523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:17:50.982 [DEBUG] [Thread-23523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:17:50.982 [DEBUG] [Thread-23523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:17:50.982 [DEBUG] [Thread-23523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:17:50.999 [INFO] [Thread-23523] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:17:50.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:17:51.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:17:51.828 [DEBUG] [Thread-23523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:17:51.828 [DEBUG] [Thread-23523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:17:51.876 [DEBUG] [Thread-23523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:17:51.877 [DEBUG] [Thread-23523] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:17:51.888 [DEBUG] [Thread-23523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:17:51.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:17:51.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')
2026-04-15T18:17:51.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T18:17:51.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:17:51.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:17:51.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:17:51.930 [DEBUG] [Thread-23523] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:17:58.657 [DEBUG] [Thread-23525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:18:04.933 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:18:04.934 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:18:13.697 [DEBUG] [Thread-23526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:18:21.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:18:21.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:18:21.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T18:18:23.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 18, 11), 5.57757, 68.639, 0.0, 16.9574, 11.7899, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:18:23.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:18:11
2026-04-15T18:18:23.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:18:24.067 [DEBUG] [Thread-23527] [transport.py] [_log()] starting thread (client mode): 0xf13e2890
2026-04-15T18:18:24.067 [DEBUG] [Thread-23527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:18:24.086 [DEBUG] [Thread-23527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:18:24.086 [INFO] [Thread-23527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:18:24.089 [DEBUG] [Thread-23527] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:18:24.090 [DEBUG] [Thread-23527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:18:24.090 [DEBUG] [Thread-23527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:18:24.090 [DEBUG] [Thread-23527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:18:24.090 [DEBUG] [Thread-23527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:18:24.090 [DEBUG] [Thread-23527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:18:24.090 [DEBUG] [Thread-23527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:18:24.090 [DEBUG] [Thread-23527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:18:24.090 [DEBUG] [Thread-23527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:18:24.090 [DEBUG] [Thread-23527] [transport.py] [_log()] client lang: <none>
2026-04-15T18:18:24.090 [DEBUG] [Thread-23527] [transport.py] [_log()] server lang: <none>
2026-04-15T18:18:24.090 [DEBUG] [Thread-23527] [transport.py] [_log()] kex follows: False
2026-04-15T18:18:24.090 [DEBUG] [Thread-23527] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:18:24.091 [DEBUG] [Thread-23527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:18:24.091 [DEBUG] [Thread-23527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:18:24.091 [DEBUG] [Thread-23527] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:18:24.091 [DEBUG] [Thread-23527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:18:24.091 [DEBUG] [Thread-23527] [transport.py] [_log()] Compression: none
2026-04-15T18:18:24.091 [DEBUG] [Thread-23527] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:18:24.108 [DEBUG] [Thread-23527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:18:24.108 [DEBUG] [Thread-23527] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:18:24.109 [DEBUG] [Thread-23527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:18:24.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:18:24.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:18:24.110 [DEBUG] [Thread-23527] [transport.py] [_log()] userauth is OK
2026-04-15T18:18:24.110 [DEBUG] [Thread-23527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:18:24.110 [DEBUG] [Thread-23527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:18:24.110 [DEBUG] [Thread-23527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:18:24.110 [DEBUG] [Thread-23527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:18:24.128 [INFO] [Thread-23527] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:18:24.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:18:24.760 [DEBUG] [Thread-23527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:18:24.761 [DEBUG] [Thread-23527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:18:24.761 [DEBUG] [Thread-23527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:18:24.802 [DEBUG] [Thread-23527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:18:24.802 [DEBUG] [Thread-23527] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:18:24.805 [DEBUG] [Thread-23527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:18:24.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:18:24.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:18:24.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:18:24.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:18:24.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:18:24.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:18:24.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:18:24.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:18:24.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:18:24.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.679301 -999.00  +11.70  17.14     74   +7.20 1 1 1 1 1   863    0 3.54 -51.53 ----- 13.9 17.1 317.2 18.5 13.2 -25.8 13.1 -24.7 12.8 -22.2 13.1 -24.5
2026-04-15T18:18:24.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:18:24.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:18:24.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.679301
2026-04-15T18:18:24.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:18:24.830 [DEBUG] [Thread-23527] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:18:24.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:18:24.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:18:24.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:18:24.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:18:24.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:18:11', tmtdew=5.57757, humidity=68.639, cloud=0.0, wind=16.9574, temperature=11.7899, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:18:11.606', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:18:25.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:18:25.091 [DEBUG] [Thread-23530] [transport.py] [_log()] starting thread (client mode): 0xf13e30a0
2026-04-15T18:18:25.091 [DEBUG] [Thread-23530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:18:25.105 [DEBUG] [Thread-23530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:18:25.105 [INFO] [Thread-23530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:18:25.112 [DEBUG] [Thread-23530] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:18:25.112 [DEBUG] [Thread-23530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:18:25.113 [DEBUG] [Thread-23530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:18:25.113 [DEBUG] [Thread-23530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:18:25.113 [DEBUG] [Thread-23530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:18:25.113 [DEBUG] [Thread-23530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:18:25.113 [DEBUG] [Thread-23530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:18:25.113 [DEBUG] [Thread-23530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:18:25.113 [DEBUG] [Thread-23530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:18:25.113 [DEBUG] [Thread-23530] [transport.py] [_log()] client lang: <none>
2026-04-15T18:18:25.113 [DEBUG] [Thread-23530] [transport.py] [_log()] server lang: <none>
2026-04-15T18:18:25.113 [DEBUG] [Thread-23530] [transport.py] [_log()] kex follows: False
2026-04-15T18:18:25.113 [DEBUG] [Thread-23530] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:18:25.113 [DEBUG] [Thread-23530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:18:25.114 [DEBUG] [Thread-23530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:18:25.114 [DEBUG] [Thread-23530] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:18:25.114 [DEBUG] [Thread-23530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:18:25.114 [DEBUG] [Thread-23530] [transport.py] [_log()] Compression: none
2026-04-15T18:18:25.114 [DEBUG] [Thread-23530] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:18:25.171 [DEBUG] [Thread-23530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:18:25.172 [DEBUG] [Thread-23530] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:18:25.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:18:25.172 [DEBUG] [Thread-23530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:18:25.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:18:25.228 [DEBUG] [Thread-23530] [transport.py] [_log()] userauth is OK
2026-04-15T18:18:25.228 [DEBUG] [Thread-23530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:18:25.229 [DEBUG] [Thread-23530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:18:25.229 [DEBUG] [Thread-23530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:18:25.229 [DEBUG] [Thread-23530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:18:25.265 [INFO] [Thread-23530] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:18:25.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:18:25.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:18:26.092 [DEBUG] [Thread-23530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:18:26.093 [DEBUG] [Thread-23530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:18:26.140 [DEBUG] [Thread-23530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:18:26.140 [DEBUG] [Thread-23530] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:18:26.149 [DEBUG] [Thread-23530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:18:26.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:18:26.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')
2026-04-15T18:18:26.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
2026-04-15T18:18:26.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:18:26.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:18:26.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:18:26.183 [DEBUG] [Thread-23530] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:18:28.728 [DEBUG] [Thread-23532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:18:43.771 [DEBUG] [Thread-23533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:18:48.088 [DEBUG] [Thread-23534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:18:56.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:18:56.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:18:56.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T18:18:57.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 18, 46), 5.62415, 68.444, 0.0, 13.41, 12.1796, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:18:57.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:18:46
2026-04-15T18:18:57.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:18:58.319 [DEBUG] [Thread-23535] [transport.py] [_log()] starting thread (client mode): 0xf13fe170
2026-04-15T18:18:58.319 [DEBUG] [Thread-23535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:18:58.338 [DEBUG] [Thread-23535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:18:58.338 [INFO] [Thread-23535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:18:58.342 [DEBUG] [Thread-23535] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:18:58.342 [DEBUG] [Thread-23535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:18:58.342 [DEBUG] [Thread-23535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:18:58.342 [DEBUG] [Thread-23535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:18:58.342 [DEBUG] [Thread-23535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:18:58.342 [DEBUG] [Thread-23535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:18:58.342 [DEBUG] [Thread-23535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:18:58.342 [DEBUG] [Thread-23535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:18:58.342 [DEBUG] [Thread-23535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:18:58.343 [DEBUG] [Thread-23535] [transport.py] [_log()] client lang: <none>
2026-04-15T18:18:58.343 [DEBUG] [Thread-23535] [transport.py] [_log()] server lang: <none>
2026-04-15T18:18:58.343 [DEBUG] [Thread-23535] [transport.py] [_log()] kex follows: False
2026-04-15T18:18:58.343 [DEBUG] [Thread-23535] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:18:58.343 [DEBUG] [Thread-23535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:18:58.343 [DEBUG] [Thread-23535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:18:58.343 [DEBUG] [Thread-23535] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:18:58.343 [DEBUG] [Thread-23535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:18:58.343 [DEBUG] [Thread-23535] [transport.py] [_log()] Compression: none
2026-04-15T18:18:58.343 [DEBUG] [Thread-23535] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:18:58.359 [DEBUG] [Thread-23535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:18:58.360 [DEBUG] [Thread-23535] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:18:58.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:18:58.360 [DEBUG] [Thread-23535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:18:58.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:18:58.361 [DEBUG] [Thread-23535] [transport.py] [_log()] userauth is OK
2026-04-15T18:18:58.361 [DEBUG] [Thread-23535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:18:58.361 [DEBUG] [Thread-23535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:18:58.362 [DEBUG] [Thread-23535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:18:58.362 [DEBUG] [Thread-23535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:18:58.379 [INFO] [Thread-23535] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:18:58.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:18:58.803 [DEBUG] [Thread-23537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:18:59.065 [DEBUG] [Thread-23535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:18:59.065 [DEBUG] [Thread-23535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:18:59.066 [DEBUG] [Thread-23535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:18:59.106 [DEBUG] [Thread-23535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:18:59.106 [DEBUG] [Thread-23535] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:18:59.109 [DEBUG] [Thread-23535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:18:59.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:18:59.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:18:59.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:18:59.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:18:59.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:18:59.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:18:59.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:18:59.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:18:59.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:18:59.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.679648 -999.00  +11.60  16.13     74   +7.20 1 1 1 1 1   860    0 3.31 -53.81 ----- 13.8 16.1 313.6 20.4 13.2 -25.8 13.1 -24.7 12.8 -22.2 13.0 -24.5
2026-04-15T18:18:59.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:18:59.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:18:59.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.679648
2026-04-15T18:18:59.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:18:59.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:18:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:18:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:18:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:18:59.136 [DEBUG] [Thread-23535] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:18:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:18:46', tmtdew=5.62415, humidity=68.444, cloud=0.0, wind=13.41, temperature=12.1796, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:18:41.587', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:18:59.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:18:59.390 [DEBUG] [Thread-23539] [transport.py] [_log()] starting thread (client mode): 0xee9ad960
2026-04-15T18:18:59.391 [DEBUG] [Thread-23539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:18:59.405 [DEBUG] [Thread-23539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:18:59.405 [INFO] [Thread-23539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:18:59.413 [DEBUG] [Thread-23539] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:18:59.413 [DEBUG] [Thread-23539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:18:59.413 [DEBUG] [Thread-23539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:18:59.413 [DEBUG] [Thread-23539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:18:59.413 [DEBUG] [Thread-23539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:18:59.413 [DEBUG] [Thread-23539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:18:59.413 [DEBUG] [Thread-23539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:18:59.413 [DEBUG] [Thread-23539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:18:59.413 [DEBUG] [Thread-23539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:18:59.414 [DEBUG] [Thread-23539] [transport.py] [_log()] client lang: <none>
2026-04-15T18:18:59.414 [DEBUG] [Thread-23539] [transport.py] [_log()] server lang: <none>
2026-04-15T18:18:59.414 [DEBUG] [Thread-23539] [transport.py] [_log()] kex follows: False
2026-04-15T18:18:59.414 [DEBUG] [Thread-23539] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:18:59.414 [DEBUG] [Thread-23539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:18:59.414 [DEBUG] [Thread-23539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:18:59.414 [DEBUG] [Thread-23539] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:18:59.414 [DEBUG] [Thread-23539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:18:59.414 [DEBUG] [Thread-23539] [transport.py] [_log()] Compression: none
2026-04-15T18:18:59.414 [DEBUG] [Thread-23539] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:18:59.470 [DEBUG] [Thread-23539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:18:59.470 [DEBUG] [Thread-23539] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:18:59.471 [DEBUG] [Thread-23539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:18:59.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:18:59.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:18:59.527 [DEBUG] [Thread-23539] [transport.py] [_log()] userauth is OK
2026-04-15T18:18:59.527 [DEBUG] [Thread-23539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:18:59.527 [DEBUG] [Thread-23539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:18:59.527 [DEBUG] [Thread-23539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:18:59.527 [DEBUG] [Thread-23539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:18:59.551 [INFO] [Thread-23539] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:18:59.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:18:59.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:19:00.375 [DEBUG] [Thread-23539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:19:00.375 [DEBUG] [Thread-23539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:19:00.423 [DEBUG] [Thread-23539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:19:00.423 [DEBUG] [Thread-23539] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:19:00.432 [DEBUG] [Thread-23539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:19:00.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:19:00.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')
2026-04-15T18:19:00.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
2026-04-15T18:19:00.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:19:00.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:19:00.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:19:00.467 [DEBUG] [Thread-23539] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:19:09.621 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:19:09.623 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:19:13.835 [DEBUG] [Thread-23541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:19:28.879 [DEBUG] [Thread-23542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:19:30.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:19:30.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:19:30.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
2026-04-15T18:19:31.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 19, 23), 5.5494, 68.7717, 0.0, 14.8752, 11.7401, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:19:31.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:19:23
2026-04-15T18:19:32.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:19:32.633 [DEBUG] [Thread-23543] [transport.py] [_log()] starting thread (client mode): 0xee90fc40
2026-04-15T18:19:32.633 [DEBUG] [Thread-23543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:19:32.654 [DEBUG] [Thread-23543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:19:32.654 [INFO] [Thread-23543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:19:32.657 [DEBUG] [Thread-23543] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:19:32.657 [DEBUG] [Thread-23543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:19:32.657 [DEBUG] [Thread-23543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:19:32.657 [DEBUG] [Thread-23543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:19:32.657 [DEBUG] [Thread-23543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:19:32.657 [DEBUG] [Thread-23543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:19:32.657 [DEBUG] [Thread-23543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:19:32.658 [DEBUG] [Thread-23543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:19:32.658 [DEBUG] [Thread-23543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:19:32.658 [DEBUG] [Thread-23543] [transport.py] [_log()] client lang: <none>
2026-04-15T18:19:32.658 [DEBUG] [Thread-23543] [transport.py] [_log()] server lang: <none>
2026-04-15T18:19:32.658 [DEBUG] [Thread-23543] [transport.py] [_log()] kex follows: False
2026-04-15T18:19:32.658 [DEBUG] [Thread-23543] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:19:32.658 [DEBUG] [Thread-23543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:19:32.658 [DEBUG] [Thread-23543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:19:32.658 [DEBUG] [Thread-23543] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:19:32.658 [DEBUG] [Thread-23543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:19:32.658 [DEBUG] [Thread-23543] [transport.py] [_log()] Compression: none
2026-04-15T18:19:32.659 [DEBUG] [Thread-23543] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:19:32.675 [DEBUG] [Thread-23543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:19:32.675 [DEBUG] [Thread-23543] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:19:32.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:19:32.676 [DEBUG] [Thread-23543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:19:32.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:19:32.677 [DEBUG] [Thread-23543] [transport.py] [_log()] userauth is OK
2026-04-15T18:19:32.678 [DEBUG] [Thread-23543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:19:32.678 [DEBUG] [Thread-23543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:19:32.678 [DEBUG] [Thread-23543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:19:32.678 [DEBUG] [Thread-23543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:19:32.694 [INFO] [Thread-23543] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:19:32.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:19:33.327 [DEBUG] [Thread-23543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:19:33.327 [DEBUG] [Thread-23543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:19:33.328 [DEBUG] [Thread-23543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:19:33.368 [DEBUG] [Thread-23543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:19:33.368 [DEBUG] [Thread-23543] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:19:33.371 [DEBUG] [Thread-23543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:19:33.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:19:33.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:19:33.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:19:33.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:19:33.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:19:33.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:19:33.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:19:33.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:19:33.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:19:33.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.679995 -999.00  +11.70   9.99     74   +7.20 1 1 1 1 1   858    0 3.25 -56.92 ----- 11.7 10.0 307.8 16.9 13.1 -25.9 13.1 -24.6 12.8 -22.4 13.0 -24.3
2026-04-15T18:19:33.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:19:33.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:19:33.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.679995
2026-04-15T18:19:33.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:19:33.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:19:33.399 [DEBUG] [Thread-23543] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:19:33.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:19:33.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:19:33.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:19:33.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:19:23', tmtdew=5.5494, humidity=68.7717, cloud=0.0, wind=14.8752, temperature=11.7401, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:19:11.568', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:19:33.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:19:33.659 [DEBUG] [Thread-23546] [transport.py] [_log()] starting thread (client mode): 0xee9ad8a0
2026-04-15T18:19:33.659 [DEBUG] [Thread-23546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:19:33.673 [DEBUG] [Thread-23546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:19:33.673 [INFO] [Thread-23546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:19:33.680 [DEBUG] [Thread-23546] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:19:33.680 [DEBUG] [Thread-23546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:19:33.680 [DEBUG] [Thread-23546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:19:33.680 [DEBUG] [Thread-23546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:19:33.681 [DEBUG] [Thread-23546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:19:33.681 [DEBUG] [Thread-23546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:19:33.681 [DEBUG] [Thread-23546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:19:33.681 [DEBUG] [Thread-23546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:19:33.681 [DEBUG] [Thread-23546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:19:33.681 [DEBUG] [Thread-23546] [transport.py] [_log()] client lang: <none>
2026-04-15T18:19:33.681 [DEBUG] [Thread-23546] [transport.py] [_log()] server lang: <none>
2026-04-15T18:19:33.681 [DEBUG] [Thread-23546] [transport.py] [_log()] kex follows: False
2026-04-15T18:19:33.681 [DEBUG] [Thread-23546] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:19:33.681 [DEBUG] [Thread-23546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:19:33.681 [DEBUG] [Thread-23546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:19:33.682 [DEBUG] [Thread-23546] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:19:33.682 [DEBUG] [Thread-23546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:19:33.682 [DEBUG] [Thread-23546] [transport.py] [_log()] Compression: none
2026-04-15T18:19:33.682 [DEBUG] [Thread-23546] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:19:33.736 [DEBUG] [Thread-23546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:19:33.737 [DEBUG] [Thread-23546] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:19:33.737 [DEBUG] [Thread-23546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:19:33.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:19:33.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:19:33.793 [DEBUG] [Thread-23546] [transport.py] [_log()] userauth is OK
2026-04-15T18:19:33.793 [DEBUG] [Thread-23546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:19:33.794 [DEBUG] [Thread-23546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:19:33.794 [DEBUG] [Thread-23546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:19:33.794 [DEBUG] [Thread-23546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:19:33.819 [INFO] [Thread-23546] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:19:33.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:19:33.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:19:34.637 [DEBUG] [Thread-23546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:19:34.637 [DEBUG] [Thread-23546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:19:34.684 [DEBUG] [Thread-23546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:19:34.685 [DEBUG] [Thread-23546] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:19:34.693 [DEBUG] [Thread-23546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:19:34.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:19:34.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')
2026-04-15T18:19:34.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
2026-04-15T18:19:34.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:19:34.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:19:34.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:19:34.724 [DEBUG] [Thread-23546] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:19:43.909 [DEBUG] [Thread-23548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:19:48.253 [DEBUG] [Thread-23549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:19:58.952 [DEBUG] [Thread-23550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:20:04.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:20:04.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:20:04.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
2026-04-15T18:20:06.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 19, 23), 5.5494, 68.7717, 0.0, 14.8752, 11.7401, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:20:06.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:19:23
2026-04-15T18:20:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:20:06.913 [DEBUG] [Thread-23551] [transport.py] [_log()] starting thread (client mode): 0xf13fe770
2026-04-15T18:20:06.914 [DEBUG] [Thread-23551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:20:06.928 [DEBUG] [Thread-23551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:20:06.928 [INFO] [Thread-23551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:20:06.930 [DEBUG] [Thread-23551] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:20:06.930 [DEBUG] [Thread-23551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:20:06.930 [DEBUG] [Thread-23551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:20:06.930 [DEBUG] [Thread-23551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:20:06.930 [DEBUG] [Thread-23551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:20:06.930 [DEBUG] [Thread-23551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:20:06.931 [DEBUG] [Thread-23551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:20:06.931 [DEBUG] [Thread-23551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:20:06.931 [DEBUG] [Thread-23551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:20:06.931 [DEBUG] [Thread-23551] [transport.py] [_log()] client lang: <none>
2026-04-15T18:20:06.931 [DEBUG] [Thread-23551] [transport.py] [_log()] server lang: <none>
2026-04-15T18:20:06.931 [DEBUG] [Thread-23551] [transport.py] [_log()] kex follows: False
2026-04-15T18:20:06.931 [DEBUG] [Thread-23551] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:20:06.931 [DEBUG] [Thread-23551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:20:06.931 [DEBUG] [Thread-23551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:20:06.931 [DEBUG] [Thread-23551] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:20:06.931 [DEBUG] [Thread-23551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:20:06.931 [DEBUG] [Thread-23551] [transport.py] [_log()] Compression: none
2026-04-15T18:20:06.931 [DEBUG] [Thread-23551] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:20:06.945 [DEBUG] [Thread-23551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:20:06.946 [DEBUG] [Thread-23551] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:20:06.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:20:06.946 [DEBUG] [Thread-23551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:20:06.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:20:06.948 [DEBUG] [Thread-23551] [transport.py] [_log()] userauth is OK
2026-04-15T18:20:06.948 [DEBUG] [Thread-23551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:20:06.948 [DEBUG] [Thread-23551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:20:06.948 [DEBUG] [Thread-23551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:20:06.948 [DEBUG] [Thread-23551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:20:06.963 [INFO] [Thread-23551] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:20:06.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:20:09.488 [DEBUG] [Thread-23551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:20:09.488 [DEBUG] [Thread-23551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:20:09.489 [DEBUG] [Thread-23551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:20:09.529 [DEBUG] [Thread-23551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:20:09.529 [DEBUG] [Thread-23551] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:20:09.532 [DEBUG] [Thread-23551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:20:09.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:20:09.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:20:09.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:20:09.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:20:09.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:20:09.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:20:09.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:20:09.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:20:09.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:20:09.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.680342 -999.00  +11.70  13.35     74   +7.20 1 1 1 1 1   854    0 3.17 -58.18 ----- 12.5 13.3 301.8 15.8 13.1 -25.7 13.1 -24.6 12.7 -22.1 13.0 -24.4
2026-04-15T18:20:09.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:20:09.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:20:09.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.680342
2026-04-15T18:20:09.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:20:09.584 [DEBUG] [Thread-23551] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:20:09.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:20:09.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:20:09.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:20:09.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:20:09.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:19:23', tmtdew=5.5494, humidity=68.7717, cloud=0.0, wind=14.8752, temperature=11.7401, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:19:41.549', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:20:09.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:20:09.843 [DEBUG] [Thread-23554] [transport.py] [_log()] starting thread (client mode): 0xf13ff730
2026-04-15T18:20:09.844 [DEBUG] [Thread-23554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:20:09.863 [DEBUG] [Thread-23554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:20:09.863 [INFO] [Thread-23554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:20:09.870 [DEBUG] [Thread-23554] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:20:09.870 [DEBUG] [Thread-23554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:20:09.870 [DEBUG] [Thread-23554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:20:09.870 [DEBUG] [Thread-23554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:20:09.870 [DEBUG] [Thread-23554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:20:09.871 [DEBUG] [Thread-23554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:20:09.871 [DEBUG] [Thread-23554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:20:09.871 [DEBUG] [Thread-23554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:20:09.871 [DEBUG] [Thread-23554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:20:09.871 [DEBUG] [Thread-23554] [transport.py] [_log()] client lang: <none>
2026-04-15T18:20:09.871 [DEBUG] [Thread-23554] [transport.py] [_log()] server lang: <none>
2026-04-15T18:20:09.871 [DEBUG] [Thread-23554] [transport.py] [_log()] kex follows: False
2026-04-15T18:20:09.871 [DEBUG] [Thread-23554] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:20:09.871 [DEBUG] [Thread-23554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:20:09.871 [DEBUG] [Thread-23554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:20:09.871 [DEBUG] [Thread-23554] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:20:09.872 [DEBUG] [Thread-23554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:20:09.872 [DEBUG] [Thread-23554] [transport.py] [_log()] Compression: none
2026-04-15T18:20:09.872 [DEBUG] [Thread-23554] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:20:09.926 [DEBUG] [Thread-23554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:20:09.927 [DEBUG] [Thread-23554] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:20:09.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:20:09.928 [DEBUG] [Thread-23554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:20:09.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:20:09.984 [DEBUG] [Thread-23554] [transport.py] [_log()] userauth is OK
2026-04-15T18:20:09.984 [DEBUG] [Thread-23554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:20:09.984 [DEBUG] [Thread-23554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:20:09.984 [DEBUG] [Thread-23554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:20:09.985 [DEBUG] [Thread-23554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:20:10.013 [INFO] [Thread-23554] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:20:10.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:20:10.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:20:10.824 [DEBUG] [Thread-23554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:20:10.824 [DEBUG] [Thread-23554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:20:10.875 [DEBUG] [Thread-23554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:20:10.875 [DEBUG] [Thread-23554] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:20:10.884 [DEBUG] [Thread-23554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:20:10.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:20:10.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')
2026-04-15T18:20:10.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') -> 00000000
2026-04-15T18:20:10.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:20:10.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:20:10.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:20:10.915 [DEBUG] [Thread-23554] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:20:13.575 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:20:13.576 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:20:13.982 [DEBUG] [Thread-23556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:20:29.027 [DEBUG] [Thread-23557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:20:40.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:20:40.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:20:40.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
2026-04-15T18:20:42.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 20, 35), 5.64501, 68.3461, 0.0, 13.7275, 12.181, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:20:42.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:20:35
2026-04-15T18:20:42.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:20:43.069 [DEBUG] [Thread-23558] [transport.py] [_log()] starting thread (client mode): 0xee905990
2026-04-15T18:20:43.070 [DEBUG] [Thread-23558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:20:43.090 [DEBUG] [Thread-23558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:20:43.090 [INFO] [Thread-23558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:20:43.093 [DEBUG] [Thread-23558] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:20:43.093 [DEBUG] [Thread-23558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:20:43.093 [DEBUG] [Thread-23558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:20:43.093 [DEBUG] [Thread-23558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:20:43.094 [DEBUG] [Thread-23558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:20:43.094 [DEBUG] [Thread-23558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:20:43.094 [DEBUG] [Thread-23558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:20:43.094 [DEBUG] [Thread-23558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:20:43.094 [DEBUG] [Thread-23558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:20:43.094 [DEBUG] [Thread-23558] [transport.py] [_log()] client lang: <none>
2026-04-15T18:20:43.094 [DEBUG] [Thread-23558] [transport.py] [_log()] server lang: <none>
2026-04-15T18:20:43.094 [DEBUG] [Thread-23558] [transport.py] [_log()] kex follows: False
2026-04-15T18:20:43.094 [DEBUG] [Thread-23558] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:20:43.094 [DEBUG] [Thread-23558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:20:43.094 [DEBUG] [Thread-23558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:20:43.095 [DEBUG] [Thread-23558] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:20:43.095 [DEBUG] [Thread-23558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:20:43.095 [DEBUG] [Thread-23558] [transport.py] [_log()] Compression: none
2026-04-15T18:20:43.095 [DEBUG] [Thread-23558] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:20:43.112 [DEBUG] [Thread-23558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:20:43.112 [DEBUG] [Thread-23558] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:20:43.113 [DEBUG] [Thread-23558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:20:43.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:20:43.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:20:43.114 [DEBUG] [Thread-23558] [transport.py] [_log()] userauth is OK
2026-04-15T18:20:43.114 [DEBUG] [Thread-23558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:20:43.114 [DEBUG] [Thread-23558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:20:43.114 [DEBUG] [Thread-23558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:20:43.114 [DEBUG] [Thread-23558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:20:43.138 [INFO] [Thread-23558] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:20:43.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:20:43.793 [DEBUG] [Thread-23558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:20:43.794 [DEBUG] [Thread-23558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:20:43.794 [DEBUG] [Thread-23558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:20:43.835 [DEBUG] [Thread-23558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:20:43.835 [DEBUG] [Thread-23558] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:20:43.838 [DEBUG] [Thread-23558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:20:43.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:20:43.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:20:43.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:20:43.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:20:43.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:20:43.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:20:43.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:20:43.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:20:43.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:20:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.680690 -999.00  +11.70  10.64     74   +7.20 1 1 1 1 1   851    0 3.12 -59.05 ----- 10.9 10.6 296.5 14.9 13.1 -25.6 13.0 -24.3 12.7 -22.1 12.9 -24.2
2026-04-15T18:20:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:20:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:20:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.680690
2026-04-15T18:20:43.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:20:43.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:20:43.864 [DEBUG] [Thread-23558] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:20:43.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:20:43.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:20:43.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:20:43.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:20:35', tmtdew=5.64501, humidity=68.3461, cloud=0.0, wind=13.7275, temperature=12.181, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:20:11.616', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:20:44.056 [DEBUG] [Thread-23561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:20:44.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:20:44.126 [DEBUG] [Thread-23562] [transport.py] [_log()] starting thread (client mode): 0xee9ad450
2026-04-15T18:20:44.126 [DEBUG] [Thread-23562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:20:44.141 [DEBUG] [Thread-23562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:20:44.141 [INFO] [Thread-23562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:20:44.148 [DEBUG] [Thread-23562] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:20:44.148 [DEBUG] [Thread-23562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:20:44.148 [DEBUG] [Thread-23562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:20:44.148 [DEBUG] [Thread-23562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:20:44.149 [DEBUG] [Thread-23562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:20:44.149 [DEBUG] [Thread-23562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:20:44.149 [DEBUG] [Thread-23562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:20:44.149 [DEBUG] [Thread-23562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:20:44.149 [DEBUG] [Thread-23562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:20:44.149 [DEBUG] [Thread-23562] [transport.py] [_log()] client lang: <none>
2026-04-15T18:20:44.149 [DEBUG] [Thread-23562] [transport.py] [_log()] server lang: <none>
2026-04-15T18:20:44.149 [DEBUG] [Thread-23562] [transport.py] [_log()] kex follows: False
2026-04-15T18:20:44.149 [DEBUG] [Thread-23562] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:20:44.149 [DEBUG] [Thread-23562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:20:44.149 [DEBUG] [Thread-23562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:20:44.150 [DEBUG] [Thread-23562] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:20:44.150 [DEBUG] [Thread-23562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:20:44.150 [DEBUG] [Thread-23562] [transport.py] [_log()] Compression: none
2026-04-15T18:20:44.150 [DEBUG] [Thread-23562] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:20:44.209 [DEBUG] [Thread-23562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:20:44.209 [DEBUG] [Thread-23562] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:20:44.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:20:44.210 [DEBUG] [Thread-23562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:20:44.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:20:44.266 [DEBUG] [Thread-23562] [transport.py] [_log()] userauth is OK
2026-04-15T18:20:44.266 [DEBUG] [Thread-23562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:20:44.266 [DEBUG] [Thread-23562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:20:44.266 [DEBUG] [Thread-23562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:20:44.266 [DEBUG] [Thread-23562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:20:44.285 [INFO] [Thread-23562] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:20:44.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:20:44.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:20:45.111 [DEBUG] [Thread-23562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:20:45.112 [DEBUG] [Thread-23562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:20:45.159 [DEBUG] [Thread-23562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:20:45.159 [DEBUG] [Thread-23562] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:20:45.168 [DEBUG] [Thread-23562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:20:45.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:20:45.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')
2026-04-15T18:20:45.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
2026-04-15T18:20:45.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:20:45.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:20:45.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:20:45.202 [DEBUG] [Thread-23562] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:20:48.424 [DEBUG] [Thread-23564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:20:59.095 [DEBUG] [Thread-23565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:21:14.127 [DEBUG] [Thread-23566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:21:15.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:21:15.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:21: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
2026-04-15T18:21:16.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 20, 35), 5.64501, 68.3461, 0.0, 13.7275, 12.181, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:21:16.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:20:35
2026-04-15T18:21:16.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:21:17.343 [DEBUG] [Thread-23567] [transport.py] [_log()] starting thread (client mode): 0xee907ac0
2026-04-15T18:21:17.343 [DEBUG] [Thread-23567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:21:17.363 [DEBUG] [Thread-23567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:21:17.363 [INFO] [Thread-23567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:21:17.366 [DEBUG] [Thread-23567] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:21:17.366 [DEBUG] [Thread-23567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:21:17.366 [DEBUG] [Thread-23567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:21:17.366 [DEBUG] [Thread-23567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:21:17.366 [DEBUG] [Thread-23567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:21:17.366 [DEBUG] [Thread-23567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:21:17.367 [DEBUG] [Thread-23567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:21:17.367 [DEBUG] [Thread-23567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:21:17.367 [DEBUG] [Thread-23567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:21:17.367 [DEBUG] [Thread-23567] [transport.py] [_log()] client lang: <none>
2026-04-15T18:21:17.367 [DEBUG] [Thread-23567] [transport.py] [_log()] server lang: <none>
2026-04-15T18:21:17.367 [DEBUG] [Thread-23567] [transport.py] [_log()] kex follows: False
2026-04-15T18:21:17.367 [DEBUG] [Thread-23567] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:21:17.367 [DEBUG] [Thread-23567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:21:17.367 [DEBUG] [Thread-23567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:21:17.367 [DEBUG] [Thread-23567] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:21:17.367 [DEBUG] [Thread-23567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:21:17.368 [DEBUG] [Thread-23567] [transport.py] [_log()] Compression: none
2026-04-15T18:21:17.368 [DEBUG] [Thread-23567] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:21:17.383 [DEBUG] [Thread-23567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:21:17.383 [DEBUG] [Thread-23567] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:21:17.384 [DEBUG] [Thread-23567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:21:17.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:21:17.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:21:17.385 [DEBUG] [Thread-23567] [transport.py] [_log()] userauth is OK
2026-04-15T18:21:17.385 [DEBUG] [Thread-23567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:21:17.385 [DEBUG] [Thread-23567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:21:17.385 [DEBUG] [Thread-23567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:21:17.386 [DEBUG] [Thread-23567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:21:17.409 [INFO] [Thread-23567] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:21:17.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:21:17.764 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:21:17.765 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:21:18.062 [DEBUG] [Thread-23567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:21:18.063 [DEBUG] [Thread-23567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:21:18.063 [DEBUG] [Thread-23567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:21:18.103 [DEBUG] [Thread-23567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:21:18.103 [DEBUG] [Thread-23567] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:21:18.106 [DEBUG] [Thread-23567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:21:18.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:21:18.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:21:18.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:21:18.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:21:18.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:21:18.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:21:18.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:21:18.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:21:18.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:21:18.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.681037 -999.00  +11.70  12.07     74   +7.20 1 1 1 1 1   847    0 3.06 -59.07 ----- 12.3 12.1 290.2 14.4 13.0 -25.6 12.9 -24.4 12.7 -22.1 12.9 -24.1
2026-04-15T18:21:18.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:21:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:21:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.681037
2026-04-15T18:21:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:21:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:21:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:21:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:21:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:21:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:20:35', tmtdew=5.64501, humidity=68.3461, cloud=0.0, wind=13.7275, temperature=12.181, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:20:41.597', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:21:18.132 [DEBUG] [Thread-23567] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:21:18.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:21:18.374 [DEBUG] [Thread-23570] [transport.py] [_log()] starting thread (client mode): 0xf13c8760
2026-04-15T18:21:18.374 [DEBUG] [Thread-23570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:21:18.389 [DEBUG] [Thread-23570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:21:18.389 [INFO] [Thread-23570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:21:18.398 [DEBUG] [Thread-23570] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:21:18.398 [DEBUG] [Thread-23570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:21:18.398 [DEBUG] [Thread-23570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:21:18.398 [DEBUG] [Thread-23570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:21:18.398 [DEBUG] [Thread-23570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:21:18.398 [DEBUG] [Thread-23570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:21:18.398 [DEBUG] [Thread-23570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:21:18.398 [DEBUG] [Thread-23570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:21:18.399 [DEBUG] [Thread-23570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:21:18.399 [DEBUG] [Thread-23570] [transport.py] [_log()] client lang: <none>
2026-04-15T18:21:18.399 [DEBUG] [Thread-23570] [transport.py] [_log()] server lang: <none>
2026-04-15T18:21:18.399 [DEBUG] [Thread-23570] [transport.py] [_log()] kex follows: False
2026-04-15T18:21:18.399 [DEBUG] [Thread-23570] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:21:18.399 [DEBUG] [Thread-23570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:21:18.399 [DEBUG] [Thread-23570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:21:18.399 [DEBUG] [Thread-23570] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:21:18.399 [DEBUG] [Thread-23570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:21:18.399 [DEBUG] [Thread-23570] [transport.py] [_log()] Compression: none
2026-04-15T18:21:18.399 [DEBUG] [Thread-23570] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:21:18.459 [DEBUG] [Thread-23570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:21:18.459 [DEBUG] [Thread-23570] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:21:18.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:21:18.460 [DEBUG] [Thread-23570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:21:18.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:21:18.524 [DEBUG] [Thread-23570] [transport.py] [_log()] userauth is OK
2026-04-15T18:21:18.524 [DEBUG] [Thread-23570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:21:18.524 [DEBUG] [Thread-23570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:21:18.524 [DEBUG] [Thread-23570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:21:18.524 [DEBUG] [Thread-23570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:21:18.543 [INFO] [Thread-23570] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:21:18.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:21:18.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:21:19.348 [DEBUG] [Thread-23570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:21:19.348 [DEBUG] [Thread-23570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:21:19.396 [DEBUG] [Thread-23570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:21:19.396 [DEBUG] [Thread-23570] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:21:19.405 [DEBUG] [Thread-23570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:21:19.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:21:19.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')
2026-04-15T18:21:19.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
2026-04-15T18:21:19.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:21:19.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:21:19.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:21:19.440 [DEBUG] [Thread-23570] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:21:29.157 [DEBUG] [Thread-23572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:21:44.193 [DEBUG] [Thread-23573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:21:48.613 [DEBUG] [Thread-23574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:21:49.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:21:49.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:21:49.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
2026-04-15T18:21:50.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 21, 10), 5.51422, 68.9382, 0.0, 14.2754, 11.7408, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:21:50.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:21:10
2026-04-15T18:21:51.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:21:51.789 [DEBUG] [Thread-23575] [transport.py] [_log()] starting thread (client mode): 0xf13e2740
2026-04-15T18:21:51.790 [DEBUG] [Thread-23575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:21:51.810 [DEBUG] [Thread-23575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:21:51.810 [INFO] [Thread-23575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:21:51.813 [DEBUG] [Thread-23575] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:21:51.813 [DEBUG] [Thread-23575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:21:51.813 [DEBUG] [Thread-23575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:21:51.813 [DEBUG] [Thread-23575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:21:51.814 [DEBUG] [Thread-23575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:21:51.814 [DEBUG] [Thread-23575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:21:51.814 [DEBUG] [Thread-23575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:21:51.814 [DEBUG] [Thread-23575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:21:51.814 [DEBUG] [Thread-23575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:21:51.814 [DEBUG] [Thread-23575] [transport.py] [_log()] client lang: <none>
2026-04-15T18:21:51.814 [DEBUG] [Thread-23575] [transport.py] [_log()] server lang: <none>
2026-04-15T18:21:51.814 [DEBUG] [Thread-23575] [transport.py] [_log()] kex follows: False
2026-04-15T18:21:51.814 [DEBUG] [Thread-23575] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:21:51.814 [DEBUG] [Thread-23575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:21:51.814 [DEBUG] [Thread-23575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:21:51.815 [DEBUG] [Thread-23575] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:21:51.815 [DEBUG] [Thread-23575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:21:51.815 [DEBUG] [Thread-23575] [transport.py] [_log()] Compression: none
2026-04-15T18:21:51.815 [DEBUG] [Thread-23575] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:21:51.824 [DEBUG] [Thread-23575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:21:51.825 [DEBUG] [Thread-23575] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:21:51.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:21:51.825 [DEBUG] [Thread-23575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:21:51.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:21:51.826 [DEBUG] [Thread-23575] [transport.py] [_log()] userauth is OK
2026-04-15T18:21:51.827 [DEBUG] [Thread-23575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:21:51.827 [DEBUG] [Thread-23575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:21:51.827 [DEBUG] [Thread-23575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:21:51.827 [DEBUG] [Thread-23575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:21:51.844 [INFO] [Thread-23575] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:21:51.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:21:52.468 [DEBUG] [Thread-23575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:21:52.468 [DEBUG] [Thread-23575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:21:52.468 [DEBUG] [Thread-23575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:21:52.509 [DEBUG] [Thread-23575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:21:52.509 [DEBUG] [Thread-23575] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:21:52.512 [DEBUG] [Thread-23575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:21:52.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:21:52.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:21:52.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:21:52.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:21:52.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:21:52.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:21:52.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:21:52.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:21:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:21:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.681384 -999.00  +11.70  17.81     73   +7.10 1 1 1 1 1   843    0 2.89 -67.94 ----- 13.9 17.8 299.4 20.3 13.0 -25.5 12.9 -24.5 12.6 -22.1 12.9 -24.1
2026-04-15T18:21:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:21:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:21:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.681384
2026-04-15T18:21:52.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:21:52.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:21:52.537 [DEBUG] [Thread-23575] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:21:52.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:21:52.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:21:52.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:21:52.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:21:10', tmtdew=5.51422, humidity=68.9382, cloud=0.0, wind=14.2754, temperature=11.7408, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:21:11.578', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:21:52.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:21:52.803 [DEBUG] [Thread-23578] [transport.py] [_log()] starting thread (client mode): 0xf13e20e0
2026-04-15T18:21:52.804 [DEBUG] [Thread-23578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:21:52.822 [DEBUG] [Thread-23578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:21:52.822 [INFO] [Thread-23578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:21:52.830 [DEBUG] [Thread-23578] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:21:52.830 [DEBUG] [Thread-23578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:21:52.830 [DEBUG] [Thread-23578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:21:52.830 [DEBUG] [Thread-23578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:21:52.830 [DEBUG] [Thread-23578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:21:52.830 [DEBUG] [Thread-23578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:21:52.830 [DEBUG] [Thread-23578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:21:52.830 [DEBUG] [Thread-23578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:21:52.830 [DEBUG] [Thread-23578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:21:52.830 [DEBUG] [Thread-23578] [transport.py] [_log()] client lang: <none>
2026-04-15T18:21:52.831 [DEBUG] [Thread-23578] [transport.py] [_log()] server lang: <none>
2026-04-15T18:21:52.831 [DEBUG] [Thread-23578] [transport.py] [_log()] kex follows: False
2026-04-15T18:21:52.831 [DEBUG] [Thread-23578] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:21:52.831 [DEBUG] [Thread-23578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:21:52.831 [DEBUG] [Thread-23578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:21:52.831 [DEBUG] [Thread-23578] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:21:52.831 [DEBUG] [Thread-23578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:21:52.831 [DEBUG] [Thread-23578] [transport.py] [_log()] Compression: none
2026-04-15T18:21:52.831 [DEBUG] [Thread-23578] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:21:52.887 [DEBUG] [Thread-23578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:21:52.887 [DEBUG] [Thread-23578] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:21:52.887 [DEBUG] [Thread-23578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:21:52.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:21:52.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:21:52.943 [DEBUG] [Thread-23578] [transport.py] [_log()] userauth is OK
2026-04-15T18:21:52.944 [DEBUG] [Thread-23578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:21:52.944 [DEBUG] [Thread-23578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:21:52.944 [DEBUG] [Thread-23578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:21:52.944 [DEBUG] [Thread-23578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:21:52.969 [INFO] [Thread-23578] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:21:52.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:21:52.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:21:53.770 [DEBUG] [Thread-23578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:21:53.770 [DEBUG] [Thread-23578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:21:53.817 [DEBUG] [Thread-23578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:21:53.817 [DEBUG] [Thread-23578] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:21:53.831 [DEBUG] [Thread-23578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:21:53.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:21:53.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')
2026-04-15T18:21:53.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
2026-04-15T18:21:53.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:21:53.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:21:53.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:21:53.867 [DEBUG] [Thread-23578] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:21:59.223 [DEBUG] [Thread-23580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:22:14.268 [DEBUG] [Thread-23581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:22:22.273 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:22:22.274 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:22:23.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:22:23.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:22:23.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
2026-04-15T18:22:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 21, 46), 5.48076, 69.1096, 0.0, 15.421, 12.1158, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:22:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:21:46
2026-04-15T18:22:25.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:22:26.010 [DEBUG] [Thread-23582] [transport.py] [_log()] starting thread (client mode): 0xee90d900
2026-04-15T18:22:26.010 [DEBUG] [Thread-23582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:22:26.029 [DEBUG] [Thread-23582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:22:26.030 [INFO] [Thread-23582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:22:26.033 [DEBUG] [Thread-23582] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:22:26.033 [DEBUG] [Thread-23582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:22:26.033 [DEBUG] [Thread-23582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:22:26.033 [DEBUG] [Thread-23582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:22:26.033 [DEBUG] [Thread-23582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:22:26.033 [DEBUG] [Thread-23582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:22:26.033 [DEBUG] [Thread-23582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:22:26.033 [DEBUG] [Thread-23582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:22:26.033 [DEBUG] [Thread-23582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:22:26.033 [DEBUG] [Thread-23582] [transport.py] [_log()] client lang: <none>
2026-04-15T18:22:26.033 [DEBUG] [Thread-23582] [transport.py] [_log()] server lang: <none>
2026-04-15T18:22:26.034 [DEBUG] [Thread-23582] [transport.py] [_log()] kex follows: False
2026-04-15T18:22:26.034 [DEBUG] [Thread-23582] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:22:26.034 [DEBUG] [Thread-23582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:22:26.034 [DEBUG] [Thread-23582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:22:26.034 [DEBUG] [Thread-23582] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:22:26.034 [DEBUG] [Thread-23582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:22:26.034 [DEBUG] [Thread-23582] [transport.py] [_log()] Compression: none
2026-04-15T18:22:26.034 [DEBUG] [Thread-23582] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:22:26.053 [DEBUG] [Thread-23582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:22:26.053 [DEBUG] [Thread-23582] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:22:26.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:22:26.054 [DEBUG] [Thread-23582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:22:26.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:22:26.055 [DEBUG] [Thread-23582] [transport.py] [_log()] userauth is OK
2026-04-15T18:22:26.055 [DEBUG] [Thread-23582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:22:26.055 [DEBUG] [Thread-23582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:22:26.055 [DEBUG] [Thread-23582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:22:26.056 [DEBUG] [Thread-23582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:22:26.091 [INFO] [Thread-23582] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:22:26.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:22:26.904 [DEBUG] [Thread-23582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:22:26.904 [DEBUG] [Thread-23582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:22:26.905 [DEBUG] [Thread-23582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:22:26.945 [DEBUG] [Thread-23582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:22:26.945 [DEBUG] [Thread-23582] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:22:26.947 [DEBUG] [Thread-23582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:22:26.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:22:26.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:22:26.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:22:26.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:22:26.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:22:26.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:22:26.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:22:26.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:22:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:22:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.682079 -999.00  +11.60  13.93     74   +7.20 1 1 1 1 1   833    0 2.68 -72.20 ----- 11.7 13.9 305.8 15.9 13.0 -25.4 12.8 -24.3 12.6 -22.0 12.8 -23.9
2026-04-15T18:22:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:22:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:22:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.682079
2026-04-15T18:22:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:22:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:22:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:22:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:22:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:22:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:21:46', tmtdew=5.48076, humidity=69.1096, cloud=0.0, wind=15.421, temperature=12.1158, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:22:11.626', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:22:26.970 [DEBUG] [Thread-23582] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:22:27.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:22:27.191 [DEBUG] [Thread-23585] [transport.py] [_log()] starting thread (client mode): 0xf13e2110
2026-04-15T18:22:27.191 [DEBUG] [Thread-23585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:22:27.206 [DEBUG] [Thread-23585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:22:27.206 [INFO] [Thread-23585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:22:27.213 [DEBUG] [Thread-23585] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:22:27.213 [DEBUG] [Thread-23585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:22:27.213 [DEBUG] [Thread-23585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:22:27.213 [DEBUG] [Thread-23585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:22:27.213 [DEBUG] [Thread-23585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:22:27.213 [DEBUG] [Thread-23585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:22:27.214 [DEBUG] [Thread-23585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:22:27.214 [DEBUG] [Thread-23585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:22:27.214 [DEBUG] [Thread-23585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:22:27.214 [DEBUG] [Thread-23585] [transport.py] [_log()] client lang: <none>
2026-04-15T18:22:27.214 [DEBUG] [Thread-23585] [transport.py] [_log()] server lang: <none>
2026-04-15T18:22:27.214 [DEBUG] [Thread-23585] [transport.py] [_log()] kex follows: False
2026-04-15T18:22:27.214 [DEBUG] [Thread-23585] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:22:27.214 [DEBUG] [Thread-23585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:22:27.214 [DEBUG] [Thread-23585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:22:27.214 [DEBUG] [Thread-23585] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:22:27.214 [DEBUG] [Thread-23585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:22:27.215 [DEBUG] [Thread-23585] [transport.py] [_log()] Compression: none
2026-04-15T18:22:27.215 [DEBUG] [Thread-23585] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:22:27.271 [DEBUG] [Thread-23585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:22:27.271 [DEBUG] [Thread-23585] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:22:27.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:22:27.272 [DEBUG] [Thread-23585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:22:27.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:22:27.327 [DEBUG] [Thread-23585] [transport.py] [_log()] userauth is OK
2026-04-15T18:22:27.327 [DEBUG] [Thread-23585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:22:27.328 [DEBUG] [Thread-23585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:22:27.328 [DEBUG] [Thread-23585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:22:27.328 [DEBUG] [Thread-23585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:22:27.353 [INFO] [Thread-23585] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:22:27.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:22:27.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:22:28.207 [DEBUG] [Thread-23585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:22:28.207 [DEBUG] [Thread-23585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:22:28.255 [DEBUG] [Thread-23585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:22:28.255 [DEBUG] [Thread-23585] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:22:28.264 [DEBUG] [Thread-23585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:22:28.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:22:28.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')
2026-04-15T18:22:28.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
2026-04-15T18:22:28.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:22:28.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:22:28.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:22:28.299 [DEBUG] [Thread-23585] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:22:29.301 [DEBUG] [Thread-23587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:22:44.341 [DEBUG] [Thread-23588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:22:48.797 [DEBUG] [Thread-23589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:22:58.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:22:58.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:22:58.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
2026-04-15T18:22:59.373 [DEBUG] [Thread-23590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:22:59.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 22, 21), 5.44457, 69.0216, 0.0, 15.1222, 11.6416, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:22:59.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:22:21
2026-04-15T18:23:00.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:23:00.504 [DEBUG] [Thread-23591] [transport.py] [_log()] starting thread (client mode): 0xf13c9f90
2026-04-15T18:23:00.504 [DEBUG] [Thread-23591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:23:00.524 [DEBUG] [Thread-23591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:23:00.525 [INFO] [Thread-23591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:23:00.528 [DEBUG] [Thread-23591] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:23:00.528 [DEBUG] [Thread-23591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:23:00.528 [DEBUG] [Thread-23591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:23:00.528 [DEBUG] [Thread-23591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:23:00.528 [DEBUG] [Thread-23591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:23:00.528 [DEBUG] [Thread-23591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:23:00.528 [DEBUG] [Thread-23591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:23:00.528 [DEBUG] [Thread-23591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:23:00.528 [DEBUG] [Thread-23591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:23:00.528 [DEBUG] [Thread-23591] [transport.py] [_log()] client lang: <none>
2026-04-15T18:23:00.528 [DEBUG] [Thread-23591] [transport.py] [_log()] server lang: <none>
2026-04-15T18:23:00.529 [DEBUG] [Thread-23591] [transport.py] [_log()] kex follows: False
2026-04-15T18:23:00.529 [DEBUG] [Thread-23591] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:23:00.529 [DEBUG] [Thread-23591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:23:00.529 [DEBUG] [Thread-23591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:23:00.529 [DEBUG] [Thread-23591] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:23:00.529 [DEBUG] [Thread-23591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:23:00.529 [DEBUG] [Thread-23591] [transport.py] [_log()] Compression: none
2026-04-15T18:23:00.529 [DEBUG] [Thread-23591] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:23:00.547 [DEBUG] [Thread-23591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:23:00.547 [DEBUG] [Thread-23591] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:23:00.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:23:00.548 [DEBUG] [Thread-23591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:23:00.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:23:00.549 [DEBUG] [Thread-23591] [transport.py] [_log()] userauth is OK
2026-04-15T18:23:00.549 [DEBUG] [Thread-23591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:23:00.549 [DEBUG] [Thread-23591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:23:00.549 [DEBUG] [Thread-23591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:23:00.550 [DEBUG] [Thread-23591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:23:00.584 [INFO] [Thread-23591] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:23:00.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:23:01.362 [DEBUG] [Thread-23591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:23:01.362 [DEBUG] [Thread-23591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:23:01.362 [DEBUG] [Thread-23591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:23:01.403 [DEBUG] [Thread-23591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:23:01.403 [DEBUG] [Thread-23591] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:23:01.405 [DEBUG] [Thread-23591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:23:01.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:23:01.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:23:01.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:23:01.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:23:01.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:23:01.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:23:01.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:23:01.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:23:01.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:23:01.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.682426 -999.00  +11.60  11.30     74   +7.30 1 1 1 1 1   828    0 2.51 -76.12 ----- 10.4 11.3 317.4 15.4 12.9 -25.5 12.8 -24.3 12.5 -22.1 12.8 -24.2
2026-04-15T18:23:01.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:23:01.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:23:01.429 [DEBUG] [Thread-23591] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:23:01.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.682426
2026-04-15T18:23:01.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:23:01.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:23:01.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:23:01.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:23:01.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:23:01.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:22:21', tmtdew=5.44457, humidity=69.0216, cloud=0.0, wind=15.1222, temperature=11.6416, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:22:41.606', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:23:01.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:23:01.692 [DEBUG] [Thread-23594] [transport.py] [_log()] starting thread (client mode): 0xf13ffd60
2026-04-15T18:23:01.692 [DEBUG] [Thread-23594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:23:01.706 [DEBUG] [Thread-23594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:23:01.706 [INFO] [Thread-23594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:23:01.713 [DEBUG] [Thread-23594] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:23:01.714 [DEBUG] [Thread-23594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:23:01.714 [DEBUG] [Thread-23594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:23:01.714 [DEBUG] [Thread-23594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:23:01.714 [DEBUG] [Thread-23594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:23:01.714 [DEBUG] [Thread-23594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:23:01.714 [DEBUG] [Thread-23594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:23:01.714 [DEBUG] [Thread-23594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:23:01.714 [DEBUG] [Thread-23594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:23:01.714 [DEBUG] [Thread-23594] [transport.py] [_log()] client lang: <none>
2026-04-15T18:23:01.714 [DEBUG] [Thread-23594] [transport.py] [_log()] server lang: <none>
2026-04-15T18:23:01.714 [DEBUG] [Thread-23594] [transport.py] [_log()] kex follows: False
2026-04-15T18:23:01.714 [DEBUG] [Thread-23594] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:23:01.715 [DEBUG] [Thread-23594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:23:01.715 [DEBUG] [Thread-23594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:23:01.715 [DEBUG] [Thread-23594] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:23:01.715 [DEBUG] [Thread-23594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:23:01.715 [DEBUG] [Thread-23594] [transport.py] [_log()] Compression: none
2026-04-15T18:23:01.715 [DEBUG] [Thread-23594] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:23:01.773 [DEBUG] [Thread-23594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:23:01.774 [DEBUG] [Thread-23594] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:23:01.774 [DEBUG] [Thread-23594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:23:01.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:23:01.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:23:01.829 [DEBUG] [Thread-23594] [transport.py] [_log()] userauth is OK
2026-04-15T18:23:01.830 [DEBUG] [Thread-23594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:23:01.830 [DEBUG] [Thread-23594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:23:01.830 [DEBUG] [Thread-23594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:23:01.830 [DEBUG] [Thread-23594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:23:01.856 [INFO] [Thread-23594] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:23:01.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:23:01.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:23:02.770 [DEBUG] [Thread-23594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:23:02.770 [DEBUG] [Thread-23594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:23:02.819 [DEBUG] [Thread-23594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:23:02.819 [DEBUG] [Thread-23594] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:23:02.828 [DEBUG] [Thread-23594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:23:02.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:23:02.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')
2026-04-15T18:23:02.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
2026-04-15T18:23:02.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:23:02.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:23:02.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:23:02.863 [DEBUG] [Thread-23594] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:23:14.406 [DEBUG] [Thread-23596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:23:26.889 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:23:26.890 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:23:29.450 [DEBUG] [Thread-23597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:23:32.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:23:32.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:23:32.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
2026-04-15T18:23:34.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 22, 57), 5.44171, 69.5387, 0.0, 13.4456, 11.7086, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:23:34.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:22:57
2026-04-15T18:23:34.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:23:35.071 [DEBUG] [Thread-23598] [transport.py] [_log()] starting thread (client mode): 0xf13cb100
2026-04-15T18:23:35.071 [DEBUG] [Thread-23598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:23:35.090 [DEBUG] [Thread-23598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:23:35.090 [INFO] [Thread-23598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:23:35.094 [DEBUG] [Thread-23598] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:23:35.094 [DEBUG] [Thread-23598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:23:35.094 [DEBUG] [Thread-23598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:23:35.094 [DEBUG] [Thread-23598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:23:35.094 [DEBUG] [Thread-23598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:23:35.094 [DEBUG] [Thread-23598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:23:35.094 [DEBUG] [Thread-23598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:23:35.094 [DEBUG] [Thread-23598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:23:35.094 [DEBUG] [Thread-23598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:23:35.094 [DEBUG] [Thread-23598] [transport.py] [_log()] client lang: <none>
2026-04-15T18:23:35.094 [DEBUG] [Thread-23598] [transport.py] [_log()] server lang: <none>
2026-04-15T18:23:35.094 [DEBUG] [Thread-23598] [transport.py] [_log()] kex follows: False
2026-04-15T18:23:35.094 [DEBUG] [Thread-23598] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:23:35.095 [DEBUG] [Thread-23598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:23:35.095 [DEBUG] [Thread-23598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:23:35.095 [DEBUG] [Thread-23598] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:23:35.095 [DEBUG] [Thread-23598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:23:35.095 [DEBUG] [Thread-23598] [transport.py] [_log()] Compression: none
2026-04-15T18:23:35.095 [DEBUG] [Thread-23598] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:23:35.109 [DEBUG] [Thread-23598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:23:35.110 [DEBUG] [Thread-23598] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:23:35.110 [DEBUG] [Thread-23598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:23:35.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:23:35.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:23:35.111 [DEBUG] [Thread-23598] [transport.py] [_log()] userauth is OK
2026-04-15T18:23:35.112 [DEBUG] [Thread-23598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:23:35.112 [DEBUG] [Thread-23598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:23:35.112 [DEBUG] [Thread-23598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:23:35.112 [DEBUG] [Thread-23598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:23:35.129 [INFO] [Thread-23598] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:23:35.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:23:35.874 [DEBUG] [Thread-23598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:23:35.874 [DEBUG] [Thread-23598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:23:35.875 [DEBUG] [Thread-23598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:23:35.915 [DEBUG] [Thread-23598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:23:35.915 [DEBUG] [Thread-23598] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:23:35.918 [DEBUG] [Thread-23598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:23:35.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:23:35.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:23:35.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:23:35.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:23:35.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:23:35.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:23:35.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:23:35.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:23:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:23:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.682773 -999.00  +11.60   8.17     74   +7.30 1 1 1 1 1   822    0 2.41 -79.00 ----- 7.6 8.2 312.0 11.8 12.9 -25.5 12.8 -24.1 12.5 -22.2 12.8 -24.0
2026-04-15T18:23:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:23:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:23:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.682773
2026-04-15T18:23:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:23:35.944 [DEBUG] [Thread-23598] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:23:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:23:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:23:35.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:23:35.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:23:35.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:22:57', tmtdew=5.44171, humidity=69.5387, cloud=0.0, wind=13.4456, temperature=11.7086, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:23:11.587', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:23:36.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:23:36.197 [DEBUG] [Thread-23601] [transport.py] [_log()] starting thread (client mode): 0xf13ffd00
2026-04-15T18:23:36.197 [DEBUG] [Thread-23601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:23:36.211 [DEBUG] [Thread-23601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:23:36.212 [INFO] [Thread-23601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:23:36.219 [DEBUG] [Thread-23601] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:23:36.220 [DEBUG] [Thread-23601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:23:36.220 [DEBUG] [Thread-23601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:23:36.220 [DEBUG] [Thread-23601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:23:36.220 [DEBUG] [Thread-23601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:23:36.220 [DEBUG] [Thread-23601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:23:36.220 [DEBUG] [Thread-23601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:23:36.220 [DEBUG] [Thread-23601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:23:36.220 [DEBUG] [Thread-23601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:23:36.220 [DEBUG] [Thread-23601] [transport.py] [_log()] client lang: <none>
2026-04-15T18:23:36.220 [DEBUG] [Thread-23601] [transport.py] [_log()] server lang: <none>
2026-04-15T18:23:36.220 [DEBUG] [Thread-23601] [transport.py] [_log()] kex follows: False
2026-04-15T18:23:36.220 [DEBUG] [Thread-23601] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:23:36.221 [DEBUG] [Thread-23601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:23:36.221 [DEBUG] [Thread-23601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:23:36.221 [DEBUG] [Thread-23601] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:23:36.221 [DEBUG] [Thread-23601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:23:36.221 [DEBUG] [Thread-23601] [transport.py] [_log()] Compression: none
2026-04-15T18:23:36.221 [DEBUG] [Thread-23601] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:23:36.275 [DEBUG] [Thread-23601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:23:36.275 [DEBUG] [Thread-23601] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:23:36.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:23:36.276 [DEBUG] [Thread-23601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:23:36.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:23:36.332 [DEBUG] [Thread-23601] [transport.py] [_log()] userauth is OK
2026-04-15T18:23:36.332 [DEBUG] [Thread-23601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:23:36.332 [DEBUG] [Thread-23601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:23:36.333 [DEBUG] [Thread-23601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:23:36.333 [DEBUG] [Thread-23601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:23:36.354 [INFO] [Thread-23601] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:23:36.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:23:36.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:23:37.155 [DEBUG] [Thread-23601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:23:37.155 [DEBUG] [Thread-23601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:23:37.203 [DEBUG] [Thread-23601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:23:37.203 [DEBUG] [Thread-23601] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:23:37.212 [DEBUG] [Thread-23601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:23:37.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:23:37.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')
2026-04-15T18:23:37.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
2026-04-15T18:23:37.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:23:37.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:23:37.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:23:37.247 [DEBUG] [Thread-23601] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:23:44.482 [DEBUG] [Thread-23603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:23:48.948 [DEBUG] [Thread-23604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:23:59.525 [DEBUG] [Thread-23605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:24:07.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:24:07.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:24:07.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
2026-04-15T18:24:08.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 23, 33), 5.50015, 68.9779, 0.0, 16.5499, 11.9177, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:24:08.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:23:33
2026-04-15T18:24:08.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:24:09.416 [DEBUG] [Thread-23606] [transport.py] [_log()] starting thread (client mode): 0xf13534f0
2026-04-15T18:24:09.416 [DEBUG] [Thread-23606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:24:09.435 [DEBUG] [Thread-23606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:24:09.435 [INFO] [Thread-23606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:24:09.438 [DEBUG] [Thread-23606] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:24:09.438 [DEBUG] [Thread-23606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:24:09.439 [DEBUG] [Thread-23606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:24:09.439 [DEBUG] [Thread-23606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:24:09.439 [DEBUG] [Thread-23606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:24:09.439 [DEBUG] [Thread-23606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:24:09.439 [DEBUG] [Thread-23606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:24:09.439 [DEBUG] [Thread-23606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:24:09.439 [DEBUG] [Thread-23606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:24:09.439 [DEBUG] [Thread-23606] [transport.py] [_log()] client lang: <none>
2026-04-15T18:24:09.439 [DEBUG] [Thread-23606] [transport.py] [_log()] server lang: <none>
2026-04-15T18:24:09.439 [DEBUG] [Thread-23606] [transport.py] [_log()] kex follows: False
2026-04-15T18:24:09.440 [DEBUG] [Thread-23606] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:24:09.440 [DEBUG] [Thread-23606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:24:09.440 [DEBUG] [Thread-23606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:24:09.440 [DEBUG] [Thread-23606] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:24:09.440 [DEBUG] [Thread-23606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:24:09.440 [DEBUG] [Thread-23606] [transport.py] [_log()] Compression: none
2026-04-15T18:24:09.440 [DEBUG] [Thread-23606] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:24:09.457 [DEBUG] [Thread-23606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:24:09.457 [DEBUG] [Thread-23606] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:24:09.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:24:09.458 [DEBUG] [Thread-23606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:24:09.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:24:09.460 [DEBUG] [Thread-23606] [transport.py] [_log()] userauth is OK
2026-04-15T18:24:09.460 [DEBUG] [Thread-23606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:24:09.460 [DEBUG] [Thread-23606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:24:09.460 [DEBUG] [Thread-23606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:24:09.460 [DEBUG] [Thread-23606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:24:09.480 [INFO] [Thread-23606] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:24:09.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:24:10.295 [DEBUG] [Thread-23606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:24:10.295 [DEBUG] [Thread-23606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:24:10.296 [DEBUG] [Thread-23606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:24:10.336 [DEBUG] [Thread-23606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:24:10.336 [DEBUG] [Thread-23606] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:24:10.339 [DEBUG] [Thread-23606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:24:10.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:24:10.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:24:10.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:24:10.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:24:10.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:24:10.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:24:10.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:24:10.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:24:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:24:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.683120 -999.00  +11.60  11.02     74   +7.30 1 1 1 1 1   815    0 2.53 -78.52 ----- 12.8 11.0 312.8 16.0 12.9 -25.5 12.8 -24.3 12.4 -22.0 12.8 -24.2
2026-04-15T18:24:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:24:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:24:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.683120
2026-04-15T18:24:10.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:24:10.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:24:10.363 [DEBUG] [Thread-23606] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:24:10.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:24:10.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:24:10.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:24:10.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:23:33', tmtdew=5.50015, humidity=68.9779, cloud=0.0, wind=16.5499, temperature=11.9177, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:23:41.568', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:24:10.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:24:10.624 [DEBUG] [Thread-23609] [transport.py] [_log()] starting thread (client mode): 0xf1350be0
2026-04-15T18:24:10.624 [DEBUG] [Thread-23609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:24:10.638 [DEBUG] [Thread-23609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:24:10.638 [INFO] [Thread-23609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:24:10.645 [DEBUG] [Thread-23609] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:24:10.645 [DEBUG] [Thread-23609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:24:10.646 [DEBUG] [Thread-23609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:24:10.646 [DEBUG] [Thread-23609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:24:10.646 [DEBUG] [Thread-23609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:24:10.646 [DEBUG] [Thread-23609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:24:10.646 [DEBUG] [Thread-23609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:24:10.646 [DEBUG] [Thread-23609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:24:10.646 [DEBUG] [Thread-23609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:24:10.646 [DEBUG] [Thread-23609] [transport.py] [_log()] client lang: <none>
2026-04-15T18:24:10.646 [DEBUG] [Thread-23609] [transport.py] [_log()] server lang: <none>
2026-04-15T18:24:10.646 [DEBUG] [Thread-23609] [transport.py] [_log()] kex follows: False
2026-04-15T18:24:10.646 [DEBUG] [Thread-23609] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:24:10.647 [DEBUG] [Thread-23609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:24:10.647 [DEBUG] [Thread-23609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:24:10.647 [DEBUG] [Thread-23609] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:24:10.647 [DEBUG] [Thread-23609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:24:10.647 [DEBUG] [Thread-23609] [transport.py] [_log()] Compression: none
2026-04-15T18:24:10.647 [DEBUG] [Thread-23609] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:24:10.703 [DEBUG] [Thread-23609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:24:10.703 [DEBUG] [Thread-23609] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:24:10.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:24:10.704 [DEBUG] [Thread-23609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:24:10.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:24:10.760 [DEBUG] [Thread-23609] [transport.py] [_log()] userauth is OK
2026-04-15T18:24:10.760 [DEBUG] [Thread-23609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:24:10.760 [DEBUG] [Thread-23609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:24:10.760 [DEBUG] [Thread-23609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:24:10.760 [DEBUG] [Thread-23609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:24:10.787 [INFO] [Thread-23609] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:24:10.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:24:10.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:24:11.603 [DEBUG] [Thread-23609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:24:11.603 [DEBUG] [Thread-23609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:24:11.651 [DEBUG] [Thread-23609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:24:11.651 [DEBUG] [Thread-23609] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:24:11.660 [DEBUG] [Thread-23609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:24:11.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:24:11.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')
2026-04-15T18:24:11.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
2026-04-15T18:24:11.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:24:11.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:24:11.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:24:11.703 [DEBUG] [Thread-23609] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:24:14.556 [DEBUG] [Thread-23611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:24:29.599 [DEBUG] [Thread-23612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:24:31.640 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:24:31.641 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:24:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:24:41.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:24:41.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T18:24:42.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 24, 8), 5.4319, 69.5722, 0.0, 13.0928, 11.5926, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:24:42.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:24:08
2026-04-15T18:24:43.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:24:43.888 [DEBUG] [Thread-23613] [transport.py] [_log()] starting thread (client mode): 0xee907910
2026-04-15T18:24:43.888 [DEBUG] [Thread-23613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:24:43.909 [DEBUG] [Thread-23613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:24:43.909 [INFO] [Thread-23613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:24:43.912 [DEBUG] [Thread-23613] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:24:43.912 [DEBUG] [Thread-23613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:24:43.912 [DEBUG] [Thread-23613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:24:43.912 [DEBUG] [Thread-23613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:24:43.912 [DEBUG] [Thread-23613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:24:43.913 [DEBUG] [Thread-23613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:24:43.913 [DEBUG] [Thread-23613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:24:43.913 [DEBUG] [Thread-23613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:24:43.913 [DEBUG] [Thread-23613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:24:43.913 [DEBUG] [Thread-23613] [transport.py] [_log()] client lang: <none>
2026-04-15T18:24:43.913 [DEBUG] [Thread-23613] [transport.py] [_log()] server lang: <none>
2026-04-15T18:24:43.913 [DEBUG] [Thread-23613] [transport.py] [_log()] kex follows: False
2026-04-15T18:24:43.913 [DEBUG] [Thread-23613] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:24:43.913 [DEBUG] [Thread-23613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:24:43.913 [DEBUG] [Thread-23613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:24:43.913 [DEBUG] [Thread-23613] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:24:43.913 [DEBUG] [Thread-23613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:24:43.914 [DEBUG] [Thread-23613] [transport.py] [_log()] Compression: none
2026-04-15T18:24:43.914 [DEBUG] [Thread-23613] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:24:43.930 [DEBUG] [Thread-23613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:24:43.930 [DEBUG] [Thread-23613] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:24:43.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:24:43.931 [DEBUG] [Thread-23613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:24:43.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:24:43.932 [DEBUG] [Thread-23613] [transport.py] [_log()] userauth is OK
2026-04-15T18:24:43.932 [DEBUG] [Thread-23613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:24:43.932 [DEBUG] [Thread-23613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:24:43.932 [DEBUG] [Thread-23613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:24:43.932 [DEBUG] [Thread-23613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:24:43.967 [INFO] [Thread-23613] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:24:43.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:24:44.630 [DEBUG] [Thread-23615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:24:44.770 [DEBUG] [Thread-23613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:24:44.771 [DEBUG] [Thread-23613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:24:44.771 [DEBUG] [Thread-23613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:24:44.811 [DEBUG] [Thread-23613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:24:44.811 [DEBUG] [Thread-23613] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:24:44.814 [DEBUG] [Thread-23613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:24:44.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:24:44.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:24:44.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:24:44.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:24:44.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:24:44.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:24:44.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:24:44.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:24:44.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:24:44.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.683467 -999.00  +11.60  11.15     75   +7.30 1 1 1 1 1   808    0 2.25 -84.97 ----- 12.6 11.2 307.6 14.2 12.8 -25.4 12.8 -24.2 12.4 -22.2 12.8 -24.0
2026-04-15T18:24:44.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:24:44.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:24:44.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.683467
2026-04-15T18:24:44.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:24:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:24:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:24:44.839 [DEBUG] [Thread-23613] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:24:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:24:44.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:24:44.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:24:08', tmtdew=5.4319, humidity=69.5722, cloud=0.0, wind=13.0928, temperature=11.5926, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:24:11.549', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:24:45.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:24:45.102 [DEBUG] [Thread-23617] [transport.py] [_log()] starting thread (client mode): 0xf13e0ca0
2026-04-15T18:24:45.102 [DEBUG] [Thread-23617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:24:45.117 [DEBUG] [Thread-23617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:24:45.117 [INFO] [Thread-23617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:24:45.124 [DEBUG] [Thread-23617] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:24:45.124 [DEBUG] [Thread-23617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:24:45.124 [DEBUG] [Thread-23617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:24:45.125 [DEBUG] [Thread-23617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:24:45.125 [DEBUG] [Thread-23617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:24:45.125 [DEBUG] [Thread-23617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:24:45.125 [DEBUG] [Thread-23617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:24:45.125 [DEBUG] [Thread-23617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:24:45.125 [DEBUG] [Thread-23617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:24:45.125 [DEBUG] [Thread-23617] [transport.py] [_log()] client lang: <none>
2026-04-15T18:24:45.125 [DEBUG] [Thread-23617] [transport.py] [_log()] server lang: <none>
2026-04-15T18:24:45.125 [DEBUG] [Thread-23617] [transport.py] [_log()] kex follows: False
2026-04-15T18:24:45.125 [DEBUG] [Thread-23617] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:24:45.125 [DEBUG] [Thread-23617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:24:45.125 [DEBUG] [Thread-23617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:24:45.126 [DEBUG] [Thread-23617] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:24:45.126 [DEBUG] [Thread-23617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:24:45.126 [DEBUG] [Thread-23617] [transport.py] [_log()] Compression: none
2026-04-15T18:24:45.126 [DEBUG] [Thread-23617] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:24:45.185 [DEBUG] [Thread-23617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:24:45.186 [DEBUG] [Thread-23617] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:24:45.186 [DEBUG] [Thread-23617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:24:45.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:24:45.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:24:45.242 [DEBUG] [Thread-23617] [transport.py] [_log()] userauth is OK
2026-04-15T18:24:45.243 [DEBUG] [Thread-23617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:24:45.243 [DEBUG] [Thread-23617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:24:45.243 [DEBUG] [Thread-23617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:24:45.243 [DEBUG] [Thread-23617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:24:45.268 [INFO] [Thread-23617] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:24:45.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:24:45.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:24:46.106 [DEBUG] [Thread-23617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:24:46.106 [DEBUG] [Thread-23617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:24:46.154 [DEBUG] [Thread-23617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:24:46.154 [DEBUG] [Thread-23617] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:24:46.163 [DEBUG] [Thread-23617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:24:46.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:24:46.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')
2026-04-15T18:24:46.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') -> 00000000
2026-04-15T18:24:46.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:24:46.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:24:46.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:24:46.199 [DEBUG] [Thread-23617] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:24:49.097 [DEBUG] [Thread-23619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:24:59.661 [DEBUG] [Thread-23620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:25:14.705 [DEBUG] [Thread-23621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:25:16.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:25:16.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:25: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
2026-04-15T18:25:17.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 24, 44), 5.4179, 69.3764, 0.0, 13.3747, 11.9515, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:25:17.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:24:44
2026-04-15T18:25:17.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:25:18.364 [DEBUG] [Thread-23622] [transport.py] [_log()] starting thread (client mode): 0xee906590
2026-04-15T18:25:18.365 [DEBUG] [Thread-23622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:25:18.384 [DEBUG] [Thread-23622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:25:18.384 [INFO] [Thread-23622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:25:18.386 [DEBUG] [Thread-23622] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:25:18.386 [DEBUG] [Thread-23622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:25:18.386 [DEBUG] [Thread-23622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:25:18.386 [DEBUG] [Thread-23622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:25:18.386 [DEBUG] [Thread-23622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:25:18.386 [DEBUG] [Thread-23622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:25:18.386 [DEBUG] [Thread-23622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:25:18.386 [DEBUG] [Thread-23622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:25:18.386 [DEBUG] [Thread-23622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:25:18.386 [DEBUG] [Thread-23622] [transport.py] [_log()] client lang: <none>
2026-04-15T18:25:18.387 [DEBUG] [Thread-23622] [transport.py] [_log()] server lang: <none>
2026-04-15T18:25:18.387 [DEBUG] [Thread-23622] [transport.py] [_log()] kex follows: False
2026-04-15T18:25:18.387 [DEBUG] [Thread-23622] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:25:18.387 [DEBUG] [Thread-23622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:25:18.387 [DEBUG] [Thread-23622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:25:18.387 [DEBUG] [Thread-23622] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:25:18.387 [DEBUG] [Thread-23622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:25:18.387 [DEBUG] [Thread-23622] [transport.py] [_log()] Compression: none
2026-04-15T18:25:18.387 [DEBUG] [Thread-23622] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:25:18.395 [DEBUG] [Thread-23622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:25:18.395 [DEBUG] [Thread-23622] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:25:18.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:25:18.396 [DEBUG] [Thread-23622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:25:18.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:25:18.397 [DEBUG] [Thread-23622] [transport.py] [_log()] userauth is OK
2026-04-15T18:25:18.397 [DEBUG] [Thread-23622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:25:18.397 [DEBUG] [Thread-23622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:25:18.398 [DEBUG] [Thread-23622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:25:18.398 [DEBUG] [Thread-23622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:25:18.433 [INFO] [Thread-23622] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:25:18.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:25:22.013 [DEBUG] [Thread-23622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:25:22.013 [DEBUG] [Thread-23622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:25:22.014 [DEBUG] [Thread-23622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:25:22.054 [DEBUG] [Thread-23622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:25:22.054 [DEBUG] [Thread-23622] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:25:22.057 [DEBUG] [Thread-23622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:25:22.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:25:22.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:25:22.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:25:22.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:25:22.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:25:22.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:25:22.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:25:22.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:25:22.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:25:22.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.683814 -999.00  +11.60  14.73     74   +7.30 1 1 1 1 1   800    0 2.15 -91.35 ----- 13.4 14.7 301.2 16.7 12.9 -25.5 12.8 -24.2 12.4 -22.0 12.7 -24.3
2026-04-15T18:25:22.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:25:22.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:25:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.683814
2026-04-15T18:25:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:25:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:25:22.094 [DEBUG] [Thread-23622] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:25:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:25:22.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:25:22.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:25:22.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:24:44', tmtdew=5.4179, humidity=69.3764, cloud=0.0, wind=13.3747, temperature=11.9515, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:24:41.530', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:25:22.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:25:22.352 [DEBUG] [Thread-23625] [transport.py] [_log()] starting thread (client mode): 0xee907ca0
2026-04-15T18:25:22.352 [DEBUG] [Thread-23625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:25:22.367 [DEBUG] [Thread-23625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:25:22.367 [INFO] [Thread-23625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:25:22.374 [DEBUG] [Thread-23625] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:25:22.374 [DEBUG] [Thread-23625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:25:22.374 [DEBUG] [Thread-23625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:25:22.375 [DEBUG] [Thread-23625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:25:22.375 [DEBUG] [Thread-23625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:25:22.375 [DEBUG] [Thread-23625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:25:22.375 [DEBUG] [Thread-23625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:25:22.375 [DEBUG] [Thread-23625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:25:22.375 [DEBUG] [Thread-23625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:25:22.375 [DEBUG] [Thread-23625] [transport.py] [_log()] client lang: <none>
2026-04-15T18:25:22.375 [DEBUG] [Thread-23625] [transport.py] [_log()] server lang: <none>
2026-04-15T18:25:22.375 [DEBUG] [Thread-23625] [transport.py] [_log()] kex follows: False
2026-04-15T18:25:22.375 [DEBUG] [Thread-23625] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:25:22.375 [DEBUG] [Thread-23625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:25:22.375 [DEBUG] [Thread-23625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:25:22.376 [DEBUG] [Thread-23625] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:25:22.376 [DEBUG] [Thread-23625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:25:22.376 [DEBUG] [Thread-23625] [transport.py] [_log()] Compression: none
2026-04-15T18:25:22.376 [DEBUG] [Thread-23625] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:25:22.432 [DEBUG] [Thread-23625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:25:22.433 [DEBUG] [Thread-23625] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:25:22.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:25:22.433 [DEBUG] [Thread-23625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:25:22.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:25:22.489 [DEBUG] [Thread-23625] [transport.py] [_log()] userauth is OK
2026-04-15T18:25:22.489 [DEBUG] [Thread-23625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:25:22.490 [DEBUG] [Thread-23625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:25:22.490 [DEBUG] [Thread-23625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:25:22.490 [DEBUG] [Thread-23625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:25:22.517 [INFO] [Thread-23625] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:25:22.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:25:22.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:25:23.333 [DEBUG] [Thread-23625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:25:23.333 [DEBUG] [Thread-23625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:25:23.381 [DEBUG] [Thread-23625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:25:23.381 [DEBUG] [Thread-23625] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:25:23.390 [DEBUG] [Thread-23625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:25:23.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:25:23.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')
2026-04-15T18:25:23.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
2026-04-15T18:25:23.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:25:23.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:25:23.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:25:23.424 [DEBUG] [Thread-23625] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:25:29.736 [DEBUG] [Thread-23627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:25:36.262 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:25:36.263 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:25:44.779 [DEBUG] [Thread-23628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:25:49.254 [DEBUG] [Thread-23629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:25:53.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:25:53.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:25:53.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
2026-04-15T18:25:54.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 25, 19), 5.33464, 69.8045, 0.0, 13.8161, 11.626, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:25:54.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:25:19
2026-04-15T18:25:55.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:25:55.599 [DEBUG] [Thread-23630] [transport.py] [_log()] starting thread (client mode): 0xf1335870
2026-04-15T18:25:55.599 [DEBUG] [Thread-23630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:25:55.620 [DEBUG] [Thread-23630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:25:55.620 [INFO] [Thread-23630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:25:55.623 [DEBUG] [Thread-23630] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:25:55.623 [DEBUG] [Thread-23630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:25:55.623 [DEBUG] [Thread-23630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:25:55.624 [DEBUG] [Thread-23630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:25:55.624 [DEBUG] [Thread-23630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:25:55.624 [DEBUG] [Thread-23630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:25:55.624 [DEBUG] [Thread-23630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:25:55.624 [DEBUG] [Thread-23630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:25:55.624 [DEBUG] [Thread-23630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:25:55.624 [DEBUG] [Thread-23630] [transport.py] [_log()] client lang: <none>
2026-04-15T18:25:55.624 [DEBUG] [Thread-23630] [transport.py] [_log()] server lang: <none>
2026-04-15T18:25:55.624 [DEBUG] [Thread-23630] [transport.py] [_log()] kex follows: False
2026-04-15T18:25:55.624 [DEBUG] [Thread-23630] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:25:55.624 [DEBUG] [Thread-23630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:25:55.624 [DEBUG] [Thread-23630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:25:55.624 [DEBUG] [Thread-23630] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:25:55.625 [DEBUG] [Thread-23630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:25:55.625 [DEBUG] [Thread-23630] [transport.py] [_log()] Compression: none
2026-04-15T18:25:55.625 [DEBUG] [Thread-23630] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:25:55.643 [DEBUG] [Thread-23630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:25:55.644 [DEBUG] [Thread-23630] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:25:55.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:25:55.644 [DEBUG] [Thread-23630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:25:55.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:25:55.645 [DEBUG] [Thread-23630] [transport.py] [_log()] userauth is OK
2026-04-15T18:25:55.646 [DEBUG] [Thread-23630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:25:55.646 [DEBUG] [Thread-23630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:25:55.646 [DEBUG] [Thread-23630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:25:55.646 [DEBUG] [Thread-23630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:25:55.671 [INFO] [Thread-23630] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:25:55.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:25:56.476 [DEBUG] [Thread-23630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:25:56.476 [DEBUG] [Thread-23630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:25:56.476 [DEBUG] [Thread-23630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:25:56.517 [DEBUG] [Thread-23630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:25:56.517 [DEBUG] [Thread-23630] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:25:56.520 [DEBUG] [Thread-23630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:25:56.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:25:56.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:25:56.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:25:56.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:25:56.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:25:56.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:25:56.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:25:56.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:25:56.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:25:56.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.684162 -999.00  +11.60  13.33     75   +7.30 1 1 1 1 1   791    0 2.34 -80.76 ----- 14.3 13.3 308.6 15.2 12.8 -25.3 12.7 -24.2 12.4 -22.0 12.7 -24.2
2026-04-15T18:25:56.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:25:56.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:25:56.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.684162
2026-04-15T18:25:56.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:25:56.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:25:56.542 [DEBUG] [Thread-23630] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:25:56.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:25:56.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:25:56.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:25:56.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:25:19', tmtdew=5.33464, humidity=69.8045, cloud=0.0, wind=13.8161, temperature=11.626, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:25:11.597', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:25:56.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:25:56.785 [DEBUG] [Thread-23633] [transport.py] [_log()] starting thread (client mode): 0xf1364310
2026-04-15T18:25:56.785 [DEBUG] [Thread-23633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:25:56.802 [DEBUG] [Thread-23633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:25:56.802 [INFO] [Thread-23633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:25:56.810 [DEBUG] [Thread-23633] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:25:56.810 [DEBUG] [Thread-23633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:25:56.810 [DEBUG] [Thread-23633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:25:56.810 [DEBUG] [Thread-23633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:25:56.810 [DEBUG] [Thread-23633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:25:56.810 [DEBUG] [Thread-23633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:25:56.810 [DEBUG] [Thread-23633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:25:56.810 [DEBUG] [Thread-23633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:25:56.810 [DEBUG] [Thread-23633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:25:56.810 [DEBUG] [Thread-23633] [transport.py] [_log()] client lang: <none>
2026-04-15T18:25:56.811 [DEBUG] [Thread-23633] [transport.py] [_log()] server lang: <none>
2026-04-15T18:25:56.811 [DEBUG] [Thread-23633] [transport.py] [_log()] kex follows: False
2026-04-15T18:25:56.811 [DEBUG] [Thread-23633] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:25:56.811 [DEBUG] [Thread-23633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:25:56.811 [DEBUG] [Thread-23633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:25:56.811 [DEBUG] [Thread-23633] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:25:56.811 [DEBUG] [Thread-23633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:25:56.811 [DEBUG] [Thread-23633] [transport.py] [_log()] Compression: none
2026-04-15T18:25:56.811 [DEBUG] [Thread-23633] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:25:56.868 [DEBUG] [Thread-23633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:25:56.868 [DEBUG] [Thread-23633] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:25:56.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:25:56.869 [DEBUG] [Thread-23633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:25:56.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:25:56.925 [DEBUG] [Thread-23633] [transport.py] [_log()] userauth is OK
2026-04-15T18:25:56.925 [DEBUG] [Thread-23633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:25:56.925 [DEBUG] [Thread-23633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:25:56.925 [DEBUG] [Thread-23633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:25:56.926 [DEBUG] [Thread-23633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:25:56.951 [INFO] [Thread-23633] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:25:56.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:25:56.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:25:57.790 [DEBUG] [Thread-23633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:25:57.790 [DEBUG] [Thread-23633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:25:57.838 [DEBUG] [Thread-23633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:25:57.838 [DEBUG] [Thread-23633] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:25:57.847 [DEBUG] [Thread-23633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:25:57.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:25:57.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')
2026-04-15T18:25:57.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') -> 00000000
2026-04-15T18:25:57.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:25:57.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:25:57.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:25:57.882 [DEBUG] [Thread-23633] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:25:59.811 [DEBUG] [Thread-23635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:26:14.856 [DEBUG] [Thread-23636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:26:27.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:26:27.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:26:27.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
2026-04-15T18:26:29.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 25, 55), 5.33124, 69.8045, 0.0, 15.3162, 11.5431, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:26:29.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:25:55
2026-04-15T18:26:29.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:26:29.886 [DEBUG] [Thread-23637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:26:30.010 [DEBUG] [Thread-23638] [transport.py] [_log()] starting thread (client mode): 0xee907580
2026-04-15T18:26:30.010 [DEBUG] [Thread-23638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:26:30.028 [DEBUG] [Thread-23638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:26:30.028 [INFO] [Thread-23638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:26:30.031 [DEBUG] [Thread-23638] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:26:30.031 [DEBUG] [Thread-23638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:26:30.031 [DEBUG] [Thread-23638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:26:30.031 [DEBUG] [Thread-23638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:26:30.031 [DEBUG] [Thread-23638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:26:30.031 [DEBUG] [Thread-23638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:26:30.031 [DEBUG] [Thread-23638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:26:30.032 [DEBUG] [Thread-23638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:26:30.032 [DEBUG] [Thread-23638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:26:30.032 [DEBUG] [Thread-23638] [transport.py] [_log()] client lang: <none>
2026-04-15T18:26:30.032 [DEBUG] [Thread-23638] [transport.py] [_log()] server lang: <none>
2026-04-15T18:26:30.032 [DEBUG] [Thread-23638] [transport.py] [_log()] kex follows: False
2026-04-15T18:26:30.032 [DEBUG] [Thread-23638] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:26:30.032 [DEBUG] [Thread-23638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:26:30.032 [DEBUG] [Thread-23638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:26:30.032 [DEBUG] [Thread-23638] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:26:30.032 [DEBUG] [Thread-23638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:26:30.032 [DEBUG] [Thread-23638] [transport.py] [_log()] Compression: none
2026-04-15T18:26:30.032 [DEBUG] [Thread-23638] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:26:30.049 [DEBUG] [Thread-23638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:26:30.050 [DEBUG] [Thread-23638] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:26:30.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:26:30.050 [DEBUG] [Thread-23638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:26:30.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:26:30.051 [DEBUG] [Thread-23638] [transport.py] [_log()] userauth is OK
2026-04-15T18:26:30.051 [DEBUG] [Thread-23638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:26:30.051 [DEBUG] [Thread-23638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:26:30.052 [DEBUG] [Thread-23638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:26:30.052 [DEBUG] [Thread-23638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:26:30.070 [INFO] [Thread-23638] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:26:30.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:26:30.862 [DEBUG] [Thread-23638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:26:30.863 [DEBUG] [Thread-23638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:26:30.863 [DEBUG] [Thread-23638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:26:30.903 [DEBUG] [Thread-23638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:26:30.903 [DEBUG] [Thread-23638] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:26:30.906 [DEBUG] [Thread-23638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:26:30.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:26:30.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:26:30.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:26:30.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:26:30.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:26:30.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:26:30.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:26:30.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:26:30.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:26:30.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.684509 -999.00  +11.50  13.90     75   +7.30 1 1 1 1 1   782    0 2.14 -88.41 ----- 13.0 13.9 304.2 15.8 12.8 -25.5 12.7 -24.1 12.3 -22.1 12.7 -24.0
2026-04-15T18:26:30.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:26:30.931 [DEBUG] [Thread-23638] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:26:30.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:26:30.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.684509
2026-04-15T18:26:30.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:26:30.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:26:30.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:26:30.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:26:30.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:26:30.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:25:55', tmtdew=5.33124, humidity=69.8045, cloud=0.0, wind=15.3162, temperature=11.5431, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:25:41.578', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:26:31.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:26:31.195 [DEBUG] [Thread-23641] [transport.py] [_log()] starting thread (client mode): 0xee906ce0
2026-04-15T18:26:31.195 [DEBUG] [Thread-23641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:26:31.210 [DEBUG] [Thread-23641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:26:31.210 [INFO] [Thread-23641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:26:31.217 [DEBUG] [Thread-23641] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:26:31.218 [DEBUG] [Thread-23641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:26:31.218 [DEBUG] [Thread-23641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:26:31.218 [DEBUG] [Thread-23641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:26:31.218 [DEBUG] [Thread-23641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:26:31.218 [DEBUG] [Thread-23641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:26:31.218 [DEBUG] [Thread-23641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:26:31.218 [DEBUG] [Thread-23641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:26:31.218 [DEBUG] [Thread-23641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:26:31.218 [DEBUG] [Thread-23641] [transport.py] [_log()] client lang: <none>
2026-04-15T18:26:31.218 [DEBUG] [Thread-23641] [transport.py] [_log()] server lang: <none>
2026-04-15T18:26:31.218 [DEBUG] [Thread-23641] [transport.py] [_log()] kex follows: False
2026-04-15T18:26:31.219 [DEBUG] [Thread-23641] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:26:31.219 [DEBUG] [Thread-23641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:26:31.219 [DEBUG] [Thread-23641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:26:31.219 [DEBUG] [Thread-23641] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:26:31.219 [DEBUG] [Thread-23641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:26:31.219 [DEBUG] [Thread-23641] [transport.py] [_log()] Compression: none
2026-04-15T18:26:31.219 [DEBUG] [Thread-23641] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:26:31.275 [DEBUG] [Thread-23641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:26:31.275 [DEBUG] [Thread-23641] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:26:31.276 [DEBUG] [Thread-23641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:26:31.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:26:31.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:26:31.331 [DEBUG] [Thread-23641] [transport.py] [_log()] userauth is OK
2026-04-15T18:26:31.332 [DEBUG] [Thread-23641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:26:31.332 [DEBUG] [Thread-23641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:26:31.332 [DEBUG] [Thread-23641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:26:31.332 [DEBUG] [Thread-23641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:26:31.357 [INFO] [Thread-23641] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:26:31.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:26:31.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:26:32.158 [DEBUG] [Thread-23641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:26:32.159 [DEBUG] [Thread-23641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:26:32.207 [DEBUG] [Thread-23641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:26:32.207 [DEBUG] [Thread-23641] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:26:32.216 [DEBUG] [Thread-23641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:26:32.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:26:32.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')
2026-04-15T18:26:32.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
2026-04-15T18:26:32.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:26:32.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:26:32.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:26:32.250 [DEBUG] [Thread-23641] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:26:42.186 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:26:42.187 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:26:44.916 [DEBUG] [Thread-23643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:26:49.418 [DEBUG] [Thread-23644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:26:59.958 [DEBUG] [Thread-23645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:27:02.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:27:02.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:27:02.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
2026-04-15T18:27:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 26, 30), 5.30839, 69.9207, 0.0, 14.5753, 11.5765, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:27:03.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:26:30
2026-04-15T18:27:04.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:27:04.477 [DEBUG] [Thread-23646] [transport.py] [_log()] starting thread (client mode): 0xee9bcdf0
2026-04-15T18:27:04.477 [DEBUG] [Thread-23646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:27:04.498 [DEBUG] [Thread-23646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:27:04.498 [INFO] [Thread-23646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:27:04.501 [DEBUG] [Thread-23646] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:27:04.501 [DEBUG] [Thread-23646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:27:04.501 [DEBUG] [Thread-23646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:27:04.501 [DEBUG] [Thread-23646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:27:04.501 [DEBUG] [Thread-23646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:27:04.501 [DEBUG] [Thread-23646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:27:04.501 [DEBUG] [Thread-23646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:27:04.501 [DEBUG] [Thread-23646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:27:04.502 [DEBUG] [Thread-23646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:27:04.502 [DEBUG] [Thread-23646] [transport.py] [_log()] client lang: <none>
2026-04-15T18:27:04.502 [DEBUG] [Thread-23646] [transport.py] [_log()] server lang: <none>
2026-04-15T18:27:04.502 [DEBUG] [Thread-23646] [transport.py] [_log()] kex follows: False
2026-04-15T18:27:04.502 [DEBUG] [Thread-23646] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:27:04.502 [DEBUG] [Thread-23646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:27:04.502 [DEBUG] [Thread-23646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:27:04.502 [DEBUG] [Thread-23646] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:27:04.502 [DEBUG] [Thread-23646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:27:04.502 [DEBUG] [Thread-23646] [transport.py] [_log()] Compression: none
2026-04-15T18:27:04.503 [DEBUG] [Thread-23646] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:27:04.519 [DEBUG] [Thread-23646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:27:04.520 [DEBUG] [Thread-23646] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:27:04.520 [DEBUG] [Thread-23646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:27:04.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:27:04.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:27:04.521 [DEBUG] [Thread-23646] [transport.py] [_log()] userauth is OK
2026-04-15T18:27:04.522 [DEBUG] [Thread-23646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:27:04.522 [DEBUG] [Thread-23646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:27:04.522 [DEBUG] [Thread-23646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:27:04.522 [DEBUG] [Thread-23646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:27:04.546 [INFO] [Thread-23646] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:27:04.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:27:05.278 [DEBUG] [Thread-23646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:27:05.278 [DEBUG] [Thread-23646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:27:05.279 [DEBUG] [Thread-23646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:27:05.319 [DEBUG] [Thread-23646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:27:05.319 [DEBUG] [Thread-23646] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:27:05.322 [DEBUG] [Thread-23646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:27:05.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:27:05.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:27:05.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:27:05.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:27:05.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:27:05.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:27:05.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:27:05.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:27:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:27:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.684856 -999.00  +11.50  10.17     75   +7.40 1 1 1 1 1   772    0 2.20 -85.32 ----- 11.9 10.2 298.8 15.2 12.8 -25.5 12.7 -24.2 12.3 -22.1 12.7 -24.1
2026-04-15T18:27:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:27:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:27:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.684856
2026-04-15T18:27:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:27:05.345 [DEBUG] [Thread-23646] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:27:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:27:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:27:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:27:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:27:05.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:26:30', tmtdew=5.30839, humidity=69.9207, cloud=0.0, wind=14.5753, temperature=11.5765, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:26:11.558', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:27:05.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:27:05.604 [DEBUG] [Thread-23649] [transport.py] [_log()] starting thread (client mode): 0xf13534c0
2026-04-15T18:27:05.604 [DEBUG] [Thread-23649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:27:05.618 [DEBUG] [Thread-23649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:27:05.618 [INFO] [Thread-23649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:27:05.626 [DEBUG] [Thread-23649] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:27:05.626 [DEBUG] [Thread-23649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:27:05.626 [DEBUG] [Thread-23649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:27:05.626 [DEBUG] [Thread-23649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:27:05.626 [DEBUG] [Thread-23649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:27:05.626 [DEBUG] [Thread-23649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:27:05.626 [DEBUG] [Thread-23649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:27:05.626 [DEBUG] [Thread-23649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:27:05.626 [DEBUG] [Thread-23649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:27:05.626 [DEBUG] [Thread-23649] [transport.py] [_log()] client lang: <none>
2026-04-15T18:27:05.627 [DEBUG] [Thread-23649] [transport.py] [_log()] server lang: <none>
2026-04-15T18:27:05.627 [DEBUG] [Thread-23649] [transport.py] [_log()] kex follows: False
2026-04-15T18:27:05.627 [DEBUG] [Thread-23649] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:27:05.627 [DEBUG] [Thread-23649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:27:05.627 [DEBUG] [Thread-23649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:27:05.627 [DEBUG] [Thread-23649] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:27:05.627 [DEBUG] [Thread-23649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:27:05.627 [DEBUG] [Thread-23649] [transport.py] [_log()] Compression: none
2026-04-15T18:27:05.627 [DEBUG] [Thread-23649] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:27:05.681 [DEBUG] [Thread-23649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:27:05.682 [DEBUG] [Thread-23649] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:27:05.682 [DEBUG] [Thread-23649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:27:05.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:27:05.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:27:05.739 [DEBUG] [Thread-23649] [transport.py] [_log()] userauth is OK
2026-04-15T18:27:05.739 [DEBUG] [Thread-23649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:27:05.739 [DEBUG] [Thread-23649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:27:05.739 [DEBUG] [Thread-23649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:27:05.739 [DEBUG] [Thread-23649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:27:05.764 [INFO] [Thread-23649] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:27:05.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:27:05.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:27:06.626 [DEBUG] [Thread-23649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:27:06.626 [DEBUG] [Thread-23649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:27:06.674 [DEBUG] [Thread-23649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:27:06.674 [DEBUG] [Thread-23649] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:27:06.683 [DEBUG] [Thread-23649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:27:06.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:27:06.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')
2026-04-15T18:27:06.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
2026-04-15T18:27:06.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:27:06.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:27:06.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:27:06.718 [DEBUG] [Thread-23649] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:27:14.989 [DEBUG] [Thread-23651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:27:30.033 [DEBUG] [Thread-23652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:27:36.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:27:36.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:27:36.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
2026-04-15T18:27:38.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 27, 6), 5.29393, 69.987, 0.0, 15.7925, 11.5599, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:27:38.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:27:06
2026-04-15T18:27:38.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:27:38.932 [DEBUG] [Thread-23653] [transport.py] [_log()] starting thread (client mode): 0xf13ff400
2026-04-15T18:27:38.932 [DEBUG] [Thread-23653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:27:38.952 [DEBUG] [Thread-23653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:27:38.952 [INFO] [Thread-23653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:27:38.955 [DEBUG] [Thread-23653] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:27:38.955 [DEBUG] [Thread-23653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:27:38.955 [DEBUG] [Thread-23653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:27:38.955 [DEBUG] [Thread-23653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:27:38.955 [DEBUG] [Thread-23653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:27:38.955 [DEBUG] [Thread-23653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:27:38.955 [DEBUG] [Thread-23653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:27:38.955 [DEBUG] [Thread-23653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:27:38.955 [DEBUG] [Thread-23653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:27:38.955 [DEBUG] [Thread-23653] [transport.py] [_log()] client lang: <none>
2026-04-15T18:27:38.955 [DEBUG] [Thread-23653] [transport.py] [_log()] server lang: <none>
2026-04-15T18:27:38.956 [DEBUG] [Thread-23653] [transport.py] [_log()] kex follows: False
2026-04-15T18:27:38.956 [DEBUG] [Thread-23653] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:27:38.956 [DEBUG] [Thread-23653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:27:38.956 [DEBUG] [Thread-23653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:27:38.956 [DEBUG] [Thread-23653] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:27:38.956 [DEBUG] [Thread-23653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:27:38.956 [DEBUG] [Thread-23653] [transport.py] [_log()] Compression: none
2026-04-15T18:27:38.956 [DEBUG] [Thread-23653] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:27:38.973 [DEBUG] [Thread-23653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:27:38.974 [DEBUG] [Thread-23653] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:27:38.974 [DEBUG] [Thread-23653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:27:38.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:27:38.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:27:38.975 [DEBUG] [Thread-23653] [transport.py] [_log()] userauth is OK
2026-04-15T18:27:38.975 [DEBUG] [Thread-23653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:27:38.975 [DEBUG] [Thread-23653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:27:38.976 [DEBUG] [Thread-23653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:27:38.976 [DEBUG] [Thread-23653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:27:38.998 [INFO] [Thread-23653] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:27:38.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:27:39.801 [DEBUG] [Thread-23653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:27:39.802 [DEBUG] [Thread-23653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:27:39.802 [DEBUG] [Thread-23653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:27:39.842 [DEBUG] [Thread-23653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:27:39.842 [DEBUG] [Thread-23653] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:27:39.845 [DEBUG] [Thread-23653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:27:39.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:27:39.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:27:39.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:27:39.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:27:39.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:27:39.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:27:39.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:27:39.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:27:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:27:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.685203 -999.00  +11.50  14.03     75   +7.30 1 1 1 1 1   761    0 1.99 -88.83 ----- 12.8 14.0 301.8 15.8 12.8 -25.4 12.6 -24.3 12.3 -22.1 12.6 -24.1
2026-04-15T18:27:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:27:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:27:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.685203
2026-04-15T18:27:39.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:27:39.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:27:39.871 [DEBUG] [Thread-23653] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:27:39.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:27:39.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:27:39.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:27:39.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:27:06', tmtdew=5.29393, humidity=69.987, cloud=0.0, wind=15.7925, temperature=11.5599, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:26:41.539', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:27:40.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:27:40.130 [DEBUG] [Thread-23656] [transport.py] [_log()] starting thread (client mode): 0xf13669e0
2026-04-15T18:27:40.130 [DEBUG] [Thread-23656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:27:40.144 [DEBUG] [Thread-23656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:27:40.144 [INFO] [Thread-23656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:27:40.152 [DEBUG] [Thread-23656] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:27:40.152 [DEBUG] [Thread-23656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:27:40.152 [DEBUG] [Thread-23656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:27:40.152 [DEBUG] [Thread-23656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:27:40.152 [DEBUG] [Thread-23656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:27:40.152 [DEBUG] [Thread-23656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:27:40.152 [DEBUG] [Thread-23656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:27:40.152 [DEBUG] [Thread-23656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:27:40.153 [DEBUG] [Thread-23656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:27:40.153 [DEBUG] [Thread-23656] [transport.py] [_log()] client lang: <none>
2026-04-15T18:27:40.153 [DEBUG] [Thread-23656] [transport.py] [_log()] server lang: <none>
2026-04-15T18:27:40.153 [DEBUG] [Thread-23656] [transport.py] [_log()] kex follows: False
2026-04-15T18:27:40.153 [DEBUG] [Thread-23656] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:27:40.153 [DEBUG] [Thread-23656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:27:40.153 [DEBUG] [Thread-23656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:27:40.153 [DEBUG] [Thread-23656] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:27:40.153 [DEBUG] [Thread-23656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:27:40.153 [DEBUG] [Thread-23656] [transport.py] [_log()] Compression: none
2026-04-15T18:27:40.153 [DEBUG] [Thread-23656] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:27:40.209 [DEBUG] [Thread-23656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:27:40.210 [DEBUG] [Thread-23656] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:27:40.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:27:40.210 [DEBUG] [Thread-23656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:27:40.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:27:40.266 [DEBUG] [Thread-23656] [transport.py] [_log()] userauth is OK
2026-04-15T18:27:40.266 [DEBUG] [Thread-23656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:27:40.266 [DEBUG] [Thread-23656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:27:40.266 [DEBUG] [Thread-23656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:27:40.266 [DEBUG] [Thread-23656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:27:40.294 [INFO] [Thread-23656] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:27:40.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:27:40.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:27:41.125 [DEBUG] [Thread-23656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:27:41.125 [DEBUG] [Thread-23656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:27:41.173 [DEBUG] [Thread-23656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:27:41.173 [DEBUG] [Thread-23656] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:27:41.181 [DEBUG] [Thread-23656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:27:41.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:27:41.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')
2026-04-15T18:27:41.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
2026-04-15T18:27:41.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:27:41.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:27:41.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:27:41.213 [DEBUG] [Thread-23656] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:27:45.065 [DEBUG] [Thread-23658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:27:47.579 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:27:47.580 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:27:49.584 [DEBUG] [Thread-23659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:28:00.108 [DEBUG] [Thread-23660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:28:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:28:11.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:28:11.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
2026-04-15T18:28:12.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 27, 41), 5.33335, 69.7424, 0.0, 18.5609, 11.7538, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:28:12.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:27:41
2026-04-15T18:28:12.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:28:13.327 [DEBUG] [Thread-23661] [transport.py] [_log()] starting thread (client mode): 0xee91f4f0
2026-04-15T18:28:13.327 [DEBUG] [Thread-23661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:28:13.346 [DEBUG] [Thread-23661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:28:13.347 [INFO] [Thread-23661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:28:13.350 [DEBUG] [Thread-23661] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:28:13.350 [DEBUG] [Thread-23661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:28:13.350 [DEBUG] [Thread-23661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:28:13.350 [DEBUG] [Thread-23661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:28:13.350 [DEBUG] [Thread-23661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:28:13.350 [DEBUG] [Thread-23661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:28:13.350 [DEBUG] [Thread-23661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:28:13.350 [DEBUG] [Thread-23661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:28:13.351 [DEBUG] [Thread-23661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:28:13.351 [DEBUG] [Thread-23661] [transport.py] [_log()] client lang: <none>
2026-04-15T18:28:13.351 [DEBUG] [Thread-23661] [transport.py] [_log()] server lang: <none>
2026-04-15T18:28:13.351 [DEBUG] [Thread-23661] [transport.py] [_log()] kex follows: False
2026-04-15T18:28:13.351 [DEBUG] [Thread-23661] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:28:13.351 [DEBUG] [Thread-23661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:28:13.351 [DEBUG] [Thread-23661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:28:13.351 [DEBUG] [Thread-23661] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:28:13.351 [DEBUG] [Thread-23661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:28:13.351 [DEBUG] [Thread-23661] [transport.py] [_log()] Compression: none
2026-04-15T18:28:13.352 [DEBUG] [Thread-23661] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:28:13.371 [DEBUG] [Thread-23661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:28:13.371 [DEBUG] [Thread-23661] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:28:13.372 [DEBUG] [Thread-23661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:28:13.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:28:13.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:28:13.412 [DEBUG] [Thread-23661] [transport.py] [_log()] userauth is OK
2026-04-15T18:28:13.412 [DEBUG] [Thread-23661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:28:13.413 [DEBUG] [Thread-23661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:28:13.413 [DEBUG] [Thread-23661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:28:13.413 [DEBUG] [Thread-23661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:28:13.438 [INFO] [Thread-23661] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:28:13.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:28:14.196 [DEBUG] [Thread-23661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:28:14.197 [DEBUG] [Thread-23661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:28:14.198 [DEBUG] [Thread-23661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:28:14.237 [DEBUG] [Thread-23661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:28:14.237 [DEBUG] [Thread-23661] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:28:14.240 [DEBUG] [Thread-23661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:28:14.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:28:14.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:28:14.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:28:14.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:28:14.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:28:14.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:28:14.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:28:14.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:28:14.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:28:14.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.685898 -999.00  +11.40  16.73     75   +7.20 1 1 1 1 1   737    0 2.32 -78.01 ----- 18.7 16.7 299.8 17.7 12.7 -25.8 12.6 -24.3 12.2 -21.9 12.6 -24.0
2026-04-15T18:28:14.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:28:14.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:28:14.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.685898
2026-04-15T18:28:14.264 [DEBUG] [Thread-23661] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:28:14.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:28:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:28:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:28:14.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:28:14.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:28:14.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:27:41', tmtdew=5.33335, humidity=69.7424, cloud=0.0, wind=18.5609, temperature=11.7538, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:27:41.587', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:28:14.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:28:14.528 [DEBUG] [Thread-23664] [transport.py] [_log()] starting thread (client mode): 0xf1366ad0
2026-04-15T18:28:14.528 [DEBUG] [Thread-23664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:28:14.543 [DEBUG] [Thread-23664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:28:14.543 [INFO] [Thread-23664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:28:14.551 [DEBUG] [Thread-23664] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:28:14.551 [DEBUG] [Thread-23664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:28:14.551 [DEBUG] [Thread-23664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:28:14.551 [DEBUG] [Thread-23664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:28:14.551 [DEBUG] [Thread-23664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:28:14.551 [DEBUG] [Thread-23664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:28:14.551 [DEBUG] [Thread-23664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:28:14.551 [DEBUG] [Thread-23664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:28:14.551 [DEBUG] [Thread-23664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:28:14.551 [DEBUG] [Thread-23664] [transport.py] [_log()] client lang: <none>
2026-04-15T18:28:14.551 [DEBUG] [Thread-23664] [transport.py] [_log()] server lang: <none>
2026-04-15T18:28:14.552 [DEBUG] [Thread-23664] [transport.py] [_log()] kex follows: False
2026-04-15T18:28:14.552 [DEBUG] [Thread-23664] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:28:14.552 [DEBUG] [Thread-23664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:28:14.552 [DEBUG] [Thread-23664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:28:14.552 [DEBUG] [Thread-23664] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:28:14.552 [DEBUG] [Thread-23664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:28:14.552 [DEBUG] [Thread-23664] [transport.py] [_log()] Compression: none
2026-04-15T18:28:14.552 [DEBUG] [Thread-23664] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:28:14.614 [DEBUG] [Thread-23664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:28:14.615 [DEBUG] [Thread-23664] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:28:14.615 [DEBUG] [Thread-23664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:28:14.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:28:14.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:28:14.673 [DEBUG] [Thread-23664] [transport.py] [_log()] userauth is OK
2026-04-15T18:28:14.673 [DEBUG] [Thread-23664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:28:14.674 [DEBUG] [Thread-23664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:28:14.674 [DEBUG] [Thread-23664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:28:14.674 [DEBUG] [Thread-23664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:28:14.700 [INFO] [Thread-23664] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:28:14.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:28:14.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:28:15.141 [DEBUG] [Thread-23666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:28:15.498 [DEBUG] [Thread-23664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:28:15.498 [DEBUG] [Thread-23664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:28:15.546 [DEBUG] [Thread-23664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:28:15.546 [DEBUG] [Thread-23664] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:28:15.555 [DEBUG] [Thread-23664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:28:15.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:28:15.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')
2026-04-15T18:28:15.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
2026-04-15T18:28:15.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:28:15.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:28:15.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:28:15.595 [DEBUG] [Thread-23664] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:28:30.185 [DEBUG] [Thread-23667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:28:45.217 [DEBUG] [Thread-23668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:28:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:28:45.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:28:45.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T18:28:46.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 28, 17), 5.15012, 70.4541, 0.0, 17.0096, 11.3935, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:28:46.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:28:17
2026-04-15T18:28:47.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:28:47.709 [DEBUG] [Thread-23669] [transport.py] [_log()] starting thread (client mode): 0xf1365000
2026-04-15T18:28:47.709 [DEBUG] [Thread-23669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:28:47.729 [DEBUG] [Thread-23669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:28:47.729 [INFO] [Thread-23669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:28:47.732 [DEBUG] [Thread-23669] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:28:47.732 [DEBUG] [Thread-23669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:28:47.732 [DEBUG] [Thread-23669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:28:47.733 [DEBUG] [Thread-23669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:28:47.733 [DEBUG] [Thread-23669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:28:47.733 [DEBUG] [Thread-23669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:28:47.733 [DEBUG] [Thread-23669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:28:47.733 [DEBUG] [Thread-23669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:28:47.733 [DEBUG] [Thread-23669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:28:47.733 [DEBUG] [Thread-23669] [transport.py] [_log()] client lang: <none>
2026-04-15T18:28:47.733 [DEBUG] [Thread-23669] [transport.py] [_log()] server lang: <none>
2026-04-15T18:28:47.733 [DEBUG] [Thread-23669] [transport.py] [_log()] kex follows: False
2026-04-15T18:28:47.733 [DEBUG] [Thread-23669] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:28:47.733 [DEBUG] [Thread-23669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:28:47.734 [DEBUG] [Thread-23669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:28:47.734 [DEBUG] [Thread-23669] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:28:47.734 [DEBUG] [Thread-23669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:28:47.734 [DEBUG] [Thread-23669] [transport.py] [_log()] Compression: none
2026-04-15T18:28:47.734 [DEBUG] [Thread-23669] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:28:47.751 [DEBUG] [Thread-23669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:28:47.751 [DEBUG] [Thread-23669] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:28:47.752 [DEBUG] [Thread-23669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:28:47.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:28:47.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:28:47.753 [DEBUG] [Thread-23669] [transport.py] [_log()] userauth is OK
2026-04-15T18:28:47.753 [DEBUG] [Thread-23669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:28:47.753 [DEBUG] [Thread-23669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:28:47.753 [DEBUG] [Thread-23669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:28:47.753 [DEBUG] [Thread-23669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:28:47.772 [INFO] [Thread-23669] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:28:47.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:28:48.554 [DEBUG] [Thread-23669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:28:48.554 [DEBUG] [Thread-23669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:28:48.555 [DEBUG] [Thread-23669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:28:48.595 [DEBUG] [Thread-23669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:28:48.595 [DEBUG] [Thread-23669] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:28:48.598 [DEBUG] [Thread-23669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:28:48.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:28:48.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:28:48.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:28:48.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:28:48.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:28:48.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:28:48.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:28:48.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:28:48.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:28:48.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.686245 -999.00  +11.30  16.54     75   +7.20 1 1 1 1 1   724    0 2.43 -74.24 ----- 15.6 16.5 288.0 20.7 12.6 -25.7 12.5 -24.3 12.2 -22.3 12.5 -24.3
2026-04-15T18:28:48.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:28:48.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:28:48.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.686245
2026-04-15T18:28:48.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:28:48.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:28:48.627 [DEBUG] [Thread-23669] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:28:48.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:28:48.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:28:48.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:28:48.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:28:17', tmtdew=5.15012, humidity=70.4541, cloud=0.0, wind=17.0096, temperature=11.3935, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:28:11.568', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:28:48.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:28:48.885 [DEBUG] [Thread-23672] [transport.py] [_log()] starting thread (client mode): 0xf13ff550
2026-04-15T18:28:48.885 [DEBUG] [Thread-23672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:28:48.899 [DEBUG] [Thread-23672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:28:48.899 [INFO] [Thread-23672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:28:48.907 [DEBUG] [Thread-23672] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:28:48.907 [DEBUG] [Thread-23672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:28:48.907 [DEBUG] [Thread-23672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:28:48.907 [DEBUG] [Thread-23672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:28:48.907 [DEBUG] [Thread-23672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:28:48.907 [DEBUG] [Thread-23672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:28:48.907 [DEBUG] [Thread-23672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:28:48.907 [DEBUG] [Thread-23672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:28:48.907 [DEBUG] [Thread-23672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:28:48.908 [DEBUG] [Thread-23672] [transport.py] [_log()] client lang: <none>
2026-04-15T18:28:48.908 [DEBUG] [Thread-23672] [transport.py] [_log()] server lang: <none>
2026-04-15T18:28:48.908 [DEBUG] [Thread-23672] [transport.py] [_log()] kex follows: False
2026-04-15T18:28:48.908 [DEBUG] [Thread-23672] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:28:48.908 [DEBUG] [Thread-23672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:28:48.908 [DEBUG] [Thread-23672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:28:48.908 [DEBUG] [Thread-23672] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:28:48.908 [DEBUG] [Thread-23672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:28:48.908 [DEBUG] [Thread-23672] [transport.py] [_log()] Compression: none
2026-04-15T18:28:48.908 [DEBUG] [Thread-23672] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:28:48.965 [DEBUG] [Thread-23672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:28:48.965 [DEBUG] [Thread-23672] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:28:48.966 [DEBUG] [Thread-23672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:28:48.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:28:48.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:28:49.020 [DEBUG] [Thread-23672] [transport.py] [_log()] userauth is OK
2026-04-15T18:28:49.020 [DEBUG] [Thread-23672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:28:49.020 [DEBUG] [Thread-23672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:28:49.021 [DEBUG] [Thread-23672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:28:49.021 [DEBUG] [Thread-23672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:28:49.046 [INFO] [Thread-23672] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:28:49.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:28:49.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:28:49.736 [DEBUG] [Thread-23674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:28:49.916 [DEBUG] [Thread-23672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:28:49.917 [DEBUG] [Thread-23672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:28:49.964 [DEBUG] [Thread-23672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:28:49.964 [DEBUG] [Thread-23672] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:28:49.973 [DEBUG] [Thread-23672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:28:49.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:28:49.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')
2026-04-15T18:28:49.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
2026-04-15T18:28:49.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:28:50.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:28:50.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:28:50.008 [DEBUG] [Thread-23672] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:28:51.563 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:28:51.564 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:29:00.248 [DEBUG] [Thread-23675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:29:15.293 [DEBUG] [Thread-23676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:29:20.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:29:20.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:29:20.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
2026-04-15T18:29:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 28, 53), 5.27676, 70.0085, 0.0, 15.5268, 11.7215, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:29:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:28:53
2026-04-15T18:29:21.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:29:22.157 [DEBUG] [Thread-23677] [transport.py] [_log()] starting thread (client mode): 0xf13fd0c0
2026-04-15T18:29:22.157 [DEBUG] [Thread-23677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:29:22.177 [DEBUG] [Thread-23677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:29:22.177 [INFO] [Thread-23677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:29:22.180 [DEBUG] [Thread-23677] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:29:22.180 [DEBUG] [Thread-23677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:29:22.180 [DEBUG] [Thread-23677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:29:22.180 [DEBUG] [Thread-23677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:29:22.180 [DEBUG] [Thread-23677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:29:22.180 [DEBUG] [Thread-23677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:29:22.181 [DEBUG] [Thread-23677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:29:22.181 [DEBUG] [Thread-23677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:29:22.181 [DEBUG] [Thread-23677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:29:22.181 [DEBUG] [Thread-23677] [transport.py] [_log()] client lang: <none>
2026-04-15T18:29:22.181 [DEBUG] [Thread-23677] [transport.py] [_log()] server lang: <none>
2026-04-15T18:29:22.181 [DEBUG] [Thread-23677] [transport.py] [_log()] kex follows: False
2026-04-15T18:29:22.181 [DEBUG] [Thread-23677] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:29:22.181 [DEBUG] [Thread-23677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:29:22.181 [DEBUG] [Thread-23677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:29:22.181 [DEBUG] [Thread-23677] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:29:22.181 [DEBUG] [Thread-23677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:29:22.182 [DEBUG] [Thread-23677] [transport.py] [_log()] Compression: none
2026-04-15T18:29:22.182 [DEBUG] [Thread-23677] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:29:22.197 [DEBUG] [Thread-23677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:29:22.197 [DEBUG] [Thread-23677] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:29:22.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:29:22.198 [DEBUG] [Thread-23677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:29:22.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:29:22.200 [DEBUG] [Thread-23677] [transport.py] [_log()] userauth is OK
2026-04-15T18:29:22.200 [DEBUG] [Thread-23677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:29:22.200 [DEBUG] [Thread-23677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:29:22.200 [DEBUG] [Thread-23677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:29:22.200 [DEBUG] [Thread-23677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:29:22.224 [INFO] [Thread-23677] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:29:22.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:29:23.039 [DEBUG] [Thread-23677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:29:23.040 [DEBUG] [Thread-23677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:29:23.040 [DEBUG] [Thread-23677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:29:23.082 [DEBUG] [Thread-23677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:29:23.082 [DEBUG] [Thread-23677] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:29:23.084 [DEBUG] [Thread-23677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:29:23.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:29:23.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:29:23.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:29:23.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:29:23.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:29:23.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:29:23.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:29:23.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:29:23.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:29:23.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.686592 -999.00  +11.20  18.57     76   +7.20 1 1 1 1 1   709    0 2.59 -70.71 ----- 13.7 18.6 295.4 23.7 12.6 -25.6 12.5 -24.4 12.2 -22.1 12.4 -24.0
2026-04-15T18:29:23.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:29:23.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:29:23.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.686592
2026-04-15T18:29:23.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:29:23.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:29:23.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:29:23.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:29:23.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:29:23.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:28:53', tmtdew=5.27676, humidity=70.0085, cloud=0.0, wind=15.5268, temperature=11.7215, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:28:41.549', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:29:23.105 [DEBUG] [Thread-23677] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:29:23.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:29:23.332 [DEBUG] [Thread-23680] [transport.py] [_log()] starting thread (client mode): 0xf1353ac0
2026-04-15T18:29:23.332 [DEBUG] [Thread-23680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:29:23.346 [DEBUG] [Thread-23680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:29:23.346 [INFO] [Thread-23680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:29:23.354 [DEBUG] [Thread-23680] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:29:23.354 [DEBUG] [Thread-23680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:29:23.354 [DEBUG] [Thread-23680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:29:23.354 [DEBUG] [Thread-23680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:29:23.354 [DEBUG] [Thread-23680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:29:23.354 [DEBUG] [Thread-23680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:29:23.354 [DEBUG] [Thread-23680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:29:23.354 [DEBUG] [Thread-23680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:29:23.354 [DEBUG] [Thread-23680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:29:23.355 [DEBUG] [Thread-23680] [transport.py] [_log()] client lang: <none>
2026-04-15T18:29:23.355 [DEBUG] [Thread-23680] [transport.py] [_log()] server lang: <none>
2026-04-15T18:29:23.355 [DEBUG] [Thread-23680] [transport.py] [_log()] kex follows: False
2026-04-15T18:29:23.355 [DEBUG] [Thread-23680] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:29:23.355 [DEBUG] [Thread-23680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:29:23.355 [DEBUG] [Thread-23680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:29:23.355 [DEBUG] [Thread-23680] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:29:23.355 [DEBUG] [Thread-23680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:29:23.355 [DEBUG] [Thread-23680] [transport.py] [_log()] Compression: none
2026-04-15T18:29:23.355 [DEBUG] [Thread-23680] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:29:23.411 [DEBUG] [Thread-23680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:29:23.411 [DEBUG] [Thread-23680] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:29:23.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:29:23.412 [DEBUG] [Thread-23680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:29:23.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:29:23.468 [DEBUG] [Thread-23680] [transport.py] [_log()] userauth is OK
2026-04-15T18:29:23.468 [DEBUG] [Thread-23680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:29:23.468 [DEBUG] [Thread-23680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:29:23.468 [DEBUG] [Thread-23680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:29:23.468 [DEBUG] [Thread-23680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:29:23.493 [INFO] [Thread-23680] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:29:23.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:29:23.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:29:24.299 [DEBUG] [Thread-23680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:29:24.299 [DEBUG] [Thread-23680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:29:24.347 [DEBUG] [Thread-23680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:29:24.347 [DEBUG] [Thread-23680] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:29:24.356 [DEBUG] [Thread-23680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:29:24.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:29:24.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')
2026-04-15T18:29:24.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
2026-04-15T18:29:24.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:29:24.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:29:24.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:29:24.391 [DEBUG] [Thread-23680] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:29:30.324 [DEBUG] [Thread-23682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:29:45.368 [DEBUG] [Thread-23683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:29:49.898 [DEBUG] [Thread-23684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:29:54.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:29:54.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:29:54.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
2026-04-15T18:29:55.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 29, 28), 5.04513, 71.2197, 0.0, 16.551, 11.3439, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:29:55.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:29:28
2026-04-15T18:29:56.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:29:56.554 [DEBUG] [Thread-23685] [transport.py] [_log()] starting thread (client mode): 0xf13fc3a0
2026-04-15T18:29:56.554 [DEBUG] [Thread-23685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:29:56.573 [DEBUG] [Thread-23685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:29:56.573 [INFO] [Thread-23685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:29:56.576 [DEBUG] [Thread-23685] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:29:56.576 [DEBUG] [Thread-23685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:29:56.576 [DEBUG] [Thread-23685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:29:56.577 [DEBUG] [Thread-23685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:29:56.577 [DEBUG] [Thread-23685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:29:56.577 [DEBUG] [Thread-23685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:29:56.577 [DEBUG] [Thread-23685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:29:56.577 [DEBUG] [Thread-23685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:29:56.577 [DEBUG] [Thread-23685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:29:56.577 [DEBUG] [Thread-23685] [transport.py] [_log()] client lang: <none>
2026-04-15T18:29:56.577 [DEBUG] [Thread-23685] [transport.py] [_log()] server lang: <none>
2026-04-15T18:29:56.577 [DEBUG] [Thread-23685] [transport.py] [_log()] kex follows: False
2026-04-15T18:29:56.577 [DEBUG] [Thread-23685] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:29:56.577 [DEBUG] [Thread-23685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:29:56.578 [DEBUG] [Thread-23685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:29:56.578 [DEBUG] [Thread-23685] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:29:56.578 [DEBUG] [Thread-23685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:29:56.578 [DEBUG] [Thread-23685] [transport.py] [_log()] Compression: none
2026-04-15T18:29:56.578 [DEBUG] [Thread-23685] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:29:56.595 [DEBUG] [Thread-23685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:29:56.595 [DEBUG] [Thread-23685] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:29:56.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:29:56.596 [DEBUG] [Thread-23685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:29:56.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:29:56.597 [DEBUG] [Thread-23685] [transport.py] [_log()] userauth is OK
2026-04-15T18:29:56.597 [DEBUG] [Thread-23685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:29:56.598 [DEBUG] [Thread-23685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:29:56.598 [DEBUG] [Thread-23685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:29:56.598 [DEBUG] [Thread-23685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:29:56.633 [INFO] [Thread-23685] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:29:56.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:29:56.885 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:29:56.886 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:29:57.389 [DEBUG] [Thread-23685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:29:57.389 [DEBUG] [Thread-23685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:29:57.390 [DEBUG] [Thread-23685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:29:57.430 [DEBUG] [Thread-23685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:29:57.430 [DEBUG] [Thread-23685] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:29:57.433 [DEBUG] [Thread-23685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:29:57.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:29:57.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:29:57.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:29:57.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:29:57.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:29:57.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:29:57.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:29:57.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:29:57.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:29:57.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.687287 -999.00  +11.20  16.93     76   +7.20 1 1 1 1 1   677    0 2.52 -67.09 ----- 18.0 16.9 300.4 19.3 12.5 -25.5 12.4 -24.3 12.1 -22.1 12.4 -23.9
2026-04-15T18:29:57.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:29:57.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:29:57.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.687287
2026-04-15T18:29:57.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:29:57.462 [DEBUG] [Thread-23685] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:29:57.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:29:57.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:29:57.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:29:57.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:29:57.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:29:28', tmtdew=5.04513, humidity=71.2197, cloud=0.0, wind=16.551, temperature=11.3439, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:29:41.597', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:29:57.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:29:57.720 [DEBUG] [Thread-23688] [transport.py] [_log()] starting thread (client mode): 0xf1365990
2026-04-15T18:29:57.721 [DEBUG] [Thread-23688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:29:57.735 [DEBUG] [Thread-23688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:29:57.735 [INFO] [Thread-23688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:29:57.742 [DEBUG] [Thread-23688] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:29:57.742 [DEBUG] [Thread-23688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:29:57.742 [DEBUG] [Thread-23688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:29:57.742 [DEBUG] [Thread-23688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:29:57.742 [DEBUG] [Thread-23688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:29:57.743 [DEBUG] [Thread-23688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:29:57.743 [DEBUG] [Thread-23688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:29:57.743 [DEBUG] [Thread-23688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:29:57.743 [DEBUG] [Thread-23688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:29:57.743 [DEBUG] [Thread-23688] [transport.py] [_log()] client lang: <none>
2026-04-15T18:29:57.743 [DEBUG] [Thread-23688] [transport.py] [_log()] server lang: <none>
2026-04-15T18:29:57.743 [DEBUG] [Thread-23688] [transport.py] [_log()] kex follows: False
2026-04-15T18:29:57.743 [DEBUG] [Thread-23688] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:29:57.743 [DEBUG] [Thread-23688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:29:57.743 [DEBUG] [Thread-23688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:29:57.743 [DEBUG] [Thread-23688] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:29:57.744 [DEBUG] [Thread-23688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:29:57.744 [DEBUG] [Thread-23688] [transport.py] [_log()] Compression: none
2026-04-15T18:29:57.744 [DEBUG] [Thread-23688] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:29:57.798 [DEBUG] [Thread-23688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:29:57.798 [DEBUG] [Thread-23688] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:29:57.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:29:57.799 [DEBUG] [Thread-23688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:29:57.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:29:57.855 [DEBUG] [Thread-23688] [transport.py] [_log()] userauth is OK
2026-04-15T18:29:57.855 [DEBUG] [Thread-23688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:29:57.855 [DEBUG] [Thread-23688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:29:57.856 [DEBUG] [Thread-23688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:29:57.856 [DEBUG] [Thread-23688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:29:57.883 [INFO] [Thread-23688] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:29:57.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:29:57.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:29:58.703 [DEBUG] [Thread-23688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:29:58.704 [DEBUG] [Thread-23688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:29:58.751 [DEBUG] [Thread-23688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:29:58.751 [DEBUG] [Thread-23688] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:29:58.760 [DEBUG] [Thread-23688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:29:58.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:29:58.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')
2026-04-15T18:29:58.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') -> 00000000
2026-04-15T18:29:58.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:29:58.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:29:58.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:29:58.795 [DEBUG] [Thread-23688] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:30:00.398 [DEBUG] [Thread-23690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:30:15.442 [DEBUG] [Thread-23691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:30:28.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:30:28.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:30:28.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T18:30:30.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 30, 3), 5.05397, 71.1706, 0.0, 18.1739, 11.3113, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:30:30.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:30:03
2026-04-15T18:30:30.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:30:30.475 [DEBUG] [Thread-23692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:30:30.916 [DEBUG] [Thread-23693] [transport.py] [_log()] starting thread (client mode): 0xee91cb80
2026-04-15T18:30:30.916 [DEBUG] [Thread-23693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:30:30.936 [DEBUG] [Thread-23693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:30:30.936 [INFO] [Thread-23693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:30:30.939 [DEBUG] [Thread-23693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:30:30.939 [DEBUG] [Thread-23693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:30:30.939 [DEBUG] [Thread-23693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:30:30.939 [DEBUG] [Thread-23693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:30:30.939 [DEBUG] [Thread-23693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:30:30.939 [DEBUG] [Thread-23693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:30:30.940 [DEBUG] [Thread-23693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:30:30.940 [DEBUG] [Thread-23693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:30:30.940 [DEBUG] [Thread-23693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:30:30.940 [DEBUG] [Thread-23693] [transport.py] [_log()] client lang: <none>
2026-04-15T18:30:30.940 [DEBUG] [Thread-23693] [transport.py] [_log()] server lang: <none>
2026-04-15T18:30:30.940 [DEBUG] [Thread-23693] [transport.py] [_log()] kex follows: False
2026-04-15T18:30:30.940 [DEBUG] [Thread-23693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:30:30.940 [DEBUG] [Thread-23693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:30:30.940 [DEBUG] [Thread-23693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:30:30.940 [DEBUG] [Thread-23693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:30:30.940 [DEBUG] [Thread-23693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:30:30.940 [DEBUG] [Thread-23693] [transport.py] [_log()] Compression: none
2026-04-15T18:30:30.941 [DEBUG] [Thread-23693] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:30:30.959 [DEBUG] [Thread-23693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:30:30.959 [DEBUG] [Thread-23693] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:30:30.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:30:30.960 [DEBUG] [Thread-23693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:30:30.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:30:30.962 [DEBUG] [Thread-23693] [transport.py] [_log()] userauth is OK
2026-04-15T18:30:30.962 [DEBUG] [Thread-23693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:30:30.962 [DEBUG] [Thread-23693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:30:30.962 [DEBUG] [Thread-23693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:30:30.963 [DEBUG] [Thread-23693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:30:30.986 [INFO] [Thread-23693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:30:30.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:30:32.674 [DEBUG] [Thread-23693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:30:32.675 [DEBUG] [Thread-23693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:30:32.675 [DEBUG] [Thread-23693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:30:32.715 [DEBUG] [Thread-23693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:30:32.715 [DEBUG] [Thread-23693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:30:32.718 [DEBUG] [Thread-23693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:30:32.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:30:32.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:30:32.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:30:32.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:30:32.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:30:32.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:30:32.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:30:32.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:30:32.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:30:32.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.687634 -999.00  +11.20  15.73     76   +7.20 1 1 1 1 1   660    0 2.43 -69.41 ----- 14.9 15.7 296.4 20.9 12.5 -25.5 12.4 -24.3 12.0 -22.2 12.3 -24.0
2026-04-15T18:30:32.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:30:32.769 [DEBUG] [Thread-23693] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:30:32.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:30:32.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.687634
2026-04-15T18:30:32.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:30:32.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:30:32.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:30:32.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:30:32.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:30:32.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:30:03', tmtdew=5.05397, humidity=71.1706, cloud=0.0, wind=18.1739, temperature=11.3113, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:30:11.578', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:30:33.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:30:33.029 [DEBUG] [Thread-23696] [transport.py] [_log()] starting thread (client mode): 0xf13ff460
2026-04-15T18:30:33.029 [DEBUG] [Thread-23696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:30:33.043 [DEBUG] [Thread-23696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:30:33.043 [INFO] [Thread-23696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:30:33.051 [DEBUG] [Thread-23696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:30:33.051 [DEBUG] [Thread-23696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:30:33.051 [DEBUG] [Thread-23696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:30:33.051 [DEBUG] [Thread-23696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:30:33.051 [DEBUG] [Thread-23696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:30:33.051 [DEBUG] [Thread-23696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:30:33.051 [DEBUG] [Thread-23696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:30:33.051 [DEBUG] [Thread-23696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:30:33.051 [DEBUG] [Thread-23696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:30:33.052 [DEBUG] [Thread-23696] [transport.py] [_log()] client lang: <none>
2026-04-15T18:30:33.052 [DEBUG] [Thread-23696] [transport.py] [_log()] server lang: <none>
2026-04-15T18:30:33.052 [DEBUG] [Thread-23696] [transport.py] [_log()] kex follows: False
2026-04-15T18:30:33.052 [DEBUG] [Thread-23696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:30:33.052 [DEBUG] [Thread-23696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:30:33.052 [DEBUG] [Thread-23696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:30:33.052 [DEBUG] [Thread-23696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:30:33.052 [DEBUG] [Thread-23696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:30:33.052 [DEBUG] [Thread-23696] [transport.py] [_log()] Compression: none
2026-04-15T18:30:33.052 [DEBUG] [Thread-23696] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:30:33.110 [DEBUG] [Thread-23696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:30:33.110 [DEBUG] [Thread-23696] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:30:33.110 [DEBUG] [Thread-23696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:30:33.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:30:33.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:30:33.170 [DEBUG] [Thread-23696] [transport.py] [_log()] userauth is OK
2026-04-15T18:30:33.170 [DEBUG] [Thread-23696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:30:33.170 [DEBUG] [Thread-23696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:30:33.170 [DEBUG] [Thread-23696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:30:33.171 [DEBUG] [Thread-23696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:30:33.195 [INFO] [Thread-23696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:30:33.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:30:33.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:30:34.031 [DEBUG] [Thread-23696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:30:34.032 [DEBUG] [Thread-23696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:30:34.080 [DEBUG] [Thread-23696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:30:34.080 [DEBUG] [Thread-23696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:30:34.090 [DEBUG] [Thread-23696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:30:34.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:30:34.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')
2026-04-15T18:30:34.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
2026-04-15T18:30:34.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:30:34.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:30:34.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:30:34.125 [DEBUG] [Thread-23696] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:30:45.508 [DEBUG] [Thread-23698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:30:50.065 [DEBUG] [Thread-23699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:31:00.556 [DEBUG] [Thread-23700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:31:01.672 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:31:01.673 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:31:04.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:31:04.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:31:04.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
2026-04-15T18:31:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 30, 39), 5.18898, 70.4075, 0.0, 18.9137, 11.59, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:31:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:30:39
2026-04-15T18:31:05.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:31:06.247 [DEBUG] [Thread-23701] [transport.py] [_log()] starting thread (client mode): 0xf13ffc40
2026-04-15T18:31:06.247 [DEBUG] [Thread-23701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:31:06.262 [DEBUG] [Thread-23701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:31:06.262 [INFO] [Thread-23701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:31:06.264 [DEBUG] [Thread-23701] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:31:06.264 [DEBUG] [Thread-23701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:31:06.264 [DEBUG] [Thread-23701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:31:06.264 [DEBUG] [Thread-23701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:31:06.264 [DEBUG] [Thread-23701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:31:06.264 [DEBUG] [Thread-23701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:31:06.264 [DEBUG] [Thread-23701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:31:06.264 [DEBUG] [Thread-23701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:31:06.264 [DEBUG] [Thread-23701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:31:06.264 [DEBUG] [Thread-23701] [transport.py] [_log()] client lang: <none>
2026-04-15T18:31:06.264 [DEBUG] [Thread-23701] [transport.py] [_log()] server lang: <none>
2026-04-15T18:31:06.264 [DEBUG] [Thread-23701] [transport.py] [_log()] kex follows: False
2026-04-15T18:31:06.265 [DEBUG] [Thread-23701] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:31:06.265 [DEBUG] [Thread-23701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:31:06.265 [DEBUG] [Thread-23701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:31:06.265 [DEBUG] [Thread-23701] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:31:06.265 [DEBUG] [Thread-23701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:31:06.265 [DEBUG] [Thread-23701] [transport.py] [_log()] Compression: none
2026-04-15T18:31:06.265 [DEBUG] [Thread-23701] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:31:06.276 [DEBUG] [Thread-23701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:31:06.276 [DEBUG] [Thread-23701] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:31:06.277 [DEBUG] [Thread-23701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:31:06.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:31:06.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:31:06.278 [DEBUG] [Thread-23701] [transport.py] [_log()] userauth is OK
2026-04-15T18:31:06.278 [DEBUG] [Thread-23701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:31:06.278 [DEBUG] [Thread-23701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:31:06.278 [DEBUG] [Thread-23701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:31:06.278 [DEBUG] [Thread-23701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:31:06.291 [INFO] [Thread-23701] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:31:06.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:31:06.872 [DEBUG] [Thread-23701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:31:06.872 [DEBUG] [Thread-23701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:31:06.873 [DEBUG] [Thread-23701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:31:06.913 [DEBUG] [Thread-23701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:31:06.913 [DEBUG] [Thread-23701] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:31:06.915 [DEBUG] [Thread-23701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:31:06.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:31:06.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:31:06.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:31:06.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:31:06.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:31:06.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:31:06.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:31:06.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:31:06.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:31:06.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.687981 -999.00  +11.10  18.59     76   +7.10 1 1 1 1 1   642    0 2.52 -69.21 ----- 16.2 18.6 292.4 22.5 12.4 -25.6 12.4 -24.3 12.0 -22.4 12.3 -24.1
2026-04-15T18:31:06.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:31:06.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:31:06.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.687981
2026-04-15T18:31:06.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:31:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:31:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:31:06.931 [DEBUG] [Thread-23701] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:31:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:31:06.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:31:06.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:30:39', tmtdew=5.18898, humidity=70.4075, cloud=0.0, wind=18.9137, temperature=11.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:30:41.558', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:31:07.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:31:07.196 [DEBUG] [Thread-23704] [transport.py] [_log()] starting thread (client mode): 0xf1353f40
2026-04-15T18:31:07.196 [DEBUG] [Thread-23704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:31:07.210 [DEBUG] [Thread-23704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:31:07.210 [INFO] [Thread-23704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:31:07.218 [DEBUG] [Thread-23704] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:31:07.218 [DEBUG] [Thread-23704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:31:07.218 [DEBUG] [Thread-23704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:31:07.218 [DEBUG] [Thread-23704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:31:07.218 [DEBUG] [Thread-23704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:31:07.218 [DEBUG] [Thread-23704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:31:07.219 [DEBUG] [Thread-23704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:31:07.219 [DEBUG] [Thread-23704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:31:07.219 [DEBUG] [Thread-23704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:31:07.219 [DEBUG] [Thread-23704] [transport.py] [_log()] client lang: <none>
2026-04-15T18:31:07.219 [DEBUG] [Thread-23704] [transport.py] [_log()] server lang: <none>
2026-04-15T18:31:07.219 [DEBUG] [Thread-23704] [transport.py] [_log()] kex follows: False
2026-04-15T18:31:07.219 [DEBUG] [Thread-23704] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:31:07.219 [DEBUG] [Thread-23704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:31:07.219 [DEBUG] [Thread-23704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:31:07.219 [DEBUG] [Thread-23704] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:31:07.219 [DEBUG] [Thread-23704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:31:07.220 [DEBUG] [Thread-23704] [transport.py] [_log()] Compression: none
2026-04-15T18:31:07.220 [DEBUG] [Thread-23704] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:31:07.273 [DEBUG] [Thread-23704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:31:07.273 [DEBUG] [Thread-23704] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:31:07.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:31:07.274 [DEBUG] [Thread-23704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:31:07.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:31:07.330 [DEBUG] [Thread-23704] [transport.py] [_log()] userauth is OK
2026-04-15T18:31:07.330 [DEBUG] [Thread-23704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:31:07.330 [DEBUG] [Thread-23704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:31:07.331 [DEBUG] [Thread-23704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:31:07.331 [DEBUG] [Thread-23704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:31:07.356 [INFO] [Thread-23704] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:31:07.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:31:07.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:31:08.199 [DEBUG] [Thread-23704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:31:08.199 [DEBUG] [Thread-23704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:31:08.247 [DEBUG] [Thread-23704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:31:08.247 [DEBUG] [Thread-23704] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:31:08.257 [DEBUG] [Thread-23704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:31:08.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:31:08.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')
2026-04-15T18:31:08.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
2026-04-15T18:31:08.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:31:08.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:31:08.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:31:08.292 [DEBUG] [Thread-23704] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:31:15.588 [DEBUG] [Thread-23706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:31:30.632 [DEBUG] [Thread-23707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:31:38.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:31:38.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:31:38.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
2026-04-15T18:31:39.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 31, 15), 4.96241, 71.3535, 0.0, 15.2809, 11.1623, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:31:39.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:31:15
2026-04-15T18:31:40.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:31:40.494 [DEBUG] [Thread-23708] [transport.py] [_log()] starting thread (client mode): 0xf13c9c30
2026-04-15T18:31:40.494 [DEBUG] [Thread-23708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:31:40.509 [DEBUG] [Thread-23708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:31:40.509 [INFO] [Thread-23708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:31:40.513 [DEBUG] [Thread-23708] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:31:40.513 [DEBUG] [Thread-23708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:31:40.513 [DEBUG] [Thread-23708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:31:40.513 [DEBUG] [Thread-23708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:31:40.513 [DEBUG] [Thread-23708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:31:40.513 [DEBUG] [Thread-23708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:31:40.513 [DEBUG] [Thread-23708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:31:40.513 [DEBUG] [Thread-23708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:31:40.514 [DEBUG] [Thread-23708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:31:40.514 [DEBUG] [Thread-23708] [transport.py] [_log()] client lang: <none>
2026-04-15T18:31:40.514 [DEBUG] [Thread-23708] [transport.py] [_log()] server lang: <none>
2026-04-15T18:31:40.514 [DEBUG] [Thread-23708] [transport.py] [_log()] kex follows: False
2026-04-15T18:31:40.514 [DEBUG] [Thread-23708] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:31:40.514 [DEBUG] [Thread-23708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:31:40.514 [DEBUG] [Thread-23708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:31:40.514 [DEBUG] [Thread-23708] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:31:40.514 [DEBUG] [Thread-23708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:31:40.514 [DEBUG] [Thread-23708] [transport.py] [_log()] Compression: none
2026-04-15T18:31:40.514 [DEBUG] [Thread-23708] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:31:40.530 [DEBUG] [Thread-23708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:31:40.531 [DEBUG] [Thread-23708] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:31:40.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:31:40.532 [DEBUG] [Thread-23708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:31:40.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:31:40.532 [DEBUG] [Thread-23708] [transport.py] [_log()] userauth is OK
2026-04-15T18:31:40.532 [DEBUG] [Thread-23708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:31:40.533 [DEBUG] [Thread-23708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:31:40.533 [DEBUG] [Thread-23708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:31:40.533 [DEBUG] [Thread-23708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:31:40.556 [INFO] [Thread-23708] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:31:40.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:31:41.141 [DEBUG] [Thread-23708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:31:41.142 [DEBUG] [Thread-23708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:31:41.142 [DEBUG] [Thread-23708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:31:41.182 [DEBUG] [Thread-23708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:31:41.182 [DEBUG] [Thread-23708] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:31:41.185 [DEBUG] [Thread-23708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:31:41.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:31:41.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:31:41.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:31:41.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:31:41.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:31:41.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:31:41.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:31:41.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:31:41.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:31:41.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.688328 -999.00  +11.10  15.11     76   +7.10 1 1 1 1 1   623    0 2.34 -73.18 ----- 17.3 15.1 300.3 18.1 12.4 -25.5 12.3 -24.2 12.0 -21.9 12.3 -24.1
2026-04-15T18:31:41.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:31:41.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:31:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.688328
2026-04-15T18:31:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:31:41.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:31:41.211 [DEBUG] [Thread-23708] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:31:41.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:31:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:31:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:31:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:31:15', tmtdew=4.96241, humidity=71.3535, cloud=0.0, wind=15.2809, temperature=11.1623, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:31:11.539', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:31:41.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:31:41.477 [DEBUG] [Thread-23711] [transport.py] [_log()] starting thread (client mode): 0xee9acd60
2026-04-15T18:31:41.478 [DEBUG] [Thread-23711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:31:41.499 [DEBUG] [Thread-23711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:31:41.499 [INFO] [Thread-23711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:31:41.506 [DEBUG] [Thread-23711] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:31:41.506 [DEBUG] [Thread-23711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:31:41.506 [DEBUG] [Thread-23711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:31:41.506 [DEBUG] [Thread-23711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:31:41.506 [DEBUG] [Thread-23711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:31:41.507 [DEBUG] [Thread-23711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:31:41.507 [DEBUG] [Thread-23711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:31:41.507 [DEBUG] [Thread-23711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:31:41.507 [DEBUG] [Thread-23711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:31:41.507 [DEBUG] [Thread-23711] [transport.py] [_log()] client lang: <none>
2026-04-15T18:31:41.507 [DEBUG] [Thread-23711] [transport.py] [_log()] server lang: <none>
2026-04-15T18:31:41.507 [DEBUG] [Thread-23711] [transport.py] [_log()] kex follows: False
2026-04-15T18:31:41.507 [DEBUG] [Thread-23711] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:31:41.507 [DEBUG] [Thread-23711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:31:41.507 [DEBUG] [Thread-23711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:31:41.507 [DEBUG] [Thread-23711] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:31:41.508 [DEBUG] [Thread-23711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:31:41.508 [DEBUG] [Thread-23711] [transport.py] [_log()] Compression: none
2026-04-15T18:31:41.508 [DEBUG] [Thread-23711] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:31:41.564 [DEBUG] [Thread-23711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:31:41.564 [DEBUG] [Thread-23711] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:31:41.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:31:41.565 [DEBUG] [Thread-23711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:31:41.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:31:41.621 [DEBUG] [Thread-23711] [transport.py] [_log()] userauth is OK
2026-04-15T18:31:41.621 [DEBUG] [Thread-23711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:31:41.621 [DEBUG] [Thread-23711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:31:41.621 [DEBUG] [Thread-23711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:31:41.622 [DEBUG] [Thread-23711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:31:41.647 [INFO] [Thread-23711] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:31:41.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:31:41.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:31:42.495 [DEBUG] [Thread-23711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:31:42.496 [DEBUG] [Thread-23711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:31:42.543 [DEBUG] [Thread-23711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:31:42.543 [DEBUG] [Thread-23711] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:31:42.552 [DEBUG] [Thread-23711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:31:42.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:31:42.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')
2026-04-15T18:31: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') -> 00000000
2026-04-15T18:31:42.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:31:42.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:31:42.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:31:42.587 [DEBUG] [Thread-23711] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:31:45.663 [DEBUG] [Thread-23713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:31:50.210 [DEBUG] [Thread-23714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:32:00.707 [DEBUG] [Thread-23715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:32:06.829 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:32:06.830 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:32:12.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:32:12.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:32:12.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
2026-04-15T18:32:13.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 31, 50), 5.06354, 71.0061, 0.0, 15.0329, 11.5254, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:32:13.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:31:50
2026-04-15T18:32:14.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:32:14.730 [DEBUG] [Thread-23716] [transport.py] [_log()] starting thread (client mode): 0xf1365630
2026-04-15T18:32:14.730 [DEBUG] [Thread-23716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:32:14.744 [DEBUG] [Thread-23716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:32:14.744 [INFO] [Thread-23716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:32:14.747 [DEBUG] [Thread-23716] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:32:14.748 [DEBUG] [Thread-23716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:32:14.748 [DEBUG] [Thread-23716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:32:14.748 [DEBUG] [Thread-23716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:32:14.748 [DEBUG] [Thread-23716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:32:14.748 [DEBUG] [Thread-23716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:32:14.748 [DEBUG] [Thread-23716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:32:14.748 [DEBUG] [Thread-23716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:32:14.748 [DEBUG] [Thread-23716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:32:14.748 [DEBUG] [Thread-23716] [transport.py] [_log()] client lang: <none>
2026-04-15T18:32:14.748 [DEBUG] [Thread-23716] [transport.py] [_log()] server lang: <none>
2026-04-15T18:32:14.748 [DEBUG] [Thread-23716] [transport.py] [_log()] kex follows: False
2026-04-15T18:32:14.748 [DEBUG] [Thread-23716] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:32:14.749 [DEBUG] [Thread-23716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:32:14.749 [DEBUG] [Thread-23716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:32:14.749 [DEBUG] [Thread-23716] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:32:14.749 [DEBUG] [Thread-23716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:32:14.749 [DEBUG] [Thread-23716] [transport.py] [_log()] Compression: none
2026-04-15T18:32:14.749 [DEBUG] [Thread-23716] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:32:14.758 [DEBUG] [Thread-23716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:32:14.758 [DEBUG] [Thread-23716] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:32:14.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:32:14.759 [DEBUG] [Thread-23716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:32:14.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:32:14.760 [DEBUG] [Thread-23716] [transport.py] [_log()] userauth is OK
2026-04-15T18:32:14.760 [DEBUG] [Thread-23716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:32:14.760 [DEBUG] [Thread-23716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:32:14.760 [DEBUG] [Thread-23716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:32:14.760 [DEBUG] [Thread-23716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:32:14.777 [INFO] [Thread-23716] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:32:14.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:32:15.428 [DEBUG] [Thread-23716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:32:15.428 [DEBUG] [Thread-23716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:32:15.429 [DEBUG] [Thread-23716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:32:15.469 [DEBUG] [Thread-23716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:32:15.469 [DEBUG] [Thread-23716] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:32:15.472 [DEBUG] [Thread-23716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:32:15.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:32:15.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:32:15.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:32:15.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:32:15.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:32:15.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:32:15.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:32:15.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:32:15.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:32:15.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.688675 -999.00  +11.10  14.23     76   +7.10 1 1 1 1 1   604    0 2.59 -62.70 ----- 17.0 14.2 309.4 19.6 12.4 -25.5 12.3 -24.3 11.9 -22.1 12.2 -24.2
2026-04-15T18:32:15.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:32:15.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:32:15.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.688675
2026-04-15T18:32:15.495 [DEBUG] [Thread-23716] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:32:15.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:32:15.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:32:15.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:32:15.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:32:15.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:32:15.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:31:50', tmtdew=5.06354, humidity=71.0061, cloud=0.0, wind=15.0329, temperature=11.5254, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:31:41.520', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:32:15.740 [DEBUG] [Thread-23719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:32:15.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:32:15.758 [DEBUG] [Thread-23720] [transport.py] [_log()] starting thread (client mode): 0xf1336170
2026-04-15T18:32:15.758 [DEBUG] [Thread-23720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:32:15.776 [DEBUG] [Thread-23720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:32:15.776 [INFO] [Thread-23720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:32:15.784 [DEBUG] [Thread-23720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:32:15.784 [DEBUG] [Thread-23720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:32:15.784 [DEBUG] [Thread-23720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:32:15.784 [DEBUG] [Thread-23720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:32:15.784 [DEBUG] [Thread-23720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:32:15.784 [DEBUG] [Thread-23720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:32:15.784 [DEBUG] [Thread-23720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:32:15.784 [DEBUG] [Thread-23720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:32:15.784 [DEBUG] [Thread-23720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:32:15.784 [DEBUG] [Thread-23720] [transport.py] [_log()] client lang: <none>
2026-04-15T18:32:15.784 [DEBUG] [Thread-23720] [transport.py] [_log()] server lang: <none>
2026-04-15T18:32:15.784 [DEBUG] [Thread-23720] [transport.py] [_log()] kex follows: False
2026-04-15T18:32:15.785 [DEBUG] [Thread-23720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:32:15.785 [DEBUG] [Thread-23720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:32:15.785 [DEBUG] [Thread-23720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:32:15.785 [DEBUG] [Thread-23720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:32:15.785 [DEBUG] [Thread-23720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:32:15.785 [DEBUG] [Thread-23720] [transport.py] [_log()] Compression: none
2026-04-15T18:32:15.785 [DEBUG] [Thread-23720] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:32:15.843 [DEBUG] [Thread-23720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:32:15.844 [DEBUG] [Thread-23720] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:32:15.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:32:15.845 [DEBUG] [Thread-23720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:32:15.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:32:15.900 [DEBUG] [Thread-23720] [transport.py] [_log()] userauth is OK
2026-04-15T18:32:15.901 [DEBUG] [Thread-23720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:32:15.901 [DEBUG] [Thread-23720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:32:15.901 [DEBUG] [Thread-23720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:32:15.901 [DEBUG] [Thread-23720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:32:15.926 [INFO] [Thread-23720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:32:15.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:32:15.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:32:16.752 [DEBUG] [Thread-23720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:32:16.753 [DEBUG] [Thread-23720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:32:16.800 [DEBUG] [Thread-23720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:32:16.800 [DEBUG] [Thread-23720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:32:16.809 [DEBUG] [Thread-23720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:32:16.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:32:16.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')
2026-04-15T18:32:16.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
2026-04-15T18:32:16.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:32:16.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:32:16.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:32:16.843 [DEBUG] [Thread-23720] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:32:30.777 [DEBUG] [Thread-23722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:32:45.809 [DEBUG] [Thread-23723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:32:46.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:32:46.858 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:32:46.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
2026-04-15T18:32:48.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 32, 25), 4.87902, 71.5196, 0.0, 15.6866, 11.1293, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:32:48.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:32:25
2026-04-15T18:32:49.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:32:49.504 [DEBUG] [Thread-23724] [transport.py] [_log()] starting thread (client mode): 0xf1364d90
2026-04-15T18:32:49.504 [DEBUG] [Thread-23724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:32:49.525 [DEBUG] [Thread-23724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:32:49.525 [INFO] [Thread-23724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:32:49.528 [DEBUG] [Thread-23724] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:32:49.528 [DEBUG] [Thread-23724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:32:49.528 [DEBUG] [Thread-23724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:32:49.528 [DEBUG] [Thread-23724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:32:49.528 [DEBUG] [Thread-23724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:32:49.529 [DEBUG] [Thread-23724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:32:49.529 [DEBUG] [Thread-23724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:32:49.529 [DEBUG] [Thread-23724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:32:49.529 [DEBUG] [Thread-23724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:32:49.529 [DEBUG] [Thread-23724] [transport.py] [_log()] client lang: <none>
2026-04-15T18:32:49.529 [DEBUG] [Thread-23724] [transport.py] [_log()] server lang: <none>
2026-04-15T18:32:49.529 [DEBUG] [Thread-23724] [transport.py] [_log()] kex follows: False
2026-04-15T18:32:49.529 [DEBUG] [Thread-23724] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:32:49.529 [DEBUG] [Thread-23724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:32:49.529 [DEBUG] [Thread-23724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:32:49.529 [DEBUG] [Thread-23724] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:32:49.530 [DEBUG] [Thread-23724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:32:49.530 [DEBUG] [Thread-23724] [transport.py] [_log()] Compression: none
2026-04-15T18:32:49.530 [DEBUG] [Thread-23724] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:32:49.547 [DEBUG] [Thread-23724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:32:49.547 [DEBUG] [Thread-23724] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:32:49.548 [DEBUG] [Thread-23724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:32:49.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:32:49.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:32:49.549 [DEBUG] [Thread-23724] [transport.py] [_log()] userauth is OK
2026-04-15T18:32:49.549 [DEBUG] [Thread-23724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:32:49.549 [DEBUG] [Thread-23724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:32:49.549 [DEBUG] [Thread-23724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:32:49.549 [DEBUG] [Thread-23724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:32:49.567 [INFO] [Thread-23724] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:32:49.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:32:50.187 [DEBUG] [Thread-23724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:32:50.187 [DEBUG] [Thread-23724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:32:50.188 [DEBUG] [Thread-23724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:32:50.227 [DEBUG] [Thread-23724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:32:50.228 [DEBUG] [Thread-23724] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:32:50.230 [DEBUG] [Thread-23724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:32:50.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:32:50.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:32:50.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:32:50.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:32:50.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:32:50.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:32:50.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:32:50.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:32:50.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:32:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.689370 -999.00  +11.00  17.78     76   +7.10 1 1 1 1 1   562    0 2.55 -59.60 ----- 13.3 17.8 298.2 19.4 12.3 -25.5 12.2 -24.3 11.8 -22.1 12.1 -24.2
2026-04-15T18:32:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:32:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:32:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.689370
2026-04-15T18:32:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:32:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:32:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:32:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:32:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:32:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:32:25', tmtdew=4.87902, humidity=71.5196, cloud=0.0, wind=15.6866, temperature=11.1293, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:32:41.568', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:32:50.250 [DEBUG] [Thread-23724] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:32:50.361 [DEBUG] [Thread-23727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:32:50.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:32:50.463 [DEBUG] [Thread-23728] [transport.py] [_log()] starting thread (client mode): 0xf1353ac0
2026-04-15T18:32:50.463 [DEBUG] [Thread-23728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:32:50.480 [DEBUG] [Thread-23728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:32:50.480 [INFO] [Thread-23728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:32:50.487 [DEBUG] [Thread-23728] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:32:50.487 [DEBUG] [Thread-23728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:32:50.488 [DEBUG] [Thread-23728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:32:50.488 [DEBUG] [Thread-23728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:32:50.488 [DEBUG] [Thread-23728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:32:50.488 [DEBUG] [Thread-23728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:32:50.488 [DEBUG] [Thread-23728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:32:50.488 [DEBUG] [Thread-23728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:32:50.488 [DEBUG] [Thread-23728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:32:50.488 [DEBUG] [Thread-23728] [transport.py] [_log()] client lang: <none>
2026-04-15T18:32:50.488 [DEBUG] [Thread-23728] [transport.py] [_log()] server lang: <none>
2026-04-15T18:32:50.488 [DEBUG] [Thread-23728] [transport.py] [_log()] kex follows: False
2026-04-15T18:32:50.488 [DEBUG] [Thread-23728] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:32:50.488 [DEBUG] [Thread-23728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:32:50.489 [DEBUG] [Thread-23728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:32:50.489 [DEBUG] [Thread-23728] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:32:50.489 [DEBUG] [Thread-23728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:32:50.489 [DEBUG] [Thread-23728] [transport.py] [_log()] Compression: none
2026-04-15T18:32:50.489 [DEBUG] [Thread-23728] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:32:50.544 [DEBUG] [Thread-23728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:32:50.544 [DEBUG] [Thread-23728] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:32:50.545 [DEBUG] [Thread-23728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:32:50.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:32:50.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:32:50.600 [DEBUG] [Thread-23728] [transport.py] [_log()] userauth is OK
2026-04-15T18:32:50.600 [DEBUG] [Thread-23728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:32:50.600 [DEBUG] [Thread-23728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:32:50.600 [DEBUG] [Thread-23728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:32:50.600 [DEBUG] [Thread-23728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:32:50.626 [INFO] [Thread-23728] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:32:50.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:32:50.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:32:51.461 [DEBUG] [Thread-23728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:32:51.461 [DEBUG] [Thread-23728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:32:51.509 [DEBUG] [Thread-23728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:32:51.509 [DEBUG] [Thread-23728] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:32:51.518 [DEBUG] [Thread-23728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:32:51.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:32:51.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')
2026-04-15T18:32:51.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
2026-04-15T18:32:51.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:32:51.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:32:51.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:32:51.557 [DEBUG] [Thread-23728] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:33:00.841 [DEBUG] [Thread-23730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:33:11.424 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:33:11.425 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:33:15.887 [DEBUG] [Thread-23731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:33:21.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:33:21.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:33:21.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T18:33:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 33, 2), 4.8642, 71.5859, 0.0, 15.8983, 11.0961, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:33:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:33:02
2026-04-15T18:33:23.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:33:23.564 [DEBUG] [Thread-23732] [transport.py] [_log()] starting thread (client mode): 0xf1364a00
2026-04-15T18:33:23.565 [DEBUG] [Thread-23732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:33:23.582 [DEBUG] [Thread-23732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:33:23.582 [INFO] [Thread-23732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:33:23.585 [DEBUG] [Thread-23732] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] client lang: <none>
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] server lang: <none>
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] kex follows: False
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] Compression: none
2026-04-15T18:33:23.586 [DEBUG] [Thread-23732] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:33:23.602 [DEBUG] [Thread-23732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:33:23.603 [DEBUG] [Thread-23732] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:33:23.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:33:23.603 [DEBUG] [Thread-23732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:33:23.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:33:23.604 [DEBUG] [Thread-23732] [transport.py] [_log()] userauth is OK
2026-04-15T18:33:23.604 [DEBUG] [Thread-23732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:33:23.604 [DEBUG] [Thread-23732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:33:23.604 [DEBUG] [Thread-23732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:33:23.604 [DEBUG] [Thread-23732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:33:23.623 [INFO] [Thread-23732] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:33:23.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:33:24.229 [DEBUG] [Thread-23732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:33:24.230 [DEBUG] [Thread-23732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:33:24.230 [DEBUG] [Thread-23732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:33:24.270 [DEBUG] [Thread-23732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:33:24.270 [DEBUG] [Thread-23732] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:33:24.272 [DEBUG] [Thread-23732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:33:24.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:33:24.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:33:24.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:33:24.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:33:24.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:33:24.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:33:24.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:33:24.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:33:24.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:33:24.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.689717 -999.00  +11.00  13.37     76   +7.10 1 1 1 1 1   540    0 2.64 -61.03 ----- 13.6 13.4 298.2 15.7 12.3 -25.5 12.2 -24.3 11.8 -22.1 12.2 -24.0
2026-04-15T18:33:24.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:33:24.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:33:24.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.689717
2026-04-15T18:33:24.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:33:24.296 [DEBUG] [Thread-23732] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:33:24.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:33:24.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:33:24.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:33:24.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:33:24.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:33:02', tmtdew=4.8642, humidity=71.5859, cloud=0.0, wind=15.8983, temperature=11.0961, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:33:11.549', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:33:24.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:33:24.554 [DEBUG] [Thread-23735] [transport.py] [_log()] starting thread (client mode): 0xf13c93f0
2026-04-15T18:33:24.554 [DEBUG] [Thread-23735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:33:24.568 [DEBUG] [Thread-23735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:33:24.568 [INFO] [Thread-23735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:33:24.575 [DEBUG] [Thread-23735] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:33:24.575 [DEBUG] [Thread-23735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:33:24.575 [DEBUG] [Thread-23735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:33:24.576 [DEBUG] [Thread-23735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:33:24.576 [DEBUG] [Thread-23735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:33:24.576 [DEBUG] [Thread-23735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:33:24.576 [DEBUG] [Thread-23735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:33:24.576 [DEBUG] [Thread-23735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:33:24.576 [DEBUG] [Thread-23735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:33:24.576 [DEBUG] [Thread-23735] [transport.py] [_log()] client lang: <none>
2026-04-15T18:33:24.576 [DEBUG] [Thread-23735] [transport.py] [_log()] server lang: <none>
2026-04-15T18:33:24.576 [DEBUG] [Thread-23735] [transport.py] [_log()] kex follows: False
2026-04-15T18:33:24.576 [DEBUG] [Thread-23735] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:33:24.576 [DEBUG] [Thread-23735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:33:24.576 [DEBUG] [Thread-23735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:33:24.577 [DEBUG] [Thread-23735] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:33:24.577 [DEBUG] [Thread-23735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:33:24.577 [DEBUG] [Thread-23735] [transport.py] [_log()] Compression: none
2026-04-15T18:33:24.577 [DEBUG] [Thread-23735] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:33:24.638 [DEBUG] [Thread-23735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:33:24.639 [DEBUG] [Thread-23735] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:33:24.639 [DEBUG] [Thread-23735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:33:24.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:33:24.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:33:24.700 [DEBUG] [Thread-23735] [transport.py] [_log()] userauth is OK
2026-04-15T18:33:24.700 [DEBUG] [Thread-23735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:33:24.700 [DEBUG] [Thread-23735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:33:24.700 [DEBUG] [Thread-23735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:33:24.700 [DEBUG] [Thread-23735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:33:24.726 [INFO] [Thread-23735] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:33:24.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:33:24.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:33:25.536 [DEBUG] [Thread-23735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:33:25.537 [DEBUG] [Thread-23735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:33:25.584 [DEBUG] [Thread-23735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:33:25.584 [DEBUG] [Thread-23735] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:33:25.593 [DEBUG] [Thread-23735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:33:25.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:33:25.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')
2026-04-15T18:33:25.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
2026-04-15T18:33:25.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:33:25.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:33:25.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:33:25.628 [DEBUG] [Thread-23735] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:33:30.919 [DEBUG] [Thread-23737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:33:45.965 [DEBUG] [Thread-23738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:33:50.525 [DEBUG] [Thread-23739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:33:55.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:33:55.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:33:55.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
2026-04-15T18:33:56.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 33, 37), 4.99872, 71.3051, 0.0, 16.5499, 11.4265, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:33:56.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:33:37
2026-04-15T18:33:57.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:33:57.816 [DEBUG] [Thread-23740] [transport.py] [_log()] starting thread (client mode): 0xee90e9b0
2026-04-15T18:33:57.817 [DEBUG] [Thread-23740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:33:57.837 [DEBUG] [Thread-23740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:33:57.838 [INFO] [Thread-23740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:33:57.841 [DEBUG] [Thread-23740] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:33:57.841 [DEBUG] [Thread-23740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:33:57.841 [DEBUG] [Thread-23740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:33:57.841 [DEBUG] [Thread-23740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:33:57.841 [DEBUG] [Thread-23740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:33:57.841 [DEBUG] [Thread-23740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:33:57.841 [DEBUG] [Thread-23740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:33:57.841 [DEBUG] [Thread-23740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:33:57.841 [DEBUG] [Thread-23740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:33:57.841 [DEBUG] [Thread-23740] [transport.py] [_log()] client lang: <none>
2026-04-15T18:33:57.842 [DEBUG] [Thread-23740] [transport.py] [_log()] server lang: <none>
2026-04-15T18:33:57.842 [DEBUG] [Thread-23740] [transport.py] [_log()] kex follows: False
2026-04-15T18:33:57.842 [DEBUG] [Thread-23740] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:33:57.842 [DEBUG] [Thread-23740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:33:57.842 [DEBUG] [Thread-23740] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:33:57.842 [DEBUG] [Thread-23740] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:33:57.842 [DEBUG] [Thread-23740] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:33:57.842 [DEBUG] [Thread-23740] [transport.py] [_log()] Compression: none
2026-04-15T18:33:57.842 [DEBUG] [Thread-23740] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:33:57.859 [DEBUG] [Thread-23740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:33:57.860 [DEBUG] [Thread-23740] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:33:57.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:33:57.860 [DEBUG] [Thread-23740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:33:57.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:33:57.862 [DEBUG] [Thread-23740] [transport.py] [_log()] userauth is OK
2026-04-15T18:33:57.862 [DEBUG] [Thread-23740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:33:57.862 [DEBUG] [Thread-23740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:33:57.862 [DEBUG] [Thread-23740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:33:57.862 [DEBUG] [Thread-23740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:33:57.881 [INFO] [Thread-23740] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:33:57.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:33:58.534 [DEBUG] [Thread-23740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:33:58.535 [DEBUG] [Thread-23740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:33:58.535 [DEBUG] [Thread-23740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:33:58.574 [DEBUG] [Thread-23740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:33:58.575 [DEBUG] [Thread-23740] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:33:58.577 [DEBUG] [Thread-23740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:33:58.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:33:58.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:33:58.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:33:58.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:33:58.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:33:58.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:33:58.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:33:58.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:33:58.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:33:58.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.690064 -999.00  +11.00  16.96     76   +7.10 1 1 1 1 1   518    0 2.67 -61.48 ----- 19.2 17.0 300.0 19.0 12.3 -25.6 12.2 -24.4 11.8 -22.4 12.1 -24.2
2026-04-15T18:33:58.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:33:58.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:33:58.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.690064
2026-04-15T18:33:58.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:33:58.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:33:58.602 [DEBUG] [Thread-23740] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:33:58.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:33:58.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:33:58.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:33:58.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:33:37', tmtdew=4.99872, humidity=71.3051, cloud=0.0, wind=16.5499, temperature=11.4265, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:33:41.530', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:33:58.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:33:58.859 [DEBUG] [Thread-23743] [transport.py] [_log()] starting thread (client mode): 0xf13c8760
2026-04-15T18:33:58.859 [DEBUG] [Thread-23743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:33:58.873 [DEBUG] [Thread-23743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:33:58.873 [INFO] [Thread-23743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:33:58.881 [DEBUG] [Thread-23743] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:33:58.881 [DEBUG] [Thread-23743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:33:58.881 [DEBUG] [Thread-23743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:33:58.881 [DEBUG] [Thread-23743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:33:58.881 [DEBUG] [Thread-23743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:33:58.881 [DEBUG] [Thread-23743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:33:58.881 [DEBUG] [Thread-23743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:33:58.882 [DEBUG] [Thread-23743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:33:58.882 [DEBUG] [Thread-23743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:33:58.882 [DEBUG] [Thread-23743] [transport.py] [_log()] client lang: <none>
2026-04-15T18:33:58.882 [DEBUG] [Thread-23743] [transport.py] [_log()] server lang: <none>
2026-04-15T18:33:58.882 [DEBUG] [Thread-23743] [transport.py] [_log()] kex follows: False
2026-04-15T18:33:58.882 [DEBUG] [Thread-23743] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:33:58.882 [DEBUG] [Thread-23743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:33:58.883 [DEBUG] [Thread-23743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:33:58.883 [DEBUG] [Thread-23743] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:33:58.883 [DEBUG] [Thread-23743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:33:58.883 [DEBUG] [Thread-23743] [transport.py] [_log()] Compression: none
2026-04-15T18:33:58.883 [DEBUG] [Thread-23743] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:33:58.938 [DEBUG] [Thread-23743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:33:58.938 [DEBUG] [Thread-23743] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:33:58.939 [DEBUG] [Thread-23743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:33:58.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:33:58.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:33:58.994 [DEBUG] [Thread-23743] [transport.py] [_log()] userauth is OK
2026-04-15T18:33:58.995 [DEBUG] [Thread-23743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:33:58.995 [DEBUG] [Thread-23743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:33:58.995 [DEBUG] [Thread-23743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:33:58.995 [DEBUG] [Thread-23743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:33:59.018 [INFO] [Thread-23743] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:33:59.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:33:59.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:33:59.827 [DEBUG] [Thread-23743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:33:59.827 [DEBUG] [Thread-23743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:33:59.875 [DEBUG] [Thread-23743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:33:59.875 [DEBUG] [Thread-23743] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:33:59.884 [DEBUG] [Thread-23743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:33:59.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:33:59.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')
2026-04-15T18:33:59.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') -> 00000000
2026-04-15T18:33:59.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:33:59.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:33:59.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:33:59.918 [DEBUG] [Thread-23743] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:34:00.997 [DEBUG] [Thread-23745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:34:16.043 [DEBUG] [Thread-23746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:34:16.445 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:34:16.446 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:34:29.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:34:29.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:34:29.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T18:34:31.075 [DEBUG] [Thread-23747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:34:31.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 34, 13), 4.81899, 71.802, 0.0, 15.5808, 11.0635, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:34:31.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:34:13
2026-04-15T18:34:31.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:34:32.107 [DEBUG] [Thread-23748] [transport.py] [_log()] starting thread (client mode): 0xf13669b0
2026-04-15T18:34:32.107 [DEBUG] [Thread-23748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:34:32.127 [DEBUG] [Thread-23748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:34:32.127 [INFO] [Thread-23748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:34:32.130 [DEBUG] [Thread-23748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:34:32.130 [DEBUG] [Thread-23748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:34:32.130 [DEBUG] [Thread-23748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:34:32.130 [DEBUG] [Thread-23748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:34:32.131 [DEBUG] [Thread-23748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:34:32.131 [DEBUG] [Thread-23748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:34:32.131 [DEBUG] [Thread-23748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:34:32.131 [DEBUG] [Thread-23748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:34:32.131 [DEBUG] [Thread-23748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:34:32.131 [DEBUG] [Thread-23748] [transport.py] [_log()] client lang: <none>
2026-04-15T18:34:32.131 [DEBUG] [Thread-23748] [transport.py] [_log()] server lang: <none>
2026-04-15T18:34:32.131 [DEBUG] [Thread-23748] [transport.py] [_log()] kex follows: False
2026-04-15T18:34:32.131 [DEBUG] [Thread-23748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:34:32.131 [DEBUG] [Thread-23748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:34:32.131 [DEBUG] [Thread-23748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:34:32.132 [DEBUG] [Thread-23748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:34:32.132 [DEBUG] [Thread-23748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:34:32.132 [DEBUG] [Thread-23748] [transport.py] [_log()] Compression: none
2026-04-15T18:34:32.132 [DEBUG] [Thread-23748] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:34:32.148 [DEBUG] [Thread-23748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:34:32.148 [DEBUG] [Thread-23748] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:34:32.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:34:32.149 [DEBUG] [Thread-23748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:34:32.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:34:32.150 [DEBUG] [Thread-23748] [transport.py] [_log()] userauth is OK
2026-04-15T18:34:32.150 [DEBUG] [Thread-23748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:34:32.150 [DEBUG] [Thread-23748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:34:32.150 [DEBUG] [Thread-23748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:34:32.151 [DEBUG] [Thread-23748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:34:32.175 [INFO] [Thread-23748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:34:32.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:34:32.806 [DEBUG] [Thread-23748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:34:32.806 [DEBUG] [Thread-23748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:34:32.807 [DEBUG] [Thread-23748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:34:32.847 [DEBUG] [Thread-23748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:34:32.847 [DEBUG] [Thread-23748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:34:32.850 [DEBUG] [Thread-23748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:34:32.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:34:32.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:34:32.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:34:32.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:34:32.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:34:32.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:34:32.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:34:32.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:34:32.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:34:32.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.690412 -999.00  +11.00  12.69     76   +7.10 1 1 1 1 1   495    0 2.70 -60.73 ----- 15.2 12.7 300.0 20.5 12.2 -25.4 12.2 -24.4 11.8 -22.1 12.1 -24.1
2026-04-15T18:34:32.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:34:32.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:34:32.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.690412
2026-04-15T18:34:32.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:34:32.875 [DEBUG] [Thread-23748] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:34:32.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:34:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:34:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:34:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:34:32.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:34:13', tmtdew=4.81899, humidity=71.802, cloud=0.0, wind=15.5808, temperature=11.0635, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:34:11.597', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:34:33.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:34:33.135 [DEBUG] [Thread-23751] [transport.py] [_log()] starting thread (client mode): 0xf13ffc40
2026-04-15T18:34:33.135 [DEBUG] [Thread-23751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:34:33.149 [DEBUG] [Thread-23751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:34:33.149 [INFO] [Thread-23751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:34:33.156 [DEBUG] [Thread-23751] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:34:33.156 [DEBUG] [Thread-23751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:34:33.157 [DEBUG] [Thread-23751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:34:33.157 [DEBUG] [Thread-23751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:34:33.157 [DEBUG] [Thread-23751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:34:33.157 [DEBUG] [Thread-23751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:34:33.157 [DEBUG] [Thread-23751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:34:33.157 [DEBUG] [Thread-23751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:34:33.157 [DEBUG] [Thread-23751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:34:33.157 [DEBUG] [Thread-23751] [transport.py] [_log()] client lang: <none>
2026-04-15T18:34:33.157 [DEBUG] [Thread-23751] [transport.py] [_log()] server lang: <none>
2026-04-15T18:34:33.157 [DEBUG] [Thread-23751] [transport.py] [_log()] kex follows: False
2026-04-15T18:34:33.157 [DEBUG] [Thread-23751] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:34:33.158 [DEBUG] [Thread-23751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:34:33.158 [DEBUG] [Thread-23751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:34:33.158 [DEBUG] [Thread-23751] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:34:33.158 [DEBUG] [Thread-23751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:34:33.158 [DEBUG] [Thread-23751] [transport.py] [_log()] Compression: none
2026-04-15T18:34:33.158 [DEBUG] [Thread-23751] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:34:33.213 [DEBUG] [Thread-23751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:34:33.213 [DEBUG] [Thread-23751] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:34:33.214 [DEBUG] [Thread-23751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:34:33.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:34:33.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:34:33.270 [DEBUG] [Thread-23751] [transport.py] [_log()] userauth is OK
2026-04-15T18:34:33.270 [DEBUG] [Thread-23751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:34:33.270 [DEBUG] [Thread-23751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:34:33.270 [DEBUG] [Thread-23751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:34:33.271 [DEBUG] [Thread-23751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:34:33.295 [INFO] [Thread-23751] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:34:33.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:34:33.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:34:34.132 [DEBUG] [Thread-23751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:34:34.133 [DEBUG] [Thread-23751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:34:34.181 [DEBUG] [Thread-23751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:34:34.181 [DEBUG] [Thread-23751] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:34:34.190 [DEBUG] [Thread-23751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:34:34.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:34:34.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')
2026-04-15T18:34:34.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
2026-04-15T18:34:34.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:34:34.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:34:34.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:34:34.225 [DEBUG] [Thread-23751] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:34:46.106 [DEBUG] [Thread-23753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:34:50.679 [DEBUG] [Thread-23754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:35:01.152 [DEBUG] [Thread-23755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:35:04.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:35:04.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:35:04.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T18:35:05.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 34, 48), 4.88974, 71.8361, 0.0, 17.3966, 11.3938, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:35:05.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:34:48
2026-04-15T18:35:05.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:35:06.386 [DEBUG] [Thread-23756] [transport.py] [_log()] starting thread (client mode): 0xf1353f40
2026-04-15T18:35:06.387 [DEBUG] [Thread-23756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:35:06.407 [DEBUG] [Thread-23756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:35:06.407 [INFO] [Thread-23756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:35:06.411 [DEBUG] [Thread-23756] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:35:06.411 [DEBUG] [Thread-23756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:35:06.411 [DEBUG] [Thread-23756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:35:06.411 [DEBUG] [Thread-23756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:35:06.411 [DEBUG] [Thread-23756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:35:06.411 [DEBUG] [Thread-23756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:35:06.411 [DEBUG] [Thread-23756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:35:06.411 [DEBUG] [Thread-23756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:35:06.411 [DEBUG] [Thread-23756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:35:06.411 [DEBUG] [Thread-23756] [transport.py] [_log()] client lang: <none>
2026-04-15T18:35:06.411 [DEBUG] [Thread-23756] [transport.py] [_log()] server lang: <none>
2026-04-15T18:35:06.411 [DEBUG] [Thread-23756] [transport.py] [_log()] kex follows: False
2026-04-15T18:35:06.412 [DEBUG] [Thread-23756] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:35:06.412 [DEBUG] [Thread-23756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:35:06.412 [DEBUG] [Thread-23756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:35:06.412 [DEBUG] [Thread-23756] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:35:06.412 [DEBUG] [Thread-23756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:35:06.412 [DEBUG] [Thread-23756] [transport.py] [_log()] Compression: none
2026-04-15T18:35:06.412 [DEBUG] [Thread-23756] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:35:06.419 [DEBUG] [Thread-23756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:35:06.420 [DEBUG] [Thread-23756] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:35:06.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:35:06.420 [DEBUG] [Thread-23756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:35:06.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:35:06.421 [DEBUG] [Thread-23756] [transport.py] [_log()] userauth is OK
2026-04-15T18:35:06.421 [DEBUG] [Thread-23756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:35:06.421 [DEBUG] [Thread-23756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:35:06.421 [DEBUG] [Thread-23756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:35:06.421 [DEBUG] [Thread-23756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:35:06.435 [INFO] [Thread-23756] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:35:06.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:35:09.352 [DEBUG] [Thread-23756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:35:09.353 [DEBUG] [Thread-23756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:35:09.353 [DEBUG] [Thread-23756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:35:09.393 [DEBUG] [Thread-23756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:35:09.393 [DEBUG] [Thread-23756] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:35:09.396 [DEBUG] [Thread-23756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:35:09.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:35:09.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:35:09.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:35:09.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:35:09.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:35:09.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:35:09.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:35:09.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:35:09.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:35:09.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.690759 -999.00  +11.00  13.28     76   +7.10 1 1 1 1 1   472    0 2.26 -66.24 ----- 13.2 13.3 311.0 18.0 12.2 -25.5 12.2 -24.2 11.7 -22.1 12.0 -24.0
2026-04-15T18:35:09.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:35:09.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:35:09.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.690759
2026-04-15T18:35:09.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:35:09.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:35:09.446 [DEBUG] [Thread-23756] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:35:09.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:35:09.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:35:09.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:35:09.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:34:48', tmtdew=4.88974, humidity=71.8361, cloud=0.0, wind=17.3966, temperature=11.3938, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:34:41.578', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:35:09.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:35:09.708 [DEBUG] [Thread-23759] [transport.py] [_log()] starting thread (client mode): 0xf1350b50
2026-04-15T18:35:09.709 [DEBUG] [Thread-23759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:35:09.723 [DEBUG] [Thread-23759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:35:09.723 [INFO] [Thread-23759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:35:09.731 [DEBUG] [Thread-23759] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:35:09.731 [DEBUG] [Thread-23759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:35:09.731 [DEBUG] [Thread-23759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:35:09.731 [DEBUG] [Thread-23759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:35:09.731 [DEBUG] [Thread-23759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:35:09.731 [DEBUG] [Thread-23759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:35:09.731 [DEBUG] [Thread-23759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:35:09.731 [DEBUG] [Thread-23759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:35:09.731 [DEBUG] [Thread-23759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:35:09.732 [DEBUG] [Thread-23759] [transport.py] [_log()] client lang: <none>
2026-04-15T18:35:09.732 [DEBUG] [Thread-23759] [transport.py] [_log()] server lang: <none>
2026-04-15T18:35:09.732 [DEBUG] [Thread-23759] [transport.py] [_log()] kex follows: False
2026-04-15T18:35:09.732 [DEBUG] [Thread-23759] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:35:09.732 [DEBUG] [Thread-23759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:35:09.732 [DEBUG] [Thread-23759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:35:09.732 [DEBUG] [Thread-23759] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:35:09.732 [DEBUG] [Thread-23759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:35:09.732 [DEBUG] [Thread-23759] [transport.py] [_log()] Compression: none
2026-04-15T18:35:09.732 [DEBUG] [Thread-23759] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:35:09.788 [DEBUG] [Thread-23759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:35:09.789 [DEBUG] [Thread-23759] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:35:09.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:35:09.789 [DEBUG] [Thread-23759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:35:09.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:35:09.845 [DEBUG] [Thread-23759] [transport.py] [_log()] userauth is OK
2026-04-15T18:35:09.845 [DEBUG] [Thread-23759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:35:09.846 [DEBUG] [Thread-23759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:35:09.846 [DEBUG] [Thread-23759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:35:09.846 [DEBUG] [Thread-23759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:35:09.871 [INFO] [Thread-23759] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:35:09.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:35:09.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:35:10.703 [DEBUG] [Thread-23759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:35:10.704 [DEBUG] [Thread-23759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:35:10.751 [DEBUG] [Thread-23759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:35:10.751 [DEBUG] [Thread-23759] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:35:10.759 [DEBUG] [Thread-23759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:35:10.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:35:10.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')
2026-04-15T18:35:10.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
2026-04-15T18:35:10.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:35:10.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:35:10.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:35:10.792 [DEBUG] [Thread-23759] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:35:16.186 [DEBUG] [Thread-23761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:35:21.420 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:35:21.421 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:35:31.230 [DEBUG] [Thread-23762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:35:40.694 [DEBUG] [Thread-23763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:35:40.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:35:40.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:35:40.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
2026-04-15T18:35:42.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 35, 24), 4.79822, 72.4015, 0.0, 18.2804, 11.0469, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:35:42.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:35:24
2026-04-15T18:35:42.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:35:42.977 [DEBUG] [Thread-23764] [transport.py] [_log()] starting thread (client mode): 0xf1350a90
2026-04-15T18:35:42.978 [DEBUG] [Thread-23764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:35:42.997 [DEBUG] [Thread-23764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:35:42.997 [INFO] [Thread-23764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:35:43.001 [DEBUG] [Thread-23764] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:35:43.001 [DEBUG] [Thread-23764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:35:43.001 [DEBUG] [Thread-23764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:35:43.001 [DEBUG] [Thread-23764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:35:43.001 [DEBUG] [Thread-23764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:35:43.001 [DEBUG] [Thread-23764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:35:43.001 [DEBUG] [Thread-23764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:35:43.001 [DEBUG] [Thread-23764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:35:43.001 [DEBUG] [Thread-23764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:35:43.002 [DEBUG] [Thread-23764] [transport.py] [_log()] client lang: <none>
2026-04-15T18:35:43.002 [DEBUG] [Thread-23764] [transport.py] [_log()] server lang: <none>
2026-04-15T18:35:43.002 [DEBUG] [Thread-23764] [transport.py] [_log()] kex follows: False
2026-04-15T18:35:43.002 [DEBUG] [Thread-23764] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:35:43.002 [DEBUG] [Thread-23764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:35:43.002 [DEBUG] [Thread-23764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:35:43.002 [DEBUG] [Thread-23764] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:35:43.002 [DEBUG] [Thread-23764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:35:43.002 [DEBUG] [Thread-23764] [transport.py] [_log()] Compression: none
2026-04-15T18:35:43.002 [DEBUG] [Thread-23764] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:35:43.019 [DEBUG] [Thread-23764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:35:43.019 [DEBUG] [Thread-23764] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:35:43.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:35:43.020 [DEBUG] [Thread-23764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:35:43.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:35:43.021 [DEBUG] [Thread-23764] [transport.py] [_log()] userauth is OK
2026-04-15T18:35:43.021 [DEBUG] [Thread-23764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:35:43.021 [DEBUG] [Thread-23764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:35:43.021 [DEBUG] [Thread-23764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:35:43.022 [DEBUG] [Thread-23764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:35:43.037 [INFO] [Thread-23764] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:35:43.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:35:43.696 [DEBUG] [Thread-23764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:35:43.697 [DEBUG] [Thread-23764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:35:43.697 [DEBUG] [Thread-23764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:35:43.738 [DEBUG] [Thread-23764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:35:43.738 [DEBUG] [Thread-23764] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:35:43.740 [DEBUG] [Thread-23764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:35:43.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:35:43.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:35:43.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:35:43.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:35:43.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:35:43.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:35:43.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:35:43.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:35:43.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:35:43.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.691106 -999.00  +11.00  15.65     76   +7.10 1 1 1 1 1   449    0 2.40 -65.54 ----- 13.4 15.7 293.4 18.3 12.1 -25.6 12.1 -24.2 11.7 -22.1 12.0 -24.1
2026-04-15T18:35:43.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:35:43.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:35:43.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.691106
2026-04-15T18:35:43.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:35:43.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:35:43.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:35:43.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:35:43.760 [DEBUG] [Thread-23764] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:35:43.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:35:43.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:35:24', tmtdew=4.79822, humidity=72.4015, cloud=0.0, wind=18.2804, temperature=11.0469, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:35:11.558', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:35:43.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:35:43.970 [DEBUG] [Thread-23767] [transport.py] [_log()] starting thread (client mode): 0xf1367400
2026-04-15T18:35:43.970 [DEBUG] [Thread-23767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:35:43.985 [DEBUG] [Thread-23767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:35:43.985 [INFO] [Thread-23767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:35:43.992 [DEBUG] [Thread-23767] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:35:43.992 [DEBUG] [Thread-23767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:35:43.992 [DEBUG] [Thread-23767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:35:43.992 [DEBUG] [Thread-23767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:35:43.992 [DEBUG] [Thread-23767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:35:43.992 [DEBUG] [Thread-23767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:35:43.993 [DEBUG] [Thread-23767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:35:43.993 [DEBUG] [Thread-23767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:35:43.993 [DEBUG] [Thread-23767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:35:43.993 [DEBUG] [Thread-23767] [transport.py] [_log()] client lang: <none>
2026-04-15T18:35:43.993 [DEBUG] [Thread-23767] [transport.py] [_log()] server lang: <none>
2026-04-15T18:35:43.993 [DEBUG] [Thread-23767] [transport.py] [_log()] kex follows: False
2026-04-15T18:35:43.993 [DEBUG] [Thread-23767] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:35:43.993 [DEBUG] [Thread-23767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:35:43.993 [DEBUG] [Thread-23767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:35:43.993 [DEBUG] [Thread-23767] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:35:43.993 [DEBUG] [Thread-23767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:35:43.994 [DEBUG] [Thread-23767] [transport.py] [_log()] Compression: none
2026-04-15T18:35:43.994 [DEBUG] [Thread-23767] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:35:44.049 [DEBUG] [Thread-23767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:35:44.049 [DEBUG] [Thread-23767] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:35:44.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:35:44.050 [DEBUG] [Thread-23767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:35:44.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:35:44.105 [DEBUG] [Thread-23767] [transport.py] [_log()] userauth is OK
2026-04-15T18:35:44.105 [DEBUG] [Thread-23767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:35:44.105 [DEBUG] [Thread-23767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:35:44.105 [DEBUG] [Thread-23767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:35:44.105 [DEBUG] [Thread-23767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:35:44.130 [INFO] [Thread-23767] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:35:44.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:35:44.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:35:44.933 [DEBUG] [Thread-23767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:35:44.933 [DEBUG] [Thread-23767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:35:44.981 [DEBUG] [Thread-23767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:35:44.981 [DEBUG] [Thread-23767] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:35:44.990 [DEBUG] [Thread-23767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:35:44.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:35:44.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')
2026-04-15T18:35:45.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') -> 00000000
2026-04-15T18:35:45.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:35:45.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:35:45.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:35:45.025 [DEBUG] [Thread-23767] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:35:46.260 [DEBUG] [Thread-23769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:35:50.826 [DEBUG] [Thread-23770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:36:01.298 [DEBUG] [Thread-23771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:36:15.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:36:15.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:36:15.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
2026-04-15T18:36:16.328 [DEBUG] [Thread-23772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:36:16.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 35, 24), 4.74823, 72.4015, 0.0, 16.4804, 10.9969, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:36:16.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:35:24
2026-04-15T18:36:16.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:36:17.196 [DEBUG] [Thread-23773] [transport.py] [_log()] starting thread (client mode): 0xf1366b30
2026-04-15T18:36:17.196 [DEBUG] [Thread-23773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:36:17.217 [DEBUG] [Thread-23773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:36:17.217 [INFO] [Thread-23773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:36:17.219 [DEBUG] [Thread-23773] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:36:17.219 [DEBUG] [Thread-23773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:36:17.219 [DEBUG] [Thread-23773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:36:17.219 [DEBUG] [Thread-23773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:36:17.219 [DEBUG] [Thread-23773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:36:17.219 [DEBUG] [Thread-23773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:36:17.219 [DEBUG] [Thread-23773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:36:17.220 [DEBUG] [Thread-23773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:36:17.220 [DEBUG] [Thread-23773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:36:17.220 [DEBUG] [Thread-23773] [transport.py] [_log()] client lang: <none>
2026-04-15T18:36:17.220 [DEBUG] [Thread-23773] [transport.py] [_log()] server lang: <none>
2026-04-15T18:36:17.220 [DEBUG] [Thread-23773] [transport.py] [_log()] kex follows: False
2026-04-15T18:36:17.220 [DEBUG] [Thread-23773] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:36:17.220 [DEBUG] [Thread-23773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:36:17.220 [DEBUG] [Thread-23773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:36:17.220 [DEBUG] [Thread-23773] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:36:17.220 [DEBUG] [Thread-23773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:36:17.220 [DEBUG] [Thread-23773] [transport.py] [_log()] Compression: none
2026-04-15T18:36:17.221 [DEBUG] [Thread-23773] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:36:17.232 [DEBUG] [Thread-23773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:36:17.233 [DEBUG] [Thread-23773] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:36:17.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:36:17.233 [DEBUG] [Thread-23773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:36:17.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:36:17.235 [DEBUG] [Thread-23773] [transport.py] [_log()] userauth is OK
2026-04-15T18:36:17.235 [DEBUG] [Thread-23773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:36:17.235 [DEBUG] [Thread-23773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:36:17.235 [DEBUG] [Thread-23773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:36:17.235 [DEBUG] [Thread-23773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:36:17.271 [INFO] [Thread-23773] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:36:17.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:36:17.896 [DEBUG] [Thread-23773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:36:17.896 [DEBUG] [Thread-23773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:36:17.896 [DEBUG] [Thread-23773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:36:17.937 [DEBUG] [Thread-23773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:36:17.937 [DEBUG] [Thread-23773] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:36:17.940 [DEBUG] [Thread-23773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:36:17.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:36:17.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:36:17.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:36:17.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:36:17.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:36:17.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:36:17.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:36:17.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:36:17.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:36:17.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.691453 -999.00  +11.00  13.14     77   +7.10 1 1 1 1 1   426    0 2.67 -57.66 ----- 12.8 13.1 304.6 18.3 12.1 -25.4 12.1 -24.3 11.7 -22.1 12.0 -24.1
2026-04-15T18:36:17.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:36:17.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:36:17.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.691453
2026-04-15T18:36:17.965 [DEBUG] [Thread-23773] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:36:17.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:36:17.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:36:17.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:36:17.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:36:17.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:36:17.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:35:24', tmtdew=4.74823, humidity=72.4015, cloud=0.0, wind=16.4804, temperature=10.9969, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:35:41.539', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:36:18.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:36:18.214 [DEBUG] [Thread-23776] [transport.py] [_log()] starting thread (client mode): 0xf13fde40
2026-04-15T18:36:18.215 [DEBUG] [Thread-23776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:36:18.229 [DEBUG] [Thread-23776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:36:18.230 [INFO] [Thread-23776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:36:18.237 [DEBUG] [Thread-23776] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:36:18.237 [DEBUG] [Thread-23776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:36:18.237 [DEBUG] [Thread-23776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:36:18.238 [DEBUG] [Thread-23776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:36:18.238 [DEBUG] [Thread-23776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:36:18.238 [DEBUG] [Thread-23776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:36:18.238 [DEBUG] [Thread-23776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:36:18.238 [DEBUG] [Thread-23776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:36:18.238 [DEBUG] [Thread-23776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:36:18.238 [DEBUG] [Thread-23776] [transport.py] [_log()] client lang: <none>
2026-04-15T18:36:18.238 [DEBUG] [Thread-23776] [transport.py] [_log()] server lang: <none>
2026-04-15T18:36:18.238 [DEBUG] [Thread-23776] [transport.py] [_log()] kex follows: False
2026-04-15T18:36:18.238 [DEBUG] [Thread-23776] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:36:18.238 [DEBUG] [Thread-23776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:36:18.238 [DEBUG] [Thread-23776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:36:18.239 [DEBUG] [Thread-23776] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:36:18.239 [DEBUG] [Thread-23776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:36:18.239 [DEBUG] [Thread-23776] [transport.py] [_log()] Compression: none
2026-04-15T18:36:18.239 [DEBUG] [Thread-23776] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:36:18.296 [DEBUG] [Thread-23776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:36:18.296 [DEBUG] [Thread-23776] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:36:18.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:36:18.297 [DEBUG] [Thread-23776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:36:18.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:36:18.352 [DEBUG] [Thread-23776] [transport.py] [_log()] userauth is OK
2026-04-15T18:36:18.353 [DEBUG] [Thread-23776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:36:18.353 [DEBUG] [Thread-23776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:36:18.353 [DEBUG] [Thread-23776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:36:18.353 [DEBUG] [Thread-23776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:36:18.381 [INFO] [Thread-23776] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:36:18.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:36:18.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:36:19.234 [DEBUG] [Thread-23776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:36:19.234 [DEBUG] [Thread-23776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:36:19.282 [DEBUG] [Thread-23776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:36:19.282 [DEBUG] [Thread-23776] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:36:19.291 [DEBUG] [Thread-23776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:36:19.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:36: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')
2026-04-15T18:36: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
2026-04-15T18:36:19.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:36:19.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:36:19.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:36:19.326 [DEBUG] [Thread-23776] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:36:25.623 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:36:25.623 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:36:31.357 [DEBUG] [Thread-23778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:36:46.400 [DEBUG] [Thread-23779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:36:49.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:36:49.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:36:49.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
2026-04-15T18:36:50.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 36, 35), 4.88837, 71.8368, 0.0, 17.4319, 11.3613, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:36:50.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:36:35
2026-04-15T18:36:50.977 [DEBUG] [Thread-23780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:36:51.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:36:51.451 [DEBUG] [Thread-23781] [transport.py] [_log()] starting thread (client mode): 0xf13659f0
2026-04-15T18:36:51.452 [DEBUG] [Thread-23781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:36:51.471 [DEBUG] [Thread-23781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:36:51.471 [INFO] [Thread-23781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:36:51.474 [DEBUG] [Thread-23781] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:36:51.474 [DEBUG] [Thread-23781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:36:51.474 [DEBUG] [Thread-23781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:36:51.474 [DEBUG] [Thread-23781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:36:51.474 [DEBUG] [Thread-23781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:36:51.474 [DEBUG] [Thread-23781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:36:51.475 [DEBUG] [Thread-23781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:36:51.475 [DEBUG] [Thread-23781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:36:51.475 [DEBUG] [Thread-23781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:36:51.475 [DEBUG] [Thread-23781] [transport.py] [_log()] client lang: <none>
2026-04-15T18:36:51.475 [DEBUG] [Thread-23781] [transport.py] [_log()] server lang: <none>
2026-04-15T18:36:51.475 [DEBUG] [Thread-23781] [transport.py] [_log()] kex follows: False
2026-04-15T18:36:51.475 [DEBUG] [Thread-23781] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:36:51.475 [DEBUG] [Thread-23781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:36:51.475 [DEBUG] [Thread-23781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:36:51.475 [DEBUG] [Thread-23781] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:36:51.475 [DEBUG] [Thread-23781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:36:51.475 [DEBUG] [Thread-23781] [transport.py] [_log()] Compression: none
2026-04-15T18:36:51.476 [DEBUG] [Thread-23781] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:36:51.493 [DEBUG] [Thread-23781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:36:51.494 [DEBUG] [Thread-23781] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:36:51.494 [DEBUG] [Thread-23781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:36:51.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:36:51.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:36:51.536 [DEBUG] [Thread-23781] [transport.py] [_log()] userauth is OK
2026-04-15T18:36:51.536 [DEBUG] [Thread-23781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:36:51.537 [DEBUG] [Thread-23781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:36:51.537 [DEBUG] [Thread-23781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:36:51.537 [DEBUG] [Thread-23781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:36:51.574 [INFO] [Thread-23781] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:36:51.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:36:52.215 [DEBUG] [Thread-23781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:36:52.216 [DEBUG] [Thread-23781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:36:52.216 [DEBUG] [Thread-23781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:36:52.256 [DEBUG] [Thread-23781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:36:52.256 [DEBUG] [Thread-23781] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:36:52.259 [DEBUG] [Thread-23781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:36:52.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:36:52.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:36:52.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:36:52.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:36:52.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:36:52.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:36:52.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:36:52.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:36:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:36:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.691801 -999.00  +11.00  17.70     76   +7.10 1 1 1 1 1   403    0 2.59 -56.44 ----- 17.9 17.7 297.8 18.8 12.1 -25.4 12.1 -24.3 11.7 -22.1 11.9 -23.9
2026-04-15T18:36:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:36:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:36:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.691801
2026-04-15T18:36:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:36:52.284 [DEBUG] [Thread-23781] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:36:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:36:52.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:36:52.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:36:52.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:36:52.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:36:35', tmtdew=4.88837, humidity=71.8368, cloud=0.0, wind=17.4319, temperature=11.3613, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:36:11.606', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:36:52.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:36:52.540 [DEBUG] [Thread-23784] [transport.py] [_log()] starting thread (client mode): 0xf1350f10
2026-04-15T18:36:52.541 [DEBUG] [Thread-23784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:36:52.555 [DEBUG] [Thread-23784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:36:52.555 [INFO] [Thread-23784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:36:52.562 [DEBUG] [Thread-23784] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:36:52.562 [DEBUG] [Thread-23784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:36:52.563 [DEBUG] [Thread-23784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:36:52.563 [DEBUG] [Thread-23784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:36:52.563 [DEBUG] [Thread-23784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:36:52.563 [DEBUG] [Thread-23784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:36:52.563 [DEBUG] [Thread-23784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:36:52.563 [DEBUG] [Thread-23784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:36:52.563 [DEBUG] [Thread-23784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:36:52.563 [DEBUG] [Thread-23784] [transport.py] [_log()] client lang: <none>
2026-04-15T18:36:52.563 [DEBUG] [Thread-23784] [transport.py] [_log()] server lang: <none>
2026-04-15T18:36:52.563 [DEBUG] [Thread-23784] [transport.py] [_log()] kex follows: False
2026-04-15T18:36:52.563 [DEBUG] [Thread-23784] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:36:52.563 [DEBUG] [Thread-23784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:36:52.564 [DEBUG] [Thread-23784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:36:52.564 [DEBUG] [Thread-23784] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:36:52.564 [DEBUG] [Thread-23784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:36:52.564 [DEBUG] [Thread-23784] [transport.py] [_log()] Compression: none
2026-04-15T18:36:52.564 [DEBUG] [Thread-23784] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:36:52.619 [DEBUG] [Thread-23784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:36:52.619 [DEBUG] [Thread-23784] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:36:52.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:36:52.620 [DEBUG] [Thread-23784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:36:52.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:36:52.676 [DEBUG] [Thread-23784] [transport.py] [_log()] userauth is OK
2026-04-15T18:36:52.676 [DEBUG] [Thread-23784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:36:52.677 [DEBUG] [Thread-23784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:36:52.677 [DEBUG] [Thread-23784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:36:52.677 [DEBUG] [Thread-23784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:36:52.702 [INFO] [Thread-23784] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:36:52.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:36:52.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:36:53.565 [DEBUG] [Thread-23784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:36:53.566 [DEBUG] [Thread-23784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:36:53.613 [DEBUG] [Thread-23784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:36:53.613 [DEBUG] [Thread-23784] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:36:53.622 [DEBUG] [Thread-23784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:36:53.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:36:53.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')
2026-04-15T18:36:53.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
2026-04-15T18:36:53.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:36:53.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:36:53.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:36:53.656 [DEBUG] [Thread-23784] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:37:01.428 [DEBUG] [Thread-23786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:37:16.466 [DEBUG] [Thread-23787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:37:23.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:37:23.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:37:23.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
2026-04-15T18:37:24.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 37, 11), 4.80971, 72.3355, 0.0, 14.8039, 10.9475, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:37:24.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:37:11
2026-04-15T18:37:25.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:37:25.816 [DEBUG] [Thread-23788] [transport.py] [_log()] starting thread (client mode): 0xee905c90
2026-04-15T18:37:25.816 [DEBUG] [Thread-23788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:37:25.835 [DEBUG] [Thread-23788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:37:25.835 [INFO] [Thread-23788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:37:25.838 [DEBUG] [Thread-23788] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:37:25.838 [DEBUG] [Thread-23788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:37:25.838 [DEBUG] [Thread-23788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:37:25.839 [DEBUG] [Thread-23788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:37:25.839 [DEBUG] [Thread-23788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:37:25.839 [DEBUG] [Thread-23788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:37:25.839 [DEBUG] [Thread-23788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:37:25.839 [DEBUG] [Thread-23788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:37:25.839 [DEBUG] [Thread-23788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:37:25.839 [DEBUG] [Thread-23788] [transport.py] [_log()] client lang: <none>
2026-04-15T18:37:25.839 [DEBUG] [Thread-23788] [transport.py] [_log()] server lang: <none>
2026-04-15T18:37:25.839 [DEBUG] [Thread-23788] [transport.py] [_log()] kex follows: False
2026-04-15T18:37:25.839 [DEBUG] [Thread-23788] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:37:25.839 [DEBUG] [Thread-23788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:37:25.839 [DEBUG] [Thread-23788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:37:25.840 [DEBUG] [Thread-23788] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:37:25.840 [DEBUG] [Thread-23788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:37:25.840 [DEBUG] [Thread-23788] [transport.py] [_log()] Compression: none
2026-04-15T18:37:25.840 [DEBUG] [Thread-23788] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:37:25.854 [DEBUG] [Thread-23788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:37:25.855 [DEBUG] [Thread-23788] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:37:25.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:37:25.855 [DEBUG] [Thread-23788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:37:25.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:37:25.856 [DEBUG] [Thread-23788] [transport.py] [_log()] userauth is OK
2026-04-15T18:37:25.856 [DEBUG] [Thread-23788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:37:25.856 [DEBUG] [Thread-23788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:37:25.857 [DEBUG] [Thread-23788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:37:25.857 [DEBUG] [Thread-23788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:37:25.875 [INFO] [Thread-23788] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:37:25.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:37:26.622 [DEBUG] [Thread-23788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:37:26.622 [DEBUG] [Thread-23788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:37:26.623 [DEBUG] [Thread-23788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:37:26.663 [DEBUG] [Thread-23788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:37:26.663 [DEBUG] [Thread-23788] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:37:26.666 [DEBUG] [Thread-23788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:37:26.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:37:26.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:37:26.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:37:26.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:37:26.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:37:26.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:37:26.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:37:26.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:37:26.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:37:26.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.692148 -999.00  +10.90  15.07     77   +7.10 1 1 1 1 1   380    0 2.74 -55.63 ----- 15.4 15.1 300.8 19.9 12.1 -25.4 12.0 -24.2 11.7 -22.2 11.9 -24.0
2026-04-15T18:37:26.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:37:26.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:37:26.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.692148
2026-04-15T18:37:26.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:37:26.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:37:26.688 [DEBUG] [Thread-23788] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:37:26.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:37:26.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:37:26.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:37:26.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:37:11', tmtdew=4.80971, humidity=72.3355, cloud=0.0, wind=14.8039, temperature=10.9475, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:36:41.587', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:37:26.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:37:26.924 [DEBUG] [Thread-23791] [transport.py] [_log()] starting thread (client mode): 0xf13530a0
2026-04-15T18:37:26.924 [DEBUG] [Thread-23791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:37:26.938 [DEBUG] [Thread-23791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:37:26.939 [INFO] [Thread-23791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:37:26.946 [DEBUG] [Thread-23791] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:37:26.946 [DEBUG] [Thread-23791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:37:26.946 [DEBUG] [Thread-23791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:37:26.946 [DEBUG] [Thread-23791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:37:26.946 [DEBUG] [Thread-23791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:37:26.946 [DEBUG] [Thread-23791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:37:26.947 [DEBUG] [Thread-23791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:37:26.947 [DEBUG] [Thread-23791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:37:26.947 [DEBUG] [Thread-23791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:37:26.947 [DEBUG] [Thread-23791] [transport.py] [_log()] client lang: <none>
2026-04-15T18:37:26.947 [DEBUG] [Thread-23791] [transport.py] [_log()] server lang: <none>
2026-04-15T18:37:26.947 [DEBUG] [Thread-23791] [transport.py] [_log()] kex follows: False
2026-04-15T18:37:26.947 [DEBUG] [Thread-23791] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:37:26.947 [DEBUG] [Thread-23791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:37:26.947 [DEBUG] [Thread-23791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:37:26.947 [DEBUG] [Thread-23791] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:37:26.947 [DEBUG] [Thread-23791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:37:26.948 [DEBUG] [Thread-23791] [transport.py] [_log()] Compression: none
2026-04-15T18:37:26.948 [DEBUG] [Thread-23791] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:37:27.003 [DEBUG] [Thread-23791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:37:27.003 [DEBUG] [Thread-23791] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:37:27.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:37:27.004 [DEBUG] [Thread-23791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:37:27.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:37:27.059 [DEBUG] [Thread-23791] [transport.py] [_log()] userauth is OK
2026-04-15T18:37:27.059 [DEBUG] [Thread-23791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:37:27.060 [DEBUG] [Thread-23791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:37:27.060 [DEBUG] [Thread-23791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:37:27.060 [DEBUG] [Thread-23791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:37:27.085 [INFO] [Thread-23791] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:37:27.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:37:27.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:37:27.887 [DEBUG] [Thread-23791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:37:27.888 [DEBUG] [Thread-23791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:37:27.937 [DEBUG] [Thread-23791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:37:27.937 [DEBUG] [Thread-23791] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:37:27.950 [DEBUG] [Thread-23791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:37:27.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:37:27.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')
2026-04-15T18:37:27.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T18:37:27.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:37:27.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:37:27.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:37:27.984 [DEBUG] [Thread-23791] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:37:30.399 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:37:30.400 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:37:31.494 [DEBUG] [Thread-23793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:37:46.538 [DEBUG] [Thread-23794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:37:51.126 [DEBUG] [Thread-23795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:37:58.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:37:58.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:37:58.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
2026-04-15T18:37:59.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 37, 46), 4.91928, 71.6719, 0.0, 16.1971, 11.2958, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:37:59.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:37:46
2026-04-15T18:37:59.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:38:00.150 [DEBUG] [Thread-23796] [transport.py] [_log()] starting thread (client mode): 0xee906140
2026-04-15T18:38:00.150 [DEBUG] [Thread-23796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:38:00.169 [DEBUG] [Thread-23796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:38:00.170 [INFO] [Thread-23796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:38:00.173 [DEBUG] [Thread-23796] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:38:00.173 [DEBUG] [Thread-23796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:38:00.173 [DEBUG] [Thread-23796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:38:00.173 [DEBUG] [Thread-23796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:38:00.173 [DEBUG] [Thread-23796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:38:00.173 [DEBUG] [Thread-23796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:38:00.173 [DEBUG] [Thread-23796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:38:00.173 [DEBUG] [Thread-23796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:38:00.173 [DEBUG] [Thread-23796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:38:00.174 [DEBUG] [Thread-23796] [transport.py] [_log()] client lang: <none>
2026-04-15T18:38:00.174 [DEBUG] [Thread-23796] [transport.py] [_log()] server lang: <none>
2026-04-15T18:38:00.174 [DEBUG] [Thread-23796] [transport.py] [_log()] kex follows: False
2026-04-15T18:38:00.174 [DEBUG] [Thread-23796] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:38:00.174 [DEBUG] [Thread-23796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:38:00.174 [DEBUG] [Thread-23796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:38:00.174 [DEBUG] [Thread-23796] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:38:00.174 [DEBUG] [Thread-23796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:38:00.174 [DEBUG] [Thread-23796] [transport.py] [_log()] Compression: none
2026-04-15T18:38:00.174 [DEBUG] [Thread-23796] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:38:00.190 [DEBUG] [Thread-23796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:38:00.191 [DEBUG] [Thread-23796] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:38:00.191 [DEBUG] [Thread-23796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:38:00.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:38:00.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:38:00.193 [DEBUG] [Thread-23796] [transport.py] [_log()] userauth is OK
2026-04-15T18:38:00.193 [DEBUG] [Thread-23796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:38:00.193 [DEBUG] [Thread-23796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:38:00.193 [DEBUG] [Thread-23796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:38:00.193 [DEBUG] [Thread-23796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:38:00.216 [INFO] [Thread-23796] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:38:00.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:38:01.002 [DEBUG] [Thread-23796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:38:01.003 [DEBUG] [Thread-23796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:38:01.003 [DEBUG] [Thread-23796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:38:01.043 [DEBUG] [Thread-23796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:38:01.043 [DEBUG] [Thread-23796] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:38:01.046 [DEBUG] [Thread-23796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:38:01.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:38:01.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:38:01.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:38:01.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:38:01.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:38:01.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:38:01.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:38:01.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:38:01.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:38:01.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.692842 -999.00  +10.90  15.99     76   +7.00 1 1 1 1 1   335    0 2.81 -50.40 ----- 15.9 16.0 300.6 19.3 12.0 -25.3 11.9 -24.2 11.6 -22.1 11.8 -23.8
2026-04-15T18:38:01.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:38:01.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:38:01.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.692842
2026-04-15T18:38:01.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:38:01.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:38:01.074 [DEBUG] [Thread-23796] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:38:01.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:38:01.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:38:01.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:38:01.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:37:46', tmtdew=4.91928, humidity=71.6719, cloud=0.0, wind=16.1971, temperature=11.2958, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:37:41.549', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:38:01.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:38:01.330 [DEBUG] [Thread-23799] [transport.py] [_log()] starting thread (client mode): 0xee907940
2026-04-15T18:38:01.330 [DEBUG] [Thread-23799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:38:01.345 [DEBUG] [Thread-23799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:38:01.345 [INFO] [Thread-23799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:38:01.352 [DEBUG] [Thread-23799] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:38:01.352 [DEBUG] [Thread-23799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:38:01.352 [DEBUG] [Thread-23799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:38:01.352 [DEBUG] [Thread-23799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:38:01.353 [DEBUG] [Thread-23799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:38:01.353 [DEBUG] [Thread-23799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:38:01.353 [DEBUG] [Thread-23799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:38:01.353 [DEBUG] [Thread-23799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:38:01.353 [DEBUG] [Thread-23799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:38:01.353 [DEBUG] [Thread-23799] [transport.py] [_log()] client lang: <none>
2026-04-15T18:38:01.353 [DEBUG] [Thread-23799] [transport.py] [_log()] server lang: <none>
2026-04-15T18:38:01.353 [DEBUG] [Thread-23799] [transport.py] [_log()] kex follows: False
2026-04-15T18:38:01.353 [DEBUG] [Thread-23799] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:38:01.353 [DEBUG] [Thread-23799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:38:01.353 [DEBUG] [Thread-23799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:38:01.353 [DEBUG] [Thread-23799] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:38:01.354 [DEBUG] [Thread-23799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:38:01.354 [DEBUG] [Thread-23799] [transport.py] [_log()] Compression: none
2026-04-15T18:38:01.354 [DEBUG] [Thread-23799] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:38:01.411 [DEBUG] [Thread-23799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:38:01.411 [DEBUG] [Thread-23799] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:38:01.411 [DEBUG] [Thread-23799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:38:01.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:38:01.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:38:01.471 [DEBUG] [Thread-23799] [transport.py] [_log()] userauth is OK
2026-04-15T18:38:01.471 [DEBUG] [Thread-23799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:38:01.471 [DEBUG] [Thread-23799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:38:01.471 [DEBUG] [Thread-23799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:38:01.471 [DEBUG] [Thread-23799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:38:01.494 [INFO] [Thread-23799] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:38:01.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:38:01.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:38:01.566 [DEBUG] [Thread-23801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:38:02.310 [DEBUG] [Thread-23799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:38:02.310 [DEBUG] [Thread-23799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:38:02.358 [DEBUG] [Thread-23799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:38:02.358 [DEBUG] [Thread-23799] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:38:02.367 [DEBUG] [Thread-23799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:38:02.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:38:02.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')
2026-04-15T18:38:02.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
2026-04-15T18:38:02.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:38:02.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:38:02.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:38:02.401 [DEBUG] [Thread-23799] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:38:16.603 [DEBUG] [Thread-23802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:38:31.634 [DEBUG] [Thread-23803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:38:32.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:38:32.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:38:32.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
2026-04-15T18:38:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 38, 22), 4.80144, 72.3857, 0.0, 16.0042, 10.9976, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:38:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:38:22
2026-04-15T18:38:34.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:38:34.540 [DEBUG] [Thread-23804] [transport.py] [_log()] starting thread (client mode): 0xee9ac370
2026-04-15T18:38:34.540 [DEBUG] [Thread-23804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:38:34.561 [DEBUG] [Thread-23804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:38:34.561 [INFO] [Thread-23804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:38:34.564 [DEBUG] [Thread-23804] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:38:34.564 [DEBUG] [Thread-23804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] client lang: <none>
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] server lang: <none>
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] kex follows: False
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] Compression: none
2026-04-15T18:38:34.565 [DEBUG] [Thread-23804] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:38:34.581 [DEBUG] [Thread-23804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:38:34.582 [DEBUG] [Thread-23804] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:38:34.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:38:34.582 [DEBUG] [Thread-23804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:38:34.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:38:34.583 [DEBUG] [Thread-23804] [transport.py] [_log()] userauth is OK
2026-04-15T18:38:34.583 [DEBUG] [Thread-23804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:38:34.583 [DEBUG] [Thread-23804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:38:34.583 [DEBUG] [Thread-23804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:38:34.583 [DEBUG] [Thread-23804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:38:34.602 [INFO] [Thread-23804] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:38:34.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:38:34.869 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:38:34.870 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:38:35.375 [DEBUG] [Thread-23804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:38:35.376 [DEBUG] [Thread-23804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:38:35.376 [DEBUG] [Thread-23804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:38:35.416 [DEBUG] [Thread-23804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:38:35.416 [DEBUG] [Thread-23804] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:38:35.419 [DEBUG] [Thread-23804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:38:35.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:38:35.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:38:35.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:38:35.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:38:35.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:38:35.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:38:35.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:38:35.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:38:35.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:38:35.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.693189 -999.00  +10.90  15.07     76   +7.00 1 1 1 1 1   314    0 2.68 -53.34 ----- 18.1 15.1 299.4 23.4 12.1 -25.4 11.9 -24.1 11.6 -22.2 11.8 -23.9
2026-04-15T18:38:35.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:38:35.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:38:35.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.693189
2026-04-15T18:38:35.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:38:35.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:38:35.445 [DEBUG] [Thread-23804] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:38:35.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:38:35.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:38:35.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:38:35.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:38:22', tmtdew=4.80144, humidity=72.3857, cloud=0.0, wind=16.0042, temperature=10.9976, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:38:11.530', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:38:35.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:38:35.708 [DEBUG] [Thread-23807] [transport.py] [_log()] starting thread (client mode): 0xf13e2800
2026-04-15T18:38:35.708 [DEBUG] [Thread-23807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:38:35.723 [DEBUG] [Thread-23807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:38:35.723 [INFO] [Thread-23807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:38:35.730 [DEBUG] [Thread-23807] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:38:35.730 [DEBUG] [Thread-23807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:38:35.730 [DEBUG] [Thread-23807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:38:35.731 [DEBUG] [Thread-23807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:38:35.731 [DEBUG] [Thread-23807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:38:35.731 [DEBUG] [Thread-23807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:38:35.731 [DEBUG] [Thread-23807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:38:35.731 [DEBUG] [Thread-23807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:38:35.731 [DEBUG] [Thread-23807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:38:35.731 [DEBUG] [Thread-23807] [transport.py] [_log()] client lang: <none>
2026-04-15T18:38:35.731 [DEBUG] [Thread-23807] [transport.py] [_log()] server lang: <none>
2026-04-15T18:38:35.731 [DEBUG] [Thread-23807] [transport.py] [_log()] kex follows: False
2026-04-15T18:38:35.731 [DEBUG] [Thread-23807] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:38:35.731 [DEBUG] [Thread-23807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:38:35.731 [DEBUG] [Thread-23807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:38:35.732 [DEBUG] [Thread-23807] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:38:35.732 [DEBUG] [Thread-23807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:38:35.732 [DEBUG] [Thread-23807] [transport.py] [_log()] Compression: none
2026-04-15T18:38:35.732 [DEBUG] [Thread-23807] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:38:35.789 [DEBUG] [Thread-23807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:38:35.790 [DEBUG] [Thread-23807] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:38:35.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:38:35.791 [DEBUG] [Thread-23807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:38:35.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:38:35.846 [DEBUG] [Thread-23807] [transport.py] [_log()] userauth is OK
2026-04-15T18:38:35.846 [DEBUG] [Thread-23807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:38:35.846 [DEBUG] [Thread-23807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:38:35.847 [DEBUG] [Thread-23807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:38:35.847 [DEBUG] [Thread-23807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:38:35.871 [INFO] [Thread-23807] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:38:35.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:38:35.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:38:36.670 [DEBUG] [Thread-23807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:38:36.670 [DEBUG] [Thread-23807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:38:36.718 [DEBUG] [Thread-23807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:38:36.718 [DEBUG] [Thread-23807] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:38:36.727 [DEBUG] [Thread-23807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:38:36.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:38:36.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')
2026-04-15T18:38:36.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
2026-04-15T18:38:36.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:38:36.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:38:36.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:38:36.766 [DEBUG] [Thread-23807] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:38:46.666 [DEBUG] [Thread-23809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:38:51.279 [DEBUG] [Thread-23810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:39:01.706 [DEBUG] [Thread-23811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:39:06.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:39:06.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:39:06.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
2026-04-15T18:39:08.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 38, 57), 4.78061, 72.4858, 0.0, 14.9634, 10.9816, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:39:08.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:38:57
2026-04-15T18:39:08.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:39:08.899 [DEBUG] [Thread-23812] [transport.py] [_log()] starting thread (client mode): 0xf13e12a0
2026-04-15T18:39:08.900 [DEBUG] [Thread-23812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:39:08.920 [DEBUG] [Thread-23812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:39:08.920 [INFO] [Thread-23812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:39:08.923 [DEBUG] [Thread-23812] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:39:08.923 [DEBUG] [Thread-23812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:39:08.923 [DEBUG] [Thread-23812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:39:08.923 [DEBUG] [Thread-23812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:39:08.923 [DEBUG] [Thread-23812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:39:08.923 [DEBUG] [Thread-23812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:39:08.924 [DEBUG] [Thread-23812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:39:08.924 [DEBUG] [Thread-23812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:39:08.924 [DEBUG] [Thread-23812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:39:08.924 [DEBUG] [Thread-23812] [transport.py] [_log()] client lang: <none>
2026-04-15T18:39:08.924 [DEBUG] [Thread-23812] [transport.py] [_log()] server lang: <none>
2026-04-15T18:39:08.924 [DEBUG] [Thread-23812] [transport.py] [_log()] kex follows: False
2026-04-15T18:39:08.924 [DEBUG] [Thread-23812] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:39:08.924 [DEBUG] [Thread-23812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:39:08.924 [DEBUG] [Thread-23812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:39:08.924 [DEBUG] [Thread-23812] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:39:08.924 [DEBUG] [Thread-23812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:39:08.925 [DEBUG] [Thread-23812] [transport.py] [_log()] Compression: none
2026-04-15T18:39:08.925 [DEBUG] [Thread-23812] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:39:08.941 [DEBUG] [Thread-23812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:39:08.941 [DEBUG] [Thread-23812] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:39:08.942 [DEBUG] [Thread-23812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:39:08.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:39:08.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:39:08.943 [DEBUG] [Thread-23812] [transport.py] [_log()] userauth is OK
2026-04-15T18:39:08.943 [DEBUG] [Thread-23812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:39:08.943 [DEBUG] [Thread-23812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:39:08.943 [DEBUG] [Thread-23812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:39:08.943 [DEBUG] [Thread-23812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:39:08.978 [INFO] [Thread-23812] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:39:08.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:39:09.783 [DEBUG] [Thread-23812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:39:09.783 [DEBUG] [Thread-23812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:39:09.784 [DEBUG] [Thread-23812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:39:09.825 [DEBUG] [Thread-23812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:39:09.825 [DEBUG] [Thread-23812] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:39:09.828 [DEBUG] [Thread-23812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:39:09.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:39:09.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:39:09.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:39:09.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:39:09.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:39:09.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:39:09.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:39:09.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:39:09.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:39:09.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.693537 -999.00  +10.90  14.75     77   +7.00 1 1 1 1 1   293    0 2.58 -52.08 ----- 16.4 14.8 302.6 20.0 12.0 -25.2 11.9 -24.1 11.5 -22.1 11.8 -23.8
2026-04-15T18:39:09.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:39:09.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:39:09.853 [DEBUG] [Thread-23812] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:39:09.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.693537
2026-04-15T18:39:09.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:39:09.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:39:09.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:39:09.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:39:09.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:39:09.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:38:57', tmtdew=4.78061, humidity=72.4858, cloud=0.0, wind=14.9634, temperature=10.9816, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:38:41.597', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:39:10.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:39:10.111 [DEBUG] [Thread-23815] [transport.py] [_log()] starting thread (client mode): 0xf1351300
2026-04-15T18:39:10.111 [DEBUG] [Thread-23815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:39:10.126 [DEBUG] [Thread-23815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:39:10.126 [INFO] [Thread-23815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:39:10.133 [DEBUG] [Thread-23815] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:39:10.133 [DEBUG] [Thread-23815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:39:10.133 [DEBUG] [Thread-23815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:39:10.133 [DEBUG] [Thread-23815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:39:10.133 [DEBUG] [Thread-23815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:39:10.134 [DEBUG] [Thread-23815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:39:10.134 [DEBUG] [Thread-23815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:39:10.134 [DEBUG] [Thread-23815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:39:10.134 [DEBUG] [Thread-23815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:39:10.134 [DEBUG] [Thread-23815] [transport.py] [_log()] client lang: <none>
2026-04-15T18:39:10.134 [DEBUG] [Thread-23815] [transport.py] [_log()] server lang: <none>
2026-04-15T18:39:10.134 [DEBUG] [Thread-23815] [transport.py] [_log()] kex follows: False
2026-04-15T18:39:10.134 [DEBUG] [Thread-23815] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:39:10.134 [DEBUG] [Thread-23815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:39:10.134 [DEBUG] [Thread-23815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:39:10.134 [DEBUG] [Thread-23815] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:39:10.135 [DEBUG] [Thread-23815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:39:10.135 [DEBUG] [Thread-23815] [transport.py] [_log()] Compression: none
2026-04-15T18:39:10.135 [DEBUG] [Thread-23815] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:39:10.189 [DEBUG] [Thread-23815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:39:10.189 [DEBUG] [Thread-23815] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:39:10.190 [DEBUG] [Thread-23815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:39:10.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:39:10.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:39:10.248 [DEBUG] [Thread-23815] [transport.py] [_log()] userauth is OK
2026-04-15T18:39:10.248 [DEBUG] [Thread-23815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:39:10.248 [DEBUG] [Thread-23815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:39:10.248 [DEBUG] [Thread-23815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:39:10.248 [DEBUG] [Thread-23815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:39:10.273 [INFO] [Thread-23815] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:39:10.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:39:10.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:39:11.100 [DEBUG] [Thread-23815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:39:11.100 [DEBUG] [Thread-23815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:39:11.148 [DEBUG] [Thread-23815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:39:11.148 [DEBUG] [Thread-23815] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:39:11.157 [DEBUG] [Thread-23815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:39:11.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:39:11.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')
2026-04-15T18:39:11.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
2026-04-15T18:39:11.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:39:11.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:39:11.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:39:11.192 [DEBUG] [Thread-23815] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:39:16.737 [DEBUG] [Thread-23817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:39:31.779 [DEBUG] [Thread-23818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:39:38.950 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:39:38.951 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:39:41.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:39:41.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:39:41.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
2026-04-15T18:39:42.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 39, 33), 4.8308, 72.1042, 0.0, 15.3857, 11.2637, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:39:42.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:39:33
2026-04-15T18:39:42.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:39:43.351 [DEBUG] [Thread-23819] [transport.py] [_log()] starting thread (client mode): 0xee9add50
2026-04-15T18:39:43.351 [DEBUG] [Thread-23819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:39:43.371 [DEBUG] [Thread-23819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:39:43.372 [INFO] [Thread-23819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:39:43.375 [DEBUG] [Thread-23819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:39:43.375 [DEBUG] [Thread-23819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:39:43.375 [DEBUG] [Thread-23819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:39:43.375 [DEBUG] [Thread-23819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:39:43.375 [DEBUG] [Thread-23819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:39:43.375 [DEBUG] [Thread-23819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:39:43.375 [DEBUG] [Thread-23819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:39:43.375 [DEBUG] [Thread-23819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:39:43.376 [DEBUG] [Thread-23819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:39:43.376 [DEBUG] [Thread-23819] [transport.py] [_log()] client lang: <none>
2026-04-15T18:39:43.376 [DEBUG] [Thread-23819] [transport.py] [_log()] server lang: <none>
2026-04-15T18:39:43.376 [DEBUG] [Thread-23819] [transport.py] [_log()] kex follows: False
2026-04-15T18:39:43.376 [DEBUG] [Thread-23819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:39:43.376 [DEBUG] [Thread-23819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:39:43.376 [DEBUG] [Thread-23819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:39:43.376 [DEBUG] [Thread-23819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:39:43.376 [DEBUG] [Thread-23819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:39:43.376 [DEBUG] [Thread-23819] [transport.py] [_log()] Compression: none
2026-04-15T18:39:43.376 [DEBUG] [Thread-23819] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:39:43.393 [DEBUG] [Thread-23819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:39:43.393 [DEBUG] [Thread-23819] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:39:43.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:39:43.394 [DEBUG] [Thread-23819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:39:43.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:39:43.436 [DEBUG] [Thread-23819] [transport.py] [_log()] userauth is OK
2026-04-15T18:39:43.436 [DEBUG] [Thread-23819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:39:43.436 [DEBUG] [Thread-23819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:39:43.437 [DEBUG] [Thread-23819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:39:43.437 [DEBUG] [Thread-23819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:39:43.475 [INFO] [Thread-23819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:39:43.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:39:44.254 [DEBUG] [Thread-23819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:39:44.254 [DEBUG] [Thread-23819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:39:44.255 [DEBUG] [Thread-23819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:39:44.296 [DEBUG] [Thread-23819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:39:44.296 [DEBUG] [Thread-23819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:39:44.299 [DEBUG] [Thread-23819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:39:44.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:39:44.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:39:44.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:39:44.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:39:44.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:39:44.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:39:44.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:39:44.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:39:44.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:39:44.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.693884 -999.00  +10.90  18.70     76   +7.00 1 1 1 1 1   273    0 2.72 -49.33 ----- 17.6 18.7 297.6 20.9 12.0 -25.1 11.8 -24.1 11.5 -22.0 11.8 -23.7
2026-04-15T18:39:44.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:39:44.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:39:44.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.693884
2026-04-15T18:39:44.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:39:44.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:39:44.324 [DEBUG] [Thread-23819] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:39:44.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:39:44.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:39:44.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T18:39:44.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:39:33', tmtdew=4.8308, humidity=72.1042, cloud=0.0, wind=15.3857, temperature=11.2637, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:39:11.578', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:39:44.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:39:44.583 [DEBUG] [Thread-23822] [transport.py] [_log()] starting thread (client mode): 0xf1350f10
2026-04-15T18:39:44.583 [DEBUG] [Thread-23822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:39:44.597 [DEBUG] [Thread-23822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:39:44.598 [INFO] [Thread-23822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:39:44.605 [DEBUG] [Thread-23822] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:39:44.605 [DEBUG] [Thread-23822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:39:44.605 [DEBUG] [Thread-23822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:39:44.605 [DEBUG] [Thread-23822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:39:44.605 [DEBUG] [Thread-23822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:39:44.605 [DEBUG] [Thread-23822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:39:44.605 [DEBUG] [Thread-23822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:39:44.606 [DEBUG] [Thread-23822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:39:44.606 [DEBUG] [Thread-23822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:39:44.606 [DEBUG] [Thread-23822] [transport.py] [_log()] client lang: <none>
2026-04-15T18:39:44.606 [DEBUG] [Thread-23822] [transport.py] [_log()] server lang: <none>
2026-04-15T18:39:44.606 [DEBUG] [Thread-23822] [transport.py] [_log()] kex follows: False
2026-04-15T18:39:44.606 [DEBUG] [Thread-23822] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:39:44.606 [DEBUG] [Thread-23822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:39:44.606 [DEBUG] [Thread-23822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:39:44.606 [DEBUG] [Thread-23822] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:39:44.606 [DEBUG] [Thread-23822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:39:44.606 [DEBUG] [Thread-23822] [transport.py] [_log()] Compression: none
2026-04-15T18:39:44.606 [DEBUG] [Thread-23822] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:39:44.660 [DEBUG] [Thread-23822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:39:44.661 [DEBUG] [Thread-23822] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:39:44.661 [DEBUG] [Thread-23822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:39:44.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:39:44.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:39:44.717 [DEBUG] [Thread-23822] [transport.py] [_log()] userauth is OK
2026-04-15T18:39:44.717 [DEBUG] [Thread-23822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:39:44.718 [DEBUG] [Thread-23822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:39:44.718 [DEBUG] [Thread-23822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:39:44.718 [DEBUG] [Thread-23822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:39:44.743 [INFO] [Thread-23822] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:39:44.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:39:44.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:39:45.567 [DEBUG] [Thread-23822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:39:45.567 [DEBUG] [Thread-23822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:39:45.615 [DEBUG] [Thread-23822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:39:45.615 [DEBUG] [Thread-23822] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:39:45.624 [DEBUG] [Thread-23822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:39:45.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:39:45.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')
2026-04-15T18:39:45.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
2026-04-15T18:39:45.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:39:45.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:39:45.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:39:45.658 [DEBUG] [Thread-23822] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:39:46.810 [DEBUG] [Thread-23824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:39:51.438 [DEBUG] [Thread-23825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:40:01.852 [DEBUG] [Thread-23826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:40:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:40:15.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:40:15.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
2026-04-15T18:40:16.881 [DEBUG] [Thread-23827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:40:17.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 40, 8), 4.75137, 72.6189, 0.0, 15.3515, 10.9157, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:40:17.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:40:08
2026-04-15T18:40:17.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:40:17.876 [DEBUG] [Thread-23828] [transport.py] [_log()] starting thread (client mode): 0xf13e0d00
2026-04-15T18:40:17.876 [DEBUG] [Thread-23828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:40:17.897 [DEBUG] [Thread-23828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:40:17.897 [INFO] [Thread-23828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:40:17.898 [DEBUG] [Thread-23828] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:40:17.898 [DEBUG] [Thread-23828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:40:17.898 [DEBUG] [Thread-23828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:40:17.899 [DEBUG] [Thread-23828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:40:17.899 [DEBUG] [Thread-23828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:40:17.899 [DEBUG] [Thread-23828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:40:17.899 [DEBUG] [Thread-23828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:40:17.899 [DEBUG] [Thread-23828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:40:17.899 [DEBUG] [Thread-23828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:40:17.899 [DEBUG] [Thread-23828] [transport.py] [_log()] client lang: <none>
2026-04-15T18:40:17.899 [DEBUG] [Thread-23828] [transport.py] [_log()] server lang: <none>
2026-04-15T18:40:17.899 [DEBUG] [Thread-23828] [transport.py] [_log()] kex follows: False
2026-04-15T18:40:17.899 [DEBUG] [Thread-23828] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:40:17.899 [DEBUG] [Thread-23828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:40:17.899 [DEBUG] [Thread-23828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:40:17.900 [DEBUG] [Thread-23828] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:40:17.900 [DEBUG] [Thread-23828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:40:17.900 [DEBUG] [Thread-23828] [transport.py] [_log()] Compression: none
2026-04-15T18:40:17.900 [DEBUG] [Thread-23828] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:40:17.908 [DEBUG] [Thread-23828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:40:17.909 [DEBUG] [Thread-23828] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:40:17.909 [DEBUG] [Thread-23828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:40:17.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:40:17.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:40:17.910 [DEBUG] [Thread-23828] [transport.py] [_log()] userauth is OK
2026-04-15T18:40:17.910 [DEBUG] [Thread-23828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:40:17.910 [DEBUG] [Thread-23828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:40:17.910 [DEBUG] [Thread-23828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:40:17.911 [DEBUG] [Thread-23828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:40:17.932 [INFO] [Thread-23828] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:40:17.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:40:23.728 [DEBUG] [Thread-23828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:40:23.728 [DEBUG] [Thread-23828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:40:23.729 [DEBUG] [Thread-23828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:40:23.769 [DEBUG] [Thread-23828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:40:23.769 [DEBUG] [Thread-23828] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:40:23.772 [DEBUG] [Thread-23828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:40:23.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:40:23.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:40:23.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:40:23.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:40:23.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:40:23.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:40:23.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:40:23.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:40:23.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:40:23.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.694231 -999.00  +10.90  19.62     76   +7.00 1 2 1 1 1   253    0 2.75 -48.12 ----- 19.0 19.6 305.2 21.4 11.9 -25.1 11.8 -23.9 11.5 -21.9 11.8 -23.6
2026-04-15T18:40:23.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:40:23.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:40:23.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.694231
2026-04-15T18:40:23.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:40:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:40:23.904 [DEBUG] [Thread-23828] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:40:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:40:23.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:40:23.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:40:23.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:40:08', tmtdew=4.75137, humidity=72.6189, cloud=0.0, wind=15.3515, temperature=10.9157, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:39:41.558', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:40:24.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:40:24.163 [DEBUG] [Thread-23831] [transport.py] [_log()] starting thread (client mode): 0xee9ad450
2026-04-15T18:40:24.164 [DEBUG] [Thread-23831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:40:24.179 [DEBUG] [Thread-23831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:40:24.179 [INFO] [Thread-23831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:40:24.187 [DEBUG] [Thread-23831] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:40:24.187 [DEBUG] [Thread-23831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:40:24.187 [DEBUG] [Thread-23831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:40:24.187 [DEBUG] [Thread-23831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:40:24.187 [DEBUG] [Thread-23831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:40:24.187 [DEBUG] [Thread-23831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:40:24.187 [DEBUG] [Thread-23831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:40:24.187 [DEBUG] [Thread-23831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:40:24.187 [DEBUG] [Thread-23831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:40:24.187 [DEBUG] [Thread-23831] [transport.py] [_log()] client lang: <none>
2026-04-15T18:40:24.188 [DEBUG] [Thread-23831] [transport.py] [_log()] server lang: <none>
2026-04-15T18:40:24.188 [DEBUG] [Thread-23831] [transport.py] [_log()] kex follows: False
2026-04-15T18:40:24.188 [DEBUG] [Thread-23831] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:40:24.188 [DEBUG] [Thread-23831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:40:24.188 [DEBUG] [Thread-23831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:40:24.188 [DEBUG] [Thread-23831] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:40:24.188 [DEBUG] [Thread-23831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:40:24.188 [DEBUG] [Thread-23831] [transport.py] [_log()] Compression: none
2026-04-15T18:40:24.188 [DEBUG] [Thread-23831] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:40:24.244 [DEBUG] [Thread-23831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:40:24.245 [DEBUG] [Thread-23831] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:40:24.245 [DEBUG] [Thread-23831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:40:24.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:40:24.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:40:24.301 [DEBUG] [Thread-23831] [transport.py] [_log()] userauth is OK
2026-04-15T18:40:24.301 [DEBUG] [Thread-23831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:40:24.301 [DEBUG] [Thread-23831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:40:24.301 [DEBUG] [Thread-23831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:40:24.301 [DEBUG] [Thread-23831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:40:24.326 [INFO] [Thread-23831] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:40:24.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:40:24.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:40:25.146 [DEBUG] [Thread-23831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:40:25.146 [DEBUG] [Thread-23831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:40:25.193 [DEBUG] [Thread-23831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:40:25.194 [DEBUG] [Thread-23831] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:40:25.202 [DEBUG] [Thread-23831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:40:25.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:40:25.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')
2026-04-15T18:40:25.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') -> 00000000
2026-04-15T18:40:25.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:40:25.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:40:25.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:40:25.233 [DEBUG] [Thread-23831] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:40:31.912 [DEBUG] [Thread-23833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:40:43.849 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:40:43.850 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:40:46.957 [DEBUG] [Thread-23834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:40:51.585 [DEBUG] [Thread-23835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:40:55.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:40:55.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:40:55.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
2026-04-15T18:40:56.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 40, 44), 4.77065, 72.4036, 0.0, 14.9623, 11.2646, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:40:56.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:40:44
2026-04-15T18:40:56.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:40:57.380 [DEBUG] [Thread-23836] [transport.py] [_log()] starting thread (client mode): 0xf13e1270
2026-04-15T18:40:57.381 [DEBUG] [Thread-23836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:40:57.400 [DEBUG] [Thread-23836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:40:57.400 [INFO] [Thread-23836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:40:57.404 [DEBUG] [Thread-23836] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:40:57.404 [DEBUG] [Thread-23836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:40:57.404 [DEBUG] [Thread-23836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:40:57.404 [DEBUG] [Thread-23836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:40:57.404 [DEBUG] [Thread-23836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:40:57.404 [DEBUG] [Thread-23836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:40:57.404 [DEBUG] [Thread-23836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:40:57.404 [DEBUG] [Thread-23836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:40:57.404 [DEBUG] [Thread-23836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:40:57.405 [DEBUG] [Thread-23836] [transport.py] [_log()] client lang: <none>
2026-04-15T18:40:57.405 [DEBUG] [Thread-23836] [transport.py] [_log()] server lang: <none>
2026-04-15T18:40:57.405 [DEBUG] [Thread-23836] [transport.py] [_log()] kex follows: False
2026-04-15T18:40:57.405 [DEBUG] [Thread-23836] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:40:57.405 [DEBUG] [Thread-23836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:40:57.405 [DEBUG] [Thread-23836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:40:57.405 [DEBUG] [Thread-23836] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:40:57.405 [DEBUG] [Thread-23836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:40:57.405 [DEBUG] [Thread-23836] [transport.py] [_log()] Compression: none
2026-04-15T18:40:57.405 [DEBUG] [Thread-23836] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:40:57.423 [DEBUG] [Thread-23836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:40:57.423 [DEBUG] [Thread-23836] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:40:57.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:40:57.424 [DEBUG] [Thread-23836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:40:57.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:40:57.425 [DEBUG] [Thread-23836] [transport.py] [_log()] userauth is OK
2026-04-15T18:40:57.425 [DEBUG] [Thread-23836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:40:57.425 [DEBUG] [Thread-23836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:40:57.425 [DEBUG] [Thread-23836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:40:57.425 [DEBUG] [Thread-23836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:40:57.450 [INFO] [Thread-23836] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:40:57.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:40:58.247 [DEBUG] [Thread-23836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:40:58.247 [DEBUG] [Thread-23836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:40:58.248 [DEBUG] [Thread-23836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:40:58.288 [DEBUG] [Thread-23836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:40:58.288 [DEBUG] [Thread-23836] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:40:58.290 [DEBUG] [Thread-23836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:40:58.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:40:58.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:40:58.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:40:58.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:40:58.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:40:58.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:40:58.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:40:58.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:40:58.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:40:58.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.694578 -999.00  +10.90  16.85     76   +6.90 1 2 1 1 1   235    0 2.75 -48.77 ----- 17.1 16.9 302.6 21.3 11.9 -24.9 11.8 -24.0 11.5 -21.9 11.8 -23.6
2026-04-15T18:40:58.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:40:58.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:40:58.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.694578
2026-04-15T18:40:58.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:40:58.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:40:58.316 [DEBUG] [Thread-23836] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:40:58.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:40:58.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:40:58.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:40:58.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:40:44', tmtdew=4.77065, humidity=72.4036, cloud=0.0, wind=14.9623, temperature=11.2646, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:40:11.539', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:40:58.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:40:58.574 [DEBUG] [Thread-23839] [transport.py] [_log()] starting thread (client mode): 0xf13e2620
2026-04-15T18:40:58.575 [DEBUG] [Thread-23839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:40:58.589 [DEBUG] [Thread-23839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:40:58.589 [INFO] [Thread-23839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:40:58.596 [DEBUG] [Thread-23839] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:40:58.596 [DEBUG] [Thread-23839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:40:58.596 [DEBUG] [Thread-23839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:40:58.596 [DEBUG] [Thread-23839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:40:58.596 [DEBUG] [Thread-23839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:40:58.597 [DEBUG] [Thread-23839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:40:58.597 [DEBUG] [Thread-23839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:40:58.597 [DEBUG] [Thread-23839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:40:58.597 [DEBUG] [Thread-23839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:40:58.597 [DEBUG] [Thread-23839] [transport.py] [_log()] client lang: <none>
2026-04-15T18:40:58.597 [DEBUG] [Thread-23839] [transport.py] [_log()] server lang: <none>
2026-04-15T18:40:58.597 [DEBUG] [Thread-23839] [transport.py] [_log()] kex follows: False
2026-04-15T18:40:58.597 [DEBUG] [Thread-23839] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:40:58.597 [DEBUG] [Thread-23839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:40:58.597 [DEBUG] [Thread-23839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:40:58.597 [DEBUG] [Thread-23839] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:40:58.598 [DEBUG] [Thread-23839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:40:58.598 [DEBUG] [Thread-23839] [transport.py] [_log()] Compression: none
2026-04-15T18:40:58.598 [DEBUG] [Thread-23839] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:40:58.655 [DEBUG] [Thread-23839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:40:58.656 [DEBUG] [Thread-23839] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:40:58.656 [DEBUG] [Thread-23839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:40:58.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:40:58.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:40:58.712 [DEBUG] [Thread-23839] [transport.py] [_log()] userauth is OK
2026-04-15T18:40:58.712 [DEBUG] [Thread-23839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:40:58.712 [DEBUG] [Thread-23839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:40:58.713 [DEBUG] [Thread-23839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:40:58.713 [DEBUG] [Thread-23839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:40:58.738 [INFO] [Thread-23839] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:40:58.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:40:58.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:40:59.524 [DEBUG] [Thread-23839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:40:59.525 [DEBUG] [Thread-23839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:40:59.572 [DEBUG] [Thread-23839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:40:59.572 [DEBUG] [Thread-23839] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:40:59.581 [DEBUG] [Thread-23839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:40:59.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:40:59.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')
2026-04-15T18:40:59.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
2026-04-15T18:40:59.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:40:59.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:40:59.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:40:59.616 [DEBUG] [Thread-23839] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:41:01.987 [DEBUG] [Thread-23841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:41:17.026 [DEBUG] [Thread-23842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:41:29.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:41:29.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:41:29.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
2026-04-15T18:41:30.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 41, 20), 4.69131, 72.6691, 0.0, 13.9756, 10.8661, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:41:30.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:41:20
2026-04-15T18:41:31.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:41:31.761 [DEBUG] [Thread-23843] [transport.py] [_log()] starting thread (client mode): 0xf13e2110
2026-04-15T18:41:31.761 [DEBUG] [Thread-23843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:41:31.781 [DEBUG] [Thread-23843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:41:31.781 [INFO] [Thread-23843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:41:31.782 [DEBUG] [Thread-23843] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:41:31.782 [DEBUG] [Thread-23843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:41:31.782 [DEBUG] [Thread-23843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:41:31.782 [DEBUG] [Thread-23843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:41:31.782 [DEBUG] [Thread-23843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:41:31.782 [DEBUG] [Thread-23843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:41:31.782 [DEBUG] [Thread-23843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:41:31.783 [DEBUG] [Thread-23843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:41:31.783 [DEBUG] [Thread-23843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:41:31.783 [DEBUG] [Thread-23843] [transport.py] [_log()] client lang: <none>
2026-04-15T18:41:31.783 [DEBUG] [Thread-23843] [transport.py] [_log()] server lang: <none>
2026-04-15T18:41:31.783 [DEBUG] [Thread-23843] [transport.py] [_log()] kex follows: False
2026-04-15T18:41:31.783 [DEBUG] [Thread-23843] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:41:31.783 [DEBUG] [Thread-23843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:41:31.783 [DEBUG] [Thread-23843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:41:31.783 [DEBUG] [Thread-23843] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:41:31.783 [DEBUG] [Thread-23843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:41:31.783 [DEBUG] [Thread-23843] [transport.py] [_log()] Compression: none
2026-04-15T18:41:31.783 [DEBUG] [Thread-23843] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:41:31.795 [DEBUG] [Thread-23843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:41:31.795 [DEBUG] [Thread-23843] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:41:31.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:41:31.796 [DEBUG] [Thread-23843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:41:31.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:41:31.797 [DEBUG] [Thread-23843] [transport.py] [_log()] userauth is OK
2026-04-15T18:41:31.797 [DEBUG] [Thread-23843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:41:31.797 [DEBUG] [Thread-23843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:41:31.797 [DEBUG] [Thread-23843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:41:31.797 [DEBUG] [Thread-23843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:41:31.816 [INFO] [Thread-23843] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:41:31.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:41:32.057 [DEBUG] [Thread-23845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:41:32.570 [DEBUG] [Thread-23843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:41:32.570 [DEBUG] [Thread-23843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:41:32.570 [DEBUG] [Thread-23843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:41:32.610 [DEBUG] [Thread-23843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:41:32.610 [DEBUG] [Thread-23843] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:41:32.613 [DEBUG] [Thread-23843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:41:32.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:41:32.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:41:32.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:41:32.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:41:32.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:41:32.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:41:32.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:41:32.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:41:32.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:41:32.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.694925 -999.00  +10.80  15.78     76   +6.90 1 2 1 1 1   217    0 2.86 -44.75 ----- 15.0 15.8 300.2 18.9 11.9 -25.0 11.8 -24.0 11.4 -21.9 11.8 -23.5
2026-04-15T18:41:32.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:41:32.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:41:32.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.694925
2026-04-15T18:41:32.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:41:32.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:41:32.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:41:32.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:41:32.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:41:32.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:41:20', tmtdew=4.69131, humidity=72.6691, cloud=0.0, wind=13.9756, temperature=10.8661, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:40:41.520', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:41:32.637 [DEBUG] [Thread-23843] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:41:32.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:41:32.892 [DEBUG] [Thread-23847] [transport.py] [_log()] starting thread (client mode): 0xf1352c50
2026-04-15T18:41:32.893 [DEBUG] [Thread-23847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:41:32.907 [DEBUG] [Thread-23847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:41:32.907 [INFO] [Thread-23847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:41:32.914 [DEBUG] [Thread-23847] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:41:32.915 [DEBUG] [Thread-23847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:41:32.915 [DEBUG] [Thread-23847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:41:32.915 [DEBUG] [Thread-23847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:41:32.915 [DEBUG] [Thread-23847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:41:32.915 [DEBUG] [Thread-23847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:41:32.915 [DEBUG] [Thread-23847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:41:32.915 [DEBUG] [Thread-23847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:41:32.915 [DEBUG] [Thread-23847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:41:32.915 [DEBUG] [Thread-23847] [transport.py] [_log()] client lang: <none>
2026-04-15T18:41:32.915 [DEBUG] [Thread-23847] [transport.py] [_log()] server lang: <none>
2026-04-15T18:41:32.915 [DEBUG] [Thread-23847] [transport.py] [_log()] kex follows: False
2026-04-15T18:41:32.915 [DEBUG] [Thread-23847] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:41:32.916 [DEBUG] [Thread-23847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:41:32.916 [DEBUG] [Thread-23847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:41:32.916 [DEBUG] [Thread-23847] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:41:32.916 [DEBUG] [Thread-23847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:41:32.916 [DEBUG] [Thread-23847] [transport.py] [_log()] Compression: none
2026-04-15T18:41:32.916 [DEBUG] [Thread-23847] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:41:32.971 [DEBUG] [Thread-23847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:41:32.971 [DEBUG] [Thread-23847] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:41:32.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:41:32.972 [DEBUG] [Thread-23847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:41:32.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:41:33.028 [DEBUG] [Thread-23847] [transport.py] [_log()] userauth is OK
2026-04-15T18:41:33.028 [DEBUG] [Thread-23847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:41:33.028 [DEBUG] [Thread-23847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:41:33.028 [DEBUG] [Thread-23847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:41:33.029 [DEBUG] [Thread-23847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:41:33.054 [INFO] [Thread-23847] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:41:33.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:41:33.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:41:33.897 [DEBUG] [Thread-23847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:41:33.898 [DEBUG] [Thread-23847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:41:33.945 [DEBUG] [Thread-23847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:41:33.945 [DEBUG] [Thread-23847] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:41:33.954 [DEBUG] [Thread-23847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:41:33.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:41:33.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')
2026-04-15T18:41:33.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
2026-04-15T18:41:33.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:41:33.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:41:33.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:41:33.989 [DEBUG] [Thread-23847] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:41:47.088 [DEBUG] [Thread-23849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:41:48.561 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:41:48.563 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:41:51.751 [DEBUG] [Thread-23850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:42:02.133 [DEBUG] [Thread-23851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:42:03.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:42:03.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:42:03.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T18:42:05.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 41, 55), 4.66745, 72.7851, 0.0, 15.1222, 10.8495, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:42:05.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:41:55
2026-04-15T18:42:05.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:42:06.103 [DEBUG] [Thread-23852] [transport.py] [_log()] starting thread (client mode): 0xf13e1720
2026-04-15T18:42:06.104 [DEBUG] [Thread-23852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:42:06.123 [DEBUG] [Thread-23852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:42:06.123 [INFO] [Thread-23852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:42:06.126 [DEBUG] [Thread-23852] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:42:06.126 [DEBUG] [Thread-23852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:42:06.126 [DEBUG] [Thread-23852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:42:06.126 [DEBUG] [Thread-23852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:42:06.126 [DEBUG] [Thread-23852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:42:06.126 [DEBUG] [Thread-23852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:42:06.126 [DEBUG] [Thread-23852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:42:06.126 [DEBUG] [Thread-23852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:42:06.127 [DEBUG] [Thread-23852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:42:06.127 [DEBUG] [Thread-23852] [transport.py] [_log()] client lang: <none>
2026-04-15T18:42:06.127 [DEBUG] [Thread-23852] [transport.py] [_log()] server lang: <none>
2026-04-15T18:42:06.127 [DEBUG] [Thread-23852] [transport.py] [_log()] kex follows: False
2026-04-15T18:42:06.127 [DEBUG] [Thread-23852] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:42:06.127 [DEBUG] [Thread-23852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:42:06.127 [DEBUG] [Thread-23852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:42:06.127 [DEBUG] [Thread-23852] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:42:06.127 [DEBUG] [Thread-23852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:42:06.128 [DEBUG] [Thread-23852] [transport.py] [_log()] Compression: none
2026-04-15T18:42:06.128 [DEBUG] [Thread-23852] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:42:06.145 [DEBUG] [Thread-23852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:42:06.145 [DEBUG] [Thread-23852] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:42:06.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:42:06.145 [DEBUG] [Thread-23852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:42:06.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:42:06.188 [DEBUG] [Thread-23852] [transport.py] [_log()] userauth is OK
2026-04-15T18:42:06.188 [DEBUG] [Thread-23852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:42:06.188 [DEBUG] [Thread-23852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:42:06.188 [DEBUG] [Thread-23852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:42:06.188 [DEBUG] [Thread-23852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:42:06.207 [INFO] [Thread-23852] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:42:06.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:42:07.009 [DEBUG] [Thread-23852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:42:07.010 [DEBUG] [Thread-23852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:42:07.010 [DEBUG] [Thread-23852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:42:07.050 [DEBUG] [Thread-23852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:42:07.050 [DEBUG] [Thread-23852] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:42:07.053 [DEBUG] [Thread-23852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:42:07.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:42:07.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:42:07.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:42:07.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:42:07.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:42:07.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:42:07.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:42:07.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:42:07.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:42:07.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.695273 -999.00  +10.90  12.53     77   +7.00 1 2 1 1 1   200    0 2.88 -42.18 ----- 13.9 12.5 298.0 18.3 11.9 -24.9 11.8 -24.0 11.4 -21.9 11.8 -23.6
2026-04-15T18:42:07.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:42:07.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:42:07.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.695273
2026-04-15T18:42:07.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:42:07.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:42:07.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:42:07.077 [DEBUG] [Thread-23852] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:42:07.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:42:07.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:42:07.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:41:55', tmtdew=4.66745, humidity=72.7851, cloud=0.0, wind=15.1222, temperature=10.8495, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:41:11.587', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:42:07.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:42:07.333 [DEBUG] [Thread-23855] [transport.py] [_log()] starting thread (client mode): 0xee9ad8a0
2026-04-15T18:42:07.334 [DEBUG] [Thread-23855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:42:07.348 [DEBUG] [Thread-23855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:42:07.348 [INFO] [Thread-23855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:42:07.355 [DEBUG] [Thread-23855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:42:07.356 [DEBUG] [Thread-23855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:42:07.356 [DEBUG] [Thread-23855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:42:07.356 [DEBUG] [Thread-23855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:42:07.356 [DEBUG] [Thread-23855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:42:07.356 [DEBUG] [Thread-23855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:42:07.356 [DEBUG] [Thread-23855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:42:07.356 [DEBUG] [Thread-23855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:42:07.356 [DEBUG] [Thread-23855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:42:07.356 [DEBUG] [Thread-23855] [transport.py] [_log()] client lang: <none>
2026-04-15T18:42:07.356 [DEBUG] [Thread-23855] [transport.py] [_log()] server lang: <none>
2026-04-15T18:42:07.356 [DEBUG] [Thread-23855] [transport.py] [_log()] kex follows: False
2026-04-15T18:42:07.357 [DEBUG] [Thread-23855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:42:07.357 [DEBUG] [Thread-23855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:42:07.357 [DEBUG] [Thread-23855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:42:07.357 [DEBUG] [Thread-23855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:42:07.357 [DEBUG] [Thread-23855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:42:07.357 [DEBUG] [Thread-23855] [transport.py] [_log()] Compression: none
2026-04-15T18:42:07.357 [DEBUG] [Thread-23855] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:42:07.414 [DEBUG] [Thread-23855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:42:07.414 [DEBUG] [Thread-23855] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:42:07.415 [DEBUG] [Thread-23855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:42:07.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:42:07.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:42:07.472 [DEBUG] [Thread-23855] [transport.py] [_log()] userauth is OK
2026-04-15T18:42:07.472 [DEBUG] [Thread-23855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:42:07.472 [DEBUG] [Thread-23855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:42:07.472 [DEBUG] [Thread-23855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:42:07.472 [DEBUG] [Thread-23855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:42:07.498 [INFO] [Thread-23855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:42:07.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:42:07.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:42:08.327 [DEBUG] [Thread-23855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:42:08.328 [DEBUG] [Thread-23855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:42:08.380 [DEBUG] [Thread-23855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:42:08.380 [DEBUG] [Thread-23855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:42:08.392 [DEBUG] [Thread-23855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:42:08.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:42: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')
2026-04-15T18:42:08.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
2026-04-15T18:42:08.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:42:08.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:42:08.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:42:08.439 [DEBUG] [Thread-23855] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:42:17.165 [DEBUG] [Thread-23857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:42:32.209 [DEBUG] [Thread-23858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:42:38.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:42:38.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:42:38.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
2026-04-15T18:42:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 42, 31), 4.67403, 72.7523, 0.0, 16.0042, 10.8498, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:42:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:42:31
2026-04-15T18:42:40.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:42:40.611 [DEBUG] [Thread-23859] [transport.py] [_log()] starting thread (client mode): 0xf1352c50
2026-04-15T18:42:40.612 [DEBUG] [Thread-23859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:42:40.631 [DEBUG] [Thread-23859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:42:40.631 [INFO] [Thread-23859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:42:40.634 [DEBUG] [Thread-23859] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:42:40.634 [DEBUG] [Thread-23859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:42:40.635 [DEBUG] [Thread-23859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:42:40.635 [DEBUG] [Thread-23859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:42:40.635 [DEBUG] [Thread-23859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:42:40.635 [DEBUG] [Thread-23859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:42:40.635 [DEBUG] [Thread-23859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:42:40.635 [DEBUG] [Thread-23859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:42:40.635 [DEBUG] [Thread-23859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:42:40.635 [DEBUG] [Thread-23859] [transport.py] [_log()] client lang: <none>
2026-04-15T18:42:40.635 [DEBUG] [Thread-23859] [transport.py] [_log()] server lang: <none>
2026-04-15T18:42:40.635 [DEBUG] [Thread-23859] [transport.py] [_log()] kex follows: False
2026-04-15T18:42:40.636 [DEBUG] [Thread-23859] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:42:40.636 [DEBUG] [Thread-23859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:42:40.636 [DEBUG] [Thread-23859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:42:40.636 [DEBUG] [Thread-23859] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:42:40.636 [DEBUG] [Thread-23859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:42:40.636 [DEBUG] [Thread-23859] [transport.py] [_log()] Compression: none
2026-04-15T18:42:40.636 [DEBUG] [Thread-23859] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:42:40.653 [DEBUG] [Thread-23859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:42:40.654 [DEBUG] [Thread-23859] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:42:40.654 [DEBUG] [Thread-23859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:42:40.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:42:40.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:42:40.696 [DEBUG] [Thread-23859] [transport.py] [_log()] userauth is OK
2026-04-15T18:42:40.697 [DEBUG] [Thread-23859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:42:40.697 [DEBUG] [Thread-23859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:42:40.697 [DEBUG] [Thread-23859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:42:40.697 [DEBUG] [Thread-23859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:42:40.721 [INFO] [Thread-23859] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:42:40.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:42:41.536 [DEBUG] [Thread-23859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:42:41.537 [DEBUG] [Thread-23859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:42:41.537 [DEBUG] [Thread-23859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:42:41.577 [DEBUG] [Thread-23859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:42:41.577 [DEBUG] [Thread-23859] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:42:41.580 [DEBUG] [Thread-23859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:42:41.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:42:41.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:42:41.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:42:41.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:42:41.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:42:41.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:42:41.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:42:41.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:42:41.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:42:41.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.695620 -999.00  +10.80  14.49     77   +7.00 1 2 1 1 1   185    0 2.73 -47.34 ----- 16.2 14.5 292.0 15.7 11.9 -24.8 11.8 -24.0 11.4 -21.8 11.7 -23.5
2026-04-15T18:42:41.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:42:41.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:42:41.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.695620
2026-04-15T18:42:41.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:42:41.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:42:41.605 [DEBUG] [Thread-23859] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:42:41.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:42:41.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:42:41.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:42:41.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:42:31', tmtdew=4.67403, humidity=72.7523, cloud=0.0, wind=16.0042, temperature=10.8498, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:41:41.568', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:42:41.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:42:41.861 [DEBUG] [Thread-23862] [transport.py] [_log()] starting thread (client mode): 0xf13e2140
2026-04-15T18:42:41.861 [DEBUG] [Thread-23862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:42:41.875 [DEBUG] [Thread-23862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:42:41.875 [INFO] [Thread-23862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:42:41.882 [DEBUG] [Thread-23862] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:42:41.882 [DEBUG] [Thread-23862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:42:41.882 [DEBUG] [Thread-23862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:42:41.882 [DEBUG] [Thread-23862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:42:41.882 [DEBUG] [Thread-23862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:42:41.882 [DEBUG] [Thread-23862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:42:41.883 [DEBUG] [Thread-23862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:42:41.883 [DEBUG] [Thread-23862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:42:41.883 [DEBUG] [Thread-23862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:42:41.883 [DEBUG] [Thread-23862] [transport.py] [_log()] client lang: <none>
2026-04-15T18:42:41.883 [DEBUG] [Thread-23862] [transport.py] [_log()] server lang: <none>
2026-04-15T18:42:41.883 [DEBUG] [Thread-23862] [transport.py] [_log()] kex follows: False
2026-04-15T18:42:41.883 [DEBUG] [Thread-23862] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:42:41.883 [DEBUG] [Thread-23862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:42:41.883 [DEBUG] [Thread-23862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:42:41.883 [DEBUG] [Thread-23862] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:42:41.883 [DEBUG] [Thread-23862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:42:41.883 [DEBUG] [Thread-23862] [transport.py] [_log()] Compression: none
2026-04-15T18:42:41.884 [DEBUG] [Thread-23862] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:42:41.938 [DEBUG] [Thread-23862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:42:41.938 [DEBUG] [Thread-23862] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:42:41.939 [DEBUG] [Thread-23862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:42:41.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:42:41.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:42:41.995 [DEBUG] [Thread-23862] [transport.py] [_log()] userauth is OK
2026-04-15T18:42:41.995 [DEBUG] [Thread-23862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:42:41.995 [DEBUG] [Thread-23862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:42:41.995 [DEBUG] [Thread-23862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:42:41.995 [DEBUG] [Thread-23862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:42:42.019 [INFO] [Thread-23862] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:42:42.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:42:42.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:42:42.838 [DEBUG] [Thread-23862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:42:42.838 [DEBUG] [Thread-23862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:42:42.886 [DEBUG] [Thread-23862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:42:42.886 [DEBUG] [Thread-23862] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:42:42.895 [DEBUG] [Thread-23862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:42:42.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:42:42.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')
2026-04-15T18:42:42.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
2026-04-15T18:42:42.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:42:42.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:42:42.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:42:42.930 [DEBUG] [Thread-23862] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:42:47.237 [DEBUG] [Thread-23864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:42:51.896 [DEBUG] [Thread-23865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:42:53.818 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:42:53.819 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:43:02.275 [DEBUG] [Thread-23866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:43:12.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:43:12.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:43:12.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
2026-04-15T18:43:14.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 42, 31), 4.67403, 72.7523, 0.0, 16.0042, 10.8498, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:43:14.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:42:31
2026-04-15T18:43:14.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:43:15.059 [DEBUG] [Thread-23867] [transport.py] [_log()] starting thread (client mode): 0xf1353880
2026-04-15T18:43:15.059 [DEBUG] [Thread-23867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:43:15.080 [DEBUG] [Thread-23867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:43:15.080 [INFO] [Thread-23867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:43:15.083 [DEBUG] [Thread-23867] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:43:15.083 [DEBUG] [Thread-23867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:43:15.083 [DEBUG] [Thread-23867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:43:15.083 [DEBUG] [Thread-23867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:43:15.083 [DEBUG] [Thread-23867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:43:15.083 [DEBUG] [Thread-23867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:43:15.083 [DEBUG] [Thread-23867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:43:15.083 [DEBUG] [Thread-23867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:43:15.083 [DEBUG] [Thread-23867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:43:15.084 [DEBUG] [Thread-23867] [transport.py] [_log()] client lang: <none>
2026-04-15T18:43:15.084 [DEBUG] [Thread-23867] [transport.py] [_log()] server lang: <none>
2026-04-15T18:43:15.084 [DEBUG] [Thread-23867] [transport.py] [_log()] kex follows: False
2026-04-15T18:43:15.084 [DEBUG] [Thread-23867] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:43:15.084 [DEBUG] [Thread-23867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:43:15.084 [DEBUG] [Thread-23867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:43:15.084 [DEBUG] [Thread-23867] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:43:15.084 [DEBUG] [Thread-23867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:43:15.084 [DEBUG] [Thread-23867] [transport.py] [_log()] Compression: none
2026-04-15T18:43:15.084 [DEBUG] [Thread-23867] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:43:15.100 [DEBUG] [Thread-23867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:43:15.101 [DEBUG] [Thread-23867] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:43:15.101 [DEBUG] [Thread-23867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:43:15.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:43:15.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:43:15.102 [DEBUG] [Thread-23867] [transport.py] [_log()] userauth is OK
2026-04-15T18:43:15.102 [DEBUG] [Thread-23867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:43:15.102 [DEBUG] [Thread-23867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:43:15.103 [DEBUG] [Thread-23867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:43:15.103 [DEBUG] [Thread-23867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:43:15.136 [INFO] [Thread-23867] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:43:15.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:43:15.913 [DEBUG] [Thread-23867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:43:15.913 [DEBUG] [Thread-23867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:43:15.913 [DEBUG] [Thread-23867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:43:15.954 [DEBUG] [Thread-23867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:43:15.954 [DEBUG] [Thread-23867] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:43:15.957 [DEBUG] [Thread-23867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:43:15.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:43:15.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:43:15.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:43:15.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:43:15.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:43:15.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:43:15.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:43:15.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:43:15.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:43:15.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.696314 -999.00  +10.80  15.03     77   +7.00 1 2 1 1 1   156    0 2.84 -42.97 ----- 15.2 15.0 293.2 17.1 11.8 -24.7 11.7 -24.0 11.4 -21.8 11.7 -23.5
2026-04-15T18:43:15.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:43:15.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:43:15.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.696314
2026-04-15T18:43:15.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:43:15.982 [DEBUG] [Thread-23867] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:43:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:43:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:43:15.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:43:15.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:43:15.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:42:31', tmtdew=4.67403, humidity=72.7523, cloud=0.0, wind=16.0042, temperature=10.8498, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:42:41.530', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:43:16.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:43:16.242 [DEBUG] [Thread-23870] [transport.py] [_log()] starting thread (client mode): 0xee90e470
2026-04-15T18:43:16.243 [DEBUG] [Thread-23870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:43:16.257 [DEBUG] [Thread-23870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:43:16.257 [INFO] [Thread-23870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:43:16.264 [DEBUG] [Thread-23870] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:43:16.264 [DEBUG] [Thread-23870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:43:16.265 [DEBUG] [Thread-23870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:43:16.265 [DEBUG] [Thread-23870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:43:16.265 [DEBUG] [Thread-23870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:43:16.265 [DEBUG] [Thread-23870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:43:16.265 [DEBUG] [Thread-23870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:43:16.265 [DEBUG] [Thread-23870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:43:16.265 [DEBUG] [Thread-23870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:43:16.265 [DEBUG] [Thread-23870] [transport.py] [_log()] client lang: <none>
2026-04-15T18:43:16.265 [DEBUG] [Thread-23870] [transport.py] [_log()] server lang: <none>
2026-04-15T18:43:16.265 [DEBUG] [Thread-23870] [transport.py] [_log()] kex follows: False
2026-04-15T18:43:16.265 [DEBUG] [Thread-23870] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:43:16.265 [DEBUG] [Thread-23870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:43:16.265 [DEBUG] [Thread-23870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:43:16.265 [DEBUG] [Thread-23870] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:43:16.266 [DEBUG] [Thread-23870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:43:16.266 [DEBUG] [Thread-23870] [transport.py] [_log()] Compression: none
2026-04-15T18:43:16.266 [DEBUG] [Thread-23870] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:43:16.321 [DEBUG] [Thread-23870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:43:16.321 [DEBUG] [Thread-23870] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:43:16.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:43:16.322 [DEBUG] [Thread-23870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:43:16.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:43:16.378 [DEBUG] [Thread-23870] [transport.py] [_log()] userauth is OK
2026-04-15T18:43:16.379 [DEBUG] [Thread-23870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:43:16.379 [DEBUG] [Thread-23870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:43:16.379 [DEBUG] [Thread-23870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:43:16.379 [DEBUG] [Thread-23870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:43:16.397 [INFO] [Thread-23870] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:43:16.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:43:16.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:43:17.215 [DEBUG] [Thread-23870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:43:17.215 [DEBUG] [Thread-23870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:43:17.263 [DEBUG] [Thread-23870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:43:17.263 [DEBUG] [Thread-23870] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:43:17.272 [DEBUG] [Thread-23870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:43:17.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:43:17.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')
2026-04-15T18:43:17.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
2026-04-15T18:43:17.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:43:17.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:43:17.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:43:17.306 [DEBUG] [Thread-23872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:43:17.307 [DEBUG] [Thread-23870] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:43:32.347 [DEBUG] [Thread-23873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:43:47.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:43:47.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:43:47.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
2026-04-15T18:43:47.378 [DEBUG] [Thread-23874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:43:48.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 43, 6), 4.69936, 72.6199, 0.0, 15.8454, 10.8168, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:43:48.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:43:06
2026-04-15T18:43:49.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:43:49.505 [DEBUG] [Thread-23875] [transport.py] [_log()] starting thread (client mode): 0xee904b20
2026-04-15T18:43:49.506 [DEBUG] [Thread-23875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:43:49.526 [DEBUG] [Thread-23875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:43:49.526 [INFO] [Thread-23875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:43:49.529 [DEBUG] [Thread-23875] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:43:49.529 [DEBUG] [Thread-23875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:43:49.530 [DEBUG] [Thread-23875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:43:49.530 [DEBUG] [Thread-23875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:43:49.530 [DEBUG] [Thread-23875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:43:49.530 [DEBUG] [Thread-23875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:43:49.530 [DEBUG] [Thread-23875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:43:49.530 [DEBUG] [Thread-23875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:43:49.530 [DEBUG] [Thread-23875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:43:49.530 [DEBUG] [Thread-23875] [transport.py] [_log()] client lang: <none>
2026-04-15T18:43:49.530 [DEBUG] [Thread-23875] [transport.py] [_log()] server lang: <none>
2026-04-15T18:43:49.530 [DEBUG] [Thread-23875] [transport.py] [_log()] kex follows: False
2026-04-15T18:43:49.530 [DEBUG] [Thread-23875] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:43:49.530 [DEBUG] [Thread-23875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:43:49.531 [DEBUG] [Thread-23875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:43:49.531 [DEBUG] [Thread-23875] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:43:49.531 [DEBUG] [Thread-23875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:43:49.531 [DEBUG] [Thread-23875] [transport.py] [_log()] Compression: none
2026-04-15T18:43:49.531 [DEBUG] [Thread-23875] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:43:49.547 [DEBUG] [Thread-23875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:43:49.547 [DEBUG] [Thread-23875] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:43:49.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:43:49.548 [DEBUG] [Thread-23875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:43:49.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:43:49.549 [DEBUG] [Thread-23875] [transport.py] [_log()] userauth is OK
2026-04-15T18:43:49.550 [DEBUG] [Thread-23875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:43:49.550 [DEBUG] [Thread-23875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:43:49.550 [DEBUG] [Thread-23875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:43:49.550 [DEBUG] [Thread-23875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:43:49.574 [INFO] [Thread-23875] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:43:49.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:43:50.323 [DEBUG] [Thread-23875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:43:50.323 [DEBUG] [Thread-23875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:43:50.323 [DEBUG] [Thread-23875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:43:50.364 [DEBUG] [Thread-23875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:43:50.364 [DEBUG] [Thread-23875] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:43:50.370 [DEBUG] [Thread-23875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:43:50.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:43:50.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:43:50.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:43:50.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:43:50.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:43:50.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:43:50.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:43:50.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:43:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:43:50.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.696661 -999.00  +10.80  16.09     76   +6.90 1 2 1 1 1   143    0 2.92 -40.76 ----- 16.9 16.1 296.6 19.2 11.8 -24.7 11.7 -24.0 11.3 -21.8 11.7 -23.3
2026-04-15T18:43:50.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:43:50.392 [DEBUG] [Thread-23875] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:43:50.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:43:50.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.696661
2026-04-15T18:43:50.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:43:50.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:43:50.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:43:50.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:43:50.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:43:50.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:43:06', tmtdew=4.69936, humidity=72.6199, cloud=0.0, wind=15.8454, temperature=10.8168, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:43:11.510', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:43:50.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:43:50.655 [DEBUG] [Thread-23878] [transport.py] [_log()] starting thread (client mode): 0xee91cfa0
2026-04-15T18:43:50.655 [DEBUG] [Thread-23878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:43:50.669 [DEBUG] [Thread-23878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:43:50.669 [INFO] [Thread-23878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:43:50.676 [DEBUG] [Thread-23878] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:43:50.676 [DEBUG] [Thread-23878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:43:50.677 [DEBUG] [Thread-23878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:43:50.677 [DEBUG] [Thread-23878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:43:50.677 [DEBUG] [Thread-23878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:43:50.677 [DEBUG] [Thread-23878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:43:50.677 [DEBUG] [Thread-23878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:43:50.677 [DEBUG] [Thread-23878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:43:50.677 [DEBUG] [Thread-23878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:43:50.677 [DEBUG] [Thread-23878] [transport.py] [_log()] client lang: <none>
2026-04-15T18:43:50.677 [DEBUG] [Thread-23878] [transport.py] [_log()] server lang: <none>
2026-04-15T18:43:50.677 [DEBUG] [Thread-23878] [transport.py] [_log()] kex follows: False
2026-04-15T18:43:50.677 [DEBUG] [Thread-23878] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:43:50.677 [DEBUG] [Thread-23878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:43:50.678 [DEBUG] [Thread-23878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:43:50.678 [DEBUG] [Thread-23878] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:43:50.678 [DEBUG] [Thread-23878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:43:50.678 [DEBUG] [Thread-23878] [transport.py] [_log()] Compression: none
2026-04-15T18:43:50.678 [DEBUG] [Thread-23878] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:43:50.733 [DEBUG] [Thread-23878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:43:50.733 [DEBUG] [Thread-23878] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:43:50.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:43:50.734 [DEBUG] [Thread-23878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:43:50.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:43:50.790 [DEBUG] [Thread-23878] [transport.py] [_log()] userauth is OK
2026-04-15T18:43:50.790 [DEBUG] [Thread-23878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:43:50.790 [DEBUG] [Thread-23878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:43:50.791 [DEBUG] [Thread-23878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:43:50.791 [DEBUG] [Thread-23878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:43:50.818 [INFO] [Thread-23878] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:43:50.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:43:50.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:43:51.681 [DEBUG] [Thread-23878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:43:51.681 [DEBUG] [Thread-23878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:43:51.729 [DEBUG] [Thread-23878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:43:51.729 [DEBUG] [Thread-23878] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:43:51.738 [DEBUG] [Thread-23878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:43:51.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:43:51.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')
2026-04-15T18:43:51.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
2026-04-15T18:43:51.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:43:51.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:43:51.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:43:51.773 [DEBUG] [Thread-23878] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:43:52.046 [DEBUG] [Thread-23880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:43:58.708 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:43:58.710 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:44:02.410 [DEBUG] [Thread-23881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:44:17.455 [DEBUG] [Thread-23882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:44:21.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:44:21.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:44:21.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
2026-04-15T18:44:23.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 43, 43), 4.80661, 72.2067, 0.0, 16.2677, 11.1669, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:44:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:43:43
2026-04-15T18:44:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:44:23.962 [DEBUG] [Thread-23883] [transport.py] [_log()] starting thread (client mode): 0xee9078e0
2026-04-15T18:44:23.962 [DEBUG] [Thread-23883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:44:23.976 [DEBUG] [Thread-23883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:44:23.976 [INFO] [Thread-23883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:44:23.978 [DEBUG] [Thread-23883] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:44:23.978 [DEBUG] [Thread-23883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:44:23.978 [DEBUG] [Thread-23883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:44:23.978 [DEBUG] [Thread-23883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:44:23.978 [DEBUG] [Thread-23883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:44:23.978 [DEBUG] [Thread-23883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:44:23.978 [DEBUG] [Thread-23883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:44:23.978 [DEBUG] [Thread-23883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:44:23.978 [DEBUG] [Thread-23883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:44:23.979 [DEBUG] [Thread-23883] [transport.py] [_log()] client lang: <none>
2026-04-15T18:44:23.979 [DEBUG] [Thread-23883] [transport.py] [_log()] server lang: <none>
2026-04-15T18:44:23.979 [DEBUG] [Thread-23883] [transport.py] [_log()] kex follows: False
2026-04-15T18:44:23.979 [DEBUG] [Thread-23883] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:44:23.979 [DEBUG] [Thread-23883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:44:23.979 [DEBUG] [Thread-23883] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:44:23.979 [DEBUG] [Thread-23883] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:44:23.979 [DEBUG] [Thread-23883] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:44:23.979 [DEBUG] [Thread-23883] [transport.py] [_log()] Compression: none
2026-04-15T18:44:23.979 [DEBUG] [Thread-23883] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:44:23.988 [DEBUG] [Thread-23883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:44:23.989 [DEBUG] [Thread-23883] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:44:23.989 [DEBUG] [Thread-23883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:44:23.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:44:23.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:44:23.990 [DEBUG] [Thread-23883] [transport.py] [_log()] userauth is OK
2026-04-15T18:44:23.990 [DEBUG] [Thread-23883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:44:23.990 [DEBUG] [Thread-23883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:44:23.991 [DEBUG] [Thread-23883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:44:23.991 [DEBUG] [Thread-23883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:44:24.011 [INFO] [Thread-23883] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:44:24.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:44:24.625 [DEBUG] [Thread-23883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:44:24.626 [DEBUG] [Thread-23883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:44:24.626 [DEBUG] [Thread-23883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:44:24.667 [DEBUG] [Thread-23883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:44:24.667 [DEBUG] [Thread-23883] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:44:24.670 [DEBUG] [Thread-23883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:44:24.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:44:24.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:44:24.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:44:24.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:44:24.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:44:24.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:44:24.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:44:24.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:44:24.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:44:24.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.697356 -999.00  +10.80  15.31     76   +6.90 1 2 1 1 1   119    0 2.92 -38.46 ----- 15.1 15.3 299.8 21.1 11.8 -24.8 11.7 -23.9 11.3 -21.5 11.6 -23.5
2026-04-15T18:44:24.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:44:24.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:44:24.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.697356
2026-04-15T18:44:24.693 [DEBUG] [Thread-23883] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:44:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:44:24.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:44:24.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:44:24.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:44:24.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:44:24.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:43:43', tmtdew=4.80661, humidity=72.2067, cloud=0.0, wind=16.2677, temperature=11.1669, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:44:11.558', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:44:24.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:44:24.958 [DEBUG] [Thread-23886] [transport.py] [_log()] starting thread (client mode): 0xf13e2a40
2026-04-15T18:44:24.959 [DEBUG] [Thread-23886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:44:24.972 [DEBUG] [Thread-23886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:44:24.972 [INFO] [Thread-23886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:44:24.980 [DEBUG] [Thread-23886] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:44:24.980 [DEBUG] [Thread-23886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:44:24.980 [DEBUG] [Thread-23886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:44:24.980 [DEBUG] [Thread-23886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:44:24.980 [DEBUG] [Thread-23886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:44:24.980 [DEBUG] [Thread-23886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:44:24.980 [DEBUG] [Thread-23886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:44:24.981 [DEBUG] [Thread-23886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:44:24.981 [DEBUG] [Thread-23886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:44:24.981 [DEBUG] [Thread-23886] [transport.py] [_log()] client lang: <none>
2026-04-15T18:44:24.981 [DEBUG] [Thread-23886] [transport.py] [_log()] server lang: <none>
2026-04-15T18:44:24.981 [DEBUG] [Thread-23886] [transport.py] [_log()] kex follows: False
2026-04-15T18:44:24.981 [DEBUG] [Thread-23886] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:44:24.981 [DEBUG] [Thread-23886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:44:24.981 [DEBUG] [Thread-23886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:44:24.981 [DEBUG] [Thread-23886] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:44:24.981 [DEBUG] [Thread-23886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:44:24.981 [DEBUG] [Thread-23886] [transport.py] [_log()] Compression: none
2026-04-15T18:44:24.981 [DEBUG] [Thread-23886] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:44:25.037 [DEBUG] [Thread-23886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:44:25.037 [DEBUG] [Thread-23886] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:44:25.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:44:25.038 [DEBUG] [Thread-23886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:44:25.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:44:25.094 [DEBUG] [Thread-23886] [transport.py] [_log()] userauth is OK
2026-04-15T18:44:25.094 [DEBUG] [Thread-23886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:44:25.094 [DEBUG] [Thread-23886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:44:25.095 [DEBUG] [Thread-23886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:44:25.095 [DEBUG] [Thread-23886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:44:25.120 [INFO] [Thread-23886] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:44:25.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:44:25.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:44:25.951 [DEBUG] [Thread-23886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:44:25.951 [DEBUG] [Thread-23886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:44:25.999 [DEBUG] [Thread-23886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:44:25.999 [DEBUG] [Thread-23886] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:44:26.008 [DEBUG] [Thread-23886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:44:26.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:44:26.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')
2026-04-15T18:44:26.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') -> 00000000
2026-04-15T18:44:26.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:44:26.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:44:26.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:44:26.042 [DEBUG] [Thread-23886] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:44:32.487 [DEBUG] [Thread-23888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:44:47.529 [DEBUG] [Thread-23889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:44:52.197 [DEBUG] [Thread-23890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:44:56.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:44:56.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:44:56.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
2026-04-15T18:44:57.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 44, 18), 4.68756, 72.6697, 0.0, 16.2688, 10.7671, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:44:57.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:44:18
2026-04-15T18:44:57.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:44:58.409 [DEBUG] [Thread-23891] [transport.py] [_log()] starting thread (client mode): 0xee9072b0
2026-04-15T18:44:58.409 [DEBUG] [Thread-23891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:44:58.428 [DEBUG] [Thread-23891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:44:58.428 [INFO] [Thread-23891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:44:58.430 [DEBUG] [Thread-23891] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:44:58.430 [DEBUG] [Thread-23891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:44:58.430 [DEBUG] [Thread-23891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:44:58.430 [DEBUG] [Thread-23891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:44:58.431 [DEBUG] [Thread-23891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:44:58.431 [DEBUG] [Thread-23891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:44:58.431 [DEBUG] [Thread-23891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:44:58.431 [DEBUG] [Thread-23891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:44:58.431 [DEBUG] [Thread-23891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:44:58.431 [DEBUG] [Thread-23891] [transport.py] [_log()] client lang: <none>
2026-04-15T18:44:58.431 [DEBUG] [Thread-23891] [transport.py] [_log()] server lang: <none>
2026-04-15T18:44:58.431 [DEBUG] [Thread-23891] [transport.py] [_log()] kex follows: False
2026-04-15T18:44:58.431 [DEBUG] [Thread-23891] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:44:58.431 [DEBUG] [Thread-23891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:44:58.431 [DEBUG] [Thread-23891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:44:58.431 [DEBUG] [Thread-23891] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:44:58.432 [DEBUG] [Thread-23891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:44:58.432 [DEBUG] [Thread-23891] [transport.py] [_log()] Compression: none
2026-04-15T18:44:58.432 [DEBUG] [Thread-23891] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:44:58.444 [DEBUG] [Thread-23891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:44:58.444 [DEBUG] [Thread-23891] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:44:58.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:44:58.445 [DEBUG] [Thread-23891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:44:58.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:44:58.446 [DEBUG] [Thread-23891] [transport.py] [_log()] userauth is OK
2026-04-15T18:44:58.446 [DEBUG] [Thread-23891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:44:58.446 [DEBUG] [Thread-23891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:44:58.446 [DEBUG] [Thread-23891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:44:58.446 [DEBUG] [Thread-23891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:44:58.483 [INFO] [Thread-23891] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:44:58.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:44:59.053 [DEBUG] [Thread-23891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:44:59.053 [DEBUG] [Thread-23891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:44:59.054 [DEBUG] [Thread-23891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:44:59.094 [DEBUG] [Thread-23891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:44:59.094 [DEBUG] [Thread-23891] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:44:59.097 [DEBUG] [Thread-23891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:44:59.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:44:59.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:44:59.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:44:59.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:44:59.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:44:59.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:44:59.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:44:59.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:44:59.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:44:59.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.697704 -999.00  +10.80  12.84     77   +6.90 1 2 1 1 1   109    0 2.95 -38.53 ----- 15.4 12.8 301.4 17.4 11.8 -24.7 11.6 -23.9 11.3 -21.6 11.6 -23.5
2026-04-15T18:44:59.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:44:59.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:44:59.119 [DEBUG] [Thread-23891] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:44:59.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.697704
2026-04-15T18:44:59.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:44:59.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:44:59.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:44:59.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:44:59.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:44:59.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:44:18', tmtdew=4.68756, humidity=72.6697, cloud=0.0, wind=16.2688, temperature=10.7671, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:44:41.626', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:44:59.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:44:59.378 [DEBUG] [Thread-23894] [transport.py] [_log()] starting thread (client mode): 0xee905060
2026-04-15T18:44:59.379 [DEBUG] [Thread-23894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:44:59.393 [DEBUG] [Thread-23894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:44:59.393 [INFO] [Thread-23894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:44:59.400 [DEBUG] [Thread-23894] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:44:59.400 [DEBUG] [Thread-23894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:44:59.401 [DEBUG] [Thread-23894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:44:59.401 [DEBUG] [Thread-23894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:44:59.401 [DEBUG] [Thread-23894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:44:59.401 [DEBUG] [Thread-23894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:44:59.401 [DEBUG] [Thread-23894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:44:59.401 [DEBUG] [Thread-23894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:44:59.401 [DEBUG] [Thread-23894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:44:59.401 [DEBUG] [Thread-23894] [transport.py] [_log()] client lang: <none>
2026-04-15T18:44:59.401 [DEBUG] [Thread-23894] [transport.py] [_log()] server lang: <none>
2026-04-15T18:44:59.401 [DEBUG] [Thread-23894] [transport.py] [_log()] kex follows: False
2026-04-15T18:44:59.401 [DEBUG] [Thread-23894] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:44:59.401 [DEBUG] [Thread-23894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:44:59.402 [DEBUG] [Thread-23894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:44:59.402 [DEBUG] [Thread-23894] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:44:59.402 [DEBUG] [Thread-23894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:44:59.402 [DEBUG] [Thread-23894] [transport.py] [_log()] Compression: none
2026-04-15T18:44:59.402 [DEBUG] [Thread-23894] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:44:59.456 [DEBUG] [Thread-23894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:44:59.456 [DEBUG] [Thread-23894] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:44:59.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:44:59.457 [DEBUG] [Thread-23894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:44:59.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:44:59.513 [DEBUG] [Thread-23894] [transport.py] [_log()] userauth is OK
2026-04-15T18:44:59.513 [DEBUG] [Thread-23894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:44:59.514 [DEBUG] [Thread-23894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:44:59.514 [DEBUG] [Thread-23894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:44:59.514 [DEBUG] [Thread-23894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:44:59.539 [INFO] [Thread-23894] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:44:59.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:44:59.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:45:00.374 [DEBUG] [Thread-23894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:45:00.374 [DEBUG] [Thread-23894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:45:00.422 [DEBUG] [Thread-23894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:45:00.423 [DEBUG] [Thread-23894] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:45:00.431 [DEBUG] [Thread-23894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:45:00.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:45:00.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')
2026-04-15T18:45:00.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
2026-04-15T18:45:00.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:45:00.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:45:00.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:45:00.462 [DEBUG] [Thread-23894] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:45:02.559 [DEBUG] [Thread-23896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:45:03.214 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:45:03.215 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:45:17.594 [DEBUG] [Thread-23897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:45:30.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:45:30.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:45:30.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
2026-04-15T18:45:31.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 44, 54), 4.74428, 72.5055, 0.0, 17.0086, 11.1009, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:45:31.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:44:54
2026-04-15T18:45:32.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:45:32.624 [DEBUG] [Thread-23898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:45:32.768 [DEBUG] [Thread-23899] [transport.py] [_log()] starting thread (client mode): 0xee906fe0
2026-04-15T18:45:32.769 [DEBUG] [Thread-23899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:45:32.789 [DEBUG] [Thread-23899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:45:32.789 [INFO] [Thread-23899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:45:32.791 [DEBUG] [Thread-23899] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:45:32.791 [DEBUG] [Thread-23899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:45:32.791 [DEBUG] [Thread-23899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:45:32.791 [DEBUG] [Thread-23899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:45:32.791 [DEBUG] [Thread-23899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:45:32.791 [DEBUG] [Thread-23899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:45:32.792 [DEBUG] [Thread-23899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:45:32.792 [DEBUG] [Thread-23899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:45:32.792 [DEBUG] [Thread-23899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:45:32.792 [DEBUG] [Thread-23899] [transport.py] [_log()] client lang: <none>
2026-04-15T18:45:32.792 [DEBUG] [Thread-23899] [transport.py] [_log()] server lang: <none>
2026-04-15T18:45:32.792 [DEBUG] [Thread-23899] [transport.py] [_log()] kex follows: False
2026-04-15T18:45:32.792 [DEBUG] [Thread-23899] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:45:32.792 [DEBUG] [Thread-23899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:45:32.792 [DEBUG] [Thread-23899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:45:32.792 [DEBUG] [Thread-23899] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:45:32.792 [DEBUG] [Thread-23899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:45:32.792 [DEBUG] [Thread-23899] [transport.py] [_log()] Compression: none
2026-04-15T18:45:32.793 [DEBUG] [Thread-23899] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:45:32.804 [DEBUG] [Thread-23899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:45:32.804 [DEBUG] [Thread-23899] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:45:32.805 [DEBUG] [Thread-23899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:45:32.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:45:32.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:45:32.807 [DEBUG] [Thread-23899] [transport.py] [_log()] userauth is OK
2026-04-15T18:45:32.807 [DEBUG] [Thread-23899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:45:32.807 [DEBUG] [Thread-23899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:45:32.807 [DEBUG] [Thread-23899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:45:32.807 [DEBUG] [Thread-23899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:45:32.831 [INFO] [Thread-23899] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:45:32.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:45:33.456 [DEBUG] [Thread-23899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:45:33.456 [DEBUG] [Thread-23899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:45:33.457 [DEBUG] [Thread-23899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:45:33.497 [DEBUG] [Thread-23899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:45:33.497 [DEBUG] [Thread-23899] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:45:33.500 [DEBUG] [Thread-23899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:45:33.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:45:33.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:45:33.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:45:33.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:45:33.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:45:33.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:45:33.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:45:33.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:45:33.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:45:33.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.698050 -999.00  +10.80  15.51     76   +6.90 1 2 1 1 1    99    0 2.92 -37.92 ----- 14.1 15.5 301.0 19.8 11.8 -24.8 11.6 -23.9 11.3 -21.5 11.6 -23.4
2026-04-15T18:45:33.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:45:33.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:45:33.522 [DEBUG] [Thread-23899] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:45:33.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.698050
2026-04-15T18:45:33.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:45:33.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:45:33.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:45:33.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:45:33.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:45:33.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:44:54', tmtdew=4.74428, humidity=72.5055, cloud=0.0, wind=17.0086, temperature=11.1009, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:45:11.520', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:45:33.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:45:33.782 [DEBUG] [Thread-23902] [transport.py] [_log()] starting thread (client mode): 0xee907820
2026-04-15T18:45:33.782 [DEBUG] [Thread-23902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:45:33.796 [DEBUG] [Thread-23902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:45:33.796 [INFO] [Thread-23902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:45:33.803 [DEBUG] [Thread-23902] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:45:33.803 [DEBUG] [Thread-23902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:45:33.803 [DEBUG] [Thread-23902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:45:33.804 [DEBUG] [Thread-23902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:45:33.804 [DEBUG] [Thread-23902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:45:33.804 [DEBUG] [Thread-23902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:45:33.804 [DEBUG] [Thread-23902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:45:33.804 [DEBUG] [Thread-23902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:45:33.804 [DEBUG] [Thread-23902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:45:33.804 [DEBUG] [Thread-23902] [transport.py] [_log()] client lang: <none>
2026-04-15T18:45:33.804 [DEBUG] [Thread-23902] [transport.py] [_log()] server lang: <none>
2026-04-15T18:45:33.804 [DEBUG] [Thread-23902] [transport.py] [_log()] kex follows: False
2026-04-15T18:45:33.804 [DEBUG] [Thread-23902] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:45:33.804 [DEBUG] [Thread-23902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:45:33.804 [DEBUG] [Thread-23902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:45:33.805 [DEBUG] [Thread-23902] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:45:33.805 [DEBUG] [Thread-23902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:45:33.805 [DEBUG] [Thread-23902] [transport.py] [_log()] Compression: none
2026-04-15T18:45:33.805 [DEBUG] [Thread-23902] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:45:33.860 [DEBUG] [Thread-23902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:45:33.860 [DEBUG] [Thread-23902] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:45:33.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:45:33.861 [DEBUG] [Thread-23902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:45:33.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:45:33.917 [DEBUG] [Thread-23902] [transport.py] [_log()] userauth is OK
2026-04-15T18:45:33.917 [DEBUG] [Thread-23902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:45:33.917 [DEBUG] [Thread-23902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:45:33.917 [DEBUG] [Thread-23902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:45:33.917 [DEBUG] [Thread-23902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:45:33.941 [INFO] [Thread-23902] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:45:33.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:45:33.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:45:34.757 [DEBUG] [Thread-23902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:45:34.757 [DEBUG] [Thread-23902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:45:34.805 [DEBUG] [Thread-23902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:45:34.805 [DEBUG] [Thread-23902] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:45:34.813 [DEBUG] [Thread-23902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:45:34.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:45:34.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')
2026-04-15T18:45:34.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
2026-04-15T18:45:34.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:45:34.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:45:34.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:45:34.845 [DEBUG] [Thread-23902] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:45:47.653 [DEBUG] [Thread-23904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:45:52.361 [DEBUG] [Thread-23905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:46:02.698 [DEBUG] [Thread-23906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:46:04.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:46:04.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:46:04.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
2026-04-15T18:46:06.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 45, 30), 4.66879, 72.7695, 0.0, 16.4804, 10.7506, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:46:06.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:45:30
2026-04-15T18:46:06.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:46:07.017 [DEBUG] [Thread-23907] [transport.py] [_log()] starting thread (client mode): 0xf13c8730
2026-04-15T18:46:07.017 [DEBUG] [Thread-23907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:46:07.036 [DEBUG] [Thread-23907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:46:07.037 [INFO] [Thread-23907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:46:07.040 [DEBUG] [Thread-23907] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:46:07.040 [DEBUG] [Thread-23907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:46:07.040 [DEBUG] [Thread-23907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:46:07.040 [DEBUG] [Thread-23907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:46:07.040 [DEBUG] [Thread-23907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:46:07.040 [DEBUG] [Thread-23907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:46:07.040 [DEBUG] [Thread-23907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:46:07.040 [DEBUG] [Thread-23907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:46:07.040 [DEBUG] [Thread-23907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:46:07.040 [DEBUG] [Thread-23907] [transport.py] [_log()] client lang: <none>
2026-04-15T18:46:07.040 [DEBUG] [Thread-23907] [transport.py] [_log()] server lang: <none>
2026-04-15T18:46:07.040 [DEBUG] [Thread-23907] [transport.py] [_log()] kex follows: False
2026-04-15T18:46:07.040 [DEBUG] [Thread-23907] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:46:07.040 [DEBUG] [Thread-23907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:46:07.041 [DEBUG] [Thread-23907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:46:07.041 [DEBUG] [Thread-23907] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:46:07.041 [DEBUG] [Thread-23907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:46:07.041 [DEBUG] [Thread-23907] [transport.py] [_log()] Compression: none
2026-04-15T18:46:07.041 [DEBUG] [Thread-23907] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:46:07.051 [DEBUG] [Thread-23907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:46:07.051 [DEBUG] [Thread-23907] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:46:07.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:46:07.052 [DEBUG] [Thread-23907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:46:07.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:46:07.053 [DEBUG] [Thread-23907] [transport.py] [_log()] userauth is OK
2026-04-15T18:46:07.053 [DEBUG] [Thread-23907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:46:07.053 [DEBUG] [Thread-23907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:46:07.053 [DEBUG] [Thread-23907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:46:07.053 [DEBUG] [Thread-23907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:46:07.075 [INFO] [Thread-23907] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:46:07.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:46:07.664 [DEBUG] [Thread-23907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:46:07.664 [DEBUG] [Thread-23907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:46:07.665 [DEBUG] [Thread-23907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:46:07.705 [DEBUG] [Thread-23907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:46:07.705 [DEBUG] [Thread-23907] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:46:07.707 [DEBUG] [Thread-23907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:46:07.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:46:07.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:46:07.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:46:07.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:46:07.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:46:07.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:46:07.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:46:07.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:46:07.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:46:07.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.698397 -999.00  +10.70  15.78     76   +6.80 1 2 1 1 1    90    0 2.95 -37.61 ----- 17.6 15.8 297.8 18.4 11.8 -24.7 11.7 -23.9 11.3 -21.5 11.6 -23.5
2026-04-15T18:46:07.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:46:07.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:46:07.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.698397
2026-04-15T18:46:07.726 [DEBUG] [Thread-23907] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:46:07.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:46:07.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:46:07.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:46:07.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:46:07.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:46:07.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:45:30', tmtdew=4.66879, humidity=72.7695, cloud=0.0, wind=16.4804, temperature=10.7506, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:45:41.501', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:46:07.945 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:46:07.945 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:46:07.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:46:07.991 [DEBUG] [Thread-23910] [transport.py] [_log()] starting thread (client mode): 0xf1337100
2026-04-15T18:46:07.991 [DEBUG] [Thread-23910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:46:08.008 [DEBUG] [Thread-23910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:46:08.008 [INFO] [Thread-23910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:46:08.015 [DEBUG] [Thread-23910] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:46:08.015 [DEBUG] [Thread-23910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:46:08.015 [DEBUG] [Thread-23910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:46:08.015 [DEBUG] [Thread-23910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:46:08.015 [DEBUG] [Thread-23910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:46:08.015 [DEBUG] [Thread-23910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:46:08.015 [DEBUG] [Thread-23910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:46:08.015 [DEBUG] [Thread-23910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:46:08.015 [DEBUG] [Thread-23910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:46:08.016 [DEBUG] [Thread-23910] [transport.py] [_log()] client lang: <none>
2026-04-15T18:46:08.016 [DEBUG] [Thread-23910] [transport.py] [_log()] server lang: <none>
2026-04-15T18:46:08.016 [DEBUG] [Thread-23910] [transport.py] [_log()] kex follows: False
2026-04-15T18:46:08.016 [DEBUG] [Thread-23910] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:46:08.016 [DEBUG] [Thread-23910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:46:08.016 [DEBUG] [Thread-23910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:46:08.016 [DEBUG] [Thread-23910] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:46:08.016 [DEBUG] [Thread-23910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:46:08.016 [DEBUG] [Thread-23910] [transport.py] [_log()] Compression: none
2026-04-15T18:46:08.016 [DEBUG] [Thread-23910] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:46:08.075 [DEBUG] [Thread-23910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:46:08.076 [DEBUG] [Thread-23910] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:46:08.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:46:08.076 [DEBUG] [Thread-23910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:46:08.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:46:08.133 [DEBUG] [Thread-23910] [transport.py] [_log()] userauth is OK
2026-04-15T18:46:08.133 [DEBUG] [Thread-23910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:46:08.133 [DEBUG] [Thread-23910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:46:08.133 [DEBUG] [Thread-23910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:46:08.133 [DEBUG] [Thread-23910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:46:08.150 [INFO] [Thread-23910] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:46:08.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:46:08.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:46:08.990 [DEBUG] [Thread-23910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:46:08.990 [DEBUG] [Thread-23910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:46:09.038 [DEBUG] [Thread-23910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:46:09.038 [DEBUG] [Thread-23910] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:46:09.047 [DEBUG] [Thread-23910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:46:09.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:46:09.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')
2026-04-15T18:46:09.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
2026-04-15T18:46:09.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:46:09.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:46:09.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:46:09.089 [DEBUG] [Thread-23910] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:46:17.728 [DEBUG] [Thread-23912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:46:32.770 [DEBUG] [Thread-23913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:46:39.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:46:39.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:46:39.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T18:46:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 46, 5), 4.66488, 72.7861, 0.0, 15.863, 10.734, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:46:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:46:05
2026-04-15T18:46:40.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:46:41.288 [DEBUG] [Thread-23914] [transport.py] [_log()] starting thread (client mode): 0xf13c8670
2026-04-15T18:46:41.288 [DEBUG] [Thread-23914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:46:41.308 [DEBUG] [Thread-23914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:46:41.308 [INFO] [Thread-23914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:46:41.309 [DEBUG] [Thread-23914] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:46:41.309 [DEBUG] [Thread-23914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:46:41.309 [DEBUG] [Thread-23914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:46:41.309 [DEBUG] [Thread-23914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:46:41.309 [DEBUG] [Thread-23914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:46:41.309 [DEBUG] [Thread-23914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:46:41.309 [DEBUG] [Thread-23914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:46:41.309 [DEBUG] [Thread-23914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:46:41.309 [DEBUG] [Thread-23914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:46:41.309 [DEBUG] [Thread-23914] [transport.py] [_log()] client lang: <none>
2026-04-15T18:46:41.309 [DEBUG] [Thread-23914] [transport.py] [_log()] server lang: <none>
2026-04-15T18:46:41.310 [DEBUG] [Thread-23914] [transport.py] [_log()] kex follows: False
2026-04-15T18:46:41.310 [DEBUG] [Thread-23914] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:46:41.310 [DEBUG] [Thread-23914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:46:41.310 [DEBUG] [Thread-23914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:46:41.310 [DEBUG] [Thread-23914] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:46:41.310 [DEBUG] [Thread-23914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:46:41.310 [DEBUG] [Thread-23914] [transport.py] [_log()] Compression: none
2026-04-15T18:46:41.310 [DEBUG] [Thread-23914] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:46:41.318 [DEBUG] [Thread-23914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:46:41.318 [DEBUG] [Thread-23914] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:46:41.319 [DEBUG] [Thread-23914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:46:41.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:46:41.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:46:41.320 [DEBUG] [Thread-23914] [transport.py] [_log()] userauth is OK
2026-04-15T18:46:41.320 [DEBUG] [Thread-23914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:46:41.320 [DEBUG] [Thread-23914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:46:41.320 [DEBUG] [Thread-23914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:46:41.320 [DEBUG] [Thread-23914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:46:41.336 [INFO] [Thread-23914] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:46:41.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:46:42.012 [DEBUG] [Thread-23914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:46:42.012 [DEBUG] [Thread-23914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:46:42.012 [DEBUG] [Thread-23914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:46:42.053 [DEBUG] [Thread-23914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:46:42.053 [DEBUG] [Thread-23914] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:46:42.055 [DEBUG] [Thread-23914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:46:42.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:46:42.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:46:42.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:46:42.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:46:42.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:46:42.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:46:42.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:46:42.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:46:42.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:46:42.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.698745 -999.00  +10.70  19.07     76   +6.70 1 2 1 1 1    82    0 2.95 -36.48 ----- 17.2 19.1 292.4 22.4 11.7 -24.7 11.6 -23.8 11.2 -21.4 11.6 -23.3
2026-04-15T18:46:42.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:46:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:46:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.698745
2026-04-15T18:46:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:46:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:46:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:46:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:46:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:46:42.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:46:05', tmtdew=4.66488, humidity=72.7861, cloud=0.0, wind=15.863, temperature=10.734, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:46:11.568', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:46:42.074 [DEBUG] [Thread-23914] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:46:42.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:46:42.292 [DEBUG] [Thread-23917] [transport.py] [_log()] starting thread (client mode): 0xf13e3dc0
2026-04-15T18:46:42.292 [DEBUG] [Thread-23917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:46:42.306 [DEBUG] [Thread-23917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:46:42.306 [INFO] [Thread-23917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:46:42.313 [DEBUG] [Thread-23917] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:46:42.313 [DEBUG] [Thread-23917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:46:42.314 [DEBUG] [Thread-23917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:46:42.314 [DEBUG] [Thread-23917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:46:42.314 [DEBUG] [Thread-23917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:46:42.314 [DEBUG] [Thread-23917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:46:42.314 [DEBUG] [Thread-23917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:46:42.314 [DEBUG] [Thread-23917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:46:42.314 [DEBUG] [Thread-23917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:46:42.314 [DEBUG] [Thread-23917] [transport.py] [_log()] client lang: <none>
2026-04-15T18:46:42.314 [DEBUG] [Thread-23917] [transport.py] [_log()] server lang: <none>
2026-04-15T18:46:42.314 [DEBUG] [Thread-23917] [transport.py] [_log()] kex follows: False
2026-04-15T18:46:42.314 [DEBUG] [Thread-23917] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:46:42.315 [DEBUG] [Thread-23917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:46:42.315 [DEBUG] [Thread-23917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:46:42.315 [DEBUG] [Thread-23917] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:46:42.315 [DEBUG] [Thread-23917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:46:42.315 [DEBUG] [Thread-23917] [transport.py] [_log()] Compression: none
2026-04-15T18:46:42.315 [DEBUG] [Thread-23917] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:46:42.375 [DEBUG] [Thread-23917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:46:42.375 [DEBUG] [Thread-23917] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:46:42.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:46:42.376 [DEBUG] [Thread-23917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:46:42.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:46:42.432 [DEBUG] [Thread-23917] [transport.py] [_log()] userauth is OK
2026-04-15T18:46:42.432 [DEBUG] [Thread-23917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:46:42.432 [DEBUG] [Thread-23917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:46:42.433 [DEBUG] [Thread-23917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:46:42.433 [DEBUG] [Thread-23917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:46:42.457 [INFO] [Thread-23917] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:46:42.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:46:42.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:46:43.260 [DEBUG] [Thread-23917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:46:43.261 [DEBUG] [Thread-23917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:46:43.308 [DEBUG] [Thread-23917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:46:43.308 [DEBUG] [Thread-23917] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:46:43.317 [DEBUG] [Thread-23917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:46:43.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:46:43.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')
2026-04-15T18:46:43.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
2026-04-15T18:46:43.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:46:43.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:46:43.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:46:43.352 [DEBUG] [Thread-23917] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:46:47.801 [DEBUG] [Thread-23919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:46:52.510 [DEBUG] [Thread-23920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:47:02.847 [DEBUG] [Thread-23921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:47:13.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:47:13.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:47:13.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
2026-04-15T18:47:13.517 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:47:13.518 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:47:14.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 46, 41), 4.7406, 72.5059, 0.0, 13.9745, 11.0017, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:47:14.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:46:41
2026-04-15T18:47:15.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:47:15.488 [DEBUG] [Thread-23922] [transport.py] [_log()] starting thread (client mode): 0xf13ff550
2026-04-15T18:47:15.488 [DEBUG] [Thread-23922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:47:15.505 [DEBUG] [Thread-23922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:47:15.505 [INFO] [Thread-23922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:47:15.509 [DEBUG] [Thread-23922] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:47:15.509 [DEBUG] [Thread-23922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:47:15.509 [DEBUG] [Thread-23922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:47:15.509 [DEBUG] [Thread-23922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:47:15.509 [DEBUG] [Thread-23922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:47:15.509 [DEBUG] [Thread-23922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:47:15.509 [DEBUG] [Thread-23922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:47:15.509 [DEBUG] [Thread-23922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:47:15.509 [DEBUG] [Thread-23922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:47:15.510 [DEBUG] [Thread-23922] [transport.py] [_log()] client lang: <none>
2026-04-15T18:47:15.510 [DEBUG] [Thread-23922] [transport.py] [_log()] server lang: <none>
2026-04-15T18:47:15.510 [DEBUG] [Thread-23922] [transport.py] [_log()] kex follows: False
2026-04-15T18:47:15.510 [DEBUG] [Thread-23922] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:47:15.510 [DEBUG] [Thread-23922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:47:15.510 [DEBUG] [Thread-23922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:47:15.510 [DEBUG] [Thread-23922] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:47:15.510 [DEBUG] [Thread-23922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:47:15.510 [DEBUG] [Thread-23922] [transport.py] [_log()] Compression: none
2026-04-15T18:47:15.510 [DEBUG] [Thread-23922] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:47:15.527 [DEBUG] [Thread-23922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:47:15.527 [DEBUG] [Thread-23922] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:47:15.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:47:15.528 [DEBUG] [Thread-23922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:47:15.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:47:15.529 [DEBUG] [Thread-23922] [transport.py] [_log()] userauth is OK
2026-04-15T18:47:15.529 [DEBUG] [Thread-23922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:47:15.529 [DEBUG] [Thread-23922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:47:15.529 [DEBUG] [Thread-23922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:47:15.530 [DEBUG] [Thread-23922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:47:15.548 [INFO] [Thread-23922] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:47:15.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:47:16.172 [DEBUG] [Thread-23922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:47:16.172 [DEBUG] [Thread-23922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:47:16.173 [DEBUG] [Thread-23922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:47:16.213 [DEBUG] [Thread-23922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:47:16.213 [DEBUG] [Thread-23922] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:47:16.215 [DEBUG] [Thread-23922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:47:16.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:47:16.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:47:16.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:47:16.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:47:16.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:47:16.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:47:16.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:47:16.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:47:16.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:47:16.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.699092 -999.00  +10.70  16.76     76   +6.80 1 2 1 1 1    75    0 2.93 -36.76 ----- 16.6 16.8 303.2 20.0 11.7 -24.7 11.6 -23.7 11.2 -21.5 11.6 -23.2
2026-04-15T18:47:16.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:47:16.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:47:16.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.699092
2026-04-15T18:47:16.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:47:16.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:47:16.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:47:16.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:47:16.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:47:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:46:41', tmtdew=4.7406, humidity=72.5059, cloud=0.0, wind=13.9745, temperature=11.0017, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:46:41.549', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:47:16.235 [DEBUG] [Thread-23922] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:47:16.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:47:16.450 [DEBUG] [Thread-23925] [transport.py] [_log()] starting thread (client mode): 0xf13fcbe0
2026-04-15T18:47:16.451 [DEBUG] [Thread-23925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:47:16.464 [DEBUG] [Thread-23925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:47:16.464 [INFO] [Thread-23925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:47:16.471 [DEBUG] [Thread-23925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:47:16.472 [DEBUG] [Thread-23925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:47:16.472 [DEBUG] [Thread-23925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:47:16.472 [DEBUG] [Thread-23925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:47:16.472 [DEBUG] [Thread-23925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:47:16.472 [DEBUG] [Thread-23925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:47:16.472 [DEBUG] [Thread-23925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:47:16.472 [DEBUG] [Thread-23925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:47:16.472 [DEBUG] [Thread-23925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:47:16.472 [DEBUG] [Thread-23925] [transport.py] [_log()] client lang: <none>
2026-04-15T18:47:16.472 [DEBUG] [Thread-23925] [transport.py] [_log()] server lang: <none>
2026-04-15T18:47:16.472 [DEBUG] [Thread-23925] [transport.py] [_log()] kex follows: False
2026-04-15T18:47:16.472 [DEBUG] [Thread-23925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:47:16.473 [DEBUG] [Thread-23925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:47:16.473 [DEBUG] [Thread-23925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:47:16.473 [DEBUG] [Thread-23925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:47:16.473 [DEBUG] [Thread-23925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:47:16.473 [DEBUG] [Thread-23925] [transport.py] [_log()] Compression: none
2026-04-15T18:47:16.473 [DEBUG] [Thread-23925] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:47:16.535 [DEBUG] [Thread-23925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:47:16.535 [DEBUG] [Thread-23925] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:47:16.535 [DEBUG] [Thread-23925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:47:16.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:47:16.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:47:16.591 [DEBUG] [Thread-23925] [transport.py] [_log()] userauth is OK
2026-04-15T18:47:16.592 [DEBUG] [Thread-23925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:47:16.592 [DEBUG] [Thread-23925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:47:16.592 [DEBUG] [Thread-23925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:47:16.592 [DEBUG] [Thread-23925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:47:16.612 [INFO] [Thread-23925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:47:16.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:47:16.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:47:17.497 [DEBUG] [Thread-23925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:47:17.498 [DEBUG] [Thread-23925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:47:17.545 [DEBUG] [Thread-23925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:47:17.545 [DEBUG] [Thread-23925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:47:17.554 [DEBUG] [Thread-23925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:47:17.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:47:17.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')
2026-04-15T18:47:17.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
2026-04-15T18:47:17.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:47:17.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:47:17.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:47:17.588 [DEBUG] [Thread-23925] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:47:17.879 [DEBUG] [Thread-23927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:47:32.920 [DEBUG] [Thread-23928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:47:47.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:47:47.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:47:47.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
2026-04-15T18:47:47.950 [DEBUG] [Thread-23929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:47:48.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 47, 17), 4.70427, 72.8362, 0.0, 16.2871, 10.7178, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:47:48.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:47:17
2026-04-15T18:47:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:47:49.719 [DEBUG] [Thread-23930] [transport.py] [_log()] starting thread (client mode): 0xf1353d90
2026-04-15T18:47:49.720 [DEBUG] [Thread-23930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:47:49.739 [DEBUG] [Thread-23930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:47:49.739 [INFO] [Thread-23930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:47:49.742 [DEBUG] [Thread-23930] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:47:49.742 [DEBUG] [Thread-23930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:47:49.742 [DEBUG] [Thread-23930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:47:49.742 [DEBUG] [Thread-23930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:47:49.743 [DEBUG] [Thread-23930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:47:49.743 [DEBUG] [Thread-23930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:47:49.743 [DEBUG] [Thread-23930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:47:49.743 [DEBUG] [Thread-23930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:47:49.743 [DEBUG] [Thread-23930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:47:49.743 [DEBUG] [Thread-23930] [transport.py] [_log()] client lang: <none>
2026-04-15T18:47:49.743 [DEBUG] [Thread-23930] [transport.py] [_log()] server lang: <none>
2026-04-15T18:47:49.743 [DEBUG] [Thread-23930] [transport.py] [_log()] kex follows: False
2026-04-15T18:47:49.743 [DEBUG] [Thread-23930] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:47:49.743 [DEBUG] [Thread-23930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:47:49.743 [DEBUG] [Thread-23930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:47:49.743 [DEBUG] [Thread-23930] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:47:49.744 [DEBUG] [Thread-23930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:47:49.744 [DEBUG] [Thread-23930] [transport.py] [_log()] Compression: none
2026-04-15T18:47:49.744 [DEBUG] [Thread-23930] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:47:49.762 [DEBUG] [Thread-23930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:47:49.762 [DEBUG] [Thread-23930] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:47:49.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:47:49.763 [DEBUG] [Thread-23930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:47:49.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:47:49.804 [DEBUG] [Thread-23930] [transport.py] [_log()] userauth is OK
2026-04-15T18:47:49.805 [DEBUG] [Thread-23930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:47:49.805 [DEBUG] [Thread-23930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:47:49.805 [DEBUG] [Thread-23930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:47:49.805 [DEBUG] [Thread-23930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:47:49.842 [INFO] [Thread-23930] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:47:49.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:47:50.465 [DEBUG] [Thread-23930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:47:50.465 [DEBUG] [Thread-23930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:47:50.465 [DEBUG] [Thread-23930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:47:50.506 [DEBUG] [Thread-23930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:47:50.506 [DEBUG] [Thread-23930] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:47:50.509 [DEBUG] [Thread-23930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:47:50.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:47:50.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:47:50.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:47:50.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:47:50.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:47:50.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:47:50.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:47:50.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:47:50.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:47:50.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.699786 -999.00  +10.70  17.34     76   +6.70 1 2 1 1 1    61    0 3.06 -33.46 ----- 18.7 17.3 292.2 20.4 11.7 -24.5 11.6 -23.8 11.2 -21.6 11.5 -23.4
2026-04-15T18:47:50.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:47:50.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:47:50.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.699786
2026-04-15T18:47:50.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:47:50.534 [DEBUG] [Thread-23930] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:47:50.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:47:50.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:47:50.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:47:50.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:47:50.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:47:17', tmtdew=4.70427, humidity=72.8362, cloud=0.0, wind=16.2871, temperature=10.7178, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:47:41.510', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:47:50.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:47:50.790 [DEBUG] [Thread-23933] [transport.py] [_log()] starting thread (client mode): 0xee904790
2026-04-15T18:47:50.790 [DEBUG] [Thread-23933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:47:50.804 [DEBUG] [Thread-23933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:47:50.805 [INFO] [Thread-23933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:47:50.812 [DEBUG] [Thread-23933] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:47:50.812 [DEBUG] [Thread-23933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:47:50.812 [DEBUG] [Thread-23933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:47:50.812 [DEBUG] [Thread-23933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:47:50.812 [DEBUG] [Thread-23933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:47:50.812 [DEBUG] [Thread-23933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:47:50.812 [DEBUG] [Thread-23933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:47:50.812 [DEBUG] [Thread-23933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:47:50.812 [DEBUG] [Thread-23933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:47:50.813 [DEBUG] [Thread-23933] [transport.py] [_log()] client lang: <none>
2026-04-15T18:47:50.813 [DEBUG] [Thread-23933] [transport.py] [_log()] server lang: <none>
2026-04-15T18:47:50.813 [DEBUG] [Thread-23933] [transport.py] [_log()] kex follows: False
2026-04-15T18:47:50.813 [DEBUG] [Thread-23933] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:47:50.813 [DEBUG] [Thread-23933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:47:50.813 [DEBUG] [Thread-23933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:47:50.813 [DEBUG] [Thread-23933] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:47:50.813 [DEBUG] [Thread-23933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:47:50.813 [DEBUG] [Thread-23933] [transport.py] [_log()] Compression: none
2026-04-15T18:47:50.813 [DEBUG] [Thread-23933] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:47:50.873 [DEBUG] [Thread-23933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:47:50.873 [DEBUG] [Thread-23933] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:47:50.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:47:50.874 [DEBUG] [Thread-23933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:47:50.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:47:50.931 [DEBUG] [Thread-23933] [transport.py] [_log()] userauth is OK
2026-04-15T18:47:50.932 [DEBUG] [Thread-23933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:47:50.932 [DEBUG] [Thread-23933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:47:50.932 [DEBUG] [Thread-23933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:47:50.932 [DEBUG] [Thread-23933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:47:50.959 [INFO] [Thread-23933] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:47:50.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:47:50.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:47:51.763 [DEBUG] [Thread-23933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:47:51.764 [DEBUG] [Thread-23933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:47:51.811 [DEBUG] [Thread-23933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:47:51.811 [DEBUG] [Thread-23933] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:47:51.821 [DEBUG] [Thread-23933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:47:51.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:47:51.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')
2026-04-15T18:47:51.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
2026-04-15T18:47:51.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:47:51.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:47:51.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:47:51.855 [DEBUG] [Thread-23933] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:47:52.664 [DEBUG] [Thread-23935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:48:02.982 [DEBUG] [Thread-23936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:48:18.025 [DEBUG] [Thread-23937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:48:18.588 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:48:18.589 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:48:21.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:48:21.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:48:21.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
2026-04-15T18:48:23.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 47, 52), 4.66995, 72.8721, 0.0, 17.7142, 11.0694, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:48:23.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:47:52
2026-04-15T18:48:23.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:48:23.995 [DEBUG] [Thread-23938] [transport.py] [_log()] starting thread (client mode): 0xf13c8e20
2026-04-15T18:48:23.995 [DEBUG] [Thread-23938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:48:24.015 [DEBUG] [Thread-23938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:48:24.015 [INFO] [Thread-23938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:48:24.018 [DEBUG] [Thread-23938] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:48:24.018 [DEBUG] [Thread-23938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:48:24.018 [DEBUG] [Thread-23938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:48:24.018 [DEBUG] [Thread-23938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:48:24.018 [DEBUG] [Thread-23938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:48:24.018 [DEBUG] [Thread-23938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:48:24.018 [DEBUG] [Thread-23938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:48:24.018 [DEBUG] [Thread-23938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:48:24.018 [DEBUG] [Thread-23938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:48:24.019 [DEBUG] [Thread-23938] [transport.py] [_log()] client lang: <none>
2026-04-15T18:48:24.019 [DEBUG] [Thread-23938] [transport.py] [_log()] server lang: <none>
2026-04-15T18:48:24.019 [DEBUG] [Thread-23938] [transport.py] [_log()] kex follows: False
2026-04-15T18:48:24.019 [DEBUG] [Thread-23938] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:48:24.019 [DEBUG] [Thread-23938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:48:24.019 [DEBUG] [Thread-23938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:48:24.019 [DEBUG] [Thread-23938] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:48:24.019 [DEBUG] [Thread-23938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:48:24.019 [DEBUG] [Thread-23938] [transport.py] [_log()] Compression: none
2026-04-15T18:48:24.019 [DEBUG] [Thread-23938] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:48:24.036 [DEBUG] [Thread-23938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:48:24.036 [DEBUG] [Thread-23938] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:48:24.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:48:24.037 [DEBUG] [Thread-23938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:48:24.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:48:24.038 [DEBUG] [Thread-23938] [transport.py] [_log()] userauth is OK
2026-04-15T18:48:24.038 [DEBUG] [Thread-23938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:48:24.038 [DEBUG] [Thread-23938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:48:24.038 [DEBUG] [Thread-23938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:48:24.038 [DEBUG] [Thread-23938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:48:24.053 [INFO] [Thread-23938] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:48:24.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:48:24.665 [DEBUG] [Thread-23938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:48:24.665 [DEBUG] [Thread-23938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:48:24.666 [DEBUG] [Thread-23938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:48:24.706 [DEBUG] [Thread-23938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:48:24.706 [DEBUG] [Thread-23938] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:48:24.709 [DEBUG] [Thread-23938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:48:24.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:48:24.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:48:24.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:48:24.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:48:24.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:48:24.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:48:24.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:48:24.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:48:24.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:48:24.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.700134 -999.00  +10.70  19.68     76   +6.70 1 2 1 1 1    56    0 3.03 -32.11 ----- 19.0 19.7 300.6 21.0 11.6 -24.6 11.5 -23.6 11.2 -21.3 11.5 -23.3
2026-04-15T18:48:24.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:48:24.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:48:24.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.700134
2026-04-15T18:48:24.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:48:24.732 [DEBUG] [Thread-23938] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:48:24.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:48:24.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:48:24.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:48:24.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:48:24.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:47:52', tmtdew=4.66995, humidity=72.8721, cloud=0.0, wind=17.7142, temperature=11.0694, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:48:11.578', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:48:24.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:48:24.992 [DEBUG] [Thread-23941] [transport.py] [_log()] starting thread (client mode): 0xf1336200
2026-04-15T18:48:24.992 [DEBUG] [Thread-23941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:48:25.012 [DEBUG] [Thread-23941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:48:25.012 [INFO] [Thread-23941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:48:25.022 [DEBUG] [Thread-23941] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:48:25.022 [DEBUG] [Thread-23941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:48:25.022 [DEBUG] [Thread-23941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:48:25.022 [DEBUG] [Thread-23941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:48:25.022 [DEBUG] [Thread-23941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:48:25.022 [DEBUG] [Thread-23941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:48:25.022 [DEBUG] [Thread-23941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:48:25.022 [DEBUG] [Thread-23941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:48:25.023 [DEBUG] [Thread-23941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:48:25.023 [DEBUG] [Thread-23941] [transport.py] [_log()] client lang: <none>
2026-04-15T18:48:25.023 [DEBUG] [Thread-23941] [transport.py] [_log()] server lang: <none>
2026-04-15T18:48:25.023 [DEBUG] [Thread-23941] [transport.py] [_log()] kex follows: False
2026-04-15T18:48:25.023 [DEBUG] [Thread-23941] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:48:25.023 [DEBUG] [Thread-23941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:48:25.023 [DEBUG] [Thread-23941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:48:25.023 [DEBUG] [Thread-23941] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:48:25.023 [DEBUG] [Thread-23941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:48:25.023 [DEBUG] [Thread-23941] [transport.py] [_log()] Compression: none
2026-04-15T18:48:25.023 [DEBUG] [Thread-23941] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:48:25.083 [DEBUG] [Thread-23941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:48:25.084 [DEBUG] [Thread-23941] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:48:25.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:48:25.084 [DEBUG] [Thread-23941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:48:25.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:48:25.149 [DEBUG] [Thread-23941] [transport.py] [_log()] userauth is OK
2026-04-15T18:48:25.150 [DEBUG] [Thread-23941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:48:25.150 [DEBUG] [Thread-23941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:48:25.150 [DEBUG] [Thread-23941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:48:25.150 [DEBUG] [Thread-23941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:48:25.180 [INFO] [Thread-23941] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:48:25.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:48:25.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:48:26.033 [DEBUG] [Thread-23941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:48:26.033 [DEBUG] [Thread-23941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:48:26.083 [DEBUG] [Thread-23941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:48:26.084 [DEBUG] [Thread-23941] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:48:26.093 [DEBUG] [Thread-23941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:48:26.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:48:26.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')
2026-04-15T18:48:26.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
2026-04-15T18:48:26.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:48:26.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:48:26.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:48:26.140 [DEBUG] [Thread-23941] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:48:33.057 [DEBUG] [Thread-23943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:48:48.102 [DEBUG] [Thread-23944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:48:52.808 [DEBUG] [Thread-23945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:48:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:48:56.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:48:56.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
2026-04-15T18:48:57.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 48, 28), 4.64641, 72.8698, 0.0, 18.2452, 10.6349, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:48:57.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:48:28
2026-04-15T18:48:57.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:48:58.359 [DEBUG] [Thread-23946] [transport.py] [_log()] starting thread (client mode): 0xf1336620
2026-04-15T18:48:58.360 [DEBUG] [Thread-23946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:48:58.381 [DEBUG] [Thread-23946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:48:58.381 [INFO] [Thread-23946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:48:58.384 [DEBUG] [Thread-23946] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:48:58.385 [DEBUG] [Thread-23946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:48:58.385 [DEBUG] [Thread-23946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:48:58.385 [DEBUG] [Thread-23946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:48:58.385 [DEBUG] [Thread-23946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:48:58.385 [DEBUG] [Thread-23946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:48:58.385 [DEBUG] [Thread-23946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:48:58.386 [DEBUG] [Thread-23946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:48:58.386 [DEBUG] [Thread-23946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:48:58.386 [DEBUG] [Thread-23946] [transport.py] [_log()] client lang: <none>
2026-04-15T18:48:58.386 [DEBUG] [Thread-23946] [transport.py] [_log()] server lang: <none>
2026-04-15T18:48:58.386 [DEBUG] [Thread-23946] [transport.py] [_log()] kex follows: False
2026-04-15T18:48:58.386 [DEBUG] [Thread-23946] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:48:58.386 [DEBUG] [Thread-23946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:48:58.386 [DEBUG] [Thread-23946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:48:58.386 [DEBUG] [Thread-23946] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:48:58.386 [DEBUG] [Thread-23946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:48:58.387 [DEBUG] [Thread-23946] [transport.py] [_log()] Compression: none
2026-04-15T18:48:58.387 [DEBUG] [Thread-23946] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:48:58.403 [DEBUG] [Thread-23946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:48:58.403 [DEBUG] [Thread-23946] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:48:58.404 [DEBUG] [Thread-23946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:48:58.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:48:58.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:48:58.404 [DEBUG] [Thread-23946] [transport.py] [_log()] userauth is OK
2026-04-15T18:48:58.405 [DEBUG] [Thread-23946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:48:58.405 [DEBUG] [Thread-23946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:48:58.405 [DEBUG] [Thread-23946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:48:58.405 [DEBUG] [Thread-23946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:48:58.421 [INFO] [Thread-23946] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:48:58.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:48:59.047 [DEBUG] [Thread-23946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:48:59.048 [DEBUG] [Thread-23946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:48:59.048 [DEBUG] [Thread-23946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:48:59.088 [DEBUG] [Thread-23946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:48:59.088 [DEBUG] [Thread-23946] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:48:59.091 [DEBUG] [Thread-23946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:48:59.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:48:59.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:48:59.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:48:59.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:48:59.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:48:59.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:48:59.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:48:59.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:48:59.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:48:59.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.700481 -999.00  +10.70  16.17     76   +6.70 1 2 1 1 1    50    0 3.06 -29.82 ----- 17.1 16.2 301.0 20.4 11.6 -24.7 11.5 -23.6 11.2 -21.5 11.5 -23.4
2026-04-15T18:48:59.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:48:59.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:48:59.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.700481
2026-04-15T18:48:59.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:48:59.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:48:59.113 [DEBUG] [Thread-23946] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:48:59.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:48:59.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:48:59.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:48:59.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:48:28', tmtdew=4.64641, humidity=72.8698, cloud=0.0, wind=18.2452, temperature=10.6349, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:48:41.558', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:48:59.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:48:59.370 [DEBUG] [Thread-23949] [transport.py] [_log()] starting thread (client mode): 0xf13659f0
2026-04-15T18:48:59.370 [DEBUG] [Thread-23949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:48:59.384 [DEBUG] [Thread-23949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:48:59.384 [INFO] [Thread-23949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:48:59.391 [DEBUG] [Thread-23949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:48:59.392 [DEBUG] [Thread-23949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:48:59.392 [DEBUG] [Thread-23949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:48:59.392 [DEBUG] [Thread-23949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:48:59.392 [DEBUG] [Thread-23949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:48:59.392 [DEBUG] [Thread-23949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:48:59.392 [DEBUG] [Thread-23949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:48:59.392 [DEBUG] [Thread-23949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:48:59.392 [DEBUG] [Thread-23949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:48:59.392 [DEBUG] [Thread-23949] [transport.py] [_log()] client lang: <none>
2026-04-15T18:48:59.392 [DEBUG] [Thread-23949] [transport.py] [_log()] server lang: <none>
2026-04-15T18:48:59.392 [DEBUG] [Thread-23949] [transport.py] [_log()] kex follows: False
2026-04-15T18:48:59.392 [DEBUG] [Thread-23949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:48:59.393 [DEBUG] [Thread-23949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:48:59.393 [DEBUG] [Thread-23949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:48:59.393 [DEBUG] [Thread-23949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:48:59.393 [DEBUG] [Thread-23949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:48:59.393 [DEBUG] [Thread-23949] [transport.py] [_log()] Compression: none
2026-04-15T18:48:59.393 [DEBUG] [Thread-23949] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:48:59.449 [DEBUG] [Thread-23949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:48:59.450 [DEBUG] [Thread-23949] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:48:59.450 [DEBUG] [Thread-23949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:48:59.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:48:59.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:48:59.506 [DEBUG] [Thread-23949] [transport.py] [_log()] userauth is OK
2026-04-15T18:48:59.506 [DEBUG] [Thread-23949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:48:59.507 [DEBUG] [Thread-23949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:48:59.507 [DEBUG] [Thread-23949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:48:59.507 [DEBUG] [Thread-23949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:48:59.532 [INFO] [Thread-23949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:48:59.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:48:59.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:49:00.348 [DEBUG] [Thread-23949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:49:00.348 [DEBUG] [Thread-23949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:49:00.396 [DEBUG] [Thread-23949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:49:00.396 [DEBUG] [Thread-23949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:49:00.405 [DEBUG] [Thread-23949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:49:00.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:49:00.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')
2026-04-15T18:49:00.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
2026-04-15T18:49:00.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:49:00.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:49:00.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:49:00.439 [DEBUG] [Thread-23949] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:49:03.134 [DEBUG] [Thread-23951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:49:18.172 [DEBUG] [Thread-23952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:49:23.489 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:49:23.491 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:49:30.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:49:30.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:49:30.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T18:49:31.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 49, 3), 4.65503, 72.8206, 0.0, 18.5274, 10.6023, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:49:31.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:49:03
2026-04-15T18:49:32.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:49:32.629 [DEBUG] [Thread-23953] [transport.py] [_log()] starting thread (client mode): 0xf13666b0
2026-04-15T18:49:32.629 [DEBUG] [Thread-23953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:49:32.649 [DEBUG] [Thread-23953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:49:32.649 [INFO] [Thread-23953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:49:32.653 [DEBUG] [Thread-23953] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:49:32.653 [DEBUG] [Thread-23953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:49:32.653 [DEBUG] [Thread-23953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:49:32.653 [DEBUG] [Thread-23953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:49:32.653 [DEBUG] [Thread-23953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:49:32.653 [DEBUG] [Thread-23953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:49:32.653 [DEBUG] [Thread-23953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:49:32.653 [DEBUG] [Thread-23953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:49:32.653 [DEBUG] [Thread-23953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:49:32.654 [DEBUG] [Thread-23953] [transport.py] [_log()] client lang: <none>
2026-04-15T18:49:32.654 [DEBUG] [Thread-23953] [transport.py] [_log()] server lang: <none>
2026-04-15T18:49:32.654 [DEBUG] [Thread-23953] [transport.py] [_log()] kex follows: False
2026-04-15T18:49:32.654 [DEBUG] [Thread-23953] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:49:32.654 [DEBUG] [Thread-23953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:49:32.654 [DEBUG] [Thread-23953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:49:32.654 [DEBUG] [Thread-23953] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:49:32.654 [DEBUG] [Thread-23953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:49:32.654 [DEBUG] [Thread-23953] [transport.py] [_log()] Compression: none
2026-04-15T18:49:32.654 [DEBUG] [Thread-23953] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:49:32.671 [DEBUG] [Thread-23953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:49:32.672 [DEBUG] [Thread-23953] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:49:32.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:49:32.672 [DEBUG] [Thread-23953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:49:32.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:49:32.676 [DEBUG] [Thread-23953] [transport.py] [_log()] userauth is OK
2026-04-15T18:49:32.676 [DEBUG] [Thread-23953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:49:32.676 [DEBUG] [Thread-23953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:49:32.676 [DEBUG] [Thread-23953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:49:32.676 [DEBUG] [Thread-23953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:49:32.712 [INFO] [Thread-23953] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:49:32.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:49:33.202 [DEBUG] [Thread-23955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:49:33.362 [DEBUG] [Thread-23953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:49:33.362 [DEBUG] [Thread-23953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:49:33.363 [DEBUG] [Thread-23953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:49:33.403 [DEBUG] [Thread-23953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:49:33.403 [DEBUG] [Thread-23953] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:49:33.406 [DEBUG] [Thread-23953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:49:33.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:49:33.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:49:33.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:49:33.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:49:33.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:49:33.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:49:33.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:49:33.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:49:33.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:49:33.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.700828 -999.00  +10.60  15.21     76   +6.70 1 2 1 1 1    46    0 3.21 -29.65 ----- 15.9 15.2 313.2 19.0 11.6 -24.7 11.5 -23.6 11.1 -21.6 11.4 -23.3
2026-04-15T18:49:33.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:49:33.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:49:33.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.700828
2026-04-15T18:49:33.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:49:33.436 [DEBUG] [Thread-23953] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:49:33.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:49:33.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:49:33.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:49:33.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:49:33.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:49:03', tmtdew=4.65503, humidity=72.8206, cloud=0.0, wind=18.5274, temperature=10.6023, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:49:11.539', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:49:33.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:49:33.695 [DEBUG] [Thread-23957] [transport.py] [_log()] starting thread (client mode): 0xf13e1de0
2026-04-15T18:49:33.695 [DEBUG] [Thread-23957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:49:33.709 [DEBUG] [Thread-23957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:49:33.709 [INFO] [Thread-23957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:49:33.716 [DEBUG] [Thread-23957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:49:33.716 [DEBUG] [Thread-23957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:49:33.717 [DEBUG] [Thread-23957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:49:33.717 [DEBUG] [Thread-23957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:49:33.717 [DEBUG] [Thread-23957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:49:33.717 [DEBUG] [Thread-23957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:49:33.717 [DEBUG] [Thread-23957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:49:33.717 [DEBUG] [Thread-23957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:49:33.717 [DEBUG] [Thread-23957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:49:33.717 [DEBUG] [Thread-23957] [transport.py] [_log()] client lang: <none>
2026-04-15T18:49:33.717 [DEBUG] [Thread-23957] [transport.py] [_log()] server lang: <none>
2026-04-15T18:49:33.717 [DEBUG] [Thread-23957] [transport.py] [_log()] kex follows: False
2026-04-15T18:49:33.717 [DEBUG] [Thread-23957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:49:33.717 [DEBUG] [Thread-23957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:49:33.718 [DEBUG] [Thread-23957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:49:33.718 [DEBUG] [Thread-23957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:49:33.718 [DEBUG] [Thread-23957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:49:33.718 [DEBUG] [Thread-23957] [transport.py] [_log()] Compression: none
2026-04-15T18:49:33.718 [DEBUG] [Thread-23957] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:49:33.773 [DEBUG] [Thread-23957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:49:33.774 [DEBUG] [Thread-23957] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:49:33.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:49:33.774 [DEBUG] [Thread-23957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:49:33.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:49:33.830 [DEBUG] [Thread-23957] [transport.py] [_log()] userauth is OK
2026-04-15T18:49:33.830 [DEBUG] [Thread-23957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:49:33.831 [DEBUG] [Thread-23957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:49:33.831 [DEBUG] [Thread-23957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:49:33.831 [DEBUG] [Thread-23957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:49:33.858 [INFO] [Thread-23957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:49:33.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:49:33.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:49:34.701 [DEBUG] [Thread-23957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:49:34.701 [DEBUG] [Thread-23957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:49:34.748 [DEBUG] [Thread-23957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:49:34.748 [DEBUG] [Thread-23957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:49:34.757 [DEBUG] [Thread-23957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:49:34.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:49:34.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')
2026-04-15T18:49:34.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') -> 00000000
2026-04-15T18:49:34.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:49:34.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:49:34.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:49:34.788 [DEBUG] [Thread-23957] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:49:48.234 [DEBUG] [Thread-23959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:49:52.954 [DEBUG] [Thread-23960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:50:03.277 [DEBUG] [Thread-23961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:50:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:50:04.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:50:04.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
2026-04-15T18:50:06.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 49, 39), 4.74979, 72.4423, 0.0, 17.9964, 10.9046, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:50:06.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:49:39
2026-04-15T18:50:06.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:50:06.896 [DEBUG] [Thread-23962] [transport.py] [_log()] starting thread (client mode): 0xf17c2b90
2026-04-15T18:50:06.897 [DEBUG] [Thread-23962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:50:06.913 [DEBUG] [Thread-23962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:50:06.913 [INFO] [Thread-23962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:50:06.917 [DEBUG] [Thread-23962] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:50:06.917 [DEBUG] [Thread-23962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:50:06.917 [DEBUG] [Thread-23962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:50:06.917 [DEBUG] [Thread-23962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:50:06.917 [DEBUG] [Thread-23962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:50:06.917 [DEBUG] [Thread-23962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:50:06.917 [DEBUG] [Thread-23962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:50:06.917 [DEBUG] [Thread-23962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:50:06.917 [DEBUG] [Thread-23962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:50:06.917 [DEBUG] [Thread-23962] [transport.py] [_log()] client lang: <none>
2026-04-15T18:50:06.918 [DEBUG] [Thread-23962] [transport.py] [_log()] server lang: <none>
2026-04-15T18:50:06.918 [DEBUG] [Thread-23962] [transport.py] [_log()] kex follows: False
2026-04-15T18:50:06.918 [DEBUG] [Thread-23962] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:50:06.918 [DEBUG] [Thread-23962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:50:06.918 [DEBUG] [Thread-23962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:50:06.918 [DEBUG] [Thread-23962] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:50:06.918 [DEBUG] [Thread-23962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:50:06.918 [DEBUG] [Thread-23962] [transport.py] [_log()] Compression: none
2026-04-15T18:50:06.918 [DEBUG] [Thread-23962] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:50:06.934 [DEBUG] [Thread-23962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:50:06.935 [DEBUG] [Thread-23962] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:50:06.935 [DEBUG] [Thread-23962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:50:06.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:50:06.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:50:06.936 [DEBUG] [Thread-23962] [transport.py] [_log()] userauth is OK
2026-04-15T18:50:06.936 [DEBUG] [Thread-23962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:50:06.937 [DEBUG] [Thread-23962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:50:06.937 [DEBUG] [Thread-23962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:50:06.937 [DEBUG] [Thread-23962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:50:06.960 [INFO] [Thread-23962] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:50:06.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:50:09.363 [DEBUG] [Thread-23962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:50:09.363 [DEBUG] [Thread-23962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:50:09.364 [DEBUG] [Thread-23962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:50:09.404 [DEBUG] [Thread-23962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:50:09.404 [DEBUG] [Thread-23962] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:50:09.406 [DEBUG] [Thread-23962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:50:09.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:50:09.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:50:09.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:50:09.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:50:09.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:50:09.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:50:09.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:50:09.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:50:09.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:50:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.701175 -999.00  +10.60  16.69     76   +6.70 1 2 1 1 1    41    0 3.22 -27.27 ----- 17.3 16.7 288.4 19.4 11.6 -24.7 11.5 -23.5 11.1 -21.5 11.4 -23.3
2026-04-15T18:50:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:50:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:50:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.701175
2026-04-15T18:50:09.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:50:09.476 [DEBUG] [Thread-23962] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:50:09.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:50:09.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:50:09.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:50:09.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:50:09.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:49:39', tmtdew=4.74979, humidity=72.4423, cloud=0.0, wind=17.9964, temperature=10.9046, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:49:41.520', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:50:09.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:50:09.738 [DEBUG] [Thread-23965] [transport.py] [_log()] starting thread (client mode): 0xf1367070
2026-04-15T18:50:09.739 [DEBUG] [Thread-23965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:50:09.754 [DEBUG] [Thread-23965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:50:09.754 [INFO] [Thread-23965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:50:09.761 [DEBUG] [Thread-23965] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:50:09.761 [DEBUG] [Thread-23965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:50:09.762 [DEBUG] [Thread-23965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:50:09.762 [DEBUG] [Thread-23965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:50:09.762 [DEBUG] [Thread-23965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:50:09.762 [DEBUG] [Thread-23965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:50:09.762 [DEBUG] [Thread-23965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:50:09.762 [DEBUG] [Thread-23965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:50:09.762 [DEBUG] [Thread-23965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:50:09.762 [DEBUG] [Thread-23965] [transport.py] [_log()] client lang: <none>
2026-04-15T18:50:09.762 [DEBUG] [Thread-23965] [transport.py] [_log()] server lang: <none>
2026-04-15T18:50:09.762 [DEBUG] [Thread-23965] [transport.py] [_log()] kex follows: False
2026-04-15T18:50:09.762 [DEBUG] [Thread-23965] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:50:09.762 [DEBUG] [Thread-23965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:50:09.763 [DEBUG] [Thread-23965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:50:09.763 [DEBUG] [Thread-23965] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:50:09.763 [DEBUG] [Thread-23965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:50:09.763 [DEBUG] [Thread-23965] [transport.py] [_log()] Compression: none
2026-04-15T18:50:09.763 [DEBUG] [Thread-23965] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:50:09.821 [DEBUG] [Thread-23965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:50:09.821 [DEBUG] [Thread-23965] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:50:09.822 [DEBUG] [Thread-23965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:50:09.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:50:09.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:50:09.880 [DEBUG] [Thread-23965] [transport.py] [_log()] userauth is OK
2026-04-15T18:50:09.880 [DEBUG] [Thread-23965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:50:09.880 [DEBUG] [Thread-23965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:50:09.880 [DEBUG] [Thread-23965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:50:09.880 [DEBUG] [Thread-23965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:50:09.903 [INFO] [Thread-23965] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:50:09.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:50:09.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:50:10.725 [DEBUG] [Thread-23965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:50:10.725 [DEBUG] [Thread-23965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:50:10.773 [DEBUG] [Thread-23965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:50:10.773 [DEBUG] [Thread-23965] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:50:10.786 [DEBUG] [Thread-23965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:50:10.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:50:10.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')
2026-04-15T18:50:10.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
2026-04-15T18:50:10.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:50:10.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:50:10.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:50:10.822 [DEBUG] [Thread-23965] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:50:18.309 [DEBUG] [Thread-23967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:50:28.662 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:50:28.663 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:50:33.349 [DEBUG] [Thread-23968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:50:40.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:50:40.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:50:40.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T18:50:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 50, 15), 4.73326, 72.6885, 0.0, 16.4628, 10.7024, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:50:42.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:50:15
2026-04-15T18:50:42.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:50:42.948 [DEBUG] [Thread-23969] [transport.py] [_log()] starting thread (client mode): 0xf13ffcd0
2026-04-15T18:50:42.948 [DEBUG] [Thread-23969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:50:42.968 [DEBUG] [Thread-23969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:50:42.968 [INFO] [Thread-23969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:50:42.971 [DEBUG] [Thread-23969] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:50:42.971 [DEBUG] [Thread-23969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:50:42.971 [DEBUG] [Thread-23969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:50:42.971 [DEBUG] [Thread-23969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:50:42.971 [DEBUG] [Thread-23969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:50:42.971 [DEBUG] [Thread-23969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:50:42.971 [DEBUG] [Thread-23969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:50:42.971 [DEBUG] [Thread-23969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:50:42.971 [DEBUG] [Thread-23969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:50:42.972 [DEBUG] [Thread-23969] [transport.py] [_log()] client lang: <none>
2026-04-15T18:50:42.972 [DEBUG] [Thread-23969] [transport.py] [_log()] server lang: <none>
2026-04-15T18:50:42.972 [DEBUG] [Thread-23969] [transport.py] [_log()] kex follows: False
2026-04-15T18:50:42.972 [DEBUG] [Thread-23969] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:50:42.972 [DEBUG] [Thread-23969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:50:42.972 [DEBUG] [Thread-23969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:50:42.972 [DEBUG] [Thread-23969] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:50:42.972 [DEBUG] [Thread-23969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:50:42.972 [DEBUG] [Thread-23969] [transport.py] [_log()] Compression: none
2026-04-15T18:50:42.972 [DEBUG] [Thread-23969] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:50:42.992 [DEBUG] [Thread-23969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:50:42.992 [DEBUG] [Thread-23969] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:50:42.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:50:42.993 [DEBUG] [Thread-23969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:50:42.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:50:42.994 [DEBUG] [Thread-23969] [transport.py] [_log()] userauth is OK
2026-04-15T18:50:42.994 [DEBUG] [Thread-23969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:50:42.994 [DEBUG] [Thread-23969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:50:42.994 [DEBUG] [Thread-23969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:50:42.994 [DEBUG] [Thread-23969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:50:43.018 [INFO] [Thread-23969] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:50:43.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:50:43.645 [DEBUG] [Thread-23969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:50:43.645 [DEBUG] [Thread-23969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:50:43.646 [DEBUG] [Thread-23969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:50:43.686 [DEBUG] [Thread-23969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:50:43.686 [DEBUG] [Thread-23969] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:50:43.689 [DEBUG] [Thread-23969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:50:43.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:50:43.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:50:43.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:50:43.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:50:43.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:50:43.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:50:43.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:50:43.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:50:43.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:50:43.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.701522 -999.00  +10.60  17.09     76   +6.70 1 2 1 1 1    37    0 3.29 -24.92 ----- 12.9 17.1 300.8 19.7 11.6 -24.7 11.4 -23.5 11.1 -21.4 11.4 -23.4
2026-04-15T18:50:43.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:50:43.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:50:43.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.701522
2026-04-15T18:50:43.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:50:43.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:50:43.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:50:43.713 [DEBUG] [Thread-23969] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:50:43.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:50:43.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:50:43.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:50:15', tmtdew=4.73326, humidity=72.6885, cloud=0.0, wind=16.4628, temperature=10.7024, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:50:11.501', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:50:43.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:50:43.973 [DEBUG] [Thread-23972] [transport.py] [_log()] starting thread (client mode): 0xf13fdab0
2026-04-15T18:50:43.973 [DEBUG] [Thread-23972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:50:43.988 [DEBUG] [Thread-23972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:50:43.988 [INFO] [Thread-23972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:50:43.995 [DEBUG] [Thread-23972] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:50:43.995 [DEBUG] [Thread-23972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:50:43.995 [DEBUG] [Thread-23972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:50:43.996 [DEBUG] [Thread-23972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:50:43.996 [DEBUG] [Thread-23972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:50:43.996 [DEBUG] [Thread-23972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:50:43.996 [DEBUG] [Thread-23972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:50:43.996 [DEBUG] [Thread-23972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:50:43.996 [DEBUG] [Thread-23972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:50:43.996 [DEBUG] [Thread-23972] [transport.py] [_log()] client lang: <none>
2026-04-15T18:50:43.996 [DEBUG] [Thread-23972] [transport.py] [_log()] server lang: <none>
2026-04-15T18:50:43.996 [DEBUG] [Thread-23972] [transport.py] [_log()] kex follows: False
2026-04-15T18:50:43.996 [DEBUG] [Thread-23972] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:50:43.996 [DEBUG] [Thread-23972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:50:43.996 [DEBUG] [Thread-23972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:50:43.997 [DEBUG] [Thread-23972] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:50:43.997 [DEBUG] [Thread-23972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:50:43.997 [DEBUG] [Thread-23972] [transport.py] [_log()] Compression: none
2026-04-15T18:50:43.997 [DEBUG] [Thread-23972] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:50:44.052 [DEBUG] [Thread-23972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:50:44.052 [DEBUG] [Thread-23972] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:50:44.053 [DEBUG] [Thread-23972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:50:44.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:50:44.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:50:44.109 [DEBUG] [Thread-23972] [transport.py] [_log()] userauth is OK
2026-04-15T18:50:44.109 [DEBUG] [Thread-23972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:50:44.109 [DEBUG] [Thread-23972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:50:44.109 [DEBUG] [Thread-23972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:50:44.110 [DEBUG] [Thread-23972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:50:44.135 [INFO] [Thread-23972] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:50:44.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:50:44.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:50:44.968 [DEBUG] [Thread-23972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:50:44.968 [DEBUG] [Thread-23972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:50:45.016 [DEBUG] [Thread-23972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:50:45.016 [DEBUG] [Thread-23972] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:50:45.025 [DEBUG] [Thread-23972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:50:45.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:50:45.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')
2026-04-15T18:50:45.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
2026-04-15T18:50:45.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:50:45.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:50:45.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:50:45.060 [DEBUG] [Thread-23972] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:50:48.378 [DEBUG] [Thread-23974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:50:53.098 [DEBUG] [Thread-23975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:51:03.428 [DEBUG] [Thread-23976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:51:15.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:51:15.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:51:15.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
2026-04-15T18:51:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 50, 51), 4.81851, 72.1117, 0.0, 19.7251, 10.9717, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:51:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:50:51
2026-04-15T18:51:16.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:51:17.380 [DEBUG] [Thread-23977] [transport.py] [_log()] starting thread (client mode): 0xee90d240
2026-04-15T18:51:17.381 [DEBUG] [Thread-23977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:51:17.399 [DEBUG] [Thread-23977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:51:17.399 [INFO] [Thread-23977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:51:17.403 [DEBUG] [Thread-23977] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:51:17.403 [DEBUG] [Thread-23977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:51:17.403 [DEBUG] [Thread-23977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:51:17.403 [DEBUG] [Thread-23977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:51:17.403 [DEBUG] [Thread-23977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:51:17.403 [DEBUG] [Thread-23977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:51:17.403 [DEBUG] [Thread-23977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:51:17.403 [DEBUG] [Thread-23977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:51:17.403 [DEBUG] [Thread-23977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:51:17.403 [DEBUG] [Thread-23977] [transport.py] [_log()] client lang: <none>
2026-04-15T18:51:17.403 [DEBUG] [Thread-23977] [transport.py] [_log()] server lang: <none>
2026-04-15T18:51:17.403 [DEBUG] [Thread-23977] [transport.py] [_log()] kex follows: False
2026-04-15T18:51:17.404 [DEBUG] [Thread-23977] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:51:17.404 [DEBUG] [Thread-23977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:51:17.404 [DEBUG] [Thread-23977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:51:17.404 [DEBUG] [Thread-23977] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:51:17.404 [DEBUG] [Thread-23977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:51:17.404 [DEBUG] [Thread-23977] [transport.py] [_log()] Compression: none
2026-04-15T18:51:17.404 [DEBUG] [Thread-23977] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:51:17.420 [DEBUG] [Thread-23977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:51:17.420 [DEBUG] [Thread-23977] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:51:17.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:51:17.421 [DEBUG] [Thread-23977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:51:17.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:51:17.422 [DEBUG] [Thread-23977] [transport.py] [_log()] userauth is OK
2026-04-15T18:51:17.422 [DEBUG] [Thread-23977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:51:17.422 [DEBUG] [Thread-23977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:51:17.423 [DEBUG] [Thread-23977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:51:17.423 [DEBUG] [Thread-23977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:51:17.441 [INFO] [Thread-23977] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:51:17.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:51:18.051 [DEBUG] [Thread-23977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:51:18.051 [DEBUG] [Thread-23977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:51:18.051 [DEBUG] [Thread-23977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:51:18.092 [DEBUG] [Thread-23977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:51:18.092 [DEBUG] [Thread-23977] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:51:18.095 [DEBUG] [Thread-23977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:51:18.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:51:18.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:51:18.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:51:18.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:51:18.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:51:18.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:51:18.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:51:18.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:51:18.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:51:18.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.701870 -999.00  +10.60  16.91     77   +6.80 1 2 1 1 1    34    0 3.27 -22.98 ----- 17.9 16.9 311.8 18.4 11.6 -24.8 11.4 -23.6 11.1 -21.6 11.4 -23.5
2026-04-15T18:51:18.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:51:18.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:51:18.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.701870
2026-04-15T18:51:18.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:51:18.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:51:18.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:51:18.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:51:18.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:51:18.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:50:51', tmtdew=4.81851, humidity=72.1117, cloud=0.0, wind=19.7251, temperature=10.9717, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:50:41.568', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:51:18.120 [DEBUG] [Thread-23977] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:51:18.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:51:18.343 [DEBUG] [Thread-23980] [transport.py] [_log()] starting thread (client mode): 0xf13fe200
2026-04-15T18:51:18.343 [DEBUG] [Thread-23980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:51:18.358 [DEBUG] [Thread-23980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:51:18.358 [INFO] [Thread-23980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:51:18.366 [DEBUG] [Thread-23980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:51:18.366 [DEBUG] [Thread-23980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:51:18.366 [DEBUG] [Thread-23980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:51:18.366 [DEBUG] [Thread-23980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:51:18.366 [DEBUG] [Thread-23980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:51:18.366 [DEBUG] [Thread-23980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:51:18.366 [DEBUG] [Thread-23980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:51:18.366 [DEBUG] [Thread-23980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:51:18.366 [DEBUG] [Thread-23980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:51:18.366 [DEBUG] [Thread-23980] [transport.py] [_log()] client lang: <none>
2026-04-15T18:51:18.366 [DEBUG] [Thread-23980] [transport.py] [_log()] server lang: <none>
2026-04-15T18:51:18.367 [DEBUG] [Thread-23980] [transport.py] [_log()] kex follows: False
2026-04-15T18:51:18.367 [DEBUG] [Thread-23980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:51:18.367 [DEBUG] [Thread-23980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:51:18.367 [DEBUG] [Thread-23980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:51:18.367 [DEBUG] [Thread-23980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:51:18.367 [DEBUG] [Thread-23980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:51:18.367 [DEBUG] [Thread-23980] [transport.py] [_log()] Compression: none
2026-04-15T18:51:18.367 [DEBUG] [Thread-23980] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:51:18.430 [DEBUG] [Thread-23980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:51:18.431 [DEBUG] [Thread-23980] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:51:18.431 [DEBUG] [Thread-23980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:51:18.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:51:18.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:51:18.460 [DEBUG] [Thread-23982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:51:18.488 [DEBUG] [Thread-23980] [transport.py] [_log()] userauth is OK
2026-04-15T18:51:18.489 [DEBUG] [Thread-23980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:51:18.489 [DEBUG] [Thread-23980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:51:18.489 [DEBUG] [Thread-23980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:51:18.489 [DEBUG] [Thread-23980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:51:18.514 [INFO] [Thread-23980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:51:18.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:51:18.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:51:19.322 [DEBUG] [Thread-23980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:51:19.322 [DEBUG] [Thread-23980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:51:19.370 [DEBUG] [Thread-23980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:51:19.370 [DEBUG] [Thread-23980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:51:19.379 [DEBUG] [Thread-23980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:51:19.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:51: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')
2026-04-15T18:51: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
2026-04-15T18:51:19.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:51:19.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:51:19.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:51:19.414 [DEBUG] [Thread-23980] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:51:33.502 [DEBUG] [Thread-23983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:51:33.849 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:51:33.851 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:51:48.533 [DEBUG] [Thread-23984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:51:49.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:51:49.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:51:49.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
2026-04-15T18:51:50.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 51, 27), 4.75708, 72.0728, 0.0, 15.0862, 10.6693, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:51:50.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:51:27
2026-04-15T18:51:51.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:51:51.483 [DEBUG] [Thread-23985] [transport.py] [_log()] starting thread (client mode): 0xee90f070
2026-04-15T18:51:51.484 [DEBUG] [Thread-23985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:51:51.503 [DEBUG] [Thread-23985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:51:51.503 [INFO] [Thread-23985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:51:51.507 [DEBUG] [Thread-23985] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:51:51.507 [DEBUG] [Thread-23985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:51:51.507 [DEBUG] [Thread-23985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:51:51.507 [DEBUG] [Thread-23985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:51:51.507 [DEBUG] [Thread-23985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:51:51.507 [DEBUG] [Thread-23985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:51:51.507 [DEBUG] [Thread-23985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:51:51.507 [DEBUG] [Thread-23985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:51:51.507 [DEBUG] [Thread-23985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:51:51.508 [DEBUG] [Thread-23985] [transport.py] [_log()] client lang: <none>
2026-04-15T18:51:51.508 [DEBUG] [Thread-23985] [transport.py] [_log()] server lang: <none>
2026-04-15T18:51:51.508 [DEBUG] [Thread-23985] [transport.py] [_log()] kex follows: False
2026-04-15T18:51:51.508 [DEBUG] [Thread-23985] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:51:51.508 [DEBUG] [Thread-23985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:51:51.508 [DEBUG] [Thread-23985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:51:51.508 [DEBUG] [Thread-23985] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:51:51.508 [DEBUG] [Thread-23985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:51:51.508 [DEBUG] [Thread-23985] [transport.py] [_log()] Compression: none
2026-04-15T18:51:51.508 [DEBUG] [Thread-23985] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:51:51.524 [DEBUG] [Thread-23985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:51:51.525 [DEBUG] [Thread-23985] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:51:51.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:51:51.525 [DEBUG] [Thread-23985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:51:51.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:51:51.568 [DEBUG] [Thread-23985] [transport.py] [_log()] userauth is OK
2026-04-15T18:51:51.569 [DEBUG] [Thread-23985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:51:51.569 [DEBUG] [Thread-23985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:51:51.569 [DEBUG] [Thread-23985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:51:51.569 [DEBUG] [Thread-23985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:51:51.590 [INFO] [Thread-23985] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:51:51.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:51:52.392 [DEBUG] [Thread-23985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:51:52.392 [DEBUG] [Thread-23985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:51:52.393 [DEBUG] [Thread-23985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:51:52.433 [DEBUG] [Thread-23985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:51:52.433 [DEBUG] [Thread-23985] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:51:52.436 [DEBUG] [Thread-23985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:51:52.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:51:52.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:51:52.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:51:52.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:51:52.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:51:52.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:51:52.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:51:52.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:51:52.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:51:52.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.702217 -999.00  +10.60  14.95     77   +6.80 1 2 1 1 1    30    0 3.37 -20.81 ----- 14.0 14.9 304.2 20.7 11.5 -24.8 11.4 -23.6 11.1 -21.5 11.4 -23.7
2026-04-15T18:51:52.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:51:52.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:51:52.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.702217
2026-04-15T18:51:52.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:51:52.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:51:52.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:51:52.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:51:52.456 [DEBUG] [Thread-23985] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:51:52.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:51:52.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:51:27', tmtdew=4.75708, humidity=72.0728, cloud=0.0, wind=15.0862, temperature=10.6693, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:51:11.549', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:51:52.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:51:52.713 [DEBUG] [Thread-23988] [transport.py] [_log()] starting thread (client mode): 0xf1335540
2026-04-15T18:51:52.713 [DEBUG] [Thread-23988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:51:52.727 [DEBUG] [Thread-23988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:51:52.727 [INFO] [Thread-23988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:51:52.735 [DEBUG] [Thread-23988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:51:52.735 [DEBUG] [Thread-23988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:51:52.735 [DEBUG] [Thread-23988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:51:52.735 [DEBUG] [Thread-23988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:51:52.735 [DEBUG] [Thread-23988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:51:52.735 [DEBUG] [Thread-23988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:51:52.735 [DEBUG] [Thread-23988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:51:52.735 [DEBUG] [Thread-23988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:51:52.735 [DEBUG] [Thread-23988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:51:52.736 [DEBUG] [Thread-23988] [transport.py] [_log()] client lang: <none>
2026-04-15T18:51:52.736 [DEBUG] [Thread-23988] [transport.py] [_log()] server lang: <none>
2026-04-15T18:51:52.736 [DEBUG] [Thread-23988] [transport.py] [_log()] kex follows: False
2026-04-15T18:51:52.736 [DEBUG] [Thread-23988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:51:52.736 [DEBUG] [Thread-23988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:51:52.736 [DEBUG] [Thread-23988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:51:52.736 [DEBUG] [Thread-23988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:51:52.736 [DEBUG] [Thread-23988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:51:52.736 [DEBUG] [Thread-23988] [transport.py] [_log()] Compression: none
2026-04-15T18:51:52.736 [DEBUG] [Thread-23988] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:51:52.791 [DEBUG] [Thread-23988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:51:52.792 [DEBUG] [Thread-23988] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:51:52.792 [DEBUG] [Thread-23988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:51:52.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:51:52.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:51:52.848 [DEBUG] [Thread-23988] [transport.py] [_log()] userauth is OK
2026-04-15T18:51:52.848 [DEBUG] [Thread-23988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:51:52.849 [DEBUG] [Thread-23988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:51:52.849 [DEBUG] [Thread-23988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:51:52.849 [DEBUG] [Thread-23988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:51:52.874 [INFO] [Thread-23988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:51:52.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:51:52.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:51:53.242 [DEBUG] [Thread-23990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:51:53.692 [DEBUG] [Thread-23988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:51:53.693 [DEBUG] [Thread-23988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:51:53.740 [DEBUG] [Thread-23988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:51:53.740 [DEBUG] [Thread-23988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:51:53.749 [DEBUG] [Thread-23988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:51:53.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:51:53.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')
2026-04-15T18:51:53.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
2026-04-15T18:51:53.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:51:53.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:51:53.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:51:53.784 [DEBUG] [Thread-23988] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:52:03.564 [DEBUG] [Thread-23991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:52:18.603 [DEBUG] [Thread-23992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:52:23.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:52:23.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:52:23.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
2026-04-15T18:52:25.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 52, 2), 4.76524, 72.023, 0.0, 14.2394, 10.6196, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:52:25.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:52:02
2026-04-15T18:52:25.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:52:25.921 [DEBUG] [Thread-23993] [transport.py] [_log()] starting thread (client mode): 0xee90ed10
2026-04-15T18:52:25.922 [DEBUG] [Thread-23993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:52:25.942 [DEBUG] [Thread-23993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:52:25.942 [INFO] [Thread-23993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:52:25.946 [DEBUG] [Thread-23993] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:52:25.946 [DEBUG] [Thread-23993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:52:25.946 [DEBUG] [Thread-23993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:52:25.946 [DEBUG] [Thread-23993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:52:25.946 [DEBUG] [Thread-23993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:52:25.946 [DEBUG] [Thread-23993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:52:25.946 [DEBUG] [Thread-23993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:52:25.946 [DEBUG] [Thread-23993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:52:25.946 [DEBUG] [Thread-23993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:52:25.946 [DEBUG] [Thread-23993] [transport.py] [_log()] client lang: <none>
2026-04-15T18:52:25.946 [DEBUG] [Thread-23993] [transport.py] [_log()] server lang: <none>
2026-04-15T18:52:25.947 [DEBUG] [Thread-23993] [transport.py] [_log()] kex follows: False
2026-04-15T18:52:25.947 [DEBUG] [Thread-23993] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:52:25.947 [DEBUG] [Thread-23993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:52:25.947 [DEBUG] [Thread-23993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:52:25.947 [DEBUG] [Thread-23993] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:52:25.947 [DEBUG] [Thread-23993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:52:25.947 [DEBUG] [Thread-23993] [transport.py] [_log()] Compression: none
2026-04-15T18:52:25.947 [DEBUG] [Thread-23993] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:52:25.965 [DEBUG] [Thread-23993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:52:25.966 [DEBUG] [Thread-23993] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:52:25.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:52:25.966 [DEBUG] [Thread-23993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:52:25.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:52:25.967 [DEBUG] [Thread-23993] [transport.py] [_log()] userauth is OK
2026-04-15T18:52:25.967 [DEBUG] [Thread-23993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:52:25.967 [DEBUG] [Thread-23993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:52:25.968 [DEBUG] [Thread-23993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:52:25.968 [DEBUG] [Thread-23993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:52:26.005 [INFO] [Thread-23993] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:52:26.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:52:26.790 [DEBUG] [Thread-23993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:52:26.790 [DEBUG] [Thread-23993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:52:26.791 [DEBUG] [Thread-23993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:52:26.831 [DEBUG] [Thread-23993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:52:26.831 [DEBUG] [Thread-23993] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:52:26.834 [DEBUG] [Thread-23993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:52:26.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:52:26.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:52:26.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:52:26.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:52:26.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:52:26.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:52:26.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:52:26.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:52:26.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:52:26.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.702564 -999.00  +10.60  16.57     77   +6.70 1 2 1 1 1    27    0 3.30 -21.06 ----- 14.4 16.6 304.0 19.7 11.6 -24.8 11.4 -23.6 11.0 -21.6 11.4 -23.6
2026-04-15T18:52:26.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:52:26.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:52:26.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.702564
2026-04-15T18:52:26.858 [DEBUG] [Thread-23993] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:52:26.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:52:26.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:52:26.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:52:26.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:52:26.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:52:26.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:52:02', tmtdew=4.76524, humidity=72.023, cloud=0.0, wind=14.2394, temperature=10.6196, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:51:41.530', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:52:27.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:52:27.116 [DEBUG] [Thread-23996] [transport.py] [_log()] starting thread (client mode): 0xee90f3d0
2026-04-15T18:52:27.117 [DEBUG] [Thread-23996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:52:27.133 [DEBUG] [Thread-23996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:52:27.133 [INFO] [Thread-23996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:52:27.140 [DEBUG] [Thread-23996] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:52:27.140 [DEBUG] [Thread-23996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:52:27.140 [DEBUG] [Thread-23996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:52:27.141 [DEBUG] [Thread-23996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:52:27.141 [DEBUG] [Thread-23996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:52:27.141 [DEBUG] [Thread-23996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:52:27.141 [DEBUG] [Thread-23996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:52:27.141 [DEBUG] [Thread-23996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:52:27.141 [DEBUG] [Thread-23996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:52:27.141 [DEBUG] [Thread-23996] [transport.py] [_log()] client lang: <none>
2026-04-15T18:52:27.141 [DEBUG] [Thread-23996] [transport.py] [_log()] server lang: <none>
2026-04-15T18:52:27.141 [DEBUG] [Thread-23996] [transport.py] [_log()] kex follows: False
2026-04-15T18:52:27.141 [DEBUG] [Thread-23996] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:52:27.141 [DEBUG] [Thread-23996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:52:27.141 [DEBUG] [Thread-23996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:52:27.142 [DEBUG] [Thread-23996] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:52:27.142 [DEBUG] [Thread-23996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:52:27.142 [DEBUG] [Thread-23996] [transport.py] [_log()] Compression: none
2026-04-15T18:52:27.142 [DEBUG] [Thread-23996] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:52:27.199 [DEBUG] [Thread-23996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:52:27.199 [DEBUG] [Thread-23996] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:52:27.200 [DEBUG] [Thread-23996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:52:27.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:52:27.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:52:27.256 [DEBUG] [Thread-23996] [transport.py] [_log()] userauth is OK
2026-04-15T18:52:27.256 [DEBUG] [Thread-23996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:52:27.256 [DEBUG] [Thread-23996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:52:27.257 [DEBUG] [Thread-23996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:52:27.257 [DEBUG] [Thread-23996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:52:27.280 [INFO] [Thread-23996] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:52:27.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:52:27.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:52:28.110 [DEBUG] [Thread-23996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:52:28.111 [DEBUG] [Thread-23996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:52:28.158 [DEBUG] [Thread-23996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:52:28.158 [DEBUG] [Thread-23996] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:52:28.167 [DEBUG] [Thread-23996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:52:28.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:52:28.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')
2026-04-15T18:52:28.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
2026-04-15T18:52:28.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:52:28.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:52:28.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:52:28.204 [DEBUG] [Thread-23996] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:52:33.635 [DEBUG] [Thread-23998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:52:37.972 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:52:37.973 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:52:48.680 [DEBUG] [Thread-23999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:52:53.393 [DEBUG] [Thread-24000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:52:58.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:52:58.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:52:58.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
2026-04-15T18:52:59.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 52, 38), 4.87709, 71.8146, 0.0, 15.7738, 10.9396, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:52:59.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:52:38
2026-04-15T18:52:59.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:53:00.236 [DEBUG] [Thread-24001] [transport.py] [_log()] starting thread (client mode): 0xee90f220
2026-04-15T18:53:00.236 [DEBUG] [Thread-24001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:53:00.257 [DEBUG] [Thread-24001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:53:00.257 [INFO] [Thread-24001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:53:00.260 [DEBUG] [Thread-24001] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:53:00.260 [DEBUG] [Thread-24001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:53:00.260 [DEBUG] [Thread-24001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:53:00.260 [DEBUG] [Thread-24001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:53:00.260 [DEBUG] [Thread-24001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:53:00.260 [DEBUG] [Thread-24001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:53:00.260 [DEBUG] [Thread-24001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:53:00.260 [DEBUG] [Thread-24001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:53:00.261 [DEBUG] [Thread-24001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:53:00.261 [DEBUG] [Thread-24001] [transport.py] [_log()] client lang: <none>
2026-04-15T18:53:00.261 [DEBUG] [Thread-24001] [transport.py] [_log()] server lang: <none>
2026-04-15T18:53:00.261 [DEBUG] [Thread-24001] [transport.py] [_log()] kex follows: False
2026-04-15T18:53:00.261 [DEBUG] [Thread-24001] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:53:00.261 [DEBUG] [Thread-24001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:53:00.261 [DEBUG] [Thread-24001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:53:00.261 [DEBUG] [Thread-24001] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:53:00.261 [DEBUG] [Thread-24001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:53:00.261 [DEBUG] [Thread-24001] [transport.py] [_log()] Compression: none
2026-04-15T18:53:00.261 [DEBUG] [Thread-24001] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:53:00.276 [DEBUG] [Thread-24001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:53:00.276 [DEBUG] [Thread-24001] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:53:00.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:53:00.277 [DEBUG] [Thread-24001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:53:00.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:53:00.278 [DEBUG] [Thread-24001] [transport.py] [_log()] userauth is OK
2026-04-15T18:53:00.278 [DEBUG] [Thread-24001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:53:00.278 [DEBUG] [Thread-24001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:53:00.278 [DEBUG] [Thread-24001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:53:00.278 [DEBUG] [Thread-24001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:53:00.297 [INFO] [Thread-24001] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:53:00.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:53:01.103 [DEBUG] [Thread-24001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:53:01.103 [DEBUG] [Thread-24001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:53:01.104 [DEBUG] [Thread-24001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:53:01.144 [DEBUG] [Thread-24001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:53:01.144 [DEBUG] [Thread-24001] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:53:01.147 [DEBUG] [Thread-24001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:53:01.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:53:01.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:53:01.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:53:01.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:53:01.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:53:01.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:53:01.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:53:01.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:53:01.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:53:01.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.703259 -999.00  +10.60  16.14     77   +6.70 1 2 1 1 1    22    0 3.45 -18.57 ----- 18.0 16.1 306.2 18.6 11.5 -24.7 11.3 -23.6 11.1 -21.5 11.4 -23.8
2026-04-15T18:53:01.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:53:01.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:53:01.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.703259
2026-04-15T18:53:01.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:53:01.171 [DEBUG] [Thread-24001] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:53:01.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:53:01.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:53:01.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:53:01.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:53:01.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:52:38', tmtdew=4.87709, humidity=71.8146, cloud=0.0, wind=15.7738, temperature=10.9396, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:52:41.578', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:53:01.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:53:01.430 [DEBUG] [Thread-24004] [transport.py] [_log()] starting thread (client mode): 0xee91c760
2026-04-15T18:53:01.431 [DEBUG] [Thread-24004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:53:01.445 [DEBUG] [Thread-24004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:53:01.445 [INFO] [Thread-24004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:53:01.453 [DEBUG] [Thread-24004] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:53:01.453 [DEBUG] [Thread-24004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:53:01.453 [DEBUG] [Thread-24004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:53:01.453 [DEBUG] [Thread-24004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:53:01.453 [DEBUG] [Thread-24004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:53:01.453 [DEBUG] [Thread-24004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:53:01.453 [DEBUG] [Thread-24004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:53:01.453 [DEBUG] [Thread-24004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:53:01.453 [DEBUG] [Thread-24004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:53:01.454 [DEBUG] [Thread-24004] [transport.py] [_log()] client lang: <none>
2026-04-15T18:53:01.454 [DEBUG] [Thread-24004] [transport.py] [_log()] server lang: <none>
2026-04-15T18:53:01.454 [DEBUG] [Thread-24004] [transport.py] [_log()] kex follows: False
2026-04-15T18:53:01.454 [DEBUG] [Thread-24004] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:53:01.454 [DEBUG] [Thread-24004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:53:01.454 [DEBUG] [Thread-24004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:53:01.454 [DEBUG] [Thread-24004] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:53:01.454 [DEBUG] [Thread-24004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:53:01.454 [DEBUG] [Thread-24004] [transport.py] [_log()] Compression: none
2026-04-15T18:53:01.454 [DEBUG] [Thread-24004] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:53:01.510 [DEBUG] [Thread-24004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:53:01.511 [DEBUG] [Thread-24004] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:53:01.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:53:01.511 [DEBUG] [Thread-24004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:53:01.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:53:01.567 [DEBUG] [Thread-24004] [transport.py] [_log()] userauth is OK
2026-04-15T18:53:01.568 [DEBUG] [Thread-24004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:53:01.568 [DEBUG] [Thread-24004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:53:01.568 [DEBUG] [Thread-24004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:53:01.568 [DEBUG] [Thread-24004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:53:01.593 [INFO] [Thread-24004] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:53:01.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:53:01.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:53:02.468 [DEBUG] [Thread-24004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:53:02.469 [DEBUG] [Thread-24004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:53:02.516 [DEBUG] [Thread-24004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:53:02.516 [DEBUG] [Thread-24004] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:53:02.526 [DEBUG] [Thread-24004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:53:02.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:53:02.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')
2026-04-15T18:53:02.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
2026-04-15T18:53:02.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:53:02.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:53:02.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:53:02.560 [DEBUG] [Thread-24004] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:53:03.713 [DEBUG] [Thread-24006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:53:18.755 [DEBUG] [Thread-24007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:53:32.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:53:32.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:53:32.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T18:53:33.785 [DEBUG] [Thread-24008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:53:33.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 53, 13), 4.84461, 71.8741, 0.0, 16.304, 10.6032, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:53:33.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:53:13
2026-04-15T18:53:34.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:53:34.784 [DEBUG] [Thread-24009] [transport.py] [_log()] starting thread (client mode): 0xee91e170
2026-04-15T18:53:34.784 [DEBUG] [Thread-24009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:53:34.804 [DEBUG] [Thread-24009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:53:34.804 [INFO] [Thread-24009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:53:34.807 [DEBUG] [Thread-24009] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:53:34.807 [DEBUG] [Thread-24009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:53:34.807 [DEBUG] [Thread-24009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:53:34.807 [DEBUG] [Thread-24009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:53:34.807 [DEBUG] [Thread-24009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:53:34.807 [DEBUG] [Thread-24009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:53:34.807 [DEBUG] [Thread-24009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:53:34.807 [DEBUG] [Thread-24009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:53:34.807 [DEBUG] [Thread-24009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:53:34.808 [DEBUG] [Thread-24009] [transport.py] [_log()] client lang: <none>
2026-04-15T18:53:34.808 [DEBUG] [Thread-24009] [transport.py] [_log()] server lang: <none>
2026-04-15T18:53:34.808 [DEBUG] [Thread-24009] [transport.py] [_log()] kex follows: False
2026-04-15T18:53:34.808 [DEBUG] [Thread-24009] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:53:34.808 [DEBUG] [Thread-24009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:53:34.808 [DEBUG] [Thread-24009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:53:34.808 [DEBUG] [Thread-24009] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:53:34.808 [DEBUG] [Thread-24009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:53:34.808 [DEBUG] [Thread-24009] [transport.py] [_log()] Compression: none
2026-04-15T18:53:34.808 [DEBUG] [Thread-24009] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:53:34.818 [DEBUG] [Thread-24009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:53:34.818 [DEBUG] [Thread-24009] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:53:34.818 [DEBUG] [Thread-24009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:53:34.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:53:34.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:53:34.819 [DEBUG] [Thread-24009] [transport.py] [_log()] userauth is OK
2026-04-15T18:53:34.819 [DEBUG] [Thread-24009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:53:34.819 [DEBUG] [Thread-24009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:53:34.819 [DEBUG] [Thread-24009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:53:34.819 [DEBUG] [Thread-24009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:53:34.832 [INFO] [Thread-24009] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:53:34.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:53:35.635 [DEBUG] [Thread-24009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:53:35.635 [DEBUG] [Thread-24009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:53:35.636 [DEBUG] [Thread-24009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:53:35.676 [DEBUG] [Thread-24009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:53:35.676 [DEBUG] [Thread-24009] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:53:35.679 [DEBUG] [Thread-24009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:53:35.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:53:35.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:53:35.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:53:35.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:53:35.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:53:35.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:53:35.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:53:35.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:53:35.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:53:35.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.703606 -999.00  +10.60  12.21     77   +6.70 1 2 1 1 1    20    0 3.45 -17.00 ----- 14.5 12.2 303.2 20.3 11.5 -24.8 11.3 -23.6 11.1 -21.5 11.3 -23.7
2026-04-15T18:53:35.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:53:35.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:53:35.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.703606
2026-04-15T18:53:35.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:53:35.704 [DEBUG] [Thread-24009] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:53:35.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:53:35.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:53:35.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:53:35.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:53:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:53:13', tmtdew=4.84461, humidity=71.8741, cloud=0.0, wind=16.304, temperature=10.6032, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:53:11.558', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:53:35.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:53:35.963 [DEBUG] [Thread-24012] [transport.py] [_log()] starting thread (client mode): 0xf13ca6e0
2026-04-15T18:53:35.963 [DEBUG] [Thread-24012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:53:35.977 [DEBUG] [Thread-24012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:53:35.977 [INFO] [Thread-24012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:53:35.985 [DEBUG] [Thread-24012] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:53:35.985 [DEBUG] [Thread-24012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:53:35.985 [DEBUG] [Thread-24012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:53:35.985 [DEBUG] [Thread-24012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:53:35.985 [DEBUG] [Thread-24012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:53:35.985 [DEBUG] [Thread-24012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:53:35.985 [DEBUG] [Thread-24012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:53:35.985 [DEBUG] [Thread-24012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:53:35.986 [DEBUG] [Thread-24012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:53:35.986 [DEBUG] [Thread-24012] [transport.py] [_log()] client lang: <none>
2026-04-15T18:53:35.986 [DEBUG] [Thread-24012] [transport.py] [_log()] server lang: <none>
2026-04-15T18:53:35.986 [DEBUG] [Thread-24012] [transport.py] [_log()] kex follows: False
2026-04-15T18:53:35.986 [DEBUG] [Thread-24012] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:53:35.986 [DEBUG] [Thread-24012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:53:35.986 [DEBUG] [Thread-24012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:53:35.986 [DEBUG] [Thread-24012] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:53:35.986 [DEBUG] [Thread-24012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:53:35.986 [DEBUG] [Thread-24012] [transport.py] [_log()] Compression: none
2026-04-15T18:53:35.986 [DEBUG] [Thread-24012] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:53:36.042 [DEBUG] [Thread-24012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:53:36.042 [DEBUG] [Thread-24012] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:53:36.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:53:36.043 [DEBUG] [Thread-24012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:53:36.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:53:36.099 [DEBUG] [Thread-24012] [transport.py] [_log()] userauth is OK
2026-04-15T18:53:36.099 [DEBUG] [Thread-24012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:53:36.099 [DEBUG] [Thread-24012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:53:36.099 [DEBUG] [Thread-24012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:53:36.099 [DEBUG] [Thread-24012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:53:36.125 [INFO] [Thread-24012] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:53:36.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:53:36.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:53:36.915 [DEBUG] [Thread-24012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:53:36.915 [DEBUG] [Thread-24012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:53:36.963 [DEBUG] [Thread-24012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:53:36.963 [DEBUG] [Thread-24012] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:53:36.972 [DEBUG] [Thread-24012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:53:36.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:53:36.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')
2026-04-15T18:53:36.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
2026-04-15T18:53:36.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:53:36.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:53:36.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:53:37.007 [DEBUG] [Thread-24012] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:53:42.295 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:53:42.296 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:53:48.814 [DEBUG] [Thread-24014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:53:53.540 [DEBUG] [Thread-24015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:54:03.856 [DEBUG] [Thread-24016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:54:07.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:54:07.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:54:07.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
2026-04-15T18:54:08.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 53, 49), 4.87281, 71.8482, 0.0, 16.0207, 11.0063, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:54:08.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:53:49
2026-04-15T18:54:08.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:54:09.145 [DEBUG] [Thread-24017] [transport.py] [_log()] starting thread (client mode): 0xf1337790
2026-04-15T18:54:09.145 [DEBUG] [Thread-24017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:54:09.166 [DEBUG] [Thread-24017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:54:09.166 [INFO] [Thread-24017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:54:09.169 [DEBUG] [Thread-24017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:54:09.169 [DEBUG] [Thread-24017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:54:09.169 [DEBUG] [Thread-24017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:54:09.169 [DEBUG] [Thread-24017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:54:09.169 [DEBUG] [Thread-24017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:54:09.170 [DEBUG] [Thread-24017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:54:09.170 [DEBUG] [Thread-24017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:54:09.170 [DEBUG] [Thread-24017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:54:09.170 [DEBUG] [Thread-24017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:54:09.170 [DEBUG] [Thread-24017] [transport.py] [_log()] client lang: <none>
2026-04-15T18:54:09.170 [DEBUG] [Thread-24017] [transport.py] [_log()] server lang: <none>
2026-04-15T18:54:09.170 [DEBUG] [Thread-24017] [transport.py] [_log()] kex follows: False
2026-04-15T18:54:09.170 [DEBUG] [Thread-24017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:54:09.170 [DEBUG] [Thread-24017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:54:09.170 [DEBUG] [Thread-24017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:54:09.171 [DEBUG] [Thread-24017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:54:09.171 [DEBUG] [Thread-24017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:54:09.171 [DEBUG] [Thread-24017] [transport.py] [_log()] Compression: none
2026-04-15T18:54:09.171 [DEBUG] [Thread-24017] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:54:09.187 [DEBUG] [Thread-24017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:54:09.188 [DEBUG] [Thread-24017] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:54:09.188 [DEBUG] [Thread-24017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:54:09.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:54:09.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:54:09.189 [DEBUG] [Thread-24017] [transport.py] [_log()] userauth is OK
2026-04-15T18:54:09.190 [DEBUG] [Thread-24017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:54:09.190 [DEBUG] [Thread-24017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:54:09.190 [DEBUG] [Thread-24017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:54:09.190 [DEBUG] [Thread-24017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:54:09.210 [INFO] [Thread-24017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:54:09.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:54:09.925 [DEBUG] [Thread-24017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:54:09.925 [DEBUG] [Thread-24017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:54:09.926 [DEBUG] [Thread-24017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:54:09.966 [DEBUG] [Thread-24017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:54:09.966 [DEBUG] [Thread-24017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:54:09.969 [DEBUG] [Thread-24017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:54:09.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:54:09.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:54:09.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:54:09.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:54:09.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:54:09.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:54:09.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:54:09.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:54:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:54:09.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.703953 -999.00  +10.60  15.36     77   +6.70 1 2 1 1 1    18    0 3.42 -16.08 ----- 14.1 15.4 299.0 17.7 11.4 -25.0 11.3 -23.5 11.0 -21.7 11.3 -23.8
2026-04-15T18:54:09.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:54:09.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:54:09.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.703953
2026-04-15T18:54:09.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:54:09.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:54:09.993 [DEBUG] [Thread-24017] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:54:09.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:54:09.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:54:09.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:54:09.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:53:49', tmtdew=4.87281, humidity=71.8482, cloud=0.0, wind=16.0207, temperature=11.0063, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:53:41.539', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:54:10.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:54:10.251 [DEBUG] [Thread-24020] [transport.py] [_log()] starting thread (client mode): 0xf13c8d30
2026-04-15T18:54:10.251 [DEBUG] [Thread-24020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:54:10.265 [DEBUG] [Thread-24020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:54:10.266 [INFO] [Thread-24020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:54:10.273 [DEBUG] [Thread-24020] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:54:10.273 [DEBUG] [Thread-24020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:54:10.273 [DEBUG] [Thread-24020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:54:10.273 [DEBUG] [Thread-24020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:54:10.273 [DEBUG] [Thread-24020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:54:10.273 [DEBUG] [Thread-24020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:54:10.273 [DEBUG] [Thread-24020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:54:10.273 [DEBUG] [Thread-24020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:54:10.273 [DEBUG] [Thread-24020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:54:10.273 [DEBUG] [Thread-24020] [transport.py] [_log()] client lang: <none>
2026-04-15T18:54:10.273 [DEBUG] [Thread-24020] [transport.py] [_log()] server lang: <none>
2026-04-15T18:54:10.274 [DEBUG] [Thread-24020] [transport.py] [_log()] kex follows: False
2026-04-15T18:54:10.274 [DEBUG] [Thread-24020] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:54:10.274 [DEBUG] [Thread-24020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:54:10.274 [DEBUG] [Thread-24020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:54:10.274 [DEBUG] [Thread-24020] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:54:10.274 [DEBUG] [Thread-24020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:54:10.274 [DEBUG] [Thread-24020] [transport.py] [_log()] Compression: none
2026-04-15T18:54:10.274 [DEBUG] [Thread-24020] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:54:10.331 [DEBUG] [Thread-24020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:54:10.331 [DEBUG] [Thread-24020] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:54:10.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:54:10.332 [DEBUG] [Thread-24020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:54:10.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:54:10.386 [DEBUG] [Thread-24020] [transport.py] [_log()] userauth is OK
2026-04-15T18:54:10.387 [DEBUG] [Thread-24020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:54:10.387 [DEBUG] [Thread-24020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:54:10.387 [DEBUG] [Thread-24020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:54:10.387 [DEBUG] [Thread-24020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:54:10.411 [INFO] [Thread-24020] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:54:10.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:54:10.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:54:11.222 [DEBUG] [Thread-24020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:54:11.223 [DEBUG] [Thread-24020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:54:11.270 [DEBUG] [Thread-24020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:54:11.271 [DEBUG] [Thread-24020] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:54:11.282 [DEBUG] [Thread-24020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:54:11.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:54:11.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')
2026-04-15T18:54:11.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
2026-04-15T18:54:11.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:54:11.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:54:11.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:54:11.329 [DEBUG] [Thread-24020] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:54:18.886 [DEBUG] [Thread-24022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:54:33.929 [DEBUG] [Thread-24023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:54:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:54:41.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:54:41.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
2026-04-15T18:54:42.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 54, 24), 4.81515, 72.0236, 0.0, 15.1574, 10.62, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:54:42.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:54:24
2026-04-15T18:54:43.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:54:43.449 [DEBUG] [Thread-24024] [transport.py] [_log()] starting thread (client mode): 0xee9af7c0
2026-04-15T18:54:43.449 [DEBUG] [Thread-24024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:54:43.470 [DEBUG] [Thread-24024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:54:43.470 [INFO] [Thread-24024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:54:43.474 [DEBUG] [Thread-24024] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:54:43.474 [DEBUG] [Thread-24024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:54:43.474 [DEBUG] [Thread-24024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:54:43.474 [DEBUG] [Thread-24024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:54:43.474 [DEBUG] [Thread-24024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:54:43.474 [DEBUG] [Thread-24024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:54:43.474 [DEBUG] [Thread-24024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:54:43.474 [DEBUG] [Thread-24024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:54:43.474 [DEBUG] [Thread-24024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:54:43.474 [DEBUG] [Thread-24024] [transport.py] [_log()] client lang: <none>
2026-04-15T18:54:43.474 [DEBUG] [Thread-24024] [transport.py] [_log()] server lang: <none>
2026-04-15T18:54:43.475 [DEBUG] [Thread-24024] [transport.py] [_log()] kex follows: False
2026-04-15T18:54:43.475 [DEBUG] [Thread-24024] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:54:43.475 [DEBUG] [Thread-24024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:54:43.475 [DEBUG] [Thread-24024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:54:43.475 [DEBUG] [Thread-24024] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:54:43.475 [DEBUG] [Thread-24024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:54:43.475 [DEBUG] [Thread-24024] [transport.py] [_log()] Compression: none
2026-04-15T18:54:43.475 [DEBUG] [Thread-24024] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:54:43.491 [DEBUG] [Thread-24024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:54:43.492 [DEBUG] [Thread-24024] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:54:43.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:54:43.492 [DEBUG] [Thread-24024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:54:43.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:54:43.493 [DEBUG] [Thread-24024] [transport.py] [_log()] userauth is OK
2026-04-15T18:54:43.494 [DEBUG] [Thread-24024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:54:43.494 [DEBUG] [Thread-24024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:54:43.494 [DEBUG] [Thread-24024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:54:43.494 [DEBUG] [Thread-24024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:54:43.518 [INFO] [Thread-24024] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:54:43.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:54:44.320 [DEBUG] [Thread-24024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:54:44.320 [DEBUG] [Thread-24024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:54:44.321 [DEBUG] [Thread-24024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:54:44.361 [DEBUG] [Thread-24024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:54:44.361 [DEBUG] [Thread-24024] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:54:44.364 [DEBUG] [Thread-24024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:54:44.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:54:44.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:54:44.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:54:44.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:54:44.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:54:44.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:54:44.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:54:44.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:54:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:54:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.704300 -999.00  +10.60  14.54     77   +6.70 1 2 1 1 1    16    0 3.48 -15.50 ----- 15.7 14.5 299.0 19.3 11.5 -24.8 11.3 -23.6 11.0 -21.8 11.3 -23.7
2026-04-15T18:54:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:54:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:54:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.704300
2026-04-15T18:54:44.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:54:44.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:54:44.390 [DEBUG] [Thread-24024] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:54:44.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:54:44.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:54:44.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:54:44.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:54:24', tmtdew=4.81515, humidity=72.0236, cloud=0.0, wind=15.1574, temperature=10.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:54:11.520', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:54:44.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:54:44.647 [DEBUG] [Thread-24027] [transport.py] [_log()] starting thread (client mode): 0xee9af100
2026-04-15T18:54:44.647 [DEBUG] [Thread-24027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:54:44.661 [DEBUG] [Thread-24027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:54:44.661 [INFO] [Thread-24027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:54:44.668 [DEBUG] [Thread-24027] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:54:44.668 [DEBUG] [Thread-24027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:54:44.668 [DEBUG] [Thread-24027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:54:44.669 [DEBUG] [Thread-24027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:54:44.669 [DEBUG] [Thread-24027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:54:44.669 [DEBUG] [Thread-24027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:54:44.669 [DEBUG] [Thread-24027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:54:44.669 [DEBUG] [Thread-24027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:54:44.669 [DEBUG] [Thread-24027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:54:44.669 [DEBUG] [Thread-24027] [transport.py] [_log()] client lang: <none>
2026-04-15T18:54:44.669 [DEBUG] [Thread-24027] [transport.py] [_log()] server lang: <none>
2026-04-15T18:54:44.669 [DEBUG] [Thread-24027] [transport.py] [_log()] kex follows: False
2026-04-15T18:54:44.669 [DEBUG] [Thread-24027] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:54:44.669 [DEBUG] [Thread-24027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:54:44.669 [DEBUG] [Thread-24027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:54:44.669 [DEBUG] [Thread-24027] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:54:44.670 [DEBUG] [Thread-24027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:54:44.670 [DEBUG] [Thread-24027] [transport.py] [_log()] Compression: none
2026-04-15T18:54:44.670 [DEBUG] [Thread-24027] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:54:44.726 [DEBUG] [Thread-24027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:54:44.726 [DEBUG] [Thread-24027] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:54:44.726 [DEBUG] [Thread-24027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:54:44.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:54:44.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:54:44.782 [DEBUG] [Thread-24027] [transport.py] [_log()] userauth is OK
2026-04-15T18:54:44.783 [DEBUG] [Thread-24027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:54:44.783 [DEBUG] [Thread-24027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:54:44.783 [DEBUG] [Thread-24027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:54:44.783 [DEBUG] [Thread-24027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:54:44.808 [INFO] [Thread-24027] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:54:44.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:54:44.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:54:45.633 [DEBUG] [Thread-24027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:54:45.633 [DEBUG] [Thread-24027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:54:45.681 [DEBUG] [Thread-24027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:54:45.681 [DEBUG] [Thread-24027] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:54:45.691 [DEBUG] [Thread-24027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:54:45.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:54:45.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')
2026-04-15T18:54:45.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') -> 00000000
2026-04-15T18:54:45.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:54:45.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:54:45.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:54:45.729 [DEBUG] [Thread-24027] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:54:46.291 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:54:46.292 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:54:48.961 [DEBUG] [Thread-24029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:54:53.707 [DEBUG] [Thread-24030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:55:04.005 [DEBUG] [Thread-24031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:55:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:55:15.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:55:15.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
2026-04-15T18:55:17.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 55), 4.75119, 72.0901, 0.0, 17.4337, 10.6036, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:55:17.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:55:00
2026-04-15T18:55:17.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:55:17.935 [DEBUG] [Thread-24032] [transport.py] [_log()] starting thread (client mode): 0xf1337790
2026-04-15T18:55:17.935 [DEBUG] [Thread-24032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:55:17.951 [DEBUG] [Thread-24032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:55:17.951 [INFO] [Thread-24032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:55:17.952 [DEBUG] [Thread-24032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:55:17.953 [DEBUG] [Thread-24032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:55:17.953 [DEBUG] [Thread-24032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:55:17.953 [DEBUG] [Thread-24032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:55:17.953 [DEBUG] [Thread-24032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:55:17.953 [DEBUG] [Thread-24032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:55:17.953 [DEBUG] [Thread-24032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:55:17.953 [DEBUG] [Thread-24032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:55:17.953 [DEBUG] [Thread-24032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:55:17.953 [DEBUG] [Thread-24032] [transport.py] [_log()] client lang: <none>
2026-04-15T18:55:17.953 [DEBUG] [Thread-24032] [transport.py] [_log()] server lang: <none>
2026-04-15T18:55:17.953 [DEBUG] [Thread-24032] [transport.py] [_log()] kex follows: False
2026-04-15T18:55:17.953 [DEBUG] [Thread-24032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:55:17.954 [DEBUG] [Thread-24032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:55:17.954 [DEBUG] [Thread-24032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:55:17.954 [DEBUG] [Thread-24032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:55:17.954 [DEBUG] [Thread-24032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:55:17.954 [DEBUG] [Thread-24032] [transport.py] [_log()] Compression: none
2026-04-15T18:55:17.954 [DEBUG] [Thread-24032] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:55:17.967 [DEBUG] [Thread-24032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:55:17.967 [DEBUG] [Thread-24032] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:55:17.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:55:17.968 [DEBUG] [Thread-24032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:55:17.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:55:17.969 [DEBUG] [Thread-24032] [transport.py] [_log()] userauth is OK
2026-04-15T18:55:17.969 [DEBUG] [Thread-24032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:55:17.969 [DEBUG] [Thread-24032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:55:17.969 [DEBUG] [Thread-24032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:55:17.969 [DEBUG] [Thread-24032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:55:17.985 [INFO] [Thread-24032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:55:17.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:55:19.034 [DEBUG] [Thread-24034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:55:21.935 [DEBUG] [Thread-24032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:55:21.936 [DEBUG] [Thread-24032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:55:21.936 [DEBUG] [Thread-24032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:55:21.977 [DEBUG] [Thread-24032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:55:21.977 [DEBUG] [Thread-24032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:55:21.979 [DEBUG] [Thread-24032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:55:21.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:55:21.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:55:21.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:55:21.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:55:22.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:55:22.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:55:22.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:55:22.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:55:22.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:55:22.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.704647 -999.00  +10.60  16.13     76   +6.70 1 2 1 1 1    15    0 3.49 -13.46 ----- 17.5 16.1 296.0 20.0 11.4 -24.9 11.3 -23.7 11.0 -21.5 11.3 -23.6
2026-04-15T18:55:22.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:55:22.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:55:22.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.704647
2026-04-15T18:55:22.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:55:22.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:55:22.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:55:22.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:55:22.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:55:22.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:55:00', tmtdew=4.75119, humidity=72.0901, cloud=0.0, wind=17.4337, temperature=10.6036, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:54:41.501', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:55:22.008 [DEBUG] [Thread-24032] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:55:22.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:55:22.220 [DEBUG] [Thread-24036] [transport.py] [_log()] starting thread (client mode): 0xf1367730
2026-04-15T18:55:22.220 [DEBUG] [Thread-24036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:55:22.234 [DEBUG] [Thread-24036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:55:22.234 [INFO] [Thread-24036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:55:22.241 [DEBUG] [Thread-24036] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:55:22.241 [DEBUG] [Thread-24036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:55:22.241 [DEBUG] [Thread-24036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:55:22.241 [DEBUG] [Thread-24036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:55:22.241 [DEBUG] [Thread-24036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:55:22.241 [DEBUG] [Thread-24036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:55:22.242 [DEBUG] [Thread-24036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:55:22.242 [DEBUG] [Thread-24036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:55:22.242 [DEBUG] [Thread-24036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:55:22.242 [DEBUG] [Thread-24036] [transport.py] [_log()] client lang: <none>
2026-04-15T18:55:22.242 [DEBUG] [Thread-24036] [transport.py] [_log()] server lang: <none>
2026-04-15T18:55:22.242 [DEBUG] [Thread-24036] [transport.py] [_log()] kex follows: False
2026-04-15T18:55:22.242 [DEBUG] [Thread-24036] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:55:22.242 [DEBUG] [Thread-24036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:55:22.242 [DEBUG] [Thread-24036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:55:22.242 [DEBUG] [Thread-24036] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:55:22.242 [DEBUG] [Thread-24036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:55:22.242 [DEBUG] [Thread-24036] [transport.py] [_log()] Compression: none
2026-04-15T18:55:22.242 [DEBUG] [Thread-24036] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:55:22.297 [DEBUG] [Thread-24036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:55:22.297 [DEBUG] [Thread-24036] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:55:22.297 [DEBUG] [Thread-24036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:55:22.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:55:22.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:55:22.353 [DEBUG] [Thread-24036] [transport.py] [_log()] userauth is OK
2026-04-15T18:55:22.354 [DEBUG] [Thread-24036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:55:22.354 [DEBUG] [Thread-24036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:55:22.354 [DEBUG] [Thread-24036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:55:22.354 [DEBUG] [Thread-24036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:55:22.372 [INFO] [Thread-24036] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:55:22.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:55:22.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:55:23.208 [DEBUG] [Thread-24036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:55:23.208 [DEBUG] [Thread-24036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:55:23.256 [DEBUG] [Thread-24036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:55:23.256 [DEBUG] [Thread-24036] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:55:23.265 [DEBUG] [Thread-24036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:55:23.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:55:23.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')
2026-04-15T18:55:23.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
2026-04-15T18:55:23.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:55:23.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:55:23.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:55:23.299 [DEBUG] [Thread-24036] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:55:34.066 [DEBUG] [Thread-24038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:55:49.111 [DEBUG] [Thread-24039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:55:50.272 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:55:50.273 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:55:53.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:55:53.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:55:53.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
2026-04-15T18:55:53.852 [DEBUG] [Thread-24040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:55:54.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 55, 36), 4.77459, 72.3128, 0.0, 17.3966, 10.874, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:55:54.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:55:36
2026-04-15T18:55:55.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:55:55.460 [DEBUG] [Thread-24041] [transport.py] [_log()] starting thread (client mode): 0xf13cab60
2026-04-15T18:55:55.460 [DEBUG] [Thread-24041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:55:55.480 [DEBUG] [Thread-24041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:55:55.480 [INFO] [Thread-24041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:55:55.483 [DEBUG] [Thread-24041] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:55:55.483 [DEBUG] [Thread-24041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:55:55.483 [DEBUG] [Thread-24041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:55:55.483 [DEBUG] [Thread-24041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:55:55.484 [DEBUG] [Thread-24041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:55:55.484 [DEBUG] [Thread-24041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:55:55.484 [DEBUG] [Thread-24041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:55:55.484 [DEBUG] [Thread-24041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:55:55.484 [DEBUG] [Thread-24041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:55:55.484 [DEBUG] [Thread-24041] [transport.py] [_log()] client lang: <none>
2026-04-15T18:55:55.484 [DEBUG] [Thread-24041] [transport.py] [_log()] server lang: <none>
2026-04-15T18:55:55.484 [DEBUG] [Thread-24041] [transport.py] [_log()] kex follows: False
2026-04-15T18:55:55.484 [DEBUG] [Thread-24041] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:55:55.484 [DEBUG] [Thread-24041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:55:55.484 [DEBUG] [Thread-24041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:55:55.484 [DEBUG] [Thread-24041] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:55:55.485 [DEBUG] [Thread-24041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:55:55.485 [DEBUG] [Thread-24041] [transport.py] [_log()] Compression: none
2026-04-15T18:55:55.485 [DEBUG] [Thread-24041] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:55:55.501 [DEBUG] [Thread-24041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:55:55.501 [DEBUG] [Thread-24041] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:55:55.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:55:55.502 [DEBUG] [Thread-24041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:55:55.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:55:55.545 [DEBUG] [Thread-24041] [transport.py] [_log()] userauth is OK
2026-04-15T18:55:55.545 [DEBUG] [Thread-24041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:55:55.545 [DEBUG] [Thread-24041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:55:55.545 [DEBUG] [Thread-24041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:55:55.545 [DEBUG] [Thread-24041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:55:55.569 [INFO] [Thread-24041] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:55:55.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:55:56.337 [DEBUG] [Thread-24041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:55:56.338 [DEBUG] [Thread-24041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:55:56.338 [DEBUG] [Thread-24041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:55:56.379 [DEBUG] [Thread-24041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:55:56.379 [DEBUG] [Thread-24041] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:55:56.381 [DEBUG] [Thread-24041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:55:56.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:55:56.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:55:56.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:55:56.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:55:56.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:55:56.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:55:56.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:55:56.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:55:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:55:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.704995 -999.00  +10.50  13.90     76   +6.70 1 2 1 1 1    13    0 3.56 -11.95 ----- 12.5 13.9 302.4 18.5 11.4 -24.8 11.3 -23.6 10.9 -21.6 11.3 -23.8
2026-04-15T18:55:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:55:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:55:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.704995
2026-04-15T18:55:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:55:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:55:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:55:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:55:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:55:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:55:36', tmtdew=4.77459, humidity=72.3128, cloud=0.0, wind=17.3966, temperature=10.874, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:55:11.568', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:55:56.401 [DEBUG] [Thread-24041] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:55:56.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:55:56.617 [DEBUG] [Thread-24044] [transport.py] [_log()] starting thread (client mode): 0xf1367f70
2026-04-15T18:55:56.617 [DEBUG] [Thread-24044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:55:56.631 [DEBUG] [Thread-24044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:55:56.632 [INFO] [Thread-24044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:55:56.639 [DEBUG] [Thread-24044] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:55:56.639 [DEBUG] [Thread-24044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:55:56.639 [DEBUG] [Thread-24044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:55:56.639 [DEBUG] [Thread-24044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:55:56.639 [DEBUG] [Thread-24044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:55:56.639 [DEBUG] [Thread-24044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:55:56.640 [DEBUG] [Thread-24044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:55:56.640 [DEBUG] [Thread-24044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:55:56.640 [DEBUG] [Thread-24044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:55:56.640 [DEBUG] [Thread-24044] [transport.py] [_log()] client lang: <none>
2026-04-15T18:55:56.640 [DEBUG] [Thread-24044] [transport.py] [_log()] server lang: <none>
2026-04-15T18:55:56.640 [DEBUG] [Thread-24044] [transport.py] [_log()] kex follows: False
2026-04-15T18:55:56.640 [DEBUG] [Thread-24044] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:55:56.640 [DEBUG] [Thread-24044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:55:56.640 [DEBUG] [Thread-24044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:55:56.640 [DEBUG] [Thread-24044] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:55:56.640 [DEBUG] [Thread-24044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:55:56.641 [DEBUG] [Thread-24044] [transport.py] [_log()] Compression: none
2026-04-15T18:55:56.641 [DEBUG] [Thread-24044] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:55:56.696 [DEBUG] [Thread-24044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:55:56.697 [DEBUG] [Thread-24044] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:55:56.697 [DEBUG] [Thread-24044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:55:56.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:55:56.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:55:56.753 [DEBUG] [Thread-24044] [transport.py] [_log()] userauth is OK
2026-04-15T18:55:56.754 [DEBUG] [Thread-24044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:55:56.754 [DEBUG] [Thread-24044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:55:56.754 [DEBUG] [Thread-24044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:55:56.754 [DEBUG] [Thread-24044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:55:56.779 [INFO] [Thread-24044] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:55:56.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:55:56.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:55:57.586 [DEBUG] [Thread-24044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:55:57.587 [DEBUG] [Thread-24044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:55:57.634 [DEBUG] [Thread-24044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:55:57.634 [DEBUG] [Thread-24044] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:55:57.643 [DEBUG] [Thread-24044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:55:57.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:55:57.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')
2026-04-15T18:55:57.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') -> 00000000
2026-04-15T18:55:57.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:55:57.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:55:57.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:55:57.678 [DEBUG] [Thread-24044] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:56:04.143 [DEBUG] [Thread-24046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:56:19.188 [DEBUG] [Thread-24047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:56:27.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:56:27.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:56:27.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
2026-04-15T18:56:28.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 56, 11), 4.79059, 72.14, 0.0, 15.2633, 10.5871, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:56:28.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:56:11
2026-04-15T18:56:29.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:56:29.842 [DEBUG] [Thread-24048] [transport.py] [_log()] starting thread (client mode): 0xee9adfc0
2026-04-15T18:56:29.842 [DEBUG] [Thread-24048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:56:29.862 [DEBUG] [Thread-24048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:56:29.862 [INFO] [Thread-24048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:56:29.863 [DEBUG] [Thread-24048] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:56:29.863 [DEBUG] [Thread-24048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:56:29.863 [DEBUG] [Thread-24048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:56:29.863 [DEBUG] [Thread-24048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:56:29.863 [DEBUG] [Thread-24048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:56:29.863 [DEBUG] [Thread-24048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:56:29.863 [DEBUG] [Thread-24048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:56:29.863 [DEBUG] [Thread-24048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:56:29.864 [DEBUG] [Thread-24048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:56:29.864 [DEBUG] [Thread-24048] [transport.py] [_log()] client lang: <none>
2026-04-15T18:56:29.864 [DEBUG] [Thread-24048] [transport.py] [_log()] server lang: <none>
2026-04-15T18:56:29.864 [DEBUG] [Thread-24048] [transport.py] [_log()] kex follows: False
2026-04-15T18:56:29.864 [DEBUG] [Thread-24048] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:56:29.864 [DEBUG] [Thread-24048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:56:29.864 [DEBUG] [Thread-24048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:56:29.864 [DEBUG] [Thread-24048] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:56:29.864 [DEBUG] [Thread-24048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:56:29.864 [DEBUG] [Thread-24048] [transport.py] [_log()] Compression: none
2026-04-15T18:56:29.864 [DEBUG] [Thread-24048] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:56:29.882 [DEBUG] [Thread-24048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:56:29.883 [DEBUG] [Thread-24048] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:56:29.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:56:29.883 [DEBUG] [Thread-24048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:56:29.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:56:29.884 [DEBUG] [Thread-24048] [transport.py] [_log()] userauth is OK
2026-04-15T18:56:29.884 [DEBUG] [Thread-24048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:56:29.884 [DEBUG] [Thread-24048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:56:29.885 [DEBUG] [Thread-24048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:56:29.885 [DEBUG] [Thread-24048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:56:29.903 [INFO] [Thread-24048] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:56:29.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:56:30.705 [DEBUG] [Thread-24048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:56:30.705 [DEBUG] [Thread-24048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:56:30.706 [DEBUG] [Thread-24048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:56:30.746 [DEBUG] [Thread-24048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:56:30.746 [DEBUG] [Thread-24048] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:56:30.749 [DEBUG] [Thread-24048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:56:30.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:56:30.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:56:30.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:56:30.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:56:30.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:56:30.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:56:30.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:56:30.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:56:30.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:56:30.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.705342 -999.00  +10.50  13.02     77   +6.70 1 2 1 1 1    12    0 3.64 -11.61 ----- 17.2 13.0 296.8 15.7 11.4 -24.8 11.3 -23.6 11.0 -21.6 11.3 -23.7
2026-04-15T18:56:30.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:56:30.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:56:30.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.705342
2026-04-15T18:56:30.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:56:30.774 [DEBUG] [Thread-24048] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:56:30.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:56:30.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:56:30.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:56:30.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:56:30.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:56:11', tmtdew=4.79059, humidity=72.14, cloud=0.0, wind=15.2633, temperature=10.5871, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:55:41.549', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:56:31.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:56:31.033 [DEBUG] [Thread-24051] [transport.py] [_log()] starting thread (client mode): 0xee91d2d0
2026-04-15T18:56:31.033 [DEBUG] [Thread-24051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:56:31.047 [DEBUG] [Thread-24051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:56:31.048 [INFO] [Thread-24051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:56:31.055 [DEBUG] [Thread-24051] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:56:31.055 [DEBUG] [Thread-24051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:56:31.055 [DEBUG] [Thread-24051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:56:31.055 [DEBUG] [Thread-24051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:56:31.055 [DEBUG] [Thread-24051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:56:31.056 [DEBUG] [Thread-24051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:56:31.056 [DEBUG] [Thread-24051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:56:31.056 [DEBUG] [Thread-24051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:56:31.056 [DEBUG] [Thread-24051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:56:31.056 [DEBUG] [Thread-24051] [transport.py] [_log()] client lang: <none>
2026-04-15T18:56:31.056 [DEBUG] [Thread-24051] [transport.py] [_log()] server lang: <none>
2026-04-15T18:56:31.056 [DEBUG] [Thread-24051] [transport.py] [_log()] kex follows: False
2026-04-15T18:56:31.056 [DEBUG] [Thread-24051] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:56:31.056 [DEBUG] [Thread-24051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:56:31.056 [DEBUG] [Thread-24051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:56:31.056 [DEBUG] [Thread-24051] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:56:31.057 [DEBUG] [Thread-24051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:56:31.057 [DEBUG] [Thread-24051] [transport.py] [_log()] Compression: none
2026-04-15T18:56:31.057 [DEBUG] [Thread-24051] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:56:31.112 [DEBUG] [Thread-24051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:56:31.112 [DEBUG] [Thread-24051] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:56:31.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:56:31.112 [DEBUG] [Thread-24051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:56:31.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:56:31.169 [DEBUG] [Thread-24051] [transport.py] [_log()] userauth is OK
2026-04-15T18:56:31.169 [DEBUG] [Thread-24051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:56:31.169 [DEBUG] [Thread-24051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:56:31.170 [DEBUG] [Thread-24051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:56:31.170 [DEBUG] [Thread-24051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:56:31.187 [INFO] [Thread-24051] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:56:31.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:56:31.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:56:32.048 [DEBUG] [Thread-24051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:56:32.048 [DEBUG] [Thread-24051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:56:32.096 [DEBUG] [Thread-24051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:56:32.096 [DEBUG] [Thread-24051] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:56:32.105 [DEBUG] [Thread-24051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:56:32.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:56:32.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')
2026-04-15T18:56:32.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
2026-04-15T18:56:32.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:56:32.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:56:32.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:56:32.140 [DEBUG] [Thread-24051] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:56:34.216 [DEBUG] [Thread-24053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:56:49.254 [DEBUG] [Thread-24054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:56:54.034 [DEBUG] [Thread-24055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:56:54.842 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:56:54.844 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:57:02.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:57:02.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:57:02.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
2026-04-15T18:57:03.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 56, 47), 4.75328, 72.4134, 0.0, 16.2324, 10.8419, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:57:03.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:56:47
2026-04-15T18:57:03.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:57:04.284 [DEBUG] [Thread-24056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:57:04.288 [DEBUG] [Thread-24057] [transport.py] [_log()] starting thread (client mode): 0xee90d240
2026-04-15T18:57:04.288 [DEBUG] [Thread-24057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:57:04.300 [DEBUG] [Thread-24057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:57:04.300 [INFO] [Thread-24057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:57:04.304 [DEBUG] [Thread-24057] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:57:04.304 [DEBUG] [Thread-24057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:57:04.304 [DEBUG] [Thread-24057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:57:04.304 [DEBUG] [Thread-24057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:57:04.304 [DEBUG] [Thread-24057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:57:04.304 [DEBUG] [Thread-24057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:57:04.304 [DEBUG] [Thread-24057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:57:04.304 [DEBUG] [Thread-24057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:57:04.305 [DEBUG] [Thread-24057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:57:04.305 [DEBUG] [Thread-24057] [transport.py] [_log()] client lang: <none>
2026-04-15T18:57:04.305 [DEBUG] [Thread-24057] [transport.py] [_log()] server lang: <none>
2026-04-15T18:57:04.305 [DEBUG] [Thread-24057] [transport.py] [_log()] kex follows: False
2026-04-15T18:57:04.305 [DEBUG] [Thread-24057] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:57:04.305 [DEBUG] [Thread-24057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:57:04.305 [DEBUG] [Thread-24057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:57:04.305 [DEBUG] [Thread-24057] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:57:04.305 [DEBUG] [Thread-24057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:57:04.305 [DEBUG] [Thread-24057] [transport.py] [_log()] Compression: none
2026-04-15T18:57:04.305 [DEBUG] [Thread-24057] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:57:04.324 [DEBUG] [Thread-24057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:57:04.325 [DEBUG] [Thread-24057] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:57:04.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:57:04.325 [DEBUG] [Thread-24057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:57:04.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:57:04.326 [DEBUG] [Thread-24057] [transport.py] [_log()] userauth is OK
2026-04-15T18:57:04.326 [DEBUG] [Thread-24057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:57:04.326 [DEBUG] [Thread-24057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:57:04.327 [DEBUG] [Thread-24057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:57:04.327 [DEBUG] [Thread-24057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:57:04.350 [INFO] [Thread-24057] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:57:04.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:57:05.097 [DEBUG] [Thread-24057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:57:05.097 [DEBUG] [Thread-24057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:57:05.098 [DEBUG] [Thread-24057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:57:05.138 [DEBUG] [Thread-24057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:57:05.138 [DEBUG] [Thread-24057] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:57:05.141 [DEBUG] [Thread-24057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:57:05.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:57:05.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:57:05.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:57:05.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:57:05.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:57:05.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:57:05.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:57:05.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:57:05.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:57:05.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.705689 -999.00  +10.50  15.46     76   +6.60 1 2 1 1 1    11    0 3.54 -11.16 ----- 15.0 15.5 296.8 19.8 11.4 -24.8 11.2 -23.7 10.9 -21.6 11.2 -23.7
2026-04-15T18:57:05.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:57:05.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:57:05.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.705689
2026-04-15T18:57:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:57:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:57:05.166 [DEBUG] [Thread-24057] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:57:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:57:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:57:05.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:57:05.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:56:47', tmtdew=4.75328, humidity=72.4134, cloud=0.0, wind=16.2324, temperature=10.8419, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:56:11.530', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:57:05.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:57:05.420 [DEBUG] [Thread-24060] [transport.py] [_log()] starting thread (client mode): 0xf13cb850
2026-04-15T18:57:05.421 [DEBUG] [Thread-24060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:57:05.435 [DEBUG] [Thread-24060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:57:05.435 [INFO] [Thread-24060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:57:05.442 [DEBUG] [Thread-24060] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:57:05.442 [DEBUG] [Thread-24060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:57:05.442 [DEBUG] [Thread-24060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:57:05.443 [DEBUG] [Thread-24060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:57:05.443 [DEBUG] [Thread-24060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:57:05.443 [DEBUG] [Thread-24060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:57:05.443 [DEBUG] [Thread-24060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:57:05.443 [DEBUG] [Thread-24060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:57:05.443 [DEBUG] [Thread-24060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:57:05.443 [DEBUG] [Thread-24060] [transport.py] [_log()] client lang: <none>
2026-04-15T18:57:05.443 [DEBUG] [Thread-24060] [transport.py] [_log()] server lang: <none>
2026-04-15T18:57:05.443 [DEBUG] [Thread-24060] [transport.py] [_log()] kex follows: False
2026-04-15T18:57:05.443 [DEBUG] [Thread-24060] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:57:05.443 [DEBUG] [Thread-24060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:57:05.443 [DEBUG] [Thread-24060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:57:05.444 [DEBUG] [Thread-24060] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:57:05.444 [DEBUG] [Thread-24060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:57:05.444 [DEBUG] [Thread-24060] [transport.py] [_log()] Compression: none
2026-04-15T18:57:05.444 [DEBUG] [Thread-24060] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:57:05.507 [DEBUG] [Thread-24060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:57:05.507 [DEBUG] [Thread-24060] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:57:05.508 [DEBUG] [Thread-24060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:57:05.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:57:05.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:57:05.572 [DEBUG] [Thread-24060] [transport.py] [_log()] userauth is OK
2026-04-15T18:57:05.572 [DEBUG] [Thread-24060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:57:05.573 [DEBUG] [Thread-24060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:57:05.573 [DEBUG] [Thread-24060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:57:05.573 [DEBUG] [Thread-24060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:57:05.598 [INFO] [Thread-24060] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:57:05.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:57:05.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:57:06.459 [DEBUG] [Thread-24060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:57:06.459 [DEBUG] [Thread-24060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:57:06.507 [DEBUG] [Thread-24060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:57:06.507 [DEBUG] [Thread-24060] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:57:06.516 [DEBUG] [Thread-24060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:57:06.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:57:06.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')
2026-04-15T18:57:06.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
2026-04-15T18:57:06.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:57:06.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:57:06.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:57:06.551 [DEBUG] [Thread-24060] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:57:19.313 [DEBUG] [Thread-24062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:57:34.358 [DEBUG] [Thread-24063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:57:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:57:36.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:57:36.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
2026-04-15T18:57:37.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 57, 22), 4.72664, 72.7067, 0.0, 12.9517, 10.5209, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:57:37.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:57:22
2026-04-15T18:57:38.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:57:38.789 [DEBUG] [Thread-24064] [transport.py] [_log()] starting thread (client mode): 0xee905ed0
2026-04-15T18:57:38.790 [DEBUG] [Thread-24064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:57:38.809 [DEBUG] [Thread-24064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:57:38.809 [INFO] [Thread-24064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:57:38.813 [DEBUG] [Thread-24064] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:57:38.813 [DEBUG] [Thread-24064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:57:38.813 [DEBUG] [Thread-24064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:57:38.813 [DEBUG] [Thread-24064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:57:38.813 [DEBUG] [Thread-24064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:57:38.813 [DEBUG] [Thread-24064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:57:38.813 [DEBUG] [Thread-24064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:57:38.813 [DEBUG] [Thread-24064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:57:38.813 [DEBUG] [Thread-24064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:57:38.814 [DEBUG] [Thread-24064] [transport.py] [_log()] client lang: <none>
2026-04-15T18:57:38.814 [DEBUG] [Thread-24064] [transport.py] [_log()] server lang: <none>
2026-04-15T18:57:38.814 [DEBUG] [Thread-24064] [transport.py] [_log()] kex follows: False
2026-04-15T18:57:38.814 [DEBUG] [Thread-24064] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:57:38.814 [DEBUG] [Thread-24064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:57:38.814 [DEBUG] [Thread-24064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:57:38.814 [DEBUG] [Thread-24064] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:57:38.814 [DEBUG] [Thread-24064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:57:38.814 [DEBUG] [Thread-24064] [transport.py] [_log()] Compression: none
2026-04-15T18:57:38.814 [DEBUG] [Thread-24064] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:57:38.831 [DEBUG] [Thread-24064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:57:38.831 [DEBUG] [Thread-24064] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:57:38.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:57:38.832 [DEBUG] [Thread-24064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:57:38.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:57:38.833 [DEBUG] [Thread-24064] [transport.py] [_log()] userauth is OK
2026-04-15T18:57:38.833 [DEBUG] [Thread-24064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:57:38.833 [DEBUG] [Thread-24064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:57:38.833 [DEBUG] [Thread-24064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:57:38.833 [DEBUG] [Thread-24064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:57:38.857 [INFO] [Thread-24064] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:57:38.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:57:39.646 [DEBUG] [Thread-24064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:57:39.646 [DEBUG] [Thread-24064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:57:39.647 [DEBUG] [Thread-24064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:57:39.687 [DEBUG] [Thread-24064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:57:39.687 [DEBUG] [Thread-24064] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:57:39.690 [DEBUG] [Thread-24064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:57:39.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:57:39.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:57:39.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:57:39.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:57:39.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:57:39.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:57:39.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:57:39.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:57:39.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:57:39.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.706036 -999.00  +10.50  13.72     77   +6.70 1 2 1 1 1     9    0 3.67 -8.74 ----- 12.5 13.7 299.2 17.2 11.4 -24.7 11.2 -23.7 10.9 -21.5 11.2 -23.7
2026-04-15T18:57:39.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:57:39.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:57:39.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.706036
2026-04-15T18:57:39.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:57:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:57:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:57:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:57:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:57:39.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:57:22', tmtdew=4.72664, humidity=72.7067, cloud=0.0, wind=12.9517, temperature=10.5209, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:56:41.510', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:57:39.715 [DEBUG] [Thread-24064] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:57:39.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:57:39.970 [DEBUG] [Thread-24067] [transport.py] [_log()] starting thread (client mode): 0xee9ae530
2026-04-15T18:57:39.971 [DEBUG] [Thread-24067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:57:39.984 [DEBUG] [Thread-24067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:57:39.985 [INFO] [Thread-24067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:57:39.992 [DEBUG] [Thread-24067] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:57:39.992 [DEBUG] [Thread-24067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:57:39.992 [DEBUG] [Thread-24067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:57:39.992 [DEBUG] [Thread-24067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:57:39.992 [DEBUG] [Thread-24067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:57:39.992 [DEBUG] [Thread-24067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:57:39.992 [DEBUG] [Thread-24067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:57:39.993 [DEBUG] [Thread-24067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:57:39.993 [DEBUG] [Thread-24067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:57:39.993 [DEBUG] [Thread-24067] [transport.py] [_log()] client lang: <none>
2026-04-15T18:57:39.993 [DEBUG] [Thread-24067] [transport.py] [_log()] server lang: <none>
2026-04-15T18:57:39.993 [DEBUG] [Thread-24067] [transport.py] [_log()] kex follows: False
2026-04-15T18:57:39.993 [DEBUG] [Thread-24067] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:57:39.993 [DEBUG] [Thread-24067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:57:39.993 [DEBUG] [Thread-24067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:57:39.993 [DEBUG] [Thread-24067] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:57:39.993 [DEBUG] [Thread-24067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:57:39.993 [DEBUG] [Thread-24067] [transport.py] [_log()] Compression: none
2026-04-15T18:57:39.993 [DEBUG] [Thread-24067] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:57:40.051 [DEBUG] [Thread-24067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:57:40.051 [DEBUG] [Thread-24067] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:57:40.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:57:40.052 [DEBUG] [Thread-24067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:57:40.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:57:40.108 [DEBUG] [Thread-24067] [transport.py] [_log()] userauth is OK
2026-04-15T18:57:40.109 [DEBUG] [Thread-24067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:57:40.109 [DEBUG] [Thread-24067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:57:40.109 [DEBUG] [Thread-24067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:57:40.109 [DEBUG] [Thread-24067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:57:40.136 [INFO] [Thread-24067] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:57:40.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:57:40.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:57:40.932 [DEBUG] [Thread-24067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:57:40.932 [DEBUG] [Thread-24067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:57:40.980 [DEBUG] [Thread-24067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:57:40.980 [DEBUG] [Thread-24067] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:57:40.989 [DEBUG] [Thread-24067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:57:40.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:57:40.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')
2026-04-15T18:57:41.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') -> 00000000
2026-04-15T18:57:41.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:57:41.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:57:41.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:57:41.030 [DEBUG] [Thread-24067] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:57:49.390 [DEBUG] [Thread-24069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:57:54.178 [DEBUG] [Thread-24070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:57:58.927 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:57:58.929 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:58:04.434 [DEBUG] [Thread-24071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:58:11.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:58:11.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:58:11.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
2026-04-15T18:58:12.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 57, 58), 4.70558, 72.8062, 0.0, 15.0163, 10.4878, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:58:12.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:57:58
2026-04-15T18:58:12.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:58:13.179 [DEBUG] [Thread-24072] [transport.py] [_log()] starting thread (client mode): 0xee904e20
2026-04-15T18:58:13.179 [DEBUG] [Thread-24072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:58:13.191 [DEBUG] [Thread-24072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:58:13.191 [INFO] [Thread-24072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:58:13.194 [DEBUG] [Thread-24072] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:58:13.194 [DEBUG] [Thread-24072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:58:13.194 [DEBUG] [Thread-24072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:58:13.194 [DEBUG] [Thread-24072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:58:13.195 [DEBUG] [Thread-24072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:58:13.195 [DEBUG] [Thread-24072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:58:13.195 [DEBUG] [Thread-24072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:58:13.195 [DEBUG] [Thread-24072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:58:13.195 [DEBUG] [Thread-24072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:58:13.195 [DEBUG] [Thread-24072] [transport.py] [_log()] client lang: <none>
2026-04-15T18:58:13.195 [DEBUG] [Thread-24072] [transport.py] [_log()] server lang: <none>
2026-04-15T18:58:13.195 [DEBUG] [Thread-24072] [transport.py] [_log()] kex follows: False
2026-04-15T18:58:13.195 [DEBUG] [Thread-24072] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:58:13.195 [DEBUG] [Thread-24072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:58:13.195 [DEBUG] [Thread-24072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:58:13.195 [DEBUG] [Thread-24072] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:58:13.195 [DEBUG] [Thread-24072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:58:13.195 [DEBUG] [Thread-24072] [transport.py] [_log()] Compression: none
2026-04-15T18:58:13.195 [DEBUG] [Thread-24072] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:58:13.211 [DEBUG] [Thread-24072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:58:13.211 [DEBUG] [Thread-24072] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:58:13.212 [DEBUG] [Thread-24072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:58:13.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:58:13.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:58:13.213 [DEBUG] [Thread-24072] [transport.py] [_log()] userauth is OK
2026-04-15T18:58:13.213 [DEBUG] [Thread-24072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:58:13.213 [DEBUG] [Thread-24072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:58:13.213 [DEBUG] [Thread-24072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:58:13.213 [DEBUG] [Thread-24072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:58:13.235 [INFO] [Thread-24072] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:58:13.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:58:13.990 [DEBUG] [Thread-24072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:58:13.991 [DEBUG] [Thread-24072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:58:13.991 [DEBUG] [Thread-24072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:58:14.031 [DEBUG] [Thread-24072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:58:14.032 [DEBUG] [Thread-24072] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:58:14.034 [DEBUG] [Thread-24072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:58:14.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:58:14.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:58:14.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:58:14.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:58:14.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:58:14.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:58:14.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:58:14.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:58:14.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:58:14.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.706731 -999.00  +10.50  14.95     77   +6.60 1 2 1 1 1     8    0 3.77 -6.84 Z.eS. 14.4 14.9 296.6 16.6 11.4 -24.7 11.2 -23.6 10.9 -21.4 11.2 -23.6
2026-04-15T18:58:14.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:58:14.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:58:14.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.706731
2026-04-15T18:58:14.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:58:14.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:58:14.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:58:14.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:58:14.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:58:14.056 [DEBUG] [Thread-24072] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:58:14.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:57:58', tmtdew=4.70558, humidity=72.8062, cloud=0.0, wind=15.0163, temperature=10.4878, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:57:41.558', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:58:14.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:58:14.283 [DEBUG] [Thread-24075] [transport.py] [_log()] starting thread (client mode): 0xee907bb0
2026-04-15T18:58:14.283 [DEBUG] [Thread-24075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:58:14.302 [DEBUG] [Thread-24075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:58:14.302 [INFO] [Thread-24075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:58:14.309 [DEBUG] [Thread-24075] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:58:14.309 [DEBUG] [Thread-24075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:58:14.309 [DEBUG] [Thread-24075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:58:14.309 [DEBUG] [Thread-24075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:58:14.309 [DEBUG] [Thread-24075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:58:14.310 [DEBUG] [Thread-24075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:58:14.310 [DEBUG] [Thread-24075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:58:14.310 [DEBUG] [Thread-24075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:58:14.310 [DEBUG] [Thread-24075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:58:14.310 [DEBUG] [Thread-24075] [transport.py] [_log()] client lang: <none>
2026-04-15T18:58:14.310 [DEBUG] [Thread-24075] [transport.py] [_log()] server lang: <none>
2026-04-15T18:58:14.310 [DEBUG] [Thread-24075] [transport.py] [_log()] kex follows: False
2026-04-15T18:58:14.310 [DEBUG] [Thread-24075] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:58:14.310 [DEBUG] [Thread-24075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:58:14.310 [DEBUG] [Thread-24075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:58:14.310 [DEBUG] [Thread-24075] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:58:14.311 [DEBUG] [Thread-24075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:58:14.311 [DEBUG] [Thread-24075] [transport.py] [_log()] Compression: none
2026-04-15T18:58:14.311 [DEBUG] [Thread-24075] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:58:14.374 [DEBUG] [Thread-24075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:58:14.374 [DEBUG] [Thread-24075] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:58:14.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:58:14.375 [DEBUG] [Thread-24075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:58:14.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:58:14.432 [DEBUG] [Thread-24075] [transport.py] [_log()] userauth is OK
2026-04-15T18:58:14.432 [DEBUG] [Thread-24075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:58:14.432 [DEBUG] [Thread-24075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:58:14.432 [DEBUG] [Thread-24075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:58:14.432 [DEBUG] [Thread-24075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:58:14.458 [INFO] [Thread-24075] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:58:14.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:58:14.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:58:15.294 [DEBUG] [Thread-24075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:58:15.294 [DEBUG] [Thread-24075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:58:15.342 [DEBUG] [Thread-24075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:58:15.342 [DEBUG] [Thread-24075] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:58:15.351 [DEBUG] [Thread-24075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:58:15.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:58:15.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T18:58:15.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
2026-04-15T18:58:15.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:58:15.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:58:15.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:58:15.386 [DEBUG] [Thread-24075] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:58:19.463 [DEBUG] [Thread-24077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:58:34.506 [DEBUG] [Thread-24078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:58:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:58:45.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:58:45.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
2026-04-15T18:58:46.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 58, 33), 4.70672, 72.6468, 0.0, 15.3504, 10.8429, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:58:46.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:58:33
2026-04-15T18:58:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:58:47.509 [DEBUG] [Thread-24079] [transport.py] [_log()] starting thread (client mode): 0xee9041f0
2026-04-15T18:58:47.509 [DEBUG] [Thread-24079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:58:47.528 [DEBUG] [Thread-24079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:58:47.528 [INFO] [Thread-24079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:58:47.531 [DEBUG] [Thread-24079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:58:47.531 [DEBUG] [Thread-24079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:58:47.531 [DEBUG] [Thread-24079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:58:47.531 [DEBUG] [Thread-24079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:58:47.531 [DEBUG] [Thread-24079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:58:47.532 [DEBUG] [Thread-24079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:58:47.532 [DEBUG] [Thread-24079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:58:47.532 [DEBUG] [Thread-24079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:58:47.532 [DEBUG] [Thread-24079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:58:47.532 [DEBUG] [Thread-24079] [transport.py] [_log()] client lang: <none>
2026-04-15T18:58:47.532 [DEBUG] [Thread-24079] [transport.py] [_log()] server lang: <none>
2026-04-15T18:58:47.532 [DEBUG] [Thread-24079] [transport.py] [_log()] kex follows: False
2026-04-15T18:58:47.532 [DEBUG] [Thread-24079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:58:47.532 [DEBUG] [Thread-24079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:58:47.532 [DEBUG] [Thread-24079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:58:47.532 [DEBUG] [Thread-24079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:58:47.532 [DEBUG] [Thread-24079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:58:47.533 [DEBUG] [Thread-24079] [transport.py] [_log()] Compression: none
2026-04-15T18:58:47.533 [DEBUG] [Thread-24079] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:58:47.543 [DEBUG] [Thread-24079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:58:47.544 [DEBUG] [Thread-24079] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:58:47.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:58:47.544 [DEBUG] [Thread-24079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:58:47.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:58:47.545 [DEBUG] [Thread-24079] [transport.py] [_log()] userauth is OK
2026-04-15T18:58:47.545 [DEBUG] [Thread-24079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:58:47.546 [DEBUG] [Thread-24079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:58:47.546 [DEBUG] [Thread-24079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:58:47.546 [DEBUG] [Thread-24079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:58:47.568 [INFO] [Thread-24079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:58:47.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:58:48.323 [DEBUG] [Thread-24079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:58:48.324 [DEBUG] [Thread-24079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:58:48.324 [DEBUG] [Thread-24079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:58:48.364 [DEBUG] [Thread-24079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:58:48.364 [DEBUG] [Thread-24079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:58:48.367 [DEBUG] [Thread-24079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:58:48.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:58:48.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:58:48.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:58:48.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:58:48.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:58:48.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:58:48.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:58:48.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:58:48.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:58:48.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.707078 -999.00  +10.50  14.19     76   +6.60 1 2 1 1 1     7    0 3.71 -5.75 ZneS. 16.0 14.2 304.8 16.7 11.3 -24.6 11.2 -23.6 10.9 -21.5 11.2 -23.5
2026-04-15T18:58:48.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:58:48.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:58:48.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.707078
2026-04-15T18:58:48.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:58:48.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:58:48.393 [DEBUG] [Thread-24079] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:58:48.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:58:48.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:58:48.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:58:48.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:58:33', tmtdew=4.70672, humidity=72.6468, cloud=0.0, wind=15.3504, temperature=10.8429, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:58:11.539', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:58:48.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:58:48.649 [DEBUG] [Thread-24082] [transport.py] [_log()] starting thread (client mode): 0xee907ca0
2026-04-15T18:58:48.649 [DEBUG] [Thread-24082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:58:48.664 [DEBUG] [Thread-24082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:58:48.664 [INFO] [Thread-24082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:58:48.671 [DEBUG] [Thread-24082] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:58:48.671 [DEBUG] [Thread-24082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:58:48.671 [DEBUG] [Thread-24082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:58:48.671 [DEBUG] [Thread-24082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:58:48.671 [DEBUG] [Thread-24082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:58:48.671 [DEBUG] [Thread-24082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:58:48.672 [DEBUG] [Thread-24082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:58:48.672 [DEBUG] [Thread-24082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:58:48.672 [DEBUG] [Thread-24082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:58:48.672 [DEBUG] [Thread-24082] [transport.py] [_log()] client lang: <none>
2026-04-15T18:58:48.672 [DEBUG] [Thread-24082] [transport.py] [_log()] server lang: <none>
2026-04-15T18:58:48.672 [DEBUG] [Thread-24082] [transport.py] [_log()] kex follows: False
2026-04-15T18:58:48.672 [DEBUG] [Thread-24082] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:58:48.672 [DEBUG] [Thread-24082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:58:48.672 [DEBUG] [Thread-24082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:58:48.672 [DEBUG] [Thread-24082] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:58:48.672 [DEBUG] [Thread-24082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:58:48.673 [DEBUG] [Thread-24082] [transport.py] [_log()] Compression: none
2026-04-15T18:58:48.673 [DEBUG] [Thread-24082] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:58:48.728 [DEBUG] [Thread-24082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:58:48.728 [DEBUG] [Thread-24082] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:58:48.728 [DEBUG] [Thread-24082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:58:48.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:58:48.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:58:48.784 [DEBUG] [Thread-24082] [transport.py] [_log()] userauth is OK
2026-04-15T18:58:48.784 [DEBUG] [Thread-24082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:58:48.784 [DEBUG] [Thread-24082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:58:48.785 [DEBUG] [Thread-24082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:58:48.785 [DEBUG] [Thread-24082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:58:48.810 [INFO] [Thread-24082] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:58:48.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:58:48.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:58:49.535 [DEBUG] [Thread-24084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:58:49.666 [DEBUG] [Thread-24082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:58:49.666 [DEBUG] [Thread-24082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:58:49.714 [DEBUG] [Thread-24082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:58:49.714 [DEBUG] [Thread-24082] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:58:49.723 [DEBUG] [Thread-24082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:58:49.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:58:49.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')
2026-04-15T18:58:49.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
2026-04-15T18:58:49.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:58:49.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:58:49.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:58:49.758 [DEBUG] [Thread-24082] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:58:54.331 [DEBUG] [Thread-24085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:59:04.377 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:59:04.379 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:59:04.579 [DEBUG] [Thread-24086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:59:19.611 [DEBUG] [Thread-24087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:59:19.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:59:19.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:59:19.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
2026-04-15T18:59:21.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 59, 9), 4.64937, 72.8405, 0.0, 13.9226, 10.5053, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:59:21.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:59:09
2026-04-15T18:59:21.482 [DEBUG] [Thread-23763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:59:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:59:21.957 [DEBUG] [Thread-24088] [transport.py] [_log()] starting thread (client mode): 0xee9065f0
2026-04-15T18:59:21.958 [DEBUG] [Thread-24088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:59:21.978 [DEBUG] [Thread-24088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:59:21.978 [INFO] [Thread-24088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:59:21.981 [DEBUG] [Thread-24088] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:59:21.981 [DEBUG] [Thread-24088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:59:21.981 [DEBUG] [Thread-24088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:59:21.981 [DEBUG] [Thread-24088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:59:21.981 [DEBUG] [Thread-24088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:59:21.981 [DEBUG] [Thread-24088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:59:21.981 [DEBUG] [Thread-24088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:59:21.981 [DEBUG] [Thread-24088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:59:21.982 [DEBUG] [Thread-24088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:59:21.982 [DEBUG] [Thread-24088] [transport.py] [_log()] client lang: <none>
2026-04-15T18:59:21.982 [DEBUG] [Thread-24088] [transport.py] [_log()] server lang: <none>
2026-04-15T18:59:21.982 [DEBUG] [Thread-24088] [transport.py] [_log()] kex follows: False
2026-04-15T18:59:21.982 [DEBUG] [Thread-24088] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:59:21.982 [DEBUG] [Thread-24088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:59:21.982 [DEBUG] [Thread-24088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:59:21.982 [DEBUG] [Thread-24088] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:59:21.982 [DEBUG] [Thread-24088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:59:21.982 [DEBUG] [Thread-24088] [transport.py] [_log()] Compression: none
2026-04-15T18:59:21.983 [DEBUG] [Thread-24088] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:59:21.999 [DEBUG] [Thread-24088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:59:22.000 [DEBUG] [Thread-24088] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:59:22.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:59:22.000 [DEBUG] [Thread-24088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:59:22.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:59:22.001 [DEBUG] [Thread-24088] [transport.py] [_log()] userauth is OK
2026-04-15T18:59:22.001 [DEBUG] [Thread-24088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:59:22.002 [DEBUG] [Thread-24088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:59:22.002 [DEBUG] [Thread-24088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:59:22.002 [DEBUG] [Thread-24088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:59:22.026 [INFO] [Thread-24088] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:59:22.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:59:22.832 [DEBUG] [Thread-24088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:59:22.832 [DEBUG] [Thread-24088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:59:22.833 [DEBUG] [Thread-24088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:59:22.873 [DEBUG] [Thread-24088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:59:22.873 [DEBUG] [Thread-24088] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:59:22.876 [DEBUG] [Thread-24088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:59:22.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:59:22.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:59:22.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:59:22.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:59:22.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:59:22.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:59:22.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:59:22.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:59:22.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:59:22.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.707425 -999.00  +10.50  14.77     77   +6.60 1 2 1 1 1     6    0 3.69 -5.13 Z.ESW 14.7 14.8 296.8 18.3 11.3 -24.8 11.2 -23.6 10.9 -21.6 11.2 -23.6
2026-04-15T18:59:22.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:59:22.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:59:22.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.707425
2026-04-15T18:59:22.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:59:22.902 [DEBUG] [Thread-24088] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:59:22.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:59:22.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:59:22.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:59:22.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:59:22.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:59:09', tmtdew=4.64937, humidity=72.8405, cloud=0.0, wind=13.9226, temperature=10.5053, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:58:41.520', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:59:23.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:59:23.159 [DEBUG] [Thread-24091] [transport.py] [_log()] starting thread (client mode): 0xee91e4a0
2026-04-15T18:59:23.159 [DEBUG] [Thread-24091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:59:23.174 [DEBUG] [Thread-24091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:59:23.174 [INFO] [Thread-24091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:59:23.181 [DEBUG] [Thread-24091] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:59:23.182 [DEBUG] [Thread-24091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:59:23.182 [DEBUG] [Thread-24091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:59:23.182 [DEBUG] [Thread-24091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:59:23.182 [DEBUG] [Thread-24091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:59:23.182 [DEBUG] [Thread-24091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:59:23.182 [DEBUG] [Thread-24091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:59:23.182 [DEBUG] [Thread-24091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:59:23.182 [DEBUG] [Thread-24091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:59:23.182 [DEBUG] [Thread-24091] [transport.py] [_log()] client lang: <none>
2026-04-15T18:59:23.182 [DEBUG] [Thread-24091] [transport.py] [_log()] server lang: <none>
2026-04-15T18:59:23.182 [DEBUG] [Thread-24091] [transport.py] [_log()] kex follows: False
2026-04-15T18:59:23.182 [DEBUG] [Thread-24091] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:59:23.183 [DEBUG] [Thread-24091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:59:23.183 [DEBUG] [Thread-24091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:59:23.183 [DEBUG] [Thread-24091] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:59:23.183 [DEBUG] [Thread-24091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:59:23.183 [DEBUG] [Thread-24091] [transport.py] [_log()] Compression: none
2026-04-15T18:59:23.183 [DEBUG] [Thread-24091] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:59:23.238 [DEBUG] [Thread-24091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:59:23.238 [DEBUG] [Thread-24091] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:59:23.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:59:23.239 [DEBUG] [Thread-24091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:59:23.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:59:23.295 [DEBUG] [Thread-24091] [transport.py] [_log()] userauth is OK
2026-04-15T18:59:23.295 [DEBUG] [Thread-24091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:59:23.295 [DEBUG] [Thread-24091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:59:23.296 [DEBUG] [Thread-24091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:59:23.296 [DEBUG] [Thread-24091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:59:23.323 [INFO] [Thread-24091] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:59:23.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:59:23.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:59:24.173 [DEBUG] [Thread-24091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:59:24.173 [DEBUG] [Thread-24091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:59:24.221 [DEBUG] [Thread-24091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:59:24.221 [DEBUG] [Thread-24091] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:59:24.230 [DEBUG] [Thread-24091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:59:24.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:59: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')
2026-04-15T18:59:24.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
2026-04-15T18:59:24.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:59:24.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:59:24.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:59:24.265 [DEBUG] [Thread-24091] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:59:34.641 [DEBUG] [Thread-24093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:59:49.680 [DEBUG] [Thread-24094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:59:54.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T18:59:54.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T18:59:54.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
2026-04-15T18:59:54.475 [DEBUG] [Thread-24095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T18:59:55.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 18, 59, 45), 4.67775, 72.7804, 0.0, 15.6326, 10.7774, 0, 0, 0, 2, 0, 0),)
2026-04-15T18:59:55.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 18:59:45
2026-04-15T18:59:55.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T18:59:56.458 [DEBUG] [Thread-24096] [transport.py] [_log()] starting thread (client mode): 0xee91e800
2026-04-15T18:59:56.458 [DEBUG] [Thread-24096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:59:56.475 [DEBUG] [Thread-24096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T18:59:56.475 [INFO] [Thread-24096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T18:59:56.478 [DEBUG] [Thread-24096] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:59:56.478 [DEBUG] [Thread-24096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T18:59:56.478 [DEBUG] [Thread-24096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:59:56.478 [DEBUG] [Thread-24096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:59:56.479 [DEBUG] [Thread-24096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:59:56.479 [DEBUG] [Thread-24096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:59:56.479 [DEBUG] [Thread-24096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:59:56.479 [DEBUG] [Thread-24096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:59:56.479 [DEBUG] [Thread-24096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:59:56.479 [DEBUG] [Thread-24096] [transport.py] [_log()] client lang: <none>
2026-04-15T18:59:56.479 [DEBUG] [Thread-24096] [transport.py] [_log()] server lang: <none>
2026-04-15T18:59:56.479 [DEBUG] [Thread-24096] [transport.py] [_log()] kex follows: False
2026-04-15T18:59:56.479 [DEBUG] [Thread-24096] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:59:56.479 [DEBUG] [Thread-24096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:59:56.479 [DEBUG] [Thread-24096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:59:56.479 [DEBUG] [Thread-24096] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:59:56.479 [DEBUG] [Thread-24096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:59:56.479 [DEBUG] [Thread-24096] [transport.py] [_log()] Compression: none
2026-04-15T18:59:56.480 [DEBUG] [Thread-24096] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:59:56.497 [DEBUG] [Thread-24096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:59:56.497 [DEBUG] [Thread-24096] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:59:56.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T18:59:56.498 [DEBUG] [Thread-24096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T18:59:56.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:59:56.500 [DEBUG] [Thread-24096] [transport.py] [_log()] userauth is OK
2026-04-15T18:59:56.501 [DEBUG] [Thread-24096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:59:56.501 [DEBUG] [Thread-24096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:59:56.501 [DEBUG] [Thread-24096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T18:59:56.501 [DEBUG] [Thread-24096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:59:56.514 [INFO] [Thread-24096] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:59:56.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:59:57.222 [DEBUG] [Thread-24096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:59:57.223 [DEBUG] [Thread-24096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:59:57.223 [DEBUG] [Thread-24096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T18:59:57.263 [DEBUG] [Thread-24096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:59:57.263 [DEBUG] [Thread-24096] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:59:57.265 [DEBUG] [Thread-24096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:59:57.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:59:57.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T18:59:57.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T18:59:57.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T18:59:57.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:59:57.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T18:59:57.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:59:57.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:59:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T18:59:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.708120 -999.00  +10.50  15.81     77   +6.60 1 2 1 1 1     5    0 3.79 -3.93 Z.ESW 15.0 15.8 298.4 17.8 11.3 -24.8 11.2 -23.6 10.8 -21.6 11.2 -23.7
2026-04-15T18:59:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T18:59:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T18:59:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.708120
2026-04-15T18:59:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T18:59:57.293 [DEBUG] [Thread-24096] [transport.py] [_log()] EOF in transport thread
2026-04-15T18:59:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T18:59:57.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T18:59:57.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T18:59:57.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T18:59:57.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T18:59:45', tmtdew=4.67775, humidity=72.7804, cloud=0.0, wind=15.6326, temperature=10.7774, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:59:41.568', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T18:59:57.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T18:59:57.554 [DEBUG] [Thread-24099] [transport.py] [_log()] starting thread (client mode): 0xf1337e80
2026-04-15T18:59:57.554 [DEBUG] [Thread-24099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T18:59:57.569 [DEBUG] [Thread-24099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T18:59:57.569 [INFO] [Thread-24099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T18:59:57.576 [DEBUG] [Thread-24099] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T18:59:57.576 [DEBUG] [Thread-24099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T18:59:57.576 [DEBUG] [Thread-24099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T18:59:57.576 [DEBUG] [Thread-24099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:59:57.576 [DEBUG] [Thread-24099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T18:59:57.576 [DEBUG] [Thread-24099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:59:57.576 [DEBUG] [Thread-24099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T18:59:57.577 [DEBUG] [Thread-24099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T18:59:57.577 [DEBUG] [Thread-24099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T18:59:57.577 [DEBUG] [Thread-24099] [transport.py] [_log()] client lang: <none>
2026-04-15T18:59:57.577 [DEBUG] [Thread-24099] [transport.py] [_log()] server lang: <none>
2026-04-15T18:59:57.577 [DEBUG] [Thread-24099] [transport.py] [_log()] kex follows: False
2026-04-15T18:59:57.577 [DEBUG] [Thread-24099] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T18:59:57.577 [DEBUG] [Thread-24099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T18:59:57.577 [DEBUG] [Thread-24099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T18:59:57.577 [DEBUG] [Thread-24099] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T18:59:57.577 [DEBUG] [Thread-24099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T18:59:57.577 [DEBUG] [Thread-24099] [transport.py] [_log()] Compression: none
2026-04-15T18:59:57.578 [DEBUG] [Thread-24099] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T18:59:57.635 [DEBUG] [Thread-24099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T18:59:57.635 [DEBUG] [Thread-24099] [transport.py] [_log()] Switch to new keys ...
2026-04-15T18:59:57.636 [DEBUG] [Thread-24099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T18:59:57.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T18:59:57.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T18:59:57.691 [DEBUG] [Thread-24099] [transport.py] [_log()] userauth is OK
2026-04-15T18:59:57.691 [DEBUG] [Thread-24099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T18:59:57.691 [DEBUG] [Thread-24099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T18:59:57.691 [DEBUG] [Thread-24099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T18:59:57.691 [DEBUG] [Thread-24099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T18:59:57.716 [INFO] [Thread-24099] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T18:59:57.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T18:59:57.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T18:59:58.553 [DEBUG] [Thread-24099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T18:59:58.553 [DEBUG] [Thread-24099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T18:59:58.601 [DEBUG] [Thread-24099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T18:59:58.601 [DEBUG] [Thread-24099] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T18:59:58.610 [DEBUG] [Thread-24099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T18:59:58.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T18:59:58.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')
2026-04-15T18:59:58.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
2026-04-15T18:59:58.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T18:59:58.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T18:59:58.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T18:59:58.644 [DEBUG] [Thread-24099] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:00:04.709 [DEBUG] [Thread-24101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:00:08.666 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:00:08.667 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:00:19.747 [DEBUG] [Thread-24102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:00:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:00:28.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:00:28.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
2026-04-15T19:00:29.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 0, 20), 4.63492, 72.9072, 0.0, 15.0516, 10.4725, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:00:29.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:00:20
2026-04-15T19:00:30.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:00:30.787 [DEBUG] [Thread-24103] [transport.py] [_log()] starting thread (client mode): 0xf13e2fb0
2026-04-15T19:00:30.787 [DEBUG] [Thread-24103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:00:30.807 [DEBUG] [Thread-24103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:00:30.808 [INFO] [Thread-24103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:00:30.810 [DEBUG] [Thread-24103] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:00:30.810 [DEBUG] [Thread-24103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:00:30.810 [DEBUG] [Thread-24103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:00:30.810 [DEBUG] [Thread-24103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:00:30.810 [DEBUG] [Thread-24103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:00:30.811 [DEBUG] [Thread-24103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:00:30.811 [DEBUG] [Thread-24103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:00:30.811 [DEBUG] [Thread-24103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:00:30.811 [DEBUG] [Thread-24103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:00:30.811 [DEBUG] [Thread-24103] [transport.py] [_log()] client lang: <none>
2026-04-15T19:00:30.811 [DEBUG] [Thread-24103] [transport.py] [_log()] server lang: <none>
2026-04-15T19:00:30.811 [DEBUG] [Thread-24103] [transport.py] [_log()] kex follows: False
2026-04-15T19:00:30.811 [DEBUG] [Thread-24103] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:00:30.811 [DEBUG] [Thread-24103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:00:30.811 [DEBUG] [Thread-24103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:00:30.811 [DEBUG] [Thread-24103] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:00:30.812 [DEBUG] [Thread-24103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:00:30.812 [DEBUG] [Thread-24103] [transport.py] [_log()] Compression: none
2026-04-15T19:00:30.812 [DEBUG] [Thread-24103] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:00:30.830 [DEBUG] [Thread-24103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:00:30.831 [DEBUG] [Thread-24103] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:00:30.831 [DEBUG] [Thread-24103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:00:30.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:00:30.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:00:30.832 [DEBUG] [Thread-24103] [transport.py] [_log()] userauth is OK
2026-04-15T19:00:30.832 [DEBUG] [Thread-24103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:00:30.832 [DEBUG] [Thread-24103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:00:30.832 [DEBUG] [Thread-24103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:00:30.832 [DEBUG] [Thread-24103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:00:30.849 [INFO] [Thread-24103] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:00:30.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:00:34.777 [DEBUG] [Thread-24105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:00:36.893 [DEBUG] [Thread-24103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:00:36.894 [DEBUG] [Thread-24103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:00:36.894 [DEBUG] [Thread-24103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:00:36.934 [DEBUG] [Thread-24103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:00:36.934 [DEBUG] [Thread-24103] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:00:36.936 [DEBUG] [Thread-24103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:00:36.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:00:36.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:00:36.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:00:36.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:00:36.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:00:36.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:00:36.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:00:36.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:00:36.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:00:36.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.708120 -999.00  +10.50  15.81     77   +6.60 1 2 1 1 1     5    0 3.79 -3.93 Z.ESW 15.0 15.8 298.4 17.8 11.3 -24.8 11.2 -23.6 10.8 -21.6 11.2 -23.7
2026-04-15T19:00:36.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:00:36.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:00:36.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.708120
2026-04-15T19:00:36.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:00:36.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:00:36.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:00:36.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:00:36.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T19:00:36.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:00:20', tmtdew=4.63492, humidity=72.9072, cloud=0.0, wind=15.0516, temperature=10.4725, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T16:59:41.568', atlas_cloud=2, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:00:36.969 [DEBUG] [Thread-24103] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:00:37.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:00:37.183 [DEBUG] [Thread-24107] [transport.py] [_log()] starting thread (client mode): 0xf1351720
2026-04-15T19:00:37.183 [DEBUG] [Thread-24107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:00:37.197 [DEBUG] [Thread-24107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:00:37.197 [INFO] [Thread-24107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:00:37.205 [DEBUG] [Thread-24107] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:00:37.205 [DEBUG] [Thread-24107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:00:37.206 [DEBUG] [Thread-24107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:00:37.206 [DEBUG] [Thread-24107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:00:37.206 [DEBUG] [Thread-24107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:00:37.206 [DEBUG] [Thread-24107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:00:37.206 [DEBUG] [Thread-24107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:00:37.206 [DEBUG] [Thread-24107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:00:37.206 [DEBUG] [Thread-24107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:00:37.206 [DEBUG] [Thread-24107] [transport.py] [_log()] client lang: <none>
2026-04-15T19:00:37.206 [DEBUG] [Thread-24107] [transport.py] [_log()] server lang: <none>
2026-04-15T19:00:37.206 [DEBUG] [Thread-24107] [transport.py] [_log()] kex follows: False
2026-04-15T19:00:37.206 [DEBUG] [Thread-24107] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:00:37.206 [DEBUG] [Thread-24107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:00:37.207 [DEBUG] [Thread-24107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:00:37.207 [DEBUG] [Thread-24107] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:00:37.207 [DEBUG] [Thread-24107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:00:37.207 [DEBUG] [Thread-24107] [transport.py] [_log()] Compression: none
2026-04-15T19:00:37.207 [DEBUG] [Thread-24107] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:00:37.262 [DEBUG] [Thread-24107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:00:37.262 [DEBUG] [Thread-24107] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:00:37.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:00:37.263 [DEBUG] [Thread-24107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:00:37.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:00:37.319 [DEBUG] [Thread-24107] [transport.py] [_log()] userauth is OK
2026-04-15T19:00:37.319 [DEBUG] [Thread-24107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:00:37.319 [DEBUG] [Thread-24107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:00:37.319 [DEBUG] [Thread-24107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:00:37.319 [DEBUG] [Thread-24107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:00:37.344 [INFO] [Thread-24107] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:00:37.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:00:37.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:00:38.157 [DEBUG] [Thread-24107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:00:38.158 [DEBUG] [Thread-24107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:00:38.205 [DEBUG] [Thread-24107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:00:38.206 [DEBUG] [Thread-24107] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:00:38.215 [DEBUG] [Thread-24107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:00:38.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:00:38.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')
2026-04-15T19:00:38.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
2026-04-15T19:00:38.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:00:38.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:00:38.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:00:38.250 [DEBUG] [Thread-24107] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:00:49.806 [DEBUG] [Thread-24109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:00:54.636 [DEBUG] [Thread-24110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:01:04.851 [DEBUG] [Thread-24111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:01:08.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:01:08.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:01:08.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
2026-04-15T19:01:09.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 0, 56), 4.57833, 72.9404, 0.0, 14.5224, 10.4225, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:01:09.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:00:56
2026-04-15T19:01:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:01:10.417 [DEBUG] [Thread-24112] [transport.py] [_log()] starting thread (client mode): 0xf13e0f40
2026-04-15T19:01:10.417 [DEBUG] [Thread-24112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:01:10.436 [DEBUG] [Thread-24112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:01:10.436 [INFO] [Thread-24112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:01:10.438 [DEBUG] [Thread-24112] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:01:10.438 [DEBUG] [Thread-24112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:01:10.438 [DEBUG] [Thread-24112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:01:10.438 [DEBUG] [Thread-24112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:01:10.439 [DEBUG] [Thread-24112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:01:10.439 [DEBUG] [Thread-24112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:01:10.439 [DEBUG] [Thread-24112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:01:10.439 [DEBUG] [Thread-24112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:01:10.439 [DEBUG] [Thread-24112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:01:10.439 [DEBUG] [Thread-24112] [transport.py] [_log()] client lang: <none>
2026-04-15T19:01:10.439 [DEBUG] [Thread-24112] [transport.py] [_log()] server lang: <none>
2026-04-15T19:01:10.439 [DEBUG] [Thread-24112] [transport.py] [_log()] kex follows: False
2026-04-15T19:01:10.439 [DEBUG] [Thread-24112] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:01:10.439 [DEBUG] [Thread-24112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:01:10.439 [DEBUG] [Thread-24112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:01:10.440 [DEBUG] [Thread-24112] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:01:10.440 [DEBUG] [Thread-24112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:01:10.440 [DEBUG] [Thread-24112] [transport.py] [_log()] Compression: none
2026-04-15T19:01:10.440 [DEBUG] [Thread-24112] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:01:10.453 [DEBUG] [Thread-24112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:01:10.453 [DEBUG] [Thread-24112] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:01:10.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:01:10.454 [DEBUG] [Thread-24112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:01:10.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:01:10.454 [DEBUG] [Thread-24112] [transport.py] [_log()] userauth is OK
2026-04-15T19:01:10.454 [DEBUG] [Thread-24112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:01:10.455 [DEBUG] [Thread-24112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:01:10.455 [DEBUG] [Thread-24112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:01:10.455 [DEBUG] [Thread-24112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:01:10.470 [INFO] [Thread-24112] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:01:10.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:01:11.266 [DEBUG] [Thread-24112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:01:11.267 [DEBUG] [Thread-24112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:01:11.267 [DEBUG] [Thread-24112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:01:11.307 [DEBUG] [Thread-24112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:01:11.307 [DEBUG] [Thread-24112] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:01:11.309 [DEBUG] [Thread-24112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:01:11.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:01:11.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:01:11.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:01:11.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:01:11.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:01:11.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:01:11.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:01:11.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:01:11.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:01:11.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.708467 -999.00  +10.40  14.89     77   +6.60 1 1 1 1 1     4    0 3.84 -3.68 ZNESW 14.6 14.9 297.8 17.2 11.3 -24.8 11.2 -23.6 10.8 -21.6 11.1 -23.6
2026-04-15T19:01:11.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:01:11.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:01:11.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.708467
2026-04-15T19:01:11.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:01:11.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:01:11.331 [DEBUG] [Thread-24112] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:01:11.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:01:11.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:01:11.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:01:11.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:00:56', tmtdew=4.57833, humidity=72.9404, cloud=0.0, wind=14.5224, temperature=10.4225, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:00:11.549', atlas_cloud=1, atlas_rain=1, zp_data=[3.70775, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.852249999999999, nan, nan, nan, nan, nan, nan, nan, 2.0805, nan, nan, nan, nan, 2.412749999999999], zp_timestamp='2026-04-15T03:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:01:11.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:01:11.582 [DEBUG] [Thread-24115] [transport.py] [_log()] starting thread (client mode): 0xee91c0a0
2026-04-15T19:01:11.582 [DEBUG] [Thread-24115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:01:11.596 [DEBUG] [Thread-24115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:01:11.596 [INFO] [Thread-24115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:01:11.604 [DEBUG] [Thread-24115] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:01:11.604 [DEBUG] [Thread-24115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:01:11.604 [DEBUG] [Thread-24115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:01:11.604 [DEBUG] [Thread-24115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:01:11.604 [DEBUG] [Thread-24115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:01:11.604 [DEBUG] [Thread-24115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:01:11.604 [DEBUG] [Thread-24115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:01:11.604 [DEBUG] [Thread-24115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:01:11.604 [DEBUG] [Thread-24115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:01:11.604 [DEBUG] [Thread-24115] [transport.py] [_log()] client lang: <none>
2026-04-15T19:01:11.604 [DEBUG] [Thread-24115] [transport.py] [_log()] server lang: <none>
2026-04-15T19:01:11.604 [DEBUG] [Thread-24115] [transport.py] [_log()] kex follows: False
2026-04-15T19:01:11.604 [DEBUG] [Thread-24115] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:01:11.604 [DEBUG] [Thread-24115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:01:11.604 [DEBUG] [Thread-24115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:01:11.605 [DEBUG] [Thread-24115] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:01:11.605 [DEBUG] [Thread-24115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:01:11.605 [DEBUG] [Thread-24115] [transport.py] [_log()] Compression: none
2026-04-15T19:01:11.605 [DEBUG] [Thread-24115] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:01:11.661 [DEBUG] [Thread-24115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:01:11.661 [DEBUG] [Thread-24115] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:01:11.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:01:11.661 [DEBUG] [Thread-24115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:01:11.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:01:11.718 [DEBUG] [Thread-24115] [transport.py] [_log()] userauth is OK
2026-04-15T19:01:11.718 [DEBUG] [Thread-24115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:01:11.718 [DEBUG] [Thread-24115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:01:11.718 [DEBUG] [Thread-24115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:01:11.718 [DEBUG] [Thread-24115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:01:11.741 [INFO] [Thread-24115] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:01:11.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:01:11.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:01:12.564 [DEBUG] [Thread-24115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:01:12.565 [DEBUG] [Thread-24115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:01:12.612 [DEBUG] [Thread-24115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:01:12.612 [DEBUG] [Thread-24115] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:01:12.621 [DEBUG] [Thread-24115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:01:12.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:01:12.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')
2026-04-15T19:01:12.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
2026-04-15T19:01:12.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:01:12.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:01:12.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:01:12.656 [DEBUG] [Thread-24115] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:01:13.304 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:01:13.305 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:01:19.883 [DEBUG] [Thread-24117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:01:34.924 [DEBUG] [Thread-24118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:01:42.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:01:42.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:01:42.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
2026-04-15T19:01:43.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 1, 31), 4.56452, 73.007, 0.0, 14.5224, 10.4062, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:01:43.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:01:31
2026-04-15T19:01:44.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:01:44.756 [DEBUG] [Thread-24119] [transport.py] [_log()] starting thread (client mode): 0xee907ca0
2026-04-15T19:01:44.756 [DEBUG] [Thread-24119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:01:44.776 [DEBUG] [Thread-24119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:01:44.776 [INFO] [Thread-24119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:01:44.779 [DEBUG] [Thread-24119] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:01:44.779 [DEBUG] [Thread-24119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:01:44.780 [DEBUG] [Thread-24119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:01:44.780 [DEBUG] [Thread-24119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:01:44.780 [DEBUG] [Thread-24119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:01:44.780 [DEBUG] [Thread-24119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:01:44.780 [DEBUG] [Thread-24119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:01:44.780 [DEBUG] [Thread-24119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:01:44.780 [DEBUG] [Thread-24119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:01:44.780 [DEBUG] [Thread-24119] [transport.py] [_log()] client lang: <none>
2026-04-15T19:01:44.780 [DEBUG] [Thread-24119] [transport.py] [_log()] server lang: <none>
2026-04-15T19:01:44.780 [DEBUG] [Thread-24119] [transport.py] [_log()] kex follows: False
2026-04-15T19:01:44.780 [DEBUG] [Thread-24119] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:01:44.781 [DEBUG] [Thread-24119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:01:44.781 [DEBUG] [Thread-24119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:01:44.781 [DEBUG] [Thread-24119] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:01:44.781 [DEBUG] [Thread-24119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:01:44.781 [DEBUG] [Thread-24119] [transport.py] [_log()] Compression: none
2026-04-15T19:01:44.781 [DEBUG] [Thread-24119] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:01:44.798 [DEBUG] [Thread-24119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:01:44.799 [DEBUG] [Thread-24119] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:01:44.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:01:44.799 [DEBUG] [Thread-24119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:01:44.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:01:44.800 [DEBUG] [Thread-24119] [transport.py] [_log()] userauth is OK
2026-04-15T19:01:44.800 [DEBUG] [Thread-24119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:01:44.801 [DEBUG] [Thread-24119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:01:44.801 [DEBUG] [Thread-24119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:01:44.801 [DEBUG] [Thread-24119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:01:44.826 [INFO] [Thread-24119] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:01:44.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:01:45.649 [DEBUG] [Thread-24119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:01:45.649 [DEBUG] [Thread-24119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:01:45.650 [DEBUG] [Thread-24119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:01:45.690 [DEBUG] [Thread-24119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:01:45.690 [DEBUG] [Thread-24119] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:01:45.693 [DEBUG] [Thread-24119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:01:45.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:01:45.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:01:45.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:01:45.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:01:45.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:01:45.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:01:45.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:01:45.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:01:45.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:01:45.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.708814 -999.00  +10.40  14.08     77   +6.70 1 1 1 1 1     4    0 3.76 -4.07 ZNESW 14.4 14.1 297.6 16.0 11.3 -24.9 11.1 -23.6 10.8 -21.6 11.1 -23.6
2026-04-15T19:01:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:01:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:01:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.708814
2026-04-15T19:01:45.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:01:45.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:01:45.721 [DEBUG] [Thread-24119] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:01:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:01:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:01:45.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:01:45.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:01:31', tmtdew=4.56452, humidity=73.007, cloud=0.0, wind=14.5224, temperature=10.4062, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:00:41.530', atlas_cloud=1, atlas_rain=1, zp_data=[-0.12675000000000125, -0.02474999999999916, -0.0727499999999992, -0.15549999999999997, -0.13449999999999918, -0.07724999999999937, -0.13400000000000034, -0.07074999999999854, -0.062000000000001165, -0.08999999999999986, -0.24875000000000114, -0.053000000000000824, -0.057000000000000384, -0.0807500000000001, -0.059499999999999886, 0.045999999999999375, -0.11175000000000068, 0.02999999999999936, -0.10500000000000043, -0.10625000000000107, -0.04650000000000176, -0.07525000000000048, -0.15174999999999983, -0.07124999999999915, -0.07699999999999996, -0.12349999999999994, -0.12124999999999986, -0.6854999999999993, -1.1899999999999995, -0.07199999999999918, 0.030000000000001137, 0.006000000000000227, 0.08474999999999966], zp_timestamp='2026-04-15T17:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:01:45.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:01:45.979 [DEBUG] [Thread-24122] [transport.py] [_log()] starting thread (client mode): 0xf1353a90
2026-04-15T19:01:45.979 [DEBUG] [Thread-24122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:01:45.993 [DEBUG] [Thread-24122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:01:45.993 [INFO] [Thread-24122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:01:46.001 [DEBUG] [Thread-24122] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:01:46.001 [DEBUG] [Thread-24122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:01:46.001 [DEBUG] [Thread-24122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:01:46.001 [DEBUG] [Thread-24122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:01:46.001 [DEBUG] [Thread-24122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:01:46.001 [DEBUG] [Thread-24122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:01:46.001 [DEBUG] [Thread-24122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:01:46.001 [DEBUG] [Thread-24122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:01:46.002 [DEBUG] [Thread-24122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:01:46.002 [DEBUG] [Thread-24122] [transport.py] [_log()] client lang: <none>
2026-04-15T19:01:46.002 [DEBUG] [Thread-24122] [transport.py] [_log()] server lang: <none>
2026-04-15T19:01:46.002 [DEBUG] [Thread-24122] [transport.py] [_log()] kex follows: False
2026-04-15T19:01:46.002 [DEBUG] [Thread-24122] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:01:46.002 [DEBUG] [Thread-24122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:01:46.002 [DEBUG] [Thread-24122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:01:46.002 [DEBUG] [Thread-24122] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:01:46.002 [DEBUG] [Thread-24122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:01:46.002 [DEBUG] [Thread-24122] [transport.py] [_log()] Compression: none
2026-04-15T19:01:46.002 [DEBUG] [Thread-24122] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:01:46.057 [DEBUG] [Thread-24122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:01:46.058 [DEBUG] [Thread-24122] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:01:46.058 [DEBUG] [Thread-24122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:01:46.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:01:46.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:01:46.113 [DEBUG] [Thread-24122] [transport.py] [_log()] userauth is OK
2026-04-15T19:01:46.113 [DEBUG] [Thread-24122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:01:46.114 [DEBUG] [Thread-24122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:01:46.114 [DEBUG] [Thread-24122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:01:46.114 [DEBUG] [Thread-24122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:01:46.140 [INFO] [Thread-24122] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:01:46.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:01:46.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:01:46.987 [DEBUG] [Thread-24122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:01:46.987 [DEBUG] [Thread-24122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:01:47.035 [DEBUG] [Thread-24122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:01:47.035 [DEBUG] [Thread-24122] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:01:47.044 [DEBUG] [Thread-24122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:01:47.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:01:47.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')
2026-04-15T19:01:47.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
2026-04-15T19:01:47.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:01:47.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:01:47.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:01:47.080 [DEBUG] [Thread-24122] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:01:49.953 [DEBUG] [Thread-24124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:01:54.789 [DEBUG] [Thread-24125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:02:05.001 [DEBUG] [Thread-24126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:02:17.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:02:17.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:02:17.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
2026-04-15T19:02:18.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 2, 7), 4.55947, 73.0236, 0.0, 15.1045, 10.3564, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:02:18.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:02:07
2026-04-15T19:02:18.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:02:18.975 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:02:18.976 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:02:19.267 [DEBUG] [Thread-24127] [transport.py] [_log()] starting thread (client mode): 0xf13e0730
2026-04-15T19:02:19.267 [DEBUG] [Thread-24127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:02:19.287 [DEBUG] [Thread-24127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:02:19.287 [INFO] [Thread-24127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:02:19.290 [DEBUG] [Thread-24127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:02:19.290 [DEBUG] [Thread-24127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:02:19.290 [DEBUG] [Thread-24127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:02:19.291 [DEBUG] [Thread-24127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:02:19.291 [DEBUG] [Thread-24127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:02:19.291 [DEBUG] [Thread-24127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:02:19.291 [DEBUG] [Thread-24127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:02:19.291 [DEBUG] [Thread-24127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:02:19.291 [DEBUG] [Thread-24127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:02:19.291 [DEBUG] [Thread-24127] [transport.py] [_log()] client lang: <none>
2026-04-15T19:02:19.291 [DEBUG] [Thread-24127] [transport.py] [_log()] server lang: <none>
2026-04-15T19:02:19.291 [DEBUG] [Thread-24127] [transport.py] [_log()] kex follows: False
2026-04-15T19:02:19.292 [DEBUG] [Thread-24127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:02:19.292 [DEBUG] [Thread-24127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:02:19.292 [DEBUG] [Thread-24127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:02:19.292 [DEBUG] [Thread-24127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:02:19.292 [DEBUG] [Thread-24127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:02:19.292 [DEBUG] [Thread-24127] [transport.py] [_log()] Compression: none
2026-04-15T19:02:19.292 [DEBUG] [Thread-24127] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:02:19.310 [DEBUG] [Thread-24127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:02:19.310 [DEBUG] [Thread-24127] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:02:19.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:02:19.311 [DEBUG] [Thread-24127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:02:19.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:02:19.312 [DEBUG] [Thread-24127] [transport.py] [_log()] userauth is OK
2026-04-15T19:02:19.312 [DEBUG] [Thread-24127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:02:19.312 [DEBUG] [Thread-24127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:02:19.312 [DEBUG] [Thread-24127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:02:19.312 [DEBUG] [Thread-24127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:02:19.348 [INFO] [Thread-24127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:02:19.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:02:20.034 [DEBUG] [Thread-24129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:02:20.095 [DEBUG] [Thread-24127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:02:20.095 [DEBUG] [Thread-24127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:02:20.096 [DEBUG] [Thread-24127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:02:20.136 [DEBUG] [Thread-24127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:02:20.136 [DEBUG] [Thread-24127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:02:20.139 [DEBUG] [Thread-24127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:02:20.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:02:20.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:02:20.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:02:20.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:02:20.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:02:20.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:02:20.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:02:20.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:02:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:02:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.709508 -999.00  +10.40  15.38     77   +6.60 1 1 1 1 1     3    0 3.76 -3.99 ZNESW 14.2 15.4 292.6 17.5 11.3 -24.9 11.1 -23.7 10.8 -21.7 11.1 -23.5
2026-04-15T19:02:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:02:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:02:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.709508
2026-04-15T19:02:20.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:02:20.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:02:20.160 [DEBUG] [Thread-24127] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:02:20.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:02:20.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:02:20.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:02:20.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:02:07', tmtdew=4.55947, humidity=73.0236, cloud=0.0, wind=15.1045, temperature=10.3564, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:01:41.491', atlas_cloud=1, atlas_rain=1, zp_data=[-0.12675000000000125, -0.02474999999999916, -0.0727499999999992, -0.15549999999999997, -0.13449999999999918, -0.07724999999999937, -0.13400000000000034, -0.07074999999999854, -0.062000000000001165, -0.08999999999999986, -0.24875000000000114, -0.053000000000000824, -0.057000000000000384, -0.0807500000000001, -0.059499999999999886, 0.045999999999999375, -0.11175000000000068, 0.02999999999999936, -0.10500000000000043, -0.10625000000000107, -0.04650000000000176, -0.07525000000000048, -0.15174999999999983, -0.07124999999999915, -0.07699999999999996, -0.12349999999999994, -0.12124999999999986, -0.6854999999999993, -1.1899999999999995, -0.07199999999999918, 0.030000000000001137, 0.006000000000000227, 0.08474999999999966], zp_timestamp='2026-04-15T17:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:02:20.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:02:20.416 [DEBUG] [Thread-24131] [transport.py] [_log()] starting thread (client mode): 0xf13525c0
2026-04-15T19:02:20.416 [DEBUG] [Thread-24131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:02:20.431 [DEBUG] [Thread-24131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:02:20.431 [INFO] [Thread-24131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:02:20.438 [DEBUG] [Thread-24131] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:02:20.438 [DEBUG] [Thread-24131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:02:20.439 [DEBUG] [Thread-24131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:02:20.439 [DEBUG] [Thread-24131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:02:20.439 [DEBUG] [Thread-24131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:02:20.439 [DEBUG] [Thread-24131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:02:20.439 [DEBUG] [Thread-24131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:02:20.439 [DEBUG] [Thread-24131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:02:20.439 [DEBUG] [Thread-24131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:02:20.439 [DEBUG] [Thread-24131] [transport.py] [_log()] client lang: <none>
2026-04-15T19:02:20.439 [DEBUG] [Thread-24131] [transport.py] [_log()] server lang: <none>
2026-04-15T19:02:20.439 [DEBUG] [Thread-24131] [transport.py] [_log()] kex follows: False
2026-04-15T19:02:20.439 [DEBUG] [Thread-24131] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:02:20.439 [DEBUG] [Thread-24131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:02:20.440 [DEBUG] [Thread-24131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:02:20.440 [DEBUG] [Thread-24131] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:02:20.440 [DEBUG] [Thread-24131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:02:20.440 [DEBUG] [Thread-24131] [transport.py] [_log()] Compression: none
2026-04-15T19:02:20.440 [DEBUG] [Thread-24131] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:02:20.496 [DEBUG] [Thread-24131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:02:20.497 [DEBUG] [Thread-24131] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:02:20.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:02:20.497 [DEBUG] [Thread-24131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:02:20.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:02:20.553 [DEBUG] [Thread-24131] [transport.py] [_log()] userauth is OK
2026-04-15T19:02:20.554 [DEBUG] [Thread-24131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:02:20.554 [DEBUG] [Thread-24131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:02:20.554 [DEBUG] [Thread-24131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:02:20.554 [DEBUG] [Thread-24131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:02:20.579 [INFO] [Thread-24131] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:02:20.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:02:20.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:02:21.479 [DEBUG] [Thread-24131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:02:21.479 [DEBUG] [Thread-24131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:02:21.527 [DEBUG] [Thread-24131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:02:21.527 [DEBUG] [Thread-24131] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:02:21.536 [DEBUG] [Thread-24131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:02:21.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:02:21.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')
2026-04-15T19:02:21.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
2026-04-15T19:02:21.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:02:21.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:02:21.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:02:21.572 [DEBUG] [Thread-24131] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:02:35.068 [DEBUG] [Thread-24133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:02:50.114 [DEBUG] [Thread-24134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:02:51.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:02:51.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:02:51.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T19:02:52.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 2, 42), 4.58955, 73.2135, 0.0, 16.2677, 10.7128, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:02:52.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:02:42
2026-04-15T19:02:53.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:02:53.709 [DEBUG] [Thread-24135] [transport.py] [_log()] starting thread (client mode): 0xf13e3f10
2026-04-15T19:02:53.709 [DEBUG] [Thread-24135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:02:53.729 [DEBUG] [Thread-24135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:02:53.729 [INFO] [Thread-24135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:02:53.733 [DEBUG] [Thread-24135] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:02:53.733 [DEBUG] [Thread-24135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:02:53.733 [DEBUG] [Thread-24135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:02:53.733 [DEBUG] [Thread-24135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:02:53.733 [DEBUG] [Thread-24135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:02:53.733 [DEBUG] [Thread-24135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:02:53.733 [DEBUG] [Thread-24135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:02:53.733 [DEBUG] [Thread-24135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:02:53.733 [DEBUG] [Thread-24135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:02:53.733 [DEBUG] [Thread-24135] [transport.py] [_log()] client lang: <none>
2026-04-15T19:02:53.733 [DEBUG] [Thread-24135] [transport.py] [_log()] server lang: <none>
2026-04-15T19:02:53.734 [DEBUG] [Thread-24135] [transport.py] [_log()] kex follows: False
2026-04-15T19:02:53.734 [DEBUG] [Thread-24135] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:02:53.734 [DEBUG] [Thread-24135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:02:53.734 [DEBUG] [Thread-24135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:02:53.734 [DEBUG] [Thread-24135] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:02:53.734 [DEBUG] [Thread-24135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:02:53.734 [DEBUG] [Thread-24135] [transport.py] [_log()] Compression: none
2026-04-15T19:02:53.734 [DEBUG] [Thread-24135] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:02:53.750 [DEBUG] [Thread-24135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:02:53.751 [DEBUG] [Thread-24135] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:02:53.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:02:53.751 [DEBUG] [Thread-24135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:02:53.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:02:53.752 [DEBUG] [Thread-24135] [transport.py] [_log()] userauth is OK
2026-04-15T19:02:53.752 [DEBUG] [Thread-24135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:02:53.753 [DEBUG] [Thread-24135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:02:53.753 [DEBUG] [Thread-24135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:02:53.753 [DEBUG] [Thread-24135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:02:53.773 [INFO] [Thread-24135] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:02:53.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:02:54.525 [DEBUG] [Thread-24135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:02:54.525 [DEBUG] [Thread-24135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:02:54.526 [DEBUG] [Thread-24135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:02:54.566 [DEBUG] [Thread-24135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:02:54.566 [DEBUG] [Thread-24135] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:02:54.569 [DEBUG] [Thread-24135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:02:54.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:02:54.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:02:54.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:02:54.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:02:54.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:02:54.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:02:54.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:02:54.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:02:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:02:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.709856 -999.00  +10.40  14.43     77   +6.60 1 1 1 1 1     3    0 3.78 -4.17 ZNESW 16.1 14.4 299.4 16.3 11.3 -24.8 11.1 -23.7 10.7 -21.4 11.1 -23.7
2026-04-15T19:02:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:02:54.592 [DEBUG] [Thread-24135] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:02:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:02:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.709856
2026-04-15T19:02:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:02:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:02:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:02:54.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:02:54.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:02:54.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:02:42', tmtdew=4.58955, humidity=73.2135, cloud=0.0, wind=16.2677, temperature=10.7128, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:02:11.558', atlas_cloud=1, atlas_rain=1, zp_data=[-0.12675000000000125, -0.02474999999999916, -0.0727499999999992, -0.15549999999999997, -0.13449999999999918, -0.07724999999999937, -0.13400000000000034, -0.07074999999999854, -0.062000000000001165, -0.08999999999999986, -0.24875000000000114, -0.053000000000000824, -0.057000000000000384, -0.0807500000000001, -0.059499999999999886, 0.045999999999999375, -0.11175000000000068, 0.02999999999999936, -0.10500000000000043, -0.10625000000000107, -0.04650000000000176, -0.07525000000000048, -0.15174999999999983, -0.07124999999999915, -0.07699999999999996, -0.12349999999999994, -0.12124999999999986, -0.6854999999999993, -1.1899999999999995, -0.07199999999999918, 0.030000000000001137, 0.006000000000000227, 0.08474999999999966], zp_timestamp='2026-04-15T17:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:02:54.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:02:54.851 [DEBUG] [Thread-24138] [transport.py] [_log()] starting thread (client mode): 0xf13e2bc0
2026-04-15T19:02:54.851 [DEBUG] [Thread-24138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:02:54.866 [DEBUG] [Thread-24138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:02:54.866 [INFO] [Thread-24138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:02:54.873 [DEBUG] [Thread-24138] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:02:54.873 [DEBUG] [Thread-24138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:02:54.873 [DEBUG] [Thread-24138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:02:54.873 [DEBUG] [Thread-24138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:02:54.873 [DEBUG] [Thread-24138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:02:54.874 [DEBUG] [Thread-24138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:02:54.874 [DEBUG] [Thread-24138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:02:54.874 [DEBUG] [Thread-24138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:02:54.874 [DEBUG] [Thread-24138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:02:54.874 [DEBUG] [Thread-24138] [transport.py] [_log()] client lang: <none>
2026-04-15T19:02:54.874 [DEBUG] [Thread-24138] [transport.py] [_log()] server lang: <none>
2026-04-15T19:02:54.874 [DEBUG] [Thread-24138] [transport.py] [_log()] kex follows: False
2026-04-15T19:02:54.874 [DEBUG] [Thread-24138] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:02:54.874 [DEBUG] [Thread-24138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:02:54.874 [DEBUG] [Thread-24138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:02:54.874 [DEBUG] [Thread-24138] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:02:54.874 [DEBUG] [Thread-24138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:02:54.874 [DEBUG] [Thread-24138] [transport.py] [_log()] Compression: none
2026-04-15T19:02:54.874 [DEBUG] [Thread-24138] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:02:54.931 [DEBUG] [Thread-24138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:02:54.932 [DEBUG] [Thread-24138] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:02:54.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:02:54.932 [DEBUG] [Thread-24138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:02:54.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:02:54.933 [DEBUG] [Thread-24140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:02:54.989 [DEBUG] [Thread-24138] [transport.py] [_log()] userauth is OK
2026-04-15T19:02:54.989 [DEBUG] [Thread-24138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:02:54.989 [DEBUG] [Thread-24138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:02:54.989 [DEBUG] [Thread-24138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:02:54.989 [DEBUG] [Thread-24138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:02:55.015 [INFO] [Thread-24138] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:02:55.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:02:55.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:02:55.836 [DEBUG] [Thread-24138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:02:55.836 [DEBUG] [Thread-24138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:02:55.884 [DEBUG] [Thread-24138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:02:55.884 [DEBUG] [Thread-24138] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:02:55.893 [DEBUG] [Thread-24138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:02:55.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:02:55.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')
2026-04-15T19:02:55.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
2026-04-15T19:02:55.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:02:55.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:02:55.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:02:55.927 [DEBUG] [Thread-24138] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:03:05.146 [DEBUG] [Thread-24141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:03:19.176 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:03:19.178 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:03:20.193 [DEBUG] [Thread-24142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:03:25.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:03:25.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:03:25.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T19:03:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 3, 18), 4.58378, 73.1565, 0.0, 15.2633, 10.3732, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:03:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:03:18
2026-04-15T19:03:27.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:03:28.093 [DEBUG] [Thread-24143] [transport.py] [_log()] starting thread (client mode): 0xf13e2fe0
2026-04-15T19:03:28.093 [DEBUG] [Thread-24143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:03:28.113 [DEBUG] [Thread-24143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:03:28.113 [INFO] [Thread-24143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:03:28.117 [DEBUG] [Thread-24143] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:03:28.117 [DEBUG] [Thread-24143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:03:28.117 [DEBUG] [Thread-24143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:03:28.117 [DEBUG] [Thread-24143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:03:28.117 [DEBUG] [Thread-24143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:03:28.117 [DEBUG] [Thread-24143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:03:28.117 [DEBUG] [Thread-24143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:03:28.117 [DEBUG] [Thread-24143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:03:28.117 [DEBUG] [Thread-24143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:03:28.117 [DEBUG] [Thread-24143] [transport.py] [_log()] client lang: <none>
2026-04-15T19:03:28.117 [DEBUG] [Thread-24143] [transport.py] [_log()] server lang: <none>
2026-04-15T19:03:28.117 [DEBUG] [Thread-24143] [transport.py] [_log()] kex follows: False
2026-04-15T19:03:28.117 [DEBUG] [Thread-24143] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:03:28.118 [DEBUG] [Thread-24143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:03:28.118 [DEBUG] [Thread-24143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:03:28.118 [DEBUG] [Thread-24143] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:03:28.118 [DEBUG] [Thread-24143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:03:28.118 [DEBUG] [Thread-24143] [transport.py] [_log()] Compression: none
2026-04-15T19:03:28.118 [DEBUG] [Thread-24143] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:03:28.135 [DEBUG] [Thread-24143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:03:28.135 [DEBUG] [Thread-24143] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:03:28.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:03:28.136 [DEBUG] [Thread-24143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:03:28.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:03:28.137 [DEBUG] [Thread-24143] [transport.py] [_log()] userauth is OK
2026-04-15T19:03:28.138 [DEBUG] [Thread-24143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:03:28.138 [DEBUG] [Thread-24143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:03:28.138 [DEBUG] [Thread-24143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:03:28.138 [DEBUG] [Thread-24143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:03:28.157 [INFO] [Thread-24143] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:03:28.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:03:28.940 [DEBUG] [Thread-24143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:03:28.941 [DEBUG] [Thread-24143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:03:28.941 [DEBUG] [Thread-24143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:03:28.981 [DEBUG] [Thread-24143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:03:28.982 [DEBUG] [Thread-24143] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:03:28.985 [DEBUG] [Thread-24143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:03:28.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:03:28.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:03:29.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:03:29.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:03:29.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:03:29.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:03:29.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:03:29.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:03:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:03:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.710203 -999.00  +10.40  14.83     77   +6.60 1 1 1 1 1     2    0 3.77 -3.73 ZNESW 16.3 14.8 290.8 18.6 11.2 -24.9 11.1 -23.7 10.8 -21.5 11.0 -23.6
2026-04-15T19:03:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:03:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:03:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.710203
2026-04-15T19:03:29.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:03:29.013 [DEBUG] [Thread-24143] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:03:29.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:03:29.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:03:29.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:03:29.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:03:29.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:03:18', tmtdew=4.58378, humidity=73.1565, cloud=0.0, wind=15.2633, temperature=10.3732, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:02:41.539', atlas_cloud=1, atlas_rain=1, zp_data=[-0.12675000000000125, -0.02474999999999916, -0.0727499999999992, -0.15549999999999997, -0.13449999999999918, -0.07724999999999937, -0.13400000000000034, -0.07074999999999854, -0.062000000000001165, -0.08999999999999986, -0.24875000000000114, -0.053000000000000824, -0.057000000000000384, -0.0807500000000001, -0.059499999999999886, 0.045999999999999375, -0.11175000000000068, 0.02999999999999936, -0.10500000000000043, -0.10625000000000107, -0.04650000000000176, -0.07525000000000048, -0.15174999999999983, -0.07124999999999915, -0.07699999999999996, -0.12349999999999994, -0.12124999999999986, -0.6854999999999993, -1.1899999999999995, -0.07199999999999918, 0.030000000000001137, 0.006000000000000227, 0.08474999999999966], zp_timestamp='2026-04-15T17:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:03:29.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:03:29.273 [DEBUG] [Thread-24146] [transport.py] [_log()] starting thread (client mode): 0xf1353c70
2026-04-15T19:03:29.273 [DEBUG] [Thread-24146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:03:29.287 [DEBUG] [Thread-24146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:03:29.287 [INFO] [Thread-24146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:03:29.294 [DEBUG] [Thread-24146] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:03:29.294 [DEBUG] [Thread-24146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:03:29.295 [DEBUG] [Thread-24146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:03:29.295 [DEBUG] [Thread-24146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:03:29.295 [DEBUG] [Thread-24146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:03:29.295 [DEBUG] [Thread-24146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:03:29.295 [DEBUG] [Thread-24146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:03:29.295 [DEBUG] [Thread-24146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:03:29.295 [DEBUG] [Thread-24146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:03:29.295 [DEBUG] [Thread-24146] [transport.py] [_log()] client lang: <none>
2026-04-15T19:03:29.295 [DEBUG] [Thread-24146] [transport.py] [_log()] server lang: <none>
2026-04-15T19:03:29.295 [DEBUG] [Thread-24146] [transport.py] [_log()] kex follows: False
2026-04-15T19:03:29.295 [DEBUG] [Thread-24146] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:03:29.295 [DEBUG] [Thread-24146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:03:29.296 [DEBUG] [Thread-24146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:03:29.296 [DEBUG] [Thread-24146] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:03:29.296 [DEBUG] [Thread-24146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:03:29.296 [DEBUG] [Thread-24146] [transport.py] [_log()] Compression: none
2026-04-15T19:03:29.296 [DEBUG] [Thread-24146] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:03:29.351 [DEBUG] [Thread-24146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:03:29.351 [DEBUG] [Thread-24146] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:03:29.352 [DEBUG] [Thread-24146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:03:29.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:03:29.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:03:29.408 [DEBUG] [Thread-24146] [transport.py] [_log()] userauth is OK
2026-04-15T19:03:29.409 [DEBUG] [Thread-24146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:03:29.409 [DEBUG] [Thread-24146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:03:29.409 [DEBUG] [Thread-24146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:03:29.409 [DEBUG] [Thread-24146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:03:29.434 [INFO] [Thread-24146] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:03:29.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:03:29.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:03:30.234 [DEBUG] [Thread-24146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:03:30.234 [DEBUG] [Thread-24146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:03:30.282 [DEBUG] [Thread-24146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:03:30.282 [DEBUG] [Thread-24146] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:03:30.291 [DEBUG] [Thread-24146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:03:30.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:03:30.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')
2026-04-15T19:03:30.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
2026-04-15T19:03:30.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:03:30.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:03:30.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:03:30.329 [DEBUG] [Thread-24146] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:03:35.225 [DEBUG] [Thread-24148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:03:50.270 [DEBUG] [Thread-24149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:03:55.080 [DEBUG] [Thread-24150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:04:00.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:04:00.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:04:00.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T19:04:01.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 3, 53), 4.57943, 73.2471, 0.0, 15.174, 10.6137, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:04:01.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:03:53
2026-04-15T19:04:02.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:04:02.477 [DEBUG] [Thread-24151] [transport.py] [_log()] starting thread (client mode): 0xf13e14b0
2026-04-15T19:04:02.477 [DEBUG] [Thread-24151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:04:02.496 [DEBUG] [Thread-24151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:04:02.496 [INFO] [Thread-24151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:04:02.499 [DEBUG] [Thread-24151] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:04:02.499 [DEBUG] [Thread-24151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:04:02.499 [DEBUG] [Thread-24151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:04:02.500 [DEBUG] [Thread-24151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:04:02.500 [DEBUG] [Thread-24151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:04:02.500 [DEBUG] [Thread-24151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:04:02.500 [DEBUG] [Thread-24151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:04:02.500 [DEBUG] [Thread-24151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:04:02.500 [DEBUG] [Thread-24151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:04:02.500 [DEBUG] [Thread-24151] [transport.py] [_log()] client lang: <none>
2026-04-15T19:04:02.500 [DEBUG] [Thread-24151] [transport.py] [_log()] server lang: <none>
2026-04-15T19:04:02.500 [DEBUG] [Thread-24151] [transport.py] [_log()] kex follows: False
2026-04-15T19:04:02.500 [DEBUG] [Thread-24151] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:04:02.500 [DEBUG] [Thread-24151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:04:02.500 [DEBUG] [Thread-24151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:04:02.501 [DEBUG] [Thread-24151] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:04:02.501 [DEBUG] [Thread-24151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:04:02.501 [DEBUG] [Thread-24151] [transport.py] [_log()] Compression: none
2026-04-15T19:04:02.501 [DEBUG] [Thread-24151] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:04:02.517 [DEBUG] [Thread-24151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:04:02.518 [DEBUG] [Thread-24151] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:04:02.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:04:02.518 [DEBUG] [Thread-24151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:04:02.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:04:02.519 [DEBUG] [Thread-24151] [transport.py] [_log()] userauth is OK
2026-04-15T19:04:02.519 [DEBUG] [Thread-24151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:04:02.520 [DEBUG] [Thread-24151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:04:02.520 [DEBUG] [Thread-24151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:04:02.520 [DEBUG] [Thread-24151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:04:02.544 [INFO] [Thread-24151] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:04:02.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:04:03.348 [DEBUG] [Thread-24151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:04:03.348 [DEBUG] [Thread-24151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:04:03.349 [DEBUG] [Thread-24151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:04:03.389 [DEBUG] [Thread-24151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:04:03.389 [DEBUG] [Thread-24151] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:04:03.392 [DEBUG] [Thread-24151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:04:03.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:04:03.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:04:03.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:04:03.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:04:03.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:04:03.410 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:04:03.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:04:03.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:04:03.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:04:03.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.710550 -999.00  +10.40  13.59     77   +6.60 1 1 1 1 1     2    0 3.81 -3.99 ZNESW 13.0 13.6 295.2 16.9 11.2 -24.9 11.1 -23.8 10.8 -21.5 11.1 -23.7
2026-04-15T19:04:03.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:04:03.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:04:03.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.710550
2026-04-15T19:04:03.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:04:03.413 [DEBUG] [Thread-24151] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:04:03.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:04:03.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:04:03.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:04:03.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:04:03.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:03:53', tmtdew=4.57943, humidity=73.2471, cloud=0.0, wind=15.174, temperature=10.6137, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:03:11.520', atlas_cloud=1, atlas_rain=1, zp_data=[-0.12675000000000125, -0.02474999999999916, -0.0727499999999992, -0.15549999999999997, -0.13449999999999918, -0.07724999999999937, -0.13400000000000034, -0.07074999999999854, -0.062000000000001165, -0.08999999999999986, -0.24875000000000114, -0.053000000000000824, -0.057000000000000384, -0.0807500000000001, -0.059499999999999886, 0.045999999999999375, -0.11175000000000068, 0.02999999999999936, -0.10500000000000043, -0.10625000000000107, -0.04650000000000176, -0.07525000000000048, -0.15174999999999983, -0.07124999999999915, -0.07699999999999996, -0.12349999999999994, -0.12124999999999986, -0.6854999999999993, -1.1899999999999995, -0.07199999999999918, 0.030000000000001137, 0.006000000000000227, 0.08474999999999966], zp_timestamp='2026-04-15T17:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:04:03.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:04:03.676 [DEBUG] [Thread-24154] [transport.py] [_log()] starting thread (client mode): 0xf13e3730
2026-04-15T19:04:03.676 [DEBUG] [Thread-24154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:04:03.690 [DEBUG] [Thread-24154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:04:03.690 [INFO] [Thread-24154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:04:03.697 [DEBUG] [Thread-24154] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:04:03.697 [DEBUG] [Thread-24154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:04:03.697 [DEBUG] [Thread-24154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:04:03.697 [DEBUG] [Thread-24154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:04:03.698 [DEBUG] [Thread-24154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:04:03.698 [DEBUG] [Thread-24154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:04:03.698 [DEBUG] [Thread-24154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:04:03.698 [DEBUG] [Thread-24154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:04:03.698 [DEBUG] [Thread-24154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:04:03.698 [DEBUG] [Thread-24154] [transport.py] [_log()] client lang: <none>
2026-04-15T19:04:03.698 [DEBUG] [Thread-24154] [transport.py] [_log()] server lang: <none>
2026-04-15T19:04:03.698 [DEBUG] [Thread-24154] [transport.py] [_log()] kex follows: False
2026-04-15T19:04:03.698 [DEBUG] [Thread-24154] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:04:03.698 [DEBUG] [Thread-24154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:04:03.698 [DEBUG] [Thread-24154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:04:03.699 [DEBUG] [Thread-24154] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:04:03.699 [DEBUG] [Thread-24154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:04:03.699 [DEBUG] [Thread-24154] [transport.py] [_log()] Compression: none
2026-04-15T19:04:03.699 [DEBUG] [Thread-24154] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:04:03.755 [DEBUG] [Thread-24154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:04:03.756 [DEBUG] [Thread-24154] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:04:03.756 [DEBUG] [Thread-24154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:04:03.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:04:03.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:04:03.812 [DEBUG] [Thread-24154] [transport.py] [_log()] userauth is OK
2026-04-15T19:04:03.812 [DEBUG] [Thread-24154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:04:03.812 [DEBUG] [Thread-24154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:04:03.813 [DEBUG] [Thread-24154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:04:03.813 [DEBUG] [Thread-24154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:04:03.839 [INFO] [Thread-24154] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:04:03.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:04:03.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:04:04.713 [DEBUG] [Thread-24154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:04:04.713 [DEBUG] [Thread-24154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:04:04.761 [DEBUG] [Thread-24154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:04:04.761 [DEBUG] [Thread-24154] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:04:04.770 [DEBUG] [Thread-24154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:04:04.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:04:04.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')
2026-04-15T19:04:04.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
2026-04-15T19:04:04.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:04:04.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:04:04.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:04:04.805 [DEBUG] [Thread-24154] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:04:05.303 [DEBUG] [Thread-24156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:04:19.379 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:04:19.380 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:04:20.350 [DEBUG] [Thread-24157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:04:34.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:04:34.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:04:34.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
2026-04-15T19:04:35.382 [DEBUG] [Thread-24158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:04:36.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 3, 53), 4.57943, 73.2471, 0.0, 15.174, 10.6137, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:04:36.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:03:53
2026-04-15T19:04:36.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:04:36.919 [DEBUG] [Thread-24159] [transport.py] [_log()] starting thread (client mode): 0xee90e3e0
2026-04-15T19:04:36.919 [DEBUG] [Thread-24159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:04:36.939 [DEBUG] [Thread-24159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:04:36.939 [INFO] [Thread-24159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:04:36.943 [DEBUG] [Thread-24159] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:04:36.943 [DEBUG] [Thread-24159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:04:36.943 [DEBUG] [Thread-24159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:04:36.943 [DEBUG] [Thread-24159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:04:36.943 [DEBUG] [Thread-24159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:04:36.944 [DEBUG] [Thread-24159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:04:36.944 [DEBUG] [Thread-24159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:04:36.944 [DEBUG] [Thread-24159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:04:36.944 [DEBUG] [Thread-24159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:04:36.944 [DEBUG] [Thread-24159] [transport.py] [_log()] client lang: <none>
2026-04-15T19:04:36.944 [DEBUG] [Thread-24159] [transport.py] [_log()] server lang: <none>
2026-04-15T19:04:36.944 [DEBUG] [Thread-24159] [transport.py] [_log()] kex follows: False
2026-04-15T19:04:36.944 [DEBUG] [Thread-24159] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:04:36.944 [DEBUG] [Thread-24159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:04:36.944 [DEBUG] [Thread-24159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:04:36.944 [DEBUG] [Thread-24159] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:04:36.945 [DEBUG] [Thread-24159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:04:36.945 [DEBUG] [Thread-24159] [transport.py] [_log()] Compression: none
2026-04-15T19:04:36.945 [DEBUG] [Thread-24159] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:04:36.963 [DEBUG] [Thread-24159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:04:36.964 [DEBUG] [Thread-24159] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:04:36.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:04:36.964 [DEBUG] [Thread-24159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:04:36.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:04:36.965 [DEBUG] [Thread-24159] [transport.py] [_log()] userauth is OK
2026-04-15T19:04:36.966 [DEBUG] [Thread-24159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:04:36.966 [DEBUG] [Thread-24159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:04:36.966 [DEBUG] [Thread-24159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:04:36.966 [DEBUG] [Thread-24159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:04:36.984 [INFO] [Thread-24159] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:04:36.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:04:37.777 [DEBUG] [Thread-24159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:04:37.777 [DEBUG] [Thread-24159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:04:37.778 [DEBUG] [Thread-24159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:04:37.818 [DEBUG] [Thread-24159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:04:37.818 [DEBUG] [Thread-24159] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:04:37.821 [DEBUG] [Thread-24159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:04:37.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:04:37.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:04:37.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:04:37.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:04:37.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:04:37.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:04:37.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:04:37.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:04:37.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:04:37.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.710897 -999.00  +10.40  13.33     77   +6.60 1 1 1 1 1     2    0 3.79 -4.32 ZNESW 15.7 13.3 299.2 15.6 11.2 -24.9 11.1 -23.7 10.8 -21.5 11.1 -23.7
2026-04-15T19:04:37.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:04:37.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:04:37.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.710897
2026-04-15T19:04:37.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:04:37.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:04:37.845 [DEBUG] [Thread-24159] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:04:37.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:04:37.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:04:37.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:04:37.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:03:53', tmtdew=4.57943, humidity=73.2471, cloud=0.0, wind=15.174, temperature=10.6137, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:03:41.501', atlas_cloud=1, atlas_rain=1, zp_data=[-0.12675000000000125, -0.02474999999999916, -0.0727499999999992, -0.15549999999999997, -0.13449999999999918, -0.07724999999999937, -0.13400000000000034, -0.07074999999999854, -0.062000000000001165, -0.08999999999999986, -0.24875000000000114, -0.053000000000000824, -0.057000000000000384, -0.0807500000000001, -0.059499999999999886, 0.045999999999999375, -0.11175000000000068, 0.02999999999999936, -0.10500000000000043, -0.10625000000000107, -0.04650000000000176, -0.07525000000000048, -0.15174999999999983, -0.07124999999999915, -0.07699999999999996, -0.12349999999999994, -0.12124999999999986, -0.6854999999999993, -1.1899999999999995, -0.07199999999999918, 0.030000000000001137, 0.006000000000000227, 0.08474999999999966], zp_timestamp='2026-04-15T17:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:04:38.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:04:38.101 [DEBUG] [Thread-24162] [transport.py] [_log()] starting thread (client mode): 0xf13e1150
2026-04-15T19:04:38.101 [DEBUG] [Thread-24162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:04:38.116 [DEBUG] [Thread-24162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:04:38.116 [INFO] [Thread-24162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:04:38.124 [DEBUG] [Thread-24162] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:04:38.124 [DEBUG] [Thread-24162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:04:38.124 [DEBUG] [Thread-24162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:04:38.124 [DEBUG] [Thread-24162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:04:38.125 [DEBUG] [Thread-24162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:04:38.125 [DEBUG] [Thread-24162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:04:38.125 [DEBUG] [Thread-24162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:04:38.125 [DEBUG] [Thread-24162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:04:38.125 [DEBUG] [Thread-24162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:04:38.125 [DEBUG] [Thread-24162] [transport.py] [_log()] client lang: <none>
2026-04-15T19:04:38.125 [DEBUG] [Thread-24162] [transport.py] [_log()] server lang: <none>
2026-04-15T19:04:38.125 [DEBUG] [Thread-24162] [transport.py] [_log()] kex follows: False
2026-04-15T19:04:38.125 [DEBUG] [Thread-24162] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:04:38.125 [DEBUG] [Thread-24162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:04:38.125 [DEBUG] [Thread-24162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:04:38.126 [DEBUG] [Thread-24162] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:04:38.126 [DEBUG] [Thread-24162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:04:38.126 [DEBUG] [Thread-24162] [transport.py] [_log()] Compression: none
2026-04-15T19:04:38.126 [DEBUG] [Thread-24162] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:04:38.183 [DEBUG] [Thread-24162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:04:38.184 [DEBUG] [Thread-24162] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:04:38.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:04:38.184 [DEBUG] [Thread-24162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:04:38.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:04:38.239 [DEBUG] [Thread-24162] [transport.py] [_log()] userauth is OK
2026-04-15T19:04:38.240 [DEBUG] [Thread-24162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:04:38.240 [DEBUG] [Thread-24162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:04:38.240 [DEBUG] [Thread-24162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:04:38.240 [DEBUG] [Thread-24162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:04:38.266 [INFO] [Thread-24162] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:04:38.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:04:38.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:04:39.141 [DEBUG] [Thread-24162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:04:39.141 [DEBUG] [Thread-24162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:04:39.189 [DEBUG] [Thread-24162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:04:39.189 [DEBUG] [Thread-24162] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:04:39.198 [DEBUG] [Thread-24162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:04:39.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:04:39.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')
2026-04-15T19:04:39.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') -> 00000000
2026-04-15T19:04:39.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:04:39.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:04:39.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:04:39.233 [DEBUG] [Thread-24162] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:04:50.414 [DEBUG] [Thread-24164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:04:55.240 [DEBUG] [Thread-24165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:05:05.466 [DEBUG] [Thread-24166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:05:09.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:05:09.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:05:09.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
2026-04-15T19:05:10.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 4, 29), 4.58644, 73.1401, 0.0, 15.2104, 10.3568, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:05:10.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:04:29
2026-04-15T19:05:11.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:05:11.510 [DEBUG] [Thread-24167] [transport.py] [_log()] starting thread (client mode): 0xf13501c0
2026-04-15T19:05:11.510 [DEBUG] [Thread-24167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:05:11.530 [DEBUG] [Thread-24167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:05:11.530 [INFO] [Thread-24167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:05:11.533 [DEBUG] [Thread-24167] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:05:11.533 [DEBUG] [Thread-24167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:05:11.533 [DEBUG] [Thread-24167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:05:11.533 [DEBUG] [Thread-24167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:05:11.533 [DEBUG] [Thread-24167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:05:11.534 [DEBUG] [Thread-24167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:05:11.534 [DEBUG] [Thread-24167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:05:11.534 [DEBUG] [Thread-24167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:05:11.534 [DEBUG] [Thread-24167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:05:11.534 [DEBUG] [Thread-24167] [transport.py] [_log()] client lang: <none>
2026-04-15T19:05:11.534 [DEBUG] [Thread-24167] [transport.py] [_log()] server lang: <none>
2026-04-15T19:05:11.534 [DEBUG] [Thread-24167] [transport.py] [_log()] kex follows: False
2026-04-15T19:05:11.534 [DEBUG] [Thread-24167] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:05:11.534 [DEBUG] [Thread-24167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:05:11.534 [DEBUG] [Thread-24167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:05:11.534 [DEBUG] [Thread-24167] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:05:11.535 [DEBUG] [Thread-24167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:05:11.535 [DEBUG] [Thread-24167] [transport.py] [_log()] Compression: none
2026-04-15T19:05:11.535 [DEBUG] [Thread-24167] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:05:11.552 [DEBUG] [Thread-24167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:05:11.552 [DEBUG] [Thread-24167] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:05:11.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:05:11.553 [DEBUG] [Thread-24167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:05:11.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:05:11.554 [DEBUG] [Thread-24167] [transport.py] [_log()] userauth is OK
2026-04-15T19:05:11.554 [DEBUG] [Thread-24167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:05:11.554 [DEBUG] [Thread-24167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:05:11.554 [DEBUG] [Thread-24167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:05:11.554 [DEBUG] [Thread-24167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:05:11.588 [INFO] [Thread-24167] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:05:11.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:05:13.493 [DEBUG] [Thread-24167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:05:13.493 [DEBUG] [Thread-24167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:05:13.494 [DEBUG] [Thread-24167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:05:13.534 [DEBUG] [Thread-24167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:05:13.534 [DEBUG] [Thread-24167] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:05:13.537 [DEBUG] [Thread-24167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:05:13.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:05:13.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:05:13.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:05:13.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:05:13.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:05:13.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:05:13.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:05:13.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:05:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:05:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.711245 -999.00  +10.40  12.92     77   +6.60 1 1 1 1 1     2    0 3.74 -4.81 ZNESW 13.2 12.9 299.0 17.0 11.2 -24.9 11.1 -23.7 10.8 -21.6 11.1 -23.8
2026-04-15T19:05:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:05:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:05:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.711245
2026-04-15T19:05:13.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:05:13.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:05:13.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:05:13.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:05:13.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:05:13.609 [DEBUG] [Thread-24167] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:05:13.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:04:29', tmtdew=4.58644, humidity=73.1401, cloud=0.0, wind=15.2104, temperature=10.3568, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:04:11.568', atlas_cloud=1, atlas_rain=1, zp_data=[-0.12675000000000125, -0.02474999999999916, -0.0727499999999992, -0.15549999999999997, -0.13449999999999918, -0.07724999999999937, -0.13400000000000034, -0.07074999999999854, -0.062000000000001165, -0.08999999999999986, -0.24875000000000114, -0.053000000000000824, -0.057000000000000384, -0.0807500000000001, -0.059499999999999886, 0.045999999999999375, -0.11175000000000068, 0.02999999999999936, -0.10500000000000043, -0.10625000000000107, -0.04650000000000176, -0.07525000000000048, -0.15174999999999983, -0.07124999999999915, -0.07699999999999996, -0.12349999999999994, -0.12124999999999986, -0.6854999999999993, -1.1899999999999995, -0.07199999999999918, 0.030000000000001137, 0.006000000000000227, 0.08474999999999966], zp_timestamp='2026-04-15T17:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:05:13.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:05:13.868 [DEBUG] [Thread-24170] [transport.py] [_log()] starting thread (client mode): 0xee9042b0
2026-04-15T19:05:13.868 [DEBUG] [Thread-24170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:05:13.884 [DEBUG] [Thread-24170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:05:13.885 [INFO] [Thread-24170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:05:13.892 [DEBUG] [Thread-24170] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:05:13.892 [DEBUG] [Thread-24170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:05:13.892 [DEBUG] [Thread-24170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:05:13.892 [DEBUG] [Thread-24170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:05:13.892 [DEBUG] [Thread-24170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:05:13.892 [DEBUG] [Thread-24170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:05:13.892 [DEBUG] [Thread-24170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:05:13.892 [DEBUG] [Thread-24170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:05:13.892 [DEBUG] [Thread-24170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:05:13.892 [DEBUG] [Thread-24170] [transport.py] [_log()] client lang: <none>
2026-04-15T19:05:13.892 [DEBUG] [Thread-24170] [transport.py] [_log()] server lang: <none>
2026-04-15T19:05:13.892 [DEBUG] [Thread-24170] [transport.py] [_log()] kex follows: False
2026-04-15T19:05:13.893 [DEBUG] [Thread-24170] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:05:13.893 [DEBUG] [Thread-24170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:05:13.893 [DEBUG] [Thread-24170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:05:13.893 [DEBUG] [Thread-24170] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:05:13.893 [DEBUG] [Thread-24170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:05:13.893 [DEBUG] [Thread-24170] [transport.py] [_log()] Compression: none
2026-04-15T19:05:13.893 [DEBUG] [Thread-24170] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:05:13.950 [DEBUG] [Thread-24170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:05:13.951 [DEBUG] [Thread-24170] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:05:13.951 [DEBUG] [Thread-24170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:05:13.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:05:13.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:05:14.007 [DEBUG] [Thread-24170] [transport.py] [_log()] userauth is OK
2026-04-15T19:05:14.007 [DEBUG] [Thread-24170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:05:14.007 [DEBUG] [Thread-24170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:05:14.007 [DEBUG] [Thread-24170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:05:14.007 [DEBUG] [Thread-24170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:05:14.031 [INFO] [Thread-24170] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:05:14.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:05:14.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:05:14.895 [DEBUG] [Thread-24170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:05:14.895 [DEBUG] [Thread-24170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:05:14.943 [DEBUG] [Thread-24170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:05:14.944 [DEBUG] [Thread-24170] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:05:14.954 [DEBUG] [Thread-24170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:05:14.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:05:14.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')
2026-04-15T19:05:14.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
2026-04-15T19:05:14.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:05:14.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:05:14.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:05:14.990 [DEBUG] [Thread-24170] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:05:19.582 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:05:19.583 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:05:20.497 [DEBUG] [Thread-24172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:05:35.543 [DEBUG] [Thread-24173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:05:44.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:05:44.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:05:44.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T19:05:46.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 5, 5), 4.56794, 73.2397, 0.0, 14.8223, 10.3901, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:05:46.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:05:05
2026-04-15T19:05:46.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:05:47.100 [DEBUG] [Thread-24174] [transport.py] [_log()] starting thread (client mode): 0xf1350be0
2026-04-15T19:05:47.100 [DEBUG] [Thread-24174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:05:47.119 [DEBUG] [Thread-24174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:05:47.119 [INFO] [Thread-24174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:05:47.122 [DEBUG] [Thread-24174] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:05:47.122 [DEBUG] [Thread-24174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:05:47.122 [DEBUG] [Thread-24174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:05:47.122 [DEBUG] [Thread-24174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:05:47.122 [DEBUG] [Thread-24174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:05:47.122 [DEBUG] [Thread-24174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:05:47.122 [DEBUG] [Thread-24174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:05:47.123 [DEBUG] [Thread-24174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:05:47.123 [DEBUG] [Thread-24174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:05:47.123 [DEBUG] [Thread-24174] [transport.py] [_log()] client lang: <none>
2026-04-15T19:05:47.123 [DEBUG] [Thread-24174] [transport.py] [_log()] server lang: <none>
2026-04-15T19:05:47.123 [DEBUG] [Thread-24174] [transport.py] [_log()] kex follows: False
2026-04-15T19:05:47.123 [DEBUG] [Thread-24174] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:05:47.123 [DEBUG] [Thread-24174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:05:47.123 [DEBUG] [Thread-24174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:05:47.123 [DEBUG] [Thread-24174] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:05:47.123 [DEBUG] [Thread-24174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:05:47.123 [DEBUG] [Thread-24174] [transport.py] [_log()] Compression: none
2026-04-15T19:05:47.124 [DEBUG] [Thread-24174] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:05:47.140 [DEBUG] [Thread-24174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:05:47.141 [DEBUG] [Thread-24174] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:05:47.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:05:47.141 [DEBUG] [Thread-24174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:05:47.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:05:47.142 [DEBUG] [Thread-24174] [transport.py] [_log()] userauth is OK
2026-04-15T19:05:47.143 [DEBUG] [Thread-24174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:05:47.143 [DEBUG] [Thread-24174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:05:47.143 [DEBUG] [Thread-24174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:05:47.143 [DEBUG] [Thread-24174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:05:47.161 [INFO] [Thread-24174] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:05:47.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:05:47.911 [DEBUG] [Thread-24174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:05:47.911 [DEBUG] [Thread-24174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:05:47.911 [DEBUG] [Thread-24174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:05:47.952 [DEBUG] [Thread-24174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:05:47.952 [DEBUG] [Thread-24174] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:05:47.955 [DEBUG] [Thread-24174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:05:47.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:05:47.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:05:47.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:05:47.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:05:47.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:05:47.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:05:47.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:05:47.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:05:47.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:05:47.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.711939 -999.00  +10.30  16.91     77   +6.60 1 1 1 1 1     1    0 3.72 -5.91 ZNESW 17.5 16.9 296.4 17.7 11.2 -24.8 11.0 -23.7 10.7 -21.6 11.0 -23.6
2026-04-15T19:05:47.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:05:47.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:05:47.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.711939
2026-04-15T19:05:47.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:05:47.978 [DEBUG] [Thread-24174] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:05:47.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:05:47.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:05:47.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:05:47.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:05:47.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:05:05', tmtdew=4.56794, humidity=73.2397, cloud=0.0, wind=14.8223, temperature=10.3901, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:05:11.530', atlas_cloud=1, atlas_rain=1, zp_data=[-0.12675000000000125, -0.02474999999999916, -0.0727499999999992, -0.15549999999999997, -0.13449999999999918, -0.07724999999999937, -0.13400000000000034, -0.07074999999999854, -0.062000000000001165, -0.08999999999999986, -0.24875000000000114, -0.053000000000000824, -0.057000000000000384, -0.0807500000000001, -0.059499999999999886, 0.045999999999999375, -0.11175000000000068, 0.02999999999999936, -0.10500000000000043, -0.10625000000000107, -0.04650000000000176, -0.07525000000000048, -0.15174999999999983, -0.07124999999999915, -0.07699999999999996, -0.12349999999999994, -0.12124999999999986, -0.6854999999999993, -1.1899999999999995, -0.07199999999999918, 0.030000000000001137, 0.006000000000000227, 0.08474999999999966], zp_timestamp='2026-04-15T17:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:05:48.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:05:48.216 [DEBUG] [Thread-24177] [transport.py] [_log()] starting thread (client mode): 0xf13e2020
2026-04-15T19:05:48.216 [DEBUG] [Thread-24177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:05:48.231 [DEBUG] [Thread-24177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:05:48.231 [INFO] [Thread-24177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:05:48.238 [DEBUG] [Thread-24177] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:05:48.239 [DEBUG] [Thread-24177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:05:48.239 [DEBUG] [Thread-24177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:05:48.239 [DEBUG] [Thread-24177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:05:48.239 [DEBUG] [Thread-24177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:05:48.239 [DEBUG] [Thread-24177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:05:48.239 [DEBUG] [Thread-24177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:05:48.239 [DEBUG] [Thread-24177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:05:48.239 [DEBUG] [Thread-24177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:05:48.239 [DEBUG] [Thread-24177] [transport.py] [_log()] client lang: <none>
2026-04-15T19:05:48.239 [DEBUG] [Thread-24177] [transport.py] [_log()] server lang: <none>
2026-04-15T19:05:48.239 [DEBUG] [Thread-24177] [transport.py] [_log()] kex follows: False
2026-04-15T19:05:48.240 [DEBUG] [Thread-24177] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:05:48.240 [DEBUG] [Thread-24177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:05:48.240 [DEBUG] [Thread-24177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:05:48.240 [DEBUG] [Thread-24177] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:05:48.240 [DEBUG] [Thread-24177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:05:48.240 [DEBUG] [Thread-24177] [transport.py] [_log()] Compression: none
2026-04-15T19:05:48.240 [DEBUG] [Thread-24177] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:05:48.298 [DEBUG] [Thread-24177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:05:48.299 [DEBUG] [Thread-24177] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:05:48.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:05:48.299 [DEBUG] [Thread-24177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:05:48.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:05:48.355 [DEBUG] [Thread-24177] [transport.py] [_log()] userauth is OK
2026-04-15T19:05:48.355 [DEBUG] [Thread-24177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:05:48.355 [DEBUG] [Thread-24177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:05:48.355 [DEBUG] [Thread-24177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:05:48.355 [DEBUG] [Thread-24177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:05:48.380 [INFO] [Thread-24177] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:05:48.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:05:48.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:05:49.214 [DEBUG] [Thread-24177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:05:49.214 [DEBUG] [Thread-24177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:05:49.262 [DEBUG] [Thread-24177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:05:49.262 [DEBUG] [Thread-24177] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:05:49.271 [DEBUG] [Thread-24177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:05:49.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:05: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')
2026-04-15T19:05:49.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
2026-04-15T19:05:49.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:05:49.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:05:49.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:05:49.306 [DEBUG] [Thread-24177] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:05:50.575 [DEBUG] [Thread-24179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:05:55.389 [DEBUG] [Thread-24180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:06:05.639 [DEBUG] [Thread-24181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:06:19.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:06:19.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:06:19.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
2026-04-15T19:06:19.782 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:06:19.783 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:06:20.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 5, 40), 4.52704, 73.5127, 0.0, 17.2908, 10.6139, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:06:20.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:05:40
2026-04-15T19:06:20.670 [DEBUG] [Thread-24182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:06:21.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:06:21.525 [DEBUG] [Thread-24183] [transport.py] [_log()] starting thread (client mode): 0xf13510f0
2026-04-15T19:06:21.525 [DEBUG] [Thread-24183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:06:21.546 [DEBUG] [Thread-24183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:06:21.546 [INFO] [Thread-24183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:06:21.549 [DEBUG] [Thread-24183] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:06:21.549 [DEBUG] [Thread-24183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:06:21.549 [DEBUG] [Thread-24183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:06:21.549 [DEBUG] [Thread-24183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:06:21.549 [DEBUG] [Thread-24183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:06:21.549 [DEBUG] [Thread-24183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:06:21.549 [DEBUG] [Thread-24183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:06:21.549 [DEBUG] [Thread-24183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:06:21.549 [DEBUG] [Thread-24183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:06:21.549 [DEBUG] [Thread-24183] [transport.py] [_log()] client lang: <none>
2026-04-15T19:06:21.549 [DEBUG] [Thread-24183] [transport.py] [_log()] server lang: <none>
2026-04-15T19:06:21.549 [DEBUG] [Thread-24183] [transport.py] [_log()] kex follows: False
2026-04-15T19:06:21.549 [DEBUG] [Thread-24183] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:06:21.550 [DEBUG] [Thread-24183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:06:21.550 [DEBUG] [Thread-24183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:06:21.550 [DEBUG] [Thread-24183] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:06:21.550 [DEBUG] [Thread-24183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:06:21.550 [DEBUG] [Thread-24183] [transport.py] [_log()] Compression: none
2026-04-15T19:06:21.550 [DEBUG] [Thread-24183] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:06:21.566 [DEBUG] [Thread-24183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:06:21.567 [DEBUG] [Thread-24183] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:06:21.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:06:21.567 [DEBUG] [Thread-24183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:06:21.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:06:21.568 [DEBUG] [Thread-24183] [transport.py] [_log()] userauth is OK
2026-04-15T19:06:21.568 [DEBUG] [Thread-24183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:06:21.568 [DEBUG] [Thread-24183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:06:21.568 [DEBUG] [Thread-24183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:06:21.568 [DEBUG] [Thread-24183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:06:21.598 [INFO] [Thread-24183] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:06:21.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:06:22.407 [DEBUG] [Thread-24183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:06:22.407 [DEBUG] [Thread-24183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:06:22.408 [DEBUG] [Thread-24183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:06:22.448 [DEBUG] [Thread-24183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:06:22.448 [DEBUG] [Thread-24183] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:06:22.451 [DEBUG] [Thread-24183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:06:22.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:06:22.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:06:22.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:06:22.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:06:22.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:06:22.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:06:22.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:06:22.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:06:22.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:06:22.477 [DEBUG] [Thread-24183] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:06:22.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.712286 -999.00  +10.30  16.57     77   +6.50 1 1 1 1 1     1    0 3.71 -5.85 ZNESW 15.8 16.6 293.8 18.8 11.2 -24.9 11.0 -23.7 10.7 -21.7 11.0 -23.7
2026-04-15T19:06:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:06:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:06:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.712286
2026-04-15T19:06:22.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:06:22.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:06:22.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:06:22.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:06:22.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:06:22.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:05:40', tmtdew=4.52704, humidity=73.5127, cloud=0.0, wind=17.2908, temperature=10.6139, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:05:41.510', atlas_cloud=1, atlas_rain=1, zp_data=[-0.12675000000000125, -0.02474999999999916, -0.0727499999999992, -0.15549999999999997, -0.13449999999999918, -0.07724999999999937, -0.13400000000000034, -0.07074999999999854, -0.062000000000001165, -0.08999999999999986, -0.24875000000000114, -0.053000000000000824, -0.057000000000000384, -0.0807500000000001, -0.059499999999999886, 0.045999999999999375, -0.11175000000000068, 0.02999999999999936, -0.10500000000000043, -0.10625000000000107, -0.04650000000000176, -0.07525000000000048, -0.15174999999999983, -0.07124999999999915, -0.07699999999999996, -0.12349999999999994, -0.12124999999999986, -0.6854999999999993, -1.1899999999999995, -0.07199999999999918, 0.030000000000001137, 0.006000000000000227, 0.08474999999999966], zp_timestamp='2026-04-15T17:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:06:22.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:06:22.735 [DEBUG] [Thread-24186] [transport.py] [_log()] starting thread (client mode): 0xee91d2d0
2026-04-15T19:06:22.735 [DEBUG] [Thread-24186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:06:22.749 [DEBUG] [Thread-24186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:06:22.750 [INFO] [Thread-24186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:06:22.757 [DEBUG] [Thread-24186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:06:22.757 [DEBUG] [Thread-24186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:06:22.757 [DEBUG] [Thread-24186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:06:22.757 [DEBUG] [Thread-24186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:06:22.758 [DEBUG] [Thread-24186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:06:22.758 [DEBUG] [Thread-24186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:06:22.758 [DEBUG] [Thread-24186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:06:22.758 [DEBUG] [Thread-24186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:06:22.758 [DEBUG] [Thread-24186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:06:22.758 [DEBUG] [Thread-24186] [transport.py] [_log()] client lang: <none>
2026-04-15T19:06:22.758 [DEBUG] [Thread-24186] [transport.py] [_log()] server lang: <none>
2026-04-15T19:06:22.758 [DEBUG] [Thread-24186] [transport.py] [_log()] kex follows: False
2026-04-15T19:06:22.758 [DEBUG] [Thread-24186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:06:22.758 [DEBUG] [Thread-24186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:06:22.758 [DEBUG] [Thread-24186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:06:22.758 [DEBUG] [Thread-24186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:06:22.759 [DEBUG] [Thread-24186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:06:22.759 [DEBUG] [Thread-24186] [transport.py] [_log()] Compression: none
2026-04-15T19:06:22.759 [DEBUG] [Thread-24186] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:06:22.814 [DEBUG] [Thread-24186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:06:22.814 [DEBUG] [Thread-24186] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:06:22.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:06:22.815 [DEBUG] [Thread-24186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:06:22.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:06:22.871 [DEBUG] [Thread-24186] [transport.py] [_log()] userauth is OK
2026-04-15T19:06:22.871 [DEBUG] [Thread-24186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:06:22.871 [DEBUG] [Thread-24186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:06:22.872 [DEBUG] [Thread-24186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:06:22.872 [DEBUG] [Thread-24186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:06:22.898 [INFO] [Thread-24186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:06:22.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:06:22.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:06:23.736 [DEBUG] [Thread-24186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:06:23.736 [DEBUG] [Thread-24186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:06:23.784 [DEBUG] [Thread-24186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:06:23.784 [DEBUG] [Thread-24186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:06:23.793 [DEBUG] [Thread-24186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:06:23.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:06:23.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')
2026-04-15T19:06:23.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
2026-04-15T19:06:23.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:06:23.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:06:23.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:06:23.828 [DEBUG] [Thread-24186] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:06:35.700 [DEBUG] [Thread-24188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:06:50.744 [DEBUG] [Thread-24189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:06:53.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:06:53.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:06:53.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
2026-04-15T19:06:55.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 6, 16), 4.56024, 73.273, 0.0, 15.3338, 10.3571, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:06:55.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:06:16
2026-04-15T19:06:55.536 [DEBUG] [Thread-24190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:06:55.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:06:56.013 [DEBUG] [Thread-24191] [transport.py] [_log()] starting thread (client mode): 0xee91c7f0
2026-04-15T19:06:56.013 [DEBUG] [Thread-24191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:06:56.033 [DEBUG] [Thread-24191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:06:56.033 [INFO] [Thread-24191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:06:56.036 [DEBUG] [Thread-24191] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:06:56.036 [DEBUG] [Thread-24191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:06:56.036 [DEBUG] [Thread-24191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:06:56.037 [DEBUG] [Thread-24191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:06:56.037 [DEBUG] [Thread-24191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:06:56.037 [DEBUG] [Thread-24191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:06:56.037 [DEBUG] [Thread-24191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:06:56.037 [DEBUG] [Thread-24191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:06:56.037 [DEBUG] [Thread-24191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:06:56.037 [DEBUG] [Thread-24191] [transport.py] [_log()] client lang: <none>
2026-04-15T19:06:56.037 [DEBUG] [Thread-24191] [transport.py] [_log()] server lang: <none>
2026-04-15T19:06:56.037 [DEBUG] [Thread-24191] [transport.py] [_log()] kex follows: False
2026-04-15T19:06:56.037 [DEBUG] [Thread-24191] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:06:56.037 [DEBUG] [Thread-24191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:06:56.037 [DEBUG] [Thread-24191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:06:56.038 [DEBUG] [Thread-24191] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:06:56.038 [DEBUG] [Thread-24191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:06:56.038 [DEBUG] [Thread-24191] [transport.py] [_log()] Compression: none
2026-04-15T19:06:56.038 [DEBUG] [Thread-24191] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:06:56.054 [DEBUG] [Thread-24191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:06:56.054 [DEBUG] [Thread-24191] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:06:56.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:06:56.055 [DEBUG] [Thread-24191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:06:56.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:06:56.056 [DEBUG] [Thread-24191] [transport.py] [_log()] userauth is OK
2026-04-15T19:06:56.056 [DEBUG] [Thread-24191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:06:56.056 [DEBUG] [Thread-24191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:06:56.056 [DEBUG] [Thread-24191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:06:56.056 [DEBUG] [Thread-24191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:06:56.080 [INFO] [Thread-24191] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:06:56.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:06:56.880 [DEBUG] [Thread-24191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:06:56.881 [DEBUG] [Thread-24191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:06:56.881 [DEBUG] [Thread-24191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:06:56.921 [DEBUG] [Thread-24191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:06:56.921 [DEBUG] [Thread-24191] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:06:56.924 [DEBUG] [Thread-24191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:06:56.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:06:56.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:06:56.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:06:56.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:06:56.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:06:56.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:06:56.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:06:56.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:06:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:06:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.712633 -999.00  +10.30  14.31     77   +6.60 1 1 1 1 1     1    0 3.71 -6.37 ZNESW 14.6 14.3 302.2 18.0 11.2 -24.9 11.0 -23.7 10.7 -21.5 11.0 -23.7
2026-04-15T19:06:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:06:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:06:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.712633
2026-04-15T19:06:56.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:06:56.948 [DEBUG] [Thread-24191] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:06:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:06:56.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:06:56.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:06:56.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:06:56.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:06:16', tmtdew=4.56024, humidity=73.273, cloud=0.0, wind=15.3338, temperature=10.3571, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:06:11.491', atlas_cloud=1, atlas_rain=1, zp_data=[-0.12675000000000125, -0.02474999999999916, -0.0727499999999992, -0.15549999999999997, -0.13449999999999918, -0.07724999999999937, -0.13400000000000034, -0.07074999999999854, -0.062000000000001165, -0.08999999999999986, -0.24875000000000114, -0.053000000000000824, -0.057000000000000384, -0.0807500000000001, -0.059499999999999886, 0.045999999999999375, -0.11175000000000068, 0.02999999999999936, -0.10500000000000043, -0.10625000000000107, -0.04650000000000176, -0.07525000000000048, -0.15174999999999983, -0.07124999999999915, -0.07699999999999996, -0.12349999999999994, -0.12124999999999986, -0.6854999999999993, -1.1899999999999995, -0.07199999999999918, 0.030000000000001137, 0.006000000000000227, 0.08474999999999966], zp_timestamp='2026-04-15T17:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:06:57.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:06:57.206 [DEBUG] [Thread-24194] [transport.py] [_log()] starting thread (client mode): 0xf13e1a80
2026-04-15T19:06:57.206 [DEBUG] [Thread-24194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:06:57.221 [DEBUG] [Thread-24194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:06:57.221 [INFO] [Thread-24194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:06:57.228 [DEBUG] [Thread-24194] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:06:57.228 [DEBUG] [Thread-24194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:06:57.228 [DEBUG] [Thread-24194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:06:57.228 [DEBUG] [Thread-24194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:06:57.229 [DEBUG] [Thread-24194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:06:57.229 [DEBUG] [Thread-24194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:06:57.229 [DEBUG] [Thread-24194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:06:57.229 [DEBUG] [Thread-24194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:06:57.229 [DEBUG] [Thread-24194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:06:57.229 [DEBUG] [Thread-24194] [transport.py] [_log()] client lang: <none>
2026-04-15T19:06:57.229 [DEBUG] [Thread-24194] [transport.py] [_log()] server lang: <none>
2026-04-15T19:06:57.229 [DEBUG] [Thread-24194] [transport.py] [_log()] kex follows: False
2026-04-15T19:06:57.229 [DEBUG] [Thread-24194] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:06:57.229 [DEBUG] [Thread-24194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:06:57.229 [DEBUG] [Thread-24194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:06:57.229 [DEBUG] [Thread-24194] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:06:57.229 [DEBUG] [Thread-24194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:06:57.230 [DEBUG] [Thread-24194] [transport.py] [_log()] Compression: none
2026-04-15T19:06:57.230 [DEBUG] [Thread-24194] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:06:57.286 [DEBUG] [Thread-24194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:06:57.286 [DEBUG] [Thread-24194] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:06:57.287 [DEBUG] [Thread-24194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:06:57.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:06:57.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:06:57.347 [DEBUG] [Thread-24194] [transport.py] [_log()] userauth is OK
2026-04-15T19:06:57.347 [DEBUG] [Thread-24194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:06:57.347 [DEBUG] [Thread-24194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:06:57.348 [DEBUG] [Thread-24194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:06:57.348 [DEBUG] [Thread-24194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:06:57.370 [INFO] [Thread-24194] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:06:57.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:06:57.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:06:58.186 [DEBUG] [Thread-24194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:06:58.186 [DEBUG] [Thread-24194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:06:58.234 [DEBUG] [Thread-24194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:06:58.234 [DEBUG] [Thread-24194] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:06:58.246 [DEBUG] [Thread-24194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:06:58.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:06:58.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')
2026-04-15T19:06:58.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') -> 00000000
2026-04-15T19:06:58.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:06:58.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:06:58.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:06:58.287 [DEBUG] [Thread-24194] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:07:05.780 [DEBUG] [Thread-24196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:07:19.986 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:07:19.987 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:07:20.823 [DEBUG] [Thread-24197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:07:28.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:07:28.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:07:28.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
2026-04-15T19:07:29.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 6, 51), 4.50627, 73.6124, 0.0, 16.8322, 10.581, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:07:29.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:06:51
2026-04-15T19:07:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:07:30.563 [DEBUG] [Thread-24198] [transport.py] [_log()] starting thread (client mode): 0xf1350430
2026-04-15T19:07:30.563 [DEBUG] [Thread-24198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:07:30.584 [DEBUG] [Thread-24198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:07:30.584 [INFO] [Thread-24198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:07:30.587 [DEBUG] [Thread-24198] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:07:30.587 [DEBUG] [Thread-24198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:07:30.587 [DEBUG] [Thread-24198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:07:30.587 [DEBUG] [Thread-24198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:07:30.587 [DEBUG] [Thread-24198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:07:30.588 [DEBUG] [Thread-24198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:07:30.588 [DEBUG] [Thread-24198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:07:30.588 [DEBUG] [Thread-24198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:07:30.588 [DEBUG] [Thread-24198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:07:30.588 [DEBUG] [Thread-24198] [transport.py] [_log()] client lang: <none>
2026-04-15T19:07:30.588 [DEBUG] [Thread-24198] [transport.py] [_log()] server lang: <none>
2026-04-15T19:07:30.588 [DEBUG] [Thread-24198] [transport.py] [_log()] kex follows: False
2026-04-15T19:07:30.588 [DEBUG] [Thread-24198] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:07:30.588 [DEBUG] [Thread-24198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:07:30.588 [DEBUG] [Thread-24198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:07:30.588 [DEBUG] [Thread-24198] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:07:30.589 [DEBUG] [Thread-24198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:07:30.589 [DEBUG] [Thread-24198] [transport.py] [_log()] Compression: none
2026-04-15T19:07:30.589 [DEBUG] [Thread-24198] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:07:30.605 [DEBUG] [Thread-24198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:07:30.606 [DEBUG] [Thread-24198] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:07:30.606 [DEBUG] [Thread-24198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:07:30.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:07:30.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:07:30.649 [DEBUG] [Thread-24198] [transport.py] [_log()] userauth is OK
2026-04-15T19:07:30.649 [DEBUG] [Thread-24198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:07:30.649 [DEBUG] [Thread-24198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:07:30.649 [DEBUG] [Thread-24198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:07:30.649 [DEBUG] [Thread-24198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:07:30.685 [INFO] [Thread-24198] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:07:30.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:07:31.518 [DEBUG] [Thread-24198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:07:31.518 [DEBUG] [Thread-24198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:07:31.519 [DEBUG] [Thread-24198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:07:31.559 [DEBUG] [Thread-24198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:07:31.559 [DEBUG] [Thread-24198] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:07:31.562 [DEBUG] [Thread-24198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:07:31.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:07:31.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:07:31.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:07:31.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:07:31.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:07:31.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:07:31.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:07:31.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:07:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:07:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.712981 -999.00  +10.30  16.41     78   +6.60 1 1 1 1 1     1    0 3.65 -6.68 ZNESW 16.4 16.4 297.4 18.5 11.1 -24.9 11.0 -23.8 10.7 -21.6 10.9 -23.7
2026-04-15T19:07:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:07:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:07:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.712981
2026-04-15T19:07:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:07:31.588 [DEBUG] [Thread-24198] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:07:31.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:07:31.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:07:31.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:07:31.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:07:31.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:06:51', tmtdew=4.50627, humidity=73.6124, cloud=0.0, wind=16.8322, temperature=10.581, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:06:41.558', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.04875000000000007, -0.053500000000001435, -0.007500000000000284, -0.010249999999999204, -0.015000000000000568, -0.01425000000000054, -0.010000000000001563, -0.019000000000000128, -0.11025000000000063, -0.01699999999999946, 0.06500000000000128, 0.006249999999999645, -0.012000000000000455, 0.007999999999999119, 0.04124999999999979, 0.05649999999999977, -0.02200000000000024, 0.0012499999999988631, 0.032999999999999474, 0.04574999999999818, -0.01774999999999949, 0.051750000000000185, 0.09699999999999953, 0.033500000000000085, -0.00024999999999941735, -0.05250000000000021, 0.011000000000001009, 0.049000000000001265, 0.14850000000000207, 0.10900000000000176, 0.13674999999999926], zp_timestamp='2026-04-15T17:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:07:31.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:07:31.850 [DEBUG] [Thread-24201] [transport.py] [_log()] starting thread (client mode): 0xee9af640
2026-04-15T19:07:31.850 [DEBUG] [Thread-24201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:07:31.864 [DEBUG] [Thread-24201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:07:31.864 [INFO] [Thread-24201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:07:31.872 [DEBUG] [Thread-24201] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:07:31.872 [DEBUG] [Thread-24201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:07:31.872 [DEBUG] [Thread-24201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:07:31.872 [DEBUG] [Thread-24201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:07:31.872 [DEBUG] [Thread-24201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:07:31.872 [DEBUG] [Thread-24201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:07:31.872 [DEBUG] [Thread-24201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:07:31.872 [DEBUG] [Thread-24201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:07:31.872 [DEBUG] [Thread-24201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:07:31.872 [DEBUG] [Thread-24201] [transport.py] [_log()] client lang: <none>
2026-04-15T19:07:31.873 [DEBUG] [Thread-24201] [transport.py] [_log()] server lang: <none>
2026-04-15T19:07:31.873 [DEBUG] [Thread-24201] [transport.py] [_log()] kex follows: False
2026-04-15T19:07:31.873 [DEBUG] [Thread-24201] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:07:31.873 [DEBUG] [Thread-24201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:07:31.873 [DEBUG] [Thread-24201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:07:31.873 [DEBUG] [Thread-24201] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:07:31.873 [DEBUG] [Thread-24201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:07:31.873 [DEBUG] [Thread-24201] [transport.py] [_log()] Compression: none
2026-04-15T19:07:31.873 [DEBUG] [Thread-24201] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:07:31.935 [DEBUG] [Thread-24201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:07:31.936 [DEBUG] [Thread-24201] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:07:31.936 [DEBUG] [Thread-24201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:07:31.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:07:31.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:07:31.998 [DEBUG] [Thread-24201] [transport.py] [_log()] userauth is OK
2026-04-15T19:07:31.998 [DEBUG] [Thread-24201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:07:31.999 [DEBUG] [Thread-24201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:07:31.999 [DEBUG] [Thread-24201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:07:31.999 [DEBUG] [Thread-24201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:07:32.025 [INFO] [Thread-24201] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:07:32.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:07:32.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:07:32.833 [DEBUG] [Thread-24201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:07:32.834 [DEBUG] [Thread-24201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:07:32.882 [DEBUG] [Thread-24201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:07:32.882 [DEBUG] [Thread-24201] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:07:32.891 [DEBUG] [Thread-24201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:07:32.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:07:32.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')
2026-04-15T19:07:32.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
2026-04-15T19:07:32.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:07:32.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:07:32.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:07:32.928 [DEBUG] [Thread-24201] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:07:35.855 [DEBUG] [Thread-24203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:07:50.900 [DEBUG] [Thread-24204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:07:55.683 [DEBUG] [Thread-24205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:08:02.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:08:02.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:08:02.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
2026-04-15T19:08:04.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 7, 27), 4.50581, 73.2897, 0.0, 17.6983, 10.274, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:08:04.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:07:27
2026-04-15T19:08:04.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:08:05.119 [DEBUG] [Thread-24206] [transport.py] [_log()] starting thread (client mode): 0xf13511e0
2026-04-15T19:08:05.119 [DEBUG] [Thread-24206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:08:05.138 [DEBUG] [Thread-24206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:08:05.139 [INFO] [Thread-24206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:08:05.142 [DEBUG] [Thread-24206] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:08:05.142 [DEBUG] [Thread-24206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:08:05.142 [DEBUG] [Thread-24206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:08:05.142 [DEBUG] [Thread-24206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:08:05.142 [DEBUG] [Thread-24206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:08:05.142 [DEBUG] [Thread-24206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:08:05.142 [DEBUG] [Thread-24206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:08:05.142 [DEBUG] [Thread-24206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:08:05.142 [DEBUG] [Thread-24206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:08:05.142 [DEBUG] [Thread-24206] [transport.py] [_log()] client lang: <none>
2026-04-15T19:08:05.142 [DEBUG] [Thread-24206] [transport.py] [_log()] server lang: <none>
2026-04-15T19:08:05.143 [DEBUG] [Thread-24206] [transport.py] [_log()] kex follows: False
2026-04-15T19:08:05.143 [DEBUG] [Thread-24206] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:08:05.143 [DEBUG] [Thread-24206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:08:05.143 [DEBUG] [Thread-24206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:08:05.143 [DEBUG] [Thread-24206] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:08:05.143 [DEBUG] [Thread-24206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:08:05.143 [DEBUG] [Thread-24206] [transport.py] [_log()] Compression: none
2026-04-15T19:08:05.143 [DEBUG] [Thread-24206] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:08:05.162 [DEBUG] [Thread-24206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:08:05.162 [DEBUG] [Thread-24206] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:08:05.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:08:05.163 [DEBUG] [Thread-24206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:08:05.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:08:05.163 [DEBUG] [Thread-24206] [transport.py] [_log()] userauth is OK
2026-04-15T19:08:05.163 [DEBUG] [Thread-24206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:08:05.164 [DEBUG] [Thread-24206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:08:05.164 [DEBUG] [Thread-24206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:08:05.164 [DEBUG] [Thread-24206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:08:05.183 [INFO] [Thread-24206] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:08:05.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:08:05.932 [DEBUG] [Thread-24208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:08:05.946 [DEBUG] [Thread-24206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:08:05.947 [DEBUG] [Thread-24206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:08:05.947 [DEBUG] [Thread-24206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:08:05.987 [DEBUG] [Thread-24206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:08:05.987 [DEBUG] [Thread-24206] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:08:05.990 [DEBUG] [Thread-24206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:08:06.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:08:06.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:08:06.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:08:06.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:08:06.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:08:06.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:08:06.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:08:06.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:08:06.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:08:06.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.713328 -999.00  +10.30  14.49     77   +6.60 1 1 1 1 1     1    0 3.63 -7.35 ZNESW 16.1 14.5 297.6 17.5 11.2 -24.9 11.0 -23.7 10.7 -21.6 11.0 -23.7
2026-04-15T19:08:06.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:08:06.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:08:06.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.713328
2026-04-15T19:08:06.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:08:06.014 [DEBUG] [Thread-24206] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:08:06.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:08:06.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:08:06.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:08:06.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:08:06.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:07:27', tmtdew=4.50581, humidity=73.2897, cloud=0.0, wind=17.6983, temperature=10.274, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:07:11.539', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.04875000000000007, -0.053500000000001435, -0.007500000000000284, -0.010249999999999204, -0.015000000000000568, -0.01425000000000054, -0.010000000000001563, -0.019000000000000128, -0.11025000000000063, -0.01699999999999946, 0.06500000000000128, 0.006249999999999645, -0.012000000000000455, 0.007999999999999119, 0.04124999999999979, 0.05649999999999977, -0.02200000000000024, 0.0012499999999988631, 0.032999999999999474, 0.04574999999999818, -0.01774999999999949, 0.051750000000000185, 0.09699999999999953, 0.033500000000000085, -0.00024999999999941735, -0.05250000000000021, 0.011000000000001009, 0.049000000000001265, 0.14850000000000207, 0.10900000000000176, 0.13674999999999926], zp_timestamp='2026-04-15T17:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:08:06.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:08:06.271 [DEBUG] [Thread-24210] [transport.py] [_log()] starting thread (client mode): 0xee9aeb30
2026-04-15T19:08:06.272 [DEBUG] [Thread-24210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:08:06.286 [DEBUG] [Thread-24210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:08:06.286 [INFO] [Thread-24210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:08:06.293 [DEBUG] [Thread-24210] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:08:06.293 [DEBUG] [Thread-24210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:08:06.293 [DEBUG] [Thread-24210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:08:06.293 [DEBUG] [Thread-24210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:08:06.293 [DEBUG] [Thread-24210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:08:06.294 [DEBUG] [Thread-24210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:08:06.294 [DEBUG] [Thread-24210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:08:06.294 [DEBUG] [Thread-24210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:08:06.294 [DEBUG] [Thread-24210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:08:06.294 [DEBUG] [Thread-24210] [transport.py] [_log()] client lang: <none>
2026-04-15T19:08:06.294 [DEBUG] [Thread-24210] [transport.py] [_log()] server lang: <none>
2026-04-15T19:08:06.294 [DEBUG] [Thread-24210] [transport.py] [_log()] kex follows: False
2026-04-15T19:08:06.294 [DEBUG] [Thread-24210] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:08:06.294 [DEBUG] [Thread-24210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:08:06.294 [DEBUG] [Thread-24210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:08:06.294 [DEBUG] [Thread-24210] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:08:06.294 [DEBUG] [Thread-24210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:08:06.294 [DEBUG] [Thread-24210] [transport.py] [_log()] Compression: none
2026-04-15T19:08:06.294 [DEBUG] [Thread-24210] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:08:06.348 [DEBUG] [Thread-24210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:08:06.349 [DEBUG] [Thread-24210] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:08:06.349 [DEBUG] [Thread-24210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:08:06.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:08:06.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:08:06.406 [DEBUG] [Thread-24210] [transport.py] [_log()] userauth is OK
2026-04-15T19:08:06.406 [DEBUG] [Thread-24210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:08:06.406 [DEBUG] [Thread-24210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:08:06.406 [DEBUG] [Thread-24210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:08:06.406 [DEBUG] [Thread-24210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:08:06.423 [INFO] [Thread-24210] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:08:06.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:08:06.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:08:07.228 [DEBUG] [Thread-24210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:08:07.228 [DEBUG] [Thread-24210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:08:07.276 [DEBUG] [Thread-24210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:08:07.276 [DEBUG] [Thread-24210] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:08:07.285 [DEBUG] [Thread-24210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:08:07.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:08:07.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')
2026-04-15T19:08:07.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') -> 00000000
2026-04-15T19:08:07.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:08:07.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:08:07.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:08:07.321 [DEBUG] [Thread-24210] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:08:20.188 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:08:20.189 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:08:20.963 [DEBUG] [Thread-24212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:08:36.004 [DEBUG] [Thread-24213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:08:37.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:08:37.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:08:37.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T19:08:38.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 8, 3), 4.51175, 73.2566, 0.0, 17.0986, 10.2574, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:08:38.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:08:03
2026-04-15T19:08:38.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:08:39.405 [DEBUG] [Thread-24214] [transport.py] [_log()] starting thread (client mode): 0xee91e170
2026-04-15T19:08:39.405 [DEBUG] [Thread-24214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:08:39.425 [DEBUG] [Thread-24214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:08:39.425 [INFO] [Thread-24214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:08:39.428 [DEBUG] [Thread-24214] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:08:39.428 [DEBUG] [Thread-24214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:08:39.428 [DEBUG] [Thread-24214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:08:39.428 [DEBUG] [Thread-24214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:08:39.428 [DEBUG] [Thread-24214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:08:39.428 [DEBUG] [Thread-24214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:08:39.429 [DEBUG] [Thread-24214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:08:39.429 [DEBUG] [Thread-24214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:08:39.429 [DEBUG] [Thread-24214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:08:39.429 [DEBUG] [Thread-24214] [transport.py] [_log()] client lang: <none>
2026-04-15T19:08:39.429 [DEBUG] [Thread-24214] [transport.py] [_log()] server lang: <none>
2026-04-15T19:08:39.429 [DEBUG] [Thread-24214] [transport.py] [_log()] kex follows: False
2026-04-15T19:08:39.429 [DEBUG] [Thread-24214] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:08:39.429 [DEBUG] [Thread-24214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:08:39.429 [DEBUG] [Thread-24214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:08:39.429 [DEBUG] [Thread-24214] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:08:39.429 [DEBUG] [Thread-24214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:08:39.430 [DEBUG] [Thread-24214] [transport.py] [_log()] Compression: none
2026-04-15T19:08:39.430 [DEBUG] [Thread-24214] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:08:39.446 [DEBUG] [Thread-24214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:08:39.446 [DEBUG] [Thread-24214] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:08:39.447 [DEBUG] [Thread-24214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:08:39.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:08:39.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:08:39.448 [DEBUG] [Thread-24214] [transport.py] [_log()] userauth is OK
2026-04-15T19:08:39.448 [DEBUG] [Thread-24214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:08:39.448 [DEBUG] [Thread-24214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:08:39.448 [DEBUG] [Thread-24214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:08:39.448 [DEBUG] [Thread-24214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:08:39.472 [INFO] [Thread-24214] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:08:39.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:08:40.291 [DEBUG] [Thread-24214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:08:40.292 [DEBUG] [Thread-24214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:08:40.292 [DEBUG] [Thread-24214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:08:40.332 [DEBUG] [Thread-24214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:08:40.332 [DEBUG] [Thread-24214] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:08:40.335 [DEBUG] [Thread-24214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:08:40.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:08:40.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:08:40.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:08:40.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:08:40.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:08:40.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:08:40.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:08:40.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:08:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:08:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.713675 -999.00  +10.30  15.44     77   +6.60 1 1 1 1 1     0    0 3.66 -7.35 ZNESW 14.4 15.4 295.6 19.0 11.1 -24.9 11.0 -23.8 10.6 -21.5 10.9 -23.7
2026-04-15T19:08:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:08:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:08:40.361 [DEBUG] [Thread-24214] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:08:40.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.713675
2026-04-15T19:08:40.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:08:40.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:08:40.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:08:40.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:08:40.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:08:40.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:08:03', tmtdew=4.51175, humidity=73.2566, cloud=0.0, wind=17.0986, temperature=10.2574, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:07:41.520', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.04875000000000007, -0.053500000000001435, -0.007500000000000284, -0.010249999999999204, -0.015000000000000568, -0.01425000000000054, -0.010000000000001563, -0.019000000000000128, -0.11025000000000063, -0.01699999999999946, 0.06500000000000128, 0.006249999999999645, -0.012000000000000455, 0.007999999999999119, 0.04124999999999979, 0.05649999999999977, -0.02200000000000024, 0.0012499999999988631, 0.032999999999999474, 0.04574999999999818, -0.01774999999999949, 0.051750000000000185, 0.09699999999999953, 0.033500000000000085, -0.00024999999999941735, -0.05250000000000021, 0.011000000000001009, 0.049000000000001265, 0.14850000000000207, 0.10900000000000176, 0.13674999999999926], zp_timestamp='2026-04-15T17:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:08:40.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:08:40.640 [DEBUG] [Thread-24217] [transport.py] [_log()] starting thread (client mode): 0xf1365b70
2026-04-15T19:08:40.640 [DEBUG] [Thread-24217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:08:40.654 [DEBUG] [Thread-24217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:08:40.655 [INFO] [Thread-24217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:08:40.662 [DEBUG] [Thread-24217] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:08:40.662 [DEBUG] [Thread-24217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:08:40.662 [DEBUG] [Thread-24217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:08:40.662 [DEBUG] [Thread-24217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:08:40.662 [DEBUG] [Thread-24217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:08:40.662 [DEBUG] [Thread-24217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:08:40.662 [DEBUG] [Thread-24217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:08:40.663 [DEBUG] [Thread-24217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:08:40.663 [DEBUG] [Thread-24217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:08:40.663 [DEBUG] [Thread-24217] [transport.py] [_log()] client lang: <none>
2026-04-15T19:08:40.663 [DEBUG] [Thread-24217] [transport.py] [_log()] server lang: <none>
2026-04-15T19:08:40.663 [DEBUG] [Thread-24217] [transport.py] [_log()] kex follows: False
2026-04-15T19:08:40.663 [DEBUG] [Thread-24217] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:08:40.663 [DEBUG] [Thread-24217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:08:40.663 [DEBUG] [Thread-24217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:08:40.663 [DEBUG] [Thread-24217] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:08:40.663 [DEBUG] [Thread-24217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:08:40.663 [DEBUG] [Thread-24217] [transport.py] [_log()] Compression: none
2026-04-15T19:08:40.664 [DEBUG] [Thread-24217] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:08:40.719 [DEBUG] [Thread-24217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:08:40.720 [DEBUG] [Thread-24217] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:08:40.720 [DEBUG] [Thread-24217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:08:40.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:08:40.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:08:40.776 [DEBUG] [Thread-24217] [transport.py] [_log()] userauth is OK
2026-04-15T19:08:40.776 [DEBUG] [Thread-24217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:08:40.776 [DEBUG] [Thread-24217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:08:40.776 [DEBUG] [Thread-24217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:08:40.777 [DEBUG] [Thread-24217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:08:40.802 [INFO] [Thread-24217] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:08:40.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:08:40.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:08:41.604 [DEBUG] [Thread-24217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:08:41.605 [DEBUG] [Thread-24217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:08:41.653 [DEBUG] [Thread-24217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:08:41.653 [DEBUG] [Thread-24217] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:08:41.662 [DEBUG] [Thread-24217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:08:41.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:08:41.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')
2026-04-15T19:08:41.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
2026-04-15T19:08:41.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:08:41.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:08:41.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:08:41.697 [DEBUG] [Thread-24217] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:08:51.034 [DEBUG] [Thread-24219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:08:55.829 [DEBUG] [Thread-24220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:09:06.079 [DEBUG] [Thread-24221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:09:11.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:09:11.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:09:11.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T19:09:12.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 8, 38), 4.48005, 73.746, 0.0, 16.0913, 10.5819, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:09:12.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:08:38
2026-04-15T19:09:13.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:09:13.803 [DEBUG] [Thread-24222] [transport.py] [_log()] starting thread (client mode): 0xf13651e0
2026-04-15T19:09:13.804 [DEBUG] [Thread-24222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:09:13.823 [DEBUG] [Thread-24222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:09:13.824 [INFO] [Thread-24222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:09:13.825 [DEBUG] [Thread-24222] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:09:13.825 [DEBUG] [Thread-24222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:09:13.825 [DEBUG] [Thread-24222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:09:13.825 [DEBUG] [Thread-24222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:09:13.825 [DEBUG] [Thread-24222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:09:13.825 [DEBUG] [Thread-24222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:09:13.825 [DEBUG] [Thread-24222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:09:13.826 [DEBUG] [Thread-24222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:09:13.826 [DEBUG] [Thread-24222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:09:13.826 [DEBUG] [Thread-24222] [transport.py] [_log()] client lang: <none>
2026-04-15T19:09:13.826 [DEBUG] [Thread-24222] [transport.py] [_log()] server lang: <none>
2026-04-15T19:09:13.826 [DEBUG] [Thread-24222] [transport.py] [_log()] kex follows: False
2026-04-15T19:09:13.826 [DEBUG] [Thread-24222] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:09:13.826 [DEBUG] [Thread-24222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:09:13.826 [DEBUG] [Thread-24222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:09:13.826 [DEBUG] [Thread-24222] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:09:13.826 [DEBUG] [Thread-24222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:09:13.826 [DEBUG] [Thread-24222] [transport.py] [_log()] Compression: none
2026-04-15T19:09:13.826 [DEBUG] [Thread-24222] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:09:13.835 [DEBUG] [Thread-24222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:09:13.835 [DEBUG] [Thread-24222] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:09:13.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:09:13.836 [DEBUG] [Thread-24222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:09:13.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:09:13.836 [DEBUG] [Thread-24222] [transport.py] [_log()] userauth is OK
2026-04-15T19:09:13.836 [DEBUG] [Thread-24222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:09:13.836 [DEBUG] [Thread-24222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:09:13.837 [DEBUG] [Thread-24222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:09:13.837 [DEBUG] [Thread-24222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:09:13.851 [INFO] [Thread-24222] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:09:13.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:09:14.585 [DEBUG] [Thread-24222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:09:14.585 [DEBUG] [Thread-24222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:09:14.585 [DEBUG] [Thread-24222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:09:14.626 [DEBUG] [Thread-24222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:09:14.626 [DEBUG] [Thread-24222] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:09:14.629 [DEBUG] [Thread-24222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:09:14.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:09:14.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:09:14.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:09:14.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:09:14.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:09:14.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:09:14.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:09:14.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:09:14.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:09:14.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.714369 -999.00  +10.30  13.30     78   +6.60 1 1 1 1 1     0    0 3.56 -8.31 ZNESW 12.8 13.3 305.0 18.1 11.1 -24.9 10.9 -23.7 10.6 -21.5 11.0 -23.8
2026-04-15T19:09:14.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:09:14.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:09:14.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.714369
2026-04-15T19:09:14.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:09:14.654 [DEBUG] [Thread-24222] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:09:14.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:09:14.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:09:14.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:09:14.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:09:14.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:08:38', tmtdew=4.48005, humidity=73.746, cloud=0.0, wind=16.0913, temperature=10.5819, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:08:41.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.04875000000000007, -0.053500000000001435, -0.007500000000000284, -0.010249999999999204, -0.015000000000000568, -0.01425000000000054, -0.010000000000001563, -0.019000000000000128, -0.11025000000000063, -0.01699999999999946, 0.06500000000000128, 0.006249999999999645, -0.012000000000000455, 0.007999999999999119, 0.04124999999999979, 0.05649999999999977, -0.02200000000000024, 0.0012499999999988631, 0.032999999999999474, 0.04574999999999818, -0.01774999999999949, 0.051750000000000185, 0.09699999999999953, 0.033500000000000085, -0.00024999999999941735, -0.05250000000000021, 0.011000000000001009, 0.049000000000001265, 0.14850000000000207, 0.10900000000000176, 0.13674999999999926], zp_timestamp='2026-04-15T17:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:09:14.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:09:14.916 [DEBUG] [Thread-24225] [transport.py] [_log()] starting thread (client mode): 0xf13c8130
2026-04-15T19:09:14.916 [DEBUG] [Thread-24225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:09:14.931 [DEBUG] [Thread-24225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:09:14.931 [INFO] [Thread-24225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:09:14.939 [DEBUG] [Thread-24225] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:09:14.939 [DEBUG] [Thread-24225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:09:14.940 [DEBUG] [Thread-24225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:09:14.940 [DEBUG] [Thread-24225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:09:14.940 [DEBUG] [Thread-24225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:09:14.940 [DEBUG] [Thread-24225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:09:14.940 [DEBUG] [Thread-24225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:09:14.940 [DEBUG] [Thread-24225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:09:14.940 [DEBUG] [Thread-24225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:09:14.941 [DEBUG] [Thread-24225] [transport.py] [_log()] client lang: <none>
2026-04-15T19:09:14.941 [DEBUG] [Thread-24225] [transport.py] [_log()] server lang: <none>
2026-04-15T19:09:14.941 [DEBUG] [Thread-24225] [transport.py] [_log()] kex follows: False
2026-04-15T19:09:14.941 [DEBUG] [Thread-24225] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:09:14.941 [DEBUG] [Thread-24225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:09:14.941 [DEBUG] [Thread-24225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:09:14.941 [DEBUG] [Thread-24225] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:09:14.942 [DEBUG] [Thread-24225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:09:14.942 [DEBUG] [Thread-24225] [transport.py] [_log()] Compression: none
2026-04-15T19:09:14.942 [DEBUG] [Thread-24225] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:09:15.000 [DEBUG] [Thread-24225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:09:15.000 [DEBUG] [Thread-24225] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:09:15.000 [DEBUG] [Thread-24225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:09:15.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:09:15.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:09:15.064 [DEBUG] [Thread-24225] [transport.py] [_log()] userauth is OK
2026-04-15T19:09:15.064 [DEBUG] [Thread-24225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:09:15.065 [DEBUG] [Thread-24225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:09:15.065 [DEBUG] [Thread-24225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:09:15.065 [DEBUG] [Thread-24225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:09:15.091 [INFO] [Thread-24225] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:09:15.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:09:15.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:09:15.915 [DEBUG] [Thread-24225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:09:15.915 [DEBUG] [Thread-24225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:09:15.963 [DEBUG] [Thread-24225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:09:15.964 [DEBUG] [Thread-24225] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:09:15.973 [DEBUG] [Thread-24225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:09:15.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:09:15.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')
2026-04-15T19:09:15.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
2026-04-15T19:09:16.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:09:16.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:09:16.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:09:16.009 [DEBUG] [Thread-24225] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:09:20.391 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:09:20.392 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:09:21.110 [DEBUG] [Thread-24227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:09:36.157 [DEBUG] [Thread-24228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:09:46.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:09:46.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:09:46.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
2026-04-15T19:09:47.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 9, 14), 4.47969, 73.9228, 0.0, 14.9634, 10.2743, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:09:47.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:09:14
2026-04-15T19:09:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:09:48.143 [DEBUG] [Thread-24229] [transport.py] [_log()] starting thread (client mode): 0xee9ad960
2026-04-15T19:09:48.143 [DEBUG] [Thread-24229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:09:48.162 [DEBUG] [Thread-24229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:09:48.162 [INFO] [Thread-24229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:09:48.166 [DEBUG] [Thread-24229] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:09:48.166 [DEBUG] [Thread-24229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:09:48.166 [DEBUG] [Thread-24229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:09:48.166 [DEBUG] [Thread-24229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:09:48.166 [DEBUG] [Thread-24229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:09:48.166 [DEBUG] [Thread-24229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:09:48.167 [DEBUG] [Thread-24229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:09:48.167 [DEBUG] [Thread-24229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:09:48.167 [DEBUG] [Thread-24229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:09:48.167 [DEBUG] [Thread-24229] [transport.py] [_log()] client lang: <none>
2026-04-15T19:09:48.167 [DEBUG] [Thread-24229] [transport.py] [_log()] server lang: <none>
2026-04-15T19:09:48.167 [DEBUG] [Thread-24229] [transport.py] [_log()] kex follows: False
2026-04-15T19:09:48.167 [DEBUG] [Thread-24229] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:09:48.167 [DEBUG] [Thread-24229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:09:48.168 [DEBUG] [Thread-24229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:09:48.168 [DEBUG] [Thread-24229] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:09:48.168 [DEBUG] [Thread-24229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:09:48.168 [DEBUG] [Thread-24229] [transport.py] [_log()] Compression: none
2026-04-15T19:09:48.168 [DEBUG] [Thread-24229] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:09:48.184 [DEBUG] [Thread-24229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:09:48.185 [DEBUG] [Thread-24229] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:09:48.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:09:48.186 [DEBUG] [Thread-24229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:09:48.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:09:48.187 [DEBUG] [Thread-24229] [transport.py] [_log()] userauth is OK
2026-04-15T19:09:48.187 [DEBUG] [Thread-24229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:09:48.187 [DEBUG] [Thread-24229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:09:48.187 [DEBUG] [Thread-24229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:09:48.188 [DEBUG] [Thread-24229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:09:48.213 [INFO] [Thread-24229] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:09:48.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:09:48.999 [DEBUG] [Thread-24229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:09:48.999 [DEBUG] [Thread-24229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:09:49.000 [DEBUG] [Thread-24229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:09:49.040 [DEBUG] [Thread-24229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:09:49.040 [DEBUG] [Thread-24229] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:09:49.043 [DEBUG] [Thread-24229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:09:49.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:09:49.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:09:49.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:09:49.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:09:49.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:09:49.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:09:49.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:09:49.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:09:49.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:09:49.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.714717 -999.00  +10.20  15.53     78   +6.60 1 1 1 1 1     0    0 3.52 -9.38 ZNESW 15.3 15.5 294.2 17.4 11.1 -24.9 11.0 -23.8 10.6 -21.5 10.9 -23.7
2026-04-15T19:09:49.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:09:49.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:09:49.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.714717
2026-04-15T19:09:49.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:09:49.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:09:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:09:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:09:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:09:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:09:14', tmtdew=4.47969, humidity=73.9228, cloud=0.0, wind=14.9634, temperature=10.2743, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:09:11.549', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.04875000000000007, -0.053500000000001435, -0.007500000000000284, -0.010249999999999204, -0.015000000000000568, -0.01425000000000054, -0.010000000000001563, -0.019000000000000128, -0.11025000000000063, -0.01699999999999946, 0.06500000000000128, 0.006249999999999645, -0.012000000000000455, 0.007999999999999119, 0.04124999999999979, 0.05649999999999977, -0.02200000000000024, 0.0012499999999988631, 0.032999999999999474, 0.04574999999999818, -0.01774999999999949, 0.051750000000000185, 0.09699999999999953, 0.033500000000000085, -0.00024999999999941735, -0.05250000000000021, 0.011000000000001009, 0.049000000000001265, 0.14850000000000207, 0.10900000000000176, 0.13674999999999926], zp_timestamp='2026-04-15T17:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:09:49.068 [DEBUG] [Thread-24229] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:09:49.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:09:49.323 [DEBUG] [Thread-24232] [transport.py] [_log()] starting thread (client mode): 0xf13664a0
2026-04-15T19:09:49.323 [DEBUG] [Thread-24232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:09:49.337 [DEBUG] [Thread-24232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:09:49.337 [INFO] [Thread-24232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:09:49.344 [DEBUG] [Thread-24232] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:09:49.345 [DEBUG] [Thread-24232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:09:49.345 [DEBUG] [Thread-24232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:09:49.345 [DEBUG] [Thread-24232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:09:49.345 [DEBUG] [Thread-24232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:09:49.345 [DEBUG] [Thread-24232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:09:49.345 [DEBUG] [Thread-24232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:09:49.345 [DEBUG] [Thread-24232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:09:49.345 [DEBUG] [Thread-24232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:09:49.345 [DEBUG] [Thread-24232] [transport.py] [_log()] client lang: <none>
2026-04-15T19:09:49.345 [DEBUG] [Thread-24232] [transport.py] [_log()] server lang: <none>
2026-04-15T19:09:49.345 [DEBUG] [Thread-24232] [transport.py] [_log()] kex follows: False
2026-04-15T19:09:49.346 [DEBUG] [Thread-24232] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:09:49.346 [DEBUG] [Thread-24232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:09:49.346 [DEBUG] [Thread-24232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:09:49.346 [DEBUG] [Thread-24232] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:09:49.346 [DEBUG] [Thread-24232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:09:49.346 [DEBUG] [Thread-24232] [transport.py] [_log()] Compression: none
2026-04-15T19:09:49.346 [DEBUG] [Thread-24232] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:09:49.420 [DEBUG] [Thread-24232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:09:49.420 [DEBUG] [Thread-24232] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:09:49.420 [DEBUG] [Thread-24232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:09:49.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:09:49.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:09:49.479 [DEBUG] [Thread-24232] [transport.py] [_log()] userauth is OK
2026-04-15T19:09:49.479 [DEBUG] [Thread-24232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:09:49.479 [DEBUG] [Thread-24232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:09:49.479 [DEBUG] [Thread-24232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:09:49.479 [DEBUG] [Thread-24232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:09:49.505 [INFO] [Thread-24232] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:09:49.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:09:49.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:09:50.377 [DEBUG] [Thread-24232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:09:50.378 [DEBUG] [Thread-24232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:09:50.426 [DEBUG] [Thread-24232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:09:50.426 [DEBUG] [Thread-24232] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:09:50.435 [DEBUG] [Thread-24232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:09:50.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:09:50.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')
2026-04-15T19:09:50.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') -> 00000000
2026-04-15T19:09:50.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:09:50.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:09:50.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:09:50.470 [DEBUG] [Thread-24232] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:09:51.187 [DEBUG] [Thread-24234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:09:55.978 [DEBUG] [Thread-24235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:10:06.229 [DEBUG] [Thread-24236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:10:08.773 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:10:12.045 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:10:17.227 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:10:20.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:10:20.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:10:20.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
2026-04-15T19:10:20.594 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:10:20.595 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:10:21.257 [DEBUG] [Thread-24237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:10:21.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 9, 49), 4.46475, 73.8124, 0.0, 14.7506, 10.5155, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:10:21.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:09:49
2026-04-15T19:10:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:10:22.591 [DEBUG] [Thread-24238] [transport.py] [_log()] starting thread (client mode): 0xee9ac7f0
2026-04-15T19:10:22.591 [DEBUG] [Thread-24238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:10:22.611 [DEBUG] [Thread-24238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:10:22.611 [INFO] [Thread-24238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:10:22.614 [DEBUG] [Thread-24238] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:10:22.614 [DEBUG] [Thread-24238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:10:22.614 [DEBUG] [Thread-24238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:10:22.615 [DEBUG] [Thread-24238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:10:22.615 [DEBUG] [Thread-24238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:10:22.615 [DEBUG] [Thread-24238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:10:22.615 [DEBUG] [Thread-24238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:10:22.615 [DEBUG] [Thread-24238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:10:22.615 [DEBUG] [Thread-24238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:10:22.615 [DEBUG] [Thread-24238] [transport.py] [_log()] client lang: <none>
2026-04-15T19:10:22.615 [DEBUG] [Thread-24238] [transport.py] [_log()] server lang: <none>
2026-04-15T19:10:22.615 [DEBUG] [Thread-24238] [transport.py] [_log()] kex follows: False
2026-04-15T19:10:22.615 [DEBUG] [Thread-24238] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:10:22.616 [DEBUG] [Thread-24238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:10:22.616 [DEBUG] [Thread-24238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:10:22.616 [DEBUG] [Thread-24238] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:10:22.616 [DEBUG] [Thread-24238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:10:22.616 [DEBUG] [Thread-24238] [transport.py] [_log()] Compression: none
2026-04-15T19:10:22.616 [DEBUG] [Thread-24238] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:10:22.634 [DEBUG] [Thread-24238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:10:22.634 [DEBUG] [Thread-24238] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:10:22.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:10:22.635 [DEBUG] [Thread-24238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:10:22.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:10:22.636 [DEBUG] [Thread-24238] [transport.py] [_log()] userauth is OK
2026-04-15T19:10:22.636 [DEBUG] [Thread-24238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:10:22.636 [DEBUG] [Thread-24238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:10:22.636 [DEBUG] [Thread-24238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:10:22.636 [DEBUG] [Thread-24238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:10:22.670 [INFO] [Thread-24238] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:10:22.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:10:22.889 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:10:25.620 [DEBUG] [Thread-24238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:10:25.620 [DEBUG] [Thread-24238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:10:25.621 [DEBUG] [Thread-24238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:10:25.661 [DEBUG] [Thread-24238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:10:25.661 [DEBUG] [Thread-24238] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:10:25.664 [DEBUG] [Thread-24238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:10:25.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:10:25.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:10:25.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:10:25.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:10:25.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:10:25.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:10:25.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:10:25.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:10:25.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:10:25.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.715064 -999.00  +10.20  15.52     78   +6.50 1 1 1 1 1     0    0 3.51 -10.10 ZNESW 13.2 15.5 303.8 18.8 11.1 -24.9 11.0 -23.8 10.6 -21.6 10.9 -23.7
2026-04-15T19:10:25.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:10:25.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:10:25.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.715064
2026-04-15T19:10:25.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:10:25.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:10:25.717 [DEBUG] [Thread-24238] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:10:25.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:10:25.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:10:25.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:10:25.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:09:49', tmtdew=4.46475, humidity=73.8124, cloud=0.0, wind=14.7506, temperature=10.5155, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:09:41.530', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047250000000000014, -0.047250000000000014, -0.020749999999999602, -0.013000000000001677, 0.0235000000000003, -0.014749999999999375, -0.030000000000001137, 0.008250000000000313, 0.010499999999998622, -0.006000000000000227, -0.07124999999999915, -0.018500000000001293, 0.09199999999999875, 0.03325000000000067, 0.03799999999999848, 0.004999999999999005, 0.01875000000000071, 0.06099999999999994, -0.02000000000000135, 0.012249999999998096, 0.07299999999999862, 0.00274999999999892, -0.07774999999999999, 0.05275000000000141, 0.023999999999999133, 0.016000000000000014, -0.05424999999999969, 0.05150000000000077, 0.06899999999999906, 0.07600000000000051, 0.12700000000000067, 0.10900000000000176, 0.03275000000000006], zp_timestamp='2026-04-15T17:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:10:25.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:10:25.980 [DEBUG] [Thread-24241] [transport.py] [_log()] starting thread (client mode): 0xf1367160
2026-04-15T19:10:25.980 [DEBUG] [Thread-24241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:10:25.994 [DEBUG] [Thread-24241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:10:25.994 [INFO] [Thread-24241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:10:26.005 [DEBUG] [Thread-24241] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:10:26.005 [DEBUG] [Thread-24241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:10:26.006 [DEBUG] [Thread-24241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:10:26.006 [DEBUG] [Thread-24241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:10:26.006 [DEBUG] [Thread-24241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:10:26.006 [DEBUG] [Thread-24241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:10:26.006 [DEBUG] [Thread-24241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:10:26.006 [DEBUG] [Thread-24241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:10:26.006 [DEBUG] [Thread-24241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:10:26.006 [DEBUG] [Thread-24241] [transport.py] [_log()] client lang: <none>
2026-04-15T19:10:26.006 [DEBUG] [Thread-24241] [transport.py] [_log()] server lang: <none>
2026-04-15T19:10:26.006 [DEBUG] [Thread-24241] [transport.py] [_log()] kex follows: False
2026-04-15T19:10:26.006 [DEBUG] [Thread-24241] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:10:26.006 [DEBUG] [Thread-24241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:10:26.007 [DEBUG] [Thread-24241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:10:26.007 [DEBUG] [Thread-24241] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:10:26.007 [DEBUG] [Thread-24241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:10:26.007 [DEBUG] [Thread-24241] [transport.py] [_log()] Compression: none
2026-04-15T19:10:26.007 [DEBUG] [Thread-24241] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:10:26.058 [DEBUG] [Thread-24241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:10:26.058 [DEBUG] [Thread-24241] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:10:26.059 [DEBUG] [Thread-24241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:10:26.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:10:26.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:10:26.115 [DEBUG] [Thread-24241] [transport.py] [_log()] userauth is OK
2026-04-15T19:10:26.115 [DEBUG] [Thread-24241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:10:26.115 [DEBUG] [Thread-24241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:10:26.115 [DEBUG] [Thread-24241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:10:26.115 [DEBUG] [Thread-24241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:10:26.135 [INFO] [Thread-24241] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:10:26.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:10:26.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:10:27.014 [DEBUG] [Thread-24241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:10:27.014 [DEBUG] [Thread-24241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:10:27.062 [DEBUG] [Thread-24241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:10:27.062 [DEBUG] [Thread-24241] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:10:27.071 [DEBUG] [Thread-24241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:10:27.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:10:27.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')
2026-04-15T19:10:27.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') -> 00000000
2026-04-15T19:10:27.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:10:27.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:10:27.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:10:27.106 [DEBUG] [Thread-24241] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:10:36.286 [DEBUG] [Thread-24243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:10:43.090 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:10:47.465 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:10:51.327 [DEBUG] [Thread-24244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:10:56.128 [DEBUG] [Thread-24245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:10:57.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:10:57.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:10:57.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
2026-04-15T19:10:58.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 10, 25), 4.48717, 73.873, 0.0, 15.9336, 10.208, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:10:58.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:10:25
2026-04-15T19:10:58.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:10:59.258 [DEBUG] [Thread-24246] [transport.py] [_log()] starting thread (client mode): 0xf13e26e0
2026-04-15T19:10:59.259 [DEBUG] [Thread-24246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:10:59.279 [DEBUG] [Thread-24246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:10:59.279 [INFO] [Thread-24246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:10:59.282 [DEBUG] [Thread-24246] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:10:59.282 [DEBUG] [Thread-24246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:10:59.282 [DEBUG] [Thread-24246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:10:59.282 [DEBUG] [Thread-24246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:10:59.282 [DEBUG] [Thread-24246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:10:59.282 [DEBUG] [Thread-24246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:10:59.282 [DEBUG] [Thread-24246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:10:59.283 [DEBUG] [Thread-24246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:10:59.283 [DEBUG] [Thread-24246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:10:59.283 [DEBUG] [Thread-24246] [transport.py] [_log()] client lang: <none>
2026-04-15T19:10:59.283 [DEBUG] [Thread-24246] [transport.py] [_log()] server lang: <none>
2026-04-15T19:10:59.283 [DEBUG] [Thread-24246] [transport.py] [_log()] kex follows: False
2026-04-15T19:10:59.283 [DEBUG] [Thread-24246] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:10:59.283 [DEBUG] [Thread-24246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:10:59.283 [DEBUG] [Thread-24246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:10:59.283 [DEBUG] [Thread-24246] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:10:59.283 [DEBUG] [Thread-24246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:10:59.284 [DEBUG] [Thread-24246] [transport.py] [_log()] Compression: none
2026-04-15T19:10:59.284 [DEBUG] [Thread-24246] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:10:59.299 [DEBUG] [Thread-24246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:10:59.299 [DEBUG] [Thread-24246] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:10:59.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:10:59.300 [DEBUG] [Thread-24246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:10:59.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:10:59.301 [DEBUG] [Thread-24246] [transport.py] [_log()] userauth is OK
2026-04-15T19:10:59.301 [DEBUG] [Thread-24246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:10:59.301 [DEBUG] [Thread-24246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:10:59.302 [DEBUG] [Thread-24246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:10:59.302 [DEBUG] [Thread-24246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:10:59.326 [INFO] [Thread-24246] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:10:59.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:11:00.116 [DEBUG] [Thread-24246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:11:00.116 [DEBUG] [Thread-24246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:11:00.117 [DEBUG] [Thread-24246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:11:00.157 [DEBUG] [Thread-24246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:11:00.157 [DEBUG] [Thread-24246] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:11:00.160 [DEBUG] [Thread-24246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:11:00.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:11:00.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:11:00.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:11:00.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:11:00.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:11:00.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:11:00.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:11:00.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:11:00.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:11:00.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.715411 -999.00  +10.20  17.90     78   +6.50 1 1 1 1 1     0    0 3.56 -10.22 ZNESW 14.6 17.9 298.4 20.3 11.1 -24.8 10.9 -23.7 10.6 -21.5 10.9 -23.6
2026-04-15T19:11:00.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:11:00.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:11:00.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.715411
2026-04-15T19:11:00.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:11:00.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:11:00.184 [DEBUG] [Thread-24246] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:11:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:11:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:11:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:11:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:10:25', tmtdew=4.48717, humidity=73.873, cloud=0.0, wind=15.9336, temperature=10.208, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:10:11.510', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047250000000000014, -0.047250000000000014, -0.020749999999999602, -0.013000000000001677, 0.0235000000000003, -0.014749999999999375, -0.030000000000001137, 0.008250000000000313, 0.010499999999998622, -0.006000000000000227, -0.07124999999999915, -0.018500000000001293, 0.09199999999999875, 0.03325000000000067, 0.03799999999999848, 0.004999999999999005, 0.01875000000000071, 0.06099999999999994, -0.02000000000000135, 0.012249999999998096, 0.07299999999999862, 0.00274999999999892, -0.07774999999999999, 0.05275000000000141, 0.023999999999999133, 0.016000000000000014, -0.05424999999999969, 0.05150000000000077, 0.06899999999999906, 0.07600000000000051, 0.12700000000000067, 0.10900000000000176, 0.03275000000000006], zp_timestamp='2026-04-15T17:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:11:00.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:11:00.444 [DEBUG] [Thread-24249] [transport.py] [_log()] starting thread (client mode): 0xee905210
2026-04-15T19:11:00.445 [DEBUG] [Thread-24249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:11:00.460 [DEBUG] [Thread-24249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:11:00.460 [INFO] [Thread-24249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:11:00.468 [DEBUG] [Thread-24249] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:11:00.468 [DEBUG] [Thread-24249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:11:00.468 [DEBUG] [Thread-24249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:11:00.468 [DEBUG] [Thread-24249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:11:00.468 [DEBUG] [Thread-24249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:11:00.468 [DEBUG] [Thread-24249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:11:00.469 [DEBUG] [Thread-24249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:11:00.469 [DEBUG] [Thread-24249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:11:00.469 [DEBUG] [Thread-24249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:11:00.469 [DEBUG] [Thread-24249] [transport.py] [_log()] client lang: <none>
2026-04-15T19:11:00.469 [DEBUG] [Thread-24249] [transport.py] [_log()] server lang: <none>
2026-04-15T19:11:00.469 [DEBUG] [Thread-24249] [transport.py] [_log()] kex follows: False
2026-04-15T19:11:00.469 [DEBUG] [Thread-24249] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:11:00.469 [DEBUG] [Thread-24249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:11:00.469 [DEBUG] [Thread-24249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:11:00.469 [DEBUG] [Thread-24249] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:11:00.469 [DEBUG] [Thread-24249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:11:00.470 [DEBUG] [Thread-24249] [transport.py] [_log()] Compression: none
2026-04-15T19:11:00.470 [DEBUG] [Thread-24249] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:11:00.527 [DEBUG] [Thread-24249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:11:00.527 [DEBUG] [Thread-24249] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:11:00.528 [DEBUG] [Thread-24249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:11:00.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:11:00.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:11:00.583 [DEBUG] [Thread-24249] [transport.py] [_log()] userauth is OK
2026-04-15T19:11:00.583 [DEBUG] [Thread-24249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:11:00.583 [DEBUG] [Thread-24249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:11:00.583 [DEBUG] [Thread-24249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:11:00.583 [DEBUG] [Thread-24249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:11:00.609 [INFO] [Thread-24249] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:11:00.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:11:00.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:11:01.447 [DEBUG] [Thread-24249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:11:01.447 [DEBUG] [Thread-24249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:11:01.495 [DEBUG] [Thread-24249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:11:01.495 [DEBUG] [Thread-24249] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:11:01.504 [DEBUG] [Thread-24249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:11:01.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:11:01.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')
2026-04-15T19:11:01.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
2026-04-15T19:11:01.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:11:01.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:11:01.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:11:01.537 [DEBUG] [Thread-24249] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:11:06.357 [DEBUG] [Thread-24251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:11:06.961 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:11:11.651 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:11:18.477 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:11:20.792 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:11:20.794 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:11:21.396 [DEBUG] [Thread-24252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:11:22.893 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:11:31.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:11:31.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:11:31.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
2026-04-15T19:11:32.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 11), 4.48821, 73.8737, 0.0, 15.7925, 10.2417, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:11:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:11:00
2026-04-15T19:11:33.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:11:33.634 [DEBUG] [Thread-24253] [transport.py] [_log()] starting thread (client mode): 0xee9adb70
2026-04-15T19:11:33.634 [DEBUG] [Thread-24253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:11:33.651 [DEBUG] [Thread-24253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:11:33.652 [INFO] [Thread-24253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:11:33.655 [DEBUG] [Thread-24253] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:11:33.655 [DEBUG] [Thread-24253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:11:33.655 [DEBUG] [Thread-24253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:11:33.655 [DEBUG] [Thread-24253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:11:33.655 [DEBUG] [Thread-24253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:11:33.655 [DEBUG] [Thread-24253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:11:33.655 [DEBUG] [Thread-24253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:11:33.655 [DEBUG] [Thread-24253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:11:33.655 [DEBUG] [Thread-24253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:11:33.655 [DEBUG] [Thread-24253] [transport.py] [_log()] client lang: <none>
2026-04-15T19:11:33.655 [DEBUG] [Thread-24253] [transport.py] [_log()] server lang: <none>
2026-04-15T19:11:33.656 [DEBUG] [Thread-24253] [transport.py] [_log()] kex follows: False
2026-04-15T19:11:33.656 [DEBUG] [Thread-24253] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:11:33.656 [DEBUG] [Thread-24253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:11:33.656 [DEBUG] [Thread-24253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:11:33.656 [DEBUG] [Thread-24253] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:11:33.656 [DEBUG] [Thread-24253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:11:33.656 [DEBUG] [Thread-24253] [transport.py] [_log()] Compression: none
2026-04-15T19:11:33.656 [DEBUG] [Thread-24253] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:11:33.673 [DEBUG] [Thread-24253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:11:33.673 [DEBUG] [Thread-24253] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:11:33.674 [DEBUG] [Thread-24253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:11:33.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:11:33.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:11:33.675 [DEBUG] [Thread-24253] [transport.py] [_log()] userauth is OK
2026-04-15T19:11:33.675 [DEBUG] [Thread-24253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:11:33.675 [DEBUG] [Thread-24253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:11:33.675 [DEBUG] [Thread-24253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:11:33.675 [DEBUG] [Thread-24253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:11:33.692 [INFO] [Thread-24253] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:11:33.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:11:34.494 [DEBUG] [Thread-24253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:11:34.494 [DEBUG] [Thread-24253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:11:34.495 [DEBUG] [Thread-24253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:11:34.536 [DEBUG] [Thread-24253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:11:34.536 [DEBUG] [Thread-24253] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:11:34.538 [DEBUG] [Thread-24253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:11:34.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:11:34.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:11:34.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:11:34.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:11:34.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:11:34.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:11:34.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:11:34.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:11:34.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:11:34.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.715758 -999.00  +10.20  14.23     78   +6.60 1 1 1 1 1     0    0 3.50 -9.92 ZNESW 14.6 14.2 301.8 19.3 11.1 -24.9 10.9 -23.8 10.6 -21.5 10.9 -23.8
2026-04-15T19:11:34.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:11:34.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:11:34.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.715758
2026-04-15T19:11:34.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:11:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:11:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:11:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:11:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:11:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:11:00', tmtdew=4.48821, humidity=73.8737, cloud=0.0, wind=15.7925, temperature=10.2417, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:10:41.491', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047250000000000014, -0.047250000000000014, -0.020749999999999602, -0.013000000000001677, 0.0235000000000003, -0.014749999999999375, -0.030000000000001137, 0.008250000000000313, 0.010499999999998622, -0.006000000000000227, -0.07124999999999915, -0.018500000000001293, 0.09199999999999875, 0.03325000000000067, 0.03799999999999848, 0.004999999999999005, 0.01875000000000071, 0.06099999999999994, -0.02000000000000135, 0.012249999999998096, 0.07299999999999862, 0.00274999999999892, -0.07774999999999999, 0.05275000000000141, 0.023999999999999133, 0.016000000000000014, -0.05424999999999969, 0.05150000000000077, 0.06899999999999906, 0.07600000000000051, 0.12700000000000067, 0.10900000000000176, 0.03275000000000006], zp_timestamp='2026-04-15T17:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:11:34.558 [DEBUG] [Thread-24253] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:11:34.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:11:34.775 [DEBUG] [Thread-24256] [transport.py] [_log()] starting thread (client mode): 0xee91d270
2026-04-15T19:11:34.775 [DEBUG] [Thread-24256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:11:34.789 [DEBUG] [Thread-24256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:11:34.789 [INFO] [Thread-24256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:11:34.796 [DEBUG] [Thread-24256] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:11:34.796 [DEBUG] [Thread-24256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:11:34.796 [DEBUG] [Thread-24256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] client lang: <none>
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] server lang: <none>
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] kex follows: False
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] Compression: none
2026-04-15T19:11:34.797 [DEBUG] [Thread-24256] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:11:34.854 [DEBUG] [Thread-24256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:11:34.854 [DEBUG] [Thread-24256] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:11:34.855 [DEBUG] [Thread-24256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:11:34.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:11:34.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:11:34.910 [DEBUG] [Thread-24256] [transport.py] [_log()] userauth is OK
2026-04-15T19:11:34.910 [DEBUG] [Thread-24256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:11:34.911 [DEBUG] [Thread-24256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:11:34.911 [DEBUG] [Thread-24256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:11:34.911 [DEBUG] [Thread-24256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:11:34.933 [INFO] [Thread-24256] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:11:34.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:11:34.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:11:35.736 [DEBUG] [Thread-24256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:11:35.737 [DEBUG] [Thread-24256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:11:35.785 [DEBUG] [Thread-24256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:11:35.785 [DEBUG] [Thread-24256] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:11:35.794 [DEBUG] [Thread-24256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:11:35.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:11:35.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')
2026-04-15T19:11:35.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') -> 00000000
2026-04-15T19:11:35.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:11:35.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:11:35.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:11:35.829 [DEBUG] [Thread-24256] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:11:36.426 [DEBUG] [Thread-24258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:11:51.464 [DEBUG] [Thread-24259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:11:56.283 [DEBUG] [Thread-24260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:12:05.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:12:05.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:12:05.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
2026-04-15T19:12:06.496 [DEBUG] [Thread-24261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:12:07.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 11, 36), 4.46551, 73.8146, 0.0, 19.8662, 10.5505, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:12:07.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:11:36
2026-04-15T19:12:07.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:12:07.943 [DEBUG] [Thread-24262] [transport.py] [_log()] starting thread (client mode): 0xf13cb3d0
2026-04-15T19:12:07.943 [DEBUG] [Thread-24262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:12:07.963 [DEBUG] [Thread-24262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:12:07.963 [INFO] [Thread-24262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:12:07.966 [DEBUG] [Thread-24262] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:12:07.966 [DEBUG] [Thread-24262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:12:07.966 [DEBUG] [Thread-24262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:12:07.966 [DEBUG] [Thread-24262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:12:07.966 [DEBUG] [Thread-24262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:12:07.966 [DEBUG] [Thread-24262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:12:07.966 [DEBUG] [Thread-24262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:12:07.966 [DEBUG] [Thread-24262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:12:07.966 [DEBUG] [Thread-24262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:12:07.967 [DEBUG] [Thread-24262] [transport.py] [_log()] client lang: <none>
2026-04-15T19:12:07.967 [DEBUG] [Thread-24262] [transport.py] [_log()] server lang: <none>
2026-04-15T19:12:07.967 [DEBUG] [Thread-24262] [transport.py] [_log()] kex follows: False
2026-04-15T19:12:07.967 [DEBUG] [Thread-24262] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:12:07.967 [DEBUG] [Thread-24262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:12:07.967 [DEBUG] [Thread-24262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:12:07.967 [DEBUG] [Thread-24262] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:12:07.967 [DEBUG] [Thread-24262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:12:07.967 [DEBUG] [Thread-24262] [transport.py] [_log()] Compression: none
2026-04-15T19:12:07.967 [DEBUG] [Thread-24262] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:12:07.984 [DEBUG] [Thread-24262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:12:07.984 [DEBUG] [Thread-24262] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:12:07.984 [DEBUG] [Thread-24262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:12:07.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:12:07.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:12:07.985 [DEBUG] [Thread-24262] [transport.py] [_log()] userauth is OK
2026-04-15T19:12:07.985 [DEBUG] [Thread-24262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:12:07.986 [DEBUG] [Thread-24262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:12:07.986 [DEBUG] [Thread-24262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:12:07.986 [DEBUG] [Thread-24262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:12:07.999 [INFO] [Thread-24262] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:12:07.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:12:08.822 [DEBUG] [Thread-24262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:12:08.822 [DEBUG] [Thread-24262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:12:08.823 [DEBUG] [Thread-24262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:12:08.863 [DEBUG] [Thread-24262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:12:08.863 [DEBUG] [Thread-24262] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:12:08.866 [DEBUG] [Thread-24262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:12:08.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:12:08.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:12:08.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:12:08.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:12:08.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:12:08.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:12:08.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:12:08.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:12:08.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:12:08.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.716105 -999.00  +10.20  17.25     78   +6.50 1 1 1 1 1     0    0 3.44 -11.94 ZNESW 16.3 17.2 294.6 19.4 11.1 -24.8 10.9 -23.7 10.6 -21.5 10.9 -23.7
2026-04-15T19:12:08.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:12:08.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:12:08.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.716105
2026-04-15T19:12:08.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:12:08.890 [DEBUG] [Thread-24262] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:12:08.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:12:08.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:12:08.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:12:08.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:12:08.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:11:36', tmtdew=4.46551, humidity=73.8146, cloud=0.0, wind=19.8662, temperature=10.5505, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:11:11.472', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047250000000000014, -0.047250000000000014, -0.020749999999999602, -0.013000000000001677, 0.0235000000000003, -0.014749999999999375, -0.030000000000001137, 0.008250000000000313, 0.010499999999998622, -0.006000000000000227, -0.07124999999999915, -0.018500000000001293, 0.09199999999999875, 0.03325000000000067, 0.03799999999999848, 0.004999999999999005, 0.01875000000000071, 0.06099999999999994, -0.02000000000000135, 0.012249999999998096, 0.07299999999999862, 0.00274999999999892, -0.07774999999999999, 0.05275000000000141, 0.023999999999999133, 0.016000000000000014, -0.05424999999999969, 0.05150000000000077, 0.06899999999999906, 0.07600000000000051, 0.12700000000000067, 0.10900000000000176, 0.03275000000000006], zp_timestamp='2026-04-15T17:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:12:09.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:12:09.151 [DEBUG] [Thread-24265] [transport.py] [_log()] starting thread (client mode): 0xee91ed40
2026-04-15T19:12:09.151 [DEBUG] [Thread-24265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:12:09.166 [DEBUG] [Thread-24265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:12:09.166 [INFO] [Thread-24265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:12:09.173 [DEBUG] [Thread-24265] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:12:09.173 [DEBUG] [Thread-24265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:12:09.173 [DEBUG] [Thread-24265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:12:09.173 [DEBUG] [Thread-24265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:12:09.174 [DEBUG] [Thread-24265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:12:09.174 [DEBUG] [Thread-24265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:12:09.174 [DEBUG] [Thread-24265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:12:09.174 [DEBUG] [Thread-24265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:12:09.174 [DEBUG] [Thread-24265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:12:09.174 [DEBUG] [Thread-24265] [transport.py] [_log()] client lang: <none>
2026-04-15T19:12:09.174 [DEBUG] [Thread-24265] [transport.py] [_log()] server lang: <none>
2026-04-15T19:12:09.174 [DEBUG] [Thread-24265] [transport.py] [_log()] kex follows: False
2026-04-15T19:12:09.174 [DEBUG] [Thread-24265] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:12:09.174 [DEBUG] [Thread-24265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:12:09.174 [DEBUG] [Thread-24265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:12:09.175 [DEBUG] [Thread-24265] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:12:09.175 [DEBUG] [Thread-24265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:12:09.175 [DEBUG] [Thread-24265] [transport.py] [_log()] Compression: none
2026-04-15T19:12:09.175 [DEBUG] [Thread-24265] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:12:09.233 [DEBUG] [Thread-24265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:12:09.233 [DEBUG] [Thread-24265] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:12:09.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:12:09.234 [DEBUG] [Thread-24265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:12:09.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:12:09.289 [DEBUG] [Thread-24265] [transport.py] [_log()] userauth is OK
2026-04-15T19:12:09.290 [DEBUG] [Thread-24265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:12:09.290 [DEBUG] [Thread-24265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:12:09.290 [DEBUG] [Thread-24265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:12:09.290 [DEBUG] [Thread-24265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:12:09.315 [INFO] [Thread-24265] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:12:09.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:12:09.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:12:10.150 [DEBUG] [Thread-24265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:12:10.150 [DEBUG] [Thread-24265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:12:10.198 [DEBUG] [Thread-24265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:12:10.198 [DEBUG] [Thread-24265] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:12:10.207 [DEBUG] [Thread-24265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:12:10.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:12:10.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')
2026-04-15T19:12:10.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
2026-04-15T19:12:10.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:12:10.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:12:10.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:12:10.241 [DEBUG] [Thread-24265] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:12:20.995 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:12:20.996 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:12:21.525 [DEBUG] [Thread-24267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:12:33.395 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:12:36.566 [DEBUG] [Thread-24268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:12:37.513 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:12:40.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:12:40.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:12:40.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
2026-04-15T19:12:41.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 12, 12), 4.49463, 73.841, 0.0, 14.9803, 10.1921, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:12:41.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:12:12
2026-04-15T19:12:41.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:12:42.316 [DEBUG] [Thread-24269] [transport.py] [_log()] starting thread (client mode): 0xee9ad570
2026-04-15T19:12:42.316 [DEBUG] [Thread-24269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:12:42.337 [DEBUG] [Thread-24269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:12:42.337 [INFO] [Thread-24269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:12:42.340 [DEBUG] [Thread-24269] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:12:42.340 [DEBUG] [Thread-24269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:12:42.340 [DEBUG] [Thread-24269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:12:42.340 [DEBUG] [Thread-24269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:12:42.340 [DEBUG] [Thread-24269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:12:42.340 [DEBUG] [Thread-24269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:12:42.340 [DEBUG] [Thread-24269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:12:42.341 [DEBUG] [Thread-24269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:12:42.341 [DEBUG] [Thread-24269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:12:42.341 [DEBUG] [Thread-24269] [transport.py] [_log()] client lang: <none>
2026-04-15T19:12:42.341 [DEBUG] [Thread-24269] [transport.py] [_log()] server lang: <none>
2026-04-15T19:12:42.341 [DEBUG] [Thread-24269] [transport.py] [_log()] kex follows: False
2026-04-15T19:12:42.341 [DEBUG] [Thread-24269] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:12:42.341 [DEBUG] [Thread-24269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:12:42.341 [DEBUG] [Thread-24269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:12:42.341 [DEBUG] [Thread-24269] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:12:42.341 [DEBUG] [Thread-24269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:12:42.341 [DEBUG] [Thread-24269] [transport.py] [_log()] Compression: none
2026-04-15T19:12:42.341 [DEBUG] [Thread-24269] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:12:42.358 [DEBUG] [Thread-24269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:12:42.358 [DEBUG] [Thread-24269] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:12:42.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:12:42.359 [DEBUG] [Thread-24269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:12:42.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:12:42.359 [DEBUG] [Thread-24269] [transport.py] [_log()] userauth is OK
2026-04-15T19:12:42.360 [DEBUG] [Thread-24269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:12:42.360 [DEBUG] [Thread-24269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:12:42.360 [DEBUG] [Thread-24269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:12:42.360 [DEBUG] [Thread-24269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:12:42.381 [INFO] [Thread-24269] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:12:42.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:12:43.168 [DEBUG] [Thread-24269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:12:43.168 [DEBUG] [Thread-24269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:12:43.168 [DEBUG] [Thread-24269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:12:43.209 [DEBUG] [Thread-24269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:12:43.209 [DEBUG] [Thread-24269] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:12:43.212 [DEBUG] [Thread-24269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:12:43.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:12:43.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:12:43.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:12:43.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:12:43.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:12:43.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:12:43.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:12:43.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:12:43.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:12:43.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.716800 -999.00  +10.20  16.01     78   +6.50 1 1 1 1 1     0    0 3.44 -12.83 ZNESW 15.4 16.0 295.4 19.1 11.1 -24.8 10.9 -23.6 10.6 -21.5 10.8 -23.6
2026-04-15T19:12:43.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:12:43.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:12:43.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.716800
2026-04-15T19:12:43.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:12:43.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:12:43.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:12:43.237 [DEBUG] [Thread-24269] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:12:43.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:12:43.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:12:43.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:12:12', tmtdew=4.49463, humidity=73.841, cloud=0.0, wind=14.9803, temperature=10.1921, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:12:11.520', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047250000000000014, -0.047250000000000014, -0.020749999999999602, -0.013000000000001677, 0.0235000000000003, -0.014749999999999375, -0.030000000000001137, 0.008250000000000313, 0.010499999999998622, -0.006000000000000227, -0.07124999999999915, -0.018500000000001293, 0.09199999999999875, 0.03325000000000067, 0.03799999999999848, 0.004999999999999005, 0.01875000000000071, 0.06099999999999994, -0.02000000000000135, 0.012249999999998096, 0.07299999999999862, 0.00274999999999892, -0.07774999999999999, 0.05275000000000141, 0.023999999999999133, 0.016000000000000014, -0.05424999999999969, 0.05150000000000077, 0.06899999999999906, 0.07600000000000051, 0.12700000000000067, 0.10900000000000176, 0.03275000000000006], zp_timestamp='2026-04-15T17:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:12:43.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:12:43.493 [DEBUG] [Thread-24272] [transport.py] [_log()] starting thread (client mode): 0xf13c9c30
2026-04-15T19:12:43.493 [DEBUG] [Thread-24272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:12:43.507 [DEBUG] [Thread-24272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:12:43.507 [INFO] [Thread-24272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:12:43.514 [DEBUG] [Thread-24272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:12:43.514 [DEBUG] [Thread-24272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:12:43.514 [DEBUG] [Thread-24272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:12:43.514 [DEBUG] [Thread-24272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:12:43.514 [DEBUG] [Thread-24272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:12:43.515 [DEBUG] [Thread-24272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:12:43.515 [DEBUG] [Thread-24272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:12:43.515 [DEBUG] [Thread-24272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:12:43.515 [DEBUG] [Thread-24272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:12:43.515 [DEBUG] [Thread-24272] [transport.py] [_log()] client lang: <none>
2026-04-15T19:12:43.515 [DEBUG] [Thread-24272] [transport.py] [_log()] server lang: <none>
2026-04-15T19:12:43.515 [DEBUG] [Thread-24272] [transport.py] [_log()] kex follows: False
2026-04-15T19:12:43.515 [DEBUG] [Thread-24272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:12:43.515 [DEBUG] [Thread-24272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:12:43.515 [DEBUG] [Thread-24272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:12:43.515 [DEBUG] [Thread-24272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:12:43.515 [DEBUG] [Thread-24272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:12:43.516 [DEBUG] [Thread-24272] [transport.py] [_log()] Compression: none
2026-04-15T19:12:43.516 [DEBUG] [Thread-24272] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:12:43.575 [DEBUG] [Thread-24272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:12:43.576 [DEBUG] [Thread-24272] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:12:43.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:12:43.576 [DEBUG] [Thread-24272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:12:43.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:12:43.632 [DEBUG] [Thread-24272] [transport.py] [_log()] userauth is OK
2026-04-15T19:12:43.633 [DEBUG] [Thread-24272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:12:43.633 [DEBUG] [Thread-24272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:12:43.633 [DEBUG] [Thread-24272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:12:43.633 [DEBUG] [Thread-24272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:12:43.658 [INFO] [Thread-24272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:12:43.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:12:43.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:12:44.523 [DEBUG] [Thread-24272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:12:44.524 [DEBUG] [Thread-24272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:12:44.571 [DEBUG] [Thread-24272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:12:44.571 [DEBUG] [Thread-24272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:12:44.580 [DEBUG] [Thread-24272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:12:44.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:12:44.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')
2026-04-15T19:12:44.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
2026-04-15T19:12:44.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:12:44.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:12:44.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:12:44.628 [DEBUG] [Thread-24272] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:12:51.595 [DEBUG] [Thread-24274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:12:56.439 [DEBUG] [Thread-24275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:13:06.636 [DEBUG] [Thread-24276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:13:14.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:13:14.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:13:14.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
2026-04-15T19:13:15.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 12, 46), 4.51635, 73.5501, 0.0, 18.3492, 10.518, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:13:15.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:12:46
2026-04-15T19:13:16.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:13:16.799 [DEBUG] [Thread-24277] [transport.py] [_log()] starting thread (client mode): 0xf13363e0
2026-04-15T19:13:16.799 [DEBUG] [Thread-24277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:13:16.818 [DEBUG] [Thread-24277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:13:16.818 [INFO] [Thread-24277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:13:16.822 [DEBUG] [Thread-24277] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:13:16.822 [DEBUG] [Thread-24277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:13:16.822 [DEBUG] [Thread-24277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:13:16.822 [DEBUG] [Thread-24277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:13:16.822 [DEBUG] [Thread-24277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:13:16.822 [DEBUG] [Thread-24277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:13:16.822 [DEBUG] [Thread-24277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:13:16.822 [DEBUG] [Thread-24277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:13:16.823 [DEBUG] [Thread-24277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:13:16.823 [DEBUG] [Thread-24277] [transport.py] [_log()] client lang: <none>
2026-04-15T19:13:16.823 [DEBUG] [Thread-24277] [transport.py] [_log()] server lang: <none>
2026-04-15T19:13:16.823 [DEBUG] [Thread-24277] [transport.py] [_log()] kex follows: False
2026-04-15T19:13:16.823 [DEBUG] [Thread-24277] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:13:16.823 [DEBUG] [Thread-24277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:13:16.823 [DEBUG] [Thread-24277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:13:16.823 [DEBUG] [Thread-24277] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:13:16.823 [DEBUG] [Thread-24277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:13:16.823 [DEBUG] [Thread-24277] [transport.py] [_log()] Compression: none
2026-04-15T19:13:16.823 [DEBUG] [Thread-24277] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:13:16.840 [DEBUG] [Thread-24277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:13:16.840 [DEBUG] [Thread-24277] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:13:16.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:13:16.841 [DEBUG] [Thread-24277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:13:16.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:13:16.842 [DEBUG] [Thread-24277] [transport.py] [_log()] userauth is OK
2026-04-15T19:13:16.842 [DEBUG] [Thread-24277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:13:16.842 [DEBUG] [Thread-24277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:13:16.843 [DEBUG] [Thread-24277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:13:16.843 [DEBUG] [Thread-24277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:13:16.861 [INFO] [Thread-24277] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:13:16.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:13:17.680 [DEBUG] [Thread-24277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:13:17.681 [DEBUG] [Thread-24277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:13:17.681 [DEBUG] [Thread-24277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:13:17.721 [DEBUG] [Thread-24277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:13:17.721 [DEBUG] [Thread-24277] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:13:17.724 [DEBUG] [Thread-24277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:13:17.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:13:17.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:13:17.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:13:17.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:13:17.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:13:17.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:13:17.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:13:17.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:13:17.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:13:17.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.717147 -999.00  +10.20  13.98     78   +6.50 1 1 1 1 1     0    0 3.45 -13.84 ZNESW 16.9 14.0 298.0 17.2 11.0 -24.8 10.9 -23.6 10.6 -21.4 10.9 -23.6
2026-04-15T19:13:17.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:13:17.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:13:17.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.717147
2026-04-15T19:13:17.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:13:17.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:13:17.749 [DEBUG] [Thread-24277] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:13:17.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:13:17.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:13:17.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:13:17.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:12:46', tmtdew=4.51635, humidity=73.5501, cloud=0.0, wind=18.3492, temperature=10.518, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:12:41.501', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047250000000000014, -0.047250000000000014, -0.020749999999999602, -0.013000000000001677, 0.0235000000000003, -0.014749999999999375, -0.030000000000001137, 0.008250000000000313, 0.010499999999998622, -0.006000000000000227, -0.07124999999999915, -0.018500000000001293, 0.09199999999999875, 0.03325000000000067, 0.03799999999999848, 0.004999999999999005, 0.01875000000000071, 0.06099999999999994, -0.02000000000000135, 0.012249999999998096, 0.07299999999999862, 0.00274999999999892, -0.07774999999999999, 0.05275000000000141, 0.023999999999999133, 0.016000000000000014, -0.05424999999999969, 0.05150000000000077, 0.06899999999999906, 0.07600000000000051, 0.12700000000000067, 0.10900000000000176, 0.03275000000000006], zp_timestamp='2026-04-15T17:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:13:17.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:13:18.000 [DEBUG] [Thread-24280] [transport.py] [_log()] starting thread (client mode): 0xf13ff4c0
2026-04-15T19:13:18.000 [DEBUG] [Thread-24280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:13:18.018 [DEBUG] [Thread-24280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:13:18.018 [INFO] [Thread-24280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:13:18.025 [DEBUG] [Thread-24280] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:13:18.025 [DEBUG] [Thread-24280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:13:18.025 [DEBUG] [Thread-24280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:13:18.025 [DEBUG] [Thread-24280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:13:18.025 [DEBUG] [Thread-24280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:13:18.025 [DEBUG] [Thread-24280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:13:18.025 [DEBUG] [Thread-24280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:13:18.025 [DEBUG] [Thread-24280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:13:18.025 [DEBUG] [Thread-24280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:13:18.026 [DEBUG] [Thread-24280] [transport.py] [_log()] client lang: <none>
2026-04-15T19:13:18.026 [DEBUG] [Thread-24280] [transport.py] [_log()] server lang: <none>
2026-04-15T19:13:18.026 [DEBUG] [Thread-24280] [transport.py] [_log()] kex follows: False
2026-04-15T19:13:18.026 [DEBUG] [Thread-24280] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:13:18.026 [DEBUG] [Thread-24280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:13:18.026 [DEBUG] [Thread-24280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:13:18.026 [DEBUG] [Thread-24280] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:13:18.026 [DEBUG] [Thread-24280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:13:18.026 [DEBUG] [Thread-24280] [transport.py] [_log()] Compression: none
2026-04-15T19:13:18.026 [DEBUG] [Thread-24280] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:13:18.082 [DEBUG] [Thread-24280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:13:18.083 [DEBUG] [Thread-24280] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:13:18.083 [DEBUG] [Thread-24280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:13:18.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:13:18.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:13:18.143 [DEBUG] [Thread-24280] [transport.py] [_log()] userauth is OK
2026-04-15T19:13:18.144 [DEBUG] [Thread-24280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:13:18.144 [DEBUG] [Thread-24280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:13:18.144 [DEBUG] [Thread-24280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:13:18.144 [DEBUG] [Thread-24280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:13:18.166 [INFO] [Thread-24280] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:13:18.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:13:18.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:13:19.063 [DEBUG] [Thread-24280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:13:19.063 [DEBUG] [Thread-24280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:13:19.113 [DEBUG] [Thread-24280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:13:19.113 [DEBUG] [Thread-24280] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:13:19.125 [DEBUG] [Thread-24280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:13:19.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:13: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')
2026-04-15T19:13:19.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
2026-04-15T19:13:19.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:13:19.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:13:19.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:13:19.160 [DEBUG] [Thread-24280] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:13:21.196 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:13:21.197 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:13:21.666 [DEBUG] [Thread-24282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:13:36.702 [DEBUG] [Thread-24283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:13:49.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:13:49.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:13:49.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
2026-04-15T19:13:50.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 13, 22), 4.46949, 73.7087, 0.0, 16.5686, 10.1593, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:13:50.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:13:22
2026-04-15T19:13:50.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:13:51.211 [DEBUG] [Thread-24284] [transport.py] [_log()] starting thread (client mode): 0xf13fca00
2026-04-15T19:13:51.212 [DEBUG] [Thread-24284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:13:51.231 [DEBUG] [Thread-24284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:13:51.231 [INFO] [Thread-24284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:13:51.234 [DEBUG] [Thread-24284] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:13:51.234 [DEBUG] [Thread-24284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:13:51.234 [DEBUG] [Thread-24284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:13:51.234 [DEBUG] [Thread-24284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:13:51.234 [DEBUG] [Thread-24284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:13:51.234 [DEBUG] [Thread-24284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:13:51.234 [DEBUG] [Thread-24284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:13:51.234 [DEBUG] [Thread-24284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:13:51.235 [DEBUG] [Thread-24284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:13:51.235 [DEBUG] [Thread-24284] [transport.py] [_log()] client lang: <none>
2026-04-15T19:13:51.235 [DEBUG] [Thread-24284] [transport.py] [_log()] server lang: <none>
2026-04-15T19:13:51.235 [DEBUG] [Thread-24284] [transport.py] [_log()] kex follows: False
2026-04-15T19:13:51.235 [DEBUG] [Thread-24284] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:13:51.235 [DEBUG] [Thread-24284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:13:51.235 [DEBUG] [Thread-24284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:13:51.235 [DEBUG] [Thread-24284] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:13:51.235 [DEBUG] [Thread-24284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:13:51.235 [DEBUG] [Thread-24284] [transport.py] [_log()] Compression: none
2026-04-15T19:13:51.236 [DEBUG] [Thread-24284] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:13:51.252 [DEBUG] [Thread-24284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:13:51.252 [DEBUG] [Thread-24284] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:13:51.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:13:51.253 [DEBUG] [Thread-24284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:13:51.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:13:51.254 [DEBUG] [Thread-24284] [transport.py] [_log()] userauth is OK
2026-04-15T19:13:51.254 [DEBUG] [Thread-24284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:13:51.254 [DEBUG] [Thread-24284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:13:51.254 [DEBUG] [Thread-24284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:13:51.255 [DEBUG] [Thread-24284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:13:51.279 [INFO] [Thread-24284] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:13:51.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:13:51.732 [DEBUG] [Thread-24286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:13:52.074 [DEBUG] [Thread-24284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:13:52.075 [DEBUG] [Thread-24284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:13:52.075 [DEBUG] [Thread-24284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:13:52.116 [DEBUG] [Thread-24284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:13:52.116 [DEBUG] [Thread-24284] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:13:52.119 [DEBUG] [Thread-24284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:13:52.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:13:52.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:13:52.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:13:52.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:13:52.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:13:52.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:13:52.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:13:52.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:13:52.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:13:52.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.717494 -999.00  +10.10  15.21     78   +6.50 1 1 1 1 1     0    0 3.40 -14.23 ZNESW 14.3 15.2 302.0 20.1 11.0 -24.9 10.8 -23.6 10.6 -21.5 10.8 -23.6
2026-04-15T19:13:52.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:13:52.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:13:52.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.717494
2026-04-15T19:13:52.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:13:52.143 [DEBUG] [Thread-24284] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:13:52.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:13:52.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:13:52.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:13:52.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:13:52.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:13:22', tmtdew=4.46949, humidity=73.7087, cloud=0.0, wind=16.5686, temperature=10.1593, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:13:11.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047250000000000014, -0.047250000000000014, -0.020749999999999602, -0.013000000000001677, 0.0235000000000003, -0.014749999999999375, -0.030000000000001137, 0.008250000000000313, 0.010499999999998622, -0.006000000000000227, -0.07124999999999915, -0.018500000000001293, 0.09199999999999875, 0.03325000000000067, 0.03799999999999848, 0.004999999999999005, 0.01875000000000071, 0.06099999999999994, -0.02000000000000135, 0.012249999999998096, 0.07299999999999862, 0.00274999999999892, -0.07774999999999999, 0.05275000000000141, 0.023999999999999133, 0.016000000000000014, -0.05424999999999969, 0.05150000000000077, 0.06899999999999906, 0.07600000000000051, 0.12700000000000067, 0.10900000000000176, 0.03275000000000006], zp_timestamp='2026-04-15T17:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:13:52.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:13:52.404 [DEBUG] [Thread-24288] [transport.py] [_log()] starting thread (client mode): 0xee9af580
2026-04-15T19:13:52.404 [DEBUG] [Thread-24288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:13:52.418 [DEBUG] [Thread-24288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:13:52.418 [INFO] [Thread-24288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:13:52.425 [DEBUG] [Thread-24288] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:13:52.425 [DEBUG] [Thread-24288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:13:52.425 [DEBUG] [Thread-24288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:13:52.426 [DEBUG] [Thread-24288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:13:52.426 [DEBUG] [Thread-24288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:13:52.426 [DEBUG] [Thread-24288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:13:52.426 [DEBUG] [Thread-24288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:13:52.426 [DEBUG] [Thread-24288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:13:52.426 [DEBUG] [Thread-24288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:13:52.426 [DEBUG] [Thread-24288] [transport.py] [_log()] client lang: <none>
2026-04-15T19:13:52.426 [DEBUG] [Thread-24288] [transport.py] [_log()] server lang: <none>
2026-04-15T19:13:52.426 [DEBUG] [Thread-24288] [transport.py] [_log()] kex follows: False
2026-04-15T19:13:52.426 [DEBUG] [Thread-24288] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:13:52.426 [DEBUG] [Thread-24288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:13:52.427 [DEBUG] [Thread-24288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:13:52.427 [DEBUG] [Thread-24288] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:13:52.427 [DEBUG] [Thread-24288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:13:52.427 [DEBUG] [Thread-24288] [transport.py] [_log()] Compression: none
2026-04-15T19:13:52.427 [DEBUG] [Thread-24288] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:13:52.484 [DEBUG] [Thread-24288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:13:52.485 [DEBUG] [Thread-24288] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:13:52.485 [DEBUG] [Thread-24288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:13:52.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:13:52.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:13:52.541 [DEBUG] [Thread-24288] [transport.py] [_log()] userauth is OK
2026-04-15T19:13:52.541 [DEBUG] [Thread-24288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:13:52.541 [DEBUG] [Thread-24288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:13:52.541 [DEBUG] [Thread-24288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:13:52.541 [DEBUG] [Thread-24288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:13:52.559 [INFO] [Thread-24288] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:13:52.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:13:52.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:13:53.376 [DEBUG] [Thread-24288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:13:53.376 [DEBUG] [Thread-24288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:13:53.424 [DEBUG] [Thread-24288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:13:53.424 [DEBUG] [Thread-24288] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:13:53.433 [DEBUG] [Thread-24288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:13:53.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:13:53.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')
2026-04-15T19:13:53.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
2026-04-15T19:13:53.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:13:53.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:13:53.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:13:53.467 [DEBUG] [Thread-24288] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:13:56.584 [DEBUG] [Thread-24290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:14:02.102 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:14:06.763 [DEBUG] [Thread-24291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:14:09.897 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:14:13.999 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:14:21.397 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:14:21.398 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:14:21.806 [DEBUG] [Thread-24292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:14:23.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:14:23.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:14:23.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
2026-04-15T19:14:24.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 13, 58), 4.47829, 73.6759, 0.0, 15.2986, 10.2259, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:14:24.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:13:58
2026-04-15T19:14:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:14:25.546 [DEBUG] [Thread-24293] [transport.py] [_log()] starting thread (client mode): 0xf1336170
2026-04-15T19:14:25.546 [DEBUG] [Thread-24293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:14:25.558 [DEBUG] [Thread-24293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:14:25.558 [INFO] [Thread-24293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:14:25.561 [DEBUG] [Thread-24293] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:14:25.561 [DEBUG] [Thread-24293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:14:25.561 [DEBUG] [Thread-24293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:14:25.561 [DEBUG] [Thread-24293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:14:25.561 [DEBUG] [Thread-24293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:14:25.561 [DEBUG] [Thread-24293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:14:25.561 [DEBUG] [Thread-24293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:14:25.561 [DEBUG] [Thread-24293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:14:25.561 [DEBUG] [Thread-24293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:14:25.561 [DEBUG] [Thread-24293] [transport.py] [_log()] client lang: <none>
2026-04-15T19:14:25.562 [DEBUG] [Thread-24293] [transport.py] [_log()] server lang: <none>
2026-04-15T19:14:25.562 [DEBUG] [Thread-24293] [transport.py] [_log()] kex follows: False
2026-04-15T19:14:25.562 [DEBUG] [Thread-24293] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:14:25.562 [DEBUG] [Thread-24293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:14:25.562 [DEBUG] [Thread-24293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:14:25.562 [DEBUG] [Thread-24293] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:14:25.562 [DEBUG] [Thread-24293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:14:25.562 [DEBUG] [Thread-24293] [transport.py] [_log()] Compression: none
2026-04-15T19:14:25.562 [DEBUG] [Thread-24293] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:14:25.575 [DEBUG] [Thread-24293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:14:25.575 [DEBUG] [Thread-24293] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:14:25.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:14:25.576 [DEBUG] [Thread-24293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:14:25.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:14:25.577 [DEBUG] [Thread-24293] [transport.py] [_log()] userauth is OK
2026-04-15T19:14:25.577 [DEBUG] [Thread-24293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:14:25.577 [DEBUG] [Thread-24293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:14:25.577 [DEBUG] [Thread-24293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:14:25.577 [DEBUG] [Thread-24293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:14:25.595 [INFO] [Thread-24293] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:14:25.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:14:26.366 [DEBUG] [Thread-24293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:14:26.366 [DEBUG] [Thread-24293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:14:26.367 [DEBUG] [Thread-24293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:14:26.408 [DEBUG] [Thread-24293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:14:26.408 [DEBUG] [Thread-24293] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:14:26.410 [DEBUG] [Thread-24293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:14:26.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:14:26.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:14:26.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:14:26.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:14:26.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:14:26.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:14:26.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:14:26.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:14:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:14:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.717842 -999.00  +10.10  15.54     78   +6.50 1 1 1 1 1     0    0 3.31 -14.91 ZNESW 16.3 15.5 295.6 19.7 11.0 -24.8 10.9 -23.5 10.6 -21.5 10.8 -23.6
2026-04-15T19:14:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:14:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:14:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.717842
2026-04-15T19:14:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:14:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:14:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:14:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:14:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:14:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:13:58', tmtdew=4.47829, humidity=73.6759, cloud=0.0, wind=15.2986, temperature=10.2259, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:13:41.549', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047250000000000014, -0.047250000000000014, -0.020749999999999602, -0.013000000000001677, 0.0235000000000003, -0.014749999999999375, -0.030000000000001137, 0.008250000000000313, 0.010499999999998622, -0.006000000000000227, -0.07124999999999915, -0.018500000000001293, 0.09199999999999875, 0.03325000000000067, 0.03799999999999848, 0.004999999999999005, 0.01875000000000071, 0.06099999999999994, -0.02000000000000135, 0.012249999999998096, 0.07299999999999862, 0.00274999999999892, -0.07774999999999999, 0.05275000000000141, 0.023999999999999133, 0.016000000000000014, -0.05424999999999969, 0.05150000000000077, 0.06899999999999906, 0.07600000000000051, 0.12700000000000067, 0.10900000000000176, 0.03275000000000006], zp_timestamp='2026-04-15T17:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:14:26.429 [DEBUG] [Thread-24293] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:14:26.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:14:26.647 [DEBUG] [Thread-24296] [transport.py] [_log()] starting thread (client mode): 0xf13fd7b0
2026-04-15T19:14:26.647 [DEBUG] [Thread-24296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:14:26.662 [DEBUG] [Thread-24296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:14:26.662 [INFO] [Thread-24296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:14:26.669 [DEBUG] [Thread-24296] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:14:26.669 [DEBUG] [Thread-24296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:14:26.669 [DEBUG] [Thread-24296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:14:26.669 [DEBUG] [Thread-24296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:14:26.670 [DEBUG] [Thread-24296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:14:26.670 [DEBUG] [Thread-24296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:14:26.670 [DEBUG] [Thread-24296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:14:26.670 [DEBUG] [Thread-24296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:14:26.670 [DEBUG] [Thread-24296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:14:26.670 [DEBUG] [Thread-24296] [transport.py] [_log()] client lang: <none>
2026-04-15T19:14:26.670 [DEBUG] [Thread-24296] [transport.py] [_log()] server lang: <none>
2026-04-15T19:14:26.670 [DEBUG] [Thread-24296] [transport.py] [_log()] kex follows: False
2026-04-15T19:14:26.670 [DEBUG] [Thread-24296] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:14:26.670 [DEBUG] [Thread-24296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:14:26.670 [DEBUG] [Thread-24296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:14:26.670 [DEBUG] [Thread-24296] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:14:26.670 [DEBUG] [Thread-24296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:14:26.671 [DEBUG] [Thread-24296] [transport.py] [_log()] Compression: none
2026-04-15T19:14:26.671 [DEBUG] [Thread-24296] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:14:26.733 [DEBUG] [Thread-24296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:14:26.733 [DEBUG] [Thread-24296] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:14:26.734 [DEBUG] [Thread-24296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:14:26.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:14:26.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:14:26.791 [DEBUG] [Thread-24296] [transport.py] [_log()] userauth is OK
2026-04-15T19:14:26.792 [DEBUG] [Thread-24296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:14:26.792 [DEBUG] [Thread-24296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:14:26.792 [DEBUG] [Thread-24296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:14:26.792 [DEBUG] [Thread-24296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:14:26.809 [INFO] [Thread-24296] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:14:26.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:14:26.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:14:27.632 [DEBUG] [Thread-24296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:14:27.633 [DEBUG] [Thread-24296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:14:27.679 [DEBUG] [Thread-24296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:14:27.680 [DEBUG] [Thread-24296] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:14:27.688 [DEBUG] [Thread-24296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:14:27.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:14:27.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')
2026-04-15T19:14:27.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
2026-04-15T19:14:27.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:14:27.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:14:27.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:14:27.719 [DEBUG] [Thread-24296] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:14:36.838 [DEBUG] [Thread-24298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:14:51.884 [DEBUG] [Thread-24299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:14:56.732 [DEBUG] [Thread-24300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:14:57.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:14:57.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:14:57.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
2026-04-15T19:14:59.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 14, 34), 4.56312, 73.3186, 0.0, 15.9854, 10.5517, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:14:59.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:14:34
2026-04-15T19:14:59.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:14:59.851 [DEBUG] [Thread-24301] [transport.py] [_log()] starting thread (client mode): 0xee9acd60
2026-04-15T19:14:59.852 [DEBUG] [Thread-24301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:14:59.872 [DEBUG] [Thread-24301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:14:59.872 [INFO] [Thread-24301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:14:59.875 [DEBUG] [Thread-24301] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:14:59.876 [DEBUG] [Thread-24301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:14:59.876 [DEBUG] [Thread-24301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:14:59.876 [DEBUG] [Thread-24301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:14:59.876 [DEBUG] [Thread-24301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:14:59.876 [DEBUG] [Thread-24301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:14:59.876 [DEBUG] [Thread-24301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:14:59.876 [DEBUG] [Thread-24301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:14:59.876 [DEBUG] [Thread-24301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:14:59.876 [DEBUG] [Thread-24301] [transport.py] [_log()] client lang: <none>
2026-04-15T19:14:59.876 [DEBUG] [Thread-24301] [transport.py] [_log()] server lang: <none>
2026-04-15T19:14:59.876 [DEBUG] [Thread-24301] [transport.py] [_log()] kex follows: False
2026-04-15T19:14:59.877 [DEBUG] [Thread-24301] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:14:59.877 [DEBUG] [Thread-24301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:14:59.877 [DEBUG] [Thread-24301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:14:59.877 [DEBUG] [Thread-24301] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:14:59.877 [DEBUG] [Thread-24301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:14:59.877 [DEBUG] [Thread-24301] [transport.py] [_log()] Compression: none
2026-04-15T19:14:59.877 [DEBUG] [Thread-24301] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:14:59.897 [DEBUG] [Thread-24301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:14:59.897 [DEBUG] [Thread-24301] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:14:59.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:14:59.898 [DEBUG] [Thread-24301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:14:59.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:14:59.899 [DEBUG] [Thread-24301] [transport.py] [_log()] userauth is OK
2026-04-15T19:14:59.899 [DEBUG] [Thread-24301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:14:59.899 [DEBUG] [Thread-24301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:14:59.899 [DEBUG] [Thread-24301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:14:59.899 [DEBUG] [Thread-24301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:14:59.917 [INFO] [Thread-24301] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:14:59.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:15:00.743 [DEBUG] [Thread-24301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:15:00.743 [DEBUG] [Thread-24301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:15:00.744 [DEBUG] [Thread-24301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:15:00.784 [DEBUG] [Thread-24301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:15:00.784 [DEBUG] [Thread-24301] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:15:00.787 [DEBUG] [Thread-24301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:15:00.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:15:00.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:15:00.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:15:00.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:15:00.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:15:00.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:15:00.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:15:00.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:15:00.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:15:00.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.718189 -999.00  +10.10  16.21     77   +6.50 1 1 1 1 1     0    0 3.27 -16.52 ZNESW 15.0 16.2 302.8 21.7 11.0 -24.8 10.8 -23.5 10.5 -21.4 10.9 -23.4
2026-04-15T19:15:00.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:15:00.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:15:00.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.718189
2026-04-15T19:15:00.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:15:00.804 [DEBUG] [Thread-24301] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:15:00.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:15:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:15:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:15:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:15:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:14:34', tmtdew=4.56312, humidity=73.3186, cloud=0.0, wind=15.9854, temperature=10.5517, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:14:11.530', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047250000000000014, -0.047250000000000014, -0.020749999999999602, -0.013000000000001677, 0.0235000000000003, -0.014749999999999375, -0.030000000000001137, 0.008250000000000313, 0.010499999999998622, -0.006000000000000227, -0.07124999999999915, -0.018500000000001293, 0.09199999999999875, 0.03325000000000067, 0.03799999999999848, 0.004999999999999005, 0.01875000000000071, 0.06099999999999994, -0.02000000000000135, 0.012249999999998096, 0.07299999999999862, 0.00274999999999892, -0.07774999999999999, 0.05275000000000141, 0.023999999999999133, 0.016000000000000014, -0.05424999999999969, 0.05150000000000077, 0.06899999999999906, 0.07600000000000051, 0.12700000000000067, 0.10900000000000176, 0.03275000000000006], zp_timestamp='2026-04-15T17:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:15:01.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:15:01.035 [DEBUG] [Thread-24304] [transport.py] [_log()] starting thread (client mode): 0xf1336ef0
2026-04-15T19:15:01.035 [DEBUG] [Thread-24304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:15:01.048 [DEBUG] [Thread-24304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:15:01.048 [INFO] [Thread-24304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:15:01.055 [DEBUG] [Thread-24304] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] client lang: <none>
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] server lang: <none>
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] kex follows: False
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:15:01.056 [DEBUG] [Thread-24304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:15:01.057 [DEBUG] [Thread-24304] [transport.py] [_log()] Compression: none
2026-04-15T19:15:01.057 [DEBUG] [Thread-24304] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:15:01.120 [DEBUG] [Thread-24304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:15:01.120 [DEBUG] [Thread-24304] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:15:01.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:15:01.121 [DEBUG] [Thread-24304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:15:01.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:15:01.178 [DEBUG] [Thread-24304] [transport.py] [_log()] userauth is OK
2026-04-15T19:15:01.178 [DEBUG] [Thread-24304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:15:01.178 [DEBUG] [Thread-24304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:15:01.178 [DEBUG] [Thread-24304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:15:01.178 [DEBUG] [Thread-24304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:15:01.205 [INFO] [Thread-24304] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:15:01.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:15:01.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:15:02.055 [DEBUG] [Thread-24304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:15:02.055 [DEBUG] [Thread-24304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:15:02.102 [DEBUG] [Thread-24304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:15:02.103 [DEBUG] [Thread-24304] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:15:02.111 [DEBUG] [Thread-24304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:15:02.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:15:02.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')
2026-04-15T19:15:02.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
2026-04-15T19:15:02.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:15:02.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:15:02.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:15:02.144 [DEBUG] [Thread-24304] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:15:06.915 [DEBUG] [Thread-24306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:15:21.601 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:15:21.602 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:15:21.956 [DEBUG] [Thread-24307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:15:32.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:15:32.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:15:32.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
2026-04-15T19:15:33.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 15, 9), 4.54907, 73.5767, 0.0, 15.3338, 10.2592, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:15:33.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:15:09
2026-04-15T19:15:33.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:15:34.296 [DEBUG] [Thread-24308] [transport.py] [_log()] starting thread (client mode): 0xf1335180
2026-04-15T19:15:34.296 [DEBUG] [Thread-24308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:15:34.315 [DEBUG] [Thread-24308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:15:34.315 [INFO] [Thread-24308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:15:34.318 [DEBUG] [Thread-24308] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:15:34.318 [DEBUG] [Thread-24308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:15:34.318 [DEBUG] [Thread-24308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:15:34.318 [DEBUG] [Thread-24308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:15:34.318 [DEBUG] [Thread-24308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:15:34.319 [DEBUG] [Thread-24308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:15:34.319 [DEBUG] [Thread-24308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:15:34.319 [DEBUG] [Thread-24308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:15:34.319 [DEBUG] [Thread-24308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:15:34.319 [DEBUG] [Thread-24308] [transport.py] [_log()] client lang: <none>
2026-04-15T19:15:34.319 [DEBUG] [Thread-24308] [transport.py] [_log()] server lang: <none>
2026-04-15T19:15:34.319 [DEBUG] [Thread-24308] [transport.py] [_log()] kex follows: False
2026-04-15T19:15:34.319 [DEBUG] [Thread-24308] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:15:34.319 [DEBUG] [Thread-24308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:15:34.319 [DEBUG] [Thread-24308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:15:34.319 [DEBUG] [Thread-24308] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:15:34.320 [DEBUG] [Thread-24308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:15:34.320 [DEBUG] [Thread-24308] [transport.py] [_log()] Compression: none
2026-04-15T19:15:34.320 [DEBUG] [Thread-24308] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:15:34.338 [DEBUG] [Thread-24308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:15:34.339 [DEBUG] [Thread-24308] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:15:34.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:15:34.339 [DEBUG] [Thread-24308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:15:34.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:15:34.380 [DEBUG] [Thread-24308] [transport.py] [_log()] userauth is OK
2026-04-15T19:15:34.381 [DEBUG] [Thread-24308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:15:34.381 [DEBUG] [Thread-24308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:15:34.381 [DEBUG] [Thread-24308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:15:34.381 [DEBUG] [Thread-24308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:15:34.417 [INFO] [Thread-24308] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:15:34.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:15:35.182 [DEBUG] [Thread-24308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:15:35.183 [DEBUG] [Thread-24308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:15:35.183 [DEBUG] [Thread-24308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:15:35.224 [DEBUG] [Thread-24308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:15:35.224 [DEBUG] [Thread-24308] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:15:35.226 [DEBUG] [Thread-24308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:15:35.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:15:35.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:15:35.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:15:35.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:15:35.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:15:35.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:15:35.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:15:35.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:15:35.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:15:35.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.718536 -999.00  +10.20  12.41     78   +6.50 1 1 1 1 1     0    0 3.29 -16.82 ZNESW 12.6 12.4 310.0 15.0 11.0 -24.8 10.8 -23.5 10.5 -21.4 10.8 -23.5
2026-04-15T19:15:35.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:15:35.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:15:35.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.718536
2026-04-15T19:15:35.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:15:35.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:15:35.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:15:35.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:15:35.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:15:35.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:15:09', tmtdew=4.54907, humidity=73.5767, cloud=0.0, wind=15.3338, temperature=10.2592, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:14:41.510', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047250000000000014, -0.047250000000000014, -0.020749999999999602, -0.013000000000001677, 0.0235000000000003, -0.014749999999999375, -0.030000000000001137, 0.008250000000000313, 0.010499999999998622, -0.006000000000000227, -0.07124999999999915, -0.018500000000001293, 0.09199999999999875, 0.03325000000000067, 0.03799999999999848, 0.004999999999999005, 0.01875000000000071, 0.06099999999999994, -0.02000000000000135, 0.012249999999998096, 0.07299999999999862, 0.00274999999999892, -0.07774999999999999, 0.05275000000000141, 0.023999999999999133, 0.016000000000000014, -0.05424999999999969, 0.05150000000000077, 0.06899999999999906, 0.07600000000000051, 0.12700000000000067, 0.10900000000000176, 0.03275000000000006], zp_timestamp='2026-04-15T17:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:15:35.245 [DEBUG] [Thread-24308] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:15:35.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:15:35.459 [DEBUG] [Thread-24311] [transport.py] [_log()] starting thread (client mode): 0xf13fd5a0
2026-04-15T19:15:35.459 [DEBUG] [Thread-24311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:15:35.473 [DEBUG] [Thread-24311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:15:35.473 [INFO] [Thread-24311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:15:35.480 [DEBUG] [Thread-24311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:15:35.481 [DEBUG] [Thread-24311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:15:35.481 [DEBUG] [Thread-24311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:15:35.481 [DEBUG] [Thread-24311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:15:35.481 [DEBUG] [Thread-24311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:15:35.481 [DEBUG] [Thread-24311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:15:35.481 [DEBUG] [Thread-24311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:15:35.481 [DEBUG] [Thread-24311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:15:35.481 [DEBUG] [Thread-24311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:15:35.481 [DEBUG] [Thread-24311] [transport.py] [_log()] client lang: <none>
2026-04-15T19:15:35.481 [DEBUG] [Thread-24311] [transport.py] [_log()] server lang: <none>
2026-04-15T19:15:35.482 [DEBUG] [Thread-24311] [transport.py] [_log()] kex follows: False
2026-04-15T19:15:35.482 [DEBUG] [Thread-24311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:15:35.482 [DEBUG] [Thread-24311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:15:35.482 [DEBUG] [Thread-24311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:15:35.482 [DEBUG] [Thread-24311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:15:35.482 [DEBUG] [Thread-24311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:15:35.482 [DEBUG] [Thread-24311] [transport.py] [_log()] Compression: none
2026-04-15T19:15:35.482 [DEBUG] [Thread-24311] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:15:35.538 [DEBUG] [Thread-24311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:15:35.539 [DEBUG] [Thread-24311] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:15:35.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:15:35.539 [DEBUG] [Thread-24311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:15:35.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:15:35.596 [DEBUG] [Thread-24311] [transport.py] [_log()] userauth is OK
2026-04-15T19:15:35.596 [DEBUG] [Thread-24311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:15:35.596 [DEBUG] [Thread-24311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:15:35.596 [DEBUG] [Thread-24311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:15:35.596 [DEBUG] [Thread-24311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:15:35.621 [INFO] [Thread-24311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:15:35.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:15:35.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:15:36.454 [DEBUG] [Thread-24311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:15:36.454 [DEBUG] [Thread-24311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:15:36.463 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:15:36.502 [DEBUG] [Thread-24311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:15:36.502 [DEBUG] [Thread-24311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:15:36.511 [DEBUG] [Thread-24311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:15:36.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:15:36.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')
2026-04-15T19:15:36.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
2026-04-15T19:15:36.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:15:36.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:15:36.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:15:36.545 [DEBUG] [Thread-24311] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:15:36.988 [DEBUG] [Thread-24313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:15:47.387 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:15:51.469 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:15:52.035 [DEBUG] [Thread-24314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:15:56.879 [DEBUG] [Thread-24315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:16:06.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:16:06.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:16:06.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
2026-04-15T19:16:07.068 [DEBUG] [Thread-24316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:16:07.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 15, 45), 4.57497, 73.2528, 0.0, 18.0317, 10.519, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:16:07.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:15:45
2026-04-15T19:16:08.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:16:08.647 [DEBUG] [Thread-24317] [transport.py] [_log()] starting thread (client mode): 0xee91e9e0
2026-04-15T19:16:08.648 [DEBUG] [Thread-24317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:16:08.667 [DEBUG] [Thread-24317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:16:08.667 [INFO] [Thread-24317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:16:08.670 [DEBUG] [Thread-24317] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:16:08.670 [DEBUG] [Thread-24317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:16:08.670 [DEBUG] [Thread-24317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:16:08.670 [DEBUG] [Thread-24317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:16:08.670 [DEBUG] [Thread-24317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:16:08.670 [DEBUG] [Thread-24317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:16:08.670 [DEBUG] [Thread-24317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:16:08.670 [DEBUG] [Thread-24317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:16:08.670 [DEBUG] [Thread-24317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:16:08.671 [DEBUG] [Thread-24317] [transport.py] [_log()] client lang: <none>
2026-04-15T19:16:08.671 [DEBUG] [Thread-24317] [transport.py] [_log()] server lang: <none>
2026-04-15T19:16:08.671 [DEBUG] [Thread-24317] [transport.py] [_log()] kex follows: False
2026-04-15T19:16:08.671 [DEBUG] [Thread-24317] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:16:08.671 [DEBUG] [Thread-24317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:16:08.671 [DEBUG] [Thread-24317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:16:08.671 [DEBUG] [Thread-24317] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:16:08.671 [DEBUG] [Thread-24317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:16:08.671 [DEBUG] [Thread-24317] [transport.py] [_log()] Compression: none
2026-04-15T19:16:08.671 [DEBUG] [Thread-24317] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:16:08.686 [DEBUG] [Thread-24317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:16:08.687 [DEBUG] [Thread-24317] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:16:08.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:16:08.687 [DEBUG] [Thread-24317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:16:08.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:16:08.728 [DEBUG] [Thread-24317] [transport.py] [_log()] userauth is OK
2026-04-15T19:16:08.729 [DEBUG] [Thread-24317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:16:08.729 [DEBUG] [Thread-24317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:16:08.729 [DEBUG] [Thread-24317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:16:08.729 [DEBUG] [Thread-24317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:16:08.753 [INFO] [Thread-24317] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:16:08.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:16:09.526 [DEBUG] [Thread-24317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:16:09.526 [DEBUG] [Thread-24317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:16:09.527 [DEBUG] [Thread-24317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:16:09.567 [DEBUG] [Thread-24317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:16:09.567 [DEBUG] [Thread-24317] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:16:09.570 [DEBUG] [Thread-24317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:16:09.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:16:09.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:16:09.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:16:09.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:16:09.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:16:09.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:16:09.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:16:09.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:16:09.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:16:09.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.719230 -999.00  +10.20  12.56     78   +6.60 1 1 1 1 1     0    0 3.28 -17.70 ZNESW 14.6 12.6 305.2 18.7 11.0 -24.7 10.8 -23.4 10.5 -21.4 -999.0 -999.0
2026-04-15T19:16:09.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:16:09.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:16:09.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.719230
2026-04-15T19:16:09.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:16:09.586 [DEBUG] [Thread-24317] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:16:09.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:16:09.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:16:09.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:16:09.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:16:09.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:15:45', tmtdew=4.57497, humidity=73.2528, cloud=0.0, wind=18.0317, temperature=10.519, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:15:41.472', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047250000000000014, -0.047250000000000014, -0.020749999999999602, -0.013000000000001677, 0.0235000000000003, -0.014749999999999375, -0.030000000000001137, 0.008250000000000313, 0.010499999999998622, -0.006000000000000227, -0.07124999999999915, -0.018500000000001293, 0.09199999999999875, 0.03325000000000067, 0.03799999999999848, 0.004999999999999005, 0.01875000000000071, 0.06099999999999994, -0.02000000000000135, 0.012249999999998096, 0.07299999999999862, 0.00274999999999892, -0.07774999999999999, 0.05275000000000141, 0.023999999999999133, 0.016000000000000014, -0.05424999999999969, 0.05150000000000077, 0.06899999999999906, 0.07600000000000051, 0.12700000000000067, 0.10900000000000176, 0.03275000000000006], zp_timestamp='2026-04-15T17:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:16:09.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:16:09.845 [DEBUG] [Thread-24320] [transport.py] [_log()] starting thread (client mode): 0xf1367ee0
2026-04-15T19:16:09.846 [DEBUG] [Thread-24320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:16:09.861 [DEBUG] [Thread-24320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:16:09.861 [INFO] [Thread-24320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:16:09.868 [DEBUG] [Thread-24320] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:16:09.868 [DEBUG] [Thread-24320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:16:09.869 [DEBUG] [Thread-24320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:16:09.869 [DEBUG] [Thread-24320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:16:09.869 [DEBUG] [Thread-24320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:16:09.869 [DEBUG] [Thread-24320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:16:09.869 [DEBUG] [Thread-24320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:16:09.869 [DEBUG] [Thread-24320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:16:09.869 [DEBUG] [Thread-24320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:16:09.869 [DEBUG] [Thread-24320] [transport.py] [_log()] client lang: <none>
2026-04-15T19:16:09.869 [DEBUG] [Thread-24320] [transport.py] [_log()] server lang: <none>
2026-04-15T19:16:09.869 [DEBUG] [Thread-24320] [transport.py] [_log()] kex follows: False
2026-04-15T19:16:09.869 [DEBUG] [Thread-24320] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:16:09.870 [DEBUG] [Thread-24320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:16:09.870 [DEBUG] [Thread-24320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:16:09.870 [DEBUG] [Thread-24320] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:16:09.870 [DEBUG] [Thread-24320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:16:09.870 [DEBUG] [Thread-24320] [transport.py] [_log()] Compression: none
2026-04-15T19:16:09.870 [DEBUG] [Thread-24320] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:16:09.924 [DEBUG] [Thread-24320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:16:09.925 [DEBUG] [Thread-24320] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:16:09.925 [DEBUG] [Thread-24320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:16:09.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:16:09.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:16:09.984 [DEBUG] [Thread-24320] [transport.py] [_log()] userauth is OK
2026-04-15T19:16:09.984 [DEBUG] [Thread-24320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:16:09.984 [DEBUG] [Thread-24320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:16:09.985 [DEBUG] [Thread-24320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:16:09.985 [DEBUG] [Thread-24320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:16:10.010 [INFO] [Thread-24320] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:16:10.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:16:10.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:16:10.845 [DEBUG] [Thread-24320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:16:10.845 [DEBUG] [Thread-24320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:16:10.893 [DEBUG] [Thread-24320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:16:10.893 [DEBUG] [Thread-24320] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:16:10.901 [DEBUG] [Thread-24320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:16:10.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:16: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')
2026-04-15T19:16: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
2026-04-15T19:16:10.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:16:10.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:16:10.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:16:10.933 [DEBUG] [Thread-24320] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:16:21.819 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:16:21.820 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:16:22.099 [DEBUG] [Thread-24322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:16:37.142 [DEBUG] [Thread-24323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:16:40.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:16:40.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:16:40.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
2026-04-15T19:16:42.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 16, 20), 4.4913, 73.61, 0.0, 14.2924, 10.2262, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:16:42.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:16:20
2026-04-15T19:16:42.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:16:43.061 [DEBUG] [Thread-24324] [transport.py] [_log()] starting thread (client mode): 0xf13c8fd0
2026-04-15T19:16:43.061 [DEBUG] [Thread-24324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:16:43.080 [DEBUG] [Thread-24324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:16:43.080 [INFO] [Thread-24324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:16:43.083 [DEBUG] [Thread-24324] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:16:43.083 [DEBUG] [Thread-24324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:16:43.084 [DEBUG] [Thread-24324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:16:43.084 [DEBUG] [Thread-24324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:16:43.084 [DEBUG] [Thread-24324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:16:43.084 [DEBUG] [Thread-24324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:16:43.084 [DEBUG] [Thread-24324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:16:43.084 [DEBUG] [Thread-24324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:16:43.084 [DEBUG] [Thread-24324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:16:43.084 [DEBUG] [Thread-24324] [transport.py] [_log()] client lang: <none>
2026-04-15T19:16:43.084 [DEBUG] [Thread-24324] [transport.py] [_log()] server lang: <none>
2026-04-15T19:16:43.084 [DEBUG] [Thread-24324] [transport.py] [_log()] kex follows: False
2026-04-15T19:16:43.084 [DEBUG] [Thread-24324] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:16:43.084 [DEBUG] [Thread-24324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:16:43.085 [DEBUG] [Thread-24324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:16:43.085 [DEBUG] [Thread-24324] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:16:43.085 [DEBUG] [Thread-24324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:16:43.085 [DEBUG] [Thread-24324] [transport.py] [_log()] Compression: none
2026-04-15T19:16:43.085 [DEBUG] [Thread-24324] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:16:43.096 [DEBUG] [Thread-24324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:16:43.097 [DEBUG] [Thread-24324] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:16:43.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:16:43.097 [DEBUG] [Thread-24324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:16:43.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:16:43.098 [DEBUG] [Thread-24324] [transport.py] [_log()] userauth is OK
2026-04-15T19:16:43.098 [DEBUG] [Thread-24324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:16:43.099 [DEBUG] [Thread-24324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:16:43.099 [DEBUG] [Thread-24324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:16:43.099 [DEBUG] [Thread-24324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:16:43.122 [INFO] [Thread-24324] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:16:43.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:16:43.886 [DEBUG] [Thread-24324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:16:43.886 [DEBUG] [Thread-24324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:16:43.886 [DEBUG] [Thread-24324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:16:43.927 [DEBUG] [Thread-24324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:16:43.927 [DEBUG] [Thread-24324] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:16:43.930 [DEBUG] [Thread-24324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:16:43.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:16:43.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:16:43.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:16:43.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:16:43.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:16:43.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:16:43.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:16:43.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:16:43.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:16:43.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.719578 -999.00  +10.20  15.64     78   +6.50 1 1 1 1 1     0    0 3.25 -16.93 ZNESW 14.2 15.6 292.6 18.2 11.0 -24.8 10.8 -23.5 10.5 -21.3 10.8 -23.4
2026-04-15T19:16:43.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:16:43.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:16:43.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.719578
2026-04-15T19:16:43.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:16:43.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:16:43.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:16:43.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:16:43.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:16:43.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:16:20', tmtdew=4.4913, humidity=73.61, cloud=0.0, wind=14.2924, temperature=10.2262, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:16:11.539', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, -0.027749999999999275, -0.025750000000000384, -0.03850000000000087, 0.0259999999999998, 0.006750000000000256, -0.0129999999999999, 0.0022500000000000853, -0.03250000000000064, 0.01950000000000074, -0.04574999999999996, 0.005000000000000782, 0.07099999999999973, 0.03924999999999912, 0.04099999999999859, 0.0, 0.0072499999999990905, 0.05149999999999899, -0.017000000000001236, -0.0027500000000006963, 0.008999999999998565, -0.004250000000000753, -0.02674999999999983, 0.030250000000000554, 0.06599999999999895, 0.02149999999999963, 0.012750000000000483, 0.0649999999999995, 0.07200000000000095, 0.14800000000000146, 0.05200000000000138, 0.08800000000000097, 0.05874999999999986], zp_timestamp='2026-04-15T17:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:16:43.956 [DEBUG] [Thread-24324] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:16:44.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:16:44.210 [DEBUG] [Thread-24327] [transport.py] [_log()] starting thread (client mode): 0xf1335990
2026-04-15T19:16:44.210 [DEBUG] [Thread-24327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:16:44.224 [DEBUG] [Thread-24327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:16:44.224 [INFO] [Thread-24327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:16:44.232 [DEBUG] [Thread-24327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:16:44.232 [DEBUG] [Thread-24327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:16:44.232 [DEBUG] [Thread-24327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:16:44.233 [DEBUG] [Thread-24327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:16:44.233 [DEBUG] [Thread-24327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:16:44.233 [DEBUG] [Thread-24327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:16:44.233 [DEBUG] [Thread-24327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:16:44.233 [DEBUG] [Thread-24327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:16:44.233 [DEBUG] [Thread-24327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:16:44.233 [DEBUG] [Thread-24327] [transport.py] [_log()] client lang: <none>
2026-04-15T19:16:44.233 [DEBUG] [Thread-24327] [transport.py] [_log()] server lang: <none>
2026-04-15T19:16:44.233 [DEBUG] [Thread-24327] [transport.py] [_log()] kex follows: False
2026-04-15T19:16:44.233 [DEBUG] [Thread-24327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:16:44.233 [DEBUG] [Thread-24327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:16:44.234 [DEBUG] [Thread-24327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:16:44.234 [DEBUG] [Thread-24327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:16:44.234 [DEBUG] [Thread-24327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:16:44.234 [DEBUG] [Thread-24327] [transport.py] [_log()] Compression: none
2026-04-15T19:16:44.234 [DEBUG] [Thread-24327] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:16:44.290 [DEBUG] [Thread-24327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:16:44.290 [DEBUG] [Thread-24327] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:16:44.291 [DEBUG] [Thread-24327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:16:44.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:16:44.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:16:44.347 [DEBUG] [Thread-24327] [transport.py] [_log()] userauth is OK
2026-04-15T19:16:44.347 [DEBUG] [Thread-24327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:16:44.347 [DEBUG] [Thread-24327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:16:44.347 [DEBUG] [Thread-24327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:16:44.347 [DEBUG] [Thread-24327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:16:44.372 [INFO] [Thread-24327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:16:44.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:16:44.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:16:45.210 [DEBUG] [Thread-24327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:16:45.210 [DEBUG] [Thread-24327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:16:45.258 [DEBUG] [Thread-24327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:16:45.258 [DEBUG] [Thread-24327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:16:45.267 [DEBUG] [Thread-24327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:16:45.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:16:45.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')
2026-04-15T19:16:45.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
2026-04-15T19:16:45.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:16:45.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:16:45.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:16:45.301 [DEBUG] [Thread-24327] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:16:52.173 [DEBUG] [Thread-24329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:16:57.048 [DEBUG] [Thread-24330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:17:07.218 [DEBUG] [Thread-24331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:17:14.263 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:17:15.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:17:15.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:17:15.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
2026-04-15T19:17:16.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 16, 56), 4.54014, 73.61, 0.0, 15.2456, 10.1931, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:17:16.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:16:56
2026-04-15T19:17:16.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:17:17.443 [DEBUG] [Thread-24332] [transport.py] [_log()] starting thread (client mode): 0xf1335e10
2026-04-15T19:17:17.444 [DEBUG] [Thread-24332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:17:17.463 [DEBUG] [Thread-24332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:17:17.463 [INFO] [Thread-24332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:17:17.466 [DEBUG] [Thread-24332] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:17:17.466 [DEBUG] [Thread-24332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:17:17.466 [DEBUG] [Thread-24332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:17:17.466 [DEBUG] [Thread-24332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:17:17.466 [DEBUG] [Thread-24332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:17:17.466 [DEBUG] [Thread-24332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:17:17.466 [DEBUG] [Thread-24332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:17:17.466 [DEBUG] [Thread-24332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:17:17.466 [DEBUG] [Thread-24332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:17:17.467 [DEBUG] [Thread-24332] [transport.py] [_log()] client lang: <none>
2026-04-15T19:17:17.467 [DEBUG] [Thread-24332] [transport.py] [_log()] server lang: <none>
2026-04-15T19:17:17.467 [DEBUG] [Thread-24332] [transport.py] [_log()] kex follows: False
2026-04-15T19:17:17.467 [DEBUG] [Thread-24332] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:17:17.467 [DEBUG] [Thread-24332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:17:17.467 [DEBUG] [Thread-24332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:17:17.467 [DEBUG] [Thread-24332] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:17:17.467 [DEBUG] [Thread-24332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:17:17.467 [DEBUG] [Thread-24332] [transport.py] [_log()] Compression: none
2026-04-15T19:17:17.467 [DEBUG] [Thread-24332] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:17:17.476 [DEBUG] [Thread-24332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:17:17.476 [DEBUG] [Thread-24332] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:17:17.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:17:17.477 [DEBUG] [Thread-24332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:17:17.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:17:17.478 [DEBUG] [Thread-24332] [transport.py] [_log()] userauth is OK
2026-04-15T19:17:17.478 [DEBUG] [Thread-24332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:17:17.478 [DEBUG] [Thread-24332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:17:17.478 [DEBUG] [Thread-24332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:17:17.478 [DEBUG] [Thread-24332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:17:17.496 [INFO] [Thread-24332] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:17:17.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:17:18.626 [DEBUG] [Thread-24332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:17:18.626 [DEBUG] [Thread-24332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:17:18.626 [DEBUG] [Thread-24332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:17:18.667 [DEBUG] [Thread-24332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:17:18.667 [DEBUG] [Thread-24332] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:17:18.669 [DEBUG] [Thread-24332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:17:18.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:17:18.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:17:18.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:17:18.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:17:18.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:17:18.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:17:18.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:17:18.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:17:18.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:17:18.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.719925 -999.00  +10.20  14.09     78   +6.50 1 1 1 1 1     0    0 3.34 -15.57 ZNESW 13.7 14.1 297.2 18.2 10.9 -24.7 10.8 -23.5 10.5 -21.3 10.8 -23.4
2026-04-15T19:17:18.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:17:18.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:17:18.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.719925
2026-04-15T19:17:18.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:17:18.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:17:18.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:17:18.689 [DEBUG] [Thread-24332] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:17:18.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:17:18.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:17:18.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:16:56', tmtdew=4.54014, humidity=73.61, cloud=0.0, wind=15.2456, temperature=10.1931, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:16:41.520', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, -0.027749999999999275, -0.025750000000000384, -0.03850000000000087, 0.0259999999999998, 0.006750000000000256, -0.0129999999999999, 0.0022500000000000853, -0.03250000000000064, 0.01950000000000074, -0.04574999999999996, 0.005000000000000782, 0.07099999999999973, 0.03924999999999912, 0.04099999999999859, 0.0, 0.0072499999999990905, 0.05149999999999899, -0.017000000000001236, -0.0027500000000006963, 0.008999999999998565, -0.004250000000000753, -0.02674999999999983, 0.030250000000000554, 0.06599999999999895, 0.02149999999999963, 0.012750000000000483, 0.0649999999999995, 0.07200000000000095, 0.14800000000000146, 0.05200000000000138, 0.08800000000000097, 0.05874999999999986], zp_timestamp='2026-04-15T17:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:17:18.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:17:18.899 [DEBUG] [Thread-24335] [transport.py] [_log()] starting thread (client mode): 0xf13cae60
2026-04-15T19:17:18.899 [DEBUG] [Thread-24335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:17:18.914 [DEBUG] [Thread-24335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:17:18.914 [INFO] [Thread-24335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:17:18.921 [DEBUG] [Thread-24335] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:17:18.922 [DEBUG] [Thread-24335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:17:18.922 [DEBUG] [Thread-24335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:17:18.922 [DEBUG] [Thread-24335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:17:18.922 [DEBUG] [Thread-24335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:17:18.922 [DEBUG] [Thread-24335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:17:18.922 [DEBUG] [Thread-24335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:17:18.922 [DEBUG] [Thread-24335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:17:18.922 [DEBUG] [Thread-24335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:17:18.922 [DEBUG] [Thread-24335] [transport.py] [_log()] client lang: <none>
2026-04-15T19:17:18.922 [DEBUG] [Thread-24335] [transport.py] [_log()] server lang: <none>
2026-04-15T19:17:18.922 [DEBUG] [Thread-24335] [transport.py] [_log()] kex follows: False
2026-04-15T19:17:18.923 [DEBUG] [Thread-24335] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:17:18.923 [DEBUG] [Thread-24335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:17:18.923 [DEBUG] [Thread-24335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:17:18.923 [DEBUG] [Thread-24335] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:17:18.923 [DEBUG] [Thread-24335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:17:18.923 [DEBUG] [Thread-24335] [transport.py] [_log()] Compression: none
2026-04-15T19:17:18.923 [DEBUG] [Thread-24335] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:17:18.990 [DEBUG] [Thread-24335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:17:18.991 [DEBUG] [Thread-24335] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:17:18.991 [DEBUG] [Thread-24335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:17:18.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:17:18.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:17:19.049 [DEBUG] [Thread-24335] [transport.py] [_log()] userauth is OK
2026-04-15T19:17:19.049 [DEBUG] [Thread-24335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:17:19.049 [DEBUG] [Thread-24335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:17:19.049 [DEBUG] [Thread-24335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:17:19.049 [DEBUG] [Thread-24335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:17:19.073 [INFO] [Thread-24335] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:17:19.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:17:19.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:17:19.890 [DEBUG] [Thread-24335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:17:19.890 [DEBUG] [Thread-24335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:17:19.937 [DEBUG] [Thread-24335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:17:19.938 [DEBUG] [Thread-24335] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:17:19.946 [DEBUG] [Thread-24335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:17:19.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:17:19.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')
2026-04-15T19:17:19.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') -> 00000000
2026-04-15T19:17:19.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:17:19.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:17:19.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:17:19.979 [DEBUG] [Thread-24335] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:17:22.023 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:17:22.024 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:17:22.250 [DEBUG] [Thread-24337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:17:23.894 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:17:28.011 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:17:37.293 [DEBUG] [Thread-24338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:17:50.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:17:50.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:17:50.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
2026-04-15T19:17:51.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 17, 31), 4.52434, 73.6931, 0.0, 15.4397, 10.2098, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:17:51.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:17:31
2026-04-15T19:17:51.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:17:52.189 [DEBUG] [Thread-24339] [transport.py] [_log()] starting thread (client mode): 0xf13c9990
2026-04-15T19:17:52.189 [DEBUG] [Thread-24339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:17:52.208 [DEBUG] [Thread-24339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:17:52.209 [INFO] [Thread-24339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:17:52.212 [DEBUG] [Thread-24339] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:17:52.212 [DEBUG] [Thread-24339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:17:52.212 [DEBUG] [Thread-24339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:17:52.212 [DEBUG] [Thread-24339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:17:52.212 [DEBUG] [Thread-24339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:17:52.212 [DEBUG] [Thread-24339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:17:52.212 [DEBUG] [Thread-24339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:17:52.212 [DEBUG] [Thread-24339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:17:52.212 [DEBUG] [Thread-24339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:17:52.213 [DEBUG] [Thread-24339] [transport.py] [_log()] client lang: <none>
2026-04-15T19:17:52.213 [DEBUG] [Thread-24339] [transport.py] [_log()] server lang: <none>
2026-04-15T19:17:52.213 [DEBUG] [Thread-24339] [transport.py] [_log()] kex follows: False
2026-04-15T19:17:52.213 [DEBUG] [Thread-24339] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:17:52.213 [DEBUG] [Thread-24339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:17:52.213 [DEBUG] [Thread-24339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:17:52.213 [DEBUG] [Thread-24339] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:17:52.213 [DEBUG] [Thread-24339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:17:52.213 [DEBUG] [Thread-24339] [transport.py] [_log()] Compression: none
2026-04-15T19:17:52.213 [DEBUG] [Thread-24339] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:17:52.231 [DEBUG] [Thread-24339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:17:52.231 [DEBUG] [Thread-24339] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:17:52.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:17:52.232 [DEBUG] [Thread-24339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:17:52.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:17:52.233 [DEBUG] [Thread-24339] [transport.py] [_log()] userauth is OK
2026-04-15T19:17:52.233 [DEBUG] [Thread-24339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:17:52.233 [DEBUG] [Thread-24339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:17:52.233 [DEBUG] [Thread-24339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:17:52.234 [DEBUG] [Thread-24339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:17:52.260 [INFO] [Thread-24339] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:17:52.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:17:52.325 [DEBUG] [Thread-24341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:17:53.038 [DEBUG] [Thread-24339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:17:53.039 [DEBUG] [Thread-24339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:17:53.039 [DEBUG] [Thread-24339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:17:53.079 [DEBUG] [Thread-24339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:17:53.079 [DEBUG] [Thread-24339] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:17:53.082 [DEBUG] [Thread-24339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:17:53.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:17:53.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:17:53.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:17:53.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:17:53.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:17:53.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:17:53.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:17:53.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:17:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:17:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.720272 -999.00  +10.20  14.69     77   +6.50 1 1 1 1 1     0    0 3.33 -14.93 ZNESW 16.8 14.7 295.0 20.2 10.9 -24.7 10.8 -23.5 10.5 -21.4 10.8 -23.5
2026-04-15T19:17:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:17:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:17:53.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.720272
2026-04-15T19:17:53.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:17:53.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:17:53.108 [DEBUG] [Thread-24339] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:17:53.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:17:53.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:17:53.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:17:53.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:17:31', tmtdew=4.52434, humidity=73.6931, cloud=0.0, wind=15.4397, temperature=10.2098, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:17:11.501', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, -0.027749999999999275, -0.025750000000000384, -0.03850000000000087, 0.0259999999999998, 0.006750000000000256, -0.0129999999999999, 0.0022500000000000853, -0.03250000000000064, 0.01950000000000074, -0.04574999999999996, 0.005000000000000782, 0.07099999999999973, 0.03924999999999912, 0.04099999999999859, 0.0, 0.0072499999999990905, 0.05149999999999899, -0.017000000000001236, -0.0027500000000006963, 0.008999999999998565, -0.004250000000000753, -0.02674999999999983, 0.030250000000000554, 0.06599999999999895, 0.02149999999999963, 0.012750000000000483, 0.0649999999999995, 0.07200000000000095, 0.14800000000000146, 0.05200000000000138, 0.08800000000000097, 0.05874999999999986], zp_timestamp='2026-04-15T17:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:17:53.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:17:53.368 [DEBUG] [Thread-24343] [transport.py] [_log()] starting thread (client mode): 0xee9adf90
2026-04-15T19:17:53.368 [DEBUG] [Thread-24343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:17:53.383 [DEBUG] [Thread-24343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:17:53.383 [INFO] [Thread-24343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:17:53.390 [DEBUG] [Thread-24343] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:17:53.390 [DEBUG] [Thread-24343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:17:53.391 [DEBUG] [Thread-24343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:17:53.391 [DEBUG] [Thread-24343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:17:53.391 [DEBUG] [Thread-24343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:17:53.391 [DEBUG] [Thread-24343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:17:53.391 [DEBUG] [Thread-24343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:17:53.391 [DEBUG] [Thread-24343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:17:53.391 [DEBUG] [Thread-24343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:17:53.391 [DEBUG] [Thread-24343] [transport.py] [_log()] client lang: <none>
2026-04-15T19:17:53.392 [DEBUG] [Thread-24343] [transport.py] [_log()] server lang: <none>
2026-04-15T19:17:53.392 [DEBUG] [Thread-24343] [transport.py] [_log()] kex follows: False
2026-04-15T19:17:53.392 [DEBUG] [Thread-24343] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:17:53.392 [DEBUG] [Thread-24343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:17:53.392 [DEBUG] [Thread-24343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:17:53.392 [DEBUG] [Thread-24343] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:17:53.392 [DEBUG] [Thread-24343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:17:53.393 [DEBUG] [Thread-24343] [transport.py] [_log()] Compression: none
2026-04-15T19:17:53.393 [DEBUG] [Thread-24343] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:17:53.449 [DEBUG] [Thread-24343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:17:53.449 [DEBUG] [Thread-24343] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:17:53.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:17:53.450 [DEBUG] [Thread-24343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:17:53.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:17:53.510 [DEBUG] [Thread-24343] [transport.py] [_log()] userauth is OK
2026-04-15T19:17:53.510 [DEBUG] [Thread-24343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:17:53.510 [DEBUG] [Thread-24343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:17:53.510 [DEBUG] [Thread-24343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:17:53.511 [DEBUG] [Thread-24343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:17:53.542 [INFO] [Thread-24343] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:17:53.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:17:53.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:17:54.348 [DEBUG] [Thread-24343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:17:54.348 [DEBUG] [Thread-24343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:17:54.401 [DEBUG] [Thread-24343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:17:54.401 [DEBUG] [Thread-24343] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:17:54.412 [DEBUG] [Thread-24343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:17:54.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:17:54.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')
2026-04-15T19:17:54.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
2026-04-15T19:17:54.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:17:54.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:17:54.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:17:54.447 [DEBUG] [Thread-24343] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:17:57.198 [DEBUG] [Thread-24345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:18:07.356 [DEBUG] [Thread-24346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:18:22.225 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:18:22.226 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:18:22.399 [DEBUG] [Thread-24347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:18:24.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:18:24.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:18:24.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
2026-04-15T19:18:25.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 18, 6), 4.51013, 73.7594, 0.0, 15.3162, 10.1766, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:18:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:18:06
2026-04-15T19:18:26.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:18:26.586 [DEBUG] [Thread-24348] [transport.py] [_log()] starting thread (client mode): 0xf13c99c0
2026-04-15T19:18:26.586 [DEBUG] [Thread-24348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:18:26.606 [DEBUG] [Thread-24348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:18:26.606 [INFO] [Thread-24348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:18:26.609 [DEBUG] [Thread-24348] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:18:26.609 [DEBUG] [Thread-24348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:18:26.609 [DEBUG] [Thread-24348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:18:26.609 [DEBUG] [Thread-24348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:18:26.609 [DEBUG] [Thread-24348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:18:26.609 [DEBUG] [Thread-24348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:18:26.609 [DEBUG] [Thread-24348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:18:26.609 [DEBUG] [Thread-24348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:18:26.609 [DEBUG] [Thread-24348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:18:26.610 [DEBUG] [Thread-24348] [transport.py] [_log()] client lang: <none>
2026-04-15T19:18:26.610 [DEBUG] [Thread-24348] [transport.py] [_log()] server lang: <none>
2026-04-15T19:18:26.610 [DEBUG] [Thread-24348] [transport.py] [_log()] kex follows: False
2026-04-15T19:18:26.610 [DEBUG] [Thread-24348] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:18:26.610 [DEBUG] [Thread-24348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:18:26.610 [DEBUG] [Thread-24348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:18:26.610 [DEBUG] [Thread-24348] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:18:26.610 [DEBUG] [Thread-24348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:18:26.610 [DEBUG] [Thread-24348] [transport.py] [_log()] Compression: none
2026-04-15T19:18:26.610 [DEBUG] [Thread-24348] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:18:26.627 [DEBUG] [Thread-24348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:18:26.628 [DEBUG] [Thread-24348] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:18:26.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:18:26.628 [DEBUG] [Thread-24348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:18:26.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:18:26.629 [DEBUG] [Thread-24348] [transport.py] [_log()] userauth is OK
2026-04-15T19:18:26.629 [DEBUG] [Thread-24348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:18:26.629 [DEBUG] [Thread-24348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:18:26.630 [DEBUG] [Thread-24348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:18:26.630 [DEBUG] [Thread-24348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:18:26.650 [INFO] [Thread-24348] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:18:26.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:18:27.434 [DEBUG] [Thread-24348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:18:27.434 [DEBUG] [Thread-24348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:18:27.435 [DEBUG] [Thread-24348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:18:27.475 [DEBUG] [Thread-24348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:18:27.475 [DEBUG] [Thread-24348] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:18:27.478 [DEBUG] [Thread-24348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:18:27.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:18:27.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:18:27.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:18:27.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:18:27.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:18:27.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:18:27.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:18:27.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:18:27.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:18:27.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.720619 -999.00  +10.10  14.02     78   +6.50 1 1 1 1 1     0    0 3.33 -16.21 ZNESW 15.2 14.0 297.0 18.1 10.9 -24.7 10.8 -23.6 10.5 -21.4 10.8 -23.3
2026-04-15T19:18:27.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:18:27.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:18:27.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.720619
2026-04-15T19:18:27.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:18:27.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:18:27.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:18:27.499 [DEBUG] [Thread-24348] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:18:27.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:18:27.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:18:27.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:18:06', tmtdew=4.51013, humidity=73.7594, cloud=0.0, wind=15.3162, temperature=10.1766, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:17:41.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, -0.027749999999999275, -0.025750000000000384, -0.03850000000000087, 0.0259999999999998, 0.006750000000000256, -0.0129999999999999, 0.0022500000000000853, -0.03250000000000064, 0.01950000000000074, -0.04574999999999996, 0.005000000000000782, 0.07099999999999973, 0.03924999999999912, 0.04099999999999859, 0.0, 0.0072499999999990905, 0.05149999999999899, -0.017000000000001236, -0.0027500000000006963, 0.008999999999998565, -0.004250000000000753, -0.02674999999999983, 0.030250000000000554, 0.06599999999999895, 0.02149999999999963, 0.012750000000000483, 0.0649999999999995, 0.07200000000000095, 0.14800000000000146, 0.05200000000000138, 0.08800000000000097, 0.05874999999999986], zp_timestamp='2026-04-15T17:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:18:27.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:18:27.758 [DEBUG] [Thread-24351] [transport.py] [_log()] starting thread (client mode): 0xf13664a0
2026-04-15T19:18:27.758 [DEBUG] [Thread-24351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:18:27.772 [DEBUG] [Thread-24351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:18:27.772 [INFO] [Thread-24351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:18:27.779 [DEBUG] [Thread-24351] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:18:27.779 [DEBUG] [Thread-24351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:18:27.780 [DEBUG] [Thread-24351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:18:27.780 [DEBUG] [Thread-24351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:18:27.780 [DEBUG] [Thread-24351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:18:27.780 [DEBUG] [Thread-24351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:18:27.780 [DEBUG] [Thread-24351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:18:27.780 [DEBUG] [Thread-24351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:18:27.780 [DEBUG] [Thread-24351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:18:27.780 [DEBUG] [Thread-24351] [transport.py] [_log()] client lang: <none>
2026-04-15T19:18:27.780 [DEBUG] [Thread-24351] [transport.py] [_log()] server lang: <none>
2026-04-15T19:18:27.780 [DEBUG] [Thread-24351] [transport.py] [_log()] kex follows: False
2026-04-15T19:18:27.780 [DEBUG] [Thread-24351] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:18:27.780 [DEBUG] [Thread-24351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:18:27.781 [DEBUG] [Thread-24351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:18:27.781 [DEBUG] [Thread-24351] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:18:27.781 [DEBUG] [Thread-24351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:18:27.781 [DEBUG] [Thread-24351] [transport.py] [_log()] Compression: none
2026-04-15T19:18:27.781 [DEBUG] [Thread-24351] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:18:27.840 [DEBUG] [Thread-24351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:18:27.840 [DEBUG] [Thread-24351] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:18:27.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:18:27.841 [DEBUG] [Thread-24351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:18:27.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:18:27.901 [DEBUG] [Thread-24351] [transport.py] [_log()] userauth is OK
2026-04-15T19:18:27.901 [DEBUG] [Thread-24351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:18:27.902 [DEBUG] [Thread-24351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:18:27.902 [DEBUG] [Thread-24351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:18:27.902 [DEBUG] [Thread-24351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:18:27.927 [INFO] [Thread-24351] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:18:27.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:18:27.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:18:28.724 [DEBUG] [Thread-24351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:18:28.724 [DEBUG] [Thread-24351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:18:28.772 [DEBUG] [Thread-24351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:18:28.772 [DEBUG] [Thread-24351] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:18:28.781 [DEBUG] [Thread-24351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:18:28.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:18:28.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')
2026-04-15T19:18:28.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
2026-04-15T19:18:28.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:18:28.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:18:28.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:18:28.820 [DEBUG] [Thread-24351] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:18:37.431 [DEBUG] [Thread-24353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:18:50.519 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:18:52.477 [DEBUG] [Thread-24354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:18:57.358 [DEBUG] [Thread-24355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:18:58.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:18:58.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:18:58.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T19:19:00.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 18, 42), 4.46812, 73.7844, 0.0, 18.2786, 10.4535, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:19:00.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:18:42
2026-04-15T19:19:00.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:19:00.916 [DEBUG] [Thread-24356] [transport.py] [_log()] starting thread (client mode): 0xee9058a0
2026-04-15T19:19:00.917 [DEBUG] [Thread-24356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:19:00.937 [DEBUG] [Thread-24356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:19:00.937 [INFO] [Thread-24356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:19:00.940 [DEBUG] [Thread-24356] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:19:00.940 [DEBUG] [Thread-24356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:19:00.940 [DEBUG] [Thread-24356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:19:00.940 [DEBUG] [Thread-24356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:19:00.941 [DEBUG] [Thread-24356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:19:00.941 [DEBUG] [Thread-24356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:19:00.941 [DEBUG] [Thread-24356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:19:00.941 [DEBUG] [Thread-24356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:19:00.941 [DEBUG] [Thread-24356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:19:00.941 [DEBUG] [Thread-24356] [transport.py] [_log()] client lang: <none>
2026-04-15T19:19:00.941 [DEBUG] [Thread-24356] [transport.py] [_log()] server lang: <none>
2026-04-15T19:19:00.941 [DEBUG] [Thread-24356] [transport.py] [_log()] kex follows: False
2026-04-15T19:19:00.941 [DEBUG] [Thread-24356] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:19:00.941 [DEBUG] [Thread-24356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:19:00.941 [DEBUG] [Thread-24356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:19:00.941 [DEBUG] [Thread-24356] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:19:00.942 [DEBUG] [Thread-24356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:19:00.942 [DEBUG] [Thread-24356] [transport.py] [_log()] Compression: none
2026-04-15T19:19:00.942 [DEBUG] [Thread-24356] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:19:00.959 [DEBUG] [Thread-24356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:19:00.959 [DEBUG] [Thread-24356] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:19:00.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:19:00.960 [DEBUG] [Thread-24356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:19:00.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:19:00.961 [DEBUG] [Thread-24356] [transport.py] [_log()] userauth is OK
2026-04-15T19:19:00.961 [DEBUG] [Thread-24356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:19:00.961 [DEBUG] [Thread-24356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:19:00.961 [DEBUG] [Thread-24356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:19:00.961 [DEBUG] [Thread-24356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:19:00.984 [INFO] [Thread-24356] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:19:00.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:19:01.778 [DEBUG] [Thread-24356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:19:01.778 [DEBUG] [Thread-24356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:19:01.779 [DEBUG] [Thread-24356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:19:01.819 [DEBUG] [Thread-24356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:19:01.819 [DEBUG] [Thread-24356] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:19:01.821 [DEBUG] [Thread-24356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:19:01.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:19:01.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:19:01.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:19:01.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:19:01.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:19:01.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:19:01.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:19:01.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:19:01.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:19:01.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.720966 -999.00  +10.20  15.90     77   +6.40 1 1 1 1 1     0    0 3.32 -16.14 ZNESW 15.8 15.9 294.2 21.8 10.9 -24.7 10.8 -23.5 10.4 -21.3 10.8 -23.3
2026-04-15T19:19:01.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:19:01.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:19:01.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.720966
2026-04-15T19:19:01.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:19:01.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:19:01.846 [DEBUG] [Thread-24356] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:19:01.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:19:01.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:19:01.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:19:01.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:18:42', tmtdew=4.46812, humidity=73.7844, cloud=0.0, wind=18.2786, temperature=10.4535, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:18:11.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, -0.027749999999999275, -0.025750000000000384, -0.03850000000000087, 0.0259999999999998, 0.006750000000000256, -0.0129999999999999, 0.0022500000000000853, -0.03250000000000064, 0.01950000000000074, -0.04574999999999996, 0.005000000000000782, 0.07099999999999973, 0.03924999999999912, 0.04099999999999859, 0.0, 0.0072499999999990905, 0.05149999999999899, -0.017000000000001236, -0.0027500000000006963, 0.008999999999998565, -0.004250000000000753, -0.02674999999999983, 0.030250000000000554, 0.06599999999999895, 0.02149999999999963, 0.012750000000000483, 0.0649999999999995, 0.07200000000000095, 0.14800000000000146, 0.05200000000000138, 0.08800000000000097, 0.05874999999999986], zp_timestamp='2026-04-15T17:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:19:02.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:19:02.140 [DEBUG] [Thread-24359] [transport.py] [_log()] starting thread (client mode): 0xee907a00
2026-04-15T19:19:02.140 [DEBUG] [Thread-24359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:19:02.158 [DEBUG] [Thread-24359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:19:02.158 [INFO] [Thread-24359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:19:02.169 [DEBUG] [Thread-24359] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:19:02.169 [DEBUG] [Thread-24359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:19:02.169 [DEBUG] [Thread-24359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:19:02.169 [DEBUG] [Thread-24359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:19:02.169 [DEBUG] [Thread-24359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:19:02.169 [DEBUG] [Thread-24359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:19:02.169 [DEBUG] [Thread-24359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:19:02.169 [DEBUG] [Thread-24359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:19:02.169 [DEBUG] [Thread-24359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:19:02.169 [DEBUG] [Thread-24359] [transport.py] [_log()] client lang: <none>
2026-04-15T19:19:02.170 [DEBUG] [Thread-24359] [transport.py] [_log()] server lang: <none>
2026-04-15T19:19:02.170 [DEBUG] [Thread-24359] [transport.py] [_log()] kex follows: False
2026-04-15T19:19:02.170 [DEBUG] [Thread-24359] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:19:02.170 [DEBUG] [Thread-24359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:19:02.170 [DEBUG] [Thread-24359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:19:02.170 [DEBUG] [Thread-24359] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:19:02.170 [DEBUG] [Thread-24359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:19:02.170 [DEBUG] [Thread-24359] [transport.py] [_log()] Compression: none
2026-04-15T19:19:02.170 [DEBUG] [Thread-24359] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:19:02.230 [DEBUG] [Thread-24359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:19:02.230 [DEBUG] [Thread-24359] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:19:02.231 [DEBUG] [Thread-24359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:19:02.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:19:02.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:19:02.289 [DEBUG] [Thread-24359] [transport.py] [_log()] userauth is OK
2026-04-15T19:19:02.289 [DEBUG] [Thread-24359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:19:02.289 [DEBUG] [Thread-24359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:19:02.289 [DEBUG] [Thread-24359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:19:02.290 [DEBUG] [Thread-24359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:19:02.315 [INFO] [Thread-24359] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:19:02.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:19:02.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:19:03.119 [DEBUG] [Thread-24359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:19:03.120 [DEBUG] [Thread-24359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:19:03.169 [DEBUG] [Thread-24359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:19:03.169 [DEBUG] [Thread-24359] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:19:03.182 [DEBUG] [Thread-24359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:19:03.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:19:03.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')
2026-04-15T19:19:03.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
2026-04-15T19:19:03.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:19:03.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:19:03.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:19:03.220 [DEBUG] [Thread-24359] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:19:07.509 [DEBUG] [Thread-24361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:19:22.460 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:19:22.461 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:19:22.552 [DEBUG] [Thread-24362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:19:33.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:19:33.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:19:33.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
2026-04-15T19:19:34.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 19, 17), 4.44113, 73.859, 0.0, 13.2685, 10.1433, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:19:34.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:19:17
2026-04-15T19:19:34.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:19:35.353 [DEBUG] [Thread-24363] [transport.py] [_log()] starting thread (client mode): 0xee906410
2026-04-15T19:19:35.354 [DEBUG] [Thread-24363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:19:35.373 [DEBUG] [Thread-24363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:19:35.374 [INFO] [Thread-24363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:19:35.377 [DEBUG] [Thread-24363] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:19:35.377 [DEBUG] [Thread-24363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:19:35.377 [DEBUG] [Thread-24363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:19:35.377 [DEBUG] [Thread-24363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:19:35.377 [DEBUG] [Thread-24363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:19:35.377 [DEBUG] [Thread-24363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:19:35.377 [DEBUG] [Thread-24363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:19:35.377 [DEBUG] [Thread-24363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:19:35.378 [DEBUG] [Thread-24363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:19:35.378 [DEBUG] [Thread-24363] [transport.py] [_log()] client lang: <none>
2026-04-15T19:19:35.378 [DEBUG] [Thread-24363] [transport.py] [_log()] server lang: <none>
2026-04-15T19:19:35.378 [DEBUG] [Thread-24363] [transport.py] [_log()] kex follows: False
2026-04-15T19:19:35.378 [DEBUG] [Thread-24363] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:19:35.378 [DEBUG] [Thread-24363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:19:35.378 [DEBUG] [Thread-24363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:19:35.378 [DEBUG] [Thread-24363] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:19:35.378 [DEBUG] [Thread-24363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:19:35.378 [DEBUG] [Thread-24363] [transport.py] [_log()] Compression: none
2026-04-15T19:19:35.378 [DEBUG] [Thread-24363] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:19:35.395 [DEBUG] [Thread-24363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:19:35.395 [DEBUG] [Thread-24363] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:19:35.396 [DEBUG] [Thread-24363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:19:35.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:19:35.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:19:35.397 [DEBUG] [Thread-24363] [transport.py] [_log()] userauth is OK
2026-04-15T19:19:35.397 [DEBUG] [Thread-24363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:19:35.397 [DEBUG] [Thread-24363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:19:35.397 [DEBUG] [Thread-24363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:19:35.397 [DEBUG] [Thread-24363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:19:35.410 [INFO] [Thread-24363] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:19:35.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:19:36.223 [DEBUG] [Thread-24363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:19:36.223 [DEBUG] [Thread-24363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:19:36.224 [DEBUG] [Thread-24363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:19:36.265 [DEBUG] [Thread-24363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:19:36.265 [DEBUG] [Thread-24363] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:19:36.267 [DEBUG] [Thread-24363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:19:36.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:19:36.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:19:36.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:19:36.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:19:36.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:19:36.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:19:36.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:19:36.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:19:36.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:19:36.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.721661 -999.00  +10.20  13.59     77   +6.40 1 1 1 1 1     0    0 3.30 -14.64 ZNESW 14.9 13.6 307.8 17.8 10.9 -24.9 10.8 -23.5 10.5 -21.5 10.8 -23.6
2026-04-15T19:19:36.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:19:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:19:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.721661
2026-04-15T19:19:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:19:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:19:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:19:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:19:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:19:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:19:17', tmtdew=4.44113, humidity=73.859, cloud=0.0, wind=13.2685, temperature=10.1433, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:19:11.510', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, -0.027749999999999275, -0.025750000000000384, -0.03850000000000087, 0.0259999999999998, 0.006750000000000256, -0.0129999999999999, 0.0022500000000000853, -0.03250000000000064, 0.01950000000000074, -0.04574999999999996, 0.005000000000000782, 0.07099999999999973, 0.03924999999999912, 0.04099999999999859, 0.0, 0.0072499999999990905, 0.05149999999999899, -0.017000000000001236, -0.0027500000000006963, 0.008999999999998565, -0.004250000000000753, -0.02674999999999983, 0.030250000000000554, 0.06599999999999895, 0.02149999999999963, 0.012750000000000483, 0.0649999999999995, 0.07200000000000095, 0.14800000000000146, 0.05200000000000138, 0.08800000000000097, 0.05874999999999986], zp_timestamp='2026-04-15T17:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:19:36.288 [DEBUG] [Thread-24363] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:19:36.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:19:36.501 [DEBUG] [Thread-24366] [transport.py] [_log()] starting thread (client mode): 0xf13c8130
2026-04-15T19:19:36.502 [DEBUG] [Thread-24366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:19:36.516 [DEBUG] [Thread-24366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:19:36.516 [INFO] [Thread-24366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:19:36.524 [DEBUG] [Thread-24366] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:19:36.524 [DEBUG] [Thread-24366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:19:36.524 [DEBUG] [Thread-24366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:19:36.524 [DEBUG] [Thread-24366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:19:36.524 [DEBUG] [Thread-24366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:19:36.524 [DEBUG] [Thread-24366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:19:36.524 [DEBUG] [Thread-24366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:19:36.524 [DEBUG] [Thread-24366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:19:36.525 [DEBUG] [Thread-24366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:19:36.525 [DEBUG] [Thread-24366] [transport.py] [_log()] client lang: <none>
2026-04-15T19:19:36.525 [DEBUG] [Thread-24366] [transport.py] [_log()] server lang: <none>
2026-04-15T19:19:36.525 [DEBUG] [Thread-24366] [transport.py] [_log()] kex follows: False
2026-04-15T19:19:36.525 [DEBUG] [Thread-24366] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:19:36.525 [DEBUG] [Thread-24366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:19:36.525 [DEBUG] [Thread-24366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:19:36.525 [DEBUG] [Thread-24366] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:19:36.525 [DEBUG] [Thread-24366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:19:36.525 [DEBUG] [Thread-24366] [transport.py] [_log()] Compression: none
2026-04-15T19:19:36.525 [DEBUG] [Thread-24366] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:19:36.583 [DEBUG] [Thread-24366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:19:36.583 [DEBUG] [Thread-24366] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:19:36.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:19:36.584 [DEBUG] [Thread-24366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:19:36.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:19:36.638 [DEBUG] [Thread-24366] [transport.py] [_log()] userauth is OK
2026-04-15T19:19:36.638 [DEBUG] [Thread-24366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:19:36.638 [DEBUG] [Thread-24366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:19:36.638 [DEBUG] [Thread-24366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:19:36.638 [DEBUG] [Thread-24366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:19:36.658 [INFO] [Thread-24366] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:19:36.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:19:36.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:19:37.459 [DEBUG] [Thread-24366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:19:37.460 [DEBUG] [Thread-24366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:19:37.508 [DEBUG] [Thread-24366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:19:37.509 [DEBUG] [Thread-24366] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:19:37.521 [DEBUG] [Thread-24366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:19:37.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:19:37.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')
2026-04-15T19:19:37.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
2026-04-15T19:19:37.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:19:37.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:19:37.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:19:37.566 [DEBUG] [Thread-24366] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:19:37.583 [DEBUG] [Thread-24368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:19:52.625 [DEBUG] [Thread-24369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:19:57.511 [DEBUG] [Thread-24370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:20:07.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:20:07.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:20:07.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
2026-04-15T19:20:07.656 [DEBUG] [Thread-24371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:20:08.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 19, 53), 4.54744, 73.3867, 0.0, 19.6898, 10.4868, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:20:08.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:19:53
2026-04-15T19:20:09.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:20:09.752 [DEBUG] [Thread-24372] [transport.py] [_log()] starting thread (client mode): 0xf13c83a0
2026-04-15T19:20:09.752 [DEBUG] [Thread-24372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:20:09.771 [DEBUG] [Thread-24372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:20:09.771 [INFO] [Thread-24372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:20:09.775 [DEBUG] [Thread-24372] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:20:09.775 [DEBUG] [Thread-24372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:20:09.775 [DEBUG] [Thread-24372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:20:09.775 [DEBUG] [Thread-24372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:20:09.775 [DEBUG] [Thread-24372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:20:09.775 [DEBUG] [Thread-24372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:20:09.775 [DEBUG] [Thread-24372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:20:09.775 [DEBUG] [Thread-24372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:20:09.775 [DEBUG] [Thread-24372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:20:09.776 [DEBUG] [Thread-24372] [transport.py] [_log()] client lang: <none>
2026-04-15T19:20:09.776 [DEBUG] [Thread-24372] [transport.py] [_log()] server lang: <none>
2026-04-15T19:20:09.776 [DEBUG] [Thread-24372] [transport.py] [_log()] kex follows: False
2026-04-15T19:20:09.776 [DEBUG] [Thread-24372] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:20:09.776 [DEBUG] [Thread-24372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:20:09.776 [DEBUG] [Thread-24372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:20:09.776 [DEBUG] [Thread-24372] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:20:09.776 [DEBUG] [Thread-24372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:20:09.776 [DEBUG] [Thread-24372] [transport.py] [_log()] Compression: none
2026-04-15T19:20:09.776 [DEBUG] [Thread-24372] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:20:09.793 [DEBUG] [Thread-24372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:20:09.793 [DEBUG] [Thread-24372] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:20:09.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:20:09.794 [DEBUG] [Thread-24372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:20:09.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:20:09.836 [DEBUG] [Thread-24372] [transport.py] [_log()] userauth is OK
2026-04-15T19:20:09.837 [DEBUG] [Thread-24372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:20:09.837 [DEBUG] [Thread-24372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:20:09.837 [DEBUG] [Thread-24372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:20:09.837 [DEBUG] [Thread-24372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:20:09.862 [INFO] [Thread-24372] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:20:09.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:20:16.760 [DEBUG] [Thread-24372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:20:16.761 [DEBUG] [Thread-24372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:20:16.761 [DEBUG] [Thread-24372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:20:16.801 [DEBUG] [Thread-24372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:20:16.801 [DEBUG] [Thread-24372] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:20:16.804 [DEBUG] [Thread-24372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:20:16.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:20:16.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:20:16.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:20:16.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:20:16.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:20:16.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:20:16.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:20:16.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:20:16.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:20:16.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.722008 -999.00  +10.10  17.21     78   +6.50 1 1 1 1 1     0    0 3.29 -13.69 ZNESW 18.0 17.2 302.4 20.9 10.9 -24.6 10.8 -23.5 10.5 -21.5 10.8 -23.5
2026-04-15T19:20:16.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:20:16.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:20:16.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.722008
2026-04-15T19:20:16.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:20:16.837 [DEBUG] [Thread-24372] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:20:16.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:20:16.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:20:16.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:20:16.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:20:16.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:19:53', tmtdew=4.54744, humidity=73.3867, cloud=0.0, wind=19.6898, temperature=10.4868, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:19:41.491', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, -0.027749999999999275, -0.025750000000000384, -0.03850000000000087, 0.0259999999999998, 0.006750000000000256, -0.0129999999999999, 0.0022500000000000853, -0.03250000000000064, 0.01950000000000074, -0.04574999999999996, 0.005000000000000782, 0.07099999999999973, 0.03924999999999912, 0.04099999999999859, 0.0, 0.0072499999999990905, 0.05149999999999899, -0.017000000000001236, -0.0027500000000006963, 0.008999999999998565, -0.004250000000000753, -0.02674999999999983, 0.030250000000000554, 0.06599999999999895, 0.02149999999999963, 0.012750000000000483, 0.0649999999999995, 0.07200000000000095, 0.14800000000000146, 0.05200000000000138, 0.08800000000000097, 0.05874999999999986], zp_timestamp='2026-04-15T17:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:20:17.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:20:17.098 [DEBUG] [Thread-24375] [transport.py] [_log()] starting thread (client mode): 0xf13ffe20
2026-04-15T19:20:17.098 [DEBUG] [Thread-24375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:20:17.113 [DEBUG] [Thread-24375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:20:17.113 [INFO] [Thread-24375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:20:17.120 [DEBUG] [Thread-24375] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:20:17.120 [DEBUG] [Thread-24375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:20:17.120 [DEBUG] [Thread-24375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:20:17.120 [DEBUG] [Thread-24375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:20:17.120 [DEBUG] [Thread-24375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:20:17.120 [DEBUG] [Thread-24375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:20:17.120 [DEBUG] [Thread-24375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:20:17.121 [DEBUG] [Thread-24375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:20:17.121 [DEBUG] [Thread-24375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:20:17.121 [DEBUG] [Thread-24375] [transport.py] [_log()] client lang: <none>
2026-04-15T19:20:17.121 [DEBUG] [Thread-24375] [transport.py] [_log()] server lang: <none>
2026-04-15T19:20:17.121 [DEBUG] [Thread-24375] [transport.py] [_log()] kex follows: False
2026-04-15T19:20:17.121 [DEBUG] [Thread-24375] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:20:17.121 [DEBUG] [Thread-24375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:20:17.121 [DEBUG] [Thread-24375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:20:17.121 [DEBUG] [Thread-24375] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:20:17.121 [DEBUG] [Thread-24375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:20:17.122 [DEBUG] [Thread-24375] [transport.py] [_log()] Compression: none
2026-04-15T19:20:17.122 [DEBUG] [Thread-24375] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:20:17.178 [DEBUG] [Thread-24375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:20:17.179 [DEBUG] [Thread-24375] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:20:17.179 [DEBUG] [Thread-24375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:20:17.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:20:17.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:20:17.236 [DEBUG] [Thread-24375] [transport.py] [_log()] userauth is OK
2026-04-15T19:20:17.236 [DEBUG] [Thread-24375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:20:17.236 [DEBUG] [Thread-24375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:20:17.236 [DEBUG] [Thread-24375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:20:17.236 [DEBUG] [Thread-24375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:20:17.261 [INFO] [Thread-24375] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:20:17.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:20:17.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:20:18.143 [DEBUG] [Thread-24375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:20:18.144 [DEBUG] [Thread-24375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:20:18.192 [DEBUG] [Thread-24375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:20:18.192 [DEBUG] [Thread-24375] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:20:18.200 [DEBUG] [Thread-24375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:20:18.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:20:18.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')
2026-04-15T19:20: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') -> 00000000
2026-04-15T19:20:18.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:20:18.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:20:18.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:20:18.233 [DEBUG] [Thread-24375] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:20:22.661 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:20:22.662 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:20:22.687 [DEBUG] [Thread-24377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:20:37.731 [DEBUG] [Thread-24378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:20:48.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:20:48.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:20:48.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
2026-04-15T19:20:49.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 20, 29), 4.48411, 73.6436, 0.0, 14.1336, 10.21, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:20:49.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:20:29
2026-04-15T19:20:49.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:20:50.354 [DEBUG] [Thread-24379] [transport.py] [_log()] starting thread (client mode): 0xf13fcf40
2026-04-15T19:20:50.355 [DEBUG] [Thread-24379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:20:50.374 [DEBUG] [Thread-24379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:20:50.375 [INFO] [Thread-24379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:20:50.378 [DEBUG] [Thread-24379] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:20:50.378 [DEBUG] [Thread-24379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:20:50.378 [DEBUG] [Thread-24379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:20:50.378 [DEBUG] [Thread-24379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:20:50.378 [DEBUG] [Thread-24379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:20:50.378 [DEBUG] [Thread-24379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:20:50.378 [DEBUG] [Thread-24379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:20:50.378 [DEBUG] [Thread-24379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:20:50.378 [DEBUG] [Thread-24379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:20:50.378 [DEBUG] [Thread-24379] [transport.py] [_log()] client lang: <none>
2026-04-15T19:20:50.378 [DEBUG] [Thread-24379] [transport.py] [_log()] server lang: <none>
2026-04-15T19:20:50.379 [DEBUG] [Thread-24379] [transport.py] [_log()] kex follows: False
2026-04-15T19:20:50.379 [DEBUG] [Thread-24379] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:20:50.379 [DEBUG] [Thread-24379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:20:50.379 [DEBUG] [Thread-24379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:20:50.379 [DEBUG] [Thread-24379] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:20:50.379 [DEBUG] [Thread-24379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:20:50.379 [DEBUG] [Thread-24379] [transport.py] [_log()] Compression: none
2026-04-15T19:20:50.379 [DEBUG] [Thread-24379] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:20:50.396 [DEBUG] [Thread-24379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:20:50.396 [DEBUG] [Thread-24379] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:20:50.397 [DEBUG] [Thread-24379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:20:50.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:20:50.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:20:50.398 [DEBUG] [Thread-24379] [transport.py] [_log()] userauth is OK
2026-04-15T19:20:50.398 [DEBUG] [Thread-24379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:20:50.399 [DEBUG] [Thread-24379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:20:50.399 [DEBUG] [Thread-24379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:20:50.399 [DEBUG] [Thread-24379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:20:50.434 [INFO] [Thread-24379] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:20:50.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:20:51.184 [DEBUG] [Thread-24379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:20:51.184 [DEBUG] [Thread-24379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:20:51.184 [DEBUG] [Thread-24379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:20:51.224 [DEBUG] [Thread-24379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:20:51.225 [DEBUG] [Thread-24379] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:20:51.227 [DEBUG] [Thread-24379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:20:51.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:20:51.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:20:51.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:20:51.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:20:51.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:20:51.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:20:51.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:20:51.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:20:51.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:20:51.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.722355 -999.00  +10.20  15.61     77   +6.40 1 1 1 1 1     0    0 3.38 -12.23 ZNESW 15.4 15.6 296.2 19.0 10.9 -24.8 10.8 -23.6 10.4 -21.4 10.8 -23.5
2026-04-15T19:20:51.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:20:51.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:20:51.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.722355
2026-04-15T19:20:51.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:20:51.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:20:51.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:20:51.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:20:51.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:20:51.245 [DEBUG] [Thread-24379] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:20:51.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:20:29', tmtdew=4.48411, humidity=73.6436, cloud=0.0, wind=14.1336, temperature=10.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:20:11.472', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, -0.027749999999999275, -0.025750000000000384, -0.03850000000000087, 0.0259999999999998, 0.006750000000000256, -0.0129999999999999, 0.0022500000000000853, -0.03250000000000064, 0.01950000000000074, -0.04574999999999996, 0.005000000000000782, 0.07099999999999973, 0.03924999999999912, 0.04099999999999859, 0.0, 0.0072499999999990905, 0.05149999999999899, -0.017000000000001236, -0.0027500000000006963, 0.008999999999998565, -0.004250000000000753, -0.02674999999999983, 0.030250000000000554, 0.06599999999999895, 0.02149999999999963, 0.012750000000000483, 0.0649999999999995, 0.07200000000000095, 0.14800000000000146, 0.05200000000000138, 0.08800000000000097, 0.05874999999999986], zp_timestamp='2026-04-15T17:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:20:51.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:20:51.460 [DEBUG] [Thread-24382] [transport.py] [_log()] starting thread (client mode): 0xf13fff70
2026-04-15T19:20:51.460 [DEBUG] [Thread-24382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:20:51.478 [DEBUG] [Thread-24382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:20:51.478 [INFO] [Thread-24382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:20:51.485 [DEBUG] [Thread-24382] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:20:51.485 [DEBUG] [Thread-24382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:20:51.486 [DEBUG] [Thread-24382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:20:51.486 [DEBUG] [Thread-24382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:20:51.486 [DEBUG] [Thread-24382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:20:51.486 [DEBUG] [Thread-24382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:20:51.486 [DEBUG] [Thread-24382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:20:51.486 [DEBUG] [Thread-24382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:20:51.486 [DEBUG] [Thread-24382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:20:51.486 [DEBUG] [Thread-24382] [transport.py] [_log()] client lang: <none>
2026-04-15T19:20:51.486 [DEBUG] [Thread-24382] [transport.py] [_log()] server lang: <none>
2026-04-15T19:20:51.486 [DEBUG] [Thread-24382] [transport.py] [_log()] kex follows: False
2026-04-15T19:20:51.486 [DEBUG] [Thread-24382] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:20:51.486 [DEBUG] [Thread-24382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:20:51.487 [DEBUG] [Thread-24382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:20:51.487 [DEBUG] [Thread-24382] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:20:51.487 [DEBUG] [Thread-24382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:20:51.487 [DEBUG] [Thread-24382] [transport.py] [_log()] Compression: none
2026-04-15T19:20:51.487 [DEBUG] [Thread-24382] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:20:51.547 [DEBUG] [Thread-24382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:20:51.548 [DEBUG] [Thread-24382] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:20:51.548 [DEBUG] [Thread-24382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:20:51.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:20:51.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:20:51.605 [DEBUG] [Thread-24382] [transport.py] [_log()] userauth is OK
2026-04-15T19:20:51.605 [DEBUG] [Thread-24382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:20:51.605 [DEBUG] [Thread-24382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:20:51.605 [DEBUG] [Thread-24382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:20:51.605 [DEBUG] [Thread-24382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:20:51.624 [INFO] [Thread-24382] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:20:51.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:20:51.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:20:52.442 [DEBUG] [Thread-24382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:20:52.442 [DEBUG] [Thread-24382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:20:52.490 [DEBUG] [Thread-24382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:20:52.490 [DEBUG] [Thread-24382] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:20:52.499 [DEBUG] [Thread-24382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:20:52.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:20:52.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')
2026-04-15T19:20:52.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
2026-04-15T19:20:52.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:20:52.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:20:52.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:20:52.534 [DEBUG] [Thread-24382] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:20:52.762 [DEBUG] [Thread-24384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:20:57.681 [DEBUG] [Thread-24385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:21:07.806 [DEBUG] [Thread-24386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:21:22.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:21:22.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:21:22.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
2026-04-15T19:21:22.836 [DEBUG] [Thread-24387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:21:22.863 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:21:22.864 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:21:23.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 21, 4), 4.49329, 73.5942, 0.0, 13.4633, 10.1937, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:21:23.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:21:04
2026-04-15T19:21:24.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:21:24.640 [DEBUG] [Thread-24388] [transport.py] [_log()] starting thread (client mode): 0xf13375b0
2026-04-15T19:21:24.640 [DEBUG] [Thread-24388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:21:24.660 [DEBUG] [Thread-24388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:21:24.660 [INFO] [Thread-24388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:21:24.663 [DEBUG] [Thread-24388] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:21:24.663 [DEBUG] [Thread-24388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:21:24.664 [DEBUG] [Thread-24388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:21:24.664 [DEBUG] [Thread-24388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:21:24.664 [DEBUG] [Thread-24388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:21:24.664 [DEBUG] [Thread-24388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:21:24.664 [DEBUG] [Thread-24388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:21:24.664 [DEBUG] [Thread-24388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:21:24.664 [DEBUG] [Thread-24388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:21:24.664 [DEBUG] [Thread-24388] [transport.py] [_log()] client lang: <none>
2026-04-15T19:21:24.664 [DEBUG] [Thread-24388] [transport.py] [_log()] server lang: <none>
2026-04-15T19:21:24.664 [DEBUG] [Thread-24388] [transport.py] [_log()] kex follows: False
2026-04-15T19:21:24.665 [DEBUG] [Thread-24388] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:21:24.665 [DEBUG] [Thread-24388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:21:24.665 [DEBUG] [Thread-24388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:21:24.665 [DEBUG] [Thread-24388] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:21:24.665 [DEBUG] [Thread-24388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:21:24.665 [DEBUG] [Thread-24388] [transport.py] [_log()] Compression: none
2026-04-15T19:21:24.665 [DEBUG] [Thread-24388] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:21:24.682 [DEBUG] [Thread-24388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:21:24.682 [DEBUG] [Thread-24388] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:21:24.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:21:24.683 [DEBUG] [Thread-24388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:21:24.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:21:24.684 [DEBUG] [Thread-24388] [transport.py] [_log()] userauth is OK
2026-04-15T19:21:24.684 [DEBUG] [Thread-24388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:21:24.684 [DEBUG] [Thread-24388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:21:24.684 [DEBUG] [Thread-24388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:21:24.684 [DEBUG] [Thread-24388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:21:24.698 [INFO] [Thread-24388] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:21:24.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:21:25.484 [DEBUG] [Thread-24388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:21:25.484 [DEBUG] [Thread-24388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:21:25.485 [DEBUG] [Thread-24388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:21:25.525 [DEBUG] [Thread-24388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:21:25.525 [DEBUG] [Thread-24388] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:21:25.528 [DEBUG] [Thread-24388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:21:25.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:21:25.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:21:25.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:21:25.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:21:25.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:21:25.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:21:25.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:21:25.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:21:25.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:21:25.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.722703 -999.00  +10.20  16.67     77   +6.40 1 1 1 1 1     0    0 3.34 -12.00 ZNESW 15.2 16.7 297.2 19.7 10.9 -24.6 10.8 -23.6 10.5 -21.4 10.8 -23.5
2026-04-15T19:21:25.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:21:25.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:21:25.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.722703
2026-04-15T19:21:25.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:21:25.554 [DEBUG] [Thread-24388] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:21:25.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:21:25.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:21:25.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:21:25.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:21:25.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:21:04', tmtdew=4.49329, humidity=73.5942, cloud=0.0, wind=13.4633, temperature=10.1937, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-14T22:11:13', seeing=0.0, atlas_timestamp='2026-04-15T17:20:41.539', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, -0.027749999999999275, -0.025750000000000384, -0.03850000000000087, 0.0259999999999998, 0.006750000000000256, -0.0129999999999999, 0.0022500000000000853, -0.03250000000000064, 0.01950000000000074, -0.04574999999999996, 0.005000000000000782, 0.07099999999999973, 0.03924999999999912, 0.04099999999999859, 0.0, 0.0072499999999990905, 0.05149999999999899, -0.017000000000001236, -0.0027500000000006963, 0.008999999999998565, -0.004250000000000753, -0.02674999999999983, 0.030250000000000554, 0.06599999999999895, 0.02149999999999963, 0.012750000000000483, 0.0649999999999995, 0.07200000000000095, 0.14800000000000146, 0.05200000000000138, 0.08800000000000097, 0.05874999999999986], zp_timestamp='2026-04-15T17:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:21:25.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:21:25.813 [DEBUG] [Thread-24391] [transport.py] [_log()] starting thread (client mode): 0xee905570
2026-04-15T19:21:25.813 [DEBUG] [Thread-24391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:21:25.831 [DEBUG] [Thread-24391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:21:25.831 [INFO] [Thread-24391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:21:25.839 [DEBUG] [Thread-24391] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:21:25.839 [DEBUG] [Thread-24391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:21:25.839 [DEBUG] [Thread-24391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:21:25.839 [DEBUG] [Thread-24391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:21:25.839 [DEBUG] [Thread-24391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:21:25.839 [DEBUG] [Thread-24391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:21:25.839 [DEBUG] [Thread-24391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:21:25.839 [DEBUG] [Thread-24391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:21:25.839 [DEBUG] [Thread-24391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:21:25.839 [DEBUG] [Thread-24391] [transport.py] [_log()] client lang: <none>
2026-04-15T19:21:25.840 [DEBUG] [Thread-24391] [transport.py] [_log()] server lang: <none>
2026-04-15T19:21:25.840 [DEBUG] [Thread-24391] [transport.py] [_log()] kex follows: False
2026-04-15T19:21:25.840 [DEBUG] [Thread-24391] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:21:25.840 [DEBUG] [Thread-24391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:21:25.840 [DEBUG] [Thread-24391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:21:25.840 [DEBUG] [Thread-24391] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:21:25.840 [DEBUG] [Thread-24391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:21:25.840 [DEBUG] [Thread-24391] [transport.py] [_log()] Compression: none
2026-04-15T19:21:25.840 [DEBUG] [Thread-24391] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:21:25.899 [DEBUG] [Thread-24391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:21:25.900 [DEBUG] [Thread-24391] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:21:25.900 [DEBUG] [Thread-24391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:21:25.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:21:25.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:21:25.957 [DEBUG] [Thread-24391] [transport.py] [_log()] userauth is OK
2026-04-15T19:21:25.958 [DEBUG] [Thread-24391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:21:25.958 [DEBUG] [Thread-24391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:21:25.958 [DEBUG] [Thread-24391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:21:25.958 [DEBUG] [Thread-24391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:21:25.984 [INFO] [Thread-24391] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:21:25.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:21:25.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:21:26.807 [DEBUG] [Thread-24391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:21:26.807 [DEBUG] [Thread-24391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:21:26.854 [DEBUG] [Thread-24391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:21:26.854 [DEBUG] [Thread-24391] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:21:26.863 [DEBUG] [Thread-24391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:21:26.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:21:26.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')
2026-04-15T19:21:26.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
2026-04-15T19:21:26.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:21:26.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:21:26.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:21:26.897 [DEBUG] [Thread-24391] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:21:37.868 [DEBUG] [Thread-24393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:21:52.912 [DEBUG] [Thread-24394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:21:56.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:21:56.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:21:56.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
2026-04-15T19:21:57.838 [DEBUG] [Thread-24395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:21:58.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 21, 40), 4.54616, 73.3874, 0.0, 16.7616, 10.4543, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:21:58.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:21:40
2026-04-15T19:21:58.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:21:58.972 [DEBUG] [Thread-24396] [transport.py] [_log()] starting thread (client mode): 0xf13523e0
2026-04-15T19:21:58.972 [DEBUG] [Thread-24396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:21:58.987 [DEBUG] [Thread-24396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:21:58.987 [INFO] [Thread-24396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:21:58.990 [DEBUG] [Thread-24396] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:21:58.990 [DEBUG] [Thread-24396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] client lang: <none>
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] server lang: <none>
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] kex follows: False
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] Compression: none
2026-04-15T19:21:58.991 [DEBUG] [Thread-24396] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:21:59.003 [DEBUG] [Thread-24396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:21:59.003 [DEBUG] [Thread-24396] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:21:59.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:21:59.004 [DEBUG] [Thread-24396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:21:59.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:21:59.044 [DEBUG] [Thread-24396] [transport.py] [_log()] userauth is OK
2026-04-15T19:21:59.044 [DEBUG] [Thread-24396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:21:59.044 [DEBUG] [Thread-24396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:21:59.044 [DEBUG] [Thread-24396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:21:59.044 [DEBUG] [Thread-24396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:21:59.074 [INFO] [Thread-24396] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:21:59.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:21:59.921 [DEBUG] [Thread-24396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:21:59.921 [DEBUG] [Thread-24396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:21:59.921 [DEBUG] [Thread-24396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:21:59.961 [DEBUG] [Thread-24396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:21:59.962 [DEBUG] [Thread-24396] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:21:59.964 [DEBUG] [Thread-24396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:21:59.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:21:59.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:21:59.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:21:59.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:21:59.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:21:59.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:21:59.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:21:59.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:21:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:21:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.723050 -999.00  +10.20  13.73     77   +6.40 1 1 1 1 1     0    0 3.37 -10.53 ZNESW 15.7 13.7 293.9 17.8 10.9 -24.8 10.8 -23.5 10.5 -21.3 10.8 -23.5
2026-04-15T19:21:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:21:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:21:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.723050
2026-04-15T19:21:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:21:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:21:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:21:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:21:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:21:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:21:40', tmtdew=4.54616, humidity=73.3874, cloud=0.0, wind=16.7616, temperature=10.4543, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:21:40', seeing=1.88, atlas_timestamp='2026-04-15T17:21:11.520', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, -0.027749999999999275, -0.025750000000000384, -0.03850000000000087, 0.0259999999999998, 0.006750000000000256, -0.0129999999999999, 0.0022500000000000853, -0.03250000000000064, 0.01950000000000074, -0.04574999999999996, 0.005000000000000782, 0.07099999999999973, 0.03924999999999912, 0.04099999999999859, 0.0, 0.0072499999999990905, 0.05149999999999899, -0.017000000000001236, -0.0027500000000006963, 0.008999999999998565, -0.004250000000000753, -0.02674999999999983, 0.030250000000000554, 0.06599999999999895, 0.02149999999999963, 0.012750000000000483, 0.0649999999999995, 0.07200000000000095, 0.14800000000000146, 0.05200000000000138, 0.08800000000000097, 0.05874999999999986], zp_timestamp='2026-04-15T17:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:21:59.983 [DEBUG] [Thread-24396] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:22:00.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:22:00.204 [DEBUG] [Thread-24399] [transport.py] [_log()] starting thread (client mode): 0xf1352c80
2026-04-15T19:22:00.204 [DEBUG] [Thread-24399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:22:00.218 [DEBUG] [Thread-24399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:22:00.218 [INFO] [Thread-24399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:22:00.225 [DEBUG] [Thread-24399] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:22:00.225 [DEBUG] [Thread-24399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:22:00.225 [DEBUG] [Thread-24399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:22:00.225 [DEBUG] [Thread-24399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:22:00.226 [DEBUG] [Thread-24399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:22:00.226 [DEBUG] [Thread-24399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:22:00.226 [DEBUG] [Thread-24399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:22:00.226 [DEBUG] [Thread-24399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:22:00.226 [DEBUG] [Thread-24399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:22:00.226 [DEBUG] [Thread-24399] [transport.py] [_log()] client lang: <none>
2026-04-15T19:22:00.226 [DEBUG] [Thread-24399] [transport.py] [_log()] server lang: <none>
2026-04-15T19:22:00.226 [DEBUG] [Thread-24399] [transport.py] [_log()] kex follows: False
2026-04-15T19:22:00.226 [DEBUG] [Thread-24399] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:22:00.226 [DEBUG] [Thread-24399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:22:00.226 [DEBUG] [Thread-24399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:22:00.226 [DEBUG] [Thread-24399] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:22:00.226 [DEBUG] [Thread-24399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:22:00.226 [DEBUG] [Thread-24399] [transport.py] [_log()] Compression: none
2026-04-15T19:22:00.226 [DEBUG] [Thread-24399] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:22:00.281 [DEBUG] [Thread-24399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:22:00.282 [DEBUG] [Thread-24399] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:22:00.282 [DEBUG] [Thread-24399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:22:00.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:22:00.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:22:00.338 [DEBUG] [Thread-24399] [transport.py] [_log()] userauth is OK
2026-04-15T19:22:00.338 [DEBUG] [Thread-24399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:22:00.338 [DEBUG] [Thread-24399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:22:00.338 [DEBUG] [Thread-24399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:22:00.339 [DEBUG] [Thread-24399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:22:00.356 [INFO] [Thread-24399] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:22:00.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:22:00.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:22:01.179 [DEBUG] [Thread-24399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:22:01.179 [DEBUG] [Thread-24399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:22:01.226 [DEBUG] [Thread-24399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:22:01.226 [DEBUG] [Thread-24399] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:22:01.235 [DEBUG] [Thread-24399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:22:01.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:22:01.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')
2026-04-15T19:22:01.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') -> 00000000
2026-04-15T19:22:01.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:22:01.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:22:01.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:22:01.266 [DEBUG] [Thread-24399] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:22:07.938 [DEBUG] [Thread-24401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:22:23.064 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:22:23.065 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:22:23.100 [DEBUG] [Thread-24402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:22:31.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:22:31.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:22:31.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
2026-04-15T19:22:32.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 22, 15), 4.52836, 73.1612, 0.0, 13.9219, 10.1445, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:22:32.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:22:15
2026-04-15T19:22:32.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:22:33.367 [DEBUG] [Thread-24403] [transport.py] [_log()] starting thread (client mode): 0xf1351e10
2026-04-15T19:22:33.367 [DEBUG] [Thread-24403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:22:33.382 [DEBUG] [Thread-24403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:22:33.382 [INFO] [Thread-24403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:22:33.385 [DEBUG] [Thread-24403] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:22:33.385 [DEBUG] [Thread-24403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:22:33.385 [DEBUG] [Thread-24403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:22:33.385 [DEBUG] [Thread-24403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:22:33.385 [DEBUG] [Thread-24403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:22:33.385 [DEBUG] [Thread-24403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:22:33.385 [DEBUG] [Thread-24403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:22:33.385 [DEBUG] [Thread-24403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:22:33.385 [DEBUG] [Thread-24403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:22:33.385 [DEBUG] [Thread-24403] [transport.py] [_log()] client lang: <none>
2026-04-15T19:22:33.385 [DEBUG] [Thread-24403] [transport.py] [_log()] server lang: <none>
2026-04-15T19:22:33.385 [DEBUG] [Thread-24403] [transport.py] [_log()] kex follows: False
2026-04-15T19:22:33.385 [DEBUG] [Thread-24403] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:22:33.386 [DEBUG] [Thread-24403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:22:33.386 [DEBUG] [Thread-24403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:22:33.386 [DEBUG] [Thread-24403] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:22:33.386 [DEBUG] [Thread-24403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:22:33.386 [DEBUG] [Thread-24403] [transport.py] [_log()] Compression: none
2026-04-15T19:22:33.386 [DEBUG] [Thread-24403] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:22:33.401 [DEBUG] [Thread-24403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:22:33.401 [DEBUG] [Thread-24403] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:22:33.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:22:33.402 [DEBUG] [Thread-24403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:22:33.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:22:33.402 [DEBUG] [Thread-24403] [transport.py] [_log()] userauth is OK
2026-04-15T19:22:33.402 [DEBUG] [Thread-24403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:22:33.403 [DEBUG] [Thread-24403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:22:33.403 [DEBUG] [Thread-24403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:22:33.403 [DEBUG] [Thread-24403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:22:33.421 [INFO] [Thread-24403] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:22:33.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:22:34.235 [DEBUG] [Thread-24403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:22:34.235 [DEBUG] [Thread-24403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:22:34.235 [DEBUG] [Thread-24403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:22:34.276 [DEBUG] [Thread-24403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:22:34.276 [DEBUG] [Thread-24403] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:22:34.278 [DEBUG] [Thread-24403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:22:34.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:22:34.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:22:34.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:22:34.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:22:34.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:22:34.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:22:34.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:22:34.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:22:34.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:22:34.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.723397 -999.00  +10.10  15.88     77   +6.40 1 1 1 1 1     0    0 3.44 -11.03 ZNESW 14.4 15.9 295.0 17.9 10.9 -24.8 10.7 -23.5 10.4 -21.4 10.8 -23.5
2026-04-15T19:22:34.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:22:34.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:22:34.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.723397
2026-04-15T19:22:34.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:22:34.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:22:34.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:22:34.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:22:34.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:22:34.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:22:15', tmtdew=4.52836, humidity=73.1612, cloud=0.0, wind=13.9219, temperature=10.1445, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:22:15', seeing=1.31, atlas_timestamp='2026-04-15T17:21:41.501', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.01425000000000054, -0.012749999999998707, -0.03950000000000031, -0.01249999999999929, 0.013750000000001705, 0.010999999999999233, -0.03275000000000006, -0.0065000000000008384, -0.02099999999999902, -0.023749999999999716, -0.0030000000000001137, 0.04499999999999993, 0.0182500000000001, 0.017999999999998906, 0.04699999999999882, 0.04925000000000068, 0.037499999999999645, -0.02800000000000047, -0.00975000000000037, 0.050499999999999545, 0.016749999999998266, -0.05674999999999919, 0.016250000000001208, 0.07149999999999856, -0.019999999999999574, -0.0417500000000004, 0.02549999999999919, 0.12599999999999945, 0.16250000000000142, 0.027000000000001023, 0.16550000000000153, 0.02674999999999983], zp_timestamp='2026-04-15T17:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:22:34.291 [DEBUG] [Thread-24403] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:22:34.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:22:34.522 [DEBUG] [Thread-24406] [transport.py] [_log()] starting thread (client mode): 0xee904130
2026-04-15T19:22:34.523 [DEBUG] [Thread-24406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:22:34.536 [DEBUG] [Thread-24406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:22:34.537 [INFO] [Thread-24406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:22:34.544 [DEBUG] [Thread-24406] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:22:34.544 [DEBUG] [Thread-24406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:22:34.544 [DEBUG] [Thread-24406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:22:34.544 [DEBUG] [Thread-24406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:22:34.544 [DEBUG] [Thread-24406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:22:34.544 [DEBUG] [Thread-24406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:22:34.544 [DEBUG] [Thread-24406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:22:34.544 [DEBUG] [Thread-24406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:22:34.544 [DEBUG] [Thread-24406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:22:34.544 [DEBUG] [Thread-24406] [transport.py] [_log()] client lang: <none>
2026-04-15T19:22:34.544 [DEBUG] [Thread-24406] [transport.py] [_log()] server lang: <none>
2026-04-15T19:22:34.544 [DEBUG] [Thread-24406] [transport.py] [_log()] kex follows: False
2026-04-15T19:22:34.544 [DEBUG] [Thread-24406] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:22:34.544 [DEBUG] [Thread-24406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:22:34.545 [DEBUG] [Thread-24406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:22:34.545 [DEBUG] [Thread-24406] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:22:34.545 [DEBUG] [Thread-24406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:22:34.545 [DEBUG] [Thread-24406] [transport.py] [_log()] Compression: none
2026-04-15T19:22:34.545 [DEBUG] [Thread-24406] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:22:34.602 [DEBUG] [Thread-24406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:22:34.602 [DEBUG] [Thread-24406] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:22:34.603 [DEBUG] [Thread-24406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:22:34.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:22:34.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:22:34.659 [DEBUG] [Thread-24406] [transport.py] [_log()] userauth is OK
2026-04-15T19:22:34.659 [DEBUG] [Thread-24406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:22:34.660 [DEBUG] [Thread-24406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:22:34.660 [DEBUG] [Thread-24406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:22:34.660 [DEBUG] [Thread-24406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:22:34.679 [INFO] [Thread-24406] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:22:34.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:22:34.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:22:35.500 [DEBUG] [Thread-24406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:22:35.500 [DEBUG] [Thread-24406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:22:35.548 [DEBUG] [Thread-24406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:22:35.548 [DEBUG] [Thread-24406] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:22:35.556 [DEBUG] [Thread-24406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:22:35.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:22:35.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')
2026-04-15T19:22:35.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
2026-04-15T19:22:35.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:22:35.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:22:35.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:22:35.587 [DEBUG] [Thread-24406] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:22:38.124 [DEBUG] [Thread-24408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:22:53.156 [DEBUG] [Thread-24409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:22:57.982 [DEBUG] [Thread-24410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:23:05.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:23:05.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:23:05.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
2026-04-15T19:23:06.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 22, 51), 4.54232, 73.3896, 0.0, 15.5268, 10.3566, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:23:06.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:22:51
2026-04-15T19:23:07.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:23:07.701 [DEBUG] [Thread-24411] [transport.py] [_log()] starting thread (client mode): 0xf13ffe20
2026-04-15T19:23:07.702 [DEBUG] [Thread-24411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:23:07.718 [DEBUG] [Thread-24411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:23:07.718 [INFO] [Thread-24411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:23:07.719 [DEBUG] [Thread-24411] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:23:07.719 [DEBUG] [Thread-24411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:23:07.719 [DEBUG] [Thread-24411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:23:07.719 [DEBUG] [Thread-24411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:23:07.719 [DEBUG] [Thread-24411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:23:07.719 [DEBUG] [Thread-24411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:23:07.719 [DEBUG] [Thread-24411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:23:07.719 [DEBUG] [Thread-24411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:23:07.719 [DEBUG] [Thread-24411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:23:07.719 [DEBUG] [Thread-24411] [transport.py] [_log()] client lang: <none>
2026-04-15T19:23:07.720 [DEBUG] [Thread-24411] [transport.py] [_log()] server lang: <none>
2026-04-15T19:23:07.720 [DEBUG] [Thread-24411] [transport.py] [_log()] kex follows: False
2026-04-15T19:23:07.720 [DEBUG] [Thread-24411] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:23:07.720 [DEBUG] [Thread-24411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:23:07.720 [DEBUG] [Thread-24411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:23:07.720 [DEBUG] [Thread-24411] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:23:07.720 [DEBUG] [Thread-24411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:23:07.720 [DEBUG] [Thread-24411] [transport.py] [_log()] Compression: none
2026-04-15T19:23:07.720 [DEBUG] [Thread-24411] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:23:07.728 [DEBUG] [Thread-24411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:23:07.728 [DEBUG] [Thread-24411] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:23:07.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:23:07.728 [DEBUG] [Thread-24411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:23:07.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:23:07.729 [DEBUG] [Thread-24411] [transport.py] [_log()] userauth is OK
2026-04-15T19:23:07.729 [DEBUG] [Thread-24411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:23:07.729 [DEBUG] [Thread-24411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:23:07.730 [DEBUG] [Thread-24411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:23:07.730 [DEBUG] [Thread-24411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:23:07.748 [INFO] [Thread-24411] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:23:07.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:23:08.180 [DEBUG] [Thread-24413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:23:08.529 [DEBUG] [Thread-24411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:23:08.529 [DEBUG] [Thread-24411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:23:08.529 [DEBUG] [Thread-24411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:23:08.569 [DEBUG] [Thread-24411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:23:08.570 [DEBUG] [Thread-24411] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:23:08.572 [DEBUG] [Thread-24411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:23:08.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:23:08.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:23:08.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:23:08.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:23:08.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:23:08.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:23:08.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:23:08.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:23:08.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:23:08.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.724091 -999.00  +10.10  13.56     77   +6.40 1 1 1 1 1     0    0 3.43 -10.91 ZNESW 15.1 13.6 304.0 18.1 10.9 -24.8 10.8 -23.5 10.4 -21.4 10.8 -23.5
2026-04-15T19:23:08.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:23:08.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:23:08.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.724091
2026-04-15T19:23:08.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:23:08.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:23:08.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:23:08.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:23:08.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:23:08.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:22:51', tmtdew=4.54232, humidity=73.3896, cloud=0.0, wind=15.5268, temperature=10.3566, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:22:51', seeing=1.53, atlas_timestamp='2026-04-15T17:22:41.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.01425000000000054, -0.012749999999998707, -0.03950000000000031, -0.01249999999999929, 0.013750000000001705, 0.010999999999999233, -0.03275000000000006, -0.0065000000000008384, -0.02099999999999902, -0.023749999999999716, -0.0030000000000001137, 0.04499999999999993, 0.0182500000000001, 0.017999999999998906, 0.04699999999999882, 0.04925000000000068, 0.037499999999999645, -0.02800000000000047, -0.00975000000000037, 0.050499999999999545, 0.016749999999998266, -0.05674999999999919, 0.016250000000001208, 0.07149999999999856, -0.019999999999999574, -0.0417500000000004, 0.02549999999999919, 0.12599999999999945, 0.16250000000000142, 0.027000000000001023, 0.16550000000000153, 0.02674999999999983], zp_timestamp='2026-04-15T17:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:23:08.591 [DEBUG] [Thread-24411] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:23:08.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:23:23.204 [DEBUG] [Thread-24415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:23:23.265 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:23:23.266 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:23:38.236 [DEBUG] [Thread-24416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:23:53.259 [DEBUG] [Thread-24417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:23:58.126 [DEBUG] [Thread-24418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:24:08.283 [DEBUG] [Thread-24419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:24:23.307 [DEBUG] [Thread-24420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:24:23.467 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:24:23.468 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:24:38.330 [DEBUG] [Thread-24421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:24:53.356 [DEBUG] [Thread-24422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:24:58.275 [DEBUG] [Thread-24423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:25:08.381 [DEBUG] [Thread-24424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:25:20.394 [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
2026-04-15T19:25:23.404 [DEBUG] [Thread-24425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:25:23.669 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:25:23.670 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:25:38.427 [DEBUG] [Thread-24426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:25:50.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:25:50.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:25:50.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
2026-04-15T19:25:51.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 25, 12), 4.52223, 73.4443, 0.0, 13.234, 10.1289, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:25:51.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:25:12
2026-04-15T19:25:52.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:25:52.589 [DEBUG] [Thread-24427] [transport.py] [_log()] starting thread (client mode): 0xee906440
2026-04-15T19:25:52.589 [DEBUG] [Thread-24427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:25:52.610 [DEBUG] [Thread-24427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:25:52.610 [INFO] [Thread-24427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:25:52.613 [DEBUG] [Thread-24427] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:25:52.613 [DEBUG] [Thread-24427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:25:52.613 [DEBUG] [Thread-24427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:25:52.613 [DEBUG] [Thread-24427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:25:52.613 [DEBUG] [Thread-24427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:25:52.614 [DEBUG] [Thread-24427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:25:52.614 [DEBUG] [Thread-24427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:25:52.614 [DEBUG] [Thread-24427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:25:52.614 [DEBUG] [Thread-24427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:25:52.614 [DEBUG] [Thread-24427] [transport.py] [_log()] client lang: <none>
2026-04-15T19:25:52.614 [DEBUG] [Thread-24427] [transport.py] [_log()] server lang: <none>
2026-04-15T19:25:52.614 [DEBUG] [Thread-24427] [transport.py] [_log()] kex follows: False
2026-04-15T19:25:52.614 [DEBUG] [Thread-24427] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:25:52.614 [DEBUG] [Thread-24427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:25:52.614 [DEBUG] [Thread-24427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:25:52.614 [DEBUG] [Thread-24427] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:25:52.614 [DEBUG] [Thread-24427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:25:52.614 [DEBUG] [Thread-24427] [transport.py] [_log()] Compression: none
2026-04-15T19:25:52.614 [DEBUG] [Thread-24427] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:25:52.630 [DEBUG] [Thread-24427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:25:52.630 [DEBUG] [Thread-24427] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:25:52.630 [DEBUG] [Thread-24427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:25:52.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:25:52.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:25:52.631 [DEBUG] [Thread-24427] [transport.py] [_log()] userauth is OK
2026-04-15T19:25:52.632 [DEBUG] [Thread-24427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:25:52.632 [DEBUG] [Thread-24427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:25:52.632 [DEBUG] [Thread-24427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:25:52.632 [DEBUG] [Thread-24427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:25:52.650 [INFO] [Thread-24427] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:25:52.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:25:53.277 [DEBUG] [Thread-24427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:25:53.277 [DEBUG] [Thread-24427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:25:53.277 [DEBUG] [Thread-24427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:25:53.318 [DEBUG] [Thread-24427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:25:53.318 [DEBUG] [Thread-24427] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:25:53.320 [DEBUG] [Thread-24427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:25:53.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:25:53.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:25:53.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:25:53.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:25:53.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:25:53.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:25:53.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:25:53.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:25:53.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:25:53.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.725827 -999.00  +10.10  12.15     78   +6.40 1 1 1 1 1     0    0 3.53 -6.44 ZNESW 15.4 12.2 305.2 16.6 10.9 -24.8 10.7 -23.7 10.4 -21.4 10.7 -23.5
2026-04-15T19:25:53.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:25:53.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:25:53.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.725827
2026-04-15T19:25:53.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:25:53.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:25:53.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:25:53.338 [DEBUG] [Thread-24427] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:25:53.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:25:53.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:25:53.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:25:12', tmtdew=4.52223, humidity=73.4443, cloud=0.0, wind=13.234, temperature=10.1289, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:25:48', seeing=1.0, atlas_timestamp='2026-04-15T17:25:11.453', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07725000000000115, -0.01974999999999838, -0.018749999999998934, -0.027000000000001023, -0.01750000000000007, -0.005749999999999034, -0.022999999999999687, -0.031749999999998835, 0.011999999999998678, -0.009999999999999787, -0.07175000000000153, -0.01950000000000074, 0.038000000000000256, 0.03924999999999912, 0.004999999999999005, -0.034000000000000696, 0.03324999999999889, 0.018499999999999517, -0.019000000000000128, -0.004750000000001364, 0.015999999999998238, -0.02125000000000199, -0.06674999999999898, 0.00575000000000081, 0.03599999999999959, -0.0235000000000003, -0.03524999999999956, -0.014000000000001123, 0.09949999999999903, 0.08500000000000085, 0.02050000000000196, 0.0840000000000014, 0.032249999999999446], zp_timestamp='2026-04-15T17:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:25:53.450 [DEBUG] [Thread-24430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:25:53.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:25:53.551 [DEBUG] [Thread-24431] [transport.py] [_log()] starting thread (client mode): 0xf13341f0
2026-04-15T19:25:53.551 [DEBUG] [Thread-24431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:25:53.566 [DEBUG] [Thread-24431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:25:53.566 [INFO] [Thread-24431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] client lang: <none>
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] server lang: <none>
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] kex follows: False
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:25:53.574 [DEBUG] [Thread-24431] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:25:53.575 [DEBUG] [Thread-24431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:25:53.575 [DEBUG] [Thread-24431] [transport.py] [_log()] Compression: none
2026-04-15T19:25:53.575 [DEBUG] [Thread-24431] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:25:53.628 [DEBUG] [Thread-24431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:25:53.629 [DEBUG] [Thread-24431] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:25:53.629 [DEBUG] [Thread-24431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:25:53.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:25:53.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:25:53.686 [DEBUG] [Thread-24431] [transport.py] [_log()] userauth is OK
2026-04-15T19:25:53.686 [DEBUG] [Thread-24431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:25:53.686 [DEBUG] [Thread-24431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:25:53.686 [DEBUG] [Thread-24431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:25:53.686 [DEBUG] [Thread-24431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:25:53.703 [INFO] [Thread-24431] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:25:53.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:25:53.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:25:54.542 [DEBUG] [Thread-24431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:25:54.542 [DEBUG] [Thread-24431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:25:54.589 [DEBUG] [Thread-24431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:25:54.590 [DEBUG] [Thread-24431] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:25:54.598 [DEBUG] [Thread-24431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:25:54.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:25:54.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')
2026-04-15T19:25:54.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
2026-04-15T19:25:54.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:25:54.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:25:54.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:25:54.629 [DEBUG] [Thread-24431] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:25:58.420 [DEBUG] [Thread-24433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:26:08.486 [DEBUG] [Thread-24434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:26:23.509 [DEBUG] [Thread-24435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:26:23.871 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:26:23.872 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:26:24.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:26:24.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:26:24.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
2026-04-15T19:26:25.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 25, 47), 4.37747, 74.2201, 0.0, 15.5621, 10.2914, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:26:25.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:25:47
2026-04-15T19:26:26.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:26:26.821 [DEBUG] [Thread-24436] [transport.py] [_log()] starting thread (client mode): 0xee906080
2026-04-15T19:26:26.821 [DEBUG] [Thread-24436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:26:26.841 [DEBUG] [Thread-24436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:26:26.841 [INFO] [Thread-24436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:26:26.844 [DEBUG] [Thread-24436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:26:26.844 [DEBUG] [Thread-24436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:26:26.844 [DEBUG] [Thread-24436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:26:26.844 [DEBUG] [Thread-24436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:26:26.844 [DEBUG] [Thread-24436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:26:26.844 [DEBUG] [Thread-24436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:26:26.844 [DEBUG] [Thread-24436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:26:26.845 [DEBUG] [Thread-24436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:26:26.845 [DEBUG] [Thread-24436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:26:26.845 [DEBUG] [Thread-24436] [transport.py] [_log()] client lang: <none>
2026-04-15T19:26:26.845 [DEBUG] [Thread-24436] [transport.py] [_log()] server lang: <none>
2026-04-15T19:26:26.845 [DEBUG] [Thread-24436] [transport.py] [_log()] kex follows: False
2026-04-15T19:26:26.845 [DEBUG] [Thread-24436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:26:26.845 [DEBUG] [Thread-24436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:26:26.845 [DEBUG] [Thread-24436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:26:26.845 [DEBUG] [Thread-24436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:26:26.845 [DEBUG] [Thread-24436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:26:26.845 [DEBUG] [Thread-24436] [transport.py] [_log()] Compression: none
2026-04-15T19:26:26.845 [DEBUG] [Thread-24436] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:26:26.861 [DEBUG] [Thread-24436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:26:26.861 [DEBUG] [Thread-24436] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:26:26.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:26:26.862 [DEBUG] [Thread-24436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:26:26.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:26:26.863 [DEBUG] [Thread-24436] [transport.py] [_log()] userauth is OK
2026-04-15T19:26:26.863 [DEBUG] [Thread-24436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:26:26.863 [DEBUG] [Thread-24436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:26:26.863 [DEBUG] [Thread-24436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:26:26.863 [DEBUG] [Thread-24436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:26:26.884 [INFO] [Thread-24436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:26:26.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:26:27.507 [DEBUG] [Thread-24436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:26:27.507 [DEBUG] [Thread-24436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:26:27.507 [DEBUG] [Thread-24436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:26:27.548 [DEBUG] [Thread-24436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:26:27.548 [DEBUG] [Thread-24436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:26:27.550 [DEBUG] [Thread-24436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:26:27.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:26:27.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:26:27.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:26:27.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:26:27.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:26:27.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:26:27.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:26:27.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:26:27.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:26:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.726522 -999.00  +10.10  14.23     78   +6.50 1 1 1 1 1     0    0 3.56 -5.76 ZNESW 13.4 14.2 297.6 15.9 10.9 -24.8 10.7 -23.5 10.4 -21.5 10.7 -23.6
2026-04-15T19:26:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:26:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:26:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.726522
2026-04-15T19:26:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:26:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:26:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:26:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:26:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:26:27.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:25:47', tmtdew=4.37747, humidity=74.2201, cloud=0.0, wind=15.5621, temperature=10.2914, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:26:23', seeing=0.95, atlas_timestamp='2026-04-15T17:26:11.501', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07725000000000115, -0.01974999999999838, -0.018749999999998934, -0.027000000000001023, -0.01750000000000007, -0.005749999999999034, -0.022999999999999687, -0.031749999999998835, 0.011999999999998678, -0.009999999999999787, -0.07175000000000153, -0.01950000000000074, 0.038000000000000256, 0.03924999999999912, 0.004999999999999005, -0.034000000000000696, 0.03324999999999889, 0.018499999999999517, -0.019000000000000128, -0.004750000000001364, 0.015999999999998238, -0.02125000000000199, -0.06674999999999898, 0.00575000000000081, 0.03599999999999959, -0.0235000000000003, -0.03524999999999956, -0.014000000000001123, 0.09949999999999903, 0.08500000000000085, 0.02050000000000196, 0.0840000000000014, 0.032249999999999446], zp_timestamp='2026-04-15T17:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:26:27.570 [DEBUG] [Thread-24436] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:26:27.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:26:27.784 [DEBUG] [Thread-24439] [transport.py] [_log()] starting thread (client mode): 0xf1351e10
2026-04-15T19:26:27.784 [DEBUG] [Thread-24439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:26:27.798 [DEBUG] [Thread-24439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:26:27.798 [INFO] [Thread-24439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:26:27.806 [DEBUG] [Thread-24439] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:26:27.806 [DEBUG] [Thread-24439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:26:27.806 [DEBUG] [Thread-24439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:26:27.806 [DEBUG] [Thread-24439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:26:27.806 [DEBUG] [Thread-24439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:26:27.806 [DEBUG] [Thread-24439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:26:27.806 [DEBUG] [Thread-24439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:26:27.806 [DEBUG] [Thread-24439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:26:27.806 [DEBUG] [Thread-24439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:26:27.806 [DEBUG] [Thread-24439] [transport.py] [_log()] client lang: <none>
2026-04-15T19:26:27.806 [DEBUG] [Thread-24439] [transport.py] [_log()] server lang: <none>
2026-04-15T19:26:27.806 [DEBUG] [Thread-24439] [transport.py] [_log()] kex follows: False
2026-04-15T19:26:27.806 [DEBUG] [Thread-24439] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:26:27.807 [DEBUG] [Thread-24439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:26:27.807 [DEBUG] [Thread-24439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:26:27.807 [DEBUG] [Thread-24439] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:26:27.807 [DEBUG] [Thread-24439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:26:27.807 [DEBUG] [Thread-24439] [transport.py] [_log()] Compression: none
2026-04-15T19:26:27.807 [DEBUG] [Thread-24439] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:26:27.861 [DEBUG] [Thread-24439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:26:27.862 [DEBUG] [Thread-24439] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:26:27.862 [DEBUG] [Thread-24439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:26:27.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:26:27.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:26:27.918 [DEBUG] [Thread-24439] [transport.py] [_log()] userauth is OK
2026-04-15T19:26:27.918 [DEBUG] [Thread-24439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:26:27.918 [DEBUG] [Thread-24439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:26:27.918 [DEBUG] [Thread-24439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:26:27.918 [DEBUG] [Thread-24439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:26:27.936 [INFO] [Thread-24439] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:26:27.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:26:27.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:26:28.737 [DEBUG] [Thread-24439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:26:28.738 [DEBUG] [Thread-24439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:26:28.786 [DEBUG] [Thread-24439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:26:28.786 [DEBUG] [Thread-24439] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:26:28.794 [DEBUG] [Thread-24439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:26:28.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:26:28.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')
2026-04-15T19:26:28.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
2026-04-15T19:26:28.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:26:28.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:26:28.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:26:28.826 [DEBUG] [Thread-24439] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:26:38.533 [DEBUG] [Thread-24441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:26:53.565 [DEBUG] [Thread-24442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:26:58.585 [DEBUG] [Thread-24443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:26:58.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:26:58.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:26:58.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
2026-04-15T19:27:00.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 26, 23), 4.49252, 73.5935, 0.0, 11.4516, 10.1123, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:27:00.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:26:23
2026-04-15T19:27:00.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:27:00.964 [DEBUG] [Thread-24444] [transport.py] [_log()] starting thread (client mode): 0xf13e0f40
2026-04-15T19:27:00.964 [DEBUG] [Thread-24444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:27:00.984 [DEBUG] [Thread-24444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:27:00.984 [INFO] [Thread-24444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] client lang: <none>
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] server lang: <none>
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] kex follows: False
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:27:00.987 [DEBUG] [Thread-24444] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:27:00.988 [DEBUG] [Thread-24444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:27:00.988 [DEBUG] [Thread-24444] [transport.py] [_log()] Compression: none
2026-04-15T19:27:00.988 [DEBUG] [Thread-24444] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:27:01.003 [DEBUG] [Thread-24444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:27:01.004 [DEBUG] [Thread-24444] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:27:01.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:27:01.004 [DEBUG] [Thread-24444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:27:01.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:27:01.005 [DEBUG] [Thread-24444] [transport.py] [_log()] userauth is OK
2026-04-15T19:27:01.005 [DEBUG] [Thread-24444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:27:01.005 [DEBUG] [Thread-24444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:27:01.005 [DEBUG] [Thread-24444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:27:01.005 [DEBUG] [Thread-24444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:27:01.023 [INFO] [Thread-24444] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:27:01.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:27:01.656 [DEBUG] [Thread-24444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:27:01.656 [DEBUG] [Thread-24444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:27:01.656 [DEBUG] [Thread-24444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:27:01.696 [DEBUG] [Thread-24444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:27:01.697 [DEBUG] [Thread-24444] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:27:01.699 [DEBUG] [Thread-24444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:27:01.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:27:01.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:27:01.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:27:01.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:27:01.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:27:01.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:27:01.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:27:01.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:27:01.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:27:01.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.726869 -999.00  +10.00  13.44     78   +6.50 1 1 1 1 1     0    0 3.60 -5.83 ZNESW 13.8 13.4 297.6 15.8 10.8 -24.9 10.7 -23.5 10.4 -21.5 10.7 -23.3
2026-04-15T19:27:01.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:27:01.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:27:01.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.726869
2026-04-15T19:27:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:27:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:27:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:27:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:27:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:27:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:26:23', tmtdew=4.49252, humidity=73.5935, cloud=0.0, wind=11.4516, temperature=10.1123, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:26:23', seeing=0.95, atlas_timestamp='2026-04-15T17:26:41.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07725000000000115, -0.01974999999999838, -0.018749999999998934, -0.027000000000001023, -0.01750000000000007, -0.005749999999999034, -0.022999999999999687, -0.031749999999998835, 0.011999999999998678, -0.009999999999999787, -0.07175000000000153, -0.01950000000000074, 0.038000000000000256, 0.03924999999999912, 0.004999999999999005, -0.034000000000000696, 0.03324999999999889, 0.018499999999999517, -0.019000000000000128, -0.004750000000001364, 0.015999999999998238, -0.02125000000000199, -0.06674999999999898, 0.00575000000000081, 0.03599999999999959, -0.0235000000000003, -0.03524999999999956, -0.014000000000001123, 0.09949999999999903, 0.08500000000000085, 0.02050000000000196, 0.0840000000000014, 0.032249999999999446], zp_timestamp='2026-04-15T17:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:27:01.718 [DEBUG] [Thread-24444] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:27:01.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:27:01.928 [DEBUG] [Thread-24447] [transport.py] [_log()] starting thread (client mode): 0xee907b80
2026-04-15T19:27:01.928 [DEBUG] [Thread-24447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:27:01.942 [DEBUG] [Thread-24447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:27:01.942 [INFO] [Thread-24447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:27:01.950 [DEBUG] [Thread-24447] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:27:01.950 [DEBUG] [Thread-24447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:27:01.950 [DEBUG] [Thread-24447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:27:01.950 [DEBUG] [Thread-24447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:27:01.950 [DEBUG] [Thread-24447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:27:01.950 [DEBUG] [Thread-24447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:27:01.950 [DEBUG] [Thread-24447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:27:01.950 [DEBUG] [Thread-24447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:27:01.950 [DEBUG] [Thread-24447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:27:01.950 [DEBUG] [Thread-24447] [transport.py] [_log()] client lang: <none>
2026-04-15T19:27:01.950 [DEBUG] [Thread-24447] [transport.py] [_log()] server lang: <none>
2026-04-15T19:27:01.950 [DEBUG] [Thread-24447] [transport.py] [_log()] kex follows: False
2026-04-15T19:27:01.950 [DEBUG] [Thread-24447] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:27:01.950 [DEBUG] [Thread-24447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:27:01.951 [DEBUG] [Thread-24447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:27:01.951 [DEBUG] [Thread-24447] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:27:01.951 [DEBUG] [Thread-24447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:27:01.951 [DEBUG] [Thread-24447] [transport.py] [_log()] Compression: none
2026-04-15T19:27:01.951 [DEBUG] [Thread-24447] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:27:02.006 [DEBUG] [Thread-24447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:27:02.006 [DEBUG] [Thread-24447] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:27:02.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:27:02.007 [DEBUG] [Thread-24447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:27:02.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:27:02.063 [DEBUG] [Thread-24447] [transport.py] [_log()] userauth is OK
2026-04-15T19:27:02.063 [DEBUG] [Thread-24447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:27:02.063 [DEBUG] [Thread-24447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:27:02.063 [DEBUG] [Thread-24447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:27:02.063 [DEBUG] [Thread-24447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:27:02.080 [INFO] [Thread-24447] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:27:02.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:27:02.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:27:02.902 [DEBUG] [Thread-24447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:27:02.902 [DEBUG] [Thread-24447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:27:02.951 [DEBUG] [Thread-24447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:27:02.952 [DEBUG] [Thread-24447] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:27:02.960 [DEBUG] [Thread-24447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:27:02.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:27:02.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')
2026-04-15T19:27: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') -> 00000000
2026-04-15T19:27:02.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:27:02.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:27:02.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:27:02.992 [DEBUG] [Thread-24447] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:27:08.588 [DEBUG] [Thread-24449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:27:23.619 [DEBUG] [Thread-24450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:27:24.070 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:27:24.071 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:27:33.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:27:33.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:27:33.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
2026-04-15T19:27:34.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 26, 59), 4.45161, 74.044, 0.0, 11.7868, 10.0459, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:27:34.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:26:59
2026-04-15T19:27:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:27:35.140 [DEBUG] [Thread-24451] [transport.py] [_log()] starting thread (client mode): 0xf13fca00
2026-04-15T19:27:35.140 [DEBUG] [Thread-24451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:27:35.161 [DEBUG] [Thread-24451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:27:35.161 [INFO] [Thread-24451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:27:35.165 [DEBUG] [Thread-24451] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:27:35.165 [DEBUG] [Thread-24451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:27:35.165 [DEBUG] [Thread-24451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:27:35.165 [DEBUG] [Thread-24451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:27:35.165 [DEBUG] [Thread-24451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:27:35.165 [DEBUG] [Thread-24451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:27:35.165 [DEBUG] [Thread-24451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:27:35.165 [DEBUG] [Thread-24451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:27:35.165 [DEBUG] [Thread-24451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:27:35.165 [DEBUG] [Thread-24451] [transport.py] [_log()] client lang: <none>
2026-04-15T19:27:35.165 [DEBUG] [Thread-24451] [transport.py] [_log()] server lang: <none>
2026-04-15T19:27:35.165 [DEBUG] [Thread-24451] [transport.py] [_log()] kex follows: False
2026-04-15T19:27:35.165 [DEBUG] [Thread-24451] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:27:35.166 [DEBUG] [Thread-24451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:27:35.166 [DEBUG] [Thread-24451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:27:35.166 [DEBUG] [Thread-24451] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:27:35.166 [DEBUG] [Thread-24451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:27:35.166 [DEBUG] [Thread-24451] [transport.py] [_log()] Compression: none
2026-04-15T19:27:35.166 [DEBUG] [Thread-24451] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:27:35.181 [DEBUG] [Thread-24451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:27:35.182 [DEBUG] [Thread-24451] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:27:35.182 [DEBUG] [Thread-24451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:27:35.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:27:35.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:27:35.183 [DEBUG] [Thread-24451] [transport.py] [_log()] userauth is OK
2026-04-15T19:27:35.183 [DEBUG] [Thread-24451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:27:35.183 [DEBUG] [Thread-24451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:27:35.183 [DEBUG] [Thread-24451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:27:35.183 [DEBUG] [Thread-24451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:27:35.213 [INFO] [Thread-24451] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:27:35.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:27:35.851 [DEBUG] [Thread-24451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:27:35.851 [DEBUG] [Thread-24451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:27:35.851 [DEBUG] [Thread-24451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:27:35.891 [DEBUG] [Thread-24451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:27:35.892 [DEBUG] [Thread-24451] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:27:35.894 [DEBUG] [Thread-24451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:27:35.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:27:35.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:27:35.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:27:35.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:27:35.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:27:35.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:27:35.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:27:35.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:27:35.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:27:35.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.727216 -999.00  +10.00  10.57     78   +6.50 1 1 1 1 1     0    0 3.57 -6.36 ZNESW 10.7 10.6 306.6 17.4 10.8 -24.9 10.7 -23.6 10.4 -21.5 10.7 -23.6
2026-04-15T19:27:35.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:27:35.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:27:35.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.727216
2026-04-15T19:27:35.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:27:35.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:27:35.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:27:35.913 [DEBUG] [Thread-24451] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:27:35.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:27:35.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:27:35.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:26:59', tmtdew=4.45161, humidity=74.044, cloud=0.0, wind=11.7868, temperature=10.0459, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:26:59', seeing=1.05, atlas_timestamp='2026-04-15T17:27:11.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07725000000000115, -0.01974999999999838, -0.018749999999998934, -0.027000000000001023, -0.01750000000000007, -0.005749999999999034, -0.022999999999999687, -0.031749999999998835, 0.011999999999998678, -0.009999999999999787, -0.07175000000000153, -0.01950000000000074, 0.038000000000000256, 0.03924999999999912, 0.004999999999999005, -0.034000000000000696, 0.03324999999999889, 0.018499999999999517, -0.019000000000000128, -0.004750000000001364, 0.015999999999998238, -0.02125000000000199, -0.06674999999999898, 0.00575000000000081, 0.03599999999999959, -0.0235000000000003, -0.03524999999999956, -0.014000000000001123, 0.09949999999999903, 0.08500000000000085, 0.02050000000000196, 0.0840000000000014, 0.032249999999999446], zp_timestamp='2026-04-15T17:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:27:36.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:27:36.125 [DEBUG] [Thread-24454] [transport.py] [_log()] starting thread (client mode): 0xf1353b50
2026-04-15T19:27:36.125 [DEBUG] [Thread-24454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:27:36.139 [DEBUG] [Thread-24454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:27:36.139 [INFO] [Thread-24454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:27:36.146 [DEBUG] [Thread-24454] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:27:36.146 [DEBUG] [Thread-24454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:27:36.146 [DEBUG] [Thread-24454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:27:36.146 [DEBUG] [Thread-24454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:27:36.147 [DEBUG] [Thread-24454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:27:36.147 [DEBUG] [Thread-24454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:27:36.147 [DEBUG] [Thread-24454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:27:36.147 [DEBUG] [Thread-24454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:27:36.147 [DEBUG] [Thread-24454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:27:36.147 [DEBUG] [Thread-24454] [transport.py] [_log()] client lang: <none>
2026-04-15T19:27:36.147 [DEBUG] [Thread-24454] [transport.py] [_log()] server lang: <none>
2026-04-15T19:27:36.147 [DEBUG] [Thread-24454] [transport.py] [_log()] kex follows: False
2026-04-15T19:27:36.147 [DEBUG] [Thread-24454] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:27:36.147 [DEBUG] [Thread-24454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:27:36.147 [DEBUG] [Thread-24454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:27:36.147 [DEBUG] [Thread-24454] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:27:36.147 [DEBUG] [Thread-24454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:27:36.147 [DEBUG] [Thread-24454] [transport.py] [_log()] Compression: none
2026-04-15T19:27:36.147 [DEBUG] [Thread-24454] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:27:36.212 [DEBUG] [Thread-24454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:27:36.212 [DEBUG] [Thread-24454] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:27:36.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:27:36.212 [DEBUG] [Thread-24454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:27:36.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:27:36.268 [DEBUG] [Thread-24454] [transport.py] [_log()] userauth is OK
2026-04-15T19:27:36.268 [DEBUG] [Thread-24454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:27:36.268 [DEBUG] [Thread-24454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:27:36.268 [DEBUG] [Thread-24454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:27:36.268 [DEBUG] [Thread-24454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:27:36.286 [INFO] [Thread-24454] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:27:36.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:27:36.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:27:37.082 [DEBUG] [Thread-24454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:27:37.082 [DEBUG] [Thread-24454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:27:37.129 [DEBUG] [Thread-24454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:27:37.129 [DEBUG] [Thread-24454] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:27:37.137 [DEBUG] [Thread-24454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:27:37.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:27:37.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')
2026-04-15T19:27:37.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
2026-04-15T19:27:37.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:27:37.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:27:37.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:27:37.174 [DEBUG] [Thread-24454] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:27:38.642 [DEBUG] [Thread-24456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:27:53.676 [DEBUG] [Thread-24457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:27:58.729 [DEBUG] [Thread-24458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:28:07.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:28:07.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:28:07.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T19:28:08.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 27, 34), 4.41077, 74.0552, 0.0, 15.8443, 10.3253, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:28:08.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:27:34
2026-04-15T19:28:08.699 [DEBUG] [Thread-24459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:28:08.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:28:09.253 [DEBUG] [Thread-24460] [transport.py] [_log()] starting thread (client mode): 0xf1353a90
2026-04-15T19:28:09.253 [DEBUG] [Thread-24460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:28:09.272 [DEBUG] [Thread-24460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:28:09.272 [INFO] [Thread-24460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:28:09.275 [DEBUG] [Thread-24460] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:28:09.275 [DEBUG] [Thread-24460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:28:09.275 [DEBUG] [Thread-24460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:28:09.275 [DEBUG] [Thread-24460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:28:09.276 [DEBUG] [Thread-24460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:28:09.276 [DEBUG] [Thread-24460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:28:09.276 [DEBUG] [Thread-24460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:28:09.276 [DEBUG] [Thread-24460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:28:09.276 [DEBUG] [Thread-24460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:28:09.276 [DEBUG] [Thread-24460] [transport.py] [_log()] client lang: <none>
2026-04-15T19:28:09.276 [DEBUG] [Thread-24460] [transport.py] [_log()] server lang: <none>
2026-04-15T19:28:09.276 [DEBUG] [Thread-24460] [transport.py] [_log()] kex follows: False
2026-04-15T19:28:09.276 [DEBUG] [Thread-24460] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:28:09.276 [DEBUG] [Thread-24460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:28:09.276 [DEBUG] [Thread-24460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:28:09.276 [DEBUG] [Thread-24460] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:28:09.276 [DEBUG] [Thread-24460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:28:09.276 [DEBUG] [Thread-24460] [transport.py] [_log()] Compression: none
2026-04-15T19:28:09.276 [DEBUG] [Thread-24460] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:28:09.292 [DEBUG] [Thread-24460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:28:09.293 [DEBUG] [Thread-24460] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:28:09.293 [DEBUG] [Thread-24460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:28:09.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:28:09.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:28:09.294 [DEBUG] [Thread-24460] [transport.py] [_log()] userauth is OK
2026-04-15T19:28:09.294 [DEBUG] [Thread-24460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:28:09.294 [DEBUG] [Thread-24460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:28:09.294 [DEBUG] [Thread-24460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:28:09.294 [DEBUG] [Thread-24460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:28:09.312 [INFO] [Thread-24460] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:28:09.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:28:09.952 [DEBUG] [Thread-24460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:28:09.952 [DEBUG] [Thread-24460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:28:09.952 [DEBUG] [Thread-24460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:28:09.992 [DEBUG] [Thread-24460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:28:09.992 [DEBUG] [Thread-24460] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:28:09.994 [DEBUG] [Thread-24460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:28:10.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:28:10.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:28:10.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:28:10.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:28:10.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:28:10.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:28:10.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:28:10.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:28:10.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:28:10.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.727563 -999.00  +10.00  12.10     78   +6.50 1 1 1 1 1     0    0 3.51 -7.16 ZNESW 15.6 12.1 292.4 16.0 10.8 -24.9 10.7 -23.5 10.4 -21.4 10.7 -23.4
2026-04-15T19:28:10.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:28:10.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:28:10.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.727563
2026-04-15T19:28:10.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:28:10.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:28:10.013 [DEBUG] [Thread-24460] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:28:10.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:28:10.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:28:10.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:28:10.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:27:34', tmtdew=4.41077, humidity=74.0552, cloud=0.0, wind=15.8443, temperature=10.3253, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:27:34', seeing=1.14, atlas_timestamp='2026-04-15T17:27:41.443', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07725000000000115, -0.01974999999999838, -0.018749999999998934, -0.027000000000001023, -0.01750000000000007, -0.005749999999999034, -0.022999999999999687, -0.031749999999998835, 0.011999999999998678, -0.009999999999999787, -0.07175000000000153, -0.01950000000000074, 0.038000000000000256, 0.03924999999999912, 0.004999999999999005, -0.034000000000000696, 0.03324999999999889, 0.018499999999999517, -0.019000000000000128, -0.004750000000001364, 0.015999999999998238, -0.02125000000000199, -0.06674999999999898, 0.00575000000000081, 0.03599999999999959, -0.0235000000000003, -0.03524999999999956, -0.014000000000001123, 0.09949999999999903, 0.08500000000000085, 0.02050000000000196, 0.0840000000000014, 0.032249999999999446], zp_timestamp='2026-04-15T17:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:28:10.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:28:10.230 [DEBUG] [Thread-24463] [transport.py] [_log()] starting thread (client mode): 0xf13ff460
2026-04-15T19:28:10.231 [DEBUG] [Thread-24463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:28:10.245 [DEBUG] [Thread-24463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:28:10.246 [INFO] [Thread-24463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:28:10.253 [DEBUG] [Thread-24463] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:28:10.253 [DEBUG] [Thread-24463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:28:10.253 [DEBUG] [Thread-24463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:28:10.253 [DEBUG] [Thread-24463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:28:10.253 [DEBUG] [Thread-24463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:28:10.253 [DEBUG] [Thread-24463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:28:10.253 [DEBUG] [Thread-24463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:28:10.253 [DEBUG] [Thread-24463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:28:10.253 [DEBUG] [Thread-24463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:28:10.253 [DEBUG] [Thread-24463] [transport.py] [_log()] client lang: <none>
2026-04-15T19:28:10.253 [DEBUG] [Thread-24463] [transport.py] [_log()] server lang: <none>
2026-04-15T19:28:10.253 [DEBUG] [Thread-24463] [transport.py] [_log()] kex follows: False
2026-04-15T19:28:10.253 [DEBUG] [Thread-24463] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:28:10.253 [DEBUG] [Thread-24463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:28:10.253 [DEBUG] [Thread-24463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:28:10.254 [DEBUG] [Thread-24463] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:28:10.254 [DEBUG] [Thread-24463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:28:10.254 [DEBUG] [Thread-24463] [transport.py] [_log()] Compression: none
2026-04-15T19:28:10.254 [DEBUG] [Thread-24463] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:28:10.308 [DEBUG] [Thread-24463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:28:10.308 [DEBUG] [Thread-24463] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:28:10.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:28:10.309 [DEBUG] [Thread-24463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:28:10.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:28:10.366 [DEBUG] [Thread-24463] [transport.py] [_log()] userauth is OK
2026-04-15T19:28:10.366 [DEBUG] [Thread-24463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:28:10.366 [DEBUG] [Thread-24463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:28:10.366 [DEBUG] [Thread-24463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:28:10.366 [DEBUG] [Thread-24463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:28:10.383 [INFO] [Thread-24463] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:28:10.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:28:10.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:28:11.205 [DEBUG] [Thread-24463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:28:11.205 [DEBUG] [Thread-24463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:28:11.252 [DEBUG] [Thread-24463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:28:11.253 [DEBUG] [Thread-24463] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:28:11.261 [DEBUG] [Thread-24463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:28:11.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:28:11.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')
2026-04-15T19:28:11.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
2026-04-15T19:28:11.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:28:11.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:28:11.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:28:11.292 [DEBUG] [Thread-24463] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:28:23.722 [DEBUG] [Thread-24465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:28:24.271 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:28:24.272 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:28:38.754 [DEBUG] [Thread-24466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:28:41.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:28:41.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:28:41.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
2026-04-15T19:28:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 28, 9), 4.40159, 74.0442, 0.0, 12.1748, 10.0461, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:28:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:28:09
2026-04-15T19:28:42.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:28:43.358 [DEBUG] [Thread-24467] [transport.py] [_log()] starting thread (client mode): 0xf1353310
2026-04-15T19:28:43.358 [DEBUG] [Thread-24467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:28:43.372 [DEBUG] [Thread-24467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:28:43.372 [INFO] [Thread-24467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:28:43.374 [DEBUG] [Thread-24467] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:28:43.374 [DEBUG] [Thread-24467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:28:43.374 [DEBUG] [Thread-24467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:28:43.374 [DEBUG] [Thread-24467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:28:43.374 [DEBUG] [Thread-24467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:28:43.374 [DEBUG] [Thread-24467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:28:43.374 [DEBUG] [Thread-24467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:28:43.374 [DEBUG] [Thread-24467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:28:43.374 [DEBUG] [Thread-24467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:28:43.374 [DEBUG] [Thread-24467] [transport.py] [_log()] client lang: <none>
2026-04-15T19:28:43.375 [DEBUG] [Thread-24467] [transport.py] [_log()] server lang: <none>
2026-04-15T19:28:43.375 [DEBUG] [Thread-24467] [transport.py] [_log()] kex follows: False
2026-04-15T19:28:43.375 [DEBUG] [Thread-24467] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:28:43.375 [DEBUG] [Thread-24467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:28:43.375 [DEBUG] [Thread-24467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:28:43.375 [DEBUG] [Thread-24467] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:28:43.375 [DEBUG] [Thread-24467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:28:43.375 [DEBUG] [Thread-24467] [transport.py] [_log()] Compression: none
2026-04-15T19:28:43.375 [DEBUG] [Thread-24467] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:28:43.385 [DEBUG] [Thread-24467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:28:43.385 [DEBUG] [Thread-24467] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:28:43.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:28:43.386 [DEBUG] [Thread-24467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:28:43.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:28:43.387 [DEBUG] [Thread-24467] [transport.py] [_log()] userauth is OK
2026-04-15T19:28:43.387 [DEBUG] [Thread-24467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:28:43.387 [DEBUG] [Thread-24467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:28:43.387 [DEBUG] [Thread-24467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:28:43.387 [DEBUG] [Thread-24467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:28:43.400 [INFO] [Thread-24467] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:28:43.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:28:44.003 [DEBUG] [Thread-24467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:28:44.003 [DEBUG] [Thread-24467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:28:44.003 [DEBUG] [Thread-24467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:28:44.043 [DEBUG] [Thread-24467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:28:44.044 [DEBUG] [Thread-24467] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:28:44.046 [DEBUG] [Thread-24467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:28:44.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:28:44.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:28:44.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:28:44.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:28:44.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:28:44.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:28:44.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:28:44.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:28:44.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:28:44.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.727911 -999.00  +10.00  14.29     78   +6.40 1 1 1 1 1     0    0 3.50 -7.58 ZNESW 12.5 14.3 303.0 17.7 10.8 -24.8 10.7 -23.6 10.4 -21.5 10.7 -23.4
2026-04-15T19:28:44.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:28:44.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:28:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.727911
2026-04-15T19:28:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:28:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:28:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:28:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:28:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:28:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:28:09', tmtdew=4.40159, humidity=74.0442, cloud=0.0, wind=12.1748, temperature=10.0461, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:28:09', seeing=0.94, atlas_timestamp='2026-04-15T17:28:11.510', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07725000000000115, -0.01974999999999838, -0.018749999999998934, -0.027000000000001023, -0.01750000000000007, -0.005749999999999034, -0.022999999999999687, -0.031749999999998835, 0.011999999999998678, -0.009999999999999787, -0.07175000000000153, -0.01950000000000074, 0.038000000000000256, 0.03924999999999912, 0.004999999999999005, -0.034000000000000696, 0.03324999999999889, 0.018499999999999517, -0.019000000000000128, -0.004750000000001364, 0.015999999999998238, -0.02125000000000199, -0.06674999999999898, 0.00575000000000081, 0.03599999999999959, -0.0235000000000003, -0.03524999999999956, -0.014000000000001123, 0.09949999999999903, 0.08500000000000085, 0.02050000000000196, 0.0840000000000014, 0.032249999999999446], zp_timestamp='2026-04-15T17:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:28:44.066 [DEBUG] [Thread-24467] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:28:44.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:28:44.277 [DEBUG] [Thread-24470] [transport.py] [_log()] starting thread (client mode): 0xf13e14e0
2026-04-15T19:28:44.277 [DEBUG] [Thread-24470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:28:44.291 [DEBUG] [Thread-24470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:28:44.291 [INFO] [Thread-24470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:28:44.298 [DEBUG] [Thread-24470] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:28:44.298 [DEBUG] [Thread-24470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:28:44.298 [DEBUG] [Thread-24470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:28:44.298 [DEBUG] [Thread-24470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:28:44.298 [DEBUG] [Thread-24470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:28:44.298 [DEBUG] [Thread-24470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:28:44.298 [DEBUG] [Thread-24470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:28:44.299 [DEBUG] [Thread-24470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:28:44.299 [DEBUG] [Thread-24470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:28:44.299 [DEBUG] [Thread-24470] [transport.py] [_log()] client lang: <none>
2026-04-15T19:28:44.299 [DEBUG] [Thread-24470] [transport.py] [_log()] server lang: <none>
2026-04-15T19:28:44.299 [DEBUG] [Thread-24470] [transport.py] [_log()] kex follows: False
2026-04-15T19:28:44.299 [DEBUG] [Thread-24470] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:28:44.299 [DEBUG] [Thread-24470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:28:44.299 [DEBUG] [Thread-24470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:28:44.299 [DEBUG] [Thread-24470] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:28:44.299 [DEBUG] [Thread-24470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:28:44.299 [DEBUG] [Thread-24470] [transport.py] [_log()] Compression: none
2026-04-15T19:28:44.299 [DEBUG] [Thread-24470] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:28:44.354 [DEBUG] [Thread-24470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:28:44.354 [DEBUG] [Thread-24470] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:28:44.355 [DEBUG] [Thread-24470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:28:44.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:28:44.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:28:44.411 [DEBUG] [Thread-24470] [transport.py] [_log()] userauth is OK
2026-04-15T19:28:44.411 [DEBUG] [Thread-24470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:28:44.411 [DEBUG] [Thread-24470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:28:44.412 [DEBUG] [Thread-24470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:28:44.412 [DEBUG] [Thread-24470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:28:44.429 [INFO] [Thread-24470] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:28:44.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:28:44.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:28:45.244 [DEBUG] [Thread-24470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:28:45.244 [DEBUG] [Thread-24470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:28:45.291 [DEBUG] [Thread-24470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:28:45.291 [DEBUG] [Thread-24470] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:28:45.300 [DEBUG] [Thread-24470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:28:45.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:28:45.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')
2026-04-15T19:28: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') -> 00000000
2026-04-15T19:28:45.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:28:45.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:28:45.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:28:45.331 [DEBUG] [Thread-24470] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:28:53.777 [DEBUG] [Thread-24472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:28:58.875 [DEBUG] [Thread-24473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:29:08.809 [DEBUG] [Thread-24474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:29:15.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:29:15.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:29:15.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
2026-04-15T19:29:16.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 28, 44), 4.39018, 74.1551, 0.0, 16.1971, 10.2924, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:29:16.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:28:44
2026-04-15T19:29:17.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:29:17.429 [DEBUG] [Thread-24475] [transport.py] [_log()] starting thread (client mode): 0xf13c92a0
2026-04-15T19:29:17.429 [DEBUG] [Thread-24475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:29:17.448 [DEBUG] [Thread-24475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:29:17.448 [INFO] [Thread-24475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:29:17.451 [DEBUG] [Thread-24475] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:29:17.451 [DEBUG] [Thread-24475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:29:17.451 [DEBUG] [Thread-24475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:29:17.451 [DEBUG] [Thread-24475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:29:17.451 [DEBUG] [Thread-24475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:29:17.451 [DEBUG] [Thread-24475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:29:17.451 [DEBUG] [Thread-24475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:29:17.451 [DEBUG] [Thread-24475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:29:17.452 [DEBUG] [Thread-24475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:29:17.452 [DEBUG] [Thread-24475] [transport.py] [_log()] client lang: <none>
2026-04-15T19:29:17.452 [DEBUG] [Thread-24475] [transport.py] [_log()] server lang: <none>
2026-04-15T19:29:17.452 [DEBUG] [Thread-24475] [transport.py] [_log()] kex follows: False
2026-04-15T19:29:17.452 [DEBUG] [Thread-24475] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:29:17.452 [DEBUG] [Thread-24475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:29:17.452 [DEBUG] [Thread-24475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:29:17.452 [DEBUG] [Thread-24475] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:29:17.452 [DEBUG] [Thread-24475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:29:17.452 [DEBUG] [Thread-24475] [transport.py] [_log()] Compression: none
2026-04-15T19:29:17.452 [DEBUG] [Thread-24475] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:29:17.468 [DEBUG] [Thread-24475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:29:17.469 [DEBUG] [Thread-24475] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:29:17.469 [DEBUG] [Thread-24475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:29:17.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:29:17.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:29:17.470 [DEBUG] [Thread-24475] [transport.py] [_log()] userauth is OK
2026-04-15T19:29:17.470 [DEBUG] [Thread-24475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:29:17.470 [DEBUG] [Thread-24475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:29:17.470 [DEBUG] [Thread-24475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:29:17.470 [DEBUG] [Thread-24475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:29:17.483 [INFO] [Thread-24475] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:29:17.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:29:18.109 [DEBUG] [Thread-24475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:29:18.109 [DEBUG] [Thread-24475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:29:18.109 [DEBUG] [Thread-24475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:29:18.150 [DEBUG] [Thread-24475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:29:18.150 [DEBUG] [Thread-24475] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:29:18.152 [DEBUG] [Thread-24475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:29:18.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:29:18.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:29:18.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:29:18.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:29:18.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:29:18.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:29:18.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:29:18.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:29:18.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:29:18.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.728258 -999.00  +10.00  15.00     78   +6.40 1 1 1 1 1     0    0 3.42 -8.02 ZNESW 13.8 15.0 309.2 17.6 10.8 -24.8 10.7 -23.6 10.3 -21.5 10.6 -23.4
2026-04-15T19:29:18.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:29:18.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:29:18.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.728258
2026-04-15T19:29:18.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:29:18.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:29:18.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:29:18.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:29:18.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:29:18.171 [DEBUG] [Thread-24475] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:29:18.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:28:44', tmtdew=4.39018, humidity=74.1551, cloud=0.0, wind=16.1971, temperature=10.2924, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:28:45', seeing=1.13, atlas_timestamp='2026-04-15T17:28:41.491', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07725000000000115, -0.01974999999999838, -0.018749999999998934, -0.027000000000001023, -0.01750000000000007, -0.005749999999999034, -0.022999999999999687, -0.031749999999998835, 0.011999999999998678, -0.009999999999999787, -0.07175000000000153, -0.01950000000000074, 0.038000000000000256, 0.03924999999999912, 0.004999999999999005, -0.034000000000000696, 0.03324999999999889, 0.018499999999999517, -0.019000000000000128, -0.004750000000001364, 0.015999999999998238, -0.02125000000000199, -0.06674999999999898, 0.00575000000000081, 0.03599999999999959, -0.0235000000000003, -0.03524999999999956, -0.014000000000001123, 0.09949999999999903, 0.08500000000000085, 0.02050000000000196, 0.0840000000000014, 0.032249999999999446], zp_timestamp='2026-04-15T17:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:29:18.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:29:18.381 [DEBUG] [Thread-24478] [transport.py] [_log()] starting thread (client mode): 0xf13cb4f0
2026-04-15T19:29:18.382 [DEBUG] [Thread-24478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:29:18.396 [DEBUG] [Thread-24478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:29:18.396 [INFO] [Thread-24478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:29:18.403 [DEBUG] [Thread-24478] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:29:18.403 [DEBUG] [Thread-24478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] client lang: <none>
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] server lang: <none>
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] kex follows: False
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] Compression: none
2026-04-15T19:29:18.404 [DEBUG] [Thread-24478] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:29:18.460 [DEBUG] [Thread-24478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:29:18.461 [DEBUG] [Thread-24478] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:29:18.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:29:18.461 [DEBUG] [Thread-24478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:29:18.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:29:18.518 [DEBUG] [Thread-24478] [transport.py] [_log()] userauth is OK
2026-04-15T19:29:18.518 [DEBUG] [Thread-24478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:29:18.518 [DEBUG] [Thread-24478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:29:18.518 [DEBUG] [Thread-24478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:29:18.518 [DEBUG] [Thread-24478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:29:18.542 [INFO] [Thread-24478] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:29:18.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:29:18.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:29:19.340 [DEBUG] [Thread-24478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:29:19.340 [DEBUG] [Thread-24478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:29:19.387 [DEBUG] [Thread-24478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:29:19.387 [DEBUG] [Thread-24478] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:29:19.396 [DEBUG] [Thread-24478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:29:19.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:29:19.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')
2026-04-15T19:29: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
2026-04-15T19:29:19.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:29:19.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:29:19.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:29:19.427 [DEBUG] [Thread-24478] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:29:23.832 [DEBUG] [Thread-24480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:29:24.474 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:29:24.474 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:29:38.865 [DEBUG] [Thread-24481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:29:49.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:29:49.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:29:49.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
2026-04-15T19:29:50.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 29, 20), 4.37783, 74.1604, 0.0, 14.6635, 10.0131, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:29:50.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:29:20
2026-04-15T19:29:51.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:29:51.499 [DEBUG] [Thread-24482] [transport.py] [_log()] starting thread (client mode): 0xf13e0910
2026-04-15T19:29:51.499 [DEBUG] [Thread-24482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:29:51.518 [DEBUG] [Thread-24482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:29:51.518 [INFO] [Thread-24482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:29:51.521 [DEBUG] [Thread-24482] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:29:51.521 [DEBUG] [Thread-24482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] client lang: <none>
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] server lang: <none>
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] kex follows: False
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] Compression: none
2026-04-15T19:29:51.522 [DEBUG] [Thread-24482] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:29:51.539 [DEBUG] [Thread-24482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:29:51.540 [DEBUG] [Thread-24482] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:29:51.540 [DEBUG] [Thread-24482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:29:51.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:29:51.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:29:51.541 [DEBUG] [Thread-24482] [transport.py] [_log()] userauth is OK
2026-04-15T19:29:51.541 [DEBUG] [Thread-24482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:29:51.541 [DEBUG] [Thread-24482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:29:51.541 [DEBUG] [Thread-24482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:29:51.541 [DEBUG] [Thread-24482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:29:51.559 [INFO] [Thread-24482] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:29:51.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:29:52.173 [DEBUG] [Thread-24482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:29:52.173 [DEBUG] [Thread-24482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:29:52.173 [DEBUG] [Thread-24482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:29:52.214 [DEBUG] [Thread-24482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:29:52.214 [DEBUG] [Thread-24482] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:29:52.216 [DEBUG] [Thread-24482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:29:52.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:29:52.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:29:52.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:29:52.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:29:52.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:29:52.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:29:52.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:29:52.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:29:52.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:29:52.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.728952 -999.00  +10.00  14.39     78   +6.40 1 1 1 1 1     0    0 3.55 -6.75 ZNESW 11.2 14.4 292.8 18.5 10.8 -24.9 10.6 -23.5 10.3 -21.4 10.7 -23.4
2026-04-15T19:29:52.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:29:52.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:29:52.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.728952
2026-04-15T19:29:52.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:29:52.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:29:52.234 [DEBUG] [Thread-24482] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:29:52.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:29:52.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:29:52.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:29:52.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:29:20', tmtdew=4.37783, humidity=74.1604, cloud=0.0, wind=14.6635, temperature=10.0131, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:29:20', seeing=1.07, atlas_timestamp='2026-04-15T17:29:41.453', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07725000000000115, -0.01974999999999838, -0.018749999999998934, -0.027000000000001023, -0.01750000000000007, -0.005749999999999034, -0.022999999999999687, -0.031749999999998835, 0.011999999999998678, -0.009999999999999787, -0.07175000000000153, -0.01950000000000074, 0.038000000000000256, 0.03924999999999912, 0.004999999999999005, -0.034000000000000696, 0.03324999999999889, 0.018499999999999517, -0.019000000000000128, -0.004750000000001364, 0.015999999999998238, -0.02125000000000199, -0.06674999999999898, 0.00575000000000081, 0.03599999999999959, -0.0235000000000003, -0.03524999999999956, -0.014000000000001123, 0.09949999999999903, 0.08500000000000085, 0.02050000000000196, 0.0840000000000014, 0.032249999999999446], zp_timestamp='2026-04-15T17:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:29:52.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:29:52.445 [DEBUG] [Thread-24485] [transport.py] [_log()] starting thread (client mode): 0xf13510f0
2026-04-15T19:29:52.445 [DEBUG] [Thread-24485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:29:52.460 [DEBUG] [Thread-24485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:29:52.460 [INFO] [Thread-24485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:29:52.468 [DEBUG] [Thread-24485] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:29:52.468 [DEBUG] [Thread-24485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:29:52.468 [DEBUG] [Thread-24485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:29:52.468 [DEBUG] [Thread-24485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:29:52.468 [DEBUG] [Thread-24485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:29:52.468 [DEBUG] [Thread-24485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:29:52.468 [DEBUG] [Thread-24485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:29:52.468 [DEBUG] [Thread-24485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:29:52.468 [DEBUG] [Thread-24485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:29:52.468 [DEBUG] [Thread-24485] [transport.py] [_log()] client lang: <none>
2026-04-15T19:29:52.469 [DEBUG] [Thread-24485] [transport.py] [_log()] server lang: <none>
2026-04-15T19:29:52.469 [DEBUG] [Thread-24485] [transport.py] [_log()] kex follows: False
2026-04-15T19:29:52.469 [DEBUG] [Thread-24485] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:29:52.469 [DEBUG] [Thread-24485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:29:52.469 [DEBUG] [Thread-24485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:29:52.469 [DEBUG] [Thread-24485] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:29:52.469 [DEBUG] [Thread-24485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:29:52.469 [DEBUG] [Thread-24485] [transport.py] [_log()] Compression: none
2026-04-15T19:29:52.469 [DEBUG] [Thread-24485] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:29:52.523 [DEBUG] [Thread-24485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:29:52.523 [DEBUG] [Thread-24485] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:29:52.524 [DEBUG] [Thread-24485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:29:52.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:29:52.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:29:52.580 [DEBUG] [Thread-24485] [transport.py] [_log()] userauth is OK
2026-04-15T19:29:52.580 [DEBUG] [Thread-24485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:29:52.580 [DEBUG] [Thread-24485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:29:52.580 [DEBUG] [Thread-24485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:29:52.580 [DEBUG] [Thread-24485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:29:52.597 [INFO] [Thread-24485] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:29:52.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:29:52.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:29:53.451 [DEBUG] [Thread-24485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:29:53.451 [DEBUG] [Thread-24485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:29:53.498 [DEBUG] [Thread-24485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:29:53.498 [DEBUG] [Thread-24485] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:29:53.507 [DEBUG] [Thread-24485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:29:53.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:29:53.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')
2026-04-15T19:29:53.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
2026-04-15T19:29:53.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:29:53.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:29:53.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:29:53.538 [DEBUG] [Thread-24485] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:29:53.888 [DEBUG] [Thread-24487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:29:59.020 [DEBUG] [Thread-24488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:30:08.922 [DEBUG] [Thread-24489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:30:21.318 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:30:23.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:30:23.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:30:23.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
2026-04-15T19:30:23.946 [DEBUG] [Thread-24490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:30:24.477 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:30:24.680 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:30:24.681 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:30:24.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 29, 55), 4.32247, 74.1937, 0.0, 13.8514, 9.99632, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:30:24.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:29:55
2026-04-15T19:30:25.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:30:25.644 [DEBUG] [Thread-24491] [transport.py] [_log()] starting thread (client mode): 0xf13530a0
2026-04-15T19:30:25.644 [DEBUG] [Thread-24491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:30:25.663 [DEBUG] [Thread-24491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:30:25.663 [INFO] [Thread-24491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:30:25.665 [DEBUG] [Thread-24491] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:30:25.665 [DEBUG] [Thread-24491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:30:25.665 [DEBUG] [Thread-24491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:30:25.665 [DEBUG] [Thread-24491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:30:25.665 [DEBUG] [Thread-24491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:30:25.665 [DEBUG] [Thread-24491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:30:25.665 [DEBUG] [Thread-24491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:30:25.665 [DEBUG] [Thread-24491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:30:25.666 [DEBUG] [Thread-24491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:30:25.666 [DEBUG] [Thread-24491] [transport.py] [_log()] client lang: <none>
2026-04-15T19:30:25.666 [DEBUG] [Thread-24491] [transport.py] [_log()] server lang: <none>
2026-04-15T19:30:25.666 [DEBUG] [Thread-24491] [transport.py] [_log()] kex follows: False
2026-04-15T19:30:25.666 [DEBUG] [Thread-24491] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:30:25.666 [DEBUG] [Thread-24491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:30:25.666 [DEBUG] [Thread-24491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:30:25.666 [DEBUG] [Thread-24491] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:30:25.666 [DEBUG] [Thread-24491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:30:25.666 [DEBUG] [Thread-24491] [transport.py] [_log()] Compression: none
2026-04-15T19:30:25.666 [DEBUG] [Thread-24491] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:30:25.677 [DEBUG] [Thread-24491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:30:25.677 [DEBUG] [Thread-24491] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:30:25.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:30:25.677 [DEBUG] [Thread-24491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:30:25.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:30:25.678 [DEBUG] [Thread-24491] [transport.py] [_log()] userauth is OK
2026-04-15T19:30:25.678 [DEBUG] [Thread-24491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:30:25.678 [DEBUG] [Thread-24491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:30:25.678 [DEBUG] [Thread-24491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:30:25.678 [DEBUG] [Thread-24491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:30:25.691 [INFO] [Thread-24491] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:30:25.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:30:26.304 [DEBUG] [Thread-24491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:30:26.304 [DEBUG] [Thread-24491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:30:26.305 [DEBUG] [Thread-24491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:30:26.345 [DEBUG] [Thread-24491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:30:26.345 [DEBUG] [Thread-24491] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:30:26.347 [DEBUG] [Thread-24491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:30:26.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:30:26.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:30:26.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:30:26.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:30:26.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:30:26.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:30:26.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:30:26.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:30:26.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:30:26.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.729300 -999.00  +10.00  14.81     78   +6.50 1 1 1 1 1     0    0 3.51 -6.85 ZNESW 14.5 14.8 300.8 17.3 10.8 -24.9 10.7 -23.6 10.3 -21.5 10.6 -23.5
2026-04-15T19:30:26.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:30:26.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:30:26.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.729300
2026-04-15T19:30:26.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:30:26.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:30:26.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:30:26.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:30:26.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:30:26.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:29:55', tmtdew=4.32247, humidity=74.1937, cloud=0.0, wind=13.8514, temperature=9.99632, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:29:55', seeing=1.22, atlas_timestamp='2026-04-15T17:30:11.520', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07725000000000115, -0.01974999999999838, -0.018749999999998934, -0.027000000000001023, -0.01750000000000007, -0.005749999999999034, -0.022999999999999687, -0.031749999999998835, 0.011999999999998678, -0.009999999999999787, -0.07175000000000153, -0.01950000000000074, 0.038000000000000256, 0.03924999999999912, 0.004999999999999005, -0.034000000000000696, 0.03324999999999889, 0.018499999999999517, -0.019000000000000128, -0.004750000000001364, 0.015999999999998238, -0.02125000000000199, -0.06674999999999898, 0.00575000000000081, 0.03599999999999959, -0.0235000000000003, -0.03524999999999956, -0.014000000000001123, 0.09949999999999903, 0.08500000000000085, 0.02050000000000196, 0.0840000000000014, 0.032249999999999446], zp_timestamp='2026-04-15T17:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:30:26.367 [DEBUG] [Thread-24491] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:30:26.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:30:26.582 [DEBUG] [Thread-24494] [transport.py] [_log()] starting thread (client mode): 0xf13ffa60
2026-04-15T19:30:26.582 [DEBUG] [Thread-24494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:30:26.596 [DEBUG] [Thread-24494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:30:26.596 [INFO] [Thread-24494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:30:26.603 [DEBUG] [Thread-24494] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:30:26.603 [DEBUG] [Thread-24494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] client lang: <none>
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] server lang: <none>
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] kex follows: False
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] Compression: none
2026-04-15T19:30:26.604 [DEBUG] [Thread-24494] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:30:26.661 [DEBUG] [Thread-24494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:30:26.661 [DEBUG] [Thread-24494] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:30:26.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:30:26.662 [DEBUG] [Thread-24494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:30:26.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:30:26.718 [DEBUG] [Thread-24494] [transport.py] [_log()] userauth is OK
2026-04-15T19:30:26.719 [DEBUG] [Thread-24494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:30:26.719 [DEBUG] [Thread-24494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:30:26.719 [DEBUG] [Thread-24494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:30:26.719 [DEBUG] [Thread-24494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:30:26.736 [INFO] [Thread-24494] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:30:26.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:30:26.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:30:27.570 [DEBUG] [Thread-24494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:30:27.570 [DEBUG] [Thread-24494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:30:27.617 [DEBUG] [Thread-24494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:30:27.617 [DEBUG] [Thread-24494] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:30:27.626 [DEBUG] [Thread-24494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:30:27.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:30:27.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')
2026-04-15T19:30:27.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
2026-04-15T19:30:27.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:30:27.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:30:27.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:30:27.657 [DEBUG] [Thread-24494] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:30:29.510 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:30:35.926 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:30:38.969 [DEBUG] [Thread-24496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:30:54.005 [DEBUG] [Thread-24497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:30:55.398 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:30:57.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:30:57.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:30:57.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
2026-04-15T19:30:58.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 30, 31), 4.32247, 74.1937, 0.0, 13.7808, 9.99632, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:30:58.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:30:31
2026-04-15T19:30:59.164 [DEBUG] [Thread-24498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:30:59.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:30:59.707 [DEBUG] [Thread-24499] [transport.py] [_log()] starting thread (client mode): 0xee91db10
2026-04-15T19:30:59.708 [DEBUG] [Thread-24499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:30:59.727 [DEBUG] [Thread-24499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:30:59.727 [INFO] [Thread-24499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:30:59.730 [DEBUG] [Thread-24499] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:30:59.730 [DEBUG] [Thread-24499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:30:59.730 [DEBUG] [Thread-24499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:30:59.730 [DEBUG] [Thread-24499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:30:59.730 [DEBUG] [Thread-24499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:30:59.730 [DEBUG] [Thread-24499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:30:59.730 [DEBUG] [Thread-24499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:30:59.730 [DEBUG] [Thread-24499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:30:59.731 [DEBUG] [Thread-24499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:30:59.731 [DEBUG] [Thread-24499] [transport.py] [_log()] client lang: <none>
2026-04-15T19:30:59.731 [DEBUG] [Thread-24499] [transport.py] [_log()] server lang: <none>
2026-04-15T19:30:59.731 [DEBUG] [Thread-24499] [transport.py] [_log()] kex follows: False
2026-04-15T19:30:59.731 [DEBUG] [Thread-24499] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:30:59.731 [DEBUG] [Thread-24499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:30:59.731 [DEBUG] [Thread-24499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:30:59.731 [DEBUG] [Thread-24499] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:30:59.731 [DEBUG] [Thread-24499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:30:59.731 [DEBUG] [Thread-24499] [transport.py] [_log()] Compression: none
2026-04-15T19:30:59.731 [DEBUG] [Thread-24499] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:30:59.749 [DEBUG] [Thread-24499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:30:59.749 [DEBUG] [Thread-24499] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:30:59.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:30:59.750 [DEBUG] [Thread-24499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:30:59.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:30:59.792 [DEBUG] [Thread-24499] [transport.py] [_log()] userauth is OK
2026-04-15T19:30:59.792 [DEBUG] [Thread-24499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:30:59.792 [DEBUG] [Thread-24499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:30:59.792 [DEBUG] [Thread-24499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:30:59.792 [DEBUG] [Thread-24499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:30:59.824 [INFO] [Thread-24499] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:30:59.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:30:59.831 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:31:00.584 [DEBUG] [Thread-24499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:31:00.584 [DEBUG] [Thread-24499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:31:00.585 [DEBUG] [Thread-24499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:31:00.626 [DEBUG] [Thread-24499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:31:00.626 [DEBUG] [Thread-24499] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:31:00.628 [DEBUG] [Thread-24499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:31:00.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:31:00.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:31:00.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:31:00.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:31:00.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:31:00.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:31:00.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:31:00.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:31:00.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:31:00.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.729300 -999.00  +10.00  14.81     78   +6.50 1 1 1 1 1     0    0 3.51 -6.85 ZNESW 14.5 14.8 300.8 17.3 10.8 -24.9 10.7 -23.6 10.3 -21.5 10.6 -23.5
2026-04-15T19:31:00.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:31:00.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:31:00.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.729300
2026-04-15T19:31:00.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:31:00.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:31:00.646 [DEBUG] [Thread-24499] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:31:00.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:31:00.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:31:00.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:31:00.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:30:31', tmtdew=4.32247, humidity=74.1937, cloud=0.0, wind=13.7808, temperature=9.99632, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:30:31', seeing=1.04, atlas_timestamp='2026-04-15T17:30:11.520', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07725000000000115, -0.01974999999999838, -0.018749999999998934, -0.027000000000001023, -0.01750000000000007, -0.005749999999999034, -0.022999999999999687, -0.031749999999998835, 0.011999999999998678, -0.009999999999999787, -0.07175000000000153, -0.01950000000000074, 0.038000000000000256, 0.03924999999999912, 0.004999999999999005, -0.034000000000000696, 0.03324999999999889, 0.018499999999999517, -0.019000000000000128, -0.004750000000001364, 0.015999999999998238, -0.02125000000000199, -0.06674999999999898, 0.00575000000000081, 0.03599999999999959, -0.0235000000000003, -0.03524999999999956, -0.014000000000001123, 0.09949999999999903, 0.08500000000000085, 0.02050000000000196, 0.0840000000000014, 0.032249999999999446], zp_timestamp='2026-04-15T17:26:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:31:00.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:31:00.857 [DEBUG] [Thread-24502] [transport.py] [_log()] starting thread (client mode): 0xf1351420
2026-04-15T19:31:00.858 [DEBUG] [Thread-24502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:31:00.876 [DEBUG] [Thread-24502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:31:00.876 [INFO] [Thread-24502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:31:00.884 [DEBUG] [Thread-24502] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:31:00.884 [DEBUG] [Thread-24502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:31:00.884 [DEBUG] [Thread-24502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:31:00.884 [DEBUG] [Thread-24502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:31:00.884 [DEBUG] [Thread-24502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:31:00.884 [DEBUG] [Thread-24502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:31:00.884 [DEBUG] [Thread-24502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:31:00.884 [DEBUG] [Thread-24502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:31:00.884 [DEBUG] [Thread-24502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:31:00.884 [DEBUG] [Thread-24502] [transport.py] [_log()] client lang: <none>
2026-04-15T19:31:00.884 [DEBUG] [Thread-24502] [transport.py] [_log()] server lang: <none>
2026-04-15T19:31:00.884 [DEBUG] [Thread-24502] [transport.py] [_log()] kex follows: False
2026-04-15T19:31:00.884 [DEBUG] [Thread-24502] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:31:00.884 [DEBUG] [Thread-24502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:31:00.884 [DEBUG] [Thread-24502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:31:00.885 [DEBUG] [Thread-24502] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:31:00.885 [DEBUG] [Thread-24502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:31:00.885 [DEBUG] [Thread-24502] [transport.py] [_log()] Compression: none
2026-04-15T19:31:00.885 [DEBUG] [Thread-24502] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:31:00.940 [DEBUG] [Thread-24502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:31:00.940 [DEBUG] [Thread-24502] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:31:00.940 [DEBUG] [Thread-24502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:31:00.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:31:00.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:31:00.997 [DEBUG] [Thread-24502] [transport.py] [_log()] userauth is OK
2026-04-15T19:31:00.997 [DEBUG] [Thread-24502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:31:00.997 [DEBUG] [Thread-24502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:31:00.997 [DEBUG] [Thread-24502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:31:00.997 [DEBUG] [Thread-24502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:31:01.014 [INFO] [Thread-24502] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:31:01.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:31:01.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:31:01.846 [DEBUG] [Thread-24502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:31:01.846 [DEBUG] [Thread-24502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:31:01.895 [DEBUG] [Thread-24502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:31:01.895 [DEBUG] [Thread-24502] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:31:01.903 [DEBUG] [Thread-24502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:31:01.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:31:01.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')
2026-04-15T19:31:01.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
2026-04-15T19:31:01.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:31:01.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:31:01.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:31:01.934 [DEBUG] [Thread-24502] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:31:09.028 [DEBUG] [Thread-24504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:31:19.257 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:31:23.649 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:31:24.060 [DEBUG] [Thread-24505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:31:24.883 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:31:24.884 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:31:29.771 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:31:31.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:31:31.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:31:31.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
2026-04-15T19:31:33.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 31, 6), 4.31813, 74.2104, 0.0, 13.4809, 9.96325, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:31:33.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:31:06
2026-04-15T19:31:33.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:31:34.011 [DEBUG] [Thread-24506] [transport.py] [_log()] starting thread (client mode): 0xf13cba60
2026-04-15T19:31:34.011 [DEBUG] [Thread-24506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:31:34.031 [DEBUG] [Thread-24506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:31:34.031 [INFO] [Thread-24506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:31:34.034 [DEBUG] [Thread-24506] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:31:34.034 [DEBUG] [Thread-24506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:31:34.034 [DEBUG] [Thread-24506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:31:34.034 [DEBUG] [Thread-24506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:31:34.034 [DEBUG] [Thread-24506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:31:34.035 [DEBUG] [Thread-24506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:31:34.035 [DEBUG] [Thread-24506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:31:34.035 [DEBUG] [Thread-24506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:31:34.035 [DEBUG] [Thread-24506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:31:34.035 [DEBUG] [Thread-24506] [transport.py] [_log()] client lang: <none>
2026-04-15T19:31:34.035 [DEBUG] [Thread-24506] [transport.py] [_log()] server lang: <none>
2026-04-15T19:31:34.035 [DEBUG] [Thread-24506] [transport.py] [_log()] kex follows: False
2026-04-15T19:31:34.035 [DEBUG] [Thread-24506] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:31:34.035 [DEBUG] [Thread-24506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:31:34.035 [DEBUG] [Thread-24506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:31:34.035 [DEBUG] [Thread-24506] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:31:34.035 [DEBUG] [Thread-24506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:31:34.035 [DEBUG] [Thread-24506] [transport.py] [_log()] Compression: none
2026-04-15T19:31:34.035 [DEBUG] [Thread-24506] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:31:34.050 [DEBUG] [Thread-24506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:31:34.050 [DEBUG] [Thread-24506] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:31:34.051 [DEBUG] [Thread-24506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:31:34.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:31:34.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:31:34.092 [DEBUG] [Thread-24506] [transport.py] [_log()] userauth is OK
2026-04-15T19:31:34.092 [DEBUG] [Thread-24506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:31:34.092 [DEBUG] [Thread-24506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:31:34.092 [DEBUG] [Thread-24506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:31:34.092 [DEBUG] [Thread-24506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:31:34.114 [INFO] [Thread-24506] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:31:34.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:31:34.139 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:31:34.878 [DEBUG] [Thread-24506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:31:34.878 [DEBUG] [Thread-24506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:31:34.878 [DEBUG] [Thread-24506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:31:34.919 [DEBUG] [Thread-24506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:31:34.919 [DEBUG] [Thread-24506] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:31:34.920 [DEBUG] [Thread-24506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:31:34.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:31:34.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:31:34.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:31:34.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:31:34.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:31:34.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:31:34.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:31:34.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:31:34.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:31:34.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.729647 -999.00  +10.00  15.18     78   +6.40 1 1 1 1 1     0    0 3.47 -7.74 ZNESW 15.6 15.2 303.2 17.8 10.8 -23.1 10.6 -23.5 10.3 -21.5 10.7 -23.4
2026-04-15T19:31:34.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:31:34.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:31:34.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.729647
2026-04-15T19:31:34.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:31:34.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:31:34.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:31:34.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:31:34.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:31:34.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:31:06', tmtdew=4.31813, humidity=74.2104, cloud=0.0, wind=13.4809, temperature=9.96325, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:31:06', seeing=1.21, atlas_timestamp='2026-04-15T17:30:41.501', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.10174999999999912, -0.0467499999999994, -0.05799999999999983, -0.0625, -0.040749999999999176, -0.06700000000000195, -0.06074999999999875, -0.029500000000000526, -0.058999999999999275, -0.09774999999999956, -0.04100000000000037, 0.019000000000000128, -0.02674999999999983, -0.0070000000000014495, -0.027499999999999858, 0.013249999999999318, 0.016000000000000014, -0.028999999999999915, -0.023749999999999716, 0.0009999999999994458, 0.017249999999998877, -0.053749999999999076, -0.011750000000001037, 0.02999999999999936, -0.02549999999999919, -0.0572499999999998, -0.03550000000000075, 0.03200000000000003, 0.2190000000000012, -0.0034999999999989484, 0.02400000000000091, -0.05525000000000091], zp_timestamp='2026-04-15T17:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:31:34.938 [DEBUG] [Thread-24506] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:31:35.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:31:35.181 [DEBUG] [Thread-24509] [transport.py] [_log()] starting thread (client mode): 0xf1353ca0
2026-04-15T19:31:35.181 [DEBUG] [Thread-24509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:31:35.197 [DEBUG] [Thread-24509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:31:35.197 [INFO] [Thread-24509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:31:35.204 [DEBUG] [Thread-24509] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:31:35.204 [DEBUG] [Thread-24509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] client lang: <none>
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] server lang: <none>
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] kex follows: False
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] Compression: none
2026-04-15T19:31:35.205 [DEBUG] [Thread-24509] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:31:35.263 [DEBUG] [Thread-24509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:31:35.263 [DEBUG] [Thread-24509] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:31:35.264 [DEBUG] [Thread-24509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:31:35.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:31:35.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:31:35.320 [DEBUG] [Thread-24509] [transport.py] [_log()] userauth is OK
2026-04-15T19:31:35.320 [DEBUG] [Thread-24509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:31:35.320 [DEBUG] [Thread-24509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:31:35.320 [DEBUG] [Thread-24509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:31:35.321 [DEBUG] [Thread-24509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:31:35.339 [INFO] [Thread-24509] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:31:35.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:31:35.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:31:36.219 [DEBUG] [Thread-24509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:31:36.219 [DEBUG] [Thread-24509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:31:36.266 [DEBUG] [Thread-24509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:31:36.266 [DEBUG] [Thread-24509] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:31:36.275 [DEBUG] [Thread-24509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:31:36.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:31:36.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')
2026-04-15T19:31:36.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
2026-04-15T19:31:36.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:31:36.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:31:36.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:31:36.306 [DEBUG] [Thread-24509] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:31:39.084 [DEBUG] [Thread-24511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:31:44.881 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:31:48.943 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:31:54.117 [DEBUG] [Thread-24512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:31:55.309 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:31:59.308 [DEBUG] [Thread-24513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:00.701 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:06.095 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:06.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:32:06.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:32:06.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
2026-04-15T19:32:07.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 31, 41), 4.30299, 74.5866, 0.0, 16.4794, 10.1933, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:32:07.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:31:41
2026-04-15T19:32:08.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:32:08.501 [DEBUG] [Thread-24514] [transport.py] [_log()] starting thread (client mode): 0xf13c8c70
2026-04-15T19:32:08.501 [DEBUG] [Thread-24514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:32:08.520 [DEBUG] [Thread-24514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:32:08.520 [INFO] [Thread-24514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:32:08.523 [DEBUG] [Thread-24514] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:32:08.523 [DEBUG] [Thread-24514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:32:08.523 [DEBUG] [Thread-24514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:32:08.523 [DEBUG] [Thread-24514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:32:08.523 [DEBUG] [Thread-24514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:32:08.524 [DEBUG] [Thread-24514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:32:08.524 [DEBUG] [Thread-24514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:32:08.524 [DEBUG] [Thread-24514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:32:08.524 [DEBUG] [Thread-24514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:32:08.524 [DEBUG] [Thread-24514] [transport.py] [_log()] client lang: <none>
2026-04-15T19:32:08.524 [DEBUG] [Thread-24514] [transport.py] [_log()] server lang: <none>
2026-04-15T19:32:08.524 [DEBUG] [Thread-24514] [transport.py] [_log()] kex follows: False
2026-04-15T19:32:08.524 [DEBUG] [Thread-24514] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:32:08.524 [DEBUG] [Thread-24514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:32:08.524 [DEBUG] [Thread-24514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:32:08.524 [DEBUG] [Thread-24514] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:32:08.524 [DEBUG] [Thread-24514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:32:08.524 [DEBUG] [Thread-24514] [transport.py] [_log()] Compression: none
2026-04-15T19:32:08.524 [DEBUG] [Thread-24514] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:32:08.541 [DEBUG] [Thread-24514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:32:08.541 [DEBUG] [Thread-24514] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:32:08.541 [DEBUG] [Thread-24514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:32:08.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:32:08.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:32:08.542 [DEBUG] [Thread-24514] [transport.py] [_log()] userauth is OK
2026-04-15T19:32:08.542 [DEBUG] [Thread-24514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:32:08.542 [DEBUG] [Thread-24514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:32:08.542 [DEBUG] [Thread-24514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:32:08.542 [DEBUG] [Thread-24514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:32:08.555 [INFO] [Thread-24514] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:32:08.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:32:09.141 [DEBUG] [Thread-24516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:09.376 [DEBUG] [Thread-24514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:32:09.376 [DEBUG] [Thread-24514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:32:09.376 [DEBUG] [Thread-24514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:32:09.416 [DEBUG] [Thread-24514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:32:09.416 [DEBUG] [Thread-24514] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:32:09.419 [DEBUG] [Thread-24514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:32:09.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:32:09.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:32:09.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:32:09.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:32:09.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:32:09.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:32:09.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:32:09.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:32:09.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:32:09.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.729994 -999.00   +9.90  15.99     78   +6.40 1 1 1 1 1     0    0 3.39 -9.51 ZNESW 14.5 16.0 298.6 18.0 10.8 -24.8 10.6 -23.5 10.3 -21.3 10.6 -23.3
2026-04-15T19:32:09.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:32:09.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:32:09.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.729994
2026-04-15T19:32:09.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:32:09.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:32:09.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:32:09.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:32:09.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:32:09.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:31:41', tmtdew=4.30299, humidity=74.5866, cloud=0.0, wind=16.4794, temperature=10.1933, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:31:41', seeing=1.21, atlas_timestamp='2026-04-15T17:31:11.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.10174999999999912, -0.0467499999999994, -0.05799999999999983, -0.0625, -0.040749999999999176, -0.06700000000000195, -0.06074999999999875, -0.029500000000000526, -0.058999999999999275, -0.09774999999999956, -0.04100000000000037, 0.019000000000000128, -0.02674999999999983, -0.0070000000000014495, -0.027499999999999858, 0.013249999999999318, 0.016000000000000014, -0.028999999999999915, -0.023749999999999716, 0.0009999999999994458, 0.017249999999998877, -0.053749999999999076, -0.011750000000001037, 0.02999999999999936, -0.02549999999999919, -0.0572499999999998, -0.03550000000000075, 0.03200000000000003, 0.2190000000000012, -0.0034999999999989484, 0.02400000000000091, -0.05525000000000091], zp_timestamp='2026-04-15T17:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:32:09.442 [DEBUG] [Thread-24514] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:32:09.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:32:09.668 [DEBUG] [Thread-24518] [transport.py] [_log()] starting thread (client mode): 0xf13fff40
2026-04-15T19:32:09.669 [DEBUG] [Thread-24518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:32:09.685 [DEBUG] [Thread-24518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:32:09.685 [INFO] [Thread-24518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:32:09.693 [DEBUG] [Thread-24518] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:32:09.693 [DEBUG] [Thread-24518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:32:09.693 [DEBUG] [Thread-24518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:32:09.693 [DEBUG] [Thread-24518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:32:09.693 [DEBUG] [Thread-24518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:32:09.693 [DEBUG] [Thread-24518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:32:09.693 [DEBUG] [Thread-24518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:32:09.693 [DEBUG] [Thread-24518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:32:09.693 [DEBUG] [Thread-24518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:32:09.693 [DEBUG] [Thread-24518] [transport.py] [_log()] client lang: <none>
2026-04-15T19:32:09.693 [DEBUG] [Thread-24518] [transport.py] [_log()] server lang: <none>
2026-04-15T19:32:09.693 [DEBUG] [Thread-24518] [transport.py] [_log()] kex follows: False
2026-04-15T19:32:09.693 [DEBUG] [Thread-24518] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:32:09.693 [DEBUG] [Thread-24518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:32:09.693 [DEBUG] [Thread-24518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:32:09.694 [DEBUG] [Thread-24518] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:32:09.694 [DEBUG] [Thread-24518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:32:09.694 [DEBUG] [Thread-24518] [transport.py] [_log()] Compression: none
2026-04-15T19:32:09.694 [DEBUG] [Thread-24518] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:32:09.752 [DEBUG] [Thread-24518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:32:09.752 [DEBUG] [Thread-24518] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:32:09.752 [DEBUG] [Thread-24518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:32:09.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:32:09.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:32:09.808 [DEBUG] [Thread-24518] [transport.py] [_log()] userauth is OK
2026-04-15T19:32:09.808 [DEBUG] [Thread-24518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:32:09.808 [DEBUG] [Thread-24518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:32:09.808 [DEBUG] [Thread-24518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:32:09.808 [DEBUG] [Thread-24518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:32:09.825 [INFO] [Thread-24518] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:32:09.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:32:09.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:32:10.664 [DEBUG] [Thread-24518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:32:10.664 [DEBUG] [Thread-24518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:32:10.711 [DEBUG] [Thread-24518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:32:10.711 [DEBUG] [Thread-24518] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:32:10.720 [DEBUG] [Thread-24518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:32:10.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:32:10.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')
2026-04-15T19:32:10.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
2026-04-15T19:32:10.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:32:10.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:32:10.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:32:10.751 [DEBUG] [Thread-24518] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:32:11.456 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:16.834 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:22.249 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:24.165 [DEBUG] [Thread-24520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:25.087 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:25.088 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:27.627 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:33.006 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:38.382 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:39.196 [DEBUG] [Thread-24521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:40.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:32:40.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:32:40.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
2026-04-15T19:32:42.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 32, 17), 4.23592, 74.8766, 0.0, 12.8812, 9.91356, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:32:42.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:32:17
2026-04-15T19:32:42.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:32:42.834 [DEBUG] [Thread-24522] [transport.py] [_log()] starting thread (client mode): 0xf13fda20
2026-04-15T19:32:42.834 [DEBUG] [Thread-24522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:32:42.854 [DEBUG] [Thread-24522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:32:42.854 [INFO] [Thread-24522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:32:42.855 [DEBUG] [Thread-24522] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:32:42.855 [DEBUG] [Thread-24522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:32:42.855 [DEBUG] [Thread-24522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:32:42.855 [DEBUG] [Thread-24522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:32:42.855 [DEBUG] [Thread-24522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:32:42.855 [DEBUG] [Thread-24522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:32:42.856 [DEBUG] [Thread-24522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:32:42.856 [DEBUG] [Thread-24522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:32:42.856 [DEBUG] [Thread-24522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:32:42.856 [DEBUG] [Thread-24522] [transport.py] [_log()] client lang: <none>
2026-04-15T19:32:42.856 [DEBUG] [Thread-24522] [transport.py] [_log()] server lang: <none>
2026-04-15T19:32:42.856 [DEBUG] [Thread-24522] [transport.py] [_log()] kex follows: False
2026-04-15T19:32:42.856 [DEBUG] [Thread-24522] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:32:42.856 [DEBUG] [Thread-24522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:32:42.856 [DEBUG] [Thread-24522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:32:42.856 [DEBUG] [Thread-24522] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:32:42.856 [DEBUG] [Thread-24522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:32:42.856 [DEBUG] [Thread-24522] [transport.py] [_log()] Compression: none
2026-04-15T19:32:42.856 [DEBUG] [Thread-24522] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:32:42.866 [DEBUG] [Thread-24522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:32:42.866 [DEBUG] [Thread-24522] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:32:42.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:32:42.867 [DEBUG] [Thread-24522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:32:42.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:32:42.867 [DEBUG] [Thread-24522] [transport.py] [_log()] userauth is OK
2026-04-15T19:32:42.868 [DEBUG] [Thread-24522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:32:42.868 [DEBUG] [Thread-24522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:32:42.868 [DEBUG] [Thread-24522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:32:42.868 [DEBUG] [Thread-24522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:32:42.886 [INFO] [Thread-24522] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:32:42.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:32:43.667 [DEBUG] [Thread-24522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:32:43.667 [DEBUG] [Thread-24522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:32:43.667 [DEBUG] [Thread-24522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:32:43.707 [DEBUG] [Thread-24522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:32:43.708 [DEBUG] [Thread-24522] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:32:43.710 [DEBUG] [Thread-24522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:32:43.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:32:43.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:32:43.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:32:43.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:32:43.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:32:43.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:32:43.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:32:43.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:32:43.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:32:43.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.730341 -999.00   +9.90  13.45     79   +6.50 1 1 1 1 1     0    0 3.34 -10.06 ZNESW 16.5 13.4 300.2 17.6 10.8 -24.7 10.6 -23.6 10.3 -21.4 10.6 -23.0
2026-04-15T19:32:43.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:32:43.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:32:43.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.730341
2026-04-15T19:32:43.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:32:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:32:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:32:43.728 [DEBUG] [Thread-24522] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:32:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:32:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:32:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:32:17', tmtdew=4.23592, humidity=74.8766, cloud=0.0, wind=12.8812, temperature=9.91356, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:32:17', seeing=1.37, atlas_timestamp='2026-04-15T17:31:41.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.10174999999999912, -0.0467499999999994, -0.05799999999999983, -0.0625, -0.040749999999999176, -0.06700000000000195, -0.06074999999999875, -0.029500000000000526, -0.058999999999999275, -0.09774999999999956, -0.04100000000000037, 0.019000000000000128, -0.02674999999999983, -0.0070000000000014495, -0.027499999999999858, 0.013249999999999318, 0.016000000000000014, -0.028999999999999915, -0.023749999999999716, 0.0009999999999994458, 0.017249999999998877, -0.053749999999999076, -0.011750000000001037, 0.02999999999999936, -0.02549999999999919, -0.0572499999999998, -0.03550000000000075, 0.03200000000000003, 0.2190000000000012, -0.0034999999999989484, 0.02400000000000091, -0.05525000000000091], zp_timestamp='2026-04-15T17:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:32:43.798 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:43.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:32:43.940 [DEBUG] [Thread-24525] [transport.py] [_log()] starting thread (client mode): 0xf13fde40
2026-04-15T19:32:43.941 [DEBUG] [Thread-24525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:32:43.955 [DEBUG] [Thread-24525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:32:43.955 [INFO] [Thread-24525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:32:43.963 [DEBUG] [Thread-24525] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:32:43.963 [DEBUG] [Thread-24525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:32:43.963 [DEBUG] [Thread-24525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:32:43.963 [DEBUG] [Thread-24525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:32:43.963 [DEBUG] [Thread-24525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:32:43.963 [DEBUG] [Thread-24525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:32:43.963 [DEBUG] [Thread-24525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:32:43.963 [DEBUG] [Thread-24525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:32:43.963 [DEBUG] [Thread-24525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:32:43.963 [DEBUG] [Thread-24525] [transport.py] [_log()] client lang: <none>
2026-04-15T19:32:43.963 [DEBUG] [Thread-24525] [transport.py] [_log()] server lang: <none>
2026-04-15T19:32:43.963 [DEBUG] [Thread-24525] [transport.py] [_log()] kex follows: False
2026-04-15T19:32:43.963 [DEBUG] [Thread-24525] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:32:43.963 [DEBUG] [Thread-24525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:32:43.963 [DEBUG] [Thread-24525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:32:43.964 [DEBUG] [Thread-24525] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:32:43.964 [DEBUG] [Thread-24525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:32:43.964 [DEBUG] [Thread-24525] [transport.py] [_log()] Compression: none
2026-04-15T19:32:43.964 [DEBUG] [Thread-24525] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:32:44.021 [DEBUG] [Thread-24525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:32:44.021 [DEBUG] [Thread-24525] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:32:44.021 [DEBUG] [Thread-24525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:32:44.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:32:44.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:32:44.078 [DEBUG] [Thread-24525] [transport.py] [_log()] userauth is OK
2026-04-15T19:32:44.078 [DEBUG] [Thread-24525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:32:44.078 [DEBUG] [Thread-24525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:32:44.078 [DEBUG] [Thread-24525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:32:44.078 [DEBUG] [Thread-24525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:32:44.095 [INFO] [Thread-24525] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:32:44.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:32:44.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:32:45.051 [DEBUG] [Thread-24525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:32:45.051 [DEBUG] [Thread-24525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:32:45.099 [DEBUG] [Thread-24525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:32:45.099 [DEBUG] [Thread-24525] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:32:45.108 [DEBUG] [Thread-24525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:32:45.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:32:45.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')
2026-04-15T19:32:45.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
2026-04-15T19:32:45.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:32:45.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:32:45.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:32:45.140 [DEBUG] [Thread-24525] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:32:49.177 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:54.219 [DEBUG] [Thread-24527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:54.555 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:59.452 [DEBUG] [Thread-24528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:32:59.949 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:05.308 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:09.252 [DEBUG] [Thread-24529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:10.687 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:15.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:33:15.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:33:15.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
2026-04-15T19:33:16.064 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:16.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 32, 52), 4.2323, 74.9522, 0.0, 15.6326, 10.1939, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:33:16.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:32:52
2026-04-15T19:33:16.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:33:17.208 [DEBUG] [Thread-24530] [transport.py] [_log()] starting thread (client mode): 0xf13fff40
2026-04-15T19:33:17.208 [DEBUG] [Thread-24530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:33:17.228 [DEBUG] [Thread-24530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:33:17.228 [INFO] [Thread-24530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:33:17.231 [DEBUG] [Thread-24530] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:33:17.231 [DEBUG] [Thread-24530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:33:17.231 [DEBUG] [Thread-24530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:33:17.231 [DEBUG] [Thread-24530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:33:17.231 [DEBUG] [Thread-24530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:33:17.231 [DEBUG] [Thread-24530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:33:17.231 [DEBUG] [Thread-24530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:33:17.231 [DEBUG] [Thread-24530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:33:17.231 [DEBUG] [Thread-24530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:33:17.231 [DEBUG] [Thread-24530] [transport.py] [_log()] client lang: <none>
2026-04-15T19:33:17.232 [DEBUG] [Thread-24530] [transport.py] [_log()] server lang: <none>
2026-04-15T19:33:17.232 [DEBUG] [Thread-24530] [transport.py] [_log()] kex follows: False
2026-04-15T19:33:17.232 [DEBUG] [Thread-24530] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:33:17.232 [DEBUG] [Thread-24530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:33:17.232 [DEBUG] [Thread-24530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:33:17.232 [DEBUG] [Thread-24530] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:33:17.232 [DEBUG] [Thread-24530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:33:17.232 [DEBUG] [Thread-24530] [transport.py] [_log()] Compression: none
2026-04-15T19:33:17.232 [DEBUG] [Thread-24530] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:33:17.248 [DEBUG] [Thread-24530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:33:17.248 [DEBUG] [Thread-24530] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:33:17.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:33:17.249 [DEBUG] [Thread-24530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:33:17.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:33:17.250 [DEBUG] [Thread-24530] [transport.py] [_log()] userauth is OK
2026-04-15T19:33:17.250 [DEBUG] [Thread-24530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:33:17.250 [DEBUG] [Thread-24530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:33:17.250 [DEBUG] [Thread-24530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:33:17.250 [DEBUG] [Thread-24530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:33:17.269 [INFO] [Thread-24530] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:33:17.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:33:18.084 [DEBUG] [Thread-24530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:33:18.084 [DEBUG] [Thread-24530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:33:18.084 [DEBUG] [Thread-24530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:33:18.125 [DEBUG] [Thread-24530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:33:18.125 [DEBUG] [Thread-24530] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:33:18.126 [DEBUG] [Thread-24530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:33:18.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:33:18.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:33:18.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:33:18.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:33:18.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:33:18.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:33:18.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:33:18.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:33:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:33:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.731036 -999.00   +9.90  14.08     79   +6.50 1 1 1 1 1     0    0 3.37 -10.14 ZNESW 14.0 14.1 295.0 16.1 10.7 -24.6 10.6 -23.4 10.3 -21.2 10.6 -23.1
2026-04-15T19:33:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:33:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:33:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.731036
2026-04-15T19:33:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:33:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:33:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:33:18.145 [DEBUG] [Thread-24530] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:33:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:33:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:33:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:32:52', tmtdew=4.2323, humidity=74.9522, cloud=0.0, wind=15.6326, temperature=10.1939, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:32:52', seeing=1.88, atlas_timestamp='2026-04-15T17:32:41.510', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.10174999999999912, -0.0467499999999994, -0.05799999999999983, -0.0625, -0.040749999999999176, -0.06700000000000195, -0.06074999999999875, -0.029500000000000526, -0.058999999999999275, -0.09774999999999956, -0.04100000000000037, 0.019000000000000128, -0.02674999999999983, -0.0070000000000014495, -0.027499999999999858, 0.013249999999999318, 0.016000000000000014, -0.028999999999999915, -0.023749999999999716, 0.0009999999999994458, 0.017249999999998877, -0.053749999999999076, -0.011750000000001037, 0.02999999999999936, -0.02549999999999919, -0.0572499999999998, -0.03550000000000075, 0.03200000000000003, 0.2190000000000012, -0.0034999999999989484, 0.02400000000000091, -0.05525000000000091], zp_timestamp='2026-04-15T17:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:33:18.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:33:18.359 [DEBUG] [Thread-24533] [transport.py] [_log()] starting thread (client mode): 0xf13c86a0
2026-04-15T19:33:18.359 [DEBUG] [Thread-24533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:33:18.373 [DEBUG] [Thread-24533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:33:18.373 [INFO] [Thread-24533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:33:18.381 [DEBUG] [Thread-24533] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:33:18.381 [DEBUG] [Thread-24533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:33:18.381 [DEBUG] [Thread-24533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:33:18.381 [DEBUG] [Thread-24533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:33:18.381 [DEBUG] [Thread-24533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:33:18.381 [DEBUG] [Thread-24533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:33:18.381 [DEBUG] [Thread-24533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:33:18.381 [DEBUG] [Thread-24533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:33:18.381 [DEBUG] [Thread-24533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:33:18.381 [DEBUG] [Thread-24533] [transport.py] [_log()] client lang: <none>
2026-04-15T19:33:18.381 [DEBUG] [Thread-24533] [transport.py] [_log()] server lang: <none>
2026-04-15T19:33:18.381 [DEBUG] [Thread-24533] [transport.py] [_log()] kex follows: False
2026-04-15T19:33:18.381 [DEBUG] [Thread-24533] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:33:18.381 [DEBUG] [Thread-24533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:33:18.382 [DEBUG] [Thread-24533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:33:18.382 [DEBUG] [Thread-24533] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:33:18.382 [DEBUG] [Thread-24533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:33:18.382 [DEBUG] [Thread-24533] [transport.py] [_log()] Compression: none
2026-04-15T19:33:18.382 [DEBUG] [Thread-24533] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:33:18.436 [DEBUG] [Thread-24533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:33:18.436 [DEBUG] [Thread-24533] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:33:18.436 [DEBUG] [Thread-24533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:33:18.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:33:18.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:33:18.493 [DEBUG] [Thread-24533] [transport.py] [_log()] userauth is OK
2026-04-15T19:33:18.493 [DEBUG] [Thread-24533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:33:18.493 [DEBUG] [Thread-24533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:33:18.493 [DEBUG] [Thread-24533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:33:18.493 [DEBUG] [Thread-24533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:33:18.510 [INFO] [Thread-24533] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:33:18.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:33:18.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:33:19.321 [DEBUG] [Thread-24533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:33:19.321 [DEBUG] [Thread-24533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:33:19.372 [DEBUG] [Thread-24533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:33:19.372 [DEBUG] [Thread-24533] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:33:19.383 [DEBUG] [Thread-24533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:33:19.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:33:19.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')
2026-04-15T19:33:19.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
2026-04-15T19:33:19.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:33:19.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:33:19.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:33:19.428 [DEBUG] [Thread-24533] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:33:21.442 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:24.275 [DEBUG] [Thread-24535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:25.288 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:25.289 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:26.819 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:32.198 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:37.614 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:39.308 [DEBUG] [Thread-24536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:42.988 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:48.406 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:49.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:33:49.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:33:49.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
2026-04-15T19:33:50.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 33, 27), 4.20336, 75.0425, 0.0, 15.1398, 9.89699, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:33:50.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:33:27
2026-04-15T19:33:51.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:33:51.537 [DEBUG] [Thread-24537] [transport.py] [_log()] starting thread (client mode): 0xee905570
2026-04-15T19:33:51.537 [DEBUG] [Thread-24537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:33:51.556 [DEBUG] [Thread-24537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:33:51.557 [INFO] [Thread-24537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] client lang: <none>
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] server lang: <none>
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] kex follows: False
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:33:51.560 [DEBUG] [Thread-24537] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:33:51.561 [DEBUG] [Thread-24537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:33:51.561 [DEBUG] [Thread-24537] [transport.py] [_log()] Compression: none
2026-04-15T19:33:51.561 [DEBUG] [Thread-24537] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:33:51.577 [DEBUG] [Thread-24537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:33:51.577 [DEBUG] [Thread-24537] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:33:51.578 [DEBUG] [Thread-24537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:33:51.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:33:51.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:33:51.579 [DEBUG] [Thread-24537] [transport.py] [_log()] userauth is OK
2026-04-15T19:33:51.579 [DEBUG] [Thread-24537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:33:51.579 [DEBUG] [Thread-24537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:33:51.579 [DEBUG] [Thread-24537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:33:51.579 [DEBUG] [Thread-24537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:33:51.593 [INFO] [Thread-24537] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:33:51.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:33:52.354 [DEBUG] [Thread-24537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:33:52.354 [DEBUG] [Thread-24537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:33:52.354 [DEBUG] [Thread-24537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:33:52.395 [DEBUG] [Thread-24537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:33:52.395 [DEBUG] [Thread-24537] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:33:52.397 [DEBUG] [Thread-24537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:33:52.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:33:52.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:33:52.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:33:52.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:33:52.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:33:52.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:33:52.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:33:52.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:33:52.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:33:52.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.731383 -999.00   +9.90  14.42     79   +6.40 1 1 1 1 1     0    0 3.40 -9.57 ZNESW 15.7 14.4 290.2 15.8 10.7 -24.4 10.6 -23.3 10.3 -21.1 -999.0 -999.0
2026-04-15T19:33:52.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:33:52.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:33:52.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.731383
2026-04-15T19:33:52.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:33:52.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:33:52.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:33:52.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:33:52.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:33:52.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:33:27', tmtdew=4.20336, humidity=75.0425, cloud=0.0, wind=15.1398, temperature=9.89699, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:33:27', seeing=1.91, atlas_timestamp='2026-04-15T17:33:11.491', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.10174999999999912, -0.0467499999999994, -0.05799999999999983, -0.0625, -0.040749999999999176, -0.06700000000000195, -0.06074999999999875, -0.029500000000000526, -0.058999999999999275, -0.09774999999999956, -0.04100000000000037, 0.019000000000000128, -0.02674999999999983, -0.0070000000000014495, -0.027499999999999858, 0.013249999999999318, 0.016000000000000014, -0.028999999999999915, -0.023749999999999716, 0.0009999999999994458, 0.017249999999998877, -0.053749999999999076, -0.011750000000001037, 0.02999999999999936, -0.02549999999999919, -0.0572499999999998, -0.03550000000000075, 0.03200000000000003, 0.2190000000000012, -0.0034999999999989484, 0.02400000000000091, -0.05525000000000091], zp_timestamp='2026-04-15T17:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:33:52.417 [DEBUG] [Thread-24537] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:33:52.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:33:52.628 [DEBUG] [Thread-24540] [transport.py] [_log()] starting thread (client mode): 0xf13e2920
2026-04-15T19:33:52.628 [DEBUG] [Thread-24540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:33:52.643 [DEBUG] [Thread-24540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:33:52.643 [INFO] [Thread-24540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:33:52.650 [DEBUG] [Thread-24540] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:33:52.650 [DEBUG] [Thread-24540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:33:52.650 [DEBUG] [Thread-24540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:33:52.650 [DEBUG] [Thread-24540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:33:52.650 [DEBUG] [Thread-24540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:33:52.650 [DEBUG] [Thread-24540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:33:52.650 [DEBUG] [Thread-24540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:33:52.650 [DEBUG] [Thread-24540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:33:52.650 [DEBUG] [Thread-24540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:33:52.651 [DEBUG] [Thread-24540] [transport.py] [_log()] client lang: <none>
2026-04-15T19:33:52.651 [DEBUG] [Thread-24540] [transport.py] [_log()] server lang: <none>
2026-04-15T19:33:52.651 [DEBUG] [Thread-24540] [transport.py] [_log()] kex follows: False
2026-04-15T19:33:52.651 [DEBUG] [Thread-24540] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:33:52.651 [DEBUG] [Thread-24540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:33:52.651 [DEBUG] [Thread-24540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:33:52.651 [DEBUG] [Thread-24540] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:33:52.651 [DEBUG] [Thread-24540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:33:52.651 [DEBUG] [Thread-24540] [transport.py] [_log()] Compression: none
2026-04-15T19:33:52.651 [DEBUG] [Thread-24540] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:33:52.707 [DEBUG] [Thread-24540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:33:52.708 [DEBUG] [Thread-24540] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:33:52.708 [DEBUG] [Thread-24540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:33:52.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:33:52.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:33:52.764 [DEBUG] [Thread-24540] [transport.py] [_log()] userauth is OK
2026-04-15T19:33:52.765 [DEBUG] [Thread-24540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:33:52.765 [DEBUG] [Thread-24540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:33:52.765 [DEBUG] [Thread-24540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:33:52.765 [DEBUG] [Thread-24540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:33:52.782 [INFO] [Thread-24540] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:33:52.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:33:52.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:33:53.581 [DEBUG] [Thread-24540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:33:53.581 [DEBUG] [Thread-24540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:33:53.628 [DEBUG] [Thread-24540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:33:53.628 [DEBUG] [Thread-24540] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:33:53.636 [DEBUG] [Thread-24540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:33:53.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:33:53.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')
2026-04-15T19:33:53.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
2026-04-15T19:33:53.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:33:53.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:33:53.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:33:53.668 [DEBUG] [Thread-24540] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:33:53.821 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:54.330 [DEBUG] [Thread-24542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:59.200 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:33:59.596 [DEBUG] [Thread-24543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:04.579 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:09.363 [DEBUG] [Thread-24544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:09.954 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:15.332 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:20.709 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:23.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:34:23.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:34:23.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
2026-04-15T19:34:24.387 [DEBUG] [Thread-24545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:25.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 34, 3), 4.1991, 75.059, 0.0, 14.6812, 9.86382, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:34:25.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:34:03
2026-04-15T19:34:25.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:34:25.490 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:25.491 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:25.816 [DEBUG] [Thread-24546] [transport.py] [_log()] starting thread (client mode): 0xf1353820
2026-04-15T19:34:25.816 [DEBUG] [Thread-24546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:34:25.832 [DEBUG] [Thread-24546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:34:25.832 [INFO] [Thread-24546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:34:25.835 [DEBUG] [Thread-24546] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:34:25.835 [DEBUG] [Thread-24546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:34:25.835 [DEBUG] [Thread-24546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:34:25.835 [DEBUG] [Thread-24546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:34:25.835 [DEBUG] [Thread-24546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:34:25.835 [DEBUG] [Thread-24546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:34:25.835 [DEBUG] [Thread-24546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:34:25.835 [DEBUG] [Thread-24546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:34:25.836 [DEBUG] [Thread-24546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:34:25.836 [DEBUG] [Thread-24546] [transport.py] [_log()] client lang: <none>
2026-04-15T19:34:25.836 [DEBUG] [Thread-24546] [transport.py] [_log()] server lang: <none>
2026-04-15T19:34:25.836 [DEBUG] [Thread-24546] [transport.py] [_log()] kex follows: False
2026-04-15T19:34:25.836 [DEBUG] [Thread-24546] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:34:25.836 [DEBUG] [Thread-24546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:34:25.836 [DEBUG] [Thread-24546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:34:25.836 [DEBUG] [Thread-24546] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:34:25.836 [DEBUG] [Thread-24546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:34:25.836 [DEBUG] [Thread-24546] [transport.py] [_log()] Compression: none
2026-04-15T19:34:25.836 [DEBUG] [Thread-24546] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:34:25.850 [DEBUG] [Thread-24546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:34:25.850 [DEBUG] [Thread-24546] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:34:25.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:34:25.850 [DEBUG] [Thread-24546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:34:25.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:34:25.851 [DEBUG] [Thread-24546] [transport.py] [_log()] userauth is OK
2026-04-15T19:34:25.851 [DEBUG] [Thread-24546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:34:25.851 [DEBUG] [Thread-24546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:34:25.851 [DEBUG] [Thread-24546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:34:25.851 [DEBUG] [Thread-24546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:34:25.872 [INFO] [Thread-24546] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:34:25.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:34:26.087 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:26.672 [DEBUG] [Thread-24546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:34:26.672 [DEBUG] [Thread-24546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:34:26.673 [DEBUG] [Thread-24546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:34:26.714 [DEBUG] [Thread-24546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:34:26.714 [DEBUG] [Thread-24546] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:34:26.716 [DEBUG] [Thread-24546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:34:26.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:34:26.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:34:26.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:34:26.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:34:26.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:34:26.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:34:26.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:34:26.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:34:26.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:34:26.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.731730 -999.00   +9.90  14.26     78   +6.40 1 1 1 1 1     0    0 3.35 -10.84 ZNESW 14.2 14.3 298.4 18.9 10.7 -24.2 10.6 -23.1 10.2 -21.0 10.6 -22.9
2026-04-15T19:34:26.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:34:26.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:34:26.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.731730
2026-04-15T19:34:26.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:34:26.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:34:26.734 [DEBUG] [Thread-24546] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:34:26.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:34:26.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:34:26.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:34:26.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:34:03', tmtdew=4.1991, humidity=75.059, cloud=0.0, wind=14.6812, temperature=9.86382, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:34:03', seeing=1.91, atlas_timestamp='2026-04-15T17:33:41.472', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.10174999999999912, -0.0467499999999994, -0.05799999999999983, -0.0625, -0.040749999999999176, -0.06700000000000195, -0.06074999999999875, -0.029500000000000526, -0.058999999999999275, -0.09774999999999956, -0.04100000000000037, 0.019000000000000128, -0.02674999999999983, -0.0070000000000014495, -0.027499999999999858, 0.013249999999999318, 0.016000000000000014, -0.028999999999999915, -0.023749999999999716, 0.0009999999999994458, 0.017249999999998877, -0.053749999999999076, -0.011750000000001037, 0.02999999999999936, -0.02549999999999919, -0.0572499999999998, -0.03550000000000075, 0.03200000000000003, 0.2190000000000012, -0.0034999999999989484, 0.02400000000000091, -0.05525000000000091], zp_timestamp='2026-04-15T17:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:34:26.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:34:26.951 [DEBUG] [Thread-24549] [transport.py] [_log()] starting thread (client mode): 0xf13ca920
2026-04-15T19:34:26.951 [DEBUG] [Thread-24549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:34:26.965 [DEBUG] [Thread-24549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:34:26.965 [INFO] [Thread-24549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:34:26.972 [DEBUG] [Thread-24549] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:34:26.972 [DEBUG] [Thread-24549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:34:26.972 [DEBUG] [Thread-24549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:34:26.972 [DEBUG] [Thread-24549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:34:26.973 [DEBUG] [Thread-24549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:34:26.973 [DEBUG] [Thread-24549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:34:26.973 [DEBUG] [Thread-24549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:34:26.973 [DEBUG] [Thread-24549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:34:26.973 [DEBUG] [Thread-24549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:34:26.973 [DEBUG] [Thread-24549] [transport.py] [_log()] client lang: <none>
2026-04-15T19:34:26.973 [DEBUG] [Thread-24549] [transport.py] [_log()] server lang: <none>
2026-04-15T19:34:26.973 [DEBUG] [Thread-24549] [transport.py] [_log()] kex follows: False
2026-04-15T19:34:26.973 [DEBUG] [Thread-24549] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:34:26.973 [DEBUG] [Thread-24549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:34:26.973 [DEBUG] [Thread-24549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:34:26.973 [DEBUG] [Thread-24549] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:34:26.973 [DEBUG] [Thread-24549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:34:26.973 [DEBUG] [Thread-24549] [transport.py] [_log()] Compression: none
2026-04-15T19:34:26.973 [DEBUG] [Thread-24549] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:34:27.033 [DEBUG] [Thread-24549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:34:27.033 [DEBUG] [Thread-24549] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:34:27.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:34:27.033 [DEBUG] [Thread-24549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:34:27.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:34:27.094 [DEBUG] [Thread-24549] [transport.py] [_log()] userauth is OK
2026-04-15T19:34:27.094 [DEBUG] [Thread-24549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:34:27.094 [DEBUG] [Thread-24549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:34:27.094 [DEBUG] [Thread-24549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:34:27.094 [DEBUG] [Thread-24549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:34:27.112 [INFO] [Thread-24549] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:34:27.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:34:27.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:34:27.968 [DEBUG] [Thread-24549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:34:27.968 [DEBUG] [Thread-24549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:34:28.015 [DEBUG] [Thread-24549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:34:28.015 [DEBUG] [Thread-24549] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:34:28.024 [DEBUG] [Thread-24549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:34:28.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:34:28.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')
2026-04-15T19:34:28.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
2026-04-15T19:34:28.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:34:28.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:34:28.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:34:28.060 [DEBUG] [Thread-24549] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:34:31.463 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:36.869 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:39.409 [DEBUG] [Thread-24551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:42.256 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:47.653 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:53.011 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:54.441 [DEBUG] [Thread-24552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:58.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:34:58.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:34:58.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T19:34:58.389 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:34:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 34, 38), 4.19703, 75.1187, 0.0, 15.3504, 10.095, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:34:59.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:34:38
2026-04-15T19:34:59.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:34:59.742 [DEBUG] [Thread-24553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:00.159 [DEBUG] [Thread-24554] [transport.py] [_log()] starting thread (client mode): 0xf13fd9c0
2026-04-15T19:35:00.160 [DEBUG] [Thread-24554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:35:00.180 [DEBUG] [Thread-24554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:35:00.180 [INFO] [Thread-24554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:35:00.183 [DEBUG] [Thread-24554] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:35:00.183 [DEBUG] [Thread-24554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] client lang: <none>
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] server lang: <none>
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] kex follows: False
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] Compression: none
2026-04-15T19:35:00.184 [DEBUG] [Thread-24554] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:35:00.192 [DEBUG] [Thread-24554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:35:00.192 [DEBUG] [Thread-24554] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:35:00.192 [DEBUG] [Thread-24554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:35:00.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:35:00.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:35:00.194 [DEBUG] [Thread-24554] [transport.py] [_log()] userauth is OK
2026-04-15T19:35:00.194 [DEBUG] [Thread-24554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:35:00.194 [DEBUG] [Thread-24554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:35:00.194 [DEBUG] [Thread-24554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:35:00.194 [DEBUG] [Thread-24554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:35:00.214 [INFO] [Thread-24554] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:35:00.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:35:01.002 [DEBUG] [Thread-24554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:35:01.002 [DEBUG] [Thread-24554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:35:01.003 [DEBUG] [Thread-24554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:35:01.044 [DEBUG] [Thread-24554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:35:01.045 [DEBUG] [Thread-24554] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:35:01.047 [DEBUG] [Thread-24554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:35:01.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:35:01.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:35:01.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:35:01.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:35:01.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:35:01.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:35:01.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:35:01.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:35:01.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:35:01.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.732077 -999.00   +9.90  15.78     78   +6.40 1 1 1 1 1     0    0 3.26 -11.22 ZNESW 14.9 15.8 302.0 19.4 10.7 -24.2 10.6 -23.1 10.3 -21.0 10.6 -22.8
2026-04-15T19:35:01.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:35:01.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:35:01.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.732077
2026-04-15T19:35:01.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:35:01.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:35:01.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:35:01.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:35:01.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:35:01.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:34:38', tmtdew=4.19703, humidity=75.1187, cloud=0.0, wind=15.3504, temperature=10.095, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:34:38', seeing=1.91, atlas_timestamp='2026-04-15T17:34:11.453', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.10174999999999912, -0.0467499999999994, -0.05799999999999983, -0.0625, -0.040749999999999176, -0.06700000000000195, -0.06074999999999875, -0.029500000000000526, -0.058999999999999275, -0.09774999999999956, -0.04100000000000037, 0.019000000000000128, -0.02674999999999983, -0.0070000000000014495, -0.027499999999999858, 0.013249999999999318, 0.016000000000000014, -0.028999999999999915, -0.023749999999999716, 0.0009999999999994458, 0.017249999999998877, -0.053749999999999076, -0.011750000000001037, 0.02999999999999936, -0.02549999999999919, -0.0572499999999998, -0.03550000000000075, 0.03200000000000003, 0.2190000000000012, -0.0034999999999989484, 0.02400000000000091, -0.05525000000000091], zp_timestamp='2026-04-15T17:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:35:01.067 [DEBUG] [Thread-24554] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:35:01.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:35:01.287 [DEBUG] [Thread-24557] [transport.py] [_log()] starting thread (client mode): 0xee91c640
2026-04-15T19:35:01.287 [DEBUG] [Thread-24557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:35:01.302 [DEBUG] [Thread-24557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:35:01.302 [INFO] [Thread-24557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:35:01.309 [DEBUG] [Thread-24557] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:35:01.309 [DEBUG] [Thread-24557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] client lang: <none>
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] server lang: <none>
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] kex follows: False
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] Compression: none
2026-04-15T19:35:01.310 [DEBUG] [Thread-24557] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:35:01.370 [DEBUG] [Thread-24557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:35:01.370 [DEBUG] [Thread-24557] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:35:01.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:35:01.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:35:01.371 [DEBUG] [Thread-24557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:35:01.427 [DEBUG] [Thread-24557] [transport.py] [_log()] userauth is OK
2026-04-15T19:35:01.427 [DEBUG] [Thread-24557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:35:01.427 [DEBUG] [Thread-24557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:35:01.427 [DEBUG] [Thread-24557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:35:01.427 [DEBUG] [Thread-24557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:35:01.445 [INFO] [Thread-24557] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:35:01.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:35:01.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:35:02.315 [DEBUG] [Thread-24557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:35:02.315 [DEBUG] [Thread-24557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:35:02.363 [DEBUG] [Thread-24557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:35:02.363 [DEBUG] [Thread-24557] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:35:02.373 [DEBUG] [Thread-24557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:35:02.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:35:02.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')
2026-04-15T19:35:02.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
2026-04-15T19:35:02.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:35:02.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:35:02.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:35:02.405 [DEBUG] [Thread-24557] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:35:03.765 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:09.179 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:09.464 [DEBUG] [Thread-24559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:14.557 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:19.933 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:24.494 [DEBUG] [Thread-24560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:25.310 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:25.693 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:25.694 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:30.725 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:32.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:35:32.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:35:32.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
2026-04-15T19:35:33.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 35, 13), 4.19851, 75.0594, 0.0, 13.3751, 9.84748, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:35:33.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:35:13
2026-04-15T19:35:34.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:35:34.480 [DEBUG] [Thread-24561] [transport.py] [_log()] starting thread (client mode): 0xf13e1f90
2026-04-15T19:35:34.481 [DEBUG] [Thread-24561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:35:34.501 [DEBUG] [Thread-24561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:35:34.501 [INFO] [Thread-24561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] client lang: <none>
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] server lang: <none>
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] kex follows: False
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:35:34.505 [DEBUG] [Thread-24561] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:35:34.506 [DEBUG] [Thread-24561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:35:34.506 [DEBUG] [Thread-24561] [transport.py] [_log()] Compression: none
2026-04-15T19:35:34.506 [DEBUG] [Thread-24561] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:35:34.522 [DEBUG] [Thread-24561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:35:34.522 [DEBUG] [Thread-24561] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:35:34.522 [DEBUG] [Thread-24561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:35:34.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:35:34.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:35:34.523 [DEBUG] [Thread-24561] [transport.py] [_log()] userauth is OK
2026-04-15T19:35:34.523 [DEBUG] [Thread-24561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:35:34.524 [DEBUG] [Thread-24561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:35:34.524 [DEBUG] [Thread-24561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:35:34.524 [DEBUG] [Thread-24561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:35:34.542 [INFO] [Thread-24561] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:35:34.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:35:36.103 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:36.302 [DEBUG] [Thread-24561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:35:36.303 [DEBUG] [Thread-24561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:35:36.303 [DEBUG] [Thread-24561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:35:36.344 [DEBUG] [Thread-24561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:35:36.344 [DEBUG] [Thread-24561] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:35:36.346 [DEBUG] [Thread-24561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:35:36.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:35:36.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:35:36.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:35:36.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:35:36.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:35:36.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:35:36.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:35:36.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:35:36.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:35:36.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.732424 -999.00   +9.90  16.58     78   +6.30 1 1 1 1 1     0    0 3.34 -11.30 ZNESW 14.8 16.6 296.6 20.9 10.7 -24.2 10.6 -23.0 10.3 -20.8 10.6 -22.8
2026-04-15T19:35:36.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:35:36.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:35:36.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.732424
2026-04-15T19:35:36.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:35:36.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:35:36.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:35:36.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:35:36.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:35:36.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:35:13', tmtdew=4.19851, humidity=75.0594, cloud=0.0, wind=13.3751, temperature=9.84748, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:35:14', seeing=1.91, atlas_timestamp='2026-04-15T17:34:41.434', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.10174999999999912, -0.0467499999999994, -0.05799999999999983, -0.0625, -0.040749999999999176, -0.06700000000000195, -0.06074999999999875, -0.029500000000000526, -0.058999999999999275, -0.09774999999999956, -0.04100000000000037, 0.019000000000000128, -0.02674999999999983, -0.0070000000000014495, -0.027499999999999858, 0.013249999999999318, 0.016000000000000014, -0.028999999999999915, -0.023749999999999716, 0.0009999999999994458, 0.017249999999998877, -0.053749999999999076, -0.011750000000001037, 0.02999999999999936, -0.02549999999999919, -0.0572499999999998, -0.03550000000000075, 0.03200000000000003, 0.2190000000000012, -0.0034999999999989484, 0.02400000000000091, -0.05525000000000091], zp_timestamp='2026-04-15T17:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:35:36.366 [DEBUG] [Thread-24561] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:35:36.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:35:36.583 [DEBUG] [Thread-24564] [transport.py] [_log()] starting thread (client mode): 0xf13e36d0
2026-04-15T19:35:36.583 [DEBUG] [Thread-24564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:35:36.598 [DEBUG] [Thread-24564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:35:36.598 [INFO] [Thread-24564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:35:36.605 [DEBUG] [Thread-24564] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:35:36.605 [DEBUG] [Thread-24564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:35:36.605 [DEBUG] [Thread-24564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:35:36.605 [DEBUG] [Thread-24564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:35:36.605 [DEBUG] [Thread-24564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:35:36.605 [DEBUG] [Thread-24564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:35:36.605 [DEBUG] [Thread-24564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:35:36.606 [DEBUG] [Thread-24564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:35:36.606 [DEBUG] [Thread-24564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:35:36.606 [DEBUG] [Thread-24564] [transport.py] [_log()] client lang: <none>
2026-04-15T19:35:36.606 [DEBUG] [Thread-24564] [transport.py] [_log()] server lang: <none>
2026-04-15T19:35:36.606 [DEBUG] [Thread-24564] [transport.py] [_log()] kex follows: False
2026-04-15T19:35:36.606 [DEBUG] [Thread-24564] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:35:36.606 [DEBUG] [Thread-24564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:35:36.606 [DEBUG] [Thread-24564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:35:36.606 [DEBUG] [Thread-24564] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:35:36.606 [DEBUG] [Thread-24564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:35:36.606 [DEBUG] [Thread-24564] [transport.py] [_log()] Compression: none
2026-04-15T19:35:36.606 [DEBUG] [Thread-24564] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:35:36.662 [DEBUG] [Thread-24564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:35:36.662 [DEBUG] [Thread-24564] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:35:36.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:35:36.662 [DEBUG] [Thread-24564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:35:36.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:35:36.719 [DEBUG] [Thread-24564] [transport.py] [_log()] userauth is OK
2026-04-15T19:35:36.719 [DEBUG] [Thread-24564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:35:36.719 [DEBUG] [Thread-24564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:35:36.720 [DEBUG] [Thread-24564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:35:36.720 [DEBUG] [Thread-24564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:35:36.737 [INFO] [Thread-24564] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:35:36.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:35:36.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:35:37.608 [DEBUG] [Thread-24564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:35:37.608 [DEBUG] [Thread-24564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:35:37.655 [DEBUG] [Thread-24564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:35:37.655 [DEBUG] [Thread-24564] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:35:37.664 [DEBUG] [Thread-24564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:35:37.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:35:37.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')
2026-04-15T19:35:37.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
2026-04-15T19:35:37.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:35:37.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:35:37.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:35:37.696 [DEBUG] [Thread-24564] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:35:39.517 [DEBUG] [Thread-24566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:41.481 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:46.858 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:52.235 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:54.551 [DEBUG] [Thread-24567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:57.614 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:35:59.888 [DEBUG] [Thread-24568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:02.989 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:07.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:36:07.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:36:07.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
2026-04-15T19:36:08.367 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:08.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 35, 49), 4.19152, 75.153, 0.0, 14.7154, 10.129, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:36:08.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:35:49
2026-04-15T19:36:09.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:36:09.574 [DEBUG] [Thread-24569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:09.765 [DEBUG] [Thread-24570] [transport.py] [_log()] starting thread (client mode): 0xf1364ca0
2026-04-15T19:36:09.765 [DEBUG] [Thread-24570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:36:09.785 [DEBUG] [Thread-24570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:36:09.785 [INFO] [Thread-24570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:36:09.788 [DEBUG] [Thread-24570] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:36:09.788 [DEBUG] [Thread-24570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:36:09.788 [DEBUG] [Thread-24570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:36:09.788 [DEBUG] [Thread-24570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:36:09.788 [DEBUG] [Thread-24570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:36:09.788 [DEBUG] [Thread-24570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:36:09.788 [DEBUG] [Thread-24570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:36:09.788 [DEBUG] [Thread-24570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:36:09.788 [DEBUG] [Thread-24570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:36:09.788 [DEBUG] [Thread-24570] [transport.py] [_log()] client lang: <none>
2026-04-15T19:36:09.788 [DEBUG] [Thread-24570] [transport.py] [_log()] server lang: <none>
2026-04-15T19:36:09.789 [DEBUG] [Thread-24570] [transport.py] [_log()] kex follows: False
2026-04-15T19:36:09.789 [DEBUG] [Thread-24570] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:36:09.789 [DEBUG] [Thread-24570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:36:09.789 [DEBUG] [Thread-24570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:36:09.789 [DEBUG] [Thread-24570] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:36:09.789 [DEBUG] [Thread-24570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:36:09.789 [DEBUG] [Thread-24570] [transport.py] [_log()] Compression: none
2026-04-15T19:36:09.789 [DEBUG] [Thread-24570] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:36:09.805 [DEBUG] [Thread-24570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:36:09.806 [DEBUG] [Thread-24570] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:36:09.806 [DEBUG] [Thread-24570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:36:09.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:36:09.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:36:09.807 [DEBUG] [Thread-24570] [transport.py] [_log()] userauth is OK
2026-04-15T19:36:09.807 [DEBUG] [Thread-24570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:36:09.807 [DEBUG] [Thread-24570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:36:09.807 [DEBUG] [Thread-24570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:36:09.807 [DEBUG] [Thread-24570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:36:09.820 [INFO] [Thread-24570] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:36:09.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:36:10.619 [DEBUG] [Thread-24570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:36:10.619 [DEBUG] [Thread-24570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:36:10.619 [DEBUG] [Thread-24570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:36:10.659 [DEBUG] [Thread-24570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:36:10.660 [DEBUG] [Thread-24570] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:36:10.662 [DEBUG] [Thread-24570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:36:10.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:36:10.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:36:10.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:36:10.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:36:10.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:36:10.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:36:10.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:36:10.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:36:10.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:36:10.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.733119 -999.00   +9.90  13.33     78   +6.40 1 1 1 1 1     0    0 3.31 -9.99 ZNESW 14.3 13.3 306.8 18.8 10.7 -23.9 10.6 -22.9 10.2 -21.0 10.6 -22.9
2026-04-15T19:36:10.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:36:10.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:36:10.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.733119
2026-04-15T19:36:10.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:36:10.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:36:10.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:36:10.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:36:10.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:36:10.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:35:49', tmtdew=4.19152, humidity=75.153, cloud=0.0, wind=14.7154, temperature=10.129, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:35:49', seeing=1.91, atlas_timestamp='2026-04-15T17:35:41.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.10174999999999912, -0.0467499999999994, -0.05799999999999983, -0.0625, -0.040749999999999176, -0.06700000000000195, -0.06074999999999875, -0.029500000000000526, -0.058999999999999275, -0.09774999999999956, -0.04100000000000037, 0.019000000000000128, -0.02674999999999983, -0.0070000000000014495, -0.027499999999999858, 0.013249999999999318, 0.016000000000000014, -0.028999999999999915, -0.023749999999999716, 0.0009999999999994458, 0.017249999999998877, -0.053749999999999076, -0.011750000000001037, 0.02999999999999936, -0.02549999999999919, -0.0572499999999998, -0.03550000000000075, 0.03200000000000003, 0.2190000000000012, -0.0034999999999989484, 0.02400000000000091, -0.05525000000000091], zp_timestamp='2026-04-15T17:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:36:10.680 [DEBUG] [Thread-24570] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:36:10.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:36:10.892 [DEBUG] [Thread-24573] [transport.py] [_log()] starting thread (client mode): 0xf1367ac0
2026-04-15T19:36:10.893 [DEBUG] [Thread-24573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:36:10.912 [DEBUG] [Thread-24573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:36:10.912 [INFO] [Thread-24573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:36:10.919 [DEBUG] [Thread-24573] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:36:10.919 [DEBUG] [Thread-24573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:36:10.919 [DEBUG] [Thread-24573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:36:10.919 [DEBUG] [Thread-24573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:36:10.919 [DEBUG] [Thread-24573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:36:10.919 [DEBUG] [Thread-24573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:36:10.920 [DEBUG] [Thread-24573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:36:10.920 [DEBUG] [Thread-24573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:36:10.920 [DEBUG] [Thread-24573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:36:10.920 [DEBUG] [Thread-24573] [transport.py] [_log()] client lang: <none>
2026-04-15T19:36:10.920 [DEBUG] [Thread-24573] [transport.py] [_log()] server lang: <none>
2026-04-15T19:36:10.920 [DEBUG] [Thread-24573] [transport.py] [_log()] kex follows: False
2026-04-15T19:36:10.920 [DEBUG] [Thread-24573] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:36:10.920 [DEBUG] [Thread-24573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:36:10.920 [DEBUG] [Thread-24573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:36:10.920 [DEBUG] [Thread-24573] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:36:10.920 [DEBUG] [Thread-24573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:36:10.920 [DEBUG] [Thread-24573] [transport.py] [_log()] Compression: none
2026-04-15T19:36:10.920 [DEBUG] [Thread-24573] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:36:10.978 [DEBUG] [Thread-24573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:36:10.978 [DEBUG] [Thread-24573] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:36:10.978 [DEBUG] [Thread-24573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:36:10.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:36:10.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:36:11.034 [DEBUG] [Thread-24573] [transport.py] [_log()] userauth is OK
2026-04-15T19:36:11.034 [DEBUG] [Thread-24573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:36:11.034 [DEBUG] [Thread-24573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:36:11.035 [DEBUG] [Thread-24573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:36:11.035 [DEBUG] [Thread-24573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:36:11.052 [INFO] [Thread-24573] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:36:11.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:36:11.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:36:11.882 [DEBUG] [Thread-24573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:36:11.882 [DEBUG] [Thread-24573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:36:11.931 [DEBUG] [Thread-24573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:36:11.931 [DEBUG] [Thread-24573] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:36:11.940 [DEBUG] [Thread-24573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:36:11.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:36:11.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')
2026-04-15T19:36:11.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') -> 00000000
2026-04-15T19:36:11.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:36:11.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:36:11.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:36:11.971 [DEBUG] [Thread-24573] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:36:13.745 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:19.122 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:24.538 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:24.597 [DEBUG] [Thread-24575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:25.895 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:25.895 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:29.914 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:35.290 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:39.629 [DEBUG] [Thread-24576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:40.705 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:41.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:36:41.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:36:41.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
2026-04-15T19:36:43.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 36, 24), 4.20746, 75.0102, 0.0, 12.8988, 9.83136, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:36:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:36:24
2026-04-15T19:36:43.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:36:44.059 [DEBUG] [Thread-24577] [transport.py] [_log()] starting thread (client mode): 0xee906c50
2026-04-15T19:36:44.060 [DEBUG] [Thread-24577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:36:44.078 [DEBUG] [Thread-24577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:36:44.079 [INFO] [Thread-24577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:36:44.082 [DEBUG] [Thread-24577] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:36:44.082 [DEBUG] [Thread-24577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:36:44.082 [DEBUG] [Thread-24577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:36:44.082 [DEBUG] [Thread-24577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:36:44.082 [DEBUG] [Thread-24577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:36:44.082 [DEBUG] [Thread-24577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:36:44.082 [DEBUG] [Thread-24577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:36:44.082 [DEBUG] [Thread-24577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:36:44.082 [DEBUG] [Thread-24577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:36:44.082 [DEBUG] [Thread-24577] [transport.py] [_log()] client lang: <none>
2026-04-15T19:36:44.082 [DEBUG] [Thread-24577] [transport.py] [_log()] server lang: <none>
2026-04-15T19:36:44.082 [DEBUG] [Thread-24577] [transport.py] [_log()] kex follows: False
2026-04-15T19:36:44.082 [DEBUG] [Thread-24577] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:36:44.082 [DEBUG] [Thread-24577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:36:44.082 [DEBUG] [Thread-24577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:36:44.083 [DEBUG] [Thread-24577] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:36:44.083 [DEBUG] [Thread-24577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:36:44.083 [DEBUG] [Thread-24577] [transport.py] [_log()] Compression: none
2026-04-15T19:36:44.083 [DEBUG] [Thread-24577] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:36:44.098 [DEBUG] [Thread-24577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:36:44.099 [DEBUG] [Thread-24577] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:36:44.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:36:44.099 [DEBUG] [Thread-24577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:36:44.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:36:44.100 [DEBUG] [Thread-24577] [transport.py] [_log()] userauth is OK
2026-04-15T19:36:44.100 [DEBUG] [Thread-24577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:36:44.100 [DEBUG] [Thread-24577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:36:44.100 [DEBUG] [Thread-24577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:36:44.100 [DEBUG] [Thread-24577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:36:44.118 [INFO] [Thread-24577] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:36:44.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:36:44.920 [DEBUG] [Thread-24577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:36:44.920 [DEBUG] [Thread-24577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:36:44.920 [DEBUG] [Thread-24577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:36:44.960 [DEBUG] [Thread-24577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:36:44.961 [DEBUG] [Thread-24577] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:36:44.962 [DEBUG] [Thread-24577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:36:44.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:36:44.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:36:44.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:36:44.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:36:44.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:36:44.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:36:44.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:36:44.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:36:44.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:36:44.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.733466 -999.00   +9.90  15.60     78   +6.40 1 1 1 1 1     0    0 3.36 -9.86 ZNESW 16.8 15.6 292.0 17.4 10.7 -23.9 10.6 -23.1 10.2 -21.0 10.6 -22.6
2026-04-15T19:36:44.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:36:44.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:36:44.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.733466
2026-04-15T19:36:44.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:36:44.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:36:44.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:36:44.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:36:44.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:36:44.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:36:24', tmtdew=4.20746, humidity=75.0102, cloud=0.0, wind=12.8988, temperature=9.83136, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:36:24', seeing=1.91, atlas_timestamp='2026-04-15T17:36:11.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.10174999999999912, -0.0467499999999994, -0.05799999999999983, -0.0625, -0.040749999999999176, -0.06700000000000195, -0.06074999999999875, -0.029500000000000526, -0.058999999999999275, -0.09774999999999956, -0.04100000000000037, 0.019000000000000128, -0.02674999999999983, -0.0070000000000014495, -0.027499999999999858, 0.013249999999999318, 0.016000000000000014, -0.028999999999999915, -0.023749999999999716, 0.0009999999999994458, 0.017249999999998877, -0.053749999999999076, -0.011750000000001037, 0.02999999999999936, -0.02549999999999919, -0.0572499999999998, -0.03550000000000075, 0.03200000000000003, 0.2190000000000012, -0.0034999999999989484, 0.02400000000000091, -0.05525000000000091], zp_timestamp='2026-04-15T17:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:36:44.982 [DEBUG] [Thread-24577] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:36:45.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:36:45.194 [DEBUG] [Thread-24580] [transport.py] [_log()] starting thread (client mode): 0xf13373d0
2026-04-15T19:36:45.194 [DEBUG] [Thread-24580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:36:45.208 [DEBUG] [Thread-24580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:36:45.208 [INFO] [Thread-24580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:36:45.215 [DEBUG] [Thread-24580] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:36:45.215 [DEBUG] [Thread-24580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] client lang: <none>
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] server lang: <none>
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] kex follows: False
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] Compression: none
2026-04-15T19:36:45.216 [DEBUG] [Thread-24580] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:36:45.273 [DEBUG] [Thread-24580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:36:45.273 [DEBUG] [Thread-24580] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:36:45.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:36:45.274 [DEBUG] [Thread-24580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:36:45.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:36:45.330 [DEBUG] [Thread-24580] [transport.py] [_log()] userauth is OK
2026-04-15T19:36:45.330 [DEBUG] [Thread-24580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:36:45.330 [DEBUG] [Thread-24580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:36:45.330 [DEBUG] [Thread-24580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:36:45.330 [DEBUG] [Thread-24580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:36:45.347 [INFO] [Thread-24580] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:36:45.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:36:45.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:36:46.083 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:46.197 [DEBUG] [Thread-24580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:36:46.197 [DEBUG] [Thread-24580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:36:46.245 [DEBUG] [Thread-24580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:36:46.246 [DEBUG] [Thread-24580] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:36:46.254 [DEBUG] [Thread-24580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:36:46.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:36:46.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')
2026-04-15T19:36:46.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
2026-04-15T19:36:46.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:36:46.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:36:46.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:36:46.286 [DEBUG] [Thread-24580] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:36:51.459 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:54.651 [DEBUG] [Thread-24582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:36:56.838 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:00.033 [DEBUG] [Thread-24583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:02.215 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:07.591 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:09.683 [DEBUG] [Thread-24584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:13.005 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:16.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:37:16.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:37:16.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
2026-04-15T19:37:17.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 36, 24), 4.20746, 75.0102, 0.0, 14.6988, 9.83136, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:37:17.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:36:24
2026-04-15T19:37:17.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:37:18.358 [DEBUG] [Thread-24585] [transport.py] [_log()] starting thread (client mode): 0xf1353ac0
2026-04-15T19:37:18.358 [DEBUG] [Thread-24585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:37:18.378 [DEBUG] [Thread-24585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:37:18.378 [INFO] [Thread-24585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:37:18.381 [DEBUG] [Thread-24585] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:37:18.381 [DEBUG] [Thread-24585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] client lang: <none>
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] server lang: <none>
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] kex follows: False
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] Compression: none
2026-04-15T19:37:18.382 [DEBUG] [Thread-24585] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:37:18.386 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:18.399 [DEBUG] [Thread-24585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:37:18.399 [DEBUG] [Thread-24585] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:37:18.399 [DEBUG] [Thread-24585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:37:18.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:37:18.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:37:18.400 [DEBUG] [Thread-24585] [transport.py] [_log()] userauth is OK
2026-04-15T19:37:18.400 [DEBUG] [Thread-24585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:37:18.401 [DEBUG] [Thread-24585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:37:18.401 [DEBUG] [Thread-24585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:37:18.401 [DEBUG] [Thread-24585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:37:18.419 [INFO] [Thread-24585] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:37:18.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:37:19.144 [DEBUG] [Thread-24585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:37:19.144 [DEBUG] [Thread-24585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:37:19.144 [DEBUG] [Thread-24585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:37:19.184 [DEBUG] [Thread-24585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:37:19.185 [DEBUG] [Thread-24585] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:37:19.187 [DEBUG] [Thread-24585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:37:19.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:37:19.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:37:19.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:37:19.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:37:19.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:37:19.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:37:19.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:37:19.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:37:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:37:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.733813 -999.00   +9.90  15.33     78   +6.30 1 1 1 1 1     0    0 3.27 -9.81 ZNESW 15.3 15.3 292.4 19.2 10.7 -23.9 10.6 -23.0 10.2 -21.1 10.6 -22.8
2026-04-15T19:37:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:37:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:37:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.733813
2026-04-15T19:37:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:37:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:37:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:37:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:37:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:37:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:36:24', tmtdew=4.20746, humidity=75.0102, cloud=0.0, wind=14.6988, temperature=9.83136, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:37:00', seeing=1.16, atlas_timestamp='2026-04-15T17:36:41.443', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.10174999999999912, -0.0467499999999994, -0.05799999999999983, -0.0625, -0.040749999999999176, -0.06700000000000195, -0.06074999999999875, -0.029500000000000526, -0.058999999999999275, -0.09774999999999956, -0.04100000000000037, 0.019000000000000128, -0.02674999999999983, -0.0070000000000014495, -0.027499999999999858, 0.013249999999999318, 0.016000000000000014, -0.028999999999999915, -0.023749999999999716, 0.0009999999999994458, 0.017249999999998877, -0.053749999999999076, -0.011750000000001037, 0.02999999999999936, -0.02549999999999919, -0.0572499999999998, -0.03550000000000075, 0.03200000000000003, 0.2190000000000012, -0.0034999999999989484, 0.02400000000000091, -0.05525000000000091], zp_timestamp='2026-04-15T17:33:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:37:19.207 [DEBUG] [Thread-24585] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:37:19.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:37:19.419 [DEBUG] [Thread-24588] [transport.py] [_log()] starting thread (client mode): 0xf1364af0
2026-04-15T19:37:19.419 [DEBUG] [Thread-24588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:37:19.433 [DEBUG] [Thread-24588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:37:19.433 [INFO] [Thread-24588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:37:19.440 [DEBUG] [Thread-24588] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] client lang: <none>
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] server lang: <none>
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] kex follows: False
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:37:19.441 [DEBUG] [Thread-24588] [transport.py] [_log()] Compression: none
2026-04-15T19:37:19.442 [DEBUG] [Thread-24588] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:37:19.496 [DEBUG] [Thread-24588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:37:19.497 [DEBUG] [Thread-24588] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:37:19.497 [DEBUG] [Thread-24588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:37:19.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:37:19.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:37:19.554 [DEBUG] [Thread-24588] [transport.py] [_log()] userauth is OK
2026-04-15T19:37:19.554 [DEBUG] [Thread-24588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:37:19.554 [DEBUG] [Thread-24588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:37:19.554 [DEBUG] [Thread-24588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:37:19.554 [DEBUG] [Thread-24588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:37:19.571 [INFO] [Thread-24588] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:37:19.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:37:19.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:37:20.370 [DEBUG] [Thread-24588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:37:20.371 [DEBUG] [Thread-24588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:37:20.418 [DEBUG] [Thread-24588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:37:20.418 [DEBUG] [Thread-24588] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:37:20.427 [DEBUG] [Thread-24588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:37:20.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:37: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')
2026-04-15T19:37:20.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
2026-04-15T19:37:20.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:37:20.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:37:20.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:37:20.459 [DEBUG] [Thread-24588] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:37:23.763 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:24.707 [DEBUG] [Thread-24590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:26.097 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:26.097 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:29.141 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:34.537 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:39.739 [DEBUG] [Thread-24591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:39.894 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:45.272 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:50.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:37:50.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:37:50.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
2026-04-15T19:37:50.650 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:51.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 37, 35), 4.17022, 75.2528, 0.0, 16.6205, 10.0629, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:37:51.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:37:35
2026-04-15T19:37:52.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:37:52.595 [DEBUG] [Thread-24592] [transport.py] [_log()] starting thread (client mode): 0xf13cae90
2026-04-15T19:37:52.595 [DEBUG] [Thread-24592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:37:52.615 [DEBUG] [Thread-24592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:37:52.615 [INFO] [Thread-24592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:37:52.618 [DEBUG] [Thread-24592] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:37:52.618 [DEBUG] [Thread-24592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:37:52.618 [DEBUG] [Thread-24592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:37:52.618 [DEBUG] [Thread-24592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:37:52.618 [DEBUG] [Thread-24592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:37:52.618 [DEBUG] [Thread-24592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:37:52.619 [DEBUG] [Thread-24592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:37:52.619 [DEBUG] [Thread-24592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:37:52.619 [DEBUG] [Thread-24592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:37:52.619 [DEBUG] [Thread-24592] [transport.py] [_log()] client lang: <none>
2026-04-15T19:37:52.619 [DEBUG] [Thread-24592] [transport.py] [_log()] server lang: <none>
2026-04-15T19:37:52.619 [DEBUG] [Thread-24592] [transport.py] [_log()] kex follows: False
2026-04-15T19:37:52.619 [DEBUG] [Thread-24592] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:37:52.619 [DEBUG] [Thread-24592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:37:52.619 [DEBUG] [Thread-24592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:37:52.619 [DEBUG] [Thread-24592] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:37:52.619 [DEBUG] [Thread-24592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:37:52.619 [DEBUG] [Thread-24592] [transport.py] [_log()] Compression: none
2026-04-15T19:37:52.619 [DEBUG] [Thread-24592] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:37:52.635 [DEBUG] [Thread-24592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:37:52.635 [DEBUG] [Thread-24592] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:37:52.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:37:52.635 [DEBUG] [Thread-24592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:37:52.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:37:52.676 [DEBUG] [Thread-24592] [transport.py] [_log()] userauth is OK
2026-04-15T19:37:52.676 [DEBUG] [Thread-24592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:37:52.676 [DEBUG] [Thread-24592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:37:52.676 [DEBUG] [Thread-24592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:37:52.676 [DEBUG] [Thread-24592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:37:52.707 [INFO] [Thread-24592] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:37:52.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:37:53.554 [DEBUG] [Thread-24592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:37:53.554 [DEBUG] [Thread-24592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:37:53.555 [DEBUG] [Thread-24592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:37:53.595 [DEBUG] [Thread-24592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:37:53.595 [DEBUG] [Thread-24592] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:37:53.598 [DEBUG] [Thread-24592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:37:53.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:37:53.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:37:53.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:37:53.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:37:53.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:37:53.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:37:53.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:37:53.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:37:53.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:37:53.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.734161 -999.00   +9.90  12.65     78   +6.40 1 1 1 1 1     0    0 3.40 -9.07 ZNESW 12.8 12.7 304.5 17.6 10.7 -23.8 10.5 -22.9 10.2 -21.1 10.6 -22.8
2026-04-15T19:37:53.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:37:53.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:37:53.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.734161
2026-04-15T19:37:53.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:37:53.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:37:53.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:37:53.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:37:53.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:37:53.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:37:35', tmtdew=4.17022, humidity=75.2528, cloud=0.0, wind=16.6205, temperature=10.0629, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:37:35', seeing=1.16, atlas_timestamp='2026-04-15T17:37:11.510', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03974999999999973, -0.021749999999999048, -0.06400000000000006, -0.037499999999999645, 0.07225000000000037, 0.21699999999999875, 0.01025000000000098, 0.006999999999997897, -0.023999999999999133, -0.05925000000000047, -0.04249999999999865, 0.019000000000000128, 0.05874999999999986, 0.3119999999999994, 0.04800000000000004, 0.008250000000000313, 0.017999999999998906, -0.011000000000001009, 0.003249999999999531, 0.03049999999999997, 0.057749999999998636, 0.13725000000000165, -0.013249999999999318, 0.014499999999999957, -0.015499999999999403, -0.030750000000001165, -0.020500000000000185, 0.04899999999999949, 0.15000000000000036, 0.08549999999999969, 0.04650000000000176, -0.008250000000000313], zp_timestamp='2026-04-15T17:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:37:53.616 [DEBUG] [Thread-24592] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:37:53.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:37:53.827 [DEBUG] [Thread-24595] [transport.py] [_log()] starting thread (client mode): 0xf13530a0
2026-04-15T19:37:53.827 [DEBUG] [Thread-24595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:37:53.842 [DEBUG] [Thread-24595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:37:53.842 [INFO] [Thread-24595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:37:53.849 [DEBUG] [Thread-24595] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:37:53.849 [DEBUG] [Thread-24595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:37:53.849 [DEBUG] [Thread-24595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:37:53.849 [DEBUG] [Thread-24595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:37:53.849 [DEBUG] [Thread-24595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:37:53.849 [DEBUG] [Thread-24595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:37:53.849 [DEBUG] [Thread-24595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:37:53.849 [DEBUG] [Thread-24595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:37:53.849 [DEBUG] [Thread-24595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:37:53.850 [DEBUG] [Thread-24595] [transport.py] [_log()] client lang: <none>
2026-04-15T19:37:53.850 [DEBUG] [Thread-24595] [transport.py] [_log()] server lang: <none>
2026-04-15T19:37:53.850 [DEBUG] [Thread-24595] [transport.py] [_log()] kex follows: False
2026-04-15T19:37:53.850 [DEBUG] [Thread-24595] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:37:53.850 [DEBUG] [Thread-24595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:37:53.850 [DEBUG] [Thread-24595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:37:53.850 [DEBUG] [Thread-24595] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:37:53.850 [DEBUG] [Thread-24595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:37:53.850 [DEBUG] [Thread-24595] [transport.py] [_log()] Compression: none
2026-04-15T19:37:53.850 [DEBUG] [Thread-24595] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:37:53.904 [DEBUG] [Thread-24595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:37:53.904 [DEBUG] [Thread-24595] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:37:53.905 [DEBUG] [Thread-24595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:37:53.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:37:53.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:37:53.961 [DEBUG] [Thread-24595] [transport.py] [_log()] userauth is OK
2026-04-15T19:37:53.961 [DEBUG] [Thread-24595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:37:53.961 [DEBUG] [Thread-24595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:37:53.962 [DEBUG] [Thread-24595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:37:53.962 [DEBUG] [Thread-24595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:37:53.979 [INFO] [Thread-24595] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:37:53.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:37:53.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:37:54.752 [DEBUG] [Thread-24595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:37:54.752 [DEBUG] [Thread-24595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:37:54.763 [DEBUG] [Thread-24597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:37:54.799 [DEBUG] [Thread-24595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:37:54.799 [DEBUG] [Thread-24595] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:37:54.808 [DEBUG] [Thread-24595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:37:54.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:37:54.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')
2026-04-15T19:37:54.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
2026-04-15T19:37:54.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:37:54.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:37:54.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:37:54.851 [DEBUG] [Thread-24595] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:37:56.027 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:00.178 [DEBUG] [Thread-24598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:01.405 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:06.819 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:09.796 [DEBUG] [Thread-24599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:12.197 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:17.573 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:22.951 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:24.819 [DEBUG] [Thread-24600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:24.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:38:24.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:38:24.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T19:38:26.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 38, 10), 4.25683, 74.5107, 0.0, 15.6337, 9.81522, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:38:26.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:38:10
2026-04-15T19:38:26.300 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:26.301 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:26.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:38:26.919 [DEBUG] [Thread-24601] [transport.py] [_log()] starting thread (client mode): 0xee905b70
2026-04-15T19:38:26.919 [DEBUG] [Thread-24601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:38:26.938 [DEBUG] [Thread-24601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:38:26.938 [INFO] [Thread-24601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:38:26.941 [DEBUG] [Thread-24601] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:38:26.941 [DEBUG] [Thread-24601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:38:26.941 [DEBUG] [Thread-24601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:38:26.941 [DEBUG] [Thread-24601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:38:26.941 [DEBUG] [Thread-24601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:38:26.941 [DEBUG] [Thread-24601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:38:26.942 [DEBUG] [Thread-24601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:38:26.942 [DEBUG] [Thread-24601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:38:26.942 [DEBUG] [Thread-24601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:38:26.942 [DEBUG] [Thread-24601] [transport.py] [_log()] client lang: <none>
2026-04-15T19:38:26.942 [DEBUG] [Thread-24601] [transport.py] [_log()] server lang: <none>
2026-04-15T19:38:26.942 [DEBUG] [Thread-24601] [transport.py] [_log()] kex follows: False
2026-04-15T19:38:26.942 [DEBUG] [Thread-24601] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:38:26.942 [DEBUG] [Thread-24601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:38:26.942 [DEBUG] [Thread-24601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:38:26.942 [DEBUG] [Thread-24601] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:38:26.942 [DEBUG] [Thread-24601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:38:26.942 [DEBUG] [Thread-24601] [transport.py] [_log()] Compression: none
2026-04-15T19:38:26.942 [DEBUG] [Thread-24601] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:38:26.958 [DEBUG] [Thread-24601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:38:26.959 [DEBUG] [Thread-24601] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:38:26.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:38:26.959 [DEBUG] [Thread-24601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:38:26.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:38:26.960 [DEBUG] [Thread-24601] [transport.py] [_log()] userauth is OK
2026-04-15T19:38:26.960 [DEBUG] [Thread-24601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:38:26.960 [DEBUG] [Thread-24601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:38:26.960 [DEBUG] [Thread-24601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:38:26.960 [DEBUG] [Thread-24601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:38:26.973 [INFO] [Thread-24601] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:38:26.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:38:27.749 [DEBUG] [Thread-24601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:38:27.749 [DEBUG] [Thread-24601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:38:27.749 [DEBUG] [Thread-24601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:38:27.790 [DEBUG] [Thread-24601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:38:27.790 [DEBUG] [Thread-24601] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:38:27.792 [DEBUG] [Thread-24601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:38:27.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:38:27.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:38:27.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:38:27.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:38:27.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:38:27.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:38:27.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:38:27.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:38:27.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:38:27.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.734508 -999.00   +9.90  12.78     78   +6.40 1 1 1 1 1     0    0 3.37 -8.11 ZNESW 11.8 12.8 294.0 16.4 10.7 -23.9 10.6 -22.9 10.2 -21.1 10.6 -22.8
2026-04-15T19:38:27.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:38:27.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:38:27.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.734508
2026-04-15T19:38:27.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:38:27.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:38:27.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:38:27.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:38:27.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:38:27.810 [DEBUG] [Thread-24601] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:38:27.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:38:10', tmtdew=4.25683, humidity=74.5107, cloud=0.0, wind=15.6337, temperature=9.81522, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:38:10', seeing=1.08, atlas_timestamp='2026-04-15T17:37:41.491', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03974999999999973, -0.021749999999999048, -0.06400000000000006, -0.037499999999999645, 0.07225000000000037, 0.21699999999999875, 0.01025000000000098, 0.006999999999997897, -0.023999999999999133, -0.05925000000000047, -0.04249999999999865, 0.019000000000000128, 0.05874999999999986, 0.3119999999999994, 0.04800000000000004, 0.008250000000000313, 0.017999999999998906, -0.011000000000001009, 0.003249999999999531, 0.03049999999999997, 0.057749999999998636, 0.13725000000000165, -0.013249999999999318, 0.014499999999999957, -0.015499999999999403, -0.030750000000001165, -0.020500000000000185, 0.04899999999999949, 0.15000000000000036, 0.08549999999999969, 0.04650000000000176, -0.008250000000000313], zp_timestamp='2026-04-15T17:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:38:28.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:38:28.025 [DEBUG] [Thread-24604] [transport.py] [_log()] starting thread (client mode): 0xf1335b10
2026-04-15T19:38:28.025 [DEBUG] [Thread-24604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:38:28.039 [DEBUG] [Thread-24604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:38:28.039 [INFO] [Thread-24604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:38:28.046 [DEBUG] [Thread-24604] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:38:28.046 [DEBUG] [Thread-24604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] client lang: <none>
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] server lang: <none>
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] kex follows: False
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] Compression: none
2026-04-15T19:38:28.047 [DEBUG] [Thread-24604] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:38:28.104 [DEBUG] [Thread-24604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:38:28.104 [DEBUG] [Thread-24604] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:38:28.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:38:28.105 [DEBUG] [Thread-24604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:38:28.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:38:28.162 [DEBUG] [Thread-24604] [transport.py] [_log()] userauth is OK
2026-04-15T19:38:28.162 [DEBUG] [Thread-24604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:38:28.162 [DEBUG] [Thread-24604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:38:28.162 [DEBUG] [Thread-24604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:38:28.162 [DEBUG] [Thread-24604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:38:28.179 [INFO] [Thread-24604] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:38:28.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:38:28.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:38:28.403 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:29.024 [DEBUG] [Thread-24604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:38:29.024 [DEBUG] [Thread-24604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:38:29.071 [DEBUG] [Thread-24604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:38:29.071 [DEBUG] [Thread-24604] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:38:29.079 [DEBUG] [Thread-24604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:38:29.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:38:29.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')
2026-04-15T19:38:29.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
2026-04-15T19:38:29.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:38:29.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:38:29.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:38:29.111 [DEBUG] [Thread-24604] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:38:33.781 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:39.158 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:39.843 [DEBUG] [Thread-24606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:44.535 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:49.913 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:54.875 [DEBUG] [Thread-24607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:55.326 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:38:59.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:38:59.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:38:59.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T19:39:00.329 [DEBUG] [Thread-24608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:00.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 38, 46), 4.22537, 74.9551, 0.0, 14.6801, 9.99728, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:39:00.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:38:46
2026-04-15T19:39:00.706 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:39:01.239 [DEBUG] [Thread-24609] [transport.py] [_log()] starting thread (client mode): 0xee9ae170
2026-04-15T19:39:01.239 [DEBUG] [Thread-24609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:39:01.252 [DEBUG] [Thread-24609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:39:01.252 [INFO] [Thread-24609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:39:01.254 [DEBUG] [Thread-24609] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:39:01.254 [DEBUG] [Thread-24609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:39:01.254 [DEBUG] [Thread-24609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:39:01.254 [DEBUG] [Thread-24609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:39:01.254 [DEBUG] [Thread-24609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:39:01.254 [DEBUG] [Thread-24609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:39:01.254 [DEBUG] [Thread-24609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:39:01.254 [DEBUG] [Thread-24609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:39:01.254 [DEBUG] [Thread-24609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:39:01.254 [DEBUG] [Thread-24609] [transport.py] [_log()] client lang: <none>
2026-04-15T19:39:01.254 [DEBUG] [Thread-24609] [transport.py] [_log()] server lang: <none>
2026-04-15T19:39:01.254 [DEBUG] [Thread-24609] [transport.py] [_log()] kex follows: False
2026-04-15T19:39:01.254 [DEBUG] [Thread-24609] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:39:01.254 [DEBUG] [Thread-24609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:39:01.255 [DEBUG] [Thread-24609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:39:01.255 [DEBUG] [Thread-24609] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:39:01.255 [DEBUG] [Thread-24609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:39:01.255 [DEBUG] [Thread-24609] [transport.py] [_log()] Compression: none
2026-04-15T19:39:01.255 [DEBUG] [Thread-24609] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:39:01.263 [DEBUG] [Thread-24609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:39:01.264 [DEBUG] [Thread-24609] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:39:01.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:39:01.264 [DEBUG] [Thread-24609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:39:01.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:39:01.265 [DEBUG] [Thread-24609] [transport.py] [_log()] userauth is OK
2026-04-15T19:39:01.265 [DEBUG] [Thread-24609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:39:01.265 [DEBUG] [Thread-24609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:39:01.265 [DEBUG] [Thread-24609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:39:01.265 [DEBUG] [Thread-24609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:39:01.284 [INFO] [Thread-24609] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:39:01.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:39:02.038 [DEBUG] [Thread-24609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:39:02.038 [DEBUG] [Thread-24609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:39:02.038 [DEBUG] [Thread-24609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:39:02.079 [DEBUG] [Thread-24609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:39:02.079 [DEBUG] [Thread-24609] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:39:02.081 [DEBUG] [Thread-24609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:39:02.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:39:02.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:39:02.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:39:02.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:39:02.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:39:02.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:39:02.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:39:02.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:39:02.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:39:02.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.734855 -999.00   +9.90  13.71     78   +6.40 1 1 1 1 1     0    0 3.36 -8.24 ZNESW 12.6 13.7 306.0 17.8 10.7 -23.8 10.5 -22.9 10.2 -21.1 10.6 -22.9
2026-04-15T19:39:02.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:39:02.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:39:02.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.734855
2026-04-15T19:39:02.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:39:02.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:39:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:39:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:39:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:39:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:38:46', tmtdew=4.22537, humidity=74.9551, cloud=0.0, wind=14.6801, temperature=9.99728, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:38:46', seeing=1.08, atlas_timestamp='2026-04-15T17:38:11.472', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03974999999999973, -0.021749999999999048, -0.06400000000000006, -0.037499999999999645, 0.07225000000000037, 0.21699999999999875, 0.01025000000000098, 0.006999999999997897, -0.023999999999999133, -0.05925000000000047, -0.04249999999999865, 0.019000000000000128, 0.05874999999999986, 0.3119999999999994, 0.04800000000000004, 0.008250000000000313, 0.017999999999998906, -0.011000000000001009, 0.003249999999999531, 0.03049999999999997, 0.057749999999998636, 0.13725000000000165, -0.013249999999999318, 0.014499999999999957, -0.015499999999999403, -0.030750000000001165, -0.020500000000000185, 0.04899999999999949, 0.15000000000000036, 0.08549999999999969, 0.04650000000000176, -0.008250000000000313], zp_timestamp='2026-04-15T17:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:39:02.101 [DEBUG] [Thread-24609] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:39:02.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:39:02.327 [DEBUG] [Thread-24612] [transport.py] [_log()] starting thread (client mode): 0xf1351660
2026-04-15T19:39:02.327 [DEBUG] [Thread-24612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:39:02.341 [DEBUG] [Thread-24612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:39:02.341 [INFO] [Thread-24612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:39:02.348 [DEBUG] [Thread-24612] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] client lang: <none>
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] server lang: <none>
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] kex follows: False
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:39:02.349 [DEBUG] [Thread-24612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:39:02.350 [DEBUG] [Thread-24612] [transport.py] [_log()] Compression: none
2026-04-15T19:39:02.350 [DEBUG] [Thread-24612] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:39:02.404 [DEBUG] [Thread-24612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:39:02.404 [DEBUG] [Thread-24612] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:39:02.405 [DEBUG] [Thread-24612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:39:02.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:39:02.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:39:02.461 [DEBUG] [Thread-24612] [transport.py] [_log()] userauth is OK
2026-04-15T19:39:02.461 [DEBUG] [Thread-24612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:39:02.461 [DEBUG] [Thread-24612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:39:02.461 [DEBUG] [Thread-24612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:39:02.461 [DEBUG] [Thread-24612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:39:02.479 [INFO] [Thread-24612] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:39:02.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:39:02.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:39:03.330 [DEBUG] [Thread-24612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:39:03.330 [DEBUG] [Thread-24612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:39:03.377 [DEBUG] [Thread-24612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:39:03.377 [DEBUG] [Thread-24612] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:39:03.386 [DEBUG] [Thread-24612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:39:03.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:39:03.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')
2026-04-15T19:39:03.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
2026-04-15T19:39:03.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:39:03.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:39:03.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:39:03.418 [DEBUG] [Thread-24612] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:39:06.083 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:09.899 [DEBUG] [Thread-24614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:11.462 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:16.837 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:22.222 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:24.929 [DEBUG] [Thread-24615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:26.503 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:26.503 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:27.611 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:32.991 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:33.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:39:33.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:39:33.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
2026-04-15T19:39:34.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 39, 21), 4.26956, 74.4447, 0.0, 13.2163, 9.81549, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:39:34.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:39:21
2026-04-15T19:39:35.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:39:35.489 [DEBUG] [Thread-24616] [transport.py] [_log()] starting thread (client mode): 0xf1350a90
2026-04-15T19:39:35.490 [DEBUG] [Thread-24616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:39:35.510 [DEBUG] [Thread-24616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:39:35.510 [INFO] [Thread-24616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:39:35.512 [DEBUG] [Thread-24616] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:39:35.512 [DEBUG] [Thread-24616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:39:35.512 [DEBUG] [Thread-24616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:39:35.512 [DEBUG] [Thread-24616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:39:35.512 [DEBUG] [Thread-24616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:39:35.512 [DEBUG] [Thread-24616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:39:35.512 [DEBUG] [Thread-24616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:39:35.512 [DEBUG] [Thread-24616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:39:35.512 [DEBUG] [Thread-24616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:39:35.512 [DEBUG] [Thread-24616] [transport.py] [_log()] client lang: <none>
2026-04-15T19:39:35.512 [DEBUG] [Thread-24616] [transport.py] [_log()] server lang: <none>
2026-04-15T19:39:35.512 [DEBUG] [Thread-24616] [transport.py] [_log()] kex follows: False
2026-04-15T19:39:35.513 [DEBUG] [Thread-24616] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:39:35.513 [DEBUG] [Thread-24616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:39:35.513 [DEBUG] [Thread-24616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:39:35.513 [DEBUG] [Thread-24616] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:39:35.513 [DEBUG] [Thread-24616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:39:35.513 [DEBUG] [Thread-24616] [transport.py] [_log()] Compression: none
2026-04-15T19:39:35.513 [DEBUG] [Thread-24616] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:39:35.524 [DEBUG] [Thread-24616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:39:35.525 [DEBUG] [Thread-24616] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:39:35.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:39:35.525 [DEBUG] [Thread-24616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:39:35.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:39:35.526 [DEBUG] [Thread-24616] [transport.py] [_log()] userauth is OK
2026-04-15T19:39:35.526 [DEBUG] [Thread-24616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:39:35.526 [DEBUG] [Thread-24616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:39:35.526 [DEBUG] [Thread-24616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:39:35.526 [DEBUG] [Thread-24616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:39:35.539 [INFO] [Thread-24616] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:39:35.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:39:36.346 [DEBUG] [Thread-24616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:39:36.346 [DEBUG] [Thread-24616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:39:36.346 [DEBUG] [Thread-24616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:39:36.387 [DEBUG] [Thread-24616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:39:36.387 [DEBUG] [Thread-24616] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:39:36.388 [DEBUG] [Thread-24616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:39:36.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:39:36.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:39:36.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:39:36.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:39:36.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:39:36.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:39:36.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:39:36.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:39:36.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:39:36.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.735549 -999.00   +9.90  14.36     78   +6.30 1 1 1 1 1     0    0 3.40 -8.30 ZNESW 14.2 14.4 302.2 17.4 10.7 -23.8 10.5 -22.8 10.2 -21.1 10.5 -22.8
2026-04-15T19:39:36.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:39:36.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:39:36.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.735549
2026-04-15T19:39:36.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:39:36.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:39:36.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:39:36.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:39:36.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:39:36.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:39:21', tmtdew=4.26956, humidity=74.4447, cloud=0.0, wind=13.2163, temperature=9.81549, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:39:21', seeing=1.08, atlas_timestamp='2026-04-15T17:39:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03974999999999973, -0.021749999999999048, -0.06400000000000006, -0.037499999999999645, 0.07225000000000037, 0.21699999999999875, 0.01025000000000098, 0.006999999999997897, -0.023999999999999133, -0.05925000000000047, -0.04249999999999865, 0.019000000000000128, 0.05874999999999986, 0.3119999999999994, 0.04800000000000004, 0.008250000000000313, 0.017999999999998906, -0.011000000000001009, 0.003249999999999531, 0.03049999999999997, 0.057749999999998636, 0.13725000000000165, -0.013249999999999318, 0.014499999999999957, -0.015499999999999403, -0.030750000000001165, -0.020500000000000185, 0.04899999999999949, 0.15000000000000036, 0.08549999999999969, 0.04650000000000176, -0.008250000000000313], zp_timestamp='2026-04-15T17:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:39:36.403 [DEBUG] [Thread-24616] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:39:36.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:39:36.625 [DEBUG] [Thread-24619] [transport.py] [_log()] starting thread (client mode): 0xf1365840
2026-04-15T19:39:36.626 [DEBUG] [Thread-24619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:39:36.640 [DEBUG] [Thread-24619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:39:36.640 [INFO] [Thread-24619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:39:36.647 [DEBUG] [Thread-24619] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:39:36.647 [DEBUG] [Thread-24619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] client lang: <none>
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] server lang: <none>
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] kex follows: False
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] Compression: none
2026-04-15T19:39:36.648 [DEBUG] [Thread-24619] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:39:36.704 [DEBUG] [Thread-24619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:39:36.704 [DEBUG] [Thread-24619] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:39:36.704 [DEBUG] [Thread-24619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:39:36.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:39:36.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:39:36.761 [DEBUG] [Thread-24619] [transport.py] [_log()] userauth is OK
2026-04-15T19:39:36.761 [DEBUG] [Thread-24619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:39:36.761 [DEBUG] [Thread-24619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:39:36.761 [DEBUG] [Thread-24619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:39:36.761 [DEBUG] [Thread-24619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:39:36.778 [INFO] [Thread-24619] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:39:36.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:39:36.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:39:37.614 [DEBUG] [Thread-24619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:39:37.614 [DEBUG] [Thread-24619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:39:37.662 [DEBUG] [Thread-24619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:39:37.662 [DEBUG] [Thread-24619] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:39:37.671 [DEBUG] [Thread-24619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:39:37.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:39:37.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')
2026-04-15T19:39:37.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
2026-04-15T19:39:37.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:39:37.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:39:37.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:39:37.702 [DEBUG] [Thread-24619] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:39:38.409 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:39.951 [DEBUG] [Thread-24621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:43.873 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:49.283 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:54.697 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:39:54.983 [DEBUG] [Thread-24622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:00.144 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:00.488 [DEBUG] [Thread-24623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:05.543 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:07.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:40:07.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:40:07.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
2026-04-15T19:40:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 39, 56), 4.25673, 74.5113, 0.0, 15.7572, 9.81571, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:40:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:39:56
2026-04-15T19:40:09.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:40:09.830 [DEBUG] [Thread-24624] [transport.py] [_log()] starting thread (client mode): 0xee9acd60
2026-04-15T19:40:09.831 [DEBUG] [Thread-24624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:40:09.851 [DEBUG] [Thread-24624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:40:09.851 [INFO] [Thread-24624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:40:09.855 [DEBUG] [Thread-24624] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:40:09.855 [DEBUG] [Thread-24624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:40:09.855 [DEBUG] [Thread-24624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:40:09.855 [DEBUG] [Thread-24624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:40:09.855 [DEBUG] [Thread-24624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:40:09.855 [DEBUG] [Thread-24624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:40:09.855 [DEBUG] [Thread-24624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:40:09.855 [DEBUG] [Thread-24624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:40:09.855 [DEBUG] [Thread-24624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:40:09.855 [DEBUG] [Thread-24624] [transport.py] [_log()] client lang: <none>
2026-04-15T19:40:09.855 [DEBUG] [Thread-24624] [transport.py] [_log()] server lang: <none>
2026-04-15T19:40:09.855 [DEBUG] [Thread-24624] [transport.py] [_log()] kex follows: False
2026-04-15T19:40:09.855 [DEBUG] [Thread-24624] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:40:09.855 [DEBUG] [Thread-24624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:40:09.855 [DEBUG] [Thread-24624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:40:09.856 [DEBUG] [Thread-24624] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:40:09.856 [DEBUG] [Thread-24624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:40:09.856 [DEBUG] [Thread-24624] [transport.py] [_log()] Compression: none
2026-04-15T19:40:09.856 [DEBUG] [Thread-24624] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:40:09.871 [DEBUG] [Thread-24624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:40:09.871 [DEBUG] [Thread-24624] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:40:09.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:40:09.872 [DEBUG] [Thread-24624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:40:09.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:40:09.872 [DEBUG] [Thread-24624] [transport.py] [_log()] userauth is OK
2026-04-15T19:40:09.873 [DEBUG] [Thread-24624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:40:09.873 [DEBUG] [Thread-24624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:40:09.873 [DEBUG] [Thread-24624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:40:09.873 [DEBUG] [Thread-24624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:40:09.892 [INFO] [Thread-24624] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:40:09.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:40:10.005 [DEBUG] [Thread-24626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:10.928 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:15.363 [DEBUG] [Thread-24624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:40:15.363 [DEBUG] [Thread-24624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:40:15.364 [DEBUG] [Thread-24624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:40:15.404 [DEBUG] [Thread-24624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:40:15.405 [DEBUG] [Thread-24624] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:40:15.407 [DEBUG] [Thread-24624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:40:15.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:40:15.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:40:15.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:40:15.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:40:15.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:40:15.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:40:15.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:40:15.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:40:15.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:40:15.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.735897 -999.00   +9.90  12.82     78   +6.30 1 2 1 1 1     0    0 3.36 -8.66 ZnESW 13.9 12.8 300.8 15.1 10.7 -24.0 10.5 -23.0 10.2 -21.3 10.6 -22.8
2026-04-15T19:40:15.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:40:15.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:40:15.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.735897
2026-04-15T19:40:15.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:40:15.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:40:15.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:40:15.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:40:15.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-15T19:40:15.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:39:56', tmtdew=4.25673, humidity=74.5113, cloud=0.0, wind=15.7572, temperature=9.81571, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:39:56', seeing=1.08, atlas_timestamp='2026-04-15T17:39:41.501', atlas_cloud=2, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03974999999999973, -0.021749999999999048, -0.06400000000000006, -0.037499999999999645, 0.07225000000000037, 0.21699999999999875, 0.01025000000000098, 0.006999999999997897, -0.023999999999999133, -0.05925000000000047, -0.04249999999999865, 0.019000000000000128, 0.05874999999999986, 0.3119999999999994, 0.04800000000000004, 0.008250000000000313, 0.017999999999998906, -0.011000000000001009, 0.003249999999999531, 0.03049999999999997, 0.057749999999998636, 0.13725000000000165, -0.013249999999999318, 0.014499999999999957, -0.015499999999999403, -0.030750000000001165, -0.020500000000000185, 0.04899999999999949, 0.15000000000000036, 0.08549999999999969, 0.04650000000000176, -0.008250000000000313], zp_timestamp='2026-04-15T17:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:40:15.482 [DEBUG] [Thread-24624] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:40:15.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:40:15.692 [DEBUG] [Thread-24628] [transport.py] [_log()] starting thread (client mode): 0xee9ad570
2026-04-15T19:40:15.693 [DEBUG] [Thread-24628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:40:15.707 [DEBUG] [Thread-24628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:40:15.707 [INFO] [Thread-24628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:40:15.714 [DEBUG] [Thread-24628] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:40:15.714 [DEBUG] [Thread-24628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:40:15.714 [DEBUG] [Thread-24628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:40:15.714 [DEBUG] [Thread-24628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:40:15.714 [DEBUG] [Thread-24628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:40:15.715 [DEBUG] [Thread-24628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:40:15.715 [DEBUG] [Thread-24628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:40:15.715 [DEBUG] [Thread-24628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:40:15.715 [DEBUG] [Thread-24628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:40:15.715 [DEBUG] [Thread-24628] [transport.py] [_log()] client lang: <none>
2026-04-15T19:40:15.715 [DEBUG] [Thread-24628] [transport.py] [_log()] server lang: <none>
2026-04-15T19:40:15.715 [DEBUG] [Thread-24628] [transport.py] [_log()] kex follows: False
2026-04-15T19:40:15.715 [DEBUG] [Thread-24628] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:40:15.715 [DEBUG] [Thread-24628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:40:15.715 [DEBUG] [Thread-24628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:40:15.715 [DEBUG] [Thread-24628] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:40:15.715 [DEBUG] [Thread-24628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:40:15.715 [DEBUG] [Thread-24628] [transport.py] [_log()] Compression: none
2026-04-15T19:40:15.715 [DEBUG] [Thread-24628] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:40:15.771 [DEBUG] [Thread-24628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:40:15.771 [DEBUG] [Thread-24628] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:40:15.771 [DEBUG] [Thread-24628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:40:15.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:40:15.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:40:15.828 [DEBUG] [Thread-24628] [transport.py] [_log()] userauth is OK
2026-04-15T19:40:15.828 [DEBUG] [Thread-24628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:40:15.828 [DEBUG] [Thread-24628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:40:15.828 [DEBUG] [Thread-24628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:40:15.829 [DEBUG] [Thread-24628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:40:15.845 [INFO] [Thread-24628] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:40:15.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:40:15.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:40:16.313 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:16.663 [DEBUG] [Thread-24628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:40:16.663 [DEBUG] [Thread-24628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:40:16.710 [DEBUG] [Thread-24628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:40:16.710 [DEBUG] [Thread-24628] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:40:16.719 [DEBUG] [Thread-24628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:40:16.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:40:16.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')
2026-04-15T19:40:16.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
2026-04-15T19:40:16.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:40:16.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:40:16.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:40:16.751 [DEBUG] [Thread-24628] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:40:21.715 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:25.028 [DEBUG] [Thread-24630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:26.716 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:26.717 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:27.084 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:32.460 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:37.837 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:40.061 [DEBUG] [Thread-24631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:43.213 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:46.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:40:46.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:40:46.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
2026-04-15T19:40:48.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 40, 32), 4.27591, 74.4118, 0.0, 15.7925, 9.81571, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:40:48.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:40:32
2026-04-15T19:40:48.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:40:48.591 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:48.824 [DEBUG] [Thread-24632] [transport.py] [_log()] starting thread (client mode): 0xf13501c0
2026-04-15T19:40:48.824 [DEBUG] [Thread-24632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:40:48.843 [DEBUG] [Thread-24632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:40:48.843 [INFO] [Thread-24632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:40:48.847 [DEBUG] [Thread-24632] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:40:48.847 [DEBUG] [Thread-24632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:40:48.847 [DEBUG] [Thread-24632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:40:48.847 [DEBUG] [Thread-24632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:40:48.847 [DEBUG] [Thread-24632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:40:48.847 [DEBUG] [Thread-24632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:40:48.847 [DEBUG] [Thread-24632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:40:48.847 [DEBUG] [Thread-24632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:40:48.847 [DEBUG] [Thread-24632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:40:48.847 [DEBUG] [Thread-24632] [transport.py] [_log()] client lang: <none>
2026-04-15T19:40:48.847 [DEBUG] [Thread-24632] [transport.py] [_log()] server lang: <none>
2026-04-15T19:40:48.847 [DEBUG] [Thread-24632] [transport.py] [_log()] kex follows: False
2026-04-15T19:40:48.847 [DEBUG] [Thread-24632] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:40:48.847 [DEBUG] [Thread-24632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:40:48.848 [DEBUG] [Thread-24632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:40:48.848 [DEBUG] [Thread-24632] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:40:48.848 [DEBUG] [Thread-24632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:40:48.848 [DEBUG] [Thread-24632] [transport.py] [_log()] Compression: none
2026-04-15T19:40:48.848 [DEBUG] [Thread-24632] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:40:48.865 [DEBUG] [Thread-24632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:40:48.866 [DEBUG] [Thread-24632] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:40:48.866 [DEBUG] [Thread-24632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:40:48.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:40:48.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:40:48.908 [DEBUG] [Thread-24632] [transport.py] [_log()] userauth is OK
2026-04-15T19:40:48.908 [DEBUG] [Thread-24632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:40:48.908 [DEBUG] [Thread-24632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:40:48.908 [DEBUG] [Thread-24632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:40:48.908 [DEBUG] [Thread-24632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:40:48.927 [INFO] [Thread-24632] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:40:48.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:40:49.704 [DEBUG] [Thread-24632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:40:49.704 [DEBUG] [Thread-24632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:40:49.704 [DEBUG] [Thread-24632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:40:49.744 [DEBUG] [Thread-24632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:40:49.745 [DEBUG] [Thread-24632] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:40:49.747 [DEBUG] [Thread-24632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:40:49.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:40:49.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:40:49.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:40:49.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:40:49.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:40:49.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:40:49.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:40:49.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:40:49.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:40:49.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.736244 -999.00   +9.80  15.89     78   +6.30 1 1 1 1 1     0    0 3.29 -9.03 ZNESW 14.9 15.9 291.4 18.9 10.7 -24.0 10.5 -23.1 10.2 -21.2 10.5 -23.0
2026-04-15T19:40:49.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:40:49.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:40:49.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.736244
2026-04-15T19:40:49.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:40:49.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:40:49.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:40:49.766 [DEBUG] [Thread-24632] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:40:49.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:40:49.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:40:49.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:40:32', tmtdew=4.27591, humidity=74.4118, cloud=0.0, wind=15.7925, temperature=9.81571, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:40:32', seeing=1.08, atlas_timestamp='2026-04-15T17:40:11.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.09274999999999878, -0.027749999999999275, -0.08150000000000013, -0.06949999999999967, -0.02874999999999872, -0.028999999999999915, 0.09925000000000139, 0.12549999999999883, -0.009999999999999787, -0.1067499999999999, -0.008000000000000895, 0.009999999999999787, -0.007749999999999702, 0.15799999999999947, 0.5069999999999997, 0.4612499999999997, 0.029500000000000526, -0.03500000000000014, -0.02975000000000172, 0.011999999999998678, -0.018250000000001876, 0.20124999999999993, 0.10524999999999984, 0.21649999999999991, -0.04400000000000048, -0.04224999999999923, -0.036999999999999034, 0.09100000000000108, 0.03500000000000014, 0.13500000000000156, 0.0, 0.008749999999999147], zp_timestamp='2026-04-15T17:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:40:49.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:40:49.977 [DEBUG] [Thread-24635] [transport.py] [_log()] starting thread (client mode): 0xf1351660
2026-04-15T19:40:49.978 [DEBUG] [Thread-24635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:40:49.992 [DEBUG] [Thread-24635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:40:49.992 [INFO] [Thread-24635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:40:49.999 [DEBUG] [Thread-24635] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:40:49.999 [DEBUG] [Thread-24635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:40:49.999 [DEBUG] [Thread-24635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:40:49.999 [DEBUG] [Thread-24635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:40:49.999 [DEBUG] [Thread-24635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:40:49.999 [DEBUG] [Thread-24635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:40:50.000 [DEBUG] [Thread-24635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:40:50.000 [DEBUG] [Thread-24635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:40:50.000 [DEBUG] [Thread-24635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:40:50.000 [DEBUG] [Thread-24635] [transport.py] [_log()] client lang: <none>
2026-04-15T19:40:50.000 [DEBUG] [Thread-24635] [transport.py] [_log()] server lang: <none>
2026-04-15T19:40:50.000 [DEBUG] [Thread-24635] [transport.py] [_log()] kex follows: False
2026-04-15T19:40:50.000 [DEBUG] [Thread-24635] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:40:50.000 [DEBUG] [Thread-24635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:40:50.000 [DEBUG] [Thread-24635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:40:50.000 [DEBUG] [Thread-24635] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:40:50.000 [DEBUG] [Thread-24635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:40:50.000 [DEBUG] [Thread-24635] [transport.py] [_log()] Compression: none
2026-04-15T19:40:50.000 [DEBUG] [Thread-24635] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:40:50.060 [DEBUG] [Thread-24635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:40:50.060 [DEBUG] [Thread-24635] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:40:50.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:40:50.061 [DEBUG] [Thread-24635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:40:50.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:40:50.117 [DEBUG] [Thread-24635] [transport.py] [_log()] userauth is OK
2026-04-15T19:40:50.117 [DEBUG] [Thread-24635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:40:50.118 [DEBUG] [Thread-24635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:40:50.118 [DEBUG] [Thread-24635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:40:50.118 [DEBUG] [Thread-24635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:40:50.135 [INFO] [Thread-24635] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:40:50.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:40:50.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:40:50.993 [DEBUG] [Thread-24635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:40:50.993 [DEBUG] [Thread-24635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:40:51.041 [DEBUG] [Thread-24635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:40:51.041 [DEBUG] [Thread-24635] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:40:51.050 [DEBUG] [Thread-24635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:40:51.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:40:51.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')
2026-04-15T19:40:51.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
2026-04-15T19:40:51.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:40:51.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:40:51.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:40:51.082 [DEBUG] [Thread-24635] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:40:53.966 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:55.083 [DEBUG] [Thread-24637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:40:59.346 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:00.637 [DEBUG] [Thread-24638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:04.723 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:10.117 [DEBUG] [Thread-24639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:10.122 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:15.515 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:20.892 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:21.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:41:21.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:41:21.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
2026-04-15T19:41:22.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 41, 7), 4.27642, 74.4121, 0.0, 15.5455, 9.83246, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:41:22.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:41:07
2026-04-15T19:41:22.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:41:23.158 [DEBUG] [Thread-24640] [transport.py] [_log()] starting thread (client mode): 0xf1367400
2026-04-15T19:41:23.159 [DEBUG] [Thread-24640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:41:23.178 [DEBUG] [Thread-24640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:41:23.178 [INFO] [Thread-24640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] client lang: <none>
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] server lang: <none>
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] kex follows: False
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:41:23.182 [DEBUG] [Thread-24640] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:41:23.183 [DEBUG] [Thread-24640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:41:23.183 [DEBUG] [Thread-24640] [transport.py] [_log()] Compression: none
2026-04-15T19:41:23.183 [DEBUG] [Thread-24640] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:41:23.190 [DEBUG] [Thread-24640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:41:23.190 [DEBUG] [Thread-24640] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:41:23.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:41:23.191 [DEBUG] [Thread-24640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:41:23.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:41:23.191 [DEBUG] [Thread-24640] [transport.py] [_log()] userauth is OK
2026-04-15T19:41:23.191 [DEBUG] [Thread-24640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:41:23.192 [DEBUG] [Thread-24640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:41:23.192 [DEBUG] [Thread-24640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:41:23.192 [DEBUG] [Thread-24640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:41:23.204 [INFO] [Thread-24640] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:41:23.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:41:23.966 [DEBUG] [Thread-24640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:41:23.966 [DEBUG] [Thread-24640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:41:23.966 [DEBUG] [Thread-24640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:41:24.006 [DEBUG] [Thread-24640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:41:24.007 [DEBUG] [Thread-24640] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:41:24.009 [DEBUG] [Thread-24640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:41:24.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:41:24.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:41:24.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:41:24.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:41:24.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:41:24.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:41:24.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:41:24.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:41:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:41:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.736591 -999.00   +9.80  11.60     78   +6.30 1 1 1 1 1     0    0 3.34 -8.70 ZNESW 13.4 11.6 302.8 15.0 10.6 -24.1 10.5 -23.1 10.2 -21.3 10.5 -23.0
2026-04-15T19:41:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:41:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:41:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.736591
2026-04-15T19:41:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:41:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:41:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:41:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:41:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:41:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:41:07', tmtdew=4.27642, humidity=74.4121, cloud=0.0, wind=15.5455, temperature=9.83246, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:41:07', seeing=1.08, atlas_timestamp='2026-04-15T17:40:41.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.09274999999999878, -0.027749999999999275, -0.08150000000000013, -0.06949999999999967, -0.02874999999999872, -0.028999999999999915, 0.09925000000000139, 0.12549999999999883, -0.009999999999999787, -0.1067499999999999, -0.008000000000000895, 0.009999999999999787, -0.007749999999999702, 0.15799999999999947, 0.5069999999999997, 0.4612499999999997, 0.029500000000000526, -0.03500000000000014, -0.02975000000000172, 0.011999999999998678, -0.018250000000001876, 0.20124999999999993, 0.10524999999999984, 0.21649999999999991, -0.04400000000000048, -0.04224999999999923, -0.036999999999999034, 0.09100000000000108, 0.03500000000000014, 0.13500000000000156, 0.0, 0.008749999999999147], zp_timestamp='2026-04-15T17:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:41:24.029 [DEBUG] [Thread-24640] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:41:24.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:41:25.140 [DEBUG] [Thread-24643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:26.271 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:26.919 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:26.920 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:31.648 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:37.025 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:40.172 [DEBUG] [Thread-24644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:42.400 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:47.779 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:53.193 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:55.196 [DEBUG] [Thread-24645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:41:58.576 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:00.782 [DEBUG] [Thread-24646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:04.024 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:09.401 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:10.219 [DEBUG] [Thread-24647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:14.779 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:20.158 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:25.243 [DEBUG] [Thread-24648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:25.533 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:27.123 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:27.124 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:30.911 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:36.289 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:40.266 [DEBUG] [Thread-24649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:41.665 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:47.092 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:52.459 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:55.289 [DEBUG] [Thread-24650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:42:57.836 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:00.930 [DEBUG] [Thread-24651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:03.211 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:08.589 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:10.312 [DEBUG] [Thread-24652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:13.967 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:19.358 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:24.759 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:25.335 [DEBUG] [Thread-24653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:27.325 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:27.326 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:30.137 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:35.514 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:38.122 [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
2026-04-15T19:43:40.358 [DEBUG] [Thread-24654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:40.891 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:46.269 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:51.716 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:55.381 [DEBUG] [Thread-24655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:43:57.100 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:01.073 [DEBUG] [Thread-24656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:02.476 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:07.871 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:08.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:44:08.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:44:08.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
2026-04-15T19:44:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 43, 28), 4.30664, 74.5119, 0.0, 14.2931, 9.81613, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:44:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:43:28
2026-04-15T19:44:09.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:44:10.204 [DEBUG] [Thread-24657] [transport.py] [_log()] starting thread (client mode): 0xf13657e0
2026-04-15T19:44:10.204 [DEBUG] [Thread-24657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:44:10.220 [DEBUG] [Thread-24657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:44:10.220 [INFO] [Thread-24657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:44:10.221 [DEBUG] [Thread-24657] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:44:10.222 [DEBUG] [Thread-24657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:44:10.222 [DEBUG] [Thread-24657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:44:10.222 [DEBUG] [Thread-24657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:44:10.222 [DEBUG] [Thread-24657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:44:10.222 [DEBUG] [Thread-24657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:44:10.222 [DEBUG] [Thread-24657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:44:10.222 [DEBUG] [Thread-24657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:44:10.222 [DEBUG] [Thread-24657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:44:10.222 [DEBUG] [Thread-24657] [transport.py] [_log()] client lang: <none>
2026-04-15T19:44:10.222 [DEBUG] [Thread-24657] [transport.py] [_log()] server lang: <none>
2026-04-15T19:44:10.222 [DEBUG] [Thread-24657] [transport.py] [_log()] kex follows: False
2026-04-15T19:44:10.222 [DEBUG] [Thread-24657] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:44:10.222 [DEBUG] [Thread-24657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:44:10.223 [DEBUG] [Thread-24657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:44:10.223 [DEBUG] [Thread-24657] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:44:10.223 [DEBUG] [Thread-24657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:44:10.223 [DEBUG] [Thread-24657] [transport.py] [_log()] Compression: none
2026-04-15T19:44:10.223 [DEBUG] [Thread-24657] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:44:10.233 [DEBUG] [Thread-24657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:44:10.233 [DEBUG] [Thread-24657] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:44:10.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:44:10.233 [DEBUG] [Thread-24657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:44:10.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:44:10.234 [DEBUG] [Thread-24657] [transport.py] [_log()] userauth is OK
2026-04-15T19:44:10.234 [DEBUG] [Thread-24657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:44:10.234 [DEBUG] [Thread-24657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:44:10.234 [DEBUG] [Thread-24657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:44:10.234 [DEBUG] [Thread-24657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:44:10.264 [INFO] [Thread-24657] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:44:10.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:44:10.404 [DEBUG] [Thread-24659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:10.905 [DEBUG] [Thread-24657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:44:10.905 [DEBUG] [Thread-24657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:44:10.905 [DEBUG] [Thread-24657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:44:10.945 [DEBUG] [Thread-24657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:44:10.946 [DEBUG] [Thread-24657] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:44:10.948 [DEBUG] [Thread-24657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:44:10.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:44:10.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:44:10.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:44:10.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:44:10.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:44:10.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:44:10.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:44:10.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:44:10.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:44:10.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.738674 -999.00   +9.80  14.14     78   +6.20 1 1 1 1 1     0    0 3.31 -10.93 ZNESW 14.1 14.1 299.4 17.1 10.6 -24.3 10.5 -23.2 10.1 -21.5 10.4 -23.1
2026-04-15T19:44:10.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:44:10.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:44:10.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.738674
2026-04-15T19:44:10.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:44:10.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:44:10.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:44:10.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:44:10.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:44:10.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:43:28', tmtdew=4.30664, humidity=74.5119, cloud=0.0, wind=14.2931, temperature=9.81613, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:44:03', seeing=1.05, atlas_timestamp='2026-04-15T17:43:41.434', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.09274999999999878, -0.027749999999999275, -0.08150000000000013, -0.06949999999999967, -0.02874999999999872, -0.028999999999999915, 0.09925000000000139, 0.12549999999999883, -0.009999999999999787, -0.1067499999999999, -0.008000000000000895, 0.009999999999999787, -0.007749999999999702, 0.15799999999999947, 0.5069999999999997, 0.4612499999999997, 0.029500000000000526, -0.03500000000000014, -0.02975000000000172, 0.011999999999998678, -0.018250000000001876, 0.20124999999999993, 0.10524999999999984, 0.21649999999999991, -0.04400000000000048, -0.04224999999999923, -0.036999999999999034, 0.09100000000000108, 0.03500000000000014, 0.13500000000000156, 0.0, 0.008749999999999147], zp_timestamp='2026-04-15T17:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:44:10.966 [DEBUG] [Thread-24657] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:44:11.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:44:11.176 [DEBUG] [Thread-24661] [transport.py] [_log()] starting thread (client mode): 0xf13642b0
2026-04-15T19:44:11.176 [DEBUG] [Thread-24661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:44:11.190 [DEBUG] [Thread-24661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:44:11.191 [INFO] [Thread-24661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:44:11.198 [DEBUG] [Thread-24661] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:44:11.198 [DEBUG] [Thread-24661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:44:11.198 [DEBUG] [Thread-24661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:44:11.198 [DEBUG] [Thread-24661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:44:11.198 [DEBUG] [Thread-24661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:44:11.198 [DEBUG] [Thread-24661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:44:11.198 [DEBUG] [Thread-24661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:44:11.198 [DEBUG] [Thread-24661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:44:11.198 [DEBUG] [Thread-24661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:44:11.198 [DEBUG] [Thread-24661] [transport.py] [_log()] client lang: <none>
2026-04-15T19:44:11.198 [DEBUG] [Thread-24661] [transport.py] [_log()] server lang: <none>
2026-04-15T19:44:11.198 [DEBUG] [Thread-24661] [transport.py] [_log()] kex follows: False
2026-04-15T19:44:11.198 [DEBUG] [Thread-24661] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:44:11.198 [DEBUG] [Thread-24661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:44:11.199 [DEBUG] [Thread-24661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:44:11.199 [DEBUG] [Thread-24661] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:44:11.199 [DEBUG] [Thread-24661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:44:11.199 [DEBUG] [Thread-24661] [transport.py] [_log()] Compression: none
2026-04-15T19:44:11.199 [DEBUG] [Thread-24661] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:44:11.258 [DEBUG] [Thread-24661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:44:11.258 [DEBUG] [Thread-24661] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:44:11.259 [DEBUG] [Thread-24661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:44:11.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:44:11.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:44:11.315 [DEBUG] [Thread-24661] [transport.py] [_log()] userauth is OK
2026-04-15T19:44:11.315 [DEBUG] [Thread-24661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:44:11.315 [DEBUG] [Thread-24661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:44:11.315 [DEBUG] [Thread-24661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:44:11.315 [DEBUG] [Thread-24661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:44:11.332 [INFO] [Thread-24661] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:44:11.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:44:11.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:44:12.147 [DEBUG] [Thread-24661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:44:12.147 [DEBUG] [Thread-24661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:44:12.195 [DEBUG] [Thread-24661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:44:12.195 [DEBUG] [Thread-24661] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:44:12.203 [DEBUG] [Thread-24661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:44:12.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:44:12.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')
2026-04-15T19:44:12.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') -> 00000000
2026-04-15T19:44:12.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:44:12.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:44:12.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:44:12.234 [DEBUG] [Thread-24661] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:44:13.231 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:18.684 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:24.060 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:25.428 [DEBUG] [Thread-24663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:27.529 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:27.530 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:29.438 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:34.820 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:40.192 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:40.461 [DEBUG] [Thread-24664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:44:42.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:44:42.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
2026-04-15T19:44:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 44, 3), 4.30345, 74.5285, 0.0, 13.7462, 9.81613, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:44:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:44:03
2026-04-15T19:44:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:44:44.477 [DEBUG] [Thread-24665] [transport.py] [_log()] starting thread (client mode): 0xf13359c0
2026-04-15T19:44:44.478 [DEBUG] [Thread-24665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:44:44.497 [DEBUG] [Thread-24665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:44:44.497 [INFO] [Thread-24665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:44:44.500 [DEBUG] [Thread-24665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:44:44.500 [DEBUG] [Thread-24665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:44:44.500 [DEBUG] [Thread-24665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:44:44.500 [DEBUG] [Thread-24665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:44:44.500 [DEBUG] [Thread-24665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:44:44.500 [DEBUG] [Thread-24665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:44:44.500 [DEBUG] [Thread-24665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:44:44.500 [DEBUG] [Thread-24665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:44:44.500 [DEBUG] [Thread-24665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:44:44.500 [DEBUG] [Thread-24665] [transport.py] [_log()] client lang: <none>
2026-04-15T19:44:44.500 [DEBUG] [Thread-24665] [transport.py] [_log()] server lang: <none>
2026-04-15T19:44:44.500 [DEBUG] [Thread-24665] [transport.py] [_log()] kex follows: False
2026-04-15T19:44:44.500 [DEBUG] [Thread-24665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:44:44.500 [DEBUG] [Thread-24665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:44:44.501 [DEBUG] [Thread-24665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:44:44.501 [DEBUG] [Thread-24665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:44:44.501 [DEBUG] [Thread-24665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:44:44.501 [DEBUG] [Thread-24665] [transport.py] [_log()] Compression: none
2026-04-15T19:44:44.501 [DEBUG] [Thread-24665] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:44:44.516 [DEBUG] [Thread-24665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:44:44.517 [DEBUG] [Thread-24665] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:44:44.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:44:44.517 [DEBUG] [Thread-24665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:44:44.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:44:44.518 [DEBUG] [Thread-24665] [transport.py] [_log()] userauth is OK
2026-04-15T19:44:44.518 [DEBUG] [Thread-24665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:44:44.518 [DEBUG] [Thread-24665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:44:44.518 [DEBUG] [Thread-24665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:44:44.518 [DEBUG] [Thread-24665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:44:44.531 [INFO] [Thread-24665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:44:44.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:44:45.139 [DEBUG] [Thread-24665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:44:45.139 [DEBUG] [Thread-24665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:44:45.139 [DEBUG] [Thread-24665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:44:45.179 [DEBUG] [Thread-24665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:44:45.180 [DEBUG] [Thread-24665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:44:45.181 [DEBUG] [Thread-24665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:44:45.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:44:45.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:44:45.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:44:45.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:44:45.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:44:45.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:44:45.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:44:45.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:44:45.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:44:45.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.739022 -999.00   +9.80  14.05     78   +6.30 1 1 1 1 1     0    0 3.25 -11.59 ZNESW 10.2 14.1 288.8 15.7 10.6 -24.3 10.4 -23.3 10.2 -21.5 10.5 -23.1
2026-04-15T19:44:45.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:44:45.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:44:45.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.739022
2026-04-15T19:44:45.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:44:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:44:45.198 [DEBUG] [Thread-24665] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:44:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:44:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:44:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:44:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:44:03', tmtdew=4.30345, humidity=74.5285, cloud=0.0, wind=13.7462, temperature=9.81613, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:44:39', seeing=1.05, atlas_timestamp='2026-04-15T17:44:11.501', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.09274999999999878, -0.027749999999999275, -0.08150000000000013, -0.06949999999999967, -0.02874999999999872, -0.028999999999999915, 0.09925000000000139, 0.12549999999999883, -0.009999999999999787, -0.1067499999999999, -0.008000000000000895, 0.009999999999999787, -0.007749999999999702, 0.15799999999999947, 0.5069999999999997, 0.4612499999999997, 0.029500000000000526, -0.03500000000000014, -0.02975000000000172, 0.011999999999998678, -0.018250000000001876, 0.20124999999999993, 0.10524999999999984, 0.21649999999999991, -0.04400000000000048, -0.04224999999999923, -0.036999999999999034, 0.09100000000000108, 0.03500000000000014, 0.13500000000000156, 0.0, 0.008749999999999147], zp_timestamp='2026-04-15T17:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:44:45.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:44:45.412 [DEBUG] [Thread-24668] [transport.py] [_log()] starting thread (client mode): 0xf13525c0
2026-04-15T19:44:45.413 [DEBUG] [Thread-24668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:44:45.427 [DEBUG] [Thread-24668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:44:45.427 [INFO] [Thread-24668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:44:45.434 [DEBUG] [Thread-24668] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:44:45.434 [DEBUG] [Thread-24668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:44:45.434 [DEBUG] [Thread-24668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:44:45.434 [DEBUG] [Thread-24668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:44:45.434 [DEBUG] [Thread-24668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:44:45.434 [DEBUG] [Thread-24668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:44:45.434 [DEBUG] [Thread-24668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:44:45.434 [DEBUG] [Thread-24668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:44:45.435 [DEBUG] [Thread-24668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:44:45.435 [DEBUG] [Thread-24668] [transport.py] [_log()] client lang: <none>
2026-04-15T19:44:45.435 [DEBUG] [Thread-24668] [transport.py] [_log()] server lang: <none>
2026-04-15T19:44:45.435 [DEBUG] [Thread-24668] [transport.py] [_log()] kex follows: False
2026-04-15T19:44:45.435 [DEBUG] [Thread-24668] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:44:45.435 [DEBUG] [Thread-24668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:44:45.435 [DEBUG] [Thread-24668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:44:45.435 [DEBUG] [Thread-24668] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:44:45.435 [DEBUG] [Thread-24668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:44:45.435 [DEBUG] [Thread-24668] [transport.py] [_log()] Compression: none
2026-04-15T19:44:45.435 [DEBUG] [Thread-24668] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:44:45.491 [DEBUG] [Thread-24668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:44:45.492 [DEBUG] [Thread-24668] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:44:45.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:44:45.492 [DEBUG] [Thread-24668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:44:45.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:44:45.549 [DEBUG] [Thread-24668] [transport.py] [_log()] userauth is OK
2026-04-15T19:44:45.549 [DEBUG] [Thread-24668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:44:45.549 [DEBUG] [Thread-24668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:44:45.549 [DEBUG] [Thread-24668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:44:45.549 [DEBUG] [Thread-24668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:44:45.566 [INFO] [Thread-24668] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:44:45.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:44:45.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:44:45.570 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:46.427 [DEBUG] [Thread-24668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:44:46.427 [DEBUG] [Thread-24668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:44:46.476 [DEBUG] [Thread-24668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:44:46.476 [DEBUG] [Thread-24668] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:44:46.485 [DEBUG] [Thread-24668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:44:46.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19: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')
2026-04-15T19: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
2026-04-15T19:44:46.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:44:46.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:44:46.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:44:46.519 [DEBUG] [Thread-24668] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:44:50.947 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:55.484 [DEBUG] [Thread-24670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:44:56.324 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:01.217 [DEBUG] [Thread-24671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:01.719 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:07.156 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:10.515 [DEBUG] [Thread-24672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:12.531 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:16.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:45:16.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19: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
2026-04-15T19:45:17.909 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:17.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 44, 39), 4.20152, 75.0571, 0.0, 12.7397, 9.8666, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:45:17.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:44:39
2026-04-15T19:45:18.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:45:18.794 [DEBUG] [Thread-24673] [transport.py] [_log()] starting thread (client mode): 0xee905fc0
2026-04-15T19:45:18.794 [DEBUG] [Thread-24673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:45:18.814 [DEBUG] [Thread-24673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:45:18.814 [INFO] [Thread-24673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:45:18.817 [DEBUG] [Thread-24673] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:45:18.817 [DEBUG] [Thread-24673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:45:18.817 [DEBUG] [Thread-24673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:45:18.817 [DEBUG] [Thread-24673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:45:18.817 [DEBUG] [Thread-24673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:45:18.817 [DEBUG] [Thread-24673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:45:18.817 [DEBUG] [Thread-24673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:45:18.817 [DEBUG] [Thread-24673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:45:18.817 [DEBUG] [Thread-24673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:45:18.817 [DEBUG] [Thread-24673] [transport.py] [_log()] client lang: <none>
2026-04-15T19:45:18.817 [DEBUG] [Thread-24673] [transport.py] [_log()] server lang: <none>
2026-04-15T19:45:18.817 [DEBUG] [Thread-24673] [transport.py] [_log()] kex follows: False
2026-04-15T19:45:18.817 [DEBUG] [Thread-24673] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:45:18.818 [DEBUG] [Thread-24673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:45:18.818 [DEBUG] [Thread-24673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:45:18.818 [DEBUG] [Thread-24673] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:45:18.818 [DEBUG] [Thread-24673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:45:18.818 [DEBUG] [Thread-24673] [transport.py] [_log()] Compression: none
2026-04-15T19:45:18.818 [DEBUG] [Thread-24673] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:45:18.834 [DEBUG] [Thread-24673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:45:18.834 [DEBUG] [Thread-24673] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:45:18.834 [DEBUG] [Thread-24673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:45:18.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:45:18.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:45:18.835 [DEBUG] [Thread-24673] [transport.py] [_log()] userauth is OK
2026-04-15T19:45:18.835 [DEBUG] [Thread-24673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:45:18.835 [DEBUG] [Thread-24673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:45:18.835 [DEBUG] [Thread-24673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:45:18.835 [DEBUG] [Thread-24673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:45:18.854 [INFO] [Thread-24673] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:45:18.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:45:19.507 [DEBUG] [Thread-24673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:45:19.507 [DEBUG] [Thread-24673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:45:19.507 [DEBUG] [Thread-24673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:45:19.548 [DEBUG] [Thread-24673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:45:19.548 [DEBUG] [Thread-24673] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:45:19.550 [DEBUG] [Thread-24673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:45:19.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:45:19.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:45:19.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:45:19.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:45:19.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:45:19.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:45:19.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:45:19.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:45:19.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:45:19.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.739369 -999.00   +9.80  12.25     78   +6.30 1 1 1 1 1     0    0 3.20 -13.23 ZNESW 12.7 12.2 295.0 14.7 10.6 -24.3 10.4 -23.3 10.2 -21.6 10.5 -23.3
2026-04-15T19:45:19.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:45:19.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:45:19.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.739369
2026-04-15T19:45:19.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:45:19.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:45:19.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:45:19.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:45:19.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:45:19.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:44:39', tmtdew=4.20152, humidity=75.0571, cloud=0.0, wind=12.7397, temperature=9.8666, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:45:15', seeing=1.08, atlas_timestamp='2026-04-15T17:44:41.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.09274999999999878, -0.027749999999999275, -0.08150000000000013, -0.06949999999999967, -0.02874999999999872, -0.028999999999999915, 0.09925000000000139, 0.12549999999999883, -0.009999999999999787, -0.1067499999999999, -0.008000000000000895, 0.009999999999999787, -0.007749999999999702, 0.15799999999999947, 0.5069999999999997, 0.4612499999999997, 0.029500000000000526, -0.03500000000000014, -0.02975000000000172, 0.011999999999998678, -0.018250000000001876, 0.20124999999999993, 0.10524999999999984, 0.21649999999999991, -0.04400000000000048, -0.04224999999999923, -0.036999999999999034, 0.09100000000000108, 0.03500000000000014, 0.13500000000000156, 0.0, 0.008749999999999147], zp_timestamp='2026-04-15T17:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:45:19.568 [DEBUG] [Thread-24673] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:45:19.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:45:19.789 [DEBUG] [Thread-24676] [transport.py] [_log()] starting thread (client mode): 0xf13ff4c0
2026-04-15T19:45:19.790 [DEBUG] [Thread-24676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:45:19.804 [DEBUG] [Thread-24676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:45:19.804 [INFO] [Thread-24676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] client lang: <none>
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] server lang: <none>
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] kex follows: False
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:45:19.812 [DEBUG] [Thread-24676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:45:19.813 [DEBUG] [Thread-24676] [transport.py] [_log()] Compression: none
2026-04-15T19:45:19.813 [DEBUG] [Thread-24676] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:45:19.874 [DEBUG] [Thread-24676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:45:19.874 [DEBUG] [Thread-24676] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:45:19.875 [DEBUG] [Thread-24676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:45:19.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:45:19.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:45:19.931 [DEBUG] [Thread-24676] [transport.py] [_log()] userauth is OK
2026-04-15T19:45:19.931 [DEBUG] [Thread-24676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:45:19.931 [DEBUG] [Thread-24676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:45:19.931 [DEBUG] [Thread-24676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:45:19.931 [DEBUG] [Thread-24676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:45:19.948 [INFO] [Thread-24676] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:45:19.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:45:19.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:45:20.770 [DEBUG] [Thread-24676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:45:20.770 [DEBUG] [Thread-24676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:45:20.817 [DEBUG] [Thread-24676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:45:20.817 [DEBUG] [Thread-24676] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:45:20.826 [DEBUG] [Thread-24676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:45:20.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:45:20.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')
2026-04-15T19:45:20.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
2026-04-15T19:45:20.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:45:20.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:45:20.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:45:20.858 [DEBUG] [Thread-24676] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:45:23.287 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:25.538 [DEBUG] [Thread-24678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:27.730 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:27.731 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:28.664 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:34.041 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:39.419 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:40.570 [DEBUG] [Thread-24679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:44.796 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:50.172 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:50.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:45:50.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:45:50.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
2026-04-15T19:45:52.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 45, 14), 4.28165, 74.6446, 0.0, 12.3696, 9.7828, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:45:52.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:45:14
2026-04-15T19:45:52.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:45:53.006 [DEBUG] [Thread-24680] [transport.py] [_log()] starting thread (client mode): 0xee9055a0
2026-04-15T19:45:53.006 [DEBUG] [Thread-24680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:45:53.026 [DEBUG] [Thread-24680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:45:53.026 [INFO] [Thread-24680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:45:53.029 [DEBUG] [Thread-24680] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:45:53.029 [DEBUG] [Thread-24680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:45:53.029 [DEBUG] [Thread-24680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:45:53.029 [DEBUG] [Thread-24680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:45:53.029 [DEBUG] [Thread-24680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:45:53.029 [DEBUG] [Thread-24680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:45:53.029 [DEBUG] [Thread-24680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:45:53.029 [DEBUG] [Thread-24680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:45:53.029 [DEBUG] [Thread-24680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:45:53.029 [DEBUG] [Thread-24680] [transport.py] [_log()] client lang: <none>
2026-04-15T19:45:53.029 [DEBUG] [Thread-24680] [transport.py] [_log()] server lang: <none>
2026-04-15T19:45:53.030 [DEBUG] [Thread-24680] [transport.py] [_log()] kex follows: False
2026-04-15T19:45:53.030 [DEBUG] [Thread-24680] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:45:53.030 [DEBUG] [Thread-24680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:45:53.030 [DEBUG] [Thread-24680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:45:53.030 [DEBUG] [Thread-24680] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:45:53.030 [DEBUG] [Thread-24680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:45:53.030 [DEBUG] [Thread-24680] [transport.py] [_log()] Compression: none
2026-04-15T19:45:53.030 [DEBUG] [Thread-24680] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:45:53.044 [DEBUG] [Thread-24680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:45:53.044 [DEBUG] [Thread-24680] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:45:53.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:45:53.045 [DEBUG] [Thread-24680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:45:53.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:45:53.046 [DEBUG] [Thread-24680] [transport.py] [_log()] userauth is OK
2026-04-15T19:45:53.046 [DEBUG] [Thread-24680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:45:53.046 [DEBUG] [Thread-24680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:45:53.046 [DEBUG] [Thread-24680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:45:53.046 [DEBUG] [Thread-24680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:45:53.059 [INFO] [Thread-24680] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:45:53.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:45:53.705 [DEBUG] [Thread-24680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:45:53.705 [DEBUG] [Thread-24680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:45:53.705 [DEBUG] [Thread-24680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:45:53.745 [DEBUG] [Thread-24680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:45:53.746 [DEBUG] [Thread-24680] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:45:53.748 [DEBUG] [Thread-24680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:45:53.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:45:53.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:45:53.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:45:53.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:45:53.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:45:53.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:45:53.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:45:53.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:45:53.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:45:53.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.740063 -999.00   +9.80  10.80     79   +6.30 1 1 1 1 1     0    0 3.15 -12.81 ZNESW 10.2 10.8 306.0 14.3 10.6 -24.4 10.4 -23.4 10.1 -21.4 10.4 -23.4
2026-04-15T19:45:53.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:45:53.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:45:53.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.740063
2026-04-15T19:45:53.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:45:53.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:45:53.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:45:53.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:45:53.760 [DEBUG] [Thread-24680] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:45:53.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:45:53.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:45:14', tmtdew=4.28165, humidity=74.6446, cloud=0.0, wind=12.3696, temperature=9.7828, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:45:50', seeing=1.15, atlas_timestamp='2026-04-15T17:45:41.443', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.09274999999999878, -0.027749999999999275, -0.08150000000000013, -0.06949999999999967, -0.02874999999999872, -0.028999999999999915, 0.09925000000000139, 0.12549999999999883, -0.009999999999999787, -0.1067499999999999, -0.008000000000000895, 0.009999999999999787, -0.007749999999999702, 0.15799999999999947, 0.5069999999999997, 0.4612499999999997, 0.029500000000000526, -0.03500000000000014, -0.02975000000000172, 0.011999999999998678, -0.018250000000001876, 0.20124999999999993, 0.10524999999999984, 0.21649999999999991, -0.04400000000000048, -0.04224999999999923, -0.036999999999999034, 0.09100000000000108, 0.03500000000000014, 0.13500000000000156, 0.0, 0.008749999999999147], zp_timestamp='2026-04-15T17:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:45:53.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:45:53.969 [DEBUG] [Thread-24683] [transport.py] [_log()] starting thread (client mode): 0xee9043a0
2026-04-15T19:45:53.970 [DEBUG] [Thread-24683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:45:53.984 [DEBUG] [Thread-24683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:45:53.984 [INFO] [Thread-24683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:45:53.991 [DEBUG] [Thread-24683] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:45:53.991 [DEBUG] [Thread-24683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:45:53.991 [DEBUG] [Thread-24683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:45:53.991 [DEBUG] [Thread-24683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:45:53.991 [DEBUG] [Thread-24683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:45:53.991 [DEBUG] [Thread-24683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:45:53.991 [DEBUG] [Thread-24683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:45:53.991 [DEBUG] [Thread-24683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:45:53.991 [DEBUG] [Thread-24683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:45:53.991 [DEBUG] [Thread-24683] [transport.py] [_log()] client lang: <none>
2026-04-15T19:45:53.991 [DEBUG] [Thread-24683] [transport.py] [_log()] server lang: <none>
2026-04-15T19:45:53.992 [DEBUG] [Thread-24683] [transport.py] [_log()] kex follows: False
2026-04-15T19:45:53.992 [DEBUG] [Thread-24683] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:45:53.992 [DEBUG] [Thread-24683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:45:53.992 [DEBUG] [Thread-24683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:45:53.992 [DEBUG] [Thread-24683] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:45:53.992 [DEBUG] [Thread-24683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:45:53.992 [DEBUG] [Thread-24683] [transport.py] [_log()] Compression: none
2026-04-15T19:45:53.992 [DEBUG] [Thread-24683] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:45:54.046 [DEBUG] [Thread-24683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:45:54.046 [DEBUG] [Thread-24683] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:45:54.046 [DEBUG] [Thread-24683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:45:54.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:45:54.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:45:54.103 [DEBUG] [Thread-24683] [transport.py] [_log()] userauth is OK
2026-04-15T19:45:54.103 [DEBUG] [Thread-24683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:45:54.103 [DEBUG] [Thread-24683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:45:54.103 [DEBUG] [Thread-24683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:45:54.103 [DEBUG] [Thread-24683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:45:54.120 [INFO] [Thread-24683] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:45:54.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:45:54.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:45:54.934 [DEBUG] [Thread-24683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:45:54.935 [DEBUG] [Thread-24683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:45:54.983 [DEBUG] [Thread-24683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:45:54.983 [DEBUG] [Thread-24683] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:45:54.991 [DEBUG] [Thread-24683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:45:54.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:45:54.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')
2026-04-15T19:45:55.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') -> 00000000
2026-04-15T19:45:55.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:45:55.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:45:55.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:45:55.024 [DEBUG] [Thread-24683] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:45:55.595 [DEBUG] [Thread-24685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:45:55.608 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:01.003 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:01.362 [DEBUG] [Thread-24686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:06.381 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:10.629 [DEBUG] [Thread-24687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:11.757 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:17.133 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:22.510 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:25.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:46:25.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:46:25.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
2026-04-15T19:46:25.652 [DEBUG] [Thread-24688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:26.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 45, 50), 4.15162, 75.3226, 0.0, 14.0098, 9.89991, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:46:26.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:45:50
2026-04-15T19:46:26.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:46:27.227 [DEBUG] [Thread-24689] [transport.py] [_log()] starting thread (client mode): 0xf1366140
2026-04-15T19:46:27.227 [DEBUG] [Thread-24689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:46:27.246 [DEBUG] [Thread-24689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:46:27.246 [INFO] [Thread-24689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:46:27.250 [DEBUG] [Thread-24689] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:46:27.250 [DEBUG] [Thread-24689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:46:27.250 [DEBUG] [Thread-24689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:46:27.250 [DEBUG] [Thread-24689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:46:27.250 [DEBUG] [Thread-24689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:46:27.250 [DEBUG] [Thread-24689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:46:27.250 [DEBUG] [Thread-24689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:46:27.250 [DEBUG] [Thread-24689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:46:27.250 [DEBUG] [Thread-24689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:46:27.250 [DEBUG] [Thread-24689] [transport.py] [_log()] client lang: <none>
2026-04-15T19:46:27.250 [DEBUG] [Thread-24689] [transport.py] [_log()] server lang: <none>
2026-04-15T19:46:27.250 [DEBUG] [Thread-24689] [transport.py] [_log()] kex follows: False
2026-04-15T19:46:27.250 [DEBUG] [Thread-24689] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:46:27.250 [DEBUG] [Thread-24689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:46:27.250 [DEBUG] [Thread-24689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:46:27.251 [DEBUG] [Thread-24689] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:46:27.251 [DEBUG] [Thread-24689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:46:27.251 [DEBUG] [Thread-24689] [transport.py] [_log()] Compression: none
2026-04-15T19:46:27.251 [DEBUG] [Thread-24689] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:46:27.268 [DEBUG] [Thread-24689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:46:27.268 [DEBUG] [Thread-24689] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:46:27.268 [DEBUG] [Thread-24689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:46:27.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:46:27.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:46:27.269 [DEBUG] [Thread-24689] [transport.py] [_log()] userauth is OK
2026-04-15T19:46:27.269 [DEBUG] [Thread-24689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:46:27.270 [DEBUG] [Thread-24689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:46:27.270 [DEBUG] [Thread-24689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:46:27.270 [DEBUG] [Thread-24689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:46:27.300 [INFO] [Thread-24689] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:46:27.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:46:27.876 [DEBUG] [Thread-24689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:46:27.876 [DEBUG] [Thread-24689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:46:27.876 [DEBUG] [Thread-24689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:46:27.889 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:27.916 [DEBUG] [Thread-24689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:46:27.916 [DEBUG] [Thread-24689] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:46:27.919 [DEBUG] [Thread-24689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:46:27.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:46:27.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:46:27.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:46:27.934 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:27.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:46:27.935 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:27.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:46:27.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:46:27.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:46:27.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:46:27.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:46:27.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.740410 -999.00   +9.70  12.25     78   +6.20 1 1 1 1 1     0    0 3.21 -14.20 ZNESW 10.8 12.2 283.0 14.9 10.6 -24.5 10.4 -23.4 10.1 -21.5 10.4 -23.4
2026-04-15T19:46:27.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:46:27.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:46:27.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.740410
2026-04-15T19:46:27.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:46:27.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:46:27.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:46:27.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:46:27.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:46:27.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:45:50', tmtdew=4.15162, humidity=75.3226, cloud=0.0, wind=14.0098, temperature=9.89991, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:45:50', seeing=1.15, atlas_timestamp='2026-04-15T17:46:11.424', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0832499999999996, -0.09274999999999878, -0.027749999999999275, -0.08150000000000013, -0.06949999999999967, -0.02874999999999872, -0.028999999999999915, 0.09925000000000139, 0.12549999999999883, -0.009999999999999787, -0.1067499999999999, -0.008000000000000895, 0.009999999999999787, -0.007749999999999702, 0.15799999999999947, 0.5069999999999997, 0.4612499999999997, 0.029500000000000526, -0.03500000000000014, -0.02975000000000172, 0.011999999999998678, -0.018250000000001876, 0.20124999999999993, 0.10524999999999984, 0.21649999999999991, -0.04400000000000048, -0.04224999999999923, -0.036999999999999034, 0.09100000000000108, 0.03500000000000014, 0.13500000000000156, 0.0, 0.008749999999999147], zp_timestamp='2026-04-15T17:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:46:27.939 [DEBUG] [Thread-24689] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:46:28.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:46:28.152 [DEBUG] [Thread-24692] [transport.py] [_log()] starting thread (client mode): 0xf1353820
2026-04-15T19:46:28.152 [DEBUG] [Thread-24692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:46:28.166 [DEBUG] [Thread-24692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:46:28.166 [INFO] [Thread-24692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:46:28.174 [DEBUG] [Thread-24692] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:46:28.174 [DEBUG] [Thread-24692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:46:28.174 [DEBUG] [Thread-24692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:46:28.174 [DEBUG] [Thread-24692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:46:28.174 [DEBUG] [Thread-24692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:46:28.174 [DEBUG] [Thread-24692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:46:28.174 [DEBUG] [Thread-24692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:46:28.174 [DEBUG] [Thread-24692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:46:28.174 [DEBUG] [Thread-24692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:46:28.174 [DEBUG] [Thread-24692] [transport.py] [_log()] client lang: <none>
2026-04-15T19:46:28.174 [DEBUG] [Thread-24692] [transport.py] [_log()] server lang: <none>
2026-04-15T19:46:28.174 [DEBUG] [Thread-24692] [transport.py] [_log()] kex follows: False
2026-04-15T19:46:28.174 [DEBUG] [Thread-24692] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:46:28.175 [DEBUG] [Thread-24692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:46:28.175 [DEBUG] [Thread-24692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:46:28.175 [DEBUG] [Thread-24692] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:46:28.175 [DEBUG] [Thread-24692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:46:28.175 [DEBUG] [Thread-24692] [transport.py] [_log()] Compression: none
2026-04-15T19:46:28.175 [DEBUG] [Thread-24692] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:46:28.235 [DEBUG] [Thread-24692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:46:28.236 [DEBUG] [Thread-24692] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:46:28.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:46:28.236 [DEBUG] [Thread-24692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:46:28.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:46:28.292 [DEBUG] [Thread-24692] [transport.py] [_log()] userauth is OK
2026-04-15T19:46:28.292 [DEBUG] [Thread-24692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:46:28.292 [DEBUG] [Thread-24692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:46:28.292 [DEBUG] [Thread-24692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:46:28.292 [DEBUG] [Thread-24692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:46:28.310 [INFO] [Thread-24692] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:46:28.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:46:28.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:46:29.223 [DEBUG] [Thread-24692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:46:29.224 [DEBUG] [Thread-24692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:46:29.271 [DEBUG] [Thread-24692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:46:29.271 [DEBUG] [Thread-24692] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:46:29.279 [DEBUG] [Thread-24692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:46:29.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:46:29.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')
2026-04-15T19:46:29.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
2026-04-15T19:46:29.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:46:29.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:46:29.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:46:29.311 [DEBUG] [Thread-24692] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:46:33.266 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:38.644 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:40.674 [DEBUG] [Thread-24694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:44.021 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:49.398 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:54.806 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:55.705 [DEBUG] [Thread-24695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:46:59.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:46:59.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:46:59.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
2026-04-15T19:47:00.192 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:00.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 46, 26), 4.20728, 74.7608, 0.0, 14.3989, 9.71653, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:47:00.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:46:26
2026-04-15T19:47:00.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:47:01.391 [DEBUG] [Thread-24696] [transport.py] [_log()] starting thread (client mode): 0xf13672b0
2026-04-15T19:47:01.391 [DEBUG] [Thread-24696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:47:01.411 [DEBUG] [Thread-24696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:47:01.411 [INFO] [Thread-24696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:47:01.413 [DEBUG] [Thread-24696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:47:01.413 [DEBUG] [Thread-24696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:47:01.413 [DEBUG] [Thread-24696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:47:01.413 [DEBUG] [Thread-24696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:47:01.413 [DEBUG] [Thread-24696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:47:01.413 [DEBUG] [Thread-24696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:47:01.413 [DEBUG] [Thread-24696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:47:01.413 [DEBUG] [Thread-24696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:47:01.413 [DEBUG] [Thread-24696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:47:01.413 [DEBUG] [Thread-24696] [transport.py] [_log()] client lang: <none>
2026-04-15T19:47:01.413 [DEBUG] [Thread-24696] [transport.py] [_log()] server lang: <none>
2026-04-15T19:47:01.413 [DEBUG] [Thread-24696] [transport.py] [_log()] kex follows: False
2026-04-15T19:47:01.413 [DEBUG] [Thread-24696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:47:01.413 [DEBUG] [Thread-24696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:47:01.414 [DEBUG] [Thread-24696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:47:01.414 [DEBUG] [Thread-24696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:47:01.414 [DEBUG] [Thread-24696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:47:01.414 [DEBUG] [Thread-24696] [transport.py] [_log()] Compression: none
2026-04-15T19:47:01.414 [DEBUG] [Thread-24696] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:47:01.422 [DEBUG] [Thread-24696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:47:01.422 [DEBUG] [Thread-24696] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:47:01.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:47:01.422 [DEBUG] [Thread-24696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:47:01.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:47:01.423 [DEBUG] [Thread-24696] [transport.py] [_log()] userauth is OK
2026-04-15T19:47:01.423 [DEBUG] [Thread-24696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:47:01.423 [DEBUG] [Thread-24696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:47:01.423 [DEBUG] [Thread-24696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:47:01.423 [DEBUG] [Thread-24696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:47:01.436 [INFO] [Thread-24696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:47:01.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:47:01.506 [DEBUG] [Thread-24698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:02.059 [DEBUG] [Thread-24696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:47:02.059 [DEBUG] [Thread-24696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:47:02.060 [DEBUG] [Thread-24696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:47:02.100 [DEBUG] [Thread-24696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:47:02.101 [DEBUG] [Thread-24696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:47:02.103 [DEBUG] [Thread-24696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:47:02.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:47:02.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:47:02.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:47:02.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:47:02.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:47:02.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:47:02.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:47:02.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:47:02.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:47:02.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.740758 -999.00   +9.70  10.77     78   +6.30 1 1 1 1 1     0    0 3.19 -13.24 ZNESW 11.7 10.8 300.8 13.8 10.6 -24.5 10.4 -23.5 10.1 -21.5 10.4 -23.4
2026-04-15T19:47:02.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:47:02.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:47:02.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.740758
2026-04-15T19:47:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:47:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:47:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:47:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:47:02.122 [DEBUG] [Thread-24696] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:47:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:47:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:46:26', tmtdew=4.20728, humidity=74.7608, cloud=0.0, wind=14.3989, temperature=9.71653, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:46:26', seeing=1.04, atlas_timestamp='2026-04-15T17:46:41.491', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08725000000000094, -0.0727499999999992, -0.05874999999999986, -0.08050000000000068, -0.0495000000000001, -0.022749999999998494, -0.07750000000000057, -0.008749999999999147, 0.0, -0.026999999999999247, -0.08024999999999949, -0.032999999999999474, 0.026999999999999247, -0.024250000000000327, 0.0259999999999998, 0.13149999999999906, 0.08275000000000077, 0.016000000000000014, -0.05450000000000088, 0.01124999999999865, 0.0009999999999994458, -0.02525000000000155, 0.03775000000000084, 0.29075000000000095, 0.40300000000000047, 0.0235000000000003, -0.025249999999999773, -0.06949999999999967, 0.0129999999999999, -0.008999999999998565, 0.027499999999999858, 0.04200000000000159, 0.15274999999999928], zp_timestamp='2026-04-15T17:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:47:02.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:47:02.334 [DEBUG] [Thread-24700] [transport.py] [_log()] starting thread (client mode): 0xf13cace0
2026-04-15T19:47:02.334 [DEBUG] [Thread-24700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:47:02.348 [DEBUG] [Thread-24700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:47:02.348 [INFO] [Thread-24700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:47:02.355 [DEBUG] [Thread-24700] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:47:02.355 [DEBUG] [Thread-24700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:47:02.355 [DEBUG] [Thread-24700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:47:02.355 [DEBUG] [Thread-24700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:47:02.356 [DEBUG] [Thread-24700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:47:02.356 [DEBUG] [Thread-24700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:47:02.356 [DEBUG] [Thread-24700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:47:02.356 [DEBUG] [Thread-24700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:47:02.356 [DEBUG] [Thread-24700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:47:02.356 [DEBUG] [Thread-24700] [transport.py] [_log()] client lang: <none>
2026-04-15T19:47:02.356 [DEBUG] [Thread-24700] [transport.py] [_log()] server lang: <none>
2026-04-15T19:47:02.356 [DEBUG] [Thread-24700] [transport.py] [_log()] kex follows: False
2026-04-15T19:47:02.356 [DEBUG] [Thread-24700] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:47:02.356 [DEBUG] [Thread-24700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:47:02.356 [DEBUG] [Thread-24700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:47:02.356 [DEBUG] [Thread-24700] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:47:02.356 [DEBUG] [Thread-24700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:47:02.356 [DEBUG] [Thread-24700] [transport.py] [_log()] Compression: none
2026-04-15T19:47:02.356 [DEBUG] [Thread-24700] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:47:02.412 [DEBUG] [Thread-24700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:47:02.413 [DEBUG] [Thread-24700] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:47:02.413 [DEBUG] [Thread-24700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:47:02.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:47:02.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:47:02.469 [DEBUG] [Thread-24700] [transport.py] [_log()] userauth is OK
2026-04-15T19:47:02.469 [DEBUG] [Thread-24700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:47:02.469 [DEBUG] [Thread-24700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:47:02.470 [DEBUG] [Thread-24700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:47:02.470 [DEBUG] [Thread-24700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:47:02.487 [INFO] [Thread-24700] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:47:02.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:47:02.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:47:03.321 [DEBUG] [Thread-24700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:47:03.321 [DEBUG] [Thread-24700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:47:03.368 [DEBUG] [Thread-24700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:47:03.369 [DEBUG] [Thread-24700] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:47:03.377 [DEBUG] [Thread-24700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:47:03.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:47:03.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')
2026-04-15T19:47:03.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
2026-04-15T19:47:03.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:47:03.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:47:03.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:47:03.411 [DEBUG] [Thread-24700] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:47:05.568 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:10.728 [DEBUG] [Thread-24702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:10.945 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:16.322 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:21.699 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:25.761 [DEBUG] [Thread-24703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:27.115 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:28.136 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:28.137 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:32.492 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:33.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:47:33.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:47:33.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
2026-04-15T19:47:34.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 47, 1), 4.20992, 74.7443, 0.0, 14.2225, 9.70001, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:47:34.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:47:01
2026-04-15T19:47:35.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:47:35.528 [DEBUG] [Thread-24704] [transport.py] [_log()] starting thread (client mode): 0xf1367f70
2026-04-15T19:47:35.529 [DEBUG] [Thread-24704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:47:35.548 [DEBUG] [Thread-24704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:47:35.548 [INFO] [Thread-24704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:47:35.551 [DEBUG] [Thread-24704] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:47:35.551 [DEBUG] [Thread-24704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:47:35.551 [DEBUG] [Thread-24704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:47:35.551 [DEBUG] [Thread-24704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:47:35.551 [DEBUG] [Thread-24704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:47:35.551 [DEBUG] [Thread-24704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:47:35.551 [DEBUG] [Thread-24704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:47:35.552 [DEBUG] [Thread-24704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:47:35.552 [DEBUG] [Thread-24704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:47:35.552 [DEBUG] [Thread-24704] [transport.py] [_log()] client lang: <none>
2026-04-15T19:47:35.552 [DEBUG] [Thread-24704] [transport.py] [_log()] server lang: <none>
2026-04-15T19:47:35.552 [DEBUG] [Thread-24704] [transport.py] [_log()] kex follows: False
2026-04-15T19:47:35.552 [DEBUG] [Thread-24704] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:47:35.552 [DEBUG] [Thread-24704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:47:35.552 [DEBUG] [Thread-24704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:47:35.552 [DEBUG] [Thread-24704] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:47:35.552 [DEBUG] [Thread-24704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:47:35.552 [DEBUG] [Thread-24704] [transport.py] [_log()] Compression: none
2026-04-15T19:47:35.553 [DEBUG] [Thread-24704] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:47:35.569 [DEBUG] [Thread-24704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:47:35.570 [DEBUG] [Thread-24704] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:47:35.570 [DEBUG] [Thread-24704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:47:35.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:47:35.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:47:35.571 [DEBUG] [Thread-24704] [transport.py] [_log()] userauth is OK
2026-04-15T19:47:35.571 [DEBUG] [Thread-24704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:47:35.571 [DEBUG] [Thread-24704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:47:35.571 [DEBUG] [Thread-24704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:47:35.571 [DEBUG] [Thread-24704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:47:35.588 [INFO] [Thread-24704] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:47:35.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:47:36.187 [DEBUG] [Thread-24704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:47:36.188 [DEBUG] [Thread-24704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:47:36.188 [DEBUG] [Thread-24704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:47:36.229 [DEBUG] [Thread-24704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:47:36.229 [DEBUG] [Thread-24704] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:47:36.231 [DEBUG] [Thread-24704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:47:36.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:47:36.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:47:36.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:47:36.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:47:36.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:47:36.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:47:36.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:47:36.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:47:36.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:47:36.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.741105 -999.00   +9.70  13.20     78   +6.30 1 1 1 1 1     0    0 3.19 -12.68 ZNESW 12.5 13.2 294.8 15.8 10.5 -24.6 10.4 -23.4 10.1 -21.5 10.4 -23.5
2026-04-15T19:47:36.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:47:36.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:47:36.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.741105
2026-04-15T19:47:36.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:47:36.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:47:36.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:47:36.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:47:36.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:47:36.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:47:01', tmtdew=4.20992, humidity=74.7443, cloud=0.0, wind=14.2225, temperature=9.70001, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:47:01', seeing=1.04, atlas_timestamp='2026-04-15T17:47:11.472', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08725000000000094, -0.0727499999999992, -0.05874999999999986, -0.08050000000000068, -0.0495000000000001, -0.022749999999998494, -0.07750000000000057, -0.008749999999999147, 0.0, -0.026999999999999247, -0.08024999999999949, -0.032999999999999474, 0.026999999999999247, -0.024250000000000327, 0.0259999999999998, 0.13149999999999906, 0.08275000000000077, 0.016000000000000014, -0.05450000000000088, 0.01124999999999865, 0.0009999999999994458, -0.02525000000000155, 0.03775000000000084, 0.29075000000000095, 0.40300000000000047, 0.0235000000000003, -0.025249999999999773, -0.06949999999999967, 0.0129999999999999, -0.008999999999998565, 0.027499999999999858, 0.04200000000000159, 0.15274999999999928], zp_timestamp='2026-04-15T17:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:47:36.252 [DEBUG] [Thread-24704] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:47:36.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:47:36.467 [DEBUG] [Thread-24707] [transport.py] [_log()] starting thread (client mode): 0xf1353af0
2026-04-15T19:47:36.468 [DEBUG] [Thread-24707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:47:36.482 [DEBUG] [Thread-24707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:47:36.482 [INFO] [Thread-24707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:47:36.490 [DEBUG] [Thread-24707] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:47:36.490 [DEBUG] [Thread-24707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:47:36.490 [DEBUG] [Thread-24707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:47:36.490 [DEBUG] [Thread-24707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:47:36.490 [DEBUG] [Thread-24707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:47:36.490 [DEBUG] [Thread-24707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:47:36.490 [DEBUG] [Thread-24707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:47:36.490 [DEBUG] [Thread-24707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:47:36.490 [DEBUG] [Thread-24707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:47:36.490 [DEBUG] [Thread-24707] [transport.py] [_log()] client lang: <none>
2026-04-15T19:47:36.490 [DEBUG] [Thread-24707] [transport.py] [_log()] server lang: <none>
2026-04-15T19:47:36.491 [DEBUG] [Thread-24707] [transport.py] [_log()] kex follows: False
2026-04-15T19:47:36.491 [DEBUG] [Thread-24707] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:47:36.491 [DEBUG] [Thread-24707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:47:36.491 [DEBUG] [Thread-24707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:47:36.491 [DEBUG] [Thread-24707] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:47:36.491 [DEBUG] [Thread-24707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:47:36.491 [DEBUG] [Thread-24707] [transport.py] [_log()] Compression: none
2026-04-15T19:47:36.491 [DEBUG] [Thread-24707] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:47:36.546 [DEBUG] [Thread-24707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:47:36.546 [DEBUG] [Thread-24707] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:47:36.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:47:36.547 [DEBUG] [Thread-24707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:47:36.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:47:36.603 [DEBUG] [Thread-24707] [transport.py] [_log()] userauth is OK
2026-04-15T19:47:36.603 [DEBUG] [Thread-24707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:47:36.603 [DEBUG] [Thread-24707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:47:36.603 [DEBUG] [Thread-24707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:47:36.603 [DEBUG] [Thread-24707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:47:36.628 [INFO] [Thread-24707] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:47:36.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:47:36.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:47:37.491 [DEBUG] [Thread-24707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:47:37.492 [DEBUG] [Thread-24707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:47:37.539 [DEBUG] [Thread-24707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:47:37.539 [DEBUG] [Thread-24707] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:47:37.548 [DEBUG] [Thread-24707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:47:37.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:47:37.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')
2026-04-15T19:47:37.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
2026-04-15T19:47:37.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:47:37.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:47:37.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:47:37.583 [DEBUG] [Thread-24707] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:47:37.870 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:40.789 [DEBUG] [Thread-24709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:43.246 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:48.624 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:54.022 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:55.835 [DEBUG] [Thread-24710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:47:59.436 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:48:01.654 [DEBUG] [Thread-24711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:48:07.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:48:07.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:48:07.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
2026-04-15T19:48:08.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 47, 36), 4.11983, 75.4886, 0.0, 14.4331, 9.90002, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:48:08.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:47:36
2026-04-15T19:48:09.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:48:09.789 [DEBUG] [Thread-24712] [transport.py] [_log()] starting thread (client mode): 0xf13670a0
2026-04-15T19:48:09.789 [DEBUG] [Thread-24712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:48:09.808 [DEBUG] [Thread-24712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:48:09.808 [INFO] [Thread-24712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:48:09.812 [DEBUG] [Thread-24712] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:48:09.812 [DEBUG] [Thread-24712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:48:09.812 [DEBUG] [Thread-24712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:48:09.812 [DEBUG] [Thread-24712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:48:09.812 [DEBUG] [Thread-24712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:48:09.812 [DEBUG] [Thread-24712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:48:09.812 [DEBUG] [Thread-24712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:48:09.812 [DEBUG] [Thread-24712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:48:09.812 [DEBUG] [Thread-24712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:48:09.812 [DEBUG] [Thread-24712] [transport.py] [_log()] client lang: <none>
2026-04-15T19:48:09.813 [DEBUG] [Thread-24712] [transport.py] [_log()] server lang: <none>
2026-04-15T19:48:09.813 [DEBUG] [Thread-24712] [transport.py] [_log()] kex follows: False
2026-04-15T19:48:09.813 [DEBUG] [Thread-24712] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:48:09.813 [DEBUG] [Thread-24712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:48:09.813 [DEBUG] [Thread-24712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:48:09.813 [DEBUG] [Thread-24712] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:48:09.813 [DEBUG] [Thread-24712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:48:09.813 [DEBUG] [Thread-24712] [transport.py] [_log()] Compression: none
2026-04-15T19:48:09.813 [DEBUG] [Thread-24712] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:48:09.832 [DEBUG] [Thread-24712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:48:09.833 [DEBUG] [Thread-24712] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:48:09.833 [DEBUG] [Thread-24712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:48:09.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:48:09.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:48:09.834 [DEBUG] [Thread-24712] [transport.py] [_log()] userauth is OK
2026-04-15T19:48:09.834 [DEBUG] [Thread-24712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:48:09.834 [DEBUG] [Thread-24712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:48:09.834 [DEBUG] [Thread-24712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:48:09.834 [DEBUG] [Thread-24712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:48:09.858 [INFO] [Thread-24712] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:48:09.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:48:10.482 [DEBUG] [Thread-24712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:48:10.482 [DEBUG] [Thread-24712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:48:10.483 [DEBUG] [Thread-24712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:48:10.523 [DEBUG] [Thread-24712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:48:10.523 [DEBUG] [Thread-24712] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:48:10.526 [DEBUG] [Thread-24712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:48:10.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:48:10.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:48:10.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:48:10.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:48:10.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:48:10.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:48:10.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:48:10.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:48:10.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:48:10.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.741452 -999.00   +9.70  11.66     78   +6.20 1 1 1 1 1     0    0 3.17 -12.82 ZNESW 11.5 11.7 302.2 14.1 10.5 -24.6 10.4 -23.3 10.1 -21.5 10.4 -23.3
2026-04-15T19:48:10.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:48:10.543 [DEBUG] [Thread-24712] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:48:10.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:48:10.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.741452
2026-04-15T19:48:10.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:48:10.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:48:10.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:48:10.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:48:10.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:48:10.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:47:36', tmtdew=4.11983, humidity=75.4886, cloud=0.0, wind=14.4331, temperature=9.90002, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:47:36', seeing=1.11, atlas_timestamp='2026-04-15T17:47:41.453', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08725000000000094, -0.0727499999999992, -0.05874999999999986, -0.08050000000000068, -0.0495000000000001, -0.022749999999998494, -0.07750000000000057, -0.008749999999999147, 0.0, -0.026999999999999247, -0.08024999999999949, -0.032999999999999474, 0.026999999999999247, -0.024250000000000327, 0.0259999999999998, 0.13149999999999906, 0.08275000000000077, 0.016000000000000014, -0.05450000000000088, 0.01124999999999865, 0.0009999999999994458, -0.02525000000000155, 0.03775000000000084, 0.29075000000000095, 0.40300000000000047, 0.0235000000000003, -0.025249999999999773, -0.06949999999999967, 0.0129999999999999, -0.008999999999998565, 0.027499999999999858, 0.04200000000000159, 0.15274999999999928], zp_timestamp='2026-04-15T17:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:48:10.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:48:10.803 [DEBUG] [Thread-24715] [transport.py] [_log()] starting thread (client mode): 0xf1364b50
2026-04-15T19:48:10.803 [DEBUG] [Thread-24715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:48:10.817 [DEBUG] [Thread-24715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:48:10.817 [INFO] [Thread-24715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:48:10.825 [DEBUG] [Thread-24715] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:48:10.825 [DEBUG] [Thread-24715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:48:10.825 [DEBUG] [Thread-24715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:48:10.825 [DEBUG] [Thread-24715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:48:10.825 [DEBUG] [Thread-24715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:48:10.825 [DEBUG] [Thread-24715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:48:10.825 [DEBUG] [Thread-24715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:48:10.825 [DEBUG] [Thread-24715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:48:10.825 [DEBUG] [Thread-24715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:48:10.826 [DEBUG] [Thread-24715] [transport.py] [_log()] client lang: <none>
2026-04-15T19:48:10.826 [DEBUG] [Thread-24715] [transport.py] [_log()] server lang: <none>
2026-04-15T19:48:10.826 [DEBUG] [Thread-24715] [transport.py] [_log()] kex follows: False
2026-04-15T19:48:10.826 [DEBUG] [Thread-24715] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:48:10.826 [DEBUG] [Thread-24715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:48:10.826 [DEBUG] [Thread-24715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:48:10.826 [DEBUG] [Thread-24715] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:48:10.826 [DEBUG] [Thread-24715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:48:10.826 [DEBUG] [Thread-24715] [transport.py] [_log()] Compression: none
2026-04-15T19:48:10.826 [DEBUG] [Thread-24715] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:48:10.865 [DEBUG] [Thread-24717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:48:10.882 [DEBUG] [Thread-24715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:48:10.882 [DEBUG] [Thread-24715] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:48:10.883 [DEBUG] [Thread-24715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:48:10.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:48:10.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:48:10.939 [DEBUG] [Thread-24715] [transport.py] [_log()] userauth is OK
2026-04-15T19:48:10.939 [DEBUG] [Thread-24715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:48:10.940 [DEBUG] [Thread-24715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:48:10.940 [DEBUG] [Thread-24715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:48:10.940 [DEBUG] [Thread-24715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:48:10.957 [INFO] [Thread-24715] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:48:10.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:48:10.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:48:11.789 [DEBUG] [Thread-24715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:48:11.789 [DEBUG] [Thread-24715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:48:11.837 [DEBUG] [Thread-24715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:48:11.837 [DEBUG] [Thread-24715] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:48:11.846 [DEBUG] [Thread-24715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:48:11.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:48:11.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')
2026-04-15T19:48:11.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
2026-04-15T19:48:11.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:48:11.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:48:11.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:48:11.881 [DEBUG] [Thread-24715] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:48:25.912 [DEBUG] [Thread-24718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:48:28.337 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:48:28.338 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:48:40.944 [DEBUG] [Thread-24719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:48:41.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:48:41.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:48: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
2026-04-15T19:48:43.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 48, 12), 4.20357, 74.7775, 0.0, 13.2692, 9.70005, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:48:43.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:48:12
2026-04-15T19:48:43.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:48:43.985 [DEBUG] [Thread-24720] [transport.py] [_log()] starting thread (client mode): 0xee9055d0
2026-04-15T19:48:43.986 [DEBUG] [Thread-24720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:48:44.006 [DEBUG] [Thread-24720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:48:44.006 [INFO] [Thread-24720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:48:44.008 [DEBUG] [Thread-24720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:48:44.008 [DEBUG] [Thread-24720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:48:44.008 [DEBUG] [Thread-24720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:48:44.008 [DEBUG] [Thread-24720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:48:44.008 [DEBUG] [Thread-24720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:48:44.008 [DEBUG] [Thread-24720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:48:44.008 [DEBUG] [Thread-24720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:48:44.009 [DEBUG] [Thread-24720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:48:44.009 [DEBUG] [Thread-24720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:48:44.009 [DEBUG] [Thread-24720] [transport.py] [_log()] client lang: <none>
2026-04-15T19:48:44.009 [DEBUG] [Thread-24720] [transport.py] [_log()] server lang: <none>
2026-04-15T19:48:44.009 [DEBUG] [Thread-24720] [transport.py] [_log()] kex follows: False
2026-04-15T19:48:44.009 [DEBUG] [Thread-24720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:48:44.009 [DEBUG] [Thread-24720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:48:44.009 [DEBUG] [Thread-24720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:48:44.009 [DEBUG] [Thread-24720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:48:44.009 [DEBUG] [Thread-24720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:48:44.009 [DEBUG] [Thread-24720] [transport.py] [_log()] Compression: none
2026-04-15T19:48:44.010 [DEBUG] [Thread-24720] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:48:44.021 [DEBUG] [Thread-24720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:48:44.022 [DEBUG] [Thread-24720] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:48:44.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:48:44.023 [DEBUG] [Thread-24720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:48:44.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:48:44.024 [DEBUG] [Thread-24720] [transport.py] [_log()] userauth is OK
2026-04-15T19:48:44.024 [DEBUG] [Thread-24720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:48:44.024 [DEBUG] [Thread-24720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:48:44.024 [DEBUG] [Thread-24720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:48:44.024 [DEBUG] [Thread-24720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:48:44.040 [INFO] [Thread-24720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:48:44.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:48:44.713 [DEBUG] [Thread-24720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:48:44.713 [DEBUG] [Thread-24720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:48:44.713 [DEBUG] [Thread-24720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:48:44.754 [DEBUG] [Thread-24720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:48:44.754 [DEBUG] [Thread-24720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:48:44.756 [DEBUG] [Thread-24720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:48:44.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:48:44.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:48:44.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:48:44.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:48:44.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:48:44.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:48:44.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:48:44.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:48:44.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:48:44.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.741799 -999.00   +9.70  12.23     78   +6.20 1 1 1 1 1     0    0 3.21 -12.43 ZNESW 13.7 12.2 301.6 14.4 10.6 -24.6 10.4 -23.4 10.1 -21.5 10.4 -23.4
2026-04-15T19:48:44.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:48:44.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:48:44.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.741799
2026-04-15T19:48:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:48:44.777 [DEBUG] [Thread-24720] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:48:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:48:44.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:48:44.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:48:44.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:48:44.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:48:12', tmtdew=4.20357, humidity=74.7775, cloud=0.0, wind=13.2692, temperature=9.70005, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:48:12', seeing=1.23, atlas_timestamp='2026-04-15T17:48:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08725000000000094, -0.0727499999999992, -0.05874999999999986, -0.08050000000000068, -0.0495000000000001, -0.022749999999998494, -0.07750000000000057, -0.008749999999999147, 0.0, -0.026999999999999247, -0.08024999999999949, -0.032999999999999474, 0.026999999999999247, -0.024250000000000327, 0.0259999999999998, 0.13149999999999906, 0.08275000000000077, 0.016000000000000014, -0.05450000000000088, 0.01124999999999865, 0.0009999999999994458, -0.02525000000000155, 0.03775000000000084, 0.29075000000000095, 0.40300000000000047, 0.0235000000000003, -0.025249999999999773, -0.06949999999999967, 0.0129999999999999, -0.008999999999998565, 0.027499999999999858, 0.04200000000000159, 0.15274999999999928], zp_timestamp='2026-04-15T17:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:48:45.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:48:45.034 [DEBUG] [Thread-24723] [transport.py] [_log()] starting thread (client mode): 0xf1365690
2026-04-15T19:48:45.034 [DEBUG] [Thread-24723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:48:45.048 [DEBUG] [Thread-24723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:48:45.048 [INFO] [Thread-24723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:48:45.055 [DEBUG] [Thread-24723] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:48:45.055 [DEBUG] [Thread-24723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:48:45.055 [DEBUG] [Thread-24723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:48:45.055 [DEBUG] [Thread-24723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:48:45.056 [DEBUG] [Thread-24723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:48:45.056 [DEBUG] [Thread-24723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:48:45.056 [DEBUG] [Thread-24723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:48:45.056 [DEBUG] [Thread-24723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:48:45.056 [DEBUG] [Thread-24723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:48:45.056 [DEBUG] [Thread-24723] [transport.py] [_log()] client lang: <none>
2026-04-15T19:48:45.056 [DEBUG] [Thread-24723] [transport.py] [_log()] server lang: <none>
2026-04-15T19:48:45.056 [DEBUG] [Thread-24723] [transport.py] [_log()] kex follows: False
2026-04-15T19:48:45.056 [DEBUG] [Thread-24723] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:48:45.056 [DEBUG] [Thread-24723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:48:45.056 [DEBUG] [Thread-24723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:48:45.057 [DEBUG] [Thread-24723] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:48:45.057 [DEBUG] [Thread-24723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:48:45.057 [DEBUG] [Thread-24723] [transport.py] [_log()] Compression: none
2026-04-15T19:48:45.057 [DEBUG] [Thread-24723] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:48:45.112 [DEBUG] [Thread-24723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:48:45.112 [DEBUG] [Thread-24723] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:48:45.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:48:45.113 [DEBUG] [Thread-24723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:48:45.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:48:45.172 [DEBUG] [Thread-24723] [transport.py] [_log()] userauth is OK
2026-04-15T19:48:45.172 [DEBUG] [Thread-24723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:48:45.172 [DEBUG] [Thread-24723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:48:45.172 [DEBUG] [Thread-24723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:48:45.172 [DEBUG] [Thread-24723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:48:45.189 [INFO] [Thread-24723] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:48:45.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:48:45.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:48:46.001 [DEBUG] [Thread-24723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:48:46.002 [DEBUG] [Thread-24723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:48:46.049 [DEBUG] [Thread-24723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:48:46.049 [DEBUG] [Thread-24723] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:48:46.058 [DEBUG] [Thread-24723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:48:46.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:48: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')
2026-04-15T19:48: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
2026-04-15T19:48:46.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:48:46.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:48:46.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:48:46.092 [DEBUG] [Thread-24723] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:48:55.976 [DEBUG] [Thread-24725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:49:01.815 [DEBUG] [Thread-24726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:49:11.022 [DEBUG] [Thread-24727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:49:16.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:49:16.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:49:16.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
2026-04-15T19:49:17.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 48, 47), 4.12721, 75.4556, 0.0, 15.2798, 9.93327, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:49:17.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:48:47
2026-04-15T19:49:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:49:18.244 [DEBUG] [Thread-24728] [transport.py] [_log()] starting thread (client mode): 0xee91e9e0
2026-04-15T19:49:18.244 [DEBUG] [Thread-24728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:49:18.264 [DEBUG] [Thread-24728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:49:18.264 [INFO] [Thread-24728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:49:18.267 [DEBUG] [Thread-24728] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:49:18.267 [DEBUG] [Thread-24728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:49:18.267 [DEBUG] [Thread-24728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:49:18.267 [DEBUG] [Thread-24728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:49:18.267 [DEBUG] [Thread-24728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:49:18.268 [DEBUG] [Thread-24728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:49:18.268 [DEBUG] [Thread-24728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:49:18.268 [DEBUG] [Thread-24728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:49:18.268 [DEBUG] [Thread-24728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:49:18.268 [DEBUG] [Thread-24728] [transport.py] [_log()] client lang: <none>
2026-04-15T19:49:18.268 [DEBUG] [Thread-24728] [transport.py] [_log()] server lang: <none>
2026-04-15T19:49:18.268 [DEBUG] [Thread-24728] [transport.py] [_log()] kex follows: False
2026-04-15T19:49:18.268 [DEBUG] [Thread-24728] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:49:18.268 [DEBUG] [Thread-24728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:49:18.268 [DEBUG] [Thread-24728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:49:18.269 [DEBUG] [Thread-24728] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:49:18.269 [DEBUG] [Thread-24728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:49:18.269 [DEBUG] [Thread-24728] [transport.py] [_log()] Compression: none
2026-04-15T19:49:18.269 [DEBUG] [Thread-24728] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:49:18.284 [DEBUG] [Thread-24728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:49:18.285 [DEBUG] [Thread-24728] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:49:18.285 [DEBUG] [Thread-24728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:49:18.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:49:18.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:49:18.286 [DEBUG] [Thread-24728] [transport.py] [_log()] userauth is OK
2026-04-15T19:49:18.287 [DEBUG] [Thread-24728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:49:18.287 [DEBUG] [Thread-24728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:49:18.287 [DEBUG] [Thread-24728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:49:18.287 [DEBUG] [Thread-24728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:49:18.311 [INFO] [Thread-24728] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:49:18.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:49:18.909 [DEBUG] [Thread-24728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:49:18.910 [DEBUG] [Thread-24728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:49:18.910 [DEBUG] [Thread-24728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:49:18.950 [DEBUG] [Thread-24728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:49:18.950 [DEBUG] [Thread-24728] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:49:18.952 [DEBUG] [Thread-24728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:49:18.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:49:18.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:49:18.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:49:18.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:49:18.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:49:18.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:49:18.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:49:18.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:49:18.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:49:18.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.742494 -999.00   +9.80  13.54     78   +6.20 1 1 1 1 1     0    0 3.23 -11.40 ZNESW 13.9 13.5 295.4 16.5 10.6 -24.6 10.4 -23.5 10.1 -21.4 10.4 -23.4
2026-04-15T19:49:18.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:49:18.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:49:18.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.742494
2026-04-15T19:49:18.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:49:18.974 [DEBUG] [Thread-24728] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:49:18.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:49:18.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:49:18.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:49:18.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:49:18.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:48:47', tmtdew=4.12721, humidity=75.4556, cloud=0.0, wind=15.2798, temperature=9.93327, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:48:49', seeing=1.11, atlas_timestamp='2026-04-15T17:49:11.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08725000000000094, -0.0727499999999992, -0.05874999999999986, -0.08050000000000068, -0.0495000000000001, -0.022749999999998494, -0.07750000000000057, -0.008749999999999147, 0.0, -0.026999999999999247, -0.08024999999999949, -0.032999999999999474, 0.026999999999999247, -0.024250000000000327, 0.0259999999999998, 0.13149999999999906, 0.08275000000000077, 0.016000000000000014, -0.05450000000000088, 0.01124999999999865, 0.0009999999999994458, -0.02525000000000155, 0.03775000000000084, 0.29075000000000095, 0.40300000000000047, 0.0235000000000003, -0.025249999999999773, -0.06949999999999967, 0.0129999999999999, -0.008999999999998565, 0.027499999999999858, 0.04200000000000159, 0.15274999999999928], zp_timestamp='2026-04-15T17:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:49:19.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:49:19.232 [DEBUG] [Thread-24731] [transport.py] [_log()] starting thread (client mode): 0xf13fecb0
2026-04-15T19:49:19.232 [DEBUG] [Thread-24731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:49:19.245 [DEBUG] [Thread-24731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:49:19.246 [INFO] [Thread-24731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:49:19.253 [DEBUG] [Thread-24731] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:49:19.253 [DEBUG] [Thread-24731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:49:19.253 [DEBUG] [Thread-24731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:49:19.253 [DEBUG] [Thread-24731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:49:19.253 [DEBUG] [Thread-24731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:49:19.253 [DEBUG] [Thread-24731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:49:19.253 [DEBUG] [Thread-24731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:49:19.253 [DEBUG] [Thread-24731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:49:19.253 [DEBUG] [Thread-24731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:49:19.254 [DEBUG] [Thread-24731] [transport.py] [_log()] client lang: <none>
2026-04-15T19:49:19.254 [DEBUG] [Thread-24731] [transport.py] [_log()] server lang: <none>
2026-04-15T19:49:19.254 [DEBUG] [Thread-24731] [transport.py] [_log()] kex follows: False
2026-04-15T19:49:19.254 [DEBUG] [Thread-24731] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:49:19.254 [DEBUG] [Thread-24731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:49:19.254 [DEBUG] [Thread-24731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:49:19.254 [DEBUG] [Thread-24731] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:49:19.254 [DEBUG] [Thread-24731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:49:19.254 [DEBUG] [Thread-24731] [transport.py] [_log()] Compression: none
2026-04-15T19:49:19.254 [DEBUG] [Thread-24731] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:49:19.312 [DEBUG] [Thread-24731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:49:19.312 [DEBUG] [Thread-24731] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:49:19.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:49:19.313 [DEBUG] [Thread-24731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:49:19.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:49:19.369 [DEBUG] [Thread-24731] [transport.py] [_log()] userauth is OK
2026-04-15T19:49:19.369 [DEBUG] [Thread-24731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:49:19.370 [DEBUG] [Thread-24731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:49:19.370 [DEBUG] [Thread-24731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:49:19.370 [DEBUG] [Thread-24731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:49:19.387 [INFO] [Thread-24731] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:49:19.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:49:19.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:49:20.192 [DEBUG] [Thread-24731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:49:20.192 [DEBUG] [Thread-24731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:49:20.240 [DEBUG] [Thread-24731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:49:20.240 [DEBUG] [Thread-24731] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:49:20.249 [DEBUG] [Thread-24731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:49:20.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:49:20.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')
2026-04-15T19:49:20.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
2026-04-15T19:49:20.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:49:20.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:49:20.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:49:20.283 [DEBUG] [Thread-24731] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:49:26.054 [DEBUG] [Thread-24733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:49:28.540 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:49:28.541 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:49:41.096 [DEBUG] [Thread-24734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:49:50.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:49:50.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:49:50.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
2026-04-15T19:49:51.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 49, 24), 4.22578, 75.1615, 0.0, 11.0459, 9.70009, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:49:51.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:49:24
2026-04-15T19:49:51.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:49:52.434 [DEBUG] [Thread-24735] [transport.py] [_log()] starting thread (client mode): 0xf13e2fe0
2026-04-15T19:49:52.434 [DEBUG] [Thread-24735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:49:52.453 [DEBUG] [Thread-24735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:49:52.453 [INFO] [Thread-24735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:49:52.456 [DEBUG] [Thread-24735] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:49:52.456 [DEBUG] [Thread-24735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:49:52.456 [DEBUG] [Thread-24735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:49:52.456 [DEBUG] [Thread-24735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:49:52.456 [DEBUG] [Thread-24735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:49:52.457 [DEBUG] [Thread-24735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:49:52.457 [DEBUG] [Thread-24735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:49:52.457 [DEBUG] [Thread-24735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:49:52.457 [DEBUG] [Thread-24735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:49:52.457 [DEBUG] [Thread-24735] [transport.py] [_log()] client lang: <none>
2026-04-15T19:49:52.457 [DEBUG] [Thread-24735] [transport.py] [_log()] server lang: <none>
2026-04-15T19:49:52.457 [DEBUG] [Thread-24735] [transport.py] [_log()] kex follows: False
2026-04-15T19:49:52.457 [DEBUG] [Thread-24735] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:49:52.457 [DEBUG] [Thread-24735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:49:52.457 [DEBUG] [Thread-24735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:49:52.457 [DEBUG] [Thread-24735] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:49:52.458 [DEBUG] [Thread-24735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:49:52.458 [DEBUG] [Thread-24735] [transport.py] [_log()] Compression: none
2026-04-15T19:49:52.458 [DEBUG] [Thread-24735] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:49:52.474 [DEBUG] [Thread-24735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:49:52.475 [DEBUG] [Thread-24735] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:49:52.475 [DEBUG] [Thread-24735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:49:52.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:49:52.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:49:52.476 [DEBUG] [Thread-24735] [transport.py] [_log()] userauth is OK
2026-04-15T19:49:52.476 [DEBUG] [Thread-24735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:49:52.476 [DEBUG] [Thread-24735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:49:52.477 [DEBUG] [Thread-24735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:49:52.477 [DEBUG] [Thread-24735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:49:52.494 [INFO] [Thread-24735] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:49:52.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:49:53.138 [DEBUG] [Thread-24735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:49:53.138 [DEBUG] [Thread-24735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:49:53.139 [DEBUG] [Thread-24735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:49:53.179 [DEBUG] [Thread-24735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:49:53.179 [DEBUG] [Thread-24735] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:49:53.181 [DEBUG] [Thread-24735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:49:53.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:49:53.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:49:53.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:49:53.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:49:53.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:49:53.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:49:53.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:49:53.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:49:53.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:49:53.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.742841 -999.00   +9.80  13.59     78   +6.20 1 1 1 1 1     0    0 3.25 -10.10 ZNESW 14.7 13.6 301.0 16.9 10.5 -24.6 10.4 -23.6 10.1 -21.4 10.4 -23.4
2026-04-15T19:49:53.197 [DEBUG] [Thread-24735] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:49:53.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:49:53.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:49:53.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.742841
2026-04-15T19:49:53.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:49:53.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:49:53.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:49:53.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:49:53.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:49:53.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:49:24', tmtdew=4.22578, humidity=75.1615, cloud=0.0, wind=11.0459, temperature=9.70009, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:49:24', seeing=1.3, atlas_timestamp='2026-04-15T17:49:41.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08725000000000094, -0.0727499999999992, -0.05874999999999986, -0.08050000000000068, -0.0495000000000001, -0.022749999999998494, -0.07750000000000057, -0.008749999999999147, 0.0, -0.026999999999999247, -0.08024999999999949, -0.032999999999999474, 0.026999999999999247, -0.024250000000000327, 0.0259999999999998, 0.13149999999999906, 0.08275000000000077, 0.016000000000000014, -0.05450000000000088, 0.01124999999999865, 0.0009999999999994458, -0.02525000000000155, 0.03775000000000084, 0.29075000000000095, 0.40300000000000047, 0.0235000000000003, -0.025249999999999773, -0.06949999999999967, 0.0129999999999999, -0.008999999999998565, 0.027499999999999858, 0.04200000000000159, 0.15274999999999928], zp_timestamp='2026-04-15T17:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:49:53.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:49:53.455 [DEBUG] [Thread-24738] [transport.py] [_log()] starting thread (client mode): 0xf13642b0
2026-04-15T19:49:53.455 [DEBUG] [Thread-24738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:49:53.469 [DEBUG] [Thread-24738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:49:53.469 [INFO] [Thread-24738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:49:53.477 [DEBUG] [Thread-24738] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:49:53.477 [DEBUG] [Thread-24738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:49:53.477 [DEBUG] [Thread-24738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:49:53.477 [DEBUG] [Thread-24738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:49:53.477 [DEBUG] [Thread-24738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:49:53.477 [DEBUG] [Thread-24738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:49:53.477 [DEBUG] [Thread-24738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:49:53.477 [DEBUG] [Thread-24738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:49:53.477 [DEBUG] [Thread-24738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:49:53.478 [DEBUG] [Thread-24738] [transport.py] [_log()] client lang: <none>
2026-04-15T19:49:53.478 [DEBUG] [Thread-24738] [transport.py] [_log()] server lang: <none>
2026-04-15T19:49:53.478 [DEBUG] [Thread-24738] [transport.py] [_log()] kex follows: False
2026-04-15T19:49:53.478 [DEBUG] [Thread-24738] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:49:53.478 [DEBUG] [Thread-24738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:49:53.478 [DEBUG] [Thread-24738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:49:53.478 [DEBUG] [Thread-24738] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:49:53.478 [DEBUG] [Thread-24738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:49:53.478 [DEBUG] [Thread-24738] [transport.py] [_log()] Compression: none
2026-04-15T19:49:53.478 [DEBUG] [Thread-24738] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:49:53.533 [DEBUG] [Thread-24738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:49:53.533 [DEBUG] [Thread-24738] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:49:53.534 [DEBUG] [Thread-24738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:49:53.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:49:53.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:49:53.590 [DEBUG] [Thread-24738] [transport.py] [_log()] userauth is OK
2026-04-15T19:49:53.591 [DEBUG] [Thread-24738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:49:53.591 [DEBUG] [Thread-24738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:49:53.591 [DEBUG] [Thread-24738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:49:53.591 [DEBUG] [Thread-24738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:49:53.608 [INFO] [Thread-24738] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:49:53.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:49:53.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:49:54.429 [DEBUG] [Thread-24738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:49:54.429 [DEBUG] [Thread-24738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:49:54.477 [DEBUG] [Thread-24738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:49:54.477 [DEBUG] [Thread-24738] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:49:54.486 [DEBUG] [Thread-24738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:49:54.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:49:54.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')
2026-04-15T19:49:54.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
2026-04-15T19:49:54.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:49:54.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:49:54.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:49:54.520 [DEBUG] [Thread-24738] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:49:56.124 [DEBUG] [Thread-24740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:50:01.979 [DEBUG] [Thread-24741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:50:11.167 [DEBUG] [Thread-24742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:50:24.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:50:24.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:50:24.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T19:50:25.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 49, 59), 4.21995, 74.6947, 0.0, 10.1286, 9.71667, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:50:25.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:49:59
2026-04-15T19:50:26.196 [DEBUG] [Thread-24743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:50:26.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:50:26.683 [DEBUG] [Thread-24744] [transport.py] [_log()] starting thread (client mode): 0xf13e1450
2026-04-15T19:50:26.683 [DEBUG] [Thread-24744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:50:26.702 [DEBUG] [Thread-24744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:50:26.702 [INFO] [Thread-24744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:50:26.706 [DEBUG] [Thread-24744] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:50:26.706 [DEBUG] [Thread-24744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:50:26.706 [DEBUG] [Thread-24744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:50:26.706 [DEBUG] [Thread-24744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:50:26.706 [DEBUG] [Thread-24744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:50:26.706 [DEBUG] [Thread-24744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:50:26.706 [DEBUG] [Thread-24744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:50:26.706 [DEBUG] [Thread-24744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:50:26.706 [DEBUG] [Thread-24744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:50:26.706 [DEBUG] [Thread-24744] [transport.py] [_log()] client lang: <none>
2026-04-15T19:50:26.706 [DEBUG] [Thread-24744] [transport.py] [_log()] server lang: <none>
2026-04-15T19:50:26.706 [DEBUG] [Thread-24744] [transport.py] [_log()] kex follows: False
2026-04-15T19:50:26.706 [DEBUG] [Thread-24744] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:50:26.707 [DEBUG] [Thread-24744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:50:26.707 [DEBUG] [Thread-24744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:50:26.707 [DEBUG] [Thread-24744] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:50:26.707 [DEBUG] [Thread-24744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:50:26.707 [DEBUG] [Thread-24744] [transport.py] [_log()] Compression: none
2026-04-15T19:50:26.707 [DEBUG] [Thread-24744] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:50:26.727 [DEBUG] [Thread-24744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:50:26.728 [DEBUG] [Thread-24744] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:50:26.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:50:26.728 [DEBUG] [Thread-24744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:50:26.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:50:26.729 [DEBUG] [Thread-24744] [transport.py] [_log()] userauth is OK
2026-04-15T19:50:26.729 [DEBUG] [Thread-24744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:50:26.729 [DEBUG] [Thread-24744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:50:26.729 [DEBUG] [Thread-24744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:50:26.729 [DEBUG] [Thread-24744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:50:26.744 [INFO] [Thread-24744] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:50:26.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:50:28.742 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:50:28.743 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:50:31.868 [DEBUG] [Thread-24744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:50:31.869 [DEBUG] [Thread-24744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:50:31.869 [DEBUG] [Thread-24744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:50:31.909 [DEBUG] [Thread-24744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:50:31.909 [DEBUG] [Thread-24744] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:50:31.912 [DEBUG] [Thread-24744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:50:31.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:50:31.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:50:31.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:50:31.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:50:31.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:50:31.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:50:31.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:50:31.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:50:31.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:50:31.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.742841 -999.00   +9.80  13.59     78   +6.20 1 1 1 1 1     0    0 3.25 -10.10 ZNESW 14.7 13.6 301.0 16.9 10.5 -24.6 10.4 -23.6 10.1 -21.4 10.4 -23.4
2026-04-15T19:50:31.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:50:31.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:50:31.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.742841
2026-04-15T19:50:31.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:50:31.999 [DEBUG] [Thread-24744] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:50:32.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:50:32.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:50:32.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:50:32.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:50:32.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:49:59', tmtdew=4.21995, humidity=74.6947, cloud=0.0, wind=10.1286, temperature=9.71667, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:50:00', seeing=1.24, atlas_timestamp='2026-04-15T17:49:41.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08725000000000094, -0.0727499999999992, -0.05874999999999986, -0.08050000000000068, -0.0495000000000001, -0.022749999999998494, -0.07750000000000057, -0.008749999999999147, 0.0, -0.026999999999999247, -0.08024999999999949, -0.032999999999999474, 0.026999999999999247, -0.024250000000000327, 0.0259999999999998, 0.13149999999999906, 0.08275000000000077, 0.016000000000000014, -0.05450000000000088, 0.01124999999999865, 0.0009999999999994458, -0.02525000000000155, 0.03775000000000084, 0.29075000000000095, 0.40300000000000047, 0.0235000000000003, -0.025249999999999773, -0.06949999999999967, 0.0129999999999999, -0.008999999999998565, 0.027499999999999858, 0.04200000000000159, 0.15274999999999928], zp_timestamp='2026-04-15T17:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:50:32.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:50:32.267 [DEBUG] [Thread-24747] [transport.py] [_log()] starting thread (client mode): 0xf13e11e0
2026-04-15T19:50:32.267 [DEBUG] [Thread-24747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:50:32.282 [DEBUG] [Thread-24747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:50:32.282 [INFO] [Thread-24747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:50:32.289 [DEBUG] [Thread-24747] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:50:32.289 [DEBUG] [Thread-24747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:50:32.289 [DEBUG] [Thread-24747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:50:32.290 [DEBUG] [Thread-24747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:50:32.290 [DEBUG] [Thread-24747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:50:32.290 [DEBUG] [Thread-24747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:50:32.290 [DEBUG] [Thread-24747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:50:32.290 [DEBUG] [Thread-24747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:50:32.290 [DEBUG] [Thread-24747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:50:32.290 [DEBUG] [Thread-24747] [transport.py] [_log()] client lang: <none>
2026-04-15T19:50:32.290 [DEBUG] [Thread-24747] [transport.py] [_log()] server lang: <none>
2026-04-15T19:50:32.290 [DEBUG] [Thread-24747] [transport.py] [_log()] kex follows: False
2026-04-15T19:50:32.290 [DEBUG] [Thread-24747] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:50:32.290 [DEBUG] [Thread-24747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:50:32.290 [DEBUG] [Thread-24747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:50:32.291 [DEBUG] [Thread-24747] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:50:32.291 [DEBUG] [Thread-24747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:50:32.291 [DEBUG] [Thread-24747] [transport.py] [_log()] Compression: none
2026-04-15T19:50:32.291 [DEBUG] [Thread-24747] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:50:32.346 [DEBUG] [Thread-24747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:50:32.346 [DEBUG] [Thread-24747] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:50:32.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:50:32.347 [DEBUG] [Thread-24747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:50:32.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:50:32.403 [DEBUG] [Thread-24747] [transport.py] [_log()] userauth is OK
2026-04-15T19:50:32.403 [DEBUG] [Thread-24747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:50:32.404 [DEBUG] [Thread-24747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:50:32.404 [DEBUG] [Thread-24747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:50:32.404 [DEBUG] [Thread-24747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:50:32.429 [INFO] [Thread-24747] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:50:32.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:50:32.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:50:33.265 [DEBUG] [Thread-24747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:50:33.265 [DEBUG] [Thread-24747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:50:33.313 [DEBUG] [Thread-24747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:50:33.313 [DEBUG] [Thread-24747] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:50:33.322 [DEBUG] [Thread-24747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:50:33.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:50:33.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')
2026-04-15T19:50:33.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
2026-04-15T19:50:33.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:50:33.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:50:33.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:50:33.357 [DEBUG] [Thread-24747] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:50:41.225 [DEBUG] [Thread-24749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:50:56.268 [DEBUG] [Thread-24750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:51:02.132 [DEBUG] [Thread-24751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:51:03.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:51:03.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:51:03.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
2026-04-15T19:51:04.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 50, 35), 4.11239, 75.5221, 0.0, 13.5864, 9.86707, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:51:04.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:50:35
2026-04-15T19:51:05.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:51:05.467 [DEBUG] [Thread-24752] [transport.py] [_log()] starting thread (client mode): 0xf13e1420
2026-04-15T19:51:05.467 [DEBUG] [Thread-24752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:51:05.488 [DEBUG] [Thread-24752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:51:05.488 [INFO] [Thread-24752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:51:05.492 [DEBUG] [Thread-24752] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:51:05.492 [DEBUG] [Thread-24752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:51:05.492 [DEBUG] [Thread-24752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:51:05.492 [DEBUG] [Thread-24752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:51:05.492 [DEBUG] [Thread-24752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:51:05.492 [DEBUG] [Thread-24752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:51:05.492 [DEBUG] [Thread-24752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:51:05.492 [DEBUG] [Thread-24752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:51:05.492 [DEBUG] [Thread-24752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:51:05.492 [DEBUG] [Thread-24752] [transport.py] [_log()] client lang: <none>
2026-04-15T19:51:05.492 [DEBUG] [Thread-24752] [transport.py] [_log()] server lang: <none>
2026-04-15T19:51:05.493 [DEBUG] [Thread-24752] [transport.py] [_log()] kex follows: False
2026-04-15T19:51:05.493 [DEBUG] [Thread-24752] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:51:05.493 [DEBUG] [Thread-24752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:51:05.493 [DEBUG] [Thread-24752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:51:05.493 [DEBUG] [Thread-24752] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:51:05.493 [DEBUG] [Thread-24752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:51:05.493 [DEBUG] [Thread-24752] [transport.py] [_log()] Compression: none
2026-04-15T19:51:05.493 [DEBUG] [Thread-24752] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:51:05.510 [DEBUG] [Thread-24752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:51:05.510 [DEBUG] [Thread-24752] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:51:05.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:51:05.511 [DEBUG] [Thread-24752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:51:05.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:51:05.512 [DEBUG] [Thread-24752] [transport.py] [_log()] userauth is OK
2026-04-15T19:51:05.512 [DEBUG] [Thread-24752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:51:05.512 [DEBUG] [Thread-24752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:51:05.512 [DEBUG] [Thread-24752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:51:05.513 [DEBUG] [Thread-24752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:51:05.536 [INFO] [Thread-24752] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:51:05.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:51:06.276 [DEBUG] [Thread-24752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:51:06.276 [DEBUG] [Thread-24752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:51:06.276 [DEBUG] [Thread-24752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:51:06.318 [DEBUG] [Thread-24752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:51:06.318 [DEBUG] [Thread-24752] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:51:06.320 [DEBUG] [Thread-24752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:51:06.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:51:06.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:51:06.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:51:06.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:51:06.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:51:06.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:51:06.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:51:06.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:51:06.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:51:06.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.743188 -999.00   +9.80  13.31     78   +6.20 1 1 1 1 1     0    0 3.28 -8.82 ZNESW 12.6 13.3 296.0 16.7 10.5 -24.7 10.4 -23.5 10.1 -21.5 10.4 -23.5
2026-04-15T19:51:06.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:51:06.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:51:06.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.743188
2026-04-15T19:51:06.335 [DEBUG] [Thread-24752] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:51:06.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:51:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:51:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:51:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:51:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:51:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:50:35', tmtdew=4.11239, humidity=75.5221, cloud=0.0, wind=13.5864, temperature=9.86707, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:50:35', seeing=1.53, atlas_timestamp='2026-04-15T17:50:11.443', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08725000000000094, -0.0727499999999992, -0.05874999999999986, -0.08050000000000068, -0.0495000000000001, -0.022749999999998494, -0.07750000000000057, -0.008749999999999147, 0.0, -0.026999999999999247, -0.08024999999999949, -0.032999999999999474, 0.026999999999999247, -0.024250000000000327, 0.0259999999999998, 0.13149999999999906, 0.08275000000000077, 0.016000000000000014, -0.05450000000000088, 0.01124999999999865, 0.0009999999999994458, -0.02525000000000155, 0.03775000000000084, 0.29075000000000095, 0.40300000000000047, 0.0235000000000003, -0.025249999999999773, -0.06949999999999967, 0.0129999999999999, -0.008999999999998565, 0.027499999999999858, 0.04200000000000159, 0.15274999999999928], zp_timestamp='2026-04-15T17:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:51:06.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:51:11.296 [DEBUG] [Thread-24755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:51:26.332 [DEBUG] [Thread-24756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:51:28.946 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:51:28.947 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:51:41.361 [DEBUG] [Thread-24757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:51:56.392 [DEBUG] [Thread-24758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:52:02.280 [DEBUG] [Thread-24759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:52:11.420 [DEBUG] [Thread-24760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:52:26.452 [DEBUG] [Thread-24761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:52:29.147 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:52:29.148 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:52:41.482 [DEBUG] [Thread-24762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:52:56.512 [DEBUG] [Thread-24763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:53:02.441 [DEBUG] [Thread-24764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:53:11.542 [DEBUG] [Thread-24765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:53:19.754 [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
2026-04-15T19:53:26.573 [DEBUG] [Thread-24766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:53:29.351 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:53:29.352 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:53:41.603 [DEBUG] [Thread-24767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:53:49.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:53:49.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:53:49.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T19:53:51.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 53, 32), 4.27894, 74.645, 0.0, 11.1694, 9.70018, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:53:51.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:53:32
2026-04-15T19:53:51.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:53:51.913 [DEBUG] [Thread-24768] [transport.py] [_log()] starting thread (client mode): 0xee906e30
2026-04-15T19:53:51.913 [DEBUG] [Thread-24768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:53:51.933 [DEBUG] [Thread-24768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:53:51.933 [INFO] [Thread-24768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:53:51.936 [DEBUG] [Thread-24768] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:53:51.936 [DEBUG] [Thread-24768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:53:51.936 [DEBUG] [Thread-24768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:53:51.936 [DEBUG] [Thread-24768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:53:51.936 [DEBUG] [Thread-24768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:53:51.937 [DEBUG] [Thread-24768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:53:51.937 [DEBUG] [Thread-24768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:53:51.937 [DEBUG] [Thread-24768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:53:51.937 [DEBUG] [Thread-24768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:53:51.937 [DEBUG] [Thread-24768] [transport.py] [_log()] client lang: <none>
2026-04-15T19:53:51.937 [DEBUG] [Thread-24768] [transport.py] [_log()] server lang: <none>
2026-04-15T19:53:51.937 [DEBUG] [Thread-24768] [transport.py] [_log()] kex follows: False
2026-04-15T19:53:51.937 [DEBUG] [Thread-24768] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:53:51.937 [DEBUG] [Thread-24768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:53:51.937 [DEBUG] [Thread-24768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:53:51.937 [DEBUG] [Thread-24768] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:53:51.938 [DEBUG] [Thread-24768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:53:51.938 [DEBUG] [Thread-24768] [transport.py] [_log()] Compression: none
2026-04-15T19:53:51.938 [DEBUG] [Thread-24768] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:53:51.950 [DEBUG] [Thread-24768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:53:51.951 [DEBUG] [Thread-24768] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:53:51.951 [DEBUG] [Thread-24768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:53:51.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:53:51.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:53:51.952 [DEBUG] [Thread-24768] [transport.py] [_log()] userauth is OK
2026-04-15T19:53:51.953 [DEBUG] [Thread-24768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:53:51.953 [DEBUG] [Thread-24768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:53:51.953 [DEBUG] [Thread-24768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:53:51.953 [DEBUG] [Thread-24768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:53:51.976 [INFO] [Thread-24768] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:53:51.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:53:52.805 [DEBUG] [Thread-24768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:53:52.805 [DEBUG] [Thread-24768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:53:52.806 [DEBUG] [Thread-24768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:53:52.846 [DEBUG] [Thread-24768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:53:52.846 [DEBUG] [Thread-24768] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:53:52.849 [DEBUG] [Thread-24768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:53:52.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:53:52.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:53:52.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:53:52.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:53:52.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:53:52.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:53:52.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:53:52.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:53:52.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:53:52.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.745271 -999.00   +9.80  12.29     78   +6.10 1 1 1 1 1     0    0 3.43 -2.82 ZNESW 11.8 12.3 299.6 14.0 10.5 -24.7 10.3 -23.5 10.0 -21.4 10.4 -23.3
2026-04-15T19:53:52.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:53:52.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:53:52.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.745271
2026-04-15T19:53:52.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:53:52.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:53:52.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:53:52.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:53:52.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:53:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:53:32', tmtdew=4.27894, humidity=74.645, cloud=0.0, wind=11.1694, temperature=9.70018, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:53:32', seeing=0.98, atlas_timestamp='2026-04-15T17:53:11.414', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0702499999999997, -0.029249999999999332, -0.04124999999999979, -0.03750000000000142, -0.03250000000000064, -0.0032499999999977547, -0.03850000000000087, -0.06925000000000026, -0.011000000000001009, -0.025000000000000355, -0.04425000000000168, -0.019999999999999574, 0.038000000000000256, 0.0022500000000000853, 0.008999999999998565, 0.006000000000000227, 0.053249999999998465, 0.019000000000000128, -0.019000000000000128, -0.025750000000000384, 0.04399999999999871, 0.0012499999999988631, -0.031749999999998835, 0.04774999999999885, 0.2289999999999992, -0.019499999999998963, -0.04625000000000057, -0.024499999999999744, 0.041999999999999815, 0.011000000000001009, 0.028999999999999915, 0.04350000000000165, 0.2157499999999999], zp_timestamp='2026-04-15T17:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:53:52.876 [DEBUG] [Thread-24768] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:53:53.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:53:53.138 [DEBUG] [Thread-24771] [transport.py] [_log()] starting thread (client mode): 0xee906aa0
2026-04-15T19:53:53.138 [DEBUG] [Thread-24771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:53:53.152 [DEBUG] [Thread-24771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:53:53.152 [INFO] [Thread-24771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:53:53.159 [DEBUG] [Thread-24771] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:53:53.159 [DEBUG] [Thread-24771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:53:53.159 [DEBUG] [Thread-24771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:53:53.159 [DEBUG] [Thread-24771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:53:53.159 [DEBUG] [Thread-24771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:53:53.159 [DEBUG] [Thread-24771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:53:53.159 [DEBUG] [Thread-24771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:53:53.159 [DEBUG] [Thread-24771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:53:53.159 [DEBUG] [Thread-24771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:53:53.159 [DEBUG] [Thread-24771] [transport.py] [_log()] client lang: <none>
2026-04-15T19:53:53.159 [DEBUG] [Thread-24771] [transport.py] [_log()] server lang: <none>
2026-04-15T19:53:53.159 [DEBUG] [Thread-24771] [transport.py] [_log()] kex follows: False
2026-04-15T19:53:53.159 [DEBUG] [Thread-24771] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:53:53.160 [DEBUG] [Thread-24771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:53:53.160 [DEBUG] [Thread-24771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:53:53.160 [DEBUG] [Thread-24771] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:53:53.160 [DEBUG] [Thread-24771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:53:53.160 [DEBUG] [Thread-24771] [transport.py] [_log()] Compression: none
2026-04-15T19:53:53.160 [DEBUG] [Thread-24771] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:53:53.219 [DEBUG] [Thread-24771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:53:53.219 [DEBUG] [Thread-24771] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:53:53.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:53:53.220 [DEBUG] [Thread-24771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:53:53.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:53:53.275 [DEBUG] [Thread-24771] [transport.py] [_log()] userauth is OK
2026-04-15T19:53:53.275 [DEBUG] [Thread-24771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:53:53.275 [DEBUG] [Thread-24771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:53:53.276 [DEBUG] [Thread-24771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:53:53.276 [DEBUG] [Thread-24771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:53:53.300 [INFO] [Thread-24771] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:53:53.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:53:53.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:53:54.126 [DEBUG] [Thread-24771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:53:54.127 [DEBUG] [Thread-24771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:53:54.178 [DEBUG] [Thread-24771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:53:54.178 [DEBUG] [Thread-24771] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:53:54.187 [DEBUG] [Thread-24771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:53:54.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:53:54.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')
2026-04-15T19:53:54.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
2026-04-15T19:53:54.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:53:54.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:53:54.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:53:54.229 [DEBUG] [Thread-24771] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:53:56.632 [DEBUG] [Thread-24773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:54:02.587 [DEBUG] [Thread-24774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:54:11.681 [DEBUG] [Thread-24775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:54:24.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:54:24.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:54:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T19:54:25.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 54, 9), 4.30176, 74.5289, 0.0, 10.0228, 9.71676, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:54:25.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:54:09
2026-04-15T19:54:25.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:54:26.404 [DEBUG] [Thread-24776] [transport.py] [_log()] starting thread (client mode): 0xf13e2440
2026-04-15T19:54:26.404 [DEBUG] [Thread-24776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:54:26.423 [DEBUG] [Thread-24776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:54:26.424 [INFO] [Thread-24776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:54:26.427 [DEBUG] [Thread-24776] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:54:26.427 [DEBUG] [Thread-24776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:54:26.427 [DEBUG] [Thread-24776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:54:26.427 [DEBUG] [Thread-24776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:54:26.427 [DEBUG] [Thread-24776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:54:26.427 [DEBUG] [Thread-24776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:54:26.427 [DEBUG] [Thread-24776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:54:26.427 [DEBUG] [Thread-24776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:54:26.427 [DEBUG] [Thread-24776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:54:26.427 [DEBUG] [Thread-24776] [transport.py] [_log()] client lang: <none>
2026-04-15T19:54:26.427 [DEBUG] [Thread-24776] [transport.py] [_log()] server lang: <none>
2026-04-15T19:54:26.427 [DEBUG] [Thread-24776] [transport.py] [_log()] kex follows: False
2026-04-15T19:54:26.427 [DEBUG] [Thread-24776] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:54:26.428 [DEBUG] [Thread-24776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:54:26.428 [DEBUG] [Thread-24776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:54:26.428 [DEBUG] [Thread-24776] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:54:26.428 [DEBUG] [Thread-24776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:54:26.428 [DEBUG] [Thread-24776] [transport.py] [_log()] Compression: none
2026-04-15T19:54:26.428 [DEBUG] [Thread-24776] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:54:26.445 [DEBUG] [Thread-24776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:54:26.445 [DEBUG] [Thread-24776] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:54:26.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:54:26.446 [DEBUG] [Thread-24776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:54:26.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:54:26.447 [DEBUG] [Thread-24776] [transport.py] [_log()] userauth is OK
2026-04-15T19:54:26.447 [DEBUG] [Thread-24776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:54:26.447 [DEBUG] [Thread-24776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:54:26.447 [DEBUG] [Thread-24776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:54:26.447 [DEBUG] [Thread-24776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:54:26.459 [INFO] [Thread-24776] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:54:26.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:54:26.711 [DEBUG] [Thread-24778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:54:27.290 [DEBUG] [Thread-24776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:54:27.290 [DEBUG] [Thread-24776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:54:27.291 [DEBUG] [Thread-24776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:54:27.330 [DEBUG] [Thread-24776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:54:27.331 [DEBUG] [Thread-24776] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:54:27.333 [DEBUG] [Thread-24776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:54:27.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:54:27.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:54:27.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:54:27.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:54:27.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:54:27.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:54:27.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:54:27.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:54:27.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:54:27.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.745619 -999.00   +9.80   9.32     78   +6.20 1 1 1 1 1     0    0 3.51 -1.52 ZNESW 8.2 9.3 306.6 14.1 10.5 -24.8 10.3 -23.5 10.1 -21.4 10.3 -23.3
2026-04-15T19:54:27.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:54:27.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:54:27.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.745619
2026-04-15T19:54:27.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:54:27.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:54:27.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:54:27.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:54:27.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:54:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:54:09', tmtdew=4.30176, humidity=74.5289, cloud=0.0, wind=10.0228, temperature=9.71676, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:54:09', seeing=1.44, atlas_timestamp='2026-04-15T17:53:41.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0702499999999997, -0.029249999999999332, -0.04124999999999979, -0.03750000000000142, -0.03250000000000064, -0.0032499999999977547, -0.03850000000000087, -0.06925000000000026, -0.011000000000001009, -0.025000000000000355, -0.04425000000000168, -0.019999999999999574, 0.038000000000000256, 0.0022500000000000853, 0.008999999999998565, 0.006000000000000227, 0.053249999999998465, 0.019000000000000128, -0.019000000000000128, -0.025750000000000384, 0.04399999999999871, 0.0012499999999988631, -0.031749999999998835, 0.04774999999999885, 0.2289999999999992, -0.019499999999998963, -0.04625000000000057, -0.024499999999999744, 0.041999999999999815, 0.011000000000001009, 0.028999999999999915, 0.04350000000000165, 0.2157499999999999], zp_timestamp='2026-04-15T17:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:54:27.354 [DEBUG] [Thread-24776] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:54:27.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:54:27.572 [DEBUG] [Thread-24780] [transport.py] [_log()] starting thread (client mode): 0xee9c3280
2026-04-15T19:54:27.572 [DEBUG] [Thread-24780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:54:27.587 [DEBUG] [Thread-24780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:54:27.587 [INFO] [Thread-24780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:54:27.594 [DEBUG] [Thread-24780] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:54:27.595 [DEBUG] [Thread-24780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:54:27.595 [DEBUG] [Thread-24780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:54:27.595 [DEBUG] [Thread-24780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:54:27.595 [DEBUG] [Thread-24780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:54:27.595 [DEBUG] [Thread-24780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:54:27.595 [DEBUG] [Thread-24780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:54:27.595 [DEBUG] [Thread-24780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:54:27.595 [DEBUG] [Thread-24780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:54:27.595 [DEBUG] [Thread-24780] [transport.py] [_log()] client lang: <none>
2026-04-15T19:54:27.595 [DEBUG] [Thread-24780] [transport.py] [_log()] server lang: <none>
2026-04-15T19:54:27.595 [DEBUG] [Thread-24780] [transport.py] [_log()] kex follows: False
2026-04-15T19:54:27.595 [DEBUG] [Thread-24780] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:54:27.596 [DEBUG] [Thread-24780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:54:27.596 [DEBUG] [Thread-24780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:54:27.596 [DEBUG] [Thread-24780] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:54:27.596 [DEBUG] [Thread-24780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:54:27.596 [DEBUG] [Thread-24780] [transport.py] [_log()] Compression: none
2026-04-15T19:54:27.596 [DEBUG] [Thread-24780] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:54:27.651 [DEBUG] [Thread-24780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:54:27.651 [DEBUG] [Thread-24780] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:54:27.652 [DEBUG] [Thread-24780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:54:27.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:54:27.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:54:27.712 [DEBUG] [Thread-24780] [transport.py] [_log()] userauth is OK
2026-04-15T19:54:27.712 [DEBUG] [Thread-24780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:54:27.712 [DEBUG] [Thread-24780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:54:27.712 [DEBUG] [Thread-24780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:54:27.713 [DEBUG] [Thread-24780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:54:27.738 [INFO] [Thread-24780] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:54:27.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:54:27.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:54:28.573 [DEBUG] [Thread-24780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:54:28.573 [DEBUG] [Thread-24780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:54:28.621 [DEBUG] [Thread-24780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:54:28.621 [DEBUG] [Thread-24780] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:54:28.630 [DEBUG] [Thread-24780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:54:28.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:54:28.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')
2026-04-15T19:54:28.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
2026-04-15T19:54:28.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:54:28.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:54:28.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:54:28.665 [DEBUG] [Thread-24780] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:54:29.553 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:54:29.554 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:54:41.741 [DEBUG] [Thread-24782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:54:56.785 [DEBUG] [Thread-24783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:54:58.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:54:58.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:54:58.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
2026-04-15T19:54:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 54, 44), 4.21415, 74.9915, 0.0, 11.9282, 9.86719, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:54:59.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:54:44
2026-04-15T19:55:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:55:00.809 [DEBUG] [Thread-24784] [transport.py] [_log()] starting thread (client mode): 0xee9c2980
2026-04-15T19:55:00.809 [DEBUG] [Thread-24784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:55:00.829 [DEBUG] [Thread-24784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:55:00.830 [INFO] [Thread-24784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:55:00.831 [DEBUG] [Thread-24784] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:55:00.831 [DEBUG] [Thread-24784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:55:00.831 [DEBUG] [Thread-24784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:55:00.831 [DEBUG] [Thread-24784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:55:00.831 [DEBUG] [Thread-24784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:55:00.831 [DEBUG] [Thread-24784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:55:00.831 [DEBUG] [Thread-24784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:55:00.831 [DEBUG] [Thread-24784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:55:00.832 [DEBUG] [Thread-24784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:55:00.832 [DEBUG] [Thread-24784] [transport.py] [_log()] client lang: <none>
2026-04-15T19:55:00.832 [DEBUG] [Thread-24784] [transport.py] [_log()] server lang: <none>
2026-04-15T19:55:00.832 [DEBUG] [Thread-24784] [transport.py] [_log()] kex follows: False
2026-04-15T19:55:00.832 [DEBUG] [Thread-24784] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:55:00.832 [DEBUG] [Thread-24784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:55:00.832 [DEBUG] [Thread-24784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:55:00.832 [DEBUG] [Thread-24784] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:55:00.832 [DEBUG] [Thread-24784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:55:00.832 [DEBUG] [Thread-24784] [transport.py] [_log()] Compression: none
2026-04-15T19:55:00.832 [DEBUG] [Thread-24784] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:55:00.853 [DEBUG] [Thread-24784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:55:00.853 [DEBUG] [Thread-24784] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:55:00.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:55:00.854 [DEBUG] [Thread-24784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:55:00.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:55:00.855 [DEBUG] [Thread-24784] [transport.py] [_log()] userauth is OK
2026-04-15T19:55:00.855 [DEBUG] [Thread-24784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:55:00.855 [DEBUG] [Thread-24784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:55:00.855 [DEBUG] [Thread-24784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:55:00.855 [DEBUG] [Thread-24784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:55:00.874 [INFO] [Thread-24784] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:55:00.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:55:01.640 [DEBUG] [Thread-24784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:55:01.641 [DEBUG] [Thread-24784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:55:01.641 [DEBUG] [Thread-24784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:55:01.683 [DEBUG] [Thread-24784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:55:01.683 [DEBUG] [Thread-24784] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:55:01.685 [DEBUG] [Thread-24784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:55:01.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:55:01.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:55:01.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:55:01.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:55:01.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:55:01.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:55:01.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:55:01.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:55:01.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:55:01.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.745966 -999.00   +9.70   9.24     78   +6.20 1 1 1 1 1     0    0 3.47 -1.20 ZNESW 10.1 9.2 303.0 10.0 10.4 -24.8 10.4 -23.5 10.0 -21.5 10.3 -23.5
2026-04-15T19:55:01.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:55:01.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:55:01.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.745966
2026-04-15T19:55:01.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:55:01.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:55:01.712 [DEBUG] [Thread-24784] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:55:01.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:55:01.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:55:01.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:55:01.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:54:44', tmtdew=4.21415, humidity=74.9915, cloud=0.0, wind=11.9282, temperature=9.86719, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:54:44', seeing=1.44, atlas_timestamp='2026-04-15T17:54:11.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0702499999999997, -0.029249999999999332, -0.04124999999999979, -0.03750000000000142, -0.03250000000000064, -0.0032499999999977547, -0.03850000000000087, -0.06925000000000026, -0.011000000000001009, -0.025000000000000355, -0.04425000000000168, -0.019999999999999574, 0.038000000000000256, 0.0022500000000000853, 0.008999999999998565, 0.006000000000000227, 0.053249999999998465, 0.019000000000000128, -0.019000000000000128, -0.025750000000000384, 0.04399999999999871, 0.0012499999999988631, -0.031749999999998835, 0.04774999999999885, 0.2289999999999992, -0.019499999999998963, -0.04625000000000057, -0.024499999999999744, 0.041999999999999815, 0.011000000000001009, 0.028999999999999915, 0.04350000000000165, 0.2157499999999999], zp_timestamp='2026-04-15T17:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:55:01.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:55:01.968 [DEBUG] [Thread-24787] [transport.py] [_log()] starting thread (client mode): 0xee907460
2026-04-15T19:55:01.968 [DEBUG] [Thread-24787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:55:01.982 [DEBUG] [Thread-24787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:55:01.982 [INFO] [Thread-24787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:55:01.990 [DEBUG] [Thread-24787] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:55:01.990 [DEBUG] [Thread-24787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:55:01.990 [DEBUG] [Thread-24787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:55:01.990 [DEBUG] [Thread-24787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:55:01.990 [DEBUG] [Thread-24787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:55:01.990 [DEBUG] [Thread-24787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:55:01.990 [DEBUG] [Thread-24787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:55:01.990 [DEBUG] [Thread-24787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:55:01.990 [DEBUG] [Thread-24787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:55:01.990 [DEBUG] [Thread-24787] [transport.py] [_log()] client lang: <none>
2026-04-15T19:55:01.990 [DEBUG] [Thread-24787] [transport.py] [_log()] server lang: <none>
2026-04-15T19:55:01.990 [DEBUG] [Thread-24787] [transport.py] [_log()] kex follows: False
2026-04-15T19:55:01.990 [DEBUG] [Thread-24787] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:55:01.990 [DEBUG] [Thread-24787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:55:01.991 [DEBUG] [Thread-24787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:55:01.991 [DEBUG] [Thread-24787] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:55:01.991 [DEBUG] [Thread-24787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:55:01.991 [DEBUG] [Thread-24787] [transport.py] [_log()] Compression: none
2026-04-15T19:55:01.991 [DEBUG] [Thread-24787] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:55:02.048 [DEBUG] [Thread-24787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:55:02.048 [DEBUG] [Thread-24787] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:55:02.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:55:02.049 [DEBUG] [Thread-24787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:55:02.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:55:02.104 [DEBUG] [Thread-24787] [transport.py] [_log()] userauth is OK
2026-04-15T19:55:02.104 [DEBUG] [Thread-24787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:55:02.104 [DEBUG] [Thread-24787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:55:02.105 [DEBUG] [Thread-24787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:55:02.105 [DEBUG] [Thread-24787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:55:02.130 [INFO] [Thread-24787] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:55:02.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:55:02.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:55:02.749 [DEBUG] [Thread-24789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:55:02.980 [DEBUG] [Thread-24787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:55:02.981 [DEBUG] [Thread-24787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:55:03.028 [DEBUG] [Thread-24787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:55:03.028 [DEBUG] [Thread-24787] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:55:03.037 [DEBUG] [Thread-24787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:55:03.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:55:03.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')
2026-04-15T19:55:03.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') -> 00000000
2026-04-15T19:55:03.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:55:03.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:55:03.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:55:03.071 [DEBUG] [Thread-24787] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:55:11.816 [DEBUG] [Thread-24790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:55:26.855 [DEBUG] [Thread-24791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:55:29.756 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:55:29.758 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:55:33.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:55:33.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:55:33.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
2026-04-15T19:55:34.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 55, 20), 4.27889, 74.3797, 0.0, 11.5405, 9.66702, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:55:34.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:55:20
2026-04-15T19:55:34.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:55:35.174 [DEBUG] [Thread-24792] [transport.py] [_log()] starting thread (client mode): 0xf13fd5a0
2026-04-15T19:55:35.174 [DEBUG] [Thread-24792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:55:35.188 [DEBUG] [Thread-24792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:55:35.188 [INFO] [Thread-24792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:55:35.191 [DEBUG] [Thread-24792] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:55:35.191 [DEBUG] [Thread-24792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:55:35.192 [DEBUG] [Thread-24792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:55:35.192 [DEBUG] [Thread-24792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:55:35.192 [DEBUG] [Thread-24792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:55:35.192 [DEBUG] [Thread-24792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:55:35.192 [DEBUG] [Thread-24792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:55:35.192 [DEBUG] [Thread-24792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:55:35.192 [DEBUG] [Thread-24792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:55:35.192 [DEBUG] [Thread-24792] [transport.py] [_log()] client lang: <none>
2026-04-15T19:55:35.192 [DEBUG] [Thread-24792] [transport.py] [_log()] server lang: <none>
2026-04-15T19:55:35.192 [DEBUG] [Thread-24792] [transport.py] [_log()] kex follows: False
2026-04-15T19:55:35.192 [DEBUG] [Thread-24792] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:55:35.192 [DEBUG] [Thread-24792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:55:35.192 [DEBUG] [Thread-24792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:55:35.193 [DEBUG] [Thread-24792] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:55:35.193 [DEBUG] [Thread-24792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:55:35.193 [DEBUG] [Thread-24792] [transport.py] [_log()] Compression: none
2026-04-15T19:55:35.193 [DEBUG] [Thread-24792] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:55:35.208 [DEBUG] [Thread-24792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:55:35.208 [DEBUG] [Thread-24792] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:55:35.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:55:35.209 [DEBUG] [Thread-24792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:55:35.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:55:35.210 [DEBUG] [Thread-24792] [transport.py] [_log()] userauth is OK
2026-04-15T19:55:35.210 [DEBUG] [Thread-24792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:55:35.210 [DEBUG] [Thread-24792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:55:35.210 [DEBUG] [Thread-24792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:55:35.210 [DEBUG] [Thread-24792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:55:35.228 [INFO] [Thread-24792] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:55:35.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:55:36.853 [DEBUG] [Thread-24792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:55:36.854 [DEBUG] [Thread-24792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:55:36.854 [DEBUG] [Thread-24792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:55:36.894 [DEBUG] [Thread-24792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:55:36.894 [DEBUG] [Thread-24792] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:55:36.897 [DEBUG] [Thread-24792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:55:36.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:55:36.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:55:36.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:55:36.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:55:36.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:55:36.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:55:36.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:55:36.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:55:36.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:55:36.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.746313 -999.00   +9.70  10.45     78   +6.20 1 1 1 1 1     0    0 3.50 -0.64 ZNESW 12.8 10.4 297.5 11.7 10.5 -24.6 10.3 -23.4 10.0 -21.5 10.4 -23.3
2026-04-15T19:55:36.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:55:36.964 [DEBUG] [Thread-24792] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:55:36.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:55:36.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.746313
2026-04-15T19:55:36.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:55:36.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:55:36.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:55:36.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:55:36.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:55:36.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:55:20', tmtdew=4.27889, humidity=74.3797, cloud=0.0, wind=11.5405, temperature=9.66702, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:55:20', seeing=1.44, atlas_timestamp='2026-04-15T17:54:41.443', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.0337499999999995, -0.06950000000000145, -0.03149999999999942, -0.013749999999999929, -0.04550000000000054, 0.005250000000000199, -0.006000000000000227, -0.018499999999999517, -0.06325000000000003, -0.009000000000000341, 0.03449999999999953, -0.006750000000000256, -0.030000000000001137, -0.006000000000000227, 0.008749999999999147, 0.01249999999999929, -0.017000000000001236, -0.014750000000001151, 0.0329999999999977, 0.008749999999999147, 0.026250000000000995, 0.0182500000000001, 0.019499999999998963, -0.02549999999999919, -0.02725000000000044, -0.057000000000000384, 0.036999999999999034, 0.018000000000000682, 0.22600000000000087, 0.045000000000001705, 0.07174999999999976], zp_timestamp='2026-04-15T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:55:37.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:55:37.231 [DEBUG] [Thread-24795] [transport.py] [_log()] starting thread (client mode): 0xee9c08e0
2026-04-15T19:55:37.232 [DEBUG] [Thread-24795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:55:37.252 [DEBUG] [Thread-24795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:55:37.252 [INFO] [Thread-24795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:55:37.266 [DEBUG] [Thread-24795] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:55:37.266 [DEBUG] [Thread-24795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:55:37.266 [DEBUG] [Thread-24795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:55:37.266 [DEBUG] [Thread-24795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:55:37.267 [DEBUG] [Thread-24795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:55:37.267 [DEBUG] [Thread-24795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:55:37.267 [DEBUG] [Thread-24795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:55:37.267 [DEBUG] [Thread-24795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:55:37.267 [DEBUG] [Thread-24795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:55:37.267 [DEBUG] [Thread-24795] [transport.py] [_log()] client lang: <none>
2026-04-15T19:55:37.267 [DEBUG] [Thread-24795] [transport.py] [_log()] server lang: <none>
2026-04-15T19:55:37.267 [DEBUG] [Thread-24795] [transport.py] [_log()] kex follows: False
2026-04-15T19:55:37.267 [DEBUG] [Thread-24795] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:55:37.267 [DEBUG] [Thread-24795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:55:37.267 [DEBUG] [Thread-24795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:55:37.268 [DEBUG] [Thread-24795] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:55:37.268 [DEBUG] [Thread-24795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:55:37.268 [DEBUG] [Thread-24795] [transport.py] [_log()] Compression: none
2026-04-15T19:55:37.268 [DEBUG] [Thread-24795] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:55:37.316 [DEBUG] [Thread-24795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:55:37.316 [DEBUG] [Thread-24795] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:55:37.317 [DEBUG] [Thread-24795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:55:37.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:55:37.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:55:37.373 [DEBUG] [Thread-24795] [transport.py] [_log()] userauth is OK
2026-04-15T19:55:37.373 [DEBUG] [Thread-24795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:55:37.373 [DEBUG] [Thread-24795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:55:37.373 [DEBUG] [Thread-24795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:55:37.373 [DEBUG] [Thread-24795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:55:37.400 [INFO] [Thread-24795] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:55:37.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:55:37.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:55:38.212 [DEBUG] [Thread-24795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:55:38.212 [DEBUG] [Thread-24795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:55:38.260 [DEBUG] [Thread-24795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:55:38.260 [DEBUG] [Thread-24795] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:55:38.269 [DEBUG] [Thread-24795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:55:38.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:55:38.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')
2026-04-15T19:55:38.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
2026-04-15T19:55:38.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:55:38.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:55:38.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:55:38.305 [DEBUG] [Thread-24795] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:55:41.886 [DEBUG] [Thread-24797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:55:56.932 [DEBUG] [Thread-24798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:56:02.937 [DEBUG] [Thread-24799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:56:08.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:56:08.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:56:08.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T19:56:09.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 55, 55), 4.33308, 74.3637, 0.0, 11.4347, 9.7007, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:56:09.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:55:55
2026-04-15T19:56:09.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:56:10.379 [DEBUG] [Thread-24800] [transport.py] [_log()] starting thread (client mode): 0xee9c18d0
2026-04-15T19:56:10.379 [DEBUG] [Thread-24800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:56:10.399 [DEBUG] [Thread-24800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:56:10.399 [INFO] [Thread-24800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:56:10.402 [DEBUG] [Thread-24800] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:56:10.402 [DEBUG] [Thread-24800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:56:10.402 [DEBUG] [Thread-24800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:56:10.402 [DEBUG] [Thread-24800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:56:10.403 [DEBUG] [Thread-24800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:56:10.403 [DEBUG] [Thread-24800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:56:10.403 [DEBUG] [Thread-24800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:56:10.403 [DEBUG] [Thread-24800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:56:10.403 [DEBUG] [Thread-24800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:56:10.403 [DEBUG] [Thread-24800] [transport.py] [_log()] client lang: <none>
2026-04-15T19:56:10.403 [DEBUG] [Thread-24800] [transport.py] [_log()] server lang: <none>
2026-04-15T19:56:10.403 [DEBUG] [Thread-24800] [transport.py] [_log()] kex follows: False
2026-04-15T19:56:10.403 [DEBUG] [Thread-24800] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:56:10.403 [DEBUG] [Thread-24800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:56:10.403 [DEBUG] [Thread-24800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:56:10.404 [DEBUG] [Thread-24800] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:56:10.404 [DEBUG] [Thread-24800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:56:10.404 [DEBUG] [Thread-24800] [transport.py] [_log()] Compression: none
2026-04-15T19:56:10.404 [DEBUG] [Thread-24800] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:56:10.420 [DEBUG] [Thread-24800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:56:10.420 [DEBUG] [Thread-24800] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:56:10.421 [DEBUG] [Thread-24800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:56:10.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:56:10.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:56:10.464 [DEBUG] [Thread-24800] [transport.py] [_log()] userauth is OK
2026-04-15T19:56:10.464 [DEBUG] [Thread-24800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:56:10.464 [DEBUG] [Thread-24800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:56:10.464 [DEBUG] [Thread-24800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:56:10.464 [DEBUG] [Thread-24800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:56:10.488 [INFO] [Thread-24800] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:56:10.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:56:11.292 [DEBUG] [Thread-24800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:56:11.292 [DEBUG] [Thread-24800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:56:11.293 [DEBUG] [Thread-24800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:56:11.333 [DEBUG] [Thread-24800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:56:11.333 [DEBUG] [Thread-24800] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:56:11.336 [DEBUG] [Thread-24800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:56:11.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:56:11.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:56:11.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:56:11.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:56:11.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:56:11.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:56:11.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:56:11.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:56:11.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:56:11.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.747008 -999.00   +9.70  10.63     78   +6.10 1 1 1 1 1     0    0 3.57 1.16 ZNESW 9.0 10.6 298.4 12.8 10.5 -24.7 10.3 -23.6 10.0 -21.4 10.4 -23.4
2026-04-15T19:56:11.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:56:11.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:56:11.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.747008
2026-04-15T19:56:11.358 [DEBUG] [Thread-24800] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:56:11.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:56:11.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:56:11.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:56:11.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:56:11.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:56:11.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:55:55', tmtdew=4.33308, humidity=74.3637, cloud=0.0, wind=11.4347, temperature=9.7007, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:55:55', seeing=1.39, atlas_timestamp='2026-04-15T17:55:41.491', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.0337499999999995, -0.06950000000000145, -0.03149999999999942, -0.013749999999999929, -0.04550000000000054, 0.005250000000000199, -0.006000000000000227, -0.018499999999999517, -0.06325000000000003, -0.009000000000000341, 0.03449999999999953, -0.006750000000000256, -0.030000000000001137, -0.006000000000000227, 0.008749999999999147, 0.01249999999999929, -0.017000000000001236, -0.014750000000001151, 0.0329999999999977, 0.008749999999999147, 0.026250000000000995, 0.0182500000000001, 0.019499999999998963, -0.02549999999999919, -0.02725000000000044, -0.057000000000000384, 0.036999999999999034, 0.018000000000000682, 0.22600000000000087, 0.045000000000001705, 0.07174999999999976], zp_timestamp='2026-04-15T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:56:11.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:56:11.614 [DEBUG] [Thread-24803] [transport.py] [_log()] starting thread (client mode): 0xee9c2e60
2026-04-15T19:56:11.615 [DEBUG] [Thread-24803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:56:11.629 [DEBUG] [Thread-24803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:56:11.629 [INFO] [Thread-24803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:56:11.636 [DEBUG] [Thread-24803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:56:11.636 [DEBUG] [Thread-24803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:56:11.636 [DEBUG] [Thread-24803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:56:11.636 [DEBUG] [Thread-24803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:56:11.636 [DEBUG] [Thread-24803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:56:11.636 [DEBUG] [Thread-24803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:56:11.637 [DEBUG] [Thread-24803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:56:11.637 [DEBUG] [Thread-24803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:56:11.637 [DEBUG] [Thread-24803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:56:11.637 [DEBUG] [Thread-24803] [transport.py] [_log()] client lang: <none>
2026-04-15T19:56:11.637 [DEBUG] [Thread-24803] [transport.py] [_log()] server lang: <none>
2026-04-15T19:56:11.637 [DEBUG] [Thread-24803] [transport.py] [_log()] kex follows: False
2026-04-15T19:56:11.637 [DEBUG] [Thread-24803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:56:11.637 [DEBUG] [Thread-24803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:56:11.637 [DEBUG] [Thread-24803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:56:11.637 [DEBUG] [Thread-24803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:56:11.637 [DEBUG] [Thread-24803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:56:11.637 [DEBUG] [Thread-24803] [transport.py] [_log()] Compression: none
2026-04-15T19:56:11.638 [DEBUG] [Thread-24803] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:56:11.692 [DEBUG] [Thread-24803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:56:11.692 [DEBUG] [Thread-24803] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:56:11.693 [DEBUG] [Thread-24803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:56:11.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:56:11.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:56:11.749 [DEBUG] [Thread-24803] [transport.py] [_log()] userauth is OK
2026-04-15T19:56:11.749 [DEBUG] [Thread-24803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:56:11.749 [DEBUG] [Thread-24803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:56:11.750 [DEBUG] [Thread-24803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:56:11.750 [DEBUG] [Thread-24803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:56:11.774 [INFO] [Thread-24803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:56:11.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:56:11.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:56:11.962 [DEBUG] [Thread-24805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:56:12.579 [DEBUG] [Thread-24803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:56:12.579 [DEBUG] [Thread-24803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:56:12.627 [DEBUG] [Thread-24803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:56:12.627 [DEBUG] [Thread-24803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:56:12.637 [DEBUG] [Thread-24803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:56:12.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:56: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')
2026-04-15T19:56:12.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
2026-04-15T19:56:12.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:56:12.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:56:12.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:56:12.671 [DEBUG] [Thread-24803] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:56:27.008 [DEBUG] [Thread-24806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:56:29.959 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:56:29.960 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:56:42.038 [DEBUG] [Thread-24807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:56:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:56:42.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:56:42.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
2026-04-15T19:56:43.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 56, 31), 4.31335, 74.4632, 0.0, 11.664, 9.68412, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:56:43.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:56:31
2026-04-15T19:56:44.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:56:44.846 [DEBUG] [Thread-24808] [transport.py] [_log()] starting thread (client mode): 0xf13fc850
2026-04-15T19:56:44.846 [DEBUG] [Thread-24808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:56:44.865 [DEBUG] [Thread-24808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:56:44.865 [INFO] [Thread-24808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:56:44.868 [DEBUG] [Thread-24808] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:56:44.868 [DEBUG] [Thread-24808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:56:44.868 [DEBUG] [Thread-24808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:56:44.868 [DEBUG] [Thread-24808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:56:44.868 [DEBUG] [Thread-24808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:56:44.868 [DEBUG] [Thread-24808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:56:44.869 [DEBUG] [Thread-24808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:56:44.869 [DEBUG] [Thread-24808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:56:44.869 [DEBUG] [Thread-24808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:56:44.869 [DEBUG] [Thread-24808] [transport.py] [_log()] client lang: <none>
2026-04-15T19:56:44.869 [DEBUG] [Thread-24808] [transport.py] [_log()] server lang: <none>
2026-04-15T19:56:44.869 [DEBUG] [Thread-24808] [transport.py] [_log()] kex follows: False
2026-04-15T19:56:44.869 [DEBUG] [Thread-24808] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:56:44.869 [DEBUG] [Thread-24808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:56:44.869 [DEBUG] [Thread-24808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:56:44.869 [DEBUG] [Thread-24808] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:56:44.869 [DEBUG] [Thread-24808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:56:44.869 [DEBUG] [Thread-24808] [transport.py] [_log()] Compression: none
2026-04-15T19:56:44.869 [DEBUG] [Thread-24808] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:56:44.891 [DEBUG] [Thread-24808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:56:44.892 [DEBUG] [Thread-24808] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:56:44.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:56:44.892 [DEBUG] [Thread-24808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:56:44.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:56:44.894 [DEBUG] [Thread-24808] [transport.py] [_log()] userauth is OK
2026-04-15T19:56:44.894 [DEBUG] [Thread-24808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:56:44.894 [DEBUG] [Thread-24808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:56:44.894 [DEBUG] [Thread-24808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:56:44.894 [DEBUG] [Thread-24808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:56:44.929 [INFO] [Thread-24808] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:56:44.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:56:45.744 [DEBUG] [Thread-24808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:56:45.744 [DEBUG] [Thread-24808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:56:45.744 [DEBUG] [Thread-24808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:56:45.785 [DEBUG] [Thread-24808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:56:45.785 [DEBUG] [Thread-24808] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:56:45.787 [DEBUG] [Thread-24808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:56:45.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:56:45.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:56:45.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:56:45.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:56:45.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:56:45.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:56:45.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:56:45.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:56:45.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:56:45.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.747355 -999.00   +9.70  12.98     78   +6.20 1 1 1 1 1     0    0 3.57 1.50 ZNESW 11.3 13.0 299.0 14.1 10.5 -24.7 10.3 -23.5 10.1 -21.5 10.3 -23.4
2026-04-15T19:56:45.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:56:45.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:56:45.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.747355
2026-04-15T19:56:45.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:56:45.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:56:45.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:56:45.806 [DEBUG] [Thread-24808] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:56:45.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:56:45.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:56:45.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:56:31', tmtdew=4.31335, humidity=74.4632, cloud=0.0, wind=11.664, temperature=9.68412, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:56:31', seeing=1.58, atlas_timestamp='2026-04-15T17:56:11.472', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.0337499999999995, -0.06950000000000145, -0.03149999999999942, -0.013749999999999929, -0.04550000000000054, 0.005250000000000199, -0.006000000000000227, -0.018499999999999517, -0.06325000000000003, -0.009000000000000341, 0.03449999999999953, -0.006750000000000256, -0.030000000000001137, -0.006000000000000227, 0.008749999999999147, 0.01249999999999929, -0.017000000000001236, -0.014750000000001151, 0.0329999999999977, 0.008749999999999147, 0.026250000000000995, 0.0182500000000001, 0.019499999999998963, -0.02549999999999919, -0.02725000000000044, -0.057000000000000384, 0.036999999999999034, 0.018000000000000682, 0.22600000000000087, 0.045000000000001705, 0.07174999999999976], zp_timestamp='2026-04-15T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:56:46.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:56:46.031 [DEBUG] [Thread-24811] [transport.py] [_log()] starting thread (client mode): 0xf13fc1f0
2026-04-15T19:56:46.031 [DEBUG] [Thread-24811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:56:46.046 [DEBUG] [Thread-24811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:56:46.046 [INFO] [Thread-24811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:56:46.053 [DEBUG] [Thread-24811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:56:46.053 [DEBUG] [Thread-24811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:56:46.054 [DEBUG] [Thread-24811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:56:46.054 [DEBUG] [Thread-24811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:56:46.054 [DEBUG] [Thread-24811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:56:46.054 [DEBUG] [Thread-24811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:56:46.054 [DEBUG] [Thread-24811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:56:46.054 [DEBUG] [Thread-24811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:56:46.054 [DEBUG] [Thread-24811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:56:46.054 [DEBUG] [Thread-24811] [transport.py] [_log()] client lang: <none>
2026-04-15T19:56:46.054 [DEBUG] [Thread-24811] [transport.py] [_log()] server lang: <none>
2026-04-15T19:56:46.054 [DEBUG] [Thread-24811] [transport.py] [_log()] kex follows: False
2026-04-15T19:56:46.054 [DEBUG] [Thread-24811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:56:46.055 [DEBUG] [Thread-24811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:56:46.055 [DEBUG] [Thread-24811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:56:46.055 [DEBUG] [Thread-24811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:56:46.055 [DEBUG] [Thread-24811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:56:46.055 [DEBUG] [Thread-24811] [transport.py] [_log()] Compression: none
2026-04-15T19:56:46.055 [DEBUG] [Thread-24811] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:56:46.109 [DEBUG] [Thread-24811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:56:46.109 [DEBUG] [Thread-24811] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:56:46.110 [DEBUG] [Thread-24811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:56:46.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:56:46.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:56:46.166 [DEBUG] [Thread-24811] [transport.py] [_log()] userauth is OK
2026-04-15T19:56:46.166 [DEBUG] [Thread-24811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:56:46.166 [DEBUG] [Thread-24811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:56:46.166 [DEBUG] [Thread-24811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:56:46.166 [DEBUG] [Thread-24811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:56:46.191 [INFO] [Thread-24811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:56:46.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:56:46.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:56:47.029 [DEBUG] [Thread-24811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:56:47.029 [DEBUG] [Thread-24811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:56:47.077 [DEBUG] [Thread-24811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:56:47.077 [DEBUG] [Thread-24811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:56:47.086 [DEBUG] [Thread-24811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:56:47.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:56:47.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')
2026-04-15T19:56:47.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
2026-04-15T19:56:47.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:56:47.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:56:47.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:56:47.121 [DEBUG] [Thread-24811] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:56:57.066 [DEBUG] [Thread-24813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:57:03.103 [DEBUG] [Thread-24814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:57:12.115 [DEBUG] [Thread-24815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:57:17.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:57:17.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:57:17.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
2026-04-15T19:57:18.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 57, 6), 4.29997, 74.5301, 0.0, 11.7169, 9.66793, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:57:18.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:57:06
2026-04-15T19:57:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:57:19.210 [DEBUG] [Thread-24816] [transport.py] [_log()] starting thread (client mode): 0xf1336170
2026-04-15T19:57:19.210 [DEBUG] [Thread-24816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:57:19.230 [DEBUG] [Thread-24816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:57:19.230 [INFO] [Thread-24816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:57:19.233 [DEBUG] [Thread-24816] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:57:19.233 [DEBUG] [Thread-24816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:57:19.233 [DEBUG] [Thread-24816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:57:19.233 [DEBUG] [Thread-24816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:57:19.234 [DEBUG] [Thread-24816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:57:19.234 [DEBUG] [Thread-24816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:57:19.234 [DEBUG] [Thread-24816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:57:19.234 [DEBUG] [Thread-24816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:57:19.234 [DEBUG] [Thread-24816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:57:19.234 [DEBUG] [Thread-24816] [transport.py] [_log()] client lang: <none>
2026-04-15T19:57:19.234 [DEBUG] [Thread-24816] [transport.py] [_log()] server lang: <none>
2026-04-15T19:57:19.234 [DEBUG] [Thread-24816] [transport.py] [_log()] kex follows: False
2026-04-15T19:57:19.234 [DEBUG] [Thread-24816] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:57:19.234 [DEBUG] [Thread-24816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:57:19.234 [DEBUG] [Thread-24816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:57:19.234 [DEBUG] [Thread-24816] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:57:19.234 [DEBUG] [Thread-24816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:57:19.234 [DEBUG] [Thread-24816] [transport.py] [_log()] Compression: none
2026-04-15T19:57:19.235 [DEBUG] [Thread-24816] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:57:19.251 [DEBUG] [Thread-24816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:57:19.252 [DEBUG] [Thread-24816] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:57:19.252 [DEBUG] [Thread-24816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:57:19.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:57:19.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:57:19.254 [DEBUG] [Thread-24816] [transport.py] [_log()] userauth is OK
2026-04-15T19:57:19.254 [DEBUG] [Thread-24816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:57:19.254 [DEBUG] [Thread-24816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:57:19.254 [DEBUG] [Thread-24816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:57:19.254 [DEBUG] [Thread-24816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:57:19.277 [INFO] [Thread-24816] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:57:19.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:57:20.040 [DEBUG] [Thread-24816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:57:20.040 [DEBUG] [Thread-24816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:57:20.040 [DEBUG] [Thread-24816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:57:20.081 [DEBUG] [Thread-24816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:57:20.081 [DEBUG] [Thread-24816] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:57:20.084 [DEBUG] [Thread-24816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:57:20.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:57:20.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:57:20.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:57:20.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:57:20.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:57:20.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:57:20.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:57:20.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:57:20.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:57:20.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.747702 -999.00   +9.70  10.73     78   +6.10 1 1 1 1 1     0    0 3.57 2.23 ZNESW 12.6 10.7 306.4 14.8 10.5 -24.6 10.3 -23.6 10.1 -21.5 10.3 -23.3
2026-04-15T19:57:20.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:57:20.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:57:20.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.747702
2026-04-15T19:57:20.110 [DEBUG] [Thread-24816] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:57:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:57:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:57:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:57:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:57:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:57:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:57:06', tmtdew=4.29997, humidity=74.5301, cloud=0.0, wind=11.7169, temperature=9.66793, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:57:07', seeing=1.37, atlas_timestamp='2026-04-15T17:56:41.453', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.0337499999999995, -0.06950000000000145, -0.03149999999999942, -0.013749999999999929, -0.04550000000000054, 0.005250000000000199, -0.006000000000000227, -0.018499999999999517, -0.06325000000000003, -0.009000000000000341, 0.03449999999999953, -0.006750000000000256, -0.030000000000001137, -0.006000000000000227, 0.008749999999999147, 0.01249999999999929, -0.017000000000001236, -0.014750000000001151, 0.0329999999999977, 0.008749999999999147, 0.026250000000000995, 0.0182500000000001, 0.019499999999998963, -0.02549999999999919, -0.02725000000000044, -0.057000000000000384, 0.036999999999999034, 0.018000000000000682, 0.22600000000000087, 0.045000000000001705, 0.07174999999999976], zp_timestamp='2026-04-15T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:57:20.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:57:20.370 [DEBUG] [Thread-24819] [transport.py] [_log()] starting thread (client mode): 0xf1337c70
2026-04-15T19:57:20.370 [DEBUG] [Thread-24819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:57:20.385 [DEBUG] [Thread-24819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:57:20.385 [INFO] [Thread-24819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:57:20.392 [DEBUG] [Thread-24819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:57:20.392 [DEBUG] [Thread-24819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:57:20.392 [DEBUG] [Thread-24819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:57:20.392 [DEBUG] [Thread-24819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:57:20.392 [DEBUG] [Thread-24819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:57:20.392 [DEBUG] [Thread-24819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:57:20.393 [DEBUG] [Thread-24819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:57:20.393 [DEBUG] [Thread-24819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:57:20.393 [DEBUG] [Thread-24819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:57:20.393 [DEBUG] [Thread-24819] [transport.py] [_log()] client lang: <none>
2026-04-15T19:57:20.393 [DEBUG] [Thread-24819] [transport.py] [_log()] server lang: <none>
2026-04-15T19:57:20.393 [DEBUG] [Thread-24819] [transport.py] [_log()] kex follows: False
2026-04-15T19:57:20.393 [DEBUG] [Thread-24819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:57:20.393 [DEBUG] [Thread-24819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:57:20.393 [DEBUG] [Thread-24819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:57:20.393 [DEBUG] [Thread-24819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:57:20.393 [DEBUG] [Thread-24819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:57:20.393 [DEBUG] [Thread-24819] [transport.py] [_log()] Compression: none
2026-04-15T19:57:20.394 [DEBUG] [Thread-24819] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:57:20.451 [DEBUG] [Thread-24819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:57:20.451 [DEBUG] [Thread-24819] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:57:20.451 [DEBUG] [Thread-24819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:57:20.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:57:20.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:57:20.506 [DEBUG] [Thread-24819] [transport.py] [_log()] userauth is OK
2026-04-15T19:57:20.506 [DEBUG] [Thread-24819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:57:20.506 [DEBUG] [Thread-24819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:57:20.506 [DEBUG] [Thread-24819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:57:20.507 [DEBUG] [Thread-24819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:57:20.529 [INFO] [Thread-24819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:57:20.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:57:20.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:57:21.346 [DEBUG] [Thread-24819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:57:21.346 [DEBUG] [Thread-24819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:57:21.394 [DEBUG] [Thread-24819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:57:21.394 [DEBUG] [Thread-24819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:57:21.403 [DEBUG] [Thread-24819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:57:21.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:57:21.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')
2026-04-15T19:57:21.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
2026-04-15T19:57:21.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:57:21.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:57:21.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:57:21.440 [DEBUG] [Thread-24819] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:57:27.145 [DEBUG] [Thread-24821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:57:30.163 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:57:30.164 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:57:42.189 [DEBUG] [Thread-24822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:57:51.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:57:51.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:57:51.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
2026-04-15T19:57:52.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 57, 42), 4.18083, 75.1597, 0.0, 11.4343, 9.83586, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:57:52.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:57:42
2026-04-15T19:57:53.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:57:53.553 [DEBUG] [Thread-24823] [transport.py] [_log()] starting thread (client mode): 0xf1336620
2026-04-15T19:57:53.554 [DEBUG] [Thread-24823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:57:53.574 [DEBUG] [Thread-24823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:57:53.575 [INFO] [Thread-24823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:57:53.578 [DEBUG] [Thread-24823] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:57:53.578 [DEBUG] [Thread-24823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:57:53.578 [DEBUG] [Thread-24823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:57:53.578 [DEBUG] [Thread-24823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:57:53.578 [DEBUG] [Thread-24823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:57:53.579 [DEBUG] [Thread-24823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:57:53.579 [DEBUG] [Thread-24823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:57:53.579 [DEBUG] [Thread-24823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:57:53.579 [DEBUG] [Thread-24823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:57:53.579 [DEBUG] [Thread-24823] [transport.py] [_log()] client lang: <none>
2026-04-15T19:57:53.579 [DEBUG] [Thread-24823] [transport.py] [_log()] server lang: <none>
2026-04-15T19:57:53.579 [DEBUG] [Thread-24823] [transport.py] [_log()] kex follows: False
2026-04-15T19:57:53.579 [DEBUG] [Thread-24823] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:57:53.579 [DEBUG] [Thread-24823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:57:53.579 [DEBUG] [Thread-24823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:57:53.579 [DEBUG] [Thread-24823] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:57:53.580 [DEBUG] [Thread-24823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:57:53.580 [DEBUG] [Thread-24823] [transport.py] [_log()] Compression: none
2026-04-15T19:57:53.580 [DEBUG] [Thread-24823] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:57:53.597 [DEBUG] [Thread-24823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:57:53.597 [DEBUG] [Thread-24823] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:57:53.597 [DEBUG] [Thread-24823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:57:53.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:57:53.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:57:53.598 [DEBUG] [Thread-24823] [transport.py] [_log()] userauth is OK
2026-04-15T19:57:53.599 [DEBUG] [Thread-24823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:57:53.599 [DEBUG] [Thread-24823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:57:53.599 [DEBUG] [Thread-24823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:57:53.599 [DEBUG] [Thread-24823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:57:53.636 [INFO] [Thread-24823] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:57:53.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:57:54.403 [DEBUG] [Thread-24823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:57:54.403 [DEBUG] [Thread-24823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:57:54.404 [DEBUG] [Thread-24823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:57:54.444 [DEBUG] [Thread-24823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:57:54.444 [DEBUG] [Thread-24823] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:57:54.447 [DEBUG] [Thread-24823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:57:54.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:57:54.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:57:54.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:57:54.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:57:54.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:57:54.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:57:54.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:57:54.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:57:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:57:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.748049 -999.00   +9.70   9.63     78   +6.20 1 1 1 1 1     0    0 3.59 2.18 ZNESW 11.3 9.6 300.3 13.1 10.4 -24.6 10.3 -23.5 10.0 -21.5 10.3 -23.4
2026-04-15T19:57:54.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:57:54.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:57:54.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.748049
2026-04-15T19:57:54.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:57:54.473 [DEBUG] [Thread-24823] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:57:54.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:57:54.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:57:54.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:57:54.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:57:54.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:57:42', tmtdew=4.18083, humidity=75.1597, cloud=0.0, wind=11.4343, temperature=9.83586, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:57:42', seeing=1.37, atlas_timestamp='2026-04-15T17:57:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.0337499999999995, -0.06950000000000145, -0.03149999999999942, -0.013749999999999929, -0.04550000000000054, 0.005250000000000199, -0.006000000000000227, -0.018499999999999517, -0.06325000000000003, -0.009000000000000341, 0.03449999999999953, -0.006750000000000256, -0.030000000000001137, -0.006000000000000227, 0.008749999999999147, 0.01249999999999929, -0.017000000000001236, -0.014750000000001151, 0.0329999999999977, 0.008749999999999147, 0.026250000000000995, 0.0182500000000001, 0.019499999999998963, -0.02549999999999919, -0.02725000000000044, -0.057000000000000384, 0.036999999999999034, 0.018000000000000682, 0.22600000000000087, 0.045000000000001705, 0.07174999999999976], zp_timestamp='2026-04-15T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:57:54.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:57:54.734 [DEBUG] [Thread-24826] [transport.py] [_log()] starting thread (client mode): 0xee9c1840
2026-04-15T19:57:54.734 [DEBUG] [Thread-24826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:57:54.748 [DEBUG] [Thread-24826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:57:54.748 [INFO] [Thread-24826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:57:54.756 [DEBUG] [Thread-24826] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:57:54.756 [DEBUG] [Thread-24826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:57:54.756 [DEBUG] [Thread-24826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:57:54.756 [DEBUG] [Thread-24826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:57:54.756 [DEBUG] [Thread-24826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:57:54.756 [DEBUG] [Thread-24826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:57:54.756 [DEBUG] [Thread-24826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:57:54.756 [DEBUG] [Thread-24826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:57:54.756 [DEBUG] [Thread-24826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:57:54.757 [DEBUG] [Thread-24826] [transport.py] [_log()] client lang: <none>
2026-04-15T19:57:54.757 [DEBUG] [Thread-24826] [transport.py] [_log()] server lang: <none>
2026-04-15T19:57:54.757 [DEBUG] [Thread-24826] [transport.py] [_log()] kex follows: False
2026-04-15T19:57:54.757 [DEBUG] [Thread-24826] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:57:54.757 [DEBUG] [Thread-24826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:57:54.757 [DEBUG] [Thread-24826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:57:54.757 [DEBUG] [Thread-24826] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:57:54.757 [DEBUG] [Thread-24826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:57:54.757 [DEBUG] [Thread-24826] [transport.py] [_log()] Compression: none
2026-04-15T19:57:54.757 [DEBUG] [Thread-24826] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:57:54.814 [DEBUG] [Thread-24826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:57:54.814 [DEBUG] [Thread-24826] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:57:54.815 [DEBUG] [Thread-24826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:57:54.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:57:54.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:57:54.873 [DEBUG] [Thread-24826] [transport.py] [_log()] userauth is OK
2026-04-15T19:57:54.873 [DEBUG] [Thread-24826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:57:54.873 [DEBUG] [Thread-24826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:57:54.873 [DEBUG] [Thread-24826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:57:54.873 [DEBUG] [Thread-24826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:57:54.899 [INFO] [Thread-24826] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:57:54.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:57:54.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:57:55.701 [DEBUG] [Thread-24826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:57:55.702 [DEBUG] [Thread-24826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:57:55.749 [DEBUG] [Thread-24826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:57:55.749 [DEBUG] [Thread-24826] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:57:55.757 [DEBUG] [Thread-24826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:57:55.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:57:55.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')
2026-04-15T19:57:55.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
2026-04-15T19:57:55.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:57:55.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:57:55.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:57:55.789 [DEBUG] [Thread-24826] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:57:57.220 [DEBUG] [Thread-24828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:58:03.257 [DEBUG] [Thread-24829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:58:12.262 [DEBUG] [Thread-24830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:58:25.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:58:25.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:58: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
2026-04-15T19:58:27.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 58, 17), 4.29247, 74.5637, 0.0, 12.299, 9.63509, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:58:27.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:58:17
2026-04-15T19:58:27.294 [DEBUG] [Thread-24831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:58:27.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:58:27.948 [DEBUG] [Thread-24832] [transport.py] [_log()] starting thread (client mode): 0xf1335990
2026-04-15T19:58:27.948 [DEBUG] [Thread-24832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:58:27.968 [DEBUG] [Thread-24832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:58:27.968 [INFO] [Thread-24832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:58:27.971 [DEBUG] [Thread-24832] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:58:27.971 [DEBUG] [Thread-24832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:58:27.971 [DEBUG] [Thread-24832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:58:27.971 [DEBUG] [Thread-24832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:58:27.971 [DEBUG] [Thread-24832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:58:27.971 [DEBUG] [Thread-24832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:58:27.971 [DEBUG] [Thread-24832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:58:27.972 [DEBUG] [Thread-24832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:58:27.972 [DEBUG] [Thread-24832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:58:27.972 [DEBUG] [Thread-24832] [transport.py] [_log()] client lang: <none>
2026-04-15T19:58:27.972 [DEBUG] [Thread-24832] [transport.py] [_log()] server lang: <none>
2026-04-15T19:58:27.972 [DEBUG] [Thread-24832] [transport.py] [_log()] kex follows: False
2026-04-15T19:58:27.972 [DEBUG] [Thread-24832] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:58:27.972 [DEBUG] [Thread-24832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:58:27.972 [DEBUG] [Thread-24832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:58:27.972 [DEBUG] [Thread-24832] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:58:27.972 [DEBUG] [Thread-24832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:58:27.972 [DEBUG] [Thread-24832] [transport.py] [_log()] Compression: none
2026-04-15T19:58:27.973 [DEBUG] [Thread-24832] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:58:27.989 [DEBUG] [Thread-24832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:58:27.989 [DEBUG] [Thread-24832] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:58:27.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:58:27.990 [DEBUG] [Thread-24832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:58:27.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:58:27.991 [DEBUG] [Thread-24832] [transport.py] [_log()] userauth is OK
2026-04-15T19:58:27.991 [DEBUG] [Thread-24832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:58:27.991 [DEBUG] [Thread-24832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:58:27.991 [DEBUG] [Thread-24832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:58:27.991 [DEBUG] [Thread-24832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:58:28.015 [INFO] [Thread-24832] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:58:28.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:58:28.597 [DEBUG] [Thread-24832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:58:28.598 [DEBUG] [Thread-24832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:58:28.598 [DEBUG] [Thread-24832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:58:28.638 [DEBUG] [Thread-24832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:58:28.638 [DEBUG] [Thread-24832] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:58:28.641 [DEBUG] [Thread-24832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:58:28.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:58:28.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:58:28.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:58:28.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:58:28.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:58:28.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:58:28.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:58:28.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:58:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:58:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.748744 -999.00   +9.70  10.24     78   +6.20 1 1 1 1 1     0    0 3.56 1.12 ZNESW 11.1 10.2 298.0 13.6 10.5 -24.5 10.3 -23.3 10.0 -21.4 10.3 -23.1
2026-04-15T19:58:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:58:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:58:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.748744
2026-04-15T19:58:28.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:58:28.665 [DEBUG] [Thread-24832] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:58:28.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:58:28.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:58:28.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:58:28.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:58:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:58:17', tmtdew=4.29247, humidity=74.5637, cloud=0.0, wind=12.299, temperature=9.63509, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:58:17', seeing=1.2, atlas_timestamp='2026-04-15T17:58:11.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.0337499999999995, -0.06950000000000145, -0.03149999999999942, -0.013749999999999929, -0.04550000000000054, 0.005250000000000199, -0.006000000000000227, -0.018499999999999517, -0.06325000000000003, -0.009000000000000341, 0.03449999999999953, -0.006750000000000256, -0.030000000000001137, -0.006000000000000227, 0.008749999999999147, 0.01249999999999929, -0.017000000000001236, -0.014750000000001151, 0.0329999999999977, 0.008749999999999147, 0.026250000000000995, 0.0182500000000001, 0.019499999999998963, -0.02549999999999919, -0.02725000000000044, -0.057000000000000384, 0.036999999999999034, 0.018000000000000682, 0.22600000000000087, 0.045000000000001705, 0.07174999999999976], zp_timestamp='2026-04-15T17:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:58:28.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:58:28.921 [DEBUG] [Thread-24835] [transport.py] [_log()] starting thread (client mode): 0xf13fde40
2026-04-15T19:58:28.921 [DEBUG] [Thread-24835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:58:28.935 [DEBUG] [Thread-24835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:58:28.935 [INFO] [Thread-24835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:58:28.942 [DEBUG] [Thread-24835] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:58:28.942 [DEBUG] [Thread-24835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:58:28.943 [DEBUG] [Thread-24835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:58:28.943 [DEBUG] [Thread-24835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:58:28.943 [DEBUG] [Thread-24835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:58:28.943 [DEBUG] [Thread-24835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:58:28.943 [DEBUG] [Thread-24835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:58:28.943 [DEBUG] [Thread-24835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:58:28.943 [DEBUG] [Thread-24835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:58:28.943 [DEBUG] [Thread-24835] [transport.py] [_log()] client lang: <none>
2026-04-15T19:58:28.943 [DEBUG] [Thread-24835] [transport.py] [_log()] server lang: <none>
2026-04-15T19:58:28.943 [DEBUG] [Thread-24835] [transport.py] [_log()] kex follows: False
2026-04-15T19:58:28.943 [DEBUG] [Thread-24835] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:58:28.943 [DEBUG] [Thread-24835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:58:28.944 [DEBUG] [Thread-24835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:58:28.944 [DEBUG] [Thread-24835] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:58:28.944 [DEBUG] [Thread-24835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:58:28.944 [DEBUG] [Thread-24835] [transport.py] [_log()] Compression: none
2026-04-15T19:58:28.944 [DEBUG] [Thread-24835] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:58:28.997 [DEBUG] [Thread-24835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:58:28.998 [DEBUG] [Thread-24835] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:58:28.998 [DEBUG] [Thread-24835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:58:28.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:58:28.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:58:29.055 [DEBUG] [Thread-24835] [transport.py] [_log()] userauth is OK
2026-04-15T19:58:29.055 [DEBUG] [Thread-24835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:58:29.055 [DEBUG] [Thread-24835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:58:29.055 [DEBUG] [Thread-24835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:58:29.055 [DEBUG] [Thread-24835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:58:29.072 [INFO] [Thread-24835] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:58:29.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:58:29.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:58:29.910 [DEBUG] [Thread-24835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:58:29.910 [DEBUG] [Thread-24835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:58:29.958 [DEBUG] [Thread-24835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:58:29.958 [DEBUG] [Thread-24835] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:58:29.967 [DEBUG] [Thread-24835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:58:29.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:58:29.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')
2026-04-15T19:58:29.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
2026-04-15T19:58:29.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:58:29.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:58:29.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:58:29.999 [DEBUG] [Thread-24835] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:58:30.365 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:58:30.366 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:58:42.326 [DEBUG] [Thread-24837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:58:57.368 [DEBUG] [Thread-24838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:58:59.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:58:59.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:59:00.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
2026-04-15T19:59:01.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 58, 53), 4.17857, 75.1605, 0.0, 13.3042, 9.77018, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:59:01.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:58:53
2026-04-15T19:59:01.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:59:02.178 [DEBUG] [Thread-24839] [transport.py] [_log()] starting thread (client mode): 0xf13fcbe0
2026-04-15T19:59:02.178 [DEBUG] [Thread-24839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:59:02.198 [DEBUG] [Thread-24839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:59:02.198 [INFO] [Thread-24839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:59:02.201 [DEBUG] [Thread-24839] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:59:02.201 [DEBUG] [Thread-24839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:59:02.201 [DEBUG] [Thread-24839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:59:02.201 [DEBUG] [Thread-24839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:59:02.201 [DEBUG] [Thread-24839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:59:02.201 [DEBUG] [Thread-24839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:59:02.201 [DEBUG] [Thread-24839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:59:02.202 [DEBUG] [Thread-24839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:59:02.202 [DEBUG] [Thread-24839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:59:02.202 [DEBUG] [Thread-24839] [transport.py] [_log()] client lang: <none>
2026-04-15T19:59:02.202 [DEBUG] [Thread-24839] [transport.py] [_log()] server lang: <none>
2026-04-15T19:59:02.202 [DEBUG] [Thread-24839] [transport.py] [_log()] kex follows: False
2026-04-15T19:59:02.202 [DEBUG] [Thread-24839] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:59:02.202 [DEBUG] [Thread-24839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:59:02.202 [DEBUG] [Thread-24839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:59:02.202 [DEBUG] [Thread-24839] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:59:02.202 [DEBUG] [Thread-24839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:59:02.202 [DEBUG] [Thread-24839] [transport.py] [_log()] Compression: none
2026-04-15T19:59:02.202 [DEBUG] [Thread-24839] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:59:02.219 [DEBUG] [Thread-24839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:59:02.219 [DEBUG] [Thread-24839] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:59:02.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:59:02.219 [DEBUG] [Thread-24839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:59:02.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:59:02.220 [DEBUG] [Thread-24839] [transport.py] [_log()] userauth is OK
2026-04-15T19:59:02.221 [DEBUG] [Thread-24839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:59:02.221 [DEBUG] [Thread-24839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:59:02.221 [DEBUG] [Thread-24839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:59:02.221 [DEBUG] [Thread-24839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:59:02.244 [INFO] [Thread-24839] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:59:02.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:59:02.900 [DEBUG] [Thread-24839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:59:02.900 [DEBUG] [Thread-24839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:59:02.901 [DEBUG] [Thread-24839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:59:02.941 [DEBUG] [Thread-24839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:59:02.941 [DEBUG] [Thread-24839] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:59:02.944 [DEBUG] [Thread-24839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:59:02.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:59:02.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:59:02.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:59:02.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:59:02.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:59:02.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:59:02.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:59:02.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:59:02.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:59:02.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.749091 -999.00   +9.70   9.89     78   +6.20 1 1 1 1 1     0    0 3.61 1.14 ZNESW 9.7 9.9 299.6 12.7 10.5 -24.5 10.3 -23.5 10.0 -21.4 10.3 -23.3
2026-04-15T19:59:02.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:59:02.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:59:02.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.749091
2026-04-15T19:59:02.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:59:02.967 [DEBUG] [Thread-24839] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:59:02.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:59:02.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:59:02.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:59:02.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:59:02.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:58:53', tmtdew=4.17857, humidity=75.1605, cloud=0.0, wind=13.3042, temperature=9.77018, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:58:53', seeing=1.17, atlas_timestamp='2026-04-15T17:58:41.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.0337499999999995, -0.06950000000000145, -0.03149999999999942, -0.013749999999999929, -0.04550000000000054, 0.005250000000000199, -0.006000000000000227, -0.018499999999999517, -0.06325000000000003, -0.009000000000000341, 0.03449999999999953, -0.006750000000000256, -0.030000000000001137, -0.006000000000000227, 0.008749999999999147, 0.01249999999999929, -0.017000000000001236, -0.014750000000001151, 0.0329999999999977, 0.008749999999999147, 0.026250000000000995, 0.0182500000000001, 0.019499999999998963, -0.02549999999999919, -0.02725000000000044, -0.057000000000000384, 0.036999999999999034, 0.018000000000000682, 0.22600000000000087, 0.045000000000001705, 0.07174999999999976], zp_timestamp='2026-04-15T17:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:59:03.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:59:03.225 [DEBUG] [Thread-24842] [transport.py] [_log()] starting thread (client mode): 0xf13fd7b0
2026-04-15T19:59:03.225 [DEBUG] [Thread-24842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:59:03.239 [DEBUG] [Thread-24842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:59:03.239 [INFO] [Thread-24842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:59:03.247 [DEBUG] [Thread-24842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:59:03.247 [DEBUG] [Thread-24842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:59:03.247 [DEBUG] [Thread-24842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:59:03.247 [DEBUG] [Thread-24842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:59:03.247 [DEBUG] [Thread-24842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:59:03.247 [DEBUG] [Thread-24842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:59:03.247 [DEBUG] [Thread-24842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:59:03.247 [DEBUG] [Thread-24842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:59:03.247 [DEBUG] [Thread-24842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:59:03.247 [DEBUG] [Thread-24842] [transport.py] [_log()] client lang: <none>
2026-04-15T19:59:03.247 [DEBUG] [Thread-24842] [transport.py] [_log()] server lang: <none>
2026-04-15T19:59:03.248 [DEBUG] [Thread-24842] [transport.py] [_log()] kex follows: False
2026-04-15T19:59:03.248 [DEBUG] [Thread-24842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:59:03.248 [DEBUG] [Thread-24842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:59:03.248 [DEBUG] [Thread-24842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:59:03.248 [DEBUG] [Thread-24842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:59:03.248 [DEBUG] [Thread-24842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:59:03.248 [DEBUG] [Thread-24842] [transport.py] [_log()] Compression: none
2026-04-15T19:59:03.248 [DEBUG] [Thread-24842] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:59:03.302 [DEBUG] [Thread-24842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:59:03.303 [DEBUG] [Thread-24842] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:59:03.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:59:03.304 [DEBUG] [Thread-24842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:59:03.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:59:03.359 [DEBUG] [Thread-24842] [transport.py] [_log()] userauth is OK
2026-04-15T19:59:03.359 [DEBUG] [Thread-24842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:59:03.359 [DEBUG] [Thread-24842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:59:03.359 [DEBUG] [Thread-24842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:59:03.359 [DEBUG] [Thread-24842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:59:03.377 [INFO] [Thread-24842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:59:03.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:59:03.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:59:03.441 [DEBUG] [Thread-24844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:59:04.236 [DEBUG] [Thread-24842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:59:04.236 [DEBUG] [Thread-24842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:59:04.283 [DEBUG] [Thread-24842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:59:04.284 [DEBUG] [Thread-24842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:59:04.292 [DEBUG] [Thread-24842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:59:04.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:59: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')
2026-04-15T19:59:04.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
2026-04-15T19:59:04.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:59:04.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:59:04.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:59:04.323 [DEBUG] [Thread-24842] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:59:12.400 [DEBUG] [Thread-24845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:59:27.438 [DEBUG] [Thread-24846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:59:30.571 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:59:30.572 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:59:34.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T19:59:34.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T19:59:34.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
2026-04-15T19:59:35.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 59, 28), 4.30888, 74.4811, 0.0, 11.6816, 9.65193, 0, 0, 0, 2, 0, 0),)
2026-04-15T19:59:35.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:59:28
2026-04-15T19:59:36.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T19:59:36.487 [DEBUG] [Thread-24847] [transport.py] [_log()] starting thread (client mode): 0xf1337160
2026-04-15T19:59:36.488 [DEBUG] [Thread-24847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:59:36.507 [DEBUG] [Thread-24847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T19:59:36.507 [INFO] [Thread-24847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T19:59:36.510 [DEBUG] [Thread-24847] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:59:36.511 [DEBUG] [Thread-24847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T19:59:36.511 [DEBUG] [Thread-24847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:59:36.511 [DEBUG] [Thread-24847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:59:36.511 [DEBUG] [Thread-24847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:59:36.511 [DEBUG] [Thread-24847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:59:36.511 [DEBUG] [Thread-24847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:59:36.511 [DEBUG] [Thread-24847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:59:36.511 [DEBUG] [Thread-24847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:59:36.511 [DEBUG] [Thread-24847] [transport.py] [_log()] client lang: <none>
2026-04-15T19:59:36.511 [DEBUG] [Thread-24847] [transport.py] [_log()] server lang: <none>
2026-04-15T19:59:36.511 [DEBUG] [Thread-24847] [transport.py] [_log()] kex follows: False
2026-04-15T19:59:36.512 [DEBUG] [Thread-24847] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:59:36.512 [DEBUG] [Thread-24847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:59:36.512 [DEBUG] [Thread-24847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:59:36.512 [DEBUG] [Thread-24847] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:59:36.512 [DEBUG] [Thread-24847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:59:36.512 [DEBUG] [Thread-24847] [transport.py] [_log()] Compression: none
2026-04-15T19:59:36.512 [DEBUG] [Thread-24847] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:59:36.529 [DEBUG] [Thread-24847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:59:36.529 [DEBUG] [Thread-24847] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:59:36.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T19:59:36.530 [DEBUG] [Thread-24847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T19:59:36.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:59:36.531 [DEBUG] [Thread-24847] [transport.py] [_log()] userauth is OK
2026-04-15T19:59:36.531 [DEBUG] [Thread-24847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:59:36.531 [DEBUG] [Thread-24847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:59:36.531 [DEBUG] [Thread-24847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T19:59:36.532 [DEBUG] [Thread-24847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:59:36.567 [INFO] [Thread-24847] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:59:36.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:59:37.172 [DEBUG] [Thread-24847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:59:37.173 [DEBUG] [Thread-24847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:59:37.173 [DEBUG] [Thread-24847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T19:59:37.213 [DEBUG] [Thread-24847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:59:37.213 [DEBUG] [Thread-24847] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:59:37.217 [DEBUG] [Thread-24847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:59:37.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:59:37.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T19:59:37.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T19:59:37.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T19:59:37.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:59:37.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T19:59:37.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:59:37.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:59:37.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T19:59:37.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.749438 -999.00   +9.70  11.02     78   +6.20 1 1 1 1 1     0    0 3.61 1.23 ZNESW 11.1 11.0 297.4 12.8 10.4 -24.6 10.3 -23.4 10.1 -21.6 10.3 -23.2
2026-04-15T19:59:37.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T19:59:37.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T19:59:37.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.749438
2026-04-15T19:59:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T19:59:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T19:59:37.244 [DEBUG] [Thread-24847] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:59:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T19:59:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T19:59:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T19:59:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:59:28', tmtdew=4.30888, humidity=74.4811, cloud=0.0, wind=11.6816, temperature=9.65193, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T19:59:29', seeing=1.04, atlas_timestamp='2026-04-15T17:59:11.443', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.0337499999999995, -0.06950000000000145, -0.03149999999999942, -0.013749999999999929, -0.04550000000000054, 0.005250000000000199, -0.006000000000000227, -0.018499999999999517, -0.06325000000000003, -0.009000000000000341, 0.03449999999999953, -0.006750000000000256, -0.030000000000001137, -0.006000000000000227, 0.008749999999999147, 0.01249999999999929, -0.017000000000001236, -0.014750000000001151, 0.0329999999999977, 0.008749999999999147, 0.026250000000000995, 0.0182500000000001, 0.019499999999998963, -0.02549999999999919, -0.02725000000000044, -0.057000000000000384, 0.036999999999999034, 0.018000000000000682, 0.22600000000000087, 0.045000000000001705, 0.07174999999999976], zp_timestamp='2026-04-15T17:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T19:59:37.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T19:59:37.509 [DEBUG] [Thread-24850] [transport.py] [_log()] starting thread (client mode): 0xee9c3280
2026-04-15T19:59:37.509 [DEBUG] [Thread-24850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T19:59:37.523 [DEBUG] [Thread-24850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T19:59:37.523 [INFO] [Thread-24850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T19:59:37.531 [DEBUG] [Thread-24850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T19:59:37.531 [DEBUG] [Thread-24850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T19:59:37.531 [DEBUG] [Thread-24850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T19:59:37.531 [DEBUG] [Thread-24850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:59:37.531 [DEBUG] [Thread-24850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T19:59:37.531 [DEBUG] [Thread-24850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:59:37.531 [DEBUG] [Thread-24850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T19:59:37.531 [DEBUG] [Thread-24850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T19:59:37.531 [DEBUG] [Thread-24850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T19:59:37.532 [DEBUG] [Thread-24850] [transport.py] [_log()] client lang: <none>
2026-04-15T19:59:37.532 [DEBUG] [Thread-24850] [transport.py] [_log()] server lang: <none>
2026-04-15T19:59:37.532 [DEBUG] [Thread-24850] [transport.py] [_log()] kex follows: False
2026-04-15T19:59:37.532 [DEBUG] [Thread-24850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T19:59:37.532 [DEBUG] [Thread-24850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T19:59:37.532 [DEBUG] [Thread-24850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T19:59:37.532 [DEBUG] [Thread-24850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T19:59:37.532 [DEBUG] [Thread-24850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T19:59:37.532 [DEBUG] [Thread-24850] [transport.py] [_log()] Compression: none
2026-04-15T19:59:37.532 [DEBUG] [Thread-24850] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T19:59:37.587 [DEBUG] [Thread-24850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T19:59:37.587 [DEBUG] [Thread-24850] [transport.py] [_log()] Switch to new keys ...
2026-04-15T19:59:37.588 [DEBUG] [Thread-24850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T19:59:37.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T19:59:37.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T19:59:37.644 [DEBUG] [Thread-24850] [transport.py] [_log()] userauth is OK
2026-04-15T19:59:37.644 [DEBUG] [Thread-24850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T19:59:37.644 [DEBUG] [Thread-24850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T19:59:37.644 [DEBUG] [Thread-24850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T19:59:37.645 [DEBUG] [Thread-24850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T19:59:37.667 [INFO] [Thread-24850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T19:59:37.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T19:59:37.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T19:59:38.560 [DEBUG] [Thread-24850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T19:59:38.560 [DEBUG] [Thread-24850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T19:59:38.607 [DEBUG] [Thread-24850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T19:59:38.607 [DEBUG] [Thread-24850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T19:59:38.616 [DEBUG] [Thread-24850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T19:59:38.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T19:59:38.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')
2026-04-15T19:59:38.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
2026-04-15T19:59:38.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T19:59:38.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T19:59:38.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T19:59:38.650 [DEBUG] [Thread-24850] [transport.py] [_log()] EOF in transport thread
2026-04-15T19:59:42.469 [DEBUG] [Thread-24852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T19:59:57.511 [DEBUG] [Thread-24853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:00:03.581 [DEBUG] [Thread-24854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:00:08.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:00:08.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:00:08.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
2026-04-15T20:00:10.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 19, 59, 28), 4.30888, 74.4811, 0.0, 11.6816, 9.65193, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:00:10.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 19:59:28
2026-04-15T20:00:10.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:00:10.911 [DEBUG] [Thread-24855] [transport.py] [_log()] starting thread (client mode): 0xf13fec20
2026-04-15T20:00:10.912 [DEBUG] [Thread-24855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:00:10.929 [DEBUG] [Thread-24855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:00:10.929 [INFO] [Thread-24855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:00:10.931 [DEBUG] [Thread-24855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:00:10.931 [DEBUG] [Thread-24855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:00:10.931 [DEBUG] [Thread-24855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:00:10.932 [DEBUG] [Thread-24855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:00:10.932 [DEBUG] [Thread-24855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:00:10.932 [DEBUG] [Thread-24855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:00:10.932 [DEBUG] [Thread-24855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:00:10.932 [DEBUG] [Thread-24855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:00:10.932 [DEBUG] [Thread-24855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:00:10.932 [DEBUG] [Thread-24855] [transport.py] [_log()] client lang: <none>
2026-04-15T20:00:10.933 [DEBUG] [Thread-24855] [transport.py] [_log()] server lang: <none>
2026-04-15T20:00:10.933 [DEBUG] [Thread-24855] [transport.py] [_log()] kex follows: False
2026-04-15T20:00:10.933 [DEBUG] [Thread-24855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:00:10.933 [DEBUG] [Thread-24855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:00:10.933 [DEBUG] [Thread-24855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:00:10.933 [DEBUG] [Thread-24855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:00:10.933 [DEBUG] [Thread-24855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:00:10.934 [DEBUG] [Thread-24855] [transport.py] [_log()] Compression: none
2026-04-15T20:00:10.934 [DEBUG] [Thread-24855] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:00:10.947 [DEBUG] [Thread-24855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:00:10.947 [DEBUG] [Thread-24855] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:00:10.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:00:10.948 [DEBUG] [Thread-24855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:00:10.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:00:10.949 [DEBUG] [Thread-24855] [transport.py] [_log()] userauth is OK
2026-04-15T20:00:10.949 [DEBUG] [Thread-24855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:00:10.949 [DEBUG] [Thread-24855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:00:10.949 [DEBUG] [Thread-24855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:00:10.949 [DEBUG] [Thread-24855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:00:10.972 [INFO] [Thread-24855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:00:10.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:00:11.843 [DEBUG] [Thread-24855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:00:11.844 [DEBUG] [Thread-24855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:00:11.844 [DEBUG] [Thread-24855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:00:11.884 [DEBUG] [Thread-24855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:00:11.884 [DEBUG] [Thread-24855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:00:11.886 [DEBUG] [Thread-24855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:00:11.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:00:11.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:00:11.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:00:11.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:00:11.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:00:11.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:00:11.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:00:11.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:00:11.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:00:11.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.749785 -999.00   +9.70  10.52     78   +6.20 1 1 1 1 1     0    0 3.60 1.39 ZNESW 9.2 10.5 294.4 12.8 10.5 -24.5 10.3 -23.4 10.0 -21.5 10.3 -23.2
2026-04-15T20:00:11.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:00:11.910 [DEBUG] [Thread-24855] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:00:11.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:00:11.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.749785
2026-04-15T20:00:11.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:00:11.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:00:11.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:00:11.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:00:11.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:00:11.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T19:59:28', tmtdew=4.30888, humidity=74.4811, cloud=0.0, wind=11.6816, temperature=9.65193, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:00:04', seeing=1.04, atlas_timestamp='2026-04-15T17:59:41.424', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.0337499999999995, -0.06950000000000145, -0.03149999999999942, -0.013749999999999929, -0.04550000000000054, 0.005250000000000199, -0.006000000000000227, -0.018499999999999517, -0.06325000000000003, -0.009000000000000341, 0.03449999999999953, -0.006750000000000256, -0.030000000000001137, -0.006000000000000227, 0.008749999999999147, 0.01249999999999929, -0.017000000000001236, -0.014750000000001151, 0.0329999999999977, 0.008749999999999147, 0.026250000000000995, 0.0182500000000001, 0.019499999999998963, -0.02549999999999919, -0.02725000000000044, -0.057000000000000384, 0.036999999999999034, 0.018000000000000682, 0.22600000000000087, 0.045000000000001705, 0.07174999999999976], zp_timestamp='2026-04-15T17:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:00:12.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:00:12.177 [DEBUG] [Thread-24858] [transport.py] [_log()] starting thread (client mode): 0xf13524d0
2026-04-15T20:00:12.177 [DEBUG] [Thread-24858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:00:12.191 [DEBUG] [Thread-24858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:00:12.191 [INFO] [Thread-24858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:00:12.198 [DEBUG] [Thread-24858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:00:12.198 [DEBUG] [Thread-24858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:00:12.198 [DEBUG] [Thread-24858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:00:12.198 [DEBUG] [Thread-24858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:00:12.198 [DEBUG] [Thread-24858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:00:12.198 [DEBUG] [Thread-24858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:00:12.198 [DEBUG] [Thread-24858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:00:12.199 [DEBUG] [Thread-24858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:00:12.199 [DEBUG] [Thread-24858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:00:12.199 [DEBUG] [Thread-24858] [transport.py] [_log()] client lang: <none>
2026-04-15T20:00:12.199 [DEBUG] [Thread-24858] [transport.py] [_log()] server lang: <none>
2026-04-15T20:00:12.199 [DEBUG] [Thread-24858] [transport.py] [_log()] kex follows: False
2026-04-15T20:00:12.199 [DEBUG] [Thread-24858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:00:12.199 [DEBUG] [Thread-24858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:00:12.199 [DEBUG] [Thread-24858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:00:12.199 [DEBUG] [Thread-24858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:00:12.199 [DEBUG] [Thread-24858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:00:12.199 [DEBUG] [Thread-24858] [transport.py] [_log()] Compression: none
2026-04-15T20:00:12.199 [DEBUG] [Thread-24858] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:00:12.255 [DEBUG] [Thread-24858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:00:12.255 [DEBUG] [Thread-24858] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:00:12.256 [DEBUG] [Thread-24858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:00:12.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:00:12.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:00:12.312 [DEBUG] [Thread-24858] [transport.py] [_log()] userauth is OK
2026-04-15T20:00:12.312 [DEBUG] [Thread-24858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:00:12.312 [DEBUG] [Thread-24858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:00:12.312 [DEBUG] [Thread-24858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:00:12.312 [DEBUG] [Thread-24858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:00:12.329 [INFO] [Thread-24858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:00:12.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:00:12.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:00:12.540 [DEBUG] [Thread-24860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:00:13.151 [DEBUG] [Thread-24858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:00:13.151 [DEBUG] [Thread-24858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:00:13.199 [DEBUG] [Thread-24858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:00:13.199 [DEBUG] [Thread-24858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:00:13.208 [DEBUG] [Thread-24858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:00:13.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:00:13.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')
2026-04-15T20:00:13.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
2026-04-15T20:00:13.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:00:13.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:00:13.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:00:13.243 [DEBUG] [Thread-24858] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:00:13.703 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:00:16.862 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:00:21.902 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:00:27.278 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:00:27.583 [DEBUG] [Thread-24861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:00:30.774 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:00:30.775 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:00:42.615 [DEBUG] [Thread-24862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:00:43.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:00:43.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:00:43.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
2026-04-15T20:00:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 0, 4), 4.30995, 74.4811, 0.0, 11.47, 9.6851, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:00:44.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:00:04
2026-04-15T20:00:44.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:00:45.442 [DEBUG] [Thread-24863] [transport.py] [_log()] starting thread (client mode): 0xf13357e0
2026-04-15T20:00:45.442 [DEBUG] [Thread-24863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:00:45.461 [DEBUG] [Thread-24863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:00:45.461 [INFO] [Thread-24863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:00:45.464 [DEBUG] [Thread-24863] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:00:45.464 [DEBUG] [Thread-24863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] client lang: <none>
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] server lang: <none>
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] kex follows: False
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] Compression: none
2026-04-15T20:00:45.465 [DEBUG] [Thread-24863] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:00:45.481 [DEBUG] [Thread-24863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:00:45.482 [DEBUG] [Thread-24863] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:00:45.482 [DEBUG] [Thread-24863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:00:45.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:00:45.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:00:45.483 [DEBUG] [Thread-24863] [transport.py] [_log()] userauth is OK
2026-04-15T20:00:45.483 [DEBUG] [Thread-24863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:00:45.483 [DEBUG] [Thread-24863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:00:45.483 [DEBUG] [Thread-24863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:00:45.483 [DEBUG] [Thread-24863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:00:45.502 [INFO] [Thread-24863] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:00:45.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:00:46.142 [DEBUG] [Thread-24863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:00:46.142 [DEBUG] [Thread-24863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:00:46.142 [DEBUG] [Thread-24863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:00:46.183 [DEBUG] [Thread-24863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:00:46.183 [DEBUG] [Thread-24863] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:00:46.185 [DEBUG] [Thread-24863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:00:46.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:00:46.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:00:46.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:00:46.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:00:46.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:00:46.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:00:46.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:00:46.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:00:46.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:00:46.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.750132 -999.00   +9.70  11.35     78   +6.20 1 1 1 1 1     0    0 3.65 1.35 ZNESW 10.2 11.3 310.6 13.6 10.4 -24.4 10.3 -23.4 10.0 -21.4 10.4 -23.6
2026-04-15T20:00:46.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:00:46.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:00:46.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.750132
2026-04-15T20:00:46.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:00:46.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:00:46.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:00:46.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:00:46.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:00:46.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:00:04', tmtdew=4.30995, humidity=74.4811, cloud=0.0, wind=11.47, temperature=9.6851, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:00:39', seeing=1.04, atlas_timestamp='2026-04-15T18:00:11.405', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.0337499999999995, -0.06950000000000145, -0.03149999999999942, -0.013749999999999929, -0.04550000000000054, 0.005250000000000199, -0.006000000000000227, -0.018499999999999517, -0.06325000000000003, -0.009000000000000341, 0.03449999999999953, -0.006750000000000256, -0.030000000000001137, -0.006000000000000227, 0.008749999999999147, 0.01249999999999929, -0.017000000000001236, -0.014750000000001151, 0.0329999999999977, 0.008749999999999147, 0.026250000000000995, 0.0182500000000001, 0.019499999999998963, -0.02549999999999919, -0.02725000000000044, -0.057000000000000384, 0.036999999999999034, 0.018000000000000682, 0.22600000000000087, 0.045000000000001705, 0.07174999999999976], zp_timestamp='2026-04-15T17:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:00:46.205 [DEBUG] [Thread-24863] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:00:46.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:00:46.424 [DEBUG] [Thread-24866] [transport.py] [_log()] starting thread (client mode): 0xf1335750
2026-04-15T20:00:46.424 [DEBUG] [Thread-24866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:00:46.438 [DEBUG] [Thread-24866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:00:46.438 [INFO] [Thread-24866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:00:46.445 [DEBUG] [Thread-24866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:00:46.446 [DEBUG] [Thread-24866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:00:46.446 [DEBUG] [Thread-24866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:00:46.446 [DEBUG] [Thread-24866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:00:46.446 [DEBUG] [Thread-24866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:00:46.446 [DEBUG] [Thread-24866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:00:46.446 [DEBUG] [Thread-24866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:00:46.446 [DEBUG] [Thread-24866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:00:46.446 [DEBUG] [Thread-24866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:00:46.446 [DEBUG] [Thread-24866] [transport.py] [_log()] client lang: <none>
2026-04-15T20:00:46.446 [DEBUG] [Thread-24866] [transport.py] [_log()] server lang: <none>
2026-04-15T20:00:46.446 [DEBUG] [Thread-24866] [transport.py] [_log()] kex follows: False
2026-04-15T20:00:46.446 [DEBUG] [Thread-24866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:00:46.447 [DEBUG] [Thread-24866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:00:46.447 [DEBUG] [Thread-24866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:00:46.447 [DEBUG] [Thread-24866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:00:46.447 [DEBUG] [Thread-24866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:00:46.447 [DEBUG] [Thread-24866] [transport.py] [_log()] Compression: none
2026-04-15T20:00:46.447 [DEBUG] [Thread-24866] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:00:46.503 [DEBUG] [Thread-24866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:00:46.503 [DEBUG] [Thread-24866] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:00:46.504 [DEBUG] [Thread-24866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:00:46.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:00:46.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:00:46.560 [DEBUG] [Thread-24866] [transport.py] [_log()] userauth is OK
2026-04-15T20:00:46.561 [DEBUG] [Thread-24866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:00:46.561 [DEBUG] [Thread-24866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:00:46.561 [DEBUG] [Thread-24866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:00:46.561 [DEBUG] [Thread-24866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:00:46.581 [INFO] [Thread-24866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:00:46.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:00:46.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:00:46.758 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:00:47.390 [DEBUG] [Thread-24866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:00:47.390 [DEBUG] [Thread-24866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:00:47.438 [DEBUG] [Thread-24866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:00:47.438 [DEBUG] [Thread-24866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:00:47.447 [DEBUG] [Thread-24866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:00:47.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:00:47.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')
2026-04-15T20:00:47.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
2026-04-15T20:00:47.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:00:47.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:00:47.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:00:47.482 [DEBUG] [Thread-24866] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:00:51.131 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:00:57.646 [DEBUG] [Thread-24868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:01:03.741 [DEBUG] [Thread-24869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:01:10.619 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:01:12.690 [DEBUG] [Thread-24870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:01:15.010 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:01:17.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:01:17.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:01:17.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
2026-04-15T20:01:18.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 0, 39), 4.21344, 74.9958, 0.0, 12.2458, 9.87062, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:01:18.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:00:39
2026-04-15T20:01:19.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:01:19.775 [DEBUG] [Thread-24871] [transport.py] [_log()] starting thread (client mode): 0xf13341f0
2026-04-15T20:01:19.775 [DEBUG] [Thread-24871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:01:19.794 [DEBUG] [Thread-24871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:01:19.795 [INFO] [Thread-24871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] client lang: <none>
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] server lang: <none>
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] kex follows: False
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:01:19.798 [DEBUG] [Thread-24871] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:01:19.799 [DEBUG] [Thread-24871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:01:19.799 [DEBUG] [Thread-24871] [transport.py] [_log()] Compression: none
2026-04-15T20:01:19.799 [DEBUG] [Thread-24871] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:01:19.815 [DEBUG] [Thread-24871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:01:19.815 [DEBUG] [Thread-24871] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:01:19.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:01:19.816 [DEBUG] [Thread-24871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:01:19.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:01:19.860 [DEBUG] [Thread-24871] [transport.py] [_log()] userauth is OK
2026-04-15T20:01:19.860 [DEBUG] [Thread-24871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:01:19.860 [DEBUG] [Thread-24871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:01:19.860 [DEBUG] [Thread-24871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:01:19.860 [DEBUG] [Thread-24871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:01:19.879 [INFO] [Thread-24871] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:01:19.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:01:20.511 [DEBUG] [Thread-24871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:01:20.511 [DEBUG] [Thread-24871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:01:20.512 [DEBUG] [Thread-24871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:01:20.552 [DEBUG] [Thread-24871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:01:20.552 [DEBUG] [Thread-24871] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:01:20.555 [DEBUG] [Thread-24871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:01:20.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:01:20.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:01:20.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:01:20.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:01:20.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:01:20.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:01:20.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:01:20.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:01:20.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:01:20.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.750480 -999.00   +9.70  11.97     78   +6.20 1 1 1 1 1     0    0 3.56 1.06 ZNESW 12.7 12.0 311.8 14.5 10.4 -24.5 10.3 -23.3 10.0 -21.5 10.3 -23.3
2026-04-15T20:01:20.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:01:20.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:01:20.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.750480
2026-04-15T20:01:20.581 [DEBUG] [Thread-24871] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:01:20.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:01:20.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:01:20.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:01:20.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:01:20.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:01:20.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:00:39', tmtdew=4.21344, humidity=74.9958, cloud=0.0, wind=12.2458, temperature=9.87062, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:01:15', seeing=1.19, atlas_timestamp='2026-04-15T18:00:41.472', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07425000000000104, -0.0417500000000004, -0.0337499999999995, -0.06950000000000145, -0.03149999999999942, -0.013749999999999929, -0.04550000000000054, 0.005250000000000199, -0.006000000000000227, -0.018499999999999517, -0.06325000000000003, -0.009000000000000341, 0.03449999999999953, -0.006750000000000256, -0.030000000000001137, -0.006000000000000227, 0.008749999999999147, 0.01249999999999929, -0.017000000000001236, -0.014750000000001151, 0.0329999999999977, 0.008749999999999147, 0.026250000000000995, 0.0182500000000001, 0.019499999999998963, -0.02549999999999919, -0.02725000000000044, -0.057000000000000384, 0.036999999999999034, 0.018000000000000682, 0.22600000000000087, 0.045000000000001705, 0.07174999999999976], zp_timestamp='2026-04-15T17:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:01:20.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:01:20.840 [DEBUG] [Thread-24874] [transport.py] [_log()] starting thread (client mode): 0xf1336d70
2026-04-15T20:01:20.840 [DEBUG] [Thread-24874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:01:20.855 [DEBUG] [Thread-24874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:01:20.855 [INFO] [Thread-24874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:01:20.862 [DEBUG] [Thread-24874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:01:20.862 [DEBUG] [Thread-24874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:01:20.863 [DEBUG] [Thread-24874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:01:20.863 [DEBUG] [Thread-24874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:01:20.863 [DEBUG] [Thread-24874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:01:20.863 [DEBUG] [Thread-24874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:01:20.863 [DEBUG] [Thread-24874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:01:20.863 [DEBUG] [Thread-24874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:01:20.863 [DEBUG] [Thread-24874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:01:20.863 [DEBUG] [Thread-24874] [transport.py] [_log()] client lang: <none>
2026-04-15T20:01:20.863 [DEBUG] [Thread-24874] [transport.py] [_log()] server lang: <none>
2026-04-15T20:01:20.863 [DEBUG] [Thread-24874] [transport.py] [_log()] kex follows: False
2026-04-15T20:01:20.863 [DEBUG] [Thread-24874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:01:20.863 [DEBUG] [Thread-24874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:01:20.863 [DEBUG] [Thread-24874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:01:20.864 [DEBUG] [Thread-24874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:01:20.864 [DEBUG] [Thread-24874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:01:20.864 [DEBUG] [Thread-24874] [transport.py] [_log()] Compression: none
2026-04-15T20:01:20.864 [DEBUG] [Thread-24874] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:01:20.920 [DEBUG] [Thread-24874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:01:20.920 [DEBUG] [Thread-24874] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:01:20.921 [DEBUG] [Thread-24874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:01:20.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:01:20.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:01:20.977 [DEBUG] [Thread-24874] [transport.py] [_log()] userauth is OK
2026-04-15T20:01:20.977 [DEBUG] [Thread-24874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:01:20.977 [DEBUG] [Thread-24874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:01:20.977 [DEBUG] [Thread-24874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:01:20.977 [DEBUG] [Thread-24874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:01:21.000 [INFO] [Thread-24874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:01:21.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:01:21.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:01:21.135 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:01:21.811 [DEBUG] [Thread-24874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:01:21.812 [DEBUG] [Thread-24874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:01:21.859 [DEBUG] [Thread-24874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:01:21.859 [DEBUG] [Thread-24874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:01:21.868 [DEBUG] [Thread-24874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:01:21.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:01:21.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')
2026-04-15T20:01:21.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
2026-04-15T20:01:21.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:01:21.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:01:21.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:01:21.903 [DEBUG] [Thread-24874] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:01:25.539 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:01:27.722 [DEBUG] [Thread-24876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:01:30.977 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:01:30.978 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:01:42.764 [DEBUG] [Thread-24877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:01:51.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:01:51.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:01:51.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
2026-04-15T20:01:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 1, 15), 4.31522, 74.4482, 0.0, 11.858, 9.65214, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:01:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:01:15
2026-04-15T20:01:53.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:01:54.202 [DEBUG] [Thread-24878] [transport.py] [_log()] starting thread (client mode): 0xf13e0190
2026-04-15T20:01:54.202 [DEBUG] [Thread-24878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:01:54.217 [DEBUG] [Thread-24878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:01:54.218 [INFO] [Thread-24878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:01:54.219 [DEBUG] [Thread-24878] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:01:54.219 [DEBUG] [Thread-24878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:01:54.219 [DEBUG] [Thread-24878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:01:54.219 [DEBUG] [Thread-24878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:01:54.219 [DEBUG] [Thread-24878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:01:54.219 [DEBUG] [Thread-24878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:01:54.220 [DEBUG] [Thread-24878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:01:54.220 [DEBUG] [Thread-24878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:01:54.220 [DEBUG] [Thread-24878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:01:54.220 [DEBUG] [Thread-24878] [transport.py] [_log()] client lang: <none>
2026-04-15T20:01:54.220 [DEBUG] [Thread-24878] [transport.py] [_log()] server lang: <none>
2026-04-15T20:01:54.220 [DEBUG] [Thread-24878] [transport.py] [_log()] kex follows: False
2026-04-15T20:01:54.220 [DEBUG] [Thread-24878] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:01:54.220 [DEBUG] [Thread-24878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:01:54.220 [DEBUG] [Thread-24878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:01:54.220 [DEBUG] [Thread-24878] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:01:54.220 [DEBUG] [Thread-24878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:01:54.221 [DEBUG] [Thread-24878] [transport.py] [_log()] Compression: none
2026-04-15T20:01:54.221 [DEBUG] [Thread-24878] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:01:54.229 [DEBUG] [Thread-24878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:01:54.229 [DEBUG] [Thread-24878] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:01:54.230 [DEBUG] [Thread-24878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:01:54.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:01:54.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:01:54.231 [DEBUG] [Thread-24878] [transport.py] [_log()] userauth is OK
2026-04-15T20:01:54.231 [DEBUG] [Thread-24878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:01:54.231 [DEBUG] [Thread-24878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:01:54.231 [DEBUG] [Thread-24878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:01:54.232 [DEBUG] [Thread-24878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:01:54.247 [INFO] [Thread-24878] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:01:54.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:01:54.841 [DEBUG] [Thread-24878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:01:54.841 [DEBUG] [Thread-24878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:01:54.842 [DEBUG] [Thread-24878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:01:54.882 [DEBUG] [Thread-24878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:01:54.882 [DEBUG] [Thread-24878] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:01:54.885 [DEBUG] [Thread-24878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:01:54.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:01:54.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:01:54.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:01:54.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:01:54.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:01:54.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:01:54.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:01:54.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:01:54.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:01:54.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.751174 -999.00   +9.70   8.77     78   +6.20 1 1 1 1 1     0    0 3.57 0.68 ZNESW 9.0 8.8 304.4 13.9 10.4 -24.4 10.3 -23.4 10.0 -21.4 10.3 -23.3
2026-04-15T20:01:54.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:01:54.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:01:54.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.751174
2026-04-15T20:01:54.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:01:54.912 [DEBUG] [Thread-24878] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:01:54.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:01:54.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:01:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:01:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:01:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:01:15', tmtdew=4.31522, humidity=74.4482, cloud=0.0, wind=11.858, temperature=9.65214, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:01:51', seeing=1.25, atlas_timestamp='2026-04-15T18:01:41.434', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0912500000000005, -0.0547500000000003, -0.0727499999999992, -0.057500000000000995, -0.024499999999999744, -0.003249999999999531, -0.02549999999999919, -0.02474999999999916, -0.046499999999999986, -0.02800000000000047, -0.0757500000000011, -0.019999999999999574, 0.02200000000000024, -0.01425000000000054, 0.009999999999999787, 0.11299999999999955, 0.03575000000000017, 0.009499999999999176, -0.025000000000000355, -0.02975000000000172, 0.0009999999999994458, -0.04275000000000162, 0.04075000000000095, 0.22375000000000078, 0.019499999999998963, -0.0365000000000002, -0.051249999999999574, -0.033500000000000085, 0.008000000000000895, 0.005500000000001393, 0.18200000000000038, 0.16100000000000136, 0.004249999999998977], zp_timestamp='2026-04-15T17:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:01:55.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:01:55.177 [DEBUG] [Thread-24881] [transport.py] [_log()] starting thread (client mode): 0xf13cb3d0
2026-04-15T20:01:55.177 [DEBUG] [Thread-24881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:01:55.191 [DEBUG] [Thread-24881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:01:55.192 [INFO] [Thread-24881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:01:55.199 [DEBUG] [Thread-24881] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:01:55.199 [DEBUG] [Thread-24881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:01:55.199 [DEBUG] [Thread-24881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:01:55.199 [DEBUG] [Thread-24881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:01:55.199 [DEBUG] [Thread-24881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:01:55.199 [DEBUG] [Thread-24881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:01:55.199 [DEBUG] [Thread-24881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:01:55.199 [DEBUG] [Thread-24881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:01:55.200 [DEBUG] [Thread-24881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:01:55.200 [DEBUG] [Thread-24881] [transport.py] [_log()] client lang: <none>
2026-04-15T20:01:55.200 [DEBUG] [Thread-24881] [transport.py] [_log()] server lang: <none>
2026-04-15T20:01:55.200 [DEBUG] [Thread-24881] [transport.py] [_log()] kex follows: False
2026-04-15T20:01:55.200 [DEBUG] [Thread-24881] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:01:55.200 [DEBUG] [Thread-24881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:01:55.200 [DEBUG] [Thread-24881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:01:55.200 [DEBUG] [Thread-24881] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:01:55.200 [DEBUG] [Thread-24881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:01:55.200 [DEBUG] [Thread-24881] [transport.py] [_log()] Compression: none
2026-04-15T20:01:55.200 [DEBUG] [Thread-24881] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:01:55.256 [DEBUG] [Thread-24881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:01:55.257 [DEBUG] [Thread-24881] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:01:55.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:01:55.257 [DEBUG] [Thread-24881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:01:55.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:01:55.313 [DEBUG] [Thread-24881] [transport.py] [_log()] userauth is OK
2026-04-15T20:01:55.313 [DEBUG] [Thread-24881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:01:55.313 [DEBUG] [Thread-24881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:01:55.313 [DEBUG] [Thread-24881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:01:55.313 [DEBUG] [Thread-24881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:01:55.330 [INFO] [Thread-24881] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:01:55.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:01:55.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:01:56.139 [DEBUG] [Thread-24881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:01:56.139 [DEBUG] [Thread-24881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:01:56.187 [DEBUG] [Thread-24881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:01:56.187 [DEBUG] [Thread-24881] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:01:56.196 [DEBUG] [Thread-24881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:01:56.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:01:56.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T20:01:56.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
2026-04-15T20:01:56.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:01:56.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:01:56.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:01:56.228 [DEBUG] [Thread-24881] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:01:57.795 [DEBUG] [Thread-24883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:02:03.907 [DEBUG] [Thread-24884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:02:12.841 [DEBUG] [Thread-24885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:02:26.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:02:26.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:02:26.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
2026-04-15T20:02:27.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 1, 51), 4.21868, 74.9631, 0.0, 10.9757, 9.83778, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:02:27.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:01:51
2026-04-15T20:02:27.871 [DEBUG] [Thread-24886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:02:28.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:02:28.512 [DEBUG] [Thread-24887] [transport.py] [_log()] starting thread (client mode): 0xf13fd5a0
2026-04-15T20:02:28.512 [DEBUG] [Thread-24887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:02:28.532 [DEBUG] [Thread-24887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:02:28.532 [INFO] [Thread-24887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:02:28.535 [DEBUG] [Thread-24887] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:02:28.535 [DEBUG] [Thread-24887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:02:28.535 [DEBUG] [Thread-24887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:02:28.535 [DEBUG] [Thread-24887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:02:28.535 [DEBUG] [Thread-24887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:02:28.536 [DEBUG] [Thread-24887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:02:28.536 [DEBUG] [Thread-24887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:02:28.536 [DEBUG] [Thread-24887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:02:28.536 [DEBUG] [Thread-24887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:02:28.536 [DEBUG] [Thread-24887] [transport.py] [_log()] client lang: <none>
2026-04-15T20:02:28.536 [DEBUG] [Thread-24887] [transport.py] [_log()] server lang: <none>
2026-04-15T20:02:28.536 [DEBUG] [Thread-24887] [transport.py] [_log()] kex follows: False
2026-04-15T20:02:28.536 [DEBUG] [Thread-24887] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:02:28.536 [DEBUG] [Thread-24887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:02:28.536 [DEBUG] [Thread-24887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:02:28.536 [DEBUG] [Thread-24887] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:02:28.536 [DEBUG] [Thread-24887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:02:28.536 [DEBUG] [Thread-24887] [transport.py] [_log()] Compression: none
2026-04-15T20:02:28.536 [DEBUG] [Thread-24887] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:02:28.552 [DEBUG] [Thread-24887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:02:28.553 [DEBUG] [Thread-24887] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:02:28.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:02:28.554 [DEBUG] [Thread-24887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:02:28.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:02:28.555 [DEBUG] [Thread-24887] [transport.py] [_log()] userauth is OK
2026-04-15T20:02:28.555 [DEBUG] [Thread-24887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:02:28.555 [DEBUG] [Thread-24887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:02:28.555 [DEBUG] [Thread-24887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:02:28.555 [DEBUG] [Thread-24887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:02:28.575 [INFO] [Thread-24887] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:02:28.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:02:29.216 [DEBUG] [Thread-24887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:02:29.216 [DEBUG] [Thread-24887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:02:29.217 [DEBUG] [Thread-24887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:02:29.257 [DEBUG] [Thread-24887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:02:29.257 [DEBUG] [Thread-24887] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:02:29.260 [DEBUG] [Thread-24887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:02:29.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:02:29.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:02:29.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:02:29.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:02:29.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:02:29.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:02:29.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:02:29.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:02:29.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:02:29.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.751521 -999.00   +9.70   9.42     78   +6.20 1 1 1 1 1     0    0 3.56 0.23 ZNESW 11.8 9.4 300.6 14.3 10.4 -24.4 10.3 -23.5 10.0 -21.4 10.3 -23.2
2026-04-15T20:02:29.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:02:29.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:02:29.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.751521
2026-04-15T20:02:29.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:02:29.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:02:29.286 [DEBUG] [Thread-24887] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:02:29.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:02:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:02:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:02:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:01:51', tmtdew=4.21868, humidity=74.9631, cloud=0.0, wind=10.9757, temperature=9.83778, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:01:51', seeing=1.25, atlas_timestamp='2026-04-15T18:02:11.414', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0912500000000005, -0.0547500000000003, -0.0727499999999992, -0.057500000000000995, -0.024499999999999744, -0.003249999999999531, -0.02549999999999919, -0.02474999999999916, -0.046499999999999986, -0.02800000000000047, -0.0757500000000011, -0.019999999999999574, 0.02200000000000024, -0.01425000000000054, 0.009999999999999787, 0.11299999999999955, 0.03575000000000017, 0.009499999999999176, -0.025000000000000355, -0.02975000000000172, 0.0009999999999994458, -0.04275000000000162, 0.04075000000000095, 0.22375000000000078, 0.019499999999998963, -0.0365000000000002, -0.051249999999999574, -0.033500000000000085, 0.008000000000000895, 0.005500000000001393, 0.18200000000000038, 0.16100000000000136, 0.004249999999998977], zp_timestamp='2026-04-15T17:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:02:29.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:02:29.542 [DEBUG] [Thread-24890] [transport.py] [_log()] starting thread (client mode): 0xf13e0190
2026-04-15T20:02:29.542 [DEBUG] [Thread-24890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:02:29.557 [DEBUG] [Thread-24890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:02:29.557 [INFO] [Thread-24890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:02:29.564 [DEBUG] [Thread-24890] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:02:29.564 [DEBUG] [Thread-24890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:02:29.564 [DEBUG] [Thread-24890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:02:29.565 [DEBUG] [Thread-24890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:02:29.565 [DEBUG] [Thread-24890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:02:29.565 [DEBUG] [Thread-24890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:02:29.565 [DEBUG] [Thread-24890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:02:29.565 [DEBUG] [Thread-24890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:02:29.565 [DEBUG] [Thread-24890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:02:29.565 [DEBUG] [Thread-24890] [transport.py] [_log()] client lang: <none>
2026-04-15T20:02:29.565 [DEBUG] [Thread-24890] [transport.py] [_log()] server lang: <none>
2026-04-15T20:02:29.565 [DEBUG] [Thread-24890] [transport.py] [_log()] kex follows: False
2026-04-15T20:02:29.565 [DEBUG] [Thread-24890] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:02:29.565 [DEBUG] [Thread-24890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:02:29.565 [DEBUG] [Thread-24890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:02:29.566 [DEBUG] [Thread-24890] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:02:29.566 [DEBUG] [Thread-24890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:02:29.566 [DEBUG] [Thread-24890] [transport.py] [_log()] Compression: none
2026-04-15T20:02:29.566 [DEBUG] [Thread-24890] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:02:29.621 [DEBUG] [Thread-24890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:02:29.622 [DEBUG] [Thread-24890] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:02:29.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:02:29.622 [DEBUG] [Thread-24890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:02:29.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:02:29.677 [DEBUG] [Thread-24890] [transport.py] [_log()] userauth is OK
2026-04-15T20:02:29.678 [DEBUG] [Thread-24890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:02:29.678 [DEBUG] [Thread-24890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:02:29.678 [DEBUG] [Thread-24890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:02:29.678 [DEBUG] [Thread-24890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:02:29.698 [INFO] [Thread-24890] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:02:29.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:02:29.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:02:30.483 [DEBUG] [Thread-24890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:02:30.483 [DEBUG] [Thread-24890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:02:30.530 [DEBUG] [Thread-24890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:02:30.531 [DEBUG] [Thread-24890] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:02:30.540 [DEBUG] [Thread-24890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:02:30.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:02: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')
2026-04-15T20:02:30.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
2026-04-15T20:02:30.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:02:30.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:02:30.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:02:30.575 [DEBUG] [Thread-24890] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:02:31.180 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:02:31.181 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:02:33.856 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:02:37.965 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:02:42.902 [DEBUG] [Thread-24892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:02:44.358 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:02:49.819 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:02:55.236 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:02:57.945 [DEBUG] [Thread-24893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:00.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:03:00.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:03:00.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T20:03:00.942 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:01.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 2, 26), 4.29974, 74.5314, 0.0, 8.91144, 9.66902, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:03:01.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:02:26
2026-04-15T20:03:02.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:03:02.740 [DEBUG] [Thread-24894] [transport.py] [_log()] starting thread (client mode): 0xf13e0d30
2026-04-15T20:03:02.740 [DEBUG] [Thread-24894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:03:02.761 [DEBUG] [Thread-24894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:03:02.761 [INFO] [Thread-24894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:03:02.765 [DEBUG] [Thread-24894] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:03:02.765 [DEBUG] [Thread-24894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:03:02.765 [DEBUG] [Thread-24894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:03:02.765 [DEBUG] [Thread-24894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:03:02.765 [DEBUG] [Thread-24894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:03:02.765 [DEBUG] [Thread-24894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:03:02.765 [DEBUG] [Thread-24894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:03:02.765 [DEBUG] [Thread-24894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:03:02.766 [DEBUG] [Thread-24894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:03:02.766 [DEBUG] [Thread-24894] [transport.py] [_log()] client lang: <none>
2026-04-15T20:03:02.766 [DEBUG] [Thread-24894] [transport.py] [_log()] server lang: <none>
2026-04-15T20:03:02.766 [DEBUG] [Thread-24894] [transport.py] [_log()] kex follows: False
2026-04-15T20:03:02.766 [DEBUG] [Thread-24894] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:03:02.766 [DEBUG] [Thread-24894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:03:02.766 [DEBUG] [Thread-24894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:03:02.766 [DEBUG] [Thread-24894] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:03:02.766 [DEBUG] [Thread-24894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:03:02.766 [DEBUG] [Thread-24894] [transport.py] [_log()] Compression: none
2026-04-15T20:03:02.766 [DEBUG] [Thread-24894] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:03:02.783 [DEBUG] [Thread-24894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:03:02.783 [DEBUG] [Thread-24894] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:03:02.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:03:02.784 [DEBUG] [Thread-24894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:03:02.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:03:02.785 [DEBUG] [Thread-24894] [transport.py] [_log()] userauth is OK
2026-04-15T20:03:02.785 [DEBUG] [Thread-24894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:03:02.786 [DEBUG] [Thread-24894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:03:02.786 [DEBUG] [Thread-24894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:03:02.786 [DEBUG] [Thread-24894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:03:02.820 [INFO] [Thread-24894] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:03:02.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:03:03.460 [DEBUG] [Thread-24894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:03:03.460 [DEBUG] [Thread-24894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:03:03.460 [DEBUG] [Thread-24894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:03:03.501 [DEBUG] [Thread-24894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:03:03.501 [DEBUG] [Thread-24894] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:03:03.504 [DEBUG] [Thread-24894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:03:03.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:03:03.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:03:03.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:03:03.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:03:03.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:03:03.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:03:03.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:03:03.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:03:03.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:03:03.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.751868 -999.00   +9.70  11.41     78   +6.20 1 1 1 1 1     0    0 3.55 -0.10 ZNESW 10.4 11.4 302.8 12.7 10.4 -24.5 10.3 -23.4 10.0 -21.4 10.3 -23.3
2026-04-15T20:03:03.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:03:03.527 [DEBUG] [Thread-24894] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:03:03.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:03:03.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.751868
2026-04-15T20:03:03.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:03:03.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:03:03.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:03:03.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:03:03.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:03:03.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:02:26', tmtdew=4.29974, humidity=74.5314, cloud=0.0, wind=8.91144, temperature=9.66902, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:02:27', seeing=1.02, atlas_timestamp='2026-04-15T18:02:41.395', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0912500000000005, -0.0547500000000003, -0.0727499999999992, -0.057500000000000995, -0.024499999999999744, -0.003249999999999531, -0.02549999999999919, -0.02474999999999916, -0.046499999999999986, -0.02800000000000047, -0.0757500000000011, -0.019999999999999574, 0.02200000000000024, -0.01425000000000054, 0.009999999999999787, 0.11299999999999955, 0.03575000000000017, 0.009499999999999176, -0.025000000000000355, -0.02975000000000172, 0.0009999999999994458, -0.04275000000000162, 0.04075000000000095, 0.22375000000000078, 0.019499999999998963, -0.0365000000000002, -0.051249999999999574, -0.033500000000000085, 0.008000000000000895, 0.005500000000001393, 0.18200000000000038, 0.16100000000000136, 0.004249999999998977], zp_timestamp='2026-04-15T17:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:03:03.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:03:03.795 [DEBUG] [Thread-24897] [transport.py] [_log()] starting thread (client mode): 0xf1352dd0
2026-04-15T20:03:03.795 [DEBUG] [Thread-24897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:03:03.809 [DEBUG] [Thread-24897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:03:03.809 [INFO] [Thread-24897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:03:03.817 [DEBUG] [Thread-24897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:03:03.817 [DEBUG] [Thread-24897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:03:03.817 [DEBUG] [Thread-24897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:03:03.817 [DEBUG] [Thread-24897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:03:03.817 [DEBUG] [Thread-24897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:03:03.817 [DEBUG] [Thread-24897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:03:03.817 [DEBUG] [Thread-24897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:03:03.817 [DEBUG] [Thread-24897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:03:03.817 [DEBUG] [Thread-24897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:03:03.818 [DEBUG] [Thread-24897] [transport.py] [_log()] client lang: <none>
2026-04-15T20:03:03.818 [DEBUG] [Thread-24897] [transport.py] [_log()] server lang: <none>
2026-04-15T20:03:03.818 [DEBUG] [Thread-24897] [transport.py] [_log()] kex follows: False
2026-04-15T20:03:03.818 [DEBUG] [Thread-24897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:03:03.818 [DEBUG] [Thread-24897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:03:03.818 [DEBUG] [Thread-24897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:03:03.818 [DEBUG] [Thread-24897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:03:03.818 [DEBUG] [Thread-24897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:03:03.818 [DEBUG] [Thread-24897] [transport.py] [_log()] Compression: none
2026-04-15T20:03:03.818 [DEBUG] [Thread-24897] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:03:03.874 [DEBUG] [Thread-24897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:03:03.874 [DEBUG] [Thread-24897] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:03:03.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:03:03.875 [DEBUG] [Thread-24897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:03:03.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:03:03.930 [DEBUG] [Thread-24897] [transport.py] [_log()] userauth is OK
2026-04-15T20:03:03.930 [DEBUG] [Thread-24897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:03:03.930 [DEBUG] [Thread-24897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:03:03.930 [DEBUG] [Thread-24897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:03:03.930 [DEBUG] [Thread-24897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:03:03.950 [INFO] [Thread-24897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:03:03.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:03:03.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:03:04.058 [DEBUG] [Thread-24899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:04.766 [DEBUG] [Thread-24897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:03:04.766 [DEBUG] [Thread-24897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:03:04.814 [DEBUG] [Thread-24897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:03:04.814 [DEBUG] [Thread-24897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:03:04.823 [DEBUG] [Thread-24897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:03:04.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:03:04.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')
2026-04-15T20:03:04.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
2026-04-15T20:03:04.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:03:04.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:03:04.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:03:04.858 [DEBUG] [Thread-24897] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:03:06.434 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:11.940 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:12.974 [DEBUG] [Thread-24900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:17.346 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:22.749 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:28.012 [DEBUG] [Thread-24901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:28.394 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:31.383 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:31.384 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:33.823 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:34.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:03:34.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:03:34.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
2026-04-15T20:03:36.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 3, 2), 4.28647, 74.5978, 0.0, 9.3348, 9.65244, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:03:36.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:03:02
2026-04-15T20:03:36.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:03:36.931 [DEBUG] [Thread-24902] [transport.py] [_log()] starting thread (client mode): 0xee9c0220
2026-04-15T20:03:36.932 [DEBUG] [Thread-24902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:03:36.951 [DEBUG] [Thread-24902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:03:36.951 [INFO] [Thread-24902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:03:36.955 [DEBUG] [Thread-24902] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:03:36.955 [DEBUG] [Thread-24902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:03:36.955 [DEBUG] [Thread-24902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:03:36.955 [DEBUG] [Thread-24902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:03:36.955 [DEBUG] [Thread-24902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:03:36.955 [DEBUG] [Thread-24902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:03:36.955 [DEBUG] [Thread-24902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:03:36.955 [DEBUG] [Thread-24902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:03:36.955 [DEBUG] [Thread-24902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:03:36.955 [DEBUG] [Thread-24902] [transport.py] [_log()] client lang: <none>
2026-04-15T20:03:36.956 [DEBUG] [Thread-24902] [transport.py] [_log()] server lang: <none>
2026-04-15T20:03:36.956 [DEBUG] [Thread-24902] [transport.py] [_log()] kex follows: False
2026-04-15T20:03:36.956 [DEBUG] [Thread-24902] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:03:36.956 [DEBUG] [Thread-24902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:03:36.956 [DEBUG] [Thread-24902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:03:36.956 [DEBUG] [Thread-24902] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:03:36.956 [DEBUG] [Thread-24902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:03:36.956 [DEBUG] [Thread-24902] [transport.py] [_log()] Compression: none
2026-04-15T20:03:36.956 [DEBUG] [Thread-24902] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:03:36.974 [DEBUG] [Thread-24902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:03:36.974 [DEBUG] [Thread-24902] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:03:36.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:03:36.975 [DEBUG] [Thread-24902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:03:36.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:03:36.976 [DEBUG] [Thread-24902] [transport.py] [_log()] userauth is OK
2026-04-15T20:03:36.976 [DEBUG] [Thread-24902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:03:36.977 [DEBUG] [Thread-24902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:03:36.977 [DEBUG] [Thread-24902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:03:36.977 [DEBUG] [Thread-24902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:03:37.013 [INFO] [Thread-24902] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:03:37.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:03:37.656 [DEBUG] [Thread-24902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:03:37.657 [DEBUG] [Thread-24902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:03:37.657 [DEBUG] [Thread-24902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:03:37.698 [DEBUG] [Thread-24902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:03:37.698 [DEBUG] [Thread-24902] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:03:37.701 [DEBUG] [Thread-24902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:03:37.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:03:37.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:03:37.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:03:37.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:03:37.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:03:37.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:03:37.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:03:37.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:03:37.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:03:37.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.752216 -999.00   +9.70  10.23     78   +6.20 1 1 1 1 1     0    0 3.54 -0.53 ZNESW 12.6 10.2 315.2 12.3 10.4 -24.4 10.3 -23.4 10.0 -21.4 10.3 -23.3
2026-04-15T20:03:37.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:03:37.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:03:37.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.752216
2026-04-15T20:03:37.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:03:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:03:37.727 [DEBUG] [Thread-24902] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:03:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:03:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:03:37.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:03:37.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:03:02', tmtdew=4.28647, humidity=74.5978, cloud=0.0, wind=9.3348, temperature=9.65244, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:03:02', seeing=1.15, atlas_timestamp='2026-04-15T18:03:11.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0912500000000005, -0.0547500000000003, -0.0727499999999992, -0.057500000000000995, -0.024499999999999744, -0.003249999999999531, -0.02549999999999919, -0.02474999999999916, -0.046499999999999986, -0.02800000000000047, -0.0757500000000011, -0.019999999999999574, 0.02200000000000024, -0.01425000000000054, 0.009999999999999787, 0.11299999999999955, 0.03575000000000017, 0.009499999999999176, -0.025000000000000355, -0.02975000000000172, 0.0009999999999994458, -0.04275000000000162, 0.04075000000000095, 0.22375000000000078, 0.019499999999998963, -0.0365000000000002, -0.051249999999999574, -0.033500000000000085, 0.008000000000000895, 0.005500000000001393, 0.18200000000000038, 0.16100000000000136, 0.004249999999998977], zp_timestamp='2026-04-15T17:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:03:37.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:03:37.991 [DEBUG] [Thread-24905] [transport.py] [_log()] starting thread (client mode): 0xf13e0a00
2026-04-15T20:03:37.991 [DEBUG] [Thread-24905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:03:38.010 [DEBUG] [Thread-24905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:03:38.010 [INFO] [Thread-24905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:03:38.018 [DEBUG] [Thread-24905] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:03:38.018 [DEBUG] [Thread-24905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:03:38.018 [DEBUG] [Thread-24905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:03:38.018 [DEBUG] [Thread-24905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:03:38.018 [DEBUG] [Thread-24905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:03:38.018 [DEBUG] [Thread-24905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:03:38.018 [DEBUG] [Thread-24905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:03:38.018 [DEBUG] [Thread-24905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:03:38.018 [DEBUG] [Thread-24905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:03:38.019 [DEBUG] [Thread-24905] [transport.py] [_log()] client lang: <none>
2026-04-15T20:03:38.019 [DEBUG] [Thread-24905] [transport.py] [_log()] server lang: <none>
2026-04-15T20:03:38.019 [DEBUG] [Thread-24905] [transport.py] [_log()] kex follows: False
2026-04-15T20:03:38.019 [DEBUG] [Thread-24905] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:03:38.019 [DEBUG] [Thread-24905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:03:38.019 [DEBUG] [Thread-24905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:03:38.019 [DEBUG] [Thread-24905] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:03:38.019 [DEBUG] [Thread-24905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:03:38.019 [DEBUG] [Thread-24905] [transport.py] [_log()] Compression: none
2026-04-15T20:03:38.019 [DEBUG] [Thread-24905] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:03:38.073 [DEBUG] [Thread-24905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:03:38.074 [DEBUG] [Thread-24905] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:03:38.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:03:38.075 [DEBUG] [Thread-24905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:03:38.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:03:38.130 [DEBUG] [Thread-24905] [transport.py] [_log()] userauth is OK
2026-04-15T20:03:38.131 [DEBUG] [Thread-24905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:03:38.131 [DEBUG] [Thread-24905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:03:38.131 [DEBUG] [Thread-24905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:03:38.131 [DEBUG] [Thread-24905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:03:38.158 [INFO] [Thread-24905] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:03:38.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:03:38.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:03:38.972 [DEBUG] [Thread-24905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:03:38.972 [DEBUG] [Thread-24905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:03:39.020 [DEBUG] [Thread-24905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:03:39.020 [DEBUG] [Thread-24905] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:03:39.029 [DEBUG] [Thread-24905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:03:39.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:03:39.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')
2026-04-15T20:03:39.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
2026-04-15T20:03:39.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:03:39.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:03:39.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:03:39.064 [DEBUG] [Thread-24905] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:03:39.316 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:43.044 [DEBUG] [Thread-24907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:44.772 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:50.201 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:55.568 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:03:58.089 [DEBUG] [Thread-24908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:00.932 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:04.222 [DEBUG] [Thread-24909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:06.399 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:09.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:04:09.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:04:09.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
2026-04-15T20:04:10.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 3, 38), 4.16234, 75.2288, 0.0, 12.0341, 9.67219, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:04:10.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:03:38
2026-04-15T20:04:10.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:04:11.215 [DEBUG] [Thread-24910] [transport.py] [_log()] starting thread (client mode): 0xee905b10
2026-04-15T20:04:11.216 [DEBUG] [Thread-24910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:04:11.231 [DEBUG] [Thread-24910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:04:11.231 [INFO] [Thread-24910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:04:11.235 [DEBUG] [Thread-24910] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:04:11.235 [DEBUG] [Thread-24910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:04:11.235 [DEBUG] [Thread-24910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:04:11.235 [DEBUG] [Thread-24910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:04:11.235 [DEBUG] [Thread-24910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:04:11.236 [DEBUG] [Thread-24910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:04:11.236 [DEBUG] [Thread-24910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:04:11.236 [DEBUG] [Thread-24910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:04:11.236 [DEBUG] [Thread-24910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:04:11.236 [DEBUG] [Thread-24910] [transport.py] [_log()] client lang: <none>
2026-04-15T20:04:11.236 [DEBUG] [Thread-24910] [transport.py] [_log()] server lang: <none>
2026-04-15T20:04:11.236 [DEBUG] [Thread-24910] [transport.py] [_log()] kex follows: False
2026-04-15T20:04:11.236 [DEBUG] [Thread-24910] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:04:11.236 [DEBUG] [Thread-24910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:04:11.236 [DEBUG] [Thread-24910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:04:11.236 [DEBUG] [Thread-24910] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:04:11.236 [DEBUG] [Thread-24910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:04:11.237 [DEBUG] [Thread-24910] [transport.py] [_log()] Compression: none
2026-04-15T20:04:11.237 [DEBUG] [Thread-24910] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:04:11.255 [DEBUG] [Thread-24910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:04:11.255 [DEBUG] [Thread-24910] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:04:11.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:04:11.256 [DEBUG] [Thread-24910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:04:11.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:04:11.257 [DEBUG] [Thread-24910] [transport.py] [_log()] userauth is OK
2026-04-15T20:04:11.257 [DEBUG] [Thread-24910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:04:11.257 [DEBUG] [Thread-24910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:04:11.258 [DEBUG] [Thread-24910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:04:11.258 [DEBUG] [Thread-24910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:04:11.281 [INFO] [Thread-24910] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:04:11.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:04:11.767 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:11.931 [DEBUG] [Thread-24910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:04:11.931 [DEBUG] [Thread-24910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:04:11.931 [DEBUG] [Thread-24910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:04:11.972 [DEBUG] [Thread-24910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:04:11.972 [DEBUG] [Thread-24910] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:04:11.974 [DEBUG] [Thread-24910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:04:11.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:04:11.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:04:11.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:04:11.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:04:11.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:04:11.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:04:11.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:04:11.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:04:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:04:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.752563 -999.00   +9.70  10.50     78   +6.20 1 1 1 1 1     0    0 3.47 -0.93 ZNESW 12.2 10.5 312.2 13.9 10.4 -24.4 10.3 -23.5 9.9 -21.4 10.3 -23.2
2026-04-15T20:04:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:04:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:04:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.752563
2026-04-15T20:04:11.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:04:11.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:04:11.999 [DEBUG] [Thread-24910] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:04:11.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:04:12.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:04:12.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:04:12.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:03:38', tmtdew=4.16234, humidity=75.2288, cloud=0.0, wind=12.0341, temperature=9.67219, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:03:38', seeing=1.07, atlas_timestamp='2026-04-15T18:03:41.443', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0912500000000005, -0.0547500000000003, -0.0727499999999992, -0.057500000000000995, -0.024499999999999744, -0.003249999999999531, -0.02549999999999919, -0.02474999999999916, -0.046499999999999986, -0.02800000000000047, -0.0757500000000011, -0.019999999999999574, 0.02200000000000024, -0.01425000000000054, 0.009999999999999787, 0.11299999999999955, 0.03575000000000017, 0.009499999999999176, -0.025000000000000355, -0.02975000000000172, 0.0009999999999994458, -0.04275000000000162, 0.04075000000000095, 0.22375000000000078, 0.019499999999998963, -0.0365000000000002, -0.051249999999999574, -0.033500000000000085, 0.008000000000000895, 0.005500000000001393, 0.18200000000000038, 0.16100000000000136, 0.004249999999998977], zp_timestamp='2026-04-15T17:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:04:12.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:04:12.253 [DEBUG] [Thread-24913] [transport.py] [_log()] starting thread (client mode): 0xee905900
2026-04-15T20:04:12.253 [DEBUG] [Thread-24913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:04:12.267 [DEBUG] [Thread-24913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:04:12.267 [INFO] [Thread-24913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:04:12.274 [DEBUG] [Thread-24913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:04:12.274 [DEBUG] [Thread-24913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:04:12.274 [DEBUG] [Thread-24913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:04:12.275 [DEBUG] [Thread-24913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:04:12.275 [DEBUG] [Thread-24913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:04:12.275 [DEBUG] [Thread-24913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:04:12.275 [DEBUG] [Thread-24913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:04:12.275 [DEBUG] [Thread-24913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:04:12.275 [DEBUG] [Thread-24913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:04:12.275 [DEBUG] [Thread-24913] [transport.py] [_log()] client lang: <none>
2026-04-15T20:04:12.275 [DEBUG] [Thread-24913] [transport.py] [_log()] server lang: <none>
2026-04-15T20:04:12.275 [DEBUG] [Thread-24913] [transport.py] [_log()] kex follows: False
2026-04-15T20:04:12.275 [DEBUG] [Thread-24913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:04:12.275 [DEBUG] [Thread-24913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:04:12.276 [DEBUG] [Thread-24913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:04:12.276 [DEBUG] [Thread-24913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:04:12.276 [DEBUG] [Thread-24913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:04:12.276 [DEBUG] [Thread-24913] [transport.py] [_log()] Compression: none
2026-04-15T20:04:12.276 [DEBUG] [Thread-24913] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:04:12.334 [DEBUG] [Thread-24913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:04:12.334 [DEBUG] [Thread-24913] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:04:12.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:04:12.335 [DEBUG] [Thread-24913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:04:12.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:04:12.391 [DEBUG] [Thread-24913] [transport.py] [_log()] userauth is OK
2026-04-15T20:04:12.391 [DEBUG] [Thread-24913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:04:12.391 [DEBUG] [Thread-24913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:04:12.391 [DEBUG] [Thread-24913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:04:12.391 [DEBUG] [Thread-24913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:04:12.416 [INFO] [Thread-24913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:04:12.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:04:12.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:04:13.119 [DEBUG] [Thread-24915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:13.268 [DEBUG] [Thread-24913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:04:13.268 [DEBUG] [Thread-24913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:04:13.316 [DEBUG] [Thread-24913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:04:13.316 [DEBUG] [Thread-24913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:04:13.325 [DEBUG] [Thread-24913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:04:13.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:04:13.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')
2026-04-15T20:04:13.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
2026-04-15T20:04:13.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:04:13.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:04:13.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:04:13.360 [DEBUG] [Thread-24913] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:04:17.248 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:22.649 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:28.062 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:28.162 [DEBUG] [Thread-24916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:31.587 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:31.588 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:33.487 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:38.853 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:43.192 [DEBUG] [Thread-24917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:43.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:04:43.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:04:43.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
2026-04-15T20:04:44.280 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:44.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 4, 14), 4.26421, 74.714, 0.0, 11.2759, 9.65254, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:04:44.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:04:14
2026-04-15T20:04:45.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:04:45.443 [DEBUG] [Thread-24918] [transport.py] [_log()] starting thread (client mode): 0xee906e60
2026-04-15T20:04:45.443 [DEBUG] [Thread-24918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:04:45.463 [DEBUG] [Thread-24918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:04:45.463 [INFO] [Thread-24918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:04:45.464 [DEBUG] [Thread-24918] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] client lang: <none>
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] server lang: <none>
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] kex follows: False
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] Compression: none
2026-04-15T20:04:45.465 [DEBUG] [Thread-24918] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:04:45.484 [DEBUG] [Thread-24918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:04:45.485 [DEBUG] [Thread-24918] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:04:45.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:04:45.485 [DEBUG] [Thread-24918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:04:45.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:04:45.486 [DEBUG] [Thread-24918] [transport.py] [_log()] userauth is OK
2026-04-15T20:04:45.486 [DEBUG] [Thread-24918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:04:45.486 [DEBUG] [Thread-24918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:04:45.486 [DEBUG] [Thread-24918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:04:45.486 [DEBUG] [Thread-24918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:04:45.505 [INFO] [Thread-24918] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:04:45.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:04:46.181 [DEBUG] [Thread-24918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:04:46.181 [DEBUG] [Thread-24918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:04:46.182 [DEBUG] [Thread-24918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:04:46.223 [DEBUG] [Thread-24918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:04:46.223 [DEBUG] [Thread-24918] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:04:46.225 [DEBUG] [Thread-24918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:04:46.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:04:46.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:04:46.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:04:46.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:04:46.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:04:46.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:04:46.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:04:46.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:04:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:04:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.752910 -999.00   +9.70   8.60     78   +6.20 1 1 1 1 1     0    0 3.48 -1.26 ZNESW 9.1 8.6 305.6 11.3 10.4 -24.5 10.3 -23.4 10.0 -21.4 10.3 -23.5
2026-04-15T20:04:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:04:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:04:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.752910
2026-04-15T20:04:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:04:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:04:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:04:46.239 [DEBUG] [Thread-24918] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:04:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:04:46.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:04:46.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:04:14', tmtdew=4.26421, humidity=74.714, cloud=0.0, wind=11.2759, temperature=9.65254, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:04:14', seeing=1.04, atlas_timestamp='2026-04-15T18:04:11.424', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0912500000000005, -0.0547500000000003, -0.0727499999999992, -0.057500000000000995, -0.024499999999999744, -0.003249999999999531, -0.02549999999999919, -0.02474999999999916, -0.046499999999999986, -0.02800000000000047, -0.0757500000000011, -0.019999999999999574, 0.02200000000000024, -0.01425000000000054, 0.009999999999999787, 0.11299999999999955, 0.03575000000000017, 0.009499999999999176, -0.025000000000000355, -0.02975000000000172, 0.0009999999999994458, -0.04275000000000162, 0.04075000000000095, 0.22375000000000078, 0.019499999999998963, -0.0365000000000002, -0.051249999999999574, -0.033500000000000085, 0.008000000000000895, 0.005500000000001393, 0.18200000000000038, 0.16100000000000136, 0.004249999999998977], zp_timestamp='2026-04-15T18:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:04:46.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:04:46.453 [DEBUG] [Thread-24921] [transport.py] [_log()] starting thread (client mode): 0xee9c3760
2026-04-15T20:04:46.454 [DEBUG] [Thread-24921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:04:46.467 [DEBUG] [Thread-24921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:04:46.467 [INFO] [Thread-24921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:04:46.474 [DEBUG] [Thread-24921] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:04:46.475 [DEBUG] [Thread-24921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:04:46.475 [DEBUG] [Thread-24921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:04:46.475 [DEBUG] [Thread-24921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:04:46.475 [DEBUG] [Thread-24921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:04:46.475 [DEBUG] [Thread-24921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:04:46.475 [DEBUG] [Thread-24921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:04:46.475 [DEBUG] [Thread-24921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:04:46.475 [DEBUG] [Thread-24921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:04:46.475 [DEBUG] [Thread-24921] [transport.py] [_log()] client lang: <none>
2026-04-15T20:04:46.475 [DEBUG] [Thread-24921] [transport.py] [_log()] server lang: <none>
2026-04-15T20:04:46.475 [DEBUG] [Thread-24921] [transport.py] [_log()] kex follows: False
2026-04-15T20:04:46.475 [DEBUG] [Thread-24921] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:04:46.475 [DEBUG] [Thread-24921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:04:46.475 [DEBUG] [Thread-24921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:04:46.475 [DEBUG] [Thread-24921] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:04:46.476 [DEBUG] [Thread-24921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:04:46.476 [DEBUG] [Thread-24921] [transport.py] [_log()] Compression: none
2026-04-15T20:04:46.476 [DEBUG] [Thread-24921] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:04:46.530 [DEBUG] [Thread-24921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:04:46.530 [DEBUG] [Thread-24921] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:04:46.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:04:46.531 [DEBUG] [Thread-24921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:04:46.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:04:46.587 [DEBUG] [Thread-24921] [transport.py] [_log()] userauth is OK
2026-04-15T20:04:46.587 [DEBUG] [Thread-24921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:04:46.587 [DEBUG] [Thread-24921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:04:46.587 [DEBUG] [Thread-24921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:04:46.588 [DEBUG] [Thread-24921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:04:46.607 [INFO] [Thread-24921] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:04:46.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:04:46.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:04:47.455 [DEBUG] [Thread-24921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:04:47.455 [DEBUG] [Thread-24921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:04:47.502 [DEBUG] [Thread-24921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:04:47.503 [DEBUG] [Thread-24921] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:04:47.511 [DEBUG] [Thread-24921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:04:47.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:04:47.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')
2026-04-15T20:04:47.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
2026-04-15T20:04:47.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:04:47.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:04:47.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:04:47.544 [DEBUG] [Thread-24921] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:04:49.684 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:55.074 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:04:58.216 [DEBUG] [Thread-24923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:00.570 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:04.385 [DEBUG] [Thread-24924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:05.962 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:11.354 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:13.253 [DEBUG] [Thread-24925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:16.872 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:17.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:05:17.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:05:17.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
2026-04-15T20:05:18.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 4, 49), 4.12838, 75.4283, 0.0, 11.5049, 9.80526, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:05:18.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:04:49
2026-04-15T20:05:19.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:05:19.716 [DEBUG] [Thread-24926] [transport.py] [_log()] starting thread (client mode): 0xee9c35e0
2026-04-15T20:05:19.716 [DEBUG] [Thread-24926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:05:19.736 [DEBUG] [Thread-24926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:05:19.736 [INFO] [Thread-24926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:05:19.739 [DEBUG] [Thread-24926] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:05:19.739 [DEBUG] [Thread-24926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:05:19.739 [DEBUG] [Thread-24926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:05:19.739 [DEBUG] [Thread-24926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:05:19.739 [DEBUG] [Thread-24926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:05:19.739 [DEBUG] [Thread-24926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:05:19.739 [DEBUG] [Thread-24926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:05:19.739 [DEBUG] [Thread-24926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:05:19.740 [DEBUG] [Thread-24926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:05:19.740 [DEBUG] [Thread-24926] [transport.py] [_log()] client lang: <none>
2026-04-15T20:05:19.740 [DEBUG] [Thread-24926] [transport.py] [_log()] server lang: <none>
2026-04-15T20:05:19.740 [DEBUG] [Thread-24926] [transport.py] [_log()] kex follows: False
2026-04-15T20:05:19.740 [DEBUG] [Thread-24926] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:05:19.740 [DEBUG] [Thread-24926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:05:19.740 [DEBUG] [Thread-24926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:05:19.740 [DEBUG] [Thread-24926] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:05:19.740 [DEBUG] [Thread-24926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:05:19.740 [DEBUG] [Thread-24926] [transport.py] [_log()] Compression: none
2026-04-15T20:05:19.740 [DEBUG] [Thread-24926] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:05:19.760 [DEBUG] [Thread-24926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:05:19.761 [DEBUG] [Thread-24926] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:05:19.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:05:19.761 [DEBUG] [Thread-24926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:05:19.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:05:19.762 [DEBUG] [Thread-24926] [transport.py] [_log()] userauth is OK
2026-04-15T20:05:19.762 [DEBUG] [Thread-24926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:05:19.762 [DEBUG] [Thread-24926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:05:19.763 [DEBUG] [Thread-24926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:05:19.763 [DEBUG] [Thread-24926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:05:19.777 [INFO] [Thread-24926] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:05:19.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:05:20.404 [DEBUG] [Thread-24926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:05:20.404 [DEBUG] [Thread-24926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:05:20.405 [DEBUG] [Thread-24926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:05:20.445 [DEBUG] [Thread-24926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:05:20.445 [DEBUG] [Thread-24926] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:05:20.447 [DEBUG] [Thread-24926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:05:20.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:05:20.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:05:20.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:05:20.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:05:20.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:05:20.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:05:20.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:05:20.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:05:20.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:05:20.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.753605 -999.00   +9.70   8.36     78   +6.20 1 1 1 1 1     0    0 3.48 -1.14 ZNESW 8.5 8.4 304.2 11.6 10.4 -24.6 10.3 -23.4 10.0 -21.4 10.2 -23.3
2026-04-15T20:05:20.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:05:20.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:05:20.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.753605
2026-04-15T20:05:20.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:05:20.472 [DEBUG] [Thread-24926] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:05:20.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:05:20.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:05:20.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:05:20.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:05:20.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:04:49', tmtdew=4.12838, humidity=75.4283, cloud=0.0, wind=11.5049, temperature=9.80526, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:04:49', seeing=0.99, atlas_timestamp='2026-04-15T18:05:11.472', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0912500000000005, -0.0547500000000003, -0.0727499999999992, -0.057500000000000995, -0.024499999999999744, -0.003249999999999531, -0.02549999999999919, -0.02474999999999916, -0.046499999999999986, -0.02800000000000047, -0.0757500000000011, -0.019999999999999574, 0.02200000000000024, -0.01425000000000054, 0.009999999999999787, 0.11299999999999955, 0.03575000000000017, 0.009499999999999176, -0.025000000000000355, -0.02975000000000172, 0.0009999999999994458, -0.04275000000000162, 0.04075000000000095, 0.22375000000000078, 0.019499999999998963, -0.0365000000000002, -0.051249999999999574, -0.033500000000000085, 0.008000000000000895, 0.005500000000001393, 0.18200000000000038, 0.16100000000000136, 0.004249999999998977], zp_timestamp='2026-04-15T18:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:05:20.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:05:20.732 [DEBUG] [Thread-24929] [transport.py] [_log()] starting thread (client mode): 0xf13e1de0
2026-04-15T20:05:20.732 [DEBUG] [Thread-24929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:05:20.746 [DEBUG] [Thread-24929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:05:20.746 [INFO] [Thread-24929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:05:20.753 [DEBUG] [Thread-24929] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:05:20.754 [DEBUG] [Thread-24929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:05:20.754 [DEBUG] [Thread-24929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:05:20.754 [DEBUG] [Thread-24929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:05:20.754 [DEBUG] [Thread-24929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:05:20.754 [DEBUG] [Thread-24929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:05:20.754 [DEBUG] [Thread-24929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:05:20.754 [DEBUG] [Thread-24929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:05:20.754 [DEBUG] [Thread-24929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:05:20.754 [DEBUG] [Thread-24929] [transport.py] [_log()] client lang: <none>
2026-04-15T20:05:20.754 [DEBUG] [Thread-24929] [transport.py] [_log()] server lang: <none>
2026-04-15T20:05:20.754 [DEBUG] [Thread-24929] [transport.py] [_log()] kex follows: False
2026-04-15T20:05:20.754 [DEBUG] [Thread-24929] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:05:20.755 [DEBUG] [Thread-24929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:05:20.755 [DEBUG] [Thread-24929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:05:20.755 [DEBUG] [Thread-24929] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:05:20.755 [DEBUG] [Thread-24929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:05:20.755 [DEBUG] [Thread-24929] [transport.py] [_log()] Compression: none
2026-04-15T20:05:20.755 [DEBUG] [Thread-24929] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:05:20.810 [DEBUG] [Thread-24929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:05:20.811 [DEBUG] [Thread-24929] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:05:20.811 [DEBUG] [Thread-24929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:05:20.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:05:20.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:05:20.867 [DEBUG] [Thread-24929] [transport.py] [_log()] userauth is OK
2026-04-15T20:05:20.867 [DEBUG] [Thread-24929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:05:20.868 [DEBUG] [Thread-24929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:05:20.868 [DEBUG] [Thread-24929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:05:20.868 [DEBUG] [Thread-24929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:05:20.892 [INFO] [Thread-24929] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:05:20.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:05:20.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:05:21.698 [DEBUG] [Thread-24929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:05:21.698 [DEBUG] [Thread-24929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:05:21.746 [DEBUG] [Thread-24929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:05:21.747 [DEBUG] [Thread-24929] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:05:21.756 [DEBUG] [Thread-24929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:05:21.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:05:21.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')
2026-04-15T20:05:21.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') -> 00000000
2026-04-15T20:05:21.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:05:21.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:05:21.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:05:21.789 [DEBUG] [Thread-24929] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:05:22.338 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:27.919 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:28.284 [DEBUG] [Thread-24931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:31.808 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:31.809 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:33.400 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:38.804 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:43.326 [DEBUG] [Thread-24932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:44.193 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:49.601 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:51.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:05:51.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:05:51.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
2026-04-15T20:05:53.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 5, 25), 4.26631, 74.6975, 0.0, 11.0113, 9.61946, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:05:53.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:05:25
2026-04-15T20:05:53.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:05:53.898 [DEBUG] [Thread-24933] [transport.py] [_log()] starting thread (client mode): 0xee907340
2026-04-15T20:05:53.899 [DEBUG] [Thread-24933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:05:53.919 [DEBUG] [Thread-24933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:05:53.919 [INFO] [Thread-24933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:05:53.922 [DEBUG] [Thread-24933] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:05:53.922 [DEBUG] [Thread-24933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:05:53.922 [DEBUG] [Thread-24933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:05:53.923 [DEBUG] [Thread-24933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:05:53.923 [DEBUG] [Thread-24933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:05:53.923 [DEBUG] [Thread-24933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:05:53.923 [DEBUG] [Thread-24933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:05:53.923 [DEBUG] [Thread-24933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:05:53.923 [DEBUG] [Thread-24933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:05:53.923 [DEBUG] [Thread-24933] [transport.py] [_log()] client lang: <none>
2026-04-15T20:05:53.923 [DEBUG] [Thread-24933] [transport.py] [_log()] server lang: <none>
2026-04-15T20:05:53.923 [DEBUG] [Thread-24933] [transport.py] [_log()] kex follows: False
2026-04-15T20:05:53.923 [DEBUG] [Thread-24933] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:05:53.923 [DEBUG] [Thread-24933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:05:53.923 [DEBUG] [Thread-24933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:05:53.924 [DEBUG] [Thread-24933] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:05:53.924 [DEBUG] [Thread-24933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:05:53.924 [DEBUG] [Thread-24933] [transport.py] [_log()] Compression: none
2026-04-15T20:05:53.924 [DEBUG] [Thread-24933] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:05:53.945 [DEBUG] [Thread-24933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:05:53.945 [DEBUG] [Thread-24933] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:05:53.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:05:53.946 [DEBUG] [Thread-24933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:05:53.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:05:53.948 [DEBUG] [Thread-24933] [transport.py] [_log()] userauth is OK
2026-04-15T20:05:53.948 [DEBUG] [Thread-24933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:05:53.948 [DEBUG] [Thread-24933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:05:53.948 [DEBUG] [Thread-24933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:05:53.948 [DEBUG] [Thread-24933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:05:53.973 [INFO] [Thread-24933] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:05:53.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:05:54.760 [DEBUG] [Thread-24933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:05:54.761 [DEBUG] [Thread-24933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:05:54.761 [DEBUG] [Thread-24933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:05:54.801 [DEBUG] [Thread-24933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:05:54.801 [DEBUG] [Thread-24933] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:05:54.804 [DEBUG] [Thread-24933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:05:54.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:05:54.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:05:54.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:05:54.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:05:54.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:05:54.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:05:54.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:05:54.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:05:54.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:05:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.753605 -999.00   +9.70   8.36     78   +6.20 1 1 1 1 1     0    0 3.48 -1.14 ZNESW 8.5 8.4 304.2 11.6 10.4 -24.6 10.3 -23.4 10.0 -21.4 10.2 -23.3
2026-04-15T20:05:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:05:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:05:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.753605
2026-04-15T20:05:54.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:05:54.828 [DEBUG] [Thread-24933] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:05:54.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:05:54.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:05:54.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:05:54.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:05:54.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:05:25', tmtdew=4.26631, humidity=74.6975, cloud=0.0, wind=11.0113, temperature=9.61946, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:05:25', seeing=1.01, atlas_timestamp='2026-04-15T18:05:11.472', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0912500000000005, -0.0547500000000003, -0.0727499999999992, -0.057500000000000995, -0.024499999999999744, -0.003249999999999531, -0.02549999999999919, -0.02474999999999916, -0.046499999999999986, -0.02800000000000047, -0.0757500000000011, -0.019999999999999574, 0.02200000000000024, -0.01425000000000054, 0.009999999999999787, 0.11299999999999955, 0.03575000000000017, 0.009499999999999176, -0.025000000000000355, -0.02975000000000172, 0.0009999999999994458, -0.04275000000000162, 0.04075000000000095, 0.22375000000000078, 0.019499999999998963, -0.0365000000000002, -0.051249999999999574, -0.033500000000000085, 0.008000000000000895, 0.005500000000001393, 0.18200000000000038, 0.16100000000000136, 0.004249999999998977], zp_timestamp='2026-04-15T18:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:05:55.004 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:05:55.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:05:55.081 [DEBUG] [Thread-24936] [transport.py] [_log()] starting thread (client mode): 0xf1334520
2026-04-15T20:05:55.081 [DEBUG] [Thread-24936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:05:55.095 [DEBUG] [Thread-24936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:05:55.096 [INFO] [Thread-24936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:05:55.103 [DEBUG] [Thread-24936] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:05:55.103 [DEBUG] [Thread-24936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:05:55.103 [DEBUG] [Thread-24936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:05:55.103 [DEBUG] [Thread-24936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:05:55.103 [DEBUG] [Thread-24936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:05:55.103 [DEBUG] [Thread-24936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:05:55.104 [DEBUG] [Thread-24936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:05:55.104 [DEBUG] [Thread-24936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:05:55.104 [DEBUG] [Thread-24936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:05:55.104 [DEBUG] [Thread-24936] [transport.py] [_log()] client lang: <none>
2026-04-15T20:05:55.104 [DEBUG] [Thread-24936] [transport.py] [_log()] server lang: <none>
2026-04-15T20:05:55.104 [DEBUG] [Thread-24936] [transport.py] [_log()] kex follows: False
2026-04-15T20:05:55.104 [DEBUG] [Thread-24936] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:05:55.104 [DEBUG] [Thread-24936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:05:55.104 [DEBUG] [Thread-24936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:05:55.104 [DEBUG] [Thread-24936] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:05:55.104 [DEBUG] [Thread-24936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:05:55.104 [DEBUG] [Thread-24936] [transport.py] [_log()] Compression: none
2026-04-15T20:05:55.105 [DEBUG] [Thread-24936] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:05:55.159 [DEBUG] [Thread-24936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:05:55.159 [DEBUG] [Thread-24936] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:05:55.159 [DEBUG] [Thread-24936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:05:55.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:05:55.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:05:55.215 [DEBUG] [Thread-24936] [transport.py] [_log()] userauth is OK
2026-04-15T20:05:55.216 [DEBUG] [Thread-24936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:05:55.216 [DEBUG] [Thread-24936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:05:55.216 [DEBUG] [Thread-24936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:05:55.216 [DEBUG] [Thread-24936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:05:55.241 [INFO] [Thread-24936] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:05:55.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:05:55.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:05:56.060 [DEBUG] [Thread-24936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:05:56.061 [DEBUG] [Thread-24936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:05:56.108 [DEBUG] [Thread-24936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:05:56.108 [DEBUG] [Thread-24936] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:05:56.117 [DEBUG] [Thread-24936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:05:56.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:05:56.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')
2026-04-15T20:05:56.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
2026-04-15T20:05:56.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:05:56.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:05:56.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:05:56.152 [DEBUG] [Thread-24936] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:05:58.357 [DEBUG] [Thread-24938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:00.548 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:04.533 [DEBUG] [Thread-24939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:05.949 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:11.419 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:13.402 [DEBUG] [Thread-24940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:16.860 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:22.227 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:26.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:06:26.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:06:26.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
2026-04-15T20:06:27.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 6), 4.27054, 74.681, 0.0, 10.6409, 9.65263, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:06:27.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:06:00
2026-04-15T20:06:27.656 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:27.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:06:28.313 [DEBUG] [Thread-24941] [transport.py] [_log()] starting thread (client mode): 0xf13e18a0
2026-04-15T20:06:28.313 [DEBUG] [Thread-24941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:06:28.328 [DEBUG] [Thread-24941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:06:28.328 [INFO] [Thread-24941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:06:28.331 [DEBUG] [Thread-24941] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:06:28.331 [DEBUG] [Thread-24941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:06:28.331 [DEBUG] [Thread-24941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:06:28.331 [DEBUG] [Thread-24941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:06:28.331 [DEBUG] [Thread-24941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:06:28.331 [DEBUG] [Thread-24941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:06:28.331 [DEBUG] [Thread-24941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:06:28.332 [DEBUG] [Thread-24941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:06:28.332 [DEBUG] [Thread-24941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:06:28.332 [DEBUG] [Thread-24941] [transport.py] [_log()] client lang: <none>
2026-04-15T20:06:28.332 [DEBUG] [Thread-24941] [transport.py] [_log()] server lang: <none>
2026-04-15T20:06:28.332 [DEBUG] [Thread-24941] [transport.py] [_log()] kex follows: False
2026-04-15T20:06:28.332 [DEBUG] [Thread-24941] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:06:28.332 [DEBUG] [Thread-24941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:06:28.332 [DEBUG] [Thread-24941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:06:28.332 [DEBUG] [Thread-24941] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:06:28.332 [DEBUG] [Thread-24941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:06:28.332 [DEBUG] [Thread-24941] [transport.py] [_log()] Compression: none
2026-04-15T20:06:28.332 [DEBUG] [Thread-24941] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:06:28.349 [DEBUG] [Thread-24941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:06:28.350 [DEBUG] [Thread-24941] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:06:28.350 [DEBUG] [Thread-24941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:06:28.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:06:28.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:06:28.351 [DEBUG] [Thread-24941] [transport.py] [_log()] userauth is OK
2026-04-15T20:06:28.351 [DEBUG] [Thread-24941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:06:28.351 [DEBUG] [Thread-24941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:06:28.352 [DEBUG] [Thread-24941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:06:28.352 [DEBUG] [Thread-24941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:06:28.374 [INFO] [Thread-24941] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:06:28.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:06:28.431 [DEBUG] [Thread-24943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:29.140 [DEBUG] [Thread-24941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:06:29.140 [DEBUG] [Thread-24941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:06:29.141 [DEBUG] [Thread-24941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:06:29.181 [DEBUG] [Thread-24941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:06:29.181 [DEBUG] [Thread-24941] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:06:29.185 [DEBUG] [Thread-24941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:06:29.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:06:29.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:06:29.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:06:29.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:06:29.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:06:29.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:06:29.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:06:29.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:06:29.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:06:29.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.753951 -999.00   +9.70   7.87     79   +6.20 1 1 1 1 1     0    0 3.52 -1.19 ZNESW 9.5 7.9 301.0 12.0 10.4 -24.6 10.3 -23.4 10.0 -21.4 10.3 -23.5
2026-04-15T20:06:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:06:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:06:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.753951
2026-04-15T20:06:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:06:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:06:29.210 [DEBUG] [Thread-24941] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:06:29.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:06:29.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:06:29.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:06:29.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:06:00', tmtdew=4.27054, humidity=74.681, cloud=0.0, wind=10.6409, temperature=9.65263, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:06:00', seeing=1.11, atlas_timestamp='2026-04-15T18:05:41.366', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0912500000000005, -0.0547500000000003, -0.0727499999999992, -0.057500000000000995, -0.024499999999999744, -0.003249999999999531, -0.02549999999999919, -0.02474999999999916, -0.046499999999999986, -0.02800000000000047, -0.0757500000000011, -0.019999999999999574, 0.02200000000000024, -0.01425000000000054, 0.009999999999999787, 0.11299999999999955, 0.03575000000000017, 0.009499999999999176, -0.025000000000000355, -0.02975000000000172, 0.0009999999999994458, -0.04275000000000162, 0.04075000000000095, 0.22375000000000078, 0.019499999999998963, -0.0365000000000002, -0.051249999999999574, -0.033500000000000085, 0.008000000000000895, 0.005500000000001393, 0.18200000000000038, 0.16100000000000136, 0.004249999999998977], zp_timestamp='2026-04-15T18:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:06:29.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:06:29.471 [DEBUG] [Thread-24945] [transport.py] [_log()] starting thread (client mode): 0xf1366da0
2026-04-15T20:06:29.471 [DEBUG] [Thread-24945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:06:29.486 [DEBUG] [Thread-24945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:06:29.486 [INFO] [Thread-24945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:06:29.493 [DEBUG] [Thread-24945] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:06:29.493 [DEBUG] [Thread-24945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:06:29.493 [DEBUG] [Thread-24945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:06:29.493 [DEBUG] [Thread-24945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:06:29.494 [DEBUG] [Thread-24945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:06:29.494 [DEBUG] [Thread-24945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:06:29.494 [DEBUG] [Thread-24945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:06:29.494 [DEBUG] [Thread-24945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:06:29.494 [DEBUG] [Thread-24945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:06:29.494 [DEBUG] [Thread-24945] [transport.py] [_log()] client lang: <none>
2026-04-15T20:06:29.494 [DEBUG] [Thread-24945] [transport.py] [_log()] server lang: <none>
2026-04-15T20:06:29.494 [DEBUG] [Thread-24945] [transport.py] [_log()] kex follows: False
2026-04-15T20:06:29.494 [DEBUG] [Thread-24945] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:06:29.494 [DEBUG] [Thread-24945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:06:29.494 [DEBUG] [Thread-24945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:06:29.495 [DEBUG] [Thread-24945] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:06:29.495 [DEBUG] [Thread-24945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:06:29.495 [DEBUG] [Thread-24945] [transport.py] [_log()] Compression: none
2026-04-15T20:06:29.495 [DEBUG] [Thread-24945] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:06:29.552 [DEBUG] [Thread-24945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:06:29.552 [DEBUG] [Thread-24945] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:06:29.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:06:29.553 [DEBUG] [Thread-24945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:06:29.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:06:29.608 [DEBUG] [Thread-24945] [transport.py] [_log()] userauth is OK
2026-04-15T20:06:29.608 [DEBUG] [Thread-24945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:06:29.608 [DEBUG] [Thread-24945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:06:29.609 [DEBUG] [Thread-24945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:06:29.609 [DEBUG] [Thread-24945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:06:29.635 [INFO] [Thread-24945] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:06:29.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:06:29.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:06:30.455 [DEBUG] [Thread-24945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:06:30.456 [DEBUG] [Thread-24945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:06:30.503 [DEBUG] [Thread-24945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:06:30.503 [DEBUG] [Thread-24945] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:06:30.512 [DEBUG] [Thread-24945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:06:30.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:06:30.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')
2026-04-15T20:06:30.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') -> 00000000
2026-04-15T20:06:30.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:06:30.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:06:30.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:06:30.548 [DEBUG] [Thread-24945] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:06:32.014 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:32.016 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:33.201 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:38.681 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:43.461 [DEBUG] [Thread-24947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:44.087 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:49.553 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:54.960 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:06:58.503 [DEBUG] [Thread-24948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:00.339 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:00.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:07:00.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:07:00.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
2026-04-15T20:07:01.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 6, 36), 4.12095, 75.4616, 0.0, 11.0815, 9.77222, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:07:01.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:06:36
2026-04-15T20:07:02.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:07:02.646 [DEBUG] [Thread-24949] [transport.py] [_log()] starting thread (client mode): 0xf1364b50
2026-04-15T20:07:02.646 [DEBUG] [Thread-24949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:07:02.665 [DEBUG] [Thread-24949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:07:02.665 [INFO] [Thread-24949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:07:02.668 [DEBUG] [Thread-24949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:07:02.668 [DEBUG] [Thread-24949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:07:02.668 [DEBUG] [Thread-24949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:07:02.668 [DEBUG] [Thread-24949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:07:02.669 [DEBUG] [Thread-24949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:07:02.669 [DEBUG] [Thread-24949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:07:02.669 [DEBUG] [Thread-24949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:07:02.669 [DEBUG] [Thread-24949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:07:02.669 [DEBUG] [Thread-24949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:07:02.669 [DEBUG] [Thread-24949] [transport.py] [_log()] client lang: <none>
2026-04-15T20:07:02.669 [DEBUG] [Thread-24949] [transport.py] [_log()] server lang: <none>
2026-04-15T20:07:02.669 [DEBUG] [Thread-24949] [transport.py] [_log()] kex follows: False
2026-04-15T20:07:02.669 [DEBUG] [Thread-24949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:07:02.669 [DEBUG] [Thread-24949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:07:02.669 [DEBUG] [Thread-24949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:07:02.670 [DEBUG] [Thread-24949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:07:02.670 [DEBUG] [Thread-24949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:07:02.670 [DEBUG] [Thread-24949] [transport.py] [_log()] Compression: none
2026-04-15T20:07:02.670 [DEBUG] [Thread-24949] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:07:02.686 [DEBUG] [Thread-24949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:07:02.687 [DEBUG] [Thread-24949] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:07:02.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:07:02.687 [DEBUG] [Thread-24949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:07:02.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:07:02.688 [DEBUG] [Thread-24949] [transport.py] [_log()] userauth is OK
2026-04-15T20:07:02.688 [DEBUG] [Thread-24949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:07:02.689 [DEBUG] [Thread-24949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:07:02.689 [DEBUG] [Thread-24949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:07:02.689 [DEBUG] [Thread-24949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:07:02.707 [INFO] [Thread-24949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:07:02.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:07:03.466 [DEBUG] [Thread-24949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:07:03.466 [DEBUG] [Thread-24949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:07:03.466 [DEBUG] [Thread-24949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:07:03.507 [DEBUG] [Thread-24949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:07:03.507 [DEBUG] [Thread-24949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:07:03.510 [DEBUG] [Thread-24949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:07:03.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:07:03.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:07:03.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:07:03.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:07:03.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:07:03.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:07:03.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:07:03.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:07:03.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:07:03.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.754299 -999.00   +9.60   8.65     79   +6.20 1 1 1 1 1     0    0 3.45 -1.78 ZNESW 9.1 8.7 311.8 11.8 10.4 -24.6 10.2 -23.5 10.0 -21.4 10.3 -23.5
2026-04-15T20:07:03.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:07:03.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:07:03.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.754299
2026-04-15T20:07:03.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:07:03.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:07:03.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:07:03.533 [DEBUG] [Thread-24949] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:07:03.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:07:03.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:07:03.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:06:36', tmtdew=4.12095, humidity=75.4616, cloud=0.0, wind=11.0815, temperature=9.77222, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:06:36', seeing=1.04, atlas_timestamp='2026-04-15T18:06:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0912500000000005, -0.0547500000000003, -0.0727499999999992, -0.057500000000000995, -0.024499999999999744, -0.003249999999999531, -0.02549999999999919, -0.02474999999999916, -0.046499999999999986, -0.02800000000000047, -0.0757500000000011, -0.019999999999999574, 0.02200000000000024, -0.01425000000000054, 0.009999999999999787, 0.11299999999999955, 0.03575000000000017, 0.009499999999999176, -0.025000000000000355, -0.02975000000000172, 0.0009999999999994458, -0.04275000000000162, 0.04075000000000095, 0.22375000000000078, 0.019499999999998963, -0.0365000000000002, -0.051249999999999574, -0.033500000000000085, 0.008000000000000895, 0.005500000000001393, 0.18200000000000038, 0.16100000000000136, 0.004249999999998977], zp_timestamp='2026-04-15T18:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:07:03.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:07:03.782 [DEBUG] [Thread-24952] [transport.py] [_log()] starting thread (client mode): 0xf13652d0
2026-04-15T20:07:03.782 [DEBUG] [Thread-24952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:07:03.798 [DEBUG] [Thread-24952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:07:03.798 [INFO] [Thread-24952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:07:03.805 [DEBUG] [Thread-24952] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:07:03.805 [DEBUG] [Thread-24952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:07:03.806 [DEBUG] [Thread-24952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:07:03.806 [DEBUG] [Thread-24952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:07:03.806 [DEBUG] [Thread-24952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:07:03.806 [DEBUG] [Thread-24952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:07:03.806 [DEBUG] [Thread-24952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:07:03.806 [DEBUG] [Thread-24952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:07:03.806 [DEBUG] [Thread-24952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:07:03.806 [DEBUG] [Thread-24952] [transport.py] [_log()] client lang: <none>
2026-04-15T20:07:03.806 [DEBUG] [Thread-24952] [transport.py] [_log()] server lang: <none>
2026-04-15T20:07:03.806 [DEBUG] [Thread-24952] [transport.py] [_log()] kex follows: False
2026-04-15T20:07:03.807 [DEBUG] [Thread-24952] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:07:03.807 [DEBUG] [Thread-24952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:07:03.807 [DEBUG] [Thread-24952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:07:03.807 [DEBUG] [Thread-24952] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:07:03.807 [DEBUG] [Thread-24952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:07:03.807 [DEBUG] [Thread-24952] [transport.py] [_log()] Compression: none
2026-04-15T20:07:03.807 [DEBUG] [Thread-24952] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:07:03.867 [DEBUG] [Thread-24952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:07:03.867 [DEBUG] [Thread-24952] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:07:03.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:07:03.868 [DEBUG] [Thread-24952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:07:03.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:07:03.924 [DEBUG] [Thread-24952] [transport.py] [_log()] userauth is OK
2026-04-15T20:07:03.924 [DEBUG] [Thread-24952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:07:03.925 [DEBUG] [Thread-24952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:07:03.925 [DEBUG] [Thread-24952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:07:03.925 [DEBUG] [Thread-24952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:07:03.953 [INFO] [Thread-24952] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:07:03.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:07:03.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:07:04.677 [DEBUG] [Thread-24954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:04.764 [DEBUG] [Thread-24952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:07:04.765 [DEBUG] [Thread-24952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:07:04.812 [DEBUG] [Thread-24952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:07:04.812 [DEBUG] [Thread-24952] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:07:04.821 [DEBUG] [Thread-24952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:07:04.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:07:04.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')
2026-04-15T20:07:04.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
2026-04-15T20:07:04.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:07:04.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:07:04.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:07:04.857 [DEBUG] [Thread-24952] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:07:05.851 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:11.324 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:13.534 [DEBUG] [Thread-24955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:16.728 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:22.144 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:27.524 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:28.579 [DEBUG] [Thread-24956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:32.225 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:32.227 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:32.903 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:34.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:07:34.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:07:34.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
2026-04-15T20:07:36.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 7, 11), 4.25677, 74.7475, 0.0, 9.56412, 9.61958, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:07:36.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:07:11
2026-04-15T20:07:36.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:07:36.926 [DEBUG] [Thread-24957] [transport.py] [_log()] starting thread (client mode): 0xf13657e0
2026-04-15T20:07:36.926 [DEBUG] [Thread-24957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:07:36.945 [DEBUG] [Thread-24957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:07:36.945 [INFO] [Thread-24957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:07:36.948 [DEBUG] [Thread-24957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:07:36.948 [DEBUG] [Thread-24957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:07:36.948 [DEBUG] [Thread-24957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:07:36.949 [DEBUG] [Thread-24957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:07:36.949 [DEBUG] [Thread-24957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:07:36.949 [DEBUG] [Thread-24957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:07:36.949 [DEBUG] [Thread-24957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:07:36.949 [DEBUG] [Thread-24957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:07:36.949 [DEBUG] [Thread-24957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:07:36.949 [DEBUG] [Thread-24957] [transport.py] [_log()] client lang: <none>
2026-04-15T20:07:36.949 [DEBUG] [Thread-24957] [transport.py] [_log()] server lang: <none>
2026-04-15T20:07:36.949 [DEBUG] [Thread-24957] [transport.py] [_log()] kex follows: False
2026-04-15T20:07:36.949 [DEBUG] [Thread-24957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:07:36.949 [DEBUG] [Thread-24957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:07:36.949 [DEBUG] [Thread-24957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:07:36.950 [DEBUG] [Thread-24957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:07:36.950 [DEBUG] [Thread-24957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:07:36.950 [DEBUG] [Thread-24957] [transport.py] [_log()] Compression: none
2026-04-15T20:07:36.950 [DEBUG] [Thread-24957] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:07:36.966 [DEBUG] [Thread-24957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:07:36.966 [DEBUG] [Thread-24957] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:07:36.967 [DEBUG] [Thread-24957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:07:36.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:07:36.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:07:36.968 [DEBUG] [Thread-24957] [transport.py] [_log()] userauth is OK
2026-04-15T20:07:36.968 [DEBUG] [Thread-24957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:07:36.968 [DEBUG] [Thread-24957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:07:36.968 [DEBUG] [Thread-24957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:07:36.968 [DEBUG] [Thread-24957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:07:36.992 [INFO] [Thread-24957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:07:36.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:07:37.784 [DEBUG] [Thread-24957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:07:37.784 [DEBUG] [Thread-24957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:07:37.784 [DEBUG] [Thread-24957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:07:37.825 [DEBUG] [Thread-24957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:07:37.825 [DEBUG] [Thread-24957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:07:37.828 [DEBUG] [Thread-24957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:07:37.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:07:37.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:07:37.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:07:37.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:07:37.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:07:37.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:07:37.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:07:37.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:07:37.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:07:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.754646 -999.00   +9.60   9.25     79   +6.20 1 1 1 1 1     0    0 3.39 -2.23 ZNESW 8.8 9.2 307.8 10.7 10.4 -24.6 10.3 -23.5 10.0 -21.6 10.3 -23.4
2026-04-15T20:07:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:07:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:07:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.754646
2026-04-15T20:07:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:07:37.854 [DEBUG] [Thread-24957] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:07:37.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:07:37.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:07:37.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:07:37.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:07:37.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:07:11', tmtdew=4.25677, humidity=74.7475, cloud=0.0, wind=9.56412, temperature=9.61958, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:07:11', seeing=1.04, atlas_timestamp='2026-04-15T18:06:41.414', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0912500000000005, -0.0547500000000003, -0.0727499999999992, -0.057500000000000995, -0.024499999999999744, -0.003249999999999531, -0.02549999999999919, -0.02474999999999916, -0.046499999999999986, -0.02800000000000047, -0.0757500000000011, -0.019999999999999574, 0.02200000000000024, -0.01425000000000054, 0.009999999999999787, 0.11299999999999955, 0.03575000000000017, 0.009499999999999176, -0.025000000000000355, -0.02975000000000172, 0.0009999999999994458, -0.04275000000000162, 0.04075000000000095, 0.22375000000000078, 0.019499999999998963, -0.0365000000000002, -0.051249999999999574, -0.033500000000000085, 0.008000000000000895, 0.005500000000001393, 0.18200000000000038, 0.16100000000000136, 0.004249999999998977], zp_timestamp='2026-04-15T18:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:07:38.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:07:38.116 [DEBUG] [Thread-24960] [transport.py] [_log()] starting thread (client mode): 0xf1366800
2026-04-15T20:07:38.116 [DEBUG] [Thread-24960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:07:38.130 [DEBUG] [Thread-24960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:07:38.130 [INFO] [Thread-24960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:07:38.138 [DEBUG] [Thread-24960] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:07:38.138 [DEBUG] [Thread-24960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:07:38.138 [DEBUG] [Thread-24960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:07:38.138 [DEBUG] [Thread-24960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:07:38.138 [DEBUG] [Thread-24960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:07:38.138 [DEBUG] [Thread-24960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:07:38.138 [DEBUG] [Thread-24960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:07:38.138 [DEBUG] [Thread-24960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:07:38.138 [DEBUG] [Thread-24960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:07:38.138 [DEBUG] [Thread-24960] [transport.py] [_log()] client lang: <none>
2026-04-15T20:07:38.138 [DEBUG] [Thread-24960] [transport.py] [_log()] server lang: <none>
2026-04-15T20:07:38.138 [DEBUG] [Thread-24960] [transport.py] [_log()] kex follows: False
2026-04-15T20:07:38.139 [DEBUG] [Thread-24960] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:07:38.139 [DEBUG] [Thread-24960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:07:38.139 [DEBUG] [Thread-24960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:07:38.139 [DEBUG] [Thread-24960] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:07:38.139 [DEBUG] [Thread-24960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:07:38.139 [DEBUG] [Thread-24960] [transport.py] [_log()] Compression: none
2026-04-15T20:07:38.139 [DEBUG] [Thread-24960] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:07:38.196 [DEBUG] [Thread-24960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:07:38.197 [DEBUG] [Thread-24960] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:07:38.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:07:38.197 [DEBUG] [Thread-24960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:07:38.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:07:38.252 [DEBUG] [Thread-24960] [transport.py] [_log()] userauth is OK
2026-04-15T20:07:38.252 [DEBUG] [Thread-24960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:07:38.252 [DEBUG] [Thread-24960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:07:38.252 [DEBUG] [Thread-24960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:07:38.252 [DEBUG] [Thread-24960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:07:38.258 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:38.270 [INFO] [Thread-24960] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:07:38.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:07:38.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:07:39.097 [DEBUG] [Thread-24960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:07:39.097 [DEBUG] [Thread-24960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:07:39.145 [DEBUG] [Thread-24960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:07:39.145 [DEBUG] [Thread-24960] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:07:39.154 [DEBUG] [Thread-24960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:07:39.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:07: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')
2026-04-15T20:07:39.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
2026-04-15T20:07:39.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:07:39.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:07:39.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:07:39.189 [DEBUG] [Thread-24960] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:07:43.611 [DEBUG] [Thread-24962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:43.711 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:49.149 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:54.573 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:58.652 [DEBUG] [Thread-24963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:07:59.953 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:04.823 [DEBUG] [Thread-24964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:05.344 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:09.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:08:09.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:08:09.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
2026-04-15T20:08:10.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 7, 47), 4.08718, 75.6276, 0.0, 11.4696, 9.70599, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:08:10.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:07:47
2026-04-15T20:08:10.810 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:10.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:08:11.281 [DEBUG] [Thread-24965] [transport.py] [_log()] starting thread (client mode): 0xf1364580
2026-04-15T20:08:11.282 [DEBUG] [Thread-24965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:08:11.302 [DEBUG] [Thread-24965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:08:11.302 [INFO] [Thread-24965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:08:11.304 [DEBUG] [Thread-24965] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:08:11.304 [DEBUG] [Thread-24965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:08:11.304 [DEBUG] [Thread-24965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:08:11.305 [DEBUG] [Thread-24965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:08:11.305 [DEBUG] [Thread-24965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:08:11.305 [DEBUG] [Thread-24965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:08:11.305 [DEBUG] [Thread-24965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:08:11.305 [DEBUG] [Thread-24965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:08:11.305 [DEBUG] [Thread-24965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:08:11.305 [DEBUG] [Thread-24965] [transport.py] [_log()] client lang: <none>
2026-04-15T20:08:11.305 [DEBUG] [Thread-24965] [transport.py] [_log()] server lang: <none>
2026-04-15T20:08:11.305 [DEBUG] [Thread-24965] [transport.py] [_log()] kex follows: False
2026-04-15T20:08:11.305 [DEBUG] [Thread-24965] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:08:11.305 [DEBUG] [Thread-24965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:08:11.305 [DEBUG] [Thread-24965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:08:11.306 [DEBUG] [Thread-24965] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:08:11.306 [DEBUG] [Thread-24965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:08:11.306 [DEBUG] [Thread-24965] [transport.py] [_log()] Compression: none
2026-04-15T20:08:11.306 [DEBUG] [Thread-24965] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:08:11.322 [DEBUG] [Thread-24965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:08:11.323 [DEBUG] [Thread-24965] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:08:11.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:08:11.323 [DEBUG] [Thread-24965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:08:11.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:08:11.324 [DEBUG] [Thread-24965] [transport.py] [_log()] userauth is OK
2026-04-15T20:08:11.324 [DEBUG] [Thread-24965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:08:11.324 [DEBUG] [Thread-24965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:08:11.325 [DEBUG] [Thread-24965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:08:11.325 [DEBUG] [Thread-24965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:08:11.347 [INFO] [Thread-24965] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:08:11.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:08:12.153 [DEBUG] [Thread-24965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:08:12.153 [DEBUG] [Thread-24965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:08:12.154 [DEBUG] [Thread-24965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:08:12.194 [DEBUG] [Thread-24965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:08:12.194 [DEBUG] [Thread-24965] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:08:12.197 [DEBUG] [Thread-24965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:08:12.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:08:12.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:08:12.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:08:12.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:08:12.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:08:12.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:08:12.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:08:12.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:08:12.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:08:12.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.754993 -999.00   +9.60   8.04     79   +6.20 1 1 1 1 1     0    0 3.49 -2.72 ZNESW 7.7 8.0 310.2 9.8 10.4 -24.6 10.3 -23.5 10.0 -21.6 10.3 -23.5
2026-04-15T20:08:12.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:08:12.221 [DEBUG] [Thread-24965] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:08:12.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:08:12.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.754993
2026-04-15T20:08:12.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:08:12.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:08:12.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:08:12.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:08:12.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:08:12.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:07:47', tmtdew=4.08718, humidity=75.6276, cloud=0.0, wind=11.4696, temperature=9.70599, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:07:47', seeing=1.15, atlas_timestamp='2026-04-15T18:07:11.395', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0782500000000006, -0.055749999999999744, -0.06674999999999898, -0.06750000000000078, -0.03049999999999997, -0.014249999999998764, -0.03599999999999959, 0.0022500000000000853, -0.0035000000000007248, -0.009000000000000341, -0.07724999999999937, -0.009000000000000341, 0.03249999999999886, -0.028750000000000497, -0.03300000000000125, -0.018000000000000682, 0.020749999999999602, 0.024499999999999744, -0.026500000000000412, -0.010750000000001592, 0.026999999999999247, -0.026750000000001606, -0.025749999999998607, 0.24375000000000036, 0.13199999999999967, -0.04749999999999943, -0.05375000000000085, -0.07750000000000057, 0.03500000000000014, -0.04049999999999798, 0.03700000000000081, 0.2325000000000017, 0.09074999999999989], zp_timestamp='2026-04-15T18:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:08:12.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:08:12.474 [DEBUG] [Thread-24968] [transport.py] [_log()] starting thread (client mode): 0xf1366c20
2026-04-15T20:08:12.475 [DEBUG] [Thread-24968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:08:12.490 [DEBUG] [Thread-24968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:08:12.490 [INFO] [Thread-24968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:08:12.497 [DEBUG] [Thread-24968] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:08:12.497 [DEBUG] [Thread-24968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:08:12.497 [DEBUG] [Thread-24968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:08:12.497 [DEBUG] [Thread-24968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:08:12.498 [DEBUG] [Thread-24968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:08:12.498 [DEBUG] [Thread-24968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:08:12.498 [DEBUG] [Thread-24968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:08:12.498 [DEBUG] [Thread-24968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:08:12.498 [DEBUG] [Thread-24968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:08:12.498 [DEBUG] [Thread-24968] [transport.py] [_log()] client lang: <none>
2026-04-15T20:08:12.498 [DEBUG] [Thread-24968] [transport.py] [_log()] server lang: <none>
2026-04-15T20:08:12.498 [DEBUG] [Thread-24968] [transport.py] [_log()] kex follows: False
2026-04-15T20:08:12.498 [DEBUG] [Thread-24968] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:08:12.498 [DEBUG] [Thread-24968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:08:12.498 [DEBUG] [Thread-24968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:08:12.499 [DEBUG] [Thread-24968] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:08:12.499 [DEBUG] [Thread-24968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:08:12.499 [DEBUG] [Thread-24968] [transport.py] [_log()] Compression: none
2026-04-15T20:08:12.499 [DEBUG] [Thread-24968] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:08:12.556 [DEBUG] [Thread-24968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:08:12.556 [DEBUG] [Thread-24968] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:08:12.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:08:12.557 [DEBUG] [Thread-24968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:08:12.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:08:12.612 [DEBUG] [Thread-24968] [transport.py] [_log()] userauth is OK
2026-04-15T20:08:12.613 [DEBUG] [Thread-24968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:08:12.613 [DEBUG] [Thread-24968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:08:12.613 [DEBUG] [Thread-24968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:08:12.613 [DEBUG] [Thread-24968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:08:12.642 [INFO] [Thread-24968] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:08:12.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:08:12.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:08:13.490 [DEBUG] [Thread-24968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:08:13.490 [DEBUG] [Thread-24968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:08:13.538 [DEBUG] [Thread-24968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:08:13.538 [DEBUG] [Thread-24968] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:08:13.547 [DEBUG] [Thread-24968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:08:13.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:08:13.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')
2026-04-15T20:08:13.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
2026-04-15T20:08:13.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:08:13.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:08:13.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:08:13.582 [DEBUG] [Thread-24968] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:08:13.681 [DEBUG] [Thread-24970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:16.203 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:21.634 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:27.001 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:28.725 [DEBUG] [Thread-24971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:32.430 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:32.431 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:32.480 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:37.871 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:43.283 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:43.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:08:43.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:08:43.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
2026-04-15T20:08:43.755 [DEBUG] [Thread-24972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 8, 22), 4.24462, 74.8139, 0.0, 8.8938, 9.63621, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:08:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:08:22
2026-04-15T20:08:45.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:08:45.768 [DEBUG] [Thread-24973] [transport.py] [_log()] starting thread (client mode): 0xf13fc2b0
2026-04-15T20:08:45.768 [DEBUG] [Thread-24973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:08:45.789 [DEBUG] [Thread-24973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:08:45.789 [INFO] [Thread-24973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:08:45.793 [DEBUG] [Thread-24973] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:08:45.793 [DEBUG] [Thread-24973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:08:45.793 [DEBUG] [Thread-24973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:08:45.793 [DEBUG] [Thread-24973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:08:45.793 [DEBUG] [Thread-24973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:08:45.793 [DEBUG] [Thread-24973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:08:45.793 [DEBUG] [Thread-24973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:08:45.794 [DEBUG] [Thread-24973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:08:45.794 [DEBUG] [Thread-24973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:08:45.794 [DEBUG] [Thread-24973] [transport.py] [_log()] client lang: <none>
2026-04-15T20:08:45.794 [DEBUG] [Thread-24973] [transport.py] [_log()] server lang: <none>
2026-04-15T20:08:45.794 [DEBUG] [Thread-24973] [transport.py] [_log()] kex follows: False
2026-04-15T20:08:45.794 [DEBUG] [Thread-24973] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:08:45.794 [DEBUG] [Thread-24973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:08:45.794 [DEBUG] [Thread-24973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:08:45.794 [DEBUG] [Thread-24973] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:08:45.794 [DEBUG] [Thread-24973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:08:45.794 [DEBUG] [Thread-24973] [transport.py] [_log()] Compression: none
2026-04-15T20:08:45.795 [DEBUG] [Thread-24973] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:08:45.808 [DEBUG] [Thread-24973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:08:45.808 [DEBUG] [Thread-24973] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:08:45.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:08:45.809 [DEBUG] [Thread-24973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:08:45.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:08:45.810 [DEBUG] [Thread-24973] [transport.py] [_log()] userauth is OK
2026-04-15T20:08:45.810 [DEBUG] [Thread-24973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:08:45.810 [DEBUG] [Thread-24973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:08:45.810 [DEBUG] [Thread-24973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:08:45.810 [DEBUG] [Thread-24973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:08:45.828 [INFO] [Thread-24973] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:08:45.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:08:46.635 [DEBUG] [Thread-24973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:08:46.635 [DEBUG] [Thread-24973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:08:46.636 [DEBUG] [Thread-24973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:08:46.676 [DEBUG] [Thread-24973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:08:46.676 [DEBUG] [Thread-24973] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:08:46.679 [DEBUG] [Thread-24973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:08:46.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:08:46.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:08:46.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:08:46.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:08:46.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:08:46.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:08:46.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:08:46.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:08:46.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:08:46.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.755688 -999.00   +9.50   8.41     79   +6.20 1 1 1 1 1     0    0 3.40 -4.05 ZNESW 8.1 8.4 310.6 9.7 10.4 -24.7 10.3 -23.4 10.0 -21.5 10.2 -23.6
2026-04-15T20:08:46.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:08:46.704 [DEBUG] [Thread-24973] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:08:46.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:08:46.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.755688
2026-04-15T20:08:46.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:08:46.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:08:46.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:08:46.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:08:46.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:08:46.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:08:22', tmtdew=4.24462, humidity=74.8139, cloud=0.0, wind=8.8938, temperature=9.63621, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:08:22', seeing=1.06, atlas_timestamp='2026-04-15T18:08:11.443', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0782500000000006, -0.055749999999999744, -0.06674999999999898, -0.06750000000000078, -0.03049999999999997, -0.014249999999998764, -0.03599999999999959, 0.0022500000000000853, -0.0035000000000007248, -0.009000000000000341, -0.07724999999999937, -0.009000000000000341, 0.03249999999999886, -0.028750000000000497, -0.03300000000000125, -0.018000000000000682, 0.020749999999999602, 0.024499999999999744, -0.026500000000000412, -0.010750000000001592, 0.026999999999999247, -0.026750000000001606, -0.025749999999998607, 0.24375000000000036, 0.13199999999999967, -0.04749999999999943, -0.05375000000000085, -0.07750000000000057, 0.03500000000000014, -0.04049999999999798, 0.03700000000000081, 0.2325000000000017, 0.09074999999999989], zp_timestamp='2026-04-15T18:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:08:46.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:08:46.961 [DEBUG] [Thread-24976] [transport.py] [_log()] starting thread (client mode): 0xee9ae680
2026-04-15T20:08:46.961 [DEBUG] [Thread-24976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:08:46.976 [DEBUG] [Thread-24976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:08:46.976 [INFO] [Thread-24976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:08:46.983 [DEBUG] [Thread-24976] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:08:46.983 [DEBUG] [Thread-24976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:08:46.983 [DEBUG] [Thread-24976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:08:46.984 [DEBUG] [Thread-24976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:08:46.984 [DEBUG] [Thread-24976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:08:46.984 [DEBUG] [Thread-24976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:08:46.984 [DEBUG] [Thread-24976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:08:46.984 [DEBUG] [Thread-24976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:08:46.984 [DEBUG] [Thread-24976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:08:46.984 [DEBUG] [Thread-24976] [transport.py] [_log()] client lang: <none>
2026-04-15T20:08:46.984 [DEBUG] [Thread-24976] [transport.py] [_log()] server lang: <none>
2026-04-15T20:08:46.984 [DEBUG] [Thread-24976] [transport.py] [_log()] kex follows: False
2026-04-15T20:08:46.984 [DEBUG] [Thread-24976] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:08:46.984 [DEBUG] [Thread-24976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:08:46.985 [DEBUG] [Thread-24976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:08:46.985 [DEBUG] [Thread-24976] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:08:46.985 [DEBUG] [Thread-24976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:08:46.985 [DEBUG] [Thread-24976] [transport.py] [_log()] Compression: none
2026-04-15T20:08:46.985 [DEBUG] [Thread-24976] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:08:47.040 [DEBUG] [Thread-24976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:08:47.041 [DEBUG] [Thread-24976] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:08:47.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:08:47.041 [DEBUG] [Thread-24976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:08:47.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:08:47.097 [DEBUG] [Thread-24976] [transport.py] [_log()] userauth is OK
2026-04-15T20:08:47.097 [DEBUG] [Thread-24976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:08:47.097 [DEBUG] [Thread-24976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:08:47.097 [DEBUG] [Thread-24976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:08:47.097 [DEBUG] [Thread-24976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:08:47.123 [INFO] [Thread-24976] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:08:47.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:08:47.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:08:47.998 [DEBUG] [Thread-24976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:08:47.999 [DEBUG] [Thread-24976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:08:48.046 [DEBUG] [Thread-24976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:08:48.046 [DEBUG] [Thread-24976] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:08:48.055 [DEBUG] [Thread-24976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:08:48.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:08:48.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')
2026-04-15T20:08:48.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
2026-04-15T20:08:48.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:08:48.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:08:48.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:08:48.090 [DEBUG] [Thread-24976] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:08:48.679 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:54.072 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:58.785 [DEBUG] [Thread-24978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:08:59.550 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:04.969 [DEBUG] [Thread-24979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:05.043 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:10.436 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:13.829 [DEBUG] [Thread-24980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:15.815 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:18.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:09:18.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:09:18.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
2026-04-15T20:09:19.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 8, 57), 4.24567, 74.8139, 0.0, 10.2352, 9.66938, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:09:19.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:08:57
2026-04-15T20:09:19.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:09:20.212 [DEBUG] [Thread-24981] [transport.py] [_log()] starting thread (client mode): 0xee9041f0
2026-04-15T20:09:20.212 [DEBUG] [Thread-24981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:09:20.231 [DEBUG] [Thread-24981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:09:20.231 [INFO] [Thread-24981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:09:20.235 [DEBUG] [Thread-24981] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:09:20.235 [DEBUG] [Thread-24981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:09:20.235 [DEBUG] [Thread-24981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:09:20.235 [DEBUG] [Thread-24981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:09:20.235 [DEBUG] [Thread-24981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:09:20.235 [DEBUG] [Thread-24981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:09:20.235 [DEBUG] [Thread-24981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:09:20.235 [DEBUG] [Thread-24981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:09:20.236 [DEBUG] [Thread-24981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:09:20.236 [DEBUG] [Thread-24981] [transport.py] [_log()] client lang: <none>
2026-04-15T20:09:20.236 [DEBUG] [Thread-24981] [transport.py] [_log()] server lang: <none>
2026-04-15T20:09:20.236 [DEBUG] [Thread-24981] [transport.py] [_log()] kex follows: False
2026-04-15T20:09:20.236 [DEBUG] [Thread-24981] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:09:20.236 [DEBUG] [Thread-24981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:09:20.236 [DEBUG] [Thread-24981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:09:20.236 [DEBUG] [Thread-24981] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:09:20.236 [DEBUG] [Thread-24981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:09:20.236 [DEBUG] [Thread-24981] [transport.py] [_log()] Compression: none
2026-04-15T20:09:20.236 [DEBUG] [Thread-24981] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:09:20.252 [DEBUG] [Thread-24981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:09:20.252 [DEBUG] [Thread-24981] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:09:20.253 [DEBUG] [Thread-24981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:09:20.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:09:20.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:09:20.254 [DEBUG] [Thread-24981] [transport.py] [_log()] userauth is OK
2026-04-15T20:09:20.254 [DEBUG] [Thread-24981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:09:20.254 [DEBUG] [Thread-24981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:09:20.254 [DEBUG] [Thread-24981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:09:20.254 [DEBUG] [Thread-24981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:09:20.272 [INFO] [Thread-24981] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:09:20.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:09:21.063 [DEBUG] [Thread-24981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:09:21.063 [DEBUG] [Thread-24981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:09:21.064 [DEBUG] [Thread-24981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:09:21.104 [DEBUG] [Thread-24981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:09:21.104 [DEBUG] [Thread-24981] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:09:21.107 [DEBUG] [Thread-24981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:09:21.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:09:21.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:09:21.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:09:21.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:09:21.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:09:21.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:09:21.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:09:21.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:09:21.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:09:21.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.756035 -999.00   +9.50   7.81     79   +6.20 1 1 1 1 1     0    0 3.33 -4.95 ZNESW 9.1 7.8 303.9 8.9 10.4 -24.6 10.3 -23.4 9.9 -21.5 10.2 -23.6
2026-04-15T20:09:21.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:09:21.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:09:21.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.756035
2026-04-15T20:09:21.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:09:21.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:09:21.135 [DEBUG] [Thread-24981] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:09:21.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:09:21.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:09:21.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:09:21.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:08:57', tmtdew=4.24567, humidity=74.8139, cloud=0.0, wind=10.2352, temperature=9.66938, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:08:58', seeing=1.15, atlas_timestamp='2026-04-15T18:08:41.424', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0782500000000006, -0.055749999999999744, -0.06674999999999898, -0.06750000000000078, -0.03049999999999997, -0.014249999999998764, -0.03599999999999959, 0.0022500000000000853, -0.0035000000000007248, -0.009000000000000341, -0.07724999999999937, -0.009000000000000341, 0.03249999999999886, -0.028750000000000497, -0.03300000000000125, -0.018000000000000682, 0.020749999999999602, 0.024499999999999744, -0.026500000000000412, -0.010750000000001592, 0.026999999999999247, -0.026750000000001606, -0.025749999999998607, 0.24375000000000036, 0.13199999999999967, -0.04749999999999943, -0.05375000000000085, -0.07750000000000057, 0.03500000000000014, -0.04049999999999798, 0.03700000000000081, 0.2325000000000017, 0.09074999999999989], zp_timestamp='2026-04-15T18:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:09:21.220 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:21.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:09:21.392 [DEBUG] [Thread-24984] [transport.py] [_log()] starting thread (client mode): 0xee904b20
2026-04-15T20:09:21.392 [DEBUG] [Thread-24984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:09:21.411 [DEBUG] [Thread-24984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:09:21.411 [INFO] [Thread-24984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:09:21.422 [DEBUG] [Thread-24984] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:09:21.423 [DEBUG] [Thread-24984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:09:21.423 [DEBUG] [Thread-24984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:09:21.423 [DEBUG] [Thread-24984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:09:21.423 [DEBUG] [Thread-24984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:09:21.423 [DEBUG] [Thread-24984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:09:21.423 [DEBUG] [Thread-24984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:09:21.423 [DEBUG] [Thread-24984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:09:21.423 [DEBUG] [Thread-24984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:09:21.423 [DEBUG] [Thread-24984] [transport.py] [_log()] client lang: <none>
2026-04-15T20:09:21.423 [DEBUG] [Thread-24984] [transport.py] [_log()] server lang: <none>
2026-04-15T20:09:21.423 [DEBUG] [Thread-24984] [transport.py] [_log()] kex follows: False
2026-04-15T20:09:21.423 [DEBUG] [Thread-24984] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:09:21.424 [DEBUG] [Thread-24984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:09:21.424 [DEBUG] [Thread-24984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:09:21.424 [DEBUG] [Thread-24984] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:09:21.424 [DEBUG] [Thread-24984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:09:21.424 [DEBUG] [Thread-24984] [transport.py] [_log()] Compression: none
2026-04-15T20:09:21.424 [DEBUG] [Thread-24984] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:09:21.478 [DEBUG] [Thread-24984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:09:21.478 [DEBUG] [Thread-24984] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:09:21.479 [DEBUG] [Thread-24984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:09:21.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:09:21.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:09:21.537 [DEBUG] [Thread-24984] [transport.py] [_log()] userauth is OK
2026-04-15T20:09:21.537 [DEBUG] [Thread-24984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:09:21.537 [DEBUG] [Thread-24984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:09:21.538 [DEBUG] [Thread-24984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:09:21.538 [DEBUG] [Thread-24984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:09:21.563 [INFO] [Thread-24984] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:09:21.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:09:21.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:09:22.392 [DEBUG] [Thread-24984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:09:22.393 [DEBUG] [Thread-24984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:09:22.443 [DEBUG] [Thread-24984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:09:22.444 [DEBUG] [Thread-24984] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:09:22.455 [DEBUG] [Thread-24984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:09:22.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:09:22.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')
2026-04-15T20:09:22.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
2026-04-15T20:09:22.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:09:22.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:09:22.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:09:22.496 [DEBUG] [Thread-24984] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:09:26.706 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:28.860 [DEBUG] [Thread-24986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:32.090 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:32.633 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:32.634 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:37.584 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:42.988 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:43.899 [DEBUG] [Thread-24987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:48.405 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:09:52.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:09:52.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
2026-04-15T20:09:53.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 9, 33), 4.07129, 75.7273, 0.0, 12.0341, 9.80566, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:09:53.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:09:33
2026-04-15T20:09:53.787 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:54.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:09:54.606 [DEBUG] [Thread-24988] [transport.py] [_log()] starting thread (client mode): 0xee905e40
2026-04-15T20:09:54.606 [DEBUG] [Thread-24988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:09:54.624 [DEBUG] [Thread-24988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:09:54.624 [INFO] [Thread-24988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:09:54.627 [DEBUG] [Thread-24988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:09:54.627 [DEBUG] [Thread-24988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:09:54.628 [DEBUG] [Thread-24988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:09:54.628 [DEBUG] [Thread-24988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:09:54.628 [DEBUG] [Thread-24988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:09:54.628 [DEBUG] [Thread-24988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:09:54.628 [DEBUG] [Thread-24988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:09:54.628 [DEBUG] [Thread-24988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:09:54.628 [DEBUG] [Thread-24988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:09:54.628 [DEBUG] [Thread-24988] [transport.py] [_log()] client lang: <none>
2026-04-15T20:09:54.628 [DEBUG] [Thread-24988] [transport.py] [_log()] server lang: <none>
2026-04-15T20:09:54.628 [DEBUG] [Thread-24988] [transport.py] [_log()] kex follows: False
2026-04-15T20:09:54.628 [DEBUG] [Thread-24988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:09:54.628 [DEBUG] [Thread-24988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:09:54.629 [DEBUG] [Thread-24988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:09:54.629 [DEBUG] [Thread-24988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:09:54.629 [DEBUG] [Thread-24988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:09:54.629 [DEBUG] [Thread-24988] [transport.py] [_log()] Compression: none
2026-04-15T20:09:54.629 [DEBUG] [Thread-24988] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:09:54.646 [DEBUG] [Thread-24988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:09:54.647 [DEBUG] [Thread-24988] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:09:54.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:09:54.647 [DEBUG] [Thread-24988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:09:54.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:09:54.648 [DEBUG] [Thread-24988] [transport.py] [_log()] userauth is OK
2026-04-15T20:09:54.649 [DEBUG] [Thread-24988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:09:54.649 [DEBUG] [Thread-24988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:09:54.649 [DEBUG] [Thread-24988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:09:54.649 [DEBUG] [Thread-24988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:09:54.673 [INFO] [Thread-24988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:09:54.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:09:55.497 [DEBUG] [Thread-24988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:09:55.497 [DEBUG] [Thread-24988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:09:55.497 [DEBUG] [Thread-24988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:09:55.539 [DEBUG] [Thread-24988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:09:55.539 [DEBUG] [Thread-24988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:09:55.543 [DEBUG] [Thread-24988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:09:55.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:09:55.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:09:55.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:09:55.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:09:55.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:09:55.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:09:55.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:09:55.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:09:55.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:09:55.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.756382 -999.00   +9.50   8.49     79   +6.10 1 1 1 1 1     0    0 3.33 -5.15 ZNESW 7.3 8.5 315.6 9.0 10.4 -24.7 10.2 -23.4 9.9 -21.5 10.2 -23.5
2026-04-15T20:09:55.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:09:55.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:09:55.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.756382
2026-04-15T20:09:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:09:55.568 [DEBUG] [Thread-24988] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:09:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:09:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:09:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:09:55.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:09:55.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:09:33', tmtdew=4.07129, humidity=75.7273, cloud=0.0, wind=12.0341, temperature=9.80566, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:09:33', seeing=1.04, atlas_timestamp='2026-04-15T18:09:11.405', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0782500000000006, -0.055749999999999744, -0.06674999999999898, -0.06750000000000078, -0.03049999999999997, -0.014249999999998764, -0.03599999999999959, 0.0022500000000000853, -0.0035000000000007248, -0.009000000000000341, -0.07724999999999937, -0.009000000000000341, 0.03249999999999886, -0.028750000000000497, -0.03300000000000125, -0.018000000000000682, 0.020749999999999602, 0.024499999999999744, -0.026500000000000412, -0.010750000000001592, 0.026999999999999247, -0.026750000000001606, -0.025749999999998607, 0.24375000000000036, 0.13199999999999967, -0.04749999999999943, -0.05375000000000085, -0.07750000000000057, 0.03500000000000014, -0.04049999999999798, 0.03700000000000081, 0.2325000000000017, 0.09074999999999989], zp_timestamp='2026-04-15T18:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:09:55.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:09:55.843 [DEBUG] [Thread-24991] [transport.py] [_log()] starting thread (client mode): 0xf1367cd0
2026-04-15T20:09:55.843 [DEBUG] [Thread-24991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:09:55.857 [DEBUG] [Thread-24991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:09:55.857 [INFO] [Thread-24991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:09:55.865 [DEBUG] [Thread-24991] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:09:55.865 [DEBUG] [Thread-24991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:09:55.865 [DEBUG] [Thread-24991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:09:55.865 [DEBUG] [Thread-24991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:09:55.865 [DEBUG] [Thread-24991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:09:55.865 [DEBUG] [Thread-24991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:09:55.865 [DEBUG] [Thread-24991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:09:55.866 [DEBUG] [Thread-24991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:09:55.866 [DEBUG] [Thread-24991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:09:55.866 [DEBUG] [Thread-24991] [transport.py] [_log()] client lang: <none>
2026-04-15T20:09:55.866 [DEBUG] [Thread-24991] [transport.py] [_log()] server lang: <none>
2026-04-15T20:09:55.866 [DEBUG] [Thread-24991] [transport.py] [_log()] kex follows: False
2026-04-15T20:09:55.866 [DEBUG] [Thread-24991] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:09:55.866 [DEBUG] [Thread-24991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:09:55.866 [DEBUG] [Thread-24991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:09:55.866 [DEBUG] [Thread-24991] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:09:55.866 [DEBUG] [Thread-24991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:09:55.866 [DEBUG] [Thread-24991] [transport.py] [_log()] Compression: none
2026-04-15T20:09:55.867 [DEBUG] [Thread-24991] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:09:55.920 [DEBUG] [Thread-24991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:09:55.921 [DEBUG] [Thread-24991] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:09:55.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:09:55.921 [DEBUG] [Thread-24991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:09:55.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:09:55.978 [DEBUG] [Thread-24991] [transport.py] [_log()] userauth is OK
2026-04-15T20:09:55.978 [DEBUG] [Thread-24991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:09:55.978 [DEBUG] [Thread-24991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:09:55.978 [DEBUG] [Thread-24991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:09:55.978 [DEBUG] [Thread-24991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:09:56.005 [INFO] [Thread-24991] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:09:56.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:09:56.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:09:56.822 [DEBUG] [Thread-24991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:09:56.823 [DEBUG] [Thread-24991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:09:56.870 [DEBUG] [Thread-24991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:09:56.870 [DEBUG] [Thread-24991] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:09:56.879 [DEBUG] [Thread-24991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:09:56.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:09:56.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')
2026-04-15T20:09:56.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
2026-04-15T20:09:56.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:09:56.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:09:56.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:09:56.913 [DEBUG] [Thread-24991] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:09:58.928 [DEBUG] [Thread-24993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:09:59.179 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:04.760 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:05.132 [DEBUG] [Thread-24994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:10.163 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:13.970 [DEBUG] [Thread-24995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:15.532 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:20.898 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:26.275 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:26.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:10:26.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:10:26.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
2026-04-15T20:10:28.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 10, 8), 4.17829, 74.8968, 0.0, 8.68212, 9.61966, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:10:28.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:10:08
2026-04-15T20:10:28.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:10:29.000 [DEBUG] [Thread-24996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:29.148 [DEBUG] [Thread-24997] [transport.py] [_log()] starting thread (client mode): 0xee9ae680
2026-04-15T20:10:29.148 [DEBUG] [Thread-24997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:10:29.174 [DEBUG] [Thread-24997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:10:29.174 [INFO] [Thread-24997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:10:29.178 [DEBUG] [Thread-24997] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:10:29.178 [DEBUG] [Thread-24997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:10:29.178 [DEBUG] [Thread-24997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:10:29.178 [DEBUG] [Thread-24997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:10:29.178 [DEBUG] [Thread-24997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:10:29.178 [DEBUG] [Thread-24997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:10:29.178 [DEBUG] [Thread-24997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:10:29.178 [DEBUG] [Thread-24997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:10:29.178 [DEBUG] [Thread-24997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:10:29.178 [DEBUG] [Thread-24997] [transport.py] [_log()] client lang: <none>
2026-04-15T20:10:29.178 [DEBUG] [Thread-24997] [transport.py] [_log()] server lang: <none>
2026-04-15T20:10:29.179 [DEBUG] [Thread-24997] [transport.py] [_log()] kex follows: False
2026-04-15T20:10:29.179 [DEBUG] [Thread-24997] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:10:29.179 [DEBUG] [Thread-24997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:10:29.179 [DEBUG] [Thread-24997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:10:29.179 [DEBUG] [Thread-24997] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:10:29.179 [DEBUG] [Thread-24997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:10:29.179 [DEBUG] [Thread-24997] [transport.py] [_log()] Compression: none
2026-04-15T20:10:29.179 [DEBUG] [Thread-24997] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:10:29.196 [DEBUG] [Thread-24997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:10:29.196 [DEBUG] [Thread-24997] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:10:29.197 [DEBUG] [Thread-24997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:10:29.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:10:29.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:10:29.198 [DEBUG] [Thread-24997] [transport.py] [_log()] userauth is OK
2026-04-15T20:10:29.198 [DEBUG] [Thread-24997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:10:29.199 [DEBUG] [Thread-24997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:10:29.199 [DEBUG] [Thread-24997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:10:29.199 [DEBUG] [Thread-24997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:10:29.223 [INFO] [Thread-24997] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:10:29.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:10:31.943 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:32.836 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:32.837 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:34.481 [DEBUG] [Thread-24997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:10:34.482 [DEBUG] [Thread-24997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:10:34.482 [DEBUG] [Thread-24997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:10:34.523 [DEBUG] [Thread-24997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:10:34.523 [DEBUG] [Thread-24997] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:10:34.525 [DEBUG] [Thread-24997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:10:34.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:10:34.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:10:34.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:10:34.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:10:34.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:10:34.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:10:34.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:10:34.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:10:34.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:10:34.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.756729 -999.00   +9.50   8.48     79   +6.20 1 1 1 1 1     0    0 3.32 -5.53 ZNESW 8.3 8.5 314.2 8.8 10.4 -24.6 10.2 -23.4 9.9 -21.4 10.2 -23.5
2026-04-15T20:10:34.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:10:34.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:10:34.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.756729
2026-04-15T20:10:34.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:10:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:10:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:10:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:10:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:10:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:10:08', tmtdew=4.17829, humidity=74.8968, cloud=0.0, wind=8.68212, temperature=9.61966, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:10:08', seeing=1.12, atlas_timestamp='2026-04-15T18:09:41.386', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0782500000000006, -0.055749999999999744, -0.06674999999999898, -0.06750000000000078, -0.03049999999999997, -0.014249999999998764, -0.03599999999999959, 0.0022500000000000853, -0.0035000000000007248, -0.009000000000000341, -0.07724999999999937, -0.009000000000000341, 0.03249999999999886, -0.028750000000000497, -0.03300000000000125, -0.018000000000000682, 0.020749999999999602, 0.024499999999999744, -0.026500000000000412, -0.010750000000001592, 0.026999999999999247, -0.026750000000001606, -0.025749999999998607, 0.24375000000000036, 0.13199999999999967, -0.04749999999999943, -0.05375000000000085, -0.07750000000000057, 0.03500000000000014, -0.04049999999999798, 0.03700000000000081, 0.2325000000000017, 0.09074999999999989], zp_timestamp='2026-04-15T18:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:10:34.611 [DEBUG] [Thread-24997] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:10:34.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:10:34.822 [DEBUG] [Thread-25000] [transport.py] [_log()] starting thread (client mode): 0xee907970
2026-04-15T20:10:34.822 [DEBUG] [Thread-25000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:10:34.836 [DEBUG] [Thread-25000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:10:34.836 [INFO] [Thread-25000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] client lang: <none>
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] server lang: <none>
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] kex follows: False
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:10:34.844 [DEBUG] [Thread-25000] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:10:34.845 [DEBUG] [Thread-25000] [transport.py] [_log()] Compression: none
2026-04-15T20:10:34.845 [DEBUG] [Thread-25000] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:10:34.900 [DEBUG] [Thread-25000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:10:34.900 [DEBUG] [Thread-25000] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:10:34.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:10:34.901 [DEBUG] [Thread-25000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:10:34.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:10:34.958 [DEBUG] [Thread-25000] [transport.py] [_log()] userauth is OK
2026-04-15T20:10:34.958 [DEBUG] [Thread-25000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:10:34.958 [DEBUG] [Thread-25000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:10:34.958 [DEBUG] [Thread-25000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:10:34.958 [DEBUG] [Thread-25000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:10:34.975 [INFO] [Thread-25000] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:10:34.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:10:34.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:10:35.822 [DEBUG] [Thread-25000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:10:35.822 [DEBUG] [Thread-25000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:10:35.870 [DEBUG] [Thread-25000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:10:35.871 [DEBUG] [Thread-25000] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:10:35.880 [DEBUG] [Thread-25000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:10:35.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:10:35.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')
2026-04-15T20:10:35.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
2026-04-15T20:10:35.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:10:35.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:10:35.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:10:35.916 [DEBUG] [Thread-25000] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:10:37.511 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:42.903 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:44.028 [DEBUG] [Thread-25002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:48.295 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:53.663 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:59.027 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:10:59.074 [DEBUG] [Thread-25003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:04.420 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:05.291 [DEBUG] [Thread-25004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:05.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:11:05.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:11:05.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
2026-04-15T20:11:07.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 10, 44), 4.06909, 75.728, 0.0, 9.7056, 9.73986, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:11:07.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:10:44
2026-04-15T20:11:07.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:11:08.142 [DEBUG] [Thread-25005] [transport.py] [_log()] starting thread (client mode): 0xee9adb70
2026-04-15T20:11:08.142 [DEBUG] [Thread-25005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:11:08.161 [DEBUG] [Thread-25005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:11:08.161 [INFO] [Thread-25005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:11:08.165 [DEBUG] [Thread-25005] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:11:08.165 [DEBUG] [Thread-25005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:11:08.165 [DEBUG] [Thread-25005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:11:08.165 [DEBUG] [Thread-25005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:11:08.165 [DEBUG] [Thread-25005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:11:08.165 [DEBUG] [Thread-25005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:11:08.165 [DEBUG] [Thread-25005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:11:08.165 [DEBUG] [Thread-25005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:11:08.165 [DEBUG] [Thread-25005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:11:08.165 [DEBUG] [Thread-25005] [transport.py] [_log()] client lang: <none>
2026-04-15T20:11:08.165 [DEBUG] [Thread-25005] [transport.py] [_log()] server lang: <none>
2026-04-15T20:11:08.165 [DEBUG] [Thread-25005] [transport.py] [_log()] kex follows: False
2026-04-15T20:11:08.165 [DEBUG] [Thread-25005] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:11:08.165 [DEBUG] [Thread-25005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:11:08.165 [DEBUG] [Thread-25005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:11:08.166 [DEBUG] [Thread-25005] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:11:08.166 [DEBUG] [Thread-25005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:11:08.166 [DEBUG] [Thread-25005] [transport.py] [_log()] Compression: none
2026-04-15T20:11:08.166 [DEBUG] [Thread-25005] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:11:08.173 [DEBUG] [Thread-25005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:11:08.173 [DEBUG] [Thread-25005] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:11:08.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:11:08.174 [DEBUG] [Thread-25005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:11:08.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:11:08.174 [DEBUG] [Thread-25005] [transport.py] [_log()] userauth is OK
2026-04-15T20:11:08.175 [DEBUG] [Thread-25005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:11:08.175 [DEBUG] [Thread-25005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:11:08.175 [DEBUG] [Thread-25005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:11:08.175 [DEBUG] [Thread-25005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:11:08.193 [INFO] [Thread-25005] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:11:08.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:11:08.980 [DEBUG] [Thread-25005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:11:08.980 [DEBUG] [Thread-25005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:11:08.981 [DEBUG] [Thread-25005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:11:09.021 [DEBUG] [Thread-25005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:11:09.021 [DEBUG] [Thread-25005] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:11:09.024 [DEBUG] [Thread-25005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:11:09.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:11:09.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:11:09.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:11:09.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:11:09.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:11:09.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:11:09.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:11:09.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:11:09.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:11:09.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.757077 -999.00   +9.50   9.16     79   +6.20 1 1 1 1 1     0    0 3.32 -6.05 ZNESW 8.5 9.2 304.8 10.4 10.4 -24.7 10.2 -23.4 9.9 -21.4 10.2 -23.6
2026-04-15T20:11:09.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:11:09.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:11:09.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.757077
2026-04-15T20:11:09.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:11:09.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:11:09.048 [DEBUG] [Thread-25005] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:11:09.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:11:09.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:11:09.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:11:09.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:10:44', tmtdew=4.06909, humidity=75.728, cloud=0.0, wind=9.7056, temperature=9.73986, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:10:44', seeing=1.14, atlas_timestamp='2026-04-15T18:10:11.453', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08425000000000082, -0.047750000000000625, -0.031249999999998224, -0.062000000000001165, -0.03250000000000064, -0.01974999999999838, -0.05000000000000071, -0.04625000000000057, 0.022999999999999687, -0.0129999999999999, -0.07675000000000054, -0.03500000000000014, 0.0019999999999988916, 0.004249999999998977, -0.0005000000000006111, -0.03750000000000142, -0.00575000000000081, 0.009500000000000952, -0.018000000000000682, -0.023750000000001492, 0.010999999999999233, -0.015250000000001762, -0.01774999999999949, 0.02275000000000027, -0.00849999999999973, -0.04049999999999976, -0.03524999999999956, -0.03950000000000031, -0.019000000000000128, -0.04399999999999871, 0.01600000000000179, 0.18400000000000105, 0.3197499999999991], zp_timestamp='2026-04-15T18:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:11:09.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:11:09.310 [DEBUG] [Thread-25008] [transport.py] [_log()] starting thread (client mode): 0xf13ca6e0
2026-04-15T20:11:09.310 [DEBUG] [Thread-25008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:11:09.325 [DEBUG] [Thread-25008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:11:09.325 [INFO] [Thread-25008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:11:09.332 [DEBUG] [Thread-25008] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:11:09.332 [DEBUG] [Thread-25008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:11:09.332 [DEBUG] [Thread-25008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:11:09.332 [DEBUG] [Thread-25008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:11:09.332 [DEBUG] [Thread-25008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:11:09.332 [DEBUG] [Thread-25008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:11:09.332 [DEBUG] [Thread-25008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:11:09.333 [DEBUG] [Thread-25008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:11:09.333 [DEBUG] [Thread-25008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:11:09.333 [DEBUG] [Thread-25008] [transport.py] [_log()] client lang: <none>
2026-04-15T20:11:09.333 [DEBUG] [Thread-25008] [transport.py] [_log()] server lang: <none>
2026-04-15T20:11:09.333 [DEBUG] [Thread-25008] [transport.py] [_log()] kex follows: False
2026-04-15T20:11:09.333 [DEBUG] [Thread-25008] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:11:09.333 [DEBUG] [Thread-25008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:11:09.333 [DEBUG] [Thread-25008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:11:09.333 [DEBUG] [Thread-25008] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:11:09.333 [DEBUG] [Thread-25008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:11:09.333 [DEBUG] [Thread-25008] [transport.py] [_log()] Compression: none
2026-04-15T20:11:09.334 [DEBUG] [Thread-25008] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:11:09.389 [DEBUG] [Thread-25008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:11:09.390 [DEBUG] [Thread-25008] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:11:09.390 [DEBUG] [Thread-25008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:11:09.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:11:09.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:11:09.449 [DEBUG] [Thread-25008] [transport.py] [_log()] userauth is OK
2026-04-15T20:11:09.449 [DEBUG] [Thread-25008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:11:09.450 [DEBUG] [Thread-25008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:11:09.450 [DEBUG] [Thread-25008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:11:09.450 [DEBUG] [Thread-25008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:11:09.476 [INFO] [Thread-25008] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:11:09.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:11:09.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:11:09.800 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:10.286 [DEBUG] [Thread-25008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:11:10.286 [DEBUG] [Thread-25008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:11:10.334 [DEBUG] [Thread-25008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:11:10.334 [DEBUG] [Thread-25008] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:11:10.343 [DEBUG] [Thread-25008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:11:10.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:11:10.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')
2026-04-15T20:11:10.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T20:11:10.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:11:10.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:11:10.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:11:10.378 [DEBUG] [Thread-25008] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:11:14.103 [DEBUG] [Thread-25010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:15.494 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:20.884 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:26.263 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:29.152 [DEBUG] [Thread-25011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:31.630 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:33.040 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:33.041 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:37.036 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:40.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:11:40.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:11:40.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
2026-04-15T20:11:41.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 11, 19), 4.12141, 74.9303, 0.0, 8.73504, 9.55335, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:11:41.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:11:19
2026-04-15T20:11:42.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:11:42.528 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:42.537 [DEBUG] [Thread-25012] [transport.py] [_log()] starting thread (client mode): 0xf13c9990
2026-04-15T20:11:42.538 [DEBUG] [Thread-25012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:11:42.559 [DEBUG] [Thread-25012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:11:42.559 [INFO] [Thread-25012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:11:42.561 [DEBUG] [Thread-25012] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:11:42.561 [DEBUG] [Thread-25012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:11:42.562 [DEBUG] [Thread-25012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:11:42.562 [DEBUG] [Thread-25012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:11:42.562 [DEBUG] [Thread-25012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:11:42.562 [DEBUG] [Thread-25012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:11:42.562 [DEBUG] [Thread-25012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:11:42.562 [DEBUG] [Thread-25012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:11:42.562 [DEBUG] [Thread-25012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:11:42.562 [DEBUG] [Thread-25012] [transport.py] [_log()] client lang: <none>
2026-04-15T20:11:42.562 [DEBUG] [Thread-25012] [transport.py] [_log()] server lang: <none>
2026-04-15T20:11:42.562 [DEBUG] [Thread-25012] [transport.py] [_log()] kex follows: False
2026-04-15T20:11:42.562 [DEBUG] [Thread-25012] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:11:42.562 [DEBUG] [Thread-25012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:11:42.563 [DEBUG] [Thread-25012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:11:42.563 [DEBUG] [Thread-25012] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:11:42.563 [DEBUG] [Thread-25012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:11:42.563 [DEBUG] [Thread-25012] [transport.py] [_log()] Compression: none
2026-04-15T20:11:42.563 [DEBUG] [Thread-25012] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:11:42.581 [DEBUG] [Thread-25012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:11:42.581 [DEBUG] [Thread-25012] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:11:42.582 [DEBUG] [Thread-25012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:11:42.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:11:42.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:11:42.583 [DEBUG] [Thread-25012] [transport.py] [_log()] userauth is OK
2026-04-15T20:11:42.583 [DEBUG] [Thread-25012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:11:42.583 [DEBUG] [Thread-25012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:11:42.583 [DEBUG] [Thread-25012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:11:42.583 [DEBUG] [Thread-25012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:11:42.607 [INFO] [Thread-25012] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:11:42.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:11:43.429 [DEBUG] [Thread-25012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:11:43.429 [DEBUG] [Thread-25012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:11:43.430 [DEBUG] [Thread-25012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:11:43.470 [DEBUG] [Thread-25012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:11:43.470 [DEBUG] [Thread-25012] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:11:43.473 [DEBUG] [Thread-25012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:11:43.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:11:43.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:11:43.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:11:43.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:11:43.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:11:43.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:11:43.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:11:43.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:11:43.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:11:43.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.757424 -999.00   +9.50   8.75     79   +6.20 1 1 1 1 1     0    0 3.28 -6.68 ZNESW 7.7 8.8 312.8 10.7 10.4 -24.7 10.3 -23.4 10.0 -21.4 10.2 -23.5
2026-04-15T20:11:43.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:11:43.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:11:43.500 [DEBUG] [Thread-25012] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:11:43.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.757424
2026-04-15T20:11:43.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:11:43.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:11:43.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:11:43.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:11:43.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:11:43.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:11:19', tmtdew=4.12141, humidity=74.9303, cloud=0.0, wind=8.73504, temperature=9.55335, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:11:19', seeing=1.27, atlas_timestamp='2026-04-15T18:10:41.434', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08425000000000082, -0.047750000000000625, -0.031249999999998224, -0.062000000000001165, -0.03250000000000064, -0.01974999999999838, -0.05000000000000071, -0.04625000000000057, 0.022999999999999687, -0.0129999999999999, -0.07675000000000054, -0.03500000000000014, 0.0019999999999988916, 0.004249999999998977, -0.0005000000000006111, -0.03750000000000142, -0.00575000000000081, 0.009500000000000952, -0.018000000000000682, -0.023750000000001492, 0.010999999999999233, -0.015250000000001762, -0.01774999999999949, 0.02275000000000027, -0.00849999999999973, -0.04049999999999976, -0.03524999999999956, -0.03950000000000031, -0.019000000000000128, -0.04399999999999871, 0.01600000000000179, 0.18400000000000105, 0.3197499999999991], zp_timestamp='2026-04-15T18:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:11:43.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:11:43.764 [DEBUG] [Thread-25015] [transport.py] [_log()] starting thread (client mode): 0xf13357e0
2026-04-15T20:11:43.765 [DEBUG] [Thread-25015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:11:43.778 [DEBUG] [Thread-25015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:11:43.779 [INFO] [Thread-25015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:11:43.786 [DEBUG] [Thread-25015] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:11:43.786 [DEBUG] [Thread-25015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:11:43.786 [DEBUG] [Thread-25015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:11:43.786 [DEBUG] [Thread-25015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:11:43.786 [DEBUG] [Thread-25015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:11:43.786 [DEBUG] [Thread-25015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:11:43.786 [DEBUG] [Thread-25015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:11:43.787 [DEBUG] [Thread-25015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:11:43.787 [DEBUG] [Thread-25015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:11:43.787 [DEBUG] [Thread-25015] [transport.py] [_log()] client lang: <none>
2026-04-15T20:11:43.787 [DEBUG] [Thread-25015] [transport.py] [_log()] server lang: <none>
2026-04-15T20:11:43.787 [DEBUG] [Thread-25015] [transport.py] [_log()] kex follows: False
2026-04-15T20:11:43.787 [DEBUG] [Thread-25015] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:11:43.787 [DEBUG] [Thread-25015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:11:43.787 [DEBUG] [Thread-25015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:11:43.787 [DEBUG] [Thread-25015] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:11:43.787 [DEBUG] [Thread-25015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:11:43.788 [DEBUG] [Thread-25015] [transport.py] [_log()] Compression: none
2026-04-15T20:11:43.788 [DEBUG] [Thread-25015] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:11:43.845 [DEBUG] [Thread-25015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:11:43.846 [DEBUG] [Thread-25015] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:11:43.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:11:43.846 [DEBUG] [Thread-25015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:11:43.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:11:43.902 [DEBUG] [Thread-25015] [transport.py] [_log()] userauth is OK
2026-04-15T20:11:43.902 [DEBUG] [Thread-25015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:11:43.903 [DEBUG] [Thread-25015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:11:43.903 [DEBUG] [Thread-25015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:11:43.903 [DEBUG] [Thread-25015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:11:43.928 [INFO] [Thread-25015] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:11:43.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:11:43.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:11:44.184 [DEBUG] [Thread-25017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:44.762 [DEBUG] [Thread-25015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:11:44.762 [DEBUG] [Thread-25015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:11:44.810 [DEBUG] [Thread-25015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:11:44.810 [DEBUG] [Thread-25015] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:11:44.819 [DEBUG] [Thread-25015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:11:44.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:11:44.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')
2026-04-15T20:11:44.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
2026-04-15T20:11:44.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:11:44.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:11:44.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:11:44.854 [DEBUG] [Thread-25015] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:11:48.020 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:53.660 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:59.052 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:11:59.227 [DEBUG] [Thread-25018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:04.529 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:05.440 [DEBUG] [Thread-25019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:10.023 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:14.257 [DEBUG] [Thread-25020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:12:14.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:12:14.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
2026-04-15T20:12:15.402 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 11, 55), 4.17141, 74.9303, 0.0, 10.4821, 9.60332, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:12:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:11:55
2026-04-15T20:12:16.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:12:16.906 [DEBUG] [Thread-25021] [transport.py] [_log()] starting thread (client mode): 0xf13cba60
2026-04-15T20:12:16.906 [DEBUG] [Thread-25021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:12:16.928 [DEBUG] [Thread-25021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:12:16.928 [INFO] [Thread-25021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:12:16.931 [DEBUG] [Thread-25021] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:12:16.931 [DEBUG] [Thread-25021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:12:16.931 [DEBUG] [Thread-25021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:12:16.931 [DEBUG] [Thread-25021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:12:16.931 [DEBUG] [Thread-25021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:12:16.931 [DEBUG] [Thread-25021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:12:16.931 [DEBUG] [Thread-25021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:12:16.931 [DEBUG] [Thread-25021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:12:16.931 [DEBUG] [Thread-25021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:12:16.932 [DEBUG] [Thread-25021] [transport.py] [_log()] client lang: <none>
2026-04-15T20:12:16.932 [DEBUG] [Thread-25021] [transport.py] [_log()] server lang: <none>
2026-04-15T20:12:16.932 [DEBUG] [Thread-25021] [transport.py] [_log()] kex follows: False
2026-04-15T20:12:16.932 [DEBUG] [Thread-25021] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:12:16.932 [DEBUG] [Thread-25021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:12:16.932 [DEBUG] [Thread-25021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:12:16.932 [DEBUG] [Thread-25021] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:12:16.932 [DEBUG] [Thread-25021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:12:16.932 [DEBUG] [Thread-25021] [transport.py] [_log()] Compression: none
2026-04-15T20:12:16.932 [DEBUG] [Thread-25021] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:12:16.949 [DEBUG] [Thread-25021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:12:16.949 [DEBUG] [Thread-25021] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:12:16.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:12:16.950 [DEBUG] [Thread-25021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:12:16.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:12:16.951 [DEBUG] [Thread-25021] [transport.py] [_log()] userauth is OK
2026-04-15T20:12:16.951 [DEBUG] [Thread-25021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:12:16.951 [DEBUG] [Thread-25021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:12:16.951 [DEBUG] [Thread-25021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:12:16.951 [DEBUG] [Thread-25021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:12:16.987 [INFO] [Thread-25021] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:12:16.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:12:17.788 [DEBUG] [Thread-25021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:12:17.788 [DEBUG] [Thread-25021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:12:17.788 [DEBUG] [Thread-25021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:12:17.829 [DEBUG] [Thread-25021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:12:17.829 [DEBUG] [Thread-25021] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:12:17.832 [DEBUG] [Thread-25021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:12:17.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:12:17.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:12:17.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:12:17.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:12:17.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:12:17.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:12:17.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:12:17.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:12:17.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:12:17.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.758118 -999.00   +9.50   8.73     79   +6.10 1 1 1 1 1     0    0 3.25 -8.21 ZNESW 8.9 8.7 302.4 10.3 10.4 -24.6 10.2 -23.4 9.9 -21.4 10.2 -23.5
2026-04-15T20:12:17.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:12:17.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:12:17.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.758118
2026-04-15T20:12:17.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:12:17.856 [DEBUG] [Thread-25021] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:12:17.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:12:17.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:12:17.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:12:17.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:12:17.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:11:55', tmtdew=4.17141, humidity=74.9303, cloud=0.0, wind=10.4821, temperature=9.60332, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:11:55', seeing=1.51, atlas_timestamp='2026-04-15T18:11:41.395', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08425000000000082, -0.047750000000000625, -0.031249999999998224, -0.062000000000001165, -0.03250000000000064, -0.01974999999999838, -0.05000000000000071, -0.04625000000000057, 0.022999999999999687, -0.0129999999999999, -0.07675000000000054, -0.03500000000000014, 0.0019999999999988916, 0.004249999999998977, -0.0005000000000006111, -0.03750000000000142, -0.00575000000000081, 0.009500000000000952, -0.018000000000000682, -0.023750000000001492, 0.010999999999999233, -0.015250000000001762, -0.01774999999999949, 0.02275000000000027, -0.00849999999999973, -0.04049999999999976, -0.03524999999999956, -0.03950000000000031, -0.019000000000000128, -0.04399999999999871, 0.01600000000000179, 0.18400000000000105, 0.3197499999999991], zp_timestamp='2026-04-15T18:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:12:18.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:12:18.112 [DEBUG] [Thread-25024] [transport.py] [_log()] starting thread (client mode): 0xf13c9690
2026-04-15T20:12:18.112 [DEBUG] [Thread-25024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:12:18.127 [DEBUG] [Thread-25024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:12:18.127 [INFO] [Thread-25024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:12:18.135 [DEBUG] [Thread-25024] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:12:18.135 [DEBUG] [Thread-25024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:12:18.135 [DEBUG] [Thread-25024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:12:18.135 [DEBUG] [Thread-25024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:12:18.135 [DEBUG] [Thread-25024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:12:18.135 [DEBUG] [Thread-25024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:12:18.135 [DEBUG] [Thread-25024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:12:18.135 [DEBUG] [Thread-25024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:12:18.136 [DEBUG] [Thread-25024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:12:18.136 [DEBUG] [Thread-25024] [transport.py] [_log()] client lang: <none>
2026-04-15T20:12:18.136 [DEBUG] [Thread-25024] [transport.py] [_log()] server lang: <none>
2026-04-15T20:12:18.136 [DEBUG] [Thread-25024] [transport.py] [_log()] kex follows: False
2026-04-15T20:12:18.136 [DEBUG] [Thread-25024] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:12:18.136 [DEBUG] [Thread-25024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:12:18.136 [DEBUG] [Thread-25024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:12:18.136 [DEBUG] [Thread-25024] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:12:18.136 [DEBUG] [Thread-25024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:12:18.136 [DEBUG] [Thread-25024] [transport.py] [_log()] Compression: none
2026-04-15T20:12:18.136 [DEBUG] [Thread-25024] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:12:18.194 [DEBUG] [Thread-25024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:12:18.194 [DEBUG] [Thread-25024] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:12:18.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:12:18.195 [DEBUG] [Thread-25024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:12:18.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:12:18.251 [DEBUG] [Thread-25024] [transport.py] [_log()] userauth is OK
2026-04-15T20:12:18.251 [DEBUG] [Thread-25024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:12:18.251 [DEBUG] [Thread-25024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:12:18.251 [DEBUG] [Thread-25024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:12:18.251 [DEBUG] [Thread-25024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:12:18.275 [INFO] [Thread-25024] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:12:18.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:12:18.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:12:19.112 [DEBUG] [Thread-25024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:12:19.112 [DEBUG] [Thread-25024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:12:19.160 [DEBUG] [Thread-25024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:12:19.160 [DEBUG] [Thread-25024] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:12:19.169 [DEBUG] [Thread-25024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:12:19.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:12:19.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')
2026-04-15T20:12:19.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
2026-04-15T20:12:19.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:12:19.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:12:19.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:12:19.204 [DEBUG] [Thread-25024] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:12:20.820 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:26.211 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:29.289 [DEBUG] [Thread-25026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:31.680 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:33.292 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:33.293 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:37.358 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:42.751 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:44.334 [DEBUG] [Thread-25027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:48.143 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:49.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:12:49.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:12:49.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T20:12:50.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 12, 31), 4.1651, 74.9635, 0.0, 10.1646, 9.60332, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:12:50.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:12:31
2026-04-15T20:12:51.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:12:51.475 [DEBUG] [Thread-25028] [transport.py] [_log()] starting thread (client mode): 0xf13fd750
2026-04-15T20:12:51.476 [DEBUG] [Thread-25028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:12:51.495 [DEBUG] [Thread-25028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:12:51.495 [INFO] [Thread-25028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:12:51.498 [DEBUG] [Thread-25028] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:12:51.498 [DEBUG] [Thread-25028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:12:51.498 [DEBUG] [Thread-25028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:12:51.498 [DEBUG] [Thread-25028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:12:51.498 [DEBUG] [Thread-25028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:12:51.498 [DEBUG] [Thread-25028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:12:51.498 [DEBUG] [Thread-25028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:12:51.499 [DEBUG] [Thread-25028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:12:51.499 [DEBUG] [Thread-25028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:12:51.499 [DEBUG] [Thread-25028] [transport.py] [_log()] client lang: <none>
2026-04-15T20:12:51.499 [DEBUG] [Thread-25028] [transport.py] [_log()] server lang: <none>
2026-04-15T20:12:51.499 [DEBUG] [Thread-25028] [transport.py] [_log()] kex follows: False
2026-04-15T20:12:51.499 [DEBUG] [Thread-25028] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:12:51.499 [DEBUG] [Thread-25028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:12:51.499 [DEBUG] [Thread-25028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:12:51.499 [DEBUG] [Thread-25028] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:12:51.499 [DEBUG] [Thread-25028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:12:51.500 [DEBUG] [Thread-25028] [transport.py] [_log()] Compression: none
2026-04-15T20:12:51.500 [DEBUG] [Thread-25028] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:12:51.516 [DEBUG] [Thread-25028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:12:51.517 [DEBUG] [Thread-25028] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:12:51.517 [DEBUG] [Thread-25028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:12:51.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:12:51.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:12:51.518 [DEBUG] [Thread-25028] [transport.py] [_log()] userauth is OK
2026-04-15T20:12:51.518 [DEBUG] [Thread-25028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:12:51.518 [DEBUG] [Thread-25028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:12:51.519 [DEBUG] [Thread-25028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:12:51.519 [DEBUG] [Thread-25028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:12:51.542 [INFO] [Thread-25028] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:12:51.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:12:52.347 [DEBUG] [Thread-25028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:12:52.348 [DEBUG] [Thread-25028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:12:52.348 [DEBUG] [Thread-25028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:12:52.388 [DEBUG] [Thread-25028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:12:52.388 [DEBUG] [Thread-25028] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:12:52.391 [DEBUG] [Thread-25028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:12:52.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:12:52.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:12:52.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:12:52.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:12:52.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:12:52.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:12:52.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:12:52.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:12:52.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:12:52.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.758466 -999.00   +9.50   7.57     79   +6.20 1 1 1 1 1     0    0 3.17 -9.50 ZNESW 8.3 7.6 307.8 10.4 10.4 -24.7 10.2 -23.4 9.9 -21.4 10.2 -23.5
2026-04-15T20:12:52.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:12:52.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:12:52.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.758466
2026-04-15T20:12:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:12:52.418 [DEBUG] [Thread-25028] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:12:52.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:12:52.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:12:52.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:12:52.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:12:52.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:12:31', tmtdew=4.1651, humidity=74.9635, cloud=0.0, wind=10.1646, temperature=9.60332, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:12:31', seeing=1.51, atlas_timestamp='2026-04-15T18:12:11.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08425000000000082, -0.047750000000000625, -0.031249999999998224, -0.062000000000001165, -0.03250000000000064, -0.01974999999999838, -0.05000000000000071, -0.04625000000000057, 0.022999999999999687, -0.0129999999999999, -0.07675000000000054, -0.03500000000000014, 0.0019999999999988916, 0.004249999999998977, -0.0005000000000006111, -0.03750000000000142, -0.00575000000000081, 0.009500000000000952, -0.018000000000000682, -0.023750000000001492, 0.010999999999999233, -0.015250000000001762, -0.01774999999999949, 0.02275000000000027, -0.00849999999999973, -0.04049999999999976, -0.03524999999999956, -0.03950000000000031, -0.019000000000000128, -0.04399999999999871, 0.01600000000000179, 0.18400000000000105, 0.3197499999999991], zp_timestamp='2026-04-15T18:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:12:52.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:12:52.678 [DEBUG] [Thread-25031] [transport.py] [_log()] starting thread (client mode): 0xf13cb850
2026-04-15T20:12:52.678 [DEBUG] [Thread-25031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:12:52.694 [DEBUG] [Thread-25031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:12:52.694 [INFO] [Thread-25031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:12:52.702 [DEBUG] [Thread-25031] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:12:52.702 [DEBUG] [Thread-25031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:12:52.702 [DEBUG] [Thread-25031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:12:52.702 [DEBUG] [Thread-25031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:12:52.702 [DEBUG] [Thread-25031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:12:52.702 [DEBUG] [Thread-25031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:12:52.702 [DEBUG] [Thread-25031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:12:52.702 [DEBUG] [Thread-25031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:12:52.702 [DEBUG] [Thread-25031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:12:52.702 [DEBUG] [Thread-25031] [transport.py] [_log()] client lang: <none>
2026-04-15T20:12:52.702 [DEBUG] [Thread-25031] [transport.py] [_log()] server lang: <none>
2026-04-15T20:12:52.703 [DEBUG] [Thread-25031] [transport.py] [_log()] kex follows: False
2026-04-15T20:12:52.703 [DEBUG] [Thread-25031] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:12:52.703 [DEBUG] [Thread-25031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:12:52.703 [DEBUG] [Thread-25031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:12:52.703 [DEBUG] [Thread-25031] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:12:52.703 [DEBUG] [Thread-25031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:12:52.703 [DEBUG] [Thread-25031] [transport.py] [_log()] Compression: none
2026-04-15T20:12:52.703 [DEBUG] [Thread-25031] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:12:52.758 [DEBUG] [Thread-25031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:12:52.759 [DEBUG] [Thread-25031] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:12:52.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:12:52.759 [DEBUG] [Thread-25031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:12:52.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:12:52.821 [DEBUG] [Thread-25031] [transport.py] [_log()] userauth is OK
2026-04-15T20:12:52.822 [DEBUG] [Thread-25031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:12:52.822 [DEBUG] [Thread-25031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:12:52.822 [DEBUG] [Thread-25031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:12:52.822 [DEBUG] [Thread-25031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:12:52.848 [INFO] [Thread-25031] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:12:52.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:12:52.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:12:53.547 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:53.675 [DEBUG] [Thread-25031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:12:53.676 [DEBUG] [Thread-25031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:12:53.723 [DEBUG] [Thread-25031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:12:53.723 [DEBUG] [Thread-25031] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:12:53.732 [DEBUG] [Thread-25031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:12:53.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:12:53.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')
2026-04-15T20:12:53.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
2026-04-15T20:12:53.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:12:53.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:12:53.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:12:53.767 [DEBUG] [Thread-25031] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:12:58.917 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:12:59.364 [DEBUG] [Thread-25033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:04.471 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:05.587 [DEBUG] [Thread-25034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:09.877 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:14.401 [DEBUG] [Thread-25035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:15.243 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:20.936 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:23.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:13:23.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:13:23.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
2026-04-15T20:13:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 13, 6), 4.15825, 74.9969, 0.0, 10.6938, 9.58696, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:13:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:13:06
2026-04-15T20:13:25.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:13:25.938 [DEBUG] [Thread-25036] [transport.py] [_log()] starting thread (client mode): 0xf1367940
2026-04-15T20:13:25.938 [DEBUG] [Thread-25036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:13:25.959 [DEBUG] [Thread-25036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:13:25.959 [INFO] [Thread-25036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:13:25.962 [DEBUG] [Thread-25036] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:13:25.962 [DEBUG] [Thread-25036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:13:25.962 [DEBUG] [Thread-25036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:13:25.962 [DEBUG] [Thread-25036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:13:25.963 [DEBUG] [Thread-25036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:13:25.963 [DEBUG] [Thread-25036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:13:25.963 [DEBUG] [Thread-25036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:13:25.963 [DEBUG] [Thread-25036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:13:25.963 [DEBUG] [Thread-25036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:13:25.963 [DEBUG] [Thread-25036] [transport.py] [_log()] client lang: <none>
2026-04-15T20:13:25.963 [DEBUG] [Thread-25036] [transport.py] [_log()] server lang: <none>
2026-04-15T20:13:25.963 [DEBUG] [Thread-25036] [transport.py] [_log()] kex follows: False
2026-04-15T20:13:25.963 [DEBUG] [Thread-25036] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:13:25.963 [DEBUG] [Thread-25036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:13:25.964 [DEBUG] [Thread-25036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:13:25.964 [DEBUG] [Thread-25036] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:13:25.964 [DEBUG] [Thread-25036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:13:25.964 [DEBUG] [Thread-25036] [transport.py] [_log()] Compression: none
2026-04-15T20:13:25.964 [DEBUG] [Thread-25036] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:13:25.980 [DEBUG] [Thread-25036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:13:25.980 [DEBUG] [Thread-25036] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:13:25.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:13:25.981 [DEBUG] [Thread-25036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:13:25.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:13:25.982 [DEBUG] [Thread-25036] [transport.py] [_log()] userauth is OK
2026-04-15T20:13:25.982 [DEBUG] [Thread-25036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:13:25.982 [DEBUG] [Thread-25036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:13:25.982 [DEBUG] [Thread-25036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:13:25.982 [DEBUG] [Thread-25036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:13:26.006 [INFO] [Thread-25036] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:13:26.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:13:26.291 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:26.809 [DEBUG] [Thread-25036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:13:26.809 [DEBUG] [Thread-25036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:13:26.810 [DEBUG] [Thread-25036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:13:26.850 [DEBUG] [Thread-25036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:13:26.850 [DEBUG] [Thread-25036] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:13:26.853 [DEBUG] [Thread-25036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:13:26.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:13:26.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:13:26.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:13:26.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:13:26.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:13:26.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:13:26.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:13:26.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:13:26.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:13:26.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.758813 -999.00   +9.50   8.88     79   +6.20 1 1 1 1 1     0    0 3.17 -9.55 ZNESW 8.1 8.9 309.2 11.1 10.4 -24.6 10.2 -23.4 10.0 -21.4 10.2 -23.5
2026-04-15T20:13:26.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:13:26.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:13:26.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.758813
2026-04-15T20:13:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:13:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:13:26.879 [DEBUG] [Thread-25036] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:13:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:13:26.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:13:26.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:13:26.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:13:06', tmtdew=4.15825, humidity=74.9969, cloud=0.0, wind=10.6938, temperature=9.58696, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:13:06', seeing=1.4, atlas_timestamp='2026-04-15T18:12:41.443', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08425000000000082, -0.047750000000000625, -0.031249999999998224, -0.062000000000001165, -0.03250000000000064, -0.01974999999999838, -0.05000000000000071, -0.04625000000000057, 0.022999999999999687, -0.0129999999999999, -0.07675000000000054, -0.03500000000000014, 0.0019999999999988916, 0.004249999999998977, -0.0005000000000006111, -0.03750000000000142, -0.00575000000000081, 0.009500000000000952, -0.018000000000000682, -0.023750000000001492, 0.010999999999999233, -0.015250000000001762, -0.01774999999999949, 0.02275000000000027, -0.00849999999999973, -0.04049999999999976, -0.03524999999999956, -0.03950000000000031, -0.019000000000000128, -0.04399999999999871, 0.01600000000000179, 0.18400000000000105, 0.3197499999999991], zp_timestamp='2026-04-15T18:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:13:27.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:13:27.138 [DEBUG] [Thread-25039] [transport.py] [_log()] starting thread (client mode): 0xee906350
2026-04-15T20:13:27.138 [DEBUG] [Thread-25039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:13:27.152 [DEBUG] [Thread-25039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:13:27.152 [INFO] [Thread-25039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:13:27.159 [DEBUG] [Thread-25039] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:13:27.159 [DEBUG] [Thread-25039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:13:27.159 [DEBUG] [Thread-25039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:13:27.159 [DEBUG] [Thread-25039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:13:27.159 [DEBUG] [Thread-25039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:13:27.160 [DEBUG] [Thread-25039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:13:27.160 [DEBUG] [Thread-25039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:13:27.160 [DEBUG] [Thread-25039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:13:27.160 [DEBUG] [Thread-25039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:13:27.160 [DEBUG] [Thread-25039] [transport.py] [_log()] client lang: <none>
2026-04-15T20:13:27.160 [DEBUG] [Thread-25039] [transport.py] [_log()] server lang: <none>
2026-04-15T20:13:27.160 [DEBUG] [Thread-25039] [transport.py] [_log()] kex follows: False
2026-04-15T20:13:27.160 [DEBUG] [Thread-25039] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:13:27.160 [DEBUG] [Thread-25039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:13:27.160 [DEBUG] [Thread-25039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:13:27.160 [DEBUG] [Thread-25039] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:13:27.161 [DEBUG] [Thread-25039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:13:27.161 [DEBUG] [Thread-25039] [transport.py] [_log()] Compression: none
2026-04-15T20:13:27.161 [DEBUG] [Thread-25039] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:13:27.219 [DEBUG] [Thread-25039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:13:27.219 [DEBUG] [Thread-25039] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:13:27.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:13:27.221 [DEBUG] [Thread-25039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:13:27.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:13:27.275 [DEBUG] [Thread-25039] [transport.py] [_log()] userauth is OK
2026-04-15T20:13:27.275 [DEBUG] [Thread-25039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:13:27.276 [DEBUG] [Thread-25039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:13:27.276 [DEBUG] [Thread-25039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:13:27.276 [DEBUG] [Thread-25039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:13:27.303 [INFO] [Thread-25039] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:13:27.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:13:27.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:13:28.111 [DEBUG] [Thread-25039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:13:28.111 [DEBUG] [Thread-25039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:13:28.159 [DEBUG] [Thread-25039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:13:28.159 [DEBUG] [Thread-25039] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:13:28.168 [DEBUG] [Thread-25039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:13:28.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:13:28.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')
2026-04-15T20:13:28.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
2026-04-15T20:13:28.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:13:28.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:13:28.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:13:28.200 [DEBUG] [Thread-25039] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:13:29.432 [DEBUG] [Thread-25041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:31.694 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:33.493 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:33.494 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:37.060 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:42.439 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:44.480 [DEBUG] [Thread-25042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:48.073 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:53.451 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:58.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:13:58.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:13:58.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
2026-04-15T20:13:58.919 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:59.511 [DEBUG] [Thread-25043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:13:59.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 13, 41), 4.00917, 76.027, 0.0, 10.3406, 9.64075, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:13:59.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:13:41
2026-04-15T20:13:59.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:14:00.402 [DEBUG] [Thread-25044] [transport.py] [_log()] starting thread (client mode): 0xf1335e40
2026-04-15T20:14:00.402 [DEBUG] [Thread-25044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:14:00.422 [DEBUG] [Thread-25044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:14:00.422 [INFO] [Thread-25044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:14:00.426 [DEBUG] [Thread-25044] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:14:00.426 [DEBUG] [Thread-25044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:14:00.426 [DEBUG] [Thread-25044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:14:00.426 [DEBUG] [Thread-25044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:14:00.426 [DEBUG] [Thread-25044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:14:00.426 [DEBUG] [Thread-25044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:14:00.426 [DEBUG] [Thread-25044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:14:00.426 [DEBUG] [Thread-25044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:14:00.426 [DEBUG] [Thread-25044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:14:00.426 [DEBUG] [Thread-25044] [transport.py] [_log()] client lang: <none>
2026-04-15T20:14:00.427 [DEBUG] [Thread-25044] [transport.py] [_log()] server lang: <none>
2026-04-15T20:14:00.427 [DEBUG] [Thread-25044] [transport.py] [_log()] kex follows: False
2026-04-15T20:14:00.427 [DEBUG] [Thread-25044] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:14:00.427 [DEBUG] [Thread-25044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:14:00.427 [DEBUG] [Thread-25044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:14:00.427 [DEBUG] [Thread-25044] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:14:00.427 [DEBUG] [Thread-25044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:14:00.427 [DEBUG] [Thread-25044] [transport.py] [_log()] Compression: none
2026-04-15T20:14:00.427 [DEBUG] [Thread-25044] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:14:00.444 [DEBUG] [Thread-25044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:14:00.445 [DEBUG] [Thread-25044] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:14:00.445 [DEBUG] [Thread-25044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:14:00.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:14:00.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:14:00.446 [DEBUG] [Thread-25044] [transport.py] [_log()] userauth is OK
2026-04-15T20:14:00.446 [DEBUG] [Thread-25044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:14:00.447 [DEBUG] [Thread-25044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:14:00.447 [DEBUG] [Thread-25044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:14:00.447 [DEBUG] [Thread-25044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:14:00.466 [INFO] [Thread-25044] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:14:00.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:14:01.261 [DEBUG] [Thread-25044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:14:01.262 [DEBUG] [Thread-25044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:14:01.262 [DEBUG] [Thread-25044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:14:01.302 [DEBUG] [Thread-25044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:14:01.302 [DEBUG] [Thread-25044] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:14:01.305 [DEBUG] [Thread-25044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:14:01.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:14:01.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:14:01.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:14:01.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:14:01.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:14:01.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:14:01.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:14:01.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:14:01.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:14:01.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.759160 -999.00   +9.60   8.53     79   +6.20 1 1 1 1 1     0    0 3.18 -9.63 ZNESW 8.3 8.5 310.6 10.7 10.4 -24.6 10.2 -23.4 9.9 -21.3 10.2 -23.4
2026-04-15T20:14:01.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:14:01.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:14:01.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.759160
2026-04-15T20:14:01.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:14:01.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:14:01.330 [DEBUG] [Thread-25044] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:14:01.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:14:01.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:14:01.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:14:01.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:13:41', tmtdew=4.00917, humidity=76.027, cloud=0.0, wind=10.3406, temperature=9.64075, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:13:42', seeing=1.28, atlas_timestamp='2026-04-15T18:13:11.424', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08425000000000082, -0.047750000000000625, -0.031249999999998224, -0.062000000000001165, -0.03250000000000064, -0.01974999999999838, -0.05000000000000071, -0.04625000000000057, 0.022999999999999687, -0.0129999999999999, -0.07675000000000054, -0.03500000000000014, 0.0019999999999988916, 0.004249999999998977, -0.0005000000000006111, -0.03750000000000142, -0.00575000000000081, 0.009500000000000952, -0.018000000000000682, -0.023750000000001492, 0.010999999999999233, -0.015250000000001762, -0.01774999999999949, 0.02275000000000027, -0.00849999999999973, -0.04049999999999976, -0.03524999999999956, -0.03950000000000031, -0.019000000000000128, -0.04399999999999871, 0.01600000000000179, 0.18400000000000105, 0.3197499999999991], zp_timestamp='2026-04-15T18:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:14:01.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:14:01.589 [DEBUG] [Thread-25047] [transport.py] [_log()] starting thread (client mode): 0xf1353850
2026-04-15T20:14:01.589 [DEBUG] [Thread-25047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:14:01.603 [DEBUG] [Thread-25047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:14:01.604 [INFO] [Thread-25047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:14:01.612 [DEBUG] [Thread-25047] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:14:01.613 [DEBUG] [Thread-25047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:14:01.613 [DEBUG] [Thread-25047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:14:01.613 [DEBUG] [Thread-25047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:14:01.613 [DEBUG] [Thread-25047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:14:01.613 [DEBUG] [Thread-25047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:14:01.613 [DEBUG] [Thread-25047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:14:01.613 [DEBUG] [Thread-25047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:14:01.613 [DEBUG] [Thread-25047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:14:01.613 [DEBUG] [Thread-25047] [transport.py] [_log()] client lang: <none>
2026-04-15T20:14:01.613 [DEBUG] [Thread-25047] [transport.py] [_log()] server lang: <none>
2026-04-15T20:14:01.613 [DEBUG] [Thread-25047] [transport.py] [_log()] kex follows: False
2026-04-15T20:14:01.613 [DEBUG] [Thread-25047] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:14:01.614 [DEBUG] [Thread-25047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:14:01.614 [DEBUG] [Thread-25047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:14:01.614 [DEBUG] [Thread-25047] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:14:01.614 [DEBUG] [Thread-25047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:14:01.614 [DEBUG] [Thread-25047] [transport.py] [_log()] Compression: none
2026-04-15T20:14:01.614 [DEBUG] [Thread-25047] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:14:01.671 [DEBUG] [Thread-25047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:14:01.671 [DEBUG] [Thread-25047] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:14:01.672 [DEBUG] [Thread-25047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:14:01.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:14:01.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:14:01.727 [DEBUG] [Thread-25047] [transport.py] [_log()] userauth is OK
2026-04-15T20:14:01.727 [DEBUG] [Thread-25047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:14:01.728 [DEBUG] [Thread-25047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:14:01.728 [DEBUG] [Thread-25047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:14:01.728 [DEBUG] [Thread-25047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:14:01.752 [INFO] [Thread-25047] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:14:01.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:14:01.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:14:02.645 [DEBUG] [Thread-25047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:14:02.645 [DEBUG] [Thread-25047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:14:02.693 [DEBUG] [Thread-25047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:14:02.693 [DEBUG] [Thread-25047] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:14:02.702 [DEBUG] [Thread-25047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:14:02.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:14:02.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')
2026-04-15T20:14:02.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
2026-04-15T20:14:02.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:14:02.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:14:02.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:14:02.737 [DEBUG] [Thread-25047] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:14:04.408 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:05.739 [DEBUG] [Thread-25049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:09.916 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:14.542 [DEBUG] [Thread-25050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:15.320 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:20.734 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:26.264 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:29.584 [DEBUG] [Thread-25051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:31.828 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:32.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:14:32.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:14:32.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
2026-04-15T20:14:33.695 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:33.696 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:34.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 14, 17), 4.19034, 75.0967, 0.0, 7.04088, 9.67031, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:14:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:14:17
2026-04-15T20:14:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:14:34.876 [DEBUG] [Thread-25052] [transport.py] [_log()] starting thread (client mode): 0xf13375b0
2026-04-15T20:14:34.877 [DEBUG] [Thread-25052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:14:34.896 [DEBUG] [Thread-25052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:14:34.896 [INFO] [Thread-25052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:14:34.899 [DEBUG] [Thread-25052] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:14:34.899 [DEBUG] [Thread-25052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:14:34.899 [DEBUG] [Thread-25052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:14:34.899 [DEBUG] [Thread-25052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:14:34.899 [DEBUG] [Thread-25052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:14:34.899 [DEBUG] [Thread-25052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:14:34.899 [DEBUG] [Thread-25052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:14:34.899 [DEBUG] [Thread-25052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:14:34.899 [DEBUG] [Thread-25052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:14:34.899 [DEBUG] [Thread-25052] [transport.py] [_log()] client lang: <none>
2026-04-15T20:14:34.899 [DEBUG] [Thread-25052] [transport.py] [_log()] server lang: <none>
2026-04-15T20:14:34.900 [DEBUG] [Thread-25052] [transport.py] [_log()] kex follows: False
2026-04-15T20:14:34.900 [DEBUG] [Thread-25052] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:14:34.900 [DEBUG] [Thread-25052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:14:34.900 [DEBUG] [Thread-25052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:14:34.900 [DEBUG] [Thread-25052] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:14:34.900 [DEBUG] [Thread-25052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:14:34.900 [DEBUG] [Thread-25052] [transport.py] [_log()] Compression: none
2026-04-15T20:14:34.900 [DEBUG] [Thread-25052] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:14:34.917 [DEBUG] [Thread-25052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:14:34.917 [DEBUG] [Thread-25052] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:14:34.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:14:34.918 [DEBUG] [Thread-25052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:14:34.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:14:34.919 [DEBUG] [Thread-25052] [transport.py] [_log()] userauth is OK
2026-04-15T20:14:34.919 [DEBUG] [Thread-25052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:14:34.919 [DEBUG] [Thread-25052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:14:34.919 [DEBUG] [Thread-25052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:14:34.919 [DEBUG] [Thread-25052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:14:34.937 [INFO] [Thread-25052] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:14:34.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:14:35.712 [DEBUG] [Thread-25052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:14:35.712 [DEBUG] [Thread-25052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:14:35.713 [DEBUG] [Thread-25052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:14:35.753 [DEBUG] [Thread-25052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:14:35.753 [DEBUG] [Thread-25052] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:14:35.756 [DEBUG] [Thread-25052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:14:35.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:14:35.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:14:35.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:14:35.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:14:35.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:14:35.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:14:35.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:14:35.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:14:35.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:14:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.759507 -999.00   +9.60   9.56     79   +6.20 1 1 1 1 1     0    0 3.19 -9.49 ZNESW 9.9 9.6 307.0 10.3 10.3 -24.6 10.2 -23.3 9.9 -21.3 10.2 -23.5
2026-04-15T20:14:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:14:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:14:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.759507
2026-04-15T20:14:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:14:35.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:14:35.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:14:35.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:14:35.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:14:35.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:14:17', tmtdew=4.19034, humidity=75.0967, cloud=0.0, wind=7.04088, temperature=9.67031, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:14:17', seeing=1.19, atlas_timestamp='2026-04-15T18:13:41.405', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08425000000000082, -0.047750000000000625, -0.031249999999998224, -0.062000000000001165, -0.03250000000000064, -0.01974999999999838, -0.05000000000000071, -0.04625000000000057, 0.022999999999999687, -0.0129999999999999, -0.07675000000000054, -0.03500000000000014, 0.0019999999999988916, 0.004249999999998977, -0.0005000000000006111, -0.03750000000000142, -0.00575000000000081, 0.009500000000000952, -0.018000000000000682, -0.023750000000001492, 0.010999999999999233, -0.015250000000001762, -0.01774999999999949, 0.02275000000000027, -0.00849999999999973, -0.04049999999999976, -0.03524999999999956, -0.03950000000000031, -0.019000000000000128, -0.04399999999999871, 0.01600000000000179, 0.18400000000000105, 0.3197499999999991], zp_timestamp='2026-04-15T18:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:14:35.778 [DEBUG] [Thread-25052] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:14:36.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:14:36.027 [DEBUG] [Thread-25055] [transport.py] [_log()] starting thread (client mode): 0xf1335e40
2026-04-15T20:14:36.028 [DEBUG] [Thread-25055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:14:36.041 [DEBUG] [Thread-25055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:14:36.041 [INFO] [Thread-25055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:14:36.049 [DEBUG] [Thread-25055] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:14:36.049 [DEBUG] [Thread-25055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:14:36.049 [DEBUG] [Thread-25055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:14:36.049 [DEBUG] [Thread-25055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:14:36.049 [DEBUG] [Thread-25055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:14:36.049 [DEBUG] [Thread-25055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:14:36.049 [DEBUG] [Thread-25055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:14:36.049 [DEBUG] [Thread-25055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:14:36.050 [DEBUG] [Thread-25055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:14:36.050 [DEBUG] [Thread-25055] [transport.py] [_log()] client lang: <none>
2026-04-15T20:14:36.050 [DEBUG] [Thread-25055] [transport.py] [_log()] server lang: <none>
2026-04-15T20:14:36.050 [DEBUG] [Thread-25055] [transport.py] [_log()] kex follows: False
2026-04-15T20:14:36.050 [DEBUG] [Thread-25055] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:14:36.050 [DEBUG] [Thread-25055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:14:36.050 [DEBUG] [Thread-25055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:14:36.050 [DEBUG] [Thread-25055] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:14:36.050 [DEBUG] [Thread-25055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:14:36.050 [DEBUG] [Thread-25055] [transport.py] [_log()] Compression: none
2026-04-15T20:14:36.050 [DEBUG] [Thread-25055] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:14:36.106 [DEBUG] [Thread-25055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:14:36.107 [DEBUG] [Thread-25055] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:14:36.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:14:36.107 [DEBUG] [Thread-25055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:14:36.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:14:36.164 [DEBUG] [Thread-25055] [transport.py] [_log()] userauth is OK
2026-04-15T20:14:36.164 [DEBUG] [Thread-25055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:14:36.164 [DEBUG] [Thread-25055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:14:36.164 [DEBUG] [Thread-25055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:14:36.165 [DEBUG] [Thread-25055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:14:36.195 [INFO] [Thread-25055] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:14:36.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:14:36.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:14:37.001 [DEBUG] [Thread-25055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:14:37.001 [DEBUG] [Thread-25055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:14:37.049 [DEBUG] [Thread-25055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:14:37.049 [DEBUG] [Thread-25055] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:14:37.058 [DEBUG] [Thread-25055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:14:37.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:14:37.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')
2026-04-15T20:14: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') -> 00000000
2026-04-15T20:14:37.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:14:37.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:14:37.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:14:37.093 [DEBUG] [Thread-25055] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:14:37.323 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:42.851 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:44.612 [DEBUG] [Thread-25057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:48.253 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:53.632 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:59.287 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:14:59.664 [DEBUG] [Thread-25058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:04.768 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:05.887 [DEBUG] [Thread-25059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:15:07.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:15:07.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
2026-04-15T20:15:08.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 14, 53), 3.99327, 76.127, 0.0, 9.56448, 9.74062, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:15:08.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:14:53
2026-04-15T20:15:08.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:15:09.215 [DEBUG] [Thread-25060] [transport.py] [_log()] starting thread (client mode): 0xf13e3640
2026-04-15T20:15:09.215 [DEBUG] [Thread-25060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:15:09.229 [DEBUG] [Thread-25060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:15:09.229 [INFO] [Thread-25060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:15:09.233 [DEBUG] [Thread-25060] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:15:09.233 [DEBUG] [Thread-25060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:15:09.233 [DEBUG] [Thread-25060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:15:09.233 [DEBUG] [Thread-25060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:15:09.233 [DEBUG] [Thread-25060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:15:09.233 [DEBUG] [Thread-25060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:15:09.233 [DEBUG] [Thread-25060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:15:09.233 [DEBUG] [Thread-25060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:15:09.233 [DEBUG] [Thread-25060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:15:09.233 [DEBUG] [Thread-25060] [transport.py] [_log()] client lang: <none>
2026-04-15T20:15:09.233 [DEBUG] [Thread-25060] [transport.py] [_log()] server lang: <none>
2026-04-15T20:15:09.233 [DEBUG] [Thread-25060] [transport.py] [_log()] kex follows: False
2026-04-15T20:15:09.234 [DEBUG] [Thread-25060] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:15:09.234 [DEBUG] [Thread-25060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:15:09.234 [DEBUG] [Thread-25060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:15:09.234 [DEBUG] [Thread-25060] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:15:09.234 [DEBUG] [Thread-25060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:15:09.234 [DEBUG] [Thread-25060] [transport.py] [_log()] Compression: none
2026-04-15T20:15:09.234 [DEBUG] [Thread-25060] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:15:09.250 [DEBUG] [Thread-25060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:15:09.250 [DEBUG] [Thread-25060] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:15:09.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:15:09.251 [DEBUG] [Thread-25060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:15:09.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:15:09.251 [DEBUG] [Thread-25060] [transport.py] [_log()] userauth is OK
2026-04-15T20:15:09.251 [DEBUG] [Thread-25060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:15:09.252 [DEBUG] [Thread-25060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:15:09.252 [DEBUG] [Thread-25060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:15:09.252 [DEBUG] [Thread-25060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:15:09.269 [INFO] [Thread-25060] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:15:09.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:15:10.181 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:14.110 [DEBUG] [Thread-25060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:15:14.110 [DEBUG] [Thread-25060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:15:14.111 [DEBUG] [Thread-25060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:15:14.151 [DEBUG] [Thread-25060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:15:14.151 [DEBUG] [Thread-25060] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:15:14.154 [DEBUG] [Thread-25060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:15:14.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:15:14.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:15:14.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:15:14.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:15:14.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:15:14.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:15:14.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:15:14.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:15:14.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:15:14.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.760549 -999.00   +9.60   8.03     79   +6.20 1 1 1 1 1     0    0 3.09 -11.29 ZNESW 7.1 8.0 301.8 10.8 10.4 -24.6 10.3 -23.3 9.9 -21.3 10.2 -23.7
2026-04-15T20:15:14.180 [DEBUG] [Thread-25060] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:15:14.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:15:14.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:15:14.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.760549
2026-04-15T20:15:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:15:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:15:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:15:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:15:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:15:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:14:53', tmtdew=3.99327, humidity=76.127, cloud=0.0, wind=9.56448, temperature=9.74062, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:14:53', seeing=1.47, atlas_timestamp='2026-04-15T18:15:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08425000000000082, -0.047750000000000625, -0.031249999999998224, -0.062000000000001165, -0.03250000000000064, -0.01974999999999838, -0.05000000000000071, -0.04625000000000057, 0.022999999999999687, -0.0129999999999999, -0.07675000000000054, -0.03500000000000014, 0.0019999999999988916, 0.004249999999998977, -0.0005000000000006111, -0.03750000000000142, -0.00575000000000081, 0.009500000000000952, -0.018000000000000682, -0.023750000000001492, 0.010999999999999233, -0.015250000000001762, -0.01774999999999949, 0.02275000000000027, -0.00849999999999973, -0.04049999999999976, -0.03524999999999956, -0.03950000000000031, -0.019000000000000128, -0.04399999999999871, 0.01600000000000179, 0.18400000000000105, 0.3197499999999991], zp_timestamp='2026-04-15T18:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:15:14.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:15:14.432 [DEBUG] [Thread-25063] [transport.py] [_log()] starting thread (client mode): 0xf13e03a0
2026-04-15T20:15:14.432 [DEBUG] [Thread-25063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:15:14.446 [DEBUG] [Thread-25063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:15:14.446 [INFO] [Thread-25063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:15:14.453 [DEBUG] [Thread-25063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:15:14.454 [DEBUG] [Thread-25063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:15:14.454 [DEBUG] [Thread-25063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:15:14.454 [DEBUG] [Thread-25063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:15:14.454 [DEBUG] [Thread-25063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:15:14.454 [DEBUG] [Thread-25063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:15:14.454 [DEBUG] [Thread-25063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:15:14.454 [DEBUG] [Thread-25063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:15:14.454 [DEBUG] [Thread-25063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:15:14.454 [DEBUG] [Thread-25063] [transport.py] [_log()] client lang: <none>
2026-04-15T20:15:14.454 [DEBUG] [Thread-25063] [transport.py] [_log()] server lang: <none>
2026-04-15T20:15:14.454 [DEBUG] [Thread-25063] [transport.py] [_log()] kex follows: False
2026-04-15T20:15:14.454 [DEBUG] [Thread-25063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:15:14.454 [DEBUG] [Thread-25063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:15:14.455 [DEBUG] [Thread-25063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:15:14.455 [DEBUG] [Thread-25063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:15:14.455 [DEBUG] [Thread-25063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:15:14.455 [DEBUG] [Thread-25063] [transport.py] [_log()] Compression: none
2026-04-15T20:15:14.455 [DEBUG] [Thread-25063] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:15:14.512 [DEBUG] [Thread-25063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:15:14.512 [DEBUG] [Thread-25063] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:15:14.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:15:14.513 [DEBUG] [Thread-25063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:15:14.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:15:14.570 [DEBUG] [Thread-25063] [transport.py] [_log()] userauth is OK
2026-04-15T20:15:14.570 [DEBUG] [Thread-25063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:15:14.570 [DEBUG] [Thread-25063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:15:14.570 [DEBUG] [Thread-25063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:15:14.571 [DEBUG] [Thread-25063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:15:14.595 [INFO] [Thread-25063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:15:14.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:15:14.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:15:14.693 [DEBUG] [Thread-25065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:15.401 [DEBUG] [Thread-25063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:15:15.401 [DEBUG] [Thread-25063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:15:15.449 [DEBUG] [Thread-25063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:15:15.449 [DEBUG] [Thread-25063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:15:15.458 [DEBUG] [Thread-25063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:15:15.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:15:15.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')
2026-04-15T20:15:15.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
2026-04-15T20:15:15.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:15:15.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:15:15.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:15:15.493 [DEBUG] [Thread-25063] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:15:15.646 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:21.138 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:26.641 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:29.740 [DEBUG] [Thread-25066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:32.064 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:33.900 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:33.901 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:37.542 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:42.946 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:44.768 [DEBUG] [Thread-25067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:45.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:15:45.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:15:45.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
2026-04-15T20:15:46.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 15, 28), 4.2034, 75.0305, 0.0, 8.02944, 9.68704, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:15:46.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:15:28
2026-04-15T20:15:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:15:47.613 [DEBUG] [Thread-25068] [transport.py] [_log()] starting thread (client mode): 0xf13caa40
2026-04-15T20:15:47.613 [DEBUG] [Thread-25068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:15:47.632 [DEBUG] [Thread-25068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:15:47.632 [INFO] [Thread-25068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:15:47.635 [DEBUG] [Thread-25068] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:15:47.635 [DEBUG] [Thread-25068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:15:47.636 [DEBUG] [Thread-25068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:15:47.636 [DEBUG] [Thread-25068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:15:47.636 [DEBUG] [Thread-25068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:15:47.636 [DEBUG] [Thread-25068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:15:47.636 [DEBUG] [Thread-25068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:15:47.636 [DEBUG] [Thread-25068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:15:47.636 [DEBUG] [Thread-25068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:15:47.636 [DEBUG] [Thread-25068] [transport.py] [_log()] client lang: <none>
2026-04-15T20:15:47.636 [DEBUG] [Thread-25068] [transport.py] [_log()] server lang: <none>
2026-04-15T20:15:47.636 [DEBUG] [Thread-25068] [transport.py] [_log()] kex follows: False
2026-04-15T20:15:47.636 [DEBUG] [Thread-25068] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:15:47.636 [DEBUG] [Thread-25068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:15:47.637 [DEBUG] [Thread-25068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:15:47.637 [DEBUG] [Thread-25068] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:15:47.637 [DEBUG] [Thread-25068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:15:47.637 [DEBUG] [Thread-25068] [transport.py] [_log()] Compression: none
2026-04-15T20:15:47.637 [DEBUG] [Thread-25068] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:15:47.654 [DEBUG] [Thread-25068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:15:47.654 [DEBUG] [Thread-25068] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:15:47.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:15:47.655 [DEBUG] [Thread-25068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:15:47.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:15:47.656 [DEBUG] [Thread-25068] [transport.py] [_log()] userauth is OK
2026-04-15T20:15:47.657 [DEBUG] [Thread-25068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:15:47.657 [DEBUG] [Thread-25068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:15:47.657 [DEBUG] [Thread-25068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:15:47.657 [DEBUG] [Thread-25068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:15:47.683 [INFO] [Thread-25068] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:15:47.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:15:48.367 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:48.398 [DEBUG] [Thread-25068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:15:48.399 [DEBUG] [Thread-25068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:15:48.399 [DEBUG] [Thread-25068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:15:48.440 [DEBUG] [Thread-25068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:15:48.440 [DEBUG] [Thread-25068] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:15:48.443 [DEBUG] [Thread-25068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:15:48.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:15:48.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:15:48.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:15:48.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:15:48.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:15:48.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:15:48.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:15:48.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:15:48.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:15:48.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.760549 -999.00   +9.60   8.03     79   +6.20 1 1 1 1 1     0    0 3.09 -11.29 ZNESW 7.1 8.0 301.8 10.8 10.4 -24.6 10.3 -23.3 9.9 -21.3 10.2 -23.7
2026-04-15T20:15:48.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:15:48.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:15:48.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.760549
2026-04-15T20:15:48.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:15:48.471 [DEBUG] [Thread-25068] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:15:48.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:15:48.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:15:48.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:15:48.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:15:48.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:15:28', tmtdew=4.2034, humidity=75.0305, cloud=0.0, wind=8.02944, temperature=9.68704, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:15:28', seeing=1.32, atlas_timestamp='2026-04-15T18:15:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08425000000000082, -0.047750000000000625, -0.031249999999998224, -0.062000000000001165, -0.03250000000000064, -0.01974999999999838, -0.05000000000000071, -0.04625000000000057, 0.022999999999999687, -0.0129999999999999, -0.07675000000000054, -0.03500000000000014, 0.0019999999999988916, 0.004249999999998977, -0.0005000000000006111, -0.03750000000000142, -0.00575000000000081, 0.009500000000000952, -0.018000000000000682, -0.023750000000001492, 0.010999999999999233, -0.015250000000001762, -0.01774999999999949, 0.02275000000000027, -0.00849999999999973, -0.04049999999999976, -0.03524999999999956, -0.03950000000000031, -0.019000000000000128, -0.04399999999999871, 0.01600000000000179, 0.18400000000000105, 0.3197499999999991], zp_timestamp='2026-04-15T18:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:15:48.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:15:48.736 [DEBUG] [Thread-25071] [transport.py] [_log()] starting thread (client mode): 0xee906260
2026-04-15T20:15:48.736 [DEBUG] [Thread-25071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:15:48.751 [DEBUG] [Thread-25071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:15:48.751 [INFO] [Thread-25071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:15:48.758 [DEBUG] [Thread-25071] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:15:48.758 [DEBUG] [Thread-25071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:15:48.758 [DEBUG] [Thread-25071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:15:48.758 [DEBUG] [Thread-25071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:15:48.758 [DEBUG] [Thread-25071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:15:48.759 [DEBUG] [Thread-25071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:15:48.759 [DEBUG] [Thread-25071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:15:48.759 [DEBUG] [Thread-25071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:15:48.759 [DEBUG] [Thread-25071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:15:48.759 [DEBUG] [Thread-25071] [transport.py] [_log()] client lang: <none>
2026-04-15T20:15:48.759 [DEBUG] [Thread-25071] [transport.py] [_log()] server lang: <none>
2026-04-15T20:15:48.759 [DEBUG] [Thread-25071] [transport.py] [_log()] kex follows: False
2026-04-15T20:15:48.759 [DEBUG] [Thread-25071] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:15:48.759 [DEBUG] [Thread-25071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:15:48.759 [DEBUG] [Thread-25071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:15:48.759 [DEBUG] [Thread-25071] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:15:48.759 [DEBUG] [Thread-25071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:15:48.760 [DEBUG] [Thread-25071] [transport.py] [_log()] Compression: none
2026-04-15T20:15:48.760 [DEBUG] [Thread-25071] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:15:48.817 [DEBUG] [Thread-25071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:15:48.818 [DEBUG] [Thread-25071] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:15:48.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:15:48.818 [DEBUG] [Thread-25071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:15:48.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:15:48.874 [DEBUG] [Thread-25071] [transport.py] [_log()] userauth is OK
2026-04-15T20:15:48.874 [DEBUG] [Thread-25071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:15:48.875 [DEBUG] [Thread-25071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:15:48.875 [DEBUG] [Thread-25071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:15:48.875 [DEBUG] [Thread-25071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:15:48.901 [INFO] [Thread-25071] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:15:48.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:15:48.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:15:49.741 [DEBUG] [Thread-25071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:15:49.741 [DEBUG] [Thread-25071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:15:49.790 [DEBUG] [Thread-25071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:15:49.791 [DEBUG] [Thread-25071] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:15:49.800 [DEBUG] [Thread-25071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:15:49.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:15:49.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')
2026-04-15T20:15:49.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
2026-04-15T20:15:49.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:15:49.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:15:49.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:15:49.836 [DEBUG] [Thread-25071] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:15:53.870 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:59.276 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:15:59.799 [DEBUG] [Thread-25073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:04.769 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:06.030 [DEBUG] [Thread-25074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:10.160 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:14.847 [DEBUG] [Thread-25075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:15.593 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:19.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:16:19.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:16:19.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
2026-04-15T20:16:20.984 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:21.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 16, 4), 4.19924, 75.0471, 0.0, 8.08236, 9.65387, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:16:21.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:16:04
2026-04-15T20:16:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:16:21.946 [DEBUG] [Thread-25076] [transport.py] [_log()] starting thread (client mode): 0xf13e0d00
2026-04-15T20:16:21.947 [DEBUG] [Thread-25076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:16:21.967 [DEBUG] [Thread-25076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:16:21.967 [INFO] [Thread-25076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:16:21.969 [DEBUG] [Thread-25076] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:16:21.969 [DEBUG] [Thread-25076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:16:21.969 [DEBUG] [Thread-25076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:16:21.969 [DEBUG] [Thread-25076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:16:21.969 [DEBUG] [Thread-25076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:16:21.969 [DEBUG] [Thread-25076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:16:21.969 [DEBUG] [Thread-25076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:16:21.969 [DEBUG] [Thread-25076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:16:21.969 [DEBUG] [Thread-25076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:16:21.970 [DEBUG] [Thread-25076] [transport.py] [_log()] client lang: <none>
2026-04-15T20:16:21.970 [DEBUG] [Thread-25076] [transport.py] [_log()] server lang: <none>
2026-04-15T20:16:21.970 [DEBUG] [Thread-25076] [transport.py] [_log()] kex follows: False
2026-04-15T20:16:21.970 [DEBUG] [Thread-25076] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:16:21.970 [DEBUG] [Thread-25076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:16:21.970 [DEBUG] [Thread-25076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:16:21.970 [DEBUG] [Thread-25076] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:16:21.970 [DEBUG] [Thread-25076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:16:21.970 [DEBUG] [Thread-25076] [transport.py] [_log()] Compression: none
2026-04-15T20:16:21.970 [DEBUG] [Thread-25076] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:16:21.987 [DEBUG] [Thread-25076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:16:21.987 [DEBUG] [Thread-25076] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:16:21.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:16:21.988 [DEBUG] [Thread-25076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:16:21.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:16:21.989 [DEBUG] [Thread-25076] [transport.py] [_log()] userauth is OK
2026-04-15T20:16:21.989 [DEBUG] [Thread-25076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:16:21.990 [DEBUG] [Thread-25076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:16:21.990 [DEBUG] [Thread-25076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:16:21.990 [DEBUG] [Thread-25076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:16:22.008 [INFO] [Thread-25076] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:16:22.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:16:22.790 [DEBUG] [Thread-25076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:16:22.790 [DEBUG] [Thread-25076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:16:22.790 [DEBUG] [Thread-25076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:16:22.831 [DEBUG] [Thread-25076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:16:22.831 [DEBUG] [Thread-25076] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:16:22.834 [DEBUG] [Thread-25076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:16:22.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:16:22.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:16:22.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:16:22.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:16:22.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:16:22.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:16:22.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:16:22.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:16:22.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:16:22.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.760896 -999.00   +9.60   7.70     79   +6.20 1 1 1 1 1     0    0 3.09 -11.24 ZNESW 7.1 7.7 297.1 9.3 10.3 -24.5 10.2 -23.3 9.9 -21.4 10.2 -23.3
2026-04-15T20:16:22.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:16:22.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:16:22.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.760896
2026-04-15T20:16:22.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:16:22.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:16:22.861 [DEBUG] [Thread-25076] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:16:22.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:16:22.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:16:22.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:16:22.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:16:04', tmtdew=4.19924, humidity=75.0471, cloud=0.0, wind=8.08236, temperature=9.65387, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:16:04', seeing=1.07, atlas_timestamp='2026-04-15T18:15:41.414', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08425000000000082, -0.047750000000000625, -0.031249999999998224, -0.062000000000001165, -0.03250000000000064, -0.01974999999999838, -0.05000000000000071, -0.04625000000000057, 0.022999999999999687, -0.0129999999999999, -0.07675000000000054, -0.03500000000000014, 0.0019999999999988916, 0.004249999999998977, -0.0005000000000006111, -0.03750000000000142, -0.00575000000000081, 0.009500000000000952, -0.018000000000000682, -0.023750000000001492, 0.010999999999999233, -0.015250000000001762, -0.01774999999999949, 0.02275000000000027, -0.00849999999999973, -0.04049999999999976, -0.03524999999999956, -0.03950000000000031, -0.019000000000000128, -0.04399999999999871, 0.01600000000000179, 0.18400000000000105, 0.3197499999999991], zp_timestamp='2026-04-15T18:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:16:23.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:16:23.113 [DEBUG] [Thread-25079] [transport.py] [_log()] starting thread (client mode): 0xf13e0310
2026-04-15T20:16:23.113 [DEBUG] [Thread-25079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:16:23.127 [DEBUG] [Thread-25079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:16:23.127 [INFO] [Thread-25079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:16:23.135 [DEBUG] [Thread-25079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:16:23.135 [DEBUG] [Thread-25079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:16:23.135 [DEBUG] [Thread-25079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:16:23.135 [DEBUG] [Thread-25079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:16:23.135 [DEBUG] [Thread-25079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:16:23.135 [DEBUG] [Thread-25079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:16:23.135 [DEBUG] [Thread-25079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:16:23.135 [DEBUG] [Thread-25079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:16:23.135 [DEBUG] [Thread-25079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:16:23.135 [DEBUG] [Thread-25079] [transport.py] [_log()] client lang: <none>
2026-04-15T20:16:23.135 [DEBUG] [Thread-25079] [transport.py] [_log()] server lang: <none>
2026-04-15T20:16:23.136 [DEBUG] [Thread-25079] [transport.py] [_log()] kex follows: False
2026-04-15T20:16:23.136 [DEBUG] [Thread-25079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:16:23.136 [DEBUG] [Thread-25079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:16:23.136 [DEBUG] [Thread-25079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:16:23.136 [DEBUG] [Thread-25079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:16:23.136 [DEBUG] [Thread-25079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:16:23.136 [DEBUG] [Thread-25079] [transport.py] [_log()] Compression: none
2026-04-15T20:16:23.136 [DEBUG] [Thread-25079] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:16:23.191 [DEBUG] [Thread-25079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:16:23.191 [DEBUG] [Thread-25079] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:16:23.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:16:23.192 [DEBUG] [Thread-25079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:16:23.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:16:23.248 [DEBUG] [Thread-25079] [transport.py] [_log()] userauth is OK
2026-04-15T20:16:23.248 [DEBUG] [Thread-25079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:16:23.248 [DEBUG] [Thread-25079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:16:23.248 [DEBUG] [Thread-25079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:16:23.248 [DEBUG] [Thread-25079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:16:23.271 [INFO] [Thread-25079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:16:23.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:16:23.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:16:24.115 [DEBUG] [Thread-25079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:16:24.115 [DEBUG] [Thread-25079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:16:24.163 [DEBUG] [Thread-25079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:16:24.163 [DEBUG] [Thread-25079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:16:24.172 [DEBUG] [Thread-25079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:16:24.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:16:24.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')
2026-04-15T20:16:24.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
2026-04-15T20:16:24.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:16:24.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:16:24.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:16:24.207 [DEBUG] [Thread-25079] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:16:26.453 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:29.877 [DEBUG] [Thread-25081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:31.843 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:34.103 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:34.104 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:37.384 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:42.750 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:44.920 [DEBUG] [Thread-25082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:48.143 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:53.508 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:54.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:16:54.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:16:54.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
2026-04-15T20:16:55.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 16, 39), 3.99204, 76.1283, 0.0, 8.54136, 9.70847, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:16:55.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:16:39
2026-04-15T20:16:55.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:16:56.381 [DEBUG] [Thread-25083] [transport.py] [_log()] starting thread (client mode): 0xf13cb820
2026-04-15T20:16:56.381 [DEBUG] [Thread-25083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:16:56.395 [DEBUG] [Thread-25083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:16:56.395 [INFO] [Thread-25083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:16:56.398 [DEBUG] [Thread-25083] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:16:56.398 [DEBUG] [Thread-25083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:16:56.398 [DEBUG] [Thread-25083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:16:56.398 [DEBUG] [Thread-25083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:16:56.398 [DEBUG] [Thread-25083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:16:56.398 [DEBUG] [Thread-25083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:16:56.398 [DEBUG] [Thread-25083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:16:56.398 [DEBUG] [Thread-25083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:16:56.399 [DEBUG] [Thread-25083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:16:56.399 [DEBUG] [Thread-25083] [transport.py] [_log()] client lang: <none>
2026-04-15T20:16:56.399 [DEBUG] [Thread-25083] [transport.py] [_log()] server lang: <none>
2026-04-15T20:16:56.399 [DEBUG] [Thread-25083] [transport.py] [_log()] kex follows: False
2026-04-15T20:16:56.399 [DEBUG] [Thread-25083] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:16:56.399 [DEBUG] [Thread-25083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:16:56.399 [DEBUG] [Thread-25083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:16:56.399 [DEBUG] [Thread-25083] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:16:56.399 [DEBUG] [Thread-25083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:16:56.399 [DEBUG] [Thread-25083] [transport.py] [_log()] Compression: none
2026-04-15T20:16:56.399 [DEBUG] [Thread-25083] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:16:56.407 [DEBUG] [Thread-25083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:16:56.407 [DEBUG] [Thread-25083] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:16:56.407 [DEBUG] [Thread-25083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:16:56.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:16:56.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:16:56.408 [DEBUG] [Thread-25083] [transport.py] [_log()] userauth is OK
2026-04-15T20:16:56.409 [DEBUG] [Thread-25083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:16:56.409 [DEBUG] [Thread-25083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:16:56.409 [DEBUG] [Thread-25083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:16:56.409 [DEBUG] [Thread-25083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:16:56.422 [INFO] [Thread-25083] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:16:56.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:16:57.192 [DEBUG] [Thread-25083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:16:57.192 [DEBUG] [Thread-25083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:16:57.193 [DEBUG] [Thread-25083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:16:57.233 [DEBUG] [Thread-25083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:16:57.233 [DEBUG] [Thread-25083] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:16:57.236 [DEBUG] [Thread-25083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:16:57.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:16:57.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:16:57.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:16:57.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:16:57.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:16:57.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:16:57.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:16:57.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:16:57.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:16:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.761243 -999.00   +9.60   6.70     79   +6.20 1 1 1 1 1     0    0 3.10 -11.81 ZNESW 7.1 6.7 305.8 8.1 10.4 -24.7 10.2 -23.3 9.9 -21.3 10.2 -23.4
2026-04-15T20:16:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:16:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:16:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.761243
2026-04-15T20:16:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:16:57.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:16:57.261 [DEBUG] [Thread-25083] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:16:57.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:16:57.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:16:57.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:16:57.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:16:39', tmtdew=3.99204, humidity=76.1283, cloud=0.0, wind=8.54136, temperature=9.70847, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:16:39', seeing=1.13, atlas_timestamp='2026-04-15T18:16:11.395', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.0467499999999994, -0.03974999999999973, -0.03950000000000031, 0.014499999999999957, 0.0002500000000011937, -0.03200000000000003, 0.024250000000000327, 0.04349999999999987, 0.006000000000000227, -0.07174999999999976, -0.0235000000000003, 0.038000000000000256, 0.025249999999999773, 0.019999999999999574, -0.009000000000000341, 0.04925000000000068, 0.054499999999999105, 0.013999999999999346, 0.010249999999999204, 0.04849999999999888, -0.013750000000001705, -0.004749999999999588, 0.05375000000000085, 0.07199999999999918, 0.0015000000000000568, -0.005250000000000199, -0.03149999999999942, 0.022500000000000853, 0.0015000000000000568, 0.038000000000000256, 0.07500000000000107, 0.0782500000000006], zp_timestamp='2026-04-15T18:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:16:57.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:16:57.519 [DEBUG] [Thread-25086] [transport.py] [_log()] starting thread (client mode): 0xf13e0880
2026-04-15T20:16:57.520 [DEBUG] [Thread-25086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:16:57.534 [DEBUG] [Thread-25086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:16:57.534 [INFO] [Thread-25086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:16:57.541 [DEBUG] [Thread-25086] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:16:57.541 [DEBUG] [Thread-25086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:16:57.541 [DEBUG] [Thread-25086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:16:57.541 [DEBUG] [Thread-25086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:16:57.541 [DEBUG] [Thread-25086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:16:57.542 [DEBUG] [Thread-25086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:16:57.542 [DEBUG] [Thread-25086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:16:57.542 [DEBUG] [Thread-25086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:16:57.542 [DEBUG] [Thread-25086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:16:57.542 [DEBUG] [Thread-25086] [transport.py] [_log()] client lang: <none>
2026-04-15T20:16:57.542 [DEBUG] [Thread-25086] [transport.py] [_log()] server lang: <none>
2026-04-15T20:16:57.542 [DEBUG] [Thread-25086] [transport.py] [_log()] kex follows: False
2026-04-15T20:16:57.542 [DEBUG] [Thread-25086] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:16:57.542 [DEBUG] [Thread-25086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:16:57.542 [DEBUG] [Thread-25086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:16:57.542 [DEBUG] [Thread-25086] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:16:57.542 [DEBUG] [Thread-25086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:16:57.543 [DEBUG] [Thread-25086] [transport.py] [_log()] Compression: none
2026-04-15T20:16:57.543 [DEBUG] [Thread-25086] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:16:57.597 [DEBUG] [Thread-25086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:16:57.597 [DEBUG] [Thread-25086] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:16:57.597 [DEBUG] [Thread-25086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:16:57.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:16:57.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:16:57.656 [DEBUG] [Thread-25086] [transport.py] [_log()] userauth is OK
2026-04-15T20:16:57.657 [DEBUG] [Thread-25086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:16:57.657 [DEBUG] [Thread-25086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:16:57.657 [DEBUG] [Thread-25086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:16:57.657 [DEBUG] [Thread-25086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:16:57.682 [INFO] [Thread-25086] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:16:57.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:16:57.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:16:58.488 [DEBUG] [Thread-25086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:16:58.489 [DEBUG] [Thread-25086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:16:58.536 [DEBUG] [Thread-25086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:16:58.536 [DEBUG] [Thread-25086] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:16:58.545 [DEBUG] [Thread-25086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:16:58.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:16:58.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')
2026-04-15T20:16:58.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') -> 00000000
2026-04-15T20:16:58.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:16:58.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:16:58.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:16:58.580 [DEBUG] [Thread-25086] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:16:58.888 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:16:59.952 [DEBUG] [Thread-25088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:04.268 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:06.175 [DEBUG] [Thread-25089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:09.810 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:14.998 [DEBUG] [Thread-25090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:15.412 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:20.817 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:26.222 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:28.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:17:28.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:17:28.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
2026-04-15T20:17:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 17, 15), 4.19186, 75.0807, 0.0, 8.24112, 9.57106, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:17:29.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:17:15
2026-04-15T20:17:30.030 [DEBUG] [Thread-25091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:30.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:17:30.750 [DEBUG] [Thread-25092] [transport.py] [_log()] starting thread (client mode): 0xee9c1ea0
2026-04-15T20:17:30.750 [DEBUG] [Thread-25092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:17:30.769 [DEBUG] [Thread-25092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:17:30.769 [INFO] [Thread-25092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:17:30.772 [DEBUG] [Thread-25092] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:17:30.772 [DEBUG] [Thread-25092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:17:30.772 [DEBUG] [Thread-25092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:17:30.772 [DEBUG] [Thread-25092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:17:30.772 [DEBUG] [Thread-25092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:17:30.772 [DEBUG] [Thread-25092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:17:30.773 [DEBUG] [Thread-25092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:17:30.773 [DEBUG] [Thread-25092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:17:30.773 [DEBUG] [Thread-25092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:17:30.773 [DEBUG] [Thread-25092] [transport.py] [_log()] client lang: <none>
2026-04-15T20:17:30.773 [DEBUG] [Thread-25092] [transport.py] [_log()] server lang: <none>
2026-04-15T20:17:30.773 [DEBUG] [Thread-25092] [transport.py] [_log()] kex follows: False
2026-04-15T20:17:30.773 [DEBUG] [Thread-25092] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:17:30.773 [DEBUG] [Thread-25092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:17:30.773 [DEBUG] [Thread-25092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:17:30.773 [DEBUG] [Thread-25092] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:17:30.773 [DEBUG] [Thread-25092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:17:30.773 [DEBUG] [Thread-25092] [transport.py] [_log()] Compression: none
2026-04-15T20:17:30.773 [DEBUG] [Thread-25092] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:17:30.790 [DEBUG] [Thread-25092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:17:30.790 [DEBUG] [Thread-25092] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:17:30.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:17:30.791 [DEBUG] [Thread-25092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:17:30.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:17:30.792 [DEBUG] [Thread-25092] [transport.py] [_log()] userauth is OK
2026-04-15T20:17:30.792 [DEBUG] [Thread-25092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:17:30.792 [DEBUG] [Thread-25092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:17:30.792 [DEBUG] [Thread-25092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:17:30.792 [DEBUG] [Thread-25092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:17:30.818 [INFO] [Thread-25092] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:17:30.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:17:31.602 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:31.903 [DEBUG] [Thread-25092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:17:31.904 [DEBUG] [Thread-25092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:17:31.904 [DEBUG] [Thread-25092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:17:31.944 [DEBUG] [Thread-25092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:17:31.944 [DEBUG] [Thread-25092] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:17:31.947 [DEBUG] [Thread-25092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:17:31.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:17:31.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:17:31.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:17:31.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:17:31.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:17:31.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:17:31.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:17:31.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:17:31.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:17:31.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.761590 -999.00   +9.60   6.93     79   +6.20 1 1 1 1 1     0    0 3.01 -12.46 ZNESW 7.0 6.9 307.8 7.8 10.3 -24.5 10.2 -23.3 9.9 -21.3 10.2 -23.4
2026-04-15T20:17:31.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:17:31.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:17:31.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.761590
2026-04-15T20:17:31.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:17:31.974 [DEBUG] [Thread-25092] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:17:31.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:17:31.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:17:31.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:17:31.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:17:31.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:17:15', tmtdew=4.19186, humidity=75.0807, cloud=0.0, wind=8.24112, temperature=9.57106, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:17:15', seeing=1.16, atlas_timestamp='2026-04-15T18:16:41.376', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.0467499999999994, -0.03974999999999973, -0.03950000000000031, 0.014499999999999957, 0.0002500000000011937, -0.03200000000000003, 0.024250000000000327, 0.04349999999999987, 0.006000000000000227, -0.07174999999999976, -0.0235000000000003, 0.038000000000000256, 0.025249999999999773, 0.019999999999999574, -0.009000000000000341, 0.04925000000000068, 0.054499999999999105, 0.013999999999999346, 0.010249999999999204, 0.04849999999999888, -0.013750000000001705, -0.004749999999999588, 0.05375000000000085, 0.07199999999999918, 0.0015000000000000568, -0.005250000000000199, -0.03149999999999942, 0.022500000000000853, 0.0015000000000000568, 0.038000000000000256, 0.07500000000000107, 0.0782500000000006], zp_timestamp='2026-04-15T18:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:17:32.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:17:32.247 [DEBUG] [Thread-25095] [transport.py] [_log()] starting thread (client mode): 0xf13cb820
2026-04-15T20:17:32.248 [DEBUG] [Thread-25095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:17:32.262 [DEBUG] [Thread-25095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:17:32.262 [INFO] [Thread-25095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] client lang: <none>
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] server lang: <none>
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] kex follows: False
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:17:32.271 [DEBUG] [Thread-25095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:17:32.272 [DEBUG] [Thread-25095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:17:32.272 [DEBUG] [Thread-25095] [transport.py] [_log()] Compression: none
2026-04-15T20:17:32.272 [DEBUG] [Thread-25095] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:17:32.327 [DEBUG] [Thread-25095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:17:32.328 [DEBUG] [Thread-25095] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:17:32.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:17:32.328 [DEBUG] [Thread-25095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:17:32.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:17:32.386 [DEBUG] [Thread-25095] [transport.py] [_log()] userauth is OK
2026-04-15T20:17:32.386 [DEBUG] [Thread-25095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:17:32.387 [DEBUG] [Thread-25095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:17:32.387 [DEBUG] [Thread-25095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:17:32.387 [DEBUG] [Thread-25095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:17:32.415 [INFO] [Thread-25095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:17:32.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:17:32.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:17:33.271 [DEBUG] [Thread-25095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:17:33.272 [DEBUG] [Thread-25095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:17:33.319 [DEBUG] [Thread-25095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:17:33.319 [DEBUG] [Thread-25095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:17:33.327 [DEBUG] [Thread-25095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:17:33.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:17:33.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')
2026-04-15T20:17:33.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
2026-04-15T20:17:33.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:17:33.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:17:33.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:17:33.363 [DEBUG] [Thread-25095] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:17:34.306 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:34.307 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:36.994 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:42.414 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:45.061 [DEBUG] [Thread-25097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:48.051 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:53.454 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:17:58.923 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:00.105 [DEBUG] [Thread-25098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:03.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:18:03.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:18:03.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
2026-04-15T20:18:04.314 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 17, 50), 3.97316, 76.2279, 0.0, 9.63504, 9.70855, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:18:04.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:17:50
2026-04-15T20:18:05.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:18:05.491 [DEBUG] [Thread-25099] [transport.py] [_log()] starting thread (client mode): 0xee907940
2026-04-15T20:18:05.492 [DEBUG] [Thread-25099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:18:05.513 [DEBUG] [Thread-25099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:18:05.513 [INFO] [Thread-25099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:18:05.517 [DEBUG] [Thread-25099] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:18:05.517 [DEBUG] [Thread-25099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:18:05.517 [DEBUG] [Thread-25099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:18:05.517 [DEBUG] [Thread-25099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:18:05.517 [DEBUG] [Thread-25099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:18:05.517 [DEBUG] [Thread-25099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:18:05.517 [DEBUG] [Thread-25099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:18:05.517 [DEBUG] [Thread-25099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:18:05.517 [DEBUG] [Thread-25099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:18:05.517 [DEBUG] [Thread-25099] [transport.py] [_log()] client lang: <none>
2026-04-15T20:18:05.518 [DEBUG] [Thread-25099] [transport.py] [_log()] server lang: <none>
2026-04-15T20:18:05.518 [DEBUG] [Thread-25099] [transport.py] [_log()] kex follows: False
2026-04-15T20:18:05.518 [DEBUG] [Thread-25099] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:18:05.518 [DEBUG] [Thread-25099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:18:05.518 [DEBUG] [Thread-25099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:18:05.518 [DEBUG] [Thread-25099] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:18:05.518 [DEBUG] [Thread-25099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:18:05.518 [DEBUG] [Thread-25099] [transport.py] [_log()] Compression: none
2026-04-15T20:18:05.518 [DEBUG] [Thread-25099] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:18:05.534 [DEBUG] [Thread-25099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:18:05.535 [DEBUG] [Thread-25099] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:18:05.535 [DEBUG] [Thread-25099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:18:05.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:18:05.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:18:05.536 [DEBUG] [Thread-25099] [transport.py] [_log()] userauth is OK
2026-04-15T20:18:05.536 [DEBUG] [Thread-25099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:18:05.537 [DEBUG] [Thread-25099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:18:05.537 [DEBUG] [Thread-25099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:18:05.537 [DEBUG] [Thread-25099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:18:05.561 [INFO] [Thread-25099] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:18:05.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:18:06.339 [DEBUG] [Thread-25101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:06.348 [DEBUG] [Thread-25099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:18:06.348 [DEBUG] [Thread-25099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:18:06.348 [DEBUG] [Thread-25099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:18:06.389 [DEBUG] [Thread-25099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:18:06.389 [DEBUG] [Thread-25099] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:18:06.391 [DEBUG] [Thread-25099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:18:06.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:18:06.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:18:06.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:18:06.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:18:06.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:18:06.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:18:06.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:18:06.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:18:06.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:18:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.761938 -999.00   +9.50   7.70     79   +6.20 1 1 1 1 1     0    0 3.12 -13.88 ZNESW 7.9 7.7 298.6 8.3 10.3 -24.7 10.2 -23.4 9.9 -21.5 10.2 -23.5
2026-04-15T20:18:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:18:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:18:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.761938
2026-04-15T20:18:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:18:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:18:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:18:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:18:06.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:18:06.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:17:50', tmtdew=3.97316, humidity=76.2279, cloud=0.0, wind=9.63504, temperature=9.70855, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:17:50', seeing=1.03, atlas_timestamp='2026-04-15T18:17:11.443', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.0467499999999994, -0.03974999999999973, -0.03950000000000031, 0.014499999999999957, 0.0002500000000011937, -0.03200000000000003, 0.024250000000000327, 0.04349999999999987, 0.006000000000000227, -0.07174999999999976, -0.0235000000000003, 0.038000000000000256, 0.025249999999999773, 0.019999999999999574, -0.009000000000000341, 0.04925000000000068, 0.054499999999999105, 0.013999999999999346, 0.010249999999999204, 0.04849999999999888, -0.013750000000001705, -0.004749999999999588, 0.05375000000000085, 0.07199999999999918, 0.0015000000000000568, -0.005250000000000199, -0.03149999999999942, 0.022500000000000853, 0.0015000000000000568, 0.038000000000000256, 0.07500000000000107, 0.0782500000000006], zp_timestamp='2026-04-15T18:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:18:06.411 [DEBUG] [Thread-25099] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:18:06.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:18:06.629 [DEBUG] [Thread-25103] [transport.py] [_log()] starting thread (client mode): 0xee9041c0
2026-04-15T20:18:06.629 [DEBUG] [Thread-25103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:18:06.645 [DEBUG] [Thread-25103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:18:06.645 [INFO] [Thread-25103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:18:06.652 [DEBUG] [Thread-25103] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:18:06.653 [DEBUG] [Thread-25103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:18:06.653 [DEBUG] [Thread-25103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:18:06.653 [DEBUG] [Thread-25103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:18:06.653 [DEBUG] [Thread-25103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:18:06.653 [DEBUG] [Thread-25103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:18:06.653 [DEBUG] [Thread-25103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:18:06.653 [DEBUG] [Thread-25103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:18:06.653 [DEBUG] [Thread-25103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:18:06.653 [DEBUG] [Thread-25103] [transport.py] [_log()] client lang: <none>
2026-04-15T20:18:06.653 [DEBUG] [Thread-25103] [transport.py] [_log()] server lang: <none>
2026-04-15T20:18:06.653 [DEBUG] [Thread-25103] [transport.py] [_log()] kex follows: False
2026-04-15T20:18:06.654 [DEBUG] [Thread-25103] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:18:06.654 [DEBUG] [Thread-25103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:18:06.654 [DEBUG] [Thread-25103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:18:06.654 [DEBUG] [Thread-25103] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:18:06.654 [DEBUG] [Thread-25103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:18:06.654 [DEBUG] [Thread-25103] [transport.py] [_log()] Compression: none
2026-04-15T20:18:06.654 [DEBUG] [Thread-25103] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:18:06.713 [DEBUG] [Thread-25103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:18:06.713 [DEBUG] [Thread-25103] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:18:06.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:18:06.714 [DEBUG] [Thread-25103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:18:06.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:18:06.769 [DEBUG] [Thread-25103] [transport.py] [_log()] userauth is OK
2026-04-15T20:18:06.770 [DEBUG] [Thread-25103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:18:06.770 [DEBUG] [Thread-25103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:18:06.770 [DEBUG] [Thread-25103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:18:06.770 [DEBUG] [Thread-25103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:18:06.790 [INFO] [Thread-25103] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:18:06.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:18:06.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:18:07.598 [DEBUG] [Thread-25103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:18:07.599 [DEBUG] [Thread-25103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:18:07.646 [DEBUG] [Thread-25103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:18:07.646 [DEBUG] [Thread-25103] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:18:07.655 [DEBUG] [Thread-25103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:18:07.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:18:07.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')
2026-04-15T20:18:07.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
2026-04-15T20:18:07.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:18:07.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:18:07.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:18:07.691 [DEBUG] [Thread-25103] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:18:09.792 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:15.135 [DEBUG] [Thread-25105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:15.234 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:20.588 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:25.992 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:30.178 [DEBUG] [Thread-25106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:31.358 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:34.509 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:34.509 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:36.737 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:37.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:18:37.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:18:37.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
2026-04-15T20:18:38.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 18, 26), 4.13658, 75.114, 0.0, 8.38224, 9.60431, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:18:38.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:18:26
2026-04-15T20:18:39.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:18:39.733 [DEBUG] [Thread-25107] [transport.py] [_log()] starting thread (client mode): 0xf13ff4c0
2026-04-15T20:18:39.734 [DEBUG] [Thread-25107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:18:39.748 [DEBUG] [Thread-25107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:18:39.749 [INFO] [Thread-25107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:18:39.752 [DEBUG] [Thread-25107] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:18:39.752 [DEBUG] [Thread-25107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:18:39.752 [DEBUG] [Thread-25107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:18:39.752 [DEBUG] [Thread-25107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:18:39.752 [DEBUG] [Thread-25107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:18:39.752 [DEBUG] [Thread-25107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:18:39.752 [DEBUG] [Thread-25107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:18:39.752 [DEBUG] [Thread-25107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:18:39.752 [DEBUG] [Thread-25107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:18:39.752 [DEBUG] [Thread-25107] [transport.py] [_log()] client lang: <none>
2026-04-15T20:18:39.753 [DEBUG] [Thread-25107] [transport.py] [_log()] server lang: <none>
2026-04-15T20:18:39.753 [DEBUG] [Thread-25107] [transport.py] [_log()] kex follows: False
2026-04-15T20:18:39.753 [DEBUG] [Thread-25107] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:18:39.753 [DEBUG] [Thread-25107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:18:39.753 [DEBUG] [Thread-25107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:18:39.753 [DEBUG] [Thread-25107] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:18:39.753 [DEBUG] [Thread-25107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:18:39.753 [DEBUG] [Thread-25107] [transport.py] [_log()] Compression: none
2026-04-15T20:18:39.753 [DEBUG] [Thread-25107] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:18:39.769 [DEBUG] [Thread-25107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:18:39.770 [DEBUG] [Thread-25107] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:18:39.770 [DEBUG] [Thread-25107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:18:39.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:18:39.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:18:39.771 [DEBUG] [Thread-25107] [transport.py] [_log()] userauth is OK
2026-04-15T20:18:39.771 [DEBUG] [Thread-25107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:18:39.771 [DEBUG] [Thread-25107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:18:39.771 [DEBUG] [Thread-25107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:18:39.771 [DEBUG] [Thread-25107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:18:39.802 [INFO] [Thread-25107] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:18:39.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:18:40.571 [DEBUG] [Thread-25107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:18:40.571 [DEBUG] [Thread-25107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:18:40.572 [DEBUG] [Thread-25107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:18:40.612 [DEBUG] [Thread-25107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:18:40.612 [DEBUG] [Thread-25107] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:18:40.614 [DEBUG] [Thread-25107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:18:40.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:18:40.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:18:40.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:18:40.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:18:40.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:18:40.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:18:40.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:18:40.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:18:40.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:18:40.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.762285 -999.00   +9.50   7.73     79   +6.20 1 1 1 1 1     0    0 3.01 -15.07 ZNESW 7.5 7.7 308.4 9.8 10.3 -24.6 10.2 -23.4 10.0 -21.4 10.2 -23.2
2026-04-15T20:18:40.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:18:40.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:18:40.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.762285
2026-04-15T20:18:40.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:18:40.638 [DEBUG] [Thread-25107] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:18:40.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:18:40.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:18:40.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:18:40.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:18:40.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:18:26', tmtdew=4.13658, humidity=75.114, cloud=0.0, wind=8.38224, temperature=9.60431, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:18:26', seeing=1.28, atlas_timestamp='2026-04-15T18:17:41.424', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.0467499999999994, -0.03974999999999973, -0.03950000000000031, 0.014499999999999957, 0.0002500000000011937, -0.03200000000000003, 0.024250000000000327, 0.04349999999999987, 0.006000000000000227, -0.07174999999999976, -0.0235000000000003, 0.038000000000000256, 0.025249999999999773, 0.019999999999999574, -0.009000000000000341, 0.04925000000000068, 0.054499999999999105, 0.013999999999999346, 0.010249999999999204, 0.04849999999999888, -0.013750000000001705, -0.004749999999999588, 0.05375000000000085, 0.07199999999999918, 0.0015000000000000568, -0.005250000000000199, -0.03149999999999942, 0.022500000000000853, 0.0015000000000000568, 0.038000000000000256, 0.07500000000000107, 0.0782500000000006], zp_timestamp='2026-04-15T18:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:18:40.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:18:40.898 [DEBUG] [Thread-25110] [transport.py] [_log()] starting thread (client mode): 0xee9c2f80
2026-04-15T20:18:40.898 [DEBUG] [Thread-25110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:18:40.912 [DEBUG] [Thread-25110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:18:40.912 [INFO] [Thread-25110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:18:40.920 [DEBUG] [Thread-25110] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:18:40.920 [DEBUG] [Thread-25110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:18:40.920 [DEBUG] [Thread-25110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:18:40.920 [DEBUG] [Thread-25110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:18:40.920 [DEBUG] [Thread-25110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:18:40.920 [DEBUG] [Thread-25110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:18:40.920 [DEBUG] [Thread-25110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:18:40.920 [DEBUG] [Thread-25110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:18:40.920 [DEBUG] [Thread-25110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:18:40.920 [DEBUG] [Thread-25110] [transport.py] [_log()] client lang: <none>
2026-04-15T20:18:40.920 [DEBUG] [Thread-25110] [transport.py] [_log()] server lang: <none>
2026-04-15T20:18:40.921 [DEBUG] [Thread-25110] [transport.py] [_log()] kex follows: False
2026-04-15T20:18:40.921 [DEBUG] [Thread-25110] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:18:40.921 [DEBUG] [Thread-25110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:18:40.921 [DEBUG] [Thread-25110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:18:40.921 [DEBUG] [Thread-25110] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:18:40.921 [DEBUG] [Thread-25110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:18:40.921 [DEBUG] [Thread-25110] [transport.py] [_log()] Compression: none
2026-04-15T20:18:40.921 [DEBUG] [Thread-25110] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:18:40.979 [DEBUG] [Thread-25110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:18:40.979 [DEBUG] [Thread-25110] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:18:40.980 [DEBUG] [Thread-25110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:18:40.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:18:40.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:18:41.036 [DEBUG] [Thread-25110] [transport.py] [_log()] userauth is OK
2026-04-15T20:18:41.036 [DEBUG] [Thread-25110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:18:41.036 [DEBUG] [Thread-25110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:18:41.036 [DEBUG] [Thread-25110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:18:41.036 [DEBUG] [Thread-25110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:18:41.061 [INFO] [Thread-25110] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:18:41.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:18:41.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:18:41.842 [DEBUG] [Thread-25110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:18:41.843 [DEBUG] [Thread-25110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:18:41.891 [DEBUG] [Thread-25110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:18:41.891 [DEBUG] [Thread-25110] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:18:41.899 [DEBUG] [Thread-25110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:18:41.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:18: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')
2026-04-15T20:18:41.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
2026-04-15T20:18:41.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:18:41.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:18:41.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:18:41.933 [DEBUG] [Thread-25110] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:18:42.119 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:45.211 [DEBUG] [Thread-25112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:47.535 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:52.911 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:18:58.417 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:19:00.257 [DEBUG] [Thread-25113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:19:06.494 [DEBUG] [Thread-25114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:19:11.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:19:11.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:19:11.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
2026-04-15T20:19:13.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 19, 1), 4.14286, 75.0808, 0.0, 9.0702, 9.60431, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:19:13.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:19:01
2026-04-15T20:19:13.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:19:14.068 [DEBUG] [Thread-25115] [transport.py] [_log()] starting thread (client mode): 0xee9c2440
2026-04-15T20:19:14.068 [DEBUG] [Thread-25115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:19:14.087 [DEBUG] [Thread-25115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:19:14.087 [INFO] [Thread-25115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:19:14.090 [DEBUG] [Thread-25115] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:19:14.090 [DEBUG] [Thread-25115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:19:14.090 [DEBUG] [Thread-25115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:19:14.090 [DEBUG] [Thread-25115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:19:14.090 [DEBUG] [Thread-25115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:19:14.090 [DEBUG] [Thread-25115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:19:14.091 [DEBUG] [Thread-25115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:19:14.091 [DEBUG] [Thread-25115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:19:14.091 [DEBUG] [Thread-25115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:19:14.091 [DEBUG] [Thread-25115] [transport.py] [_log()] client lang: <none>
2026-04-15T20:19:14.091 [DEBUG] [Thread-25115] [transport.py] [_log()] server lang: <none>
2026-04-15T20:19:14.091 [DEBUG] [Thread-25115] [transport.py] [_log()] kex follows: False
2026-04-15T20:19:14.091 [DEBUG] [Thread-25115] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:19:14.091 [DEBUG] [Thread-25115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:19:14.091 [DEBUG] [Thread-25115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:19:14.091 [DEBUG] [Thread-25115] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:19:14.091 [DEBUG] [Thread-25115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:19:14.091 [DEBUG] [Thread-25115] [transport.py] [_log()] Compression: none
2026-04-15T20:19:14.091 [DEBUG] [Thread-25115] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:19:14.107 [DEBUG] [Thread-25115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:19:14.107 [DEBUG] [Thread-25115] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:19:14.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:19:14.108 [DEBUG] [Thread-25115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:19:14.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:19:14.109 [DEBUG] [Thread-25115] [transport.py] [_log()] userauth is OK
2026-04-15T20:19:14.109 [DEBUG] [Thread-25115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:19:14.109 [DEBUG] [Thread-25115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:19:14.109 [DEBUG] [Thread-25115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:19:14.109 [DEBUG] [Thread-25115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:19:14.130 [INFO] [Thread-25115] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:19:14.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:19:14.932 [DEBUG] [Thread-25115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:19:14.932 [DEBUG] [Thread-25115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:19:14.933 [DEBUG] [Thread-25115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:19:14.973 [DEBUG] [Thread-25115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:19:14.973 [DEBUG] [Thread-25115] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:19:14.976 [DEBUG] [Thread-25115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:19:14.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:19:14.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:19:14.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:19:14.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:19:14.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:19:14.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:19:14.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:19:14.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:19:15.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:19:15.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.762979 -999.00   +9.70  11.63     79   +6.20 1 1 1 1 1     0    0 2.95 -17.32 ZNESW 11.0 11.6 293.2 12.5 10.3 -24.5 10.3 -23.3 9.9 -21.3 10.2 -23.2
2026-04-15T20:19:15.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:19:15.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:19:15.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.762979
2026-04-15T20:19:15.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:19:15.001 [DEBUG] [Thread-25115] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:19:15.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:19:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:19:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:19:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:19:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:19:01', tmtdew=4.14286, humidity=75.0808, cloud=0.0, wind=9.0702, temperature=9.60431, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:19:01', seeing=1.09, atlas_timestamp='2026-04-15T18:18:41.386', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.0467499999999994, -0.03974999999999973, -0.03950000000000031, 0.014499999999999957, 0.0002500000000011937, -0.03200000000000003, 0.024250000000000327, 0.04349999999999987, 0.006000000000000227, -0.07174999999999976, -0.0235000000000003, 0.038000000000000256, 0.025249999999999773, 0.019999999999999574, -0.009000000000000341, 0.04925000000000068, 0.054499999999999105, 0.013999999999999346, 0.010249999999999204, 0.04849999999999888, -0.013750000000001705, -0.004749999999999588, 0.05375000000000085, 0.07199999999999918, 0.0015000000000000568, -0.005250000000000199, -0.03149999999999942, 0.022500000000000853, 0.0015000000000000568, 0.038000000000000256, 0.07500000000000107, 0.0782500000000006], zp_timestamp='2026-04-15T18:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:19:15.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:19:15.258 [DEBUG] [Thread-25118] [transport.py] [_log()] starting thread (client mode): 0xee9c32b0
2026-04-15T20:19:15.258 [DEBUG] [Thread-25118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:19:15.273 [DEBUG] [Thread-25118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:19:15.273 [INFO] [Thread-25118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:19:15.280 [DEBUG] [Thread-25118] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:19:15.280 [DEBUG] [Thread-25118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:19:15.280 [DEBUG] [Thread-25118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:19:15.280 [DEBUG] [Thread-25118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:19:15.280 [DEBUG] [Thread-25118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:19:15.281 [DEBUG] [Thread-25118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:19:15.281 [DEBUG] [Thread-25118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:19:15.281 [DEBUG] [Thread-25118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:19:15.281 [DEBUG] [Thread-25118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:19:15.281 [DEBUG] [Thread-25118] [transport.py] [_log()] client lang: <none>
2026-04-15T20:19:15.281 [DEBUG] [Thread-25118] [transport.py] [_log()] server lang: <none>
2026-04-15T20:19:15.281 [DEBUG] [Thread-25118] [transport.py] [_log()] kex follows: False
2026-04-15T20:19:15.281 [DEBUG] [Thread-25118] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:19:15.281 [DEBUG] [Thread-25118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:19:15.281 [DEBUG] [Thread-25118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:19:15.281 [DEBUG] [Thread-25118] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:19:15.282 [DEBUG] [Thread-25118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:19:15.282 [DEBUG] [Thread-25118] [transport.py] [_log()] Compression: none
2026-04-15T20:19:15.282 [DEBUG] [Thread-25118] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:19:15.287 [DEBUG] [Thread-25120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:19:15.337 [DEBUG] [Thread-25118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:19:15.337 [DEBUG] [Thread-25118] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:19:15.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:19:15.338 [DEBUG] [Thread-25118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:19:15.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:19:15.394 [DEBUG] [Thread-25118] [transport.py] [_log()] userauth is OK
2026-04-15T20:19:15.395 [DEBUG] [Thread-25118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:19:15.395 [DEBUG] [Thread-25118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:19:15.395 [DEBUG] [Thread-25118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:19:15.395 [DEBUG] [Thread-25118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:19:15.422 [INFO] [Thread-25118] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:19:15.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:19:15.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:19:16.231 [DEBUG] [Thread-25118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:19:16.231 [DEBUG] [Thread-25118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:19:16.280 [DEBUG] [Thread-25118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:19:16.280 [DEBUG] [Thread-25118] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:19:16.288 [DEBUG] [Thread-25118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:19:16.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:19:16.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')
2026-04-15T20:19:16.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
2026-04-15T20:19:16.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:19:16.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:19:16.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:19:16.321 [DEBUG] [Thread-25118] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:19:30.328 [DEBUG] [Thread-25121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:19:34.711 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:19:34.712 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:19:45.356 [DEBUG] [Thread-25122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:19:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:19:46.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:19:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T20:19:47.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 19, 37), 3.97435, 76.1949, 0.0, 10.517, 9.54282, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:19:47.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:19:37
2026-04-15T20:19:48.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:19:48.544 [DEBUG] [Thread-25123] [transport.py] [_log()] starting thread (client mode): 0xee9c27a0
2026-04-15T20:19:48.545 [DEBUG] [Thread-25123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:19:48.564 [DEBUG] [Thread-25123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:19:48.564 [INFO] [Thread-25123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:19:48.566 [DEBUG] [Thread-25123] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:19:48.566 [DEBUG] [Thread-25123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:19:48.566 [DEBUG] [Thread-25123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:19:48.566 [DEBUG] [Thread-25123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:19:48.567 [DEBUG] [Thread-25123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:19:48.567 [DEBUG] [Thread-25123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:19:48.567 [DEBUG] [Thread-25123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:19:48.567 [DEBUG] [Thread-25123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:19:48.567 [DEBUG] [Thread-25123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:19:48.567 [DEBUG] [Thread-25123] [transport.py] [_log()] client lang: <none>
2026-04-15T20:19:48.567 [DEBUG] [Thread-25123] [transport.py] [_log()] server lang: <none>
2026-04-15T20:19:48.567 [DEBUG] [Thread-25123] [transport.py] [_log()] kex follows: False
2026-04-15T20:19:48.567 [DEBUG] [Thread-25123] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:19:48.567 [DEBUG] [Thread-25123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:19:48.567 [DEBUG] [Thread-25123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:19:48.568 [DEBUG] [Thread-25123] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:19:48.568 [DEBUG] [Thread-25123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:19:48.568 [DEBUG] [Thread-25123] [transport.py] [_log()] Compression: none
2026-04-15T20:19:48.568 [DEBUG] [Thread-25123] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:19:48.579 [DEBUG] [Thread-25123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:19:48.579 [DEBUG] [Thread-25123] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:19:48.580 [DEBUG] [Thread-25123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:19:48.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:19:48.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:19:48.581 [DEBUG] [Thread-25123] [transport.py] [_log()] userauth is OK
2026-04-15T20:19:48.581 [DEBUG] [Thread-25123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:19:48.581 [DEBUG] [Thread-25123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:19:48.581 [DEBUG] [Thread-25123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:19:48.581 [DEBUG] [Thread-25123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:19:48.616 [INFO] [Thread-25123] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:19:48.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:19:49.408 [DEBUG] [Thread-25123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:19:49.408 [DEBUG] [Thread-25123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:19:49.409 [DEBUG] [Thread-25123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:19:49.449 [DEBUG] [Thread-25123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:19:49.449 [DEBUG] [Thread-25123] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:19:49.452 [DEBUG] [Thread-25123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:19:49.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:19:49.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:19:49.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:19:49.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:19:49.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:19:49.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:19:49.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:19:49.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:19:49.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:19:49.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.763327 -999.00   +9.70   9.68     79   +6.20 1 1 1 1 1     0    0 2.94 -17.84 ZNESW 10.0 9.7 300.6 11.3 10.3 -24.6 10.2 -23.3 9.9 -21.4 10.2 -23.3
2026-04-15T20:19:49.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:19:49.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:19:49.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.763327
2026-04-15T20:19:49.474 [DEBUG] [Thread-25123] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:19:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:19:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:19:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:19:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:19:49.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:19:49.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:19:37', tmtdew=3.97435, humidity=76.1949, cloud=0.0, wind=10.517, temperature=9.54282, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:19:37', seeing=1.07, atlas_timestamp='2026-04-15T18:19:11.453', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.0467499999999994, -0.03974999999999973, -0.03950000000000031, 0.014499999999999957, 0.0002500000000011937, -0.03200000000000003, 0.024250000000000327, 0.04349999999999987, 0.006000000000000227, -0.07174999999999976, -0.0235000000000003, 0.038000000000000256, 0.025249999999999773, 0.019999999999999574, -0.009000000000000341, 0.04925000000000068, 0.054499999999999105, 0.013999999999999346, 0.010249999999999204, 0.04849999999999888, -0.013750000000001705, -0.004749999999999588, 0.05375000000000085, 0.07199999999999918, 0.0015000000000000568, -0.005250000000000199, -0.03149999999999942, 0.022500000000000853, 0.0015000000000000568, 0.038000000000000256, 0.07500000000000107, 0.0782500000000006], zp_timestamp='2026-04-15T18:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:19:49.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:19:49.732 [DEBUG] [Thread-25126] [transport.py] [_log()] starting thread (client mode): 0xee9c0640
2026-04-15T20:19:49.732 [DEBUG] [Thread-25126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:19:49.746 [DEBUG] [Thread-25126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:19:49.747 [INFO] [Thread-25126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:19:49.754 [DEBUG] [Thread-25126] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:19:49.754 [DEBUG] [Thread-25126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:19:49.754 [DEBUG] [Thread-25126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:19:49.754 [DEBUG] [Thread-25126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:19:49.754 [DEBUG] [Thread-25126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:19:49.754 [DEBUG] [Thread-25126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:19:49.754 [DEBUG] [Thread-25126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:19:49.755 [DEBUG] [Thread-25126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:19:49.755 [DEBUG] [Thread-25126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:19:49.755 [DEBUG] [Thread-25126] [transport.py] [_log()] client lang: <none>
2026-04-15T20:19:49.755 [DEBUG] [Thread-25126] [transport.py] [_log()] server lang: <none>
2026-04-15T20:19:49.755 [DEBUG] [Thread-25126] [transport.py] [_log()] kex follows: False
2026-04-15T20:19:49.755 [DEBUG] [Thread-25126] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:19:49.755 [DEBUG] [Thread-25126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:19:49.755 [DEBUG] [Thread-25126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:19:49.755 [DEBUG] [Thread-25126] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:19:49.755 [DEBUG] [Thread-25126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:19:49.755 [DEBUG] [Thread-25126] [transport.py] [_log()] Compression: none
2026-04-15T20:19:49.755 [DEBUG] [Thread-25126] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:19:49.811 [DEBUG] [Thread-25126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:19:49.812 [DEBUG] [Thread-25126] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:19:49.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:19:49.813 [DEBUG] [Thread-25126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:19:49.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:19:49.868 [DEBUG] [Thread-25126] [transport.py] [_log()] userauth is OK
2026-04-15T20:19:49.869 [DEBUG] [Thread-25126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:19:49.869 [DEBUG] [Thread-25126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:19:49.869 [DEBUG] [Thread-25126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:19:49.869 [DEBUG] [Thread-25126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:19:49.896 [INFO] [Thread-25126] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:19:49.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:19:49.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:19:50.705 [DEBUG] [Thread-25126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:19:50.705 [DEBUG] [Thread-25126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:19:50.753 [DEBUG] [Thread-25126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:19:50.753 [DEBUG] [Thread-25126] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:19:50.762 [DEBUG] [Thread-25126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:19:50.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:19:50.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')
2026-04-15T20:19:50.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
2026-04-15T20:19:50.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:19:50.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:19:50.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:19:50.797 [DEBUG] [Thread-25126] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:20:00.385 [DEBUG] [Thread-25128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:20:06.643 [DEBUG] [Thread-25129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:20:15.424 [DEBUG] [Thread-25130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:20:20.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:20:20.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:20:20.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
2026-04-15T20:20:22.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 20, 13), 4.13242, 75.1306, 0.0, 8.66448, 9.57117, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:20:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:20:13
2026-04-15T20:20:22.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:20:22.925 [DEBUG] [Thread-25131] [transport.py] [_log()] starting thread (client mode): 0xee9c2440
2026-04-15T20:20:22.925 [DEBUG] [Thread-25131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:20:22.944 [DEBUG] [Thread-25131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:20:22.944 [INFO] [Thread-25131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:20:22.947 [DEBUG] [Thread-25131] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:20:22.947 [DEBUG] [Thread-25131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:20:22.947 [DEBUG] [Thread-25131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:20:22.947 [DEBUG] [Thread-25131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:20:22.947 [DEBUG] [Thread-25131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:20:22.947 [DEBUG] [Thread-25131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:20:22.947 [DEBUG] [Thread-25131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:20:22.948 [DEBUG] [Thread-25131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:20:22.948 [DEBUG] [Thread-25131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:20:22.948 [DEBUG] [Thread-25131] [transport.py] [_log()] client lang: <none>
2026-04-15T20:20:22.948 [DEBUG] [Thread-25131] [transport.py] [_log()] server lang: <none>
2026-04-15T20:20:22.948 [DEBUG] [Thread-25131] [transport.py] [_log()] kex follows: False
2026-04-15T20:20:22.948 [DEBUG] [Thread-25131] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:20:22.948 [DEBUG] [Thread-25131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:20:22.948 [DEBUG] [Thread-25131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:20:22.948 [DEBUG] [Thread-25131] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:20:22.949 [DEBUG] [Thread-25131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:20:22.949 [DEBUG] [Thread-25131] [transport.py] [_log()] Compression: none
2026-04-15T20:20:22.949 [DEBUG] [Thread-25131] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:20:22.969 [DEBUG] [Thread-25131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:20:22.969 [DEBUG] [Thread-25131] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:20:22.970 [DEBUG] [Thread-25131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:20:22.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:20:22.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:20:22.971 [DEBUG] [Thread-25131] [transport.py] [_log()] userauth is OK
2026-04-15T20:20:22.971 [DEBUG] [Thread-25131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:20:22.971 [DEBUG] [Thread-25131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:20:22.971 [DEBUG] [Thread-25131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:20:22.971 [DEBUG] [Thread-25131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:20:22.989 [INFO] [Thread-25131] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:20:22.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:20:25.149 [DEBUG] [Thread-25131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:20:25.149 [DEBUG] [Thread-25131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:20:25.149 [DEBUG] [Thread-25131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:20:25.190 [DEBUG] [Thread-25131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:20:25.190 [DEBUG] [Thread-25131] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:20:25.193 [DEBUG] [Thread-25131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:20:25.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:20:25.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:20:25.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:20:25.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:20:25.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:20:25.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:20:25.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:20:25.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:20:25.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:20:25.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.763674 -999.00   +9.70   9.59     79   +6.30 1 1 1 1 1     0    0 2.98 -17.87 ZNESW 9.4 9.6 311.6 11.7 10.4 -24.6 10.2 -23.4 9.9 -21.3 10.2 -23.3
2026-04-15T20:20:25.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:20:25.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:20:25.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.763674
2026-04-15T20:20:25.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:20:25.255 [DEBUG] [Thread-25131] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:20:25.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:20:25.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:20:25.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:20:25.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:20:25.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:20:13', tmtdew=4.13242, humidity=75.1306, cloud=0.0, wind=8.66448, temperature=9.57117, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:20:13', seeing=0.97, atlas_timestamp='2026-04-15T18:19:41.434', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.0467499999999994, -0.03974999999999973, -0.03950000000000031, 0.014499999999999957, 0.0002500000000011937, -0.03200000000000003, 0.024250000000000327, 0.04349999999999987, 0.006000000000000227, -0.07174999999999976, -0.0235000000000003, 0.038000000000000256, 0.025249999999999773, 0.019999999999999574, -0.009000000000000341, 0.04925000000000068, 0.054499999999999105, 0.013999999999999346, 0.010249999999999204, 0.04849999999999888, -0.013750000000001705, -0.004749999999999588, 0.05375000000000085, 0.07199999999999918, 0.0015000000000000568, -0.005250000000000199, -0.03149999999999942, 0.022500000000000853, 0.0015000000000000568, 0.038000000000000256, 0.07500000000000107, 0.0782500000000006], zp_timestamp='2026-04-15T18:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:20:25.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:20:25.514 [DEBUG] [Thread-25134] [transport.py] [_log()] starting thread (client mode): 0xf13e04c0
2026-04-15T20:20:25.515 [DEBUG] [Thread-25134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:20:25.531 [DEBUG] [Thread-25134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:20:25.531 [INFO] [Thread-25134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:20:25.538 [DEBUG] [Thread-25134] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:20:25.539 [DEBUG] [Thread-25134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:20:25.539 [DEBUG] [Thread-25134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:20:25.539 [DEBUG] [Thread-25134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:20:25.539 [DEBUG] [Thread-25134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:20:25.539 [DEBUG] [Thread-25134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:20:25.539 [DEBUG] [Thread-25134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:20:25.539 [DEBUG] [Thread-25134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:20:25.539 [DEBUG] [Thread-25134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:20:25.539 [DEBUG] [Thread-25134] [transport.py] [_log()] client lang: <none>
2026-04-15T20:20:25.539 [DEBUG] [Thread-25134] [transport.py] [_log()] server lang: <none>
2026-04-15T20:20:25.539 [DEBUG] [Thread-25134] [transport.py] [_log()] kex follows: False
2026-04-15T20:20:25.540 [DEBUG] [Thread-25134] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:20:25.540 [DEBUG] [Thread-25134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:20:25.540 [DEBUG] [Thread-25134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:20:25.540 [DEBUG] [Thread-25134] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:20:25.540 [DEBUG] [Thread-25134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:20:25.540 [DEBUG] [Thread-25134] [transport.py] [_log()] Compression: none
2026-04-15T20:20:25.540 [DEBUG] [Thread-25134] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:20:25.598 [DEBUG] [Thread-25134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:20:25.598 [DEBUG] [Thread-25134] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:20:25.599 [DEBUG] [Thread-25134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:20:25.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:20:25.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:20:25.655 [DEBUG] [Thread-25134] [transport.py] [_log()] userauth is OK
2026-04-15T20:20:25.656 [DEBUG] [Thread-25134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:20:25.656 [DEBUG] [Thread-25134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:20:25.656 [DEBUG] [Thread-25134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:20:25.656 [DEBUG] [Thread-25134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:20:25.692 [INFO] [Thread-25134] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:20:25.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:20:25.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:20:26.606 [DEBUG] [Thread-25134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:20:26.606 [DEBUG] [Thread-25134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:20:26.656 [DEBUG] [Thread-25134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:20:26.656 [DEBUG] [Thread-25134] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:20:26.664 [DEBUG] [Thread-25134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:20:26.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:20:26.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')
2026-04-15T20:20:26.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
2026-04-15T20:20:26.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:20:26.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:20:26.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:20:26.700 [DEBUG] [Thread-25134] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:20:30.455 [DEBUG] [Thread-25136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:20:34.910 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:20:34.911 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:20:45.521 [DEBUG] [Thread-25137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:20:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:20:56.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:20:56.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
2026-04-15T20:20:57.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 20, 48), 3.97829, 76.1956, 0.0, 8.92944, 9.67605, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:20:57.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:20:48
2026-04-15T20:20:58.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:20:58.797 [DEBUG] [Thread-25138] [transport.py] [_log()] starting thread (client mode): 0xf13e3bb0
2026-04-15T20:20:58.797 [DEBUG] [Thread-25138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:20:58.810 [DEBUG] [Thread-25138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:20:58.810 [INFO] [Thread-25138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:20:58.814 [DEBUG] [Thread-25138] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:20:58.814 [DEBUG] [Thread-25138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:20:58.814 [DEBUG] [Thread-25138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:20:58.814 [DEBUG] [Thread-25138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:20:58.814 [DEBUG] [Thread-25138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:20:58.814 [DEBUG] [Thread-25138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:20:58.814 [DEBUG] [Thread-25138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:20:58.814 [DEBUG] [Thread-25138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:20:58.815 [DEBUG] [Thread-25138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:20:58.815 [DEBUG] [Thread-25138] [transport.py] [_log()] client lang: <none>
2026-04-15T20:20:58.815 [DEBUG] [Thread-25138] [transport.py] [_log()] server lang: <none>
2026-04-15T20:20:58.815 [DEBUG] [Thread-25138] [transport.py] [_log()] kex follows: False
2026-04-15T20:20:58.815 [DEBUG] [Thread-25138] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:20:58.815 [DEBUG] [Thread-25138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:20:58.815 [DEBUG] [Thread-25138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:20:58.815 [DEBUG] [Thread-25138] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:20:58.815 [DEBUG] [Thread-25138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:20:58.815 [DEBUG] [Thread-25138] [transport.py] [_log()] Compression: none
2026-04-15T20:20:58.815 [DEBUG] [Thread-25138] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:20:58.832 [DEBUG] [Thread-25138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:20:58.833 [DEBUG] [Thread-25138] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:20:58.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:20:58.833 [DEBUG] [Thread-25138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:20:58.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:20:58.834 [DEBUG] [Thread-25138] [transport.py] [_log()] userauth is OK
2026-04-15T20:20:58.835 [DEBUG] [Thread-25138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:20:58.835 [DEBUG] [Thread-25138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:20:58.835 [DEBUG] [Thread-25138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:20:58.835 [DEBUG] [Thread-25138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:20:58.859 [INFO] [Thread-25138] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:20:58.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:20:59.664 [DEBUG] [Thread-25138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:20:59.665 [DEBUG] [Thread-25138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:20:59.665 [DEBUG] [Thread-25138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:20:59.705 [DEBUG] [Thread-25138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:20:59.705 [DEBUG] [Thread-25138] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:20:59.708 [DEBUG] [Thread-25138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:20:59.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:20:59.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:20:59.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:20:59.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:20:59.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:20:59.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:20:59.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:20:59.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:20:59.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:20:59.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.764021 -999.00   +9.70   8.60     79   +6.30 1 1 1 1 1     0    0 2.95 -16.23 ZNESW 7.8 8.6 304.0 10.0 10.3 -24.7 10.2 -23.4 9.9 -21.3 10.2 -23.3
2026-04-15T20:20:59.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:20:59.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:20:59.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.764021
2026-04-15T20:20:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:20:59.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:20:59.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:20:59.738 [DEBUG] [Thread-25138] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:20:59.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:20:59.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:20:59.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:20:48', tmtdew=3.97829, humidity=76.1956, cloud=0.0, wind=8.92944, temperature=9.67605, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:20:48', seeing=1.03, atlas_timestamp='2026-04-15T18:20:11.414', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.0467499999999994, -0.03974999999999973, -0.03950000000000031, 0.014499999999999957, 0.0002500000000011937, -0.03200000000000003, 0.024250000000000327, 0.04349999999999987, 0.006000000000000227, -0.07174999999999976, -0.0235000000000003, 0.038000000000000256, 0.025249999999999773, 0.019999999999999574, -0.009000000000000341, 0.04925000000000068, 0.054499999999999105, 0.013999999999999346, 0.010249999999999204, 0.04849999999999888, -0.013750000000001705, -0.004749999999999588, 0.05375000000000085, 0.07199999999999918, 0.0015000000000000568, -0.005250000000000199, -0.03149999999999942, 0.022500000000000853, 0.0015000000000000568, 0.038000000000000256, 0.07500000000000107, 0.0782500000000006], zp_timestamp='2026-04-15T18:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:20:59.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:20:59.997 [DEBUG] [Thread-25141] [transport.py] [_log()] starting thread (client mode): 0xee9c3250
2026-04-15T20:20:59.997 [DEBUG] [Thread-25141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:21:00.011 [DEBUG] [Thread-25141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:21:00.011 [INFO] [Thread-25141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:21:00.018 [DEBUG] [Thread-25141] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:21:00.019 [DEBUG] [Thread-25141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:21:00.019 [DEBUG] [Thread-25141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:21:00.019 [DEBUG] [Thread-25141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:21:00.019 [DEBUG] [Thread-25141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:21:00.019 [DEBUG] [Thread-25141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:21:00.019 [DEBUG] [Thread-25141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:21:00.019 [DEBUG] [Thread-25141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:21:00.019 [DEBUG] [Thread-25141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:21:00.019 [DEBUG] [Thread-25141] [transport.py] [_log()] client lang: <none>
2026-04-15T20:21:00.019 [DEBUG] [Thread-25141] [transport.py] [_log()] server lang: <none>
2026-04-15T20:21:00.019 [DEBUG] [Thread-25141] [transport.py] [_log()] kex follows: False
2026-04-15T20:21:00.019 [DEBUG] [Thread-25141] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:21:00.020 [DEBUG] [Thread-25141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:21:00.020 [DEBUG] [Thread-25141] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:21:00.020 [DEBUG] [Thread-25141] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:21:00.020 [DEBUG] [Thread-25141] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:21:00.020 [DEBUG] [Thread-25141] [transport.py] [_log()] Compression: none
2026-04-15T20:21:00.020 [DEBUG] [Thread-25141] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:21:00.076 [DEBUG] [Thread-25141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:21:00.077 [DEBUG] [Thread-25141] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:21:00.077 [DEBUG] [Thread-25141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:21:00.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:21:00.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:21:00.133 [DEBUG] [Thread-25141] [transport.py] [_log()] userauth is OK
2026-04-15T20:21:00.134 [DEBUG] [Thread-25141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:21:00.134 [DEBUG] [Thread-25141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:21:00.134 [DEBUG] [Thread-25141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:21:00.134 [DEBUG] [Thread-25141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:21:00.161 [INFO] [Thread-25141] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:21:00.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:21:00.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:21:00.551 [DEBUG] [Thread-25143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:21:00.976 [DEBUG] [Thread-25141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:21:00.976 [DEBUG] [Thread-25141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:21:01.024 [DEBUG] [Thread-25141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:21:01.024 [DEBUG] [Thread-25141] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:21:01.034 [DEBUG] [Thread-25141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:21:01.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:21:01.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')
2026-04-15T20:21:01.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
2026-04-15T20:21:01.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:21:01.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:21:01.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:21:01.070 [DEBUG] [Thread-25141] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:21:06.800 [DEBUG] [Thread-25144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:21:15.604 [DEBUG] [Thread-25145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:21:30.636 [DEBUG] [Thread-25146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:21:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:21:31.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:21:31.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
2026-04-15T20:21:32.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 21, 24), 4.185, 75.1144, 0.0, 8.91144, 9.60485, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:21:32.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:21:24
2026-04-15T20:21:32.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:21:33.221 [DEBUG] [Thread-25147] [transport.py] [_log()] starting thread (client mode): 0xf13e3190
2026-04-15T20:21:33.221 [DEBUG] [Thread-25147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:21:33.241 [DEBUG] [Thread-25147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:21:33.241 [INFO] [Thread-25147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:21:33.244 [DEBUG] [Thread-25147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:21:33.244 [DEBUG] [Thread-25147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:21:33.244 [DEBUG] [Thread-25147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:21:33.244 [DEBUG] [Thread-25147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:21:33.244 [DEBUG] [Thread-25147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:21:33.244 [DEBUG] [Thread-25147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:21:33.244 [DEBUG] [Thread-25147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:21:33.245 [DEBUG] [Thread-25147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:21:33.245 [DEBUG] [Thread-25147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:21:33.245 [DEBUG] [Thread-25147] [transport.py] [_log()] client lang: <none>
2026-04-15T20:21:33.245 [DEBUG] [Thread-25147] [transport.py] [_log()] server lang: <none>
2026-04-15T20:21:33.245 [DEBUG] [Thread-25147] [transport.py] [_log()] kex follows: False
2026-04-15T20:21:33.245 [DEBUG] [Thread-25147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:21:33.245 [DEBUG] [Thread-25147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:21:33.245 [DEBUG] [Thread-25147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:21:33.245 [DEBUG] [Thread-25147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:21:33.245 [DEBUG] [Thread-25147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:21:33.245 [DEBUG] [Thread-25147] [transport.py] [_log()] Compression: none
2026-04-15T20:21:33.245 [DEBUG] [Thread-25147] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:21:33.266 [DEBUG] [Thread-25147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:21:33.267 [DEBUG] [Thread-25147] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:21:33.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:21:33.268 [DEBUG] [Thread-25147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:21:33.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:21:33.269 [DEBUG] [Thread-25147] [transport.py] [_log()] userauth is OK
2026-04-15T20:21:33.269 [DEBUG] [Thread-25147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:21:33.269 [DEBUG] [Thread-25147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:21:33.269 [DEBUG] [Thread-25147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:21:33.269 [DEBUG] [Thread-25147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:21:33.294 [INFO] [Thread-25147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:21:33.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:21:34.122 [DEBUG] [Thread-25147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:21:34.122 [DEBUG] [Thread-25147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:21:34.123 [DEBUG] [Thread-25147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:21:34.163 [DEBUG] [Thread-25147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:21:34.163 [DEBUG] [Thread-25147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:21:34.166 [DEBUG] [Thread-25147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:21:34.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:21:34.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:21:34.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:21:34.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:21:34.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:21:34.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:21:34.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:21:34.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:21:34.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:21:34.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.764368 -999.00   +9.70   8.32     79   +6.20 1 1 1 1 1     0    0 3.05 -15.42 ZNESW 7.7 8.3 308.0 9.8 10.4 -24.7 10.2 -23.4 9.9 -21.4 10.2 -23.4
2026-04-15T20:21:34.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:21:34.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:21:34.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.764368
2026-04-15T20:21:34.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:21:34.191 [DEBUG] [Thread-25147] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:21:34.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:21:34.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:21:34.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:21:34.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:21:34.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:21:24', tmtdew=4.185, humidity=75.1144, cloud=0.0, wind=8.91144, temperature=9.60485, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:21:24', seeing=0.99, atlas_timestamp='2026-04-15T18:20:41.395', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.0467499999999994, -0.03974999999999973, -0.03950000000000031, 0.014499999999999957, 0.0002500000000011937, -0.03200000000000003, 0.024250000000000327, 0.04349999999999987, 0.006000000000000227, -0.07174999999999976, -0.0235000000000003, 0.038000000000000256, 0.025249999999999773, 0.019999999999999574, -0.009000000000000341, 0.04925000000000068, 0.054499999999999105, 0.013999999999999346, 0.010249999999999204, 0.04849999999999888, -0.013750000000001705, -0.004749999999999588, 0.05375000000000085, 0.07199999999999918, 0.0015000000000000568, -0.005250000000000199, -0.03149999999999942, 0.022500000000000853, 0.0015000000000000568, 0.038000000000000256, 0.07500000000000107, 0.0782500000000006], zp_timestamp='2026-04-15T18:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:21:34.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:21:34.449 [DEBUG] [Thread-25150] [transport.py] [_log()] starting thread (client mode): 0xee9c3d30
2026-04-15T20:21:34.449 [DEBUG] [Thread-25150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:21:34.463 [DEBUG] [Thread-25150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:21:34.463 [INFO] [Thread-25150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:21:34.471 [DEBUG] [Thread-25150] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:21:34.471 [DEBUG] [Thread-25150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:21:34.471 [DEBUG] [Thread-25150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:21:34.471 [DEBUG] [Thread-25150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:21:34.471 [DEBUG] [Thread-25150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:21:34.471 [DEBUG] [Thread-25150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:21:34.471 [DEBUG] [Thread-25150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:21:34.471 [DEBUG] [Thread-25150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:21:34.471 [DEBUG] [Thread-25150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:21:34.471 [DEBUG] [Thread-25150] [transport.py] [_log()] client lang: <none>
2026-04-15T20:21:34.471 [DEBUG] [Thread-25150] [transport.py] [_log()] server lang: <none>
2026-04-15T20:21:34.471 [DEBUG] [Thread-25150] [transport.py] [_log()] kex follows: False
2026-04-15T20:21:34.472 [DEBUG] [Thread-25150] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:21:34.472 [DEBUG] [Thread-25150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:21:34.472 [DEBUG] [Thread-25150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:21:34.472 [DEBUG] [Thread-25150] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:21:34.472 [DEBUG] [Thread-25150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:21:34.472 [DEBUG] [Thread-25150] [transport.py] [_log()] Compression: none
2026-04-15T20:21:34.472 [DEBUG] [Thread-25150] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:21:34.527 [DEBUG] [Thread-25150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:21:34.527 [DEBUG] [Thread-25150] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:21:34.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:21:34.528 [DEBUG] [Thread-25150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:21:34.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:21:34.584 [DEBUG] [Thread-25150] [transport.py] [_log()] userauth is OK
2026-04-15T20:21:34.584 [DEBUG] [Thread-25150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:21:34.584 [DEBUG] [Thread-25150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:21:34.584 [DEBUG] [Thread-25150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:21:34.584 [DEBUG] [Thread-25150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:21:34.602 [INFO] [Thread-25150] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:21:34.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:21:34.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:21:35.113 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:21:35.114 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:21:35.411 [DEBUG] [Thread-25150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:21:35.411 [DEBUG] [Thread-25150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:21:35.459 [DEBUG] [Thread-25150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:21:35.459 [DEBUG] [Thread-25150] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:21:35.467 [DEBUG] [Thread-25150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:21:35.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:21:35.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')
2026-04-15T20:21:35.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') -> 00000000
2026-04-15T20:21:35.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:21:35.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:21:35.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:21:35.500 [DEBUG] [Thread-25150] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:21:45.666 [DEBUG] [Thread-25152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:22:00.711 [DEBUG] [Thread-25153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:22:05.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:22:05.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:22:05.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
2026-04-15T20:22:06.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 21, 24), 4.185, 75.1144, 0.0, 8.91144, 9.60485, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:22:06.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:21:24
2026-04-15T20:22:06.964 [DEBUG] [Thread-25154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:22:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:22:07.734 [DEBUG] [Thread-25155] [transport.py] [_log()] starting thread (client mode): 0xf1351420
2026-04-15T20:22:07.734 [DEBUG] [Thread-25155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:22:07.748 [DEBUG] [Thread-25155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:22:07.748 [INFO] [Thread-25155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:22:07.751 [DEBUG] [Thread-25155] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] client lang: <none>
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] server lang: <none>
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] kex follows: False
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] Compression: none
2026-04-15T20:22:07.752 [DEBUG] [Thread-25155] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:22:07.769 [DEBUG] [Thread-25155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:22:07.770 [DEBUG] [Thread-25155] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:22:07.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:22:07.770 [DEBUG] [Thread-25155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:22:07.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:22:07.771 [DEBUG] [Thread-25155] [transport.py] [_log()] userauth is OK
2026-04-15T20:22:07.771 [DEBUG] [Thread-25155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:22:07.771 [DEBUG] [Thread-25155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:22:07.771 [DEBUG] [Thread-25155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:22:07.771 [DEBUG] [Thread-25155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:22:07.790 [INFO] [Thread-25155] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:22:07.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:22:08.561 [DEBUG] [Thread-25155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:22:08.562 [DEBUG] [Thread-25155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:22:08.562 [DEBUG] [Thread-25155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:22:08.602 [DEBUG] [Thread-25155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:22:08.602 [DEBUG] [Thread-25155] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:22:08.605 [DEBUG] [Thread-25155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:22:08.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:22:08.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:22:08.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:22:08.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:22:08.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:22:08.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:22:08.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:22:08.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:22:08.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:22:08.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.764715 -999.00   +9.70   8.75     79   +6.30 1 1 1 1 1     0    0 3.02 -13.57 ZNESW 8.0 8.8 293.8 10.4 10.4 -24.6 10.2 -23.4 9.9 -21.2 10.2 -23.4
2026-04-15T20:22:08.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:22:08.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:22:08.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.764715
2026-04-15T20:22:08.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:22:08.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:22:08.634 [DEBUG] [Thread-25155] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:22:08.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:22:08.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:22:08.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:22:08.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:21:24', tmtdew=4.185, humidity=75.1144, cloud=0.0, wind=8.91144, temperature=9.60485, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:22:00', seeing=1.18, atlas_timestamp='2026-04-15T18:21:11.376', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.0467499999999994, -0.03974999999999973, -0.03950000000000031, 0.014499999999999957, 0.0002500000000011937, -0.03200000000000003, 0.024250000000000327, 0.04349999999999987, 0.006000000000000227, -0.07174999999999976, -0.0235000000000003, 0.038000000000000256, 0.025249999999999773, 0.019999999999999574, -0.009000000000000341, 0.04925000000000068, 0.054499999999999105, 0.013999999999999346, 0.010249999999999204, 0.04849999999999888, -0.013750000000001705, -0.004749999999999588, 0.05375000000000085, 0.07199999999999918, 0.0015000000000000568, -0.005250000000000199, -0.03149999999999942, 0.022500000000000853, 0.0015000000000000568, 0.038000000000000256, 0.07500000000000107, 0.0782500000000006], zp_timestamp='2026-04-15T18:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:22:08.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:22:08.903 [DEBUG] [Thread-25158] [transport.py] [_log()] starting thread (client mode): 0xee9c2ec0
2026-04-15T20:22:08.903 [DEBUG] [Thread-25158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:22:08.921 [DEBUG] [Thread-25158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:22:08.921 [INFO] [Thread-25158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:22:08.928 [DEBUG] [Thread-25158] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:22:08.928 [DEBUG] [Thread-25158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:22:08.928 [DEBUG] [Thread-25158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:22:08.928 [DEBUG] [Thread-25158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:22:08.928 [DEBUG] [Thread-25158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:22:08.929 [DEBUG] [Thread-25158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:22:08.929 [DEBUG] [Thread-25158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:22:08.929 [DEBUG] [Thread-25158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:22:08.929 [DEBUG] [Thread-25158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:22:08.929 [DEBUG] [Thread-25158] [transport.py] [_log()] client lang: <none>
2026-04-15T20:22:08.929 [DEBUG] [Thread-25158] [transport.py] [_log()] server lang: <none>
2026-04-15T20:22:08.929 [DEBUG] [Thread-25158] [transport.py] [_log()] kex follows: False
2026-04-15T20:22:08.929 [DEBUG] [Thread-25158] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:22:08.929 [DEBUG] [Thread-25158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:22:08.929 [DEBUG] [Thread-25158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:22:08.929 [DEBUG] [Thread-25158] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:22:08.930 [DEBUG] [Thread-25158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:22:08.930 [DEBUG] [Thread-25158] [transport.py] [_log()] Compression: none
2026-04-15T20:22:08.930 [DEBUG] [Thread-25158] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:22:08.991 [DEBUG] [Thread-25158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:22:08.991 [DEBUG] [Thread-25158] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:22:08.992 [DEBUG] [Thread-25158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:22:08.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:22:08.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:22:09.048 [DEBUG] [Thread-25158] [transport.py] [_log()] userauth is OK
2026-04-15T20:22:09.048 [DEBUG] [Thread-25158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:22:09.048 [DEBUG] [Thread-25158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:22:09.048 [DEBUG] [Thread-25158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:22:09.048 [DEBUG] [Thread-25158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:22:09.077 [INFO] [Thread-25158] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:22:09.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:22:09.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:22:10.019 [DEBUG] [Thread-25158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:22:10.019 [DEBUG] [Thread-25158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:22:10.068 [DEBUG] [Thread-25158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:22:10.068 [DEBUG] [Thread-25158] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:22:10.077 [DEBUG] [Thread-25158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:22:10.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:22:10.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')
2026-04-15T20:22:10.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
2026-04-15T20:22:10.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:22:10.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:22:10.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:22:10.116 [DEBUG] [Thread-25158] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:22:15.743 [DEBUG] [Thread-25160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:22:30.787 [DEBUG] [Thread-25161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:22:35.315 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:22:35.317 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:22:40.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:22:40.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:22:40.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
2026-04-15T20:22:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 21, 24), 4.185, 75.1144, 0.0, 8.91144, 9.60485, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:22:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:21:24
2026-04-15T20:22:41.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:22:42.294 [DEBUG] [Thread-25162] [transport.py] [_log()] starting thread (client mode): 0xf13e34c0
2026-04-15T20:22:42.294 [DEBUG] [Thread-25162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:22:42.311 [DEBUG] [Thread-25162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:22:42.311 [INFO] [Thread-25162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:22:42.314 [DEBUG] [Thread-25162] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:22:42.314 [DEBUG] [Thread-25162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:22:42.314 [DEBUG] [Thread-25162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:22:42.314 [DEBUG] [Thread-25162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:22:42.314 [DEBUG] [Thread-25162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:22:42.314 [DEBUG] [Thread-25162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:22:42.314 [DEBUG] [Thread-25162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:22:42.314 [DEBUG] [Thread-25162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:22:42.315 [DEBUG] [Thread-25162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:22:42.315 [DEBUG] [Thread-25162] [transport.py] [_log()] client lang: <none>
2026-04-15T20:22:42.315 [DEBUG] [Thread-25162] [transport.py] [_log()] server lang: <none>
2026-04-15T20:22:42.315 [DEBUG] [Thread-25162] [transport.py] [_log()] kex follows: False
2026-04-15T20:22:42.315 [DEBUG] [Thread-25162] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:22:42.315 [DEBUG] [Thread-25162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:22:42.315 [DEBUG] [Thread-25162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:22:42.315 [DEBUG] [Thread-25162] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:22:42.315 [DEBUG] [Thread-25162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:22:42.315 [DEBUG] [Thread-25162] [transport.py] [_log()] Compression: none
2026-04-15T20:22:42.315 [DEBUG] [Thread-25162] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:22:42.333 [DEBUG] [Thread-25162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:22:42.333 [DEBUG] [Thread-25162] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:22:42.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:22:42.334 [DEBUG] [Thread-25162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:22:42.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:22:42.335 [DEBUG] [Thread-25162] [transport.py] [_log()] userauth is OK
2026-04-15T20:22:42.335 [DEBUG] [Thread-25162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:22:42.335 [DEBUG] [Thread-25162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:22:42.335 [DEBUG] [Thread-25162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:22:42.335 [DEBUG] [Thread-25162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:22:42.360 [INFO] [Thread-25162] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:22:42.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:22:43.152 [DEBUG] [Thread-25162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:22:43.152 [DEBUG] [Thread-25162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:22:43.152 [DEBUG] [Thread-25162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:22:43.193 [DEBUG] [Thread-25162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:22:43.193 [DEBUG] [Thread-25162] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:22:43.195 [DEBUG] [Thread-25162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:22:43.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:22:43.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:22:43.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:22:43.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:22:43.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:22:43.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:22:43.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:22:43.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:22:43.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:22:43.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.765410 -999.00   +9.80   9.19     79   +6.30 1 1 1 1 1     0    0 3.12 -11.02 ZNESW 9.0 9.2 296.4 11.7 10.4 -24.7 10.3 -23.5 9.9 -21.3 10.2 -23.5
2026-04-15T20:22:43.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:22:43.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:22:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.765410
2026-04-15T20:22:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:22:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:22:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:22:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:22:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:22:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:21:24', tmtdew=4.185, humidity=75.1144, cloud=0.0, wind=8.91144, temperature=9.60485, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:22:35', seeing=1.24, atlas_timestamp='2026-04-15T18:22:11.424', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.0467499999999994, -0.03974999999999973, -0.03950000000000031, 0.014499999999999957, 0.0002500000000011937, -0.03200000000000003, 0.024250000000000327, 0.04349999999999987, 0.006000000000000227, -0.07174999999999976, -0.0235000000000003, 0.038000000000000256, 0.025249999999999773, 0.019999999999999574, -0.009000000000000341, 0.04925000000000068, 0.054499999999999105, 0.013999999999999346, 0.010249999999999204, 0.04849999999999888, -0.013750000000001705, -0.004749999999999588, 0.05375000000000085, 0.07199999999999918, 0.0015000000000000568, -0.005250000000000199, -0.03149999999999942, 0.022500000000000853, 0.0015000000000000568, 0.038000000000000256, 0.07500000000000107, 0.0782500000000006], zp_timestamp='2026-04-15T18:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:22:43.214 [DEBUG] [Thread-25162] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:22:43.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:22:43.456 [DEBUG] [Thread-25165] [transport.py] [_log()] starting thread (client mode): 0xf13e3a00
2026-04-15T20:22:43.456 [DEBUG] [Thread-25165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:22:43.472 [DEBUG] [Thread-25165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:22:43.472 [INFO] [Thread-25165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:22:43.479 [DEBUG] [Thread-25165] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:22:43.479 [DEBUG] [Thread-25165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:22:43.480 [DEBUG] [Thread-25165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:22:43.480 [DEBUG] [Thread-25165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:22:43.480 [DEBUG] [Thread-25165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:22:43.480 [DEBUG] [Thread-25165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:22:43.480 [DEBUG] [Thread-25165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:22:43.480 [DEBUG] [Thread-25165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:22:43.480 [DEBUG] [Thread-25165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:22:43.480 [DEBUG] [Thread-25165] [transport.py] [_log()] client lang: <none>
2026-04-15T20:22:43.480 [DEBUG] [Thread-25165] [transport.py] [_log()] server lang: <none>
2026-04-15T20:22:43.480 [DEBUG] [Thread-25165] [transport.py] [_log()] kex follows: False
2026-04-15T20:22:43.480 [DEBUG] [Thread-25165] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:22:43.480 [DEBUG] [Thread-25165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:22:43.480 [DEBUG] [Thread-25165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:22:43.481 [DEBUG] [Thread-25165] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:22:43.481 [DEBUG] [Thread-25165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:22:43.481 [DEBUG] [Thread-25165] [transport.py] [_log()] Compression: none
2026-04-15T20:22:43.481 [DEBUG] [Thread-25165] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:22:43.537 [DEBUG] [Thread-25165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:22:43.537 [DEBUG] [Thread-25165] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:22:43.538 [DEBUG] [Thread-25165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:22:43.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:22:43.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:22:43.601 [DEBUG] [Thread-25165] [transport.py] [_log()] userauth is OK
2026-04-15T20:22:43.601 [DEBUG] [Thread-25165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:22:43.602 [DEBUG] [Thread-25165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:22:43.602 [DEBUG] [Thread-25165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:22:43.602 [DEBUG] [Thread-25165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:22:43.625 [INFO] [Thread-25165] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:22:43.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:22:43.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:22:44.468 [DEBUG] [Thread-25165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:22:44.468 [DEBUG] [Thread-25165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:22:44.516 [DEBUG] [Thread-25165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:22:44.516 [DEBUG] [Thread-25165] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:22:44.525 [DEBUG] [Thread-25165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:22:44.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:22:44.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')
2026-04-15T20:22:44.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
2026-04-15T20:22:44.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:22:44.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:22:44.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:22:44.560 [DEBUG] [Thread-25165] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:22:45.817 [DEBUG] [Thread-25167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:23:00.855 [DEBUG] [Thread-25168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:23:07.110 [DEBUG] [Thread-25169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:23:14.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:23:14.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:23:14.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
2026-04-15T20:23:15.892 [DEBUG] [Thread-25170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:23:15.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 22, 35), 3.96048, 76.295, 0.0, 9.77616, 9.70916, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:23:15.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:22:35
2026-04-15T20:23:16.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:23:16.835 [DEBUG] [Thread-25171] [transport.py] [_log()] starting thread (client mode): 0xf13e1ed0
2026-04-15T20:23:16.836 [DEBUG] [Thread-25171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:23:16.858 [DEBUG] [Thread-25171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:23:16.858 [INFO] [Thread-25171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:23:16.862 [DEBUG] [Thread-25171] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:23:16.862 [DEBUG] [Thread-25171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:23:16.862 [DEBUG] [Thread-25171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:23:16.862 [DEBUG] [Thread-25171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:23:16.862 [DEBUG] [Thread-25171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:23:16.862 [DEBUG] [Thread-25171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:23:16.862 [DEBUG] [Thread-25171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:23:16.862 [DEBUG] [Thread-25171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:23:16.862 [DEBUG] [Thread-25171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:23:16.862 [DEBUG] [Thread-25171] [transport.py] [_log()] client lang: <none>
2026-04-15T20:23:16.862 [DEBUG] [Thread-25171] [transport.py] [_log()] server lang: <none>
2026-04-15T20:23:16.862 [DEBUG] [Thread-25171] [transport.py] [_log()] kex follows: False
2026-04-15T20:23:16.863 [DEBUG] [Thread-25171] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:23:16.863 [DEBUG] [Thread-25171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:23:16.863 [DEBUG] [Thread-25171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:23:16.863 [DEBUG] [Thread-25171] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:23:16.863 [DEBUG] [Thread-25171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:23:16.863 [DEBUG] [Thread-25171] [transport.py] [_log()] Compression: none
2026-04-15T20:23:16.863 [DEBUG] [Thread-25171] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:23:16.879 [DEBUG] [Thread-25171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:23:16.879 [DEBUG] [Thread-25171] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:23:16.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:23:16.880 [DEBUG] [Thread-25171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:23:16.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:23:16.881 [DEBUG] [Thread-25171] [transport.py] [_log()] userauth is OK
2026-04-15T20:23:16.881 [DEBUG] [Thread-25171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:23:16.881 [DEBUG] [Thread-25171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:23:16.881 [DEBUG] [Thread-25171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:23:16.881 [DEBUG] [Thread-25171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:23:16.903 [INFO] [Thread-25171] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:23:16.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:23:17.729 [DEBUG] [Thread-25171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:23:17.729 [DEBUG] [Thread-25171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:23:17.730 [DEBUG] [Thread-25171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:23:17.770 [DEBUG] [Thread-25171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:23:17.770 [DEBUG] [Thread-25171] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:23:17.773 [DEBUG] [Thread-25171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:23:17.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:23:17.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:23:17.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:23:17.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:23:17.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:23:17.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:23:17.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:23:17.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:23:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:23:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.765757 -999.00   +9.80   8.88     78   +6.30 1 1 1 1 1     0    0 3.16 -10.29 ZNESW 9.0 8.9 302.2 10.7 10.3 -24.7 10.3 -23.4 9.9 -21.3 10.2 -23.5
2026-04-15T20:23:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:23:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:23:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.765757
2026-04-15T20:23:17.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:23:17.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:23:17.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:23:17.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:23:17.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:23:17.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:22:35', tmtdew=3.96048, humidity=76.295, cloud=0.0, wind=9.77616, temperature=9.70916, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:23:11', seeing=1.34, atlas_timestamp='2026-04-15T18:22:41.405', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0652500000000007, -0.03074999999999939, -0.042749999999999844, -0.07450000000000045, -0.027499999999999858, -0.02624999999999922, -0.0389999999999997, 0.0032500000000013074, 0.020500000000000185, -0.01950000000000074, -0.06625000000000014, -0.041999999999999815, 0.026999999999999247, -0.003750000000000142, -0.012000000000000455, 0.0045000000000001705, -0.009249999999999758, -0.011499999999999844, -0.004500000000001947, -0.0012500000000024158, 0.0009999999999976694, 0.010749999999998039, -0.03974999999999973, 0.024250000000000327, 0.05049999999999777, -0.02149999999999963, 0.0017500000000012506, -0.050499999999999545, -0.010999999999999233, -0.02149999999999963, 0.051000000000000156, 0.050499999999999545, -0.012250000000001648], zp_timestamp='2026-04-15T18:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:23:17.798 [DEBUG] [Thread-25171] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:23:18.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:23:18.060 [DEBUG] [Thread-25174] [transport.py] [_log()] starting thread (client mode): 0xf13378e0
2026-04-15T20:23:18.061 [DEBUG] [Thread-25174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:23:18.075 [DEBUG] [Thread-25174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:23:18.075 [INFO] [Thread-25174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:23:18.082 [DEBUG] [Thread-25174] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:23:18.082 [DEBUG] [Thread-25174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:23:18.083 [DEBUG] [Thread-25174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:23:18.083 [DEBUG] [Thread-25174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:23:18.083 [DEBUG] [Thread-25174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:23:18.083 [DEBUG] [Thread-25174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:23:18.083 [DEBUG] [Thread-25174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:23:18.083 [DEBUG] [Thread-25174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:23:18.083 [DEBUG] [Thread-25174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:23:18.083 [DEBUG] [Thread-25174] [transport.py] [_log()] client lang: <none>
2026-04-15T20:23:18.083 [DEBUG] [Thread-25174] [transport.py] [_log()] server lang: <none>
2026-04-15T20:23:18.083 [DEBUG] [Thread-25174] [transport.py] [_log()] kex follows: False
2026-04-15T20:23:18.083 [DEBUG] [Thread-25174] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:23:18.083 [DEBUG] [Thread-25174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:23:18.084 [DEBUG] [Thread-25174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:23:18.084 [DEBUG] [Thread-25174] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:23:18.084 [DEBUG] [Thread-25174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:23:18.084 [DEBUG] [Thread-25174] [transport.py] [_log()] Compression: none
2026-04-15T20:23:18.084 [DEBUG] [Thread-25174] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:23:18.139 [DEBUG] [Thread-25174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:23:18.140 [DEBUG] [Thread-25174] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:23:18.140 [DEBUG] [Thread-25174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:23:18.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:23:18.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:23:18.196 [DEBUG] [Thread-25174] [transport.py] [_log()] userauth is OK
2026-04-15T20:23:18.196 [DEBUG] [Thread-25174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:23:18.197 [DEBUG] [Thread-25174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:23:18.197 [DEBUG] [Thread-25174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:23:18.197 [DEBUG] [Thread-25174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:23:18.221 [INFO] [Thread-25174] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:23:18.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:23:18.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:23:19.016 [DEBUG] [Thread-25174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:23:19.016 [DEBUG] [Thread-25174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:23:19.064 [DEBUG] [Thread-25174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:23:19.064 [DEBUG] [Thread-25174] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:23:19.072 [DEBUG] [Thread-25174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:23:19.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:23:19.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')
2026-04-15T20:23:19.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') -> 00000000
2026-04-15T20:23:19.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:23:19.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:23:19.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:23:19.104 [DEBUG] [Thread-25174] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:23:30.924 [DEBUG] [Thread-25176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:23:35.520 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:23:35.521 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:23:45.970 [DEBUG] [Thread-25177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:23:49.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:23:49.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:23:49.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
2026-04-15T20:23:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 23, 10), 4.13069, 75.1478, 0.0, 8.50572, 9.62138, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:23:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:23:10
2026-04-15T20:23:50.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:23:51.294 [DEBUG] [Thread-25178] [transport.py] [_log()] starting thread (client mode): 0xf13e3730
2026-04-15T20:23:51.295 [DEBUG] [Thread-25178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:23:51.309 [DEBUG] [Thread-25178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:23:51.310 [INFO] [Thread-25178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:23:51.313 [DEBUG] [Thread-25178] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:23:51.313 [DEBUG] [Thread-25178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:23:51.313 [DEBUG] [Thread-25178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:23:51.313 [DEBUG] [Thread-25178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:23:51.313 [DEBUG] [Thread-25178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:23:51.313 [DEBUG] [Thread-25178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:23:51.313 [DEBUG] [Thread-25178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:23:51.314 [DEBUG] [Thread-25178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:23:51.314 [DEBUG] [Thread-25178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:23:51.314 [DEBUG] [Thread-25178] [transport.py] [_log()] client lang: <none>
2026-04-15T20:23:51.314 [DEBUG] [Thread-25178] [transport.py] [_log()] server lang: <none>
2026-04-15T20:23:51.314 [DEBUG] [Thread-25178] [transport.py] [_log()] kex follows: False
2026-04-15T20:23:51.314 [DEBUG] [Thread-25178] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:23:51.314 [DEBUG] [Thread-25178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:23:51.314 [DEBUG] [Thread-25178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:23:51.314 [DEBUG] [Thread-25178] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:23:51.314 [DEBUG] [Thread-25178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:23:51.314 [DEBUG] [Thread-25178] [transport.py] [_log()] Compression: none
2026-04-15T20:23:51.314 [DEBUG] [Thread-25178] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:23:51.334 [DEBUG] [Thread-25178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:23:51.334 [DEBUG] [Thread-25178] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:23:51.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:23:51.335 [DEBUG] [Thread-25178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:23:51.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:23:51.336 [DEBUG] [Thread-25178] [transport.py] [_log()] userauth is OK
2026-04-15T20:23:51.336 [DEBUG] [Thread-25178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:23:51.336 [DEBUG] [Thread-25178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:23:51.336 [DEBUG] [Thread-25178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:23:51.336 [DEBUG] [Thread-25178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:23:51.359 [INFO] [Thread-25178] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:23:51.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:23:52.149 [DEBUG] [Thread-25178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:23:52.149 [DEBUG] [Thread-25178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:23:52.149 [DEBUG] [Thread-25178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:23:52.190 [DEBUG] [Thread-25178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:23:52.190 [DEBUG] [Thread-25178] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:23:52.192 [DEBUG] [Thread-25178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:23:52.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:23:52.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:23:52.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:23:52.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:23:52.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:23:52.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:23:52.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:23:52.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:23:52.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:23:52.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.766104 -999.00   +9.80   8.63     79   +6.30 1 1 1 1 1     0    0 3.06 -9.20 ZNESW 8.4 8.6 305.2 9.6 10.4 -24.6 10.2 -23.4 9.9 -21.5 10.2 -23.3
2026-04-15T20:23:52.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:23:52.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:23:52.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.766104
2026-04-15T20:23:52.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:23:52.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:23:52.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:23:52.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:23:52.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:23:52.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:23:10', tmtdew=4.13069, humidity=75.1478, cloud=0.0, wind=8.50572, temperature=9.62138, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:23:46', seeing=1.04, atlas_timestamp='2026-04-15T18:23:11.386', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0652500000000007, -0.03074999999999939, -0.042749999999999844, -0.07450000000000045, -0.027499999999999858, -0.02624999999999922, -0.0389999999999997, 0.0032500000000013074, 0.020500000000000185, -0.01950000000000074, -0.06625000000000014, -0.041999999999999815, 0.026999999999999247, -0.003750000000000142, -0.012000000000000455, 0.0045000000000001705, -0.009249999999999758, -0.011499999999999844, -0.004500000000001947, -0.0012500000000024158, 0.0009999999999976694, 0.010749999999998039, -0.03974999999999973, 0.024250000000000327, 0.05049999999999777, -0.02149999999999963, 0.0017500000000012506, -0.050499999999999545, -0.010999999999999233, -0.02149999999999963, 0.051000000000000156, 0.050499999999999545, -0.012250000000001648], zp_timestamp='2026-04-15T18:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:23:52.211 [DEBUG] [Thread-25178] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:23:52.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:23:52.422 [DEBUG] [Thread-25181] [transport.py] [_log()] starting thread (client mode): 0xf13359c0
2026-04-15T20:23:52.422 [DEBUG] [Thread-25181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:23:52.437 [DEBUG] [Thread-25181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:23:52.437 [INFO] [Thread-25181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:23:52.444 [DEBUG] [Thread-25181] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:23:52.444 [DEBUG] [Thread-25181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:23:52.444 [DEBUG] [Thread-25181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:23:52.444 [DEBUG] [Thread-25181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:23:52.444 [DEBUG] [Thread-25181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:23:52.444 [DEBUG] [Thread-25181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:23:52.445 [DEBUG] [Thread-25181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:23:52.445 [DEBUG] [Thread-25181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:23:52.445 [DEBUG] [Thread-25181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:23:52.445 [DEBUG] [Thread-25181] [transport.py] [_log()] client lang: <none>
2026-04-15T20:23:52.445 [DEBUG] [Thread-25181] [transport.py] [_log()] server lang: <none>
2026-04-15T20:23:52.445 [DEBUG] [Thread-25181] [transport.py] [_log()] kex follows: False
2026-04-15T20:23:52.445 [DEBUG] [Thread-25181] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:23:52.445 [DEBUG] [Thread-25181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:23:52.445 [DEBUG] [Thread-25181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:23:52.445 [DEBUG] [Thread-25181] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:23:52.445 [DEBUG] [Thread-25181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:23:52.445 [DEBUG] [Thread-25181] [transport.py] [_log()] Compression: none
2026-04-15T20:23:52.446 [DEBUG] [Thread-25181] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:23:52.503 [DEBUG] [Thread-25181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:23:52.503 [DEBUG] [Thread-25181] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:23:52.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:23:52.504 [DEBUG] [Thread-25181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:23:52.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:23:52.560 [DEBUG] [Thread-25181] [transport.py] [_log()] userauth is OK
2026-04-15T20:23:52.560 [DEBUG] [Thread-25181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:23:52.560 [DEBUG] [Thread-25181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:23:52.560 [DEBUG] [Thread-25181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:23:52.561 [DEBUG] [Thread-25181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:23:52.588 [INFO] [Thread-25181] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:23:52.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:23:52.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:23:53.441 [DEBUG] [Thread-25181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:23:53.441 [DEBUG] [Thread-25181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:23:53.489 [DEBUG] [Thread-25181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:23:53.489 [DEBUG] [Thread-25181] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:23:53.498 [DEBUG] [Thread-25181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:23:53.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:23:53.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')
2026-04-15T20:23:53.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
2026-04-15T20:23:53.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:23:53.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:23:53.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:23:53.530 [DEBUG] [Thread-25181] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:24:01.001 [DEBUG] [Thread-25183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:24:07.258 [DEBUG] [Thread-25184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:24:16.049 [DEBUG] [Thread-25185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:24:23.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:24:23.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:24:23.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
2026-04-15T20:24:24.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 23, 46), 3.99809, 76.0966, 0.0, 9.91728, 9.7096, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:24:24.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:23:46
2026-04-15T20:24:25.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:24:25.730 [DEBUG] [Thread-25186] [transport.py] [_log()] starting thread (client mode): 0xf1367100
2026-04-15T20:24:25.730 [DEBUG] [Thread-25186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:24:25.750 [DEBUG] [Thread-25186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:24:25.750 [INFO] [Thread-25186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:24:25.753 [DEBUG] [Thread-25186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:24:25.753 [DEBUG] [Thread-25186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:24:25.753 [DEBUG] [Thread-25186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:24:25.753 [DEBUG] [Thread-25186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:24:25.753 [DEBUG] [Thread-25186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:24:25.754 [DEBUG] [Thread-25186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:24:25.754 [DEBUG] [Thread-25186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:24:25.754 [DEBUG] [Thread-25186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:24:25.754 [DEBUG] [Thread-25186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:24:25.754 [DEBUG] [Thread-25186] [transport.py] [_log()] client lang: <none>
2026-04-15T20:24:25.754 [DEBUG] [Thread-25186] [transport.py] [_log()] server lang: <none>
2026-04-15T20:24:25.754 [DEBUG] [Thread-25186] [transport.py] [_log()] kex follows: False
2026-04-15T20:24:25.754 [DEBUG] [Thread-25186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:24:25.754 [DEBUG] [Thread-25186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:24:25.754 [DEBUG] [Thread-25186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:24:25.754 [DEBUG] [Thread-25186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:24:25.754 [DEBUG] [Thread-25186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:24:25.755 [DEBUG] [Thread-25186] [transport.py] [_log()] Compression: none
2026-04-15T20:24:25.755 [DEBUG] [Thread-25186] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:24:25.771 [DEBUG] [Thread-25186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:24:25.772 [DEBUG] [Thread-25186] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:24:25.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:24:25.772 [DEBUG] [Thread-25186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:24:25.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:24:25.774 [DEBUG] [Thread-25186] [transport.py] [_log()] userauth is OK
2026-04-15T20:24:25.774 [DEBUG] [Thread-25186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:24:25.774 [DEBUG] [Thread-25186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:24:25.774 [DEBUG] [Thread-25186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:24:25.774 [DEBUG] [Thread-25186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:24:25.792 [INFO] [Thread-25186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:24:25.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:24:26.617 [DEBUG] [Thread-25186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:24:26.617 [DEBUG] [Thread-25186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:24:26.617 [DEBUG] [Thread-25186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:24:26.658 [DEBUG] [Thread-25186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:24:26.658 [DEBUG] [Thread-25186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:24:26.661 [DEBUG] [Thread-25186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:24:26.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:24:26.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:24:26.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:24:26.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:24:26.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:24:26.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:24:26.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:24:26.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:24:26.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:24:26.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.766451 -999.00   +9.70   8.45     79   +6.30 1 1 1 1 1     0    0 3.17 -8.07 ZNESW 7.6 8.4 301.4 10.0 10.3 -24.6 10.3 -23.4 9.9 -21.4 10.2 -23.2
2026-04-15T20:24:26.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:24:26.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:24:26.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.766451
2026-04-15T20:24:26.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:24:26.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:24:26.687 [DEBUG] [Thread-25186] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:24:26.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:24:26.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:24:26.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:24:26.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:23:46', tmtdew=3.99809, humidity=76.0966, cloud=0.0, wind=9.91728, temperature=9.7096, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:24:22', seeing=1.07, atlas_timestamp='2026-04-15T18:23:41.366', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0652500000000007, -0.03074999999999939, -0.042749999999999844, -0.07450000000000045, -0.027499999999999858, -0.02624999999999922, -0.0389999999999997, 0.0032500000000013074, 0.020500000000000185, -0.01950000000000074, -0.06625000000000014, -0.041999999999999815, 0.026999999999999247, -0.003750000000000142, -0.012000000000000455, 0.0045000000000001705, -0.009249999999999758, -0.011499999999999844, -0.004500000000001947, -0.0012500000000024158, 0.0009999999999976694, 0.010749999999998039, -0.03974999999999973, 0.024250000000000327, 0.05049999999999777, -0.02149999999999963, 0.0017500000000012506, -0.050499999999999545, -0.010999999999999233, -0.02149999999999963, 0.051000000000000156, 0.050499999999999545, -0.012250000000001648], zp_timestamp='2026-04-15T18:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:24:26.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:24:26.933 [DEBUG] [Thread-25189] [transport.py] [_log()] starting thread (client mode): 0xf13ca230
2026-04-15T20:24:26.934 [DEBUG] [Thread-25189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:24:26.951 [DEBUG] [Thread-25189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:24:26.951 [INFO] [Thread-25189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:24:26.959 [DEBUG] [Thread-25189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:24:26.959 [DEBUG] [Thread-25189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:24:26.959 [DEBUG] [Thread-25189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:24:26.959 [DEBUG] [Thread-25189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:24:26.959 [DEBUG] [Thread-25189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:24:26.959 [DEBUG] [Thread-25189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:24:26.960 [DEBUG] [Thread-25189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:24:26.960 [DEBUG] [Thread-25189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:24:26.960 [DEBUG] [Thread-25189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:24:26.960 [DEBUG] [Thread-25189] [transport.py] [_log()] client lang: <none>
2026-04-15T20:24:26.960 [DEBUG] [Thread-25189] [transport.py] [_log()] server lang: <none>
2026-04-15T20:24:26.960 [DEBUG] [Thread-25189] [transport.py] [_log()] kex follows: False
2026-04-15T20:24:26.960 [DEBUG] [Thread-25189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:24:26.960 [DEBUG] [Thread-25189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:24:26.960 [DEBUG] [Thread-25189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:24:26.960 [DEBUG] [Thread-25189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:24:26.960 [DEBUG] [Thread-25189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:24:26.961 [DEBUG] [Thread-25189] [transport.py] [_log()] Compression: none
2026-04-15T20:24:26.961 [DEBUG] [Thread-25189] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:24:27.018 [DEBUG] [Thread-25189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:24:27.018 [DEBUG] [Thread-25189] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:24:27.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:24:27.019 [DEBUG] [Thread-25189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:24:27.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:24:27.074 [DEBUG] [Thread-25189] [transport.py] [_log()] userauth is OK
2026-04-15T20:24:27.075 [DEBUG] [Thread-25189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:24:27.075 [DEBUG] [Thread-25189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:24:27.075 [DEBUG] [Thread-25189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:24:27.075 [DEBUG] [Thread-25189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:24:27.105 [INFO] [Thread-25189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:24:27.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:24:27.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:24:27.952 [DEBUG] [Thread-25189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:24:27.952 [DEBUG] [Thread-25189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:24:28.000 [DEBUG] [Thread-25189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:24:28.000 [DEBUG] [Thread-25189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:24:28.009 [DEBUG] [Thread-25189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:24:28.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:24:28.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')
2026-04-15T20:24: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') -> 00000000
2026-04-15T20:24:28.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:24:28.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:24:28.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:24:28.043 [DEBUG] [Thread-25189] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:24:31.081 [DEBUG] [Thread-25191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:24:35.724 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:24:35.725 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:24:46.123 [DEBUG] [Thread-25192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:24:58.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:24:58.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:24:58.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
2026-04-15T20:24:59.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 24, 22), 4.14952, 75.5485, 0.0, 10.094, 9.67157, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:24:59.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:24:22
2026-04-15T20:24:59.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:25:00.319 [DEBUG] [Thread-25193] [transport.py] [_log()] starting thread (client mode): 0xf13cbd60
2026-04-15T20:25:00.319 [DEBUG] [Thread-25193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:25:00.339 [DEBUG] [Thread-25193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:25:00.339 [INFO] [Thread-25193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:25:00.342 [DEBUG] [Thread-25193] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:25:00.342 [DEBUG] [Thread-25193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:25:00.342 [DEBUG] [Thread-25193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:25:00.342 [DEBUG] [Thread-25193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:25:00.342 [DEBUG] [Thread-25193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:25:00.342 [DEBUG] [Thread-25193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:25:00.342 [DEBUG] [Thread-25193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:25:00.343 [DEBUG] [Thread-25193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:25:00.343 [DEBUG] [Thread-25193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:25:00.343 [DEBUG] [Thread-25193] [transport.py] [_log()] client lang: <none>
2026-04-15T20:25:00.343 [DEBUG] [Thread-25193] [transport.py] [_log()] server lang: <none>
2026-04-15T20:25:00.343 [DEBUG] [Thread-25193] [transport.py] [_log()] kex follows: False
2026-04-15T20:25:00.343 [DEBUG] [Thread-25193] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:25:00.343 [DEBUG] [Thread-25193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:25:00.343 [DEBUG] [Thread-25193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:25:00.343 [DEBUG] [Thread-25193] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:25:00.343 [DEBUG] [Thread-25193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:25:00.343 [DEBUG] [Thread-25193] [transport.py] [_log()] Compression: none
2026-04-15T20:25:00.343 [DEBUG] [Thread-25193] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:25:00.360 [DEBUG] [Thread-25193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:25:00.360 [DEBUG] [Thread-25193] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:25:00.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:25:00.361 [DEBUG] [Thread-25193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:25:00.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:25:00.404 [DEBUG] [Thread-25193] [transport.py] [_log()] userauth is OK
2026-04-15T20:25:00.404 [DEBUG] [Thread-25193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:25:00.404 [DEBUG] [Thread-25193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:25:00.404 [DEBUG] [Thread-25193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:25:00.405 [DEBUG] [Thread-25193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:25:00.440 [INFO] [Thread-25193] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:25:00.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:25:01.152 [DEBUG] [Thread-25195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:25:01.300 [DEBUG] [Thread-25193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:25:01.301 [DEBUG] [Thread-25193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:25:01.302 [DEBUG] [Thread-25193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:25:01.343 [DEBUG] [Thread-25193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:25:01.343 [DEBUG] [Thread-25193] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:25:01.345 [DEBUG] [Thread-25193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:25:01.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:25:01.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:25:01.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:25:01.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:25:01.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:25:01.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:25:01.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:25:01.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:25:01.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:25:01.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.766799 -999.00   +9.70   9.35     79   +6.30 1 1 1 1 1     0    0 3.23 -6.82 ZNESW 8.0 9.3 298.2 9.7 10.4 -24.7 10.2 -23.4 9.9 -21.3 10.2 -23.3
2026-04-15T20:25:01.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:25:01.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:25:01.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.766799
2026-04-15T20:25:01.357 [DEBUG] [Thread-25193] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:25:01.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:25:01.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:25:01.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:25:01.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:25:01.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:25:01.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:24:22', tmtdew=4.14952, humidity=75.5485, cloud=0.0, wind=10.094, temperature=9.67157, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:24:22', seeing=1.07, atlas_timestamp='2026-04-15T18:24:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0652500000000007, -0.03074999999999939, -0.042749999999999844, -0.07450000000000045, -0.027499999999999858, -0.02624999999999922, -0.0389999999999997, 0.0032500000000013074, 0.020500000000000185, -0.01950000000000074, -0.06625000000000014, -0.041999999999999815, 0.026999999999999247, -0.003750000000000142, -0.012000000000000455, 0.0045000000000001705, -0.009249999999999758, -0.011499999999999844, -0.004500000000001947, -0.0012500000000024158, 0.0009999999999976694, 0.010749999999998039, -0.03974999999999973, 0.024250000000000327, 0.05049999999999777, -0.02149999999999963, 0.0017500000000012506, -0.050499999999999545, -0.010999999999999233, -0.02149999999999963, 0.051000000000000156, 0.050499999999999545, -0.012250000000001648], zp_timestamp='2026-04-15T18:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:25:01.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:25:01.581 [DEBUG] [Thread-25197] [transport.py] [_log()] starting thread (client mode): 0xee9c3670
2026-04-15T20:25:01.581 [DEBUG] [Thread-25197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:25:01.600 [DEBUG] [Thread-25197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:25:01.600 [INFO] [Thread-25197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:25:01.607 [DEBUG] [Thread-25197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:25:01.607 [DEBUG] [Thread-25197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:25:01.607 [DEBUG] [Thread-25197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:25:01.607 [DEBUG] [Thread-25197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:25:01.608 [DEBUG] [Thread-25197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:25:01.608 [DEBUG] [Thread-25197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:25:01.608 [DEBUG] [Thread-25197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:25:01.608 [DEBUG] [Thread-25197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:25:01.608 [DEBUG] [Thread-25197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:25:01.608 [DEBUG] [Thread-25197] [transport.py] [_log()] client lang: <none>
2026-04-15T20:25:01.608 [DEBUG] [Thread-25197] [transport.py] [_log()] server lang: <none>
2026-04-15T20:25:01.608 [DEBUG] [Thread-25197] [transport.py] [_log()] kex follows: False
2026-04-15T20:25:01.608 [DEBUG] [Thread-25197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:25:01.608 [DEBUG] [Thread-25197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:25:01.608 [DEBUG] [Thread-25197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:25:01.608 [DEBUG] [Thread-25197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:25:01.609 [DEBUG] [Thread-25197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:25:01.609 [DEBUG] [Thread-25197] [transport.py] [_log()] Compression: none
2026-04-15T20:25:01.609 [DEBUG] [Thread-25197] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:25:01.665 [DEBUG] [Thread-25197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:25:01.665 [DEBUG] [Thread-25197] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:25:01.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:25:01.666 [DEBUG] [Thread-25197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:25:01.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:25:01.722 [DEBUG] [Thread-25197] [transport.py] [_log()] userauth is OK
2026-04-15T20:25:01.722 [DEBUG] [Thread-25197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:25:01.722 [DEBUG] [Thread-25197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:25:01.722 [DEBUG] [Thread-25197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:25:01.723 [DEBUG] [Thread-25197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:25:01.749 [INFO] [Thread-25197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:25:01.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:25:01.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:25:02.606 [DEBUG] [Thread-25197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:25:02.607 [DEBUG] [Thread-25197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:25:02.654 [DEBUG] [Thread-25197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:25:02.654 [DEBUG] [Thread-25197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:25:02.663 [DEBUG] [Thread-25197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:25:02.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:25:02.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')
2026-04-15T20:25:02.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
2026-04-15T20:25:02.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:25:02.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:25:02.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:25:02.702 [DEBUG] [Thread-25197] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:25:07.422 [DEBUG] [Thread-25199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:25:16.184 [DEBUG] [Thread-25200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:25:31.228 [DEBUG] [Thread-25201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:25:32.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:25:32.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:25:32.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
2026-04-15T20:25:34.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 24, 58), 4.13694, 75.1149, 0.0, 8.68212, 9.67157, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:25:34.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:24:58
2026-04-15T20:25:34.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:25:34.879 [DEBUG] [Thread-25202] [transport.py] [_log()] starting thread (client mode): 0xee9c01c0
2026-04-15T20:25:34.879 [DEBUG] [Thread-25202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:25:34.899 [DEBUG] [Thread-25202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:25:34.899 [INFO] [Thread-25202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:25:34.902 [DEBUG] [Thread-25202] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:25:34.902 [DEBUG] [Thread-25202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:25:34.902 [DEBUG] [Thread-25202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:25:34.902 [DEBUG] [Thread-25202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:25:34.902 [DEBUG] [Thread-25202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:25:34.902 [DEBUG] [Thread-25202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:25:34.902 [DEBUG] [Thread-25202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:25:34.903 [DEBUG] [Thread-25202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:25:34.903 [DEBUG] [Thread-25202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:25:34.903 [DEBUG] [Thread-25202] [transport.py] [_log()] client lang: <none>
2026-04-15T20:25:34.903 [DEBUG] [Thread-25202] [transport.py] [_log()] server lang: <none>
2026-04-15T20:25:34.903 [DEBUG] [Thread-25202] [transport.py] [_log()] kex follows: False
2026-04-15T20:25:34.903 [DEBUG] [Thread-25202] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:25:34.903 [DEBUG] [Thread-25202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:25:34.903 [DEBUG] [Thread-25202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:25:34.903 [DEBUG] [Thread-25202] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:25:34.903 [DEBUG] [Thread-25202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:25:34.903 [DEBUG] [Thread-25202] [transport.py] [_log()] Compression: none
2026-04-15T20:25:34.903 [DEBUG] [Thread-25202] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:25:34.919 [DEBUG] [Thread-25202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:25:34.919 [DEBUG] [Thread-25202] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:25:34.919 [DEBUG] [Thread-25202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:25:34.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:25:34.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:25:34.960 [DEBUG] [Thread-25202] [transport.py] [_log()] userauth is OK
2026-04-15T20:25:34.960 [DEBUG] [Thread-25202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:25:34.960 [DEBUG] [Thread-25202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:25:34.960 [DEBUG] [Thread-25202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:25:34.960 [DEBUG] [Thread-25202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:25:34.979 [INFO] [Thread-25202] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:25:34.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:25:35.927 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:25:35.928 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:25:36.825 [DEBUG] [Thread-25202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:25:36.825 [DEBUG] [Thread-25202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:25:36.826 [DEBUG] [Thread-25202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:25:36.866 [DEBUG] [Thread-25202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:25:36.866 [DEBUG] [Thread-25202] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:25:36.869 [DEBUG] [Thread-25202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:25:36.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:25:36.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:25:36.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:25:36.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:25:36.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:25:36.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:25:36.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:25:36.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:25:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:25:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.767146 -999.00   +9.70   6.67     79   +6.30 1 1 1 1 1     0    0 3.25 -6.42 ZNESW 8.0 6.7 311.4 12.1 10.3 -24.6 10.2 -23.3 9.9 -21.4 10.2 -23.4
2026-04-15T20:25:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:25:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:25:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.767146
2026-04-15T20:25:36.893 [DEBUG] [Thread-25202] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:25:36.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:25:36.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:25:36.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:25:36.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:25:36.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:25:36.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:24:58', tmtdew=4.13694, humidity=75.1149, cloud=0.0, wind=8.68212, temperature=9.67157, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:24:58', seeing=0.98, atlas_timestamp='2026-04-15T18:24:41.414', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0652500000000007, -0.03074999999999939, -0.042749999999999844, -0.07450000000000045, -0.027499999999999858, -0.02624999999999922, -0.0389999999999997, 0.0032500000000013074, 0.020500000000000185, -0.01950000000000074, -0.06625000000000014, -0.041999999999999815, 0.026999999999999247, -0.003750000000000142, -0.012000000000000455, 0.0045000000000001705, -0.009249999999999758, -0.011499999999999844, -0.004500000000001947, -0.0012500000000024158, 0.0009999999999976694, 0.010749999999998039, -0.03974999999999973, 0.024250000000000327, 0.05049999999999777, -0.02149999999999963, 0.0017500000000012506, -0.050499999999999545, -0.010999999999999233, -0.02149999999999963, 0.051000000000000156, 0.050499999999999545, -0.012250000000001648], zp_timestamp='2026-04-15T18:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:25:37.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:25:37.162 [DEBUG] [Thread-25205] [transport.py] [_log()] starting thread (client mode): 0xf1335e10
2026-04-15T20:25:37.163 [DEBUG] [Thread-25205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:25:37.177 [DEBUG] [Thread-25205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:25:37.177 [INFO] [Thread-25205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:25:37.184 [DEBUG] [Thread-25205] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:25:37.184 [DEBUG] [Thread-25205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:25:37.184 [DEBUG] [Thread-25205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:25:37.185 [DEBUG] [Thread-25205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:25:37.185 [DEBUG] [Thread-25205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:25:37.185 [DEBUG] [Thread-25205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:25:37.185 [DEBUG] [Thread-25205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:25:37.185 [DEBUG] [Thread-25205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:25:37.185 [DEBUG] [Thread-25205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:25:37.185 [DEBUG] [Thread-25205] [transport.py] [_log()] client lang: <none>
2026-04-15T20:25:37.185 [DEBUG] [Thread-25205] [transport.py] [_log()] server lang: <none>
2026-04-15T20:25:37.185 [DEBUG] [Thread-25205] [transport.py] [_log()] kex follows: False
2026-04-15T20:25:37.185 [DEBUG] [Thread-25205] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:25:37.185 [DEBUG] [Thread-25205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:25:37.186 [DEBUG] [Thread-25205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:25:37.186 [DEBUG] [Thread-25205] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:25:37.186 [DEBUG] [Thread-25205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:25:37.186 [DEBUG] [Thread-25205] [transport.py] [_log()] Compression: none
2026-04-15T20:25:37.186 [DEBUG] [Thread-25205] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:25:37.244 [DEBUG] [Thread-25205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:25:37.244 [DEBUG] [Thread-25205] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:25:37.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:25:37.245 [DEBUG] [Thread-25205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:25:37.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:25:37.301 [DEBUG] [Thread-25205] [transport.py] [_log()] userauth is OK
2026-04-15T20:25:37.301 [DEBUG] [Thread-25205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:25:37.301 [DEBUG] [Thread-25205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:25:37.301 [DEBUG] [Thread-25205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:25:37.301 [DEBUG] [Thread-25205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:25:37.326 [INFO] [Thread-25205] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:25:37.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:25:37.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:25:38.137 [DEBUG] [Thread-25205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:25:38.137 [DEBUG] [Thread-25205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:25:38.185 [DEBUG] [Thread-25205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:25:38.185 [DEBUG] [Thread-25205] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:25:38.194 [DEBUG] [Thread-25205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:25:38.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:25: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')
2026-04-15T20:25: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
2026-04-15T20:25:38.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:25:38.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:25:38.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:25:38.228 [DEBUG] [Thread-25205] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:25:46.259 [DEBUG] [Thread-25207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:26:01.298 [DEBUG] [Thread-25208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:26:07.571 [DEBUG] [Thread-25209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:26:08.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:26:08.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:26:08.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
2026-04-15T20:26:09.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 25, 33), 3.98537, 76.1637, 0.0, 9.882, 9.71024, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:26:09.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:25:33
2026-04-15T20:26:09.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:26:10.316 [DEBUG] [Thread-25210] [transport.py] [_log()] starting thread (client mode): 0xf1337c70
2026-04-15T20:26:10.316 [DEBUG] [Thread-25210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:26:10.337 [DEBUG] [Thread-25210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:26:10.337 [INFO] [Thread-25210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:26:10.340 [DEBUG] [Thread-25210] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:26:10.341 [DEBUG] [Thread-25210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:26:10.341 [DEBUG] [Thread-25210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:26:10.341 [DEBUG] [Thread-25210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:26:10.341 [DEBUG] [Thread-25210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:26:10.341 [DEBUG] [Thread-25210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:26:10.341 [DEBUG] [Thread-25210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:26:10.341 [DEBUG] [Thread-25210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:26:10.341 [DEBUG] [Thread-25210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:26:10.341 [DEBUG] [Thread-25210] [transport.py] [_log()] client lang: <none>
2026-04-15T20:26:10.341 [DEBUG] [Thread-25210] [transport.py] [_log()] server lang: <none>
2026-04-15T20:26:10.342 [DEBUG] [Thread-25210] [transport.py] [_log()] kex follows: False
2026-04-15T20:26:10.342 [DEBUG] [Thread-25210] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:26:10.342 [DEBUG] [Thread-25210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:26:10.342 [DEBUG] [Thread-25210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:26:10.342 [DEBUG] [Thread-25210] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:26:10.342 [DEBUG] [Thread-25210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:26:10.342 [DEBUG] [Thread-25210] [transport.py] [_log()] Compression: none
2026-04-15T20:26:10.342 [DEBUG] [Thread-25210] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:26:10.360 [DEBUG] [Thread-25210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:26:10.361 [DEBUG] [Thread-25210] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:26:10.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:26:10.362 [DEBUG] [Thread-25210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:26:10.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:26:10.363 [DEBUG] [Thread-25210] [transport.py] [_log()] userauth is OK
2026-04-15T20:26:10.363 [DEBUG] [Thread-25210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:26:10.364 [DEBUG] [Thread-25210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:26:10.364 [DEBUG] [Thread-25210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:26:10.364 [DEBUG] [Thread-25210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:26:10.383 [INFO] [Thread-25210] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:26:10.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:26:11.143 [DEBUG] [Thread-25210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:26:11.143 [DEBUG] [Thread-25210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:26:11.144 [DEBUG] [Thread-25210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:26:11.184 [DEBUG] [Thread-25210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:26:11.184 [DEBUG] [Thread-25210] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:26:11.186 [DEBUG] [Thread-25210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:26:11.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:26:11.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:26:11.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:26:11.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:26:11.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:26:11.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:26:11.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:26:11.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:26:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:26:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.767840 -999.00   +9.70   9.43     79   +6.30 1 1 1 1 1     0    0 3.25 -5.92 ZNESW 10.6 9.4 300.8 12.3 10.3 -24.5 10.2 -23.3 9.9 -21.3 10.2 -23.2
2026-04-15T20:26:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:26:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:26:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.767840
2026-04-15T20:26:11.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:26:11.211 [DEBUG] [Thread-25210] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:26:11.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:26:11.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:26:11.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:26:11.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:26:11.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:25:33', tmtdew=3.98537, humidity=76.1637, cloud=0.0, wind=9.882, temperature=9.71024, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:25:33', seeing=0.98, atlas_timestamp='2026-04-15T18:25:41.376', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07925000000000004, -0.055749999999999744, -0.06624999999999837, -0.05500000000000149, -0.037499999999999645, -0.004749999999999588, -0.019999999999999574, 0.006250000000001421, 0.030999999999998806, -0.02049999999999841, -0.08975000000000044, -0.009999999999999787, 0.02200000000000024, 0.01124999999999865, -0.05400000000000027, -0.016000000000000014, -0.003249999999999531, 0.008000000000000895, -0.028499999999999304, -0.014750000000001151, -0.00300000000000189, 0.01624999999999943, -0.008250000000000313, 0.01875000000000071, 0.03799999999999848, -0.0235000000000003, -0.0072499999999990905, -0.039499999999998536, -0.007999999999999119, -0.032999999999999474, 0.058000000000001606, 0.11500000000000021, -0.01425000000000054], zp_timestamp='2026-04-15T18:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:26:11.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:26:11.468 [DEBUG] [Thread-25213] [transport.py] [_log()] starting thread (client mode): 0xf13e0490
2026-04-15T20:26:11.468 [DEBUG] [Thread-25213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:26:11.483 [DEBUG] [Thread-25213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:26:11.483 [INFO] [Thread-25213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:26:11.491 [DEBUG] [Thread-25213] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:26:11.491 [DEBUG] [Thread-25213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:26:11.491 [DEBUG] [Thread-25213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:26:11.491 [DEBUG] [Thread-25213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:26:11.491 [DEBUG] [Thread-25213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:26:11.491 [DEBUG] [Thread-25213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:26:11.491 [DEBUG] [Thread-25213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:26:11.491 [DEBUG] [Thread-25213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:26:11.492 [DEBUG] [Thread-25213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:26:11.492 [DEBUG] [Thread-25213] [transport.py] [_log()] client lang: <none>
2026-04-15T20:26:11.492 [DEBUG] [Thread-25213] [transport.py] [_log()] server lang: <none>
2026-04-15T20:26:11.492 [DEBUG] [Thread-25213] [transport.py] [_log()] kex follows: False
2026-04-15T20:26:11.492 [DEBUG] [Thread-25213] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:26:11.492 [DEBUG] [Thread-25213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:26:11.492 [DEBUG] [Thread-25213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:26:11.492 [DEBUG] [Thread-25213] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:26:11.492 [DEBUG] [Thread-25213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:26:11.492 [DEBUG] [Thread-25213] [transport.py] [_log()] Compression: none
2026-04-15T20:26:11.492 [DEBUG] [Thread-25213] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:26:11.547 [DEBUG] [Thread-25213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:26:11.547 [DEBUG] [Thread-25213] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:26:11.548 [DEBUG] [Thread-25213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:26:11.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:26:11.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:26:11.604 [DEBUG] [Thread-25213] [transport.py] [_log()] userauth is OK
2026-04-15T20:26:11.604 [DEBUG] [Thread-25213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:26:11.604 [DEBUG] [Thread-25213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:26:11.604 [DEBUG] [Thread-25213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:26:11.604 [DEBUG] [Thread-25213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:26:11.630 [INFO] [Thread-25213] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:26:11.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:26:11.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:26:12.497 [DEBUG] [Thread-25213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:26:12.498 [DEBUG] [Thread-25213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:26:12.546 [DEBUG] [Thread-25213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:26:12.546 [DEBUG] [Thread-25213] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:26:12.554 [DEBUG] [Thread-25213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:26:12.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:26:12.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')
2026-04-15T20:26:12.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') -> 00000000
2026-04-15T20:26:12.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:26:12.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:26:12.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:26:12.585 [DEBUG] [Thread-25213] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:26:16.328 [DEBUG] [Thread-25215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:26:31.368 [DEBUG] [Thread-25216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:26:36.135 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:26:36.137 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:26:42.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:26:42.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:26:42.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T20:26:43.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 26, 8), 4.13012, 75.6482, 0.0, 8.04708, 9.60512, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:26:43.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:26:08
2026-04-15T20:26:44.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:26:44.639 [DEBUG] [Thread-25217] [transport.py] [_log()] starting thread (client mode): 0xf13c83a0
2026-04-15T20:26:44.640 [DEBUG] [Thread-25217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:26:44.659 [DEBUG] [Thread-25217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:26:44.660 [INFO] [Thread-25217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] client lang: <none>
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] server lang: <none>
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] kex follows: False
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:26:44.663 [DEBUG] [Thread-25217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:26:44.664 [DEBUG] [Thread-25217] [transport.py] [_log()] Compression: none
2026-04-15T20:26:44.664 [DEBUG] [Thread-25217] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:26:44.680 [DEBUG] [Thread-25217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:26:44.680 [DEBUG] [Thread-25217] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:26:44.681 [DEBUG] [Thread-25217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:26:44.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:26:44.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:26:44.682 [DEBUG] [Thread-25217] [transport.py] [_log()] userauth is OK
2026-04-15T20:26:44.682 [DEBUG] [Thread-25217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:26:44.682 [DEBUG] [Thread-25217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:26:44.682 [DEBUG] [Thread-25217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:26:44.682 [DEBUG] [Thread-25217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:26:44.694 [INFO] [Thread-25217] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:26:44.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:26:45.460 [DEBUG] [Thread-25217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:26:45.460 [DEBUG] [Thread-25217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:26:45.461 [DEBUG] [Thread-25217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:26:45.501 [DEBUG] [Thread-25217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:26:45.501 [DEBUG] [Thread-25217] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:26:45.504 [DEBUG] [Thread-25217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:26:45.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:26:45.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:26:45.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:26:45.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:26:45.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:26:45.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:26:45.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:26:45.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:26:45.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:26:45.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.768188 -999.00   +9.70   9.89     79   +6.30 1 1 1 1 1     0    0 3.27 -5.57 ZNESW 11.7 9.9 289.4 14.2 10.4 -24.6 10.2 -23.3 9.9 -21.3 10.2 -23.3
2026-04-15T20:26:45.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:26:45.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:26:45.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.768188
2026-04-15T20:26:45.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:26:45.530 [DEBUG] [Thread-25217] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:26:45.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:26:45.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:26:45.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:26:45.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:26:45.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:26:08', tmtdew=4.13012, humidity=75.6482, cloud=0.0, wind=8.04708, temperature=9.60512, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:26:09', seeing=1.19, atlas_timestamp='2026-04-15T18:26:11.443', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07925000000000004, -0.055749999999999744, -0.06624999999999837, -0.05500000000000149, -0.037499999999999645, -0.004749999999999588, -0.019999999999999574, 0.006250000000001421, 0.030999999999998806, -0.02049999999999841, -0.08975000000000044, -0.009999999999999787, 0.02200000000000024, 0.01124999999999865, -0.05400000000000027, -0.016000000000000014, -0.003249999999999531, 0.008000000000000895, -0.028499999999999304, -0.014750000000001151, -0.00300000000000189, 0.01624999999999943, -0.008250000000000313, 0.01875000000000071, 0.03799999999999848, -0.0235000000000003, -0.0072499999999990905, -0.039499999999998536, -0.007999999999999119, -0.032999999999999474, 0.058000000000001606, 0.11500000000000021, -0.01425000000000054], zp_timestamp='2026-04-15T18:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:26:45.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:26:45.789 [DEBUG] [Thread-25220] [transport.py] [_log()] starting thread (client mode): 0xf13e0df0
2026-04-15T20:26:45.789 [DEBUG] [Thread-25220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:26:45.803 [DEBUG] [Thread-25220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:26:45.804 [INFO] [Thread-25220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:26:45.811 [DEBUG] [Thread-25220] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:26:45.811 [DEBUG] [Thread-25220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:26:45.811 [DEBUG] [Thread-25220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:26:45.811 [DEBUG] [Thread-25220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:26:45.811 [DEBUG] [Thread-25220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:26:45.811 [DEBUG] [Thread-25220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:26:45.811 [DEBUG] [Thread-25220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:26:45.811 [DEBUG] [Thread-25220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:26:45.811 [DEBUG] [Thread-25220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:26:45.811 [DEBUG] [Thread-25220] [transport.py] [_log()] client lang: <none>
2026-04-15T20:26:45.811 [DEBUG] [Thread-25220] [transport.py] [_log()] server lang: <none>
2026-04-15T20:26:45.811 [DEBUG] [Thread-25220] [transport.py] [_log()] kex follows: False
2026-04-15T20:26:45.811 [DEBUG] [Thread-25220] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:26:45.812 [DEBUG] [Thread-25220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:26:45.812 [DEBUG] [Thread-25220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:26:45.812 [DEBUG] [Thread-25220] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:26:45.812 [DEBUG] [Thread-25220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:26:45.812 [DEBUG] [Thread-25220] [transport.py] [_log()] Compression: none
2026-04-15T20:26:45.812 [DEBUG] [Thread-25220] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:26:45.870 [DEBUG] [Thread-25220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:26:45.870 [DEBUG] [Thread-25220] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:26:45.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:26:45.871 [DEBUG] [Thread-25220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:26:45.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:26:45.927 [DEBUG] [Thread-25220] [transport.py] [_log()] userauth is OK
2026-04-15T20:26:45.927 [DEBUG] [Thread-25220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:26:45.927 [DEBUG] [Thread-25220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:26:45.928 [DEBUG] [Thread-25220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:26:45.928 [DEBUG] [Thread-25220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:26:45.953 [INFO] [Thread-25220] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:26:45.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:26:45.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:26:46.398 [DEBUG] [Thread-25222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:26:46.818 [DEBUG] [Thread-25220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:26:46.818 [DEBUG] [Thread-25220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:26:46.866 [DEBUG] [Thread-25220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:26:46.866 [DEBUG] [Thread-25220] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:26:46.875 [DEBUG] [Thread-25220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:26:46.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:26:46.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')
2026-04-15T20:26:46.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
2026-04-15T20:26:46.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:26:46.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:26:46.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:26:46.910 [DEBUG] [Thread-25220] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:27:01.436 [DEBUG] [Thread-25223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:27:07.740 [DEBUG] [Thread-25224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:27:16.466 [DEBUG] [Thread-25225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:27:16.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:27:16.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:27:16.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
2026-04-15T20:27:18.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 26, 45), 3.94664, 76.3631, 0.0, 9.38808, 9.6773, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:27:18.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:26:45
2026-04-15T20:27:18.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:27:19.040 [DEBUG] [Thread-25226] [transport.py] [_log()] starting thread (client mode): 0xee9c0c10
2026-04-15T20:27:19.040 [DEBUG] [Thread-25226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:27:19.060 [DEBUG] [Thread-25226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:27:19.061 [INFO] [Thread-25226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:27:19.063 [DEBUG] [Thread-25226] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:27:19.063 [DEBUG] [Thread-25226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] client lang: <none>
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] server lang: <none>
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] kex follows: False
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] Compression: none
2026-04-15T20:27:19.064 [DEBUG] [Thread-25226] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:27:19.081 [DEBUG] [Thread-25226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:27:19.082 [DEBUG] [Thread-25226] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:27:19.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:27:19.083 [DEBUG] [Thread-25226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:27:19.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:27:19.084 [DEBUG] [Thread-25226] [transport.py] [_log()] userauth is OK
2026-04-15T20:27:19.084 [DEBUG] [Thread-25226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:27:19.084 [DEBUG] [Thread-25226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:27:19.084 [DEBUG] [Thread-25226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:27:19.085 [DEBUG] [Thread-25226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:27:19.107 [INFO] [Thread-25226] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:27:19.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:27:19.896 [DEBUG] [Thread-25226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:27:19.897 [DEBUG] [Thread-25226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:27:19.897 [DEBUG] [Thread-25226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:27:19.937 [DEBUG] [Thread-25226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:27:19.937 [DEBUG] [Thread-25226] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:27:19.940 [DEBUG] [Thread-25226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:27:19.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:27:19.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:27:19.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:27:19.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:27:19.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:27:19.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:27:19.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:27:19.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:27:19.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:27:19.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.768535 -999.00   +9.80  10.76     79   +6.30 1 1 1 1 1     0    0 3.29 -4.95 ZNESW 9.9 10.8 297.4 14.2 10.3 -24.4 10.2 -23.2 9.9 -21.2 10.2 -23.3
2026-04-15T20:27:19.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:27:19.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:27:19.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.768535
2026-04-15T20:27:19.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:27:19.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:27:19.964 [DEBUG] [Thread-25226] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:27:19.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:27:19.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:27:19.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:27:19.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:26:45', tmtdew=3.94664, humidity=76.3631, cloud=0.0, wind=9.38808, temperature=9.6773, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:26:45', seeing=1.04, atlas_timestamp='2026-04-15T18:26:41.424', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07925000000000004, -0.055749999999999744, -0.06624999999999837, -0.05500000000000149, -0.037499999999999645, -0.004749999999999588, -0.019999999999999574, 0.006250000000001421, 0.030999999999998806, -0.02049999999999841, -0.08975000000000044, -0.009999999999999787, 0.02200000000000024, 0.01124999999999865, -0.05400000000000027, -0.016000000000000014, -0.003249999999999531, 0.008000000000000895, -0.028499999999999304, -0.014750000000001151, -0.00300000000000189, 0.01624999999999943, -0.008250000000000313, 0.01875000000000071, 0.03799999999999848, -0.0235000000000003, -0.0072499999999990905, -0.039499999999998536, -0.007999999999999119, -0.032999999999999474, 0.058000000000001606, 0.11500000000000021, -0.01425000000000054], zp_timestamp='2026-04-15T18:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:27:20.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:27:20.217 [DEBUG] [Thread-25229] [transport.py] [_log()] starting thread (client mode): 0xf1367f70
2026-04-15T20:27:20.217 [DEBUG] [Thread-25229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:27:20.231 [DEBUG] [Thread-25229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:27:20.231 [INFO] [Thread-25229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:27:20.238 [DEBUG] [Thread-25229] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:27:20.239 [DEBUG] [Thread-25229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:27:20.239 [DEBUG] [Thread-25229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:27:20.239 [DEBUG] [Thread-25229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:27:20.239 [DEBUG] [Thread-25229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:27:20.239 [DEBUG] [Thread-25229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:27:20.239 [DEBUG] [Thread-25229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:27:20.239 [DEBUG] [Thread-25229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:27:20.239 [DEBUG] [Thread-25229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:27:20.239 [DEBUG] [Thread-25229] [transport.py] [_log()] client lang: <none>
2026-04-15T20:27:20.239 [DEBUG] [Thread-25229] [transport.py] [_log()] server lang: <none>
2026-04-15T20:27:20.239 [DEBUG] [Thread-25229] [transport.py] [_log()] kex follows: False
2026-04-15T20:27:20.239 [DEBUG] [Thread-25229] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:27:20.240 [DEBUG] [Thread-25229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:27:20.240 [DEBUG] [Thread-25229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:27:20.240 [DEBUG] [Thread-25229] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:27:20.240 [DEBUG] [Thread-25229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:27:20.240 [DEBUG] [Thread-25229] [transport.py] [_log()] Compression: none
2026-04-15T20:27:20.240 [DEBUG] [Thread-25229] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:27:20.300 [DEBUG] [Thread-25229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:27:20.301 [DEBUG] [Thread-25229] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:27:20.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:27:20.302 [DEBUG] [Thread-25229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:27:20.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:27:20.359 [DEBUG] [Thread-25229] [transport.py] [_log()] userauth is OK
2026-04-15T20:27:20.359 [DEBUG] [Thread-25229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:27:20.359 [DEBUG] [Thread-25229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:27:20.359 [DEBUG] [Thread-25229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:27:20.360 [DEBUG] [Thread-25229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:27:20.388 [INFO] [Thread-25229] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:27:20.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:27:20.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:27:21.191 [DEBUG] [Thread-25229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:27:21.192 [DEBUG] [Thread-25229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:27:21.239 [DEBUG] [Thread-25229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:27:21.239 [DEBUG] [Thread-25229] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:27:21.248 [DEBUG] [Thread-25229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:27:21.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:27:21.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')
2026-04-15T20:27:21.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
2026-04-15T20:27:21.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:27:21.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:27:21.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:27:21.282 [DEBUG] [Thread-25229] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:27:31.494 [DEBUG] [Thread-25231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:27:36.344 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:27:36.345 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:27:46.540 [DEBUG] [Thread-25232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:27:51.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:27:51.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:27:51.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T20:27:52.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 27, 21), 4.06392, 75.7313, 0.0, 9.29952, 9.58865, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:27:52.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:27:21
2026-04-15T20:27:52.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:27:53.415 [DEBUG] [Thread-25233] [transport.py] [_log()] starting thread (client mode): 0xee9c07c0
2026-04-15T20:27:53.415 [DEBUG] [Thread-25233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:27:53.436 [DEBUG] [Thread-25233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:27:53.436 [INFO] [Thread-25233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:27:53.439 [DEBUG] [Thread-25233] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:27:53.439 [DEBUG] [Thread-25233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:27:53.439 [DEBUG] [Thread-25233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:27:53.439 [DEBUG] [Thread-25233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:27:53.439 [DEBUG] [Thread-25233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:27:53.440 [DEBUG] [Thread-25233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:27:53.440 [DEBUG] [Thread-25233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:27:53.440 [DEBUG] [Thread-25233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:27:53.440 [DEBUG] [Thread-25233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:27:53.440 [DEBUG] [Thread-25233] [transport.py] [_log()] client lang: <none>
2026-04-15T20:27:53.440 [DEBUG] [Thread-25233] [transport.py] [_log()] server lang: <none>
2026-04-15T20:27:53.440 [DEBUG] [Thread-25233] [transport.py] [_log()] kex follows: False
2026-04-15T20:27:53.440 [DEBUG] [Thread-25233] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:27:53.440 [DEBUG] [Thread-25233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:27:53.440 [DEBUG] [Thread-25233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:27:53.440 [DEBUG] [Thread-25233] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:27:53.440 [DEBUG] [Thread-25233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:27:53.441 [DEBUG] [Thread-25233] [transport.py] [_log()] Compression: none
2026-04-15T20:27:53.441 [DEBUG] [Thread-25233] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:27:53.458 [DEBUG] [Thread-25233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:27:53.459 [DEBUG] [Thread-25233] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:27:53.459 [DEBUG] [Thread-25233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:27:53.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:27:53.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:27:53.460 [DEBUG] [Thread-25233] [transport.py] [_log()] userauth is OK
2026-04-15T20:27:53.461 [DEBUG] [Thread-25233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:27:53.461 [DEBUG] [Thread-25233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:27:53.461 [DEBUG] [Thread-25233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:27:53.461 [DEBUG] [Thread-25233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:27:53.485 [INFO] [Thread-25233] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:27:53.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:27:54.294 [DEBUG] [Thread-25233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:27:54.294 [DEBUG] [Thread-25233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:27:54.295 [DEBUG] [Thread-25233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:27:54.335 [DEBUG] [Thread-25233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:27:54.335 [DEBUG] [Thread-25233] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:27:54.338 [DEBUG] [Thread-25233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:27:54.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:27:54.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:27:54.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:27:54.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:27:54.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:27:54.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:27:54.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:27:54.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:27:54.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:27:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.768882 -999.00   +9.80   9.45     79   +6.40 1 1 1 1 1     0    0 3.28 -4.04 ZNESW 9.6 9.4 291.8 11.1 10.3 -24.6 10.2 -23.3 9.9 -21.3 10.2 -23.3
2026-04-15T20:27:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:27:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:27:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.768882
2026-04-15T20:27:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:27:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:27:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:27:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:27:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:27:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:27:21', tmtdew=4.06392, humidity=75.7313, cloud=0.0, wind=9.29952, temperature=9.58865, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:27:21', seeing=1.49, atlas_timestamp='2026-04-15T18:27:11.405', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07925000000000004, -0.055749999999999744, -0.06624999999999837, -0.05500000000000149, -0.037499999999999645, -0.004749999999999588, -0.019999999999999574, 0.006250000000001421, 0.030999999999998806, -0.02049999999999841, -0.08975000000000044, -0.009999999999999787, 0.02200000000000024, 0.01124999999999865, -0.05400000000000027, -0.016000000000000014, -0.003249999999999531, 0.008000000000000895, -0.028499999999999304, -0.014750000000001151, -0.00300000000000189, 0.01624999999999943, -0.008250000000000313, 0.01875000000000071, 0.03799999999999848, -0.0235000000000003, -0.0072499999999990905, -0.039499999999998536, -0.007999999999999119, -0.032999999999999474, 0.058000000000001606, 0.11500000000000021, -0.01425000000000054], zp_timestamp='2026-04-15T18:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:27:54.363 [DEBUG] [Thread-25233] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:27:54.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:27:54.614 [DEBUG] [Thread-25236] [transport.py] [_log()] starting thread (client mode): 0xf1336170
2026-04-15T20:27:54.614 [DEBUG] [Thread-25236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:27:54.630 [DEBUG] [Thread-25236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:27:54.630 [INFO] [Thread-25236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:27:54.637 [DEBUG] [Thread-25236] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:27:54.637 [DEBUG] [Thread-25236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:27:54.637 [DEBUG] [Thread-25236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:27:54.637 [DEBUG] [Thread-25236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:27:54.637 [DEBUG] [Thread-25236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:27:54.638 [DEBUG] [Thread-25236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:27:54.638 [DEBUG] [Thread-25236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:27:54.638 [DEBUG] [Thread-25236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:27:54.638 [DEBUG] [Thread-25236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:27:54.638 [DEBUG] [Thread-25236] [transport.py] [_log()] client lang: <none>
2026-04-15T20:27:54.638 [DEBUG] [Thread-25236] [transport.py] [_log()] server lang: <none>
2026-04-15T20:27:54.638 [DEBUG] [Thread-25236] [transport.py] [_log()] kex follows: False
2026-04-15T20:27:54.638 [DEBUG] [Thread-25236] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:27:54.638 [DEBUG] [Thread-25236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:27:54.638 [DEBUG] [Thread-25236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:27:54.638 [DEBUG] [Thread-25236] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:27:54.638 [DEBUG] [Thread-25236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:27:54.638 [DEBUG] [Thread-25236] [transport.py] [_log()] Compression: none
2026-04-15T20:27:54.638 [DEBUG] [Thread-25236] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:27:54.696 [DEBUG] [Thread-25236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:27:54.696 [DEBUG] [Thread-25236] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:27:54.696 [DEBUG] [Thread-25236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:27:54.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:27:54.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:27:54.753 [DEBUG] [Thread-25236] [transport.py] [_log()] userauth is OK
2026-04-15T20:27:54.753 [DEBUG] [Thread-25236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:27:54.753 [DEBUG] [Thread-25236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:27:54.753 [DEBUG] [Thread-25236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:27:54.754 [DEBUG] [Thread-25236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:27:54.771 [INFO] [Thread-25236] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:27:54.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:27:54.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:27:55.587 [DEBUG] [Thread-25236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:27:55.587 [DEBUG] [Thread-25236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:27:55.634 [DEBUG] [Thread-25236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:27:55.635 [DEBUG] [Thread-25236] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:27:55.643 [DEBUG] [Thread-25236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:27:55.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:27:55.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')
2026-04-15T20:27:55.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') -> 00000000
2026-04-15T20:27:55.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:27:55.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:27:55.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:27:55.677 [DEBUG] [Thread-25236] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:28:01.571 [DEBUG] [Thread-25238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:28:07.916 [DEBUG] [Thread-25239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:28:16.613 [DEBUG] [Thread-25240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:28:25.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:28:25.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:28:25.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
2026-04-15T20:28:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 27, 56), 4.05138, 75.7978, 0.0, 8.52336, 9.58874, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:28:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:27:56
2026-04-15T20:28:27.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:28:27.750 [DEBUG] [Thread-25241] [transport.py] [_log()] starting thread (client mode): 0xee9c2890
2026-04-15T20:28:27.750 [DEBUG] [Thread-25241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:28:27.769 [DEBUG] [Thread-25241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:28:27.770 [INFO] [Thread-25241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:28:27.773 [DEBUG] [Thread-25241] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:28:27.773 [DEBUG] [Thread-25241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:28:27.773 [DEBUG] [Thread-25241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:28:27.773 [DEBUG] [Thread-25241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:28:27.773 [DEBUG] [Thread-25241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:28:27.773 [DEBUG] [Thread-25241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:28:27.773 [DEBUG] [Thread-25241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:28:27.774 [DEBUG] [Thread-25241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:28:27.774 [DEBUG] [Thread-25241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:28:27.774 [DEBUG] [Thread-25241] [transport.py] [_log()] client lang: <none>
2026-04-15T20:28:27.774 [DEBUG] [Thread-25241] [transport.py] [_log()] server lang: <none>
2026-04-15T20:28:27.774 [DEBUG] [Thread-25241] [transport.py] [_log()] kex follows: False
2026-04-15T20:28:27.774 [DEBUG] [Thread-25241] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:28:27.774 [DEBUG] [Thread-25241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:28:27.774 [DEBUG] [Thread-25241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:28:27.774 [DEBUG] [Thread-25241] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:28:27.774 [DEBUG] [Thread-25241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:28:27.774 [DEBUG] [Thread-25241] [transport.py] [_log()] Compression: none
2026-04-15T20:28:27.774 [DEBUG] [Thread-25241] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:28:27.793 [DEBUG] [Thread-25241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:28:27.794 [DEBUG] [Thread-25241] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:28:27.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:28:27.794 [DEBUG] [Thread-25241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:28:27.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:28:27.795 [DEBUG] [Thread-25241] [transport.py] [_log()] userauth is OK
2026-04-15T20:28:27.795 [DEBUG] [Thread-25241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:28:27.795 [DEBUG] [Thread-25241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:28:27.795 [DEBUG] [Thread-25241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:28:27.796 [DEBUG] [Thread-25241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:28:27.830 [INFO] [Thread-25241] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:28:27.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:28:28.640 [DEBUG] [Thread-25241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:28:28.640 [DEBUG] [Thread-25241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:28:28.641 [DEBUG] [Thread-25241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:28:28.681 [DEBUG] [Thread-25241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:28:28.681 [DEBUG] [Thread-25241] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:28:28.684 [DEBUG] [Thread-25241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:28:28.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:28:28.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:28:28.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:28:28.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:28:28.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:28:28.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:28:28.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:28:28.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:28:28.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:28:28.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.769229 -999.00   +9.70   8.22     79   +6.30 1 1 1 1 1     0    0 3.33 -3.47 ZNESW 8.8 8.2 292.0 10.6 10.3 -24.5 10.2 -23.2 9.9 -21.2 10.2 -23.2
2026-04-15T20:28:28.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:28:28.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:28:28.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.769229
2026-04-15T20:28:28.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:28:28.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:28:28.706 [DEBUG] [Thread-25241] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:28:28.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:28:28.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:28:28.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:28:28.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:27:56', tmtdew=4.05138, humidity=75.7978, cloud=0.0, wind=8.52336, temperature=9.58874, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:27:56', seeing=1.32, atlas_timestamp='2026-04-15T18:27:41.386', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07925000000000004, -0.055749999999999744, -0.06624999999999837, -0.05500000000000149, -0.037499999999999645, -0.004749999999999588, -0.019999999999999574, 0.006250000000001421, 0.030999999999998806, -0.02049999999999841, -0.08975000000000044, -0.009999999999999787, 0.02200000000000024, 0.01124999999999865, -0.05400000000000027, -0.016000000000000014, -0.003249999999999531, 0.008000000000000895, -0.028499999999999304, -0.014750000000001151, -0.00300000000000189, 0.01624999999999943, -0.008250000000000313, 0.01875000000000071, 0.03799999999999848, -0.0235000000000003, -0.0072499999999990905, -0.039499999999998536, -0.007999999999999119, -0.032999999999999474, 0.058000000000001606, 0.11500000000000021, -0.01425000000000054], zp_timestamp='2026-04-15T18:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:28:28.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:28:28.928 [DEBUG] [Thread-25244] [transport.py] [_log()] starting thread (client mode): 0xf13ca410
2026-04-15T20:28:28.928 [DEBUG] [Thread-25244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:28:28.946 [DEBUG] [Thread-25244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:28:28.946 [INFO] [Thread-25244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:28:28.953 [DEBUG] [Thread-25244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:28:28.953 [DEBUG] [Thread-25244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:28:28.953 [DEBUG] [Thread-25244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:28:28.953 [DEBUG] [Thread-25244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:28:28.953 [DEBUG] [Thread-25244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:28:28.954 [DEBUG] [Thread-25244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:28:28.954 [DEBUG] [Thread-25244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:28:28.954 [DEBUG] [Thread-25244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:28:28.954 [DEBUG] [Thread-25244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:28:28.954 [DEBUG] [Thread-25244] [transport.py] [_log()] client lang: <none>
2026-04-15T20:28:28.954 [DEBUG] [Thread-25244] [transport.py] [_log()] server lang: <none>
2026-04-15T20:28:28.954 [DEBUG] [Thread-25244] [transport.py] [_log()] kex follows: False
2026-04-15T20:28:28.954 [DEBUG] [Thread-25244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:28:28.954 [DEBUG] [Thread-25244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:28:28.954 [DEBUG] [Thread-25244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:28:28.954 [DEBUG] [Thread-25244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:28:28.955 [DEBUG] [Thread-25244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:28:28.955 [DEBUG] [Thread-25244] [transport.py] [_log()] Compression: none
2026-04-15T20:28:28.955 [DEBUG] [Thread-25244] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:28:29.012 [DEBUG] [Thread-25244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:28:29.013 [DEBUG] [Thread-25244] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:28:29.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:28:29.013 [DEBUG] [Thread-25244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:28:29.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:28:29.069 [DEBUG] [Thread-25244] [transport.py] [_log()] userauth is OK
2026-04-15T20:28:29.069 [DEBUG] [Thread-25244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:28:29.069 [DEBUG] [Thread-25244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:28:29.069 [DEBUG] [Thread-25244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:28:29.069 [DEBUG] [Thread-25244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:28:29.086 [INFO] [Thread-25244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:28:29.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:28:29.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:28:29.904 [DEBUG] [Thread-25244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:28:29.905 [DEBUG] [Thread-25244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:28:29.952 [DEBUG] [Thread-25244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:28:29.952 [DEBUG] [Thread-25244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:28:29.961 [DEBUG] [Thread-25244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:28:29.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:28:29.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')
2026-04-15T20:28:29.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
2026-04-15T20:28:29.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:28:29.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:28:29.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:28:29.996 [DEBUG] [Thread-25244] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:28:31.642 [DEBUG] [Thread-25246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:28:36.545 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:28:36.545 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:28:46.683 [DEBUG] [Thread-25247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:29:00.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:29:00.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:29:00.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
2026-04-15T20:29:01.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 28, 32), 4.07117, 75.6982, 0.0, 8.77032, 9.62191, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:29:01.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:28:32
2026-04-15T20:29:01.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:29:01.714 [DEBUG] [Thread-25248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:29:02.171 [DEBUG] [Thread-25249] [transport.py] [_log()] starting thread (client mode): 0xf1334a00
2026-04-15T20:29:02.172 [DEBUG] [Thread-25249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:29:02.190 [DEBUG] [Thread-25249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:29:02.190 [INFO] [Thread-25249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:29:02.193 [DEBUG] [Thread-25249] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:29:02.193 [DEBUG] [Thread-25249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:29:02.193 [DEBUG] [Thread-25249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:29:02.193 [DEBUG] [Thread-25249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:29:02.193 [DEBUG] [Thread-25249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:29:02.193 [DEBUG] [Thread-25249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:29:02.193 [DEBUG] [Thread-25249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:29:02.193 [DEBUG] [Thread-25249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:29:02.194 [DEBUG] [Thread-25249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:29:02.194 [DEBUG] [Thread-25249] [transport.py] [_log()] client lang: <none>
2026-04-15T20:29:02.194 [DEBUG] [Thread-25249] [transport.py] [_log()] server lang: <none>
2026-04-15T20:29:02.194 [DEBUG] [Thread-25249] [transport.py] [_log()] kex follows: False
2026-04-15T20:29:02.194 [DEBUG] [Thread-25249] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:29:02.194 [DEBUG] [Thread-25249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:29:02.194 [DEBUG] [Thread-25249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:29:02.194 [DEBUG] [Thread-25249] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:29:02.194 [DEBUG] [Thread-25249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:29:02.194 [DEBUG] [Thread-25249] [transport.py] [_log()] Compression: none
2026-04-15T20:29:02.194 [DEBUG] [Thread-25249] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:29:02.209 [DEBUG] [Thread-25249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:29:02.209 [DEBUG] [Thread-25249] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:29:02.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:29:02.209 [DEBUG] [Thread-25249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:29:02.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:29:02.210 [DEBUG] [Thread-25249] [transport.py] [_log()] userauth is OK
2026-04-15T20:29:02.210 [DEBUG] [Thread-25249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:29:02.210 [DEBUG] [Thread-25249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:29:02.210 [DEBUG] [Thread-25249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:29:02.210 [DEBUG] [Thread-25249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:29:02.229 [INFO] [Thread-25249] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:29:02.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:29:03.010 [DEBUG] [Thread-25249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:29:03.010 [DEBUG] [Thread-25249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:29:03.010 [DEBUG] [Thread-25249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:29:03.051 [DEBUG] [Thread-25249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:29:03.051 [DEBUG] [Thread-25249] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:29:03.054 [DEBUG] [Thread-25249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:29:03.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:29:03.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:29:03.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:29:03.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:29:03.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:29:03.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:29:03.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:29:03.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:29:03.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:29:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.769576 -999.00   +9.70  10.31     79   +6.40 1 1 1 1 1     0    0 3.33 -3.40 ZNESW 9.4 10.3 296.6 11.2 10.3 -24.4 10.2 -23.2 9.9 -21.2 10.2 -23.4
2026-04-15T20:29:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:29:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:29:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.769576
2026-04-15T20:29:03.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:29:03.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:29:03.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:29:03.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:29:03.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:29:03.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:28:32', tmtdew=4.07117, humidity=75.6982, cloud=0.0, wind=8.77032, temperature=9.62191, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:28:32', seeing=1.45, atlas_timestamp='2026-04-15T18:28:11.366', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07925000000000004, -0.055749999999999744, -0.06624999999999837, -0.05500000000000149, -0.037499999999999645, -0.004749999999999588, -0.019999999999999574, 0.006250000000001421, 0.030999999999998806, -0.02049999999999841, -0.08975000000000044, -0.009999999999999787, 0.02200000000000024, 0.01124999999999865, -0.05400000000000027, -0.016000000000000014, -0.003249999999999531, 0.008000000000000895, -0.028499999999999304, -0.014750000000001151, -0.00300000000000189, 0.01624999999999943, -0.008250000000000313, 0.01875000000000071, 0.03799999999999848, -0.0235000000000003, -0.0072499999999990905, -0.039499999999998536, -0.007999999999999119, -0.032999999999999474, 0.058000000000001606, 0.11500000000000021, -0.01425000000000054], zp_timestamp='2026-04-15T18:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:29:03.082 [DEBUG] [Thread-25249] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:29:03.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:29:03.337 [DEBUG] [Thread-25252] [transport.py] [_log()] starting thread (client mode): 0xf13345b0
2026-04-15T20:29:03.337 [DEBUG] [Thread-25252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:29:03.351 [DEBUG] [Thread-25252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:29:03.351 [INFO] [Thread-25252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:29:03.359 [DEBUG] [Thread-25252] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:29:03.359 [DEBUG] [Thread-25252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:29:03.359 [DEBUG] [Thread-25252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:29:03.359 [DEBUG] [Thread-25252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:29:03.359 [DEBUG] [Thread-25252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:29:03.359 [DEBUG] [Thread-25252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:29:03.359 [DEBUG] [Thread-25252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:29:03.359 [DEBUG] [Thread-25252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:29:03.359 [DEBUG] [Thread-25252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:29:03.359 [DEBUG] [Thread-25252] [transport.py] [_log()] client lang: <none>
2026-04-15T20:29:03.359 [DEBUG] [Thread-25252] [transport.py] [_log()] server lang: <none>
2026-04-15T20:29:03.360 [DEBUG] [Thread-25252] [transport.py] [_log()] kex follows: False
2026-04-15T20:29:03.360 [DEBUG] [Thread-25252] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:29:03.360 [DEBUG] [Thread-25252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:29:03.360 [DEBUG] [Thread-25252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:29:03.360 [DEBUG] [Thread-25252] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:29:03.360 [DEBUG] [Thread-25252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:29:03.360 [DEBUG] [Thread-25252] [transport.py] [_log()] Compression: none
2026-04-15T20:29:03.360 [DEBUG] [Thread-25252] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:29:03.415 [DEBUG] [Thread-25252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:29:03.416 [DEBUG] [Thread-25252] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:29:03.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:29:03.416 [DEBUG] [Thread-25252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:29:03.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:29:03.473 [DEBUG] [Thread-25252] [transport.py] [_log()] userauth is OK
2026-04-15T20:29:03.473 [DEBUG] [Thread-25252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:29:03.473 [DEBUG] [Thread-25252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:29:03.473 [DEBUG] [Thread-25252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:29:03.474 [DEBUG] [Thread-25252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:29:03.499 [INFO] [Thread-25252] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:29:03.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:29:03.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:29:04.298 [DEBUG] [Thread-25252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:29:04.298 [DEBUG] [Thread-25252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:29:04.346 [DEBUG] [Thread-25252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:29:04.346 [DEBUG] [Thread-25252] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:29:04.354 [DEBUG] [Thread-25252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:29:04.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:29:04.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')
2026-04-15T20:29:04.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
2026-04-15T20:29:04.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:29:04.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:29:04.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:29:04.388 [DEBUG] [Thread-25252] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:29:08.061 [DEBUG] [Thread-25254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:29:16.745 [DEBUG] [Thread-25255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:29:31.788 [DEBUG] [Thread-25256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:29:34.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:29:34.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:29:34.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
2026-04-15T20:29:35.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 29, 8), 4.06802, 75.7149, 0.0, 9.01728, 9.62199, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:29:35.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:29:08
2026-04-15T20:29:36.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:29:36.551 [DEBUG] [Thread-25257] [transport.py] [_log()] starting thread (client mode): 0xf1365ff0
2026-04-15T20:29:36.551 [DEBUG] [Thread-25257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:29:36.571 [DEBUG] [Thread-25257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:29:36.571 [INFO] [Thread-25257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:29:36.574 [DEBUG] [Thread-25257] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:29:36.574 [DEBUG] [Thread-25257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:29:36.574 [DEBUG] [Thread-25257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:29:36.574 [DEBUG] [Thread-25257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:29:36.574 [DEBUG] [Thread-25257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:29:36.575 [DEBUG] [Thread-25257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:29:36.575 [DEBUG] [Thread-25257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:29:36.575 [DEBUG] [Thread-25257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:29:36.575 [DEBUG] [Thread-25257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:29:36.575 [DEBUG] [Thread-25257] [transport.py] [_log()] client lang: <none>
2026-04-15T20:29:36.575 [DEBUG] [Thread-25257] [transport.py] [_log()] server lang: <none>
2026-04-15T20:29:36.575 [DEBUG] [Thread-25257] [transport.py] [_log()] kex follows: False
2026-04-15T20:29:36.575 [DEBUG] [Thread-25257] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:29:36.575 [DEBUG] [Thread-25257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:29:36.575 [DEBUG] [Thread-25257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:29:36.575 [DEBUG] [Thread-25257] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:29:36.576 [DEBUG] [Thread-25257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:29:36.576 [DEBUG] [Thread-25257] [transport.py] [_log()] Compression: none
2026-04-15T20:29:36.576 [DEBUG] [Thread-25257] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:29:36.590 [DEBUG] [Thread-25257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:29:36.591 [DEBUG] [Thread-25257] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:29:36.591 [DEBUG] [Thread-25257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:29:36.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:29:36.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:29:36.632 [DEBUG] [Thread-25257] [transport.py] [_log()] userauth is OK
2026-04-15T20:29:36.632 [DEBUG] [Thread-25257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:29:36.632 [DEBUG] [Thread-25257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:29:36.632 [DEBUG] [Thread-25257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:29:36.633 [DEBUG] [Thread-25257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:29:36.668 [INFO] [Thread-25257] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:29:36.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:29:36.746 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:29:36.747 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:29:37.442 [DEBUG] [Thread-25257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:29:37.443 [DEBUG] [Thread-25257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:29:37.443 [DEBUG] [Thread-25257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:29:37.483 [DEBUG] [Thread-25257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:29:37.483 [DEBUG] [Thread-25257] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:29:37.487 [DEBUG] [Thread-25257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:29:37.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:29:37.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:29:37.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:29:37.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:29:37.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:29:37.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:29:37.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:29:37.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:29:37.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:29:37.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.770271 -999.00   +9.70   8.78     79   +6.40 1 1 1 1 1     0    0 3.29 -3.60 ZNESW 10.7 8.8 297.4 10.6 10.3 -24.5 10.2 -23.3 9.9 -21.1 10.2 -23.2
2026-04-15T20:29:37.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:29:37.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:29:37.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.770271
2026-04-15T20:29:37.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:29:37.512 [DEBUG] [Thread-25257] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:29:37.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:29:37.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:29:37.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:29:37.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:29:37.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:29:08', tmtdew=4.06802, humidity=75.7149, cloud=0.0, wind=9.01728, temperature=9.62199, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:29:08', seeing=1.41, atlas_timestamp='2026-04-15T18:29:11.414', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07925000000000004, -0.055749999999999744, -0.06624999999999837, -0.05500000000000149, -0.037499999999999645, -0.004749999999999588, -0.019999999999999574, 0.006250000000001421, 0.030999999999998806, -0.02049999999999841, -0.08975000000000044, -0.009999999999999787, 0.02200000000000024, 0.01124999999999865, -0.05400000000000027, -0.016000000000000014, -0.003249999999999531, 0.008000000000000895, -0.028499999999999304, -0.014750000000001151, -0.00300000000000189, 0.01624999999999943, -0.008250000000000313, 0.01875000000000071, 0.03799999999999848, -0.0235000000000003, -0.0072499999999990905, -0.039499999999998536, -0.007999999999999119, -0.032999999999999474, 0.058000000000001606, 0.11500000000000021, -0.01425000000000054], zp_timestamp='2026-04-15T18:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:29:37.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:29:37.774 [DEBUG] [Thread-25260] [transport.py] [_log()] starting thread (client mode): 0xee9042e0
2026-04-15T20:29:37.774 [DEBUG] [Thread-25260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:29:37.789 [DEBUG] [Thread-25260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:29:37.789 [INFO] [Thread-25260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:29:37.796 [DEBUG] [Thread-25260] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:29:37.796 [DEBUG] [Thread-25260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:29:37.796 [DEBUG] [Thread-25260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:29:37.796 [DEBUG] [Thread-25260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:29:37.796 [DEBUG] [Thread-25260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:29:37.797 [DEBUG] [Thread-25260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:29:37.797 [DEBUG] [Thread-25260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:29:37.797 [DEBUG] [Thread-25260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:29:37.797 [DEBUG] [Thread-25260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:29:37.797 [DEBUG] [Thread-25260] [transport.py] [_log()] client lang: <none>
2026-04-15T20:29:37.797 [DEBUG] [Thread-25260] [transport.py] [_log()] server lang: <none>
2026-04-15T20:29:37.797 [DEBUG] [Thread-25260] [transport.py] [_log()] kex follows: False
2026-04-15T20:29:37.797 [DEBUG] [Thread-25260] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:29:37.797 [DEBUG] [Thread-25260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:29:37.797 [DEBUG] [Thread-25260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:29:37.797 [DEBUG] [Thread-25260] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:29:37.798 [DEBUG] [Thread-25260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:29:37.798 [DEBUG] [Thread-25260] [transport.py] [_log()] Compression: none
2026-04-15T20:29:37.798 [DEBUG] [Thread-25260] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:29:37.855 [DEBUG] [Thread-25260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:29:37.855 [DEBUG] [Thread-25260] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:29:37.856 [DEBUG] [Thread-25260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:29:37.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:29:37.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:29:37.912 [DEBUG] [Thread-25260] [transport.py] [_log()] userauth is OK
2026-04-15T20:29:37.912 [DEBUG] [Thread-25260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:29:37.912 [DEBUG] [Thread-25260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:29:37.912 [DEBUG] [Thread-25260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:29:37.912 [DEBUG] [Thread-25260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:29:37.937 [INFO] [Thread-25260] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:29:37.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:29:37.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:29:38.760 [DEBUG] [Thread-25260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:29:38.760 [DEBUG] [Thread-25260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:29:38.808 [DEBUG] [Thread-25260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:29:38.808 [DEBUG] [Thread-25260] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:29:38.816 [DEBUG] [Thread-25260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:29:38.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:29:38.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')
2026-04-15T20:29:38.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
2026-04-15T20:29:38.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:29:38.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:29:38.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:29:38.849 [DEBUG] [Thread-25260] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:29:46.814 [DEBUG] [Thread-25262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:29:49.691 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:29:52.887 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:29:58.005 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:30:01.853 [DEBUG] [Thread-25263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:30:03.870 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:30:08.210 [DEBUG] [Thread-25264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:30:08.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:30:08.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:30:08.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
2026-04-15T20:30:10.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 29, 43), 3.93705, 76.4298, 0.0, 9.882, 9.77715, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:30:10.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:29:43
2026-04-15T20:30:10.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:30:11.053 [DEBUG] [Thread-25265] [transport.py] [_log()] starting thread (client mode): 0xee905210
2026-04-15T20:30:11.053 [DEBUG] [Thread-25265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:30:11.072 [DEBUG] [Thread-25265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:30:11.072 [INFO] [Thread-25265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] client lang: <none>
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] server lang: <none>
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] kex follows: False
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:30:11.074 [DEBUG] [Thread-25265] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:30:11.075 [DEBUG] [Thread-25265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:30:11.075 [DEBUG] [Thread-25265] [transport.py] [_log()] Compression: none
2026-04-15T20:30:11.075 [DEBUG] [Thread-25265] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:30:11.082 [DEBUG] [Thread-25265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:30:11.082 [DEBUG] [Thread-25265] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:30:11.083 [DEBUG] [Thread-25265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:30:11.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:30:11.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:30:11.083 [DEBUG] [Thread-25265] [transport.py] [_log()] userauth is OK
2026-04-15T20:30:11.084 [DEBUG] [Thread-25265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:30:11.084 [DEBUG] [Thread-25265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:30:11.084 [DEBUG] [Thread-25265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:30:11.084 [DEBUG] [Thread-25265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:30:11.098 [INFO] [Thread-25265] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:30:11.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:30:16.882 [DEBUG] [Thread-25267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:30:17.839 [DEBUG] [Thread-25265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:30:17.839 [DEBUG] [Thread-25265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:30:17.840 [DEBUG] [Thread-25265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:30:17.880 [DEBUG] [Thread-25265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:30:17.880 [DEBUG] [Thread-25265] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:30:17.883 [DEBUG] [Thread-25265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:30:17.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:30:17.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:30:17.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:30:17.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:30:17.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:30:17.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:30:17.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:30:17.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:30:17.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:30:17.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.770618 -999.00   +9.70   9.16     79   +6.40 1 1 1 1 1     0    0 3.27 -3.62 ZNESW 9.2 9.2 293.8 12.5 10.3 -24.5 10.3 -23.2 9.9 -21.1 10.2 -23.3
2026-04-15T20:30:17.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:30:17.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:30:17.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.770618
2026-04-15T20:30:17.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:30:17.919 [DEBUG] [Thread-25265] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:30:17.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:30:17.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:30:17.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:30:17.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:30:17.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:29:43', tmtdew=3.93705, humidity=76.4298, cloud=0.0, wind=9.882, temperature=9.77715, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:29:43', seeing=1.18, atlas_timestamp='2026-04-15T18:29:41.395', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07925000000000004, -0.055749999999999744, -0.06624999999999837, -0.05500000000000149, -0.037499999999999645, -0.004749999999999588, -0.019999999999999574, 0.006250000000001421, 0.030999999999998806, -0.02049999999999841, -0.08975000000000044, -0.009999999999999787, 0.02200000000000024, 0.01124999999999865, -0.05400000000000027, -0.016000000000000014, -0.003249999999999531, 0.008000000000000895, -0.028499999999999304, -0.014750000000001151, -0.00300000000000189, 0.01624999999999943, -0.008250000000000313, 0.01875000000000071, 0.03799999999999848, -0.0235000000000003, -0.0072499999999990905, -0.039499999999998536, -0.007999999999999119, -0.032999999999999474, 0.058000000000001606, 0.11500000000000021, -0.01425000000000054], zp_timestamp='2026-04-15T18:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:30:18.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:30:18.180 [DEBUG] [Thread-25269] [transport.py] [_log()] starting thread (client mode): 0xee907c10
2026-04-15T20:30:18.180 [DEBUG] [Thread-25269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:30:18.195 [DEBUG] [Thread-25269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:30:18.195 [INFO] [Thread-25269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:30:18.202 [DEBUG] [Thread-25269] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:30:18.202 [DEBUG] [Thread-25269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:30:18.203 [DEBUG] [Thread-25269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:30:18.203 [DEBUG] [Thread-25269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:30:18.203 [DEBUG] [Thread-25269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:30:18.203 [DEBUG] [Thread-25269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:30:18.203 [DEBUG] [Thread-25269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:30:18.203 [DEBUG] [Thread-25269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:30:18.203 [DEBUG] [Thread-25269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:30:18.203 [DEBUG] [Thread-25269] [transport.py] [_log()] client lang: <none>
2026-04-15T20:30:18.203 [DEBUG] [Thread-25269] [transport.py] [_log()] server lang: <none>
2026-04-15T20:30:18.203 [DEBUG] [Thread-25269] [transport.py] [_log()] kex follows: False
2026-04-15T20:30:18.203 [DEBUG] [Thread-25269] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:30:18.203 [DEBUG] [Thread-25269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:30:18.204 [DEBUG] [Thread-25269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:30:18.204 [DEBUG] [Thread-25269] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:30:18.204 [DEBUG] [Thread-25269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:30:18.204 [DEBUG] [Thread-25269] [transport.py] [_log()] Compression: none
2026-04-15T20:30:18.204 [DEBUG] [Thread-25269] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:30:18.258 [DEBUG] [Thread-25269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:30:18.258 [DEBUG] [Thread-25269] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:30:18.259 [DEBUG] [Thread-25269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:30:18.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:30:18.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:30:18.315 [DEBUG] [Thread-25269] [transport.py] [_log()] userauth is OK
2026-04-15T20:30:18.315 [DEBUG] [Thread-25269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:30:18.315 [DEBUG] [Thread-25269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:30:18.315 [DEBUG] [Thread-25269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:30:18.315 [DEBUG] [Thread-25269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:30:18.335 [INFO] [Thread-25269] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:30:18.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:30:18.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:30:19.197 [DEBUG] [Thread-25269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:30:19.197 [DEBUG] [Thread-25269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:30:19.245 [DEBUG] [Thread-25269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:30:19.245 [DEBUG] [Thread-25269] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:30:19.254 [DEBUG] [Thread-25269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:30:19.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:30:19.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')
2026-04-15T20:30:19.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
2026-04-15T20:30:19.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:30:19.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:30:19.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:30:19.289 [DEBUG] [Thread-25269] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:30:23.869 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:30:28.242 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:30:31.911 [DEBUG] [Thread-25271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:30:36.948 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:30:36.949 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:30:46.952 [DEBUG] [Thread-25272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:30:47.734 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:30:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:30:49.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:30:49.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
2026-04-15T20:30:50.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 30, 18), 4.05961, 75.7647, 0.0, 9.01728, 9.70522, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:30:50.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:30:18
2026-04-15T20:30:51.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:30:51.448 [DEBUG] [Thread-25273] [transport.py] [_log()] starting thread (client mode): 0xee906860
2026-04-15T20:30:51.449 [DEBUG] [Thread-25273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:30:51.469 [DEBUG] [Thread-25273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:30:51.469 [INFO] [Thread-25273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:30:51.472 [DEBUG] [Thread-25273] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:30:51.472 [DEBUG] [Thread-25273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:30:51.472 [DEBUG] [Thread-25273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:30:51.473 [DEBUG] [Thread-25273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:30:51.473 [DEBUG] [Thread-25273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:30:51.473 [DEBUG] [Thread-25273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:30:51.473 [DEBUG] [Thread-25273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:30:51.473 [DEBUG] [Thread-25273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:30:51.473 [DEBUG] [Thread-25273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:30:51.473 [DEBUG] [Thread-25273] [transport.py] [_log()] client lang: <none>
2026-04-15T20:30:51.473 [DEBUG] [Thread-25273] [transport.py] [_log()] server lang: <none>
2026-04-15T20:30:51.473 [DEBUG] [Thread-25273] [transport.py] [_log()] kex follows: False
2026-04-15T20:30:51.473 [DEBUG] [Thread-25273] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:30:51.473 [DEBUG] [Thread-25273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:30:51.474 [DEBUG] [Thread-25273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:30:51.474 [DEBUG] [Thread-25273] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:30:51.474 [DEBUG] [Thread-25273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:30:51.474 [DEBUG] [Thread-25273] [transport.py] [_log()] Compression: none
2026-04-15T20:30:51.474 [DEBUG] [Thread-25273] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:30:51.491 [DEBUG] [Thread-25273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:30:51.491 [DEBUG] [Thread-25273] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:30:51.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:30:51.492 [DEBUG] [Thread-25273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:30:51.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:30:51.493 [DEBUG] [Thread-25273] [transport.py] [_log()] userauth is OK
2026-04-15T20:30:51.493 [DEBUG] [Thread-25273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:30:51.493 [DEBUG] [Thread-25273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:30:51.494 [DEBUG] [Thread-25273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:30:51.494 [DEBUG] [Thread-25273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:30:51.512 [INFO] [Thread-25273] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:30:51.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:30:52.327 [DEBUG] [Thread-25273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:30:52.327 [DEBUG] [Thread-25273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:30:52.328 [DEBUG] [Thread-25273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:30:52.368 [DEBUG] [Thread-25273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:30:52.368 [DEBUG] [Thread-25273] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:30:52.370 [DEBUG] [Thread-25273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:30:52.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:30:52.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:30:52.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:30:52.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:30:52.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:30:52.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:30:52.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:30:52.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:30:52.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:30:52.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.770966 -999.00   +9.70   9.90     79   +6.40 1 1 1 1 1     0    0 3.30 -3.81 ZNESW 9.4 9.9 295.0 11.9 10.3 -24.4 10.2 -23.2 9.9 -21.2 10.2 -23.3
2026-04-15T20:30:52.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:30:52.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:30:52.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.770966
2026-04-15T20:30:52.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:30:52.393 [DEBUG] [Thread-25273] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:30:52.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:30:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:30:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:30:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:30:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:30:18', tmtdew=4.05961, humidity=75.7647, cloud=0.0, wind=9.01728, temperature=9.70522, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:30:18', seeing=1.34, atlas_timestamp='2026-04-15T18:30:11.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07925000000000004, -0.055749999999999744, -0.06624999999999837, -0.05500000000000149, -0.037499999999999645, -0.004749999999999588, -0.019999999999999574, 0.006250000000001421, 0.030999999999998806, -0.02049999999999841, -0.08975000000000044, -0.009999999999999787, 0.02200000000000024, 0.01124999999999865, -0.05400000000000027, -0.016000000000000014, -0.003249999999999531, 0.008000000000000895, -0.028499999999999304, -0.014750000000001151, -0.00300000000000189, 0.01624999999999943, -0.008250000000000313, 0.01875000000000071, 0.03799999999999848, -0.0235000000000003, -0.0072499999999990905, -0.039499999999998536, -0.007999999999999119, -0.032999999999999474, 0.058000000000001606, 0.11500000000000021, -0.01425000000000054], zp_timestamp='2026-04-15T18:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:30:52.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:30:52.663 [DEBUG] [Thread-25276] [transport.py] [_log()] starting thread (client mode): 0xee9052a0
2026-04-15T20:30:52.663 [DEBUG] [Thread-25276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:30:52.679 [DEBUG] [Thread-25276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:30:52.679 [INFO] [Thread-25276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:30:52.687 [DEBUG] [Thread-25276] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:30:52.687 [DEBUG] [Thread-25276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:30:52.687 [DEBUG] [Thread-25276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:30:52.688 [DEBUG] [Thread-25276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:30:52.688 [DEBUG] [Thread-25276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:30:52.688 [DEBUG] [Thread-25276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:30:52.688 [DEBUG] [Thread-25276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:30:52.688 [DEBUG] [Thread-25276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:30:52.688 [DEBUG] [Thread-25276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:30:52.688 [DEBUG] [Thread-25276] [transport.py] [_log()] client lang: <none>
2026-04-15T20:30:52.688 [DEBUG] [Thread-25276] [transport.py] [_log()] server lang: <none>
2026-04-15T20:30:52.688 [DEBUG] [Thread-25276] [transport.py] [_log()] kex follows: False
2026-04-15T20:30:52.688 [DEBUG] [Thread-25276] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:30:52.688 [DEBUG] [Thread-25276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:30:52.688 [DEBUG] [Thread-25276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:30:52.689 [DEBUG] [Thread-25276] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:30:52.689 [DEBUG] [Thread-25276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:30:52.689 [DEBUG] [Thread-25276] [transport.py] [_log()] Compression: none
2026-04-15T20:30:52.689 [DEBUG] [Thread-25276] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:30:52.701 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:30:52.747 [DEBUG] [Thread-25276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:30:52.747 [DEBUG] [Thread-25276] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:30:52.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:30:52.748 [DEBUG] [Thread-25276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:30:52.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:30:52.802 [DEBUG] [Thread-25276] [transport.py] [_log()] userauth is OK
2026-04-15T20:30:52.803 [DEBUG] [Thread-25276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:30:52.803 [DEBUG] [Thread-25276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:30:52.803 [DEBUG] [Thread-25276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:30:52.803 [DEBUG] [Thread-25276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:30:52.830 [INFO] [Thread-25276] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:30:52.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:30:52.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:30:53.647 [DEBUG] [Thread-25276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:30:53.648 [DEBUG] [Thread-25276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:30:53.695 [DEBUG] [Thread-25276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:30:53.695 [DEBUG] [Thread-25276] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:30:53.705 [DEBUG] [Thread-25276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:30:53.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:30:53.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')
2026-04-15T20:30:53.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
2026-04-15T20:30:53.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:30:53.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:30:53.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:30:53.741 [DEBUG] [Thread-25276] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:30:59.250 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:31:01.983 [DEBUG] [Thread-25278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:31:03.624 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:31:08.356 [DEBUG] [Thread-25279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:31:17.029 [DEBUG] [Thread-25280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:31:23.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:31:23.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:31:23.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
2026-04-15T20:31:25.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 30, 54), 3.90567, 76.5959, 0.0, 9.0, 9.77735, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:31:25.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:30:54
2026-04-15T20:31:25.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:31:25.839 [DEBUG] [Thread-25281] [transport.py] [_log()] starting thread (client mode): 0xee905900
2026-04-15T20:31:25.840 [DEBUG] [Thread-25281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:31:25.860 [DEBUG] [Thread-25281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:31:25.860 [INFO] [Thread-25281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:31:25.863 [DEBUG] [Thread-25281] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:31:25.864 [DEBUG] [Thread-25281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:31:25.864 [DEBUG] [Thread-25281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:31:25.864 [DEBUG] [Thread-25281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:31:25.864 [DEBUG] [Thread-25281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:31:25.864 [DEBUG] [Thread-25281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:31:25.864 [DEBUG] [Thread-25281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:31:25.864 [DEBUG] [Thread-25281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:31:25.864 [DEBUG] [Thread-25281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:31:25.864 [DEBUG] [Thread-25281] [transport.py] [_log()] client lang: <none>
2026-04-15T20:31:25.864 [DEBUG] [Thread-25281] [transport.py] [_log()] server lang: <none>
2026-04-15T20:31:25.864 [DEBUG] [Thread-25281] [transport.py] [_log()] kex follows: False
2026-04-15T20:31:25.865 [DEBUG] [Thread-25281] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:31:25.865 [DEBUG] [Thread-25281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:31:25.865 [DEBUG] [Thread-25281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:31:25.865 [DEBUG] [Thread-25281] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:31:25.865 [DEBUG] [Thread-25281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:31:25.865 [DEBUG] [Thread-25281] [transport.py] [_log()] Compression: none
2026-04-15T20:31:25.865 [DEBUG] [Thread-25281] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:31:25.883 [DEBUG] [Thread-25281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:31:25.883 [DEBUG] [Thread-25281] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:31:25.883 [DEBUG] [Thread-25281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:31:25.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:31:25.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:31:25.885 [DEBUG] [Thread-25281] [transport.py] [_log()] userauth is OK
2026-04-15T20:31:25.885 [DEBUG] [Thread-25281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:31:25.885 [DEBUG] [Thread-25281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:31:25.885 [DEBUG] [Thread-25281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:31:25.885 [DEBUG] [Thread-25281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:31:25.912 [INFO] [Thread-25281] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:31:25.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:31:26.687 [DEBUG] [Thread-25281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:31:26.687 [DEBUG] [Thread-25281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:31:26.688 [DEBUG] [Thread-25281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:31:26.729 [DEBUG] [Thread-25281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:31:26.729 [DEBUG] [Thread-25281] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:31:26.731 [DEBUG] [Thread-25281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:31:26.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:31:26.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:31:26.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:31:26.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:31:26.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:31:26.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:31:26.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:31:26.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:31:26.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:31:26.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.771312 -999.00   +9.70   9.70     79   +6.30 1 1 1 1 1     0    0 3.33 -3.49 ZNESW 9.6 9.7 288.4 10.4 10.3 -24.4 10.2 -23.2 9.9 -21.1 10.2 -23.2
2026-04-15T20:31:26.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:31:26.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:31:26.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.771312
2026-04-15T20:31:26.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:31:26.751 [DEBUG] [Thread-25281] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:31:26.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:31:26.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:31:26.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:31:26.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:31:26.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:30:54', tmtdew=3.90567, humidity=76.5959, cloud=0.0, wind=9.0, temperature=9.77735, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:30:54', seeing=1.37, atlas_timestamp='2026-04-15T18:30:41.357', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07925000000000004, -0.055749999999999744, -0.06624999999999837, -0.05500000000000149, -0.037499999999999645, -0.004749999999999588, -0.019999999999999574, 0.006250000000001421, 0.030999999999998806, -0.02049999999999841, -0.08975000000000044, -0.009999999999999787, 0.02200000000000024, 0.01124999999999865, -0.05400000000000027, -0.016000000000000014, -0.003249999999999531, 0.008000000000000895, -0.028499999999999304, -0.014750000000001151, -0.00300000000000189, 0.01624999999999943, -0.008250000000000313, 0.01875000000000071, 0.03799999999999848, -0.0235000000000003, -0.0072499999999990905, -0.039499999999998536, -0.007999999999999119, -0.032999999999999474, 0.058000000000001606, 0.11500000000000021, -0.01425000000000054], zp_timestamp='2026-04-15T18:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:31:26.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:31:26.983 [DEBUG] [Thread-25284] [transport.py] [_log()] starting thread (client mode): 0xee907250
2026-04-15T20:31:26.983 [DEBUG] [Thread-25284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:31:26.998 [DEBUG] [Thread-25284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:31:26.998 [INFO] [Thread-25284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:31:27.005 [DEBUG] [Thread-25284] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:31:27.005 [DEBUG] [Thread-25284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:31:27.005 [DEBUG] [Thread-25284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:31:27.005 [DEBUG] [Thread-25284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:31:27.005 [DEBUG] [Thread-25284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:31:27.005 [DEBUG] [Thread-25284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:31:27.005 [DEBUG] [Thread-25284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:31:27.005 [DEBUG] [Thread-25284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:31:27.006 [DEBUG] [Thread-25284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:31:27.006 [DEBUG] [Thread-25284] [transport.py] [_log()] client lang: <none>
2026-04-15T20:31:27.006 [DEBUG] [Thread-25284] [transport.py] [_log()] server lang: <none>
2026-04-15T20:31:27.006 [DEBUG] [Thread-25284] [transport.py] [_log()] kex follows: False
2026-04-15T20:31:27.006 [DEBUG] [Thread-25284] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:31:27.006 [DEBUG] [Thread-25284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:31:27.006 [DEBUG] [Thread-25284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:31:27.006 [DEBUG] [Thread-25284] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:31:27.006 [DEBUG] [Thread-25284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:31:27.006 [DEBUG] [Thread-25284] [transport.py] [_log()] Compression: none
2026-04-15T20:31:27.006 [DEBUG] [Thread-25284] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:31:27.061 [DEBUG] [Thread-25284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:31:27.061 [DEBUG] [Thread-25284] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:31:27.062 [DEBUG] [Thread-25284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:31:27.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:31:27.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:31:27.118 [DEBUG] [Thread-25284] [transport.py] [_log()] userauth is OK
2026-04-15T20:31:27.118 [DEBUG] [Thread-25284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:31:27.118 [DEBUG] [Thread-25284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:31:27.118 [DEBUG] [Thread-25284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:31:27.118 [DEBUG] [Thread-25284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:31:27.140 [INFO] [Thread-25284] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:31:27.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:31:27.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:31:27.983 [DEBUG] [Thread-25284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:31:27.983 [DEBUG] [Thread-25284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:31:28.031 [DEBUG] [Thread-25284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:31:28.031 [DEBUG] [Thread-25284] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:31:28.040 [DEBUG] [Thread-25284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:31:28.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:31:28.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')
2026-04-15T20:31:28.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
2026-04-15T20:31:28.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:31:28.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:31:28.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:31:28.076 [DEBUG] [Thread-25284] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:31:32.060 [DEBUG] [Thread-25286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:31:37.151 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:31:37.151 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:31:47.104 [DEBUG] [Thread-25287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:31:58.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:31:58.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:31:58.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
2026-04-15T20:31:59.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 31, 29), 4.04247, 75.8477, 0.0, 8.84088, 9.6055, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:31:59.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:31:29
2026-04-15T20:31:59.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:32:00.203 [DEBUG] [Thread-25288] [transport.py] [_log()] starting thread (client mode): 0xee907130
2026-04-15T20:32:00.203 [DEBUG] [Thread-25288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:32:00.223 [DEBUG] [Thread-25288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:32:00.223 [INFO] [Thread-25288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:32:00.226 [DEBUG] [Thread-25288] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:32:00.226 [DEBUG] [Thread-25288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:32:00.227 [DEBUG] [Thread-25288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:32:00.227 [DEBUG] [Thread-25288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:32:00.227 [DEBUG] [Thread-25288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:32:00.227 [DEBUG] [Thread-25288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:32:00.227 [DEBUG] [Thread-25288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:32:00.227 [DEBUG] [Thread-25288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:32:00.227 [DEBUG] [Thread-25288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:32:00.227 [DEBUG] [Thread-25288] [transport.py] [_log()] client lang: <none>
2026-04-15T20:32:00.227 [DEBUG] [Thread-25288] [transport.py] [_log()] server lang: <none>
2026-04-15T20:32:00.227 [DEBUG] [Thread-25288] [transport.py] [_log()] kex follows: False
2026-04-15T20:32:00.228 [DEBUG] [Thread-25288] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:32:00.228 [DEBUG] [Thread-25288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:32:00.228 [DEBUG] [Thread-25288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:32:00.228 [DEBUG] [Thread-25288] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:32:00.228 [DEBUG] [Thread-25288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:32:00.228 [DEBUG] [Thread-25288] [transport.py] [_log()] Compression: none
2026-04-15T20:32:00.228 [DEBUG] [Thread-25288] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:32:00.245 [DEBUG] [Thread-25288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:32:00.246 [DEBUG] [Thread-25288] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:32:00.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:32:00.246 [DEBUG] [Thread-25288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:32:00.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:32:00.288 [DEBUG] [Thread-25288] [transport.py] [_log()] userauth is OK
2026-04-15T20:32:00.288 [DEBUG] [Thread-25288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:32:00.289 [DEBUG] [Thread-25288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:32:00.289 [DEBUG] [Thread-25288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:32:00.289 [DEBUG] [Thread-25288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:32:00.312 [INFO] [Thread-25288] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:32:00.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:32:01.166 [DEBUG] [Thread-25288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:32:01.166 [DEBUG] [Thread-25288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:32:01.167 [DEBUG] [Thread-25288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:32:01.207 [DEBUG] [Thread-25288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:32:01.207 [DEBUG] [Thread-25288] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:32:01.210 [DEBUG] [Thread-25288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:32:01.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:32:01.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:32:01.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:32:01.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:32:01.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:32:01.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:32:01.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:32:01.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:32:01.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:32:01.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.771660 -999.00   +9.60   9.11     79   +6.30 1 1 1 1 1     0    0 3.32 -3.24 ZNESW 8.9 9.1 284.2 9.9 10.3 -24.4 10.2 -23.2 9.9 -21.0 10.2 -23.2
2026-04-15T20:32:01.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:32:01.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:32:01.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.771660
2026-04-15T20:32:01.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:32:01.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:32:01.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:32:01.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:32:01.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:32:01.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:31:29', tmtdew=4.04247, humidity=75.8477, cloud=0.0, wind=8.84088, temperature=9.6055, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:31:30', seeing=1.34, atlas_timestamp='2026-04-15T18:31:11.424', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07175000000000153, -0.08224999999999838, -0.07874999999999943, -0.09149999999999991, -0.04449999999999932, -0.012249999999998096, -0.05400000000000027, -0.01774999999999949, -0.031000000000000583, -0.041499999999999204, -0.06325000000000003, -0.04800000000000004, -0.0259999999999998, -0.0017500000000012506, -0.03250000000000064, -0.0129999999999999, -0.021250000000000213, -0.03500000000000014, -0.03900000000000148, -0.0027500000000006963, 0.015499999999999403, -0.008250000000002089, -0.04324999999999868, 0.036749999999999616, 0.04299999999999926, -0.059499999999999886, -0.03524999999999956, -0.0235000000000003, -0.0009999999999994458, -0.047999999999998266, 0.011000000000001009, 0.09950000000000081, -0.02725000000000044], zp_timestamp='2026-04-15T18:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:32:01.231 [DEBUG] [Thread-25288] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:32:01.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:32:01.454 [DEBUG] [Thread-25291] [transport.py] [_log()] starting thread (client mode): 0xf1335cf0
2026-04-15T20:32:01.454 [DEBUG] [Thread-25291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:32:01.469 [DEBUG] [Thread-25291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:32:01.469 [INFO] [Thread-25291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:32:01.477 [DEBUG] [Thread-25291] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:32:01.477 [DEBUG] [Thread-25291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:32:01.477 [DEBUG] [Thread-25291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:32:01.477 [DEBUG] [Thread-25291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:32:01.478 [DEBUG] [Thread-25291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:32:01.478 [DEBUG] [Thread-25291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:32:01.478 [DEBUG] [Thread-25291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:32:01.478 [DEBUG] [Thread-25291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:32:01.478 [DEBUG] [Thread-25291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:32:01.478 [DEBUG] [Thread-25291] [transport.py] [_log()] client lang: <none>
2026-04-15T20:32:01.478 [DEBUG] [Thread-25291] [transport.py] [_log()] server lang: <none>
2026-04-15T20:32:01.478 [DEBUG] [Thread-25291] [transport.py] [_log()] kex follows: False
2026-04-15T20:32:01.478 [DEBUG] [Thread-25291] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:32:01.478 [DEBUG] [Thread-25291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:32:01.478 [DEBUG] [Thread-25291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:32:01.479 [DEBUG] [Thread-25291] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:32:01.479 [DEBUG] [Thread-25291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:32:01.479 [DEBUG] [Thread-25291] [transport.py] [_log()] Compression: none
2026-04-15T20:32:01.479 [DEBUG] [Thread-25291] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:32:01.533 [DEBUG] [Thread-25291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:32:01.534 [DEBUG] [Thread-25291] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:32:01.534 [DEBUG] [Thread-25291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:32:01.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:32:01.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:32:01.589 [DEBUG] [Thread-25291] [transport.py] [_log()] userauth is OK
2026-04-15T20:32:01.589 [DEBUG] [Thread-25291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:32:01.589 [DEBUG] [Thread-25291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:32:01.589 [DEBUG] [Thread-25291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:32:01.590 [DEBUG] [Thread-25291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:32:01.612 [INFO] [Thread-25291] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:32:01.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:32:01.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:32:02.133 [DEBUG] [Thread-25293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:32:02.500 [DEBUG] [Thread-25291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:32:02.500 [DEBUG] [Thread-25291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:32:02.548 [DEBUG] [Thread-25291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:32:02.548 [DEBUG] [Thread-25291] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:32:02.557 [DEBUG] [Thread-25291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:32:02.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:32:02.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')
2026-04-15T20:32: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
2026-04-15T20:32:02.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:32:02.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:32:02.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:32:02.595 [DEBUG] [Thread-25291] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:32:08.523 [DEBUG] [Thread-25294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:32:13.981 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:32:17.178 [DEBUG] [Thread-25295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:32:18.142 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:32:24.537 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:32:29.932 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:32:32.210 [DEBUG] [Thread-25296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:32:32.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:32:32.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:32:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T20:32:33.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 32, 5), 4.03359, 75.8975, 0.0, 8.85852, 9.62209, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:32:33.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:32:05
2026-04-15T20:32:34.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:32:34.763 [DEBUG] [Thread-25297] [transport.py] [_log()] starting thread (client mode): 0xf13cbf40
2026-04-15T20:32:34.763 [DEBUG] [Thread-25297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:32:34.784 [DEBUG] [Thread-25297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:32:34.784 [INFO] [Thread-25297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:32:34.787 [DEBUG] [Thread-25297] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:32:34.787 [DEBUG] [Thread-25297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:32:34.787 [DEBUG] [Thread-25297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:32:34.787 [DEBUG] [Thread-25297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:32:34.787 [DEBUG] [Thread-25297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:32:34.787 [DEBUG] [Thread-25297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:32:34.787 [DEBUG] [Thread-25297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:32:34.788 [DEBUG] [Thread-25297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:32:34.788 [DEBUG] [Thread-25297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:32:34.788 [DEBUG] [Thread-25297] [transport.py] [_log()] client lang: <none>
2026-04-15T20:32:34.788 [DEBUG] [Thread-25297] [transport.py] [_log()] server lang: <none>
2026-04-15T20:32:34.788 [DEBUG] [Thread-25297] [transport.py] [_log()] kex follows: False
2026-04-15T20:32:34.788 [DEBUG] [Thread-25297] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:32:34.788 [DEBUG] [Thread-25297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:32:34.788 [DEBUG] [Thread-25297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:32:34.788 [DEBUG] [Thread-25297] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:32:34.788 [DEBUG] [Thread-25297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:32:34.788 [DEBUG] [Thread-25297] [transport.py] [_log()] Compression: none
2026-04-15T20:32:34.788 [DEBUG] [Thread-25297] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:32:34.806 [DEBUG] [Thread-25297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:32:34.806 [DEBUG] [Thread-25297] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:32:34.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:32:34.807 [DEBUG] [Thread-25297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:32:34.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:32:34.808 [DEBUG] [Thread-25297] [transport.py] [_log()] userauth is OK
2026-04-15T20:32:34.808 [DEBUG] [Thread-25297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:32:34.808 [DEBUG] [Thread-25297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:32:34.808 [DEBUG] [Thread-25297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:32:34.808 [DEBUG] [Thread-25297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:32:34.838 [INFO] [Thread-25297] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:32:34.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:32:35.327 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:32:35.636 [DEBUG] [Thread-25297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:32:35.636 [DEBUG] [Thread-25297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:32:35.637 [DEBUG] [Thread-25297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:32:35.677 [DEBUG] [Thread-25297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:32:35.677 [DEBUG] [Thread-25297] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:32:35.680 [DEBUG] [Thread-25297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:32:35.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:32:35.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:32:35.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:32:35.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:32:35.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:32:35.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:32:35.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:32:35.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:32:35.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:32:35.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.772007 -999.00   +9.60  10.89     79   +6.30 1 1 1 1 1     0    0 3.26 -3.31 ZNESW 9.4 10.9 281.6 12.0 10.3 -24.5 10.2 -23.1 9.9 -21.1 10.2 -23.2
2026-04-15T20:32:35.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:32:35.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:32:35.703 [DEBUG] [Thread-25297] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:32:35.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.772007
2026-04-15T20:32:35.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:32:35.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:32:35.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:32:35.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:32:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:32:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:32:05', tmtdew=4.03359, humidity=75.8975, cloud=0.0, wind=8.85852, temperature=9.62209, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:32:05', seeing=1.31, atlas_timestamp='2026-04-15T18:31:41.405', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07175000000000153, -0.08224999999999838, -0.07874999999999943, -0.09149999999999991, -0.04449999999999932, -0.012249999999998096, -0.05400000000000027, -0.01774999999999949, -0.031000000000000583, -0.041499999999999204, -0.06325000000000003, -0.04800000000000004, -0.0259999999999998, -0.0017500000000012506, -0.03250000000000064, -0.0129999999999999, -0.021250000000000213, -0.03500000000000014, -0.03900000000000148, -0.0027500000000006963, 0.015499999999999403, -0.008250000000002089, -0.04324999999999868, 0.036749999999999616, 0.04299999999999926, -0.059499999999999886, -0.03524999999999956, -0.0235000000000003, -0.0009999999999994458, -0.047999999999998266, 0.011000000000001009, 0.09950000000000081, -0.02725000000000044], zp_timestamp='2026-04-15T18:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:32:35.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:32:35.968 [DEBUG] [Thread-25300] [transport.py] [_log()] starting thread (client mode): 0xf13cb460
2026-04-15T20:32:35.968 [DEBUG] [Thread-25300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:32:35.983 [DEBUG] [Thread-25300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:32:35.983 [INFO] [Thread-25300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:32:35.990 [DEBUG] [Thread-25300] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:32:35.990 [DEBUG] [Thread-25300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:32:35.990 [DEBUG] [Thread-25300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:32:35.990 [DEBUG] [Thread-25300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:32:35.990 [DEBUG] [Thread-25300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:32:35.990 [DEBUG] [Thread-25300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:32:35.991 [DEBUG] [Thread-25300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:32:35.991 [DEBUG] [Thread-25300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:32:35.991 [DEBUG] [Thread-25300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:32:35.991 [DEBUG] [Thread-25300] [transport.py] [_log()] client lang: <none>
2026-04-15T20:32:35.991 [DEBUG] [Thread-25300] [transport.py] [_log()] server lang: <none>
2026-04-15T20:32:35.991 [DEBUG] [Thread-25300] [transport.py] [_log()] kex follows: False
2026-04-15T20:32:35.991 [DEBUG] [Thread-25300] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:32:35.991 [DEBUG] [Thread-25300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:32:35.991 [DEBUG] [Thread-25300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:32:35.991 [DEBUG] [Thread-25300] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:32:35.991 [DEBUG] [Thread-25300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:32:35.991 [DEBUG] [Thread-25300] [transport.py] [_log()] Compression: none
2026-04-15T20:32:35.991 [DEBUG] [Thread-25300] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:32:36.058 [DEBUG] [Thread-25300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:32:36.058 [DEBUG] [Thread-25300] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:32:36.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:32:36.059 [DEBUG] [Thread-25300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:32:36.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:32:36.113 [DEBUG] [Thread-25300] [transport.py] [_log()] userauth is OK
2026-04-15T20:32:36.113 [DEBUG] [Thread-25300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:32:36.113 [DEBUG] [Thread-25300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:32:36.114 [DEBUG] [Thread-25300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:32:36.114 [DEBUG] [Thread-25300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:32:36.134 [INFO] [Thread-25300] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:32:36.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:32:36.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:32:36.960 [DEBUG] [Thread-25300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:32:36.960 [DEBUG] [Thread-25300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:32:37.008 [DEBUG] [Thread-25300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:32:37.008 [DEBUG] [Thread-25300] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:32:37.017 [DEBUG] [Thread-25300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:32:37.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:32:37.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')
2026-04-15T20:32:37.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
2026-04-15T20:32:37.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:32:37.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:32:37.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:32:37.051 [DEBUG] [Thread-25300] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:32:37.352 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:32:37.353 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:32:40.756 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:32:46.135 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:32:47.239 [DEBUG] [Thread-25302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:32:51.590 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:32:57.033 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:02.276 [DEBUG] [Thread-25303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:02.413 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:07.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:33:07.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:33:07.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
2026-04-15T20:33:07.919 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:08.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 32, 41), 3.86126, 76.7951, 0.0, 10.8698, 9.54522, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:33:08.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:32:41
2026-04-15T20:33:08.688 [DEBUG] [Thread-25304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:33:09.173 [DEBUG] [Thread-25305] [transport.py] [_log()] starting thread (client mode): 0xee906a10
2026-04-15T20:33:09.173 [DEBUG] [Thread-25305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:33:09.192 [DEBUG] [Thread-25305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:33:09.192 [INFO] [Thread-25305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:33:09.195 [DEBUG] [Thread-25305] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:33:09.195 [DEBUG] [Thread-25305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:33:09.195 [DEBUG] [Thread-25305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:33:09.195 [DEBUG] [Thread-25305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:33:09.196 [DEBUG] [Thread-25305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:33:09.196 [DEBUG] [Thread-25305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:33:09.196 [DEBUG] [Thread-25305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:33:09.196 [DEBUG] [Thread-25305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:33:09.196 [DEBUG] [Thread-25305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:33:09.196 [DEBUG] [Thread-25305] [transport.py] [_log()] client lang: <none>
2026-04-15T20:33:09.196 [DEBUG] [Thread-25305] [transport.py] [_log()] server lang: <none>
2026-04-15T20:33:09.196 [DEBUG] [Thread-25305] [transport.py] [_log()] kex follows: False
2026-04-15T20:33:09.196 [DEBUG] [Thread-25305] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:33:09.196 [DEBUG] [Thread-25305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:33:09.196 [DEBUG] [Thread-25305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:33:09.197 [DEBUG] [Thread-25305] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:33:09.197 [DEBUG] [Thread-25305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:33:09.197 [DEBUG] [Thread-25305] [transport.py] [_log()] Compression: none
2026-04-15T20:33:09.197 [DEBUG] [Thread-25305] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:33:09.215 [DEBUG] [Thread-25305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:33:09.215 [DEBUG] [Thread-25305] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:33:09.216 [DEBUG] [Thread-25305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:33:09.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:33:09.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:33:09.217 [DEBUG] [Thread-25305] [transport.py] [_log()] userauth is OK
2026-04-15T20:33:09.217 [DEBUG] [Thread-25305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:33:09.217 [DEBUG] [Thread-25305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:33:09.217 [DEBUG] [Thread-25305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:33:09.217 [DEBUG] [Thread-25305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:33:09.235 [INFO] [Thread-25305] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:33:09.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:33:10.001 [DEBUG] [Thread-25305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:33:10.002 [DEBUG] [Thread-25305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:33:10.002 [DEBUG] [Thread-25305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:33:10.042 [DEBUG] [Thread-25305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:33:10.042 [DEBUG] [Thread-25305] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:33:10.044 [DEBUG] [Thread-25305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:33:10.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:33:10.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:33:10.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:33:10.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:33:10.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:33:10.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:33:10.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:33:10.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:33:10.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:33:10.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.772701 -999.00   +9.70  11.29     79   +6.30 1 1 1 1 1     0    0 3.36 -2.48 ZNESW 10.6 11.3 279.4 13.4 10.3 -24.5 10.3 -23.2 9.9 -21.2 10.2 -23.3
2026-04-15T20:33:10.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:33:10.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:33:10.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.772701
2026-04-15T20:33:10.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:33:10.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:33:10.070 [DEBUG] [Thread-25305] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:33:10.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:33:10.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:33:10.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:33:10.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:32:41', tmtdew=3.86126, humidity=76.7951, cloud=0.0, wind=10.8698, temperature=9.54522, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:32:41', seeing=1.44, atlas_timestamp='2026-04-15T18:32:41.366', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07175000000000153, -0.08224999999999838, -0.07874999999999943, -0.09149999999999991, -0.04449999999999932, -0.012249999999998096, -0.05400000000000027, -0.01774999999999949, -0.031000000000000583, -0.041499999999999204, -0.06325000000000003, -0.04800000000000004, -0.0259999999999998, -0.0017500000000012506, -0.03250000000000064, -0.0129999999999999, -0.021250000000000213, -0.03500000000000014, -0.03900000000000148, -0.0027500000000006963, 0.015499999999999403, -0.008250000000002089, -0.04324999999999868, 0.036749999999999616, 0.04299999999999926, -0.059499999999999886, -0.03524999999999956, -0.0235000000000003, -0.0009999999999994458, -0.047999999999998266, 0.011000000000001009, 0.09950000000000081, -0.02725000000000044], zp_timestamp='2026-04-15T18:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:33:10.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:33:10.326 [DEBUG] [Thread-25308] [transport.py] [_log()] starting thread (client mode): 0xf1367220
2026-04-15T20:33:10.326 [DEBUG] [Thread-25308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:33:10.341 [DEBUG] [Thread-25308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:33:10.341 [INFO] [Thread-25308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:33:10.348 [DEBUG] [Thread-25308] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:33:10.348 [DEBUG] [Thread-25308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:33:10.348 [DEBUG] [Thread-25308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:33:10.348 [DEBUG] [Thread-25308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:33:10.349 [DEBUG] [Thread-25308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:33:10.349 [DEBUG] [Thread-25308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:33:10.349 [DEBUG] [Thread-25308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:33:10.349 [DEBUG] [Thread-25308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:33:10.349 [DEBUG] [Thread-25308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:33:10.349 [DEBUG] [Thread-25308] [transport.py] [_log()] client lang: <none>
2026-04-15T20:33:10.349 [DEBUG] [Thread-25308] [transport.py] [_log()] server lang: <none>
2026-04-15T20:33:10.349 [DEBUG] [Thread-25308] [transport.py] [_log()] kex follows: False
2026-04-15T20:33:10.349 [DEBUG] [Thread-25308] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:33:10.349 [DEBUG] [Thread-25308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:33:10.349 [DEBUG] [Thread-25308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:33:10.349 [DEBUG] [Thread-25308] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:33:10.350 [DEBUG] [Thread-25308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:33:10.350 [DEBUG] [Thread-25308] [transport.py] [_log()] Compression: none
2026-04-15T20:33:10.350 [DEBUG] [Thread-25308] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:33:10.404 [DEBUG] [Thread-25308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:33:10.404 [DEBUG] [Thread-25308] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:33:10.405 [DEBUG] [Thread-25308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:33:10.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:33:10.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:33:10.461 [DEBUG] [Thread-25308] [transport.py] [_log()] userauth is OK
2026-04-15T20:33:10.461 [DEBUG] [Thread-25308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:33:10.461 [DEBUG] [Thread-25308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:33:10.461 [DEBUG] [Thread-25308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:33:10.461 [DEBUG] [Thread-25308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:33:10.486 [INFO] [Thread-25308] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:33:10.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:33:10.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:33:11.340 [DEBUG] [Thread-25308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:33:11.341 [DEBUG] [Thread-25308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:33:11.388 [DEBUG] [Thread-25308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:33:11.388 [DEBUG] [Thread-25308] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:33:11.397 [DEBUG] [Thread-25308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:33:11.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:33:11.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')
2026-04-15T20:33:11.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
2026-04-15T20:33:11.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:33:11.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:33:11.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:33:11.431 [DEBUG] [Thread-25308] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:33:13.323 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:17.305 [DEBUG] [Thread-25310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:18.817 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:24.170 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:29.814 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:32.348 [DEBUG] [Thread-25311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:35.193 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:37.554 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:37.555 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:40.574 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:41.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:33:41.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:33:41.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
2026-04-15T20:33:42.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 33, 17), 4.01647, 75.9808, 0.0, 9.01728, 9.57265, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:33:42.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:33:17
2026-04-15T20:33:43.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:33:43.594 [DEBUG] [Thread-25312] [transport.py] [_log()] starting thread (client mode): 0xf1366020
2026-04-15T20:33:43.594 [DEBUG] [Thread-25312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:33:43.614 [DEBUG] [Thread-25312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:33:43.615 [INFO] [Thread-25312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:33:43.618 [DEBUG] [Thread-25312] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:33:43.618 [DEBUG] [Thread-25312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:33:43.618 [DEBUG] [Thread-25312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:33:43.618 [DEBUG] [Thread-25312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:33:43.618 [DEBUG] [Thread-25312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:33:43.619 [DEBUG] [Thread-25312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:33:43.619 [DEBUG] [Thread-25312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:33:43.619 [DEBUG] [Thread-25312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:33:43.619 [DEBUG] [Thread-25312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:33:43.619 [DEBUG] [Thread-25312] [transport.py] [_log()] client lang: <none>
2026-04-15T20:33:43.619 [DEBUG] [Thread-25312] [transport.py] [_log()] server lang: <none>
2026-04-15T20:33:43.619 [DEBUG] [Thread-25312] [transport.py] [_log()] kex follows: False
2026-04-15T20:33:43.619 [DEBUG] [Thread-25312] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:33:43.619 [DEBUG] [Thread-25312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:33:43.619 [DEBUG] [Thread-25312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:33:43.619 [DEBUG] [Thread-25312] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:33:43.620 [DEBUG] [Thread-25312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:33:43.620 [DEBUG] [Thread-25312] [transport.py] [_log()] Compression: none
2026-04-15T20:33:43.620 [DEBUG] [Thread-25312] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:33:43.636 [DEBUG] [Thread-25312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:33:43.637 [DEBUG] [Thread-25312] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:33:43.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:33:43.638 [DEBUG] [Thread-25312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:33:43.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:33:43.638 [DEBUG] [Thread-25312] [transport.py] [_log()] userauth is OK
2026-04-15T20:33:43.639 [DEBUG] [Thread-25312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:33:43.639 [DEBUG] [Thread-25312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:33:43.639 [DEBUG] [Thread-25312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:33:43.639 [DEBUG] [Thread-25312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:33:43.652 [INFO] [Thread-25312] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:33:43.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:33:44.456 [DEBUG] [Thread-25312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:33:44.456 [DEBUG] [Thread-25312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:33:44.457 [DEBUG] [Thread-25312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:33:44.497 [DEBUG] [Thread-25312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:33:44.497 [DEBUG] [Thread-25312] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:33:44.500 [DEBUG] [Thread-25312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:33:44.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:33:44.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:33:44.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:33:44.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:33:44.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:33:44.522 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:33:44.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:33:44.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:33:44.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:33:44.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.773049 -999.00   +9.70  10.13     79   +6.30 1 1 1 1 1     0    0 3.36 -2.04 ZNESW 10.4 10.1 285.0 11.2 10.3 -24.4 10.2 -23.1 9.9 -21.0 10.2 -23.2
2026-04-15T20:33:44.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:33:44.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:33:44.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.773049
2026-04-15T20:33:44.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:33:44.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:33:44.526 [DEBUG] [Thread-25312] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:33:44.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:33:44.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:33:44.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:33:44.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:33:17', tmtdew=4.01647, humidity=75.9808, cloud=0.0, wind=9.01728, temperature=9.57265, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:33:17', seeing=1.35, atlas_timestamp='2026-04-15T18:33:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07175000000000153, -0.08224999999999838, -0.07874999999999943, -0.09149999999999991, -0.04449999999999932, -0.012249999999998096, -0.05400000000000027, -0.01774999999999949, -0.031000000000000583, -0.041499999999999204, -0.06325000000000003, -0.04800000000000004, -0.0259999999999998, -0.0017500000000012506, -0.03250000000000064, -0.0129999999999999, -0.021250000000000213, -0.03500000000000014, -0.03900000000000148, -0.0027500000000006963, 0.015499999999999403, -0.008250000000002089, -0.04324999999999868, 0.036749999999999616, 0.04299999999999926, -0.059499999999999886, -0.03524999999999956, -0.0235000000000003, -0.0009999999999994458, -0.047999999999998266, 0.011000000000001009, 0.09950000000000081, -0.02725000000000044], zp_timestamp='2026-04-15T18:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:33:44.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:33:44.786 [DEBUG] [Thread-25315] [transport.py] [_log()] starting thread (client mode): 0xee905870
2026-04-15T20:33:44.786 [DEBUG] [Thread-25315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:33:44.805 [DEBUG] [Thread-25315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:33:44.806 [INFO] [Thread-25315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:33:44.813 [DEBUG] [Thread-25315] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:33:44.813 [DEBUG] [Thread-25315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:33:44.813 [DEBUG] [Thread-25315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:33:44.813 [DEBUG] [Thread-25315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:33:44.813 [DEBUG] [Thread-25315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:33:44.813 [DEBUG] [Thread-25315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:33:44.814 [DEBUG] [Thread-25315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:33:44.814 [DEBUG] [Thread-25315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:33:44.814 [DEBUG] [Thread-25315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:33:44.814 [DEBUG] [Thread-25315] [transport.py] [_log()] client lang: <none>
2026-04-15T20:33:44.814 [DEBUG] [Thread-25315] [transport.py] [_log()] server lang: <none>
2026-04-15T20:33:44.814 [DEBUG] [Thread-25315] [transport.py] [_log()] kex follows: False
2026-04-15T20:33:44.814 [DEBUG] [Thread-25315] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:33:44.814 [DEBUG] [Thread-25315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:33:44.814 [DEBUG] [Thread-25315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:33:44.814 [DEBUG] [Thread-25315] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:33:44.814 [DEBUG] [Thread-25315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:33:44.815 [DEBUG] [Thread-25315] [transport.py] [_log()] Compression: none
2026-04-15T20:33:44.815 [DEBUG] [Thread-25315] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:33:44.872 [DEBUG] [Thread-25315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:33:44.872 [DEBUG] [Thread-25315] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:33:44.872 [DEBUG] [Thread-25315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:33:44.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:33:44.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:33:44.932 [DEBUG] [Thread-25315] [transport.py] [_log()] userauth is OK
2026-04-15T20:33:44.932 [DEBUG] [Thread-25315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:33:44.933 [DEBUG] [Thread-25315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:33:44.933 [DEBUG] [Thread-25315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:33:44.933 [DEBUG] [Thread-25315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:33:44.956 [INFO] [Thread-25315] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:33:44.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:33:44.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:33:45.827 [DEBUG] [Thread-25315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:33:45.828 [DEBUG] [Thread-25315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:33:45.875 [DEBUG] [Thread-25315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:33:45.875 [DEBUG] [Thread-25315] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:33:45.884 [DEBUG] [Thread-25315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:33:45.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:33:45.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')
2026-04-15T20:33:45.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
2026-04-15T20:33:45.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:33:45.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:33:45.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:33:45.925 [DEBUG] [Thread-25315] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:33:45.965 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:47.377 [DEBUG] [Thread-25317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:51.321 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:33:56.725 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:02.102 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:02.422 [DEBUG] [Thread-25318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:07.456 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:08.839 [DEBUG] [Thread-25319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:12.859 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:15.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:34:15.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:34:15.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
2026-04-15T20:34:17.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 33, 52), 3.80707, 77.0944, 0.0, 10.0231, 9.61212, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:34:17.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:33:52
2026-04-15T20:34:17.456 [DEBUG] [Thread-25320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:17.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:34:18.147 [DEBUG] [Thread-25321] [transport.py] [_log()] starting thread (client mode): 0xee9af580
2026-04-15T20:34:18.147 [DEBUG] [Thread-25321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:34:18.166 [DEBUG] [Thread-25321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:34:18.166 [INFO] [Thread-25321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:34:18.169 [DEBUG] [Thread-25321] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:34:18.169 [DEBUG] [Thread-25321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:34:18.169 [DEBUG] [Thread-25321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:34:18.170 [DEBUG] [Thread-25321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:34:18.170 [DEBUG] [Thread-25321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:34:18.170 [DEBUG] [Thread-25321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:34:18.170 [DEBUG] [Thread-25321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:34:18.170 [DEBUG] [Thread-25321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:34:18.170 [DEBUG] [Thread-25321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:34:18.170 [DEBUG] [Thread-25321] [transport.py] [_log()] client lang: <none>
2026-04-15T20:34:18.170 [DEBUG] [Thread-25321] [transport.py] [_log()] server lang: <none>
2026-04-15T20:34:18.170 [DEBUG] [Thread-25321] [transport.py] [_log()] kex follows: False
2026-04-15T20:34:18.170 [DEBUG] [Thread-25321] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:34:18.170 [DEBUG] [Thread-25321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:34:18.171 [DEBUG] [Thread-25321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:34:18.171 [DEBUG] [Thread-25321] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:34:18.171 [DEBUG] [Thread-25321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:34:18.171 [DEBUG] [Thread-25321] [transport.py] [_log()] Compression: none
2026-04-15T20:34:18.171 [DEBUG] [Thread-25321] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:34:18.187 [DEBUG] [Thread-25321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:34:18.188 [DEBUG] [Thread-25321] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:34:18.188 [DEBUG] [Thread-25321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:34:18.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:34:18.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:34:18.232 [DEBUG] [Thread-25321] [transport.py] [_log()] userauth is OK
2026-04-15T20:34:18.232 [DEBUG] [Thread-25321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:34:18.232 [DEBUG] [Thread-25321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:34:18.232 [DEBUG] [Thread-25321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:34:18.232 [DEBUG] [Thread-25321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:34:18.263 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:18.264 [INFO] [Thread-25321] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:34:18.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:34:19.041 [DEBUG] [Thread-25321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:34:19.041 [DEBUG] [Thread-25321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:34:19.042 [DEBUG] [Thread-25321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:34:19.082 [DEBUG] [Thread-25321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:34:19.082 [DEBUG] [Thread-25321] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:34:19.085 [DEBUG] [Thread-25321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:34:19.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:34:19.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:34:19.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:34:19.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:34:19.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:34:19.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:34:19.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:34:19.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:34:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:34:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.773396 -999.00   +9.70  10.09     79   +6.30 1 1 1 1 1     0    0 3.29 -1.65 ZNESW 10.9 10.1 274.8 12.3 10.3 -24.3 10.2 -23.1 9.9 -21.1 10.2 -23.1
2026-04-15T20:34:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:34:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:34:19.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.773396
2026-04-15T20:34:19.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:34:19.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:34:19.112 [DEBUG] [Thread-25321] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:34:19.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:34:19.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:34:19.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:34:19.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:33:52', tmtdew=3.80707, humidity=77.0944, cloud=0.0, wind=10.0231, temperature=9.61212, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:33:53', seeing=1.46, atlas_timestamp='2026-04-15T18:33:41.414', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07175000000000153, -0.08224999999999838, -0.07874999999999943, -0.09149999999999991, -0.04449999999999932, -0.012249999999998096, -0.05400000000000027, -0.01774999999999949, -0.031000000000000583, -0.041499999999999204, -0.06325000000000003, -0.04800000000000004, -0.0259999999999998, -0.0017500000000012506, -0.03250000000000064, -0.0129999999999999, -0.021250000000000213, -0.03500000000000014, -0.03900000000000148, -0.0027500000000006963, 0.015499999999999403, -0.008250000000002089, -0.04324999999999868, 0.036749999999999616, 0.04299999999999926, -0.059499999999999886, -0.03524999999999956, -0.0235000000000003, -0.0009999999999994458, -0.047999999999998266, 0.011000000000001009, 0.09950000000000081, -0.02725000000000044], zp_timestamp='2026-04-15T18:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:34:19.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:34:19.372 [DEBUG] [Thread-25324] [transport.py] [_log()] starting thread (client mode): 0xf13ca2c0
2026-04-15T20:34:19.372 [DEBUG] [Thread-25324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:34:19.386 [DEBUG] [Thread-25324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:34:19.386 [INFO] [Thread-25324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:34:19.393 [DEBUG] [Thread-25324] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:34:19.393 [DEBUG] [Thread-25324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:34:19.393 [DEBUG] [Thread-25324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:34:19.393 [DEBUG] [Thread-25324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:34:19.394 [DEBUG] [Thread-25324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:34:19.394 [DEBUG] [Thread-25324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:34:19.394 [DEBUG] [Thread-25324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:34:19.394 [DEBUG] [Thread-25324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:34:19.394 [DEBUG] [Thread-25324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:34:19.394 [DEBUG] [Thread-25324] [transport.py] [_log()] client lang: <none>
2026-04-15T20:34:19.394 [DEBUG] [Thread-25324] [transport.py] [_log()] server lang: <none>
2026-04-15T20:34:19.394 [DEBUG] [Thread-25324] [transport.py] [_log()] kex follows: False
2026-04-15T20:34:19.394 [DEBUG] [Thread-25324] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:34:19.394 [DEBUG] [Thread-25324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:34:19.394 [DEBUG] [Thread-25324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:34:19.395 [DEBUG] [Thread-25324] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:34:19.395 [DEBUG] [Thread-25324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:34:19.395 [DEBUG] [Thread-25324] [transport.py] [_log()] Compression: none
2026-04-15T20:34:19.395 [DEBUG] [Thread-25324] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:34:19.452 [DEBUG] [Thread-25324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:34:19.452 [DEBUG] [Thread-25324] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:34:19.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:34:19.453 [DEBUG] [Thread-25324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:34:19.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:34:19.508 [DEBUG] [Thread-25324] [transport.py] [_log()] userauth is OK
2026-04-15T20:34:19.508 [DEBUG] [Thread-25324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:34:19.509 [DEBUG] [Thread-25324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:34:19.509 [DEBUG] [Thread-25324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:34:19.509 [DEBUG] [Thread-25324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:34:19.539 [INFO] [Thread-25324] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:34:19.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:34:19.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:34:20.352 [DEBUG] [Thread-25324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:34:20.352 [DEBUG] [Thread-25324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:34:20.400 [DEBUG] [Thread-25324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:34:20.400 [DEBUG] [Thread-25324] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:34:20.409 [DEBUG] [Thread-25324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:34:20.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:34:20.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')
2026-04-15T20:34: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
2026-04-15T20:34:20.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:34:20.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:34:20.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:34:20.444 [DEBUG] [Thread-25324] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:34:23.629 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:29.203 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:32.487 [DEBUG] [Thread-25326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:34.573 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:37.759 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:37.760 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:40.166 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:45.556 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:47.531 [DEBUG] [Thread-25327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:34:50.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:34:50.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
2026-04-15T20:34:51.034 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:34:51.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 34, 28), 3.99369, 76.0972, 0.0, 10.4998, 9.53969, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:34:51.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:34:28
2026-04-15T20:34:52.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:34:52.531 [DEBUG] [Thread-25328] [transport.py] [_log()] starting thread (client mode): 0xf1350640
2026-04-15T20:34:52.531 [DEBUG] [Thread-25328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:34:52.550 [DEBUG] [Thread-25328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:34:52.550 [INFO] [Thread-25328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:34:52.553 [DEBUG] [Thread-25328] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:34:52.554 [DEBUG] [Thread-25328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:34:52.554 [DEBUG] [Thread-25328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:34:52.554 [DEBUG] [Thread-25328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:34:52.554 [DEBUG] [Thread-25328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:34:52.554 [DEBUG] [Thread-25328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:34:52.554 [DEBUG] [Thread-25328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:34:52.554 [DEBUG] [Thread-25328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:34:52.554 [DEBUG] [Thread-25328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:34:52.554 [DEBUG] [Thread-25328] [transport.py] [_log()] client lang: <none>
2026-04-15T20:34:52.554 [DEBUG] [Thread-25328] [transport.py] [_log()] server lang: <none>
2026-04-15T20:34:52.554 [DEBUG] [Thread-25328] [transport.py] [_log()] kex follows: False
2026-04-15T20:34:52.555 [DEBUG] [Thread-25328] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:34:52.555 [DEBUG] [Thread-25328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:34:52.555 [DEBUG] [Thread-25328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:34:52.555 [DEBUG] [Thread-25328] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:34:52.555 [DEBUG] [Thread-25328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:34:52.555 [DEBUG] [Thread-25328] [transport.py] [_log()] Compression: none
2026-04-15T20:34:52.555 [DEBUG] [Thread-25328] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:34:52.572 [DEBUG] [Thread-25328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:34:52.572 [DEBUG] [Thread-25328] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:34:52.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:34:52.573 [DEBUG] [Thread-25328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:34:52.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:34:52.573 [DEBUG] [Thread-25328] [transport.py] [_log()] userauth is OK
2026-04-15T20:34:52.573 [DEBUG] [Thread-25328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:34:52.574 [DEBUG] [Thread-25328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:34:52.574 [DEBUG] [Thread-25328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:34:52.574 [DEBUG] [Thread-25328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:34:52.607 [INFO] [Thread-25328] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:34:52.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:34:53.369 [DEBUG] [Thread-25328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:34:53.369 [DEBUG] [Thread-25328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:34:53.370 [DEBUG] [Thread-25328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:34:53.410 [DEBUG] [Thread-25328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:34:53.410 [DEBUG] [Thread-25328] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:34:53.413 [DEBUG] [Thread-25328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:34:53.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:34:53.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:34:53.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:34:53.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:34:53.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:34:53.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:34:53.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:34:53.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:34:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:34:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.773743 -999.00   +9.70   8.68     79   +6.40 1 1 1 1 1     0    0 3.35 -1.36 ZNESW 9.3 8.7 279.8 10.8 10.3 -24.4 10.2 -23.1 9.9 -21.1 10.2 -23.2
2026-04-15T20:34:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:34:53.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:34:53.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.773743
2026-04-15T20:34:53.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:34:53.439 [DEBUG] [Thread-25328] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:34:53.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:34:53.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:34:53.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:34:53.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:34:53.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:34:28', tmtdew=3.99369, humidity=76.0972, cloud=0.0, wind=10.4998, temperature=9.53969, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:34:28', seeing=1.81, atlas_timestamp='2026-04-15T18:34:11.395', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07175000000000153, -0.08224999999999838, -0.07874999999999943, -0.09149999999999991, -0.04449999999999932, -0.012249999999998096, -0.05400000000000027, -0.01774999999999949, -0.031000000000000583, -0.041499999999999204, -0.06325000000000003, -0.04800000000000004, -0.0259999999999998, -0.0017500000000012506, -0.03250000000000064, -0.0129999999999999, -0.021250000000000213, -0.03500000000000014, -0.03900000000000148, -0.0027500000000006963, 0.015499999999999403, -0.008250000000002089, -0.04324999999999868, 0.036749999999999616, 0.04299999999999926, -0.059499999999999886, -0.03524999999999956, -0.0235000000000003, -0.0009999999999994458, -0.047999999999998266, 0.011000000000001009, 0.09950000000000081, -0.02725000000000044], zp_timestamp='2026-04-15T18:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:34:53.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:34:53.696 [DEBUG] [Thread-25331] [transport.py] [_log()] starting thread (client mode): 0xf1351e10
2026-04-15T20:34:53.697 [DEBUG] [Thread-25331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:34:53.710 [DEBUG] [Thread-25331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:34:53.711 [INFO] [Thread-25331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:34:53.718 [DEBUG] [Thread-25331] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:34:53.718 [DEBUG] [Thread-25331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:34:53.718 [DEBUG] [Thread-25331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:34:53.718 [DEBUG] [Thread-25331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:34:53.718 [DEBUG] [Thread-25331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:34:53.719 [DEBUG] [Thread-25331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:34:53.719 [DEBUG] [Thread-25331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:34:53.719 [DEBUG] [Thread-25331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:34:53.719 [DEBUG] [Thread-25331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:34:53.719 [DEBUG] [Thread-25331] [transport.py] [_log()] client lang: <none>
2026-04-15T20:34:53.719 [DEBUG] [Thread-25331] [transport.py] [_log()] server lang: <none>
2026-04-15T20:34:53.719 [DEBUG] [Thread-25331] [transport.py] [_log()] kex follows: False
2026-04-15T20:34:53.719 [DEBUG] [Thread-25331] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:34:53.719 [DEBUG] [Thread-25331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:34:53.719 [DEBUG] [Thread-25331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:34:53.719 [DEBUG] [Thread-25331] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:34:53.719 [DEBUG] [Thread-25331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:34:53.720 [DEBUG] [Thread-25331] [transport.py] [_log()] Compression: none
2026-04-15T20:34:53.720 [DEBUG] [Thread-25331] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:34:53.774 [DEBUG] [Thread-25331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:34:53.775 [DEBUG] [Thread-25331] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:34:53.775 [DEBUG] [Thread-25331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:34:53.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:34:53.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:34:53.832 [DEBUG] [Thread-25331] [transport.py] [_log()] userauth is OK
2026-04-15T20:34:53.832 [DEBUG] [Thread-25331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:34:53.832 [DEBUG] [Thread-25331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:34:53.832 [DEBUG] [Thread-25331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:34:53.832 [DEBUG] [Thread-25331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:34:53.861 [INFO] [Thread-25331] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:34:53.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:34:53.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:34:54.671 [DEBUG] [Thread-25331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:34:54.672 [DEBUG] [Thread-25331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:34:54.719 [DEBUG] [Thread-25331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:34:54.719 [DEBUG] [Thread-25331] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:34:54.728 [DEBUG] [Thread-25331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:34:54.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:34:54.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')
2026-04-15T20:34:54.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
2026-04-15T20:34:54.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:34:54.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:34:54.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:34:54.765 [DEBUG] [Thread-25331] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:34:56.438 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:01.817 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:02.562 [DEBUG] [Thread-25333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:07.383 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:08.990 [DEBUG] [Thread-25334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:12.749 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:17.606 [DEBUG] [Thread-25335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:18.117 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:23.494 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:24.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:35:24.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:35:24.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
2026-04-15T20:35:26.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 35, 3), 3.97556, 76.1967, 0.0, 10.4998, 9.55628, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:35:26.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:35:03
2026-04-15T20:35:26.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:35:26.869 [DEBUG] [Thread-25336] [transport.py] [_log()] starting thread (client mode): 0xf1366170
2026-04-15T20:35:26.870 [DEBUG] [Thread-25336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:35:26.890 [DEBUG] [Thread-25336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:35:26.890 [INFO] [Thread-25336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:35:26.893 [DEBUG] [Thread-25336] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:35:26.893 [DEBUG] [Thread-25336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:35:26.893 [DEBUG] [Thread-25336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:35:26.893 [DEBUG] [Thread-25336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:35:26.893 [DEBUG] [Thread-25336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:35:26.893 [DEBUG] [Thread-25336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:35:26.893 [DEBUG] [Thread-25336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:35:26.894 [DEBUG] [Thread-25336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:35:26.894 [DEBUG] [Thread-25336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:35:26.894 [DEBUG] [Thread-25336] [transport.py] [_log()] client lang: <none>
2026-04-15T20:35:26.894 [DEBUG] [Thread-25336] [transport.py] [_log()] server lang: <none>
2026-04-15T20:35:26.894 [DEBUG] [Thread-25336] [transport.py] [_log()] kex follows: False
2026-04-15T20:35:26.894 [DEBUG] [Thread-25336] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:35:26.894 [DEBUG] [Thread-25336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:35:26.894 [DEBUG] [Thread-25336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:35:26.894 [DEBUG] [Thread-25336] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:35:26.894 [DEBUG] [Thread-25336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:35:26.894 [DEBUG] [Thread-25336] [transport.py] [_log()] Compression: none
2026-04-15T20:35:26.894 [DEBUG] [Thread-25336] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:35:26.915 [DEBUG] [Thread-25336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:35:26.915 [DEBUG] [Thread-25336] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:35:26.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:35:26.916 [DEBUG] [Thread-25336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:35:26.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:35:26.917 [DEBUG] [Thread-25336] [transport.py] [_log()] userauth is OK
2026-04-15T20:35:26.917 [DEBUG] [Thread-25336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:35:26.917 [DEBUG] [Thread-25336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:35:26.917 [DEBUG] [Thread-25336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:35:26.917 [DEBUG] [Thread-25336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:35:26.940 [INFO] [Thread-25336] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:35:26.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:35:27.713 [DEBUG] [Thread-25336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:35:27.713 [DEBUG] [Thread-25336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:35:27.714 [DEBUG] [Thread-25336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:35:27.754 [DEBUG] [Thread-25336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:35:27.754 [DEBUG] [Thread-25336] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:35:27.757 [DEBUG] [Thread-25336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:35:27.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:35:27.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:35:27.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:35:27.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:35:27.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:35:27.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:35:27.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:35:27.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:35:27.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:35:27.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.774090 -999.00   +9.70   8.67     79   +6.30 1 1 1 1 1     0    0 3.35 -1.11 ZNESW 8.8 8.7 282.4 10.1 10.3 -24.3 10.2 -23.1 9.9 -20.9 10.2 -22.9
2026-04-15T20:35:27.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:35:27.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:35:27.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.774090
2026-04-15T20:35:27.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:35:27.783 [DEBUG] [Thread-25336] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:35:27.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:35:27.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:35:27.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:35:27.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:35:27.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:35:03', tmtdew=3.97556, humidity=76.1967, cloud=0.0, wind=10.4998, temperature=9.55628, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:35:04', seeing=1.81, atlas_timestamp='2026-04-15T18:34:41.376', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07175000000000153, -0.08224999999999838, -0.07874999999999943, -0.09149999999999991, -0.04449999999999932, -0.012249999999998096, -0.05400000000000027, -0.01774999999999949, -0.031000000000000583, -0.041499999999999204, -0.06325000000000003, -0.04800000000000004, -0.0259999999999998, -0.0017500000000012506, -0.03250000000000064, -0.0129999999999999, -0.021250000000000213, -0.03500000000000014, -0.03900000000000148, -0.0027500000000006963, 0.015499999999999403, -0.008250000000002089, -0.04324999999999868, 0.036749999999999616, 0.04299999999999926, -0.059499999999999886, -0.03524999999999956, -0.0235000000000003, -0.0009999999999994458, -0.047999999999998266, 0.011000000000001009, 0.09950000000000081, -0.02725000000000044], zp_timestamp='2026-04-15T18:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:35:28.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:35:28.044 [DEBUG] [Thread-25339] [transport.py] [_log()] starting thread (client mode): 0xf1365de0
2026-04-15T20:35:28.044 [DEBUG] [Thread-25339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:35:28.059 [DEBUG] [Thread-25339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:35:28.059 [INFO] [Thread-25339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:35:28.066 [DEBUG] [Thread-25339] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:35:28.066 [DEBUG] [Thread-25339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:35:28.066 [DEBUG] [Thread-25339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:35:28.066 [DEBUG] [Thread-25339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:35:28.067 [DEBUG] [Thread-25339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:35:28.067 [DEBUG] [Thread-25339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:35:28.067 [DEBUG] [Thread-25339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:35:28.067 [DEBUG] [Thread-25339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:35:28.067 [DEBUG] [Thread-25339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:35:28.067 [DEBUG] [Thread-25339] [transport.py] [_log()] client lang: <none>
2026-04-15T20:35:28.067 [DEBUG] [Thread-25339] [transport.py] [_log()] server lang: <none>
2026-04-15T20:35:28.067 [DEBUG] [Thread-25339] [transport.py] [_log()] kex follows: False
2026-04-15T20:35:28.067 [DEBUG] [Thread-25339] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:35:28.067 [DEBUG] [Thread-25339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:35:28.067 [DEBUG] [Thread-25339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:35:28.067 [DEBUG] [Thread-25339] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:35:28.068 [DEBUG] [Thread-25339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:35:28.068 [DEBUG] [Thread-25339] [transport.py] [_log()] Compression: none
2026-04-15T20:35:28.068 [DEBUG] [Thread-25339] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:35:28.122 [DEBUG] [Thread-25339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:35:28.122 [DEBUG] [Thread-25339] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:35:28.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:35:28.123 [DEBUG] [Thread-25339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:35:28.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:35:28.179 [DEBUG] [Thread-25339] [transport.py] [_log()] userauth is OK
2026-04-15T20:35:28.179 [DEBUG] [Thread-25339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:35:28.179 [DEBUG] [Thread-25339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:35:28.179 [DEBUG] [Thread-25339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:35:28.180 [DEBUG] [Thread-25339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:35:28.200 [INFO] [Thread-25339] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:35:28.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:35:28.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:35:28.974 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:29.031 [DEBUG] [Thread-25339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:35:29.031 [DEBUG] [Thread-25339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:35:29.078 [DEBUG] [Thread-25339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:35:29.079 [DEBUG] [Thread-25339] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:35:29.087 [DEBUG] [Thread-25339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:35:29.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:35:29.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')
2026-04-15T20:35:29.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
2026-04-15T20:35:29.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:35:29.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:35:29.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:35:29.118 [DEBUG] [Thread-25339] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:35:32.637 [DEBUG] [Thread-25341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:34.502 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:37.963 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:37.964 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:39.905 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:45.372 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:47.684 [DEBUG] [Thread-25342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:50.776 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:56.153 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:35:59.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:35:59.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:35:59.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
2026-04-15T20:36:00.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 35, 39), 3.73259, 77.4928, 0.0, 9.77616, 9.61242, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:36:00.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:35:39
2026-04-15T20:36:01.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:36:01.478 [DEBUG] [Thread-25343] [transport.py] [_log()] starting thread (client mode): 0xf1367400
2026-04-15T20:36:01.478 [DEBUG] [Thread-25343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:36:01.498 [DEBUG] [Thread-25343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:36:01.498 [INFO] [Thread-25343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:36:01.501 [DEBUG] [Thread-25343] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:36:01.501 [DEBUG] [Thread-25343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:36:01.501 [DEBUG] [Thread-25343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:36:01.502 [DEBUG] [Thread-25343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:36:01.502 [DEBUG] [Thread-25343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:36:01.502 [DEBUG] [Thread-25343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:36:01.502 [DEBUG] [Thread-25343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:36:01.502 [DEBUG] [Thread-25343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:36:01.502 [DEBUG] [Thread-25343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:36:01.502 [DEBUG] [Thread-25343] [transport.py] [_log()] client lang: <none>
2026-04-15T20:36:01.502 [DEBUG] [Thread-25343] [transport.py] [_log()] server lang: <none>
2026-04-15T20:36:01.502 [DEBUG] [Thread-25343] [transport.py] [_log()] kex follows: False
2026-04-15T20:36:01.502 [DEBUG] [Thread-25343] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:36:01.502 [DEBUG] [Thread-25343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:36:01.503 [DEBUG] [Thread-25343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:36:01.503 [DEBUG] [Thread-25343] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:36:01.503 [DEBUG] [Thread-25343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:36:01.503 [DEBUG] [Thread-25343] [transport.py] [_log()] Compression: none
2026-04-15T20:36:01.503 [DEBUG] [Thread-25343] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:36:01.520 [DEBUG] [Thread-25343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:36:01.520 [DEBUG] [Thread-25343] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:36:01.521 [DEBUG] [Thread-25343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:36:01.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:36:01.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:36:01.522 [DEBUG] [Thread-25343] [transport.py] [_log()] userauth is OK
2026-04-15T20:36:01.522 [DEBUG] [Thread-25343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:36:01.522 [DEBUG] [Thread-25343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:36:01.522 [DEBUG] [Thread-25343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:36:01.522 [DEBUG] [Thread-25343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:36:01.546 [INFO] [Thread-25343] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:36:01.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:36:01.771 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:02.292 [DEBUG] [Thread-25343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:36:02.292 [DEBUG] [Thread-25343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:36:02.293 [DEBUG] [Thread-25343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:36:02.333 [DEBUG] [Thread-25343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:36:02.333 [DEBUG] [Thread-25343] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:36:02.336 [DEBUG] [Thread-25343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:36:02.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:36:02.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:36:02.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:36:02.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:36:02.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:36:02.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:36:02.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:36:02.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:36:02.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:36:02.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.774784 -999.00   +9.70   7.56     79   +6.30 1 1 1 1 1     0    0 3.38 -0.06 ZNESW 9.2 7.6 278.8 11.1 10.3 -24.4 10.2 -23.1 9.9 -21.0 10.2 -23.1
2026-04-15T20:36:02.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:36:02.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:36:02.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.774784
2026-04-15T20:36:02.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:36:02.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:36:02.364 [DEBUG] [Thread-25343] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:36:02.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:36:02.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:36:02.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:36:02.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:35:39', tmtdew=3.73259, humidity=77.4928, cloud=0.0, wind=9.77616, temperature=9.61242, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:35:39', seeing=1.76, atlas_timestamp='2026-04-15T18:35:41.338', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07175000000000153, -0.08224999999999838, -0.07874999999999943, -0.09149999999999991, -0.04449999999999932, -0.012249999999998096, -0.05400000000000027, -0.01774999999999949, -0.031000000000000583, -0.041499999999999204, -0.06325000000000003, -0.04800000000000004, -0.0259999999999998, -0.0017500000000012506, -0.03250000000000064, -0.0129999999999999, -0.021250000000000213, -0.03500000000000014, -0.03900000000000148, -0.0027500000000006963, 0.015499999999999403, -0.008250000000002089, -0.04324999999999868, 0.036749999999999616, 0.04299999999999926, -0.059499999999999886, -0.03524999999999956, -0.0235000000000003, -0.0009999999999994458, -0.047999999999998266, 0.011000000000001009, 0.09950000000000081, -0.02725000000000044], zp_timestamp='2026-04-15T18:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:36:02.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:36:02.621 [DEBUG] [Thread-25346] [transport.py] [_log()] starting thread (client mode): 0xf1367550
2026-04-15T20:36:02.622 [DEBUG] [Thread-25346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:36:02.637 [DEBUG] [Thread-25346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:36:02.637 [INFO] [Thread-25346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:36:02.644 [DEBUG] [Thread-25346] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:36:02.644 [DEBUG] [Thread-25346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:36:02.644 [DEBUG] [Thread-25346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:36:02.644 [DEBUG] [Thread-25346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:36:02.645 [DEBUG] [Thread-25346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:36:02.645 [DEBUG] [Thread-25346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:36:02.645 [DEBUG] [Thread-25346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:36:02.645 [DEBUG] [Thread-25346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:36:02.645 [DEBUG] [Thread-25346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:36:02.645 [DEBUG] [Thread-25346] [transport.py] [_log()] client lang: <none>
2026-04-15T20:36:02.645 [DEBUG] [Thread-25346] [transport.py] [_log()] server lang: <none>
2026-04-15T20:36:02.645 [DEBUG] [Thread-25346] [transport.py] [_log()] kex follows: False
2026-04-15T20:36:02.645 [DEBUG] [Thread-25346] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:36:02.645 [DEBUG] [Thread-25346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:36:02.645 [DEBUG] [Thread-25346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:36:02.645 [DEBUG] [Thread-25346] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:36:02.646 [DEBUG] [Thread-25346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:36:02.646 [DEBUG] [Thread-25346] [transport.py] [_log()] Compression: none
2026-04-15T20:36:02.646 [DEBUG] [Thread-25346] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:36:02.702 [DEBUG] [Thread-25346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:36:02.702 [DEBUG] [Thread-25346] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:36:02.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:36:02.703 [DEBUG] [Thread-25346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:36:02.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:36:02.715 [DEBUG] [Thread-25348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:02.759 [DEBUG] [Thread-25346] [transport.py] [_log()] userauth is OK
2026-04-15T20:36:02.759 [DEBUG] [Thread-25346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:36:02.759 [DEBUG] [Thread-25346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:36:02.759 [DEBUG] [Thread-25346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:36:02.760 [DEBUG] [Thread-25346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:36:02.784 [INFO] [Thread-25346] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:36:02.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:36:02.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:36:03.640 [DEBUG] [Thread-25346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:36:03.640 [DEBUG] [Thread-25346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:36:03.688 [DEBUG] [Thread-25346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:36:03.688 [DEBUG] [Thread-25346] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:36:03.697 [DEBUG] [Thread-25346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:36:03.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:36:03.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')
2026-04-15T20:36:03.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
2026-04-15T20:36:03.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:36:03.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:36:03.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:36:03.731 [DEBUG] [Thread-25346] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:36:07.172 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:09.154 [DEBUG] [Thread-25349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:12.525 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:17.762 [DEBUG] [Thread-25350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:17.947 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:23.326 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:28.802 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:32.794 [DEBUG] [Thread-25351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:33.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:36:33.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:36:33.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
2026-04-15T20:36:34.332 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:35.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 36, 15), 3.91273, 76.263, 0.0, 10.8173, 9.48962, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:36:35.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:36:15
2026-04-15T20:36:35.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:36:35.970 [DEBUG] [Thread-25352] [transport.py] [_log()] starting thread (client mode): 0xf1351e10
2026-04-15T20:36:35.970 [DEBUG] [Thread-25352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:36:35.985 [DEBUG] [Thread-25352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:36:35.985 [INFO] [Thread-25352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:36:35.988 [DEBUG] [Thread-25352] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:36:35.988 [DEBUG] [Thread-25352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:36:35.988 [DEBUG] [Thread-25352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:36:35.988 [DEBUG] [Thread-25352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:36:35.988 [DEBUG] [Thread-25352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:36:35.988 [DEBUG] [Thread-25352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:36:35.988 [DEBUG] [Thread-25352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:36:35.988 [DEBUG] [Thread-25352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:36:35.988 [DEBUG] [Thread-25352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:36:35.989 [DEBUG] [Thread-25352] [transport.py] [_log()] client lang: <none>
2026-04-15T20:36:35.989 [DEBUG] [Thread-25352] [transport.py] [_log()] server lang: <none>
2026-04-15T20:36:35.989 [DEBUG] [Thread-25352] [transport.py] [_log()] kex follows: False
2026-04-15T20:36:35.989 [DEBUG] [Thread-25352] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:36:35.989 [DEBUG] [Thread-25352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:36:35.989 [DEBUG] [Thread-25352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:36:35.989 [DEBUG] [Thread-25352] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:36:35.989 [DEBUG] [Thread-25352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:36:35.989 [DEBUG] [Thread-25352] [transport.py] [_log()] Compression: none
2026-04-15T20:36:35.989 [DEBUG] [Thread-25352] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:36:36.006 [DEBUG] [Thread-25352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:36:36.006 [DEBUG] [Thread-25352] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:36:36.006 [DEBUG] [Thread-25352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:36:36.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:36:36.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:36:36.007 [DEBUG] [Thread-25352] [transport.py] [_log()] userauth is OK
2026-04-15T20:36:36.007 [DEBUG] [Thread-25352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:36:36.007 [DEBUG] [Thread-25352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:36:36.007 [DEBUG] [Thread-25352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:36:36.007 [DEBUG] [Thread-25352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:36:36.020 [INFO] [Thread-25352] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:36:36.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:36:36.799 [DEBUG] [Thread-25352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:36:36.799 [DEBUG] [Thread-25352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:36:36.800 [DEBUG] [Thread-25352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:36:36.840 [DEBUG] [Thread-25352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:36:36.841 [DEBUG] [Thread-25352] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:36:36.843 [DEBUG] [Thread-25352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:36:36.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:36:36.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:36:36.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:36:36.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:36:36.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:36:36.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:36:36.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:36:36.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:36:36.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:36:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.775132 -999.00   +9.70  10.20     79   +6.30 1 1 1 1 1     0    0 3.42 0.33 ZNESW 9.9 10.2 283.8 12.1 10.3 -24.3 10.2 -23.0 9.9 -20.9 10.2 -23.1
2026-04-15T20:36:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:36:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:36:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.775132
2026-04-15T20:36:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:36:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:36:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:36:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:36:36.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:36:36.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:36:15', tmtdew=3.91273, humidity=76.263, cloud=0.0, wind=10.8173, temperature=9.48962, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:36:15', seeing=1.75, atlas_timestamp='2026-04-15T18:36:11.405', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07175000000000153, -0.08224999999999838, -0.07874999999999943, -0.09149999999999991, -0.04449999999999932, -0.012249999999998096, -0.05400000000000027, -0.01774999999999949, -0.031000000000000583, -0.041499999999999204, -0.06325000000000003, -0.04800000000000004, -0.0259999999999998, -0.0017500000000012506, -0.03250000000000064, -0.0129999999999999, -0.021250000000000213, -0.03500000000000014, -0.03900000000000148, -0.0027500000000006963, 0.015499999999999403, -0.008250000000002089, -0.04324999999999868, 0.036749999999999616, 0.04299999999999926, -0.059499999999999886, -0.03524999999999956, -0.0235000000000003, -0.0009999999999994458, -0.047999999999998266, 0.011000000000001009, 0.09950000000000081, -0.02725000000000044], zp_timestamp='2026-04-15T18:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:36:36.862 [DEBUG] [Thread-25352] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:36:37.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:36:37.073 [DEBUG] [Thread-25355] [transport.py] [_log()] starting thread (client mode): 0xf13ca800
2026-04-15T20:36:37.073 [DEBUG] [Thread-25355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:36:37.087 [DEBUG] [Thread-25355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:36:37.087 [INFO] [Thread-25355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:36:37.095 [DEBUG] [Thread-25355] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:36:37.095 [DEBUG] [Thread-25355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:36:37.095 [DEBUG] [Thread-25355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:36:37.095 [DEBUG] [Thread-25355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:36:37.095 [DEBUG] [Thread-25355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:36:37.095 [DEBUG] [Thread-25355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:36:37.095 [DEBUG] [Thread-25355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:36:37.095 [DEBUG] [Thread-25355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:36:37.095 [DEBUG] [Thread-25355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:36:37.095 [DEBUG] [Thread-25355] [transport.py] [_log()] client lang: <none>
2026-04-15T20:36:37.095 [DEBUG] [Thread-25355] [transport.py] [_log()] server lang: <none>
2026-04-15T20:36:37.096 [DEBUG] [Thread-25355] [transport.py] [_log()] kex follows: False
2026-04-15T20:36:37.096 [DEBUG] [Thread-25355] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:36:37.096 [DEBUG] [Thread-25355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:36:37.096 [DEBUG] [Thread-25355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:36:37.096 [DEBUG] [Thread-25355] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:36:37.096 [DEBUG] [Thread-25355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:36:37.096 [DEBUG] [Thread-25355] [transport.py] [_log()] Compression: none
2026-04-15T20:36:37.096 [DEBUG] [Thread-25355] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:36:37.153 [DEBUG] [Thread-25355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:36:37.153 [DEBUG] [Thread-25355] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:36:37.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:36:37.154 [DEBUG] [Thread-25355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:36:37.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:36:37.210 [DEBUG] [Thread-25355] [transport.py] [_log()] userauth is OK
2026-04-15T20:36:37.211 [DEBUG] [Thread-25355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:36:37.211 [DEBUG] [Thread-25355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:36:37.211 [DEBUG] [Thread-25355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:36:37.211 [DEBUG] [Thread-25355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:36:37.236 [INFO] [Thread-25355] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:36:37.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:36:37.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:36:38.068 [DEBUG] [Thread-25355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:36:38.068 [DEBUG] [Thread-25355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:36:38.116 [DEBUG] [Thread-25355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:36:38.116 [DEBUG] [Thread-25355] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:36:38.124 [DEBUG] [Thread-25355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:36:38.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:36:38.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')
2026-04-15T20:36:38.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
2026-04-15T20:36:38.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:36:38.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:36:38.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:36:38.156 [DEBUG] [Thread-25355] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:36:38.163 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:38.163 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:39.774 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:45.241 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:47.825 [DEBUG] [Thread-25357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:50.775 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:36:56.177 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:01.592 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:02.871 [DEBUG] [Thread-25358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:06.982 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:08.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:37:08.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:37:08.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T20:37:09.299 [DEBUG] [Thread-25359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:09.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 36, 51), 3.7406, 77.4602, 0.0, 9.7056, 9.67915, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:37:09.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:36:51
2026-04-15T20:37:09.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:37:10.262 [DEBUG] [Thread-25360] [transport.py] [_log()] starting thread (client mode): 0xf13ffd60
2026-04-15T20:37:10.262 [DEBUG] [Thread-25360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:37:10.282 [DEBUG] [Thread-25360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:37:10.282 [INFO] [Thread-25360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:37:10.283 [DEBUG] [Thread-25360] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:37:10.283 [DEBUG] [Thread-25360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:37:10.283 [DEBUG] [Thread-25360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:37:10.283 [DEBUG] [Thread-25360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:37:10.284 [DEBUG] [Thread-25360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:37:10.284 [DEBUG] [Thread-25360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:37:10.284 [DEBUG] [Thread-25360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:37:10.284 [DEBUG] [Thread-25360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:37:10.284 [DEBUG] [Thread-25360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:37:10.284 [DEBUG] [Thread-25360] [transport.py] [_log()] client lang: <none>
2026-04-15T20:37:10.284 [DEBUG] [Thread-25360] [transport.py] [_log()] server lang: <none>
2026-04-15T20:37:10.284 [DEBUG] [Thread-25360] [transport.py] [_log()] kex follows: False
2026-04-15T20:37:10.284 [DEBUG] [Thread-25360] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:37:10.284 [DEBUG] [Thread-25360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:37:10.285 [DEBUG] [Thread-25360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:37:10.285 [DEBUG] [Thread-25360] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:37:10.285 [DEBUG] [Thread-25360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:37:10.285 [DEBUG] [Thread-25360] [transport.py] [_log()] Compression: none
2026-04-15T20:37:10.285 [DEBUG] [Thread-25360] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:37:10.303 [DEBUG] [Thread-25360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:37:10.304 [DEBUG] [Thread-25360] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:37:10.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:37:10.304 [DEBUG] [Thread-25360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:37:10.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:37:10.305 [DEBUG] [Thread-25360] [transport.py] [_log()] userauth is OK
2026-04-15T20:37:10.305 [DEBUG] [Thread-25360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:37:10.306 [DEBUG] [Thread-25360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:37:10.306 [DEBUG] [Thread-25360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:37:10.306 [DEBUG] [Thread-25360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:37:10.329 [INFO] [Thread-25360] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:37:10.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:37:11.178 [DEBUG] [Thread-25360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:37:11.178 [DEBUG] [Thread-25360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:37:11.179 [DEBUG] [Thread-25360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:37:11.219 [DEBUG] [Thread-25360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:37:11.219 [DEBUG] [Thread-25360] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:37:11.222 [DEBUG] [Thread-25360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:37:11.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:37:11.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:37:11.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:37:11.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:37:11.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:37:11.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:37:11.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:37:11.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:37:11.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:37:11.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.775479 -999.00   +9.70  10.58     79   +6.40 1 1 1 1 1     0    0 3.35 0.41 ZNESW 10.0 10.6 279.6 12.8 10.3 -24.3 10.2 -23.0 9.9 -21.1 10.2 -23.1
2026-04-15T20:37:11.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:37:11.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:37:11.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.775479
2026-04-15T20:37:11.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:37:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:37:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:37:11.249 [DEBUG] [Thread-25360] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:37:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:37:11.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:37:11.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:36:51', tmtdew=3.7406, humidity=77.4602, cloud=0.0, wind=9.7056, temperature=9.67915, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:36:51', seeing=1.57, atlas_timestamp='2026-04-15T18:36:41.386', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07175000000000153, -0.08224999999999838, -0.07874999999999943, -0.09149999999999991, -0.04449999999999932, -0.012249999999998096, -0.05400000000000027, -0.01774999999999949, -0.031000000000000583, -0.041499999999999204, -0.06325000000000003, -0.04800000000000004, -0.0259999999999998, -0.0017500000000012506, -0.03250000000000064, -0.0129999999999999, -0.021250000000000213, -0.03500000000000014, -0.03900000000000148, -0.0027500000000006963, 0.015499999999999403, -0.008250000000002089, -0.04324999999999868, 0.036749999999999616, 0.04299999999999926, -0.059499999999999886, -0.03524999999999956, -0.0235000000000003, -0.0009999999999994458, -0.047999999999998266, 0.011000000000001009, 0.09950000000000081, -0.02725000000000044], zp_timestamp='2026-04-15T18:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:37:11.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:37:11.506 [DEBUG] [Thread-25363] [transport.py] [_log()] starting thread (client mode): 0xf13e05e0
2026-04-15T20:37:11.506 [DEBUG] [Thread-25363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:37:11.520 [DEBUG] [Thread-25363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:37:11.520 [INFO] [Thread-25363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:37:11.527 [DEBUG] [Thread-25363] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:37:11.528 [DEBUG] [Thread-25363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:37:11.528 [DEBUG] [Thread-25363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:37:11.528 [DEBUG] [Thread-25363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:37:11.528 [DEBUG] [Thread-25363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:37:11.528 [DEBUG] [Thread-25363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:37:11.528 [DEBUG] [Thread-25363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:37:11.528 [DEBUG] [Thread-25363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:37:11.528 [DEBUG] [Thread-25363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:37:11.528 [DEBUG] [Thread-25363] [transport.py] [_log()] client lang: <none>
2026-04-15T20:37:11.528 [DEBUG] [Thread-25363] [transport.py] [_log()] server lang: <none>
2026-04-15T20:37:11.528 [DEBUG] [Thread-25363] [transport.py] [_log()] kex follows: False
2026-04-15T20:37:11.529 [DEBUG] [Thread-25363] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:37:11.529 [DEBUG] [Thread-25363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:37:11.529 [DEBUG] [Thread-25363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:37:11.529 [DEBUG] [Thread-25363] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:37:11.529 [DEBUG] [Thread-25363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:37:11.529 [DEBUG] [Thread-25363] [transport.py] [_log()] Compression: none
2026-04-15T20:37:11.529 [DEBUG] [Thread-25363] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:37:11.585 [DEBUG] [Thread-25363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:37:11.586 [DEBUG] [Thread-25363] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:37:11.586 [DEBUG] [Thread-25363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:37:11.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:37:11.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:37:11.642 [DEBUG] [Thread-25363] [transport.py] [_log()] userauth is OK
2026-04-15T20:37:11.642 [DEBUG] [Thread-25363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:37:11.642 [DEBUG] [Thread-25363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:37:11.642 [DEBUG] [Thread-25363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:37:11.643 [DEBUG] [Thread-25363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:37:11.667 [INFO] [Thread-25363] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:37:11.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:37:11.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:37:12.362 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:12.483 [DEBUG] [Thread-25363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:37:12.484 [DEBUG] [Thread-25363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:37:12.531 [DEBUG] [Thread-25363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:37:12.531 [DEBUG] [Thread-25363] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:37:12.540 [DEBUG] [Thread-25363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:37:12.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:37:12.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')
2026-04-15T20:37:12.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
2026-04-15T20:37:12.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:37:12.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:37:12.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:37:12.574 [DEBUG] [Thread-25363] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:37:17.792 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:17.903 [DEBUG] [Thread-25365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:23.157 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:28.535 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:32.964 [DEBUG] [Thread-25366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:33.950 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:38.362 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:38.363 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:39.464 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:42.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:37:42.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:37:42.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T20:37:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 37, 26), 3.96982, 76.2301, 0.0, 8.52336, 9.57298, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:37:43.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:37:26
2026-04-15T20:37:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:37:44.708 [DEBUG] [Thread-25367] [transport.py] [_log()] starting thread (client mode): 0xf1366200
2026-04-15T20:37:44.708 [DEBUG] [Thread-25367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:37:44.720 [DEBUG] [Thread-25367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:37:44.720 [INFO] [Thread-25367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:37:44.721 [DEBUG] [Thread-25367] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:37:44.721 [DEBUG] [Thread-25367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:37:44.721 [DEBUG] [Thread-25367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:37:44.721 [DEBUG] [Thread-25367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:37:44.721 [DEBUG] [Thread-25367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:37:44.721 [DEBUG] [Thread-25367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:37:44.721 [DEBUG] [Thread-25367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:37:44.721 [DEBUG] [Thread-25367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:37:44.722 [DEBUG] [Thread-25367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:37:44.722 [DEBUG] [Thread-25367] [transport.py] [_log()] client lang: <none>
2026-04-15T20:37:44.722 [DEBUG] [Thread-25367] [transport.py] [_log()] server lang: <none>
2026-04-15T20:37:44.722 [DEBUG] [Thread-25367] [transport.py] [_log()] kex follows: False
2026-04-15T20:37:44.722 [DEBUG] [Thread-25367] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:37:44.722 [DEBUG] [Thread-25367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:37:44.722 [DEBUG] [Thread-25367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:37:44.722 [DEBUG] [Thread-25367] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:37:44.722 [DEBUG] [Thread-25367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:37:44.722 [DEBUG] [Thread-25367] [transport.py] [_log()] Compression: none
2026-04-15T20:37:44.722 [DEBUG] [Thread-25367] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:37:44.732 [DEBUG] [Thread-25367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:37:44.732 [DEBUG] [Thread-25367] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:37:44.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:37:44.733 [DEBUG] [Thread-25367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:37:44.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:37:44.734 [DEBUG] [Thread-25367] [transport.py] [_log()] userauth is OK
2026-04-15T20:37:44.734 [DEBUG] [Thread-25367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:37:44.734 [DEBUG] [Thread-25367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:37:44.734 [DEBUG] [Thread-25367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:37:44.734 [DEBUG] [Thread-25367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:37:44.750 [INFO] [Thread-25367] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:37:44.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:37:44.907 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:45.513 [DEBUG] [Thread-25367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:37:45.514 [DEBUG] [Thread-25367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:37:45.514 [DEBUG] [Thread-25367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:37:45.554 [DEBUG] [Thread-25367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:37:45.554 [DEBUG] [Thread-25367] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:37:45.557 [DEBUG] [Thread-25367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:37:45.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:37:45.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:37:45.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:37:45.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:37:45.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:37:45.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:37:45.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:37:45.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:37:45.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:37:45.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.775826 -999.00   +9.70  10.50     79   +6.40 1 1 1 1 1     0    0 3.41 0.16 ZNESW 10.2 10.5 270.2 11.9 10.3 -24.4 10.2 -23.0 9.9 -20.9 10.2 -23.2
2026-04-15T20:37:45.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:37:45.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:37:45.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.775826
2026-04-15T20:37:45.583 [DEBUG] [Thread-25367] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:37:45.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:37:45.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:37:45.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:37:45.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:37:45.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:37:45.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:37:26', tmtdew=3.96982, humidity=76.2301, cloud=0.0, wind=8.52336, temperature=9.57298, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:37:26', seeing=1.45, atlas_timestamp='2026-04-15T18:37:11.366', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07175000000000153, -0.08224999999999838, -0.07874999999999943, -0.09149999999999991, -0.04449999999999932, -0.012249999999998096, -0.05400000000000027, -0.01774999999999949, -0.031000000000000583, -0.041499999999999204, -0.06325000000000003, -0.04800000000000004, -0.0259999999999998, -0.0017500000000012506, -0.03250000000000064, -0.0129999999999999, -0.021250000000000213, -0.03500000000000014, -0.03900000000000148, -0.0027500000000006963, 0.015499999999999403, -0.008250000000002089, -0.04324999999999868, 0.036749999999999616, 0.04299999999999926, -0.059499999999999886, -0.03524999999999956, -0.0235000000000003, -0.0009999999999994458, -0.047999999999998266, 0.011000000000001009, 0.09950000000000081, -0.02725000000000044], zp_timestamp='2026-04-15T18:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:37:45.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:37:45.831 [DEBUG] [Thread-25370] [transport.py] [_log()] starting thread (client mode): 0xf1364760
2026-04-15T20:37:45.831 [DEBUG] [Thread-25370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:37:45.845 [DEBUG] [Thread-25370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:37:45.845 [INFO] [Thread-25370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:37:45.852 [DEBUG] [Thread-25370] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:37:45.852 [DEBUG] [Thread-25370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:37:45.853 [DEBUG] [Thread-25370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:37:45.853 [DEBUG] [Thread-25370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:37:45.853 [DEBUG] [Thread-25370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:37:45.853 [DEBUG] [Thread-25370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:37:45.853 [DEBUG] [Thread-25370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:37:45.853 [DEBUG] [Thread-25370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:37:45.853 [DEBUG] [Thread-25370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:37:45.853 [DEBUG] [Thread-25370] [transport.py] [_log()] client lang: <none>
2026-04-15T20:37:45.853 [DEBUG] [Thread-25370] [transport.py] [_log()] server lang: <none>
2026-04-15T20:37:45.853 [DEBUG] [Thread-25370] [transport.py] [_log()] kex follows: False
2026-04-15T20:37:45.853 [DEBUG] [Thread-25370] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:37:45.853 [DEBUG] [Thread-25370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:37:45.854 [DEBUG] [Thread-25370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:37:45.854 [DEBUG] [Thread-25370] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:37:45.854 [DEBUG] [Thread-25370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:37:45.854 [DEBUG] [Thread-25370] [transport.py] [_log()] Compression: none
2026-04-15T20:37:45.854 [DEBUG] [Thread-25370] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:37:45.911 [DEBUG] [Thread-25370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:37:45.912 [DEBUG] [Thread-25370] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:37:45.912 [DEBUG] [Thread-25370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:37:45.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:37:45.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:37:45.972 [DEBUG] [Thread-25370] [transport.py] [_log()] userauth is OK
2026-04-15T20:37:45.972 [DEBUG] [Thread-25370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:37:45.972 [DEBUG] [Thread-25370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:37:45.972 [DEBUG] [Thread-25370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:37:45.972 [DEBUG] [Thread-25370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:37:45.989 [INFO] [Thread-25370] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:37:45.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:37:45.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:37:46.830 [DEBUG] [Thread-25370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:37:46.831 [DEBUG] [Thread-25370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:37:46.879 [DEBUG] [Thread-25370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:37:46.879 [DEBUG] [Thread-25370] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:37:46.888 [DEBUG] [Thread-25370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:37:46.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:37:46.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')
2026-04-15T20:37:46.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T20:37:46.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:37:46.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:37:46.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:37:46.926 [DEBUG] [Thread-25370] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:37:47.995 [DEBUG] [Thread-25372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:50.273 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:37:55.814 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:01.194 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:03.044 [DEBUG] [Thread-25373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:06.559 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:09.444 [DEBUG] [Thread-25374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:11.928 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:16.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:38:16.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:38:16.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
2026-04-15T20:38:17.301 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:18.075 [DEBUG] [Thread-25375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:18.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 38, 2), 3.98218, 76.1639, 0.0, 7.90596, 9.57314, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:38:18.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:38:02
2026-04-15T20:38:18.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:38:18.997 [DEBUG] [Thread-25376] [transport.py] [_log()] starting thread (client mode): 0xf13510f0
2026-04-15T20:38:18.997 [DEBUG] [Thread-25376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:38:19.018 [DEBUG] [Thread-25376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:38:19.018 [INFO] [Thread-25376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:38:19.020 [DEBUG] [Thread-25376] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:38:19.021 [DEBUG] [Thread-25376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:38:19.021 [DEBUG] [Thread-25376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:38:19.021 [DEBUG] [Thread-25376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:38:19.021 [DEBUG] [Thread-25376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:38:19.021 [DEBUG] [Thread-25376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:38:19.021 [DEBUG] [Thread-25376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:38:19.021 [DEBUG] [Thread-25376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:38:19.021 [DEBUG] [Thread-25376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:38:19.021 [DEBUG] [Thread-25376] [transport.py] [_log()] client lang: <none>
2026-04-15T20:38:19.021 [DEBUG] [Thread-25376] [transport.py] [_log()] server lang: <none>
2026-04-15T20:38:19.021 [DEBUG] [Thread-25376] [transport.py] [_log()] kex follows: False
2026-04-15T20:38:19.021 [DEBUG] [Thread-25376] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:38:19.021 [DEBUG] [Thread-25376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:38:19.021 [DEBUG] [Thread-25376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:38:19.022 [DEBUG] [Thread-25376] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:38:19.022 [DEBUG] [Thread-25376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:38:19.022 [DEBUG] [Thread-25376] [transport.py] [_log()] Compression: none
2026-04-15T20:38:19.022 [DEBUG] [Thread-25376] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:38:19.038 [DEBUG] [Thread-25376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:38:19.039 [DEBUG] [Thread-25376] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:38:19.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:38:19.039 [DEBUG] [Thread-25376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:38:19.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:38:19.040 [DEBUG] [Thread-25376] [transport.py] [_log()] userauth is OK
2026-04-15T20:38:19.040 [DEBUG] [Thread-25376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:38:19.040 [DEBUG] [Thread-25376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:38:19.040 [DEBUG] [Thread-25376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:38:19.040 [DEBUG] [Thread-25376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:38:19.060 [INFO] [Thread-25376] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:38:19.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:38:19.691 [DEBUG] [Thread-25376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:38:19.691 [DEBUG] [Thread-25376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:38:19.692 [DEBUG] [Thread-25376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:38:19.732 [DEBUG] [Thread-25376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:38:19.732 [DEBUG] [Thread-25376] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:38:19.735 [DEBUG] [Thread-25376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:38:19.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:38:19.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:38:19.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:38:19.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:38:19.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:38:19.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:38:19.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:38:19.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:38:19.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:38:19.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.776173 -999.00   +9.70   8.04     79   +6.40 1 1 1 1 1     0    0 3.37 -0.09 ZNESW 9.3 8.0 283.7 11.5 10.3 -24.4 10.2 -23.0 9.9 -20.9 10.2 -23.1
2026-04-15T20:38:19.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:38:19.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:38:19.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.776173
2026-04-15T20:38:19.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:38:19.761 [DEBUG] [Thread-25376] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:38:19.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:38:19.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:38:19.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:38:19.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:38:19.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:38:02', tmtdew=3.98218, humidity=76.1639, cloud=0.0, wind=7.90596, temperature=9.57314, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:38:02', seeing=1.32, atlas_timestamp='2026-04-15T18:37:41.347', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07324999999999982, -0.011749999999999261, -0.04574999999999996, -0.05600000000000094, -0.03550000000000075, 0.004750000000001364, -0.025000000000000355, -0.007749999999999702, 0.01249999999999929, 0.002000000000000668, -0.04875000000000007, 0.02200000000000024, 0.038000000000000256, 0.013249999999999318, 0.010500000000000398, -0.011000000000001009, 0.02024999999999899, 0.0005000000000006111, 0.013499999999998735, 0.014749999999999375, 0.118999999999998, 0.010749999999998039, -0.01974999999999838, 0.013249999999999318, 0.05799999999999983, -0.014999999999998792, -0.004249999999998977, -0.0235000000000003, 0.015000000000000568, 0.03500000000000014, 0.02900000000000169, 0.0470000000000006, 0.01624999999999943], zp_timestamp='2026-04-15T18:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:38:20.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:38:20.020 [DEBUG] [Thread-25379] [transport.py] [_log()] starting thread (client mode): 0xee907460
2026-04-15T20:38:20.020 [DEBUG] [Thread-25379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:38:20.035 [DEBUG] [Thread-25379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:38:20.035 [INFO] [Thread-25379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:38:20.042 [DEBUG] [Thread-25379] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:38:20.042 [DEBUG] [Thread-25379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:38:20.043 [DEBUG] [Thread-25379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:38:20.043 [DEBUG] [Thread-25379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:38:20.043 [DEBUG] [Thread-25379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:38:20.043 [DEBUG] [Thread-25379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:38:20.043 [DEBUG] [Thread-25379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:38:20.043 [DEBUG] [Thread-25379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:38:20.043 [DEBUG] [Thread-25379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:38:20.043 [DEBUG] [Thread-25379] [transport.py] [_log()] client lang: <none>
2026-04-15T20:38:20.043 [DEBUG] [Thread-25379] [transport.py] [_log()] server lang: <none>
2026-04-15T20:38:20.043 [DEBUG] [Thread-25379] [transport.py] [_log()] kex follows: False
2026-04-15T20:38:20.043 [DEBUG] [Thread-25379] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:38:20.044 [DEBUG] [Thread-25379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:38:20.044 [DEBUG] [Thread-25379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:38:20.044 [DEBUG] [Thread-25379] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:38:20.044 [DEBUG] [Thread-25379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:38:20.044 [DEBUG] [Thread-25379] [transport.py] [_log()] Compression: none
2026-04-15T20:38:20.044 [DEBUG] [Thread-25379] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:38:20.100 [DEBUG] [Thread-25379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:38:20.101 [DEBUG] [Thread-25379] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:38:20.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:38:20.101 [DEBUG] [Thread-25379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:38:20.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:38:20.157 [DEBUG] [Thread-25379] [transport.py] [_log()] userauth is OK
2026-04-15T20:38:20.158 [DEBUG] [Thread-25379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:38:20.158 [DEBUG] [Thread-25379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:38:20.158 [DEBUG] [Thread-25379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:38:20.158 [DEBUG] [Thread-25379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:38:20.184 [INFO] [Thread-25379] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:38:20.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:38:20.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:38:21.015 [DEBUG] [Thread-25379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:38:21.015 [DEBUG] [Thread-25379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:38:21.063 [DEBUG] [Thread-25379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:38:21.063 [DEBUG] [Thread-25379] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:38:21.072 [DEBUG] [Thread-25379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:38:21.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:38:21.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')
2026-04-15T20:38:21.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') -> 00000000
2026-04-15T20:38:21.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:38:21.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:38:21.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:38:21.105 [DEBUG] [Thread-25379] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:38:22.685 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:28.081 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:33.105 [DEBUG] [Thread-25381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:33.523 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:38.563 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:38.565 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:38.899 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:44.353 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:48.155 [DEBUG] [Thread-25382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:49.731 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:51.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:38:51.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:38:51.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
2026-04-15T20:38:52.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 38, 38), 3.75101, 77.3942, 0.0, 8.54136, 9.61311, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:38:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:38:38
2026-04-15T20:38:52.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:38:53.337 [DEBUG] [Thread-25383] [transport.py] [_log()] starting thread (client mode): 0xee9c3040
2026-04-15T20:38:53.337 [DEBUG] [Thread-25383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:38:53.356 [DEBUG] [Thread-25383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:38:53.357 [INFO] [Thread-25383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:38:53.360 [DEBUG] [Thread-25383] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:38:53.360 [DEBUG] [Thread-25383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:38:53.360 [DEBUG] [Thread-25383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:38:53.360 [DEBUG] [Thread-25383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:38:53.360 [DEBUG] [Thread-25383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:38:53.360 [DEBUG] [Thread-25383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:38:53.360 [DEBUG] [Thread-25383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:38:53.360 [DEBUG] [Thread-25383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:38:53.361 [DEBUG] [Thread-25383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:38:53.361 [DEBUG] [Thread-25383] [transport.py] [_log()] client lang: <none>
2026-04-15T20:38:53.361 [DEBUG] [Thread-25383] [transport.py] [_log()] server lang: <none>
2026-04-15T20:38:53.361 [DEBUG] [Thread-25383] [transport.py] [_log()] kex follows: False
2026-04-15T20:38:53.361 [DEBUG] [Thread-25383] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:38:53.361 [DEBUG] [Thread-25383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:38:53.361 [DEBUG] [Thread-25383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:38:53.361 [DEBUG] [Thread-25383] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:38:53.361 [DEBUG] [Thread-25383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:38:53.361 [DEBUG] [Thread-25383] [transport.py] [_log()] Compression: none
2026-04-15T20:38:53.361 [DEBUG] [Thread-25383] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:38:53.379 [DEBUG] [Thread-25383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:38:53.379 [DEBUG] [Thread-25383] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:38:53.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:38:53.380 [DEBUG] [Thread-25383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:38:53.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:38:53.381 [DEBUG] [Thread-25383] [transport.py] [_log()] userauth is OK
2026-04-15T20:38:53.381 [DEBUG] [Thread-25383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:38:53.382 [DEBUG] [Thread-25383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:38:53.382 [DEBUG] [Thread-25383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:38:53.382 [DEBUG] [Thread-25383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:38:53.407 [INFO] [Thread-25383] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:38:53.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:38:54.046 [DEBUG] [Thread-25383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:38:54.046 [DEBUG] [Thread-25383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:38:54.047 [DEBUG] [Thread-25383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:38:54.087 [DEBUG] [Thread-25383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:38:54.087 [DEBUG] [Thread-25383] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:38:54.090 [DEBUG] [Thread-25383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:38:54.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:38:54.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:38:54.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:38:54.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:38:54.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:38:54.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:38:54.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:38:54.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:38:54.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:38:54.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.776521 -999.00   +9.70  11.10     79   +6.30 1 1 1 1 1     0    0 3.37 -0.25 ZNESW 11.4 11.1 282.0 12.6 10.3 -24.4 10.2 -23.0 9.9 -20.9 10.2 -23.0
2026-04-15T20:38:54.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:38:54.114 [DEBUG] [Thread-25383] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:38:54.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:38:54.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.776521
2026-04-15T20:38:54.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:38:54.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:38:54.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:38:54.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:38:54.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:38:54.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:38:38', tmtdew=3.75101, humidity=77.3942, cloud=0.0, wind=8.54136, temperature=9.61311, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:38:38', seeing=1.22, atlas_timestamp='2026-04-15T18:38:11.414', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07324999999999982, -0.011749999999999261, -0.04574999999999996, -0.05600000000000094, -0.03550000000000075, 0.004750000000001364, -0.025000000000000355, -0.007749999999999702, 0.01249999999999929, 0.002000000000000668, -0.04875000000000007, 0.02200000000000024, 0.038000000000000256, 0.013249999999999318, 0.010500000000000398, -0.011000000000001009, 0.02024999999999899, 0.0005000000000006111, 0.013499999999998735, 0.014749999999999375, 0.118999999999998, 0.010749999999998039, -0.01974999999999838, 0.013249999999999318, 0.05799999999999983, -0.014999999999998792, -0.004249999999998977, -0.0235000000000003, 0.015000000000000568, 0.03500000000000014, 0.02900000000000169, 0.0470000000000006, 0.01624999999999943], zp_timestamp='2026-04-15T18:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:38:54.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:38:54.390 [DEBUG] [Thread-25386] [transport.py] [_log()] starting thread (client mode): 0xee9c26e0
2026-04-15T20:38:54.390 [DEBUG] [Thread-25386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:38:54.404 [DEBUG] [Thread-25386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:38:54.405 [INFO] [Thread-25386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:38:54.412 [DEBUG] [Thread-25386] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:38:54.412 [DEBUG] [Thread-25386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:38:54.412 [DEBUG] [Thread-25386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:38:54.412 [DEBUG] [Thread-25386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:38:54.412 [DEBUG] [Thread-25386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:38:54.412 [DEBUG] [Thread-25386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:38:54.412 [DEBUG] [Thread-25386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:38:54.412 [DEBUG] [Thread-25386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:38:54.413 [DEBUG] [Thread-25386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:38:54.413 [DEBUG] [Thread-25386] [transport.py] [_log()] client lang: <none>
2026-04-15T20:38:54.413 [DEBUG] [Thread-25386] [transport.py] [_log()] server lang: <none>
2026-04-15T20:38:54.413 [DEBUG] [Thread-25386] [transport.py] [_log()] kex follows: False
2026-04-15T20:38:54.413 [DEBUG] [Thread-25386] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:38:54.413 [DEBUG] [Thread-25386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:38:54.413 [DEBUG] [Thread-25386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:38:54.413 [DEBUG] [Thread-25386] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:38:54.413 [DEBUG] [Thread-25386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:38:54.413 [DEBUG] [Thread-25386] [transport.py] [_log()] Compression: none
2026-04-15T20:38:54.413 [DEBUG] [Thread-25386] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:38:54.468 [DEBUG] [Thread-25386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:38:54.469 [DEBUG] [Thread-25386] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:38:54.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:38:54.469 [DEBUG] [Thread-25386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:38:54.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:38:54.525 [DEBUG] [Thread-25386] [transport.py] [_log()] userauth is OK
2026-04-15T20:38:54.525 [DEBUG] [Thread-25386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:38:54.525 [DEBUG] [Thread-25386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:38:54.526 [DEBUG] [Thread-25386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:38:54.526 [DEBUG] [Thread-25386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:38:54.553 [INFO] [Thread-25386] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:38:54.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:38:54.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:38:55.122 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:38:55.432 [DEBUG] [Thread-25386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:38:55.432 [DEBUG] [Thread-25386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:38:55.480 [DEBUG] [Thread-25386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:38:55.481 [DEBUG] [Thread-25386] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:38:55.490 [DEBUG] [Thread-25386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:38:55.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:38:55.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')
2026-04-15T20:38:55.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
2026-04-15T20:38:55.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:38:55.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:38:55.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:38:55.525 [DEBUG] [Thread-25386] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:39:00.537 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:03.185 [DEBUG] [Thread-25388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:05.892 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:09.595 [DEBUG] [Thread-25389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:11.269 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:16.647 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:18.227 [DEBUG] [Thread-25390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:22.038 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:25.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:39:25.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:39:25.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
2026-04-15T20:39:26.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 39, 13), 3.92649, 76.1969, 0.0, 9.33552, 9.58961, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:39:26.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:39:13
2026-04-15T20:39:27.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:39:27.479 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:27.705 [DEBUG] [Thread-25391] [transport.py] [_log()] starting thread (client mode): 0xf13cad10
2026-04-15T20:39:27.705 [DEBUG] [Thread-25391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:39:27.717 [DEBUG] [Thread-25391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:39:27.717 [INFO] [Thread-25391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:39:27.720 [DEBUG] [Thread-25391] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:39:27.720 [DEBUG] [Thread-25391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:39:27.720 [DEBUG] [Thread-25391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:39:27.720 [DEBUG] [Thread-25391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:39:27.721 [DEBUG] [Thread-25391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:39:27.721 [DEBUG] [Thread-25391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:39:27.721 [DEBUG] [Thread-25391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:39:27.721 [DEBUG] [Thread-25391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:39:27.721 [DEBUG] [Thread-25391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:39:27.721 [DEBUG] [Thread-25391] [transport.py] [_log()] client lang: <none>
2026-04-15T20:39:27.721 [DEBUG] [Thread-25391] [transport.py] [_log()] server lang: <none>
2026-04-15T20:39:27.721 [DEBUG] [Thread-25391] [transport.py] [_log()] kex follows: False
2026-04-15T20:39:27.721 [DEBUG] [Thread-25391] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:39:27.721 [DEBUG] [Thread-25391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:39:27.721 [DEBUG] [Thread-25391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:39:27.721 [DEBUG] [Thread-25391] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:39:27.722 [DEBUG] [Thread-25391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:39:27.722 [DEBUG] [Thread-25391] [transport.py] [_log()] Compression: none
2026-04-15T20:39:27.722 [DEBUG] [Thread-25391] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:39:27.738 [DEBUG] [Thread-25391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:39:27.738 [DEBUG] [Thread-25391] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:39:27.739 [DEBUG] [Thread-25391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:39:27.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:39:27.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:39:27.740 [DEBUG] [Thread-25391] [transport.py] [_log()] userauth is OK
2026-04-15T20:39:27.740 [DEBUG] [Thread-25391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:39:27.740 [DEBUG] [Thread-25391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:39:27.740 [DEBUG] [Thread-25391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:39:27.740 [DEBUG] [Thread-25391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:39:27.772 [INFO] [Thread-25391] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:39:27.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:39:28.439 [DEBUG] [Thread-25391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:39:28.440 [DEBUG] [Thread-25391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:39:28.440 [DEBUG] [Thread-25391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:39:28.481 [DEBUG] [Thread-25391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:39:28.481 [DEBUG] [Thread-25391] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:39:28.484 [DEBUG] [Thread-25391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:39:28.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:39:28.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:39:28.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:39:28.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:39:28.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:39:28.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:39:28.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:39:28.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:39:28.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:39:28.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.777216 -999.00   +9.60   9.86     80   +6.30 1 1 1 2 1     0    0 3.34 -0.99 ZNESW 9.5 9.9 279.7 11.4 10.3 -24.4 10.2 -23.1 9.9 -21.0 10.2 -23.2
2026-04-15T20:39:28.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:39:28.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:39:28.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.777216
2026-04-15T20:39:28.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:39:28.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:39:28.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:39:28.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:39:28.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:39:28.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:39:13', tmtdew=3.92649, humidity=76.1969, cloud=0.0, wind=9.33552, temperature=9.58961, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:39:13', seeing=1.26, atlas_timestamp='2026-04-15T18:39:11.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07324999999999982, -0.011749999999999261, -0.04574999999999996, -0.05600000000000094, -0.03550000000000075, 0.004750000000001364, -0.025000000000000355, -0.007749999999999702, 0.01249999999999929, 0.002000000000000668, -0.04875000000000007, 0.02200000000000024, 0.038000000000000256, 0.013249999999999318, 0.010500000000000398, -0.011000000000001009, 0.02024999999999899, 0.0005000000000006111, 0.013499999999998735, 0.014749999999999375, 0.118999999999998, 0.010749999999998039, -0.01974999999999838, 0.013249999999999318, 0.05799999999999983, -0.014999999999998792, -0.004249999999998977, -0.0235000000000003, 0.015000000000000568, 0.03500000000000014, 0.02900000000000169, 0.0470000000000006, 0.01624999999999943], zp_timestamp='2026-04-15T18:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:39:28.510 [DEBUG] [Thread-25391] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:39:28.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:39:28.791 [DEBUG] [Thread-25394] [transport.py] [_log()] starting thread (client mode): 0xf13e19f0
2026-04-15T20:39:28.791 [DEBUG] [Thread-25394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:39:28.806 [DEBUG] [Thread-25394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:39:28.806 [INFO] [Thread-25394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:39:28.813 [DEBUG] [Thread-25394] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:39:28.813 [DEBUG] [Thread-25394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:39:28.813 [DEBUG] [Thread-25394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:39:28.813 [DEBUG] [Thread-25394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:39:28.813 [DEBUG] [Thread-25394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:39:28.813 [DEBUG] [Thread-25394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:39:28.814 [DEBUG] [Thread-25394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:39:28.814 [DEBUG] [Thread-25394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:39:28.814 [DEBUG] [Thread-25394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:39:28.814 [DEBUG] [Thread-25394] [transport.py] [_log()] client lang: <none>
2026-04-15T20:39:28.814 [DEBUG] [Thread-25394] [transport.py] [_log()] server lang: <none>
2026-04-15T20:39:28.814 [DEBUG] [Thread-25394] [transport.py] [_log()] kex follows: False
2026-04-15T20:39:28.814 [DEBUG] [Thread-25394] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:39:28.814 [DEBUG] [Thread-25394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:39:28.814 [DEBUG] [Thread-25394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:39:28.814 [DEBUG] [Thread-25394] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:39:28.814 [DEBUG] [Thread-25394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:39:28.814 [DEBUG] [Thread-25394] [transport.py] [_log()] Compression: none
2026-04-15T20:39:28.814 [DEBUG] [Thread-25394] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:39:28.872 [DEBUG] [Thread-25394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:39:28.873 [DEBUG] [Thread-25394] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:39:28.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:39:28.873 [DEBUG] [Thread-25394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:39:28.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:39:28.933 [DEBUG] [Thread-25394] [transport.py] [_log()] userauth is OK
2026-04-15T20:39:28.933 [DEBUG] [Thread-25394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:39:28.933 [DEBUG] [Thread-25394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:39:28.933 [DEBUG] [Thread-25394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:39:28.933 [DEBUG] [Thread-25394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:39:28.959 [INFO] [Thread-25394] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:39:28.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:39:28.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:39:29.794 [DEBUG] [Thread-25394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:39:29.794 [DEBUG] [Thread-25394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:39:29.842 [DEBUG] [Thread-25394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:39:29.842 [DEBUG] [Thread-25394] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:39:29.851 [DEBUG] [Thread-25394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:39:29.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:39:29.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')
2026-04-15T20:39:29.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
2026-04-15T20:39:29.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:39:29.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:39:29.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:39:29.886 [DEBUG] [Thread-25394] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:39:32.871 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:33.256 [DEBUG] [Thread-25396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:38.237 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:38.768 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:38.770 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:43.716 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:48.299 [DEBUG] [Thread-25397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:49.118 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:54.485 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:39:59.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:39:59.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:39:59.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
2026-04-15T20:39:59.896 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:01.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 39, 49), 3.75106, 77.3939, 0.0, 10.0937, 9.61286, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:40:01.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:39:49
2026-04-15T20:40:01.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:40:02.033 [DEBUG] [Thread-25398] [transport.py] [_log()] starting thread (client mode): 0xf13e10c0
2026-04-15T20:40:02.034 [DEBUG] [Thread-25398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:40:02.049 [DEBUG] [Thread-25398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:40:02.049 [INFO] [Thread-25398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:40:02.052 [DEBUG] [Thread-25398] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:40:02.052 [DEBUG] [Thread-25398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:40:02.052 [DEBUG] [Thread-25398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:40:02.052 [DEBUG] [Thread-25398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:40:02.052 [DEBUG] [Thread-25398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:40:02.052 [DEBUG] [Thread-25398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:40:02.052 [DEBUG] [Thread-25398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:40:02.052 [DEBUG] [Thread-25398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:40:02.053 [DEBUG] [Thread-25398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:40:02.053 [DEBUG] [Thread-25398] [transport.py] [_log()] client lang: <none>
2026-04-15T20:40:02.053 [DEBUG] [Thread-25398] [transport.py] [_log()] server lang: <none>
2026-04-15T20:40:02.053 [DEBUG] [Thread-25398] [transport.py] [_log()] kex follows: False
2026-04-15T20:40:02.053 [DEBUG] [Thread-25398] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:40:02.053 [DEBUG] [Thread-25398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:40:02.053 [DEBUG] [Thread-25398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:40:02.053 [DEBUG] [Thread-25398] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:40:02.053 [DEBUG] [Thread-25398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:40:02.053 [DEBUG] [Thread-25398] [transport.py] [_log()] Compression: none
2026-04-15T20:40:02.053 [DEBUG] [Thread-25398] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:40:02.068 [DEBUG] [Thread-25398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:40:02.069 [DEBUG] [Thread-25398] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:40:02.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:40:02.069 [DEBUG] [Thread-25398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:40:02.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:40:02.070 [DEBUG] [Thread-25398] [transport.py] [_log()] userauth is OK
2026-04-15T20:40:02.070 [DEBUG] [Thread-25398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:40:02.070 [DEBUG] [Thread-25398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:40:02.070 [DEBUG] [Thread-25398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:40:02.070 [DEBUG] [Thread-25398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:40:02.089 [INFO] [Thread-25398] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:40:02.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:40:02.690 [DEBUG] [Thread-25398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:40:02.691 [DEBUG] [Thread-25398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:40:02.691 [DEBUG] [Thread-25398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:40:02.731 [DEBUG] [Thread-25398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:40:02.731 [DEBUG] [Thread-25398] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:40:02.734 [DEBUG] [Thread-25398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:40:02.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:40:02.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:40:02.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:40:02.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:40:02.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:40:02.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:40:02.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:40:02.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:40:02.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:40:02.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.777562 -999.00   +9.60   8.11     80   +6.30 1 1 1 2 1     0    0 3.35 -1.51 ZNESW 8.9 8.1 281.6 12.5 10.3 -24.7 10.2 -23.2 9.9 -21.2 10.2 -23.2
2026-04-15T20:40:02.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:40:02.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:40:02.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.777562
2026-04-15T20:40:02.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:40:02.759 [DEBUG] [Thread-25398] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:40:02.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:40:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:40:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:40:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:40:02.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:39:49', tmtdew=3.75106, humidity=77.3939, cloud=0.0, wind=10.0937, temperature=9.61286, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:39:49', seeing=1.27, atlas_timestamp='2026-04-15T18:39:41.357', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07324999999999982, -0.011749999999999261, -0.04574999999999996, -0.05600000000000094, -0.03550000000000075, 0.004750000000001364, -0.025000000000000355, -0.007749999999999702, 0.01249999999999929, 0.002000000000000668, -0.04875000000000007, 0.02200000000000024, 0.038000000000000256, 0.013249999999999318, 0.010500000000000398, -0.011000000000001009, 0.02024999999999899, 0.0005000000000006111, 0.013499999999998735, 0.014749999999999375, 0.118999999999998, 0.010749999999998039, -0.01974999999999838, 0.013249999999999318, 0.05799999999999983, -0.014999999999998792, -0.004249999999998977, -0.0235000000000003, 0.015000000000000568, 0.03500000000000014, 0.02900000000000169, 0.0470000000000006, 0.01624999999999943], zp_timestamp='2026-04-15T18:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:40:03.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:40:03.015 [DEBUG] [Thread-25401] [transport.py] [_log()] starting thread (client mode): 0xf1367700
2026-04-15T20:40:03.015 [DEBUG] [Thread-25401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:40:03.032 [DEBUG] [Thread-25401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:40:03.032 [INFO] [Thread-25401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:40:03.040 [DEBUG] [Thread-25401] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:40:03.040 [DEBUG] [Thread-25401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:40:03.040 [DEBUG] [Thread-25401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:40:03.040 [DEBUG] [Thread-25401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:40:03.040 [DEBUG] [Thread-25401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:40:03.040 [DEBUG] [Thread-25401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:40:03.040 [DEBUG] [Thread-25401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:40:03.040 [DEBUG] [Thread-25401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:40:03.040 [DEBUG] [Thread-25401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:40:03.040 [DEBUG] [Thread-25401] [transport.py] [_log()] client lang: <none>
2026-04-15T20:40:03.040 [DEBUG] [Thread-25401] [transport.py] [_log()] server lang: <none>
2026-04-15T20:40:03.040 [DEBUG] [Thread-25401] [transport.py] [_log()] kex follows: False
2026-04-15T20:40:03.041 [DEBUG] [Thread-25401] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:40:03.041 [DEBUG] [Thread-25401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:40:03.041 [DEBUG] [Thread-25401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:40:03.041 [DEBUG] [Thread-25401] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:40:03.041 [DEBUG] [Thread-25401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:40:03.041 [DEBUG] [Thread-25401] [transport.py] [_log()] Compression: none
2026-04-15T20:40:03.041 [DEBUG] [Thread-25401] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:40:03.096 [DEBUG] [Thread-25401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:40:03.096 [DEBUG] [Thread-25401] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:40:03.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:40:03.097 [DEBUG] [Thread-25401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:40:03.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:40:03.157 [DEBUG] [Thread-25401] [transport.py] [_log()] userauth is OK
2026-04-15T20:40:03.157 [DEBUG] [Thread-25401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:40:03.158 [DEBUG] [Thread-25401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:40:03.158 [DEBUG] [Thread-25401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:40:03.158 [DEBUG] [Thread-25401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:40:03.190 [INFO] [Thread-25401] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:40:03.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:40:03.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:40:03.331 [DEBUG] [Thread-25403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:04.045 [DEBUG] [Thread-25401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:40:04.046 [DEBUG] [Thread-25401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:40:04.093 [DEBUG] [Thread-25401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:40:04.093 [DEBUG] [Thread-25401] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:40:04.102 [DEBUG] [Thread-25401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:40:04.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:40:04.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')
2026-04-15T20:40:04.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
2026-04-15T20:40:04.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:40:04.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:40:04.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:40:04.137 [DEBUG] [Thread-25401] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:40:05.280 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:09.760 [DEBUG] [Thread-25404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:10.657 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:16.023 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:18.373 [DEBUG] [Thread-25405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:21.426 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:26.819 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:32.196 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:33.402 [DEBUG] [Thread-25406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:34.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:40:34.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:40:34.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
2026-04-15T20:40:35.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 40, 24), 3.97908, 76.1805, 0.0, 10.094, 9.57316, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:40:35.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:40:24
2026-04-15T20:40:35.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:40:36.279 [DEBUG] [Thread-25407] [transport.py] [_log()] starting thread (client mode): 0xf1367850
2026-04-15T20:40:36.280 [DEBUG] [Thread-25407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:40:36.299 [DEBUG] [Thread-25407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:40:36.299 [INFO] [Thread-25407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:40:36.302 [DEBUG] [Thread-25407] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:40:36.302 [DEBUG] [Thread-25407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:40:36.302 [DEBUG] [Thread-25407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:40:36.302 [DEBUG] [Thread-25407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:40:36.302 [DEBUG] [Thread-25407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:40:36.302 [DEBUG] [Thread-25407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:40:36.302 [DEBUG] [Thread-25407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:40:36.302 [DEBUG] [Thread-25407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:40:36.303 [DEBUG] [Thread-25407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:40:36.303 [DEBUG] [Thread-25407] [transport.py] [_log()] client lang: <none>
2026-04-15T20:40:36.303 [DEBUG] [Thread-25407] [transport.py] [_log()] server lang: <none>
2026-04-15T20:40:36.303 [DEBUG] [Thread-25407] [transport.py] [_log()] kex follows: False
2026-04-15T20:40:36.303 [DEBUG] [Thread-25407] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:40:36.303 [DEBUG] [Thread-25407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:40:36.303 [DEBUG] [Thread-25407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:40:36.303 [DEBUG] [Thread-25407] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:40:36.303 [DEBUG] [Thread-25407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:40:36.303 [DEBUG] [Thread-25407] [transport.py] [_log()] Compression: none
2026-04-15T20:40:36.303 [DEBUG] [Thread-25407] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:40:36.318 [DEBUG] [Thread-25407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:40:36.318 [DEBUG] [Thread-25407] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:40:36.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:40:36.319 [DEBUG] [Thread-25407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:40:36.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:40:36.360 [DEBUG] [Thread-25407] [transport.py] [_log()] userauth is OK
2026-04-15T20:40:36.360 [DEBUG] [Thread-25407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:40:36.360 [DEBUG] [Thread-25407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:40:36.360 [DEBUG] [Thread-25407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:40:36.360 [DEBUG] [Thread-25407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:40:36.392 [INFO] [Thread-25407] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:40:36.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:40:37.025 [DEBUG] [Thread-25407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:40:37.025 [DEBUG] [Thread-25407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:40:37.026 [DEBUG] [Thread-25407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:40:37.066 [DEBUG] [Thread-25407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:40:37.066 [DEBUG] [Thread-25407] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:40:37.069 [DEBUG] [Thread-25407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:40:37.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:40:37.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:40:37.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:40:37.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:40:37.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:40:37.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:40:37.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:40:37.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:40:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:40:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.777909 -999.00   +9.50   7.44     80   +6.30 1 1 1 2 1     0    0 3.28 -2.43 ZNESW 8.0 7.4 288.8 10.7 10.3 -24.6 10.2 -23.2 9.9 -21.1 10.1 -23.1
2026-04-15T20:40:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:40:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:40:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.777909
2026-04-15T20:40:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:40:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:40:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:40:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:40:37.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:40:37.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:40:24', tmtdew=3.97908, humidity=76.1805, cloud=0.0, wind=10.094, temperature=9.57316, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:40:24', seeing=1.17, atlas_timestamp='2026-04-15T18:40:11.338', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07324999999999982, -0.011749999999999261, -0.04574999999999996, -0.05600000000000094, -0.03550000000000075, 0.004750000000001364, -0.025000000000000355, -0.007749999999999702, 0.01249999999999929, 0.002000000000000668, -0.04875000000000007, 0.02200000000000024, 0.038000000000000256, 0.013249999999999318, 0.010500000000000398, -0.011000000000001009, 0.02024999999999899, 0.0005000000000006111, 0.013499999999998735, 0.014749999999999375, 0.118999999999998, 0.010749999999998039, -0.01974999999999838, 0.013249999999999318, 0.05799999999999983, -0.014999999999998792, -0.004249999999998977, -0.0235000000000003, 0.015000000000000568, 0.03500000000000014, 0.02900000000000169, 0.0470000000000006, 0.01624999999999943], zp_timestamp='2026-04-15T18:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:40:37.092 [DEBUG] [Thread-25407] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:40:37.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:40:37.358 [DEBUG] [Thread-25410] [transport.py] [_log()] starting thread (client mode): 0xf13e03a0
2026-04-15T20:40:37.358 [DEBUG] [Thread-25410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:40:37.375 [DEBUG] [Thread-25410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:40:37.375 [INFO] [Thread-25410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:40:37.386 [DEBUG] [Thread-25410] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:40:37.386 [DEBUG] [Thread-25410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:40:37.386 [DEBUG] [Thread-25410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:40:37.386 [DEBUG] [Thread-25410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:40:37.386 [DEBUG] [Thread-25410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:40:37.386 [DEBUG] [Thread-25410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:40:37.386 [DEBUG] [Thread-25410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:40:37.386 [DEBUG] [Thread-25410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:40:37.386 [DEBUG] [Thread-25410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:40:37.386 [DEBUG] [Thread-25410] [transport.py] [_log()] client lang: <none>
2026-04-15T20:40:37.387 [DEBUG] [Thread-25410] [transport.py] [_log()] server lang: <none>
2026-04-15T20:40:37.387 [DEBUG] [Thread-25410] [transport.py] [_log()] kex follows: False
2026-04-15T20:40:37.387 [DEBUG] [Thread-25410] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:40:37.387 [DEBUG] [Thread-25410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:40:37.387 [DEBUG] [Thread-25410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:40:37.387 [DEBUG] [Thread-25410] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:40:37.387 [DEBUG] [Thread-25410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:40:37.387 [DEBUG] [Thread-25410] [transport.py] [_log()] Compression: none
2026-04-15T20:40:37.387 [DEBUG] [Thread-25410] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:40:37.445 [DEBUG] [Thread-25410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:40:37.446 [DEBUG] [Thread-25410] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:40:37.446 [DEBUG] [Thread-25410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:40:37.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:40:37.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:40:37.503 [DEBUG] [Thread-25410] [transport.py] [_log()] userauth is OK
2026-04-15T20:40:37.503 [DEBUG] [Thread-25410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:40:37.504 [DEBUG] [Thread-25410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:40:37.504 [DEBUG] [Thread-25410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:40:37.504 [DEBUG] [Thread-25410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:40:37.531 [INFO] [Thread-25410] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:40:37.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:40:37.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:40:37.677 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:38.350 [DEBUG] [Thread-25410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:40:38.350 [DEBUG] [Thread-25410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:40:38.398 [DEBUG] [Thread-25410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:40:38.398 [DEBUG] [Thread-25410] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:40:38.411 [DEBUG] [Thread-25410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:40:38.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:40:38.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')
2026-04-15T20:40:38.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
2026-04-15T20:40:38.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:40:38.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:40:38.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:40:38.458 [DEBUG] [Thread-25410] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:40:38.971 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:38.973 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:43.081 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:48.433 [DEBUG] [Thread-25412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:48.458 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:53.925 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:40:59.328 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:03.477 [DEBUG] [Thread-25413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:04.743 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:08.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:41:08.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:41:08.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
2026-04-15T20:41:09.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 40, 24), 3.92908, 76.1805, 0.0, 10.094, 9.57316, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:41:09.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:40:24
2026-04-15T20:41:09.927 [DEBUG] [Thread-25414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:10.109 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:10.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:41:10.624 [DEBUG] [Thread-25415] [transport.py] [_log()] starting thread (client mode): 0xf13c9d20
2026-04-15T20:41:10.624 [DEBUG] [Thread-25415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:41:10.643 [DEBUG] [Thread-25415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:41:10.643 [INFO] [Thread-25415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:41:10.646 [DEBUG] [Thread-25415] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:41:10.646 [DEBUG] [Thread-25415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:41:10.646 [DEBUG] [Thread-25415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:41:10.646 [DEBUG] [Thread-25415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:41:10.647 [DEBUG] [Thread-25415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:41:10.647 [DEBUG] [Thread-25415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:41:10.647 [DEBUG] [Thread-25415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:41:10.647 [DEBUG] [Thread-25415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:41:10.647 [DEBUG] [Thread-25415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:41:10.647 [DEBUG] [Thread-25415] [transport.py] [_log()] client lang: <none>
2026-04-15T20:41:10.647 [DEBUG] [Thread-25415] [transport.py] [_log()] server lang: <none>
2026-04-15T20:41:10.647 [DEBUG] [Thread-25415] [transport.py] [_log()] kex follows: False
2026-04-15T20:41:10.647 [DEBUG] [Thread-25415] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:41:10.647 [DEBUG] [Thread-25415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:41:10.647 [DEBUG] [Thread-25415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:41:10.647 [DEBUG] [Thread-25415] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:41:10.648 [DEBUG] [Thread-25415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:41:10.648 [DEBUG] [Thread-25415] [transport.py] [_log()] Compression: none
2026-04-15T20:41:10.648 [DEBUG] [Thread-25415] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:41:10.663 [DEBUG] [Thread-25415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:41:10.663 [DEBUG] [Thread-25415] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:41:10.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:41:10.664 [DEBUG] [Thread-25415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:41:10.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:41:10.665 [DEBUG] [Thread-25415] [transport.py] [_log()] userauth is OK
2026-04-15T20:41:10.665 [DEBUG] [Thread-25415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:41:10.666 [DEBUG] [Thread-25415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:41:10.666 [DEBUG] [Thread-25415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:41:10.666 [DEBUG] [Thread-25415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:41:10.690 [INFO] [Thread-25415] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:41:10.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:41:11.387 [DEBUG] [Thread-25415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:41:11.388 [DEBUG] [Thread-25415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:41:11.388 [DEBUG] [Thread-25415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:41:11.428 [DEBUG] [Thread-25415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:41:11.428 [DEBUG] [Thread-25415] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:41:11.431 [DEBUG] [Thread-25415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:41:11.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:41:11.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:41:11.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:41:11.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:41:11.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:41:11.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:41:11.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:41:11.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:41:11.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:41:11.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.778257 -999.00   +9.50   8.23     80   +6.30 1 1 1 2 1     0    0 3.27 -3.42 ZNESW 7.6 8.2 290.6 11.7 10.3 -24.6 10.2 -23.1 9.9 -21.3 10.2 -23.2
2026-04-15T20:41:11.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:41:11.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:41:11.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.778257
2026-04-15T20:41:11.453 [DEBUG] [Thread-25415] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:41:11.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:41:11.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:41:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:41:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:41:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:41:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:40:24', tmtdew=3.92908, humidity=76.1805, cloud=0.0, wind=10.094, temperature=9.57316, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:41:00', seeing=1.06, atlas_timestamp='2026-04-15T18:40:41.405', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.04974999999999952, -0.08924999999999983, -0.0835000000000008, -0.036000000000001364, 0.0002500000000011937, -0.03700000000000081, -0.013749999999999929, -0.009500000000000952, -0.019000000000000128, -0.042749999999999844, 0.1695000000000011, 0.10699999999999932, 0.0007499999999982521, -0.008000000000000895, -0.023000000000001464, 0.02424999999999855, -0.006000000000000227, 0.050499999999999545, 0.031249999999998224, 0.18299999999999983, 0.0337499999999995, -0.03474999999999895, 0.0337499999999995, 0.0519999999999996, -0.05250000000000021, 0.005250000000000199, -0.02099999999999902, -0.0039999999999995595, -0.02049999999999841, 0.030000000000001137, 0.02850000000000108, -0.01025000000000098], zp_timestamp='2026-04-15T18:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:41:11.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:41:11.715 [DEBUG] [Thread-25418] [transport.py] [_log()] starting thread (client mode): 0xee9c12a0
2026-04-15T20:41:11.716 [DEBUG] [Thread-25418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:41:11.734 [DEBUG] [Thread-25418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:41:11.734 [INFO] [Thread-25418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:41:11.741 [DEBUG] [Thread-25418] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:41:11.742 [DEBUG] [Thread-25418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:41:11.742 [DEBUG] [Thread-25418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:41:11.742 [DEBUG] [Thread-25418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:41:11.742 [DEBUG] [Thread-25418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:41:11.742 [DEBUG] [Thread-25418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:41:11.742 [DEBUG] [Thread-25418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:41:11.742 [DEBUG] [Thread-25418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:41:11.742 [DEBUG] [Thread-25418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:41:11.742 [DEBUG] [Thread-25418] [transport.py] [_log()] client lang: <none>
2026-04-15T20:41:11.742 [DEBUG] [Thread-25418] [transport.py] [_log()] server lang: <none>
2026-04-15T20:41:11.742 [DEBUG] [Thread-25418] [transport.py] [_log()] kex follows: False
2026-04-15T20:41:11.742 [DEBUG] [Thread-25418] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:41:11.743 [DEBUG] [Thread-25418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:41:11.743 [DEBUG] [Thread-25418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:41:11.743 [DEBUG] [Thread-25418] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:41:11.743 [DEBUG] [Thread-25418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:41:11.743 [DEBUG] [Thread-25418] [transport.py] [_log()] Compression: none
2026-04-15T20:41:11.743 [DEBUG] [Thread-25418] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:41:11.799 [DEBUG] [Thread-25418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:41:11.800 [DEBUG] [Thread-25418] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:41:11.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:41:11.800 [DEBUG] [Thread-25418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:41:11.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:41:11.856 [DEBUG] [Thread-25418] [transport.py] [_log()] userauth is OK
2026-04-15T20:41:11.856 [DEBUG] [Thread-25418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:41:11.856 [DEBUG] [Thread-25418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:41:11.856 [DEBUG] [Thread-25418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:41:11.856 [DEBUG] [Thread-25418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:41:11.876 [INFO] [Thread-25418] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:41:11.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:41:11.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:41:12.686 [DEBUG] [Thread-25418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:41:12.687 [DEBUG] [Thread-25418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:41:12.734 [DEBUG] [Thread-25418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:41:12.734 [DEBUG] [Thread-25418] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:41:12.743 [DEBUG] [Thread-25418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:41:12.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:41:12.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')
2026-04-15T20:41:12.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') -> 00000000
2026-04-15T20:41:12.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:41:12.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:41:12.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:41:12.779 [DEBUG] [Thread-25418] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:41:15.538 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:18.508 [DEBUG] [Thread-25420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:20.930 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:26.333 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:31.690 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:33.547 [DEBUG] [Thread-25421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:37.082 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:39.177 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:39.178 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:42.447 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:42.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:41:42.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:41:42.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
2026-04-15T20:41:44.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 41, 35), 3.69959, 77.66, 0.0, 8.71776, 9.54704, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:41:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:41:35
2026-04-15T20:41:44.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:41:44.903 [DEBUG] [Thread-25422] [transport.py] [_log()] starting thread (client mode): 0xee9c2ef0
2026-04-15T20:41:44.904 [DEBUG] [Thread-25422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:41:44.922 [DEBUG] [Thread-25422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:41:44.922 [INFO] [Thread-25422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:41:44.926 [DEBUG] [Thread-25422] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:41:44.926 [DEBUG] [Thread-25422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:41:44.926 [DEBUG] [Thread-25422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:41:44.926 [DEBUG] [Thread-25422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:41:44.926 [DEBUG] [Thread-25422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:41:44.926 [DEBUG] [Thread-25422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:41:44.926 [DEBUG] [Thread-25422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:41:44.926 [DEBUG] [Thread-25422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:41:44.926 [DEBUG] [Thread-25422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:41:44.926 [DEBUG] [Thread-25422] [transport.py] [_log()] client lang: <none>
2026-04-15T20:41:44.926 [DEBUG] [Thread-25422] [transport.py] [_log()] server lang: <none>
2026-04-15T20:41:44.927 [DEBUG] [Thread-25422] [transport.py] [_log()] kex follows: False
2026-04-15T20:41:44.927 [DEBUG] [Thread-25422] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:41:44.927 [DEBUG] [Thread-25422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:41:44.927 [DEBUG] [Thread-25422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:41:44.927 [DEBUG] [Thread-25422] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:41:44.927 [DEBUG] [Thread-25422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:41:44.927 [DEBUG] [Thread-25422] [transport.py] [_log()] Compression: none
2026-04-15T20:41:44.927 [DEBUG] [Thread-25422] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:41:44.944 [DEBUG] [Thread-25422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:41:44.944 [DEBUG] [Thread-25422] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:41:44.945 [DEBUG] [Thread-25422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:41:44.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:41:44.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:41:44.946 [DEBUG] [Thread-25422] [transport.py] [_log()] userauth is OK
2026-04-15T20:41:44.946 [DEBUG] [Thread-25422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:41:44.946 [DEBUG] [Thread-25422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:41:44.946 [DEBUG] [Thread-25422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:41:44.946 [DEBUG] [Thread-25422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:41:44.982 [INFO] [Thread-25422] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:41:44.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:41:45.662 [DEBUG] [Thread-25422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:41:45.662 [DEBUG] [Thread-25422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:41:45.663 [DEBUG] [Thread-25422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:41:45.703 [DEBUG] [Thread-25422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:41:45.703 [DEBUG] [Thread-25422] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:41:45.705 [DEBUG] [Thread-25422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:41:45.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:41:45.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:41:45.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:41:45.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:41:45.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:41:45.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:41:45.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:41:45.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:41:45.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:41:45.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.778604 -999.00   +9.50   7.39     80   +6.30 1 1 1 2 1     0    0 3.25 -4.30 ZNESW 7.9 7.4 280.8 10.4 10.2 -24.5 10.2 -23.1 9.9 -21.3 10.2 -23.2
2026-04-15T20:41:45.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:41:45.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:41:45.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.778604
2026-04-15T20:41:45.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:41:45.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:41:45.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:41:45.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:41:45.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:41:45.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:41:35', tmtdew=3.69959, humidity=77.66, cloud=0.0, wind=8.71776, temperature=9.54704, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:41:35', seeing=1.12, atlas_timestamp='2026-04-15T18:41:11.386', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.04974999999999952, -0.08924999999999983, -0.0835000000000008, -0.036000000000001364, 0.0002500000000011937, -0.03700000000000081, -0.013749999999999929, -0.009500000000000952, -0.019000000000000128, -0.042749999999999844, 0.1695000000000011, 0.10699999999999932, 0.0007499999999982521, -0.008000000000000895, -0.023000000000001464, 0.02424999999999855, -0.006000000000000227, 0.050499999999999545, 0.031249999999998224, 0.18299999999999983, 0.0337499999999995, -0.03474999999999895, 0.0337499999999995, 0.0519999999999996, -0.05250000000000021, 0.005250000000000199, -0.02099999999999902, -0.0039999999999995595, -0.02049999999999841, 0.030000000000001137, 0.02850000000000108, -0.01025000000000098], zp_timestamp='2026-04-15T18:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:41:45.729 [DEBUG] [Thread-25422] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:41:45.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:41:45.976 [DEBUG] [Thread-25425] [transport.py] [_log()] starting thread (client mode): 0xee990dc0
2026-04-15T20:41:45.977 [DEBUG] [Thread-25425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:41:45.990 [DEBUG] [Thread-25425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:41:45.990 [INFO] [Thread-25425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:41:45.998 [DEBUG] [Thread-25425] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:41:45.998 [DEBUG] [Thread-25425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:41:45.998 [DEBUG] [Thread-25425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:41:45.998 [DEBUG] [Thread-25425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:41:45.998 [DEBUG] [Thread-25425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:41:45.998 [DEBUG] [Thread-25425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:41:45.998 [DEBUG] [Thread-25425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:41:45.998 [DEBUG] [Thread-25425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:41:45.998 [DEBUG] [Thread-25425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:41:45.998 [DEBUG] [Thread-25425] [transport.py] [_log()] client lang: <none>
2026-04-15T20:41:45.998 [DEBUG] [Thread-25425] [transport.py] [_log()] server lang: <none>
2026-04-15T20:41:45.998 [DEBUG] [Thread-25425] [transport.py] [_log()] kex follows: False
2026-04-15T20:41:45.999 [DEBUG] [Thread-25425] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:41:45.999 [DEBUG] [Thread-25425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:41:45.999 [DEBUG] [Thread-25425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:41:45.999 [DEBUG] [Thread-25425] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:41:45.999 [DEBUG] [Thread-25425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:41:45.999 [DEBUG] [Thread-25425] [transport.py] [_log()] Compression: none
2026-04-15T20:41:45.999 [DEBUG] [Thread-25425] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:41:46.055 [DEBUG] [Thread-25425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:41:46.055 [DEBUG] [Thread-25425] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:41:46.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:41:46.056 [DEBUG] [Thread-25425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:41:46.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:41:46.112 [DEBUG] [Thread-25425] [transport.py] [_log()] userauth is OK
2026-04-15T20:41:46.112 [DEBUG] [Thread-25425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:41:46.112 [DEBUG] [Thread-25425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:41:46.112 [DEBUG] [Thread-25425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:41:46.112 [DEBUG] [Thread-25425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:41:46.130 [INFO] [Thread-25425] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:41:46.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:41:46.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:41:46.987 [DEBUG] [Thread-25425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:41:46.987 [DEBUG] [Thread-25425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:41:47.035 [DEBUG] [Thread-25425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:41:47.035 [DEBUG] [Thread-25425] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:41:47.044 [DEBUG] [Thread-25425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:41:47.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:41:47.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')
2026-04-15T20:41: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') -> 00000000
2026-04-15T20:41:47.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:41:47.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:41:47.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:41:47.083 [DEBUG] [Thread-25425] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:41:47.825 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:48.581 [DEBUG] [Thread-25427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:53.319 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:41:58.786 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:03.623 [DEBUG] [Thread-25428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:04.140 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:09.517 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:10.095 [DEBUG] [Thread-25429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:14.920 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:17.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:42:17.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:42:17.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
2026-04-15T20:42:18.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 42, 10), 3.93697, 76.3964, 0.0, 8.96508, 9.50702, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:42:18.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:42:10
2026-04-15T20:42:18.654 [DEBUG] [Thread-25430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:18.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:42:19.165 [DEBUG] [Thread-25431] [transport.py] [_log()] starting thread (client mode): 0xee992590
2026-04-15T20:42:19.165 [DEBUG] [Thread-25431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:42:19.178 [DEBUG] [Thread-25431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:42:19.178 [INFO] [Thread-25431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:42:19.181 [DEBUG] [Thread-25431] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:42:19.181 [DEBUG] [Thread-25431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:42:19.181 [DEBUG] [Thread-25431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:42:19.181 [DEBUG] [Thread-25431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:42:19.181 [DEBUG] [Thread-25431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:42:19.181 [DEBUG] [Thread-25431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:42:19.182 [DEBUG] [Thread-25431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:42:19.182 [DEBUG] [Thread-25431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:42:19.182 [DEBUG] [Thread-25431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:42:19.182 [DEBUG] [Thread-25431] [transport.py] [_log()] client lang: <none>
2026-04-15T20:42:19.182 [DEBUG] [Thread-25431] [transport.py] [_log()] server lang: <none>
2026-04-15T20:42:19.182 [DEBUG] [Thread-25431] [transport.py] [_log()] kex follows: False
2026-04-15T20:42:19.182 [DEBUG] [Thread-25431] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:42:19.182 [DEBUG] [Thread-25431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:42:19.182 [DEBUG] [Thread-25431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:42:19.182 [DEBUG] [Thread-25431] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:42:19.182 [DEBUG] [Thread-25431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:42:19.183 [DEBUG] [Thread-25431] [transport.py] [_log()] Compression: none
2026-04-15T20:42:19.183 [DEBUG] [Thread-25431] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:42:19.199 [DEBUG] [Thread-25431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:42:19.199 [DEBUG] [Thread-25431] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:42:19.200 [DEBUG] [Thread-25431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:42:19.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:42:19.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:42:19.201 [DEBUG] [Thread-25431] [transport.py] [_log()] userauth is OK
2026-04-15T20:42:19.201 [DEBUG] [Thread-25431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:42:19.201 [DEBUG] [Thread-25431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:42:19.201 [DEBUG] [Thread-25431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:42:19.201 [DEBUG] [Thread-25431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:42:19.235 [INFO] [Thread-25431] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:42:19.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:42:19.829 [DEBUG] [Thread-25431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:42:19.830 [DEBUG] [Thread-25431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:42:19.830 [DEBUG] [Thread-25431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:42:19.870 [DEBUG] [Thread-25431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:42:19.870 [DEBUG] [Thread-25431] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:42:19.873 [DEBUG] [Thread-25431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:42:19.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:42:19.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:42:19.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:42:19.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:42:19.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:42:19.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:42:19.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:42:19.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:42:19.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:42:19.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.779298 -999.00   +9.50   6.80     80   +6.30 1 1 1 2 1     0    0 3.23 -5.57 ZNESW 7.0 6.8 307.0 7.5 10.2 -24.5 10.1 -23.2 9.8 -21.1 10.2 -23.3
2026-04-15T20:42:19.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:42:19.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:42:19.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.779298
2026-04-15T20:42:19.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:42:19.900 [DEBUG] [Thread-25431] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:42:19.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:42:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:42:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:42:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:42:19.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:42:10', tmtdew=3.93697, humidity=76.3964, cloud=0.0, wind=8.96508, temperature=9.50702, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:42:11', seeing=1.08, atlas_timestamp='2026-04-15T18:42:11.347', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.04974999999999952, -0.08924999999999983, -0.0835000000000008, -0.036000000000001364, 0.0002500000000011937, -0.03700000000000081, -0.013749999999999929, -0.009500000000000952, -0.019000000000000128, -0.042749999999999844, 0.1695000000000011, 0.10699999999999932, 0.0007499999999982521, -0.008000000000000895, -0.023000000000001464, 0.02424999999999855, -0.006000000000000227, 0.050499999999999545, 0.031249999999998224, 0.18299999999999983, 0.0337499999999995, -0.03474999999999895, 0.0337499999999995, 0.0519999999999996, -0.05250000000000021, 0.005250000000000199, -0.02099999999999902, -0.0039999999999995595, -0.02049999999999841, 0.030000000000001137, 0.02850000000000108, -0.01025000000000098], zp_timestamp='2026-04-15T18:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:42:20.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:42:20.152 [DEBUG] [Thread-25434] [transport.py] [_log()] starting thread (client mode): 0xee993700
2026-04-15T20:42:20.152 [DEBUG] [Thread-25434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:42:20.167 [DEBUG] [Thread-25434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:42:20.167 [INFO] [Thread-25434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:42:20.174 [DEBUG] [Thread-25434] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:42:20.174 [DEBUG] [Thread-25434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:42:20.174 [DEBUG] [Thread-25434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:42:20.174 [DEBUG] [Thread-25434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:42:20.174 [DEBUG] [Thread-25434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:42:20.174 [DEBUG] [Thread-25434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:42:20.175 [DEBUG] [Thread-25434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:42:20.175 [DEBUG] [Thread-25434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:42:20.175 [DEBUG] [Thread-25434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:42:20.175 [DEBUG] [Thread-25434] [transport.py] [_log()] client lang: <none>
2026-04-15T20:42:20.175 [DEBUG] [Thread-25434] [transport.py] [_log()] server lang: <none>
2026-04-15T20:42:20.175 [DEBUG] [Thread-25434] [transport.py] [_log()] kex follows: False
2026-04-15T20:42:20.175 [DEBUG] [Thread-25434] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:42:20.175 [DEBUG] [Thread-25434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:42:20.175 [DEBUG] [Thread-25434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:42:20.175 [DEBUG] [Thread-25434] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:42:20.175 [DEBUG] [Thread-25434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:42:20.176 [DEBUG] [Thread-25434] [transport.py] [_log()] Compression: none
2026-04-15T20:42:20.176 [DEBUG] [Thread-25434] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:42:20.230 [DEBUG] [Thread-25434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:42:20.231 [DEBUG] [Thread-25434] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:42:20.231 [DEBUG] [Thread-25434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:42:20.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:42:20.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:42:20.287 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:20.288 [DEBUG] [Thread-25434] [transport.py] [_log()] userauth is OK
2026-04-15T20:42:20.288 [DEBUG] [Thread-25434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:42:20.288 [DEBUG] [Thread-25434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:42:20.288 [DEBUG] [Thread-25434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:42:20.288 [DEBUG] [Thread-25434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:42:20.313 [INFO] [Thread-25434] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:42:20.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:42:20.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:42:21.134 [DEBUG] [Thread-25434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:42:21.135 [DEBUG] [Thread-25434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:42:21.186 [DEBUG] [Thread-25434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:42:21.186 [DEBUG] [Thread-25434] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:42:21.195 [DEBUG] [Thread-25434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:42:21.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:42:21.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T20:42:21.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
2026-04-15T20:42:21.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:42:21.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:42:21.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:42:21.230 [DEBUG] [Thread-25434] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:42:25.673 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:31.132 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:33.687 [DEBUG] [Thread-25436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:36.534 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:39.383 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:39.384 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:41.901 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:47.280 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:48.731 [DEBUG] [Thread-25437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:51.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:42:51.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:42:51.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
2026-04-15T20:42:52.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 42, 10), 3.93697, 76.3964, 0.0, 8.96508, 9.50702, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:42:52.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:42:10
2026-04-15T20:42:52.657 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:42:52.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:42:53.281 [DEBUG] [Thread-25438] [transport.py] [_log()] starting thread (client mode): 0xee991e70
2026-04-15T20:42:53.281 [DEBUG] [Thread-25438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:42:53.300 [DEBUG] [Thread-25438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:42:53.300 [INFO] [Thread-25438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] client lang: <none>
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] server lang: <none>
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] kex follows: False
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:42:53.303 [DEBUG] [Thread-25438] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:42:53.304 [DEBUG] [Thread-25438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:42:53.304 [DEBUG] [Thread-25438] [transport.py] [_log()] Compression: none
2026-04-15T20:42:53.304 [DEBUG] [Thread-25438] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:42:53.319 [DEBUG] [Thread-25438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:42:53.319 [DEBUG] [Thread-25438] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:42:53.319 [DEBUG] [Thread-25438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:42:53.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:42:53.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:42:53.320 [DEBUG] [Thread-25438] [transport.py] [_log()] userauth is OK
2026-04-15T20:42:53.320 [DEBUG] [Thread-25438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:42:53.320 [DEBUG] [Thread-25438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:42:53.320 [DEBUG] [Thread-25438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:42:53.321 [DEBUG] [Thread-25438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:42:53.339 [INFO] [Thread-25438] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:42:53.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:42:53.980 [DEBUG] [Thread-25438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:42:53.981 [DEBUG] [Thread-25438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:42:53.981 [DEBUG] [Thread-25438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:42:54.021 [DEBUG] [Thread-25438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:42:54.021 [DEBUG] [Thread-25438] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:42:54.024 [DEBUG] [Thread-25438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:42:54.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:42:54.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:42:54.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:42:54.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:42:54.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:42:54.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:42:54.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:42:54.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:42:54.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:42:54.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.779645 -999.00   +9.50   6.30     80   +6.30 1 1 1 2 1     0    0 3.14 -6.13 ZNESW 6.7 6.3 297.6 7.4 10.2 -24.6 10.2 -23.1 9.9 -21.2 10.2 -23.3
2026-04-15T20:42:54.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:42:54.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:42:54.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.779645
2026-04-15T20:42:54.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:42:54.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:42:54.052 [DEBUG] [Thread-25438] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:42:54.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:42:54.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:42:54.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:42:54.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:42:10', tmtdew=3.93697, humidity=76.3964, cloud=0.0, wind=8.96508, temperature=9.50702, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:42:46', seeing=1.31, atlas_timestamp='2026-04-15T18:42:41.328', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.04974999999999952, -0.08924999999999983, -0.0835000000000008, -0.036000000000001364, 0.0002500000000011937, -0.03700000000000081, -0.013749999999999929, -0.009500000000000952, -0.019000000000000128, -0.042749999999999844, 0.1695000000000011, 0.10699999999999932, 0.0007499999999982521, -0.008000000000000895, -0.023000000000001464, 0.02424999999999855, -0.006000000000000227, 0.050499999999999545, 0.031249999999998224, 0.18299999999999983, 0.0337499999999995, -0.03474999999999895, 0.0337499999999995, 0.0519999999999996, -0.05250000000000021, 0.005250000000000199, -0.02099999999999902, -0.0039999999999995595, -0.02049999999999841, 0.030000000000001137, 0.02850000000000108, -0.01025000000000098], zp_timestamp='2026-04-15T18:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:42:54.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:42:54.310 [DEBUG] [Thread-25441] [transport.py] [_log()] starting thread (client mode): 0xee9922f0
2026-04-15T20:42:54.310 [DEBUG] [Thread-25441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:42:54.324 [DEBUG] [Thread-25441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:42:54.324 [INFO] [Thread-25441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:42:54.331 [DEBUG] [Thread-25441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:42:54.331 [DEBUG] [Thread-25441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:42:54.331 [DEBUG] [Thread-25441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:42:54.331 [DEBUG] [Thread-25441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:42:54.331 [DEBUG] [Thread-25441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:42:54.332 [DEBUG] [Thread-25441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:42:54.332 [DEBUG] [Thread-25441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:42:54.332 [DEBUG] [Thread-25441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:42:54.332 [DEBUG] [Thread-25441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:42:54.332 [DEBUG] [Thread-25441] [transport.py] [_log()] client lang: <none>
2026-04-15T20:42:54.332 [DEBUG] [Thread-25441] [transport.py] [_log()] server lang: <none>
2026-04-15T20:42:54.332 [DEBUG] [Thread-25441] [transport.py] [_log()] kex follows: False
2026-04-15T20:42:54.332 [DEBUG] [Thread-25441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:42:54.332 [DEBUG] [Thread-25441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:42:54.332 [DEBUG] [Thread-25441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:42:54.332 [DEBUG] [Thread-25441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:42:54.333 [DEBUG] [Thread-25441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:42:54.333 [DEBUG] [Thread-25441] [transport.py] [_log()] Compression: none
2026-04-15T20:42:54.333 [DEBUG] [Thread-25441] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:42:54.391 [DEBUG] [Thread-25441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:42:54.391 [DEBUG] [Thread-25441] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:42:54.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:42:54.392 [DEBUG] [Thread-25441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:42:54.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:42:54.448 [DEBUG] [Thread-25441] [transport.py] [_log()] userauth is OK
2026-04-15T20:42:54.448 [DEBUG] [Thread-25441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:42:54.449 [DEBUG] [Thread-25441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:42:54.449 [DEBUG] [Thread-25441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:42:54.449 [DEBUG] [Thread-25441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:42:54.481 [INFO] [Thread-25441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:42:54.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:42:54.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:42:55.313 [DEBUG] [Thread-25441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:42:55.314 [DEBUG] [Thread-25441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:42:55.361 [DEBUG] [Thread-25441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:42:55.361 [DEBUG] [Thread-25441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:42:55.371 [DEBUG] [Thread-25441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:42:55.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:42:55.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')
2026-04-15T20:42:55.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
2026-04-15T20:42:55.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:42:55.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:42:55.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:42:55.406 [DEBUG] [Thread-25441] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:42:58.048 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:03.588 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:03.762 [DEBUG] [Thread-25443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:09.157 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:10.249 [DEBUG] [Thread-25444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:14.534 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:18.806 [DEBUG] [Thread-25445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:20.113 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:25.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:43:25.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:43:25.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
2026-04-15T20:43:25.480 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:26.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 42, 46), 3.67301, 77.7929, 0.0, 8.54136, 9.48088, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:43:26.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:42:46
2026-04-15T20:43:27.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:43:27.757 [DEBUG] [Thread-25446] [transport.py] [_log()] starting thread (client mode): 0xee992530
2026-04-15T20:43:27.757 [DEBUG] [Thread-25446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:43:27.776 [DEBUG] [Thread-25446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:43:27.776 [INFO] [Thread-25446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:43:27.778 [DEBUG] [Thread-25446] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:43:27.778 [DEBUG] [Thread-25446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:43:27.778 [DEBUG] [Thread-25446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:43:27.778 [DEBUG] [Thread-25446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:43:27.778 [DEBUG] [Thread-25446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:43:27.778 [DEBUG] [Thread-25446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:43:27.778 [DEBUG] [Thread-25446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:43:27.778 [DEBUG] [Thread-25446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:43:27.778 [DEBUG] [Thread-25446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:43:27.779 [DEBUG] [Thread-25446] [transport.py] [_log()] client lang: <none>
2026-04-15T20:43:27.779 [DEBUG] [Thread-25446] [transport.py] [_log()] server lang: <none>
2026-04-15T20:43:27.779 [DEBUG] [Thread-25446] [transport.py] [_log()] kex follows: False
2026-04-15T20:43:27.779 [DEBUG] [Thread-25446] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:43:27.779 [DEBUG] [Thread-25446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:43:27.779 [DEBUG] [Thread-25446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:43:27.779 [DEBUG] [Thread-25446] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:43:27.779 [DEBUG] [Thread-25446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:43:27.779 [DEBUG] [Thread-25446] [transport.py] [_log()] Compression: none
2026-04-15T20:43:27.779 [DEBUG] [Thread-25446] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:43:27.792 [DEBUG] [Thread-25446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:43:27.792 [DEBUG] [Thread-25446] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:43:27.793 [DEBUG] [Thread-25446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:43:27.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:43:27.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:43:27.794 [DEBUG] [Thread-25446] [transport.py] [_log()] userauth is OK
2026-04-15T20:43:27.794 [DEBUG] [Thread-25446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:43:27.794 [DEBUG] [Thread-25446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:43:27.794 [DEBUG] [Thread-25446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:43:27.794 [DEBUG] [Thread-25446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:43:27.812 [INFO] [Thread-25446] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:43:27.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:43:28.435 [DEBUG] [Thread-25446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:43:28.435 [DEBUG] [Thread-25446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:43:28.436 [DEBUG] [Thread-25446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:43:28.476 [DEBUG] [Thread-25446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:43:28.476 [DEBUG] [Thread-25446] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:43:28.479 [DEBUG] [Thread-25446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:43:28.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:43:28.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:43:28.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:43:28.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:43:28.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:43:28.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:43:28.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:43:28.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:43:28.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:43:28.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.779993 -999.00   +9.50   6.79     80   +6.30 1 1 1 2 1     0    0 3.17 -6.82 ZNESW 7.2 6.8 296.8 9.5 10.2 -24.6 10.1 -23.1 9.8 -21.2 10.2 -23.3
2026-04-15T20:43:28.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:43:28.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:43:28.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.779993
2026-04-15T20:43:28.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:43:28.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:43:28.506 [DEBUG] [Thread-25446] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:43:28.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:43:28.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:43:28.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:43:28.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:42:46', tmtdew=3.67301, humidity=77.7929, cloud=0.0, wind=8.54136, temperature=9.48088, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:43:21', seeing=1.23, atlas_timestamp='2026-04-15T18:43:11.395', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.04974999999999952, -0.08924999999999983, -0.0835000000000008, -0.036000000000001364, 0.0002500000000011937, -0.03700000000000081, -0.013749999999999929, -0.009500000000000952, -0.019000000000000128, -0.042749999999999844, 0.1695000000000011, 0.10699999999999932, 0.0007499999999982521, -0.008000000000000895, -0.023000000000001464, 0.02424999999999855, -0.006000000000000227, 0.050499999999999545, 0.031249999999998224, 0.18299999999999983, 0.0337499999999995, -0.03474999999999895, 0.0337499999999995, 0.0519999999999996, -0.05250000000000021, 0.005250000000000199, -0.02099999999999902, -0.0039999999999995595, -0.02049999999999841, 0.030000000000001137, 0.02850000000000108, -0.01025000000000098], zp_timestamp='2026-04-15T18:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:43:28.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:43:28.763 [DEBUG] [Thread-25449] [transport.py] [_log()] starting thread (client mode): 0xee9c3850
2026-04-15T20:43:28.763 [DEBUG] [Thread-25449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:43:28.778 [DEBUG] [Thread-25449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:43:28.778 [INFO] [Thread-25449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:43:28.785 [DEBUG] [Thread-25449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:43:28.785 [DEBUG] [Thread-25449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:43:28.786 [DEBUG] [Thread-25449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:43:28.786 [DEBUG] [Thread-25449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:43:28.786 [DEBUG] [Thread-25449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:43:28.786 [DEBUG] [Thread-25449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:43:28.786 [DEBUG] [Thread-25449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:43:28.787 [DEBUG] [Thread-25449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:43:28.787 [DEBUG] [Thread-25449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:43:28.787 [DEBUG] [Thread-25449] [transport.py] [_log()] client lang: <none>
2026-04-15T20:43:28.787 [DEBUG] [Thread-25449] [transport.py] [_log()] server lang: <none>
2026-04-15T20:43:28.787 [DEBUG] [Thread-25449] [transport.py] [_log()] kex follows: False
2026-04-15T20:43:28.788 [DEBUG] [Thread-25449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:43:28.788 [DEBUG] [Thread-25449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:43:28.788 [DEBUG] [Thread-25449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:43:28.788 [DEBUG] [Thread-25449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:43:28.788 [DEBUG] [Thread-25449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:43:28.789 [DEBUG] [Thread-25449] [transport.py] [_log()] Compression: none
2026-04-15T20:43:28.789 [DEBUG] [Thread-25449] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:43:28.842 [DEBUG] [Thread-25449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:43:28.842 [DEBUG] [Thread-25449] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:43:28.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:43:28.843 [DEBUG] [Thread-25449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:43:28.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:43:28.903 [DEBUG] [Thread-25449] [transport.py] [_log()] userauth is OK
2026-04-15T20:43:28.903 [DEBUG] [Thread-25449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:43:28.903 [DEBUG] [Thread-25449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:43:28.903 [DEBUG] [Thread-25449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:43:28.903 [DEBUG] [Thread-25449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:43:28.921 [INFO] [Thread-25449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:43:28.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:43:28.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:43:29.731 [DEBUG] [Thread-25449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:43:29.731 [DEBUG] [Thread-25449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:43:29.778 [DEBUG] [Thread-25449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:43:29.779 [DEBUG] [Thread-25449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:43:29.787 [DEBUG] [Thread-25449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:43:29.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:43:29.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')
2026-04-15T20:43:29.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
2026-04-15T20:43:29.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:43:29.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:43:29.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:43:29.819 [DEBUG] [Thread-25449] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:43:30.983 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:33.837 [DEBUG] [Thread-25451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:36.347 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:39.585 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:39.587 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:41.906 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:47.470 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:48.882 [DEBUG] [Thread-25452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:52.909 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:58.314 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:43:59.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:43:59.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:43:59.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
2026-04-15T20:44:01.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 43, 21), 3.92727, 76.4462, 0.0, 9.018, 9.49044, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:44:01.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:43:21
2026-04-15T20:44:01.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:44:02.140 [DEBUG] [Thread-25453] [transport.py] [_log()] starting thread (client mode): 0xee9c0f40
2026-04-15T20:44:02.140 [DEBUG] [Thread-25453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:44:02.161 [DEBUG] [Thread-25453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:44:02.161 [INFO] [Thread-25453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:44:02.164 [DEBUG] [Thread-25453] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:44:02.164 [DEBUG] [Thread-25453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:44:02.164 [DEBUG] [Thread-25453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:44:02.164 [DEBUG] [Thread-25453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:44:02.165 [DEBUG] [Thread-25453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:44:02.165 [DEBUG] [Thread-25453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:44:02.165 [DEBUG] [Thread-25453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:44:02.165 [DEBUG] [Thread-25453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:44:02.165 [DEBUG] [Thread-25453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:44:02.165 [DEBUG] [Thread-25453] [transport.py] [_log()] client lang: <none>
2026-04-15T20:44:02.165 [DEBUG] [Thread-25453] [transport.py] [_log()] server lang: <none>
2026-04-15T20:44:02.165 [DEBUG] [Thread-25453] [transport.py] [_log()] kex follows: False
2026-04-15T20:44:02.165 [DEBUG] [Thread-25453] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:44:02.165 [DEBUG] [Thread-25453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:44:02.165 [DEBUG] [Thread-25453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:44:02.165 [DEBUG] [Thread-25453] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:44:02.166 [DEBUG] [Thread-25453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:44:02.166 [DEBUG] [Thread-25453] [transport.py] [_log()] Compression: none
2026-04-15T20:44:02.166 [DEBUG] [Thread-25453] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:44:02.181 [DEBUG] [Thread-25453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:44:02.181 [DEBUG] [Thread-25453] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:44:02.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:44:02.182 [DEBUG] [Thread-25453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:44:02.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:44:02.183 [DEBUG] [Thread-25453] [transport.py] [_log()] userauth is OK
2026-04-15T20:44:02.183 [DEBUG] [Thread-25453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:44:02.183 [DEBUG] [Thread-25453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:44:02.183 [DEBUG] [Thread-25453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:44:02.183 [DEBUG] [Thread-25453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:44:02.203 [INFO] [Thread-25453] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:44:02.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:44:02.760 [DEBUG] [Thread-25453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:44:02.760 [DEBUG] [Thread-25453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:44:02.761 [DEBUG] [Thread-25453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:44:02.801 [DEBUG] [Thread-25453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:44:02.801 [DEBUG] [Thread-25453] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:44:02.803 [DEBUG] [Thread-25453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:44:02.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:44:02.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:44:02.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:44:02.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:44:02.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:44:02.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:44:02.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:44:02.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:44:02.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:44:02.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.780340 -999.00   +9.60   5.98     80   +6.30 1 1 1 2 1     0    0 3.14 -7.09 ZNESW 6.7 6.0 297.2 8.0 10.3 -24.4 10.2 -23.1 9.9 -21.2 10.2 -23.3
2026-04-15T20:44:02.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:44:02.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:44:02.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.780340
2026-04-15T20:44:02.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:44:02.825 [DEBUG] [Thread-25453] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:44:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:44:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:44:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:44:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:44:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:43:21', tmtdew=3.92727, humidity=76.4462, cloud=0.0, wind=9.018, temperature=9.49044, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:43:57', seeing=1.23, atlas_timestamp='2026-04-15T18:43:41.376', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.04974999999999952, -0.08924999999999983, -0.0835000000000008, -0.036000000000001364, 0.0002500000000011937, -0.03700000000000081, -0.013749999999999929, -0.009500000000000952, -0.019000000000000128, -0.042749999999999844, 0.1695000000000011, 0.10699999999999932, 0.0007499999999982521, -0.008000000000000895, -0.023000000000001464, 0.02424999999999855, -0.006000000000000227, 0.050499999999999545, 0.031249999999998224, 0.18299999999999983, 0.0337499999999995, -0.03474999999999895, 0.0337499999999995, 0.0519999999999996, -0.05250000000000021, 0.005250000000000199, -0.02099999999999902, -0.0039999999999995595, -0.02049999999999841, 0.030000000000001137, 0.02850000000000108, -0.01025000000000098], zp_timestamp='2026-04-15T18:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:44:03.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:44:03.848 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:03.914 [DEBUG] [Thread-25456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:09.438 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:10.422 [DEBUG] [Thread-25457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:14.816 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:18.958 [DEBUG] [Thread-25458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:20.218 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:25.585 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:30.952 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:33.990 [DEBUG] [Thread-25459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:36.522 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:39.789 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:39.790 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:41.922 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:47.335 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:49.021 [DEBUG] [Thread-25460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:52.701 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:44:58.079 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:03.455 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:04.052 [DEBUG] [Thread-25461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:08.861 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:10.588 [DEBUG] [Thread-25462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:14.264 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:19.082 [DEBUG] [Thread-25463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:19.654 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:25.209 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:30.601 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:34.113 [DEBUG] [Thread-25464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:36.208 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:39.998 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:39.999 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:41.572 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:46.964 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:49.145 [DEBUG] [Thread-25465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:52.486 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:45:57.886 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:03.290 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:04.174 [DEBUG] [Thread-25466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:08.667 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:10.747 [DEBUG] [Thread-25467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:14.119 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:18.250 [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
2026-04-15T20:46:19.205 [DEBUG] [Thread-25468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:19.500 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:24.868 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:30.232 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:34.237 [DEBUG] [Thread-25469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:35.611 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:40.201 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:40.202 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:41.040 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:46.431 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:48.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:46:48.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:46:48.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
2026-04-15T20:46:49.270 [DEBUG] [Thread-25470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:49.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 46, 19), 3.90273, 76.8143, 0.0, 7.32384, 9.47424, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:46:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:46:19
2026-04-15T20:46:49.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:46:50.364 [DEBUG] [Thread-25471] [transport.py] [_log()] starting thread (client mode): 0xee9c1f60
2026-04-15T20:46:50.365 [DEBUG] [Thread-25471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:46:50.384 [DEBUG] [Thread-25471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:46:50.384 [INFO] [Thread-25471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:46:50.387 [DEBUG] [Thread-25471] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:46:50.387 [DEBUG] [Thread-25471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:46:50.387 [DEBUG] [Thread-25471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:46:50.387 [DEBUG] [Thread-25471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:46:50.387 [DEBUG] [Thread-25471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:46:50.387 [DEBUG] [Thread-25471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:46:50.387 [DEBUG] [Thread-25471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:46:50.387 [DEBUG] [Thread-25471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:46:50.387 [DEBUG] [Thread-25471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:46:50.387 [DEBUG] [Thread-25471] [transport.py] [_log()] client lang: <none>
2026-04-15T20:46:50.388 [DEBUG] [Thread-25471] [transport.py] [_log()] server lang: <none>
2026-04-15T20:46:50.388 [DEBUG] [Thread-25471] [transport.py] [_log()] kex follows: False
2026-04-15T20:46:50.388 [DEBUG] [Thread-25471] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:46:50.388 [DEBUG] [Thread-25471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:46:50.388 [DEBUG] [Thread-25471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:46:50.388 [DEBUG] [Thread-25471] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:46:50.388 [DEBUG] [Thread-25471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:46:50.388 [DEBUG] [Thread-25471] [transport.py] [_log()] Compression: none
2026-04-15T20:46:50.388 [DEBUG] [Thread-25471] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:46:50.405 [DEBUG] [Thread-25471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:46:50.405 [DEBUG] [Thread-25471] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:46:50.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:46:50.406 [DEBUG] [Thread-25471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:46:50.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:46:50.407 [DEBUG] [Thread-25471] [transport.py] [_log()] userauth is OK
2026-04-15T20:46:50.407 [DEBUG] [Thread-25471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:46:50.407 [DEBUG] [Thread-25471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:46:50.407 [DEBUG] [Thread-25471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:46:50.407 [DEBUG] [Thread-25471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:46:50.431 [INFO] [Thread-25471] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:46:50.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:46:51.198 [DEBUG] [Thread-25471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:46:51.199 [DEBUG] [Thread-25471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:46:51.199 [DEBUG] [Thread-25471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:46:51.239 [DEBUG] [Thread-25471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:46:51.239 [DEBUG] [Thread-25471] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:46:51.242 [DEBUG] [Thread-25471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:46:51.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:46:51.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:46:51.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:46:51.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:46:51.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:46:51.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:46:51.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:46:51.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:46:51.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:46:51.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.782076 -999.00   +9.50   6.98     80   +6.30 1 1 1 2 1     0    0 3.10 -7.47 ZNESW 6.2 7.0 304.0 8.4 10.2 -24.6 10.1 -23.4 9.9 -21.2 10.1 -23.4
2026-04-15T20:46:51.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:46:51.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:46:51.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.782076
2026-04-15T20:46:51.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:46:51.268 [DEBUG] [Thread-25471] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:46:51.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:46:51.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:46:51.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:46:51.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:46:51.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:46:19', tmtdew=3.90273, humidity=76.8143, cloud=0.0, wind=7.32384, temperature=9.47424, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:46:19', seeing=1.31, atlas_timestamp='2026-04-15T18:46:11.366', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.04974999999999952, -0.08924999999999983, -0.0835000000000008, -0.036000000000001364, 0.0002500000000011937, -0.03700000000000081, -0.013749999999999929, -0.009500000000000952, -0.019000000000000128, -0.042749999999999844, 0.1695000000000011, 0.10699999999999932, 0.0007499999999982521, -0.008000000000000895, -0.023000000000001464, 0.02424999999999855, -0.006000000000000227, 0.050499999999999545, 0.031249999999998224, 0.18299999999999983, 0.0337499999999995, -0.03474999999999895, 0.0337499999999995, 0.0519999999999996, -0.05250000000000021, 0.005250000000000199, -0.02099999999999902, -0.0039999999999995595, -0.02049999999999841, 0.030000000000001137, 0.02850000000000108, -0.01025000000000098], zp_timestamp='2026-04-15T18:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:46:51.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:46:51.531 [DEBUG] [Thread-25474] [transport.py] [_log()] starting thread (client mode): 0xee992fb0
2026-04-15T20:46:51.532 [DEBUG] [Thread-25474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:46:51.551 [DEBUG] [Thread-25474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:46:51.551 [INFO] [Thread-25474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:46:51.560 [DEBUG] [Thread-25474] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:46:51.560 [DEBUG] [Thread-25474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:46:51.560 [DEBUG] [Thread-25474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:46:51.561 [DEBUG] [Thread-25474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:46:51.561 [DEBUG] [Thread-25474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:46:51.561 [DEBUG] [Thread-25474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:46:51.561 [DEBUG] [Thread-25474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:46:51.561 [DEBUG] [Thread-25474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:46:51.561 [DEBUG] [Thread-25474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:46:51.561 [DEBUG] [Thread-25474] [transport.py] [_log()] client lang: <none>
2026-04-15T20:46:51.561 [DEBUG] [Thread-25474] [transport.py] [_log()] server lang: <none>
2026-04-15T20:46:51.561 [DEBUG] [Thread-25474] [transport.py] [_log()] kex follows: False
2026-04-15T20:46:51.561 [DEBUG] [Thread-25474] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:46:51.561 [DEBUG] [Thread-25474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:46:51.562 [DEBUG] [Thread-25474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:46:51.562 [DEBUG] [Thread-25474] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:46:51.562 [DEBUG] [Thread-25474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:46:51.562 [DEBUG] [Thread-25474] [transport.py] [_log()] Compression: none
2026-04-15T20:46:51.562 [DEBUG] [Thread-25474] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:46:51.617 [DEBUG] [Thread-25474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:46:51.617 [DEBUG] [Thread-25474] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:46:51.618 [DEBUG] [Thread-25474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:46:51.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:46:51.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:46:51.674 [DEBUG] [Thread-25474] [transport.py] [_log()] userauth is OK
2026-04-15T20:46:51.674 [DEBUG] [Thread-25474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:46:51.674 [DEBUG] [Thread-25474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:46:51.675 [DEBUG] [Thread-25474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:46:51.675 [DEBUG] [Thread-25474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:46:51.700 [INFO] [Thread-25474] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:46:51.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:46:51.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:46:51.821 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:46:52.514 [DEBUG] [Thread-25474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:46:52.514 [DEBUG] [Thread-25474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:46:52.563 [DEBUG] [Thread-25474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:46:52.563 [DEBUG] [Thread-25474] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:46:52.572 [DEBUG] [Thread-25474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:46:52.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:46:52.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')
2026-04-15T20:46: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') -> 00000000
2026-04-15T20:46:52.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:46:52.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:46:52.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:46:52.607 [DEBUG] [Thread-25474] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:46:57.303 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:02.707 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:04.303 [DEBUG] [Thread-25476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:08.217 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:10.910 [DEBUG] [Thread-25477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:13.615 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:19.107 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:19.347 [DEBUG] [Thread-25478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:47:22.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:47:22.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
2026-04-15T20:47:23.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 46, 55), 3.91248, 76.7645, 0.0, 7.60608, 9.49078, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:47:23.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:46:55
2026-04-15T20:47:24.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:47:24.471 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:24.791 [DEBUG] [Thread-25479] [transport.py] [_log()] starting thread (client mode): 0xee992020
2026-04-15T20:47:24.791 [DEBUG] [Thread-25479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:47:24.811 [DEBUG] [Thread-25479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:47:24.812 [INFO] [Thread-25479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:47:24.815 [DEBUG] [Thread-25479] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:47:24.815 [DEBUG] [Thread-25479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:47:24.815 [DEBUG] [Thread-25479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:47:24.815 [DEBUG] [Thread-25479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:47:24.816 [DEBUG] [Thread-25479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:47:24.816 [DEBUG] [Thread-25479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:47:24.816 [DEBUG] [Thread-25479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:47:24.816 [DEBUG] [Thread-25479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:47:24.816 [DEBUG] [Thread-25479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:47:24.816 [DEBUG] [Thread-25479] [transport.py] [_log()] client lang: <none>
2026-04-15T20:47:24.816 [DEBUG] [Thread-25479] [transport.py] [_log()] server lang: <none>
2026-04-15T20:47:24.816 [DEBUG] [Thread-25479] [transport.py] [_log()] kex follows: False
2026-04-15T20:47:24.816 [DEBUG] [Thread-25479] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:47:24.816 [DEBUG] [Thread-25479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:47:24.816 [DEBUG] [Thread-25479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:47:24.816 [DEBUG] [Thread-25479] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:47:24.816 [DEBUG] [Thread-25479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:47:24.817 [DEBUG] [Thread-25479] [transport.py] [_log()] Compression: none
2026-04-15T20:47:24.817 [DEBUG] [Thread-25479] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:47:24.833 [DEBUG] [Thread-25479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:47:24.833 [DEBUG] [Thread-25479] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:47:24.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:47:24.834 [DEBUG] [Thread-25479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:47:24.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:47:24.835 [DEBUG] [Thread-25479] [transport.py] [_log()] userauth is OK
2026-04-15T20:47:24.835 [DEBUG] [Thread-25479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:47:24.835 [DEBUG] [Thread-25479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:47:24.835 [DEBUG] [Thread-25479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:47:24.835 [DEBUG] [Thread-25479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:47:24.853 [INFO] [Thread-25479] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:47:24.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:47:25.678 [DEBUG] [Thread-25479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:47:25.678 [DEBUG] [Thread-25479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:47:25.679 [DEBUG] [Thread-25479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:47:25.719 [DEBUG] [Thread-25479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:47:25.719 [DEBUG] [Thread-25479] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:47:25.722 [DEBUG] [Thread-25479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:47:25.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:47:25.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:47:25.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:47:25.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:47:25.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:47:25.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:47:25.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:47:25.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:47:25.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:47:25.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.782423 -999.00   +9.50   6.75     80   +6.30 1 1 1 2 1     0    0 3.06 -7.65 ZNESW 6.7 6.8 306.8 7.1 10.2 -24.6 10.1 -23.3 9.8 -21.3 10.2 -23.4
2026-04-15T20:47:25.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:47:25.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:47:25.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.782423
2026-04-15T20:47:25.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:47:25.748 [DEBUG] [Thread-25479] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:47:25.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:47:25.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:47:25.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:47:25.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:47:25.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:46:55', tmtdew=3.91248, humidity=76.7645, cloud=0.0, wind=7.60608, temperature=9.49078, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:46:56', seeing=1.78, atlas_timestamp='2026-04-15T18:46:41.347', atlas_cloud=1, atlas_rain=1, zp_data=[-0.050250000000001904, -0.010749999999999815, -0.04574999999999996, 0.16199999999999903, 0.041499999999999204, 0.0002500000000011937, -0.022999999999999687, -0.012749999999998707, -0.0015000000000000568, -0.006999999999999673, 0.048749999999998295, 0.011000000000001009, 0.06799999999999962, 0.0012499999999988631, 0.022999999999999687, 0.009999999999999787, 0.024750000000000938, 0.016500000000000625, 0.13199999999999967, -0.019750000000001933, 0.05649999999999977, 0.0467499999999994, -0.02874999999999872, 0.01875000000000071, 0.04099999999999859, 0.02099999999999902, 0.01774999999999949, -0.01249999999999929, -0.02200000000000024, -0.015999999999998238, 0.045000000000001705, 0.05400000000000027, 0.006750000000000256], zp_timestamp='2026-04-15T18:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:47:26.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:47:26.018 [DEBUG] [Thread-25482] [transport.py] [_log()] starting thread (client mode): 0xee993640
2026-04-15T20:47:26.018 [DEBUG] [Thread-25482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:47:26.033 [DEBUG] [Thread-25482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:47:26.033 [INFO] [Thread-25482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:47:26.040 [DEBUG] [Thread-25482] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:47:26.041 [DEBUG] [Thread-25482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:47:26.041 [DEBUG] [Thread-25482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:47:26.041 [DEBUG] [Thread-25482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:47:26.041 [DEBUG] [Thread-25482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:47:26.041 [DEBUG] [Thread-25482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:47:26.041 [DEBUG] [Thread-25482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:47:26.041 [DEBUG] [Thread-25482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:47:26.041 [DEBUG] [Thread-25482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:47:26.041 [DEBUG] [Thread-25482] [transport.py] [_log()] client lang: <none>
2026-04-15T20:47:26.041 [DEBUG] [Thread-25482] [transport.py] [_log()] server lang: <none>
2026-04-15T20:47:26.041 [DEBUG] [Thread-25482] [transport.py] [_log()] kex follows: False
2026-04-15T20:47:26.041 [DEBUG] [Thread-25482] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:47:26.042 [DEBUG] [Thread-25482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:47:26.042 [DEBUG] [Thread-25482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:47:26.042 [DEBUG] [Thread-25482] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:47:26.042 [DEBUG] [Thread-25482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:47:26.042 [DEBUG] [Thread-25482] [transport.py] [_log()] Compression: none
2026-04-15T20:47:26.042 [DEBUG] [Thread-25482] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:47:26.098 [DEBUG] [Thread-25482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:47:26.098 [DEBUG] [Thread-25482] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:47:26.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:47:26.099 [DEBUG] [Thread-25482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:47:26.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:47:26.154 [DEBUG] [Thread-25482] [transport.py] [_log()] userauth is OK
2026-04-15T20:47:26.154 [DEBUG] [Thread-25482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:47:26.154 [DEBUG] [Thread-25482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:47:26.154 [DEBUG] [Thread-25482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:47:26.155 [DEBUG] [Thread-25482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:47:26.179 [INFO] [Thread-25482] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:47:26.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:47:26.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:47:27.011 [DEBUG] [Thread-25482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:47:27.011 [DEBUG] [Thread-25482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:47:27.059 [DEBUG] [Thread-25482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:47:27.059 [DEBUG] [Thread-25482] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:47:27.068 [DEBUG] [Thread-25482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:47:27.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:47:27.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')
2026-04-15T20:47:27.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
2026-04-15T20:47:27.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:47:27.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:47:27.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:47:27.102 [DEBUG] [Thread-25482] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:47:29.941 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:34.377 [DEBUG] [Thread-25484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:35.354 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:40.409 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:40.410 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:40.759 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:46.151 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:49.424 [DEBUG] [Thread-25485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:51.518 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:57.023 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:47:57.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:47:57.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:47:57.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
2026-04-15T20:47:58.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 47, 31), 3.94036, 76.6152, 0.0, 7.32384, 9.49078, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:47:58.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:47:31
2026-04-15T20:47:58.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:47:59.267 [DEBUG] [Thread-25486] [transport.py] [_log()] starting thread (client mode): 0xee9c13c0
2026-04-15T20:47:59.267 [DEBUG] [Thread-25486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:47:59.286 [DEBUG] [Thread-25486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:47:59.286 [INFO] [Thread-25486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:47:59.290 [DEBUG] [Thread-25486] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:47:59.290 [DEBUG] [Thread-25486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:47:59.290 [DEBUG] [Thread-25486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:47:59.290 [DEBUG] [Thread-25486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:47:59.290 [DEBUG] [Thread-25486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:47:59.290 [DEBUG] [Thread-25486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:47:59.290 [DEBUG] [Thread-25486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:47:59.290 [DEBUG] [Thread-25486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:47:59.290 [DEBUG] [Thread-25486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:47:59.290 [DEBUG] [Thread-25486] [transport.py] [_log()] client lang: <none>
2026-04-15T20:47:59.291 [DEBUG] [Thread-25486] [transport.py] [_log()] server lang: <none>
2026-04-15T20:47:59.291 [DEBUG] [Thread-25486] [transport.py] [_log()] kex follows: False
2026-04-15T20:47:59.291 [DEBUG] [Thread-25486] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:47:59.291 [DEBUG] [Thread-25486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:47:59.291 [DEBUG] [Thread-25486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:47:59.291 [DEBUG] [Thread-25486] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:47:59.291 [DEBUG] [Thread-25486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:47:59.291 [DEBUG] [Thread-25486] [transport.py] [_log()] Compression: none
2026-04-15T20:47:59.291 [DEBUG] [Thread-25486] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:47:59.300 [DEBUG] [Thread-25486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:47:59.301 [DEBUG] [Thread-25486] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:47:59.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:47:59.301 [DEBUG] [Thread-25486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:47:59.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:47:59.302 [DEBUG] [Thread-25486] [transport.py] [_log()] userauth is OK
2026-04-15T20:47:59.302 [DEBUG] [Thread-25486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:47:59.302 [DEBUG] [Thread-25486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:47:59.302 [DEBUG] [Thread-25486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:47:59.302 [DEBUG] [Thread-25486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:47:59.321 [INFO] [Thread-25486] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:47:59.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:48:00.110 [DEBUG] [Thread-25486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:48:00.111 [DEBUG] [Thread-25486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:48:00.111 [DEBUG] [Thread-25486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:48:00.152 [DEBUG] [Thread-25486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:48:00.152 [DEBUG] [Thread-25486] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:48:00.155 [DEBUG] [Thread-25486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:48:00.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:48:00.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:48:00.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:48:00.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:48:00.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:48:00.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:48:00.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:48:00.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:48:00.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:48:00.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.782770 -999.00   +9.60   4.82     80   +6.30 1 1 1 2 1     0    0 3.09 -8.17 ZNESW 4.5 4.8 300.6 7.2 10.2 -24.5 10.1 -23.2 9.8 -21.3 10.1 -23.4
2026-04-15T20:48:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:48:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:48:00.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.782770
2026-04-15T20:48:00.181 [DEBUG] [Thread-25486] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:48:00.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:48:00.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:48:00.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:48:00.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:48:00.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:48:00.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:47:31', tmtdew=3.94036, humidity=76.6152, cloud=0.0, wind=7.32384, temperature=9.49078, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:47:31', seeing=2.19, atlas_timestamp='2026-04-15T18:47:11.328', atlas_cloud=1, atlas_rain=1, zp_data=[-0.050250000000001904, -0.010749999999999815, -0.04574999999999996, 0.16199999999999903, 0.041499999999999204, 0.0002500000000011937, -0.022999999999999687, -0.012749999999998707, -0.0015000000000000568, -0.006999999999999673, 0.048749999999998295, 0.011000000000001009, 0.06799999999999962, 0.0012499999999988631, 0.022999999999999687, 0.009999999999999787, 0.024750000000000938, 0.016500000000000625, 0.13199999999999967, -0.019750000000001933, 0.05649999999999977, 0.0467499999999994, -0.02874999999999872, 0.01875000000000071, 0.04099999999999859, 0.02099999999999902, 0.01774999999999949, -0.01249999999999929, -0.02200000000000024, -0.015999999999998238, 0.045000000000001705, 0.05400000000000027, 0.006750000000000256], zp_timestamp='2026-04-15T18:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:48:00.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:48:00.444 [DEBUG] [Thread-25489] [transport.py] [_log()] starting thread (client mode): 0xee9c1f30
2026-04-15T20:48:00.444 [DEBUG] [Thread-25489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:48:00.458 [DEBUG] [Thread-25489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:48:00.458 [INFO] [Thread-25489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:48:00.466 [DEBUG] [Thread-25489] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:48:00.466 [DEBUG] [Thread-25489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:48:00.466 [DEBUG] [Thread-25489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:48:00.466 [DEBUG] [Thread-25489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:48:00.466 [DEBUG] [Thread-25489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:48:00.466 [DEBUG] [Thread-25489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:48:00.466 [DEBUG] [Thread-25489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:48:00.466 [DEBUG] [Thread-25489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:48:00.466 [DEBUG] [Thread-25489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:48:00.466 [DEBUG] [Thread-25489] [transport.py] [_log()] client lang: <none>
2026-04-15T20:48:00.466 [DEBUG] [Thread-25489] [transport.py] [_log()] server lang: <none>
2026-04-15T20:48:00.467 [DEBUG] [Thread-25489] [transport.py] [_log()] kex follows: False
2026-04-15T20:48:00.467 [DEBUG] [Thread-25489] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:48:00.467 [DEBUG] [Thread-25489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:48:00.467 [DEBUG] [Thread-25489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:48:00.467 [DEBUG] [Thread-25489] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:48:00.467 [DEBUG] [Thread-25489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:48:00.467 [DEBUG] [Thread-25489] [transport.py] [_log()] Compression: none
2026-04-15T20:48:00.467 [DEBUG] [Thread-25489] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:48:00.524 [DEBUG] [Thread-25489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:48:00.525 [DEBUG] [Thread-25489] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:48:00.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:48:00.526 [DEBUG] [Thread-25489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:48:00.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:48:00.582 [DEBUG] [Thread-25489] [transport.py] [_log()] userauth is OK
2026-04-15T20:48:00.582 [DEBUG] [Thread-25489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:48:00.582 [DEBUG] [Thread-25489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:48:00.582 [DEBUG] [Thread-25489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:48:00.583 [DEBUG] [Thread-25489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:48:00.611 [INFO] [Thread-25489] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:48:00.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:48:00.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:48:01.417 [DEBUG] [Thread-25489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:48:01.417 [DEBUG] [Thread-25489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:48:01.465 [DEBUG] [Thread-25489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:48:01.465 [DEBUG] [Thread-25489] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:48:01.475 [DEBUG] [Thread-25489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:48:01.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:48:01.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')
2026-04-15T20:48:01.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
2026-04-15T20:48:01.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:48:01.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:48:01.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:48:01.510 [DEBUG] [Thread-25489] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:48:02.413 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:48:04.454 [DEBUG] [Thread-25491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:48:07.894 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:48:11.070 [DEBUG] [Thread-25492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:48:13.273 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:48:18.780 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:48:19.497 [DEBUG] [Thread-25493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:48:24.171 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:48:29.586 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:48:31.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:48:31.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:48:31.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
2026-04-15T20:48:32.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 48, 6), 3.94293, 76.5989, 0.0, 7.51788, 9.47439, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:48:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:48:06
2026-04-15T20:48:33.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:48:33.608 [DEBUG] [Thread-25494] [transport.py] [_log()] starting thread (client mode): 0xee991d20
2026-04-15T20:48:33.608 [DEBUG] [Thread-25494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:48:33.627 [DEBUG] [Thread-25494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:48:33.627 [INFO] [Thread-25494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:48:33.630 [DEBUG] [Thread-25494] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:48:33.630 [DEBUG] [Thread-25494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:48:33.630 [DEBUG] [Thread-25494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:48:33.630 [DEBUG] [Thread-25494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:48:33.630 [DEBUG] [Thread-25494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:48:33.631 [DEBUG] [Thread-25494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:48:33.631 [DEBUG] [Thread-25494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:48:33.631 [DEBUG] [Thread-25494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:48:33.631 [DEBUG] [Thread-25494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:48:33.631 [DEBUG] [Thread-25494] [transport.py] [_log()] client lang: <none>
2026-04-15T20:48:33.631 [DEBUG] [Thread-25494] [transport.py] [_log()] server lang: <none>
2026-04-15T20:48:33.631 [DEBUG] [Thread-25494] [transport.py] [_log()] kex follows: False
2026-04-15T20:48:33.631 [DEBUG] [Thread-25494] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:48:33.631 [DEBUG] [Thread-25494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:48:33.631 [DEBUG] [Thread-25494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:48:33.631 [DEBUG] [Thread-25494] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:48:33.631 [DEBUG] [Thread-25494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:48:33.631 [DEBUG] [Thread-25494] [transport.py] [_log()] Compression: none
2026-04-15T20:48:33.631 [DEBUG] [Thread-25494] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:48:33.639 [DEBUG] [Thread-25494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:48:33.639 [DEBUG] [Thread-25494] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:48:33.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:48:33.640 [DEBUG] [Thread-25494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:48:33.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:48:33.641 [DEBUG] [Thread-25494] [transport.py] [_log()] userauth is OK
2026-04-15T20:48:33.641 [DEBUG] [Thread-25494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:48:33.641 [DEBUG] [Thread-25494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:48:33.641 [DEBUG] [Thread-25494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:48:33.641 [DEBUG] [Thread-25494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:48:33.675 [INFO] [Thread-25494] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:48:33.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:48:34.497 [DEBUG] [Thread-25494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:48:34.497 [DEBUG] [Thread-25494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:48:34.498 [DEBUG] [Thread-25494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:48:34.527 [DEBUG] [Thread-25496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:48:34.538 [DEBUG] [Thread-25494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:48:34.538 [DEBUG] [Thread-25494] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:48:34.540 [DEBUG] [Thread-25494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:48:34.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:48:34.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:48:34.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:48:34.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:48:34.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:48:34.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:48:34.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:48:34.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:48:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:48:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.783118 -999.00   +9.60   4.67     80   +6.30 1 1 1 2 1     0    0 3.11 -8.37 ZNESW 4.3 4.7 319.2 5.1 10.2 -24.6 10.1 -23.3 9.8 -21.2 10.1 -23.3
2026-04-15T20:48:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:48:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:48:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.783118
2026-04-15T20:48:34.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:48:34.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:48:34.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:48:34.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:48:34.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:48:34.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:48:06', tmtdew=3.94293, humidity=76.5989, cloud=0.0, wind=7.51788, temperature=9.47439, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:48:07', seeing=1.87, atlas_timestamp='2026-04-15T18:47:41.395', atlas_cloud=1, atlas_rain=1, zp_data=[-0.050250000000001904, -0.010749999999999815, -0.04574999999999996, 0.16199999999999903, 0.041499999999999204, 0.0002500000000011937, -0.022999999999999687, -0.012749999999998707, -0.0015000000000000568, -0.006999999999999673, 0.048749999999998295, 0.011000000000001009, 0.06799999999999962, 0.0012499999999988631, 0.022999999999999687, 0.009999999999999787, 0.024750000000000938, 0.016500000000000625, 0.13199999999999967, -0.019750000000001933, 0.05649999999999977, 0.0467499999999994, -0.02874999999999872, 0.01875000000000071, 0.04099999999999859, 0.02099999999999902, 0.01774999999999949, -0.01249999999999929, -0.02200000000000024, -0.015999999999998238, 0.045000000000001705, 0.05400000000000027, 0.006750000000000256], zp_timestamp='2026-04-15T18:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:48:34.559 [DEBUG] [Thread-25494] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:48:34.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:48:34.773 [DEBUG] [Thread-25498] [transport.py] [_log()] starting thread (client mode): 0xee992c20
2026-04-15T20:48:34.773 [DEBUG] [Thread-25498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:48:34.792 [DEBUG] [Thread-25498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:48:34.792 [INFO] [Thread-25498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:48:34.799 [DEBUG] [Thread-25498] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:48:34.799 [DEBUG] [Thread-25498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:48:34.799 [DEBUG] [Thread-25498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:48:34.799 [DEBUG] [Thread-25498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:48:34.799 [DEBUG] [Thread-25498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:48:34.799 [DEBUG] [Thread-25498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:48:34.799 [DEBUG] [Thread-25498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:48:34.799 [DEBUG] [Thread-25498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:48:34.799 [DEBUG] [Thread-25498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:48:34.799 [DEBUG] [Thread-25498] [transport.py] [_log()] client lang: <none>
2026-04-15T20:48:34.800 [DEBUG] [Thread-25498] [transport.py] [_log()] server lang: <none>
2026-04-15T20:48:34.800 [DEBUG] [Thread-25498] [transport.py] [_log()] kex follows: False
2026-04-15T20:48:34.800 [DEBUG] [Thread-25498] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:48:34.800 [DEBUG] [Thread-25498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:48:34.800 [DEBUG] [Thread-25498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:48:34.800 [DEBUG] [Thread-25498] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:48:34.800 [DEBUG] [Thread-25498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:48:34.800 [DEBUG] [Thread-25498] [transport.py] [_log()] Compression: none
2026-04-15T20:48:34.800 [DEBUG] [Thread-25498] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:48:34.860 [DEBUG] [Thread-25498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:48:34.860 [DEBUG] [Thread-25498] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:48:34.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:48:34.861 [DEBUG] [Thread-25498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:48:34.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:48:34.917 [DEBUG] [Thread-25498] [transport.py] [_log()] userauth is OK
2026-04-15T20:48:34.917 [DEBUG] [Thread-25498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:48:34.917 [DEBUG] [Thread-25498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:48:34.917 [DEBUG] [Thread-25498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:48:34.917 [DEBUG] [Thread-25498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:48:34.934 [INFO] [Thread-25498] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:48:34.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:48:34.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:48:35.000 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:48:35.770 [DEBUG] [Thread-25498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:48:35.771 [DEBUG] [Thread-25498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:48:35.818 [DEBUG] [Thread-25498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:48:35.818 [DEBUG] [Thread-25498] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:48:35.827 [DEBUG] [Thread-25498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:48:35.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:48:35.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')
2026-04-15T20:48:35.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') -> 00000000
2026-04-15T20:48:35.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:48:35.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:48:35.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:48:35.862 [DEBUG] [Thread-25498] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:48:40.608 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:48:40.610 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:48:49.555 [DEBUG] [Thread-25500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:49:04.592 [DEBUG] [Thread-25501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:49:05.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:49:05.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:49:05.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
2026-04-15T20:49:07.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 48, 42), 3.79924, 77.1314, 0.0, 6.8832, 9.58197, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:49:07.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:48:42
2026-04-15T20:49:07.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:49:08.104 [DEBUG] [Thread-25502] [transport.py] [_log()] starting thread (client mode): 0xee993a30
2026-04-15T20:49:08.104 [DEBUG] [Thread-25502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:49:08.124 [DEBUG] [Thread-25502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:49:08.124 [INFO] [Thread-25502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:49:08.127 [DEBUG] [Thread-25502] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:49:08.127 [DEBUG] [Thread-25502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:49:08.127 [DEBUG] [Thread-25502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:49:08.127 [DEBUG] [Thread-25502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:49:08.127 [DEBUG] [Thread-25502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:49:08.127 [DEBUG] [Thread-25502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:49:08.128 [DEBUG] [Thread-25502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:49:08.128 [DEBUG] [Thread-25502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:49:08.128 [DEBUG] [Thread-25502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:49:08.128 [DEBUG] [Thread-25502] [transport.py] [_log()] client lang: <none>
2026-04-15T20:49:08.128 [DEBUG] [Thread-25502] [transport.py] [_log()] server lang: <none>
2026-04-15T20:49:08.128 [DEBUG] [Thread-25502] [transport.py] [_log()] kex follows: False
2026-04-15T20:49:08.128 [DEBUG] [Thread-25502] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:49:08.128 [DEBUG] [Thread-25502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:49:08.128 [DEBUG] [Thread-25502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:49:08.128 [DEBUG] [Thread-25502] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:49:08.128 [DEBUG] [Thread-25502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:49:08.128 [DEBUG] [Thread-25502] [transport.py] [_log()] Compression: none
2026-04-15T20:49:08.128 [DEBUG] [Thread-25502] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:49:08.136 [DEBUG] [Thread-25502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:49:08.136 [DEBUG] [Thread-25502] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:49:08.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:49:08.137 [DEBUG] [Thread-25502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:49:08.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:49:08.138 [DEBUG] [Thread-25502] [transport.py] [_log()] userauth is OK
2026-04-15T20:49:08.138 [DEBUG] [Thread-25502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:49:08.138 [DEBUG] [Thread-25502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:49:08.138 [DEBUG] [Thread-25502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:49:08.138 [DEBUG] [Thread-25502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:49:08.152 [INFO] [Thread-25502] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:49:08.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:49:08.961 [DEBUG] [Thread-25502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:49:08.962 [DEBUG] [Thread-25502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:49:08.962 [DEBUG] [Thread-25502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:49:09.002 [DEBUG] [Thread-25502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:49:09.002 [DEBUG] [Thread-25502] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:49:09.005 [DEBUG] [Thread-25502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:49:09.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:49:09.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:49:09.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:49:09.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:49:09.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:49:09.026 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:49:09.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:49:09.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:49:09.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:49:09.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.783465 -999.00   +9.60   3.82     80   +6.30 1 1 1 2 1     0    0 3.11 -9.27 ZNESW 4.0 3.8 300.8 5.6 10.2 -24.6 10.2 -23.3 9.9 -21.4 10.1 -23.3
2026-04-15T20:49:09.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:49:09.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:49:09.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.783465
2026-04-15T20:49:09.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:49:09.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:49:09.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:49:09.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:49:09.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:49:09.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:48:42', tmtdew=3.79924, humidity=77.1314, cloud=0.0, wind=6.8832, temperature=9.58197, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:48:42', seeing=2.09, atlas_timestamp='2026-04-15T18:48:11.376', atlas_cloud=1, atlas_rain=1, zp_data=[-0.050250000000001904, -0.010749999999999815, -0.04574999999999996, 0.16199999999999903, 0.041499999999999204, 0.0002500000000011937, -0.022999999999999687, -0.012749999999998707, -0.0015000000000000568, -0.006999999999999673, 0.048749999999998295, 0.011000000000001009, 0.06799999999999962, 0.0012499999999988631, 0.022999999999999687, 0.009999999999999787, 0.024750000000000938, 0.016500000000000625, 0.13199999999999967, -0.019750000000001933, 0.05649999999999977, 0.0467499999999994, -0.02874999999999872, 0.01875000000000071, 0.04099999999999859, 0.02099999999999902, 0.01774999999999949, -0.01249999999999929, -0.02200000000000024, -0.015999999999998238, 0.045000000000001705, 0.05400000000000027, 0.006750000000000256], zp_timestamp='2026-04-15T18:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:49:09.029 [DEBUG] [Thread-25502] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:49:09.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:49:09.285 [DEBUG] [Thread-25505] [transport.py] [_log()] starting thread (client mode): 0xee9c2710
2026-04-15T20:49:09.285 [DEBUG] [Thread-25505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:49:09.299 [DEBUG] [Thread-25505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:49:09.299 [INFO] [Thread-25505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:49:09.306 [DEBUG] [Thread-25505] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:49:09.307 [DEBUG] [Thread-25505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:49:09.307 [DEBUG] [Thread-25505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:49:09.307 [DEBUG] [Thread-25505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:49:09.307 [DEBUG] [Thread-25505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:49:09.307 [DEBUG] [Thread-25505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:49:09.307 [DEBUG] [Thread-25505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:49:09.307 [DEBUG] [Thread-25505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:49:09.307 [DEBUG] [Thread-25505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:49:09.307 [DEBUG] [Thread-25505] [transport.py] [_log()] client lang: <none>
2026-04-15T20:49:09.307 [DEBUG] [Thread-25505] [transport.py] [_log()] server lang: <none>
2026-04-15T20:49:09.307 [DEBUG] [Thread-25505] [transport.py] [_log()] kex follows: False
2026-04-15T20:49:09.308 [DEBUG] [Thread-25505] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:49:09.308 [DEBUG] [Thread-25505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:49:09.308 [DEBUG] [Thread-25505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:49:09.308 [DEBUG] [Thread-25505] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:49:09.308 [DEBUG] [Thread-25505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:49:09.308 [DEBUG] [Thread-25505] [transport.py] [_log()] Compression: none
2026-04-15T20:49:09.308 [DEBUG] [Thread-25505] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:49:09.365 [DEBUG] [Thread-25505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:49:09.365 [DEBUG] [Thread-25505] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:49:09.366 [DEBUG] [Thread-25505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:49:09.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:49:09.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:49:09.421 [DEBUG] [Thread-25505] [transport.py] [_log()] userauth is OK
2026-04-15T20:49:09.422 [DEBUG] [Thread-25505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:49:09.422 [DEBUG] [Thread-25505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:49:09.422 [DEBUG] [Thread-25505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:49:09.422 [DEBUG] [Thread-25505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:49:09.449 [INFO] [Thread-25505] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:49:09.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:49:09.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:49:10.278 [DEBUG] [Thread-25505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:49:10.278 [DEBUG] [Thread-25505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:49:10.325 [DEBUG] [Thread-25505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:49:10.326 [DEBUG] [Thread-25505] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:49:10.334 [DEBUG] [Thread-25505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:49:10.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:49:10.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')
2026-04-15T20:49:10.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') -> 00000000
2026-04-15T20:49:10.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:49:10.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:49:10.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:49:10.366 [DEBUG] [Thread-25505] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:49:11.216 [DEBUG] [Thread-25507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:49:19.619 [DEBUG] [Thread-25508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:49:34.662 [DEBUG] [Thread-25509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:49:40.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:49:40.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:49:40.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
2026-04-15T20:49:40.822 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:49:40.823 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:49:41.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 49, 18), 3.91611, 76.483, 0.0, 5.70024, 9.47433, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:49:41.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:49:18
2026-04-15T20:49:42.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:49:42.498 [DEBUG] [Thread-25510] [transport.py] [_log()] starting thread (client mode): 0xee991660
2026-04-15T20:49:42.499 [DEBUG] [Thread-25510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:49:42.518 [DEBUG] [Thread-25510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:49:42.518 [INFO] [Thread-25510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:49:42.521 [DEBUG] [Thread-25510] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:49:42.521 [DEBUG] [Thread-25510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:49:42.521 [DEBUG] [Thread-25510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:49:42.521 [DEBUG] [Thread-25510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:49:42.521 [DEBUG] [Thread-25510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:49:42.521 [DEBUG] [Thread-25510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:49:42.521 [DEBUG] [Thread-25510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:49:42.521 [DEBUG] [Thread-25510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:49:42.522 [DEBUG] [Thread-25510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:49:42.522 [DEBUG] [Thread-25510] [transport.py] [_log()] client lang: <none>
2026-04-15T20:49:42.522 [DEBUG] [Thread-25510] [transport.py] [_log()] server lang: <none>
2026-04-15T20:49:42.522 [DEBUG] [Thread-25510] [transport.py] [_log()] kex follows: False
2026-04-15T20:49:42.522 [DEBUG] [Thread-25510] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:49:42.522 [DEBUG] [Thread-25510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:49:42.522 [DEBUG] [Thread-25510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:49:42.522 [DEBUG] [Thread-25510] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:49:42.522 [DEBUG] [Thread-25510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:49:42.522 [DEBUG] [Thread-25510] [transport.py] [_log()] Compression: none
2026-04-15T20:49:42.522 [DEBUG] [Thread-25510] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:49:42.538 [DEBUG] [Thread-25510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:49:42.539 [DEBUG] [Thread-25510] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:49:42.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:49:42.539 [DEBUG] [Thread-25510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:49:42.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:49:42.540 [DEBUG] [Thread-25510] [transport.py] [_log()] userauth is OK
2026-04-15T20:49:42.541 [DEBUG] [Thread-25510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:49:42.541 [DEBUG] [Thread-25510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:49:42.541 [DEBUG] [Thread-25510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:49:42.541 [DEBUG] [Thread-25510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:49:42.567 [INFO] [Thread-25510] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:49:42.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:49:43.365 [DEBUG] [Thread-25510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:49:43.365 [DEBUG] [Thread-25510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:49:43.366 [DEBUG] [Thread-25510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:49:43.406 [DEBUG] [Thread-25510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:49:43.406 [DEBUG] [Thread-25510] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:49:43.409 [DEBUG] [Thread-25510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:49:43.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:49:43.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:49:43.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:49:43.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:49:43.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:49:43.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:49:43.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:49:43.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:49:43.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:49:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.784159 -999.00   +9.60   5.27     80   +6.30 1 1 1 2 1     0    0 3.05 -9.07 ZNESW 5.7 5.3 282.7 5.8 10.2 -24.6 10.1 -23.3 9.8 -21.2 10.1 -23.3
2026-04-15T20:49:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:49:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:49:43.433 [DEBUG] [Thread-25510] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:49:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.784159
2026-04-15T20:49:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:49:43.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:49:43.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:49:43.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:49:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:49:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:49:18', tmtdew=3.91611, humidity=76.483, cloud=0.0, wind=5.70024, temperature=9.47433, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:49:18', seeing=1.76, atlas_timestamp='2026-04-15T18:49:11.338', atlas_cloud=1, atlas_rain=1, zp_data=[-0.050250000000001904, -0.010749999999999815, -0.04574999999999996, 0.16199999999999903, 0.041499999999999204, 0.0002500000000011937, -0.022999999999999687, -0.012749999999998707, -0.0015000000000000568, -0.006999999999999673, 0.048749999999998295, 0.011000000000001009, 0.06799999999999962, 0.0012499999999988631, 0.022999999999999687, 0.009999999999999787, 0.024750000000000938, 0.016500000000000625, 0.13199999999999967, -0.019750000000001933, 0.05649999999999977, 0.0467499999999994, -0.02874999999999872, 0.01875000000000071, 0.04099999999999859, 0.02099999999999902, 0.01774999999999949, -0.01249999999999929, -0.02200000000000024, -0.015999999999998238, 0.045000000000001705, 0.05400000000000027, 0.006750000000000256], zp_timestamp='2026-04-15T18:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:49:43.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:49:43.698 [DEBUG] [Thread-25513] [transport.py] [_log()] starting thread (client mode): 0xf13cb520
2026-04-15T20:49:43.698 [DEBUG] [Thread-25513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:49:43.712 [DEBUG] [Thread-25513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:49:43.713 [INFO] [Thread-25513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:49:43.720 [DEBUG] [Thread-25513] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:49:43.720 [DEBUG] [Thread-25513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:49:43.720 [DEBUG] [Thread-25513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:49:43.720 [DEBUG] [Thread-25513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:49:43.720 [DEBUG] [Thread-25513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:49:43.720 [DEBUG] [Thread-25513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:49:43.720 [DEBUG] [Thread-25513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:49:43.721 [DEBUG] [Thread-25513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:49:43.721 [DEBUG] [Thread-25513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:49:43.721 [DEBUG] [Thread-25513] [transport.py] [_log()] client lang: <none>
2026-04-15T20:49:43.721 [DEBUG] [Thread-25513] [transport.py] [_log()] server lang: <none>
2026-04-15T20:49:43.721 [DEBUG] [Thread-25513] [transport.py] [_log()] kex follows: False
2026-04-15T20:49:43.721 [DEBUG] [Thread-25513] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:49:43.721 [DEBUG] [Thread-25513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:49:43.721 [DEBUG] [Thread-25513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:49:43.721 [DEBUG] [Thread-25513] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:49:43.721 [DEBUG] [Thread-25513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:49:43.722 [DEBUG] [Thread-25513] [transport.py] [_log()] Compression: none
2026-04-15T20:49:43.722 [DEBUG] [Thread-25513] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:49:43.777 [DEBUG] [Thread-25513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:49:43.778 [DEBUG] [Thread-25513] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:49:43.778 [DEBUG] [Thread-25513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:49:43.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:49:43.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:49:43.838 [DEBUG] [Thread-25513] [transport.py] [_log()] userauth is OK
2026-04-15T20:49:43.839 [DEBUG] [Thread-25513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:49:43.839 [DEBUG] [Thread-25513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:49:43.839 [DEBUG] [Thread-25513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:49:43.839 [DEBUG] [Thread-25513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:49:43.864 [INFO] [Thread-25513] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:49:43.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:49:43.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:49:44.694 [DEBUG] [Thread-25513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:49:44.694 [DEBUG] [Thread-25513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:49:44.741 [DEBUG] [Thread-25513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:49:44.741 [DEBUG] [Thread-25513] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:49:44.750 [DEBUG] [Thread-25513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:49:44.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:49:44.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')
2026-04-15T20:49:44.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
2026-04-15T20:49:44.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:49:44.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:49:44.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:49:44.788 [DEBUG] [Thread-25513] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:49:49.689 [DEBUG] [Thread-25515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:50:04.735 [DEBUG] [Thread-25516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:50:11.363 [DEBUG] [Thread-25517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:50:14.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:50:14.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:50:14.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
2026-04-15T20:50:16.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 49, 53), 3.83222, 76.966, 0.0, 9.03528, 9.64865, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:50:16.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:49:53
2026-04-15T20:50:16.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:50:16.878 [DEBUG] [Thread-25518] [transport.py] [_log()] starting thread (client mode): 0xee993370
2026-04-15T20:50:16.878 [DEBUG] [Thread-25518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:50:16.900 [DEBUG] [Thread-25518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:50:16.900 [INFO] [Thread-25518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:50:16.903 [DEBUG] [Thread-25518] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:50:16.903 [DEBUG] [Thread-25518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:50:16.903 [DEBUG] [Thread-25518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:50:16.903 [DEBUG] [Thread-25518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:50:16.903 [DEBUG] [Thread-25518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:50:16.903 [DEBUG] [Thread-25518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:50:16.903 [DEBUG] [Thread-25518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:50:16.903 [DEBUG] [Thread-25518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:50:16.903 [DEBUG] [Thread-25518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:50:16.904 [DEBUG] [Thread-25518] [transport.py] [_log()] client lang: <none>
2026-04-15T20:50:16.904 [DEBUG] [Thread-25518] [transport.py] [_log()] server lang: <none>
2026-04-15T20:50:16.904 [DEBUG] [Thread-25518] [transport.py] [_log()] kex follows: False
2026-04-15T20:50:16.904 [DEBUG] [Thread-25518] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:50:16.904 [DEBUG] [Thread-25518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:50:16.904 [DEBUG] [Thread-25518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:50:16.904 [DEBUG] [Thread-25518] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:50:16.904 [DEBUG] [Thread-25518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:50:16.904 [DEBUG] [Thread-25518] [transport.py] [_log()] Compression: none
2026-04-15T20:50:16.904 [DEBUG] [Thread-25518] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:50:16.920 [DEBUG] [Thread-25518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:50:16.921 [DEBUG] [Thread-25518] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:50:16.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:50:16.921 [DEBUG] [Thread-25518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:50:16.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:50:16.922 [DEBUG] [Thread-25518] [transport.py] [_log()] userauth is OK
2026-04-15T20:50:16.923 [DEBUG] [Thread-25518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:50:16.923 [DEBUG] [Thread-25518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:50:16.923 [DEBUG] [Thread-25518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:50:16.923 [DEBUG] [Thread-25518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:50:16.947 [INFO] [Thread-25518] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:50:16.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:50:18.960 [DEBUG] [Thread-25518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:50:18.961 [DEBUG] [Thread-25518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:50:18.961 [DEBUG] [Thread-25518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:50:19.001 [DEBUG] [Thread-25518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:50:19.001 [DEBUG] [Thread-25518] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:50:19.005 [DEBUG] [Thread-25518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:50:19.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:50:19.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:50:19.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:50:19.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:50:19.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:50:19.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:50:19.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:50:19.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:50:19.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:50:19.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.784507 -999.00   +9.70   5.36     79   +6.30 1 1 1 1 1     0    0 3.07 -8.52 ZNESW 6.1 5.4 289.6 6.2 10.2 -24.5 10.1 -23.2 9.8 -21.2 10.1 -23.3
2026-04-15T20:50:19.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:50:19.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:50:19.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.784507
2026-04-15T20:50:19.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:50:19.032 [DEBUG] [Thread-25518] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:50:19.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:50:19.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:50:19.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:50:19.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:50:19.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:49:53', tmtdew=3.83222, humidity=76.966, cloud=0.0, wind=9.03528, temperature=9.64865, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:49:53', seeing=1.51, atlas_timestamp='2026-04-15T18:49:41.405', atlas_cloud=1, atlas_rain=1, zp_data=[-0.050250000000001904, -0.010749999999999815, -0.04574999999999996, 0.16199999999999903, 0.041499999999999204, 0.0002500000000011937, -0.022999999999999687, -0.012749999999998707, -0.0015000000000000568, -0.006999999999999673, 0.048749999999998295, 0.011000000000001009, 0.06799999999999962, 0.0012499999999988631, 0.022999999999999687, 0.009999999999999787, 0.024750000000000938, 0.016500000000000625, 0.13199999999999967, -0.019750000000001933, 0.05649999999999977, 0.0467499999999994, -0.02874999999999872, 0.01875000000000071, 0.04099999999999859, 0.02099999999999902, 0.01774999999999949, -0.01249999999999929, -0.02200000000000024, -0.015999999999998238, 0.045000000000001705, 0.05400000000000027, 0.006750000000000256], zp_timestamp='2026-04-15T18:48:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:50:19.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:50:19.291 [DEBUG] [Thread-25521] [transport.py] [_log()] starting thread (client mode): 0xf13e0c40
2026-04-15T20:50:19.291 [DEBUG] [Thread-25521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:50:19.306 [DEBUG] [Thread-25521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:50:19.306 [INFO] [Thread-25521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:50:19.313 [DEBUG] [Thread-25521] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:50:19.313 [DEBUG] [Thread-25521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:50:19.313 [DEBUG] [Thread-25521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:50:19.313 [DEBUG] [Thread-25521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:50:19.313 [DEBUG] [Thread-25521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:50:19.314 [DEBUG] [Thread-25521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:50:19.314 [DEBUG] [Thread-25521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:50:19.314 [DEBUG] [Thread-25521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:50:19.314 [DEBUG] [Thread-25521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:50:19.314 [DEBUG] [Thread-25521] [transport.py] [_log()] client lang: <none>
2026-04-15T20:50:19.314 [DEBUG] [Thread-25521] [transport.py] [_log()] server lang: <none>
2026-04-15T20:50:19.314 [DEBUG] [Thread-25521] [transport.py] [_log()] kex follows: False
2026-04-15T20:50:19.314 [DEBUG] [Thread-25521] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:50:19.314 [DEBUG] [Thread-25521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:50:19.314 [DEBUG] [Thread-25521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:50:19.314 [DEBUG] [Thread-25521] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:50:19.315 [DEBUG] [Thread-25521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:50:19.315 [DEBUG] [Thread-25521] [transport.py] [_log()] Compression: none
2026-04-15T20:50:19.315 [DEBUG] [Thread-25521] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:50:19.370 [DEBUG] [Thread-25521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:50:19.370 [DEBUG] [Thread-25521] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:50:19.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:50:19.371 [DEBUG] [Thread-25521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:50:19.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:50:19.426 [DEBUG] [Thread-25521] [transport.py] [_log()] userauth is OK
2026-04-15T20:50:19.426 [DEBUG] [Thread-25521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:50:19.427 [DEBUG] [Thread-25521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:50:19.427 [DEBUG] [Thread-25521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:50:19.427 [DEBUG] [Thread-25521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:50:19.452 [INFO] [Thread-25521] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:50:19.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:50:19.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:50:19.764 [DEBUG] [Thread-25523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:50:20.314 [DEBUG] [Thread-25521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:50:20.314 [DEBUG] [Thread-25521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:50:20.362 [DEBUG] [Thread-25521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:50:20.362 [DEBUG] [Thread-25521] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:50:20.371 [DEBUG] [Thread-25521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:50:20.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:50:20.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')
2026-04-15T20:50:20.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
2026-04-15T20:50:20.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:50:20.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:50:20.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:50:20.406 [DEBUG] [Thread-25521] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:50:34.800 [DEBUG] [Thread-25524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:50:41.024 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:50:41.025 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:50:49.828 [DEBUG] [Thread-25525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:50:50.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:50:50.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:50:50.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
2026-04-15T20:50:51.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 50, 28), 3.91656, 76.4832, 0.0, 7.42968, 9.49104, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:50:51.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:50:28
2026-04-15T20:50:52.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:50:52.568 [DEBUG] [Thread-25526] [transport.py] [_log()] starting thread (client mode): 0xf13e23e0
2026-04-15T20:50:52.568 [DEBUG] [Thread-25526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:50:52.588 [DEBUG] [Thread-25526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:50:52.588 [INFO] [Thread-25526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:50:52.591 [DEBUG] [Thread-25526] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:50:52.591 [DEBUG] [Thread-25526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:50:52.592 [DEBUG] [Thread-25526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:50:52.592 [DEBUG] [Thread-25526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:50:52.592 [DEBUG] [Thread-25526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:50:52.592 [DEBUG] [Thread-25526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:50:52.592 [DEBUG] [Thread-25526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:50:52.592 [DEBUG] [Thread-25526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:50:52.592 [DEBUG] [Thread-25526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:50:52.592 [DEBUG] [Thread-25526] [transport.py] [_log()] client lang: <none>
2026-04-15T20:50:52.592 [DEBUG] [Thread-25526] [transport.py] [_log()] server lang: <none>
2026-04-15T20:50:52.592 [DEBUG] [Thread-25526] [transport.py] [_log()] kex follows: False
2026-04-15T20:50:52.592 [DEBUG] [Thread-25526] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:50:52.592 [DEBUG] [Thread-25526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:50:52.593 [DEBUG] [Thread-25526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:50:52.593 [DEBUG] [Thread-25526] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:50:52.593 [DEBUG] [Thread-25526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:50:52.593 [DEBUG] [Thread-25526] [transport.py] [_log()] Compression: none
2026-04-15T20:50:52.593 [DEBUG] [Thread-25526] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:50:52.610 [DEBUG] [Thread-25526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:50:52.610 [DEBUG] [Thread-25526] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:50:52.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:50:52.611 [DEBUG] [Thread-25526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:50:52.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:50:52.612 [DEBUG] [Thread-25526] [transport.py] [_log()] userauth is OK
2026-04-15T20:50:52.612 [DEBUG] [Thread-25526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:50:52.612 [DEBUG] [Thread-25526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:50:52.612 [DEBUG] [Thread-25526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:50:52.613 [DEBUG] [Thread-25526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:50:52.637 [INFO] [Thread-25526] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:50:52.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:50:53.438 [DEBUG] [Thread-25526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:50:53.438 [DEBUG] [Thread-25526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:50:53.439 [DEBUG] [Thread-25526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:50:53.479 [DEBUG] [Thread-25526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:50:53.479 [DEBUG] [Thread-25526] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:50:53.482 [DEBUG] [Thread-25526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:50:53.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:50:53.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:50:53.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:50:53.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:50:53.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:50:53.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:50:53.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:50:53.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:50:53.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:50:53.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.784854 -999.00   +9.60   5.72     79   +6.30 1 1 1 1 1     0    0 3.09 -8.50 ZNESW 5.7 5.7 288.8 7.0 10.2 -24.5 10.1 -23.4 9.8 -21.3 10.2 -23.4
2026-04-15T20:50:53.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:50:53.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:50:53.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.784854
2026-04-15T20:50:53.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:50:53.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:50:53.507 [DEBUG] [Thread-25526] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:50:53.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:50:53.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:50:53.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:50:53.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:50:28', tmtdew=3.91656, humidity=76.4832, cloud=0.0, wind=7.42968, temperature=9.49104, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:50:29', seeing=1.74, atlas_timestamp='2026-04-15T18:50:11.386', atlas_cloud=1, atlas_rain=1, zp_data=[-0.050250000000001904, -0.010749999999999815, -0.04574999999999996, 0.16199999999999903, 0.041499999999999204, 0.0002500000000011937, -0.022999999999999687, -0.012749999999998707, -0.0015000000000000568, -0.006999999999999673, 0.048749999999998295, 0.011000000000001009, 0.06799999999999962, 0.0012499999999988631, 0.022999999999999687, 0.009999999999999787, 0.024750000000000938, 0.016500000000000625, 0.13199999999999967, -0.019750000000001933, 0.05649999999999977, 0.0467499999999994, -0.02874999999999872, 0.01875000000000071, 0.04099999999999859, 0.02099999999999902, 0.01774999999999949, -0.01249999999999929, -0.02200000000000024, -0.015999999999998238, 0.045000000000001705, 0.05400000000000027, 0.006750000000000256], zp_timestamp='2026-04-15T18:48:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:50:53.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:50:53.773 [DEBUG] [Thread-25529] [transport.py] [_log()] starting thread (client mode): 0xee9c1b40
2026-04-15T20:50:53.774 [DEBUG] [Thread-25529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:50:53.788 [DEBUG] [Thread-25529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:50:53.789 [INFO] [Thread-25529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:50:53.796 [DEBUG] [Thread-25529] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:50:53.796 [DEBUG] [Thread-25529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:50:53.796 [DEBUG] [Thread-25529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:50:53.796 [DEBUG] [Thread-25529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:50:53.796 [DEBUG] [Thread-25529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:50:53.796 [DEBUG] [Thread-25529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:50:53.796 [DEBUG] [Thread-25529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:50:53.797 [DEBUG] [Thread-25529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:50:53.797 [DEBUG] [Thread-25529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:50:53.797 [DEBUG] [Thread-25529] [transport.py] [_log()] client lang: <none>
2026-04-15T20:50:53.797 [DEBUG] [Thread-25529] [transport.py] [_log()] server lang: <none>
2026-04-15T20:50:53.797 [DEBUG] [Thread-25529] [transport.py] [_log()] kex follows: False
2026-04-15T20:50:53.797 [DEBUG] [Thread-25529] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:50:53.797 [DEBUG] [Thread-25529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:50:53.797 [DEBUG] [Thread-25529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:50:53.797 [DEBUG] [Thread-25529] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:50:53.797 [DEBUG] [Thread-25529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:50:53.797 [DEBUG] [Thread-25529] [transport.py] [_log()] Compression: none
2026-04-15T20:50:53.797 [DEBUG] [Thread-25529] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:50:53.854 [DEBUG] [Thread-25529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:50:53.854 [DEBUG] [Thread-25529] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:50:53.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:50:53.855 [DEBUG] [Thread-25529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:50:53.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:50:53.910 [DEBUG] [Thread-25529] [transport.py] [_log()] userauth is OK
2026-04-15T20:50:53.911 [DEBUG] [Thread-25529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:50:53.911 [DEBUG] [Thread-25529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:50:53.911 [DEBUG] [Thread-25529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:50:53.911 [DEBUG] [Thread-25529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:50:53.930 [INFO] [Thread-25529] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:50:53.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:50:53.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:50:54.765 [DEBUG] [Thread-25529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:50:54.765 [DEBUG] [Thread-25529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:50:54.813 [DEBUG] [Thread-25529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:50:54.813 [DEBUG] [Thread-25529] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:50:54.822 [DEBUG] [Thread-25529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:50:54.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:50:54.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')
2026-04-15T20:50:54.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
2026-04-15T20:50:54.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:50:54.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:50:54.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:50:54.856 [DEBUG] [Thread-25529] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:51:04.859 [DEBUG] [Thread-25531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:51:11.525 [DEBUG] [Thread-25532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:51:19.904 [DEBUG] [Thread-25533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:51:24.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:51:24.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:51:24.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
2026-04-15T20:51:26.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 51, 4), 3.90985, 76.5163, 0.0, 7.14744, 9.47445, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:51:26.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:51:04
2026-04-15T20:51:26.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:51:27.016 [DEBUG] [Thread-25534] [transport.py] [_log()] starting thread (client mode): 0xee993460
2026-04-15T20:51:27.017 [DEBUG] [Thread-25534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:51:27.036 [DEBUG] [Thread-25534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:51:27.036 [INFO] [Thread-25534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:51:27.039 [DEBUG] [Thread-25534] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:51:27.039 [DEBUG] [Thread-25534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:51:27.039 [DEBUG] [Thread-25534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:51:27.040 [DEBUG] [Thread-25534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:51:27.040 [DEBUG] [Thread-25534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:51:27.040 [DEBUG] [Thread-25534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:51:27.040 [DEBUG] [Thread-25534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:51:27.040 [DEBUG] [Thread-25534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:51:27.040 [DEBUG] [Thread-25534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:51:27.040 [DEBUG] [Thread-25534] [transport.py] [_log()] client lang: <none>
2026-04-15T20:51:27.040 [DEBUG] [Thread-25534] [transport.py] [_log()] server lang: <none>
2026-04-15T20:51:27.040 [DEBUG] [Thread-25534] [transport.py] [_log()] kex follows: False
2026-04-15T20:51:27.040 [DEBUG] [Thread-25534] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:51:27.040 [DEBUG] [Thread-25534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:51:27.041 [DEBUG] [Thread-25534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:51:27.041 [DEBUG] [Thread-25534] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:51:27.041 [DEBUG] [Thread-25534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:51:27.041 [DEBUG] [Thread-25534] [transport.py] [_log()] Compression: none
2026-04-15T20:51:27.041 [DEBUG] [Thread-25534] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:51:27.057 [DEBUG] [Thread-25534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:51:27.057 [DEBUG] [Thread-25534] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:51:27.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:51:27.058 [DEBUG] [Thread-25534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:51:27.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:51:27.059 [DEBUG] [Thread-25534] [transport.py] [_log()] userauth is OK
2026-04-15T20:51:27.059 [DEBUG] [Thread-25534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:51:27.060 [DEBUG] [Thread-25534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:51:27.060 [DEBUG] [Thread-25534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:51:27.060 [DEBUG] [Thread-25534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:51:27.082 [INFO] [Thread-25534] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:51:27.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:51:27.886 [DEBUG] [Thread-25534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:51:27.886 [DEBUG] [Thread-25534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:51:27.887 [DEBUG] [Thread-25534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:51:27.927 [DEBUG] [Thread-25534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:51:27.927 [DEBUG] [Thread-25534] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:51:27.930 [DEBUG] [Thread-25534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:51:27.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:51:27.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:51:27.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:51:27.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:51:27.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:51:27.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:51:27.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:51:27.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:51:27.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:51:27.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.785201 -999.00   +9.60   5.82     79   +6.30 1 1 1 1 1     0    0 3.07 -8.73 ZNESW 6.0 5.8 287.6 6.7 10.2 -24.6 10.2 -23.3 9.8 -21.2 10.1 -23.3
2026-04-15T20:51:27.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:51:27.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:51:27.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.785201
2026-04-15T20:51:27.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:51:27.958 [DEBUG] [Thread-25534] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:51:27.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:51:27.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:51:27.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:51:27.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:51:27.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:51:04', tmtdew=3.90985, humidity=76.5163, cloud=0.0, wind=7.14744, temperature=9.47445, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:51:04', seeing=1.75, atlas_timestamp='2026-04-15T18:50:41.366', atlas_cloud=1, atlas_rain=1, zp_data=[-0.050250000000001904, -0.010749999999999815, -0.04574999999999996, 0.16199999999999903, 0.041499999999999204, 0.0002500000000011937, -0.022999999999999687, -0.012749999999998707, -0.0015000000000000568, -0.006999999999999673, 0.048749999999998295, 0.011000000000001009, 0.06799999999999962, 0.0012499999999988631, 0.022999999999999687, 0.009999999999999787, 0.024750000000000938, 0.016500000000000625, 0.13199999999999967, -0.019750000000001933, 0.05649999999999977, 0.0467499999999994, -0.02874999999999872, 0.01875000000000071, 0.04099999999999859, 0.02099999999999902, 0.01774999999999949, -0.01249999999999929, -0.02200000000000024, -0.015999999999998238, 0.045000000000001705, 0.05400000000000027, 0.006750000000000256], zp_timestamp='2026-04-15T18:48:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:51:28.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:51:28.216 [DEBUG] [Thread-25537] [transport.py] [_log()] starting thread (client mode): 0xf13c95d0
2026-04-15T20:51:28.216 [DEBUG] [Thread-25537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:51:28.231 [DEBUG] [Thread-25537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:51:28.231 [INFO] [Thread-25537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:51:28.238 [DEBUG] [Thread-25537] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:51:28.238 [DEBUG] [Thread-25537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:51:28.238 [DEBUG] [Thread-25537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:51:28.238 [DEBUG] [Thread-25537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:51:28.238 [DEBUG] [Thread-25537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:51:28.238 [DEBUG] [Thread-25537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:51:28.238 [DEBUG] [Thread-25537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:51:28.238 [DEBUG] [Thread-25537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:51:28.239 [DEBUG] [Thread-25537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:51:28.239 [DEBUG] [Thread-25537] [transport.py] [_log()] client lang: <none>
2026-04-15T20:51:28.239 [DEBUG] [Thread-25537] [transport.py] [_log()] server lang: <none>
2026-04-15T20:51:28.239 [DEBUG] [Thread-25537] [transport.py] [_log()] kex follows: False
2026-04-15T20:51:28.239 [DEBUG] [Thread-25537] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:51:28.239 [DEBUG] [Thread-25537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:51:28.239 [DEBUG] [Thread-25537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:51:28.239 [DEBUG] [Thread-25537] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:51:28.239 [DEBUG] [Thread-25537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:51:28.239 [DEBUG] [Thread-25537] [transport.py] [_log()] Compression: none
2026-04-15T20:51:28.239 [DEBUG] [Thread-25537] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:51:28.294 [DEBUG] [Thread-25537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:51:28.295 [DEBUG] [Thread-25537] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:51:28.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:51:28.295 [DEBUG] [Thread-25537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:51:28.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:51:28.355 [DEBUG] [Thread-25537] [transport.py] [_log()] userauth is OK
2026-04-15T20:51:28.355 [DEBUG] [Thread-25537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:51:28.356 [DEBUG] [Thread-25537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:51:28.356 [DEBUG] [Thread-25537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:51:28.356 [DEBUG] [Thread-25537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:51:28.382 [INFO] [Thread-25537] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:51:28.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:51:28.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:51:29.187 [DEBUG] [Thread-25537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:51:29.188 [DEBUG] [Thread-25537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:51:29.236 [DEBUG] [Thread-25537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:51:29.236 [DEBUG] [Thread-25537] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:51:29.245 [DEBUG] [Thread-25537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:51:29.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:51:29.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')
2026-04-15T20:51:29.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
2026-04-15T20:51:29.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:51:29.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:51:29.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:51:29.287 [DEBUG] [Thread-25537] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:51:34.934 [DEBUG] [Thread-25539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:51:41.228 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:51:41.229 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:51:49.971 [DEBUG] [Thread-25540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:51:59.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:51:59.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:51:59.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
2026-04-15T20:52:00.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 51, 39), 3.81052, 77.0661, 0.0, 9.24696, 9.54959, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:52:00.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:51:39
2026-04-15T20:52:00.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:52:01.446 [DEBUG] [Thread-25541] [transport.py] [_log()] starting thread (client mode): 0xee991f30
2026-04-15T20:52:01.446 [DEBUG] [Thread-25541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:52:01.466 [DEBUG] [Thread-25541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:52:01.466 [INFO] [Thread-25541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:52:01.467 [DEBUG] [Thread-25541] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:52:01.467 [DEBUG] [Thread-25541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:52:01.467 [DEBUG] [Thread-25541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:52:01.467 [DEBUG] [Thread-25541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:52:01.468 [DEBUG] [Thread-25541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:52:01.468 [DEBUG] [Thread-25541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:52:01.468 [DEBUG] [Thread-25541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:52:01.468 [DEBUG] [Thread-25541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:52:01.468 [DEBUG] [Thread-25541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:52:01.468 [DEBUG] [Thread-25541] [transport.py] [_log()] client lang: <none>
2026-04-15T20:52:01.468 [DEBUG] [Thread-25541] [transport.py] [_log()] server lang: <none>
2026-04-15T20:52:01.468 [DEBUG] [Thread-25541] [transport.py] [_log()] kex follows: False
2026-04-15T20:52:01.468 [DEBUG] [Thread-25541] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:52:01.468 [DEBUG] [Thread-25541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:52:01.468 [DEBUG] [Thread-25541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:52:01.468 [DEBUG] [Thread-25541] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:52:01.469 [DEBUG] [Thread-25541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:52:01.469 [DEBUG] [Thread-25541] [transport.py] [_log()] Compression: none
2026-04-15T20:52:01.469 [DEBUG] [Thread-25541] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:52:01.486 [DEBUG] [Thread-25541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:52:01.486 [DEBUG] [Thread-25541] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:52:01.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:52:01.487 [DEBUG] [Thread-25541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:52:01.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:52:01.488 [DEBUG] [Thread-25541] [transport.py] [_log()] userauth is OK
2026-04-15T20:52:01.488 [DEBUG] [Thread-25541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:52:01.488 [DEBUG] [Thread-25541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:52:01.488 [DEBUG] [Thread-25541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:52:01.488 [DEBUG] [Thread-25541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:52:01.524 [INFO] [Thread-25541] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:52:01.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:52:02.313 [DEBUG] [Thread-25541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:52:02.313 [DEBUG] [Thread-25541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:52:02.314 [DEBUG] [Thread-25541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:52:02.354 [DEBUG] [Thread-25541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:52:02.354 [DEBUG] [Thread-25541] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:52:02.357 [DEBUG] [Thread-25541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:52:02.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:52:02.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:52:02.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:52:02.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:52:02.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:52:02.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:52:02.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:52:02.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:52:02.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:52:02.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.785548 -999.00   +9.70   6.16     79   +6.30 1 1 1 1 1     0    0 3.10 -8.47 ZNESW 6.4 6.2 290.0 6.4 10.3 -24.6 10.1 -23.2 9.8 -21.3 10.1 -23.4
2026-04-15T20:52:02.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:52:02.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:52:02.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.785548
2026-04-15T20:52:02.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:52:02.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:52:02.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:52:02.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:52:02.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:52:02.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:51:39', tmtdew=3.81052, humidity=77.0661, cloud=0.0, wind=9.24696, temperature=9.54959, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:51:40', seeing=1.57, atlas_timestamp='2026-04-15T18:51:11.347', atlas_cloud=1, atlas_rain=1, zp_data=[-0.050250000000001904, -0.010749999999999815, -0.04574999999999996, 0.16199999999999903, 0.041499999999999204, 0.0002500000000011937, -0.022999999999999687, -0.012749999999998707, -0.0015000000000000568, -0.006999999999999673, 0.048749999999998295, 0.011000000000001009, 0.06799999999999962, 0.0012499999999988631, 0.022999999999999687, 0.009999999999999787, 0.024750000000000938, 0.016500000000000625, 0.13199999999999967, -0.019750000000001933, 0.05649999999999977, 0.0467499999999994, -0.02874999999999872, 0.01875000000000071, 0.04099999999999859, 0.02099999999999902, 0.01774999999999949, -0.01249999999999929, -0.02200000000000024, -0.015999999999998238, 0.045000000000001705, 0.05400000000000027, 0.006750000000000256], zp_timestamp='2026-04-15T18:48:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:52:02.378 [DEBUG] [Thread-25541] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:52:02.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:52:02.595 [DEBUG] [Thread-25544] [transport.py] [_log()] starting thread (client mode): 0xee9c2fb0
2026-04-15T20:52:02.596 [DEBUG] [Thread-25544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:52:02.610 [DEBUG] [Thread-25544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:52:02.610 [INFO] [Thread-25544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:52:02.617 [DEBUG] [Thread-25544] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:52:02.617 [DEBUG] [Thread-25544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:52:02.618 [DEBUG] [Thread-25544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:52:02.618 [DEBUG] [Thread-25544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:52:02.618 [DEBUG] [Thread-25544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:52:02.618 [DEBUG] [Thread-25544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:52:02.618 [DEBUG] [Thread-25544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:52:02.618 [DEBUG] [Thread-25544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:52:02.618 [DEBUG] [Thread-25544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:52:02.618 [DEBUG] [Thread-25544] [transport.py] [_log()] client lang: <none>
2026-04-15T20:52:02.618 [DEBUG] [Thread-25544] [transport.py] [_log()] server lang: <none>
2026-04-15T20:52:02.618 [DEBUG] [Thread-25544] [transport.py] [_log()] kex follows: False
2026-04-15T20:52:02.618 [DEBUG] [Thread-25544] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:52:02.619 [DEBUG] [Thread-25544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:52:02.619 [DEBUG] [Thread-25544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:52:02.619 [DEBUG] [Thread-25544] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:52:02.619 [DEBUG] [Thread-25544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:52:02.619 [DEBUG] [Thread-25544] [transport.py] [_log()] Compression: none
2026-04-15T20:52:02.619 [DEBUG] [Thread-25544] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:52:02.677 [DEBUG] [Thread-25544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:52:02.677 [DEBUG] [Thread-25544] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:52:02.678 [DEBUG] [Thread-25544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:52:02.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:52:02.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:52:02.744 [DEBUG] [Thread-25544] [transport.py] [_log()] userauth is OK
2026-04-15T20:52:02.744 [DEBUG] [Thread-25544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:52:02.744 [DEBUG] [Thread-25544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:52:02.745 [DEBUG] [Thread-25544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:52:02.745 [DEBUG] [Thread-25544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:52:02.780 [INFO] [Thread-25544] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:52:02.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:52:02.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:52:03.610 [DEBUG] [Thread-25544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:52:03.610 [DEBUG] [Thread-25544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:52:03.658 [DEBUG] [Thread-25544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:52:03.658 [DEBUG] [Thread-25544] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:52:03.667 [DEBUG] [Thread-25544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:52:03.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:52:03.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')
2026-04-15T20:52:03.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
2026-04-15T20:52:03.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:52:03.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:52:03.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:52:03.702 [DEBUG] [Thread-25544] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:52:04.999 [DEBUG] [Thread-25546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:52:11.676 [DEBUG] [Thread-25547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:52:20.045 [DEBUG] [Thread-25548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:52:33.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:52:33.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:52:33.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
2026-04-15T20:52:34.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 52, 15), 3.89595, 76.5828, 0.0, 8.57628, 9.4748, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:52:34.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:52:15
2026-04-15T20:52:35.076 [DEBUG] [Thread-25549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:52:35.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:52:35.830 [DEBUG] [Thread-25550] [transport.py] [_log()] starting thread (client mode): 0xee993dc0
2026-04-15T20:52:35.830 [DEBUG] [Thread-25550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:52:35.850 [DEBUG] [Thread-25550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:52:35.850 [INFO] [Thread-25550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:52:35.854 [DEBUG] [Thread-25550] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:52:35.854 [DEBUG] [Thread-25550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:52:35.854 [DEBUG] [Thread-25550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:52:35.854 [DEBUG] [Thread-25550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:52:35.854 [DEBUG] [Thread-25550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:52:35.854 [DEBUG] [Thread-25550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:52:35.854 [DEBUG] [Thread-25550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:52:35.854 [DEBUG] [Thread-25550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:52:35.854 [DEBUG] [Thread-25550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:52:35.854 [DEBUG] [Thread-25550] [transport.py] [_log()] client lang: <none>
2026-04-15T20:52:35.854 [DEBUG] [Thread-25550] [transport.py] [_log()] server lang: <none>
2026-04-15T20:52:35.855 [DEBUG] [Thread-25550] [transport.py] [_log()] kex follows: False
2026-04-15T20:52:35.855 [DEBUG] [Thread-25550] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:52:35.855 [DEBUG] [Thread-25550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:52:35.855 [DEBUG] [Thread-25550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:52:35.855 [DEBUG] [Thread-25550] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:52:35.855 [DEBUG] [Thread-25550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:52:35.855 [DEBUG] [Thread-25550] [transport.py] [_log()] Compression: none
2026-04-15T20:52:35.855 [DEBUG] [Thread-25550] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:52:35.871 [DEBUG] [Thread-25550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:52:35.871 [DEBUG] [Thread-25550] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:52:35.872 [DEBUG] [Thread-25550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:52:35.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:52:35.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:52:35.873 [DEBUG] [Thread-25550] [transport.py] [_log()] userauth is OK
2026-04-15T20:52:35.873 [DEBUG] [Thread-25550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:52:35.873 [DEBUG] [Thread-25550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:52:35.873 [DEBUG] [Thread-25550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:52:35.873 [DEBUG] [Thread-25550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:52:35.897 [INFO] [Thread-25550] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:52:35.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:52:36.700 [DEBUG] [Thread-25550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:52:36.701 [DEBUG] [Thread-25550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:52:36.701 [DEBUG] [Thread-25550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:52:36.742 [DEBUG] [Thread-25550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:52:36.742 [DEBUG] [Thread-25550] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:52:36.745 [DEBUG] [Thread-25550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:52:36.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:52:36.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:52:36.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:52:36.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:52:36.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:52:36.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:52:36.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:52:36.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:52:36.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:52:36.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.785895 -999.00   +9.70   7.21     79   +6.30 1 1 1 1 1     0    0 3.13 -7.54 ZNESW 6.8 7.2 289.2 8.3 10.2 -24.6 10.1 -23.3 9.8 -21.2 10.1 -23.3
2026-04-15T20:52:36.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:52:36.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:52:36.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.785895
2026-04-15T20:52:36.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:52:36.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:52:36.766 [DEBUG] [Thread-25550] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:52:36.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:52:36.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:52:36.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:52:36.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:52:15', tmtdew=3.89595, humidity=76.5828, cloud=0.0, wind=8.57628, temperature=9.4748, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:52:15', seeing=1.61, atlas_timestamp='2026-04-15T18:51:41.328', atlas_cloud=1, atlas_rain=1, zp_data=[-0.050250000000001904, -0.010749999999999815, -0.04574999999999996, 0.16199999999999903, 0.041499999999999204, 0.0002500000000011937, -0.022999999999999687, -0.012749999999998707, -0.0015000000000000568, -0.006999999999999673, 0.048749999999998295, 0.011000000000001009, 0.06799999999999962, 0.0012499999999988631, 0.022999999999999687, 0.009999999999999787, 0.024750000000000938, 0.016500000000000625, 0.13199999999999967, -0.019750000000001933, 0.05649999999999977, 0.0467499999999994, -0.02874999999999872, 0.01875000000000071, 0.04099999999999859, 0.02099999999999902, 0.01774999999999949, -0.01249999999999929, -0.02200000000000024, -0.015999999999998238, 0.045000000000001705, 0.05400000000000027, 0.006750000000000256], zp_timestamp='2026-04-15T18:48:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:52:36.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:52:37.004 [DEBUG] [Thread-25553] [transport.py] [_log()] starting thread (client mode): 0xf1337c70
2026-04-15T20:52:37.004 [DEBUG] [Thread-25553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:52:37.018 [DEBUG] [Thread-25553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:52:37.018 [INFO] [Thread-25553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:52:37.025 [DEBUG] [Thread-25553] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:52:37.025 [DEBUG] [Thread-25553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:52:37.025 [DEBUG] [Thread-25553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:52:37.025 [DEBUG] [Thread-25553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:52:37.026 [DEBUG] [Thread-25553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:52:37.026 [DEBUG] [Thread-25553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:52:37.026 [DEBUG] [Thread-25553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:52:37.026 [DEBUG] [Thread-25553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:52:37.026 [DEBUG] [Thread-25553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:52:37.026 [DEBUG] [Thread-25553] [transport.py] [_log()] client lang: <none>
2026-04-15T20:52:37.026 [DEBUG] [Thread-25553] [transport.py] [_log()] server lang: <none>
2026-04-15T20:52:37.026 [DEBUG] [Thread-25553] [transport.py] [_log()] kex follows: False
2026-04-15T20:52:37.026 [DEBUG] [Thread-25553] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:52:37.026 [DEBUG] [Thread-25553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:52:37.026 [DEBUG] [Thread-25553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:52:37.026 [DEBUG] [Thread-25553] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:52:37.026 [DEBUG] [Thread-25553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:52:37.026 [DEBUG] [Thread-25553] [transport.py] [_log()] Compression: none
2026-04-15T20:52:37.027 [DEBUG] [Thread-25553] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:52:37.082 [DEBUG] [Thread-25553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:52:37.083 [DEBUG] [Thread-25553] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:52:37.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:52:37.083 [DEBUG] [Thread-25553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:52:37.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:52:37.139 [DEBUG] [Thread-25553] [transport.py] [_log()] userauth is OK
2026-04-15T20:52:37.140 [DEBUG] [Thread-25553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:52:37.140 [DEBUG] [Thread-25553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:52:37.140 [DEBUG] [Thread-25553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:52:37.140 [DEBUG] [Thread-25553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:52:37.164 [INFO] [Thread-25553] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:52:37.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:52:37.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:52:37.990 [DEBUG] [Thread-25553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:52:37.990 [DEBUG] [Thread-25553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:52:38.040 [DEBUG] [Thread-25553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:52:38.040 [DEBUG] [Thread-25553] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:52:38.049 [DEBUG] [Thread-25553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:52:38.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:52:38.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')
2026-04-15T20:52:38.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
2026-04-15T20:52:38.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:52:38.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:52:38.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:52:38.084 [DEBUG] [Thread-25553] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:52:41.429 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:52:41.430 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:52:50.104 [DEBUG] [Thread-25555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:53:05.147 [DEBUG] [Thread-25556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:53:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:53:08.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:53:08.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
2026-04-15T20:53:09.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 52, 50), 3.79807, 77.1327, 0.0, 9.21168, 9.54976, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:53:09.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:52:50
2026-04-15T20:53:09.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:53:10.237 [DEBUG] [Thread-25557] [transport.py] [_log()] starting thread (client mode): 0xee993af0
2026-04-15T20:53:10.237 [DEBUG] [Thread-25557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:53:10.257 [DEBUG] [Thread-25557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:53:10.257 [INFO] [Thread-25557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:53:10.260 [DEBUG] [Thread-25557] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:53:10.260 [DEBUG] [Thread-25557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:53:10.261 [DEBUG] [Thread-25557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:53:10.261 [DEBUG] [Thread-25557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:53:10.261 [DEBUG] [Thread-25557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:53:10.261 [DEBUG] [Thread-25557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:53:10.261 [DEBUG] [Thread-25557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:53:10.261 [DEBUG] [Thread-25557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:53:10.261 [DEBUG] [Thread-25557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:53:10.261 [DEBUG] [Thread-25557] [transport.py] [_log()] client lang: <none>
2026-04-15T20:53:10.261 [DEBUG] [Thread-25557] [transport.py] [_log()] server lang: <none>
2026-04-15T20:53:10.261 [DEBUG] [Thread-25557] [transport.py] [_log()] kex follows: False
2026-04-15T20:53:10.261 [DEBUG] [Thread-25557] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:53:10.262 [DEBUG] [Thread-25557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:53:10.262 [DEBUG] [Thread-25557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:53:10.262 [DEBUG] [Thread-25557] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:53:10.262 [DEBUG] [Thread-25557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:53:10.262 [DEBUG] [Thread-25557] [transport.py] [_log()] Compression: none
2026-04-15T20:53:10.262 [DEBUG] [Thread-25557] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:53:10.280 [DEBUG] [Thread-25557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:53:10.280 [DEBUG] [Thread-25557] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:53:10.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:53:10.281 [DEBUG] [Thread-25557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:53:10.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:53:10.282 [DEBUG] [Thread-25557] [transport.py] [_log()] userauth is OK
2026-04-15T20:53:10.283 [DEBUG] [Thread-25557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:53:10.283 [DEBUG] [Thread-25557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:53:10.283 [DEBUG] [Thread-25557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:53:10.283 [DEBUG] [Thread-25557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:53:10.308 [INFO] [Thread-25557] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:53:10.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:53:11.141 [DEBUG] [Thread-25557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:53:11.141 [DEBUG] [Thread-25557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:53:11.142 [DEBUG] [Thread-25557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:53:11.182 [DEBUG] [Thread-25557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:53:11.182 [DEBUG] [Thread-25557] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:53:11.185 [DEBUG] [Thread-25557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:53:11.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:53:11.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:53:11.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:53:11.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:53:11.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:53:11.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:53:11.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:53:11.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:53:11.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:53:11.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.786590 -999.00   +9.70   7.74     79   +6.30 1 1 1 1 1     0    0 3.12 -6.02 ZNESW 7.3 7.7 291.6 9.8 10.2 -24.7 10.1 -23.4 9.8 -21.3 10.1 -23.3
2026-04-15T20:53:11.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:53:11.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:53:11.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.786590
2026-04-15T20:53:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:53:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:53:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:53:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:53:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:53:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:52:50', tmtdew=3.79807, humidity=77.1327, cloud=0.0, wind=9.21168, temperature=9.54976, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:52:51', seeing=1.31, atlas_timestamp='2026-04-15T18:52:41.376', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0782500000000006, -0.021249999999998437, -0.0702499999999997, -0.08750000000000036, -0.03550000000000075, -0.008749999999999147, -0.04800000000000004, -0.019249999999999545, -0.0015000000000000568, -0.01950000000000074, -0.05525000000000091, -0.013999999999999346, 0.009499999999999176, -0.012249999999999872, -0.011000000000001009, 0.0019999999999988916, 0.028249999999999886, 0.027499999999999858, -0.028499999999999304, -0.013750000000001705, 0.005999999999998451, 0.026749999999998053, -0.051249999999999574, -0.008749999999999147, 0.027999999999998693, -0.0009999999999994458, -0.03324999999999889, -0.04849999999999888, -0.01699999999999946, -0.028999999999999915, 0.010500000000000398, 0.08200000000000074, 0.006249999999997868], zp_timestamp='2026-04-15T18:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:53:11.209 [DEBUG] [Thread-25557] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:53:11.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:53:11.465 [DEBUG] [Thread-25560] [transport.py] [_log()] starting thread (client mode): 0xf1364df0
2026-04-15T20:53:11.466 [DEBUG] [Thread-25560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:53:11.480 [DEBUG] [Thread-25560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:53:11.480 [INFO] [Thread-25560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:53:11.488 [DEBUG] [Thread-25560] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:53:11.488 [DEBUG] [Thread-25560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:53:11.488 [DEBUG] [Thread-25560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:53:11.488 [DEBUG] [Thread-25560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:53:11.488 [DEBUG] [Thread-25560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:53:11.488 [DEBUG] [Thread-25560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:53:11.488 [DEBUG] [Thread-25560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:53:11.488 [DEBUG] [Thread-25560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:53:11.489 [DEBUG] [Thread-25560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:53:11.489 [DEBUG] [Thread-25560] [transport.py] [_log()] client lang: <none>
2026-04-15T20:53:11.489 [DEBUG] [Thread-25560] [transport.py] [_log()] server lang: <none>
2026-04-15T20:53:11.489 [DEBUG] [Thread-25560] [transport.py] [_log()] kex follows: False
2026-04-15T20:53:11.489 [DEBUG] [Thread-25560] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:53:11.489 [DEBUG] [Thread-25560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:53:11.489 [DEBUG] [Thread-25560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:53:11.489 [DEBUG] [Thread-25560] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:53:11.489 [DEBUG] [Thread-25560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:53:11.489 [DEBUG] [Thread-25560] [transport.py] [_log()] Compression: none
2026-04-15T20:53:11.489 [DEBUG] [Thread-25560] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:53:11.547 [DEBUG] [Thread-25560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:53:11.547 [DEBUG] [Thread-25560] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:53:11.548 [DEBUG] [Thread-25560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:53:11.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:53:11.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:53:11.604 [DEBUG] [Thread-25560] [transport.py] [_log()] userauth is OK
2026-04-15T20:53:11.604 [DEBUG] [Thread-25560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:53:11.604 [DEBUG] [Thread-25560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:53:11.604 [DEBUG] [Thread-25560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:53:11.604 [DEBUG] [Thread-25560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:53:11.629 [INFO] [Thread-25560] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:53:11.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:53:11.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:53:11.827 [DEBUG] [Thread-25562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:53:12.440 [DEBUG] [Thread-25560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:53:12.440 [DEBUG] [Thread-25560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:53:12.488 [DEBUG] [Thread-25560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:53:12.488 [DEBUG] [Thread-25560] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:53:12.500 [DEBUG] [Thread-25560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:53:12.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:53:12.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')
2026-04-15T20:53:12.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') -> 00000000
2026-04-15T20:53:12.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:53:12.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:53:12.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:53:12.547 [DEBUG] [Thread-25560] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:53:20.173 [DEBUG] [Thread-25563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:53:35.223 [DEBUG] [Thread-25564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:53:41.630 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:53:41.631 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:53:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:53:42.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:53:42.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
2026-04-15T20:53:43.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 53, 26), 3.94019, 76.6162, 0.0, 8.1, 9.54154, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:53:43.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:53:26
2026-04-15T20:53:44.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:53:44.741 [DEBUG] [Thread-25565] [transport.py] [_log()] starting thread (client mode): 0xf1364af0
2026-04-15T20:53:44.742 [DEBUG] [Thread-25565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:53:44.762 [DEBUG] [Thread-25565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:53:44.762 [INFO] [Thread-25565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:53:44.765 [DEBUG] [Thread-25565] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:53:44.765 [DEBUG] [Thread-25565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:53:44.765 [DEBUG] [Thread-25565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:53:44.765 [DEBUG] [Thread-25565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:53:44.765 [DEBUG] [Thread-25565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:53:44.765 [DEBUG] [Thread-25565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:53:44.765 [DEBUG] [Thread-25565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:53:44.765 [DEBUG] [Thread-25565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:53:44.765 [DEBUG] [Thread-25565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:53:44.765 [DEBUG] [Thread-25565] [transport.py] [_log()] client lang: <none>
2026-04-15T20:53:44.765 [DEBUG] [Thread-25565] [transport.py] [_log()] server lang: <none>
2026-04-15T20:53:44.766 [DEBUG] [Thread-25565] [transport.py] [_log()] kex follows: False
2026-04-15T20:53:44.766 [DEBUG] [Thread-25565] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:53:44.766 [DEBUG] [Thread-25565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:53:44.766 [DEBUG] [Thread-25565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:53:44.766 [DEBUG] [Thread-25565] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:53:44.766 [DEBUG] [Thread-25565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:53:44.766 [DEBUG] [Thread-25565] [transport.py] [_log()] Compression: none
2026-04-15T20:53:44.766 [DEBUG] [Thread-25565] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:53:44.783 [DEBUG] [Thread-25565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:53:44.784 [DEBUG] [Thread-25565] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:53:44.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:53:44.784 [DEBUG] [Thread-25565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:53:44.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:53:44.786 [DEBUG] [Thread-25565] [transport.py] [_log()] userauth is OK
2026-04-15T20:53:44.786 [DEBUG] [Thread-25565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:53:44.786 [DEBUG] [Thread-25565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:53:44.786 [DEBUG] [Thread-25565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:53:44.786 [DEBUG] [Thread-25565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:53:44.805 [INFO] [Thread-25565] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:53:44.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:53:45.592 [DEBUG] [Thread-25565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:53:45.593 [DEBUG] [Thread-25565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:53:45.593 [DEBUG] [Thread-25565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:53:45.633 [DEBUG] [Thread-25565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:53:45.633 [DEBUG] [Thread-25565] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:53:45.636 [DEBUG] [Thread-25565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:53:45.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:53:45.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:53:45.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:53:45.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:53:45.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:53:45.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:53:45.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:53:45.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:53:45.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:53:45.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.786937 -999.00   +9.60   5.72     79   +6.30 1 1 1 1 1     0    0 3.17 -5.25 ZNESW 5.9 5.7 299.4 8.2 10.2 -24.7 10.1 -23.3 9.8 -21.3 10.1 -23.4
2026-04-15T20:53:45.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:53:45.662 [DEBUG] [Thread-25565] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:53:45.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:53:45.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.786937
2026-04-15T20:53:45.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:53:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:53:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:53:45.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:53:45.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:53:45.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:53:26', tmtdew=3.94019, humidity=76.6162, cloud=0.0, wind=8.1, temperature=9.54154, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:53:26', seeing=1.38, atlas_timestamp='2026-04-15T18:53:11.357', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0782500000000006, -0.021249999999998437, -0.0702499999999997, -0.08750000000000036, -0.03550000000000075, -0.008749999999999147, -0.04800000000000004, -0.019249999999999545, -0.0015000000000000568, -0.01950000000000074, -0.05525000000000091, -0.013999999999999346, 0.009499999999999176, -0.012249999999999872, -0.011000000000001009, 0.0019999999999988916, 0.028249999999999886, 0.027499999999999858, -0.028499999999999304, -0.013750000000001705, 0.005999999999998451, 0.026749999999998053, -0.051249999999999574, -0.008749999999999147, 0.027999999999998693, -0.0009999999999994458, -0.03324999999999889, -0.04849999999999888, -0.01699999999999946, -0.028999999999999915, 0.010500000000000398, 0.08200000000000074, 0.006249999999997868], zp_timestamp='2026-04-15T18:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:53:45.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:53:45.921 [DEBUG] [Thread-25568] [transport.py] [_log()] starting thread (client mode): 0xf13e3670
2026-04-15T20:53:45.921 [DEBUG] [Thread-25568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:53:45.935 [DEBUG] [Thread-25568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:53:45.935 [INFO] [Thread-25568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:53:45.943 [DEBUG] [Thread-25568] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:53:45.943 [DEBUG] [Thread-25568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:53:45.943 [DEBUG] [Thread-25568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:53:45.943 [DEBUG] [Thread-25568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:53:45.943 [DEBUG] [Thread-25568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:53:45.943 [DEBUG] [Thread-25568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:53:45.943 [DEBUG] [Thread-25568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:53:45.943 [DEBUG] [Thread-25568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:53:45.943 [DEBUG] [Thread-25568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:53:45.944 [DEBUG] [Thread-25568] [transport.py] [_log()] client lang: <none>
2026-04-15T20:53:45.944 [DEBUG] [Thread-25568] [transport.py] [_log()] server lang: <none>
2026-04-15T20:53:45.944 [DEBUG] [Thread-25568] [transport.py] [_log()] kex follows: False
2026-04-15T20:53:45.944 [DEBUG] [Thread-25568] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:53:45.944 [DEBUG] [Thread-25568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:53:45.944 [DEBUG] [Thread-25568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:53:45.944 [DEBUG] [Thread-25568] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:53:45.944 [DEBUG] [Thread-25568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:53:45.944 [DEBUG] [Thread-25568] [transport.py] [_log()] Compression: none
2026-04-15T20:53:45.944 [DEBUG] [Thread-25568] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:53:45.999 [DEBUG] [Thread-25568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:53:45.999 [DEBUG] [Thread-25568] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:53:46.000 [DEBUG] [Thread-25568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:53:46.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:53:46.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:53:46.060 [DEBUG] [Thread-25568] [transport.py] [_log()] userauth is OK
2026-04-15T20:53:46.060 [DEBUG] [Thread-25568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:53:46.060 [DEBUG] [Thread-25568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:53:46.060 [DEBUG] [Thread-25568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:53:46.061 [DEBUG] [Thread-25568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:53:46.085 [INFO] [Thread-25568] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:53:46.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:53:46.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:53:46.910 [DEBUG] [Thread-25568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:53:46.910 [DEBUG] [Thread-25568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:53:46.958 [DEBUG] [Thread-25568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:53:46.958 [DEBUG] [Thread-25568] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:53:46.967 [DEBUG] [Thread-25568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:53:46.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:53:46.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')
2026-04-15T20:53: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') -> 00000000
2026-04-15T20:53:46.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:53:46.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:53:46.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:53:47.004 [DEBUG] [Thread-25568] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:53:50.253 [DEBUG] [Thread-25570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:54:05.296 [DEBUG] [Thread-25571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:54:11.971 [DEBUG] [Thread-25572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:54:16.243 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:54:17.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:54:17.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:54:17.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
2026-04-15T20:54:18.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 54, 1), 3.93351, 76.6494, 0.0, 7.99416, 9.52495, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:54:18.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:54:01
2026-04-15T20:54:18.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:54:19.131 [DEBUG] [Thread-25573] [transport.py] [_log()] starting thread (client mode): 0xf1367f70
2026-04-15T20:54:19.131 [DEBUG] [Thread-25573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:54:19.152 [DEBUG] [Thread-25573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:54:19.152 [INFO] [Thread-25573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:54:19.155 [DEBUG] [Thread-25573] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:54:19.155 [DEBUG] [Thread-25573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:54:19.155 [DEBUG] [Thread-25573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:54:19.155 [DEBUG] [Thread-25573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:54:19.155 [DEBUG] [Thread-25573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:54:19.156 [DEBUG] [Thread-25573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:54:19.156 [DEBUG] [Thread-25573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:54:19.156 [DEBUG] [Thread-25573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:54:19.156 [DEBUG] [Thread-25573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:54:19.156 [DEBUG] [Thread-25573] [transport.py] [_log()] client lang: <none>
2026-04-15T20:54:19.156 [DEBUG] [Thread-25573] [transport.py] [_log()] server lang: <none>
2026-04-15T20:54:19.156 [DEBUG] [Thread-25573] [transport.py] [_log()] kex follows: False
2026-04-15T20:54:19.156 [DEBUG] [Thread-25573] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:54:19.156 [DEBUG] [Thread-25573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:54:19.156 [DEBUG] [Thread-25573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:54:19.156 [DEBUG] [Thread-25573] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:54:19.156 [DEBUG] [Thread-25573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:54:19.156 [DEBUG] [Thread-25573] [transport.py] [_log()] Compression: none
2026-04-15T20:54:19.157 [DEBUG] [Thread-25573] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:54:19.173 [DEBUG] [Thread-25573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:54:19.174 [DEBUG] [Thread-25573] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:54:19.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:54:19.174 [DEBUG] [Thread-25573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:54:19.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:54:19.175 [DEBUG] [Thread-25573] [transport.py] [_log()] userauth is OK
2026-04-15T20:54:19.175 [DEBUG] [Thread-25573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:54:19.176 [DEBUG] [Thread-25573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:54:19.176 [DEBUG] [Thread-25573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:54:19.176 [DEBUG] [Thread-25573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:54:19.199 [INFO] [Thread-25573] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:54:19.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:54:19.515 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:54:19.991 [DEBUG] [Thread-25573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:54:19.991 [DEBUG] [Thread-25573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:54:19.992 [DEBUG] [Thread-25573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:54:20.032 [DEBUG] [Thread-25573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:54:20.032 [DEBUG] [Thread-25573] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:54:20.035 [DEBUG] [Thread-25573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:54:20.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:54:20.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:54:20.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:54:20.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:54:20.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:54:20.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:54:20.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:54:20.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:54:20.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:54:20.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.787284 -999.00   +9.50   7.68     79   +6.20 1 1 1 1 1     0    0 3.18 -4.49 ZNESW 7.6 7.7 295.2 8.6 10.2 -24.6 10.1 -23.4 9.8 -21.4 10.1 -23.4
2026-04-15T20:54:20.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:54:20.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:54:20.058 [DEBUG] [Thread-25573] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:54:20.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.787284
2026-04-15T20:54:20.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:54:20.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:54:20.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:54:20.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:54:20.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:54:20.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:54:01', tmtdew=3.93351, humidity=76.6494, cloud=0.0, wind=7.99416, temperature=9.52495, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:54:02', seeing=1.23, atlas_timestamp='2026-04-15T18:53:41.338', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0782500000000006, -0.021249999999998437, -0.0702499999999997, -0.08750000000000036, -0.03550000000000075, -0.008749999999999147, -0.04800000000000004, -0.019249999999999545, -0.0015000000000000568, -0.01950000000000074, -0.05525000000000091, -0.013999999999999346, 0.009499999999999176, -0.012249999999999872, -0.011000000000001009, 0.0019999999999988916, 0.028249999999999886, 0.027499999999999858, -0.028499999999999304, -0.013750000000001705, 0.005999999999998451, 0.026749999999998053, -0.051249999999999574, -0.008749999999999147, 0.027999999999998693, -0.0009999999999994458, -0.03324999999999889, -0.04849999999999888, -0.01699999999999946, -0.028999999999999915, 0.010500000000000398, 0.08200000000000074, 0.006249999999997868], zp_timestamp='2026-04-15T18:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:54:20.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:54:20.320 [DEBUG] [Thread-25576] [transport.py] [_log()] starting thread (client mode): 0xee9c1e70
2026-04-15T20:54:20.320 [DEBUG] [Thread-25576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:54:20.326 [DEBUG] [Thread-25577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:54:20.335 [DEBUG] [Thread-25576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:54:20.335 [INFO] [Thread-25576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:54:20.342 [DEBUG] [Thread-25576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:54:20.342 [DEBUG] [Thread-25576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:54:20.342 [DEBUG] [Thread-25576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:54:20.342 [DEBUG] [Thread-25576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:54:20.342 [DEBUG] [Thread-25576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:54:20.342 [DEBUG] [Thread-25576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:54:20.342 [DEBUG] [Thread-25576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:54:20.342 [DEBUG] [Thread-25576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:54:20.342 [DEBUG] [Thread-25576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:54:20.342 [DEBUG] [Thread-25576] [transport.py] [_log()] client lang: <none>
2026-04-15T20:54:20.342 [DEBUG] [Thread-25576] [transport.py] [_log()] server lang: <none>
2026-04-15T20:54:20.342 [DEBUG] [Thread-25576] [transport.py] [_log()] kex follows: False
2026-04-15T20:54:20.342 [DEBUG] [Thread-25576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:54:20.343 [DEBUG] [Thread-25576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:54:20.343 [DEBUG] [Thread-25576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:54:20.343 [DEBUG] [Thread-25576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:54:20.343 [DEBUG] [Thread-25576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:54:20.343 [DEBUG] [Thread-25576] [transport.py] [_log()] Compression: none
2026-04-15T20:54:20.343 [DEBUG] [Thread-25576] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:54:20.399 [DEBUG] [Thread-25576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:54:20.400 [DEBUG] [Thread-25576] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:54:20.400 [DEBUG] [Thread-25576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:54:20.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:54:20.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:54:20.456 [DEBUG] [Thread-25576] [transport.py] [_log()] userauth is OK
2026-04-15T20:54:20.456 [DEBUG] [Thread-25576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:54:20.457 [DEBUG] [Thread-25576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:54:20.457 [DEBUG] [Thread-25576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:54:20.457 [DEBUG] [Thread-25576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:54:20.482 [INFO] [Thread-25576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:54:20.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:54:20.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:54:21.273 [DEBUG] [Thread-25576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:54:21.273 [DEBUG] [Thread-25576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:54:21.321 [DEBUG] [Thread-25576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:54:21.321 [DEBUG] [Thread-25576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:54:21.330 [DEBUG] [Thread-25576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:54:21.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:54:21.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')
2026-04-15T20:54:21.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
2026-04-15T20:54:21.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:54:21.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:54:21.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:54:21.366 [DEBUG] [Thread-25576] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:54:24.592 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:54:29.967 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:54:35.366 [DEBUG] [Thread-25579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:54:41.844 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:54:41.846 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:54:49.455 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:54:50.394 [DEBUG] [Thread-25580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:54:51.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:54:51.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:54:51.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
2026-04-15T20:54:52.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 54, 37), 3.77846, 77.2324, 0.0, 8.61192, 9.51672, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:54:52.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:54:37
2026-04-15T20:54:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:54:53.489 [DEBUG] [Thread-25581] [transport.py] [_log()] starting thread (client mode): 0xf13c8730
2026-04-15T20:54:53.490 [DEBUG] [Thread-25581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:54:53.510 [DEBUG] [Thread-25581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:54:53.510 [INFO] [Thread-25581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:54:53.513 [DEBUG] [Thread-25581] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:54:53.513 [DEBUG] [Thread-25581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:54:53.513 [DEBUG] [Thread-25581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:54:53.513 [DEBUG] [Thread-25581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:54:53.513 [DEBUG] [Thread-25581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:54:53.513 [DEBUG] [Thread-25581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:54:53.513 [DEBUG] [Thread-25581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:54:53.513 [DEBUG] [Thread-25581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:54:53.513 [DEBUG] [Thread-25581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:54:53.513 [DEBUG] [Thread-25581] [transport.py] [_log()] client lang: <none>
2026-04-15T20:54:53.514 [DEBUG] [Thread-25581] [transport.py] [_log()] server lang: <none>
2026-04-15T20:54:53.514 [DEBUG] [Thread-25581] [transport.py] [_log()] kex follows: False
2026-04-15T20:54:53.514 [DEBUG] [Thread-25581] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:54:53.514 [DEBUG] [Thread-25581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:54:53.514 [DEBUG] [Thread-25581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:54:53.514 [DEBUG] [Thread-25581] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:54:53.514 [DEBUG] [Thread-25581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:54:53.514 [DEBUG] [Thread-25581] [transport.py] [_log()] Compression: none
2026-04-15T20:54:53.514 [DEBUG] [Thread-25581] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:54:53.530 [DEBUG] [Thread-25581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:54:53.530 [DEBUG] [Thread-25581] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:54:53.531 [DEBUG] [Thread-25581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:54:53.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:54:53.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:54:53.532 [DEBUG] [Thread-25581] [transport.py] [_log()] userauth is OK
2026-04-15T20:54:53.532 [DEBUG] [Thread-25581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:54:53.532 [DEBUG] [Thread-25581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:54:53.532 [DEBUG] [Thread-25581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:54:53.532 [DEBUG] [Thread-25581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:54:53.550 [INFO] [Thread-25581] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:54:53.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:54:53.915 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:54:54.296 [DEBUG] [Thread-25581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:54:54.296 [DEBUG] [Thread-25581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:54:54.297 [DEBUG] [Thread-25581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:54:54.337 [DEBUG] [Thread-25581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:54:54.337 [DEBUG] [Thread-25581] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:54:54.340 [DEBUG] [Thread-25581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:54:54.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:54:54.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:54:54.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:54:54.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:54:54.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:54:54.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:54:54.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:54:54.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:54:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:54:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.787631 -999.00   +9.60   7.27     79   +6.30 1 1 1 1 1     0    0 3.22 -4.10 ZNESW 7.7 7.3 294.0 8.7 10.2 -24.6 10.1 -23.4 9.8 -21.4 10.1 -23.4
2026-04-15T20:54:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:54:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:54:54.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.787631
2026-04-15T20:54:54.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:54:54.365 [DEBUG] [Thread-25581] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:54:54.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:54:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:54:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:54:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:54:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:54:37', tmtdew=3.77846, humidity=77.2324, cloud=0.0, wind=8.61192, temperature=9.51672, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:54:37', seeing=1.72, atlas_timestamp='2026-04-15T18:54:11.318', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0782500000000006, -0.021249999999998437, -0.0702499999999997, -0.08750000000000036, -0.03550000000000075, -0.008749999999999147, -0.04800000000000004, -0.019249999999999545, -0.0015000000000000568, -0.01950000000000074, -0.05525000000000091, -0.013999999999999346, 0.009499999999999176, -0.012249999999999872, -0.011000000000001009, 0.0019999999999988916, 0.028249999999999886, 0.027499999999999858, -0.028499999999999304, -0.013750000000001705, 0.005999999999998451, 0.026749999999998053, -0.051249999999999574, -0.008749999999999147, 0.027999999999998693, -0.0009999999999994458, -0.03324999999999889, -0.04849999999999888, -0.01699999999999946, -0.028999999999999915, 0.010500000000000398, 0.08200000000000074, 0.006249999999997868], zp_timestamp='2026-04-15T18:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:54:54.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:54:54.623 [DEBUG] [Thread-25584] [transport.py] [_log()] starting thread (client mode): 0xee993cd0
2026-04-15T20:54:54.624 [DEBUG] [Thread-25584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:54:54.639 [DEBUG] [Thread-25584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:54:54.639 [INFO] [Thread-25584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:54:54.646 [DEBUG] [Thread-25584] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:54:54.646 [DEBUG] [Thread-25584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:54:54.646 [DEBUG] [Thread-25584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:54:54.646 [DEBUG] [Thread-25584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:54:54.646 [DEBUG] [Thread-25584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:54:54.647 [DEBUG] [Thread-25584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:54:54.647 [DEBUG] [Thread-25584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:54:54.647 [DEBUG] [Thread-25584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:54:54.647 [DEBUG] [Thread-25584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:54:54.647 [DEBUG] [Thread-25584] [transport.py] [_log()] client lang: <none>
2026-04-15T20:54:54.647 [DEBUG] [Thread-25584] [transport.py] [_log()] server lang: <none>
2026-04-15T20:54:54.647 [DEBUG] [Thread-25584] [transport.py] [_log()] kex follows: False
2026-04-15T20:54:54.647 [DEBUG] [Thread-25584] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:54:54.647 [DEBUG] [Thread-25584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:54:54.647 [DEBUG] [Thread-25584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:54:54.647 [DEBUG] [Thread-25584] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:54:54.648 [DEBUG] [Thread-25584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:54:54.648 [DEBUG] [Thread-25584] [transport.py] [_log()] Compression: none
2026-04-15T20:54:54.648 [DEBUG] [Thread-25584] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:54:54.706 [DEBUG] [Thread-25584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:54:54.706 [DEBUG] [Thread-25584] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:54:54.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:54:54.707 [DEBUG] [Thread-25584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:54:54.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:54:54.764 [DEBUG] [Thread-25584] [transport.py] [_log()] userauth is OK
2026-04-15T20:54:54.765 [DEBUG] [Thread-25584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:54:54.765 [DEBUG] [Thread-25584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:54:54.765 [DEBUG] [Thread-25584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:54:54.765 [DEBUG] [Thread-25584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:54:54.790 [INFO] [Thread-25584] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:54:54.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:54:54.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:54:55.592 [DEBUG] [Thread-25584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:54:55.593 [DEBUG] [Thread-25584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:54:55.640 [DEBUG] [Thread-25584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:54:55.640 [DEBUG] [Thread-25584] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:54:55.649 [DEBUG] [Thread-25584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:54:55.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:54:55.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')
2026-04-15T20:54:55.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
2026-04-15T20:54:55.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:54:55.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:54:55.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:54:55.685 [DEBUG] [Thread-25584] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:55:05.426 [DEBUG] [Thread-25586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:55:12.120 [DEBUG] [Thread-25587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:55:13.342 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:55:17.755 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:55:20.468 [DEBUG] [Thread-25588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:55:24.644 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:55:25.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:55:25.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:55:25.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
2026-04-15T20:55:26.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 55, 12), 3.98804, 76.1329, 0.0, 7.94124, 9.57477, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:55:26.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:55:12
2026-04-15T20:55:27.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:55:27.755 [DEBUG] [Thread-25589] [transport.py] [_log()] starting thread (client mode): 0xf13355a0
2026-04-15T20:55:27.755 [DEBUG] [Thread-25589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:55:27.775 [DEBUG] [Thread-25589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:55:27.775 [INFO] [Thread-25589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:55:27.778 [DEBUG] [Thread-25589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:55:27.778 [DEBUG] [Thread-25589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:55:27.778 [DEBUG] [Thread-25589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:55:27.778 [DEBUG] [Thread-25589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:55:27.778 [DEBUG] [Thread-25589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:55:27.778 [DEBUG] [Thread-25589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:55:27.778 [DEBUG] [Thread-25589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:55:27.779 [DEBUG] [Thread-25589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:55:27.779 [DEBUG] [Thread-25589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:55:27.779 [DEBUG] [Thread-25589] [transport.py] [_log()] client lang: <none>
2026-04-15T20:55:27.779 [DEBUG] [Thread-25589] [transport.py] [_log()] server lang: <none>
2026-04-15T20:55:27.779 [DEBUG] [Thread-25589] [transport.py] [_log()] kex follows: False
2026-04-15T20:55:27.779 [DEBUG] [Thread-25589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:55:27.779 [DEBUG] [Thread-25589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:55:27.779 [DEBUG] [Thread-25589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:55:27.779 [DEBUG] [Thread-25589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:55:27.779 [DEBUG] [Thread-25589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:55:27.779 [DEBUG] [Thread-25589] [transport.py] [_log()] Compression: none
2026-04-15T20:55:27.779 [DEBUG] [Thread-25589] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:55:27.793 [DEBUG] [Thread-25589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:55:27.794 [DEBUG] [Thread-25589] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:55:27.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:55:27.794 [DEBUG] [Thread-25589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:55:27.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:55:27.795 [DEBUG] [Thread-25589] [transport.py] [_log()] userauth is OK
2026-04-15T20:55:27.795 [DEBUG] [Thread-25589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:55:27.795 [DEBUG] [Thread-25589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:55:27.795 [DEBUG] [Thread-25589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:55:27.795 [DEBUG] [Thread-25589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:55:27.814 [INFO] [Thread-25589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:55:27.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:55:28.599 [DEBUG] [Thread-25589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:55:28.600 [DEBUG] [Thread-25589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:55:28.600 [DEBUG] [Thread-25589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:55:28.640 [DEBUG] [Thread-25589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:55:28.640 [DEBUG] [Thread-25589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:55:28.643 [DEBUG] [Thread-25589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:55:28.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:55:28.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:55:28.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:55:28.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:55:28.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:55:28.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:55:28.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:55:28.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:55:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:55:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.787979 -999.00   +9.60   6.30     79   +6.30 1 1 1 1 1     0    0 3.22 -3.77 ZNESW 6.5 6.3 290.6 8.2 10.2 -24.6 10.1 -23.3 9.8 -21.3 10.1 -23.4
2026-04-15T20:55:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:55:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:55:28.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.787979
2026-04-15T20:55:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:55:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:55:28.664 [DEBUG] [Thread-25589] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:55:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:55:28.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:55:28.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:55:28.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:55:12', tmtdew=3.98804, humidity=76.1329, cloud=0.0, wind=7.94124, temperature=9.57477, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:55:12', seeing=1.72, atlas_timestamp='2026-04-15T18:54:41.386', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0782500000000006, -0.021249999999998437, -0.0702499999999997, -0.08750000000000036, -0.03550000000000075, -0.008749999999999147, -0.04800000000000004, -0.019249999999999545, -0.0015000000000000568, -0.01950000000000074, -0.05525000000000091, -0.013999999999999346, 0.009499999999999176, -0.012249999999999872, -0.011000000000001009, 0.0019999999999988916, 0.028249999999999886, 0.027499999999999858, -0.028499999999999304, -0.013750000000001705, 0.005999999999998451, 0.026749999999998053, -0.051249999999999574, -0.008749999999999147, 0.027999999999998693, -0.0009999999999994458, -0.03324999999999889, -0.04849999999999888, -0.01699999999999946, -0.028999999999999915, 0.010500000000000398, 0.08200000000000074, 0.006249999999997868], zp_timestamp='2026-04-15T18:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:55:28.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:55:28.918 [DEBUG] [Thread-25592] [transport.py] [_log()] starting thread (client mode): 0xee904dc0
2026-04-15T20:55:28.918 [DEBUG] [Thread-25592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:55:28.933 [DEBUG] [Thread-25592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:55:28.933 [INFO] [Thread-25592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:55:28.940 [DEBUG] [Thread-25592] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:55:28.941 [DEBUG] [Thread-25592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:55:28.941 [DEBUG] [Thread-25592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:55:28.941 [DEBUG] [Thread-25592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:55:28.941 [DEBUG] [Thread-25592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:55:28.941 [DEBUG] [Thread-25592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:55:28.941 [DEBUG] [Thread-25592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:55:28.941 [DEBUG] [Thread-25592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:55:28.941 [DEBUG] [Thread-25592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:55:28.941 [DEBUG] [Thread-25592] [transport.py] [_log()] client lang: <none>
2026-04-15T20:55:28.941 [DEBUG] [Thread-25592] [transport.py] [_log()] server lang: <none>
2026-04-15T20:55:28.941 [DEBUG] [Thread-25592] [transport.py] [_log()] kex follows: False
2026-04-15T20:55:28.942 [DEBUG] [Thread-25592] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:55:28.942 [DEBUG] [Thread-25592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:55:28.942 [DEBUG] [Thread-25592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:55:28.942 [DEBUG] [Thread-25592] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:55:28.942 [DEBUG] [Thread-25592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:55:28.942 [DEBUG] [Thread-25592] [transport.py] [_log()] Compression: none
2026-04-15T20:55:28.942 [DEBUG] [Thread-25592] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:55:29.000 [DEBUG] [Thread-25592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:55:29.000 [DEBUG] [Thread-25592] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:55:29.000 [DEBUG] [Thread-25592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:55:29.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:55:29.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:55:29.010 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:55:29.058 [DEBUG] [Thread-25592] [transport.py] [_log()] userauth is OK
2026-04-15T20:55:29.058 [DEBUG] [Thread-25592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:55:29.058 [DEBUG] [Thread-25592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:55:29.058 [DEBUG] [Thread-25592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:55:29.058 [DEBUG] [Thread-25592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:55:29.075 [INFO] [Thread-25592] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:55:29.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:55:29.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:55:29.878 [DEBUG] [Thread-25592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:55:29.878 [DEBUG] [Thread-25592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:55:29.926 [DEBUG] [Thread-25592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:55:29.926 [DEBUG] [Thread-25592] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:55:29.935 [DEBUG] [Thread-25592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:55:29.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:55:29.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')
2026-04-15T20:55:29.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') -> 00000000
2026-04-15T20:55:29.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:55:29.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:55:29.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:55:29.972 [DEBUG] [Thread-25592] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:55:35.497 [DEBUG] [Thread-25594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:55:42.048 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:55:42.050 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:55:50.542 [DEBUG] [Thread-25595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:55:59.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:55:59.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:56:00.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
2026-04-15T20:56:01.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 55, 48), 3.75555, 77.3654, 0.0, 8.78832, 9.58327, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:56:01.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:55:48
2026-04-15T20:56:01.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:56:02.099 [DEBUG] [Thread-25596] [transport.py] [_log()] starting thread (client mode): 0xee907bb0
2026-04-15T20:56:02.099 [DEBUG] [Thread-25596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:56:02.119 [DEBUG] [Thread-25596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:56:02.119 [INFO] [Thread-25596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:56:02.121 [DEBUG] [Thread-25596] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:56:02.121 [DEBUG] [Thread-25596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:56:02.121 [DEBUG] [Thread-25596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:56:02.121 [DEBUG] [Thread-25596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:56:02.121 [DEBUG] [Thread-25596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:56:02.121 [DEBUG] [Thread-25596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:56:02.121 [DEBUG] [Thread-25596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:56:02.122 [DEBUG] [Thread-25596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:56:02.122 [DEBUG] [Thread-25596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:56:02.122 [DEBUG] [Thread-25596] [transport.py] [_log()] client lang: <none>
2026-04-15T20:56:02.122 [DEBUG] [Thread-25596] [transport.py] [_log()] server lang: <none>
2026-04-15T20:56:02.122 [DEBUG] [Thread-25596] [transport.py] [_log()] kex follows: False
2026-04-15T20:56:02.122 [DEBUG] [Thread-25596] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:56:02.122 [DEBUG] [Thread-25596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:56:02.122 [DEBUG] [Thread-25596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:56:02.122 [DEBUG] [Thread-25596] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:56:02.122 [DEBUG] [Thread-25596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:56:02.122 [DEBUG] [Thread-25596] [transport.py] [_log()] Compression: none
2026-04-15T20:56:02.123 [DEBUG] [Thread-25596] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:56:02.134 [DEBUG] [Thread-25596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:56:02.134 [DEBUG] [Thread-25596] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:56:02.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:56:02.135 [DEBUG] [Thread-25596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:56:02.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:56:02.176 [DEBUG] [Thread-25596] [transport.py] [_log()] userauth is OK
2026-04-15T20:56:02.177 [DEBUG] [Thread-25596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:56:02.177 [DEBUG] [Thread-25596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:56:02.177 [DEBUG] [Thread-25596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:56:02.177 [DEBUG] [Thread-25596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:56:02.200 [INFO] [Thread-25596] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:56:02.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:56:03.005 [DEBUG] [Thread-25596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:56:03.006 [DEBUG] [Thread-25596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:56:03.006 [DEBUG] [Thread-25596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:56:03.047 [DEBUG] [Thread-25596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:56:03.047 [DEBUG] [Thread-25596] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:56:03.058 [DEBUG] [Thread-25596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:56:03.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:56:03.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:56:03.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:56:03.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:56:03.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:56:03.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:56:03.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:56:03.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:56:03.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:56:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.788673 -999.00   +9.70   7.43     79   +6.30 1 1 1 1 1     0    0 3.22 -2.61 ZNESW 7.3 7.4 295.2 7.9 10.2 -24.6 10.1 -23.4 9.8 -21.3 10.1 -23.5
2026-04-15T20:56:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:56:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:56:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.788673
2026-04-15T20:56:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:56:03.071 [DEBUG] [Thread-25596] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:56:03.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:56:03.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:56:03.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:56:03.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:56:03.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:55:48', tmtdew=3.75555, humidity=77.3654, cloud=0.0, wind=8.78832, temperature=9.58327, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:55:48', seeing=1.85, atlas_timestamp='2026-04-15T18:55:41.347', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.008250000000000313, -0.07474999999999987, -0.046499999999999986, -0.045999999999999375, 0.01425000000000054, -0.016000000000000014, 0.0017500000000012506, 0.0625, 0.0030000000000001137, -0.05874999999999986, -0.002000000000000668, 0.03950000000000031, 0.030249999999998778, 0.0019999999999988916, 0.01699999999999946, 0.030250000000000554, 0.01950000000000074, -0.015000000000000568, 0.018249999999998323, 0.0519999999999996, 0.05174999999999841, -0.04974999999999952, 0.016750000000000043, 0.015499999999999403, -0.028499999999999304, -0.015249999999999986, 0.0235000000000003, 0.013000000000001677, 0.002000000000000668, 0.0600000000000005, 0.09350000000000236, 0.012249999999998096], zp_timestamp='2026-04-15T18:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:56:03.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:56:03.286 [DEBUG] [Thread-25599] [transport.py] [_log()] starting thread (client mode): 0xee904250
2026-04-15T20:56:03.287 [DEBUG] [Thread-25599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:56:03.301 [DEBUG] [Thread-25599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:56:03.301 [INFO] [Thread-25599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:56:03.308 [DEBUG] [Thread-25599] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:56:03.309 [DEBUG] [Thread-25599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:56:03.309 [DEBUG] [Thread-25599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:56:03.309 [DEBUG] [Thread-25599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:56:03.309 [DEBUG] [Thread-25599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:56:03.309 [DEBUG] [Thread-25599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:56:03.309 [DEBUG] [Thread-25599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:56:03.309 [DEBUG] [Thread-25599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:56:03.309 [DEBUG] [Thread-25599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:56:03.309 [DEBUG] [Thread-25599] [transport.py] [_log()] client lang: <none>
2026-04-15T20:56:03.309 [DEBUG] [Thread-25599] [transport.py] [_log()] server lang: <none>
2026-04-15T20:56:03.309 [DEBUG] [Thread-25599] [transport.py] [_log()] kex follows: False
2026-04-15T20:56:03.310 [DEBUG] [Thread-25599] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:56:03.310 [DEBUG] [Thread-25599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:56:03.310 [DEBUG] [Thread-25599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:56:03.310 [DEBUG] [Thread-25599] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:56:03.310 [DEBUG] [Thread-25599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:56:03.310 [DEBUG] [Thread-25599] [transport.py] [_log()] Compression: none
2026-04-15T20:56:03.310 [DEBUG] [Thread-25599] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:56:03.368 [DEBUG] [Thread-25599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:56:03.369 [DEBUG] [Thread-25599] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:56:03.369 [DEBUG] [Thread-25599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:56:03.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:56:03.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:56:03.429 [DEBUG] [Thread-25599] [transport.py] [_log()] userauth is OK
2026-04-15T20:56:03.429 [DEBUG] [Thread-25599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:56:03.429 [DEBUG] [Thread-25599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:56:03.429 [DEBUG] [Thread-25599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:56:03.430 [DEBUG] [Thread-25599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:56:03.454 [INFO] [Thread-25599] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:56:03.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:56:03.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:56:04.282 [DEBUG] [Thread-25599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:56:04.282 [DEBUG] [Thread-25599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:56:04.329 [DEBUG] [Thread-25599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:56:04.330 [DEBUG] [Thread-25599] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:56:04.338 [DEBUG] [Thread-25599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:56:04.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:56:04.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')
2026-04-15T20:56:04.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
2026-04-15T20:56:04.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:56:04.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:56:04.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:56:04.371 [DEBUG] [Thread-25599] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:56:05.573 [DEBUG] [Thread-25601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:56:12.267 [DEBUG] [Thread-25602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:56:20.619 [DEBUG] [Thread-25603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:56:29.733 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:56:32.771 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:56:34.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:56:34.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:56:34.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
2026-04-15T20:56:35.651 [DEBUG] [Thread-25604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:56:35.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 56, 23), 3.97681, 76.1827, 0.0, 7.76484, 9.50846, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:56:35.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:56:23
2026-04-15T20:56:36.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:56:36.512 [DEBUG] [Thread-25605] [transport.py] [_log()] starting thread (client mode): 0xee907a60
2026-04-15T20:56:36.512 [DEBUG] [Thread-25605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:56:36.531 [DEBUG] [Thread-25605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:56:36.531 [INFO] [Thread-25605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:56:36.534 [DEBUG] [Thread-25605] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:56:36.534 [DEBUG] [Thread-25605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:56:36.534 [DEBUG] [Thread-25605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:56:36.535 [DEBUG] [Thread-25605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:56:36.535 [DEBUG] [Thread-25605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:56:36.535 [DEBUG] [Thread-25605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:56:36.535 [DEBUG] [Thread-25605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:56:36.535 [DEBUG] [Thread-25605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:56:36.535 [DEBUG] [Thread-25605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:56:36.535 [DEBUG] [Thread-25605] [transport.py] [_log()] client lang: <none>
2026-04-15T20:56:36.535 [DEBUG] [Thread-25605] [transport.py] [_log()] server lang: <none>
2026-04-15T20:56:36.535 [DEBUG] [Thread-25605] [transport.py] [_log()] kex follows: False
2026-04-15T20:56:36.535 [DEBUG] [Thread-25605] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:56:36.535 [DEBUG] [Thread-25605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:56:36.535 [DEBUG] [Thread-25605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:56:36.536 [DEBUG] [Thread-25605] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:56:36.536 [DEBUG] [Thread-25605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:56:36.536 [DEBUG] [Thread-25605] [transport.py] [_log()] Compression: none
2026-04-15T20:56:36.536 [DEBUG] [Thread-25605] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:56:36.552 [DEBUG] [Thread-25605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:56:36.552 [DEBUG] [Thread-25605] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:56:36.553 [DEBUG] [Thread-25605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:56:36.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:56:36.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:56:36.554 [DEBUG] [Thread-25605] [transport.py] [_log()] userauth is OK
2026-04-15T20:56:36.554 [DEBUG] [Thread-25605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:56:36.554 [DEBUG] [Thread-25605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:56:36.554 [DEBUG] [Thread-25605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:56:36.554 [DEBUG] [Thread-25605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:56:36.588 [INFO] [Thread-25605] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:56:36.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:56:37.398 [DEBUG] [Thread-25605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:56:37.398 [DEBUG] [Thread-25605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:56:37.399 [DEBUG] [Thread-25605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:56:37.439 [DEBUG] [Thread-25605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:56:37.439 [DEBUG] [Thread-25605] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:56:37.442 [DEBUG] [Thread-25605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:56:37.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:56:37.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:56:37.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:56:37.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:56:37.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:56:37.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:56:37.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:56:37.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:56:37.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:56:37.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.789020 -999.00   +9.70   7.21     79   +6.30 1 1 1 1 1     0    0 3.27 -1.94 ZNESW 7.8 7.2 294.2 8.3 10.2 -24.5 10.1 -23.3 9.8 -21.3 10.1 -23.3
2026-04-15T20:56:37.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:56:37.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:56:37.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.789020
2026-04-15T20:56:37.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:56:37.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:56:37.461 [DEBUG] [Thread-25605] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:56:37.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:56:37.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:56:37.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:56:37.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:56:23', tmtdew=3.97681, humidity=76.1827, cloud=0.0, wind=7.76484, temperature=9.50846, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:56:23', seeing=1.63, atlas_timestamp='2026-04-15T18:56:11.328', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.008250000000000313, -0.07474999999999987, -0.046499999999999986, -0.045999999999999375, 0.01425000000000054, -0.016000000000000014, 0.0017500000000012506, 0.0625, 0.0030000000000001137, -0.05874999999999986, -0.002000000000000668, 0.03950000000000031, 0.030249999999998778, 0.0019999999999988916, 0.01699999999999946, 0.030250000000000554, 0.01950000000000074, -0.015000000000000568, 0.018249999999998323, 0.0519999999999996, 0.05174999999999841, -0.04974999999999952, 0.016750000000000043, 0.015499999999999403, -0.028499999999999304, -0.015249999999999986, 0.0235000000000003, 0.013000000000001677, 0.002000000000000668, 0.0600000000000005, 0.09350000000000236, 0.012249999999998096], zp_timestamp='2026-04-15T18:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:56:37.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:56:37.723 [DEBUG] [Thread-25608] [transport.py] [_log()] starting thread (client mode): 0xee905570
2026-04-15T20:56:37.723 [DEBUG] [Thread-25608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:56:37.737 [DEBUG] [Thread-25608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:56:37.737 [INFO] [Thread-25608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:56:37.744 [DEBUG] [Thread-25608] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:56:37.744 [DEBUG] [Thread-25608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:56:37.745 [DEBUG] [Thread-25608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:56:37.745 [DEBUG] [Thread-25608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:56:37.745 [DEBUG] [Thread-25608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:56:37.745 [DEBUG] [Thread-25608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:56:37.745 [DEBUG] [Thread-25608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:56:37.745 [DEBUG] [Thread-25608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:56:37.745 [DEBUG] [Thread-25608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:56:37.745 [DEBUG] [Thread-25608] [transport.py] [_log()] client lang: <none>
2026-04-15T20:56:37.745 [DEBUG] [Thread-25608] [transport.py] [_log()] server lang: <none>
2026-04-15T20:56:37.745 [DEBUG] [Thread-25608] [transport.py] [_log()] kex follows: False
2026-04-15T20:56:37.745 [DEBUG] [Thread-25608] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:56:37.745 [DEBUG] [Thread-25608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:56:37.746 [DEBUG] [Thread-25608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:56:37.746 [DEBUG] [Thread-25608] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:56:37.746 [DEBUG] [Thread-25608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:56:37.746 [DEBUG] [Thread-25608] [transport.py] [_log()] Compression: none
2026-04-15T20:56:37.746 [DEBUG] [Thread-25608] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:56:37.800 [DEBUG] [Thread-25608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:56:37.800 [DEBUG] [Thread-25608] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:56:37.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:56:37.801 [DEBUG] [Thread-25608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:56:37.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:56:37.857 [DEBUG] [Thread-25608] [transport.py] [_log()] userauth is OK
2026-04-15T20:56:37.857 [DEBUG] [Thread-25608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:56:37.857 [DEBUG] [Thread-25608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:56:37.857 [DEBUG] [Thread-25608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:56:37.857 [DEBUG] [Thread-25608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:56:37.885 [INFO] [Thread-25608] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:56:37.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:56:37.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:56:38.686 [DEBUG] [Thread-25608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:56:38.687 [DEBUG] [Thread-25608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:56:38.734 [DEBUG] [Thread-25608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:56:38.734 [DEBUG] [Thread-25608] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:56:38.743 [DEBUG] [Thread-25608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:56:38.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:56:38.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')
2026-04-15T20:56:38.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') -> 00000000
2026-04-15T20:56:38.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:56:38.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:56:38.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:56:38.778 [DEBUG] [Thread-25608] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:56:42.255 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:56:42.257 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:56:50.683 [DEBUG] [Thread-25610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:57:05.728 [DEBUG] [Thread-25611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:57:08.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:57:08.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:57:08.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
2026-04-15T20:57:10.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 56, 59), 3.99327, 76.0997, 0.0, 8.06472, 9.54163, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:57:10.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:56:59
2026-04-15T20:57:10.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:57:11.064 [DEBUG] [Thread-25612] [transport.py] [_log()] starting thread (client mode): 0xee906530
2026-04-15T20:57:11.064 [DEBUG] [Thread-25612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:57:11.083 [DEBUG] [Thread-25612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:57:11.083 [INFO] [Thread-25612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:57:11.086 [DEBUG] [Thread-25612] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:57:11.087 [DEBUG] [Thread-25612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:57:11.087 [DEBUG] [Thread-25612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:57:11.087 [DEBUG] [Thread-25612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:57:11.087 [DEBUG] [Thread-25612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:57:11.087 [DEBUG] [Thread-25612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:57:11.087 [DEBUG] [Thread-25612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:57:11.087 [DEBUG] [Thread-25612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:57:11.087 [DEBUG] [Thread-25612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:57:11.087 [DEBUG] [Thread-25612] [transport.py] [_log()] client lang: <none>
2026-04-15T20:57:11.087 [DEBUG] [Thread-25612] [transport.py] [_log()] server lang: <none>
2026-04-15T20:57:11.087 [DEBUG] [Thread-25612] [transport.py] [_log()] kex follows: False
2026-04-15T20:57:11.088 [DEBUG] [Thread-25612] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:57:11.088 [DEBUG] [Thread-25612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:57:11.088 [DEBUG] [Thread-25612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:57:11.088 [DEBUG] [Thread-25612] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:57:11.088 [DEBUG] [Thread-25612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:57:11.088 [DEBUG] [Thread-25612] [transport.py] [_log()] Compression: none
2026-04-15T20:57:11.088 [DEBUG] [Thread-25612] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:57:11.105 [DEBUG] [Thread-25612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:57:11.106 [DEBUG] [Thread-25612] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:57:11.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:57:11.106 [DEBUG] [Thread-25612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:57:11.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:57:11.107 [DEBUG] [Thread-25612] [transport.py] [_log()] userauth is OK
2026-04-15T20:57:11.107 [DEBUG] [Thread-25612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:57:11.108 [DEBUG] [Thread-25612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:57:11.108 [DEBUG] [Thread-25612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:57:11.108 [DEBUG] [Thread-25612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:57:11.132 [INFO] [Thread-25612] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:57:11.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:57:11.893 [DEBUG] [Thread-25612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:57:11.893 [DEBUG] [Thread-25612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:57:11.894 [DEBUG] [Thread-25612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:57:11.934 [DEBUG] [Thread-25612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:57:11.934 [DEBUG] [Thread-25612] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:57:11.937 [DEBUG] [Thread-25612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:57:11.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:57:11.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:57:11.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:57:11.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:57:11.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:57:11.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:57:11.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:57:11.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:57:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:57:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.789367 -999.00   +9.70   7.75     79   +6.30 1 1 1 1 1     0    0 3.30 -1.23 ZNESW 7.7 7.8 298.8 8.7 10.2 -24.6 10.1 -23.3 9.8 -21.3 10.1 -23.3
2026-04-15T20:57:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:57:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:57:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.789367
2026-04-15T20:57:11.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:57:11.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:57:11.962 [DEBUG] [Thread-25612] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:57:11.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:57:11.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:57:11.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:57:11.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:56:59', tmtdew=3.99327, humidity=76.0997, cloud=0.0, wind=8.06472, temperature=9.54163, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:56:59', seeing=2.55, atlas_timestamp='2026-04-15T18:56:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.008250000000000313, -0.07474999999999987, -0.046499999999999986, -0.045999999999999375, 0.01425000000000054, -0.016000000000000014, 0.0017500000000012506, 0.0625, 0.0030000000000001137, -0.05874999999999986, -0.002000000000000668, 0.03950000000000031, 0.030249999999998778, 0.0019999999999988916, 0.01699999999999946, 0.030250000000000554, 0.01950000000000074, -0.015000000000000568, 0.018249999999998323, 0.0519999999999996, 0.05174999999999841, -0.04974999999999952, 0.016750000000000043, 0.015499999999999403, -0.028499999999999304, -0.015249999999999986, 0.0235000000000003, 0.013000000000001677, 0.002000000000000668, 0.0600000000000005, 0.09350000000000236, 0.012249999999998096], zp_timestamp='2026-04-15T18:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:57:12.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:57:12.217 [DEBUG] [Thread-25615] [transport.py] [_log()] starting thread (client mode): 0xee906a40
2026-04-15T20:57:12.217 [DEBUG] [Thread-25615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:57:12.231 [DEBUG] [Thread-25615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:57:12.231 [INFO] [Thread-25615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:57:12.238 [DEBUG] [Thread-25615] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:57:12.238 [DEBUG] [Thread-25615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:57:12.239 [DEBUG] [Thread-25615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:57:12.239 [DEBUG] [Thread-25615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:57:12.239 [DEBUG] [Thread-25615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:57:12.239 [DEBUG] [Thread-25615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:57:12.239 [DEBUG] [Thread-25615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:57:12.239 [DEBUG] [Thread-25615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:57:12.239 [DEBUG] [Thread-25615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:57:12.239 [DEBUG] [Thread-25615] [transport.py] [_log()] client lang: <none>
2026-04-15T20:57:12.239 [DEBUG] [Thread-25615] [transport.py] [_log()] server lang: <none>
2026-04-15T20:57:12.239 [DEBUG] [Thread-25615] [transport.py] [_log()] kex follows: False
2026-04-15T20:57:12.239 [DEBUG] [Thread-25615] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:57:12.240 [DEBUG] [Thread-25615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:57:12.240 [DEBUG] [Thread-25615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:57:12.240 [DEBUG] [Thread-25615] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:57:12.240 [DEBUG] [Thread-25615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:57:12.240 [DEBUG] [Thread-25615] [transport.py] [_log()] Compression: none
2026-04-15T20:57:12.240 [DEBUG] [Thread-25615] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:57:12.295 [DEBUG] [Thread-25615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:57:12.296 [DEBUG] [Thread-25615] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:57:12.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:57:12.296 [DEBUG] [Thread-25615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:57:12.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:57:12.352 [DEBUG] [Thread-25615] [transport.py] [_log()] userauth is OK
2026-04-15T20:57:12.353 [DEBUG] [Thread-25615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:57:12.353 [DEBUG] [Thread-25615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:57:12.353 [DEBUG] [Thread-25615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:57:12.353 [DEBUG] [Thread-25615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:57:12.370 [INFO] [Thread-25615] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:57:12.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:57:12.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:57:12.412 [DEBUG] [Thread-25617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:57:13.179 [DEBUG] [Thread-25615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:57:13.179 [DEBUG] [Thread-25615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:57:13.227 [DEBUG] [Thread-25615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:57:13.227 [DEBUG] [Thread-25615] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:57:13.236 [DEBUG] [Thread-25615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:57:13.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:57:13.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')
2026-04-15T20:57:13.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
2026-04-15T20:57:13.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:57:13.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:57:13.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:57:13.271 [DEBUG] [Thread-25615] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:57:20.760 [DEBUG] [Thread-25618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:57:35.805 [DEBUG] [Thread-25619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:57:42.473 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:57:42.474 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:57:43.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:57:43.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:57:43.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T20:57:44.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 57, 34), 3.83724, 76.9342, 0.0, 7.87104, 9.61651, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:57:44.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:57:34
2026-04-15T20:57:45.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:57:45.450 [DEBUG] [Thread-25620] [transport.py] [_log()] starting thread (client mode): 0xf1366cb0
2026-04-15T20:57:45.450 [DEBUG] [Thread-25620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:57:45.470 [DEBUG] [Thread-25620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:57:45.470 [INFO] [Thread-25620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:57:45.474 [DEBUG] [Thread-25620] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:57:45.474 [DEBUG] [Thread-25620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:57:45.474 [DEBUG] [Thread-25620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:57:45.474 [DEBUG] [Thread-25620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:57:45.474 [DEBUG] [Thread-25620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:57:45.474 [DEBUG] [Thread-25620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:57:45.474 [DEBUG] [Thread-25620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:57:45.474 [DEBUG] [Thread-25620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:57:45.474 [DEBUG] [Thread-25620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:57:45.474 [DEBUG] [Thread-25620] [transport.py] [_log()] client lang: <none>
2026-04-15T20:57:45.475 [DEBUG] [Thread-25620] [transport.py] [_log()] server lang: <none>
2026-04-15T20:57:45.475 [DEBUG] [Thread-25620] [transport.py] [_log()] kex follows: False
2026-04-15T20:57:45.475 [DEBUG] [Thread-25620] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:57:45.475 [DEBUG] [Thread-25620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:57:45.475 [DEBUG] [Thread-25620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:57:45.475 [DEBUG] [Thread-25620] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:57:45.475 [DEBUG] [Thread-25620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:57:45.475 [DEBUG] [Thread-25620] [transport.py] [_log()] Compression: none
2026-04-15T20:57:45.475 [DEBUG] [Thread-25620] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:57:45.494 [DEBUG] [Thread-25620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:57:45.495 [DEBUG] [Thread-25620] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:57:45.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:57:45.495 [DEBUG] [Thread-25620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:57:45.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:57:45.496 [DEBUG] [Thread-25620] [transport.py] [_log()] userauth is OK
2026-04-15T20:57:45.496 [DEBUG] [Thread-25620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:57:45.497 [DEBUG] [Thread-25620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:57:45.497 [DEBUG] [Thread-25620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:57:45.497 [DEBUG] [Thread-25620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:57:45.521 [INFO] [Thread-25620] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:57:45.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:57:46.303 [DEBUG] [Thread-25620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:57:46.303 [DEBUG] [Thread-25620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:57:46.304 [DEBUG] [Thread-25620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:57:46.344 [DEBUG] [Thread-25620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:57:46.344 [DEBUG] [Thread-25620] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:57:46.346 [DEBUG] [Thread-25620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:57:46.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:57:46.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:57:46.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:57:46.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:57:46.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:57:46.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:57:46.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:57:46.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:57:46.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:57:46.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.789715 -999.00   +9.70   5.55     79   +6.30 1 1 1 1 1     0    0 3.38 -0.09 ZNESW 5.3 5.5 305.4 7.5 10.2 -24.6 10.1 -23.4 9.8 -21.4 10.2 -23.6
2026-04-15T20:57:46.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:57:46.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:57:46.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.789715
2026-04-15T20:57:46.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:57:46.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:57:46.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:57:46.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:57:46.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:57:46.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:57:34', tmtdew=3.83724, humidity=76.9342, cloud=0.0, wind=7.87104, temperature=9.61651, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:57:34', seeing=2.88, atlas_timestamp='2026-04-15T18:57:11.376', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.008250000000000313, -0.07474999999999987, -0.046499999999999986, -0.045999999999999375, 0.01425000000000054, -0.016000000000000014, 0.0017500000000012506, 0.0625, 0.0030000000000001137, -0.05874999999999986, -0.002000000000000668, 0.03950000000000031, 0.030249999999998778, 0.0019999999999988916, 0.01699999999999946, 0.030250000000000554, 0.01950000000000074, -0.015000000000000568, 0.018249999999998323, 0.0519999999999996, 0.05174999999999841, -0.04974999999999952, 0.016750000000000043, 0.015499999999999403, -0.028499999999999304, -0.015249999999999986, 0.0235000000000003, 0.013000000000001677, 0.002000000000000668, 0.0600000000000005, 0.09350000000000236, 0.012249999999998096], zp_timestamp='2026-04-15T18:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:57:46.366 [DEBUG] [Thread-25620] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:57:46.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:57:46.585 [DEBUG] [Thread-25623] [transport.py] [_log()] starting thread (client mode): 0xf13642e0
2026-04-15T20:57:46.586 [DEBUG] [Thread-25623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:57:46.601 [DEBUG] [Thread-25623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:57:46.601 [INFO] [Thread-25623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:57:46.608 [DEBUG] [Thread-25623] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:57:46.608 [DEBUG] [Thread-25623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:57:46.609 [DEBUG] [Thread-25623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:57:46.609 [DEBUG] [Thread-25623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:57:46.609 [DEBUG] [Thread-25623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:57:46.609 [DEBUG] [Thread-25623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:57:46.609 [DEBUG] [Thread-25623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:57:46.609 [DEBUG] [Thread-25623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:57:46.609 [DEBUG] [Thread-25623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:57:46.609 [DEBUG] [Thread-25623] [transport.py] [_log()] client lang: <none>
2026-04-15T20:57:46.609 [DEBUG] [Thread-25623] [transport.py] [_log()] server lang: <none>
2026-04-15T20:57:46.609 [DEBUG] [Thread-25623] [transport.py] [_log()] kex follows: False
2026-04-15T20:57:46.609 [DEBUG] [Thread-25623] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:57:46.609 [DEBUG] [Thread-25623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:57:46.610 [DEBUG] [Thread-25623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:57:46.610 [DEBUG] [Thread-25623] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:57:46.610 [DEBUG] [Thread-25623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:57:46.610 [DEBUG] [Thread-25623] [transport.py] [_log()] Compression: none
2026-04-15T20:57:46.610 [DEBUG] [Thread-25623] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:57:46.664 [DEBUG] [Thread-25623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:57:46.664 [DEBUG] [Thread-25623] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:57:46.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:57:46.665 [DEBUG] [Thread-25623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:57:46.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:57:46.721 [DEBUG] [Thread-25623] [transport.py] [_log()] userauth is OK
2026-04-15T20:57:46.721 [DEBUG] [Thread-25623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:57:46.721 [DEBUG] [Thread-25623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:57:46.722 [DEBUG] [Thread-25623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:57:46.722 [DEBUG] [Thread-25623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:57:46.746 [INFO] [Thread-25623] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:57:46.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:57:46.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:57:47.569 [DEBUG] [Thread-25623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:57:47.569 [DEBUG] [Thread-25623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:57:47.617 [DEBUG] [Thread-25623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:57:47.617 [DEBUG] [Thread-25623] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:57:47.626 [DEBUG] [Thread-25623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:57:47.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:57:47.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')
2026-04-15T20:57:47.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
2026-04-15T20:57:47.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:57:47.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:57:47.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:57:47.661 [DEBUG] [Thread-25623] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:57:50.836 [DEBUG] [Thread-25625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:58:05.876 [DEBUG] [Thread-25626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:58:12.555 [DEBUG] [Thread-25627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:58:17.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:58:17.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:58:17.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
2026-04-15T20:58:18.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 58, 10), 4.05393, 75.7847, 0.0, 7.90596, 9.59146, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:58:18.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:58:10
2026-04-15T20:58:19.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:58:19.774 [DEBUG] [Thread-25628] [transport.py] [_log()] starting thread (client mode): 0xf1334a30
2026-04-15T20:58:19.775 [DEBUG] [Thread-25628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:58:19.786 [DEBUG] [Thread-25628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:58:19.786 [INFO] [Thread-25628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:58:19.790 [DEBUG] [Thread-25628] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:58:19.790 [DEBUG] [Thread-25628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:58:19.790 [DEBUG] [Thread-25628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:58:19.790 [DEBUG] [Thread-25628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:58:19.790 [DEBUG] [Thread-25628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:58:19.790 [DEBUG] [Thread-25628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:58:19.790 [DEBUG] [Thread-25628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:58:19.790 [DEBUG] [Thread-25628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:58:19.790 [DEBUG] [Thread-25628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:58:19.790 [DEBUG] [Thread-25628] [transport.py] [_log()] client lang: <none>
2026-04-15T20:58:19.791 [DEBUG] [Thread-25628] [transport.py] [_log()] server lang: <none>
2026-04-15T20:58:19.791 [DEBUG] [Thread-25628] [transport.py] [_log()] kex follows: False
2026-04-15T20:58:19.791 [DEBUG] [Thread-25628] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:58:19.791 [DEBUG] [Thread-25628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:58:19.791 [DEBUG] [Thread-25628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:58:19.791 [DEBUG] [Thread-25628] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:58:19.791 [DEBUG] [Thread-25628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:58:19.791 [DEBUG] [Thread-25628] [transport.py] [_log()] Compression: none
2026-04-15T20:58:19.791 [DEBUG] [Thread-25628] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:58:19.807 [DEBUG] [Thread-25628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:58:19.807 [DEBUG] [Thread-25628] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:58:19.808 [DEBUG] [Thread-25628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:58:19.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:58:19.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:58:19.809 [DEBUG] [Thread-25628] [transport.py] [_log()] userauth is OK
2026-04-15T20:58:19.809 [DEBUG] [Thread-25628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:58:19.809 [DEBUG] [Thread-25628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:58:19.809 [DEBUG] [Thread-25628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:58:19.809 [DEBUG] [Thread-25628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:58:19.827 [INFO] [Thread-25628] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:58:19.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:58:20.499 [DEBUG] [Thread-25628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:58:20.499 [DEBUG] [Thread-25628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:58:20.500 [DEBUG] [Thread-25628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:58:20.540 [DEBUG] [Thread-25628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:58:20.540 [DEBUG] [Thread-25628] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:58:20.543 [DEBUG] [Thread-25628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:58:20.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:58:20.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:58:20.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:58:20.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:58:20.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:58:20.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:58:20.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:58:20.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:58:20.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:58:20.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.790062 -999.00   +9.70   6.50     79   +6.30 1 1 1 1 1     0    0 3.36 0.60 ZNESW 6.7 6.5 333.6 7.0 10.2 -24.7 10.1 -23.4 9.8 -21.3 10.1 -23.5
2026-04-15T20:58:20.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:58:20.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:58:20.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.790062
2026-04-15T20:58:20.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:58:20.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:58:20.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:58:20.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:58:20.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:58:20.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:58:10', tmtdew=4.05393, humidity=75.7847, cloud=0.0, wind=7.90596, temperature=9.59146, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:58:10', seeing=2.33, atlas_timestamp='2026-04-15T18:57:41.357', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.008250000000000313, -0.07474999999999987, -0.046499999999999986, -0.045999999999999375, 0.01425000000000054, -0.016000000000000014, 0.0017500000000012506, 0.0625, 0.0030000000000001137, -0.05874999999999986, -0.002000000000000668, 0.03950000000000031, 0.030249999999998778, 0.0019999999999988916, 0.01699999999999946, 0.030250000000000554, 0.01950000000000074, -0.015000000000000568, 0.018249999999998323, 0.0519999999999996, 0.05174999999999841, -0.04974999999999952, 0.016750000000000043, 0.015499999999999403, -0.028499999999999304, -0.015249999999999986, 0.0235000000000003, 0.013000000000001677, 0.002000000000000668, 0.0600000000000005, 0.09350000000000236, 0.012249999999998096], zp_timestamp='2026-04-15T18:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:58:20.568 [DEBUG] [Thread-25628] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:58:20.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:58:20.828 [DEBUG] [Thread-25631] [transport.py] [_log()] starting thread (client mode): 0xf1351900
2026-04-15T20:58:20.829 [DEBUG] [Thread-25631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:58:20.847 [DEBUG] [Thread-25631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:58:20.848 [INFO] [Thread-25631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:58:20.859 [DEBUG] [Thread-25631] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:58:20.859 [DEBUG] [Thread-25631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:58:20.859 [DEBUG] [Thread-25631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:58:20.859 [DEBUG] [Thread-25631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:58:20.860 [DEBUG] [Thread-25631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:58:20.860 [DEBUG] [Thread-25631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:58:20.860 [DEBUG] [Thread-25631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:58:20.860 [DEBUG] [Thread-25631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:58:20.860 [DEBUG] [Thread-25631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:58:20.860 [DEBUG] [Thread-25631] [transport.py] [_log()] client lang: <none>
2026-04-15T20:58:20.860 [DEBUG] [Thread-25631] [transport.py] [_log()] server lang: <none>
2026-04-15T20:58:20.860 [DEBUG] [Thread-25631] [transport.py] [_log()] kex follows: False
2026-04-15T20:58:20.860 [DEBUG] [Thread-25631] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:58:20.860 [DEBUG] [Thread-25631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:58:20.860 [DEBUG] [Thread-25631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:58:20.861 [DEBUG] [Thread-25631] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:58:20.861 [DEBUG] [Thread-25631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:58:20.861 [DEBUG] [Thread-25631] [transport.py] [_log()] Compression: none
2026-04-15T20:58:20.861 [DEBUG] [Thread-25631] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:58:20.907 [DEBUG] [Thread-25633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:58:20.918 [DEBUG] [Thread-25631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:58:20.919 [DEBUG] [Thread-25631] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:58:20.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:58:20.920 [DEBUG] [Thread-25631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:58:20.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:58:20.981 [DEBUG] [Thread-25631] [transport.py] [_log()] userauth is OK
2026-04-15T20:58:20.981 [DEBUG] [Thread-25631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:58:20.981 [DEBUG] [Thread-25631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:58:20.981 [DEBUG] [Thread-25631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:58:20.982 [DEBUG] [Thread-25631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:58:21.010 [INFO] [Thread-25631] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:58:21.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:58:21.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:58:21.843 [DEBUG] [Thread-25631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:58:21.843 [DEBUG] [Thread-25631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:58:21.895 [DEBUG] [Thread-25631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:58:21.896 [DEBUG] [Thread-25631] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:58:21.907 [DEBUG] [Thread-25631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:58:21.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:58:21.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')
2026-04-15T20:58:21.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T20:58:21.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:58:21.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:58:21.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:58:21.950 [DEBUG] [Thread-25631] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:58:35.952 [DEBUG] [Thread-25634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:58:42.676 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:58:42.677 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:58:50.983 [DEBUG] [Thread-25635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:58:51.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:58:51.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:58:51.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
2026-04-15T20:58:53.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 58, 45), 3.95273, 76.3371, 0.0, 9.45864, 9.71609, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:58:53.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:58:45
2026-04-15T20:58:53.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:58:54.055 [DEBUG] [Thread-25636] [transport.py] [_log()] starting thread (client mode): 0xf13657e0
2026-04-15T20:58:54.055 [DEBUG] [Thread-25636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:58:54.074 [DEBUG] [Thread-25636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:58:54.074 [INFO] [Thread-25636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:58:54.077 [DEBUG] [Thread-25636] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:58:54.077 [DEBUG] [Thread-25636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:58:54.078 [DEBUG] [Thread-25636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:58:54.078 [DEBUG] [Thread-25636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:58:54.078 [DEBUG] [Thread-25636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:58:54.078 [DEBUG] [Thread-25636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:58:54.078 [DEBUG] [Thread-25636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:58:54.078 [DEBUG] [Thread-25636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:58:54.078 [DEBUG] [Thread-25636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:58:54.078 [DEBUG] [Thread-25636] [transport.py] [_log()] client lang: <none>
2026-04-15T20:58:54.078 [DEBUG] [Thread-25636] [transport.py] [_log()] server lang: <none>
2026-04-15T20:58:54.078 [DEBUG] [Thread-25636] [transport.py] [_log()] kex follows: False
2026-04-15T20:58:54.079 [DEBUG] [Thread-25636] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:58:54.079 [DEBUG] [Thread-25636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:58:54.079 [DEBUG] [Thread-25636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:58:54.079 [DEBUG] [Thread-25636] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:58:54.079 [DEBUG] [Thread-25636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:58:54.079 [DEBUG] [Thread-25636] [transport.py] [_log()] Compression: none
2026-04-15T20:58:54.079 [DEBUG] [Thread-25636] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:58:54.095 [DEBUG] [Thread-25636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:58:54.096 [DEBUG] [Thread-25636] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:58:54.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:58:54.097 [DEBUG] [Thread-25636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:58:54.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:58:54.098 [DEBUG] [Thread-25636] [transport.py] [_log()] userauth is OK
2026-04-15T20:58:54.098 [DEBUG] [Thread-25636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:58:54.098 [DEBUG] [Thread-25636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:58:54.098 [DEBUG] [Thread-25636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:58:54.098 [DEBUG] [Thread-25636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:58:54.117 [INFO] [Thread-25636] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:58:54.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:58:54.759 [DEBUG] [Thread-25636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:58:54.760 [DEBUG] [Thread-25636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:58:54.760 [DEBUG] [Thread-25636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:58:54.800 [DEBUG] [Thread-25636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:58:54.800 [DEBUG] [Thread-25636] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:58:54.803 [DEBUG] [Thread-25636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:58:54.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:58:54.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:58:54.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:58:54.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:58:54.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:58:54.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:58:54.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:58:54.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:58:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:58:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.790409 -999.00   +9.60   5.93     79   +6.20 1 1 1 1 1     0    0 3.39 1.26 ZNESW 5.7 5.9 318.6 7.6 10.2 -24.6 10.1 -23.4 9.8 -21.4 10.1 -23.4
2026-04-15T20:58:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:58:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:58:54.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.790409
2026-04-15T20:58:54.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:58:54.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:58:54.829 [DEBUG] [Thread-25636] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:58:54.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:58:54.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:58:54.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:58:54.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:58:45', tmtdew=3.95273, humidity=76.3371, cloud=0.0, wind=9.45864, temperature=9.71609, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:58:45', seeing=1.97, atlas_timestamp='2026-04-15T18:58:11.338', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.008250000000000313, -0.07474999999999987, -0.046499999999999986, -0.045999999999999375, 0.01425000000000054, -0.016000000000000014, 0.0017500000000012506, 0.0625, 0.0030000000000001137, -0.05874999999999986, -0.002000000000000668, 0.03950000000000031, 0.030249999999998778, 0.0019999999999988916, 0.01699999999999946, 0.030250000000000554, 0.01950000000000074, -0.015000000000000568, 0.018249999999998323, 0.0519999999999996, 0.05174999999999841, -0.04974999999999952, 0.016750000000000043, 0.015499999999999403, -0.028499999999999304, -0.015249999999999986, 0.0235000000000003, 0.013000000000001677, 0.002000000000000668, 0.0600000000000005, 0.09350000000000236, 0.012249999999998096], zp_timestamp='2026-04-15T18:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:58:55.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:58:55.087 [DEBUG] [Thread-25639] [transport.py] [_log()] starting thread (client mode): 0xf1350640
2026-04-15T20:58:55.087 [DEBUG] [Thread-25639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:58:55.101 [DEBUG] [Thread-25639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:58:55.101 [INFO] [Thread-25639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:58:55.109 [DEBUG] [Thread-25639] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:58:55.109 [DEBUG] [Thread-25639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:58:55.109 [DEBUG] [Thread-25639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:58:55.109 [DEBUG] [Thread-25639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:58:55.109 [DEBUG] [Thread-25639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:58:55.109 [DEBUG] [Thread-25639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:58:55.110 [DEBUG] [Thread-25639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:58:55.110 [DEBUG] [Thread-25639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:58:55.110 [DEBUG] [Thread-25639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:58:55.110 [DEBUG] [Thread-25639] [transport.py] [_log()] client lang: <none>
2026-04-15T20:58:55.110 [DEBUG] [Thread-25639] [transport.py] [_log()] server lang: <none>
2026-04-15T20:58:55.110 [DEBUG] [Thread-25639] [transport.py] [_log()] kex follows: False
2026-04-15T20:58:55.110 [DEBUG] [Thread-25639] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:58:55.110 [DEBUG] [Thread-25639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:58:55.110 [DEBUG] [Thread-25639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:58:55.110 [DEBUG] [Thread-25639] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:58:55.110 [DEBUG] [Thread-25639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:58:55.111 [DEBUG] [Thread-25639] [transport.py] [_log()] Compression: none
2026-04-15T20:58:55.111 [DEBUG] [Thread-25639] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:58:55.164 [DEBUG] [Thread-25639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:58:55.164 [DEBUG] [Thread-25639] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:58:55.165 [DEBUG] [Thread-25639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:58:55.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:58:55.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:58:55.221 [DEBUG] [Thread-25639] [transport.py] [_log()] userauth is OK
2026-04-15T20:58:55.221 [DEBUG] [Thread-25639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:58:55.222 [DEBUG] [Thread-25639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:58:55.222 [DEBUG] [Thread-25639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:58:55.222 [DEBUG] [Thread-25639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:58:55.244 [INFO] [Thread-25639] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:58:55.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:58:55.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:58:56.039 [DEBUG] [Thread-25639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:58:56.039 [DEBUG] [Thread-25639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:58:56.087 [DEBUG] [Thread-25639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:58:56.087 [DEBUG] [Thread-25639] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:58:56.096 [DEBUG] [Thread-25639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:58:56.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:58:56.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')
2026-04-15T20:58:56.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') -> 00000000
2026-04-15T20:58:56.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:58:56.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:58:56.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:58:56.131 [DEBUG] [Thread-25639] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:59:06.017 [DEBUG] [Thread-25641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:59:12.698 [DEBUG] [Thread-25642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:59:21.060 [DEBUG] [Thread-25643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:59:26.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T20:59:26.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T20:59:26.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
2026-04-15T20:59:27.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 58, 45), 3.95273, 76.3371, 0.0, 9.45864, 9.71609, 0, 0, 0, 2, 0, 0),)
2026-04-15T20:59:27.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:58:45
2026-04-15T20:59:27.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T20:59:28.220 [DEBUG] [Thread-25644] [transport.py] [_log()] starting thread (client mode): 0xee906d70
2026-04-15T20:59:28.221 [DEBUG] [Thread-25644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:59:28.240 [DEBUG] [Thread-25644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T20:59:28.240 [INFO] [Thread-25644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T20:59:28.243 [DEBUG] [Thread-25644] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:59:28.243 [DEBUG] [Thread-25644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T20:59:28.243 [DEBUG] [Thread-25644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:59:28.243 [DEBUG] [Thread-25644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:59:28.243 [DEBUG] [Thread-25644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:59:28.243 [DEBUG] [Thread-25644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:59:28.244 [DEBUG] [Thread-25644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:59:28.244 [DEBUG] [Thread-25644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:59:28.244 [DEBUG] [Thread-25644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:59:28.244 [DEBUG] [Thread-25644] [transport.py] [_log()] client lang: <none>
2026-04-15T20:59:28.244 [DEBUG] [Thread-25644] [transport.py] [_log()] server lang: <none>
2026-04-15T20:59:28.244 [DEBUG] [Thread-25644] [transport.py] [_log()] kex follows: False
2026-04-15T20:59:28.244 [DEBUG] [Thread-25644] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:59:28.244 [DEBUG] [Thread-25644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:59:28.244 [DEBUG] [Thread-25644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:59:28.245 [DEBUG] [Thread-25644] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:59:28.245 [DEBUG] [Thread-25644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:59:28.245 [DEBUG] [Thread-25644] [transport.py] [_log()] Compression: none
2026-04-15T20:59:28.245 [DEBUG] [Thread-25644] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:59:28.264 [DEBUG] [Thread-25644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:59:28.265 [DEBUG] [Thread-25644] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:59:28.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T20:59:28.265 [DEBUG] [Thread-25644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T20:59:28.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:59:28.266 [DEBUG] [Thread-25644] [transport.py] [_log()] userauth is OK
2026-04-15T20:59:28.266 [DEBUG] [Thread-25644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:59:28.266 [DEBUG] [Thread-25644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:59:28.267 [DEBUG] [Thread-25644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T20:59:28.267 [DEBUG] [Thread-25644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:59:28.290 [INFO] [Thread-25644] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:59:28.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:59:28.894 [DEBUG] [Thread-25644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:59:28.894 [DEBUG] [Thread-25644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:59:28.895 [DEBUG] [Thread-25644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T20:59:28.935 [DEBUG] [Thread-25644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:59:28.935 [DEBUG] [Thread-25644] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:59:28.938 [DEBUG] [Thread-25644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:59:28.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:59:28.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T20:59:28.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T20:59:28.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T20:59:28.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:59:28.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T20:59:28.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:59:28.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:59:28.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T20:59:28.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.791104 -999.00   +9.70   6.30     79   +6.30 1 1 1 1 1     0    0 3.38 1.90 ZNESW 6.0 6.3 303.8 6.7 10.2 -24.7 10.1 -23.4 9.8 -21.5 10.1 -23.6
2026-04-15T20:59:28.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T20:59:28.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T20:59:28.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.791104
2026-04-15T20:59:28.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T20:59:28.964 [DEBUG] [Thread-25644] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:59:28.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T20:59:28.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T20:59:28.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T20:59:28.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T20:59:28.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:58:45', tmtdew=3.95273, humidity=76.3371, cloud=0.0, wind=9.45864, temperature=9.71609, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:59:21', seeing=1.97, atlas_timestamp='2026-04-15T18:59:11.386', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.008250000000000313, -0.07474999999999987, -0.046499999999999986, -0.045999999999999375, 0.01425000000000054, -0.016000000000000014, 0.0017500000000012506, 0.0625, 0.0030000000000001137, -0.05874999999999986, -0.002000000000000668, 0.03950000000000031, 0.030249999999998778, 0.0019999999999988916, 0.01699999999999946, 0.030250000000000554, 0.01950000000000074, -0.015000000000000568, 0.018249999999998323, 0.0519999999999996, 0.05174999999999841, -0.04974999999999952, 0.016750000000000043, 0.015499999999999403, -0.028499999999999304, -0.015249999999999986, 0.0235000000000003, 0.013000000000001677, 0.002000000000000668, 0.0600000000000005, 0.09350000000000236, 0.012249999999998096], zp_timestamp='2026-04-15T18:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T20:59:29.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T20:59:29.223 [DEBUG] [Thread-25647] [transport.py] [_log()] starting thread (client mode): 0xee907490
2026-04-15T20:59:29.223 [DEBUG] [Thread-25647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T20:59:29.241 [DEBUG] [Thread-25647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T20:59:29.241 [INFO] [Thread-25647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T20:59:29.249 [DEBUG] [Thread-25647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T20:59:29.249 [DEBUG] [Thread-25647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T20:59:29.249 [DEBUG] [Thread-25647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T20:59:29.249 [DEBUG] [Thread-25647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:59:29.249 [DEBUG] [Thread-25647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T20:59:29.249 [DEBUG] [Thread-25647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:59:29.249 [DEBUG] [Thread-25647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T20:59:29.249 [DEBUG] [Thread-25647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T20:59:29.249 [DEBUG] [Thread-25647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T20:59:29.250 [DEBUG] [Thread-25647] [transport.py] [_log()] client lang: <none>
2026-04-15T20:59:29.250 [DEBUG] [Thread-25647] [transport.py] [_log()] server lang: <none>
2026-04-15T20:59:29.250 [DEBUG] [Thread-25647] [transport.py] [_log()] kex follows: False
2026-04-15T20:59:29.250 [DEBUG] [Thread-25647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T20:59:29.250 [DEBUG] [Thread-25647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T20:59:29.250 [DEBUG] [Thread-25647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T20:59:29.250 [DEBUG] [Thread-25647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T20:59:29.250 [DEBUG] [Thread-25647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T20:59:29.250 [DEBUG] [Thread-25647] [transport.py] [_log()] Compression: none
2026-04-15T20:59:29.250 [DEBUG] [Thread-25647] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T20:59:29.308 [DEBUG] [Thread-25647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T20:59:29.309 [DEBUG] [Thread-25647] [transport.py] [_log()] Switch to new keys ...
2026-04-15T20:59:29.309 [DEBUG] [Thread-25647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T20:59:29.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T20:59:29.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T20:59:29.365 [DEBUG] [Thread-25647] [transport.py] [_log()] userauth is OK
2026-04-15T20:59:29.366 [DEBUG] [Thread-25647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T20:59:29.366 [DEBUG] [Thread-25647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T20:59:29.366 [DEBUG] [Thread-25647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T20:59:29.366 [DEBUG] [Thread-25647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T20:59:29.392 [INFO] [Thread-25647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T20:59:29.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T20:59:29.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T20:59:30.225 [DEBUG] [Thread-25647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T20:59:30.225 [DEBUG] [Thread-25647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T20:59:30.273 [DEBUG] [Thread-25647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T20:59:30.273 [DEBUG] [Thread-25647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T20:59:30.282 [DEBUG] [Thread-25647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T20:59:30.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T20:59:30.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')
2026-04-15T20:59: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
2026-04-15T20:59:30.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T20:59:30.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T20:59:30.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T20:59:30.317 [DEBUG] [Thread-25647] [transport.py] [_log()] EOF in transport thread
2026-04-15T20:59:36.092 [DEBUG] [Thread-25649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:59:42.881 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:59:42.883 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:59:51.135 [DEBUG] [Thread-25650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T20:59:56.720 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:00:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:00:00.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:00:00.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
2026-04-15T21:00:01.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 59, 20), 4.12586, 75.6686, 0.0, 6.68808, 9.59148, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:00:01.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:59:20
2026-04-15T21:00:02.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:00:02.488 [DEBUG] [Thread-25651] [transport.py] [_log()] starting thread (client mode): 0xf1367d00
2026-04-15T21:00:02.488 [DEBUG] [Thread-25651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:00:02.506 [DEBUG] [Thread-25651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:00:02.507 [INFO] [Thread-25651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:00:02.508 [DEBUG] [Thread-25651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:00:02.508 [DEBUG] [Thread-25651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:00:02.508 [DEBUG] [Thread-25651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:00:02.508 [DEBUG] [Thread-25651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:00:02.508 [DEBUG] [Thread-25651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:00:02.508 [DEBUG] [Thread-25651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:00:02.508 [DEBUG] [Thread-25651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:00:02.508 [DEBUG] [Thread-25651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:00:02.508 [DEBUG] [Thread-25651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:00:02.508 [DEBUG] [Thread-25651] [transport.py] [_log()] client lang: <none>
2026-04-15T21:00:02.508 [DEBUG] [Thread-25651] [transport.py] [_log()] server lang: <none>
2026-04-15T21:00:02.508 [DEBUG] [Thread-25651] [transport.py] [_log()] kex follows: False
2026-04-15T21:00:02.508 [DEBUG] [Thread-25651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:00:02.509 [DEBUG] [Thread-25651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:00:02.509 [DEBUG] [Thread-25651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:00:02.509 [DEBUG] [Thread-25651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:00:02.509 [DEBUG] [Thread-25651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:00:02.509 [DEBUG] [Thread-25651] [transport.py] [_log()] Compression: none
2026-04-15T21:00:02.509 [DEBUG] [Thread-25651] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:00:02.517 [DEBUG] [Thread-25651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:00:02.517 [DEBUG] [Thread-25651] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:00:02.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:00:02.517 [DEBUG] [Thread-25651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:00:02.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:00:02.518 [DEBUG] [Thread-25651] [transport.py] [_log()] userauth is OK
2026-04-15T21:00:02.518 [DEBUG] [Thread-25651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:00:02.518 [DEBUG] [Thread-25651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:00:02.518 [DEBUG] [Thread-25651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:00:02.518 [DEBUG] [Thread-25651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:00:02.548 [INFO] [Thread-25651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:00:02.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:00:02.648 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:00:03.469 [DEBUG] [Thread-25651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:00:03.470 [DEBUG] [Thread-25651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:00:03.470 [DEBUG] [Thread-25651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:00:03.511 [DEBUG] [Thread-25651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:00:03.511 [DEBUG] [Thread-25651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:00:03.513 [DEBUG] [Thread-25651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:00:03.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:00:03.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:00:03.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:00:03.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:00:03.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:00:03.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:00:03.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:00:03.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:00:03.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:00:03.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.791451 -999.00   +9.70   6.18     79   +6.30 1 1 1 1 1     0    0 3.33 2.14 ZNESW 6.8 6.2 299.4 7.1 10.2 -24.5 10.1 -23.4 9.8 -21.3 10.1 -23.3
2026-04-15T21:00:03.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:00:03.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:00:03.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.791451
2026-04-15T21:00:03.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:00:03.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:00:03.539 [DEBUG] [Thread-25651] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:00:03.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:00:03.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:00:03.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:00:03.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:59:20', tmtdew=4.12586, humidity=75.6686, cloud=0.0, wind=6.68808, temperature=9.59148, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T20:59:56', seeing=2.28, atlas_timestamp='2026-04-15T18:59:41.366', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.008250000000000313, -0.07474999999999987, -0.046499999999999986, -0.045999999999999375, 0.01425000000000054, -0.016000000000000014, 0.0017500000000012506, 0.0625, 0.0030000000000001137, -0.05874999999999986, -0.002000000000000668, 0.03950000000000031, 0.030249999999998778, 0.0019999999999988916, 0.01699999999999946, 0.030250000000000554, 0.01950000000000074, -0.015000000000000568, 0.018249999999998323, 0.0519999999999996, 0.05174999999999841, -0.04974999999999952, 0.016750000000000043, 0.015499999999999403, -0.028499999999999304, -0.015249999999999986, 0.0235000000000003, 0.013000000000001677, 0.002000000000000668, 0.0600000000000005, 0.09350000000000236, 0.012249999999998096], zp_timestamp='2026-04-15T18:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:00:03.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:00:03.799 [DEBUG] [Thread-25654] [transport.py] [_log()] starting thread (client mode): 0xf1350640
2026-04-15T21:00:03.799 [DEBUG] [Thread-25654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:00:03.812 [DEBUG] [Thread-25654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:00:03.813 [INFO] [Thread-25654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:00:03.820 [DEBUG] [Thread-25654] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:00:03.820 [DEBUG] [Thread-25654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:00:03.820 [DEBUG] [Thread-25654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:00:03.820 [DEBUG] [Thread-25654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:00:03.820 [DEBUG] [Thread-25654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:00:03.820 [DEBUG] [Thread-25654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:00:03.820 [DEBUG] [Thread-25654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:00:03.820 [DEBUG] [Thread-25654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:00:03.820 [DEBUG] [Thread-25654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:00:03.820 [DEBUG] [Thread-25654] [transport.py] [_log()] client lang: <none>
2026-04-15T21:00:03.820 [DEBUG] [Thread-25654] [transport.py] [_log()] server lang: <none>
2026-04-15T21:00:03.820 [DEBUG] [Thread-25654] [transport.py] [_log()] kex follows: False
2026-04-15T21:00:03.820 [DEBUG] [Thread-25654] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:00:03.821 [DEBUG] [Thread-25654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:00:03.821 [DEBUG] [Thread-25654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:00:03.821 [DEBUG] [Thread-25654] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:00:03.821 [DEBUG] [Thread-25654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:00:03.821 [DEBUG] [Thread-25654] [transport.py] [_log()] Compression: none
2026-04-15T21:00:03.821 [DEBUG] [Thread-25654] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:00:03.876 [DEBUG] [Thread-25654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:00:03.876 [DEBUG] [Thread-25654] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:00:03.877 [DEBUG] [Thread-25654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:00:03.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:00:03.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:00:03.933 [DEBUG] [Thread-25654] [transport.py] [_log()] userauth is OK
2026-04-15T21:00:03.933 [DEBUG] [Thread-25654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:00:03.933 [DEBUG] [Thread-25654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:00:03.933 [DEBUG] [Thread-25654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:00:03.933 [DEBUG] [Thread-25654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:00:03.953 [INFO] [Thread-25654] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:00:03.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:00:03.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:00:04.678 [DEBUG] [Thread-23763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:00:04.769 [DEBUG] [Thread-25654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:00:04.769 [DEBUG] [Thread-25654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:00:04.817 [DEBUG] [Thread-25654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:00:04.817 [DEBUG] [Thread-25654] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:00:04.826 [DEBUG] [Thread-25654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:00:04.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:00:04.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')
2026-04-15T21:00:04.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') -> 00000000
2026-04-15T21:00:04.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:00:04.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:00:04.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:00:04.861 [DEBUG] [Thread-25654] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:00:05.696 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:00:06.166 [DEBUG] [Thread-25656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:00:12.364 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:00:12.844 [DEBUG] [Thread-25657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:00:21.208 [DEBUG] [Thread-25658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:00:34.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:00:34.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:00:34.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
2026-04-15T21:00:36.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 20, 59, 56), 4.079, 75.652, 0.0, 5.10048, 9.54148, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:00:36.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 20:59:56
2026-04-15T21:00:36.237 [DEBUG] [Thread-25659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:00:36.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:00:37.050 [DEBUG] [Thread-25660] [transport.py] [_log()] starting thread (client mode): 0xf1366ec0
2026-04-15T21:00:37.051 [DEBUG] [Thread-25660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:00:37.071 [DEBUG] [Thread-25660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:00:37.071 [INFO] [Thread-25660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:00:37.074 [DEBUG] [Thread-25660] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:00:37.074 [DEBUG] [Thread-25660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:00:37.074 [DEBUG] [Thread-25660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:00:37.074 [DEBUG] [Thread-25660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:00:37.074 [DEBUG] [Thread-25660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:00:37.074 [DEBUG] [Thread-25660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:00:37.075 [DEBUG] [Thread-25660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:00:37.075 [DEBUG] [Thread-25660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:00:37.075 [DEBUG] [Thread-25660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:00:37.075 [DEBUG] [Thread-25660] [transport.py] [_log()] client lang: <none>
2026-04-15T21:00:37.075 [DEBUG] [Thread-25660] [transport.py] [_log()] server lang: <none>
2026-04-15T21:00:37.075 [DEBUG] [Thread-25660] [transport.py] [_log()] kex follows: False
2026-04-15T21:00:37.075 [DEBUG] [Thread-25660] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:00:37.075 [DEBUG] [Thread-25660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:00:37.075 [DEBUG] [Thread-25660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:00:37.075 [DEBUG] [Thread-25660] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:00:37.075 [DEBUG] [Thread-25660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:00:37.075 [DEBUG] [Thread-25660] [transport.py] [_log()] Compression: none
2026-04-15T21:00:37.075 [DEBUG] [Thread-25660] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:00:37.091 [DEBUG] [Thread-25660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:00:37.091 [DEBUG] [Thread-25660] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:00:37.092 [DEBUG] [Thread-25660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:00:37.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:00:37.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:00:37.093 [DEBUG] [Thread-25660] [transport.py] [_log()] userauth is OK
2026-04-15T21:00:37.093 [DEBUG] [Thread-25660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:00:37.094 [DEBUG] [Thread-25660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:00:37.094 [DEBUG] [Thread-25660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:00:37.094 [DEBUG] [Thread-25660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:00:37.116 [INFO] [Thread-25660] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:00:37.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:00:37.775 [DEBUG] [Thread-25660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:00:37.775 [DEBUG] [Thread-25660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:00:37.776 [DEBUG] [Thread-25660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:00:37.816 [DEBUG] [Thread-25660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:00:37.816 [DEBUG] [Thread-25660] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:00:37.819 [DEBUG] [Thread-25660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:00:37.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:00:37.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:00:37.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:00:37.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:00:37.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:00:37.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:00:37.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:00:37.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:00:37.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:00:37.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.791798 -999.00   +9.70   6.27     79   +6.30 1 1 1 1 1     0    0 3.37 2.43 ZNESW 6.2 6.3 294.0 7.1 10.2 -24.7 10.1 -23.4 9.8 -21.3 10.1 -23.3
2026-04-15T21:00:37.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:00:37.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:00:37.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.791798
2026-04-15T21:00:37.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:00:37.843 [DEBUG] [Thread-25660] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:00:37.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:00:37.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:00:37.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:00:37.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:00:37.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T20:59:56', tmtdew=4.079, humidity=75.652, cloud=0.0, wind=5.10048, temperature=9.54148, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:00:32', seeing=1.92, atlas_timestamp='2026-04-15T19:00:11.347', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.008250000000000313, -0.07474999999999987, -0.046499999999999986, -0.045999999999999375, 0.01425000000000054, -0.016000000000000014, 0.0017500000000012506, 0.0625, 0.0030000000000001137, -0.05874999999999986, -0.002000000000000668, 0.03950000000000031, 0.030249999999998778, 0.0019999999999988916, 0.01699999999999946, 0.030250000000000554, 0.01950000000000074, -0.015000000000000568, 0.018249999999998323, 0.0519999999999996, 0.05174999999999841, -0.04974999999999952, 0.016750000000000043, 0.015499999999999403, -0.028499999999999304, -0.015249999999999986, 0.0235000000000003, 0.013000000000001677, 0.002000000000000668, 0.0600000000000005, 0.09350000000000236, 0.012249999999998096], zp_timestamp='2026-04-15T18:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:00:38.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:00:38.108 [DEBUG] [Thread-25663] [transport.py] [_log()] starting thread (client mode): 0xf13511e0
2026-04-15T21:00:38.109 [DEBUG] [Thread-25663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:00:38.123 [DEBUG] [Thread-25663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:00:38.123 [INFO] [Thread-25663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:00:38.131 [DEBUG] [Thread-25663] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:00:38.131 [DEBUG] [Thread-25663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:00:38.131 [DEBUG] [Thread-25663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:00:38.131 [DEBUG] [Thread-25663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:00:38.131 [DEBUG] [Thread-25663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:00:38.131 [DEBUG] [Thread-25663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:00:38.131 [DEBUG] [Thread-25663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:00:38.132 [DEBUG] [Thread-25663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:00:38.132 [DEBUG] [Thread-25663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:00:38.132 [DEBUG] [Thread-25663] [transport.py] [_log()] client lang: <none>
2026-04-15T21:00:38.132 [DEBUG] [Thread-25663] [transport.py] [_log()] server lang: <none>
2026-04-15T21:00:38.132 [DEBUG] [Thread-25663] [transport.py] [_log()] kex follows: False
2026-04-15T21:00:38.132 [DEBUG] [Thread-25663] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:00:38.132 [DEBUG] [Thread-25663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:00:38.132 [DEBUG] [Thread-25663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:00:38.132 [DEBUG] [Thread-25663] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:00:38.132 [DEBUG] [Thread-25663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:00:38.132 [DEBUG] [Thread-25663] [transport.py] [_log()] Compression: none
2026-04-15T21:00:38.133 [DEBUG] [Thread-25663] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:00:38.189 [DEBUG] [Thread-25663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:00:38.190 [DEBUG] [Thread-25663] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:00:38.191 [DEBUG] [Thread-25663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:00:38.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:00:38.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:00:38.245 [DEBUG] [Thread-25663] [transport.py] [_log()] userauth is OK
2026-04-15T21:00:38.245 [DEBUG] [Thread-25663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:00:38.245 [DEBUG] [Thread-25663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:00:38.246 [DEBUG] [Thread-25663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:00:38.246 [DEBUG] [Thread-25663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:00:38.268 [INFO] [Thread-25663] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:00:38.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:00:38.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:00:39.067 [DEBUG] [Thread-25663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:00:39.067 [DEBUG] [Thread-25663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:00:39.115 [DEBUG] [Thread-25663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:00:39.115 [DEBUG] [Thread-25663] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:00:39.124 [DEBUG] [Thread-25663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:00:39.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:00:39.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')
2026-04-15T21:00:39.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
2026-04-15T21:00:39.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:00:39.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:00:39.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:00:39.159 [DEBUG] [Thread-25663] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:00:43.084 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:00:43.085 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:00:51.265 [DEBUG] [Thread-25665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:01:06.309 [DEBUG] [Thread-25666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:01:09.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:01:09.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:01:09.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
2026-04-15T21:01:10.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 0, 32), 4.08577, 75.6188, 0.0, 4.41252, 9.55809, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:01:10.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:00:32
2026-04-15T21:01:10.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:01:11.368 [DEBUG] [Thread-25667] [transport.py] [_log()] starting thread (client mode): 0xf1352c80
2026-04-15T21:01:11.368 [DEBUG] [Thread-25667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:01:11.388 [DEBUG] [Thread-25667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:01:11.388 [INFO] [Thread-25667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:01:11.391 [DEBUG] [Thread-25667] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:01:11.391 [DEBUG] [Thread-25667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:01:11.392 [DEBUG] [Thread-25667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:01:11.392 [DEBUG] [Thread-25667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:01:11.392 [DEBUG] [Thread-25667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:01:11.392 [DEBUG] [Thread-25667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:01:11.392 [DEBUG] [Thread-25667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:01:11.392 [DEBUG] [Thread-25667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:01:11.392 [DEBUG] [Thread-25667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:01:11.392 [DEBUG] [Thread-25667] [transport.py] [_log()] client lang: <none>
2026-04-15T21:01:11.392 [DEBUG] [Thread-25667] [transport.py] [_log()] server lang: <none>
2026-04-15T21:01:11.392 [DEBUG] [Thread-25667] [transport.py] [_log()] kex follows: False
2026-04-15T21:01:11.392 [DEBUG] [Thread-25667] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:01:11.392 [DEBUG] [Thread-25667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:01:11.393 [DEBUG] [Thread-25667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:01:11.393 [DEBUG] [Thread-25667] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:01:11.393 [DEBUG] [Thread-25667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:01:11.393 [DEBUG] [Thread-25667] [transport.py] [_log()] Compression: none
2026-04-15T21:01:11.393 [DEBUG] [Thread-25667] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:01:11.410 [DEBUG] [Thread-25667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:01:11.410 [DEBUG] [Thread-25667] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:01:11.411 [DEBUG] [Thread-25667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:01:11.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:01:11.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:01:11.412 [DEBUG] [Thread-25667] [transport.py] [_log()] userauth is OK
2026-04-15T21:01:11.412 [DEBUG] [Thread-25667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:01:11.412 [DEBUG] [Thread-25667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:01:11.412 [DEBUG] [Thread-25667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:01:11.413 [DEBUG] [Thread-25667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:01:11.436 [INFO] [Thread-25667] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:01:11.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:01:12.084 [DEBUG] [Thread-25667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:01:12.085 [DEBUG] [Thread-25667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:01:12.085 [DEBUG] [Thread-25667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:01:12.125 [DEBUG] [Thread-25667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:01:12.125 [DEBUG] [Thread-25667] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:01:12.128 [DEBUG] [Thread-25667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:01:12.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:01:12.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:01:12.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:01:12.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:01:12.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:01:12.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:01:12.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:01:12.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:01:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:01:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.792145 -999.00   +9.70   7.04     79   +6.30 1 1 1 1 1     0    0 3.47 3.07 ZNESW 7.5 7.0 295.2 7.6 10.2 -24.7 10.1 -23.3 9.8 -21.4 10.1 -23.3
2026-04-15T21:01:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:01:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:01:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.792145
2026-04-15T21:01:12.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:01:12.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:01:12.152 [DEBUG] [Thread-25667] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:01:12.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:01:12.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:01:12.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:01:12.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:00:32', tmtdew=4.08577, humidity=75.6188, cloud=0.0, wind=4.41252, temperature=9.55809, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:01:08', seeing=1.77, atlas_timestamp='2026-04-15T19:00:41.328', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.008250000000000313, -0.07474999999999987, -0.046499999999999986, -0.045999999999999375, 0.01425000000000054, -0.016000000000000014, 0.0017500000000012506, 0.0625, 0.0030000000000001137, -0.05874999999999986, -0.002000000000000668, 0.03950000000000031, 0.030249999999998778, 0.0019999999999988916, 0.01699999999999946, 0.030250000000000554, 0.01950000000000074, -0.015000000000000568, 0.018249999999998323, 0.0519999999999996, 0.05174999999999841, -0.04974999999999952, 0.016750000000000043, 0.015499999999999403, -0.028499999999999304, -0.015249999999999986, 0.0235000000000003, 0.013000000000001677, 0.002000000000000668, 0.0600000000000005, 0.09350000000000236, 0.012249999999998096], zp_timestamp='2026-04-15T18:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:01:12.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:01:12.404 [DEBUG] [Thread-25670] [transport.py] [_log()] starting thread (client mode): 0xf13679a0
2026-04-15T21:01:12.404 [DEBUG] [Thread-25670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:01:12.419 [DEBUG] [Thread-25670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:01:12.419 [INFO] [Thread-25670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:01:12.426 [DEBUG] [Thread-25670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:01:12.426 [DEBUG] [Thread-25670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:01:12.426 [DEBUG] [Thread-25670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:01:12.427 [DEBUG] [Thread-25670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:01:12.427 [DEBUG] [Thread-25670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:01:12.427 [DEBUG] [Thread-25670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:01:12.427 [DEBUG] [Thread-25670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:01:12.427 [DEBUG] [Thread-25670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:01:12.427 [DEBUG] [Thread-25670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:01:12.427 [DEBUG] [Thread-25670] [transport.py] [_log()] client lang: <none>
2026-04-15T21:01:12.427 [DEBUG] [Thread-25670] [transport.py] [_log()] server lang: <none>
2026-04-15T21:01:12.427 [DEBUG] [Thread-25670] [transport.py] [_log()] kex follows: False
2026-04-15T21:01:12.427 [DEBUG] [Thread-25670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:01:12.427 [DEBUG] [Thread-25670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:01:12.427 [DEBUG] [Thread-25670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:01:12.428 [DEBUG] [Thread-25670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:01:12.428 [DEBUG] [Thread-25670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:01:12.428 [DEBUG] [Thread-25670] [transport.py] [_log()] Compression: none
2026-04-15T21:01:12.428 [DEBUG] [Thread-25670] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:01:12.484 [DEBUG] [Thread-25670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:01:12.485 [DEBUG] [Thread-25670] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:01:12.485 [DEBUG] [Thread-25670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:01:12.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:01:12.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:01:12.541 [DEBUG] [Thread-25670] [transport.py] [_log()] userauth is OK
2026-04-15T21:01:12.541 [DEBUG] [Thread-25670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:01:12.542 [DEBUG] [Thread-25670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:01:12.542 [DEBUG] [Thread-25670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:01:12.542 [DEBUG] [Thread-25670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:01:12.567 [INFO] [Thread-25670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:01:12.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:01:12.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:01:12.993 [DEBUG] [Thread-25672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:01:13.376 [DEBUG] [Thread-25670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:01:13.377 [DEBUG] [Thread-25670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:01:13.424 [DEBUG] [Thread-25670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:01:13.424 [DEBUG] [Thread-25670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:01:13.433 [DEBUG] [Thread-25670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:01:13.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:01:13.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')
2026-04-15T21:01:13.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
2026-04-15T21:01:13.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:01:13.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:01:13.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:01:13.468 [DEBUG] [Thread-25670] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:01:21.337 [DEBUG] [Thread-25673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:01:36.379 [DEBUG] [Thread-25674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:01:43.287 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:01:43.289 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:01:43.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:01:43.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:01:43.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
2026-04-15T21:01:44.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 1, 7), 4.08577, 75.6188, 0.0, 4.8888, 9.55809, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:01:44.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:01:07
2026-04-15T21:01:45.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:01:45.707 [DEBUG] [Thread-25675] [transport.py] [_log()] starting thread (client mode): 0xf1336650
2026-04-15T21:01:45.708 [DEBUG] [Thread-25675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:01:45.725 [DEBUG] [Thread-25675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:01:45.725 [INFO] [Thread-25675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] client lang: <none>
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] server lang: <none>
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] kex follows: False
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:01:45.729 [DEBUG] [Thread-25675] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:01:45.730 [DEBUG] [Thread-25675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:01:45.730 [DEBUG] [Thread-25675] [transport.py] [_log()] Compression: none
2026-04-15T21:01:45.730 [DEBUG] [Thread-25675] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:01:45.744 [DEBUG] [Thread-25675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:01:45.744 [DEBUG] [Thread-25675] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:01:45.744 [DEBUG] [Thread-25675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:01:45.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:01:45.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:01:45.745 [DEBUG] [Thread-25675] [transport.py] [_log()] userauth is OK
2026-04-15T21:01:45.745 [DEBUG] [Thread-25675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:01:45.745 [DEBUG] [Thread-25675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:01:45.745 [DEBUG] [Thread-25675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:01:45.745 [DEBUG] [Thread-25675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:01:45.759 [INFO] [Thread-25675] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:01:45.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:01:46.374 [DEBUG] [Thread-25675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:01:46.374 [DEBUG] [Thread-25675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:01:46.374 [DEBUG] [Thread-25675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:01:46.415 [DEBUG] [Thread-25675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:01:46.415 [DEBUG] [Thread-25675] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:01:46.417 [DEBUG] [Thread-25675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:01:46.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:01:46.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:01:46.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:01:46.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:01:46.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:01:46.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:01:46.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:01:46.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:01:46.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:01:46.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.792492 -999.00   +9.70   8.08     78   +6.20 1 1 1 1 1     0    0 3.45 3.69 ZNESW 7.4 8.1 286.0 8.8 10.2 -24.5 10.1 -23.4 9.8 -21.2 10.1 -23.5
2026-04-15T21:01:46.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:01:46.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:01:46.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.792492
2026-04-15T21:01:46.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:01:46.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:01:46.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:01:46.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:01:46.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:01:46.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:01:07', tmtdew=4.08577, humidity=75.6188, cloud=0.0, wind=4.8888, temperature=9.55809, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:01:08', seeing=1.77, atlas_timestamp='2026-04-15T19:01:11.309', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.008250000000000313, -0.07474999999999987, -0.046499999999999986, -0.045999999999999375, 0.01425000000000054, -0.016000000000000014, 0.0017500000000012506, 0.0625, 0.0030000000000001137, -0.05874999999999986, -0.002000000000000668, 0.03950000000000031, 0.030249999999998778, 0.0019999999999988916, 0.01699999999999946, 0.030250000000000554, 0.01950000000000074, -0.015000000000000568, 0.018249999999998323, 0.0519999999999996, 0.05174999999999841, -0.04974999999999952, 0.016750000000000043, 0.015499999999999403, -0.028499999999999304, -0.015249999999999986, 0.0235000000000003, 0.013000000000001677, 0.002000000000000668, 0.0600000000000005, 0.09350000000000236, 0.012249999999998096], zp_timestamp='2026-04-15T18:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:01:46.437 [DEBUG] [Thread-25675] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:01:46.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:01:46.655 [DEBUG] [Thread-25678] [transport.py] [_log()] starting thread (client mode): 0xf13e1720
2026-04-15T21:01:46.655 [DEBUG] [Thread-25678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:01:46.669 [DEBUG] [Thread-25678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:01:46.669 [INFO] [Thread-25678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:01:46.677 [DEBUG] [Thread-25678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:01:46.677 [DEBUG] [Thread-25678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:01:46.677 [DEBUG] [Thread-25678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:01:46.677 [DEBUG] [Thread-25678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:01:46.677 [DEBUG] [Thread-25678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:01:46.677 [DEBUG] [Thread-25678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:01:46.677 [DEBUG] [Thread-25678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:01:46.678 [DEBUG] [Thread-25678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:01:46.678 [DEBUG] [Thread-25678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:01:46.678 [DEBUG] [Thread-25678] [transport.py] [_log()] client lang: <none>
2026-04-15T21:01:46.678 [DEBUG] [Thread-25678] [transport.py] [_log()] server lang: <none>
2026-04-15T21:01:46.678 [DEBUG] [Thread-25678] [transport.py] [_log()] kex follows: False
2026-04-15T21:01:46.678 [DEBUG] [Thread-25678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:01:46.678 [DEBUG] [Thread-25678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:01:46.678 [DEBUG] [Thread-25678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:01:46.678 [DEBUG] [Thread-25678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:01:46.678 [DEBUG] [Thread-25678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:01:46.678 [DEBUG] [Thread-25678] [transport.py] [_log()] Compression: none
2026-04-15T21:01:46.678 [DEBUG] [Thread-25678] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:01:46.732 [DEBUG] [Thread-25678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:01:46.733 [DEBUG] [Thread-25678] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:01:46.733 [DEBUG] [Thread-25678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:01:46.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:01:46.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:01:46.789 [DEBUG] [Thread-25678] [transport.py] [_log()] userauth is OK
2026-04-15T21:01:46.789 [DEBUG] [Thread-25678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:01:46.789 [DEBUG] [Thread-25678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:01:46.789 [DEBUG] [Thread-25678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:01:46.789 [DEBUG] [Thread-25678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:01:46.811 [INFO] [Thread-25678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:01:46.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:01:46.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:01:47.653 [DEBUG] [Thread-25678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:01:47.653 [DEBUG] [Thread-25678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:01:47.700 [DEBUG] [Thread-25678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:01:47.701 [DEBUG] [Thread-25678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:01:47.710 [DEBUG] [Thread-25678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:01:47.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:01:47.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')
2026-04-15T21:01:47.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
2026-04-15T21:01:47.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:01:47.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:01:47.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:01:47.749 [DEBUG] [Thread-25678] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:01:51.407 [DEBUG] [Thread-25680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:02:06.448 [DEBUG] [Thread-25681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:02:13.158 [DEBUG] [Thread-25682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:02:17.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:02:17.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:02:17.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
2026-04-15T21:02:19.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 1, 43), 3.96953, 76.2377, 0.0, 6.56568, 9.64985, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:02:19.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:01:43
2026-04-15T21:02:19.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:02:19.827 [DEBUG] [Thread-25683] [transport.py] [_log()] starting thread (client mode): 0xf13cb010
2026-04-15T21:02:19.827 [DEBUG] [Thread-25683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:02:19.845 [DEBUG] [Thread-25683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:02:19.845 [INFO] [Thread-25683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:02:19.848 [DEBUG] [Thread-25683] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:02:19.848 [DEBUG] [Thread-25683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:02:19.848 [DEBUG] [Thread-25683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:02:19.849 [DEBUG] [Thread-25683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:02:19.849 [DEBUG] [Thread-25683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:02:19.849 [DEBUG] [Thread-25683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:02:19.849 [DEBUG] [Thread-25683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:02:19.849 [DEBUG] [Thread-25683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:02:19.849 [DEBUG] [Thread-25683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:02:19.849 [DEBUG] [Thread-25683] [transport.py] [_log()] client lang: <none>
2026-04-15T21:02:19.849 [DEBUG] [Thread-25683] [transport.py] [_log()] server lang: <none>
2026-04-15T21:02:19.849 [DEBUG] [Thread-25683] [transport.py] [_log()] kex follows: False
2026-04-15T21:02:19.849 [DEBUG] [Thread-25683] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:02:19.849 [DEBUG] [Thread-25683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:02:19.849 [DEBUG] [Thread-25683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:02:19.850 [DEBUG] [Thread-25683] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:02:19.850 [DEBUG] [Thread-25683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:02:19.850 [DEBUG] [Thread-25683] [transport.py] [_log()] Compression: none
2026-04-15T21:02:19.850 [DEBUG] [Thread-25683] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:02:19.865 [DEBUG] [Thread-25683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:02:19.866 [DEBUG] [Thread-25683] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:02:19.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:02:19.866 [DEBUG] [Thread-25683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:02:19.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:02:19.868 [DEBUG] [Thread-25683] [transport.py] [_log()] userauth is OK
2026-04-15T21:02:19.868 [DEBUG] [Thread-25683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:02:19.868 [DEBUG] [Thread-25683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:02:19.868 [DEBUG] [Thread-25683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:02:19.868 [DEBUG] [Thread-25683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:02:19.893 [INFO] [Thread-25683] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:02:19.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:02:20.532 [DEBUG] [Thread-25683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:02:20.532 [DEBUG] [Thread-25683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:02:20.533 [DEBUG] [Thread-25683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:02:20.573 [DEBUG] [Thread-25683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:02:20.573 [DEBUG] [Thread-25683] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:02:20.576 [DEBUG] [Thread-25683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:02:20.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:02:20.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:02:20.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:02:20.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:02:20.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:02:20.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:02:20.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:02:20.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:02:20.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:02:20.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.793187 -999.00   +9.70   9.00     78   +6.20 1 1 1 1 1     0    0 3.53 5.21 ZNESW 8.4 9.0 282.0 9.5 10.2 -24.5 10.1 -23.3 9.8 -21.3 10.1 -23.4
2026-04-15T21:02:20.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:02:20.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:02:20.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.793187
2026-04-15T21:02:20.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:02:20.599 [DEBUG] [Thread-25683] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:02:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:02:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:02:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:02:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:02:20.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:01:43', tmtdew=3.96953, humidity=76.2377, cloud=0.0, wind=6.56568, temperature=9.64985, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:01:43', seeing=2.08, atlas_timestamp='2026-04-15T19:02:11.357', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0002500000000011937, -0.05074999999999896, -0.05150000000000077, -0.030000000000001137, -0.011749999999999261, 0.019000000000000128, -0.012750000000000483, 0.05749999999999922, 0.002000000000000668, -0.01875000000000071, -0.008000000000000895, 0.036999999999999034, 0.012249999999999872, 0.03799999999999848, 0.0009999999999994458, 0.03474999999999895, 0.0005000000000006111, -0.002000000000000668, 0.0017499999999994742, 0.03999999999999915, 0.060249999999999915, 0.014749999999999375, 0.06274999999999942, 0.08699999999999974, -0.028999999999999915, -0.005250000000000199, 0.02850000000000108, 0.027000000000001023, -0.008499999999997954, 0.031000000000000583, 0.08700000000000152, 0.004749999999999588], zp_timestamp='2026-04-15T19:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:02:20.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:02:20.846 [DEBUG] [Thread-25686] [transport.py] [_log()] starting thread (client mode): 0xee9046d0
2026-04-15T21:02:20.847 [DEBUG] [Thread-25686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:02:20.862 [DEBUG] [Thread-25686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:02:20.862 [INFO] [Thread-25686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:02:20.869 [DEBUG] [Thread-25686] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:02:20.869 [DEBUG] [Thread-25686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:02:20.869 [DEBUG] [Thread-25686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:02:20.870 [DEBUG] [Thread-25686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:02:20.870 [DEBUG] [Thread-25686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:02:20.870 [DEBUG] [Thread-25686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:02:20.870 [DEBUG] [Thread-25686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:02:20.870 [DEBUG] [Thread-25686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:02:20.870 [DEBUG] [Thread-25686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:02:20.870 [DEBUG] [Thread-25686] [transport.py] [_log()] client lang: <none>
2026-04-15T21:02:20.870 [DEBUG] [Thread-25686] [transport.py] [_log()] server lang: <none>
2026-04-15T21:02:20.870 [DEBUG] [Thread-25686] [transport.py] [_log()] kex follows: False
2026-04-15T21:02:20.870 [DEBUG] [Thread-25686] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:02:20.870 [DEBUG] [Thread-25686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:02:20.870 [DEBUG] [Thread-25686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:02:20.871 [DEBUG] [Thread-25686] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:02:20.871 [DEBUG] [Thread-25686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:02:20.871 [DEBUG] [Thread-25686] [transport.py] [_log()] Compression: none
2026-04-15T21:02:20.871 [DEBUG] [Thread-25686] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:02:20.929 [DEBUG] [Thread-25686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:02:20.929 [DEBUG] [Thread-25686] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:02:20.930 [DEBUG] [Thread-25686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:02:20.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:02:20.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:02:20.985 [DEBUG] [Thread-25686] [transport.py] [_log()] userauth is OK
2026-04-15T21:02:20.985 [DEBUG] [Thread-25686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:02:20.986 [DEBUG] [Thread-25686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:02:20.986 [DEBUG] [Thread-25686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:02:20.986 [DEBUG] [Thread-25686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:02:21.011 [INFO] [Thread-25686] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:02:21.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:02:21.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:02:21.477 [DEBUG] [Thread-25688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:02:21.808 [DEBUG] [Thread-25686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:02:21.808 [DEBUG] [Thread-25686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:02:21.857 [DEBUG] [Thread-25686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:02:21.857 [DEBUG] [Thread-25686] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:02:21.865 [DEBUG] [Thread-25686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:02:21.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:02:21.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')
2026-04-15T21:02:21.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
2026-04-15T21:02:21.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:02:21.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:02:21.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:02:21.899 [DEBUG] [Thread-25686] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:02:36.532 [DEBUG] [Thread-25689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:02:43.489 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:02:43.491 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:02:51.563 [DEBUG] [Thread-25690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:02:51.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:02:51.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:02:51.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
2026-04-15T21:02:53.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 2, 19), 4.07222, 75.6852, 0.0, 5.71788, 9.52493, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:02:53.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:02:19
2026-04-15T21:02:53.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:02:53.994 [DEBUG] [Thread-25691] [transport.py] [_log()] starting thread (client mode): 0xee904e20
2026-04-15T21:02:53.994 [DEBUG] [Thread-25691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:02:54.014 [DEBUG] [Thread-25691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:02:54.014 [INFO] [Thread-25691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:02:54.016 [DEBUG] [Thread-25691] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:02:54.016 [DEBUG] [Thread-25691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:02:54.016 [DEBUG] [Thread-25691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:02:54.016 [DEBUG] [Thread-25691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:02:54.016 [DEBUG] [Thread-25691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:02:54.016 [DEBUG] [Thread-25691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:02:54.016 [DEBUG] [Thread-25691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:02:54.017 [DEBUG] [Thread-25691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:02:54.017 [DEBUG] [Thread-25691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:02:54.017 [DEBUG] [Thread-25691] [transport.py] [_log()] client lang: <none>
2026-04-15T21:02:54.017 [DEBUG] [Thread-25691] [transport.py] [_log()] server lang: <none>
2026-04-15T21:02:54.017 [DEBUG] [Thread-25691] [transport.py] [_log()] kex follows: False
2026-04-15T21:02:54.017 [DEBUG] [Thread-25691] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:02:54.017 [DEBUG] [Thread-25691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:02:54.017 [DEBUG] [Thread-25691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:02:54.017 [DEBUG] [Thread-25691] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:02:54.017 [DEBUG] [Thread-25691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:02:54.017 [DEBUG] [Thread-25691] [transport.py] [_log()] Compression: none
2026-04-15T21:02:54.017 [DEBUG] [Thread-25691] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:02:54.030 [DEBUG] [Thread-25691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:02:54.030 [DEBUG] [Thread-25691] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:02:54.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:02:54.031 [DEBUG] [Thread-25691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:02:54.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:02:54.031 [DEBUG] [Thread-25691] [transport.py] [_log()] userauth is OK
2026-04-15T21:02:54.032 [DEBUG] [Thread-25691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:02:54.032 [DEBUG] [Thread-25691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:02:54.032 [DEBUG] [Thread-25691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:02:54.032 [DEBUG] [Thread-25691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:02:54.049 [INFO] [Thread-25691] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:02:54.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:02:54.700 [DEBUG] [Thread-25691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:02:54.701 [DEBUG] [Thread-25691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:02:54.701 [DEBUG] [Thread-25691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:02:54.741 [DEBUG] [Thread-25691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:02:54.741 [DEBUG] [Thread-25691] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:02:54.744 [DEBUG] [Thread-25691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:02:54.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:02:54.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:02:54.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:02:54.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:02:54.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:02:54.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:02:54.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:02:54.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:02:54.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:02:54.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.793534 -999.00   +9.70   6.88     78   +6.20 1 1 1 1 1     0    0 3.57 6.29 ZNESW 6.8 6.9 284.6 8.4 10.2 -24.6 10.1 -23.3 9.9 -21.2 10.1 -23.4
2026-04-15T21:02:54.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:02:54.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:02:54.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.793534
2026-04-15T21:02:54.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:02:54.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:02:54.769 [DEBUG] [Thread-25691] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:02:54.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:02:54.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:02:54.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:02:54.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:02:19', tmtdew=4.07222, humidity=75.6852, cloud=0.0, wind=5.71788, temperature=9.52493, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:02:19', seeing=2.08, atlas_timestamp='2026-04-15T19:02:41.338', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0002500000000011937, -0.05074999999999896, -0.05150000000000077, -0.030000000000001137, -0.011749999999999261, 0.019000000000000128, -0.012750000000000483, 0.05749999999999922, 0.002000000000000668, -0.01875000000000071, -0.008000000000000895, 0.036999999999999034, 0.012249999999999872, 0.03799999999999848, 0.0009999999999994458, 0.03474999999999895, 0.0005000000000006111, -0.002000000000000668, 0.0017499999999994742, 0.03999999999999915, 0.060249999999999915, 0.014749999999999375, 0.06274999999999942, 0.08699999999999974, -0.028999999999999915, -0.005250000000000199, 0.02850000000000108, 0.027000000000001023, -0.008499999999997954, 0.031000000000000583, 0.08700000000000152, 0.004749999999999588], zp_timestamp='2026-04-15T19:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:02:55.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:02:55.032 [DEBUG] [Thread-25694] [transport.py] [_log()] starting thread (client mode): 0xf1367700
2026-04-15T21:02:55.033 [DEBUG] [Thread-25694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:02:55.047 [DEBUG] [Thread-25694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:02:55.048 [INFO] [Thread-25694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:02:55.055 [DEBUG] [Thread-25694] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:02:55.055 [DEBUG] [Thread-25694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:02:55.055 [DEBUG] [Thread-25694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:02:55.055 [DEBUG] [Thread-25694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:02:55.055 [DEBUG] [Thread-25694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:02:55.056 [DEBUG] [Thread-25694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:02:55.056 [DEBUG] [Thread-25694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:02:55.056 [DEBUG] [Thread-25694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:02:55.056 [DEBUG] [Thread-25694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:02:55.056 [DEBUG] [Thread-25694] [transport.py] [_log()] client lang: <none>
2026-04-15T21:02:55.056 [DEBUG] [Thread-25694] [transport.py] [_log()] server lang: <none>
2026-04-15T21:02:55.056 [DEBUG] [Thread-25694] [transport.py] [_log()] kex follows: False
2026-04-15T21:02:55.056 [DEBUG] [Thread-25694] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:02:55.056 [DEBUG] [Thread-25694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:02:55.056 [DEBUG] [Thread-25694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:02:55.056 [DEBUG] [Thread-25694] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:02:55.057 [DEBUG] [Thread-25694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:02:55.057 [DEBUG] [Thread-25694] [transport.py] [_log()] Compression: none
2026-04-15T21:02:55.057 [DEBUG] [Thread-25694] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:02:55.112 [DEBUG] [Thread-25694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:02:55.113 [DEBUG] [Thread-25694] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:02:55.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:02:55.113 [DEBUG] [Thread-25694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:02:55.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:02:55.169 [DEBUG] [Thread-25694] [transport.py] [_log()] userauth is OK
2026-04-15T21:02:55.169 [DEBUG] [Thread-25694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:02:55.170 [DEBUG] [Thread-25694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:02:55.170 [DEBUG] [Thread-25694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:02:55.170 [DEBUG] [Thread-25694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:02:55.195 [INFO] [Thread-25694] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:02:55.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:02:55.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:02:56.014 [DEBUG] [Thread-25694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:02:56.014 [DEBUG] [Thread-25694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:02:56.062 [DEBUG] [Thread-25694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:02:56.062 [DEBUG] [Thread-25694] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:02:56.071 [DEBUG] [Thread-25694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:02:56.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:02:56.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')
2026-04-15T21:02:56.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
2026-04-15T21:02:56.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:02:56.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:02:56.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:02:56.106 [DEBUG] [Thread-25694] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:03:06.595 [DEBUG] [Thread-25696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:03:13.326 [DEBUG] [Thread-25697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:03:21.639 [DEBUG] [Thread-25698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:03:26.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:03:26.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:03:26.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
2026-04-15T21:03:27.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 2, 55), 3.96952, 76.2377, 0.0, 7.7652, 9.64987, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:03:27.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:02:55
2026-04-15T21:03:27.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:03:28.247 [DEBUG] [Thread-25699] [transport.py] [_log()] starting thread (client mode): 0xf1367d00
2026-04-15T21:03:28.247 [DEBUG] [Thread-25699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:03:28.264 [DEBUG] [Thread-25699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:03:28.264 [INFO] [Thread-25699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:03:28.267 [DEBUG] [Thread-25699] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:03:28.267 [DEBUG] [Thread-25699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:03:28.267 [DEBUG] [Thread-25699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:03:28.267 [DEBUG] [Thread-25699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:03:28.267 [DEBUG] [Thread-25699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:03:28.267 [DEBUG] [Thread-25699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:03:28.267 [DEBUG] [Thread-25699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:03:28.267 [DEBUG] [Thread-25699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:03:28.267 [DEBUG] [Thread-25699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:03:28.267 [DEBUG] [Thread-25699] [transport.py] [_log()] client lang: <none>
2026-04-15T21:03:28.268 [DEBUG] [Thread-25699] [transport.py] [_log()] server lang: <none>
2026-04-15T21:03:28.268 [DEBUG] [Thread-25699] [transport.py] [_log()] kex follows: False
2026-04-15T21:03:28.268 [DEBUG] [Thread-25699] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:03:28.268 [DEBUG] [Thread-25699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:03:28.268 [DEBUG] [Thread-25699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:03:28.268 [DEBUG] [Thread-25699] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:03:28.268 [DEBUG] [Thread-25699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:03:28.268 [DEBUG] [Thread-25699] [transport.py] [_log()] Compression: none
2026-04-15T21:03:28.268 [DEBUG] [Thread-25699] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:03:28.285 [DEBUG] [Thread-25699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:03:28.286 [DEBUG] [Thread-25699] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:03:28.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:03:28.287 [DEBUG] [Thread-25699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:03:28.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:03:28.288 [DEBUG] [Thread-25699] [transport.py] [_log()] userauth is OK
2026-04-15T21:03:28.288 [DEBUG] [Thread-25699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:03:28.288 [DEBUG] [Thread-25699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:03:28.289 [DEBUG] [Thread-25699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:03:28.289 [DEBUG] [Thread-25699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:03:28.306 [INFO] [Thread-25699] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:03:28.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:03:28.951 [DEBUG] [Thread-25699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:03:28.951 [DEBUG] [Thread-25699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:03:28.952 [DEBUG] [Thread-25699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:03:28.992 [DEBUG] [Thread-25699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:03:28.992 [DEBUG] [Thread-25699] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:03:28.995 [DEBUG] [Thread-25699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:03:29.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:03:29.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:03:29.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:03:29.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:03:29.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:03:29.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:03:29.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:03:29.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:03:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:03:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.793881 -999.00   +9.70   5.92     78   +6.20 1 1 1 1 1     0    0 3.49 7.35 ZNESW 5.0 5.9 281.4 8.2 10.2 -24.5 10.1 -23.2 9.8 -21.2 10.1 -23.4
2026-04-15T21:03:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:03:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:03:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.793881
2026-04-15T21:03:29.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:03:29.011 [DEBUG] [Thread-25699] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:03:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:03:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:03:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:03:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:03:29.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:02:55', tmtdew=3.96952, humidity=76.2377, cloud=0.0, wind=7.7652, temperature=9.64987, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:02:55', seeing=2.08, atlas_timestamp='2026-04-15T19:03:11.318', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0002500000000011937, -0.05074999999999896, -0.05150000000000077, -0.030000000000001137, -0.011749999999999261, 0.019000000000000128, -0.012750000000000483, 0.05749999999999922, 0.002000000000000668, -0.01875000000000071, -0.008000000000000895, 0.036999999999999034, 0.012249999999999872, 0.03799999999999848, 0.0009999999999994458, 0.03474999999999895, 0.0005000000000006111, -0.002000000000000668, 0.0017499999999994742, 0.03999999999999915, 0.060249999999999915, 0.014749999999999375, 0.06274999999999942, 0.08699999999999974, -0.028999999999999915, -0.005250000000000199, 0.02850000000000108, 0.027000000000001023, -0.008499999999997954, 0.031000000000000583, 0.08700000000000152, 0.004749999999999588], zp_timestamp='2026-04-15T19:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:03:29.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:03:29.269 [DEBUG] [Thread-25702] [transport.py] [_log()] starting thread (client mode): 0xf1366440
2026-04-15T21:03:29.270 [DEBUG] [Thread-25702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:03:29.285 [DEBUG] [Thread-25702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:03:29.285 [INFO] [Thread-25702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:03:29.297 [DEBUG] [Thread-25702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:03:29.297 [DEBUG] [Thread-25702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:03:29.297 [DEBUG] [Thread-25702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:03:29.297 [DEBUG] [Thread-25702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:03:29.297 [DEBUG] [Thread-25702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:03:29.297 [DEBUG] [Thread-25702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:03:29.297 [DEBUG] [Thread-25702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:03:29.298 [DEBUG] [Thread-25702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:03:29.298 [DEBUG] [Thread-25702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:03:29.298 [DEBUG] [Thread-25702] [transport.py] [_log()] client lang: <none>
2026-04-15T21:03:29.298 [DEBUG] [Thread-25702] [transport.py] [_log()] server lang: <none>
2026-04-15T21:03:29.298 [DEBUG] [Thread-25702] [transport.py] [_log()] kex follows: False
2026-04-15T21:03:29.298 [DEBUG] [Thread-25702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:03:29.298 [DEBUG] [Thread-25702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:03:29.298 [DEBUG] [Thread-25702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:03:29.298 [DEBUG] [Thread-25702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:03:29.298 [DEBUG] [Thread-25702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:03:29.298 [DEBUG] [Thread-25702] [transport.py] [_log()] Compression: none
2026-04-15T21:03:29.298 [DEBUG] [Thread-25702] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:03:29.360 [DEBUG] [Thread-25702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:03:29.360 [DEBUG] [Thread-25702] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:03:29.361 [DEBUG] [Thread-25702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:03:29.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:03:29.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:03:29.419 [DEBUG] [Thread-25702] [transport.py] [_log()] userauth is OK
2026-04-15T21:03:29.419 [DEBUG] [Thread-25702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:03:29.419 [DEBUG] [Thread-25702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:03:29.420 [DEBUG] [Thread-25702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:03:29.420 [DEBUG] [Thread-25702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:03:29.446 [INFO] [Thread-25702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:03:29.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:03:29.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:03:30.244 [DEBUG] [Thread-25702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:03:30.244 [DEBUG] [Thread-25702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:03:30.291 [DEBUG] [Thread-25702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:03:30.291 [DEBUG] [Thread-25702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:03:30.300 [DEBUG] [Thread-25702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:03:30.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:03:30.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')
2026-04-15T21:03:30.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') -> 00000000
2026-04-15T21:03:30.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:03:30.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:03:30.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:03:30.332 [DEBUG] [Thread-25702] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:03:36.670 [DEBUG] [Thread-25704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:03:43.693 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:03:43.694 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:03:51.715 [DEBUG] [Thread-25705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:04:00.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:04:00.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:04:00.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
2026-04-15T21:04:01.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 3, 30), 4.13841, 75.6023, 0.0, 8.39988, 9.59153, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:04:01.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:03:30
2026-04-15T21:04:01.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:04:02.448 [DEBUG] [Thread-25706] [transport.py] [_log()] starting thread (client mode): 0xf13e02b0
2026-04-15T21:04:02.448 [DEBUG] [Thread-25706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:04:02.467 [DEBUG] [Thread-25706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:04:02.467 [INFO] [Thread-25706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:04:02.469 [DEBUG] [Thread-25706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:04:02.470 [DEBUG] [Thread-25706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:04:02.470 [DEBUG] [Thread-25706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:04:02.470 [DEBUG] [Thread-25706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:04:02.470 [DEBUG] [Thread-25706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:04:02.470 [DEBUG] [Thread-25706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:04:02.470 [DEBUG] [Thread-25706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:04:02.470 [DEBUG] [Thread-25706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:04:02.470 [DEBUG] [Thread-25706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:04:02.470 [DEBUG] [Thread-25706] [transport.py] [_log()] client lang: <none>
2026-04-15T21:04:02.470 [DEBUG] [Thread-25706] [transport.py] [_log()] server lang: <none>
2026-04-15T21:04:02.470 [DEBUG] [Thread-25706] [transport.py] [_log()] kex follows: False
2026-04-15T21:04:02.470 [DEBUG] [Thread-25706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:04:02.471 [DEBUG] [Thread-25706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:04:02.471 [DEBUG] [Thread-25706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:04:02.471 [DEBUG] [Thread-25706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:04:02.471 [DEBUG] [Thread-25706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:04:02.471 [DEBUG] [Thread-25706] [transport.py] [_log()] Compression: none
2026-04-15T21:04:02.471 [DEBUG] [Thread-25706] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:04:02.485 [DEBUG] [Thread-25706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:04:02.485 [DEBUG] [Thread-25706] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:04:02.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:04:02.486 [DEBUG] [Thread-25706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:04:02.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:04:02.487 [DEBUG] [Thread-25706] [transport.py] [_log()] userauth is OK
2026-04-15T21:04:02.487 [DEBUG] [Thread-25706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:04:02.487 [DEBUG] [Thread-25706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:04:02.487 [DEBUG] [Thread-25706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:04:02.487 [DEBUG] [Thread-25706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:04:02.503 [INFO] [Thread-25706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:04:02.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:04:03.089 [DEBUG] [Thread-25706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:04:03.089 [DEBUG] [Thread-25706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:04:03.090 [DEBUG] [Thread-25706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:04:03.130 [DEBUG] [Thread-25706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:04:03.130 [DEBUG] [Thread-25706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:04:03.133 [DEBUG] [Thread-25706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:04:03.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:04:03.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:04:03.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:04:03.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:04:03.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:04:03.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:04:03.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:04:03.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:04:03.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:04:03.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.794228 -999.00   +9.70   5.81     78   +6.20 1 1 1 1 1     0    0 3.61 8.38 ZNESW 4.5 5.8 279.6 7.1 10.2 -24.7 10.1 -23.2 9.8 -21.3 10.1 -23.4
2026-04-15T21:04:03.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:04:03.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:04:03.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.794228
2026-04-15T21:04:03.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:04:03.154 [DEBUG] [Thread-25706] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:04:03.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:04:03.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:04:03.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:04:03.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:04:03.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:03:30', tmtdew=4.13841, humidity=75.6023, cloud=0.0, wind=8.39988, temperature=9.59153, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:03:30', seeing=2.08, atlas_timestamp='2026-04-15T19:03:41.299', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0002500000000011937, -0.05074999999999896, -0.05150000000000077, -0.030000000000001137, -0.011749999999999261, 0.019000000000000128, -0.012750000000000483, 0.05749999999999922, 0.002000000000000668, -0.01875000000000071, -0.008000000000000895, 0.036999999999999034, 0.012249999999999872, 0.03799999999999848, 0.0009999999999994458, 0.03474999999999895, 0.0005000000000006111, -0.002000000000000668, 0.0017499999999994742, 0.03999999999999915, 0.060249999999999915, 0.014749999999999375, 0.06274999999999942, 0.08699999999999974, -0.028999999999999915, -0.005250000000000199, 0.02850000000000108, 0.027000000000001023, -0.008499999999997954, 0.031000000000000583, 0.08700000000000152, 0.004749999999999588], zp_timestamp='2026-04-15T19:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:04:03.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:04:03.412 [DEBUG] [Thread-25709] [transport.py] [_log()] starting thread (client mode): 0xf13e3d90
2026-04-15T21:04:03.412 [DEBUG] [Thread-25709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:04:03.427 [DEBUG] [Thread-25709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:04:03.427 [INFO] [Thread-25709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:04:03.434 [DEBUG] [Thread-25709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:04:03.434 [DEBUG] [Thread-25709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:04:03.434 [DEBUG] [Thread-25709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:04:03.434 [DEBUG] [Thread-25709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:04:03.434 [DEBUG] [Thread-25709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:04:03.434 [DEBUG] [Thread-25709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:04:03.435 [DEBUG] [Thread-25709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:04:03.435 [DEBUG] [Thread-25709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:04:03.435 [DEBUG] [Thread-25709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:04:03.435 [DEBUG] [Thread-25709] [transport.py] [_log()] client lang: <none>
2026-04-15T21:04:03.435 [DEBUG] [Thread-25709] [transport.py] [_log()] server lang: <none>
2026-04-15T21:04:03.435 [DEBUG] [Thread-25709] [transport.py] [_log()] kex follows: False
2026-04-15T21:04:03.435 [DEBUG] [Thread-25709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:04:03.435 [DEBUG] [Thread-25709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:04:03.435 [DEBUG] [Thread-25709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:04:03.435 [DEBUG] [Thread-25709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:04:03.435 [DEBUG] [Thread-25709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:04:03.436 [DEBUG] [Thread-25709] [transport.py] [_log()] Compression: none
2026-04-15T21:04:03.436 [DEBUG] [Thread-25709] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:04:03.492 [DEBUG] [Thread-25709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:04:03.493 [DEBUG] [Thread-25709] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:04:03.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:04:03.494 [DEBUG] [Thread-25709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:04:03.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:04:03.549 [DEBUG] [Thread-25709] [transport.py] [_log()] userauth is OK
2026-04-15T21:04:03.549 [DEBUG] [Thread-25709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:04:03.550 [DEBUG] [Thread-25709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:04:03.550 [DEBUG] [Thread-25709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:04:03.550 [DEBUG] [Thread-25709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:04:03.575 [INFO] [Thread-25709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:04:03.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:04:03.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:04:04.401 [DEBUG] [Thread-25709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:04:04.401 [DEBUG] [Thread-25709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:04:04.449 [DEBUG] [Thread-25709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:04:04.449 [DEBUG] [Thread-25709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:04:04.458 [DEBUG] [Thread-25709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:04:04.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:04:04.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')
2026-04-15T21:04:04.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
2026-04-15T21:04:04.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:04:04.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:04:04.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:04:04.493 [DEBUG] [Thread-25709] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:04:06.746 [DEBUG] [Thread-25711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:04:13.476 [DEBUG] [Thread-25712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:04:21.789 [DEBUG] [Thread-25713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:04:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:04:34.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:04:34.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
2026-04-15T21:04:35.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 4, 6), 4.14256, 75.5857, 0.0, 8.06472, 9.62471, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:04:35.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:04:06
2026-04-15T21:04:36.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:04:36.595 [DEBUG] [Thread-25714] [transport.py] [_log()] starting thread (client mode): 0xf1352dd0
2026-04-15T21:04:36.595 [DEBUG] [Thread-25714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:04:36.613 [DEBUG] [Thread-25714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:04:36.613 [INFO] [Thread-25714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:04:36.616 [DEBUG] [Thread-25714] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:04:36.616 [DEBUG] [Thread-25714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:04:36.616 [DEBUG] [Thread-25714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:04:36.616 [DEBUG] [Thread-25714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:04:36.616 [DEBUG] [Thread-25714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:04:36.616 [DEBUG] [Thread-25714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:04:36.617 [DEBUG] [Thread-25714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:04:36.617 [DEBUG] [Thread-25714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:04:36.617 [DEBUG] [Thread-25714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:04:36.617 [DEBUG] [Thread-25714] [transport.py] [_log()] client lang: <none>
2026-04-15T21:04:36.617 [DEBUG] [Thread-25714] [transport.py] [_log()] server lang: <none>
2026-04-15T21:04:36.617 [DEBUG] [Thread-25714] [transport.py] [_log()] kex follows: False
2026-04-15T21:04:36.617 [DEBUG] [Thread-25714] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:04:36.617 [DEBUG] [Thread-25714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:04:36.617 [DEBUG] [Thread-25714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:04:36.617 [DEBUG] [Thread-25714] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:04:36.618 [DEBUG] [Thread-25714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:04:36.618 [DEBUG] [Thread-25714] [transport.py] [_log()] Compression: none
2026-04-15T21:04:36.618 [DEBUG] [Thread-25714] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:04:36.626 [DEBUG] [Thread-25714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:04:36.626 [DEBUG] [Thread-25714] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:04:36.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:04:36.627 [DEBUG] [Thread-25714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:04:36.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:04:36.628 [DEBUG] [Thread-25714] [transport.py] [_log()] userauth is OK
2026-04-15T21:04:36.628 [DEBUG] [Thread-25714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:04:36.628 [DEBUG] [Thread-25714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:04:36.628 [DEBUG] [Thread-25714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:04:36.628 [DEBUG] [Thread-25714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:04:36.643 [INFO] [Thread-25714] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:04:36.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:04:36.821 [DEBUG] [Thread-25716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:04:37.270 [DEBUG] [Thread-25714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:04:37.270 [DEBUG] [Thread-25714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:04:37.271 [DEBUG] [Thread-25714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:04:37.311 [DEBUG] [Thread-25714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:04:37.311 [DEBUG] [Thread-25714] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:04:37.314 [DEBUG] [Thread-25714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:04:37.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:04:37.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:04:37.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:04:37.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:04:37.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:04:37.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:04:37.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:04:37.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:04:37.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:04:37.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.794576 -999.00   +9.70   6.57     78   +6.20 1 1 1 1 1     0    0 3.59 8.73 ZNESW 5.8 6.6 285.2 8.3 10.2 -24.6 10.1 -23.3 9.8 -21.3 10.1 -23.3
2026-04-15T21:04:37.337 [DEBUG] [Thread-25714] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:04:37.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:04:37.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:04:37.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.794576
2026-04-15T21:04:37.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:04:37.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:04:37.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:04:37.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:04:37.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:04:37.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:04:06', tmtdew=4.14256, humidity=75.5857, cloud=0.0, wind=8.06472, temperature=9.62471, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:04:06', seeing=2.08, atlas_timestamp='2026-04-15T19:04:11.366', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0002500000000011937, -0.05074999999999896, -0.05150000000000077, -0.030000000000001137, -0.011749999999999261, 0.019000000000000128, -0.012750000000000483, 0.05749999999999922, 0.002000000000000668, -0.01875000000000071, -0.008000000000000895, 0.036999999999999034, 0.012249999999999872, 0.03799999999999848, 0.0009999999999994458, 0.03474999999999895, 0.0005000000000006111, -0.002000000000000668, 0.0017499999999994742, 0.03999999999999915, 0.060249999999999915, 0.014749999999999375, 0.06274999999999942, 0.08699999999999974, -0.028999999999999915, -0.005250000000000199, 0.02850000000000108, 0.027000000000001023, -0.008499999999997954, 0.031000000000000583, 0.08700000000000152, 0.004749999999999588], zp_timestamp='2026-04-15T19:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:04:37.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:04:37.599 [DEBUG] [Thread-25718] [transport.py] [_log()] starting thread (client mode): 0xee9c38e0
2026-04-15T21:04:37.599 [DEBUG] [Thread-25718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:04:37.614 [DEBUG] [Thread-25718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:04:37.614 [INFO] [Thread-25718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:04:37.621 [DEBUG] [Thread-25718] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:04:37.621 [DEBUG] [Thread-25718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:04:37.621 [DEBUG] [Thread-25718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:04:37.621 [DEBUG] [Thread-25718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:04:37.621 [DEBUG] [Thread-25718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:04:37.621 [DEBUG] [Thread-25718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:04:37.622 [DEBUG] [Thread-25718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:04:37.622 [DEBUG] [Thread-25718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:04:37.622 [DEBUG] [Thread-25718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:04:37.622 [DEBUG] [Thread-25718] [transport.py] [_log()] client lang: <none>
2026-04-15T21:04:37.622 [DEBUG] [Thread-25718] [transport.py] [_log()] server lang: <none>
2026-04-15T21:04:37.622 [DEBUG] [Thread-25718] [transport.py] [_log()] kex follows: False
2026-04-15T21:04:37.622 [DEBUG] [Thread-25718] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:04:37.622 [DEBUG] [Thread-25718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:04:37.622 [DEBUG] [Thread-25718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:04:37.622 [DEBUG] [Thread-25718] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:04:37.622 [DEBUG] [Thread-25718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:04:37.623 [DEBUG] [Thread-25718] [transport.py] [_log()] Compression: none
2026-04-15T21:04:37.623 [DEBUG] [Thread-25718] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:04:37.676 [DEBUG] [Thread-25718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:04:37.677 [DEBUG] [Thread-25718] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:04:37.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:04:37.678 [DEBUG] [Thread-25718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:04:37.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:04:37.733 [DEBUG] [Thread-25718] [transport.py] [_log()] userauth is OK
2026-04-15T21:04:37.733 [DEBUG] [Thread-25718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:04:37.734 [DEBUG] [Thread-25718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:04:37.734 [DEBUG] [Thread-25718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:04:37.734 [DEBUG] [Thread-25718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:04:37.765 [INFO] [Thread-25718] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:04:37.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:04:37.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:04:38.577 [DEBUG] [Thread-25718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:04:38.578 [DEBUG] [Thread-25718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:04:38.624 [DEBUG] [Thread-25718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:04:38.624 [DEBUG] [Thread-25718] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:04:38.633 [DEBUG] [Thread-25718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:04:38.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:04:38.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')
2026-04-15T21:04:38.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
2026-04-15T21:04:38.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:04:38.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:04:38.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:04:38.666 [DEBUG] [Thread-25718] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:04:43.897 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:04:43.898 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:04:51.851 [DEBUG] [Thread-25720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:05:01.581 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:05:04.778 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:05:06.896 [DEBUG] [Thread-25721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:05:08.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:05:08.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:05:08.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:05:09.801 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:05:09.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 4, 41), 3.98939, 76.1382, 0.0, 7.30656, 9.68307, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:05:09.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:04:41
2026-04-15T21:05:10.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:05:10.754 [DEBUG] [Thread-25722] [transport.py] [_log()] starting thread (client mode): 0xee9c3100
2026-04-15T21:05:10.754 [DEBUG] [Thread-25722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:05:10.774 [DEBUG] [Thread-25722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:05:10.774 [INFO] [Thread-25722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:05:10.776 [DEBUG] [Thread-25722] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:05:10.776 [DEBUG] [Thread-25722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:05:10.776 [DEBUG] [Thread-25722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:05:10.776 [DEBUG] [Thread-25722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:05:10.776 [DEBUG] [Thread-25722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:05:10.776 [DEBUG] [Thread-25722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:05:10.776 [DEBUG] [Thread-25722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:05:10.777 [DEBUG] [Thread-25722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:05:10.777 [DEBUG] [Thread-25722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:05:10.777 [DEBUG] [Thread-25722] [transport.py] [_log()] client lang: <none>
2026-04-15T21:05:10.777 [DEBUG] [Thread-25722] [transport.py] [_log()] server lang: <none>
2026-04-15T21:05:10.777 [DEBUG] [Thread-25722] [transport.py] [_log()] kex follows: False
2026-04-15T21:05:10.777 [DEBUG] [Thread-25722] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:05:10.777 [DEBUG] [Thread-25722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:05:10.777 [DEBUG] [Thread-25722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:05:10.777 [DEBUG] [Thread-25722] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:05:10.777 [DEBUG] [Thread-25722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:05:10.778 [DEBUG] [Thread-25722] [transport.py] [_log()] Compression: none
2026-04-15T21:05:10.778 [DEBUG] [Thread-25722] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:05:10.791 [DEBUG] [Thread-25722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:05:10.792 [DEBUG] [Thread-25722] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:05:10.792 [DEBUG] [Thread-25722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:05:10.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:05:10.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:05:10.793 [DEBUG] [Thread-25722] [transport.py] [_log()] userauth is OK
2026-04-15T21:05:10.793 [DEBUG] [Thread-25722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:05:10.794 [DEBUG] [Thread-25722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:05:10.794 [DEBUG] [Thread-25722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:05:10.794 [DEBUG] [Thread-25722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:05:10.815 [INFO] [Thread-25722] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:05:10.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:05:13.476 [DEBUG] [Thread-25722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:05:13.476 [DEBUG] [Thread-25722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:05:13.477 [DEBUG] [Thread-25722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:05:13.517 [DEBUG] [Thread-25722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:05:13.517 [DEBUG] [Thread-25722] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:05:13.519 [DEBUG] [Thread-25722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:05:13.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:05:13.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:05:13.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:05:13.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:05:13.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:05:13.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:05:13.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:05:13.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:05:13.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:05:13.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.794576 -999.00   +9.70   6.57     78   +6.20 1 1 1 1 1     0    0 3.59 8.73 ZNESW 5.8 6.6 285.2 8.3 10.2 -24.6 10.1 -23.3 9.8 -21.3 10.1 -23.3
2026-04-15T21:05:13.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:05:13.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:05:13.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.794576
2026-04-15T21:05:13.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:05:13.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:05:13.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:05:13.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:05:13.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:05:13.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:04:41', tmtdew=3.98939, humidity=76.1382, cloud=0.0, wind=7.30656, temperature=9.68307, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:04:41', seeing=2.08, atlas_timestamp='2026-04-15T19:04:11.366', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0002500000000011937, -0.05074999999999896, -0.05150000000000077, -0.030000000000001137, -0.011749999999999261, 0.019000000000000128, -0.012750000000000483, 0.05749999999999922, 0.002000000000000668, -0.01875000000000071, -0.008000000000000895, 0.036999999999999034, 0.012249999999999872, 0.03799999999999848, 0.0009999999999994458, 0.03474999999999895, 0.0005000000000006111, -0.002000000000000668, 0.0017499999999994742, 0.03999999999999915, 0.060249999999999915, 0.014749999999999375, 0.06274999999999942, 0.08699999999999974, -0.028999999999999915, -0.005250000000000199, 0.02850000000000108, 0.027000000000001023, -0.008499999999997954, 0.031000000000000583, 0.08700000000000152, 0.004749999999999588], zp_timestamp='2026-04-15T19:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:05:13.577 [DEBUG] [Thread-25722] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:05:13.628 [DEBUG] [Thread-25725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:05:13.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:05:13.793 [DEBUG] [Thread-25726] [transport.py] [_log()] starting thread (client mode): 0xf13cb340
2026-04-15T21:05:13.793 [DEBUG] [Thread-25726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:05:13.809 [DEBUG] [Thread-25726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:05:13.809 [INFO] [Thread-25726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:05:13.820 [DEBUG] [Thread-25726] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:05:13.820 [DEBUG] [Thread-25726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:05:13.820 [DEBUG] [Thread-25726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:05:13.821 [DEBUG] [Thread-25726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:05:13.821 [DEBUG] [Thread-25726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:05:13.821 [DEBUG] [Thread-25726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:05:13.821 [DEBUG] [Thread-25726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:05:13.821 [DEBUG] [Thread-25726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:05:13.821 [DEBUG] [Thread-25726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:05:13.821 [DEBUG] [Thread-25726] [transport.py] [_log()] client lang: <none>
2026-04-15T21:05:13.821 [DEBUG] [Thread-25726] [transport.py] [_log()] server lang: <none>
2026-04-15T21:05:13.821 [DEBUG] [Thread-25726] [transport.py] [_log()] kex follows: False
2026-04-15T21:05:13.821 [DEBUG] [Thread-25726] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:05:13.821 [DEBUG] [Thread-25726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:05:13.822 [DEBUG] [Thread-25726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:05:13.822 [DEBUG] [Thread-25726] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:05:13.822 [DEBUG] [Thread-25726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:05:13.822 [DEBUG] [Thread-25726] [transport.py] [_log()] Compression: none
2026-04-15T21:05:13.822 [DEBUG] [Thread-25726] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:05:13.876 [DEBUG] [Thread-25726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:05:13.877 [DEBUG] [Thread-25726] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:05:13.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:05:13.877 [DEBUG] [Thread-25726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:05:13.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:05:13.933 [DEBUG] [Thread-25726] [transport.py] [_log()] userauth is OK
2026-04-15T21:05:13.934 [DEBUG] [Thread-25726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:05:13.934 [DEBUG] [Thread-25726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:05:13.934 [DEBUG] [Thread-25726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:05:13.934 [DEBUG] [Thread-25726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:05:13.964 [INFO] [Thread-25726] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:05:13.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:05:13.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:05:14.747 [DEBUG] [Thread-25726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:05:14.747 [DEBUG] [Thread-25726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:05:14.795 [DEBUG] [Thread-25726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:05:14.795 [DEBUG] [Thread-25726] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:05:14.804 [DEBUG] [Thread-25726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:05:14.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:05:14.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')
2026-04-15T21:05:14.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
2026-04-15T21:05:14.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:05:14.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:05:14.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:05:14.840 [DEBUG] [Thread-25726] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:05:15.175 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:05:21.925 [DEBUG] [Thread-25728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:05:34.663 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:05:36.962 [DEBUG] [Thread-25729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:05:39.045 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:05:44.100 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:05:44.102 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:05:44.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:05:44.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:05:44.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
2026-04-15T21:05:46.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 5, 17), 4.13061, 75.1355, 0.0, 7.46496, 9.54177, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:05:46.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:05:17
2026-04-15T21:05:46.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:05:46.994 [DEBUG] [Thread-25730] [transport.py] [_log()] starting thread (client mode): 0xee9c2950
2026-04-15T21:05:46.995 [DEBUG] [Thread-25730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:05:47.013 [DEBUG] [Thread-25730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:05:47.013 [INFO] [Thread-25730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:05:47.016 [DEBUG] [Thread-25730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:05:47.016 [DEBUG] [Thread-25730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:05:47.016 [DEBUG] [Thread-25730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:05:47.016 [DEBUG] [Thread-25730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:05:47.016 [DEBUG] [Thread-25730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:05:47.016 [DEBUG] [Thread-25730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:05:47.016 [DEBUG] [Thread-25730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:05:47.016 [DEBUG] [Thread-25730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:05:47.016 [DEBUG] [Thread-25730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:05:47.016 [DEBUG] [Thread-25730] [transport.py] [_log()] client lang: <none>
2026-04-15T21:05:47.017 [DEBUG] [Thread-25730] [transport.py] [_log()] server lang: <none>
2026-04-15T21:05:47.017 [DEBUG] [Thread-25730] [transport.py] [_log()] kex follows: False
2026-04-15T21:05:47.017 [DEBUG] [Thread-25730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:05:47.017 [DEBUG] [Thread-25730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:05:47.017 [DEBUG] [Thread-25730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:05:47.017 [DEBUG] [Thread-25730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:05:47.017 [DEBUG] [Thread-25730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:05:47.017 [DEBUG] [Thread-25730] [transport.py] [_log()] Compression: none
2026-04-15T21:05:47.017 [DEBUG] [Thread-25730] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:05:47.036 [DEBUG] [Thread-25730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:05:47.036 [DEBUG] [Thread-25730] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:05:47.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:05:47.037 [DEBUG] [Thread-25730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:05:47.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:05:47.038 [DEBUG] [Thread-25730] [transport.py] [_log()] userauth is OK
2026-04-15T21:05:47.038 [DEBUG] [Thread-25730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:05:47.038 [DEBUG] [Thread-25730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:05:47.038 [DEBUG] [Thread-25730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:05:47.038 [DEBUG] [Thread-25730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:05:47.061 [INFO] [Thread-25730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:05:47.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:05:47.854 [DEBUG] [Thread-25730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:05:47.855 [DEBUG] [Thread-25730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:05:47.855 [DEBUG] [Thread-25730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:05:47.895 [DEBUG] [Thread-25730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:05:47.895 [DEBUG] [Thread-25730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:05:47.898 [DEBUG] [Thread-25730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:05:47.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:05:47.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:05:47.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:05:47.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:05:47.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:05:47.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:05:47.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:05:47.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:05:47.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:05:47.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.794923 -999.00   +9.70   6.04     78   +6.10 1 1 1 1 1     0    0 3.68 10.26 ZNESW 5.9 6.0 301.8 8.1 10.2 -24.6 10.1 -23.2 9.8 -21.3 10.1 -23.4
2026-04-15T21:05:47.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:05:47.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:05:47.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.794923
2026-04-15T21:05:47.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:05:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:05:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:05:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:05:47.926 [DEBUG] [Thread-25730] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:05:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:05:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:05:17', tmtdew=4.13061, humidity=75.1355, cloud=0.0, wind=7.46496, temperature=9.54177, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:04:41.347', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0002500000000011937, -0.05074999999999896, -0.05150000000000077, -0.030000000000001137, -0.011749999999999261, 0.019000000000000128, -0.012750000000000483, 0.05749999999999922, 0.002000000000000668, -0.01875000000000071, -0.008000000000000895, 0.036999999999999034, 0.012249999999999872, 0.03799999999999848, 0.0009999999999994458, 0.03474999999999895, 0.0005000000000006111, -0.002000000000000668, 0.0017499999999994742, 0.03999999999999915, 0.060249999999999915, 0.014749999999999375, 0.06274999999999942, 0.08699999999999974, -0.028999999999999915, -0.005250000000000199, 0.02850000000000108, 0.027000000000001023, -0.008499999999997954, 0.031000000000000583, 0.08700000000000152, 0.004749999999999588], zp_timestamp='2026-04-15T19:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:05:48.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:05:48.184 [DEBUG] [Thread-25733] [transport.py] [_log()] starting thread (client mode): 0xf1366cb0
2026-04-15T21:05:48.184 [DEBUG] [Thread-25733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:05:48.201 [DEBUG] [Thread-25733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:05:48.201 [INFO] [Thread-25733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:05:48.212 [DEBUG] [Thread-25733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:05:48.213 [DEBUG] [Thread-25733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:05:48.213 [DEBUG] [Thread-25733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:05:48.213 [DEBUG] [Thread-25733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:05:48.213 [DEBUG] [Thread-25733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:05:48.213 [DEBUG] [Thread-25733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:05:48.213 [DEBUG] [Thread-25733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:05:48.213 [DEBUG] [Thread-25733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:05:48.213 [DEBUG] [Thread-25733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:05:48.213 [DEBUG] [Thread-25733] [transport.py] [_log()] client lang: <none>
2026-04-15T21:05:48.213 [DEBUG] [Thread-25733] [transport.py] [_log()] server lang: <none>
2026-04-15T21:05:48.213 [DEBUG] [Thread-25733] [transport.py] [_log()] kex follows: False
2026-04-15T21:05:48.214 [DEBUG] [Thread-25733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:05:48.214 [DEBUG] [Thread-25733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:05:48.214 [DEBUG] [Thread-25733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:05:48.214 [DEBUG] [Thread-25733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:05:48.214 [DEBUG] [Thread-25733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:05:48.214 [DEBUG] [Thread-25733] [transport.py] [_log()] Compression: none
2026-04-15T21:05:48.214 [DEBUG] [Thread-25733] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:05:48.269 [DEBUG] [Thread-25733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:05:48.269 [DEBUG] [Thread-25733] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:05:48.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:05:48.270 [DEBUG] [Thread-25733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:05:48.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:05:48.326 [DEBUG] [Thread-25733] [transport.py] [_log()] userauth is OK
2026-04-15T21:05:48.326 [DEBUG] [Thread-25733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:05:48.326 [DEBUG] [Thread-25733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:05:48.326 [DEBUG] [Thread-25733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:05:48.326 [DEBUG] [Thread-25733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:05:48.354 [INFO] [Thread-25733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:05:48.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:05:48.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:05:49.161 [DEBUG] [Thread-25733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:05:49.161 [DEBUG] [Thread-25733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:05:49.209 [DEBUG] [Thread-25733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:05:49.209 [DEBUG] [Thread-25733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:05:49.218 [DEBUG] [Thread-25733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:05:49.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:05:49.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')
2026-04-15T21:05:49.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
2026-04-15T21:05:49.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:05:49.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:05:49.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:05:49.256 [DEBUG] [Thread-25733] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:05:51.993 [DEBUG] [Thread-25735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:05:58.573 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:06:02.959 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:06:07.037 [DEBUG] [Thread-25736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:06:09.085 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:06:13.452 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:06:13.776 [DEBUG] [Thread-25737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:06:19.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:06:19.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:06:19.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:06:20.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 5, 52), 3.96952, 76.2377, 0.0, 8.08272, 9.64991, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:06:20.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:05:52
2026-04-15T21:06:20.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:06:21.360 [DEBUG] [Thread-25738] [transport.py] [_log()] starting thread (client mode): 0xf13e2770
2026-04-15T21:06:21.360 [DEBUG] [Thread-25738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:06:21.381 [DEBUG] [Thread-25738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:06:21.381 [INFO] [Thread-25738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:06:21.385 [DEBUG] [Thread-25738] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:06:21.385 [DEBUG] [Thread-25738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:06:21.385 [DEBUG] [Thread-25738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:06:21.385 [DEBUG] [Thread-25738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:06:21.385 [DEBUG] [Thread-25738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:06:21.385 [DEBUG] [Thread-25738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:06:21.385 [DEBUG] [Thread-25738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:06:21.385 [DEBUG] [Thread-25738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:06:21.385 [DEBUG] [Thread-25738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:06:21.385 [DEBUG] [Thread-25738] [transport.py] [_log()] client lang: <none>
2026-04-15T21:06:21.385 [DEBUG] [Thread-25738] [transport.py] [_log()] server lang: <none>
2026-04-15T21:06:21.385 [DEBUG] [Thread-25738] [transport.py] [_log()] kex follows: False
2026-04-15T21:06:21.386 [DEBUG] [Thread-25738] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:06:21.386 [DEBUG] [Thread-25738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:06:21.386 [DEBUG] [Thread-25738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:06:21.386 [DEBUG] [Thread-25738] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:06:21.386 [DEBUG] [Thread-25738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:06:21.386 [DEBUG] [Thread-25738] [transport.py] [_log()] Compression: none
2026-04-15T21:06:21.386 [DEBUG] [Thread-25738] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:06:21.403 [DEBUG] [Thread-25738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:06:21.403 [DEBUG] [Thread-25738] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:06:21.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:06:21.404 [DEBUG] [Thread-25738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:06:21.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:06:21.405 [DEBUG] [Thread-25738] [transport.py] [_log()] userauth is OK
2026-04-15T21:06:21.405 [DEBUG] [Thread-25738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:06:21.406 [DEBUG] [Thread-25738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:06:21.406 [DEBUG] [Thread-25738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:06:21.406 [DEBUG] [Thread-25738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:06:21.442 [INFO] [Thread-25738] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:06:21.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:06:22.065 [DEBUG] [Thread-25740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:06:22.243 [DEBUG] [Thread-25738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:06:22.243 [DEBUG] [Thread-25738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:06:22.244 [DEBUG] [Thread-25738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:06:22.284 [DEBUG] [Thread-25738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:06:22.284 [DEBUG] [Thread-25738] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:06:22.287 [DEBUG] [Thread-25738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:06:22.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:06:22.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:06:22.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:06:22.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:06:22.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:06:22.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:06:22.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:06:22.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:06:22.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:06:22.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.795617 -999.00   +9.50   6.00     79   +6.10 1 1 1 1 1     0    0 3.73 11.68 ZNESW 6.2 6.0 308.2 6.6 10.2 -24.6 10.1 -23.3 9.8 -21.3 10.1 -23.3
2026-04-15T21:06:22.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:06:22.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:06:22.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.795617
2026-04-15T21:06:22.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:06:22.310 [DEBUG] [Thread-25738] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:06:22.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:06:22.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:06:22.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:06:22.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:06:22.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:05:52', tmtdew=3.96952, humidity=76.2377, cloud=0.0, wind=8.08272, temperature=9.64991, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:05:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0002500000000011937, -0.05074999999999896, -0.05150000000000077, -0.030000000000001137, -0.011749999999999261, 0.019000000000000128, -0.012750000000000483, 0.05749999999999922, 0.002000000000000668, -0.01875000000000071, -0.008000000000000895, 0.036999999999999034, 0.012249999999999872, 0.03799999999999848, 0.0009999999999994458, 0.03474999999999895, 0.0005000000000006111, -0.002000000000000668, 0.0017499999999994742, 0.03999999999999915, 0.060249999999999915, 0.014749999999999375, 0.06274999999999942, 0.08699999999999974, -0.028999999999999915, -0.005250000000000199, 0.02850000000000108, 0.027000000000001023, -0.008499999999997954, 0.031000000000000583, 0.08700000000000152, 0.004749999999999588], zp_timestamp='2026-04-15T19:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:06:22.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:06:22.543 [DEBUG] [Thread-25742] [transport.py] [_log()] starting thread (client mode): 0xf13e1d20
2026-04-15T21:06:22.544 [DEBUG] [Thread-25742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:06:22.558 [DEBUG] [Thread-25742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:06:22.558 [INFO] [Thread-25742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:06:22.565 [DEBUG] [Thread-25742] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:06:22.565 [DEBUG] [Thread-25742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:06:22.565 [DEBUG] [Thread-25742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:06:22.565 [DEBUG] [Thread-25742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:06:22.565 [DEBUG] [Thread-25742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:06:22.565 [DEBUG] [Thread-25742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:06:22.566 [DEBUG] [Thread-25742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:06:22.566 [DEBUG] [Thread-25742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:06:22.566 [DEBUG] [Thread-25742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:06:22.566 [DEBUG] [Thread-25742] [transport.py] [_log()] client lang: <none>
2026-04-15T21:06:22.566 [DEBUG] [Thread-25742] [transport.py] [_log()] server lang: <none>
2026-04-15T21:06:22.566 [DEBUG] [Thread-25742] [transport.py] [_log()] kex follows: False
2026-04-15T21:06:22.566 [DEBUG] [Thread-25742] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:06:22.566 [DEBUG] [Thread-25742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:06:22.566 [DEBUG] [Thread-25742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:06:22.566 [DEBUG] [Thread-25742] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:06:22.566 [DEBUG] [Thread-25742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:06:22.566 [DEBUG] [Thread-25742] [transport.py] [_log()] Compression: none
2026-04-15T21:06:22.566 [DEBUG] [Thread-25742] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:06:22.625 [DEBUG] [Thread-25742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:06:22.625 [DEBUG] [Thread-25742] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:06:22.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:06:22.626 [DEBUG] [Thread-25742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:06:22.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:06:22.682 [DEBUG] [Thread-25742] [transport.py] [_log()] userauth is OK
2026-04-15T21:06:22.682 [DEBUG] [Thread-25742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:06:22.682 [DEBUG] [Thread-25742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:06:22.682 [DEBUG] [Thread-25742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:06:22.683 [DEBUG] [Thread-25742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:06:22.707 [INFO] [Thread-25742] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:06:22.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:06:22.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:06:23.510 [DEBUG] [Thread-25742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:06:23.510 [DEBUG] [Thread-25742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:06:23.557 [DEBUG] [Thread-25742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:06:23.558 [DEBUG] [Thread-25742] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:06:23.566 [DEBUG] [Thread-25742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:06:23.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:06:23.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')
2026-04-15T21:06:23.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T21:06:23.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:06:23.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:06:23.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:06:23.602 [DEBUG] [Thread-25742] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:06:37.096 [DEBUG] [Thread-25744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:06:44.303 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:06:44.303 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:06:52.139 [DEBUG] [Thread-25745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:06:53.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:06:53.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:06:53.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
2026-04-15T21:06:54.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 6, 28), 4.18374, 75.1189, 0.0, 6.6006, 9.54179, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:06:54.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:06:28
2026-04-15T21:06:55.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:06:55.709 [DEBUG] [Thread-25746] [transport.py] [_log()] starting thread (client mode): 0xf13c86a0
2026-04-15T21:06:55.710 [DEBUG] [Thread-25746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:06:55.729 [DEBUG] [Thread-25746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:06:55.729 [INFO] [Thread-25746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:06:55.732 [DEBUG] [Thread-25746] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:06:55.732 [DEBUG] [Thread-25746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:06:55.732 [DEBUG] [Thread-25746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:06:55.732 [DEBUG] [Thread-25746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:06:55.732 [DEBUG] [Thread-25746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:06:55.732 [DEBUG] [Thread-25746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:06:55.732 [DEBUG] [Thread-25746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:06:55.732 [DEBUG] [Thread-25746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:06:55.732 [DEBUG] [Thread-25746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:06:55.732 [DEBUG] [Thread-25746] [transport.py] [_log()] client lang: <none>
2026-04-15T21:06:55.733 [DEBUG] [Thread-25746] [transport.py] [_log()] server lang: <none>
2026-04-15T21:06:55.733 [DEBUG] [Thread-25746] [transport.py] [_log()] kex follows: False
2026-04-15T21:06:55.733 [DEBUG] [Thread-25746] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:06:55.733 [DEBUG] [Thread-25746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:06:55.733 [DEBUG] [Thread-25746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:06:55.733 [DEBUG] [Thread-25746] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:06:55.733 [DEBUG] [Thread-25746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:06:55.733 [DEBUG] [Thread-25746] [transport.py] [_log()] Compression: none
2026-04-15T21:06:55.733 [DEBUG] [Thread-25746] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:06:55.749 [DEBUG] [Thread-25746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:06:55.750 [DEBUG] [Thread-25746] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:06:55.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:06:55.750 [DEBUG] [Thread-25746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:06:55.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:06:55.751 [DEBUG] [Thread-25746] [transport.py] [_log()] userauth is OK
2026-04-15T21:06:55.751 [DEBUG] [Thread-25746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:06:55.751 [DEBUG] [Thread-25746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:06:55.752 [DEBUG] [Thread-25746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:06:55.752 [DEBUG] [Thread-25746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:06:55.775 [INFO] [Thread-25746] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:06:55.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:06:56.590 [DEBUG] [Thread-25746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:06:56.591 [DEBUG] [Thread-25746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:06:56.591 [DEBUG] [Thread-25746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:06:56.631 [DEBUG] [Thread-25746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:06:56.631 [DEBUG] [Thread-25746] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:06:56.634 [DEBUG] [Thread-25746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:06:56.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:06:56.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:06:56.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:06:56.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:06:56.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:06:56.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:06:56.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:06:56.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:06:56.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:06:56.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.795965 -999.00   +9.50   6.07     79   +6.10 1 1 1 1 1     0    0 3.78 11.84 ZNESW 5.8 6.1 301.2 7.0 10.2 -24.6 10.1 -23.2 9.8 -21.4 10.1 -23.4
2026-04-15T21:06:56.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:06:56.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:06:56.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.795965
2026-04-15T21:06:56.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:06:56.657 [DEBUG] [Thread-25746] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:06:56.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:06:56.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:06:56.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:06:56.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:06:56.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:06:28', tmtdew=4.18374, humidity=75.1189, cloud=0.0, wind=6.6006, temperature=9.54179, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:06:11.376', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0002500000000011937, -0.05074999999999896, -0.05150000000000077, -0.030000000000001137, -0.011749999999999261, 0.019000000000000128, -0.012750000000000483, 0.05749999999999922, 0.002000000000000668, -0.01875000000000071, -0.008000000000000895, 0.036999999999999034, 0.012249999999999872, 0.03799999999999848, 0.0009999999999994458, 0.03474999999999895, 0.0005000000000006111, -0.002000000000000668, 0.0017499999999994742, 0.03999999999999915, 0.060249999999999915, 0.014749999999999375, 0.06274999999999942, 0.08699999999999974, -0.028999999999999915, -0.005250000000000199, 0.02850000000000108, 0.027000000000001023, -0.008499999999997954, 0.031000000000000583, 0.08700000000000152, 0.004749999999999588], zp_timestamp='2026-04-15T19:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:06:56.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:06:56.895 [DEBUG] [Thread-25749] [transport.py] [_log()] starting thread (client mode): 0xf1336560
2026-04-15T21:06:56.895 [DEBUG] [Thread-25749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:06:56.912 [DEBUG] [Thread-25749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:06:56.912 [INFO] [Thread-25749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:06:56.919 [DEBUG] [Thread-25749] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:06:56.919 [DEBUG] [Thread-25749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:06:56.919 [DEBUG] [Thread-25749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] client lang: <none>
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] server lang: <none>
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] kex follows: False
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] Compression: none
2026-04-15T21:06:56.920 [DEBUG] [Thread-25749] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:06:56.976 [DEBUG] [Thread-25749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:06:56.977 [DEBUG] [Thread-25749] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:06:56.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:06:56.978 [DEBUG] [Thread-25749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:06:56.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:06:57.033 [DEBUG] [Thread-25749] [transport.py] [_log()] userauth is OK
2026-04-15T21:06:57.034 [DEBUG] [Thread-25749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:06:57.034 [DEBUG] [Thread-25749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:06:57.034 [DEBUG] [Thread-25749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:06:57.034 [DEBUG] [Thread-25749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:06:57.061 [INFO] [Thread-25749] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:06:57.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:06:57.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:06:57.918 [DEBUG] [Thread-25749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:06:57.918 [DEBUG] [Thread-25749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:06:57.966 [DEBUG] [Thread-25749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:06:57.966 [DEBUG] [Thread-25749] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:06:57.975 [DEBUG] [Thread-25749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:06:57.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:06: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')
2026-04-15T21:06: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
2026-04-15T21:06:58.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:06:58.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:06:58.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:06:58.010 [DEBUG] [Thread-25749] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:07:07.172 [DEBUG] [Thread-25751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:07:13.940 [DEBUG] [Thread-25752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:07:21.636 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:07:22.214 [DEBUG] [Thread-25753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:07:25.786 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:07:28.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:07:28.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:07:28.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:07:29.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 7, 3), 4.16857, 75.2018, 0.0, 6.5124, 9.55837, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:07:29.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:07:03
2026-04-15T21:07:29.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:07:30.053 [DEBUG] [Thread-25754] [transport.py] [_log()] starting thread (client mode): 0xee9908e0
2026-04-15T21:07:30.053 [DEBUG] [Thread-25754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:07:30.072 [DEBUG] [Thread-25754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:07:30.072 [INFO] [Thread-25754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:07:30.075 [DEBUG] [Thread-25754] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:07:30.075 [DEBUG] [Thread-25754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] client lang: <none>
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] server lang: <none>
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] kex follows: False
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] Compression: none
2026-04-15T21:07:30.076 [DEBUG] [Thread-25754] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:07:30.091 [DEBUG] [Thread-25754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:07:30.092 [DEBUG] [Thread-25754] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:07:30.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:07:30.092 [DEBUG] [Thread-25754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:07:30.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:07:30.093 [DEBUG] [Thread-25754] [transport.py] [_log()] userauth is OK
2026-04-15T21:07:30.093 [DEBUG] [Thread-25754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:07:30.093 [DEBUG] [Thread-25754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:07:30.093 [DEBUG] [Thread-25754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:07:30.093 [DEBUG] [Thread-25754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:07:30.106 [INFO] [Thread-25754] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:07:30.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:07:30.877 [DEBUG] [Thread-25754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:07:30.877 [DEBUG] [Thread-25754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:07:30.878 [DEBUG] [Thread-25754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:07:30.918 [DEBUG] [Thread-25754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:07:30.918 [DEBUG] [Thread-25754] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:07:30.921 [DEBUG] [Thread-25754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:07:30.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:07:30.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:07:30.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:07:30.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:07:30.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:07:30.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:07:30.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:07:30.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:07:30.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:07:30.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.796312 -999.00   +9.60   5.57     78   +6.10 1 1 1 1 1     0    0 3.80 12.92 ZNESW 5.7 5.6 293.0 6.8 10.2 -24.5 10.1 -23.3 9.8 -21.3 10.1 -23.4
2026-04-15T21:07:30.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:07:30.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:07:30.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.796312
2026-04-15T21:07:30.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:07:30.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:07:30.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:07:30.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:07:30.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:07:30.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:07:03', tmtdew=4.16857, humidity=75.2018, cloud=0.0, wind=6.5124, temperature=9.55837, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:06:41.357', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0002500000000011937, -0.05074999999999896, -0.05150000000000077, -0.030000000000001137, -0.011749999999999261, 0.019000000000000128, -0.012750000000000483, 0.05749999999999922, 0.002000000000000668, -0.01875000000000071, -0.008000000000000895, 0.036999999999999034, 0.012249999999999872, 0.03799999999999848, 0.0009999999999994458, 0.03474999999999895, 0.0005000000000006111, -0.002000000000000668, 0.0017499999999994742, 0.03999999999999915, 0.060249999999999915, 0.014749999999999375, 0.06274999999999942, 0.08699999999999974, -0.028999999999999915, -0.005250000000000199, 0.02850000000000108, 0.027000000000001023, -0.008499999999997954, 0.031000000000000583, 0.08700000000000152, 0.004749999999999588], zp_timestamp='2026-04-15T19:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:07:30.940 [DEBUG] [Thread-25754] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:07:31.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:07:31.157 [DEBUG] [Thread-25757] [transport.py] [_log()] starting thread (client mode): 0xee992d10
2026-04-15T21:07:31.157 [DEBUG] [Thread-25757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:07:31.171 [DEBUG] [Thread-25757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:07:31.171 [INFO] [Thread-25757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:07:31.179 [DEBUG] [Thread-25757] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:07:31.179 [DEBUG] [Thread-25757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:07:31.179 [DEBUG] [Thread-25757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:07:31.179 [DEBUG] [Thread-25757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:07:31.179 [DEBUG] [Thread-25757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:07:31.179 [DEBUG] [Thread-25757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:07:31.179 [DEBUG] [Thread-25757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:07:31.179 [DEBUG] [Thread-25757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:07:31.179 [DEBUG] [Thread-25757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:07:31.179 [DEBUG] [Thread-25757] [transport.py] [_log()] client lang: <none>
2026-04-15T21:07:31.179 [DEBUG] [Thread-25757] [transport.py] [_log()] server lang: <none>
2026-04-15T21:07:31.180 [DEBUG] [Thread-25757] [transport.py] [_log()] kex follows: False
2026-04-15T21:07:31.180 [DEBUG] [Thread-25757] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:07:31.180 [DEBUG] [Thread-25757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:07:31.180 [DEBUG] [Thread-25757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:07:31.180 [DEBUG] [Thread-25757] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:07:31.180 [DEBUG] [Thread-25757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:07:31.180 [DEBUG] [Thread-25757] [transport.py] [_log()] Compression: none
2026-04-15T21:07:31.180 [DEBUG] [Thread-25757] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:07:31.241 [DEBUG] [Thread-25757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:07:31.242 [DEBUG] [Thread-25757] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:07:31.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:07:31.242 [DEBUG] [Thread-25757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:07:31.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:07:31.298 [DEBUG] [Thread-25757] [transport.py] [_log()] userauth is OK
2026-04-15T21:07:31.298 [DEBUG] [Thread-25757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:07:31.298 [DEBUG] [Thread-25757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:07:31.298 [DEBUG] [Thread-25757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:07:31.298 [DEBUG] [Thread-25757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:07:31.323 [INFO] [Thread-25757] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:07:31.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:07:31.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:07:32.173 [DEBUG] [Thread-25757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:07:32.173 [DEBUG] [Thread-25757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:07:32.179 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:07:32.221 [DEBUG] [Thread-25757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:07:32.221 [DEBUG] [Thread-25757] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:07:32.230 [DEBUG] [Thread-25757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:07:32.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:07:32.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')
2026-04-15T21:07:32.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
2026-04-15T21:07:32.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:07:32.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:07:32.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:07:32.265 [DEBUG] [Thread-25757] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:07:37.244 [DEBUG] [Thread-25759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:07:37.668 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:07:43.354 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:07:44.505 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:07:44.506 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:07:48.926 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:07:52.281 [DEBUG] [Thread-25760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:07:54.322 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:07:59.843 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:02.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:08:02.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:08:02.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
2026-04-15T21:08:03.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 7, 39), 3.90385, 76.5695, 0.0, 6.7068, 9.5504, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:08:03.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:07:39
2026-04-15T21:08:03.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:08:04.355 [DEBUG] [Thread-25761] [transport.py] [_log()] starting thread (client mode): 0xee992f20
2026-04-15T21:08:04.355 [DEBUG] [Thread-25761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:08:04.374 [DEBUG] [Thread-25761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:08:04.374 [INFO] [Thread-25761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:08:04.377 [DEBUG] [Thread-25761] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:08:04.377 [DEBUG] [Thread-25761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:08:04.377 [DEBUG] [Thread-25761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:08:04.377 [DEBUG] [Thread-25761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:08:04.377 [DEBUG] [Thread-25761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:08:04.377 [DEBUG] [Thread-25761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:08:04.377 [DEBUG] [Thread-25761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:08:04.378 [DEBUG] [Thread-25761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:08:04.378 [DEBUG] [Thread-25761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:08:04.378 [DEBUG] [Thread-25761] [transport.py] [_log()] client lang: <none>
2026-04-15T21:08:04.378 [DEBUG] [Thread-25761] [transport.py] [_log()] server lang: <none>
2026-04-15T21:08:04.378 [DEBUG] [Thread-25761] [transport.py] [_log()] kex follows: False
2026-04-15T21:08:04.378 [DEBUG] [Thread-25761] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:08:04.378 [DEBUG] [Thread-25761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:08:04.378 [DEBUG] [Thread-25761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:08:04.378 [DEBUG] [Thread-25761] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:08:04.378 [DEBUG] [Thread-25761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:08:04.378 [DEBUG] [Thread-25761] [transport.py] [_log()] Compression: none
2026-04-15T21:08:04.379 [DEBUG] [Thread-25761] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:08:04.394 [DEBUG] [Thread-25761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:08:04.394 [DEBUG] [Thread-25761] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:08:04.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:08:04.394 [DEBUG] [Thread-25761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:08:04.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:08:04.395 [DEBUG] [Thread-25761] [transport.py] [_log()] userauth is OK
2026-04-15T21:08:04.395 [DEBUG] [Thread-25761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:08:04.395 [DEBUG] [Thread-25761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:08:04.395 [DEBUG] [Thread-25761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:08:04.395 [DEBUG] [Thread-25761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:08:04.412 [INFO] [Thread-25761] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:08:04.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:08:05.200 [DEBUG] [Thread-25761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:08:05.200 [DEBUG] [Thread-25761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:08:05.200 [DEBUG] [Thread-25761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:08:05.214 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:05.240 [DEBUG] [Thread-25761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:08:05.240 [DEBUG] [Thread-25761] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:08:05.243 [DEBUG] [Thread-25761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:08:05.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:08:05.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:08:05.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:08:05.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:08:05.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:08:05.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:08:05.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:08:05.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:08:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:08:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.796659 -999.00   +9.60   4.87     78   +6.10 1 1 1 1 1     0    0 3.72 12.11 ZNESW 5.3 4.9 291.2 5.8 10.2 -24.6 10.1 -23.3 9.8 -21.3 10.1 -23.3
2026-04-15T21:08:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:08:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:08:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.796659
2026-04-15T21:08:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:08:05.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:08:05.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:08:05.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:08:05.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:08:05.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:07:39', tmtdew=3.90385, humidity=76.5695, cloud=0.0, wind=6.7068, temperature=9.5504, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:07:11.338', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0002500000000011937, -0.05074999999999896, -0.05150000000000077, -0.030000000000001137, -0.011749999999999261, 0.019000000000000128, -0.012750000000000483, 0.05749999999999922, 0.002000000000000668, -0.01875000000000071, -0.008000000000000895, 0.036999999999999034, 0.012249999999999872, 0.03799999999999848, 0.0009999999999994458, 0.03474999999999895, 0.0005000000000006111, -0.002000000000000668, 0.0017499999999994742, 0.03999999999999915, 0.060249999999999915, 0.014749999999999375, 0.06274999999999942, 0.08699999999999974, -0.028999999999999915, -0.005250000000000199, 0.02850000000000108, 0.027000000000001023, -0.008499999999997954, 0.031000000000000583, 0.08700000000000152, 0.004749999999999588], zp_timestamp='2026-04-15T19:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:08:05.262 [DEBUG] [Thread-25761] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:08:05.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:08:05.514 [DEBUG] [Thread-25764] [transport.py] [_log()] starting thread (client mode): 0xee9935e0
2026-04-15T21:08:05.515 [DEBUG] [Thread-25764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:08:05.529 [DEBUG] [Thread-25764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:08:05.529 [INFO] [Thread-25764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:08:05.536 [DEBUG] [Thread-25764] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:08:05.537 [DEBUG] [Thread-25764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:08:05.537 [DEBUG] [Thread-25764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:08:05.537 [DEBUG] [Thread-25764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:08:05.537 [DEBUG] [Thread-25764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:08:05.537 [DEBUG] [Thread-25764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:08:05.537 [DEBUG] [Thread-25764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:08:05.537 [DEBUG] [Thread-25764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:08:05.537 [DEBUG] [Thread-25764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:08:05.537 [DEBUG] [Thread-25764] [transport.py] [_log()] client lang: <none>
2026-04-15T21:08:05.537 [DEBUG] [Thread-25764] [transport.py] [_log()] server lang: <none>
2026-04-15T21:08:05.537 [DEBUG] [Thread-25764] [transport.py] [_log()] kex follows: False
2026-04-15T21:08:05.537 [DEBUG] [Thread-25764] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:08:05.538 [DEBUG] [Thread-25764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:08:05.538 [DEBUG] [Thread-25764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:08:05.538 [DEBUG] [Thread-25764] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:08:05.538 [DEBUG] [Thread-25764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:08:05.538 [DEBUG] [Thread-25764] [transport.py] [_log()] Compression: none
2026-04-15T21:08:05.538 [DEBUG] [Thread-25764] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:08:05.592 [DEBUG] [Thread-25764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:08:05.593 [DEBUG] [Thread-25764] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:08:05.593 [DEBUG] [Thread-25764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:08:05.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:08:05.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:08:05.649 [DEBUG] [Thread-25764] [transport.py] [_log()] userauth is OK
2026-04-15T21:08:05.649 [DEBUG] [Thread-25764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:08:05.650 [DEBUG] [Thread-25764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:08:05.650 [DEBUG] [Thread-25764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:08:05.650 [DEBUG] [Thread-25764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:08:05.675 [INFO] [Thread-25764] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:08:05.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:08:05.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:08:06.443 [DEBUG] [Thread-25764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:08:06.443 [DEBUG] [Thread-25764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:08:06.493 [DEBUG] [Thread-25764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:08:06.494 [DEBUG] [Thread-25764] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:08:06.505 [DEBUG] [Thread-25764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:08:06.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:08:06.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')
2026-04-15T21:08:06.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
2026-04-15T21:08:06.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:08:06.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:08:06.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:08:06.537 [DEBUG] [Thread-25764] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:08:07.310 [DEBUG] [Thread-25766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:10.938 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:14.106 [DEBUG] [Thread-25767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:16.423 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:17.907 [DEBUG] [Thread-23763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:22.020 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:22.351 [DEBUG] [Thread-25768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:27.603 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:33.011 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:36.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:08:36.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:08:36.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
2026-04-15T21:08:37.383 [DEBUG] [Thread-25769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:37.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 8, 14), 4.08632, 75.3677, 0.0, 5.01228, 9.4752, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:08:37.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:08:14
2026-04-15T21:08:38.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:08:38.659 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:38.735 [DEBUG] [Thread-25770] [transport.py] [_log()] starting thread (client mode): 0xee9904c0
2026-04-15T21:08:38.735 [DEBUG] [Thread-25770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:08:38.754 [DEBUG] [Thread-25770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:08:38.754 [INFO] [Thread-25770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:08:38.757 [DEBUG] [Thread-25770] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:08:38.758 [DEBUG] [Thread-25770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:08:38.758 [DEBUG] [Thread-25770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:08:38.758 [DEBUG] [Thread-25770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:08:38.758 [DEBUG] [Thread-25770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:08:38.758 [DEBUG] [Thread-25770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:08:38.758 [DEBUG] [Thread-25770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:08:38.758 [DEBUG] [Thread-25770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:08:38.758 [DEBUG] [Thread-25770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:08:38.758 [DEBUG] [Thread-25770] [transport.py] [_log()] client lang: <none>
2026-04-15T21:08:38.758 [DEBUG] [Thread-25770] [transport.py] [_log()] server lang: <none>
2026-04-15T21:08:38.758 [DEBUG] [Thread-25770] [transport.py] [_log()] kex follows: False
2026-04-15T21:08:38.758 [DEBUG] [Thread-25770] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:08:38.759 [DEBUG] [Thread-25770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:08:38.759 [DEBUG] [Thread-25770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:08:38.759 [DEBUG] [Thread-25770] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:08:38.759 [DEBUG] [Thread-25770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:08:38.759 [DEBUG] [Thread-25770] [transport.py] [_log()] Compression: none
2026-04-15T21:08:38.759 [DEBUG] [Thread-25770] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:08:38.776 [DEBUG] [Thread-25770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:08:38.776 [DEBUG] [Thread-25770] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:08:38.776 [DEBUG] [Thread-25770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:08:38.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:08:38.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:08:38.778 [DEBUG] [Thread-25770] [transport.py] [_log()] userauth is OK
2026-04-15T21:08:38.778 [DEBUG] [Thread-25770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:08:38.778 [DEBUG] [Thread-25770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:08:38.778 [DEBUG] [Thread-25770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:08:38.778 [DEBUG] [Thread-25770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:08:38.801 [INFO] [Thread-25770] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:08:38.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:08:39.552 [DEBUG] [Thread-25770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:08:39.552 [DEBUG] [Thread-25770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:08:39.552 [DEBUG] [Thread-25770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:08:39.593 [DEBUG] [Thread-25770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:08:39.593 [DEBUG] [Thread-25770] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:08:39.595 [DEBUG] [Thread-25770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:08:39.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:08:39.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:08:39.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:08:39.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:08:39.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:08:39.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:08:39.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:08:39.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:08:39.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:08:39.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.797006 -999.00   +9.70   5.04     78   +6.10 1 1 1 1 1     0    0 3.73 13.00 ZNESW 5.3 5.0 296.8 5.3 10.2 -24.6 10.1 -23.3 9.8 -21.3 10.1 -23.4
2026-04-15T21:08:39.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:08:39.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:08:39.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.797006
2026-04-15T21:08:39.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:08:39.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:08:39.612 [DEBUG] [Thread-25770] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:08:39.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:08:39.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:08:39.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:08:39.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:08:14', tmtdew=4.08632, humidity=75.3677, cloud=0.0, wind=5.01228, temperature=9.4752, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:07:41.318', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05975000000000108, -0.029749999999999943, -0.10874999999999879, -0.07699999999999996, -0.06099999999999994, -0.025749999999998607, -0.054499999999999105, -0.007749999999999702, 0.006999999999999673, -0.012000000000000455, -0.04824999999999946, -0.0389999999999997, 0.03249999999999886, -0.013749999999999929, 0.015000000000000568, -0.005500000000001393, 0.0072499999999990905, -0.009500000000000952, -0.017000000000001236, 0.014749999999999375, 0.008999999999998565, 0.029249999999997556, -0.0012499999999988631, 0.013749999999999929, 0.030999999999998806, -0.08750000000000036, -0.02775000000000105, -0.005000000000000782, 0.019000000000000128, -0.017999999999998906, 0.05200000000000138, 0.014000000000001123, -0.01925000000000132], zp_timestamp='2026-04-15T19:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:08:39.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:08:39.862 [DEBUG] [Thread-25773] [transport.py] [_log()] starting thread (client mode): 0xf1336710
2026-04-15T21:08:39.862 [DEBUG] [Thread-25773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:08:39.877 [DEBUG] [Thread-25773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:08:39.877 [INFO] [Thread-25773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:08:39.885 [DEBUG] [Thread-25773] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:08:39.885 [DEBUG] [Thread-25773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:08:39.885 [DEBUG] [Thread-25773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:08:39.885 [DEBUG] [Thread-25773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:08:39.885 [DEBUG] [Thread-25773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:08:39.885 [DEBUG] [Thread-25773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:08:39.885 [DEBUG] [Thread-25773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:08:39.885 [DEBUG] [Thread-25773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:08:39.886 [DEBUG] [Thread-25773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:08:39.886 [DEBUG] [Thread-25773] [transport.py] [_log()] client lang: <none>
2026-04-15T21:08:39.886 [DEBUG] [Thread-25773] [transport.py] [_log()] server lang: <none>
2026-04-15T21:08:39.886 [DEBUG] [Thread-25773] [transport.py] [_log()] kex follows: False
2026-04-15T21:08:39.886 [DEBUG] [Thread-25773] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:08:39.886 [DEBUG] [Thread-25773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:08:39.886 [DEBUG] [Thread-25773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:08:39.886 [DEBUG] [Thread-25773] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:08:39.886 [DEBUG] [Thread-25773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:08:39.886 [DEBUG] [Thread-25773] [transport.py] [_log()] Compression: none
2026-04-15T21:08:39.886 [DEBUG] [Thread-25773] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:08:39.943 [DEBUG] [Thread-25773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:08:39.944 [DEBUG] [Thread-25773] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:08:39.944 [DEBUG] [Thread-25773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:08:39.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:08:39.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:08:40.001 [DEBUG] [Thread-25773] [transport.py] [_log()] userauth is OK
2026-04-15T21:08:40.001 [DEBUG] [Thread-25773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:08:40.002 [DEBUG] [Thread-25773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:08:40.002 [DEBUG] [Thread-25773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:08:40.002 [DEBUG] [Thread-25773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:08:40.030 [INFO] [Thread-25773] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:08:40.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:08:40.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:08:40.852 [DEBUG] [Thread-25773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:08:40.852 [DEBUG] [Thread-25773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:08:40.900 [DEBUG] [Thread-25773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:08:40.900 [DEBUG] [Thread-25773] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:08:40.910 [DEBUG] [Thread-25773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:08:40.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:08:40.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')
2026-04-15T21:08:40.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') -> 00000000
2026-04-15T21:08:40.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:08:40.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:08:40.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:08:40.947 [DEBUG] [Thread-25773] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:08:44.146 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:44.708 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:44.709 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:49.503 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:52.413 [DEBUG] [Thread-25775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:08:54.985 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:00.396 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:05.827 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:07.453 [DEBUG] [Thread-25776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:09:10.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:09:10.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
2026-04-15T21:09:11.222 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:12.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 8, 50), 3.86344, 76.7686, 0.0, 6.07176, 9.45088, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:09:12.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:08:50
2026-04-15T21:09:12.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:09:13.054 [DEBUG] [Thread-25777] [transport.py] [_log()] starting thread (client mode): 0xf1334250
2026-04-15T21:09:13.054 [DEBUG] [Thread-25777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:09:13.074 [DEBUG] [Thread-25777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:09:13.074 [INFO] [Thread-25777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:09:13.075 [DEBUG] [Thread-25777] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:09:13.075 [DEBUG] [Thread-25777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:09:13.075 [DEBUG] [Thread-25777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:09:13.075 [DEBUG] [Thread-25777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:09:13.075 [DEBUG] [Thread-25777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:09:13.076 [DEBUG] [Thread-25777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:09:13.076 [DEBUG] [Thread-25777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:09:13.076 [DEBUG] [Thread-25777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:09:13.076 [DEBUG] [Thread-25777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:09:13.076 [DEBUG] [Thread-25777] [transport.py] [_log()] client lang: <none>
2026-04-15T21:09:13.076 [DEBUG] [Thread-25777] [transport.py] [_log()] server lang: <none>
2026-04-15T21:09:13.076 [DEBUG] [Thread-25777] [transport.py] [_log()] kex follows: False
2026-04-15T21:09:13.076 [DEBUG] [Thread-25777] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:09:13.076 [DEBUG] [Thread-25777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:09:13.076 [DEBUG] [Thread-25777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:09:13.076 [DEBUG] [Thread-25777] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:09:13.076 [DEBUG] [Thread-25777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:09:13.077 [DEBUG] [Thread-25777] [transport.py] [_log()] Compression: none
2026-04-15T21:09:13.077 [DEBUG] [Thread-25777] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:09:13.095 [DEBUG] [Thread-25777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:09:13.096 [DEBUG] [Thread-25777] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:09:13.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:09:13.096 [DEBUG] [Thread-25777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:09:13.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:09:13.097 [DEBUG] [Thread-25777] [transport.py] [_log()] userauth is OK
2026-04-15T21:09:13.098 [DEBUG] [Thread-25777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:09:13.098 [DEBUG] [Thread-25777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:09:13.098 [DEBUG] [Thread-25777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:09:13.098 [DEBUG] [Thread-25777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:09:13.122 [INFO] [Thread-25777] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:09:13.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:09:13.892 [DEBUG] [Thread-25777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:09:13.892 [DEBUG] [Thread-25777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:09:13.892 [DEBUG] [Thread-25777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:09:13.933 [DEBUG] [Thread-25777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:09:13.933 [DEBUG] [Thread-25777] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:09:13.937 [DEBUG] [Thread-25777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:09:13.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:09:13.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:09:13.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:09:13.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:09:13.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:09:13.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:09:13.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:09:13.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:09:13.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:09:13.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.797353 -999.00   +9.70   5.44     78   +6.20 1 1 1 1 1     0    0 3.82 13.85 ZNESW 5.3 5.4 282.6 5.9 10.2 -24.6 10.1 -23.3 9.8 -21.3 10.1 -23.2
2026-04-15T21:09:13.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:09:13.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:09:13.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.797353
2026-04-15T21:09:13.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:09:13.964 [DEBUG] [Thread-25777] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:09:13.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:09:13.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:09:13.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:09:13.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:09:13.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:08:50', tmtdew=3.86344, humidity=76.7686, cloud=0.0, wind=6.07176, temperature=9.45088, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:08:11.299', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05975000000000108, -0.029749999999999943, -0.10874999999999879, -0.07699999999999996, -0.06099999999999994, -0.025749999999998607, -0.054499999999999105, -0.007749999999999702, 0.006999999999999673, -0.012000000000000455, -0.04824999999999946, -0.0389999999999997, 0.03249999999999886, -0.013749999999999929, 0.015000000000000568, -0.005500000000001393, 0.0072499999999990905, -0.009500000000000952, -0.017000000000001236, 0.014749999999999375, 0.008999999999998565, 0.029249999999997556, -0.0012499999999988631, 0.013749999999999929, 0.030999999999998806, -0.08750000000000036, -0.02775000000000105, -0.005000000000000782, 0.019000000000000128, -0.017999999999998906, 0.05200000000000138, 0.014000000000001123, -0.01925000000000132], zp_timestamp='2026-04-15T19:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:09:14.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:09:14.224 [DEBUG] [Thread-25780] [transport.py] [_log()] starting thread (client mode): 0xee992260
2026-04-15T21:09:14.224 [DEBUG] [Thread-25780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:09:14.238 [DEBUG] [Thread-25780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:09:14.238 [INFO] [Thread-25780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:09:14.246 [DEBUG] [Thread-25780] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:09:14.246 [DEBUG] [Thread-25780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:09:14.246 [DEBUG] [Thread-25780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:09:14.246 [DEBUG] [Thread-25780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:09:14.246 [DEBUG] [Thread-25780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:09:14.246 [DEBUG] [Thread-25780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:09:14.246 [DEBUG] [Thread-25780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:09:14.246 [DEBUG] [Thread-25780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:09:14.246 [DEBUG] [Thread-25780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:09:14.246 [DEBUG] [Thread-25780] [transport.py] [_log()] client lang: <none>
2026-04-15T21:09:14.246 [DEBUG] [Thread-25780] [transport.py] [_log()] server lang: <none>
2026-04-15T21:09:14.246 [DEBUG] [Thread-25780] [transport.py] [_log()] kex follows: False
2026-04-15T21:09:14.247 [DEBUG] [Thread-25780] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:09:14.247 [DEBUG] [Thread-25780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:09:14.247 [DEBUG] [Thread-25780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:09:14.247 [DEBUG] [Thread-25780] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:09:14.247 [DEBUG] [Thread-25780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:09:14.247 [DEBUG] [Thread-25780] [transport.py] [_log()] Compression: none
2026-04-15T21:09:14.247 [DEBUG] [Thread-25780] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:09:14.253 [DEBUG] [Thread-25782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:14.305 [DEBUG] [Thread-25780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:09:14.306 [DEBUG] [Thread-25780] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:09:14.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:09:14.306 [DEBUG] [Thread-25780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:09:14.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:09:14.362 [DEBUG] [Thread-25780] [transport.py] [_log()] userauth is OK
2026-04-15T21:09:14.362 [DEBUG] [Thread-25780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:09:14.362 [DEBUG] [Thread-25780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:09:14.363 [DEBUG] [Thread-25780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:09:14.363 [DEBUG] [Thread-25780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:09:14.388 [INFO] [Thread-25780] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:09:14.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:09:14.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:09:15.214 [DEBUG] [Thread-25780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:09:15.215 [DEBUG] [Thread-25780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:09:15.262 [DEBUG] [Thread-25780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:09:15.262 [DEBUG] [Thread-25780] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:09:15.271 [DEBUG] [Thread-25780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:09:15.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:09:15.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')
2026-04-15T21:09:15.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
2026-04-15T21:09:15.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:09:15.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:09:15.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:09:15.309 [DEBUG] [Thread-25780] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:09:16.682 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:22.218 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:22.482 [DEBUG] [Thread-25783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:27.603 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:32.998 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:37.525 [DEBUG] [Thread-25784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:38.396 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:43.924 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:44.912 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:44.913 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:45.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:09:45.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:09:45.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
2026-04-15T21:09:46.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 9, 25), 4.08434, 75.3677, 0.0, 4.90644, 9.40885, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:09:46.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:09:25
2026-04-15T21:09:46.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:09:47.468 [DEBUG] [Thread-25785] [transport.py] [_log()] starting thread (client mode): 0xf1337580
2026-04-15T21:09:47.469 [DEBUG] [Thread-25785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:09:47.488 [DEBUG] [Thread-25785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:09:47.488 [INFO] [Thread-25785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:09:47.491 [DEBUG] [Thread-25785] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:09:47.492 [DEBUG] [Thread-25785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:09:47.492 [DEBUG] [Thread-25785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:09:47.492 [DEBUG] [Thread-25785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:09:47.492 [DEBUG] [Thread-25785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:09:47.492 [DEBUG] [Thread-25785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:09:47.492 [DEBUG] [Thread-25785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:09:47.492 [DEBUG] [Thread-25785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:09:47.492 [DEBUG] [Thread-25785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:09:47.492 [DEBUG] [Thread-25785] [transport.py] [_log()] client lang: <none>
2026-04-15T21:09:47.492 [DEBUG] [Thread-25785] [transport.py] [_log()] server lang: <none>
2026-04-15T21:09:47.492 [DEBUG] [Thread-25785] [transport.py] [_log()] kex follows: False
2026-04-15T21:09:47.492 [DEBUG] [Thread-25785] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:09:47.493 [DEBUG] [Thread-25785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:09:47.493 [DEBUG] [Thread-25785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:09:47.493 [DEBUG] [Thread-25785] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:09:47.493 [DEBUG] [Thread-25785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:09:47.493 [DEBUG] [Thread-25785] [transport.py] [_log()] Compression: none
2026-04-15T21:09:47.493 [DEBUG] [Thread-25785] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:09:47.511 [DEBUG] [Thread-25785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:09:47.512 [DEBUG] [Thread-25785] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:09:47.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:09:47.512 [DEBUG] [Thread-25785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:09:47.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:09:47.513 [DEBUG] [Thread-25785] [transport.py] [_log()] userauth is OK
2026-04-15T21:09:47.513 [DEBUG] [Thread-25785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:09:47.514 [DEBUG] [Thread-25785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:09:47.514 [DEBUG] [Thread-25785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:09:47.514 [DEBUG] [Thread-25785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:09:47.539 [INFO] [Thread-25785] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:09:47.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:09:48.312 [DEBUG] [Thread-25785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:09:48.313 [DEBUG] [Thread-25785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:09:48.313 [DEBUG] [Thread-25785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:09:48.353 [DEBUG] [Thread-25785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:09:48.353 [DEBUG] [Thread-25785] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:09:48.356 [DEBUG] [Thread-25785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:09:48.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:09:48.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:09:48.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:09:48.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:09:48.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:09:48.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:09:48.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:09:48.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:09:48.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:09:48.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.798048 -999.00   +9.60   6.57     78   +6.10 1 1 1 1 1     0    0 3.86 15.61 ZNESW 6.0 6.6 283.0 7.2 10.2 -24.7 10.1 -23.2 9.8 -21.2 10.1 -23.4
2026-04-15T21:09:48.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:09:48.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:09:48.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.798048
2026-04-15T21:09:48.380 [DEBUG] [Thread-25785] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:09:48.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:09:48.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:09:48.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:09:48.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:09:48.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:09:48.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:09:25', tmtdew=4.08434, humidity=75.3677, cloud=0.0, wind=4.90644, temperature=9.40885, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:09:11.347', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05975000000000108, -0.029749999999999943, -0.10874999999999879, -0.07699999999999996, -0.06099999999999994, -0.025749999999998607, -0.054499999999999105, -0.007749999999999702, 0.006999999999999673, -0.012000000000000455, -0.04824999999999946, -0.0389999999999997, 0.03249999999999886, -0.013749999999999929, 0.015000000000000568, -0.005500000000001393, 0.0072499999999990905, -0.009500000000000952, -0.017000000000001236, 0.014749999999999375, 0.008999999999998565, 0.029249999999997556, -0.0012499999999988631, 0.013749999999999929, 0.030999999999998806, -0.08750000000000036, -0.02775000000000105, -0.005000000000000782, 0.019000000000000128, -0.017999999999998906, 0.05200000000000138, 0.014000000000001123, -0.01925000000000132], zp_timestamp='2026-04-15T19:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:09:48.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:09:48.636 [DEBUG] [Thread-25788] [transport.py] [_log()] starting thread (client mode): 0xf1336da0
2026-04-15T21:09:48.637 [DEBUG] [Thread-25788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:09:48.651 [DEBUG] [Thread-25788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:09:48.651 [INFO] [Thread-25788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:09:48.658 [DEBUG] [Thread-25788] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:09:48.658 [DEBUG] [Thread-25788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:09:48.659 [DEBUG] [Thread-25788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:09:48.659 [DEBUG] [Thread-25788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:09:48.659 [DEBUG] [Thread-25788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:09:48.659 [DEBUG] [Thread-25788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:09:48.659 [DEBUG] [Thread-25788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:09:48.659 [DEBUG] [Thread-25788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:09:48.659 [DEBUG] [Thread-25788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:09:48.659 [DEBUG] [Thread-25788] [transport.py] [_log()] client lang: <none>
2026-04-15T21:09:48.659 [DEBUG] [Thread-25788] [transport.py] [_log()] server lang: <none>
2026-04-15T21:09:48.659 [DEBUG] [Thread-25788] [transport.py] [_log()] kex follows: False
2026-04-15T21:09:48.659 [DEBUG] [Thread-25788] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:09:48.659 [DEBUG] [Thread-25788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:09:48.660 [DEBUG] [Thread-25788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:09:48.660 [DEBUG] [Thread-25788] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:09:48.660 [DEBUG] [Thread-25788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:09:48.660 [DEBUG] [Thread-25788] [transport.py] [_log()] Compression: none
2026-04-15T21:09:48.660 [DEBUG] [Thread-25788] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:09:48.717 [DEBUG] [Thread-25788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:09:48.718 [DEBUG] [Thread-25788] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:09:48.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:09:48.719 [DEBUG] [Thread-25788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:09:48.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:09:48.777 [DEBUG] [Thread-25788] [transport.py] [_log()] userauth is OK
2026-04-15T21:09:48.777 [DEBUG] [Thread-25788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:09:48.777 [DEBUG] [Thread-25788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:09:48.778 [DEBUG] [Thread-25788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:09:48.778 [DEBUG] [Thread-25788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:09:48.796 [INFO] [Thread-25788] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:09:48.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:09:48.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:09:49.564 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:49.625 [DEBUG] [Thread-25788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:09:49.625 [DEBUG] [Thread-25788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:09:49.673 [DEBUG] [Thread-25788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:09:49.673 [DEBUG] [Thread-25788] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:09:49.682 [DEBUG] [Thread-25788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:09:49.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:09:49.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')
2026-04-15T21:09:49.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
2026-04-15T21:09:49.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:09:49.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:09:49.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:09:49.716 [DEBUG] [Thread-25788] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:09:52.559 [DEBUG] [Thread-25790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:09:55.108 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:00.578 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:05.979 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:07.598 [DEBUG] [Thread-25791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:11.625 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:14.418 [DEBUG] [Thread-25792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:17.067 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:19.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:10:19.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:10:19.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:10:21.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 10, 1), 4.07091, 75.4341, 0.0, 4.05972, 9.37568, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:10:21.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:10:01
2026-04-15T21:10:21.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:10:21.983 [DEBUG] [Thread-25793] [transport.py] [_log()] starting thread (client mode): 0xee9c21a0
2026-04-15T21:10:21.984 [DEBUG] [Thread-25793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:10:22.003 [DEBUG] [Thread-25793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:10:22.003 [INFO] [Thread-25793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:10:22.006 [DEBUG] [Thread-25793] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:10:22.006 [DEBUG] [Thread-25793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:10:22.006 [DEBUG] [Thread-25793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:10:22.006 [DEBUG] [Thread-25793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:10:22.006 [DEBUG] [Thread-25793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:10:22.007 [DEBUG] [Thread-25793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:10:22.007 [DEBUG] [Thread-25793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:10:22.007 [DEBUG] [Thread-25793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:10:22.007 [DEBUG] [Thread-25793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:10:22.007 [DEBUG] [Thread-25793] [transport.py] [_log()] client lang: <none>
2026-04-15T21:10:22.007 [DEBUG] [Thread-25793] [transport.py] [_log()] server lang: <none>
2026-04-15T21:10:22.007 [DEBUG] [Thread-25793] [transport.py] [_log()] kex follows: False
2026-04-15T21:10:22.007 [DEBUG] [Thread-25793] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:10:22.007 [DEBUG] [Thread-25793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:10:22.007 [DEBUG] [Thread-25793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:10:22.007 [DEBUG] [Thread-25793] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:10:22.007 [DEBUG] [Thread-25793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:10:22.007 [DEBUG] [Thread-25793] [transport.py] [_log()] Compression: none
2026-04-15T21:10:22.008 [DEBUG] [Thread-25793] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:10:22.024 [DEBUG] [Thread-25793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:10:22.024 [DEBUG] [Thread-25793] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:10:22.024 [DEBUG] [Thread-25793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:10:22.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:10:22.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:10:22.068 [DEBUG] [Thread-25793] [transport.py] [_log()] userauth is OK
2026-04-15T21:10:22.068 [DEBUG] [Thread-25793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:10:22.068 [DEBUG] [Thread-25793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:10:22.068 [DEBUG] [Thread-25793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:10:22.068 [DEBUG] [Thread-25793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:10:22.087 [INFO] [Thread-25793] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:10:22.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:10:22.439 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:22.627 [DEBUG] [Thread-25795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:24.330 [DEBUG] [Thread-25793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:10:24.331 [DEBUG] [Thread-25793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:10:24.331 [DEBUG] [Thread-25793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:10:24.371 [DEBUG] [Thread-25793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:10:24.371 [DEBUG] [Thread-25793] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:10:24.374 [DEBUG] [Thread-25793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:10:24.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:10:24.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:10:24.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:10:24.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:10:24.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:10:24.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:10:24.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:10:24.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:10:24.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:10:24.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.798395 -999.00   +9.60   7.61     78   +6.10 1 1 1 1 1     0    0 3.92 15.87 ZNESW 7.7 7.6 275.8 8.2 10.2 -24.6 10.1 -23.2 9.8 -21.3 10.1 -23.3
2026-04-15T21:10:24.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:10:24.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:10:24.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.798395
2026-04-15T21:10:24.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:10:24.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:10:24.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:10:24.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:10:24.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:10:24.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:10:01', tmtdew=4.07091, humidity=75.4341, cloud=0.0, wind=4.05972, temperature=9.37568, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:09:41.328', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05975000000000108, -0.029749999999999943, -0.10874999999999879, -0.07699999999999996, -0.06099999999999994, -0.025749999999998607, -0.054499999999999105, -0.007749999999999702, 0.006999999999999673, -0.012000000000000455, -0.04824999999999946, -0.0389999999999997, 0.03249999999999886, -0.013749999999999929, 0.015000000000000568, -0.005500000000001393, 0.0072499999999990905, -0.009500000000000952, -0.017000000000001236, 0.014749999999999375, 0.008999999999998565, 0.029249999999997556, -0.0012499999999988631, 0.013749999999999929, 0.030999999999998806, -0.08750000000000036, -0.02775000000000105, -0.005000000000000782, 0.019000000000000128, -0.017999999999998906, 0.05200000000000138, 0.014000000000001123, -0.01925000000000132], zp_timestamp='2026-04-15T19:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:10:24.401 [DEBUG] [Thread-25793] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:10:24.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:10:24.661 [DEBUG] [Thread-25797] [transport.py] [_log()] starting thread (client mode): 0xee9c2c80
2026-04-15T21:10:24.661 [DEBUG] [Thread-25797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:10:24.675 [DEBUG] [Thread-25797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:10:24.675 [INFO] [Thread-25797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:10:24.682 [DEBUG] [Thread-25797] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:10:24.683 [DEBUG] [Thread-25797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:10:24.683 [DEBUG] [Thread-25797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:10:24.683 [DEBUG] [Thread-25797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:10:24.683 [DEBUG] [Thread-25797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:10:24.683 [DEBUG] [Thread-25797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:10:24.683 [DEBUG] [Thread-25797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:10:24.683 [DEBUG] [Thread-25797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:10:24.683 [DEBUG] [Thread-25797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:10:24.683 [DEBUG] [Thread-25797] [transport.py] [_log()] client lang: <none>
2026-04-15T21:10:24.683 [DEBUG] [Thread-25797] [transport.py] [_log()] server lang: <none>
2026-04-15T21:10:24.683 [DEBUG] [Thread-25797] [transport.py] [_log()] kex follows: False
2026-04-15T21:10:24.684 [DEBUG] [Thread-25797] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:10:24.684 [DEBUG] [Thread-25797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:10:24.684 [DEBUG] [Thread-25797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:10:24.684 [DEBUG] [Thread-25797] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:10:24.684 [DEBUG] [Thread-25797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:10:24.684 [DEBUG] [Thread-25797] [transport.py] [_log()] Compression: none
2026-04-15T21:10:24.684 [DEBUG] [Thread-25797] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:10:24.741 [DEBUG] [Thread-25797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:10:24.742 [DEBUG] [Thread-25797] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:10:24.742 [DEBUG] [Thread-25797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:10:24.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:10:24.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:10:24.798 [DEBUG] [Thread-25797] [transport.py] [_log()] userauth is OK
2026-04-15T21:10:24.798 [DEBUG] [Thread-25797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:10:24.798 [DEBUG] [Thread-25797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:10:24.798 [DEBUG] [Thread-25797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:10:24.798 [DEBUG] [Thread-25797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:10:24.816 [INFO] [Thread-25797] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:10:24.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:10:24.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:10:25.615 [DEBUG] [Thread-25797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:10:25.615 [DEBUG] [Thread-25797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:10:25.663 [DEBUG] [Thread-25797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:10:25.663 [DEBUG] [Thread-25797] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:10:25.672 [DEBUG] [Thread-25797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:10:25.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:10:25.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')
2026-04-15T21:10:25.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
2026-04-15T21:10:25.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:10:25.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:10:25.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:10:25.708 [DEBUG] [Thread-25797] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:10:27.909 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:33.304 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:37.658 [DEBUG] [Thread-25799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:38.777 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:44.175 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:45.115 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:45.116 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:49.710 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:52.698 [DEBUG] [Thread-25800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:55.494 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:10:55.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:10:55.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:10:55.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
2026-04-15T21:10:57.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 10, 37), 3.85524, 76.8018, 0.0, 3.24936, 9.38454, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:10:57.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:10:37
2026-04-15T21:10:57.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:10:57.931 [DEBUG] [Thread-25801] [transport.py] [_log()] starting thread (client mode): 0xee9c2020
2026-04-15T21:10:57.931 [DEBUG] [Thread-25801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:10:57.943 [DEBUG] [Thread-25801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:10:57.943 [INFO] [Thread-25801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:10:57.946 [DEBUG] [Thread-25801] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:10:57.946 [DEBUG] [Thread-25801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:10:57.946 [DEBUG] [Thread-25801] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:10:57.947 [DEBUG] [Thread-25801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:10:57.947 [DEBUG] [Thread-25801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:10:57.947 [DEBUG] [Thread-25801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:10:57.947 [DEBUG] [Thread-25801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:10:57.947 [DEBUG] [Thread-25801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:10:57.947 [DEBUG] [Thread-25801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:10:57.947 [DEBUG] [Thread-25801] [transport.py] [_log()] client lang: <none>
2026-04-15T21:10:57.947 [DEBUG] [Thread-25801] [transport.py] [_log()] server lang: <none>
2026-04-15T21:10:57.947 [DEBUG] [Thread-25801] [transport.py] [_log()] kex follows: False
2026-04-15T21:10:57.947 [DEBUG] [Thread-25801] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:10:57.947 [DEBUG] [Thread-25801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:10:57.947 [DEBUG] [Thread-25801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:10:57.948 [DEBUG] [Thread-25801] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:10:57.948 [DEBUG] [Thread-25801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:10:57.948 [DEBUG] [Thread-25801] [transport.py] [_log()] Compression: none
2026-04-15T21:10:57.948 [DEBUG] [Thread-25801] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:10:57.963 [DEBUG] [Thread-25801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:10:57.964 [DEBUG] [Thread-25801] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:10:57.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:10:57.964 [DEBUG] [Thread-25801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:10:57.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:10:58.004 [DEBUG] [Thread-25801] [transport.py] [_log()] userauth is OK
2026-04-15T21:10:58.005 [DEBUG] [Thread-25801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:10:58.005 [DEBUG] [Thread-25801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:10:58.005 [DEBUG] [Thread-25801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:10:58.005 [DEBUG] [Thread-25801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:10:58.039 [INFO] [Thread-25801] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:10:58.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:10:58.810 [DEBUG] [Thread-25801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:10:58.810 [DEBUG] [Thread-25801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:10:58.811 [DEBUG] [Thread-25801] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:10:58.851 [DEBUG] [Thread-25801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:10:58.851 [DEBUG] [Thread-25801] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:10:58.854 [DEBUG] [Thread-25801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:10:58.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:10:58.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:10:58.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:10:58.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:10:58.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:10:58.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:10:58.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:10:58.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:10:58.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:10:58.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.798742 -999.00   +9.50   8.11     78   +6.00 1 1 1 1 1     0    0 3.92 16.54 ZNESW 8.2 8.1 270.6 8.3 10.2 -24.6 10.1 -23.2 9.8 -21.2 10.1 -23.5
2026-04-15T21:10:58.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:10:58.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:10:58.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.798742
2026-04-15T21:10:58.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:10:58.879 [DEBUG] [Thread-25801] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:10:58.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:10:58.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:10:58.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:10:58.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:10:58.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:10:37', tmtdew=3.85524, humidity=76.8018, cloud=0.0, wind=3.24936, temperature=9.38454, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:10:11.309', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05975000000000108, -0.029749999999999943, -0.10874999999999879, -0.07699999999999996, -0.06099999999999994, -0.025749999999998607, -0.054499999999999105, -0.007749999999999702, 0.006999999999999673, -0.012000000000000455, -0.04824999999999946, -0.0389999999999997, 0.03249999999999886, -0.013749999999999929, 0.015000000000000568, -0.005500000000001393, 0.0072499999999990905, -0.009500000000000952, -0.017000000000001236, 0.014749999999999375, 0.008999999999998565, 0.029249999999997556, -0.0012499999999988631, 0.013749999999999929, 0.030999999999998806, -0.08750000000000036, -0.02775000000000105, -0.005000000000000782, 0.019000000000000128, -0.017999999999998906, 0.05200000000000138, 0.014000000000001123, -0.01925000000000132], zp_timestamp='2026-04-15T19:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:10:59.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:10:59.144 [DEBUG] [Thread-25804] [transport.py] [_log()] starting thread (client mode): 0xee990cd0
2026-04-15T21:10:59.144 [DEBUG] [Thread-25804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:10:59.158 [DEBUG] [Thread-25804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:10:59.158 [INFO] [Thread-25804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:10:59.165 [DEBUG] [Thread-25804] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:10:59.165 [DEBUG] [Thread-25804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:10:59.166 [DEBUG] [Thread-25804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:10:59.166 [DEBUG] [Thread-25804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:10:59.166 [DEBUG] [Thread-25804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:10:59.166 [DEBUG] [Thread-25804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:10:59.166 [DEBUG] [Thread-25804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:10:59.166 [DEBUG] [Thread-25804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:10:59.166 [DEBUG] [Thread-25804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:10:59.166 [DEBUG] [Thread-25804] [transport.py] [_log()] client lang: <none>
2026-04-15T21:10:59.166 [DEBUG] [Thread-25804] [transport.py] [_log()] server lang: <none>
2026-04-15T21:10:59.166 [DEBUG] [Thread-25804] [transport.py] [_log()] kex follows: False
2026-04-15T21:10:59.166 [DEBUG] [Thread-25804] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:10:59.166 [DEBUG] [Thread-25804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:10:59.167 [DEBUG] [Thread-25804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:10:59.167 [DEBUG] [Thread-25804] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:10:59.167 [DEBUG] [Thread-25804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:10:59.167 [DEBUG] [Thread-25804] [transport.py] [_log()] Compression: none
2026-04-15T21:10:59.167 [DEBUG] [Thread-25804] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:10:59.224 [DEBUG] [Thread-25804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:10:59.225 [DEBUG] [Thread-25804] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:10:59.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:10:59.225 [DEBUG] [Thread-25804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:10:59.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:10:59.281 [DEBUG] [Thread-25804] [transport.py] [_log()] userauth is OK
2026-04-15T21:10:59.281 [DEBUG] [Thread-25804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:10:59.281 [DEBUG] [Thread-25804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:10:59.282 [DEBUG] [Thread-25804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:10:59.282 [DEBUG] [Thread-25804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:10:59.306 [INFO] [Thread-25804] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:10:59.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:10:59.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:11:00.115 [DEBUG] [Thread-25804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:11:00.115 [DEBUG] [Thread-25804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:11:00.163 [DEBUG] [Thread-25804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:11:00.163 [DEBUG] [Thread-25804] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:11:00.172 [DEBUG] [Thread-25804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:11:00.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:11:00.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')
2026-04-15T21:11:00.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
2026-04-15T21:11:00.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:11:00.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:11:00.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:11:00.207 [DEBUG] [Thread-25804] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:11:00.901 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:06.347 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:07.726 [DEBUG] [Thread-25806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:11.731 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:14.583 [DEBUG] [Thread-25807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:17.100 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:22.633 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:22.770 [DEBUG] [Thread-25808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:28.077 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:30.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:11:30.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:11:30.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
2026-04-15T21:11:31.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 11, 12), 4.08123, 75.3843, 0.0, 4.20084, 9.40886, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:11:31.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:11:12
2026-04-15T21:11:31.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:11:32.423 [DEBUG] [Thread-25809] [transport.py] [_log()] starting thread (client mode): 0xee9c2da0
2026-04-15T21:11:32.423 [DEBUG] [Thread-25809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:11:32.443 [DEBUG] [Thread-25809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:11:32.443 [INFO] [Thread-25809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:11:32.446 [DEBUG] [Thread-25809] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:11:32.446 [DEBUG] [Thread-25809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:11:32.446 [DEBUG] [Thread-25809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:11:32.446 [DEBUG] [Thread-25809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:11:32.446 [DEBUG] [Thread-25809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:11:32.446 [DEBUG] [Thread-25809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:11:32.446 [DEBUG] [Thread-25809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:11:32.446 [DEBUG] [Thread-25809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:11:32.446 [DEBUG] [Thread-25809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:11:32.447 [DEBUG] [Thread-25809] [transport.py] [_log()] client lang: <none>
2026-04-15T21:11:32.447 [DEBUG] [Thread-25809] [transport.py] [_log()] server lang: <none>
2026-04-15T21:11:32.447 [DEBUG] [Thread-25809] [transport.py] [_log()] kex follows: False
2026-04-15T21:11:32.447 [DEBUG] [Thread-25809] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:11:32.447 [DEBUG] [Thread-25809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:11:32.447 [DEBUG] [Thread-25809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:11:32.447 [DEBUG] [Thread-25809] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:11:32.447 [DEBUG] [Thread-25809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:11:32.447 [DEBUG] [Thread-25809] [transport.py] [_log()] Compression: none
2026-04-15T21:11:32.447 [DEBUG] [Thread-25809] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:11:32.466 [DEBUG] [Thread-25809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:11:32.466 [DEBUG] [Thread-25809] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:11:32.467 [DEBUG] [Thread-25809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:11:32.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:11:32.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:11:32.468 [DEBUG] [Thread-25809] [transport.py] [_log()] userauth is OK
2026-04-15T21:11:32.468 [DEBUG] [Thread-25809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:11:32.468 [DEBUG] [Thread-25809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:11:32.468 [DEBUG] [Thread-25809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:11:32.468 [DEBUG] [Thread-25809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:11:32.492 [INFO] [Thread-25809] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:11:32.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:11:33.273 [DEBUG] [Thread-25809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:11:33.274 [DEBUG] [Thread-25809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:11:33.274 [DEBUG] [Thread-25809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:11:33.314 [DEBUG] [Thread-25809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:11:33.314 [DEBUG] [Thread-25809] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:11:33.317 [DEBUG] [Thread-25809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:11:33.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:11:33.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:11:33.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:11:33.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:11:33.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:11:33.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:11:33.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:11:33.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:11:33.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:11:33.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.799089 -999.00   +9.50   7.59     78   +6.00 1 1 1 1 1     0    0 3.88 14.75 ZNESW 7.7 7.6 273.4 8.9 10.2 -24.6 10.1 -23.4 9.8 -21.3 10.1 -23.3
2026-04-15T21:11:33.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:11:33.344 [DEBUG] [Thread-25809] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:11:33.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:11:33.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.799089
2026-04-15T21:11:33.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:11:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:11:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:11:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:11:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:11:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:11:12', tmtdew=4.08123, humidity=75.3843, cloud=0.0, wind=4.20084, temperature=9.40886, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:10:41.290', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03575000000000017, -0.06375000000000064, -0.07350000000000101, -0.06550000000000011, -0.023749999999999716, -0.040000000000000924, 0.011250000000000426, 0.022499999999999076, -0.017999999999998906, -0.055749999999999744, -0.040000000000000924, 0.0019999999999988916, -0.028250000000001663, -0.009999999999999787, 0.010999999999999233, 0.017250000000000654, -0.03049999999999997, -0.0070000000000014495, 0.0012499999999988631, 0.02899999999999814, 0.03774999999999906, -0.03275000000000006, 0.012750000000000483, 0.05599999999999916, -0.07949999999999946, -0.0182500000000001, -0.010499999999998622, -0.024499999999999744, -0.027999999999998693, 0.012000000000000455, 0.027000000000001023, -0.01425000000000054], zp_timestamp='2026-04-15T19:10:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:11:33.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:11:33.603 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:33.610 [DEBUG] [Thread-25812] [transport.py] [_log()] starting thread (client mode): 0xee9c1f00
2026-04-15T21:11:33.610 [DEBUG] [Thread-25812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:11:33.624 [DEBUG] [Thread-25812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:11:33.624 [INFO] [Thread-25812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:11:33.632 [DEBUG] [Thread-25812] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:11:33.632 [DEBUG] [Thread-25812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:11:33.632 [DEBUG] [Thread-25812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:11:33.632 [DEBUG] [Thread-25812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:11:33.632 [DEBUG] [Thread-25812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:11:33.632 [DEBUG] [Thread-25812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:11:33.632 [DEBUG] [Thread-25812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:11:33.632 [DEBUG] [Thread-25812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:11:33.632 [DEBUG] [Thread-25812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:11:33.633 [DEBUG] [Thread-25812] [transport.py] [_log()] client lang: <none>
2026-04-15T21:11:33.633 [DEBUG] [Thread-25812] [transport.py] [_log()] server lang: <none>
2026-04-15T21:11:33.633 [DEBUG] [Thread-25812] [transport.py] [_log()] kex follows: False
2026-04-15T21:11:33.633 [DEBUG] [Thread-25812] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:11:33.633 [DEBUG] [Thread-25812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:11:33.633 [DEBUG] [Thread-25812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:11:33.633 [DEBUG] [Thread-25812] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:11:33.633 [DEBUG] [Thread-25812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:11:33.633 [DEBUG] [Thread-25812] [transport.py] [_log()] Compression: none
2026-04-15T21:11:33.633 [DEBUG] [Thread-25812] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:11:33.688 [DEBUG] [Thread-25812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:11:33.688 [DEBUG] [Thread-25812] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:11:33.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:11:33.689 [DEBUG] [Thread-25812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:11:33.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:11:33.745 [DEBUG] [Thread-25812] [transport.py] [_log()] userauth is OK
2026-04-15T21:11:33.745 [DEBUG] [Thread-25812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:11:33.745 [DEBUG] [Thread-25812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:11:33.745 [DEBUG] [Thread-25812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:11:33.745 [DEBUG] [Thread-25812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:11:33.763 [INFO] [Thread-25812] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:11:33.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:11:33.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:11:34.591 [DEBUG] [Thread-25812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:11:34.591 [DEBUG] [Thread-25812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:11:34.638 [DEBUG] [Thread-25812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:11:34.639 [DEBUG] [Thread-25812] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:11:34.647 [DEBUG] [Thread-25812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:11:34.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:11:34.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')
2026-04-15T21:11:34.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
2026-04-15T21:11:34.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:11:34.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:11:34.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:11:34.681 [DEBUG] [Thread-25812] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:11:37.799 [DEBUG] [Thread-25814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:38.987 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:44.809 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:45.318 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:45.319 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:50.303 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:52.844 [DEBUG] [Thread-25815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:11:55.710 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:01.120 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:04.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:12:04.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:12:04.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
2026-04-15T21:12:05.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 11, 48), 3.89363, 76.6028, 0.0, 5.71896, 9.41772, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:12:05.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:11:48
2026-04-15T21:12:06.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:12:06.527 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:06.719 [DEBUG] [Thread-25816] [transport.py] [_log()] starting thread (client mode): 0xf1336a10
2026-04-15T21:12:06.719 [DEBUG] [Thread-25816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:12:06.739 [DEBUG] [Thread-25816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:12:06.739 [INFO] [Thread-25816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:12:06.742 [DEBUG] [Thread-25816] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:12:06.742 [DEBUG] [Thread-25816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:12:06.742 [DEBUG] [Thread-25816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:12:06.742 [DEBUG] [Thread-25816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:12:06.742 [DEBUG] [Thread-25816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:12:06.743 [DEBUG] [Thread-25816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:12:06.743 [DEBUG] [Thread-25816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:12:06.743 [DEBUG] [Thread-25816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:12:06.743 [DEBUG] [Thread-25816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:12:06.743 [DEBUG] [Thread-25816] [transport.py] [_log()] client lang: <none>
2026-04-15T21:12:06.743 [DEBUG] [Thread-25816] [transport.py] [_log()] server lang: <none>
2026-04-15T21:12:06.743 [DEBUG] [Thread-25816] [transport.py] [_log()] kex follows: False
2026-04-15T21:12:06.743 [DEBUG] [Thread-25816] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:12:06.743 [DEBUG] [Thread-25816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:12:06.743 [DEBUG] [Thread-25816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:12:06.743 [DEBUG] [Thread-25816] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:12:06.743 [DEBUG] [Thread-25816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:12:06.744 [DEBUG] [Thread-25816] [transport.py] [_log()] Compression: none
2026-04-15T21:12:06.744 [DEBUG] [Thread-25816] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:12:06.762 [DEBUG] [Thread-25816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:12:06.762 [DEBUG] [Thread-25816] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:12:06.763 [DEBUG] [Thread-25816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:12:06.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:12:06.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:12:06.764 [DEBUG] [Thread-25816] [transport.py] [_log()] userauth is OK
2026-04-15T21:12:06.764 [DEBUG] [Thread-25816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:12:06.764 [DEBUG] [Thread-25816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:12:06.765 [DEBUG] [Thread-25816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:12:06.765 [DEBUG] [Thread-25816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:12:06.789 [INFO] [Thread-25816] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:12:06.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:12:07.604 [DEBUG] [Thread-25816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:12:07.604 [DEBUG] [Thread-25816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:12:07.605 [DEBUG] [Thread-25816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:12:07.646 [DEBUG] [Thread-25816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:12:07.646 [DEBUG] [Thread-25816] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:12:07.648 [DEBUG] [Thread-25816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:12:07.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:12:07.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:12:07.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:12:07.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:12:07.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:12:07.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:12:07.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:12:07.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:12:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:12:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.799437 -999.00   +9.50   7.81     79   +6.10 1 1 1 1 1     0    0 3.88 15.18 ZNESW 7.7 7.8 269.6 9.7 10.2 -24.6 10.1 -23.1 9.8 -21.1 10.1 -23.2
2026-04-15T21:12:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:12:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:12:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.799437
2026-04-15T21:12:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:12:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:12:07.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:12:07.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:12:07.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:12:07.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:11:48', tmtdew=3.89363, humidity=76.6028, cloud=0.0, wind=5.71896, temperature=9.41772, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:11:11.357', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03575000000000017, -0.06375000000000064, -0.07350000000000101, -0.06550000000000011, -0.023749999999999716, -0.040000000000000924, 0.011250000000000426, 0.022499999999999076, -0.017999999999998906, -0.055749999999999744, -0.040000000000000924, 0.0019999999999988916, -0.028250000000001663, -0.009999999999999787, 0.010999999999999233, 0.017250000000000654, -0.03049999999999997, -0.0070000000000014495, 0.0012499999999988631, 0.02899999999999814, 0.03774999999999906, -0.03275000000000006, 0.012750000000000483, 0.05599999999999916, -0.07949999999999946, -0.0182500000000001, -0.010499999999998622, -0.024499999999999744, -0.027999999999998693, 0.012000000000000455, 0.027000000000001023, -0.01425000000000054], zp_timestamp='2026-04-15T19:10:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:12:07.667 [DEBUG] [Thread-25816] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:12:07.874 [DEBUG] [Thread-25819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:07.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:12:07.886 [DEBUG] [Thread-25820] [transport.py] [_log()] starting thread (client mode): 0xf1336200
2026-04-15T21:12:07.886 [DEBUG] [Thread-25820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:12:07.901 [DEBUG] [Thread-25820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:12:07.901 [INFO] [Thread-25820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:12:07.909 [DEBUG] [Thread-25820] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:12:07.909 [DEBUG] [Thread-25820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:12:07.909 [DEBUG] [Thread-25820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:12:07.909 [DEBUG] [Thread-25820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:12:07.909 [DEBUG] [Thread-25820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:12:07.909 [DEBUG] [Thread-25820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:12:07.909 [DEBUG] [Thread-25820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:12:07.909 [DEBUG] [Thread-25820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:12:07.909 [DEBUG] [Thread-25820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:12:07.909 [DEBUG] [Thread-25820] [transport.py] [_log()] client lang: <none>
2026-04-15T21:12:07.909 [DEBUG] [Thread-25820] [transport.py] [_log()] server lang: <none>
2026-04-15T21:12:07.910 [DEBUG] [Thread-25820] [transport.py] [_log()] kex follows: False
2026-04-15T21:12:07.910 [DEBUG] [Thread-25820] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:12:07.910 [DEBUG] [Thread-25820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:12:07.910 [DEBUG] [Thread-25820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:12:07.910 [DEBUG] [Thread-25820] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:12:07.910 [DEBUG] [Thread-25820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:12:07.910 [DEBUG] [Thread-25820] [transport.py] [_log()] Compression: none
2026-04-15T21:12:07.910 [DEBUG] [Thread-25820] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:12:07.965 [DEBUG] [Thread-25820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:12:07.966 [DEBUG] [Thread-25820] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:12:07.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:12:07.966 [DEBUG] [Thread-25820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:12:07.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:12:08.028 [DEBUG] [Thread-25820] [transport.py] [_log()] userauth is OK
2026-04-15T21:12:08.028 [DEBUG] [Thread-25820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:12:08.028 [DEBUG] [Thread-25820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:12:08.028 [DEBUG] [Thread-25820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:12:08.028 [DEBUG] [Thread-25820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:12:08.050 [INFO] [Thread-25820] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:12:08.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:12:08.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:12:08.882 [DEBUG] [Thread-25820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:12:08.882 [DEBUG] [Thread-25820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:12:08.930 [DEBUG] [Thread-25820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:12:08.930 [DEBUG] [Thread-25820] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:12:08.939 [DEBUG] [Thread-25820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:12:08.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:12:08.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')
2026-04-15T21:12:08.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
2026-04-15T21:12:08.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:12:08.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:12:08.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:12:08.974 [DEBUG] [Thread-25820] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:12:11.913 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:14.747 [DEBUG] [Thread-25822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:17.284 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:22.805 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:22.914 [DEBUG] [Thread-25823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:28.275 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:33.770 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:37.947 [DEBUG] [Thread-25824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:38.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:12:38.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:12:39.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
2026-04-15T21:12:39.180 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:40.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 12, 23), 4.08039, 75.4175, 0.0, 5.0652, 9.54132, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:12:40.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:12:23
2026-04-15T21:12:40.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:12:41.173 [DEBUG] [Thread-25825] [transport.py] [_log()] starting thread (client mode): 0xee9c2d70
2026-04-15T21:12:41.173 [DEBUG] [Thread-25825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:12:41.193 [DEBUG] [Thread-25825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:12:41.193 [INFO] [Thread-25825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:12:41.196 [DEBUG] [Thread-25825] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:12:41.196 [DEBUG] [Thread-25825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:12:41.196 [DEBUG] [Thread-25825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:12:41.197 [DEBUG] [Thread-25825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:12:41.197 [DEBUG] [Thread-25825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:12:41.197 [DEBUG] [Thread-25825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:12:41.197 [DEBUG] [Thread-25825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:12:41.197 [DEBUG] [Thread-25825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:12:41.197 [DEBUG] [Thread-25825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:12:41.197 [DEBUG] [Thread-25825] [transport.py] [_log()] client lang: <none>
2026-04-15T21:12:41.197 [DEBUG] [Thread-25825] [transport.py] [_log()] server lang: <none>
2026-04-15T21:12:41.197 [DEBUG] [Thread-25825] [transport.py] [_log()] kex follows: False
2026-04-15T21:12:41.197 [DEBUG] [Thread-25825] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:12:41.198 [DEBUG] [Thread-25825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:12:41.198 [DEBUG] [Thread-25825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:12:41.198 [DEBUG] [Thread-25825] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:12:41.198 [DEBUG] [Thread-25825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:12:41.198 [DEBUG] [Thread-25825] [transport.py] [_log()] Compression: none
2026-04-15T21:12:41.198 [DEBUG] [Thread-25825] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:12:41.216 [DEBUG] [Thread-25825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:12:41.217 [DEBUG] [Thread-25825] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:12:41.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:12:41.217 [DEBUG] [Thread-25825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:12:41.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:12:41.218 [DEBUG] [Thread-25825] [transport.py] [_log()] userauth is OK
2026-04-15T21:12:41.218 [DEBUG] [Thread-25825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:12:41.219 [DEBUG] [Thread-25825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:12:41.219 [DEBUG] [Thread-25825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:12:41.219 [DEBUG] [Thread-25825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:12:41.237 [INFO] [Thread-25825] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:12:41.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:12:42.038 [DEBUG] [Thread-25825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:12:42.038 [DEBUG] [Thread-25825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:12:42.039 [DEBUG] [Thread-25825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:12:42.079 [DEBUG] [Thread-25825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:12:42.079 [DEBUG] [Thread-25825] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:12:42.082 [DEBUG] [Thread-25825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:12:42.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:12:42.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:12:42.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:12:42.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:12:42.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:12:42.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:12:42.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:12:42.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:12:42.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:12:42.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.799784 -999.00   +9.50   6.24     79   +6.10 1 1 1 1 1     0    0 3.83 14.76 ZNESW 5.5 6.2 282.4 8.4 10.2 -24.4 10.1 -23.2 9.8 -21.2 10.1 -23.2
2026-04-15T21:12:42.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:12:42.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:12:42.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.799784
2026-04-15T21:12:42.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:12:42.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:12:42.107 [DEBUG] [Thread-25825] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:12:42.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:12:42.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:12:42.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:12:42.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:12:23', tmtdew=4.08039, humidity=75.4175, cloud=0.0, wind=5.0652, temperature=9.54132, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:11:41.338', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03575000000000017, -0.06375000000000064, -0.07350000000000101, -0.06550000000000011, -0.023749999999999716, -0.040000000000000924, 0.011250000000000426, 0.022499999999999076, -0.017999999999998906, -0.055749999999999744, -0.040000000000000924, 0.0019999999999988916, -0.028250000000001663, -0.009999999999999787, 0.010999999999999233, 0.017250000000000654, -0.03049999999999997, -0.0070000000000014495, 0.0012499999999988631, 0.02899999999999814, 0.03774999999999906, -0.03275000000000006, 0.012750000000000483, 0.05599999999999916, -0.07949999999999946, -0.0182500000000001, -0.010499999999998622, -0.024499999999999744, -0.027999999999998693, 0.012000000000000455, 0.027000000000001023, -0.01425000000000054], zp_timestamp='2026-04-15T19:10:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:12:42.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:12:42.357 [DEBUG] [Thread-25828] [transport.py] [_log()] starting thread (client mode): 0xf1336a10
2026-04-15T21:12:42.357 [DEBUG] [Thread-25828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:12:42.371 [DEBUG] [Thread-25828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:12:42.371 [INFO] [Thread-25828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:12:42.379 [DEBUG] [Thread-25828] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:12:42.379 [DEBUG] [Thread-25828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:12:42.379 [DEBUG] [Thread-25828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:12:42.379 [DEBUG] [Thread-25828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:12:42.379 [DEBUG] [Thread-25828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:12:42.379 [DEBUG] [Thread-25828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:12:42.379 [DEBUG] [Thread-25828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:12:42.379 [DEBUG] [Thread-25828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:12:42.380 [DEBUG] [Thread-25828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:12:42.380 [DEBUG] [Thread-25828] [transport.py] [_log()] client lang: <none>
2026-04-15T21:12:42.380 [DEBUG] [Thread-25828] [transport.py] [_log()] server lang: <none>
2026-04-15T21:12:42.380 [DEBUG] [Thread-25828] [transport.py] [_log()] kex follows: False
2026-04-15T21:12:42.380 [DEBUG] [Thread-25828] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:12:42.380 [DEBUG] [Thread-25828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:12:42.380 [DEBUG] [Thread-25828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:12:42.380 [DEBUG] [Thread-25828] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:12:42.381 [DEBUG] [Thread-25828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:12:42.381 [DEBUG] [Thread-25828] [transport.py] [_log()] Compression: none
2026-04-15T21:12:42.381 [DEBUG] [Thread-25828] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:12:42.436 [DEBUG] [Thread-25828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:12:42.437 [DEBUG] [Thread-25828] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:12:42.437 [DEBUG] [Thread-25828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:12:42.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:12:42.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:12:42.493 [DEBUG] [Thread-25828] [transport.py] [_log()] userauth is OK
2026-04-15T21:12:42.493 [DEBUG] [Thread-25828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:12:42.493 [DEBUG] [Thread-25828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:12:42.493 [DEBUG] [Thread-25828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:12:42.494 [DEBUG] [Thread-25828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:12:42.519 [INFO] [Thread-25828] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:12:42.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:12:42.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:12:43.339 [DEBUG] [Thread-25828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:12:43.339 [DEBUG] [Thread-25828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:12:43.387 [DEBUG] [Thread-25828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:12:43.387 [DEBUG] [Thread-25828] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:12:43.396 [DEBUG] [Thread-25828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:12:43.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:12:43.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')
2026-04-15T21:12:43.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
2026-04-15T21:12:43.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:12:43.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:12:43.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:12:43.431 [DEBUG] [Thread-25828] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:12:44.700 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:45.530 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:45.531 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:50.059 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:52.980 [DEBUG] [Thread-25830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:12:55.704 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:01.329 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:06.701 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:08.024 [DEBUG] [Thread-25831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:12.171 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:13.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:13:13.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:13:13.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
2026-04-15T21:13:14.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 12, 59), 4.14631, 75.0526, 0.0, 4.94172, 9.4918, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:13:14.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:12:59
2026-04-15T21:13:14.898 [DEBUG] [Thread-25832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:15.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:13:15.534 [DEBUG] [Thread-25833] [transport.py] [_log()] starting thread (client mode): 0xee9c0730
2026-04-15T21:13:15.534 [DEBUG] [Thread-25833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:13:15.555 [DEBUG] [Thread-25833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:13:15.555 [INFO] [Thread-25833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:13:15.558 [DEBUG] [Thread-25833] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:13:15.558 [DEBUG] [Thread-25833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:13:15.558 [DEBUG] [Thread-25833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:13:15.558 [DEBUG] [Thread-25833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:13:15.559 [DEBUG] [Thread-25833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:13:15.559 [DEBUG] [Thread-25833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:13:15.559 [DEBUG] [Thread-25833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:13:15.559 [DEBUG] [Thread-25833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:13:15.559 [DEBUG] [Thread-25833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:13:15.559 [DEBUG] [Thread-25833] [transport.py] [_log()] client lang: <none>
2026-04-15T21:13:15.559 [DEBUG] [Thread-25833] [transport.py] [_log()] server lang: <none>
2026-04-15T21:13:15.559 [DEBUG] [Thread-25833] [transport.py] [_log()] kex follows: False
2026-04-15T21:13:15.559 [DEBUG] [Thread-25833] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:13:15.559 [DEBUG] [Thread-25833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:13:15.559 [DEBUG] [Thread-25833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:13:15.560 [DEBUG] [Thread-25833] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:13:15.560 [DEBUG] [Thread-25833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:13:15.560 [DEBUG] [Thread-25833] [transport.py] [_log()] Compression: none
2026-04-15T21:13:15.560 [DEBUG] [Thread-25833] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:13:15.576 [DEBUG] [Thread-25833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:13:15.577 [DEBUG] [Thread-25833] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:13:15.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:13:15.577 [DEBUG] [Thread-25833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:13:15.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:13:15.578 [DEBUG] [Thread-25833] [transport.py] [_log()] userauth is OK
2026-04-15T21:13:15.578 [DEBUG] [Thread-25833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:13:15.579 [DEBUG] [Thread-25833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:13:15.579 [DEBUG] [Thread-25833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:13:15.579 [DEBUG] [Thread-25833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:13:15.603 [INFO] [Thread-25833] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:13:15.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:13:16.404 [DEBUG] [Thread-25833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:13:16.404 [DEBUG] [Thread-25833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:13:16.404 [DEBUG] [Thread-25833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:13:16.446 [DEBUG] [Thread-25833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:13:16.446 [DEBUG] [Thread-25833] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:13:16.448 [DEBUG] [Thread-25833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:13:16.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:13:16.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:13:16.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:13:16.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:13:16.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:13:16.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:13:16.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:13:16.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:13:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:13:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.800478 -999.00   +9.50   3.51     79   +6.10 1 1 1 1 1     0    0 3.81 14.99 ZNESW 3.3 3.5 285.8 4.5 10.2 -24.4 10.1 -23.1 9.8 -21.1 10.1 -23.2
2026-04-15T21:13:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:13:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:13:16.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.800478
2026-04-15T21:13:16.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:13:16.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:13:16.468 [DEBUG] [Thread-25833] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:13:16.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:13:16.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:13:16.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:13:16.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:12:59', tmtdew=4.14631, humidity=75.0526, cloud=0.0, wind=4.94172, temperature=9.4918, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:12:41.299', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03575000000000017, -0.06375000000000064, -0.07350000000000101, -0.06550000000000011, -0.023749999999999716, -0.040000000000000924, 0.011250000000000426, 0.022499999999999076, -0.017999999999998906, -0.055749999999999744, -0.040000000000000924, 0.0019999999999988916, -0.028250000000001663, -0.009999999999999787, 0.010999999999999233, 0.017250000000000654, -0.03049999999999997, -0.0070000000000014495, 0.0012499999999988631, 0.02899999999999814, 0.03774999999999906, -0.03275000000000006, 0.012750000000000483, 0.05599999999999916, -0.07949999999999946, -0.0182500000000001, -0.010499999999998622, -0.024499999999999744, -0.027999999999998693, 0.012000000000000455, 0.027000000000001023, -0.01425000000000054], zp_timestamp='2026-04-15T19:10:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:13:16.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:13:16.688 [DEBUG] [Thread-25836] [transport.py] [_log()] starting thread (client mode): 0xf1334250
2026-04-15T21:13:16.689 [DEBUG] [Thread-25836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:13:16.703 [DEBUG] [Thread-25836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:13:16.703 [INFO] [Thread-25836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:13:16.711 [DEBUG] [Thread-25836] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:13:16.711 [DEBUG] [Thread-25836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:13:16.711 [DEBUG] [Thread-25836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:13:16.711 [DEBUG] [Thread-25836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:13:16.711 [DEBUG] [Thread-25836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:13:16.711 [DEBUG] [Thread-25836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:13:16.711 [DEBUG] [Thread-25836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:13:16.711 [DEBUG] [Thread-25836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:13:16.711 [DEBUG] [Thread-25836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:13:16.711 [DEBUG] [Thread-25836] [transport.py] [_log()] client lang: <none>
2026-04-15T21:13:16.711 [DEBUG] [Thread-25836] [transport.py] [_log()] server lang: <none>
2026-04-15T21:13:16.711 [DEBUG] [Thread-25836] [transport.py] [_log()] kex follows: False
2026-04-15T21:13:16.711 [DEBUG] [Thread-25836] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:13:16.712 [DEBUG] [Thread-25836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:13:16.712 [DEBUG] [Thread-25836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:13:16.712 [DEBUG] [Thread-25836] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:13:16.712 [DEBUG] [Thread-25836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:13:16.712 [DEBUG] [Thread-25836] [transport.py] [_log()] Compression: none
2026-04-15T21:13:16.712 [DEBUG] [Thread-25836] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:13:16.769 [DEBUG] [Thread-25836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:13:16.769 [DEBUG] [Thread-25836] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:13:16.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:13:16.770 [DEBUG] [Thread-25836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:13:16.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:13:16.825 [DEBUG] [Thread-25836] [transport.py] [_log()] userauth is OK
2026-04-15T21:13:16.825 [DEBUG] [Thread-25836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:13:16.825 [DEBUG] [Thread-25836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:13:16.826 [DEBUG] [Thread-25836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:13:16.826 [DEBUG] [Thread-25836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:13:16.845 [INFO] [Thread-25836] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:13:16.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:13:16.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:13:17.720 [DEBUG] [Thread-25836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:13:17.720 [DEBUG] [Thread-25836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:13:17.743 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:17.768 [DEBUG] [Thread-25836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:13:17.768 [DEBUG] [Thread-25836] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:13:17.777 [DEBUG] [Thread-25836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:13:17.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:13:17.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')
2026-04-15T21:13:17.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
2026-04-15T21:13:17.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:13:17.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:13:17.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:13:17.812 [DEBUG] [Thread-25836] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:13:23.057 [DEBUG] [Thread-25838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:23.212 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:28.658 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:34.229 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:38.099 [DEBUG] [Thread-25839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:39.701 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:45.145 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:45.732 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:45.734 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:47.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:13:47.835 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:13:47.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
2026-04-15T21:13:49.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 13, 34), 4.07661, 75.6738, 0.0, 5.01336, 9.64995, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:13:49.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:13:34
2026-04-15T21:13:49.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:13:49.932 [DEBUG] [Thread-25840] [transport.py] [_log()] starting thread (client mode): 0xf13c8430
2026-04-15T21:13:49.932 [DEBUG] [Thread-25840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:13:49.953 [DEBUG] [Thread-25840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:13:49.953 [INFO] [Thread-25840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:13:49.955 [DEBUG] [Thread-25840] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:13:49.955 [DEBUG] [Thread-25840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:13:49.955 [DEBUG] [Thread-25840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:13:49.955 [DEBUG] [Thread-25840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:13:49.955 [DEBUG] [Thread-25840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:13:49.955 [DEBUG] [Thread-25840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:13:49.955 [DEBUG] [Thread-25840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:13:49.955 [DEBUG] [Thread-25840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:13:49.955 [DEBUG] [Thread-25840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:13:49.955 [DEBUG] [Thread-25840] [transport.py] [_log()] client lang: <none>
2026-04-15T21:13:49.955 [DEBUG] [Thread-25840] [transport.py] [_log()] server lang: <none>
2026-04-15T21:13:49.955 [DEBUG] [Thread-25840] [transport.py] [_log()] kex follows: False
2026-04-15T21:13:49.955 [DEBUG] [Thread-25840] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:13:49.955 [DEBUG] [Thread-25840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:13:49.956 [DEBUG] [Thread-25840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:13:49.956 [DEBUG] [Thread-25840] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:13:49.956 [DEBUG] [Thread-25840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:13:49.956 [DEBUG] [Thread-25840] [transport.py] [_log()] Compression: none
2026-04-15T21:13:49.956 [DEBUG] [Thread-25840] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:13:49.974 [DEBUG] [Thread-25840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:13:49.975 [DEBUG] [Thread-25840] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:13:49.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:13:49.975 [DEBUG] [Thread-25840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:13:49.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:13:49.976 [DEBUG] [Thread-25840] [transport.py] [_log()] userauth is OK
2026-04-15T21:13:49.977 [DEBUG] [Thread-25840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:13:49.977 [DEBUG] [Thread-25840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:13:49.977 [DEBUG] [Thread-25840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:13:49.977 [DEBUG] [Thread-25840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:13:50.001 [INFO] [Thread-25840] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:13:50.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:13:50.751 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:50.777 [DEBUG] [Thread-25840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:13:50.777 [DEBUG] [Thread-25840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:13:50.778 [DEBUG] [Thread-25840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:13:50.818 [DEBUG] [Thread-25840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:13:50.818 [DEBUG] [Thread-25840] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:13:50.821 [DEBUG] [Thread-25840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:13:50.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:13:50.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:13:50.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:13:50.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:13:50.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:13:50.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:13:50.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:13:50.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:13:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:13:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.800826 -999.00   +9.50   1.32     79   +6.10 1 1 1 1 1     0    0 3.86 15.09 ZNESW 3.3 1.3 257.8 4.2 10.2 -24.4 10.1 -23.1 9.7 -21.0 10.0 -23.1
2026-04-15T21:13:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:13:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:13:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.800826
2026-04-15T21:13:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:13:50.845 [DEBUG] [Thread-25840] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:13:50.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:13:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:13:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:13:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:13:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:13:34', tmtdew=4.07661, humidity=75.6738, cloud=0.0, wind=5.01336, temperature=9.64995, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:13:11.366', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03575000000000017, -0.06375000000000064, -0.07350000000000101, -0.06550000000000011, -0.023749999999999716, -0.040000000000000924, 0.011250000000000426, 0.022499999999999076, -0.017999999999998906, -0.055749999999999744, -0.040000000000000924, 0.0019999999999988916, -0.028250000000001663, -0.009999999999999787, 0.010999999999999233, 0.017250000000000654, -0.03049999999999997, -0.0070000000000014495, 0.0012499999999988631, 0.02899999999999814, 0.03774999999999906, -0.03275000000000006, 0.012750000000000483, 0.05599999999999916, -0.07949999999999946, -0.0182500000000001, -0.010499999999998622, -0.024499999999999744, -0.027999999999998693, 0.012000000000000455, 0.027000000000001023, -0.01425000000000054], zp_timestamp='2026-04-15T19:10:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:13:51.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:13:51.101 [DEBUG] [Thread-25843] [transport.py] [_log()] starting thread (client mode): 0xf13c8730
2026-04-15T21:13:51.101 [DEBUG] [Thread-25843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:13:51.116 [DEBUG] [Thread-25843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:13:51.116 [INFO] [Thread-25843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:13:51.123 [DEBUG] [Thread-25843] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:13:51.124 [DEBUG] [Thread-25843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:13:51.124 [DEBUG] [Thread-25843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:13:51.124 [DEBUG] [Thread-25843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:13:51.124 [DEBUG] [Thread-25843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:13:51.124 [DEBUG] [Thread-25843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:13:51.124 [DEBUG] [Thread-25843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:13:51.124 [DEBUG] [Thread-25843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:13:51.124 [DEBUG] [Thread-25843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:13:51.124 [DEBUG] [Thread-25843] [transport.py] [_log()] client lang: <none>
2026-04-15T21:13:51.124 [DEBUG] [Thread-25843] [transport.py] [_log()] server lang: <none>
2026-04-15T21:13:51.124 [DEBUG] [Thread-25843] [transport.py] [_log()] kex follows: False
2026-04-15T21:13:51.124 [DEBUG] [Thread-25843] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:13:51.125 [DEBUG] [Thread-25843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:13:51.125 [DEBUG] [Thread-25843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:13:51.125 [DEBUG] [Thread-25843] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:13:51.125 [DEBUG] [Thread-25843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:13:51.125 [DEBUG] [Thread-25843] [transport.py] [_log()] Compression: none
2026-04-15T21:13:51.125 [DEBUG] [Thread-25843] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:13:51.181 [DEBUG] [Thread-25843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:13:51.181 [DEBUG] [Thread-25843] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:13:51.182 [DEBUG] [Thread-25843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:13:51.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:13:51.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:13:51.241 [DEBUG] [Thread-25843] [transport.py] [_log()] userauth is OK
2026-04-15T21:13:51.241 [DEBUG] [Thread-25843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:13:51.241 [DEBUG] [Thread-25843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:13:51.241 [DEBUG] [Thread-25843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:13:51.242 [DEBUG] [Thread-25843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:13:51.267 [INFO] [Thread-25843] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:13:51.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:13:51.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:13:52.089 [DEBUG] [Thread-25843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:13:52.090 [DEBUG] [Thread-25843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:13:52.138 [DEBUG] [Thread-25843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:13:52.139 [DEBUG] [Thread-25843] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:13:52.148 [DEBUG] [Thread-25843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:13:52.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:13:52.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')
2026-04-15T21:13:52.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
2026-04-15T21:13:52.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:13:52.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:13:52.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:13:52.182 [DEBUG] [Thread-25843] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:13:53.132 [DEBUG] [Thread-25845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:13:56.489 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:02.147 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:07.529 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:08.178 [DEBUG] [Thread-25846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:12.963 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:15.061 [DEBUG] [Thread-25847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:18.435 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:22.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:14:22.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:14:22.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
2026-04-15T21:14:23.208 [DEBUG] [Thread-25848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:23.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 14, 9), 4.20195, 74.7709, 0.0, 5.01228, 9.5584, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:14:23.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:14:09
2026-04-15T21:14:23.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:14:23.918 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:24.290 [DEBUG] [Thread-25849] [transport.py] [_log()] starting thread (client mode): 0xf13cad70
2026-04-15T21:14:24.290 [DEBUG] [Thread-25849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:14:24.310 [DEBUG] [Thread-25849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:14:24.310 [INFO] [Thread-25849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:14:24.313 [DEBUG] [Thread-25849] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:14:24.313 [DEBUG] [Thread-25849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:14:24.313 [DEBUG] [Thread-25849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:14:24.313 [DEBUG] [Thread-25849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:14:24.314 [DEBUG] [Thread-25849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:14:24.314 [DEBUG] [Thread-25849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:14:24.314 [DEBUG] [Thread-25849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:14:24.314 [DEBUG] [Thread-25849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:14:24.314 [DEBUG] [Thread-25849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:14:24.314 [DEBUG] [Thread-25849] [transport.py] [_log()] client lang: <none>
2026-04-15T21:14:24.314 [DEBUG] [Thread-25849] [transport.py] [_log()] server lang: <none>
2026-04-15T21:14:24.314 [DEBUG] [Thread-25849] [transport.py] [_log()] kex follows: False
2026-04-15T21:14:24.314 [DEBUG] [Thread-25849] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:14:24.314 [DEBUG] [Thread-25849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:14:24.314 [DEBUG] [Thread-25849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:14:24.315 [DEBUG] [Thread-25849] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:14:24.315 [DEBUG] [Thread-25849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:14:24.315 [DEBUG] [Thread-25849] [transport.py] [_log()] Compression: none
2026-04-15T21:14:24.315 [DEBUG] [Thread-25849] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:14:24.332 [DEBUG] [Thread-25849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:14:24.333 [DEBUG] [Thread-25849] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:14:24.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:14:24.333 [DEBUG] [Thread-25849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:14:24.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:14:24.335 [DEBUG] [Thread-25849] [transport.py] [_log()] userauth is OK
2026-04-15T21:14:24.335 [DEBUG] [Thread-25849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:14:24.335 [DEBUG] [Thread-25849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:14:24.335 [DEBUG] [Thread-25849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:14:24.335 [DEBUG] [Thread-25849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:14:24.355 [INFO] [Thread-25849] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:14:24.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:14:25.145 [DEBUG] [Thread-25849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:14:25.145 [DEBUG] [Thread-25849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:14:25.146 [DEBUG] [Thread-25849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:14:25.186 [DEBUG] [Thread-25849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:14:25.186 [DEBUG] [Thread-25849] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:14:25.189 [DEBUG] [Thread-25849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:14:25.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:14:25.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:14:25.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:14:25.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:14:25.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:14:25.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:14:25.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:14:25.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:14:25.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:14:25.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.801173 -999.00   +9.60   3.35     78   +6.00 1 1 1 1 1     0    0 3.75 13.36 ZNESW 3.7 3.4 264.8 4.4 10.2 -24.4 10.1 -23.1 9.8 -21.0 10.1 -23.2
2026-04-15T21:14:25.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:14:25.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:14:25.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.801173
2026-04-15T21:14:25.212 [DEBUG] [Thread-25849] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:14:25.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:14:25.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:14:25.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:14:25.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:14:25.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:14:25.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:14:09', tmtdew=4.20195, humidity=74.7709, cloud=0.0, wind=5.01228, temperature=9.5584, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:13:41.347', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03575000000000017, -0.06375000000000064, -0.07350000000000101, -0.06550000000000011, -0.023749999999999716, -0.040000000000000924, 0.011250000000000426, 0.022499999999999076, -0.017999999999998906, -0.055749999999999744, -0.040000000000000924, 0.0019999999999988916, -0.028250000000001663, -0.009999999999999787, 0.010999999999999233, 0.017250000000000654, -0.03049999999999997, -0.0070000000000014495, 0.0012499999999988631, 0.02899999999999814, 0.03774999999999906, -0.03275000000000006, 0.012750000000000483, 0.05599999999999916, -0.07949999999999946, -0.0182500000000001, -0.010499999999998622, -0.024499999999999744, -0.027999999999998693, 0.012000000000000455, 0.027000000000001023, -0.01425000000000054], zp_timestamp='2026-04-15T19:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:14:25.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:14:25.478 [DEBUG] [Thread-25852] [transport.py] [_log()] starting thread (client mode): 0xf13c8af0
2026-04-15T21:14:25.478 [DEBUG] [Thread-25852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:14:25.492 [DEBUG] [Thread-25852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:14:25.492 [INFO] [Thread-25852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:14:25.499 [DEBUG] [Thread-25852] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:14:25.499 [DEBUG] [Thread-25852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:14:25.499 [DEBUG] [Thread-25852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:14:25.499 [DEBUG] [Thread-25852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:14:25.499 [DEBUG] [Thread-25852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:14:25.500 [DEBUG] [Thread-25852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:14:25.500 [DEBUG] [Thread-25852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:14:25.500 [DEBUG] [Thread-25852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:14:25.500 [DEBUG] [Thread-25852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:14:25.500 [DEBUG] [Thread-25852] [transport.py] [_log()] client lang: <none>
2026-04-15T21:14:25.500 [DEBUG] [Thread-25852] [transport.py] [_log()] server lang: <none>
2026-04-15T21:14:25.500 [DEBUG] [Thread-25852] [transport.py] [_log()] kex follows: False
2026-04-15T21:14:25.500 [DEBUG] [Thread-25852] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:14:25.500 [DEBUG] [Thread-25852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:14:25.500 [DEBUG] [Thread-25852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:14:25.500 [DEBUG] [Thread-25852] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:14:25.501 [DEBUG] [Thread-25852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:14:25.501 [DEBUG] [Thread-25852] [transport.py] [_log()] Compression: none
2026-04-15T21:14:25.501 [DEBUG] [Thread-25852] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:14:25.556 [DEBUG] [Thread-25852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:14:25.556 [DEBUG] [Thread-25852] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:14:25.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:14:25.557 [DEBUG] [Thread-25852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:14:25.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:14:25.614 [DEBUG] [Thread-25852] [transport.py] [_log()] userauth is OK
2026-04-15T21:14:25.614 [DEBUG] [Thread-25852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:14:25.614 [DEBUG] [Thread-25852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:14:25.615 [DEBUG] [Thread-25852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:14:25.615 [DEBUG] [Thread-25852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:14:25.642 [INFO] [Thread-25852] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:14:25.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:14:25.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:14:26.446 [DEBUG] [Thread-25852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:14:26.447 [DEBUG] [Thread-25852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:14:26.494 [DEBUG] [Thread-25852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:14:26.495 [DEBUG] [Thread-25852] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:14:26.503 [DEBUG] [Thread-25852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:14:26.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:14:26.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')
2026-04-15T21:14:26.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') -> 00000000
2026-04-15T21:14:26.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:14:26.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:14:26.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:14:26.536 [DEBUG] [Thread-25852] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:14:29.327 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:34.722 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:38.238 [DEBUG] [Thread-25854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:40.223 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:45.604 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:45.932 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:45.933 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:51.089 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:53.285 [DEBUG] [Thread-25855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:56.459 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:14:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:14:56.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:14:56.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
2026-04-15T21:14:57.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 14, 45), 4.10814, 75.5086, 0.0, 4.97808, 9.65046, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:14:57.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:14:45
2026-04-15T21:14:58.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:14:58.676 [DEBUG] [Thread-25856] [transport.py] [_log()] starting thread (client mode): 0xee991510
2026-04-15T21:14:58.677 [DEBUG] [Thread-25856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:14:58.696 [DEBUG] [Thread-25856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:14:58.696 [INFO] [Thread-25856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:14:58.699 [DEBUG] [Thread-25856] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:14:58.699 [DEBUG] [Thread-25856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:14:58.699 [DEBUG] [Thread-25856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:14:58.699 [DEBUG] [Thread-25856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:14:58.699 [DEBUG] [Thread-25856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:14:58.700 [DEBUG] [Thread-25856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:14:58.700 [DEBUG] [Thread-25856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:14:58.700 [DEBUG] [Thread-25856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:14:58.700 [DEBUG] [Thread-25856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:14:58.700 [DEBUG] [Thread-25856] [transport.py] [_log()] client lang: <none>
2026-04-15T21:14:58.700 [DEBUG] [Thread-25856] [transport.py] [_log()] server lang: <none>
2026-04-15T21:14:58.700 [DEBUG] [Thread-25856] [transport.py] [_log()] kex follows: False
2026-04-15T21:14:58.700 [DEBUG] [Thread-25856] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:14:58.700 [DEBUG] [Thread-25856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:14:58.700 [DEBUG] [Thread-25856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:14:58.701 [DEBUG] [Thread-25856] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:14:58.701 [DEBUG] [Thread-25856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:14:58.701 [DEBUG] [Thread-25856] [transport.py] [_log()] Compression: none
2026-04-15T21:14:58.701 [DEBUG] [Thread-25856] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:14:58.718 [DEBUG] [Thread-25856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:14:58.719 [DEBUG] [Thread-25856] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:14:58.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:14:58.720 [DEBUG] [Thread-25856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:14:58.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:14:58.721 [DEBUG] [Thread-25856] [transport.py] [_log()] userauth is OK
2026-04-15T21:14:58.721 [DEBUG] [Thread-25856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:14:58.721 [DEBUG] [Thread-25856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:14:58.721 [DEBUG] [Thread-25856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:14:58.721 [DEBUG] [Thread-25856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:14:58.736 [INFO] [Thread-25856] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:14:58.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:14:59.547 [DEBUG] [Thread-25856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:14:59.547 [DEBUG] [Thread-25856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:14:59.547 [DEBUG] [Thread-25856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:14:59.588 [DEBUG] [Thread-25856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:14:59.588 [DEBUG] [Thread-25856] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:14:59.591 [DEBUG] [Thread-25856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:14:59.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:14:59.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:14:59.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:14:59.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:14:59.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:14:59.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:14:59.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:14:59.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:14:59.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:14:59.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.801520 -999.00   +9.60   5.18     78   +6.10 1 1 1 1 1     0    0 3.95 15.30 ZNESW 4.6 5.2 279.2 5.5 10.2 -24.4 10.1 -23.0 9.8 -20.9 10.1 -23.2
2026-04-15T21:14:59.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:14:59.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:14:59.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.801520
2026-04-15T21:14:59.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:14:59.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:14:59.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:14:59.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:14:59.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:14:59.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:14:45', tmtdew=4.10814, humidity=75.5086, cloud=0.0, wind=4.97808, temperature=9.65046, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:14:11.328', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03575000000000017, -0.06375000000000064, -0.07350000000000101, -0.06550000000000011, -0.023749999999999716, -0.040000000000000924, 0.011250000000000426, 0.022499999999999076, -0.017999999999998906, -0.055749999999999744, -0.040000000000000924, 0.0019999999999988916, -0.028250000000001663, -0.009999999999999787, 0.010999999999999233, 0.017250000000000654, -0.03049999999999997, -0.0070000000000014495, 0.0012499999999988631, 0.02899999999999814, 0.03774999999999906, -0.03275000000000006, 0.012750000000000483, 0.05599999999999916, -0.07949999999999946, -0.0182500000000001, -0.010499999999998622, -0.024499999999999744, -0.027999999999998693, 0.012000000000000455, 0.027000000000001023, -0.01425000000000054], zp_timestamp='2026-04-15T19:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:14:59.619 [DEBUG] [Thread-25856] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:14:59.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:14:59.872 [DEBUG] [Thread-25859] [transport.py] [_log()] starting thread (client mode): 0xee9c3250
2026-04-15T21:14:59.872 [DEBUG] [Thread-25859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:14:59.886 [DEBUG] [Thread-25859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:14:59.886 [INFO] [Thread-25859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:14:59.893 [DEBUG] [Thread-25859] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:14:59.894 [DEBUG] [Thread-25859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:14:59.894 [DEBUG] [Thread-25859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:14:59.894 [DEBUG] [Thread-25859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:14:59.894 [DEBUG] [Thread-25859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:14:59.894 [DEBUG] [Thread-25859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:14:59.894 [DEBUG] [Thread-25859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:14:59.894 [DEBUG] [Thread-25859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:14:59.894 [DEBUG] [Thread-25859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:14:59.894 [DEBUG] [Thread-25859] [transport.py] [_log()] client lang: <none>
2026-04-15T21:14:59.894 [DEBUG] [Thread-25859] [transport.py] [_log()] server lang: <none>
2026-04-15T21:14:59.894 [DEBUG] [Thread-25859] [transport.py] [_log()] kex follows: False
2026-04-15T21:14:59.894 [DEBUG] [Thread-25859] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:14:59.895 [DEBUG] [Thread-25859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:14:59.895 [DEBUG] [Thread-25859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:14:59.895 [DEBUG] [Thread-25859] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:14:59.895 [DEBUG] [Thread-25859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:14:59.895 [DEBUG] [Thread-25859] [transport.py] [_log()] Compression: none
2026-04-15T21:14:59.895 [DEBUG] [Thread-25859] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:14:59.956 [DEBUG] [Thread-25859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:14:59.956 [DEBUG] [Thread-25859] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:14:59.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:14:59.957 [DEBUG] [Thread-25859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:14:59.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:15:00.014 [DEBUG] [Thread-25859] [transport.py] [_log()] userauth is OK
2026-04-15T21:15:00.014 [DEBUG] [Thread-25859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:15:00.014 [DEBUG] [Thread-25859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:15:00.014 [DEBUG] [Thread-25859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:15:00.015 [DEBUG] [Thread-25859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:15:00.043 [INFO] [Thread-25859] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:15:00.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:15:00.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:15:00.865 [DEBUG] [Thread-25859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:15:00.865 [DEBUG] [Thread-25859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:15:00.913 [DEBUG] [Thread-25859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:15:00.913 [DEBUG] [Thread-25859] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:15:00.922 [DEBUG] [Thread-25859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:15:00.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:15:00.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')
2026-04-15T21:15:00.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') -> 00000000
2026-04-15T21:15:00.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:15:00.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:15:00.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:15:00.957 [DEBUG] [Thread-25859] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:15:01.965 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:07.447 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:08.314 [DEBUG] [Thread-25861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:12.918 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:15.208 [DEBUG] [Thread-25862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:18.714 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:23.350 [DEBUG] [Thread-25863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:24.306 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:29.707 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:30.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:15:30.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:15:30.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
2026-04-15T21:15:32.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 15, 21), 4.26088, 74.7214, 0.0, 4.94172, 9.54202, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:15:32.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:15:21
2026-04-15T21:15:32.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:15:33.057 [DEBUG] [Thread-25864] [transport.py] [_log()] starting thread (client mode): 0xee9c0370
2026-04-15T21:15:33.057 [DEBUG] [Thread-25864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:15:33.077 [DEBUG] [Thread-25864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:15:33.077 [INFO] [Thread-25864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:15:33.079 [DEBUG] [Thread-25864] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:15:33.079 [DEBUG] [Thread-25864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:15:33.079 [DEBUG] [Thread-25864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] client lang: <none>
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] server lang: <none>
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] kex follows: False
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] Compression: none
2026-04-15T21:15:33.080 [DEBUG] [Thread-25864] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:15:33.093 [DEBUG] [Thread-25864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:15:33.093 [DEBUG] [Thread-25864] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:15:33.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:15:33.094 [DEBUG] [Thread-25864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:15:33.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:15:33.095 [DEBUG] [Thread-25864] [transport.py] [_log()] userauth is OK
2026-04-15T21:15:33.095 [DEBUG] [Thread-25864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:15:33.095 [DEBUG] [Thread-25864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:15:33.095 [DEBUG] [Thread-25864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:15:33.095 [DEBUG] [Thread-25864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:15:33.119 [INFO] [Thread-25864] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:15:33.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:15:33.966 [DEBUG] [Thread-25864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:15:33.966 [DEBUG] [Thread-25864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:15:33.967 [DEBUG] [Thread-25864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:15:34.007 [DEBUG] [Thread-25864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:15:34.007 [DEBUG] [Thread-25864] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:15:34.010 [DEBUG] [Thread-25864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:15:34.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:15:34.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:15:34.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:15:34.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:15:34.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:15:34.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:15:34.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:15:34.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:15:34.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:15:34.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.801867 -999.00   +9.70   4.02     78   +6.10 1 1 1 1 1     0    0 3.87 15.01 ZNESW 4.0 4.0 286.0 5.1 10.2 -24.4 10.1 -23.1 9.8 -21.0 10.1 -23.1
2026-04-15T21:15:34.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:15:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:15:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.801867
2026-04-15T21:15:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:15:34.034 [DEBUG] [Thread-25864] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:15:34.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:15:34.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:15:34.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:15:34.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:15:34.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:15:21', tmtdew=4.26088, humidity=74.7214, cloud=0.0, wind=4.94172, temperature=9.54202, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:14:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03575000000000017, -0.06375000000000064, -0.07350000000000101, -0.06550000000000011, -0.023749999999999716, -0.040000000000000924, 0.011250000000000426, 0.022499999999999076, -0.017999999999998906, -0.055749999999999744, -0.040000000000000924, 0.0019999999999988916, -0.028250000000001663, -0.009999999999999787, 0.010999999999999233, 0.017250000000000654, -0.03049999999999997, -0.0070000000000014495, 0.0012499999999988631, 0.02899999999999814, 0.03774999999999906, -0.03275000000000006, 0.012750000000000483, 0.05599999999999916, -0.07949999999999946, -0.0182500000000001, -0.010499999999998622, -0.024499999999999744, -0.027999999999998693, 0.012000000000000455, 0.027000000000001023, -0.01425000000000054], zp_timestamp='2026-04-15T19:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:15:34.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:15:34.293 [DEBUG] [Thread-25867] [transport.py] [_log()] starting thread (client mode): 0xee993eb0
2026-04-15T21:15:34.294 [DEBUG] [Thread-25867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:15:34.308 [DEBUG] [Thread-25867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:15:34.308 [INFO] [Thread-25867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:15:34.316 [DEBUG] [Thread-25867] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:15:34.316 [DEBUG] [Thread-25867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:15:34.316 [DEBUG] [Thread-25867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:15:34.316 [DEBUG] [Thread-25867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:15:34.316 [DEBUG] [Thread-25867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:15:34.316 [DEBUG] [Thread-25867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:15:34.317 [DEBUG] [Thread-25867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:15:34.317 [DEBUG] [Thread-25867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:15:34.317 [DEBUG] [Thread-25867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:15:34.317 [DEBUG] [Thread-25867] [transport.py] [_log()] client lang: <none>
2026-04-15T21:15:34.317 [DEBUG] [Thread-25867] [transport.py] [_log()] server lang: <none>
2026-04-15T21:15:34.317 [DEBUG] [Thread-25867] [transport.py] [_log()] kex follows: False
2026-04-15T21:15:34.317 [DEBUG] [Thread-25867] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:15:34.317 [DEBUG] [Thread-25867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:15:34.317 [DEBUG] [Thread-25867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:15:34.317 [DEBUG] [Thread-25867] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:15:34.317 [DEBUG] [Thread-25867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:15:34.318 [DEBUG] [Thread-25867] [transport.py] [_log()] Compression: none
2026-04-15T21:15:34.318 [DEBUG] [Thread-25867] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:15:34.373 [DEBUG] [Thread-25867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:15:34.374 [DEBUG] [Thread-25867] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:15:34.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:15:34.374 [DEBUG] [Thread-25867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:15:34.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:15:34.429 [DEBUG] [Thread-25867] [transport.py] [_log()] userauth is OK
2026-04-15T21:15:34.429 [DEBUG] [Thread-25867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:15:34.429 [DEBUG] [Thread-25867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:15:34.429 [DEBUG] [Thread-25867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:15:34.429 [DEBUG] [Thread-25867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:15:34.455 [INFO] [Thread-25867] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:15:34.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:15:34.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:15:35.089 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:35.295 [DEBUG] [Thread-25867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:15:35.296 [DEBUG] [Thread-25867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:15:35.344 [DEBUG] [Thread-25867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:15:35.344 [DEBUG] [Thread-25867] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:15:35.353 [DEBUG] [Thread-25867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:15:35.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:15:35.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')
2026-04-15T21:15:35.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
2026-04-15T21:15:35.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:15:35.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:15:35.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:15:35.387 [DEBUG] [Thread-25867] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:15:38.381 [DEBUG] [Thread-25869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:40.735 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:46.135 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:46.137 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:46.155 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:51.602 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:53.425 [DEBUG] [Thread-25870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:15:57.044 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:02.560 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:05.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:16:05.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:16:05.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
2026-04-15T21:16:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 15, 56), 4.2556, 74.7545, 0.0, 3.8304, 9.5752, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:16:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:15:56
2026-04-15T21:16:07.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:16:07.526 [DEBUG] [Thread-25871] [transport.py] [_log()] starting thread (client mode): 0xf13caef0
2026-04-15T21:16:07.526 [DEBUG] [Thread-25871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:16:07.546 [DEBUG] [Thread-25871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:16:07.546 [INFO] [Thread-25871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:16:07.549 [DEBUG] [Thread-25871] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:16:07.550 [DEBUG] [Thread-25871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:16:07.550 [DEBUG] [Thread-25871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:16:07.550 [DEBUG] [Thread-25871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:16:07.550 [DEBUG] [Thread-25871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:16:07.550 [DEBUG] [Thread-25871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:16:07.550 [DEBUG] [Thread-25871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:16:07.550 [DEBUG] [Thread-25871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:16:07.550 [DEBUG] [Thread-25871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:16:07.550 [DEBUG] [Thread-25871] [transport.py] [_log()] client lang: <none>
2026-04-15T21:16:07.550 [DEBUG] [Thread-25871] [transport.py] [_log()] server lang: <none>
2026-04-15T21:16:07.550 [DEBUG] [Thread-25871] [transport.py] [_log()] kex follows: False
2026-04-15T21:16:07.550 [DEBUG] [Thread-25871] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:16:07.551 [DEBUG] [Thread-25871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:16:07.551 [DEBUG] [Thread-25871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:16:07.551 [DEBUG] [Thread-25871] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:16:07.551 [DEBUG] [Thread-25871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:16:07.551 [DEBUG] [Thread-25871] [transport.py] [_log()] Compression: none
2026-04-15T21:16:07.551 [DEBUG] [Thread-25871] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:16:07.560 [DEBUG] [Thread-25871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:16:07.560 [DEBUG] [Thread-25871] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:16:07.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:16:07.561 [DEBUG] [Thread-25871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:16:07.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:16:07.562 [DEBUG] [Thread-25871] [transport.py] [_log()] userauth is OK
2026-04-15T21:16:07.562 [DEBUG] [Thread-25871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:16:07.562 [DEBUG] [Thread-25871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:16:07.562 [DEBUG] [Thread-25871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:16:07.562 [DEBUG] [Thread-25871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:16:07.580 [INFO] [Thread-25871] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:16:07.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:16:08.163 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:08.402 [DEBUG] [Thread-25871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:16:08.403 [DEBUG] [Thread-25871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:16:08.403 [DEBUG] [Thread-25871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:16:08.444 [DEBUG] [Thread-25871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:16:08.444 [DEBUG] [Thread-25871] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:16:08.447 [DEBUG] [Thread-25871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:16:08.457 [DEBUG] [Thread-25873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:08.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:16:08.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:16:08.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:16:08.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:16:08.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:16:08.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:16:08.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:16:08.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:16:08.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:16:08.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.802561 -999.00   +9.70   3.36     78   +6.10 1 1 1 1 1     0    0 3.83 14.14 ZNESW 3.1 3.4 312.0 4.2 10.2 -24.4 10.1 -23.1 9.8 -21.1 10.1 -23.3
2026-04-15T21:16:08.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:16:08.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:16:08.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.802561
2026-04-15T21:16:08.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:16:08.474 [DEBUG] [Thread-25871] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:16:08.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:16:08.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:16:08.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:16:08.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:16:08.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:15:56', tmtdew=4.2556, humidity=74.7545, cloud=0.0, wind=3.8304, temperature=9.5752, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:15:41.270', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03575000000000017, -0.06375000000000064, -0.07350000000000101, -0.06550000000000011, -0.023749999999999716, -0.040000000000000924, 0.011250000000000426, 0.022499999999999076, -0.017999999999998906, -0.055749999999999744, -0.040000000000000924, 0.0019999999999988916, -0.028250000000001663, -0.009999999999999787, 0.010999999999999233, 0.017250000000000654, -0.03049999999999997, -0.0070000000000014495, 0.0012499999999988631, 0.02899999999999814, 0.03774999999999906, -0.03275000000000006, 0.012750000000000483, 0.05599999999999916, -0.07949999999999946, -0.0182500000000001, -0.010499999999998622, -0.024499999999999744, -0.027999999999998693, 0.012000000000000455, 0.027000000000001023, -0.01425000000000054], zp_timestamp='2026-04-15T19:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:16:08.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:16:08.729 [DEBUG] [Thread-25875] [transport.py] [_log()] starting thread (client mode): 0xf13cb4f0
2026-04-15T21:16:08.730 [DEBUG] [Thread-25875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:16:08.744 [DEBUG] [Thread-25875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:16:08.744 [INFO] [Thread-25875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:16:08.751 [DEBUG] [Thread-25875] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:16:08.751 [DEBUG] [Thread-25875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:16:08.751 [DEBUG] [Thread-25875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:16:08.751 [DEBUG] [Thread-25875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:16:08.751 [DEBUG] [Thread-25875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:16:08.751 [DEBUG] [Thread-25875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:16:08.751 [DEBUG] [Thread-25875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:16:08.751 [DEBUG] [Thread-25875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:16:08.752 [DEBUG] [Thread-25875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:16:08.752 [DEBUG] [Thread-25875] [transport.py] [_log()] client lang: <none>
2026-04-15T21:16:08.752 [DEBUG] [Thread-25875] [transport.py] [_log()] server lang: <none>
2026-04-15T21:16:08.752 [DEBUG] [Thread-25875] [transport.py] [_log()] kex follows: False
2026-04-15T21:16:08.752 [DEBUG] [Thread-25875] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:16:08.752 [DEBUG] [Thread-25875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:16:08.752 [DEBUG] [Thread-25875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:16:08.752 [DEBUG] [Thread-25875] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:16:08.752 [DEBUG] [Thread-25875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:16:08.752 [DEBUG] [Thread-25875] [transport.py] [_log()] Compression: none
2026-04-15T21:16:08.752 [DEBUG] [Thread-25875] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:16:08.808 [DEBUG] [Thread-25875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:16:08.808 [DEBUG] [Thread-25875] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:16:08.808 [DEBUG] [Thread-25875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:16:08.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:16:08.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:16:08.864 [DEBUG] [Thread-25875] [transport.py] [_log()] userauth is OK
2026-04-15T21:16:08.865 [DEBUG] [Thread-25875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:16:08.865 [DEBUG] [Thread-25875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:16:08.865 [DEBUG] [Thread-25875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:16:08.865 [DEBUG] [Thread-25875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:16:08.887 [INFO] [Thread-25875] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:16:08.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:16:08.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:16:09.721 [DEBUG] [Thread-25875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:16:09.721 [DEBUG] [Thread-25875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:16:09.769 [DEBUG] [Thread-25875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:16:09.769 [DEBUG] [Thread-25875] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:16:09.778 [DEBUG] [Thread-25875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:16:09.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:16:09.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')
2026-04-15T21:16:09.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
2026-04-15T21:16:09.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:16:09.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:16:09.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:16:09.814 [DEBUG] [Thread-25875] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:16:13.857 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:15.355 [DEBUG] [Thread-25877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:19.232 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:23.489 [DEBUG] [Thread-25878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:24.815 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:30.260 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:35.871 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:38.535 [DEBUG] [Thread-25879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:39.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:16:39.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:16:39.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
2026-04-15T21:16:41.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 16, 32), 4.28948, 74.572, 0.0, 3.45996, 9.54193, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:16:41.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:16:32
2026-04-15T21:16:41.483 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:41.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:16:41.982 [DEBUG] [Thread-25880] [transport.py] [_log()] starting thread (client mode): 0xee904b50
2026-04-15T21:16:41.982 [DEBUG] [Thread-25880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:16:42.001 [DEBUG] [Thread-25880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:16:42.002 [INFO] [Thread-25880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:16:42.005 [DEBUG] [Thread-25880] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:16:42.005 [DEBUG] [Thread-25880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:16:42.005 [DEBUG] [Thread-25880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:16:42.005 [DEBUG] [Thread-25880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:16:42.005 [DEBUG] [Thread-25880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:16:42.005 [DEBUG] [Thread-25880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:16:42.005 [DEBUG] [Thread-25880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:16:42.005 [DEBUG] [Thread-25880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:16:42.005 [DEBUG] [Thread-25880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:16:42.005 [DEBUG] [Thread-25880] [transport.py] [_log()] client lang: <none>
2026-04-15T21:16:42.005 [DEBUG] [Thread-25880] [transport.py] [_log()] server lang: <none>
2026-04-15T21:16:42.005 [DEBUG] [Thread-25880] [transport.py] [_log()] kex follows: False
2026-04-15T21:16:42.005 [DEBUG] [Thread-25880] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:16:42.005 [DEBUG] [Thread-25880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:16:42.005 [DEBUG] [Thread-25880] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:16:42.006 [DEBUG] [Thread-25880] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:16:42.006 [DEBUG] [Thread-25880] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:16:42.006 [DEBUG] [Thread-25880] [transport.py] [_log()] Compression: none
2026-04-15T21:16:42.006 [DEBUG] [Thread-25880] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:16:42.022 [DEBUG] [Thread-25880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:16:42.022 [DEBUG] [Thread-25880] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:16:42.023 [DEBUG] [Thread-25880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:16:42.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:16:42.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:16:42.024 [DEBUG] [Thread-25880] [transport.py] [_log()] userauth is OK
2026-04-15T21:16:42.024 [DEBUG] [Thread-25880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:16:42.024 [DEBUG] [Thread-25880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:16:42.024 [DEBUG] [Thread-25880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:16:42.024 [DEBUG] [Thread-25880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:16:42.043 [INFO] [Thread-25880] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:16:42.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:16:42.797 [DEBUG] [Thread-25880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:16:42.797 [DEBUG] [Thread-25880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:16:42.797 [DEBUG] [Thread-25880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:16:42.838 [DEBUG] [Thread-25880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:16:42.838 [DEBUG] [Thread-25880] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:16:42.841 [DEBUG] [Thread-25880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:16:42.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:16:42.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:16:42.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:16:42.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:16:42.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:16:42.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:16:42.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:16:42.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:16:42.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:16:42.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.802909 -999.00   +9.70   3.82     78   +6.10 1 1 1 1 1     0    0 3.92 14.98 ZNESW 4.0 3.8 296.6 4.2 10.2 -24.5 10.1 -23.1 9.8 -21.0 10.1 -23.1
2026-04-15T21:16:42.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:16:42.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:16:42.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.802909
2026-04-15T21:16:42.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:16:42.868 [DEBUG] [Thread-25880] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:16:42.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:16:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:16:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:16:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:16:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:16:32', tmtdew=4.28948, humidity=74.572, cloud=0.0, wind=3.45996, temperature=9.54193, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:16:11.338', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03575000000000017, -0.06375000000000064, -0.07350000000000101, -0.06550000000000011, -0.023749999999999716, -0.040000000000000924, 0.011250000000000426, 0.022499999999999076, -0.017999999999998906, -0.055749999999999744, -0.040000000000000924, 0.0019999999999988916, -0.028250000000001663, -0.009999999999999787, 0.010999999999999233, 0.017250000000000654, -0.03049999999999997, -0.0070000000000014495, 0.0012499999999988631, 0.02899999999999814, 0.03774999999999906, -0.03275000000000006, 0.012750000000000483, 0.05599999999999916, -0.07949999999999946, -0.0182500000000001, -0.010499999999998622, -0.024499999999999744, -0.027999999999998693, 0.012000000000000455, 0.027000000000001023, -0.01425000000000054], zp_timestamp='2026-04-15T19:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:16:43.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:16:43.127 [DEBUG] [Thread-25883] [transport.py] [_log()] starting thread (client mode): 0xee907c40
2026-04-15T21:16:43.127 [DEBUG] [Thread-25883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:16:43.142 [DEBUG] [Thread-25883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:16:43.142 [INFO] [Thread-25883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:16:43.149 [DEBUG] [Thread-25883] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:16:43.149 [DEBUG] [Thread-25883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:16:43.149 [DEBUG] [Thread-25883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:16:43.150 [DEBUG] [Thread-25883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:16:43.150 [DEBUG] [Thread-25883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:16:43.150 [DEBUG] [Thread-25883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:16:43.150 [DEBUG] [Thread-25883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:16:43.150 [DEBUG] [Thread-25883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:16:43.150 [DEBUG] [Thread-25883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:16:43.150 [DEBUG] [Thread-25883] [transport.py] [_log()] client lang: <none>
2026-04-15T21:16:43.150 [DEBUG] [Thread-25883] [transport.py] [_log()] server lang: <none>
2026-04-15T21:16:43.150 [DEBUG] [Thread-25883] [transport.py] [_log()] kex follows: False
2026-04-15T21:16:43.150 [DEBUG] [Thread-25883] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:16:43.150 [DEBUG] [Thread-25883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:16:43.150 [DEBUG] [Thread-25883] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:16:43.151 [DEBUG] [Thread-25883] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:16:43.151 [DEBUG] [Thread-25883] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:16:43.151 [DEBUG] [Thread-25883] [transport.py] [_log()] Compression: none
2026-04-15T21:16:43.151 [DEBUG] [Thread-25883] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:16:43.208 [DEBUG] [Thread-25883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:16:43.208 [DEBUG] [Thread-25883] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:16:43.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:16:43.209 [DEBUG] [Thread-25883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:16:43.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:16:43.264 [DEBUG] [Thread-25883] [transport.py] [_log()] userauth is OK
2026-04-15T21:16:43.265 [DEBUG] [Thread-25883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:16:43.265 [DEBUG] [Thread-25883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:16:43.265 [DEBUG] [Thread-25883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:16:43.265 [DEBUG] [Thread-25883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:16:43.291 [INFO] [Thread-25883] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:16:43.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:16:43.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:16:44.111 [DEBUG] [Thread-25883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:16:44.112 [DEBUG] [Thread-25883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:16:44.159 [DEBUG] [Thread-25883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:16:44.159 [DEBUG] [Thread-25883] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:16:44.168 [DEBUG] [Thread-25883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:16:44.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:16:44.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')
2026-04-15T21:16:44.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
2026-04-15T21:16:44.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:16:44.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:16:44.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:16:44.202 [DEBUG] [Thread-25883] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:16:46.338 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:46.339 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:46.916 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:52.318 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:53.567 [DEBUG] [Thread-25885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:16:57.695 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:03.249 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:08.611 [DEBUG] [Thread-25886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:08.657 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:14.039 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:14.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:17:14.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:17:14.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
2026-04-15T21:17:15.501 [DEBUG] [Thread-25887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:15.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 17, 7), 4.30118, 74.5222, 0.0, 3.93624, 9.60828, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:17:15.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:17:07
2026-04-15T21:17:16.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:17:16.518 [DEBUG] [Thread-25888] [transport.py] [_log()] starting thread (client mode): 0xf13c9990
2026-04-15T21:17:16.518 [DEBUG] [Thread-25888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:17:16.538 [DEBUG] [Thread-25888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:17:16.538 [INFO] [Thread-25888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:17:16.542 [DEBUG] [Thread-25888] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:17:16.542 [DEBUG] [Thread-25888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:17:16.542 [DEBUG] [Thread-25888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:17:16.542 [DEBUG] [Thread-25888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:17:16.542 [DEBUG] [Thread-25888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:17:16.542 [DEBUG] [Thread-25888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:17:16.542 [DEBUG] [Thread-25888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:17:16.542 [DEBUG] [Thread-25888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:17:16.542 [DEBUG] [Thread-25888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:17:16.543 [DEBUG] [Thread-25888] [transport.py] [_log()] client lang: <none>
2026-04-15T21:17:16.543 [DEBUG] [Thread-25888] [transport.py] [_log()] server lang: <none>
2026-04-15T21:17:16.543 [DEBUG] [Thread-25888] [transport.py] [_log()] kex follows: False
2026-04-15T21:17:16.543 [DEBUG] [Thread-25888] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:17:16.543 [DEBUG] [Thread-25888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:17:16.543 [DEBUG] [Thread-25888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:17:16.543 [DEBUG] [Thread-25888] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:17:16.543 [DEBUG] [Thread-25888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:17:16.543 [DEBUG] [Thread-25888] [transport.py] [_log()] Compression: none
2026-04-15T21:17:16.543 [DEBUG] [Thread-25888] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:17:16.560 [DEBUG] [Thread-25888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:17:16.560 [DEBUG] [Thread-25888] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:17:16.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:17:16.561 [DEBUG] [Thread-25888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:17:16.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:17:16.562 [DEBUG] [Thread-25888] [transport.py] [_log()] userauth is OK
2026-04-15T21:17:16.562 [DEBUG] [Thread-25888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:17:16.562 [DEBUG] [Thread-25888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:17:16.562 [DEBUG] [Thread-25888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:17:16.562 [DEBUG] [Thread-25888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:17:16.582 [INFO] [Thread-25888] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:17:16.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:17:17.347 [DEBUG] [Thread-25888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:17:17.348 [DEBUG] [Thread-25888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:17:17.348 [DEBUG] [Thread-25888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:17:17.389 [DEBUG] [Thread-25888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:17:17.389 [DEBUG] [Thread-25888] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:17:17.392 [DEBUG] [Thread-25888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:17:17.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:17:17.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:17:17.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:17:17.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:17:17.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:17:17.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:17:17.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:17:17.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:17:17.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:17:17.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.803256 -999.00   +9.80   1.63     78   +6.20 1 1 1 1 1     0    0 3.86 15.12 ZNESW 0.7 1.6 240.9 6.2 10.2 -24.4 10.1 -22.9 9.8 -21.0 10.1 -22.8
2026-04-15T21:17:17.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:17:17.414 [DEBUG] [Thread-25888] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:17:17.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:17:17.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.803256
2026-04-15T21:17:17.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:17:17.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:17:17.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:17:17.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:17:17.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:17:17.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:17:07', tmtdew=4.30118, humidity=74.5222, cloud=0.0, wind=3.93624, temperature=9.60828, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:16:41.318', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.018749999999998934, -0.09774999999999956, -0.08850000000000158, -0.08249999999999957, -0.01574999999999882, -0.005000000000000782, -0.03774999999999906, 0.0009999999999994458, -0.017999999999998906, -0.042749999999999844, -0.041999999999999815, 0.028999999999999915, -0.023749999999999716, 0.0030000000000001137, 0.0, 0.009249999999999758, -0.04150000000000098, -0.018000000000000682, 0.004249999999998977, 0.008999999999998565, 0.022749999999998494, -0.019249999999999545, 0.01025000000000098, 0.04499999999999993, -0.06049999999999933, -0.01624999999999943, -0.019499999999998963, -0.006999999999999673, -0.017999999999998906, 0.03500000000000014, 0.03700000000000081, -0.02125000000000199], zp_timestamp='2026-04-15T19:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:17:17.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:17:17.672 [DEBUG] [Thread-25891] [transport.py] [_log()] starting thread (client mode): 0xee9070a0
2026-04-15T21:17:17.672 [DEBUG] [Thread-25891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:17:17.686 [DEBUG] [Thread-25891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:17:17.686 [INFO] [Thread-25891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:17:17.694 [DEBUG] [Thread-25891] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:17:17.694 [DEBUG] [Thread-25891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:17:17.694 [DEBUG] [Thread-25891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:17:17.694 [DEBUG] [Thread-25891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:17:17.694 [DEBUG] [Thread-25891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:17:17.695 [DEBUG] [Thread-25891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:17:17.695 [DEBUG] [Thread-25891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:17:17.695 [DEBUG] [Thread-25891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:17:17.695 [DEBUG] [Thread-25891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:17:17.695 [DEBUG] [Thread-25891] [transport.py] [_log()] client lang: <none>
2026-04-15T21:17:17.695 [DEBUG] [Thread-25891] [transport.py] [_log()] server lang: <none>
2026-04-15T21:17:17.695 [DEBUG] [Thread-25891] [transport.py] [_log()] kex follows: False
2026-04-15T21:17:17.695 [DEBUG] [Thread-25891] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:17:17.695 [DEBUG] [Thread-25891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:17:17.695 [DEBUG] [Thread-25891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:17:17.695 [DEBUG] [Thread-25891] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:17:17.696 [DEBUG] [Thread-25891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:17:17.696 [DEBUG] [Thread-25891] [transport.py] [_log()] Compression: none
2026-04-15T21:17:17.696 [DEBUG] [Thread-25891] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:17:17.752 [DEBUG] [Thread-25891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:17:17.752 [DEBUG] [Thread-25891] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:17:17.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:17:17.753 [DEBUG] [Thread-25891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:17:17.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:17:17.809 [DEBUG] [Thread-25891] [transport.py] [_log()] userauth is OK
2026-04-15T21:17:17.809 [DEBUG] [Thread-25891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:17:17.809 [DEBUG] [Thread-25891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:17:17.809 [DEBUG] [Thread-25891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:17:17.810 [DEBUG] [Thread-25891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:17:17.835 [INFO] [Thread-25891] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:17:17.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:17:17.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:17:18.658 [DEBUG] [Thread-25891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:17:18.658 [DEBUG] [Thread-25891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:17:18.705 [DEBUG] [Thread-25891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:17:18.706 [DEBUG] [Thread-25891] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:17:18.714 [DEBUG] [Thread-25891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:17:18.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:17:18.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')
2026-04-15T21:17:18.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
2026-04-15T21:17:18.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:17:18.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:17:18.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:17:18.745 [DEBUG] [Thread-25891] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:17:19.561 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:23.642 [DEBUG] [Thread-25893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:25.436 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:30.940 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:36.567 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:38.687 [DEBUG] [Thread-25894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:42.159 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:46.539 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:46.540 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:47.781 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:48.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:17:48.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:17:48.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
2026-04-15T21:17:50.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 17, 7), 4.30118, 74.5222, 0.0, 3.93624, 9.60828, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:17:50.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:17:07
2026-04-15T21:17:50.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:17:50.901 [DEBUG] [Thread-25895] [transport.py] [_log()] starting thread (client mode): 0xee9c2c80
2026-04-15T21:17:50.901 [DEBUG] [Thread-25895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:17:50.922 [DEBUG] [Thread-25895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:17:50.922 [INFO] [Thread-25895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:17:50.926 [DEBUG] [Thread-25895] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:17:50.926 [DEBUG] [Thread-25895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:17:50.926 [DEBUG] [Thread-25895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:17:50.926 [DEBUG] [Thread-25895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:17:50.926 [DEBUG] [Thread-25895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:17:50.926 [DEBUG] [Thread-25895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:17:50.926 [DEBUG] [Thread-25895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:17:50.926 [DEBUG] [Thread-25895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:17:50.926 [DEBUG] [Thread-25895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:17:50.926 [DEBUG] [Thread-25895] [transport.py] [_log()] client lang: <none>
2026-04-15T21:17:50.927 [DEBUG] [Thread-25895] [transport.py] [_log()] server lang: <none>
2026-04-15T21:17:50.927 [DEBUG] [Thread-25895] [transport.py] [_log()] kex follows: False
2026-04-15T21:17:50.927 [DEBUG] [Thread-25895] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:17:50.927 [DEBUG] [Thread-25895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:17:50.927 [DEBUG] [Thread-25895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:17:50.927 [DEBUG] [Thread-25895] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:17:50.927 [DEBUG] [Thread-25895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:17:50.927 [DEBUG] [Thread-25895] [transport.py] [_log()] Compression: none
2026-04-15T21:17:50.927 [DEBUG] [Thread-25895] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:17:50.944 [DEBUG] [Thread-25895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:17:50.944 [DEBUG] [Thread-25895] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:17:50.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:17:50.945 [DEBUG] [Thread-25895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:17:50.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:17:50.946 [DEBUG] [Thread-25895] [transport.py] [_log()] userauth is OK
2026-04-15T21:17:50.946 [DEBUG] [Thread-25895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:17:50.946 [DEBUG] [Thread-25895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:17:50.946 [DEBUG] [Thread-25895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:17:50.946 [DEBUG] [Thread-25895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:17:50.971 [INFO] [Thread-25895] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:17:50.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:17:51.718 [DEBUG] [Thread-25895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:17:51.719 [DEBUG] [Thread-25895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:17:51.719 [DEBUG] [Thread-25895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:17:51.759 [DEBUG] [Thread-25895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:17:51.759 [DEBUG] [Thread-25895] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:17:51.762 [DEBUG] [Thread-25895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:17:51.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:17:51.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:17:51.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:17:51.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:17:51.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:17:51.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:17:51.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:17:51.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:17:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:17:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.803603 -999.00   +9.90   1.17     77   +6.20 1 1 1 1 1     0    0 4.02 18.43 ZNESW 1.0 1.2 72.8 3.3 10.2 -24.2 10.1 -23.2 9.8 -21.0 10.1 -23.2
2026-04-15T21:17:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:17:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:17:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.803603
2026-04-15T21:17:51.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:17:51.788 [DEBUG] [Thread-25895] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:17:51.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:17:51.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:17:51.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:17:51.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:17:51.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:17:07', tmtdew=4.30118, humidity=74.5222, cloud=0.0, wind=3.93624, temperature=9.60828, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:17:11.299', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.018749999999998934, -0.09774999999999956, -0.08850000000000158, -0.08249999999999957, -0.01574999999999882, -0.005000000000000782, -0.03774999999999906, 0.0009999999999994458, -0.017999999999998906, -0.042749999999999844, -0.041999999999999815, 0.028999999999999915, -0.023749999999999716, 0.0030000000000001137, 0.0, 0.009249999999999758, -0.04150000000000098, -0.018000000000000682, 0.004249999999998977, 0.008999999999998565, 0.022749999999998494, -0.019249999999999545, 0.01025000000000098, 0.04499999999999993, -0.06049999999999933, -0.01624999999999943, -0.019499999999998963, -0.006999999999999673, -0.017999999999998906, 0.03500000000000014, 0.03700000000000081, -0.02125000000000199], zp_timestamp='2026-04-15T19:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:17:52.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:17:52.046 [DEBUG] [Thread-25898] [transport.py] [_log()] starting thread (client mode): 0xf13511e0
2026-04-15T21:17:52.047 [DEBUG] [Thread-25898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:17:52.061 [DEBUG] [Thread-25898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:17:52.061 [INFO] [Thread-25898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:17:52.068 [DEBUG] [Thread-25898] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:17:52.069 [DEBUG] [Thread-25898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:17:52.069 [DEBUG] [Thread-25898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:17:52.069 [DEBUG] [Thread-25898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:17:52.069 [DEBUG] [Thread-25898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:17:52.069 [DEBUG] [Thread-25898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:17:52.069 [DEBUG] [Thread-25898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:17:52.069 [DEBUG] [Thread-25898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:17:52.069 [DEBUG] [Thread-25898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:17:52.069 [DEBUG] [Thread-25898] [transport.py] [_log()] client lang: <none>
2026-04-15T21:17:52.069 [DEBUG] [Thread-25898] [transport.py] [_log()] server lang: <none>
2026-04-15T21:17:52.069 [DEBUG] [Thread-25898] [transport.py] [_log()] kex follows: False
2026-04-15T21:17:52.070 [DEBUG] [Thread-25898] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:17:52.070 [DEBUG] [Thread-25898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:17:52.070 [DEBUG] [Thread-25898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:17:52.070 [DEBUG] [Thread-25898] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:17:52.070 [DEBUG] [Thread-25898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:17:52.070 [DEBUG] [Thread-25898] [transport.py] [_log()] Compression: none
2026-04-15T21:17:52.070 [DEBUG] [Thread-25898] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:17:52.128 [DEBUG] [Thread-25898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:17:52.128 [DEBUG] [Thread-25898] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:17:52.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:17:52.129 [DEBUG] [Thread-25898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:17:52.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:17:52.185 [DEBUG] [Thread-25898] [transport.py] [_log()] userauth is OK
2026-04-15T21:17:52.185 [DEBUG] [Thread-25898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:17:52.185 [DEBUG] [Thread-25898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:17:52.185 [DEBUG] [Thread-25898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:17:52.185 [DEBUG] [Thread-25898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:17:52.211 [INFO] [Thread-25898] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:17:52.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:17:52.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:17:53.074 [DEBUG] [Thread-25898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:17:53.074 [DEBUG] [Thread-25898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:17:53.122 [DEBUG] [Thread-25898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:17:53.122 [DEBUG] [Thread-25898] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:17:53.131 [DEBUG] [Thread-25898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:17:53.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:17:53.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')
2026-04-15T21:17:53.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
2026-04-15T21:17:53.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:17:53.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:17:53.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:17:53.166 [DEBUG] [Thread-25898] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:17:53.215 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:53.720 [DEBUG] [Thread-25900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:17:58.638 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:04.084 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:08.764 [DEBUG] [Thread-25901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:09.845 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:15.254 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:15.663 [DEBUG] [Thread-25902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:20.638 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:23.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:18:23.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:18:23.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
2026-04-15T21:18:23.795 [DEBUG] [Thread-25903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 17, 43), 4.2396, 74.8452, 0.0, 2.79072, 9.78324, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:18:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:17:43
2026-04-15T21:18:24.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:18:25.391 [DEBUG] [Thread-25904] [transport.py] [_log()] starting thread (client mode): 0xf1365b70
2026-04-15T21:18:25.392 [DEBUG] [Thread-25904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:18:25.411 [DEBUG] [Thread-25904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:18:25.411 [INFO] [Thread-25904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:18:25.414 [DEBUG] [Thread-25904] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:18:25.414 [DEBUG] [Thread-25904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:18:25.414 [DEBUG] [Thread-25904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:18:25.414 [DEBUG] [Thread-25904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:18:25.414 [DEBUG] [Thread-25904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:18:25.414 [DEBUG] [Thread-25904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:18:25.414 [DEBUG] [Thread-25904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:18:25.414 [DEBUG] [Thread-25904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:18:25.414 [DEBUG] [Thread-25904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:18:25.414 [DEBUG] [Thread-25904] [transport.py] [_log()] client lang: <none>
2026-04-15T21:18:25.414 [DEBUG] [Thread-25904] [transport.py] [_log()] server lang: <none>
2026-04-15T21:18:25.414 [DEBUG] [Thread-25904] [transport.py] [_log()] kex follows: False
2026-04-15T21:18:25.414 [DEBUG] [Thread-25904] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:18:25.414 [DEBUG] [Thread-25904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:18:25.415 [DEBUG] [Thread-25904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:18:25.415 [DEBUG] [Thread-25904] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:18:25.415 [DEBUG] [Thread-25904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:18:25.415 [DEBUG] [Thread-25904] [transport.py] [_log()] Compression: none
2026-04-15T21:18:25.415 [DEBUG] [Thread-25904] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:18:25.432 [DEBUG] [Thread-25904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:18:25.432 [DEBUG] [Thread-25904] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:18:25.432 [DEBUG] [Thread-25904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:18:25.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:18:25.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:18:25.433 [DEBUG] [Thread-25904] [transport.py] [_log()] userauth is OK
2026-04-15T21:18:25.434 [DEBUG] [Thread-25904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:18:25.434 [DEBUG] [Thread-25904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:18:25.434 [DEBUG] [Thread-25904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:18:25.434 [DEBUG] [Thread-25904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:18:25.457 [INFO] [Thread-25904] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:18:25.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:18:26.131 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:26.217 [DEBUG] [Thread-25904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:18:26.217 [DEBUG] [Thread-25904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:18:26.218 [DEBUG] [Thread-25904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:18:26.260 [DEBUG] [Thread-25904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:18:26.260 [DEBUG] [Thread-25904] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:18:26.262 [DEBUG] [Thread-25904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:18:26.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:18:26.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:18:26.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:18:26.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:18:26.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:18:26.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:18:26.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:18:26.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:18:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:18:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.803950 -999.00  +10.00   1.47     77   +6.20 1 1 1 1 1     0    0 4.05 18.17 ZNESW 3.3 1.5 353.2 3.6 10.2 -24.5 10.2 -23.2 9.8 -21.1 10.1 -23.4
2026-04-15T21:18:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:18:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:18:26.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.803950
2026-04-15T21:18:26.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:18:26.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:18:26.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:18:26.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:18:26.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:18:26.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:17:43', tmtdew=4.2396, humidity=74.8452, cloud=0.0, wind=2.79072, temperature=9.78324, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:17:41.280', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.018749999999998934, -0.09774999999999956, -0.08850000000000158, -0.08249999999999957, -0.01574999999999882, -0.005000000000000782, -0.03774999999999906, 0.0009999999999994458, -0.017999999999998906, -0.042749999999999844, -0.041999999999999815, 0.028999999999999915, -0.023749999999999716, 0.0030000000000001137, 0.0, 0.009249999999999758, -0.04150000000000098, -0.018000000000000682, 0.004249999999998977, 0.008999999999998565, 0.022749999999998494, -0.019249999999999545, 0.01025000000000098, 0.04499999999999993, -0.06049999999999933, -0.01624999999999943, -0.019499999999998963, -0.006999999999999673, -0.017999999999998906, 0.03500000000000014, 0.03700000000000081, -0.02125000000000199], zp_timestamp='2026-04-15T19:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:18:26.281 [DEBUG] [Thread-25904] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:18:26.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:18:26.497 [DEBUG] [Thread-25907] [transport.py] [_log()] starting thread (client mode): 0xf1364c40
2026-04-15T21:18:26.498 [DEBUG] [Thread-25907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:18:26.513 [DEBUG] [Thread-25907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:18:26.513 [INFO] [Thread-25907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:18:26.520 [DEBUG] [Thread-25907] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:18:26.521 [DEBUG] [Thread-25907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:18:26.521 [DEBUG] [Thread-25907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:18:26.521 [DEBUG] [Thread-25907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:18:26.521 [DEBUG] [Thread-25907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:18:26.521 [DEBUG] [Thread-25907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:18:26.521 [DEBUG] [Thread-25907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:18:26.521 [DEBUG] [Thread-25907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:18:26.521 [DEBUG] [Thread-25907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:18:26.521 [DEBUG] [Thread-25907] [transport.py] [_log()] client lang: <none>
2026-04-15T21:18:26.521 [DEBUG] [Thread-25907] [transport.py] [_log()] server lang: <none>
2026-04-15T21:18:26.521 [DEBUG] [Thread-25907] [transport.py] [_log()] kex follows: False
2026-04-15T21:18:26.521 [DEBUG] [Thread-25907] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:18:26.522 [DEBUG] [Thread-25907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:18:26.522 [DEBUG] [Thread-25907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:18:26.522 [DEBUG] [Thread-25907] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:18:26.522 [DEBUG] [Thread-25907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:18:26.522 [DEBUG] [Thread-25907] [transport.py] [_log()] Compression: none
2026-04-15T21:18:26.522 [DEBUG] [Thread-25907] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:18:26.575 [DEBUG] [Thread-25907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:18:26.576 [DEBUG] [Thread-25907] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:18:26.576 [DEBUG] [Thread-25907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:18:26.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:18:26.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:18:26.632 [DEBUG] [Thread-25907] [transport.py] [_log()] userauth is OK
2026-04-15T21:18:26.633 [DEBUG] [Thread-25907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:18:26.633 [DEBUG] [Thread-25907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:18:26.633 [DEBUG] [Thread-25907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:18:26.633 [DEBUG] [Thread-25907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:18:26.658 [INFO] [Thread-25907] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:18:26.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:18:26.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:18:27.467 [DEBUG] [Thread-25907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:18:27.467 [DEBUG] [Thread-25907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:18:27.515 [DEBUG] [Thread-25907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:18:27.515 [DEBUG] [Thread-25907] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:18:27.524 [DEBUG] [Thread-25907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:18:27.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:18:27.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')
2026-04-15T21:18:27.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
2026-04-15T21:18:27.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:18:27.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:18:27.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:18:27.559 [DEBUG] [Thread-25907] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:18:31.577 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:37.033 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:38.826 [DEBUG] [Thread-25909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:42.432 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:46.739 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:46.740 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:47.825 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:53.439 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:53.870 [DEBUG] [Thread-25910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:57.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:18:57.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:18:57.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
2026-04-15T21:18:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 18, 19), 4.34008, 74.3231, 0.0, 4.46544, 9.62479, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:18:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:18:19
2026-04-15T21:18:59.052 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:18:59.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:18:59.959 [DEBUG] [Thread-25911] [transport.py] [_log()] starting thread (client mode): 0xf1366c20
2026-04-15T21:18:59.960 [DEBUG] [Thread-25911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:18:59.978 [DEBUG] [Thread-25911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:18:59.979 [INFO] [Thread-25911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:18:59.982 [DEBUG] [Thread-25911] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:18:59.982 [DEBUG] [Thread-25911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:18:59.982 [DEBUG] [Thread-25911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:18:59.982 [DEBUG] [Thread-25911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:18:59.982 [DEBUG] [Thread-25911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:18:59.982 [DEBUG] [Thread-25911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:18:59.982 [DEBUG] [Thread-25911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:18:59.982 [DEBUG] [Thread-25911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:18:59.982 [DEBUG] [Thread-25911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:18:59.982 [DEBUG] [Thread-25911] [transport.py] [_log()] client lang: <none>
2026-04-15T21:18:59.983 [DEBUG] [Thread-25911] [transport.py] [_log()] server lang: <none>
2026-04-15T21:18:59.983 [DEBUG] [Thread-25911] [transport.py] [_log()] kex follows: False
2026-04-15T21:18:59.983 [DEBUG] [Thread-25911] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:18:59.983 [DEBUG] [Thread-25911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:18:59.983 [DEBUG] [Thread-25911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:18:59.983 [DEBUG] [Thread-25911] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:18:59.983 [DEBUG] [Thread-25911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:18:59.983 [DEBUG] [Thread-25911] [transport.py] [_log()] Compression: none
2026-04-15T21:18:59.983 [DEBUG] [Thread-25911] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:19:00.000 [DEBUG] [Thread-25911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:19:00.000 [DEBUG] [Thread-25911] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:19:00.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:19:00.001 [DEBUG] [Thread-25911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:19:00.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:19:00.002 [DEBUG] [Thread-25911] [transport.py] [_log()] userauth is OK
2026-04-15T21:19:00.002 [DEBUG] [Thread-25911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:19:00.002 [DEBUG] [Thread-25911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:19:00.002 [DEBUG] [Thread-25911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:19:00.002 [DEBUG] [Thread-25911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:19:00.026 [INFO] [Thread-25911] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:19:00.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:19:00.823 [DEBUG] [Thread-25911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:19:00.823 [DEBUG] [Thread-25911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:19:00.824 [DEBUG] [Thread-25911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:19:00.864 [DEBUG] [Thread-25911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:19:00.864 [DEBUG] [Thread-25911] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:19:00.867 [DEBUG] [Thread-25911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:19:00.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:19:00.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:19:00.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:19:00.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:19:00.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:19:00.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:19:00.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:19:00.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:19:00.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:19:00.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.804298 -999.00   +9.90   5.37     77   +6.20 1 1 1 1 1     0    0 3.94 18.15 ZNESW 4.5 5.4 313.4 5.6 10.2 -24.7 10.1 -23.3 9.8 -21.5 10.2 -23.4
2026-04-15T21:19:00.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:19:00.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:19:00.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.804298
2026-04-15T21:19:00.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:19:00.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:19:00.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:19:00.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:19:00.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:19:00.893 [DEBUG] [Thread-25911] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:19:00.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:18:19', tmtdew=4.34008, humidity=74.3231, cloud=0.0, wind=4.46544, temperature=9.62479, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:18:11.347', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.018749999999998934, -0.09774999999999956, -0.08850000000000158, -0.08249999999999957, -0.01574999999999882, -0.005000000000000782, -0.03774999999999906, 0.0009999999999994458, -0.017999999999998906, -0.042749999999999844, -0.041999999999999815, 0.028999999999999915, -0.023749999999999716, 0.0030000000000001137, 0.0, 0.009249999999999758, -0.04150000000000098, -0.018000000000000682, 0.004249999999998977, 0.008999999999998565, 0.022749999999998494, -0.019249999999999545, 0.01025000000000098, 0.04499999999999993, -0.06049999999999933, -0.01624999999999943, -0.019499999999998963, -0.006999999999999673, -0.017999999999998906, 0.03500000000000014, 0.03700000000000081, -0.02125000000000199], zp_timestamp='2026-04-15T19:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:19:01.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:19:01.183 [DEBUG] [Thread-25914] [transport.py] [_log()] starting thread (client mode): 0xee905b70
2026-04-15T21:19:01.184 [DEBUG] [Thread-25914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:19:01.198 [DEBUG] [Thread-25914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:19:01.199 [INFO] [Thread-25914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:19:01.206 [DEBUG] [Thread-25914] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:19:01.206 [DEBUG] [Thread-25914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:19:01.206 [DEBUG] [Thread-25914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:19:01.206 [DEBUG] [Thread-25914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:19:01.206 [DEBUG] [Thread-25914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:19:01.206 [DEBUG] [Thread-25914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:19:01.207 [DEBUG] [Thread-25914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:19:01.207 [DEBUG] [Thread-25914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:19:01.207 [DEBUG] [Thread-25914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:19:01.207 [DEBUG] [Thread-25914] [transport.py] [_log()] client lang: <none>
2026-04-15T21:19:01.207 [DEBUG] [Thread-25914] [transport.py] [_log()] server lang: <none>
2026-04-15T21:19:01.207 [DEBUG] [Thread-25914] [transport.py] [_log()] kex follows: False
2026-04-15T21:19:01.207 [DEBUG] [Thread-25914] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:19:01.207 [DEBUG] [Thread-25914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:19:01.207 [DEBUG] [Thread-25914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:19:01.207 [DEBUG] [Thread-25914] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:19:01.207 [DEBUG] [Thread-25914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:19:01.208 [DEBUG] [Thread-25914] [transport.py] [_log()] Compression: none
2026-04-15T21:19:01.208 [DEBUG] [Thread-25914] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:19:01.264 [DEBUG] [Thread-25914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:19:01.264 [DEBUG] [Thread-25914] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:19:01.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:19:01.265 [DEBUG] [Thread-25914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:19:01.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:19:01.320 [DEBUG] [Thread-25914] [transport.py] [_log()] userauth is OK
2026-04-15T21:19:01.320 [DEBUG] [Thread-25914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:19:01.321 [DEBUG] [Thread-25914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:19:01.321 [DEBUG] [Thread-25914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:19:01.321 [DEBUG] [Thread-25914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:19:01.346 [INFO] [Thread-25914] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:19:01.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:19:01.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:19:02.183 [DEBUG] [Thread-25914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:19:02.183 [DEBUG] [Thread-25914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:19:02.232 [DEBUG] [Thread-25914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:19:02.232 [DEBUG] [Thread-25914] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:19:02.240 [DEBUG] [Thread-25914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:19:02.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:19:02.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')
2026-04-15T21:19:02.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
2026-04-15T21:19:02.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:19:02.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:19:02.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:19:02.275 [DEBUG] [Thread-25914] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:19:04.422 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:08.901 [DEBUG] [Thread-25916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:09.881 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:15.276 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:15.832 [DEBUG] [Thread-25917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:20.773 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:23.947 [DEBUG] [Thread-25918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:26.185 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:31.627 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:32.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:19:32.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:19:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:19:33.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 18, 54), 4.2778, 74.6472, 0.0, 4.09608, 9.78412, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:19:33.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:18:54
2026-04-15T21:19:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:19:34.426 [DEBUG] [Thread-25919] [transport.py] [_log()] starting thread (client mode): 0xee904e20
2026-04-15T21:19:34.426 [DEBUG] [Thread-25919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:19:34.444 [DEBUG] [Thread-25919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:19:34.445 [INFO] [Thread-25919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] client lang: <none>
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] server lang: <none>
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] kex follows: False
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:19:34.448 [DEBUG] [Thread-25919] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:19:34.449 [DEBUG] [Thread-25919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:19:34.449 [DEBUG] [Thread-25919] [transport.py] [_log()] Compression: none
2026-04-15T21:19:34.449 [DEBUG] [Thread-25919] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:19:34.464 [DEBUG] [Thread-25919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:19:34.464 [DEBUG] [Thread-25919] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:19:34.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:19:34.465 [DEBUG] [Thread-25919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:19:34.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:19:34.466 [DEBUG] [Thread-25919] [transport.py] [_log()] userauth is OK
2026-04-15T21:19:34.466 [DEBUG] [Thread-25919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:19:34.466 [DEBUG] [Thread-25919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:19:34.466 [DEBUG] [Thread-25919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:19:34.466 [DEBUG] [Thread-25919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:19:34.485 [INFO] [Thread-25919] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:19:34.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:19:35.265 [DEBUG] [Thread-25919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:19:35.265 [DEBUG] [Thread-25919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:19:35.266 [DEBUG] [Thread-25919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:19:35.307 [DEBUG] [Thread-25919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:19:35.307 [DEBUG] [Thread-25919] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:19:35.309 [DEBUG] [Thread-25919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:19:35.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:19:35.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:19:35.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:19:35.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:19:35.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:19:35.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:19:35.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:19:35.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:19:35.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:19:35.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.804992 -999.00   +9.80   3.04     77   +6.10 1 1 1 1 1     0    0 4.16 19.10 ZNESW 2.7 3.0 271.4 3.4 10.2 -24.6 10.1 -23.2 9.8 -21.2 10.1 -23.2
2026-04-15T21:19:35.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:19:35.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:19:35.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.804992
2026-04-15T21:19:35.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:19:35.327 [DEBUG] [Thread-25919] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:19:35.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:19:35.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:19:35.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:19:35.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:19:35.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:18:54', tmtdew=4.2778, humidity=74.6472, cloud=0.0, wind=4.09608, temperature=9.78412, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:19:11.309', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.018749999999998934, -0.09774999999999956, -0.08850000000000158, -0.08249999999999957, -0.01574999999999882, -0.005000000000000782, -0.03774999999999906, 0.0009999999999994458, -0.017999999999998906, -0.042749999999999844, -0.041999999999999815, 0.028999999999999915, -0.023749999999999716, 0.0030000000000001137, 0.0, 0.009249999999999758, -0.04150000000000098, -0.018000000000000682, 0.004249999999998977, 0.008999999999998565, 0.022749999999998494, -0.019249999999999545, 0.01025000000000098, 0.04499999999999993, -0.06049999999999933, -0.01624999999999943, -0.019499999999998963, -0.006999999999999673, -0.017999999999998906, 0.03500000000000014, 0.03700000000000081, -0.02125000000000199], zp_timestamp='2026-04-15T19:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:19:35.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:19:35.595 [DEBUG] [Thread-25922] [transport.py] [_log()] starting thread (client mode): 0xee906bf0
2026-04-15T21:19:35.595 [DEBUG] [Thread-25922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:19:35.610 [DEBUG] [Thread-25922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:19:35.610 [INFO] [Thread-25922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:19:35.617 [DEBUG] [Thread-25922] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:19:35.617 [DEBUG] [Thread-25922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:19:35.618 [DEBUG] [Thread-25922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:19:35.618 [DEBUG] [Thread-25922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:19:35.618 [DEBUG] [Thread-25922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:19:35.618 [DEBUG] [Thread-25922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:19:35.618 [DEBUG] [Thread-25922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:19:35.618 [DEBUG] [Thread-25922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:19:35.618 [DEBUG] [Thread-25922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:19:35.618 [DEBUG] [Thread-25922] [transport.py] [_log()] client lang: <none>
2026-04-15T21:19:35.618 [DEBUG] [Thread-25922] [transport.py] [_log()] server lang: <none>
2026-04-15T21:19:35.618 [DEBUG] [Thread-25922] [transport.py] [_log()] kex follows: False
2026-04-15T21:19:35.618 [DEBUG] [Thread-25922] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:19:35.618 [DEBUG] [Thread-25922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:19:35.619 [DEBUG] [Thread-25922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:19:35.619 [DEBUG] [Thread-25922] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:19:35.619 [DEBUG] [Thread-25922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:19:35.619 [DEBUG] [Thread-25922] [transport.py] [_log()] Compression: none
2026-04-15T21:19:35.619 [DEBUG] [Thread-25922] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:19:35.675 [DEBUG] [Thread-25922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:19:35.676 [DEBUG] [Thread-25922] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:19:35.676 [DEBUG] [Thread-25922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:19:35.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:19:35.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:19:35.732 [DEBUG] [Thread-25922] [transport.py] [_log()] userauth is OK
2026-04-15T21:19:35.733 [DEBUG] [Thread-25922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:19:35.733 [DEBUG] [Thread-25922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:19:35.733 [DEBUG] [Thread-25922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:19:35.733 [DEBUG] [Thread-25922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:19:35.759 [INFO] [Thread-25922] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:19:35.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:19:35.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:19:36.568 [DEBUG] [Thread-25922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:19:36.569 [DEBUG] [Thread-25922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:19:36.616 [DEBUG] [Thread-25922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:19:36.616 [DEBUG] [Thread-25922] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:19:36.625 [DEBUG] [Thread-25922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:19:36.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:19:36.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')
2026-04-15T21:19:36.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
2026-04-15T21:19:36.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:19:36.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:19:36.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:19:36.661 [DEBUG] [Thread-25922] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:19:37.248 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:38.978 [DEBUG] [Thread-25924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:42.781 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:46.941 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:46.942 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:48.215 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:53.619 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:54.022 [DEBUG] [Thread-25925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:19:59.184 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:04.560 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:06.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:20:06.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:20:06.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
2026-04-15T21:20:08.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 19, 30), 4.33835, 74.3236, 0.0, 1.0602, 9.67547, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:20:08.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:19:30
2026-04-15T21:20:08.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:20:08.841 [DEBUG] [Thread-25926] [transport.py] [_log()] starting thread (client mode): 0xee907280
2026-04-15T21:20:08.842 [DEBUG] [Thread-25926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:20:08.861 [DEBUG] [Thread-25926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:20:08.861 [INFO] [Thread-25926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:20:08.864 [DEBUG] [Thread-25926] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:20:08.864 [DEBUG] [Thread-25926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:20:08.865 [DEBUG] [Thread-25926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:20:08.865 [DEBUG] [Thread-25926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:20:08.865 [DEBUG] [Thread-25926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:20:08.865 [DEBUG] [Thread-25926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:20:08.865 [DEBUG] [Thread-25926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:20:08.865 [DEBUG] [Thread-25926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:20:08.865 [DEBUG] [Thread-25926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:20:08.865 [DEBUG] [Thread-25926] [transport.py] [_log()] client lang: <none>
2026-04-15T21:20:08.865 [DEBUG] [Thread-25926] [transport.py] [_log()] server lang: <none>
2026-04-15T21:20:08.865 [DEBUG] [Thread-25926] [transport.py] [_log()] kex follows: False
2026-04-15T21:20:08.865 [DEBUG] [Thread-25926] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:20:08.865 [DEBUG] [Thread-25926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:20:08.866 [DEBUG] [Thread-25926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:20:08.866 [DEBUG] [Thread-25926] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:20:08.866 [DEBUG] [Thread-25926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:20:08.866 [DEBUG] [Thread-25926] [transport.py] [_log()] Compression: none
2026-04-15T21:20:08.866 [DEBUG] [Thread-25926] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:20:08.881 [DEBUG] [Thread-25926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:20:08.881 [DEBUG] [Thread-25926] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:20:08.882 [DEBUG] [Thread-25926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:20:08.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:20:08.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:20:08.883 [DEBUG] [Thread-25926] [transport.py] [_log()] userauth is OK
2026-04-15T21:20:08.883 [DEBUG] [Thread-25926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:20:08.883 [DEBUG] [Thread-25926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:20:08.884 [DEBUG] [Thread-25926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:20:08.884 [DEBUG] [Thread-25926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:20:08.906 [INFO] [Thread-25926] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:20:08.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:20:09.053 [DEBUG] [Thread-25928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:09.995 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:10.432 [DEBUG] [Thread-25926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:20:10.432 [DEBUG] [Thread-25926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:20:10.433 [DEBUG] [Thread-25926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:20:10.473 [DEBUG] [Thread-25926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:20:10.473 [DEBUG] [Thread-25926] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:20:10.476 [DEBUG] [Thread-25926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:20:10.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:20:10.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:20:10.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:20:10.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:20:10.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:20:10.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:20:10.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:20:10.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:20:10.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:20:10.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.805339 -999.00   +9.90   2.84     77   +6.20 1 1 1 1 1     0    0 4.01 17.33 ZNESW 2.4 2.8 285.9 4.4 10.2 -24.5 10.2 -22.9 9.8 -21.1 10.2 -22.8
2026-04-15T21:20:10.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:20:10.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:20:10.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.805339
2026-04-15T21:20:10.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:20:10.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:20:10.515 [DEBUG] [Thread-25926] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:20:10.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:20:10.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:20:10.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:20:10.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:19:30', tmtdew=4.33835, humidity=74.3236, cloud=0.0, wind=1.0602, temperature=9.67547, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:19:41.290', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.018749999999998934, -0.09774999999999956, -0.08850000000000158, -0.08249999999999957, -0.01574999999999882, -0.005000000000000782, -0.03774999999999906, 0.0009999999999994458, -0.017999999999998906, -0.042749999999999844, -0.041999999999999815, 0.028999999999999915, -0.023749999999999716, 0.0030000000000001137, 0.0, 0.009249999999999758, -0.04150000000000098, -0.018000000000000682, 0.004249999999998977, 0.008999999999998565, 0.022749999999998494, -0.019249999999999545, 0.01025000000000098, 0.04499999999999993, -0.06049999999999933, -0.01624999999999943, -0.019499999999998963, -0.006999999999999673, -0.017999999999998906, 0.03500000000000014, 0.03700000000000081, -0.02125000000000199], zp_timestamp='2026-04-15T19:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:20:10.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:20:10.773 [DEBUG] [Thread-25930] [transport.py] [_log()] starting thread (client mode): 0xf1364af0
2026-04-15T21:20:10.773 [DEBUG] [Thread-25930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:20:10.787 [DEBUG] [Thread-25930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:20:10.787 [INFO] [Thread-25930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:20:10.795 [DEBUG] [Thread-25930] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:20:10.795 [DEBUG] [Thread-25930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:20:10.795 [DEBUG] [Thread-25930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:20:10.795 [DEBUG] [Thread-25930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:20:10.795 [DEBUG] [Thread-25930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:20:10.795 [DEBUG] [Thread-25930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:20:10.795 [DEBUG] [Thread-25930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:20:10.795 [DEBUG] [Thread-25930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:20:10.795 [DEBUG] [Thread-25930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:20:10.796 [DEBUG] [Thread-25930] [transport.py] [_log()] client lang: <none>
2026-04-15T21:20:10.796 [DEBUG] [Thread-25930] [transport.py] [_log()] server lang: <none>
2026-04-15T21:20:10.796 [DEBUG] [Thread-25930] [transport.py] [_log()] kex follows: False
2026-04-15T21:20:10.796 [DEBUG] [Thread-25930] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:20:10.796 [DEBUG] [Thread-25930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:20:10.796 [DEBUG] [Thread-25930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:20:10.796 [DEBUG] [Thread-25930] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:20:10.796 [DEBUG] [Thread-25930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:20:10.796 [DEBUG] [Thread-25930] [transport.py] [_log()] Compression: none
2026-04-15T21:20:10.796 [DEBUG] [Thread-25930] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:20:10.852 [DEBUG] [Thread-25930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:20:10.852 [DEBUG] [Thread-25930] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:20:10.853 [DEBUG] [Thread-25930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:20:10.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:20:10.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:20:10.908 [DEBUG] [Thread-25930] [transport.py] [_log()] userauth is OK
2026-04-15T21:20:10.908 [DEBUG] [Thread-25930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:20:10.909 [DEBUG] [Thread-25930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:20:10.909 [DEBUG] [Thread-25930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:20:10.909 [DEBUG] [Thread-25930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:20:10.933 [INFO] [Thread-25930] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:20:10.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:20:10.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:20:11.754 [DEBUG] [Thread-25930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:20:11.754 [DEBUG] [Thread-25930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:20:11.802 [DEBUG] [Thread-25930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:20:11.802 [DEBUG] [Thread-25930] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:20:11.811 [DEBUG] [Thread-25930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:20:11.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:20:11.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')
2026-04-15T21:20:11.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') -> 00000000
2026-04-15T21:20:11.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:20:11.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:20:11.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:20:11.847 [DEBUG] [Thread-25930] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:20:15.645 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:15.981 [DEBUG] [Thread-25932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:21.148 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:24.084 [DEBUG] [Thread-25933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:26.810 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:32.217 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:37.736 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:39.129 [DEBUG] [Thread-25934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:41.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:20:41.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:20:41.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
2026-04-15T21:20:43.176 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:43.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 20, 6), 4.32711, 74.3904, 0.0, 1.04256, 9.72559, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:20:43.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:20:06
2026-04-15T21:20:43.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:20:44.121 [DEBUG] [Thread-25935] [transport.py] [_log()] starting thread (client mode): 0xf1367e50
2026-04-15T21:20:44.121 [DEBUG] [Thread-25935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:20:44.136 [DEBUG] [Thread-25935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:20:44.136 [INFO] [Thread-25935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:20:44.138 [DEBUG] [Thread-25935] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:20:44.138 [DEBUG] [Thread-25935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:20:44.138 [DEBUG] [Thread-25935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:20:44.138 [DEBUG] [Thread-25935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:20:44.138 [DEBUG] [Thread-25935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:20:44.139 [DEBUG] [Thread-25935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:20:44.139 [DEBUG] [Thread-25935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:20:44.139 [DEBUG] [Thread-25935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:20:44.139 [DEBUG] [Thread-25935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:20:44.139 [DEBUG] [Thread-25935] [transport.py] [_log()] client lang: <none>
2026-04-15T21:20:44.139 [DEBUG] [Thread-25935] [transport.py] [_log()] server lang: <none>
2026-04-15T21:20:44.139 [DEBUG] [Thread-25935] [transport.py] [_log()] kex follows: False
2026-04-15T21:20:44.139 [DEBUG] [Thread-25935] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:20:44.139 [DEBUG] [Thread-25935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:20:44.139 [DEBUG] [Thread-25935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:20:44.139 [DEBUG] [Thread-25935] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:20:44.140 [DEBUG] [Thread-25935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:20:44.140 [DEBUG] [Thread-25935] [transport.py] [_log()] Compression: none
2026-04-15T21:20:44.140 [DEBUG] [Thread-25935] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:20:44.156 [DEBUG] [Thread-25935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:20:44.157 [DEBUG] [Thread-25935] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:20:44.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:20:44.157 [DEBUG] [Thread-25935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:20:44.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:20:44.158 [DEBUG] [Thread-25935] [transport.py] [_log()] userauth is OK
2026-04-15T21:20:44.158 [DEBUG] [Thread-25935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:20:44.159 [DEBUG] [Thread-25935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:20:44.159 [DEBUG] [Thread-25935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:20:44.159 [DEBUG] [Thread-25935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:20:44.177 [INFO] [Thread-25935] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:20:44.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:20:44.946 [DEBUG] [Thread-25935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:20:44.947 [DEBUG] [Thread-25935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:20:44.947 [DEBUG] [Thread-25935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:20:44.987 [DEBUG] [Thread-25935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:20:44.987 [DEBUG] [Thread-25935] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:20:44.990 [DEBUG] [Thread-25935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:20:45.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:20:45.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:20:45.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:20:45.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:20:45.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:20:45.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:20:45.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:20:45.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:20:45.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:20:45.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.805687 -999.00   +9.90   1.02     77   +6.20 1 1 1 1 1     0    0 4.08 18.60 ZNESW 1.9 1.0 92.8 2.7 10.3 -24.1 10.1 -23.2 9.9 -20.9 10.1 -23.2
2026-04-15T21:20:45.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:20:45.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:20:45.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.805687
2026-04-15T21:20:45.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:20:45.012 [DEBUG] [Thread-25935] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:20:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:20:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:20:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:20:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:20:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:20:06', tmtdew=4.32711, humidity=74.3904, cloud=0.0, wind=1.04256, temperature=9.72559, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:20:11.357', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.018749999999998934, -0.09774999999999956, -0.08850000000000158, -0.08249999999999957, -0.01574999999999882, -0.005000000000000782, -0.03774999999999906, 0.0009999999999994458, -0.017999999999998906, -0.042749999999999844, -0.041999999999999815, 0.028999999999999915, -0.023749999999999716, 0.0030000000000001137, 0.0, 0.009249999999999758, -0.04150000000000098, -0.018000000000000682, 0.004249999999998977, 0.008999999999998565, 0.022749999999998494, -0.019249999999999545, 0.01025000000000098, 0.04499999999999993, -0.06049999999999933, -0.01624999999999943, -0.019499999999998963, -0.006999999999999673, -0.017999999999998906, 0.03500000000000014, 0.03700000000000081, -0.02125000000000199], zp_timestamp='2026-04-15T19:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:20:45.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:20:45.279 [DEBUG] [Thread-25938] [transport.py] [_log()] starting thread (client mode): 0xf1364400
2026-04-15T21:20:45.279 [DEBUG] [Thread-25938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:20:45.297 [DEBUG] [Thread-25938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:20:45.297 [INFO] [Thread-25938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:20:45.304 [DEBUG] [Thread-25938] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:20:45.305 [DEBUG] [Thread-25938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:20:45.305 [DEBUG] [Thread-25938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:20:45.305 [DEBUG] [Thread-25938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:20:45.305 [DEBUG] [Thread-25938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:20:45.305 [DEBUG] [Thread-25938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:20:45.305 [DEBUG] [Thread-25938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:20:45.305 [DEBUG] [Thread-25938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:20:45.305 [DEBUG] [Thread-25938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:20:45.305 [DEBUG] [Thread-25938] [transport.py] [_log()] client lang: <none>
2026-04-15T21:20:45.305 [DEBUG] [Thread-25938] [transport.py] [_log()] server lang: <none>
2026-04-15T21:20:45.305 [DEBUG] [Thread-25938] [transport.py] [_log()] kex follows: False
2026-04-15T21:20:45.305 [DEBUG] [Thread-25938] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:20:45.306 [DEBUG] [Thread-25938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:20:45.306 [DEBUG] [Thread-25938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:20:45.306 [DEBUG] [Thread-25938] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:20:45.306 [DEBUG] [Thread-25938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:20:45.306 [DEBUG] [Thread-25938] [transport.py] [_log()] Compression: none
2026-04-15T21:20:45.306 [DEBUG] [Thread-25938] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:20:45.368 [DEBUG] [Thread-25938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:20:45.368 [DEBUG] [Thread-25938] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:20:45.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:20:45.369 [DEBUG] [Thread-25938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:20:45.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:20:45.424 [DEBUG] [Thread-25938] [transport.py] [_log()] userauth is OK
2026-04-15T21:20:45.424 [DEBUG] [Thread-25938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:20:45.424 [DEBUG] [Thread-25938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:20:45.424 [DEBUG] [Thread-25938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:20:45.425 [DEBUG] [Thread-25938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:20:45.450 [INFO] [Thread-25938] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:20:45.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:20:45.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:20:46.273 [DEBUG] [Thread-25938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:20:46.273 [DEBUG] [Thread-25938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:20:46.321 [DEBUG] [Thread-25938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:20:46.322 [DEBUG] [Thread-25938] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:20:46.330 [DEBUG] [Thread-25938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:20:46.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:20:46.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')
2026-04-15T21:20:46.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
2026-04-15T21:20:46.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:20:46.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:20:46.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:20:46.362 [DEBUG] [Thread-25938] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:20:47.147 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:47.148 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:48.558 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:53.953 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:54.161 [DEBUG] [Thread-25940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:20:59.574 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:04.944 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:09.208 [DEBUG] [Thread-25941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:10.465 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:15.999 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:16.128 [DEBUG] [Thread-25942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:16.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:21:16.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:21:16.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
2026-04-15T21:21:17.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 20, 41), 4.26907, 74.6813, 0.0, 5.08392, 9.71847, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:21:17.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:20:41
2026-04-15T21:21:18.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:21:18.505 [DEBUG] [Thread-25943] [transport.py] [_log()] starting thread (client mode): 0xf1365ab0
2026-04-15T21:21:18.505 [DEBUG] [Thread-25943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:21:18.525 [DEBUG] [Thread-25943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:21:18.525 [INFO] [Thread-25943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:21:18.528 [DEBUG] [Thread-25943] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:21:18.528 [DEBUG] [Thread-25943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:21:18.528 [DEBUG] [Thread-25943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:21:18.528 [DEBUG] [Thread-25943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:21:18.528 [DEBUG] [Thread-25943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:21:18.528 [DEBUG] [Thread-25943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:21:18.528 [DEBUG] [Thread-25943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:21:18.529 [DEBUG] [Thread-25943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:21:18.529 [DEBUG] [Thread-25943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:21:18.529 [DEBUG] [Thread-25943] [transport.py] [_log()] client lang: <none>
2026-04-15T21:21:18.529 [DEBUG] [Thread-25943] [transport.py] [_log()] server lang: <none>
2026-04-15T21:21:18.529 [DEBUG] [Thread-25943] [transport.py] [_log()] kex follows: False
2026-04-15T21:21:18.529 [DEBUG] [Thread-25943] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:21:18.529 [DEBUG] [Thread-25943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:21:18.529 [DEBUG] [Thread-25943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:21:18.529 [DEBUG] [Thread-25943] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:21:18.529 [DEBUG] [Thread-25943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:21:18.529 [DEBUG] [Thread-25943] [transport.py] [_log()] Compression: none
2026-04-15T21:21:18.529 [DEBUG] [Thread-25943] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:21:18.548 [DEBUG] [Thread-25943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:21:18.549 [DEBUG] [Thread-25943] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:21:18.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:21:18.550 [DEBUG] [Thread-25943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:21:18.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:21:18.551 [DEBUG] [Thread-25943] [transport.py] [_log()] userauth is OK
2026-04-15T21:21:18.551 [DEBUG] [Thread-25943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:21:18.551 [DEBUG] [Thread-25943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:21:18.551 [DEBUG] [Thread-25943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:21:18.551 [DEBUG] [Thread-25943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:21:18.588 [INFO] [Thread-25943] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:21:18.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:21:19.391 [DEBUG] [Thread-25943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:21:19.391 [DEBUG] [Thread-25943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:21:19.392 [DEBUG] [Thread-25943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:21:19.431 [DEBUG] [Thread-25943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:21:19.432 [DEBUG] [Thread-25943] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:21:19.434 [DEBUG] [Thread-25943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:21:19.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:21:19.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:21:19.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:21:19.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:21:19.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:21:19.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:21:19.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:21:19.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:21:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:21:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.806034 -999.00  +10.00   1.35     77   +6.20 1 1 1 1 1     0    0 4.20 22.05 ZNESW 2.5 1.4 279.5 3.2 10.2 -24.4 10.2 -23.2 9.9 -21.1 10.2 -23.1
2026-04-15T21:21:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:21:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:21:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.806034
2026-04-15T21:21:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:21:19.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:21:19.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:21:19.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:21:19.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:21:19.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:20:41', tmtdew=4.26907, humidity=74.6813, cloud=0.0, wind=5.08392, temperature=9.71847, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:20:41.338', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.018749999999998934, -0.09774999999999956, -0.08850000000000158, -0.08249999999999957, -0.01574999999999882, -0.005000000000000782, -0.03774999999999906, 0.0009999999999994458, -0.017999999999998906, -0.042749999999999844, -0.041999999999999815, 0.028999999999999915, -0.023749999999999716, 0.0030000000000001137, 0.0, 0.009249999999999758, -0.04150000000000098, -0.018000000000000682, 0.004249999999998977, 0.008999999999998565, 0.022749999999998494, -0.019249999999999545, 0.01025000000000098, 0.04499999999999993, -0.06049999999999933, -0.01624999999999943, -0.019499999999998963, -0.006999999999999673, -0.017999999999998906, 0.03500000000000014, 0.03700000000000081, -0.02125000000000199], zp_timestamp='2026-04-15T19:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:21:19.452 [DEBUG] [Thread-25943] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:21:19.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:21:19.662 [DEBUG] [Thread-25946] [transport.py] [_log()] starting thread (client mode): 0xf13c9b70
2026-04-15T21:21:19.662 [DEBUG] [Thread-25946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:21:19.676 [DEBUG] [Thread-25946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:21:19.676 [INFO] [Thread-25946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:21:19.683 [DEBUG] [Thread-25946] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:21:19.683 [DEBUG] [Thread-25946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:21:19.683 [DEBUG] [Thread-25946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:21:19.683 [DEBUG] [Thread-25946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:21:19.684 [DEBUG] [Thread-25946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:21:19.684 [DEBUG] [Thread-25946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:21:19.684 [DEBUG] [Thread-25946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:21:19.684 [DEBUG] [Thread-25946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:21:19.684 [DEBUG] [Thread-25946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:21:19.684 [DEBUG] [Thread-25946] [transport.py] [_log()] client lang: <none>
2026-04-15T21:21:19.684 [DEBUG] [Thread-25946] [transport.py] [_log()] server lang: <none>
2026-04-15T21:21:19.684 [DEBUG] [Thread-25946] [transport.py] [_log()] kex follows: False
2026-04-15T21:21:19.684 [DEBUG] [Thread-25946] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:21:19.684 [DEBUG] [Thread-25946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:21:19.684 [DEBUG] [Thread-25946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:21:19.684 [DEBUG] [Thread-25946] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:21:19.684 [DEBUG] [Thread-25946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:21:19.684 [DEBUG] [Thread-25946] [transport.py] [_log()] Compression: none
2026-04-15T21:21:19.684 [DEBUG] [Thread-25946] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:21:19.739 [DEBUG] [Thread-25946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:21:19.740 [DEBUG] [Thread-25946] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:21:19.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:21:19.741 [DEBUG] [Thread-25946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:21:19.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:21:19.796 [DEBUG] [Thread-25946] [transport.py] [_log()] userauth is OK
2026-04-15T21:21:19.796 [DEBUG] [Thread-25946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:21:19.796 [DEBUG] [Thread-25946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:21:19.796 [DEBUG] [Thread-25946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:21:19.796 [DEBUG] [Thread-25946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:21:19.820 [INFO] [Thread-25946] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:21:19.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:21:19.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:21:20.616 [DEBUG] [Thread-25946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:21:20.616 [DEBUG] [Thread-25946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:21:20.664 [DEBUG] [Thread-25946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:21:20.664 [DEBUG] [Thread-25946] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:21:20.673 [DEBUG] [Thread-25946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:21:20.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:21:20.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')
2026-04-15T21:21:20.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
2026-04-15T21:21:20.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:21:20.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:21:20.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:21:20.707 [DEBUG] [Thread-25946] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:21:21.632 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:24.239 [DEBUG] [Thread-25948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:27.028 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:32.701 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:38.398 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:39.281 [DEBUG] [Thread-25949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:43.881 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:47.350 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:47.351 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:49.264 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:50.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:21:50.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:21:50.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
2026-04-15T21:21:52.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 21, 17), 4.43936, 73.8241, 0.0, 1.57176, 9.75904, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:21:52.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:21:17
2026-04-15T21:21:52.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:21:52.933 [DEBUG] [Thread-25950] [transport.py] [_log()] starting thread (client mode): 0xf13657e0
2026-04-15T21:21:52.933 [DEBUG] [Thread-25950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:21:52.953 [DEBUG] [Thread-25950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:21:52.953 [INFO] [Thread-25950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:21:52.956 [DEBUG] [Thread-25950] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:21:52.956 [DEBUG] [Thread-25950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:21:52.956 [DEBUG] [Thread-25950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:21:52.956 [DEBUG] [Thread-25950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:21:52.956 [DEBUG] [Thread-25950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:21:52.957 [DEBUG] [Thread-25950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:21:52.957 [DEBUG] [Thread-25950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:21:52.957 [DEBUG] [Thread-25950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:21:52.957 [DEBUG] [Thread-25950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:21:52.957 [DEBUG] [Thread-25950] [transport.py] [_log()] client lang: <none>
2026-04-15T21:21:52.957 [DEBUG] [Thread-25950] [transport.py] [_log()] server lang: <none>
2026-04-15T21:21:52.957 [DEBUG] [Thread-25950] [transport.py] [_log()] kex follows: False
2026-04-15T21:21:52.957 [DEBUG] [Thread-25950] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:21:52.957 [DEBUG] [Thread-25950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:21:52.957 [DEBUG] [Thread-25950] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:21:52.957 [DEBUG] [Thread-25950] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:21:52.957 [DEBUG] [Thread-25950] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:21:52.957 [DEBUG] [Thread-25950] [transport.py] [_log()] Compression: none
2026-04-15T21:21:52.958 [DEBUG] [Thread-25950] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:21:52.974 [DEBUG] [Thread-25950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:21:52.974 [DEBUG] [Thread-25950] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:21:52.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:21:52.974 [DEBUG] [Thread-25950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:21:52.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:21:52.975 [DEBUG] [Thread-25950] [transport.py] [_log()] userauth is OK
2026-04-15T21:21:52.975 [DEBUG] [Thread-25950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:21:52.975 [DEBUG] [Thread-25950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:21:52.975 [DEBUG] [Thread-25950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:21:52.976 [DEBUG] [Thread-25950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:21:52.994 [INFO] [Thread-25950] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:21:52.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:21:53.780 [DEBUG] [Thread-25950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:21:53.781 [DEBUG] [Thread-25950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:21:53.781 [DEBUG] [Thread-25950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:21:53.821 [DEBUG] [Thread-25950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:21:53.821 [DEBUG] [Thread-25950] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:21:53.823 [DEBUG] [Thread-25950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:21:53.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:21:53.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:21:53.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:21:53.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:21:53.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:21:53.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:21:53.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:21:53.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:21:53.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:21:53.849 [DEBUG] [Thread-25950] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:21:53.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.806381 -999.00  +10.00   1.72     77   +6.20 1 1 1 1 1     0    0 4.21 22.53 ZNESW 2.4 1.7 285.8 2.3 10.3 -24.4 10.2 -23.1 9.9 -21.2 10.2 -23.1
2026-04-15T21:21:53.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:21:53.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:21:53.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.806381
2026-04-15T21:21:53.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:21:53.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:21:53.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:21:53.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:21:53.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:21:53.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:21:17', tmtdew=4.43936, humidity=73.8241, cloud=0.0, wind=1.57176, temperature=9.75904, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:21:11.318', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.018749999999998934, -0.09774999999999956, -0.08850000000000158, -0.08249999999999957, -0.01574999999999882, -0.005000000000000782, -0.03774999999999906, 0.0009999999999994458, -0.017999999999998906, -0.042749999999999844, -0.041999999999999815, 0.028999999999999915, -0.023749999999999716, 0.0030000000000001137, 0.0, 0.009249999999999758, -0.04150000000000098, -0.018000000000000682, 0.004249999999998977, 0.008999999999998565, 0.022749999999998494, -0.019249999999999545, 0.01025000000000098, 0.04499999999999993, -0.06049999999999933, -0.01624999999999943, -0.019499999999998963, -0.006999999999999673, -0.017999999999998906, 0.03500000000000014, 0.03700000000000081, -0.02125000000000199], zp_timestamp='2026-04-15T19:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:21:54.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:21:54.109 [DEBUG] [Thread-25953] [transport.py] [_log()] starting thread (client mode): 0xf1367700
2026-04-15T21:21:54.110 [DEBUG] [Thread-25953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:21:54.125 [DEBUG] [Thread-25953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:21:54.125 [INFO] [Thread-25953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:21:54.133 [DEBUG] [Thread-25953] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:21:54.133 [DEBUG] [Thread-25953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:21:54.133 [DEBUG] [Thread-25953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:21:54.133 [DEBUG] [Thread-25953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:21:54.133 [DEBUG] [Thread-25953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:21:54.133 [DEBUG] [Thread-25953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:21:54.133 [DEBUG] [Thread-25953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:21:54.133 [DEBUG] [Thread-25953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:21:54.133 [DEBUG] [Thread-25953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:21:54.133 [DEBUG] [Thread-25953] [transport.py] [_log()] client lang: <none>
2026-04-15T21:21:54.134 [DEBUG] [Thread-25953] [transport.py] [_log()] server lang: <none>
2026-04-15T21:21:54.134 [DEBUG] [Thread-25953] [transport.py] [_log()] kex follows: False
2026-04-15T21:21:54.134 [DEBUG] [Thread-25953] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:21:54.134 [DEBUG] [Thread-25953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:21:54.134 [DEBUG] [Thread-25953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:21:54.134 [DEBUG] [Thread-25953] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:21:54.134 [DEBUG] [Thread-25953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:21:54.134 [DEBUG] [Thread-25953] [transport.py] [_log()] Compression: none
2026-04-15T21:21:54.134 [DEBUG] [Thread-25953] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:21:54.191 [DEBUG] [Thread-25953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:21:54.192 [DEBUG] [Thread-25953] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:21:54.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:21:54.192 [DEBUG] [Thread-25953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:21:54.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:21:54.248 [DEBUG] [Thread-25953] [transport.py] [_log()] userauth is OK
2026-04-15T21:21:54.248 [DEBUG] [Thread-25953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:21:54.248 [DEBUG] [Thread-25953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:21:54.249 [DEBUG] [Thread-25953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:21:54.249 [DEBUG] [Thread-25953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:21:54.274 [INFO] [Thread-25953] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:21:54.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:21:54.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:21:54.312 [DEBUG] [Thread-25955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:54.812 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:21:55.123 [DEBUG] [Thread-25953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:21:55.124 [DEBUG] [Thread-25953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:21:55.171 [DEBUG] [Thread-25953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:21:55.171 [DEBUG] [Thread-25953] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:21:55.180 [DEBUG] [Thread-25953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:21:55.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:21:55.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')
2026-04-15T21:21:55.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
2026-04-15T21:21:55.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:21:55.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:21:55.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:21:55.211 [DEBUG] [Thread-25953] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:22:00.595 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:06.005 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:09.355 [DEBUG] [Thread-25956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:11.528 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:16.300 [DEBUG] [Thread-25957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:17.187 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:22.935 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:24.386 [DEBUG] [Thread-25958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:25.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:22:25.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:22:25.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
2026-04-15T21:22:26.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 21, 53), 4.31188, 74.4824, 0.0, 3.5316, 9.8513, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:22:26.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:21:53
2026-04-15T21:22:27.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:22:27.487 [DEBUG] [Thread-25959] [transport.py] [_log()] starting thread (client mode): 0xf13641f0
2026-04-15T21:22:27.487 [DEBUG] [Thread-25959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:22:27.507 [DEBUG] [Thread-25959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:22:27.507 [INFO] [Thread-25959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:22:27.510 [DEBUG] [Thread-25959] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:22:27.510 [DEBUG] [Thread-25959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:22:27.510 [DEBUG] [Thread-25959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:22:27.511 [DEBUG] [Thread-25959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:22:27.511 [DEBUG] [Thread-25959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:22:27.511 [DEBUG] [Thread-25959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:22:27.511 [DEBUG] [Thread-25959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:22:27.511 [DEBUG] [Thread-25959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:22:27.511 [DEBUG] [Thread-25959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:22:27.511 [DEBUG] [Thread-25959] [transport.py] [_log()] client lang: <none>
2026-04-15T21:22:27.511 [DEBUG] [Thread-25959] [transport.py] [_log()] server lang: <none>
2026-04-15T21:22:27.511 [DEBUG] [Thread-25959] [transport.py] [_log()] kex follows: False
2026-04-15T21:22:27.511 [DEBUG] [Thread-25959] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:22:27.512 [DEBUG] [Thread-25959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:22:27.512 [DEBUG] [Thread-25959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:22:27.512 [DEBUG] [Thread-25959] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:22:27.512 [DEBUG] [Thread-25959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:22:27.512 [DEBUG] [Thread-25959] [transport.py] [_log()] Compression: none
2026-04-15T21:22:27.512 [DEBUG] [Thread-25959] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:22:27.528 [DEBUG] [Thread-25959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:22:27.529 [DEBUG] [Thread-25959] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:22:27.529 [DEBUG] [Thread-25959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:22:27.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:22:27.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:22:27.573 [DEBUG] [Thread-25959] [transport.py] [_log()] userauth is OK
2026-04-15T21:22:27.573 [DEBUG] [Thread-25959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:22:27.573 [DEBUG] [Thread-25959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:22:27.573 [DEBUG] [Thread-25959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:22:27.573 [DEBUG] [Thread-25959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:22:27.608 [INFO] [Thread-25959] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:22:27.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:22:28.405 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:28.430 [DEBUG] [Thread-25959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:22:28.430 [DEBUG] [Thread-25959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:22:28.431 [DEBUG] [Thread-25959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:22:28.471 [DEBUG] [Thread-25959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:22:28.471 [DEBUG] [Thread-25959] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:22:28.473 [DEBUG] [Thread-25959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:22:28.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:22:28.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:22:28.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:22:28.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:22:28.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:22:28.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:22:28.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:22:28.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:22:28.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:22:28.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.806728 -999.00  +10.00   1.46     77   +6.20 1 1 1 1 1     0    0 4.35 24.67 ZNESW 0.8 1.5 127.2 3.1 10.3 -24.4 10.2 -23.1 9.9 -21.0 10.2 -23.2
2026-04-15T21:22:28.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:22:28.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:22:28.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.806728
2026-04-15T21:22:28.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:22:28.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:22:28.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:22:28.492 [DEBUG] [Thread-25959] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:22:28.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:22:28.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:22:28.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:21:53', tmtdew=4.31188, humidity=74.4824, cloud=0.0, wind=3.5316, temperature=9.8513, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:21:41.299', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.018749999999998934, -0.09774999999999956, -0.08850000000000158, -0.08249999999999957, -0.01574999999999882, -0.005000000000000782, -0.03774999999999906, 0.0009999999999994458, -0.017999999999998906, -0.042749999999999844, -0.041999999999999815, 0.028999999999999915, -0.023749999999999716, 0.0030000000000001137, 0.0, 0.009249999999999758, -0.04150000000000098, -0.018000000000000682, 0.004249999999998977, 0.008999999999998565, 0.022749999999998494, -0.019249999999999545, 0.01025000000000098, 0.04499999999999993, -0.06049999999999933, -0.01624999999999943, -0.019499999999998963, -0.006999999999999673, -0.017999999999998906, 0.03500000000000014, 0.03700000000000081, -0.02125000000000199], zp_timestamp='2026-04-15T19:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:22:28.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:22:28.703 [DEBUG] [Thread-25962] [transport.py] [_log()] starting thread (client mode): 0xf1364100
2026-04-15T21:22:28.703 [DEBUG] [Thread-25962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:22:28.718 [DEBUG] [Thread-25962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:22:28.718 [INFO] [Thread-25962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:22:28.725 [DEBUG] [Thread-25962] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:22:28.725 [DEBUG] [Thread-25962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:22:28.725 [DEBUG] [Thread-25962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:22:28.725 [DEBUG] [Thread-25962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:22:28.725 [DEBUG] [Thread-25962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:22:28.725 [DEBUG] [Thread-25962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:22:28.725 [DEBUG] [Thread-25962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:22:28.726 [DEBUG] [Thread-25962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:22:28.726 [DEBUG] [Thread-25962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:22:28.726 [DEBUG] [Thread-25962] [transport.py] [_log()] client lang: <none>
2026-04-15T21:22:28.726 [DEBUG] [Thread-25962] [transport.py] [_log()] server lang: <none>
2026-04-15T21:22:28.726 [DEBUG] [Thread-25962] [transport.py] [_log()] kex follows: False
2026-04-15T21:22:28.726 [DEBUG] [Thread-25962] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:22:28.726 [DEBUG] [Thread-25962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:22:28.726 [DEBUG] [Thread-25962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:22:28.726 [DEBUG] [Thread-25962] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:22:28.726 [DEBUG] [Thread-25962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:22:28.727 [DEBUG] [Thread-25962] [transport.py] [_log()] Compression: none
2026-04-15T21:22:28.727 [DEBUG] [Thread-25962] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:22:28.783 [DEBUG] [Thread-25962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:22:28.784 [DEBUG] [Thread-25962] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:22:28.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:22:28.785 [DEBUG] [Thread-25962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:22:28.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:22:28.840 [DEBUG] [Thread-25962] [transport.py] [_log()] userauth is OK
2026-04-15T21:22:28.840 [DEBUG] [Thread-25962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:22:28.840 [DEBUG] [Thread-25962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:22:28.840 [DEBUG] [Thread-25962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:22:28.840 [DEBUG] [Thread-25962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:22:28.863 [INFO] [Thread-25962] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:22:28.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:22:28.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:22:29.710 [DEBUG] [Thread-25962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:22:29.710 [DEBUG] [Thread-25962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:22:29.758 [DEBUG] [Thread-25962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:22:29.759 [DEBUG] [Thread-25962] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:22:29.768 [DEBUG] [Thread-25962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:22:29.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:22:29.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')
2026-04-15T21:22:29.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') -> 00000000
2026-04-15T21:22:29.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:22:29.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:22:29.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:22:29.803 [DEBUG] [Thread-25962] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:22:33.912 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:39.418 [DEBUG] [Thread-25964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:40.052 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:45.535 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:47.554 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:47.555 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:50.932 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:54.461 [DEBUG] [Thread-25965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:56.440 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:22:59.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:22:59.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:22:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:23:01.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 22, 28), 4.46935, 73.6748, 0.0, 1.37772, 9.79224, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:23:01.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:22:28
2026-04-15T21:23:01.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:23:01.837 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:01.954 [DEBUG] [Thread-25966] [transport.py] [_log()] starting thread (client mode): 0xf1367850
2026-04-15T21:23:01.954 [DEBUG] [Thread-25966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:23:01.974 [DEBUG] [Thread-25966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:23:01.974 [INFO] [Thread-25966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:23:01.976 [DEBUG] [Thread-25966] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:23:01.976 [DEBUG] [Thread-25966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:23:01.976 [DEBUG] [Thread-25966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:23:01.976 [DEBUG] [Thread-25966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:23:01.976 [DEBUG] [Thread-25966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:23:01.976 [DEBUG] [Thread-25966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:23:01.976 [DEBUG] [Thread-25966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:23:01.976 [DEBUG] [Thread-25966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:23:01.976 [DEBUG] [Thread-25966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:23:01.977 [DEBUG] [Thread-25966] [transport.py] [_log()] client lang: <none>
2026-04-15T21:23:01.977 [DEBUG] [Thread-25966] [transport.py] [_log()] server lang: <none>
2026-04-15T21:23:01.977 [DEBUG] [Thread-25966] [transport.py] [_log()] kex follows: False
2026-04-15T21:23:01.977 [DEBUG] [Thread-25966] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:23:01.977 [DEBUG] [Thread-25966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:23:01.977 [DEBUG] [Thread-25966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:23:01.977 [DEBUG] [Thread-25966] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:23:01.977 [DEBUG] [Thread-25966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:23:01.977 [DEBUG] [Thread-25966] [transport.py] [_log()] Compression: none
2026-04-15T21:23:01.977 [DEBUG] [Thread-25966] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:23:01.986 [DEBUG] [Thread-25966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:23:01.986 [DEBUG] [Thread-25966] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:23:01.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:23:01.987 [DEBUG] [Thread-25966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:23:01.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:23:01.988 [DEBUG] [Thread-25966] [transport.py] [_log()] userauth is OK
2026-04-15T21:23:01.988 [DEBUG] [Thread-25966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:23:01.988 [DEBUG] [Thread-25966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:23:01.988 [DEBUG] [Thread-25966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:23:01.988 [DEBUG] [Thread-25966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:23:02.006 [INFO] [Thread-25966] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:23:02.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:23:02.809 [DEBUG] [Thread-25966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:23:02.809 [DEBUG] [Thread-25966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:23:02.809 [DEBUG] [Thread-25966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:23:02.850 [DEBUG] [Thread-25966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:23:02.850 [DEBUG] [Thread-25966] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:23:02.853 [DEBUG] [Thread-25966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:23:02.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:23:02.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:23:02.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:23:02.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:23:02.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:23:02.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:23:02.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:23:02.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:23:02.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:23:02.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.807422 -999.00  +10.10   1.14     77   +6.20 1 1 1 1 1     0    0 4.31 25.84 ZNESW 1.3 1.1 337.8 1.4 10.3 -24.5 10.2 -23.3 9.9 -21.1 10.2 -23.1
2026-04-15T21:23:02.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:23:02.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:23:02.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.807422
2026-04-15T21:23:02.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:23:02.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:23:02.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:23:02.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:23:02.879 [DEBUG] [Thread-25966] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:23:02.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:23:02.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:22:28', tmtdew=4.46935, humidity=73.6748, cloud=0.0, wind=1.37772, temperature=9.79224, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:22:41.261', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.018749999999998934, -0.09774999999999956, -0.08850000000000158, -0.08249999999999957, -0.01574999999999882, -0.005000000000000782, -0.03774999999999906, 0.0009999999999994458, -0.017999999999998906, -0.042749999999999844, -0.041999999999999815, 0.028999999999999915, -0.023749999999999716, 0.0030000000000001137, 0.0, 0.009249999999999758, -0.04150000000000098, -0.018000000000000682, 0.004249999999998977, 0.008999999999998565, 0.022749999999998494, -0.019249999999999545, 0.01025000000000098, 0.04499999999999993, -0.06049999999999933, -0.01624999999999943, -0.019499999999998963, -0.006999999999999673, -0.017999999999998906, 0.03500000000000014, 0.03700000000000081, -0.02125000000000199], zp_timestamp='2026-04-15T19:18:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:23:03.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:23:03.139 [DEBUG] [Thread-25969] [transport.py] [_log()] starting thread (client mode): 0xf13c98d0
2026-04-15T21:23:03.140 [DEBUG] [Thread-25969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:23:03.154 [DEBUG] [Thread-25969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:23:03.154 [INFO] [Thread-25969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:23:03.161 [DEBUG] [Thread-25969] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:23:03.161 [DEBUG] [Thread-25969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:23:03.162 [DEBUG] [Thread-25969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:23:03.162 [DEBUG] [Thread-25969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:23:03.162 [DEBUG] [Thread-25969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:23:03.162 [DEBUG] [Thread-25969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:23:03.162 [DEBUG] [Thread-25969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:23:03.162 [DEBUG] [Thread-25969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:23:03.162 [DEBUG] [Thread-25969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:23:03.162 [DEBUG] [Thread-25969] [transport.py] [_log()] client lang: <none>
2026-04-15T21:23:03.162 [DEBUG] [Thread-25969] [transport.py] [_log()] server lang: <none>
2026-04-15T21:23:03.162 [DEBUG] [Thread-25969] [transport.py] [_log()] kex follows: False
2026-04-15T21:23:03.162 [DEBUG] [Thread-25969] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:23:03.162 [DEBUG] [Thread-25969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:23:03.163 [DEBUG] [Thread-25969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:23:03.163 [DEBUG] [Thread-25969] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:23:03.163 [DEBUG] [Thread-25969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:23:03.163 [DEBUG] [Thread-25969] [transport.py] [_log()] Compression: none
2026-04-15T21:23:03.163 [DEBUG] [Thread-25969] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:23:03.224 [DEBUG] [Thread-25969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:23:03.224 [DEBUG] [Thread-25969] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:23:03.225 [DEBUG] [Thread-25969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:23:03.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:23:03.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:23:03.281 [DEBUG] [Thread-25969] [transport.py] [_log()] userauth is OK
2026-04-15T21:23:03.281 [DEBUG] [Thread-25969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:23:03.281 [DEBUG] [Thread-25969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:23:03.281 [DEBUG] [Thread-25969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:23:03.281 [DEBUG] [Thread-25969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:23:03.308 [INFO] [Thread-25969] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:23:03.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:23:03.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:23:04.139 [DEBUG] [Thread-25969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:23:04.140 [DEBUG] [Thread-25969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:23:04.187 [DEBUG] [Thread-25969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:23:04.187 [DEBUG] [Thread-25969] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:23:04.196 [DEBUG] [Thread-25969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:23:04.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:23:04.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')
2026-04-15T21:23:04.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
2026-04-15T21:23:04.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:23:04.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:23:04.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:23:04.231 [DEBUG] [Thread-25969] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:23:07.435 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:09.491 [DEBUG] [Thread-25971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:12.816 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:16.455 [DEBUG] [Thread-25972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:18.202 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:23.585 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:24.533 [DEBUG] [Thread-25973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:29.179 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:34.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:23:34.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:23:34.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
2026-04-15T21:23:34.549 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:35.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 23, 4), 4.46879, 73.6748, 0.0, 1.51884, 9.77565, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:23:35.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:23:04
2026-04-15T21:23:35.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:23:36.447 [DEBUG] [Thread-25974] [transport.py] [_log()] starting thread (client mode): 0xf13ca2c0
2026-04-15T21:23:36.447 [DEBUG] [Thread-25974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:23:36.467 [DEBUG] [Thread-25974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:23:36.467 [INFO] [Thread-25974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:23:36.470 [DEBUG] [Thread-25974] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:23:36.470 [DEBUG] [Thread-25974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:23:36.470 [DEBUG] [Thread-25974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:23:36.470 [DEBUG] [Thread-25974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:23:36.471 [DEBUG] [Thread-25974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:23:36.471 [DEBUG] [Thread-25974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:23:36.471 [DEBUG] [Thread-25974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:23:36.471 [DEBUG] [Thread-25974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:23:36.471 [DEBUG] [Thread-25974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:23:36.471 [DEBUG] [Thread-25974] [transport.py] [_log()] client lang: <none>
2026-04-15T21:23:36.471 [DEBUG] [Thread-25974] [transport.py] [_log()] server lang: <none>
2026-04-15T21:23:36.471 [DEBUG] [Thread-25974] [transport.py] [_log()] kex follows: False
2026-04-15T21:23:36.471 [DEBUG] [Thread-25974] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:23:36.471 [DEBUG] [Thread-25974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:23:36.471 [DEBUG] [Thread-25974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:23:36.471 [DEBUG] [Thread-25974] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:23:36.471 [DEBUG] [Thread-25974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:23:36.471 [DEBUG] [Thread-25974] [transport.py] [_log()] Compression: none
2026-04-15T21:23:36.471 [DEBUG] [Thread-25974] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:23:36.488 [DEBUG] [Thread-25974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:23:36.488 [DEBUG] [Thread-25974] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:23:36.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:23:36.489 [DEBUG] [Thread-25974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:23:36.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:23:36.489 [DEBUG] [Thread-25974] [transport.py] [_log()] userauth is OK
2026-04-15T21:23:36.489 [DEBUG] [Thread-25974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:23:36.490 [DEBUG] [Thread-25974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:23:36.490 [DEBUG] [Thread-25974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:23:36.490 [DEBUG] [Thread-25974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:23:36.504 [INFO] [Thread-25974] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:23:36.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:23:37.278 [DEBUG] [Thread-25974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:23:37.278 [DEBUG] [Thread-25974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:23:37.279 [DEBUG] [Thread-25974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:23:37.319 [DEBUG] [Thread-25974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:23:37.319 [DEBUG] [Thread-25974] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:23:37.321 [DEBUG] [Thread-25974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:23:37.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:23:37.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:23:37.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:23:37.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:23:37.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:23:37.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:23:37.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:23:37.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:23:37.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:23:37.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.807770 -999.00  +10.10   0.72     77   +6.20 1 1 1 1 1     0    0 4.27 26.45 ZNESW 1.5 0.7 173.2 1.7 10.3 -24.5 10.2 -23.0 9.9 -21.1 10.2 -23.2
2026-04-15T21:23:37.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:23:37.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:23:37.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.807770
2026-04-15T21:23:37.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:23:37.345 [DEBUG] [Thread-25974] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:23:37.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:23:37.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:23:37.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:23:37.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:23:37.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:23:04', tmtdew=4.46879, humidity=73.6748, cloud=0.0, wind=1.51884, temperature=9.77565, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:23:11.328', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.003750000000000142, -0.09274999999999878, -0.04750000000000121, -0.07450000000000045, -0.029249999999999332, -0.005000000000000782, 0.005250000000000199, -0.002500000000001279, -0.019999999999999574, -0.021750000000000824, -0.028499999999999304, 0.02850000000000108, -0.02775000000000105, 0.010999999999999233, -0.02000000000000135, 0.027749999999999275, -0.02999999999999936, 0.009999999999999787, -0.0017500000000012506, 0.04899999999999949, 0.04124999999999801, -0.005250000000000199, 0.03775000000000084, 0.058999999999999275, -0.028499999999999304, -0.005250000000000199, -0.005000000000000782, 0.016500000000000625, 0.010000000000001563, 0.08300000000000018, -0.003999999999997783, -0.007250000000000867], zp_timestamp='2026-04-15T19:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:23:37.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:23:37.616 [DEBUG] [Thread-25977] [transport.py] [_log()] starting thread (client mode): 0xee907010
2026-04-15T21:23:37.616 [DEBUG] [Thread-25977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:23:37.634 [DEBUG] [Thread-25977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:23:37.634 [INFO] [Thread-25977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:23:37.642 [DEBUG] [Thread-25977] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:23:37.642 [DEBUG] [Thread-25977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:23:37.642 [DEBUG] [Thread-25977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:23:37.643 [DEBUG] [Thread-25977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:23:37.643 [DEBUG] [Thread-25977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:23:37.643 [DEBUG] [Thread-25977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:23:37.643 [DEBUG] [Thread-25977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:23:37.643 [DEBUG] [Thread-25977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:23:37.643 [DEBUG] [Thread-25977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:23:37.643 [DEBUG] [Thread-25977] [transport.py] [_log()] client lang: <none>
2026-04-15T21:23:37.643 [DEBUG] [Thread-25977] [transport.py] [_log()] server lang: <none>
2026-04-15T21:23:37.643 [DEBUG] [Thread-25977] [transport.py] [_log()] kex follows: False
2026-04-15T21:23:37.643 [DEBUG] [Thread-25977] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:23:37.643 [DEBUG] [Thread-25977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:23:37.643 [DEBUG] [Thread-25977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:23:37.644 [DEBUG] [Thread-25977] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:23:37.644 [DEBUG] [Thread-25977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:23:37.644 [DEBUG] [Thread-25977] [transport.py] [_log()] Compression: none
2026-04-15T21:23:37.644 [DEBUG] [Thread-25977] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:23:37.698 [DEBUG] [Thread-25977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:23:37.698 [DEBUG] [Thread-25977] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:23:37.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:23:37.699 [DEBUG] [Thread-25977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:23:37.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:23:37.755 [DEBUG] [Thread-25977] [transport.py] [_log()] userauth is OK
2026-04-15T21:23:37.755 [DEBUG] [Thread-25977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:23:37.755 [DEBUG] [Thread-25977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:23:37.755 [DEBUG] [Thread-25977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:23:37.755 [DEBUG] [Thread-25977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:23:37.781 [INFO] [Thread-25977] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:23:37.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:23:37.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:23:38.608 [DEBUG] [Thread-25977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:23:38.608 [DEBUG] [Thread-25977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:23:38.656 [DEBUG] [Thread-25977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:23:38.656 [DEBUG] [Thread-25977] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:23:38.665 [DEBUG] [Thread-25977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:23:38.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:23:38.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')
2026-04-15T21:23:38.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
2026-04-15T21:23:38.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:23:38.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:23:38.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:23:38.700 [DEBUG] [Thread-25977] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:23:39.564 [DEBUG] [Thread-25979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:40.184 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:45.565 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:47.759 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:47.760 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:51.088 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:54.610 [DEBUG] [Thread-25980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:23:56.595 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:24:08.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:24:08.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:24:08.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
2026-04-15T21:24:09.638 [DEBUG] [Thread-25981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:24:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 23, 39), 4.34611, 74.3171, 0.0, 2.86128, 9.91819, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:24:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:23:39
2026-04-15T21:24:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:24:10.831 [DEBUG] [Thread-25982] [transport.py] [_log()] starting thread (client mode): 0xee9043d0
2026-04-15T21:24:10.832 [DEBUG] [Thread-25982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:24:10.852 [DEBUG] [Thread-25982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:24:10.852 [INFO] [Thread-25982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:24:10.856 [DEBUG] [Thread-25982] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:24:10.856 [DEBUG] [Thread-25982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:24:10.856 [DEBUG] [Thread-25982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:24:10.856 [DEBUG] [Thread-25982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:24:10.856 [DEBUG] [Thread-25982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:24:10.856 [DEBUG] [Thread-25982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:24:10.856 [DEBUG] [Thread-25982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:24:10.856 [DEBUG] [Thread-25982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:24:10.856 [DEBUG] [Thread-25982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:24:10.856 [DEBUG] [Thread-25982] [transport.py] [_log()] client lang: <none>
2026-04-15T21:24:10.857 [DEBUG] [Thread-25982] [transport.py] [_log()] server lang: <none>
2026-04-15T21:24:10.857 [DEBUG] [Thread-25982] [transport.py] [_log()] kex follows: False
2026-04-15T21:24:10.857 [DEBUG] [Thread-25982] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:24:10.857 [DEBUG] [Thread-25982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:24:10.857 [DEBUG] [Thread-25982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:24:10.857 [DEBUG] [Thread-25982] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:24:10.857 [DEBUG] [Thread-25982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:24:10.857 [DEBUG] [Thread-25982] [transport.py] [_log()] Compression: none
2026-04-15T21:24:10.857 [DEBUG] [Thread-25982] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:24:10.874 [DEBUG] [Thread-25982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:24:10.874 [DEBUG] [Thread-25982] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:24:10.874 [DEBUG] [Thread-25982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:24:10.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:24:10.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:24:10.876 [DEBUG] [Thread-25982] [transport.py] [_log()] userauth is OK
2026-04-15T21:24:10.876 [DEBUG] [Thread-25982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:24:10.876 [DEBUG] [Thread-25982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:24:10.876 [DEBUG] [Thread-25982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:24:10.876 [DEBUG] [Thread-25982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:24:10.893 [INFO] [Thread-25982] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:24:10.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:24:11.694 [DEBUG] [Thread-25982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:24:11.695 [DEBUG] [Thread-25982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:24:11.695 [DEBUG] [Thread-25982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:24:11.735 [DEBUG] [Thread-25982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:24:11.735 [DEBUG] [Thread-25982] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:24:11.738 [DEBUG] [Thread-25982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:24:11.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:24:11.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:24:11.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:24:11.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:24:11.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:24:11.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:24:11.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:24:11.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:24:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:24:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.808117 -999.00  +10.10   1.53     77   +6.20 1 1 1 1 1     0    0 4.34 23.41 ZNESW 1.8 1.5 5.8 3.1 10.3 -24.3 10.2 -23.0 9.9 -21.2 10.2 -23.1
2026-04-15T21:24:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:24:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:24:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.808117
2026-04-15T21:24:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:24:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:24:11.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:24:11.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:24:11.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:24:11.763 [DEBUG] [Thread-25982] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:24:11.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:23:39', tmtdew=4.34611, humidity=74.3171, cloud=0.0, wind=2.86128, temperature=9.91819, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:23:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.003750000000000142, -0.09274999999999878, -0.04750000000000121, -0.07450000000000045, -0.029249999999999332, -0.005000000000000782, 0.005250000000000199, -0.002500000000001279, -0.019999999999999574, -0.021750000000000824, -0.028499999999999304, 0.02850000000000108, -0.02775000000000105, 0.010999999999999233, -0.02000000000000135, 0.027749999999999275, -0.02999999999999936, 0.009999999999999787, -0.0017500000000012506, 0.04899999999999949, 0.04124999999999801, -0.005250000000000199, 0.03775000000000084, 0.058999999999999275, -0.028499999999999304, -0.005250000000000199, -0.005000000000000782, 0.016500000000000625, 0.010000000000001563, 0.08300000000000018, -0.003999999999997783, -0.007250000000000867], zp_timestamp='2026-04-15T19:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:24:12.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:24:12.019 [DEBUG] [Thread-25985] [transport.py] [_log()] starting thread (client mode): 0xf1353400
2026-04-15T21:24:12.019 [DEBUG] [Thread-25985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:24:12.033 [DEBUG] [Thread-25985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:24:12.033 [INFO] [Thread-25985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:24:12.041 [DEBUG] [Thread-25985] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:24:12.041 [DEBUG] [Thread-25985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:24:12.041 [DEBUG] [Thread-25985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:24:12.041 [DEBUG] [Thread-25985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:24:12.041 [DEBUG] [Thread-25985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:24:12.041 [DEBUG] [Thread-25985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:24:12.041 [DEBUG] [Thread-25985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:24:12.041 [DEBUG] [Thread-25985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:24:12.041 [DEBUG] [Thread-25985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:24:12.041 [DEBUG] [Thread-25985] [transport.py] [_log()] client lang: <none>
2026-04-15T21:24:12.042 [DEBUG] [Thread-25985] [transport.py] [_log()] server lang: <none>
2026-04-15T21:24:12.042 [DEBUG] [Thread-25985] [transport.py] [_log()] kex follows: False
2026-04-15T21:24:12.042 [DEBUG] [Thread-25985] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:24:12.042 [DEBUG] [Thread-25985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:24:12.042 [DEBUG] [Thread-25985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:24:12.042 [DEBUG] [Thread-25985] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:24:12.042 [DEBUG] [Thread-25985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:24:12.042 [DEBUG] [Thread-25985] [transport.py] [_log()] Compression: none
2026-04-15T21:24:12.042 [DEBUG] [Thread-25985] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:24:12.096 [DEBUG] [Thread-25985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:24:12.096 [DEBUG] [Thread-25985] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:24:12.097 [DEBUG] [Thread-25985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:24:12.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:24:12.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:24:12.158 [DEBUG] [Thread-25985] [transport.py] [_log()] userauth is OK
2026-04-15T21:24:12.158 [DEBUG] [Thread-25985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:24:12.159 [DEBUG] [Thread-25985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:24:12.159 [DEBUG] [Thread-25985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:24:12.159 [DEBUG] [Thread-25985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:24:12.186 [INFO] [Thread-25985] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:24:12.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:24:12.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:24:13.066 [DEBUG] [Thread-25985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:24:13.067 [DEBUG] [Thread-25985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:24:13.115 [DEBUG] [Thread-25985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:24:13.115 [DEBUG] [Thread-25985] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:24:13.124 [DEBUG] [Thread-25985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:24:13.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:24:13.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')
2026-04-15T21:24:13.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
2026-04-15T21:24:13.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:24:13.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:24:13.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:24:13.158 [DEBUG] [Thread-25985] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:24:16.607 [DEBUG] [Thread-25987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:24:24.666 [DEBUG] [Thread-25988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:24:39.708 [DEBUG] [Thread-25989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:24:43.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:24:43.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:24:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:24:44.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 24, 15), 4.53483, 73.0922, 0.0, 3.44232, 9.87589, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:24:44.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:24:15
2026-04-15T21:24:44.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:24:45.335 [DEBUG] [Thread-25990] [transport.py] [_log()] starting thread (client mode): 0xf13e2a70
2026-04-15T21:24:45.336 [DEBUG] [Thread-25990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:24:45.355 [DEBUG] [Thread-25990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:24:45.355 [INFO] [Thread-25990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:24:45.358 [DEBUG] [Thread-25990] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:24:45.358 [DEBUG] [Thread-25990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:24:45.359 [DEBUG] [Thread-25990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:24:45.359 [DEBUG] [Thread-25990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:24:45.359 [DEBUG] [Thread-25990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:24:45.359 [DEBUG] [Thread-25990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:24:45.359 [DEBUG] [Thread-25990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:24:45.359 [DEBUG] [Thread-25990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:24:45.359 [DEBUG] [Thread-25990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:24:45.359 [DEBUG] [Thread-25990] [transport.py] [_log()] client lang: <none>
2026-04-15T21:24:45.359 [DEBUG] [Thread-25990] [transport.py] [_log()] server lang: <none>
2026-04-15T21:24:45.359 [DEBUG] [Thread-25990] [transport.py] [_log()] kex follows: False
2026-04-15T21:24:45.359 [DEBUG] [Thread-25990] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:24:45.359 [DEBUG] [Thread-25990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:24:45.360 [DEBUG] [Thread-25990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:24:45.360 [DEBUG] [Thread-25990] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:24:45.360 [DEBUG] [Thread-25990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:24:45.360 [DEBUG] [Thread-25990] [transport.py] [_log()] Compression: none
2026-04-15T21:24:45.360 [DEBUG] [Thread-25990] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:24:45.377 [DEBUG] [Thread-25990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:24:45.377 [DEBUG] [Thread-25990] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:24:45.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:24:45.378 [DEBUG] [Thread-25990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:24:45.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:24:45.421 [DEBUG] [Thread-25990] [transport.py] [_log()] userauth is OK
2026-04-15T21:24:45.421 [DEBUG] [Thread-25990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:24:45.421 [DEBUG] [Thread-25990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:24:45.422 [DEBUG] [Thread-25990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:24:45.422 [DEBUG] [Thread-25990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:24:45.447 [INFO] [Thread-25990] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:24:45.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:24:46.235 [DEBUG] [Thread-25990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:24:46.235 [DEBUG] [Thread-25990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:24:46.235 [DEBUG] [Thread-25990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:24:46.276 [DEBUG] [Thread-25990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:24:46.276 [DEBUG] [Thread-25990] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:24:46.278 [DEBUG] [Thread-25990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:24:46.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:24:46.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:24:46.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:24:46.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:24:46.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:24:46.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:24:46.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:24:46.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:24:46.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:24:46.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.808464 -999.00  +10.10   2.61     77   +6.30 1 1 1 1 1     0    0 4.37 25.70 ZNESW 2.2 2.6 336.8 2.8 10.3 -24.4 10.2 -23.3 9.9 -21.3 10.2 -23.2
2026-04-15T21:24:46.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:24:46.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:24:46.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.808464
2026-04-15T21:24:46.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:24:46.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:24:46.297 [DEBUG] [Thread-25990] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:24:46.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:24:46.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:24:46.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:24:46.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:24:15', tmtdew=4.53483, humidity=73.0922, cloud=0.0, wind=3.44232, temperature=9.87589, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:24:11.290', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.003750000000000142, -0.09274999999999878, -0.04750000000000121, -0.07450000000000045, -0.029249999999999332, -0.005000000000000782, 0.005250000000000199, -0.002500000000001279, -0.019999999999999574, -0.021750000000000824, -0.028499999999999304, 0.02850000000000108, -0.02775000000000105, 0.010999999999999233, -0.02000000000000135, 0.027749999999999275, -0.02999999999999936, 0.009999999999999787, -0.0017500000000012506, 0.04899999999999949, 0.04124999999999801, -0.005250000000000199, 0.03775000000000084, 0.058999999999999275, -0.028499999999999304, -0.005250000000000199, -0.005000000000000782, 0.016500000000000625, 0.010000000000001563, 0.08300000000000018, -0.003999999999997783, -0.007250000000000867], zp_timestamp='2026-04-15T19:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:24:46.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:24:46.555 [DEBUG] [Thread-25993] [transport.py] [_log()] starting thread (client mode): 0xf13e1ba0
2026-04-15T21:24:46.555 [DEBUG] [Thread-25993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:24:46.573 [DEBUG] [Thread-25993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:24:46.574 [INFO] [Thread-25993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:24:46.581 [DEBUG] [Thread-25993] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:24:46.581 [DEBUG] [Thread-25993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:24:46.581 [DEBUG] [Thread-25993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:24:46.581 [DEBUG] [Thread-25993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:24:46.581 [DEBUG] [Thread-25993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:24:46.581 [DEBUG] [Thread-25993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:24:46.581 [DEBUG] [Thread-25993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:24:46.582 [DEBUG] [Thread-25993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:24:46.582 [DEBUG] [Thread-25993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:24:46.582 [DEBUG] [Thread-25993] [transport.py] [_log()] client lang: <none>
2026-04-15T21:24:46.582 [DEBUG] [Thread-25993] [transport.py] [_log()] server lang: <none>
2026-04-15T21:24:46.582 [DEBUG] [Thread-25993] [transport.py] [_log()] kex follows: False
2026-04-15T21:24:46.582 [DEBUG] [Thread-25993] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:24:46.582 [DEBUG] [Thread-25993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:24:46.582 [DEBUG] [Thread-25993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:24:46.582 [DEBUG] [Thread-25993] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:24:46.582 [DEBUG] [Thread-25993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:24:46.582 [DEBUG] [Thread-25993] [transport.py] [_log()] Compression: none
2026-04-15T21:24:46.583 [DEBUG] [Thread-25993] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:24:46.638 [DEBUG] [Thread-25993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:24:46.639 [DEBUG] [Thread-25993] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:24:46.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:24:46.639 [DEBUG] [Thread-25993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:24:46.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:24:46.695 [DEBUG] [Thread-25993] [transport.py] [_log()] userauth is OK
2026-04-15T21:24:46.695 [DEBUG] [Thread-25993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:24:46.695 [DEBUG] [Thread-25993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:24:46.696 [DEBUG] [Thread-25993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:24:46.696 [DEBUG] [Thread-25993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:24:46.721 [INFO] [Thread-25993] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:24:46.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:24:46.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:24:47.534 [DEBUG] [Thread-25993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:24:47.535 [DEBUG] [Thread-25993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:24:47.582 [DEBUG] [Thread-25993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:24:47.582 [DEBUG] [Thread-25993] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:24:47.593 [DEBUG] [Thread-25993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:24:47.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:24:47.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')
2026-04-15T21:24:47.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
2026-04-15T21:24:47.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:24:47.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:24:47.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:24:47.628 [DEBUG] [Thread-25993] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:24:47.961 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:24:47.962 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:24:54.738 [DEBUG] [Thread-25995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:25:09.782 [DEBUG] [Thread-25996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:25:16.752 [DEBUG] [Thread-25997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:25:17.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:25:17.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:25:17.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
2026-04-15T21:25:18.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 24, 50), 4.37834, 74.1512, 0.0, 5.54256, 9.91813, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:25:18.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:24:50
2026-04-15T21:25:19.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:25:19.802 [DEBUG] [Thread-25998] [transport.py] [_log()] starting thread (client mode): 0xf1351420
2026-04-15T21:25:19.802 [DEBUG] [Thread-25998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:25:19.822 [DEBUG] [Thread-25998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:25:19.822 [INFO] [Thread-25998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:25:19.825 [DEBUG] [Thread-25998] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:25:19.825 [DEBUG] [Thread-25998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:25:19.825 [DEBUG] [Thread-25998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:25:19.825 [DEBUG] [Thread-25998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:25:19.825 [DEBUG] [Thread-25998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:25:19.826 [DEBUG] [Thread-25998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:25:19.826 [DEBUG] [Thread-25998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:25:19.826 [DEBUG] [Thread-25998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:25:19.826 [DEBUG] [Thread-25998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:25:19.826 [DEBUG] [Thread-25998] [transport.py] [_log()] client lang: <none>
2026-04-15T21:25:19.826 [DEBUG] [Thread-25998] [transport.py] [_log()] server lang: <none>
2026-04-15T21:25:19.826 [DEBUG] [Thread-25998] [transport.py] [_log()] kex follows: False
2026-04-15T21:25:19.826 [DEBUG] [Thread-25998] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:25:19.826 [DEBUG] [Thread-25998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:25:19.826 [DEBUG] [Thread-25998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:25:19.826 [DEBUG] [Thread-25998] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:25:19.826 [DEBUG] [Thread-25998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:25:19.826 [DEBUG] [Thread-25998] [transport.py] [_log()] Compression: none
2026-04-15T21:25:19.826 [DEBUG] [Thread-25998] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:25:19.842 [DEBUG] [Thread-25998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:25:19.842 [DEBUG] [Thread-25998] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:25:19.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:25:19.843 [DEBUG] [Thread-25998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:25:19.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:25:19.843 [DEBUG] [Thread-25998] [transport.py] [_log()] userauth is OK
2026-04-15T21:25:19.843 [DEBUG] [Thread-25998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:25:19.843 [DEBUG] [Thread-25998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:25:19.844 [DEBUG] [Thread-25998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:25:19.844 [DEBUG] [Thread-25998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:25:19.857 [INFO] [Thread-25998] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:25:19.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:25:20.471 [DEBUG] [Thread-25998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:25:20.471 [DEBUG] [Thread-25998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:25:20.472 [DEBUG] [Thread-25998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:25:20.512 [DEBUG] [Thread-25998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:25:20.512 [DEBUG] [Thread-25998] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:25:20.514 [DEBUG] [Thread-25998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:25:20.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:25:20.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:25:20.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:25:20.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:25:20.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:25:20.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:25:20.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:25:20.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:25:20.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:25:20.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.808811 -999.00  +10.10   1.71     77   +6.20 1 1 1 1 1     0    0 4.28 23.26 ZNESW 2.2 1.7 22.0 1.9 10.3 -24.4 10.2 -23.2 9.9 -21.1 10.2 -23.2
2026-04-15T21:25:20.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:25:20.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:25:20.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.808811
2026-04-15T21:25:20.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:25:20.532 [DEBUG] [Thread-25998] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:25:20.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:25:20.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:25:20.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:25:20.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:25:20.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:24:50', tmtdew=4.37834, humidity=74.1512, cloud=0.0, wind=5.54256, temperature=9.91813, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:24:41.270', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.003750000000000142, -0.09274999999999878, -0.04750000000000121, -0.07450000000000045, -0.029249999999999332, -0.005000000000000782, 0.005250000000000199, -0.002500000000001279, -0.019999999999999574, -0.021750000000000824, -0.028499999999999304, 0.02850000000000108, -0.02775000000000105, 0.010999999999999233, -0.02000000000000135, 0.027749999999999275, -0.02999999999999936, 0.009999999999999787, -0.0017500000000012506, 0.04899999999999949, 0.04124999999999801, -0.005250000000000199, 0.03775000000000084, 0.058999999999999275, -0.028499999999999304, -0.005250000000000199, -0.005000000000000782, 0.016500000000000625, 0.010000000000001563, 0.08300000000000018, -0.003999999999997783, -0.007250000000000867], zp_timestamp='2026-04-15T19:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:25:20.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:25:20.783 [DEBUG] [Thread-26001] [transport.py] [_log()] starting thread (client mode): 0xee907a00
2026-04-15T21:25:20.783 [DEBUG] [Thread-26001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:25:20.798 [DEBUG] [Thread-26001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:25:20.798 [INFO] [Thread-26001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:25:20.806 [DEBUG] [Thread-26001] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:25:20.806 [DEBUG] [Thread-26001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:25:20.806 [DEBUG] [Thread-26001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:25:20.806 [DEBUG] [Thread-26001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:25:20.806 [DEBUG] [Thread-26001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:25:20.806 [DEBUG] [Thread-26001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:25:20.806 [DEBUG] [Thread-26001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:25:20.806 [DEBUG] [Thread-26001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:25:20.806 [DEBUG] [Thread-26001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:25:20.806 [DEBUG] [Thread-26001] [transport.py] [_log()] client lang: <none>
2026-04-15T21:25:20.806 [DEBUG] [Thread-26001] [transport.py] [_log()] server lang: <none>
2026-04-15T21:25:20.806 [DEBUG] [Thread-26001] [transport.py] [_log()] kex follows: False
2026-04-15T21:25:20.807 [DEBUG] [Thread-26001] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:25:20.807 [DEBUG] [Thread-26001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:25:20.807 [DEBUG] [Thread-26001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:25:20.807 [DEBUG] [Thread-26001] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:25:20.807 [DEBUG] [Thread-26001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:25:20.807 [DEBUG] [Thread-26001] [transport.py] [_log()] Compression: none
2026-04-15T21:25:20.807 [DEBUG] [Thread-26001] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:25:20.865 [DEBUG] [Thread-26001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:25:20.865 [DEBUG] [Thread-26001] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:25:20.865 [DEBUG] [Thread-26001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:25:20.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:25:20.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:25:20.921 [DEBUG] [Thread-26001] [transport.py] [_log()] userauth is OK
2026-04-15T21:25:20.921 [DEBUG] [Thread-26001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:25:20.921 [DEBUG] [Thread-26001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:25:20.921 [DEBUG] [Thread-26001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:25:20.922 [DEBUG] [Thread-26001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:25:20.944 [INFO] [Thread-26001] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:25:20.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:25:20.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:25:21.747 [DEBUG] [Thread-26001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:25:21.747 [DEBUG] [Thread-26001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:25:21.795 [DEBUG] [Thread-26001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:25:21.795 [DEBUG] [Thread-26001] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:25:21.804 [DEBUG] [Thread-26001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:25:21.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:25:21.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')
2026-04-15T21:25:21.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
2026-04-15T21:25:21.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:25:21.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:25:21.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:25:21.840 [DEBUG] [Thread-26001] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:25:24.814 [DEBUG] [Thread-26003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:25:39.858 [DEBUG] [Thread-26004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:25:48.164 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:25:48.166 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:25:51.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:25:51.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:25:51.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
2026-04-15T21:25:53.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 25, 26), 4.59024, 73.0759, 0.0, 4.64184, 9.99246, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:25:53.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:25:26
2026-04-15T21:25:53.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:25:54.058 [DEBUG] [Thread-26005] [transport.py] [_log()] starting thread (client mode): 0xf13c9d20
2026-04-15T21:25:54.058 [DEBUG] [Thread-26005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:25:54.077 [DEBUG] [Thread-26005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:25:54.077 [INFO] [Thread-26005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:25:54.079 [DEBUG] [Thread-26005] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:25:54.079 [DEBUG] [Thread-26005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:25:54.079 [DEBUG] [Thread-26005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:25:54.079 [DEBUG] [Thread-26005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:25:54.079 [DEBUG] [Thread-26005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:25:54.079 [DEBUG] [Thread-26005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:25:54.079 [DEBUG] [Thread-26005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:25:54.079 [DEBUG] [Thread-26005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:25:54.079 [DEBUG] [Thread-26005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:25:54.079 [DEBUG] [Thread-26005] [transport.py] [_log()] client lang: <none>
2026-04-15T21:25:54.079 [DEBUG] [Thread-26005] [transport.py] [_log()] server lang: <none>
2026-04-15T21:25:54.080 [DEBUG] [Thread-26005] [transport.py] [_log()] kex follows: False
2026-04-15T21:25:54.080 [DEBUG] [Thread-26005] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:25:54.080 [DEBUG] [Thread-26005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:25:54.080 [DEBUG] [Thread-26005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:25:54.080 [DEBUG] [Thread-26005] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:25:54.080 [DEBUG] [Thread-26005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:25:54.080 [DEBUG] [Thread-26005] [transport.py] [_log()] Compression: none
2026-04-15T21:25:54.080 [DEBUG] [Thread-26005] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:25:54.088 [DEBUG] [Thread-26005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:25:54.088 [DEBUG] [Thread-26005] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:25:54.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:25:54.089 [DEBUG] [Thread-26005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:25:54.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:25:54.090 [DEBUG] [Thread-26005] [transport.py] [_log()] userauth is OK
2026-04-15T21:25:54.090 [DEBUG] [Thread-26005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:25:54.090 [DEBUG] [Thread-26005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:25:54.090 [DEBUG] [Thread-26005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:25:54.090 [DEBUG] [Thread-26005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:25:54.113 [INFO] [Thread-26005] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:25:54.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:25:54.695 [DEBUG] [Thread-26005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:25:54.695 [DEBUG] [Thread-26005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:25:54.696 [DEBUG] [Thread-26005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:25:54.737 [DEBUG] [Thread-26005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:25:54.737 [DEBUG] [Thread-26005] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:25:54.741 [DEBUG] [Thread-26005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:25:54.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:25:54.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:25:54.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:25:54.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:25:54.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:25:54.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:25:54.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:25:54.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:25:54.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:25:54.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.809506 -999.00  +10.20   2.51     77   +6.30 1 1 1 1 1     0    0 4.30 24.26 ZNESW 2.5 2.5 70.9 3.4 10.3 -24.3 10.2 -23.2 9.9 -21.0 10.2 -23.2
2026-04-15T21:25:54.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:25:54.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:25:54.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.809506
2026-04-15T21:25:54.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:25:54.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:25:54.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:25:54.767 [DEBUG] [Thread-26005] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:25:54.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:25:54.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:25:54.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:25:26', tmtdew=4.59024, humidity=73.0759, cloud=0.0, wind=4.64184, temperature=9.99246, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:25:41.318', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.003750000000000142, -0.09274999999999878, -0.04750000000000121, -0.07450000000000045, -0.029249999999999332, -0.005000000000000782, 0.005250000000000199, -0.002500000000001279, -0.019999999999999574, -0.021750000000000824, -0.028499999999999304, 0.02850000000000108, -0.02775000000000105, 0.010999999999999233, -0.02000000000000135, 0.027749999999999275, -0.02999999999999936, 0.009999999999999787, -0.0017500000000012506, 0.04899999999999949, 0.04124999999999801, -0.005250000000000199, 0.03775000000000084, 0.058999999999999275, -0.028499999999999304, -0.005250000000000199, -0.005000000000000782, 0.016500000000000625, 0.010000000000001563, 0.08300000000000018, -0.003999999999997783, -0.007250000000000867], zp_timestamp='2026-04-15T19:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:25:54.887 [DEBUG] [Thread-26008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:25:55.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:25:55.029 [DEBUG] [Thread-26009] [transport.py] [_log()] starting thread (client mode): 0xf1364ca0
2026-04-15T21:25:55.029 [DEBUG] [Thread-26009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:25:55.045 [DEBUG] [Thread-26009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:25:55.045 [INFO] [Thread-26009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:25:55.052 [DEBUG] [Thread-26009] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:25:55.052 [DEBUG] [Thread-26009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] client lang: <none>
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] server lang: <none>
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] kex follows: False
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] Compression: none
2026-04-15T21:25:55.053 [DEBUG] [Thread-26009] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:25:55.110 [DEBUG] [Thread-26009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:25:55.111 [DEBUG] [Thread-26009] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:25:55.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:25:55.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:25:55.112 [DEBUG] [Thread-26009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:25:55.166 [DEBUG] [Thread-26009] [transport.py] [_log()] userauth is OK
2026-04-15T21:25:55.167 [DEBUG] [Thread-26009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:25:55.167 [DEBUG] [Thread-26009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:25:55.167 [DEBUG] [Thread-26009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:25:55.167 [DEBUG] [Thread-26009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:25:55.184 [INFO] [Thread-26009] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:25:55.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:25:55.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:25:56.016 [DEBUG] [Thread-26009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:25:56.016 [DEBUG] [Thread-26009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:25:56.064 [DEBUG] [Thread-26009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:25:56.064 [DEBUG] [Thread-26009] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:25:56.073 [DEBUG] [Thread-26009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:25:56.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:25:56.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')
2026-04-15T21:25: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') -> 00000000
2026-04-15T21:25:56.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:25:56.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:25:56.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:25:56.107 [DEBUG] [Thread-26009] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:26:09.924 [DEBUG] [Thread-26011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:26:16.898 [DEBUG] [Thread-26012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:26:24.956 [DEBUG] [Thread-26013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:26:26.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:26:26.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:26:26.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
2026-04-15T21:26:27.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 26, 1), 4.60204, 73.0095, 0.0, 5.91192, 9.95928, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:26:27.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:26:01
2026-04-15T21:26:27.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:26:28.240 [DEBUG] [Thread-26014] [transport.py] [_log()] starting thread (client mode): 0xf1351900
2026-04-15T21:26:28.240 [DEBUG] [Thread-26014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:26:28.260 [DEBUG] [Thread-26014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:26:28.260 [INFO] [Thread-26014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:26:28.262 [DEBUG] [Thread-26014] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:26:28.262 [DEBUG] [Thread-26014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:26:28.262 [DEBUG] [Thread-26014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:26:28.262 [DEBUG] [Thread-26014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:26:28.262 [DEBUG] [Thread-26014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:26:28.262 [DEBUG] [Thread-26014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:26:28.262 [DEBUG] [Thread-26014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:26:28.262 [DEBUG] [Thread-26014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:26:28.262 [DEBUG] [Thread-26014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:26:28.263 [DEBUG] [Thread-26014] [transport.py] [_log()] client lang: <none>
2026-04-15T21:26:28.263 [DEBUG] [Thread-26014] [transport.py] [_log()] server lang: <none>
2026-04-15T21:26:28.263 [DEBUG] [Thread-26014] [transport.py] [_log()] kex follows: False
2026-04-15T21:26:28.263 [DEBUG] [Thread-26014] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:26:28.263 [DEBUG] [Thread-26014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:26:28.263 [DEBUG] [Thread-26014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:26:28.263 [DEBUG] [Thread-26014] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:26:28.263 [DEBUG] [Thread-26014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:26:28.263 [DEBUG] [Thread-26014] [transport.py] [_log()] Compression: none
2026-04-15T21:26:28.263 [DEBUG] [Thread-26014] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:26:28.282 [DEBUG] [Thread-26014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:26:28.283 [DEBUG] [Thread-26014] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:26:28.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:26:28.283 [DEBUG] [Thread-26014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:26:28.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:26:28.284 [DEBUG] [Thread-26014] [transport.py] [_log()] userauth is OK
2026-04-15T21:26:28.284 [DEBUG] [Thread-26014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:26:28.284 [DEBUG] [Thread-26014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:26:28.284 [DEBUG] [Thread-26014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:26:28.285 [DEBUG] [Thread-26014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:26:28.309 [INFO] [Thread-26014] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:26:28.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:26:28.950 [DEBUG] [Thread-26014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:26:28.951 [DEBUG] [Thread-26014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:26:28.951 [DEBUG] [Thread-26014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:26:28.991 [DEBUG] [Thread-26014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:26:28.991 [DEBUG] [Thread-26014] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:26:28.994 [DEBUG] [Thread-26014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:26:29.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:26:29.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:26:29.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:26:29.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:26:29.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:26:29.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:26:29.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:26:29.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:26:29.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:26:29.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.809853 -999.00  +10.20   2.40     77   +6.40 1 1 1 1 1     0    0 4.44 27.16 ZNESW 2.7 2.4 58.4 3.0 10.3 -24.5 10.2 -23.1 10.0 -21.1 10.2 -23.2
2026-04-15T21:26:29.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:26:29.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:26:29.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.809853
2026-04-15T21:26:29.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:26:29.020 [DEBUG] [Thread-26014] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:26:29.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:26:29.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:26:29.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:26:29.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:26:29.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:26:01', tmtdew=4.60204, humidity=73.0095, cloud=0.0, wind=5.91192, temperature=9.95928, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:26:11.299', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03575000000000017, 0.0182500000000001, -0.07474999999999987, -0.057500000000000995, -0.05900000000000105, -0.03774999999999906, -0.021000000000000796, 0.01425000000000054, 0.011499999999999844, -0.031000000000000583, -0.035250000000001336, -0.025000000000000355, 0.026499999999998636, 0.01574999999999882, 0.032999999999999474, -0.0010000000000012221, 0.04974999999999952, -0.013500000000000512, -0.0129999999999999, 0.018749999999998934, 0.0365000000000002, 0.03324999999999889, 0.0032500000000013074, 0.0467499999999994, 0.041499999999999204, -0.0365000000000002, -0.02674999999999983, 0.005499999999999616, 0.013999999999999346, 0.006000000000000227, 0.04600000000000115, 0.04800000000000004, -0.005250000000000199], zp_timestamp='2026-04-15T19:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:26:29.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:26:29.285 [DEBUG] [Thread-26017] [transport.py] [_log()] starting thread (client mode): 0xf1353a90
2026-04-15T21:26:29.285 [DEBUG] [Thread-26017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:26:29.303 [DEBUG] [Thread-26017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:26:29.303 [INFO] [Thread-26017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:26:29.311 [DEBUG] [Thread-26017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:26:29.311 [DEBUG] [Thread-26017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:26:29.311 [DEBUG] [Thread-26017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:26:29.311 [DEBUG] [Thread-26017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:26:29.311 [DEBUG] [Thread-26017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:26:29.311 [DEBUG] [Thread-26017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:26:29.311 [DEBUG] [Thread-26017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:26:29.312 [DEBUG] [Thread-26017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:26:29.312 [DEBUG] [Thread-26017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:26:29.312 [DEBUG] [Thread-26017] [transport.py] [_log()] client lang: <none>
2026-04-15T21:26:29.312 [DEBUG] [Thread-26017] [transport.py] [_log()] server lang: <none>
2026-04-15T21:26:29.312 [DEBUG] [Thread-26017] [transport.py] [_log()] kex follows: False
2026-04-15T21:26:29.312 [DEBUG] [Thread-26017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:26:29.312 [DEBUG] [Thread-26017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:26:29.312 [DEBUG] [Thread-26017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:26:29.312 [DEBUG] [Thread-26017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:26:29.312 [DEBUG] [Thread-26017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:26:29.312 [DEBUG] [Thread-26017] [transport.py] [_log()] Compression: none
2026-04-15T21:26:29.312 [DEBUG] [Thread-26017] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:26:29.369 [DEBUG] [Thread-26017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:26:29.369 [DEBUG] [Thread-26017] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:26:29.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:26:29.370 [DEBUG] [Thread-26017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:26:29.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:26:29.429 [DEBUG] [Thread-26017] [transport.py] [_log()] userauth is OK
2026-04-15T21:26:29.429 [DEBUG] [Thread-26017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:26:29.429 [DEBUG] [Thread-26017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:26:29.429 [DEBUG] [Thread-26017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:26:29.429 [DEBUG] [Thread-26017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:26:29.457 [INFO] [Thread-26017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:26:29.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:26:29.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:26:30.289 [DEBUG] [Thread-26017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:26:30.289 [DEBUG] [Thread-26017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:26:30.337 [DEBUG] [Thread-26017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:26:30.337 [DEBUG] [Thread-26017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:26:30.346 [DEBUG] [Thread-26017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:26:30.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:26:30.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')
2026-04-15T21:26:30.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
2026-04-15T21:26:30.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:26:30.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:26:30.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:26:30.381 [DEBUG] [Thread-26017] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:26:39.987 [DEBUG] [Thread-26019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:26:48.367 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:26:48.368 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:26:55.032 [DEBUG] [Thread-26020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:27:00.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:27:00.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:27:00.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
2026-04-15T21:27:01.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 26, 37), 4.39753, 74.0526, 0.0, 8.18856, 9.91892, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:27:01.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:26:37
2026-04-15T21:27:02.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:27:02.520 [DEBUG] [Thread-26021] [transport.py] [_log()] starting thread (client mode): 0xf13e3a60
2026-04-15T21:27:02.520 [DEBUG] [Thread-26021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:27:02.541 [DEBUG] [Thread-26021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:27:02.542 [INFO] [Thread-26021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:27:02.545 [DEBUG] [Thread-26021] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:27:02.545 [DEBUG] [Thread-26021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:27:02.545 [DEBUG] [Thread-26021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:27:02.545 [DEBUG] [Thread-26021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:27:02.545 [DEBUG] [Thread-26021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:27:02.545 [DEBUG] [Thread-26021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:27:02.546 [DEBUG] [Thread-26021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:27:02.546 [DEBUG] [Thread-26021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:27:02.546 [DEBUG] [Thread-26021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:27:02.546 [DEBUG] [Thread-26021] [transport.py] [_log()] client lang: <none>
2026-04-15T21:27:02.546 [DEBUG] [Thread-26021] [transport.py] [_log()] server lang: <none>
2026-04-15T21:27:02.546 [DEBUG] [Thread-26021] [transport.py] [_log()] kex follows: False
2026-04-15T21:27:02.546 [DEBUG] [Thread-26021] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:27:02.546 [DEBUG] [Thread-26021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:27:02.546 [DEBUG] [Thread-26021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:27:02.546 [DEBUG] [Thread-26021] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:27:02.547 [DEBUG] [Thread-26021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:27:02.547 [DEBUG] [Thread-26021] [transport.py] [_log()] Compression: none
2026-04-15T21:27:02.547 [DEBUG] [Thread-26021] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:27:02.563 [DEBUG] [Thread-26021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:27:02.563 [DEBUG] [Thread-26021] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:27:02.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:27:02.564 [DEBUG] [Thread-26021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:27:02.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:27:02.564 [DEBUG] [Thread-26021] [transport.py] [_log()] userauth is OK
2026-04-15T21:27:02.565 [DEBUG] [Thread-26021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:27:02.565 [DEBUG] [Thread-26021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:27:02.565 [DEBUG] [Thread-26021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:27:02.565 [DEBUG] [Thread-26021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:27:02.589 [INFO] [Thread-26021] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:27:02.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:27:03.209 [DEBUG] [Thread-26021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:27:03.209 [DEBUG] [Thread-26021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:27:03.210 [DEBUG] [Thread-26021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:27:03.250 [DEBUG] [Thread-26021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:27:03.250 [DEBUG] [Thread-26021] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:27:03.253 [DEBUG] [Thread-26021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:27:03.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:27:03.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:27:03.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:27:03.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:27:03.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:27:03.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:27:03.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:27:03.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:27:03.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:27:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.810200 -999.00  +10.20   2.41     76   +6.30 1 1 1 1 1     0    0 4.51 30.15 ZNESW 2.3 2.4 76.6 3.1 10.3 -24.3 10.2 -23.1 9.9 -21.0 10.2 -23.2
2026-04-15T21:27:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:27:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:27:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.810200
2026-04-15T21:27:03.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:27:03.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:27:03.275 [DEBUG] [Thread-26021] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:27:03.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:27:03.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:27:03.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:27:03.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:26:37', tmtdew=4.39753, humidity=74.0526, cloud=0.0, wind=8.18856, temperature=9.91892, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:26:41.280', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03575000000000017, 0.0182500000000001, -0.07474999999999987, -0.057500000000000995, -0.05900000000000105, -0.03774999999999906, -0.021000000000000796, 0.01425000000000054, 0.011499999999999844, -0.031000000000000583, -0.035250000000001336, -0.025000000000000355, 0.026499999999998636, 0.01574999999999882, 0.032999999999999474, -0.0010000000000012221, 0.04974999999999952, -0.013500000000000512, -0.0129999999999999, 0.018749999999998934, 0.0365000000000002, 0.03324999999999889, 0.0032500000000013074, 0.0467499999999994, 0.041499999999999204, -0.0365000000000002, -0.02674999999999983, 0.005499999999999616, 0.013999999999999346, 0.006000000000000227, 0.04600000000000115, 0.04800000000000004, -0.005250000000000199], zp_timestamp='2026-04-15T19:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:27:03.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:27:03.532 [DEBUG] [Thread-26024] [transport.py] [_log()] starting thread (client mode): 0xee904c10
2026-04-15T21:27:03.532 [DEBUG] [Thread-26024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:27:03.551 [DEBUG] [Thread-26024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:27:03.551 [INFO] [Thread-26024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:27:03.559 [DEBUG] [Thread-26024] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:27:03.559 [DEBUG] [Thread-26024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:27:03.559 [DEBUG] [Thread-26024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:27:03.559 [DEBUG] [Thread-26024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:27:03.559 [DEBUG] [Thread-26024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:27:03.559 [DEBUG] [Thread-26024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:27:03.559 [DEBUG] [Thread-26024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:27:03.559 [DEBUG] [Thread-26024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:27:03.559 [DEBUG] [Thread-26024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:27:03.559 [DEBUG] [Thread-26024] [transport.py] [_log()] client lang: <none>
2026-04-15T21:27:03.559 [DEBUG] [Thread-26024] [transport.py] [_log()] server lang: <none>
2026-04-15T21:27:03.559 [DEBUG] [Thread-26024] [transport.py] [_log()] kex follows: False
2026-04-15T21:27:03.560 [DEBUG] [Thread-26024] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:27:03.560 [DEBUG] [Thread-26024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:27:03.560 [DEBUG] [Thread-26024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:27:03.560 [DEBUG] [Thread-26024] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:27:03.560 [DEBUG] [Thread-26024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:27:03.560 [DEBUG] [Thread-26024] [transport.py] [_log()] Compression: none
2026-04-15T21:27:03.560 [DEBUG] [Thread-26024] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:27:03.617 [DEBUG] [Thread-26024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:27:03.618 [DEBUG] [Thread-26024] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:27:03.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:27:03.619 [DEBUG] [Thread-26024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:27:03.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:27:03.675 [DEBUG] [Thread-26024] [transport.py] [_log()] userauth is OK
2026-04-15T21:27:03.675 [DEBUG] [Thread-26024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:27:03.675 [DEBUG] [Thread-26024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:27:03.676 [DEBUG] [Thread-26024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:27:03.676 [DEBUG] [Thread-26024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:27:03.700 [INFO] [Thread-26024] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:27:03.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:27:03.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:27:04.504 [DEBUG] [Thread-26024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:27:04.504 [DEBUG] [Thread-26024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:27:04.552 [DEBUG] [Thread-26024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:27:04.552 [DEBUG] [Thread-26024] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:27:04.561 [DEBUG] [Thread-26024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:27:04.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:27:04.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')
2026-04-15T21:27:04.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
2026-04-15T21:27:04.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:27:04.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:27:04.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:27:04.595 [DEBUG] [Thread-26024] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:27:10.065 [DEBUG] [Thread-26026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:27:17.061 [DEBUG] [Thread-26027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:27:25.107 [DEBUG] [Thread-26028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:27:34.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:27:34.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:27:34.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
2026-04-15T21:27:35.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 27, 12), 4.58209, 73.1093, 0.0, 6.35292, 9.94287, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:27:35.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:27:12
2026-04-15T21:27:36.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:27:36.689 [DEBUG] [Thread-26029] [transport.py] [_log()] starting thread (client mode): 0xf13cbaf0
2026-04-15T21:27:36.690 [DEBUG] [Thread-26029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:27:36.710 [DEBUG] [Thread-26029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:27:36.710 [INFO] [Thread-26029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:27:36.713 [DEBUG] [Thread-26029] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:27:36.713 [DEBUG] [Thread-26029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:27:36.713 [DEBUG] [Thread-26029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:27:36.713 [DEBUG] [Thread-26029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:27:36.713 [DEBUG] [Thread-26029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:27:36.713 [DEBUG] [Thread-26029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:27:36.713 [DEBUG] [Thread-26029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:27:36.714 [DEBUG] [Thread-26029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:27:36.714 [DEBUG] [Thread-26029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:27:36.714 [DEBUG] [Thread-26029] [transport.py] [_log()] client lang: <none>
2026-04-15T21:27:36.714 [DEBUG] [Thread-26029] [transport.py] [_log()] server lang: <none>
2026-04-15T21:27:36.714 [DEBUG] [Thread-26029] [transport.py] [_log()] kex follows: False
2026-04-15T21:27:36.714 [DEBUG] [Thread-26029] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:27:36.714 [DEBUG] [Thread-26029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:27:36.714 [DEBUG] [Thread-26029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:27:36.714 [DEBUG] [Thread-26029] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:27:36.714 [DEBUG] [Thread-26029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:27:36.714 [DEBUG] [Thread-26029] [transport.py] [_log()] Compression: none
2026-04-15T21:27:36.715 [DEBUG] [Thread-26029] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:27:36.730 [DEBUG] [Thread-26029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:27:36.731 [DEBUG] [Thread-26029] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:27:36.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:27:36.731 [DEBUG] [Thread-26029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:27:36.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:27:36.732 [DEBUG] [Thread-26029] [transport.py] [_log()] userauth is OK
2026-04-15T21:27:36.733 [DEBUG] [Thread-26029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:27:36.733 [DEBUG] [Thread-26029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:27:36.733 [DEBUG] [Thread-26029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:27:36.733 [DEBUG] [Thread-26029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:27:36.749 [INFO] [Thread-26029] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:27:36.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:27:37.395 [DEBUG] [Thread-26029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:27:37.395 [DEBUG] [Thread-26029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:27:37.396 [DEBUG] [Thread-26029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:27:37.436 [DEBUG] [Thread-26029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:27:37.436 [DEBUG] [Thread-26029] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:27:37.439 [DEBUG] [Thread-26029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:27:37.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:27:37.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:27:37.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:27:37.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:27:37.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:27:37.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:27:37.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:27:37.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:27:37.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:27:37.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.810548 -999.00  +10.30   2.33     76   +6.40 1 1 1 1 1     0    0 4.50 30.07 ZNESW 2.4 2.3 40.2 3.9 10.3 -24.5 10.2 -23.1 10.0 -21.1 10.2 -23.2
2026-04-15T21:27:37.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:27:37.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:27:37.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.810548
2026-04-15T21:27:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:27:37.466 [DEBUG] [Thread-26029] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:27:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:27:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:27:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:27:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:27:37.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:27:12', tmtdew=4.58209, humidity=73.1093, cloud=0.0, wind=6.35292, temperature=9.94287, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:27:11.347', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03575000000000017, 0.0182500000000001, -0.07474999999999987, -0.057500000000000995, -0.05900000000000105, -0.03774999999999906, -0.021000000000000796, 0.01425000000000054, 0.011499999999999844, -0.031000000000000583, -0.035250000000001336, -0.025000000000000355, 0.026499999999998636, 0.01574999999999882, 0.032999999999999474, -0.0010000000000012221, 0.04974999999999952, -0.013500000000000512, -0.0129999999999999, 0.018749999999998934, 0.0365000000000002, 0.03324999999999889, 0.0032500000000013074, 0.0467499999999994, 0.041499999999999204, -0.0365000000000002, -0.02674999999999983, 0.005499999999999616, 0.013999999999999346, 0.006000000000000227, 0.04600000000000115, 0.04800000000000004, -0.005250000000000199], zp_timestamp='2026-04-15T19:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:27:37.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:27:37.724 [DEBUG] [Thread-26032] [transport.py] [_log()] starting thread (client mode): 0xf13e3c10
2026-04-15T21:27:37.724 [DEBUG] [Thread-26032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:27:37.741 [DEBUG] [Thread-26032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:27:37.741 [INFO] [Thread-26032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:27:37.748 [DEBUG] [Thread-26032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:27:37.748 [DEBUG] [Thread-26032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:27:37.749 [DEBUG] [Thread-26032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:27:37.749 [DEBUG] [Thread-26032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:27:37.749 [DEBUG] [Thread-26032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:27:37.749 [DEBUG] [Thread-26032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:27:37.749 [DEBUG] [Thread-26032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:27:37.749 [DEBUG] [Thread-26032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:27:37.749 [DEBUG] [Thread-26032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:27:37.749 [DEBUG] [Thread-26032] [transport.py] [_log()] client lang: <none>
2026-04-15T21:27:37.749 [DEBUG] [Thread-26032] [transport.py] [_log()] server lang: <none>
2026-04-15T21:27:37.749 [DEBUG] [Thread-26032] [transport.py] [_log()] kex follows: False
2026-04-15T21:27:37.749 [DEBUG] [Thread-26032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:27:37.750 [DEBUG] [Thread-26032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:27:37.750 [DEBUG] [Thread-26032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:27:37.750 [DEBUG] [Thread-26032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:27:37.750 [DEBUG] [Thread-26032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:27:37.750 [DEBUG] [Thread-26032] [transport.py] [_log()] Compression: none
2026-04-15T21:27:37.750 [DEBUG] [Thread-26032] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:27:37.808 [DEBUG] [Thread-26032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:27:37.808 [DEBUG] [Thread-26032] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:27:37.809 [DEBUG] [Thread-26032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:27:37.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:27:37.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:27:37.865 [DEBUG] [Thread-26032] [transport.py] [_log()] userauth is OK
2026-04-15T21:27:37.865 [DEBUG] [Thread-26032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:27:37.865 [DEBUG] [Thread-26032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:27:37.865 [DEBUG] [Thread-26032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:27:37.866 [DEBUG] [Thread-26032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:27:37.889 [INFO] [Thread-26032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:27:37.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:27:37.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:27:38.726 [DEBUG] [Thread-26032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:27:38.726 [DEBUG] [Thread-26032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:27:38.774 [DEBUG] [Thread-26032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:27:38.774 [DEBUG] [Thread-26032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:27:38.783 [DEBUG] [Thread-26032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:27:38.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:27:38.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')
2026-04-15T21:27:38.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
2026-04-15T21:27:38.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:27:38.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:27:38.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:27:38.827 [DEBUG] [Thread-26032] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:27:40.136 [DEBUG] [Thread-26034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:27:48.570 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:27:48.571 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:27:55.172 [DEBUG] [Thread-26035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:28:08.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:28:08.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:28:08.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
2026-04-15T21:28:10.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 27, 48), 4.32018, 74.4511, 0.0, 9.24696, 9.91921, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:28:10.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:27:48
2026-04-15T21:28:10.201 [DEBUG] [Thread-26036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:28:10.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:28:10.940 [DEBUG] [Thread-26037] [transport.py] [_log()] starting thread (client mode): 0xf13ca410
2026-04-15T21:28:10.940 [DEBUG] [Thread-26037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:28:10.958 [DEBUG] [Thread-26037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:28:10.959 [INFO] [Thread-26037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:28:10.960 [DEBUG] [Thread-26037] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:28:10.960 [DEBUG] [Thread-26037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:28:10.960 [DEBUG] [Thread-26037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:28:10.960 [DEBUG] [Thread-26037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:28:10.960 [DEBUG] [Thread-26037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:28:10.961 [DEBUG] [Thread-26037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:28:10.961 [DEBUG] [Thread-26037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:28:10.961 [DEBUG] [Thread-26037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:28:10.961 [DEBUG] [Thread-26037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:28:10.961 [DEBUG] [Thread-26037] [transport.py] [_log()] client lang: <none>
2026-04-15T21:28:10.961 [DEBUG] [Thread-26037] [transport.py] [_log()] server lang: <none>
2026-04-15T21:28:10.961 [DEBUG] [Thread-26037] [transport.py] [_log()] kex follows: False
2026-04-15T21:28:10.961 [DEBUG] [Thread-26037] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:28:10.961 [DEBUG] [Thread-26037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:28:10.961 [DEBUG] [Thread-26037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:28:10.961 [DEBUG] [Thread-26037] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:28:10.961 [DEBUG] [Thread-26037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:28:10.961 [DEBUG] [Thread-26037] [transport.py] [_log()] Compression: none
2026-04-15T21:28:10.962 [DEBUG] [Thread-26037] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:28:10.973 [DEBUG] [Thread-26037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:28:10.974 [DEBUG] [Thread-26037] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:28:10.974 [DEBUG] [Thread-26037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:28:10.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:28:10.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:28:10.976 [DEBUG] [Thread-26037] [transport.py] [_log()] userauth is OK
2026-04-15T21:28:10.976 [DEBUG] [Thread-26037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:28:10.976 [DEBUG] [Thread-26037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:28:10.976 [DEBUG] [Thread-26037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:28:10.976 [DEBUG] [Thread-26037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:28:11.000 [INFO] [Thread-26037] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:28:11.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:28:11.666 [DEBUG] [Thread-26037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:28:11.667 [DEBUG] [Thread-26037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:28:11.667 [DEBUG] [Thread-26037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:28:11.708 [DEBUG] [Thread-26037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:28:11.708 [DEBUG] [Thread-26037] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:28:11.711 [DEBUG] [Thread-26037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:28:11.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:28:11.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:28:11.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:28:11.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:28:11.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:28:11.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:28:11.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:28:11.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:28:11.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:28:11.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.810895 -999.00  +10.30   3.40     76   +6.40 1 1 1 1 1     0    0 4.51 29.71 ZNESW 3.3 3.4 84.4 4.5 10.3 -24.5 10.3 -23.2 9.9 -21.1 10.2 -23.2
2026-04-15T21:28:11.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:28:11.733 [DEBUG] [Thread-26037] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:28:11.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:28:11.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.810895
2026-04-15T21:28:11.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:28:11.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:28:11.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:28:11.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:28:11.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:28:11.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:27:48', tmtdew=4.32018, humidity=74.4511, cloud=0.0, wind=9.24696, temperature=9.91921, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:27:41.328', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03575000000000017, 0.0182500000000001, -0.07474999999999987, -0.057500000000000995, -0.05900000000000105, -0.03774999999999906, -0.021000000000000796, 0.01425000000000054, 0.011499999999999844, -0.031000000000000583, -0.035250000000001336, -0.025000000000000355, 0.026499999999998636, 0.01574999999999882, 0.032999999999999474, -0.0010000000000012221, 0.04974999999999952, -0.013500000000000512, -0.0129999999999999, 0.018749999999998934, 0.0365000000000002, 0.03324999999999889, 0.0032500000000013074, 0.0467499999999994, 0.041499999999999204, -0.0365000000000002, -0.02674999999999983, 0.005499999999999616, 0.013999999999999346, 0.006000000000000227, 0.04600000000000115, 0.04800000000000004, -0.005250000000000199], zp_timestamp='2026-04-15T19:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:28:11.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:28:11.988 [DEBUG] [Thread-26040] [transport.py] [_log()] starting thread (client mode): 0xf13c9540
2026-04-15T21:28:11.989 [DEBUG] [Thread-26040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:28:12.003 [DEBUG] [Thread-26040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:28:12.003 [INFO] [Thread-26040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:28:12.010 [DEBUG] [Thread-26040] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:28:12.010 [DEBUG] [Thread-26040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:28:12.010 [DEBUG] [Thread-26040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:28:12.011 [DEBUG] [Thread-26040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:28:12.011 [DEBUG] [Thread-26040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:28:12.011 [DEBUG] [Thread-26040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:28:12.011 [DEBUG] [Thread-26040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:28:12.011 [DEBUG] [Thread-26040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:28:12.011 [DEBUG] [Thread-26040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:28:12.011 [DEBUG] [Thread-26040] [transport.py] [_log()] client lang: <none>
2026-04-15T21:28:12.011 [DEBUG] [Thread-26040] [transport.py] [_log()] server lang: <none>
2026-04-15T21:28:12.011 [DEBUG] [Thread-26040] [transport.py] [_log()] kex follows: False
2026-04-15T21:28:12.011 [DEBUG] [Thread-26040] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:28:12.011 [DEBUG] [Thread-26040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:28:12.011 [DEBUG] [Thread-26040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:28:12.012 [DEBUG] [Thread-26040] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:28:12.012 [DEBUG] [Thread-26040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:28:12.012 [DEBUG] [Thread-26040] [transport.py] [_log()] Compression: none
2026-04-15T21:28:12.012 [DEBUG] [Thread-26040] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:28:12.068 [DEBUG] [Thread-26040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:28:12.068 [DEBUG] [Thread-26040] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:28:12.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:28:12.069 [DEBUG] [Thread-26040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:28:12.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:28:12.126 [DEBUG] [Thread-26040] [transport.py] [_log()] userauth is OK
2026-04-15T21:28:12.126 [DEBUG] [Thread-26040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:28:12.126 [DEBUG] [Thread-26040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:28:12.126 [DEBUG] [Thread-26040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:28:12.126 [DEBUG] [Thread-26040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:28:12.151 [INFO] [Thread-26040] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:28:12.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:28:12.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:28:12.992 [DEBUG] [Thread-26040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:28:12.993 [DEBUG] [Thread-26040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:28:13.041 [DEBUG] [Thread-26040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:28:13.041 [DEBUG] [Thread-26040] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:28:13.050 [DEBUG] [Thread-26040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:28:13.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:28:13.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')
2026-04-15T21:28:13.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
2026-04-15T21:28:13.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:28:13.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:28:13.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:28:13.085 [DEBUG] [Thread-26040] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:28:17.205 [DEBUG] [Thread-26042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:28:25.232 [DEBUG] [Thread-26043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:28:40.273 [DEBUG] [Thread-26044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:28:43.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:28:43.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:28:43.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
2026-04-15T21:28:44.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 28, 23), 4.65045, 72.7753, 0.0, 6.54696, 10.0096, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:28:44.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:28:23
2026-04-15T21:28:44.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:28:45.179 [DEBUG] [Thread-26045] [transport.py] [_log()] starting thread (client mode): 0xee992170
2026-04-15T21:28:45.179 [DEBUG] [Thread-26045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:28:45.199 [DEBUG] [Thread-26045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:28:45.199 [INFO] [Thread-26045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:28:45.202 [DEBUG] [Thread-26045] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:28:45.202 [DEBUG] [Thread-26045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:28:45.202 [DEBUG] [Thread-26045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:28:45.202 [DEBUG] [Thread-26045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:28:45.202 [DEBUG] [Thread-26045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:28:45.202 [DEBUG] [Thread-26045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:28:45.202 [DEBUG] [Thread-26045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:28:45.203 [DEBUG] [Thread-26045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:28:45.203 [DEBUG] [Thread-26045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:28:45.203 [DEBUG] [Thread-26045] [transport.py] [_log()] client lang: <none>
2026-04-15T21:28:45.203 [DEBUG] [Thread-26045] [transport.py] [_log()] server lang: <none>
2026-04-15T21:28:45.203 [DEBUG] [Thread-26045] [transport.py] [_log()] kex follows: False
2026-04-15T21:28:45.203 [DEBUG] [Thread-26045] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:28:45.203 [DEBUG] [Thread-26045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:28:45.203 [DEBUG] [Thread-26045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:28:45.203 [DEBUG] [Thread-26045] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:28:45.203 [DEBUG] [Thread-26045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:28:45.204 [DEBUG] [Thread-26045] [transport.py] [_log()] Compression: none
2026-04-15T21:28:45.204 [DEBUG] [Thread-26045] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:28:45.220 [DEBUG] [Thread-26045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:28:45.221 [DEBUG] [Thread-26045] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:28:45.221 [DEBUG] [Thread-26045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:28:45.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:28:45.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:28:45.223 [DEBUG] [Thread-26045] [transport.py] [_log()] userauth is OK
2026-04-15T21:28:45.223 [DEBUG] [Thread-26045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:28:45.224 [DEBUG] [Thread-26045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:28:45.224 [DEBUG] [Thread-26045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:28:45.224 [DEBUG] [Thread-26045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:28:45.249 [INFO] [Thread-26045] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:28:45.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:28:45.867 [DEBUG] [Thread-26045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:28:45.867 [DEBUG] [Thread-26045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:28:45.868 [DEBUG] [Thread-26045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:28:45.908 [DEBUG] [Thread-26045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:28:45.908 [DEBUG] [Thread-26045] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:28:45.911 [DEBUG] [Thread-26045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:28:45.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:28:45.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:28:45.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:28:45.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:28:45.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:28:45.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:28:45.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:28:45.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:28:45.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:28:45.935 [DEBUG] [Thread-26045] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:28:45.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.811242 -999.00  +10.30   2.73     76   +6.30 1 1 1 1 1     0    0 4.64 31.15 ZNESW 2.4 2.7 49.4 3.1 10.3 -24.6 10.3 -23.3 10.0 -21.0 10.2 -23.1
2026-04-15T21:28:45.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:28:45.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:28:45.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.811242
2026-04-15T21:28:45.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:28:45.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:28:45.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:28:45.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:28:45.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:28:45.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:28:23', tmtdew=4.65045, humidity=72.7753, cloud=0.0, wind=6.54696, temperature=10.0096, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:28:11.309', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03575000000000017, 0.0182500000000001, -0.07474999999999987, -0.057500000000000995, -0.05900000000000105, -0.03774999999999906, -0.021000000000000796, 0.01425000000000054, 0.011499999999999844, -0.031000000000000583, -0.035250000000001336, -0.025000000000000355, 0.026499999999998636, 0.01574999999999882, 0.032999999999999474, -0.0010000000000012221, 0.04974999999999952, -0.013500000000000512, -0.0129999999999999, 0.018749999999998934, 0.0365000000000002, 0.03324999999999889, 0.0032500000000013074, 0.0467499999999994, 0.041499999999999204, -0.0365000000000002, -0.02674999999999983, 0.005499999999999616, 0.013999999999999346, 0.006000000000000227, 0.04600000000000115, 0.04800000000000004, -0.005250000000000199], zp_timestamp='2026-04-15T19:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:28:46.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:28:46.193 [DEBUG] [Thread-26048] [transport.py] [_log()] starting thread (client mode): 0xee9063b0
2026-04-15T21:28:46.193 [DEBUG] [Thread-26048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:28:46.212 [DEBUG] [Thread-26048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:28:46.212 [INFO] [Thread-26048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:28:46.219 [DEBUG] [Thread-26048] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:28:46.220 [DEBUG] [Thread-26048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:28:46.220 [DEBUG] [Thread-26048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:28:46.220 [DEBUG] [Thread-26048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:28:46.220 [DEBUG] [Thread-26048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:28:46.220 [DEBUG] [Thread-26048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:28:46.220 [DEBUG] [Thread-26048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:28:46.220 [DEBUG] [Thread-26048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:28:46.220 [DEBUG] [Thread-26048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:28:46.220 [DEBUG] [Thread-26048] [transport.py] [_log()] client lang: <none>
2026-04-15T21:28:46.220 [DEBUG] [Thread-26048] [transport.py] [_log()] server lang: <none>
2026-04-15T21:28:46.220 [DEBUG] [Thread-26048] [transport.py] [_log()] kex follows: False
2026-04-15T21:28:46.220 [DEBUG] [Thread-26048] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:28:46.220 [DEBUG] [Thread-26048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:28:46.220 [DEBUG] [Thread-26048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:28:46.221 [DEBUG] [Thread-26048] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:28:46.221 [DEBUG] [Thread-26048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:28:46.221 [DEBUG] [Thread-26048] [transport.py] [_log()] Compression: none
2026-04-15T21:28:46.221 [DEBUG] [Thread-26048] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:28:46.278 [DEBUG] [Thread-26048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:28:46.278 [DEBUG] [Thread-26048] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:28:46.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:28:46.279 [DEBUG] [Thread-26048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:28:46.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:28:46.334 [DEBUG] [Thread-26048] [transport.py] [_log()] userauth is OK
2026-04-15T21:28:46.335 [DEBUG] [Thread-26048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:28:46.335 [DEBUG] [Thread-26048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:28:46.335 [DEBUG] [Thread-26048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:28:46.335 [DEBUG] [Thread-26048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:28:46.353 [INFO] [Thread-26048] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:28:46.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:28:46.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:28:47.194 [DEBUG] [Thread-26048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:28:47.194 [DEBUG] [Thread-26048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:28:47.242 [DEBUG] [Thread-26048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:28:47.242 [DEBUG] [Thread-26048] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:28:47.251 [DEBUG] [Thread-26048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:28:47.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:28:47.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')
2026-04-15T21:28:47.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
2026-04-15T21:28:47.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:28:47.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:28:47.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:28:47.286 [DEBUG] [Thread-26048] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:28:48.779 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:28:48.780 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:28:55.303 [DEBUG] [Thread-26050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:28:57.816 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:29:00.975 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:29:06.053 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:29:10.346 [DEBUG] [Thread-26051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:29:11.448 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:29:17.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:29:17.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:29:17.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
2026-04-15T21:29:17.356 [DEBUG] [Thread-26052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:29:18.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 28, 59), 4.57799, 72.8916, 0.0, 6.77628, 10.0097, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:29:18.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:28:59
2026-04-15T21:29:18.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:29:19.379 [DEBUG] [Thread-26053] [transport.py] [_log()] starting thread (client mode): 0xf1352c80
2026-04-15T21:29:19.379 [DEBUG] [Thread-26053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:29:19.400 [DEBUG] [Thread-26053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:29:19.400 [INFO] [Thread-26053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:29:19.402 [DEBUG] [Thread-26053] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:29:19.402 [DEBUG] [Thread-26053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:29:19.402 [DEBUG] [Thread-26053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:29:19.402 [DEBUG] [Thread-26053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:29:19.402 [DEBUG] [Thread-26053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:29:19.402 [DEBUG] [Thread-26053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:29:19.403 [DEBUG] [Thread-26053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:29:19.403 [DEBUG] [Thread-26053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:29:19.403 [DEBUG] [Thread-26053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:29:19.403 [DEBUG] [Thread-26053] [transport.py] [_log()] client lang: <none>
2026-04-15T21:29:19.403 [DEBUG] [Thread-26053] [transport.py] [_log()] server lang: <none>
2026-04-15T21:29:19.403 [DEBUG] [Thread-26053] [transport.py] [_log()] kex follows: False
2026-04-15T21:29:19.403 [DEBUG] [Thread-26053] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:29:19.403 [DEBUG] [Thread-26053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:29:19.403 [DEBUG] [Thread-26053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:29:19.403 [DEBUG] [Thread-26053] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:29:19.403 [DEBUG] [Thread-26053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:29:19.403 [DEBUG] [Thread-26053] [transport.py] [_log()] Compression: none
2026-04-15T21:29:19.404 [DEBUG] [Thread-26053] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:29:19.416 [DEBUG] [Thread-26053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:29:19.416 [DEBUG] [Thread-26053] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:29:19.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:29:19.417 [DEBUG] [Thread-26053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:29:19.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:29:19.418 [DEBUG] [Thread-26053] [transport.py] [_log()] userauth is OK
2026-04-15T21:29:19.418 [DEBUG] [Thread-26053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:29:19.418 [DEBUG] [Thread-26053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:29:19.418 [DEBUG] [Thread-26053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:29:19.418 [DEBUG] [Thread-26053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:29:19.441 [INFO] [Thread-26053] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:29:19.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:29:20.076 [DEBUG] [Thread-26053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:29:20.076 [DEBUG] [Thread-26053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:29:20.077 [DEBUG] [Thread-26053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:29:20.117 [DEBUG] [Thread-26053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:29:20.117 [DEBUG] [Thread-26053] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:29:20.120 [DEBUG] [Thread-26053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:29:20.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:29:20.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:29:20.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:29:20.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:29:20.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:29:20.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:29:20.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:29:20.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:29:20.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:29:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.811936 -999.00  +10.30   2.96     76   +6.40 1 1 1 1 1     0    0 4.70 33.64 ZNESW 3.0 3.0 99.5 3.9 10.4 -24.6 10.3 -23.3 10.0 -21.2 10.3 -23.2
2026-04-15T21:29:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:29:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:29:20.144 [DEBUG] [Thread-26053] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:29:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.811936
2026-04-15T21:29:20.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:29:20.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:29:20.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:29:20.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:29:20.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:29:20.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:28:59', tmtdew=4.57799, humidity=72.8916, cloud=0.0, wind=6.77628, temperature=10.0097, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:29:11.270', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03575000000000017, 0.0182500000000001, -0.07474999999999987, -0.057500000000000995, -0.05900000000000105, -0.03774999999999906, -0.021000000000000796, 0.01425000000000054, 0.011499999999999844, -0.031000000000000583, -0.035250000000001336, -0.025000000000000355, 0.026499999999998636, 0.01574999999999882, 0.032999999999999474, -0.0010000000000012221, 0.04974999999999952, -0.013500000000000512, -0.0129999999999999, 0.018749999999998934, 0.0365000000000002, 0.03324999999999889, 0.0032500000000013074, 0.0467499999999994, 0.041499999999999204, -0.0365000000000002, -0.02674999999999983, 0.005499999999999616, 0.013999999999999346, 0.006000000000000227, 0.04600000000000115, 0.04800000000000004, -0.005250000000000199], zp_timestamp='2026-04-15T19:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:29:20.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:29:20.401 [DEBUG] [Thread-26056] [transport.py] [_log()] starting thread (client mode): 0xee9072e0
2026-04-15T21:29:20.402 [DEBUG] [Thread-26056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:29:20.417 [DEBUG] [Thread-26056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:29:20.417 [INFO] [Thread-26056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:29:20.424 [DEBUG] [Thread-26056] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:29:20.424 [DEBUG] [Thread-26056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:29:20.424 [DEBUG] [Thread-26056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:29:20.424 [DEBUG] [Thread-26056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:29:20.425 [DEBUG] [Thread-26056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:29:20.425 [DEBUG] [Thread-26056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:29:20.425 [DEBUG] [Thread-26056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:29:20.425 [DEBUG] [Thread-26056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:29:20.425 [DEBUG] [Thread-26056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:29:20.425 [DEBUG] [Thread-26056] [transport.py] [_log()] client lang: <none>
2026-04-15T21:29:20.425 [DEBUG] [Thread-26056] [transport.py] [_log()] server lang: <none>
2026-04-15T21:29:20.425 [DEBUG] [Thread-26056] [transport.py] [_log()] kex follows: False
2026-04-15T21:29:20.425 [DEBUG] [Thread-26056] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:29:20.425 [DEBUG] [Thread-26056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:29:20.425 [DEBUG] [Thread-26056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:29:20.426 [DEBUG] [Thread-26056] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:29:20.426 [DEBUG] [Thread-26056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:29:20.426 [DEBUG] [Thread-26056] [transport.py] [_log()] Compression: none
2026-04-15T21:29:20.426 [DEBUG] [Thread-26056] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:29:20.483 [DEBUG] [Thread-26056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:29:20.483 [DEBUG] [Thread-26056] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:29:20.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:29:20.485 [DEBUG] [Thread-26056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:29:20.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:29:20.540 [DEBUG] [Thread-26056] [transport.py] [_log()] userauth is OK
2026-04-15T21:29:20.540 [DEBUG] [Thread-26056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:29:20.541 [DEBUG] [Thread-26056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:29:20.541 [DEBUG] [Thread-26056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:29:20.541 [DEBUG] [Thread-26056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:29:20.564 [INFO] [Thread-26056] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:29:20.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:29:20.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:29:21.374 [DEBUG] [Thread-26056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:29:21.375 [DEBUG] [Thread-26056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:29:21.422 [DEBUG] [Thread-26056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:29:21.422 [DEBUG] [Thread-26056] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:29:21.431 [DEBUG] [Thread-26056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:29:21.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:29:21.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')
2026-04-15T21:29:21.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T21:29:21.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:29:21.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:29:21.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:29:21.466 [DEBUG] [Thread-26056] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:29:25.377 [DEBUG] [Thread-26058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:29:30.914 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:29:35.339 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:29:40.415 [DEBUG] [Thread-26059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:29:48.985 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:29:48.986 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:29:51.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:29:51.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:29:51.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
2026-04-15T21:29:52.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 29, 34), 4.19741, 75.0818, 0.0, 10.9404, 9.88626, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:29:52.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:29:34
2026-04-15T21:29:53.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:29:53.678 [DEBUG] [Thread-26060] [transport.py] [_log()] starting thread (client mode): 0xee9c1f90
2026-04-15T21:29:53.678 [DEBUG] [Thread-26060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:29:53.694 [DEBUG] [Thread-26060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:29:53.694 [INFO] [Thread-26060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:29:53.697 [DEBUG] [Thread-26060] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:29:53.697 [DEBUG] [Thread-26060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:29:53.697 [DEBUG] [Thread-26060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:29:53.697 [DEBUG] [Thread-26060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:29:53.697 [DEBUG] [Thread-26060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:29:53.697 [DEBUG] [Thread-26060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:29:53.697 [DEBUG] [Thread-26060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:29:53.697 [DEBUG] [Thread-26060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:29:53.697 [DEBUG] [Thread-26060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:29:53.697 [DEBUG] [Thread-26060] [transport.py] [_log()] client lang: <none>
2026-04-15T21:29:53.697 [DEBUG] [Thread-26060] [transport.py] [_log()] server lang: <none>
2026-04-15T21:29:53.698 [DEBUG] [Thread-26060] [transport.py] [_log()] kex follows: False
2026-04-15T21:29:53.698 [DEBUG] [Thread-26060] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:29:53.698 [DEBUG] [Thread-26060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:29:53.698 [DEBUG] [Thread-26060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:29:53.698 [DEBUG] [Thread-26060] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:29:53.698 [DEBUG] [Thread-26060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:29:53.698 [DEBUG] [Thread-26060] [transport.py] [_log()] Compression: none
2026-04-15T21:29:53.698 [DEBUG] [Thread-26060] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:29:53.718 [DEBUG] [Thread-26060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:29:53.718 [DEBUG] [Thread-26060] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:29:53.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:29:53.719 [DEBUG] [Thread-26060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:29:53.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:29:53.719 [DEBUG] [Thread-26060] [transport.py] [_log()] userauth is OK
2026-04-15T21:29:53.720 [DEBUG] [Thread-26060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:29:53.720 [DEBUG] [Thread-26060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:29:53.720 [DEBUG] [Thread-26060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:29:53.720 [DEBUG] [Thread-26060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:29:53.741 [INFO] [Thread-26060] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:29:53.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:29:54.325 [DEBUG] [Thread-26060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:29:54.325 [DEBUG] [Thread-26060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:29:54.326 [DEBUG] [Thread-26060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:29:54.366 [DEBUG] [Thread-26060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:29:54.366 [DEBUG] [Thread-26060] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:29:54.369 [DEBUG] [Thread-26060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:29:54.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:29:54.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:29:54.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:29:54.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:29:54.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:29:54.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:29:54.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:29:54.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:29:54.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:29:54.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.812284 -999.00  +10.30   5.79     76   +6.40 1 1 1 1 1     0    0 4.62 29.90 ZNESW 4.5 5.8 61.8 6.5 10.4 -24.6 10.3 -23.2 10.0 -21.2 10.3 -23.2
2026-04-15T21:29:54.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:29:54.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:29:54.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.812284
2026-04-15T21:29:54.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:29:54.392 [DEBUG] [Thread-26060] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:29:54.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:29:54.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:29:54.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:29:54.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:29:54.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:29:34', tmtdew=4.19741, humidity=75.0818, cloud=0.0, wind=10.9404, temperature=9.88626, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:29:41.338', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03575000000000017, 0.0182500000000001, -0.07474999999999987, -0.057500000000000995, -0.05900000000000105, -0.03774999999999906, -0.021000000000000796, 0.01425000000000054, 0.011499999999999844, -0.031000000000000583, -0.035250000000001336, -0.025000000000000355, 0.026499999999998636, 0.01574999999999882, 0.032999999999999474, -0.0010000000000012221, 0.04974999999999952, -0.013500000000000512, -0.0129999999999999, 0.018749999999998934, 0.0365000000000002, 0.03324999999999889, 0.0032500000000013074, 0.0467499999999994, 0.041499999999999204, -0.0365000000000002, -0.02674999999999983, 0.005499999999999616, 0.013999999999999346, 0.006000000000000227, 0.04600000000000115, 0.04800000000000004, -0.005250000000000199], zp_timestamp='2026-04-15T19:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:29:54.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:29:54.645 [DEBUG] [Thread-26063] [transport.py] [_log()] starting thread (client mode): 0xee95ca30
2026-04-15T21:29:54.645 [DEBUG] [Thread-26063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:29:54.659 [DEBUG] [Thread-26063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:29:54.659 [INFO] [Thread-26063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:29:54.667 [DEBUG] [Thread-26063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:29:54.667 [DEBUG] [Thread-26063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:29:54.667 [DEBUG] [Thread-26063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:29:54.667 [DEBUG] [Thread-26063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:29:54.667 [DEBUG] [Thread-26063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:29:54.667 [DEBUG] [Thread-26063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:29:54.667 [DEBUG] [Thread-26063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:29:54.667 [DEBUG] [Thread-26063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:29:54.667 [DEBUG] [Thread-26063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:29:54.667 [DEBUG] [Thread-26063] [transport.py] [_log()] client lang: <none>
2026-04-15T21:29:54.668 [DEBUG] [Thread-26063] [transport.py] [_log()] server lang: <none>
2026-04-15T21:29:54.668 [DEBUG] [Thread-26063] [transport.py] [_log()] kex follows: False
2026-04-15T21:29:54.668 [DEBUG] [Thread-26063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:29:54.668 [DEBUG] [Thread-26063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:29:54.668 [DEBUG] [Thread-26063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:29:54.668 [DEBUG] [Thread-26063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:29:54.668 [DEBUG] [Thread-26063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:29:54.668 [DEBUG] [Thread-26063] [transport.py] [_log()] Compression: none
2026-04-15T21:29:54.668 [DEBUG] [Thread-26063] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:29:54.725 [DEBUG] [Thread-26063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:29:54.725 [DEBUG] [Thread-26063] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:29:54.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:29:54.726 [DEBUG] [Thread-26063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:29:54.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:29:54.780 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:29:54.782 [DEBUG] [Thread-26063] [transport.py] [_log()] userauth is OK
2026-04-15T21:29:54.782 [DEBUG] [Thread-26063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:29:54.782 [DEBUG] [Thread-26063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:29:54.782 [DEBUG] [Thread-26063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:29:54.782 [DEBUG] [Thread-26063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:29:54.808 [INFO] [Thread-26063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:29:54.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:29:54.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:29:55.446 [DEBUG] [Thread-26065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:29:55.602 [DEBUG] [Thread-26063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:29:55.602 [DEBUG] [Thread-26063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:29:55.652 [DEBUG] [Thread-26063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:29:55.652 [DEBUG] [Thread-26063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:29:55.661 [DEBUG] [Thread-26063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:29:55.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:29:55.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')
2026-04-15T21:29:55.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
2026-04-15T21:29:55.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:29:55.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:29:55.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:29:55.697 [DEBUG] [Thread-26063] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:29:59.160 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:30:06.084 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:30:10.478 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:30:10.486 [DEBUG] [Thread-26066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:30:17.520 [DEBUG] [Thread-26067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:30:25.515 [DEBUG] [Thread-26068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:30:25.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:30:25.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:30:25.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
2026-04-15T21:30:26.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 30, 10), 4.5791, 73.1402, 0.0, 7.04088, 9.97639, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:30:26.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:30:10
2026-04-15T21:30:27.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:30:27.843 [DEBUG] [Thread-26069] [transport.py] [_log()] starting thread (client mode): 0xee9c2f80
2026-04-15T21:30:27.844 [DEBUG] [Thread-26069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:30:27.859 [DEBUG] [Thread-26069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:30:27.860 [INFO] [Thread-26069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:30:27.861 [DEBUG] [Thread-26069] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:30:27.861 [DEBUG] [Thread-26069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:30:27.861 [DEBUG] [Thread-26069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:30:27.861 [DEBUG] [Thread-26069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:30:27.862 [DEBUG] [Thread-26069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:30:27.862 [DEBUG] [Thread-26069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:30:27.862 [DEBUG] [Thread-26069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:30:27.862 [DEBUG] [Thread-26069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:30:27.862 [DEBUG] [Thread-26069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:30:27.862 [DEBUG] [Thread-26069] [transport.py] [_log()] client lang: <none>
2026-04-15T21:30:27.862 [DEBUG] [Thread-26069] [transport.py] [_log()] server lang: <none>
2026-04-15T21:30:27.862 [DEBUG] [Thread-26069] [transport.py] [_log()] kex follows: False
2026-04-15T21:30:27.862 [DEBUG] [Thread-26069] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:30:27.862 [DEBUG] [Thread-26069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:30:27.862 [DEBUG] [Thread-26069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:30:27.863 [DEBUG] [Thread-26069] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:30:27.863 [DEBUG] [Thread-26069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:30:27.863 [DEBUG] [Thread-26069] [transport.py] [_log()] Compression: none
2026-04-15T21:30:27.863 [DEBUG] [Thread-26069] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:30:27.875 [DEBUG] [Thread-26069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:30:27.875 [DEBUG] [Thread-26069] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:30:27.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:30:27.876 [DEBUG] [Thread-26069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:30:27.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:30:27.917 [DEBUG] [Thread-26069] [transport.py] [_log()] userauth is OK
2026-04-15T21:30:27.917 [DEBUG] [Thread-26069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:30:27.917 [DEBUG] [Thread-26069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:30:27.917 [DEBUG] [Thread-26069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:30:27.917 [DEBUG] [Thread-26069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:30:27.952 [INFO] [Thread-26069] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:30:27.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:30:28.557 [DEBUG] [Thread-26069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:30:28.557 [DEBUG] [Thread-26069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:30:28.558 [DEBUG] [Thread-26069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:30:28.597 [DEBUG] [Thread-26069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:30:28.598 [DEBUG] [Thread-26069] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:30:28.600 [DEBUG] [Thread-26069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:30:28.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:30:28.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:30:28.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:30:28.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:30:28.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:30:28.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:30:28.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:30:28.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:30:28.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:30:28.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.812631 -999.00  +10.30   4.05     76   +6.40 1 1 1 1 1     0    0 4.64 29.13 ZNESW 4.8 4.0 77.3 5.0 10.4 -24.5 10.3 -23.4 10.0 -21.2 10.3 -23.2
2026-04-15T21:30:28.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:30:28.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:30:28.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.812631
2026-04-15T21:30:28.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:30:28.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:30:28.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:30:28.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:30:28.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:30:28.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:30:10', tmtdew=4.5791, humidity=73.1402, cloud=0.0, wind=7.04088, temperature=9.97639, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:30:11.318', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03575000000000017, 0.0182500000000001, -0.07474999999999987, -0.057500000000000995, -0.05900000000000105, -0.03774999999999906, -0.021000000000000796, 0.01425000000000054, 0.011499999999999844, -0.031000000000000583, -0.035250000000001336, -0.025000000000000355, 0.026499999999998636, 0.01574999999999882, 0.032999999999999474, -0.0010000000000012221, 0.04974999999999952, -0.013500000000000512, -0.0129999999999999, 0.018749999999998934, 0.0365000000000002, 0.03324999999999889, 0.0032500000000013074, 0.0467499999999994, 0.041499999999999204, -0.0365000000000002, -0.02674999999999983, 0.005499999999999616, 0.013999999999999346, 0.006000000000000227, 0.04600000000000115, 0.04800000000000004, -0.005250000000000199], zp_timestamp='2026-04-15T19:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:30:28.617 [DEBUG] [Thread-26069] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:30:28.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:30:28.842 [DEBUG] [Thread-26072] [transport.py] [_log()] starting thread (client mode): 0xee9c38b0
2026-04-15T21:30:28.842 [DEBUG] [Thread-26072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:30:28.857 [DEBUG] [Thread-26072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:30:28.857 [INFO] [Thread-26072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:30:28.864 [DEBUG] [Thread-26072] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:30:28.864 [DEBUG] [Thread-26072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:30:28.864 [DEBUG] [Thread-26072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:30:28.864 [DEBUG] [Thread-26072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:30:28.864 [DEBUG] [Thread-26072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:30:28.864 [DEBUG] [Thread-26072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:30:28.865 [DEBUG] [Thread-26072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:30:28.865 [DEBUG] [Thread-26072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:30:28.865 [DEBUG] [Thread-26072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:30:28.865 [DEBUG] [Thread-26072] [transport.py] [_log()] client lang: <none>
2026-04-15T21:30:28.865 [DEBUG] [Thread-26072] [transport.py] [_log()] server lang: <none>
2026-04-15T21:30:28.865 [DEBUG] [Thread-26072] [transport.py] [_log()] kex follows: False
2026-04-15T21:30:28.865 [DEBUG] [Thread-26072] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:30:28.865 [DEBUG] [Thread-26072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:30:28.865 [DEBUG] [Thread-26072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:30:28.865 [DEBUG] [Thread-26072] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:30:28.865 [DEBUG] [Thread-26072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:30:28.866 [DEBUG] [Thread-26072] [transport.py] [_log()] Compression: none
2026-04-15T21:30:28.866 [DEBUG] [Thread-26072] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:30:28.925 [DEBUG] [Thread-26072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:30:28.926 [DEBUG] [Thread-26072] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:30:28.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:30:28.927 [DEBUG] [Thread-26072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:30:28.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:30:28.982 [DEBUG] [Thread-26072] [transport.py] [_log()] userauth is OK
2026-04-15T21:30:28.983 [DEBUG] [Thread-26072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:30:28.983 [DEBUG] [Thread-26072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:30:28.983 [DEBUG] [Thread-26072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:30:28.983 [DEBUG] [Thread-26072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:30:29.009 [INFO] [Thread-26072] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:30:29.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:30:29.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:30:29.809 [DEBUG] [Thread-26072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:30:29.809 [DEBUG] [Thread-26072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:30:29.862 [DEBUG] [Thread-26072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:30:29.863 [DEBUG] [Thread-26072] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:30:29.875 [DEBUG] [Thread-26072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:30:29.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:30:29.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')
2026-04-15T21:30:29.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
2026-04-15T21:30:29.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:30:29.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:30:29.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:30:29.911 [DEBUG] [Thread-26072] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:30:40.547 [DEBUG] [Thread-26074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:30:49.186 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:30:49.188 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:30:55.594 [DEBUG] [Thread-26075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:30:59.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:30:59.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:30:59.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
2026-04-15T21:31:01.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 30, 45), 4.16245, 75.2473, 0.0, 9.81144, 9.78642, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:31:01.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:30:45
2026-04-15T21:31:01.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:31:02.075 [DEBUG] [Thread-26076] [transport.py] [_log()] starting thread (client mode): 0xee9c2f50
2026-04-15T21:31:02.076 [DEBUG] [Thread-26076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:31:02.094 [DEBUG] [Thread-26076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:31:02.094 [INFO] [Thread-26076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:31:02.096 [DEBUG] [Thread-26076] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:31:02.096 [DEBUG] [Thread-26076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:31:02.096 [DEBUG] [Thread-26076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:31:02.096 [DEBUG] [Thread-26076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:31:02.096 [DEBUG] [Thread-26076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:31:02.096 [DEBUG] [Thread-26076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:31:02.096 [DEBUG] [Thread-26076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:31:02.097 [DEBUG] [Thread-26076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:31:02.097 [DEBUG] [Thread-26076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:31:02.097 [DEBUG] [Thread-26076] [transport.py] [_log()] client lang: <none>
2026-04-15T21:31:02.097 [DEBUG] [Thread-26076] [transport.py] [_log()] server lang: <none>
2026-04-15T21:31:02.097 [DEBUG] [Thread-26076] [transport.py] [_log()] kex follows: False
2026-04-15T21:31:02.097 [DEBUG] [Thread-26076] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:31:02.097 [DEBUG] [Thread-26076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:31:02.097 [DEBUG] [Thread-26076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:31:02.097 [DEBUG] [Thread-26076] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:31:02.097 [DEBUG] [Thread-26076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:31:02.097 [DEBUG] [Thread-26076] [transport.py] [_log()] Compression: none
2026-04-15T21:31:02.097 [DEBUG] [Thread-26076] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:31:02.109 [DEBUG] [Thread-26076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:31:02.110 [DEBUG] [Thread-26076] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:31:02.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:31:02.110 [DEBUG] [Thread-26076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:31:02.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:31:02.111 [DEBUG] [Thread-26076] [transport.py] [_log()] userauth is OK
2026-04-15T21:31:02.111 [DEBUG] [Thread-26076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:31:02.111 [DEBUG] [Thread-26076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:31:02.111 [DEBUG] [Thread-26076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:31:02.111 [DEBUG] [Thread-26076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:31:02.132 [INFO] [Thread-26076] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:31:02.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:31:02.712 [DEBUG] [Thread-26076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:31:02.712 [DEBUG] [Thread-26076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:31:02.713 [DEBUG] [Thread-26076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:31:02.753 [DEBUG] [Thread-26076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:31:02.753 [DEBUG] [Thread-26076] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:31:02.756 [DEBUG] [Thread-26076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:31:02.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:31:02.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:31:02.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:31:02.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:31:02.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:31:02.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:31:02.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:31:02.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:31:02.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:31:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.812978 -999.00  +10.30   4.86     76   +6.30 1 1 1 1 1     0    0 4.67 32.35 ZNESW 4.9 4.9 81.7 7.0 10.4 -24.6 10.3 -23.3 10.0 -21.3 10.3 -23.1
2026-04-15T21:31:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:31:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:31:02.774 [DEBUG] [Thread-26076] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:31:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.812978
2026-04-15T21:31:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:31:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:31:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:31:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:31:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:31:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:30:45', tmtdew=4.16245, humidity=75.2473, cloud=0.0, wind=9.81144, temperature=9.78642, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:30:41.299', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03575000000000017, 0.0182500000000001, -0.07474999999999987, -0.057500000000000995, -0.05900000000000105, -0.03774999999999906, -0.021000000000000796, 0.01425000000000054, 0.011499999999999844, -0.031000000000000583, -0.035250000000001336, -0.025000000000000355, 0.026499999999998636, 0.01574999999999882, 0.032999999999999474, -0.0010000000000012221, 0.04974999999999952, -0.013500000000000512, -0.0129999999999999, 0.018749999999998934, 0.0365000000000002, 0.03324999999999889, 0.0032500000000013074, 0.0467499999999994, 0.041499999999999204, -0.0365000000000002, -0.02674999999999983, 0.005499999999999616, 0.013999999999999346, 0.006000000000000227, 0.04600000000000115, 0.04800000000000004, -0.005250000000000199], zp_timestamp='2026-04-15T19:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:31:03.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:31:03.032 [DEBUG] [Thread-26079] [transport.py] [_log()] starting thread (client mode): 0xee9c3280
2026-04-15T21:31:03.032 [DEBUG] [Thread-26079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:31:03.047 [DEBUG] [Thread-26079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:31:03.047 [INFO] [Thread-26079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:31:03.055 [DEBUG] [Thread-26079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:31:03.055 [DEBUG] [Thread-26079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:31:03.055 [DEBUG] [Thread-26079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:31:03.055 [DEBUG] [Thread-26079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:31:03.055 [DEBUG] [Thread-26079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:31:03.055 [DEBUG] [Thread-26079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:31:03.055 [DEBUG] [Thread-26079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:31:03.056 [DEBUG] [Thread-26079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:31:03.056 [DEBUG] [Thread-26079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:31:03.056 [DEBUG] [Thread-26079] [transport.py] [_log()] client lang: <none>
2026-04-15T21:31:03.056 [DEBUG] [Thread-26079] [transport.py] [_log()] server lang: <none>
2026-04-15T21:31:03.056 [DEBUG] [Thread-26079] [transport.py] [_log()] kex follows: False
2026-04-15T21:31:03.056 [DEBUG] [Thread-26079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:31:03.056 [DEBUG] [Thread-26079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:31:03.056 [DEBUG] [Thread-26079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:31:03.056 [DEBUG] [Thread-26079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:31:03.056 [DEBUG] [Thread-26079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:31:03.056 [DEBUG] [Thread-26079] [transport.py] [_log()] Compression: none
2026-04-15T21:31:03.056 [DEBUG] [Thread-26079] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:31:03.111 [DEBUG] [Thread-26079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:31:03.112 [DEBUG] [Thread-26079] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:31:03.112 [DEBUG] [Thread-26079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:31:03.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:31:03.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:31:03.168 [DEBUG] [Thread-26079] [transport.py] [_log()] userauth is OK
2026-04-15T21:31:03.168 [DEBUG] [Thread-26079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:31:03.168 [DEBUG] [Thread-26079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:31:03.168 [DEBUG] [Thread-26079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:31:03.169 [DEBUG] [Thread-26079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:31:03.194 [INFO] [Thread-26079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:31:03.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:31:03.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:31:04.060 [DEBUG] [Thread-26079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:31:04.060 [DEBUG] [Thread-26079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:31:04.107 [DEBUG] [Thread-26079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:31:04.108 [DEBUG] [Thread-26079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:31:04.117 [DEBUG] [Thread-26079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:31:04.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:31: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')
2026-04-15T21:31:04.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
2026-04-15T21:31:04.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:31:04.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:31:04.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:31:04.151 [DEBUG] [Thread-26079] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:31:10.481 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:31:10.622 [DEBUG] [Thread-26081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:31:13.533 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:31:17.683 [DEBUG] [Thread-26082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:31:25.666 [DEBUG] [Thread-26083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:31:34.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:31:34.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:31:34.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
2026-04-15T21:31:35.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 31, 21), 4.56371, 73.2233, 0.0, 6.93504, 9.9931, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:31:35.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:31:21
2026-04-15T21:31:35.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:31:36.294 [DEBUG] [Thread-26084] [transport.py] [_log()] starting thread (client mode): 0xee95fd00
2026-04-15T21:31:36.295 [DEBUG] [Thread-26084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:31:36.308 [DEBUG] [Thread-26084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:31:36.309 [INFO] [Thread-26084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:31:36.311 [DEBUG] [Thread-26084] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:31:36.311 [DEBUG] [Thread-26084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] client lang: <none>
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] server lang: <none>
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] kex follows: False
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] Compression: none
2026-04-15T21:31:36.312 [DEBUG] [Thread-26084] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:31:36.320 [DEBUG] [Thread-26084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:31:36.320 [DEBUG] [Thread-26084] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:31:36.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:31:36.321 [DEBUG] [Thread-26084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:31:36.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:31:36.322 [DEBUG] [Thread-26084] [transport.py] [_log()] userauth is OK
2026-04-15T21:31:36.322 [DEBUG] [Thread-26084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:31:36.322 [DEBUG] [Thread-26084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:31:36.322 [DEBUG] [Thread-26084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:31:36.322 [DEBUG] [Thread-26084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:31:36.335 [INFO] [Thread-26084] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:31:36.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:31:36.944 [DEBUG] [Thread-26084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:31:36.944 [DEBUG] [Thread-26084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:31:36.945 [DEBUG] [Thread-26084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:31:36.985 [DEBUG] [Thread-26084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:31:36.985 [DEBUG] [Thread-26084] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:31:36.988 [DEBUG] [Thread-26084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:31:36.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:31:37.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:31:37.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:31:37.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:31:37.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:31:37.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:31:37.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:31:37.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:31:37.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:31:37.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.813325 -999.00  +10.30   4.41     76   +6.40 1 1 1 1 1     0    0 4.68 33.88 ZNESW 5.0 4.4 94.1 6.4 10.4 -24.5 10.3 -23.3 10.0 -21.1 10.3 -23.3
2026-04-15T21:31:37.009 [DEBUG] [Thread-26084] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:31:37.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:31:37.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:31:37.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.813325
2026-04-15T21:31:37.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:31:37.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:31:37.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:31:37.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:31:37.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:31:37.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:31:21', tmtdew=4.56371, humidity=73.2233, cloud=0.0, wind=6.93504, temperature=9.9931, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:31:11.280', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03575000000000017, 0.0182500000000001, -0.07474999999999987, -0.057500000000000995, -0.05900000000000105, -0.03774999999999906, -0.021000000000000796, 0.01425000000000054, 0.011499999999999844, -0.031000000000000583, -0.035250000000001336, -0.025000000000000355, 0.026499999999998636, 0.01574999999999882, 0.032999999999999474, -0.0010000000000012221, 0.04974999999999952, -0.013500000000000512, -0.0129999999999999, 0.018749999999998934, 0.0365000000000002, 0.03324999999999889, 0.0032500000000013074, 0.0467499999999994, 0.041499999999999204, -0.0365000000000002, -0.02674999999999983, 0.005499999999999616, 0.013999999999999346, 0.006000000000000227, 0.04600000000000115, 0.04800000000000004, -0.005250000000000199], zp_timestamp='2026-04-15T19:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:31:37.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:31:37.275 [DEBUG] [Thread-26087] [transport.py] [_log()] starting thread (client mode): 0xee9c0280
2026-04-15T21:31:37.275 [DEBUG] [Thread-26087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:31:37.291 [DEBUG] [Thread-26087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:31:37.291 [INFO] [Thread-26087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:31:37.298 [DEBUG] [Thread-26087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:31:37.298 [DEBUG] [Thread-26087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:31:37.299 [DEBUG] [Thread-26087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:31:37.299 [DEBUG] [Thread-26087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:31:37.299 [DEBUG] [Thread-26087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:31:37.299 [DEBUG] [Thread-26087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:31:37.299 [DEBUG] [Thread-26087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:31:37.299 [DEBUG] [Thread-26087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:31:37.299 [DEBUG] [Thread-26087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:31:37.299 [DEBUG] [Thread-26087] [transport.py] [_log()] client lang: <none>
2026-04-15T21:31:37.299 [DEBUG] [Thread-26087] [transport.py] [_log()] server lang: <none>
2026-04-15T21:31:37.299 [DEBUG] [Thread-26087] [transport.py] [_log()] kex follows: False
2026-04-15T21:31:37.299 [DEBUG] [Thread-26087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:31:37.299 [DEBUG] [Thread-26087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:31:37.300 [DEBUG] [Thread-26087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:31:37.300 [DEBUG] [Thread-26087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:31:37.300 [DEBUG] [Thread-26087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:31:37.300 [DEBUG] [Thread-26087] [transport.py] [_log()] Compression: none
2026-04-15T21:31:37.300 [DEBUG] [Thread-26087] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:31:37.356 [DEBUG] [Thread-26087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:31:37.356 [DEBUG] [Thread-26087] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:31:37.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:31:37.357 [DEBUG] [Thread-26087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:31:37.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:31:37.412 [DEBUG] [Thread-26087] [transport.py] [_log()] userauth is OK
2026-04-15T21:31:37.412 [DEBUG] [Thread-26087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:31:37.412 [DEBUG] [Thread-26087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:31:37.413 [DEBUG] [Thread-26087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:31:37.413 [DEBUG] [Thread-26087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:31:37.440 [INFO] [Thread-26087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:31:37.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:31:37.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:31:38.302 [DEBUG] [Thread-26087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:31:38.302 [DEBUG] [Thread-26087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:31:38.350 [DEBUG] [Thread-26087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:31:38.350 [DEBUG] [Thread-26087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:31:38.359 [DEBUG] [Thread-26087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:31:38.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:31:38.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')
2026-04-15T21:31:38.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') -> 00000000
2026-04-15T21:31:38.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:31:38.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:31:38.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:31:38.394 [DEBUG] [Thread-26087] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:31:40.698 [DEBUG] [Thread-26089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:31:49.388 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:31:49.389 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:31:55.742 [DEBUG] [Thread-26090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:32:08.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:32:08.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:32:08.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
2026-04-15T21:32:09.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 31, 56), 4.56002, 73.2399, 0.0, 7.39368, 9.97651, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:32:09.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:31:56
2026-04-15T21:32:10.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:32:10.543 [DEBUG] [Thread-26091] [transport.py] [_log()] starting thread (client mode): 0xee9c03a0
2026-04-15T21:32:10.544 [DEBUG] [Thread-26091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:32:10.563 [DEBUG] [Thread-26091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:32:10.563 [INFO] [Thread-26091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:32:10.567 [DEBUG] [Thread-26091] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:32:10.567 [DEBUG] [Thread-26091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:32:10.567 [DEBUG] [Thread-26091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:32:10.567 [DEBUG] [Thread-26091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:32:10.567 [DEBUG] [Thread-26091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:32:10.567 [DEBUG] [Thread-26091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:32:10.567 [DEBUG] [Thread-26091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:32:10.567 [DEBUG] [Thread-26091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:32:10.567 [DEBUG] [Thread-26091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:32:10.567 [DEBUG] [Thread-26091] [transport.py] [_log()] client lang: <none>
2026-04-15T21:32:10.567 [DEBUG] [Thread-26091] [transport.py] [_log()] server lang: <none>
2026-04-15T21:32:10.567 [DEBUG] [Thread-26091] [transport.py] [_log()] kex follows: False
2026-04-15T21:32:10.567 [DEBUG] [Thread-26091] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:32:10.567 [DEBUG] [Thread-26091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:32:10.567 [DEBUG] [Thread-26091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:32:10.568 [DEBUG] [Thread-26091] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:32:10.568 [DEBUG] [Thread-26091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:32:10.568 [DEBUG] [Thread-26091] [transport.py] [_log()] Compression: none
2026-04-15T21:32:10.568 [DEBUG] [Thread-26091] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:32:10.583 [DEBUG] [Thread-26091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:32:10.583 [DEBUG] [Thread-26091] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:32:10.583 [DEBUG] [Thread-26091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:32:10.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:32:10.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:32:10.628 [DEBUG] [Thread-26091] [transport.py] [_log()] userauth is OK
2026-04-15T21:32:10.628 [DEBUG] [Thread-26091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:32:10.628 [DEBUG] [Thread-26091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:32:10.628 [DEBUG] [Thread-26091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:32:10.629 [DEBUG] [Thread-26091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:32:10.647 [INFO] [Thread-26091] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:32:10.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:32:10.776 [DEBUG] [Thread-26093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:32:11.401 [DEBUG] [Thread-26091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:32:11.401 [DEBUG] [Thread-26091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:32:11.402 [DEBUG] [Thread-26091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:32:11.442 [DEBUG] [Thread-26091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:32:11.442 [DEBUG] [Thread-26091] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:32:11.445 [DEBUG] [Thread-26091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:32:11.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:32:11.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:32:11.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:32:11.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:32:11.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:32:11.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:32:11.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:32:11.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:32:11.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:32:11.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.813672 -999.00  +10.30   4.66     77   +6.40 1 1 1 1 1     0    0 4.67 31.51 ZNESW 4.3 4.7 76.4 5.5 10.4 -24.5 10.3 -23.3 10.0 -21.2 10.3 -23.3
2026-04-15T21:32:11.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:32:11.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:32:11.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.813672
2026-04-15T21:32:11.467 [DEBUG] [Thread-26091] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:32:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:32:11.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:32:11.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:32:11.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:32:11.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:32:11.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:31:56', tmtdew=4.56002, humidity=73.2399, cloud=0.0, wind=7.39368, temperature=9.97651, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:31:41.261', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03575000000000017, 0.0182500000000001, -0.07474999999999987, -0.057500000000000995, -0.05900000000000105, -0.03774999999999906, -0.021000000000000796, 0.01425000000000054, 0.011499999999999844, -0.031000000000000583, -0.035250000000001336, -0.025000000000000355, 0.026499999999998636, 0.01574999999999882, 0.032999999999999474, -0.0010000000000012221, 0.04974999999999952, -0.013500000000000512, -0.0129999999999999, 0.018749999999998934, 0.0365000000000002, 0.03324999999999889, 0.0032500000000013074, 0.0467499999999994, 0.041499999999999204, -0.0365000000000002, -0.02674999999999983, 0.005499999999999616, 0.013999999999999346, 0.006000000000000227, 0.04600000000000115, 0.04800000000000004, -0.005250000000000199], zp_timestamp='2026-04-15T19:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:32:11.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:32:11.729 [DEBUG] [Thread-26095] [transport.py] [_log()] starting thread (client mode): 0xee9c2350
2026-04-15T21:32:11.729 [DEBUG] [Thread-26095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:32:11.748 [DEBUG] [Thread-26095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:32:11.748 [INFO] [Thread-26095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:32:11.755 [DEBUG] [Thread-26095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:32:11.755 [DEBUG] [Thread-26095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:32:11.755 [DEBUG] [Thread-26095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:32:11.755 [DEBUG] [Thread-26095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:32:11.755 [DEBUG] [Thread-26095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:32:11.756 [DEBUG] [Thread-26095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:32:11.756 [DEBUG] [Thread-26095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:32:11.756 [DEBUG] [Thread-26095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:32:11.756 [DEBUG] [Thread-26095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:32:11.756 [DEBUG] [Thread-26095] [transport.py] [_log()] client lang: <none>
2026-04-15T21:32:11.756 [DEBUG] [Thread-26095] [transport.py] [_log()] server lang: <none>
2026-04-15T21:32:11.756 [DEBUG] [Thread-26095] [transport.py] [_log()] kex follows: False
2026-04-15T21:32:11.756 [DEBUG] [Thread-26095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:32:11.756 [DEBUG] [Thread-26095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:32:11.756 [DEBUG] [Thread-26095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:32:11.756 [DEBUG] [Thread-26095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:32:11.756 [DEBUG] [Thread-26095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:32:11.757 [DEBUG] [Thread-26095] [transport.py] [_log()] Compression: none
2026-04-15T21:32:11.757 [DEBUG] [Thread-26095] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:32:11.813 [DEBUG] [Thread-26095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:32:11.813 [DEBUG] [Thread-26095] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:32:11.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:32:11.814 [DEBUG] [Thread-26095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:32:11.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:32:11.869 [DEBUG] [Thread-26095] [transport.py] [_log()] userauth is OK
2026-04-15T21:32:11.869 [DEBUG] [Thread-26095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:32:11.870 [DEBUG] [Thread-26095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:32:11.870 [DEBUG] [Thread-26095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:32:11.870 [DEBUG] [Thread-26095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:32:11.896 [INFO] [Thread-26095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:32:11.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:32:11.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:32:12.706 [DEBUG] [Thread-26095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:32:12.706 [DEBUG] [Thread-26095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:32:12.754 [DEBUG] [Thread-26095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:32:12.754 [DEBUG] [Thread-26095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:32:12.763 [DEBUG] [Thread-26095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:32:12.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:32:12.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')
2026-04-15T21:32:12.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
2026-04-15T21:32:12.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:32:12.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:32:12.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:32:12.799 [DEBUG] [Thread-26095] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:32:17.851 [DEBUG] [Thread-26097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:32:25.806 [DEBUG] [Thread-26098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:32:40.852 [DEBUG] [Thread-26099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:32:42.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:32:42.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:32:42.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:32:44.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 32, 31), 4.56317, 73.2234, 0.0, 6.88212, 9.9766, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:32:44.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:32:31
2026-04-15T21:32:44.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:32:44.927 [DEBUG] [Thread-26100] [transport.py] [_log()] starting thread (client mode): 0xee990430
2026-04-15T21:32:44.927 [DEBUG] [Thread-26100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:32:44.946 [DEBUG] [Thread-26100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:32:44.946 [INFO] [Thread-26100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:32:44.949 [DEBUG] [Thread-26100] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:32:44.949 [DEBUG] [Thread-26100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] client lang: <none>
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] server lang: <none>
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] kex follows: False
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:32:44.950 [DEBUG] [Thread-26100] [transport.py] [_log()] Compression: none
2026-04-15T21:32:44.951 [DEBUG] [Thread-26100] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:32:44.967 [DEBUG] [Thread-26100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:32:44.967 [DEBUG] [Thread-26100] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:32:44.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:32:44.968 [DEBUG] [Thread-26100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:32:44.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:32:44.969 [DEBUG] [Thread-26100] [transport.py] [_log()] userauth is OK
2026-04-15T21:32:44.969 [DEBUG] [Thread-26100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:32:44.969 [DEBUG] [Thread-26100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:32:44.969 [DEBUG] [Thread-26100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:32:44.969 [DEBUG] [Thread-26100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:32:44.982 [INFO] [Thread-26100] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:32:44.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:32:45.752 [DEBUG] [Thread-26100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:32:45.752 [DEBUG] [Thread-26100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:32:45.753 [DEBUG] [Thread-26100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:32:45.793 [DEBUG] [Thread-26100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:32:45.793 [DEBUG] [Thread-26100] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:32:45.795 [DEBUG] [Thread-26100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:32:45.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:32:45.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:32:45.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:32:45.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:32:45.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:32:45.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:32:45.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:32:45.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:32:45.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:32:45.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.813672 -999.00  +10.30   4.66     77   +6.40 1 1 1 1 1     0    0 4.67 31.51 ZNESW 4.3 4.7 76.4 5.5 10.4 -24.5 10.3 -23.3 10.0 -21.2 10.3 -23.3
2026-04-15T21:32:45.817 [DEBUG] [Thread-26100] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:32:45.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:32:45.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:32:45.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.813672
2026-04-15T21:32:45.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:32:45.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:32:45.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:32:45.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:32:45.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:32:45.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:32:31', tmtdew=4.56317, humidity=73.2234, cloud=0.0, wind=6.88212, temperature=9.9766, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:31:41.261', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.020749999999999602, -0.08375000000000021, -0.05250000000000021, -0.06449999999999889, 0.034250000000000114, -0.009999999999999787, -0.027749999999999275, -0.002500000000001279, -0.024499999999999744, -0.020749999999999602, -0.03850000000000087, 0.03599999999999959, -0.0012500000000006395, 0.02049999999999841, -0.0129999999999999, 0.021750000000000824, -0.016500000000000625, -0.021000000000000796, 0.018749999999998934, 0.03999999999999915, 0.022749999999998494, -0.010749999999999815, 0.03524999999999956, 0.037499999999999645, -0.04299999999999926, 0.015249999999999986, 0.0045000000000001705, 0.03249999999999886, 0.0070000000000014495, 0.03900000000000148, 0.017000000000001236, -0.0012500000000006395], zp_timestamp='2026-04-15T19:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:32:46.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:32:46.071 [DEBUG] [Thread-26103] [transport.py] [_log()] starting thread (client mode): 0xee991180
2026-04-15T21:32:46.071 [DEBUG] [Thread-26103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:32:46.086 [DEBUG] [Thread-26103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:32:46.087 [INFO] [Thread-26103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:32:46.094 [DEBUG] [Thread-26103] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:32:46.094 [DEBUG] [Thread-26103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:32:46.094 [DEBUG] [Thread-26103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:32:46.094 [DEBUG] [Thread-26103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:32:46.094 [DEBUG] [Thread-26103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:32:46.094 [DEBUG] [Thread-26103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:32:46.094 [DEBUG] [Thread-26103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:32:46.095 [DEBUG] [Thread-26103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:32:46.095 [DEBUG] [Thread-26103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:32:46.095 [DEBUG] [Thread-26103] [transport.py] [_log()] client lang: <none>
2026-04-15T21:32:46.095 [DEBUG] [Thread-26103] [transport.py] [_log()] server lang: <none>
2026-04-15T21:32:46.095 [DEBUG] [Thread-26103] [transport.py] [_log()] kex follows: False
2026-04-15T21:32:46.095 [DEBUG] [Thread-26103] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:32:46.095 [DEBUG] [Thread-26103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:32:46.095 [DEBUG] [Thread-26103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:32:46.095 [DEBUG] [Thread-26103] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:32:46.095 [DEBUG] [Thread-26103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:32:46.095 [DEBUG] [Thread-26103] [transport.py] [_log()] Compression: none
2026-04-15T21:32:46.095 [DEBUG] [Thread-26103] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:32:46.149 [DEBUG] [Thread-26103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:32:46.150 [DEBUG] [Thread-26103] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:32:46.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:32:46.150 [DEBUG] [Thread-26103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:32:46.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:32:46.206 [DEBUG] [Thread-26103] [transport.py] [_log()] userauth is OK
2026-04-15T21:32:46.206 [DEBUG] [Thread-26103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:32:46.206 [DEBUG] [Thread-26103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:32:46.206 [DEBUG] [Thread-26103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:32:46.207 [DEBUG] [Thread-26103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:32:46.225 [INFO] [Thread-26103] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:32:46.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:32:46.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:32:47.047 [DEBUG] [Thread-26103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:32:47.047 [DEBUG] [Thread-26103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:32:47.095 [DEBUG] [Thread-26103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:32:47.095 [DEBUG] [Thread-26103] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:32:47.104 [DEBUG] [Thread-26103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:32:47.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:32:47.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')
2026-04-15T21:32:47.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
2026-04-15T21:32:47.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:32:47.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:32:47.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:32:47.139 [DEBUG] [Thread-26103] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:32:49.591 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:32:49.592 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:32:55.885 [DEBUG] [Thread-26105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:33:10.927 [DEBUG] [Thread-26106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:33:17.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:33:17.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:33:17.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
2026-04-15T21:33:18.002 [DEBUG] [Thread-26107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:33:18.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 33, 7), 4.56103, 73.2401, 0.0, 6.44112, 10.0099, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:33:18.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:33:07
2026-04-15T21:33:18.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:33:19.269 [DEBUG] [Thread-26108] [transport.py] [_log()] starting thread (client mode): 0xee9923b0
2026-04-15T21:33:19.269 [DEBUG] [Thread-26108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:33:19.288 [DEBUG] [Thread-26108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:33:19.288 [INFO] [Thread-26108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:33:19.291 [DEBUG] [Thread-26108] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:33:19.291 [DEBUG] [Thread-26108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:33:19.291 [DEBUG] [Thread-26108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:33:19.291 [DEBUG] [Thread-26108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:33:19.291 [DEBUG] [Thread-26108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:33:19.291 [DEBUG] [Thread-26108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:33:19.291 [DEBUG] [Thread-26108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:33:19.291 [DEBUG] [Thread-26108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:33:19.291 [DEBUG] [Thread-26108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:33:19.291 [DEBUG] [Thread-26108] [transport.py] [_log()] client lang: <none>
2026-04-15T21:33:19.291 [DEBUG] [Thread-26108] [transport.py] [_log()] server lang: <none>
2026-04-15T21:33:19.291 [DEBUG] [Thread-26108] [transport.py] [_log()] kex follows: False
2026-04-15T21:33:19.292 [DEBUG] [Thread-26108] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:33:19.292 [DEBUG] [Thread-26108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:33:19.292 [DEBUG] [Thread-26108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:33:19.292 [DEBUG] [Thread-26108] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:33:19.292 [DEBUG] [Thread-26108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:33:19.292 [DEBUG] [Thread-26108] [transport.py] [_log()] Compression: none
2026-04-15T21:33:19.292 [DEBUG] [Thread-26108] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:33:19.307 [DEBUG] [Thread-26108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:33:19.308 [DEBUG] [Thread-26108] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:33:19.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:33:19.308 [DEBUG] [Thread-26108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:33:19.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:33:19.309 [DEBUG] [Thread-26108] [transport.py] [_log()] userauth is OK
2026-04-15T21:33:19.309 [DEBUG] [Thread-26108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:33:19.309 [DEBUG] [Thread-26108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:33:19.309 [DEBUG] [Thread-26108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:33:19.309 [DEBUG] [Thread-26108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:33:19.324 [INFO] [Thread-26108] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:33:19.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:33:20.117 [DEBUG] [Thread-26108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:33:20.117 [DEBUG] [Thread-26108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:33:20.118 [DEBUG] [Thread-26108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:33:20.158 [DEBUG] [Thread-26108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:33:20.158 [DEBUG] [Thread-26108] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:33:20.161 [DEBUG] [Thread-26108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:33:20.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:33:20.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:33:20.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:33:20.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:33:20.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:33:20.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:33:20.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:33:20.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:33:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:33:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.814367 -999.00  +10.20   6.62     77   +6.40 1 1 1 1 1     0    0 4.68 33.26 ZNESW 6.9 6.6 70.2 7.9 10.4 -24.6 10.3 -23.2 10.0 -21.1 10.3 -23.1
2026-04-15T21:33:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:33:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:33:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.814367
2026-04-15T21:33:20.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:33:20.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:33:20.188 [DEBUG] [Thread-26108] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:33:20.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:33:20.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:33:20.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:33:20.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:33:07', tmtdew=4.56103, humidity=73.2401, cloud=0.0, wind=6.44112, temperature=10.0099, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:32:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.020749999999999602, -0.08375000000000021, -0.05250000000000021, -0.06449999999999889, 0.034250000000000114, -0.009999999999999787, -0.027749999999999275, -0.002500000000001279, -0.024499999999999744, -0.020749999999999602, -0.03850000000000087, 0.03599999999999959, -0.0012500000000006395, 0.02049999999999841, -0.0129999999999999, 0.021750000000000824, -0.016500000000000625, -0.021000000000000796, 0.018749999999998934, 0.03999999999999915, 0.022749999999998494, -0.010749999999999815, 0.03524999999999956, 0.037499999999999645, -0.04299999999999926, 0.015249999999999986, 0.0045000000000001705, 0.03249999999999886, 0.0070000000000014495, 0.03900000000000148, 0.017000000000001236, -0.0012500000000006395], zp_timestamp='2026-04-15T19:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:33:20.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:33:20.447 [DEBUG] [Thread-26111] [transport.py] [_log()] starting thread (client mode): 0xee993a00
2026-04-15T21:33:20.447 [DEBUG] [Thread-26111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:33:20.462 [DEBUG] [Thread-26111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:33:20.463 [INFO] [Thread-26111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:33:20.470 [DEBUG] [Thread-26111] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:33:20.470 [DEBUG] [Thread-26111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:33:20.470 [DEBUG] [Thread-26111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:33:20.470 [DEBUG] [Thread-26111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:33:20.470 [DEBUG] [Thread-26111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:33:20.470 [DEBUG] [Thread-26111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:33:20.471 [DEBUG] [Thread-26111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:33:20.471 [DEBUG] [Thread-26111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:33:20.471 [DEBUG] [Thread-26111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:33:20.471 [DEBUG] [Thread-26111] [transport.py] [_log()] client lang: <none>
2026-04-15T21:33:20.471 [DEBUG] [Thread-26111] [transport.py] [_log()] server lang: <none>
2026-04-15T21:33:20.471 [DEBUG] [Thread-26111] [transport.py] [_log()] kex follows: False
2026-04-15T21:33:20.471 [DEBUG] [Thread-26111] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:33:20.471 [DEBUG] [Thread-26111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:33:20.471 [DEBUG] [Thread-26111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:33:20.471 [DEBUG] [Thread-26111] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:33:20.471 [DEBUG] [Thread-26111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:33:20.471 [DEBUG] [Thread-26111] [transport.py] [_log()] Compression: none
2026-04-15T21:33:20.472 [DEBUG] [Thread-26111] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:33:20.526 [DEBUG] [Thread-26111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:33:20.526 [DEBUG] [Thread-26111] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:33:20.527 [DEBUG] [Thread-26111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:33:20.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:33:20.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:33:20.583 [DEBUG] [Thread-26111] [transport.py] [_log()] userauth is OK
2026-04-15T21:33:20.583 [DEBUG] [Thread-26111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:33:20.583 [DEBUG] [Thread-26111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:33:20.583 [DEBUG] [Thread-26111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:33:20.584 [DEBUG] [Thread-26111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:33:20.610 [INFO] [Thread-26111] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:33:20.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:33:20.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:33:21.429 [DEBUG] [Thread-26111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:33:21.429 [DEBUG] [Thread-26111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:33:21.477 [DEBUG] [Thread-26111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:33:21.477 [DEBUG] [Thread-26111] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:33:21.486 [DEBUG] [Thread-26111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:33:21.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:33:21.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')
2026-04-15T21:33:21.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
2026-04-15T21:33:21.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:33:21.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:33:21.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:33:21.521 [DEBUG] [Thread-26111] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:33:25.958 [DEBUG] [Thread-26113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:33:40.999 [DEBUG] [Thread-26114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:33:49.792 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:33:49.792 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:33:51.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:33:51.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:33:51.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
2026-04-15T21:33:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 33, 43), 4.1316, 75.4139, 0.0, 9.5292, 9.82018, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:33:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:33:43
2026-04-15T21:33:53.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:33:53.688 [DEBUG] [Thread-26115] [transport.py] [_log()] starting thread (client mode): 0xee9c2a10
2026-04-15T21:33:53.688 [DEBUG] [Thread-26115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:33:53.707 [DEBUG] [Thread-26115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:33:53.707 [INFO] [Thread-26115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:33:53.710 [DEBUG] [Thread-26115] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:33:53.710 [DEBUG] [Thread-26115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:33:53.710 [DEBUG] [Thread-26115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:33:53.710 [DEBUG] [Thread-26115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:33:53.710 [DEBUG] [Thread-26115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:33:53.710 [DEBUG] [Thread-26115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:33:53.710 [DEBUG] [Thread-26115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:33:53.710 [DEBUG] [Thread-26115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:33:53.710 [DEBUG] [Thread-26115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:33:53.711 [DEBUG] [Thread-26115] [transport.py] [_log()] client lang: <none>
2026-04-15T21:33:53.711 [DEBUG] [Thread-26115] [transport.py] [_log()] server lang: <none>
2026-04-15T21:33:53.711 [DEBUG] [Thread-26115] [transport.py] [_log()] kex follows: False
2026-04-15T21:33:53.711 [DEBUG] [Thread-26115] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:33:53.711 [DEBUG] [Thread-26115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:33:53.711 [DEBUG] [Thread-26115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:33:53.711 [DEBUG] [Thread-26115] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:33:53.711 [DEBUG] [Thread-26115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:33:53.711 [DEBUG] [Thread-26115] [transport.py] [_log()] Compression: none
2026-04-15T21:33:53.711 [DEBUG] [Thread-26115] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:33:53.728 [DEBUG] [Thread-26115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:33:53.729 [DEBUG] [Thread-26115] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:33:53.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:33:53.729 [DEBUG] [Thread-26115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:33:53.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:33:53.730 [DEBUG] [Thread-26115] [transport.py] [_log()] userauth is OK
2026-04-15T21:33:53.731 [DEBUG] [Thread-26115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:33:53.731 [DEBUG] [Thread-26115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:33:53.731 [DEBUG] [Thread-26115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:33:53.731 [DEBUG] [Thread-26115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:33:53.766 [INFO] [Thread-26115] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:33:53.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:33:54.564 [DEBUG] [Thread-26115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:33:54.564 [DEBUG] [Thread-26115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:33:54.565 [DEBUG] [Thread-26115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:33:54.605 [DEBUG] [Thread-26115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:33:54.605 [DEBUG] [Thread-26115] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:33:54.608 [DEBUG] [Thread-26115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:33:54.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:33:54.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:33:54.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:33:54.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:33:54.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:33:54.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:33:54.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:33:54.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:33:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:33:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.814714 -999.00  +10.20   5.92     77   +6.50 1 1 1 1 1     0    0 4.66 28.98 ZNESW 6.6 5.9 63.6 7.5 10.4 -24.5 10.3 -23.2 10.0 -21.2 10.3 -23.3
2026-04-15T21:33:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:33:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:33:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.814714
2026-04-15T21:33:54.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:33:54.636 [DEBUG] [Thread-26115] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:33:54.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:33:54.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:33:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:33:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:33:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:33:43', tmtdew=4.1316, humidity=75.4139, cloud=0.0, wind=9.5292, temperature=9.82018, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:33:11.290', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.020749999999999602, -0.08375000000000021, -0.05250000000000021, -0.06449999999999889, 0.034250000000000114, -0.009999999999999787, -0.027749999999999275, -0.002500000000001279, -0.024499999999999744, -0.020749999999999602, -0.03850000000000087, 0.03599999999999959, -0.0012500000000006395, 0.02049999999999841, -0.0129999999999999, 0.021750000000000824, -0.016500000000000625, -0.021000000000000796, 0.018749999999998934, 0.03999999999999915, 0.022749999999998494, -0.010749999999999815, 0.03524999999999956, 0.037499999999999645, -0.04299999999999926, 0.015249999999999986, 0.0045000000000001705, 0.03249999999999886, 0.0070000000000014495, 0.03900000000000148, 0.017000000000001236, -0.0012500000000006395], zp_timestamp='2026-04-15T19:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:33:54.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:33:54.897 [DEBUG] [Thread-26118] [transport.py] [_log()] starting thread (client mode): 0xee9c1fc0
2026-04-15T21:33:54.897 [DEBUG] [Thread-26118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:33:54.911 [DEBUG] [Thread-26118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:33:54.911 [INFO] [Thread-26118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:33:54.918 [DEBUG] [Thread-26118] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:33:54.918 [DEBUG] [Thread-26118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:33:54.919 [DEBUG] [Thread-26118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:33:54.919 [DEBUG] [Thread-26118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:33:54.919 [DEBUG] [Thread-26118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:33:54.919 [DEBUG] [Thread-26118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:33:54.919 [DEBUG] [Thread-26118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:33:54.919 [DEBUG] [Thread-26118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:33:54.919 [DEBUG] [Thread-26118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:33:54.919 [DEBUG] [Thread-26118] [transport.py] [_log()] client lang: <none>
2026-04-15T21:33:54.919 [DEBUG] [Thread-26118] [transport.py] [_log()] server lang: <none>
2026-04-15T21:33:54.919 [DEBUG] [Thread-26118] [transport.py] [_log()] kex follows: False
2026-04-15T21:33:54.919 [DEBUG] [Thread-26118] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:33:54.920 [DEBUG] [Thread-26118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:33:54.920 [DEBUG] [Thread-26118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:33:54.920 [DEBUG] [Thread-26118] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:33:54.920 [DEBUG] [Thread-26118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:33:54.920 [DEBUG] [Thread-26118] [transport.py] [_log()] Compression: none
2026-04-15T21:33:54.920 [DEBUG] [Thread-26118] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:33:54.974 [DEBUG] [Thread-26118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:33:54.975 [DEBUG] [Thread-26118] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:33:54.975 [DEBUG] [Thread-26118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:33:54.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:33:54.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:33:55.031 [DEBUG] [Thread-26118] [transport.py] [_log()] userauth is OK
2026-04-15T21:33:55.032 [DEBUG] [Thread-26118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:33:55.032 [DEBUG] [Thread-26118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:33:55.032 [DEBUG] [Thread-26118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:33:55.032 [DEBUG] [Thread-26118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:33:55.049 [INFO] [Thread-26118] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:33:55.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:33:55.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:33:55.875 [DEBUG] [Thread-26118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:33:55.875 [DEBUG] [Thread-26118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:33:55.923 [DEBUG] [Thread-26118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:33:55.923 [DEBUG] [Thread-26118] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:33:55.932 [DEBUG] [Thread-26118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:33:55.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:33:55.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')
2026-04-15T21:33:55.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
2026-04-15T21:33:55.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:33:55.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:33:55.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:33:55.966 [DEBUG] [Thread-26118] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:33:56.027 [DEBUG] [Thread-26120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:34:11.066 [DEBUG] [Thread-26121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:34:18.169 [DEBUG] [Thread-26122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:34:25.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:34:25.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:34:25.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:34:26.099 [DEBUG] [Thread-26123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:34:27.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 34, 18), 4.55576, 73.2567, 0.0, 7.55244, 9.9935, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:34:27.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:34:18
2026-04-15T21:34:27.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:34:28.055 [DEBUG] [Thread-26124] [transport.py] [_log()] starting thread (client mode): 0xf1337be0
2026-04-15T21:34:28.056 [DEBUG] [Thread-26124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:34:28.075 [DEBUG] [Thread-26124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:34:28.076 [INFO] [Thread-26124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:34:28.078 [DEBUG] [Thread-26124] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:34:28.079 [DEBUG] [Thread-26124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:34:28.079 [DEBUG] [Thread-26124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:34:28.079 [DEBUG] [Thread-26124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:34:28.079 [DEBUG] [Thread-26124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:34:28.079 [DEBUG] [Thread-26124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:34:28.079 [DEBUG] [Thread-26124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:34:28.079 [DEBUG] [Thread-26124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:34:28.079 [DEBUG] [Thread-26124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:34:28.079 [DEBUG] [Thread-26124] [transport.py] [_log()] client lang: <none>
2026-04-15T21:34:28.079 [DEBUG] [Thread-26124] [transport.py] [_log()] server lang: <none>
2026-04-15T21:34:28.079 [DEBUG] [Thread-26124] [transport.py] [_log()] kex follows: False
2026-04-15T21:34:28.080 [DEBUG] [Thread-26124] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:34:28.080 [DEBUG] [Thread-26124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:34:28.080 [DEBUG] [Thread-26124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:34:28.080 [DEBUG] [Thread-26124] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:34:28.080 [DEBUG] [Thread-26124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:34:28.080 [DEBUG] [Thread-26124] [transport.py] [_log()] Compression: none
2026-04-15T21:34:28.080 [DEBUG] [Thread-26124] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:34:28.097 [DEBUG] [Thread-26124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:34:28.097 [DEBUG] [Thread-26124] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:34:28.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:34:28.098 [DEBUG] [Thread-26124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:34:28.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:34:28.140 [DEBUG] [Thread-26124] [transport.py] [_log()] userauth is OK
2026-04-15T21:34:28.141 [DEBUG] [Thread-26124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:34:28.141 [DEBUG] [Thread-26124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:34:28.141 [DEBUG] [Thread-26124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:34:28.141 [DEBUG] [Thread-26124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:34:28.166 [INFO] [Thread-26124] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:34:28.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:34:28.969 [DEBUG] [Thread-26124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:34:28.969 [DEBUG] [Thread-26124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:34:28.969 [DEBUG] [Thread-26124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:34:29.010 [DEBUG] [Thread-26124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:34:29.010 [DEBUG] [Thread-26124] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:34:29.013 [DEBUG] [Thread-26124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:34:29.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:34:29.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:34:29.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:34:29.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:34:29.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:34:29.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:34:29.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:34:29.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:34:29.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:34:29.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.815061 -999.00  +10.20   9.12     77   +6.40 1 1 1 1 1     0    0 4.53 28.65 ZNESW 7.4 9.1 64.2 10.0 10.4 -24.6 10.3 -23.3 10.0 -21.1 10.3 -23.3
2026-04-15T21:34:29.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:34:29.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:34:29.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.815061
2026-04-15T21:34:29.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:34:29.039 [DEBUG] [Thread-26124] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:34:29.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:34:29.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:34:29.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:34:29.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:34:29.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:34:18', tmtdew=4.55576, humidity=73.2567, cloud=0.0, wind=7.55244, temperature=9.9935, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:33:41.270', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.020749999999999602, -0.08375000000000021, -0.05250000000000021, -0.06449999999999889, 0.034250000000000114, -0.009999999999999787, -0.027749999999999275, -0.002500000000001279, -0.024499999999999744, -0.020749999999999602, -0.03850000000000087, 0.03599999999999959, -0.0012500000000006395, 0.02049999999999841, -0.0129999999999999, 0.021750000000000824, -0.016500000000000625, -0.021000000000000796, 0.018749999999998934, 0.03999999999999915, 0.022749999999998494, -0.010749999999999815, 0.03524999999999956, 0.037499999999999645, -0.04299999999999926, 0.015249999999999986, 0.0045000000000001705, 0.03249999999999886, 0.0070000000000014495, 0.03900000000000148, 0.017000000000001236, -0.0012500000000006395], zp_timestamp='2026-04-15T19:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:34:29.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:34:29.294 [DEBUG] [Thread-26127] [transport.py] [_log()] starting thread (client mode): 0xee993bb0
2026-04-15T21:34:29.294 [DEBUG] [Thread-26127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:34:29.307 [DEBUG] [Thread-26127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:34:29.307 [INFO] [Thread-26127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:34:29.315 [DEBUG] [Thread-26127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:34:29.315 [DEBUG] [Thread-26127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:34:29.315 [DEBUG] [Thread-26127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:34:29.315 [DEBUG] [Thread-26127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:34:29.315 [DEBUG] [Thread-26127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:34:29.315 [DEBUG] [Thread-26127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:34:29.315 [DEBUG] [Thread-26127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:34:29.315 [DEBUG] [Thread-26127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:34:29.315 [DEBUG] [Thread-26127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:34:29.315 [DEBUG] [Thread-26127] [transport.py] [_log()] client lang: <none>
2026-04-15T21:34:29.316 [DEBUG] [Thread-26127] [transport.py] [_log()] server lang: <none>
2026-04-15T21:34:29.316 [DEBUG] [Thread-26127] [transport.py] [_log()] kex follows: False
2026-04-15T21:34:29.316 [DEBUG] [Thread-26127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:34:29.316 [DEBUG] [Thread-26127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:34:29.316 [DEBUG] [Thread-26127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:34:29.316 [DEBUG] [Thread-26127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:34:29.316 [DEBUG] [Thread-26127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:34:29.316 [DEBUG] [Thread-26127] [transport.py] [_log()] Compression: none
2026-04-15T21:34:29.316 [DEBUG] [Thread-26127] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:34:29.372 [DEBUG] [Thread-26127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:34:29.372 [DEBUG] [Thread-26127] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:34:29.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:34:29.373 [DEBUG] [Thread-26127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:34:29.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:34:29.429 [DEBUG] [Thread-26127] [transport.py] [_log()] userauth is OK
2026-04-15T21:34:29.429 [DEBUG] [Thread-26127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:34:29.429 [DEBUG] [Thread-26127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:34:29.429 [DEBUG] [Thread-26127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:34:29.429 [DEBUG] [Thread-26127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:34:29.453 [INFO] [Thread-26127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:34:29.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:34:29.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:34:30.282 [DEBUG] [Thread-26127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:34:30.282 [DEBUG] [Thread-26127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:34:30.330 [DEBUG] [Thread-26127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:34:30.331 [DEBUG] [Thread-26127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:34:30.340 [DEBUG] [Thread-26127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:34:30.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:34:30.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')
2026-04-15T21:34:30.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
2026-04-15T21:34:30.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:34:30.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:34:30.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:34:30.374 [DEBUG] [Thread-26127] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:34:37.466 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:34:41.129 [DEBUG] [Thread-26129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:34:42.193 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:34:45.238 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:34:49.994 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:34:49.996 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:34:51.605 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:34:56.169 [DEBUG] [Thread-26130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:35:00.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:35:00.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:35:00.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
2026-04-15T21:35:01.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 34, 54), 4.09352, 75.6131, 0.0, 10.9757, 9.8203, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:35:01.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:34:54
2026-04-15T21:35:02.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:35:02.510 [DEBUG] [Thread-26131] [transport.py] [_log()] starting thread (client mode): 0xee993400
2026-04-15T21:35:02.510 [DEBUG] [Thread-26131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:35:02.531 [DEBUG] [Thread-26131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:35:02.531 [INFO] [Thread-26131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:35:02.534 [DEBUG] [Thread-26131] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:35:02.534 [DEBUG] [Thread-26131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:35:02.534 [DEBUG] [Thread-26131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:35:02.535 [DEBUG] [Thread-26131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:35:02.535 [DEBUG] [Thread-26131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:35:02.535 [DEBUG] [Thread-26131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:35:02.535 [DEBUG] [Thread-26131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:35:02.535 [DEBUG] [Thread-26131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:35:02.535 [DEBUG] [Thread-26131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:35:02.535 [DEBUG] [Thread-26131] [transport.py] [_log()] client lang: <none>
2026-04-15T21:35:02.535 [DEBUG] [Thread-26131] [transport.py] [_log()] server lang: <none>
2026-04-15T21:35:02.535 [DEBUG] [Thread-26131] [transport.py] [_log()] kex follows: False
2026-04-15T21:35:02.535 [DEBUG] [Thread-26131] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:35:02.535 [DEBUG] [Thread-26131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:35:02.536 [DEBUG] [Thread-26131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:35:02.536 [DEBUG] [Thread-26131] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:35:02.536 [DEBUG] [Thread-26131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:35:02.536 [DEBUG] [Thread-26131] [transport.py] [_log()] Compression: none
2026-04-15T21:35:02.536 [DEBUG] [Thread-26131] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:35:02.556 [DEBUG] [Thread-26131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:35:02.556 [DEBUG] [Thread-26131] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:35:02.556 [DEBUG] [Thread-26131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:35:02.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:35:02.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:35:02.557 [DEBUG] [Thread-26131] [transport.py] [_log()] userauth is OK
2026-04-15T21:35:02.558 [DEBUG] [Thread-26131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:35:02.558 [DEBUG] [Thread-26131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:35:02.558 [DEBUG] [Thread-26131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:35:02.558 [DEBUG] [Thread-26131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:35:02.576 [INFO] [Thread-26131] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:35:02.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:35:03.518 [DEBUG] [Thread-26131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:35:03.518 [DEBUG] [Thread-26131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:35:03.518 [DEBUG] [Thread-26131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:35:03.558 [DEBUG] [Thread-26131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:35:03.559 [DEBUG] [Thread-26131] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:35:03.560 [DEBUG] [Thread-26131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:35:03.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:35:03.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:35:03.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:35:03.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:35:03.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:35:03.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:35:03.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:35:03.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:35:03.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:35:03.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.815408 -999.00  +10.20   6.69     77   +6.40 1 1 1 1 1     0    0 4.52 26.24 ZNESW 7.1 6.7 68.6 8.7 10.4 -24.5 10.4 -23.2 10.1 -21.2 10.3 -23.2
2026-04-15T21:35:03.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:35:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:35:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.815408
2026-04-15T21:35:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:35:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:35:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:35:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:35:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:35:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:34:54', tmtdew=4.09352, humidity=75.6131, cloud=0.0, wind=10.9757, temperature=9.8203, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:34:11.251', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.020749999999999602, -0.08375000000000021, -0.05250000000000021, -0.06449999999999889, 0.034250000000000114, -0.009999999999999787, -0.027749999999999275, -0.002500000000001279, -0.024499999999999744, -0.020749999999999602, -0.03850000000000087, 0.03599999999999959, -0.0012500000000006395, 0.02049999999999841, -0.0129999999999999, 0.021750000000000824, -0.016500000000000625, -0.021000000000000796, 0.018749999999998934, 0.03999999999999915, 0.022749999999998494, -0.010749999999999815, 0.03524999999999956, 0.037499999999999645, -0.04299999999999926, 0.015249999999999986, 0.0045000000000001705, 0.03249999999999886, 0.0070000000000014495, 0.03900000000000148, 0.017000000000001236, -0.0012500000000006395], zp_timestamp='2026-04-15T19:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:35:03.584 [DEBUG] [Thread-26131] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:35:03.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:35:03.799 [DEBUG] [Thread-26134] [transport.py] [_log()] starting thread (client mode): 0xee991300
2026-04-15T21:35:03.799 [DEBUG] [Thread-26134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:35:03.814 [DEBUG] [Thread-26134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:35:03.814 [INFO] [Thread-26134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:35:03.822 [DEBUG] [Thread-26134] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:35:03.822 [DEBUG] [Thread-26134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:35:03.822 [DEBUG] [Thread-26134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:35:03.822 [DEBUG] [Thread-26134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:35:03.822 [DEBUG] [Thread-26134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:35:03.822 [DEBUG] [Thread-26134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:35:03.822 [DEBUG] [Thread-26134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:35:03.822 [DEBUG] [Thread-26134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:35:03.823 [DEBUG] [Thread-26134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:35:03.823 [DEBUG] [Thread-26134] [transport.py] [_log()] client lang: <none>
2026-04-15T21:35:03.823 [DEBUG] [Thread-26134] [transport.py] [_log()] server lang: <none>
2026-04-15T21:35:03.823 [DEBUG] [Thread-26134] [transport.py] [_log()] kex follows: False
2026-04-15T21:35:03.823 [DEBUG] [Thread-26134] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:35:03.823 [DEBUG] [Thread-26134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:35:03.823 [DEBUG] [Thread-26134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:35:03.823 [DEBUG] [Thread-26134] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:35:03.823 [DEBUG] [Thread-26134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:35:03.823 [DEBUG] [Thread-26134] [transport.py] [_log()] Compression: none
2026-04-15T21:35:03.823 [DEBUG] [Thread-26134] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:35:03.882 [DEBUG] [Thread-26134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:35:03.883 [DEBUG] [Thread-26134] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:35:03.883 [DEBUG] [Thread-26134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:35:03.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:35:03.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:35:03.938 [DEBUG] [Thread-26134] [transport.py] [_log()] userauth is OK
2026-04-15T21:35:03.938 [DEBUG] [Thread-26134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:35:03.938 [DEBUG] [Thread-26134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:35:03.938 [DEBUG] [Thread-26134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:35:03.939 [DEBUG] [Thread-26134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:35:03.964 [INFO] [Thread-26134] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:35:03.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:35:03.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:35:04.796 [DEBUG] [Thread-26134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:35:04.796 [DEBUG] [Thread-26134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:35:04.844 [DEBUG] [Thread-26134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:35:04.844 [DEBUG] [Thread-26134] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:35:04.853 [DEBUG] [Thread-26134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:35:04.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:35:04.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')
2026-04-15T21:35:04.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
2026-04-15T21:35:04.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:35:04.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:35:04.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:35:04.890 [DEBUG] [Thread-26134] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:35:11.200 [DEBUG] [Thread-26136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:35:17.202 [DEBUG] [Thread-23763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:35:18.337 [DEBUG] [Thread-26137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:35:26.240 [DEBUG] [Thread-26138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:35:34.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:35:34.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:35: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
2026-04-15T21:35:36.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 35, 29), 4.49623, 73.8066, 0.0, 8.69976, 9.94361, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:35:36.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:35:29
2026-04-15T21:35:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:35:36.999 [DEBUG] [Thread-26139] [transport.py] [_log()] starting thread (client mode): 0xee992770
2026-04-15T21:35:36.999 [DEBUG] [Thread-26139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:35:37.019 [DEBUG] [Thread-26139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:35:37.019 [INFO] [Thread-26139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:35:37.022 [DEBUG] [Thread-26139] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:35:37.022 [DEBUG] [Thread-26139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:35:37.022 [DEBUG] [Thread-26139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:35:37.022 [DEBUG] [Thread-26139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:35:37.023 [DEBUG] [Thread-26139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:35:37.023 [DEBUG] [Thread-26139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:35:37.023 [DEBUG] [Thread-26139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:35:37.023 [DEBUG] [Thread-26139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:35:37.023 [DEBUG] [Thread-26139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:35:37.023 [DEBUG] [Thread-26139] [transport.py] [_log()] client lang: <none>
2026-04-15T21:35:37.023 [DEBUG] [Thread-26139] [transport.py] [_log()] server lang: <none>
2026-04-15T21:35:37.023 [DEBUG] [Thread-26139] [transport.py] [_log()] kex follows: False
2026-04-15T21:35:37.023 [DEBUG] [Thread-26139] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:35:37.023 [DEBUG] [Thread-26139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:35:37.023 [DEBUG] [Thread-26139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:35:37.024 [DEBUG] [Thread-26139] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:35:37.024 [DEBUG] [Thread-26139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:35:37.024 [DEBUG] [Thread-26139] [transport.py] [_log()] Compression: none
2026-04-15T21:35:37.024 [DEBUG] [Thread-26139] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:35:37.038 [DEBUG] [Thread-26139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:35:37.039 [DEBUG] [Thread-26139] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:35:37.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:35:37.039 [DEBUG] [Thread-26139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:35:37.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:35:37.080 [DEBUG] [Thread-26139] [transport.py] [_log()] userauth is OK
2026-04-15T21:35:37.081 [DEBUG] [Thread-26139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:35:37.081 [DEBUG] [Thread-26139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:35:37.081 [DEBUG] [Thread-26139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:35:37.081 [DEBUG] [Thread-26139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:35:37.106 [INFO] [Thread-26139] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:35:37.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:35:37.913 [DEBUG] [Thread-26139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:35:37.914 [DEBUG] [Thread-26139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:35:37.914 [DEBUG] [Thread-26139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:35:37.955 [DEBUG] [Thread-26139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:35:37.955 [DEBUG] [Thread-26139] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:35:37.958 [DEBUG] [Thread-26139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:35:37.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:35:37.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:35:37.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:35:37.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:35:37.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:35:37.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:35:37.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:35:37.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:35:37.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:35:37.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.815756 -999.00  +10.20   5.70     77   +6.50 1 1 1 1 1     0    0 4.55 27.06 ZNESW 6.1 5.7 60.4 8.5 10.4 -24.6 10.2 -23.3 10.0 -21.1 10.3 -23.2
2026-04-15T21:35:37.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:35:37.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:35:37.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.815756
2026-04-15T21:35:37.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:35:37.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:35:37.982 [DEBUG] [Thread-26139] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:35:37.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:35:37.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:35:37.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:35:37.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:35:29', tmtdew=4.49623, humidity=73.8066, cloud=0.0, wind=8.69976, temperature=9.94361, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:34:41.318', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03375000000000128, -0.021749999999999048, -0.07474999999999987, -0.057500000000000995, -0.0259999999999998, 0.0007500000000000284, -0.030000000000001137, 0.0022500000000000853, -0.015499999999999403, -0.016000000000000014, -0.030250000000000554, -0.03049999999999997, 0.019000000000000128, -0.00975000000000037, 0.016000000000000014, -0.025000000000000355, 0.036249999999999005, -0.009500000000000952, 0.0005000000000006111, 0.025249999999999773, 0.026999999999999247, 0.03474999999999895, 0.02525000000000155, 0.019750000000000156, 0.03200000000000003, -0.04349999999999987, 0.029749999999999943, -0.03049999999999997, 0.04800000000000004, -0.004999999999999005, 0.049000000000001265, 0.040500000000001535, 0.004749999999999588], zp_timestamp='2026-04-15T19:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:35:38.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:35:38.238 [DEBUG] [Thread-26142] [transport.py] [_log()] starting thread (client mode): 0xee9925c0
2026-04-15T21:35:38.238 [DEBUG] [Thread-26142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:35:38.252 [DEBUG] [Thread-26142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:35:38.252 [INFO] [Thread-26142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:35:38.260 [DEBUG] [Thread-26142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:35:38.260 [DEBUG] [Thread-26142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:35:38.260 [DEBUG] [Thread-26142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:35:38.260 [DEBUG] [Thread-26142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:35:38.260 [DEBUG] [Thread-26142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:35:38.260 [DEBUG] [Thread-26142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:35:38.260 [DEBUG] [Thread-26142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:35:38.260 [DEBUG] [Thread-26142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:35:38.260 [DEBUG] [Thread-26142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:35:38.261 [DEBUG] [Thread-26142] [transport.py] [_log()] client lang: <none>
2026-04-15T21:35:38.261 [DEBUG] [Thread-26142] [transport.py] [_log()] server lang: <none>
2026-04-15T21:35:38.261 [DEBUG] [Thread-26142] [transport.py] [_log()] kex follows: False
2026-04-15T21:35:38.261 [DEBUG] [Thread-26142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:35:38.261 [DEBUG] [Thread-26142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:35:38.261 [DEBUG] [Thread-26142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:35:38.261 [DEBUG] [Thread-26142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:35:38.261 [DEBUG] [Thread-26142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:35:38.261 [DEBUG] [Thread-26142] [transport.py] [_log()] Compression: none
2026-04-15T21:35:38.261 [DEBUG] [Thread-26142] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:35:38.317 [DEBUG] [Thread-26142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:35:38.317 [DEBUG] [Thread-26142] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:35:38.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:35:38.318 [DEBUG] [Thread-26142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:35:38.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:35:38.374 [DEBUG] [Thread-26142] [transport.py] [_log()] userauth is OK
2026-04-15T21:35:38.374 [DEBUG] [Thread-26142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:35:38.375 [DEBUG] [Thread-26142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:35:38.375 [DEBUG] [Thread-26142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:35:38.375 [DEBUG] [Thread-26142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:35:38.400 [INFO] [Thread-26142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:35:38.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:35:38.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:35:39.212 [DEBUG] [Thread-26142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:35:39.212 [DEBUG] [Thread-26142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:35:39.259 [DEBUG] [Thread-26142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:35:39.260 [DEBUG] [Thread-26142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:35:39.268 [DEBUG] [Thread-26142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:35:39.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:35:39.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')
2026-04-15T21:35:39.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
2026-04-15T21:35:39.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:35:39.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:35:39.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:35:39.305 [DEBUG] [Thread-26142] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:35:41.268 [DEBUG] [Thread-26144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:35:50.195 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:35:50.196 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:35:56.314 [DEBUG] [Thread-26145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:36:09.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:36:09.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:36:09.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
2026-04-15T21:36:10.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 35, 29), 4.49623, 73.8066, 0.0, 8.69976, 9.94361, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:36:10.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:35:29
2026-04-15T21:36:11.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:36:11.341 [DEBUG] [Thread-26146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:36:11.485 [DEBUG] [Thread-26147] [transport.py] [_log()] starting thread (client mode): 0xee993b80
2026-04-15T21:36:11.485 [DEBUG] [Thread-26147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:36:11.507 [DEBUG] [Thread-26147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:36:11.507 [INFO] [Thread-26147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:36:11.511 [DEBUG] [Thread-26147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:36:11.511 [DEBUG] [Thread-26147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:36:11.511 [DEBUG] [Thread-26147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:36:11.511 [DEBUG] [Thread-26147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:36:11.511 [DEBUG] [Thread-26147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:36:11.511 [DEBUG] [Thread-26147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:36:11.511 [DEBUG] [Thread-26147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:36:11.511 [DEBUG] [Thread-26147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:36:11.511 [DEBUG] [Thread-26147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:36:11.511 [DEBUG] [Thread-26147] [transport.py] [_log()] client lang: <none>
2026-04-15T21:36:11.512 [DEBUG] [Thread-26147] [transport.py] [_log()] server lang: <none>
2026-04-15T21:36:11.512 [DEBUG] [Thread-26147] [transport.py] [_log()] kex follows: False
2026-04-15T21:36:11.512 [DEBUG] [Thread-26147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:36:11.512 [DEBUG] [Thread-26147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:36:11.512 [DEBUG] [Thread-26147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:36:11.512 [DEBUG] [Thread-26147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:36:11.512 [DEBUG] [Thread-26147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:36:11.512 [DEBUG] [Thread-26147] [transport.py] [_log()] Compression: none
2026-04-15T21:36:11.512 [DEBUG] [Thread-26147] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:36:11.528 [DEBUG] [Thread-26147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:36:11.529 [DEBUG] [Thread-26147] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:36:11.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:36:11.529 [DEBUG] [Thread-26147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:36:11.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:36:11.530 [DEBUG] [Thread-26147] [transport.py] [_log()] userauth is OK
2026-04-15T21:36:11.530 [DEBUG] [Thread-26147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:36:11.531 [DEBUG] [Thread-26147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:36:11.531 [DEBUG] [Thread-26147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:36:11.531 [DEBUG] [Thread-26147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:36:11.557 [INFO] [Thread-26147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:36:11.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:36:12.323 [DEBUG] [Thread-26147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:36:12.323 [DEBUG] [Thread-26147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:36:12.323 [DEBUG] [Thread-26147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:36:12.364 [DEBUG] [Thread-26147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:36:12.364 [DEBUG] [Thread-26147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:36:12.367 [DEBUG] [Thread-26147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:36:12.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:36:12.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:36:12.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:36:12.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:36:12.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:36:12.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:36:12.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:36:12.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:36:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:36:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.816450 -999.00  +10.20   7.68     77   +6.40 1 1 1 1 1     0    0 4.59 26.66 ZNESW 7.0 7.7 72.6 8.3 10.4 -24.5 10.3 -23.3 10.0 -21.1 10.3 -23.2
2026-04-15T21:36:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:36:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:36:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.816450
2026-04-15T21:36:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:36:12.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:36:12.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:36:12.393 [DEBUG] [Thread-26147] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:36:12.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:36:12.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:36:12.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:35:29', tmtdew=4.49623, humidity=73.8066, cloud=0.0, wind=8.69976, temperature=9.94361, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:35:41.280', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03375000000000128, -0.021749999999999048, -0.07474999999999987, -0.057500000000000995, -0.0259999999999998, 0.0007500000000000284, -0.030000000000001137, 0.0022500000000000853, -0.015499999999999403, -0.016000000000000014, -0.030250000000000554, -0.03049999999999997, 0.019000000000000128, -0.00975000000000037, 0.016000000000000014, -0.025000000000000355, 0.036249999999999005, -0.009500000000000952, 0.0005000000000006111, 0.025249999999999773, 0.026999999999999247, 0.03474999999999895, 0.02525000000000155, 0.019750000000000156, 0.03200000000000003, -0.04349999999999987, 0.029749999999999943, -0.03049999999999997, 0.04800000000000004, -0.004999999999999005, 0.049000000000001265, 0.040500000000001535, 0.004749999999999588], zp_timestamp='2026-04-15T19:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:36:12.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:36:12.648 [DEBUG] [Thread-26150] [transport.py] [_log()] starting thread (client mode): 0xf13e06d0
2026-04-15T21:36:12.648 [DEBUG] [Thread-26150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:36:12.666 [DEBUG] [Thread-26150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:36:12.666 [INFO] [Thread-26150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:36:12.673 [DEBUG] [Thread-26150] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:36:12.674 [DEBUG] [Thread-26150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:36:12.674 [DEBUG] [Thread-26150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:36:12.674 [DEBUG] [Thread-26150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:36:12.674 [DEBUG] [Thread-26150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:36:12.674 [DEBUG] [Thread-26150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:36:12.674 [DEBUG] [Thread-26150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:36:12.674 [DEBUG] [Thread-26150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:36:12.674 [DEBUG] [Thread-26150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:36:12.674 [DEBUG] [Thread-26150] [transport.py] [_log()] client lang: <none>
2026-04-15T21:36:12.674 [DEBUG] [Thread-26150] [transport.py] [_log()] server lang: <none>
2026-04-15T21:36:12.674 [DEBUG] [Thread-26150] [transport.py] [_log()] kex follows: False
2026-04-15T21:36:12.674 [DEBUG] [Thread-26150] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:36:12.675 [DEBUG] [Thread-26150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:36:12.675 [DEBUG] [Thread-26150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:36:12.675 [DEBUG] [Thread-26150] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:36:12.675 [DEBUG] [Thread-26150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:36:12.675 [DEBUG] [Thread-26150] [transport.py] [_log()] Compression: none
2026-04-15T21:36:12.675 [DEBUG] [Thread-26150] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:36:12.730 [DEBUG] [Thread-26150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:36:12.730 [DEBUG] [Thread-26150] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:36:12.731 [DEBUG] [Thread-26150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:36:12.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:36:12.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:36:12.787 [DEBUG] [Thread-26150] [transport.py] [_log()] userauth is OK
2026-04-15T21:36:12.787 [DEBUG] [Thread-26150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:36:12.787 [DEBUG] [Thread-26150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:36:12.787 [DEBUG] [Thread-26150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:36:12.788 [DEBUG] [Thread-26150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:36:12.812 [INFO] [Thread-26150] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:36:12.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:36:12.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:36:13.661 [DEBUG] [Thread-26150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:36:13.661 [DEBUG] [Thread-26150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:36:13.709 [DEBUG] [Thread-26150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:36:13.709 [DEBUG] [Thread-26150] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:36:13.718 [DEBUG] [Thread-26150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:36:13.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:36:13.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')
2026-04-15T21:36:13.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
2026-04-15T21:36:13.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:36:13.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:36:13.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:36:13.752 [DEBUG] [Thread-26150] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:36:18.490 [DEBUG] [Thread-26152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:36:26.368 [DEBUG] [Thread-26153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:36:41.404 [DEBUG] [Thread-26154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:36:43.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:36:43.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:36:43.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
2026-04-15T21:36:45.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 36, 4), 4.49359, 73.8232, 0.0, 8.6292, 9.9602, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:36:45.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:36:04
2026-04-15T21:36:45.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:36:45.938 [DEBUG] [Thread-26155] [transport.py] [_log()] starting thread (client mode): 0xf13e2fb0
2026-04-15T21:36:45.938 [DEBUG] [Thread-26155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:36:45.958 [DEBUG] [Thread-26155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:36:45.958 [INFO] [Thread-26155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:36:45.961 [DEBUG] [Thread-26155] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:36:45.961 [DEBUG] [Thread-26155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:36:45.961 [DEBUG] [Thread-26155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:36:45.962 [DEBUG] [Thread-26155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:36:45.962 [DEBUG] [Thread-26155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:36:45.962 [DEBUG] [Thread-26155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:36:45.962 [DEBUG] [Thread-26155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:36:45.962 [DEBUG] [Thread-26155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:36:45.962 [DEBUG] [Thread-26155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:36:45.962 [DEBUG] [Thread-26155] [transport.py] [_log()] client lang: <none>
2026-04-15T21:36:45.962 [DEBUG] [Thread-26155] [transport.py] [_log()] server lang: <none>
2026-04-15T21:36:45.962 [DEBUG] [Thread-26155] [transport.py] [_log()] kex follows: False
2026-04-15T21:36:45.962 [DEBUG] [Thread-26155] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:36:45.962 [DEBUG] [Thread-26155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:36:45.962 [DEBUG] [Thread-26155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:36:45.963 [DEBUG] [Thread-26155] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:36:45.963 [DEBUG] [Thread-26155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:36:45.963 [DEBUG] [Thread-26155] [transport.py] [_log()] Compression: none
2026-04-15T21:36:45.963 [DEBUG] [Thread-26155] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:36:45.979 [DEBUG] [Thread-26155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:36:45.980 [DEBUG] [Thread-26155] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:36:45.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:36:45.980 [DEBUG] [Thread-26155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:36:45.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:36:45.982 [DEBUG] [Thread-26155] [transport.py] [_log()] userauth is OK
2026-04-15T21:36:45.982 [DEBUG] [Thread-26155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:36:45.982 [DEBUG] [Thread-26155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:36:45.982 [DEBUG] [Thread-26155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:36:45.982 [DEBUG] [Thread-26155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:36:46.002 [INFO] [Thread-26155] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:36:46.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:36:46.808 [DEBUG] [Thread-26155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:36:46.808 [DEBUG] [Thread-26155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:36:46.809 [DEBUG] [Thread-26155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:36:46.849 [DEBUG] [Thread-26155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:36:46.849 [DEBUG] [Thread-26155] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:36:46.851 [DEBUG] [Thread-26155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:36:46.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:36:46.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:36:46.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:36:46.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:36:46.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:36:46.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:36:46.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:36:46.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:36:46.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:36:46.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.816797 -999.00  +10.20   7.88     77   +6.40 1 1 1 1 1     0    0 4.58 26.66 ZNESW 7.2 7.9 64.0 8.2 10.4 -24.4 10.3 -23.2 10.1 -21.2 10.3 -23.2
2026-04-15T21:36:46.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:36:46.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:36:46.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.816797
2026-04-15T21:36:46.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:36:46.874 [DEBUG] [Thread-26155] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:36:46.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:36:46.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:36:46.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:36:46.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:36:46.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:36:04', tmtdew=4.49359, humidity=73.8232, cloud=0.0, wind=8.6292, temperature=9.9602, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:36:11.261', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03375000000000128, -0.021749999999999048, -0.07474999999999987, -0.057500000000000995, -0.0259999999999998, 0.0007500000000000284, -0.030000000000001137, 0.0022500000000000853, -0.015499999999999403, -0.016000000000000014, -0.030250000000000554, -0.03049999999999997, 0.019000000000000128, -0.00975000000000037, 0.016000000000000014, -0.025000000000000355, 0.036249999999999005, -0.009500000000000952, 0.0005000000000006111, 0.025249999999999773, 0.026999999999999247, 0.03474999999999895, 0.02525000000000155, 0.019750000000000156, 0.03200000000000003, -0.04349999999999987, 0.029749999999999943, -0.03049999999999997, 0.04800000000000004, -0.004999999999999005, 0.049000000000001265, 0.040500000000001535, 0.004749999999999588], zp_timestamp='2026-04-15T19:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:36:47.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:36:47.117 [DEBUG] [Thread-26158] [transport.py] [_log()] starting thread (client mode): 0xf1365a80
2026-04-15T21:36:47.118 [DEBUG] [Thread-26158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:36:47.132 [DEBUG] [Thread-26158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:36:47.132 [INFO] [Thread-26158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:36:47.139 [DEBUG] [Thread-26158] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:36:47.139 [DEBUG] [Thread-26158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:36:47.140 [DEBUG] [Thread-26158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:36:47.140 [DEBUG] [Thread-26158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:36:47.140 [DEBUG] [Thread-26158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:36:47.140 [DEBUG] [Thread-26158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:36:47.140 [DEBUG] [Thread-26158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:36:47.140 [DEBUG] [Thread-26158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:36:47.140 [DEBUG] [Thread-26158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:36:47.140 [DEBUG] [Thread-26158] [transport.py] [_log()] client lang: <none>
2026-04-15T21:36:47.140 [DEBUG] [Thread-26158] [transport.py] [_log()] server lang: <none>
2026-04-15T21:36:47.140 [DEBUG] [Thread-26158] [transport.py] [_log()] kex follows: False
2026-04-15T21:36:47.140 [DEBUG] [Thread-26158] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:36:47.140 [DEBUG] [Thread-26158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:36:47.140 [DEBUG] [Thread-26158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:36:47.141 [DEBUG] [Thread-26158] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:36:47.141 [DEBUG] [Thread-26158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:36:47.141 [DEBUG] [Thread-26158] [transport.py] [_log()] Compression: none
2026-04-15T21:36:47.141 [DEBUG] [Thread-26158] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:36:47.199 [DEBUG] [Thread-26158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:36:47.199 [DEBUG] [Thread-26158] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:36:47.200 [DEBUG] [Thread-26158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:36:47.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:36:47.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:36:47.256 [DEBUG] [Thread-26158] [transport.py] [_log()] userauth is OK
2026-04-15T21:36:47.256 [DEBUG] [Thread-26158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:36:47.256 [DEBUG] [Thread-26158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:36:47.256 [DEBUG] [Thread-26158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:36:47.256 [DEBUG] [Thread-26158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:36:47.281 [INFO] [Thread-26158] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:36:47.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:36:47.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:36:47.323 [DEBUG] [Thread-23763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:36:48.099 [DEBUG] [Thread-26158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:36:48.100 [DEBUG] [Thread-26158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:36:48.146 [DEBUG] [Thread-26158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:36:48.147 [DEBUG] [Thread-26158] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:36:48.155 [DEBUG] [Thread-26158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:36:48.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:36:48.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')
2026-04-15T21:36:48.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
2026-04-15T21:36:48.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:36:48.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:36:48.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:36:48.188 [DEBUG] [Thread-26158] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:36:50.396 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:36:50.397 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:36:56.432 [DEBUG] [Thread-26160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:37:11.470 [DEBUG] [Thread-26161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:37:18.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:37:18.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:37:18.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
2026-04-15T21:37:18.637 [DEBUG] [Thread-26162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:37:19.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 36, 40), 4.08084, 75.6796, 0.0, 11.7871, 9.8204, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:37:19.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:36:40
2026-04-15T21:37:19.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:37:20.396 [DEBUG] [Thread-26163] [transport.py] [_log()] starting thread (client mode): 0xf1366c20
2026-04-15T21:37:20.396 [DEBUG] [Thread-26163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:37:20.415 [DEBUG] [Thread-26163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:37:20.415 [INFO] [Thread-26163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:37:20.419 [DEBUG] [Thread-26163] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:37:20.419 [DEBUG] [Thread-26163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:37:20.419 [DEBUG] [Thread-26163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:37:20.419 [DEBUG] [Thread-26163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:37:20.419 [DEBUG] [Thread-26163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:37:20.419 [DEBUG] [Thread-26163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:37:20.419 [DEBUG] [Thread-26163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:37:20.419 [DEBUG] [Thread-26163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:37:20.419 [DEBUG] [Thread-26163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:37:20.419 [DEBUG] [Thread-26163] [transport.py] [_log()] client lang: <none>
2026-04-15T21:37:20.419 [DEBUG] [Thread-26163] [transport.py] [_log()] server lang: <none>
2026-04-15T21:37:20.420 [DEBUG] [Thread-26163] [transport.py] [_log()] kex follows: False
2026-04-15T21:37:20.420 [DEBUG] [Thread-26163] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:37:20.420 [DEBUG] [Thread-26163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:37:20.420 [DEBUG] [Thread-26163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:37:20.420 [DEBUG] [Thread-26163] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:37:20.420 [DEBUG] [Thread-26163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:37:20.420 [DEBUG] [Thread-26163] [transport.py] [_log()] Compression: none
2026-04-15T21:37:20.420 [DEBUG] [Thread-26163] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:37:20.440 [DEBUG] [Thread-26163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:37:20.440 [DEBUG] [Thread-26163] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:37:20.440 [DEBUG] [Thread-26163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:37:20.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:37:20.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:37:20.442 [DEBUG] [Thread-26163] [transport.py] [_log()] userauth is OK
2026-04-15T21:37:20.442 [DEBUG] [Thread-26163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:37:20.442 [DEBUG] [Thread-26163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:37:20.442 [DEBUG] [Thread-26163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:37:20.442 [DEBUG] [Thread-26163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:37:20.461 [INFO] [Thread-26163] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:37:20.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:37:21.259 [DEBUG] [Thread-26163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:37:21.260 [DEBUG] [Thread-26163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:37:21.260 [DEBUG] [Thread-26163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:37:21.301 [DEBUG] [Thread-26163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:37:21.301 [DEBUG] [Thread-26163] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:37:21.304 [DEBUG] [Thread-26163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:37:21.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:37:21.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:37:21.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:37:21.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:37:21.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:37:21.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:37:21.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:37:21.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:37:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:37:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.817145 -999.00  +10.20   4.40     77   +6.40 1 1 1 1 1     0    0 4.47 25.08 ZNESW 4.5 4.4 73.6 7.7 10.4 -24.5 10.3 -23.1 10.0 -21.0 10.3 -23.2
2026-04-15T21:37:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:37:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:37:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.817145
2026-04-15T21:37:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:37:21.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:37:21.333 [DEBUG] [Thread-26163] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:37:21.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:37:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:37:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:37:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:36:40', tmtdew=4.08084, humidity=75.6796, cloud=0.0, wind=11.7871, temperature=9.8204, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:36:41.328', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03375000000000128, -0.021749999999999048, -0.07474999999999987, -0.057500000000000995, -0.0259999999999998, 0.0007500000000000284, -0.030000000000001137, 0.0022500000000000853, -0.015499999999999403, -0.016000000000000014, -0.030250000000000554, -0.03049999999999997, 0.019000000000000128, -0.00975000000000037, 0.016000000000000014, -0.025000000000000355, 0.036249999999999005, -0.009500000000000952, 0.0005000000000006111, 0.025249999999999773, 0.026999999999999247, 0.03474999999999895, 0.02525000000000155, 0.019750000000000156, 0.03200000000000003, -0.04349999999999987, 0.029749999999999943, -0.03049999999999997, 0.04800000000000004, -0.004999999999999005, 0.049000000000001265, 0.040500000000001535, 0.004749999999999588], zp_timestamp='2026-04-15T19:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:37:21.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:37:21.589 [DEBUG] [Thread-26166] [transport.py] [_log()] starting thread (client mode): 0xf13e3070
2026-04-15T21:37:21.589 [DEBUG] [Thread-26166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:37:21.606 [DEBUG] [Thread-26166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:37:21.606 [INFO] [Thread-26166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:37:21.616 [DEBUG] [Thread-26166] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:37:21.616 [DEBUG] [Thread-26166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:37:21.616 [DEBUG] [Thread-26166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:37:21.616 [DEBUG] [Thread-26166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:37:21.616 [DEBUG] [Thread-26166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:37:21.616 [DEBUG] [Thread-26166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:37:21.616 [DEBUG] [Thread-26166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:37:21.616 [DEBUG] [Thread-26166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:37:21.617 [DEBUG] [Thread-26166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:37:21.617 [DEBUG] [Thread-26166] [transport.py] [_log()] client lang: <none>
2026-04-15T21:37:21.617 [DEBUG] [Thread-26166] [transport.py] [_log()] server lang: <none>
2026-04-15T21:37:21.617 [DEBUG] [Thread-26166] [transport.py] [_log()] kex follows: False
2026-04-15T21:37:21.617 [DEBUG] [Thread-26166] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:37:21.617 [DEBUG] [Thread-26166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:37:21.617 [DEBUG] [Thread-26166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:37:21.617 [DEBUG] [Thread-26166] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:37:21.617 [DEBUG] [Thread-26166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:37:21.617 [DEBUG] [Thread-26166] [transport.py] [_log()] Compression: none
2026-04-15T21:37:21.617 [DEBUG] [Thread-26166] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:37:21.677 [DEBUG] [Thread-26166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:37:21.677 [DEBUG] [Thread-26166] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:37:21.678 [DEBUG] [Thread-26166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:37:21.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:37:21.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:37:21.738 [DEBUG] [Thread-26166] [transport.py] [_log()] userauth is OK
2026-04-15T21:37:21.738 [DEBUG] [Thread-26166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:37:21.739 [DEBUG] [Thread-26166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:37:21.739 [DEBUG] [Thread-26166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:37:21.739 [DEBUG] [Thread-26166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:37:21.766 [INFO] [Thread-26166] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:37:21.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:37:21.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:37:22.602 [DEBUG] [Thread-26166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:37:22.602 [DEBUG] [Thread-26166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:37:22.650 [DEBUG] [Thread-26166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:37:22.650 [DEBUG] [Thread-26166] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:37:22.659 [DEBUG] [Thread-26166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:37:22.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:37:22.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')
2026-04-15T21:37:22.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
2026-04-15T21:37:22.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:37:22.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:37:22.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:37:22.693 [DEBUG] [Thread-26166] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:37:26.498 [DEBUG] [Thread-26168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:37:41.535 [DEBUG] [Thread-26169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:37:50.600 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:37:50.601 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:37:52.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:37:52.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:37:52.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
2026-04-15T21:37:54.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 37, 16), 4.4846, 73.873, 0.0, 8.82324, 10.0268, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:37:54.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:37:16
2026-04-15T21:37:54.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:37:54.846 [DEBUG] [Thread-26170] [transport.py] [_log()] starting thread (client mode): 0xee992110
2026-04-15T21:37:54.846 [DEBUG] [Thread-26170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:37:54.865 [DEBUG] [Thread-26170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:37:54.865 [INFO] [Thread-26170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:37:54.866 [DEBUG] [Thread-26170] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:37:54.866 [DEBUG] [Thread-26170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:37:54.866 [DEBUG] [Thread-26170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:37:54.866 [DEBUG] [Thread-26170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:37:54.866 [DEBUG] [Thread-26170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:37:54.867 [DEBUG] [Thread-26170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:37:54.867 [DEBUG] [Thread-26170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:37:54.867 [DEBUG] [Thread-26170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:37:54.867 [DEBUG] [Thread-26170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:37:54.867 [DEBUG] [Thread-26170] [transport.py] [_log()] client lang: <none>
2026-04-15T21:37:54.867 [DEBUG] [Thread-26170] [transport.py] [_log()] server lang: <none>
2026-04-15T21:37:54.867 [DEBUG] [Thread-26170] [transport.py] [_log()] kex follows: False
2026-04-15T21:37:54.867 [DEBUG] [Thread-26170] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:37:54.867 [DEBUG] [Thread-26170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:37:54.867 [DEBUG] [Thread-26170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:37:54.867 [DEBUG] [Thread-26170] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:37:54.868 [DEBUG] [Thread-26170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:37:54.868 [DEBUG] [Thread-26170] [transport.py] [_log()] Compression: none
2026-04-15T21:37:54.868 [DEBUG] [Thread-26170] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:37:54.878 [DEBUG] [Thread-26170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:37:54.879 [DEBUG] [Thread-26170] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:37:54.879 [DEBUG] [Thread-26170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:37:54.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:37:54.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:37:54.880 [DEBUG] [Thread-26170] [transport.py] [_log()] userauth is OK
2026-04-15T21:37:54.880 [DEBUG] [Thread-26170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:37:54.880 [DEBUG] [Thread-26170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:37:54.881 [DEBUG] [Thread-26170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:37:54.881 [DEBUG] [Thread-26170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:37:54.903 [INFO] [Thread-26170] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:37:54.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:37:55.684 [DEBUG] [Thread-26170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:37:55.685 [DEBUG] [Thread-26170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:37:55.685 [DEBUG] [Thread-26170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:37:55.725 [DEBUG] [Thread-26170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:37:55.725 [DEBUG] [Thread-26170] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:37:55.728 [DEBUG] [Thread-26170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:37:55.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:37:55.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:37:55.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:37:55.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:37:55.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:37:55.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:37:55.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:37:55.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:37:55.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:37:55.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.817492 -999.00  +10.20   5.77     77   +6.50 1 1 1 1 1     0    0 4.46 23.80 ZNESW 7.7 5.8 78.6 7.1 10.5 -24.3 10.4 -23.2 10.1 -21.2 10.3 -23.2
2026-04-15T21:37:55.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:37:55.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:37:55.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.817492
2026-04-15T21:37:55.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:37:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:37:55.751 [DEBUG] [Thread-26170] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:37:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:37:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:37:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:37:55.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:37:16', tmtdew=4.4846, humidity=73.873, cloud=0.0, wind=8.82324, temperature=10.0268, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:37:11.309', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03375000000000128, -0.021749999999999048, -0.07474999999999987, -0.057500000000000995, -0.0259999999999998, 0.0007500000000000284, -0.030000000000001137, 0.0022500000000000853, -0.015499999999999403, -0.016000000000000014, -0.030250000000000554, -0.03049999999999997, 0.019000000000000128, -0.00975000000000037, 0.016000000000000014, -0.025000000000000355, 0.036249999999999005, -0.009500000000000952, 0.0005000000000006111, 0.025249999999999773, 0.026999999999999247, 0.03474999999999895, 0.02525000000000155, 0.019750000000000156, 0.03200000000000003, -0.04349999999999987, 0.029749999999999943, -0.03049999999999997, 0.04800000000000004, -0.004999999999999005, 0.049000000000001265, 0.040500000000001535, 0.004749999999999588], zp_timestamp='2026-04-15T19:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:37:55.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:37:56.008 [DEBUG] [Thread-26173] [transport.py] [_log()] starting thread (client mode): 0xee9924a0
2026-04-15T21:37:56.009 [DEBUG] [Thread-26173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:37:56.022 [DEBUG] [Thread-26173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:37:56.022 [INFO] [Thread-26173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:37:56.029 [DEBUG] [Thread-26173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] client lang: <none>
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] server lang: <none>
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] kex follows: False
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] Compression: none
2026-04-15T21:37:56.030 [DEBUG] [Thread-26173] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:37:56.088 [DEBUG] [Thread-26173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:37:56.089 [DEBUG] [Thread-26173] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:37:56.089 [DEBUG] [Thread-26173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:37:56.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:37:56.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:37:56.145 [DEBUG] [Thread-26173] [transport.py] [_log()] userauth is OK
2026-04-15T21:37:56.145 [DEBUG] [Thread-26173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:37:56.145 [DEBUG] [Thread-26173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:37:56.146 [DEBUG] [Thread-26173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:37:56.146 [DEBUG] [Thread-26173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:37:56.176 [INFO] [Thread-26173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:37:56.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:37:56.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:37:56.565 [DEBUG] [Thread-26175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:37:56.998 [DEBUG] [Thread-26173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:37:56.998 [DEBUG] [Thread-26173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:37:57.045 [DEBUG] [Thread-26173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:37:57.045 [DEBUG] [Thread-26173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:37:57.054 [DEBUG] [Thread-26173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:37:57.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:37: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')
2026-04-15T21:37:57.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') -> 00000000
2026-04-15T21:37:57.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:37:57.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:37:57.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:37:57.085 [DEBUG] [Thread-26173] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:38:11.606 [DEBUG] [Thread-26176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:38:18.783 [DEBUG] [Thread-26177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:38:26.637 [DEBUG] [Thread-26178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:38:27.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:38:27.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:38:27.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
2026-04-15T21:38:28.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 37, 51), 4.0861, 75.6466, 0.0, 11.0462, 9.78738, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:38:28.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:37:51
2026-04-15T21:38:28.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:38:29.256 [DEBUG] [Thread-26179] [transport.py] [_log()] starting thread (client mode): 0xee990ee0
2026-04-15T21:38:29.256 [DEBUG] [Thread-26179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:38:29.277 [DEBUG] [Thread-26179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:38:29.278 [INFO] [Thread-26179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:38:29.281 [DEBUG] [Thread-26179] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:38:29.281 [DEBUG] [Thread-26179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:38:29.281 [DEBUG] [Thread-26179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:38:29.281 [DEBUG] [Thread-26179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:38:29.281 [DEBUG] [Thread-26179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:38:29.281 [DEBUG] [Thread-26179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:38:29.281 [DEBUG] [Thread-26179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:38:29.281 [DEBUG] [Thread-26179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:38:29.281 [DEBUG] [Thread-26179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:38:29.282 [DEBUG] [Thread-26179] [transport.py] [_log()] client lang: <none>
2026-04-15T21:38:29.282 [DEBUG] [Thread-26179] [transport.py] [_log()] server lang: <none>
2026-04-15T21:38:29.282 [DEBUG] [Thread-26179] [transport.py] [_log()] kex follows: False
2026-04-15T21:38:29.282 [DEBUG] [Thread-26179] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:38:29.282 [DEBUG] [Thread-26179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:38:29.282 [DEBUG] [Thread-26179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:38:29.282 [DEBUG] [Thread-26179] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:38:29.282 [DEBUG] [Thread-26179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:38:29.282 [DEBUG] [Thread-26179] [transport.py] [_log()] Compression: none
2026-04-15T21:38:29.282 [DEBUG] [Thread-26179] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:38:29.299 [DEBUG] [Thread-26179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:38:29.299 [DEBUG] [Thread-26179] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:38:29.300 [DEBUG] [Thread-26179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:38:29.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:38:29.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:38:29.301 [DEBUG] [Thread-26179] [transport.py] [_log()] userauth is OK
2026-04-15T21:38:29.301 [DEBUG] [Thread-26179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:38:29.301 [DEBUG] [Thread-26179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:38:29.301 [DEBUG] [Thread-26179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:38:29.301 [DEBUG] [Thread-26179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:38:29.332 [INFO] [Thread-26179] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:38:29.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:38:30.127 [DEBUG] [Thread-26179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:38:30.127 [DEBUG] [Thread-26179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:38:30.127 [DEBUG] [Thread-26179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:38:30.168 [DEBUG] [Thread-26179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:38:30.168 [DEBUG] [Thread-26179] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:38:30.170 [DEBUG] [Thread-26179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:38:30.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:38:30.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:38:30.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:38:30.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:38:30.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:38:30.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:38:30.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:38:30.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:38:30.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:38:30.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.817839 -999.00  +10.30   5.00     77   +6.50 1 1 1 1 1     0    0 4.48 24.45 ZNESW 6.2 5.0 102.0 8.1 10.4 -24.6 10.3 -23.3 10.1 -21.1 10.3 -23.3
2026-04-15T21:38:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:38:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:38:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.817839
2026-04-15T21:38:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:38:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:38:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:38:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:38:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:38:30.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:37:51', tmtdew=4.0861, humidity=75.6466, cloud=0.0, wind=11.0462, temperature=9.78738, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:37:41.290', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03375000000000128, -0.021749999999999048, -0.07474999999999987, -0.057500000000000995, -0.0259999999999998, 0.0007500000000000284, -0.030000000000001137, 0.0022500000000000853, -0.015499999999999403, -0.016000000000000014, -0.030250000000000554, -0.03049999999999997, 0.019000000000000128, -0.00975000000000037, 0.016000000000000014, -0.025000000000000355, 0.036249999999999005, -0.009500000000000952, 0.0005000000000006111, 0.025249999999999773, 0.026999999999999247, 0.03474999999999895, 0.02525000000000155, 0.019750000000000156, 0.03200000000000003, -0.04349999999999987, 0.029749999999999943, -0.03049999999999997, 0.04800000000000004, -0.004999999999999005, 0.049000000000001265, 0.040500000000001535, 0.004749999999999588], zp_timestamp='2026-04-15T19:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:38:30.189 [DEBUG] [Thread-26179] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:38:30.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:38:30.400 [DEBUG] [Thread-26182] [transport.py] [_log()] starting thread (client mode): 0xee9c3730
2026-04-15T21:38:30.400 [DEBUG] [Thread-26182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:38:30.414 [DEBUG] [Thread-26182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:38:30.414 [INFO] [Thread-26182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:38:30.422 [DEBUG] [Thread-26182] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:38:30.422 [DEBUG] [Thread-26182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:38:30.422 [DEBUG] [Thread-26182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:38:30.422 [DEBUG] [Thread-26182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:38:30.422 [DEBUG] [Thread-26182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:38:30.422 [DEBUG] [Thread-26182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:38:30.422 [DEBUG] [Thread-26182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:38:30.422 [DEBUG] [Thread-26182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:38:30.422 [DEBUG] [Thread-26182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:38:30.422 [DEBUG] [Thread-26182] [transport.py] [_log()] client lang: <none>
2026-04-15T21:38:30.422 [DEBUG] [Thread-26182] [transport.py] [_log()] server lang: <none>
2026-04-15T21:38:30.422 [DEBUG] [Thread-26182] [transport.py] [_log()] kex follows: False
2026-04-15T21:38:30.423 [DEBUG] [Thread-26182] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:38:30.423 [DEBUG] [Thread-26182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:38:30.423 [DEBUG] [Thread-26182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:38:30.423 [DEBUG] [Thread-26182] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:38:30.423 [DEBUG] [Thread-26182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:38:30.423 [DEBUG] [Thread-26182] [transport.py] [_log()] Compression: none
2026-04-15T21:38:30.423 [DEBUG] [Thread-26182] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:38:30.480 [DEBUG] [Thread-26182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:38:30.481 [DEBUG] [Thread-26182] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:38:30.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:38:30.481 [DEBUG] [Thread-26182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:38:30.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:38:30.537 [DEBUG] [Thread-26182] [transport.py] [_log()] userauth is OK
2026-04-15T21:38:30.537 [DEBUG] [Thread-26182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:38:30.538 [DEBUG] [Thread-26182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:38:30.538 [DEBUG] [Thread-26182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:38:30.538 [DEBUG] [Thread-26182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:38:30.563 [INFO] [Thread-26182] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:38:30.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:38:30.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:38:31.424 [DEBUG] [Thread-26182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:38:31.425 [DEBUG] [Thread-26182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:38:31.472 [DEBUG] [Thread-26182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:38:31.472 [DEBUG] [Thread-26182] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:38:31.481 [DEBUG] [Thread-26182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:38:31.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:38:31.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')
2026-04-15T21:38:31.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
2026-04-15T21:38:31.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:38:31.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:38:31.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:38:31.518 [DEBUG] [Thread-26182] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:38:32.024 [DEBUG] [Thread-23763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:38:41.668 [DEBUG] [Thread-26184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:38:50.801 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:38:50.802 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:38:56.711 [DEBUG] [Thread-26185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:39:01.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:39:01.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:39:01.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
2026-04-15T21:39:02.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 38, 27), 4.49357, 73.8233, 0.0, 9.70524, 10.0103, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:39:02.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:38:27
2026-04-15T21:39:03.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:39:03.678 [DEBUG] [Thread-26186] [transport.py] [_log()] starting thread (client mode): 0xf1366f20
2026-04-15T21:39:03.679 [DEBUG] [Thread-26186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:39:03.698 [DEBUG] [Thread-26186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:39:03.698 [INFO] [Thread-26186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:39:03.701 [DEBUG] [Thread-26186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:39:03.701 [DEBUG] [Thread-26186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:39:03.701 [DEBUG] [Thread-26186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:39:03.701 [DEBUG] [Thread-26186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:39:03.701 [DEBUG] [Thread-26186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:39:03.702 [DEBUG] [Thread-26186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:39:03.702 [DEBUG] [Thread-26186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:39:03.702 [DEBUG] [Thread-26186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:39:03.702 [DEBUG] [Thread-26186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:39:03.702 [DEBUG] [Thread-26186] [transport.py] [_log()] client lang: <none>
2026-04-15T21:39:03.702 [DEBUG] [Thread-26186] [transport.py] [_log()] server lang: <none>
2026-04-15T21:39:03.702 [DEBUG] [Thread-26186] [transport.py] [_log()] kex follows: False
2026-04-15T21:39:03.702 [DEBUG] [Thread-26186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:39:03.702 [DEBUG] [Thread-26186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:39:03.702 [DEBUG] [Thread-26186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:39:03.703 [DEBUG] [Thread-26186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:39:03.703 [DEBUG] [Thread-26186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:39:03.703 [DEBUG] [Thread-26186] [transport.py] [_log()] Compression: none
2026-04-15T21:39:03.703 [DEBUG] [Thread-26186] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:39:03.719 [DEBUG] [Thread-26186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:39:03.720 [DEBUG] [Thread-26186] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:39:03.720 [DEBUG] [Thread-26186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:39:03.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:39:03.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:39:03.721 [DEBUG] [Thread-26186] [transport.py] [_log()] userauth is OK
2026-04-15T21:39:03.721 [DEBUG] [Thread-26186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:39:03.722 [DEBUG] [Thread-26186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:39:03.722 [DEBUG] [Thread-26186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:39:03.722 [DEBUG] [Thread-26186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:39:03.746 [INFO] [Thread-26186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:39:03.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:39:04.491 [DEBUG] [Thread-26186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:39:04.491 [DEBUG] [Thread-26186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:39:04.491 [DEBUG] [Thread-26186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:39:04.532 [DEBUG] [Thread-26186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:39:04.532 [DEBUG] [Thread-26186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:39:04.535 [DEBUG] [Thread-26186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:39:04.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:39:04.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:39:04.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:39:04.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:39:04.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:39:04.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:39:04.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:39:04.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:39:04.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:39:04.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.818186 -999.00  +10.30   4.88     77   +6.50 1 1 1 1 1     0    0 4.36 22.68 ZNESW 6.2 4.9 103.3 7.5 10.4 -24.4 10.3 -23.3 10.1 -21.2 10.4 -23.2
2026-04-15T21:39:04.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:39:04.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:39:04.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.818186
2026-04-15T21:39:04.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:39:04.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:39:04.561 [DEBUG] [Thread-26186] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:39:04.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:39:04.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:39:04.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:39:04.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:38:27', tmtdew=4.49357, humidity=73.8233, cloud=0.0, wind=9.70524, temperature=10.0103, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:38:11.270', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03375000000000128, -0.021749999999999048, -0.07474999999999987, -0.057500000000000995, -0.0259999999999998, 0.0007500000000000284, -0.030000000000001137, 0.0022500000000000853, -0.015499999999999403, -0.016000000000000014, -0.030250000000000554, -0.03049999999999997, 0.019000000000000128, -0.00975000000000037, 0.016000000000000014, -0.025000000000000355, 0.036249999999999005, -0.009500000000000952, 0.0005000000000006111, 0.025249999999999773, 0.026999999999999247, 0.03474999999999895, 0.02525000000000155, 0.019750000000000156, 0.03200000000000003, -0.04349999999999987, 0.029749999999999943, -0.03049999999999997, 0.04800000000000004, -0.004999999999999005, 0.049000000000001265, 0.040500000000001535, 0.004749999999999588], zp_timestamp='2026-04-15T19:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:39:04.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:39:04.819 [DEBUG] [Thread-26189] [transport.py] [_log()] starting thread (client mode): 0xf13e3d90
2026-04-15T21:39:04.820 [DEBUG] [Thread-26189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:39:04.833 [DEBUG] [Thread-26189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:39:04.833 [INFO] [Thread-26189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:39:04.840 [DEBUG] [Thread-26189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:39:04.840 [DEBUG] [Thread-26189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:39:04.841 [DEBUG] [Thread-26189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:39:04.841 [DEBUG] [Thread-26189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:39:04.841 [DEBUG] [Thread-26189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:39:04.841 [DEBUG] [Thread-26189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:39:04.841 [DEBUG] [Thread-26189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:39:04.841 [DEBUG] [Thread-26189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:39:04.841 [DEBUG] [Thread-26189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:39:04.841 [DEBUG] [Thread-26189] [transport.py] [_log()] client lang: <none>
2026-04-15T21:39:04.841 [DEBUG] [Thread-26189] [transport.py] [_log()] server lang: <none>
2026-04-15T21:39:04.841 [DEBUG] [Thread-26189] [transport.py] [_log()] kex follows: False
2026-04-15T21:39:04.841 [DEBUG] [Thread-26189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:39:04.841 [DEBUG] [Thread-26189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:39:04.841 [DEBUG] [Thread-26189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:39:04.842 [DEBUG] [Thread-26189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:39:04.842 [DEBUG] [Thread-26189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:39:04.842 [DEBUG] [Thread-26189] [transport.py] [_log()] Compression: none
2026-04-15T21:39:04.842 [DEBUG] [Thread-26189] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:39:04.900 [DEBUG] [Thread-26189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:39:04.900 [DEBUG] [Thread-26189] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:39:04.901 [DEBUG] [Thread-26189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:39:04.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:39:04.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:39:04.957 [DEBUG] [Thread-26189] [transport.py] [_log()] userauth is OK
2026-04-15T21:39:04.958 [DEBUG] [Thread-26189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:39:04.958 [DEBUG] [Thread-26189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:39:04.958 [DEBUG] [Thread-26189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:39:04.958 [DEBUG] [Thread-26189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:39:04.981 [INFO] [Thread-26189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:39:04.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:39:04.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:39:05.829 [DEBUG] [Thread-26189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:39:05.830 [DEBUG] [Thread-26189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:39:05.876 [DEBUG] [Thread-26189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:39:05.877 [DEBUG] [Thread-26189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:39:05.885 [DEBUG] [Thread-26189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:39:05.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:39:05.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')
2026-04-15T21:39:05.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') -> 00000000
2026-04-15T21:39:05.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:39:05.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:39:05.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:39:05.917 [DEBUG] [Thread-26189] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:39:11.742 [DEBUG] [Thread-26191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:39:18.945 [DEBUG] [Thread-26192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:39:26.784 [DEBUG] [Thread-26193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:39:35.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:39:35.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:39:35.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
2026-04-15T21:39:37.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 39, 3), 4.48724, 73.8565, 0.0, 9.19368, 10.0103, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:39:37.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:39:03
2026-04-15T21:39:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:39:38.019 [DEBUG] [Thread-26194] [transport.py] [_log()] starting thread (client mode): 0xee905b10
2026-04-15T21:39:38.019 [DEBUG] [Thread-26194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:39:38.041 [DEBUG] [Thread-26194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:39:38.041 [INFO] [Thread-26194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:39:38.045 [DEBUG] [Thread-26194] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:39:38.045 [DEBUG] [Thread-26194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:39:38.045 [DEBUG] [Thread-26194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:39:38.045 [DEBUG] [Thread-26194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:39:38.046 [DEBUG] [Thread-26194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:39:38.046 [DEBUG] [Thread-26194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:39:38.046 [DEBUG] [Thread-26194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:39:38.046 [DEBUG] [Thread-26194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:39:38.046 [DEBUG] [Thread-26194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:39:38.046 [DEBUG] [Thread-26194] [transport.py] [_log()] client lang: <none>
2026-04-15T21:39:38.046 [DEBUG] [Thread-26194] [transport.py] [_log()] server lang: <none>
2026-04-15T21:39:38.046 [DEBUG] [Thread-26194] [transport.py] [_log()] kex follows: False
2026-04-15T21:39:38.046 [DEBUG] [Thread-26194] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:39:38.046 [DEBUG] [Thread-26194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:39:38.046 [DEBUG] [Thread-26194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:39:38.047 [DEBUG] [Thread-26194] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:39:38.047 [DEBUG] [Thread-26194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:39:38.047 [DEBUG] [Thread-26194] [transport.py] [_log()] Compression: none
2026-04-15T21:39:38.047 [DEBUG] [Thread-26194] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:39:38.065 [DEBUG] [Thread-26194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:39:38.066 [DEBUG] [Thread-26194] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:39:38.066 [DEBUG] [Thread-26194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:39:38.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:39:38.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:39:38.067 [DEBUG] [Thread-26194] [transport.py] [_log()] userauth is OK
2026-04-15T21:39:38.068 [DEBUG] [Thread-26194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:39:38.068 [DEBUG] [Thread-26194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:39:38.068 [DEBUG] [Thread-26194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:39:38.068 [DEBUG] [Thread-26194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:39:38.101 [INFO] [Thread-26194] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:39:38.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:39:38.868 [DEBUG] [Thread-26194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:39:38.868 [DEBUG] [Thread-26194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:39:38.869 [DEBUG] [Thread-26194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:39:38.909 [DEBUG] [Thread-26194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:39:38.909 [DEBUG] [Thread-26194] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:39:38.912 [DEBUG] [Thread-26194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:39:38.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:39:38.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:39:38.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:39:38.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:39:38.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:39:38.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:39:38.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:39:38.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:39:38.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:39:38.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.818881 -999.00  +10.30   8.67     77   +6.50 1 1 1 1 1     0    0 4.54 22.07 ZNESW 9.1 8.7 69.2 9.9 10.5 -24.6 10.4 -23.4 10.1 -21.2 10.4 -23.3
2026-04-15T21:39:38.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:39:38.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:39:38.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.818881
2026-04-15T21:39:38.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:39:38.938 [DEBUG] [Thread-26194] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:39:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:39:38.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:39:38.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:39:38.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:39:38.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:39:03', tmtdew=4.48724, humidity=73.8565, cloud=0.0, wind=9.19368, temperature=10.0103, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:39:11.318', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03375000000000128, -0.021749999999999048, -0.07474999999999987, -0.057500000000000995, -0.0259999999999998, 0.0007500000000000284, -0.030000000000001137, 0.0022500000000000853, -0.015499999999999403, -0.016000000000000014, -0.030250000000000554, -0.03049999999999997, 0.019000000000000128, -0.00975000000000037, 0.016000000000000014, -0.025000000000000355, 0.036249999999999005, -0.009500000000000952, 0.0005000000000006111, 0.025249999999999773, 0.026999999999999247, 0.03474999999999895, 0.02525000000000155, 0.019750000000000156, 0.03200000000000003, -0.04349999999999987, 0.029749999999999943, -0.03049999999999997, 0.04800000000000004, -0.004999999999999005, 0.049000000000001265, 0.040500000000001535, 0.004749999999999588], zp_timestamp='2026-04-15T19:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:39:39.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:39:39.201 [DEBUG] [Thread-26197] [transport.py] [_log()] starting thread (client mode): 0xf1366ad0
2026-04-15T21:39:39.201 [DEBUG] [Thread-26197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:39:39.215 [DEBUG] [Thread-26197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:39:39.215 [INFO] [Thread-26197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:39:39.222 [DEBUG] [Thread-26197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:39:39.222 [DEBUG] [Thread-26197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:39:39.222 [DEBUG] [Thread-26197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:39:39.223 [DEBUG] [Thread-26197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:39:39.223 [DEBUG] [Thread-26197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:39:39.223 [DEBUG] [Thread-26197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:39:39.223 [DEBUG] [Thread-26197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:39:39.223 [DEBUG] [Thread-26197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:39:39.223 [DEBUG] [Thread-26197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:39:39.223 [DEBUG] [Thread-26197] [transport.py] [_log()] client lang: <none>
2026-04-15T21:39:39.223 [DEBUG] [Thread-26197] [transport.py] [_log()] server lang: <none>
2026-04-15T21:39:39.223 [DEBUG] [Thread-26197] [transport.py] [_log()] kex follows: False
2026-04-15T21:39:39.223 [DEBUG] [Thread-26197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:39:39.223 [DEBUG] [Thread-26197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:39:39.223 [DEBUG] [Thread-26197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:39:39.224 [DEBUG] [Thread-26197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:39:39.224 [DEBUG] [Thread-26197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:39:39.224 [DEBUG] [Thread-26197] [transport.py] [_log()] Compression: none
2026-04-15T21:39:39.224 [DEBUG] [Thread-26197] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:39:39.282 [DEBUG] [Thread-26197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:39:39.282 [DEBUG] [Thread-26197] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:39:39.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:39:39.283 [DEBUG] [Thread-26197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:39:39.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:39:39.338 [DEBUG] [Thread-26197] [transport.py] [_log()] userauth is OK
2026-04-15T21:39:39.339 [DEBUG] [Thread-26197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:39:39.339 [DEBUG] [Thread-26197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:39:39.339 [DEBUG] [Thread-26197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:39:39.344 [DEBUG] [Thread-26197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:39:39.373 [INFO] [Thread-26197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:39:39.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:39:39.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:39:40.205 [DEBUG] [Thread-26197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:39:40.205 [DEBUG] [Thread-26197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:39:40.253 [DEBUG] [Thread-26197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:39:40.253 [DEBUG] [Thread-26197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:39:40.262 [DEBUG] [Thread-26197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:39:40.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:39:40.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')
2026-04-15T21:39:40.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
2026-04-15T21:39:40.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:39:40.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:39:40.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:39:40.297 [DEBUG] [Thread-26197] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:39:41.815 [DEBUG] [Thread-26199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:39:51.002 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:39:51.003 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:39:56.858 [DEBUG] [Thread-26200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:40:10.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:40:10.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:40:10.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
2026-04-15T21:40:11.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 39, 38), 4.07872, 75.6799, 0.0, 10.8346, 9.75425, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:40:11.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:39:38
2026-04-15T21:40:11.886 [DEBUG] [Thread-26201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:40:12.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:40:12.424 [DEBUG] [Thread-26202] [transport.py] [_log()] starting thread (client mode): 0xf1365a80
2026-04-15T21:40:12.424 [DEBUG] [Thread-26202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:40:12.442 [DEBUG] [Thread-26202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:40:12.442 [INFO] [Thread-26202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:40:12.444 [DEBUG] [Thread-26202] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:40:12.444 [DEBUG] [Thread-26202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:40:12.444 [DEBUG] [Thread-26202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:40:12.444 [DEBUG] [Thread-26202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:40:12.444 [DEBUG] [Thread-26202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:40:12.444 [DEBUG] [Thread-26202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:40:12.444 [DEBUG] [Thread-26202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:40:12.444 [DEBUG] [Thread-26202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:40:12.444 [DEBUG] [Thread-26202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:40:12.444 [DEBUG] [Thread-26202] [transport.py] [_log()] client lang: <none>
2026-04-15T21:40:12.444 [DEBUG] [Thread-26202] [transport.py] [_log()] server lang: <none>
2026-04-15T21:40:12.445 [DEBUG] [Thread-26202] [transport.py] [_log()] kex follows: False
2026-04-15T21:40:12.445 [DEBUG] [Thread-26202] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:40:12.445 [DEBUG] [Thread-26202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:40:12.445 [DEBUG] [Thread-26202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:40:12.445 [DEBUG] [Thread-26202] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:40:12.445 [DEBUG] [Thread-26202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:40:12.445 [DEBUG] [Thread-26202] [transport.py] [_log()] Compression: none
2026-04-15T21:40:12.445 [DEBUG] [Thread-26202] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:40:12.453 [DEBUG] [Thread-26202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:40:12.454 [DEBUG] [Thread-26202] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:40:12.454 [DEBUG] [Thread-26202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:40:12.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:40:12.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:40:12.455 [DEBUG] [Thread-26202] [transport.py] [_log()] userauth is OK
2026-04-15T21:40:12.455 [DEBUG] [Thread-26202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:40:12.455 [DEBUG] [Thread-26202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:40:12.455 [DEBUG] [Thread-26202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:40:12.455 [DEBUG] [Thread-26202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:40:12.469 [INFO] [Thread-26202] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:40:12.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:40:16.168 [DEBUG] [Thread-26202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:40:16.168 [DEBUG] [Thread-26202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:40:16.168 [DEBUG] [Thread-26202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:40:16.208 [DEBUG] [Thread-26202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:40:16.209 [DEBUG] [Thread-26202] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:40:16.211 [DEBUG] [Thread-26202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:40:16.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:40:16.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:40:16.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:40:16.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:40:16.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:40:16.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:40:16.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:40:16.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:40:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:40:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.819228 -999.00  +10.30   7.58     77   +6.50 1 1 1 1 1     0    0 4.40 20.44 ZNESW 6.1 7.6 63.8 9.4 10.4 -24.5 10.4 -23.4 10.1 -21.2 10.4 -23.3
2026-04-15T21:40:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:40:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:40:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.819228
2026-04-15T21:40:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:40:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:40:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:40:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:40:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:40:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:39:38', tmtdew=4.07872, humidity=75.6799, cloud=0.0, wind=10.8346, temperature=9.75425, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:39:41.299', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03375000000000128, -0.021749999999999048, -0.07474999999999987, -0.057500000000000995, -0.0259999999999998, 0.0007500000000000284, -0.030000000000001137, 0.0022500000000000853, -0.015499999999999403, -0.016000000000000014, -0.030250000000000554, -0.03049999999999997, 0.019000000000000128, -0.00975000000000037, 0.016000000000000014, -0.025000000000000355, 0.036249999999999005, -0.009500000000000952, 0.0005000000000006111, 0.025249999999999773, 0.026999999999999247, 0.03474999999999895, 0.02525000000000155, 0.019750000000000156, 0.03200000000000003, -0.04349999999999987, 0.029749999999999943, -0.03049999999999997, 0.04800000000000004, -0.004999999999999005, 0.049000000000001265, 0.040500000000001535, 0.004749999999999588], zp_timestamp='2026-04-15T19:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:40:16.246 [DEBUG] [Thread-26202] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:40:16.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:40:16.465 [DEBUG] [Thread-26205] [transport.py] [_log()] starting thread (client mode): 0xf13e1900
2026-04-15T21:40:16.465 [DEBUG] [Thread-26205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:40:16.479 [DEBUG] [Thread-26205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:40:16.479 [INFO] [Thread-26205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:40:16.487 [DEBUG] [Thread-26205] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:40:16.487 [DEBUG] [Thread-26205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:40:16.487 [DEBUG] [Thread-26205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:40:16.487 [DEBUG] [Thread-26205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:40:16.487 [DEBUG] [Thread-26205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:40:16.487 [DEBUG] [Thread-26205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:40:16.487 [DEBUG] [Thread-26205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:40:16.487 [DEBUG] [Thread-26205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:40:16.487 [DEBUG] [Thread-26205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:40:16.487 [DEBUG] [Thread-26205] [transport.py] [_log()] client lang: <none>
2026-04-15T21:40:16.487 [DEBUG] [Thread-26205] [transport.py] [_log()] server lang: <none>
2026-04-15T21:40:16.487 [DEBUG] [Thread-26205] [transport.py] [_log()] kex follows: False
2026-04-15T21:40:16.487 [DEBUG] [Thread-26205] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:40:16.488 [DEBUG] [Thread-26205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:40:16.488 [DEBUG] [Thread-26205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:40:16.488 [DEBUG] [Thread-26205] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:40:16.488 [DEBUG] [Thread-26205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:40:16.488 [DEBUG] [Thread-26205] [transport.py] [_log()] Compression: none
2026-04-15T21:40:16.488 [DEBUG] [Thread-26205] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:40:16.546 [DEBUG] [Thread-26205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:40:16.546 [DEBUG] [Thread-26205] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:40:16.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:40:16.547 [DEBUG] [Thread-26205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:40:16.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:40:16.603 [DEBUG] [Thread-26205] [transport.py] [_log()] userauth is OK
2026-04-15T21:40:16.603 [DEBUG] [Thread-26205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:40:16.604 [DEBUG] [Thread-26205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:40:16.604 [DEBUG] [Thread-26205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:40:16.604 [DEBUG] [Thread-26205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:40:16.631 [INFO] [Thread-26205] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:40:16.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:40:16.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:40:17.455 [DEBUG] [Thread-26205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:40:17.455 [DEBUG] [Thread-26205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:40:17.503 [DEBUG] [Thread-26205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:40:17.503 [DEBUG] [Thread-26205] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:40:17.512 [DEBUG] [Thread-26205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:40:17.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:40:17.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')
2026-04-15T21:40:17.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') -> 00000000
2026-04-15T21:40:17.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:40:17.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:40:17.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:40:17.547 [DEBUG] [Thread-26205] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:40:19.097 [DEBUG] [Thread-26207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:40:26.774 [DEBUG] [Thread-23763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:40:26.914 [DEBUG] [Thread-26208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:40:41.955 [DEBUG] [Thread-26209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:40:47.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:40:47.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:40:47.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:40:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 40, 14), 4.54091, 73.34, 0.0, 9.58176, 10.0769, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:40:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:40:14
2026-04-15T21:40:49.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:40:49.708 [DEBUG] [Thread-26210] [transport.py] [_log()] starting thread (client mode): 0xf13e1de0
2026-04-15T21:40:49.709 [DEBUG] [Thread-26210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:40:49.728 [DEBUG] [Thread-26210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:40:49.728 [INFO] [Thread-26210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:40:49.731 [DEBUG] [Thread-26210] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:40:49.731 [DEBUG] [Thread-26210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:40:49.731 [DEBUG] [Thread-26210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:40:49.731 [DEBUG] [Thread-26210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:40:49.732 [DEBUG] [Thread-26210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:40:49.732 [DEBUG] [Thread-26210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:40:49.732 [DEBUG] [Thread-26210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:40:49.732 [DEBUG] [Thread-26210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:40:49.732 [DEBUG] [Thread-26210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:40:49.732 [DEBUG] [Thread-26210] [transport.py] [_log()] client lang: <none>
2026-04-15T21:40:49.732 [DEBUG] [Thread-26210] [transport.py] [_log()] server lang: <none>
2026-04-15T21:40:49.732 [DEBUG] [Thread-26210] [transport.py] [_log()] kex follows: False
2026-04-15T21:40:49.732 [DEBUG] [Thread-26210] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:40:49.732 [DEBUG] [Thread-26210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:40:49.732 [DEBUG] [Thread-26210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:40:49.732 [DEBUG] [Thread-26210] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:40:49.733 [DEBUG] [Thread-26210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:40:49.733 [DEBUG] [Thread-26210] [transport.py] [_log()] Compression: none
2026-04-15T21:40:49.733 [DEBUG] [Thread-26210] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:40:49.751 [DEBUG] [Thread-26210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:40:49.751 [DEBUG] [Thread-26210] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:40:49.751 [DEBUG] [Thread-26210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:40:49.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:40:49.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:40:49.753 [DEBUG] [Thread-26210] [transport.py] [_log()] userauth is OK
2026-04-15T21:40:49.753 [DEBUG] [Thread-26210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:40:49.753 [DEBUG] [Thread-26210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:40:49.753 [DEBUG] [Thread-26210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:40:49.753 [DEBUG] [Thread-26210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:40:49.786 [INFO] [Thread-26210] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:40:49.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:40:50.605 [DEBUG] [Thread-26210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:40:50.605 [DEBUG] [Thread-26210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:40:50.606 [DEBUG] [Thread-26210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:40:50.646 [DEBUG] [Thread-26210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:40:50.646 [DEBUG] [Thread-26210] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:40:50.649 [DEBUG] [Thread-26210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:40:50.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:40:50.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:40:50.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:40:50.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:40:50.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:40:50.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:40:50.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:40:50.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:40:50.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:40:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.819575 -999.00  +10.30   8.62     77   +6.50 1 1 1 1 1     0    0 4.33 18.31 ZNESW 7.2 8.6 60.8 9.8 10.5 -24.6 10.4 -23.3 10.1 -21.3 10.4 -23.2
2026-04-15T21:40:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:40:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:40:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.819575
2026-04-15T21:40:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:40:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:40:50.677 [DEBUG] [Thread-26210] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:40:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:40:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:40:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:40:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:40:14', tmtdew=4.54091, humidity=73.34, cloud=0.0, wind=9.58176, temperature=10.0769, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:40:11.280', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03375000000000128, -0.021749999999999048, -0.07474999999999987, -0.057500000000000995, -0.0259999999999998, 0.0007500000000000284, -0.030000000000001137, 0.0022500000000000853, -0.015499999999999403, -0.016000000000000014, -0.030250000000000554, -0.03049999999999997, 0.019000000000000128, -0.00975000000000037, 0.016000000000000014, -0.025000000000000355, 0.036249999999999005, -0.009500000000000952, 0.0005000000000006111, 0.025249999999999773, 0.026999999999999247, 0.03474999999999895, 0.02525000000000155, 0.019750000000000156, 0.03200000000000003, -0.04349999999999987, 0.029749999999999943, -0.03049999999999997, 0.04800000000000004, -0.004999999999999005, 0.049000000000001265, 0.040500000000001535, 0.004749999999999588], zp_timestamp='2026-04-15T19:36:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:40:50.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:40:50.934 [DEBUG] [Thread-26213] [transport.py] [_log()] starting thread (client mode): 0xf13e2c20
2026-04-15T21:40:50.934 [DEBUG] [Thread-26213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:40:50.948 [DEBUG] [Thread-26213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:40:50.948 [INFO] [Thread-26213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:40:50.955 [DEBUG] [Thread-26213] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:40:50.956 [DEBUG] [Thread-26213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:40:50.956 [DEBUG] [Thread-26213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:40:50.956 [DEBUG] [Thread-26213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:40:50.956 [DEBUG] [Thread-26213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:40:50.956 [DEBUG] [Thread-26213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:40:50.956 [DEBUG] [Thread-26213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:40:50.956 [DEBUG] [Thread-26213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:40:50.956 [DEBUG] [Thread-26213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:40:50.956 [DEBUG] [Thread-26213] [transport.py] [_log()] client lang: <none>
2026-04-15T21:40:50.956 [DEBUG] [Thread-26213] [transport.py] [_log()] server lang: <none>
2026-04-15T21:40:50.956 [DEBUG] [Thread-26213] [transport.py] [_log()] kex follows: False
2026-04-15T21:40:50.956 [DEBUG] [Thread-26213] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:40:50.957 [DEBUG] [Thread-26213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:40:50.957 [DEBUG] [Thread-26213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:40:50.957 [DEBUG] [Thread-26213] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:40:50.957 [DEBUG] [Thread-26213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:40:50.957 [DEBUG] [Thread-26213] [transport.py] [_log()] Compression: none
2026-04-15T21:40:50.957 [DEBUG] [Thread-26213] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:40:51.014 [DEBUG] [Thread-26213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:40:51.015 [DEBUG] [Thread-26213] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:40:51.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:40:51.015 [DEBUG] [Thread-26213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:40:51.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:40:51.071 [DEBUG] [Thread-26213] [transport.py] [_log()] userauth is OK
2026-04-15T21:40:51.071 [DEBUG] [Thread-26213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:40:51.072 [DEBUG] [Thread-26213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:40:51.072 [DEBUG] [Thread-26213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:40:51.072 [DEBUG] [Thread-26213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:40:51.097 [INFO] [Thread-26213] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:40:51.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:40:51.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:40:51.203 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:40:51.204 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:40:51.922 [DEBUG] [Thread-26213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:40:51.922 [DEBUG] [Thread-26213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:40:51.970 [DEBUG] [Thread-26213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:40:51.970 [DEBUG] [Thread-26213] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:40:51.979 [DEBUG] [Thread-26213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:40:51.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:40:51.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')
2026-04-15T21:40:51.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
2026-04-15T21:40:52.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:40:52.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:40:52.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:40:52.018 [DEBUG] [Thread-26213] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:40:56.986 [DEBUG] [Thread-26215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:41:12.033 [DEBUG] [Thread-26216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:41:19.246 [DEBUG] [Thread-26217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:41:22.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:41:22.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:41:22.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:41:23.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 40, 49), 4.05446, 75.8126, 0.0, 11.6107, 9.78747, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:41:23.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:40:49
2026-04-15T21:41:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:41:24.135 [DEBUG] [Thread-26218] [transport.py] [_log()] starting thread (client mode): 0xf13679a0
2026-04-15T21:41:24.135 [DEBUG] [Thread-26218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:41:24.147 [DEBUG] [Thread-26218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:41:24.147 [INFO] [Thread-26218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:41:24.149 [DEBUG] [Thread-26218] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:41:24.150 [DEBUG] [Thread-26218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:41:24.150 [DEBUG] [Thread-26218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:41:24.150 [DEBUG] [Thread-26218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:41:24.150 [DEBUG] [Thread-26218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:41:24.150 [DEBUG] [Thread-26218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:41:24.150 [DEBUG] [Thread-26218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:41:24.150 [DEBUG] [Thread-26218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:41:24.150 [DEBUG] [Thread-26218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:41:24.150 [DEBUG] [Thread-26218] [transport.py] [_log()] client lang: <none>
2026-04-15T21:41:24.150 [DEBUG] [Thread-26218] [transport.py] [_log()] server lang: <none>
2026-04-15T21:41:24.150 [DEBUG] [Thread-26218] [transport.py] [_log()] kex follows: False
2026-04-15T21:41:24.151 [DEBUG] [Thread-26218] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:41:24.151 [DEBUG] [Thread-26218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:41:24.151 [DEBUG] [Thread-26218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:41:24.151 [DEBUG] [Thread-26218] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:41:24.151 [DEBUG] [Thread-26218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:41:24.151 [DEBUG] [Thread-26218] [transport.py] [_log()] Compression: none
2026-04-15T21:41:24.151 [DEBUG] [Thread-26218] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:41:24.167 [DEBUG] [Thread-26218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:41:24.167 [DEBUG] [Thread-26218] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:41:24.168 [DEBUG] [Thread-26218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:41:24.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:41:24.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:41:24.208 [DEBUG] [Thread-26218] [transport.py] [_log()] userauth is OK
2026-04-15T21:41:24.208 [DEBUG] [Thread-26218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:41:24.208 [DEBUG] [Thread-26218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:41:24.208 [DEBUG] [Thread-26218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:41:24.209 [DEBUG] [Thread-26218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:41:24.228 [INFO] [Thread-26218] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:41:24.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:41:25.011 [DEBUG] [Thread-26218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:41:25.012 [DEBUG] [Thread-26218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:41:25.012 [DEBUG] [Thread-26218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:41:25.052 [DEBUG] [Thread-26218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:41:25.052 [DEBUG] [Thread-26218] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:41:25.055 [DEBUG] [Thread-26218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:41:25.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:41:25.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:41:25.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:41:25.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:41:25.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:41:25.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:41:25.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:41:25.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:41:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:41:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.819922 -999.00  +10.30   8.21     77   +6.50 1 1 1 1 1     0    0 4.30 16.81 ZNESW 8.1 8.2 73.2 9.1 10.5 -24.5 10.4 -23.4 10.1 -21.2 10.4 -23.4
2026-04-15T21:41:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:41:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:41:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.819922
2026-04-15T21:41:25.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:41:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:41:25.082 [DEBUG] [Thread-26218] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:41:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:41:25.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:41:25.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:41:25.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:40:49', tmtdew=4.05446, humidity=75.8126, cloud=0.0, wind=11.6107, temperature=9.78747, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:40:41.261', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056250000000000355, -0.014749999999999375, -0.10474999999999923, -0.07250000000000156, -0.054499999999999105, -0.0037499999999983658, -0.0045000000000001705, 0.0007500000000000284, -0.01150000000000162, -0.041499999999999204, -0.0547500000000003, -0.04800000000000004, 0.013999999999999346, 0.0012499999999988631, -0.008500000000001506, -0.01150000000000162, 0.010249999999999204, -0.028999999999999915, -0.02000000000000135, 0.002249999999998309, 0.0030000000000001137, 0.035749999999998394, -0.016750000000000043, 0.01124999999999865, 0.013499999999998735, -0.07349999999999923, -0.0012500000000006395, -0.013500000000000512, 0.06900000000000084, -0.005999999999998451, 0.04550000000000054, 0.03850000000000087, -0.019249999999999545], zp_timestamp='2026-04-15T19:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:41:25.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:41:25.338 [DEBUG] [Thread-26221] [transport.py] [_log()] starting thread (client mode): 0xee95fac0
2026-04-15T21:41:25.338 [DEBUG] [Thread-26221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:41:25.353 [DEBUG] [Thread-26221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:41:25.353 [INFO] [Thread-26221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:41:25.360 [DEBUG] [Thread-26221] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:41:25.361 [DEBUG] [Thread-26221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:41:25.361 [DEBUG] [Thread-26221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:41:25.361 [DEBUG] [Thread-26221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:41:25.361 [DEBUG] [Thread-26221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:41:25.361 [DEBUG] [Thread-26221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:41:25.361 [DEBUG] [Thread-26221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:41:25.361 [DEBUG] [Thread-26221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:41:25.361 [DEBUG] [Thread-26221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:41:25.361 [DEBUG] [Thread-26221] [transport.py] [_log()] client lang: <none>
2026-04-15T21:41:25.361 [DEBUG] [Thread-26221] [transport.py] [_log()] server lang: <none>
2026-04-15T21:41:25.361 [DEBUG] [Thread-26221] [transport.py] [_log()] kex follows: False
2026-04-15T21:41:25.361 [DEBUG] [Thread-26221] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:41:25.362 [DEBUG] [Thread-26221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:41:25.362 [DEBUG] [Thread-26221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:41:25.362 [DEBUG] [Thread-26221] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:41:25.362 [DEBUG] [Thread-26221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:41:25.362 [DEBUG] [Thread-26221] [transport.py] [_log()] Compression: none
2026-04-15T21:41:25.362 [DEBUG] [Thread-26221] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:41:25.419 [DEBUG] [Thread-26221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:41:25.420 [DEBUG] [Thread-26221] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:41:25.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:41:25.420 [DEBUG] [Thread-26221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:41:25.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:41:25.476 [DEBUG] [Thread-26221] [transport.py] [_log()] userauth is OK
2026-04-15T21:41:25.476 [DEBUG] [Thread-26221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:41:25.476 [DEBUG] [Thread-26221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:41:25.476 [DEBUG] [Thread-26221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:41:25.477 [DEBUG] [Thread-26221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:41:25.502 [INFO] [Thread-26221] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:41:25.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:41:25.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:41:26.343 [DEBUG] [Thread-26221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:41:26.344 [DEBUG] [Thread-26221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:41:26.392 [DEBUG] [Thread-26221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:41:26.392 [DEBUG] [Thread-26221] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:41:26.400 [DEBUG] [Thread-26221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:41:26.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:41:26.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')
2026-04-15T21:41:26.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
2026-04-15T21:41:26.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:41:26.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:41:26.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:41:26.432 [DEBUG] [Thread-26221] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:41:27.064 [DEBUG] [Thread-26223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:41:29.529 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:41:32.651 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:41:37.745 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:41:42.110 [DEBUG] [Thread-26224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:41:43.234 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:41:51.406 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:41:51.407 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:41:52.459 [DEBUG] [Thread-23763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:41:56.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:41:56.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:41:56.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
2026-04-15T21:41:57.140 [DEBUG] [Thread-26225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:41:57.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 41, 25), 4.58039, 73.3897, 0.0, 9.26424, 10.0938, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:41:57.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:41:25
2026-04-15T21:41:58.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:41:58.565 [DEBUG] [Thread-26226] [transport.py] [_log()] starting thread (client mode): 0xf13c9c30
2026-04-15T21:41:58.565 [DEBUG] [Thread-26226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:41:58.585 [DEBUG] [Thread-26226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:41:58.585 [INFO] [Thread-26226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:41:58.588 [DEBUG] [Thread-26226] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:41:58.589 [DEBUG] [Thread-26226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:41:58.589 [DEBUG] [Thread-26226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:41:58.589 [DEBUG] [Thread-26226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:41:58.589 [DEBUG] [Thread-26226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:41:58.589 [DEBUG] [Thread-26226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:41:58.589 [DEBUG] [Thread-26226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:41:58.589 [DEBUG] [Thread-26226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:41:58.589 [DEBUG] [Thread-26226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:41:58.589 [DEBUG] [Thread-26226] [transport.py] [_log()] client lang: <none>
2026-04-15T21:41:58.589 [DEBUG] [Thread-26226] [transport.py] [_log()] server lang: <none>
2026-04-15T21:41:58.589 [DEBUG] [Thread-26226] [transport.py] [_log()] kex follows: False
2026-04-15T21:41:58.590 [DEBUG] [Thread-26226] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:41:58.590 [DEBUG] [Thread-26226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:41:58.590 [DEBUG] [Thread-26226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:41:58.590 [DEBUG] [Thread-26226] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:41:58.590 [DEBUG] [Thread-26226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:41:58.590 [DEBUG] [Thread-26226] [transport.py] [_log()] Compression: none
2026-04-15T21:41:58.590 [DEBUG] [Thread-26226] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:41:58.607 [DEBUG] [Thread-26226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:41:58.607 [DEBUG] [Thread-26226] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:41:58.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:41:58.608 [DEBUG] [Thread-26226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:41:58.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:41:58.609 [DEBUG] [Thread-26226] [transport.py] [_log()] userauth is OK
2026-04-15T21:41:58.609 [DEBUG] [Thread-26226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:41:58.609 [DEBUG] [Thread-26226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:41:58.610 [DEBUG] [Thread-26226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:41:58.610 [DEBUG] [Thread-26226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:41:58.646 [INFO] [Thread-26226] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:41:58.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:41:59.443 [DEBUG] [Thread-26226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:41:59.443 [DEBUG] [Thread-26226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:41:59.443 [DEBUG] [Thread-26226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:41:59.484 [DEBUG] [Thread-26226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:41:59.484 [DEBUG] [Thread-26226] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:41:59.487 [DEBUG] [Thread-26226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:41:59.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:41:59.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:41:59.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:41:59.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:41:59.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:41:59.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:41:59.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:41:59.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:41:59.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:41:59.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.820270 -999.00  +10.30   4.13     77   +6.50 1 1 1 1 1     0    0 4.23 15.87 ZNESW 3.4 4.1 91.3 9.1 10.5 -24.7 10.3 -23.4 10.1 -21.2 10.4 -23.4
2026-04-15T21:41:59.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:41:59.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:41:59.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.820270
2026-04-15T21:41:59.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:41:59.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:41:59.507 [DEBUG] [Thread-26226] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:41:59.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:41:59.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:41:59.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:41:59.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:41:25', tmtdew=4.58039, humidity=73.3897, cloud=0.0, wind=9.26424, temperature=10.0938, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:41:11.328', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056250000000000355, -0.014749999999999375, -0.10474999999999923, -0.07250000000000156, -0.054499999999999105, -0.0037499999999983658, -0.0045000000000001705, 0.0007500000000000284, -0.01150000000000162, -0.041499999999999204, -0.0547500000000003, -0.04800000000000004, 0.013999999999999346, 0.0012499999999988631, -0.008500000000001506, -0.01150000000000162, 0.010249999999999204, -0.028999999999999915, -0.02000000000000135, 0.002249999999998309, 0.0030000000000001137, 0.035749999999998394, -0.016750000000000043, 0.01124999999999865, 0.013499999999998735, -0.07349999999999923, -0.0012500000000006395, -0.013500000000000512, 0.06900000000000084, -0.005999999999998451, 0.04550000000000054, 0.03850000000000087, -0.019249999999999545], zp_timestamp='2026-04-15T19:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:41:59.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:41:59.763 [DEBUG] [Thread-26229] [transport.py] [_log()] starting thread (client mode): 0xf13c8730
2026-04-15T21:41:59.763 [DEBUG] [Thread-26229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:41:59.778 [DEBUG] [Thread-26229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:41:59.778 [INFO] [Thread-26229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:41:59.786 [DEBUG] [Thread-26229] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:41:59.786 [DEBUG] [Thread-26229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:41:59.786 [DEBUG] [Thread-26229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:41:59.786 [DEBUG] [Thread-26229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:41:59.786 [DEBUG] [Thread-26229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:41:59.786 [DEBUG] [Thread-26229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:41:59.786 [DEBUG] [Thread-26229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:41:59.786 [DEBUG] [Thread-26229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:41:59.786 [DEBUG] [Thread-26229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:41:59.786 [DEBUG] [Thread-26229] [transport.py] [_log()] client lang: <none>
2026-04-15T21:41:59.786 [DEBUG] [Thread-26229] [transport.py] [_log()] server lang: <none>
2026-04-15T21:41:59.787 [DEBUG] [Thread-26229] [transport.py] [_log()] kex follows: False
2026-04-15T21:41:59.787 [DEBUG] [Thread-26229] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:41:59.787 [DEBUG] [Thread-26229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:41:59.787 [DEBUG] [Thread-26229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:41:59.787 [DEBUG] [Thread-26229] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:41:59.787 [DEBUG] [Thread-26229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:41:59.787 [DEBUG] [Thread-26229] [transport.py] [_log()] Compression: none
2026-04-15T21:41:59.787 [DEBUG] [Thread-26229] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:41:59.844 [DEBUG] [Thread-26229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:41:59.844 [DEBUG] [Thread-26229] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:41:59.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:41:59.845 [DEBUG] [Thread-26229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:41:59.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:41:59.900 [DEBUG] [Thread-26229] [transport.py] [_log()] userauth is OK
2026-04-15T21:41:59.901 [DEBUG] [Thread-26229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:41:59.901 [DEBUG] [Thread-26229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:41:59.901 [DEBUG] [Thread-26229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:41:59.901 [DEBUG] [Thread-26229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:41:59.923 [INFO] [Thread-26229] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:41:59.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:41:59.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:42:00.744 [DEBUG] [Thread-26229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:42:00.744 [DEBUG] [Thread-26229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:42:00.795 [DEBUG] [Thread-26229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:42:00.795 [DEBUG] [Thread-26229] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:42:00.805 [DEBUG] [Thread-26229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:42:00.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:42:00.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')
2026-04-15T21:42:00.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
2026-04-15T21:42:00.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:42:00.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:42:00.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:42:00.840 [DEBUG] [Thread-26229] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:42:02.607 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:42:07.050 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:42:12.169 [DEBUG] [Thread-26231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:42:19.406 [DEBUG] [Thread-26232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:42:26.477 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:42:27.214 [DEBUG] [Thread-26233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:42:30.852 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:42:30.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:42:30.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:42:30.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:42:32.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 42, 1), 4.58567, 73.3566, 0.0, 9.26424, 10.0606, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:42:32.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:42:01
2026-04-15T21:42:32.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:42:32.965 [DEBUG] [Thread-26234] [transport.py] [_log()] starting thread (client mode): 0xee906c50
2026-04-15T21:42:32.965 [DEBUG] [Thread-26234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:42:32.984 [DEBUG] [Thread-26234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:42:32.984 [INFO] [Thread-26234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:42:32.986 [DEBUG] [Thread-26234] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:42:32.986 [DEBUG] [Thread-26234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:42:32.986 [DEBUG] [Thread-26234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:42:32.986 [DEBUG] [Thread-26234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:42:32.986 [DEBUG] [Thread-26234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:42:32.986 [DEBUG] [Thread-26234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:42:32.986 [DEBUG] [Thread-26234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:42:32.986 [DEBUG] [Thread-26234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:42:32.986 [DEBUG] [Thread-26234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:42:32.986 [DEBUG] [Thread-26234] [transport.py] [_log()] client lang: <none>
2026-04-15T21:42:32.986 [DEBUG] [Thread-26234] [transport.py] [_log()] server lang: <none>
2026-04-15T21:42:32.987 [DEBUG] [Thread-26234] [transport.py] [_log()] kex follows: False
2026-04-15T21:42:32.987 [DEBUG] [Thread-26234] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:42:32.987 [DEBUG] [Thread-26234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:42:32.987 [DEBUG] [Thread-26234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:42:32.987 [DEBUG] [Thread-26234] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:42:32.987 [DEBUG] [Thread-26234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:42:32.987 [DEBUG] [Thread-26234] [transport.py] [_log()] Compression: none
2026-04-15T21:42:32.987 [DEBUG] [Thread-26234] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:42:32.997 [DEBUG] [Thread-26234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:42:32.997 [DEBUG] [Thread-26234] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:42:32.998 [DEBUG] [Thread-26234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:42:32.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:42:32.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:42:32.999 [DEBUG] [Thread-26234] [transport.py] [_log()] userauth is OK
2026-04-15T21:42:32.999 [DEBUG] [Thread-26234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:42:32.999 [DEBUG] [Thread-26234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:42:32.999 [DEBUG] [Thread-26234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:42:32.999 [DEBUG] [Thread-26234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:42:33.032 [INFO] [Thread-26234] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:42:33.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:42:33.834 [DEBUG] [Thread-26234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:42:33.834 [DEBUG] [Thread-26234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:42:33.835 [DEBUG] [Thread-26234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:42:33.875 [DEBUG] [Thread-26234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:42:33.875 [DEBUG] [Thread-26234] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:42:33.878 [DEBUG] [Thread-26234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:42:33.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:42:33.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:42:33.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:42:33.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:42:33.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:42:33.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:42:33.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:42:33.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:42:33.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:42:33.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.820617 -999.00  +10.30   8.17     77   +6.50 1 1 1 1 1     0    0 4.17 13.82 ZNESW 8.7 8.2 67.6 9.8 10.5 -24.5 10.3 -23.3 10.1 -21.2 10.4 -23.2
2026-04-15T21:42:33.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:42:33.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:42:33.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.820617
2026-04-15T21:42:33.899 [DEBUG] [Thread-26234] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:42:33.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:42:33.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:42:33.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:42:33.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:42:33.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:42:33.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:42:01', tmtdew=4.58567, humidity=73.3566, cloud=0.0, wind=9.26424, temperature=10.0606, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:41:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056250000000000355, -0.014749999999999375, -0.10474999999999923, -0.07250000000000156, -0.054499999999999105, -0.0037499999999983658, -0.0045000000000001705, 0.0007500000000000284, -0.01150000000000162, -0.041499999999999204, -0.0547500000000003, -0.04800000000000004, 0.013999999999999346, 0.0012499999999988631, -0.008500000000001506, -0.01150000000000162, 0.010249999999999204, -0.028999999999999915, -0.02000000000000135, 0.002249999999998309, 0.0030000000000001137, 0.035749999999998394, -0.016750000000000043, 0.01124999999999865, 0.013499999999998735, -0.07349999999999923, -0.0012500000000006395, -0.013500000000000512, 0.06900000000000084, -0.005999999999998451, 0.04550000000000054, 0.03850000000000087, -0.019249999999999545], zp_timestamp='2026-04-15T19:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:42:34.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:42:34.121 [DEBUG] [Thread-26237] [transport.py] [_log()] starting thread (client mode): 0xee9066b0
2026-04-15T21:42:34.122 [DEBUG] [Thread-26237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:42:34.139 [DEBUG] [Thread-26237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:42:34.139 [INFO] [Thread-26237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:42:34.146 [DEBUG] [Thread-26237] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:42:34.146 [DEBUG] [Thread-26237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:42:34.146 [DEBUG] [Thread-26237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:42:34.146 [DEBUG] [Thread-26237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:42:34.146 [DEBUG] [Thread-26237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:42:34.147 [DEBUG] [Thread-26237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:42:34.147 [DEBUG] [Thread-26237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:42:34.147 [DEBUG] [Thread-26237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:42:34.147 [DEBUG] [Thread-26237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:42:34.147 [DEBUG] [Thread-26237] [transport.py] [_log()] client lang: <none>
2026-04-15T21:42:34.147 [DEBUG] [Thread-26237] [transport.py] [_log()] server lang: <none>
2026-04-15T21:42:34.147 [DEBUG] [Thread-26237] [transport.py] [_log()] kex follows: False
2026-04-15T21:42:34.147 [DEBUG] [Thread-26237] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:42:34.147 [DEBUG] [Thread-26237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:42:34.147 [DEBUG] [Thread-26237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:42:34.147 [DEBUG] [Thread-26237] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:42:34.148 [DEBUG] [Thread-26237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:42:34.148 [DEBUG] [Thread-26237] [transport.py] [_log()] Compression: none
2026-04-15T21:42:34.148 [DEBUG] [Thread-26237] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:42:34.207 [DEBUG] [Thread-26237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:42:34.207 [DEBUG] [Thread-26237] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:42:34.208 [DEBUG] [Thread-26237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:42:34.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:42:34.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:42:34.265 [DEBUG] [Thread-26237] [transport.py] [_log()] userauth is OK
2026-04-15T21:42:34.265 [DEBUG] [Thread-26237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:42:34.265 [DEBUG] [Thread-26237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:42:34.265 [DEBUG] [Thread-26237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:42:34.265 [DEBUG] [Thread-26237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:42:34.286 [INFO] [Thread-26237] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:42:34.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:42:34.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:42:35.125 [DEBUG] [Thread-26237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:42:35.125 [DEBUG] [Thread-26237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:42:35.173 [DEBUG] [Thread-26237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:42:35.174 [DEBUG] [Thread-26237] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:42:35.182 [DEBUG] [Thread-26237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:42:35.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:42:35.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')
2026-04-15T21:42:35.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
2026-04-15T21:42:35.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:42:35.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:42:35.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:42:35.215 [DEBUG] [Thread-26237] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:42:36.981 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:42:41.569 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:42:42.244 [DEBUG] [Thread-26239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:42:51.609 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:42:51.610 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:42:57.287 [DEBUG] [Thread-26240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:43:05.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:43:05.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:43:05.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
2026-04-15T21:43:06.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 42, 36), 4.04916, 75.8459, 0.0, 12.4222, 9.82071, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:43:06.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:42:36
2026-04-15T21:43:06.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:43:07.402 [DEBUG] [Thread-26241] [transport.py] [_log()] starting thread (client mode): 0xee906b30
2026-04-15T21:43:07.403 [DEBUG] [Thread-26241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:43:07.422 [DEBUG] [Thread-26241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:43:07.422 [INFO] [Thread-26241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:43:07.425 [DEBUG] [Thread-26241] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:43:07.425 [DEBUG] [Thread-26241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:43:07.425 [DEBUG] [Thread-26241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:43:07.425 [DEBUG] [Thread-26241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:43:07.425 [DEBUG] [Thread-26241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:43:07.425 [DEBUG] [Thread-26241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:43:07.426 [DEBUG] [Thread-26241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:43:07.426 [DEBUG] [Thread-26241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:43:07.426 [DEBUG] [Thread-26241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:43:07.426 [DEBUG] [Thread-26241] [transport.py] [_log()] client lang: <none>
2026-04-15T21:43:07.426 [DEBUG] [Thread-26241] [transport.py] [_log()] server lang: <none>
2026-04-15T21:43:07.426 [DEBUG] [Thread-26241] [transport.py] [_log()] kex follows: False
2026-04-15T21:43:07.426 [DEBUG] [Thread-26241] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:43:07.426 [DEBUG] [Thread-26241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:43:07.426 [DEBUG] [Thread-26241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:43:07.426 [DEBUG] [Thread-26241] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:43:07.426 [DEBUG] [Thread-26241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:43:07.426 [DEBUG] [Thread-26241] [transport.py] [_log()] Compression: none
2026-04-15T21:43:07.426 [DEBUG] [Thread-26241] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:43:07.447 [DEBUG] [Thread-26241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:43:07.447 [DEBUG] [Thread-26241] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:43:07.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:43:07.448 [DEBUG] [Thread-26241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:43:07.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:43:07.449 [DEBUG] [Thread-26241] [transport.py] [_log()] userauth is OK
2026-04-15T21:43:07.449 [DEBUG] [Thread-26241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:43:07.449 [DEBUG] [Thread-26241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:43:07.449 [DEBUG] [Thread-26241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:43:07.449 [DEBUG] [Thread-26241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:43:07.469 [INFO] [Thread-26241] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:43:07.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:43:08.276 [DEBUG] [Thread-26241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:43:08.277 [DEBUG] [Thread-26241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:43:08.277 [DEBUG] [Thread-26241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:43:08.317 [DEBUG] [Thread-26241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:43:08.317 [DEBUG] [Thread-26241] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:43:08.320 [DEBUG] [Thread-26241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:43:08.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:43:08.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:43:08.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:43:08.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:43:08.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:43:08.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:43:08.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:43:08.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:43:08.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:43:08.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.820964 -999.00  +10.30   6.42     77   +6.50 1 1 1 1 1     0    0 4.17 12.41 ZNESW 8.3 6.4 92.8 9.8 10.6 -24.7 10.4 -23.5 10.1 -21.3 10.4 -23.3
2026-04-15T21:43:08.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:43:08.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:43:08.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.820964
2026-04-15T21:43:08.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:43:08.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:43:08.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:43:08.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:43:08.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:43:08.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:42:36', tmtdew=4.04916, humidity=75.8459, cloud=0.0, wind=12.4222, temperature=9.82071, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:42:11.290', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056250000000000355, -0.014749999999999375, -0.10474999999999923, -0.07250000000000156, -0.054499999999999105, -0.0037499999999983658, -0.0045000000000001705, 0.0007500000000000284, -0.01150000000000162, -0.041499999999999204, -0.0547500000000003, -0.04800000000000004, 0.013999999999999346, 0.0012499999999988631, -0.008500000000001506, -0.01150000000000162, 0.010249999999999204, -0.028999999999999915, -0.02000000000000135, 0.002249999999998309, 0.0030000000000001137, 0.035749999999998394, -0.016750000000000043, 0.01124999999999865, 0.013499999999998735, -0.07349999999999923, -0.0012500000000006395, -0.013500000000000512, 0.06900000000000084, -0.005999999999998451, 0.04550000000000054, 0.03850000000000087, -0.019249999999999545], zp_timestamp='2026-04-15T19:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:43:08.333 [DEBUG] [Thread-26241] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:43:08.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:43:08.543 [DEBUG] [Thread-26244] [transport.py] [_log()] starting thread (client mode): 0xee904100
2026-04-15T21:43:08.543 [DEBUG] [Thread-26244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:43:08.563 [DEBUG] [Thread-26244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:43:08.563 [INFO] [Thread-26244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:43:08.571 [DEBUG] [Thread-26244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:43:08.571 [DEBUG] [Thread-26244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:43:08.571 [DEBUG] [Thread-26244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:43:08.571 [DEBUG] [Thread-26244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:43:08.571 [DEBUG] [Thread-26244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:43:08.571 [DEBUG] [Thread-26244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:43:08.571 [DEBUG] [Thread-26244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:43:08.571 [DEBUG] [Thread-26244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:43:08.571 [DEBUG] [Thread-26244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:43:08.571 [DEBUG] [Thread-26244] [transport.py] [_log()] client lang: <none>
2026-04-15T21:43:08.571 [DEBUG] [Thread-26244] [transport.py] [_log()] server lang: <none>
2026-04-15T21:43:08.571 [DEBUG] [Thread-26244] [transport.py] [_log()] kex follows: False
2026-04-15T21:43:08.572 [DEBUG] [Thread-26244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:43:08.572 [DEBUG] [Thread-26244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:43:08.572 [DEBUG] [Thread-26244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:43:08.572 [DEBUG] [Thread-26244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:43:08.572 [DEBUG] [Thread-26244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:43:08.572 [DEBUG] [Thread-26244] [transport.py] [_log()] Compression: none
2026-04-15T21:43:08.572 [DEBUG] [Thread-26244] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:43:08.642 [DEBUG] [Thread-26244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:43:08.642 [DEBUG] [Thread-26244] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:43:08.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:43:08.643 [DEBUG] [Thread-26244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:43:08.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:43:08.711 [DEBUG] [Thread-26244] [transport.py] [_log()] userauth is OK
2026-04-15T21:43:08.711 [DEBUG] [Thread-26244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:43:08.711 [DEBUG] [Thread-26244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:43:08.711 [DEBUG] [Thread-26244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:43:08.711 [DEBUG] [Thread-26244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:43:08.742 [INFO] [Thread-26244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:43:08.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:43:08.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:43:09.566 [DEBUG] [Thread-26244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:43:09.566 [DEBUG] [Thread-26244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:43:09.614 [DEBUG] [Thread-26244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:43:09.615 [DEBUG] [Thread-26244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:43:09.624 [DEBUG] [Thread-26244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:43:09.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:43:09.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')
2026-04-15T21:43:09.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
2026-04-15T21:43:09.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:43:09.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:43:09.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:43:09.664 [DEBUG] [Thread-26244] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:43:12.317 [DEBUG] [Thread-26246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:43:19.987 [DEBUG] [Thread-26247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:43:27.360 [DEBUG] [Thread-26248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:43:39.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:43:39.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:43:39.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
2026-04-15T21:43:40.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 43, 12), 4.57826, 73.4064, 0.0, 8.84088, 10.0769, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:43:40.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:43:12
2026-04-15T21:43:41.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:43:41.798 [DEBUG] [Thread-26249] [transport.py] [_log()] starting thread (client mode): 0xf13c92d0
2026-04-15T21:43:41.798 [DEBUG] [Thread-26249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:43:41.815 [DEBUG] [Thread-26249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:43:41.815 [INFO] [Thread-26249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:43:41.818 [DEBUG] [Thread-26249] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:43:41.819 [DEBUG] [Thread-26249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:43:41.819 [DEBUG] [Thread-26249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:43:41.819 [DEBUG] [Thread-26249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:43:41.819 [DEBUG] [Thread-26249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:43:41.819 [DEBUG] [Thread-26249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:43:41.819 [DEBUG] [Thread-26249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:43:41.819 [DEBUG] [Thread-26249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:43:41.819 [DEBUG] [Thread-26249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:43:41.819 [DEBUG] [Thread-26249] [transport.py] [_log()] client lang: <none>
2026-04-15T21:43:41.819 [DEBUG] [Thread-26249] [transport.py] [_log()] server lang: <none>
2026-04-15T21:43:41.819 [DEBUG] [Thread-26249] [transport.py] [_log()] kex follows: False
2026-04-15T21:43:41.819 [DEBUG] [Thread-26249] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:43:41.820 [DEBUG] [Thread-26249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:43:41.820 [DEBUG] [Thread-26249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:43:41.820 [DEBUG] [Thread-26249] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:43:41.820 [DEBUG] [Thread-26249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:43:41.820 [DEBUG] [Thread-26249] [transport.py] [_log()] Compression: none
2026-04-15T21:43:41.820 [DEBUG] [Thread-26249] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:43:41.836 [DEBUG] [Thread-26249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:43:41.837 [DEBUG] [Thread-26249] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:43:41.837 [DEBUG] [Thread-26249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:43:41.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:43:41.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:43:41.838 [DEBUG] [Thread-26249] [transport.py] [_log()] userauth is OK
2026-04-15T21:43:41.838 [DEBUG] [Thread-26249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:43:41.838 [DEBUG] [Thread-26249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:43:41.838 [DEBUG] [Thread-26249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:43:41.839 [DEBUG] [Thread-26249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:43:41.856 [INFO] [Thread-26249] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:43:41.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:43:42.388 [DEBUG] [Thread-26251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:43:42.637 [DEBUG] [Thread-26249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:43:42.638 [DEBUG] [Thread-26249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:43:42.639 [DEBUG] [Thread-26249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:43:42.678 [DEBUG] [Thread-26249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:43:42.678 [DEBUG] [Thread-26249] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:43:42.681 [DEBUG] [Thread-26249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:43:42.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:43:42.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:43:42.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:43:42.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:43:42.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:43:42.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:43:42.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:43:42.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:43:42.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:43:42.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.821658 -999.00  +10.30   2.61     77   +6.50 1 1 1 1 1     0    0 4.07 8.38 ZNESW 2.8 2.6 94.7 6.6 10.5 -24.6 10.4 -23.5 10.1 -21.5 10.4 -23.5
2026-04-15T21:43:42.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:43:42.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:43:42.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.821658
2026-04-15T21:43:42.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:43:42.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:43:42.704 [DEBUG] [Thread-26249] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:43:42.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:43:42.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:43:42.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:43:42.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:43:12', tmtdew=4.57826, humidity=73.4064, cloud=0.0, wind=8.84088, temperature=10.0769, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:43:11.251', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056250000000000355, -0.014749999999999375, -0.10474999999999923, -0.07250000000000156, -0.054499999999999105, -0.0037499999999983658, -0.0045000000000001705, 0.0007500000000000284, -0.01150000000000162, -0.041499999999999204, -0.0547500000000003, -0.04800000000000004, 0.013999999999999346, 0.0012499999999988631, -0.008500000000001506, -0.01150000000000162, 0.010249999999999204, -0.028999999999999915, -0.02000000000000135, 0.002249999999998309, 0.0030000000000001137, 0.035749999999998394, -0.016750000000000043, 0.01124999999999865, 0.013499999999998735, -0.07349999999999923, -0.0012500000000006395, -0.013500000000000512, 0.06900000000000084, -0.005999999999998451, 0.04550000000000054, 0.03850000000000087, -0.019249999999999545], zp_timestamp='2026-04-15T19:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:43:42.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:43:42.925 [DEBUG] [Thread-26253] [transport.py] [_log()] starting thread (client mode): 0xf13ca2c0
2026-04-15T21:43:42.925 [DEBUG] [Thread-26253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:43:42.941 [DEBUG] [Thread-26253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:43:42.941 [INFO] [Thread-26253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:43:42.948 [DEBUG] [Thread-26253] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:43:42.948 [DEBUG] [Thread-26253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:43:42.948 [DEBUG] [Thread-26253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:43:42.948 [DEBUG] [Thread-26253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:43:42.949 [DEBUG] [Thread-26253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:43:42.949 [DEBUG] [Thread-26253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:43:42.949 [DEBUG] [Thread-26253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:43:42.949 [DEBUG] [Thread-26253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:43:42.949 [DEBUG] [Thread-26253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:43:42.949 [DEBUG] [Thread-26253] [transport.py] [_log()] client lang: <none>
2026-04-15T21:43:42.949 [DEBUG] [Thread-26253] [transport.py] [_log()] server lang: <none>
2026-04-15T21:43:42.949 [DEBUG] [Thread-26253] [transport.py] [_log()] kex follows: False
2026-04-15T21:43:42.949 [DEBUG] [Thread-26253] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:43:42.949 [DEBUG] [Thread-26253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:43:42.949 [DEBUG] [Thread-26253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:43:42.950 [DEBUG] [Thread-26253] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:43:42.950 [DEBUG] [Thread-26253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:43:42.950 [DEBUG] [Thread-26253] [transport.py] [_log()] Compression: none
2026-04-15T21:43:42.950 [DEBUG] [Thread-26253] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:43:43.008 [DEBUG] [Thread-26253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:43:43.009 [DEBUG] [Thread-26253] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:43:43.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:43:43.009 [DEBUG] [Thread-26253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:43:43.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:43:43.065 [DEBUG] [Thread-26253] [transport.py] [_log()] userauth is OK
2026-04-15T21:43:43.066 [DEBUG] [Thread-26253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:43:43.066 [DEBUG] [Thread-26253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:43:43.066 [DEBUG] [Thread-26253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:43:43.066 [DEBUG] [Thread-26253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:43:43.091 [INFO] [Thread-26253] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:43:43.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:43:43.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:43:43.899 [DEBUG] [Thread-26253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:43:43.899 [DEBUG] [Thread-26253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:43:43.947 [DEBUG] [Thread-26253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:43:43.947 [DEBUG] [Thread-26253] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:43:43.957 [DEBUG] [Thread-26253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:43:43.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:43:43.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')
2026-04-15T21:43:43.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') -> 00000000
2026-04-15T21:43:43.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:43:43.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:43:43.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:43:43.992 [DEBUG] [Thread-26253] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:43:47.419 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:43:50.492 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:43:51.826 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:43:51.828 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:43:57.420 [DEBUG] [Thread-26255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:44:12.464 [DEBUG] [Thread-26256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:44:13.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:44:13.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:44:13.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:44:15.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 43, 48), 4.0618, 75.7796, 0.0, 11.7871, 9.82073, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:44:15.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:43:48
2026-04-15T21:44:15.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:44:16.019 [DEBUG] [Thread-26257] [transport.py] [_log()] starting thread (client mode): 0xf13ca920
2026-04-15T21:44:16.019 [DEBUG] [Thread-26257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:44:16.038 [DEBUG] [Thread-26257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:44:16.039 [INFO] [Thread-26257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:44:16.042 [DEBUG] [Thread-26257] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:44:16.042 [DEBUG] [Thread-26257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:44:16.042 [DEBUG] [Thread-26257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:44:16.042 [DEBUG] [Thread-26257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:44:16.042 [DEBUG] [Thread-26257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:44:16.042 [DEBUG] [Thread-26257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:44:16.042 [DEBUG] [Thread-26257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:44:16.042 [DEBUG] [Thread-26257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:44:16.042 [DEBUG] [Thread-26257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:44:16.042 [DEBUG] [Thread-26257] [transport.py] [_log()] client lang: <none>
2026-04-15T21:44:16.042 [DEBUG] [Thread-26257] [transport.py] [_log()] server lang: <none>
2026-04-15T21:44:16.043 [DEBUG] [Thread-26257] [transport.py] [_log()] kex follows: False
2026-04-15T21:44:16.043 [DEBUG] [Thread-26257] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:44:16.043 [DEBUG] [Thread-26257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:44:16.043 [DEBUG] [Thread-26257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:44:16.043 [DEBUG] [Thread-26257] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:44:16.043 [DEBUG] [Thread-26257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:44:16.043 [DEBUG] [Thread-26257] [transport.py] [_log()] Compression: none
2026-04-15T21:44:16.043 [DEBUG] [Thread-26257] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:44:16.060 [DEBUG] [Thread-26257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:44:16.060 [DEBUG] [Thread-26257] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:44:16.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:44:16.061 [DEBUG] [Thread-26257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:44:16.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:44:16.062 [DEBUG] [Thread-26257] [transport.py] [_log()] userauth is OK
2026-04-15T21:44:16.062 [DEBUG] [Thread-26257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:44:16.062 [DEBUG] [Thread-26257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:44:16.062 [DEBUG] [Thread-26257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:44:16.062 [DEBUG] [Thread-26257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:44:16.090 [INFO] [Thread-26257] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:44:16.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:44:16.872 [DEBUG] [Thread-26257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:44:16.872 [DEBUG] [Thread-26257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:44:16.872 [DEBUG] [Thread-26257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:44:16.913 [DEBUG] [Thread-26257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:44:16.913 [DEBUG] [Thread-26257] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:44:16.915 [DEBUG] [Thread-26257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:44:16.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:44:16.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:44:16.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:44:16.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:44:16.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:44:16.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:44:16.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:44:16.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:44:16.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:44:16.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.822006 -999.00  +10.30   3.19     77   +6.50 1 1 1 1 1     0    0 4.00 6.78 ZNESW 3.8 3.2 80.8 7.2 10.6 -24.9 10.3 -23.5 10.1 -21.4 10.4 -23.5
2026-04-15T21:44:16.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:44:16.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:44:16.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.822006
2026-04-15T21:44:16.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:44:16.942 [DEBUG] [Thread-26257] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:44:16.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:44:16.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:44:16.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:44:16.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:44:16.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:43:48', tmtdew=4.0618, humidity=75.7796, cloud=0.0, wind=11.7871, temperature=9.82073, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:43:41.318', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056250000000000355, -0.014749999999999375, -0.10474999999999923, -0.07250000000000156, -0.054499999999999105, -0.0037499999999983658, -0.0045000000000001705, 0.0007500000000000284, -0.01150000000000162, -0.041499999999999204, -0.0547500000000003, -0.04800000000000004, 0.013999999999999346, 0.0012499999999988631, -0.008500000000001506, -0.01150000000000162, 0.010249999999999204, -0.028999999999999915, -0.02000000000000135, 0.002249999999998309, 0.0030000000000001137, 0.035749999999998394, -0.016750000000000043, 0.01124999999999865, 0.013499999999998735, -0.07349999999999923, -0.0012500000000006395, -0.013500000000000512, 0.06900000000000084, -0.005999999999998451, 0.04550000000000054, 0.03850000000000087, -0.019249999999999545], zp_timestamp='2026-04-15T19:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:44:17.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:44:17.181 [DEBUG] [Thread-26260] [transport.py] [_log()] starting thread (client mode): 0xf13648e0
2026-04-15T21:44:17.181 [DEBUG] [Thread-26260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:44:17.195 [DEBUG] [Thread-26260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:44:17.195 [INFO] [Thread-26260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:44:17.203 [DEBUG] [Thread-26260] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:44:17.203 [DEBUG] [Thread-26260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:44:17.203 [DEBUG] [Thread-26260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:44:17.203 [DEBUG] [Thread-26260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:44:17.203 [DEBUG] [Thread-26260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:44:17.203 [DEBUG] [Thread-26260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:44:17.203 [DEBUG] [Thread-26260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:44:17.203 [DEBUG] [Thread-26260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:44:17.204 [DEBUG] [Thread-26260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:44:17.204 [DEBUG] [Thread-26260] [transport.py] [_log()] client lang: <none>
2026-04-15T21:44:17.204 [DEBUG] [Thread-26260] [transport.py] [_log()] server lang: <none>
2026-04-15T21:44:17.204 [DEBUG] [Thread-26260] [transport.py] [_log()] kex follows: False
2026-04-15T21:44:17.204 [DEBUG] [Thread-26260] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:44:17.204 [DEBUG] [Thread-26260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:44:17.204 [DEBUG] [Thread-26260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:44:17.204 [DEBUG] [Thread-26260] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:44:17.204 [DEBUG] [Thread-26260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:44:17.204 [DEBUG] [Thread-26260] [transport.py] [_log()] Compression: none
2026-04-15T21:44:17.204 [DEBUG] [Thread-26260] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:44:17.265 [DEBUG] [Thread-26260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:44:17.265 [DEBUG] [Thread-26260] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:44:17.266 [DEBUG] [Thread-26260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:44:17.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:44:17.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:44:17.322 [DEBUG] [Thread-26260] [transport.py] [_log()] userauth is OK
2026-04-15T21:44:17.322 [DEBUG] [Thread-26260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:44:17.322 [DEBUG] [Thread-26260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:44:17.322 [DEBUG] [Thread-26260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:44:17.322 [DEBUG] [Thread-26260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:44:17.348 [INFO] [Thread-26260] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:44:17.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:44:17.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:44:18.162 [DEBUG] [Thread-26260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:44:18.162 [DEBUG] [Thread-26260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:44:18.210 [DEBUG] [Thread-26260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:44:18.210 [DEBUG] [Thread-26260] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:44:18.218 [DEBUG] [Thread-26260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:44:18.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:44:18.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')
2026-04-15T21:44: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
2026-04-15T21:44:18.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:44:18.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:44:18.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:44:18.253 [DEBUG] [Thread-26260] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:44:20.155 [DEBUG] [Thread-26262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:44:27.492 [DEBUG] [Thread-26263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:44:42.538 [DEBUG] [Thread-26264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:44:48.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:44:48.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:44:48.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
2026-04-15T21:44:49.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 44, 23), 4.57722, 73.4064, 0.0, 7.42896, 10.0438, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:44:49.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:44:23
2026-04-15T21:44:49.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:44:50.363 [DEBUG] [Thread-26265] [transport.py] [_log()] starting thread (client mode): 0xf13cb6d0
2026-04-15T21:44:50.363 [DEBUG] [Thread-26265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:44:50.383 [DEBUG] [Thread-26265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:44:50.383 [INFO] [Thread-26265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:44:50.386 [DEBUG] [Thread-26265] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:44:50.386 [DEBUG] [Thread-26265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:44:50.386 [DEBUG] [Thread-26265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:44:50.386 [DEBUG] [Thread-26265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:44:50.386 [DEBUG] [Thread-26265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:44:50.386 [DEBUG] [Thread-26265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:44:50.386 [DEBUG] [Thread-26265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:44:50.387 [DEBUG] [Thread-26265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:44:50.387 [DEBUG] [Thread-26265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:44:50.387 [DEBUG] [Thread-26265] [transport.py] [_log()] client lang: <none>
2026-04-15T21:44:50.387 [DEBUG] [Thread-26265] [transport.py] [_log()] server lang: <none>
2026-04-15T21:44:50.387 [DEBUG] [Thread-26265] [transport.py] [_log()] kex follows: False
2026-04-15T21:44:50.387 [DEBUG] [Thread-26265] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:44:50.387 [DEBUG] [Thread-26265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:44:50.387 [DEBUG] [Thread-26265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:44:50.387 [DEBUG] [Thread-26265] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:44:50.387 [DEBUG] [Thread-26265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:44:50.387 [DEBUG] [Thread-26265] [transport.py] [_log()] Compression: none
2026-04-15T21:44:50.387 [DEBUG] [Thread-26265] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:44:50.403 [DEBUG] [Thread-26265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:44:50.404 [DEBUG] [Thread-26265] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:44:50.404 [DEBUG] [Thread-26265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:44:50.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:44:50.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:44:50.405 [DEBUG] [Thread-26265] [transport.py] [_log()] userauth is OK
2026-04-15T21:44:50.405 [DEBUG] [Thread-26265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:44:50.406 [DEBUG] [Thread-26265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:44:50.406 [DEBUG] [Thread-26265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:44:50.406 [DEBUG] [Thread-26265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:44:50.429 [INFO] [Thread-26265] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:44:50.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:44:51.245 [DEBUG] [Thread-26265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:44:51.245 [DEBUG] [Thread-26265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:44:51.246 [DEBUG] [Thread-26265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:44:51.287 [DEBUG] [Thread-26265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:44:51.287 [DEBUG] [Thread-26265] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:44:51.289 [DEBUG] [Thread-26265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:44:51.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:44:51.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:44:51.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:44:51.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:44:51.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:44:51.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:44:51.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:44:51.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:44:51.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:44:51.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.822353 -999.00  +10.30   5.76     77   +6.50 1 1 1 1 1     0    0 4.02 5.66 ZNESW 7.3 5.8 87.8 7.5 10.5 -24.8 10.4 -23.5 10.1 -21.4 10.4 -23.4
2026-04-15T21:44:51.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:44:51.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:44:51.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.822353
2026-04-15T21:44:51.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:44:51.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:44:51.308 [DEBUG] [Thread-26265] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:44:51.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:44:51.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:44:51.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:44:51.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:44:23', tmtdew=4.57722, humidity=73.4064, cloud=0.0, wind=7.42896, temperature=10.0438, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:44:11.299', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056250000000000355, -0.014749999999999375, -0.10474999999999923, -0.07250000000000156, -0.054499999999999105, -0.0037499999999983658, -0.0045000000000001705, 0.0007500000000000284, -0.01150000000000162, -0.041499999999999204, -0.0547500000000003, -0.04800000000000004, 0.013999999999999346, 0.0012499999999988631, -0.008500000000001506, -0.01150000000000162, 0.010249999999999204, -0.028999999999999915, -0.02000000000000135, 0.002249999999998309, 0.0030000000000001137, 0.035749999999998394, -0.016750000000000043, 0.01124999999999865, 0.013499999999998735, -0.07349999999999923, -0.0012500000000006395, -0.013500000000000512, 0.06900000000000084, -0.005999999999998451, 0.04550000000000054, 0.03850000000000087, -0.019249999999999545], zp_timestamp='2026-04-15T19:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:44:51.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:44:51.536 [DEBUG] [Thread-26268] [transport.py] [_log()] starting thread (client mode): 0xf13ca2c0
2026-04-15T21:44:51.536 [DEBUG] [Thread-26268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:44:51.550 [DEBUG] [Thread-26268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:44:51.550 [INFO] [Thread-26268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:44:51.557 [DEBUG] [Thread-26268] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:44:51.558 [DEBUG] [Thread-26268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:44:51.558 [DEBUG] [Thread-26268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:44:51.558 [DEBUG] [Thread-26268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:44:51.558 [DEBUG] [Thread-26268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:44:51.558 [DEBUG] [Thread-26268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:44:51.558 [DEBUG] [Thread-26268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:44:51.558 [DEBUG] [Thread-26268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:44:51.558 [DEBUG] [Thread-26268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:44:51.558 [DEBUG] [Thread-26268] [transport.py] [_log()] client lang: <none>
2026-04-15T21:44:51.558 [DEBUG] [Thread-26268] [transport.py] [_log()] server lang: <none>
2026-04-15T21:44:51.558 [DEBUG] [Thread-26268] [transport.py] [_log()] kex follows: False
2026-04-15T21:44:51.558 [DEBUG] [Thread-26268] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:44:51.559 [DEBUG] [Thread-26268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:44:51.559 [DEBUG] [Thread-26268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:44:51.559 [DEBUG] [Thread-26268] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:44:51.559 [DEBUG] [Thread-26268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:44:51.559 [DEBUG] [Thread-26268] [transport.py] [_log()] Compression: none
2026-04-15T21:44:51.559 [DEBUG] [Thread-26268] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:44:51.614 [DEBUG] [Thread-26268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:44:51.614 [DEBUG] [Thread-26268] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:44:51.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:44:51.615 [DEBUG] [Thread-26268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:44:51.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:44:51.670 [DEBUG] [Thread-26268] [transport.py] [_log()] userauth is OK
2026-04-15T21:44:51.670 [DEBUG] [Thread-26268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:44:51.671 [DEBUG] [Thread-26268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:44:51.671 [DEBUG] [Thread-26268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:44:51.671 [DEBUG] [Thread-26268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:44:51.698 [INFO] [Thread-26268] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:44:51.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:44:51.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:44:52.029 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:44:52.030 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:44:52.536 [DEBUG] [Thread-26268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:44:52.536 [DEBUG] [Thread-26268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:44:52.584 [DEBUG] [Thread-26268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:44:52.584 [DEBUG] [Thread-26268] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:44:52.593 [DEBUG] [Thread-26268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:44:52.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:44:52.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')
2026-04-15T21:44:52.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
2026-04-15T21:44:52.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:44:52.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:44:52.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:44:52.629 [DEBUG] [Thread-26268] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:44:57.567 [DEBUG] [Thread-26270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:45:12.603 [DEBUG] [Thread-26271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:45:20.306 [DEBUG] [Thread-26272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:45:22.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:45:22.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:45:22.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
2026-04-15T21:45:23.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 44, 58), 4.57722, 73.4064, 0.0, 9.12312, 10.0438, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:45:23.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:44:58
2026-04-15T21:45:24.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:45:24.668 [DEBUG] [Thread-26273] [transport.py] [_log()] starting thread (client mode): 0xee907e20
2026-04-15T21:45:24.668 [DEBUG] [Thread-26273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:45:24.687 [DEBUG] [Thread-26273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:45:24.687 [INFO] [Thread-26273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:45:24.690 [DEBUG] [Thread-26273] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:45:24.690 [DEBUG] [Thread-26273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:45:24.691 [DEBUG] [Thread-26273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:45:24.691 [DEBUG] [Thread-26273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:45:24.691 [DEBUG] [Thread-26273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:45:24.691 [DEBUG] [Thread-26273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:45:24.691 [DEBUG] [Thread-26273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:45:24.691 [DEBUG] [Thread-26273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:45:24.691 [DEBUG] [Thread-26273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:45:24.691 [DEBUG] [Thread-26273] [transport.py] [_log()] client lang: <none>
2026-04-15T21:45:24.691 [DEBUG] [Thread-26273] [transport.py] [_log()] server lang: <none>
2026-04-15T21:45:24.691 [DEBUG] [Thread-26273] [transport.py] [_log()] kex follows: False
2026-04-15T21:45:24.691 [DEBUG] [Thread-26273] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:45:24.691 [DEBUG] [Thread-26273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:45:24.692 [DEBUG] [Thread-26273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:45:24.692 [DEBUG] [Thread-26273] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:45:24.692 [DEBUG] [Thread-26273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:45:24.692 [DEBUG] [Thread-26273] [transport.py] [_log()] Compression: none
2026-04-15T21:45:24.692 [DEBUG] [Thread-26273] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:45:24.709 [DEBUG] [Thread-26273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:45:24.709 [DEBUG] [Thread-26273] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:45:24.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:45:24.710 [DEBUG] [Thread-26273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:45:24.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:45:24.752 [DEBUG] [Thread-26273] [transport.py] [_log()] userauth is OK
2026-04-15T21:45:24.752 [DEBUG] [Thread-26273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:45:24.753 [DEBUG] [Thread-26273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:45:24.753 [DEBUG] [Thread-26273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:45:24.753 [DEBUG] [Thread-26273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:45:24.789 [INFO] [Thread-26273] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:45:24.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:45:25.740 [DEBUG] [Thread-26273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:45:25.740 [DEBUG] [Thread-26273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:45:25.741 [DEBUG] [Thread-26273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:45:25.781 [DEBUG] [Thread-26273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:45:25.781 [DEBUG] [Thread-26273] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:45:25.784 [DEBUG] [Thread-26273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:45:25.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:45:25.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:45:25.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:45:25.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:45:25.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:45:25.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:45:25.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:45:25.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:45:25.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:45:25.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.822700 -999.00  +10.30   7.00     77   +6.50 1 1 1 1 1     0    0 3.96 4.31 ZNESW 6.3 7.0 129.8 8.5 10.6 -24.8 10.4 -23.5 10.1 -21.4 10.4 -23.4
2026-04-15T21:45:25.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:45:25.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:45:25.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.822700
2026-04-15T21:45:25.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:45:25.817 [DEBUG] [Thread-26273] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:45:25.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:45:25.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:45:25.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:45:25.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:45:25.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:44:58', tmtdew=4.57722, humidity=73.4064, cloud=0.0, wind=9.12312, temperature=10.0438, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:44:41.280', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056250000000000355, -0.014749999999999375, -0.10474999999999923, -0.07250000000000156, -0.054499999999999105, -0.0037499999999983658, -0.0045000000000001705, 0.0007500000000000284, -0.01150000000000162, -0.041499999999999204, -0.0547500000000003, -0.04800000000000004, 0.013999999999999346, 0.0012499999999988631, -0.008500000000001506, -0.01150000000000162, 0.010249999999999204, -0.028999999999999915, -0.02000000000000135, 0.002249999999998309, 0.0030000000000001137, 0.035749999999998394, -0.016750000000000043, 0.01124999999999865, 0.013499999999998735, -0.07349999999999923, -0.0012500000000006395, -0.013500000000000512, 0.06900000000000084, -0.005999999999998451, 0.04550000000000054, 0.03850000000000087, -0.019249999999999545], zp_timestamp='2026-04-15T19:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:45:26.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:45:26.071 [DEBUG] [Thread-26276] [transport.py] [_log()] starting thread (client mode): 0xee907160
2026-04-15T21:45:26.071 [DEBUG] [Thread-26276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:45:26.086 [DEBUG] [Thread-26276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:45:26.086 [INFO] [Thread-26276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:45:26.093 [DEBUG] [Thread-26276] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:45:26.093 [DEBUG] [Thread-26276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:45:26.093 [DEBUG] [Thread-26276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:45:26.093 [DEBUG] [Thread-26276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:45:26.093 [DEBUG] [Thread-26276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:45:26.094 [DEBUG] [Thread-26276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:45:26.094 [DEBUG] [Thread-26276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:45:26.094 [DEBUG] [Thread-26276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:45:26.094 [DEBUG] [Thread-26276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:45:26.094 [DEBUG] [Thread-26276] [transport.py] [_log()] client lang: <none>
2026-04-15T21:45:26.094 [DEBUG] [Thread-26276] [transport.py] [_log()] server lang: <none>
2026-04-15T21:45:26.094 [DEBUG] [Thread-26276] [transport.py] [_log()] kex follows: False
2026-04-15T21:45:26.094 [DEBUG] [Thread-26276] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:45:26.094 [DEBUG] [Thread-26276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:45:26.094 [DEBUG] [Thread-26276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:45:26.094 [DEBUG] [Thread-26276] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:45:26.094 [DEBUG] [Thread-26276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:45:26.095 [DEBUG] [Thread-26276] [transport.py] [_log()] Compression: none
2026-04-15T21:45:26.095 [DEBUG] [Thread-26276] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:45:26.151 [DEBUG] [Thread-26276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:45:26.151 [DEBUG] [Thread-26276] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:45:26.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:45:26.152 [DEBUG] [Thread-26276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:45:26.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:45:26.206 [DEBUG] [Thread-26276] [transport.py] [_log()] userauth is OK
2026-04-15T21:45:26.206 [DEBUG] [Thread-26276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:45:26.207 [DEBUG] [Thread-26276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:45:26.207 [DEBUG] [Thread-26276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:45:26.207 [DEBUG] [Thread-26276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:45:26.227 [INFO] [Thread-26276] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:45:26.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:45:26.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:45:27.071 [DEBUG] [Thread-26276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:45:27.072 [DEBUG] [Thread-26276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:45:27.120 [DEBUG] [Thread-26276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:45:27.120 [DEBUG] [Thread-26276] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:45:27.128 [DEBUG] [Thread-26276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:45:27.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:45:27.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')
2026-04-15T21:45:27.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
2026-04-15T21:45:27.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:45:27.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:45:27.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:45:27.160 [DEBUG] [Thread-26276] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:45:27.634 [DEBUG] [Thread-26278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:45:42.676 [DEBUG] [Thread-26279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:45:52.234 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:45:52.235 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:45:57.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:45:57.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:45:57.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
2026-04-15T21:45:57.704 [DEBUG] [Thread-26280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:45:58.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 45, 34), 4.05651, 75.8128, 0.0, 12.8102, 9.85393, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:45:58.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:45:34
2026-04-15T21:45:58.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:45:59.210 [DEBUG] [Thread-26281] [transport.py] [_log()] starting thread (client mode): 0xf13caef0
2026-04-15T21:45:59.211 [DEBUG] [Thread-26281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:45:59.231 [DEBUG] [Thread-26281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:45:59.231 [INFO] [Thread-26281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:45:59.234 [DEBUG] [Thread-26281] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:45:59.234 [DEBUG] [Thread-26281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:45:59.234 [DEBUG] [Thread-26281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:45:59.234 [DEBUG] [Thread-26281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:45:59.234 [DEBUG] [Thread-26281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:45:59.235 [DEBUG] [Thread-26281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:45:59.235 [DEBUG] [Thread-26281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:45:59.235 [DEBUG] [Thread-26281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:45:59.235 [DEBUG] [Thread-26281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:45:59.235 [DEBUG] [Thread-26281] [transport.py] [_log()] client lang: <none>
2026-04-15T21:45:59.235 [DEBUG] [Thread-26281] [transport.py] [_log()] server lang: <none>
2026-04-15T21:45:59.235 [DEBUG] [Thread-26281] [transport.py] [_log()] kex follows: False
2026-04-15T21:45:59.235 [DEBUG] [Thread-26281] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:45:59.235 [DEBUG] [Thread-26281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:45:59.235 [DEBUG] [Thread-26281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:45:59.235 [DEBUG] [Thread-26281] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:45:59.235 [DEBUG] [Thread-26281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:45:59.236 [DEBUG] [Thread-26281] [transport.py] [_log()] Compression: none
2026-04-15T21:45:59.236 [DEBUG] [Thread-26281] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:45:59.253 [DEBUG] [Thread-26281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:45:59.254 [DEBUG] [Thread-26281] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:45:59.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:45:59.254 [DEBUG] [Thread-26281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:45:59.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:45:59.255 [DEBUG] [Thread-26281] [transport.py] [_log()] userauth is OK
2026-04-15T21:45:59.255 [DEBUG] [Thread-26281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:45:59.256 [DEBUG] [Thread-26281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:45:59.256 [DEBUG] [Thread-26281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:45:59.256 [DEBUG] [Thread-26281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:45:59.275 [INFO] [Thread-26281] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:45:59.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:46:00.029 [DEBUG] [Thread-26281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:46:00.030 [DEBUG] [Thread-26281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:46:00.030 [DEBUG] [Thread-26281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:46:00.071 [DEBUG] [Thread-26281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:46:00.071 [DEBUG] [Thread-26281] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:46:00.073 [DEBUG] [Thread-26281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:46:00.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:46:00.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:46:00.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:46:00.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:46:00.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:46:00.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:46:00.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:46:00.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:46:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:46:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.823047 -999.00  +10.30   5.35     77   +6.50 1 1 1 1 1     0    0 3.87 3.13 ZNESW 3.2 5.3 81.2 8.6 10.5 -24.6 10.4 -23.5 10.1 -21.5 10.4 -23.4
2026-04-15T21:46:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:46:00.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:46:00.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.823047
2026-04-15T21:46:00.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:46:00.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:46:00.100 [DEBUG] [Thread-26281] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:46:00.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:46:00.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:46:00.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:46:00.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:45:34', tmtdew=4.05651, humidity=75.8128, cloud=0.0, wind=12.8102, temperature=9.85393, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:45:11.261', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056250000000000355, -0.014749999999999375, -0.10474999999999923, -0.07250000000000156, -0.054499999999999105, -0.0037499999999983658, -0.0045000000000001705, 0.0007500000000000284, -0.01150000000000162, -0.041499999999999204, -0.0547500000000003, -0.04800000000000004, 0.013999999999999346, 0.0012499999999988631, -0.008500000000001506, -0.01150000000000162, 0.010249999999999204, -0.028999999999999915, -0.02000000000000135, 0.002249999999998309, 0.0030000000000001137, 0.035749999999998394, -0.016750000000000043, 0.01124999999999865, 0.013499999999998735, -0.07349999999999923, -0.0012500000000006395, -0.013500000000000512, 0.06900000000000084, -0.005999999999998451, 0.04550000000000054, 0.03850000000000087, -0.019249999999999545], zp_timestamp='2026-04-15T19:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:46:00.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:46:00.354 [DEBUG] [Thread-26284] [transport.py] [_log()] starting thread (client mode): 0xee905930
2026-04-15T21:46:00.354 [DEBUG] [Thread-26284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:46:00.368 [DEBUG] [Thread-26284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:46:00.368 [INFO] [Thread-26284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:46:00.376 [DEBUG] [Thread-26284] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:46:00.376 [DEBUG] [Thread-26284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:46:00.376 [DEBUG] [Thread-26284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:46:00.376 [DEBUG] [Thread-26284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:46:00.376 [DEBUG] [Thread-26284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:46:00.376 [DEBUG] [Thread-26284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:46:00.376 [DEBUG] [Thread-26284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:46:00.376 [DEBUG] [Thread-26284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:46:00.376 [DEBUG] [Thread-26284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:46:00.376 [DEBUG] [Thread-26284] [transport.py] [_log()] client lang: <none>
2026-04-15T21:46:00.376 [DEBUG] [Thread-26284] [transport.py] [_log()] server lang: <none>
2026-04-15T21:46:00.377 [DEBUG] [Thread-26284] [transport.py] [_log()] kex follows: False
2026-04-15T21:46:00.377 [DEBUG] [Thread-26284] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:46:00.377 [DEBUG] [Thread-26284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:46:00.377 [DEBUG] [Thread-26284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:46:00.377 [DEBUG] [Thread-26284] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:46:00.377 [DEBUG] [Thread-26284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:46:00.377 [DEBUG] [Thread-26284] [transport.py] [_log()] Compression: none
2026-04-15T21:46:00.377 [DEBUG] [Thread-26284] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:46:00.434 [DEBUG] [Thread-26284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:46:00.435 [DEBUG] [Thread-26284] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:46:00.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:46:00.435 [DEBUG] [Thread-26284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:46:00.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:46:00.491 [DEBUG] [Thread-26284] [transport.py] [_log()] userauth is OK
2026-04-15T21:46:00.491 [DEBUG] [Thread-26284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:46:00.491 [DEBUG] [Thread-26284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:46:00.491 [DEBUG] [Thread-26284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:46:00.491 [DEBUG] [Thread-26284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:46:00.517 [INFO] [Thread-26284] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:46:00.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:46:00.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:46:01.329 [DEBUG] [Thread-26284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:46:01.329 [DEBUG] [Thread-26284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:46:01.376 [DEBUG] [Thread-26284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:46:01.377 [DEBUG] [Thread-26284] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:46:01.385 [DEBUG] [Thread-26284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:46:01.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:46:01.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')
2026-04-15T21:46:01.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
2026-04-15T21:46:01.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:46:01.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:46:01.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:46:01.424 [DEBUG] [Thread-26284] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:46:12.734 [DEBUG] [Thread-26286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:46:20.454 [DEBUG] [Thread-26287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:46:27.779 [DEBUG] [Thread-26288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:46:31.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:46:31.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:46:31.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
2026-04-15T21:46:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 46, 9), 4.57722, 73.4064, 0.0, 10.0757, 10.0438, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:46:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:46:09
2026-04-15T21:46:33.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:46:33.581 [DEBUG] [Thread-26289] [transport.py] [_log()] starting thread (client mode): 0xee95ca30
2026-04-15T21:46:33.582 [DEBUG] [Thread-26289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:46:33.604 [DEBUG] [Thread-26289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:46:33.604 [INFO] [Thread-26289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:46:33.607 [DEBUG] [Thread-26289] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:46:33.607 [DEBUG] [Thread-26289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:46:33.607 [DEBUG] [Thread-26289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:46:33.608 [DEBUG] [Thread-26289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:46:33.608 [DEBUG] [Thread-26289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:46:33.608 [DEBUG] [Thread-26289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:46:33.608 [DEBUG] [Thread-26289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:46:33.608 [DEBUG] [Thread-26289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:46:33.608 [DEBUG] [Thread-26289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:46:33.608 [DEBUG] [Thread-26289] [transport.py] [_log()] client lang: <none>
2026-04-15T21:46:33.608 [DEBUG] [Thread-26289] [transport.py] [_log()] server lang: <none>
2026-04-15T21:46:33.608 [DEBUG] [Thread-26289] [transport.py] [_log()] kex follows: False
2026-04-15T21:46:33.608 [DEBUG] [Thread-26289] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:46:33.608 [DEBUG] [Thread-26289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:46:33.609 [DEBUG] [Thread-26289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:46:33.609 [DEBUG] [Thread-26289] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:46:33.609 [DEBUG] [Thread-26289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:46:33.609 [DEBUG] [Thread-26289] [transport.py] [_log()] Compression: none
2026-04-15T21:46:33.609 [DEBUG] [Thread-26289] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:46:33.625 [DEBUG] [Thread-26289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:46:33.626 [DEBUG] [Thread-26289] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:46:33.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:46:33.626 [DEBUG] [Thread-26289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:46:33.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:46:33.627 [DEBUG] [Thread-26289] [transport.py] [_log()] userauth is OK
2026-04-15T21:46:33.627 [DEBUG] [Thread-26289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:46:33.627 [DEBUG] [Thread-26289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:46:33.627 [DEBUG] [Thread-26289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:46:33.627 [DEBUG] [Thread-26289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:46:33.651 [INFO] [Thread-26289] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:46:33.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:46:34.455 [DEBUG] [Thread-26289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:46:34.456 [DEBUG] [Thread-26289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:46:34.456 [DEBUG] [Thread-26289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:46:34.496 [DEBUG] [Thread-26289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:46:34.496 [DEBUG] [Thread-26289] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:46:34.498 [DEBUG] [Thread-26289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:46:34.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:46:34.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:46:34.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:46:34.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:46:34.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:46:34.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:46:34.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:46:34.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:46:34.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:46:34.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.823742 -999.00  +10.30   6.09     77   +6.40 1 1 1 1 1     0    0 3.89 1.68 ZNESW 6.9 6.1 76.6 7.3 10.6 -24.7 10.4 -23.4 10.2 -21.6 10.4 -23.5
2026-04-15T21:46:34.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:46:34.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:46:34.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.823742
2026-04-15T21:46:34.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:46:34.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:46:34.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:46:34.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:46:34.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:46:34.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:46:09', tmtdew=4.57722, humidity=73.4064, cloud=0.0, wind=10.0757, temperature=10.0438, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:46:11.309', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056250000000000355, -0.014749999999999375, -0.10474999999999923, -0.07250000000000156, -0.054499999999999105, -0.0037499999999983658, -0.0045000000000001705, 0.0007500000000000284, -0.01150000000000162, -0.041499999999999204, -0.0547500000000003, -0.04800000000000004, 0.013999999999999346, 0.0012499999999988631, -0.008500000000001506, -0.01150000000000162, 0.010249999999999204, -0.028999999999999915, -0.02000000000000135, 0.002249999999998309, 0.0030000000000001137, 0.035749999999998394, -0.016750000000000043, 0.01124999999999865, 0.013499999999998735, -0.07349999999999923, -0.0012500000000006395, -0.013500000000000512, 0.06900000000000084, -0.005999999999998451, 0.04550000000000054, 0.03850000000000087, -0.019249999999999545], zp_timestamp='2026-04-15T19:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:46:34.519 [DEBUG] [Thread-26289] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:46:34.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:46:34.741 [DEBUG] [Thread-26292] [transport.py] [_log()] starting thread (client mode): 0xf13c9ae0
2026-04-15T21:46:34.741 [DEBUG] [Thread-26292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:46:34.756 [DEBUG] [Thread-26292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:46:34.756 [INFO] [Thread-26292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:46:34.763 [DEBUG] [Thread-26292] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] client lang: <none>
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] server lang: <none>
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] kex follows: False
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] Compression: none
2026-04-15T21:46:34.764 [DEBUG] [Thread-26292] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:46:34.822 [DEBUG] [Thread-26292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:46:34.822 [DEBUG] [Thread-26292] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:46:34.822 [DEBUG] [Thread-26292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:46:34.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:46:34.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:46:34.879 [DEBUG] [Thread-26292] [transport.py] [_log()] userauth is OK
2026-04-15T21:46:34.879 [DEBUG] [Thread-26292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:46:34.879 [DEBUG] [Thread-26292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:46:34.879 [DEBUG] [Thread-26292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:46:34.880 [DEBUG] [Thread-26292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:46:34.897 [INFO] [Thread-26292] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:46:34.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:46:34.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:46:35.711 [DEBUG] [Thread-26292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:46:35.711 [DEBUG] [Thread-26292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:46:35.759 [DEBUG] [Thread-26292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:46:35.759 [DEBUG] [Thread-26292] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:46:35.767 [DEBUG] [Thread-26292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:46:35.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:46:35.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')
2026-04-15T21:46:35.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
2026-04-15T21:46:35.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:46:35.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:46:35.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:46:35.799 [DEBUG] [Thread-26292] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:46:42.810 [DEBUG] [Thread-26294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:46:52.435 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:46:52.436 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:46:57.856 [DEBUG] [Thread-26295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:47:05.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:47:05.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:47:05.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:47:07.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 46, 44), 4.03653, 75.9123, 0.0, 12.1046, 9.82076, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:47:07.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:46:44
2026-04-15T21:47:07.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:47:07.988 [DEBUG] [Thread-26296] [transport.py] [_log()] starting thread (client mode): 0xf13e3250
2026-04-15T21:47:07.988 [DEBUG] [Thread-26296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:47:08.007 [DEBUG] [Thread-26296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:47:08.007 [INFO] [Thread-26296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:47:08.010 [DEBUG] [Thread-26296] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:47:08.010 [DEBUG] [Thread-26296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:47:08.010 [DEBUG] [Thread-26296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:47:08.010 [DEBUG] [Thread-26296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:47:08.010 [DEBUG] [Thread-26296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:47:08.010 [DEBUG] [Thread-26296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:47:08.011 [DEBUG] [Thread-26296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:47:08.011 [DEBUG] [Thread-26296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:47:08.011 [DEBUG] [Thread-26296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:47:08.011 [DEBUG] [Thread-26296] [transport.py] [_log()] client lang: <none>
2026-04-15T21:47:08.011 [DEBUG] [Thread-26296] [transport.py] [_log()] server lang: <none>
2026-04-15T21:47:08.011 [DEBUG] [Thread-26296] [transport.py] [_log()] kex follows: False
2026-04-15T21:47:08.011 [DEBUG] [Thread-26296] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:47:08.011 [DEBUG] [Thread-26296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:47:08.011 [DEBUG] [Thread-26296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:47:08.011 [DEBUG] [Thread-26296] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:47:08.011 [DEBUG] [Thread-26296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:47:08.012 [DEBUG] [Thread-26296] [transport.py] [_log()] Compression: none
2026-04-15T21:47:08.012 [DEBUG] [Thread-26296] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:47:08.030 [DEBUG] [Thread-26296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:47:08.030 [DEBUG] [Thread-26296] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:47:08.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:47:08.031 [DEBUG] [Thread-26296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:47:08.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:47:08.032 [DEBUG] [Thread-26296] [transport.py] [_log()] userauth is OK
2026-04-15T21:47:08.033 [DEBUG] [Thread-26296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:47:08.033 [DEBUG] [Thread-26296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:47:08.033 [DEBUG] [Thread-26296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:47:08.033 [DEBUG] [Thread-26296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:47:08.057 [INFO] [Thread-26296] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:47:08.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:47:08.841 [DEBUG] [Thread-26296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:47:08.841 [DEBUG] [Thread-26296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:47:08.842 [DEBUG] [Thread-26296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:47:08.882 [DEBUG] [Thread-26296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:47:08.882 [DEBUG] [Thread-26296] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:47:08.885 [DEBUG] [Thread-26296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:47:08.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:47:08.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:47:08.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:47:08.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:47:08.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:47:08.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:47:08.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:47:08.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:47:08.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:47:08.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.824089 -999.00  +10.30   7.34     76   +6.40 1 1 1 1 1     0    0 3.76 0.91 ZNESW 5.4 7.3 70.6 8.0 10.6 -24.5 10.4 -23.5 10.2 -21.5 10.4 -23.4
2026-04-15T21:47:08.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:47:08.906 [DEBUG] [Thread-26296] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:47:08.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:47:08.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.824089
2026-04-15T21:47:08.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:47:08.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:47:08.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:47:08.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:47:08.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:47:08.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:46:44', tmtdew=4.03653, humidity=75.9123, cloud=0.0, wind=12.1046, temperature=9.82076, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:46:41.290', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056250000000000355, -0.014749999999999375, -0.10474999999999923, -0.07250000000000156, -0.054499999999999105, -0.0037499999999983658, -0.0045000000000001705, 0.0007500000000000284, -0.01150000000000162, -0.041499999999999204, -0.0547500000000003, -0.04800000000000004, 0.013999999999999346, 0.0012499999999988631, -0.008500000000001506, -0.01150000000000162, 0.010249999999999204, -0.028999999999999915, -0.02000000000000135, 0.002249999999998309, 0.0030000000000001137, 0.035749999999998394, -0.016750000000000043, 0.01124999999999865, 0.013499999999998735, -0.07349999999999923, -0.0012500000000006395, -0.013500000000000512, 0.06900000000000084, -0.005999999999998451, 0.04550000000000054, 0.03850000000000087, -0.019249999999999545], zp_timestamp='2026-04-15T19:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:47:09.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:47:09.166 [DEBUG] [Thread-26299] [transport.py] [_log()] starting thread (client mode): 0xf1350b20
2026-04-15T21:47:09.166 [DEBUG] [Thread-26299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:47:09.181 [DEBUG] [Thread-26299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:47:09.181 [INFO] [Thread-26299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:47:09.189 [DEBUG] [Thread-26299] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:47:09.189 [DEBUG] [Thread-26299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:47:09.189 [DEBUG] [Thread-26299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:47:09.189 [DEBUG] [Thread-26299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:47:09.189 [DEBUG] [Thread-26299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:47:09.189 [DEBUG] [Thread-26299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:47:09.189 [DEBUG] [Thread-26299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:47:09.189 [DEBUG] [Thread-26299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:47:09.189 [DEBUG] [Thread-26299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:47:09.189 [DEBUG] [Thread-26299] [transport.py] [_log()] client lang: <none>
2026-04-15T21:47:09.190 [DEBUG] [Thread-26299] [transport.py] [_log()] server lang: <none>
2026-04-15T21:47:09.190 [DEBUG] [Thread-26299] [transport.py] [_log()] kex follows: False
2026-04-15T21:47:09.190 [DEBUG] [Thread-26299] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:47:09.190 [DEBUG] [Thread-26299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:47:09.190 [DEBUG] [Thread-26299] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:47:09.190 [DEBUG] [Thread-26299] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:47:09.190 [DEBUG] [Thread-26299] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:47:09.190 [DEBUG] [Thread-26299] [transport.py] [_log()] Compression: none
2026-04-15T21:47:09.190 [DEBUG] [Thread-26299] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:47:09.246 [DEBUG] [Thread-26299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:47:09.247 [DEBUG] [Thread-26299] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:47:09.247 [DEBUG] [Thread-26299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:47:09.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:47:09.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:47:09.308 [DEBUG] [Thread-26299] [transport.py] [_log()] userauth is OK
2026-04-15T21:47:09.308 [DEBUG] [Thread-26299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:47:09.308 [DEBUG] [Thread-26299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:47:09.308 [DEBUG] [Thread-26299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:47:09.308 [DEBUG] [Thread-26299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:47:09.333 [INFO] [Thread-26299] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:47:09.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:47:09.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:47:10.215 [DEBUG] [Thread-26299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:47:10.215 [DEBUG] [Thread-26299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:47:10.263 [DEBUG] [Thread-26299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:47:10.263 [DEBUG] [Thread-26299] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:47:10.272 [DEBUG] [Thread-26299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:47:10.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:47:10.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')
2026-04-15T21:47:10.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
2026-04-15T21:47:10.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:47:10.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:47:10.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:47:10.307 [DEBUG] [Thread-26299] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:47:12.887 [DEBUG] [Thread-26301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:47:20.601 [DEBUG] [Thread-26302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:47:27.929 [DEBUG] [Thread-26303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:47:40.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:47:40.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:47:40.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
2026-04-15T21:47:41.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 47, 20), 4.57401, 73.4233, 0.0, 9.5994, 10.094, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:47:41.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:47:20
2026-04-15T21:47:42.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:47:42.444 [DEBUG] [Thread-26304] [transport.py] [_log()] starting thread (client mode): 0xf1366860
2026-04-15T21:47:42.444 [DEBUG] [Thread-26304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:47:42.464 [DEBUG] [Thread-26304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:47:42.464 [INFO] [Thread-26304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:47:42.467 [DEBUG] [Thread-26304] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:47:42.467 [DEBUG] [Thread-26304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:47:42.468 [DEBUG] [Thread-26304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:47:42.468 [DEBUG] [Thread-26304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:47:42.468 [DEBUG] [Thread-26304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:47:42.468 [DEBUG] [Thread-26304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:47:42.468 [DEBUG] [Thread-26304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:47:42.468 [DEBUG] [Thread-26304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:47:42.468 [DEBUG] [Thread-26304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:47:42.468 [DEBUG] [Thread-26304] [transport.py] [_log()] client lang: <none>
2026-04-15T21:47:42.468 [DEBUG] [Thread-26304] [transport.py] [_log()] server lang: <none>
2026-04-15T21:47:42.468 [DEBUG] [Thread-26304] [transport.py] [_log()] kex follows: False
2026-04-15T21:47:42.468 [DEBUG] [Thread-26304] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:47:42.469 [DEBUG] [Thread-26304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:47:42.469 [DEBUG] [Thread-26304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:47:42.469 [DEBUG] [Thread-26304] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:47:42.469 [DEBUG] [Thread-26304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:47:42.469 [DEBUG] [Thread-26304] [transport.py] [_log()] Compression: none
2026-04-15T21:47:42.469 [DEBUG] [Thread-26304] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:47:42.485 [DEBUG] [Thread-26304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:47:42.486 [DEBUG] [Thread-26304] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:47:42.486 [DEBUG] [Thread-26304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:47:42.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:47:42.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:47:42.488 [DEBUG] [Thread-26304] [transport.py] [_log()] userauth is OK
2026-04-15T21:47:42.488 [DEBUG] [Thread-26304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:47:42.488 [DEBUG] [Thread-26304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:47:42.488 [DEBUG] [Thread-26304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:47:42.488 [DEBUG] [Thread-26304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:47:42.511 [INFO] [Thread-26304] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:47:42.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:47:42.961 [DEBUG] [Thread-26306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:47:43.279 [DEBUG] [Thread-26304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:47:43.280 [DEBUG] [Thread-26304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:47:43.280 [DEBUG] [Thread-26304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:47:43.320 [DEBUG] [Thread-26304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:47:43.320 [DEBUG] [Thread-26304] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:47:43.322 [DEBUG] [Thread-26304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:47:43.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:47:43.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:47:43.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:47:43.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:47:43.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:47:43.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:47:43.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:47:43.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:47:43.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:47:43.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.824436 -999.00  +10.40   3.98     76   +6.40 1 1 1 1 1     0    0 3.86 1.09 ZNESW 7.8 4.0 94.9 9.8 10.6 -24.6 10.4 -23.4 10.2 -21.5 10.5 -23.4
2026-04-15T21:47:43.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:47:43.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:47:43.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.824436
2026-04-15T21:47:43.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:47:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:47:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:47:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:47:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:47:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:47:20', tmtdew=4.57401, humidity=73.4233, cloud=0.0, wind=9.5994, temperature=10.094, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:47:11.270', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, 0.008250000000000313, -0.05325000000000024, -0.06050000000000111, -0.08799999999999919, -0.017249999999998877, 0.01699999999999946, 0.012249999999999872, 0.009499999999999176, -0.022999999999999687, -0.03575000000000017, -0.032999999999999474, 0.02049999999999841, 0.0182500000000001, 0.006999999999999673, -0.008000000000000895, 0.04224999999999923, -0.03049999999999997, -0.018000000000000682, 0.03824999999999967, 0.010999999999999233, 0.025749999999998607, -0.01624999999999943, -0.006249999999999645, 0.02949999999999875, -0.03549999999999898, 0.015249999999999986, 0.015499999999999403, 0.06900000000000084, -0.0019999999999988916, 0.040000000000000924, 0.04100000000000037, -0.004250000000000753], zp_timestamp='2026-04-15T19:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:47:43.341 [DEBUG] [Thread-26304] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:47:43.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:47:43.555 [DEBUG] [Thread-26308] [transport.py] [_log()] starting thread (client mode): 0xf1352cb0
2026-04-15T21:47:43.555 [DEBUG] [Thread-26308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:47:43.569 [DEBUG] [Thread-26308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:47:43.569 [INFO] [Thread-26308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:47:43.577 [DEBUG] [Thread-26308] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:47:43.577 [DEBUG] [Thread-26308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:47:43.577 [DEBUG] [Thread-26308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:47:43.577 [DEBUG] [Thread-26308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:47:43.577 [DEBUG] [Thread-26308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:47:43.577 [DEBUG] [Thread-26308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:47:43.577 [DEBUG] [Thread-26308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:47:43.577 [DEBUG] [Thread-26308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:47:43.577 [DEBUG] [Thread-26308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:47:43.578 [DEBUG] [Thread-26308] [transport.py] [_log()] client lang: <none>
2026-04-15T21:47:43.578 [DEBUG] [Thread-26308] [transport.py] [_log()] server lang: <none>
2026-04-15T21:47:43.578 [DEBUG] [Thread-26308] [transport.py] [_log()] kex follows: False
2026-04-15T21:47:43.578 [DEBUG] [Thread-26308] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:47:43.578 [DEBUG] [Thread-26308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:47:43.578 [DEBUG] [Thread-26308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:47:43.578 [DEBUG] [Thread-26308] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:47:43.578 [DEBUG] [Thread-26308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:47:43.578 [DEBUG] [Thread-26308] [transport.py] [_log()] Compression: none
2026-04-15T21:47:43.578 [DEBUG] [Thread-26308] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:47:43.635 [DEBUG] [Thread-26308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:47:43.635 [DEBUG] [Thread-26308] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:47:43.636 [DEBUG] [Thread-26308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:47:43.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:47:43.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:47:43.692 [DEBUG] [Thread-26308] [transport.py] [_log()] userauth is OK
2026-04-15T21:47:43.692 [DEBUG] [Thread-26308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:47:43.692 [DEBUG] [Thread-26308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:47:43.692 [DEBUG] [Thread-26308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:47:43.692 [DEBUG] [Thread-26308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:47:43.718 [INFO] [Thread-26308] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:47:43.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:47:43.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:47:44.548 [DEBUG] [Thread-26308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:47:44.549 [DEBUG] [Thread-26308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:47:44.595 [DEBUG] [Thread-26308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:47:44.596 [DEBUG] [Thread-26308] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:47:44.605 [DEBUG] [Thread-26308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:47:44.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:47:44.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')
2026-04-15T21:47:44.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
2026-04-15T21:47:44.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:47:44.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:47:44.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:47:44.640 [DEBUG] [Thread-26308] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:47:52.639 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:47:52.640 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:47:57.993 [DEBUG] [Thread-26310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:48:13.038 [DEBUG] [Thread-26311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:48:14.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:48:14.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:48:14.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
2026-04-15T21:48:15.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 47, 55), 4.66718, 72.9565, 0.0, 9.63468, 10.1775, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:48:15.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:47:55
2026-04-15T21:48:16.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:48:16.784 [DEBUG] [Thread-26312] [transport.py] [_log()] starting thread (client mode): 0xf13676a0
2026-04-15T21:48:16.784 [DEBUG] [Thread-26312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:48:16.803 [DEBUG] [Thread-26312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:48:16.803 [INFO] [Thread-26312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:48:16.805 [DEBUG] [Thread-26312] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:48:16.805 [DEBUG] [Thread-26312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:48:16.805 [DEBUG] [Thread-26312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:48:16.805 [DEBUG] [Thread-26312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:48:16.806 [DEBUG] [Thread-26312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:48:16.806 [DEBUG] [Thread-26312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:48:16.806 [DEBUG] [Thread-26312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:48:16.806 [DEBUG] [Thread-26312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:48:16.806 [DEBUG] [Thread-26312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:48:16.806 [DEBUG] [Thread-26312] [transport.py] [_log()] client lang: <none>
2026-04-15T21:48:16.806 [DEBUG] [Thread-26312] [transport.py] [_log()] server lang: <none>
2026-04-15T21:48:16.806 [DEBUG] [Thread-26312] [transport.py] [_log()] kex follows: False
2026-04-15T21:48:16.807 [DEBUG] [Thread-26312] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:48:16.807 [DEBUG] [Thread-26312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:48:16.807 [DEBUG] [Thread-26312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:48:16.807 [DEBUG] [Thread-26312] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:48:16.807 [DEBUG] [Thread-26312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:48:16.807 [DEBUG] [Thread-26312] [transport.py] [_log()] Compression: none
2026-04-15T21:48:16.807 [DEBUG] [Thread-26312] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:48:16.825 [DEBUG] [Thread-26312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:48:16.825 [DEBUG] [Thread-26312] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:48:16.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:48:16.826 [DEBUG] [Thread-26312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:48:16.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:48:16.826 [DEBUG] [Thread-26312] [transport.py] [_log()] userauth is OK
2026-04-15T21:48:16.827 [DEBUG] [Thread-26312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:48:16.827 [DEBUG] [Thread-26312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:48:16.827 [DEBUG] [Thread-26312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:48:16.827 [DEBUG] [Thread-26312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:48:16.840 [INFO] [Thread-26312] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:48:16.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:48:17.632 [DEBUG] [Thread-26312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:48:17.633 [DEBUG] [Thread-26312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:48:17.633 [DEBUG] [Thread-26312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:48:17.674 [DEBUG] [Thread-26312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:48:17.674 [DEBUG] [Thread-26312] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:48:17.677 [DEBUG] [Thread-26312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:48:17.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:48:17.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:48:17.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:48:17.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:48:17.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:48:17.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:48:17.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:48:17.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:48:17.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:48:17.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.824783 -999.00  +10.40   6.44     76   +6.50 1 1 1 1 1     0    0 3.87 1.28 ZNESW 4.7 6.4 89.8 10.1 10.6 -24.9 10.4 -23.5 10.2 -21.5 10.5 -23.5
2026-04-15T21:48:17.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:48:17.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:48:17.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.824783
2026-04-15T21:48:17.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:48:17.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:48:17.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:48:17.705 [DEBUG] [Thread-26312] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:48:17.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:48:17.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:48:17.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:47:55', tmtdew=4.66718, humidity=72.9565, cloud=0.0, wind=9.63468, temperature=10.1775, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:47:41.251', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, 0.008250000000000313, -0.05325000000000024, -0.06050000000000111, -0.08799999999999919, -0.017249999999998877, 0.01699999999999946, 0.012249999999999872, 0.009499999999999176, -0.022999999999999687, -0.03575000000000017, -0.032999999999999474, 0.02049999999999841, 0.0182500000000001, 0.006999999999999673, -0.008000000000000895, 0.04224999999999923, -0.03049999999999997, -0.018000000000000682, 0.03824999999999967, 0.010999999999999233, 0.025749999999998607, -0.01624999999999943, -0.006249999999999645, 0.02949999999999875, -0.03549999999999898, 0.015249999999999986, 0.015499999999999403, 0.06900000000000084, -0.0019999999999988916, 0.040000000000000924, 0.04100000000000037, -0.004250000000000753], zp_timestamp='2026-04-15T19:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:48:17.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:48:17.961 [DEBUG] [Thread-26315] [transport.py] [_log()] starting thread (client mode): 0xf13c8040
2026-04-15T21:48:17.961 [DEBUG] [Thread-26315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:48:17.976 [DEBUG] [Thread-26315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:48:17.976 [INFO] [Thread-26315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:48:17.983 [DEBUG] [Thread-26315] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:48:17.983 [DEBUG] [Thread-26315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:48:17.984 [DEBUG] [Thread-26315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:48:17.984 [DEBUG] [Thread-26315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:48:17.984 [DEBUG] [Thread-26315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:48:17.984 [DEBUG] [Thread-26315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:48:17.984 [DEBUG] [Thread-26315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:48:17.984 [DEBUG] [Thread-26315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:48:17.984 [DEBUG] [Thread-26315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:48:17.984 [DEBUG] [Thread-26315] [transport.py] [_log()] client lang: <none>
2026-04-15T21:48:17.984 [DEBUG] [Thread-26315] [transport.py] [_log()] server lang: <none>
2026-04-15T21:48:17.984 [DEBUG] [Thread-26315] [transport.py] [_log()] kex follows: False
2026-04-15T21:48:17.984 [DEBUG] [Thread-26315] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:48:17.984 [DEBUG] [Thread-26315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:48:17.985 [DEBUG] [Thread-26315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:48:17.985 [DEBUG] [Thread-26315] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:48:17.985 [DEBUG] [Thread-26315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:48:17.985 [DEBUG] [Thread-26315] [transport.py] [_log()] Compression: none
2026-04-15T21:48:17.985 [DEBUG] [Thread-26315] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:48:18.039 [DEBUG] [Thread-26315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:48:18.039 [DEBUG] [Thread-26315] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:48:18.040 [DEBUG] [Thread-26315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:48:18.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:48:18.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:48:18.096 [DEBUG] [Thread-26315] [transport.py] [_log()] userauth is OK
2026-04-15T21:48:18.097 [DEBUG] [Thread-26315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:48:18.097 [DEBUG] [Thread-26315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:48:18.097 [DEBUG] [Thread-26315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:48:18.097 [DEBUG] [Thread-26315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:48:18.122 [INFO] [Thread-26315] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:48:18.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:48:18.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:48:18.927 [DEBUG] [Thread-26315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:48:18.927 [DEBUG] [Thread-26315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:48:18.975 [DEBUG] [Thread-26315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:48:18.975 [DEBUG] [Thread-26315] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:48:18.984 [DEBUG] [Thread-26315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:48:18.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:48:18.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')
2026-04-15T21:48:19.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
2026-04-15T21:48:19.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:48:19.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:48:19.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:48:19.022 [DEBUG] [Thread-26315] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:48:20.749 [DEBUG] [Thread-26317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:48:28.067 [DEBUG] [Thread-26318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:48:43.107 [DEBUG] [Thread-26319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:48:49.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:48:49.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:48:49.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
2026-04-15T21:48:50.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 48, 31), 4.67562, 72.9066, 0.0, 10.0404, 10.1442, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:48:50.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:48:31
2026-04-15T21:48:50.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:48:51.100 [DEBUG] [Thread-26320] [transport.py] [_log()] starting thread (client mode): 0xf13e3a00
2026-04-15T21:48:51.101 [DEBUG] [Thread-26320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:48:51.120 [DEBUG] [Thread-26320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:48:51.121 [INFO] [Thread-26320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:48:51.124 [DEBUG] [Thread-26320] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:48:51.124 [DEBUG] [Thread-26320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:48:51.124 [DEBUG] [Thread-26320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:48:51.124 [DEBUG] [Thread-26320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:48:51.124 [DEBUG] [Thread-26320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:48:51.124 [DEBUG] [Thread-26320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:48:51.124 [DEBUG] [Thread-26320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:48:51.124 [DEBUG] [Thread-26320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:48:51.124 [DEBUG] [Thread-26320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:48:51.124 [DEBUG] [Thread-26320] [transport.py] [_log()] client lang: <none>
2026-04-15T21:48:51.125 [DEBUG] [Thread-26320] [transport.py] [_log()] server lang: <none>
2026-04-15T21:48:51.125 [DEBUG] [Thread-26320] [transport.py] [_log()] kex follows: False
2026-04-15T21:48:51.125 [DEBUG] [Thread-26320] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:48:51.125 [DEBUG] [Thread-26320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:48:51.125 [DEBUG] [Thread-26320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:48:51.125 [DEBUG] [Thread-26320] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:48:51.125 [DEBUG] [Thread-26320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:48:51.125 [DEBUG] [Thread-26320] [transport.py] [_log()] Compression: none
2026-04-15T21:48:51.125 [DEBUG] [Thread-26320] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:48:51.142 [DEBUG] [Thread-26320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:48:51.143 [DEBUG] [Thread-26320] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:48:51.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:48:51.143 [DEBUG] [Thread-26320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:48:51.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:48:51.144 [DEBUG] [Thread-26320] [transport.py] [_log()] userauth is OK
2026-04-15T21:48:51.144 [DEBUG] [Thread-26320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:48:51.145 [DEBUG] [Thread-26320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:48:51.145 [DEBUG] [Thread-26320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:48:51.145 [DEBUG] [Thread-26320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:48:51.161 [INFO] [Thread-26320] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:48:51.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:48:51.940 [DEBUG] [Thread-26320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:48:51.941 [DEBUG] [Thread-26320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:48:51.942 [DEBUG] [Thread-26320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:48:51.981 [DEBUG] [Thread-26320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:48:51.981 [DEBUG] [Thread-26320] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:48:51.984 [DEBUG] [Thread-26320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:48:51.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:48:51.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:48:51.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:48:52.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:48:52.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:48:52.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:48:52.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:48:52.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:48:52.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:48:52.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.825130 -999.00  +10.40   7.24     76   +6.50 1 1 1 1 1     0    0 3.80 0.90 ZNESW 6.1 7.2 80.8 9.5 10.6 -24.8 10.5 -23.6 10.2 -21.5 10.5 -23.5
2026-04-15T21:48:52.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:48:52.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:48:52.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.825130
2026-04-15T21:48:52.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:48:52.009 [DEBUG] [Thread-26320] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:48:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:48:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:48:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:48:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:48:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:48:31', tmtdew=4.67562, humidity=72.9066, cloud=0.0, wind=10.0404, temperature=10.1442, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:48:11.232', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, 0.008250000000000313, -0.05325000000000024, -0.06050000000000111, -0.08799999999999919, -0.017249999999998877, 0.01699999999999946, 0.012249999999999872, 0.009499999999999176, -0.022999999999999687, -0.03575000000000017, -0.032999999999999474, 0.02049999999999841, 0.0182500000000001, 0.006999999999999673, -0.008000000000000895, 0.04224999999999923, -0.03049999999999997, -0.018000000000000682, 0.03824999999999967, 0.010999999999999233, 0.025749999999998607, -0.01624999999999943, -0.006249999999999645, 0.02949999999999875, -0.03549999999999898, 0.015249999999999986, 0.015499999999999403, 0.06900000000000084, -0.0019999999999988916, 0.040000000000000924, 0.04100000000000037, -0.004250000000000753], zp_timestamp='2026-04-15T19:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:48:52.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:48:52.266 [DEBUG] [Thread-26323] [transport.py] [_log()] starting thread (client mode): 0xf1352cb0
2026-04-15T21:48:52.267 [DEBUG] [Thread-26323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:48:52.281 [DEBUG] [Thread-26323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:48:52.281 [INFO] [Thread-26323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:48:52.289 [DEBUG] [Thread-26323] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:48:52.289 [DEBUG] [Thread-26323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:48:52.289 [DEBUG] [Thread-26323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:48:52.289 [DEBUG] [Thread-26323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:48:52.289 [DEBUG] [Thread-26323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:48:52.289 [DEBUG] [Thread-26323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:48:52.290 [DEBUG] [Thread-26323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:48:52.290 [DEBUG] [Thread-26323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:48:52.290 [DEBUG] [Thread-26323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:48:52.290 [DEBUG] [Thread-26323] [transport.py] [_log()] client lang: <none>
2026-04-15T21:48:52.290 [DEBUG] [Thread-26323] [transport.py] [_log()] server lang: <none>
2026-04-15T21:48:52.290 [DEBUG] [Thread-26323] [transport.py] [_log()] kex follows: False
2026-04-15T21:48:52.290 [DEBUG] [Thread-26323] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:48:52.290 [DEBUG] [Thread-26323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:48:52.290 [DEBUG] [Thread-26323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:48:52.290 [DEBUG] [Thread-26323] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:48:52.290 [DEBUG] [Thread-26323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:48:52.291 [DEBUG] [Thread-26323] [transport.py] [_log()] Compression: none
2026-04-15T21:48:52.291 [DEBUG] [Thread-26323] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:48:52.348 [DEBUG] [Thread-26323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:48:52.348 [DEBUG] [Thread-26323] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:48:52.349 [DEBUG] [Thread-26323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:48:52.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:48:52.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:48:52.405 [DEBUG] [Thread-26323] [transport.py] [_log()] userauth is OK
2026-04-15T21:48:52.405 [DEBUG] [Thread-26323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:48:52.405 [DEBUG] [Thread-26323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:48:52.405 [DEBUG] [Thread-26323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:48:52.405 [DEBUG] [Thread-26323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:48:52.429 [INFO] [Thread-26323] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:48:52.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:48:52.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:48:52.842 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:48:52.843 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:48:53.274 [DEBUG] [Thread-26323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:48:53.275 [DEBUG] [Thread-26323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:48:53.322 [DEBUG] [Thread-26323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:48:53.322 [DEBUG] [Thread-26323] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:48:53.331 [DEBUG] [Thread-26323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:48:53.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:48: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')
2026-04-15T21:48: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
2026-04-15T21:48:53.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:48:53.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:48:53.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:48:53.367 [DEBUG] [Thread-26323] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:48:58.138 [DEBUG] [Thread-26325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:49:13.179 [DEBUG] [Thread-26326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:49:20.894 [DEBUG] [Thread-26327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:49:23.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:49:23.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:49:23.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
2026-04-15T21:49:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 49, 6), 4.65876, 73.0061, 0.0, 10.6402, 10.2106, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:49:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:49:06
2026-04-15T21:49:25.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:49:25.679 [DEBUG] [Thread-26328] [transport.py] [_log()] starting thread (client mode): 0xf1352e00
2026-04-15T21:49:25.679 [DEBUG] [Thread-26328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:49:25.698 [DEBUG] [Thread-26328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:49:25.698 [INFO] [Thread-26328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] client lang: <none>
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] server lang: <none>
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] kex follows: False
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:49:25.702 [DEBUG] [Thread-26328] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:49:25.703 [DEBUG] [Thread-26328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:49:25.703 [DEBUG] [Thread-26328] [transport.py] [_log()] Compression: none
2026-04-15T21:49:25.703 [DEBUG] [Thread-26328] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:49:25.718 [DEBUG] [Thread-26328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:49:25.719 [DEBUG] [Thread-26328] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:49:25.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:49:25.719 [DEBUG] [Thread-26328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:49:25.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:49:25.720 [DEBUG] [Thread-26328] [transport.py] [_log()] userauth is OK
2026-04-15T21:49:25.720 [DEBUG] [Thread-26328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:49:25.720 [DEBUG] [Thread-26328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:49:25.720 [DEBUG] [Thread-26328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:49:25.720 [DEBUG] [Thread-26328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:49:25.739 [INFO] [Thread-26328] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:49:25.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:49:26.540 [DEBUG] [Thread-26328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:49:26.541 [DEBUG] [Thread-26328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:49:26.541 [DEBUG] [Thread-26328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:49:26.590 [DEBUG] [Thread-26328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:49:26.591 [DEBUG] [Thread-26328] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:49:26.593 [DEBUG] [Thread-26328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:49:26.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:49:26.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:49:26.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:49:26.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:49:26.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:49:26.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:49:26.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:49:26.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:49:26.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:49:26.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.825478 -999.00  +10.40   6.48     76   +6.50 1 1 1 1 1     0    0 3.81 0.96 ZNESW 5.3 6.5 91.9 7.7 10.6 -24.8 10.4 -23.6 10.2 -21.4 10.5 -23.5
2026-04-15T21:49:26.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:49:26.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:49:26.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.825478
2026-04-15T21:49:26.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:49:26.617 [DEBUG] [Thread-26328] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:49:26.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:49:26.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:49:26.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:49:26.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:49:26.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:49:06', tmtdew=4.65876, humidity=73.0061, cloud=0.0, wind=10.6402, temperature=10.2106, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:48:41.299', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, 0.008250000000000313, -0.05325000000000024, -0.06050000000000111, -0.08799999999999919, -0.017249999999998877, 0.01699999999999946, 0.012249999999999872, 0.009499999999999176, -0.022999999999999687, -0.03575000000000017, -0.032999999999999474, 0.02049999999999841, 0.0182500000000001, 0.006999999999999673, -0.008000000000000895, 0.04224999999999923, -0.03049999999999997, -0.018000000000000682, 0.03824999999999967, 0.010999999999999233, 0.025749999999998607, -0.01624999999999943, -0.006249999999999645, 0.02949999999999875, -0.03549999999999898, 0.015249999999999986, 0.015499999999999403, 0.06900000000000084, -0.0019999999999988916, 0.040000000000000924, 0.04100000000000037, -0.004250000000000753], zp_timestamp='2026-04-15T19:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:49:26.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:49:26.874 [DEBUG] [Thread-26331] [transport.py] [_log()] starting thread (client mode): 0xf13e0100
2026-04-15T21:49:26.874 [DEBUG] [Thread-26331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:49:26.888 [DEBUG] [Thread-26331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:49:26.888 [INFO] [Thread-26331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:49:26.896 [DEBUG] [Thread-26331] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:49:26.896 [DEBUG] [Thread-26331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:49:26.896 [DEBUG] [Thread-26331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:49:26.896 [DEBUG] [Thread-26331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:49:26.896 [DEBUG] [Thread-26331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:49:26.896 [DEBUG] [Thread-26331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:49:26.896 [DEBUG] [Thread-26331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:49:26.897 [DEBUG] [Thread-26331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:49:26.897 [DEBUG] [Thread-26331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:49:26.897 [DEBUG] [Thread-26331] [transport.py] [_log()] client lang: <none>
2026-04-15T21:49:26.897 [DEBUG] [Thread-26331] [transport.py] [_log()] server lang: <none>
2026-04-15T21:49:26.897 [DEBUG] [Thread-26331] [transport.py] [_log()] kex follows: False
2026-04-15T21:49:26.897 [DEBUG] [Thread-26331] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:49:26.897 [DEBUG] [Thread-26331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:49:26.897 [DEBUG] [Thread-26331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:49:26.898 [DEBUG] [Thread-26331] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:49:26.898 [DEBUG] [Thread-26331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:49:26.898 [DEBUG] [Thread-26331] [transport.py] [_log()] Compression: none
2026-04-15T21:49:26.898 [DEBUG] [Thread-26331] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:49:26.952 [DEBUG] [Thread-26331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:49:26.952 [DEBUG] [Thread-26331] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:49:26.953 [DEBUG] [Thread-26331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:49:26.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:49:26.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:49:27.009 [DEBUG] [Thread-26331] [transport.py] [_log()] userauth is OK
2026-04-15T21:49:27.009 [DEBUG] [Thread-26331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:49:27.009 [DEBUG] [Thread-26331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:49:27.009 [DEBUG] [Thread-26331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:49:27.009 [DEBUG] [Thread-26331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:49:27.034 [INFO] [Thread-26331] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:49:27.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:49:27.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:49:27.883 [DEBUG] [Thread-26331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:49:27.884 [DEBUG] [Thread-26331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:49:27.934 [DEBUG] [Thread-26331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:49:27.934 [DEBUG] [Thread-26331] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:49:27.944 [DEBUG] [Thread-26331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:49:27.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:49:27.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')
2026-04-15T21:49: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
2026-04-15T21:49:27.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:49:27.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:49:27.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:49:27.980 [DEBUG] [Thread-26331] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:49:28.207 [DEBUG] [Thread-26333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:49:43.248 [DEBUG] [Thread-26334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:49:53.046 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:49:53.047 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:49:57.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:49:57.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:49:57.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
2026-04-15T21:49:58.280 [DEBUG] [Thread-26335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:49:59.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 49, 42), 4.02076, 75.9791, 0.0, 13.8686, 9.72156, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:49:59.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:49:42
2026-04-15T21:49:59.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:50:00.226 [DEBUG] [Thread-26336] [transport.py] [_log()] starting thread (client mode): 0xee906d10
2026-04-15T21:50:00.226 [DEBUG] [Thread-26336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:50:00.246 [DEBUG] [Thread-26336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:50:00.246 [INFO] [Thread-26336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:50:00.249 [DEBUG] [Thread-26336] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:50:00.250 [DEBUG] [Thread-26336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:50:00.250 [DEBUG] [Thread-26336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:50:00.250 [DEBUG] [Thread-26336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:50:00.250 [DEBUG] [Thread-26336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:50:00.250 [DEBUG] [Thread-26336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:50:00.250 [DEBUG] [Thread-26336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:50:00.250 [DEBUG] [Thread-26336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:50:00.250 [DEBUG] [Thread-26336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:50:00.250 [DEBUG] [Thread-26336] [transport.py] [_log()] client lang: <none>
2026-04-15T21:50:00.250 [DEBUG] [Thread-26336] [transport.py] [_log()] server lang: <none>
2026-04-15T21:50:00.250 [DEBUG] [Thread-26336] [transport.py] [_log()] kex follows: False
2026-04-15T21:50:00.250 [DEBUG] [Thread-26336] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:50:00.250 [DEBUG] [Thread-26336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:50:00.250 [DEBUG] [Thread-26336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:50:00.250 [DEBUG] [Thread-26336] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:50:00.251 [DEBUG] [Thread-26336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:50:00.251 [DEBUG] [Thread-26336] [transport.py] [_log()] Compression: none
2026-04-15T21:50:00.251 [DEBUG] [Thread-26336] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:50:00.267 [DEBUG] [Thread-26336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:50:00.267 [DEBUG] [Thread-26336] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:50:00.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:50:00.268 [DEBUG] [Thread-26336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:50:00.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:50:00.269 [DEBUG] [Thread-26336] [transport.py] [_log()] userauth is OK
2026-04-15T21:50:00.269 [DEBUG] [Thread-26336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:50:00.269 [DEBUG] [Thread-26336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:50:00.269 [DEBUG] [Thread-26336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:50:00.269 [DEBUG] [Thread-26336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:50:00.288 [INFO] [Thread-26336] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:50:00.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:50:01.053 [DEBUG] [Thread-26336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:50:01.053 [DEBUG] [Thread-26336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:50:01.054 [DEBUG] [Thread-26336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:50:01.094 [DEBUG] [Thread-26336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:50:01.094 [DEBUG] [Thread-26336] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:50:01.097 [DEBUG] [Thread-26336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:50:01.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:50:01.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:50:01.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:50:01.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:50:01.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:50:01.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:50:01.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:50:01.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:50:01.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:50:01.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.826172 -999.00  +10.40   5.88     76   +6.50 1 1 1 1 1     0    0 3.91 0.69 ZNESW 5.4 5.9 94.1 10.1 10.6 -24.9 10.5 -23.7 10.2 -21.4 10.4 -23.6
2026-04-15T21:50:01.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:50:01.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:50:01.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.826172
2026-04-15T21:50:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:50:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:50:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:50:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:50:01.117 [DEBUG] [Thread-26336] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:50:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:50:01.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:49:42', tmtdew=4.02076, humidity=75.9791, cloud=0.0, wind=13.8686, temperature=9.72156, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:49:41.261', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, 0.008250000000000313, -0.05325000000000024, -0.06050000000000111, -0.08799999999999919, -0.017249999999998877, 0.01699999999999946, 0.012249999999999872, 0.009499999999999176, -0.022999999999999687, -0.03575000000000017, -0.032999999999999474, 0.02049999999999841, 0.0182500000000001, 0.006999999999999673, -0.008000000000000895, 0.04224999999999923, -0.03049999999999997, -0.018000000000000682, 0.03824999999999967, 0.010999999999999233, 0.025749999999998607, -0.01624999999999943, -0.006249999999999645, 0.02949999999999875, -0.03549999999999898, 0.015249999999999986, 0.015499999999999403, 0.06900000000000084, -0.0019999999999988916, 0.040000000000000924, 0.04100000000000037, -0.004250000000000753], zp_timestamp='2026-04-15T19:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:50:01.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:50:01.374 [DEBUG] [Thread-26339] [transport.py] [_log()] starting thread (client mode): 0xf13643d0
2026-04-15T21:50:01.374 [DEBUG] [Thread-26339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:50:01.389 [DEBUG] [Thread-26339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:50:01.389 [INFO] [Thread-26339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:50:01.397 [DEBUG] [Thread-26339] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:50:01.397 [DEBUG] [Thread-26339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:50:01.397 [DEBUG] [Thread-26339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:50:01.397 [DEBUG] [Thread-26339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:50:01.397 [DEBUG] [Thread-26339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:50:01.398 [DEBUG] [Thread-26339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:50:01.398 [DEBUG] [Thread-26339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:50:01.398 [DEBUG] [Thread-26339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:50:01.398 [DEBUG] [Thread-26339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:50:01.398 [DEBUG] [Thread-26339] [transport.py] [_log()] client lang: <none>
2026-04-15T21:50:01.398 [DEBUG] [Thread-26339] [transport.py] [_log()] server lang: <none>
2026-04-15T21:50:01.398 [DEBUG] [Thread-26339] [transport.py] [_log()] kex follows: False
2026-04-15T21:50:01.398 [DEBUG] [Thread-26339] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:50:01.398 [DEBUG] [Thread-26339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:50:01.398 [DEBUG] [Thread-26339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:50:01.398 [DEBUG] [Thread-26339] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:50:01.398 [DEBUG] [Thread-26339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:50:01.399 [DEBUG] [Thread-26339] [transport.py] [_log()] Compression: none
2026-04-15T21:50:01.399 [DEBUG] [Thread-26339] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:50:01.456 [DEBUG] [Thread-26339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:50:01.456 [DEBUG] [Thread-26339] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:50:01.457 [DEBUG] [Thread-26339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:50:01.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:50:01.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:50:01.513 [DEBUG] [Thread-26339] [transport.py] [_log()] userauth is OK
2026-04-15T21:50:01.514 [DEBUG] [Thread-26339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:50:01.514 [DEBUG] [Thread-26339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:50:01.514 [DEBUG] [Thread-26339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:50:01.514 [DEBUG] [Thread-26339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:50:01.531 [INFO] [Thread-26339] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:50:01.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:50:01.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:50:02.392 [DEBUG] [Thread-26339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:50:02.392 [DEBUG] [Thread-26339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:50:02.440 [DEBUG] [Thread-26339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:50:02.440 [DEBUG] [Thread-26339] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:50:02.449 [DEBUG] [Thread-26339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:50:02.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:50:02.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')
2026-04-15T21:50:02.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
2026-04-15T21:50:02.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:50:02.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:50:02.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:50:02.485 [DEBUG] [Thread-26339] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:50:13.308 [DEBUG] [Thread-26341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:50:21.057 [DEBUG] [Thread-26342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:50:28.351 [DEBUG] [Thread-26343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:50:32.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:50:32.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:50:32.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
2026-04-15T21:50:33.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 50, 18), 4.7672, 72.4563, 0.0, 10.0404, 10.2273, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:50:33.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:50:18
2026-04-15T21:50:34.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:50:34.628 [DEBUG] [Thread-26344] [transport.py] [_log()] starting thread (client mode): 0xee9c39d0
2026-04-15T21:50:34.629 [DEBUG] [Thread-26344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:50:34.648 [DEBUG] [Thread-26344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:50:34.649 [INFO] [Thread-26344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:50:34.652 [DEBUG] [Thread-26344] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:50:34.652 [DEBUG] [Thread-26344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:50:34.652 [DEBUG] [Thread-26344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:50:34.652 [DEBUG] [Thread-26344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:50:34.652 [DEBUG] [Thread-26344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:50:34.652 [DEBUG] [Thread-26344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:50:34.652 [DEBUG] [Thread-26344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:50:34.652 [DEBUG] [Thread-26344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:50:34.652 [DEBUG] [Thread-26344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:50:34.652 [DEBUG] [Thread-26344] [transport.py] [_log()] client lang: <none>
2026-04-15T21:50:34.652 [DEBUG] [Thread-26344] [transport.py] [_log()] server lang: <none>
2026-04-15T21:50:34.652 [DEBUG] [Thread-26344] [transport.py] [_log()] kex follows: False
2026-04-15T21:50:34.653 [DEBUG] [Thread-26344] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:50:34.653 [DEBUG] [Thread-26344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:50:34.653 [DEBUG] [Thread-26344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:50:34.653 [DEBUG] [Thread-26344] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:50:34.653 [DEBUG] [Thread-26344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:50:34.653 [DEBUG] [Thread-26344] [transport.py] [_log()] Compression: none
2026-04-15T21:50:34.653 [DEBUG] [Thread-26344] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:50:34.671 [DEBUG] [Thread-26344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:50:34.671 [DEBUG] [Thread-26344] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:50:34.671 [DEBUG] [Thread-26344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:50:34.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:50:34.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:50:34.672 [DEBUG] [Thread-26344] [transport.py] [_log()] userauth is OK
2026-04-15T21:50:34.672 [DEBUG] [Thread-26344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:50:34.673 [DEBUG] [Thread-26344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:50:34.673 [DEBUG] [Thread-26344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:50:34.673 [DEBUG] [Thread-26344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:50:34.692 [INFO] [Thread-26344] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:50:34.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:50:35.309 [DEBUG] [Thread-26344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:50:35.309 [DEBUG] [Thread-26344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:50:35.310 [DEBUG] [Thread-26344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:50:35.350 [DEBUG] [Thread-26344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:50:35.350 [DEBUG] [Thread-26344] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:50:35.353 [DEBUG] [Thread-26344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:50:35.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:50:35.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:50:35.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:50:35.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:50:35.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:50:35.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:50:35.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:50:35.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:50:35.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:50:35.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.826519 -999.00  +10.40   7.38     76   +6.40 1 1 1 1 1     0    0 3.87 0.51 ZNESW 5.2 7.4 108.0 8.6 10.6 -24.9 10.4 -23.7 10.2 -21.3 10.5 -23.6
2026-04-15T21:50:35.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:50:35.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:50:35.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.826519
2026-04-15T21:50:35.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:50:35.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:50:35.375 [DEBUG] [Thread-26344] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:50:35.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:50:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:50:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:50:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:50:18', tmtdew=4.7672, humidity=72.4563, cloud=0.0, wind=10.0404, temperature=10.2273, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:50:11.242', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, -0.006750000000000256, -0.03175000000000061, -0.05550000000000033, -0.0495000000000001, 0.017250000000000654, 0.0030000000000001137, 0.02775000000000105, 0.01750000000000007, -0.027499999999999858, -0.03974999999999973, -0.02549999999999919, 0.025000000000000355, 0.006249999999999645, -0.0030000000000001137, 0.008999999999998565, 0.04925000000000068, -0.014000000000001123, 0.0024999999999995026, 0.030249999999998778, 0.04099999999999859, 0.05674999999999919, 0.004750000000001364, 0.023749999999999716, 0.03649999999999842, -0.0495000000000001, 0.013749999999999929, 0.024499999999999744, 0.05000000000000071, -0.01899999999999835, 0.04200000000000159, 0.010000000000001563, 0.035749999999998394], zp_timestamp='2026-04-15T19:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:50:35.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:50:35.638 [DEBUG] [Thread-26347] [transport.py] [_log()] starting thread (client mode): 0xee9c01c0
2026-04-15T21:50:35.639 [DEBUG] [Thread-26347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:50:35.653 [DEBUG] [Thread-26347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:50:35.653 [INFO] [Thread-26347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:50:35.660 [DEBUG] [Thread-26347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:50:35.660 [DEBUG] [Thread-26347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:50:35.660 [DEBUG] [Thread-26347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:50:35.660 [DEBUG] [Thread-26347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:50:35.661 [DEBUG] [Thread-26347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:50:35.661 [DEBUG] [Thread-26347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:50:35.661 [DEBUG] [Thread-26347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:50:35.661 [DEBUG] [Thread-26347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:50:35.661 [DEBUG] [Thread-26347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:50:35.661 [DEBUG] [Thread-26347] [transport.py] [_log()] client lang: <none>
2026-04-15T21:50:35.661 [DEBUG] [Thread-26347] [transport.py] [_log()] server lang: <none>
2026-04-15T21:50:35.661 [DEBUG] [Thread-26347] [transport.py] [_log()] kex follows: False
2026-04-15T21:50:35.661 [DEBUG] [Thread-26347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:50:35.661 [DEBUG] [Thread-26347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:50:35.661 [DEBUG] [Thread-26347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:50:35.662 [DEBUG] [Thread-26347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:50:35.662 [DEBUG] [Thread-26347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:50:35.662 [DEBUG] [Thread-26347] [transport.py] [_log()] Compression: none
2026-04-15T21:50:35.662 [DEBUG] [Thread-26347] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:50:35.717 [DEBUG] [Thread-26347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:50:35.717 [DEBUG] [Thread-26347] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:50:35.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:50:35.718 [DEBUG] [Thread-26347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:50:35.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:50:35.773 [DEBUG] [Thread-26347] [transport.py] [_log()] userauth is OK
2026-04-15T21:50:35.773 [DEBUG] [Thread-26347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:50:35.773 [DEBUG] [Thread-26347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:50:35.774 [DEBUG] [Thread-26347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:50:35.774 [DEBUG] [Thread-26347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:50:35.792 [INFO] [Thread-26347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:50:35.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:50:35.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:50:36.607 [DEBUG] [Thread-26347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:50:36.608 [DEBUG] [Thread-26347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:50:36.655 [DEBUG] [Thread-26347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:50:36.655 [DEBUG] [Thread-26347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:50:36.664 [DEBUG] [Thread-26347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:50:36.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:50:36.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')
2026-04-15T21:50:36.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
2026-04-15T21:50:36.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:50:36.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:50:36.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:50:36.699 [DEBUG] [Thread-26347] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:50:43.380 [DEBUG] [Thread-26349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:50:53.246 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:50:53.247 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:50:58.428 [DEBUG] [Thread-26350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:51:06.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:51:06.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:51:06.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:51:08.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 50, 54), 4.04806, 75.8463, 0.0, 13.0219, 9.78786, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:51:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:50:54
2026-04-15T21:51:08.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:51:08.898 [DEBUG] [Thread-26351] [transport.py] [_log()] starting thread (client mode): 0xee9c1840
2026-04-15T21:51:08.898 [DEBUG] [Thread-26351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:51:08.914 [DEBUG] [Thread-26351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:51:08.914 [INFO] [Thread-26351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:51:08.917 [DEBUG] [Thread-26351] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:51:08.917 [DEBUG] [Thread-26351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:51:08.918 [DEBUG] [Thread-26351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:51:08.918 [DEBUG] [Thread-26351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:51:08.918 [DEBUG] [Thread-26351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:51:08.918 [DEBUG] [Thread-26351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:51:08.918 [DEBUG] [Thread-26351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:51:08.918 [DEBUG] [Thread-26351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:51:08.918 [DEBUG] [Thread-26351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:51:08.918 [DEBUG] [Thread-26351] [transport.py] [_log()] client lang: <none>
2026-04-15T21:51:08.918 [DEBUG] [Thread-26351] [transport.py] [_log()] server lang: <none>
2026-04-15T21:51:08.918 [DEBUG] [Thread-26351] [transport.py] [_log()] kex follows: False
2026-04-15T21:51:08.918 [DEBUG] [Thread-26351] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:51:08.919 [DEBUG] [Thread-26351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:51:08.919 [DEBUG] [Thread-26351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:51:08.919 [DEBUG] [Thread-26351] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:51:08.919 [DEBUG] [Thread-26351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:51:08.919 [DEBUG] [Thread-26351] [transport.py] [_log()] Compression: none
2026-04-15T21:51:08.919 [DEBUG] [Thread-26351] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:51:08.936 [DEBUG] [Thread-26351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:51:08.936 [DEBUG] [Thread-26351] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:51:08.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:51:08.937 [DEBUG] [Thread-26351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:51:08.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:51:08.938 [DEBUG] [Thread-26351] [transport.py] [_log()] userauth is OK
2026-04-15T21:51:08.938 [DEBUG] [Thread-26351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:51:08.938 [DEBUG] [Thread-26351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:51:08.939 [DEBUG] [Thread-26351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:51:08.939 [DEBUG] [Thread-26351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:51:08.957 [INFO] [Thread-26351] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:51:08.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:51:09.583 [DEBUG] [Thread-26351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:51:09.583 [DEBUG] [Thread-26351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:51:09.583 [DEBUG] [Thread-26351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:51:09.624 [DEBUG] [Thread-26351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:51:09.624 [DEBUG] [Thread-26351] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:51:09.627 [DEBUG] [Thread-26351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:51:09.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:51:09.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:51:09.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:51:09.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:51:09.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:51:09.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:51:09.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:51:09.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:51:09.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:51:09.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.826866 -999.00  +10.50   4.70     76   +6.40 1 1 1 1 1     0    0 3.95 1.14 ZNESW 4.7 4.7 60.2 8.8 10.7 -24.9 10.4 -23.7 10.2 -21.5 10.5 -23.5
2026-04-15T21:51:09.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:51:09.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:51:09.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.826866
2026-04-15T21:51:09.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:51:09.650 [DEBUG] [Thread-26351] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:51:09.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:51:09.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:51:09.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:51:09.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:51:09.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:50:54', tmtdew=4.04806, humidity=75.8463, cloud=0.0, wind=13.0219, temperature=9.78786, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:50:41.222', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, -0.006750000000000256, -0.03175000000000061, -0.05550000000000033, -0.0495000000000001, 0.017250000000000654, 0.0030000000000001137, 0.02775000000000105, 0.01750000000000007, -0.027499999999999858, -0.03974999999999973, -0.02549999999999919, 0.025000000000000355, 0.006249999999999645, -0.0030000000000001137, 0.008999999999998565, 0.04925000000000068, -0.014000000000001123, 0.0024999999999995026, 0.030249999999998778, 0.04099999999999859, 0.05674999999999919, 0.004750000000001364, 0.023749999999999716, 0.03649999999999842, -0.0495000000000001, 0.013749999999999929, 0.024499999999999744, 0.05000000000000071, -0.01899999999999835, 0.04200000000000159, 0.010000000000001563, 0.035749999999998394], zp_timestamp='2026-04-15T19:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:51:09.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:51:09.907 [DEBUG] [Thread-26354] [transport.py] [_log()] starting thread (client mode): 0xee9c03a0
2026-04-15T21:51:09.907 [DEBUG] [Thread-26354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:51:09.922 [DEBUG] [Thread-26354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:51:09.922 [INFO] [Thread-26354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:51:09.930 [DEBUG] [Thread-26354] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:51:09.930 [DEBUG] [Thread-26354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:51:09.930 [DEBUG] [Thread-26354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:51:09.930 [DEBUG] [Thread-26354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:51:09.930 [DEBUG] [Thread-26354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:51:09.930 [DEBUG] [Thread-26354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:51:09.930 [DEBUG] [Thread-26354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:51:09.930 [DEBUG] [Thread-26354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:51:09.930 [DEBUG] [Thread-26354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:51:09.930 [DEBUG] [Thread-26354] [transport.py] [_log()] client lang: <none>
2026-04-15T21:51:09.930 [DEBUG] [Thread-26354] [transport.py] [_log()] server lang: <none>
2026-04-15T21:51:09.931 [DEBUG] [Thread-26354] [transport.py] [_log()] kex follows: False
2026-04-15T21:51:09.931 [DEBUG] [Thread-26354] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:51:09.931 [DEBUG] [Thread-26354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:51:09.931 [DEBUG] [Thread-26354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:51:09.931 [DEBUG] [Thread-26354] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:51:09.931 [DEBUG] [Thread-26354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:51:09.931 [DEBUG] [Thread-26354] [transport.py] [_log()] Compression: none
2026-04-15T21:51:09.931 [DEBUG] [Thread-26354] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:51:09.985 [DEBUG] [Thread-26354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:51:09.986 [DEBUG] [Thread-26354] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:51:09.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:51:09.987 [DEBUG] [Thread-26354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:51:09.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:51:10.046 [DEBUG] [Thread-26354] [transport.py] [_log()] userauth is OK
2026-04-15T21:51:10.046 [DEBUG] [Thread-26354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:51:10.046 [DEBUG] [Thread-26354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:51:10.046 [DEBUG] [Thread-26354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:51:10.046 [DEBUG] [Thread-26354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:51:10.073 [INFO] [Thread-26354] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:51:10.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:51:10.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:51:10.887 [DEBUG] [Thread-26354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:51:10.888 [DEBUG] [Thread-26354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:51:10.937 [DEBUG] [Thread-26354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:51:10.937 [DEBUG] [Thread-26354] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:51:10.949 [DEBUG] [Thread-26354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:51:10.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:51:10.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')
2026-04-15T21:51:10.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') -> 00000000
2026-04-15T21:51:11.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:51:11.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:51:11.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:51:11.011 [DEBUG] [Thread-26354] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:51:13.457 [DEBUG] [Thread-26356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:51:21.203 [DEBUG] [Thread-26357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:51:28.495 [DEBUG] [Thread-26358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:51:41.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:51:41.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:51:41.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:51:42.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 51, 29), 4.77403, 72.4231, 0.0, 9.70524, 10.2439, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:51:42.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:51:29
2026-04-15T21:51:42.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:51:43.218 [DEBUG] [Thread-26359] [transport.py] [_log()] starting thread (client mode): 0xf13e3d00
2026-04-15T21:51:43.219 [DEBUG] [Thread-26359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:51:43.237 [DEBUG] [Thread-26359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:51:43.238 [INFO] [Thread-26359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:51:43.241 [DEBUG] [Thread-26359] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:51:43.241 [DEBUG] [Thread-26359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:51:43.241 [DEBUG] [Thread-26359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:51:43.241 [DEBUG] [Thread-26359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:51:43.241 [DEBUG] [Thread-26359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:51:43.241 [DEBUG] [Thread-26359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:51:43.241 [DEBUG] [Thread-26359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:51:43.241 [DEBUG] [Thread-26359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:51:43.241 [DEBUG] [Thread-26359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:51:43.241 [DEBUG] [Thread-26359] [transport.py] [_log()] client lang: <none>
2026-04-15T21:51:43.242 [DEBUG] [Thread-26359] [transport.py] [_log()] server lang: <none>
2026-04-15T21:51:43.242 [DEBUG] [Thread-26359] [transport.py] [_log()] kex follows: False
2026-04-15T21:51:43.242 [DEBUG] [Thread-26359] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:51:43.242 [DEBUG] [Thread-26359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:51:43.242 [DEBUG] [Thread-26359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:51:43.242 [DEBUG] [Thread-26359] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:51:43.242 [DEBUG] [Thread-26359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:51:43.242 [DEBUG] [Thread-26359] [transport.py] [_log()] Compression: none
2026-04-15T21:51:43.242 [DEBUG] [Thread-26359] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:51:43.258 [DEBUG] [Thread-26359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:51:43.258 [DEBUG] [Thread-26359] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:51:43.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:51:43.258 [DEBUG] [Thread-26359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:51:43.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:51:43.259 [DEBUG] [Thread-26359] [transport.py] [_log()] userauth is OK
2026-04-15T21:51:43.260 [DEBUG] [Thread-26359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:51:43.260 [DEBUG] [Thread-26359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:51:43.260 [DEBUG] [Thread-26359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:51:43.260 [DEBUG] [Thread-26359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:51:43.281 [INFO] [Thread-26359] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:51:43.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:51:43.525 [DEBUG] [Thread-26361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:51:43.906 [DEBUG] [Thread-26359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:51:43.907 [DEBUG] [Thread-26359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:51:43.907 [DEBUG] [Thread-26359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:51:43.947 [DEBUG] [Thread-26359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:51:43.947 [DEBUG] [Thread-26359] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:51:43.950 [DEBUG] [Thread-26359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:51:43.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:51:43.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:51:43.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:51:43.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:51:43.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:51:43.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:51:43.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:51:43.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:51:43.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:51:43.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.827214 -999.00  +10.40   3.68     76   +6.40 1 1 1 1 1     0    0 3.90 1.85 ZNESW 5.5 3.7 94.5 7.8 10.6 -24.9 10.4 -23.8 10.2 -21.7 10.5 -23.7
2026-04-15T21:51:43.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:51:43.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:51:43.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.827214
2026-04-15T21:51:43.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:51:43.975 [DEBUG] [Thread-26359] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:51:43.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:51:43.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:51:43.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:51:43.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:51:43.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:51:29', tmtdew=4.77403, humidity=72.4231, cloud=0.0, wind=9.70524, temperature=10.2439, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:51:11.290', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, -0.006750000000000256, -0.03175000000000061, -0.05550000000000033, -0.0495000000000001, 0.017250000000000654, 0.0030000000000001137, 0.02775000000000105, 0.01750000000000007, -0.027499999999999858, -0.03974999999999973, -0.02549999999999919, 0.025000000000000355, 0.006249999999999645, -0.0030000000000001137, 0.008999999999998565, 0.04925000000000068, -0.014000000000001123, 0.0024999999999995026, 0.030249999999998778, 0.04099999999999859, 0.05674999999999919, 0.004750000000001364, 0.023749999999999716, 0.03649999999999842, -0.0495000000000001, 0.013749999999999929, 0.024499999999999744, 0.05000000000000071, -0.01899999999999835, 0.04200000000000159, 0.010000000000001563, 0.035749999999998394], zp_timestamp='2026-04-15T19:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:51:44.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:51:44.235 [DEBUG] [Thread-26363] [transport.py] [_log()] starting thread (client mode): 0xf1353ac0
2026-04-15T21:51:44.235 [DEBUG] [Thread-26363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:51:44.250 [DEBUG] [Thread-26363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:51:44.250 [INFO] [Thread-26363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:51:44.260 [DEBUG] [Thread-26363] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:51:44.260 [DEBUG] [Thread-26363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:51:44.260 [DEBUG] [Thread-26363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:51:44.260 [DEBUG] [Thread-26363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:51:44.260 [DEBUG] [Thread-26363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:51:44.260 [DEBUG] [Thread-26363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:51:44.261 [DEBUG] [Thread-26363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:51:44.261 [DEBUG] [Thread-26363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:51:44.261 [DEBUG] [Thread-26363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:51:44.261 [DEBUG] [Thread-26363] [transport.py] [_log()] client lang: <none>
2026-04-15T21:51:44.261 [DEBUG] [Thread-26363] [transport.py] [_log()] server lang: <none>
2026-04-15T21:51:44.261 [DEBUG] [Thread-26363] [transport.py] [_log()] kex follows: False
2026-04-15T21:51:44.261 [DEBUG] [Thread-26363] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:51:44.261 [DEBUG] [Thread-26363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:51:44.261 [DEBUG] [Thread-26363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:51:44.261 [DEBUG] [Thread-26363] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:51:44.261 [DEBUG] [Thread-26363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:51:44.262 [DEBUG] [Thread-26363] [transport.py] [_log()] Compression: none
2026-04-15T21:51:44.262 [DEBUG] [Thread-26363] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:51:44.314 [DEBUG] [Thread-26363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:51:44.315 [DEBUG] [Thread-26363] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:51:44.315 [DEBUG] [Thread-26363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:51:44.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:51:44.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:51:44.370 [DEBUG] [Thread-26363] [transport.py] [_log()] userauth is OK
2026-04-15T21:51:44.371 [DEBUG] [Thread-26363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:51:44.371 [DEBUG] [Thread-26363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:51:44.371 [DEBUG] [Thread-26363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:51:44.371 [DEBUG] [Thread-26363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:51:44.405 [INFO] [Thread-26363] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:51:44.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:51:44.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:51:45.296 [DEBUG] [Thread-26363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:51:45.297 [DEBUG] [Thread-26363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:51:45.344 [DEBUG] [Thread-26363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:51:45.344 [DEBUG] [Thread-26363] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:51:45.353 [DEBUG] [Thread-26363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:51:45.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:51:45.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')
2026-04-15T21:51:45.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
2026-04-15T21:51:45.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:51:45.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:51:45.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:51:45.390 [DEBUG] [Thread-26363] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:51:53.449 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:51:53.451 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:51:58.556 [DEBUG] [Thread-26365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:52:13.596 [DEBUG] [Thread-26366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:52:15.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:52:15.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:52: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
2026-04-15T21:52:16.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 52, 5), 4.77771, 72.4065, 0.0, 10.0228, 10.2605, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:52:16.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:52:05
2026-04-15T21:52:17.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:52:17.542 [DEBUG] [Thread-26367] [transport.py] [_log()] starting thread (client mode): 0xee907220
2026-04-15T21:52:17.542 [DEBUG] [Thread-26367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:52:17.561 [DEBUG] [Thread-26367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:52:17.561 [INFO] [Thread-26367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:52:17.565 [DEBUG] [Thread-26367] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:52:17.565 [DEBUG] [Thread-26367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:52:17.565 [DEBUG] [Thread-26367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:52:17.565 [DEBUG] [Thread-26367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:52:17.565 [DEBUG] [Thread-26367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:52:17.565 [DEBUG] [Thread-26367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:52:17.565 [DEBUG] [Thread-26367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:52:17.565 [DEBUG] [Thread-26367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:52:17.565 [DEBUG] [Thread-26367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:52:17.565 [DEBUG] [Thread-26367] [transport.py] [_log()] client lang: <none>
2026-04-15T21:52:17.565 [DEBUG] [Thread-26367] [transport.py] [_log()] server lang: <none>
2026-04-15T21:52:17.565 [DEBUG] [Thread-26367] [transport.py] [_log()] kex follows: False
2026-04-15T21:52:17.566 [DEBUG] [Thread-26367] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:52:17.566 [DEBUG] [Thread-26367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:52:17.566 [DEBUG] [Thread-26367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:52:17.566 [DEBUG] [Thread-26367] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:52:17.566 [DEBUG] [Thread-26367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:52:17.566 [DEBUG] [Thread-26367] [transport.py] [_log()] Compression: none
2026-04-15T21:52:17.566 [DEBUG] [Thread-26367] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:52:17.581 [DEBUG] [Thread-26367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:52:17.582 [DEBUG] [Thread-26367] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:52:17.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:52:17.582 [DEBUG] [Thread-26367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:52:17.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:52:17.583 [DEBUG] [Thread-26367] [transport.py] [_log()] userauth is OK
2026-04-15T21:52:17.583 [DEBUG] [Thread-26367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:52:17.584 [DEBUG] [Thread-26367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:52:17.584 [DEBUG] [Thread-26367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:52:17.584 [DEBUG] [Thread-26367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:52:17.607 [INFO] [Thread-26367] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:52:17.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:52:18.266 [DEBUG] [Thread-26367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:52:18.266 [DEBUG] [Thread-26367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:52:18.267 [DEBUG] [Thread-26367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:52:18.307 [DEBUG] [Thread-26367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:52:18.307 [DEBUG] [Thread-26367] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:52:18.310 [DEBUG] [Thread-26367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:52:18.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:52:18.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:52:18.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:52:18.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:52:18.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:52:18.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:52:18.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:52:18.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:52:18.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:52:18.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.827561 -999.00  +10.40   7.31     76   +6.40 1 1 1 1 1     0    0 3.94 2.29 ZNESW 6.8 7.3 87.1 8.2 10.7 -25.0 10.5 -23.8 10.2 -21.6 10.5 -23.7
2026-04-15T21:52:18.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:52:18.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:52:18.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.827561
2026-04-15T21:52:18.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:52:18.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:52:18.334 [DEBUG] [Thread-26367] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:52:18.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:52:18.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:52:18.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:52:18.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:52:05', tmtdew=4.77771, humidity=72.4065, cloud=0.0, wind=10.0228, temperature=10.2605, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:51:41.270', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, -0.006750000000000256, -0.03175000000000061, -0.05550000000000033, -0.0495000000000001, 0.017250000000000654, 0.0030000000000001137, 0.02775000000000105, 0.01750000000000007, -0.027499999999999858, -0.03974999999999973, -0.02549999999999919, 0.025000000000000355, 0.006249999999999645, -0.0030000000000001137, 0.008999999999998565, 0.04925000000000068, -0.014000000000001123, 0.0024999999999995026, 0.030249999999998778, 0.04099999999999859, 0.05674999999999919, 0.004750000000001364, 0.023749999999999716, 0.03649999999999842, -0.0495000000000001, 0.013749999999999929, 0.024499999999999744, 0.05000000000000071, -0.01899999999999835, 0.04200000000000159, 0.010000000000001563, 0.035749999999998394], zp_timestamp='2026-04-15T19:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:52:18.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:52:18.592 [DEBUG] [Thread-26370] [transport.py] [_log()] starting thread (client mode): 0xf1351120
2026-04-15T21:52:18.592 [DEBUG] [Thread-26370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:52:18.607 [DEBUG] [Thread-26370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:52:18.607 [INFO] [Thread-26370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:52:18.614 [DEBUG] [Thread-26370] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] client lang: <none>
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] server lang: <none>
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] kex follows: False
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:52:18.615 [DEBUG] [Thread-26370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:52:18.616 [DEBUG] [Thread-26370] [transport.py] [_log()] Compression: none
2026-04-15T21:52:18.616 [DEBUG] [Thread-26370] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:52:18.672 [DEBUG] [Thread-26370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:52:18.673 [DEBUG] [Thread-26370] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:52:18.673 [DEBUG] [Thread-26370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:52:18.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:52:18.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:52:18.730 [DEBUG] [Thread-26370] [transport.py] [_log()] userauth is OK
2026-04-15T21:52:18.730 [DEBUG] [Thread-26370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:52:18.730 [DEBUG] [Thread-26370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:52:18.730 [DEBUG] [Thread-26370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:52:18.730 [DEBUG] [Thread-26370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:52:18.748 [INFO] [Thread-26370] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:52:18.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:52:18.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:52:19.569 [DEBUG] [Thread-26370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:52:19.569 [DEBUG] [Thread-26370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:52:19.617 [DEBUG] [Thread-26370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:52:19.617 [DEBUG] [Thread-26370] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:52:19.626 [DEBUG] [Thread-26370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:52:19.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:52:19.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')
2026-04-15T21:52:19.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
2026-04-15T21:52:19.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:52:19.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:52:19.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:52:19.661 [DEBUG] [Thread-26370] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:52:21.387 [DEBUG] [Thread-26372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:52:28.628 [DEBUG] [Thread-26373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:52:43.671 [DEBUG] [Thread-26374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:52:49.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:52:49.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:52:49.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
2026-04-15T21:52:51.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 52, 41), 4.05968, 75.7798, 0.0, 12.0341, 9.7546, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:52:51.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:52:41
2026-04-15T21:52:51.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:52:51.884 [DEBUG] [Thread-26375] [transport.py] [_log()] starting thread (client mode): 0xf13e1510
2026-04-15T21:52:51.884 [DEBUG] [Thread-26375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:52:51.903 [DEBUG] [Thread-26375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:52:51.903 [INFO] [Thread-26375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:52:51.906 [DEBUG] [Thread-26375] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:52:51.906 [DEBUG] [Thread-26375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:52:51.906 [DEBUG] [Thread-26375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:52:51.906 [DEBUG] [Thread-26375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:52:51.906 [DEBUG] [Thread-26375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:52:51.906 [DEBUG] [Thread-26375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:52:51.907 [DEBUG] [Thread-26375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:52:51.907 [DEBUG] [Thread-26375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:52:51.907 [DEBUG] [Thread-26375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:52:51.907 [DEBUG] [Thread-26375] [transport.py] [_log()] client lang: <none>
2026-04-15T21:52:51.907 [DEBUG] [Thread-26375] [transport.py] [_log()] server lang: <none>
2026-04-15T21:52:51.907 [DEBUG] [Thread-26375] [transport.py] [_log()] kex follows: False
2026-04-15T21:52:51.907 [DEBUG] [Thread-26375] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:52:51.907 [DEBUG] [Thread-26375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:52:51.907 [DEBUG] [Thread-26375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:52:51.907 [DEBUG] [Thread-26375] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:52:51.907 [DEBUG] [Thread-26375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:52:51.908 [DEBUG] [Thread-26375] [transport.py] [_log()] Compression: none
2026-04-15T21:52:51.908 [DEBUG] [Thread-26375] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:52:51.925 [DEBUG] [Thread-26375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:52:51.925 [DEBUG] [Thread-26375] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:52:51.926 [DEBUG] [Thread-26375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:52:51.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:52:51.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:52:51.927 [DEBUG] [Thread-26375] [transport.py] [_log()] userauth is OK
2026-04-15T21:52:51.927 [DEBUG] [Thread-26375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:52:51.927 [DEBUG] [Thread-26375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:52:51.927 [DEBUG] [Thread-26375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:52:51.927 [DEBUG] [Thread-26375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:52:51.949 [INFO] [Thread-26375] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:52:51.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:52:52.606 [DEBUG] [Thread-26375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:52:52.606 [DEBUG] [Thread-26375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:52:52.607 [DEBUG] [Thread-26375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:52:52.647 [DEBUG] [Thread-26375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:52:52.647 [DEBUG] [Thread-26375] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:52:52.650 [DEBUG] [Thread-26375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:52:52.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:52:52.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:52:52.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:52:52.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:52:52.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:52:52.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:52:52.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:52:52.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:52:52.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:52:52.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.828255 -999.00  +10.40   5.07     76   +6.50 1 1 1 1 1     0    0 4.04 3.12 ZNESW 4.8 5.1 78.0 8.5 10.6 -25.0 10.5 -23.8 10.2 -21.8 10.5 -23.7
2026-04-15T21:52:52.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:52:52.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:52:52.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.828255
2026-04-15T21:52:52.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:52:52.676 [DEBUG] [Thread-26375] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:52:52.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:52:52.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:52:52.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:52:52.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:52:52.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:52:41', tmtdew=4.05968, humidity=75.7798, cloud=0.0, wind=12.0341, temperature=9.7546, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:52:41.232', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, -0.006750000000000256, -0.03175000000000061, -0.05550000000000033, -0.0495000000000001, 0.017250000000000654, 0.0030000000000001137, 0.02775000000000105, 0.01750000000000007, -0.027499999999999858, -0.03974999999999973, -0.02549999999999919, 0.025000000000000355, 0.006249999999999645, -0.0030000000000001137, 0.008999999999998565, 0.04925000000000068, -0.014000000000001123, 0.0024999999999995026, 0.030249999999998778, 0.04099999999999859, 0.05674999999999919, 0.004750000000001364, 0.023749999999999716, 0.03649999999999842, -0.0495000000000001, 0.013749999999999929, 0.024499999999999744, 0.05000000000000071, -0.01899999999999835, 0.04200000000000159, 0.010000000000001563, 0.035749999999998394], zp_timestamp='2026-04-15T19:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:52:52.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:52:52.934 [DEBUG] [Thread-26378] [transport.py] [_log()] starting thread (client mode): 0xee95d120
2026-04-15T21:52:52.934 [DEBUG] [Thread-26378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:52:52.949 [DEBUG] [Thread-26378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:52:52.949 [INFO] [Thread-26378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:52:52.956 [DEBUG] [Thread-26378] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:52:52.956 [DEBUG] [Thread-26378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:52:52.956 [DEBUG] [Thread-26378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:52:52.956 [DEBUG] [Thread-26378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:52:52.956 [DEBUG] [Thread-26378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:52:52.956 [DEBUG] [Thread-26378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:52:52.957 [DEBUG] [Thread-26378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:52:52.957 [DEBUG] [Thread-26378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:52:52.957 [DEBUG] [Thread-26378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:52:52.957 [DEBUG] [Thread-26378] [transport.py] [_log()] client lang: <none>
2026-04-15T21:52:52.957 [DEBUG] [Thread-26378] [transport.py] [_log()] server lang: <none>
2026-04-15T21:52:52.957 [DEBUG] [Thread-26378] [transport.py] [_log()] kex follows: False
2026-04-15T21:52:52.957 [DEBUG] [Thread-26378] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:52:52.957 [DEBUG] [Thread-26378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:52:52.957 [DEBUG] [Thread-26378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:52:52.957 [DEBUG] [Thread-26378] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:52:52.957 [DEBUG] [Thread-26378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:52:52.957 [DEBUG] [Thread-26378] [transport.py] [_log()] Compression: none
2026-04-15T21:52:52.958 [DEBUG] [Thread-26378] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:52:53.014 [DEBUG] [Thread-26378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:52:53.014 [DEBUG] [Thread-26378] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:52:53.015 [DEBUG] [Thread-26378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:52:53.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:52:53.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:52:53.070 [DEBUG] [Thread-26378] [transport.py] [_log()] userauth is OK
2026-04-15T21:52:53.071 [DEBUG] [Thread-26378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:52:53.071 [DEBUG] [Thread-26378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:52:53.071 [DEBUG] [Thread-26378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:52:53.071 [DEBUG] [Thread-26378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:52:53.096 [INFO] [Thread-26378] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:52:53.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:52:53.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:52:53.654 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:52:53.655 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:52:53.932 [DEBUG] [Thread-26378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:52:53.932 [DEBUG] [Thread-26378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:52:53.980 [DEBUG] [Thread-26378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:52:53.980 [DEBUG] [Thread-26378] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:52:53.989 [DEBUG] [Thread-26378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:52:53.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:52:53.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')
2026-04-15T21:52:54.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
2026-04-15T21:52:54.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:52:54.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:52:54.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:52:54.024 [DEBUG] [Thread-26378] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:52:58.700 [DEBUG] [Thread-26380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:53:13.745 [DEBUG] [Thread-26381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:53:21.551 [DEBUG] [Thread-26382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:53:24.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:53:24.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:53:24.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
2026-04-15T21:53:25.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 53, 16), 4.78088, 72.3899, 0.0, 9.88164, 10.2105, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:53:25.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:53:16
2026-04-15T21:53:25.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:53:26.267 [DEBUG] [Thread-26383] [transport.py] [_log()] starting thread (client mode): 0xee991600
2026-04-15T21:53:26.267 [DEBUG] [Thread-26383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:53:26.285 [DEBUG] [Thread-26383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:53:26.286 [INFO] [Thread-26383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:53:26.288 [DEBUG] [Thread-26383] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:53:26.288 [DEBUG] [Thread-26383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:53:26.288 [DEBUG] [Thread-26383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:53:26.288 [DEBUG] [Thread-26383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:53:26.288 [DEBUG] [Thread-26383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:53:26.288 [DEBUG] [Thread-26383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:53:26.288 [DEBUG] [Thread-26383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:53:26.288 [DEBUG] [Thread-26383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:53:26.289 [DEBUG] [Thread-26383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:53:26.289 [DEBUG] [Thread-26383] [transport.py] [_log()] client lang: <none>
2026-04-15T21:53:26.289 [DEBUG] [Thread-26383] [transport.py] [_log()] server lang: <none>
2026-04-15T21:53:26.289 [DEBUG] [Thread-26383] [transport.py] [_log()] kex follows: False
2026-04-15T21:53:26.289 [DEBUG] [Thread-26383] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:53:26.289 [DEBUG] [Thread-26383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:53:26.289 [DEBUG] [Thread-26383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:53:26.289 [DEBUG] [Thread-26383] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:53:26.289 [DEBUG] [Thread-26383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:53:26.289 [DEBUG] [Thread-26383] [transport.py] [_log()] Compression: none
2026-04-15T21:53:26.289 [DEBUG] [Thread-26383] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:53:26.307 [DEBUG] [Thread-26383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:53:26.308 [DEBUG] [Thread-26383] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:53:26.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:53:26.309 [DEBUG] [Thread-26383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:53:26.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:53:26.309 [DEBUG] [Thread-26383] [transport.py] [_log()] userauth is OK
2026-04-15T21:53:26.310 [DEBUG] [Thread-26383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:53:26.310 [DEBUG] [Thread-26383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:53:26.310 [DEBUG] [Thread-26383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:53:26.310 [DEBUG] [Thread-26383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:53:26.334 [INFO] [Thread-26383] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:53:26.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:53:26.978 [DEBUG] [Thread-26383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:53:26.978 [DEBUG] [Thread-26383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:53:26.978 [DEBUG] [Thread-26383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:53:27.019 [DEBUG] [Thread-26383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:53:27.019 [DEBUG] [Thread-26383] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:53:27.021 [DEBUG] [Thread-26383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:53:27.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:53:27.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:53:27.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:53:27.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:53:27.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:53:27.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:53:27.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:53:27.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:53:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:53:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.828603 -999.00  +10.40   7.90     76   +6.40 1 1 1 1 1     0    0 3.97 3.58 ZNESW 8.0 7.9 82.4 9.3 10.6 -25.1 10.5 -23.8 10.2 -21.7 10.4 -23.7
2026-04-15T21:53:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:53:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:53:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.828603
2026-04-15T21:53:27.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:53:27.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:53:27.039 [DEBUG] [Thread-26383] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:53:27.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:53:27.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:53:27.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:53:27.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:53:16', tmtdew=4.78088, humidity=72.3899, cloud=0.0, wind=9.88164, temperature=10.2105, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:53:11.299', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, -0.006750000000000256, -0.03175000000000061, -0.05550000000000033, -0.0495000000000001, 0.017250000000000654, 0.0030000000000001137, 0.02775000000000105, 0.01750000000000007, -0.027499999999999858, -0.03974999999999973, -0.02549999999999919, 0.025000000000000355, 0.006249999999999645, -0.0030000000000001137, 0.008999999999998565, 0.04925000000000068, -0.014000000000001123, 0.0024999999999995026, 0.030249999999998778, 0.04099999999999859, 0.05674999999999919, 0.004750000000001364, 0.023749999999999716, 0.03649999999999842, -0.0495000000000001, 0.013749999999999929, 0.024499999999999744, 0.05000000000000071, -0.01899999999999835, 0.04200000000000159, 0.010000000000001563, 0.035749999999998394], zp_timestamp='2026-04-15T19:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:53:27.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:53:27.250 [DEBUG] [Thread-26386] [transport.py] [_log()] starting thread (client mode): 0xee992b00
2026-04-15T21:53:27.250 [DEBUG] [Thread-26386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:53:27.265 [DEBUG] [Thread-26386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:53:27.265 [INFO] [Thread-26386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:53:27.272 [DEBUG] [Thread-26386] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:53:27.272 [DEBUG] [Thread-26386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:53:27.272 [DEBUG] [Thread-26386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:53:27.273 [DEBUG] [Thread-26386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:53:27.273 [DEBUG] [Thread-26386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:53:27.273 [DEBUG] [Thread-26386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:53:27.273 [DEBUG] [Thread-26386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:53:27.273 [DEBUG] [Thread-26386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:53:27.273 [DEBUG] [Thread-26386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:53:27.273 [DEBUG] [Thread-26386] [transport.py] [_log()] client lang: <none>
2026-04-15T21:53:27.273 [DEBUG] [Thread-26386] [transport.py] [_log()] server lang: <none>
2026-04-15T21:53:27.273 [DEBUG] [Thread-26386] [transport.py] [_log()] kex follows: False
2026-04-15T21:53:27.273 [DEBUG] [Thread-26386] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:53:27.273 [DEBUG] [Thread-26386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:53:27.274 [DEBUG] [Thread-26386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:53:27.274 [DEBUG] [Thread-26386] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:53:27.274 [DEBUG] [Thread-26386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:53:27.274 [DEBUG] [Thread-26386] [transport.py] [_log()] Compression: none
2026-04-15T21:53:27.274 [DEBUG] [Thread-26386] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:53:27.330 [DEBUG] [Thread-26386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:53:27.330 [DEBUG] [Thread-26386] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:53:27.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:53:27.331 [DEBUG] [Thread-26386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:53:27.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:53:27.387 [DEBUG] [Thread-26386] [transport.py] [_log()] userauth is OK
2026-04-15T21:53:27.387 [DEBUG] [Thread-26386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:53:27.387 [DEBUG] [Thread-26386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:53:27.387 [DEBUG] [Thread-26386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:53:27.387 [DEBUG] [Thread-26386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:53:27.412 [INFO] [Thread-26386] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:53:27.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:53:27.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:53:28.315 [DEBUG] [Thread-26386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:53:28.315 [DEBUG] [Thread-26386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:53:28.363 [DEBUG] [Thread-26386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:53:28.363 [DEBUG] [Thread-26386] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:53:28.372 [DEBUG] [Thread-26386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:53:28.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:53:28.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')
2026-04-15T21:53:28.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
2026-04-15T21:53:28.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:53:28.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:53:28.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:53:28.407 [DEBUG] [Thread-26386] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:53:28.775 [DEBUG] [Thread-26388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:53:43.816 [DEBUG] [Thread-26389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:53:53.858 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:53:53.859 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:53:58.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:53:58.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:53:58.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
2026-04-15T21:53:58.847 [DEBUG] [Thread-26390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:53:59.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 53, 52), 4.06072, 75.7798, 0.0, 12.8102, 9.78775, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:53:59.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:53:52
2026-04-15T21:54:00.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:54:00.653 [DEBUG] [Thread-26391] [transport.py] [_log()] starting thread (client mode): 0xee95ffd0
2026-04-15T21:54:00.653 [DEBUG] [Thread-26391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:54:00.673 [DEBUG] [Thread-26391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:54:00.673 [INFO] [Thread-26391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:54:00.676 [DEBUG] [Thread-26391] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:54:00.676 [DEBUG] [Thread-26391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:54:00.676 [DEBUG] [Thread-26391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:54:00.676 [DEBUG] [Thread-26391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:54:00.676 [DEBUG] [Thread-26391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:54:00.677 [DEBUG] [Thread-26391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:54:00.677 [DEBUG] [Thread-26391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:54:00.677 [DEBUG] [Thread-26391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:54:00.677 [DEBUG] [Thread-26391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:54:00.677 [DEBUG] [Thread-26391] [transport.py] [_log()] client lang: <none>
2026-04-15T21:54:00.677 [DEBUG] [Thread-26391] [transport.py] [_log()] server lang: <none>
2026-04-15T21:54:00.677 [DEBUG] [Thread-26391] [transport.py] [_log()] kex follows: False
2026-04-15T21:54:00.677 [DEBUG] [Thread-26391] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:54:00.677 [DEBUG] [Thread-26391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:54:00.677 [DEBUG] [Thread-26391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:54:00.678 [DEBUG] [Thread-26391] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:54:00.678 [DEBUG] [Thread-26391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:54:00.678 [DEBUG] [Thread-26391] [transport.py] [_log()] Compression: none
2026-04-15T21:54:00.678 [DEBUG] [Thread-26391] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:54:00.695 [DEBUG] [Thread-26391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:54:00.695 [DEBUG] [Thread-26391] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:54:00.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:54:00.696 [DEBUG] [Thread-26391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:54:00.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:54:00.697 [DEBUG] [Thread-26391] [transport.py] [_log()] userauth is OK
2026-04-15T21:54:00.697 [DEBUG] [Thread-26391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:54:00.697 [DEBUG] [Thread-26391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:54:00.697 [DEBUG] [Thread-26391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:54:00.697 [DEBUG] [Thread-26391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:54:00.732 [INFO] [Thread-26391] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:54:00.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:54:01.422 [DEBUG] [Thread-26391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:54:01.422 [DEBUG] [Thread-26391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:54:01.423 [DEBUG] [Thread-26391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:54:01.463 [DEBUG] [Thread-26391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:54:01.463 [DEBUG] [Thread-26391] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:54:01.466 [DEBUG] [Thread-26391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:54:01.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:54:01.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:54:01.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:54:01.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:54:01.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:54:01.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:54:01.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:54:01.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:54:01.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:54:01.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.828950 -999.00  +10.40   6.26     76   +6.40 1 1 1 1 1     0    0 4.03 4.55 ZNESW 6.8 6.3 109.3 9.0 10.7 -24.9 10.5 -23.7 10.2 -21.7 10.5 -23.8
2026-04-15T21:54:01.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:54:01.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:54:01.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.828950
2026-04-15T21:54:01.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:54:01.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:54:01.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:54:01.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:54:01.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:54:01.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:53:52', tmtdew=4.06072, humidity=75.7798, cloud=0.0, wind=12.8102, temperature=9.78775, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:53:41.280', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, -0.006750000000000256, -0.03175000000000061, -0.05550000000000033, -0.0495000000000001, 0.017250000000000654, 0.0030000000000001137, 0.02775000000000105, 0.01750000000000007, -0.027499999999999858, -0.03974999999999973, -0.02549999999999919, 0.025000000000000355, 0.006249999999999645, -0.0030000000000001137, 0.008999999999998565, 0.04925000000000068, -0.014000000000001123, 0.0024999999999995026, 0.030249999999998778, 0.04099999999999859, 0.05674999999999919, 0.004750000000001364, 0.023749999999999716, 0.03649999999999842, -0.0495000000000001, 0.013749999999999929, 0.024499999999999744, 0.05000000000000071, -0.01899999999999835, 0.04200000000000159, 0.010000000000001563, 0.035749999999998394], zp_timestamp='2026-04-15T19:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:54:01.492 [DEBUG] [Thread-26391] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:54:01.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:54:01.745 [DEBUG] [Thread-26394] [transport.py] [_log()] starting thread (client mode): 0xee9912d0
2026-04-15T21:54:01.745 [DEBUG] [Thread-26394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:54:01.759 [DEBUG] [Thread-26394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:54:01.759 [INFO] [Thread-26394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:54:01.766 [DEBUG] [Thread-26394] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:54:01.766 [DEBUG] [Thread-26394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:54:01.767 [DEBUG] [Thread-26394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:54:01.767 [DEBUG] [Thread-26394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:54:01.767 [DEBUG] [Thread-26394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:54:01.767 [DEBUG] [Thread-26394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:54:01.767 [DEBUG] [Thread-26394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:54:01.767 [DEBUG] [Thread-26394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:54:01.767 [DEBUG] [Thread-26394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:54:01.767 [DEBUG] [Thread-26394] [transport.py] [_log()] client lang: <none>
2026-04-15T21:54:01.767 [DEBUG] [Thread-26394] [transport.py] [_log()] server lang: <none>
2026-04-15T21:54:01.767 [DEBUG] [Thread-26394] [transport.py] [_log()] kex follows: False
2026-04-15T21:54:01.767 [DEBUG] [Thread-26394] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:54:01.768 [DEBUG] [Thread-26394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:54:01.768 [DEBUG] [Thread-26394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:54:01.768 [DEBUG] [Thread-26394] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:54:01.768 [DEBUG] [Thread-26394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:54:01.768 [DEBUG] [Thread-26394] [transport.py] [_log()] Compression: none
2026-04-15T21:54:01.768 [DEBUG] [Thread-26394] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:54:01.822 [DEBUG] [Thread-26394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:54:01.822 [DEBUG] [Thread-26394] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:54:01.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:54:01.823 [DEBUG] [Thread-26394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:54:01.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:54:01.879 [DEBUG] [Thread-26394] [transport.py] [_log()] userauth is OK
2026-04-15T21:54:01.879 [DEBUG] [Thread-26394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:54:01.879 [DEBUG] [Thread-26394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:54:01.880 [DEBUG] [Thread-26394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:54:01.880 [DEBUG] [Thread-26394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:54:01.905 [INFO] [Thread-26394] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:54:01.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:54:01.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:54:02.759 [DEBUG] [Thread-26394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:54:02.760 [DEBUG] [Thread-26394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:54:02.807 [DEBUG] [Thread-26394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:54:02.808 [DEBUG] [Thread-26394] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:54:02.816 [DEBUG] [Thread-26394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:54:02.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:54:02.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')
2026-04-15T21:54:02.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') -> 00000000
2026-04-15T21:54:02.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:54:02.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:54:02.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:54:02.847 [DEBUG] [Thread-26394] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:54:13.877 [DEBUG] [Thread-26396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:54:21.702 [DEBUG] [Thread-26397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:54:28.917 [DEBUG] [Thread-26398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:54:32.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:54:32.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:54:32.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:54:34.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 53, 52), 4.06072, 75.7798, 0.0, 12.8102, 9.78775, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:54:34.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:53:52
2026-04-15T21:54:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:54:34.980 [DEBUG] [Thread-26399] [transport.py] [_log()] starting thread (client mode): 0xee95f9d0
2026-04-15T21:54:34.980 [DEBUG] [Thread-26399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:54:34.999 [DEBUG] [Thread-26399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:54:34.999 [INFO] [Thread-26399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:54:35.002 [DEBUG] [Thread-26399] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:54:35.002 [DEBUG] [Thread-26399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:54:35.002 [DEBUG] [Thread-26399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:54:35.002 [DEBUG] [Thread-26399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:54:35.002 [DEBUG] [Thread-26399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:54:35.003 [DEBUG] [Thread-26399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:54:35.003 [DEBUG] [Thread-26399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:54:35.003 [DEBUG] [Thread-26399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:54:35.003 [DEBUG] [Thread-26399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:54:35.003 [DEBUG] [Thread-26399] [transport.py] [_log()] client lang: <none>
2026-04-15T21:54:35.003 [DEBUG] [Thread-26399] [transport.py] [_log()] server lang: <none>
2026-04-15T21:54:35.003 [DEBUG] [Thread-26399] [transport.py] [_log()] kex follows: False
2026-04-15T21:54:35.003 [DEBUG] [Thread-26399] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:54:35.003 [DEBUG] [Thread-26399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:54:35.003 [DEBUG] [Thread-26399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:54:35.003 [DEBUG] [Thread-26399] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:54:35.003 [DEBUG] [Thread-26399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:54:35.003 [DEBUG] [Thread-26399] [transport.py] [_log()] Compression: none
2026-04-15T21:54:35.003 [DEBUG] [Thread-26399] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:54:35.019 [DEBUG] [Thread-26399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:54:35.019 [DEBUG] [Thread-26399] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:54:35.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:54:35.019 [DEBUG] [Thread-26399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:54:35.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:54:35.020 [DEBUG] [Thread-26399] [transport.py] [_log()] userauth is OK
2026-04-15T21:54:35.020 [DEBUG] [Thread-26399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:54:35.020 [DEBUG] [Thread-26399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:54:35.020 [DEBUG] [Thread-26399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:54:35.021 [DEBUG] [Thread-26399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:54:35.033 [INFO] [Thread-26399] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:54:35.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:54:35.670 [DEBUG] [Thread-26399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:54:35.671 [DEBUG] [Thread-26399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:54:35.671 [DEBUG] [Thread-26399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:54:35.711 [DEBUG] [Thread-26399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:54:35.711 [DEBUG] [Thread-26399] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:54:35.714 [DEBUG] [Thread-26399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:54:35.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:54:35.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:54:35.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:54:35.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:54:35.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:54:35.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:54:35.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:54:35.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:54:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:54:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.829297 -999.00  +10.40   6.22     76   +6.40 1 1 1 1 1     0    0 3.93 5.11 ZNESW 6.6 6.2 103.7 7.8 10.6 -25.1 10.5 -23.8 10.2 -21.7 10.5 -23.9
2026-04-15T21:54:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:54:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:54:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.829297
2026-04-15T21:54:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:54:35.738 [DEBUG] [Thread-26399] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:54:35.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:54:35.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:54:35.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:54:35.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:54:35.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:53:52', tmtdew=4.06072, humidity=75.7798, cloud=0.0, wind=12.8102, temperature=9.78775, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:54:11.261', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, -0.006750000000000256, -0.03175000000000061, -0.05550000000000033, -0.0495000000000001, 0.017250000000000654, 0.0030000000000001137, 0.02775000000000105, 0.01750000000000007, -0.027499999999999858, -0.03974999999999973, -0.02549999999999919, 0.025000000000000355, 0.006249999999999645, -0.0030000000000001137, 0.008999999999998565, 0.04925000000000068, -0.014000000000001123, 0.0024999999999995026, 0.030249999999998778, 0.04099999999999859, 0.05674999999999919, 0.004750000000001364, 0.023749999999999716, 0.03649999999999842, -0.0495000000000001, 0.013749999999999929, 0.024499999999999744, 0.05000000000000071, -0.01899999999999835, 0.04200000000000159, 0.010000000000001563, 0.035749999999998394], zp_timestamp='2026-04-15T19:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:54:35.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:54:35.996 [DEBUG] [Thread-26402] [transport.py] [_log()] starting thread (client mode): 0xee991900
2026-04-15T21:54:35.996 [DEBUG] [Thread-26402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:54:36.012 [DEBUG] [Thread-26402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:54:36.012 [INFO] [Thread-26402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:54:36.019 [DEBUG] [Thread-26402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:54:36.020 [DEBUG] [Thread-26402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:54:36.020 [DEBUG] [Thread-26402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:54:36.020 [DEBUG] [Thread-26402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:54:36.020 [DEBUG] [Thread-26402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:54:36.020 [DEBUG] [Thread-26402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:54:36.020 [DEBUG] [Thread-26402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:54:36.020 [DEBUG] [Thread-26402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:54:36.020 [DEBUG] [Thread-26402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:54:36.020 [DEBUG] [Thread-26402] [transport.py] [_log()] client lang: <none>
2026-04-15T21:54:36.020 [DEBUG] [Thread-26402] [transport.py] [_log()] server lang: <none>
2026-04-15T21:54:36.020 [DEBUG] [Thread-26402] [transport.py] [_log()] kex follows: False
2026-04-15T21:54:36.020 [DEBUG] [Thread-26402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:54:36.021 [DEBUG] [Thread-26402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:54:36.021 [DEBUG] [Thread-26402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:54:36.021 [DEBUG] [Thread-26402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:54:36.021 [DEBUG] [Thread-26402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:54:36.021 [DEBUG] [Thread-26402] [transport.py] [_log()] Compression: none
2026-04-15T21:54:36.021 [DEBUG] [Thread-26402] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:54:36.079 [DEBUG] [Thread-26402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:54:36.079 [DEBUG] [Thread-26402] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:54:36.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:54:36.080 [DEBUG] [Thread-26402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:54:36.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:54:36.135 [DEBUG] [Thread-26402] [transport.py] [_log()] userauth is OK
2026-04-15T21:54:36.135 [DEBUG] [Thread-26402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:54:36.136 [DEBUG] [Thread-26402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:54:36.136 [DEBUG] [Thread-26402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:54:36.136 [DEBUG] [Thread-26402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:54:36.161 [INFO] [Thread-26402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:54:36.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:54:36.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:54:37.011 [DEBUG] [Thread-26402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:54:37.011 [DEBUG] [Thread-26402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:54:37.058 [DEBUG] [Thread-26402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:54:37.059 [DEBUG] [Thread-26402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:54:37.067 [DEBUG] [Thread-26402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:54:37.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:54:37.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')
2026-04-15T21:54:37.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
2026-04-15T21:54:37.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:54:37.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:54:37.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:54:37.100 [DEBUG] [Thread-26402] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:54:43.947 [DEBUG] [Thread-26404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:54:54.063 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:54:54.064 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:54:58.993 [DEBUG] [Thread-26405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:55:07.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:55:07.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:55:07.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
2026-04-15T21:55:08.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 54, 28), 4.7272, 72.4065, 0.0, 9.82872, 10.1439, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:55:08.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:54:28
2026-04-15T21:55:08.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:55:09.252 [DEBUG] [Thread-26406] [transport.py] [_log()] starting thread (client mode): 0xee990160
2026-04-15T21:55:09.252 [DEBUG] [Thread-26406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:55:09.263 [DEBUG] [Thread-26406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:55:09.263 [INFO] [Thread-26406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:55:09.265 [DEBUG] [Thread-26406] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] client lang: <none>
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] server lang: <none>
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] kex follows: False
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] Compression: none
2026-04-15T21:55:09.266 [DEBUG] [Thread-26406] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:55:09.282 [DEBUG] [Thread-26406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:55:09.282 [DEBUG] [Thread-26406] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:55:09.282 [DEBUG] [Thread-26406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:55:09.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:55:09.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:55:09.283 [DEBUG] [Thread-26406] [transport.py] [_log()] userauth is OK
2026-04-15T21:55:09.283 [DEBUG] [Thread-26406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:55:09.283 [DEBUG] [Thread-26406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:55:09.283 [DEBUG] [Thread-26406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:55:09.283 [DEBUG] [Thread-26406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:55:09.297 [INFO] [Thread-26406] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:55:09.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:55:09.876 [DEBUG] [Thread-26406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:55:09.876 [DEBUG] [Thread-26406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:55:09.877 [DEBUG] [Thread-26406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:55:09.917 [DEBUG] [Thread-26406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:55:09.917 [DEBUG] [Thread-26406] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:55:09.921 [DEBUG] [Thread-26406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:55:09.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:55:09.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:55:09.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:55:09.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:55:09.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:55:09.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:55:09.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:55:09.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:55:09.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:55:09.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.829644 -999.00  +10.40   6.16     76   +6.40 1 1 1 1 1     0    0 4.03 5.81 ZNESW 5.5 6.2 118.1 10.2 10.7 -25.0 10.5 -23.8 10.2 -21.7 10.6 -23.8
2026-04-15T21:55:09.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:55:09.945 [DEBUG] [Thread-26406] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:55:09.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:55:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.829644
2026-04-15T21:55:09.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:55:09.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:55:09.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:55:09.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:55:09.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:55:09.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:54:28', tmtdew=4.7272, humidity=72.4065, cloud=0.0, wind=9.82872, temperature=10.1439, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:54:41.242', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, -0.006750000000000256, -0.03175000000000061, -0.05550000000000033, -0.0495000000000001, 0.017250000000000654, 0.0030000000000001137, 0.02775000000000105, 0.01750000000000007, -0.027499999999999858, -0.03974999999999973, -0.02549999999999919, 0.025000000000000355, 0.006249999999999645, -0.0030000000000001137, 0.008999999999998565, 0.04925000000000068, -0.014000000000001123, 0.0024999999999995026, 0.030249999999998778, 0.04099999999999859, 0.05674999999999919, 0.004750000000001364, 0.023749999999999716, 0.03649999999999842, -0.0495000000000001, 0.013749999999999929, 0.024499999999999744, 0.05000000000000071, -0.01899999999999835, 0.04200000000000159, 0.010000000000001563, 0.035749999999998394], zp_timestamp='2026-04-15T19:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:55:10.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:55:10.202 [DEBUG] [Thread-26409] [transport.py] [_log()] starting thread (client mode): 0xee992e30
2026-04-15T21:55:10.202 [DEBUG] [Thread-26409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:55:10.216 [DEBUG] [Thread-26409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:55:10.216 [INFO] [Thread-26409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:55:10.223 [DEBUG] [Thread-26409] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:55:10.223 [DEBUG] [Thread-26409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:55:10.223 [DEBUG] [Thread-26409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:55:10.223 [DEBUG] [Thread-26409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:55:10.224 [DEBUG] [Thread-26409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:55:10.224 [DEBUG] [Thread-26409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:55:10.224 [DEBUG] [Thread-26409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:55:10.224 [DEBUG] [Thread-26409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:55:10.224 [DEBUG] [Thread-26409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:55:10.224 [DEBUG] [Thread-26409] [transport.py] [_log()] client lang: <none>
2026-04-15T21:55:10.224 [DEBUG] [Thread-26409] [transport.py] [_log()] server lang: <none>
2026-04-15T21:55:10.224 [DEBUG] [Thread-26409] [transport.py] [_log()] kex follows: False
2026-04-15T21:55:10.224 [DEBUG] [Thread-26409] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:55:10.224 [DEBUG] [Thread-26409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:55:10.224 [DEBUG] [Thread-26409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:55:10.224 [DEBUG] [Thread-26409] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:55:10.225 [DEBUG] [Thread-26409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:55:10.225 [DEBUG] [Thread-26409] [transport.py] [_log()] Compression: none
2026-04-15T21:55:10.225 [DEBUG] [Thread-26409] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:55:10.279 [DEBUG] [Thread-26409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:55:10.279 [DEBUG] [Thread-26409] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:55:10.280 [DEBUG] [Thread-26409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:55:10.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:55:10.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:55:10.336 [DEBUG] [Thread-26409] [transport.py] [_log()] userauth is OK
2026-04-15T21:55:10.336 [DEBUG] [Thread-26409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:55:10.336 [DEBUG] [Thread-26409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:55:10.336 [DEBUG] [Thread-26409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:55:10.336 [DEBUG] [Thread-26409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:55:10.361 [INFO] [Thread-26409] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:55:10.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:55:10.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:55:11.183 [DEBUG] [Thread-26409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:55:11.183 [DEBUG] [Thread-26409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:55:11.230 [DEBUG] [Thread-26409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:55:11.231 [DEBUG] [Thread-26409] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:55:11.239 [DEBUG] [Thread-26409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:55:11.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:55:11.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')
2026-04-15T21:55:11.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
2026-04-15T21:55:11.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:55:11.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:55:11.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:55:11.273 [DEBUG] [Thread-26409] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:55:14.023 [DEBUG] [Thread-26411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:55:21.846 [DEBUG] [Thread-26412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:55:29.065 [DEBUG] [Thread-26413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:55:41.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:55:41.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:55:41.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
2026-04-15T21:55:42.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 55, 3), 4.72456, 72.4231, 0.0, 10.0228, 10.1605, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:55:42.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:55:03
2026-04-15T21:55:43.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:55:43.489 [DEBUG] [Thread-26414] [transport.py] [_log()] starting thread (client mode): 0xee9c2f80
2026-04-15T21:55:43.489 [DEBUG] [Thread-26414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:55:43.507 [DEBUG] [Thread-26414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:55:43.507 [INFO] [Thread-26414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:55:43.510 [DEBUG] [Thread-26414] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:55:43.510 [DEBUG] [Thread-26414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:55:43.510 [DEBUG] [Thread-26414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:55:43.510 [DEBUG] [Thread-26414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:55:43.510 [DEBUG] [Thread-26414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:55:43.510 [DEBUG] [Thread-26414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:55:43.511 [DEBUG] [Thread-26414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:55:43.511 [DEBUG] [Thread-26414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:55:43.511 [DEBUG] [Thread-26414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:55:43.511 [DEBUG] [Thread-26414] [transport.py] [_log()] client lang: <none>
2026-04-15T21:55:43.511 [DEBUG] [Thread-26414] [transport.py] [_log()] server lang: <none>
2026-04-15T21:55:43.511 [DEBUG] [Thread-26414] [transport.py] [_log()] kex follows: False
2026-04-15T21:55:43.511 [DEBUG] [Thread-26414] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:55:43.511 [DEBUG] [Thread-26414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:55:43.511 [DEBUG] [Thread-26414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:55:43.511 [DEBUG] [Thread-26414] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:55:43.511 [DEBUG] [Thread-26414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:55:43.512 [DEBUG] [Thread-26414] [transport.py] [_log()] Compression: none
2026-04-15T21:55:43.512 [DEBUG] [Thread-26414] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:55:43.525 [DEBUG] [Thread-26414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:55:43.525 [DEBUG] [Thread-26414] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:55:43.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:55:43.526 [DEBUG] [Thread-26414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:55:43.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:55:43.527 [DEBUG] [Thread-26414] [transport.py] [_log()] userauth is OK
2026-04-15T21:55:43.527 [DEBUG] [Thread-26414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:55:43.527 [DEBUG] [Thread-26414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:55:43.527 [DEBUG] [Thread-26414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:55:43.527 [DEBUG] [Thread-26414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:55:43.551 [INFO] [Thread-26414] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:55:43.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:55:44.097 [DEBUG] [Thread-26416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:55:44.139 [DEBUG] [Thread-26414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:55:44.139 [DEBUG] [Thread-26414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:55:44.140 [DEBUG] [Thread-26414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:55:44.180 [DEBUG] [Thread-26414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:55:44.180 [DEBUG] [Thread-26414] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:55:44.182 [DEBUG] [Thread-26414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:55:44.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:55:44.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:55:44.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:55:44.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:55:44.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:55:44.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:55:44.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:55:44.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:55:44.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:55:44.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.829991 -999.00  +10.40   6.47     76   +6.40 1 1 1 1 1     0    0 4.09 7.04 ZNESW 6.8 6.5 103.9 9.1 10.7 -24.9 10.5 -23.8 10.2 -21.7 10.5 -23.8
2026-04-15T21:55:44.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:55:44.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:55:44.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.829991
2026-04-15T21:55:44.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:55:44.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:55:44.208 [DEBUG] [Thread-26414] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:55:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:55:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:55:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:55:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:55:03', tmtdew=4.72456, humidity=72.4231, cloud=0.0, wind=10.0228, temperature=10.1605, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:55:11.222', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, -0.006750000000000256, -0.03175000000000061, -0.05550000000000033, -0.0495000000000001, 0.017250000000000654, 0.0030000000000001137, 0.02775000000000105, 0.01750000000000007, -0.027499999999999858, -0.03974999999999973, -0.02549999999999919, 0.025000000000000355, 0.006249999999999645, -0.0030000000000001137, 0.008999999999998565, 0.04925000000000068, -0.014000000000001123, 0.0024999999999995026, 0.030249999999998778, 0.04099999999999859, 0.05674999999999919, 0.004750000000001364, 0.023749999999999716, 0.03649999999999842, -0.0495000000000001, 0.013749999999999929, 0.024499999999999744, 0.05000000000000071, -0.01899999999999835, 0.04200000000000159, 0.010000000000001563, 0.035749999999998394], zp_timestamp='2026-04-15T19:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:55:44.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:55:44.466 [DEBUG] [Thread-26418] [transport.py] [_log()] starting thread (client mode): 0xee9c13c0
2026-04-15T21:55:44.466 [DEBUG] [Thread-26418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:55:44.481 [DEBUG] [Thread-26418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:55:44.481 [INFO] [Thread-26418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:55:44.488 [DEBUG] [Thread-26418] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:55:44.488 [DEBUG] [Thread-26418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:55:44.488 [DEBUG] [Thread-26418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:55:44.488 [DEBUG] [Thread-26418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:55:44.489 [DEBUG] [Thread-26418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:55:44.489 [DEBUG] [Thread-26418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:55:44.489 [DEBUG] [Thread-26418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:55:44.489 [DEBUG] [Thread-26418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:55:44.489 [DEBUG] [Thread-26418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:55:44.489 [DEBUG] [Thread-26418] [transport.py] [_log()] client lang: <none>
2026-04-15T21:55:44.489 [DEBUG] [Thread-26418] [transport.py] [_log()] server lang: <none>
2026-04-15T21:55:44.489 [DEBUG] [Thread-26418] [transport.py] [_log()] kex follows: False
2026-04-15T21:55:44.489 [DEBUG] [Thread-26418] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:55:44.489 [DEBUG] [Thread-26418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:55:44.489 [DEBUG] [Thread-26418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:55:44.490 [DEBUG] [Thread-26418] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:55:44.490 [DEBUG] [Thread-26418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:55:44.490 [DEBUG] [Thread-26418] [transport.py] [_log()] Compression: none
2026-04-15T21:55:44.490 [DEBUG] [Thread-26418] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:55:44.547 [DEBUG] [Thread-26418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:55:44.547 [DEBUG] [Thread-26418] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:55:44.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:55:44.548 [DEBUG] [Thread-26418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:55:44.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:55:44.604 [DEBUG] [Thread-26418] [transport.py] [_log()] userauth is OK
2026-04-15T21:55:44.604 [DEBUG] [Thread-26418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:55:44.604 [DEBUG] [Thread-26418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:55:44.604 [DEBUG] [Thread-26418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:55:44.604 [DEBUG] [Thread-26418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:55:44.630 [INFO] [Thread-26418] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:55:44.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:55:44.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:55:45.470 [DEBUG] [Thread-26418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:55:45.470 [DEBUG] [Thread-26418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:55:45.517 [DEBUG] [Thread-26418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:55:45.518 [DEBUG] [Thread-26418] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:55:45.526 [DEBUG] [Thread-26418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:55:45.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:55:45.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')
2026-04-15T21:55:45.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
2026-04-15T21:55:45.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:55:45.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:55:45.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:55:45.561 [DEBUG] [Thread-26418] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:55:54.279 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:55:54.280 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:55:59.130 [DEBUG] [Thread-26420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:56:14.177 [DEBUG] [Thread-26421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:56:15.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:56:15.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:56:15.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
2026-04-15T21:56:16.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 55, 39), 4.03752, 75.9125, 0.0, 11.9988, 9.85409, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:56:16.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:55:39
2026-04-15T21:56:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:56:17.793 [DEBUG] [Thread-26422] [transport.py] [_log()] starting thread (client mode): 0xee9c0070
2026-04-15T21:56:17.793 [DEBUG] [Thread-26422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:56:17.813 [DEBUG] [Thread-26422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:56:17.813 [INFO] [Thread-26422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:56:17.816 [DEBUG] [Thread-26422] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:56:17.816 [DEBUG] [Thread-26422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:56:17.816 [DEBUG] [Thread-26422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:56:17.816 [DEBUG] [Thread-26422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:56:17.816 [DEBUG] [Thread-26422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:56:17.816 [DEBUG] [Thread-26422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:56:17.816 [DEBUG] [Thread-26422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:56:17.817 [DEBUG] [Thread-26422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:56:17.817 [DEBUG] [Thread-26422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:56:17.817 [DEBUG] [Thread-26422] [transport.py] [_log()] client lang: <none>
2026-04-15T21:56:17.817 [DEBUG] [Thread-26422] [transport.py] [_log()] server lang: <none>
2026-04-15T21:56:17.817 [DEBUG] [Thread-26422] [transport.py] [_log()] kex follows: False
2026-04-15T21:56:17.817 [DEBUG] [Thread-26422] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:56:17.817 [DEBUG] [Thread-26422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:56:17.817 [DEBUG] [Thread-26422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:56:17.817 [DEBUG] [Thread-26422] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:56:17.817 [DEBUG] [Thread-26422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:56:17.817 [DEBUG] [Thread-26422] [transport.py] [_log()] Compression: none
2026-04-15T21:56:17.817 [DEBUG] [Thread-26422] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:56:17.834 [DEBUG] [Thread-26422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:56:17.834 [DEBUG] [Thread-26422] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:56:17.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:56:17.835 [DEBUG] [Thread-26422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:56:17.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:56:17.836 [DEBUG] [Thread-26422] [transport.py] [_log()] userauth is OK
2026-04-15T21:56:17.836 [DEBUG] [Thread-26422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:56:17.836 [DEBUG] [Thread-26422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:56:17.836 [DEBUG] [Thread-26422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:56:17.836 [DEBUG] [Thread-26422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:56:17.861 [INFO] [Thread-26422] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:56:17.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:56:18.513 [DEBUG] [Thread-26422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:56:18.513 [DEBUG] [Thread-26422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:56:18.514 [DEBUG] [Thread-26422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:56:18.554 [DEBUG] [Thread-26422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:56:18.554 [DEBUG] [Thread-26422] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:56:18.557 [DEBUG] [Thread-26422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:56:18.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:56:18.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:56:18.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:56:18.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:56:18.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:56:18.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:56:18.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:56:18.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:56:18.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:56:18.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.830686 -999.00  +10.20   5.65     77   +6.40 1 1 1 1 1     0    0 4.07 6.79 ZNESW 6.0 5.7 100.8 7.3 10.6 -25.5 10.5 -24.1 10.2 -22.1 10.5 -24.1
2026-04-15T21:56:18.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:56:18.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:56:18.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.830686
2026-04-15T21:56:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:56:18.594 [DEBUG] [Thread-26422] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:56:18.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:56:18.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:56:18.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:56:18.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:56:18.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:55:39', tmtdew=4.03752, humidity=75.9125, cloud=0.0, wind=11.9988, temperature=9.85409, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:56:11.270', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, -0.006750000000000256, -0.03175000000000061, -0.05550000000000033, -0.0495000000000001, 0.017250000000000654, 0.0030000000000001137, 0.02775000000000105, 0.01750000000000007, -0.027499999999999858, -0.03974999999999973, -0.02549999999999919, 0.025000000000000355, 0.006249999999999645, -0.0030000000000001137, 0.008999999999998565, 0.04925000000000068, -0.014000000000001123, 0.0024999999999995026, 0.030249999999998778, 0.04099999999999859, 0.05674999999999919, 0.004750000000001364, 0.023749999999999716, 0.03649999999999842, -0.0495000000000001, 0.013749999999999929, 0.024499999999999744, 0.05000000000000071, -0.01899999999999835, 0.04200000000000159, 0.010000000000001563, 0.035749999999998394], zp_timestamp='2026-04-15T19:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:56:18.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:56:18.852 [DEBUG] [Thread-26425] [transport.py] [_log()] starting thread (client mode): 0xee9c1ff0
2026-04-15T21:56:18.852 [DEBUG] [Thread-26425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:56:18.867 [DEBUG] [Thread-26425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:56:18.867 [INFO] [Thread-26425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:56:18.875 [DEBUG] [Thread-26425] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:56:18.875 [DEBUG] [Thread-26425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:56:18.875 [DEBUG] [Thread-26425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:56:18.875 [DEBUG] [Thread-26425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:56:18.875 [DEBUG] [Thread-26425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:56:18.875 [DEBUG] [Thread-26425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:56:18.875 [DEBUG] [Thread-26425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:56:18.875 [DEBUG] [Thread-26425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:56:18.875 [DEBUG] [Thread-26425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:56:18.876 [DEBUG] [Thread-26425] [transport.py] [_log()] client lang: <none>
2026-04-15T21:56:18.876 [DEBUG] [Thread-26425] [transport.py] [_log()] server lang: <none>
2026-04-15T21:56:18.876 [DEBUG] [Thread-26425] [transport.py] [_log()] kex follows: False
2026-04-15T21:56:18.876 [DEBUG] [Thread-26425] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:56:18.876 [DEBUG] [Thread-26425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:56:18.876 [DEBUG] [Thread-26425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:56:18.876 [DEBUG] [Thread-26425] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:56:18.876 [DEBUG] [Thread-26425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:56:18.876 [DEBUG] [Thread-26425] [transport.py] [_log()] Compression: none
2026-04-15T21:56:18.876 [DEBUG] [Thread-26425] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:56:18.931 [DEBUG] [Thread-26425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:56:18.932 [DEBUG] [Thread-26425] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:56:18.932 [DEBUG] [Thread-26425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:56:18.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:56:18.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:56:18.988 [DEBUG] [Thread-26425] [transport.py] [_log()] userauth is OK
2026-04-15T21:56:18.988 [DEBUG] [Thread-26425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:56:18.988 [DEBUG] [Thread-26425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:56:18.988 [DEBUG] [Thread-26425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:56:18.988 [DEBUG] [Thread-26425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:56:19.013 [INFO] [Thread-26425] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:56:19.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:56:19.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:56:19.848 [DEBUG] [Thread-26425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:56:19.848 [DEBUG] [Thread-26425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:56:19.896 [DEBUG] [Thread-26425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:56:19.896 [DEBUG] [Thread-26425] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:56:19.905 [DEBUG] [Thread-26425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:56:19.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:56:19.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')
2026-04-15T21:56:19.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
2026-04-15T21:56:19.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:56:19.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:56:19.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:56:19.939 [DEBUG] [Thread-26425] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:56:22.008 [DEBUG] [Thread-26427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:56:29.207 [DEBUG] [Thread-26428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:56:44.248 [DEBUG] [Thread-26429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:56:49.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:56:49.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:56:49.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
2026-04-15T21:56:51.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 56, 15), 4.61517, 72.9562, 0.0, 9.56412, 9.8609, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:56:51.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:56:15
2026-04-15T21:56:51.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:56:52.228 [DEBUG] [Thread-26430] [transport.py] [_log()] starting thread (client mode): 0xee992710
2026-04-15T21:56:52.228 [DEBUG] [Thread-26430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:56:52.244 [DEBUG] [Thread-26430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:56:52.244 [INFO] [Thread-26430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:56:52.247 [DEBUG] [Thread-26430] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:56:52.247 [DEBUG] [Thread-26430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:56:52.247 [DEBUG] [Thread-26430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:56:52.247 [DEBUG] [Thread-26430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:56:52.248 [DEBUG] [Thread-26430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:56:52.248 [DEBUG] [Thread-26430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:56:52.248 [DEBUG] [Thread-26430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:56:52.248 [DEBUG] [Thread-26430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:56:52.248 [DEBUG] [Thread-26430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:56:52.248 [DEBUG] [Thread-26430] [transport.py] [_log()] client lang: <none>
2026-04-15T21:56:52.248 [DEBUG] [Thread-26430] [transport.py] [_log()] server lang: <none>
2026-04-15T21:56:52.248 [DEBUG] [Thread-26430] [transport.py] [_log()] kex follows: False
2026-04-15T21:56:52.248 [DEBUG] [Thread-26430] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:56:52.248 [DEBUG] [Thread-26430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:56:52.248 [DEBUG] [Thread-26430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:56:52.248 [DEBUG] [Thread-26430] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:56:52.248 [DEBUG] [Thread-26430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:56:52.248 [DEBUG] [Thread-26430] [transport.py] [_log()] Compression: none
2026-04-15T21:56:52.248 [DEBUG] [Thread-26430] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:56:52.262 [DEBUG] [Thread-26430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:56:52.262 [DEBUG] [Thread-26430] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:56:52.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:56:52.263 [DEBUG] [Thread-26430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:56:52.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:56:52.264 [DEBUG] [Thread-26430] [transport.py] [_log()] userauth is OK
2026-04-15T21:56:52.264 [DEBUG] [Thread-26430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:56:52.264 [DEBUG] [Thread-26430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:56:52.264 [DEBUG] [Thread-26430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:56:52.264 [DEBUG] [Thread-26430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:56:52.276 [INFO] [Thread-26430] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:56:52.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:56:52.860 [DEBUG] [Thread-26430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:56:52.860 [DEBUG] [Thread-26430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:56:52.861 [DEBUG] [Thread-26430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:56:52.901 [DEBUG] [Thread-26430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:56:52.901 [DEBUG] [Thread-26430] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:56:52.903 [DEBUG] [Thread-26430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:56:52.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:56:52.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:56:52.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:56:52.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:56:52.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:56:52.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:56:52.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:56:52.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:56:52.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:56:52.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.831033 -999.00  +10.10   6.29     77   +6.40 1 1 1 1 1     0    0 4.05 6.48 ZNESW 6.9 6.3 121.2 8.4 10.6 -25.6 10.5 -24.2 10.2 -22.0 10.5 -23.9
2026-04-15T21:56:52.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:56:52.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:56:52.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.831033
2026-04-15T21:56:52.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:56:52.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:56:52.928 [DEBUG] [Thread-26430] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:56:52.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:56:52.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:56:52.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:56:52.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:56:15', tmtdew=4.61517, humidity=72.9562, cloud=0.0, wind=9.56412, temperature=9.8609, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:56:41.251', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07225000000000037, -0.004749999999999588, -0.0677500000000002, -0.09700000000000131, -0.05150000000000077, 0.006750000000000256, -0.032999999999999474, -0.051750000000000185, -0.01150000000000162, -0.025000000000000355, -0.05975000000000108, -0.0519999999999996, -0.008500000000001506, -0.01425000000000054, -0.03900000000000148, -0.0259999999999998, 0.019249999999999545, -0.04150000000000098, -0.011000000000001009, -0.004750000000001364, 0.008999999999998565, 0.01774999999999949, 0.0012500000000006395, -0.0022500000000000853, 0.014999999999998792, -0.07249999999999979, -0.020749999999999602, -0.009499999999999176, 0.0259999999999998, -0.03199999999999825, 0.06700000000000017, -0.009999999999999787, -0.0022500000000000853], zp_timestamp='2026-04-15T19:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:56:53.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:56:53.179 [DEBUG] [Thread-26433] [transport.py] [_log()] starting thread (client mode): 0xee9925c0
2026-04-15T21:56:53.179 [DEBUG] [Thread-26433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:56:53.193 [DEBUG] [Thread-26433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:56:53.193 [INFO] [Thread-26433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:56:53.201 [DEBUG] [Thread-26433] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:56:53.201 [DEBUG] [Thread-26433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:56:53.201 [DEBUG] [Thread-26433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:56:53.201 [DEBUG] [Thread-26433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:56:53.201 [DEBUG] [Thread-26433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:56:53.201 [DEBUG] [Thread-26433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:56:53.201 [DEBUG] [Thread-26433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:56:53.201 [DEBUG] [Thread-26433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:56:53.201 [DEBUG] [Thread-26433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:56:53.201 [DEBUG] [Thread-26433] [transport.py] [_log()] client lang: <none>
2026-04-15T21:56:53.202 [DEBUG] [Thread-26433] [transport.py] [_log()] server lang: <none>
2026-04-15T21:56:53.202 [DEBUG] [Thread-26433] [transport.py] [_log()] kex follows: False
2026-04-15T21:56:53.202 [DEBUG] [Thread-26433] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:56:53.202 [DEBUG] [Thread-26433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:56:53.202 [DEBUG] [Thread-26433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:56:53.202 [DEBUG] [Thread-26433] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:56:53.202 [DEBUG] [Thread-26433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:56:53.202 [DEBUG] [Thread-26433] [transport.py] [_log()] Compression: none
2026-04-15T21:56:53.202 [DEBUG] [Thread-26433] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:56:53.260 [DEBUG] [Thread-26433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:56:53.260 [DEBUG] [Thread-26433] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:56:53.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:56:53.261 [DEBUG] [Thread-26433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:56:53.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:56:53.316 [DEBUG] [Thread-26433] [transport.py] [_log()] userauth is OK
2026-04-15T21:56:53.316 [DEBUG] [Thread-26433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:56:53.317 [DEBUG] [Thread-26433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:56:53.317 [DEBUG] [Thread-26433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:56:53.317 [DEBUG] [Thread-26433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:56:53.342 [INFO] [Thread-26433] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:56:53.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:56:53.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:56:54.179 [DEBUG] [Thread-26433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:56:54.179 [DEBUG] [Thread-26433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:56:54.227 [DEBUG] [Thread-26433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:56:54.227 [DEBUG] [Thread-26433] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:56:54.236 [DEBUG] [Thread-26433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:56:54.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:56:54.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')
2026-04-15T21:56:54.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
2026-04-15T21:56:54.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:56:54.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:56:54.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:56:54.274 [DEBUG] [Thread-26433] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:56:54.481 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:56:54.482 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:56:59.274 [DEBUG] [Thread-26435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:57:14.317 [DEBUG] [Thread-26436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:57:22.152 [DEBUG] [Thread-26437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:57:24.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:57:24.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:57:24.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
2026-04-15T21:57:25.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 56, 51), 4.02711, 75.9456, 0.0, 11.893, 9.72135, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:57:25.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:56:51
2026-04-15T21:57:26.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:57:26.515 [DEBUG] [Thread-26438] [transport.py] [_log()] starting thread (client mode): 0xee9c3bb0
2026-04-15T21:57:26.516 [DEBUG] [Thread-26438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:57:26.535 [DEBUG] [Thread-26438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:57:26.536 [INFO] [Thread-26438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:57:26.539 [DEBUG] [Thread-26438] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:57:26.539 [DEBUG] [Thread-26438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:57:26.539 [DEBUG] [Thread-26438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:57:26.539 [DEBUG] [Thread-26438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:57:26.539 [DEBUG] [Thread-26438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:57:26.539 [DEBUG] [Thread-26438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:57:26.539 [DEBUG] [Thread-26438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:57:26.539 [DEBUG] [Thread-26438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:57:26.539 [DEBUG] [Thread-26438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:57:26.539 [DEBUG] [Thread-26438] [transport.py] [_log()] client lang: <none>
2026-04-15T21:57:26.539 [DEBUG] [Thread-26438] [transport.py] [_log()] server lang: <none>
2026-04-15T21:57:26.540 [DEBUG] [Thread-26438] [transport.py] [_log()] kex follows: False
2026-04-15T21:57:26.540 [DEBUG] [Thread-26438] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:57:26.540 [DEBUG] [Thread-26438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:57:26.540 [DEBUG] [Thread-26438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:57:26.540 [DEBUG] [Thread-26438] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:57:26.540 [DEBUG] [Thread-26438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:57:26.540 [DEBUG] [Thread-26438] [transport.py] [_log()] Compression: none
2026-04-15T21:57:26.540 [DEBUG] [Thread-26438] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:57:26.549 [DEBUG] [Thread-26438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:57:26.550 [DEBUG] [Thread-26438] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:57:26.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:57:26.550 [DEBUG] [Thread-26438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:57:26.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:57:26.592 [DEBUG] [Thread-26438] [transport.py] [_log()] userauth is OK
2026-04-15T21:57:26.592 [DEBUG] [Thread-26438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:57:26.592 [DEBUG] [Thread-26438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:57:26.593 [DEBUG] [Thread-26438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:57:26.593 [DEBUG] [Thread-26438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:57:26.628 [INFO] [Thread-26438] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:57:26.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:57:27.401 [DEBUG] [Thread-26438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:57:27.402 [DEBUG] [Thread-26438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:57:27.402 [DEBUG] [Thread-26438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:57:27.442 [DEBUG] [Thread-26438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:57:27.442 [DEBUG] [Thread-26438] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:57:27.445 [DEBUG] [Thread-26438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:57:27.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:57:27.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:57:27.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:57:27.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:57:27.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:57:27.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:57:27.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:57:27.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:57:27.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:57:27.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.831033 -999.00  +10.10   6.29     77   +6.40 1 1 1 1 1     0    0 4.05 6.48 ZNESW 6.9 6.3 121.2 8.4 10.6 -25.6 10.5 -24.2 10.2 -22.0 10.5 -23.9
2026-04-15T21:57:27.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:57:27.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:57:27.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.831033
2026-04-15T21:57:27.470 [DEBUG] [Thread-26438] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:57:27.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:57:27.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:57:27.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:57:27.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:57:27.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:57:27.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:56:51', tmtdew=4.02711, humidity=75.9456, cloud=0.0, wind=11.893, temperature=9.72135, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:56:41.251', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07225000000000037, -0.004749999999999588, -0.0677500000000002, -0.09700000000000131, -0.05150000000000077, 0.006750000000000256, -0.032999999999999474, -0.051750000000000185, -0.01150000000000162, -0.025000000000000355, -0.05975000000000108, -0.0519999999999996, -0.008500000000001506, -0.01425000000000054, -0.03900000000000148, -0.0259999999999998, 0.019249999999999545, -0.04150000000000098, -0.011000000000001009, -0.004750000000001364, 0.008999999999998565, 0.01774999999999949, 0.0012500000000006395, -0.0022500000000000853, 0.014999999999998792, -0.07249999999999979, -0.020749999999999602, -0.009499999999999176, 0.0259999999999998, -0.03199999999999825, 0.06700000000000017, -0.009999999999999787, -0.0022500000000000853], zp_timestamp='2026-04-15T19:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:57:27.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:57:27.727 [DEBUG] [Thread-26441] [transport.py] [_log()] starting thread (client mode): 0xee9c3e50
2026-04-15T21:57:27.728 [DEBUG] [Thread-26441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:57:27.742 [DEBUG] [Thread-26441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:57:27.742 [INFO] [Thread-26441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:57:27.749 [DEBUG] [Thread-26441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:57:27.749 [DEBUG] [Thread-26441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:57:27.750 [DEBUG] [Thread-26441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:57:27.750 [DEBUG] [Thread-26441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:57:27.750 [DEBUG] [Thread-26441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:57:27.750 [DEBUG] [Thread-26441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:57:27.750 [DEBUG] [Thread-26441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:57:27.750 [DEBUG] [Thread-26441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:57:27.750 [DEBUG] [Thread-26441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:57:27.750 [DEBUG] [Thread-26441] [transport.py] [_log()] client lang: <none>
2026-04-15T21:57:27.750 [DEBUG] [Thread-26441] [transport.py] [_log()] server lang: <none>
2026-04-15T21:57:27.750 [DEBUG] [Thread-26441] [transport.py] [_log()] kex follows: False
2026-04-15T21:57:27.750 [DEBUG] [Thread-26441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:57:27.750 [DEBUG] [Thread-26441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:57:27.751 [DEBUG] [Thread-26441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:57:27.751 [DEBUG] [Thread-26441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:57:27.751 [DEBUG] [Thread-26441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:57:27.751 [DEBUG] [Thread-26441] [transport.py] [_log()] Compression: none
2026-04-15T21:57:27.751 [DEBUG] [Thread-26441] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:57:27.806 [DEBUG] [Thread-26441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:57:27.807 [DEBUG] [Thread-26441] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:57:27.807 [DEBUG] [Thread-26441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:57:27.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:57:27.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:57:27.863 [DEBUG] [Thread-26441] [transport.py] [_log()] userauth is OK
2026-04-15T21:57:27.863 [DEBUG] [Thread-26441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:57:27.863 [DEBUG] [Thread-26441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:57:27.864 [DEBUG] [Thread-26441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:57:27.864 [DEBUG] [Thread-26441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:57:27.889 [INFO] [Thread-26441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:57:27.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:57:27.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:57:28.720 [DEBUG] [Thread-26441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:57:28.720 [DEBUG] [Thread-26441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:57:28.768 [DEBUG] [Thread-26441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:57:28.768 [DEBUG] [Thread-26441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:57:28.777 [DEBUG] [Thread-26441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:57:28.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:57:28.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')
2026-04-15T21:57:28.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
2026-04-15T21:57:28.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:57:28.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:57:28.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:57:28.812 [DEBUG] [Thread-26441] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:57:29.348 [DEBUG] [Thread-26443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:57:44.391 [DEBUG] [Thread-26444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:57:54.686 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:57:54.687 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:57:58.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:57:58.835 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:57:58.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
2026-04-15T21:57:59.422 [DEBUG] [Thread-26445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:58:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 57, 26), 4.45303, 73.5229, 0.0, 9.6876, 9.72773, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:58:00.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:57:26
2026-04-15T21:58:00.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:58:01.012 [DEBUG] [Thread-26446] [transport.py] [_log()] starting thread (client mode): 0xee9c2fb0
2026-04-15T21:58:01.012 [DEBUG] [Thread-26446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:58:01.031 [DEBUG] [Thread-26446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:58:01.032 [INFO] [Thread-26446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:58:01.034 [DEBUG] [Thread-26446] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:58:01.035 [DEBUG] [Thread-26446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:58:01.035 [DEBUG] [Thread-26446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:58:01.035 [DEBUG] [Thread-26446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:58:01.035 [DEBUG] [Thread-26446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:58:01.035 [DEBUG] [Thread-26446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:58:01.035 [DEBUG] [Thread-26446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:58:01.035 [DEBUG] [Thread-26446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:58:01.035 [DEBUG] [Thread-26446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:58:01.035 [DEBUG] [Thread-26446] [transport.py] [_log()] client lang: <none>
2026-04-15T21:58:01.035 [DEBUG] [Thread-26446] [transport.py] [_log()] server lang: <none>
2026-04-15T21:58:01.036 [DEBUG] [Thread-26446] [transport.py] [_log()] kex follows: False
2026-04-15T21:58:01.036 [DEBUG] [Thread-26446] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:58:01.036 [DEBUG] [Thread-26446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:58:01.036 [DEBUG] [Thread-26446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:58:01.036 [DEBUG] [Thread-26446] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:58:01.036 [DEBUG] [Thread-26446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:58:01.036 [DEBUG] [Thread-26446] [transport.py] [_log()] Compression: none
2026-04-15T21:58:01.036 [DEBUG] [Thread-26446] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:58:01.054 [DEBUG] [Thread-26446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:58:01.055 [DEBUG] [Thread-26446] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:58:01.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:58:01.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:58:01.056 [DEBUG] [Thread-26446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:58:01.056 [DEBUG] [Thread-26446] [transport.py] [_log()] userauth is OK
2026-04-15T21:58:01.057 [DEBUG] [Thread-26446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:58:01.057 [DEBUG] [Thread-26446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:58:01.057 [DEBUG] [Thread-26446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:58:01.057 [DEBUG] [Thread-26446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:58:01.081 [INFO] [Thread-26446] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:58:01.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:58:01.853 [DEBUG] [Thread-26446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:58:01.854 [DEBUG] [Thread-26446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:58:01.854 [DEBUG] [Thread-26446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:58:01.894 [DEBUG] [Thread-26446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:58:01.894 [DEBUG] [Thread-26446] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:58:01.897 [DEBUG] [Thread-26446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:58:01.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:58:01.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:58:01.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:58:01.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:58:01.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:58:01.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:58:01.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:58:01.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:58:01.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:58:01.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.831380 -999.00  +10.00   5.16     78   +6.30 1 1 1 1 1     0    0 4.02 5.73 ZNESW 5.6 5.2 119.8 7.8 10.6 -25.5 10.4 -24.1 10.2 -22.0 10.5 -24.2
2026-04-15T21:58:01.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:58:01.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:58:01.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.831380
2026-04-15T21:58:01.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:58:01.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:58:01.922 [DEBUG] [Thread-26446] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:58:01.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:58:01.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:58:01.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:58:01.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:57:26', tmtdew=4.45303, humidity=73.5229, cloud=0.0, wind=9.6876, temperature=9.72773, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:57:11.232', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07225000000000037, -0.004749999999999588, -0.0677500000000002, -0.09700000000000131, -0.05150000000000077, 0.006750000000000256, -0.032999999999999474, -0.051750000000000185, -0.01150000000000162, -0.025000000000000355, -0.05975000000000108, -0.0519999999999996, -0.008500000000001506, -0.01425000000000054, -0.03900000000000148, -0.0259999999999998, 0.019249999999999545, -0.04150000000000098, -0.011000000000001009, -0.004750000000001364, 0.008999999999998565, 0.01774999999999949, 0.0012500000000006395, -0.0022500000000000853, 0.014999999999998792, -0.07249999999999979, -0.020749999999999602, -0.009499999999999176, 0.0259999999999998, -0.03199999999999825, 0.06700000000000017, -0.009999999999999787, -0.0022500000000000853], zp_timestamp='2026-04-15T19:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:58:02.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:58:02.180 [DEBUG] [Thread-26449] [transport.py] [_log()] starting thread (client mode): 0xee9c0b50
2026-04-15T21:58:02.180 [DEBUG] [Thread-26449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:58:02.194 [DEBUG] [Thread-26449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:58:02.194 [INFO] [Thread-26449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:58:02.201 [DEBUG] [Thread-26449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:58:02.201 [DEBUG] [Thread-26449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:58:02.201 [DEBUG] [Thread-26449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:58:02.201 [DEBUG] [Thread-26449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:58:02.201 [DEBUG] [Thread-26449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:58:02.201 [DEBUG] [Thread-26449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:58:02.201 [DEBUG] [Thread-26449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:58:02.201 [DEBUG] [Thread-26449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:58:02.201 [DEBUG] [Thread-26449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:58:02.202 [DEBUG] [Thread-26449] [transport.py] [_log()] client lang: <none>
2026-04-15T21:58:02.202 [DEBUG] [Thread-26449] [transport.py] [_log()] server lang: <none>
2026-04-15T21:58:02.202 [DEBUG] [Thread-26449] [transport.py] [_log()] kex follows: False
2026-04-15T21:58:02.202 [DEBUG] [Thread-26449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:58:02.202 [DEBUG] [Thread-26449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:58:02.202 [DEBUG] [Thread-26449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:58:02.202 [DEBUG] [Thread-26449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:58:02.202 [DEBUG] [Thread-26449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:58:02.202 [DEBUG] [Thread-26449] [transport.py] [_log()] Compression: none
2026-04-15T21:58:02.202 [DEBUG] [Thread-26449] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:58:02.260 [DEBUG] [Thread-26449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:58:02.261 [DEBUG] [Thread-26449] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:58:02.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:58:02.261 [DEBUG] [Thread-26449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:58:02.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:58:02.315 [DEBUG] [Thread-26449] [transport.py] [_log()] userauth is OK
2026-04-15T21:58:02.316 [DEBUG] [Thread-26449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:58:02.316 [DEBUG] [Thread-26449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:58:02.316 [DEBUG] [Thread-26449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:58:02.316 [DEBUG] [Thread-26449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:58:02.338 [INFO] [Thread-26449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:58:02.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:58:02.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:58:03.207 [DEBUG] [Thread-26449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:58:03.207 [DEBUG] [Thread-26449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:58:03.255 [DEBUG] [Thread-26449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:58:03.255 [DEBUG] [Thread-26449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:58:03.264 [DEBUG] [Thread-26449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:58:03.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:58: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')
2026-04-15T21:58:03.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
2026-04-15T21:58:03.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:58:03.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:58:03.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:58:03.299 [DEBUG] [Thread-26449] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:58:14.452 [DEBUG] [Thread-26451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:58:22.299 [DEBUG] [Thread-26452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:58:29.497 [DEBUG] [Thread-26453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:58:33.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:58:33.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:58:33.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
2026-04-15T21:58:34.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 58, 2), 4.44461, 73.5727, 0.0, 10.0228, 9.76091, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:58:34.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:58:02
2026-04-15T21:58:34.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:58:35.453 [DEBUG] [Thread-26454] [transport.py] [_log()] starting thread (client mode): 0xee9c3c70
2026-04-15T21:58:35.453 [DEBUG] [Thread-26454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:58:35.473 [DEBUG] [Thread-26454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:58:35.473 [INFO] [Thread-26454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:58:35.476 [DEBUG] [Thread-26454] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:58:35.476 [DEBUG] [Thread-26454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:58:35.476 [DEBUG] [Thread-26454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:58:35.476 [DEBUG] [Thread-26454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:58:35.476 [DEBUG] [Thread-26454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:58:35.477 [DEBUG] [Thread-26454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:58:35.477 [DEBUG] [Thread-26454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:58:35.477 [DEBUG] [Thread-26454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:58:35.477 [DEBUG] [Thread-26454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:58:35.477 [DEBUG] [Thread-26454] [transport.py] [_log()] client lang: <none>
2026-04-15T21:58:35.477 [DEBUG] [Thread-26454] [transport.py] [_log()] server lang: <none>
2026-04-15T21:58:35.477 [DEBUG] [Thread-26454] [transport.py] [_log()] kex follows: False
2026-04-15T21:58:35.477 [DEBUG] [Thread-26454] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:58:35.477 [DEBUG] [Thread-26454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:58:35.477 [DEBUG] [Thread-26454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:58:35.477 [DEBUG] [Thread-26454] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:58:35.477 [DEBUG] [Thread-26454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:58:35.477 [DEBUG] [Thread-26454] [transport.py] [_log()] Compression: none
2026-04-15T21:58:35.477 [DEBUG] [Thread-26454] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:58:35.494 [DEBUG] [Thread-26454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:58:35.494 [DEBUG] [Thread-26454] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:58:35.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:58:35.495 [DEBUG] [Thread-26454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:58:35.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:58:35.496 [DEBUG] [Thread-26454] [transport.py] [_log()] userauth is OK
2026-04-15T21:58:35.496 [DEBUG] [Thread-26454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:58:35.496 [DEBUG] [Thread-26454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:58:35.496 [DEBUG] [Thread-26454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:58:35.496 [DEBUG] [Thread-26454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:58:35.514 [INFO] [Thread-26454] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:58:35.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:58:36.315 [DEBUG] [Thread-26454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:58:36.315 [DEBUG] [Thread-26454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:58:36.316 [DEBUG] [Thread-26454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:58:36.358 [DEBUG] [Thread-26454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:58:36.358 [DEBUG] [Thread-26454] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:58:36.360 [DEBUG] [Thread-26454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:58:36.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:58:36.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:58:36.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:58:36.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:58:36.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:58:36.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:58:36.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:58:36.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:58:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:58:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.831727 -999.00  +10.00   6.04     78   +6.40 1 1 1 1 1     0    0 4.08 4.71 ZNESW 5.5 6.0 91.6 8.7 10.5 -25.3 10.4 -23.9 10.2 -22.1 10.5 -23.9
2026-04-15T21:58:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:58:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:58:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.831727
2026-04-15T21:58:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:58:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:58:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:58:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:58:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:58:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:58:02', tmtdew=4.44461, humidity=73.5727, cloud=0.0, wind=10.0228, temperature=9.76091, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:57:41.213', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07225000000000037, -0.004749999999999588, -0.0677500000000002, -0.09700000000000131, -0.05150000000000077, 0.006750000000000256, -0.032999999999999474, -0.051750000000000185, -0.01150000000000162, -0.025000000000000355, -0.05975000000000108, -0.0519999999999996, -0.008500000000001506, -0.01425000000000054, -0.03900000000000148, -0.0259999999999998, 0.019249999999999545, -0.04150000000000098, -0.011000000000001009, -0.004750000000001364, 0.008999999999998565, 0.01774999999999949, 0.0012500000000006395, -0.0022500000000000853, 0.014999999999998792, -0.07249999999999979, -0.020749999999999602, -0.009499999999999176, 0.0259999999999998, -0.03199999999999825, 0.06700000000000017, -0.009999999999999787, -0.0022500000000000853], zp_timestamp='2026-04-15T19:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:58:36.379 [DEBUG] [Thread-26454] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:58:36.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:58:36.605 [DEBUG] [Thread-26457] [transport.py] [_log()] starting thread (client mode): 0xee9c3850
2026-04-15T21:58:36.606 [DEBUG] [Thread-26457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:58:36.620 [DEBUG] [Thread-26457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:58:36.620 [INFO] [Thread-26457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:58:36.627 [DEBUG] [Thread-26457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:58:36.627 [DEBUG] [Thread-26457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:58:36.628 [DEBUG] [Thread-26457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:58:36.628 [DEBUG] [Thread-26457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:58:36.628 [DEBUG] [Thread-26457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:58:36.628 [DEBUG] [Thread-26457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:58:36.628 [DEBUG] [Thread-26457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:58:36.628 [DEBUG] [Thread-26457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:58:36.628 [DEBUG] [Thread-26457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:58:36.628 [DEBUG] [Thread-26457] [transport.py] [_log()] client lang: <none>
2026-04-15T21:58:36.628 [DEBUG] [Thread-26457] [transport.py] [_log()] server lang: <none>
2026-04-15T21:58:36.628 [DEBUG] [Thread-26457] [transport.py] [_log()] kex follows: False
2026-04-15T21:58:36.628 [DEBUG] [Thread-26457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:58:36.628 [DEBUG] [Thread-26457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:58:36.629 [DEBUG] [Thread-26457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:58:36.629 [DEBUG] [Thread-26457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:58:36.629 [DEBUG] [Thread-26457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:58:36.629 [DEBUG] [Thread-26457] [transport.py] [_log()] Compression: none
2026-04-15T21:58:36.629 [DEBUG] [Thread-26457] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:58:36.688 [DEBUG] [Thread-26457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:58:36.689 [DEBUG] [Thread-26457] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:58:36.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:58:36.689 [DEBUG] [Thread-26457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:58:36.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:58:36.745 [DEBUG] [Thread-26457] [transport.py] [_log()] userauth is OK
2026-04-15T21:58:36.745 [DEBUG] [Thread-26457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:58:36.746 [DEBUG] [Thread-26457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:58:36.746 [DEBUG] [Thread-26457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:58:36.746 [DEBUG] [Thread-26457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:58:36.771 [INFO] [Thread-26457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:58:36.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:58:36.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:58:37.597 [DEBUG] [Thread-26457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:58:37.597 [DEBUG] [Thread-26457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:58:37.645 [DEBUG] [Thread-26457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:58:37.645 [DEBUG] [Thread-26457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:58:37.654 [DEBUG] [Thread-26457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:58:37.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:58:37.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')
2026-04-15T21:58:37.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
2026-04-15T21:58:37.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:58:37.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:58:37.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:58:37.689 [DEBUG] [Thread-26457] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:58:44.528 [DEBUG] [Thread-26459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:58:51.932 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:58:54.888 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:58:54.890 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:58:56.747 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:58:59.570 [DEBUG] [Thread-26460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:58:59.821 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:59:05.375 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:59:07.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:59:07.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:59:07.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
2026-04-15T21:59:09.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 58, 38), 3.98092, 76.1784, 0.0, 11.6813, 9.65536, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:59:09.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:58:38
2026-04-15T21:59:09.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:59:09.906 [DEBUG] [Thread-26461] [transport.py] [_log()] starting thread (client mode): 0xf1336650
2026-04-15T21:59:09.907 [DEBUG] [Thread-26461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:59:09.917 [DEBUG] [Thread-26461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:59:09.917 [INFO] [Thread-26461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:59:09.920 [DEBUG] [Thread-26461] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:59:09.920 [DEBUG] [Thread-26461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:59:09.920 [DEBUG] [Thread-26461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:59:09.920 [DEBUG] [Thread-26461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:59:09.920 [DEBUG] [Thread-26461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:59:09.920 [DEBUG] [Thread-26461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:59:09.920 [DEBUG] [Thread-26461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:59:09.920 [DEBUG] [Thread-26461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:59:09.920 [DEBUG] [Thread-26461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:59:09.920 [DEBUG] [Thread-26461] [transport.py] [_log()] client lang: <none>
2026-04-15T21:59:09.921 [DEBUG] [Thread-26461] [transport.py] [_log()] server lang: <none>
2026-04-15T21:59:09.921 [DEBUG] [Thread-26461] [transport.py] [_log()] kex follows: False
2026-04-15T21:59:09.921 [DEBUG] [Thread-26461] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:59:09.921 [DEBUG] [Thread-26461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:59:09.921 [DEBUG] [Thread-26461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:59:09.921 [DEBUG] [Thread-26461] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:59:09.921 [DEBUG] [Thread-26461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:59:09.921 [DEBUG] [Thread-26461] [transport.py] [_log()] Compression: none
2026-04-15T21:59:09.921 [DEBUG] [Thread-26461] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:59:09.930 [DEBUG] [Thread-26461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:59:09.931 [DEBUG] [Thread-26461] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:59:09.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:59:09.932 [DEBUG] [Thread-26461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:59:09.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:59:09.933 [DEBUG] [Thread-26461] [transport.py] [_log()] userauth is OK
2026-04-15T21:59:09.933 [DEBUG] [Thread-26461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:59:09.933 [DEBUG] [Thread-26461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:59:09.933 [DEBUG] [Thread-26461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:59:09.934 [DEBUG] [Thread-26461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:59:09.951 [INFO] [Thread-26461] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:59:09.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:59:10.754 [DEBUG] [Thread-26461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:59:10.755 [DEBUG] [Thread-26461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:59:10.756 [DEBUG] [Thread-26461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:59:10.795 [DEBUG] [Thread-26461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:59:10.795 [DEBUG] [Thread-26461] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:59:10.798 [DEBUG] [Thread-26461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:59:10.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:59:10.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:59:10.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:59:10.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:59:10.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:59:10.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:59:10.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:59:10.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:59:10.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:59:10.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.832075 -999.00   +9.90   6.00     78   +6.30 1 1 1 1 1     0    0 4.00 3.34 ZNESW 4.9 6.0 108.8 7.2 10.5 -25.4 10.4 -24.1 10.1 -22.0 10.4 -24.1
2026-04-15T21:59:10.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:59:10.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:59:10.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.832075
2026-04-15T21:59:10.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:59:10.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:59:10.822 [DEBUG] [Thread-26461] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:59:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:59:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:59:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:59:10.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:58:38', tmtdew=3.98092, humidity=76.1784, cloud=0.0, wind=11.6813, temperature=9.65536, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:58:11.280', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07225000000000037, -0.004749999999999588, -0.0677500000000002, -0.09700000000000131, -0.05150000000000077, 0.006750000000000256, -0.032999999999999474, -0.051750000000000185, -0.01150000000000162, -0.025000000000000355, -0.05975000000000108, -0.0519999999999996, -0.008500000000001506, -0.01425000000000054, -0.03900000000000148, -0.0259999999999998, 0.019249999999999545, -0.04150000000000098, -0.011000000000001009, -0.004750000000001364, 0.008999999999998565, 0.01774999999999949, 0.0012500000000006395, -0.0022500000000000853, 0.014999999999998792, -0.07249999999999979, -0.020749999999999602, -0.009499999999999176, 0.0259999999999998, -0.03199999999999825, 0.06700000000000017, -0.009999999999999787, -0.0022500000000000853], zp_timestamp='2026-04-15T19:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:59:11.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:59:11.081 [DEBUG] [Thread-26464] [transport.py] [_log()] starting thread (client mode): 0xf13e26b0
2026-04-15T21:59:11.081 [DEBUG] [Thread-26464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:59:11.096 [DEBUG] [Thread-26464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:59:11.096 [INFO] [Thread-26464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:59:11.104 [DEBUG] [Thread-26464] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:59:11.104 [DEBUG] [Thread-26464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:59:11.104 [DEBUG] [Thread-26464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:59:11.104 [DEBUG] [Thread-26464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:59:11.104 [DEBUG] [Thread-26464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:59:11.104 [DEBUG] [Thread-26464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:59:11.104 [DEBUG] [Thread-26464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:59:11.104 [DEBUG] [Thread-26464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:59:11.105 [DEBUG] [Thread-26464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:59:11.105 [DEBUG] [Thread-26464] [transport.py] [_log()] client lang: <none>
2026-04-15T21:59:11.105 [DEBUG] [Thread-26464] [transport.py] [_log()] server lang: <none>
2026-04-15T21:59:11.105 [DEBUG] [Thread-26464] [transport.py] [_log()] kex follows: False
2026-04-15T21:59:11.105 [DEBUG] [Thread-26464] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:59:11.105 [DEBUG] [Thread-26464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:59:11.105 [DEBUG] [Thread-26464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:59:11.105 [DEBUG] [Thread-26464] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:59:11.105 [DEBUG] [Thread-26464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:59:11.105 [DEBUG] [Thread-26464] [transport.py] [_log()] Compression: none
2026-04-15T21:59:11.105 [DEBUG] [Thread-26464] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:59:11.162 [DEBUG] [Thread-26464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:59:11.163 [DEBUG] [Thread-26464] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:59:11.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:59:11.163 [DEBUG] [Thread-26464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:59:11.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:59:11.219 [DEBUG] [Thread-26464] [transport.py] [_log()] userauth is OK
2026-04-15T21:59:11.219 [DEBUG] [Thread-26464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:59:11.219 [DEBUG] [Thread-26464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:59:11.219 [DEBUG] [Thread-26464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:59:11.219 [DEBUG] [Thread-26464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:59:11.247 [INFO] [Thread-26464] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:59:11.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:59:11.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:59:12.094 [DEBUG] [Thread-26464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:59:12.094 [DEBUG] [Thread-26464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:59:12.142 [DEBUG] [Thread-26464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:59:12.142 [DEBUG] [Thread-26464] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:59:12.150 [DEBUG] [Thread-26464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:59:12.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:59:12.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')
2026-04-15T21:59:12.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
2026-04-15T21:59:12.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:59:12.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:59:12.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:59:12.183 [DEBUG] [Thread-26464] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:59:14.602 [DEBUG] [Thread-26466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:59:22.443 [DEBUG] [Thread-26467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:59:29.643 [DEBUG] [Thread-26468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:59:42.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T21:59:42.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T21:59:42.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T21:59:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 59, 14), 4.18367, 75.1224, 0.0, 9.74052, 9.51109, 0, 0, 0, 2, 0, 0),)
2026-04-15T21:59:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:59:14
2026-04-15T21:59:43.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T21:59:44.419 [DEBUG] [Thread-26469] [transport.py] [_log()] starting thread (client mode): 0xee9c0f10
2026-04-15T21:59:44.419 [DEBUG] [Thread-26469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:59:44.433 [DEBUG] [Thread-26469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T21:59:44.433 [INFO] [Thread-26469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T21:59:44.435 [DEBUG] [Thread-26469] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:59:44.435 [DEBUG] [Thread-26469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T21:59:44.435 [DEBUG] [Thread-26469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:59:44.435 [DEBUG] [Thread-26469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:59:44.435 [DEBUG] [Thread-26469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:59:44.435 [DEBUG] [Thread-26469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:59:44.435 [DEBUG] [Thread-26469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:59:44.435 [DEBUG] [Thread-26469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:59:44.435 [DEBUG] [Thread-26469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:59:44.435 [DEBUG] [Thread-26469] [transport.py] [_log()] client lang: <none>
2026-04-15T21:59:44.435 [DEBUG] [Thread-26469] [transport.py] [_log()] server lang: <none>
2026-04-15T21:59:44.436 [DEBUG] [Thread-26469] [transport.py] [_log()] kex follows: False
2026-04-15T21:59:44.436 [DEBUG] [Thread-26469] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:59:44.436 [DEBUG] [Thread-26469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:59:44.436 [DEBUG] [Thread-26469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:59:44.436 [DEBUG] [Thread-26469] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:59:44.436 [DEBUG] [Thread-26469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:59:44.436 [DEBUG] [Thread-26469] [transport.py] [_log()] Compression: none
2026-04-15T21:59:44.436 [DEBUG] [Thread-26469] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:59:44.452 [DEBUG] [Thread-26469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:59:44.452 [DEBUG] [Thread-26469] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:59:44.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T21:59:44.453 [DEBUG] [Thread-26469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T21:59:44.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:59:44.454 [DEBUG] [Thread-26469] [transport.py] [_log()] userauth is OK
2026-04-15T21:59:44.454 [DEBUG] [Thread-26469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:59:44.454 [DEBUG] [Thread-26469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:59:44.454 [DEBUG] [Thread-26469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T21:59:44.454 [DEBUG] [Thread-26469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:59:44.471 [INFO] [Thread-26469] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:59:44.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:59:44.674 [DEBUG] [Thread-26471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:59:45.259 [DEBUG] [Thread-26469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:59:45.259 [DEBUG] [Thread-26469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:59:45.260 [DEBUG] [Thread-26469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T21:59:45.299 [DEBUG] [Thread-26469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:59:45.299 [DEBUG] [Thread-26469] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:59:45.302 [DEBUG] [Thread-26469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:59:45.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:59:45.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T21:59:45.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T21:59:45.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T21:59:45.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:59:45.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T21:59:45.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:59:45.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:59:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T21:59:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.832422 -999.00   +9.80   4.96     78   +6.30 1 1 1 1 1     0    0 3.83 2.42 ZNESW 5.8 5.0 118.2 5.7 10.5 -25.4 10.4 -23.9 10.2 -22.0 10.4 -24.0
2026-04-15T21:59:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T21:59:45.325 [DEBUG] [Thread-26469] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:59:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T21:59:45.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.832422
2026-04-15T21:59:45.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T21:59:45.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T21:59:45.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T21:59:45.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T21:59:45.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T21:59:45.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:59:14', tmtdew=4.18367, humidity=75.1224, cloud=0.0, wind=9.74052, temperature=9.51109, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:58:41.261', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07225000000000037, -0.004749999999999588, -0.0677500000000002, -0.09700000000000131, -0.05150000000000077, 0.006750000000000256, -0.032999999999999474, -0.051750000000000185, -0.01150000000000162, -0.025000000000000355, -0.05975000000000108, -0.0519999999999996, -0.008500000000001506, -0.01425000000000054, -0.03900000000000148, -0.0259999999999998, 0.019249999999999545, -0.04150000000000098, -0.011000000000001009, -0.004750000000001364, 0.008999999999998565, 0.01774999999999949, 0.0012500000000006395, -0.0022500000000000853, 0.014999999999998792, -0.07249999999999979, -0.020749999999999602, -0.009499999999999176, 0.0259999999999998, -0.03199999999999825, 0.06700000000000017, -0.009999999999999787, -0.0022500000000000853], zp_timestamp='2026-04-15T19:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T21:59:45.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T21:59:45.582 [DEBUG] [Thread-26473] [transport.py] [_log()] starting thread (client mode): 0xee9924d0
2026-04-15T21:59:45.582 [DEBUG] [Thread-26473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T21:59:45.597 [DEBUG] [Thread-26473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T21:59:45.597 [INFO] [Thread-26473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T21:59:45.604 [DEBUG] [Thread-26473] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T21:59:45.604 [DEBUG] [Thread-26473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T21:59:45.604 [DEBUG] [Thread-26473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T21:59:45.604 [DEBUG] [Thread-26473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:59:45.604 [DEBUG] [Thread-26473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T21:59:45.605 [DEBUG] [Thread-26473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:59:45.605 [DEBUG] [Thread-26473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T21:59:45.605 [DEBUG] [Thread-26473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T21:59:45.605 [DEBUG] [Thread-26473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T21:59:45.605 [DEBUG] [Thread-26473] [transport.py] [_log()] client lang: <none>
2026-04-15T21:59:45.605 [DEBUG] [Thread-26473] [transport.py] [_log()] server lang: <none>
2026-04-15T21:59:45.605 [DEBUG] [Thread-26473] [transport.py] [_log()] kex follows: False
2026-04-15T21:59:45.605 [DEBUG] [Thread-26473] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T21:59:45.605 [DEBUG] [Thread-26473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T21:59:45.605 [DEBUG] [Thread-26473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T21:59:45.605 [DEBUG] [Thread-26473] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T21:59:45.606 [DEBUG] [Thread-26473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T21:59:45.606 [DEBUG] [Thread-26473] [transport.py] [_log()] Compression: none
2026-04-15T21:59:45.606 [DEBUG] [Thread-26473] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T21:59:45.664 [DEBUG] [Thread-26473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T21:59:45.664 [DEBUG] [Thread-26473] [transport.py] [_log()] Switch to new keys ...
2026-04-15T21:59:45.665 [DEBUG] [Thread-26473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T21:59:45.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T21:59:45.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T21:59:45.720 [DEBUG] [Thread-26473] [transport.py] [_log()] userauth is OK
2026-04-15T21:59:45.721 [DEBUG] [Thread-26473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T21:59:45.721 [DEBUG] [Thread-26473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T21:59:45.721 [DEBUG] [Thread-26473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T21:59:45.721 [DEBUG] [Thread-26473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T21:59:45.746 [INFO] [Thread-26473] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T21:59:45.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T21:59:45.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T21:59:46.578 [DEBUG] [Thread-26473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T21:59:46.578 [DEBUG] [Thread-26473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T21:59:46.626 [DEBUG] [Thread-26473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T21:59:46.626 [DEBUG] [Thread-26473] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T21:59:46.635 [DEBUG] [Thread-26473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T21:59:46.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T21:59:46.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')
2026-04-15T21:59:46.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
2026-04-15T21:59:46.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T21:59:46.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T21:59:46.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T21:59:46.670 [DEBUG] [Thread-26473] [transport.py] [_log()] EOF in transport thread
2026-04-15T21:59:55.093 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:59:55.094 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T21:59:59.705 [DEBUG] [Thread-26475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:00:14.750 [DEBUG] [Thread-26476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:00:16.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:00:16.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:00:16.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
2026-04-15T22:00:18.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 21, 59, 49), 3.94328, 76.3773, 0.0, 11.4696, 9.65527, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:00:18.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 21:59:49
2026-04-15T22:00:18.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:00:18.833 [DEBUG] [Thread-26477] [transport.py] [_log()] starting thread (client mode): 0xf13c9d20
2026-04-15T22:00:18.833 [DEBUG] [Thread-26477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:00:18.855 [DEBUG] [Thread-26477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:00:18.855 [INFO] [Thread-26477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:00:18.858 [DEBUG] [Thread-26477] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:00:18.858 [DEBUG] [Thread-26477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:00:18.858 [DEBUG] [Thread-26477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:00:18.858 [DEBUG] [Thread-26477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:00:18.858 [DEBUG] [Thread-26477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:00:18.858 [DEBUG] [Thread-26477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:00:18.858 [DEBUG] [Thread-26477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:00:18.858 [DEBUG] [Thread-26477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:00:18.858 [DEBUG] [Thread-26477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:00:18.858 [DEBUG] [Thread-26477] [transport.py] [_log()] client lang: <none>
2026-04-15T22:00:18.858 [DEBUG] [Thread-26477] [transport.py] [_log()] server lang: <none>
2026-04-15T22:00:18.859 [DEBUG] [Thread-26477] [transport.py] [_log()] kex follows: False
2026-04-15T22:00:18.859 [DEBUG] [Thread-26477] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:00:18.859 [DEBUG] [Thread-26477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:00:18.859 [DEBUG] [Thread-26477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:00:18.859 [DEBUG] [Thread-26477] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:00:18.859 [DEBUG] [Thread-26477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:00:18.859 [DEBUG] [Thread-26477] [transport.py] [_log()] Compression: none
2026-04-15T22:00:18.859 [DEBUG] [Thread-26477] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:00:18.878 [DEBUG] [Thread-26477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:00:18.879 [DEBUG] [Thread-26477] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:00:18.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:00:18.879 [DEBUG] [Thread-26477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:00:18.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:00:18.880 [DEBUG] [Thread-26477] [transport.py] [_log()] userauth is OK
2026-04-15T22:00:18.880 [DEBUG] [Thread-26477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:00:18.880 [DEBUG] [Thread-26477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:00:18.880 [DEBUG] [Thread-26477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:00:18.880 [DEBUG] [Thread-26477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:00:18.900 [INFO] [Thread-26477] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:00:18.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:00:22.592 [DEBUG] [Thread-26479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:00:26.662 [DEBUG] [Thread-26477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:00:26.662 [DEBUG] [Thread-26477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:00:26.663 [DEBUG] [Thread-26477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:00:26.703 [DEBUG] [Thread-26477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:00:26.703 [DEBUG] [Thread-26477] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:00:26.705 [DEBUG] [Thread-26477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:00:26.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:00:26.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:00:26.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:00:26.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:00:26.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:00:26.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:00:26.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:00:26.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:00:26.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:00:26.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.833116 -999.00   +9.70   5.00     79   +6.30 1 1 1 1 1     0    0 3.88 -0.27 ZNESW 6.9 5.0 119.4 6.9 10.4 -25.3 10.4 -24.0 10.1 -21.7 10.4 -24.0
2026-04-15T22:00:26.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:00:26.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:00:26.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.833116
2026-04-15T22:00:26.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:00:26.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:00:26.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:00:26.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:00:26.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:00:26.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T21:59:49', tmtdew=3.94328, humidity=76.3773, cloud=0.0, wind=11.4696, temperature=9.65527, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T19:59:41.222', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07225000000000037, -0.004749999999999588, -0.0677500000000002, -0.09700000000000131, -0.05150000000000077, 0.006750000000000256, -0.032999999999999474, -0.051750000000000185, -0.01150000000000162, -0.025000000000000355, -0.05975000000000108, -0.0519999999999996, -0.008500000000001506, -0.01425000000000054, -0.03900000000000148, -0.0259999999999998, 0.019249999999999545, -0.04150000000000098, -0.011000000000001009, -0.004750000000001364, 0.008999999999998565, 0.01774999999999949, 0.0012500000000006395, -0.0022500000000000853, 0.014999999999998792, -0.07249999999999979, -0.020749999999999602, -0.009499999999999176, 0.0259999999999998, -0.03199999999999825, 0.06700000000000017, -0.009999999999999787, -0.0022500000000000853], zp_timestamp='2026-04-15T19:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:00:26.808 [DEBUG] [Thread-26477] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:00:27.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:00:29.780 [DEBUG] [Thread-26481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:00:44.820 [DEBUG] [Thread-26482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:00:55.298 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:00:55.299 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:00:59.850 [DEBUG] [Thread-26483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:01:14.880 [DEBUG] [Thread-26484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:01:22.741 [DEBUG] [Thread-26485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:01:29.911 [DEBUG] [Thread-26486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:01:44.942 [DEBUG] [Thread-26487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:01:55.500 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:01:55.501 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:01:59.972 [DEBUG] [Thread-26488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:02:15.001 [DEBUG] [Thread-26489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:02:22.887 [DEBUG] [Thread-26490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:02:30.032 [DEBUG] [Thread-26491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:02:30.777 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:02:33.900 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:02:39.001 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:02:41.674 [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
2026-04-15T22:02:44.568 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:02:45.065 [DEBUG] [Thread-26492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:02:55.701 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:02:55.702 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:03:00.092 [DEBUG] [Thread-26493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:03:03.911 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:03:09.506 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:03:11.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:03:11.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:03:11.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
2026-04-15T22:03:13.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 2, 48), 3.80732, 77.0739, 0.0, 11.011, 9.4892, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:03:13.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:02:48
2026-04-15T22:03:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:03:13.858 [DEBUG] [Thread-26494] [transport.py] [_log()] starting thread (client mode): 0xee95e8f0
2026-04-15T22:03:13.858 [DEBUG] [Thread-26494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:03:13.881 [DEBUG] [Thread-26494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:03:13.881 [INFO] [Thread-26494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:03:13.884 [DEBUG] [Thread-26494] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:03:13.885 [DEBUG] [Thread-26494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:03:13.885 [DEBUG] [Thread-26494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:03:13.885 [DEBUG] [Thread-26494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:03:13.885 [DEBUG] [Thread-26494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:03:13.885 [DEBUG] [Thread-26494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:03:13.885 [DEBUG] [Thread-26494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:03:13.885 [DEBUG] [Thread-26494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:03:13.885 [DEBUG] [Thread-26494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:03:13.885 [DEBUG] [Thread-26494] [transport.py] [_log()] client lang: <none>
2026-04-15T22:03:13.885 [DEBUG] [Thread-26494] [transport.py] [_log()] server lang: <none>
2026-04-15T22:03:13.885 [DEBUG] [Thread-26494] [transport.py] [_log()] kex follows: False
2026-04-15T22:03:13.885 [DEBUG] [Thread-26494] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:03:13.886 [DEBUG] [Thread-26494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:03:13.886 [DEBUG] [Thread-26494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:03:13.886 [DEBUG] [Thread-26494] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:03:13.886 [DEBUG] [Thread-26494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:03:13.886 [DEBUG] [Thread-26494] [transport.py] [_log()] Compression: none
2026-04-15T22:03:13.886 [DEBUG] [Thread-26494] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:03:13.903 [DEBUG] [Thread-26494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:03:13.903 [DEBUG] [Thread-26494] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:03:13.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:03:13.904 [DEBUG] [Thread-26494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:03:13.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:03:13.905 [DEBUG] [Thread-26494] [transport.py] [_log()] userauth is OK
2026-04-15T22:03:13.905 [DEBUG] [Thread-26494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:03:13.905 [DEBUG] [Thread-26494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:03:13.905 [DEBUG] [Thread-26494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:03:13.905 [DEBUG] [Thread-26494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:03:13.929 [INFO] [Thread-26494] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:03:13.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:03:14.713 [DEBUG] [Thread-26494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:03:14.713 [DEBUG] [Thread-26494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:03:14.714 [DEBUG] [Thread-26494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:03:14.754 [DEBUG] [Thread-26494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:03:14.754 [DEBUG] [Thread-26494] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:03:14.757 [DEBUG] [Thread-26494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:03:14.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:03:14.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:03:14.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:03:14.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:03:14.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:03:14.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:03:14.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:03:14.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:03:14.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:03:14.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.835200 -999.00  +10.00   4.85     78   +6.40 1 1 1 1 1     0    0 3.63 -4.53 ZNESW 5.1 4.8 113.6 6.4 10.4 -25.1 10.3 -23.8 10.1 -22.0 10.3 -23.9
2026-04-15T22:03:14.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:03:14.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:03:14.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.835200
2026-04-15T22:03:14.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:03:14.777 [DEBUG] [Thread-26494] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:03:14.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:03:14.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:03:14.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:03:14.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:03:14.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:02:48', tmtdew=3.80732, humidity=77.0739, cloud=0.0, wind=11.011, temperature=9.4892, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:02:41.280', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.016750000000000043, -0.040749999999999176, -0.08050000000000068, -0.05250000000000021, 0.01025000000000098, -0.005000000000000782, 0.005250000000000199, 0.013499999999998735, -0.06400000000000006, -0.04075000000000095, -0.0389999999999997, -0.0015000000000000568, 0.003249999999999531, -0.008000000000000895, -0.0005000000000006111, 0.04824999999999946, -0.0235000000000003, -0.0035000000000007248, 0.004249999999998977, 0.030999999999998806, 0.029749999999999943, -0.0037499999999983658, 0.007250000000000867, 0.011499999999999844, -0.05250000000000021, 0.0002500000000011937, 0.015499999999999403, 0.04800000000000004, -0.012999999999998124, 0.08000000000000185, 0.017000000000001236, -0.02325000000000088], zp_timestamp='2026-04-15T20:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:03:14.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:03:15.007 [DEBUG] [Thread-26497] [transport.py] [_log()] starting thread (client mode): 0xee95ea10
2026-04-15T22:03:15.008 [DEBUG] [Thread-26497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:03:15.022 [DEBUG] [Thread-26497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:03:15.022 [INFO] [Thread-26497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:03:15.029 [DEBUG] [Thread-26497] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:03:15.029 [DEBUG] [Thread-26497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:03:15.029 [DEBUG] [Thread-26497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:03:15.029 [DEBUG] [Thread-26497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:03:15.029 [DEBUG] [Thread-26497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:03:15.029 [DEBUG] [Thread-26497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:03:15.030 [DEBUG] [Thread-26497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:03:15.030 [DEBUG] [Thread-26497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:03:15.030 [DEBUG] [Thread-26497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:03:15.030 [DEBUG] [Thread-26497] [transport.py] [_log()] client lang: <none>
2026-04-15T22:03:15.030 [DEBUG] [Thread-26497] [transport.py] [_log()] server lang: <none>
2026-04-15T22:03:15.030 [DEBUG] [Thread-26497] [transport.py] [_log()] kex follows: False
2026-04-15T22:03:15.030 [DEBUG] [Thread-26497] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:03:15.030 [DEBUG] [Thread-26497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:03:15.031 [DEBUG] [Thread-26497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:03:15.031 [DEBUG] [Thread-26497] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:03:15.031 [DEBUG] [Thread-26497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:03:15.031 [DEBUG] [Thread-26497] [transport.py] [_log()] Compression: none
2026-04-15T22:03:15.031 [DEBUG] [Thread-26497] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:03:15.088 [DEBUG] [Thread-26497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:03:15.088 [DEBUG] [Thread-26497] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:03:15.089 [DEBUG] [Thread-26497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:03:15.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:03:15.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:03:15.123 [DEBUG] [Thread-26499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:03:15.145 [DEBUG] [Thread-26497] [transport.py] [_log()] userauth is OK
2026-04-15T22:03:15.145 [DEBUG] [Thread-26497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:03:15.145 [DEBUG] [Thread-26497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:03:15.145 [DEBUG] [Thread-26497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:03:15.145 [DEBUG] [Thread-26497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:03:15.164 [INFO] [Thread-26497] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:03:15.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:03:15.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:03:15.978 [DEBUG] [Thread-26497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:03:15.978 [DEBUG] [Thread-26497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:03:16.025 [DEBUG] [Thread-26497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:03:16.025 [DEBUG] [Thread-26497] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:03:16.034 [DEBUG] [Thread-26497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:03:16.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:03:16.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')
2026-04-15T22:03:16.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') -> 00000000
2026-04-15T22:03:16.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:03:16.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:03:16.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:03:16.067 [DEBUG] [Thread-26497] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:03:23.032 [DEBUG] [Thread-26500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:03:28.838 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:03:30.171 [DEBUG] [Thread-26501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:03:33.232 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:03:39.346 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:03:43.717 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:03:45.200 [DEBUG] [Thread-26502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:03:46.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:03:46.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:03:46.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
2026-04-15T22:03:47.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 3, 24), 4.09125, 75.6033, 0.0, 9.0702, 9.5946, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:03:47.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:03:24
2026-04-15T22:03:47.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:03:48.231 [DEBUG] [Thread-26503] [transport.py] [_log()] starting thread (client mode): 0xf13e0520
2026-04-15T22:03:48.231 [DEBUG] [Thread-26503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:03:48.251 [DEBUG] [Thread-26503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:03:48.251 [INFO] [Thread-26503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:03:48.254 [DEBUG] [Thread-26503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:03:48.254 [DEBUG] [Thread-26503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:03:48.254 [DEBUG] [Thread-26503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:03:48.254 [DEBUG] [Thread-26503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:03:48.254 [DEBUG] [Thread-26503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:03:48.255 [DEBUG] [Thread-26503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:03:48.255 [DEBUG] [Thread-26503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:03:48.255 [DEBUG] [Thread-26503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:03:48.255 [DEBUG] [Thread-26503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:03:48.255 [DEBUG] [Thread-26503] [transport.py] [_log()] client lang: <none>
2026-04-15T22:03:48.255 [DEBUG] [Thread-26503] [transport.py] [_log()] server lang: <none>
2026-04-15T22:03:48.255 [DEBUG] [Thread-26503] [transport.py] [_log()] kex follows: False
2026-04-15T22:03:48.255 [DEBUG] [Thread-26503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:03:48.255 [DEBUG] [Thread-26503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:03:48.255 [DEBUG] [Thread-26503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:03:48.255 [DEBUG] [Thread-26503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:03:48.255 [DEBUG] [Thread-26503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:03:48.256 [DEBUG] [Thread-26503] [transport.py] [_log()] Compression: none
2026-04-15T22:03:48.256 [DEBUG] [Thread-26503] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:03:48.275 [DEBUG] [Thread-26503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:03:48.275 [DEBUG] [Thread-26503] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:03:48.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:03:48.276 [DEBUG] [Thread-26503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:03:48.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:03:48.316 [DEBUG] [Thread-26503] [transport.py] [_log()] userauth is OK
2026-04-15T22:03:48.316 [DEBUG] [Thread-26503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:03:48.317 [DEBUG] [Thread-26503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:03:48.317 [DEBUG] [Thread-26503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:03:48.317 [DEBUG] [Thread-26503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:03:48.354 [INFO] [Thread-26503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:03:48.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:03:49.121 [DEBUG] [Thread-26503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:03:49.121 [DEBUG] [Thread-26503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:03:49.122 [DEBUG] [Thread-26503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:03:49.161 [DEBUG] [Thread-26503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:03:49.161 [DEBUG] [Thread-26503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:03:49.163 [DEBUG] [Thread-26503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:03:49.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:03:49.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:03:49.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:03:49.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:03:49.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:03:49.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:03:49.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:03:49.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:03:49.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:03:49.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.835547 -999.00   +9.90   5.24     78   +6.40 1 1 1 1 1     0    0 3.58 -6.22 ZNESW 6.0 5.2 120.2 8.3 10.4 -25.3 10.3 -23.9 10.0 -21.6 10.3 -24.1
2026-04-15T22:03:49.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:03:49.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:03:49.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.835547
2026-04-15T22:03:49.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:03:49.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:03:49.183 [DEBUG] [Thread-26503] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:03:49.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:03:49.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:03:49.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:03:49.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:03:24', tmtdew=4.09125, humidity=75.6033, cloud=0.0, wind=9.0702, temperature=9.5946, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:03:11.261', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.016750000000000043, -0.040749999999999176, -0.08050000000000068, -0.05250000000000021, 0.01025000000000098, -0.005000000000000782, 0.005250000000000199, 0.013499999999998735, -0.06400000000000006, -0.04075000000000095, -0.0389999999999997, -0.0015000000000000568, 0.003249999999999531, -0.008000000000000895, -0.0005000000000006111, 0.04824999999999946, -0.0235000000000003, -0.0035000000000007248, 0.004249999999998977, 0.030999999999998806, 0.029749999999999943, -0.0037499999999983658, 0.007250000000000867, 0.011499999999999844, -0.05250000000000021, 0.0002500000000011937, 0.015499999999999403, 0.04800000000000004, -0.012999999999998124, 0.08000000000000185, 0.017000000000001236, -0.02325000000000088], zp_timestamp='2026-04-15T20:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:03:49.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:03:49.394 [DEBUG] [Thread-26506] [transport.py] [_log()] starting thread (client mode): 0xf13e2920
2026-04-15T22:03:49.394 [DEBUG] [Thread-26506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:03:49.409 [DEBUG] [Thread-26506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:03:49.409 [INFO] [Thread-26506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:03:49.419 [DEBUG] [Thread-26506] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:03:49.419 [DEBUG] [Thread-26506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:03:49.419 [DEBUG] [Thread-26506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:03:49.419 [DEBUG] [Thread-26506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:03:49.419 [DEBUG] [Thread-26506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:03:49.419 [DEBUG] [Thread-26506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:03:49.419 [DEBUG] [Thread-26506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:03:49.419 [DEBUG] [Thread-26506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:03:49.419 [DEBUG] [Thread-26506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:03:49.419 [DEBUG] [Thread-26506] [transport.py] [_log()] client lang: <none>
2026-04-15T22:03:49.419 [DEBUG] [Thread-26506] [transport.py] [_log()] server lang: <none>
2026-04-15T22:03:49.419 [DEBUG] [Thread-26506] [transport.py] [_log()] kex follows: False
2026-04-15T22:03:49.420 [DEBUG] [Thread-26506] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:03:49.420 [DEBUG] [Thread-26506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:03:49.420 [DEBUG] [Thread-26506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:03:49.420 [DEBUG] [Thread-26506] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:03:49.420 [DEBUG] [Thread-26506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:03:49.420 [DEBUG] [Thread-26506] [transport.py] [_log()] Compression: none
2026-04-15T22:03:49.420 [DEBUG] [Thread-26506] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:03:49.477 [DEBUG] [Thread-26506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:03:49.477 [DEBUG] [Thread-26506] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:03:49.477 [DEBUG] [Thread-26506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:03:49.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:03:49.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:03:49.535 [DEBUG] [Thread-26506] [transport.py] [_log()] userauth is OK
2026-04-15T22:03:49.535 [DEBUG] [Thread-26506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:03:49.535 [DEBUG] [Thread-26506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:03:49.535 [DEBUG] [Thread-26506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:03:49.535 [DEBUG] [Thread-26506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:03:49.553 [INFO] [Thread-26506] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:03:49.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:03:49.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:03:50.405 [DEBUG] [Thread-26506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:03:50.405 [DEBUG] [Thread-26506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:03:50.453 [DEBUG] [Thread-26506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:03:50.453 [DEBUG] [Thread-26506] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:03:50.462 [DEBUG] [Thread-26506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:03:50.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:03:50.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')
2026-04-15T22:03:50.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') -> 00000000
2026-04-15T22:03:50.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:03:50.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:03:50.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:03:50.499 [DEBUG] [Thread-26506] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:03:55.904 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:03:55.904 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:04:00.230 [DEBUG] [Thread-26508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:04:15.276 [DEBUG] [Thread-26509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:04:20.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:04:20.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:04:20.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
2026-04-15T22:04:21.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 3, 59), 4.12789, 75.6696, 0.0, 7.0056, 9.61141, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:04:21.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:03:59
2026-04-15T22:04:22.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:04:22.653 [DEBUG] [Thread-26510] [transport.py] [_log()] starting thread (client mode): 0xf13e2cb0
2026-04-15T22:04:22.653 [DEBUG] [Thread-26510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:04:22.672 [DEBUG] [Thread-26510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:04:22.672 [INFO] [Thread-26510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:04:22.676 [DEBUG] [Thread-26510] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:04:22.676 [DEBUG] [Thread-26510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:04:22.676 [DEBUG] [Thread-26510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:04:22.676 [DEBUG] [Thread-26510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:04:22.676 [DEBUG] [Thread-26510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:04:22.676 [DEBUG] [Thread-26510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:04:22.676 [DEBUG] [Thread-26510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:04:22.676 [DEBUG] [Thread-26510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:04:22.677 [DEBUG] [Thread-26510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:04:22.677 [DEBUG] [Thread-26510] [transport.py] [_log()] client lang: <none>
2026-04-15T22:04:22.677 [DEBUG] [Thread-26510] [transport.py] [_log()] server lang: <none>
2026-04-15T22:04:22.677 [DEBUG] [Thread-26510] [transport.py] [_log()] kex follows: False
2026-04-15T22:04:22.677 [DEBUG] [Thread-26510] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:04:22.677 [DEBUG] [Thread-26510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:04:22.677 [DEBUG] [Thread-26510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:04:22.677 [DEBUG] [Thread-26510] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:04:22.677 [DEBUG] [Thread-26510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:04:22.677 [DEBUG] [Thread-26510] [transport.py] [_log()] Compression: none
2026-04-15T22:04:22.677 [DEBUG] [Thread-26510] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:04:22.699 [DEBUG] [Thread-26510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:04:22.699 [DEBUG] [Thread-26510] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:04:22.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:04:22.700 [DEBUG] [Thread-26510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:04:22.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:04:22.701 [DEBUG] [Thread-26510] [transport.py] [_log()] userauth is OK
2026-04-15T22:04:22.701 [DEBUG] [Thread-26510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:04:22.701 [DEBUG] [Thread-26510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:04:22.701 [DEBUG] [Thread-26510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:04:22.701 [DEBUG] [Thread-26510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:04:22.724 [INFO] [Thread-26510] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:04:22.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:04:23.185 [DEBUG] [Thread-26512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:04:23.485 [DEBUG] [Thread-26510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:04:23.485 [DEBUG] [Thread-26510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:04:23.486 [DEBUG] [Thread-26510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:04:23.526 [DEBUG] [Thread-26510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:04:23.526 [DEBUG] [Thread-26510] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:04:23.529 [DEBUG] [Thread-26510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:04:23.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:04:23.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:04:23.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:04:23.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:04:23.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:04:23.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:04:23.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:04:23.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:04:23.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:04:23.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.835894 -999.00   +9.90   5.75     78   +6.40 1 1 1 1 1     0    0 3.53 -8.07 ZNESW 4.9 5.8 85.6 8.3 10.4 -25.1 10.3 -23.9 10.1 -21.8 10.3 -24.0
2026-04-15T22:04:23.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:04:23.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:04:23.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.835894
2026-04-15T22:04:23.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:04:23.553 [DEBUG] [Thread-26510] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:04:23.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:04:23.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:04:23.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:04:23.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:04:23.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:03:59', tmtdew=4.12789, humidity=75.6696, cloud=0.0, wind=7.0056, temperature=9.61141, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:03:41.242', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.016750000000000043, -0.040749999999999176, -0.08050000000000068, -0.05250000000000021, 0.01025000000000098, -0.005000000000000782, 0.005250000000000199, 0.013499999999998735, -0.06400000000000006, -0.04075000000000095, -0.0389999999999997, -0.0015000000000000568, 0.003249999999999531, -0.008000000000000895, -0.0005000000000006111, 0.04824999999999946, -0.0235000000000003, -0.0035000000000007248, 0.004249999999998977, 0.030999999999998806, 0.029749999999999943, -0.0037499999999983658, 0.007250000000000867, 0.011499999999999844, -0.05250000000000021, 0.0002500000000011937, 0.015499999999999403, 0.04800000000000004, -0.012999999999998124, 0.08000000000000185, 0.017000000000001236, -0.02325000000000088], zp_timestamp='2026-04-15T20:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:04:23.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:04:23.815 [DEBUG] [Thread-26514] [transport.py] [_log()] starting thread (client mode): 0xf13c8970
2026-04-15T22:04:23.815 [DEBUG] [Thread-26514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:04:23.829 [DEBUG] [Thread-26514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:04:23.829 [INFO] [Thread-26514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:04:23.836 [DEBUG] [Thread-26514] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:04:23.837 [DEBUG] [Thread-26514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:04:23.837 [DEBUG] [Thread-26514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:04:23.837 [DEBUG] [Thread-26514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:04:23.837 [DEBUG] [Thread-26514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:04:23.837 [DEBUG] [Thread-26514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:04:23.837 [DEBUG] [Thread-26514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:04:23.837 [DEBUG] [Thread-26514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:04:23.837 [DEBUG] [Thread-26514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:04:23.837 [DEBUG] [Thread-26514] [transport.py] [_log()] client lang: <none>
2026-04-15T22:04:23.837 [DEBUG] [Thread-26514] [transport.py] [_log()] server lang: <none>
2026-04-15T22:04:23.837 [DEBUG] [Thread-26514] [transport.py] [_log()] kex follows: False
2026-04-15T22:04:23.837 [DEBUG] [Thread-26514] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:04:23.837 [DEBUG] [Thread-26514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:04:23.837 [DEBUG] [Thread-26514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:04:23.837 [DEBUG] [Thread-26514] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:04:23.838 [DEBUG] [Thread-26514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:04:23.838 [DEBUG] [Thread-26514] [transport.py] [_log()] Compression: none
2026-04-15T22:04:23.838 [DEBUG] [Thread-26514] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:04:23.892 [DEBUG] [Thread-26514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:04:23.892 [DEBUG] [Thread-26514] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:04:23.893 [DEBUG] [Thread-26514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:04:23.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:04:23.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:04:23.949 [DEBUG] [Thread-26514] [transport.py] [_log()] userauth is OK
2026-04-15T22:04:23.950 [DEBUG] [Thread-26514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:04:23.950 [DEBUG] [Thread-26514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:04:23.950 [DEBUG] [Thread-26514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:04:23.950 [DEBUG] [Thread-26514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:04:23.973 [INFO] [Thread-26514] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:04:23.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:04:23.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:04:24.841 [DEBUG] [Thread-26514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:04:24.841 [DEBUG] [Thread-26514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:04:24.891 [DEBUG] [Thread-26514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:04:24.891 [DEBUG] [Thread-26514] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:04:24.903 [DEBUG] [Thread-26514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:04:24.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:04:24.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')
2026-04-15T22:04:24.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
2026-04-15T22:04:24.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:04:24.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:04:24.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:04:24.943 [DEBUG] [Thread-26514] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:04:30.307 [DEBUG] [Thread-26516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:04:45.359 [DEBUG] [Thread-26517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:04:52.189 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:04:54.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:04:54.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:04:54.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
2026-04-15T22:04:56.105 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:04:56.107 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:04:56.280 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:04:56.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 4, 35), 3.70729, 77.6047, 0.0, 9.67032, 9.45599, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:04:56.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:04:35
2026-04-15T22:04:56.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:04:57.174 [DEBUG] [Thread-26518] [transport.py] [_log()] starting thread (client mode): 0xee9c1480
2026-04-15T22:04:57.174 [DEBUG] [Thread-26518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:04:57.197 [DEBUG] [Thread-26518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:04:57.197 [INFO] [Thread-26518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:04:57.200 [DEBUG] [Thread-26518] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:04:57.200 [DEBUG] [Thread-26518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:04:57.201 [DEBUG] [Thread-26518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:04:57.201 [DEBUG] [Thread-26518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:04:57.201 [DEBUG] [Thread-26518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:04:57.201 [DEBUG] [Thread-26518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:04:57.201 [DEBUG] [Thread-26518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:04:57.201 [DEBUG] [Thread-26518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:04:57.201 [DEBUG] [Thread-26518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:04:57.201 [DEBUG] [Thread-26518] [transport.py] [_log()] client lang: <none>
2026-04-15T22:04:57.201 [DEBUG] [Thread-26518] [transport.py] [_log()] server lang: <none>
2026-04-15T22:04:57.201 [DEBUG] [Thread-26518] [transport.py] [_log()] kex follows: False
2026-04-15T22:04:57.202 [DEBUG] [Thread-26518] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:04:57.202 [DEBUG] [Thread-26518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:04:57.202 [DEBUG] [Thread-26518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:04:57.202 [DEBUG] [Thread-26518] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:04:57.202 [DEBUG] [Thread-26518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:04:57.202 [DEBUG] [Thread-26518] [transport.py] [_log()] Compression: none
2026-04-15T22:04:57.202 [DEBUG] [Thread-26518] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:04:57.218 [DEBUG] [Thread-26518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:04:57.219 [DEBUG] [Thread-26518] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:04:57.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:04:57.219 [DEBUG] [Thread-26518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:04:57.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:04:57.220 [DEBUG] [Thread-26518] [transport.py] [_log()] userauth is OK
2026-04-15T22:04:57.220 [DEBUG] [Thread-26518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:04:57.220 [DEBUG] [Thread-26518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:04:57.220 [DEBUG] [Thread-26518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:04:57.220 [DEBUG] [Thread-26518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:04:57.236 [INFO] [Thread-26518] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:04:57.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:04:58.006 [DEBUG] [Thread-26518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:04:58.006 [DEBUG] [Thread-26518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:04:58.007 [DEBUG] [Thread-26518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:04:58.047 [DEBUG] [Thread-26518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:04:58.047 [DEBUG] [Thread-26518] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:04:58.050 [DEBUG] [Thread-26518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:04:58.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:04:58.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:04:58.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:04:58.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:04:58.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:04:58.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:04:58.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:04:58.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:04:58.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:04:58.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.836241 -999.00   +9.90   5.48     78   +6.40 1 1 1 1 1     0    0 3.49 -9.57 ZNESW 5.5 5.5 83.2 7.3 10.4 -25.1 10.3 -23.9 10.0 -21.8 10.3 -23.9
2026-04-15T22:04:58.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:04:58.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:04:58.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.836241
2026-04-15T22:04:58.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:04:58.077 [DEBUG] [Thread-26518] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:04:58.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:04:58.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:04:58.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:04:58.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:04:58.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:04:35', tmtdew=3.70729, humidity=77.6047, cloud=0.0, wind=9.67032, temperature=9.45599, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:04:11.222', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.016750000000000043, -0.040749999999999176, -0.08050000000000068, -0.05250000000000021, 0.01025000000000098, -0.005000000000000782, 0.005250000000000199, 0.013499999999998735, -0.06400000000000006, -0.04075000000000095, -0.0389999999999997, -0.0015000000000000568, 0.003249999999999531, -0.008000000000000895, -0.0005000000000006111, 0.04824999999999946, -0.0235000000000003, -0.0035000000000007248, 0.004249999999998977, 0.030999999999998806, 0.029749999999999943, -0.0037499999999983658, 0.007250000000000867, 0.011499999999999844, -0.05250000000000021, 0.0002500000000011937, 0.015499999999999403, 0.04800000000000004, -0.012999999999998124, 0.08000000000000185, 0.017000000000001236, -0.02325000000000088], zp_timestamp='2026-04-15T20:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:04:58.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:04:58.307 [DEBUG] [Thread-26521] [transport.py] [_log()] starting thread (client mode): 0xf13e20e0
2026-04-15T22:04:58.307 [DEBUG] [Thread-26521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:04:58.321 [DEBUG] [Thread-26521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:04:58.321 [INFO] [Thread-26521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:04:58.329 [DEBUG] [Thread-26521] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:04:58.329 [DEBUG] [Thread-26521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:04:58.329 [DEBUG] [Thread-26521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:04:58.329 [DEBUG] [Thread-26521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:04:58.329 [DEBUG] [Thread-26521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:04:58.329 [DEBUG] [Thread-26521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:04:58.329 [DEBUG] [Thread-26521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:04:58.329 [DEBUG] [Thread-26521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:04:58.329 [DEBUG] [Thread-26521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:04:58.329 [DEBUG] [Thread-26521] [transport.py] [_log()] client lang: <none>
2026-04-15T22:04:58.330 [DEBUG] [Thread-26521] [transport.py] [_log()] server lang: <none>
2026-04-15T22:04:58.330 [DEBUG] [Thread-26521] [transport.py] [_log()] kex follows: False
2026-04-15T22:04:58.330 [DEBUG] [Thread-26521] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:04:58.330 [DEBUG] [Thread-26521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:04:58.330 [DEBUG] [Thread-26521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:04:58.330 [DEBUG] [Thread-26521] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:04:58.330 [DEBUG] [Thread-26521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:04:58.330 [DEBUG] [Thread-26521] [transport.py] [_log()] Compression: none
2026-04-15T22:04:58.330 [DEBUG] [Thread-26521] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:04:58.389 [DEBUG] [Thread-26521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:04:58.389 [DEBUG] [Thread-26521] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:04:58.389 [DEBUG] [Thread-26521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:04:58.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:04:58.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:04:58.444 [DEBUG] [Thread-26521] [transport.py] [_log()] userauth is OK
2026-04-15T22:04:58.444 [DEBUG] [Thread-26521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:04:58.445 [DEBUG] [Thread-26521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:04:58.445 [DEBUG] [Thread-26521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:04:58.445 [DEBUG] [Thread-26521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:04:58.470 [INFO] [Thread-26521] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:04:58.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:04:58.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:04:59.305 [DEBUG] [Thread-26521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:04:59.305 [DEBUG] [Thread-26521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:04:59.352 [DEBUG] [Thread-26521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:04:59.353 [DEBUG] [Thread-26521] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:04:59.361 [DEBUG] [Thread-26521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:04:59.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:04:59.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')
2026-04-15T22:04:59.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') -> 00000000
2026-04-15T22:04:59.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:04:59.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:04:59.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:04:59.392 [DEBUG] [Thread-26521] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:05:00.387 [DEBUG] [Thread-26523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:05:15.432 [DEBUG] [Thread-26524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:05:23.339 [DEBUG] [Thread-26525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:05:29.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:05:29.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:05:29.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
2026-04-15T22:05:30.463 [DEBUG] [Thread-26526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:05:30.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 5, 10), 4.09392, 75.3521, 0.0, 6.81156, 9.61139, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:05:30.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:05:10
2026-04-15T22:05:31.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:05:31.565 [DEBUG] [Thread-26527] [transport.py] [_log()] starting thread (client mode): 0xf13c92d0
2026-04-15T22:05:31.565 [DEBUG] [Thread-26527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:05:31.585 [DEBUG] [Thread-26527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:05:31.585 [INFO] [Thread-26527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:05:31.588 [DEBUG] [Thread-26527] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:05:31.588 [DEBUG] [Thread-26527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:05:31.588 [DEBUG] [Thread-26527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:05:31.588 [DEBUG] [Thread-26527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:05:31.588 [DEBUG] [Thread-26527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:05:31.588 [DEBUG] [Thread-26527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:05:31.588 [DEBUG] [Thread-26527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:05:31.588 [DEBUG] [Thread-26527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:05:31.589 [DEBUG] [Thread-26527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:05:31.589 [DEBUG] [Thread-26527] [transport.py] [_log()] client lang: <none>
2026-04-15T22:05:31.589 [DEBUG] [Thread-26527] [transport.py] [_log()] server lang: <none>
2026-04-15T22:05:31.589 [DEBUG] [Thread-26527] [transport.py] [_log()] kex follows: False
2026-04-15T22:05:31.589 [DEBUG] [Thread-26527] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:05:31.589 [DEBUG] [Thread-26527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:05:31.589 [DEBUG] [Thread-26527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:05:31.589 [DEBUG] [Thread-26527] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:05:31.589 [DEBUG] [Thread-26527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:05:31.589 [DEBUG] [Thread-26527] [transport.py] [_log()] Compression: none
2026-04-15T22:05:31.589 [DEBUG] [Thread-26527] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:05:31.606 [DEBUG] [Thread-26527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:05:31.607 [DEBUG] [Thread-26527] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:05:31.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:05:31.607 [DEBUG] [Thread-26527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:05:31.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:05:31.608 [DEBUG] [Thread-26527] [transport.py] [_log()] userauth is OK
2026-04-15T22:05:31.608 [DEBUG] [Thread-26527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:05:31.608 [DEBUG] [Thread-26527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:05:31.609 [DEBUG] [Thread-26527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:05:31.609 [DEBUG] [Thread-26527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:05:31.633 [INFO] [Thread-26527] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:05:31.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:05:33.194 [DEBUG] [Thread-26527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:05:33.195 [DEBUG] [Thread-26527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:05:33.195 [DEBUG] [Thread-26527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:05:33.235 [DEBUG] [Thread-26527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:05:33.235 [DEBUG] [Thread-26527] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:05:33.238 [DEBUG] [Thread-26527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:05:33.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:05:33.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:05:33.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:05:33.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:05:33.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:05:33.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:05:33.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:05:33.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:05:33.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:05:33.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.836588 -999.00   +9.90   5.64     78   +6.40 1 1 1 1 1     0    0 3.51 -11.56 ZNESW 8.0 5.6 79.0 8.1 10.4 -25.3 10.3 -23.9 10.0 -21.9 10.3 -23.8
2026-04-15T22:05:33.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:05:33.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:05:33.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.836588
2026-04-15T22:05:33.261 [DEBUG] [Thread-26527] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:05:33.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:05:33.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:05:33.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:05:33.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:05:33.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:05:33.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:05:10', tmtdew=4.09392, humidity=75.3521, cloud=0.0, wind=6.81156, temperature=9.61139, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:04:41.203', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.0182500000000001, -0.031749999999998835, -0.06600000000000072, -0.027499999999999858, 0.015750000000000597, -0.0010000000000012221, 0.038750000000000284, 0.02549999999999919, -0.024499999999999744, -0.03175000000000061, -0.01699999999999946, 0.007999999999999119, 0.025249999999999773, -0.005500000000001393, 0.006499999999999062, 0.04224999999999923, -0.03550000000000075, 0.0, 0.01124999999999865, 0.03749999999999787, 0.018749999999998934, 0.03825000000000145, 0.006249999999999645, 0.041999999999999815, -0.027499999999999858, 0.005250000000000199, 0.04049999999999976, 0.04899999999999949, 0.04600000000000115, 0.07900000000000063, 0.027499999999999858, -0.005250000000000199], zp_timestamp='2026-04-15T20:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:05:33.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:05:33.517 [DEBUG] [Thread-26530] [transport.py] [_log()] starting thread (client mode): 0xf13e0670
2026-04-15T22:05:33.517 [DEBUG] [Thread-26530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:05:33.533 [DEBUG] [Thread-26530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:05:33.533 [INFO] [Thread-26530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:05:33.543 [DEBUG] [Thread-26530] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:05:33.543 [DEBUG] [Thread-26530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:05:33.543 [DEBUG] [Thread-26530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:05:33.544 [DEBUG] [Thread-26530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:05:33.544 [DEBUG] [Thread-26530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:05:33.544 [DEBUG] [Thread-26530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:05:33.544 [DEBUG] [Thread-26530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:05:33.544 [DEBUG] [Thread-26530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:05:33.544 [DEBUG] [Thread-26530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:05:33.544 [DEBUG] [Thread-26530] [transport.py] [_log()] client lang: <none>
2026-04-15T22:05:33.544 [DEBUG] [Thread-26530] [transport.py] [_log()] server lang: <none>
2026-04-15T22:05:33.544 [DEBUG] [Thread-26530] [transport.py] [_log()] kex follows: False
2026-04-15T22:05:33.544 [DEBUG] [Thread-26530] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:05:33.544 [DEBUG] [Thread-26530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:05:33.544 [DEBUG] [Thread-26530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:05:33.544 [DEBUG] [Thread-26530] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:05:33.545 [DEBUG] [Thread-26530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:05:33.545 [DEBUG] [Thread-26530] [transport.py] [_log()] Compression: none
2026-04-15T22:05:33.545 [DEBUG] [Thread-26530] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:05:33.604 [DEBUG] [Thread-26530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:05:33.604 [DEBUG] [Thread-26530] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:05:33.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:05:33.605 [DEBUG] [Thread-26530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:05:33.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:05:33.664 [DEBUG] [Thread-26530] [transport.py] [_log()] userauth is OK
2026-04-15T22:05:33.664 [DEBUG] [Thread-26530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:05:33.664 [DEBUG] [Thread-26530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:05:33.664 [DEBUG] [Thread-26530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:05:33.664 [DEBUG] [Thread-26530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:05:33.682 [INFO] [Thread-26530] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:05:33.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:05:33.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:05:34.514 [DEBUG] [Thread-26530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:05:34.515 [DEBUG] [Thread-26530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:05:34.562 [DEBUG] [Thread-26530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:05:34.562 [DEBUG] [Thread-26530] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:05:34.571 [DEBUG] [Thread-26530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:05:34.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:05:34.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')
2026-04-15T22:05:34.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') -> 00000000
2026-04-15T22:05:34.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:05:34.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:05:34.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:05:34.603 [DEBUG] [Thread-26530] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:05:45.493 [DEBUG] [Thread-26532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:05:56.311 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:05:56.311 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:06:00.537 [DEBUG] [Thread-26533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:06:04.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:06:04.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:06:04.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
2026-04-15T22:06:05.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 5, 46), 3.65613, 77.8701, 0.0, 10.3406, 9.38961, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:06:05.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:05:46
2026-04-15T22:06:06.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:06:06.725 [DEBUG] [Thread-26534] [transport.py] [_log()] starting thread (client mode): 0xee907c70
2026-04-15T22:06:06.725 [DEBUG] [Thread-26534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:06:06.744 [DEBUG] [Thread-26534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:06:06.744 [INFO] [Thread-26534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:06:06.747 [DEBUG] [Thread-26534] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:06:06.748 [DEBUG] [Thread-26534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:06:06.748 [DEBUG] [Thread-26534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:06:06.748 [DEBUG] [Thread-26534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:06:06.748 [DEBUG] [Thread-26534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:06:06.748 [DEBUG] [Thread-26534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:06:06.748 [DEBUG] [Thread-26534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:06:06.748 [DEBUG] [Thread-26534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:06:06.748 [DEBUG] [Thread-26534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:06:06.748 [DEBUG] [Thread-26534] [transport.py] [_log()] client lang: <none>
2026-04-15T22:06:06.748 [DEBUG] [Thread-26534] [transport.py] [_log()] server lang: <none>
2026-04-15T22:06:06.749 [DEBUG] [Thread-26534] [transport.py] [_log()] kex follows: False
2026-04-15T22:06:06.749 [DEBUG] [Thread-26534] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:06:06.749 [DEBUG] [Thread-26534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:06:06.749 [DEBUG] [Thread-26534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:06:06.749 [DEBUG] [Thread-26534] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:06:06.749 [DEBUG] [Thread-26534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:06:06.749 [DEBUG] [Thread-26534] [transport.py] [_log()] Compression: none
2026-04-15T22:06:06.749 [DEBUG] [Thread-26534] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:06:06.767 [DEBUG] [Thread-26534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:06:06.767 [DEBUG] [Thread-26534] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:06:06.768 [DEBUG] [Thread-26534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:06:06.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:06:06.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:06:06.769 [DEBUG] [Thread-26534] [transport.py] [_log()] userauth is OK
2026-04-15T22:06:06.770 [DEBUG] [Thread-26534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:06:06.770 [DEBUG] [Thread-26534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:06:06.770 [DEBUG] [Thread-26534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:06:06.770 [DEBUG] [Thread-26534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:06:06.788 [INFO] [Thread-26534] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:06:06.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:06:07.552 [DEBUG] [Thread-26534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:06:07.553 [DEBUG] [Thread-26534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:06:07.553 [DEBUG] [Thread-26534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:06:07.593 [DEBUG] [Thread-26534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:06:07.593 [DEBUG] [Thread-26534] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:06:07.596 [DEBUG] [Thread-26534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:06:07.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:06:07.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:06:07.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:06:07.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:06:07.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:06:07.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:06:07.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:06:07.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:06:07.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:06:07.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.837283 -999.00   +9.90   5.38     79   +6.40 1 1 1 1 1     0    0 3.30 -17.01 ZNESW 2.9 5.4 117.6 6.6 10.4 -25.2 10.3 -23.9 10.0 -21.9 10.3 -23.7
2026-04-15T22:06:07.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:06:07.622 [DEBUG] [Thread-26534] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:06:07.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:06:07.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.837283
2026-04-15T22:06:07.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:06:07.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:06:07.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:06:07.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:06:07.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:06:07.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:05:46', tmtdew=3.65613, humidity=77.8701, cloud=0.0, wind=10.3406, temperature=9.38961, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:05:41.251', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.0182500000000001, -0.031749999999998835, -0.06600000000000072, -0.027499999999999858, 0.015750000000000597, -0.0010000000000012221, 0.038750000000000284, 0.02549999999999919, -0.024499999999999744, -0.03175000000000061, -0.01699999999999946, 0.007999999999999119, 0.025249999999999773, -0.005500000000001393, 0.006499999999999062, 0.04224999999999923, -0.03550000000000075, 0.0, 0.01124999999999865, 0.03749999999999787, 0.018749999999998934, 0.03825000000000145, 0.006249999999999645, 0.041999999999999815, -0.027499999999999858, 0.005250000000000199, 0.04049999999999976, 0.04899999999999949, 0.04600000000000115, 0.07900000000000063, 0.027499999999999858, -0.005250000000000199], zp_timestamp='2026-04-15T20:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:06:07.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:06:07.901 [DEBUG] [Thread-26537] [transport.py] [_log()] starting thread (client mode): 0xee990ee0
2026-04-15T22:06:07.901 [DEBUG] [Thread-26537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:06:07.915 [DEBUG] [Thread-26537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:06:07.915 [INFO] [Thread-26537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:06:07.922 [DEBUG] [Thread-26537] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:06:07.922 [DEBUG] [Thread-26537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:06:07.922 [DEBUG] [Thread-26537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:06:07.922 [DEBUG] [Thread-26537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:06:07.923 [DEBUG] [Thread-26537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:06:07.923 [DEBUG] [Thread-26537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:06:07.923 [DEBUG] [Thread-26537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:06:07.923 [DEBUG] [Thread-26537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:06:07.923 [DEBUG] [Thread-26537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:06:07.923 [DEBUG] [Thread-26537] [transport.py] [_log()] client lang: <none>
2026-04-15T22:06:07.923 [DEBUG] [Thread-26537] [transport.py] [_log()] server lang: <none>
2026-04-15T22:06:07.923 [DEBUG] [Thread-26537] [transport.py] [_log()] kex follows: False
2026-04-15T22:06:07.923 [DEBUG] [Thread-26537] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:06:07.923 [DEBUG] [Thread-26537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:06:07.923 [DEBUG] [Thread-26537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:06:07.923 [DEBUG] [Thread-26537] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:06:07.923 [DEBUG] [Thread-26537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:06:07.923 [DEBUG] [Thread-26537] [transport.py] [_log()] Compression: none
2026-04-15T22:06:07.923 [DEBUG] [Thread-26537] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:06:07.980 [DEBUG] [Thread-26537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:06:07.980 [DEBUG] [Thread-26537] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:06:07.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:06:07.981 [DEBUG] [Thread-26537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:06:07.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:06:08.040 [DEBUG] [Thread-26537] [transport.py] [_log()] userauth is OK
2026-04-15T22:06:08.040 [DEBUG] [Thread-26537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:06:08.040 [DEBUG] [Thread-26537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:06:08.040 [DEBUG] [Thread-26537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:06:08.041 [DEBUG] [Thread-26537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:06:08.065 [INFO] [Thread-26537] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:06:08.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:06:08.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:06:08.889 [DEBUG] [Thread-26537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:06:08.889 [DEBUG] [Thread-26537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:06:08.940 [DEBUG] [Thread-26537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:06:08.941 [DEBUG] [Thread-26537] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:06:08.952 [DEBUG] [Thread-26537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:06:08.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:06:08.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')
2026-04-15T22:06:08.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
2026-04-15T22:06:08.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:06:08.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:06:08.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:06:09.008 [DEBUG] [Thread-26537] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:06:15.567 [DEBUG] [Thread-26539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:06:23.488 [DEBUG] [Thread-26540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:06:30.607 [DEBUG] [Thread-26541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:06:39.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:06:39.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:06:39.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
2026-04-15T22:06:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 6, 22), 4.13679, 75.3856, 0.0, 7.182, 9.57845, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:06:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:06:22
2026-04-15T22:06:40.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:06:41.178 [DEBUG] [Thread-26542] [transport.py] [_log()] starting thread (client mode): 0xee9073d0
2026-04-15T22:06:41.179 [DEBUG] [Thread-26542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:06:41.199 [DEBUG] [Thread-26542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:06:41.199 [INFO] [Thread-26542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:06:41.201 [DEBUG] [Thread-26542] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:06:41.201 [DEBUG] [Thread-26542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:06:41.201 [DEBUG] [Thread-26542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:06:41.201 [DEBUG] [Thread-26542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:06:41.201 [DEBUG] [Thread-26542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:06:41.201 [DEBUG] [Thread-26542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:06:41.201 [DEBUG] [Thread-26542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:06:41.201 [DEBUG] [Thread-26542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:06:41.201 [DEBUG] [Thread-26542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:06:41.201 [DEBUG] [Thread-26542] [transport.py] [_log()] client lang: <none>
2026-04-15T22:06:41.202 [DEBUG] [Thread-26542] [transport.py] [_log()] server lang: <none>
2026-04-15T22:06:41.202 [DEBUG] [Thread-26542] [transport.py] [_log()] kex follows: False
2026-04-15T22:06:41.202 [DEBUG] [Thread-26542] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:06:41.202 [DEBUG] [Thread-26542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:06:41.202 [DEBUG] [Thread-26542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:06:41.202 [DEBUG] [Thread-26542] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:06:41.202 [DEBUG] [Thread-26542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:06:41.202 [DEBUG] [Thread-26542] [transport.py] [_log()] Compression: none
2026-04-15T22:06:41.202 [DEBUG] [Thread-26542] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:06:41.222 [DEBUG] [Thread-26542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:06:41.222 [DEBUG] [Thread-26542] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:06:41.223 [DEBUG] [Thread-26542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:06:41.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:06:41.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:06:41.224 [DEBUG] [Thread-26542] [transport.py] [_log()] userauth is OK
2026-04-15T22:06:41.224 [DEBUG] [Thread-26542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:06:41.224 [DEBUG] [Thread-26542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:06:41.224 [DEBUG] [Thread-26542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:06:41.224 [DEBUG] [Thread-26542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:06:41.243 [INFO] [Thread-26542] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:06:41.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:06:41.995 [DEBUG] [Thread-26542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:06:41.995 [DEBUG] [Thread-26542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:06:41.996 [DEBUG] [Thread-26542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:06:42.036 [DEBUG] [Thread-26542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:06:42.037 [DEBUG] [Thread-26542] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:06:42.039 [DEBUG] [Thread-26542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:06:42.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:06:42.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:06:42.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:06:42.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:06:42.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:06:42.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:06:42.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:06:42.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:06:42.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:06:42.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.837630 -999.00   +9.90   6.67     79   +6.40 1 1 1 1 1     0    0 3.12 -19.22 ZNESW 5.3 6.7 96.8 7.8 10.3 -25.3 10.3 -24.0 10.0 -21.7 10.3 -24.0
2026-04-15T22:06:42.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:06:42.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:06:42.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.837630
2026-04-15T22:06:42.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:06:42.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:06:42.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:06:42.059 [DEBUG] [Thread-26542] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:06:42.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:06:42.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:06:42.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:06:22', tmtdew=4.13679, humidity=75.3856, cloud=0.0, wind=7.182, temperature=9.57845, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:06:11.232', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.0182500000000001, -0.031749999999998835, -0.06600000000000072, -0.027499999999999858, 0.015750000000000597, -0.0010000000000012221, 0.038750000000000284, 0.02549999999999919, -0.024499999999999744, -0.03175000000000061, -0.01699999999999946, 0.007999999999999119, 0.025249999999999773, -0.005500000000001393, 0.006499999999999062, 0.04224999999999923, -0.03550000000000075, 0.0, 0.01124999999999865, 0.03749999999999787, 0.018749999999998934, 0.03825000000000145, 0.006249999999999645, 0.041999999999999815, -0.027499999999999858, 0.005250000000000199, 0.04049999999999976, 0.04899999999999949, 0.04600000000000115, 0.07900000000000063, 0.027499999999999858, -0.005250000000000199], zp_timestamp='2026-04-15T20:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:06:42.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:06:42.275 [DEBUG] [Thread-26545] [transport.py] [_log()] starting thread (client mode): 0xee905630
2026-04-15T22:06:42.275 [DEBUG] [Thread-26545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:06:42.294 [DEBUG] [Thread-26545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:06:42.294 [INFO] [Thread-26545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:06:42.302 [DEBUG] [Thread-26545] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:06:42.302 [DEBUG] [Thread-26545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:06:42.302 [DEBUG] [Thread-26545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:06:42.302 [DEBUG] [Thread-26545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:06:42.302 [DEBUG] [Thread-26545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:06:42.302 [DEBUG] [Thread-26545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:06:42.302 [DEBUG] [Thread-26545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:06:42.302 [DEBUG] [Thread-26545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:06:42.302 [DEBUG] [Thread-26545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:06:42.302 [DEBUG] [Thread-26545] [transport.py] [_log()] client lang: <none>
2026-04-15T22:06:42.303 [DEBUG] [Thread-26545] [transport.py] [_log()] server lang: <none>
2026-04-15T22:06:42.303 [DEBUG] [Thread-26545] [transport.py] [_log()] kex follows: False
2026-04-15T22:06:42.303 [DEBUG] [Thread-26545] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:06:42.303 [DEBUG] [Thread-26545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:06:42.303 [DEBUG] [Thread-26545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:06:42.303 [DEBUG] [Thread-26545] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:06:42.303 [DEBUG] [Thread-26545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:06:42.303 [DEBUG] [Thread-26545] [transport.py] [_log()] Compression: none
2026-04-15T22:06:42.303 [DEBUG] [Thread-26545] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:06:42.360 [DEBUG] [Thread-26545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:06:42.361 [DEBUG] [Thread-26545] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:06:42.361 [DEBUG] [Thread-26545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:06:42.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:06:42.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:06:42.422 [DEBUG] [Thread-26545] [transport.py] [_log()] userauth is OK
2026-04-15T22:06:42.422 [DEBUG] [Thread-26545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:06:42.423 [DEBUG] [Thread-26545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:06:42.423 [DEBUG] [Thread-26545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:06:42.423 [DEBUG] [Thread-26545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:06:42.454 [INFO] [Thread-26545] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:06:42.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:06:42.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:06:43.276 [DEBUG] [Thread-26545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:06:43.276 [DEBUG] [Thread-26545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:06:43.326 [DEBUG] [Thread-26545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:06:43.326 [DEBUG] [Thread-26545] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:06:43.335 [DEBUG] [Thread-26545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:06:43.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:06:43.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')
2026-04-15T22:06:43.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
2026-04-15T22:06:43.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:06:43.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:06:43.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:06:43.374 [DEBUG] [Thread-26545] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:06:45.637 [DEBUG] [Thread-26547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:06:56.513 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:06:56.514 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:07:00.685 [DEBUG] [Thread-26548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:07:13.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:07:13.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:07:13.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
2026-04-15T22:07:14.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 6, 58), 4.06527, 75.5017, 0.0, 8.52336, 9.52845, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:07:14.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:06:58
2026-04-15T22:07:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:07:15.468 [DEBUG] [Thread-26549] [transport.py] [_log()] starting thread (client mode): 0xee95e9b0
2026-04-15T22:07:15.468 [DEBUG] [Thread-26549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:07:15.488 [DEBUG] [Thread-26549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:07:15.488 [INFO] [Thread-26549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:07:15.492 [DEBUG] [Thread-26549] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:07:15.492 [DEBUG] [Thread-26549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:07:15.492 [DEBUG] [Thread-26549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:07:15.492 [DEBUG] [Thread-26549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:07:15.492 [DEBUG] [Thread-26549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:07:15.492 [DEBUG] [Thread-26549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:07:15.492 [DEBUG] [Thread-26549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:07:15.492 [DEBUG] [Thread-26549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:07:15.492 [DEBUG] [Thread-26549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:07:15.493 [DEBUG] [Thread-26549] [transport.py] [_log()] client lang: <none>
2026-04-15T22:07:15.493 [DEBUG] [Thread-26549] [transport.py] [_log()] server lang: <none>
2026-04-15T22:07:15.493 [DEBUG] [Thread-26549] [transport.py] [_log()] kex follows: False
2026-04-15T22:07:15.493 [DEBUG] [Thread-26549] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:07:15.493 [DEBUG] [Thread-26549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:07:15.493 [DEBUG] [Thread-26549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:07:15.493 [DEBUG] [Thread-26549] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:07:15.493 [DEBUG] [Thread-26549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:07:15.493 [DEBUG] [Thread-26549] [transport.py] [_log()] Compression: none
2026-04-15T22:07:15.493 [DEBUG] [Thread-26549] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:07:15.502 [DEBUG] [Thread-26549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:07:15.503 [DEBUG] [Thread-26549] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:07:15.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:07:15.503 [DEBUG] [Thread-26549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:07:15.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:07:15.504 [DEBUG] [Thread-26549] [transport.py] [_log()] userauth is OK
2026-04-15T22:07:15.504 [DEBUG] [Thread-26549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:07:15.504 [DEBUG] [Thread-26549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:07:15.504 [DEBUG] [Thread-26549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:07:15.504 [DEBUG] [Thread-26549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:07:15.528 [INFO] [Thread-26549] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:07:15.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:07:15.717 [DEBUG] [Thread-26551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:07:16.294 [DEBUG] [Thread-26549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:07:16.294 [DEBUG] [Thread-26549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:07:16.295 [DEBUG] [Thread-26549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:07:16.336 [DEBUG] [Thread-26549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:07:16.336 [DEBUG] [Thread-26549] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:07:16.338 [DEBUG] [Thread-26549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:07:16.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:07:16.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:07:16.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:07:16.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:07:16.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:07:16.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:07:16.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:07:16.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:07:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:07:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.837977 -999.00   +9.80   4.90     79   +6.40 1 1 1 1 1     0    0 3.17 -20.69 ZNESW 4.8 4.9 105.6 7.6 10.4 -25.3 10.3 -23.8 10.0 -21.7 10.2 -23.8
2026-04-15T22:07:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:07:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:07:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.837977
2026-04-15T22:07:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:07:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:07:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:07:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:07:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:07:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:06:58', tmtdew=4.06527, humidity=75.5017, cloud=0.0, wind=8.52336, temperature=9.52845, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:06:41.213', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.0182500000000001, -0.031749999999998835, -0.06600000000000072, -0.027499999999999858, 0.015750000000000597, -0.0010000000000012221, 0.038750000000000284, 0.02549999999999919, -0.024499999999999744, -0.03175000000000061, -0.01699999999999946, 0.007999999999999119, 0.025249999999999773, -0.005500000000001393, 0.006499999999999062, 0.04224999999999923, -0.03550000000000075, 0.0, 0.01124999999999865, 0.03749999999999787, 0.018749999999998934, 0.03825000000000145, 0.006249999999999645, 0.041999999999999815, -0.027499999999999858, 0.005250000000000199, 0.04049999999999976, 0.04899999999999949, 0.04600000000000115, 0.07900000000000063, 0.027499999999999858, -0.005250000000000199], zp_timestamp='2026-04-15T20:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:07:16.356 [DEBUG] [Thread-26549] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:07:16.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:07:16.575 [DEBUG] [Thread-26553] [transport.py] [_log()] starting thread (client mode): 0xf1367340
2026-04-15T22:07:16.576 [DEBUG] [Thread-26553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:07:16.590 [DEBUG] [Thread-26553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:07:16.591 [INFO] [Thread-26553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:07:16.598 [DEBUG] [Thread-26553] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:07:16.598 [DEBUG] [Thread-26553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:07:16.598 [DEBUG] [Thread-26553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:07:16.598 [DEBUG] [Thread-26553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:07:16.598 [DEBUG] [Thread-26553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:07:16.598 [DEBUG] [Thread-26553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:07:16.598 [DEBUG] [Thread-26553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:07:16.598 [DEBUG] [Thread-26553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:07:16.598 [DEBUG] [Thread-26553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:07:16.598 [DEBUG] [Thread-26553] [transport.py] [_log()] client lang: <none>
2026-04-15T22:07:16.599 [DEBUG] [Thread-26553] [transport.py] [_log()] server lang: <none>
2026-04-15T22:07:16.599 [DEBUG] [Thread-26553] [transport.py] [_log()] kex follows: False
2026-04-15T22:07:16.599 [DEBUG] [Thread-26553] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:07:16.599 [DEBUG] [Thread-26553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:07:16.599 [DEBUG] [Thread-26553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:07:16.599 [DEBUG] [Thread-26553] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:07:16.599 [DEBUG] [Thread-26553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:07:16.599 [DEBUG] [Thread-26553] [transport.py] [_log()] Compression: none
2026-04-15T22:07:16.599 [DEBUG] [Thread-26553] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:07:16.654 [DEBUG] [Thread-26553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:07:16.655 [DEBUG] [Thread-26553] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:07:16.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:07:16.655 [DEBUG] [Thread-26553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:07:16.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:07:16.711 [DEBUG] [Thread-26553] [transport.py] [_log()] userauth is OK
2026-04-15T22:07:16.711 [DEBUG] [Thread-26553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:07:16.711 [DEBUG] [Thread-26553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:07:16.711 [DEBUG] [Thread-26553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:07:16.712 [DEBUG] [Thread-26553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:07:16.737 [INFO] [Thread-26553] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:07:16.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:07:16.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:07:17.566 [DEBUG] [Thread-26553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:07:17.566 [DEBUG] [Thread-26553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:07:17.614 [DEBUG] [Thread-26553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:07:17.614 [DEBUG] [Thread-26553] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:07:17.623 [DEBUG] [Thread-26553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:07:17.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:07:17.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')
2026-04-15T22:07:17.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
2026-04-15T22:07:17.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:07:17.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:07:17.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:07:17.659 [DEBUG] [Thread-26553] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:07:23.633 [DEBUG] [Thread-26555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:07:30.748 [DEBUG] [Thread-26556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:07:45.790 [DEBUG] [Thread-26557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:07:47.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:07:47.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:07:47.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
2026-04-15T22:07:48.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 7, 33), 3.62153, 78.0371, 0.0, 10.0937, 9.25774, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:07:48.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:07:33
2026-04-15T22:07:49.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:07:49.808 [DEBUG] [Thread-26558] [transport.py] [_log()] starting thread (client mode): 0xf1367e50
2026-04-15T22:07:49.808 [DEBUG] [Thread-26558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:07:49.826 [DEBUG] [Thread-26558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:07:49.826 [INFO] [Thread-26558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:07:49.829 [DEBUG] [Thread-26558] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:07:49.829 [DEBUG] [Thread-26558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:07:49.829 [DEBUG] [Thread-26558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:07:49.829 [DEBUG] [Thread-26558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:07:49.829 [DEBUG] [Thread-26558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:07:49.829 [DEBUG] [Thread-26558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:07:49.829 [DEBUG] [Thread-26558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:07:49.829 [DEBUG] [Thread-26558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:07:49.830 [DEBUG] [Thread-26558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:07:49.830 [DEBUG] [Thread-26558] [transport.py] [_log()] client lang: <none>
2026-04-15T22:07:49.830 [DEBUG] [Thread-26558] [transport.py] [_log()] server lang: <none>
2026-04-15T22:07:49.830 [DEBUG] [Thread-26558] [transport.py] [_log()] kex follows: False
2026-04-15T22:07:49.830 [DEBUG] [Thread-26558] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:07:49.830 [DEBUG] [Thread-26558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:07:49.830 [DEBUG] [Thread-26558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:07:49.830 [DEBUG] [Thread-26558] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:07:49.830 [DEBUG] [Thread-26558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:07:49.830 [DEBUG] [Thread-26558] [transport.py] [_log()] Compression: none
2026-04-15T22:07:49.830 [DEBUG] [Thread-26558] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:07:49.848 [DEBUG] [Thread-26558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:07:49.849 [DEBUG] [Thread-26558] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:07:49.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:07:49.849 [DEBUG] [Thread-26558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:07:49.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:07:49.850 [DEBUG] [Thread-26558] [transport.py] [_log()] userauth is OK
2026-04-15T22:07:49.850 [DEBUG] [Thread-26558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:07:49.850 [DEBUG] [Thread-26558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:07:49.850 [DEBUG] [Thread-26558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:07:49.851 [DEBUG] [Thread-26558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:07:49.869 [INFO] [Thread-26558] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:07:49.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:07:50.634 [DEBUG] [Thread-26558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:07:50.634 [DEBUG] [Thread-26558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:07:50.635 [DEBUG] [Thread-26558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:07:50.675 [DEBUG] [Thread-26558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:07:50.675 [DEBUG] [Thread-26558] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:07:50.678 [DEBUG] [Thread-26558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:07:50.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:07:50.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:07:50.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:07:50.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:07:50.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:07:50.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:07:50.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:07:50.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:07:50.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:07:50.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.838325 -999.00   +9.90   6.22     79   +6.40 1 1 1 1 1     0    0 3.15 -20.57 ZNESW 6.1 6.2 108.7 7.6 10.4 -25.1 10.2 -23.9 9.9 -21.8 10.3 -23.9
2026-04-15T22:07:50.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:07:50.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:07:50.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.838325
2026-04-15T22:07:50.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:07:50.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:07:50.705 [DEBUG] [Thread-26558] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:07:50.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:07:50.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:07:50.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:07:50.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:07:33', tmtdew=3.62153, humidity=78.0371, cloud=0.0, wind=10.0937, temperature=9.25774, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:07:11.280', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.0182500000000001, -0.031749999999998835, -0.06600000000000072, -0.027499999999999858, 0.015750000000000597, -0.0010000000000012221, 0.038750000000000284, 0.02549999999999919, -0.024499999999999744, -0.03175000000000061, -0.01699999999999946, 0.007999999999999119, 0.025249999999999773, -0.005500000000001393, 0.006499999999999062, 0.04224999999999923, -0.03550000000000075, 0.0, 0.01124999999999865, 0.03749999999999787, 0.018749999999998934, 0.03825000000000145, 0.006249999999999645, 0.041999999999999815, -0.027499999999999858, 0.005250000000000199, 0.04049999999999976, 0.04899999999999949, 0.04600000000000115, 0.07900000000000063, 0.027499999999999858, -0.005250000000000199], zp_timestamp='2026-04-15T20:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:07:50.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:07:50.962 [DEBUG] [Thread-26561] [transport.py] [_log()] starting thread (client mode): 0xee906c80
2026-04-15T22:07:50.962 [DEBUG] [Thread-26561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:07:50.977 [DEBUG] [Thread-26561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:07:50.977 [INFO] [Thread-26561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:07:50.985 [DEBUG] [Thread-26561] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:07:50.985 [DEBUG] [Thread-26561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:07:50.985 [DEBUG] [Thread-26561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:07:50.985 [DEBUG] [Thread-26561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:07:50.985 [DEBUG] [Thread-26561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:07:50.985 [DEBUG] [Thread-26561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:07:50.985 [DEBUG] [Thread-26561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:07:50.985 [DEBUG] [Thread-26561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:07:50.985 [DEBUG] [Thread-26561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:07:50.985 [DEBUG] [Thread-26561] [transport.py] [_log()] client lang: <none>
2026-04-15T22:07:50.985 [DEBUG] [Thread-26561] [transport.py] [_log()] server lang: <none>
2026-04-15T22:07:50.986 [DEBUG] [Thread-26561] [transport.py] [_log()] kex follows: False
2026-04-15T22:07:50.986 [DEBUG] [Thread-26561] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:07:50.986 [DEBUG] [Thread-26561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:07:50.986 [DEBUG] [Thread-26561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:07:50.986 [DEBUG] [Thread-26561] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:07:50.986 [DEBUG] [Thread-26561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:07:50.986 [DEBUG] [Thread-26561] [transport.py] [_log()] Compression: none
2026-04-15T22:07:50.986 [DEBUG] [Thread-26561] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:07:51.041 [DEBUG] [Thread-26561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:07:51.041 [DEBUG] [Thread-26561] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:07:51.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:07:51.042 [DEBUG] [Thread-26561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:07:51.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:07:51.098 [DEBUG] [Thread-26561] [transport.py] [_log()] userauth is OK
2026-04-15T22:07:51.098 [DEBUG] [Thread-26561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:07:51.098 [DEBUG] [Thread-26561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:07:51.099 [DEBUG] [Thread-26561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:07:51.099 [DEBUG] [Thread-26561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:07:51.126 [INFO] [Thread-26561] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:07:51.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:07:51.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:07:51.970 [DEBUG] [Thread-26561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:07:51.970 [DEBUG] [Thread-26561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:07:52.017 [DEBUG] [Thread-26561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:07:52.017 [DEBUG] [Thread-26561] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:07:52.026 [DEBUG] [Thread-26561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:07:52.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:07:52.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')
2026-04-15T22:07:52.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
2026-04-15T22:07:52.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:07:52.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:07:52.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:07:52.059 [DEBUG] [Thread-26561] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:07:56.715 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:07:56.717 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:08:00.818 [DEBUG] [Thread-26563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:08:15.865 [DEBUG] [Thread-26564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:08:19.933 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:08:22.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:08:22.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:08:22.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
2026-04-15T22:08:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 8, 9), 4.04897, 75.5849, 0.0, 6.59988, 9.54546, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:08:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:08:09
2026-04-15T22:08:23.777 [DEBUG] [Thread-26565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:08:23.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:08:24.277 [DEBUG] [Thread-26566] [transport.py] [_log()] starting thread (client mode): 0xee906d70
2026-04-15T22:08:24.277 [DEBUG] [Thread-26566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:08:24.297 [DEBUG] [Thread-26566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:08:24.297 [INFO] [Thread-26566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:08:24.300 [DEBUG] [Thread-26566] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:08:24.301 [DEBUG] [Thread-26566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:08:24.301 [DEBUG] [Thread-26566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:08:24.301 [DEBUG] [Thread-26566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:08:24.301 [DEBUG] [Thread-26566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:08:24.301 [DEBUG] [Thread-26566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:08:24.301 [DEBUG] [Thread-26566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:08:24.301 [DEBUG] [Thread-26566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:08:24.301 [DEBUG] [Thread-26566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:08:24.301 [DEBUG] [Thread-26566] [transport.py] [_log()] client lang: <none>
2026-04-15T22:08:24.301 [DEBUG] [Thread-26566] [transport.py] [_log()] server lang: <none>
2026-04-15T22:08:24.301 [DEBUG] [Thread-26566] [transport.py] [_log()] kex follows: False
2026-04-15T22:08:24.301 [DEBUG] [Thread-26566] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:08:24.302 [DEBUG] [Thread-26566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:08:24.302 [DEBUG] [Thread-26566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:08:24.302 [DEBUG] [Thread-26566] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:08:24.302 [DEBUG] [Thread-26566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:08:24.302 [DEBUG] [Thread-26566] [transport.py] [_log()] Compression: none
2026-04-15T22:08:24.302 [DEBUG] [Thread-26566] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:08:24.318 [DEBUG] [Thread-26566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:08:24.318 [DEBUG] [Thread-26566] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:08:24.319 [DEBUG] [Thread-26566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:08:24.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:08:24.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:08:24.320 [DEBUG] [Thread-26566] [transport.py] [_log()] userauth is OK
2026-04-15T22:08:24.320 [DEBUG] [Thread-26566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:08:24.320 [DEBUG] [Thread-26566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:08:24.320 [DEBUG] [Thread-26566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:08:24.320 [DEBUG] [Thread-26566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:08:24.338 [INFO] [Thread-26566] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:08:24.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:08:25.073 [DEBUG] [Thread-26566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:08:25.073 [DEBUG] [Thread-26566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:08:25.074 [DEBUG] [Thread-26566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:08:25.114 [DEBUG] [Thread-26566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:08:25.114 [DEBUG] [Thread-26566] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:08:25.117 [DEBUG] [Thread-26566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:08:25.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:08:25.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:08:25.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:08:25.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:08:25.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:08:25.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:08:25.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:08:25.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:08:25.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:08:25.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.838672 -999.00   +9.90   3.38     78   +6.40 1 1 1 1 1     0    0 3.05 -21.32 ZNESW 5.5 3.4 122.9 6.3 10.4 -25.2 10.3 -23.8 10.0 -21.8 10.3 -23.7
2026-04-15T22:08:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:08:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:08:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.838672
2026-04-15T22:08:25.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:08:25.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:08:25.144 [DEBUG] [Thread-26566] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:08:25.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:08:25.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:08:25.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:08:25.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:08:09', tmtdew=4.04897, humidity=75.5849, cloud=0.0, wind=6.59988, temperature=9.54546, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:07:41.261', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.0182500000000001, -0.031749999999998835, -0.06600000000000072, -0.027499999999999858, 0.015750000000000597, -0.0010000000000012221, 0.038750000000000284, 0.02549999999999919, -0.024499999999999744, -0.03175000000000061, -0.01699999999999946, 0.007999999999999119, 0.025249999999999773, -0.005500000000001393, 0.006499999999999062, 0.04224999999999923, -0.03550000000000075, 0.0, 0.01124999999999865, 0.03749999999999787, 0.018749999999998934, 0.03825000000000145, 0.006249999999999645, 0.041999999999999815, -0.027499999999999858, 0.005250000000000199, 0.04049999999999976, 0.04899999999999949, 0.04600000000000115, 0.07900000000000063, 0.027499999999999858, -0.005250000000000199], zp_timestamp='2026-04-15T20:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:08:25.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:08:25.401 [DEBUG] [Thread-26569] [transport.py] [_log()] starting thread (client mode): 0xee904a00
2026-04-15T22:08:25.401 [DEBUG] [Thread-26569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:08:25.416 [DEBUG] [Thread-26569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:08:25.416 [INFO] [Thread-26569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:08:25.424 [DEBUG] [Thread-26569] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:08:25.424 [DEBUG] [Thread-26569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:08:25.424 [DEBUG] [Thread-26569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:08:25.424 [DEBUG] [Thread-26569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:08:25.424 [DEBUG] [Thread-26569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:08:25.424 [DEBUG] [Thread-26569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:08:25.424 [DEBUG] [Thread-26569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:08:25.425 [DEBUG] [Thread-26569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:08:25.425 [DEBUG] [Thread-26569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:08:25.425 [DEBUG] [Thread-26569] [transport.py] [_log()] client lang: <none>
2026-04-15T22:08:25.425 [DEBUG] [Thread-26569] [transport.py] [_log()] server lang: <none>
2026-04-15T22:08:25.425 [DEBUG] [Thread-26569] [transport.py] [_log()] kex follows: False
2026-04-15T22:08:25.425 [DEBUG] [Thread-26569] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:08:25.425 [DEBUG] [Thread-26569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:08:25.425 [DEBUG] [Thread-26569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:08:25.425 [DEBUG] [Thread-26569] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:08:25.425 [DEBUG] [Thread-26569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:08:25.425 [DEBUG] [Thread-26569] [transport.py] [_log()] Compression: none
2026-04-15T22:08:25.425 [DEBUG] [Thread-26569] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:08:25.481 [DEBUG] [Thread-26569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:08:25.481 [DEBUG] [Thread-26569] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:08:25.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:08:25.482 [DEBUG] [Thread-26569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:08:25.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:08:25.537 [DEBUG] [Thread-26569] [transport.py] [_log()] userauth is OK
2026-04-15T22:08:25.537 [DEBUG] [Thread-26569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:08:25.537 [DEBUG] [Thread-26569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:08:25.537 [DEBUG] [Thread-26569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:08:25.537 [DEBUG] [Thread-26569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:08:25.565 [INFO] [Thread-26569] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:08:25.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:08:25.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:08:26.434 [DEBUG] [Thread-26569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:08:26.435 [DEBUG] [Thread-26569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:08:26.482 [DEBUG] [Thread-26569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:08:26.483 [DEBUG] [Thread-26569] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:08:26.492 [DEBUG] [Thread-26569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:08:26.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:08:26.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')
2026-04-15T22:08:26.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
2026-04-15T22:08:26.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:08:26.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:08:26.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:08:26.526 [DEBUG] [Thread-26569] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:08:27.850 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:08:30.895 [DEBUG] [Thread-26571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:08:31.962 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:08:45.939 [DEBUG] [Thread-26572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:08:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:08:56.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:08:56.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
2026-04-15T22:08:56.917 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:08:56.918 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:08:57.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 8, 45), 3.58052, 78.2691, 0.0, 9.882, 9.3239, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:08:57.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:08:45
2026-04-15T22:08:58.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:08:58.666 [DEBUG] [Thread-26573] [transport.py] [_log()] starting thread (client mode): 0xf1364760
2026-04-15T22:08:58.667 [DEBUG] [Thread-26573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:08:58.679 [DEBUG] [Thread-26573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:08:58.679 [INFO] [Thread-26573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:08:58.680 [DEBUG] [Thread-26573] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:08:58.680 [DEBUG] [Thread-26573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:08:58.681 [DEBUG] [Thread-26573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:08:58.681 [DEBUG] [Thread-26573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:08:58.681 [DEBUG] [Thread-26573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:08:58.681 [DEBUG] [Thread-26573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:08:58.681 [DEBUG] [Thread-26573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:08:58.681 [DEBUG] [Thread-26573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:08:58.681 [DEBUG] [Thread-26573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:08:58.681 [DEBUG] [Thread-26573] [transport.py] [_log()] client lang: <none>
2026-04-15T22:08:58.681 [DEBUG] [Thread-26573] [transport.py] [_log()] server lang: <none>
2026-04-15T22:08:58.681 [DEBUG] [Thread-26573] [transport.py] [_log()] kex follows: False
2026-04-15T22:08:58.681 [DEBUG] [Thread-26573] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:08:58.681 [DEBUG] [Thread-26573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:08:58.682 [DEBUG] [Thread-26573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:08:58.682 [DEBUG] [Thread-26573] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:08:58.682 [DEBUG] [Thread-26573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:08:58.682 [DEBUG] [Thread-26573] [transport.py] [_log()] Compression: none
2026-04-15T22:08:58.682 [DEBUG] [Thread-26573] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:08:58.694 [DEBUG] [Thread-26573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:08:58.694 [DEBUG] [Thread-26573] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:08:58.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:08:58.695 [DEBUG] [Thread-26573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:08:58.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:08:58.696 [DEBUG] [Thread-26573] [transport.py] [_log()] userauth is OK
2026-04-15T22:08:58.696 [DEBUG] [Thread-26573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:08:58.696 [DEBUG] [Thread-26573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:08:58.696 [DEBUG] [Thread-26573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:08:58.696 [DEBUG] [Thread-26573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:08:58.719 [INFO] [Thread-26573] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:08:58.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:08:59.467 [DEBUG] [Thread-26573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:08:59.468 [DEBUG] [Thread-26573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:08:59.468 [DEBUG] [Thread-26573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:08:59.508 [DEBUG] [Thread-26573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:08:59.508 [DEBUG] [Thread-26573] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:08:59.510 [DEBUG] [Thread-26573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:08:59.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:08:59.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:08:59.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:08:59.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:08:59.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:08:59.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:08:59.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:08:59.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:08:59.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:08:59.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.839367 -999.00   +9.90   4.89     78   +6.40 1 1 1 1 1     0    0 3.10 -20.88 ZNESW 4.5 4.9 71.6 8.9 10.4 -25.1 10.3 -23.8 10.0 -21.7 10.3 -23.8
2026-04-15T22:08:59.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:08:59.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:08:59.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.839367
2026-04-15T22:08:59.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:08:59.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:08:59.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:08:59.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:08:59.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:08:59.533 [DEBUG] [Thread-26573] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:08:59.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:08:45', tmtdew=3.58052, humidity=78.2691, cloud=0.0, wind=9.882, temperature=9.3239, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:08:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.0182500000000001, -0.031749999999998835, -0.06600000000000072, -0.027499999999999858, 0.015750000000000597, -0.0010000000000012221, 0.038750000000000284, 0.02549999999999919, -0.024499999999999744, -0.03175000000000061, -0.01699999999999946, 0.007999999999999119, 0.025249999999999773, -0.005500000000001393, 0.006499999999999062, 0.04224999999999923, -0.03550000000000075, 0.0, 0.01124999999999865, 0.03749999999999787, 0.018749999999998934, 0.03825000000000145, 0.006249999999999645, 0.041999999999999815, -0.027499999999999858, 0.005250000000000199, 0.04049999999999976, 0.04899999999999949, 0.04600000000000115, 0.07900000000000063, 0.027499999999999858, -0.005250000000000199], zp_timestamp='2026-04-15T20:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:08:59.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:08:59.785 [DEBUG] [Thread-26576] [transport.py] [_log()] starting thread (client mode): 0xf13cb730
2026-04-15T22:08:59.785 [DEBUG] [Thread-26576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:08:59.799 [DEBUG] [Thread-26576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:08:59.799 [INFO] [Thread-26576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:08:59.807 [DEBUG] [Thread-26576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:08:59.807 [DEBUG] [Thread-26576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:08:59.807 [DEBUG] [Thread-26576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:08:59.807 [DEBUG] [Thread-26576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:08:59.807 [DEBUG] [Thread-26576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:08:59.807 [DEBUG] [Thread-26576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:08:59.807 [DEBUG] [Thread-26576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:08:59.808 [DEBUG] [Thread-26576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:08:59.808 [DEBUG] [Thread-26576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:08:59.808 [DEBUG] [Thread-26576] [transport.py] [_log()] client lang: <none>
2026-04-15T22:08:59.808 [DEBUG] [Thread-26576] [transport.py] [_log()] server lang: <none>
2026-04-15T22:08:59.808 [DEBUG] [Thread-26576] [transport.py] [_log()] kex follows: False
2026-04-15T22:08:59.808 [DEBUG] [Thread-26576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:08:59.808 [DEBUG] [Thread-26576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:08:59.809 [DEBUG] [Thread-26576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:08:59.809 [DEBUG] [Thread-26576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:08:59.809 [DEBUG] [Thread-26576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:08:59.809 [DEBUG] [Thread-26576] [transport.py] [_log()] Compression: none
2026-04-15T22:08:59.809 [DEBUG] [Thread-26576] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:08:59.863 [DEBUG] [Thread-26576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:08:59.863 [DEBUG] [Thread-26576] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:08:59.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:08:59.864 [DEBUG] [Thread-26576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:08:59.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:08:59.920 [DEBUG] [Thread-26576] [transport.py] [_log()] userauth is OK
2026-04-15T22:08:59.920 [DEBUG] [Thread-26576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:08:59.920 [DEBUG] [Thread-26576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:08:59.921 [DEBUG] [Thread-26576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:08:59.921 [DEBUG] [Thread-26576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:08:59.948 [INFO] [Thread-26576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:08:59.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:08:59.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:09:00.793 [DEBUG] [Thread-26576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:09:00.793 [DEBUG] [Thread-26576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:09:00.841 [DEBUG] [Thread-26576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:09:00.841 [DEBUG] [Thread-26576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:09:00.849 [DEBUG] [Thread-26576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:09:00.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:09:00.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')
2026-04-15T22:09:00.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
2026-04-15T22:09:00.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:09:00.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:09:00.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:09:00.884 [DEBUG] [Thread-26576] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:09:00.971 [DEBUG] [Thread-26578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:09:16.014 [DEBUG] [Thread-26579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:09:23.934 [DEBUG] [Thread-26580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:09:30.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:09:30.894 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:09:30.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
2026-04-15T22:09:31.042 [DEBUG] [Thread-26581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:09:32.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 9, 20), 4.03109, 75.6843, 0.0, 7.23492, 9.56195, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:09:32.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:09:20
2026-04-15T22:09:32.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:09:33.042 [DEBUG] [Thread-26582] [transport.py] [_log()] starting thread (client mode): 0xf1367a60
2026-04-15T22:09:33.042 [DEBUG] [Thread-26582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:09:33.061 [DEBUG] [Thread-26582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:09:33.061 [INFO] [Thread-26582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] client lang: <none>
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] server lang: <none>
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] kex follows: False
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:09:33.065 [DEBUG] [Thread-26582] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:09:33.066 [DEBUG] [Thread-26582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:09:33.066 [DEBUG] [Thread-26582] [transport.py] [_log()] Compression: none
2026-04-15T22:09:33.066 [DEBUG] [Thread-26582] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:09:33.084 [DEBUG] [Thread-26582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:09:33.084 [DEBUG] [Thread-26582] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:09:33.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:09:33.085 [DEBUG] [Thread-26582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:09:33.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:09:33.086 [DEBUG] [Thread-26582] [transport.py] [_log()] userauth is OK
2026-04-15T22:09:33.086 [DEBUG] [Thread-26582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:09:33.086 [DEBUG] [Thread-26582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:09:33.086 [DEBUG] [Thread-26582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:09:33.086 [DEBUG] [Thread-26582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:09:33.104 [INFO] [Thread-26582] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:09:33.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:09:33.747 [DEBUG] [Thread-26582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:09:33.747 [DEBUG] [Thread-26582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:09:33.747 [DEBUG] [Thread-26582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:09:33.788 [DEBUG] [Thread-26582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:09:33.788 [DEBUG] [Thread-26582] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:09:33.791 [DEBUG] [Thread-26582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:09:33.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:09:33.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:09:33.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:09:33.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:09:33.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:09:33.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:09:33.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:09:33.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:09:33.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:09:33.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.839713 -999.00   +9.90   6.18     78   +6.40 1 1 1 1 1     0    0 3.08 -20.50 ZNESW 5.1 6.2 115.2 7.8 10.4 -25.0 10.3 -23.8 10.0 -21.7 10.2 -23.7
2026-04-15T22:09:33.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:09:33.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:09:33.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.839713
2026-04-15T22:09:33.815 [DEBUG] [Thread-26582] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:09:33.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:09:33.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:09:33.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:09:33.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:09:33.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:09:33.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:09:20', tmtdew=4.03109, humidity=75.6843, cloud=0.0, wind=7.23492, temperature=9.56195, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:09:11.203', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.0182500000000001, -0.031749999999998835, -0.06600000000000072, -0.027499999999999858, 0.015750000000000597, -0.0010000000000012221, 0.038750000000000284, 0.02549999999999919, -0.024499999999999744, -0.03175000000000061, -0.01699999999999946, 0.007999999999999119, 0.025249999999999773, -0.005500000000001393, 0.006499999999999062, 0.04224999999999923, -0.03550000000000075, 0.0, 0.01124999999999865, 0.03749999999999787, 0.018749999999998934, 0.03825000000000145, 0.006249999999999645, 0.041999999999999815, -0.027499999999999858, 0.005250000000000199, 0.04049999999999976, 0.04899999999999949, 0.04600000000000115, 0.07900000000000063, 0.027499999999999858, -0.005250000000000199], zp_timestamp='2026-04-15T20:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:09:34.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:09:34.072 [DEBUG] [Thread-26585] [transport.py] [_log()] starting thread (client mode): 0xf1366380
2026-04-15T22:09:34.072 [DEBUG] [Thread-26585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:09:34.087 [DEBUG] [Thread-26585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:09:34.087 [INFO] [Thread-26585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:09:34.097 [DEBUG] [Thread-26585] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:09:34.097 [DEBUG] [Thread-26585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:09:34.097 [DEBUG] [Thread-26585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:09:34.097 [DEBUG] [Thread-26585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:09:34.097 [DEBUG] [Thread-26585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:09:34.097 [DEBUG] [Thread-26585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:09:34.097 [DEBUG] [Thread-26585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:09:34.097 [DEBUG] [Thread-26585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:09:34.098 [DEBUG] [Thread-26585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:09:34.098 [DEBUG] [Thread-26585] [transport.py] [_log()] client lang: <none>
2026-04-15T22:09:34.098 [DEBUG] [Thread-26585] [transport.py] [_log()] server lang: <none>
2026-04-15T22:09:34.098 [DEBUG] [Thread-26585] [transport.py] [_log()] kex follows: False
2026-04-15T22:09:34.098 [DEBUG] [Thread-26585] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:09:34.098 [DEBUG] [Thread-26585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:09:34.098 [DEBUG] [Thread-26585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:09:34.098 [DEBUG] [Thread-26585] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:09:34.098 [DEBUG] [Thread-26585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:09:34.098 [DEBUG] [Thread-26585] [transport.py] [_log()] Compression: none
2026-04-15T22:09:34.098 [DEBUG] [Thread-26585] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:09:34.154 [DEBUG] [Thread-26585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:09:34.155 [DEBUG] [Thread-26585] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:09:34.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:09:34.155 [DEBUG] [Thread-26585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:09:34.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:09:34.212 [DEBUG] [Thread-26585] [transport.py] [_log()] userauth is OK
2026-04-15T22:09:34.212 [DEBUG] [Thread-26585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:09:34.212 [DEBUG] [Thread-26585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:09:34.213 [DEBUG] [Thread-26585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:09:34.213 [DEBUG] [Thread-26585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:09:34.238 [INFO] [Thread-26585] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:09:34.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:09:34.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:09:35.069 [DEBUG] [Thread-26585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:09:35.069 [DEBUG] [Thread-26585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:09:35.118 [DEBUG] [Thread-26585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:09:35.118 [DEBUG] [Thread-26585] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:09:35.126 [DEBUG] [Thread-26585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:09:35.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:09:35.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')
2026-04-15T22:09:35.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
2026-04-15T22:09:35.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:09:35.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:09:35.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:09:35.158 [DEBUG] [Thread-26585] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:09:46.072 [DEBUG] [Thread-26587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:09:54.569 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:09:57.117 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:09:57.118 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:10:01.114 [DEBUG] [Thread-26588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:10:02.277 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:10:05.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:10:05.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:10:05.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
2026-04-15T22:10:06.373 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:10:06.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 9, 56), 4.02499, 75.7174, 0.0, 7.07616, 9.56188, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:10:06.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:09:56
2026-04-15T22:10:06.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:10:07.364 [DEBUG] [Thread-26589] [transport.py] [_log()] starting thread (client mode): 0xee906f20
2026-04-15T22:10:07.364 [DEBUG] [Thread-26589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:10:07.382 [DEBUG] [Thread-26589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:10:07.383 [INFO] [Thread-26589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:10:07.386 [DEBUG] [Thread-26589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:10:07.386 [DEBUG] [Thread-26589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:10:07.386 [DEBUG] [Thread-26589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:10:07.386 [DEBUG] [Thread-26589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:10:07.386 [DEBUG] [Thread-26589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:10:07.386 [DEBUG] [Thread-26589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:10:07.386 [DEBUG] [Thread-26589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:10:07.386 [DEBUG] [Thread-26589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:10:07.386 [DEBUG] [Thread-26589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:10:07.386 [DEBUG] [Thread-26589] [transport.py] [_log()] client lang: <none>
2026-04-15T22:10:07.386 [DEBUG] [Thread-26589] [transport.py] [_log()] server lang: <none>
2026-04-15T22:10:07.386 [DEBUG] [Thread-26589] [transport.py] [_log()] kex follows: False
2026-04-15T22:10:07.386 [DEBUG] [Thread-26589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:10:07.387 [DEBUG] [Thread-26589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:10:07.387 [DEBUG] [Thread-26589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:10:07.387 [DEBUG] [Thread-26589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:10:07.387 [DEBUG] [Thread-26589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:10:07.387 [DEBUG] [Thread-26589] [transport.py] [_log()] Compression: none
2026-04-15T22:10:07.387 [DEBUG] [Thread-26589] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:10:07.403 [DEBUG] [Thread-26589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:10:07.403 [DEBUG] [Thread-26589] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:10:07.404 [DEBUG] [Thread-26589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:10:07.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:10:07.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:10:07.405 [DEBUG] [Thread-26589] [transport.py] [_log()] userauth is OK
2026-04-15T22:10:07.405 [DEBUG] [Thread-26589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:10:07.405 [DEBUG] [Thread-26589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:10:07.405 [DEBUG] [Thread-26589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:10:07.405 [DEBUG] [Thread-26589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:10:07.424 [INFO] [Thread-26589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:10:07.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:10:09.847 [DEBUG] [Thread-26589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:10:09.848 [DEBUG] [Thread-26589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:10:09.848 [DEBUG] [Thread-26589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:10:09.888 [DEBUG] [Thread-26589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:10:09.888 [DEBUG] [Thread-26589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:10:09.891 [DEBUG] [Thread-26589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:10:09.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:10:09.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:10:09.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:10:09.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:10:09.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:10:09.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:10:09.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:10:09.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:10:09.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:10:09.945 [DEBUG] [Thread-26589] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:10:09.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.840061 -999.00   +9.90   4.85     78   +6.40 1 1 1 1 1     0    0 3.00 -21.87 ZNESW 5.5 4.8 123.8 8.1 10.3 -25.0 10.3 -23.8 10.0 -21.7 10.2 -23.6
2026-04-15T22:10:09.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:10:09.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:10:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.840061
2026-04-15T22:10:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:10:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:10:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:10:09.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:10:09.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:10:09.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:09:56', tmtdew=4.02499, humidity=75.7174, cloud=0.0, wind=7.07616, temperature=9.56188, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:09:41.270', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.0182500000000001, -0.031749999999998835, -0.06600000000000072, -0.027499999999999858, 0.015750000000000597, -0.0010000000000012221, 0.038750000000000284, 0.02549999999999919, -0.024499999999999744, -0.03175000000000061, -0.01699999999999946, 0.007999999999999119, 0.025249999999999773, -0.005500000000001393, 0.006499999999999062, 0.04224999999999923, -0.03550000000000075, 0.0, 0.01124999999999865, 0.03749999999999787, 0.018749999999998934, 0.03825000000000145, 0.006249999999999645, 0.041999999999999815, -0.027499999999999858, 0.005250000000000199, 0.04049999999999976, 0.04899999999999949, 0.04600000000000115, 0.07900000000000063, 0.027499999999999858, -0.005250000000000199], zp_timestamp='2026-04-15T20:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:10:10.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:10:10.176 [DEBUG] [Thread-26592] [transport.py] [_log()] starting thread (client mode): 0xee9053f0
2026-04-15T22:10:10.176 [DEBUG] [Thread-26592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:10:10.195 [DEBUG] [Thread-26592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:10:10.195 [INFO] [Thread-26592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:10:10.208 [DEBUG] [Thread-26592] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:10:10.208 [DEBUG] [Thread-26592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:10:10.209 [DEBUG] [Thread-26592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:10:10.209 [DEBUG] [Thread-26592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:10:10.209 [DEBUG] [Thread-26592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:10:10.209 [DEBUG] [Thread-26592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:10:10.209 [DEBUG] [Thread-26592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:10:10.209 [DEBUG] [Thread-26592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:10:10.209 [DEBUG] [Thread-26592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:10:10.209 [DEBUG] [Thread-26592] [transport.py] [_log()] client lang: <none>
2026-04-15T22:10:10.209 [DEBUG] [Thread-26592] [transport.py] [_log()] server lang: <none>
2026-04-15T22:10:10.209 [DEBUG] [Thread-26592] [transport.py] [_log()] kex follows: False
2026-04-15T22:10:10.209 [DEBUG] [Thread-26592] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:10:10.209 [DEBUG] [Thread-26592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:10:10.210 [DEBUG] [Thread-26592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:10:10.210 [DEBUG] [Thread-26592] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:10:10.210 [DEBUG] [Thread-26592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:10:10.210 [DEBUG] [Thread-26592] [transport.py] [_log()] Compression: none
2026-04-15T22:10:10.210 [DEBUG] [Thread-26592] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:10:10.261 [DEBUG] [Thread-26592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:10:10.262 [DEBUG] [Thread-26592] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:10:10.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:10:10.262 [DEBUG] [Thread-26592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:10:10.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:10:10.321 [DEBUG] [Thread-26592] [transport.py] [_log()] userauth is OK
2026-04-15T22:10:10.322 [DEBUG] [Thread-26592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:10:10.322 [DEBUG] [Thread-26592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:10:10.322 [DEBUG] [Thread-26592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:10:10.322 [DEBUG] [Thread-26592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:10:10.355 [INFO] [Thread-26592] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:10:10.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:10:10.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:10:11.163 [DEBUG] [Thread-26592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:10:11.164 [DEBUG] [Thread-26592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:10:11.211 [DEBUG] [Thread-26592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:10:11.211 [DEBUG] [Thread-26592] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:10:11.220 [DEBUG] [Thread-26592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:10:11.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:10:11.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')
2026-04-15T22:10:11.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') -> 00000000
2026-04-15T22:10:11.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:10:11.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:10:11.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:10:11.257 [DEBUG] [Thread-26592] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:10:16.146 [DEBUG] [Thread-26594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:10:24.077 [DEBUG] [Thread-26595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:10:31.192 [DEBUG] [Thread-26596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:10:41.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:10:41.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:10:41.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T22:10:42.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 10, 32), 4.01189, 75.7837, 0.0, 7.623, 9.5287, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:10:42.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:10:32
2026-04-15T22:10:43.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:10:43.475 [DEBUG] [Thread-26597] [transport.py] [_log()] starting thread (client mode): 0xf1366b30
2026-04-15T22:10:43.475 [DEBUG] [Thread-26597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:10:43.494 [DEBUG] [Thread-26597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:10:43.495 [INFO] [Thread-26597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] client lang: <none>
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] server lang: <none>
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] kex follows: False
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:10:43.498 [DEBUG] [Thread-26597] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:10:43.499 [DEBUG] [Thread-26597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:10:43.499 [DEBUG] [Thread-26597] [transport.py] [_log()] Compression: none
2026-04-15T22:10:43.499 [DEBUG] [Thread-26597] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:10:43.514 [DEBUG] [Thread-26597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:10:43.514 [DEBUG] [Thread-26597] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:10:43.514 [DEBUG] [Thread-26597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:10:43.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:10:43.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:10:43.516 [DEBUG] [Thread-26597] [transport.py] [_log()] userauth is OK
2026-04-15T22:10:43.516 [DEBUG] [Thread-26597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:10:43.516 [DEBUG] [Thread-26597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:10:43.516 [DEBUG] [Thread-26597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:10:43.516 [DEBUG] [Thread-26597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:10:43.528 [INFO] [Thread-26597] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:10:43.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:10:44.178 [DEBUG] [Thread-26597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:10:44.178 [DEBUG] [Thread-26597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:10:44.179 [DEBUG] [Thread-26597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:10:44.219 [DEBUG] [Thread-26597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:10:44.219 [DEBUG] [Thread-26597] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:10:44.221 [DEBUG] [Thread-26597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:10:44.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:10:44.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:10:44.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:10:44.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:10:44.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:10:44.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:10:44.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:10:44.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:10:44.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:10:44.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.840408 -999.00   +9.90   5.98     78   +6.40 1 1 1 1 1     0    0 3.03 -23.56 ZNESW 3.2 6.0 127.2 7.1 10.4 -25.0 10.3 -23.8 10.0 -21.7 10.3 -23.7
2026-04-15T22:10:44.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:10:44.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:10:44.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.840408
2026-04-15T22:10:44.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:10:44.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:10:44.241 [DEBUG] [Thread-26597] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:10:44.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:10:44.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:10:44.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:10:44.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:10:32', tmtdew=4.01189, humidity=75.7837, cloud=0.0, wind=7.623, temperature=9.5287, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:10:11.251', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.0182500000000001, -0.031749999999998835, -0.06600000000000072, -0.027499999999999858, 0.015750000000000597, -0.0010000000000012221, 0.038750000000000284, 0.02549999999999919, -0.024499999999999744, -0.03175000000000061, -0.01699999999999946, 0.007999999999999119, 0.025249999999999773, -0.005500000000001393, 0.006499999999999062, 0.04224999999999923, -0.03550000000000075, 0.0, 0.01124999999999865, 0.03749999999999787, 0.018749999999998934, 0.03825000000000145, 0.006249999999999645, 0.041999999999999815, -0.027499999999999858, 0.005250000000000199, 0.04049999999999976, 0.04899999999999949, 0.04600000000000115, 0.07900000000000063, 0.027499999999999858, -0.005250000000000199], zp_timestamp='2026-04-15T20:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:10:44.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:10:44.490 [DEBUG] [Thread-26600] [transport.py] [_log()] starting thread (client mode): 0xf13ca560
2026-04-15T22:10:44.491 [DEBUG] [Thread-26600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:10:44.505 [DEBUG] [Thread-26600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:10:44.505 [INFO] [Thread-26600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:10:44.512 [DEBUG] [Thread-26600] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:10:44.512 [DEBUG] [Thread-26600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:10:44.512 [DEBUG] [Thread-26600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:10:44.512 [DEBUG] [Thread-26600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:10:44.513 [DEBUG] [Thread-26600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:10:44.513 [DEBUG] [Thread-26600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:10:44.513 [DEBUG] [Thread-26600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:10:44.513 [DEBUG] [Thread-26600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:10:44.513 [DEBUG] [Thread-26600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:10:44.513 [DEBUG] [Thread-26600] [transport.py] [_log()] client lang: <none>
2026-04-15T22:10:44.513 [DEBUG] [Thread-26600] [transport.py] [_log()] server lang: <none>
2026-04-15T22:10:44.513 [DEBUG] [Thread-26600] [transport.py] [_log()] kex follows: False
2026-04-15T22:10:44.513 [DEBUG] [Thread-26600] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:10:44.513 [DEBUG] [Thread-26600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:10:44.513 [DEBUG] [Thread-26600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:10:44.513 [DEBUG] [Thread-26600] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:10:44.514 [DEBUG] [Thread-26600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:10:44.514 [DEBUG] [Thread-26600] [transport.py] [_log()] Compression: none
2026-04-15T22:10:44.514 [DEBUG] [Thread-26600] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:10:44.568 [DEBUG] [Thread-26600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:10:44.569 [DEBUG] [Thread-26600] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:10:44.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:10:44.569 [DEBUG] [Thread-26600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:10:44.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:10:44.633 [DEBUG] [Thread-26600] [transport.py] [_log()] userauth is OK
2026-04-15T22:10:44.633 [DEBUG] [Thread-26600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:10:44.633 [DEBUG] [Thread-26600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:10:44.633 [DEBUG] [Thread-26600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:10:44.633 [DEBUG] [Thread-26600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:10:44.659 [INFO] [Thread-26600] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:10:44.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:10:44.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:10:45.499 [DEBUG] [Thread-26600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:10:45.499 [DEBUG] [Thread-26600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:10:45.547 [DEBUG] [Thread-26600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:10:45.547 [DEBUG] [Thread-26600] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:10:45.556 [DEBUG] [Thread-26600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:10:45.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:10:45.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')
2026-04-15T22:10:45.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
2026-04-15T22:10:45.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:10:45.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:10:45.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:10:45.592 [DEBUG] [Thread-26600] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:10:46.222 [DEBUG] [Thread-26602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:10:57.317 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:10:57.318 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:11:01.261 [DEBUG] [Thread-26603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:11:15.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:11:15.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:11:15.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
2026-04-15T22:11:16.291 [DEBUG] [Thread-26604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:11:16.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 11, 7), 4.00835, 75.8006, 0.0, 7.5348, 9.51229, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:11:16.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:11:07
2026-04-15T22:11:17.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:11:17.753 [DEBUG] [Thread-26605] [transport.py] [_log()] starting thread (client mode): 0xf1366080
2026-04-15T22:11:17.754 [DEBUG] [Thread-26605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:11:17.774 [DEBUG] [Thread-26605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:11:17.774 [INFO] [Thread-26605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:11:17.777 [DEBUG] [Thread-26605] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:11:17.777 [DEBUG] [Thread-26605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:11:17.777 [DEBUG] [Thread-26605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:11:17.777 [DEBUG] [Thread-26605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:11:17.778 [DEBUG] [Thread-26605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:11:17.778 [DEBUG] [Thread-26605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:11:17.778 [DEBUG] [Thread-26605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:11:17.778 [DEBUG] [Thread-26605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:11:17.778 [DEBUG] [Thread-26605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:11:17.778 [DEBUG] [Thread-26605] [transport.py] [_log()] client lang: <none>
2026-04-15T22:11:17.778 [DEBUG] [Thread-26605] [transport.py] [_log()] server lang: <none>
2026-04-15T22:11:17.778 [DEBUG] [Thread-26605] [transport.py] [_log()] kex follows: False
2026-04-15T22:11:17.778 [DEBUG] [Thread-26605] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:11:17.778 [DEBUG] [Thread-26605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:11:17.779 [DEBUG] [Thread-26605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:11:17.779 [DEBUG] [Thread-26605] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:11:17.779 [DEBUG] [Thread-26605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:11:17.779 [DEBUG] [Thread-26605] [transport.py] [_log()] Compression: none
2026-04-15T22:11:17.779 [DEBUG] [Thread-26605] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:11:17.796 [DEBUG] [Thread-26605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:11:17.796 [DEBUG] [Thread-26605] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:11:17.796 [DEBUG] [Thread-26605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:11:17.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:11:17.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:11:17.797 [DEBUG] [Thread-26605] [transport.py] [_log()] userauth is OK
2026-04-15T22:11:17.797 [DEBUG] [Thread-26605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:11:17.798 [DEBUG] [Thread-26605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:11:17.798 [DEBUG] [Thread-26605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:11:17.798 [DEBUG] [Thread-26605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:11:17.810 [INFO] [Thread-26605] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:11:17.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:11:18.426 [DEBUG] [Thread-26605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:11:18.427 [DEBUG] [Thread-26605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:11:18.427 [DEBUG] [Thread-26605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:11:18.467 [DEBUG] [Thread-26605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:11:18.467 [DEBUG] [Thread-26605] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:11:18.470 [DEBUG] [Thread-26605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:11:18.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:11:18.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:11:18.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:11:18.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:11:18.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:11:18.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:11:18.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:11:18.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:11:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:11:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.840755 -999.00   +9.90   4.31     78   +6.40 1 1 1 1 1     0    0 3.06 -20.43 ZNESW 6.1 4.3 120.9 8.2 10.4 -24.8 10.3 -23.7 9.9 -21.6 10.2 -23.6
2026-04-15T22:11:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:11:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:11:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.840755
2026-04-15T22:11:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:11:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:11:18.495 [DEBUG] [Thread-26605] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:11:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:11:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:11:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:11:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:11:07', tmtdew=4.00835, humidity=75.8006, cloud=0.0, wind=7.5348, temperature=9.51229, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:10:41.232', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.0182500000000001, -0.031749999999998835, -0.06600000000000072, -0.027499999999999858, 0.015750000000000597, -0.0010000000000012221, 0.038750000000000284, 0.02549999999999919, -0.024499999999999744, -0.03175000000000061, -0.01699999999999946, 0.007999999999999119, 0.025249999999999773, -0.005500000000001393, 0.006499999999999062, 0.04224999999999923, -0.03550000000000075, 0.0, 0.01124999999999865, 0.03749999999999787, 0.018749999999998934, 0.03825000000000145, 0.006249999999999645, 0.041999999999999815, -0.027499999999999858, 0.005250000000000199, 0.04049999999999976, 0.04899999999999949, 0.04600000000000115, 0.07900000000000063, 0.027499999999999858, -0.005250000000000199], zp_timestamp='2026-04-15T20:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:11:18.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:11:18.725 [DEBUG] [Thread-26608] [transport.py] [_log()] starting thread (client mode): 0xf13cb820
2026-04-15T22:11:18.725 [DEBUG] [Thread-26608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:11:18.739 [DEBUG] [Thread-26608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:11:18.739 [INFO] [Thread-26608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:11:18.746 [DEBUG] [Thread-26608] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:11:18.747 [DEBUG] [Thread-26608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:11:18.747 [DEBUG] [Thread-26608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:11:18.747 [DEBUG] [Thread-26608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:11:18.747 [DEBUG] [Thread-26608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:11:18.747 [DEBUG] [Thread-26608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:11:18.747 [DEBUG] [Thread-26608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:11:18.747 [DEBUG] [Thread-26608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:11:18.747 [DEBUG] [Thread-26608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:11:18.747 [DEBUG] [Thread-26608] [transport.py] [_log()] client lang: <none>
2026-04-15T22:11:18.747 [DEBUG] [Thread-26608] [transport.py] [_log()] server lang: <none>
2026-04-15T22:11:18.747 [DEBUG] [Thread-26608] [transport.py] [_log()] kex follows: False
2026-04-15T22:11:18.747 [DEBUG] [Thread-26608] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:11:18.748 [DEBUG] [Thread-26608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:11:18.748 [DEBUG] [Thread-26608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:11:18.748 [DEBUG] [Thread-26608] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:11:18.748 [DEBUG] [Thread-26608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:11:18.748 [DEBUG] [Thread-26608] [transport.py] [_log()] Compression: none
2026-04-15T22:11:18.748 [DEBUG] [Thread-26608] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:11:18.803 [DEBUG] [Thread-26608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:11:18.804 [DEBUG] [Thread-26608] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:11:18.804 [DEBUG] [Thread-26608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:11:18.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:11:18.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:11:18.860 [DEBUG] [Thread-26608] [transport.py] [_log()] userauth is OK
2026-04-15T22:11:18.861 [DEBUG] [Thread-26608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:11:18.861 [DEBUG] [Thread-26608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:11:18.861 [DEBUG] [Thread-26608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:11:18.861 [DEBUG] [Thread-26608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:11:18.886 [INFO] [Thread-26608] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:11:18.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:11:18.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:11:19.718 [DEBUG] [Thread-26608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:11:19.718 [DEBUG] [Thread-26608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:11:19.766 [DEBUG] [Thread-26608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:11:19.766 [DEBUG] [Thread-26608] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:11:19.775 [DEBUG] [Thread-26608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:11:19.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:11:19.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')
2026-04-15T22:11: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
2026-04-15T22:11:19.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:11:19.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:11:19.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:11:19.810 [DEBUG] [Thread-26608] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:11:24.221 [DEBUG] [Thread-26610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:11:28.881 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:11:31.319 [DEBUG] [Thread-26611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:11:37.755 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:11:41.847 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:11:46.361 [DEBUG] [Thread-26612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:11:49.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:11:49.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:11:49.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
2026-04-15T22:11:51.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 11, 43), 3.5167, 78.6011, 0.0, 11.8224, 9.22459, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:11:51.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:11:43
2026-04-15T22:11:51.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:11:52.029 [DEBUG] [Thread-26613] [transport.py] [_log()] starting thread (client mode): 0xee9041c0
2026-04-15T22:11:52.029 [DEBUG] [Thread-26613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:11:52.049 [DEBUG] [Thread-26613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:11:52.049 [INFO] [Thread-26613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:11:52.052 [DEBUG] [Thread-26613] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:11:52.052 [DEBUG] [Thread-26613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:11:52.052 [DEBUG] [Thread-26613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:11:52.052 [DEBUG] [Thread-26613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:11:52.053 [DEBUG] [Thread-26613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:11:52.053 [DEBUG] [Thread-26613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:11:52.053 [DEBUG] [Thread-26613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:11:52.053 [DEBUG] [Thread-26613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:11:52.053 [DEBUG] [Thread-26613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:11:52.053 [DEBUG] [Thread-26613] [transport.py] [_log()] client lang: <none>
2026-04-15T22:11:52.053 [DEBUG] [Thread-26613] [transport.py] [_log()] server lang: <none>
2026-04-15T22:11:52.053 [DEBUG] [Thread-26613] [transport.py] [_log()] kex follows: False
2026-04-15T22:11:52.053 [DEBUG] [Thread-26613] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:11:52.053 [DEBUG] [Thread-26613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:11:52.053 [DEBUG] [Thread-26613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:11:52.053 [DEBUG] [Thread-26613] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:11:52.054 [DEBUG] [Thread-26613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:11:52.054 [DEBUG] [Thread-26613] [transport.py] [_log()] Compression: none
2026-04-15T22:11:52.054 [DEBUG] [Thread-26613] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:11:52.072 [DEBUG] [Thread-26613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:11:52.073 [DEBUG] [Thread-26613] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:11:52.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:11:52.073 [DEBUG] [Thread-26613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:11:52.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:11:52.074 [DEBUG] [Thread-26613] [transport.py] [_log()] userauth is OK
2026-04-15T22:11:52.074 [DEBUG] [Thread-26613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:11:52.075 [DEBUG] [Thread-26613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:11:52.075 [DEBUG] [Thread-26613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:11:52.075 [DEBUG] [Thread-26613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:11:52.094 [INFO] [Thread-26613] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:11:52.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:11:52.725 [DEBUG] [Thread-26613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:11:52.725 [DEBUG] [Thread-26613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:11:52.726 [DEBUG] [Thread-26613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:11:52.766 [DEBUG] [Thread-26613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:11:52.766 [DEBUG] [Thread-26613] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:11:52.769 [DEBUG] [Thread-26613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:11:52.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:11:52.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:11:52.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:11:52.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:11:52.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:11:52.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:11:52.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:11:52.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:11:52.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:11:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.841102 -999.00   +9.90   7.16     78   +6.40 1 1 1 1 1     0    0 3.08 -20.62 ZNESW 8.0 7.2 112.3 8.0 10.3 -25.0 10.3 -23.7 10.0 -21.7 10.2 -23.6
2026-04-15T22:11:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:11:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:11:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.841102
2026-04-15T22:11:52.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:11:52.795 [DEBUG] [Thread-26613] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:11:52.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:11:52.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:11:52.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:11:52.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:11:52.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:11:43', tmtdew=3.5167, humidity=78.6011, cloud=0.0, wind=11.8224, temperature=9.22459, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:11:11.213', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06724999999999959, -0.02874999999999872, -0.05524999999999913, -0.11450000000000138, -0.042500000000000426, -0.03074999999999939, 0.016000000000000014, 0.028249999999999886, -0.011499999999999844, -0.04499999999999993, -0.06475000000000009, -0.04600000000000115, -0.027000000000001023, -0.00575000000000081, 0.009999999999999787, -0.016000000000000014, 0.02624999999999922, -0.058999999999999275, -0.009500000000000952, -0.013250000000001094, -0.002000000000000668, 0.004249999999998977, -0.011749999999999261, -0.014750000000001151, 0.006499999999999062, -0.08499999999999908, -0.01425000000000054, -0.0024999999999995026, 0.041999999999999815, 0.004000000000001336, 0.050499999999999545, -0.01699999999999946, -0.04275000000000162], zp_timestamp='2026-04-15T20:10:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:11:53.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:11:53.058 [DEBUG] [Thread-26616] [transport.py] [_log()] starting thread (client mode): 0xf1367be0
2026-04-15T22:11:53.058 [DEBUG] [Thread-26616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:11:53.072 [DEBUG] [Thread-26616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:11:53.072 [INFO] [Thread-26616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:11:53.079 [DEBUG] [Thread-26616] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:11:53.079 [DEBUG] [Thread-26616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:11:53.079 [DEBUG] [Thread-26616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:11:53.079 [DEBUG] [Thread-26616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:11:53.079 [DEBUG] [Thread-26616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:11:53.079 [DEBUG] [Thread-26616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:11:53.080 [DEBUG] [Thread-26616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:11:53.080 [DEBUG] [Thread-26616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:11:53.080 [DEBUG] [Thread-26616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:11:53.080 [DEBUG] [Thread-26616] [transport.py] [_log()] client lang: <none>
2026-04-15T22:11:53.080 [DEBUG] [Thread-26616] [transport.py] [_log()] server lang: <none>
2026-04-15T22:11:53.080 [DEBUG] [Thread-26616] [transport.py] [_log()] kex follows: False
2026-04-15T22:11:53.080 [DEBUG] [Thread-26616] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:11:53.080 [DEBUG] [Thread-26616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:11:53.080 [DEBUG] [Thread-26616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:11:53.080 [DEBUG] [Thread-26616] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:11:53.080 [DEBUG] [Thread-26616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:11:53.081 [DEBUG] [Thread-26616] [transport.py] [_log()] Compression: none
2026-04-15T22:11:53.081 [DEBUG] [Thread-26616] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:11:53.138 [DEBUG] [Thread-26616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:11:53.139 [DEBUG] [Thread-26616] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:11:53.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:11:53.140 [DEBUG] [Thread-26616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:11:53.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:11:53.196 [DEBUG] [Thread-26616] [transport.py] [_log()] userauth is OK
2026-04-15T22:11:53.197 [DEBUG] [Thread-26616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:11:53.197 [DEBUG] [Thread-26616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:11:53.197 [DEBUG] [Thread-26616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:11:53.197 [DEBUG] [Thread-26616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:11:53.224 [INFO] [Thread-26616] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:11:53.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:11:53.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:11:54.048 [DEBUG] [Thread-26616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:11:54.049 [DEBUG] [Thread-26616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:11:54.096 [DEBUG] [Thread-26616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:11:54.096 [DEBUG] [Thread-26616] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:11:54.105 [DEBUG] [Thread-26616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:11:54.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:11:54.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')
2026-04-15T22:11:54.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
2026-04-15T22:11:54.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:11:54.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:11:54.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:11:54.150 [DEBUG] [Thread-26616] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:11:57.521 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:11:57.523 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:12:01.389 [DEBUG] [Thread-26618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:12:16.432 [DEBUG] [Thread-26619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:12:24.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:12:24.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:12:24.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
2026-04-15T22:12:24.373 [DEBUG] [Thread-26620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:12:25.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 11, 43), 3.5167, 78.6011, 0.0, 11.8224, 9.22459, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:12:25.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:11:43
2026-04-15T22:12:25.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:12:26.393 [DEBUG] [Thread-26621] [transport.py] [_log()] starting thread (client mode): 0xf13c8430
2026-04-15T22:12:26.393 [DEBUG] [Thread-26621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:12:26.412 [DEBUG] [Thread-26621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:12:26.412 [INFO] [Thread-26621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:12:26.415 [DEBUG] [Thread-26621] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:12:26.415 [DEBUG] [Thread-26621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:12:26.415 [DEBUG] [Thread-26621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:12:26.415 [DEBUG] [Thread-26621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:12:26.415 [DEBUG] [Thread-26621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:12:26.415 [DEBUG] [Thread-26621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:12:26.415 [DEBUG] [Thread-26621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:12:26.415 [DEBUG] [Thread-26621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:12:26.415 [DEBUG] [Thread-26621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:12:26.416 [DEBUG] [Thread-26621] [transport.py] [_log()] client lang: <none>
2026-04-15T22:12:26.416 [DEBUG] [Thread-26621] [transport.py] [_log()] server lang: <none>
2026-04-15T22:12:26.416 [DEBUG] [Thread-26621] [transport.py] [_log()] kex follows: False
2026-04-15T22:12:26.416 [DEBUG] [Thread-26621] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:12:26.416 [DEBUG] [Thread-26621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:12:26.416 [DEBUG] [Thread-26621] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:12:26.416 [DEBUG] [Thread-26621] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:12:26.416 [DEBUG] [Thread-26621] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:12:26.416 [DEBUG] [Thread-26621] [transport.py] [_log()] Compression: none
2026-04-15T22:12:26.416 [DEBUG] [Thread-26621] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:12:26.432 [DEBUG] [Thread-26621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:12:26.432 [DEBUG] [Thread-26621] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:12:26.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:12:26.432 [DEBUG] [Thread-26621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:12:26.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:12:26.433 [DEBUG] [Thread-26621] [transport.py] [_log()] userauth is OK
2026-04-15T22:12:26.434 [DEBUG] [Thread-26621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:12:26.434 [DEBUG] [Thread-26621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:12:26.434 [DEBUG] [Thread-26621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:12:26.434 [DEBUG] [Thread-26621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:12:26.453 [INFO] [Thread-26621] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:12:26.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:12:27.081 [DEBUG] [Thread-26621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:12:27.081 [DEBUG] [Thread-26621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:12:27.081 [DEBUG] [Thread-26621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:12:27.122 [DEBUG] [Thread-26621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:12:27.122 [DEBUG] [Thread-26621] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:12:27.124 [DEBUG] [Thread-26621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:12:27.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:12:27.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:12:27.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:12:27.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:12:27.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:12:27.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:12:27.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:12:27.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:12:27.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:12:27.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.841797 -999.00   +9.90   6.34     78   +6.40 1 1 1 1 1     0    0 3.04 -22.21 ZNESW 6.2 6.3 134.8 8.1 10.3 -25.0 10.3 -23.9 10.0 -21.6 10.2 -23.8
2026-04-15T22:12:27.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:12:27.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:12:27.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.841797
2026-04-15T22:12:27.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:12:27.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:12:27.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:12:27.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:12:27.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:12:27.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:11:43', tmtdew=3.5167, humidity=78.6011, cloud=0.0, wind=11.8224, temperature=9.22459, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:12:11.261', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06724999999999959, -0.02874999999999872, -0.05524999999999913, -0.11450000000000138, -0.042500000000000426, -0.03074999999999939, 0.016000000000000014, 0.028249999999999886, -0.011499999999999844, -0.04499999999999993, -0.06475000000000009, -0.04600000000000115, -0.027000000000001023, -0.00575000000000081, 0.009999999999999787, -0.016000000000000014, 0.02624999999999922, -0.058999999999999275, -0.009500000000000952, -0.013250000000001094, -0.002000000000000668, 0.004249999999998977, -0.011749999999999261, -0.014750000000001151, 0.006499999999999062, -0.08499999999999908, -0.01425000000000054, -0.0024999999999995026, 0.041999999999999815, 0.004000000000001336, 0.050499999999999545, -0.01699999999999946, -0.04275000000000162], zp_timestamp='2026-04-15T20:10:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:12:27.140 [DEBUG] [Thread-26621] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:12:27.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:12:27.388 [DEBUG] [Thread-26624] [transport.py] [_log()] starting thread (client mode): 0xf13e2620
2026-04-15T22:12:27.388 [DEBUG] [Thread-26624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:12:27.404 [DEBUG] [Thread-26624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:12:27.404 [INFO] [Thread-26624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:12:27.411 [DEBUG] [Thread-26624] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:12:27.411 [DEBUG] [Thread-26624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:12:27.411 [DEBUG] [Thread-26624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:12:27.412 [DEBUG] [Thread-26624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:12:27.412 [DEBUG] [Thread-26624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:12:27.412 [DEBUG] [Thread-26624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:12:27.412 [DEBUG] [Thread-26624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:12:27.412 [DEBUG] [Thread-26624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:12:27.412 [DEBUG] [Thread-26624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:12:27.412 [DEBUG] [Thread-26624] [transport.py] [_log()] client lang: <none>
2026-04-15T22:12:27.412 [DEBUG] [Thread-26624] [transport.py] [_log()] server lang: <none>
2026-04-15T22:12:27.412 [DEBUG] [Thread-26624] [transport.py] [_log()] kex follows: False
2026-04-15T22:12:27.412 [DEBUG] [Thread-26624] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:12:27.412 [DEBUG] [Thread-26624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:12:27.413 [DEBUG] [Thread-26624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:12:27.413 [DEBUG] [Thread-26624] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:12:27.413 [DEBUG] [Thread-26624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:12:27.413 [DEBUG] [Thread-26624] [transport.py] [_log()] Compression: none
2026-04-15T22:12:27.413 [DEBUG] [Thread-26624] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:12:27.470 [DEBUG] [Thread-26624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:12:27.470 [DEBUG] [Thread-26624] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:12:27.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:12:27.471 [DEBUG] [Thread-26624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:12:27.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:12:27.527 [DEBUG] [Thread-26624] [transport.py] [_log()] userauth is OK
2026-04-15T22:12:27.527 [DEBUG] [Thread-26624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:12:27.528 [DEBUG] [Thread-26624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:12:27.528 [DEBUG] [Thread-26624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:12:27.528 [DEBUG] [Thread-26624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:12:27.550 [INFO] [Thread-26624] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:12:27.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:12:27.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:12:28.389 [DEBUG] [Thread-26624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:12:28.390 [DEBUG] [Thread-26624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:12:28.437 [DEBUG] [Thread-26624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:12:28.437 [DEBUG] [Thread-26624] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:12:28.447 [DEBUG] [Thread-26624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:12:28.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:12:28.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')
2026-04-15T22:12:28.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
2026-04-15T22:12:28.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:12:28.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:12:28.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:12:28.482 [DEBUG] [Thread-26624] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:12:31.461 [DEBUG] [Thread-26626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:12:46.501 [DEBUG] [Thread-26627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:12:57.724 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:12:57.725 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:12:58.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:12:58.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:12:58.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
2026-04-15T22:12:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 12, 19), 4.04011, 75.9, 0.0, 9.75816, 9.56219, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:12:59.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:12:19
2026-04-15T22:13:00.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:13:00.687 [DEBUG] [Thread-26628] [transport.py] [_log()] starting thread (client mode): 0xf1337250
2026-04-15T22:13:00.688 [DEBUG] [Thread-26628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:13:00.707 [DEBUG] [Thread-26628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:13:00.707 [INFO] [Thread-26628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:13:00.710 [DEBUG] [Thread-26628] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:13:00.710 [DEBUG] [Thread-26628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:13:00.711 [DEBUG] [Thread-26628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:13:00.711 [DEBUG] [Thread-26628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:13:00.711 [DEBUG] [Thread-26628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:13:00.711 [DEBUG] [Thread-26628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:13:00.711 [DEBUG] [Thread-26628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:13:00.711 [DEBUG] [Thread-26628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:13:00.711 [DEBUG] [Thread-26628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:13:00.711 [DEBUG] [Thread-26628] [transport.py] [_log()] client lang: <none>
2026-04-15T22:13:00.711 [DEBUG] [Thread-26628] [transport.py] [_log()] server lang: <none>
2026-04-15T22:13:00.711 [DEBUG] [Thread-26628] [transport.py] [_log()] kex follows: False
2026-04-15T22:13:00.711 [DEBUG] [Thread-26628] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:13:00.712 [DEBUG] [Thread-26628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:13:00.712 [DEBUG] [Thread-26628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:13:00.712 [DEBUG] [Thread-26628] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:13:00.712 [DEBUG] [Thread-26628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:13:00.712 [DEBUG] [Thread-26628] [transport.py] [_log()] Compression: none
2026-04-15T22:13:00.712 [DEBUG] [Thread-26628] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:13:00.728 [DEBUG] [Thread-26628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:13:00.728 [DEBUG] [Thread-26628] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:13:00.729 [DEBUG] [Thread-26628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:13:00.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:13:00.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:13:00.772 [DEBUG] [Thread-26628] [transport.py] [_log()] userauth is OK
2026-04-15T22:13:00.773 [DEBUG] [Thread-26628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:13:00.773 [DEBUG] [Thread-26628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:13:00.773 [DEBUG] [Thread-26628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:13:00.773 [DEBUG] [Thread-26628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:13:00.809 [INFO] [Thread-26628] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:13:00.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:13:01.417 [DEBUG] [Thread-26628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:13:01.417 [DEBUG] [Thread-26628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:13:01.418 [DEBUG] [Thread-26628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:13:01.458 [DEBUG] [Thread-26628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:13:01.458 [DEBUG] [Thread-26628] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:13:01.461 [DEBUG] [Thread-26628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:13:01.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:13:01.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:13:01.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:13:01.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:13:01.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:13:01.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:13:01.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:13:01.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:13:01.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:13:01.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.842144 -999.00   +9.90   5.23     78   +6.40 1 1 1 1 1     0    0 3.01 -22.98 ZNESW 3.1 5.2 120.4 9.0 10.4 -25.0 10.2 -23.7 9.9 -21.7 10.2 -23.7
2026-04-15T22:13:01.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:13:01.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:13:01.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.842144
2026-04-15T22:13:01.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:13:01.482 [DEBUG] [Thread-26628] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:13:01.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:13:01.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:13:01.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:13:01.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:13:01.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:12:19', tmtdew=4.04011, humidity=75.9, cloud=0.0, wind=9.75816, temperature=9.56219, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:12:41.242', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06724999999999959, -0.02874999999999872, -0.05524999999999913, -0.11450000000000138, -0.042500000000000426, -0.03074999999999939, 0.016000000000000014, 0.028249999999999886, -0.011499999999999844, -0.04499999999999993, -0.06475000000000009, -0.04600000000000115, -0.027000000000001023, -0.00575000000000081, 0.009999999999999787, -0.016000000000000014, 0.02624999999999922, -0.058999999999999275, -0.009500000000000952, -0.013250000000001094, -0.002000000000000668, 0.004249999999998977, -0.011749999999999261, -0.014750000000001151, 0.006499999999999062, -0.08499999999999908, -0.01425000000000054, -0.0024999999999995026, 0.041999999999999815, 0.004000000000001336, 0.050499999999999545, -0.01699999999999946, -0.04275000000000162], zp_timestamp='2026-04-15T20:10:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:13:01.529 [DEBUG] [Thread-26631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:13:01.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:13:01.721 [DEBUG] [Thread-26632] [transport.py] [_log()] starting thread (client mode): 0xf1335cf0
2026-04-15T22:13:01.721 [DEBUG] [Thread-26632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:13:01.735 [DEBUG] [Thread-26632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:13:01.735 [INFO] [Thread-26632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:13:01.742 [DEBUG] [Thread-26632] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:13:01.742 [DEBUG] [Thread-26632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:13:01.742 [DEBUG] [Thread-26632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:13:01.742 [DEBUG] [Thread-26632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:13:01.742 [DEBUG] [Thread-26632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:13:01.742 [DEBUG] [Thread-26632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:13:01.743 [DEBUG] [Thread-26632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:13:01.743 [DEBUG] [Thread-26632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:13:01.743 [DEBUG] [Thread-26632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:13:01.743 [DEBUG] [Thread-26632] [transport.py] [_log()] client lang: <none>
2026-04-15T22:13:01.743 [DEBUG] [Thread-26632] [transport.py] [_log()] server lang: <none>
2026-04-15T22:13:01.743 [DEBUG] [Thread-26632] [transport.py] [_log()] kex follows: False
2026-04-15T22:13:01.743 [DEBUG] [Thread-26632] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:13:01.743 [DEBUG] [Thread-26632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:13:01.743 [DEBUG] [Thread-26632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:13:01.743 [DEBUG] [Thread-26632] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:13:01.743 [DEBUG] [Thread-26632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:13:01.743 [DEBUG] [Thread-26632] [transport.py] [_log()] Compression: none
2026-04-15T22:13:01.743 [DEBUG] [Thread-26632] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:13:01.802 [DEBUG] [Thread-26632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:13:01.802 [DEBUG] [Thread-26632] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:13:01.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:13:01.803 [DEBUG] [Thread-26632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:13:01.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:13:01.862 [DEBUG] [Thread-26632] [transport.py] [_log()] userauth is OK
2026-04-15T22:13:01.862 [DEBUG] [Thread-26632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:13:01.862 [DEBUG] [Thread-26632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:13:01.862 [DEBUG] [Thread-26632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:13:01.862 [DEBUG] [Thread-26632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:13:01.892 [INFO] [Thread-26632] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:13:01.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:13:01.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:13:02.756 [DEBUG] [Thread-26632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:13:02.756 [DEBUG] [Thread-26632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:13:02.804 [DEBUG] [Thread-26632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:13:02.804 [DEBUG] [Thread-26632] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:13:02.813 [DEBUG] [Thread-26632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:13:02.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:13:02.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')
2026-04-15T22:13:02.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') -> 00000000
2026-04-15T22:13:02.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:13:02.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:13:02.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:13:02.849 [DEBUG] [Thread-26632] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:13:04.317 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:13:13.209 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:13:16.567 [DEBUG] [Thread-26634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:13:17.320 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:13:24.519 [DEBUG] [Thread-26635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:13:31.597 [DEBUG] [Thread-26636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:13:32.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:13:32.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:13:32.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T22:13:34.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 12, 55), 4.02705, 75.9666, 0.0, 9.423, 9.52919, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:13:34.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:12:55
2026-04-15T22:13:34.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:13:34.984 [DEBUG] [Thread-26637] [transport.py] [_log()] starting thread (client mode): 0xf13345b0
2026-04-15T22:13:34.984 [DEBUG] [Thread-26637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:13:35.003 [DEBUG] [Thread-26637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:13:35.003 [INFO] [Thread-26637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:13:35.006 [DEBUG] [Thread-26637] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:13:35.006 [DEBUG] [Thread-26637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] client lang: <none>
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] server lang: <none>
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] kex follows: False
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] Compression: none
2026-04-15T22:13:35.007 [DEBUG] [Thread-26637] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:13:35.023 [DEBUG] [Thread-26637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:13:35.023 [DEBUG] [Thread-26637] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:13:35.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:13:35.024 [DEBUG] [Thread-26637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:13:35.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:13:35.024 [DEBUG] [Thread-26637] [transport.py] [_log()] userauth is OK
2026-04-15T22:13:35.025 [DEBUG] [Thread-26637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:13:35.025 [DEBUG] [Thread-26637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:13:35.025 [DEBUG] [Thread-26637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:13:35.025 [DEBUG] [Thread-26637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:13:35.043 [INFO] [Thread-26637] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:13:35.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:13:35.717 [DEBUG] [Thread-26637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:13:35.717 [DEBUG] [Thread-26637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:13:35.718 [DEBUG] [Thread-26637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:13:35.758 [DEBUG] [Thread-26637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:13:35.758 [DEBUG] [Thread-26637] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:13:35.761 [DEBUG] [Thread-26637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:13:35.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:13:35.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:13:35.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:13:35.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:13:35.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:13:35.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:13:35.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:13:35.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:13:35.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:13:35.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.842491 -999.00   +9.90   6.18     78   +6.40 1 1 1 1 1     0    0 3.00 -23.98 ZNESW 5.2 6.2 78.4 9.7 10.4 -24.9 10.3 -23.8 9.9 -21.8 10.2 -23.7
2026-04-15T22:13:35.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:13:35.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:13:35.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.842491
2026-04-15T22:13:35.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:13:35.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:13:35.785 [DEBUG] [Thread-26637] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:13:35.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:13:35.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:13:35.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:13:35.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:12:55', tmtdew=4.02705, humidity=75.9666, cloud=0.0, wind=9.423, temperature=9.52919, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:13:11.222', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06724999999999959, -0.02874999999999872, -0.05524999999999913, -0.11450000000000138, -0.042500000000000426, -0.03074999999999939, 0.016000000000000014, 0.028249999999999886, -0.011499999999999844, -0.04499999999999993, -0.06475000000000009, -0.04600000000000115, -0.027000000000001023, -0.00575000000000081, 0.009999999999999787, -0.016000000000000014, 0.02624999999999922, -0.058999999999999275, -0.009500000000000952, -0.013250000000001094, -0.002000000000000668, 0.004249999999998977, -0.011749999999999261, -0.014750000000001151, 0.006499999999999062, -0.08499999999999908, -0.01425000000000054, -0.0024999999999995026, 0.041999999999999815, 0.004000000000001336, 0.050499999999999545, -0.01699999999999946, -0.04275000000000162], zp_timestamp='2026-04-15T20:10:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:13:36.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:13:36.041 [DEBUG] [Thread-26640] [transport.py] [_log()] starting thread (client mode): 0xf13e3eb0
2026-04-15T22:13:36.041 [DEBUG] [Thread-26640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:13:36.056 [DEBUG] [Thread-26640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:13:36.056 [INFO] [Thread-26640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:13:36.063 [DEBUG] [Thread-26640] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] client lang: <none>
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] server lang: <none>
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] kex follows: False
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:13:36.064 [DEBUG] [Thread-26640] [transport.py] [_log()] Compression: none
2026-04-15T22:13:36.065 [DEBUG] [Thread-26640] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:13:36.121 [DEBUG] [Thread-26640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:13:36.122 [DEBUG] [Thread-26640] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:13:36.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:13:36.123 [DEBUG] [Thread-26640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:13:36.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:13:36.178 [DEBUG] [Thread-26640] [transport.py] [_log()] userauth is OK
2026-04-15T22:13:36.179 [DEBUG] [Thread-26640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:13:36.179 [DEBUG] [Thread-26640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:13:36.179 [DEBUG] [Thread-26640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:13:36.179 [DEBUG] [Thread-26640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:13:36.209 [INFO] [Thread-26640] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:13:36.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:13:36.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:13:37.014 [DEBUG] [Thread-26640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:13:37.014 [DEBUG] [Thread-26640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:13:37.062 [DEBUG] [Thread-26640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:13:37.062 [DEBUG] [Thread-26640] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:13:37.071 [DEBUG] [Thread-26640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:13:37.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:13:37.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')
2026-04-15T22:13:37.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
2026-04-15T22:13:37.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:13:37.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:13:37.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:13:37.107 [DEBUG] [Thread-26640] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:13:46.628 [DEBUG] [Thread-26642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:13:57.939 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:13:57.940 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:14:01.670 [DEBUG] [Thread-26643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:14:07.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:14:07.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:14:07.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
2026-04-15T22:14:08.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 13, 30), 4.01493, 76.0329, 0.0, 9.49356, 9.52919, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:14:08.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:13:30
2026-04-15T22:14:08.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:14:09.272 [DEBUG] [Thread-26644] [transport.py] [_log()] starting thread (client mode): 0xee906b90
2026-04-15T22:14:09.272 [DEBUG] [Thread-26644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:14:09.291 [DEBUG] [Thread-26644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:14:09.292 [INFO] [Thread-26644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:14:09.294 [DEBUG] [Thread-26644] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:14:09.294 [DEBUG] [Thread-26644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:14:09.294 [DEBUG] [Thread-26644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:14:09.294 [DEBUG] [Thread-26644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:14:09.294 [DEBUG] [Thread-26644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:14:09.295 [DEBUG] [Thread-26644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:14:09.295 [DEBUG] [Thread-26644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:14:09.295 [DEBUG] [Thread-26644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:14:09.295 [DEBUG] [Thread-26644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:14:09.295 [DEBUG] [Thread-26644] [transport.py] [_log()] client lang: <none>
2026-04-15T22:14:09.295 [DEBUG] [Thread-26644] [transport.py] [_log()] server lang: <none>
2026-04-15T22:14:09.295 [DEBUG] [Thread-26644] [transport.py] [_log()] kex follows: False
2026-04-15T22:14:09.295 [DEBUG] [Thread-26644] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:14:09.295 [DEBUG] [Thread-26644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:14:09.295 [DEBUG] [Thread-26644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:14:09.295 [DEBUG] [Thread-26644] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:14:09.296 [DEBUG] [Thread-26644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:14:09.296 [DEBUG] [Thread-26644] [transport.py] [_log()] Compression: none
2026-04-15T22:14:09.296 [DEBUG] [Thread-26644] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:14:09.313 [DEBUG] [Thread-26644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:14:09.313 [DEBUG] [Thread-26644] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:14:09.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:14:09.314 [DEBUG] [Thread-26644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:14:09.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:14:09.315 [DEBUG] [Thread-26644] [transport.py] [_log()] userauth is OK
2026-04-15T22:14:09.315 [DEBUG] [Thread-26644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:14:09.315 [DEBUG] [Thread-26644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:14:09.315 [DEBUG] [Thread-26644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:14:09.315 [DEBUG] [Thread-26644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:14:09.340 [INFO] [Thread-26644] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:14:09.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:14:09.968 [DEBUG] [Thread-26644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:14:09.968 [DEBUG] [Thread-26644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:14:09.969 [DEBUG] [Thread-26644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:14:10.009 [DEBUG] [Thread-26644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:14:10.009 [DEBUG] [Thread-26644] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:14:10.012 [DEBUG] [Thread-26644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:14:10.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:14:10.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:14:10.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:14:10.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:14:10.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:14:10.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:14:10.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:14:10.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:14:10.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:14:10.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.842838 -999.00   +9.90   5.02     78   +6.40 1 1 1 1 1     0    0 2.94 -24.44 ZNESW 6.1 5.0 106.9 7.5 10.3 -25.1 10.3 -23.8 10.0 -21.6 10.2 -23.7
2026-04-15T22:14:10.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:14:10.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:14:10.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.842838
2026-04-15T22:14:10.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:14:10.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:14:10.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:14:10.035 [DEBUG] [Thread-26644] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:14:10.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:14:10.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:14:10.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:13:30', tmtdew=4.01493, humidity=76.0329, cloud=0.0, wind=9.49356, temperature=9.52919, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:13:41.203', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06724999999999959, -0.02874999999999872, -0.05524999999999913, -0.11450000000000138, -0.042500000000000426, -0.03074999999999939, 0.016000000000000014, 0.028249999999999886, -0.011499999999999844, -0.04499999999999993, -0.06475000000000009, -0.04600000000000115, -0.027000000000001023, -0.00575000000000081, 0.009999999999999787, -0.016000000000000014, 0.02624999999999922, -0.058999999999999275, -0.009500000000000952, -0.013250000000001094, -0.002000000000000668, 0.004249999999998977, -0.011749999999999261, -0.014750000000001151, 0.006499999999999062, -0.08499999999999908, -0.01425000000000054, -0.0024999999999995026, 0.041999999999999815, 0.004000000000001336, 0.050499999999999545, -0.01699999999999946, -0.04275000000000162], zp_timestamp='2026-04-15T20:10:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:14:10.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:14:10.290 [DEBUG] [Thread-26647] [transport.py] [_log()] starting thread (client mode): 0xf1367af0
2026-04-15T22:14:10.290 [DEBUG] [Thread-26647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:14:10.307 [DEBUG] [Thread-26647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:14:10.307 [INFO] [Thread-26647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:14:10.317 [DEBUG] [Thread-26647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:14:10.317 [DEBUG] [Thread-26647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:14:10.317 [DEBUG] [Thread-26647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:14:10.317 [DEBUG] [Thread-26647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:14:10.317 [DEBUG] [Thread-26647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:14:10.317 [DEBUG] [Thread-26647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:14:10.318 [DEBUG] [Thread-26647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:14:10.318 [DEBUG] [Thread-26647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:14:10.318 [DEBUG] [Thread-26647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:14:10.318 [DEBUG] [Thread-26647] [transport.py] [_log()] client lang: <none>
2026-04-15T22:14:10.318 [DEBUG] [Thread-26647] [transport.py] [_log()] server lang: <none>
2026-04-15T22:14:10.318 [DEBUG] [Thread-26647] [transport.py] [_log()] kex follows: False
2026-04-15T22:14:10.318 [DEBUG] [Thread-26647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:14:10.318 [DEBUG] [Thread-26647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:14:10.318 [DEBUG] [Thread-26647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:14:10.318 [DEBUG] [Thread-26647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:14:10.318 [DEBUG] [Thread-26647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:14:10.318 [DEBUG] [Thread-26647] [transport.py] [_log()] Compression: none
2026-04-15T22:14:10.319 [DEBUG] [Thread-26647] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:14:10.378 [DEBUG] [Thread-26647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:14:10.379 [DEBUG] [Thread-26647] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:14:10.379 [DEBUG] [Thread-26647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:14:10.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:14:10.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:14:10.437 [DEBUG] [Thread-26647] [transport.py] [_log()] userauth is OK
2026-04-15T22:14:10.438 [DEBUG] [Thread-26647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:14:10.438 [DEBUG] [Thread-26647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:14:10.438 [DEBUG] [Thread-26647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:14:10.438 [DEBUG] [Thread-26647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:14:10.463 [INFO] [Thread-26647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22: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
2026-04-15T22:14:10.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:14:11.249 [DEBUG] [Thread-26647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:14:11.249 [DEBUG] [Thread-26647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:14:11.297 [DEBUG] [Thread-26647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:14:11.297 [DEBUG] [Thread-26647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:14:11.307 [DEBUG] [Thread-26647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:14:11.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:14:11.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')
2026-04-15T22:14:11.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
2026-04-15T22:14:11.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:14:11.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:14:11.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:14:11.343 [DEBUG] [Thread-26647] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:14:16.699 [DEBUG] [Thread-26649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:14:24.663 [DEBUG] [Thread-26650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:14:31.740 [DEBUG] [Thread-26651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:14:40.137 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:14:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:14:41.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:14:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T22:14:42.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 14, 6), 4.00541, 76.0827, 0.0, 9.9522, 9.5126, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:14:42.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:14:06
2026-04-15T22:14:43.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:14:43.645 [DEBUG] [Thread-26652] [transport.py] [_log()] starting thread (client mode): 0xee906fb0
2026-04-15T22:14:43.645 [DEBUG] [Thread-26652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:14:43.664 [DEBUG] [Thread-26652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:14:43.664 [INFO] [Thread-26652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:14:43.667 [DEBUG] [Thread-26652] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:14:43.668 [DEBUG] [Thread-26652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:14:43.668 [DEBUG] [Thread-26652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:14:43.668 [DEBUG] [Thread-26652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:14:43.668 [DEBUG] [Thread-26652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:14:43.668 [DEBUG] [Thread-26652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:14:43.668 [DEBUG] [Thread-26652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:14:43.668 [DEBUG] [Thread-26652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:14:43.668 [DEBUG] [Thread-26652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:14:43.668 [DEBUG] [Thread-26652] [transport.py] [_log()] client lang: <none>
2026-04-15T22:14:43.668 [DEBUG] [Thread-26652] [transport.py] [_log()] server lang: <none>
2026-04-15T22:14:43.668 [DEBUG] [Thread-26652] [transport.py] [_log()] kex follows: False
2026-04-15T22:14:43.668 [DEBUG] [Thread-26652] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:14:43.669 [DEBUG] [Thread-26652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:14:43.669 [DEBUG] [Thread-26652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:14:43.669 [DEBUG] [Thread-26652] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:14:43.669 [DEBUG] [Thread-26652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:14:43.669 [DEBUG] [Thread-26652] [transport.py] [_log()] Compression: none
2026-04-15T22:14:43.669 [DEBUG] [Thread-26652] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:14:43.687 [DEBUG] [Thread-26652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:14:43.688 [DEBUG] [Thread-26652] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:14:43.688 [DEBUG] [Thread-26652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:14:43.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:14:43.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:14:43.690 [DEBUG] [Thread-26652] [transport.py] [_log()] userauth is OK
2026-04-15T22:14:43.690 [DEBUG] [Thread-26652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:14:43.690 [DEBUG] [Thread-26652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:14:43.690 [DEBUG] [Thread-26652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:14:43.690 [DEBUG] [Thread-26652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:14:43.714 [INFO] [Thread-26652] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:14:43.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:14:44.373 [DEBUG] [Thread-26652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:14:44.373 [DEBUG] [Thread-26652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:14:44.374 [DEBUG] [Thread-26652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:14:44.415 [DEBUG] [Thread-26652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:14:44.415 [DEBUG] [Thread-26652] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:14:44.417 [DEBUG] [Thread-26652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:14:44.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:14:44.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:14:44.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:14:44.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:14:44.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:14:44.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:14:44.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:14:44.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:14:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:14:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.843186 -999.00   +9.90   7.33     78   +6.40 1 1 1 1 1     0    0 2.84 -26.00 ZNESW 5.3 7.3 72.4 8.9 10.3 -25.2 10.2 -23.7 10.0 -21.7 10.2 -23.7
2026-04-15T22:14:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:14:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:14:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.843186
2026-04-15T22:14:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:14:44.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:14:44.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:14:44.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:14:44.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:14:44.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:14:06', tmtdew=4.00541, humidity=76.0827, cloud=0.0, wind=9.9522, temperature=9.5126, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:14:11.270', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06724999999999959, -0.02874999999999872, -0.05524999999999913, -0.11450000000000138, -0.042500000000000426, -0.03074999999999939, 0.016000000000000014, 0.028249999999999886, -0.011499999999999844, -0.04499999999999993, -0.06475000000000009, -0.04600000000000115, -0.027000000000001023, -0.00575000000000081, 0.009999999999999787, -0.016000000000000014, 0.02624999999999922, -0.058999999999999275, -0.009500000000000952, -0.013250000000001094, -0.002000000000000668, 0.004249999999998977, -0.011749999999999261, -0.014750000000001151, 0.006499999999999062, -0.08499999999999908, -0.01425000000000054, -0.0024999999999995026, 0.041999999999999815, 0.004000000000001336, 0.050499999999999545, -0.01699999999999946, -0.04275000000000162], zp_timestamp='2026-04-15T20:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:14:44.438 [DEBUG] [Thread-26652] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:14:44.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:14:44.691 [DEBUG] [Thread-26655] [transport.py] [_log()] starting thread (client mode): 0xee906440
2026-04-15T22:14:44.691 [DEBUG] [Thread-26655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:14:44.707 [DEBUG] [Thread-26655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:14:44.707 [INFO] [Thread-26655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:14:44.719 [DEBUG] [Thread-26655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:14:44.719 [DEBUG] [Thread-26655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:14:44.719 [DEBUG] [Thread-26655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:14:44.719 [DEBUG] [Thread-26655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:14:44.719 [DEBUG] [Thread-26655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:14:44.719 [DEBUG] [Thread-26655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:14:44.719 [DEBUG] [Thread-26655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:14:44.719 [DEBUG] [Thread-26655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:14:44.719 [DEBUG] [Thread-26655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:14:44.720 [DEBUG] [Thread-26655] [transport.py] [_log()] client lang: <none>
2026-04-15T22:14:44.720 [DEBUG] [Thread-26655] [transport.py] [_log()] server lang: <none>
2026-04-15T22:14:44.720 [DEBUG] [Thread-26655] [transport.py] [_log()] kex follows: False
2026-04-15T22:14:44.720 [DEBUG] [Thread-26655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:14:44.720 [DEBUG] [Thread-26655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:14:44.720 [DEBUG] [Thread-26655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:14:44.720 [DEBUG] [Thread-26655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:14:44.720 [DEBUG] [Thread-26655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:14:44.720 [DEBUG] [Thread-26655] [transport.py] [_log()] Compression: none
2026-04-15T22:14:44.720 [DEBUG] [Thread-26655] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:14:44.775 [DEBUG] [Thread-26655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:14:44.776 [DEBUG] [Thread-26655] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:14:44.776 [DEBUG] [Thread-26655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:14:44.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:14:44.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:14:44.832 [DEBUG] [Thread-26655] [transport.py] [_log()] userauth is OK
2026-04-15T22:14:44.833 [DEBUG] [Thread-26655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:14:44.833 [DEBUG] [Thread-26655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:14:44.833 [DEBUG] [Thread-26655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:14:44.833 [DEBUG] [Thread-26655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:14:44.860 [INFO] [Thread-26655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:14:44.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:14:44.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:14:45.709 [DEBUG] [Thread-26655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:14:45.710 [DEBUG] [Thread-26655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:14:45.757 [DEBUG] [Thread-26655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:14:45.757 [DEBUG] [Thread-26655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:14:45.767 [DEBUG] [Thread-26655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:14:45.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:14:45.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')
2026-04-15T22:14:45.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
2026-04-15T22:14:45.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:14:45.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:14:45.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:14:45.802 [DEBUG] [Thread-26655] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:14:46.768 [DEBUG] [Thread-26657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:14:58.146 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:14:58.147 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:15:01.809 [DEBUG] [Thread-26658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:15:15.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:15:15.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:15:15.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
2026-04-15T22:15:16.835 [DEBUG] [Thread-26659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:15:17.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 14, 41), 3.38054, 79.3316, 0.0, 11.6107, 9.12545, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:15:17.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:14:41
2026-04-15T22:15:17.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:15:18.097 [DEBUG] [Thread-26660] [transport.py] [_log()] starting thread (client mode): 0xee904580
2026-04-15T22:15:18.097 [DEBUG] [Thread-26660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:15:18.113 [DEBUG] [Thread-26660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:15:18.113 [INFO] [Thread-26660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:15:18.116 [DEBUG] [Thread-26660] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:15:18.116 [DEBUG] [Thread-26660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:15:18.116 [DEBUG] [Thread-26660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:15:18.116 [DEBUG] [Thread-26660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:15:18.116 [DEBUG] [Thread-26660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:15:18.116 [DEBUG] [Thread-26660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:15:18.116 [DEBUG] [Thread-26660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:15:18.116 [DEBUG] [Thread-26660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:15:18.117 [DEBUG] [Thread-26660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:15:18.117 [DEBUG] [Thread-26660] [transport.py] [_log()] client lang: <none>
2026-04-15T22:15:18.117 [DEBUG] [Thread-26660] [transport.py] [_log()] server lang: <none>
2026-04-15T22:15:18.117 [DEBUG] [Thread-26660] [transport.py] [_log()] kex follows: False
2026-04-15T22:15:18.117 [DEBUG] [Thread-26660] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:15:18.117 [DEBUG] [Thread-26660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:15:18.117 [DEBUG] [Thread-26660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:15:18.117 [DEBUG] [Thread-26660] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:15:18.117 [DEBUG] [Thread-26660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:15:18.117 [DEBUG] [Thread-26660] [transport.py] [_log()] Compression: none
2026-04-15T22:15:18.117 [DEBUG] [Thread-26660] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:15:18.134 [DEBUG] [Thread-26660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:15:18.135 [DEBUG] [Thread-26660] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:15:18.135 [DEBUG] [Thread-26660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:15:18.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:15:18.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:15:18.136 [DEBUG] [Thread-26660] [transport.py] [_log()] userauth is OK
2026-04-15T22:15:18.136 [DEBUG] [Thread-26660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:15:18.137 [DEBUG] [Thread-26660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:15:18.137 [DEBUG] [Thread-26660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:15:18.137 [DEBUG] [Thread-26660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:15:18.155 [INFO] [Thread-26660] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:15:18.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:15:18.799 [DEBUG] [Thread-26660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:15:18.799 [DEBUG] [Thread-26660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:15:18.800 [DEBUG] [Thread-26660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:15:18.840 [DEBUG] [Thread-26660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:15:18.840 [DEBUG] [Thread-26660] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:15:18.842 [DEBUG] [Thread-26660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:15:18.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:15:18.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:15:18.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:15:18.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:15:18.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:15:18.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:15:18.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:15:18.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:15:18.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:15:18.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.843533 -999.00   +9.80   9.92     79   +6.40 1 1 1 1 1     0    0 2.90 -25.01 ZNESW 6.5 9.9 67.9 12.2 10.3 -25.3 10.2 -23.9 10.0 -21.8 10.2 -23.8
2026-04-15T22:15:18.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:15:18.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:15:18.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.843533
2026-04-15T22:15:18.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:15:18.866 [DEBUG] [Thread-26660] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:15:18.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:15:18.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:15:18.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:15:18.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:15:18.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:14:41', tmtdew=3.38054, humidity=79.3316, cloud=0.0, wind=11.6107, temperature=9.12545, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:14:41.251', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06724999999999959, -0.02874999999999872, -0.05524999999999913, -0.11450000000000138, -0.042500000000000426, -0.03074999999999939, 0.016000000000000014, 0.028249999999999886, -0.011499999999999844, -0.04499999999999993, -0.06475000000000009, -0.04600000000000115, -0.027000000000001023, -0.00575000000000081, 0.009999999999999787, -0.016000000000000014, 0.02624999999999922, -0.058999999999999275, -0.009500000000000952, -0.013250000000001094, -0.002000000000000668, 0.004249999999998977, -0.011749999999999261, -0.014750000000001151, 0.006499999999999062, -0.08499999999999908, -0.01425000000000054, -0.0024999999999995026, 0.041999999999999815, 0.004000000000001336, 0.050499999999999545, -0.01699999999999946, -0.04275000000000162], zp_timestamp='2026-04-15T20:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:15:19.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:15:19.123 [DEBUG] [Thread-26663] [transport.py] [_log()] starting thread (client mode): 0xee907d30
2026-04-15T22:15:19.124 [DEBUG] [Thread-26663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:15:19.138 [DEBUG] [Thread-26663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:15:19.138 [INFO] [Thread-26663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:15:19.149 [DEBUG] [Thread-26663] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:15:19.149 [DEBUG] [Thread-26663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:15:19.149 [DEBUG] [Thread-26663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:15:19.149 [DEBUG] [Thread-26663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:15:19.149 [DEBUG] [Thread-26663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:15:19.149 [DEBUG] [Thread-26663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:15:19.150 [DEBUG] [Thread-26663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:15:19.150 [DEBUG] [Thread-26663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:15:19.150 [DEBUG] [Thread-26663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:15:19.150 [DEBUG] [Thread-26663] [transport.py] [_log()] client lang: <none>
2026-04-15T22:15:19.150 [DEBUG] [Thread-26663] [transport.py] [_log()] server lang: <none>
2026-04-15T22:15:19.150 [DEBUG] [Thread-26663] [transport.py] [_log()] kex follows: False
2026-04-15T22:15:19.150 [DEBUG] [Thread-26663] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:15:19.150 [DEBUG] [Thread-26663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:15:19.150 [DEBUG] [Thread-26663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:15:19.150 [DEBUG] [Thread-26663] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:15:19.150 [DEBUG] [Thread-26663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:15:19.151 [DEBUG] [Thread-26663] [transport.py] [_log()] Compression: none
2026-04-15T22:15:19.151 [DEBUG] [Thread-26663] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:15:19.209 [DEBUG] [Thread-26663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:15:19.209 [DEBUG] [Thread-26663] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:15:19.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:15:19.210 [DEBUG] [Thread-26663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:15:19.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:15:19.268 [DEBUG] [Thread-26663] [transport.py] [_log()] userauth is OK
2026-04-15T22:15:19.268 [DEBUG] [Thread-26663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:15:19.268 [DEBUG] [Thread-26663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:15:19.268 [DEBUG] [Thread-26663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:15:19.268 [DEBUG] [Thread-26663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:15:19.293 [INFO] [Thread-26663] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:15:19.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:15:19.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:15:20.127 [DEBUG] [Thread-26663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:15:20.127 [DEBUG] [Thread-26663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:15:20.175 [DEBUG] [Thread-26663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:15:20.175 [DEBUG] [Thread-26663] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:15:20.183 [DEBUG] [Thread-26663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:15:20.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:15:20.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')
2026-04-15T22:15:20.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
2026-04-15T22:15:20.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:15:20.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:15:20.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:15:20.217 [DEBUG] [Thread-26663] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:15:24.815 [DEBUG] [Thread-26665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:15:31.864 [DEBUG] [Thread-26666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:15:46.907 [DEBUG] [Thread-26667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:15:50.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:15:50.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:15:50.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T22:15:51.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 15, 18), 4.02215, 75.7655, 0.0, 9.0702, 9.51283, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:15:51.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:15:18
2026-04-15T22:15:51.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:15:52.404 [DEBUG] [Thread-26668] [transport.py] [_log()] starting thread (client mode): 0xee9923b0
2026-04-15T22:15:52.404 [DEBUG] [Thread-26668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:15:52.422 [DEBUG] [Thread-26668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:15:52.422 [INFO] [Thread-26668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:15:52.425 [DEBUG] [Thread-26668] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:15:52.425 [DEBUG] [Thread-26668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:15:52.426 [DEBUG] [Thread-26668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:15:52.426 [DEBUG] [Thread-26668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:15:52.426 [DEBUG] [Thread-26668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:15:52.426 [DEBUG] [Thread-26668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:15:52.426 [DEBUG] [Thread-26668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:15:52.426 [DEBUG] [Thread-26668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:15:52.426 [DEBUG] [Thread-26668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:15:52.426 [DEBUG] [Thread-26668] [transport.py] [_log()] client lang: <none>
2026-04-15T22:15:52.426 [DEBUG] [Thread-26668] [transport.py] [_log()] server lang: <none>
2026-04-15T22:15:52.426 [DEBUG] [Thread-26668] [transport.py] [_log()] kex follows: False
2026-04-15T22:15:52.426 [DEBUG] [Thread-26668] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:15:52.427 [DEBUG] [Thread-26668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:15:52.427 [DEBUG] [Thread-26668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:15:52.427 [DEBUG] [Thread-26668] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:15:52.427 [DEBUG] [Thread-26668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:15:52.427 [DEBUG] [Thread-26668] [transport.py] [_log()] Compression: none
2026-04-15T22:15:52.427 [DEBUG] [Thread-26668] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:15:52.443 [DEBUG] [Thread-26668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:15:52.443 [DEBUG] [Thread-26668] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:15:52.444 [DEBUG] [Thread-26668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:15:52.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:15:52.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:15:52.446 [DEBUG] [Thread-26668] [transport.py] [_log()] userauth is OK
2026-04-15T22:15:52.446 [DEBUG] [Thread-26668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:15:52.446 [DEBUG] [Thread-26668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:15:52.446 [DEBUG] [Thread-26668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:15:52.446 [DEBUG] [Thread-26668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:15:52.465 [INFO] [Thread-26668] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:15:52.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:15:53.056 [DEBUG] [Thread-26668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:15:53.056 [DEBUG] [Thread-26668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:15:53.057 [DEBUG] [Thread-26668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:15:53.097 [DEBUG] [Thread-26668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:15:53.097 [DEBUG] [Thread-26668] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:15:53.099 [DEBUG] [Thread-26668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:15:53.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:15:53.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:15:53.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:15:53.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:15:53.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:15:53.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:15:53.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:15:53.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:15:53.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:15:53.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.844227 -999.00   +9.70   4.85     79   +6.40 1 1 1 1 1     0    0 2.75 -30.40 ZNESW 4.1 4.8 90.5 10.2 10.2 -25.2 10.2 -23.8 9.9 -21.8 10.2 -23.8
2026-04-15T22:15:53.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:15:53.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:15:53.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.844227
2026-04-15T22:15:53.119 [DEBUG] [Thread-26668] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:15:53.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:15:53.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:15:53.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:15:53.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:15:53.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:15:53.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:15:18', tmtdew=4.02215, humidity=75.7655, cloud=0.0, wind=9.0702, temperature=9.51283, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:15:41.213', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06724999999999959, -0.02874999999999872, -0.05524999999999913, -0.11450000000000138, -0.042500000000000426, -0.03074999999999939, 0.016000000000000014, 0.028249999999999886, -0.011499999999999844, -0.04499999999999993, -0.06475000000000009, -0.04600000000000115, -0.027000000000001023, -0.00575000000000081, 0.009999999999999787, -0.016000000000000014, 0.02624999999999922, -0.058999999999999275, -0.009500000000000952, -0.013250000000001094, -0.002000000000000668, 0.004249999999998977, -0.011749999999999261, -0.014750000000001151, 0.006499999999999062, -0.08499999999999908, -0.01425000000000054, -0.0024999999999995026, 0.041999999999999815, 0.004000000000001336, 0.050499999999999545, -0.01699999999999946, -0.04275000000000162], zp_timestamp='2026-04-15T20:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:15:53.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:15:53.380 [DEBUG] [Thread-26671] [transport.py] [_log()] starting thread (client mode): 0xee991840
2026-04-15T22:15:53.380 [DEBUG] [Thread-26671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:15:53.395 [DEBUG] [Thread-26671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:15:53.395 [INFO] [Thread-26671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:15:53.402 [DEBUG] [Thread-26671] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:15:53.403 [DEBUG] [Thread-26671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:15:53.403 [DEBUG] [Thread-26671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:15:53.403 [DEBUG] [Thread-26671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:15:53.403 [DEBUG] [Thread-26671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:15:53.403 [DEBUG] [Thread-26671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:15:53.403 [DEBUG] [Thread-26671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:15:53.403 [DEBUG] [Thread-26671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:15:53.403 [DEBUG] [Thread-26671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:15:53.403 [DEBUG] [Thread-26671] [transport.py] [_log()] client lang: <none>
2026-04-15T22:15:53.403 [DEBUG] [Thread-26671] [transport.py] [_log()] server lang: <none>
2026-04-15T22:15:53.403 [DEBUG] [Thread-26671] [transport.py] [_log()] kex follows: False
2026-04-15T22:15:53.403 [DEBUG] [Thread-26671] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:15:53.404 [DEBUG] [Thread-26671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:15:53.404 [DEBUG] [Thread-26671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:15:53.404 [DEBUG] [Thread-26671] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:15:53.404 [DEBUG] [Thread-26671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:15:53.404 [DEBUG] [Thread-26671] [transport.py] [_log()] Compression: none
2026-04-15T22:15:53.404 [DEBUG] [Thread-26671] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:15:53.462 [DEBUG] [Thread-26671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:15:53.463 [DEBUG] [Thread-26671] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:15:53.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:15:53.463 [DEBUG] [Thread-26671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:15:53.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:15:53.519 [DEBUG] [Thread-26671] [transport.py] [_log()] userauth is OK
2026-04-15T22:15:53.519 [DEBUG] [Thread-26671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:15:53.519 [DEBUG] [Thread-26671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:15:53.519 [DEBUG] [Thread-26671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:15:53.520 [DEBUG] [Thread-26671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:15:53.547 [INFO] [Thread-26671] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:15:53.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:15:53.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:15:54.374 [DEBUG] [Thread-26671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:15:54.374 [DEBUG] [Thread-26671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:15:54.422 [DEBUG] [Thread-26671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:15:54.423 [DEBUG] [Thread-26671] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:15:54.432 [DEBUG] [Thread-26671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:15:54.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:15:54.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')
2026-04-15T22:15:54.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
2026-04-15T22:15:54.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:15:54.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:15:54.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:15:54.468 [DEBUG] [Thread-26671] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:15:58.350 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:15:58.351 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:16:01.941 [DEBUG] [Thread-26673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:16:16.988 [DEBUG] [Thread-26674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:16:24.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:16:24.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:16:24.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
2026-04-15T22:16:24.962 [DEBUG] [Thread-26675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:16:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 15, 53), 3.31337, 79.6969, 0.0, 10.764, 9.09249, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:16:25.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:15:53
2026-04-15T22:16:26.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:16:26.657 [DEBUG] [Thread-26676] [transport.py] [_log()] starting thread (client mode): 0xf13e0f70
2026-04-15T22:16:26.658 [DEBUG] [Thread-26676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:16:26.674 [DEBUG] [Thread-26676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:16:26.674 [INFO] [Thread-26676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:16:26.677 [DEBUG] [Thread-26676] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:16:26.677 [DEBUG] [Thread-26676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:16:26.677 [DEBUG] [Thread-26676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:16:26.678 [DEBUG] [Thread-26676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:16:26.678 [DEBUG] [Thread-26676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:16:26.678 [DEBUG] [Thread-26676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:16:26.678 [DEBUG] [Thread-26676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:16:26.678 [DEBUG] [Thread-26676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:16:26.678 [DEBUG] [Thread-26676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:16:26.678 [DEBUG] [Thread-26676] [transport.py] [_log()] client lang: <none>
2026-04-15T22:16:26.678 [DEBUG] [Thread-26676] [transport.py] [_log()] server lang: <none>
2026-04-15T22:16:26.678 [DEBUG] [Thread-26676] [transport.py] [_log()] kex follows: False
2026-04-15T22:16:26.678 [DEBUG] [Thread-26676] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:16:26.678 [DEBUG] [Thread-26676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:16:26.678 [DEBUG] [Thread-26676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:16:26.679 [DEBUG] [Thread-26676] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:16:26.679 [DEBUG] [Thread-26676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:16:26.679 [DEBUG] [Thread-26676] [transport.py] [_log()] Compression: none
2026-04-15T22:16:26.679 [DEBUG] [Thread-26676] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:16:26.696 [DEBUG] [Thread-26676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:16:26.696 [DEBUG] [Thread-26676] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:16:26.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:16:26.697 [DEBUG] [Thread-26676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:16:26.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:16:26.698 [DEBUG] [Thread-26676] [transport.py] [_log()] userauth is OK
2026-04-15T22:16:26.698 [DEBUG] [Thread-26676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:16:26.698 [DEBUG] [Thread-26676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:16:26.698 [DEBUG] [Thread-26676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:16:26.698 [DEBUG] [Thread-26676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:16:26.716 [INFO] [Thread-26676] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:16:26.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:16:27.303 [DEBUG] [Thread-26676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:16:27.304 [DEBUG] [Thread-26676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:16:27.304 [DEBUG] [Thread-26676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:16:27.344 [DEBUG] [Thread-26676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:16:27.344 [DEBUG] [Thread-26676] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:16:27.346 [DEBUG] [Thread-26676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:16:27.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:16:27.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:16:27.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:16:27.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:16:27.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:16:27.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:16:27.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:16:27.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:16:27.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:16:27.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.844574 -999.00   +9.60   9.66     80   +6.40 1 1 1 2 1     0    0 2.68 -30.68 ZNESW 9.6 9.7 62.4 10.4 10.2 -25.1 10.2 -24.1 9.9 -21.9 10.1 -24.0
2026-04-15T22:16:27.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:16:27.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:16:27.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.844574
2026-04-15T22:16:27.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:16:27.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:16:27.367 [DEBUG] [Thread-26676] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:16:27.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:16:27.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:16:27.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:16:27.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:15:53', tmtdew=3.31337, humidity=79.6969, cloud=0.0, wind=10.764, temperature=9.09249, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:16:11.194', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06724999999999959, -0.02874999999999872, -0.05524999999999913, -0.11450000000000138, -0.042500000000000426, -0.03074999999999939, 0.016000000000000014, 0.028249999999999886, -0.011499999999999844, -0.04499999999999993, -0.06475000000000009, -0.04600000000000115, -0.027000000000001023, -0.00575000000000081, 0.009999999999999787, -0.016000000000000014, 0.02624999999999922, -0.058999999999999275, -0.009500000000000952, -0.013250000000001094, -0.002000000000000668, 0.004249999999998977, -0.011749999999999261, -0.014750000000001151, 0.006499999999999062, -0.08499999999999908, -0.01425000000000054, -0.0024999999999995026, 0.041999999999999815, 0.004000000000001336, 0.050499999999999545, -0.01699999999999946, -0.04275000000000162], zp_timestamp='2026-04-15T20:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:16:27.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:16:27.621 [DEBUG] [Thread-26679] [transport.py] [_log()] starting thread (client mode): 0xf13e3280
2026-04-15T22:16:27.621 [DEBUG] [Thread-26679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:16:27.635 [DEBUG] [Thread-26679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:16:27.635 [INFO] [Thread-26679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:16:27.642 [DEBUG] [Thread-26679] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:16:27.642 [DEBUG] [Thread-26679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:16:27.642 [DEBUG] [Thread-26679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:16:27.643 [DEBUG] [Thread-26679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:16:27.643 [DEBUG] [Thread-26679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:16:27.643 [DEBUG] [Thread-26679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:16:27.643 [DEBUG] [Thread-26679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:16:27.643 [DEBUG] [Thread-26679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:16:27.643 [DEBUG] [Thread-26679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:16:27.643 [DEBUG] [Thread-26679] [transport.py] [_log()] client lang: <none>
2026-04-15T22:16:27.643 [DEBUG] [Thread-26679] [transport.py] [_log()] server lang: <none>
2026-04-15T22:16:27.643 [DEBUG] [Thread-26679] [transport.py] [_log()] kex follows: False
2026-04-15T22:16:27.643 [DEBUG] [Thread-26679] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:16:27.643 [DEBUG] [Thread-26679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:16:27.643 [DEBUG] [Thread-26679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:16:27.643 [DEBUG] [Thread-26679] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:16:27.644 [DEBUG] [Thread-26679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:16:27.644 [DEBUG] [Thread-26679] [transport.py] [_log()] Compression: none
2026-04-15T22:16:27.644 [DEBUG] [Thread-26679] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:16:27.702 [DEBUG] [Thread-26679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:16:27.702 [DEBUG] [Thread-26679] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:16:27.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:16:27.703 [DEBUG] [Thread-26679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:16:27.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:16:27.759 [DEBUG] [Thread-26679] [transport.py] [_log()] userauth is OK
2026-04-15T22:16:27.759 [DEBUG] [Thread-26679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:16:27.759 [DEBUG] [Thread-26679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:16:27.759 [DEBUG] [Thread-26679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:16:27.759 [DEBUG] [Thread-26679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:16:27.787 [INFO] [Thread-26679] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:16:27.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:16:27.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:16:28.597 [DEBUG] [Thread-26679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:16:28.597 [DEBUG] [Thread-26679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:16:28.644 [DEBUG] [Thread-26679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:16:28.644 [DEBUG] [Thread-26679] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:16:28.653 [DEBUG] [Thread-26679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:16:28.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:16:28.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')
2026-04-15T22:16:28.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
2026-04-15T22:16:28.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:16:28.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:16:28.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:16:28.688 [DEBUG] [Thread-26679] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:16:32.019 [DEBUG] [Thread-26681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:16:47.063 [DEBUG] [Thread-26682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:16:58.555 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:16:58.556 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:16:58.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:16:58.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:16:58.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
2026-04-15T22:17:00.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 16, 29), 3.9977, 75.898, 0.0, 8.75268, 9.44608, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:17:00.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:16:29
2026-04-15T22:17:00.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:17:00.877 [DEBUG] [Thread-26683] [transport.py] [_log()] starting thread (client mode): 0xf1335990
2026-04-15T22:17:00.877 [DEBUG] [Thread-26683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:17:00.892 [DEBUG] [Thread-26683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:17:00.892 [INFO] [Thread-26683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:17:00.895 [DEBUG] [Thread-26683] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:17:00.895 [DEBUG] [Thread-26683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:17:00.895 [DEBUG] [Thread-26683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:17:00.895 [DEBUG] [Thread-26683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:17:00.895 [DEBUG] [Thread-26683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:17:00.895 [DEBUG] [Thread-26683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:17:00.895 [DEBUG] [Thread-26683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:17:00.895 [DEBUG] [Thread-26683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:17:00.896 [DEBUG] [Thread-26683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:17:00.896 [DEBUG] [Thread-26683] [transport.py] [_log()] client lang: <none>
2026-04-15T22:17:00.896 [DEBUG] [Thread-26683] [transport.py] [_log()] server lang: <none>
2026-04-15T22:17:00.896 [DEBUG] [Thread-26683] [transport.py] [_log()] kex follows: False
2026-04-15T22:17:00.896 [DEBUG] [Thread-26683] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:17:00.896 [DEBUG] [Thread-26683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:17:00.896 [DEBUG] [Thread-26683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:17:00.896 [DEBUG] [Thread-26683] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:17:00.896 [DEBUG] [Thread-26683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:17:00.896 [DEBUG] [Thread-26683] [transport.py] [_log()] Compression: none
2026-04-15T22:17:00.897 [DEBUG] [Thread-26683] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:17:00.911 [DEBUG] [Thread-26683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:17:00.911 [DEBUG] [Thread-26683] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:17:00.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:17:00.912 [DEBUG] [Thread-26683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:17:00.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:17:00.913 [DEBUG] [Thread-26683] [transport.py] [_log()] userauth is OK
2026-04-15T22:17:00.913 [DEBUG] [Thread-26683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:17:00.913 [DEBUG] [Thread-26683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:17:00.913 [DEBUG] [Thread-26683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:17:00.913 [DEBUG] [Thread-26683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:17:00.937 [INFO] [Thread-26683] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:17:00.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:17:01.509 [DEBUG] [Thread-26683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:17:01.509 [DEBUG] [Thread-26683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:17:01.510 [DEBUG] [Thread-26683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:17:01.550 [DEBUG] [Thread-26683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:17:01.550 [DEBUG] [Thread-26683] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:17:01.552 [DEBUG] [Thread-26683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:17:01.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:17:01.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:17:01.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:17:01.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:17:01.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:17:01.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:17:01.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:17:01.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:17:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:17:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.844922 -999.00   +9.50   8.04     80   +6.40 1 1 1 2 1     0    0 2.64 -31.82 ZNESW 8.1 8.0 67.6 10.7 10.2 -25.1 10.2 -24.1 9.9 -21.8 10.2 -23.9
2026-04-15T22:17:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:17:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:17:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.844922
2026-04-15T22:17:01.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:17:01.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:17:01.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:17:01.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:17:01.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:17:01.577 [DEBUG] [Thread-26683] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:17:01.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:16:29', tmtdew=3.9977, humidity=75.898, cloud=0.0, wind=8.75268, temperature=9.44608, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:16:41.261', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06724999999999959, -0.02874999999999872, -0.05524999999999913, -0.11450000000000138, -0.042500000000000426, -0.03074999999999939, 0.016000000000000014, 0.028249999999999886, -0.011499999999999844, -0.04499999999999993, -0.06475000000000009, -0.04600000000000115, -0.027000000000001023, -0.00575000000000081, 0.009999999999999787, -0.016000000000000014, 0.02624999999999922, -0.058999999999999275, -0.009500000000000952, -0.013250000000001094, -0.002000000000000668, 0.004249999999998977, -0.011749999999999261, -0.014750000000001151, 0.006499999999999062, -0.08499999999999908, -0.01425000000000054, -0.0024999999999995026, 0.041999999999999815, 0.004000000000001336, 0.050499999999999545, -0.01699999999999946, -0.04275000000000162], zp_timestamp='2026-04-15T20:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:17:01.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:17:01.801 [DEBUG] [Thread-26686] [transport.py] [_log()] starting thread (client mode): 0xee907dc0
2026-04-15T22:17:01.802 [DEBUG] [Thread-26686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:17:01.816 [DEBUG] [Thread-26686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:17:01.817 [INFO] [Thread-26686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:17:01.827 [DEBUG] [Thread-26686] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:17:01.827 [DEBUG] [Thread-26686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:17:01.827 [DEBUG] [Thread-26686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:17:01.828 [DEBUG] [Thread-26686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:17:01.828 [DEBUG] [Thread-26686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:17:01.828 [DEBUG] [Thread-26686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:17:01.828 [DEBUG] [Thread-26686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:17:01.828 [DEBUG] [Thread-26686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:17:01.828 [DEBUG] [Thread-26686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:17:01.828 [DEBUG] [Thread-26686] [transport.py] [_log()] client lang: <none>
2026-04-15T22:17:01.828 [DEBUG] [Thread-26686] [transport.py] [_log()] server lang: <none>
2026-04-15T22:17:01.828 [DEBUG] [Thread-26686] [transport.py] [_log()] kex follows: False
2026-04-15T22:17:01.828 [DEBUG] [Thread-26686] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:17:01.828 [DEBUG] [Thread-26686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:17:01.828 [DEBUG] [Thread-26686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:17:01.829 [DEBUG] [Thread-26686] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:17:01.829 [DEBUG] [Thread-26686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:17:01.829 [DEBUG] [Thread-26686] [transport.py] [_log()] Compression: none
2026-04-15T22:17:01.829 [DEBUG] [Thread-26686] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:17:01.889 [DEBUG] [Thread-26686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:17:01.889 [DEBUG] [Thread-26686] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:17:01.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:17:01.890 [DEBUG] [Thread-26686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:17:01.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:17:01.946 [DEBUG] [Thread-26686] [transport.py] [_log()] userauth is OK
2026-04-15T22:17:01.946 [DEBUG] [Thread-26686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:17:01.946 [DEBUG] [Thread-26686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:17:01.946 [DEBUG] [Thread-26686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:17:01.946 [DEBUG] [Thread-26686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:17:01.971 [INFO] [Thread-26686] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:17:01.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:17:01.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:17:02.092 [DEBUG] [Thread-26688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:17:02.807 [DEBUG] [Thread-26686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:17:02.808 [DEBUG] [Thread-26686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:17:02.860 [DEBUG] [Thread-26686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:17:02.860 [DEBUG] [Thread-26686] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:17:02.874 [DEBUG] [Thread-26686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:17:02.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:17:02.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')
2026-04-15T22:17:02.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
2026-04-15T22:17:02.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:17:02.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:17:02.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:17:02.909 [DEBUG] [Thread-26686] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:17:17.138 [DEBUG] [Thread-26689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:17:25.125 [DEBUG] [Thread-26690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:17:32.169 [DEBUG] [Thread-26691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:17:32.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:17:32.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:17:32.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
2026-04-15T22:17:34.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 17, 5), 3.98911, 75.9478, 0.0, 8.6292, 9.46268, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:17:34.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:17:05
2026-04-15T22:17:34.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:17:35.025 [DEBUG] [Thread-26692] [transport.py] [_log()] starting thread (client mode): 0xee9076a0
2026-04-15T22:17:35.025 [DEBUG] [Thread-26692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:17:35.048 [DEBUG] [Thread-26692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:17:35.048 [INFO] [Thread-26692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:17:35.050 [DEBUG] [Thread-26692] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:17:35.050 [DEBUG] [Thread-26692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:17:35.050 [DEBUG] [Thread-26692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:17:35.050 [DEBUG] [Thread-26692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:17:35.050 [DEBUG] [Thread-26692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:17:35.050 [DEBUG] [Thread-26692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:17:35.050 [DEBUG] [Thread-26692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:17:35.050 [DEBUG] [Thread-26692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:17:35.051 [DEBUG] [Thread-26692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:17:35.051 [DEBUG] [Thread-26692] [transport.py] [_log()] client lang: <none>
2026-04-15T22:17:35.051 [DEBUG] [Thread-26692] [transport.py] [_log()] server lang: <none>
2026-04-15T22:17:35.051 [DEBUG] [Thread-26692] [transport.py] [_log()] kex follows: False
2026-04-15T22:17:35.051 [DEBUG] [Thread-26692] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:17:35.051 [DEBUG] [Thread-26692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:17:35.051 [DEBUG] [Thread-26692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:17:35.051 [DEBUG] [Thread-26692] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:17:35.051 [DEBUG] [Thread-26692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:17:35.051 [DEBUG] [Thread-26692] [transport.py] [_log()] Compression: none
2026-04-15T22:17:35.051 [DEBUG] [Thread-26692] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:17:35.066 [DEBUG] [Thread-26692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:17:35.066 [DEBUG] [Thread-26692] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:17:35.067 [DEBUG] [Thread-26692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:17:35.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:17:35.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:17:35.068 [DEBUG] [Thread-26692] [transport.py] [_log()] userauth is OK
2026-04-15T22:17:35.068 [DEBUG] [Thread-26692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:17:35.068 [DEBUG] [Thread-26692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:17:35.068 [DEBUG] [Thread-26692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:17:35.068 [DEBUG] [Thread-26692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:17:35.087 [INFO] [Thread-26692] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:17:35.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:17:36.112 [DEBUG] [Thread-26692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:17:36.113 [DEBUG] [Thread-26692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:17:36.113 [DEBUG] [Thread-26692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:17:36.153 [DEBUG] [Thread-26692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:17:36.153 [DEBUG] [Thread-26692] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:17:36.156 [DEBUG] [Thread-26692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:17:36.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:17:36.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:17:36.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:17:36.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:17:36.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:17:36.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:17:36.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:17:36.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:17:36.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:17:36.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.845269 -999.00   +9.50   9.45     81   +6.40 1 1 1 2 1     0    0 2.61 -32.38 ZNESW 9.4 9.4 76.2 10.7 10.2 -25.3 10.2 -24.0 9.9 -21.9 10.2 -23.9
2026-04-15T22:17:36.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:17:36.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:17:36.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.845269
2026-04-15T22:17:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:17:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:17:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:17:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:17:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:17:36.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:17:05', tmtdew=3.98911, humidity=75.9478, cloud=0.0, wind=8.6292, temperature=9.46268, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:17:11.242', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06724999999999959, -0.02874999999999872, -0.05524999999999913, -0.11450000000000138, -0.042500000000000426, -0.03074999999999939, 0.016000000000000014, 0.028249999999999886, -0.011499999999999844, -0.04499999999999993, -0.06475000000000009, -0.04600000000000115, -0.027000000000001023, -0.00575000000000081, 0.009999999999999787, -0.016000000000000014, 0.02624999999999922, -0.058999999999999275, -0.009500000000000952, -0.013250000000001094, -0.002000000000000668, 0.004249999999998977, -0.011749999999999261, -0.014750000000001151, 0.006499999999999062, -0.08499999999999908, -0.01425000000000054, -0.0024999999999995026, 0.041999999999999815, 0.004000000000001336, 0.050499999999999545, -0.01699999999999946, -0.04275000000000162], zp_timestamp='2026-04-15T20:12:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:17:36.180 [DEBUG] [Thread-26692] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:17:36.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:17:36.405 [DEBUG] [Thread-26695] [transport.py] [_log()] starting thread (client mode): 0xee9c3b80
2026-04-15T22:17:36.405 [DEBUG] [Thread-26695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:17:36.420 [DEBUG] [Thread-26695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:17:36.421 [INFO] [Thread-26695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:17:36.428 [DEBUG] [Thread-26695] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:17:36.428 [DEBUG] [Thread-26695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:17:36.428 [DEBUG] [Thread-26695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:17:36.428 [DEBUG] [Thread-26695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:17:36.428 [DEBUG] [Thread-26695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:17:36.428 [DEBUG] [Thread-26695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:17:36.428 [DEBUG] [Thread-26695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:17:36.428 [DEBUG] [Thread-26695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:17:36.428 [DEBUG] [Thread-26695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:17:36.428 [DEBUG] [Thread-26695] [transport.py] [_log()] client lang: <none>
2026-04-15T22:17:36.428 [DEBUG] [Thread-26695] [transport.py] [_log()] server lang: <none>
2026-04-15T22:17:36.429 [DEBUG] [Thread-26695] [transport.py] [_log()] kex follows: False
2026-04-15T22:17:36.429 [DEBUG] [Thread-26695] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:17:36.429 [DEBUG] [Thread-26695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:17:36.429 [DEBUG] [Thread-26695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:17:36.429 [DEBUG] [Thread-26695] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:17:36.429 [DEBUG] [Thread-26695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:17:36.429 [DEBUG] [Thread-26695] [transport.py] [_log()] Compression: none
2026-04-15T22:17:36.429 [DEBUG] [Thread-26695] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:17:36.484 [DEBUG] [Thread-26695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:17:36.484 [DEBUG] [Thread-26695] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:17:36.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:17:36.485 [DEBUG] [Thread-26695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:17:36.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:17:36.544 [DEBUG] [Thread-26695] [transport.py] [_log()] userauth is OK
2026-04-15T22:17:36.544 [DEBUG] [Thread-26695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:17:36.544 [DEBUG] [Thread-26695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:17:36.544 [DEBUG] [Thread-26695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:17:36.545 [DEBUG] [Thread-26695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:17:36.569 [INFO] [Thread-26695] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:17:36.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:17:36.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:17:37.393 [DEBUG] [Thread-26695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:17:37.393 [DEBUG] [Thread-26695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:17:37.441 [DEBUG] [Thread-26695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:17:37.441 [DEBUG] [Thread-26695] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:17:37.450 [DEBUG] [Thread-26695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:17:37.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:17:37.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')
2026-04-15T22:17:37.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
2026-04-15T22:17:37.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:17:37.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:17:37.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:17:37.485 [DEBUG] [Thread-26695] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:17:47.198 [DEBUG] [Thread-26697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:17:58.755 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:17:58.756 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:18:02.242 [DEBUG] [Thread-26698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:18:07.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:18:07.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:18:07.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
2026-04-15T22:18:08.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 17, 41), 3.28768, 79.8295, 0.0, 10.4465, 9.02604, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:18:08.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:17:41
2026-04-15T22:18:09.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:18:09.689 [DEBUG] [Thread-26699] [transport.py] [_log()] starting thread (client mode): 0xee9c3fa0
2026-04-15T22:18:09.689 [DEBUG] [Thread-26699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:18:09.709 [DEBUG] [Thread-26699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:18:09.709 [INFO] [Thread-26699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:18:09.712 [DEBUG] [Thread-26699] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:18:09.712 [DEBUG] [Thread-26699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:18:09.712 [DEBUG] [Thread-26699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:18:09.712 [DEBUG] [Thread-26699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:18:09.712 [DEBUG] [Thread-26699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:18:09.713 [DEBUG] [Thread-26699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:18:09.713 [DEBUG] [Thread-26699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:18:09.713 [DEBUG] [Thread-26699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:18:09.713 [DEBUG] [Thread-26699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:18:09.713 [DEBUG] [Thread-26699] [transport.py] [_log()] client lang: <none>
2026-04-15T22:18:09.713 [DEBUG] [Thread-26699] [transport.py] [_log()] server lang: <none>
2026-04-15T22:18:09.713 [DEBUG] [Thread-26699] [transport.py] [_log()] kex follows: False
2026-04-15T22:18:09.713 [DEBUG] [Thread-26699] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:18:09.713 [DEBUG] [Thread-26699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:18:09.713 [DEBUG] [Thread-26699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:18:09.713 [DEBUG] [Thread-26699] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:18:09.714 [DEBUG] [Thread-26699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:18:09.714 [DEBUG] [Thread-26699] [transport.py] [_log()] Compression: none
2026-04-15T22:18:09.714 [DEBUG] [Thread-26699] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:18:09.730 [DEBUG] [Thread-26699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:18:09.731 [DEBUG] [Thread-26699] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:18:09.731 [DEBUG] [Thread-26699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:18:09.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:18:09.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:18:09.732 [DEBUG] [Thread-26699] [transport.py] [_log()] userauth is OK
2026-04-15T22:18:09.732 [DEBUG] [Thread-26699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:18:09.732 [DEBUG] [Thread-26699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:18:09.732 [DEBUG] [Thread-26699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:18:09.732 [DEBUG] [Thread-26699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:18:09.755 [INFO] [Thread-26699] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:18:09.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:18:10.515 [DEBUG] [Thread-26699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:18:10.515 [DEBUG] [Thread-26699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:18:10.516 [DEBUG] [Thread-26699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:18:10.556 [DEBUG] [Thread-26699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:18:10.556 [DEBUG] [Thread-26699] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:18:10.559 [DEBUG] [Thread-26699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:18:10.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:18:10.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:18:10.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:18:10.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:18:10.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:18:10.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:18:10.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:18:10.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:18:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:18:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.845269 -999.00   +9.50   9.45     81   +6.40 1 1 1 2 1     0    0 2.61 -32.38 ZNESW 9.4 9.4 76.2 10.7 10.2 -25.3 10.2 -24.0 9.9 -21.9 10.2 -23.9
2026-04-15T22:18:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:18:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:18:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.845269
2026-04-15T22:18:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:18:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:18:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:18:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:18:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:18:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:17:41', tmtdew=3.28768, humidity=79.8295, cloud=0.0, wind=10.4465, temperature=9.02604, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:17:11.242', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.0017499999999994742, -0.02275000000000027, -0.08549999999999969, -0.0235000000000003, 0.029749999999999943, -0.0005000000000006111, 0.025249999999999773, 0.020500000000000185, -0.023999999999999133, -0.017750000000001265, -0.0389999999999997, 0.007999999999999119, -0.0007500000000000284, 0.008499999999997954, 0.0129999999999999, 0.043250000000000455, -0.0389999999999997, 0.0024999999999995026, 0.009249999999999758, 0.05699999999999861, 0.04174999999999862, 0.0032500000000013074, 0.022250000000001435, 0.00849999999999973, -0.054499999999999105, -0.0017500000000012506, 0.005000000000000782, 0.08900000000000041, 0.034000000000000696, 0.05950000000000166, 0.026000000000001577, -0.02325000000000088], zp_timestamp='2026-04-15T20:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:18:10.578 [DEBUG] [Thread-26699] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:18:10.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:18:10.827 [DEBUG] [Thread-26702] [transport.py] [_log()] starting thread (client mode): 0xee905ae0
2026-04-15T22:18:10.827 [DEBUG] [Thread-26702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:18:10.847 [DEBUG] [Thread-26702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:18:10.847 [INFO] [Thread-26702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:18:10.854 [DEBUG] [Thread-26702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:18:10.854 [DEBUG] [Thread-26702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:18:10.854 [DEBUG] [Thread-26702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:18:10.854 [DEBUG] [Thread-26702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:18:10.854 [DEBUG] [Thread-26702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:18:10.854 [DEBUG] [Thread-26702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:18:10.855 [DEBUG] [Thread-26702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:18:10.855 [DEBUG] [Thread-26702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:18:10.855 [DEBUG] [Thread-26702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:18:10.855 [DEBUG] [Thread-26702] [transport.py] [_log()] client lang: <none>
2026-04-15T22:18:10.855 [DEBUG] [Thread-26702] [transport.py] [_log()] server lang: <none>
2026-04-15T22:18:10.855 [DEBUG] [Thread-26702] [transport.py] [_log()] kex follows: False
2026-04-15T22:18:10.855 [DEBUG] [Thread-26702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:18:10.855 [DEBUG] [Thread-26702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:18:10.855 [DEBUG] [Thread-26702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:18:10.855 [DEBUG] [Thread-26702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:18:10.855 [DEBUG] [Thread-26702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:18:10.856 [DEBUG] [Thread-26702] [transport.py] [_log()] Compression: none
2026-04-15T22:18:10.856 [DEBUG] [Thread-26702] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:18:10.912 [DEBUG] [Thread-26702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:18:10.913 [DEBUG] [Thread-26702] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:18:10.913 [DEBUG] [Thread-26702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:18:10.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:18:10.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:18:10.969 [DEBUG] [Thread-26702] [transport.py] [_log()] userauth is OK
2026-04-15T22:18:10.969 [DEBUG] [Thread-26702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:18:10.969 [DEBUG] [Thread-26702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:18:10.969 [DEBUG] [Thread-26702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:18:10.969 [DEBUG] [Thread-26702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:18:10.987 [INFO] [Thread-26702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:18:10.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:18:10.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:18:11.829 [DEBUG] [Thread-26702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:18:11.830 [DEBUG] [Thread-26702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:18:11.877 [DEBUG] [Thread-26702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:18:11.877 [DEBUG] [Thread-26702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:18:11.886 [DEBUG] [Thread-26702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:18:11.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:18: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')
2026-04-15T22:18:11.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
2026-04-15T22:18:11.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:18:11.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:18:11.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:18:11.921 [DEBUG] [Thread-26702] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:18:17.271 [DEBUG] [Thread-26704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:18:25.279 [DEBUG] [Thread-26705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:18:32.319 [DEBUG] [Thread-26706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:18:41.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:18:41.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:18:41.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
2026-04-15T22:18:43.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 18, 17), 3.78568, 77.4645, 0.0, 8.78796, 9.2462, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:18:43.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:18:17
2026-04-15T22:18:43.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:18:44.007 [DEBUG] [Thread-26707] [transport.py] [_log()] starting thread (client mode): 0xee990a00
2026-04-15T22:18:44.007 [DEBUG] [Thread-26707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:18:44.024 [DEBUG] [Thread-26707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:18:44.024 [INFO] [Thread-26707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:18:44.027 [DEBUG] [Thread-26707] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:18:44.027 [DEBUG] [Thread-26707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:18:44.027 [DEBUG] [Thread-26707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:18:44.027 [DEBUG] [Thread-26707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:18:44.028 [DEBUG] [Thread-26707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:18:44.028 [DEBUG] [Thread-26707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:18:44.028 [DEBUG] [Thread-26707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:18:44.028 [DEBUG] [Thread-26707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:18:44.028 [DEBUG] [Thread-26707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:18:44.028 [DEBUG] [Thread-26707] [transport.py] [_log()] client lang: <none>
2026-04-15T22:18:44.028 [DEBUG] [Thread-26707] [transport.py] [_log()] server lang: <none>
2026-04-15T22:18:44.028 [DEBUG] [Thread-26707] [transport.py] [_log()] kex follows: False
2026-04-15T22:18:44.028 [DEBUG] [Thread-26707] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:18:44.028 [DEBUG] [Thread-26707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:18:44.028 [DEBUG] [Thread-26707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:18:44.028 [DEBUG] [Thread-26707] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:18:44.029 [DEBUG] [Thread-26707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:18:44.029 [DEBUG] [Thread-26707] [transport.py] [_log()] Compression: none
2026-04-15T22:18:44.029 [DEBUG] [Thread-26707] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:18:44.045 [DEBUG] [Thread-26707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:18:44.045 [DEBUG] [Thread-26707] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:18:44.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:18:44.046 [DEBUG] [Thread-26707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:18:44.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:18:44.047 [DEBUG] [Thread-26707] [transport.py] [_log()] userauth is OK
2026-04-15T22:18:44.047 [DEBUG] [Thread-26707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:18:44.047 [DEBUG] [Thread-26707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:18:44.047 [DEBUG] [Thread-26707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:18:44.047 [DEBUG] [Thread-26707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:18:44.064 [INFO] [Thread-26707] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:18:44.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:18:44.871 [DEBUG] [Thread-26707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:18:44.871 [DEBUG] [Thread-26707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:18:44.872 [DEBUG] [Thread-26707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:18:44.912 [DEBUG] [Thread-26707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:18:44.912 [DEBUG] [Thread-26707] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:18:44.915 [DEBUG] [Thread-26707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:18:44.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:18:44.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:18:44.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:18:44.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:18:44.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:18:44.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:18:44.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:18:44.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:18:44.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:18:44.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.845616 -999.00   +9.50   8.13     81   +6.40 1 1 1 2 1     0    0 2.58 -34.15 ZNESW 8.5 8.1 61.6 9.7 10.2 -25.1 10.1 -24.0 9.8 -21.9 10.1 -24.0
2026-04-15T22:18:44.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:18:44.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:18:44.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.845616
2026-04-15T22:18:44.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:18:44.938 [DEBUG] [Thread-26707] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:18:44.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:18:44.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:18:44.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:18:44.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:18:44.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:18:17', tmtdew=3.78568, humidity=77.4645, cloud=0.0, wind=8.78796, temperature=9.2462, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:17:41.222', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.0017499999999994742, -0.02275000000000027, -0.08549999999999969, -0.0235000000000003, 0.029749999999999943, -0.0005000000000006111, 0.025249999999999773, 0.020500000000000185, -0.023999999999999133, -0.017750000000001265, -0.0389999999999997, 0.007999999999999119, -0.0007500000000000284, 0.008499999999997954, 0.0129999999999999, 0.043250000000000455, -0.0389999999999997, 0.0024999999999995026, 0.009249999999999758, 0.05699999999999861, 0.04174999999999862, 0.0032500000000013074, 0.022250000000001435, 0.00849999999999973, -0.054499999999999105, -0.0017500000000012506, 0.005000000000000782, 0.08900000000000041, 0.034000000000000696, 0.05950000000000166, 0.026000000000001577, -0.02325000000000088], zp_timestamp='2026-04-15T20:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:18:45.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:18:45.205 [DEBUG] [Thread-26710] [transport.py] [_log()] starting thread (client mode): 0xee9c3f10
2026-04-15T22:18:45.205 [DEBUG] [Thread-26710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:18:45.219 [DEBUG] [Thread-26710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:18:45.219 [INFO] [Thread-26710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:18:45.230 [DEBUG] [Thread-26710] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] client lang: <none>
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] server lang: <none>
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] kex follows: False
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] Compression: none
2026-04-15T22:18:45.231 [DEBUG] [Thread-26710] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:18:45.293 [DEBUG] [Thread-26710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:18:45.293 [DEBUG] [Thread-26710] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:18:45.294 [DEBUG] [Thread-26710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:18:45.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:18:45.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:18:45.352 [DEBUG] [Thread-26710] [transport.py] [_log()] userauth is OK
2026-04-15T22:18:45.352 [DEBUG] [Thread-26710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:18:45.352 [DEBUG] [Thread-26710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:18:45.353 [DEBUG] [Thread-26710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:18:45.353 [DEBUG] [Thread-26710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:18:45.378 [INFO] [Thread-26710] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:18:45.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:18:45.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:18:46.209 [DEBUG] [Thread-26710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:18:46.209 [DEBUG] [Thread-26710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:18:46.256 [DEBUG] [Thread-26710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:18:46.256 [DEBUG] [Thread-26710] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:18:46.265 [DEBUG] [Thread-26710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:18:46.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:18:46.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')
2026-04-15T22:18:46.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
2026-04-15T22:18:46.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:18:46.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:18:46.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:18:46.297 [DEBUG] [Thread-26710] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:18:47.349 [DEBUG] [Thread-26712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:18:58.955 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:18:58.957 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:19:02.385 [DEBUG] [Thread-26713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:19:08.091 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:19:11.288 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:19:16.309 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:19:16.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:19:16.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:19:16.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T22:19:17.417 [DEBUG] [Thread-26714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:19:17.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 18, 52), 3.25167, 80.0288, 0.0, 11.399, 9.02623, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:19:17.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:18:52
2026-04-15T22:19:18.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:19:18.553 [DEBUG] [Thread-26715] [transport.py] [_log()] starting thread (client mode): 0xee9c1030
2026-04-15T22:19:18.554 [DEBUG] [Thread-26715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:19:18.573 [DEBUG] [Thread-26715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:19:18.574 [INFO] [Thread-26715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:19:18.577 [DEBUG] [Thread-26715] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:19:18.577 [DEBUG] [Thread-26715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:19:18.577 [DEBUG] [Thread-26715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:19:18.577 [DEBUG] [Thread-26715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:19:18.577 [DEBUG] [Thread-26715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:19:18.577 [DEBUG] [Thread-26715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:19:18.577 [DEBUG] [Thread-26715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:19:18.577 [DEBUG] [Thread-26715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:19:18.577 [DEBUG] [Thread-26715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:19:18.577 [DEBUG] [Thread-26715] [transport.py] [_log()] client lang: <none>
2026-04-15T22:19:18.577 [DEBUG] [Thread-26715] [transport.py] [_log()] server lang: <none>
2026-04-15T22:19:18.578 [DEBUG] [Thread-26715] [transport.py] [_log()] kex follows: False
2026-04-15T22:19:18.578 [DEBUG] [Thread-26715] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:19:18.578 [DEBUG] [Thread-26715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:19:18.578 [DEBUG] [Thread-26715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:19:18.578 [DEBUG] [Thread-26715] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:19:18.578 [DEBUG] [Thread-26715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:19:18.578 [DEBUG] [Thread-26715] [transport.py] [_log()] Compression: none
2026-04-15T22:19:18.578 [DEBUG] [Thread-26715] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:19:18.595 [DEBUG] [Thread-26715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:19:18.595 [DEBUG] [Thread-26715] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:19:18.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:19:18.596 [DEBUG] [Thread-26715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:19:18.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:19:18.596 [DEBUG] [Thread-26715] [transport.py] [_log()] userauth is OK
2026-04-15T22:19:18.597 [DEBUG] [Thread-26715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:19:18.597 [DEBUG] [Thread-26715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:19:18.597 [DEBUG] [Thread-26715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:19:18.597 [DEBUG] [Thread-26715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:19:18.620 [INFO] [Thread-26715] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:19:18.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:19:19.398 [DEBUG] [Thread-26715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:19:19.398 [DEBUG] [Thread-26715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:19:19.399 [DEBUG] [Thread-26715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:19:19.438 [DEBUG] [Thread-26715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:19:19.439 [DEBUG] [Thread-26715] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:19:19.441 [DEBUG] [Thread-26715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:19:19.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:19:19.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:19:19.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:19:19.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:19:19.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:19:19.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:19:19.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:19:19.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:19:19.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:19:19.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.846310 -999.00   +9.50   3.53     81   +6.50 1 1 1 2 1     0    0 2.32 -40.64 ZNESW 5.3 3.5 122.5 9.4 10.2 -25.1 10.1 -23.8 9.8 -21.7 10.1 -23.8
2026-04-15T22:19:19.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:19:19.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:19:19.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.846310
2026-04-15T22:19:19.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:19:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:19:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:19:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:19:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:19:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:18:52', tmtdew=3.25167, humidity=80.0288, cloud=0.0, wind=11.399, temperature=9.02623, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:18:41.184', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.0017499999999994742, -0.02275000000000027, -0.08549999999999969, -0.0235000000000003, 0.029749999999999943, -0.0005000000000006111, 0.025249999999999773, 0.020500000000000185, -0.023999999999999133, -0.017750000000001265, -0.0389999999999997, 0.007999999999999119, -0.0007500000000000284, 0.008499999999997954, 0.0129999999999999, 0.043250000000000455, -0.0389999999999997, 0.0024999999999995026, 0.009249999999999758, 0.05699999999999861, 0.04174999999999862, 0.0032500000000013074, 0.022250000000001435, 0.00849999999999973, -0.054499999999999105, -0.0017500000000012506, 0.005000000000000782, 0.08900000000000041, 0.034000000000000696, 0.05950000000000166, 0.026000000000001577, -0.02325000000000088], zp_timestamp='2026-04-15T20:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:19:19.459 [DEBUG] [Thread-26715] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:19:19.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:19:19.676 [DEBUG] [Thread-26718] [transport.py] [_log()] starting thread (client mode): 0xf1335990
2026-04-15T22:19:19.676 [DEBUG] [Thread-26718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:19:19.690 [DEBUG] [Thread-26718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:19:19.690 [INFO] [Thread-26718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:19:19.699 [DEBUG] [Thread-26718] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:19:19.699 [DEBUG] [Thread-26718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:19:19.700 [DEBUG] [Thread-26718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:19:19.700 [DEBUG] [Thread-26718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:19:19.700 [DEBUG] [Thread-26718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:19:19.700 [DEBUG] [Thread-26718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:19:19.700 [DEBUG] [Thread-26718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:19:19.700 [DEBUG] [Thread-26718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:19:19.700 [DEBUG] [Thread-26718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:19:19.700 [DEBUG] [Thread-26718] [transport.py] [_log()] client lang: <none>
2026-04-15T22:19:19.700 [DEBUG] [Thread-26718] [transport.py] [_log()] server lang: <none>
2026-04-15T22:19:19.700 [DEBUG] [Thread-26718] [transport.py] [_log()] kex follows: False
2026-04-15T22:19:19.701 [DEBUG] [Thread-26718] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:19:19.701 [DEBUG] [Thread-26718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:19:19.701 [DEBUG] [Thread-26718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:19:19.701 [DEBUG] [Thread-26718] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:19:19.701 [DEBUG] [Thread-26718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:19:19.701 [DEBUG] [Thread-26718] [transport.py] [_log()] Compression: none
2026-04-15T22:19:19.701 [DEBUG] [Thread-26718] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:19:19.758 [DEBUG] [Thread-26718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:19:19.758 [DEBUG] [Thread-26718] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:19:19.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:19:19.759 [DEBUG] [Thread-26718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:19:19.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:19:19.815 [DEBUG] [Thread-26718] [transport.py] [_log()] userauth is OK
2026-04-15T22:19:19.816 [DEBUG] [Thread-26718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:19:19.816 [DEBUG] [Thread-26718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:19:19.816 [DEBUG] [Thread-26718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:19:19.816 [DEBUG] [Thread-26718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:19:19.845 [INFO] [Thread-26718] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:19:19.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:19:19.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:19:20.672 [DEBUG] [Thread-26718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:19:20.672 [DEBUG] [Thread-26718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:19:20.721 [DEBUG] [Thread-26718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:19:20.722 [DEBUG] [Thread-26718] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:19:20.732 [DEBUG] [Thread-26718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:19:20.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:19:20.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')
2026-04-15T22:19:20.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
2026-04-15T22:19:20.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:19:20.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:19:20.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:19:20.771 [DEBUG] [Thread-26718] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:19:22.685 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:19:25.442 [DEBUG] [Thread-26720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:19:32.448 [DEBUG] [Thread-26721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:19:41.168 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:19:45.537 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:19:47.491 [DEBUG] [Thread-26722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:19:50.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:19:50.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:19:50.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
2026-04-15T22:19:52.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 19, 28), 3.66768, 77.5642, 0.0, 9.35244, 9.24629, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:19:52.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:19:28
2026-04-15T22:19:52.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:19:52.915 [DEBUG] [Thread-26723] [transport.py] [_log()] starting thread (client mode): 0xf1336620
2026-04-15T22:19:52.915 [DEBUG] [Thread-26723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:19:52.937 [DEBUG] [Thread-26723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:19:52.937 [INFO] [Thread-26723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:19:52.941 [DEBUG] [Thread-26723] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:19:52.941 [DEBUG] [Thread-26723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:19:52.941 [DEBUG] [Thread-26723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:19:52.941 [DEBUG] [Thread-26723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:19:52.941 [DEBUG] [Thread-26723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:19:52.941 [DEBUG] [Thread-26723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:19:52.941 [DEBUG] [Thread-26723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:19:52.941 [DEBUG] [Thread-26723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:19:52.941 [DEBUG] [Thread-26723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:19:52.942 [DEBUG] [Thread-26723] [transport.py] [_log()] client lang: <none>
2026-04-15T22:19:52.942 [DEBUG] [Thread-26723] [transport.py] [_log()] server lang: <none>
2026-04-15T22:19:52.942 [DEBUG] [Thread-26723] [transport.py] [_log()] kex follows: False
2026-04-15T22:19:52.942 [DEBUG] [Thread-26723] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:19:52.942 [DEBUG] [Thread-26723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:19:52.942 [DEBUG] [Thread-26723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:19:52.942 [DEBUG] [Thread-26723] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:19:52.942 [DEBUG] [Thread-26723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:19:52.942 [DEBUG] [Thread-26723] [transport.py] [_log()] Compression: none
2026-04-15T22:19:52.942 [DEBUG] [Thread-26723] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:19:52.961 [DEBUG] [Thread-26723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:19:52.961 [DEBUG] [Thread-26723] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:19:52.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:19:52.962 [DEBUG] [Thread-26723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:19:52.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:19:52.963 [DEBUG] [Thread-26723] [transport.py] [_log()] userauth is OK
2026-04-15T22:19:52.963 [DEBUG] [Thread-26723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:19:52.963 [DEBUG] [Thread-26723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:19:52.963 [DEBUG] [Thread-26723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:19:52.963 [DEBUG] [Thread-26723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:19:52.998 [INFO] [Thread-26723] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:19:52.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:19:53.832 [DEBUG] [Thread-26723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:19:53.832 [DEBUG] [Thread-26723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:19:53.832 [DEBUG] [Thread-26723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:19:53.873 [DEBUG] [Thread-26723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:19:53.873 [DEBUG] [Thread-26723] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:19:53.875 [DEBUG] [Thread-26723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:19:53.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:19:53.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:19:53.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:19:53.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:19:53.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:19:53.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:19:53.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:19:53.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:19:53.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:19:53.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.846658 -999.00   +9.50   8.27     81   +6.50 1 1 1 2 1     0    0 2.26 -43.10 ZNESW 8.4 8.3 64.2 9.3 10.2 -25.0 10.1 -23.8 9.8 -21.7 10.1 -23.8
2026-04-15T22:19:53.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:19:53.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:19:53.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.846658
2026-04-15T22:19:53.900 [DEBUG] [Thread-26723] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:19:53.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:19:53.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:19:53.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:19:53.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:19:53.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:19:53.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:19:28', tmtdew=3.66768, humidity=77.5642, cloud=0.0, wind=9.35244, temperature=9.24629, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:19:11.251', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.0017499999999994742, -0.02275000000000027, -0.08549999999999969, -0.0235000000000003, 0.029749999999999943, -0.0005000000000006111, 0.025249999999999773, 0.020500000000000185, -0.023999999999999133, -0.017750000000001265, -0.0389999999999997, 0.007999999999999119, -0.0007500000000000284, 0.008499999999997954, 0.0129999999999999, 0.043250000000000455, -0.0389999999999997, 0.0024999999999995026, 0.009249999999999758, 0.05699999999999861, 0.04174999999999862, 0.0032500000000013074, 0.022250000000001435, 0.00849999999999973, -0.054499999999999105, -0.0017500000000012506, 0.005000000000000782, 0.08900000000000041, 0.034000000000000696, 0.05950000000000166, 0.026000000000001577, -0.02325000000000088], zp_timestamp='2026-04-15T20:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:19:54.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:19:54.157 [DEBUG] [Thread-26726] [transport.py] [_log()] starting thread (client mode): 0xee9c3e80
2026-04-15T22:19:54.157 [DEBUG] [Thread-26726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:19:54.172 [DEBUG] [Thread-26726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:19:54.172 [INFO] [Thread-26726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:19:54.179 [DEBUG] [Thread-26726] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:19:54.179 [DEBUG] [Thread-26726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:19:54.179 [DEBUG] [Thread-26726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:19:54.179 [DEBUG] [Thread-26726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:19:54.179 [DEBUG] [Thread-26726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:19:54.180 [DEBUG] [Thread-26726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:19:54.180 [DEBUG] [Thread-26726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:19:54.180 [DEBUG] [Thread-26726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:19:54.180 [DEBUG] [Thread-26726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:19:54.180 [DEBUG] [Thread-26726] [transport.py] [_log()] client lang: <none>
2026-04-15T22:19:54.180 [DEBUG] [Thread-26726] [transport.py] [_log()] server lang: <none>
2026-04-15T22:19:54.180 [DEBUG] [Thread-26726] [transport.py] [_log()] kex follows: False
2026-04-15T22:19:54.180 [DEBUG] [Thread-26726] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:19:54.180 [DEBUG] [Thread-26726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:19:54.180 [DEBUG] [Thread-26726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:19:54.180 [DEBUG] [Thread-26726] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:19:54.180 [DEBUG] [Thread-26726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:19:54.181 [DEBUG] [Thread-26726] [transport.py] [_log()] Compression: none
2026-04-15T22:19:54.181 [DEBUG] [Thread-26726] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:19:54.238 [DEBUG] [Thread-26726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:19:54.239 [DEBUG] [Thread-26726] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:19:54.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:19:54.239 [DEBUG] [Thread-26726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:19:54.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:19:54.299 [DEBUG] [Thread-26726] [transport.py] [_log()] userauth is OK
2026-04-15T22:19:54.299 [DEBUG] [Thread-26726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:19:54.299 [DEBUG] [Thread-26726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:19:54.299 [DEBUG] [Thread-26726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:19:54.300 [DEBUG] [Thread-26726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:19:54.325 [INFO] [Thread-26726] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:19:54.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:19:54.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:19:55.165 [DEBUG] [Thread-26726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:19:55.166 [DEBUG] [Thread-26726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:19:55.213 [DEBUG] [Thread-26726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:19:55.213 [DEBUG] [Thread-26726] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:19:55.222 [DEBUG] [Thread-26726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:19:55.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:19:55.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')
2026-04-15T22:19:55.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
2026-04-15T22:19:55.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:19:55.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:19:55.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:19:55.253 [DEBUG] [Thread-26726] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:19:59.158 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:19:59.160 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:20:02.520 [DEBUG] [Thread-26728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:20:05.038 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:20:09.415 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:20:15.553 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:20:17.563 [DEBUG] [Thread-26729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:20:20.925 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:20:25.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:20:25.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:20:25.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
2026-04-15T22:20:25.588 [DEBUG] [Thread-26730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:20:26.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 20, 4), 3.67623, 77.5145, 0.0, 9.35244, 9.22978, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:20:26.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:20:04
2026-04-15T22:20:26.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:20:27.386 [DEBUG] [Thread-26731] [transport.py] [_log()] starting thread (client mode): 0xf1336d70
2026-04-15T22:20:27.386 [DEBUG] [Thread-26731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:20:27.401 [DEBUG] [Thread-26731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:20:27.401 [INFO] [Thread-26731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:20:27.405 [DEBUG] [Thread-26731] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:20:27.405 [DEBUG] [Thread-26731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:20:27.405 [DEBUG] [Thread-26731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:20:27.405 [DEBUG] [Thread-26731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:20:27.405 [DEBUG] [Thread-26731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:20:27.405 [DEBUG] [Thread-26731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:20:27.405 [DEBUG] [Thread-26731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:20:27.405 [DEBUG] [Thread-26731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:20:27.405 [DEBUG] [Thread-26731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:20:27.406 [DEBUG] [Thread-26731] [transport.py] [_log()] client lang: <none>
2026-04-15T22:20:27.406 [DEBUG] [Thread-26731] [transport.py] [_log()] server lang: <none>
2026-04-15T22:20:27.406 [DEBUG] [Thread-26731] [transport.py] [_log()] kex follows: False
2026-04-15T22:20:27.406 [DEBUG] [Thread-26731] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:20:27.406 [DEBUG] [Thread-26731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:20:27.406 [DEBUG] [Thread-26731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:20:27.406 [DEBUG] [Thread-26731] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:20:27.406 [DEBUG] [Thread-26731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:20:27.406 [DEBUG] [Thread-26731] [transport.py] [_log()] Compression: none
2026-04-15T22:20:27.406 [DEBUG] [Thread-26731] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:20:27.422 [DEBUG] [Thread-26731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:20:27.423 [DEBUG] [Thread-26731] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:20:27.423 [DEBUG] [Thread-26731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:20:27.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:20:27.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:20:27.424 [DEBUG] [Thread-26731] [transport.py] [_log()] userauth is OK
2026-04-15T22:20:27.424 [DEBUG] [Thread-26731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:20:27.424 [DEBUG] [Thread-26731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:20:27.424 [DEBUG] [Thread-26731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:20:27.424 [DEBUG] [Thread-26731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:20:27.440 [INFO] [Thread-26731] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:20:27.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:20:30.927 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:20:32.593 [DEBUG] [Thread-26733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:20:34.420 [DEBUG] [Thread-26731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:20:34.420 [DEBUG] [Thread-26731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:20:34.420 [DEBUG] [Thread-26731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:20:34.461 [DEBUG] [Thread-26731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:20:34.461 [DEBUG] [Thread-26731] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:20:34.463 [DEBUG] [Thread-26731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:20:34.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:20:34.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:20:34.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:20:34.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:20:34.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:20:34.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:20:34.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:20:34.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:20:34.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:20:34.506 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-15T22:20:34.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:20:04', tmtdew=3.67623, humidity=77.5145, cloud=0.0, wind=9.35244, temperature=9.22978, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[-0.025249999999999773, -0.0017499999999994742, -0.02275000000000027, -0.08549999999999969, -0.0235000000000003, 0.029749999999999943, -0.0005000000000006111, 0.025249999999999773, 0.020500000000000185, -0.023999999999999133, -0.017750000000001265, -0.0389999999999997, 0.007999999999999119, -0.0007500000000000284, 0.008499999999997954, 0.0129999999999999, 0.043250000000000455, -0.0389999999999997, 0.0024999999999995026, 0.009249999999999758, 0.05699999999999861, 0.04174999999999862, 0.0032500000000013074, 0.022250000000001435, 0.00849999999999973, -0.054499999999999105, -0.0017500000000012506, 0.005000000000000782, 0.08900000000000041, 0.034000000000000696, 0.05950000000000166, 0.026000000000001577, -0.02325000000000088], zp_timestamp='2026-04-15T20:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:20:34.507 [DEBUG] [Thread-26731] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:20:34.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:20:34.767 [DEBUG] [Thread-26735] [transport.py] [_log()] starting thread (client mode): 0xee991360
2026-04-15T22:20:34.767 [DEBUG] [Thread-26735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:20:34.781 [DEBUG] [Thread-26735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:20:34.781 [INFO] [Thread-26735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:20:34.788 [DEBUG] [Thread-26735] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] client lang: <none>
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] server lang: <none>
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] kex follows: False
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] Compression: none
2026-04-15T22:20:34.789 [DEBUG] [Thread-26735] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:20:34.845 [DEBUG] [Thread-26735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:20:34.846 [DEBUG] [Thread-26735] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:20:34.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:20:34.846 [DEBUG] [Thread-26735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:20:34.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:20:34.903 [DEBUG] [Thread-26735] [transport.py] [_log()] userauth is OK
2026-04-15T22:20:34.903 [DEBUG] [Thread-26735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:20:34.903 [DEBUG] [Thread-26735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:20:34.903 [DEBUG] [Thread-26735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:20:34.903 [DEBUG] [Thread-26735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:20:34.921 [INFO] [Thread-26735] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:20:34.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:20:34.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:20:35.006 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:20:35.745 [DEBUG] [Thread-26735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:20:35.745 [DEBUG] [Thread-26735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:20:35.793 [DEBUG] [Thread-26735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:20:35.793 [DEBUG] [Thread-26735] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:20:35.802 [DEBUG] [Thread-26735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:20:35.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:20:35.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')
2026-04-15T22:20: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') -> 00000000
2026-04-15T22:20:35.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:20:35.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:20:35.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:20:35.837 [DEBUG] [Thread-26735] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:20:47.621 [DEBUG] [Thread-26737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:20:59.365 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:20:59.366 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:21:02.665 [DEBUG] [Thread-26738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:21:05.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:21:05.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:21:05.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
2026-04-15T22:21:07.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 20, 39), 3.23884, 80.0954, 0.0, 11.646, 8.9932, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:21:07.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:20:39
2026-04-15T22:21:07.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:21:08.116 [DEBUG] [Thread-26739] [transport.py] [_log()] starting thread (client mode): 0xee993760
2026-04-15T22:21:08.116 [DEBUG] [Thread-26739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:21:08.137 [DEBUG] [Thread-26739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:21:08.137 [INFO] [Thread-26739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] client lang: <none>
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] server lang: <none>
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] kex follows: False
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:21:08.139 [DEBUG] [Thread-26739] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:21:08.140 [DEBUG] [Thread-26739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:21:08.140 [DEBUG] [Thread-26739] [transport.py] [_log()] Compression: none
2026-04-15T22:21:08.140 [DEBUG] [Thread-26739] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:21:08.156 [DEBUG] [Thread-26739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:21:08.156 [DEBUG] [Thread-26739] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:21:08.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:21:08.156 [DEBUG] [Thread-26739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:21:08.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:21:08.157 [DEBUG] [Thread-26739] [transport.py] [_log()] userauth is OK
2026-04-15T22:21:08.157 [DEBUG] [Thread-26739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:21:08.157 [DEBUG] [Thread-26739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:21:08.158 [DEBUG] [Thread-26739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:21:08.158 [DEBUG] [Thread-26739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:21:08.170 [INFO] [Thread-26739] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:21:08.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:21:08.994 [DEBUG] [Thread-26739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:21:08.994 [DEBUG] [Thread-26739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:21:08.994 [DEBUG] [Thread-26739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:21:09.035 [DEBUG] [Thread-26739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:21:09.035 [DEBUG] [Thread-26739] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:21:09.037 [DEBUG] [Thread-26739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:21:09.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:21:09.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:21:09.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:21:09.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:21:09.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:21:09.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:21:09.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:21:09.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:21:09.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:21:09.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.847352 -999.00   +9.50   8.38     81   +6.40 1 1 1 2 1     0    0 2.28 -41.18 ZNESW 7.2 8.4 69.8 10.8 10.2 -25.1 10.1 -23.9 9.8 -21.7 10.1 -23.8
2026-04-15T22:21:09.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:21:09.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:21:09.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.847352
2026-04-15T22:21:09.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:21:09.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:21:09.060 [DEBUG] [Thread-26739] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:21:09.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:21:09.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:21:09.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:21:09.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:20:39', tmtdew=3.23884, humidity=80.0954, cloud=0.0, wind=11.646, temperature=8.9932, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:20:11.213', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.0022500000000000853, -0.008749999999999147, -0.11650000000000027, -0.026500000000000412, -0.0067499999999984794, -0.009000000000000341, -0.005749999999999034, -0.018000000000000682, -0.02949999999999875, -0.056750000000000966, -0.04899999999999949, -0.006999999999999673, 0.010249999999999204, 0.023499999999998522, 0.021999999999998465, 0.0417500000000004, -0.03850000000000087, -0.011000000000001009, -0.007250000000000867, 0.013999999999999346, 0.0337499999999995, 0.015750000000000597, 0.008750000000000924, 0.03399999999999892, -0.05850000000000044, -0.007749999999999702, 0.028499999999999304, 0.009000000000000341, 0.04300000000000104, 0.06300000000000061, 0.03300000000000125, -0.0002500000000011937], zp_timestamp='2026-04-15T20:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:21:09.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:21:09.313 [DEBUG] [Thread-26742] [transport.py] [_log()] starting thread (client mode): 0xf1350be0
2026-04-15T22:21:09.313 [DEBUG] [Thread-26742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:21:09.327 [DEBUG] [Thread-26742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:21:09.328 [INFO] [Thread-26742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:21:09.335 [DEBUG] [Thread-26742] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:21:09.335 [DEBUG] [Thread-26742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:21:09.335 [DEBUG] [Thread-26742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:21:09.335 [DEBUG] [Thread-26742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:21:09.335 [DEBUG] [Thread-26742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:21:09.335 [DEBUG] [Thread-26742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:21:09.335 [DEBUG] [Thread-26742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:21:09.336 [DEBUG] [Thread-26742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:21:09.336 [DEBUG] [Thread-26742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:21:09.336 [DEBUG] [Thread-26742] [transport.py] [_log()] client lang: <none>
2026-04-15T22:21:09.336 [DEBUG] [Thread-26742] [transport.py] [_log()] server lang: <none>
2026-04-15T22:21:09.336 [DEBUG] [Thread-26742] [transport.py] [_log()] kex follows: False
2026-04-15T22:21:09.336 [DEBUG] [Thread-26742] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:21:09.336 [DEBUG] [Thread-26742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:21:09.336 [DEBUG] [Thread-26742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:21:09.336 [DEBUG] [Thread-26742] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:21:09.336 [DEBUG] [Thread-26742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:21:09.336 [DEBUG] [Thread-26742] [transport.py] [_log()] Compression: none
2026-04-15T22:21:09.337 [DEBUG] [Thread-26742] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:21:09.394 [DEBUG] [Thread-26742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:21:09.394 [DEBUG] [Thread-26742] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:21:09.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:21:09.395 [DEBUG] [Thread-26742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:21:09.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:21:09.450 [DEBUG] [Thread-26742] [transport.py] [_log()] userauth is OK
2026-04-15T22:21:09.450 [DEBUG] [Thread-26742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:21:09.450 [DEBUG] [Thread-26742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:21:09.451 [DEBUG] [Thread-26742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:21:09.451 [DEBUG] [Thread-26742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:21:09.476 [INFO] [Thread-26742] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:21:09.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:21:09.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:21:10.277 [DEBUG] [Thread-26742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:21:10.277 [DEBUG] [Thread-26742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:21:10.325 [DEBUG] [Thread-26742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:21:10.325 [DEBUG] [Thread-26742] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:21:10.334 [DEBUG] [Thread-26742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:21:10.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:21:10.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')
2026-04-15T22:21:10.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
2026-04-15T22:21:10.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:21:10.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:21:10.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:21:10.370 [DEBUG] [Thread-26742] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:21:17.694 [DEBUG] [Thread-26744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:21:25.735 [DEBUG] [Thread-26745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:21:32.734 [DEBUG] [Thread-26746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:21:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:21:40.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:21:40.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
2026-04-15T22:21:41.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 21, 15), 3.70786, 77.6141, 0.0, 9.423, 9.26325, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:21:41.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:21:15
2026-04-15T22:21:42.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:21:42.525 [DEBUG] [Thread-26747] [transport.py] [_log()] starting thread (client mode): 0xf1353490
2026-04-15T22:21:42.525 [DEBUG] [Thread-26747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:21:42.545 [DEBUG] [Thread-26747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:21:42.545 [INFO] [Thread-26747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:21:42.548 [DEBUG] [Thread-26747] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:21:42.548 [DEBUG] [Thread-26747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:21:42.548 [DEBUG] [Thread-26747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:21:42.548 [DEBUG] [Thread-26747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:21:42.548 [DEBUG] [Thread-26747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:21:42.549 [DEBUG] [Thread-26747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:21:42.549 [DEBUG] [Thread-26747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:21:42.549 [DEBUG] [Thread-26747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:21:42.549 [DEBUG] [Thread-26747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:21:42.549 [DEBUG] [Thread-26747] [transport.py] [_log()] client lang: <none>
2026-04-15T22:21:42.549 [DEBUG] [Thread-26747] [transport.py] [_log()] server lang: <none>
2026-04-15T22:21:42.549 [DEBUG] [Thread-26747] [transport.py] [_log()] kex follows: False
2026-04-15T22:21:42.549 [DEBUG] [Thread-26747] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:21:42.549 [DEBUG] [Thread-26747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:21:42.549 [DEBUG] [Thread-26747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:21:42.549 [DEBUG] [Thread-26747] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:21:42.549 [DEBUG] [Thread-26747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:21:42.549 [DEBUG] [Thread-26747] [transport.py] [_log()] Compression: none
2026-04-15T22:21:42.549 [DEBUG] [Thread-26747] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:21:42.566 [DEBUG] [Thread-26747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:21:42.566 [DEBUG] [Thread-26747] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:21:42.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:21:42.567 [DEBUG] [Thread-26747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:21:42.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:21:42.568 [DEBUG] [Thread-26747] [transport.py] [_log()] userauth is OK
2026-04-15T22:21:42.569 [DEBUG] [Thread-26747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:21:42.569 [DEBUG] [Thread-26747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:21:42.569 [DEBUG] [Thread-26747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:21:42.569 [DEBUG] [Thread-26747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:21:42.586 [INFO] [Thread-26747] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:21:42.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:21:43.367 [DEBUG] [Thread-26747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:21:43.368 [DEBUG] [Thread-26747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:21:43.368 [DEBUG] [Thread-26747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:21:43.408 [DEBUG] [Thread-26747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:21:43.408 [DEBUG] [Thread-26747] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:21:43.411 [DEBUG] [Thread-26747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:21:43.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:21:43.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:21:43.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:21:43.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:21:43.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:21:43.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:21:43.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:21:43.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:21:43.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:21:43.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.847699 -999.00   +9.50   6.12     80   +6.40 1 1 1 2 1     0    0 2.23 -40.55 ZNESW 8.3 6.1 108.1 10.9 10.1 -25.1 10.1 -23.8 9.8 -21.6 10.0 -23.7
2026-04-15T22:21:43.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:21:43.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:21:43.431 [DEBUG] [Thread-26747] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:21:43.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.847699
2026-04-15T22:21:43.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:21:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:21:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:21:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:21:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:21:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:21:15', tmtdew=3.70786, humidity=77.6141, cloud=0.0, wind=9.423, temperature=9.26325, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:20:41.194', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.0022500000000000853, -0.008749999999999147, -0.11650000000000027, -0.026500000000000412, -0.0067499999999984794, -0.009000000000000341, -0.005749999999999034, -0.018000000000000682, -0.02949999999999875, -0.056750000000000966, -0.04899999999999949, -0.006999999999999673, 0.010249999999999204, 0.023499999999998522, 0.021999999999998465, 0.0417500000000004, -0.03850000000000087, -0.011000000000001009, -0.007250000000000867, 0.013999999999999346, 0.0337499999999995, 0.015750000000000597, 0.008750000000000924, 0.03399999999999892, -0.05850000000000044, -0.007749999999999702, 0.028499999999999304, 0.009000000000000341, 0.04300000000000104, 0.06300000000000061, 0.03300000000000125, -0.0002500000000011937], zp_timestamp='2026-04-15T20:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:21:43.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:21:43.689 [DEBUG] [Thread-26750] [transport.py] [_log()] starting thread (client mode): 0xee9c0340
2026-04-15T22:21:43.690 [DEBUG] [Thread-26750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:21:43.704 [DEBUG] [Thread-26750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:21:43.704 [INFO] [Thread-26750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:21:43.711 [DEBUG] [Thread-26750] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:21:43.711 [DEBUG] [Thread-26750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:21:43.711 [DEBUG] [Thread-26750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:21:43.711 [DEBUG] [Thread-26750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:21:43.712 [DEBUG] [Thread-26750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:21:43.712 [DEBUG] [Thread-26750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:21:43.712 [DEBUG] [Thread-26750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:21:43.712 [DEBUG] [Thread-26750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:21:43.712 [DEBUG] [Thread-26750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:21:43.712 [DEBUG] [Thread-26750] [transport.py] [_log()] client lang: <none>
2026-04-15T22:21:43.712 [DEBUG] [Thread-26750] [transport.py] [_log()] server lang: <none>
2026-04-15T22:21:43.712 [DEBUG] [Thread-26750] [transport.py] [_log()] kex follows: False
2026-04-15T22:21:43.712 [DEBUG] [Thread-26750] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:21:43.712 [DEBUG] [Thread-26750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:21:43.712 [DEBUG] [Thread-26750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:21:43.712 [DEBUG] [Thread-26750] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:21:43.713 [DEBUG] [Thread-26750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:21:43.713 [DEBUG] [Thread-26750] [transport.py] [_log()] Compression: none
2026-04-15T22:21:43.713 [DEBUG] [Thread-26750] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:21:43.769 [DEBUG] [Thread-26750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:21:43.769 [DEBUG] [Thread-26750] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:21:43.770 [DEBUG] [Thread-26750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:21:43.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:21:43.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:21:43.826 [DEBUG] [Thread-26750] [transport.py] [_log()] userauth is OK
2026-04-15T22:21:43.826 [DEBUG] [Thread-26750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:21:43.826 [DEBUG] [Thread-26750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:21:43.826 [DEBUG] [Thread-26750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:21:43.826 [DEBUG] [Thread-26750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:21:43.851 [INFO] [Thread-26750] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:21:43.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:21:43.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:21:44.702 [DEBUG] [Thread-26750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:21:44.703 [DEBUG] [Thread-26750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:21:44.750 [DEBUG] [Thread-26750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:21:44.750 [DEBUG] [Thread-26750] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:21:44.759 [DEBUG] [Thread-26750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:21:44.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:21:44.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')
2026-04-15T22:21:44.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
2026-04-15T22:21:44.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:21:44.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:21:44.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:21:44.794 [DEBUG] [Thread-26750] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:21:47.766 [DEBUG] [Thread-26752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:21:59.570 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:21:59.570 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:22:02.811 [DEBUG] [Thread-26753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:22:14.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:22:14.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:22: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
2026-04-15T22:22:16.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 21, 50), 3.21057, 80.2615, 0.0, 11.3285, 9.05968, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:22:16.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:21:50
2026-04-15T22:22:16.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:22:16.985 [DEBUG] [Thread-26754] [transport.py] [_log()] starting thread (client mode): 0xee990220
2026-04-15T22:22:16.986 [DEBUG] [Thread-26754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:22:17.005 [DEBUG] [Thread-26754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:22:17.005 [INFO] [Thread-26754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:22:17.008 [DEBUG] [Thread-26754] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:22:17.008 [DEBUG] [Thread-26754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:22:17.009 [DEBUG] [Thread-26754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:22:17.009 [DEBUG] [Thread-26754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:22:17.009 [DEBUG] [Thread-26754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:22:17.009 [DEBUG] [Thread-26754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:22:17.009 [DEBUG] [Thread-26754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:22:17.009 [DEBUG] [Thread-26754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:22:17.009 [DEBUG] [Thread-26754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:22:17.009 [DEBUG] [Thread-26754] [transport.py] [_log()] client lang: <none>
2026-04-15T22:22:17.009 [DEBUG] [Thread-26754] [transport.py] [_log()] server lang: <none>
2026-04-15T22:22:17.009 [DEBUG] [Thread-26754] [transport.py] [_log()] kex follows: False
2026-04-15T22:22:17.009 [DEBUG] [Thread-26754] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:22:17.009 [DEBUG] [Thread-26754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:22:17.009 [DEBUG] [Thread-26754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:22:17.010 [DEBUG] [Thread-26754] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:22:17.010 [DEBUG] [Thread-26754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:22:17.010 [DEBUG] [Thread-26754] [transport.py] [_log()] Compression: none
2026-04-15T22:22:17.010 [DEBUG] [Thread-26754] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:22:17.025 [DEBUG] [Thread-26754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:22:17.025 [DEBUG] [Thread-26754] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:22:17.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:22:17.026 [DEBUG] [Thread-26754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:22:17.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:22:17.027 [DEBUG] [Thread-26754] [transport.py] [_log()] userauth is OK
2026-04-15T22:22:17.027 [DEBUG] [Thread-26754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:22:17.027 [DEBUG] [Thread-26754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:22:17.027 [DEBUG] [Thread-26754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:22:17.027 [DEBUG] [Thread-26754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:22:17.047 [INFO] [Thread-26754] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:22:17.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:22:17.831 [DEBUG] [Thread-26754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:22:17.831 [DEBUG] [Thread-26754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:22:17.832 [DEBUG] [Thread-26754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:22:17.839 [DEBUG] [Thread-26756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:22:17.873 [DEBUG] [Thread-26754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:22:17.873 [DEBUG] [Thread-26754] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:22:17.875 [DEBUG] [Thread-26754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:22:17.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:22:17.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:22:17.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:22:17.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:22:17.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:22:17.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:22:17.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:22:17.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:22:17.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:22:17.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.848394 -999.00   +9.50   7.84     80   +6.30 1 1 1 2 1     0    0 2.44 -35.93 ZNESW 7.1 7.8 78.0 9.0 10.1 -25.1 10.1 -23.8 9.8 -21.7 10.1 -23.7
2026-04-15T22:22:17.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:22:17.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:22:17.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.848394
2026-04-15T22:22:17.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:22:17.901 [DEBUG] [Thread-26754] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:22:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:22:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:22:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:22:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:22:17.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:21:50', tmtdew=3.21057, humidity=80.2615, cloud=0.0, wind=11.3285, temperature=9.05968, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:21:41.242', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.0022500000000000853, -0.008749999999999147, -0.11650000000000027, -0.026500000000000412, -0.0067499999999984794, -0.009000000000000341, -0.005749999999999034, -0.018000000000000682, -0.02949999999999875, -0.056750000000000966, -0.04899999999999949, -0.006999999999999673, 0.010249999999999204, 0.023499999999998522, 0.021999999999998465, 0.0417500000000004, -0.03850000000000087, -0.011000000000001009, -0.007250000000000867, 0.013999999999999346, 0.0337499999999995, 0.015750000000000597, 0.008750000000000924, 0.03399999999999892, -0.05850000000000044, -0.007749999999999702, 0.028499999999999304, 0.009000000000000341, 0.04300000000000104, 0.06300000000000061, 0.03300000000000125, -0.0002500000000011937], zp_timestamp='2026-04-15T20:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:22:18.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:22:18.157 [DEBUG] [Thread-26758] [transport.py] [_log()] starting thread (client mode): 0xf1365e40
2026-04-15T22:22:18.158 [DEBUG] [Thread-26758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:22:18.172 [DEBUG] [Thread-26758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:22:18.173 [INFO] [Thread-26758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:22:18.180 [DEBUG] [Thread-26758] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:22:18.180 [DEBUG] [Thread-26758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:22:18.180 [DEBUG] [Thread-26758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:22:18.180 [DEBUG] [Thread-26758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:22:18.180 [DEBUG] [Thread-26758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:22:18.180 [DEBUG] [Thread-26758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:22:18.181 [DEBUG] [Thread-26758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:22:18.181 [DEBUG] [Thread-26758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:22:18.181 [DEBUG] [Thread-26758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:22:18.181 [DEBUG] [Thread-26758] [transport.py] [_log()] client lang: <none>
2026-04-15T22:22:18.181 [DEBUG] [Thread-26758] [transport.py] [_log()] server lang: <none>
2026-04-15T22:22:18.181 [DEBUG] [Thread-26758] [transport.py] [_log()] kex follows: False
2026-04-15T22:22:18.181 [DEBUG] [Thread-26758] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:22:18.181 [DEBUG] [Thread-26758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:22:18.181 [DEBUG] [Thread-26758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:22:18.181 [DEBUG] [Thread-26758] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:22:18.181 [DEBUG] [Thread-26758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:22:18.181 [DEBUG] [Thread-26758] [transport.py] [_log()] Compression: none
2026-04-15T22:22:18.182 [DEBUG] [Thread-26758] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:22:18.236 [DEBUG] [Thread-26758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:22:18.236 [DEBUG] [Thread-26758] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:22:18.236 [DEBUG] [Thread-26758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:22:18.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:22:18.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:22:18.293 [DEBUG] [Thread-26758] [transport.py] [_log()] userauth is OK
2026-04-15T22:22:18.293 [DEBUG] [Thread-26758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:22:18.293 [DEBUG] [Thread-26758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:22:18.293 [DEBUG] [Thread-26758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:22:18.293 [DEBUG] [Thread-26758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:22:18.311 [INFO] [Thread-26758] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:22:18.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:22:18.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:22:19.149 [DEBUG] [Thread-26758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:22:19.149 [DEBUG] [Thread-26758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:22:19.197 [DEBUG] [Thread-26758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:22:19.197 [DEBUG] [Thread-26758] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:22:19.206 [DEBUG] [Thread-26758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:22:19.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:22:19.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')
2026-04-15T22:22:19.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
2026-04-15T22:22:19.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:22:19.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:22:19.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:22:19.241 [DEBUG] [Thread-26758] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:22:25.881 [DEBUG] [Thread-26760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:22:32.871 [DEBUG] [Thread-26761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:22:47.914 [DEBUG] [Thread-26762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:22:49.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:22:49.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:22:49.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
2026-04-15T22:22:50.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 22, 26), 3.6989, 77.664, 0.0, 9.28188, 9.3133, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:22:50.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:22:26
2026-04-15T22:22:51.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:22:51.415 [DEBUG] [Thread-26763] [transport.py] [_log()] starting thread (client mode): 0xf13645e0
2026-04-15T22:22:51.415 [DEBUG] [Thread-26763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:22:51.435 [DEBUG] [Thread-26763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:22:51.435 [INFO] [Thread-26763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:22:51.438 [DEBUG] [Thread-26763] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:22:51.438 [DEBUG] [Thread-26763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:22:51.438 [DEBUG] [Thread-26763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:22:51.438 [DEBUG] [Thread-26763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:22:51.438 [DEBUG] [Thread-26763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:22:51.438 [DEBUG] [Thread-26763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:22:51.438 [DEBUG] [Thread-26763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:22:51.439 [DEBUG] [Thread-26763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:22:51.439 [DEBUG] [Thread-26763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:22:51.439 [DEBUG] [Thread-26763] [transport.py] [_log()] client lang: <none>
2026-04-15T22:22:51.439 [DEBUG] [Thread-26763] [transport.py] [_log()] server lang: <none>
2026-04-15T22:22:51.439 [DEBUG] [Thread-26763] [transport.py] [_log()] kex follows: False
2026-04-15T22:22:51.439 [DEBUG] [Thread-26763] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:22:51.439 [DEBUG] [Thread-26763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:22:51.439 [DEBUG] [Thread-26763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:22:51.439 [DEBUG] [Thread-26763] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:22:51.439 [DEBUG] [Thread-26763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:22:51.440 [DEBUG] [Thread-26763] [transport.py] [_log()] Compression: none
2026-04-15T22:22:51.440 [DEBUG] [Thread-26763] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:22:51.459 [DEBUG] [Thread-26763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:22:51.459 [DEBUG] [Thread-26763] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:22:51.460 [DEBUG] [Thread-26763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:22:51.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:22:51.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:22:51.501 [DEBUG] [Thread-26763] [transport.py] [_log()] userauth is OK
2026-04-15T22:22:51.501 [DEBUG] [Thread-26763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:22:51.501 [DEBUG] [Thread-26763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:22:51.501 [DEBUG] [Thread-26763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:22:51.501 [DEBUG] [Thread-26763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:22:51.537 [INFO] [Thread-26763] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:22:51.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:22:52.290 [DEBUG] [Thread-26763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:22:52.291 [DEBUG] [Thread-26763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:22:52.291 [DEBUG] [Thread-26763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:22:52.331 [DEBUG] [Thread-26763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:22:52.331 [DEBUG] [Thread-26763] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:22:52.334 [DEBUG] [Thread-26763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:22:52.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:22:52.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:22:52.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:22:52.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:22:52.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:22:52.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:22:52.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:22:52.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:22:52.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:22:52.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.848741 -999.00   +9.50   8.85     80   +6.30 1 1 1 2 1     0    0 2.36 -35.52 ZNESW 5.5 8.8 67.8 10.4 10.2 -25.1 10.1 -23.8 9.8 -21.7 10.1 -23.8
2026-04-15T22:22:52.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:22:52.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:22:52.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.848741
2026-04-15T22:22:52.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:22:52.359 [DEBUG] [Thread-26763] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:22:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:22:52.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:22:52.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:22:52.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:22:52.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:22:26', tmtdew=3.6989, humidity=77.664, cloud=0.0, wind=9.28188, temperature=9.3133, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:22:11.222', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.0022500000000000853, -0.008749999999999147, -0.11650000000000027, -0.026500000000000412, -0.0067499999999984794, -0.009000000000000341, -0.005749999999999034, -0.018000000000000682, -0.02949999999999875, -0.056750000000000966, -0.04899999999999949, -0.006999999999999673, 0.010249999999999204, 0.023499999999998522, 0.021999999999998465, 0.0417500000000004, -0.03850000000000087, -0.011000000000001009, -0.007250000000000867, 0.013999999999999346, 0.0337499999999995, 0.015750000000000597, 0.008750000000000924, 0.03399999999999892, -0.05850000000000044, -0.007749999999999702, 0.028499999999999304, 0.009000000000000341, 0.04300000000000104, 0.06300000000000061, 0.03300000000000125, -0.0002500000000011937], zp_timestamp='2026-04-15T20:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:22:52.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:22:52.610 [DEBUG] [Thread-26766] [transport.py] [_log()] starting thread (client mode): 0xee9c1ba0
2026-04-15T22:22:52.610 [DEBUG] [Thread-26766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:22:52.624 [DEBUG] [Thread-26766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:22:52.624 [INFO] [Thread-26766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:22:52.632 [DEBUG] [Thread-26766] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:22:52.632 [DEBUG] [Thread-26766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:22:52.632 [DEBUG] [Thread-26766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:22:52.632 [DEBUG] [Thread-26766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:22:52.632 [DEBUG] [Thread-26766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:22:52.632 [DEBUG] [Thread-26766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:22:52.632 [DEBUG] [Thread-26766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:22:52.632 [DEBUG] [Thread-26766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:22:52.632 [DEBUG] [Thread-26766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:22:52.632 [DEBUG] [Thread-26766] [transport.py] [_log()] client lang: <none>
2026-04-15T22:22:52.632 [DEBUG] [Thread-26766] [transport.py] [_log()] server lang: <none>
2026-04-15T22:22:52.633 [DEBUG] [Thread-26766] [transport.py] [_log()] kex follows: False
2026-04-15T22:22:52.633 [DEBUG] [Thread-26766] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:22:52.633 [DEBUG] [Thread-26766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:22:52.633 [DEBUG] [Thread-26766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:22:52.633 [DEBUG] [Thread-26766] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:22:52.633 [DEBUG] [Thread-26766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:22:52.633 [DEBUG] [Thread-26766] [transport.py] [_log()] Compression: none
2026-04-15T22:22:52.633 [DEBUG] [Thread-26766] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:22:52.688 [DEBUG] [Thread-26766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:22:52.688 [DEBUG] [Thread-26766] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:22:52.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:22:52.689 [DEBUG] [Thread-26766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:22:52.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:22:52.744 [DEBUG] [Thread-26766] [transport.py] [_log()] userauth is OK
2026-04-15T22:22:52.745 [DEBUG] [Thread-26766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:22:52.745 [DEBUG] [Thread-26766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:22:52.745 [DEBUG] [Thread-26766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:22:52.745 [DEBUG] [Thread-26766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:22:52.770 [INFO] [Thread-26766] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:22:52.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:22:52.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:22:53.596 [DEBUG] [Thread-26766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:22:53.597 [DEBUG] [Thread-26766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:22:53.644 [DEBUG] [Thread-26766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:22:53.644 [DEBUG] [Thread-26766] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:22:53.653 [DEBUG] [Thread-26766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:22:53.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:22:53.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')
2026-04-15T22:22:53.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
2026-04-15T22:22:53.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:22:53.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:22:53.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:22:53.687 [DEBUG] [Thread-26766] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:22:59.773 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:22:59.774 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:23:02.942 [DEBUG] [Thread-26768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:23:17.983 [DEBUG] [Thread-26769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:23:23.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:23:23.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:23:23.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
2026-04-15T22:23:24.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 23, 2), 3.70147, 77.6474, 0.0, 9.2466, 9.29671, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:23:24.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:23:02
2026-04-15T22:23:25.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:23:25.816 [DEBUG] [Thread-26770] [transport.py] [_log()] starting thread (client mode): 0xee992080
2026-04-15T22:23:25.816 [DEBUG] [Thread-26770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:23:25.837 [DEBUG] [Thread-26770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:23:25.837 [INFO] [Thread-26770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:23:25.838 [DEBUG] [Thread-26770] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:23:25.838 [DEBUG] [Thread-26770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:23:25.838 [DEBUG] [Thread-26770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:23:25.839 [DEBUG] [Thread-26770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:23:25.839 [DEBUG] [Thread-26770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:23:25.839 [DEBUG] [Thread-26770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:23:25.839 [DEBUG] [Thread-26770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:23:25.839 [DEBUG] [Thread-26770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:23:25.839 [DEBUG] [Thread-26770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:23:25.839 [DEBUG] [Thread-26770] [transport.py] [_log()] client lang: <none>
2026-04-15T22:23:25.839 [DEBUG] [Thread-26770] [transport.py] [_log()] server lang: <none>
2026-04-15T22:23:25.839 [DEBUG] [Thread-26770] [transport.py] [_log()] kex follows: False
2026-04-15T22:23:25.839 [DEBUG] [Thread-26770] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:23:25.839 [DEBUG] [Thread-26770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:23:25.839 [DEBUG] [Thread-26770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:23:25.840 [DEBUG] [Thread-26770] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:23:25.840 [DEBUG] [Thread-26770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:23:25.840 [DEBUG] [Thread-26770] [transport.py] [_log()] Compression: none
2026-04-15T22:23:25.840 [DEBUG] [Thread-26770] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:23:25.850 [DEBUG] [Thread-26770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:23:25.850 [DEBUG] [Thread-26770] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:23:25.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:23:25.851 [DEBUG] [Thread-26770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:23:25.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:23:25.852 [DEBUG] [Thread-26770] [transport.py] [_log()] userauth is OK
2026-04-15T22:23:25.852 [DEBUG] [Thread-26770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:23:25.852 [DEBUG] [Thread-26770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:23:25.852 [DEBUG] [Thread-26770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:23:25.852 [DEBUG] [Thread-26770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:23:25.876 [INFO] [Thread-26770] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:23:25.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:23:26.024 [DEBUG] [Thread-26772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:23:26.663 [DEBUG] [Thread-26770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:23:26.663 [DEBUG] [Thread-26770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:23:26.663 [DEBUG] [Thread-26770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:23:26.704 [DEBUG] [Thread-26770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:23:26.704 [DEBUG] [Thread-26770] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:23:26.706 [DEBUG] [Thread-26770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:23:26.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:23:26.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:23:26.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:23:26.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:23:26.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:23:26.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:23:26.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:23:26.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:23:26.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:23:26.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.849088 -999.00   +9.50   8.79     80   +6.30 1 1 1 2 1     0    0 2.42 -33.00 ZNESW 6.0 8.8 84.0 10.7 10.2 -25.1 10.1 -23.8 9.8 -21.8 10.0 -23.8
2026-04-15T22:23:26.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:23:26.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:23:26.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.849088
2026-04-15T22:23:26.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:23:26.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:23:26.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:23:26.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:23:26.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:23:26.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:23:02', tmtdew=3.70147, humidity=77.6474, cloud=0.0, wind=9.2466, temperature=9.29671, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:22:41.203', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.0022500000000000853, -0.008749999999999147, -0.11650000000000027, -0.026500000000000412, -0.0067499999999984794, -0.009000000000000341, -0.005749999999999034, -0.018000000000000682, -0.02949999999999875, -0.056750000000000966, -0.04899999999999949, -0.006999999999999673, 0.010249999999999204, 0.023499999999998522, 0.021999999999998465, 0.0417500000000004, -0.03850000000000087, -0.011000000000001009, -0.007250000000000867, 0.013999999999999346, 0.0337499999999995, 0.015750000000000597, 0.008750000000000924, 0.03399999999999892, -0.05850000000000044, -0.007749999999999702, 0.028499999999999304, 0.009000000000000341, 0.04300000000000104, 0.06300000000000061, 0.03300000000000125, -0.0002500000000011937], zp_timestamp='2026-04-15T20:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:23:26.725 [DEBUG] [Thread-26770] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:23:26.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:23:26.938 [DEBUG] [Thread-26774] [transport.py] [_log()] starting thread (client mode): 0xee992bf0
2026-04-15T22:23:26.938 [DEBUG] [Thread-26774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:23:26.952 [DEBUG] [Thread-26774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:23:26.952 [INFO] [Thread-26774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:23:26.960 [DEBUG] [Thread-26774] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:23:26.960 [DEBUG] [Thread-26774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:23:26.960 [DEBUG] [Thread-26774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:23:26.960 [DEBUG] [Thread-26774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:23:26.960 [DEBUG] [Thread-26774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:23:26.960 [DEBUG] [Thread-26774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:23:26.960 [DEBUG] [Thread-26774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:23:26.960 [DEBUG] [Thread-26774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:23:26.960 [DEBUG] [Thread-26774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:23:26.960 [DEBUG] [Thread-26774] [transport.py] [_log()] client lang: <none>
2026-04-15T22:23:26.961 [DEBUG] [Thread-26774] [transport.py] [_log()] server lang: <none>
2026-04-15T22:23:26.961 [DEBUG] [Thread-26774] [transport.py] [_log()] kex follows: False
2026-04-15T22:23:26.961 [DEBUG] [Thread-26774] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:23:26.961 [DEBUG] [Thread-26774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:23:26.961 [DEBUG] [Thread-26774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:23:26.961 [DEBUG] [Thread-26774] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:23:26.961 [DEBUG] [Thread-26774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:23:26.961 [DEBUG] [Thread-26774] [transport.py] [_log()] Compression: none
2026-04-15T22:23:26.961 [DEBUG] [Thread-26774] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:23:27.019 [DEBUG] [Thread-26774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:23:27.020 [DEBUG] [Thread-26774] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:23:27.020 [DEBUG] [Thread-26774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:23:27.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:23:27.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:23:27.077 [DEBUG] [Thread-26774] [transport.py] [_log()] userauth is OK
2026-04-15T22:23:27.077 [DEBUG] [Thread-26774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:23:27.077 [DEBUG] [Thread-26774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:23:27.077 [DEBUG] [Thread-26774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:23:27.077 [DEBUG] [Thread-26774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:23:27.103 [INFO] [Thread-26774] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:23:27.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:23:27.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:23:27.930 [DEBUG] [Thread-26774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:23:27.931 [DEBUG] [Thread-26774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:23:27.977 [DEBUG] [Thread-26774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:23:27.978 [DEBUG] [Thread-26774] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:23:27.986 [DEBUG] [Thread-26774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:23:27.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:23:27.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')
2026-04-15T22:23:28.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
2026-04-15T22:23:28.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:23:28.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:23:28.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:23:28.019 [DEBUG] [Thread-26774] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:23:33.013 [DEBUG] [Thread-26776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:23:48.058 [DEBUG] [Thread-26777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:23:58.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:23:58.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:23:58.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
2026-04-15T22:23:59.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 23, 37), 3.2005, 80.2949, 0.0, 11.646, 8.89396, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:23:59.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:23:37
2026-04-15T22:23:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:23:59.977 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:23:59.978 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:24:00.238 [DEBUG] [Thread-26778] [transport.py] [_log()] starting thread (client mode): 0xee9c3b20
2026-04-15T22:24:00.239 [DEBUG] [Thread-26778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:24:00.258 [DEBUG] [Thread-26778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:24:00.258 [INFO] [Thread-26778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:24:00.261 [DEBUG] [Thread-26778] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:24:00.262 [DEBUG] [Thread-26778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:24:00.262 [DEBUG] [Thread-26778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:24:00.262 [DEBUG] [Thread-26778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:24:00.262 [DEBUG] [Thread-26778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:24:00.262 [DEBUG] [Thread-26778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:24:00.262 [DEBUG] [Thread-26778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:24:00.262 [DEBUG] [Thread-26778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:24:00.262 [DEBUG] [Thread-26778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:24:00.262 [DEBUG] [Thread-26778] [transport.py] [_log()] client lang: <none>
2026-04-15T22:24:00.262 [DEBUG] [Thread-26778] [transport.py] [_log()] server lang: <none>
2026-04-15T22:24:00.262 [DEBUG] [Thread-26778] [transport.py] [_log()] kex follows: False
2026-04-15T22:24:00.262 [DEBUG] [Thread-26778] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:24:00.263 [DEBUG] [Thread-26778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:24:00.263 [DEBUG] [Thread-26778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:24:00.263 [DEBUG] [Thread-26778] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:24:00.263 [DEBUG] [Thread-26778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:24:00.263 [DEBUG] [Thread-26778] [transport.py] [_log()] Compression: none
2026-04-15T22:24:00.263 [DEBUG] [Thread-26778] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:24:00.279 [DEBUG] [Thread-26778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:24:00.280 [DEBUG] [Thread-26778] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:24:00.280 [DEBUG] [Thread-26778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:24:00.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:24:00.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:24:00.281 [DEBUG] [Thread-26778] [transport.py] [_log()] userauth is OK
2026-04-15T22:24:00.281 [DEBUG] [Thread-26778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:24:00.282 [DEBUG] [Thread-26778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:24:00.282 [DEBUG] [Thread-26778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:24:00.282 [DEBUG] [Thread-26778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:24:00.299 [INFO] [Thread-26778] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:24:00.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:24:01.071 [DEBUG] [Thread-26778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:24:01.072 [DEBUG] [Thread-26778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:24:01.072 [DEBUG] [Thread-26778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:24:01.112 [DEBUG] [Thread-26778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:24:01.112 [DEBUG] [Thread-26778] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:24:01.115 [DEBUG] [Thread-26778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:24:01.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:24:01.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:24:01.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:24:01.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:24:01.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:24:01.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:24:01.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:24:01.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:24:01.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:24:01.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.849435 -999.00   +9.50   5.52     80   +6.30 1 1 1 2 1     0    0 2.47 -30.46 ZNESW 7.1 5.5 90.8 9.6 10.2 -25.0 10.1 -23.9 9.8 -21.8 10.0 -23.8
2026-04-15T22:24:01.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:24:01.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:24:01.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.849435
2026-04-15T22:24:01.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:24:01.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:24:01.142 [DEBUG] [Thread-26778] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:24:01.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:24:01.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:24:01.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:24:01.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:23:37', tmtdew=3.2005, humidity=80.2949, cloud=0.0, wind=11.646, temperature=8.89396, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:23:11.184', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.0022500000000000853, -0.008749999999999147, -0.11650000000000027, -0.026500000000000412, -0.0067499999999984794, -0.009000000000000341, -0.005749999999999034, -0.018000000000000682, -0.02949999999999875, -0.056750000000000966, -0.04899999999999949, -0.006999999999999673, 0.010249999999999204, 0.023499999999998522, 0.021999999999998465, 0.0417500000000004, -0.03850000000000087, -0.011000000000001009, -0.007250000000000867, 0.013999999999999346, 0.0337499999999995, 0.015750000000000597, 0.008750000000000924, 0.03399999999999892, -0.05850000000000044, -0.007749999999999702, 0.028499999999999304, 0.009000000000000341, 0.04300000000000104, 0.06300000000000061, 0.03300000000000125, -0.0002500000000011937], zp_timestamp='2026-04-15T20:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:24:01.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:24:03.090 [DEBUG] [Thread-26781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:24:18.135 [DEBUG] [Thread-26782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:24:26.171 [DEBUG] [Thread-26783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:24:33.165 [DEBUG] [Thread-26784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:24:48.197 [DEBUG] [Thread-26785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:25:00.178 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:25:00.180 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:25:03.229 [DEBUG] [Thread-26786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:25:18.259 [DEBUG] [Thread-26787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:25:26.327 [DEBUG] [Thread-26788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:25:33.290 [DEBUG] [Thread-26789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:25:48.322 [DEBUG] [Thread-26790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:25:59.351 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:26:00.384 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:26:00.385 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:26:03.353 [DEBUG] [Thread-26791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:26:06.073 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:26:10.168 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:26:14.794 [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
2026-04-15T22:26:18.384 [DEBUG] [Thread-26792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:26:26.482 [DEBUG] [Thread-26793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:26:33.418 [DEBUG] [Thread-26794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:26:44.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:26:44.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:26:44.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T22:26:46.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 26, 35), 3.13154, 80.6926, 0.0, 12.4222, 8.99316, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:26:46.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:26:35
2026-04-15T22:26:46.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:26:46.952 [DEBUG] [Thread-26795] [transport.py] [_log()] starting thread (client mode): 0xee9c3460
2026-04-15T22:26:46.953 [DEBUG] [Thread-26795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:26:46.973 [DEBUG] [Thread-26795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:26:46.973 [INFO] [Thread-26795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:26:46.976 [DEBUG] [Thread-26795] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:26:46.976 [DEBUG] [Thread-26795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:26:46.976 [DEBUG] [Thread-26795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:26:46.976 [DEBUG] [Thread-26795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:26:46.976 [DEBUG] [Thread-26795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:26:46.977 [DEBUG] [Thread-26795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:26:46.977 [DEBUG] [Thread-26795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:26:46.977 [DEBUG] [Thread-26795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:26:46.977 [DEBUG] [Thread-26795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:26:46.977 [DEBUG] [Thread-26795] [transport.py] [_log()] client lang: <none>
2026-04-15T22:26:46.977 [DEBUG] [Thread-26795] [transport.py] [_log()] server lang: <none>
2026-04-15T22:26:46.977 [DEBUG] [Thread-26795] [transport.py] [_log()] kex follows: False
2026-04-15T22:26:46.977 [DEBUG] [Thread-26795] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:26:46.977 [DEBUG] [Thread-26795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:26:46.977 [DEBUG] [Thread-26795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:26:46.977 [DEBUG] [Thread-26795] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:26:46.978 [DEBUG] [Thread-26795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:26:46.978 [DEBUG] [Thread-26795] [transport.py] [_log()] Compression: none
2026-04-15T22:26:46.978 [DEBUG] [Thread-26795] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:26:46.995 [DEBUG] [Thread-26795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:26:46.996 [DEBUG] [Thread-26795] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:26:46.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:26:46.996 [DEBUG] [Thread-26795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:26:46.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:26:46.997 [DEBUG] [Thread-26795] [transport.py] [_log()] userauth is OK
2026-04-15T22:26:46.997 [DEBUG] [Thread-26795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:26:46.997 [DEBUG] [Thread-26795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:26:46.997 [DEBUG] [Thread-26795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:26:46.997 [DEBUG] [Thread-26795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:26:47.019 [INFO] [Thread-26795] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:26:47.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:26:47.821 [DEBUG] [Thread-26795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:26:47.821 [DEBUG] [Thread-26795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:26:47.822 [DEBUG] [Thread-26795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:26:47.862 [DEBUG] [Thread-26795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:26:47.862 [DEBUG] [Thread-26795] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:26:47.865 [DEBUG] [Thread-26795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:26:47.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:26:47.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:26:47.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:26:47.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:26:47.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:26:47.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:26:47.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:26:47.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:26:47.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:26:47.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.851519 -999.00   +9.50   7.84     80   +6.30 1 1 1 2 1     0    0 2.66 -22.62 ZNESW 7.5 7.8 79.6 9.5 10.2 -25.2 10.0 -23.9 9.8 -21.8 10.0 -23.8
2026-04-15T22:26:47.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:26:47.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:26:47.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.851519
2026-04-15T22:26:47.888 [DEBUG] [Thread-26795] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:26:47.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:26:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:26:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:26:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:26:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:26:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:26:35', tmtdew=3.13154, humidity=80.6926, cloud=0.0, wind=12.4222, temperature=8.99316, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:26:11.242', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.004249999999998977, -0.03275000000000006, -0.09250000000000114, -0.0129999999999999, 0.0032500000000013074, -0.006000000000000227, 0.02325000000000088, 0.02149999999999963, -0.031000000000000583, -0.04475000000000051, -0.0649999999999995, 0.0015000000000000568, 0.004749999999999588, -0.015000000000000568, 0.02499999999999858, 0.038750000000000284, -0.024499999999999744, 0.004999999999999005, 0.00024999999999941735, 0.03599999999999959, 0.035749999999998394, 0.011250000000000426, 0.0007500000000000284, 0.008999999999998565, -0.06049999999999933, -0.003249999999999531, -0.0034999999999989484, 0.0235000000000003, 0.032000000000001805, 0.11299999999999955, 0.0730000000000004, -0.04525000000000112], zp_timestamp='2026-04-15T20:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:26:48.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:26:48.146 [DEBUG] [Thread-26798] [transport.py] [_log()] starting thread (client mode): 0xf1364ee0
2026-04-15T22:26:48.146 [DEBUG] [Thread-26798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:26:48.160 [DEBUG] [Thread-26798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:26:48.160 [INFO] [Thread-26798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:26:48.167 [DEBUG] [Thread-26798] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:26:48.167 [DEBUG] [Thread-26798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:26:48.167 [DEBUG] [Thread-26798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:26:48.168 [DEBUG] [Thread-26798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:26:48.168 [DEBUG] [Thread-26798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:26:48.168 [DEBUG] [Thread-26798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:26:48.168 [DEBUG] [Thread-26798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:26:48.168 [DEBUG] [Thread-26798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:26:48.168 [DEBUG] [Thread-26798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:26:48.168 [DEBUG] [Thread-26798] [transport.py] [_log()] client lang: <none>
2026-04-15T22:26:48.168 [DEBUG] [Thread-26798] [transport.py] [_log()] server lang: <none>
2026-04-15T22:26:48.168 [DEBUG] [Thread-26798] [transport.py] [_log()] kex follows: False
2026-04-15T22:26:48.168 [DEBUG] [Thread-26798] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:26:48.168 [DEBUG] [Thread-26798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:26:48.168 [DEBUG] [Thread-26798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:26:48.168 [DEBUG] [Thread-26798] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:26:48.169 [DEBUG] [Thread-26798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:26:48.169 [DEBUG] [Thread-26798] [transport.py] [_log()] Compression: none
2026-04-15T22:26:48.169 [DEBUG] [Thread-26798] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:26:48.225 [DEBUG] [Thread-26798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:26:48.226 [DEBUG] [Thread-26798] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:26:48.226 [DEBUG] [Thread-26798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:26:48.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:26:48.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:26:48.282 [DEBUG] [Thread-26798] [transport.py] [_log()] userauth is OK
2026-04-15T22:26:48.282 [DEBUG] [Thread-26798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:26:48.282 [DEBUG] [Thread-26798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:26:48.283 [DEBUG] [Thread-26798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:26:48.283 [DEBUG] [Thread-26798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:26:48.307 [INFO] [Thread-26798] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:26:48.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:26:48.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:26:48.449 [DEBUG] [Thread-26800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:26:49.125 [DEBUG] [Thread-26798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:26:49.126 [DEBUG] [Thread-26798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:26:49.173 [DEBUG] [Thread-26798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:26:49.173 [DEBUG] [Thread-26798] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:26:49.182 [DEBUG] [Thread-26798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:26:49.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:26:49.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')
2026-04-15T22:26:49.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
2026-04-15T22:26:49.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:26:49.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:26:49.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:26:49.221 [DEBUG] [Thread-26798] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:27:00.586 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:27:00.587 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:27:03.498 [DEBUG] [Thread-26801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:27:18.529 [DEBUG] [Thread-26802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:27:19.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:27:19.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:27:19.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
2026-04-15T22:27:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 27, 11), 3.76201, 77.3629, 0.0, 9.63468, 9.2134, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:27:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:27:11
2026-04-15T22:27:21.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:27:21.462 [DEBUG] [Thread-26803] [transport.py] [_log()] starting thread (client mode): 0xee992b00
2026-04-15T22:27:21.463 [DEBUG] [Thread-26803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:27:21.481 [DEBUG] [Thread-26803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:27:21.481 [INFO] [Thread-26803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:27:21.483 [DEBUG] [Thread-26803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:27:21.483 [DEBUG] [Thread-26803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:27:21.483 [DEBUG] [Thread-26803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:27:21.483 [DEBUG] [Thread-26803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:27:21.483 [DEBUG] [Thread-26803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:27:21.483 [DEBUG] [Thread-26803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:27:21.483 [DEBUG] [Thread-26803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:27:21.483 [DEBUG] [Thread-26803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:27:21.483 [DEBUG] [Thread-26803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:27:21.484 [DEBUG] [Thread-26803] [transport.py] [_log()] client lang: <none>
2026-04-15T22:27:21.484 [DEBUG] [Thread-26803] [transport.py] [_log()] server lang: <none>
2026-04-15T22:27:21.484 [DEBUG] [Thread-26803] [transport.py] [_log()] kex follows: False
2026-04-15T22:27:21.484 [DEBUG] [Thread-26803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:27:21.484 [DEBUG] [Thread-26803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:27:21.484 [DEBUG] [Thread-26803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:27:21.484 [DEBUG] [Thread-26803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:27:21.484 [DEBUG] [Thread-26803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:27:21.484 [DEBUG] [Thread-26803] [transport.py] [_log()] Compression: none
2026-04-15T22:27:21.484 [DEBUG] [Thread-26803] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:27:21.492 [DEBUG] [Thread-26803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:27:21.492 [DEBUG] [Thread-26803] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:27:21.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:27:21.492 [DEBUG] [Thread-26803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:27:21.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:27:21.493 [DEBUG] [Thread-26803] [transport.py] [_log()] userauth is OK
2026-04-15T22:27:21.493 [DEBUG] [Thread-26803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:27:21.494 [DEBUG] [Thread-26803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:27:21.494 [DEBUG] [Thread-26803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:27:21.494 [DEBUG] [Thread-26803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:27:21.507 [INFO] [Thread-26803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:27:21.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:27:22.286 [DEBUG] [Thread-26803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:27:22.286 [DEBUG] [Thread-26803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:27:22.287 [DEBUG] [Thread-26803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:27:22.327 [DEBUG] [Thread-26803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:27:22.327 [DEBUG] [Thread-26803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:27:22.331 [DEBUG] [Thread-26803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:27:22.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:27:22.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:27:22.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:27:22.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:27:22.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:27:22.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:27:22.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:27:22.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:27:22.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:27:22.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.851866 -999.00   +9.50   5.94     80   +6.30 1 1 1 2 1     0    0 2.69 -22.36 ZNESW 9.2 5.9 119.4 11.3 10.1 -25.1 10.1 -23.8 9.7 -21.8 10.0 -23.8
2026-04-15T22:27:22.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:27:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:27:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.851866
2026-04-15T22:27:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:27:22.355 [DEBUG] [Thread-26803] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:27:22.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:27:22.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:27:22.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:27:22.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:27:22.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:27:11', tmtdew=3.76201, humidity=77.3629, cloud=0.0, wind=9.63468, temperature=9.2134, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:26:41.222', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.004249999999998977, -0.03275000000000006, -0.09250000000000114, -0.0129999999999999, 0.0032500000000013074, -0.006000000000000227, 0.02325000000000088, 0.02149999999999963, -0.031000000000000583, -0.04475000000000051, -0.0649999999999995, 0.0015000000000000568, 0.004749999999999588, -0.015000000000000568, 0.02499999999999858, 0.038750000000000284, -0.024499999999999744, 0.004999999999999005, 0.00024999999999941735, 0.03599999999999959, 0.035749999999998394, 0.011250000000000426, 0.0007500000000000284, 0.008999999999998565, -0.06049999999999933, -0.003249999999999531, -0.0034999999999989484, 0.0235000000000003, 0.032000000000001805, 0.11299999999999955, 0.0730000000000004, -0.04525000000000112], zp_timestamp='2026-04-15T20:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:27:22.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:27:22.610 [DEBUG] [Thread-26806] [transport.py] [_log()] starting thread (client mode): 0xee992a10
2026-04-15T22:27:22.610 [DEBUG] [Thread-26806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:27:22.624 [DEBUG] [Thread-26806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:27:22.624 [INFO] [Thread-26806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:27:22.632 [DEBUG] [Thread-26806] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:27:22.632 [DEBUG] [Thread-26806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:27:22.632 [DEBUG] [Thread-26806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:27:22.632 [DEBUG] [Thread-26806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:27:22.632 [DEBUG] [Thread-26806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:27:22.632 [DEBUG] [Thread-26806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:27:22.632 [DEBUG] [Thread-26806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:27:22.632 [DEBUG] [Thread-26806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:27:22.632 [DEBUG] [Thread-26806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:27:22.632 [DEBUG] [Thread-26806] [transport.py] [_log()] client lang: <none>
2026-04-15T22:27:22.633 [DEBUG] [Thread-26806] [transport.py] [_log()] server lang: <none>
2026-04-15T22:27:22.633 [DEBUG] [Thread-26806] [transport.py] [_log()] kex follows: False
2026-04-15T22:27:22.633 [DEBUG] [Thread-26806] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:27:22.633 [DEBUG] [Thread-26806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:27:22.633 [DEBUG] [Thread-26806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:27:22.633 [DEBUG] [Thread-26806] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:27:22.633 [DEBUG] [Thread-26806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:27:22.633 [DEBUG] [Thread-26806] [transport.py] [_log()] Compression: none
2026-04-15T22:27:22.633 [DEBUG] [Thread-26806] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:27:22.688 [DEBUG] [Thread-26806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:27:22.688 [DEBUG] [Thread-26806] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:27:22.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:27:22.689 [DEBUG] [Thread-26806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:27:22.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:27:22.745 [DEBUG] [Thread-26806] [transport.py] [_log()] userauth is OK
2026-04-15T22:27:22.746 [DEBUG] [Thread-26806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:27:22.746 [DEBUG] [Thread-26806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:27:22.746 [DEBUG] [Thread-26806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:27:22.746 [DEBUG] [Thread-26806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:27:22.774 [INFO] [Thread-26806] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:27:22.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:27:22.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:27:23.594 [DEBUG] [Thread-26806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:27:23.594 [DEBUG] [Thread-26806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:27:23.642 [DEBUG] [Thread-26806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:27:23.642 [DEBUG] [Thread-26806] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:27:23.651 [DEBUG] [Thread-26806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:27:23.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:27:23.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')
2026-04-15T22:27:23.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
2026-04-15T22:27:23.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:27:23.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:27:23.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:27:23.688 [DEBUG] [Thread-26806] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:27:26.638 [DEBUG] [Thread-26808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:27:33.059 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:27:33.559 [DEBUG] [Thread-26809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:27:41.501 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:27:45.755 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:27:48.608 [DEBUG] [Thread-26810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:27:53.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:27:53.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:27:53.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
2026-04-15T22:27:55.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 27, 46), 3.10194, 80.858, 0.0, 12.1399, 8.9928, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:27:55.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:27:46
2026-04-15T22:27:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:27:55.869 [DEBUG] [Thread-26811] [transport.py] [_log()] starting thread (client mode): 0xf13e0a30
2026-04-15T22:27:55.870 [DEBUG] [Thread-26811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:27:55.888 [DEBUG] [Thread-26811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:27:55.888 [INFO] [Thread-26811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:27:55.891 [DEBUG] [Thread-26811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:27:55.891 [DEBUG] [Thread-26811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:27:55.892 [DEBUG] [Thread-26811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:27:55.892 [DEBUG] [Thread-26811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:27:55.892 [DEBUG] [Thread-26811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:27:55.892 [DEBUG] [Thread-26811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:27:55.892 [DEBUG] [Thread-26811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:27:55.892 [DEBUG] [Thread-26811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:27:55.892 [DEBUG] [Thread-26811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:27:55.892 [DEBUG] [Thread-26811] [transport.py] [_log()] client lang: <none>
2026-04-15T22:27:55.892 [DEBUG] [Thread-26811] [transport.py] [_log()] server lang: <none>
2026-04-15T22:27:55.892 [DEBUG] [Thread-26811] [transport.py] [_log()] kex follows: False
2026-04-15T22:27:55.892 [DEBUG] [Thread-26811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:27:55.893 [DEBUG] [Thread-26811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:27:55.893 [DEBUG] [Thread-26811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:27:55.893 [DEBUG] [Thread-26811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:27:55.893 [DEBUG] [Thread-26811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:27:55.893 [DEBUG] [Thread-26811] [transport.py] [_log()] Compression: none
2026-04-15T22:27:55.893 [DEBUG] [Thread-26811] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:27:55.911 [DEBUG] [Thread-26811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:27:55.911 [DEBUG] [Thread-26811] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:27:55.912 [DEBUG] [Thread-26811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:27:55.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:27:55.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:27:55.913 [DEBUG] [Thread-26811] [transport.py] [_log()] userauth is OK
2026-04-15T22:27:55.913 [DEBUG] [Thread-26811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:27:55.913 [DEBUG] [Thread-26811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:27:55.913 [DEBUG] [Thread-26811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:27:55.913 [DEBUG] [Thread-26811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:27:55.935 [INFO] [Thread-26811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:27:55.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:27:56.745 [DEBUG] [Thread-26811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:27:56.745 [DEBUG] [Thread-26811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:27:56.746 [DEBUG] [Thread-26811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:27:56.786 [DEBUG] [Thread-26811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:27:56.786 [DEBUG] [Thread-26811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:27:56.789 [DEBUG] [Thread-26811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:27:56.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:27:56.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:27:56.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:27:56.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:27:56.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:27:56.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:27:56.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:27:56.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:27:56.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:27:56.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.852213 -999.00   +9.50   8.06     80   +6.30 1 1 1 2 1     0    0 2.67 -22.46 ZNESW 6.6 8.1 99.8 10.8 10.1 -25.1 10.0 -23.7 9.8 -21.7 10.1 -23.9
2026-04-15T22:27:56.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:27:56.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:27:56.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.852213
2026-04-15T22:27:56.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:27:56.812 [DEBUG] [Thread-26811] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:27:56.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:27:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:27:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:27:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:27:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:27:46', tmtdew=3.10194, humidity=80.858, cloud=0.0, wind=12.1399, temperature=8.9928, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:27:11.203', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.004249999999998977, -0.03275000000000006, -0.09250000000000114, -0.0129999999999999, 0.0032500000000013074, -0.006000000000000227, 0.02325000000000088, 0.02149999999999963, -0.031000000000000583, -0.04475000000000051, -0.0649999999999995, 0.0015000000000000568, 0.004749999999999588, -0.015000000000000568, 0.02499999999999858, 0.038750000000000284, -0.024499999999999744, 0.004999999999999005, 0.00024999999999941735, 0.03599999999999959, 0.035749999999998394, 0.011250000000000426, 0.0007500000000000284, 0.008999999999998565, -0.06049999999999933, -0.003249999999999531, -0.0034999999999989484, 0.0235000000000003, 0.032000000000001805, 0.11299999999999955, 0.0730000000000004, -0.04525000000000112], zp_timestamp='2026-04-15T20:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:27:57.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:27:57.047 [DEBUG] [Thread-26814] [transport.py] [_log()] starting thread (client mode): 0xf13e3190
2026-04-15T22:27:57.048 [DEBUG] [Thread-26814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:27:57.063 [DEBUG] [Thread-26814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:27:57.063 [INFO] [Thread-26814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:27:57.070 [DEBUG] [Thread-26814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:27:57.070 [DEBUG] [Thread-26814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:27:57.070 [DEBUG] [Thread-26814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:27:57.070 [DEBUG] [Thread-26814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:27:57.070 [DEBUG] [Thread-26814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:27:57.071 [DEBUG] [Thread-26814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:27:57.071 [DEBUG] [Thread-26814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:27:57.071 [DEBUG] [Thread-26814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:27:57.071 [DEBUG] [Thread-26814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:27:57.071 [DEBUG] [Thread-26814] [transport.py] [_log()] client lang: <none>
2026-04-15T22:27:57.071 [DEBUG] [Thread-26814] [transport.py] [_log()] server lang: <none>
2026-04-15T22:27:57.071 [DEBUG] [Thread-26814] [transport.py] [_log()] kex follows: False
2026-04-15T22:27:57.071 [DEBUG] [Thread-26814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:27:57.071 [DEBUG] [Thread-26814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:27:57.071 [DEBUG] [Thread-26814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:27:57.071 [DEBUG] [Thread-26814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:27:57.071 [DEBUG] [Thread-26814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:27:57.071 [DEBUG] [Thread-26814] [transport.py] [_log()] Compression: none
2026-04-15T22:27:57.072 [DEBUG] [Thread-26814] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:27:57.130 [DEBUG] [Thread-26814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:27:57.130 [DEBUG] [Thread-26814] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:27:57.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:27:57.131 [DEBUG] [Thread-26814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:27:57.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:27:57.192 [DEBUG] [Thread-26814] [transport.py] [_log()] userauth is OK
2026-04-15T22:27:57.192 [DEBUG] [Thread-26814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:27:57.192 [DEBUG] [Thread-26814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:27:57.192 [DEBUG] [Thread-26814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:27:57.192 [DEBUG] [Thread-26814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:27:57.213 [INFO] [Thread-26814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:27:57.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:27:57.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:27:58.030 [DEBUG] [Thread-26814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:27:58.031 [DEBUG] [Thread-26814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:27:58.079 [DEBUG] [Thread-26814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:27:58.079 [DEBUG] [Thread-26814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:27:58.088 [DEBUG] [Thread-26814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:27:58.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:27:58.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')
2026-04-15T22:27:58.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
2026-04-15T22:27:58.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:27:58.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:27:58.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:27:58.122 [DEBUG] [Thread-26814] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:28:00.788 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:28:00.789 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:28:03.639 [DEBUG] [Thread-26816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:28:18.683 [DEBUG] [Thread-26817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:28:26.784 [DEBUG] [Thread-26818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:28:28.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:28:28.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:28:28.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T22:28:29.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 28, 22), 3.59762, 77.9456, 0.0, 9.88164, 9.17981, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:28:29.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:28:22
2026-04-15T22:28:29.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:28:30.255 [DEBUG] [Thread-26819] [transport.py] [_log()] starting thread (client mode): 0xee9924d0
2026-04-15T22:28:30.256 [DEBUG] [Thread-26819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:28:30.276 [DEBUG] [Thread-26819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:28:30.276 [INFO] [Thread-26819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:28:30.279 [DEBUG] [Thread-26819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:28:30.280 [DEBUG] [Thread-26819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:28:30.280 [DEBUG] [Thread-26819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:28:30.280 [DEBUG] [Thread-26819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:28:30.280 [DEBUG] [Thread-26819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:28:30.280 [DEBUG] [Thread-26819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:28:30.280 [DEBUG] [Thread-26819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:28:30.280 [DEBUG] [Thread-26819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:28:30.280 [DEBUG] [Thread-26819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:28:30.280 [DEBUG] [Thread-26819] [transport.py] [_log()] client lang: <none>
2026-04-15T22:28:30.280 [DEBUG] [Thread-26819] [transport.py] [_log()] server lang: <none>
2026-04-15T22:28:30.280 [DEBUG] [Thread-26819] [transport.py] [_log()] kex follows: False
2026-04-15T22:28:30.281 [DEBUG] [Thread-26819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:28:30.281 [DEBUG] [Thread-26819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:28:30.281 [DEBUG] [Thread-26819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:28:30.281 [DEBUG] [Thread-26819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:28:30.281 [DEBUG] [Thread-26819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:28:30.281 [DEBUG] [Thread-26819] [transport.py] [_log()] Compression: none
2026-04-15T22:28:30.281 [DEBUG] [Thread-26819] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:28:30.298 [DEBUG] [Thread-26819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:28:30.298 [DEBUG] [Thread-26819] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:28:30.299 [DEBUG] [Thread-26819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:28:30.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:28:30.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:28:30.300 [DEBUG] [Thread-26819] [transport.py] [_log()] userauth is OK
2026-04-15T22:28:30.300 [DEBUG] [Thread-26819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:28:30.300 [DEBUG] [Thread-26819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:28:30.300 [DEBUG] [Thread-26819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:28:30.301 [DEBUG] [Thread-26819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:28:30.320 [INFO] [Thread-26819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:28:30.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:28:31.099 [DEBUG] [Thread-26819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:28:31.099 [DEBUG] [Thread-26819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:28:31.100 [DEBUG] [Thread-26819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:28:31.140 [DEBUG] [Thread-26819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:28:31.140 [DEBUG] [Thread-26819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:28:31.143 [DEBUG] [Thread-26819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:28:31.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:28:31.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:28:31.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:28:31.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:28:31.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:28:31.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:28:31.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:28:31.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:28:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:28:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.852560 -999.00   +9.50   7.88     80   +6.40 1 1 1 2 1     0    0 2.69 -20.69 ZNESW 6.7 7.9 86.0 10.1 10.1 -25.1 10.0 -23.9 9.7 -21.8 10.0 -23.8
2026-04-15T22:28:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:28:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:28:31.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.852560
2026-04-15T22:28:31.170 [DEBUG] [Thread-26819] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:28:31.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:28:31.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:28:31.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:28:31.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:28:31.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:28:31.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:28:22', tmtdew=3.59762, humidity=77.9456, cloud=0.0, wind=9.88164, temperature=9.17981, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:27:41.184', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.004249999999998977, -0.03275000000000006, -0.09250000000000114, -0.0129999999999999, 0.0032500000000013074, -0.006000000000000227, 0.02325000000000088, 0.02149999999999963, -0.031000000000000583, -0.04475000000000051, -0.0649999999999995, 0.0015000000000000568, 0.004749999999999588, -0.015000000000000568, 0.02499999999999858, 0.038750000000000284, -0.024499999999999744, 0.004999999999999005, 0.00024999999999941735, 0.03599999999999959, 0.035749999999998394, 0.011250000000000426, 0.0007500000000000284, 0.008999999999998565, -0.06049999999999933, -0.003249999999999531, -0.0034999999999989484, 0.0235000000000003, 0.032000000000001805, 0.11299999999999955, 0.0730000000000004, -0.04525000000000112], zp_timestamp='2026-04-15T20:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:28:31.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:28:31.430 [DEBUG] [Thread-26822] [transport.py] [_log()] starting thread (client mode): 0xf1366bc0
2026-04-15T22:28:31.431 [DEBUG] [Thread-26822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:28:31.449 [DEBUG] [Thread-26822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:28:31.449 [INFO] [Thread-26822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:28:31.459 [DEBUG] [Thread-26822] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:28:31.459 [DEBUG] [Thread-26822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:28:31.459 [DEBUG] [Thread-26822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:28:31.459 [DEBUG] [Thread-26822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:28:31.459 [DEBUG] [Thread-26822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:28:31.460 [DEBUG] [Thread-26822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:28:31.460 [DEBUG] [Thread-26822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:28:31.460 [DEBUG] [Thread-26822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:28:31.460 [DEBUG] [Thread-26822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:28:31.460 [DEBUG] [Thread-26822] [transport.py] [_log()] client lang: <none>
2026-04-15T22:28:31.460 [DEBUG] [Thread-26822] [transport.py] [_log()] server lang: <none>
2026-04-15T22:28:31.460 [DEBUG] [Thread-26822] [transport.py] [_log()] kex follows: False
2026-04-15T22:28:31.460 [DEBUG] [Thread-26822] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:28:31.460 [DEBUG] [Thread-26822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:28:31.460 [DEBUG] [Thread-26822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:28:31.460 [DEBUG] [Thread-26822] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:28:31.461 [DEBUG] [Thread-26822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:28:31.461 [DEBUG] [Thread-26822] [transport.py] [_log()] Compression: none
2026-04-15T22:28:31.461 [DEBUG] [Thread-26822] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:28:31.519 [DEBUG] [Thread-26822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:28:31.519 [DEBUG] [Thread-26822] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:28:31.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:28:31.520 [DEBUG] [Thread-26822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:28:31.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:28:31.581 [DEBUG] [Thread-26822] [transport.py] [_log()] userauth is OK
2026-04-15T22:28:31.581 [DEBUG] [Thread-26822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:28:31.581 [DEBUG] [Thread-26822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:28:31.582 [DEBUG] [Thread-26822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:28:31.582 [DEBUG] [Thread-26822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:28:31.611 [INFO] [Thread-26822] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:28:31.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:28:31.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:28:32.445 [DEBUG] [Thread-26822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:28:32.445 [DEBUG] [Thread-26822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:28:32.493 [DEBUG] [Thread-26822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:28:32.493 [DEBUG] [Thread-26822] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:28:32.503 [DEBUG] [Thread-26822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:28:32.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:28:32.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')
2026-04-15T22:28:32.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
2026-04-15T22:28:32.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:28:32.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:28:32.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:28:32.539 [DEBUG] [Thread-26822] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:28:33.711 [DEBUG] [Thread-26824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:28:48.755 [DEBUG] [Thread-26825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:29:00.987 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:29:00.988 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:29:02.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:29:02.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:29:02.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
2026-04-15T22:29:03.787 [DEBUG] [Thread-26826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:29:03.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 28, 22), 3.59762, 77.9456, 0.0, 9.88164, 9.17981, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:29:03.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:28:22
2026-04-15T22:29:04.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:29:04.806 [DEBUG] [Thread-26827] [transport.py] [_log()] starting thread (client mode): 0xee990be0
2026-04-15T22:29:04.806 [DEBUG] [Thread-26827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:29:04.825 [DEBUG] [Thread-26827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:29:04.826 [INFO] [Thread-26827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:29:04.829 [DEBUG] [Thread-26827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:29:04.829 [DEBUG] [Thread-26827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:29:04.829 [DEBUG] [Thread-26827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:29:04.829 [DEBUG] [Thread-26827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:29:04.829 [DEBUG] [Thread-26827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:29:04.829 [DEBUG] [Thread-26827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:29:04.829 [DEBUG] [Thread-26827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:29:04.829 [DEBUG] [Thread-26827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:29:04.829 [DEBUG] [Thread-26827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:29:04.830 [DEBUG] [Thread-26827] [transport.py] [_log()] client lang: <none>
2026-04-15T22:29:04.830 [DEBUG] [Thread-26827] [transport.py] [_log()] server lang: <none>
2026-04-15T22:29:04.830 [DEBUG] [Thread-26827] [transport.py] [_log()] kex follows: False
2026-04-15T22:29:04.830 [DEBUG] [Thread-26827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:29:04.830 [DEBUG] [Thread-26827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:29:04.830 [DEBUG] [Thread-26827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:29:04.830 [DEBUG] [Thread-26827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:29:04.830 [DEBUG] [Thread-26827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:29:04.830 [DEBUG] [Thread-26827] [transport.py] [_log()] Compression: none
2026-04-15T22:29:04.830 [DEBUG] [Thread-26827] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:29:04.850 [DEBUG] [Thread-26827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:29:04.850 [DEBUG] [Thread-26827] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:29:04.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:29:04.851 [DEBUG] [Thread-26827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:29:04.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:29:04.852 [DEBUG] [Thread-26827] [transport.py] [_log()] userauth is OK
2026-04-15T22:29:04.852 [DEBUG] [Thread-26827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:29:04.852 [DEBUG] [Thread-26827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:29:04.852 [DEBUG] [Thread-26827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:29:04.852 [DEBUG] [Thread-26827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:29:04.888 [INFO] [Thread-26827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:29:04.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:29:05.665 [DEBUG] [Thread-26827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:29:05.665 [DEBUG] [Thread-26827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:29:05.665 [DEBUG] [Thread-26827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:29:05.706 [DEBUG] [Thread-26827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:29:05.706 [DEBUG] [Thread-26827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:29:05.709 [DEBUG] [Thread-26827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:29:05.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:29:05.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:29:05.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:29:05.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:29:05.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:29:05.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:29:05.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:29:05.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:29:05.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:29:05.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.853255 -999.00   +9.50   7.45     81   +6.40 1 1 1 2 1     0    0 2.61 -23.90 ZNESW 6.9 7.5 80.3 11.9 10.1 -25.0 10.0 -24.0 9.7 -21.9 10.0 -24.0
2026-04-15T22:29:05.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:29:05.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:29:05.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.853255
2026-04-15T22:29:05.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:29:05.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:29:05.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:29:05.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:29:05.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:29:05.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:28:22', tmtdew=3.59762, humidity=77.9456, cloud=0.0, wind=9.88164, temperature=9.17981, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:28:41.232', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.004249999999998977, -0.03275000000000006, -0.09250000000000114, -0.0129999999999999, 0.0032500000000013074, -0.006000000000000227, 0.02325000000000088, 0.02149999999999963, -0.031000000000000583, -0.04475000000000051, -0.0649999999999995, 0.0015000000000000568, 0.004749999999999588, -0.015000000000000568, 0.02499999999999858, 0.038750000000000284, -0.024499999999999744, 0.004999999999999005, 0.00024999999999941735, 0.03599999999999959, 0.035749999999998394, 0.011250000000000426, 0.0007500000000000284, 0.008999999999998565, -0.06049999999999933, -0.003249999999999531, -0.0034999999999989484, 0.0235000000000003, 0.032000000000001805, 0.11299999999999955, 0.0730000000000004, -0.04525000000000112], zp_timestamp='2026-04-15T20:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:29:05.735 [DEBUG] [Thread-26827] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:29:05.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:29:05.990 [DEBUG] [Thread-26830] [transport.py] [_log()] starting thread (client mode): 0xee9c2260
2026-04-15T22:29:05.990 [DEBUG] [Thread-26830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:29:06.005 [DEBUG] [Thread-26830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:29:06.005 [INFO] [Thread-26830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:29:06.012 [DEBUG] [Thread-26830] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:29:06.012 [DEBUG] [Thread-26830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:29:06.013 [DEBUG] [Thread-26830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:29:06.013 [DEBUG] [Thread-26830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:29:06.013 [DEBUG] [Thread-26830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:29:06.013 [DEBUG] [Thread-26830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:29:06.013 [DEBUG] [Thread-26830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:29:06.013 [DEBUG] [Thread-26830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:29:06.013 [DEBUG] [Thread-26830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:29:06.013 [DEBUG] [Thread-26830] [transport.py] [_log()] client lang: <none>
2026-04-15T22:29:06.013 [DEBUG] [Thread-26830] [transport.py] [_log()] server lang: <none>
2026-04-15T22:29:06.013 [DEBUG] [Thread-26830] [transport.py] [_log()] kex follows: False
2026-04-15T22:29:06.013 [DEBUG] [Thread-26830] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:29:06.014 [DEBUG] [Thread-26830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:29:06.014 [DEBUG] [Thread-26830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:29:06.014 [DEBUG] [Thread-26830] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:29:06.014 [DEBUG] [Thread-26830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:29:06.014 [DEBUG] [Thread-26830] [transport.py] [_log()] Compression: none
2026-04-15T22:29:06.014 [DEBUG] [Thread-26830] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:29:06.071 [DEBUG] [Thread-26830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:29:06.072 [DEBUG] [Thread-26830] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:29:06.072 [DEBUG] [Thread-26830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:29:06.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:29:06.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:29:06.128 [DEBUG] [Thread-26830] [transport.py] [_log()] userauth is OK
2026-04-15T22:29:06.129 [DEBUG] [Thread-26830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:29:06.129 [DEBUG] [Thread-26830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:29:06.129 [DEBUG] [Thread-26830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:29:06.129 [DEBUG] [Thread-26830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:29:06.154 [INFO] [Thread-26830] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:29:06.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:29:06.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:29:07.036 [DEBUG] [Thread-26830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:29:07.036 [DEBUG] [Thread-26830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:29:07.084 [DEBUG] [Thread-26830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:29:07.084 [DEBUG] [Thread-26830] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:29:07.092 [DEBUG] [Thread-26830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:29:07.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:29: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')
2026-04-15T22:29:07.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
2026-04-15T22:29:07.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:29:07.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:29:07.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:29:07.128 [DEBUG] [Thread-26830] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:29:08.372 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:29:17.283 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:29:18.818 [DEBUG] [Thread-26832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:29:21.381 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:29:26.927 [DEBUG] [Thread-26833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:29:33.861 [DEBUG] [Thread-26834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:29:37.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:29:37.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:29:37.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
2026-04-15T22:29:38.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 28, 57), 3.59719, 78.4457, 0.0, 10.1639, 9.16332, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:29:38.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:28:57
2026-04-15T22:29:38.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:29:39.420 [DEBUG] [Thread-26835] [transport.py] [_log()] starting thread (client mode): 0xee991d20
2026-04-15T22:29:39.420 [DEBUG] [Thread-26835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:29:39.439 [DEBUG] [Thread-26835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:29:39.439 [INFO] [Thread-26835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:29:39.442 [DEBUG] [Thread-26835] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:29:39.442 [DEBUG] [Thread-26835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:29:39.443 [DEBUG] [Thread-26835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:29:39.443 [DEBUG] [Thread-26835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:29:39.443 [DEBUG] [Thread-26835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:29:39.443 [DEBUG] [Thread-26835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:29:39.443 [DEBUG] [Thread-26835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:29:39.443 [DEBUG] [Thread-26835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:29:39.443 [DEBUG] [Thread-26835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:29:39.443 [DEBUG] [Thread-26835] [transport.py] [_log()] client lang: <none>
2026-04-15T22:29:39.443 [DEBUG] [Thread-26835] [transport.py] [_log()] server lang: <none>
2026-04-15T22:29:39.443 [DEBUG] [Thread-26835] [transport.py] [_log()] kex follows: False
2026-04-15T22:29:39.443 [DEBUG] [Thread-26835] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:29:39.444 [DEBUG] [Thread-26835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:29:39.444 [DEBUG] [Thread-26835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:29:39.444 [DEBUG] [Thread-26835] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:29:39.444 [DEBUG] [Thread-26835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:29:39.444 [DEBUG] [Thread-26835] [transport.py] [_log()] Compression: none
2026-04-15T22:29:39.444 [DEBUG] [Thread-26835] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:29:39.460 [DEBUG] [Thread-26835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:29:39.460 [DEBUG] [Thread-26835] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:29:39.461 [DEBUG] [Thread-26835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:29:39.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:29:39.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:29:39.462 [DEBUG] [Thread-26835] [transport.py] [_log()] userauth is OK
2026-04-15T22:29:39.462 [DEBUG] [Thread-26835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:29:39.462 [DEBUG] [Thread-26835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:29:39.462 [DEBUG] [Thread-26835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:29:39.462 [DEBUG] [Thread-26835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:29:39.479 [INFO] [Thread-26835] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:29:39.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:29:40.273 [DEBUG] [Thread-26835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:29:40.274 [DEBUG] [Thread-26835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:29:40.274 [DEBUG] [Thread-26835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:29:40.314 [DEBUG] [Thread-26835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:29:40.314 [DEBUG] [Thread-26835] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:29:40.317 [DEBUG] [Thread-26835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:29:40.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:29:40.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:29:40.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:29:40.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:29:40.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:29:40.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:29:40.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:29:40.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:29:40.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:29:40.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.853602 -999.00   +9.50   7.44     81   +6.40 1 1 1 2 1     0    0 2.55 -25.21 ZNESW 6.8 7.4 76.6 9.2 10.1 -25.4 10.0 -23.9 9.7 -21.8 10.0 -24.0
2026-04-15T22:29:40.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:29:40.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:29:40.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.853602
2026-04-15T22:29:40.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:29:40.340 [DEBUG] [Thread-26835] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:29:40.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:29:40.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:29:40.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:29:40.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:29:40.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:28:57', tmtdew=3.59719, humidity=78.4457, cloud=0.0, wind=10.1639, temperature=9.16332, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:29:11.213', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.004249999999998977, -0.03275000000000006, -0.09250000000000114, -0.0129999999999999, 0.0032500000000013074, -0.006000000000000227, 0.02325000000000088, 0.02149999999999963, -0.031000000000000583, -0.04475000000000051, -0.0649999999999995, 0.0015000000000000568, 0.004749999999999588, -0.015000000000000568, 0.02499999999999858, 0.038750000000000284, -0.024499999999999744, 0.004999999999999005, 0.00024999999999941735, 0.03599999999999959, 0.035749999999998394, 0.011250000000000426, 0.0007500000000000284, 0.008999999999998565, -0.06049999999999933, -0.003249999999999531, -0.0034999999999989484, 0.0235000000000003, 0.032000000000001805, 0.11299999999999955, 0.0730000000000004, -0.04525000000000112], zp_timestamp='2026-04-15T20:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:29:40.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:29:40.593 [DEBUG] [Thread-26838] [transport.py] [_log()] starting thread (client mode): 0xee991c90
2026-04-15T22:29:40.594 [DEBUG] [Thread-26838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:29:40.609 [DEBUG] [Thread-26838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:29:40.609 [INFO] [Thread-26838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:29:40.616 [DEBUG] [Thread-26838] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:29:40.617 [DEBUG] [Thread-26838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:29:40.617 [DEBUG] [Thread-26838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:29:40.617 [DEBUG] [Thread-26838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:29:40.617 [DEBUG] [Thread-26838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:29:40.617 [DEBUG] [Thread-26838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:29:40.617 [DEBUG] [Thread-26838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:29:40.617 [DEBUG] [Thread-26838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:29:40.617 [DEBUG] [Thread-26838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:29:40.617 [DEBUG] [Thread-26838] [transport.py] [_log()] client lang: <none>
2026-04-15T22:29:40.617 [DEBUG] [Thread-26838] [transport.py] [_log()] server lang: <none>
2026-04-15T22:29:40.617 [DEBUG] [Thread-26838] [transport.py] [_log()] kex follows: False
2026-04-15T22:29:40.617 [DEBUG] [Thread-26838] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:29:40.618 [DEBUG] [Thread-26838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:29:40.618 [DEBUG] [Thread-26838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:29:40.618 [DEBUG] [Thread-26838] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:29:40.618 [DEBUG] [Thread-26838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:29:40.618 [DEBUG] [Thread-26838] [transport.py] [_log()] Compression: none
2026-04-15T22:29:40.618 [DEBUG] [Thread-26838] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:29:40.675 [DEBUG] [Thread-26838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:29:40.675 [DEBUG] [Thread-26838] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:29:40.676 [DEBUG] [Thread-26838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:29:40.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:29:40.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:29:40.732 [DEBUG] [Thread-26838] [transport.py] [_log()] userauth is OK
2026-04-15T22:29:40.732 [DEBUG] [Thread-26838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:29:40.733 [DEBUG] [Thread-26838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:29:40.733 [DEBUG] [Thread-26838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:29:40.733 [DEBUG] [Thread-26838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:29:40.756 [INFO] [Thread-26838] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:29:40.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:29:40.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:29:41.551 [DEBUG] [Thread-26838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:29:41.551 [DEBUG] [Thread-26838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:29:41.599 [DEBUG] [Thread-26838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:29:41.599 [DEBUG] [Thread-26838] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:29:41.608 [DEBUG] [Thread-26838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:29:41.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:29:41.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')
2026-04-15T22:29:41.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
2026-04-15T22:29:41.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:29:41.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:29:41.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:29:41.643 [DEBUG] [Thread-26838] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:29:48.891 [DEBUG] [Thread-26840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:30:01.211 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:30:01.212 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:30:03.933 [DEBUG] [Thread-26841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:30:11.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:30:11.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:30:11.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
2026-04-15T22:30:12.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 29, 33), 3.06556, 81.0573, 0.0, 13.4453, 8.95982, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:30:12.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:29:33
2026-04-15T22:30:13.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:30:13.822 [DEBUG] [Thread-26842] [transport.py] [_log()] starting thread (client mode): 0xf13ca800
2026-04-15T22:30:13.823 [DEBUG] [Thread-26842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:30:13.841 [DEBUG] [Thread-26842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:30:13.842 [INFO] [Thread-26842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:30:13.844 [DEBUG] [Thread-26842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:30:13.845 [DEBUG] [Thread-26842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:30:13.845 [DEBUG] [Thread-26842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:30:13.845 [DEBUG] [Thread-26842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:30:13.845 [DEBUG] [Thread-26842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:30:13.845 [DEBUG] [Thread-26842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:30:13.845 [DEBUG] [Thread-26842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:30:13.845 [DEBUG] [Thread-26842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:30:13.845 [DEBUG] [Thread-26842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:30:13.845 [DEBUG] [Thread-26842] [transport.py] [_log()] client lang: <none>
2026-04-15T22:30:13.845 [DEBUG] [Thread-26842] [transport.py] [_log()] server lang: <none>
2026-04-15T22:30:13.845 [DEBUG] [Thread-26842] [transport.py] [_log()] kex follows: False
2026-04-15T22:30:13.846 [DEBUG] [Thread-26842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:30:13.846 [DEBUG] [Thread-26842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:30:13.846 [DEBUG] [Thread-26842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:30:13.846 [DEBUG] [Thread-26842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:30:13.846 [DEBUG] [Thread-26842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:30:13.846 [DEBUG] [Thread-26842] [transport.py] [_log()] Compression: none
2026-04-15T22:30:13.846 [DEBUG] [Thread-26842] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:30:13.863 [DEBUG] [Thread-26842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:30:13.864 [DEBUG] [Thread-26842] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:30:13.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:30:13.864 [DEBUG] [Thread-26842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:30:13.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:30:13.866 [DEBUG] [Thread-26842] [transport.py] [_log()] userauth is OK
2026-04-15T22:30:13.866 [DEBUG] [Thread-26842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:30:13.866 [DEBUG] [Thread-26842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:30:13.866 [DEBUG] [Thread-26842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:30:13.866 [DEBUG] [Thread-26842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:30:13.891 [INFO] [Thread-26842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:30:13.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:30:15.561 [DEBUG] [Thread-26842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:30:15.561 [DEBUG] [Thread-26842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:30:15.561 [DEBUG] [Thread-26842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:30:15.602 [DEBUG] [Thread-26842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:30:15.602 [DEBUG] [Thread-26842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:30:15.604 [DEBUG] [Thread-26842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:30:15.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:30:15.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:30:15.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:30:15.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:30:15.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:30:15.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:30:15.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:30:15.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:30:15.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:30:15.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.853949 -999.00   +9.50   8.22     81   +6.40 1 1 1 2 1     0    0 2.57 -24.23 ZNESW 6.5 8.2 81.8 9.5 10.0 -25.3 10.0 -24.0 9.7 -21.8 10.0 -24.0
2026-04-15T22:30:15.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:30:15.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:30:15.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.853949
2026-04-15T22:30:15.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:30:15.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:30:15.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:30:15.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:30:15.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:30:15.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:29:33', tmtdew=3.06556, humidity=81.0573, cloud=0.0, wind=13.4453, temperature=8.95982, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:29:41.194', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.004249999999998977, -0.03275000000000006, -0.09250000000000114, -0.0129999999999999, 0.0032500000000013074, -0.006000000000000227, 0.02325000000000088, 0.02149999999999963, -0.031000000000000583, -0.04475000000000051, -0.0649999999999995, 0.0015000000000000568, 0.004749999999999588, -0.015000000000000568, 0.02499999999999858, 0.038750000000000284, -0.024499999999999744, 0.004999999999999005, 0.00024999999999941735, 0.03599999999999959, 0.035749999999998394, 0.011250000000000426, 0.0007500000000000284, 0.008999999999998565, -0.06049999999999933, -0.003249999999999531, -0.0034999999999989484, 0.0235000000000003, 0.032000000000001805, 0.11299999999999955, 0.0730000000000004, -0.04525000000000112], zp_timestamp='2026-04-15T20:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:30:15.636 [DEBUG] [Thread-26842] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:30:15.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:30:15.882 [DEBUG] [Thread-26845] [transport.py] [_log()] starting thread (client mode): 0xee9c0b50
2026-04-15T22:30:15.882 [DEBUG] [Thread-26845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:30:15.897 [DEBUG] [Thread-26845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:30:15.897 [INFO] [Thread-26845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:30:15.907 [DEBUG] [Thread-26845] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:30:15.907 [DEBUG] [Thread-26845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:30:15.907 [DEBUG] [Thread-26845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:30:15.908 [DEBUG] [Thread-26845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:30:15.908 [DEBUG] [Thread-26845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:30:15.908 [DEBUG] [Thread-26845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:30:15.908 [DEBUG] [Thread-26845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:30:15.908 [DEBUG] [Thread-26845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:30:15.908 [DEBUG] [Thread-26845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:30:15.908 [DEBUG] [Thread-26845] [transport.py] [_log()] client lang: <none>
2026-04-15T22:30:15.908 [DEBUG] [Thread-26845] [transport.py] [_log()] server lang: <none>
2026-04-15T22:30:15.908 [DEBUG] [Thread-26845] [transport.py] [_log()] kex follows: False
2026-04-15T22:30:15.908 [DEBUG] [Thread-26845] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:30:15.908 [DEBUG] [Thread-26845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:30:15.909 [DEBUG] [Thread-26845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:30:15.909 [DEBUG] [Thread-26845] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:30:15.909 [DEBUG] [Thread-26845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:30:15.909 [DEBUG] [Thread-26845] [transport.py] [_log()] Compression: none
2026-04-15T22:30:15.909 [DEBUG] [Thread-26845] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:30:15.964 [DEBUG] [Thread-26845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:30:15.964 [DEBUG] [Thread-26845] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:30:15.965 [DEBUG] [Thread-26845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:30:15.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:30:15.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:30:16.020 [DEBUG] [Thread-26845] [transport.py] [_log()] userauth is OK
2026-04-15T22:30:16.020 [DEBUG] [Thread-26845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:30:16.020 [DEBUG] [Thread-26845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:30:16.020 [DEBUG] [Thread-26845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:30:16.020 [DEBUG] [Thread-26845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:30:16.044 [INFO] [Thread-26845] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:30:16.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:30:16.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:30:16.863 [DEBUG] [Thread-26845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:30:16.863 [DEBUG] [Thread-26845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:30:16.911 [DEBUG] [Thread-26845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:30:16.911 [DEBUG] [Thread-26845] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:30:16.920 [DEBUG] [Thread-26845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:30:16.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:30:16.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')
2026-04-15T22:30:16.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
2026-04-15T22:30:16.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:30:16.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:30:16.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:30:16.956 [DEBUG] [Thread-26845] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:30:18.962 [DEBUG] [Thread-26847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:30:27.079 [DEBUG] [Thread-26848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:30:34.016 [DEBUG] [Thread-26849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:30:43.856 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:30:46.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:30:46.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:30:46.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
2026-04-15T22:30:48.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 30, 9), 3.58238, 78.5288, 0.0, 10.2521, 9.2134, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:30:48.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:30:09
2026-04-15T22:30:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:30:49.045 [DEBUG] [Thread-26850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:30:49.192 [DEBUG] [Thread-26851] [transport.py] [_log()] starting thread (client mode): 0xf1351c90
2026-04-15T22:30:49.193 [DEBUG] [Thread-26851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:30:49.212 [DEBUG] [Thread-26851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:30:49.212 [INFO] [Thread-26851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:30:49.215 [DEBUG] [Thread-26851] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:30:49.215 [DEBUG] [Thread-26851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:30:49.215 [DEBUG] [Thread-26851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:30:49.215 [DEBUG] [Thread-26851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:30:49.215 [DEBUG] [Thread-26851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:30:49.215 [DEBUG] [Thread-26851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:30:49.215 [DEBUG] [Thread-26851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:30:49.215 [DEBUG] [Thread-26851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:30:49.215 [DEBUG] [Thread-26851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:30:49.215 [DEBUG] [Thread-26851] [transport.py] [_log()] client lang: <none>
2026-04-15T22:30:49.215 [DEBUG] [Thread-26851] [transport.py] [_log()] server lang: <none>
2026-04-15T22:30:49.216 [DEBUG] [Thread-26851] [transport.py] [_log()] kex follows: False
2026-04-15T22:30:49.216 [DEBUG] [Thread-26851] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:30:49.216 [DEBUG] [Thread-26851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:30:49.216 [DEBUG] [Thread-26851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:30:49.216 [DEBUG] [Thread-26851] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:30:49.216 [DEBUG] [Thread-26851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:30:49.216 [DEBUG] [Thread-26851] [transport.py] [_log()] Compression: none
2026-04-15T22:30:49.216 [DEBUG] [Thread-26851] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:30:49.227 [DEBUG] [Thread-26851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:30:49.227 [DEBUG] [Thread-26851] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:30:49.227 [DEBUG] [Thread-26851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:30:49.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:30:49.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:30:49.228 [DEBUG] [Thread-26851] [transport.py] [_log()] userauth is OK
2026-04-15T22:30:49.228 [DEBUG] [Thread-26851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:30:49.229 [DEBUG] [Thread-26851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:30:49.229 [DEBUG] [Thread-26851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:30:49.229 [DEBUG] [Thread-26851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:30:49.247 [INFO] [Thread-26851] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:30:49.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:30:50.024 [DEBUG] [Thread-26851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:30:50.024 [DEBUG] [Thread-26851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:30:50.025 [DEBUG] [Thread-26851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:30:50.065 [DEBUG] [Thread-26851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:30:50.065 [DEBUG] [Thread-26851] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:30:50.068 [DEBUG] [Thread-26851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:30:50.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:30:50.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:30:50.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:30:50.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:30:50.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:30:50.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:30:50.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:30:50.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:30:50.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:30:50.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.854296 -999.00   +9.50   8.45     81   +6.40 1 1 1 2 1     0    0 2.60 -24.04 ZNESW 7.7 8.4 76.8 9.5 10.1 -25.3 10.0 -24.0 9.7 -21.9 9.9 -24.0
2026-04-15T22:30:50.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:30:50.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:30:50.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.854296
2026-04-15T22:30:50.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:30:50.091 [DEBUG] [Thread-26851] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:30:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:30:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:30:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:30:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:30:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:30:09', tmtdew=3.58238, humidity=78.5288, cloud=0.0, wind=10.2521, temperature=9.2134, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:30:11.174', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.004249999999998977, -0.03275000000000006, -0.09250000000000114, -0.0129999999999999, 0.0032500000000013074, -0.006000000000000227, 0.02325000000000088, 0.02149999999999963, -0.031000000000000583, -0.04475000000000051, -0.0649999999999995, 0.0015000000000000568, 0.004749999999999588, -0.015000000000000568, 0.02499999999999858, 0.038750000000000284, -0.024499999999999744, 0.004999999999999005, 0.00024999999999941735, 0.03599999999999959, 0.035749999999998394, 0.011250000000000426, 0.0007500000000000284, 0.008999999999998565, -0.06049999999999933, -0.003249999999999531, -0.0034999999999989484, 0.0235000000000003, 0.032000000000001805, 0.11299999999999955, 0.0730000000000004, -0.04525000000000112], zp_timestamp='2026-04-15T20:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:30:50.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:30:50.347 [DEBUG] [Thread-26854] [transport.py] [_log()] starting thread (client mode): 0xee906dd0
2026-04-15T22:30:50.347 [DEBUG] [Thread-26854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:30:50.362 [DEBUG] [Thread-26854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:30:50.362 [INFO] [Thread-26854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:30:50.369 [DEBUG] [Thread-26854] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:30:50.370 [DEBUG] [Thread-26854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:30:50.370 [DEBUG] [Thread-26854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:30:50.370 [DEBUG] [Thread-26854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:30:50.370 [DEBUG] [Thread-26854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:30:50.370 [DEBUG] [Thread-26854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:30:50.370 [DEBUG] [Thread-26854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:30:50.370 [DEBUG] [Thread-26854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:30:50.370 [DEBUG] [Thread-26854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:30:50.370 [DEBUG] [Thread-26854] [transport.py] [_log()] client lang: <none>
2026-04-15T22:30:50.370 [DEBUG] [Thread-26854] [transport.py] [_log()] server lang: <none>
2026-04-15T22:30:50.370 [DEBUG] [Thread-26854] [transport.py] [_log()] kex follows: False
2026-04-15T22:30:50.370 [DEBUG] [Thread-26854] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:30:50.371 [DEBUG] [Thread-26854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:30:50.371 [DEBUG] [Thread-26854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:30:50.371 [DEBUG] [Thread-26854] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:30:50.371 [DEBUG] [Thread-26854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:30:50.371 [DEBUG] [Thread-26854] [transport.py] [_log()] Compression: none
2026-04-15T22:30:50.371 [DEBUG] [Thread-26854] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:30:50.434 [DEBUG] [Thread-26854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:30:50.435 [DEBUG] [Thread-26854] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:30:50.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:30:50.435 [DEBUG] [Thread-26854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:30:50.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:30:50.491 [DEBUG] [Thread-26854] [transport.py] [_log()] userauth is OK
2026-04-15T22:30:50.492 [DEBUG] [Thread-26854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:30:50.492 [DEBUG] [Thread-26854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:30:50.492 [DEBUG] [Thread-26854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:30:50.492 [DEBUG] [Thread-26854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:30:50.520 [INFO] [Thread-26854] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:30:50.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:30:50.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:30:51.356 [DEBUG] [Thread-26854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:30:51.357 [DEBUG] [Thread-26854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:30:51.404 [DEBUG] [Thread-26854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:30:51.404 [DEBUG] [Thread-26854] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:30:51.412 [DEBUG] [Thread-26854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:30:51.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:30:51.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')
2026-04-15T22:30:51.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
2026-04-15T22:30:51.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:30:51.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:30:51.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:30:51.444 [DEBUG] [Thread-26854] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:30:52.730 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:30:56.830 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:31:01.425 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:31:01.426 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:31:04.074 [DEBUG] [Thread-26856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:31:19.120 [DEBUG] [Thread-26857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:31:21.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:31:21.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:31:21.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
2026-04-15T22:31:22.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 30, 44), 3.05292, 81.1239, 0.0, 13.6217, 8.9268, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:31:22.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:30:44
2026-04-15T22:31:23.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:31:23.717 [DEBUG] [Thread-26858] [transport.py] [_log()] starting thread (client mode): 0xee906530
2026-04-15T22:31:23.717 [DEBUG] [Thread-26858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:31:23.738 [DEBUG] [Thread-26858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:31:23.738 [INFO] [Thread-26858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:31:23.741 [DEBUG] [Thread-26858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:31:23.741 [DEBUG] [Thread-26858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] client lang: <none>
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] server lang: <none>
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] kex follows: False
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] Compression: none
2026-04-15T22:31:23.742 [DEBUG] [Thread-26858] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:31:23.758 [DEBUG] [Thread-26858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:31:23.759 [DEBUG] [Thread-26858] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:31:23.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:31:23.759 [DEBUG] [Thread-26858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:31:23.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:31:23.760 [DEBUG] [Thread-26858] [transport.py] [_log()] userauth is OK
2026-04-15T22:31:23.760 [DEBUG] [Thread-26858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:31:23.760 [DEBUG] [Thread-26858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:31:23.761 [DEBUG] [Thread-26858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:31:23.761 [DEBUG] [Thread-26858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:31:23.785 [INFO] [Thread-26858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:31:23.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:31:24.550 [DEBUG] [Thread-26858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:31:24.550 [DEBUG] [Thread-26858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:31:24.551 [DEBUG] [Thread-26858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:31:24.591 [DEBUG] [Thread-26858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:31:24.591 [DEBUG] [Thread-26858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:31:24.594 [DEBUG] [Thread-26858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:31:24.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:31:24.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:31:24.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:31:24.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:31:24.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:31:24.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:31:24.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:31:24.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:31:24.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:31:24.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.854644 -999.00   +9.50   9.26     81   +6.40 1 1 1 2 1     0    0 2.56 -24.56 ZNESW 7.1 9.3 78.6 10.3 10.0 -25.3 10.0 -24.0 9.7 -21.9 10.0 -23.9
2026-04-15T22:31:24.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:31:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:31:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.854644
2026-04-15T22:31:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:31:24.621 [DEBUG] [Thread-26858] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:31:24.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:31:24.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:31:24.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:31:24.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:31:24.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:30:44', tmtdew=3.05292, humidity=81.1239, cloud=0.0, wind=13.6217, temperature=8.9268, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:30:41.242', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.004249999999998977, -0.03275000000000006, -0.09250000000000114, -0.0129999999999999, 0.0032500000000013074, -0.006000000000000227, 0.02325000000000088, 0.02149999999999963, -0.031000000000000583, -0.04475000000000051, -0.0649999999999995, 0.0015000000000000568, 0.004749999999999588, -0.015000000000000568, 0.02499999999999858, 0.038750000000000284, -0.024499999999999744, 0.004999999999999005, 0.00024999999999941735, 0.03599999999999959, 0.035749999999998394, 0.011250000000000426, 0.0007500000000000284, 0.008999999999998565, -0.06049999999999933, -0.003249999999999531, -0.0034999999999989484, 0.0235000000000003, 0.032000000000001805, 0.11299999999999955, 0.0730000000000004, -0.04525000000000112], zp_timestamp='2026-04-15T20:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:31:24.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:31:24.880 [DEBUG] [Thread-26861] [transport.py] [_log()] starting thread (client mode): 0xf13e1a50
2026-04-15T22:31:24.880 [DEBUG] [Thread-26861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:31:24.895 [DEBUG] [Thread-26861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:31:24.895 [INFO] [Thread-26861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:31:24.903 [DEBUG] [Thread-26861] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:31:24.903 [DEBUG] [Thread-26861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:31:24.903 [DEBUG] [Thread-26861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:31:24.903 [DEBUG] [Thread-26861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:31:24.903 [DEBUG] [Thread-26861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:31:24.903 [DEBUG] [Thread-26861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:31:24.903 [DEBUG] [Thread-26861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:31:24.903 [DEBUG] [Thread-26861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:31:24.903 [DEBUG] [Thread-26861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:31:24.903 [DEBUG] [Thread-26861] [transport.py] [_log()] client lang: <none>
2026-04-15T22:31:24.903 [DEBUG] [Thread-26861] [transport.py] [_log()] server lang: <none>
2026-04-15T22:31:24.904 [DEBUG] [Thread-26861] [transport.py] [_log()] kex follows: False
2026-04-15T22:31:24.904 [DEBUG] [Thread-26861] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:31:24.904 [DEBUG] [Thread-26861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:31:24.904 [DEBUG] [Thread-26861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:31:24.904 [DEBUG] [Thread-26861] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:31:24.904 [DEBUG] [Thread-26861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:31:24.904 [DEBUG] [Thread-26861] [transport.py] [_log()] Compression: none
2026-04-15T22:31:24.904 [DEBUG] [Thread-26861] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:31:24.961 [DEBUG] [Thread-26861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:31:24.962 [DEBUG] [Thread-26861] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:31:24.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:31:24.962 [DEBUG] [Thread-26861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:31:24.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:31:25.020 [DEBUG] [Thread-26861] [transport.py] [_log()] userauth is OK
2026-04-15T22:31:25.021 [DEBUG] [Thread-26861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:31:25.021 [DEBUG] [Thread-26861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:31:25.021 [DEBUG] [Thread-26861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:31:25.022 [DEBUG] [Thread-26861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:31:25.050 [INFO] [Thread-26861] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:31:25.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:31:25.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:31:25.846 [DEBUG] [Thread-26861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:31:25.847 [DEBUG] [Thread-26861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:31:25.895 [DEBUG] [Thread-26861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:31:25.895 [DEBUG] [Thread-26861] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:31:25.903 [DEBUG] [Thread-26861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:31:25.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:31:25.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')
2026-04-15T22:31:25.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
2026-04-15T22:31:25.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:31:25.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:31:25.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:31:25.936 [DEBUG] [Thread-26861] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:31:27.222 [DEBUG] [Thread-26863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:31:34.150 [DEBUG] [Thread-26864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:31:49.193 [DEBUG] [Thread-26865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:31:55.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:31:55.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:31:55.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
2026-04-15T22:31:57.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 31, 20), 3.56469, 78.1281, 0.0, 11.0988, 9.21322, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:31:57.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:31:20
2026-04-15T22:31:57.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:31:58.197 [DEBUG] [Thread-26866] [transport.py] [_log()] starting thread (client mode): 0xf1367940
2026-04-15T22:31:58.197 [DEBUG] [Thread-26866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:31:58.217 [DEBUG] [Thread-26866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:31:58.217 [INFO] [Thread-26866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:31:58.220 [DEBUG] [Thread-26866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:31:58.221 [DEBUG] [Thread-26866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:31:58.221 [DEBUG] [Thread-26866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:31:58.221 [DEBUG] [Thread-26866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:31:58.221 [DEBUG] [Thread-26866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:31:58.221 [DEBUG] [Thread-26866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:31:58.221 [DEBUG] [Thread-26866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:31:58.221 [DEBUG] [Thread-26866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:31:58.221 [DEBUG] [Thread-26866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:31:58.221 [DEBUG] [Thread-26866] [transport.py] [_log()] client lang: <none>
2026-04-15T22:31:58.221 [DEBUG] [Thread-26866] [transport.py] [_log()] server lang: <none>
2026-04-15T22:31:58.221 [DEBUG] [Thread-26866] [transport.py] [_log()] kex follows: False
2026-04-15T22:31:58.221 [DEBUG] [Thread-26866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:31:58.222 [DEBUG] [Thread-26866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:31:58.222 [DEBUG] [Thread-26866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:31:58.222 [DEBUG] [Thread-26866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:31:58.222 [DEBUG] [Thread-26866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:31:58.222 [DEBUG] [Thread-26866] [transport.py] [_log()] Compression: none
2026-04-15T22:31:58.222 [DEBUG] [Thread-26866] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:31:58.241 [DEBUG] [Thread-26866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:31:58.241 [DEBUG] [Thread-26866] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:31:58.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:31:58.242 [DEBUG] [Thread-26866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:31:58.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:31:58.244 [DEBUG] [Thread-26866] [transport.py] [_log()] userauth is OK
2026-04-15T22:31:58.244 [DEBUG] [Thread-26866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:31:58.244 [DEBUG] [Thread-26866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:31:58.244 [DEBUG] [Thread-26866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:31:58.244 [DEBUG] [Thread-26866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:31:58.263 [INFO] [Thread-26866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:31:58.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:31:58.968 [DEBUG] [Thread-26866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:31:58.969 [DEBUG] [Thread-26866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:31:58.969 [DEBUG] [Thread-26866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:31:59.009 [DEBUG] [Thread-26866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:31:59.009 [DEBUG] [Thread-26866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:31:59.011 [DEBUG] [Thread-26866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:31:59.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:31:59.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:31:59.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:31:59.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:31:59.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:31:59.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:31:59.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:31:59.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:31:59.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:31:59.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.854991 -999.00   +9.50   8.94     81   +6.40 1 1 1 2 1     0    0 2.59 -23.43 ZNESW 9.1 8.9 118.4 12.2 10.0 -25.0 9.9 -24.0 9.7 -21.9 10.0 -23.8
2026-04-15T22:31:59.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:31:59.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:31:59.029 [DEBUG] [Thread-26866] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:31:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.854991
2026-04-15T22:31:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:31:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:31:59.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:31:59.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:31:59.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:31:59.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:31:20', tmtdew=3.56469, humidity=78.1281, cloud=0.0, wind=11.0988, temperature=9.21322, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:31:11.222', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.004249999999998977, -0.03275000000000006, -0.09250000000000114, -0.0129999999999999, 0.0032500000000013074, -0.006000000000000227, 0.02325000000000088, 0.02149999999999963, -0.031000000000000583, -0.04475000000000051, -0.0649999999999995, 0.0015000000000000568, 0.004749999999999588, -0.015000000000000568, 0.02499999999999858, 0.038750000000000284, -0.024499999999999744, 0.004999999999999005, 0.00024999999999941735, 0.03599999999999959, 0.035749999999998394, 0.011250000000000426, 0.0007500000000000284, 0.008999999999998565, -0.06049999999999933, -0.003249999999999531, -0.0034999999999989484, 0.0235000000000003, 0.032000000000001805, 0.11299999999999955, 0.0730000000000004, -0.04525000000000112], zp_timestamp='2026-04-15T20:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:31:59.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:31:59.289 [DEBUG] [Thread-26869] [transport.py] [_log()] starting thread (client mode): 0xf1365fc0
2026-04-15T22:31:59.289 [DEBUG] [Thread-26869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:31:59.304 [DEBUG] [Thread-26869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:31:59.304 [INFO] [Thread-26869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:31:59.311 [DEBUG] [Thread-26869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:31:59.311 [DEBUG] [Thread-26869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:31:59.311 [DEBUG] [Thread-26869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:31:59.311 [DEBUG] [Thread-26869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:31:59.311 [DEBUG] [Thread-26869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:31:59.312 [DEBUG] [Thread-26869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:31:59.312 [DEBUG] [Thread-26869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:31:59.312 [DEBUG] [Thread-26869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:31:59.312 [DEBUG] [Thread-26869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:31:59.312 [DEBUG] [Thread-26869] [transport.py] [_log()] client lang: <none>
2026-04-15T22:31:59.312 [DEBUG] [Thread-26869] [transport.py] [_log()] server lang: <none>
2026-04-15T22:31:59.312 [DEBUG] [Thread-26869] [transport.py] [_log()] kex follows: False
2026-04-15T22:31:59.312 [DEBUG] [Thread-26869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:31:59.312 [DEBUG] [Thread-26869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:31:59.312 [DEBUG] [Thread-26869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:31:59.312 [DEBUG] [Thread-26869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:31:59.312 [DEBUG] [Thread-26869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:31:59.313 [DEBUG] [Thread-26869] [transport.py] [_log()] Compression: none
2026-04-15T22:31:59.313 [DEBUG] [Thread-26869] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:31:59.366 [DEBUG] [Thread-26869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:31:59.367 [DEBUG] [Thread-26869] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:31:59.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:31:59.367 [DEBUG] [Thread-26869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:31:59.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:31:59.427 [DEBUG] [Thread-26869] [transport.py] [_log()] userauth is OK
2026-04-15T22:31:59.427 [DEBUG] [Thread-26869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:31:59.428 [DEBUG] [Thread-26869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:31:59.428 [DEBUG] [Thread-26869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:31:59.428 [DEBUG] [Thread-26869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:31:59.453 [INFO] [Thread-26869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:31:59.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:31:59.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:32:00.257 [DEBUG] [Thread-26869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:32:00.257 [DEBUG] [Thread-26869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:32:00.305 [DEBUG] [Thread-26869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:32:00.305 [DEBUG] [Thread-26869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:32:00.314 [DEBUG] [Thread-26869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:32:00.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:32:00.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')
2026-04-15T22:32:00.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
2026-04-15T22:32:00.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:32:00.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:32:00.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:32:00.349 [DEBUG] [Thread-26869] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:32:01.647 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:32:01.648 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:32:04.223 [DEBUG] [Thread-26871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:32:19.267 [DEBUG] [Thread-26872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:32:19.720 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:32:27.384 [DEBUG] [Thread-26873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:32:30.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:32:30.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:32:30.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
2026-04-15T22:32:31.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 31, 56), 3.60251, 78.1944, 0.0, 11.3105, 9.19663, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:32:31.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:31:56
2026-04-15T22:32:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:32:32.470 [DEBUG] [Thread-26874] [transport.py] [_log()] starting thread (client mode): 0xee9c2ec0
2026-04-15T22:32:32.470 [DEBUG] [Thread-26874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:32:32.491 [DEBUG] [Thread-26874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:32:32.491 [INFO] [Thread-26874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:32:32.494 [DEBUG] [Thread-26874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:32:32.494 [DEBUG] [Thread-26874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:32:32.494 [DEBUG] [Thread-26874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:32:32.494 [DEBUG] [Thread-26874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:32:32.494 [DEBUG] [Thread-26874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:32:32.495 [DEBUG] [Thread-26874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:32:32.495 [DEBUG] [Thread-26874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:32:32.495 [DEBUG] [Thread-26874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:32:32.495 [DEBUG] [Thread-26874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:32:32.495 [DEBUG] [Thread-26874] [transport.py] [_log()] client lang: <none>
2026-04-15T22:32:32.495 [DEBUG] [Thread-26874] [transport.py] [_log()] server lang: <none>
2026-04-15T22:32:32.495 [DEBUG] [Thread-26874] [transport.py] [_log()] kex follows: False
2026-04-15T22:32:32.495 [DEBUG] [Thread-26874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:32:32.495 [DEBUG] [Thread-26874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:32:32.495 [DEBUG] [Thread-26874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:32:32.495 [DEBUG] [Thread-26874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:32:32.495 [DEBUG] [Thread-26874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:32:32.496 [DEBUG] [Thread-26874] [transport.py] [_log()] Compression: none
2026-04-15T22:32:32.496 [DEBUG] [Thread-26874] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:32:32.512 [DEBUG] [Thread-26874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:32:32.512 [DEBUG] [Thread-26874] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:32:32.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:32:32.513 [DEBUG] [Thread-26874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:32:32.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:32:32.514 [DEBUG] [Thread-26874] [transport.py] [_log()] userauth is OK
2026-04-15T22:32:32.514 [DEBUG] [Thread-26874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:32:32.514 [DEBUG] [Thread-26874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:32:32.515 [DEBUG] [Thread-26874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:32:32.515 [DEBUG] [Thread-26874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:32:32.538 [INFO] [Thread-26874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:32:32.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:32:33.359 [DEBUG] [Thread-26874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:32:33.360 [DEBUG] [Thread-26874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:32:33.360 [DEBUG] [Thread-26874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:32:33.400 [DEBUG] [Thread-26874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:32:33.400 [DEBUG] [Thread-26874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:32:33.403 [DEBUG] [Thread-26874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:32:33.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:32:33.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:32:33.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:32:33.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:32:33.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:32:33.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:32:33.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:32:33.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:32:33.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:32:33.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.855685 -999.00   +9.50  10.36     81   +6.40 1 1 1 2 1     0    0 2.67 -20.65 ZNESW 7.6 10.4 80.8 12.5 10.0 -25.2 9.9 -23.9 9.7 -21.9 10.0 -24.0
2026-04-15T22:32:33.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:32:33.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:32:33.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.855685
2026-04-15T22:32:33.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:32:33.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:32:33.428 [DEBUG] [Thread-26874] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:32:33.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:32:33.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:32:33.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:32:33.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:31:56', tmtdew=3.60251, humidity=78.1944, cloud=0.0, wind=11.3105, temperature=9.19663, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:32:11.184', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.004249999999998977, -0.03275000000000006, -0.09250000000000114, -0.0129999999999999, 0.0032500000000013074, -0.006000000000000227, 0.02325000000000088, 0.02149999999999963, -0.031000000000000583, -0.04475000000000051, -0.0649999999999995, 0.0015000000000000568, 0.004749999999999588, -0.015000000000000568, 0.02499999999999858, 0.038750000000000284, -0.024499999999999744, 0.004999999999999005, 0.00024999999999941735, 0.03599999999999959, 0.035749999999998394, 0.011250000000000426, 0.0007500000000000284, 0.008999999999998565, -0.06049999999999933, -0.003249999999999531, -0.0034999999999989484, 0.0235000000000003, 0.032000000000001805, 0.11299999999999955, 0.0730000000000004, -0.04525000000000112], zp_timestamp='2026-04-15T20:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:32:33.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:32:33.693 [DEBUG] [Thread-26877] [transport.py] [_log()] starting thread (client mode): 0xee905690
2026-04-15T22:32:33.693 [DEBUG] [Thread-26877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:32:33.708 [DEBUG] [Thread-26877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:32:33.708 [INFO] [Thread-26877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:32:33.716 [DEBUG] [Thread-26877] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:32:33.716 [DEBUG] [Thread-26877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:32:33.716 [DEBUG] [Thread-26877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:32:33.716 [DEBUG] [Thread-26877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:32:33.716 [DEBUG] [Thread-26877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:32:33.716 [DEBUG] [Thread-26877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:32:33.716 [DEBUG] [Thread-26877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:32:33.716 [DEBUG] [Thread-26877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:32:33.716 [DEBUG] [Thread-26877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:32:33.717 [DEBUG] [Thread-26877] [transport.py] [_log()] client lang: <none>
2026-04-15T22:32:33.717 [DEBUG] [Thread-26877] [transport.py] [_log()] server lang: <none>
2026-04-15T22:32:33.717 [DEBUG] [Thread-26877] [transport.py] [_log()] kex follows: False
2026-04-15T22:32:33.717 [DEBUG] [Thread-26877] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:32:33.717 [DEBUG] [Thread-26877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:32:33.717 [DEBUG] [Thread-26877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:32:33.717 [DEBUG] [Thread-26877] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:32:33.717 [DEBUG] [Thread-26877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:32:33.717 [DEBUG] [Thread-26877] [transport.py] [_log()] Compression: none
2026-04-15T22:32:33.717 [DEBUG] [Thread-26877] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:32:33.773 [DEBUG] [Thread-26877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:32:33.773 [DEBUG] [Thread-26877] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:32:33.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:32:33.774 [DEBUG] [Thread-26877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:32:33.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:32:33.830 [DEBUG] [Thread-26877] [transport.py] [_log()] userauth is OK
2026-04-15T22:32:33.830 [DEBUG] [Thread-26877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:32:33.830 [DEBUG] [Thread-26877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:32:33.831 [DEBUG] [Thread-26877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:32:33.831 [DEBUG] [Thread-26877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:32:33.855 [INFO] [Thread-26877] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:32:33.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:32:33.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:32:34.295 [DEBUG] [Thread-26879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:32:34.680 [DEBUG] [Thread-26877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:32:34.680 [DEBUG] [Thread-26877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:32:34.727 [DEBUG] [Thread-26877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:32:34.727 [DEBUG] [Thread-26877] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:32:34.736 [DEBUG] [Thread-26877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:32:34.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:32:34.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')
2026-04-15T22:32:34.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
2026-04-15T22:32:34.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:32:34.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:32:34.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:32:34.768 [DEBUG] [Thread-26877] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:32:49.334 [DEBUG] [Thread-26880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:33:01.872 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:33:01.873 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:33:04.366 [DEBUG] [Thread-26881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:33:04.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:33:04.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:33:04.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
2026-04-15T22:33:06.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 32, 31), 3.60839, 78.1614, 0.0, 11.1341, 9.19673, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:33:06.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:32:31
2026-04-15T22:33:06.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:33:06.984 [DEBUG] [Thread-26882] [transport.py] [_log()] starting thread (client mode): 0xee907fd0
2026-04-15T22:33:06.984 [DEBUG] [Thread-26882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:33:07.004 [DEBUG] [Thread-26882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:33:07.004 [INFO] [Thread-26882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:33:07.007 [DEBUG] [Thread-26882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:33:07.007 [DEBUG] [Thread-26882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:33:07.007 [DEBUG] [Thread-26882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:33:07.007 [DEBUG] [Thread-26882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:33:07.007 [DEBUG] [Thread-26882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:33:07.007 [DEBUG] [Thread-26882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:33:07.007 [DEBUG] [Thread-26882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:33:07.007 [DEBUG] [Thread-26882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:33:07.007 [DEBUG] [Thread-26882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:33:07.008 [DEBUG] [Thread-26882] [transport.py] [_log()] client lang: <none>
2026-04-15T22:33:07.008 [DEBUG] [Thread-26882] [transport.py] [_log()] server lang: <none>
2026-04-15T22:33:07.008 [DEBUG] [Thread-26882] [transport.py] [_log()] kex follows: False
2026-04-15T22:33:07.008 [DEBUG] [Thread-26882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:33:07.008 [DEBUG] [Thread-26882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:33:07.008 [DEBUG] [Thread-26882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:33:07.008 [DEBUG] [Thread-26882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:33:07.008 [DEBUG] [Thread-26882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:33:07.008 [DEBUG] [Thread-26882] [transport.py] [_log()] Compression: none
2026-04-15T22:33:07.008 [DEBUG] [Thread-26882] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:33:07.024 [DEBUG] [Thread-26882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:33:07.024 [DEBUG] [Thread-26882] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:33:07.025 [DEBUG] [Thread-26882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:33:07.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:33:07.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:33:07.026 [DEBUG] [Thread-26882] [transport.py] [_log()] userauth is OK
2026-04-15T22:33:07.026 [DEBUG] [Thread-26882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:33:07.026 [DEBUG] [Thread-26882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:33:07.027 [DEBUG] [Thread-26882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:33:07.027 [DEBUG] [Thread-26882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:33:07.040 [INFO] [Thread-26882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:33:07.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:33:07.775 [DEBUG] [Thread-26882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:33:07.775 [DEBUG] [Thread-26882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:33:07.776 [DEBUG] [Thread-26882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:33:07.816 [DEBUG] [Thread-26882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:33:07.816 [DEBUG] [Thread-26882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:33:07.819 [DEBUG] [Thread-26882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:33:07.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:33:07.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:33:07.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:33:07.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:33:07.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:33:07.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:33:07.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:33:07.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:33:07.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:33:07.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.856032 -999.00   +9.50   8.10     81   +6.40 1 1 1 2 1     0    0 2.60 -21.00 ZNESW 6.9 8.1 103.1 13.1 10.0 -25.0 9.9 -24.0 9.7 -21.8 9.9 -24.0
2026-04-15T22:33:07.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:33:07.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:33:07.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.856032
2026-04-15T22:33:07.840 [DEBUG] [Thread-26882] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:33:07.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:33:07.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:33:07.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:33:07.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:33:07.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:33:07.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:32:31', tmtdew=3.60839, humidity=78.1614, cloud=0.0, wind=11.1341, temperature=9.19673, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:32:41.165', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.007749999999999702, 0.0012500000000006395, -0.09350000000000058, -0.03549999999999898, 0.013250000000001094, -0.009500000000000952, 0.018250000000001876, -0.031500000000001194, -0.04499999999999993, -0.036749999999999616, -0.06799999999999962, 0.0030000000000001137, 0.003750000000000142, 0.004999999999999005, 0.015499999999999403, 0.047750000000000625, -0.057000000000000384, 0.002000000000000668, -0.0017500000000012506, 0.010999999999999233, 0.05074999999999896, 0.019750000000001933, 0.012249999999999872, 0.03799999999999848, -0.0495000000000001, -0.019249999999999545, -0.0235000000000003, 0.03599999999999959, 0.0070000000000014495, 0.08450000000000202, 0.03200000000000003, -0.04525000000000112], zp_timestamp='2026-04-15T20:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:33:08.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:33:08.096 [DEBUG] [Thread-26885] [transport.py] [_log()] starting thread (client mode): 0xee904f40
2026-04-15T22:33:08.097 [DEBUG] [Thread-26885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:33:08.111 [DEBUG] [Thread-26885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:33:08.111 [INFO] [Thread-26885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:33:08.120 [DEBUG] [Thread-26885] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:33:08.121 [DEBUG] [Thread-26885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:33:08.121 [DEBUG] [Thread-26885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:33:08.121 [DEBUG] [Thread-26885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:33:08.121 [DEBUG] [Thread-26885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:33:08.121 [DEBUG] [Thread-26885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:33:08.121 [DEBUG] [Thread-26885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:33:08.122 [DEBUG] [Thread-26885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:33:08.122 [DEBUG] [Thread-26885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:33:08.122 [DEBUG] [Thread-26885] [transport.py] [_log()] client lang: <none>
2026-04-15T22:33:08.122 [DEBUG] [Thread-26885] [transport.py] [_log()] server lang: <none>
2026-04-15T22:33:08.122 [DEBUG] [Thread-26885] [transport.py] [_log()] kex follows: False
2026-04-15T22:33:08.122 [DEBUG] [Thread-26885] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:33:08.123 [DEBUG] [Thread-26885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:33:08.123 [DEBUG] [Thread-26885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:33:08.123 [DEBUG] [Thread-26885] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:33:08.123 [DEBUG] [Thread-26885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:33:08.123 [DEBUG] [Thread-26885] [transport.py] [_log()] Compression: none
2026-04-15T22:33:08.123 [DEBUG] [Thread-26885] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:33:08.175 [DEBUG] [Thread-26885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:33:08.176 [DEBUG] [Thread-26885] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:33:08.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:33:08.177 [DEBUG] [Thread-26885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:33:08.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:33:08.233 [DEBUG] [Thread-26885] [transport.py] [_log()] userauth is OK
2026-04-15T22:33:08.233 [DEBUG] [Thread-26885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:33:08.233 [DEBUG] [Thread-26885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:33:08.233 [DEBUG] [Thread-26885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:33:08.233 [DEBUG] [Thread-26885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:33:08.250 [INFO] [Thread-26885] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:33:08.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:33:08.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:33:09.056 [DEBUG] [Thread-26885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:33:09.057 [DEBUG] [Thread-26885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:33:09.104 [DEBUG] [Thread-26885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:33:09.104 [DEBUG] [Thread-26885] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:33:09.113 [DEBUG] [Thread-26885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:33:09.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:33:09.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')
2026-04-15T22:33:09.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
2026-04-15T22:33:09.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:33:09.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:33:09.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:33:09.148 [DEBUG] [Thread-26885] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:33:19.396 [DEBUG] [Thread-26887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:33:27.530 [DEBUG] [Thread-26888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:33:34.442 [DEBUG] [Thread-26889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:33:39.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:33:39.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:33:39.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
2026-04-15T22:33:40.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 33, 7), 3.60876, 78.1614, 0.0, 10.9577, 9.21332, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:33:40.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:33:07
2026-04-15T22:33:40.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:33:41.287 [DEBUG] [Thread-26890] [transport.py] [_log()] starting thread (client mode): 0xee907a90
2026-04-15T22:33:41.287 [DEBUG] [Thread-26890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:33:41.307 [DEBUG] [Thread-26890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:33:41.307 [INFO] [Thread-26890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:33:41.310 [DEBUG] [Thread-26890] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] client lang: <none>
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] server lang: <none>
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] kex follows: False
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:33:41.311 [DEBUG] [Thread-26890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:33:41.312 [DEBUG] [Thread-26890] [transport.py] [_log()] Compression: none
2026-04-15T22:33:41.312 [DEBUG] [Thread-26890] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:33:41.326 [DEBUG] [Thread-26890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:33:41.327 [DEBUG] [Thread-26890] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:33:41.327 [DEBUG] [Thread-26890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:33:41.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:33:41.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:33:41.368 [DEBUG] [Thread-26890] [transport.py] [_log()] userauth is OK
2026-04-15T22:33:41.368 [DEBUG] [Thread-26890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:33:41.368 [DEBUG] [Thread-26890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:33:41.368 [DEBUG] [Thread-26890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:33:41.369 [DEBUG] [Thread-26890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:33:41.399 [INFO] [Thread-26890] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:33:41.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:33:42.071 [DEBUG] [Thread-26890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:33:42.072 [DEBUG] [Thread-26890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:33:42.072 [DEBUG] [Thread-26890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:33:42.112 [DEBUG] [Thread-26890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:33:42.112 [DEBUG] [Thread-26890] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:33:42.115 [DEBUG] [Thread-26890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:33:42.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:33:42.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:33:42.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:33:42.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:33:42.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:33:42.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:33:42.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:33:42.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:33:42.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:33:42.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.856380 -999.00   +9.50   7.29     81   +6.40 1 1 1 2 1     0    0 2.67 -21.25 ZNESW 7.1 7.3 108.1 11.9 10.1 -25.2 9.9 -23.9 9.7 -21.8 9.9 -23.9
2026-04-15T22:33:42.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:33:42.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:33:42.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.856380
2026-04-15T22:33:42.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:33:42.133 [DEBUG] [Thread-26890] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:33:42.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:33:42.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:33:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:33:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:33:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:33:07', tmtdew=3.60876, humidity=78.1614, cloud=0.0, wind=10.9577, temperature=9.21332, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:33:11.232', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.007749999999999702, 0.0012500000000006395, -0.09350000000000058, -0.03549999999999898, 0.013250000000001094, -0.009500000000000952, 0.018250000000001876, -0.031500000000001194, -0.04499999999999993, -0.036749999999999616, -0.06799999999999962, 0.0030000000000001137, 0.003750000000000142, 0.004999999999999005, 0.015499999999999403, 0.047750000000000625, -0.057000000000000384, 0.002000000000000668, -0.0017500000000012506, 0.010999999999999233, 0.05074999999999896, 0.019750000000001933, 0.012249999999999872, 0.03799999999999848, -0.0495000000000001, -0.019249999999999545, -0.0235000000000003, 0.03599999999999959, 0.0070000000000014495, 0.08450000000000202, 0.03200000000000003, -0.04525000000000112], zp_timestamp='2026-04-15T20:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:33:42.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:33:42.392 [DEBUG] [Thread-26893] [transport.py] [_log()] starting thread (client mode): 0xf13cb850
2026-04-15T22:33:42.393 [DEBUG] [Thread-26893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:33:42.406 [DEBUG] [Thread-26893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:33:42.406 [INFO] [Thread-26893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:33:42.414 [DEBUG] [Thread-26893] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:33:42.414 [DEBUG] [Thread-26893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] client lang: <none>
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] server lang: <none>
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] kex follows: False
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] Compression: none
2026-04-15T22:33:42.415 [DEBUG] [Thread-26893] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:33:42.470 [DEBUG] [Thread-26893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:33:42.470 [DEBUG] [Thread-26893] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:33:42.471 [DEBUG] [Thread-26893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:33:42.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:33:42.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:33:42.527 [DEBUG] [Thread-26893] [transport.py] [_log()] userauth is OK
2026-04-15T22:33:42.527 [DEBUG] [Thread-26893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:33:42.527 [DEBUG] [Thread-26893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:33:42.527 [DEBUG] [Thread-26893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:33:42.527 [DEBUG] [Thread-26893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:33:42.547 [INFO] [Thread-26893] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:33:42.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:33:42.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:33:43.361 [DEBUG] [Thread-26893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:33:43.361 [DEBUG] [Thread-26893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:33:43.408 [DEBUG] [Thread-26893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:33:43.408 [DEBUG] [Thread-26893] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:33:43.417 [DEBUG] [Thread-26893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:33:43.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:33:43.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')
2026-04-15T22:33:43.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
2026-04-15T22:33:43.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:33:43.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:33:43.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:33:43.448 [DEBUG] [Thread-26893] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:33:49.473 [DEBUG] [Thread-26895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:34:02.084 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:34:02.085 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:34:04.517 [DEBUG] [Thread-26896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:34:13.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:34:13.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:34:13.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
2026-04-15T22:34:14.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 33, 43), 2.99468, 81.4557, 0.0, 14.1156, 8.95998, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:34:14.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:33:43
2026-04-15T22:34:15.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:34:15.641 [DEBUG] [Thread-26897] [transport.py] [_log()] starting thread (client mode): 0xee906d70
2026-04-15T22:34:15.642 [DEBUG] [Thread-26897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:34:15.661 [DEBUG] [Thread-26897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:34:15.661 [INFO] [Thread-26897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:34:15.663 [DEBUG] [Thread-26897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] client lang: <none>
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] server lang: <none>
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] kex follows: False
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:34:15.664 [DEBUG] [Thread-26897] [transport.py] [_log()] Compression: none
2026-04-15T22:34:15.665 [DEBUG] [Thread-26897] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:34:15.682 [DEBUG] [Thread-26897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:34:15.682 [DEBUG] [Thread-26897] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:34:15.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:34:15.683 [DEBUG] [Thread-26897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:34:15.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:34:15.684 [DEBUG] [Thread-26897] [transport.py] [_log()] userauth is OK
2026-04-15T22:34:15.684 [DEBUG] [Thread-26897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:34:15.684 [DEBUG] [Thread-26897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:34:15.684 [DEBUG] [Thread-26897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:34:15.684 [DEBUG] [Thread-26897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:34:15.696 [INFO] [Thread-26897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:34:15.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:34:16.341 [DEBUG] [Thread-26897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:34:16.341 [DEBUG] [Thread-26897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:34:16.341 [DEBUG] [Thread-26897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:34:16.382 [DEBUG] [Thread-26897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:34:16.382 [DEBUG] [Thread-26897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:34:16.384 [DEBUG] [Thread-26897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:34:16.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:34:16.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:34:16.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:34:16.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:34:16.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:34:16.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:34:16.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:34:16.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:34:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:34:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.856727 -999.00   +9.50   7.47     81   +6.50 1 1 1 2 1     0    0 2.68 -20.61 ZNESW 6.8 7.5 86.5 9.5 10.0 -25.2 9.9 -23.9 9.7 -21.8 9.9 -23.9
2026-04-15T22:34:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:34:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:34:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.856727
2026-04-15T22:34:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:34:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:34:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:34:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:34:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:34:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:33:43', tmtdew=2.99468, humidity=81.4557, cloud=0.0, wind=14.1156, temperature=8.95998, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:33:41.213', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.007749999999999702, 0.0012500000000006395, -0.09350000000000058, -0.03549999999999898, 0.013250000000001094, -0.009500000000000952, 0.018250000000001876, -0.031500000000001194, -0.04499999999999993, -0.036749999999999616, -0.06799999999999962, 0.0030000000000001137, 0.003750000000000142, 0.004999999999999005, 0.015499999999999403, 0.047750000000000625, -0.057000000000000384, 0.002000000000000668, -0.0017500000000012506, 0.010999999999999233, 0.05074999999999896, 0.019750000000001933, 0.012249999999999872, 0.03799999999999848, -0.0495000000000001, -0.019249999999999545, -0.0235000000000003, 0.03599999999999959, 0.0070000000000014495, 0.08450000000000202, 0.03200000000000003, -0.04525000000000112], zp_timestamp='2026-04-15T20:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:34:16.404 [DEBUG] [Thread-26897] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:34:16.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:34:16.623 [DEBUG] [Thread-26900] [transport.py] [_log()] starting thread (client mode): 0xee905600
2026-04-15T22:34:16.623 [DEBUG] [Thread-26900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:34:16.641 [DEBUG] [Thread-26900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:34:16.641 [INFO] [Thread-26900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:34:16.649 [DEBUG] [Thread-26900] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:34:16.649 [DEBUG] [Thread-26900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:34:16.649 [DEBUG] [Thread-26900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:34:16.649 [DEBUG] [Thread-26900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:34:16.649 [DEBUG] [Thread-26900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:34:16.649 [DEBUG] [Thread-26900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:34:16.649 [DEBUG] [Thread-26900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:34:16.649 [DEBUG] [Thread-26900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:34:16.649 [DEBUG] [Thread-26900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:34:16.649 [DEBUG] [Thread-26900] [transport.py] [_log()] client lang: <none>
2026-04-15T22:34:16.650 [DEBUG] [Thread-26900] [transport.py] [_log()] server lang: <none>
2026-04-15T22:34:16.650 [DEBUG] [Thread-26900] [transport.py] [_log()] kex follows: False
2026-04-15T22:34:16.650 [DEBUG] [Thread-26900] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:34:16.650 [DEBUG] [Thread-26900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:34:16.650 [DEBUG] [Thread-26900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:34:16.650 [DEBUG] [Thread-26900] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:34:16.650 [DEBUG] [Thread-26900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:34:16.650 [DEBUG] [Thread-26900] [transport.py] [_log()] Compression: none
2026-04-15T22:34:16.650 [DEBUG] [Thread-26900] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:34:16.708 [DEBUG] [Thread-26900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:34:16.709 [DEBUG] [Thread-26900] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:34:16.709 [DEBUG] [Thread-26900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:34:16.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:34:16.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:34:16.769 [DEBUG] [Thread-26900] [transport.py] [_log()] userauth is OK
2026-04-15T22:34:16.769 [DEBUG] [Thread-26900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:34:16.769 [DEBUG] [Thread-26900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:34:16.770 [DEBUG] [Thread-26900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:34:16.770 [DEBUG] [Thread-26900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:34:16.798 [INFO] [Thread-26900] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:34:16.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:34:16.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:34:17.638 [DEBUG] [Thread-26900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:34:17.638 [DEBUG] [Thread-26900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:34:17.686 [DEBUG] [Thread-26900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:34:17.686 [DEBUG] [Thread-26900] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:34:17.694 [DEBUG] [Thread-26900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:34:17.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:34:17.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')
2026-04-15T22:34:17.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
2026-04-15T22:34:17.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:34:17.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:34:17.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:34:17.727 [DEBUG] [Thread-26900] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:34:19.547 [DEBUG] [Thread-26902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:34:27.691 [DEBUG] [Thread-26903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:34:34.589 [DEBUG] [Thread-26904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:34:47.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:34:47.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:34:47.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
2026-04-15T22:34:49.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 34, 18), 3.50028, 78.7113, 0.0, 10.5696, 9.12999, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:34:49.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:34:18
2026-04-15T22:34:49.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:34:49.618 [DEBUG] [Thread-26905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:34:49.915 [DEBUG] [Thread-26906] [transport.py] [_log()] starting thread (client mode): 0xee904b50
2026-04-15T22:34:49.915 [DEBUG] [Thread-26906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:34:49.936 [DEBUG] [Thread-26906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:34:49.937 [INFO] [Thread-26906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:34:49.940 [DEBUG] [Thread-26906] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:34:49.940 [DEBUG] [Thread-26906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:34:49.940 [DEBUG] [Thread-26906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:34:49.940 [DEBUG] [Thread-26906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:34:49.940 [DEBUG] [Thread-26906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:34:49.940 [DEBUG] [Thread-26906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:34:49.940 [DEBUG] [Thread-26906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:34:49.940 [DEBUG] [Thread-26906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:34:49.940 [DEBUG] [Thread-26906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:34:49.940 [DEBUG] [Thread-26906] [transport.py] [_log()] client lang: <none>
2026-04-15T22:34:49.940 [DEBUG] [Thread-26906] [transport.py] [_log()] server lang: <none>
2026-04-15T22:34:49.940 [DEBUG] [Thread-26906] [transport.py] [_log()] kex follows: False
2026-04-15T22:34:49.940 [DEBUG] [Thread-26906] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:34:49.940 [DEBUG] [Thread-26906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:34:49.940 [DEBUG] [Thread-26906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:34:49.941 [DEBUG] [Thread-26906] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:34:49.941 [DEBUG] [Thread-26906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:34:49.941 [DEBUG] [Thread-26906] [transport.py] [_log()] Compression: none
2026-04-15T22:34:49.941 [DEBUG] [Thread-26906] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:34:49.956 [DEBUG] [Thread-26906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:34:49.956 [DEBUG] [Thread-26906] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:34:49.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:34:49.957 [DEBUG] [Thread-26906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:34:49.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:34:49.958 [DEBUG] [Thread-26906] [transport.py] [_log()] userauth is OK
2026-04-15T22:34:49.958 [DEBUG] [Thread-26906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:34:49.958 [DEBUG] [Thread-26906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:34:49.958 [DEBUG] [Thread-26906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:34:49.958 [DEBUG] [Thread-26906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:34:49.982 [INFO] [Thread-26906] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:34:49.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:34:50.645 [DEBUG] [Thread-26906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:34:50.646 [DEBUG] [Thread-26906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:34:50.646 [DEBUG] [Thread-26906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:34:50.686 [DEBUG] [Thread-26906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:34:50.686 [DEBUG] [Thread-26906] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:34:50.689 [DEBUG] [Thread-26906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:34:50.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:34:50.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:34:50.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:34:50.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:34:50.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:34:50.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:34:50.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:34:50.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:34:50.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:34:50.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.857074 -999.00   +9.50   9.60     81   +6.40 1 1 1 2 1     0    0 2.58 -20.72 ZNESW 6.4 9.6 87.4 10.8 10.0 -25.2 9.9 -24.0 9.7 -21.8 9.9 -23.8
2026-04-15T22:34:50.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:34:50.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:34:50.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.857074
2026-04-15T22:34:50.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:34:50.714 [DEBUG] [Thread-26906] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:34:50.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:34:50.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:34:50.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:34:50.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:34:50.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:34:18', tmtdew=3.50028, humidity=78.7113, cloud=0.0, wind=10.5696, temperature=9.12999, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:34:11.194', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.007749999999999702, 0.0012500000000006395, -0.09350000000000058, -0.03549999999999898, 0.013250000000001094, -0.009500000000000952, 0.018250000000001876, -0.031500000000001194, -0.04499999999999993, -0.036749999999999616, -0.06799999999999962, 0.0030000000000001137, 0.003750000000000142, 0.004999999999999005, 0.015499999999999403, 0.047750000000000625, -0.057000000000000384, 0.002000000000000668, -0.0017500000000012506, 0.010999999999999233, 0.05074999999999896, 0.019750000000001933, 0.012249999999999872, 0.03799999999999848, -0.0495000000000001, -0.019249999999999545, -0.0235000000000003, 0.03599999999999959, 0.0070000000000014495, 0.08450000000000202, 0.03200000000000003, -0.04525000000000112], zp_timestamp='2026-04-15T20:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:34:50.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:34:50.969 [DEBUG] [Thread-26909] [transport.py] [_log()] starting thread (client mode): 0xee906b00
2026-04-15T22:34:50.969 [DEBUG] [Thread-26909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:34:50.983 [DEBUG] [Thread-26909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:34:50.983 [INFO] [Thread-26909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:34:50.991 [DEBUG] [Thread-26909] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:34:50.991 [DEBUG] [Thread-26909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:34:50.991 [DEBUG] [Thread-26909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:34:50.991 [DEBUG] [Thread-26909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:34:50.991 [DEBUG] [Thread-26909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:34:50.991 [DEBUG] [Thread-26909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:34:50.991 [DEBUG] [Thread-26909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:34:50.991 [DEBUG] [Thread-26909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:34:50.991 [DEBUG] [Thread-26909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:34:50.992 [DEBUG] [Thread-26909] [transport.py] [_log()] client lang: <none>
2026-04-15T22:34:50.992 [DEBUG] [Thread-26909] [transport.py] [_log()] server lang: <none>
2026-04-15T22:34:50.992 [DEBUG] [Thread-26909] [transport.py] [_log()] kex follows: False
2026-04-15T22:34:50.992 [DEBUG] [Thread-26909] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:34:50.992 [DEBUG] [Thread-26909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:34:50.992 [DEBUG] [Thread-26909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:34:50.992 [DEBUG] [Thread-26909] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:34:50.992 [DEBUG] [Thread-26909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:34:50.992 [DEBUG] [Thread-26909] [transport.py] [_log()] Compression: none
2026-04-15T22:34:50.992 [DEBUG] [Thread-26909] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:34:51.047 [DEBUG] [Thread-26909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:34:51.047 [DEBUG] [Thread-26909] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:34:51.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:34:51.048 [DEBUG] [Thread-26909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:34:51.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:34:51.104 [DEBUG] [Thread-26909] [transport.py] [_log()] userauth is OK
2026-04-15T22:34:51.104 [DEBUG] [Thread-26909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:34:51.104 [DEBUG] [Thread-26909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:34:51.105 [DEBUG] [Thread-26909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:34:51.105 [DEBUG] [Thread-26909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:34:51.132 [INFO] [Thread-26909] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:34:51.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:34:51.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:34:51.974 [DEBUG] [Thread-26909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:34:51.975 [DEBUG] [Thread-26909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:34:52.024 [DEBUG] [Thread-26909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:34:52.024 [DEBUG] [Thread-26909] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:34:52.034 [DEBUG] [Thread-26909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:34:52.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:34:52.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')
2026-04-15T22:34:52.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
2026-04-15T22:34:52.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:34:52.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:34:52.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:34:52.069 [DEBUG] [Thread-26909] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:35:02.285 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:35:02.286 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:35:04.647 [DEBUG] [Thread-26911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:35:19.689 [DEBUG] [Thread-26912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:35:22.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:35:22.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:35:22.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T22:35:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 34, 54), 3.01747, 81.3231, 0.0, 14.045, 8.92693, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:35:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:34:54
2026-04-15T22:35:23.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:35:24.373 [DEBUG] [Thread-26913] [transport.py] [_log()] starting thread (client mode): 0xee905ff0
2026-04-15T22:35:24.373 [DEBUG] [Thread-26913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:35:24.392 [DEBUG] [Thread-26913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:35:24.392 [INFO] [Thread-26913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:35:24.395 [DEBUG] [Thread-26913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:35:24.395 [DEBUG] [Thread-26913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:35:24.396 [DEBUG] [Thread-26913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:35:24.396 [DEBUG] [Thread-26913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:35:24.396 [DEBUG] [Thread-26913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:35:24.396 [DEBUG] [Thread-26913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:35:24.396 [DEBUG] [Thread-26913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:35:24.396 [DEBUG] [Thread-26913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:35:24.396 [DEBUG] [Thread-26913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:35:24.396 [DEBUG] [Thread-26913] [transport.py] [_log()] client lang: <none>
2026-04-15T22:35:24.396 [DEBUG] [Thread-26913] [transport.py] [_log()] server lang: <none>
2026-04-15T22:35:24.396 [DEBUG] [Thread-26913] [transport.py] [_log()] kex follows: False
2026-04-15T22:35:24.396 [DEBUG] [Thread-26913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:35:24.397 [DEBUG] [Thread-26913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:35:24.397 [DEBUG] [Thread-26913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:35:24.397 [DEBUG] [Thread-26913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:35:24.397 [DEBUG] [Thread-26913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:35:24.397 [DEBUG] [Thread-26913] [transport.py] [_log()] Compression: none
2026-04-15T22:35:24.397 [DEBUG] [Thread-26913] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:35:24.415 [DEBUG] [Thread-26913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:35:24.415 [DEBUG] [Thread-26913] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:35:24.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:35:24.416 [DEBUG] [Thread-26913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:35:24.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:35:24.417 [DEBUG] [Thread-26913] [transport.py] [_log()] userauth is OK
2026-04-15T22:35:24.417 [DEBUG] [Thread-26913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:35:24.417 [DEBUG] [Thread-26913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:35:24.418 [DEBUG] [Thread-26913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:35:24.418 [DEBUG] [Thread-26913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:35:24.453 [INFO] [Thread-26913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:35:24.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:35:25.105 [DEBUG] [Thread-26913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:35:25.105 [DEBUG] [Thread-26913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:35:25.106 [DEBUG] [Thread-26913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:35:25.146 [DEBUG] [Thread-26913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:35:25.146 [DEBUG] [Thread-26913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:35:25.149 [DEBUG] [Thread-26913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:35:25.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:35:25.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:35:25.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:35:25.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:35:25.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:35:25.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:35:25.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:35:25.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:35:25.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:35:25.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.857421 -999.00   +9.50   8.62     81   +6.40 1 1 1 2 1     0    0 2.60 -21.37 ZNESW 9.4 8.6 116.6 11.4 10.0 -25.1 9.9 -23.9 9.6 -21.8 9.9 -23.8
2026-04-15T22:35:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:35:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:35:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.857421
2026-04-15T22:35:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:35:25.174 [DEBUG] [Thread-26913] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:35:25.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:35:25.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:35:25.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:35:25.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:35:25.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:34:54', tmtdew=3.01747, humidity=81.3231, cloud=0.0, wind=14.045, temperature=8.92693, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:34:41.174', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.007749999999999702, 0.0012500000000006395, -0.09350000000000058, -0.03549999999999898, 0.013250000000001094, -0.009500000000000952, 0.018250000000001876, -0.031500000000001194, -0.04499999999999993, -0.036749999999999616, -0.06799999999999962, 0.0030000000000001137, 0.003750000000000142, 0.004999999999999005, 0.015499999999999403, 0.047750000000000625, -0.057000000000000384, 0.002000000000000668, -0.0017500000000012506, 0.010999999999999233, 0.05074999999999896, 0.019750000000001933, 0.012249999999999872, 0.03799999999999848, -0.0495000000000001, -0.019249999999999545, -0.0235000000000003, 0.03599999999999959, 0.0070000000000014495, 0.08450000000000202, 0.03200000000000003, -0.04525000000000112], zp_timestamp='2026-04-15T20:30:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:35:25.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:35:25.432 [DEBUG] [Thread-26916] [transport.py] [_log()] starting thread (client mode): 0xf13e02b0
2026-04-15T22:35:25.432 [DEBUG] [Thread-26916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:35:25.446 [DEBUG] [Thread-26916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:35:25.446 [INFO] [Thread-26916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:35:25.453 [DEBUG] [Thread-26916] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:35:25.453 [DEBUG] [Thread-26916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:35:25.453 [DEBUG] [Thread-26916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:35:25.453 [DEBUG] [Thread-26916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:35:25.454 [DEBUG] [Thread-26916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:35:25.454 [DEBUG] [Thread-26916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:35:25.454 [DEBUG] [Thread-26916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:35:25.454 [DEBUG] [Thread-26916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:35:25.454 [DEBUG] [Thread-26916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:35:25.454 [DEBUG] [Thread-26916] [transport.py] [_log()] client lang: <none>
2026-04-15T22:35:25.454 [DEBUG] [Thread-26916] [transport.py] [_log()] server lang: <none>
2026-04-15T22:35:25.454 [DEBUG] [Thread-26916] [transport.py] [_log()] kex follows: False
2026-04-15T22:35:25.454 [DEBUG] [Thread-26916] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:35:25.454 [DEBUG] [Thread-26916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:35:25.454 [DEBUG] [Thread-26916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:35:25.454 [DEBUG] [Thread-26916] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:35:25.454 [DEBUG] [Thread-26916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:35:25.454 [DEBUG] [Thread-26916] [transport.py] [_log()] Compression: none
2026-04-15T22:35:25.455 [DEBUG] [Thread-26916] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:35:25.513 [DEBUG] [Thread-26916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:35:25.513 [DEBUG] [Thread-26916] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:35:25.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:35:25.514 [DEBUG] [Thread-26916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:35:25.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:35:25.570 [DEBUG] [Thread-26916] [transport.py] [_log()] userauth is OK
2026-04-15T22:35:25.570 [DEBUG] [Thread-26916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:35:25.570 [DEBUG] [Thread-26916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:35:25.571 [DEBUG] [Thread-26916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:35:25.571 [DEBUG] [Thread-26916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:35:25.596 [INFO] [Thread-26916] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:35:25.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:35:25.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:35:26.409 [DEBUG] [Thread-26916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:35:26.409 [DEBUG] [Thread-26916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:35:26.457 [DEBUG] [Thread-26916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:35:26.457 [DEBUG] [Thread-26916] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:35:26.465 [DEBUG] [Thread-26916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:35:26.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:35:26.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')
2026-04-15T22:35:26.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
2026-04-15T22:35:26.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:35:26.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:35:26.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:35:26.497 [DEBUG] [Thread-26916] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:35:27.857 [DEBUG] [Thread-26918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:35:34.719 [DEBUG] [Thread-26919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:35:49.758 [DEBUG] [Thread-26920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:35:56.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:35:56.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:35:56.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
2026-04-15T22:35:57.162 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:35:57.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 35, 30), 3.51501, 78.6285, 0.0, 10.3226, 9.18011, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:35:57.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:35:30
2026-04-15T22:35:58.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:35:58.765 [DEBUG] [Thread-26921] [transport.py] [_log()] starting thread (client mode): 0xf13c8af0
2026-04-15T22:35:58.765 [DEBUG] [Thread-26921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:35:58.785 [DEBUG] [Thread-26921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:35:58.785 [INFO] [Thread-26921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:35:58.788 [DEBUG] [Thread-26921] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:35:58.788 [DEBUG] [Thread-26921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:35:58.789 [DEBUG] [Thread-26921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:35:58.789 [DEBUG] [Thread-26921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:35:58.789 [DEBUG] [Thread-26921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:35:58.789 [DEBUG] [Thread-26921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:35:58.789 [DEBUG] [Thread-26921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:35:58.789 [DEBUG] [Thread-26921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:35:58.789 [DEBUG] [Thread-26921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:35:58.789 [DEBUG] [Thread-26921] [transport.py] [_log()] client lang: <none>
2026-04-15T22:35:58.789 [DEBUG] [Thread-26921] [transport.py] [_log()] server lang: <none>
2026-04-15T22:35:58.789 [DEBUG] [Thread-26921] [transport.py] [_log()] kex follows: False
2026-04-15T22:35:58.789 [DEBUG] [Thread-26921] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:35:58.789 [DEBUG] [Thread-26921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:35:58.790 [DEBUG] [Thread-26921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:35:58.790 [DEBUG] [Thread-26921] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:35:58.790 [DEBUG] [Thread-26921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:35:58.790 [DEBUG] [Thread-26921] [transport.py] [_log()] Compression: none
2026-04-15T22:35:58.790 [DEBUG] [Thread-26921] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:35:58.807 [DEBUG] [Thread-26921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:35:58.807 [DEBUG] [Thread-26921] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:35:58.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:35:58.808 [DEBUG] [Thread-26921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:35:58.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:35:58.809 [DEBUG] [Thread-26921] [transport.py] [_log()] userauth is OK
2026-04-15T22:35:58.809 [DEBUG] [Thread-26921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:35:58.809 [DEBUG] [Thread-26921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:35:58.809 [DEBUG] [Thread-26921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:35:58.809 [DEBUG] [Thread-26921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:35:58.824 [INFO] [Thread-26921] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:35:58.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:35:59.477 [DEBUG] [Thread-26921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:35:59.477 [DEBUG] [Thread-26921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:35:59.478 [DEBUG] [Thread-26921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:35:59.518 [DEBUG] [Thread-26921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:35:59.518 [DEBUG] [Thread-26921] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:35:59.521 [DEBUG] [Thread-26921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:35:59.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:35:59.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:35:59.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:35:59.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:35:59.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:35:59.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:35:59.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:35:59.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:35:59.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:35:59.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.858116 -999.00   +9.50   6.09     81   +6.40 1 1 1 2 1     0    0 2.55 -23.30 ZNESW 10.0 6.1 125.4 10.6 10.0 -25.2 10.0 -23.9 9.7 -21.8 9.9 -23.9
2026-04-15T22:35:59.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:35:59.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:35:59.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.858116
2026-04-15T22:35:59.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:35:59.549 [DEBUG] [Thread-26921] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:35:59.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:35:59.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:35:59.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:35:59.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:35:59.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:35:30', tmtdew=3.51501, humidity=78.6285, cloud=0.0, wind=10.3226, temperature=9.18011, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:35:41.222', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.011749999999999261, -0.014749999999999375, -0.09550000000000125, -0.03550000000000075, -0.009749999999998593, -0.02450000000000152, -0.018749999999998934, 0.0045000000000001705, -0.03399999999999892, -0.03974999999999973, -0.034000000000000696, -0.006999999999999673, -0.0007500000000000284, -0.009000000000000341, -0.006000000000000227, 0.005250000000000199, -0.03449999999999953, 0.009499999999999176, 0.005249999999998423, 0.00999999999999801, 0.044749999999998735, 0.012250000000001648, 0.011250000000000426, 0.0259999999999998, -0.042500000000000426, -0.015249999999999986, 0.0065000000000008384, 0.04800000000000004, 0.021000000000000796, 0.10400000000000098, 0.014500000000001734, -0.04025000000000034], zp_timestamp='2026-04-15T20:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:35:59.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:35:59.805 [DEBUG] [Thread-26924] [transport.py] [_log()] starting thread (client mode): 0xf13c8910
2026-04-15T22:35:59.805 [DEBUG] [Thread-26924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:35:59.820 [DEBUG] [Thread-26924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:35:59.820 [INFO] [Thread-26924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:35:59.827 [DEBUG] [Thread-26924] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:35:59.827 [DEBUG] [Thread-26924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:35:59.827 [DEBUG] [Thread-26924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:35:59.827 [DEBUG] [Thread-26924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:35:59.828 [DEBUG] [Thread-26924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:35:59.828 [DEBUG] [Thread-26924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:35:59.828 [DEBUG] [Thread-26924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:35:59.828 [DEBUG] [Thread-26924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:35:59.828 [DEBUG] [Thread-26924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:35:59.828 [DEBUG] [Thread-26924] [transport.py] [_log()] client lang: <none>
2026-04-15T22:35:59.828 [DEBUG] [Thread-26924] [transport.py] [_log()] server lang: <none>
2026-04-15T22:35:59.828 [DEBUG] [Thread-26924] [transport.py] [_log()] kex follows: False
2026-04-15T22:35:59.828 [DEBUG] [Thread-26924] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:35:59.828 [DEBUG] [Thread-26924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:35:59.829 [DEBUG] [Thread-26924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:35:59.829 [DEBUG] [Thread-26924] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:35:59.829 [DEBUG] [Thread-26924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:35:59.829 [DEBUG] [Thread-26924] [transport.py] [_log()] Compression: none
2026-04-15T22:35:59.829 [DEBUG] [Thread-26924] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:35:59.888 [DEBUG] [Thread-26924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:35:59.888 [DEBUG] [Thread-26924] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:35:59.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:35:59.889 [DEBUG] [Thread-26924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:35:59.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:35:59.943 [DEBUG] [Thread-26924] [transport.py] [_log()] userauth is OK
2026-04-15T22:35:59.944 [DEBUG] [Thread-26924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:35:59.944 [DEBUG] [Thread-26924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:35:59.944 [DEBUG] [Thread-26924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:35:59.944 [DEBUG] [Thread-26924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:35:59.963 [INFO] [Thread-26924] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:35:59.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:35:59.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:36:00.283 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:36:00.766 [DEBUG] [Thread-26924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:36:00.767 [DEBUG] [Thread-26924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:36:00.814 [DEBUG] [Thread-26924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:36:00.814 [DEBUG] [Thread-26924] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:36:00.823 [DEBUG] [Thread-26924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:36:00.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:36:00.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')
2026-04-15T22:36:00.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
2026-04-15T22:36:00.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:36:00.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:36:00.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:36:00.859 [DEBUG] [Thread-26924] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:36:02.493 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:36:02.494 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:36:04.791 [DEBUG] [Thread-26926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:36:05.325 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:36:11.680 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:36:19.835 [DEBUG] [Thread-26927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:36:28.026 [DEBUG] [Thread-26928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:36:30.186 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:36:30.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:36:30.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:36:30.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
2026-04-15T22:36:32.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 36, 6), 3.51205, 78.6451, 0.0, 10.2697, 9.18011, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:36:32.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:36:06
2026-04-15T22:36:32.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:36:33.030 [DEBUG] [Thread-26929] [transport.py] [_log()] starting thread (client mode): 0xf13e1030
2026-04-15T22:36:33.031 [DEBUG] [Thread-26929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:36:33.050 [DEBUG] [Thread-26929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:36:33.050 [INFO] [Thread-26929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:36:33.052 [DEBUG] [Thread-26929] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:36:33.052 [DEBUG] [Thread-26929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:36:33.052 [DEBUG] [Thread-26929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:36:33.052 [DEBUG] [Thread-26929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:36:33.052 [DEBUG] [Thread-26929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:36:33.053 [DEBUG] [Thread-26929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:36:33.053 [DEBUG] [Thread-26929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:36:33.053 [DEBUG] [Thread-26929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:36:33.053 [DEBUG] [Thread-26929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:36:33.053 [DEBUG] [Thread-26929] [transport.py] [_log()] client lang: <none>
2026-04-15T22:36:33.053 [DEBUG] [Thread-26929] [transport.py] [_log()] server lang: <none>
2026-04-15T22:36:33.053 [DEBUG] [Thread-26929] [transport.py] [_log()] kex follows: False
2026-04-15T22:36:33.053 [DEBUG] [Thread-26929] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:36:33.053 [DEBUG] [Thread-26929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:36:33.053 [DEBUG] [Thread-26929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:36:33.053 [DEBUG] [Thread-26929] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:36:33.053 [DEBUG] [Thread-26929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:36:33.054 [DEBUG] [Thread-26929] [transport.py] [_log()] Compression: none
2026-04-15T22:36:33.054 [DEBUG] [Thread-26929] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:36:33.062 [DEBUG] [Thread-26929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:36:33.062 [DEBUG] [Thread-26929] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:36:33.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:36:33.063 [DEBUG] [Thread-26929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:36:33.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:36:33.064 [DEBUG] [Thread-26929] [transport.py] [_log()] userauth is OK
2026-04-15T22:36:33.064 [DEBUG] [Thread-26929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:36:33.064 [DEBUG] [Thread-26929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:36:33.064 [DEBUG] [Thread-26929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:36:33.064 [DEBUG] [Thread-26929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:36:33.080 [INFO] [Thread-26929] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:36:33.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:36:33.702 [DEBUG] [Thread-26929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:36:33.702 [DEBUG] [Thread-26929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:36:33.703 [DEBUG] [Thread-26929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:36:33.743 [DEBUG] [Thread-26929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:36:33.743 [DEBUG] [Thread-26929] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:36:33.746 [DEBUG] [Thread-26929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:36:33.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:36:33.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:36:33.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:36:33.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:36:33.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:36:33.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:36:33.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:36:33.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:36:33.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:36:33.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.858463 -999.00   +9.50   8.89     81   +6.40 1 1 1 2 1     0    0 2.54 -22.43 ZNESW 6.8 8.9 123.2 10.1 10.0 -25.3 9.9 -23.8 9.6 -21.8 9.9 -23.9
2026-04-15T22:36:33.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:36:33.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:36:33.771 [DEBUG] [Thread-26929] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:36:33.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.858463
2026-04-15T22:36:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:36:33.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:36:33.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:36:33.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:36:33.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:36:33.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:36:06', tmtdew=3.51205, humidity=78.6451, cloud=0.0, wind=10.2697, temperature=9.18011, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:36:11.203', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.011749999999999261, -0.014749999999999375, -0.09550000000000125, -0.03550000000000075, -0.009749999999998593, -0.02450000000000152, -0.018749999999998934, 0.0045000000000001705, -0.03399999999999892, -0.03974999999999973, -0.034000000000000696, -0.006999999999999673, -0.0007500000000000284, -0.009000000000000341, -0.006000000000000227, 0.005250000000000199, -0.03449999999999953, 0.009499999999999176, 0.005249999999998423, 0.00999999999999801, 0.044749999999998735, 0.012250000000001648, 0.011250000000000426, 0.0259999999999998, -0.042500000000000426, -0.015249999999999986, 0.0065000000000008384, 0.04800000000000004, 0.021000000000000796, 0.10400000000000098, 0.014500000000001734, -0.04025000000000034], zp_timestamp='2026-04-15T20:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:36:34.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:36:34.030 [DEBUG] [Thread-26932] [transport.py] [_log()] starting thread (client mode): 0xee904df0
2026-04-15T22:36:34.030 [DEBUG] [Thread-26932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:36:34.045 [DEBUG] [Thread-26932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:36:34.045 [INFO] [Thread-26932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:36:34.052 [DEBUG] [Thread-26932] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:36:34.052 [DEBUG] [Thread-26932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:36:34.052 [DEBUG] [Thread-26932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:36:34.053 [DEBUG] [Thread-26932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:36:34.053 [DEBUG] [Thread-26932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:36:34.053 [DEBUG] [Thread-26932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:36:34.053 [DEBUG] [Thread-26932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:36:34.053 [DEBUG] [Thread-26932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:36:34.053 [DEBUG] [Thread-26932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:36:34.053 [DEBUG] [Thread-26932] [transport.py] [_log()] client lang: <none>
2026-04-15T22:36:34.053 [DEBUG] [Thread-26932] [transport.py] [_log()] server lang: <none>
2026-04-15T22:36:34.053 [DEBUG] [Thread-26932] [transport.py] [_log()] kex follows: False
2026-04-15T22:36:34.053 [DEBUG] [Thread-26932] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:36:34.053 [DEBUG] [Thread-26932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:36:34.053 [DEBUG] [Thread-26932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:36:34.054 [DEBUG] [Thread-26932] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:36:34.054 [DEBUG] [Thread-26932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:36:34.054 [DEBUG] [Thread-26932] [transport.py] [_log()] Compression: none
2026-04-15T22:36:34.054 [DEBUG] [Thread-26932] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:36:34.109 [DEBUG] [Thread-26932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:36:34.109 [DEBUG] [Thread-26932] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:36:34.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:36:34.110 [DEBUG] [Thread-26932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:36:34.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:36:34.167 [DEBUG] [Thread-26932] [transport.py] [_log()] userauth is OK
2026-04-15T22:36:34.167 [DEBUG] [Thread-26932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:36:34.167 [DEBUG] [Thread-26932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:36:34.167 [DEBUG] [Thread-26932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:36:34.167 [DEBUG] [Thread-26932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:36:34.193 [INFO] [Thread-26932] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:36:34.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:36:34.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:36:34.582 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:36:34.864 [DEBUG] [Thread-26934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:36:35.015 [DEBUG] [Thread-26932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:36:35.015 [DEBUG] [Thread-26932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:36:35.064 [DEBUG] [Thread-26932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:36:35.064 [DEBUG] [Thread-26932] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:36:35.072 [DEBUG] [Thread-26932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:36:35.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:36:35.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')
2026-04-15T22:36:35.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') -> 00000000
2026-04-15T22:36:35.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:36:35.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:36:35.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:36:35.105 [DEBUG] [Thread-26932] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:36:49.899 [DEBUG] [Thread-26935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:36:54.060 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:36:58.413 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:37:02.699 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:37:02.700 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:37:04.575 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:37:04.925 [DEBUG] [Thread-26936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:37:05.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:37:05.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:37:05.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
2026-04-15T22:37:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 36, 41), 3.02334, 81.2901, 0.0, 13.5864, 8.92703, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:37:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:36:41
2026-04-15T22:37:06.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:37:07.263 [DEBUG] [Thread-26937] [transport.py] [_log()] starting thread (client mode): 0xf13c9180
2026-04-15T22:37:07.264 [DEBUG] [Thread-26937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:37:07.283 [DEBUG] [Thread-26937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:37:07.283 [INFO] [Thread-26937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:37:07.284 [DEBUG] [Thread-26937] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:37:07.284 [DEBUG] [Thread-26937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:37:07.284 [DEBUG] [Thread-26937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:37:07.284 [DEBUG] [Thread-26937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:37:07.285 [DEBUG] [Thread-26937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:37:07.285 [DEBUG] [Thread-26937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:37:07.285 [DEBUG] [Thread-26937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:37:07.285 [DEBUG] [Thread-26937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:37:07.285 [DEBUG] [Thread-26937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:37:07.285 [DEBUG] [Thread-26937] [transport.py] [_log()] client lang: <none>
2026-04-15T22:37:07.285 [DEBUG] [Thread-26937] [transport.py] [_log()] server lang: <none>
2026-04-15T22:37:07.285 [DEBUG] [Thread-26937] [transport.py] [_log()] kex follows: False
2026-04-15T22:37:07.285 [DEBUG] [Thread-26937] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:37:07.285 [DEBUG] [Thread-26937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:37:07.285 [DEBUG] [Thread-26937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:37:07.286 [DEBUG] [Thread-26937] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:37:07.286 [DEBUG] [Thread-26937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:37:07.286 [DEBUG] [Thread-26937] [transport.py] [_log()] Compression: none
2026-04-15T22:37:07.286 [DEBUG] [Thread-26937] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:37:07.298 [DEBUG] [Thread-26937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:37:07.298 [DEBUG] [Thread-26937] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:37:07.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:37:07.299 [DEBUG] [Thread-26937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:37:07.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:37:07.300 [DEBUG] [Thread-26937] [transport.py] [_log()] userauth is OK
2026-04-15T22:37:07.300 [DEBUG] [Thread-26937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:37:07.300 [DEBUG] [Thread-26937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:37:07.300 [DEBUG] [Thread-26937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:37:07.300 [DEBUG] [Thread-26937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:37:07.325 [INFO] [Thread-26937] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:37:07.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:37:07.916 [DEBUG] [Thread-26937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:37:07.917 [DEBUG] [Thread-26937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:37:07.917 [DEBUG] [Thread-26937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:37:07.957 [DEBUG] [Thread-26937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:37:07.957 [DEBUG] [Thread-26937] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:37:07.959 [DEBUG] [Thread-26937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:37:07.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:37:07.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:37:07.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:37:07.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:37:07.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:37:07.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:37:07.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:37:07.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:37:07.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:37:07.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.858810 -999.00   +9.50   6.96     81   +6.40 1 1 1 2 1     0    0 2.41 -25.50 ZNESW 6.0 7.0 91.1 8.9 10.0 -25.1 9.9 -23.9 9.7 -21.9 9.9 -23.9
2026-04-15T22:37:07.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:37:07.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:37:07.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.858810
2026-04-15T22:37:07.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:37:07.977 [DEBUG] [Thread-26937] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:37:07.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:37:07.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:37:07.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:37:07.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:37:07.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:36:41', tmtdew=3.02334, humidity=81.2901, cloud=0.0, wind=13.5864, temperature=8.92703, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:36:41.184', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.011749999999999261, -0.014749999999999375, -0.09550000000000125, -0.03550000000000075, -0.009749999999998593, -0.02450000000000152, -0.018749999999998934, 0.0045000000000001705, -0.03399999999999892, -0.03974999999999973, -0.034000000000000696, -0.006999999999999673, -0.0007500000000000284, -0.009000000000000341, -0.006000000000000227, 0.005250000000000199, -0.03449999999999953, 0.009499999999999176, 0.005249999999998423, 0.00999999999999801, 0.044749999999998735, 0.012250000000001648, 0.011250000000000426, 0.0259999999999998, -0.042500000000000426, -0.015249999999999986, 0.0065000000000008384, 0.04800000000000004, 0.021000000000000796, 0.10400000000000098, 0.014500000000001734, -0.04025000000000034], zp_timestamp='2026-04-15T20:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:37:08.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:37:08.272 [DEBUG] [Thread-26940] [transport.py] [_log()] starting thread (client mode): 0xf13e1db0
2026-04-15T22:37:08.273 [DEBUG] [Thread-26940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:37:08.286 [DEBUG] [Thread-26940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:37:08.287 [INFO] [Thread-26940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:37:08.294 [DEBUG] [Thread-26940] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:37:08.294 [DEBUG] [Thread-26940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:37:08.294 [DEBUG] [Thread-26940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:37:08.294 [DEBUG] [Thread-26940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:37:08.294 [DEBUG] [Thread-26940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:37:08.294 [DEBUG] [Thread-26940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:37:08.294 [DEBUG] [Thread-26940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:37:08.294 [DEBUG] [Thread-26940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:37:08.294 [DEBUG] [Thread-26940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:37:08.294 [DEBUG] [Thread-26940] [transport.py] [_log()] client lang: <none>
2026-04-15T22:37:08.294 [DEBUG] [Thread-26940] [transport.py] [_log()] server lang: <none>
2026-04-15T22:37:08.294 [DEBUG] [Thread-26940] [transport.py] [_log()] kex follows: False
2026-04-15T22:37:08.294 [DEBUG] [Thread-26940] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:37:08.294 [DEBUG] [Thread-26940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:37:08.295 [DEBUG] [Thread-26940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:37:08.295 [DEBUG] [Thread-26940] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:37:08.295 [DEBUG] [Thread-26940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:37:08.295 [DEBUG] [Thread-26940] [transport.py] [_log()] Compression: none
2026-04-15T22:37:08.295 [DEBUG] [Thread-26940] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:37:08.350 [DEBUG] [Thread-26940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:37:08.351 [DEBUG] [Thread-26940] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:37:08.351 [DEBUG] [Thread-26940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:37:08.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:37:08.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:37:08.407 [DEBUG] [Thread-26940] [transport.py] [_log()] userauth is OK
2026-04-15T22:37:08.407 [DEBUG] [Thread-26940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:37:08.407 [DEBUG] [Thread-26940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:37:08.407 [DEBUG] [Thread-26940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:37:08.407 [DEBUG] [Thread-26940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:37:08.425 [INFO] [Thread-26940] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:37:08.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:37:08.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:37:08.938 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:37:09.224 [DEBUG] [Thread-26940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:37:09.224 [DEBUG] [Thread-26940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:37:09.272 [DEBUG] [Thread-26940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:37:09.272 [DEBUG] [Thread-26940] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:37:09.281 [DEBUG] [Thread-26940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:37:09.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:37:09.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')
2026-04-15T22:37:09.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
2026-04-15T22:37:09.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:37:09.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:37:09.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:37:09.316 [DEBUG] [Thread-26940] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:37:19.954 [DEBUG] [Thread-26942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:37:28.193 [DEBUG] [Thread-26943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:37:34.995 [DEBUG] [Thread-26944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:37:39.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:37:39.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:37:39.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
2026-04-15T22:37:40.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 37, 17), 3.51205, 78.6451, 0.0, 10.2874, 9.18015, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:37:40.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:37:17
2026-04-15T22:37:40.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:37:41.404 [DEBUG] [Thread-26945] [transport.py] [_log()] starting thread (client mode): 0xf13e1ba0
2026-04-15T22:37:41.404 [DEBUG] [Thread-26945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:37:41.421 [DEBUG] [Thread-26945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:37:41.421 [INFO] [Thread-26945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:37:41.422 [DEBUG] [Thread-26945] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:37:41.423 [DEBUG] [Thread-26945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:37:41.423 [DEBUG] [Thread-26945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:37:41.423 [DEBUG] [Thread-26945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:37:41.423 [DEBUG] [Thread-26945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:37:41.423 [DEBUG] [Thread-26945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:37:41.423 [DEBUG] [Thread-26945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:37:41.423 [DEBUG] [Thread-26945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:37:41.423 [DEBUG] [Thread-26945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:37:41.423 [DEBUG] [Thread-26945] [transport.py] [_log()] client lang: <none>
2026-04-15T22:37:41.423 [DEBUG] [Thread-26945] [transport.py] [_log()] server lang: <none>
2026-04-15T22:37:41.424 [DEBUG] [Thread-26945] [transport.py] [_log()] kex follows: False
2026-04-15T22:37:41.424 [DEBUG] [Thread-26945] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:37:41.424 [DEBUG] [Thread-26945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:37:41.424 [DEBUG] [Thread-26945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:37:41.424 [DEBUG] [Thread-26945] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:37:41.424 [DEBUG] [Thread-26945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:37:41.424 [DEBUG] [Thread-26945] [transport.py] [_log()] Compression: none
2026-04-15T22:37:41.424 [DEBUG] [Thread-26945] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:37:41.442 [DEBUG] [Thread-26945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:37:41.442 [DEBUG] [Thread-26945] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:37:41.443 [DEBUG] [Thread-26945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:37:41.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:37:41.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:37:41.443 [DEBUG] [Thread-26945] [transport.py] [_log()] userauth is OK
2026-04-15T22:37:41.444 [DEBUG] [Thread-26945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:37:41.444 [DEBUG] [Thread-26945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:37:41.444 [DEBUG] [Thread-26945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:37:41.444 [DEBUG] [Thread-26945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:37:41.462 [INFO] [Thread-26945] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:37:41.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:37:42.067 [DEBUG] [Thread-26945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:37:42.067 [DEBUG] [Thread-26945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:37:42.068 [DEBUG] [Thread-26945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:37:42.108 [DEBUG] [Thread-26945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:37:42.108 [DEBUG] [Thread-26945] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:37:42.111 [DEBUG] [Thread-26945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:37:42.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:37:42.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:37:42.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:37:42.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:37:42.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:37:42.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:37:42.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:37:42.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:37:42.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:37:42.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.859157 -999.00   +9.50   5.98     81   +6.40 1 1 1 2 1     0    0 2.38 -29.14 ZNESW 6.1 6.0 98.7 8.7 10.0 -25.1 9.9 -23.9 9.6 -21.9 9.9 -23.9
2026-04-15T22:37:42.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:37:42.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:37:42.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.859157
2026-04-15T22:37:42.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:37:42.134 [DEBUG] [Thread-26945] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:37:42.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:37:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:37:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:37:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:37:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:37:17', tmtdew=3.51205, humidity=78.6451, cloud=0.0, wind=10.2874, temperature=9.18015, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:37:11.165', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.011749999999999261, -0.014749999999999375, -0.09550000000000125, -0.03550000000000075, -0.009749999999998593, -0.02450000000000152, -0.018749999999998934, 0.0045000000000001705, -0.03399999999999892, -0.03974999999999973, -0.034000000000000696, -0.006999999999999673, -0.0007500000000000284, -0.009000000000000341, -0.006000000000000227, 0.005250000000000199, -0.03449999999999953, 0.009499999999999176, 0.005249999999998423, 0.00999999999999801, 0.044749999999998735, 0.012250000000001648, 0.011250000000000426, 0.0259999999999998, -0.042500000000000426, -0.015249999999999986, 0.0065000000000008384, 0.04800000000000004, 0.021000000000000796, 0.10400000000000098, 0.014500000000001734, -0.04025000000000034], zp_timestamp='2026-04-15T20:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:37:42.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:37:42.391 [DEBUG] [Thread-26948] [transport.py] [_log()] starting thread (client mode): 0xf13e1600
2026-04-15T22:37:42.392 [DEBUG] [Thread-26948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:37:42.406 [DEBUG] [Thread-26948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:37:42.406 [INFO] [Thread-26948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:37:42.413 [DEBUG] [Thread-26948] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:37:42.413 [DEBUG] [Thread-26948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:37:42.413 [DEBUG] [Thread-26948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:37:42.413 [DEBUG] [Thread-26948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:37:42.413 [DEBUG] [Thread-26948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:37:42.414 [DEBUG] [Thread-26948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:37:42.414 [DEBUG] [Thread-26948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:37:42.414 [DEBUG] [Thread-26948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:37:42.414 [DEBUG] [Thread-26948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:37:42.414 [DEBUG] [Thread-26948] [transport.py] [_log()] client lang: <none>
2026-04-15T22:37:42.414 [DEBUG] [Thread-26948] [transport.py] [_log()] server lang: <none>
2026-04-15T22:37:42.414 [DEBUG] [Thread-26948] [transport.py] [_log()] kex follows: False
2026-04-15T22:37:42.414 [DEBUG] [Thread-26948] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:37:42.414 [DEBUG] [Thread-26948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:37:42.414 [DEBUG] [Thread-26948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:37:42.414 [DEBUG] [Thread-26948] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:37:42.415 [DEBUG] [Thread-26948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:37:42.415 [DEBUG] [Thread-26948] [transport.py] [_log()] Compression: none
2026-04-15T22:37:42.415 [DEBUG] [Thread-26948] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:37:42.472 [DEBUG] [Thread-26948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:37:42.472 [DEBUG] [Thread-26948] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:37:42.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:37:42.473 [DEBUG] [Thread-26948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:37:42.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:37:42.529 [DEBUG] [Thread-26948] [transport.py] [_log()] userauth is OK
2026-04-15T22:37:42.529 [DEBUG] [Thread-26948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:37:42.529 [DEBUG] [Thread-26948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:37:42.529 [DEBUG] [Thread-26948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:37:42.530 [DEBUG] [Thread-26948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:37:42.557 [INFO] [Thread-26948] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:37:42.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:37:42.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:37:43.398 [DEBUG] [Thread-26948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:37:43.398 [DEBUG] [Thread-26948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:37:43.446 [DEBUG] [Thread-26948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:37:43.446 [DEBUG] [Thread-26948] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:37:43.455 [DEBUG] [Thread-26948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:37:43.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:37:43.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')
2026-04-15T22:37:43.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
2026-04-15T22:37:43.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:37:43.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:37:43.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:37:43.489 [DEBUG] [Thread-26948] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:37:50.023 [DEBUG] [Thread-26950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:38:02.905 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:38:02.906 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:38:05.066 [DEBUG] [Thread-26951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:38:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:38:13.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:38:13.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
2026-04-15T22:38:14.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 37, 52), 3.02922, 81.2571, 0.0, 13.7981, 8.92718, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:38:14.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:37:52
2026-04-15T22:38:15.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:38:15.743 [DEBUG] [Thread-26952] [transport.py] [_log()] starting thread (client mode): 0xee906d10
2026-04-15T22:38:15.743 [DEBUG] [Thread-26952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:38:15.753 [DEBUG] [Thread-26952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:38:15.753 [INFO] [Thread-26952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:38:15.754 [DEBUG] [Thread-26952] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:38:15.754 [DEBUG] [Thread-26952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:38:15.754 [DEBUG] [Thread-26952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:38:15.754 [DEBUG] [Thread-26952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:38:15.755 [DEBUG] [Thread-26952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:38:15.755 [DEBUG] [Thread-26952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:38:15.755 [DEBUG] [Thread-26952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:38:15.755 [DEBUG] [Thread-26952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:38:15.755 [DEBUG] [Thread-26952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:38:15.755 [DEBUG] [Thread-26952] [transport.py] [_log()] client lang: <none>
2026-04-15T22:38:15.755 [DEBUG] [Thread-26952] [transport.py] [_log()] server lang: <none>
2026-04-15T22:38:15.755 [DEBUG] [Thread-26952] [transport.py] [_log()] kex follows: False
2026-04-15T22:38:15.755 [DEBUG] [Thread-26952] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:38:15.755 [DEBUG] [Thread-26952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:38:15.755 [DEBUG] [Thread-26952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:38:15.755 [DEBUG] [Thread-26952] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:38:15.756 [DEBUG] [Thread-26952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:38:15.756 [DEBUG] [Thread-26952] [transport.py] [_log()] Compression: none
2026-04-15T22:38:15.756 [DEBUG] [Thread-26952] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:38:15.764 [DEBUG] [Thread-26952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:38:15.764 [DEBUG] [Thread-26952] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:38:15.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:38:15.765 [DEBUG] [Thread-26952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:38:15.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:38:15.765 [DEBUG] [Thread-26952] [transport.py] [_log()] userauth is OK
2026-04-15T22:38:15.766 [DEBUG] [Thread-26952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:38:15.766 [DEBUG] [Thread-26952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:38:15.766 [DEBUG] [Thread-26952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:38:15.766 [DEBUG] [Thread-26952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:38:15.781 [INFO] [Thread-26952] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:38:15.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:38:15.983 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:38:16.405 [DEBUG] [Thread-26952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:38:16.405 [DEBUG] [Thread-26952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:38:16.406 [DEBUG] [Thread-26952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:38:16.446 [DEBUG] [Thread-26952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:38:16.447 [DEBUG] [Thread-26952] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:38:16.449 [DEBUG] [Thread-26952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:38:16.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:38:16.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:38:16.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:38:16.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:38:16.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:38:16.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:38:16.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:38:16.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:38:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:38:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.859852 -999.00   +9.50   5.23     81   +6.40 1 1 1 2 1     0    0 2.45 -26.72 ZNESW 7.2 5.2 111.3 9.9 10.0 -25.1 9.9 -23.9 9.6 -21.8 9.9 -23.7
2026-04-15T22:38:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:38:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:38:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.859852
2026-04-15T22:38:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:38:16.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:38:16.460 [DEBUG] [Thread-26952] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:38:16.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:38:16.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:38:16.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:38:16.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:37:52', tmtdew=3.02922, humidity=81.2571, cloud=0.0, wind=13.7981, temperature=8.92718, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:38:11.213', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.011749999999999261, -0.014749999999999375, -0.09550000000000125, -0.03550000000000075, -0.009749999999998593, -0.02450000000000152, -0.018749999999998934, 0.0045000000000001705, -0.03399999999999892, -0.03974999999999973, -0.034000000000000696, -0.006999999999999673, -0.0007500000000000284, -0.009000000000000341, -0.006000000000000227, 0.005250000000000199, -0.03449999999999953, 0.009499999999999176, 0.005249999999998423, 0.00999999999999801, 0.044749999999998735, 0.012250000000001648, 0.011250000000000426, 0.0259999999999998, -0.042500000000000426, -0.015249999999999986, 0.0065000000000008384, 0.04800000000000004, 0.021000000000000796, 0.10400000000000098, 0.014500000000001734, -0.04025000000000034], zp_timestamp='2026-04-15T20:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:38:16.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:38:16.678 [DEBUG] [Thread-26955] [transport.py] [_log()] starting thread (client mode): 0xf13530a0
2026-04-15T22:38:16.678 [DEBUG] [Thread-26955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:38:16.692 [DEBUG] [Thread-26955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:38:16.693 [INFO] [Thread-26955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:38:16.700 [DEBUG] [Thread-26955] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:38:16.700 [DEBUG] [Thread-26955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:38:16.700 [DEBUG] [Thread-26955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:38:16.700 [DEBUG] [Thread-26955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:38:16.700 [DEBUG] [Thread-26955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:38:16.700 [DEBUG] [Thread-26955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:38:16.700 [DEBUG] [Thread-26955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:38:16.701 [DEBUG] [Thread-26955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:38:16.701 [DEBUG] [Thread-26955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:38:16.701 [DEBUG] [Thread-26955] [transport.py] [_log()] client lang: <none>
2026-04-15T22:38:16.701 [DEBUG] [Thread-26955] [transport.py] [_log()] server lang: <none>
2026-04-15T22:38:16.701 [DEBUG] [Thread-26955] [transport.py] [_log()] kex follows: False
2026-04-15T22:38:16.701 [DEBUG] [Thread-26955] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:38:16.701 [DEBUG] [Thread-26955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:38:16.701 [DEBUG] [Thread-26955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:38:16.701 [DEBUG] [Thread-26955] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:38:16.701 [DEBUG] [Thread-26955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:38:16.702 [DEBUG] [Thread-26955] [transport.py] [_log()] Compression: none
2026-04-15T22:38:16.702 [DEBUG] [Thread-26955] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:38:16.757 [DEBUG] [Thread-26955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:38:16.757 [DEBUG] [Thread-26955] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:38:16.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:38:16.758 [DEBUG] [Thread-26955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:38:16.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:38:16.814 [DEBUG] [Thread-26955] [transport.py] [_log()] userauth is OK
2026-04-15T22:38:16.814 [DEBUG] [Thread-26955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:38:16.814 [DEBUG] [Thread-26955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:38:16.815 [DEBUG] [Thread-26955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:38:16.815 [DEBUG] [Thread-26955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:38:16.839 [INFO] [Thread-26955] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:38:16.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:38:16.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:38:17.661 [DEBUG] [Thread-26955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:38:17.661 [DEBUG] [Thread-26955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:38:17.709 [DEBUG] [Thread-26955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:38:17.709 [DEBUG] [Thread-26955] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:38:17.718 [DEBUG] [Thread-26955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:38:17.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:38: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')
2026-04-15T22:38:17.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
2026-04-15T22:38:17.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:38:17.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:38:17.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:38:17.754 [DEBUG] [Thread-26955] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:38:20.096 [DEBUG] [Thread-26957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:38:20.097 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:38:28.344 [DEBUG] [Thread-26958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:38:35.133 [DEBUG] [Thread-26959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:38:47.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:38:47.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:38:47.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
2026-04-15T22:38:49.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 38, 28), 3.56281, 78.6452, 0.0, 10.2521, 9.21336, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:38:49.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:38:28
2026-04-15T22:38:49.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:38:49.921 [DEBUG] [Thread-26960] [transport.py] [_log()] starting thread (client mode): 0xf1366380
2026-04-15T22:38:49.921 [DEBUG] [Thread-26960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:38:49.939 [DEBUG] [Thread-26960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:38:49.939 [INFO] [Thread-26960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:38:49.942 [DEBUG] [Thread-26960] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:38:49.942 [DEBUG] [Thread-26960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:38:49.942 [DEBUG] [Thread-26960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:38:49.942 [DEBUG] [Thread-26960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:38:49.942 [DEBUG] [Thread-26960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:38:49.943 [DEBUG] [Thread-26960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:38:49.943 [DEBUG] [Thread-26960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:38:49.943 [DEBUG] [Thread-26960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:38:49.943 [DEBUG] [Thread-26960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:38:49.943 [DEBUG] [Thread-26960] [transport.py] [_log()] client lang: <none>
2026-04-15T22:38:49.943 [DEBUG] [Thread-26960] [transport.py] [_log()] server lang: <none>
2026-04-15T22:38:49.943 [DEBUG] [Thread-26960] [transport.py] [_log()] kex follows: False
2026-04-15T22:38:49.943 [DEBUG] [Thread-26960] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:38:49.943 [DEBUG] [Thread-26960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:38:49.943 [DEBUG] [Thread-26960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:38:49.943 [DEBUG] [Thread-26960] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:38:49.943 [DEBUG] [Thread-26960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:38:49.944 [DEBUG] [Thread-26960] [transport.py] [_log()] Compression: none
2026-04-15T22:38:49.944 [DEBUG] [Thread-26960] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:38:49.960 [DEBUG] [Thread-26960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:38:49.961 [DEBUG] [Thread-26960] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:38:49.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:38:49.961 [DEBUG] [Thread-26960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:38:49.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:38:49.963 [DEBUG] [Thread-26960] [transport.py] [_log()] userauth is OK
2026-04-15T22:38:49.963 [DEBUG] [Thread-26960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:38:49.963 [DEBUG] [Thread-26960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:38:49.963 [DEBUG] [Thread-26960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:38:49.963 [DEBUG] [Thread-26960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:38:49.987 [INFO] [Thread-26960] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:38:49.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:38:50.161 [DEBUG] [Thread-26962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:38:50.556 [DEBUG] [Thread-26960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:38:50.556 [DEBUG] [Thread-26960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:38:50.557 [DEBUG] [Thread-26960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:38:50.597 [DEBUG] [Thread-26960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:38:50.597 [DEBUG] [Thread-26960] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:38:50.600 [DEBUG] [Thread-26960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:38:50.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:38:50.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:38:50.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:38:50.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:38:50.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:38:50.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:38:50.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:38:50.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:38:50.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:38:50.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.860199 -999.00   +9.50   7.92     81   +6.40 1 1 1 2 1     0    0 2.35 -27.00 ZNESW 6.3 7.9 127.4 9.7 10.0 -25.1 9.9 -23.9 9.6 -21.8 9.9 -23.7
2026-04-15T22:38:50.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:38:50.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:38:50.614 [DEBUG] [Thread-26960] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:38:50.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.860199
2026-04-15T22:38:50.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:38:50.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:38:50.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:38:50.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:38:50.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:38:50.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:38:28', tmtdew=3.56281, humidity=78.6452, cloud=0.0, wind=10.2521, temperature=9.21336, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:38:41.194', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.011749999999999261, -0.014749999999999375, -0.09550000000000125, -0.03550000000000075, -0.009749999999998593, -0.02450000000000152, -0.018749999999998934, 0.0045000000000001705, -0.03399999999999892, -0.03974999999999973, -0.034000000000000696, -0.006999999999999673, -0.0007500000000000284, -0.009000000000000341, -0.006000000000000227, 0.005250000000000199, -0.03449999999999953, 0.009499999999999176, 0.005249999999998423, 0.00999999999999801, 0.044749999999998735, 0.012250000000001648, 0.011250000000000426, 0.0259999999999998, -0.042500000000000426, -0.015249999999999986, 0.0065000000000008384, 0.04800000000000004, 0.021000000000000796, 0.10400000000000098, 0.014500000000001734, -0.04025000000000034], zp_timestamp='2026-04-15T20:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:38:50.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:38:50.861 [DEBUG] [Thread-26964] [transport.py] [_log()] starting thread (client mode): 0xf1367940
2026-04-15T22:38:50.861 [DEBUG] [Thread-26964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:38:50.875 [DEBUG] [Thread-26964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:38:50.875 [INFO] [Thread-26964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:38:50.882 [DEBUG] [Thread-26964] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:38:50.883 [DEBUG] [Thread-26964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:38:50.883 [DEBUG] [Thread-26964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:38:50.883 [DEBUG] [Thread-26964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:38:50.883 [DEBUG] [Thread-26964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:38:50.883 [DEBUG] [Thread-26964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:38:50.883 [DEBUG] [Thread-26964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:38:50.883 [DEBUG] [Thread-26964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:38:50.883 [DEBUG] [Thread-26964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:38:50.883 [DEBUG] [Thread-26964] [transport.py] [_log()] client lang: <none>
2026-04-15T22:38:50.883 [DEBUG] [Thread-26964] [transport.py] [_log()] server lang: <none>
2026-04-15T22:38:50.883 [DEBUG] [Thread-26964] [transport.py] [_log()] kex follows: False
2026-04-15T22:38:50.884 [DEBUG] [Thread-26964] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:38:50.884 [DEBUG] [Thread-26964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:38:50.884 [DEBUG] [Thread-26964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:38:50.884 [DEBUG] [Thread-26964] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:38:50.884 [DEBUG] [Thread-26964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:38:50.884 [DEBUG] [Thread-26964] [transport.py] [_log()] Compression: none
2026-04-15T22:38:50.884 [DEBUG] [Thread-26964] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:38:50.939 [DEBUG] [Thread-26964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:38:50.940 [DEBUG] [Thread-26964] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:38:50.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:38:50.940 [DEBUG] [Thread-26964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:38:50.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:38:51.001 [DEBUG] [Thread-26964] [transport.py] [_log()] userauth is OK
2026-04-15T22:38:51.001 [DEBUG] [Thread-26964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:38:51.001 [DEBUG] [Thread-26964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:38:51.002 [DEBUG] [Thread-26964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:38:51.002 [DEBUG] [Thread-26964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:38:51.030 [INFO] [Thread-26964] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:38:51.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:38:51.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:38:51.819 [DEBUG] [Thread-26964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:38:51.820 [DEBUG] [Thread-26964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:38:51.867 [DEBUG] [Thread-26964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:38:51.867 [DEBUG] [Thread-26964] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:38:51.879 [DEBUG] [Thread-26964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:38:51.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:38:51.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')
2026-04-15T22:38:51.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
2026-04-15T22:38:51.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:38:51.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:38:51.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:38:51.914 [DEBUG] [Thread-26964] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:39:03.106 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:39:03.108 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:39:05.192 [DEBUG] [Thread-26966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:39:20.236 [DEBUG] [Thread-26967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:39:21.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:39:21.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:39:21.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
2026-04-15T22:39:23.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 39, 4), 3.56242, 78.6452, 0.0, 10.3226, 9.19677, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:39:23.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:39:04
2026-04-15T22:39:23.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:39:24.115 [DEBUG] [Thread-26968] [transport.py] [_log()] starting thread (client mode): 0xf1367a60
2026-04-15T22:39:24.115 [DEBUG] [Thread-26968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:39:24.126 [DEBUG] [Thread-26968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:39:24.127 [INFO] [Thread-26968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:39:24.128 [DEBUG] [Thread-26968] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:39:24.128 [DEBUG] [Thread-26968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:39:24.128 [DEBUG] [Thread-26968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:39:24.128 [DEBUG] [Thread-26968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:39:24.128 [DEBUG] [Thread-26968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:39:24.128 [DEBUG] [Thread-26968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:39:24.128 [DEBUG] [Thread-26968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:39:24.128 [DEBUG] [Thread-26968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:39:24.128 [DEBUG] [Thread-26968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:39:24.128 [DEBUG] [Thread-26968] [transport.py] [_log()] client lang: <none>
2026-04-15T22:39:24.128 [DEBUG] [Thread-26968] [transport.py] [_log()] server lang: <none>
2026-04-15T22:39:24.129 [DEBUG] [Thread-26968] [transport.py] [_log()] kex follows: False
2026-04-15T22:39:24.129 [DEBUG] [Thread-26968] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:39:24.129 [DEBUG] [Thread-26968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:39:24.129 [DEBUG] [Thread-26968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:39:24.129 [DEBUG] [Thread-26968] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:39:24.129 [DEBUG] [Thread-26968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:39:24.129 [DEBUG] [Thread-26968] [transport.py] [_log()] Compression: none
2026-04-15T22:39:24.129 [DEBUG] [Thread-26968] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:39:24.139 [DEBUG] [Thread-26968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:39:24.139 [DEBUG] [Thread-26968] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:39:24.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:39:24.140 [DEBUG] [Thread-26968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:39:24.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:39:24.141 [DEBUG] [Thread-26968] [transport.py] [_log()] userauth is OK
2026-04-15T22:39:24.141 [DEBUG] [Thread-26968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:39:24.141 [DEBUG] [Thread-26968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:39:24.141 [DEBUG] [Thread-26968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:39:24.141 [DEBUG] [Thread-26968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:39:24.156 [INFO] [Thread-26968] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:39:24.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:39:24.749 [DEBUG] [Thread-26968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:39:24.749 [DEBUG] [Thread-26968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:39:24.750 [DEBUG] [Thread-26968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:39:24.790 [DEBUG] [Thread-26968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:39:24.790 [DEBUG] [Thread-26968] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:39:24.792 [DEBUG] [Thread-26968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:39:24.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:39:24.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:39:24.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:39:24.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:39:24.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:39:24.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:39:24.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:39:24.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:39:24.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:39:24.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.860546 -999.00   +9.50   9.60     81   +6.40 1 1 1 2 1     0    0 2.46 -25.77 ZNESW 9.5 9.6 114.8 12.2 10.0 -25.1 9.9 -23.9 9.6 -21.7 9.9 -23.7
2026-04-15T22:39:24.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:39:24.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:39:24.809 [DEBUG] [Thread-26968] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:39:24.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.860546
2026-04-15T22:39:24.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:39:24.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:39:24.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:39:24.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:39:24.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:39:24.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:39:04', tmtdew=3.56242, humidity=78.6452, cloud=0.0, wind=10.3226, temperature=9.19677, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:39:11.174', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.011749999999999261, -0.014749999999999375, -0.09550000000000125, -0.03550000000000075, -0.009749999999998593, -0.02450000000000152, -0.018749999999998934, 0.0045000000000001705, -0.03399999999999892, -0.03974999999999973, -0.034000000000000696, -0.006999999999999673, -0.0007500000000000284, -0.009000000000000341, -0.006000000000000227, 0.005250000000000199, -0.03449999999999953, 0.009499999999999176, 0.005249999999998423, 0.00999999999999801, 0.044749999999998735, 0.012250000000001648, 0.011250000000000426, 0.0259999999999998, -0.042500000000000426, -0.015249999999999986, 0.0065000000000008384, 0.04800000000000004, 0.021000000000000796, 0.10400000000000098, 0.014500000000001734, -0.04025000000000034], zp_timestamp='2026-04-15T20:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:39:25.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:39:25.067 [DEBUG] [Thread-26971] [transport.py] [_log()] starting thread (client mode): 0xf1365de0
2026-04-15T22:39:25.067 [DEBUG] [Thread-26971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:39:25.082 [DEBUG] [Thread-26971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:39:25.082 [INFO] [Thread-26971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:39:25.089 [DEBUG] [Thread-26971] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:39:25.089 [DEBUG] [Thread-26971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:39:25.089 [DEBUG] [Thread-26971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:39:25.090 [DEBUG] [Thread-26971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:39:25.090 [DEBUG] [Thread-26971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:39:25.090 [DEBUG] [Thread-26971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:39:25.090 [DEBUG] [Thread-26971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:39:25.090 [DEBUG] [Thread-26971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:39:25.090 [DEBUG] [Thread-26971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:39:25.090 [DEBUG] [Thread-26971] [transport.py] [_log()] client lang: <none>
2026-04-15T22:39:25.090 [DEBUG] [Thread-26971] [transport.py] [_log()] server lang: <none>
2026-04-15T22:39:25.090 [DEBUG] [Thread-26971] [transport.py] [_log()] kex follows: False
2026-04-15T22:39:25.090 [DEBUG] [Thread-26971] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:39:25.090 [DEBUG] [Thread-26971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:39:25.090 [DEBUG] [Thread-26971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:39:25.091 [DEBUG] [Thread-26971] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:39:25.091 [DEBUG] [Thread-26971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:39:25.091 [DEBUG] [Thread-26971] [transport.py] [_log()] Compression: none
2026-04-15T22:39:25.091 [DEBUG] [Thread-26971] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:39:25.153 [DEBUG] [Thread-26971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:39:25.153 [DEBUG] [Thread-26971] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:39:25.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:39:25.154 [DEBUG] [Thread-26971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:39:25.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:39:25.209 [DEBUG] [Thread-26971] [transport.py] [_log()] userauth is OK
2026-04-15T22:39:25.209 [DEBUG] [Thread-26971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:39:25.209 [DEBUG] [Thread-26971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:39:25.209 [DEBUG] [Thread-26971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:39:25.209 [DEBUG] [Thread-26971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:39:25.235 [INFO] [Thread-26971] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:39:25.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:39:25.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:39:26.087 [DEBUG] [Thread-26971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:39:26.087 [DEBUG] [Thread-26971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:39:26.135 [DEBUG] [Thread-26971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:39:26.135 [DEBUG] [Thread-26971] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:39:26.144 [DEBUG] [Thread-26971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:39:26.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:39:26.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')
2026-04-15T22:39:26.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
2026-04-15T22:39:26.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:39:26.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:39:26.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:39:26.188 [DEBUG] [Thread-26971] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:39:28.493 [DEBUG] [Thread-26973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:39:35.266 [DEBUG] [Thread-26974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:39:44.847 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:39:50.307 [DEBUG] [Thread-26975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:39:52.059 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:39:56.145 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:39:56.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:39:56.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:39:56.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
2026-04-15T22:39:57.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 39, 40), 3.04615, 81.1577, 0.0, 13.0219, 8.89405, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:39:57.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:39:40
2026-04-15T22:39:58.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:39:58.478 [DEBUG] [Thread-26976] [transport.py] [_log()] starting thread (client mode): 0xf13e0ca0
2026-04-15T22:39:58.478 [DEBUG] [Thread-26976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:39:58.500 [DEBUG] [Thread-26976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:39:58.500 [INFO] [Thread-26976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:39:58.502 [DEBUG] [Thread-26976] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:39:58.502 [DEBUG] [Thread-26976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:39:58.502 [DEBUG] [Thread-26976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:39:58.502 [DEBUG] [Thread-26976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:39:58.502 [DEBUG] [Thread-26976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:39:58.502 [DEBUG] [Thread-26976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:39:58.502 [DEBUG] [Thread-26976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:39:58.502 [DEBUG] [Thread-26976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:39:58.502 [DEBUG] [Thread-26976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:39:58.502 [DEBUG] [Thread-26976] [transport.py] [_log()] client lang: <none>
2026-04-15T22:39:58.502 [DEBUG] [Thread-26976] [transport.py] [_log()] server lang: <none>
2026-04-15T22:39:58.503 [DEBUG] [Thread-26976] [transport.py] [_log()] kex follows: False
2026-04-15T22:39:58.503 [DEBUG] [Thread-26976] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:39:58.503 [DEBUG] [Thread-26976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:39:58.503 [DEBUG] [Thread-26976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:39:58.503 [DEBUG] [Thread-26976] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:39:58.503 [DEBUG] [Thread-26976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:39:58.503 [DEBUG] [Thread-26976] [transport.py] [_log()] Compression: none
2026-04-15T22:39:58.503 [DEBUG] [Thread-26976] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:39:58.514 [DEBUG] [Thread-26976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:39:58.515 [DEBUG] [Thread-26976] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:39:58.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:39:58.515 [DEBUG] [Thread-26976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:39:58.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:39:58.516 [DEBUG] [Thread-26976] [transport.py] [_log()] userauth is OK
2026-04-15T22:39:58.516 [DEBUG] [Thread-26976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:39:58.516 [DEBUG] [Thread-26976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:39:58.517 [DEBUG] [Thread-26976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:39:58.517 [DEBUG] [Thread-26976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:39:58.541 [INFO] [Thread-26976] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:39:58.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:39:59.149 [DEBUG] [Thread-26976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:39:59.149 [DEBUG] [Thread-26976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:39:59.149 [DEBUG] [Thread-26976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:39:59.189 [DEBUG] [Thread-26976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:39:59.189 [DEBUG] [Thread-26976] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:39:59.191 [DEBUG] [Thread-26976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:39:59.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:39:59.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:39:59.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:39:59.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:39:59.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:39:59.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:39:59.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:39:59.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:39:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:39:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.860893 -999.00   +9.50   9.98     81   +6.40 1 1 1 2 1     0    0 2.39 -24.90 ZNESW 8.3 10.0 121.2 11.3 10.0 -25.2 9.9 -23.8 9.6 -21.7 9.9 -23.8
2026-04-15T22:39:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:39:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:39:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.860893
2026-04-15T22:39:59.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:39:59.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:39:59.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:39:59.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:39:59.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:39:59.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:39:40', tmtdew=3.04615, humidity=81.1577, cloud=0.0, wind=13.0219, temperature=8.89405, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:39:41.155', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.011749999999999261, -0.014749999999999375, -0.09550000000000125, -0.03550000000000075, -0.009749999999998593, -0.02450000000000152, -0.018749999999998934, 0.0045000000000001705, -0.03399999999999892, -0.03974999999999973, -0.034000000000000696, -0.006999999999999673, -0.0007500000000000284, -0.009000000000000341, -0.006000000000000227, 0.005250000000000199, -0.03449999999999953, 0.009499999999999176, 0.005249999999998423, 0.00999999999999801, 0.044749999999998735, 0.012250000000001648, 0.011250000000000426, 0.0259999999999998, -0.042500000000000426, -0.015249999999999986, 0.0065000000000008384, 0.04800000000000004, 0.021000000000000796, 0.10400000000000098, 0.014500000000001734, -0.04025000000000034], zp_timestamp='2026-04-15T20:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:39:59.205 [DEBUG] [Thread-26976] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:39:59.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:39:59.413 [DEBUG] [Thread-26979] [transport.py] [_log()] starting thread (client mode): 0xf13e02e0
2026-04-15T22:39:59.414 [DEBUG] [Thread-26979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:39:59.427 [DEBUG] [Thread-26979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:39:59.427 [INFO] [Thread-26979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:39:59.435 [DEBUG] [Thread-26979] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:39:59.435 [DEBUG] [Thread-26979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:39:59.435 [DEBUG] [Thread-26979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:39:59.435 [DEBUG] [Thread-26979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:39:59.435 [DEBUG] [Thread-26979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:39:59.435 [DEBUG] [Thread-26979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:39:59.435 [DEBUG] [Thread-26979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:39:59.435 [DEBUG] [Thread-26979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:39:59.435 [DEBUG] [Thread-26979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:39:59.435 [DEBUG] [Thread-26979] [transport.py] [_log()] client lang: <none>
2026-04-15T22:39:59.435 [DEBUG] [Thread-26979] [transport.py] [_log()] server lang: <none>
2026-04-15T22:39:59.435 [DEBUG] [Thread-26979] [transport.py] [_log()] kex follows: False
2026-04-15T22:39:59.435 [DEBUG] [Thread-26979] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:39:59.435 [DEBUG] [Thread-26979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:39:59.435 [DEBUG] [Thread-26979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:39:59.436 [DEBUG] [Thread-26979] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:39:59.436 [DEBUG] [Thread-26979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:39:59.436 [DEBUG] [Thread-26979] [transport.py] [_log()] Compression: none
2026-04-15T22:39:59.436 [DEBUG] [Thread-26979] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:39:59.494 [DEBUG] [Thread-26979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:39:59.495 [DEBUG] [Thread-26979] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:39:59.495 [DEBUG] [Thread-26979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:39:59.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:39:59.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:39:59.558 [DEBUG] [Thread-26979] [transport.py] [_log()] userauth is OK
2026-04-15T22:39:59.558 [DEBUG] [Thread-26979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:39:59.558 [DEBUG] [Thread-26979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:39:59.558 [DEBUG] [Thread-26979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:39:59.558 [DEBUG] [Thread-26979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:39:59.577 [INFO] [Thread-26979] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:39:59.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:39:59.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:40:00.444 [DEBUG] [Thread-26979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:40:00.444 [DEBUG] [Thread-26979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:40:00.492 [DEBUG] [Thread-26979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:40:00.492 [DEBUG] [Thread-26979] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:40:00.501 [DEBUG] [Thread-26979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:40:00.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:40:00.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T22:40:00.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') -> 00000000
2026-04-15T22:40:00.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:40:00.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:40:00.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:40:00.536 [DEBUG] [Thread-26979] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:40:03.310 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:40:03.312 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:40:05.337 [DEBUG] [Thread-26981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:40:20.379 [DEBUG] [Thread-26982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:40:28.646 [DEBUG] [Thread-26983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:40:30.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:40:30.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:40:30.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
2026-04-15T22:40:31.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 40, 16), 3.57423, 78.5789, 0.0, 9.91692, 9.19682, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:40:31.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:40:16
2026-04-15T22:40:32.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:40:32.776 [DEBUG] [Thread-26984] [transport.py] [_log()] starting thread (client mode): 0xf13e2ef0
2026-04-15T22:40:32.777 [DEBUG] [Thread-26984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:40:32.796 [DEBUG] [Thread-26984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:40:32.796 [INFO] [Thread-26984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:40:32.799 [DEBUG] [Thread-26984] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:40:32.799 [DEBUG] [Thread-26984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:40:32.799 [DEBUG] [Thread-26984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:40:32.799 [DEBUG] [Thread-26984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:40:32.799 [DEBUG] [Thread-26984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:40:32.799 [DEBUG] [Thread-26984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:40:32.799 [DEBUG] [Thread-26984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:40:32.799 [DEBUG] [Thread-26984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:40:32.799 [DEBUG] [Thread-26984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:40:32.799 [DEBUG] [Thread-26984] [transport.py] [_log()] client lang: <none>
2026-04-15T22:40:32.799 [DEBUG] [Thread-26984] [transport.py] [_log()] server lang: <none>
2026-04-15T22:40:32.799 [DEBUG] [Thread-26984] [transport.py] [_log()] kex follows: False
2026-04-15T22:40:32.800 [DEBUG] [Thread-26984] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:40:32.800 [DEBUG] [Thread-26984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:40:32.800 [DEBUG] [Thread-26984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:40:32.800 [DEBUG] [Thread-26984] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:40:32.800 [DEBUG] [Thread-26984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:40:32.800 [DEBUG] [Thread-26984] [transport.py] [_log()] Compression: none
2026-04-15T22:40:32.800 [DEBUG] [Thread-26984] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:40:32.814 [DEBUG] [Thread-26984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:40:32.814 [DEBUG] [Thread-26984] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:40:32.815 [DEBUG] [Thread-26984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:40:32.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:40:32.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:40:32.816 [DEBUG] [Thread-26984] [transport.py] [_log()] userauth is OK
2026-04-15T22:40:32.816 [DEBUG] [Thread-26984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:40:32.816 [DEBUG] [Thread-26984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:40:32.816 [DEBUG] [Thread-26984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:40:32.816 [DEBUG] [Thread-26984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:40:32.833 [INFO] [Thread-26984] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:40:32.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:40:35.411 [DEBUG] [Thread-26986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:40:36.729 [DEBUG] [Thread-26984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:40:36.729 [DEBUG] [Thread-26984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:40:36.730 [DEBUG] [Thread-26984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:40:36.770 [DEBUG] [Thread-26984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:40:36.770 [DEBUG] [Thread-26984] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:40:36.773 [DEBUG] [Thread-26984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:40:36.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:40:36.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:40:36.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:40:36.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:40:36.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:40:36.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:40:36.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:40:36.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:40:36.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:40:36.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.860893 -999.00   +9.50   9.98     81   +6.40 1 1 1 2 1     0    0 2.39 -24.90 ZNESW 8.3 10.0 121.2 11.3 10.0 -25.2 9.9 -23.8 9.6 -21.7 9.9 -23.8
2026-04-15T22:40:36.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:40:36.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:40:36.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.860893
2026-04-15T22:40:36.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:40:36.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:40:36.823 [DEBUG] [Thread-26984] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:40:36.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:40:36.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:40:36.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:40:36.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:40:16', tmtdew=3.57423, humidity=78.5789, cloud=0.0, wind=9.91692, temperature=9.19682, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:39:41.155', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.011749999999999261, -0.014749999999999375, -0.09550000000000125, -0.03550000000000075, -0.009749999999998593, -0.02450000000000152, -0.018749999999998934, 0.0045000000000001705, -0.03399999999999892, -0.03974999999999973, -0.034000000000000696, -0.006999999999999673, -0.0007500000000000284, -0.009000000000000341, -0.006000000000000227, 0.005250000000000199, -0.03449999999999953, 0.009499999999999176, 0.005249999999998423, 0.00999999999999801, 0.044749999999998735, 0.012250000000001648, 0.011250000000000426, 0.0259999999999998, -0.042500000000000426, -0.015249999999999986, 0.0065000000000008384, 0.04800000000000004, 0.021000000000000796, 0.10400000000000098, 0.014500000000001734, -0.04025000000000034], zp_timestamp='2026-04-15T20:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:40:37.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:40:37.065 [DEBUG] [Thread-26988] [transport.py] [_log()] starting thread (client mode): 0xee905b40
2026-04-15T22:40:37.065 [DEBUG] [Thread-26988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:40:37.082 [DEBUG] [Thread-26988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:40:37.083 [INFO] [Thread-26988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:40:37.091 [DEBUG] [Thread-26988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:40:37.091 [DEBUG] [Thread-26988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:40:37.091 [DEBUG] [Thread-26988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:40:37.091 [DEBUG] [Thread-26988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:40:37.091 [DEBUG] [Thread-26988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:40:37.091 [DEBUG] [Thread-26988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:40:37.091 [DEBUG] [Thread-26988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:40:37.091 [DEBUG] [Thread-26988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:40:37.091 [DEBUG] [Thread-26988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:40:37.091 [DEBUG] [Thread-26988] [transport.py] [_log()] client lang: <none>
2026-04-15T22:40:37.092 [DEBUG] [Thread-26988] [transport.py] [_log()] server lang: <none>
2026-04-15T22:40:37.092 [DEBUG] [Thread-26988] [transport.py] [_log()] kex follows: False
2026-04-15T22:40:37.092 [DEBUG] [Thread-26988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:40:37.092 [DEBUG] [Thread-26988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:40:37.092 [DEBUG] [Thread-26988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:40:37.092 [DEBUG] [Thread-26988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:40:37.092 [DEBUG] [Thread-26988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:40:37.092 [DEBUG] [Thread-26988] [transport.py] [_log()] Compression: none
2026-04-15T22:40:37.092 [DEBUG] [Thread-26988] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:40:37.147 [DEBUG] [Thread-26988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:40:37.147 [DEBUG] [Thread-26988] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:40:37.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:40:37.148 [DEBUG] [Thread-26988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:40:37.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:40:37.204 [DEBUG] [Thread-26988] [transport.py] [_log()] userauth is OK
2026-04-15T22:40:37.204 [DEBUG] [Thread-26988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:40:37.204 [DEBUG] [Thread-26988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:40:37.204 [DEBUG] [Thread-26988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:40:37.205 [DEBUG] [Thread-26988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:40:37.233 [INFO] [Thread-26988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:40:37.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:40:37.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:40:38.099 [DEBUG] [Thread-26988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:40:38.099 [DEBUG] [Thread-26988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:40:38.147 [DEBUG] [Thread-26988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:40:38.147 [DEBUG] [Thread-26988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:40:38.156 [DEBUG] [Thread-26988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:40:38.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:40:38.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')
2026-04-15T22:40:38.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') -> 00000000
2026-04-15T22:40:38.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:40:38.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:40:38.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:40:38.191 [DEBUG] [Thread-26988] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:40:50.441 [DEBUG] [Thread-26990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:41:03.510 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:41:03.511 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:41:05.484 [DEBUG] [Thread-26991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:41:08.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:41:08.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:41:08.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
2026-04-15T22:41:09.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 40, 51), 3.06698, 81.0582, 0.0, 11.5402, 9.02682, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:41:09.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:40:51
2026-04-15T22:41:09.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:41:10.336 [DEBUG] [Thread-26992] [transport.py] [_log()] starting thread (client mode): 0xee993460
2026-04-15T22:41:10.336 [DEBUG] [Thread-26992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:41:10.356 [DEBUG] [Thread-26992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:41:10.356 [INFO] [Thread-26992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:41:10.359 [DEBUG] [Thread-26992] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:41:10.359 [DEBUG] [Thread-26992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:41:10.359 [DEBUG] [Thread-26992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:41:10.359 [DEBUG] [Thread-26992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:41:10.359 [DEBUG] [Thread-26992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:41:10.359 [DEBUG] [Thread-26992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:41:10.359 [DEBUG] [Thread-26992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:41:10.359 [DEBUG] [Thread-26992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:41:10.359 [DEBUG] [Thread-26992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:41:10.360 [DEBUG] [Thread-26992] [transport.py] [_log()] client lang: <none>
2026-04-15T22:41:10.360 [DEBUG] [Thread-26992] [transport.py] [_log()] server lang: <none>
2026-04-15T22:41:10.360 [DEBUG] [Thread-26992] [transport.py] [_log()] kex follows: False
2026-04-15T22:41:10.360 [DEBUG] [Thread-26992] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:41:10.360 [DEBUG] [Thread-26992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:41:10.360 [DEBUG] [Thread-26992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:41:10.360 [DEBUG] [Thread-26992] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:41:10.360 [DEBUG] [Thread-26992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:41:10.360 [DEBUG] [Thread-26992] [transport.py] [_log()] Compression: none
2026-04-15T22:41:10.360 [DEBUG] [Thread-26992] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:41:10.379 [DEBUG] [Thread-26992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:41:10.379 [DEBUG] [Thread-26992] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:41:10.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:41:10.380 [DEBUG] [Thread-26992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:41:10.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:41:10.381 [DEBUG] [Thread-26992] [transport.py] [_log()] userauth is OK
2026-04-15T22:41:10.381 [DEBUG] [Thread-26992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:41:10.381 [DEBUG] [Thread-26992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:41:10.381 [DEBUG] [Thread-26992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:41:10.381 [DEBUG] [Thread-26992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:41:10.402 [INFO] [Thread-26992] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:41:10.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:41:11.216 [DEBUG] [Thread-26992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:41:11.217 [DEBUG] [Thread-26992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:41:11.217 [DEBUG] [Thread-26992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:41:11.257 [DEBUG] [Thread-26992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:41:11.257 [DEBUG] [Thread-26992] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:41:11.259 [DEBUG] [Thread-26992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:41:11.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:41:11.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:41:11.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:41:11.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:41:11.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:41:11.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:41:11.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:41:11.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:41:11.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:41:11.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.861241 -999.00   +9.50   9.27     81   +6.50 1 1 1 2 1     0    0 2.46 -21.01 ZNESW 8.9 9.3 109.4 11.3 10.0 -25.1 9.9 -23.9 9.6 -21.8 9.9 -23.8
2026-04-15T22:41:11.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:41:11.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:41:11.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.861241
2026-04-15T22:41:11.283 [DEBUG] [Thread-26992] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:41:11.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:41:11.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:41:11.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:41:11.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:41:11.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:41:11.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:40:51', tmtdew=3.06698, humidity=81.0582, cloud=0.0, wind=11.5402, temperature=9.02682, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:40:11.222', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.011749999999999261, -0.014749999999999375, -0.09550000000000125, -0.03550000000000075, -0.009749999999998593, -0.02450000000000152, -0.018749999999998934, 0.0045000000000001705, -0.03399999999999892, -0.03974999999999973, -0.034000000000000696, -0.006999999999999673, -0.0007500000000000284, -0.009000000000000341, -0.006000000000000227, 0.005250000000000199, -0.03449999999999953, 0.009499999999999176, 0.005249999999998423, 0.00999999999999801, 0.044749999999998735, 0.012250000000001648, 0.011250000000000426, 0.0259999999999998, -0.042500000000000426, -0.015249999999999986, 0.0065000000000008384, 0.04800000000000004, 0.021000000000000796, 0.10400000000000098, 0.014500000000001734, -0.04025000000000034], zp_timestamp='2026-04-15T20:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:41:11.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:41:11.549 [DEBUG] [Thread-26995] [transport.py] [_log()] starting thread (client mode): 0xf1350f10
2026-04-15T22:41:11.549 [DEBUG] [Thread-26995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:41:11.564 [DEBUG] [Thread-26995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:41:11.564 [INFO] [Thread-26995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:41:11.571 [DEBUG] [Thread-26995] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:41:11.571 [DEBUG] [Thread-26995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:41:11.571 [DEBUG] [Thread-26995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:41:11.571 [DEBUG] [Thread-26995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:41:11.571 [DEBUG] [Thread-26995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:41:11.571 [DEBUG] [Thread-26995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:41:11.571 [DEBUG] [Thread-26995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:41:11.572 [DEBUG] [Thread-26995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:41:11.572 [DEBUG] [Thread-26995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:41:11.572 [DEBUG] [Thread-26995] [transport.py] [_log()] client lang: <none>
2026-04-15T22:41:11.572 [DEBUG] [Thread-26995] [transport.py] [_log()] server lang: <none>
2026-04-15T22:41:11.572 [DEBUG] [Thread-26995] [transport.py] [_log()] kex follows: False
2026-04-15T22:41:11.572 [DEBUG] [Thread-26995] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:41:11.572 [DEBUG] [Thread-26995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:41:11.572 [DEBUG] [Thread-26995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:41:11.572 [DEBUG] [Thread-26995] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:41:11.572 [DEBUG] [Thread-26995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:41:11.572 [DEBUG] [Thread-26995] [transport.py] [_log()] Compression: none
2026-04-15T22:41:11.572 [DEBUG] [Thread-26995] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:41:11.628 [DEBUG] [Thread-26995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:41:11.629 [DEBUG] [Thread-26995] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:41:11.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:41:11.629 [DEBUG] [Thread-26995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:41:11.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:41:11.685 [DEBUG] [Thread-26995] [transport.py] [_log()] userauth is OK
2026-04-15T22:41:11.685 [DEBUG] [Thread-26995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:41:11.685 [DEBUG] [Thread-26995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:41:11.686 [DEBUG] [Thread-26995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:41:11.686 [DEBUG] [Thread-26995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:41:11.711 [INFO] [Thread-26995] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:41:11.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:41:11.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:41:12.556 [DEBUG] [Thread-26995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:41:12.556 [DEBUG] [Thread-26995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:41:12.604 [DEBUG] [Thread-26995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:41:12.604 [DEBUG] [Thread-26995] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:41:12.613 [DEBUG] [Thread-26995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:41:12.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:41:12.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')
2026-04-15T22:41:12.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
2026-04-15T22:41:12.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:41:12.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:41:12.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:41:12.648 [DEBUG] [Thread-26995] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:41:18.687 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:41:20.515 [DEBUG] [Thread-26997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:41:27.565 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:41:28.792 [DEBUG] [Thread-26998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:41:31.725 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:41:35.560 [DEBUG] [Thread-26999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:41:42.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:41:42.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:41:42.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
2026-04-15T22:41:43.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 41, 27), 3.54355, 78.4793, 0.0, 9.65232, 9.16319, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:41:43.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:41:27
2026-04-15T22:41:44.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:41:44.843 [DEBUG] [Thread-27000] [transport.py] [_log()] starting thread (client mode): 0xf1364e50
2026-04-15T22:41:44.843 [DEBUG] [Thread-27000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:41:44.863 [DEBUG] [Thread-27000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:41:44.863 [INFO] [Thread-27000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:41:44.866 [DEBUG] [Thread-27000] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:41:44.866 [DEBUG] [Thread-27000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:41:44.867 [DEBUG] [Thread-27000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:41:44.867 [DEBUG] [Thread-27000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:41:44.867 [DEBUG] [Thread-27000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:41:44.867 [DEBUG] [Thread-27000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:41:44.867 [DEBUG] [Thread-27000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:41:44.867 [DEBUG] [Thread-27000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:41:44.867 [DEBUG] [Thread-27000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:41:44.867 [DEBUG] [Thread-27000] [transport.py] [_log()] client lang: <none>
2026-04-15T22:41:44.867 [DEBUG] [Thread-27000] [transport.py] [_log()] server lang: <none>
2026-04-15T22:41:44.867 [DEBUG] [Thread-27000] [transport.py] [_log()] kex follows: False
2026-04-15T22:41:44.867 [DEBUG] [Thread-27000] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:41:44.867 [DEBUG] [Thread-27000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:41:44.868 [DEBUG] [Thread-27000] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:41:44.868 [DEBUG] [Thread-27000] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:41:44.868 [DEBUG] [Thread-27000] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:41:44.868 [DEBUG] [Thread-27000] [transport.py] [_log()] Compression: none
2026-04-15T22:41:44.868 [DEBUG] [Thread-27000] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:41:44.884 [DEBUG] [Thread-27000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:41:44.884 [DEBUG] [Thread-27000] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:41:44.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:41:44.885 [DEBUG] [Thread-27000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:41:44.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:41:44.928 [DEBUG] [Thread-27000] [transport.py] [_log()] userauth is OK
2026-04-15T22:41:44.929 [DEBUG] [Thread-27000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:41:44.929 [DEBUG] [Thread-27000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:41:44.929 [DEBUG] [Thread-27000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:41:44.929 [DEBUG] [Thread-27000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:41:44.955 [INFO] [Thread-27000] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:41:44.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:41:45.755 [DEBUG] [Thread-27000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:41:45.755 [DEBUG] [Thread-27000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:41:45.756 [DEBUG] [Thread-27000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:41:45.796 [DEBUG] [Thread-27000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:41:45.796 [DEBUG] [Thread-27000] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:41:45.798 [DEBUG] [Thread-27000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:41:45.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:41:45.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:41:45.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:41:45.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:41:45.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:41:45.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:41:45.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:41:45.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:41:45.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:41:45.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.861588 -999.00   +9.40   8.84     81   +6.40 1 1 1 2 1     0    0 2.55 -20.81 ZNESW 7.5 8.8 113.8 10.1 10.0 -25.2 9.9 -23.8 9.6 -21.8 9.9 -23.9
2026-04-15T22:41:45.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:41:45.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:41:45.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.861588
2026-04-15T22:41:45.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:41:45.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:41:45.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:41:45.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:41:45.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:41:45.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:41:27', tmtdew=3.54355, humidity=78.4793, cloud=0.0, wind=9.65232, temperature=9.16319, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:40:41.203', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.011749999999999261, -0.014749999999999375, -0.09550000000000125, -0.03550000000000075, -0.009749999999998593, -0.02450000000000152, -0.018749999999998934, 0.0045000000000001705, -0.03399999999999892, -0.03974999999999973, -0.034000000000000696, -0.006999999999999673, -0.0007500000000000284, -0.009000000000000341, -0.006000000000000227, 0.005250000000000199, -0.03449999999999953, 0.009499999999999176, 0.005249999999998423, 0.00999999999999801, 0.044749999999998735, 0.012250000000001648, 0.011250000000000426, 0.0259999999999998, -0.042500000000000426, -0.015249999999999986, 0.0065000000000008384, 0.04800000000000004, 0.021000000000000796, 0.10400000000000098, 0.014500000000001734, -0.04025000000000034], zp_timestamp='2026-04-15T20:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:41:45.817 [DEBUG] [Thread-27000] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:41:46.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:41:46.027 [DEBUG] [Thread-27003] [transport.py] [_log()] starting thread (client mode): 0xee992b90
2026-04-15T22:41:46.027 [DEBUG] [Thread-27003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:41:46.041 [DEBUG] [Thread-27003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:41:46.041 [INFO] [Thread-27003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:41:46.049 [DEBUG] [Thread-27003] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:41:46.049 [DEBUG] [Thread-27003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:41:46.049 [DEBUG] [Thread-27003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:41:46.049 [DEBUG] [Thread-27003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:41:46.049 [DEBUG] [Thread-27003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:41:46.049 [DEBUG] [Thread-27003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:41:46.049 [DEBUG] [Thread-27003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:41:46.049 [DEBUG] [Thread-27003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:41:46.049 [DEBUG] [Thread-27003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:41:46.049 [DEBUG] [Thread-27003] [transport.py] [_log()] client lang: <none>
2026-04-15T22:41:46.049 [DEBUG] [Thread-27003] [transport.py] [_log()] server lang: <none>
2026-04-15T22:41:46.050 [DEBUG] [Thread-27003] [transport.py] [_log()] kex follows: False
2026-04-15T22:41:46.050 [DEBUG] [Thread-27003] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:41:46.050 [DEBUG] [Thread-27003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:41:46.050 [DEBUG] [Thread-27003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:41:46.050 [DEBUG] [Thread-27003] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:41:46.050 [DEBUG] [Thread-27003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:41:46.050 [DEBUG] [Thread-27003] [transport.py] [_log()] Compression: none
2026-04-15T22:41:46.050 [DEBUG] [Thread-27003] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:41:46.104 [DEBUG] [Thread-27003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:41:46.105 [DEBUG] [Thread-27003] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:41:46.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:41:46.105 [DEBUG] [Thread-27003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:41:46.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:41:46.161 [DEBUG] [Thread-27003] [transport.py] [_log()] userauth is OK
2026-04-15T22:41:46.162 [DEBUG] [Thread-27003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:41:46.162 [DEBUG] [Thread-27003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:41:46.162 [DEBUG] [Thread-27003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:41:46.162 [DEBUG] [Thread-27003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:41:46.187 [INFO] [Thread-27003] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:41:46.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:41:46.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:41:47.035 [DEBUG] [Thread-27003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:41:47.036 [DEBUG] [Thread-27003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:41:47.083 [DEBUG] [Thread-27003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:41:47.083 [DEBUG] [Thread-27003] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:41:47.092 [DEBUG] [Thread-27003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:41:47.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:41:47.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')
2026-04-15T22:41:47.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
2026-04-15T22:41:47.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:41:47.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:41:47.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:41:47.127 [DEBUG] [Thread-27003] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:41:50.591 [DEBUG] [Thread-27005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:42:03.710 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:42:03.712 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:42:05.638 [DEBUG] [Thread-27006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:42:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:42:17.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:42:17.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T22:42:18.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 42, 2), 3.5487, 78.4462, 0.0, 9.74052, 9.13002, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:42:18.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:42:02
2026-04-15T22:42:18.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:42:19.344 [DEBUG] [Thread-27007] [transport.py] [_log()] starting thread (client mode): 0xee905060
2026-04-15T22:42:19.344 [DEBUG] [Thread-27007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:42:19.364 [DEBUG] [Thread-27007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:42:19.364 [INFO] [Thread-27007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:42:19.368 [DEBUG] [Thread-27007] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:42:19.368 [DEBUG] [Thread-27007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:42:19.368 [DEBUG] [Thread-27007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:42:19.368 [DEBUG] [Thread-27007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:42:19.368 [DEBUG] [Thread-27007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:42:19.368 [DEBUG] [Thread-27007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:42:19.368 [DEBUG] [Thread-27007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:42:19.368 [DEBUG] [Thread-27007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:42:19.368 [DEBUG] [Thread-27007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:42:19.368 [DEBUG] [Thread-27007] [transport.py] [_log()] client lang: <none>
2026-04-15T22:42:19.369 [DEBUG] [Thread-27007] [transport.py] [_log()] server lang: <none>
2026-04-15T22:42:19.369 [DEBUG] [Thread-27007] [transport.py] [_log()] kex follows: False
2026-04-15T22:42:19.369 [DEBUG] [Thread-27007] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:42:19.369 [DEBUG] [Thread-27007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:42:19.369 [DEBUG] [Thread-27007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:42:19.369 [DEBUG] [Thread-27007] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:42:19.369 [DEBUG] [Thread-27007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:42:19.369 [DEBUG] [Thread-27007] [transport.py] [_log()] Compression: none
2026-04-15T22:42:19.369 [DEBUG] [Thread-27007] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:42:19.385 [DEBUG] [Thread-27007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:42:19.385 [DEBUG] [Thread-27007] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:42:19.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:42:19.386 [DEBUG] [Thread-27007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:42:19.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:42:19.387 [DEBUG] [Thread-27007] [transport.py] [_log()] userauth is OK
2026-04-15T22:42:19.387 [DEBUG] [Thread-27007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:42:19.387 [DEBUG] [Thread-27007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:42:19.387 [DEBUG] [Thread-27007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:42:19.387 [DEBUG] [Thread-27007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:42:19.428 [INFO] [Thread-27007] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:42:19.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:42:20.220 [DEBUG] [Thread-27007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:42:20.220 [DEBUG] [Thread-27007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:42:20.221 [DEBUG] [Thread-27007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:42:20.261 [DEBUG] [Thread-27007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:42:20.261 [DEBUG] [Thread-27007] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:42:20.264 [DEBUG] [Thread-27007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:42:20.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:42:20.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:42:20.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:42:20.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:42:20.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:42:20.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:42:20.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:42:20.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:42:20.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:42:20.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.862282 -999.00   +9.30   7.26     82   +6.40 1 1 1 2 1     0    0 2.45 -20.63 ZNESW 7.3 7.3 112.2 8.6 9.9 -25.1 9.8 -23.9 9.6 -21.8 9.8 -23.9
2026-04-15T22:42:20.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:42:20.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:42:20.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.862282
2026-04-15T22:42:20.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:42:20.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:42:20.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:42:20.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:42:20.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:42:20.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:42:02', tmtdew=3.5487, humidity=78.4462, cloud=0.0, wind=9.74052, temperature=9.13002, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:41:41.165', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.007749999999999702, -0.019750000000000156, -0.1305000000000014, -0.019999999999999574, -0.02874999999999872, 0.0030000000000001137, -0.04875000000000007, 0.00849999999999973, -0.03500000000000014, -0.035250000000001336, -0.051000000000000156, -0.025000000000000355, 0.0182500000000001, 0.006999999999999673, 0.019000000000000128, 0.019249999999999545, -0.04449999999999932, 0.0030000000000001137, 0.0012499999999988631, 0.013999999999999346, 0.040749999999999176, 0.017250000000000654, 0.03974999999999973, 0.026999999999999247, -0.04300000000000104, -0.00975000000000037, 0.01950000000000074, 0.025500000000000966, 0.045000000000001705, 0.06300000000000061, 0.014000000000001123, -0.06425000000000125], zp_timestamp='2026-04-15T20:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:42:20.288 [DEBUG] [Thread-27007] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:42:20.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:42:20.542 [DEBUG] [Thread-27010] [transport.py] [_log()] starting thread (client mode): 0xf1337b80
2026-04-15T22:42:20.543 [DEBUG] [Thread-27010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:42:20.557 [DEBUG] [Thread-27010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:42:20.557 [INFO] [Thread-27010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:42:20.565 [DEBUG] [Thread-27010] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:42:20.565 [DEBUG] [Thread-27010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:42:20.565 [DEBUG] [Thread-27010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:42:20.565 [DEBUG] [Thread-27010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:42:20.565 [DEBUG] [Thread-27010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:42:20.565 [DEBUG] [Thread-27010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:42:20.565 [DEBUG] [Thread-27010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:42:20.565 [DEBUG] [Thread-27010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:42:20.565 [DEBUG] [Thread-27010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:42:20.565 [DEBUG] [Thread-27010] [transport.py] [_log()] client lang: <none>
2026-04-15T22:42:20.565 [DEBUG] [Thread-27010] [transport.py] [_log()] server lang: <none>
2026-04-15T22:42:20.565 [DEBUG] [Thread-27010] [transport.py] [_log()] kex follows: False
2026-04-15T22:42:20.565 [DEBUG] [Thread-27010] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:42:20.565 [DEBUG] [Thread-27010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:42:20.565 [DEBUG] [Thread-27010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:42:20.566 [DEBUG] [Thread-27010] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:42:20.566 [DEBUG] [Thread-27010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:42:20.566 [DEBUG] [Thread-27010] [transport.py] [_log()] Compression: none
2026-04-15T22:42:20.566 [DEBUG] [Thread-27010] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:42:20.625 [DEBUG] [Thread-27010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:42:20.625 [DEBUG] [Thread-27010] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:42:20.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:42:20.626 [DEBUG] [Thread-27010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:42:20.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:42:20.667 [DEBUG] [Thread-27012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:42:20.682 [DEBUG] [Thread-27010] [transport.py] [_log()] userauth is OK
2026-04-15T22:42:20.682 [DEBUG] [Thread-27010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:42:20.682 [DEBUG] [Thread-27010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:42:20.682 [DEBUG] [Thread-27010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:42:20.682 [DEBUG] [Thread-27010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:42:20.699 [INFO] [Thread-27010] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:42:20.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:42:20.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:42:21.517 [DEBUG] [Thread-27010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:42:21.518 [DEBUG] [Thread-27010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:42:21.570 [DEBUG] [Thread-27010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:42:21.570 [DEBUG] [Thread-27010] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:42:21.578 [DEBUG] [Thread-27010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:42:21.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:42:21.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')
2026-04-15T22:42:21.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
2026-04-15T22:42:21.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:42:21.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:42:21.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:42:21.610 [DEBUG] [Thread-27010] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:42:28.958 [DEBUG] [Thread-27013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:42:35.704 [DEBUG] [Thread-27014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:42:50.732 [DEBUG] [Thread-27015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:42:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:42:51.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:42:51.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
2026-04-15T22:42:52.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 42, 38), 3.10253, 80.8592, 0.0, 12.9161, 9.02688, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:42:52.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:42:38
2026-04-15T22:42:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:42:53.751 [DEBUG] [Thread-27016] [transport.py] [_log()] starting thread (client mode): 0xee9040a0
2026-04-15T22:42:53.752 [DEBUG] [Thread-27016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:42:53.771 [DEBUG] [Thread-27016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:42:53.771 [INFO] [Thread-27016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:42:53.774 [DEBUG] [Thread-27016] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:42:53.774 [DEBUG] [Thread-27016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:42:53.774 [DEBUG] [Thread-27016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:42:53.774 [DEBUG] [Thread-27016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:42:53.775 [DEBUG] [Thread-27016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:42:53.775 [DEBUG] [Thread-27016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:42:53.775 [DEBUG] [Thread-27016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:42:53.775 [DEBUG] [Thread-27016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:42:53.775 [DEBUG] [Thread-27016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:42:53.775 [DEBUG] [Thread-27016] [transport.py] [_log()] client lang: <none>
2026-04-15T22:42:53.775 [DEBUG] [Thread-27016] [transport.py] [_log()] server lang: <none>
2026-04-15T22:42:53.775 [DEBUG] [Thread-27016] [transport.py] [_log()] kex follows: False
2026-04-15T22:42:53.775 [DEBUG] [Thread-27016] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:42:53.775 [DEBUG] [Thread-27016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:42:53.775 [DEBUG] [Thread-27016] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:42:53.775 [DEBUG] [Thread-27016] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:42:53.775 [DEBUG] [Thread-27016] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:42:53.776 [DEBUG] [Thread-27016] [transport.py] [_log()] Compression: none
2026-04-15T22:42:53.776 [DEBUG] [Thread-27016] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:42:53.791 [DEBUG] [Thread-27016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:42:53.791 [DEBUG] [Thread-27016] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:42:53.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:42:53.792 [DEBUG] [Thread-27016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:42:53.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:42:53.832 [DEBUG] [Thread-27016] [transport.py] [_log()] userauth is OK
2026-04-15T22:42:53.833 [DEBUG] [Thread-27016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:42:53.833 [DEBUG] [Thread-27016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:42:53.833 [DEBUG] [Thread-27016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:42:53.833 [DEBUG] [Thread-27016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:42:53.860 [INFO] [Thread-27016] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:42:53.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:42:54.357 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:42:54.637 [DEBUG] [Thread-27016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:42:54.637 [DEBUG] [Thread-27016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:42:54.637 [DEBUG] [Thread-27016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:42:54.678 [DEBUG] [Thread-27016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:42:54.678 [DEBUG] [Thread-27016] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:42:54.681 [DEBUG] [Thread-27016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:42:54.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:42:54.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:42:54.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:42:54.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:42:54.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:42:54.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:42:54.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:42:54.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:42:54.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:42:54.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.862630 -999.00   +9.20   8.35     82   +6.40 1 1 1 2 1     0    0 2.56 -19.14 ZNESW 8.5 8.3 113.2 8.9 9.9 -25.1 9.8 -23.9 9.6 -21.7 9.8 -23.8
2026-04-15T22:42:54.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:42:54.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:42:54.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.862630
2026-04-15T22:42:54.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:42:54.705 [DEBUG] [Thread-27016] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:42:54.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:42:54.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:42:54.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:42:54.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:42:54.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:42:38', tmtdew=3.10253, humidity=80.8592, cloud=0.0, wind=12.9161, temperature=9.02688, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:42:11.232', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.007749999999999702, -0.019750000000000156, -0.1305000000000014, -0.019999999999999574, -0.02874999999999872, 0.0030000000000001137, -0.04875000000000007, 0.00849999999999973, -0.03500000000000014, -0.035250000000001336, -0.051000000000000156, -0.025000000000000355, 0.0182500000000001, 0.006999999999999673, 0.019000000000000128, 0.019249999999999545, -0.04449999999999932, 0.0030000000000001137, 0.0012499999999988631, 0.013999999999999346, 0.040749999999999176, 0.017250000000000654, 0.03974999999999973, 0.026999999999999247, -0.04300000000000104, -0.00975000000000037, 0.01950000000000074, 0.025500000000000966, 0.045000000000001705, 0.06300000000000061, 0.014000000000001123, -0.06425000000000125], zp_timestamp='2026-04-15T20:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:42:54.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:42:54.940 [DEBUG] [Thread-27019] [transport.py] [_log()] starting thread (client mode): 0xee9066b0
2026-04-15T22:42:54.940 [DEBUG] [Thread-27019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:42:54.954 [DEBUG] [Thread-27019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:42:54.954 [INFO] [Thread-27019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:42:54.962 [DEBUG] [Thread-27019] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:42:54.962 [DEBUG] [Thread-27019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:42:54.962 [DEBUG] [Thread-27019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:42:54.962 [DEBUG] [Thread-27019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:42:54.962 [DEBUG] [Thread-27019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:42:54.962 [DEBUG] [Thread-27019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:42:54.962 [DEBUG] [Thread-27019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:42:54.962 [DEBUG] [Thread-27019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:42:54.962 [DEBUG] [Thread-27019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:42:54.962 [DEBUG] [Thread-27019] [transport.py] [_log()] client lang: <none>
2026-04-15T22:42:54.963 [DEBUG] [Thread-27019] [transport.py] [_log()] server lang: <none>
2026-04-15T22:42:54.963 [DEBUG] [Thread-27019] [transport.py] [_log()] kex follows: False
2026-04-15T22:42:54.963 [DEBUG] [Thread-27019] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:42:54.963 [DEBUG] [Thread-27019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:42:54.963 [DEBUG] [Thread-27019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:42:54.963 [DEBUG] [Thread-27019] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:42:54.963 [DEBUG] [Thread-27019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:42:54.963 [DEBUG] [Thread-27019] [transport.py] [_log()] Compression: none
2026-04-15T22:42:54.963 [DEBUG] [Thread-27019] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:42:55.018 [DEBUG] [Thread-27019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:42:55.018 [DEBUG] [Thread-27019] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:42:55.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:42:55.019 [DEBUG] [Thread-27019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:42:55.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:42:55.077 [DEBUG] [Thread-27019] [transport.py] [_log()] userauth is OK
2026-04-15T22:42:55.077 [DEBUG] [Thread-27019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:42:55.077 [DEBUG] [Thread-27019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:42:55.077 [DEBUG] [Thread-27019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:42:55.078 [DEBUG] [Thread-27019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:42:55.102 [INFO] [Thread-27019] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:42:55.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:42:55.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:42:55.893 [DEBUG] [Thread-27019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:42:55.893 [DEBUG] [Thread-27019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:42:55.940 [DEBUG] [Thread-27019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:42:55.940 [DEBUG] [Thread-27019] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:42:55.949 [DEBUG] [Thread-27019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:42:55.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:42:55.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')
2026-04-15T22:42:55.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
2026-04-15T22:42:55.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:42:55.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:42:55.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:42:55.980 [DEBUG] [Thread-27019] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:43:03.074 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:43:03.908 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:43:03.909 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:43:05.763 [DEBUG] [Thread-27021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:43:07.165 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:43:20.806 [DEBUG] [Thread-27022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:43:26.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:43:26.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:43:26.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
2026-04-15T22:43:27.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 43, 14), 3.39198, 78.9794, 0.0, 11.9462, 8.99685, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:43:27.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:43:14
2026-04-15T22:43:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:43:28.155 [DEBUG] [Thread-27023] [transport.py] [_log()] starting thread (client mode): 0xf1353af0
2026-04-15T22:43:28.155 [DEBUG] [Thread-27023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:43:28.175 [DEBUG] [Thread-27023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:43:28.175 [INFO] [Thread-27023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:43:28.177 [DEBUG] [Thread-27023] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:43:28.177 [DEBUG] [Thread-27023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:43:28.177 [DEBUG] [Thread-27023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:43:28.177 [DEBUG] [Thread-27023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:43:28.177 [DEBUG] [Thread-27023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:43:28.177 [DEBUG] [Thread-27023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:43:28.177 [DEBUG] [Thread-27023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:43:28.177 [DEBUG] [Thread-27023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:43:28.177 [DEBUG] [Thread-27023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:43:28.177 [DEBUG] [Thread-27023] [transport.py] [_log()] client lang: <none>
2026-04-15T22:43:28.177 [DEBUG] [Thread-27023] [transport.py] [_log()] server lang: <none>
2026-04-15T22:43:28.177 [DEBUG] [Thread-27023] [transport.py] [_log()] kex follows: False
2026-04-15T22:43:28.177 [DEBUG] [Thread-27023] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:43:28.178 [DEBUG] [Thread-27023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:43:28.178 [DEBUG] [Thread-27023] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:43:28.178 [DEBUG] [Thread-27023] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:43:28.178 [DEBUG] [Thread-27023] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:43:28.178 [DEBUG] [Thread-27023] [transport.py] [_log()] Compression: none
2026-04-15T22:43:28.178 [DEBUG] [Thread-27023] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:43:28.186 [DEBUG] [Thread-27023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:43:28.186 [DEBUG] [Thread-27023] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:43:28.187 [DEBUG] [Thread-27023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:43:28.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:43:28.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:43:28.188 [DEBUG] [Thread-27023] [transport.py] [_log()] userauth is OK
2026-04-15T22:43:28.188 [DEBUG] [Thread-27023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:43:28.188 [DEBUG] [Thread-27023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:43:28.188 [DEBUG] [Thread-27023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:43:28.189 [DEBUG] [Thread-27023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:43:28.205 [INFO] [Thread-27023] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:43:28.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:43:29.004 [DEBUG] [Thread-27023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:43:29.004 [DEBUG] [Thread-27023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:43:29.004 [DEBUG] [Thread-27023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:43:29.045 [DEBUG] [Thread-27023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:43:29.045 [DEBUG] [Thread-27023] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:43:29.047 [DEBUG] [Thread-27023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:43:29.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:43:29.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:43:29.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:43:29.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:43:29.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:43:29.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:43:29.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:43:29.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:43:29.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:43:29.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.862977 -999.00   +9.10   8.11     82   +6.30 1 1 1 2 1     0    0 2.54 -19.49 ZNESW 7.6 8.1 108.0 10.0 9.9 -25.5 9.8 -23.9 9.5 -21.8 9.8 -23.8
2026-04-15T22:43:29.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:43:29.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:43:29.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.862977
2026-04-15T22:43:29.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:43:29.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:43:29.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:43:29.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:43:29.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:43:29.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:43:14', tmtdew=3.39198, humidity=78.9794, cloud=0.0, wind=11.9462, temperature=8.99685, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:42:41.213', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.007749999999999702, -0.019750000000000156, -0.1305000000000014, -0.019999999999999574, -0.02874999999999872, 0.0030000000000001137, -0.04875000000000007, 0.00849999999999973, -0.03500000000000014, -0.035250000000001336, -0.051000000000000156, -0.025000000000000355, 0.0182500000000001, 0.006999999999999673, 0.019000000000000128, 0.019249999999999545, -0.04449999999999932, 0.0030000000000001137, 0.0012499999999988631, 0.013999999999999346, 0.040749999999999176, 0.017250000000000654, 0.03974999999999973, 0.026999999999999247, -0.04300000000000104, -0.00975000000000037, 0.01950000000000074, 0.025500000000000966, 0.045000000000001705, 0.06300000000000061, 0.014000000000001123, -0.06425000000000125], zp_timestamp='2026-04-15T20:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:43:29.067 [DEBUG] [Thread-27023] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:43:29.103 [DEBUG] [Thread-27026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:43:29.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:43:29.277 [DEBUG] [Thread-27027] [transport.py] [_log()] starting thread (client mode): 0xf13e3730
2026-04-15T22:43:29.278 [DEBUG] [Thread-27027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:43:29.292 [DEBUG] [Thread-27027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:43:29.292 [INFO] [Thread-27027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:43:29.299 [DEBUG] [Thread-27027] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:43:29.300 [DEBUG] [Thread-27027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:43:29.300 [DEBUG] [Thread-27027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:43:29.300 [DEBUG] [Thread-27027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:43:29.300 [DEBUG] [Thread-27027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:43:29.300 [DEBUG] [Thread-27027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:43:29.300 [DEBUG] [Thread-27027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:43:29.300 [DEBUG] [Thread-27027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:43:29.300 [DEBUG] [Thread-27027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:43:29.300 [DEBUG] [Thread-27027] [transport.py] [_log()] client lang: <none>
2026-04-15T22:43:29.300 [DEBUG] [Thread-27027] [transport.py] [_log()] server lang: <none>
2026-04-15T22:43:29.300 [DEBUG] [Thread-27027] [transport.py] [_log()] kex follows: False
2026-04-15T22:43:29.300 [DEBUG] [Thread-27027] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:43:29.301 [DEBUG] [Thread-27027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:43:29.301 [DEBUG] [Thread-27027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:43:29.301 [DEBUG] [Thread-27027] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:43:29.301 [DEBUG] [Thread-27027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:43:29.301 [DEBUG] [Thread-27027] [transport.py] [_log()] Compression: none
2026-04-15T22:43:29.301 [DEBUG] [Thread-27027] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:43:29.356 [DEBUG] [Thread-27027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:43:29.357 [DEBUG] [Thread-27027] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:43:29.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:43:29.357 [DEBUG] [Thread-27027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:43:29.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:43:29.412 [DEBUG] [Thread-27027] [transport.py] [_log()] userauth is OK
2026-04-15T22:43:29.412 [DEBUG] [Thread-27027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:43:29.412 [DEBUG] [Thread-27027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:43:29.412 [DEBUG] [Thread-27027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:43:29.413 [DEBUG] [Thread-27027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:43:29.434 [INFO] [Thread-27027] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:43:29.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:43:29.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:43:30.250 [DEBUG] [Thread-27027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:43:30.251 [DEBUG] [Thread-27027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:43:30.299 [DEBUG] [Thread-27027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:43:30.299 [DEBUG] [Thread-27027] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:43:30.307 [DEBUG] [Thread-27027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:43:30.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:43:30.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')
2026-04-15T22:43:30.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
2026-04-15T22:43:30.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:43:30.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:43:30.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:43:30.340 [DEBUG] [Thread-27027] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:43:35.833 [DEBUG] [Thread-27029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:43:50.878 [DEBUG] [Thread-27030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:44:00.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:44:00.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:44:00.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T22:44:01.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 43, 49), 3.07803, 80.9919, 0.0, 13.3042, 8.99372, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:44:01.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:43:49
2026-04-15T22:44:02.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:44:02.522 [DEBUG] [Thread-27031] [transport.py] [_log()] starting thread (client mode): 0xee9c7010
2026-04-15T22:44:02.522 [DEBUG] [Thread-27031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:44:02.542 [DEBUG] [Thread-27031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:44:02.542 [INFO] [Thread-27031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:44:02.545 [DEBUG] [Thread-27031] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:44:02.545 [DEBUG] [Thread-27031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:44:02.546 [DEBUG] [Thread-27031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:44:02.546 [DEBUG] [Thread-27031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:44:02.546 [DEBUG] [Thread-27031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:44:02.546 [DEBUG] [Thread-27031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:44:02.546 [DEBUG] [Thread-27031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:44:02.546 [DEBUG] [Thread-27031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:44:02.546 [DEBUG] [Thread-27031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:44:02.546 [DEBUG] [Thread-27031] [transport.py] [_log()] client lang: <none>
2026-04-15T22:44:02.546 [DEBUG] [Thread-27031] [transport.py] [_log()] server lang: <none>
2026-04-15T22:44:02.546 [DEBUG] [Thread-27031] [transport.py] [_log()] kex follows: False
2026-04-15T22:44:02.546 [DEBUG] [Thread-27031] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:44:02.546 [DEBUG] [Thread-27031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:44:02.547 [DEBUG] [Thread-27031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:44:02.547 [DEBUG] [Thread-27031] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:44:02.547 [DEBUG] [Thread-27031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:44:02.547 [DEBUG] [Thread-27031] [transport.py] [_log()] Compression: none
2026-04-15T22:44:02.547 [DEBUG] [Thread-27031] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:44:02.567 [DEBUG] [Thread-27031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:44:02.567 [DEBUG] [Thread-27031] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:44:02.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:44:02.568 [DEBUG] [Thread-27031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:44:02.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:44:02.569 [DEBUG] [Thread-27031] [transport.py] [_log()] userauth is OK
2026-04-15T22:44:02.569 [DEBUG] [Thread-27031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:44:02.569 [DEBUG] [Thread-27031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:44:02.569 [DEBUG] [Thread-27031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:44:02.569 [DEBUG] [Thread-27031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:44:02.592 [INFO] [Thread-27031] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:44:02.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:44:03.382 [DEBUG] [Thread-27031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:44:03.383 [DEBUG] [Thread-27031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:44:03.383 [DEBUG] [Thread-27031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:44:03.423 [DEBUG] [Thread-27031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:44:03.423 [DEBUG] [Thread-27031] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:44:03.426 [DEBUG] [Thread-27031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:44:03.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:44:03.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:44:03.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:44:03.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:44:03.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:44:03.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:44:03.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:44:03.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:44:03.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:44:03.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.863324 -999.00   +9.10   8.01     83   +6.40 1 1 1 2 1     0    0 2.54 -18.35 ZNESW 9.3 8.0 117.0 9.5 9.9 -25.1 9.8 -23.8 9.5 -21.8 9.8 -23.7
2026-04-15T22:44:03.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:44:03.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:44:03.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.863324
2026-04-15T22:44:03.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:44:03.450 [DEBUG] [Thread-27031] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:44:03.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:44:03.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:44:03.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:44:03.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:44:03.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:43:49', tmtdew=3.07803, humidity=80.9919, cloud=0.0, wind=13.3042, temperature=8.99372, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:43:11.194', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.007749999999999702, -0.019750000000000156, -0.1305000000000014, -0.019999999999999574, -0.02874999999999872, 0.0030000000000001137, -0.04875000000000007, 0.00849999999999973, -0.03500000000000014, -0.035250000000001336, -0.051000000000000156, -0.025000000000000355, 0.0182500000000001, 0.006999999999999673, 0.019000000000000128, 0.019249999999999545, -0.04449999999999932, 0.0030000000000001137, 0.0012499999999988631, 0.013999999999999346, 0.040749999999999176, 0.017250000000000654, 0.03974999999999973, 0.026999999999999247, -0.04300000000000104, -0.00975000000000037, 0.01950000000000074, 0.025500000000000966, 0.045000000000001705, 0.06300000000000061, 0.014000000000001123, -0.06425000000000125], zp_timestamp='2026-04-15T20:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:44:03.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:44:03.701 [DEBUG] [Thread-27034] [transport.py] [_log()] starting thread (client mode): 0xf1334820
2026-04-15T22:44:03.702 [DEBUG] [Thread-27034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:44:03.716 [DEBUG] [Thread-27034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:44:03.716 [INFO] [Thread-27034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:44:03.724 [DEBUG] [Thread-27034] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:44:03.724 [DEBUG] [Thread-27034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:44:03.724 [DEBUG] [Thread-27034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:44:03.724 [DEBUG] [Thread-27034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:44:03.724 [DEBUG] [Thread-27034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:44:03.724 [DEBUG] [Thread-27034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:44:03.724 [DEBUG] [Thread-27034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:44:03.724 [DEBUG] [Thread-27034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:44:03.724 [DEBUG] [Thread-27034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:44:03.725 [DEBUG] [Thread-27034] [transport.py] [_log()] client lang: <none>
2026-04-15T22:44:03.725 [DEBUG] [Thread-27034] [transport.py] [_log()] server lang: <none>
2026-04-15T22:44:03.725 [DEBUG] [Thread-27034] [transport.py] [_log()] kex follows: False
2026-04-15T22:44:03.725 [DEBUG] [Thread-27034] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:44:03.725 [DEBUG] [Thread-27034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:44:03.725 [DEBUG] [Thread-27034] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:44:03.725 [DEBUG] [Thread-27034] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:44:03.725 [DEBUG] [Thread-27034] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:44:03.725 [DEBUG] [Thread-27034] [transport.py] [_log()] Compression: none
2026-04-15T22:44:03.725 [DEBUG] [Thread-27034] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:44:03.780 [DEBUG] [Thread-27034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:44:03.780 [DEBUG] [Thread-27034] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:44:03.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:44:03.781 [DEBUG] [Thread-27034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:44:03.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:44:03.837 [DEBUG] [Thread-27034] [transport.py] [_log()] userauth is OK
2026-04-15T22:44:03.837 [DEBUG] [Thread-27034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:44:03.837 [DEBUG] [Thread-27034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:44:03.837 [DEBUG] [Thread-27034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:44:03.837 [DEBUG] [Thread-27034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:44:03.862 [INFO] [Thread-27034] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:44:03.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:44:03.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:44:04.110 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:44:04.112 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:44:04.708 [DEBUG] [Thread-27034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:44:04.708 [DEBUG] [Thread-27034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:44:04.756 [DEBUG] [Thread-27034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:44:04.756 [DEBUG] [Thread-27034] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:44:04.765 [DEBUG] [Thread-27034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:44:04.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:44:04.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')
2026-04-15T22:44:04.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
2026-04-15T22:44:04.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:44:04.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:44:04.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:44:04.800 [DEBUG] [Thread-27034] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:44:05.908 [DEBUG] [Thread-27036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:44:20.952 [DEBUG] [Thread-27037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:44:29.265 [DEBUG] [Thread-27038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:44:29.791 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:44:34.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:44:34.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:44:34.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
2026-04-15T22:44:35.981 [DEBUG] [Thread-27039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:44:36.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 44, 24), 3.33232, 79.5292, 0.0, 11.7346, 8.91368, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:44:36.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:44:24
2026-04-15T22:44:36.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:44:37.015 [DEBUG] [Thread-27040] [transport.py] [_log()] starting thread (client mode): 0xf1336200
2026-04-15T22:44:37.016 [DEBUG] [Thread-27040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:44:37.035 [DEBUG] [Thread-27040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:44:37.035 [INFO] [Thread-27040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:44:37.038 [DEBUG] [Thread-27040] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:44:37.038 [DEBUG] [Thread-27040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:44:37.038 [DEBUG] [Thread-27040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:44:37.038 [DEBUG] [Thread-27040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:44:37.038 [DEBUG] [Thread-27040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:44:37.038 [DEBUG] [Thread-27040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:44:37.038 [DEBUG] [Thread-27040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:44:37.038 [DEBUG] [Thread-27040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:44:37.039 [DEBUG] [Thread-27040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:44:37.039 [DEBUG] [Thread-27040] [transport.py] [_log()] client lang: <none>
2026-04-15T22:44:37.039 [DEBUG] [Thread-27040] [transport.py] [_log()] server lang: <none>
2026-04-15T22:44:37.039 [DEBUG] [Thread-27040] [transport.py] [_log()] kex follows: False
2026-04-15T22:44:37.039 [DEBUG] [Thread-27040] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:44:37.039 [DEBUG] [Thread-27040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:44:37.039 [DEBUG] [Thread-27040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:44:37.039 [DEBUG] [Thread-27040] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:44:37.039 [DEBUG] [Thread-27040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:44:37.039 [DEBUG] [Thread-27040] [transport.py] [_log()] Compression: none
2026-04-15T22:44:37.039 [DEBUG] [Thread-27040] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:44:37.054 [DEBUG] [Thread-27040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:44:37.055 [DEBUG] [Thread-27040] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:44:37.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:44:37.055 [DEBUG] [Thread-27040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:44:37.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:44:37.096 [DEBUG] [Thread-27040] [transport.py] [_log()] userauth is OK
2026-04-15T22:44:37.096 [DEBUG] [Thread-27040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:44:37.097 [DEBUG] [Thread-27040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:44:37.097 [DEBUG] [Thread-27040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:44:37.097 [DEBUG] [Thread-27040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:44:37.121 [INFO] [Thread-27040] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:44:37.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:44:37.924 [DEBUG] [Thread-27040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:44:37.924 [DEBUG] [Thread-27040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:44:37.925 [DEBUG] [Thread-27040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:44:37.965 [DEBUG] [Thread-27040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:44:37.965 [DEBUG] [Thread-27040] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:44:37.968 [DEBUG] [Thread-27040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:44:37.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:44:37.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:44:37.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:44:37.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:44:37.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:44:37.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:44:37.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:44:37.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:44:37.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:44:37.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.863671 -999.00   +9.00   7.83     83   +6.30 1 1 1 2 1     0    0 2.49 -18.86 ZNESW 8.0 7.8 112.2 9.5 9.8 -25.2 9.8 -23.9 9.5 -21.8 9.8 -23.8
2026-04-15T22:44:37.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:44:37.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:44:37.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.863671
2026-04-15T22:44:37.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:44:37.993 [DEBUG] [Thread-27040] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:44:37.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:44:37.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:44:37.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:44:37.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:44:37.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:44:24', tmtdew=3.33232, humidity=79.5292, cloud=0.0, wind=11.7346, temperature=8.91368, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:43:41.174', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.007749999999999702, -0.019750000000000156, -0.1305000000000014, -0.019999999999999574, -0.02874999999999872, 0.0030000000000001137, -0.04875000000000007, 0.00849999999999973, -0.03500000000000014, -0.035250000000001336, -0.051000000000000156, -0.025000000000000355, 0.0182500000000001, 0.006999999999999673, 0.019000000000000128, 0.019249999999999545, -0.04449999999999932, 0.0030000000000001137, 0.0012499999999988631, 0.013999999999999346, 0.040749999999999176, 0.017250000000000654, 0.03974999999999973, 0.026999999999999247, -0.04300000000000104, -0.00975000000000037, 0.01950000000000074, 0.025500000000000966, 0.045000000000001705, 0.06300000000000061, 0.014000000000001123, -0.06425000000000125], zp_timestamp='2026-04-15T20:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:44:38.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:44:38.245 [DEBUG] [Thread-27043] [transport.py] [_log()] starting thread (client mode): 0xee9c76d0
2026-04-15T22:44:38.245 [DEBUG] [Thread-27043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:44:38.260 [DEBUG] [Thread-27043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:44:38.260 [INFO] [Thread-27043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:44:38.267 [DEBUG] [Thread-27043] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:44:38.268 [DEBUG] [Thread-27043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:44:38.268 [DEBUG] [Thread-27043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:44:38.268 [DEBUG] [Thread-27043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:44:38.268 [DEBUG] [Thread-27043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:44:38.268 [DEBUG] [Thread-27043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:44:38.268 [DEBUG] [Thread-27043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:44:38.268 [DEBUG] [Thread-27043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:44:38.268 [DEBUG] [Thread-27043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:44:38.268 [DEBUG] [Thread-27043] [transport.py] [_log()] client lang: <none>
2026-04-15T22:44:38.268 [DEBUG] [Thread-27043] [transport.py] [_log()] server lang: <none>
2026-04-15T22:44:38.268 [DEBUG] [Thread-27043] [transport.py] [_log()] kex follows: False
2026-04-15T22:44:38.269 [DEBUG] [Thread-27043] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:44:38.269 [DEBUG] [Thread-27043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:44:38.269 [DEBUG] [Thread-27043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:44:38.269 [DEBUG] [Thread-27043] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:44:38.269 [DEBUG] [Thread-27043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:44:38.269 [DEBUG] [Thread-27043] [transport.py] [_log()] Compression: none
2026-04-15T22:44:38.269 [DEBUG] [Thread-27043] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:44:38.333 [DEBUG] [Thread-27043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:44:38.333 [DEBUG] [Thread-27043] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:44:38.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:44:38.334 [DEBUG] [Thread-27043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:44:38.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:44:38.390 [DEBUG] [Thread-27043] [transport.py] [_log()] userauth is OK
2026-04-15T22:44:38.390 [DEBUG] [Thread-27043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:44:38.390 [DEBUG] [Thread-27043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:44:38.390 [DEBUG] [Thread-27043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:44:38.391 [DEBUG] [Thread-27043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:44:38.419 [INFO] [Thread-27043] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:44:38.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:44:38.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:44:38.561 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:44:39.222 [DEBUG] [Thread-27043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:44:39.222 [DEBUG] [Thread-27043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:44:39.269 [DEBUG] [Thread-27043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:44:39.269 [DEBUG] [Thread-27043] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:44:39.278 [DEBUG] [Thread-27043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:44:39.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:44:39.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')
2026-04-15T22:44:39.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
2026-04-15T22:44:39.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:44:39.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:44:39.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:44:39.313 [DEBUG] [Thread-27043] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:44:42.660 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:44:51.012 [DEBUG] [Thread-27045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:45:04.342 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:45:04.343 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:45:06.048 [DEBUG] [Thread-27046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:45:09.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:45:09.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:45:09.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
2026-04-15T22:45:10.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 45), 3.32679, 79.5623, 0.0, 11.6993, 8.93027, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:45:10.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:45:00
2026-04-15T22:45:11.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:45:11.573 [DEBUG] [Thread-27047] [transport.py] [_log()] starting thread (client mode): 0xee9c3760
2026-04-15T22:45:11.574 [DEBUG] [Thread-27047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:45:11.593 [DEBUG] [Thread-27047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:45:11.594 [INFO] [Thread-27047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:45:11.597 [DEBUG] [Thread-27047] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:45:11.597 [DEBUG] [Thread-27047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:45:11.597 [DEBUG] [Thread-27047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:45:11.597 [DEBUG] [Thread-27047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:45:11.597 [DEBUG] [Thread-27047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:45:11.597 [DEBUG] [Thread-27047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:45:11.597 [DEBUG] [Thread-27047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:45:11.597 [DEBUG] [Thread-27047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:45:11.597 [DEBUG] [Thread-27047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:45:11.597 [DEBUG] [Thread-27047] [transport.py] [_log()] client lang: <none>
2026-04-15T22:45:11.597 [DEBUG] [Thread-27047] [transport.py] [_log()] server lang: <none>
2026-04-15T22:45:11.597 [DEBUG] [Thread-27047] [transport.py] [_log()] kex follows: False
2026-04-15T22:45:11.597 [DEBUG] [Thread-27047] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:45:11.598 [DEBUG] [Thread-27047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:45:11.598 [DEBUG] [Thread-27047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:45:11.598 [DEBUG] [Thread-27047] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:45:11.598 [DEBUG] [Thread-27047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:45:11.598 [DEBUG] [Thread-27047] [transport.py] [_log()] Compression: none
2026-04-15T22:45:11.598 [DEBUG] [Thread-27047] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:45:11.614 [DEBUG] [Thread-27047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:45:11.615 [DEBUG] [Thread-27047] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:45:11.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:45:11.615 [DEBUG] [Thread-27047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:45:11.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:45:11.616 [DEBUG] [Thread-27047] [transport.py] [_log()] userauth is OK
2026-04-15T22:45:11.616 [DEBUG] [Thread-27047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:45:11.616 [DEBUG] [Thread-27047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:45:11.617 [DEBUG] [Thread-27047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:45:11.617 [DEBUG] [Thread-27047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:45:11.636 [INFO] [Thread-27047] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:45:11.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:45:14.289 [DEBUG] [Thread-27047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:45:14.290 [DEBUG] [Thread-27047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:45:14.290 [DEBUG] [Thread-27047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:45:14.330 [DEBUG] [Thread-27047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:45:14.330 [DEBUG] [Thread-27047] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:45:14.332 [DEBUG] [Thread-27047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:45:14.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:45:14.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:45:14.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:45:14.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:45:14.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:45:14.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:45:14.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:45:14.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:45:14.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:45:14.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.864018 -999.00   +8.90   7.29     83   +6.30 1 1 1 2 1     0    0 2.61 -17.36 ZNESW 6.1 7.3 107.4 8.9 9.8 -25.1 9.8 -23.9 9.5 -21.7 9.7 -24.0
2026-04-15T22:45:14.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:45:14.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:45:14.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.864018
2026-04-15T22:45:14.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:45:14.360 [DEBUG] [Thread-27047] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:45:14.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:45:14.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:45:14.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:45:14.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:45:14.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:45:00', tmtdew=3.32679, humidity=79.5623, cloud=0.0, wind=11.6993, temperature=8.93027, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:44:11.155', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.007749999999999702, -0.019750000000000156, -0.1305000000000014, -0.019999999999999574, -0.02874999999999872, 0.0030000000000001137, -0.04875000000000007, 0.00849999999999973, -0.03500000000000014, -0.035250000000001336, -0.051000000000000156, -0.025000000000000355, 0.0182500000000001, 0.006999999999999673, 0.019000000000000128, 0.019249999999999545, -0.04449999999999932, 0.0030000000000001137, 0.0012499999999988631, 0.013999999999999346, 0.040749999999999176, 0.017250000000000654, 0.03974999999999973, 0.026999999999999247, -0.04300000000000104, -0.00975000000000037, 0.01950000000000074, 0.025500000000000966, 0.045000000000001705, 0.06300000000000061, 0.014000000000001123, -0.06425000000000125], zp_timestamp='2026-04-15T20:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:45:14.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:45:14.667 [DEBUG] [Thread-27050] [transport.py] [_log()] starting thread (client mode): 0xf1353130
2026-04-15T22:45:14.667 [DEBUG] [Thread-27050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:45:14.682 [DEBUG] [Thread-27050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:45:14.682 [INFO] [Thread-27050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:45:14.690 [DEBUG] [Thread-27050] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:45:14.690 [DEBUG] [Thread-27050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:45:14.690 [DEBUG] [Thread-27050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:45:14.690 [DEBUG] [Thread-27050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:45:14.690 [DEBUG] [Thread-27050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:45:14.691 [DEBUG] [Thread-27050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:45:14.691 [DEBUG] [Thread-27050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:45:14.691 [DEBUG] [Thread-27050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:45:14.691 [DEBUG] [Thread-27050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:45:14.691 [DEBUG] [Thread-27050] [transport.py] [_log()] client lang: <none>
2026-04-15T22:45:14.691 [DEBUG] [Thread-27050] [transport.py] [_log()] server lang: <none>
2026-04-15T22:45:14.691 [DEBUG] [Thread-27050] [transport.py] [_log()] kex follows: False
2026-04-15T22:45:14.691 [DEBUG] [Thread-27050] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:45:14.691 [DEBUG] [Thread-27050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:45:14.691 [DEBUG] [Thread-27050] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:45:14.691 [DEBUG] [Thread-27050] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:45:14.691 [DEBUG] [Thread-27050] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:45:14.691 [DEBUG] [Thread-27050] [transport.py] [_log()] Compression: none
2026-04-15T22:45:14.691 [DEBUG] [Thread-27050] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:45:14.745 [DEBUG] [Thread-27050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:45:14.746 [DEBUG] [Thread-27050] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:45:14.746 [DEBUG] [Thread-27050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:45:14.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:45:14.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:45:14.802 [DEBUG] [Thread-27050] [transport.py] [_log()] userauth is OK
2026-04-15T22:45:14.802 [DEBUG] [Thread-27050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:45:14.802 [DEBUG] [Thread-27050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:45:14.802 [DEBUG] [Thread-27050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:45:14.802 [DEBUG] [Thread-27050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:45:14.821 [INFO] [Thread-27050] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:45:14.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:45:14.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:45:15.634 [DEBUG] [Thread-27050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:45:15.634 [DEBUG] [Thread-27050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:45:15.682 [DEBUG] [Thread-27050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:45:15.682 [DEBUG] [Thread-27050] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:45:15.691 [DEBUG] [Thread-27050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:45:15.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:45:15.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')
2026-04-15T22:45:15.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
2026-04-15T22:45:15.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:45:15.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:45:15.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:45:15.726 [DEBUG] [Thread-27050] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:45:21.079 [DEBUG] [Thread-27052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:45:29.424 [DEBUG] [Thread-27053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:45:36.118 [DEBUG] [Thread-27054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:45:45.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:45:45.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:45:45.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
2026-04-15T22:45:47.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 45, 36), 3.05794, 81.0915, 0.0, 10.9051, 8.89419, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:45:47.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:45:36
2026-04-15T22:45:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:45:47.844 [DEBUG] [Thread-27055] [transport.py] [_log()] starting thread (client mode): 0xee9c77c0
2026-04-15T22:45:47.844 [DEBUG] [Thread-27055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:45:47.864 [DEBUG] [Thread-27055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:45:47.864 [INFO] [Thread-27055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:45:47.868 [DEBUG] [Thread-27055] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:45:47.868 [DEBUG] [Thread-27055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:45:47.868 [DEBUG] [Thread-27055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:45:47.868 [DEBUG] [Thread-27055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:45:47.868 [DEBUG] [Thread-27055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:45:47.868 [DEBUG] [Thread-27055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:45:47.868 [DEBUG] [Thread-27055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:45:47.868 [DEBUG] [Thread-27055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:45:47.868 [DEBUG] [Thread-27055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:45:47.869 [DEBUG] [Thread-27055] [transport.py] [_log()] client lang: <none>
2026-04-15T22:45:47.869 [DEBUG] [Thread-27055] [transport.py] [_log()] server lang: <none>
2026-04-15T22:45:47.869 [DEBUG] [Thread-27055] [transport.py] [_log()] kex follows: False
2026-04-15T22:45:47.869 [DEBUG] [Thread-27055] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:45:47.869 [DEBUG] [Thread-27055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:45:47.869 [DEBUG] [Thread-27055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:45:47.869 [DEBUG] [Thread-27055] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:45:47.869 [DEBUG] [Thread-27055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:45:47.869 [DEBUG] [Thread-27055] [transport.py] [_log()] Compression: none
2026-04-15T22:45:47.869 [DEBUG] [Thread-27055] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:45:47.889 [DEBUG] [Thread-27055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:45:47.890 [DEBUG] [Thread-27055] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:45:47.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:45:47.890 [DEBUG] [Thread-27055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:45:47.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:45:47.891 [DEBUG] [Thread-27055] [transport.py] [_log()] userauth is OK
2026-04-15T22:45:47.891 [DEBUG] [Thread-27055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:45:47.891 [DEBUG] [Thread-27055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:45:47.892 [DEBUG] [Thread-27055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:45:47.892 [DEBUG] [Thread-27055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:45:47.916 [INFO] [Thread-27055] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:45:47.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:45:48.707 [DEBUG] [Thread-27055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:45:48.707 [DEBUG] [Thread-27055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:45:48.708 [DEBUG] [Thread-27055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:45:48.748 [DEBUG] [Thread-27055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:45:48.748 [DEBUG] [Thread-27055] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:45:48.751 [DEBUG] [Thread-27055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:45:48.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:45:48.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:45:48.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:45:48.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:45:48.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:45:48.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:45:48.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:45:48.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:45:48.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:45:48.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.864713 -999.00   +8.90   6.78     84   +6.30 1 1 1 2 1     0    0 2.45 -19.16 ZNESW 7.3 6.8 116.6 7.9 9.8 -25.3 9.7 -23.9 9.4 -21.7 9.7 -23.7
2026-04-15T22:45:48.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:45:48.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:45:48.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.864713
2026-04-15T22:45:48.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:45:48.775 [DEBUG] [Thread-27055] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:45:48.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:45:48.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:45:48.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:45:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:45:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:45:36', tmtdew=3.05794, humidity=81.0915, cloud=0.0, wind=10.9051, temperature=8.89419, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:45:11.203', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.007749999999999702, -0.019750000000000156, -0.1305000000000014, -0.019999999999999574, -0.02874999999999872, 0.0030000000000001137, -0.04875000000000007, 0.00849999999999973, -0.03500000000000014, -0.035250000000001336, -0.051000000000000156, -0.025000000000000355, 0.0182500000000001, 0.006999999999999673, 0.019000000000000128, 0.019249999999999545, -0.04449999999999932, 0.0030000000000001137, 0.0012499999999988631, 0.013999999999999346, 0.040749999999999176, 0.017250000000000654, 0.03974999999999973, 0.026999999999999247, -0.04300000000000104, -0.00975000000000037, 0.01950000000000074, 0.025500000000000966, 0.045000000000001705, 0.06300000000000061, 0.014000000000001123, -0.06425000000000125], zp_timestamp='2026-04-15T20:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:45:49.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:45:49.036 [DEBUG] [Thread-27058] [transport.py] [_log()] starting thread (client mode): 0xee9c2860
2026-04-15T22:45:49.036 [DEBUG] [Thread-27058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:45:49.052 [DEBUG] [Thread-27058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:45:49.052 [INFO] [Thread-27058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:45:49.059 [DEBUG] [Thread-27058] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:45:49.059 [DEBUG] [Thread-27058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:45:49.059 [DEBUG] [Thread-27058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:45:49.060 [DEBUG] [Thread-27058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:45:49.060 [DEBUG] [Thread-27058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:45:49.060 [DEBUG] [Thread-27058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:45:49.060 [DEBUG] [Thread-27058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:45:49.060 [DEBUG] [Thread-27058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:45:49.060 [DEBUG] [Thread-27058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:45:49.060 [DEBUG] [Thread-27058] [transport.py] [_log()] client lang: <none>
2026-04-15T22:45:49.060 [DEBUG] [Thread-27058] [transport.py] [_log()] server lang: <none>
2026-04-15T22:45:49.060 [DEBUG] [Thread-27058] [transport.py] [_log()] kex follows: False
2026-04-15T22:45:49.060 [DEBUG] [Thread-27058] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:45:49.060 [DEBUG] [Thread-27058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:45:49.060 [DEBUG] [Thread-27058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:45:49.061 [DEBUG] [Thread-27058] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:45:49.061 [DEBUG] [Thread-27058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:45:49.061 [DEBUG] [Thread-27058] [transport.py] [_log()] Compression: none
2026-04-15T22:45:49.061 [DEBUG] [Thread-27058] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:45:49.118 [DEBUG] [Thread-27058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:45:49.118 [DEBUG] [Thread-27058] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:45:49.119 [DEBUG] [Thread-27058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:45:49.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:45:49.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:45:49.175 [DEBUG] [Thread-27058] [transport.py] [_log()] userauth is OK
2026-04-15T22:45:49.175 [DEBUG] [Thread-27058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:45:49.175 [DEBUG] [Thread-27058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:45:49.175 [DEBUG] [Thread-27058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:45:49.175 [DEBUG] [Thread-27058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:45:49.197 [INFO] [Thread-27058] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:45:49.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:45:49.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:45:50.021 [DEBUG] [Thread-27058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:45:50.022 [DEBUG] [Thread-27058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:45:50.069 [DEBUG] [Thread-27058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:45:50.069 [DEBUG] [Thread-27058] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:45:50.078 [DEBUG] [Thread-27058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:45:50.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:45:50.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')
2026-04-15T22:45:50.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
2026-04-15T22:45:50.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:45:50.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:45:50.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:45:50.114 [DEBUG] [Thread-27058] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:45:51.150 [DEBUG] [Thread-27060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:46:04.544 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:46:04.546 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:46:05.223 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:46:06.194 [DEBUG] [Thread-27061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:46:20.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:46:20.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:46:20.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
2026-04-15T22:46:21.222 [DEBUG] [Thread-27062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:46:21.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 46, 12), 3.27421, 80.0789, 0.0, 10.6938, 8.89688, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:46:21.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:46:12
2026-04-15T22:46:21.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:46:22.232 [DEBUG] [Thread-27063] [transport.py] [_log()] starting thread (client mode): 0xf1337c70
2026-04-15T22:46:22.232 [DEBUG] [Thread-27063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:46:22.251 [DEBUG] [Thread-27063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:46:22.251 [INFO] [Thread-27063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:46:22.252 [DEBUG] [Thread-27063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:46:22.252 [DEBUG] [Thread-27063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:46:22.253 [DEBUG] [Thread-27063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:46:22.253 [DEBUG] [Thread-27063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:46:22.253 [DEBUG] [Thread-27063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:46:22.253 [DEBUG] [Thread-27063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:46:22.253 [DEBUG] [Thread-27063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:46:22.253 [DEBUG] [Thread-27063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:46:22.253 [DEBUG] [Thread-27063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:46:22.253 [DEBUG] [Thread-27063] [transport.py] [_log()] client lang: <none>
2026-04-15T22:46:22.253 [DEBUG] [Thread-27063] [transport.py] [_log()] server lang: <none>
2026-04-15T22:46:22.253 [DEBUG] [Thread-27063] [transport.py] [_log()] kex follows: False
2026-04-15T22:46:22.253 [DEBUG] [Thread-27063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:46:22.254 [DEBUG] [Thread-27063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:46:22.254 [DEBUG] [Thread-27063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:46:22.254 [DEBUG] [Thread-27063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:46:22.254 [DEBUG] [Thread-27063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:46:22.254 [DEBUG] [Thread-27063] [transport.py] [_log()] Compression: none
2026-04-15T22:46:22.254 [DEBUG] [Thread-27063] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:46:22.262 [DEBUG] [Thread-27063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:46:22.262 [DEBUG] [Thread-27063] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:46:22.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:46:22.263 [DEBUG] [Thread-27063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:46:22.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:46:22.264 [DEBUG] [Thread-27063] [transport.py] [_log()] userauth is OK
2026-04-15T22:46:22.264 [DEBUG] [Thread-27063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:46:22.264 [DEBUG] [Thread-27063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:46:22.265 [DEBUG] [Thread-27063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:46:22.265 [DEBUG] [Thread-27063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:46:22.291 [INFO] [Thread-27063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:46:22.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:46:23.091 [DEBUG] [Thread-27063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:46:23.092 [DEBUG] [Thread-27063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:46:23.092 [DEBUG] [Thread-27063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:46:23.132 [DEBUG] [Thread-27063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:46:23.132 [DEBUG] [Thread-27063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:46:23.135 [DEBUG] [Thread-27063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:46:23.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:46:23.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:46:23.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:46:23.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:46:23.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:46:23.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:46:23.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:46:23.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:46:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:46:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.865060 -999.00   +8.90   6.74     84   +6.30 1 1 1 2 1     0    0 2.49 -19.07 ZNESW 7.0 6.7 114.4 9.1 9.8 -25.1 9.7 -23.9 9.4 -21.9 9.7 -23.8
2026-04-15T22:46:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:46:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:46:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.865060
2026-04-15T22:46:23.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:46:23.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:46:23.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:46:23.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:46:23.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:46:23.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:46:12', tmtdew=3.27421, humidity=80.0789, cloud=0.0, wind=10.6938, temperature=8.89688, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:45:41.184', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.007749999999999702, -0.019750000000000156, -0.1305000000000014, -0.019999999999999574, -0.02874999999999872, 0.0030000000000001137, -0.04875000000000007, 0.00849999999999973, -0.03500000000000014, -0.035250000000001336, -0.051000000000000156, -0.025000000000000355, 0.0182500000000001, 0.006999999999999673, 0.019000000000000128, 0.019249999999999545, -0.04449999999999932, 0.0030000000000001137, 0.0012499999999988631, 0.013999999999999346, 0.040749999999999176, 0.017250000000000654, 0.03974999999999973, 0.026999999999999247, -0.04300000000000104, -0.00975000000000037, 0.01950000000000074, 0.025500000000000966, 0.045000000000001705, 0.06300000000000061, 0.014000000000001123, -0.06425000000000125], zp_timestamp='2026-04-15T20:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:46:23.162 [DEBUG] [Thread-27063] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:46:23.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:46:23.404 [DEBUG] [Thread-27066] [transport.py] [_log()] starting thread (client mode): 0xf1336260
2026-04-15T22:46:23.404 [DEBUG] [Thread-27066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:46:23.421 [DEBUG] [Thread-27066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:46:23.421 [INFO] [Thread-27066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:46:23.431 [DEBUG] [Thread-27066] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:46:23.431 [DEBUG] [Thread-27066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:46:23.432 [DEBUG] [Thread-27066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:46:23.432 [DEBUG] [Thread-27066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:46:23.432 [DEBUG] [Thread-27066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:46:23.432 [DEBUG] [Thread-27066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:46:23.432 [DEBUG] [Thread-27066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:46:23.432 [DEBUG] [Thread-27066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:46:23.432 [DEBUG] [Thread-27066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:46:23.432 [DEBUG] [Thread-27066] [transport.py] [_log()] client lang: <none>
2026-04-15T22:46:23.432 [DEBUG] [Thread-27066] [transport.py] [_log()] server lang: <none>
2026-04-15T22:46:23.432 [DEBUG] [Thread-27066] [transport.py] [_log()] kex follows: False
2026-04-15T22:46:23.432 [DEBUG] [Thread-27066] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:46:23.432 [DEBUG] [Thread-27066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:46:23.433 [DEBUG] [Thread-27066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:46:23.433 [DEBUG] [Thread-27066] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:46:23.433 [DEBUG] [Thread-27066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:46:23.433 [DEBUG] [Thread-27066] [transport.py] [_log()] Compression: none
2026-04-15T22:46:23.433 [DEBUG] [Thread-27066] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:46:23.490 [DEBUG] [Thread-27066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:46:23.490 [DEBUG] [Thread-27066] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:46:23.491 [DEBUG] [Thread-27066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:46:23.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:46:23.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:46:23.548 [DEBUG] [Thread-27066] [transport.py] [_log()] userauth is OK
2026-04-15T22:46:23.549 [DEBUG] [Thread-27066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:46:23.549 [DEBUG] [Thread-27066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:46:23.549 [DEBUG] [Thread-27066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:46:23.549 [DEBUG] [Thread-27066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:46:23.574 [INFO] [Thread-27066] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:46:23.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:46:23.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:46:24.447 [DEBUG] [Thread-27066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:46:24.447 [DEBUG] [Thread-27066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:46:24.495 [DEBUG] [Thread-27066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:46:24.495 [DEBUG] [Thread-27066] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:46:24.504 [DEBUG] [Thread-27066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:46:24.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:46:24.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')
2026-04-15T22:46:24.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
2026-04-15T22:46:24.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:46:24.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:46:24.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:46:24.540 [DEBUG] [Thread-27066] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:46:29.570 [DEBUG] [Thread-27068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:46:36.253 [DEBUG] [Thread-27069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:46:51.289 [DEBUG] [Thread-27070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:46:54.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:46:54.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:46:54.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
2026-04-15T22:46:55.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 46, 47), 3.04252, 81.1911, 0.0, 11.399, 8.99376, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:46:55.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:46:47
2026-04-15T22:46:56.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:46:56.675 [DEBUG] [Thread-27071] [transport.py] [_log()] starting thread (client mode): 0xee9c3250
2026-04-15T22:46:56.675 [DEBUG] [Thread-27071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:46:56.695 [DEBUG] [Thread-27071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:46:56.696 [INFO] [Thread-27071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:46:56.699 [DEBUG] [Thread-27071] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:46:56.699 [DEBUG] [Thread-27071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:46:56.699 [DEBUG] [Thread-27071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:46:56.699 [DEBUG] [Thread-27071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:46:56.699 [DEBUG] [Thread-27071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:46:56.699 [DEBUG] [Thread-27071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:46:56.700 [DEBUG] [Thread-27071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:46:56.700 [DEBUG] [Thread-27071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:46:56.700 [DEBUG] [Thread-27071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:46:56.700 [DEBUG] [Thread-27071] [transport.py] [_log()] client lang: <none>
2026-04-15T22:46:56.700 [DEBUG] [Thread-27071] [transport.py] [_log()] server lang: <none>
2026-04-15T22:46:56.700 [DEBUG] [Thread-27071] [transport.py] [_log()] kex follows: False
2026-04-15T22:46:56.700 [DEBUG] [Thread-27071] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:46:56.700 [DEBUG] [Thread-27071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:46:56.700 [DEBUG] [Thread-27071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:46:56.700 [DEBUG] [Thread-27071] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:46:56.700 [DEBUG] [Thread-27071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:46:56.701 [DEBUG] [Thread-27071] [transport.py] [_log()] Compression: none
2026-04-15T22:46:56.701 [DEBUG] [Thread-27071] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:46:56.717 [DEBUG] [Thread-27071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:46:56.717 [DEBUG] [Thread-27071] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:46:56.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:46:56.718 [DEBUG] [Thread-27071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:46:56.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:46:56.719 [DEBUG] [Thread-27071] [transport.py] [_log()] userauth is OK
2026-04-15T22:46:56.719 [DEBUG] [Thread-27071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:46:56.719 [DEBUG] [Thread-27071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:46:56.719 [DEBUG] [Thread-27071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:46:56.720 [DEBUG] [Thread-27071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:46:56.743 [INFO] [Thread-27071] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:46:56.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:46:57.514 [DEBUG] [Thread-27071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:46:57.514 [DEBUG] [Thread-27071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:46:57.514 [DEBUG] [Thread-27071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:46:57.555 [DEBUG] [Thread-27071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:46:57.555 [DEBUG] [Thread-27071] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:46:57.557 [DEBUG] [Thread-27071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:46:57.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:46:57.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:46:57.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:46:57.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:46:57.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:46:57.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:46:57.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:46:57.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:46:57.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:46:57.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.865407 -999.00   +8.80   6.02     84   +6.30 1 1 1 2 1     0    0 2.35 -22.27 ZNESW 6.5 6.0 115.6 8.6 9.7 -25.1 9.7 -23.8 9.4 -21.7 9.7 -23.7
2026-04-15T22:46:57.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:46:57.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:46:57.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.865407
2026-04-15T22:46:57.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:46:57.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:46:57.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:46:57.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:46:57.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:46:57.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:46:47', tmtdew=3.04252, humidity=81.1911, cloud=0.0, wind=11.399, temperature=8.99376, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:46:11.165', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.007749999999999702, -0.019750000000000156, -0.1305000000000014, -0.019999999999999574, -0.02874999999999872, 0.0030000000000001137, -0.04875000000000007, 0.00849999999999973, -0.03500000000000014, -0.035250000000001336, -0.051000000000000156, -0.025000000000000355, 0.0182500000000001, 0.006999999999999673, 0.019000000000000128, 0.019249999999999545, -0.04449999999999932, 0.0030000000000001137, 0.0012499999999988631, 0.013999999999999346, 0.040749999999999176, 0.017250000000000654, 0.03974999999999973, 0.026999999999999247, -0.04300000000000104, -0.00975000000000037, 0.01950000000000074, 0.025500000000000966, 0.045000000000001705, 0.06300000000000061, 0.014000000000001123, -0.06425000000000125], zp_timestamp='2026-04-15T20:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:46:57.577 [DEBUG] [Thread-27071] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:46:57.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:46:57.787 [DEBUG] [Thread-27074] [transport.py] [_log()] starting thread (client mode): 0xf1336a70
2026-04-15T22:46:57.788 [DEBUG] [Thread-27074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:46:57.802 [DEBUG] [Thread-27074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:46:57.802 [INFO] [Thread-27074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:46:57.809 [DEBUG] [Thread-27074] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:46:57.810 [DEBUG] [Thread-27074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:46:57.810 [DEBUG] [Thread-27074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:46:57.810 [DEBUG] [Thread-27074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:46:57.810 [DEBUG] [Thread-27074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:46:57.810 [DEBUG] [Thread-27074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:46:57.810 [DEBUG] [Thread-27074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:46:57.810 [DEBUG] [Thread-27074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:46:57.810 [DEBUG] [Thread-27074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:46:57.810 [DEBUG] [Thread-27074] [transport.py] [_log()] client lang: <none>
2026-04-15T22:46:57.810 [DEBUG] [Thread-27074] [transport.py] [_log()] server lang: <none>
2026-04-15T22:46:57.810 [DEBUG] [Thread-27074] [transport.py] [_log()] kex follows: False
2026-04-15T22:46:57.810 [DEBUG] [Thread-27074] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:46:57.811 [DEBUG] [Thread-27074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:46:57.811 [DEBUG] [Thread-27074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:46:57.811 [DEBUG] [Thread-27074] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:46:57.811 [DEBUG] [Thread-27074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:46:57.811 [DEBUG] [Thread-27074] [transport.py] [_log()] Compression: none
2026-04-15T22:46:57.811 [DEBUG] [Thread-27074] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:46:57.867 [DEBUG] [Thread-27074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:46:57.867 [DEBUG] [Thread-27074] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:46:57.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:46:57.868 [DEBUG] [Thread-27074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:46:57.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:46:57.924 [DEBUG] [Thread-27074] [transport.py] [_log()] userauth is OK
2026-04-15T22:46:57.924 [DEBUG] [Thread-27074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:46:57.925 [DEBUG] [Thread-27074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:46:57.925 [DEBUG] [Thread-27074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:46:57.925 [DEBUG] [Thread-27074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:46:57.950 [INFO] [Thread-27074] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:46:57.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:46:57.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:46:58.726 [DEBUG] [Thread-27074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:46:58.726 [DEBUG] [Thread-27074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:46:58.774 [DEBUG] [Thread-27074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:46:58.774 [DEBUG] [Thread-27074] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:46:58.783 [DEBUG] [Thread-27074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:46:58.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:46:58.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')
2026-04-15T22:46: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
2026-04-15T22:46:58.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:46:58.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:46:58.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:46:58.818 [DEBUG] [Thread-27074] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:47:04.749 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:47:04.751 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:47:06.315 [DEBUG] [Thread-27076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:47:21.353 [DEBUG] [Thread-27077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:47:28.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:47:28.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:47:28.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
2026-04-15T22:47:29.718 [DEBUG] [Thread-27078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:47:30.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 46, 47), 3.04252, 81.1911, 0.0, 11.399, 8.99376, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:47:30.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:46:47
2026-04-15T22:47:30.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:47:31.084 [DEBUG] [Thread-27079] [transport.py] [_log()] starting thread (client mode): 0xee9c7f40
2026-04-15T22:47:31.084 [DEBUG] [Thread-27079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:47:31.104 [DEBUG] [Thread-27079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:47:31.104 [INFO] [Thread-27079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:47:31.107 [DEBUG] [Thread-27079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:47:31.107 [DEBUG] [Thread-27079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:47:31.107 [DEBUG] [Thread-27079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:47:31.107 [DEBUG] [Thread-27079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:47:31.107 [DEBUG] [Thread-27079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:47:31.107 [DEBUG] [Thread-27079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:47:31.107 [DEBUG] [Thread-27079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:47:31.107 [DEBUG] [Thread-27079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:47:31.107 [DEBUG] [Thread-27079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:47:31.107 [DEBUG] [Thread-27079] [transport.py] [_log()] client lang: <none>
2026-04-15T22:47:31.107 [DEBUG] [Thread-27079] [transport.py] [_log()] server lang: <none>
2026-04-15T22:47:31.108 [DEBUG] [Thread-27079] [transport.py] [_log()] kex follows: False
2026-04-15T22:47:31.108 [DEBUG] [Thread-27079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:47:31.108 [DEBUG] [Thread-27079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:47:31.108 [DEBUG] [Thread-27079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:47:31.108 [DEBUG] [Thread-27079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:47:31.108 [DEBUG] [Thread-27079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:47:31.108 [DEBUG] [Thread-27079] [transport.py] [_log()] Compression: none
2026-04-15T22:47:31.108 [DEBUG] [Thread-27079] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:47:31.128 [DEBUG] [Thread-27079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:47:31.129 [DEBUG] [Thread-27079] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:47:31.129 [DEBUG] [Thread-27079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:47:31.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:47:31.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:47:31.130 [DEBUG] [Thread-27079] [transport.py] [_log()] userauth is OK
2026-04-15T22:47:31.130 [DEBUG] [Thread-27079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:47:31.130 [DEBUG] [Thread-27079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:47:31.130 [DEBUG] [Thread-27079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:47:31.131 [DEBUG] [Thread-27079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:47:31.154 [INFO] [Thread-27079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:47:31.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:47:31.965 [DEBUG] [Thread-27079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:47:31.965 [DEBUG] [Thread-27079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:47:31.966 [DEBUG] [Thread-27079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:47:32.006 [DEBUG] [Thread-27079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:47:32.006 [DEBUG] [Thread-27079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:47:32.009 [DEBUG] [Thread-27079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:47:32.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:47:32.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:47:32.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:47:32.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:47:32.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:47:32.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:47:32.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:47:32.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:47:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:47:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.865754 -999.00   +8.90   6.23     84   +6.30 1 1 1 2 1     0    0 2.35 -22.18 ZNESW 6.8 6.2 113.2 8.5 9.7 -25.1 9.7 -23.7 9.4 -21.6 9.7 -23.5
2026-04-15T22:47:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:47:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:47:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.865754
2026-04-15T22:47:32.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:47:32.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:47:32.036 [DEBUG] [Thread-27079] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:47:32.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:47:32.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:47:32.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:47:32.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:46:47', tmtdew=3.04252, humidity=81.1911, cloud=0.0, wind=11.399, temperature=8.99376, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:46:41.146', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.007749999999999702, -0.019750000000000156, -0.1305000000000014, -0.019999999999999574, -0.02874999999999872, 0.0030000000000001137, -0.04875000000000007, 0.00849999999999973, -0.03500000000000014, -0.035250000000001336, -0.051000000000000156, -0.025000000000000355, 0.0182500000000001, 0.006999999999999673, 0.019000000000000128, 0.019249999999999545, -0.04449999999999932, 0.0030000000000001137, 0.0012499999999988631, 0.013999999999999346, 0.040749999999999176, 0.017250000000000654, 0.03974999999999973, 0.026999999999999247, -0.04300000000000104, -0.00975000000000037, 0.01950000000000074, 0.025500000000000966, 0.045000000000001705, 0.06300000000000061, 0.014000000000001123, -0.06425000000000125], zp_timestamp='2026-04-15T20:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:47:32.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:47:32.293 [DEBUG] [Thread-27082] [transport.py] [_log()] starting thread (client mode): 0xee9c7f70
2026-04-15T22:47:32.293 [DEBUG] [Thread-27082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:47:32.308 [DEBUG] [Thread-27082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:47:32.308 [INFO] [Thread-27082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:47:32.315 [DEBUG] [Thread-27082] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:47:32.315 [DEBUG] [Thread-27082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:47:32.315 [DEBUG] [Thread-27082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:47:32.315 [DEBUG] [Thread-27082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:47:32.315 [DEBUG] [Thread-27082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:47:32.315 [DEBUG] [Thread-27082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:47:32.315 [DEBUG] [Thread-27082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:47:32.316 [DEBUG] [Thread-27082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:47:32.316 [DEBUG] [Thread-27082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:47:32.316 [DEBUG] [Thread-27082] [transport.py] [_log()] client lang: <none>
2026-04-15T22:47:32.316 [DEBUG] [Thread-27082] [transport.py] [_log()] server lang: <none>
2026-04-15T22:47:32.316 [DEBUG] [Thread-27082] [transport.py] [_log()] kex follows: False
2026-04-15T22:47:32.316 [DEBUG] [Thread-27082] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:47:32.316 [DEBUG] [Thread-27082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:47:32.316 [DEBUG] [Thread-27082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:47:32.316 [DEBUG] [Thread-27082] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:47:32.316 [DEBUG] [Thread-27082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:47:32.316 [DEBUG] [Thread-27082] [transport.py] [_log()] Compression: none
2026-04-15T22:47:32.317 [DEBUG] [Thread-27082] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:47:32.372 [DEBUG] [Thread-27082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:47:32.372 [DEBUG] [Thread-27082] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:47:32.373 [DEBUG] [Thread-27082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:47:32.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:47:32.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:47:32.429 [DEBUG] [Thread-27082] [transport.py] [_log()] userauth is OK
2026-04-15T22:47:32.429 [DEBUG] [Thread-27082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:47:32.429 [DEBUG] [Thread-27082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:47:32.429 [DEBUG] [Thread-27082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:47:32.429 [DEBUG] [Thread-27082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:47:32.460 [INFO] [Thread-27082] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:47:32.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:47:32.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:47:33.280 [DEBUG] [Thread-27082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:47:33.280 [DEBUG] [Thread-27082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:47:33.327 [DEBUG] [Thread-27082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:47:33.327 [DEBUG] [Thread-27082] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:47:33.335 [DEBUG] [Thread-27082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:47:33.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:47:33.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')
2026-04-15T22:47:33.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
2026-04-15T22:47:33.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:47:33.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:47:33.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:47:33.367 [DEBUG] [Thread-27082] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:47:36.382 [DEBUG] [Thread-27084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:47:51.418 [DEBUG] [Thread-27085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:48:03.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:48:03.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:48:03.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
2026-04-15T22:48:04.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 47, 23), 3.22678, 80.0624, 0.0, 11.0819, 8.88029, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:48:04.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:47:23
2026-04-15T22:48:04.953 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:48:04.954 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:48:05.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:48:05.581 [DEBUG] [Thread-27086] [transport.py] [_log()] starting thread (client mode): 0xf1336ad0
2026-04-15T22:48:05.581 [DEBUG] [Thread-27086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:48:05.600 [DEBUG] [Thread-27086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:48:05.600 [INFO] [Thread-27086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:48:05.603 [DEBUG] [Thread-27086] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:48:05.603 [DEBUG] [Thread-27086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:48:05.603 [DEBUG] [Thread-27086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:48:05.603 [DEBUG] [Thread-27086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:48:05.603 [DEBUG] [Thread-27086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:48:05.603 [DEBUG] [Thread-27086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:48:05.603 [DEBUG] [Thread-27086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:48:05.604 [DEBUG] [Thread-27086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:48:05.604 [DEBUG] [Thread-27086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:48:05.604 [DEBUG] [Thread-27086] [transport.py] [_log()] client lang: <none>
2026-04-15T22:48:05.604 [DEBUG] [Thread-27086] [transport.py] [_log()] server lang: <none>
2026-04-15T22:48:05.604 [DEBUG] [Thread-27086] [transport.py] [_log()] kex follows: False
2026-04-15T22:48:05.604 [DEBUG] [Thread-27086] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:48:05.604 [DEBUG] [Thread-27086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:48:05.604 [DEBUG] [Thread-27086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:48:05.604 [DEBUG] [Thread-27086] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:48:05.604 [DEBUG] [Thread-27086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:48:05.604 [DEBUG] [Thread-27086] [transport.py] [_log()] Compression: none
2026-04-15T22:48:05.605 [DEBUG] [Thread-27086] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:48:05.622 [DEBUG] [Thread-27086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:48:05.623 [DEBUG] [Thread-27086] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:48:05.623 [DEBUG] [Thread-27086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:48:05.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:48:05.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:48:05.624 [DEBUG] [Thread-27086] [transport.py] [_log()] userauth is OK
2026-04-15T22:48:05.624 [DEBUG] [Thread-27086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:48:05.625 [DEBUG] [Thread-27086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:48:05.625 [DEBUG] [Thread-27086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:48:05.625 [DEBUG] [Thread-27086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:48:05.642 [INFO] [Thread-27086] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:48:05.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:48:06.433 [DEBUG] [Thread-27086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:48:06.434 [DEBUG] [Thread-27086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:48:06.434 [DEBUG] [Thread-27086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:48:06.447 [DEBUG] [Thread-27088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:48:06.475 [DEBUG] [Thread-27086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:48:06.475 [DEBUG] [Thread-27086] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:48:06.477 [DEBUG] [Thread-27086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:48:06.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:48:06.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:48:06.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:48:06.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:48:06.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:48:06.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:48:06.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:48:06.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:48:06.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:48:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.866102 -999.00   +8.90   5.68     84   +6.40 1 1 1 2 1     0    0 2.29 -22.17 ZNESW 6.6 5.7 111.2 7.8 9.8 -25.0 9.7 -23.8 9.4 -21.7 9.7 -23.6
2026-04-15T22:48:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:48:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:48:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.866102
2026-04-15T22:48:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:48:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:48:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:48:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:48:06.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:48:06.499 [DEBUG] [Thread-27086] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:48:06.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:47:23', tmtdew=3.22678, humidity=80.0624, cloud=0.0, wind=11.0819, temperature=8.88029, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:47:11.213', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.04875000000000007, -0.027749999999999275, -0.1465000000000014, -0.03849999999999909, -0.00274999999999892, -0.03300000000000125, -0.02874999999999872, -0.007500000000000284, -0.08200000000000074, -0.07975000000000065, -0.05150000000000077, -0.011000000000001009, 0.01624999999999943, -0.0030000000000001137, 0.01699999999999946, 0.00024999999999941735, -0.0495000000000001, -0.011000000000001009, 0.00024999999999941735, -0.004000000000001336, 0.053749999999999076, -0.023749999999999716, 0.010749999999999815, 0.007999999999999119, -0.10849999999999937, -0.01624999999999943, -0.018499999999999517, 0.021000000000000796, 0.02850000000000108, 0.07600000000000051, 0.01699999999999946, -0.09775000000000134], zp_timestamp='2026-04-15T20:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:48:06.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:48:06.719 [DEBUG] [Thread-27090] [transport.py] [_log()] starting thread (client mode): 0xee9c3a00
2026-04-15T22:48:06.719 [DEBUG] [Thread-27090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:48:06.734 [DEBUG] [Thread-27090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:48:06.734 [INFO] [Thread-27090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:48:06.742 [DEBUG] [Thread-27090] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:48:06.742 [DEBUG] [Thread-27090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:48:06.742 [DEBUG] [Thread-27090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:48:06.742 [DEBUG] [Thread-27090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:48:06.742 [DEBUG] [Thread-27090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:48:06.742 [DEBUG] [Thread-27090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:48:06.742 [DEBUG] [Thread-27090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:48:06.742 [DEBUG] [Thread-27090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:48:06.742 [DEBUG] [Thread-27090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:48:06.742 [DEBUG] [Thread-27090] [transport.py] [_log()] client lang: <none>
2026-04-15T22:48:06.742 [DEBUG] [Thread-27090] [transport.py] [_log()] server lang: <none>
2026-04-15T22:48:06.743 [DEBUG] [Thread-27090] [transport.py] [_log()] kex follows: False
2026-04-15T22:48:06.743 [DEBUG] [Thread-27090] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:48:06.743 [DEBUG] [Thread-27090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:48:06.743 [DEBUG] [Thread-27090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:48:06.743 [DEBUG] [Thread-27090] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:48:06.743 [DEBUG] [Thread-27090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:48:06.743 [DEBUG] [Thread-27090] [transport.py] [_log()] Compression: none
2026-04-15T22:48:06.743 [DEBUG] [Thread-27090] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:48:06.805 [DEBUG] [Thread-27090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:48:06.805 [DEBUG] [Thread-27090] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:48:06.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:48:06.806 [DEBUG] [Thread-27090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:48:06.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:48:06.861 [DEBUG] [Thread-27090] [transport.py] [_log()] userauth is OK
2026-04-15T22:48:06.861 [DEBUG] [Thread-27090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:48:06.861 [DEBUG] [Thread-27090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:48:06.862 [DEBUG] [Thread-27090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:48:06.862 [DEBUG] [Thread-27090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:48:06.885 [INFO] [Thread-27090] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:48:06.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:48:06.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:48:07.719 [DEBUG] [Thread-27090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:48:07.720 [DEBUG] [Thread-27090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:48:07.771 [DEBUG] [Thread-27090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:48:07.771 [DEBUG] [Thread-27090] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:48:07.780 [DEBUG] [Thread-27090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:48:07.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:48:07.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')
2026-04-15T22:48:07.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
2026-04-15T22:48:07.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:48:07.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:48:07.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:48:07.816 [DEBUG] [Thread-27090] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:48:21.474 [DEBUG] [Thread-27092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:48:29.881 [DEBUG] [Thread-27093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:48:36.513 [DEBUG] [Thread-27094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:48:37.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:48:37.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:48:37.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
2026-04-15T22:48:39.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 47, 58), 3.22422, 80.0789, 0.0, 8.69976, 8.89688, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:48:39.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:47:58
2026-04-15T22:48:39.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:48:40.061 [DEBUG] [Thread-27095] [transport.py] [_log()] starting thread (client mode): 0xee990070
2026-04-15T22:48:40.061 [DEBUG] [Thread-27095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:48:40.081 [DEBUG] [Thread-27095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:48:40.081 [INFO] [Thread-27095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:48:40.084 [DEBUG] [Thread-27095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:48:40.084 [DEBUG] [Thread-27095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:48:40.084 [DEBUG] [Thread-27095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:48:40.084 [DEBUG] [Thread-27095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:48:40.084 [DEBUG] [Thread-27095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:48:40.084 [DEBUG] [Thread-27095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:48:40.084 [DEBUG] [Thread-27095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:48:40.084 [DEBUG] [Thread-27095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:48:40.085 [DEBUG] [Thread-27095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:48:40.085 [DEBUG] [Thread-27095] [transport.py] [_log()] client lang: <none>
2026-04-15T22:48:40.085 [DEBUG] [Thread-27095] [transport.py] [_log()] server lang: <none>
2026-04-15T22:48:40.085 [DEBUG] [Thread-27095] [transport.py] [_log()] kex follows: False
2026-04-15T22:48:40.085 [DEBUG] [Thread-27095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:48:40.085 [DEBUG] [Thread-27095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:48:40.085 [DEBUG] [Thread-27095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:48:40.085 [DEBUG] [Thread-27095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:48:40.085 [DEBUG] [Thread-27095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:48:40.085 [DEBUG] [Thread-27095] [transport.py] [_log()] Compression: none
2026-04-15T22:48:40.085 [DEBUG] [Thread-27095] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:48:40.104 [DEBUG] [Thread-27095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:48:40.104 [DEBUG] [Thread-27095] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:48:40.104 [DEBUG] [Thread-27095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:48:40.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:48:40.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:48:40.105 [DEBUG] [Thread-27095] [transport.py] [_log()] userauth is OK
2026-04-15T22:48:40.105 [DEBUG] [Thread-27095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:48:40.106 [DEBUG] [Thread-27095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:48:40.106 [DEBUG] [Thread-27095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:48:40.106 [DEBUG] [Thread-27095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:48:40.124 [INFO] [Thread-27095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:48:40.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:48:40.928 [DEBUG] [Thread-27095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:48:40.928 [DEBUG] [Thread-27095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:48:40.928 [DEBUG] [Thread-27095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:48:40.969 [DEBUG] [Thread-27095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:48:40.969 [DEBUG] [Thread-27095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:48:40.972 [DEBUG] [Thread-27095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:48:40.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:48:40.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:48:40.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:48:40.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:48:40.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:48:40.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:48:40.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:48:40.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:48:40.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:48:40.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.866449 -999.00   +8.90   4.56     84   +6.40 1 1 1 2 1     0    0 2.27 -23.57 ZNESW 5.6 4.6 107.3 7.6 9.8 -25.0 9.7 -23.8 9.4 -21.8 9.7 -23.5
2026-04-15T22:48:40.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:48:40.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:48:40.998 [DEBUG] [Thread-27095] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:48:40.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.866449
2026-04-15T22:48:41.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:48:41.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:48:41.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:48:41.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:48:41.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:48:41.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:47:58', tmtdew=3.22422, humidity=80.0789, cloud=0.0, wind=8.69976, temperature=8.89688, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:47:41.194', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.04875000000000007, -0.027749999999999275, -0.1465000000000014, -0.03849999999999909, -0.00274999999999892, -0.03300000000000125, -0.02874999999999872, -0.007500000000000284, -0.08200000000000074, -0.07975000000000065, -0.05150000000000077, -0.011000000000001009, 0.01624999999999943, -0.0030000000000001137, 0.01699999999999946, 0.00024999999999941735, -0.0495000000000001, -0.011000000000001009, 0.00024999999999941735, -0.004000000000001336, 0.053749999999999076, -0.023749999999999716, 0.010749999999999815, 0.007999999999999119, -0.10849999999999937, -0.01624999999999943, -0.018499999999999517, 0.021000000000000796, 0.02850000000000108, 0.07600000000000051, 0.01699999999999946, -0.09775000000000134], zp_timestamp='2026-04-15T20:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:48:41.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:48:41.258 [DEBUG] [Thread-27098] [transport.py] [_log()] starting thread (client mode): 0xf1335cc0
2026-04-15T22:48:41.258 [DEBUG] [Thread-27098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:48:41.272 [DEBUG] [Thread-27098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:48:41.272 [INFO] [Thread-27098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:48:41.281 [DEBUG] [Thread-27098] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:48:41.281 [DEBUG] [Thread-27098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:48:41.282 [DEBUG] [Thread-27098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:48:41.282 [DEBUG] [Thread-27098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:48:41.282 [DEBUG] [Thread-27098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:48:41.282 [DEBUG] [Thread-27098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:48:41.282 [DEBUG] [Thread-27098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:48:41.282 [DEBUG] [Thread-27098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:48:41.282 [DEBUG] [Thread-27098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:48:41.282 [DEBUG] [Thread-27098] [transport.py] [_log()] client lang: <none>
2026-04-15T22:48:41.282 [DEBUG] [Thread-27098] [transport.py] [_log()] server lang: <none>
2026-04-15T22:48:41.282 [DEBUG] [Thread-27098] [transport.py] [_log()] kex follows: False
2026-04-15T22:48:41.282 [DEBUG] [Thread-27098] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:48:41.282 [DEBUG] [Thread-27098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:48:41.283 [DEBUG] [Thread-27098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:48:41.283 [DEBUG] [Thread-27098] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:48:41.283 [DEBUG] [Thread-27098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:48:41.283 [DEBUG] [Thread-27098] [transport.py] [_log()] Compression: none
2026-04-15T22:48:41.283 [DEBUG] [Thread-27098] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:48:41.337 [DEBUG] [Thread-27098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:48:41.337 [DEBUG] [Thread-27098] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:48:41.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:48:41.338 [DEBUG] [Thread-27098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:48:41.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:48:41.394 [DEBUG] [Thread-27098] [transport.py] [_log()] userauth is OK
2026-04-15T22:48:41.394 [DEBUG] [Thread-27098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:48:41.394 [DEBUG] [Thread-27098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:48:41.394 [DEBUG] [Thread-27098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:48:41.394 [DEBUG] [Thread-27098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:48:41.419 [INFO] [Thread-27098] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:48:41.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:48:41.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:48:42.276 [DEBUG] [Thread-27098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:48:42.276 [DEBUG] [Thread-27098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:48:42.324 [DEBUG] [Thread-27098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:48:42.324 [DEBUG] [Thread-27098] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:48:42.334 [DEBUG] [Thread-27098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:48:42.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:48:42.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')
2026-04-15T22:48:42.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
2026-04-15T22:48:42.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:48:42.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:48:42.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:48:42.370 [DEBUG] [Thread-27098] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:48:51.542 [DEBUG] [Thread-27100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:49:05.158 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:49:05.159 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:49:06.584 [DEBUG] [Thread-27101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:49:12.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:49:12.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:49:12.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
2026-04-15T22:49:13.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 48, 34), 3.05357, 81.1247, 0.0, 10.7287, 8.96059, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:49:13.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:48:34
2026-04-15T22:49:14.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:49:14.610 [DEBUG] [Thread-27102] [transport.py] [_log()] starting thread (client mode): 0xf1364bb0
2026-04-15T22:49:14.611 [DEBUG] [Thread-27102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:49:14.631 [DEBUG] [Thread-27102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:49:14.631 [INFO] [Thread-27102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:49:14.634 [DEBUG] [Thread-27102] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:49:14.634 [DEBUG] [Thread-27102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:49:14.634 [DEBUG] [Thread-27102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:49:14.634 [DEBUG] [Thread-27102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:49:14.635 [DEBUG] [Thread-27102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:49:14.635 [DEBUG] [Thread-27102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:49:14.635 [DEBUG] [Thread-27102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:49:14.635 [DEBUG] [Thread-27102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:49:14.635 [DEBUG] [Thread-27102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:49:14.635 [DEBUG] [Thread-27102] [transport.py] [_log()] client lang: <none>
2026-04-15T22:49:14.635 [DEBUG] [Thread-27102] [transport.py] [_log()] server lang: <none>
2026-04-15T22:49:14.635 [DEBUG] [Thread-27102] [transport.py] [_log()] kex follows: False
2026-04-15T22:49:14.635 [DEBUG] [Thread-27102] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:49:14.635 [DEBUG] [Thread-27102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:49:14.635 [DEBUG] [Thread-27102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:49:14.636 [DEBUG] [Thread-27102] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:49:14.636 [DEBUG] [Thread-27102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:49:14.636 [DEBUG] [Thread-27102] [transport.py] [_log()] Compression: none
2026-04-15T22:49:14.636 [DEBUG] [Thread-27102] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:49:14.652 [DEBUG] [Thread-27102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:49:14.653 [DEBUG] [Thread-27102] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:49:14.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:49:14.653 [DEBUG] [Thread-27102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:49:14.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:49:14.654 [DEBUG] [Thread-27102] [transport.py] [_log()] userauth is OK
2026-04-15T22:49:14.655 [DEBUG] [Thread-27102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:49:14.655 [DEBUG] [Thread-27102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:49:14.655 [DEBUG] [Thread-27102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:49:14.655 [DEBUG] [Thread-27102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:49:14.673 [INFO] [Thread-27102] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:49:14.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:49:15.484 [DEBUG] [Thread-27102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:49:15.485 [DEBUG] [Thread-27102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:49:15.485 [DEBUG] [Thread-27102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:49:15.525 [DEBUG] [Thread-27102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:49:15.525 [DEBUG] [Thread-27102] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:49:15.528 [DEBUG] [Thread-27102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:49:15.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:49:15.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:49:15.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:49:15.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:49:15.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:49:15.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:49:15.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:49:15.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:49:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:49:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.867143 -999.00   +9.00   6.42     83   +6.40 1 1 1 2 1     0    0 2.22 -23.40 ZNESW 7.0 6.4 121.8 7.8 9.7 -25.1 9.7 -23.7 9.4 -21.6 9.6 -23.6
2026-04-15T22:49:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:49:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:49:15.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.867143
2026-04-15T22:49:15.552 [DEBUG] [Thread-27102] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:49:15.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:49:15.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:49:15.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:49:15.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:49:15.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:49:15.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:48:34', tmtdew=3.05357, humidity=81.1247, cloud=0.0, wind=10.7287, temperature=8.96059, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:48:41.155', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.04875000000000007, -0.027749999999999275, -0.1465000000000014, -0.03849999999999909, -0.00274999999999892, -0.03300000000000125, -0.02874999999999872, -0.007500000000000284, -0.08200000000000074, -0.07975000000000065, -0.05150000000000077, -0.011000000000001009, 0.01624999999999943, -0.0030000000000001137, 0.01699999999999946, 0.00024999999999941735, -0.0495000000000001, -0.011000000000001009, 0.00024999999999941735, -0.004000000000001336, 0.053749999999999076, -0.023749999999999716, 0.010749999999999815, 0.007999999999999119, -0.10849999999999937, -0.01624999999999943, -0.018499999999999517, 0.021000000000000796, 0.02850000000000108, 0.07600000000000051, 0.01699999999999946, -0.09775000000000134], zp_timestamp='2026-04-15T20:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:49:15.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:49:15.810 [DEBUG] [Thread-27105] [transport.py] [_log()] starting thread (client mode): 0xf1337790
2026-04-15T22:49:15.810 [DEBUG] [Thread-27105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:49:15.829 [DEBUG] [Thread-27105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:49:15.829 [INFO] [Thread-27105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:49:15.837 [DEBUG] [Thread-27105] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:49:15.837 [DEBUG] [Thread-27105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:49:15.837 [DEBUG] [Thread-27105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:49:15.837 [DEBUG] [Thread-27105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:49:15.837 [DEBUG] [Thread-27105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:49:15.837 [DEBUG] [Thread-27105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:49:15.837 [DEBUG] [Thread-27105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:49:15.837 [DEBUG] [Thread-27105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:49:15.837 [DEBUG] [Thread-27105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:49:15.837 [DEBUG] [Thread-27105] [transport.py] [_log()] client lang: <none>
2026-04-15T22:49:15.837 [DEBUG] [Thread-27105] [transport.py] [_log()] server lang: <none>
2026-04-15T22:49:15.838 [DEBUG] [Thread-27105] [transport.py] [_log()] kex follows: False
2026-04-15T22:49:15.838 [DEBUG] [Thread-27105] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:49:15.838 [DEBUG] [Thread-27105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:49:15.838 [DEBUG] [Thread-27105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:49:15.838 [DEBUG] [Thread-27105] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:49:15.838 [DEBUG] [Thread-27105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:49:15.838 [DEBUG] [Thread-27105] [transport.py] [_log()] Compression: none
2026-04-15T22:49:15.838 [DEBUG] [Thread-27105] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:49:15.893 [DEBUG] [Thread-27105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:49:15.894 [DEBUG] [Thread-27105] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:49:15.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:49:15.894 [DEBUG] [Thread-27105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:49:15.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:49:15.950 [DEBUG] [Thread-27105] [transport.py] [_log()] userauth is OK
2026-04-15T22:49:15.950 [DEBUG] [Thread-27105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:49:15.950 [DEBUG] [Thread-27105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:49:15.950 [DEBUG] [Thread-27105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:49:15.950 [DEBUG] [Thread-27105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:49:15.967 [INFO] [Thread-27105] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:49:15.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:49:15.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:49:16.776 [DEBUG] [Thread-27105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:49:16.776 [DEBUG] [Thread-27105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:49:16.824 [DEBUG] [Thread-27105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:49:16.824 [DEBUG] [Thread-27105] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:49:16.833 [DEBUG] [Thread-27105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:49:16.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:49:16.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')
2026-04-15T22:49:16.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
2026-04-15T22:49:16.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:49:16.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:49:16.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:49:16.868 [DEBUG] [Thread-27105] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:49:21.612 [DEBUG] [Thread-27107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:49:30.045 [DEBUG] [Thread-27108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:49:32.958 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:49:36.079 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:49:36.658 [DEBUG] [Thread-27109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:49:41.135 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:49:46.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:49:46.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:49:46.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
2026-04-15T22:49:47.662 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:49:48.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 49, 10), 3.17678, 80.0624, 0.0, 9.1584, 8.8803, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:49:48.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:49:10
2026-04-15T22:49:48.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:49:49.100 [DEBUG] [Thread-27110] [transport.py] [_log()] starting thread (client mode): 0xf1366170
2026-04-15T22:49:49.100 [DEBUG] [Thread-27110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:49:49.123 [DEBUG] [Thread-27110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:49:49.123 [INFO] [Thread-27110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:49:49.126 [DEBUG] [Thread-27110] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:49:49.127 [DEBUG] [Thread-27110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:49:49.127 [DEBUG] [Thread-27110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:49:49.127 [DEBUG] [Thread-27110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:49:49.127 [DEBUG] [Thread-27110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:49:49.127 [DEBUG] [Thread-27110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:49:49.127 [DEBUG] [Thread-27110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:49:49.127 [DEBUG] [Thread-27110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:49:49.127 [DEBUG] [Thread-27110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:49:49.127 [DEBUG] [Thread-27110] [transport.py] [_log()] client lang: <none>
2026-04-15T22:49:49.127 [DEBUG] [Thread-27110] [transport.py] [_log()] server lang: <none>
2026-04-15T22:49:49.127 [DEBUG] [Thread-27110] [transport.py] [_log()] kex follows: False
2026-04-15T22:49:49.127 [DEBUG] [Thread-27110] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:49:49.128 [DEBUG] [Thread-27110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:49:49.128 [DEBUG] [Thread-27110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:49:49.128 [DEBUG] [Thread-27110] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:49:49.128 [DEBUG] [Thread-27110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:49:49.128 [DEBUG] [Thread-27110] [transport.py] [_log()] Compression: none
2026-04-15T22:49:49.128 [DEBUG] [Thread-27110] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:49:49.136 [DEBUG] [Thread-27110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:49:49.137 [DEBUG] [Thread-27110] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:49:49.137 [DEBUG] [Thread-27110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:49:49.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:49:49.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:49:49.138 [DEBUG] [Thread-27110] [transport.py] [_log()] userauth is OK
2026-04-15T22:49:49.138 [DEBUG] [Thread-27110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:49:49.138 [DEBUG] [Thread-27110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:49:49.138 [DEBUG] [Thread-27110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:49:49.138 [DEBUG] [Thread-27110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:49:49.160 [INFO] [Thread-27110] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:49:49.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:49:49.958 [DEBUG] [Thread-27110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:49:49.958 [DEBUG] [Thread-27110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:49:49.959 [DEBUG] [Thread-27110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:49:49.999 [DEBUG] [Thread-27110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:49:49.999 [DEBUG] [Thread-27110] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:49:50.002 [DEBUG] [Thread-27110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:49:50.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:49:50.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:49:50.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:49:50.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:49:50.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:49:50.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:49:50.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:49:50.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:49:50.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:49:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.867491 -999.00   +9.00   7.68     83   +6.40 1 1 1 2 1     0    0 2.17 -24.65 ZNESW 5.8 7.7 107.8 10.8 9.8 -25.0 9.7 -23.8 9.4 -21.5 9.7 -23.5
2026-04-15T22:49:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:49:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:49:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.867491
2026-04-15T22:49:50.023 [DEBUG] [Thread-27110] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:49:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:49:50.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:49:50.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:49:50.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:49:50.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:49:50.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:49:10', tmtdew=3.17678, humidity=80.0624, cloud=0.0, wind=9.1584, temperature=8.8803, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:49:11.222', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.04875000000000007, -0.027749999999999275, -0.1465000000000014, -0.03849999999999909, -0.00274999999999892, -0.03300000000000125, -0.02874999999999872, -0.007500000000000284, -0.08200000000000074, -0.07975000000000065, -0.05150000000000077, -0.011000000000001009, 0.01624999999999943, -0.0030000000000001137, 0.01699999999999946, 0.00024999999999941735, -0.0495000000000001, -0.011000000000001009, 0.00024999999999941735, -0.004000000000001336, 0.053749999999999076, -0.023749999999999716, 0.010749999999999815, 0.007999999999999119, -0.10849999999999937, -0.01624999999999943, -0.018499999999999517, 0.021000000000000796, 0.02850000000000108, 0.07600000000000051, 0.01699999999999946, -0.09775000000000134], zp_timestamp='2026-04-15T20:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:49:50.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:49:50.280 [DEBUG] [Thread-27113] [transport.py] [_log()] starting thread (client mode): 0xee9c24d0
2026-04-15T22:49:50.280 [DEBUG] [Thread-27113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:49:50.295 [DEBUG] [Thread-27113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:49:50.295 [INFO] [Thread-27113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:49:50.302 [DEBUG] [Thread-27113] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:49:50.303 [DEBUG] [Thread-27113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:49:50.303 [DEBUG] [Thread-27113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:49:50.303 [DEBUG] [Thread-27113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:49:50.303 [DEBUG] [Thread-27113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:49:50.303 [DEBUG] [Thread-27113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:49:50.303 [DEBUG] [Thread-27113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:49:50.303 [DEBUG] [Thread-27113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:49:50.303 [DEBUG] [Thread-27113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:49:50.303 [DEBUG] [Thread-27113] [transport.py] [_log()] client lang: <none>
2026-04-15T22:49:50.303 [DEBUG] [Thread-27113] [transport.py] [_log()] server lang: <none>
2026-04-15T22:49:50.304 [DEBUG] [Thread-27113] [transport.py] [_log()] kex follows: False
2026-04-15T22:49:50.304 [DEBUG] [Thread-27113] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:49:50.304 [DEBUG] [Thread-27113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:49:50.304 [DEBUG] [Thread-27113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:49:50.304 [DEBUG] [Thread-27113] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:49:50.304 [DEBUG] [Thread-27113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:49:50.304 [DEBUG] [Thread-27113] [transport.py] [_log()] Compression: none
2026-04-15T22:49:50.304 [DEBUG] [Thread-27113] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:49:50.357 [DEBUG] [Thread-27113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:49:50.358 [DEBUG] [Thread-27113] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:49:50.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:49:50.358 [DEBUG] [Thread-27113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:49:50.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:49:50.416 [DEBUG] [Thread-27113] [transport.py] [_log()] userauth is OK
2026-04-15T22:49:50.416 [DEBUG] [Thread-27113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:49:50.416 [DEBUG] [Thread-27113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:49:50.416 [DEBUG] [Thread-27113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:49:50.416 [DEBUG] [Thread-27113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:49:50.436 [INFO] [Thread-27113] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:49:50.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:49:50.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:49:51.277 [DEBUG] [Thread-27113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:49:51.278 [DEBUG] [Thread-27113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:49:51.325 [DEBUG] [Thread-27113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:49:51.325 [DEBUG] [Thread-27113] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:49:51.334 [DEBUG] [Thread-27113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:49:51.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:49:51.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')
2026-04-15T22:49:51.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
2026-04-15T22:49:51.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:49:51.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:49:51.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:49:51.370 [DEBUG] [Thread-27113] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:49:51.687 [DEBUG] [Thread-27115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:50:05.362 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:50:05.363 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:50:06.724 [DEBUG] [Thread-27116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:50:06.994 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:50:11.368 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:50:21.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:50:21.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:50:21.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
2026-04-15T22:50:21.757 [DEBUG] [Thread-27117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:50:22.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 49, 46), 3.04688, 81.1579, 0.0, 11.9282, 8.92742, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:50:22.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:49:46
2026-04-15T22:50:23.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:50:23.590 [DEBUG] [Thread-27118] [transport.py] [_log()] starting thread (client mode): 0xee9c3460
2026-04-15T22:50:23.590 [DEBUG] [Thread-27118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:50:23.609 [DEBUG] [Thread-27118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:50:23.609 [INFO] [Thread-27118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:50:23.612 [DEBUG] [Thread-27118] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:50:23.612 [DEBUG] [Thread-27118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:50:23.612 [DEBUG] [Thread-27118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:50:23.612 [DEBUG] [Thread-27118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:50:23.613 [DEBUG] [Thread-27118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:50:23.613 [DEBUG] [Thread-27118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:50:23.613 [DEBUG] [Thread-27118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:50:23.613 [DEBUG] [Thread-27118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:50:23.613 [DEBUG] [Thread-27118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:50:23.613 [DEBUG] [Thread-27118] [transport.py] [_log()] client lang: <none>
2026-04-15T22:50:23.613 [DEBUG] [Thread-27118] [transport.py] [_log()] server lang: <none>
2026-04-15T22:50:23.613 [DEBUG] [Thread-27118] [transport.py] [_log()] kex follows: False
2026-04-15T22:50:23.613 [DEBUG] [Thread-27118] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:50:23.613 [DEBUG] [Thread-27118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:50:23.614 [DEBUG] [Thread-27118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:50:23.614 [DEBUG] [Thread-27118] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:50:23.614 [DEBUG] [Thread-27118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:50:23.614 [DEBUG] [Thread-27118] [transport.py] [_log()] Compression: none
2026-04-15T22:50:23.614 [DEBUG] [Thread-27118] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:50:23.631 [DEBUG] [Thread-27118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:50:23.632 [DEBUG] [Thread-27118] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:50:23.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:50:23.632 [DEBUG] [Thread-27118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:50:23.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:50:23.633 [DEBUG] [Thread-27118] [transport.py] [_log()] userauth is OK
2026-04-15T22:50:23.633 [DEBUG] [Thread-27118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:50:23.634 [DEBUG] [Thread-27118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:50:23.634 [DEBUG] [Thread-27118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:50:23.634 [DEBUG] [Thread-27118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:50:23.668 [INFO] [Thread-27118] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:50:23.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:50:30.209 [DEBUG] [Thread-27120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:50:30.855 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:50:31.225 [DEBUG] [Thread-27118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:50:31.226 [DEBUG] [Thread-27118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:50:31.226 [DEBUG] [Thread-27118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:50:31.266 [DEBUG] [Thread-27118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:50:31.266 [DEBUG] [Thread-27118] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:50:31.269 [DEBUG] [Thread-27118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:50:31.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:50:31.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:50:31.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:50:31.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:50:31.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:50:31.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:50:31.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:50:31.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:50:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:50:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.867838 -999.00   +9.10   8.11     83   +6.40 1 1 1 2 1     0    0 2.21 -25.67 ZNESW 6.8 8.1 94.6 9.1 9.8 -25.0 9.6 -23.7 9.4 -21.6 9.7 -23.5
2026-04-15T22:50:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:50:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:50:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.867838
2026-04-15T22:50:31.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:50:31.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:50:31.425 [DEBUG] [Thread-27118] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:50:31.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:50:31.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:50:31.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:50:31.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:49:46', tmtdew=3.04688, humidity=81.1579, cloud=0.0, wind=11.9282, temperature=8.92742, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:49:41.203', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.04875000000000007, -0.027749999999999275, -0.1465000000000014, -0.03849999999999909, -0.00274999999999892, -0.03300000000000125, -0.02874999999999872, -0.007500000000000284, -0.08200000000000074, -0.07975000000000065, -0.05150000000000077, -0.011000000000001009, 0.01624999999999943, -0.0030000000000001137, 0.01699999999999946, 0.00024999999999941735, -0.0495000000000001, -0.011000000000001009, 0.00024999999999941735, -0.004000000000001336, 0.053749999999999076, -0.023749999999999716, 0.010749999999999815, 0.007999999999999119, -0.10849999999999937, -0.01624999999999943, -0.018499999999999517, 0.021000000000000796, 0.02850000000000108, 0.07600000000000051, 0.01699999999999946, -0.09775000000000134], zp_timestamp='2026-04-15T20:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:50:31.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:50:31.682 [DEBUG] [Thread-27122] [transport.py] [_log()] starting thread (client mode): 0xee9c18d0
2026-04-15T22:50:31.683 [DEBUG] [Thread-27122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:50:31.697 [DEBUG] [Thread-27122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:50:31.697 [INFO] [Thread-27122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:50:31.705 [DEBUG] [Thread-27122] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:50:31.705 [DEBUG] [Thread-27122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:50:31.705 [DEBUG] [Thread-27122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:50:31.705 [DEBUG] [Thread-27122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:50:31.705 [DEBUG] [Thread-27122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:50:31.705 [DEBUG] [Thread-27122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:50:31.705 [DEBUG] [Thread-27122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:50:31.705 [DEBUG] [Thread-27122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:50:31.706 [DEBUG] [Thread-27122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:50:31.706 [DEBUG] [Thread-27122] [transport.py] [_log()] client lang: <none>
2026-04-15T22:50:31.706 [DEBUG] [Thread-27122] [transport.py] [_log()] server lang: <none>
2026-04-15T22:50:31.706 [DEBUG] [Thread-27122] [transport.py] [_log()] kex follows: False
2026-04-15T22:50:31.706 [DEBUG] [Thread-27122] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:50:31.706 [DEBUG] [Thread-27122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:50:31.706 [DEBUG] [Thread-27122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:50:31.706 [DEBUG] [Thread-27122] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:50:31.706 [DEBUG] [Thread-27122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:50:31.706 [DEBUG] [Thread-27122] [transport.py] [_log()] Compression: none
2026-04-15T22:50:31.706 [DEBUG] [Thread-27122] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:50:31.763 [DEBUG] [Thread-27122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:50:31.763 [DEBUG] [Thread-27122] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:50:31.764 [DEBUG] [Thread-27122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:50:31.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:50:31.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:50:31.819 [DEBUG] [Thread-27122] [transport.py] [_log()] userauth is OK
2026-04-15T22:50:31.820 [DEBUG] [Thread-27122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:50:31.820 [DEBUG] [Thread-27122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:50:31.820 [DEBUG] [Thread-27122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:50:31.820 [DEBUG] [Thread-27122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:50:31.849 [INFO] [Thread-27122] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:50:31.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:50:31.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:50:32.694 [DEBUG] [Thread-27122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:50:32.694 [DEBUG] [Thread-27122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:50:32.742 [DEBUG] [Thread-27122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:50:32.742 [DEBUG] [Thread-27122] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:50:32.751 [DEBUG] [Thread-27122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:50:32.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:50:32.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')
2026-04-15T22:50:32.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
2026-04-15T22:50:32.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:50:32.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:50:32.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:50:32.786 [DEBUG] [Thread-27122] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:50:35.248 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:50:36.788 [DEBUG] [Thread-27124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:50:41.370 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:50:45.775 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:50:51.834 [DEBUG] [Thread-27125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:51:02.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:51:02.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:51:02.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
2026-04-15T22:51:04.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 50, 21), 3.1701, 80.0955, 0.0, 9.75816, 8.84712, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:51:04.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:50:21
2026-04-15T22:51:04.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:51:05.008 [DEBUG] [Thread-27126] [transport.py] [_log()] starting thread (client mode): 0xee9071c0
2026-04-15T22:51:05.008 [DEBUG] [Thread-27126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:51:05.027 [DEBUG] [Thread-27126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:51:05.027 [INFO] [Thread-27126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:51:05.030 [DEBUG] [Thread-27126] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:51:05.030 [DEBUG] [Thread-27126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:51:05.030 [DEBUG] [Thread-27126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:51:05.030 [DEBUG] [Thread-27126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:51:05.030 [DEBUG] [Thread-27126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:51:05.031 [DEBUG] [Thread-27126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:51:05.031 [DEBUG] [Thread-27126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:51:05.031 [DEBUG] [Thread-27126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:51:05.031 [DEBUG] [Thread-27126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:51:05.031 [DEBUG] [Thread-27126] [transport.py] [_log()] client lang: <none>
2026-04-15T22:51:05.031 [DEBUG] [Thread-27126] [transport.py] [_log()] server lang: <none>
2026-04-15T22:51:05.031 [DEBUG] [Thread-27126] [transport.py] [_log()] kex follows: False
2026-04-15T22:51:05.031 [DEBUG] [Thread-27126] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:51:05.031 [DEBUG] [Thread-27126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:51:05.031 [DEBUG] [Thread-27126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:51:05.031 [DEBUG] [Thread-27126] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:51:05.031 [DEBUG] [Thread-27126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:51:05.031 [DEBUG] [Thread-27126] [transport.py] [_log()] Compression: none
2026-04-15T22:51:05.031 [DEBUG] [Thread-27126] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:51:05.039 [DEBUG] [Thread-27126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:51:05.039 [DEBUG] [Thread-27126] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:51:05.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:51:05.040 [DEBUG] [Thread-27126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:51:05.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:51:05.080 [DEBUG] [Thread-27126] [transport.py] [_log()] userauth is OK
2026-04-15T22:51:05.080 [DEBUG] [Thread-27126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:51:05.080 [DEBUG] [Thread-27126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:51:05.081 [DEBUG] [Thread-27126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:51:05.081 [DEBUG] [Thread-27126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:51:05.099 [INFO] [Thread-27126] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:51:05.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:51:05.575 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:51:05.576 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:51:05.893 [DEBUG] [Thread-27126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:51:05.894 [DEBUG] [Thread-27126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:51:05.894 [DEBUG] [Thread-27126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:51:05.935 [DEBUG] [Thread-27126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:51:05.935 [DEBUG] [Thread-27126] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:51:05.937 [DEBUG] [Thread-27126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:51:05.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:51:05.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:51:05.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:51:05.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:51:05.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:51:05.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:51:05.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:51:05.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:51:05.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:51:05.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.868185 -999.00   +9.10   6.57     83   +6.40 1 1 1 2 1     0    0 2.16 -26.13 ZNESW 7.5 6.6 108.0 9.1 9.7 -24.8 9.7 -23.7 9.4 -21.7 9.7 -23.5
2026-04-15T22:51:05.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:51:05.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:51:05.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.868185
2026-04-15T22:51:05.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:51:05.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:51:05.957 [DEBUG] [Thread-27126] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:51:05.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:51:05.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:51:05.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:51:05.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:50:21', tmtdew=3.1701, humidity=80.0955, cloud=0.0, wind=9.75816, temperature=8.84712, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:50:11.184', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.021749999999999048, 0.0022500000000000853, -0.10850000000000115, -0.06349999999999945, -0.021749999999999048, 0.00849999999999973, 0.0022500000000000853, 0.009499999999999176, -0.0519999999999996, -0.017750000000001265, -0.05799999999999983, -0.010000000000001563, 0.03125, 0.0024999999999995026, 0.0039999999999995595, 0.012249999999999872, -0.029500000000000526, 0.010999999999999233, 0.005749999999999034, 0.0, 0.03074999999999939, -0.010249999999999204, 0.019750000000000156, 0.04399999999999871, -0.06750000000000078, 0.00975000000000037, -0.01649999999999885, 0.021000000000000796, 0.0600000000000005, 0.057500000000000995, 0.026000000000001577, -0.06675000000000075], zp_timestamp='2026-04-15T20:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:51:06.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:51:06.168 [DEBUG] [Thread-27129] [transport.py] [_log()] starting thread (client mode): 0xee907940
2026-04-15T22:51:06.168 [DEBUG] [Thread-27129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:51:06.183 [DEBUG] [Thread-27129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:51:06.183 [INFO] [Thread-27129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:51:06.190 [DEBUG] [Thread-27129] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:51:06.190 [DEBUG] [Thread-27129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:51:06.190 [DEBUG] [Thread-27129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:51:06.190 [DEBUG] [Thread-27129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:51:06.190 [DEBUG] [Thread-27129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:51:06.190 [DEBUG] [Thread-27129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:51:06.191 [DEBUG] [Thread-27129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:51:06.191 [DEBUG] [Thread-27129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:51:06.191 [DEBUG] [Thread-27129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:51:06.191 [DEBUG] [Thread-27129] [transport.py] [_log()] client lang: <none>
2026-04-15T22:51:06.191 [DEBUG] [Thread-27129] [transport.py] [_log()] server lang: <none>
2026-04-15T22:51:06.191 [DEBUG] [Thread-27129] [transport.py] [_log()] kex follows: False
2026-04-15T22:51:06.191 [DEBUG] [Thread-27129] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:51:06.191 [DEBUG] [Thread-27129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:51:06.191 [DEBUG] [Thread-27129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:51:06.191 [DEBUG] [Thread-27129] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:51:06.191 [DEBUG] [Thread-27129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:51:06.192 [DEBUG] [Thread-27129] [transport.py] [_log()] Compression: none
2026-04-15T22:51:06.192 [DEBUG] [Thread-27129] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:51:06.251 [DEBUG] [Thread-27129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:51:06.251 [DEBUG] [Thread-27129] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:51:06.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:51:06.252 [DEBUG] [Thread-27129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:51:06.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:51:06.307 [DEBUG] [Thread-27129] [transport.py] [_log()] userauth is OK
2026-04-15T22:51:06.307 [DEBUG] [Thread-27129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:51:06.307 [DEBUG] [Thread-27129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:51:06.308 [DEBUG] [Thread-27129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:51:06.308 [DEBUG] [Thread-27129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:51:06.326 [INFO] [Thread-27129] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:51:06.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:51:06.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:51:06.865 [DEBUG] [Thread-27131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:51:07.132 [DEBUG] [Thread-27129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:51:07.132 [DEBUG] [Thread-27129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:51:07.180 [DEBUG] [Thread-27129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:51:07.180 [DEBUG] [Thread-27129] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:51:07.189 [DEBUG] [Thread-27129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:51:07.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:51:07.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')
2026-04-15T22:51:07.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
2026-04-15T22:51:07.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:51:07.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:51:07.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:51:07.228 [DEBUG] [Thread-27129] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:51:21.909 [DEBUG] [Thread-27132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:51:30.358 [DEBUG] [Thread-27133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:51:36.940 [DEBUG] [Thread-27134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:51:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:51:37.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:51:37.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
2026-04-15T22:51:38.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 50, 57), 3.21163, 80.1453, 0.0, 9.75816, 8.91371, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:51:38.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:50:57
2026-04-15T22:51:39.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:51:39.475 [DEBUG] [Thread-27135] [transport.py] [_log()] starting thread (client mode): 0xee9905b0
2026-04-15T22:51:39.475 [DEBUG] [Thread-27135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:51:39.496 [DEBUG] [Thread-27135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:51:39.496 [INFO] [Thread-27135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:51:39.498 [DEBUG] [Thread-27135] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:51:39.498 [DEBUG] [Thread-27135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:51:39.498 [DEBUG] [Thread-27135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:51:39.499 [DEBUG] [Thread-27135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:51:39.499 [DEBUG] [Thread-27135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:51:39.499 [DEBUG] [Thread-27135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:51:39.499 [DEBUG] [Thread-27135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:51:39.499 [DEBUG] [Thread-27135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:51:39.499 [DEBUG] [Thread-27135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:51:39.499 [DEBUG] [Thread-27135] [transport.py] [_log()] client lang: <none>
2026-04-15T22:51:39.499 [DEBUG] [Thread-27135] [transport.py] [_log()] server lang: <none>
2026-04-15T22:51:39.499 [DEBUG] [Thread-27135] [transport.py] [_log()] kex follows: False
2026-04-15T22:51:39.499 [DEBUG] [Thread-27135] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:51:39.499 [DEBUG] [Thread-27135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:51:39.500 [DEBUG] [Thread-27135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:51:39.500 [DEBUG] [Thread-27135] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:51:39.500 [DEBUG] [Thread-27135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:51:39.500 [DEBUG] [Thread-27135] [transport.py] [_log()] Compression: none
2026-04-15T22:51:39.500 [DEBUG] [Thread-27135] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:51:39.510 [DEBUG] [Thread-27135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:51:39.510 [DEBUG] [Thread-27135] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:51:39.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:51:39.511 [DEBUG] [Thread-27135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:51:39.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:51:39.512 [DEBUG] [Thread-27135] [transport.py] [_log()] userauth is OK
2026-04-15T22:51:39.512 [DEBUG] [Thread-27135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:51:39.512 [DEBUG] [Thread-27135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:51:39.512 [DEBUG] [Thread-27135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:51:39.513 [DEBUG] [Thread-27135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:51:39.530 [INFO] [Thread-27135] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:51:39.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:51:40.324 [DEBUG] [Thread-27135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:51:40.325 [DEBUG] [Thread-27135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:51:40.325 [DEBUG] [Thread-27135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:51:40.365 [DEBUG] [Thread-27135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:51:40.365 [DEBUG] [Thread-27135] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:51:40.368 [DEBUG] [Thread-27135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:51:40.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:51:40.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:51:40.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:51:40.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:51:40.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:51:40.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:51:40.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:51:40.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:51:40.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:51:40.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.868532 -999.00   +9.10   7.77     83   +6.40 1 1 1 2 1     0    0 2.20 -25.90 ZNESW 7.0 7.8 98.3 9.1 9.7 -24.9 9.7 -23.7 9.3 -21.5 9.7 -23.5
2026-04-15T22:51:40.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:51:40.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:51:40.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.868532
2026-04-15T22:51:40.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:51:40.389 [DEBUG] [Thread-27135] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:51:40.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:51:40.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:51:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:51:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:51:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:50:57', tmtdew=3.21163, humidity=80.1453, cloud=0.0, wind=9.75816, temperature=8.91371, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:50:41.165', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.021749999999999048, 0.0022500000000000853, -0.10850000000000115, -0.06349999999999945, -0.021749999999999048, 0.00849999999999973, 0.0022500000000000853, 0.009499999999999176, -0.0519999999999996, -0.017750000000001265, -0.05799999999999983, -0.010000000000001563, 0.03125, 0.0024999999999995026, 0.0039999999999995595, 0.012249999999999872, -0.029500000000000526, 0.010999999999999233, 0.005749999999999034, 0.0, 0.03074999999999939, -0.010249999999999204, 0.019750000000000156, 0.04399999999999871, -0.06750000000000078, 0.00975000000000037, -0.01649999999999885, 0.021000000000000796, 0.0600000000000005, 0.057500000000000995, 0.026000000000001577, -0.06675000000000075], zp_timestamp='2026-04-15T20:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:51:40.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:51:40.652 [DEBUG] [Thread-27138] [transport.py] [_log()] starting thread (client mode): 0xf1367790
2026-04-15T22:51:40.652 [DEBUG] [Thread-27138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:51:40.666 [DEBUG] [Thread-27138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:51:40.666 [INFO] [Thread-27138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:51:40.673 [DEBUG] [Thread-27138] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:51:40.673 [DEBUG] [Thread-27138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:51:40.673 [DEBUG] [Thread-27138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:51:40.673 [DEBUG] [Thread-27138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:51:40.673 [DEBUG] [Thread-27138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:51:40.673 [DEBUG] [Thread-27138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:51:40.674 [DEBUG] [Thread-27138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:51:40.674 [DEBUG] [Thread-27138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:51:40.674 [DEBUG] [Thread-27138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:51:40.674 [DEBUG] [Thread-27138] [transport.py] [_log()] client lang: <none>
2026-04-15T22:51:40.674 [DEBUG] [Thread-27138] [transport.py] [_log()] server lang: <none>
2026-04-15T22:51:40.674 [DEBUG] [Thread-27138] [transport.py] [_log()] kex follows: False
2026-04-15T22:51:40.674 [DEBUG] [Thread-27138] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:51:40.674 [DEBUG] [Thread-27138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:51:40.674 [DEBUG] [Thread-27138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:51:40.674 [DEBUG] [Thread-27138] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:51:40.674 [DEBUG] [Thread-27138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:51:40.675 [DEBUG] [Thread-27138] [transport.py] [_log()] Compression: none
2026-04-15T22:51:40.675 [DEBUG] [Thread-27138] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:51:40.731 [DEBUG] [Thread-27138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:51:40.731 [DEBUG] [Thread-27138] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:51:40.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:51:40.732 [DEBUG] [Thread-27138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:51:40.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:51:40.788 [DEBUG] [Thread-27138] [transport.py] [_log()] userauth is OK
2026-04-15T22:51:40.788 [DEBUG] [Thread-27138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:51:40.788 [DEBUG] [Thread-27138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:51:40.789 [DEBUG] [Thread-27138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:51:40.789 [DEBUG] [Thread-27138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:51:40.822 [INFO] [Thread-27138] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:51:40.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:51:40.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:51:41.631 [DEBUG] [Thread-27138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:51:41.631 [DEBUG] [Thread-27138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:51:41.679 [DEBUG] [Thread-27138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:51:41.679 [DEBUG] [Thread-27138] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:51:41.688 [DEBUG] [Thread-27138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:51:41.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:51:41.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')
2026-04-15T22:51:41.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
2026-04-15T22:51:41.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:51:41.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:51:41.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:51:41.723 [DEBUG] [Thread-27138] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:51:50.885 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:51:51.972 [DEBUG] [Thread-27140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:51:53.946 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:52:05.777 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:52:05.778 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:52:07.012 [DEBUG] [Thread-27141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:52:11.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:52:11.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:52:11.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
2026-04-15T22:52:13.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 51, 32), 3.02172, 81.2906, 0.0, 12.2458, 8.86106, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:52:13.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:51:32
2026-04-15T22:52:13.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:52:13.952 [DEBUG] [Thread-27142] [transport.py] [_log()] starting thread (client mode): 0xf1365a80
2026-04-15T22:52:13.952 [DEBUG] [Thread-27142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:52:13.970 [DEBUG] [Thread-27142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:52:13.970 [INFO] [Thread-27142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:52:13.973 [DEBUG] [Thread-27142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:52:13.974 [DEBUG] [Thread-27142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:52:13.974 [DEBUG] [Thread-27142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:52:13.974 [DEBUG] [Thread-27142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:52:13.974 [DEBUG] [Thread-27142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:52:13.974 [DEBUG] [Thread-27142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:52:13.974 [DEBUG] [Thread-27142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:52:13.974 [DEBUG] [Thread-27142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:52:13.974 [DEBUG] [Thread-27142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:52:13.974 [DEBUG] [Thread-27142] [transport.py] [_log()] client lang: <none>
2026-04-15T22:52:13.974 [DEBUG] [Thread-27142] [transport.py] [_log()] server lang: <none>
2026-04-15T22:52:13.974 [DEBUG] [Thread-27142] [transport.py] [_log()] kex follows: False
2026-04-15T22:52:13.974 [DEBUG] [Thread-27142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:52:13.975 [DEBUG] [Thread-27142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:52:13.975 [DEBUG] [Thread-27142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:52:13.975 [DEBUG] [Thread-27142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:52:13.975 [DEBUG] [Thread-27142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:52:13.975 [DEBUG] [Thread-27142] [transport.py] [_log()] Compression: none
2026-04-15T22:52:13.975 [DEBUG] [Thread-27142] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:52:13.992 [DEBUG] [Thread-27142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:52:13.992 [DEBUG] [Thread-27142] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:52:13.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:52:13.993 [DEBUG] [Thread-27142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:52:13.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:52:13.994 [DEBUG] [Thread-27142] [transport.py] [_log()] userauth is OK
2026-04-15T22:52:13.994 [DEBUG] [Thread-27142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:52:13.994 [DEBUG] [Thread-27142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:52:13.994 [DEBUG] [Thread-27142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:52:13.994 [DEBUG] [Thread-27142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:52:14.017 [INFO] [Thread-27142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:52:14.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:52:14.808 [DEBUG] [Thread-27142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:52:14.808 [DEBUG] [Thread-27142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:52:14.809 [DEBUG] [Thread-27142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:52:14.849 [DEBUG] [Thread-27142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:52:14.849 [DEBUG] [Thread-27142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:52:14.852 [DEBUG] [Thread-27142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:52:14.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:52:14.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:52:14.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:52:14.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:52:14.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:52:14.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:52:14.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:52:14.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:52:14.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:52:14.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.868879 -999.00   +9.10   5.67     83   +6.40 1 1 1 2 1     0    0 2.12 -26.41 ZNESW 8.2 5.7 107.3 10.9 9.7 -24.9 9.7 -23.7 9.4 -21.3 9.6 -23.4
2026-04-15T22:52:14.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:52:14.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:52:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.868879
2026-04-15T22:52:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:52:14.880 [DEBUG] [Thread-27142] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:52:14.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:52:14.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:52:14.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:52:14.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:52:14.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:51:32', tmtdew=3.02172, humidity=81.2906, cloud=0.0, wind=12.2458, temperature=8.86106, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:51:11.146', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.021749999999999048, 0.0022500000000000853, -0.10850000000000115, -0.06349999999999945, -0.021749999999999048, 0.00849999999999973, 0.0022500000000000853, 0.009499999999999176, -0.0519999999999996, -0.017750000000001265, -0.05799999999999983, -0.010000000000001563, 0.03125, 0.0024999999999995026, 0.0039999999999995595, 0.012249999999999872, -0.029500000000000526, 0.010999999999999233, 0.005749999999999034, 0.0, 0.03074999999999939, -0.010249999999999204, 0.019750000000000156, 0.04399999999999871, -0.06750000000000078, 0.00975000000000037, -0.01649999999999885, 0.021000000000000796, 0.0600000000000005, 0.057500000000000995, 0.026000000000001577, -0.06675000000000075], zp_timestamp='2026-04-15T20:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:52:15.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:52:15.149 [DEBUG] [Thread-27145] [transport.py] [_log()] starting thread (client mode): 0xee9c3a60
2026-04-15T22:52:15.149 [DEBUG] [Thread-27145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:52:15.163 [DEBUG] [Thread-27145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:52:15.163 [INFO] [Thread-27145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:52:15.170 [DEBUG] [Thread-27145] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:52:15.170 [DEBUG] [Thread-27145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:52:15.170 [DEBUG] [Thread-27145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] client lang: <none>
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] server lang: <none>
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] kex follows: False
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] Compression: none
2026-04-15T22:52:15.171 [DEBUG] [Thread-27145] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:52:15.227 [DEBUG] [Thread-27145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:52:15.228 [DEBUG] [Thread-27145] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:52:15.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:52:15.228 [DEBUG] [Thread-27145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:52:15.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:52:15.284 [DEBUG] [Thread-27145] [transport.py] [_log()] userauth is OK
2026-04-15T22:52:15.284 [DEBUG] [Thread-27145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:52:15.284 [DEBUG] [Thread-27145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:52:15.285 [DEBUG] [Thread-27145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:52:15.285 [DEBUG] [Thread-27145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:52:15.310 [INFO] [Thread-27145] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:52:15.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:52:15.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:52:16.162 [DEBUG] [Thread-27145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:52:16.163 [DEBUG] [Thread-27145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:52:16.211 [DEBUG] [Thread-27145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:52:16.211 [DEBUG] [Thread-27145] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:52:16.219 [DEBUG] [Thread-27145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:52:16.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:52:16.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')
2026-04-15T22:52:16.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
2026-04-15T22:52:16.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:52:16.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:52:16.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:52:16.251 [DEBUG] [Thread-27145] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:52:22.042 [DEBUG] [Thread-27147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:52:30.506 [DEBUG] [Thread-27148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:52:37.085 [DEBUG] [Thread-27149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:52:46.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:52:46.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:52:46.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
2026-04-15T22:52:47.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 52, 8), 3.2024, 80.1951, 0.0, 11.7169, 8.89713, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:52:47.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:52:08
2026-04-15T22:52:48.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:52:48.554 [DEBUG] [Thread-27150] [transport.py] [_log()] starting thread (client mode): 0xee9c68c0
2026-04-15T22:52:48.555 [DEBUG] [Thread-27150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:52:48.575 [DEBUG] [Thread-27150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:52:48.575 [INFO] [Thread-27150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:52:48.578 [DEBUG] [Thread-27150] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:52:48.579 [DEBUG] [Thread-27150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:52:48.579 [DEBUG] [Thread-27150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:52:48.579 [DEBUG] [Thread-27150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:52:48.579 [DEBUG] [Thread-27150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:52:48.579 [DEBUG] [Thread-27150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:52:48.579 [DEBUG] [Thread-27150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:52:48.579 [DEBUG] [Thread-27150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:52:48.579 [DEBUG] [Thread-27150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:52:48.579 [DEBUG] [Thread-27150] [transport.py] [_log()] client lang: <none>
2026-04-15T22:52:48.579 [DEBUG] [Thread-27150] [transport.py] [_log()] server lang: <none>
2026-04-15T22:52:48.579 [DEBUG] [Thread-27150] [transport.py] [_log()] kex follows: False
2026-04-15T22:52:48.579 [DEBUG] [Thread-27150] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:52:48.580 [DEBUG] [Thread-27150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:52:48.580 [DEBUG] [Thread-27150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:52:48.580 [DEBUG] [Thread-27150] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:52:48.580 [DEBUG] [Thread-27150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:52:48.580 [DEBUG] [Thread-27150] [transport.py] [_log()] Compression: none
2026-04-15T22:52:48.580 [DEBUG] [Thread-27150] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:52:48.597 [DEBUG] [Thread-27150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:52:48.598 [DEBUG] [Thread-27150] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:52:48.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:52:48.598 [DEBUG] [Thread-27150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:52:48.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:52:48.599 [DEBUG] [Thread-27150] [transport.py] [_log()] userauth is OK
2026-04-15T22:52:48.600 [DEBUG] [Thread-27150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:52:48.600 [DEBUG] [Thread-27150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:52:48.600 [DEBUG] [Thread-27150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:52:48.600 [DEBUG] [Thread-27150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:52:48.625 [INFO] [Thread-27150] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:52:48.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:52:49.425 [DEBUG] [Thread-27150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:52:49.426 [DEBUG] [Thread-27150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:52:49.426 [DEBUG] [Thread-27150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:52:49.467 [DEBUG] [Thread-27150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:52:49.467 [DEBUG] [Thread-27150] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:52:49.469 [DEBUG] [Thread-27150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:52:49.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:52:49.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:52:49.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:52:49.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:52:49.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:52:49.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:52:49.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:52:49.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:52:49.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:52:49.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.869573 -999.00   +9.20   7.45     82   +6.40 1 1 1 2 1     0    0 2.12 -25.27 ZNESW 6.6 7.5 99.2 8.8 9.7 -24.7 9.6 -23.6 9.4 -21.3 9.7 -23.5
2026-04-15T22:52:49.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:52:49.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:52:49.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.869573
2026-04-15T22:52:49.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:52:49.493 [DEBUG] [Thread-27150] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:52:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:52:49.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:52:49.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:52:49.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:52:49.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:52:08', tmtdew=3.2024, humidity=80.1951, cloud=0.0, wind=11.7169, temperature=8.89713, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:52:11.107', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.021749999999999048, 0.0022500000000000853, -0.10850000000000115, -0.06349999999999945, -0.021749999999999048, 0.00849999999999973, 0.0022500000000000853, 0.009499999999999176, -0.0519999999999996, -0.017750000000001265, -0.05799999999999983, -0.010000000000001563, 0.03125, 0.0024999999999995026, 0.0039999999999995595, 0.012249999999999872, -0.029500000000000526, 0.010999999999999233, 0.005749999999999034, 0.0, 0.03074999999999939, -0.010249999999999204, 0.019750000000000156, 0.04399999999999871, -0.06750000000000078, 0.00975000000000037, -0.01649999999999885, 0.021000000000000796, 0.0600000000000005, 0.057500000000000995, 0.026000000000001577, -0.06675000000000075], zp_timestamp='2026-04-15T20:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:52:49.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:52:49.750 [DEBUG] [Thread-27153] [transport.py] [_log()] starting thread (client mode): 0xf13cb220
2026-04-15T22:52:49.750 [DEBUG] [Thread-27153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:52:49.765 [DEBUG] [Thread-27153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:52:49.765 [INFO] [Thread-27153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:52:49.773 [DEBUG] [Thread-27153] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:52:49.773 [DEBUG] [Thread-27153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:52:49.773 [DEBUG] [Thread-27153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:52:49.773 [DEBUG] [Thread-27153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:52:49.773 [DEBUG] [Thread-27153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:52:49.773 [DEBUG] [Thread-27153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:52:49.773 [DEBUG] [Thread-27153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:52:49.773 [DEBUG] [Thread-27153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:52:49.773 [DEBUG] [Thread-27153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:52:49.773 [DEBUG] [Thread-27153] [transport.py] [_log()] client lang: <none>
2026-04-15T22:52:49.773 [DEBUG] [Thread-27153] [transport.py] [_log()] server lang: <none>
2026-04-15T22:52:49.774 [DEBUG] [Thread-27153] [transport.py] [_log()] kex follows: False
2026-04-15T22:52:49.774 [DEBUG] [Thread-27153] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:52:49.774 [DEBUG] [Thread-27153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:52:49.774 [DEBUG] [Thread-27153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:52:49.774 [DEBUG] [Thread-27153] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:52:49.774 [DEBUG] [Thread-27153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:52:49.774 [DEBUG] [Thread-27153] [transport.py] [_log()] Compression: none
2026-04-15T22:52:49.774 [DEBUG] [Thread-27153] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:52:49.832 [DEBUG] [Thread-27153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:52:49.833 [DEBUG] [Thread-27153] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:52:49.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:52:49.833 [DEBUG] [Thread-27153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:52:49.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:52:49.898 [DEBUG] [Thread-27153] [transport.py] [_log()] userauth is OK
2026-04-15T22:52:49.898 [DEBUG] [Thread-27153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:52:49.899 [DEBUG] [Thread-27153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:52:49.899 [DEBUG] [Thread-27153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:52:49.899 [DEBUG] [Thread-27153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:52:49.924 [INFO] [Thread-27153] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:52:49.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:52:49.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:52:50.804 [DEBUG] [Thread-27153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:52:50.804 [DEBUG] [Thread-27153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:52:50.852 [DEBUG] [Thread-27153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:52:50.852 [DEBUG] [Thread-27153] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:52:50.861 [DEBUG] [Thread-27153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:52:50.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:52:50.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')
2026-04-15T22:52:50.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
2026-04-15T22:52:50.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:52:50.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:52:50.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:52:50.895 [DEBUG] [Thread-27153] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:52:52.116 [DEBUG] [Thread-27155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:53:05.979 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:53:05.981 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:53:07.158 [DEBUG] [Thread-27156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:53:20.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:53:20.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:53:20.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
2026-04-15T22:53:22.188 [DEBUG] [Thread-27157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:53:22.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 52, 44), 2.99454, 81.4566, 0.0, 12.3869, 8.96061, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:53:22.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:52:44
2026-04-15T22:53:22.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:53:23.168 [DEBUG] [Thread-27158] [transport.py] [_log()] starting thread (client mode): 0xf13354b0
2026-04-15T22:53:23.168 [DEBUG] [Thread-27158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:53:23.187 [DEBUG] [Thread-27158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:53:23.187 [INFO] [Thread-27158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:53:23.190 [DEBUG] [Thread-27158] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:53:23.190 [DEBUG] [Thread-27158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:53:23.191 [DEBUG] [Thread-27158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:53:23.191 [DEBUG] [Thread-27158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:53:23.191 [DEBUG] [Thread-27158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:53:23.191 [DEBUG] [Thread-27158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:53:23.191 [DEBUG] [Thread-27158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:53:23.191 [DEBUG] [Thread-27158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:53:23.191 [DEBUG] [Thread-27158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:53:23.191 [DEBUG] [Thread-27158] [transport.py] [_log()] client lang: <none>
2026-04-15T22:53:23.191 [DEBUG] [Thread-27158] [transport.py] [_log()] server lang: <none>
2026-04-15T22:53:23.191 [DEBUG] [Thread-27158] [transport.py] [_log()] kex follows: False
2026-04-15T22:53:23.192 [DEBUG] [Thread-27158] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:53:23.192 [DEBUG] [Thread-27158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:53:23.192 [DEBUG] [Thread-27158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:53:23.192 [DEBUG] [Thread-27158] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:53:23.192 [DEBUG] [Thread-27158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:53:23.192 [DEBUG] [Thread-27158] [transport.py] [_log()] Compression: none
2026-04-15T22:53:23.192 [DEBUG] [Thread-27158] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:53:23.209 [DEBUG] [Thread-27158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:53:23.210 [DEBUG] [Thread-27158] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:53:23.210 [DEBUG] [Thread-27158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:53:23.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:53:23.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:53:23.211 [DEBUG] [Thread-27158] [transport.py] [_log()] userauth is OK
2026-04-15T22:53:23.211 [DEBUG] [Thread-27158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:53:23.212 [DEBUG] [Thread-27158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:53:23.212 [DEBUG] [Thread-27158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:53:23.212 [DEBUG] [Thread-27158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:53:23.230 [INFO] [Thread-27158] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:53:23.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:53:24.048 [DEBUG] [Thread-27158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:53:24.048 [DEBUG] [Thread-27158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:53:24.049 [DEBUG] [Thread-27158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:53:24.089 [DEBUG] [Thread-27158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:53:24.089 [DEBUG] [Thread-27158] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:53:24.092 [DEBUG] [Thread-27158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:53:24.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:53:24.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:53:24.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:53:24.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:53:24.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:53:24.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:53:24.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:53:24.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:53:24.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:53:24.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.869921 -999.00   +9.20   8.63     82   +6.40 1 1 1 2 1     0    0 2.17 -25.40 ZNESW 9.3 8.6 108.0 11.6 9.7 -25.0 9.6 -23.5 9.3 -21.4 9.7 -23.5
2026-04-15T22:53:24.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:53:24.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:53:24.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.869921
2026-04-15T22:53:24.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:53:24.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:53:24.121 [DEBUG] [Thread-27158] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:53:24.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:53:24.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:53:24.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:53:24.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:52:44', tmtdew=2.99454, humidity=81.4566, cloud=0.0, wind=12.3869, temperature=8.96061, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:52:41.174', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.021749999999999048, 0.0022500000000000853, -0.10850000000000115, -0.06349999999999945, -0.021749999999999048, 0.00849999999999973, 0.0022500000000000853, 0.009499999999999176, -0.0519999999999996, -0.017750000000001265, -0.05799999999999983, -0.010000000000001563, 0.03125, 0.0024999999999995026, 0.0039999999999995595, 0.012249999999999872, -0.029500000000000526, 0.010999999999999233, 0.005749999999999034, 0.0, 0.03074999999999939, -0.010249999999999204, 0.019750000000000156, 0.04399999999999871, -0.06750000000000078, 0.00975000000000037, -0.01649999999999885, 0.021000000000000796, 0.0600000000000005, 0.057500000000000995, 0.026000000000001577, -0.06675000000000075], zp_timestamp='2026-04-15T20:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:53:24.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:53:24.378 [DEBUG] [Thread-27161] [transport.py] [_log()] starting thread (client mode): 0xee9c1ba0
2026-04-15T22:53:24.378 [DEBUG] [Thread-27161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:53:24.392 [DEBUG] [Thread-27161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:53:24.392 [INFO] [Thread-27161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:53:24.399 [DEBUG] [Thread-27161] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:53:24.400 [DEBUG] [Thread-27161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:53:24.400 [DEBUG] [Thread-27161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:53:24.400 [DEBUG] [Thread-27161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:53:24.400 [DEBUG] [Thread-27161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:53:24.400 [DEBUG] [Thread-27161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:53:24.400 [DEBUG] [Thread-27161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:53:24.400 [DEBUG] [Thread-27161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:53:24.400 [DEBUG] [Thread-27161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:53:24.400 [DEBUG] [Thread-27161] [transport.py] [_log()] client lang: <none>
2026-04-15T22:53:24.400 [DEBUG] [Thread-27161] [transport.py] [_log()] server lang: <none>
2026-04-15T22:53:24.400 [DEBUG] [Thread-27161] [transport.py] [_log()] kex follows: False
2026-04-15T22:53:24.400 [DEBUG] [Thread-27161] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:53:24.401 [DEBUG] [Thread-27161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:53:24.401 [DEBUG] [Thread-27161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:53:24.401 [DEBUG] [Thread-27161] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:53:24.401 [DEBUG] [Thread-27161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:53:24.401 [DEBUG] [Thread-27161] [transport.py] [_log()] Compression: none
2026-04-15T22:53:24.401 [DEBUG] [Thread-27161] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:53:24.457 [DEBUG] [Thread-27161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:53:24.458 [DEBUG] [Thread-27161] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:53:24.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:53:24.458 [DEBUG] [Thread-27161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:53:24.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:53:24.513 [DEBUG] [Thread-27161] [transport.py] [_log()] userauth is OK
2026-04-15T22:53:24.513 [DEBUG] [Thread-27161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:53:24.513 [DEBUG] [Thread-27161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:53:24.513 [DEBUG] [Thread-27161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:53:24.513 [DEBUG] [Thread-27161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:53:24.538 [INFO] [Thread-27161] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:53:24.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:53:24.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:53:25.419 [DEBUG] [Thread-27161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:53:25.419 [DEBUG] [Thread-27161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:53:25.471 [DEBUG] [Thread-27161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:53:25.471 [DEBUG] [Thread-27161] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:53:25.480 [DEBUG] [Thread-27161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:53:25.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:53:25.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')
2026-04-15T22:53:25.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
2026-04-15T22:53:25.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:53:25.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:53:25.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:53:25.515 [DEBUG] [Thread-27161] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:53:30.684 [DEBUG] [Thread-27163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:53:37.218 [DEBUG] [Thread-27164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:53:52.262 [DEBUG] [Thread-27165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:53:55.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:53:55.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:53:55.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
2026-04-15T22:53:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 53, 20), 3.25355, 80.1951, 0.0, 9.82872, 8.99689, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:53:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:53:20
2026-04-15T22:53:57.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:53:57.872 [DEBUG] [Thread-27166] [transport.py] [_log()] starting thread (client mode): 0xf13378e0
2026-04-15T22:53:57.873 [DEBUG] [Thread-27166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:53:57.892 [DEBUG] [Thread-27166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:53:57.892 [INFO] [Thread-27166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:53:57.895 [DEBUG] [Thread-27166] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:53:57.896 [DEBUG] [Thread-27166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:53:57.896 [DEBUG] [Thread-27166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:53:57.896 [DEBUG] [Thread-27166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:53:57.896 [DEBUG] [Thread-27166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:53:57.896 [DEBUG] [Thread-27166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:53:57.896 [DEBUG] [Thread-27166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:53:57.896 [DEBUG] [Thread-27166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:53:57.896 [DEBUG] [Thread-27166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:53:57.896 [DEBUG] [Thread-27166] [transport.py] [_log()] client lang: <none>
2026-04-15T22:53:57.896 [DEBUG] [Thread-27166] [transport.py] [_log()] server lang: <none>
2026-04-15T22:53:57.896 [DEBUG] [Thread-27166] [transport.py] [_log()] kex follows: False
2026-04-15T22:53:57.896 [DEBUG] [Thread-27166] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:53:57.897 [DEBUG] [Thread-27166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:53:57.897 [DEBUG] [Thread-27166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:53:57.897 [DEBUG] [Thread-27166] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:53:57.897 [DEBUG] [Thread-27166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:53:57.897 [DEBUG] [Thread-27166] [transport.py] [_log()] Compression: none
2026-04-15T22:53:57.897 [DEBUG] [Thread-27166] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:53:57.911 [DEBUG] [Thread-27166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:53:57.912 [DEBUG] [Thread-27166] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:53:57.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:53:57.912 [DEBUG] [Thread-27166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:53:57.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:53:57.913 [DEBUG] [Thread-27166] [transport.py] [_log()] userauth is OK
2026-04-15T22:53:57.914 [DEBUG] [Thread-27166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:53:57.914 [DEBUG] [Thread-27166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:53:57.914 [DEBUG] [Thread-27166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:53:57.914 [DEBUG] [Thread-27166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:53:57.932 [INFO] [Thread-27166] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:53:57.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:53:58.697 [DEBUG] [Thread-27166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:53:58.697 [DEBUG] [Thread-27166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:53:58.698 [DEBUG] [Thread-27166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:53:58.738 [DEBUG] [Thread-27166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:53:58.738 [DEBUG] [Thread-27166] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:53:58.741 [DEBUG] [Thread-27166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:53:58.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:53:58.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:53:58.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:53:58.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:53:58.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:53:58.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:53:58.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:53:58.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:53:58.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:53:58.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.870268 -999.00   +9.20   7.72     82   +6.40 1 1 1 2 1     0    0 2.16 -25.24 ZNESW 7.9 7.7 118.2 10.4 9.8 -24.9 9.6 -23.7 9.4 -21.5 9.7 -23.5
2026-04-15T22:53:58.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:53:58.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:53:58.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.870268
2026-04-15T22:53:58.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:53:58.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:53:58.767 [DEBUG] [Thread-27166] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:53:58.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:53:58.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:53:58.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:53:58.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:53:20', tmtdew=3.25355, humidity=80.1951, cloud=0.0, wind=9.82872, temperature=8.99689, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:53:11.155', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.021749999999999048, 0.0022500000000000853, -0.10850000000000115, -0.06349999999999945, -0.021749999999999048, 0.00849999999999973, 0.0022500000000000853, 0.009499999999999176, -0.0519999999999996, -0.017750000000001265, -0.05799999999999983, -0.010000000000001563, 0.03125, 0.0024999999999995026, 0.0039999999999995595, 0.012249999999999872, -0.029500000000000526, 0.010999999999999233, 0.005749999999999034, 0.0, 0.03074999999999939, -0.010249999999999204, 0.019750000000000156, 0.04399999999999871, -0.06750000000000078, 0.00975000000000037, -0.01649999999999885, 0.021000000000000796, 0.0600000000000005, 0.057500000000000995, 0.026000000000001577, -0.06675000000000075], zp_timestamp='2026-04-15T20:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:53:59.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:53:59.024 [DEBUG] [Thread-27169] [transport.py] [_log()] starting thread (client mode): 0xf13651e0
2026-04-15T22:53:59.024 [DEBUG] [Thread-27169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:53:59.039 [DEBUG] [Thread-27169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:53:59.039 [INFO] [Thread-27169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:53:59.047 [DEBUG] [Thread-27169] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:53:59.047 [DEBUG] [Thread-27169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:53:59.047 [DEBUG] [Thread-27169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:53:59.047 [DEBUG] [Thread-27169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:53:59.047 [DEBUG] [Thread-27169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:53:59.047 [DEBUG] [Thread-27169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:53:59.047 [DEBUG] [Thread-27169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:53:59.047 [DEBUG] [Thread-27169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:53:59.047 [DEBUG] [Thread-27169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:53:59.048 [DEBUG] [Thread-27169] [transport.py] [_log()] client lang: <none>
2026-04-15T22:53:59.048 [DEBUG] [Thread-27169] [transport.py] [_log()] server lang: <none>
2026-04-15T22:53:59.048 [DEBUG] [Thread-27169] [transport.py] [_log()] kex follows: False
2026-04-15T22:53:59.048 [DEBUG] [Thread-27169] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:53:59.048 [DEBUG] [Thread-27169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:53:59.048 [DEBUG] [Thread-27169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:53:59.048 [DEBUG] [Thread-27169] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:53:59.048 [DEBUG] [Thread-27169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:53:59.048 [DEBUG] [Thread-27169] [transport.py] [_log()] Compression: none
2026-04-15T22:53:59.048 [DEBUG] [Thread-27169] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:53:59.104 [DEBUG] [Thread-27169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:53:59.105 [DEBUG] [Thread-27169] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:53:59.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:53:59.105 [DEBUG] [Thread-27169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:53:59.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:53:59.161 [DEBUG] [Thread-27169] [transport.py] [_log()] userauth is OK
2026-04-15T22:53:59.161 [DEBUG] [Thread-27169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:53:59.161 [DEBUG] [Thread-27169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:53:59.162 [DEBUG] [Thread-27169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:53:59.162 [DEBUG] [Thread-27169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:53:59.186 [INFO] [Thread-27169] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:53:59.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:53:59.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:54:00.013 [DEBUG] [Thread-27169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:54:00.013 [DEBUG] [Thread-27169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:54:00.061 [DEBUG] [Thread-27169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:54:00.061 [DEBUG] [Thread-27169] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:54:00.070 [DEBUG] [Thread-27169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:54:00.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:54:00.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')
2026-04-15T22:54:00.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
2026-04-15T22:54:00.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:54:00.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:54:00.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:54:00.105 [DEBUG] [Thread-27169] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:54:06.185 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:54:06.187 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:54:07.293 [DEBUG] [Thread-27171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:54:22.342 [DEBUG] [Thread-27172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:54:30.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:54:30.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:54:30.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T22:54:30.850 [DEBUG] [Thread-27173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:54:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 53, 56), 3.26497, 80.1287, 0.0, 11.47, 8.98031, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:54:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:53:56
2026-04-15T22:54:31.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:54:32.290 [DEBUG] [Thread-27174] [transport.py] [_log()] starting thread (client mode): 0xee9c7ac0
2026-04-15T22:54:32.290 [DEBUG] [Thread-27174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:54:32.310 [DEBUG] [Thread-27174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:54:32.310 [INFO] [Thread-27174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:54:32.313 [DEBUG] [Thread-27174] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:54:32.313 [DEBUG] [Thread-27174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:54:32.313 [DEBUG] [Thread-27174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:54:32.313 [DEBUG] [Thread-27174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:54:32.313 [DEBUG] [Thread-27174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:54:32.313 [DEBUG] [Thread-27174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:54:32.313 [DEBUG] [Thread-27174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:54:32.314 [DEBUG] [Thread-27174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:54:32.314 [DEBUG] [Thread-27174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:54:32.314 [DEBUG] [Thread-27174] [transport.py] [_log()] client lang: <none>
2026-04-15T22:54:32.314 [DEBUG] [Thread-27174] [transport.py] [_log()] server lang: <none>
2026-04-15T22:54:32.314 [DEBUG] [Thread-27174] [transport.py] [_log()] kex follows: False
2026-04-15T22:54:32.314 [DEBUG] [Thread-27174] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:54:32.314 [DEBUG] [Thread-27174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:54:32.314 [DEBUG] [Thread-27174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:54:32.314 [DEBUG] [Thread-27174] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:54:32.314 [DEBUG] [Thread-27174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:54:32.314 [DEBUG] [Thread-27174] [transport.py] [_log()] Compression: none
2026-04-15T22:54:32.315 [DEBUG] [Thread-27174] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:54:32.331 [DEBUG] [Thread-27174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:54:32.331 [DEBUG] [Thread-27174] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:54:32.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:54:32.332 [DEBUG] [Thread-27174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:54:32.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:54:32.333 [DEBUG] [Thread-27174] [transport.py] [_log()] userauth is OK
2026-04-15T22:54:32.333 [DEBUG] [Thread-27174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:54:32.333 [DEBUG] [Thread-27174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:54:32.334 [DEBUG] [Thread-27174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:54:32.334 [DEBUG] [Thread-27174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:54:32.358 [INFO] [Thread-27174] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:54:32.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:54:33.169 [DEBUG] [Thread-27174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:54:33.169 [DEBUG] [Thread-27174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:54:33.170 [DEBUG] [Thread-27174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:54:33.210 [DEBUG] [Thread-27174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:54:33.210 [DEBUG] [Thread-27174] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:54:33.213 [DEBUG] [Thread-27174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:54:33.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:54:33.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:54:33.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:54:33.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:54:33.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:54:33.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:54:33.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:54:33.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:54:33.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:54:33.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.870615 -999.00   +9.20   8.68     82   +6.40 1 1 1 2 1     0    0 2.14 -25.81 ZNESW 7.1 8.7 119.0 11.5 9.8 -24.9 9.7 -23.5 9.3 -21.4 9.6 -23.4
2026-04-15T22:54:33.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:54:33.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:54:33.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.870615
2026-04-15T22:54:33.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:54:33.240 [DEBUG] [Thread-27174] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:54:33.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:54:33.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:54:33.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:54:33.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:54:33.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:53:56', tmtdew=3.26497, humidity=80.1287, cloud=0.0, wind=11.47, temperature=8.98031, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:53:41.136', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.021749999999999048, 0.0022500000000000853, -0.10850000000000115, -0.06349999999999945, -0.021749999999999048, 0.00849999999999973, 0.0022500000000000853, 0.009499999999999176, -0.0519999999999996, -0.017750000000001265, -0.05799999999999983, -0.010000000000001563, 0.03125, 0.0024999999999995026, 0.0039999999999995595, 0.012249999999999872, -0.029500000000000526, 0.010999999999999233, 0.005749999999999034, 0.0, 0.03074999999999939, -0.010249999999999204, 0.019750000000000156, 0.04399999999999871, -0.06750000000000078, 0.00975000000000037, -0.01649999999999885, 0.021000000000000796, 0.0600000000000005, 0.057500000000000995, 0.026000000000001577, -0.06675000000000075], zp_timestamp='2026-04-15T20:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:54:33.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:54:33.510 [DEBUG] [Thread-27177] [transport.py] [_log()] starting thread (client mode): 0xf1337100
2026-04-15T22:54:33.510 [DEBUG] [Thread-27177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:54:33.527 [DEBUG] [Thread-27177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:54:33.527 [INFO] [Thread-27177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:54:33.534 [DEBUG] [Thread-27177] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] client lang: <none>
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] server lang: <none>
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] kex follows: False
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:54:33.535 [DEBUG] [Thread-27177] [transport.py] [_log()] Compression: none
2026-04-15T22:54:33.536 [DEBUG] [Thread-27177] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:54:33.593 [DEBUG] [Thread-27177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:54:33.593 [DEBUG] [Thread-27177] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:54:33.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:54:33.594 [DEBUG] [Thread-27177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:54:33.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:54:33.649 [DEBUG] [Thread-27177] [transport.py] [_log()] userauth is OK
2026-04-15T22:54:33.650 [DEBUG] [Thread-27177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:54:33.650 [DEBUG] [Thread-27177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:54:33.650 [DEBUG] [Thread-27177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:54:33.650 [DEBUG] [Thread-27177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:54:33.675 [INFO] [Thread-27177] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:54:33.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:54:33.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:54:34.490 [DEBUG] [Thread-27177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:54:34.490 [DEBUG] [Thread-27177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:54:34.538 [DEBUG] [Thread-27177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:54:34.538 [DEBUG] [Thread-27177] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:54:34.547 [DEBUG] [Thread-27177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:54:34.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:54:34.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')
2026-04-15T22:54:34.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
2026-04-15T22:54:34.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:54:34.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:54:34.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:54:34.584 [DEBUG] [Thread-27177] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:54:37.373 [DEBUG] [Thread-27179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:54:52.416 [DEBUG] [Thread-27180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:55:04.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:55:04.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:55:04.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T22:55:05.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 54, 31), 3.2701, 80.0956, 0.0, 11.2936, 8.94713, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:55:05.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:54:31
2026-04-15T22:55:06.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:55:06.387 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:55:06.388 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:55:06.748 [DEBUG] [Thread-27181] [transport.py] [_log()] starting thread (client mode): 0xf13c88e0
2026-04-15T22:55:06.748 [DEBUG] [Thread-27181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:55:06.769 [DEBUG] [Thread-27181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:55:06.769 [INFO] [Thread-27181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:55:06.773 [DEBUG] [Thread-27181] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:55:06.773 [DEBUG] [Thread-27181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:55:06.773 [DEBUG] [Thread-27181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:55:06.773 [DEBUG] [Thread-27181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:55:06.773 [DEBUG] [Thread-27181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:55:06.773 [DEBUG] [Thread-27181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:55:06.773 [DEBUG] [Thread-27181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:55:06.773 [DEBUG] [Thread-27181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:55:06.774 [DEBUG] [Thread-27181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:55:06.774 [DEBUG] [Thread-27181] [transport.py] [_log()] client lang: <none>
2026-04-15T22:55:06.774 [DEBUG] [Thread-27181] [transport.py] [_log()] server lang: <none>
2026-04-15T22:55:06.774 [DEBUG] [Thread-27181] [transport.py] [_log()] kex follows: False
2026-04-15T22:55:06.774 [DEBUG] [Thread-27181] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:55:06.774 [DEBUG] [Thread-27181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:55:06.774 [DEBUG] [Thread-27181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:55:06.774 [DEBUG] [Thread-27181] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:55:06.774 [DEBUG] [Thread-27181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:55:06.774 [DEBUG] [Thread-27181] [transport.py] [_log()] Compression: none
2026-04-15T22:55:06.774 [DEBUG] [Thread-27181] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:55:06.790 [DEBUG] [Thread-27181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:55:06.791 [DEBUG] [Thread-27181] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:55:06.791 [DEBUG] [Thread-27181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:55:06.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:55:06.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:55:06.792 [DEBUG] [Thread-27181] [transport.py] [_log()] userauth is OK
2026-04-15T22:55:06.792 [DEBUG] [Thread-27181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:55:06.792 [DEBUG] [Thread-27181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:55:06.792 [DEBUG] [Thread-27181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:55:06.792 [DEBUG] [Thread-27181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:55:06.816 [INFO] [Thread-27181] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:55:06.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:55:07.447 [DEBUG] [Thread-27183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:55:08.520 [DEBUG] [Thread-27181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:55:08.521 [DEBUG] [Thread-27181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:55:08.522 [DEBUG] [Thread-27181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:55:08.560 [DEBUG] [Thread-27181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:55:08.561 [DEBUG] [Thread-27181] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:55:08.564 [DEBUG] [Thread-27181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:55:08.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:55:08.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:55:08.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:55:08.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:55:08.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:55:08.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:55:08.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:55:08.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:55:08.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:55:08.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.870963 -999.00   +9.20   5.37     82   +6.40 1 1 1 2 1     0    0 2.12 -26.09 ZNESW 6.8 5.4 98.9 10.9 9.8 -24.7 9.7 -23.6 9.3 -21.4 9.7 -23.4
2026-04-15T22:55:08.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:55:08.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:55:08.592 [DEBUG] [Thread-27181] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:55:08.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.870963
2026-04-15T22:55:08.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:55:08.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:55:08.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:55:08.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:55:08.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:55:08.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:54:31', tmtdew=3.2701, humidity=80.0956, cloud=0.0, wind=11.2936, temperature=8.94713, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:54:11.203', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.021749999999999048, 0.0022500000000000853, -0.10850000000000115, -0.06349999999999945, -0.021749999999999048, 0.00849999999999973, 0.0022500000000000853, 0.009499999999999176, -0.0519999999999996, -0.017750000000001265, -0.05799999999999983, -0.010000000000001563, 0.03125, 0.0024999999999995026, 0.0039999999999995595, 0.012249999999999872, -0.029500000000000526, 0.010999999999999233, 0.005749999999999034, 0.0, 0.03074999999999939, -0.010249999999999204, 0.019750000000000156, 0.04399999999999871, -0.06750000000000078, 0.00975000000000037, -0.01649999999999885, 0.021000000000000796, 0.0600000000000005, 0.057500000000000995, 0.026000000000001577, -0.06675000000000075], zp_timestamp='2026-04-15T20:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:55:08.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:55:08.850 [DEBUG] [Thread-27185] [transport.py] [_log()] starting thread (client mode): 0xf1367220
2026-04-15T22:55:08.850 [DEBUG] [Thread-27185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:55:08.864 [DEBUG] [Thread-27185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:55:08.864 [INFO] [Thread-27185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:55:08.871 [DEBUG] [Thread-27185] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:55:08.871 [DEBUG] [Thread-27185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:55:08.871 [DEBUG] [Thread-27185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:55:08.871 [DEBUG] [Thread-27185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:55:08.872 [DEBUG] [Thread-27185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:55:08.872 [DEBUG] [Thread-27185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:55:08.872 [DEBUG] [Thread-27185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:55:08.872 [DEBUG] [Thread-27185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:55:08.872 [DEBUG] [Thread-27185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:55:08.872 [DEBUG] [Thread-27185] [transport.py] [_log()] client lang: <none>
2026-04-15T22:55:08.872 [DEBUG] [Thread-27185] [transport.py] [_log()] server lang: <none>
2026-04-15T22:55:08.872 [DEBUG] [Thread-27185] [transport.py] [_log()] kex follows: False
2026-04-15T22:55:08.872 [DEBUG] [Thread-27185] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:55:08.872 [DEBUG] [Thread-27185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:55:08.872 [DEBUG] [Thread-27185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:55:08.872 [DEBUG] [Thread-27185] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:55:08.873 [DEBUG] [Thread-27185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:55:08.873 [DEBUG] [Thread-27185] [transport.py] [_log()] Compression: none
2026-04-15T22:55:08.873 [DEBUG] [Thread-27185] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:55:08.930 [DEBUG] [Thread-27185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:55:08.930 [DEBUG] [Thread-27185] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:55:08.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:55:08.931 [DEBUG] [Thread-27185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:55:08.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:55:08.986 [DEBUG] [Thread-27185] [transport.py] [_log()] userauth is OK
2026-04-15T22:55:08.986 [DEBUG] [Thread-27185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:55:08.987 [DEBUG] [Thread-27185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:55:08.987 [DEBUG] [Thread-27185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:55:08.987 [DEBUG] [Thread-27185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:55:09.012 [INFO] [Thread-27185] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:55:09.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:55:09.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:55:09.866 [DEBUG] [Thread-27185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:55:09.866 [DEBUG] [Thread-27185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:55:09.914 [DEBUG] [Thread-27185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:55:09.914 [DEBUG] [Thread-27185] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:55:09.923 [DEBUG] [Thread-27185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:55:09.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:55:09.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T22:55:09.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') -> 00000000
2026-04-15T22:55:09.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:55:09.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:55:09.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:55:09.957 [DEBUG] [Thread-27185] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:55:22.479 [DEBUG] [Thread-27187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:55:31.013 [DEBUG] [Thread-27188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:55:37.520 [DEBUG] [Thread-27189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:55:39.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:55:39.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:55:39.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T22:55:41.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 55, 6), 3.27499, 80.079, 0.0, 11.3465, 9.03008, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:55:41.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:55:06
2026-04-15T22:55:41.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:55:42.091 [DEBUG] [Thread-27190] [transport.py] [_log()] starting thread (client mode): 0xf13e3250
2026-04-15T22:55:42.091 [DEBUG] [Thread-27190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:55:42.111 [DEBUG] [Thread-27190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:55:42.111 [INFO] [Thread-27190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:55:42.114 [DEBUG] [Thread-27190] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:55:42.114 [DEBUG] [Thread-27190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:55:42.114 [DEBUG] [Thread-27190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:55:42.114 [DEBUG] [Thread-27190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:55:42.114 [DEBUG] [Thread-27190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:55:42.114 [DEBUG] [Thread-27190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:55:42.114 [DEBUG] [Thread-27190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:55:42.115 [DEBUG] [Thread-27190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:55:42.115 [DEBUG] [Thread-27190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:55:42.115 [DEBUG] [Thread-27190] [transport.py] [_log()] client lang: <none>
2026-04-15T22:55:42.115 [DEBUG] [Thread-27190] [transport.py] [_log()] server lang: <none>
2026-04-15T22:55:42.115 [DEBUG] [Thread-27190] [transport.py] [_log()] kex follows: False
2026-04-15T22:55:42.115 [DEBUG] [Thread-27190] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:55:42.115 [DEBUG] [Thread-27190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:55:42.115 [DEBUG] [Thread-27190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:55:42.115 [DEBUG] [Thread-27190] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:55:42.115 [DEBUG] [Thread-27190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:55:42.115 [DEBUG] [Thread-27190] [transport.py] [_log()] Compression: none
2026-04-15T22:55:42.115 [DEBUG] [Thread-27190] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:55:42.132 [DEBUG] [Thread-27190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:55:42.132 [DEBUG] [Thread-27190] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:55:42.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:55:42.133 [DEBUG] [Thread-27190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:55:42.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:55:42.134 [DEBUG] [Thread-27190] [transport.py] [_log()] userauth is OK
2026-04-15T22:55:42.134 [DEBUG] [Thread-27190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:55:42.134 [DEBUG] [Thread-27190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:55:42.134 [DEBUG] [Thread-27190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:55:42.134 [DEBUG] [Thread-27190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:55:42.158 [INFO] [Thread-27190] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:55:42.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:55:42.975 [DEBUG] [Thread-27190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:55:42.975 [DEBUG] [Thread-27190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:55:42.976 [DEBUG] [Thread-27190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:55:43.016 [DEBUG] [Thread-27190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:55:43.016 [DEBUG] [Thread-27190] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:55:43.019 [DEBUG] [Thread-27190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:55:43.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:55:43.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:55:43.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:55:43.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:55:43.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:55:43.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:55:43.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:55:43.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:55:43.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:55:43.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.871310 -999.00   +9.30   4.88     82   +6.40 1 1 1 2 1     0    0 2.16 -25.64 ZNESW 5.3 4.9 94.6 7.3 9.8 -24.7 9.7 -23.5 9.4 -21.3 9.7 -23.5
2026-04-15T22:55:43.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:55:43.076 [DEBUG] [Thread-27190] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:55:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:55:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.871310
2026-04-15T22:55:43.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:55:43.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:55:43.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:55:43.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:55:43.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:55:43.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:55:06', tmtdew=3.27499, humidity=80.079, cloud=0.0, wind=11.3465, temperature=9.03008, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:54:41.184', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.021749999999999048, 0.0022500000000000853, -0.10850000000000115, -0.06349999999999945, -0.021749999999999048, 0.00849999999999973, 0.0022500000000000853, 0.009499999999999176, -0.0519999999999996, -0.017750000000001265, -0.05799999999999983, -0.010000000000001563, 0.03125, 0.0024999999999995026, 0.0039999999999995595, 0.012249999999999872, -0.029500000000000526, 0.010999999999999233, 0.005749999999999034, 0.0, 0.03074999999999939, -0.010249999999999204, 0.019750000000000156, 0.04399999999999871, -0.06750000000000078, 0.00975000000000037, -0.01649999999999885, 0.021000000000000796, 0.0600000000000005, 0.057500000000000995, 0.026000000000001577, -0.06675000000000075], zp_timestamp='2026-04-15T20:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:55:43.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:55:43.340 [DEBUG] [Thread-27193] [transport.py] [_log()] starting thread (client mode): 0xf1353820
2026-04-15T22:55:43.341 [DEBUG] [Thread-27193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:55:43.355 [DEBUG] [Thread-27193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:55:43.355 [INFO] [Thread-27193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:55:43.362 [DEBUG] [Thread-27193] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:55:43.362 [DEBUG] [Thread-27193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:55:43.362 [DEBUG] [Thread-27193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:55:43.362 [DEBUG] [Thread-27193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:55:43.362 [DEBUG] [Thread-27193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:55:43.362 [DEBUG] [Thread-27193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:55:43.363 [DEBUG] [Thread-27193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:55:43.363 [DEBUG] [Thread-27193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:55:43.363 [DEBUG] [Thread-27193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:55:43.363 [DEBUG] [Thread-27193] [transport.py] [_log()] client lang: <none>
2026-04-15T22:55:43.363 [DEBUG] [Thread-27193] [transport.py] [_log()] server lang: <none>
2026-04-15T22:55:43.363 [DEBUG] [Thread-27193] [transport.py] [_log()] kex follows: False
2026-04-15T22:55:43.363 [DEBUG] [Thread-27193] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:55:43.363 [DEBUG] [Thread-27193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:55:43.363 [DEBUG] [Thread-27193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:55:43.363 [DEBUG] [Thread-27193] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:55:43.363 [DEBUG] [Thread-27193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:55:43.363 [DEBUG] [Thread-27193] [transport.py] [_log()] Compression: none
2026-04-15T22:55:43.363 [DEBUG] [Thread-27193] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:55:43.421 [DEBUG] [Thread-27193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:55:43.421 [DEBUG] [Thread-27193] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:55:43.421 [DEBUG] [Thread-27193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:55:43.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:55:43.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:55:43.481 [DEBUG] [Thread-27193] [transport.py] [_log()] userauth is OK
2026-04-15T22:55:43.481 [DEBUG] [Thread-27193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:55:43.481 [DEBUG] [Thread-27193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:55:43.481 [DEBUG] [Thread-27193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:55:43.482 [DEBUG] [Thread-27193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:55:43.506 [INFO] [Thread-27193] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:55:43.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:55:43.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:55:44.352 [DEBUG] [Thread-27193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:55:44.352 [DEBUG] [Thread-27193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:55:44.400 [DEBUG] [Thread-27193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:55:44.400 [DEBUG] [Thread-27193] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:55:44.409 [DEBUG] [Thread-27193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:55:44.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:55:44.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')
2026-04-15T22:55:44.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
2026-04-15T22:55:44.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:55:44.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:55:44.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:55:44.444 [DEBUG] [Thread-27193] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:55:52.552 [DEBUG] [Thread-27195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:56:06.591 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:56:06.592 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:56:07.598 [DEBUG] [Thread-27196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:56:14.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:56:14.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:56:14.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
2026-04-15T22:56:15.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 55, 42), 3.06695, 81.0584, 0.0, 12.1752, 9.02698, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:56:15.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:55:42
2026-04-15T22:56:16.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:56:16.585 [DEBUG] [Thread-27197] [transport.py] [_log()] starting thread (client mode): 0xf13e0070
2026-04-15T22:56:16.585 [DEBUG] [Thread-27197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:56:16.605 [DEBUG] [Thread-27197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:56:16.605 [INFO] [Thread-27197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:56:16.608 [DEBUG] [Thread-27197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:56:16.608 [DEBUG] [Thread-27197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:56:16.608 [DEBUG] [Thread-27197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:56:16.608 [DEBUG] [Thread-27197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:56:16.608 [DEBUG] [Thread-27197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:56:16.608 [DEBUG] [Thread-27197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:56:16.608 [DEBUG] [Thread-27197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:56:16.609 [DEBUG] [Thread-27197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:56:16.609 [DEBUG] [Thread-27197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:56:16.609 [DEBUG] [Thread-27197] [transport.py] [_log()] client lang: <none>
2026-04-15T22:56:16.609 [DEBUG] [Thread-27197] [transport.py] [_log()] server lang: <none>
2026-04-15T22:56:16.609 [DEBUG] [Thread-27197] [transport.py] [_log()] kex follows: False
2026-04-15T22:56:16.609 [DEBUG] [Thread-27197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:56:16.609 [DEBUG] [Thread-27197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:56:16.609 [DEBUG] [Thread-27197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:56:16.609 [DEBUG] [Thread-27197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:56:16.609 [DEBUG] [Thread-27197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:56:16.609 [DEBUG] [Thread-27197] [transport.py] [_log()] Compression: none
2026-04-15T22:56:16.610 [DEBUG] [Thread-27197] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:56:16.625 [DEBUG] [Thread-27197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:56:16.626 [DEBUG] [Thread-27197] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:56:16.626 [DEBUG] [Thread-27197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:56:16.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:56:16.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:56:16.628 [DEBUG] [Thread-27197] [transport.py] [_log()] userauth is OK
2026-04-15T22:56:16.628 [DEBUG] [Thread-27197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:56:16.628 [DEBUG] [Thread-27197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:56:16.628 [DEBUG] [Thread-27197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:56:16.628 [DEBUG] [Thread-27197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:56:16.652 [INFO] [Thread-27197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:56:16.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:56:17.390 [DEBUG] [Thread-27197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:56:17.391 [DEBUG] [Thread-27197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:56:17.391 [DEBUG] [Thread-27197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:56:17.431 [DEBUG] [Thread-27197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:56:17.431 [DEBUG] [Thread-27197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:56:17.434 [DEBUG] [Thread-27197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:56:17.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:56:17.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:56:17.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:56:17.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:56:17.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:56:17.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:56:17.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:56:17.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:56:17.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:56:17.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.872004 -999.00   +9.30   8.08     82   +6.40 1 1 1 2 1     0    0 2.07 -26.78 ZNESW 9.0 8.1 111.4 9.8 9.8 -24.9 9.7 -23.7 9.3 -21.6 9.6 -23.5
2026-04-15T22:56:17.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:56:17.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:56:17.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.872004
2026-04-15T22:56:17.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:56:17.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:56:17.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:56:17.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:56:17.459 [DEBUG] [Thread-27197] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:56:17.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:56:17.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:55:42', tmtdew=3.06695, humidity=81.0584, cloud=0.0, wind=12.1752, temperature=9.02698, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:55:41.146', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.021749999999999048, 0.0022500000000000853, -0.10850000000000115, -0.06349999999999945, -0.021749999999999048, 0.00849999999999973, 0.0022500000000000853, 0.009499999999999176, -0.0519999999999996, -0.017750000000001265, -0.05799999999999983, -0.010000000000001563, 0.03125, 0.0024999999999995026, 0.0039999999999995595, 0.012249999999999872, -0.029500000000000526, 0.010999999999999233, 0.005749999999999034, 0.0, 0.03074999999999939, -0.010249999999999204, 0.019750000000000156, 0.04399999999999871, -0.06750000000000078, 0.00975000000000037, -0.01649999999999885, 0.021000000000000796, 0.0600000000000005, 0.057500000000000995, 0.026000000000001577, -0.06675000000000075], zp_timestamp='2026-04-15T20:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:56:17.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:56:17.711 [DEBUG] [Thread-27200] [transport.py] [_log()] starting thread (client mode): 0xf13e13f0
2026-04-15T22:56:17.711 [DEBUG] [Thread-27200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:56:17.725 [DEBUG] [Thread-27200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:56:17.725 [INFO] [Thread-27200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:56:17.733 [DEBUG] [Thread-27200] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:56:17.733 [DEBUG] [Thread-27200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:56:17.733 [DEBUG] [Thread-27200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:56:17.733 [DEBUG] [Thread-27200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:56:17.733 [DEBUG] [Thread-27200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:56:17.733 [DEBUG] [Thread-27200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:56:17.733 [DEBUG] [Thread-27200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:56:17.733 [DEBUG] [Thread-27200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:56:17.733 [DEBUG] [Thread-27200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:56:17.734 [DEBUG] [Thread-27200] [transport.py] [_log()] client lang: <none>
2026-04-15T22:56:17.734 [DEBUG] [Thread-27200] [transport.py] [_log()] server lang: <none>
2026-04-15T22:56:17.734 [DEBUG] [Thread-27200] [transport.py] [_log()] kex follows: False
2026-04-15T22:56:17.734 [DEBUG] [Thread-27200] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:56:17.734 [DEBUG] [Thread-27200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:56:17.734 [DEBUG] [Thread-27200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:56:17.734 [DEBUG] [Thread-27200] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:56:17.734 [DEBUG] [Thread-27200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:56:17.734 [DEBUG] [Thread-27200] [transport.py] [_log()] Compression: none
2026-04-15T22:56:17.734 [DEBUG] [Thread-27200] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:56:17.789 [DEBUG] [Thread-27200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:56:17.790 [DEBUG] [Thread-27200] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:56:17.790 [DEBUG] [Thread-27200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:56:17.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:56:17.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:56:17.846 [DEBUG] [Thread-27200] [transport.py] [_log()] userauth is OK
2026-04-15T22:56:17.846 [DEBUG] [Thread-27200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:56:17.847 [DEBUG] [Thread-27200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:56:17.847 [DEBUG] [Thread-27200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:56:17.847 [DEBUG] [Thread-27200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:56:17.872 [INFO] [Thread-27200] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:56:17.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:56:17.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:56:18.678 [DEBUG] [Thread-27200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:56:18.678 [DEBUG] [Thread-27200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:56:18.726 [DEBUG] [Thread-27200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:56:18.726 [DEBUG] [Thread-27200] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:56:18.735 [DEBUG] [Thread-27200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:56:18.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:56:18.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')
2026-04-15T22:56:18.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
2026-04-15T22:56:18.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:56:18.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:56:18.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:56:18.770 [DEBUG] [Thread-27200] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:56:22.630 [DEBUG] [Thread-27202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:56:31.166 [DEBUG] [Thread-27203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:56:37.670 [DEBUG] [Thread-27204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:56:48.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:56:48.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:56:48.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
2026-04-15T22:56:50.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 56, 18), 3.33644, 79.5126, 0.0, 9.61704, 9.06349, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:56:50.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:56:18
2026-04-15T22:56:50.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:56:50.878 [DEBUG] [Thread-27205] [transport.py] [_log()] starting thread (client mode): 0xf13e0880
2026-04-15T22:56:50.878 [DEBUG] [Thread-27205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:56:50.896 [DEBUG] [Thread-27205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:56:50.896 [INFO] [Thread-27205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:56:50.899 [DEBUG] [Thread-27205] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:56:50.899 [DEBUG] [Thread-27205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:56:50.899 [DEBUG] [Thread-27205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:56:50.899 [DEBUG] [Thread-27205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:56:50.900 [DEBUG] [Thread-27205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:56:50.900 [DEBUG] [Thread-27205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:56:50.900 [DEBUG] [Thread-27205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:56:50.900 [DEBUG] [Thread-27205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:56:50.900 [DEBUG] [Thread-27205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:56:50.900 [DEBUG] [Thread-27205] [transport.py] [_log()] client lang: <none>
2026-04-15T22:56:50.900 [DEBUG] [Thread-27205] [transport.py] [_log()] server lang: <none>
2026-04-15T22:56:50.900 [DEBUG] [Thread-27205] [transport.py] [_log()] kex follows: False
2026-04-15T22:56:50.900 [DEBUG] [Thread-27205] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:56:50.900 [DEBUG] [Thread-27205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:56:50.900 [DEBUG] [Thread-27205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:56:50.901 [DEBUG] [Thread-27205] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:56:50.901 [DEBUG] [Thread-27205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:56:50.901 [DEBUG] [Thread-27205] [transport.py] [_log()] Compression: none
2026-04-15T22:56:50.901 [DEBUG] [Thread-27205] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:56:50.916 [DEBUG] [Thread-27205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:56:50.916 [DEBUG] [Thread-27205] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:56:50.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:56:50.917 [DEBUG] [Thread-27205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:56:50.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:56:50.917 [DEBUG] [Thread-27205] [transport.py] [_log()] userauth is OK
2026-04-15T22:56:50.918 [DEBUG] [Thread-27205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:56:50.918 [DEBUG] [Thread-27205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:56:50.918 [DEBUG] [Thread-27205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:56:50.918 [DEBUG] [Thread-27205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:56:50.943 [INFO] [Thread-27205] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:56:50.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:56:51.723 [DEBUG] [Thread-27205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:56:51.723 [DEBUG] [Thread-27205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:56:51.723 [DEBUG] [Thread-27205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:56:51.764 [DEBUG] [Thread-27205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:56:51.764 [DEBUG] [Thread-27205] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:56:51.766 [DEBUG] [Thread-27205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:56:51.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:56:51.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:56:51.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:56:51.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:56:51.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:56:51.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:56:51.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:56:51.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:56:51.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:56:51.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.872352 -999.00   +9.20   8.50     82   +6.40 1 1 1 2 1     0    0 2.12 -25.87 ZNESW 7.7 8.5 101.0 11.3 9.7 -25.0 9.7 -23.8 9.3 -21.7 9.7 -23.6
2026-04-15T22:56:51.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:56:51.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:56:51.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.872352
2026-04-15T22:56:51.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:56:51.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:56:51.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:56:51.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:56:51.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:56:51.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:56:18', tmtdew=3.33644, humidity=79.5126, cloud=0.0, wind=9.61704, temperature=9.06349, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:56:11.213', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.021749999999999048, 0.0022500000000000853, -0.10850000000000115, -0.06349999999999945, -0.021749999999999048, 0.00849999999999973, 0.0022500000000000853, 0.009499999999999176, -0.0519999999999996, -0.017750000000001265, -0.05799999999999983, -0.010000000000001563, 0.03125, 0.0024999999999995026, 0.0039999999999995595, 0.012249999999999872, -0.029500000000000526, 0.010999999999999233, 0.005749999999999034, 0.0, 0.03074999999999939, -0.010249999999999204, 0.019750000000000156, 0.04399999999999871, -0.06750000000000078, 0.00975000000000037, -0.01649999999999885, 0.021000000000000796, 0.0600000000000005, 0.057500000000000995, 0.026000000000001577, -0.06675000000000075], zp_timestamp='2026-04-15T20:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:56:51.785 [DEBUG] [Thread-27205] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:56:51.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:56:51.993 [DEBUG] [Thread-27208] [transport.py] [_log()] starting thread (client mode): 0xf13c9e40
2026-04-15T22:56:51.993 [DEBUG] [Thread-27208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:56:52.007 [DEBUG] [Thread-27208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:56:52.007 [INFO] [Thread-27208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:56:52.015 [DEBUG] [Thread-27208] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:56:52.015 [DEBUG] [Thread-27208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:56:52.015 [DEBUG] [Thread-27208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:56:52.015 [DEBUG] [Thread-27208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:56:52.015 [DEBUG] [Thread-27208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:56:52.015 [DEBUG] [Thread-27208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:56:52.015 [DEBUG] [Thread-27208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:56:52.015 [DEBUG] [Thread-27208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:56:52.015 [DEBUG] [Thread-27208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:56:52.016 [DEBUG] [Thread-27208] [transport.py] [_log()] client lang: <none>
2026-04-15T22:56:52.016 [DEBUG] [Thread-27208] [transport.py] [_log()] server lang: <none>
2026-04-15T22:56:52.016 [DEBUG] [Thread-27208] [transport.py] [_log()] kex follows: False
2026-04-15T22:56:52.016 [DEBUG] [Thread-27208] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:56:52.016 [DEBUG] [Thread-27208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:56:52.016 [DEBUG] [Thread-27208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:56:52.016 [DEBUG] [Thread-27208] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:56:52.016 [DEBUG] [Thread-27208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:56:52.016 [DEBUG] [Thread-27208] [transport.py] [_log()] Compression: none
2026-04-15T22:56:52.016 [DEBUG] [Thread-27208] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:56:52.078 [DEBUG] [Thread-27208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:56:52.078 [DEBUG] [Thread-27208] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:56:52.079 [DEBUG] [Thread-27208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:56:52.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:56:52.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:56:52.134 [DEBUG] [Thread-27208] [transport.py] [_log()] userauth is OK
2026-04-15T22:56:52.135 [DEBUG] [Thread-27208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:56:52.135 [DEBUG] [Thread-27208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:56:52.135 [DEBUG] [Thread-27208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:56:52.135 [DEBUG] [Thread-27208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:56:52.160 [INFO] [Thread-27208] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:56:52.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:56:52.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:56:52.699 [DEBUG] [Thread-27210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:56:52.989 [DEBUG] [Thread-27208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:56:52.990 [DEBUG] [Thread-27208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:56:53.037 [DEBUG] [Thread-27208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:56:53.037 [DEBUG] [Thread-27208] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:56:53.046 [DEBUG] [Thread-27208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:56:53.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:56:53.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')
2026-04-15T22:56:53.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
2026-04-15T22:56:53.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:56:53.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:56:53.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:56:53.081 [DEBUG] [Thread-27208] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:57:06.794 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:57:06.795 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:57:07.741 [DEBUG] [Thread-27211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:57:22.771 [DEBUG] [Thread-27212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:57:23.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:57:23.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:57:23.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
2026-04-15T22:57:24.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 56, 54), 3.07957, 80.992, 0.0, 11.1168, 9.06016, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:57:24.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:56:54
2026-04-15T22:57:24.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:57:25.179 [DEBUG] [Thread-27213] [transport.py] [_log()] starting thread (client mode): 0xf13c8e20
2026-04-15T22:57:25.180 [DEBUG] [Thread-27213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:57:25.199 [DEBUG] [Thread-27213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:57:25.199 [INFO] [Thread-27213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:57:25.200 [DEBUG] [Thread-27213] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:57:25.200 [DEBUG] [Thread-27213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:57:25.201 [DEBUG] [Thread-27213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:57:25.201 [DEBUG] [Thread-27213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:57:25.201 [DEBUG] [Thread-27213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:57:25.201 [DEBUG] [Thread-27213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:57:25.201 [DEBUG] [Thread-27213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:57:25.201 [DEBUG] [Thread-27213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:57:25.201 [DEBUG] [Thread-27213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:57:25.201 [DEBUG] [Thread-27213] [transport.py] [_log()] client lang: <none>
2026-04-15T22:57:25.201 [DEBUG] [Thread-27213] [transport.py] [_log()] server lang: <none>
2026-04-15T22:57:25.201 [DEBUG] [Thread-27213] [transport.py] [_log()] kex follows: False
2026-04-15T22:57:25.201 [DEBUG] [Thread-27213] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:57:25.202 [DEBUG] [Thread-27213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:57:25.202 [DEBUG] [Thread-27213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:57:25.202 [DEBUG] [Thread-27213] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:57:25.202 [DEBUG] [Thread-27213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:57:25.202 [DEBUG] [Thread-27213] [transport.py] [_log()] Compression: none
2026-04-15T22:57:25.202 [DEBUG] [Thread-27213] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:57:25.214 [DEBUG] [Thread-27213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:57:25.214 [DEBUG] [Thread-27213] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:57:25.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:57:25.215 [DEBUG] [Thread-27213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:57:25.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:57:25.216 [DEBUG] [Thread-27213] [transport.py] [_log()] userauth is OK
2026-04-15T22:57:25.216 [DEBUG] [Thread-27213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:57:25.216 [DEBUG] [Thread-27213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:57:25.217 [DEBUG] [Thread-27213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:57:25.217 [DEBUG] [Thread-27213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:57:25.241 [INFO] [Thread-27213] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:57:25.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:57:26.049 [DEBUG] [Thread-27213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:57:26.049 [DEBUG] [Thread-27213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:57:26.049 [DEBUG] [Thread-27213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:57:26.090 [DEBUG] [Thread-27213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:57:26.090 [DEBUG] [Thread-27213] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:57:26.093 [DEBUG] [Thread-27213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:57:26.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:57:26.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:57:26.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:57:26.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:57:26.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:57:26.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:57:26.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:57:26.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:57:26.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:57:26.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.872699 -999.00   +9.10   7.85     82   +6.40 1 1 1 2 1     0    0 2.12 -25.44 ZNESW 7.0 7.8 103.6 10.7 9.8 -25.0 9.6 -23.7 9.3 -21.6 9.7 -23.5
2026-04-15T22:57:26.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:57:26.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:57:26.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.872699
2026-04-15T22:57:26.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:57:26.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:57:26.119 [DEBUG] [Thread-27213] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:57:26.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:57:26.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:57:26.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:57:26.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:56:54', tmtdew=3.07957, humidity=80.992, cloud=0.0, wind=11.1168, temperature=9.06016, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:56:41.194', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.02874999999999872, -0.03474999999999895, -0.06750000000000078, -0.019000000000000128, -0.011749999999999261, 0.010999999999999233, -0.025749999999998607, 0.00999999999999801, -0.05599999999999916, -0.056750000000000966, -0.04299999999999926, -0.006000000000000227, 0.028249999999999886, -0.006000000000000227, 0.008499999999997954, -0.011250000000000426, -0.046499999999999986, 0.0039999999999995595, -0.01675000000000182, -1.7763568394002505e-15, 0.00024999999999941735, 0.007250000000000867, -0.00575000000000081, 0.006499999999999062, -0.061500000000000554, 0.02275000000000027, -0.014499999999999957, 0.040000000000000924, 0.028000000000002245, 0.07800000000000118, 0.03200000000000003, -0.06675000000000075], zp_timestamp='2026-04-15T20:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:57:26.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:57:26.388 [DEBUG] [Thread-27216] [transport.py] [_log()] starting thread (client mode): 0xf13e3310
2026-04-15T22:57:26.388 [DEBUG] [Thread-27216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:57:26.401 [DEBUG] [Thread-27216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:57:26.401 [INFO] [Thread-27216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:57:26.409 [DEBUG] [Thread-27216] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:57:26.409 [DEBUG] [Thread-27216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:57:26.409 [DEBUG] [Thread-27216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:57:26.409 [DEBUG] [Thread-27216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:57:26.409 [DEBUG] [Thread-27216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:57:26.409 [DEBUG] [Thread-27216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:57:26.409 [DEBUG] [Thread-27216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:57:26.409 [DEBUG] [Thread-27216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:57:26.409 [DEBUG] [Thread-27216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:57:26.409 [DEBUG] [Thread-27216] [transport.py] [_log()] client lang: <none>
2026-04-15T22:57:26.409 [DEBUG] [Thread-27216] [transport.py] [_log()] server lang: <none>
2026-04-15T22:57:26.409 [DEBUG] [Thread-27216] [transport.py] [_log()] kex follows: False
2026-04-15T22:57:26.409 [DEBUG] [Thread-27216] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:57:26.410 [DEBUG] [Thread-27216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:57:26.410 [DEBUG] [Thread-27216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:57:26.410 [DEBUG] [Thread-27216] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:57:26.410 [DEBUG] [Thread-27216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:57:26.410 [DEBUG] [Thread-27216] [transport.py] [_log()] Compression: none
2026-04-15T22:57:26.410 [DEBUG] [Thread-27216] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:57:26.466 [DEBUG] [Thread-27216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:57:26.466 [DEBUG] [Thread-27216] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:57:26.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:57:26.467 [DEBUG] [Thread-27216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:57:26.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:57:26.523 [DEBUG] [Thread-27216] [transport.py] [_log()] userauth is OK
2026-04-15T22:57:26.523 [DEBUG] [Thread-27216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:57:26.523 [DEBUG] [Thread-27216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:57:26.523 [DEBUG] [Thread-27216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:57:26.523 [DEBUG] [Thread-27216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:57:26.547 [INFO] [Thread-27216] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:57:26.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:57:26.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:57:27.367 [DEBUG] [Thread-27216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:57:27.367 [DEBUG] [Thread-27216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:57:27.417 [DEBUG] [Thread-27216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:57:27.418 [DEBUG] [Thread-27216] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:57:27.427 [DEBUG] [Thread-27216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:57:27.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:57:27.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')
2026-04-15T22:57:27.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
2026-04-15T22:57:27.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:57:27.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:57:27.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:57:27.462 [DEBUG] [Thread-27216] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:57:31.329 [DEBUG] [Thread-27218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:57:37.801 [DEBUG] [Thread-27219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:57:52.847 [DEBUG] [Thread-27220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:57:57.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:57:57.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:57:57.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
2026-04-15T22:57:58.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 57, 29), 3.36491, 79.3467, 0.0, 9.12312, 9.01372, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:57:58.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:57:29
2026-04-15T22:57:59.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:57:59.564 [DEBUG] [Thread-27221] [transport.py] [_log()] starting thread (client mode): 0xf1350b20
2026-04-15T22:57:59.564 [DEBUG] [Thread-27221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:57:59.584 [DEBUG] [Thread-27221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:57:59.584 [INFO] [Thread-27221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:57:59.587 [DEBUG] [Thread-27221] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:57:59.587 [DEBUG] [Thread-27221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:57:59.587 [DEBUG] [Thread-27221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:57:59.587 [DEBUG] [Thread-27221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:57:59.587 [DEBUG] [Thread-27221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:57:59.587 [DEBUG] [Thread-27221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:57:59.587 [DEBUG] [Thread-27221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:57:59.587 [DEBUG] [Thread-27221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:57:59.587 [DEBUG] [Thread-27221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:57:59.587 [DEBUG] [Thread-27221] [transport.py] [_log()] client lang: <none>
2026-04-15T22:57:59.588 [DEBUG] [Thread-27221] [transport.py] [_log()] server lang: <none>
2026-04-15T22:57:59.588 [DEBUG] [Thread-27221] [transport.py] [_log()] kex follows: False
2026-04-15T22:57:59.588 [DEBUG] [Thread-27221] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:57:59.588 [DEBUG] [Thread-27221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:57:59.588 [DEBUG] [Thread-27221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:57:59.588 [DEBUG] [Thread-27221] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:57:59.588 [DEBUG] [Thread-27221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:57:59.588 [DEBUG] [Thread-27221] [transport.py] [_log()] Compression: none
2026-04-15T22:57:59.588 [DEBUG] [Thread-27221] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:57:59.607 [DEBUG] [Thread-27221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:57:59.607 [DEBUG] [Thread-27221] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:57:59.608 [DEBUG] [Thread-27221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:57:59.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:57:59.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:57:59.648 [DEBUG] [Thread-27221] [transport.py] [_log()] userauth is OK
2026-04-15T22:57:59.648 [DEBUG] [Thread-27221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:57:59.649 [DEBUG] [Thread-27221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:57:59.649 [DEBUG] [Thread-27221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:57:59.649 [DEBUG] [Thread-27221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:57:59.683 [INFO] [Thread-27221] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:57:59.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:58:00.479 [DEBUG] [Thread-27221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:58:00.479 [DEBUG] [Thread-27221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:58:00.480 [DEBUG] [Thread-27221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:58:00.520 [DEBUG] [Thread-27221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:58:00.520 [DEBUG] [Thread-27221] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:58:00.523 [DEBUG] [Thread-27221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:58:00.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:58:00.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:58:00.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:58:00.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:58:00.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:58:00.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:58:00.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:58:00.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:58:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:58:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.873046 -999.00   +9.10   8.35     82   +6.30 1 1 1 2 1     0    0 2.07 -25.15 ZNESW 6.5 8.3 111.8 10.3 9.7 -24.9 9.6 -23.7 9.3 -21.5 9.6 -23.6
2026-04-15T22:58:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:58:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:58:00.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.873046
2026-04-15T22:58:00.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:58:00.548 [DEBUG] [Thread-27221] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:58:00.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:58:00.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:58:00.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:58:00.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:58:00.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:57:29', tmtdew=3.36491, humidity=79.3467, cloud=0.0, wind=9.12312, temperature=9.01372, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:57:11.174', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.02874999999999872, -0.03474999999999895, -0.06750000000000078, -0.019000000000000128, -0.011749999999999261, 0.010999999999999233, -0.025749999999998607, 0.00999999999999801, -0.05599999999999916, -0.056750000000000966, -0.04299999999999926, -0.006000000000000227, 0.028249999999999886, -0.006000000000000227, 0.008499999999997954, -0.011250000000000426, -0.046499999999999986, 0.0039999999999995595, -0.01675000000000182, -1.7763568394002505e-15, 0.00024999999999941735, 0.007250000000000867, -0.00575000000000081, 0.006499999999999062, -0.061500000000000554, 0.02275000000000027, -0.014499999999999957, 0.040000000000000924, 0.028000000000002245, 0.07800000000000118, 0.03200000000000003, -0.06675000000000075], zp_timestamp='2026-04-15T20:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:58:00.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:58:00.807 [DEBUG] [Thread-27224] [transport.py] [_log()] starting thread (client mode): 0xf13e2b00
2026-04-15T22:58:00.808 [DEBUG] [Thread-27224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:58:00.821 [DEBUG] [Thread-27224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:58:00.821 [INFO] [Thread-27224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:58:00.829 [DEBUG] [Thread-27224] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:58:00.829 [DEBUG] [Thread-27224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:58:00.829 [DEBUG] [Thread-27224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:58:00.829 [DEBUG] [Thread-27224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:58:00.829 [DEBUG] [Thread-27224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:58:00.829 [DEBUG] [Thread-27224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:58:00.829 [DEBUG] [Thread-27224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:58:00.829 [DEBUG] [Thread-27224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:58:00.830 [DEBUG] [Thread-27224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:58:00.830 [DEBUG] [Thread-27224] [transport.py] [_log()] client lang: <none>
2026-04-15T22:58:00.830 [DEBUG] [Thread-27224] [transport.py] [_log()] server lang: <none>
2026-04-15T22:58:00.830 [DEBUG] [Thread-27224] [transport.py] [_log()] kex follows: False
2026-04-15T22:58:00.830 [DEBUG] [Thread-27224] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:58:00.830 [DEBUG] [Thread-27224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:58:00.830 [DEBUG] [Thread-27224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:58:00.830 [DEBUG] [Thread-27224] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:58:00.830 [DEBUG] [Thread-27224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:58:00.830 [DEBUG] [Thread-27224] [transport.py] [_log()] Compression: none
2026-04-15T22:58:00.830 [DEBUG] [Thread-27224] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:58:00.886 [DEBUG] [Thread-27224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:58:00.886 [DEBUG] [Thread-27224] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:58:00.886 [DEBUG] [Thread-27224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:58:00.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:58:00.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:58:00.943 [DEBUG] [Thread-27224] [transport.py] [_log()] userauth is OK
2026-04-15T22:58:00.943 [DEBUG] [Thread-27224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:58:00.943 [DEBUG] [Thread-27224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:58:00.943 [DEBUG] [Thread-27224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:58:00.943 [DEBUG] [Thread-27224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:58:00.960 [INFO] [Thread-27224] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:58:00.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:58:00.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:58:01.782 [DEBUG] [Thread-27224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:58:01.782 [DEBUG] [Thread-27224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:58:01.830 [DEBUG] [Thread-27224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:58:01.830 [DEBUG] [Thread-27224] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:58:01.839 [DEBUG] [Thread-27224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:58:01.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:58:01.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')
2026-04-15T22:58:01.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
2026-04-15T22:58:01.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:58:01.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:58:01.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:58:01.873 [DEBUG] [Thread-27224] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:58:06.997 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:58:06.998 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:58:07.880 [DEBUG] [Thread-27226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:58:22.920 [DEBUG] [Thread-27227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:58:31.486 [DEBUG] [Thread-27228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:58:31.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:58:31.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:58:31.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
2026-04-15T22:58:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 58, 4), 3.36313, 79.3633, 0.0, 9.26424, 9.06349, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:58:33.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:58:04
2026-04-15T22:58:33.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:58:33.969 [DEBUG] [Thread-27229] [transport.py] [_log()] starting thread (client mode): 0xf13c92d0
2026-04-15T22:58:33.969 [DEBUG] [Thread-27229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:58:33.988 [DEBUG] [Thread-27229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:58:33.988 [INFO] [Thread-27229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:58:33.991 [DEBUG] [Thread-27229] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:58:33.991 [DEBUG] [Thread-27229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:58:33.991 [DEBUG] [Thread-27229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:58:33.991 [DEBUG] [Thread-27229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:58:33.991 [DEBUG] [Thread-27229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:58:33.991 [DEBUG] [Thread-27229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:58:33.991 [DEBUG] [Thread-27229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:58:33.991 [DEBUG] [Thread-27229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:58:33.991 [DEBUG] [Thread-27229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:58:33.991 [DEBUG] [Thread-27229] [transport.py] [_log()] client lang: <none>
2026-04-15T22:58:33.992 [DEBUG] [Thread-27229] [transport.py] [_log()] server lang: <none>
2026-04-15T22:58:33.992 [DEBUG] [Thread-27229] [transport.py] [_log()] kex follows: False
2026-04-15T22:58:33.992 [DEBUG] [Thread-27229] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:58:33.992 [DEBUG] [Thread-27229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:58:33.992 [DEBUG] [Thread-27229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:58:33.992 [DEBUG] [Thread-27229] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:58:33.992 [DEBUG] [Thread-27229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:58:33.992 [DEBUG] [Thread-27229] [transport.py] [_log()] Compression: none
2026-04-15T22:58:33.992 [DEBUG] [Thread-27229] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:58:34.008 [DEBUG] [Thread-27229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:58:34.008 [DEBUG] [Thread-27229] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:58:34.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:58:34.009 [DEBUG] [Thread-27229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:58:34.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:58:34.010 [DEBUG] [Thread-27229] [transport.py] [_log()] userauth is OK
2026-04-15T22:58:34.010 [DEBUG] [Thread-27229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:58:34.010 [DEBUG] [Thread-27229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:58:34.010 [DEBUG] [Thread-27229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:58:34.010 [DEBUG] [Thread-27229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:58:34.045 [INFO] [Thread-27229] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:58:34.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:58:34.807 [DEBUG] [Thread-27229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:58:34.808 [DEBUG] [Thread-27229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:58:34.808 [DEBUG] [Thread-27229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:58:34.848 [DEBUG] [Thread-27229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:58:34.849 [DEBUG] [Thread-27229] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:58:34.851 [DEBUG] [Thread-27229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:58:34.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:58:34.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:58:34.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:58:34.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:58:34.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:58:34.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:58:34.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:58:34.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:58:34.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:58:34.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.873393 -999.00   +9.10   6.99     83   +6.30 1 1 1 2 1     0    0 2.11 -23.72 ZNESW 6.5 7.0 109.2 10.2 9.7 -25.0 9.6 -23.6 9.3 -21.6 9.6 -23.5
2026-04-15T22:58:34.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:58:34.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:58:34.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.873393
2026-04-15T22:58:34.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:58:34.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:58:34.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:58:34.870 [DEBUG] [Thread-27229] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:58:34.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:58:34.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:58:34.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:58:04', tmtdew=3.36313, humidity=79.3633, cloud=0.0, wind=9.26424, temperature=9.06349, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:57:41.155', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.02874999999999872, -0.03474999999999895, -0.06750000000000078, -0.019000000000000128, -0.011749999999999261, 0.010999999999999233, -0.025749999999998607, 0.00999999999999801, -0.05599999999999916, -0.056750000000000966, -0.04299999999999926, -0.006000000000000227, 0.028249999999999886, -0.006000000000000227, 0.008499999999997954, -0.011250000000000426, -0.046499999999999986, 0.0039999999999995595, -0.01675000000000182, -1.7763568394002505e-15, 0.00024999999999941735, 0.007250000000000867, -0.00575000000000081, 0.006499999999999062, -0.061500000000000554, 0.02275000000000027, -0.014499999999999957, 0.040000000000000924, 0.028000000000002245, 0.07800000000000118, 0.03200000000000003, -0.06675000000000075], zp_timestamp='2026-04-15T20:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:58:35.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:58:35.079 [DEBUG] [Thread-27232] [transport.py] [_log()] starting thread (client mode): 0xf1352290
2026-04-15T22:58:35.079 [DEBUG] [Thread-27232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:58:35.093 [DEBUG] [Thread-27232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:58:35.093 [INFO] [Thread-27232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:58:35.100 [DEBUG] [Thread-27232] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] client lang: <none>
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] server lang: <none>
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] kex follows: False
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] Compression: none
2026-04-15T22:58:35.101 [DEBUG] [Thread-27232] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:58:35.159 [DEBUG] [Thread-27232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:58:35.159 [DEBUG] [Thread-27232] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:58:35.160 [DEBUG] [Thread-27232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:58:35.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:58:35.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:58:35.215 [DEBUG] [Thread-27232] [transport.py] [_log()] userauth is OK
2026-04-15T22:58:35.216 [DEBUG] [Thread-27232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:58:35.216 [DEBUG] [Thread-27232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:58:35.216 [DEBUG] [Thread-27232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:58:35.216 [DEBUG] [Thread-27232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:58:35.239 [INFO] [Thread-27232] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:58:35.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:58:35.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:58:36.106 [DEBUG] [Thread-27232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:58:36.106 [DEBUG] [Thread-27232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:58:36.154 [DEBUG] [Thread-27232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:58:36.154 [DEBUG] [Thread-27232] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:58:36.163 [DEBUG] [Thread-27232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:58:36.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:58:36.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')
2026-04-15T22:58:36.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
2026-04-15T22:58:36.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:58:36.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:58:36.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:58:36.199 [DEBUG] [Thread-27232] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:58:37.951 [DEBUG] [Thread-27234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:58:52.992 [DEBUG] [Thread-27235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:59:06.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:59:06.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:59:06.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
2026-04-15T22:59:07.199 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:59:07.201 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:59:07.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 58, 39), 3.12705, 80.7266, 0.0, 11.5402, 9.06016, 0, 1, 0, 2, 0, 0),)
2026-04-15T22:59:07.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:58:39
2026-04-15T22:59:07.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:59:08.019 [DEBUG] [Thread-27236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:59:08.276 [DEBUG] [Thread-27237] [transport.py] [_log()] starting thread (client mode): 0xf1351cc0
2026-04-15T22:59:08.276 [DEBUG] [Thread-27237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:59:08.291 [DEBUG] [Thread-27237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:59:08.291 [INFO] [Thread-27237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:59:08.294 [DEBUG] [Thread-27237] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] client lang: <none>
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] server lang: <none>
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] kex follows: False
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] Compression: none
2026-04-15T22:59:08.295 [DEBUG] [Thread-27237] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:59:08.310 [DEBUG] [Thread-27237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:59:08.310 [DEBUG] [Thread-27237] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:59:08.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:59:08.310 [DEBUG] [Thread-27237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:59:08.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:59:08.311 [DEBUG] [Thread-27237] [transport.py] [_log()] userauth is OK
2026-04-15T22:59:08.311 [DEBUG] [Thread-27237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:59:08.311 [DEBUG] [Thread-27237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:59:08.311 [DEBUG] [Thread-27237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:59:08.311 [DEBUG] [Thread-27237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:59:08.324 [INFO] [Thread-27237] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:59:08.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:59:09.096 [DEBUG] [Thread-27237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:59:09.096 [DEBUG] [Thread-27237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:59:09.097 [DEBUG] [Thread-27237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:59:09.137 [DEBUG] [Thread-27237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:59:09.137 [DEBUG] [Thread-27237] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:59:09.140 [DEBUG] [Thread-27237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:59:09.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:59:09.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:59:09.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:59:09.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:59:09.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:59:09.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:59:09.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:59:09.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:59:09.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:59:09.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.873740 -999.00   +9.00   7.71     83   +6.30 1 1 1 2 1     0    0 2.09 -24.99 ZNESW 7.2 7.7 106.4 10.2 9.7 -24.9 9.6 -23.7 9.3 -21.6 9.6 -23.6
2026-04-15T22:59:09.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:59:09.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:59:09.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.873740
2026-04-15T22:59:09.165 [DEBUG] [Thread-27237] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:59:09.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:59:09.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:59:09.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:59:09.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:59:09.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:59:09.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:58:39', tmtdew=3.12705, humidity=80.7266, cloud=0.0, wind=11.5402, temperature=9.06016, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:58:11.136', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.02874999999999872, -0.03474999999999895, -0.06750000000000078, -0.019000000000000128, -0.011749999999999261, 0.010999999999999233, -0.025749999999998607, 0.00999999999999801, -0.05599999999999916, -0.056750000000000966, -0.04299999999999926, -0.006000000000000227, 0.028249999999999886, -0.006000000000000227, 0.008499999999997954, -0.011250000000000426, -0.046499999999999986, 0.0039999999999995595, -0.01675000000000182, -1.7763568394002505e-15, 0.00024999999999941735, 0.007250000000000867, -0.00575000000000081, 0.006499999999999062, -0.061500000000000554, 0.02275000000000027, -0.014499999999999957, 0.040000000000000924, 0.028000000000002245, 0.07800000000000118, 0.03200000000000003, -0.06675000000000075], zp_timestamp='2026-04-15T20:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:59:09.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:59:09.432 [DEBUG] [Thread-27240] [transport.py] [_log()] starting thread (client mode): 0xf13e3040
2026-04-15T22:59:09.432 [DEBUG] [Thread-27240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:59:09.447 [DEBUG] [Thread-27240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:59:09.447 [INFO] [Thread-27240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:59:09.454 [DEBUG] [Thread-27240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:59:09.454 [DEBUG] [Thread-27240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:59:09.455 [DEBUG] [Thread-27240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:59:09.455 [DEBUG] [Thread-27240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:59:09.455 [DEBUG] [Thread-27240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:59:09.455 [DEBUG] [Thread-27240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:59:09.455 [DEBUG] [Thread-27240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:59:09.455 [DEBUG] [Thread-27240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:59:09.455 [DEBUG] [Thread-27240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:59:09.455 [DEBUG] [Thread-27240] [transport.py] [_log()] client lang: <none>
2026-04-15T22:59:09.455 [DEBUG] [Thread-27240] [transport.py] [_log()] server lang: <none>
2026-04-15T22:59:09.455 [DEBUG] [Thread-27240] [transport.py] [_log()] kex follows: False
2026-04-15T22:59:09.455 [DEBUG] [Thread-27240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:59:09.455 [DEBUG] [Thread-27240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:59:09.455 [DEBUG] [Thread-27240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:59:09.456 [DEBUG] [Thread-27240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:59:09.456 [DEBUG] [Thread-27240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:59:09.456 [DEBUG] [Thread-27240] [transport.py] [_log()] Compression: none
2026-04-15T22:59:09.456 [DEBUG] [Thread-27240] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:59:09.510 [DEBUG] [Thread-27240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:59:09.511 [DEBUG] [Thread-27240] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:59:09.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:59:09.511 [DEBUG] [Thread-27240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:59:09.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:59:09.568 [DEBUG] [Thread-27240] [transport.py] [_log()] userauth is OK
2026-04-15T22:59:09.568 [DEBUG] [Thread-27240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:59:09.568 [DEBUG] [Thread-27240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:59:09.568 [DEBUG] [Thread-27240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:59:09.568 [DEBUG] [Thread-27240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:59:09.593 [INFO] [Thread-27240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:59:09.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:59:09.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:59:10.409 [DEBUG] [Thread-27240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:59:10.409 [DEBUG] [Thread-27240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:59:10.457 [DEBUG] [Thread-27240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:59:10.457 [DEBUG] [Thread-27240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:59:10.466 [DEBUG] [Thread-27240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:59:10.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:59:10.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')
2026-04-15T22:59:10.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
2026-04-15T22:59:10.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:59:10.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:59:10.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:59:10.501 [DEBUG] [Thread-27240] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:59:23.047 [DEBUG] [Thread-27242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:59:31.652 [DEBUG] [Thread-27243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:59:38.090 [DEBUG] [Thread-27244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T22:59:40.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T22:59:40.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T22:59:40.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
2026-04-15T22:59:41.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 59, 15), 3.37879, 79.2804, 0.0, 11.5405, 9.09667, 0, 0, 0, 2, 0, 0),)
2026-04-15T22:59:41.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:59:15
2026-04-15T22:59:42.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T22:59:42.616 [DEBUG] [Thread-27245] [transport.py] [_log()] starting thread (client mode): 0xee906800
2026-04-15T22:59:42.617 [DEBUG] [Thread-27245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:59:42.636 [DEBUG] [Thread-27245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T22:59:42.636 [INFO] [Thread-27245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T22:59:42.639 [DEBUG] [Thread-27245] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:59:42.639 [DEBUG] [Thread-27245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T22:59:42.639 [DEBUG] [Thread-27245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:59:42.639 [DEBUG] [Thread-27245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:59:42.639 [DEBUG] [Thread-27245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:59:42.640 [DEBUG] [Thread-27245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:59:42.640 [DEBUG] [Thread-27245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:59:42.640 [DEBUG] [Thread-27245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:59:42.640 [DEBUG] [Thread-27245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:59:42.640 [DEBUG] [Thread-27245] [transport.py] [_log()] client lang: <none>
2026-04-15T22:59:42.640 [DEBUG] [Thread-27245] [transport.py] [_log()] server lang: <none>
2026-04-15T22:59:42.640 [DEBUG] [Thread-27245] [transport.py] [_log()] kex follows: False
2026-04-15T22:59:42.640 [DEBUG] [Thread-27245] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:59:42.640 [DEBUG] [Thread-27245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:59:42.640 [DEBUG] [Thread-27245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:59:42.640 [DEBUG] [Thread-27245] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:59:42.640 [DEBUG] [Thread-27245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:59:42.640 [DEBUG] [Thread-27245] [transport.py] [_log()] Compression: none
2026-04-15T22:59:42.640 [DEBUG] [Thread-27245] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:59:42.656 [DEBUG] [Thread-27245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:59:42.656 [DEBUG] [Thread-27245] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:59:42.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T22:59:42.657 [DEBUG] [Thread-27245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T22:59:42.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:59:42.658 [DEBUG] [Thread-27245] [transport.py] [_log()] userauth is OK
2026-04-15T22:59:42.658 [DEBUG] [Thread-27245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:59:42.658 [DEBUG] [Thread-27245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:59:42.658 [DEBUG] [Thread-27245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T22:59:42.658 [DEBUG] [Thread-27245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:59:42.672 [INFO] [Thread-27245] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:59:42.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:59:43.487 [DEBUG] [Thread-27245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:59:43.487 [DEBUG] [Thread-27245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:59:43.488 [DEBUG] [Thread-27245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T22:59:43.528 [DEBUG] [Thread-27245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:59:43.528 [DEBUG] [Thread-27245] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:59:43.531 [DEBUG] [Thread-27245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:59:43.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:59:43.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T22:59:43.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T22:59:43.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T22:59:43.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:59:43.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T22:59:43.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:59:43.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:59:43.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T22:59:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.874435 -999.00   +8.90   8.09     83   +6.30 1 1 1 2 1     0    0 1.93 -27.82 ZNESW 8.1 8.1 113.2 9.7 9.7 -24.9 9.6 -23.7 9.3 -21.7 9.6 -23.6
2026-04-15T22:59:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T22:59:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T22:59:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.874435
2026-04-15T22:59:43.555 [DEBUG] [Thread-27245] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:59:43.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T22:59:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T22:59:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T22:59:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T22:59:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T22:59:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:59:15', tmtdew=3.37879, humidity=79.2804, cloud=0.0, wind=11.5405, temperature=9.09667, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:59:11.184', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.02874999999999872, -0.03474999999999895, -0.06750000000000078, -0.019000000000000128, -0.011749999999999261, 0.010999999999999233, -0.025749999999998607, 0.00999999999999801, -0.05599999999999916, -0.056750000000000966, -0.04299999999999926, -0.006000000000000227, 0.028249999999999886, -0.006000000000000227, 0.008499999999997954, -0.011250000000000426, -0.046499999999999986, 0.0039999999999995595, -0.01675000000000182, -1.7763568394002505e-15, 0.00024999999999941735, 0.007250000000000867, -0.00575000000000081, 0.006499999999999062, -0.061500000000000554, 0.02275000000000027, -0.014499999999999957, 0.040000000000000924, 0.028000000000002245, 0.07800000000000118, 0.03200000000000003, -0.06675000000000075], zp_timestamp='2026-04-15T20:55:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T22:59:43.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T22:59:43.812 [DEBUG] [Thread-27248] [transport.py] [_log()] starting thread (client mode): 0xee906620
2026-04-15T22:59:43.812 [DEBUG] [Thread-27248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T22:59:43.826 [DEBUG] [Thread-27248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T22:59:43.826 [INFO] [Thread-27248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T22:59:43.833 [DEBUG] [Thread-27248] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T22:59:43.834 [DEBUG] [Thread-27248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T22:59:43.834 [DEBUG] [Thread-27248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T22:59:43.834 [DEBUG] [Thread-27248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:59:43.834 [DEBUG] [Thread-27248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T22:59:43.834 [DEBUG] [Thread-27248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:59:43.834 [DEBUG] [Thread-27248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T22:59:43.834 [DEBUG] [Thread-27248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T22:59:43.834 [DEBUG] [Thread-27248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T22:59:43.834 [DEBUG] [Thread-27248] [transport.py] [_log()] client lang: <none>
2026-04-15T22:59:43.835 [DEBUG] [Thread-27248] [transport.py] [_log()] server lang: <none>
2026-04-15T22:59:43.835 [DEBUG] [Thread-27248] [transport.py] [_log()] kex follows: False
2026-04-15T22:59:43.835 [DEBUG] [Thread-27248] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T22:59:43.835 [DEBUG] [Thread-27248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T22:59:43.835 [DEBUG] [Thread-27248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T22:59:43.835 [DEBUG] [Thread-27248] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T22:59:43.835 [DEBUG] [Thread-27248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T22:59:43.835 [DEBUG] [Thread-27248] [transport.py] [_log()] Compression: none
2026-04-15T22:59:43.835 [DEBUG] [Thread-27248] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T22:59:43.894 [DEBUG] [Thread-27248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T22:59:43.894 [DEBUG] [Thread-27248] [transport.py] [_log()] Switch to new keys ...
2026-04-15T22:59:43.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T22:59:43.895 [DEBUG] [Thread-27248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T22:59:43.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T22:59:43.952 [DEBUG] [Thread-27248] [transport.py] [_log()] userauth is OK
2026-04-15T22:59:43.952 [DEBUG] [Thread-27248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T22:59:43.952 [DEBUG] [Thread-27248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T22:59:43.952 [DEBUG] [Thread-27248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T22:59:43.952 [DEBUG] [Thread-27248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T22:59:43.978 [INFO] [Thread-27248] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T22:59:43.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T22:59:43.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T22:59:44.792 [DEBUG] [Thread-27248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T22:59:44.792 [DEBUG] [Thread-27248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T22:59:44.840 [DEBUG] [Thread-27248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T22:59:44.840 [DEBUG] [Thread-27248] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T22:59:44.849 [DEBUG] [Thread-27248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T22:59:44.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T22:59:44.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')
2026-04-15T22:59: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') -> 00000000
2026-04-15T22:59:44.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T22:59:44.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T22:59:44.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T22:59:44.884 [DEBUG] [Thread-27248] [transport.py] [_log()] EOF in transport thread
2026-04-15T22:59:53.118 [DEBUG] [Thread-27250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:00:07.403 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:00:07.405 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:00:08.161 [DEBUG] [Thread-27251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:00:14.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:00:14.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:00:14.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
2026-04-15T23:00:16.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 22, 59, 50), 3.15243, 80.5939, 0.0, 11.8224, 9.12651, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:00:16.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 22:59:50
2026-04-15T23:00:16.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:00:16.909 [DEBUG] [Thread-27252] [transport.py] [_log()] starting thread (client mode): 0xf13e3640
2026-04-15T23:00:16.910 [DEBUG] [Thread-27252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:00:16.929 [DEBUG] [Thread-27252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:00:16.929 [INFO] [Thread-27252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:00:16.933 [DEBUG] [Thread-27252] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:00:16.933 [DEBUG] [Thread-27252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:00:16.933 [DEBUG] [Thread-27252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:00:16.933 [DEBUG] [Thread-27252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:00:16.933 [DEBUG] [Thread-27252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:00:16.933 [DEBUG] [Thread-27252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:00:16.933 [DEBUG] [Thread-27252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:00:16.933 [DEBUG] [Thread-27252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:00:16.933 [DEBUG] [Thread-27252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:00:16.933 [DEBUG] [Thread-27252] [transport.py] [_log()] client lang: <none>
2026-04-15T23:00:16.934 [DEBUG] [Thread-27252] [transport.py] [_log()] server lang: <none>
2026-04-15T23:00:16.934 [DEBUG] [Thread-27252] [transport.py] [_log()] kex follows: False
2026-04-15T23:00:16.934 [DEBUG] [Thread-27252] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:00:16.934 [DEBUG] [Thread-27252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:00:16.934 [DEBUG] [Thread-27252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:00:16.934 [DEBUG] [Thread-27252] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:00:16.934 [DEBUG] [Thread-27252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:00:16.934 [DEBUG] [Thread-27252] [transport.py] [_log()] Compression: none
2026-04-15T23:00:16.934 [DEBUG] [Thread-27252] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:00:16.952 [DEBUG] [Thread-27252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:00:16.952 [DEBUG] [Thread-27252] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:00:16.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:00:16.953 [DEBUG] [Thread-27252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:00:16.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:00:16.954 [DEBUG] [Thread-27252] [transport.py] [_log()] userauth is OK
2026-04-15T23:00:16.954 [DEBUG] [Thread-27252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:00:16.954 [DEBUG] [Thread-27252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:00:16.954 [DEBUG] [Thread-27252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:00:16.954 [DEBUG] [Thread-27252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:00:16.977 [INFO] [Thread-27252] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:00:16.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:00:20.618 [DEBUG] [Thread-27252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:00:20.618 [DEBUG] [Thread-27252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:00:20.619 [DEBUG] [Thread-27252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:00:20.660 [DEBUG] [Thread-27252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:00:20.660 [DEBUG] [Thread-27252] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:00:20.663 [DEBUG] [Thread-27252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:00:20.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:00:20.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:00:20.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:00:20.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:00:20.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:00:20.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:00:20.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:00:20.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:00:20.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:00:20.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.874782 -999.00   +8.90   6.32     83   +6.30 1 1 1 2 1     0    0 1.92 -31.14 ZNESW 7.8 6.3 108.2 9.5 9.7 -25.0 9.6 -23.8 9.3 -21.7 9.6 -23.5
2026-04-15T23:00:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:00:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:00:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.874782
2026-04-15T23:00:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:00:20.698 [DEBUG] [Thread-27252] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:00:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:00:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:00:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:00:20.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:00:20.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T22:59:50', tmtdew=3.15243, humidity=80.5939, cloud=0.0, wind=11.8224, temperature=9.12651, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T20:59:41.165', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.02874999999999872, -0.03474999999999895, -0.06750000000000078, -0.019000000000000128, -0.011749999999999261, 0.010999999999999233, -0.025749999999998607, 0.00999999999999801, -0.05599999999999916, -0.056750000000000966, -0.04299999999999926, -0.006000000000000227, 0.028249999999999886, -0.006000000000000227, 0.008499999999997954, -0.011250000000000426, -0.046499999999999986, 0.0039999999999995595, -0.01675000000000182, -1.7763568394002505e-15, 0.00024999999999941735, 0.007250000000000867, -0.00575000000000081, 0.006499999999999062, -0.061500000000000554, 0.02275000000000027, -0.014499999999999957, 0.040000000000000924, 0.028000000000002245, 0.07800000000000118, 0.03200000000000003, -0.06675000000000075], zp_timestamp='2026-04-15T20:58:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:00:20.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:00:20.952 [DEBUG] [Thread-27255] [transport.py] [_log()] starting thread (client mode): 0xf13c9ae0
2026-04-15T23:00:20.953 [DEBUG] [Thread-27255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:00:20.967 [DEBUG] [Thread-27255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:00:20.967 [INFO] [Thread-27255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:00:20.974 [DEBUG] [Thread-27255] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:00:20.974 [DEBUG] [Thread-27255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:00:20.974 [DEBUG] [Thread-27255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:00:20.975 [DEBUG] [Thread-27255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:00:20.975 [DEBUG] [Thread-27255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:00:20.975 [DEBUG] [Thread-27255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:00:20.975 [DEBUG] [Thread-27255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:00:20.975 [DEBUG] [Thread-27255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:00:20.975 [DEBUG] [Thread-27255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:00:20.975 [DEBUG] [Thread-27255] [transport.py] [_log()] client lang: <none>
2026-04-15T23:00:20.975 [DEBUG] [Thread-27255] [transport.py] [_log()] server lang: <none>
2026-04-15T23:00:20.975 [DEBUG] [Thread-27255] [transport.py] [_log()] kex follows: False
2026-04-15T23:00:20.975 [DEBUG] [Thread-27255] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:00:20.975 [DEBUG] [Thread-27255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:00:20.975 [DEBUG] [Thread-27255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:00:20.976 [DEBUG] [Thread-27255] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:00:20.976 [DEBUG] [Thread-27255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:00:20.976 [DEBUG] [Thread-27255] [transport.py] [_log()] Compression: none
2026-04-15T23:00:20.976 [DEBUG] [Thread-27255] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:00:21.031 [DEBUG] [Thread-27255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:00:21.031 [DEBUG] [Thread-27255] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:00:21.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:00:21.032 [DEBUG] [Thread-27255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:00:21.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:00:21.089 [DEBUG] [Thread-27255] [transport.py] [_log()] userauth is OK
2026-04-15T23:00:21.089 [DEBUG] [Thread-27255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:00:21.089 [DEBUG] [Thread-27255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:00:21.089 [DEBUG] [Thread-27255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:00:21.090 [DEBUG] [Thread-27255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:00:21.116 [INFO] [Thread-27255] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:00:21.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:00:21.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:00:21.934 [DEBUG] [Thread-27255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:00:21.934 [DEBUG] [Thread-27255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:00:21.982 [DEBUG] [Thread-27255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:00:21.982 [DEBUG] [Thread-27255] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:00:21.990 [DEBUG] [Thread-27255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:00:21.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:00:21.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')
2026-04-15T23:00:22.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
2026-04-15T23:00:22.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:00:22.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:00:22.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:00:22.022 [DEBUG] [Thread-27255] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:00:23.191 [DEBUG] [Thread-27257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:00:31.803 [DEBUG] [Thread-27258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:00:38.233 [DEBUG] [Thread-27259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:00:52.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:00:52.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:00:52.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
2026-04-15T23:00:53.263 [DEBUG] [Thread-27260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:00:53.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 0, 25), 3.38395, 79.2472, 0.0, 11.4523, 9.06349, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:00:53.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:00:25
2026-04-15T23:00:53.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:00:54.083 [DEBUG] [Thread-27261] [transport.py] [_log()] starting thread (client mode): 0xf13cbeb0
2026-04-15T23:00:54.083 [DEBUG] [Thread-27261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:00:54.103 [DEBUG] [Thread-27261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:00:54.103 [INFO] [Thread-27261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:00:54.106 [DEBUG] [Thread-27261] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:00:54.106 [DEBUG] [Thread-27261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:00:54.106 [DEBUG] [Thread-27261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:00:54.106 [DEBUG] [Thread-27261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:00:54.107 [DEBUG] [Thread-27261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:00:54.107 [DEBUG] [Thread-27261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:00:54.107 [DEBUG] [Thread-27261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:00:54.107 [DEBUG] [Thread-27261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:00:54.107 [DEBUG] [Thread-27261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:00:54.107 [DEBUG] [Thread-27261] [transport.py] [_log()] client lang: <none>
2026-04-15T23:00:54.107 [DEBUG] [Thread-27261] [transport.py] [_log()] server lang: <none>
2026-04-15T23:00:54.107 [DEBUG] [Thread-27261] [transport.py] [_log()] kex follows: False
2026-04-15T23:00:54.107 [DEBUG] [Thread-27261] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:00:54.107 [DEBUG] [Thread-27261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:00:54.107 [DEBUG] [Thread-27261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:00:54.107 [DEBUG] [Thread-27261] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:00:54.108 [DEBUG] [Thread-27261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:00:54.108 [DEBUG] [Thread-27261] [transport.py] [_log()] Compression: none
2026-04-15T23:00:54.108 [DEBUG] [Thread-27261] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:00:54.124 [DEBUG] [Thread-27261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:00:54.125 [DEBUG] [Thread-27261] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:00:54.125 [DEBUG] [Thread-27261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:00:54.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:00:54.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:00:54.169 [DEBUG] [Thread-27261] [transport.py] [_log()] userauth is OK
2026-04-15T23:00:54.169 [DEBUG] [Thread-27261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:00:54.169 [DEBUG] [Thread-27261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:00:54.169 [DEBUG] [Thread-27261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:00:54.169 [DEBUG] [Thread-27261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:00:54.194 [INFO] [Thread-27261] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:00:54.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:00:55.008 [DEBUG] [Thread-27261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:00:55.009 [DEBUG] [Thread-27261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:00:55.009 [DEBUG] [Thread-27261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:00:55.049 [DEBUG] [Thread-27261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:00:55.049 [DEBUG] [Thread-27261] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:00:55.052 [DEBUG] [Thread-27261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:00:55.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:00:55.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:00:55.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:00:55.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:00:55.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:00:55.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:00:55.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:00:55.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:00:55.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:00:55.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.875129 -999.00   +8.80   8.50     84   +6.30 1 1 1 2 1     0    0 1.90 -28.22 ZNESW 7.7 8.5 114.2 10.4 9.6 -24.9 9.6 -23.8 9.3 -21.6 9.6 -23.7
2026-04-15T23:00:55.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:00:55.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:00:55.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.875129
2026-04-15T23:00:55.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:00:55.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:00:55.078 [DEBUG] [Thread-27261] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:00:55.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:00:55.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:00:55.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:00:55.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:00:25', tmtdew=3.38395, humidity=79.2472, cloud=0.0, wind=11.4523, temperature=9.06349, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:00:11.146', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.02874999999999872, -0.03474999999999895, -0.06750000000000078, -0.019000000000000128, -0.011749999999999261, 0.010999999999999233, -0.025749999999998607, 0.00999999999999801, -0.05599999999999916, -0.056750000000000966, -0.04299999999999926, -0.006000000000000227, 0.028249999999999886, -0.006000000000000227, 0.008499999999997954, -0.011250000000000426, -0.046499999999999986, 0.0039999999999995595, -0.01675000000000182, -1.7763568394002505e-15, 0.00024999999999941735, 0.007250000000000867, -0.00575000000000081, 0.006499999999999062, -0.061500000000000554, 0.02275000000000027, -0.014499999999999957, 0.040000000000000924, 0.028000000000002245, 0.07800000000000118, 0.03200000000000003, -0.06675000000000075], zp_timestamp='2026-04-15T20:58:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:00:55.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:00:55.329 [DEBUG] [Thread-27264] [transport.py] [_log()] starting thread (client mode): 0xf1351cc0
2026-04-15T23:00:55.329 [DEBUG] [Thread-27264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:00:55.344 [DEBUG] [Thread-27264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:00:55.344 [INFO] [Thread-27264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:00:55.351 [DEBUG] [Thread-27264] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:00:55.352 [DEBUG] [Thread-27264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:00:55.352 [DEBUG] [Thread-27264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:00:55.352 [DEBUG] [Thread-27264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:00:55.352 [DEBUG] [Thread-27264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:00:55.352 [DEBUG] [Thread-27264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:00:55.352 [DEBUG] [Thread-27264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:00:55.352 [DEBUG] [Thread-27264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:00:55.352 [DEBUG] [Thread-27264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:00:55.352 [DEBUG] [Thread-27264] [transport.py] [_log()] client lang: <none>
2026-04-15T23:00:55.352 [DEBUG] [Thread-27264] [transport.py] [_log()] server lang: <none>
2026-04-15T23:00:55.352 [DEBUG] [Thread-27264] [transport.py] [_log()] kex follows: False
2026-04-15T23:00:55.352 [DEBUG] [Thread-27264] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:00:55.353 [DEBUG] [Thread-27264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:00:55.353 [DEBUG] [Thread-27264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:00:55.353 [DEBUG] [Thread-27264] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:00:55.353 [DEBUG] [Thread-27264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:00:55.353 [DEBUG] [Thread-27264] [transport.py] [_log()] Compression: none
2026-04-15T23:00:55.353 [DEBUG] [Thread-27264] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:00:55.407 [DEBUG] [Thread-27264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:00:55.407 [DEBUG] [Thread-27264] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:00:55.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:00:55.408 [DEBUG] [Thread-27264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:00:55.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:00:55.464 [DEBUG] [Thread-27264] [transport.py] [_log()] userauth is OK
2026-04-15T23:00:55.464 [DEBUG] [Thread-27264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:00:55.464 [DEBUG] [Thread-27264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:00:55.464 [DEBUG] [Thread-27264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:00:55.465 [DEBUG] [Thread-27264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:00:55.489 [INFO] [Thread-27264] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:00:55.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:00:55.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:00:56.332 [DEBUG] [Thread-27264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:00:56.332 [DEBUG] [Thread-27264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:00:56.381 [DEBUG] [Thread-27264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:00:56.382 [DEBUG] [Thread-27264] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:00:56.390 [DEBUG] [Thread-27264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:00:56.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:00: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')
2026-04-15T23:00:56.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
2026-04-15T23:00:56.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:00:56.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:00:56.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:00:56.422 [DEBUG] [Thread-27264] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:01:07.608 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:01:07.610 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:01:08.289 [DEBUG] [Thread-27266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:01:23.330 [DEBUG] [Thread-27267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:01:26.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:01:26.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:01:26.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
2026-04-15T23:01:27.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 1, 1), 3.38355, 79.2472, 0.0, 11.6287, 9.0469, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:01:27.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:01:01
2026-04-15T23:01:28.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:01:28.498 [DEBUG] [Thread-27268] [transport.py] [_log()] starting thread (client mode): 0xf1365bd0
2026-04-15T23:01:28.498 [DEBUG] [Thread-27268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:01:28.517 [DEBUG] [Thread-27268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:01:28.517 [INFO] [Thread-27268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:01:28.521 [DEBUG] [Thread-27268] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:01:28.521 [DEBUG] [Thread-27268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:01:28.521 [DEBUG] [Thread-27268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:01:28.521 [DEBUG] [Thread-27268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:01:28.521 [DEBUG] [Thread-27268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:01:28.521 [DEBUG] [Thread-27268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:01:28.521 [DEBUG] [Thread-27268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:01:28.521 [DEBUG] [Thread-27268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:01:28.521 [DEBUG] [Thread-27268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:01:28.521 [DEBUG] [Thread-27268] [transport.py] [_log()] client lang: <none>
2026-04-15T23:01:28.521 [DEBUG] [Thread-27268] [transport.py] [_log()] server lang: <none>
2026-04-15T23:01:28.522 [DEBUG] [Thread-27268] [transport.py] [_log()] kex follows: False
2026-04-15T23:01:28.522 [DEBUG] [Thread-27268] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:01:28.522 [DEBUG] [Thread-27268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:01:28.522 [DEBUG] [Thread-27268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:01:28.522 [DEBUG] [Thread-27268] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:01:28.522 [DEBUG] [Thread-27268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:01:28.522 [DEBUG] [Thread-27268] [transport.py] [_log()] Compression: none
2026-04-15T23:01:28.522 [DEBUG] [Thread-27268] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:01:28.540 [DEBUG] [Thread-27268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:01:28.540 [DEBUG] [Thread-27268] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:01:28.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:01:28.541 [DEBUG] [Thread-27268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:01:28.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:01:28.542 [DEBUG] [Thread-27268] [transport.py] [_log()] userauth is OK
2026-04-15T23:01:28.542 [DEBUG] [Thread-27268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:01:28.542 [DEBUG] [Thread-27268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:01:28.542 [DEBUG] [Thread-27268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:01:28.542 [DEBUG] [Thread-27268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:01:28.566 [INFO] [Thread-27268] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:01:28.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:01:29.338 [DEBUG] [Thread-27268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:01:29.339 [DEBUG] [Thread-27268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:01:29.339 [DEBUG] [Thread-27268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:01:29.379 [DEBUG] [Thread-27268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:01:29.379 [DEBUG] [Thread-27268] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:01:29.382 [DEBUG] [Thread-27268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:01:29.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:01:29.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:01:29.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:01:29.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:01:29.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:01:29.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:01:29.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:01:29.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:01:29.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:01:29.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.875476 -999.00   +8.80   8.11     84   +6.30 1 1 1 2 1     0    0 1.90 -30.45 ZNESW 8.1 8.1 110.0 10.0 9.7 -24.9 9.5 -23.7 9.3 -21.6 9.5 -23.7
2026-04-15T23:01:29.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:01:29.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:01:29.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.875476
2026-04-15T23:01:29.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:01:29.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:01:29.409 [DEBUG] [Thread-27268] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:01:29.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:01:29.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:01:29.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:01:29.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:01:01', tmtdew=3.38355, humidity=79.2472, cloud=0.0, wind=11.6287, temperature=9.0469, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:00:41.126', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.02874999999999872, -0.03474999999999895, -0.06750000000000078, -0.019000000000000128, -0.011749999999999261, 0.010999999999999233, -0.025749999999998607, 0.00999999999999801, -0.05599999999999916, -0.056750000000000966, -0.04299999999999926, -0.006000000000000227, 0.028249999999999886, -0.006000000000000227, 0.008499999999997954, -0.011250000000000426, -0.046499999999999986, 0.0039999999999995595, -0.01675000000000182, -1.7763568394002505e-15, 0.00024999999999941735, 0.007250000000000867, -0.00575000000000081, 0.006499999999999062, -0.061500000000000554, 0.02275000000000027, -0.014499999999999957, 0.040000000000000924, 0.028000000000002245, 0.07800000000000118, 0.03200000000000003, -0.06675000000000075], zp_timestamp='2026-04-15T20:58:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:01:29.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:01:29.666 [DEBUG] [Thread-27271] [transport.py] [_log()] starting thread (client mode): 0xee9c7730
2026-04-15T23:01:29.667 [DEBUG] [Thread-27271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:01:29.680 [DEBUG] [Thread-27271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:01:29.681 [INFO] [Thread-27271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:01:29.688 [DEBUG] [Thread-27271] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:01:29.688 [DEBUG] [Thread-27271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:01:29.688 [DEBUG] [Thread-27271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:01:29.688 [DEBUG] [Thread-27271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:01:29.688 [DEBUG] [Thread-27271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:01:29.688 [DEBUG] [Thread-27271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:01:29.688 [DEBUG] [Thread-27271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:01:29.688 [DEBUG] [Thread-27271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:01:29.688 [DEBUG] [Thread-27271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:01:29.689 [DEBUG] [Thread-27271] [transport.py] [_log()] client lang: <none>
2026-04-15T23:01:29.689 [DEBUG] [Thread-27271] [transport.py] [_log()] server lang: <none>
2026-04-15T23:01:29.689 [DEBUG] [Thread-27271] [transport.py] [_log()] kex follows: False
2026-04-15T23:01:29.689 [DEBUG] [Thread-27271] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:01:29.689 [DEBUG] [Thread-27271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:01:29.689 [DEBUG] [Thread-27271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:01:29.689 [DEBUG] [Thread-27271] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:01:29.689 [DEBUG] [Thread-27271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:01:29.689 [DEBUG] [Thread-27271] [transport.py] [_log()] Compression: none
2026-04-15T23:01:29.689 [DEBUG] [Thread-27271] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:01:29.743 [DEBUG] [Thread-27271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:01:29.744 [DEBUG] [Thread-27271] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:01:29.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:01:29.744 [DEBUG] [Thread-27271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:01:29.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:01:29.804 [DEBUG] [Thread-27271] [transport.py] [_log()] userauth is OK
2026-04-15T23:01:29.804 [DEBUG] [Thread-27271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:01:29.805 [DEBUG] [Thread-27271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:01:29.805 [DEBUG] [Thread-27271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:01:29.805 [DEBUG] [Thread-27271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:01:29.830 [INFO] [Thread-27271] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:01:29.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:01:29.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:01:30.630 [DEBUG] [Thread-27271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:01:30.630 [DEBUG] [Thread-27271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:01:30.678 [DEBUG] [Thread-27271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:01:30.678 [DEBUG] [Thread-27271] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:01:30.687 [DEBUG] [Thread-27271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:01:30.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:01:30.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')
2026-04-15T23:01:30.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
2026-04-15T23:01:30.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:01:30.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:01:30.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:01:30.728 [DEBUG] [Thread-27271] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:01:31.952 [DEBUG] [Thread-27273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:01:38.359 [DEBUG] [Thread-27274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:01:53.396 [DEBUG] [Thread-27275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:02:00.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:02:00.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:02:00.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
2026-04-15T23:02:01.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 1, 36), 3.17306, 80.4612, 0.0, 11.646, 8.9938, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:02:01.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:01:36
2026-04-15T23:02:02.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:02:02.809 [DEBUG] [Thread-27276] [transport.py] [_log()] starting thread (client mode): 0xf1350b50
2026-04-15T23:02:02.810 [DEBUG] [Thread-27276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:02:02.829 [DEBUG] [Thread-27276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:02:02.829 [INFO] [Thread-27276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:02:02.832 [DEBUG] [Thread-27276] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:02:02.832 [DEBUG] [Thread-27276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:02:02.833 [DEBUG] [Thread-27276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:02:02.833 [DEBUG] [Thread-27276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:02:02.833 [DEBUG] [Thread-27276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:02:02.833 [DEBUG] [Thread-27276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:02:02.833 [DEBUG] [Thread-27276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:02:02.833 [DEBUG] [Thread-27276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:02:02.833 [DEBUG] [Thread-27276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:02:02.833 [DEBUG] [Thread-27276] [transport.py] [_log()] client lang: <none>
2026-04-15T23:02:02.833 [DEBUG] [Thread-27276] [transport.py] [_log()] server lang: <none>
2026-04-15T23:02:02.833 [DEBUG] [Thread-27276] [transport.py] [_log()] kex follows: False
2026-04-15T23:02:02.833 [DEBUG] [Thread-27276] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:02:02.833 [DEBUG] [Thread-27276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:02:02.834 [DEBUG] [Thread-27276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:02:02.834 [DEBUG] [Thread-27276] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:02:02.834 [DEBUG] [Thread-27276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:02:02.834 [DEBUG] [Thread-27276] [transport.py] [_log()] Compression: none
2026-04-15T23:02:02.834 [DEBUG] [Thread-27276] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:02:02.850 [DEBUG] [Thread-27276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:02:02.850 [DEBUG] [Thread-27276] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:02:02.851 [DEBUG] [Thread-27276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:02:02.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:02:02.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:02:02.852 [DEBUG] [Thread-27276] [transport.py] [_log()] userauth is OK
2026-04-15T23:02:02.852 [DEBUG] [Thread-27276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:02:02.852 [DEBUG] [Thread-27276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:02:02.852 [DEBUG] [Thread-27276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:02:02.852 [DEBUG] [Thread-27276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:02:02.880 [INFO] [Thread-27276] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:02:02.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:02:03.658 [DEBUG] [Thread-27276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:02:03.658 [DEBUG] [Thread-27276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:02:03.659 [DEBUG] [Thread-27276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:02:03.699 [DEBUG] [Thread-27276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:02:03.699 [DEBUG] [Thread-27276] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:02:03.702 [DEBUG] [Thread-27276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:02:03.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:02:03.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:02:03.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:02:03.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:02:03.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:02:03.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:02:03.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:02:03.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:02:03.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:02:03.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.875824 -999.00   +8.80   7.16     84   +6.20 1 1 1 2 1     0    0 1.96 -27.57 ZNESW 7.2 7.2 106.8 10.0 9.6 -24.9 9.5 -23.8 9.3 -21.6 9.5 -23.6
2026-04-15T23:02:03.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:02:03.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:02:03.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.875824
2026-04-15T23:02:03.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:02:03.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:02:03.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:02:03.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:02:03.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:02:03.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:01:36', tmtdew=3.17306, humidity=80.4612, cloud=0.0, wind=11.646, temperature=8.9938, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:01:11.194', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.02874999999999872, -0.03474999999999895, -0.06750000000000078, -0.019000000000000128, -0.011749999999999261, 0.010999999999999233, -0.025749999999998607, 0.00999999999999801, -0.05599999999999916, -0.056750000000000966, -0.04299999999999926, -0.006000000000000227, 0.028249999999999886, -0.006000000000000227, 0.008499999999997954, -0.011250000000000426, -0.046499999999999986, 0.0039999999999995595, -0.01675000000000182, -1.7763568394002505e-15, 0.00024999999999941735, 0.007250000000000867, -0.00575000000000081, 0.006499999999999062, -0.061500000000000554, 0.02275000000000027, -0.014499999999999957, 0.040000000000000924, 0.028000000000002245, 0.07800000000000118, 0.03200000000000003, -0.06675000000000075], zp_timestamp='2026-04-15T20:58:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:02:03.729 [DEBUG] [Thread-27276] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:02:03.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:02:03.982 [DEBUG] [Thread-27279] [transport.py] [_log()] starting thread (client mode): 0xf13c9b70
2026-04-15T23:02:03.982 [DEBUG] [Thread-27279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:02:03.997 [DEBUG] [Thread-27279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:02:03.997 [INFO] [Thread-27279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:02:04.004 [DEBUG] [Thread-27279] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:02:04.005 [DEBUG] [Thread-27279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:02:04.005 [DEBUG] [Thread-27279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:02:04.005 [DEBUG] [Thread-27279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:02:04.005 [DEBUG] [Thread-27279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:02:04.005 [DEBUG] [Thread-27279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:02:04.005 [DEBUG] [Thread-27279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:02:04.005 [DEBUG] [Thread-27279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:02:04.005 [DEBUG] [Thread-27279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:02:04.005 [DEBUG] [Thread-27279] [transport.py] [_log()] client lang: <none>
2026-04-15T23:02:04.005 [DEBUG] [Thread-27279] [transport.py] [_log()] server lang: <none>
2026-04-15T23:02:04.005 [DEBUG] [Thread-27279] [transport.py] [_log()] kex follows: False
2026-04-15T23:02:04.005 [DEBUG] [Thread-27279] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:02:04.006 [DEBUG] [Thread-27279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:02:04.006 [DEBUG] [Thread-27279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:02:04.006 [DEBUG] [Thread-27279] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:02:04.006 [DEBUG] [Thread-27279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:02:04.006 [DEBUG] [Thread-27279] [transport.py] [_log()] Compression: none
2026-04-15T23:02:04.006 [DEBUG] [Thread-27279] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:02:04.064 [DEBUG] [Thread-27279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:02:04.064 [DEBUG] [Thread-27279] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:02:04.064 [DEBUG] [Thread-27279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:02:04.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:02:04.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:02:04.120 [DEBUG] [Thread-27279] [transport.py] [_log()] userauth is OK
2026-04-15T23:02:04.121 [DEBUG] [Thread-27279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:02:04.121 [DEBUG] [Thread-27279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:02:04.121 [DEBUG] [Thread-27279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:02:04.121 [DEBUG] [Thread-27279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:02:04.146 [INFO] [Thread-27279] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:02:04.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:02:04.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:02:04.943 [DEBUG] [Thread-27279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:02:04.943 [DEBUG] [Thread-27279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:02:04.990 [DEBUG] [Thread-27279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:02:04.990 [DEBUG] [Thread-27279] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:02:04.999 [DEBUG] [Thread-27279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:02:05.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:02:05.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')
2026-04-15T23:02:05.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
2026-04-15T23:02:05.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:02:05.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:02:05.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:02:05.030 [DEBUG] [Thread-27279] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:02:07.812 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:02:07.814 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:02:08.425 [DEBUG] [Thread-27281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:02:18.043 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:02:23.463 [DEBUG] [Thread-27282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:02:29.411 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:02:32.103 [DEBUG] [Thread-27283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:02:33.787 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:02:35.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:02:35.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:02:35.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:02:36.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 2, 11), 3.43476, 79.2472, 0.0, 10.8878, 9.14667, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:02:36.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:02:11
2026-04-15T23:02:36.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:02:37.139 [DEBUG] [Thread-27284] [transport.py] [_log()] starting thread (client mode): 0xf13c9fc0
2026-04-15T23:02:37.139 [DEBUG] [Thread-27284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:02:37.158 [DEBUG] [Thread-27284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:02:37.158 [INFO] [Thread-27284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:02:37.162 [DEBUG] [Thread-27284] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:02:37.162 [DEBUG] [Thread-27284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:02:37.162 [DEBUG] [Thread-27284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:02:37.162 [DEBUG] [Thread-27284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:02:37.162 [DEBUG] [Thread-27284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:02:37.162 [DEBUG] [Thread-27284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:02:37.163 [DEBUG] [Thread-27284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:02:37.163 [DEBUG] [Thread-27284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:02:37.163 [DEBUG] [Thread-27284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:02:37.163 [DEBUG] [Thread-27284] [transport.py] [_log()] client lang: <none>
2026-04-15T23:02:37.163 [DEBUG] [Thread-27284] [transport.py] [_log()] server lang: <none>
2026-04-15T23:02:37.163 [DEBUG] [Thread-27284] [transport.py] [_log()] kex follows: False
2026-04-15T23:02:37.163 [DEBUG] [Thread-27284] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:02:37.164 [DEBUG] [Thread-27284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:02:37.164 [DEBUG] [Thread-27284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:02:37.164 [DEBUG] [Thread-27284] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:02:37.164 [DEBUG] [Thread-27284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:02:37.164 [DEBUG] [Thread-27284] [transport.py] [_log()] Compression: none
2026-04-15T23:02:37.164 [DEBUG] [Thread-27284] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:02:37.182 [DEBUG] [Thread-27284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:02:37.183 [DEBUG] [Thread-27284] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:02:37.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:02:37.183 [DEBUG] [Thread-27284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:02:37.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:02:37.184 [DEBUG] [Thread-27284] [transport.py] [_log()] userauth is OK
2026-04-15T23:02:37.184 [DEBUG] [Thread-27284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:02:37.184 [DEBUG] [Thread-27284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:02:37.184 [DEBUG] [Thread-27284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:02:37.184 [DEBUG] [Thread-27284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:02:37.205 [INFO] [Thread-27284] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:02:37.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:02:37.952 [DEBUG] [Thread-27284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:02:37.953 [DEBUG] [Thread-27284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:02:37.953 [DEBUG] [Thread-27284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:02:37.993 [DEBUG] [Thread-27284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:02:37.993 [DEBUG] [Thread-27284] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:02:37.995 [DEBUG] [Thread-27284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:02:38.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:02:38.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:02:38.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:02:38.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:02:38.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:02:38.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:02:38.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:02:38.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:02:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:02:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.876171 -999.00   +8.80   6.90     84   +6.20 1 1 1 2 1     0    0 1.97 -26.13 ZNESW 6.8 6.9 106.4 9.5 9.6 -24.8 9.5 -23.6 9.2 -21.7 9.5 -23.6
2026-04-15T23:02:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:02:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:02:38.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.876171
2026-04-15T23:02:38.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:02:38.015 [DEBUG] [Thread-27284] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:02:38.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:02:38.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:02:38.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:02:38.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:02:38.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:02:11', tmtdew=3.43476, humidity=79.2472, cloud=0.0, wind=10.8878, temperature=9.14667, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:01:41.174', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.02874999999999872, -0.03474999999999895, -0.06750000000000078, -0.019000000000000128, -0.011749999999999261, 0.010999999999999233, -0.025749999999998607, 0.00999999999999801, -0.05599999999999916, -0.056750000000000966, -0.04299999999999926, -0.006000000000000227, 0.028249999999999886, -0.006000000000000227, 0.008499999999997954, -0.011250000000000426, -0.046499999999999986, 0.0039999999999995595, -0.01675000000000182, -1.7763568394002505e-15, 0.00024999999999941735, 0.007250000000000867, -0.00575000000000081, 0.006499999999999062, -0.061500000000000554, 0.02275000000000027, -0.014499999999999957, 0.040000000000000924, 0.028000000000002245, 0.07800000000000118, 0.03200000000000003, -0.06675000000000075], zp_timestamp='2026-04-15T20:58:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:02:38.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:02:38.277 [DEBUG] [Thread-27287] [transport.py] [_log()] starting thread (client mode): 0xf13c9b70
2026-04-15T23:02:38.277 [DEBUG] [Thread-27287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:02:38.292 [DEBUG] [Thread-27287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:02:38.292 [INFO] [Thread-27287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:02:38.299 [DEBUG] [Thread-27287] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:02:38.299 [DEBUG] [Thread-27287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:02:38.299 [DEBUG] [Thread-27287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:02:38.299 [DEBUG] [Thread-27287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:02:38.300 [DEBUG] [Thread-27287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:02:38.300 [DEBUG] [Thread-27287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:02:38.300 [DEBUG] [Thread-27287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:02:38.300 [DEBUG] [Thread-27287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:02:38.300 [DEBUG] [Thread-27287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:02:38.300 [DEBUG] [Thread-27287] [transport.py] [_log()] client lang: <none>
2026-04-15T23:02:38.300 [DEBUG] [Thread-27287] [transport.py] [_log()] server lang: <none>
2026-04-15T23:02:38.300 [DEBUG] [Thread-27287] [transport.py] [_log()] kex follows: False
2026-04-15T23:02:38.300 [DEBUG] [Thread-27287] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:02:38.300 [DEBUG] [Thread-27287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:02:38.300 [DEBUG] [Thread-27287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:02:38.300 [DEBUG] [Thread-27287] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:02:38.301 [DEBUG] [Thread-27287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:02:38.301 [DEBUG] [Thread-27287] [transport.py] [_log()] Compression: none
2026-04-15T23:02:38.301 [DEBUG] [Thread-27287] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:02:38.359 [DEBUG] [Thread-27287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:02:38.360 [DEBUG] [Thread-27287] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:02:38.360 [DEBUG] [Thread-27287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:02:38.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:02:38.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:02:38.416 [DEBUG] [Thread-27287] [transport.py] [_log()] userauth is OK
2026-04-15T23:02:38.417 [DEBUG] [Thread-27287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:02:38.417 [DEBUG] [Thread-27287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:02:38.417 [DEBUG] [Thread-27287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:02:38.417 [DEBUG] [Thread-27287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:02:38.442 [INFO] [Thread-27287] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:02:38.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:02:38.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:02:38.493 [DEBUG] [Thread-27289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:02:39.240 [DEBUG] [Thread-27287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:02:39.240 [DEBUG] [Thread-27287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:02:39.288 [DEBUG] [Thread-27287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:02:39.288 [DEBUG] [Thread-27287] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:02:39.297 [DEBUG] [Thread-27287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:02:39.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:02:39.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')
2026-04-15T23:02:39.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') -> 00000000
2026-04-15T23:02:39.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:02:39.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:02:39.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:02:39.332 [DEBUG] [Thread-27287] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:02:53.537 [DEBUG] [Thread-27290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:03:08.015 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:03:08.016 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:03:08.569 [DEBUG] [Thread-27291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:03:09.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:03:09.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:03:09.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:03:10.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 2, 46), 3.17982, 80.428, 0.0, 10.7993, 9.02698, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:03:10.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:02:46
2026-04-15T23:03:10.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:03:11.381 [DEBUG] [Thread-27292] [transport.py] [_log()] starting thread (client mode): 0xf13cb730
2026-04-15T23:03:11.382 [DEBUG] [Thread-27292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:03:11.400 [DEBUG] [Thread-27292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:03:11.400 [INFO] [Thread-27292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:03:11.403 [DEBUG] [Thread-27292] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:03:11.403 [DEBUG] [Thread-27292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:03:11.404 [DEBUG] [Thread-27292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:03:11.404 [DEBUG] [Thread-27292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:03:11.404 [DEBUG] [Thread-27292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:03:11.404 [DEBUG] [Thread-27292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:03:11.404 [DEBUG] [Thread-27292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:03:11.404 [DEBUG] [Thread-27292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:03:11.404 [DEBUG] [Thread-27292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:03:11.404 [DEBUG] [Thread-27292] [transport.py] [_log()] client lang: <none>
2026-04-15T23:03:11.404 [DEBUG] [Thread-27292] [transport.py] [_log()] server lang: <none>
2026-04-15T23:03:11.404 [DEBUG] [Thread-27292] [transport.py] [_log()] kex follows: False
2026-04-15T23:03:11.404 [DEBUG] [Thread-27292] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:03:11.404 [DEBUG] [Thread-27292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:03:11.405 [DEBUG] [Thread-27292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:03:11.405 [DEBUG] [Thread-27292] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:03:11.405 [DEBUG] [Thread-27292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:03:11.405 [DEBUG] [Thread-27292] [transport.py] [_log()] Compression: none
2026-04-15T23:03:11.405 [DEBUG] [Thread-27292] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:03:11.413 [DEBUG] [Thread-27292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:03:11.413 [DEBUG] [Thread-27292] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:03:11.414 [DEBUG] [Thread-27292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:03:11.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:03:11.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:03:11.415 [DEBUG] [Thread-27292] [transport.py] [_log()] userauth is OK
2026-04-15T23:03:11.415 [DEBUG] [Thread-27292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:03:11.415 [DEBUG] [Thread-27292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:03:11.415 [DEBUG] [Thread-27292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:03:11.415 [DEBUG] [Thread-27292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:03:11.431 [INFO] [Thread-27292] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:03:11.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:03:12.251 [DEBUG] [Thread-27292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:03:12.251 [DEBUG] [Thread-27292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:03:12.252 [DEBUG] [Thread-27292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:03:12.292 [DEBUG] [Thread-27292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:03:12.292 [DEBUG] [Thread-27292] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:03:12.295 [DEBUG] [Thread-27292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:03:12.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:03:12.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:03:12.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:03:12.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:03:12.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:03:12.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:03:12.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:03:12.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:03:12.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:03:12.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.876865 -999.00   +8.80   7.31     84   +6.20 1 1 1 2 1     0    0 2.12 -22.75 ZNESW 6.8 7.3 110.4 9.7 9.6 -24.9 9.5 -23.7 9.2 -21.5 9.5 -23.5
2026-04-15T23:03:12.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:03:12.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:03:12.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.876865
2026-04-15T23:03:12.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:03:12.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:03:12.318 [DEBUG] [Thread-27292] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:03:12.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:03:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:03:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:03:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:02:46', tmtdew=3.17982, humidity=80.428, cloud=0.0, wind=10.7993, temperature=9.02698, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:02:41.136', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.01774999999999949, -0.02474999999999916, -0.06750000000000078, -0.07399999999999984, -0.009749999999998593, 0.0039999999999995595, -0.020749999999999602, 0.026499999999998636, -0.05450000000000088, -0.043250000000000455, -0.07600000000000051, -0.005000000000000782, 0.020749999999999602, 0.023999999999999133, -0.0129999999999999, -0.012750000000000483, -0.06049999999999933, -0.005000000000000782, -0.012750000000000483, -0.02500000000000213, 0.029249999999997556, -0.0022500000000000853, 0.023750000000001492, 0.0009999999999994458, -0.0754999999999999, 0.012750000000000483, -0.03149999999999942, 0.0034999999999989484, 0.04800000000000182, 0.05349999999999966, 0.026500000000000412, -0.08025000000000126], zp_timestamp='2026-04-15T21:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:03:12.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:03:12.548 [DEBUG] [Thread-27295] [transport.py] [_log()] starting thread (client mode): 0xf1365de0
2026-04-15T23:03:12.548 [DEBUG] [Thread-27295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:03:12.567 [DEBUG] [Thread-27295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:03:12.567 [INFO] [Thread-27295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:03:12.576 [DEBUG] [Thread-27295] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:03:12.576 [DEBUG] [Thread-27295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:03:12.576 [DEBUG] [Thread-27295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:03:12.576 [DEBUG] [Thread-27295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:03:12.576 [DEBUG] [Thread-27295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:03:12.576 [DEBUG] [Thread-27295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:03:12.576 [DEBUG] [Thread-27295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:03:12.576 [DEBUG] [Thread-27295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:03:12.576 [DEBUG] [Thread-27295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:03:12.577 [DEBUG] [Thread-27295] [transport.py] [_log()] client lang: <none>
2026-04-15T23:03:12.577 [DEBUG] [Thread-27295] [transport.py] [_log()] server lang: <none>
2026-04-15T23:03:12.577 [DEBUG] [Thread-27295] [transport.py] [_log()] kex follows: False
2026-04-15T23:03:12.577 [DEBUG] [Thread-27295] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:03:12.577 [DEBUG] [Thread-27295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:03:12.577 [DEBUG] [Thread-27295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:03:12.577 [DEBUG] [Thread-27295] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:03:12.577 [DEBUG] [Thread-27295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:03:12.577 [DEBUG] [Thread-27295] [transport.py] [_log()] Compression: none
2026-04-15T23:03:12.577 [DEBUG] [Thread-27295] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:03:12.635 [DEBUG] [Thread-27295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:03:12.636 [DEBUG] [Thread-27295] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:03:12.636 [DEBUG] [Thread-27295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:03:12.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:03:12.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:03:12.695 [DEBUG] [Thread-27295] [transport.py] [_log()] userauth is OK
2026-04-15T23:03:12.696 [DEBUG] [Thread-27295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:03:12.696 [DEBUG] [Thread-27295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:03:12.696 [DEBUG] [Thread-27295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:03:12.696 [DEBUG] [Thread-27295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:03:12.724 [INFO] [Thread-27295] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:03:12.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:03:12.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:03:13.562 [DEBUG] [Thread-27295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:03:13.562 [DEBUG] [Thread-27295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:03:13.610 [DEBUG] [Thread-27295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:03:13.610 [DEBUG] [Thread-27295] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:03:13.620 [DEBUG] [Thread-27295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:03:13.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:03:13.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')
2026-04-15T23:03:13.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
2026-04-15T23:03:13.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:03:13.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:03:13.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:03:13.657 [DEBUG] [Thread-27295] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:03:23.601 [DEBUG] [Thread-27297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:03:32.267 [DEBUG] [Thread-27298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:03:38.646 [DEBUG] [Thread-27299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:03:43.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:03:43.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:03:43.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
2026-04-15T23:03:44.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 3, 21), 3.44032, 78.714, 0.0, 10.6585, 9.08008, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:03:44.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:03:21
2026-04-15T23:03:45.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:03:45.763 [DEBUG] [Thread-27300] [transport.py] [_log()] starting thread (client mode): 0xee9c7f40
2026-04-15T23:03:45.763 [DEBUG] [Thread-27300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:03:45.784 [DEBUG] [Thread-27300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:03:45.784 [INFO] [Thread-27300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:03:45.787 [DEBUG] [Thread-27300] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:03:45.787 [DEBUG] [Thread-27300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:03:45.787 [DEBUG] [Thread-27300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:03:45.788 [DEBUG] [Thread-27300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:03:45.788 [DEBUG] [Thread-27300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:03:45.788 [DEBUG] [Thread-27300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:03:45.788 [DEBUG] [Thread-27300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:03:45.788 [DEBUG] [Thread-27300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:03:45.788 [DEBUG] [Thread-27300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:03:45.788 [DEBUG] [Thread-27300] [transport.py] [_log()] client lang: <none>
2026-04-15T23:03:45.788 [DEBUG] [Thread-27300] [transport.py] [_log()] server lang: <none>
2026-04-15T23:03:45.788 [DEBUG] [Thread-27300] [transport.py] [_log()] kex follows: False
2026-04-15T23:03:45.788 [DEBUG] [Thread-27300] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:03:45.788 [DEBUG] [Thread-27300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:03:45.788 [DEBUG] [Thread-27300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:03:45.789 [DEBUG] [Thread-27300] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:03:45.789 [DEBUG] [Thread-27300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:03:45.789 [DEBUG] [Thread-27300] [transport.py] [_log()] Compression: none
2026-04-15T23:03:45.789 [DEBUG] [Thread-27300] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:03:45.807 [DEBUG] [Thread-27300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:03:45.807 [DEBUG] [Thread-27300] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:03:45.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:03:45.808 [DEBUG] [Thread-27300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:03:45.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:03:45.809 [DEBUG] [Thread-27300] [transport.py] [_log()] userauth is OK
2026-04-15T23:03:45.809 [DEBUG] [Thread-27300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:03:45.810 [DEBUG] [Thread-27300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:03:45.810 [DEBUG] [Thread-27300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:03:45.810 [DEBUG] [Thread-27300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:03:45.834 [INFO] [Thread-27300] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:03:45.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:03:46.578 [DEBUG] [Thread-27300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:03:46.578 [DEBUG] [Thread-27300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:03:46.579 [DEBUG] [Thread-27300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:03:46.619 [DEBUG] [Thread-27300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:03:46.619 [DEBUG] [Thread-27300] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:03:46.622 [DEBUG] [Thread-27300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:03:46.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:03:46.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:03:46.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:03:46.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:03:46.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:03:46.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:03:46.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:03:46.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:03:46.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:03:46.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.877212 -999.00   +8.80   6.99     84   +6.30 1 1 1 2 1     0    0 2.06 -22.27 ZNESW 6.3 7.0 97.4 9.0 9.6 -25.0 9.5 -23.7 9.2 -21.5 9.5 -23.5
2026-04-15T23:03:46.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:03:46.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:03:46.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.877212
2026-04-15T23:03:46.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:03:46.646 [DEBUG] [Thread-27300] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:03:46.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:03:46.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:03:46.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:03:46.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:03:46.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:03:21', tmtdew=3.44032, humidity=78.714, cloud=0.0, wind=10.6585, temperature=9.08008, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:03:11.117', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.01774999999999949, -0.02474999999999916, -0.06750000000000078, -0.07399999999999984, -0.009749999999998593, 0.0039999999999995595, -0.020749999999999602, 0.026499999999998636, -0.05450000000000088, -0.043250000000000455, -0.07600000000000051, -0.005000000000000782, 0.020749999999999602, 0.023999999999999133, -0.0129999999999999, -0.012750000000000483, -0.06049999999999933, -0.005000000000000782, -0.012750000000000483, -0.02500000000000213, 0.029249999999997556, -0.0022500000000000853, 0.023750000000001492, 0.0009999999999994458, -0.0754999999999999, 0.012750000000000483, -0.03149999999999942, 0.0034999999999989484, 0.04800000000000182, 0.05349999999999966, 0.026500000000000412, -0.08025000000000126], zp_timestamp='2026-04-15T21:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:03:46.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:03:46.905 [DEBUG] [Thread-27303] [transport.py] [_log()] starting thread (client mode): 0xee9070d0
2026-04-15T23:03:46.905 [DEBUG] [Thread-27303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:03:46.920 [DEBUG] [Thread-27303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:03:46.920 [INFO] [Thread-27303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:03:46.927 [DEBUG] [Thread-27303] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:03:46.927 [DEBUG] [Thread-27303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:03:46.927 [DEBUG] [Thread-27303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:03:46.927 [DEBUG] [Thread-27303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:03:46.927 [DEBUG] [Thread-27303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:03:46.927 [DEBUG] [Thread-27303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:03:46.928 [DEBUG] [Thread-27303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:03:46.928 [DEBUG] [Thread-27303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:03:46.928 [DEBUG] [Thread-27303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:03:46.928 [DEBUG] [Thread-27303] [transport.py] [_log()] client lang: <none>
2026-04-15T23:03:46.928 [DEBUG] [Thread-27303] [transport.py] [_log()] server lang: <none>
2026-04-15T23:03:46.928 [DEBUG] [Thread-27303] [transport.py] [_log()] kex follows: False
2026-04-15T23:03:46.928 [DEBUG] [Thread-27303] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:03:46.928 [DEBUG] [Thread-27303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:03:46.928 [DEBUG] [Thread-27303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:03:46.928 [DEBUG] [Thread-27303] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:03:46.928 [DEBUG] [Thread-27303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:03:46.929 [DEBUG] [Thread-27303] [transport.py] [_log()] Compression: none
2026-04-15T23:03:46.929 [DEBUG] [Thread-27303] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:03:46.984 [DEBUG] [Thread-27303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:03:46.985 [DEBUG] [Thread-27303] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:03:46.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:03:46.986 [DEBUG] [Thread-27303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:03:46.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:03:47.045 [DEBUG] [Thread-27303] [transport.py] [_log()] userauth is OK
2026-04-15T23:03:47.045 [DEBUG] [Thread-27303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:03:47.045 [DEBUG] [Thread-27303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:03:47.046 [DEBUG] [Thread-27303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:03:47.046 [DEBUG] [Thread-27303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:03:47.067 [INFO] [Thread-27303] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:03:47.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:03:47.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:03:47.901 [DEBUG] [Thread-27303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:03:47.901 [DEBUG] [Thread-27303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:03:47.949 [DEBUG] [Thread-27303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:03:47.949 [DEBUG] [Thread-27303] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:03:47.958 [DEBUG] [Thread-27303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:03:47.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:03:47.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T23:03:47.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
2026-04-15T23:03:47.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:03:47.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:03:47.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:03:47.993 [DEBUG] [Thread-27303] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:03:53.678 [DEBUG] [Thread-27305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:03:56.473 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:04:08.221 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:04:08.221 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:04:08.723 [DEBUG] [Thread-27306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:04:18.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:04:18.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:04:18.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
2026-04-15T23:04:19.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 3, 57), 3.44289, 78.6974, 0.0, 10.5527, 9.06349, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:04:19.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:03:57
2026-04-15T23:04:19.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:04:20.133 [DEBUG] [Thread-27307] [transport.py] [_log()] starting thread (client mode): 0xee9c12d0
2026-04-15T23:04:20.134 [DEBUG] [Thread-27307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:04:20.154 [DEBUG] [Thread-27307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:04:20.154 [INFO] [Thread-27307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:04:20.157 [DEBUG] [Thread-27307] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:04:20.157 [DEBUG] [Thread-27307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:04:20.157 [DEBUG] [Thread-27307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:04:20.157 [DEBUG] [Thread-27307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:04:20.157 [DEBUG] [Thread-27307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:04:20.157 [DEBUG] [Thread-27307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:04:20.157 [DEBUG] [Thread-27307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:04:20.158 [DEBUG] [Thread-27307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:04:20.158 [DEBUG] [Thread-27307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:04:20.158 [DEBUG] [Thread-27307] [transport.py] [_log()] client lang: <none>
2026-04-15T23:04:20.158 [DEBUG] [Thread-27307] [transport.py] [_log()] server lang: <none>
2026-04-15T23:04:20.158 [DEBUG] [Thread-27307] [transport.py] [_log()] kex follows: False
2026-04-15T23:04:20.158 [DEBUG] [Thread-27307] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:04:20.158 [DEBUG] [Thread-27307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:04:20.158 [DEBUG] [Thread-27307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:04:20.158 [DEBUG] [Thread-27307] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:04:20.158 [DEBUG] [Thread-27307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:04:20.158 [DEBUG] [Thread-27307] [transport.py] [_log()] Compression: none
2026-04-15T23:04:20.159 [DEBUG] [Thread-27307] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:04:20.175 [DEBUG] [Thread-27307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:04:20.176 [DEBUG] [Thread-27307] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:04:20.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:04:20.176 [DEBUG] [Thread-27307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:04:20.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:04:20.178 [DEBUG] [Thread-27307] [transport.py] [_log()] userauth is OK
2026-04-15T23:04:20.178 [DEBUG] [Thread-27307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:04:20.178 [DEBUG] [Thread-27307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:04:20.178 [DEBUG] [Thread-27307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:04:20.178 [DEBUG] [Thread-27307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:04:20.203 [INFO] [Thread-27307] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:04:20.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:04:21.027 [DEBUG] [Thread-27307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:04:21.027 [DEBUG] [Thread-27307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:04:21.028 [DEBUG] [Thread-27307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:04:21.068 [DEBUG] [Thread-27307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:04:21.068 [DEBUG] [Thread-27307] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:04:21.071 [DEBUG] [Thread-27307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:04:21.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:04:21.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:04:21.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:04:21.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:04:21.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:04:21.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:04:21.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:04:21.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:04:21.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:04:21.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.877560 -999.00   +8.80   8.60     84   +6.30 1 1 1 2 1     0    0 2.06 -23.07 ZNESW 8.7 8.6 115.8 9.5 9.6 -24.9 9.5 -23.6 9.3 -21.5 9.5 -23.4
2026-04-15T23:04:21.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:04:21.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:04:21.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.877560
2026-04-15T23:04:21.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:04:21.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:04:21.097 [DEBUG] [Thread-27307] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:04:21.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:04:21.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:04:21.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:04:21.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:03:57', tmtdew=3.44289, humidity=78.6974, cloud=0.0, wind=10.5527, temperature=9.06349, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:03:41.184', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.01774999999999949, -0.02474999999999916, -0.06750000000000078, -0.07399999999999984, -0.009749999999998593, 0.0039999999999995595, -0.020749999999999602, 0.026499999999998636, -0.05450000000000088, -0.043250000000000455, -0.07600000000000051, -0.005000000000000782, 0.020749999999999602, 0.023999999999999133, -0.0129999999999999, -0.012750000000000483, -0.06049999999999933, -0.005000000000000782, -0.012750000000000483, -0.02500000000000213, 0.029249999999997556, -0.0022500000000000853, 0.023750000000001492, 0.0009999999999994458, -0.0754999999999999, 0.012750000000000483, -0.03149999999999942, 0.0034999999999989484, 0.04800000000000182, 0.05349999999999966, 0.026500000000000412, -0.08025000000000126], zp_timestamp='2026-04-15T21:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:04:21.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:04:21.353 [DEBUG] [Thread-27310] [transport.py] [_log()] starting thread (client mode): 0xf13643d0
2026-04-15T23:04:21.354 [DEBUG] [Thread-27310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:04:21.369 [DEBUG] [Thread-27310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:04:21.369 [INFO] [Thread-27310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:04:21.376 [DEBUG] [Thread-27310] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:04:21.376 [DEBUG] [Thread-27310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:04:21.377 [DEBUG] [Thread-27310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:04:21.377 [DEBUG] [Thread-27310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:04:21.377 [DEBUG] [Thread-27310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:04:21.377 [DEBUG] [Thread-27310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:04:21.377 [DEBUG] [Thread-27310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:04:21.377 [DEBUG] [Thread-27310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:04:21.377 [DEBUG] [Thread-27310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:04:21.377 [DEBUG] [Thread-27310] [transport.py] [_log()] client lang: <none>
2026-04-15T23:04:21.377 [DEBUG] [Thread-27310] [transport.py] [_log()] server lang: <none>
2026-04-15T23:04:21.377 [DEBUG] [Thread-27310] [transport.py] [_log()] kex follows: False
2026-04-15T23:04:21.377 [DEBUG] [Thread-27310] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:04:21.377 [DEBUG] [Thread-27310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:04:21.377 [DEBUG] [Thread-27310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:04:21.378 [DEBUG] [Thread-27310] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:04:21.378 [DEBUG] [Thread-27310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:04:21.378 [DEBUG] [Thread-27310] [transport.py] [_log()] Compression: none
2026-04-15T23:04:21.378 [DEBUG] [Thread-27310] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:04:21.433 [DEBUG] [Thread-27310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:04:21.433 [DEBUG] [Thread-27310] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:04:21.433 [DEBUG] [Thread-27310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:04:21.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:04:21.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:04:21.489 [DEBUG] [Thread-27310] [transport.py] [_log()] userauth is OK
2026-04-15T23:04:21.489 [DEBUG] [Thread-27310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:04:21.490 [DEBUG] [Thread-27310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:04:21.490 [DEBUG] [Thread-27310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:04:21.490 [DEBUG] [Thread-27310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:04:21.513 [INFO] [Thread-27310] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:04:21.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:04:21.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:04:22.309 [DEBUG] [Thread-27310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:04:22.309 [DEBUG] [Thread-27310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:04:22.357 [DEBUG] [Thread-27310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:04:22.357 [DEBUG] [Thread-27310] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:04:22.366 [DEBUG] [Thread-27310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:04:22.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:04:22.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')
2026-04-15T23:04: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
2026-04-15T23:04:22.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:04:22.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:04:22.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:04:22.402 [DEBUG] [Thread-27310] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:04:22.754 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:04:23.755 [DEBUG] [Thread-27312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:04:27.030 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:04:32.411 [DEBUG] [Thread-27313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:04:38.798 [DEBUG] [Thread-27314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:04:52.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:04:52.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:04:52.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
2026-04-15T23:04:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 4, 32), 3.43774, 78.7306, 0.0, 10.588, 9.09667, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:04:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:04:32
2026-04-15T23:04:53.831 [DEBUG] [Thread-27315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:04:54.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:04:54.601 [DEBUG] [Thread-27316] [transport.py] [_log()] starting thread (client mode): 0xf1364c40
2026-04-15T23:04:54.601 [DEBUG] [Thread-27316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:04:54.621 [DEBUG] [Thread-27316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:04:54.621 [INFO] [Thread-27316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:04:54.623 [DEBUG] [Thread-27316] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:04:54.623 [DEBUG] [Thread-27316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:04:54.623 [DEBUG] [Thread-27316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:04:54.623 [DEBUG] [Thread-27316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:04:54.623 [DEBUG] [Thread-27316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:04:54.623 [DEBUG] [Thread-27316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:04:54.623 [DEBUG] [Thread-27316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:04:54.623 [DEBUG] [Thread-27316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:04:54.623 [DEBUG] [Thread-27316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:04:54.623 [DEBUG] [Thread-27316] [transport.py] [_log()] client lang: <none>
2026-04-15T23:04:54.623 [DEBUG] [Thread-27316] [transport.py] [_log()] server lang: <none>
2026-04-15T23:04:54.623 [DEBUG] [Thread-27316] [transport.py] [_log()] kex follows: False
2026-04-15T23:04:54.623 [DEBUG] [Thread-27316] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:04:54.623 [DEBUG] [Thread-27316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:04:54.624 [DEBUG] [Thread-27316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:04:54.624 [DEBUG] [Thread-27316] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:04:54.624 [DEBUG] [Thread-27316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:04:54.624 [DEBUG] [Thread-27316] [transport.py] [_log()] Compression: none
2026-04-15T23:04:54.624 [DEBUG] [Thread-27316] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:04:54.642 [DEBUG] [Thread-27316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:04:54.642 [DEBUG] [Thread-27316] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:04:54.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:04:54.643 [DEBUG] [Thread-27316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:04:54.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:04:54.644 [DEBUG] [Thread-27316] [transport.py] [_log()] userauth is OK
2026-04-15T23:04:54.644 [DEBUG] [Thread-27316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:04:54.644 [DEBUG] [Thread-27316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:04:54.644 [DEBUG] [Thread-27316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:04:54.644 [DEBUG] [Thread-27316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:04:54.656 [INFO] [Thread-27316] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:04:54.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:04:55.393 [DEBUG] [Thread-27316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:04:55.393 [DEBUG] [Thread-27316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:04:55.394 [DEBUG] [Thread-27316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:04:55.434 [DEBUG] [Thread-27316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:04:55.434 [DEBUG] [Thread-27316] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:04:55.436 [DEBUG] [Thread-27316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:04:55.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:04:55.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:04:55.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:04:55.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:04:55.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:04:55.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:04:55.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:04:55.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:04:55.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:04:55.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.877907 -999.00   +8.80   7.77     84   +6.30 1 1 1 2 1     0    0 2.05 -22.22 ZNESW 7.1 7.8 103.0 9.0 9.6 -24.8 9.4 -23.6 9.2 -21.4 9.5 -23.5
2026-04-15T23:04:55.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:04:55.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:04:55.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.877907
2026-04-15T23:04:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:04:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:04:55.461 [DEBUG] [Thread-27316] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:04:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:04:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:04:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:04:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:04:32', tmtdew=3.43774, humidity=78.7306, cloud=0.0, wind=10.588, temperature=9.09667, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:04:11.165', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.01774999999999949, -0.02474999999999916, -0.06750000000000078, -0.07399999999999984, -0.009749999999998593, 0.0039999999999995595, -0.020749999999999602, 0.026499999999998636, -0.05450000000000088, -0.043250000000000455, -0.07600000000000051, -0.005000000000000782, 0.020749999999999602, 0.023999999999999133, -0.0129999999999999, -0.012750000000000483, -0.06049999999999933, -0.005000000000000782, -0.012750000000000483, -0.02500000000000213, 0.029249999999997556, -0.0022500000000000853, 0.023750000000001492, 0.0009999999999994458, -0.0754999999999999, 0.012750000000000483, -0.03149999999999942, 0.0034999999999989484, 0.04800000000000182, 0.05349999999999966, 0.026500000000000412, -0.08025000000000126], zp_timestamp='2026-04-15T21:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:04:55.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:04:55.716 [DEBUG] [Thread-27319] [transport.py] [_log()] starting thread (client mode): 0xee9c2320
2026-04-15T23:04:55.716 [DEBUG] [Thread-27319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:04:55.730 [DEBUG] [Thread-27319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:04:55.730 [INFO] [Thread-27319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:04:55.738 [DEBUG] [Thread-27319] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:04:55.738 [DEBUG] [Thread-27319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:04:55.738 [DEBUG] [Thread-27319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:04:55.738 [DEBUG] [Thread-27319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:04:55.738 [DEBUG] [Thread-27319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:04:55.738 [DEBUG] [Thread-27319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:04:55.738 [DEBUG] [Thread-27319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:04:55.738 [DEBUG] [Thread-27319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:04:55.738 [DEBUG] [Thread-27319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:04:55.738 [DEBUG] [Thread-27319] [transport.py] [_log()] client lang: <none>
2026-04-15T23:04:55.739 [DEBUG] [Thread-27319] [transport.py] [_log()] server lang: <none>
2026-04-15T23:04:55.739 [DEBUG] [Thread-27319] [transport.py] [_log()] kex follows: False
2026-04-15T23:04:55.739 [DEBUG] [Thread-27319] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:04:55.739 [DEBUG] [Thread-27319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:04:55.739 [DEBUG] [Thread-27319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:04:55.739 [DEBUG] [Thread-27319] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:04:55.739 [DEBUG] [Thread-27319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:04:55.739 [DEBUG] [Thread-27319] [transport.py] [_log()] Compression: none
2026-04-15T23:04:55.739 [DEBUG] [Thread-27319] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:04:55.800 [DEBUG] [Thread-27319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:04:55.800 [DEBUG] [Thread-27319] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:04:55.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:04:55.801 [DEBUG] [Thread-27319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:04:55.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:04:55.857 [DEBUG] [Thread-27319] [transport.py] [_log()] userauth is OK
2026-04-15T23:04:55.857 [DEBUG] [Thread-27319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:04:55.857 [DEBUG] [Thread-27319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:04:55.858 [DEBUG] [Thread-27319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:04:55.858 [DEBUG] [Thread-27319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:04:55.882 [INFO] [Thread-27319] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:04:55.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:04:55.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:04:56.687 [DEBUG] [Thread-27319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:04:56.688 [DEBUG] [Thread-27319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:04:56.735 [DEBUG] [Thread-27319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:04:56.735 [DEBUG] [Thread-27319] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:04:56.744 [DEBUG] [Thread-27319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:04:56.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:04:56.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')
2026-04-15T23:04:56.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
2026-04-15T23:04:56.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:04:56.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:04:56.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:04:56.779 [DEBUG] [Thread-27319] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:05:07.644 [DEBUG] [Thread-23763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:05:08.423 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:05:08.423 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:05:08.862 [DEBUG] [Thread-27321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:05:23.905 [DEBUG] [Thread-27322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:05:26.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:05:26.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:05:26.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
2026-04-15T23:05:28.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 5, 8), 3.44628, 78.6808, 0.0, 10.5527, 9.08008, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:05:28.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:05:08
2026-04-15T23:05:28.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:05:28.921 [DEBUG] [Thread-27323] [transport.py] [_log()] starting thread (client mode): 0xf13378e0
2026-04-15T23:05:28.921 [DEBUG] [Thread-27323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:05:28.941 [DEBUG] [Thread-27323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:05:28.942 [INFO] [Thread-27323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:05:28.944 [DEBUG] [Thread-27323] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:05:28.944 [DEBUG] [Thread-27323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] client lang: <none>
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] server lang: <none>
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] kex follows: False
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] Compression: none
2026-04-15T23:05:28.945 [DEBUG] [Thread-27323] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:05:28.963 [DEBUG] [Thread-27323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:05:28.963 [DEBUG] [Thread-27323] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:05:28.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:05:28.964 [DEBUG] [Thread-27323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:05:28.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:05:28.965 [DEBUG] [Thread-27323] [transport.py] [_log()] userauth is OK
2026-04-15T23:05:28.965 [DEBUG] [Thread-27323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:05:28.965 [DEBUG] [Thread-27323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:05:28.965 [DEBUG] [Thread-27323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:05:28.965 [DEBUG] [Thread-27323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:05:28.990 [INFO] [Thread-27323] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:05:28.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:05:30.932 [DEBUG] [Thread-27323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:05:30.932 [DEBUG] [Thread-27323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:05:30.933 [DEBUG] [Thread-27323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:05:30.973 [DEBUG] [Thread-27323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:05:30.973 [DEBUG] [Thread-27323] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:05:30.976 [DEBUG] [Thread-27323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:05:30.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:05:30.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:05:30.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:05:30.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:05:30.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:05:30.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:05:30.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:05:30.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:05:30.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:05:30.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.878254 -999.00   +8.90   7.50     83   +6.30 1 1 1 2 1     0    0 2.10 -20.96 ZNESW 6.6 7.5 108.6 9.2 9.6 -24.7 9.5 -23.6 9.2 -21.5 9.5 -23.6
2026-04-15T23:05:31.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:05:31.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:05:31.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.878254
2026-04-15T23:05:31.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:05:31.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:05:31.001 [DEBUG] [Thread-27323] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:05:31.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:05:31.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:05:31.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:05:31.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:05:08', tmtdew=3.44628, humidity=78.6808, cloud=0.0, wind=10.5527, temperature=9.08008, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:04:41.146', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.01774999999999949, -0.02474999999999916, -0.06750000000000078, -0.07399999999999984, -0.009749999999998593, 0.0039999999999995595, -0.020749999999999602, 0.026499999999998636, -0.05450000000000088, -0.043250000000000455, -0.07600000000000051, -0.005000000000000782, 0.020749999999999602, 0.023999999999999133, -0.0129999999999999, -0.012750000000000483, -0.06049999999999933, -0.005000000000000782, -0.012750000000000483, -0.02500000000000213, 0.029249999999997556, -0.0022500000000000853, 0.023750000000001492, 0.0009999999999994458, -0.0754999999999999, 0.012750000000000483, -0.03149999999999942, 0.0034999999999989484, 0.04800000000000182, 0.05349999999999966, 0.026500000000000412, -0.08025000000000126], zp_timestamp='2026-04-15T21:01:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:05:31.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:05:31.257 [DEBUG] [Thread-27326] [transport.py] [_log()] starting thread (client mode): 0xf13e2fb0
2026-04-15T23:05:31.257 [DEBUG] [Thread-27326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:05:31.272 [DEBUG] [Thread-27326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:05:31.272 [INFO] [Thread-27326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:05:31.279 [DEBUG] [Thread-27326] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:05:31.280 [DEBUG] [Thread-27326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:05:31.280 [DEBUG] [Thread-27326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:05:31.280 [DEBUG] [Thread-27326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:05:31.280 [DEBUG] [Thread-27326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:05:31.280 [DEBUG] [Thread-27326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:05:31.280 [DEBUG] [Thread-27326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:05:31.280 [DEBUG] [Thread-27326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:05:31.280 [DEBUG] [Thread-27326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:05:31.280 [DEBUG] [Thread-27326] [transport.py] [_log()] client lang: <none>
2026-04-15T23:05:31.280 [DEBUG] [Thread-27326] [transport.py] [_log()] server lang: <none>
2026-04-15T23:05:31.280 [DEBUG] [Thread-27326] [transport.py] [_log()] kex follows: False
2026-04-15T23:05:31.281 [DEBUG] [Thread-27326] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:05:31.281 [DEBUG] [Thread-27326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:05:31.281 [DEBUG] [Thread-27326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:05:31.281 [DEBUG] [Thread-27326] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:05:31.281 [DEBUG] [Thread-27326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:05:31.281 [DEBUG] [Thread-27326] [transport.py] [_log()] Compression: none
2026-04-15T23:05:31.281 [DEBUG] [Thread-27326] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:05:31.337 [DEBUG] [Thread-27326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:05:31.337 [DEBUG] [Thread-27326] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:05:31.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:05:31.338 [DEBUG] [Thread-27326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:05:31.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:05:31.393 [DEBUG] [Thread-27326] [transport.py] [_log()] userauth is OK
2026-04-15T23:05:31.393 [DEBUG] [Thread-27326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:05:31.393 [DEBUG] [Thread-27326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:05:31.394 [DEBUG] [Thread-27326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:05:31.394 [DEBUG] [Thread-27326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:05:31.418 [INFO] [Thread-27326] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:05:31.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:05:31.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:05:32.247 [DEBUG] [Thread-27326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:05:32.247 [DEBUG] [Thread-27326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:05:32.295 [DEBUG] [Thread-27326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:05:32.295 [DEBUG] [Thread-27326] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:05:32.304 [DEBUG] [Thread-27326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:05:32.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:05:32.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')
2026-04-15T23:05:32.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
2026-04-15T23:05:32.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:05:32.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:05:32.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:05:32.341 [DEBUG] [Thread-27326] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:05:32.562 [DEBUG] [Thread-27328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:05:38.937 [DEBUG] [Thread-27329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:05:49.801 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:05:53.982 [DEBUG] [Thread-27330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:06:00.490 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:06:02.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:06:02.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:06:02.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
2026-04-15T23:06:03.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 5, 43), 3.19094, 80.3616, 0.0, 10.6582, 8.9938, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:06:03.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:05:43
2026-04-15T23:06:03.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:06:04.411 [DEBUG] [Thread-27331] [transport.py] [_log()] starting thread (client mode): 0xee9c3700
2026-04-15T23:06:04.412 [DEBUG] [Thread-27331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:06:04.430 [DEBUG] [Thread-27331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:06:04.430 [INFO] [Thread-27331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:06:04.434 [DEBUG] [Thread-27331] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:06:04.434 [DEBUG] [Thread-27331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:06:04.434 [DEBUG] [Thread-27331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:06:04.434 [DEBUG] [Thread-27331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:06:04.434 [DEBUG] [Thread-27331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:06:04.434 [DEBUG] [Thread-27331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:06:04.434 [DEBUG] [Thread-27331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:06:04.434 [DEBUG] [Thread-27331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:06:04.434 [DEBUG] [Thread-27331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:06:04.435 [DEBUG] [Thread-27331] [transport.py] [_log()] client lang: <none>
2026-04-15T23:06:04.435 [DEBUG] [Thread-27331] [transport.py] [_log()] server lang: <none>
2026-04-15T23:06:04.435 [DEBUG] [Thread-27331] [transport.py] [_log()] kex follows: False
2026-04-15T23:06:04.435 [DEBUG] [Thread-27331] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:06:04.435 [DEBUG] [Thread-27331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:06:04.435 [DEBUG] [Thread-27331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:06:04.435 [DEBUG] [Thread-27331] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:06:04.435 [DEBUG] [Thread-27331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:06:04.435 [DEBUG] [Thread-27331] [transport.py] [_log()] Compression: none
2026-04-15T23:06:04.435 [DEBUG] [Thread-27331] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:06:04.452 [DEBUG] [Thread-27331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:06:04.452 [DEBUG] [Thread-27331] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:06:04.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:06:04.453 [DEBUG] [Thread-27331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:06:04.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:06:04.454 [DEBUG] [Thread-27331] [transport.py] [_log()] userauth is OK
2026-04-15T23:06:04.454 [DEBUG] [Thread-27331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:06:04.454 [DEBUG] [Thread-27331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:06:04.454 [DEBUG] [Thread-27331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:06:04.454 [DEBUG] [Thread-27331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:06:04.491 [INFO] [Thread-27331] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:06:04.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:06:04.554 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:06:05.295 [DEBUG] [Thread-27331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:06:05.295 [DEBUG] [Thread-27331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:06:05.296 [DEBUG] [Thread-27331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:06:05.336 [DEBUG] [Thread-27331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:06:05.336 [DEBUG] [Thread-27331] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:06:05.339 [DEBUG] [Thread-27331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:06:05.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:06:05.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:06:05.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:06:05.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:06:05.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:06:05.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:06:05.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:06:05.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:06:05.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:06:05.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.878948 -999.00   +8.90   6.65     83   +6.30 1 1 1 2 1     0    0 2.12 -19.77 ZNESW 7.5 6.7 108.6 9.3 9.6 -24.7 9.5 -23.4 9.2 -21.5 9.5 -23.4
2026-04-15T23:06:05.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:06:05.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:06:05.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.878948
2026-04-15T23:06:05.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:06:05.366 [DEBUG] [Thread-27331] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:06:05.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:06:05.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:06:05.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:06:05.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:06:05.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:05:43', tmtdew=3.19094, humidity=80.3616, cloud=0.0, wind=10.6582, temperature=8.9938, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:05:41.107', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, -0.052250000000000796, -0.020749999999999602, -0.07650000000000112, -0.05450000000000088, 0.013250000000001094, 0.016000000000000014, -0.006750000000000256, 0.005499999999999616, -0.06899999999999906, -0.04025000000000034, -0.09299999999999997, -0.005000000000000782, 0.03725000000000023, -0.002000000000000668, -0.01699999999999946, -0.025750000000000384, -0.0625, -0.021000000000000796, -0.009250000000001535, -0.009500000000002728, 0.029749999999998167, 0.04225000000000101, 0.04875000000000007, 0.007499999999998508, -0.08750000000000036, 0.012750000000000483, -0.011499999999999844, 0.018000000000000682, 0.02850000000000108, 0.05349999999999966, 0.042500000000000426, -0.09525000000000006], zp_timestamp='2026-04-15T21:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:06:05.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:06:05.612 [DEBUG] [Thread-27334] [transport.py] [_log()] starting thread (client mode): 0xee904eb0
2026-04-15T23:06:05.612 [DEBUG] [Thread-27334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:06:05.628 [DEBUG] [Thread-27334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:06:05.628 [INFO] [Thread-27334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:06:05.637 [DEBUG] [Thread-27334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:06:05.637 [DEBUG] [Thread-27334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:06:05.637 [DEBUG] [Thread-27334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:06:05.638 [DEBUG] [Thread-27334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:06:05.638 [DEBUG] [Thread-27334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:06:05.638 [DEBUG] [Thread-27334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:06:05.638 [DEBUG] [Thread-27334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:06:05.638 [DEBUG] [Thread-27334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:06:05.638 [DEBUG] [Thread-27334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:06:05.638 [DEBUG] [Thread-27334] [transport.py] [_log()] client lang: <none>
2026-04-15T23:06:05.638 [DEBUG] [Thread-27334] [transport.py] [_log()] server lang: <none>
2026-04-15T23:06:05.638 [DEBUG] [Thread-27334] [transport.py] [_log()] kex follows: False
2026-04-15T23:06:05.638 [DEBUG] [Thread-27334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:06:05.638 [DEBUG] [Thread-27334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:06:05.638 [DEBUG] [Thread-27334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:06:05.639 [DEBUG] [Thread-27334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:06:05.639 [DEBUG] [Thread-27334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:06:05.639 [DEBUG] [Thread-27334] [transport.py] [_log()] Compression: none
2026-04-15T23:06:05.639 [DEBUG] [Thread-27334] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:06:05.697 [DEBUG] [Thread-27334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:06:05.698 [DEBUG] [Thread-27334] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:06:05.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:06:05.698 [DEBUG] [Thread-27334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:06:05.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:06:05.757 [DEBUG] [Thread-27334] [transport.py] [_log()] userauth is OK
2026-04-15T23:06:05.757 [DEBUG] [Thread-27334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:06:05.757 [DEBUG] [Thread-27334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:06:05.757 [DEBUG] [Thread-27334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:06:05.758 [DEBUG] [Thread-27334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:06:06.007 [INFO] [Thread-27334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:06:06.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:06:06.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:06:06.800 [DEBUG] [Thread-27334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:06:06.800 [DEBUG] [Thread-27334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:06:06.849 [DEBUG] [Thread-27334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:06:06.849 [DEBUG] [Thread-27334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:06:06.858 [DEBUG] [Thread-27334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:06:06.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:06:06.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')
2026-04-15T23:06:06.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') -> 00000000
2026-04-15T23:06:06.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:06:06.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:06:06.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:06:06.895 [DEBUG] [Thread-27334] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:06:08.625 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:06:08.627 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:06:09.011 [DEBUG] [Thread-27336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:06:24.057 [DEBUG] [Thread-27337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:06:32.713 [DEBUG] [Thread-27338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:06:36.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:06:36.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:06:36.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
2026-04-15T23:06:38.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 6, 18), 3.44547, 78.6808, 0.0, 8.7174, 9.0469, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:06:38.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:06:18
2026-04-15T23:06:38.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:06:39.081 [DEBUG] [Thread-27339] [transport.py] [_log()] starting thread (client mode): 0xf13e2800
2026-04-15T23:06:39.082 [DEBUG] [Thread-27339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:06:39.087 [DEBUG] [Thread-27340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:06:39.099 [DEBUG] [Thread-27339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:06:39.099 [INFO] [Thread-27339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:06:39.101 [DEBUG] [Thread-27339] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:06:39.101 [DEBUG] [Thread-27339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:06:39.101 [DEBUG] [Thread-27339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:06:39.101 [DEBUG] [Thread-27339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:06:39.101 [DEBUG] [Thread-27339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:06:39.101 [DEBUG] [Thread-27339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:06:39.101 [DEBUG] [Thread-27339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:06:39.101 [DEBUG] [Thread-27339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:06:39.101 [DEBUG] [Thread-27339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:06:39.101 [DEBUG] [Thread-27339] [transport.py] [_log()] client lang: <none>
2026-04-15T23:06:39.102 [DEBUG] [Thread-27339] [transport.py] [_log()] server lang: <none>
2026-04-15T23:06:39.102 [DEBUG] [Thread-27339] [transport.py] [_log()] kex follows: False
2026-04-15T23:06:39.102 [DEBUG] [Thread-27339] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:06:39.102 [DEBUG] [Thread-27339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:06:39.102 [DEBUG] [Thread-27339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:06:39.102 [DEBUG] [Thread-27339] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:06:39.102 [DEBUG] [Thread-27339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:06:39.102 [DEBUG] [Thread-27339] [transport.py] [_log()] Compression: none
2026-04-15T23:06:39.102 [DEBUG] [Thread-27339] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:06:39.112 [DEBUG] [Thread-27339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:06:39.113 [DEBUG] [Thread-27339] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:06:39.113 [DEBUG] [Thread-27339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:06:39.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:06:39.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:06:39.114 [DEBUG] [Thread-27339] [transport.py] [_log()] userauth is OK
2026-04-15T23:06:39.114 [DEBUG] [Thread-27339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:06:39.114 [DEBUG] [Thread-27339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:06:39.115 [DEBUG] [Thread-27339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:06:39.115 [DEBUG] [Thread-27339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:06:39.134 [INFO] [Thread-27339] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:06:39.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:06:39.923 [DEBUG] [Thread-27339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:06:39.923 [DEBUG] [Thread-27339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:06:39.924 [DEBUG] [Thread-27339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:06:39.964 [DEBUG] [Thread-27339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:06:39.964 [DEBUG] [Thread-27339] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:06:39.966 [DEBUG] [Thread-27339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:06:39.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:06:39.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:06:39.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:06:39.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:06:39.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:06:39.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:06:39.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:06:39.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:06:39.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:06:39.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.879296 -999.00   +8.90   8.22     83   +6.30 1 1 1 2 1     0    0 2.12 -19.79 ZNESW 6.4 8.2 110.9 9.2 9.6 -24.7 9.4 -23.5 9.2 -21.4 9.5 -23.4
2026-04-15T23:06:39.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:06:39.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:06:39.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.879296
2026-04-15T23:06:39.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:06:39.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:06:39.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:06:39.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:06:39.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:06:39.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:06:18', tmtdew=3.44547, humidity=78.6808, cloud=0.0, wind=8.7174, temperature=9.0469, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:06:11.174', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, -0.052250000000000796, -0.020749999999999602, -0.07650000000000112, -0.05450000000000088, 0.013250000000001094, 0.016000000000000014, -0.006750000000000256, 0.005499999999999616, -0.06899999999999906, -0.04025000000000034, -0.09299999999999997, -0.005000000000000782, 0.03725000000000023, -0.002000000000000668, -0.01699999999999946, -0.025750000000000384, -0.0625, -0.021000000000000796, -0.009250000000001535, -0.009500000000002728, 0.029749999999998167, 0.04225000000000101, 0.04875000000000007, 0.007499999999998508, -0.08750000000000036, 0.012750000000000483, -0.011499999999999844, 0.018000000000000682, 0.02850000000000108, 0.05349999999999966, 0.042500000000000426, -0.09525000000000006], zp_timestamp='2026-04-15T21:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:06:39.985 [DEBUG] [Thread-27339] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:06:40.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:06:40.220 [DEBUG] [Thread-27343] [transport.py] [_log()] starting thread (client mode): 0xee9c3370
2026-04-15T23:06:40.220 [DEBUG] [Thread-27343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:06:40.234 [DEBUG] [Thread-27343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:06:40.234 [INFO] [Thread-27343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:06:40.241 [DEBUG] [Thread-27343] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:06:40.241 [DEBUG] [Thread-27343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:06:40.241 [DEBUG] [Thread-27343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:06:40.241 [DEBUG] [Thread-27343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:06:40.242 [DEBUG] [Thread-27343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:06:40.242 [DEBUG] [Thread-27343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:06:40.242 [DEBUG] [Thread-27343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:06:40.242 [DEBUG] [Thread-27343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:06:40.242 [DEBUG] [Thread-27343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:06:40.242 [DEBUG] [Thread-27343] [transport.py] [_log()] client lang: <none>
2026-04-15T23:06:40.242 [DEBUG] [Thread-27343] [transport.py] [_log()] server lang: <none>
2026-04-15T23:06:40.242 [DEBUG] [Thread-27343] [transport.py] [_log()] kex follows: False
2026-04-15T23:06:40.242 [DEBUG] [Thread-27343] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:06:40.242 [DEBUG] [Thread-27343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:06:40.242 [DEBUG] [Thread-27343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:06:40.242 [DEBUG] [Thread-27343] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:06:40.242 [DEBUG] [Thread-27343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:06:40.242 [DEBUG] [Thread-27343] [transport.py] [_log()] Compression: none
2026-04-15T23:06:40.242 [DEBUG] [Thread-27343] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:06:40.299 [DEBUG] [Thread-27343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:06:40.300 [DEBUG] [Thread-27343] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:06:40.300 [DEBUG] [Thread-27343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:06:40.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:06:40.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:06:40.357 [DEBUG] [Thread-27343] [transport.py] [_log()] userauth is OK
2026-04-15T23:06:40.357 [DEBUG] [Thread-27343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:06:40.357 [DEBUG] [Thread-27343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:06:40.357 [DEBUG] [Thread-27343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:06:40.357 [DEBUG] [Thread-27343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:06:40.374 [INFO] [Thread-27343] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:06:40.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:06:40.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:06:41.179 [DEBUG] [Thread-27343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:06:41.180 [DEBUG] [Thread-27343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:06:41.227 [DEBUG] [Thread-27343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:06:41.227 [DEBUG] [Thread-27343] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:06:41.236 [DEBUG] [Thread-27343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:06:41.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:06:41.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')
2026-04-15T23:06:41.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
2026-04-15T23:06:41.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:06:41.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:06:41.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:06:41.271 [DEBUG] [Thread-27343] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:06:54.119 [DEBUG] [Thread-27345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:07:08.827 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:07:08.828 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:07:09.161 [DEBUG] [Thread-27346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:07:11.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:07:11.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:07:11.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:07:12.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 6, 54), 3.44886, 78.6642, 0.0, 10.8878, 9.06349, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:07:12.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:06:54
2026-04-15T23:07:12.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:07:13.408 [DEBUG] [Thread-27347] [transport.py] [_log()] starting thread (client mode): 0xee991ba0
2026-04-15T23:07:13.408 [DEBUG] [Thread-27347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:07:13.429 [DEBUG] [Thread-27347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:07:13.429 [INFO] [Thread-27347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:07:13.432 [DEBUG] [Thread-27347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:07:13.432 [DEBUG] [Thread-27347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:07:13.432 [DEBUG] [Thread-27347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:07:13.432 [DEBUG] [Thread-27347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:07:13.432 [DEBUG] [Thread-27347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:07:13.432 [DEBUG] [Thread-27347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:07:13.432 [DEBUG] [Thread-27347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:07:13.432 [DEBUG] [Thread-27347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:07:13.432 [DEBUG] [Thread-27347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:07:13.432 [DEBUG] [Thread-27347] [transport.py] [_log()] client lang: <none>
2026-04-15T23:07:13.433 [DEBUG] [Thread-27347] [transport.py] [_log()] server lang: <none>
2026-04-15T23:07:13.433 [DEBUG] [Thread-27347] [transport.py] [_log()] kex follows: False
2026-04-15T23:07:13.433 [DEBUG] [Thread-27347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:07:13.433 [DEBUG] [Thread-27347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:07:13.433 [DEBUG] [Thread-27347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:07:13.433 [DEBUG] [Thread-27347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:07:13.433 [DEBUG] [Thread-27347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:07:13.433 [DEBUG] [Thread-27347] [transport.py] [_log()] Compression: none
2026-04-15T23:07:13.433 [DEBUG] [Thread-27347] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:07:13.449 [DEBUG] [Thread-27347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:07:13.450 [DEBUG] [Thread-27347] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:07:13.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:07:13.450 [DEBUG] [Thread-27347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:07:13.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:07:13.451 [DEBUG] [Thread-27347] [transport.py] [_log()] userauth is OK
2026-04-15T23:07:13.452 [DEBUG] [Thread-27347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:07:13.452 [DEBUG] [Thread-27347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:07:13.452 [DEBUG] [Thread-27347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:07:13.452 [DEBUG] [Thread-27347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:07:13.490 [INFO] [Thread-27347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:07:13.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:07:14.318 [DEBUG] [Thread-27347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:07:14.319 [DEBUG] [Thread-27347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:07:14.319 [DEBUG] [Thread-27347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:07:14.359 [DEBUG] [Thread-27347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:07:14.359 [DEBUG] [Thread-27347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:07:14.362 [DEBUG] [Thread-27347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:07:14.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:07:14.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:07:14.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:07:14.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:07:14.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:07:14.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:07:14.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:07:14.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:07:14.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:07:14.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.879643 -999.00   +8.90   7.66     83   +6.30 1 1 1 2 1     0    0 2.12 -18.45 ZNESW 6.6 7.7 110.2 10.1 9.6 -24.7 9.5 -23.5 9.2 -21.3 9.5 -23.4
2026-04-15T23:07:14.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:07:14.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:07:14.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.879643
2026-04-15T23:07:14.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:07:14.388 [DEBUG] [Thread-27347] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:07:14.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:07:14.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:07:14.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:07:14.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:07:14.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:06:54', tmtdew=3.44886, humidity=78.6642, cloud=0.0, wind=10.8878, temperature=9.06349, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:06:41.155', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, -0.052250000000000796, -0.020749999999999602, -0.07650000000000112, -0.05450000000000088, 0.013250000000001094, 0.016000000000000014, -0.006750000000000256, 0.005499999999999616, -0.06899999999999906, -0.04025000000000034, -0.09299999999999997, -0.005000000000000782, 0.03725000000000023, -0.002000000000000668, -0.01699999999999946, -0.025750000000000384, -0.0625, -0.021000000000000796, -0.009250000000001535, -0.009500000000002728, 0.029749999999998167, 0.04225000000000101, 0.04875000000000007, 0.007499999999998508, -0.08750000000000036, 0.012750000000000483, -0.011499999999999844, 0.018000000000000682, 0.02850000000000108, 0.05349999999999966, 0.042500000000000426, -0.09525000000000006], zp_timestamp='2026-04-15T21:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:07:14.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:07:14.650 [DEBUG] [Thread-27350] [transport.py] [_log()] starting thread (client mode): 0xf1351cc0
2026-04-15T23:07:14.650 [DEBUG] [Thread-27350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:07:14.666 [DEBUG] [Thread-27350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:07:14.666 [INFO] [Thread-27350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:07:14.674 [DEBUG] [Thread-27350] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:07:14.674 [DEBUG] [Thread-27350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:07:14.674 [DEBUG] [Thread-27350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:07:14.674 [DEBUG] [Thread-27350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:07:14.674 [DEBUG] [Thread-27350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:07:14.674 [DEBUG] [Thread-27350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:07:14.674 [DEBUG] [Thread-27350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:07:14.674 [DEBUG] [Thread-27350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:07:14.674 [DEBUG] [Thread-27350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:07:14.674 [DEBUG] [Thread-27350] [transport.py] [_log()] client lang: <none>
2026-04-15T23:07:14.674 [DEBUG] [Thread-27350] [transport.py] [_log()] server lang: <none>
2026-04-15T23:07:14.674 [DEBUG] [Thread-27350] [transport.py] [_log()] kex follows: False
2026-04-15T23:07:14.674 [DEBUG] [Thread-27350] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:07:14.674 [DEBUG] [Thread-27350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:07:14.674 [DEBUG] [Thread-27350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:07:14.675 [DEBUG] [Thread-27350] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:07:14.675 [DEBUG] [Thread-27350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:07:14.675 [DEBUG] [Thread-27350] [transport.py] [_log()] Compression: none
2026-04-15T23:07:14.675 [DEBUG] [Thread-27350] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:07:14.732 [DEBUG] [Thread-27350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:07:14.733 [DEBUG] [Thread-27350] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:07:14.733 [DEBUG] [Thread-27350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:07:14.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:07:14.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:07:14.789 [DEBUG] [Thread-27350] [transport.py] [_log()] userauth is OK
2026-04-15T23:07:14.789 [DEBUG] [Thread-27350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:07:14.789 [DEBUG] [Thread-27350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:07:14.789 [DEBUG] [Thread-27350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:07:14.790 [DEBUG] [Thread-27350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:07:14.817 [INFO] [Thread-27350] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:07:14.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:07:14.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:07:15.666 [DEBUG] [Thread-27350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:07:15.666 [DEBUG] [Thread-27350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:07:15.714 [DEBUG] [Thread-27350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:07:15.714 [DEBUG] [Thread-27350] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:07:15.723 [DEBUG] [Thread-27350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:07:15.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:07:15.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')
2026-04-15T23:07:15.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
2026-04-15T23:07:15.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:07:15.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:07:15.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:07:15.757 [DEBUG] [Thread-27350] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:07:24.192 [DEBUG] [Thread-27352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:07:27.305 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:07:32.880 [DEBUG] [Thread-27353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:07:39.220 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:07:39.238 [DEBUG] [Thread-27354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:07:42.291 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:07:45.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:07:45.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:07:45.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
2026-04-15T23:07:47.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 7, 30), 3.44927, 78.6642, 0.0, 10.6762, 9.08008, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:07:47.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:07:30
2026-04-15T23:07:47.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:07:47.957 [DEBUG] [Thread-27355] [transport.py] [_log()] starting thread (client mode): 0xee9910f0
2026-04-15T23:07:47.958 [DEBUG] [Thread-27355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:07:47.979 [DEBUG] [Thread-27355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:07:47.979 [INFO] [Thread-27355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:07:47.982 [DEBUG] [Thread-27355] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:07:47.982 [DEBUG] [Thread-27355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:07:47.982 [DEBUG] [Thread-27355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:07:47.982 [DEBUG] [Thread-27355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:07:47.982 [DEBUG] [Thread-27355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:07:47.982 [DEBUG] [Thread-27355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:07:47.982 [DEBUG] [Thread-27355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:07:47.983 [DEBUG] [Thread-27355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:07:47.983 [DEBUG] [Thread-27355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:07:47.983 [DEBUG] [Thread-27355] [transport.py] [_log()] client lang: <none>
2026-04-15T23:07:47.983 [DEBUG] [Thread-27355] [transport.py] [_log()] server lang: <none>
2026-04-15T23:07:47.983 [DEBUG] [Thread-27355] [transport.py] [_log()] kex follows: False
2026-04-15T23:07:47.983 [DEBUG] [Thread-27355] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:07:47.983 [DEBUG] [Thread-27355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:07:47.983 [DEBUG] [Thread-27355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:07:47.983 [DEBUG] [Thread-27355] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:07:47.983 [DEBUG] [Thread-27355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:07:47.983 [DEBUG] [Thread-27355] [transport.py] [_log()] Compression: none
2026-04-15T23:07:47.983 [DEBUG] [Thread-27355] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:07:48.000 [DEBUG] [Thread-27355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:07:48.000 [DEBUG] [Thread-27355] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:07:48.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:07:48.001 [DEBUG] [Thread-27355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:07:48.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:07:48.002 [DEBUG] [Thread-27355] [transport.py] [_log()] userauth is OK
2026-04-15T23:07:48.002 [DEBUG] [Thread-27355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:07:48.002 [DEBUG] [Thread-27355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:07:48.002 [DEBUG] [Thread-27355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:07:48.003 [DEBUG] [Thread-27355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:07:48.020 [INFO] [Thread-27355] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:07:48.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:07:48.844 [DEBUG] [Thread-27355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:07:48.844 [DEBUG] [Thread-27355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:07:48.844 [DEBUG] [Thread-27355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:07:48.846 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:07:48.885 [DEBUG] [Thread-27355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:07:48.885 [DEBUG] [Thread-27355] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:07:48.887 [DEBUG] [Thread-27355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:07:48.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:07:48.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:07:48.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:07:48.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:07:48.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:07:48.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:07:48.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:07:48.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:07:48.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:07:48.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.879990 -999.00   +8.90   7.62     83   +6.30 1 1 1 2 1     0    0 2.18 -17.52 ZNESW 8.0 7.6 111.4 8.8 9.6 -24.7 9.5 -23.4 9.2 -21.4 9.5 -23.4
2026-04-15T23:07:48.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:07:48.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:07:48.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.879990
2026-04-15T23:07:48.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:07:48.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:07:48.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:07:48.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:07:48.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:07:48.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:07:30', tmtdew=3.44927, humidity=78.6642, cloud=0.0, wind=10.6762, temperature=9.08008, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:07:11.136', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, -0.052250000000000796, -0.020749999999999602, -0.07650000000000112, -0.05450000000000088, 0.013250000000001094, 0.016000000000000014, -0.006750000000000256, 0.005499999999999616, -0.06899999999999906, -0.04025000000000034, -0.09299999999999997, -0.005000000000000782, 0.03725000000000023, -0.002000000000000668, -0.01699999999999946, -0.025750000000000384, -0.0625, -0.021000000000000796, -0.009250000000001535, -0.009500000000002728, 0.029749999999998167, 0.04225000000000101, 0.04875000000000007, 0.007499999999998508, -0.08750000000000036, 0.012750000000000483, -0.011499999999999844, 0.018000000000000682, 0.02850000000000108, 0.05349999999999966, 0.042500000000000426, -0.09525000000000006], zp_timestamp='2026-04-15T21:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:07:48.907 [DEBUG] [Thread-27355] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:07:49.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:07:49.118 [DEBUG] [Thread-27358] [transport.py] [_log()] starting thread (client mode): 0xee993f10
2026-04-15T23:07:49.118 [DEBUG] [Thread-27358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:07:49.136 [DEBUG] [Thread-27358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:07:49.136 [INFO] [Thread-27358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:07:49.147 [DEBUG] [Thread-27358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:07:49.147 [DEBUG] [Thread-27358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:07:49.147 [DEBUG] [Thread-27358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:07:49.148 [DEBUG] [Thread-27358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:07:49.148 [DEBUG] [Thread-27358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:07:49.148 [DEBUG] [Thread-27358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:07:49.148 [DEBUG] [Thread-27358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:07:49.148 [DEBUG] [Thread-27358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:07:49.148 [DEBUG] [Thread-27358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:07:49.148 [DEBUG] [Thread-27358] [transport.py] [_log()] client lang: <none>
2026-04-15T23:07:49.148 [DEBUG] [Thread-27358] [transport.py] [_log()] server lang: <none>
2026-04-15T23:07:49.148 [DEBUG] [Thread-27358] [transport.py] [_log()] kex follows: False
2026-04-15T23:07:49.148 [DEBUG] [Thread-27358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:07:49.148 [DEBUG] [Thread-27358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:07:49.148 [DEBUG] [Thread-27358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:07:49.149 [DEBUG] [Thread-27358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:07:49.149 [DEBUG] [Thread-27358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:07:49.149 [DEBUG] [Thread-27358] [transport.py] [_log()] Compression: none
2026-04-15T23:07:49.149 [DEBUG] [Thread-27358] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:07:49.204 [DEBUG] [Thread-27358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:07:49.204 [DEBUG] [Thread-27358] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:07:49.205 [DEBUG] [Thread-27358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:07:49.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:07:49.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:07:49.260 [DEBUG] [Thread-27358] [transport.py] [_log()] userauth is OK
2026-04-15T23:07:49.260 [DEBUG] [Thread-27358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:07:49.261 [DEBUG] [Thread-27358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:07:49.261 [DEBUG] [Thread-27358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:07:49.261 [DEBUG] [Thread-27358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:07:49.287 [INFO] [Thread-27358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:07:49.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:07:49.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:07:50.109 [DEBUG] [Thread-27358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:07:50.109 [DEBUG] [Thread-27358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:07:50.157 [DEBUG] [Thread-27358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:07:50.157 [DEBUG] [Thread-27358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:07:50.166 [DEBUG] [Thread-27358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:07:50.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:07:50.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')
2026-04-15T23:07:50.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
2026-04-15T23:07:50.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:07:50.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:07:50.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:07:50.201 [DEBUG] [Thread-27358] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:07:54.269 [DEBUG] [Thread-27360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:08:09.031 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:08:09.031 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:08:09.317 [DEBUG] [Thread-27361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:08:20.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:08:20.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:08:20.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
2026-04-15T23:08:21.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 8, 6), 3.45781, 78.6144, 0.0, 10.4468, 9.06349, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:08:21.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:08:06
2026-04-15T23:08:21.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:08:22.283 [DEBUG] [Thread-27362] [transport.py] [_log()] starting thread (client mode): 0xee990d60
2026-04-15T23:08:22.284 [DEBUG] [Thread-27362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:08:22.305 [DEBUG] [Thread-27362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:08:22.305 [INFO] [Thread-27362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:08:22.308 [DEBUG] [Thread-27362] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:08:22.308 [DEBUG] [Thread-27362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:08:22.308 [DEBUG] [Thread-27362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:08:22.308 [DEBUG] [Thread-27362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:08:22.308 [DEBUG] [Thread-27362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:08:22.308 [DEBUG] [Thread-27362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:08:22.308 [DEBUG] [Thread-27362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:08:22.308 [DEBUG] [Thread-27362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:08:22.308 [DEBUG] [Thread-27362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:08:22.309 [DEBUG] [Thread-27362] [transport.py] [_log()] client lang: <none>
2026-04-15T23:08:22.309 [DEBUG] [Thread-27362] [transport.py] [_log()] server lang: <none>
2026-04-15T23:08:22.309 [DEBUG] [Thread-27362] [transport.py] [_log()] kex follows: False
2026-04-15T23:08:22.309 [DEBUG] [Thread-27362] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:08:22.309 [DEBUG] [Thread-27362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:08:22.309 [DEBUG] [Thread-27362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:08:22.309 [DEBUG] [Thread-27362] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:08:22.309 [DEBUG] [Thread-27362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:08:22.309 [DEBUG] [Thread-27362] [transport.py] [_log()] Compression: none
2026-04-15T23:08:22.309 [DEBUG] [Thread-27362] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:08:22.326 [DEBUG] [Thread-27362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:08:22.327 [DEBUG] [Thread-27362] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:08:22.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:08:22.327 [DEBUG] [Thread-27362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:08:22.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:08:22.328 [DEBUG] [Thread-27362] [transport.py] [_log()] userauth is OK
2026-04-15T23:08:22.329 [DEBUG] [Thread-27362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:08:22.329 [DEBUG] [Thread-27362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:08:22.329 [DEBUG] [Thread-27362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:08:22.329 [DEBUG] [Thread-27362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:08:22.360 [INFO] [Thread-27362] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:08:22.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:08:23.165 [DEBUG] [Thread-27362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:08:23.165 [DEBUG] [Thread-27362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:08:23.166 [DEBUG] [Thread-27362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:08:23.206 [DEBUG] [Thread-27362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:08:23.206 [DEBUG] [Thread-27362] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:08:23.209 [DEBUG] [Thread-27362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:08:23.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:08:23.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:08:23.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:08:23.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:08:23.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:08:23.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:08:23.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:08:23.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:08:23.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:08:23.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.880337 -999.00   +8.90   6.50     83   +6.30 1 1 1 2 1     0    0 2.22 -16.49 ZNESW 7.8 6.5 111.8 8.9 9.6 -24.6 9.5 -23.5 9.2 -21.4 9.5 -23.4
2026-04-15T23:08:23.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:08:23.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:08:23.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.880337
2026-04-15T23:08:23.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:08:23.233 [DEBUG] [Thread-27362] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:08:23.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:08:23.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:08:23.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:08:23.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:08:23.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:08:06', tmtdew=3.45781, humidity=78.6144, cloud=0.0, wind=10.4468, temperature=9.06349, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:07:41.117', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, -0.052250000000000796, -0.020749999999999602, -0.07650000000000112, -0.05450000000000088, 0.013250000000001094, 0.016000000000000014, -0.006750000000000256, 0.005499999999999616, -0.06899999999999906, -0.04025000000000034, -0.09299999999999997, -0.005000000000000782, 0.03725000000000023, -0.002000000000000668, -0.01699999999999946, -0.025750000000000384, -0.0625, -0.021000000000000796, -0.009250000000001535, -0.009500000000002728, 0.029749999999998167, 0.04225000000000101, 0.04875000000000007, 0.007499999999998508, -0.08750000000000036, 0.012750000000000483, -0.011499999999999844, 0.018000000000000682, 0.02850000000000108, 0.05349999999999966, 0.042500000000000426, -0.09525000000000006], zp_timestamp='2026-04-15T21:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:08:23.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:08:23.496 [DEBUG] [Thread-27365] [transport.py] [_log()] starting thread (client mode): 0xee993850
2026-04-15T23:08:23.496 [DEBUG] [Thread-27365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:08:23.510 [DEBUG] [Thread-27365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:08:23.511 [INFO] [Thread-27365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:08:23.518 [DEBUG] [Thread-27365] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:08:23.518 [DEBUG] [Thread-27365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:08:23.518 [DEBUG] [Thread-27365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:08:23.518 [DEBUG] [Thread-27365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:08:23.518 [DEBUG] [Thread-27365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:08:23.518 [DEBUG] [Thread-27365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:08:23.518 [DEBUG] [Thread-27365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:08:23.518 [DEBUG] [Thread-27365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:08:23.519 [DEBUG] [Thread-27365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:08:23.519 [DEBUG] [Thread-27365] [transport.py] [_log()] client lang: <none>
2026-04-15T23:08:23.519 [DEBUG] [Thread-27365] [transport.py] [_log()] server lang: <none>
2026-04-15T23:08:23.519 [DEBUG] [Thread-27365] [transport.py] [_log()] kex follows: False
2026-04-15T23:08:23.519 [DEBUG] [Thread-27365] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:08:23.519 [DEBUG] [Thread-27365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:08:23.519 [DEBUG] [Thread-27365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:08:23.519 [DEBUG] [Thread-27365] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:08:23.519 [DEBUG] [Thread-27365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:08:23.519 [DEBUG] [Thread-27365] [transport.py] [_log()] Compression: none
2026-04-15T23:08:23.519 [DEBUG] [Thread-27365] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:08:23.575 [DEBUG] [Thread-27365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:08:23.576 [DEBUG] [Thread-27365] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:08:23.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:08:23.577 [DEBUG] [Thread-27365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:08:23.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:08:23.632 [DEBUG] [Thread-27365] [transport.py] [_log()] userauth is OK
2026-04-15T23:08:23.632 [DEBUG] [Thread-27365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:08:23.633 [DEBUG] [Thread-27365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:08:23.633 [DEBUG] [Thread-27365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:08:23.633 [DEBUG] [Thread-27365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:08:23.658 [INFO] [Thread-27365] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:08:23.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:08:23.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:08:24.349 [DEBUG] [Thread-27367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:08:24.481 [DEBUG] [Thread-27365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:08:24.481 [DEBUG] [Thread-27365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:08:24.529 [DEBUG] [Thread-27365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:08:24.529 [DEBUG] [Thread-27365] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:08:24.537 [DEBUG] [Thread-27365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:08:24.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:08:24.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')
2026-04-15T23:08:24.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
2026-04-15T23:08:24.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:08:24.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:08:24.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:08:24.570 [DEBUG] [Thread-27365] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:08:33.064 [DEBUG] [Thread-27368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:08:39.393 [DEBUG] [Thread-27369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:08:54.422 [DEBUG] [Thread-27370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:08:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:08:54.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:08:54.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
2026-04-15T23:08:55.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 8, 41), 3.19337, 80.3616, 0.0, 10.5876, 9.09334, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:08:55.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:08:41
2026-04-15T23:08:56.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:08:56.592 [DEBUG] [Thread-27371] [transport.py] [_log()] starting thread (client mode): 0xee990160
2026-04-15T23:08:56.593 [DEBUG] [Thread-27371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:08:56.612 [DEBUG] [Thread-27371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:08:56.613 [INFO] [Thread-27371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] client lang: <none>
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] server lang: <none>
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] kex follows: False
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:08:56.616 [DEBUG] [Thread-27371] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:08:56.617 [DEBUG] [Thread-27371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:08:56.617 [DEBUG] [Thread-27371] [transport.py] [_log()] Compression: none
2026-04-15T23:08:56.617 [DEBUG] [Thread-27371] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:08:56.633 [DEBUG] [Thread-27371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:08:56.634 [DEBUG] [Thread-27371] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:08:56.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:08:56.634 [DEBUG] [Thread-27371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:08:56.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:08:56.635 [DEBUG] [Thread-27371] [transport.py] [_log()] userauth is OK
2026-04-15T23:08:56.635 [DEBUG] [Thread-27371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:08:56.635 [DEBUG] [Thread-27371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:08:56.636 [DEBUG] [Thread-27371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:08:56.636 [DEBUG] [Thread-27371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:08:56.655 [INFO] [Thread-27371] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:08:56.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:08:57.458 [DEBUG] [Thread-27371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:08:57.458 [DEBUG] [Thread-27371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:08:57.458 [DEBUG] [Thread-27371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:08:57.499 [DEBUG] [Thread-27371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:08:57.499 [DEBUG] [Thread-27371] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:08:57.502 [DEBUG] [Thread-27371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:08:57.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:08:57.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:08:57.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:08:57.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:08:57.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:08:57.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:08:57.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:08:57.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:08:57.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:08:57.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.880685 -999.00   +8.90   7.00     83   +6.30 1 1 1 2 1     0    0 2.21 -16.21 ZNESW 7.0 7.0 114.8 8.5 9.5 -24.6 9.4 -23.5 9.2 -21.4 9.4 -23.4
2026-04-15T23:08:57.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:08:57.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:08:57.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.880685
2026-04-15T23:08:57.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:08:57.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:08:57.526 [DEBUG] [Thread-27371] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:08:57.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:08:57.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:08:57.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:08:57.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:08:41', tmtdew=3.19337, humidity=80.3616, cloud=0.0, wind=10.5876, temperature=9.09334, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:08:11.184', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, -0.052250000000000796, -0.020749999999999602, -0.07650000000000112, -0.05450000000000088, 0.013250000000001094, 0.016000000000000014, -0.006750000000000256, 0.005499999999999616, -0.06899999999999906, -0.04025000000000034, -0.09299999999999997, -0.005000000000000782, 0.03725000000000023, -0.002000000000000668, -0.01699999999999946, -0.025750000000000384, -0.0625, -0.021000000000000796, -0.009250000000001535, -0.009500000000002728, 0.029749999999998167, 0.04225000000000101, 0.04875000000000007, 0.007499999999998508, -0.08750000000000036, 0.012750000000000483, -0.011499999999999844, 0.018000000000000682, 0.02850000000000108, 0.05349999999999966, 0.042500000000000426, -0.09525000000000006], zp_timestamp='2026-04-15T21:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:08:57.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:08:57.784 [DEBUG] [Thread-27374] [transport.py] [_log()] starting thread (client mode): 0xee9914e0
2026-04-15T23:08:57.784 [DEBUG] [Thread-27374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:08:57.799 [DEBUG] [Thread-27374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:08:57.799 [INFO] [Thread-27374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:08:57.806 [DEBUG] [Thread-27374] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:08:57.806 [DEBUG] [Thread-27374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:08:57.807 [DEBUG] [Thread-27374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:08:57.807 [DEBUG] [Thread-27374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:08:57.807 [DEBUG] [Thread-27374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:08:57.807 [DEBUG] [Thread-27374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:08:57.807 [DEBUG] [Thread-27374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:08:57.807 [DEBUG] [Thread-27374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:08:57.807 [DEBUG] [Thread-27374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:08:57.807 [DEBUG] [Thread-27374] [transport.py] [_log()] client lang: <none>
2026-04-15T23:08:57.807 [DEBUG] [Thread-27374] [transport.py] [_log()] server lang: <none>
2026-04-15T23:08:57.807 [DEBUG] [Thread-27374] [transport.py] [_log()] kex follows: False
2026-04-15T23:08:57.807 [DEBUG] [Thread-27374] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:08:57.808 [DEBUG] [Thread-27374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:08:57.808 [DEBUG] [Thread-27374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:08:57.808 [DEBUG] [Thread-27374] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:08:57.808 [DEBUG] [Thread-27374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:08:57.808 [DEBUG] [Thread-27374] [transport.py] [_log()] Compression: none
2026-04-15T23:08:57.808 [DEBUG] [Thread-27374] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:08:57.865 [DEBUG] [Thread-27374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:08:57.865 [DEBUG] [Thread-27374] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:08:57.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:08:57.866 [DEBUG] [Thread-27374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:08:57.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:08:57.925 [DEBUG] [Thread-27374] [transport.py] [_log()] userauth is OK
2026-04-15T23:08:57.925 [DEBUG] [Thread-27374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:08:57.925 [DEBUG] [Thread-27374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:08:57.925 [DEBUG] [Thread-27374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:08:57.925 [DEBUG] [Thread-27374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:08:57.951 [INFO] [Thread-27374] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:08:57.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:08:57.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:08:58.783 [DEBUG] [Thread-27374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:08:58.783 [DEBUG] [Thread-27374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:08:58.833 [DEBUG] [Thread-27374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:08:58.833 [DEBUG] [Thread-27374] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:08:58.843 [DEBUG] [Thread-27374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:08:58.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:08:58.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')
2026-04-15T23:08:58.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
2026-04-15T23:08:58.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:08:58.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:08:58.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:08:58.878 [DEBUG] [Thread-27374] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:09:09.234 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:09:09.236 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:09:09.451 [DEBUG] [Thread-27376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:09:24.495 [DEBUG] [Thread-27377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:09:28.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:09:28.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:09:28.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
2026-04-15T23:09:30.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 9, 16), 3.50483, 78.631, 0.0, 10.6409, 9.11349, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:09:30.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:09:16
2026-04-15T23:09:30.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:09:30.942 [DEBUG] [Thread-27378] [transport.py] [_log()] starting thread (client mode): 0xee992b00
2026-04-15T23:09:30.943 [DEBUG] [Thread-27378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:09:30.963 [DEBUG] [Thread-27378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:09:30.963 [INFO] [Thread-27378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:09:30.966 [DEBUG] [Thread-27378] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:09:30.966 [DEBUG] [Thread-27378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:09:30.966 [DEBUG] [Thread-27378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:09:30.966 [DEBUG] [Thread-27378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:09:30.966 [DEBUG] [Thread-27378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:09:30.967 [DEBUG] [Thread-27378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:09:30.967 [DEBUG] [Thread-27378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:09:30.967 [DEBUG] [Thread-27378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:09:30.967 [DEBUG] [Thread-27378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:09:30.967 [DEBUG] [Thread-27378] [transport.py] [_log()] client lang: <none>
2026-04-15T23:09:30.967 [DEBUG] [Thread-27378] [transport.py] [_log()] server lang: <none>
2026-04-15T23:09:30.967 [DEBUG] [Thread-27378] [transport.py] [_log()] kex follows: False
2026-04-15T23:09:30.967 [DEBUG] [Thread-27378] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:09:30.967 [DEBUG] [Thread-27378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:09:30.967 [DEBUG] [Thread-27378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:09:30.967 [DEBUG] [Thread-27378] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:09:30.967 [DEBUG] [Thread-27378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:09:30.968 [DEBUG] [Thread-27378] [transport.py] [_log()] Compression: none
2026-04-15T23:09:30.968 [DEBUG] [Thread-27378] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:09:30.984 [DEBUG] [Thread-27378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:09:30.984 [DEBUG] [Thread-27378] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:09:30.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:09:30.985 [DEBUG] [Thread-27378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:09:30.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:09:30.986 [DEBUG] [Thread-27378] [transport.py] [_log()] userauth is OK
2026-04-15T23:09:30.986 [DEBUG] [Thread-27378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:09:30.986 [DEBUG] [Thread-27378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:09:30.986 [DEBUG] [Thread-27378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:09:30.986 [DEBUG] [Thread-27378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:09:31.010 [INFO] [Thread-27378] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:09:31.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:09:31.633 [DEBUG] [Thread-27378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:09:31.633 [DEBUG] [Thread-27378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:09:31.634 [DEBUG] [Thread-27378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:09:31.674 [DEBUG] [Thread-27378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:09:31.674 [DEBUG] [Thread-27378] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:09:31.677 [DEBUG] [Thread-27378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:09:31.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:09:31.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:09:31.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:09:31.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:09:31.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:09:31.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:09:31.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:09:31.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:09:31.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:09:31.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.881379 -999.00   +8.90   7.53     83   +6.30 1 1 1 2 1     0    0 2.30 -13.00 ZNESW 8.0 7.5 110.2 8.8 9.5 -24.6 9.4 -23.6 9.2 -21.5 9.4 -23.6
2026-04-15T23:09:31.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:09:31.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:09:31.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.881379
2026-04-15T23:09:31.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:09:31.703 [DEBUG] [Thread-27378] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:09:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:09:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:09:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:09:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:09:31.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:09:16', tmtdew=3.50483, humidity=78.631, cloud=0.0, wind=10.6409, temperature=9.11349, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:09:11.146', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, -0.052250000000000796, -0.020749999999999602, -0.07650000000000112, -0.05450000000000088, 0.013250000000001094, 0.016000000000000014, -0.006750000000000256, 0.005499999999999616, -0.06899999999999906, -0.04025000000000034, -0.09299999999999997, -0.005000000000000782, 0.03725000000000023, -0.002000000000000668, -0.01699999999999946, -0.025750000000000384, -0.0625, -0.021000000000000796, -0.009250000000001535, -0.009500000000002728, 0.029749999999998167, 0.04225000000000101, 0.04875000000000007, 0.007499999999998508, -0.08750000000000036, 0.012750000000000483, -0.011499999999999844, 0.018000000000000682, 0.02850000000000108, 0.05349999999999966, 0.042500000000000426, -0.09525000000000006], zp_timestamp='2026-04-15T21:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:09:31.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:09:31.958 [DEBUG] [Thread-27381] [transport.py] [_log()] starting thread (client mode): 0xee990160
2026-04-15T23:09:31.958 [DEBUG] [Thread-27381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:09:31.978 [DEBUG] [Thread-27381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:09:31.978 [INFO] [Thread-27381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:09:31.989 [DEBUG] [Thread-27381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:09:31.989 [DEBUG] [Thread-27381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:09:31.989 [DEBUG] [Thread-27381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:09:31.989 [DEBUG] [Thread-27381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:09:31.990 [DEBUG] [Thread-27381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:09:31.990 [DEBUG] [Thread-27381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:09:31.990 [DEBUG] [Thread-27381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:09:31.990 [DEBUG] [Thread-27381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:09:31.990 [DEBUG] [Thread-27381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:09:31.990 [DEBUG] [Thread-27381] [transport.py] [_log()] client lang: <none>
2026-04-15T23:09:31.990 [DEBUG] [Thread-27381] [transport.py] [_log()] server lang: <none>
2026-04-15T23:09:31.990 [DEBUG] [Thread-27381] [transport.py] [_log()] kex follows: False
2026-04-15T23:09:31.990 [DEBUG] [Thread-27381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:09:31.990 [DEBUG] [Thread-27381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:09:31.990 [DEBUG] [Thread-27381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:09:31.990 [DEBUG] [Thread-27381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:09:31.991 [DEBUG] [Thread-27381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:09:31.991 [DEBUG] [Thread-27381] [transport.py] [_log()] Compression: none
2026-04-15T23:09:31.991 [DEBUG] [Thread-27381] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:09:32.048 [DEBUG] [Thread-27381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:09:32.048 [DEBUG] [Thread-27381] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:09:32.049 [DEBUG] [Thread-27381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:09:32.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:09:32.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:09:32.110 [DEBUG] [Thread-27381] [transport.py] [_log()] userauth is OK
2026-04-15T23:09:32.110 [DEBUG] [Thread-27381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:09:32.111 [DEBUG] [Thread-27381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:09:32.111 [DEBUG] [Thread-27381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:09:32.111 [DEBUG] [Thread-27381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:09:32.137 [INFO] [Thread-27381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:09:32.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:09:32.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:09:33.046 [DEBUG] [Thread-27381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:09:33.046 [DEBUG] [Thread-27381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:09:33.095 [DEBUG] [Thread-27381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:09:33.095 [DEBUG] [Thread-27381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:09:33.104 [DEBUG] [Thread-27381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:09:33.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:09:33.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')
2026-04-15T23:09:33.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
2026-04-15T23:09:33.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:09:33.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:09:33.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:09:33.137 [DEBUG] [Thread-27381] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:09:33.211 [DEBUG] [Thread-27383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:09:39.524 [DEBUG] [Thread-27384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:09:54.567 [DEBUG] [Thread-27385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:10:03.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:10:03.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:10:03.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
2026-04-15T23:10:04.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 9, 52), 3.21318, 80.2289, 0.0, 10.5876, 8.92744, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:10:04.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:09:52
2026-04-15T23:10:04.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:10:05.225 [DEBUG] [Thread-27386] [transport.py] [_log()] starting thread (client mode): 0xee9c3280
2026-04-15T23:10:05.225 [DEBUG] [Thread-27386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:10:05.244 [DEBUG] [Thread-27386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:10:05.244 [INFO] [Thread-27386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:10:05.247 [DEBUG] [Thread-27386] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:10:05.247 [DEBUG] [Thread-27386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:10:05.247 [DEBUG] [Thread-27386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:10:05.247 [DEBUG] [Thread-27386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:10:05.248 [DEBUG] [Thread-27386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:10:05.248 [DEBUG] [Thread-27386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:10:05.248 [DEBUG] [Thread-27386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:10:05.248 [DEBUG] [Thread-27386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:10:05.248 [DEBUG] [Thread-27386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:10:05.248 [DEBUG] [Thread-27386] [transport.py] [_log()] client lang: <none>
2026-04-15T23:10:05.248 [DEBUG] [Thread-27386] [transport.py] [_log()] server lang: <none>
2026-04-15T23:10:05.248 [DEBUG] [Thread-27386] [transport.py] [_log()] kex follows: False
2026-04-15T23:10:05.248 [DEBUG] [Thread-27386] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:10:05.248 [DEBUG] [Thread-27386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:10:05.249 [DEBUG] [Thread-27386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:10:05.249 [DEBUG] [Thread-27386] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:10:05.249 [DEBUG] [Thread-27386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:10:05.249 [DEBUG] [Thread-27386] [transport.py] [_log()] Compression: none
2026-04-15T23:10:05.249 [DEBUG] [Thread-27386] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:10:05.265 [DEBUG] [Thread-27386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:10:05.266 [DEBUG] [Thread-27386] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:10:05.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:10:05.266 [DEBUG] [Thread-27386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:10:05.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:10:05.267 [DEBUG] [Thread-27386] [transport.py] [_log()] userauth is OK
2026-04-15T23:10:05.267 [DEBUG] [Thread-27386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:10:05.268 [DEBUG] [Thread-27386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:10:05.268 [DEBUG] [Thread-27386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:10:05.268 [DEBUG] [Thread-27386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:10:05.286 [INFO] [Thread-27386] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:10:05.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:10:09.439 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:10:09.441 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:10:09.601 [DEBUG] [Thread-27388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:10:11.434 [DEBUG] [Thread-27386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:10:11.434 [DEBUG] [Thread-27386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:10:11.435 [DEBUG] [Thread-27386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:10:11.475 [DEBUG] [Thread-27386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:10:11.475 [DEBUG] [Thread-27386] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:10:11.477 [DEBUG] [Thread-27386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:10:11.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:10:11.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:10:11.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:10:11.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:10:11.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:10:11.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:10:11.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:10:11.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:10:11.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:10:11.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.881726 -999.00   +8.90   8.37     83   +6.30 1 1 1 2 1     0    0 2.30 -11.55 ZNESW 6.6 8.4 100.6 8.7 9.6 -24.9 9.5 -23.6 9.2 -21.4 9.4 -23.4
2026-04-15T23:10:11.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:10:11.582 [DEBUG] [Thread-27386] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:10:11.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:10:11.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.881726
2026-04-15T23:10:11.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:10:11.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:10:11.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:10:11.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:10:11.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:10:11.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:09:52', tmtdew=3.21318, humidity=80.2289, cloud=0.0, wind=10.5876, temperature=8.92744, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:09:41.126', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, -0.052250000000000796, -0.020749999999999602, -0.07650000000000112, -0.05450000000000088, 0.013250000000001094, 0.016000000000000014, -0.006750000000000256, 0.005499999999999616, -0.06899999999999906, -0.04025000000000034, -0.09299999999999997, -0.005000000000000782, 0.03725000000000023, -0.002000000000000668, -0.01699999999999946, -0.025750000000000384, -0.0625, -0.021000000000000796, -0.009250000000001535, -0.009500000000002728, 0.029749999999998167, 0.04225000000000101, 0.04875000000000007, 0.007499999999998508, -0.08750000000000036, 0.012750000000000483, -0.011499999999999844, 0.018000000000000682, 0.02850000000000108, 0.05349999999999966, 0.042500000000000426, -0.09525000000000006], zp_timestamp='2026-04-15T21:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:10:11.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:10:11.847 [DEBUG] [Thread-27390] [transport.py] [_log()] starting thread (client mode): 0xf1335f60
2026-04-15T23:10:11.847 [DEBUG] [Thread-27390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:10:11.862 [DEBUG] [Thread-27390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:10:11.862 [INFO] [Thread-27390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:10:11.870 [DEBUG] [Thread-27390] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:10:11.870 [DEBUG] [Thread-27390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:10:11.870 [DEBUG] [Thread-27390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:10:11.870 [DEBUG] [Thread-27390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:10:11.870 [DEBUG] [Thread-27390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:10:11.870 [DEBUG] [Thread-27390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:10:11.870 [DEBUG] [Thread-27390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:10:11.870 [DEBUG] [Thread-27390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:10:11.870 [DEBUG] [Thread-27390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:10:11.870 [DEBUG] [Thread-27390] [transport.py] [_log()] client lang: <none>
2026-04-15T23:10:11.870 [DEBUG] [Thread-27390] [transport.py] [_log()] server lang: <none>
2026-04-15T23:10:11.870 [DEBUG] [Thread-27390] [transport.py] [_log()] kex follows: False
2026-04-15T23:10:11.871 [DEBUG] [Thread-27390] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:10:11.871 [DEBUG] [Thread-27390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:10:11.871 [DEBUG] [Thread-27390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:10:11.871 [DEBUG] [Thread-27390] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:10:11.871 [DEBUG] [Thread-27390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:10:11.871 [DEBUG] [Thread-27390] [transport.py] [_log()] Compression: none
2026-04-15T23:10:11.871 [DEBUG] [Thread-27390] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:10:11.928 [DEBUG] [Thread-27390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:10:11.928 [DEBUG] [Thread-27390] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:10:11.929 [DEBUG] [Thread-27390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:10:11.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:10:11.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:10:11.988 [DEBUG] [Thread-27390] [transport.py] [_log()] userauth is OK
2026-04-15T23:10:11.988 [DEBUG] [Thread-27390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:10:11.988 [DEBUG] [Thread-27390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:10:11.988 [DEBUG] [Thread-27390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:10:11.988 [DEBUG] [Thread-27390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:10:12.013 [INFO] [Thread-27390] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:10:12.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:10:12.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:10:12.848 [DEBUG] [Thread-27390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:10:12.848 [DEBUG] [Thread-27390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:10:12.898 [DEBUG] [Thread-27390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:10:12.898 [DEBUG] [Thread-27390] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:10:12.907 [DEBUG] [Thread-27390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:10:12.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:10:12.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')
2026-04-15T23:10:12.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') -> 00000000
2026-04-15T23:10:12.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:10:12.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:10:12.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:10:12.942 [DEBUG] [Thread-27390] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:10:24.632 [DEBUG] [Thread-27392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:10:33.366 [DEBUG] [Thread-27393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:10:39.673 [DEBUG] [Thread-27394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:10:42.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:10:42.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:10:42.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
2026-04-15T23:10:44.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 10, 27), 3.49506, 78.6808, 0.0, 10.9408, 9.08031, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:10:44.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:10:27
2026-04-15T23:10:44.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:10:44.986 [DEBUG] [Thread-27395] [transport.py] [_log()] starting thread (client mode): 0xee9c3730
2026-04-15T23:10:44.986 [DEBUG] [Thread-27395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:10:45.006 [DEBUG] [Thread-27395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:10:45.006 [INFO] [Thread-27395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:10:45.007 [DEBUG] [Thread-27395] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:10:45.007 [DEBUG] [Thread-27395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:10:45.008 [DEBUG] [Thread-27395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:10:45.008 [DEBUG] [Thread-27395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:10:45.008 [DEBUG] [Thread-27395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:10:45.008 [DEBUG] [Thread-27395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:10:45.008 [DEBUG] [Thread-27395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:10:45.008 [DEBUG] [Thread-27395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:10:45.008 [DEBUG] [Thread-27395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:10:45.008 [DEBUG] [Thread-27395] [transport.py] [_log()] client lang: <none>
2026-04-15T23:10:45.008 [DEBUG] [Thread-27395] [transport.py] [_log()] server lang: <none>
2026-04-15T23:10:45.008 [DEBUG] [Thread-27395] [transport.py] [_log()] kex follows: False
2026-04-15T23:10:45.008 [DEBUG] [Thread-27395] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:10:45.009 [DEBUG] [Thread-27395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:10:45.009 [DEBUG] [Thread-27395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:10:45.009 [DEBUG] [Thread-27395] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:10:45.009 [DEBUG] [Thread-27395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:10:45.009 [DEBUG] [Thread-27395] [transport.py] [_log()] Compression: none
2026-04-15T23:10:45.009 [DEBUG] [Thread-27395] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:10:45.028 [DEBUG] [Thread-27395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:10:45.029 [DEBUG] [Thread-27395] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:10:45.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:10:45.029 [DEBUG] [Thread-27395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:10:45.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:10:45.030 [DEBUG] [Thread-27395] [transport.py] [_log()] userauth is OK
2026-04-15T23:10:45.030 [DEBUG] [Thread-27395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:10:45.031 [DEBUG] [Thread-27395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:10:45.031 [DEBUG] [Thread-27395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:10:45.031 [DEBUG] [Thread-27395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:10:45.053 [INFO] [Thread-27395] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:10:45.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:10:45.855 [DEBUG] [Thread-27395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:10:45.855 [DEBUG] [Thread-27395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:10:45.855 [DEBUG] [Thread-27395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:10:45.896 [DEBUG] [Thread-27395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:10:45.896 [DEBUG] [Thread-27395] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:10:45.898 [DEBUG] [Thread-27395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:10:45.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:10:45.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:10:45.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:10:45.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:10:45.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:10:45.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:10:45.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:10:45.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:10:45.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:10:45.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.882073 -999.00   +8.90   7.91     83   +6.30 1 1 1 2 1     0    0 2.41 -9.03 ZNESW 7.5 7.9 112.4 11.4 9.5 -24.8 9.4 -23.6 9.2 -21.5 9.4 -23.5
2026-04-15T23:10:45.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:10:45.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:10:45.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.882073
2026-04-15T23:10:45.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:10:45.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:10:45.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:10:45.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:10:45.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:10:45.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:10:27', tmtdew=3.49506, humidity=78.6808, cloud=0.0, wind=10.9408, temperature=9.08031, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:10:11.107', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, -0.052250000000000796, -0.020749999999999602, -0.07650000000000112, -0.05450000000000088, 0.013250000000001094, 0.016000000000000014, -0.006750000000000256, 0.005499999999999616, -0.06899999999999906, -0.04025000000000034, -0.09299999999999997, -0.005000000000000782, 0.03725000000000023, -0.002000000000000668, -0.01699999999999946, -0.025750000000000384, -0.0625, -0.021000000000000796, -0.009250000000001535, -0.009500000000002728, 0.029749999999998167, 0.04225000000000101, 0.04875000000000007, 0.007499999999998508, -0.08750000000000036, 0.012750000000000483, -0.011499999999999844, 0.018000000000000682, 0.02850000000000108, 0.05349999999999966, 0.042500000000000426, -0.09525000000000006], zp_timestamp='2026-04-15T21:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:10:45.920 [DEBUG] [Thread-27395] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:10:46.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:10:46.150 [DEBUG] [Thread-27398] [transport.py] [_log()] starting thread (client mode): 0xee9c35e0
2026-04-15T23:10:46.150 [DEBUG] [Thread-27398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:10:46.164 [DEBUG] [Thread-27398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:10:46.164 [INFO] [Thread-27398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:10:46.172 [DEBUG] [Thread-27398] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:10:46.172 [DEBUG] [Thread-27398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] client lang: <none>
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] server lang: <none>
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] kex follows: False
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] Compression: none
2026-04-15T23:10:46.173 [DEBUG] [Thread-27398] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:10:46.230 [DEBUG] [Thread-27398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:10:46.231 [DEBUG] [Thread-27398] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:10:46.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:10:46.231 [DEBUG] [Thread-27398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:10:46.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:10:46.290 [DEBUG] [Thread-27398] [transport.py] [_log()] userauth is OK
2026-04-15T23:10:46.290 [DEBUG] [Thread-27398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:10:46.290 [DEBUG] [Thread-27398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:10:46.290 [DEBUG] [Thread-27398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:10:46.290 [DEBUG] [Thread-27398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:10:46.312 [INFO] [Thread-27398] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:10:46.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:10:46.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:10:47.191 [DEBUG] [Thread-27398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:10:47.191 [DEBUG] [Thread-27398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:10:47.239 [DEBUG] [Thread-27398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:10:47.239 [DEBUG] [Thread-27398] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:10:47.248 [DEBUG] [Thread-27398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:10:47.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:10:47.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')
2026-04-15T23:10:47.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
2026-04-15T23:10:47.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:10:47.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:10:47.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:10:47.283 [DEBUG] [Thread-27398] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:10:54.704 [DEBUG] [Thread-27400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:10:57.575 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:11:00.846 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:11:05.871 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:11:09.643 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:11:09.643 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:11:09.748 [DEBUG] [Thread-27401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:11:11.247 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:11:17.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:11:17.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:11:17.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
2026-04-15T23:11:18.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 11, 2), 3.50659, 78.6144, 0.0, 10.9408, 9.06372, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:11:18.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:11:02
2026-04-15T23:11:19.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:11:19.499 [DEBUG] [Thread-27402] [transport.py] [_log()] starting thread (client mode): 0xee993850
2026-04-15T23:11:19.499 [DEBUG] [Thread-27402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:11:19.518 [DEBUG] [Thread-27402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:11:19.519 [INFO] [Thread-27402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:11:19.522 [DEBUG] [Thread-27402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:11:19.522 [DEBUG] [Thread-27402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:11:19.522 [DEBUG] [Thread-27402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:11:19.522 [DEBUG] [Thread-27402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:11:19.522 [DEBUG] [Thread-27402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:11:19.522 [DEBUG] [Thread-27402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:11:19.522 [DEBUG] [Thread-27402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:11:19.522 [DEBUG] [Thread-27402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:11:19.523 [DEBUG] [Thread-27402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:11:19.523 [DEBUG] [Thread-27402] [transport.py] [_log()] client lang: <none>
2026-04-15T23:11:19.523 [DEBUG] [Thread-27402] [transport.py] [_log()] server lang: <none>
2026-04-15T23:11:19.523 [DEBUG] [Thread-27402] [transport.py] [_log()] kex follows: False
2026-04-15T23:11:19.523 [DEBUG] [Thread-27402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:11:19.523 [DEBUG] [Thread-27402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:11:19.523 [DEBUG] [Thread-27402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:11:19.523 [DEBUG] [Thread-27402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:11:19.523 [DEBUG] [Thread-27402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:11:19.523 [DEBUG] [Thread-27402] [transport.py] [_log()] Compression: none
2026-04-15T23:11:19.523 [DEBUG] [Thread-27402] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:11:19.542 [DEBUG] [Thread-27402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:11:19.542 [DEBUG] [Thread-27402] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:11:19.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:11:19.543 [DEBUG] [Thread-27402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:11:19.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:11:19.544 [DEBUG] [Thread-27402] [transport.py] [_log()] userauth is OK
2026-04-15T23:11:19.544 [DEBUG] [Thread-27402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:11:19.544 [DEBUG] [Thread-27402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:11:19.544 [DEBUG] [Thread-27402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:11:19.545 [DEBUG] [Thread-27402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:11:19.580 [INFO] [Thread-27402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:11:19.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:11:20.399 [DEBUG] [Thread-27402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:11:20.399 [DEBUG] [Thread-27402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:11:20.400 [DEBUG] [Thread-27402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:11:20.440 [DEBUG] [Thread-27402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:11:20.440 [DEBUG] [Thread-27402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:11:20.442 [DEBUG] [Thread-27402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:11:20.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:11:20.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:11:20.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:11:20.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:11:20.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:11:20.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:11:20.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:11:20.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:11:20.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:11:20.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.882421 -999.00   +8.90   9.26     83   +6.30 1 1 1 2 1     0    0 2.39 -7.48 ZNESW 7.4 9.3 112.4 9.8 9.5 -24.8 9.4 -23.8 9.1 -21.4 9.4 -23.4
2026-04-15T23:11:20.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:11:20.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:11:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.882421
2026-04-15T23:11:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:11:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:11:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:11:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:11:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:11:20.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:11:02', tmtdew=3.50659, humidity=78.6144, cloud=0.0, wind=10.9408, temperature=9.06372, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:10:41.174', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, -0.052250000000000796, -0.020749999999999602, -0.07650000000000112, -0.05450000000000088, 0.013250000000001094, 0.016000000000000014, -0.006750000000000256, 0.005499999999999616, -0.06899999999999906, -0.04025000000000034, -0.09299999999999997, -0.005000000000000782, 0.03725000000000023, -0.002000000000000668, -0.01699999999999946, -0.025750000000000384, -0.0625, -0.021000000000000796, -0.009250000000001535, -0.009500000000002728, 0.029749999999998167, 0.04225000000000101, 0.04875000000000007, 0.007499999999998508, -0.08750000000000036, 0.012750000000000483, -0.011499999999999844, 0.018000000000000682, 0.02850000000000108, 0.05349999999999966, 0.042500000000000426, -0.09525000000000006], zp_timestamp='2026-04-15T21:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:11:20.465 [DEBUG] [Thread-27402] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:11:20.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:11:20.675 [DEBUG] [Thread-27405] [transport.py] [_log()] starting thread (client mode): 0xf1367970
2026-04-15T23:11:20.675 [DEBUG] [Thread-27405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:11:20.690 [DEBUG] [Thread-27405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:11:20.690 [INFO] [Thread-27405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:11:20.697 [DEBUG] [Thread-27405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:11:20.697 [DEBUG] [Thread-27405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:11:20.697 [DEBUG] [Thread-27405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:11:20.697 [DEBUG] [Thread-27405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:11:20.698 [DEBUG] [Thread-27405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:11:20.698 [DEBUG] [Thread-27405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:11:20.698 [DEBUG] [Thread-27405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:11:20.698 [DEBUG] [Thread-27405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:11:20.698 [DEBUG] [Thread-27405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:11:20.698 [DEBUG] [Thread-27405] [transport.py] [_log()] client lang: <none>
2026-04-15T23:11:20.698 [DEBUG] [Thread-27405] [transport.py] [_log()] server lang: <none>
2026-04-15T23:11:20.698 [DEBUG] [Thread-27405] [transport.py] [_log()] kex follows: False
2026-04-15T23:11:20.698 [DEBUG] [Thread-27405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:11:20.698 [DEBUG] [Thread-27405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:11:20.698 [DEBUG] [Thread-27405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:11:20.698 [DEBUG] [Thread-27405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:11:20.699 [DEBUG] [Thread-27405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:11:20.699 [DEBUG] [Thread-27405] [transport.py] [_log()] Compression: none
2026-04-15T23:11:20.699 [DEBUG] [Thread-27405] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:11:20.756 [DEBUG] [Thread-27405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:11:20.756 [DEBUG] [Thread-27405] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:11:20.757 [DEBUG] [Thread-27405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:11:20.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:11:20.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:11:20.813 [DEBUG] [Thread-27405] [transport.py] [_log()] userauth is OK
2026-04-15T23:11:20.813 [DEBUG] [Thread-27405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:11:20.813 [DEBUG] [Thread-27405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:11:20.813 [DEBUG] [Thread-27405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:11:20.813 [DEBUG] [Thread-27405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:11:20.830 [INFO] [Thread-27405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:11:20.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:11:20.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:11:21.658 [DEBUG] [Thread-27405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:11:21.658 [DEBUG] [Thread-27405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:11:21.710 [DEBUG] [Thread-27405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:11:21.710 [DEBUG] [Thread-27405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:11:21.721 [DEBUG] [Thread-27405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:11:21.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:11:21.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')
2026-04-15T23:11:21.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
2026-04-15T23:11:21.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:11:21.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:11:21.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:11:21.755 [DEBUG] [Thread-27405] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:11:24.778 [DEBUG] [Thread-27407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:11:30.765 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:11:33.534 [DEBUG] [Thread-27408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:11:35.165 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:11:39.820 [DEBUG] [Thread-27409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:11:51.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:11:51.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:11:51.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
2026-04-15T23:11:53.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 11, 38), 3.18417, 80.3948, 0.0, 10.9757, 8.96062, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:11:53.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:11:38
2026-04-15T23:11:53.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:11:53.901 [DEBUG] [Thread-27410] [transport.py] [_log()] starting thread (client mode): 0xee992aa0
2026-04-15T23:11:53.901 [DEBUG] [Thread-27410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:11:53.920 [DEBUG] [Thread-27410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:11:53.920 [INFO] [Thread-27410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:11:53.922 [DEBUG] [Thread-27410] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:11:53.922 [DEBUG] [Thread-27410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:11:53.922 [DEBUG] [Thread-27410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:11:53.922 [DEBUG] [Thread-27410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:11:53.922 [DEBUG] [Thread-27410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:11:53.922 [DEBUG] [Thread-27410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:11:53.922 [DEBUG] [Thread-27410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:11:53.922 [DEBUG] [Thread-27410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:11:53.922 [DEBUG] [Thread-27410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:11:53.922 [DEBUG] [Thread-27410] [transport.py] [_log()] client lang: <none>
2026-04-15T23:11:53.922 [DEBUG] [Thread-27410] [transport.py] [_log()] server lang: <none>
2026-04-15T23:11:53.923 [DEBUG] [Thread-27410] [transport.py] [_log()] kex follows: False
2026-04-15T23:11:53.923 [DEBUG] [Thread-27410] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:11:53.923 [DEBUG] [Thread-27410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:11:53.923 [DEBUG] [Thread-27410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:11:53.923 [DEBUG] [Thread-27410] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:11:53.923 [DEBUG] [Thread-27410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:11:53.923 [DEBUG] [Thread-27410] [transport.py] [_log()] Compression: none
2026-04-15T23:11:53.923 [DEBUG] [Thread-27410] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:11:53.937 [DEBUG] [Thread-27410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:11:53.937 [DEBUG] [Thread-27410] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:11:53.938 [DEBUG] [Thread-27410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:11:53.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:11:53.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:11:53.939 [DEBUG] [Thread-27410] [transport.py] [_log()] userauth is OK
2026-04-15T23:11:53.939 [DEBUG] [Thread-27410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:11:53.939 [DEBUG] [Thread-27410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:11:53.939 [DEBUG] [Thread-27410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:11:53.939 [DEBUG] [Thread-27410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:11:53.963 [INFO] [Thread-27410] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:11:53.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:11:54.632 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:11:54.752 [DEBUG] [Thread-27410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:11:54.753 [DEBUG] [Thread-27410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:11:54.754 [DEBUG] [Thread-27410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:11:54.792 [DEBUG] [Thread-27410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:11:54.792 [DEBUG] [Thread-27410] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:11:54.794 [DEBUG] [Thread-27410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:11:54.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:11:54.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:11:54.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:11:54.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:11:54.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:11:54.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:11:54.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:11:54.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:11:54.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:11:54.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.882768 -999.00   +8.90   7.12     83   +6.30 1 1 1 2 1     0    0 2.46 -5.81 ZNESW 7.2 7.1 108.6 9.6 9.5 -24.6 9.4 -23.7 9.2 -21.5 9.4 -23.5
2026-04-15T23:11:54.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:11:54.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:11:54.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.882768
2026-04-15T23:11:54.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:11:54.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:11:54.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:11:54.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:11:54.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:11:54.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:11:38', tmtdew=3.18417, humidity=80.3948, cloud=0.0, wind=10.9757, temperature=8.96062, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:11:11.155', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, -0.052250000000000796, -0.020749999999999602, -0.07650000000000112, -0.05450000000000088, 0.013250000000001094, 0.016000000000000014, -0.006750000000000256, 0.005499999999999616, -0.06899999999999906, -0.04025000000000034, -0.09299999999999997, -0.005000000000000782, 0.03725000000000023, -0.002000000000000668, -0.01699999999999946, -0.025750000000000384, -0.0625, -0.021000000000000796, -0.009250000000001535, -0.009500000000002728, 0.029749999999998167, 0.04225000000000101, 0.04875000000000007, 0.007499999999998508, -0.08750000000000036, 0.012750000000000483, -0.011499999999999844, 0.018000000000000682, 0.02850000000000108, 0.05349999999999966, 0.042500000000000426, -0.09525000000000006], zp_timestamp='2026-04-15T21:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:11:54.816 [DEBUG] [Thread-27410] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:11:54.846 [DEBUG] [Thread-27413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:11:55.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:11:55.034 [DEBUG] [Thread-27414] [transport.py] [_log()] starting thread (client mode): 0xee9c7a30
2026-04-15T23:11:55.035 [DEBUG] [Thread-27414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:11:55.049 [DEBUG] [Thread-27414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:11:55.050 [INFO] [Thread-27414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:11:55.057 [DEBUG] [Thread-27414] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:11:55.057 [DEBUG] [Thread-27414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:11:55.058 [DEBUG] [Thread-27414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:11:55.058 [DEBUG] [Thread-27414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:11:55.058 [DEBUG] [Thread-27414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:11:55.058 [DEBUG] [Thread-27414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:11:55.058 [DEBUG] [Thread-27414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:11:55.058 [DEBUG] [Thread-27414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:11:55.058 [DEBUG] [Thread-27414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:11:55.058 [DEBUG] [Thread-27414] [transport.py] [_log()] client lang: <none>
2026-04-15T23:11:55.058 [DEBUG] [Thread-27414] [transport.py] [_log()] server lang: <none>
2026-04-15T23:11:55.058 [DEBUG] [Thread-27414] [transport.py] [_log()] kex follows: False
2026-04-15T23:11:55.058 [DEBUG] [Thread-27414] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:11:55.058 [DEBUG] [Thread-27414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:11:55.059 [DEBUG] [Thread-27414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:11:55.059 [DEBUG] [Thread-27414] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:11:55.059 [DEBUG] [Thread-27414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:11:55.059 [DEBUG] [Thread-27414] [transport.py] [_log()] Compression: none
2026-04-15T23:11:55.059 [DEBUG] [Thread-27414] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:11:55.115 [DEBUG] [Thread-27414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:11:55.116 [DEBUG] [Thread-27414] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:11:55.116 [DEBUG] [Thread-27414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:11:55.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:11:55.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:11:55.172 [DEBUG] [Thread-27414] [transport.py] [_log()] userauth is OK
2026-04-15T23:11:55.172 [DEBUG] [Thread-27414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:11:55.172 [DEBUG] [Thread-27414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:11:55.172 [DEBUG] [Thread-27414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:11:55.172 [DEBUG] [Thread-27414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:11:55.198 [INFO] [Thread-27414] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:11:55.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:11:55.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:11:56.090 [DEBUG] [Thread-27414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:11:56.090 [DEBUG] [Thread-27414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:11:56.138 [DEBUG] [Thread-27414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:11:56.138 [DEBUG] [Thread-27414] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:11:56.148 [DEBUG] [Thread-27414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:11:56.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:11:56.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')
2026-04-15T23:11: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
2026-04-15T23:11:56.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:11:56.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:11:56.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:11:56.183 [DEBUG] [Thread-27414] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:12:00.258 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:12:06.157 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:12:09.849 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:12:09.851 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:12:09.884 [DEBUG] [Thread-27416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:12:10.575 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:12:24.915 [DEBUG] [Thread-27417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:12:26.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:12:26.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:12:26.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:12:27.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 12, 13), 3.49168, 78.6974, 0.0, 8.99964, 9.06372, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:12:27.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:12:13
2026-04-15T23:12:27.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:12:28.307 [DEBUG] [Thread-27418] [transport.py] [_log()] starting thread (client mode): 0xf1337790
2026-04-15T23:12:28.307 [DEBUG] [Thread-27418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:12:28.328 [DEBUG] [Thread-27418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:12:28.328 [INFO] [Thread-27418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:12:28.332 [DEBUG] [Thread-27418] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:12:28.332 [DEBUG] [Thread-27418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:12:28.332 [DEBUG] [Thread-27418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:12:28.332 [DEBUG] [Thread-27418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:12:28.332 [DEBUG] [Thread-27418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:12:28.332 [DEBUG] [Thread-27418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:12:28.332 [DEBUG] [Thread-27418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:12:28.332 [DEBUG] [Thread-27418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:12:28.332 [DEBUG] [Thread-27418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:12:28.332 [DEBUG] [Thread-27418] [transport.py] [_log()] client lang: <none>
2026-04-15T23:12:28.333 [DEBUG] [Thread-27418] [transport.py] [_log()] server lang: <none>
2026-04-15T23:12:28.333 [DEBUG] [Thread-27418] [transport.py] [_log()] kex follows: False
2026-04-15T23:12:28.333 [DEBUG] [Thread-27418] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:12:28.333 [DEBUG] [Thread-27418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:12:28.333 [DEBUG] [Thread-27418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:12:28.333 [DEBUG] [Thread-27418] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:12:28.333 [DEBUG] [Thread-27418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:12:28.333 [DEBUG] [Thread-27418] [transport.py] [_log()] Compression: none
2026-04-15T23:12:28.333 [DEBUG] [Thread-27418] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:12:28.350 [DEBUG] [Thread-27418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:12:28.350 [DEBUG] [Thread-27418] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:12:28.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:12:28.351 [DEBUG] [Thread-27418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:12:28.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:12:28.352 [DEBUG] [Thread-27418] [transport.py] [_log()] userauth is OK
2026-04-15T23:12:28.352 [DEBUG] [Thread-27418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:12:28.352 [DEBUG] [Thread-27418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:12:28.352 [DEBUG] [Thread-27418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:12:28.353 [DEBUG] [Thread-27418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:12:28.376 [INFO] [Thread-27418] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:12:28.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:12:28.992 [DEBUG] [Thread-27418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:12:28.992 [DEBUG] [Thread-27418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:12:28.993 [DEBUG] [Thread-27418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:12:29.033 [DEBUG] [Thread-27418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:12:29.033 [DEBUG] [Thread-27418] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:12:29.036 [DEBUG] [Thread-27418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:12:29.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:12:29.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:12:29.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:12:29.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:12:29.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:12:29.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:12:29.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:12:29.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:12:29.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:12:29.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.883462 -999.00   +9.10   5.88     83   +6.40 1 1 1 2 1     0    0 2.51 -3.56 ZNESW 7.6 5.9 121.0 10.0 9.6 -24.6 9.5 -23.5 9.2 -21.3 9.4 -23.3
2026-04-15T23:12:29.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:12:29.074 [DEBUG] [Thread-27418] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:12:29.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:12:29.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.883462
2026-04-15T23:12:29.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:12:29.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:12:29.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:12:29.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:12:29.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:12:29.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:12:13', tmtdew=3.49168, humidity=78.6974, cloud=0.0, wind=8.99964, temperature=9.06372, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:12:11.117', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.02874999999999872, 0.008750000000000924, -0.09750000000000014, -0.06049999999999933, 0.011250000000000426, 0.0029999999999983373, 0.0007500000000000284, 0.01649999999999885, -0.036999999999999034, -0.021750000000000824, -0.0779999999999994, 0.009999999999999787, 0.045249999999999346, 0.014499999999998181, -0.0030000000000001137, 0.004249999999998977, -0.06049999999999933, -0.0010000000000012221, -0.014750000000001151, 0.018499999999999517, 0.04324999999999868, 0.012750000000000483, 0.015750000000000597, 0.03999999999999915, -0.06450000000000067, 0.0017499999999994742, -0.02149999999999963, 0.027000000000001023, 0.07900000000000063, 0.05400000000000027, 0.05349999999999966, -0.020250000000000767], zp_timestamp='2026-04-15T21:10:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:12:29.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:12:29.317 [DEBUG] [Thread-27421] [transport.py] [_log()] starting thread (client mode): 0xee9c38e0
2026-04-15T23:12:29.317 [DEBUG] [Thread-27421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:12:29.332 [DEBUG] [Thread-27421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:12:29.332 [INFO] [Thread-27421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:12:29.340 [DEBUG] [Thread-27421] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:12:29.340 [DEBUG] [Thread-27421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:12:29.340 [DEBUG] [Thread-27421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:12:29.340 [DEBUG] [Thread-27421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:12:29.340 [DEBUG] [Thread-27421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:12:29.340 [DEBUG] [Thread-27421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:12:29.340 [DEBUG] [Thread-27421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:12:29.340 [DEBUG] [Thread-27421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:12:29.341 [DEBUG] [Thread-27421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:12:29.341 [DEBUG] [Thread-27421] [transport.py] [_log()] client lang: <none>
2026-04-15T23:12:29.341 [DEBUG] [Thread-27421] [transport.py] [_log()] server lang: <none>
2026-04-15T23:12:29.341 [DEBUG] [Thread-27421] [transport.py] [_log()] kex follows: False
2026-04-15T23:12:29.341 [DEBUG] [Thread-27421] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:12:29.341 [DEBUG] [Thread-27421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:12:29.341 [DEBUG] [Thread-27421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:12:29.341 [DEBUG] [Thread-27421] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:12:29.341 [DEBUG] [Thread-27421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:12:29.341 [DEBUG] [Thread-27421] [transport.py] [_log()] Compression: none
2026-04-15T23:12:29.341 [DEBUG] [Thread-27421] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:12:29.399 [DEBUG] [Thread-27421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:12:29.399 [DEBUG] [Thread-27421] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:12:29.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:12:29.400 [DEBUG] [Thread-27421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:12:29.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:12:29.455 [DEBUG] [Thread-27421] [transport.py] [_log()] userauth is OK
2026-04-15T23:12:29.456 [DEBUG] [Thread-27421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:12:29.456 [DEBUG] [Thread-27421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:12:29.456 [DEBUG] [Thread-27421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:12:29.456 [DEBUG] [Thread-27421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:12:29.482 [INFO] [Thread-27421] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:12:29.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:12:29.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:12:30.299 [DEBUG] [Thread-27421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:12:30.299 [DEBUG] [Thread-27421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:12:30.347 [DEBUG] [Thread-27421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:12:30.348 [DEBUG] [Thread-27421] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:12:30.357 [DEBUG] [Thread-27421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:12:30.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:12:30.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')
2026-04-15T23:12:30.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
2026-04-15T23:12:30.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:12:30.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:12:30.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:12:30.392 [DEBUG] [Thread-27421] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:12:33.689 [DEBUG] [Thread-27423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:12:39.945 [DEBUG] [Thread-27424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:12:54.981 [DEBUG] [Thread-27425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:13:00.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:13:00.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:13:00.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
2026-04-15T23:13:01.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 12, 48), 3.17145, 80.4612, 0.0, 10.9404, 8.92744, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:13:01.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:12:48
2026-04-15T23:13:02.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:13:02.424 [DEBUG] [Thread-27426] [transport.py] [_log()] starting thread (client mode): 0xf1334f40
2026-04-15T23:13:02.424 [DEBUG] [Thread-27426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:13:02.444 [DEBUG] [Thread-27426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:13:02.444 [INFO] [Thread-27426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:13:02.447 [DEBUG] [Thread-27426] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:13:02.447 [DEBUG] [Thread-27426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:13:02.447 [DEBUG] [Thread-27426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:13:02.447 [DEBUG] [Thread-27426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:13:02.448 [DEBUG] [Thread-27426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:13:02.448 [DEBUG] [Thread-27426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:13:02.448 [DEBUG] [Thread-27426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:13:02.448 [DEBUG] [Thread-27426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:13:02.448 [DEBUG] [Thread-27426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:13:02.448 [DEBUG] [Thread-27426] [transport.py] [_log()] client lang: <none>
2026-04-15T23:13:02.448 [DEBUG] [Thread-27426] [transport.py] [_log()] server lang: <none>
2026-04-15T23:13:02.448 [DEBUG] [Thread-27426] [transport.py] [_log()] kex follows: False
2026-04-15T23:13:02.448 [DEBUG] [Thread-27426] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:13:02.448 [DEBUG] [Thread-27426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:13:02.448 [DEBUG] [Thread-27426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:13:02.449 [DEBUG] [Thread-27426] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:13:02.449 [DEBUG] [Thread-27426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:13:02.449 [DEBUG] [Thread-27426] [transport.py] [_log()] Compression: none
2026-04-15T23:13:02.449 [DEBUG] [Thread-27426] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:13:02.467 [DEBUG] [Thread-27426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:13:02.467 [DEBUG] [Thread-27426] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:13:02.468 [DEBUG] [Thread-27426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:13:02.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:13:02.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:13:02.469 [DEBUG] [Thread-27426] [transport.py] [_log()] userauth is OK
2026-04-15T23:13:02.469 [DEBUG] [Thread-27426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:13:02.469 [DEBUG] [Thread-27426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:13:02.470 [DEBUG] [Thread-27426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:13:02.470 [DEBUG] [Thread-27426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:13:02.488 [INFO] [Thread-27426] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:13:02.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:13:03.120 [DEBUG] [Thread-27426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:13:03.120 [DEBUG] [Thread-27426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:13:03.121 [DEBUG] [Thread-27426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:13:03.161 [DEBUG] [Thread-27426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:13:03.161 [DEBUG] [Thread-27426] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:13:03.165 [DEBUG] [Thread-27426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:13:03.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:13:03.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:13:03.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:13:03.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:13:03.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:13:03.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:13:03.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:13:03.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:13:03.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:13:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.883809 -999.00   +9.20   7.47     82   +6.40 1 1 1 2 1     0    0 2.58 -2.75 ZNESW 8.2 7.5 121.6 11.5 9.6 -24.6 9.5 -23.4 9.2 -21.4 9.4 -23.4
2026-04-15T23:13:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:13:03.191 [DEBUG] [Thread-27426] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:13:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:13:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.883809
2026-04-15T23:13:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:13:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:13:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:13:03.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:13:03.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:13:03.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:12:48', tmtdew=3.17145, humidity=80.4612, cloud=0.0, wind=10.9404, temperature=8.92744, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:12:41.098', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.02874999999999872, 0.008750000000000924, -0.09750000000000014, -0.06049999999999933, 0.011250000000000426, 0.0029999999999983373, 0.0007500000000000284, 0.01649999999999885, -0.036999999999999034, -0.021750000000000824, -0.0779999999999994, 0.009999999999999787, 0.045249999999999346, 0.014499999999998181, -0.0030000000000001137, 0.004249999999998977, -0.06049999999999933, -0.0010000000000012221, -0.014750000000001151, 0.018499999999999517, 0.04324999999999868, 0.012750000000000483, 0.015750000000000597, 0.03999999999999915, -0.06450000000000067, 0.0017499999999994742, -0.02149999999999963, 0.027000000000001023, 0.07900000000000063, 0.05400000000000027, 0.05349999999999966, -0.020250000000000767], zp_timestamp='2026-04-15T21:10:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:13:03.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:13:03.460 [DEBUG] [Thread-27429] [transport.py] [_log()] starting thread (client mode): 0xf1337b80
2026-04-15T23:13:03.460 [DEBUG] [Thread-27429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:13:03.474 [DEBUG] [Thread-27429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:13:03.475 [INFO] [Thread-27429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:13:03.482 [DEBUG] [Thread-27429] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:13:03.482 [DEBUG] [Thread-27429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:13:03.482 [DEBUG] [Thread-27429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:13:03.482 [DEBUG] [Thread-27429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:13:03.482 [DEBUG] [Thread-27429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:13:03.482 [DEBUG] [Thread-27429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:13:03.482 [DEBUG] [Thread-27429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:13:03.482 [DEBUG] [Thread-27429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:13:03.482 [DEBUG] [Thread-27429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:13:03.482 [DEBUG] [Thread-27429] [transport.py] [_log()] client lang: <none>
2026-04-15T23:13:03.482 [DEBUG] [Thread-27429] [transport.py] [_log()] server lang: <none>
2026-04-15T23:13:03.482 [DEBUG] [Thread-27429] [transport.py] [_log()] kex follows: False
2026-04-15T23:13:03.482 [DEBUG] [Thread-27429] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:13:03.483 [DEBUG] [Thread-27429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:13:03.483 [DEBUG] [Thread-27429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:13:03.483 [DEBUG] [Thread-27429] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:13:03.483 [DEBUG] [Thread-27429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:13:03.483 [DEBUG] [Thread-27429] [transport.py] [_log()] Compression: none
2026-04-15T23:13:03.483 [DEBUG] [Thread-27429] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:13:03.538 [DEBUG] [Thread-27429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:13:03.538 [DEBUG] [Thread-27429] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:13:03.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:13:03.539 [DEBUG] [Thread-27429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:13:03.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:13:03.597 [DEBUG] [Thread-27429] [transport.py] [_log()] userauth is OK
2026-04-15T23:13:03.597 [DEBUG] [Thread-27429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:13:03.597 [DEBUG] [Thread-27429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:13:03.597 [DEBUG] [Thread-27429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:13:03.597 [DEBUG] [Thread-27429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:13:03.621 [INFO] [Thread-27429] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:13:03.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:13:03.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:13:04.422 [DEBUG] [Thread-27429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:13:04.422 [DEBUG] [Thread-27429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:13:04.470 [DEBUG] [Thread-27429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:13:04.470 [DEBUG] [Thread-27429] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:13:04.479 [DEBUG] [Thread-27429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:13:04.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:13:04.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')
2026-04-15T23:13:04.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
2026-04-15T23:13:04.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:13:04.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:13:04.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:13:04.518 [DEBUG] [Thread-27429] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:13:10.009 [DEBUG] [Thread-27431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:13:10.050 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:13:10.052 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:13:14.675 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:13:17.760 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:13:25.052 [DEBUG] [Thread-27432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:13:33.853 [DEBUG] [Thread-27433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:13:34.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:13:34.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:13:34.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
2026-04-15T23:13:35.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 13, 24), 3.48315, 78.7472, 0.0, 8.94672, 9.03031, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:13:35.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:13:24
2026-04-15T23:13:36.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:13:36.594 [DEBUG] [Thread-27434] [transport.py] [_log()] starting thread (client mode): 0xf1365b10
2026-04-15T23:13:36.594 [DEBUG] [Thread-27434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:13:36.614 [DEBUG] [Thread-27434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:13:36.614 [INFO] [Thread-27434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:13:36.617 [DEBUG] [Thread-27434] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:13:36.617 [DEBUG] [Thread-27434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:13:36.617 [DEBUG] [Thread-27434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:13:36.617 [DEBUG] [Thread-27434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:13:36.617 [DEBUG] [Thread-27434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:13:36.618 [DEBUG] [Thread-27434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:13:36.618 [DEBUG] [Thread-27434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:13:36.618 [DEBUG] [Thread-27434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:13:36.618 [DEBUG] [Thread-27434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:13:36.618 [DEBUG] [Thread-27434] [transport.py] [_log()] client lang: <none>
2026-04-15T23:13:36.618 [DEBUG] [Thread-27434] [transport.py] [_log()] server lang: <none>
2026-04-15T23:13:36.618 [DEBUG] [Thread-27434] [transport.py] [_log()] kex follows: False
2026-04-15T23:13:36.618 [DEBUG] [Thread-27434] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:13:36.618 [DEBUG] [Thread-27434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:13:36.618 [DEBUG] [Thread-27434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:13:36.618 [DEBUG] [Thread-27434] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:13:36.619 [DEBUG] [Thread-27434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:13:36.619 [DEBUG] [Thread-27434] [transport.py] [_log()] Compression: none
2026-04-15T23:13:36.619 [DEBUG] [Thread-27434] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:13:36.636 [DEBUG] [Thread-27434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:13:36.636 [DEBUG] [Thread-27434] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:13:36.637 [DEBUG] [Thread-27434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:13:36.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:13:36.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:13:36.638 [DEBUG] [Thread-27434] [transport.py] [_log()] userauth is OK
2026-04-15T23:13:36.638 [DEBUG] [Thread-27434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:13:36.638 [DEBUG] [Thread-27434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:13:36.639 [DEBUG] [Thread-27434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:13:36.639 [DEBUG] [Thread-27434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:13:36.664 [INFO] [Thread-27434] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:13:36.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:13:37.269 [DEBUG] [Thread-27434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:13:37.269 [DEBUG] [Thread-27434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:13:37.270 [DEBUG] [Thread-27434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:13:37.310 [DEBUG] [Thread-27434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:13:37.310 [DEBUG] [Thread-27434] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:13:37.313 [DEBUG] [Thread-27434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:13:37.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:13:37.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:13:37.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:13:37.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:13:37.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:13:37.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:13:37.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:13:37.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:13:37.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:13:37.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.884157 -999.00   +9.20   5.12     82   +6.40 1 1 1 2 1     0    0 2.62 -1.51 ZNESW 6.6 5.1 116.9 8.6 9.6 -24.5 9.5 -23.4 9.2 -21.3 9.5 -23.3
2026-04-15T23:13:37.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:13:37.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:13:37.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.884157
2026-04-15T23:13:37.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:13:37.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:13:37.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:13:37.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:13:37.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:13:37.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:13:24', tmtdew=3.48315, humidity=78.7472, cloud=0.0, wind=8.94672, temperature=9.03031, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:13:11.165', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.02874999999999872, 0.008750000000000924, -0.09750000000000014, -0.06049999999999933, 0.011250000000000426, 0.0029999999999983373, 0.0007500000000000284, 0.01649999999999885, -0.036999999999999034, -0.021750000000000824, -0.0779999999999994, 0.009999999999999787, 0.045249999999999346, 0.014499999999998181, -0.0030000000000001137, 0.004249999999998977, -0.06049999999999933, -0.0010000000000012221, -0.014750000000001151, 0.018499999999999517, 0.04324999999999868, 0.012750000000000483, 0.015750000000000597, 0.03999999999999915, -0.06450000000000067, 0.0017499999999994742, -0.02149999999999963, 0.027000000000001023, 0.07900000000000063, 0.05400000000000027, 0.05349999999999966, -0.020250000000000767], zp_timestamp='2026-04-15T21:10:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:13:37.339 [DEBUG] [Thread-27434] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:13:37.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:13:37.593 [DEBUG] [Thread-27437] [transport.py] [_log()] starting thread (client mode): 0xee9c01c0
2026-04-15T23:13:37.593 [DEBUG] [Thread-27437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:13:37.610 [DEBUG] [Thread-27437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:13:37.610 [INFO] [Thread-27437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:13:37.617 [DEBUG] [Thread-27437] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:13:37.617 [DEBUG] [Thread-27437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:13:37.618 [DEBUG] [Thread-27437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:13:37.618 [DEBUG] [Thread-27437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:13:37.618 [DEBUG] [Thread-27437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:13:37.618 [DEBUG] [Thread-27437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:13:37.618 [DEBUG] [Thread-27437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:13:37.618 [DEBUG] [Thread-27437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:13:37.618 [DEBUG] [Thread-27437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:13:37.618 [DEBUG] [Thread-27437] [transport.py] [_log()] client lang: <none>
2026-04-15T23:13:37.618 [DEBUG] [Thread-27437] [transport.py] [_log()] server lang: <none>
2026-04-15T23:13:37.618 [DEBUG] [Thread-27437] [transport.py] [_log()] kex follows: False
2026-04-15T23:13:37.618 [DEBUG] [Thread-27437] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:13:37.618 [DEBUG] [Thread-27437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:13:37.619 [DEBUG] [Thread-27437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:13:37.619 [DEBUG] [Thread-27437] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:13:37.619 [DEBUG] [Thread-27437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:13:37.619 [DEBUG] [Thread-27437] [transport.py] [_log()] Compression: none
2026-04-15T23:13:37.619 [DEBUG] [Thread-27437] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:13:37.675 [DEBUG] [Thread-27437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:13:37.676 [DEBUG] [Thread-27437] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:13:37.676 [DEBUG] [Thread-27437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:13:37.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:13:37.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:13:37.733 [DEBUG] [Thread-27437] [transport.py] [_log()] userauth is OK
2026-04-15T23:13:37.733 [DEBUG] [Thread-27437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:13:37.733 [DEBUG] [Thread-27437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:13:37.733 [DEBUG] [Thread-27437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:13:37.733 [DEBUG] [Thread-27437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:13:37.755 [INFO] [Thread-27437] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:13:37.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:13:37.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:13:38.597 [DEBUG] [Thread-27437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:13:38.597 [DEBUG] [Thread-27437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:13:38.645 [DEBUG] [Thread-27437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:13:38.645 [DEBUG] [Thread-27437] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:13:38.655 [DEBUG] [Thread-27437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:13:38.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:13:38.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')
2026-04-15T23:13:38.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
2026-04-15T23:13:38.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:13:38.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:13:38.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:13:38.691 [DEBUG] [Thread-27437] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:13:40.083 [DEBUG] [Thread-27439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:13:55.129 [DEBUG] [Thread-27440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:14:08.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:14:08.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:14:08.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
2026-04-15T23:14:09.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 13, 59), 3.47422, 78.7969, 0.0, 8.92908, 9.03031, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:14:09.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:13:59
2026-04-15T23:14:10.160 [DEBUG] [Thread-27441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:14:10.278 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:14:10.279 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:14:10.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:14:10.751 [DEBUG] [Thread-27442] [transport.py] [_log()] starting thread (client mode): 0xf13e0340
2026-04-15T23:14:10.751 [DEBUG] [Thread-27442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:14:10.768 [DEBUG] [Thread-27442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:14:10.769 [INFO] [Thread-27442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:14:10.772 [DEBUG] [Thread-27442] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:14:10.772 [DEBUG] [Thread-27442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:14:10.772 [DEBUG] [Thread-27442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:14:10.772 [DEBUG] [Thread-27442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:14:10.772 [DEBUG] [Thread-27442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:14:10.772 [DEBUG] [Thread-27442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:14:10.772 [DEBUG] [Thread-27442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:14:10.772 [DEBUG] [Thread-27442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:14:10.772 [DEBUG] [Thread-27442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:14:10.772 [DEBUG] [Thread-27442] [transport.py] [_log()] client lang: <none>
2026-04-15T23:14:10.772 [DEBUG] [Thread-27442] [transport.py] [_log()] server lang: <none>
2026-04-15T23:14:10.773 [DEBUG] [Thread-27442] [transport.py] [_log()] kex follows: False
2026-04-15T23:14:10.773 [DEBUG] [Thread-27442] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:14:10.773 [DEBUG] [Thread-27442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:14:10.773 [DEBUG] [Thread-27442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:14:10.773 [DEBUG] [Thread-27442] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:14:10.773 [DEBUG] [Thread-27442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:14:10.773 [DEBUG] [Thread-27442] [transport.py] [_log()] Compression: none
2026-04-15T23:14:10.773 [DEBUG] [Thread-27442] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:14:10.786 [DEBUG] [Thread-27442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:14:10.786 [DEBUG] [Thread-27442] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:14:10.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:14:10.787 [DEBUG] [Thread-27442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:14:10.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:14:10.788 [DEBUG] [Thread-27442] [transport.py] [_log()] userauth is OK
2026-04-15T23:14:10.788 [DEBUG] [Thread-27442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:14:10.788 [DEBUG] [Thread-27442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:14:10.788 [DEBUG] [Thread-27442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:14:10.788 [DEBUG] [Thread-27442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:14:10.809 [INFO] [Thread-27442] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:14:10.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:14:11.415 [DEBUG] [Thread-27442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:14:11.415 [DEBUG] [Thread-27442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:14:11.416 [DEBUG] [Thread-27442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:14:11.455 [DEBUG] [Thread-27442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:14:11.456 [DEBUG] [Thread-27442] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:14:11.458 [DEBUG] [Thread-27442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:14:11.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:14:11.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:14:11.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:14:11.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:14:11.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:14:11.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:14:11.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:14:11.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:14:11.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:14:11.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.884504 -999.00   +9.30   5.45     82   +6.40 1 1 1 2 1     0    0 2.62 -0.47 ZNESW 6.7 5.5 104.2 9.2 9.6 -24.3 9.5 -23.3 9.2 -21.3 9.5 -23.3
2026-04-15T23:14:11.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:14:11.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:14:11.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.884504
2026-04-15T23:14:11.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:14:11.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:14:11.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:14:11.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:14:11.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:14:11.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:13:59', tmtdew=3.47422, humidity=78.7969, cloud=0.0, wind=8.92908, temperature=9.03031, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:13:41.146', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.02874999999999872, 0.008750000000000924, -0.09750000000000014, -0.06049999999999933, 0.011250000000000426, 0.0029999999999983373, 0.0007500000000000284, 0.01649999999999885, -0.036999999999999034, -0.021750000000000824, -0.0779999999999994, 0.009999999999999787, 0.045249999999999346, 0.014499999999998181, -0.0030000000000001137, 0.004249999999998977, -0.06049999999999933, -0.0010000000000012221, -0.014750000000001151, 0.018499999999999517, 0.04324999999999868, 0.012750000000000483, 0.015750000000000597, 0.03999999999999915, -0.06450000000000067, 0.0017499999999994742, -0.02149999999999963, 0.027000000000001023, 0.07900000000000063, 0.05400000000000027, 0.05349999999999966, -0.020250000000000767], zp_timestamp='2026-04-15T21:10:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:14:11.477 [DEBUG] [Thread-27442] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:14:11.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:14:11.698 [DEBUG] [Thread-27445] [transport.py] [_log()] starting thread (client mode): 0xf1365de0
2026-04-15T23:14:11.698 [DEBUG] [Thread-27445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:14:11.712 [DEBUG] [Thread-27445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:14:11.712 [INFO] [Thread-27445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:14:11.720 [DEBUG] [Thread-27445] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:14:11.720 [DEBUG] [Thread-27445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:14:11.720 [DEBUG] [Thread-27445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:14:11.720 [DEBUG] [Thread-27445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:14:11.720 [DEBUG] [Thread-27445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:14:11.721 [DEBUG] [Thread-27445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:14:11.721 [DEBUG] [Thread-27445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:14:11.721 [DEBUG] [Thread-27445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:14:11.721 [DEBUG] [Thread-27445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:14:11.721 [DEBUG] [Thread-27445] [transport.py] [_log()] client lang: <none>
2026-04-15T23:14:11.721 [DEBUG] [Thread-27445] [transport.py] [_log()] server lang: <none>
2026-04-15T23:14:11.721 [DEBUG] [Thread-27445] [transport.py] [_log()] kex follows: False
2026-04-15T23:14:11.721 [DEBUG] [Thread-27445] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:14:11.721 [DEBUG] [Thread-27445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:14:11.721 [DEBUG] [Thread-27445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:14:11.721 [DEBUG] [Thread-27445] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:14:11.722 [DEBUG] [Thread-27445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:14:11.722 [DEBUG] [Thread-27445] [transport.py] [_log()] Compression: none
2026-04-15T23:14:11.722 [DEBUG] [Thread-27445] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:14:11.778 [DEBUG] [Thread-27445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:14:11.778 [DEBUG] [Thread-27445] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:14:11.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:14:11.779 [DEBUG] [Thread-27445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:14:11.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:14:11.836 [DEBUG] [Thread-27445] [transport.py] [_log()] userauth is OK
2026-04-15T23:14:11.836 [DEBUG] [Thread-27445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:14:11.836 [DEBUG] [Thread-27445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:14:11.837 [DEBUG] [Thread-27445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:14:11.837 [DEBUG] [Thread-27445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:14:11.863 [INFO] [Thread-27445] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:14:11.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:14:11.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:14:12.661 [DEBUG] [Thread-27445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:14:12.661 [DEBUG] [Thread-27445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:14:12.708 [DEBUG] [Thread-27445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:14:12.708 [DEBUG] [Thread-27445] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:14:12.718 [DEBUG] [Thread-27445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:14:12.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:14:12.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')
2026-04-15T23:14:12.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
2026-04-15T23:14:12.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:14:12.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:14:12.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:14:12.756 [DEBUG] [Thread-27445] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:14:25.191 [DEBUG] [Thread-27447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:14:34.002 [DEBUG] [Thread-27448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:14:40.232 [DEBUG] [Thread-27449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:14:42.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:14:42.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:14: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
2026-04-15T23:14:43.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 14, 34), 3.1417, 80.6271, 0.0, 10.7287, 8.92744, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:14:43.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:14:34
2026-04-15T23:14:44.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:14:44.819 [DEBUG] [Thread-27450] [transport.py] [_log()] starting thread (client mode): 0xee992f50
2026-04-15T23:14:44.820 [DEBUG] [Thread-27450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:14:44.839 [DEBUG] [Thread-27450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:14:44.839 [INFO] [Thread-27450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:14:44.842 [DEBUG] [Thread-27450] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:14:44.842 [DEBUG] [Thread-27450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:14:44.842 [DEBUG] [Thread-27450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:14:44.842 [DEBUG] [Thread-27450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:14:44.842 [DEBUG] [Thread-27450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:14:44.842 [DEBUG] [Thread-27450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:14:44.842 [DEBUG] [Thread-27450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:14:44.842 [DEBUG] [Thread-27450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:14:44.842 [DEBUG] [Thread-27450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:14:44.843 [DEBUG] [Thread-27450] [transport.py] [_log()] client lang: <none>
2026-04-15T23:14:44.843 [DEBUG] [Thread-27450] [transport.py] [_log()] server lang: <none>
2026-04-15T23:14:44.843 [DEBUG] [Thread-27450] [transport.py] [_log()] kex follows: False
2026-04-15T23:14:44.843 [DEBUG] [Thread-27450] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:14:44.843 [DEBUG] [Thread-27450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:14:44.843 [DEBUG] [Thread-27450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:14:44.843 [DEBUG] [Thread-27450] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:14:44.843 [DEBUG] [Thread-27450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:14:44.843 [DEBUG] [Thread-27450] [transport.py] [_log()] Compression: none
2026-04-15T23:14:44.843 [DEBUG] [Thread-27450] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:14:44.861 [DEBUG] [Thread-27450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:14:44.861 [DEBUG] [Thread-27450] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:14:44.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:14:44.862 [DEBUG] [Thread-27450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:14:44.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:14:44.904 [DEBUG] [Thread-27450] [transport.py] [_log()] userauth is OK
2026-04-15T23:14:44.905 [DEBUG] [Thread-27450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:14:44.905 [DEBUG] [Thread-27450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:14:44.905 [DEBUG] [Thread-27450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:14:44.905 [DEBUG] [Thread-27450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:14:44.935 [INFO] [Thread-27450] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:14:44.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:14:45.566 [DEBUG] [Thread-27450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:14:45.566 [DEBUG] [Thread-27450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:14:45.567 [DEBUG] [Thread-27450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:14:45.607 [DEBUG] [Thread-27450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:14:45.607 [DEBUG] [Thread-27450] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:14:45.610 [DEBUG] [Thread-27450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:14:45.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:14:45.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:14:45.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:14:45.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:14:45.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:14:45.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:14:45.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:14:45.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:14:45.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:14:45.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.884851 -999.00   +9.30   5.12     82   +6.40 1 1 1 2 1     0    0 2.69 0.78 ZNESW 6.5 5.1 114.2 8.5 9.6 -24.4 9.5 -23.4 9.2 -21.1 9.5 -23.3
2026-04-15T23:14:45.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:14:45.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:14:45.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.884851
2026-04-15T23:14:45.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:14:45.635 [DEBUG] [Thread-27450] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:14:45.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:14:45.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:14:45.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:14:45.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:14:45.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:14:34', tmtdew=3.1417, humidity=80.6271, cloud=0.0, wind=10.7287, temperature=8.92744, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:14:11.126', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.02874999999999872, 0.008750000000000924, -0.09750000000000014, -0.06049999999999933, 0.011250000000000426, 0.0029999999999983373, 0.0007500000000000284, 0.01649999999999885, -0.036999999999999034, -0.021750000000000824, -0.0779999999999994, 0.009999999999999787, 0.045249999999999346, 0.014499999999998181, -0.0030000000000001137, 0.004249999999998977, -0.06049999999999933, -0.0010000000000012221, -0.014750000000001151, 0.018499999999999517, 0.04324999999999868, 0.012750000000000483, 0.015750000000000597, 0.03999999999999915, -0.06450000000000067, 0.0017499999999994742, -0.02149999999999963, 0.027000000000001023, 0.07900000000000063, 0.05400000000000027, 0.05349999999999966, -0.020250000000000767], zp_timestamp='2026-04-15T21:10:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:14:45.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:14:45.897 [DEBUG] [Thread-27453] [transport.py] [_log()] starting thread (client mode): 0xf13e3c70
2026-04-15T23:14:45.898 [DEBUG] [Thread-27453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:14:45.913 [DEBUG] [Thread-27453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:14:45.913 [INFO] [Thread-27453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:14:45.920 [DEBUG] [Thread-27453] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:14:45.921 [DEBUG] [Thread-27453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:14:45.921 [DEBUG] [Thread-27453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:14:45.921 [DEBUG] [Thread-27453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:14:45.921 [DEBUG] [Thread-27453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:14:45.921 [DEBUG] [Thread-27453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:14:45.921 [DEBUG] [Thread-27453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:14:45.921 [DEBUG] [Thread-27453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:14:45.921 [DEBUG] [Thread-27453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:14:45.921 [DEBUG] [Thread-27453] [transport.py] [_log()] client lang: <none>
2026-04-15T23:14:45.921 [DEBUG] [Thread-27453] [transport.py] [_log()] server lang: <none>
2026-04-15T23:14:45.921 [DEBUG] [Thread-27453] [transport.py] [_log()] kex follows: False
2026-04-15T23:14:45.921 [DEBUG] [Thread-27453] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:14:45.922 [DEBUG] [Thread-27453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:14:45.922 [DEBUG] [Thread-27453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:14:45.922 [DEBUG] [Thread-27453] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:14:45.922 [DEBUG] [Thread-27453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:14:45.922 [DEBUG] [Thread-27453] [transport.py] [_log()] Compression: none
2026-04-15T23:14:45.922 [DEBUG] [Thread-27453] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:14:45.978 [DEBUG] [Thread-27453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:14:45.979 [DEBUG] [Thread-27453] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:14:45.979 [DEBUG] [Thread-27453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:14:45.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:14:45.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:14:46.035 [DEBUG] [Thread-27453] [transport.py] [_log()] userauth is OK
2026-04-15T23:14:46.035 [DEBUG] [Thread-27453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:14:46.035 [DEBUG] [Thread-27453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:14:46.036 [DEBUG] [Thread-27453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:14:46.036 [DEBUG] [Thread-27453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:14:46.061 [INFO] [Thread-27453] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:14:46.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:14:46.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:14:46.924 [DEBUG] [Thread-27453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:14:46.924 [DEBUG] [Thread-27453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:14:46.972 [DEBUG] [Thread-27453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:14:46.972 [DEBUG] [Thread-27453] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:14:46.981 [DEBUG] [Thread-27453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:14:46.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:14:46.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')
2026-04-15T23:14: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
2026-04-15T23:14:47.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:14:47.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:14:47.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:14:47.016 [DEBUG] [Thread-27453] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:14:55.261 [DEBUG] [Thread-27455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:15:10.325 [DEBUG] [Thread-27456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:15:10.482 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:15:10.484 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:15:17.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:15:17.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:15:17.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
2026-04-15T23:15:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 15, 10), 3.46629, 78.8301, 0.0, 8.91144, 8.94736, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:15:18.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:15:10
2026-04-15T23:15:18.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:15:19.208 [DEBUG] [Thread-27457] [transport.py] [_log()] starting thread (client mode): 0xee9c0070
2026-04-15T23:15:19.208 [DEBUG] [Thread-27457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:15:19.227 [DEBUG] [Thread-27457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:15:19.227 [INFO] [Thread-27457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:15:19.230 [DEBUG] [Thread-27457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:15:19.230 [DEBUG] [Thread-27457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] client lang: <none>
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] server lang: <none>
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] kex follows: False
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] Compression: none
2026-04-15T23:15:19.231 [DEBUG] [Thread-27457] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:15:19.239 [DEBUG] [Thread-27457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:15:19.240 [DEBUG] [Thread-27457] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:15:19.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:15:19.240 [DEBUG] [Thread-27457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:15:19.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:15:19.241 [DEBUG] [Thread-27457] [transport.py] [_log()] userauth is OK
2026-04-15T23:15:19.241 [DEBUG] [Thread-27457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:15:19.241 [DEBUG] [Thread-27457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:15:19.241 [DEBUG] [Thread-27457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:15:19.242 [DEBUG] [Thread-27457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:15:19.259 [INFO] [Thread-27457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:15:19.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:15:19.867 [DEBUG] [Thread-27457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:15:19.867 [DEBUG] [Thread-27457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:15:19.868 [DEBUG] [Thread-27457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:15:19.908 [DEBUG] [Thread-27457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:15:19.908 [DEBUG] [Thread-27457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:15:19.910 [DEBUG] [Thread-27457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:15:19.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:15:19.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:15:19.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:15:19.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:15:19.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:15:20.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:15:20.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:15:20.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:15:20.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:15:20.232 [DEBUG] [Thread-27457] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:15:20.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.885198 -999.00   +9.40   6.69     81   +6.40 1 1 1 2 1     0    0 2.76 1.93 ZNESW 7.1 6.7 119.0 11.1 9.7 -24.3 9.5 -23.4 9.2 -21.2 9.5 -23.3
2026-04-15T23:15:20.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:15:20.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:15:20.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.885198
2026-04-15T23:15:20.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:15:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:15:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:15:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:15:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:15:20.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:15:10', tmtdew=3.46629, humidity=78.8301, cloud=0.0, wind=8.91144, temperature=8.94736, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:14:41.107', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.02874999999999872, 0.008750000000000924, -0.09750000000000014, -0.06049999999999933, 0.011250000000000426, 0.0029999999999983373, 0.0007500000000000284, 0.01649999999999885, -0.036999999999999034, -0.021750000000000824, -0.0779999999999994, 0.009999999999999787, 0.045249999999999346, 0.014499999999998181, -0.0030000000000001137, 0.004249999999998977, -0.06049999999999933, -0.0010000000000012221, -0.014750000000001151, 0.018499999999999517, 0.04324999999999868, 0.012750000000000483, 0.015750000000000597, 0.03999999999999915, -0.06450000000000067, 0.0017499999999994742, -0.02149999999999963, 0.027000000000001023, 0.07900000000000063, 0.05400000000000027, 0.05349999999999966, -0.020250000000000767], zp_timestamp='2026-04-15T21:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:15:20.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:15:20.490 [DEBUG] [Thread-27460] [transport.py] [_log()] starting thread (client mode): 0xee9c3340
2026-04-15T23:15:20.491 [DEBUG] [Thread-27460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:15:20.506 [DEBUG] [Thread-27460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:15:20.506 [INFO] [Thread-27460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:15:20.513 [DEBUG] [Thread-27460] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:15:20.513 [DEBUG] [Thread-27460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:15:20.513 [DEBUG] [Thread-27460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:15:20.514 [DEBUG] [Thread-27460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:15:20.514 [DEBUG] [Thread-27460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:15:20.514 [DEBUG] [Thread-27460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:15:20.514 [DEBUG] [Thread-27460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:15:20.514 [DEBUG] [Thread-27460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:15:20.514 [DEBUG] [Thread-27460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:15:20.514 [DEBUG] [Thread-27460] [transport.py] [_log()] client lang: <none>
2026-04-15T23:15:20.514 [DEBUG] [Thread-27460] [transport.py] [_log()] server lang: <none>
2026-04-15T23:15:20.514 [DEBUG] [Thread-27460] [transport.py] [_log()] kex follows: False
2026-04-15T23:15:20.514 [DEBUG] [Thread-27460] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:15:20.514 [DEBUG] [Thread-27460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:15:20.515 [DEBUG] [Thread-27460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:15:20.515 [DEBUG] [Thread-27460] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:15:20.515 [DEBUG] [Thread-27460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:15:20.515 [DEBUG] [Thread-27460] [transport.py] [_log()] Compression: none
2026-04-15T23:15:20.515 [DEBUG] [Thread-27460] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:15:20.570 [DEBUG] [Thread-27460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:15:20.571 [DEBUG] [Thread-27460] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:15:20.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:15:20.571 [DEBUG] [Thread-27460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:15:20.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:15:20.627 [DEBUG] [Thread-27460] [transport.py] [_log()] userauth is OK
2026-04-15T23:15:20.628 [DEBUG] [Thread-27460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:15:20.628 [DEBUG] [Thread-27460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:15:20.628 [DEBUG] [Thread-27460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:15:20.628 [DEBUG] [Thread-27460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:15:20.656 [INFO] [Thread-27460] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:15:20.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:15:20.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:15:21.469 [DEBUG] [Thread-27460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:15:21.469 [DEBUG] [Thread-27460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:15:21.517 [DEBUG] [Thread-27460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:15:21.517 [DEBUG] [Thread-27460] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:15:21.527 [DEBUG] [Thread-27460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:15:21.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:15: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')
2026-04-15T23:15:21.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
2026-04-15T23:15:21.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:15:21.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:15:21.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:15:21.568 [DEBUG] [Thread-27460] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:15:25.355 [DEBUG] [Thread-27462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:15:34.165 [DEBUG] [Thread-27463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:15:40.406 [DEBUG] [Thread-27464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:15:51.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:15:51.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:15:51.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
2026-04-15T23:15:52.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 15, 45), 3.11636, 80.7598, 0.0, 10.764, 8.86108, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:15:52.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:15:45
2026-04-15T23:15:53.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:15:53.703 [DEBUG] [Thread-27465] [transport.py] [_log()] starting thread (client mode): 0xee9c2980
2026-04-15T23:15:53.703 [DEBUG] [Thread-27465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:15:53.714 [DEBUG] [Thread-27465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:15:53.714 [INFO] [Thread-27465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:15:53.716 [DEBUG] [Thread-27465] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:15:53.716 [DEBUG] [Thread-27465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:15:53.716 [DEBUG] [Thread-27465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:15:53.716 [DEBUG] [Thread-27465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:15:53.716 [DEBUG] [Thread-27465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:15:53.716 [DEBUG] [Thread-27465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:15:53.716 [DEBUG] [Thread-27465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:15:53.717 [DEBUG] [Thread-27465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:15:53.717 [DEBUG] [Thread-27465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:15:53.717 [DEBUG] [Thread-27465] [transport.py] [_log()] client lang: <none>
2026-04-15T23:15:53.717 [DEBUG] [Thread-27465] [transport.py] [_log()] server lang: <none>
2026-04-15T23:15:53.717 [DEBUG] [Thread-27465] [transport.py] [_log()] kex follows: False
2026-04-15T23:15:53.717 [DEBUG] [Thread-27465] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:15:53.717 [DEBUG] [Thread-27465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:15:53.717 [DEBUG] [Thread-27465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:15:53.717 [DEBUG] [Thread-27465] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:15:53.717 [DEBUG] [Thread-27465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:15:53.717 [DEBUG] [Thread-27465] [transport.py] [_log()] Compression: none
2026-04-15T23:15:53.717 [DEBUG] [Thread-27465] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:15:53.729 [DEBUG] [Thread-27465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:15:53.729 [DEBUG] [Thread-27465] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:15:53.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:15:53.730 [DEBUG] [Thread-27465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:15:53.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:15:53.731 [DEBUG] [Thread-27465] [transport.py] [_log()] userauth is OK
2026-04-15T23:15:53.731 [DEBUG] [Thread-27465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:15:53.731 [DEBUG] [Thread-27465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:15:53.731 [DEBUG] [Thread-27465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:15:53.731 [DEBUG] [Thread-27465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:15:53.748 [INFO] [Thread-27465] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:15:53.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:15:54.322 [DEBUG] [Thread-27465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:15:54.323 [DEBUG] [Thread-27465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:15:54.323 [DEBUG] [Thread-27465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:15:54.363 [DEBUG] [Thread-27465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:15:54.363 [DEBUG] [Thread-27465] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:15:54.369 [DEBUG] [Thread-27465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:15:54.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:15:54.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:15:54.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:15:54.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:15:54.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:15:54.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:15:54.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:15:54.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:15:54.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:15:54.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.885893 -999.00   +9.40   6.49     81   +6.40 1 1 1 2 1     0    0 2.81 4.19 ZNESW 7.8 6.5 128.6 10.8 9.7 -24.5 9.5 -23.3 9.2 -21.2 9.5 -23.2
2026-04-15T23:15:54.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:15:54.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:15:54.390 [DEBUG] [Thread-27465] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:15:54.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.885893
2026-04-15T23:15:54.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:15:54.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:15:54.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:15:54.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:15:54.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:15:54.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:15:45', tmtdew=3.11636, humidity=80.7598, cloud=0.0, wind=10.764, temperature=8.86108, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:15:41.155', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.02874999999999872, 0.008750000000000924, -0.09750000000000014, -0.06049999999999933, 0.011250000000000426, 0.0029999999999983373, 0.0007500000000000284, 0.01649999999999885, -0.036999999999999034, -0.021750000000000824, -0.0779999999999994, 0.009999999999999787, 0.045249999999999346, 0.014499999999998181, -0.0030000000000001137, 0.004249999999998977, -0.06049999999999933, -0.0010000000000012221, -0.014750000000001151, 0.018499999999999517, 0.04324999999999868, 0.012750000000000483, 0.015750000000000597, 0.03999999999999915, -0.06450000000000067, 0.0017499999999994742, -0.02149999999999963, 0.027000000000001023, 0.07900000000000063, 0.05400000000000027, 0.05349999999999966, -0.020250000000000767], zp_timestamp='2026-04-15T21:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:15:54.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:15:54.644 [DEBUG] [Thread-27468] [transport.py] [_log()] starting thread (client mode): 0xf1337580
2026-04-15T23:15:54.644 [DEBUG] [Thread-27468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:15:54.660 [DEBUG] [Thread-27468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:15:54.660 [INFO] [Thread-27468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:15:54.669 [DEBUG] [Thread-27468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:15:54.670 [DEBUG] [Thread-27468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:15:54.670 [DEBUG] [Thread-27468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:15:54.670 [DEBUG] [Thread-27468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:15:54.670 [DEBUG] [Thread-27468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:15:54.670 [DEBUG] [Thread-27468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:15:54.670 [DEBUG] [Thread-27468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:15:54.670 [DEBUG] [Thread-27468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:15:54.670 [DEBUG] [Thread-27468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:15:54.670 [DEBUG] [Thread-27468] [transport.py] [_log()] client lang: <none>
2026-04-15T23:15:54.670 [DEBUG] [Thread-27468] [transport.py] [_log()] server lang: <none>
2026-04-15T23:15:54.670 [DEBUG] [Thread-27468] [transport.py] [_log()] kex follows: False
2026-04-15T23:15:54.670 [DEBUG] [Thread-27468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:15:54.671 [DEBUG] [Thread-27468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:15:54.671 [DEBUG] [Thread-27468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:15:54.671 [DEBUG] [Thread-27468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:15:54.671 [DEBUG] [Thread-27468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:15:54.671 [DEBUG] [Thread-27468] [transport.py] [_log()] Compression: none
2026-04-15T23:15:54.671 [DEBUG] [Thread-27468] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:15:54.728 [DEBUG] [Thread-27468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:15:54.728 [DEBUG] [Thread-27468] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:15:54.729 [DEBUG] [Thread-27468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:15:54.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:15:54.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:15:54.791 [DEBUG] [Thread-27468] [transport.py] [_log()] userauth is OK
2026-04-15T23:15:54.791 [DEBUG] [Thread-27468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:15:54.792 [DEBUG] [Thread-27468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:15:54.792 [DEBUG] [Thread-27468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:15:54.792 [DEBUG] [Thread-27468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:15:54.816 [INFO] [Thread-27468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:15:54.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:15:54.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:15:55.438 [DEBUG] [Thread-27470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:15:55.703 [DEBUG] [Thread-27468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:15:55.703 [DEBUG] [Thread-27468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:15:55.753 [DEBUG] [Thread-27468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:15:55.754 [DEBUG] [Thread-27468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:15:55.766 [DEBUG] [Thread-27468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:15:55.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:15:55.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')
2026-04-15T23:15:55.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
2026-04-15T23:15:55.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:15:55.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:15:55.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:15:55.811 [DEBUG] [Thread-27468] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:16:10.480 [DEBUG] [Thread-27471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:16:10.686 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:16:10.688 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:16:25.508 [DEBUG] [Thread-27472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:16:25.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:16:25.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:16:25.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:16:27.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 15, 45), 3.11636, 80.7598, 0.0, 10.764, 8.86108, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:16:27.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:15:45
2026-04-15T23:16:27.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:16:27.983 [DEBUG] [Thread-27473] [transport.py] [_log()] starting thread (client mode): 0xee992f50
2026-04-15T23:16:27.984 [DEBUG] [Thread-27473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:16:28.002 [DEBUG] [Thread-27473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:16:28.002 [INFO] [Thread-27473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:16:28.004 [DEBUG] [Thread-27473] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:16:28.004 [DEBUG] [Thread-27473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:16:28.004 [DEBUG] [Thread-27473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:16:28.004 [DEBUG] [Thread-27473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:16:28.004 [DEBUG] [Thread-27473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:16:28.004 [DEBUG] [Thread-27473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:16:28.004 [DEBUG] [Thread-27473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:16:28.005 [DEBUG] [Thread-27473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:16:28.005 [DEBUG] [Thread-27473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:16:28.005 [DEBUG] [Thread-27473] [transport.py] [_log()] client lang: <none>
2026-04-15T23:16:28.005 [DEBUG] [Thread-27473] [transport.py] [_log()] server lang: <none>
2026-04-15T23:16:28.005 [DEBUG] [Thread-27473] [transport.py] [_log()] kex follows: False
2026-04-15T23:16:28.005 [DEBUG] [Thread-27473] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:16:28.005 [DEBUG] [Thread-27473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:16:28.005 [DEBUG] [Thread-27473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:16:28.005 [DEBUG] [Thread-27473] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:16:28.005 [DEBUG] [Thread-27473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:16:28.005 [DEBUG] [Thread-27473] [transport.py] [_log()] Compression: none
2026-04-15T23:16:28.006 [DEBUG] [Thread-27473] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:16:28.018 [DEBUG] [Thread-27473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:16:28.019 [DEBUG] [Thread-27473] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:16:28.019 [DEBUG] [Thread-27473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:16:28.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:16:28.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:16:28.021 [DEBUG] [Thread-27473] [transport.py] [_log()] userauth is OK
2026-04-15T23:16:28.021 [DEBUG] [Thread-27473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:16:28.021 [DEBUG] [Thread-27473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:16:28.021 [DEBUG] [Thread-27473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:16:28.021 [DEBUG] [Thread-27473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:16:28.040 [INFO] [Thread-27473] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:16:28.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:16:28.667 [DEBUG] [Thread-27473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:16:28.667 [DEBUG] [Thread-27473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:16:28.668 [DEBUG] [Thread-27473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:16:28.708 [DEBUG] [Thread-27473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:16:28.708 [DEBUG] [Thread-27473] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:16:28.710 [DEBUG] [Thread-27473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:16:28.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:16:28.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:16:28.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:16:28.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:16:28.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:16:28.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:16:28.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:16:28.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:16:28.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:16:28.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.886240 -999.00   +9.40   7.24     81   +6.40 1 1 1 2 1     0    0 2.82 4.75 ZNESW 8.8 7.2 117.8 7.7 9.7 -24.6 9.5 -23.5 9.2 -21.3 9.6 -23.2
2026-04-15T23:16:28.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:16:28.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:16:28.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.886240
2026-04-15T23:16:28.735 [DEBUG] [Thread-27473] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:16:28.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:16:28.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:16:28.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:16:28.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:16:28.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:16:28.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:15:45', tmtdew=3.11636, humidity=80.7598, cloud=0.0, wind=10.764, temperature=8.86108, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:16:11.136', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.02874999999999872, 0.008750000000000924, -0.09750000000000014, -0.06049999999999933, 0.011250000000000426, 0.0029999999999983373, 0.0007500000000000284, 0.01649999999999885, -0.036999999999999034, -0.021750000000000824, -0.0779999999999994, 0.009999999999999787, 0.045249999999999346, 0.014499999999998181, -0.0030000000000001137, 0.004249999999998977, -0.06049999999999933, -0.0010000000000012221, -0.014750000000001151, 0.018499999999999517, 0.04324999999999868, 0.012750000000000483, 0.015750000000000597, 0.03999999999999915, -0.06450000000000067, 0.0017499999999994742, -0.02149999999999963, 0.027000000000001023, 0.07900000000000063, 0.05400000000000027, 0.05349999999999966, -0.020250000000000767], zp_timestamp='2026-04-15T21:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:16:28.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:16:28.971 [DEBUG] [Thread-27476] [transport.py] [_log()] starting thread (client mode): 0xee9c7460
2026-04-15T23:16:28.971 [DEBUG] [Thread-27476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:16:28.987 [DEBUG] [Thread-27476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:16:28.987 [INFO] [Thread-27476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:16:28.994 [DEBUG] [Thread-27476] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:16:28.994 [DEBUG] [Thread-27476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:16:28.994 [DEBUG] [Thread-27476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:16:28.995 [DEBUG] [Thread-27476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:16:28.995 [DEBUG] [Thread-27476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:16:28.995 [DEBUG] [Thread-27476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:16:28.995 [DEBUG] [Thread-27476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:16:28.995 [DEBUG] [Thread-27476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:16:28.995 [DEBUG] [Thread-27476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:16:28.995 [DEBUG] [Thread-27476] [transport.py] [_log()] client lang: <none>
2026-04-15T23:16:28.995 [DEBUG] [Thread-27476] [transport.py] [_log()] server lang: <none>
2026-04-15T23:16:28.995 [DEBUG] [Thread-27476] [transport.py] [_log()] kex follows: False
2026-04-15T23:16:28.995 [DEBUG] [Thread-27476] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:16:28.995 [DEBUG] [Thread-27476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:16:28.995 [DEBUG] [Thread-27476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:16:28.996 [DEBUG] [Thread-27476] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:16:28.996 [DEBUG] [Thread-27476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:16:28.996 [DEBUG] [Thread-27476] [transport.py] [_log()] Compression: none
2026-04-15T23:16:28.996 [DEBUG] [Thread-27476] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:16:29.054 [DEBUG] [Thread-27476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:16:29.055 [DEBUG] [Thread-27476] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:16:29.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:16:29.055 [DEBUG] [Thread-27476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:16:29.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:16:29.112 [DEBUG] [Thread-27476] [transport.py] [_log()] userauth is OK
2026-04-15T23:16:29.112 [DEBUG] [Thread-27476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:16:29.112 [DEBUG] [Thread-27476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:16:29.112 [DEBUG] [Thread-27476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:16:29.112 [DEBUG] [Thread-27476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:16:29.137 [INFO] [Thread-27476] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:16:29.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:16:29.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:16:29.920 [DEBUG] [Thread-27476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:16:29.920 [DEBUG] [Thread-27476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:16:29.968 [DEBUG] [Thread-27476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:16:29.968 [DEBUG] [Thread-27476] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:16:29.977 [DEBUG] [Thread-27476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:16:29.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:16:29.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')
2026-04-15T23:16:29.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
2026-04-15T23:16:30.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:16:30.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:16:30.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:16:30.013 [DEBUG] [Thread-27476] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:16:34.336 [DEBUG] [Thread-27478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:16:40.539 [DEBUG] [Thread-27479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:16:55.580 [DEBUG] [Thread-27480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:17:00.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:17:00.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:17:00.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:17:01.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 16, 21), 3.40146, 79.4131, 0.0, 8.87616, 8.89736, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:17:01.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:16:21
2026-04-15T23:17:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:17:02.197 [DEBUG] [Thread-27481] [transport.py] [_log()] starting thread (client mode): 0xee9c1fc0
2026-04-15T23:17:02.197 [DEBUG] [Thread-27481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:17:02.216 [DEBUG] [Thread-27481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:17:02.216 [INFO] [Thread-27481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:17:02.220 [DEBUG] [Thread-27481] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:17:02.220 [DEBUG] [Thread-27481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:17:02.220 [DEBUG] [Thread-27481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:17:02.220 [DEBUG] [Thread-27481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:17:02.220 [DEBUG] [Thread-27481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:17:02.220 [DEBUG] [Thread-27481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:17:02.220 [DEBUG] [Thread-27481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:17:02.220 [DEBUG] [Thread-27481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:17:02.220 [DEBUG] [Thread-27481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:17:02.220 [DEBUG] [Thread-27481] [transport.py] [_log()] client lang: <none>
2026-04-15T23:17:02.220 [DEBUG] [Thread-27481] [transport.py] [_log()] server lang: <none>
2026-04-15T23:17:02.221 [DEBUG] [Thread-27481] [transport.py] [_log()] kex follows: False
2026-04-15T23:17:02.221 [DEBUG] [Thread-27481] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:17:02.221 [DEBUG] [Thread-27481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:17:02.221 [DEBUG] [Thread-27481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:17:02.221 [DEBUG] [Thread-27481] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:17:02.221 [DEBUG] [Thread-27481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:17:02.221 [DEBUG] [Thread-27481] [transport.py] [_log()] Compression: none
2026-04-15T23:17:02.221 [DEBUG] [Thread-27481] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:17:02.233 [DEBUG] [Thread-27481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:17:02.233 [DEBUG] [Thread-27481] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:17:02.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:17:02.234 [DEBUG] [Thread-27481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:17:02.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:17:02.235 [DEBUG] [Thread-27481] [transport.py] [_log()] userauth is OK
2026-04-15T23:17:02.235 [DEBUG] [Thread-27481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:17:02.235 [DEBUG] [Thread-27481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:17:02.236 [DEBUG] [Thread-27481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:17:02.236 [DEBUG] [Thread-27481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:17:02.259 [INFO] [Thread-27481] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:17:02.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:17:02.889 [DEBUG] [Thread-27481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:17:02.889 [DEBUG] [Thread-27481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:17:02.890 [DEBUG] [Thread-27481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:17:02.930 [DEBUG] [Thread-27481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:17:02.930 [DEBUG] [Thread-27481] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:17:02.933 [DEBUG] [Thread-27481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:17:02.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:17:02.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:17:02.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:17:02.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:17:02.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:17:02.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:17:02.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:17:02.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:17:02.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:17:02.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.886587 -999.00   +9.40   6.70     81   +6.40 1 1 1 2 1     0    0 2.82 5.18 ZNESW 6.6 6.7 105.2 10.0 9.7 -24.6 9.6 -23.4 9.2 -21.2 9.5 -23.2
2026-04-15T23:17:02.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:17:02.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:17:02.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.886587
2026-04-15T23:17:02.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:17:02.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:17:02.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:17:02.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:17:02.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:17:02.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:16:21', tmtdew=3.40146, humidity=79.4131, cloud=0.0, wind=8.87616, temperature=8.89736, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:16:41.117', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.02874999999999872, 0.008750000000000924, -0.09750000000000014, -0.06049999999999933, 0.011250000000000426, 0.0029999999999983373, 0.0007500000000000284, 0.01649999999999885, -0.036999999999999034, -0.021750000000000824, -0.0779999999999994, 0.009999999999999787, 0.045249999999999346, 0.014499999999998181, -0.0030000000000001137, 0.004249999999998977, -0.06049999999999933, -0.0010000000000012221, -0.014750000000001151, 0.018499999999999517, 0.04324999999999868, 0.012750000000000483, 0.015750000000000597, 0.03999999999999915, -0.06450000000000067, 0.0017499999999994742, -0.02149999999999963, 0.027000000000001023, 0.07900000000000063, 0.05400000000000027, 0.05349999999999966, -0.020250000000000767], zp_timestamp='2026-04-15T21:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:17:02.954 [DEBUG] [Thread-27481] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:17:03.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:17:03.196 [DEBUG] [Thread-27484] [transport.py] [_log()] starting thread (client mode): 0xf13e2cb0
2026-04-15T23:17:03.197 [DEBUG] [Thread-27484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:17:03.211 [DEBUG] [Thread-27484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:17:03.211 [INFO] [Thread-27484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:17:03.218 [DEBUG] [Thread-27484] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:17:03.218 [DEBUG] [Thread-27484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:17:03.219 [DEBUG] [Thread-27484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:17:03.219 [DEBUG] [Thread-27484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:17:03.219 [DEBUG] [Thread-27484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:17:03.219 [DEBUG] [Thread-27484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:17:03.219 [DEBUG] [Thread-27484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:17:03.219 [DEBUG] [Thread-27484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:17:03.219 [DEBUG] [Thread-27484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:17:03.219 [DEBUG] [Thread-27484] [transport.py] [_log()] client lang: <none>
2026-04-15T23:17:03.219 [DEBUG] [Thread-27484] [transport.py] [_log()] server lang: <none>
2026-04-15T23:17:03.219 [DEBUG] [Thread-27484] [transport.py] [_log()] kex follows: False
2026-04-15T23:17:03.219 [DEBUG] [Thread-27484] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:17:03.219 [DEBUG] [Thread-27484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:17:03.220 [DEBUG] [Thread-27484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:17:03.220 [DEBUG] [Thread-27484] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:17:03.220 [DEBUG] [Thread-27484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:17:03.220 [DEBUG] [Thread-27484] [transport.py] [_log()] Compression: none
2026-04-15T23:17:03.220 [DEBUG] [Thread-27484] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:17:03.274 [DEBUG] [Thread-27484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:17:03.274 [DEBUG] [Thread-27484] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:17:03.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:17:03.275 [DEBUG] [Thread-27484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:17:03.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:17:03.331 [DEBUG] [Thread-27484] [transport.py] [_log()] userauth is OK
2026-04-15T23:17:03.332 [DEBUG] [Thread-27484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:17:03.332 [DEBUG] [Thread-27484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:17:03.332 [DEBUG] [Thread-27484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:17:03.332 [DEBUG] [Thread-27484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:17:03.367 [INFO] [Thread-27484] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:17:03.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:17:03.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:17:04.178 [DEBUG] [Thread-27484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:17:04.178 [DEBUG] [Thread-27484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:17:04.226 [DEBUG] [Thread-27484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:17:04.226 [DEBUG] [Thread-27484] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:17:04.235 [DEBUG] [Thread-27484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:17:04.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:17:04.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')
2026-04-15T23:17:04.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
2026-04-15T23:17:04.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:17:04.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:17:04.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:17:04.271 [DEBUG] [Thread-27484] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:17:10.609 [DEBUG] [Thread-27486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:17:10.889 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:17:10.891 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:17:25.656 [DEBUG] [Thread-27487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:17:34.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:17:34.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:17:34.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
2026-04-15T23:17:34.497 [DEBUG] [Thread-27488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:17:35.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 16, 56), 3.39298, 79.4628, 0.0, 8.77032, 8.91395, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:17:35.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:16:56
2026-04-15T23:17:36.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:17:36.434 [DEBUG] [Thread-27489] [transport.py] [_log()] starting thread (client mode): 0xee905750
2026-04-15T23:17:36.435 [DEBUG] [Thread-27489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:17:36.455 [DEBUG] [Thread-27489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:17:36.455 [INFO] [Thread-27489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:17:36.458 [DEBUG] [Thread-27489] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:17:36.458 [DEBUG] [Thread-27489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:17:36.458 [DEBUG] [Thread-27489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:17:36.458 [DEBUG] [Thread-27489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:17:36.458 [DEBUG] [Thread-27489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:17:36.458 [DEBUG] [Thread-27489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:17:36.458 [DEBUG] [Thread-27489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:17:36.458 [DEBUG] [Thread-27489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:17:36.458 [DEBUG] [Thread-27489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:17:36.458 [DEBUG] [Thread-27489] [transport.py] [_log()] client lang: <none>
2026-04-15T23:17:36.458 [DEBUG] [Thread-27489] [transport.py] [_log()] server lang: <none>
2026-04-15T23:17:36.458 [DEBUG] [Thread-27489] [transport.py] [_log()] kex follows: False
2026-04-15T23:17:36.458 [DEBUG] [Thread-27489] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:17:36.458 [DEBUG] [Thread-27489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:17:36.458 [DEBUG] [Thread-27489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:17:36.459 [DEBUG] [Thread-27489] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:17:36.459 [DEBUG] [Thread-27489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:17:36.459 [DEBUG] [Thread-27489] [transport.py] [_log()] Compression: none
2026-04-15T23:17:36.459 [DEBUG] [Thread-27489] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:17:36.477 [DEBUG] [Thread-27489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:17:36.477 [DEBUG] [Thread-27489] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:17:36.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:17:36.478 [DEBUG] [Thread-27489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:17:36.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:17:36.479 [DEBUG] [Thread-27489] [transport.py] [_log()] userauth is OK
2026-04-15T23:17:36.479 [DEBUG] [Thread-27489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:17:36.479 [DEBUG] [Thread-27489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:17:36.479 [DEBUG] [Thread-27489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:17:36.479 [DEBUG] [Thread-27489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:17:36.492 [INFO] [Thread-27489] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:17:36.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:17:37.071 [DEBUG] [Thread-27489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:17:37.071 [DEBUG] [Thread-27489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:17:37.071 [DEBUG] [Thread-27489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:17:37.112 [DEBUG] [Thread-27489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:17:37.112 [DEBUG] [Thread-27489] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:17:37.114 [DEBUG] [Thread-27489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:17:37.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:17:37.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:17:37.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:17:37.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:17:37.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:17:37.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:17:37.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:17:37.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:17:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:17:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.886587 -999.00   +9.40   6.70     81   +6.40 1 1 1 2 1     0    0 2.82 5.18 ZNESW 6.6 6.7 105.2 10.0 9.7 -24.6 9.6 -23.4 9.2 -21.2 9.5 -23.2
2026-04-15T23:17:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:17:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:17:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.886587
2026-04-15T23:17:37.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:17:37.139 [DEBUG] [Thread-27489] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:17:37.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:17:37.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:17:37.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:17:37.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:17:37.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:16:56', tmtdew=3.39298, humidity=79.4628, cloud=0.0, wind=8.77032, temperature=8.91395, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:16:41.117', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.02874999999999872, 0.008750000000000924, -0.09750000000000014, -0.06049999999999933, 0.011250000000000426, 0.0029999999999983373, 0.0007500000000000284, 0.01649999999999885, -0.036999999999999034, -0.021750000000000824, -0.0779999999999994, 0.009999999999999787, 0.045249999999999346, 0.014499999999998181, -0.0030000000000001137, 0.004249999999998977, -0.06049999999999933, -0.0010000000000012221, -0.014750000000001151, 0.018499999999999517, 0.04324999999999868, 0.012750000000000483, 0.015750000000000597, 0.03999999999999915, -0.06450000000000067, 0.0017499999999994742, -0.02149999999999963, 0.027000000000001023, 0.07900000000000063, 0.05400000000000027, 0.05349999999999966, -0.020250000000000767], zp_timestamp='2026-04-15T21:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:17:37.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:17:37.395 [DEBUG] [Thread-27492] [transport.py] [_log()] starting thread (client mode): 0xee904df0
2026-04-15T23:17:37.396 [DEBUG] [Thread-27492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:17:37.410 [DEBUG] [Thread-27492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:17:37.410 [INFO] [Thread-27492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:17:37.418 [DEBUG] [Thread-27492] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:17:37.418 [DEBUG] [Thread-27492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:17:37.418 [DEBUG] [Thread-27492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:17:37.418 [DEBUG] [Thread-27492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:17:37.418 [DEBUG] [Thread-27492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:17:37.418 [DEBUG] [Thread-27492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:17:37.418 [DEBUG] [Thread-27492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:17:37.418 [DEBUG] [Thread-27492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:17:37.418 [DEBUG] [Thread-27492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:17:37.418 [DEBUG] [Thread-27492] [transport.py] [_log()] client lang: <none>
2026-04-15T23:17:37.418 [DEBUG] [Thread-27492] [transport.py] [_log()] server lang: <none>
2026-04-15T23:17:37.418 [DEBUG] [Thread-27492] [transport.py] [_log()] kex follows: False
2026-04-15T23:17:37.419 [DEBUG] [Thread-27492] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:17:37.419 [DEBUG] [Thread-27492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:17:37.419 [DEBUG] [Thread-27492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:17:37.419 [DEBUG] [Thread-27492] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:17:37.419 [DEBUG] [Thread-27492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:17:37.419 [DEBUG] [Thread-27492] [transport.py] [_log()] Compression: none
2026-04-15T23:17:37.419 [DEBUG] [Thread-27492] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:17:37.474 [DEBUG] [Thread-27492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:17:37.475 [DEBUG] [Thread-27492] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:17:37.475 [DEBUG] [Thread-27492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:17:37.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:17:37.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:17:37.540 [DEBUG] [Thread-27492] [transport.py] [_log()] userauth is OK
2026-04-15T23:17:37.541 [DEBUG] [Thread-27492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:17:37.541 [DEBUG] [Thread-27492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:17:37.541 [DEBUG] [Thread-27492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:17:37.541 [DEBUG] [Thread-27492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:17:37.558 [INFO] [Thread-27492] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:17:37.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:17:37.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:17:38.373 [DEBUG] [Thread-27492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:17:38.374 [DEBUG] [Thread-27492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:17:38.421 [DEBUG] [Thread-27492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:17:38.421 [DEBUG] [Thread-27492] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:17:38.430 [DEBUG] [Thread-27492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:17:38.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:17:38.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')
2026-04-15T23:17:38.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
2026-04-15T23:17:38.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:17:38.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:17:38.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:17:38.465 [DEBUG] [Thread-27492] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:17:40.686 [DEBUG] [Thread-27494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:17:55.722 [DEBUG] [Thread-27495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:18:08.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:18:08.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:18:08.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
2026-04-15T23:18:09.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 17, 32), 3.3841, 79.5126, 0.0, 9.17604, 8.91395, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:18:09.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:17:32
2026-04-15T23:18:10.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:18:10.623 [DEBUG] [Thread-27496] [transport.py] [_log()] starting thread (client mode): 0xf1336a70
2026-04-15T23:18:10.623 [DEBUG] [Thread-27496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:18:10.643 [DEBUG] [Thread-27496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:18:10.643 [INFO] [Thread-27496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:18:10.646 [DEBUG] [Thread-27496] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:18:10.646 [DEBUG] [Thread-27496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:18:10.646 [DEBUG] [Thread-27496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:18:10.646 [DEBUG] [Thread-27496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:18:10.646 [DEBUG] [Thread-27496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:18:10.646 [DEBUG] [Thread-27496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:18:10.646 [DEBUG] [Thread-27496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:18:10.647 [DEBUG] [Thread-27496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:18:10.647 [DEBUG] [Thread-27496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:18:10.647 [DEBUG] [Thread-27496] [transport.py] [_log()] client lang: <none>
2026-04-15T23:18:10.647 [DEBUG] [Thread-27496] [transport.py] [_log()] server lang: <none>
2026-04-15T23:18:10.647 [DEBUG] [Thread-27496] [transport.py] [_log()] kex follows: False
2026-04-15T23:18:10.647 [DEBUG] [Thread-27496] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:18:10.647 [DEBUG] [Thread-27496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:18:10.647 [DEBUG] [Thread-27496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:18:10.647 [DEBUG] [Thread-27496] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:18:10.647 [DEBUG] [Thread-27496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:18:10.647 [DEBUG] [Thread-27496] [transport.py] [_log()] Compression: none
2026-04-15T23:18:10.648 [DEBUG] [Thread-27496] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:18:10.663 [DEBUG] [Thread-27496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:18:10.663 [DEBUG] [Thread-27496] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:18:10.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:18:10.664 [DEBUG] [Thread-27496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:18:10.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:18:10.665 [DEBUG] [Thread-27496] [transport.py] [_log()] userauth is OK
2026-04-15T23:18:10.665 [DEBUG] [Thread-27496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:18:10.665 [DEBUG] [Thread-27496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:18:10.666 [DEBUG] [Thread-27496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:18:10.666 [DEBUG] [Thread-27496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:18:10.701 [INFO] [Thread-27496] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:18:10.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:18:10.752 [DEBUG] [Thread-27498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:18:11.092 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:18:11.094 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:18:11.527 [DEBUG] [Thread-27496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:18:11.527 [DEBUG] [Thread-27496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:18:11.528 [DEBUG] [Thread-27496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:18:11.568 [DEBUG] [Thread-27496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:18:11.568 [DEBUG] [Thread-27496] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:18:11.571 [DEBUG] [Thread-27496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:18:11.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:18:11.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:18:11.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:18:11.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:18:11.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:18:11.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:18:11.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:18:11.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:18:11.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:18:11.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.886934 -999.00   +9.50   6.65     81   +6.50 1 1 1 2 1     0    0 2.85 5.67 ZNESW 7.1 6.7 113.6 10.6 9.7 -24.6 9.6 -23.5 9.3 -21.1 9.5 -23.3
2026-04-15T23:18:11.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:18:11.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:18:11.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.886934
2026-04-15T23:18:11.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:18:11.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:18:11.596 [DEBUG] [Thread-27496] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:18:11.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:18:11.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:18:11.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:18:11.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:17:32', tmtdew=3.3841, humidity=79.5126, cloud=0.0, wind=9.17604, temperature=8.91395, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:17:11.098', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.03575000000000017, -0.02674999999999983, -0.09250000000000114, -0.059499999999999886, -0.02874999999999872, -0.04600000000000115, -0.03324999999999889, 0.0024999999999995026, -0.08399999999999963, -0.028750000000000497, -0.09500000000000064, -0.0024999999999995026, 0.05424999999999969, -0.009000000000000341, -0.009500000000000952, -0.042749999999999844, -0.07800000000000118, -0.0015000000000018332, -0.012250000000001648, -0.0030000000000001137, 0.01774999999999949, -0.04374999999999929, 0.010749999999999815, 0.04299999999999926, -0.05799999999999983, 0.00575000000000081, -0.016500000000000625, -0.010999999999999233, 0.0470000000000006, 0.023500000000002075, 0.01150000000000162, -0.06425000000000125], zp_timestamp='2026-04-15T21:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:18:11.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:18:11.850 [DEBUG] [Thread-27500] [transport.py] [_log()] starting thread (client mode): 0xee9061a0
2026-04-15T23:18:11.851 [DEBUG] [Thread-27500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:18:11.865 [DEBUG] [Thread-27500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:18:11.865 [INFO] [Thread-27500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:18:11.875 [DEBUG] [Thread-27500] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:18:11.875 [DEBUG] [Thread-27500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:18:11.875 [DEBUG] [Thread-27500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:18:11.875 [DEBUG] [Thread-27500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:18:11.875 [DEBUG] [Thread-27500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:18:11.875 [DEBUG] [Thread-27500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:18:11.875 [DEBUG] [Thread-27500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:18:11.875 [DEBUG] [Thread-27500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:18:11.875 [DEBUG] [Thread-27500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:18:11.875 [DEBUG] [Thread-27500] [transport.py] [_log()] client lang: <none>
2026-04-15T23:18:11.875 [DEBUG] [Thread-27500] [transport.py] [_log()] server lang: <none>
2026-04-15T23:18:11.876 [DEBUG] [Thread-27500] [transport.py] [_log()] kex follows: False
2026-04-15T23:18:11.876 [DEBUG] [Thread-27500] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:18:11.876 [DEBUG] [Thread-27500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:18:11.876 [DEBUG] [Thread-27500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:18:11.876 [DEBUG] [Thread-27500] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:18:11.876 [DEBUG] [Thread-27500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:18:11.876 [DEBUG] [Thread-27500] [transport.py] [_log()] Compression: none
2026-04-15T23:18:11.876 [DEBUG] [Thread-27500] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:18:11.933 [DEBUG] [Thread-27500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:18:11.934 [DEBUG] [Thread-27500] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:18:11.934 [DEBUG] [Thread-27500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:18:11.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:18:11.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:18:11.991 [DEBUG] [Thread-27500] [transport.py] [_log()] userauth is OK
2026-04-15T23:18:11.991 [DEBUG] [Thread-27500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:18:11.991 [DEBUG] [Thread-27500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:18:11.992 [DEBUG] [Thread-27500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:18:11.992 [DEBUG] [Thread-27500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:18:12.019 [INFO] [Thread-27500] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:18:12.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:18:12.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:18:12.864 [DEBUG] [Thread-27500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:18:12.865 [DEBUG] [Thread-27500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:18:12.912 [DEBUG] [Thread-27500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:18:12.912 [DEBUG] [Thread-27500] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:18:12.923 [DEBUG] [Thread-27500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:18:12.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:18:12.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-15T23:18:12.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
2026-04-15T23:18:12.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:18:12.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:18:12.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:18:12.961 [DEBUG] [Thread-27500] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:18:25.782 [DEBUG] [Thread-27502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:18:34.660 [DEBUG] [Thread-27503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:18:40.818 [DEBUG] [Thread-27504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:18:42.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:18:42.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:18:42.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
2026-04-15T23:18:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 18, 7), 3.38527, 79.5126, 0.0, 9.0702, 8.96372, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:18:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:18:07
2026-04-15T23:18:44.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:18:45.162 [DEBUG] [Thread-27505] [transport.py] [_log()] starting thread (client mode): 0xf13c9180
2026-04-15T23:18:45.163 [DEBUG] [Thread-27505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:18:45.182 [DEBUG] [Thread-27505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:18:45.182 [INFO] [Thread-27505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:18:45.185 [DEBUG] [Thread-27505] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:18:45.186 [DEBUG] [Thread-27505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:18:45.186 [DEBUG] [Thread-27505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:18:45.186 [DEBUG] [Thread-27505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:18:45.186 [DEBUG] [Thread-27505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:18:45.186 [DEBUG] [Thread-27505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:18:45.186 [DEBUG] [Thread-27505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:18:45.186 [DEBUG] [Thread-27505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:18:45.186 [DEBUG] [Thread-27505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:18:45.186 [DEBUG] [Thread-27505] [transport.py] [_log()] client lang: <none>
2026-04-15T23:18:45.186 [DEBUG] [Thread-27505] [transport.py] [_log()] server lang: <none>
2026-04-15T23:18:45.186 [DEBUG] [Thread-27505] [transport.py] [_log()] kex follows: False
2026-04-15T23:18:45.186 [DEBUG] [Thread-27505] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:18:45.186 [DEBUG] [Thread-27505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:18:45.187 [DEBUG] [Thread-27505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:18:45.187 [DEBUG] [Thread-27505] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:18:45.187 [DEBUG] [Thread-27505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:18:45.187 [DEBUG] [Thread-27505] [transport.py] [_log()] Compression: none
2026-04-15T23:18:45.187 [DEBUG] [Thread-27505] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:18:45.204 [DEBUG] [Thread-27505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:18:45.204 [DEBUG] [Thread-27505] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:18:45.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:18:45.205 [DEBUG] [Thread-27505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:18:45.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:18:45.206 [DEBUG] [Thread-27505] [transport.py] [_log()] userauth is OK
2026-04-15T23:18:45.206 [DEBUG] [Thread-27505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:18:45.206 [DEBUG] [Thread-27505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:18:45.207 [DEBUG] [Thread-27505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:18:45.207 [DEBUG] [Thread-27505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:18:45.241 [INFO] [Thread-27505] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:18:45.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:18:46.017 [DEBUG] [Thread-27505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:18:46.017 [DEBUG] [Thread-27505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:18:46.017 [DEBUG] [Thread-27505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:18:46.058 [DEBUG] [Thread-27505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:18:46.058 [DEBUG] [Thread-27505] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:18:46.061 [DEBUG] [Thread-27505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:18:46.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:18:46.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:18:46.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:18:46.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:18:46.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:18:46.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:18:46.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:18:46.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:18:46.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:18:46.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.887282 -999.00   +9.50   6.38     81   +6.50 1 1 1 2 1     0    0 2.91 5.99 ZNESW 5.3 6.4 104.4 9.8 9.7 -24.5 9.6 -23.4 9.2 -21.1 9.6 -23.3
2026-04-15T23:18:46.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:18:46.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:18:46.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.887282
2026-04-15T23:18:46.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:18:46.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:18:46.087 [DEBUG] [Thread-27505] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:18:46.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:18:46.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:18:46.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:18:46.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:18:07', tmtdew=3.38527, humidity=79.5126, cloud=0.0, wind=9.0702, temperature=8.96372, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:17:41.165', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.03575000000000017, -0.02674999999999983, -0.09250000000000114, -0.059499999999999886, -0.02874999999999872, -0.04600000000000115, -0.03324999999999889, 0.0024999999999995026, -0.08399999999999963, -0.028750000000000497, -0.09500000000000064, -0.0024999999999995026, 0.05424999999999969, -0.009000000000000341, -0.009500000000000952, -0.042749999999999844, -0.07800000000000118, -0.0015000000000018332, -0.012250000000001648, -0.0030000000000001137, 0.01774999999999949, -0.04374999999999929, 0.010749999999999815, 0.04299999999999926, -0.05799999999999983, 0.00575000000000081, -0.016500000000000625, -0.010999999999999233, 0.0470000000000006, 0.023500000000002075, 0.01150000000000162, -0.06425000000000125], zp_timestamp='2026-04-15T21:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:18:46.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:18:46.348 [DEBUG] [Thread-27508] [transport.py] [_log()] starting thread (client mode): 0xee9560e0
2026-04-15T23:18:46.349 [DEBUG] [Thread-27508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:18:46.363 [DEBUG] [Thread-27508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:18:46.363 [INFO] [Thread-27508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:18:46.371 [DEBUG] [Thread-27508] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:18:46.371 [DEBUG] [Thread-27508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:18:46.371 [DEBUG] [Thread-27508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:18:46.371 [DEBUG] [Thread-27508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:18:46.371 [DEBUG] [Thread-27508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:18:46.372 [DEBUG] [Thread-27508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:18:46.372 [DEBUG] [Thread-27508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:18:46.372 [DEBUG] [Thread-27508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:18:46.372 [DEBUG] [Thread-27508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:18:46.372 [DEBUG] [Thread-27508] [transport.py] [_log()] client lang: <none>
2026-04-15T23:18:46.372 [DEBUG] [Thread-27508] [transport.py] [_log()] server lang: <none>
2026-04-15T23:18:46.372 [DEBUG] [Thread-27508] [transport.py] [_log()] kex follows: False
2026-04-15T23:18:46.372 [DEBUG] [Thread-27508] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:18:46.372 [DEBUG] [Thread-27508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:18:46.372 [DEBUG] [Thread-27508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:18:46.372 [DEBUG] [Thread-27508] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:18:46.373 [DEBUG] [Thread-27508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:18:46.373 [DEBUG] [Thread-27508] [transport.py] [_log()] Compression: none
2026-04-15T23:18:46.373 [DEBUG] [Thread-27508] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:18:46.426 [DEBUG] [Thread-27508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:18:46.426 [DEBUG] [Thread-27508] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:18:46.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:18:46.427 [DEBUG] [Thread-27508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:18:46.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:18:46.483 [DEBUG] [Thread-27508] [transport.py] [_log()] userauth is OK
2026-04-15T23:18:46.483 [DEBUG] [Thread-27508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:18:46.483 [DEBUG] [Thread-27508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:18:46.483 [DEBUG] [Thread-27508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:18:46.483 [DEBUG] [Thread-27508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:18:46.501 [INFO] [Thread-27508] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:18:46.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:18:46.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:18:47.331 [DEBUG] [Thread-27508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:18:47.331 [DEBUG] [Thread-27508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:18:47.379 [DEBUG] [Thread-27508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:18:47.379 [DEBUG] [Thread-27508] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:18:47.387 [DEBUG] [Thread-27508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:18:47.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:18:47.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')
2026-04-15T23:18:47.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
2026-04-15T23:18:47.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:18:47.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:18:47.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:18:47.428 [DEBUG] [Thread-27508] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:18:55.849 [DEBUG] [Thread-27510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:19:10.891 [DEBUG] [Thread-27511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:19:11.296 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:19:11.298 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:19:17.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:19:17.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:19:17.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:19:18.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 18, 43), 3.05047, 81.1248, 0.0, 10.8346, 8.8279, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:19:18.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:18:43
2026-04-15T23:19:19.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:19:19.484 [DEBUG] [Thread-27512] [transport.py] [_log()] starting thread (client mode): 0xf13cbac0
2026-04-15T23:19:19.485 [DEBUG] [Thread-27512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:19:19.503 [DEBUG] [Thread-27512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:19:19.503 [INFO] [Thread-27512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:19:19.506 [DEBUG] [Thread-27512] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:19:19.506 [DEBUG] [Thread-27512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:19:19.506 [DEBUG] [Thread-27512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:19:19.507 [DEBUG] [Thread-27512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:19:19.507 [DEBUG] [Thread-27512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:19:19.507 [DEBUG] [Thread-27512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:19:19.507 [DEBUG] [Thread-27512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:19:19.507 [DEBUG] [Thread-27512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:19:19.507 [DEBUG] [Thread-27512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:19:19.507 [DEBUG] [Thread-27512] [transport.py] [_log()] client lang: <none>
2026-04-15T23:19:19.507 [DEBUG] [Thread-27512] [transport.py] [_log()] server lang: <none>
2026-04-15T23:19:19.507 [DEBUG] [Thread-27512] [transport.py] [_log()] kex follows: False
2026-04-15T23:19:19.507 [DEBUG] [Thread-27512] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:19:19.507 [DEBUG] [Thread-27512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:19:19.508 [DEBUG] [Thread-27512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:19:19.508 [DEBUG] [Thread-27512] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:19:19.508 [DEBUG] [Thread-27512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:19:19.508 [DEBUG] [Thread-27512] [transport.py] [_log()] Compression: none
2026-04-15T23:19:19.508 [DEBUG] [Thread-27512] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:19:19.524 [DEBUG] [Thread-27512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:19:19.525 [DEBUG] [Thread-27512] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:19:19.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:19:19.525 [DEBUG] [Thread-27512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:19:19.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:19:19.527 [DEBUG] [Thread-27512] [transport.py] [_log()] userauth is OK
2026-04-15T23:19:19.527 [DEBUG] [Thread-27512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:19:19.527 [DEBUG] [Thread-27512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:19:19.527 [DEBUG] [Thread-27512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:19:19.527 [DEBUG] [Thread-27512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:19:19.546 [INFO] [Thread-27512] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:19:19.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:19:20.329 [DEBUG] [Thread-27512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:19:20.330 [DEBUG] [Thread-27512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:19:20.330 [DEBUG] [Thread-27512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:19:20.370 [DEBUG] [Thread-27512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:19:20.370 [DEBUG] [Thread-27512] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:19:20.373 [DEBUG] [Thread-27512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:19:20.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:19:20.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:19:20.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:19:20.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:19:20.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:19:20.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:19:20.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:19:20.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:19:20.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:19:20.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.887976 -999.00   +9.50   5.77     81   +6.40 1 1 1 2 1     0    0 2.92 7.16 ZNESW 6.9 5.8 80.6 10.7 9.7 -24.2 9.6 -23.4 9.2 -21.1 9.6 -23.3
2026-04-15T23:19:20.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:19:20.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:19:20.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.887976
2026-04-15T23:19:20.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:19:20.396 [DEBUG] [Thread-27512] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:19:20.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:19:20.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:19:20.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:19:20.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:19:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:18:43', tmtdew=3.05047, humidity=81.1248, cloud=0.0, wind=10.8346, temperature=8.8279, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:18:41.126', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.03575000000000017, -0.02674999999999983, -0.09250000000000114, -0.059499999999999886, -0.02874999999999872, -0.04600000000000115, -0.03324999999999889, 0.0024999999999995026, -0.08399999999999963, -0.028750000000000497, -0.09500000000000064, -0.0024999999999995026, 0.05424999999999969, -0.009000000000000341, -0.009500000000000952, -0.042749999999999844, -0.07800000000000118, -0.0015000000000018332, -0.012250000000001648, -0.0030000000000001137, 0.01774999999999949, -0.04374999999999929, 0.010749999999999815, 0.04299999999999926, -0.05799999999999983, 0.00575000000000081, -0.016500000000000625, -0.010999999999999233, 0.0470000000000006, 0.023500000000002075, 0.01150000000000162, -0.06425000000000125], zp_timestamp='2026-04-15T21:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:19:20.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:19:20.653 [DEBUG] [Thread-27515] [transport.py] [_log()] starting thread (client mode): 0xf13668c0
2026-04-15T23:19:20.653 [DEBUG] [Thread-27515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:19:20.670 [DEBUG] [Thread-27515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:19:20.670 [INFO] [Thread-27515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:19:20.678 [DEBUG] [Thread-27515] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:19:20.679 [DEBUG] [Thread-27515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:19:20.679 [DEBUG] [Thread-27515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:19:20.679 [DEBUG] [Thread-27515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:19:20.679 [DEBUG] [Thread-27515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:19:20.679 [DEBUG] [Thread-27515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:19:20.679 [DEBUG] [Thread-27515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:19:20.679 [DEBUG] [Thread-27515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:19:20.679 [DEBUG] [Thread-27515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:19:20.679 [DEBUG] [Thread-27515] [transport.py] [_log()] client lang: <none>
2026-04-15T23:19:20.679 [DEBUG] [Thread-27515] [transport.py] [_log()] server lang: <none>
2026-04-15T23:19:20.679 [DEBUG] [Thread-27515] [transport.py] [_log()] kex follows: False
2026-04-15T23:19:20.679 [DEBUG] [Thread-27515] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:19:20.680 [DEBUG] [Thread-27515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:19:20.680 [DEBUG] [Thread-27515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:19:20.680 [DEBUG] [Thread-27515] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:19:20.680 [DEBUG] [Thread-27515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:19:20.680 [DEBUG] [Thread-27515] [transport.py] [_log()] Compression: none
2026-04-15T23:19:20.680 [DEBUG] [Thread-27515] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:19:20.734 [DEBUG] [Thread-27515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:19:20.735 [DEBUG] [Thread-27515] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:19:20.735 [DEBUG] [Thread-27515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:19:20.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:19:20.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:19:20.791 [DEBUG] [Thread-27515] [transport.py] [_log()] userauth is OK
2026-04-15T23:19:20.791 [DEBUG] [Thread-27515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:19:20.792 [DEBUG] [Thread-27515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:19:20.792 [DEBUG] [Thread-27515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:19:20.792 [DEBUG] [Thread-27515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:19:20.817 [INFO] [Thread-27515] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:19:20.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:19:20.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:19:21.629 [DEBUG] [Thread-27515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:19:21.629 [DEBUG] [Thread-27515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:19:21.679 [DEBUG] [Thread-27515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:19:21.679 [DEBUG] [Thread-27515] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:19:21.687 [DEBUG] [Thread-27515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:19:21.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:19:21.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')
2026-04-15T23:19:21.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
2026-04-15T23:19:21.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:19:21.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:19:21.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:19:21.733 [DEBUG] [Thread-27515] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:19:25.919 [DEBUG] [Thread-27517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:19:34.808 [DEBUG] [Thread-27518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:19:40.963 [DEBUG] [Thread-27519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:19:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:19:51.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:19:51.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
2026-04-15T23:19:53.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 19, 18), 3.32267, 79.579, 0.0, 9.26424, 8.93054, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:19:53.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:19:18
2026-04-15T23:19:53.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:19:54.013 [DEBUG] [Thread-27520] [transport.py] [_log()] starting thread (client mode): 0xf13ca410
2026-04-15T23:19:54.013 [DEBUG] [Thread-27520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:19:54.032 [DEBUG] [Thread-27520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:19:54.032 [INFO] [Thread-27520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:19:54.035 [DEBUG] [Thread-27520] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:19:54.035 [DEBUG] [Thread-27520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:19:54.035 [DEBUG] [Thread-27520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:19:54.035 [DEBUG] [Thread-27520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:19:54.035 [DEBUG] [Thread-27520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:19:54.035 [DEBUG] [Thread-27520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:19:54.035 [DEBUG] [Thread-27520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:19:54.035 [DEBUG] [Thread-27520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:19:54.035 [DEBUG] [Thread-27520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:19:54.035 [DEBUG] [Thread-27520] [transport.py] [_log()] client lang: <none>
2026-04-15T23:19:54.035 [DEBUG] [Thread-27520] [transport.py] [_log()] server lang: <none>
2026-04-15T23:19:54.035 [DEBUG] [Thread-27520] [transport.py] [_log()] kex follows: False
2026-04-15T23:19:54.035 [DEBUG] [Thread-27520] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:19:54.036 [DEBUG] [Thread-27520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:19:54.036 [DEBUG] [Thread-27520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:19:54.036 [DEBUG] [Thread-27520] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:19:54.036 [DEBUG] [Thread-27520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:19:54.036 [DEBUG] [Thread-27520] [transport.py] [_log()] Compression: none
2026-04-15T23:19:54.036 [DEBUG] [Thread-27520] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:19:54.052 [DEBUG] [Thread-27520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:19:54.052 [DEBUG] [Thread-27520] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:19:54.052 [DEBUG] [Thread-27520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:19:54.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:19:54.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:19:54.053 [DEBUG] [Thread-27520] [transport.py] [_log()] userauth is OK
2026-04-15T23:19:54.053 [DEBUG] [Thread-27520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:19:54.053 [DEBUG] [Thread-27520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:19:54.053 [DEBUG] [Thread-27520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:19:54.053 [DEBUG] [Thread-27520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:19:54.072 [INFO] [Thread-27520] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:19:54.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:19:54.842 [DEBUG] [Thread-27520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:19:54.842 [DEBUG] [Thread-27520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:19:54.843 [DEBUG] [Thread-27520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:19:54.883 [DEBUG] [Thread-27520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:19:54.883 [DEBUG] [Thread-27520] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:19:54.886 [DEBUG] [Thread-27520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:19:54.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:19:54.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:19:54.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:19:54.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:19:54.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:19:54.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:19:54.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:19:54.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:19:54.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:19:54.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.888323 -999.00   +9.50   7.23     81   +6.40 1 1 1 2 1     0    0 3.01 8.07 ZNESW 7.8 7.2 99.4 10.8 9.8 -24.5 9.6 -23.3 9.2 -21.1 9.6 -23.3
2026-04-15T23:19:54.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:19:54.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:19:54.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.888323
2026-04-15T23:19:54.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:19:54.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:19:54.913 [DEBUG] [Thread-27520] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:19:54.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:19:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:19:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:19:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:19:18', tmtdew=3.32267, humidity=79.579, cloud=0.0, wind=9.26424, temperature=8.93054, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:19:11.107', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.03575000000000017, -0.02674999999999983, -0.09250000000000114, -0.059499999999999886, -0.02874999999999872, -0.04600000000000115, -0.03324999999999889, 0.0024999999999995026, -0.08399999999999963, -0.028750000000000497, -0.09500000000000064, -0.0024999999999995026, 0.05424999999999969, -0.009000000000000341, -0.009500000000000952, -0.042749999999999844, -0.07800000000000118, -0.0015000000000018332, -0.012250000000001648, -0.0030000000000001137, 0.01774999999999949, -0.04374999999999929, 0.010749999999999815, 0.04299999999999926, -0.05799999999999983, 0.00575000000000081, -0.016500000000000625, -0.010999999999999233, 0.0470000000000006, 0.023500000000002075, 0.01150000000000162, -0.06425000000000125], zp_timestamp='2026-04-15T21:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:19:55.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:19:55.169 [DEBUG] [Thread-27523] [transport.py] [_log()] starting thread (client mode): 0xf13657e0
2026-04-15T23:19:55.169 [DEBUG] [Thread-27523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:19:55.184 [DEBUG] [Thread-27523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:19:55.184 [INFO] [Thread-27523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:19:55.191 [DEBUG] [Thread-27523] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:19:55.191 [DEBUG] [Thread-27523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:19:55.191 [DEBUG] [Thread-27523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:19:55.192 [DEBUG] [Thread-27523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:19:55.192 [DEBUG] [Thread-27523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:19:55.192 [DEBUG] [Thread-27523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:19:55.192 [DEBUG] [Thread-27523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:19:55.192 [DEBUG] [Thread-27523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:19:55.192 [DEBUG] [Thread-27523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:19:55.192 [DEBUG] [Thread-27523] [transport.py] [_log()] client lang: <none>
2026-04-15T23:19:55.192 [DEBUG] [Thread-27523] [transport.py] [_log()] server lang: <none>
2026-04-15T23:19:55.192 [DEBUG] [Thread-27523] [transport.py] [_log()] kex follows: False
2026-04-15T23:19:55.192 [DEBUG] [Thread-27523] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:19:55.192 [DEBUG] [Thread-27523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:19:55.193 [DEBUG] [Thread-27523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:19:55.193 [DEBUG] [Thread-27523] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:19:55.193 [DEBUG] [Thread-27523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:19:55.193 [DEBUG] [Thread-27523] [transport.py] [_log()] Compression: none
2026-04-15T23:19:55.193 [DEBUG] [Thread-27523] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:19:55.250 [DEBUG] [Thread-27523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:19:55.250 [DEBUG] [Thread-27523] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:19:55.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:19:55.251 [DEBUG] [Thread-27523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:19:55.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:19:55.307 [DEBUG] [Thread-27523] [transport.py] [_log()] userauth is OK
2026-04-15T23:19:55.307 [DEBUG] [Thread-27523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:19:55.307 [DEBUG] [Thread-27523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:19:55.308 [DEBUG] [Thread-27523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:19:55.308 [DEBUG] [Thread-27523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:19:55.335 [INFO] [Thread-27523] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:19:55.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:19:55.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:19:55.992 [DEBUG] [Thread-27525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:19:56.146 [DEBUG] [Thread-27523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:19:56.146 [DEBUG] [Thread-27523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:19:56.195 [DEBUG] [Thread-27523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:19:56.195 [DEBUG] [Thread-27523] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:19:56.204 [DEBUG] [Thread-27523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:19:56.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:19:56.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')
2026-04-15T23:19:56.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
2026-04-15T23:19:56.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:19:56.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:19:56.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:19:56.237 [DEBUG] [Thread-27523] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:20:11.030 [DEBUG] [Thread-27526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:20:11.500 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:20:11.501 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:20:26.061 [DEBUG] [Thread-27527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:20:26.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:20:26.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:20:26.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
2026-04-15T23:20:27.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 19, 54), 3.03943, 81.1911, 0.0, 11.3285, 8.86108, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:20:27.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:19:54
2026-04-15T23:20:27.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:20:28.315 [DEBUG] [Thread-27528] [transport.py] [_log()] starting thread (client mode): 0xee957d90
2026-04-15T23:20:28.316 [DEBUG] [Thread-27528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:20:28.335 [DEBUG] [Thread-27528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:20:28.335 [INFO] [Thread-27528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:20:28.338 [DEBUG] [Thread-27528] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:20:28.338 [DEBUG] [Thread-27528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:20:28.338 [DEBUG] [Thread-27528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:20:28.338 [DEBUG] [Thread-27528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:20:28.338 [DEBUG] [Thread-27528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:20:28.338 [DEBUG] [Thread-27528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:20:28.338 [DEBUG] [Thread-27528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:20:28.338 [DEBUG] [Thread-27528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:20:28.338 [DEBUG] [Thread-27528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:20:28.339 [DEBUG] [Thread-27528] [transport.py] [_log()] client lang: <none>
2026-04-15T23:20:28.339 [DEBUG] [Thread-27528] [transport.py] [_log()] server lang: <none>
2026-04-15T23:20:28.339 [DEBUG] [Thread-27528] [transport.py] [_log()] kex follows: False
2026-04-15T23:20:28.339 [DEBUG] [Thread-27528] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:20:28.339 [DEBUG] [Thread-27528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:20:28.339 [DEBUG] [Thread-27528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:20:28.339 [DEBUG] [Thread-27528] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:20:28.339 [DEBUG] [Thread-27528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:20:28.339 [DEBUG] [Thread-27528] [transport.py] [_log()] Compression: none
2026-04-15T23:20:28.339 [DEBUG] [Thread-27528] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:20:28.353 [DEBUG] [Thread-27528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:20:28.354 [DEBUG] [Thread-27528] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:20:28.354 [DEBUG] [Thread-27528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:20:28.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:20:28.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:20:28.355 [DEBUG] [Thread-27528] [transport.py] [_log()] userauth is OK
2026-04-15T23:20:28.355 [DEBUG] [Thread-27528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:20:28.355 [DEBUG] [Thread-27528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:20:28.356 [DEBUG] [Thread-27528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:20:28.356 [DEBUG] [Thread-27528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:20:28.379 [INFO] [Thread-27528] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:20:28.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:20:34.955 [DEBUG] [Thread-27530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:20:34.975 [DEBUG] [Thread-27528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:20:34.975 [DEBUG] [Thread-27528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:20:34.975 [DEBUG] [Thread-27528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:20:35.015 [DEBUG] [Thread-27528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:20:35.016 [DEBUG] [Thread-27528] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:20:35.018 [DEBUG] [Thread-27528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:20:35.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:20:35.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:20:35.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:20:35.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:20:35.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:20:35.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:20:35.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:20:35.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:20:35.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:20:35.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.888670 -999.00   +9.50   7.87     81   +6.40 1 1 1 2 1     0    0 3.05 9.14 ZNESW 4.2 7.9 139.2 10.8 9.8 -24.3 9.6 -23.3 9.3 -21.2 9.6 -23.3
2026-04-15T23:20:35.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:20:35.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:20:35.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.888670
2026-04-15T23:20:35.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:20:35.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:20:35.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:20:35.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:20:35.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:20:35.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:19:54', tmtdew=3.03943, humidity=81.1911, cloud=0.0, wind=11.3285, temperature=8.86108, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:19:41.088', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.03575000000000017, -0.02674999999999983, -0.09250000000000114, -0.059499999999999886, -0.02874999999999872, -0.04600000000000115, -0.03324999999999889, 0.0024999999999995026, -0.08399999999999963, -0.028750000000000497, -0.09500000000000064, -0.0024999999999995026, 0.05424999999999969, -0.009000000000000341, -0.009500000000000952, -0.042749999999999844, -0.07800000000000118, -0.0015000000000018332, -0.012250000000001648, -0.0030000000000001137, 0.01774999999999949, -0.04374999999999929, 0.010749999999999815, 0.04299999999999926, -0.05799999999999983, 0.00575000000000081, -0.016500000000000625, -0.010999999999999233, 0.0470000000000006, 0.023500000000002075, 0.01150000000000162, -0.06425000000000125], zp_timestamp='2026-04-15T21:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:20:35.105 [DEBUG] [Thread-27528] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:20:35.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:20:35.326 [DEBUG] [Thread-27532] [transport.py] [_log()] starting thread (client mode): 0xee9543d0
2026-04-15T23:20:35.326 [DEBUG] [Thread-27532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:20:35.343 [DEBUG] [Thread-27532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:20:35.343 [INFO] [Thread-27532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:20:35.352 [DEBUG] [Thread-27532] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:20:35.352 [DEBUG] [Thread-27532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:20:35.352 [DEBUG] [Thread-27532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:20:35.352 [DEBUG] [Thread-27532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:20:35.352 [DEBUG] [Thread-27532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:20:35.352 [DEBUG] [Thread-27532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:20:35.352 [DEBUG] [Thread-27532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:20:35.352 [DEBUG] [Thread-27532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:20:35.353 [DEBUG] [Thread-27532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:20:35.353 [DEBUG] [Thread-27532] [transport.py] [_log()] client lang: <none>
2026-04-15T23:20:35.353 [DEBUG] [Thread-27532] [transport.py] [_log()] server lang: <none>
2026-04-15T23:20:35.353 [DEBUG] [Thread-27532] [transport.py] [_log()] kex follows: False
2026-04-15T23:20:35.353 [DEBUG] [Thread-27532] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:20:35.353 [DEBUG] [Thread-27532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:20:35.353 [DEBUG] [Thread-27532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:20:35.353 [DEBUG] [Thread-27532] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:20:35.353 [DEBUG] [Thread-27532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:20:35.353 [DEBUG] [Thread-27532] [transport.py] [_log()] Compression: none
2026-04-15T23:20:35.353 [DEBUG] [Thread-27532] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:20:35.409 [DEBUG] [Thread-27532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:20:35.410 [DEBUG] [Thread-27532] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:20:35.410 [DEBUG] [Thread-27532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:20:35.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:20:35.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:20:35.474 [DEBUG] [Thread-27532] [transport.py] [_log()] userauth is OK
2026-04-15T23:20:35.474 [DEBUG] [Thread-27532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:20:35.474 [DEBUG] [Thread-27532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:20:35.474 [DEBUG] [Thread-27532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:20:35.475 [DEBUG] [Thread-27532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:20:35.497 [INFO] [Thread-27532] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:20:35.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:20:35.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:20:36.366 [DEBUG] [Thread-27532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:20:36.366 [DEBUG] [Thread-27532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:20:36.415 [DEBUG] [Thread-27532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:20:36.415 [DEBUG] [Thread-27532] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:20:36.424 [DEBUG] [Thread-27532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:20:36.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:20:36.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')
2026-04-15T23:20:36.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
2026-04-15T23:20:36.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:20:36.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:20:36.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:20:36.458 [DEBUG] [Thread-27532] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:20:41.090 [DEBUG] [Thread-27534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:20:56.132 [DEBUG] [Thread-27535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:21:06.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:21:06.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:21: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
2026-04-15T23:21:07.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 20, 30), 3.31086, 79.6453, 0.0, 9.54648, 8.93054, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:21:07.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:20:30
2026-04-15T23:21:08.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:21:08.550 [DEBUG] [Thread-27536] [transport.py] [_log()] starting thread (client mode): 0xf13ca7d0
2026-04-15T23:21:08.551 [DEBUG] [Thread-27536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:21:08.565 [DEBUG] [Thread-27536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:21:08.565 [INFO] [Thread-27536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:21:08.567 [DEBUG] [Thread-27536] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:21:08.567 [DEBUG] [Thread-27536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:21:08.567 [DEBUG] [Thread-27536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:21:08.567 [DEBUG] [Thread-27536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:21:08.567 [DEBUG] [Thread-27536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:21:08.567 [DEBUG] [Thread-27536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:21:08.567 [DEBUG] [Thread-27536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:21:08.567 [DEBUG] [Thread-27536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:21:08.568 [DEBUG] [Thread-27536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:21:08.568 [DEBUG] [Thread-27536] [transport.py] [_log()] client lang: <none>
2026-04-15T23:21:08.568 [DEBUG] [Thread-27536] [transport.py] [_log()] server lang: <none>
2026-04-15T23:21:08.568 [DEBUG] [Thread-27536] [transport.py] [_log()] kex follows: False
2026-04-15T23:21:08.568 [DEBUG] [Thread-27536] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:21:08.568 [DEBUG] [Thread-27536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:21:08.568 [DEBUG] [Thread-27536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:21:08.568 [DEBUG] [Thread-27536] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:21:08.568 [DEBUG] [Thread-27536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:21:08.568 [DEBUG] [Thread-27536] [transport.py] [_log()] Compression: none
2026-04-15T23:21:08.568 [DEBUG] [Thread-27536] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:21:08.587 [DEBUG] [Thread-27536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:21:08.587 [DEBUG] [Thread-27536] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:21:08.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:21:08.588 [DEBUG] [Thread-27536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:21:08.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:21:08.589 [DEBUG] [Thread-27536] [transport.py] [_log()] userauth is OK
2026-04-15T23:21:08.589 [DEBUG] [Thread-27536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:21:08.589 [DEBUG] [Thread-27536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:21:08.589 [DEBUG] [Thread-27536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:21:08.589 [DEBUG] [Thread-27536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:21:08.604 [INFO] [Thread-27536] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:21:08.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:21:09.365 [DEBUG] [Thread-27536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:21:09.366 [DEBUG] [Thread-27536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:21:09.366 [DEBUG] [Thread-27536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:21:09.406 [DEBUG] [Thread-27536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:21:09.406 [DEBUG] [Thread-27536] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:21:09.409 [DEBUG] [Thread-27536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:21:09.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:21:09.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:21:09.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:21:09.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:21:09.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:21:09.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:21:09.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:21:09.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:21:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:21:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.889018 -999.00   +9.50   7.16     81   +6.40 1 1 1 2 1     0    0 3.09 10.17 ZNESW 7.0 7.2 124.0 9.8 9.8 -24.5 9.6 -23.4 9.3 -21.2 9.6 -23.1
2026-04-15T23:21:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:21:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:21:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.889018
2026-04-15T23:21:09.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:21:09.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:21:09.435 [DEBUG] [Thread-27536] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:21:09.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:21:09.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:21:09.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:21:09.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:20:30', tmtdew=3.31086, humidity=79.6453, cloud=0.0, wind=9.54648, temperature=8.93054, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:20:11.155', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.07474999999999987, -0.01774999999999949, -0.07950000000000124, -0.08750000000000036, -0.022749999999998494, 0.00849999999999973, 0.0032500000000013074, 0.01750000000000007, -0.07499999999999929, -0.036749999999999616, -0.09399999999999942, -0.03750000000000142, 0.009249999999999758, -0.01249999999999929, -0.023500000000002075, -0.034750000000000725, -0.05550000000000033, -0.016500000000000625, -0.024750000000000938, -0.008000000000000895, 0.0032499999999977547, -0.014749999999999375, 0.00024999999999941735, 0.021999999999998465, -0.07150000000000034, -0.00024999999999941735, 0.005499999999999616, 0.01750000000000007, 0.019000000000000128, 0.019000000000001904, 0.036000000000001364, -0.06975000000000087], zp_timestamp='2026-04-15T21:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:21:09.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:21:09.706 [DEBUG] [Thread-27539] [transport.py] [_log()] starting thread (client mode): 0xee957160
2026-04-15T23:21:09.706 [DEBUG] [Thread-27539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:21:09.721 [DEBUG] [Thread-27539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:21:09.721 [INFO] [Thread-27539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:21:09.729 [DEBUG] [Thread-27539] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:21:09.729 [DEBUG] [Thread-27539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:21:09.729 [DEBUG] [Thread-27539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:21:09.729 [DEBUG] [Thread-27539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:21:09.729 [DEBUG] [Thread-27539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:21:09.730 [DEBUG] [Thread-27539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:21:09.730 [DEBUG] [Thread-27539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:21:09.730 [DEBUG] [Thread-27539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:21:09.730 [DEBUG] [Thread-27539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:21:09.730 [DEBUG] [Thread-27539] [transport.py] [_log()] client lang: <none>
2026-04-15T23:21:09.730 [DEBUG] [Thread-27539] [transport.py] [_log()] server lang: <none>
2026-04-15T23:21:09.730 [DEBUG] [Thread-27539] [transport.py] [_log()] kex follows: False
2026-04-15T23:21:09.730 [DEBUG] [Thread-27539] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:21:09.730 [DEBUG] [Thread-27539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:21:09.730 [DEBUG] [Thread-27539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:21:09.730 [DEBUG] [Thread-27539] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:21:09.731 [DEBUG] [Thread-27539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:21:09.731 [DEBUG] [Thread-27539] [transport.py] [_log()] Compression: none
2026-04-15T23:21:09.731 [DEBUG] [Thread-27539] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:21:09.788 [DEBUG] [Thread-27539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:21:09.789 [DEBUG] [Thread-27539] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:21:09.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:21:09.789 [DEBUG] [Thread-27539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:21:09.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:21:09.847 [DEBUG] [Thread-27539] [transport.py] [_log()] userauth is OK
2026-04-15T23:21:09.847 [DEBUG] [Thread-27539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:21:09.848 [DEBUG] [Thread-27539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:21:09.848 [DEBUG] [Thread-27539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:21:09.848 [DEBUG] [Thread-27539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:21:09.872 [INFO] [Thread-27539] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:21:09.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:21:09.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:21:10.700 [DEBUG] [Thread-27539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:21:10.700 [DEBUG] [Thread-27539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:21:10.748 [DEBUG] [Thread-27539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:21:10.748 [DEBUG] [Thread-27539] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:21:10.758 [DEBUG] [Thread-27539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:21:10.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:21:10.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')
2026-04-15T23:21:10.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
2026-04-15T23:21:10.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:21:10.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:21:10.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:21:10.793 [DEBUG] [Thread-27539] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:21:11.163 [DEBUG] [Thread-27541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:21:11.711 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:21:11.712 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:21:26.207 [DEBUG] [Thread-27542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:21:35.104 [DEBUG] [Thread-27543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:21:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:21:40.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:21:40.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:21:41.236 [DEBUG] [Thread-27544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:21:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 21, 5), 3.31419, 79.6287, 0.0, 9.864, 8.94713, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:21:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:21:05
2026-04-15T23:21:42.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:21:42.963 [DEBUG] [Thread-27545] [transport.py] [_log()] starting thread (client mode): 0xf13c92d0
2026-04-15T23:21:42.964 [DEBUG] [Thread-27545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:21:42.983 [DEBUG] [Thread-27545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:21:42.984 [INFO] [Thread-27545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:21:42.987 [DEBUG] [Thread-27545] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:21:42.987 [DEBUG] [Thread-27545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:21:42.987 [DEBUG] [Thread-27545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:21:42.987 [DEBUG] [Thread-27545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:21:42.987 [DEBUG] [Thread-27545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:21:42.987 [DEBUG] [Thread-27545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:21:42.987 [DEBUG] [Thread-27545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:21:42.987 [DEBUG] [Thread-27545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:21:42.987 [DEBUG] [Thread-27545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:21:42.987 [DEBUG] [Thread-27545] [transport.py] [_log()] client lang: <none>
2026-04-15T23:21:42.988 [DEBUG] [Thread-27545] [transport.py] [_log()] server lang: <none>
2026-04-15T23:21:42.988 [DEBUG] [Thread-27545] [transport.py] [_log()] kex follows: False
2026-04-15T23:21:42.988 [DEBUG] [Thread-27545] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:21:42.988 [DEBUG] [Thread-27545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:21:42.988 [DEBUG] [Thread-27545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:21:42.988 [DEBUG] [Thread-27545] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:21:42.988 [DEBUG] [Thread-27545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:21:42.988 [DEBUG] [Thread-27545] [transport.py] [_log()] Compression: none
2026-04-15T23:21:42.988 [DEBUG] [Thread-27545] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:21:43.005 [DEBUG] [Thread-27545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:21:43.006 [DEBUG] [Thread-27545] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:21:43.006 [DEBUG] [Thread-27545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:21:43.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:21:43.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:21:43.049 [DEBUG] [Thread-27545] [transport.py] [_log()] userauth is OK
2026-04-15T23:21:43.049 [DEBUG] [Thread-27545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:21:43.049 [DEBUG] [Thread-27545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:21:43.049 [DEBUG] [Thread-27545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:21:43.049 [DEBUG] [Thread-27545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:21:43.086 [INFO] [Thread-27545] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:21:43.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:21:43.877 [DEBUG] [Thread-27545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:21:43.878 [DEBUG] [Thread-27545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:21:43.878 [DEBUG] [Thread-27545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:21:43.918 [DEBUG] [Thread-27545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:21:43.918 [DEBUG] [Thread-27545] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:21:43.921 [DEBUG] [Thread-27545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:21:43.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:21:43.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:21:43.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:21:43.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:21:43.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:21:43.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:21:43.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:21:43.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:21:43.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:21:43.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.889365 -999.00   +9.50  10.12     81   +6.40 1 1 1 2 1     0    0 3.06 11.59 ZNESW 7.3 10.1 126.8 12.1 9.8 -24.5 9.7 -23.4 9.3 -21.1 9.6 -23.2
2026-04-15T23:21:43.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:21:43.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:21:43.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.889365
2026-04-15T23:21:43.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:21:43.948 [DEBUG] [Thread-27545] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:21:43.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:21:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:21:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:21:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:21:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:21:05', tmtdew=3.31419, humidity=79.6287, cloud=0.0, wind=9.864, temperature=8.94713, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:20:41.136', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.07474999999999987, -0.01774999999999949, -0.07950000000000124, -0.08750000000000036, -0.022749999999998494, 0.00849999999999973, 0.0032500000000013074, 0.01750000000000007, -0.07499999999999929, -0.036749999999999616, -0.09399999999999942, -0.03750000000000142, 0.009249999999999758, -0.01249999999999929, -0.023500000000002075, -0.034750000000000725, -0.05550000000000033, -0.016500000000000625, -0.024750000000000938, -0.008000000000000895, 0.0032499999999977547, -0.014749999999999375, 0.00024999999999941735, 0.021999999999998465, -0.07150000000000034, -0.00024999999999941735, 0.005499999999999616, 0.01750000000000007, 0.019000000000000128, 0.019000000000001904, 0.036000000000001364, -0.06975000000000087], zp_timestamp='2026-04-15T21:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:21:44.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:21:44.204 [DEBUG] [Thread-27548] [transport.py] [_log()] starting thread (client mode): 0xf13c8af0
2026-04-15T23:21:44.204 [DEBUG] [Thread-27548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:21:44.222 [DEBUG] [Thread-27548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:21:44.222 [INFO] [Thread-27548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:21:44.230 [DEBUG] [Thread-27548] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:21:44.230 [DEBUG] [Thread-27548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:21:44.231 [DEBUG] [Thread-27548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:21:44.231 [DEBUG] [Thread-27548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:21:44.231 [DEBUG] [Thread-27548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:21:44.231 [DEBUG] [Thread-27548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:21:44.231 [DEBUG] [Thread-27548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:21:44.231 [DEBUG] [Thread-27548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:21:44.231 [DEBUG] [Thread-27548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:21:44.231 [DEBUG] [Thread-27548] [transport.py] [_log()] client lang: <none>
2026-04-15T23:21:44.231 [DEBUG] [Thread-27548] [transport.py] [_log()] server lang: <none>
2026-04-15T23:21:44.231 [DEBUG] [Thread-27548] [transport.py] [_log()] kex follows: False
2026-04-15T23:21:44.231 [DEBUG] [Thread-27548] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:21:44.231 [DEBUG] [Thread-27548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:21:44.232 [DEBUG] [Thread-27548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:21:44.232 [DEBUG] [Thread-27548] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:21:44.232 [DEBUG] [Thread-27548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:21:44.232 [DEBUG] [Thread-27548] [transport.py] [_log()] Compression: none
2026-04-15T23:21:44.232 [DEBUG] [Thread-27548] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:21:44.286 [DEBUG] [Thread-27548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:21:44.287 [DEBUG] [Thread-27548] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:21:44.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:21:44.287 [DEBUG] [Thread-27548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:21:44.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:21:44.343 [DEBUG] [Thread-27548] [transport.py] [_log()] userauth is OK
2026-04-15T23:21:44.343 [DEBUG] [Thread-27548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:21:44.343 [DEBUG] [Thread-27548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:21:44.343 [DEBUG] [Thread-27548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:21:44.343 [DEBUG] [Thread-27548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:21:44.368 [INFO] [Thread-27548] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:21:44.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:21:44.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:21:45.190 [DEBUG] [Thread-27548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:21:45.191 [DEBUG] [Thread-27548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:21:45.238 [DEBUG] [Thread-27548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:21:45.238 [DEBUG] [Thread-27548] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:21:45.248 [DEBUG] [Thread-27548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:21:45.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:21:45.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')
2026-04-15T23:21:45.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
2026-04-15T23:21:45.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:21:45.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:21:45.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:21:45.286 [DEBUG] [Thread-27548] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:21:56.265 [DEBUG] [Thread-27550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:22:11.302 [DEBUG] [Thread-27551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:22:11.913 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:22:11.915 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:22:15.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:22:15.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:22:15.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
2026-04-15T23:22:16.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 21, 40), 3.03634, 81.1911, 0.0, 13.1278, 8.72836, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:22:16.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:21:40
2026-04-15T23:22:16.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:22:17.479 [DEBUG] [Thread-27552] [transport.py] [_log()] starting thread (client mode): 0xf13c8d30
2026-04-15T23:22:17.480 [DEBUG] [Thread-27552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:22:17.499 [DEBUG] [Thread-27552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:22:17.499 [INFO] [Thread-27552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:22:17.502 [DEBUG] [Thread-27552] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:22:17.503 [DEBUG] [Thread-27552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:22:17.503 [DEBUG] [Thread-27552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:22:17.503 [DEBUG] [Thread-27552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:22:17.503 [DEBUG] [Thread-27552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:22:17.503 [DEBUG] [Thread-27552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:22:17.503 [DEBUG] [Thread-27552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:22:17.503 [DEBUG] [Thread-27552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:22:17.503 [DEBUG] [Thread-27552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:22:17.503 [DEBUG] [Thread-27552] [transport.py] [_log()] client lang: <none>
2026-04-15T23:22:17.503 [DEBUG] [Thread-27552] [transport.py] [_log()] server lang: <none>
2026-04-15T23:22:17.503 [DEBUG] [Thread-27552] [transport.py] [_log()] kex follows: False
2026-04-15T23:22:17.504 [DEBUG] [Thread-27552] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:22:17.504 [DEBUG] [Thread-27552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:22:17.504 [DEBUG] [Thread-27552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:22:17.504 [DEBUG] [Thread-27552] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:22:17.504 [DEBUG] [Thread-27552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:22:17.504 [DEBUG] [Thread-27552] [transport.py] [_log()] Compression: none
2026-04-15T23:22:17.504 [DEBUG] [Thread-27552] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:22:17.522 [DEBUG] [Thread-27552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:22:17.522 [DEBUG] [Thread-27552] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:22:17.522 [DEBUG] [Thread-27552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:22:17.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:22:17.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:22:17.564 [DEBUG] [Thread-27552] [transport.py] [_log()] userauth is OK
2026-04-15T23:22:17.565 [DEBUG] [Thread-27552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:22:17.565 [DEBUG] [Thread-27552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:22:17.565 [DEBUG] [Thread-27552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:22:17.565 [DEBUG] [Thread-27552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:22:17.589 [INFO] [Thread-27552] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:22:17.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:22:18.339 [DEBUG] [Thread-27552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:22:18.339 [DEBUG] [Thread-27552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:22:18.340 [DEBUG] [Thread-27552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:22:18.380 [DEBUG] [Thread-27552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:22:18.380 [DEBUG] [Thread-27552] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:22:18.382 [DEBUG] [Thread-27552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:22:18.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:22:18.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:22:18.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:22:18.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:22:18.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:22:18.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:22:18.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:22:18.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:22:18.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:22:18.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.890059 -999.00   +9.50   7.80     80   +6.40 1 1 1 2 1     0    0 3.22 14.99 ZNESW 8.1 7.8 99.5 11.2 9.8 -24.5 9.6 -23.3 9.3 -21.2 9.7 -23.2
2026-04-15T23:22:18.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:22:18.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:22:18.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.890059
2026-04-15T23:22:18.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:22:18.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:22:18.402 [DEBUG] [Thread-27552] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:22:18.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:22:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:22:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:22:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:21:40', tmtdew=3.03634, humidity=81.1911, cloud=0.0, wind=13.1278, temperature=8.72836, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:21:41.098', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.07474999999999987, -0.01774999999999949, -0.07950000000000124, -0.08750000000000036, -0.022749999999998494, 0.00849999999999973, 0.0032500000000013074, 0.01750000000000007, -0.07499999999999929, -0.036749999999999616, -0.09399999999999942, -0.03750000000000142, 0.009249999999999758, -0.01249999999999929, -0.023500000000002075, -0.034750000000000725, -0.05550000000000033, -0.016500000000000625, -0.024750000000000938, -0.008000000000000895, 0.0032499999999977547, -0.014749999999999375, 0.00024999999999941735, 0.021999999999998465, -0.07150000000000034, -0.00024999999999941735, 0.005499999999999616, 0.01750000000000007, 0.019000000000000128, 0.019000000000001904, 0.036000000000001364, -0.06975000000000087], zp_timestamp='2026-04-15T21:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:22:18.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:22:18.641 [DEBUG] [Thread-27555] [transport.py] [_log()] starting thread (client mode): 0xf13ca7a0
2026-04-15T23:22:18.641 [DEBUG] [Thread-27555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:22:18.657 [DEBUG] [Thread-27555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:22:18.657 [INFO] [Thread-27555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:22:18.666 [DEBUG] [Thread-27555] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:22:18.667 [DEBUG] [Thread-27555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:22:18.667 [DEBUG] [Thread-27555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:22:18.667 [DEBUG] [Thread-27555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:22:18.667 [DEBUG] [Thread-27555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:22:18.667 [DEBUG] [Thread-27555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:22:18.667 [DEBUG] [Thread-27555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:22:18.667 [DEBUG] [Thread-27555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:22:18.667 [DEBUG] [Thread-27555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:22:18.667 [DEBUG] [Thread-27555] [transport.py] [_log()] client lang: <none>
2026-04-15T23:22:18.667 [DEBUG] [Thread-27555] [transport.py] [_log()] server lang: <none>
2026-04-15T23:22:18.667 [DEBUG] [Thread-27555] [transport.py] [_log()] kex follows: False
2026-04-15T23:22:18.667 [DEBUG] [Thread-27555] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:22:18.667 [DEBUG] [Thread-27555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:22:18.668 [DEBUG] [Thread-27555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:22:18.668 [DEBUG] [Thread-27555] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:22:18.668 [DEBUG] [Thread-27555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:22:18.668 [DEBUG] [Thread-27555] [transport.py] [_log()] Compression: none
2026-04-15T23:22:18.668 [DEBUG] [Thread-27555] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:22:18.727 [DEBUG] [Thread-27555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:22:18.727 [DEBUG] [Thread-27555] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:22:18.728 [DEBUG] [Thread-27555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:22:18.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:22:18.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:22:18.783 [DEBUG] [Thread-27555] [transport.py] [_log()] userauth is OK
2026-04-15T23:22:18.783 [DEBUG] [Thread-27555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:22:18.783 [DEBUG] [Thread-27555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:22:18.784 [DEBUG] [Thread-27555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:22:18.784 [DEBUG] [Thread-27555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:22:18.807 [INFO] [Thread-27555] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:22:18.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:22:18.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:22:19.614 [DEBUG] [Thread-27555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:22:19.615 [DEBUG] [Thread-27555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:22:19.662 [DEBUG] [Thread-27555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:22:19.662 [DEBUG] [Thread-27555] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:22:19.672 [DEBUG] [Thread-27555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:22:19.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:22:19.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')
2026-04-15T23:22:19.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
2026-04-15T23:22:19.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:22:19.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:22:19.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:22:19.707 [DEBUG] [Thread-27555] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:22:26.330 [DEBUG] [Thread-27557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:22:35.250 [DEBUG] [Thread-27558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:22:41.370 [DEBUG] [Thread-27559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:22:49.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:22:49.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:22:49.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
2026-04-15T23:22:51.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 22, 16), 3.35677, 79.6619, 0.0, 9.75816, 8.88077, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:22:51.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:22:16
2026-04-15T23:22:51.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:22:51.889 [DEBUG] [Thread-27560] [transport.py] [_log()] starting thread (client mode): 0xee905930
2026-04-15T23:22:51.889 [DEBUG] [Thread-27560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:22:51.909 [DEBUG] [Thread-27560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:22:51.909 [INFO] [Thread-27560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:22:51.912 [DEBUG] [Thread-27560] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:22:51.912 [DEBUG] [Thread-27560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:22:51.912 [DEBUG] [Thread-27560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:22:51.912 [DEBUG] [Thread-27560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:22:51.912 [DEBUG] [Thread-27560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:22:51.912 [DEBUG] [Thread-27560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:22:51.912 [DEBUG] [Thread-27560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:22:51.913 [DEBUG] [Thread-27560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:22:51.913 [DEBUG] [Thread-27560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:22:51.913 [DEBUG] [Thread-27560] [transport.py] [_log()] client lang: <none>
2026-04-15T23:22:51.913 [DEBUG] [Thread-27560] [transport.py] [_log()] server lang: <none>
2026-04-15T23:22:51.913 [DEBUG] [Thread-27560] [transport.py] [_log()] kex follows: False
2026-04-15T23:22:51.913 [DEBUG] [Thread-27560] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:22:51.913 [DEBUG] [Thread-27560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:22:51.913 [DEBUG] [Thread-27560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:22:51.913 [DEBUG] [Thread-27560] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:22:51.913 [DEBUG] [Thread-27560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:22:51.913 [DEBUG] [Thread-27560] [transport.py] [_log()] Compression: none
2026-04-15T23:22:51.914 [DEBUG] [Thread-27560] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:22:51.930 [DEBUG] [Thread-27560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:22:51.931 [DEBUG] [Thread-27560] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:22:51.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:22:51.932 [DEBUG] [Thread-27560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:22:51.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:22:51.933 [DEBUG] [Thread-27560] [transport.py] [_log()] userauth is OK
2026-04-15T23:22:51.933 [DEBUG] [Thread-27560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:22:51.933 [DEBUG] [Thread-27560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:22:51.933 [DEBUG] [Thread-27560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:22:51.933 [DEBUG] [Thread-27560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:22:51.960 [INFO] [Thread-27560] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:22:51.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:22:52.727 [DEBUG] [Thread-27560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:22:52.728 [DEBUG] [Thread-27560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:22:52.728 [DEBUG] [Thread-27560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:22:52.768 [DEBUG] [Thread-27560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:22:52.768 [DEBUG] [Thread-27560] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:22:52.771 [DEBUG] [Thread-27560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:22:52.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:22:52.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:22:52.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:22:52.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:22:52.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:22:52.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:22:52.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:22:52.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:22:52.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:22:52.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.890407 -999.00   +9.50   5.50     81   +6.40 1 1 1 2 1     0    0 3.35 17.67 ZNESW 6.3 5.5 96.5 9.7 9.8 -24.8 9.7 -23.4 9.3 -21.4 9.7 -23.4
2026-04-15T23:22:52.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:22:52.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:22:52.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.890407
2026-04-15T23:22:52.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:22:52.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:22:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:22:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:22:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:22:52.794 [DEBUG] [Thread-27560] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:22:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:22:16', tmtdew=3.35677, humidity=79.6619, cloud=0.0, wind=9.75816, temperature=8.88077, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:22:11.165', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.07474999999999987, -0.01774999999999949, -0.07950000000000124, -0.08750000000000036, -0.022749999999998494, 0.00849999999999973, 0.0032500000000013074, 0.01750000000000007, -0.07499999999999929, -0.036749999999999616, -0.09399999999999942, -0.03750000000000142, 0.009249999999999758, -0.01249999999999929, -0.023500000000002075, -0.034750000000000725, -0.05550000000000033, -0.016500000000000625, -0.024750000000000938, -0.008000000000000895, 0.0032499999999977547, -0.014749999999999375, 0.00024999999999941735, 0.021999999999998465, -0.07150000000000034, -0.00024999999999941735, 0.005499999999999616, 0.01750000000000007, 0.019000000000000128, 0.019000000000001904, 0.036000000000001364, -0.06975000000000087], zp_timestamp='2026-04-15T21:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:22:53.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:22:53.047 [DEBUG] [Thread-27563] [transport.py] [_log()] starting thread (client mode): 0xee904b50
2026-04-15T23:22:53.047 [DEBUG] [Thread-27563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:22:53.062 [DEBUG] [Thread-27563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:22:53.062 [INFO] [Thread-27563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:22:53.069 [DEBUG] [Thread-27563] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:22:53.069 [DEBUG] [Thread-27563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:22:53.069 [DEBUG] [Thread-27563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:22:53.069 [DEBUG] [Thread-27563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:22:53.069 [DEBUG] [Thread-27563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:22:53.070 [DEBUG] [Thread-27563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:22:53.070 [DEBUG] [Thread-27563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:22:53.070 [DEBUG] [Thread-27563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:22:53.070 [DEBUG] [Thread-27563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:22:53.070 [DEBUG] [Thread-27563] [transport.py] [_log()] client lang: <none>
2026-04-15T23:22:53.070 [DEBUG] [Thread-27563] [transport.py] [_log()] server lang: <none>
2026-04-15T23:22:53.070 [DEBUG] [Thread-27563] [transport.py] [_log()] kex follows: False
2026-04-15T23:22:53.070 [DEBUG] [Thread-27563] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:22:53.070 [DEBUG] [Thread-27563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:22:53.070 [DEBUG] [Thread-27563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:22:53.070 [DEBUG] [Thread-27563] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:22:53.070 [DEBUG] [Thread-27563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:22:53.071 [DEBUG] [Thread-27563] [transport.py] [_log()] Compression: none
2026-04-15T23:22:53.071 [DEBUG] [Thread-27563] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:22:53.128 [DEBUG] [Thread-27563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:22:53.128 [DEBUG] [Thread-27563] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:22:53.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:22:53.129 [DEBUG] [Thread-27563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:22:53.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:22:53.187 [DEBUG] [Thread-27563] [transport.py] [_log()] userauth is OK
2026-04-15T23:22:53.187 [DEBUG] [Thread-27563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:22:53.187 [DEBUG] [Thread-27563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:22:53.187 [DEBUG] [Thread-27563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:22:53.187 [DEBUG] [Thread-27563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:22:53.207 [INFO] [Thread-27563] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:22:53.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:22:53.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:22:54.054 [DEBUG] [Thread-27563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:22:54.055 [DEBUG] [Thread-27563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:22:54.104 [DEBUG] [Thread-27563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:22:54.104 [DEBUG] [Thread-27563] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:22:54.114 [DEBUG] [Thread-27563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:22:54.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:22:54.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')
2026-04-15T23:22:54.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
2026-04-15T23:22:54.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:22:54.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:22:54.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:22:54.149 [DEBUG] [Thread-27563] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:22:56.400 [DEBUG] [Thread-27565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:23:11.438 [DEBUG] [Thread-27566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:23:12.117 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:23:12.118 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:23:24.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:23:24.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:23:24.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
2026-04-15T23:23:25.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 22, 51), 3.00688, 81.357, 0.0, 12.8808, 8.72836, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:23:25.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:22:51
2026-04-15T23:23:25.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:23:26.354 [DEBUG] [Thread-27567] [transport.py] [_log()] starting thread (client mode): 0xee906ce0
2026-04-15T23:23:26.354 [DEBUG] [Thread-27567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:23:26.374 [DEBUG] [Thread-27567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:23:26.374 [INFO] [Thread-27567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:23:26.377 [DEBUG] [Thread-27567] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:23:26.377 [DEBUG] [Thread-27567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:23:26.377 [DEBUG] [Thread-27567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:23:26.377 [DEBUG] [Thread-27567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:23:26.378 [DEBUG] [Thread-27567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:23:26.378 [DEBUG] [Thread-27567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:23:26.378 [DEBUG] [Thread-27567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:23:26.378 [DEBUG] [Thread-27567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:23:26.378 [DEBUG] [Thread-27567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:23:26.378 [DEBUG] [Thread-27567] [transport.py] [_log()] client lang: <none>
2026-04-15T23:23:26.378 [DEBUG] [Thread-27567] [transport.py] [_log()] server lang: <none>
2026-04-15T23:23:26.378 [DEBUG] [Thread-27567] [transport.py] [_log()] kex follows: False
2026-04-15T23:23:26.378 [DEBUG] [Thread-27567] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:23:26.378 [DEBUG] [Thread-27567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:23:26.378 [DEBUG] [Thread-27567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:23:26.378 [DEBUG] [Thread-27567] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:23:26.378 [DEBUG] [Thread-27567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:23:26.378 [DEBUG] [Thread-27567] [transport.py] [_log()] Compression: none
2026-04-15T23:23:26.378 [DEBUG] [Thread-27567] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:23:26.394 [DEBUG] [Thread-27567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:23:26.394 [DEBUG] [Thread-27567] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:23:26.395 [DEBUG] [Thread-27567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:23:26.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:23:26.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:23:26.396 [DEBUG] [Thread-27567] [transport.py] [_log()] userauth is OK
2026-04-15T23:23:26.396 [DEBUG] [Thread-27567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:23:26.396 [DEBUG] [Thread-27567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:23:26.396 [DEBUG] [Thread-27567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:23:26.396 [DEBUG] [Thread-27567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:23:26.411 [INFO] [Thread-27567] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:23:26.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:23:26.468 [DEBUG] [Thread-27569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:23:27.166 [DEBUG] [Thread-27567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:23:27.166 [DEBUG] [Thread-27567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:23:27.166 [DEBUG] [Thread-27567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:23:27.207 [DEBUG] [Thread-27567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:23:27.207 [DEBUG] [Thread-27567] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:23:27.210 [DEBUG] [Thread-27567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:23:27.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:23:27.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:23:27.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:23:27.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:23:27.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:23:27.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:23:27.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:23:27.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:23:27.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:23:27.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.890754 -999.00   +9.50   6.59     81   +6.40 1 1 1 2 1     0    0 3.39 19.82 ZNESW 7.7 6.6 110.0 11.7 9.8 -24.8 9.7 -23.6 9.3 -21.4 9.7 -23.3
2026-04-15T23:23:27.237 [DEBUG] [Thread-27567] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:23:27.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:23:27.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:23:27.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.890754
2026-04-15T23:23:27.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:23:27.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:23:27.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:23:27.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:23:27.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:23:27.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:22:51', tmtdew=3.00688, humidity=81.357, cloud=0.0, wind=12.8808, temperature=8.72836, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:22:41.146', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.07474999999999987, -0.01774999999999949, -0.07950000000000124, -0.08750000000000036, -0.022749999999998494, 0.00849999999999973, 0.0032500000000013074, 0.01750000000000007, -0.07499999999999929, -0.036749999999999616, -0.09399999999999942, -0.03750000000000142, 0.009249999999999758, -0.01249999999999929, -0.023500000000002075, -0.034750000000000725, -0.05550000000000033, -0.016500000000000625, -0.024750000000000938, -0.008000000000000895, 0.0032499999999977547, -0.014749999999999375, 0.00024999999999941735, 0.021999999999998465, -0.07150000000000034, -0.00024999999999941735, 0.005499999999999616, 0.01750000000000007, 0.019000000000000128, 0.019000000000001904, 0.036000000000001364, -0.06975000000000087], zp_timestamp='2026-04-15T21:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:23:27.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:23:27.493 [DEBUG] [Thread-27571] [transport.py] [_log()] starting thread (client mode): 0xf13ca7a0
2026-04-15T23:23:27.493 [DEBUG] [Thread-27571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:23:27.508 [DEBUG] [Thread-27571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:23:27.508 [INFO] [Thread-27571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:23:27.515 [DEBUG] [Thread-27571] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:23:27.515 [DEBUG] [Thread-27571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:23:27.515 [DEBUG] [Thread-27571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:23:27.515 [DEBUG] [Thread-27571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:23:27.516 [DEBUG] [Thread-27571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:23:27.516 [DEBUG] [Thread-27571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:23:27.516 [DEBUG] [Thread-27571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:23:27.516 [DEBUG] [Thread-27571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:23:27.516 [DEBUG] [Thread-27571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:23:27.516 [DEBUG] [Thread-27571] [transport.py] [_log()] client lang: <none>
2026-04-15T23:23:27.516 [DEBUG] [Thread-27571] [transport.py] [_log()] server lang: <none>
2026-04-15T23:23:27.516 [DEBUG] [Thread-27571] [transport.py] [_log()] kex follows: False
2026-04-15T23:23:27.516 [DEBUG] [Thread-27571] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:23:27.516 [DEBUG] [Thread-27571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:23:27.516 [DEBUG] [Thread-27571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:23:27.516 [DEBUG] [Thread-27571] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:23:27.517 [DEBUG] [Thread-27571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:23:27.517 [DEBUG] [Thread-27571] [transport.py] [_log()] Compression: none
2026-04-15T23:23:27.517 [DEBUG] [Thread-27571] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:23:27.575 [DEBUG] [Thread-27571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:23:27.576 [DEBUG] [Thread-27571] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:23:27.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:23:27.576 [DEBUG] [Thread-27571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:23:27.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:23:27.631 [DEBUG] [Thread-27571] [transport.py] [_log()] userauth is OK
2026-04-15T23:23:27.631 [DEBUG] [Thread-27571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:23:27.631 [DEBUG] [Thread-27571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:23:27.631 [DEBUG] [Thread-27571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:23:27.632 [DEBUG] [Thread-27571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:23:27.659 [INFO] [Thread-27571] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:23:27.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:23:27.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:23:28.473 [DEBUG] [Thread-27571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:23:28.473 [DEBUG] [Thread-27571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:23:28.522 [DEBUG] [Thread-27571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:23:28.522 [DEBUG] [Thread-27571] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:23:28.531 [DEBUG] [Thread-27571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:23:28.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:23:28.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')
2026-04-15T23:23:28.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
2026-04-15T23:23:28.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:23:28.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:23:28.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:23:28.570 [DEBUG] [Thread-27571] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:23:35.412 [DEBUG] [Thread-27573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:23:41.496 [DEBUG] [Thread-27574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:23:56.542 [DEBUG] [Thread-27575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:23:58.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:23:58.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:23:58.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
2026-04-15T23:23:59.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 23, 27), 3.29717, 79.7117, 0.0, 9.9522, 8.84759, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:23:59.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:23:27
2026-04-15T23:24:00.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:24:00.670 [DEBUG] [Thread-27576] [transport.py] [_log()] starting thread (client mode): 0xf13ca0e0
2026-04-15T23:24:00.670 [DEBUG] [Thread-27576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:24:00.690 [DEBUG] [Thread-27576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:24:00.690 [INFO] [Thread-27576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:24:00.691 [DEBUG] [Thread-27576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:24:00.691 [DEBUG] [Thread-27576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:24:00.691 [DEBUG] [Thread-27576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:24:00.691 [DEBUG] [Thread-27576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:24:00.691 [DEBUG] [Thread-27576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:24:00.692 [DEBUG] [Thread-27576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:24:00.692 [DEBUG] [Thread-27576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:24:00.692 [DEBUG] [Thread-27576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:24:00.692 [DEBUG] [Thread-27576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:24:00.692 [DEBUG] [Thread-27576] [transport.py] [_log()] client lang: <none>
2026-04-15T23:24:00.692 [DEBUG] [Thread-27576] [transport.py] [_log()] server lang: <none>
2026-04-15T23:24:00.692 [DEBUG] [Thread-27576] [transport.py] [_log()] kex follows: False
2026-04-15T23:24:00.692 [DEBUG] [Thread-27576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:24:00.692 [DEBUG] [Thread-27576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:24:00.692 [DEBUG] [Thread-27576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:24:00.692 [DEBUG] [Thread-27576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:24:00.693 [DEBUG] [Thread-27576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:24:00.693 [DEBUG] [Thread-27576] [transport.py] [_log()] Compression: none
2026-04-15T23:24:00.693 [DEBUG] [Thread-27576] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:24:00.701 [DEBUG] [Thread-27576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:24:00.702 [DEBUG] [Thread-27576] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:24:00.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:24:00.702 [DEBUG] [Thread-27576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:24:00.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:24:00.703 [DEBUG] [Thread-27576] [transport.py] [_log()] userauth is OK
2026-04-15T23:24:00.703 [DEBUG] [Thread-27576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:24:00.704 [DEBUG] [Thread-27576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:24:00.704 [DEBUG] [Thread-27576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:24:00.704 [DEBUG] [Thread-27576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:24:00.722 [INFO] [Thread-27576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:24:00.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:24:01.522 [DEBUG] [Thread-27576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:24:01.523 [DEBUG] [Thread-27576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:24:01.523 [DEBUG] [Thread-27576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:24:01.564 [DEBUG] [Thread-27576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:24:01.564 [DEBUG] [Thread-27576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:24:01.566 [DEBUG] [Thread-27576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:24:01.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:24:01.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:24:01.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:24:01.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:24:01.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:24:01.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:24:01.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:24:01.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:24:01.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:24:01.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.891101 -999.00   +9.50   7.91     81   +6.40 1 1 1 2 1     0    0 3.47 23.62 ZNESW 8.7 7.9 118.0 9.7 9.8 -24.9 9.7 -23.6 9.4 -21.5 9.7 -23.4
2026-04-15T23:24:01.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:24:01.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:24:01.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.891101
2026-04-15T23:24:01.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:24:01.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:24:01.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:24:01.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:24:01.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:24:01.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:23:27', tmtdew=3.29717, humidity=79.7117, cloud=0.0, wind=9.9522, temperature=8.84759, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:23:11.126', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.07474999999999987, -0.01774999999999949, -0.07950000000000124, -0.08750000000000036, -0.022749999999998494, 0.00849999999999973, 0.0032500000000013074, 0.01750000000000007, -0.07499999999999929, -0.036749999999999616, -0.09399999999999942, -0.03750000000000142, 0.009249999999999758, -0.01249999999999929, -0.023500000000002075, -0.034750000000000725, -0.05550000000000033, -0.016500000000000625, -0.024750000000000938, -0.008000000000000895, 0.0032499999999977547, -0.014749999999999375, 0.00024999999999941735, 0.021999999999998465, -0.07150000000000034, -0.00024999999999941735, 0.005499999999999616, 0.01750000000000007, 0.019000000000000128, 0.019000000000001904, 0.036000000000001364, -0.06975000000000087], zp_timestamp='2026-04-15T21:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:24:01.585 [DEBUG] [Thread-27576] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:24:01.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:24:01.821 [DEBUG] [Thread-27579] [transport.py] [_log()] starting thread (client mode): 0xee904460
2026-04-15T23:24:01.822 [DEBUG] [Thread-27579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:24:01.836 [DEBUG] [Thread-27579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:24:01.836 [INFO] [Thread-27579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:24:01.846 [DEBUG] [Thread-27579] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:24:01.846 [DEBUG] [Thread-27579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:24:01.846 [DEBUG] [Thread-27579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:24:01.846 [DEBUG] [Thread-27579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:24:01.847 [DEBUG] [Thread-27579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:24:01.847 [DEBUG] [Thread-27579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:24:01.847 [DEBUG] [Thread-27579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:24:01.847 [DEBUG] [Thread-27579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:24:01.847 [DEBUG] [Thread-27579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:24:01.847 [DEBUG] [Thread-27579] [transport.py] [_log()] client lang: <none>
2026-04-15T23:24:01.847 [DEBUG] [Thread-27579] [transport.py] [_log()] server lang: <none>
2026-04-15T23:24:01.847 [DEBUG] [Thread-27579] [transport.py] [_log()] kex follows: False
2026-04-15T23:24:01.847 [DEBUG] [Thread-27579] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:24:01.847 [DEBUG] [Thread-27579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:24:01.847 [DEBUG] [Thread-27579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:24:01.847 [DEBUG] [Thread-27579] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:24:01.847 [DEBUG] [Thread-27579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:24:01.847 [DEBUG] [Thread-27579] [transport.py] [_log()] Compression: none
2026-04-15T23:24:01.847 [DEBUG] [Thread-27579] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:24:01.902 [DEBUG] [Thread-27579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:24:01.903 [DEBUG] [Thread-27579] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:24:01.903 [DEBUG] [Thread-27579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:24:01.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:24:01.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:24:01.959 [DEBUG] [Thread-27579] [transport.py] [_log()] userauth is OK
2026-04-15T23:24:01.959 [DEBUG] [Thread-27579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:24:01.959 [DEBUG] [Thread-27579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:24:01.959 [DEBUG] [Thread-27579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:24:01.960 [DEBUG] [Thread-27579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:24:01.984 [INFO] [Thread-27579] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:24:01.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:24:01.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:24:02.816 [DEBUG] [Thread-27579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:24:02.816 [DEBUG] [Thread-27579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:24:02.864 [DEBUG] [Thread-27579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:24:02.864 [DEBUG] [Thread-27579] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:24:02.873 [DEBUG] [Thread-27579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:24:02.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:24:02.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')
2026-04-15T23:24:02.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') -> 00000000
2026-04-15T23:24:02.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:24:02.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:24:02.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:24:02.908 [DEBUG] [Thread-27579] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:24:11.575 [DEBUG] [Thread-27581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:24:12.322 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:24:12.324 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:24:26.617 [DEBUG] [Thread-27582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:24:32.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:24:32.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:24:32.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
2026-04-15T23:24:34.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 24, 2), 3.29538, 79.7283, 0.0, 10.0933, 8.89736, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:24:34.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:24:02
2026-04-15T23:24:34.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:24:35.064 [DEBUG] [Thread-27583] [transport.py] [_log()] starting thread (client mode): 0xf13e1e10
2026-04-15T23:24:35.065 [DEBUG] [Thread-27583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:24:35.084 [DEBUG] [Thread-27583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:24:35.084 [INFO] [Thread-27583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:24:35.085 [DEBUG] [Thread-27583] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:24:35.085 [DEBUG] [Thread-27583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] client lang: <none>
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] server lang: <none>
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] kex follows: False
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] Compression: none
2026-04-15T23:24:35.086 [DEBUG] [Thread-27583] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:24:35.094 [DEBUG] [Thread-27583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:24:35.094 [DEBUG] [Thread-27583] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:24:35.094 [DEBUG] [Thread-27583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:24:35.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:24:35.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:24:35.096 [DEBUG] [Thread-27583] [transport.py] [_log()] userauth is OK
2026-04-15T23:24:35.096 [DEBUG] [Thread-27583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:24:35.096 [DEBUG] [Thread-27583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:24:35.096 [DEBUG] [Thread-27583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:24:35.096 [DEBUG] [Thread-27583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:24:35.116 [INFO] [Thread-27583] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:24:35.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:24:35.564 [DEBUG] [Thread-27585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:24:35.863 [DEBUG] [Thread-27583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:24:35.863 [DEBUG] [Thread-27583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:24:35.863 [DEBUG] [Thread-27583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:24:35.903 [DEBUG] [Thread-27583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:24:35.904 [DEBUG] [Thread-27583] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:24:35.906 [DEBUG] [Thread-27583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:24:35.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:24:35.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:24:35.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:24:35.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:24:35.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:24:35.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:24:35.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:24:35.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:24:35.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:24:35.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.891448 -999.00   +9.50   9.17     81   +6.40 1 1 1 2 1     0    0 3.52 25.37 ZNESW 7.3 9.2 115.8 11.2 9.8 -24.8 9.6 -23.7 9.3 -21.5 9.6 -23.6
2026-04-15T23:24:35.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:24:35.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:24:35.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.891448
2026-04-15T23:24:35.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:24:35.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:24:35.927 [DEBUG] [Thread-27583] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:24:35.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:24:35.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:24:35.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:24:35.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:24:02', tmtdew=3.29538, humidity=79.7283, cloud=0.0, wind=10.0933, temperature=8.89736, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:23:41.107', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.07474999999999987, -0.01774999999999949, -0.07950000000000124, -0.08750000000000036, -0.022749999999998494, 0.00849999999999973, 0.0032500000000013074, 0.01750000000000007, -0.07499999999999929, -0.036749999999999616, -0.09399999999999942, -0.03750000000000142, 0.009249999999999758, -0.01249999999999929, -0.023500000000002075, -0.034750000000000725, -0.05550000000000033, -0.016500000000000625, -0.024750000000000938, -0.008000000000000895, 0.0032499999999977547, -0.014749999999999375, 0.00024999999999941735, 0.021999999999998465, -0.07150000000000034, -0.00024999999999941735, 0.005499999999999616, 0.01750000000000007, 0.019000000000000128, 0.019000000000001904, 0.036000000000001364, -0.06975000000000087], zp_timestamp='2026-04-15T21:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:24:36.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:24:36.157 [DEBUG] [Thread-27587] [transport.py] [_log()] starting thread (client mode): 0xee9c7a30
2026-04-15T23:24:36.157 [DEBUG] [Thread-27587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:24:36.172 [DEBUG] [Thread-27587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:24:36.172 [INFO] [Thread-27587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:24:36.180 [DEBUG] [Thread-27587] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:24:36.180 [DEBUG] [Thread-27587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:24:36.180 [DEBUG] [Thread-27587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:24:36.180 [DEBUG] [Thread-27587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:24:36.180 [DEBUG] [Thread-27587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:24:36.180 [DEBUG] [Thread-27587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:24:36.181 [DEBUG] [Thread-27587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:24:36.181 [DEBUG] [Thread-27587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:24:36.181 [DEBUG] [Thread-27587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:24:36.181 [DEBUG] [Thread-27587] [transport.py] [_log()] client lang: <none>
2026-04-15T23:24:36.181 [DEBUG] [Thread-27587] [transport.py] [_log()] server lang: <none>
2026-04-15T23:24:36.181 [DEBUG] [Thread-27587] [transport.py] [_log()] kex follows: False
2026-04-15T23:24:36.181 [DEBUG] [Thread-27587] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:24:36.181 [DEBUG] [Thread-27587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:24:36.181 [DEBUG] [Thread-27587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:24:36.181 [DEBUG] [Thread-27587] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:24:36.181 [DEBUG] [Thread-27587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:24:36.181 [DEBUG] [Thread-27587] [transport.py] [_log()] Compression: none
2026-04-15T23:24:36.181 [DEBUG] [Thread-27587] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:24:36.239 [DEBUG] [Thread-27587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:24:36.239 [DEBUG] [Thread-27587] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:24:36.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:24:36.239 [DEBUG] [Thread-27587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:24:36.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:24:36.295 [DEBUG] [Thread-27587] [transport.py] [_log()] userauth is OK
2026-04-15T23:24:36.295 [DEBUG] [Thread-27587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:24:36.295 [DEBUG] [Thread-27587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:24:36.295 [DEBUG] [Thread-27587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:24:36.295 [DEBUG] [Thread-27587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:24:36.313 [INFO] [Thread-27587] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:24:36.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:24:36.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:24:37.118 [DEBUG] [Thread-27587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:24:37.118 [DEBUG] [Thread-27587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:24:37.166 [DEBUG] [Thread-27587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:24:37.166 [DEBUG] [Thread-27587] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:24:37.175 [DEBUG] [Thread-27587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:24:37.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:24:37.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')
2026-04-15T23:24:37.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
2026-04-15T23:24:37.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:24:37.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:24:37.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:24:37.211 [DEBUG] [Thread-27587] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:24:41.647 [DEBUG] [Thread-27589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:24:56.692 [DEBUG] [Thread-27590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:25:07.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:25:07.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:25:07.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
2026-04-15T23:25:08.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 24, 38), 2.97386, 81.5561, 0.0, 13.3394, 8.8279, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:25:08.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:24:38
2026-04-15T23:25:08.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:25:09.279 [DEBUG] [Thread-27591] [transport.py] [_log()] starting thread (client mode): 0xf13e1f60
2026-04-15T23:25:09.279 [DEBUG] [Thread-27591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:25:09.301 [DEBUG] [Thread-27591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:25:09.301 [INFO] [Thread-27591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:25:09.303 [DEBUG] [Thread-27591] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:25:09.303 [DEBUG] [Thread-27591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:25:09.303 [DEBUG] [Thread-27591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:25:09.303 [DEBUG] [Thread-27591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:25:09.303 [DEBUG] [Thread-27591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:25:09.303 [DEBUG] [Thread-27591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:25:09.303 [DEBUG] [Thread-27591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:25:09.303 [DEBUG] [Thread-27591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:25:09.303 [DEBUG] [Thread-27591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:25:09.303 [DEBUG] [Thread-27591] [transport.py] [_log()] client lang: <none>
2026-04-15T23:25:09.303 [DEBUG] [Thread-27591] [transport.py] [_log()] server lang: <none>
2026-04-15T23:25:09.303 [DEBUG] [Thread-27591] [transport.py] [_log()] kex follows: False
2026-04-15T23:25:09.304 [DEBUG] [Thread-27591] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:25:09.304 [DEBUG] [Thread-27591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:25:09.304 [DEBUG] [Thread-27591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:25:09.304 [DEBUG] [Thread-27591] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:25:09.304 [DEBUG] [Thread-27591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:25:09.304 [DEBUG] [Thread-27591] [transport.py] [_log()] Compression: none
2026-04-15T23:25:09.304 [DEBUG] [Thread-27591] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:25:09.315 [DEBUG] [Thread-27591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:25:09.316 [DEBUG] [Thread-27591] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:25:09.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:25:09.316 [DEBUG] [Thread-27591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:25:09.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:25:09.317 [DEBUG] [Thread-27591] [transport.py] [_log()] userauth is OK
2026-04-15T23:25:09.318 [DEBUG] [Thread-27591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:25:09.318 [DEBUG] [Thread-27591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:25:09.318 [DEBUG] [Thread-27591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:25:09.318 [DEBUG] [Thread-27591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:25:09.342 [INFO] [Thread-27591] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:25:09.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:25:11.437 [DEBUG] [Thread-27591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:25:11.438 [DEBUG] [Thread-27591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:25:11.438 [DEBUG] [Thread-27591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:25:11.479 [DEBUG] [Thread-27591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:25:11.479 [DEBUG] [Thread-27591] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:25:11.481 [DEBUG] [Thread-27591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:25:11.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:25:11.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:25:11.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:25:11.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:25:11.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:25:11.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:25:11.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:25:11.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:25:11.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:25:11.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.891795 -999.00   +9.50   6.78     81   +6.40 1 1 1 2 1     0    0 3.64 26.30 ZNESW 7.9 6.8 103.6 10.3 -999.0 -999.0 9.7 -23.7 9.3 -21.6 9.7 -23.6
2026-04-15T23:25:11.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:25:11.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:25:11.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.891795
2026-04-15T23:25:11.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:25:11.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:25:11.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:25:11.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:25:11.503 [DEBUG] [Thread-27591] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:25:11.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:25:11.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:24:38', tmtdew=2.97386, humidity=81.5561, cloud=0.0, wind=13.3394, temperature=8.8279, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:24:11.088', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.07474999999999987, -0.01774999999999949, -0.07950000000000124, -0.08750000000000036, -0.022749999999998494, 0.00849999999999973, 0.0032500000000013074, 0.01750000000000007, -0.07499999999999929, -0.036749999999999616, -0.09399999999999942, -0.03750000000000142, 0.009249999999999758, -0.01249999999999929, -0.023500000000002075, -0.034750000000000725, -0.05550000000000033, -0.016500000000000625, -0.024750000000000938, -0.008000000000000895, 0.0032499999999977547, -0.014749999999999375, 0.00024999999999941735, 0.021999999999998465, -0.07150000000000034, -0.00024999999999941735, 0.005499999999999616, 0.01750000000000007, 0.019000000000000128, 0.019000000000001904, 0.036000000000001364, -0.06975000000000087], zp_timestamp='2026-04-15T21:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:25:11.721 [DEBUG] [Thread-27594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:25:11.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:25:11.742 [DEBUG] [Thread-27595] [transport.py] [_log()] starting thread (client mode): 0xf1367340
2026-04-15T23:25:11.742 [DEBUG] [Thread-27595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:25:11.757 [DEBUG] [Thread-27595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:25:11.757 [INFO] [Thread-27595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:25:11.765 [DEBUG] [Thread-27595] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:25:11.765 [DEBUG] [Thread-27595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:25:11.765 [DEBUG] [Thread-27595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:25:11.765 [DEBUG] [Thread-27595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:25:11.765 [DEBUG] [Thread-27595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:25:11.765 [DEBUG] [Thread-27595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:25:11.765 [DEBUG] [Thread-27595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:25:11.765 [DEBUG] [Thread-27595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:25:11.765 [DEBUG] [Thread-27595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:25:11.766 [DEBUG] [Thread-27595] [transport.py] [_log()] client lang: <none>
2026-04-15T23:25:11.766 [DEBUG] [Thread-27595] [transport.py] [_log()] server lang: <none>
2026-04-15T23:25:11.766 [DEBUG] [Thread-27595] [transport.py] [_log()] kex follows: False
2026-04-15T23:25:11.766 [DEBUG] [Thread-27595] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:25:11.766 [DEBUG] [Thread-27595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:25:11.766 [DEBUG] [Thread-27595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:25:11.766 [DEBUG] [Thread-27595] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:25:11.766 [DEBUG] [Thread-27595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:25:11.766 [DEBUG] [Thread-27595] [transport.py] [_log()] Compression: none
2026-04-15T23:25:11.766 [DEBUG] [Thread-27595] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:25:11.822 [DEBUG] [Thread-27595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:25:11.822 [DEBUG] [Thread-27595] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:25:11.823 [DEBUG] [Thread-27595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:25:11.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:25:11.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:25:11.879 [DEBUG] [Thread-27595] [transport.py] [_log()] userauth is OK
2026-04-15T23:25:11.880 [DEBUG] [Thread-27595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:25:11.880 [DEBUG] [Thread-27595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:25:11.880 [DEBUG] [Thread-27595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:25:11.880 [DEBUG] [Thread-27595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:25:11.905 [INFO] [Thread-27595] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:25:11.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:25:11.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:25:12.525 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:25:12.526 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:25:12.764 [DEBUG] [Thread-27595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:25:12.764 [DEBUG] [Thread-27595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:25:12.815 [DEBUG] [Thread-27595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:25:12.815 [DEBUG] [Thread-27595] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:25:12.824 [DEBUG] [Thread-27595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:25:12.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:25:12.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')
2026-04-15T23:25:12.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
2026-04-15T23:25:12.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:25:12.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:25:12.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:25:12.859 [DEBUG] [Thread-27595] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:25:26.762 [DEBUG] [Thread-27597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:25:35.711 [DEBUG] [Thread-27598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:25:41.793 [DEBUG] [Thread-27599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:25:42.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:25:42.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:25:42.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
2026-04-15T23:25:44.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 25, 13), 3.28731, 79.7781, 0.0, 10.1462, 8.98054, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:25:44.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:25:13
2026-04-15T23:25:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:25:44.938 [DEBUG] [Thread-27600] [transport.py] [_log()] starting thread (client mode): 0xf1350b20
2026-04-15T23:25:44.938 [DEBUG] [Thread-27600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:25:44.957 [DEBUG] [Thread-27600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:25:44.957 [INFO] [Thread-27600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:25:44.961 [DEBUG] [Thread-27600] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:25:44.961 [DEBUG] [Thread-27600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:25:44.961 [DEBUG] [Thread-27600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:25:44.961 [DEBUG] [Thread-27600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:25:44.961 [DEBUG] [Thread-27600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:25:44.961 [DEBUG] [Thread-27600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:25:44.961 [DEBUG] [Thread-27600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:25:44.962 [DEBUG] [Thread-27600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:25:44.962 [DEBUG] [Thread-27600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:25:44.962 [DEBUG] [Thread-27600] [transport.py] [_log()] client lang: <none>
2026-04-15T23:25:44.962 [DEBUG] [Thread-27600] [transport.py] [_log()] server lang: <none>
2026-04-15T23:25:44.962 [DEBUG] [Thread-27600] [transport.py] [_log()] kex follows: False
2026-04-15T23:25:44.962 [DEBUG] [Thread-27600] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:25:44.962 [DEBUG] [Thread-27600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:25:44.962 [DEBUG] [Thread-27600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:25:44.962 [DEBUG] [Thread-27600] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:25:44.962 [DEBUG] [Thread-27600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:25:44.963 [DEBUG] [Thread-27600] [transport.py] [_log()] Compression: none
2026-04-15T23:25:44.963 [DEBUG] [Thread-27600] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:25:44.982 [DEBUG] [Thread-27600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:25:44.982 [DEBUG] [Thread-27600] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:25:44.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:25:44.983 [DEBUG] [Thread-27600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:25:44.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:25:44.984 [DEBUG] [Thread-27600] [transport.py] [_log()] userauth is OK
2026-04-15T23:25:44.984 [DEBUG] [Thread-27600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:25:44.984 [DEBUG] [Thread-27600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:25:44.985 [DEBUG] [Thread-27600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:25:44.985 [DEBUG] [Thread-27600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:25:45.008 [INFO] [Thread-27600] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:25:45.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:25:45.759 [DEBUG] [Thread-27600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:25:45.760 [DEBUG] [Thread-27600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:25:45.760 [DEBUG] [Thread-27600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:25:45.801 [DEBUG] [Thread-27600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:25:45.801 [DEBUG] [Thread-27600] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:25:45.804 [DEBUG] [Thread-27600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:25:45.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:25:45.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:25:45.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:25:45.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:25:45.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:25:45.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:25:45.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:25:45.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:25:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:25:45.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.892490 -999.00   +9.40   7.38     81   +6.40 1 1 1 2 1     0    0 3.82 31.82 ZNESW 7.7 7.4 105.4 8.5 9.8 -24.7 9.6 -23.6 9.3 -21.6 9.7 -23.5
2026-04-15T23:25:45.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:25:45.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:25:45.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.892490
2026-04-15T23:25:45.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:25:45.830 [DEBUG] [Thread-27600] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:25:45.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:25:45.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:25:45.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:25:45.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:25:45.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:25:13', tmtdew=3.28731, humidity=79.7781, cloud=0.0, wind=10.1462, temperature=8.98054, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:25:11.136', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.07474999999999987, -0.01774999999999949, -0.07950000000000124, -0.08750000000000036, -0.022749999999998494, 0.00849999999999973, 0.0032500000000013074, 0.01750000000000007, -0.07499999999999929, -0.036749999999999616, -0.09399999999999942, -0.03750000000000142, 0.009249999999999758, -0.01249999999999929, -0.023500000000002075, -0.034750000000000725, -0.05550000000000033, -0.016500000000000625, -0.024750000000000938, -0.008000000000000895, 0.0032499999999977547, -0.014749999999999375, 0.00024999999999941735, 0.021999999999998465, -0.07150000000000034, -0.00024999999999941735, 0.005499999999999616, 0.01750000000000007, 0.019000000000000128, 0.019000000000001904, 0.036000000000001364, -0.06975000000000087], zp_timestamp='2026-04-15T21:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:25:46.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:25:46.081 [DEBUG] [Thread-27603] [transport.py] [_log()] starting thread (client mode): 0xf1351e10
2026-04-15T23:25:46.081 [DEBUG] [Thread-27603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:25:46.096 [DEBUG] [Thread-27603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:25:46.096 [INFO] [Thread-27603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:25:46.104 [DEBUG] [Thread-27603] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:25:46.104 [DEBUG] [Thread-27603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:25:46.104 [DEBUG] [Thread-27603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:25:46.104 [DEBUG] [Thread-27603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:25:46.104 [DEBUG] [Thread-27603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:25:46.104 [DEBUG] [Thread-27603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:25:46.104 [DEBUG] [Thread-27603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:25:46.105 [DEBUG] [Thread-27603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:25:46.105 [DEBUG] [Thread-27603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:25:46.105 [DEBUG] [Thread-27603] [transport.py] [_log()] client lang: <none>
2026-04-15T23:25:46.105 [DEBUG] [Thread-27603] [transport.py] [_log()] server lang: <none>
2026-04-15T23:25:46.105 [DEBUG] [Thread-27603] [transport.py] [_log()] kex follows: False
2026-04-15T23:25:46.105 [DEBUG] [Thread-27603] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:25:46.105 [DEBUG] [Thread-27603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:25:46.105 [DEBUG] [Thread-27603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:25:46.105 [DEBUG] [Thread-27603] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:25:46.105 [DEBUG] [Thread-27603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:25:46.105 [DEBUG] [Thread-27603] [transport.py] [_log()] Compression: none
2026-04-15T23:25:46.105 [DEBUG] [Thread-27603] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:25:46.162 [DEBUG] [Thread-27603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:25:46.163 [DEBUG] [Thread-27603] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:25:46.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:25:46.163 [DEBUG] [Thread-27603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:25:46.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:25:46.219 [DEBUG] [Thread-27603] [transport.py] [_log()] userauth is OK
2026-04-15T23:25:46.219 [DEBUG] [Thread-27603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:25:46.219 [DEBUG] [Thread-27603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:25:46.219 [DEBUG] [Thread-27603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:25:46.219 [DEBUG] [Thread-27603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:25:46.238 [INFO] [Thread-27603] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:25:46.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:25:46.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:25:47.092 [DEBUG] [Thread-27603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:25:47.092 [DEBUG] [Thread-27603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:25:47.140 [DEBUG] [Thread-27603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:25:47.140 [DEBUG] [Thread-27603] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:25:47.149 [DEBUG] [Thread-27603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:25:47.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:25:47.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')
2026-04-15T23:25:47.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
2026-04-15T23:25:47.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:25:47.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:25:47.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:25:47.182 [DEBUG] [Thread-27603] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:25:56.823 [DEBUG] [Thread-27605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:26:11.868 [DEBUG] [Thread-27606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:26:12.731 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:26:12.732 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:26:17.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:26:17.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:26:17.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
2026-04-15T23:26:18.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 25, 49), 2.98714, 81.4898, 0.0, 12.7397, 8.89426, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:26:18.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:25:49
2026-04-15T23:26:18.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:26:19.244 [DEBUG] [Thread-27607] [transport.py] [_log()] starting thread (client mode): 0xf1335540
2026-04-15T23:26:19.245 [DEBUG] [Thread-27607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:26:19.265 [DEBUG] [Thread-27607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:26:19.265 [INFO] [Thread-27607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:26:19.268 [DEBUG] [Thread-27607] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:26:19.269 [DEBUG] [Thread-27607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:26:19.269 [DEBUG] [Thread-27607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:26:19.269 [DEBUG] [Thread-27607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:26:19.269 [DEBUG] [Thread-27607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:26:19.269 [DEBUG] [Thread-27607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:26:19.269 [DEBUG] [Thread-27607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:26:19.269 [DEBUG] [Thread-27607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:26:19.269 [DEBUG] [Thread-27607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:26:19.269 [DEBUG] [Thread-27607] [transport.py] [_log()] client lang: <none>
2026-04-15T23:26:19.269 [DEBUG] [Thread-27607] [transport.py] [_log()] server lang: <none>
2026-04-15T23:26:19.269 [DEBUG] [Thread-27607] [transport.py] [_log()] kex follows: False
2026-04-15T23:26:19.269 [DEBUG] [Thread-27607] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:26:19.270 [DEBUG] [Thread-27607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:26:19.270 [DEBUG] [Thread-27607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:26:19.270 [DEBUG] [Thread-27607] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:26:19.270 [DEBUG] [Thread-27607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:26:19.270 [DEBUG] [Thread-27607] [transport.py] [_log()] Compression: none
2026-04-15T23:26:19.270 [DEBUG] [Thread-27607] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:26:19.278 [DEBUG] [Thread-27607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:26:19.279 [DEBUG] [Thread-27607] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:26:19.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:26:19.279 [DEBUG] [Thread-27607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:26:19.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:26:19.281 [DEBUG] [Thread-27607] [transport.py] [_log()] userauth is OK
2026-04-15T23:26:19.281 [DEBUG] [Thread-27607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:26:19.281 [DEBUG] [Thread-27607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:26:19.281 [DEBUG] [Thread-27607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:26:19.281 [DEBUG] [Thread-27607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:26:19.319 [INFO] [Thread-27607] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:26:19.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:26:20.082 [DEBUG] [Thread-27607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:26:20.082 [DEBUG] [Thread-27607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:26:20.082 [DEBUG] [Thread-27607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:26:20.123 [DEBUG] [Thread-27607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:26:20.123 [DEBUG] [Thread-27607] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:26:20.126 [DEBUG] [Thread-27607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:26:20.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:26:20.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:26:20.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:26:20.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:26:20.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:26:20.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:26:20.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:26:20.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:26:20.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:26:20.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.892837 -999.00   +9.40   5.10     81   +6.40 1 1 1 2 1     0    0 3.89 33.52 ZNESW 6.3 5.1 98.4 7.9 9.7 -24.6 9.7 -23.6 9.3 -21.3 9.6 -23.4
2026-04-15T23:26:20.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:26:20.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:26:20.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.892837
2026-04-15T23:26:20.152 [DEBUG] [Thread-27607] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:26:20.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:26:20.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:26:20.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:26:20.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:26:20.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:26:20.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:25:49', tmtdew=2.98714, humidity=81.4898, cloud=0.0, wind=12.7397, temperature=8.89426, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:25:41.117', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.07474999999999987, -0.01774999999999949, -0.07950000000000124, -0.08750000000000036, -0.022749999999998494, 0.00849999999999973, 0.0032500000000013074, 0.01750000000000007, -0.07499999999999929, -0.036749999999999616, -0.09399999999999942, -0.03750000000000142, 0.009249999999999758, -0.01249999999999929, -0.023500000000002075, -0.034750000000000725, -0.05550000000000033, -0.016500000000000625, -0.024750000000000938, -0.008000000000000895, 0.0032499999999977547, -0.014749999999999375, 0.00024999999999941735, 0.021999999999998465, -0.07150000000000034, -0.00024999999999941735, 0.005499999999999616, 0.01750000000000007, 0.019000000000000128, 0.019000000000001904, 0.036000000000001364, -0.06975000000000087], zp_timestamp='2026-04-15T21:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:26:20.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:26:20.412 [DEBUG] [Thread-27610] [transport.py] [_log()] starting thread (client mode): 0xee9c67d0
2026-04-15T23:26:20.412 [DEBUG] [Thread-27610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:26:20.427 [DEBUG] [Thread-27610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:26:20.427 [INFO] [Thread-27610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:26:20.434 [DEBUG] [Thread-27610] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:26:20.434 [DEBUG] [Thread-27610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:26:20.434 [DEBUG] [Thread-27610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:26:20.434 [DEBUG] [Thread-27610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:26:20.434 [DEBUG] [Thread-27610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:26:20.435 [DEBUG] [Thread-27610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:26:20.435 [DEBUG] [Thread-27610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:26:20.435 [DEBUG] [Thread-27610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:26:20.435 [DEBUG] [Thread-27610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:26:20.435 [DEBUG] [Thread-27610] [transport.py] [_log()] client lang: <none>
2026-04-15T23:26:20.435 [DEBUG] [Thread-27610] [transport.py] [_log()] server lang: <none>
2026-04-15T23:26:20.435 [DEBUG] [Thread-27610] [transport.py] [_log()] kex follows: False
2026-04-15T23:26:20.435 [DEBUG] [Thread-27610] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:26:20.435 [DEBUG] [Thread-27610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:26:20.435 [DEBUG] [Thread-27610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:26:20.435 [DEBUG] [Thread-27610] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:26:20.435 [DEBUG] [Thread-27610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:26:20.435 [DEBUG] [Thread-27610] [transport.py] [_log()] Compression: none
2026-04-15T23:26:20.436 [DEBUG] [Thread-27610] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:26:20.493 [DEBUG] [Thread-27610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:26:20.494 [DEBUG] [Thread-27610] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:26:20.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:26:20.494 [DEBUG] [Thread-27610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:26:20.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:26:20.555 [DEBUG] [Thread-27610] [transport.py] [_log()] userauth is OK
2026-04-15T23:26:20.555 [DEBUG] [Thread-27610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:26:20.555 [DEBUG] [Thread-27610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:26:20.556 [DEBUG] [Thread-27610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:26:20.556 [DEBUG] [Thread-27610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:26:20.583 [INFO] [Thread-27610] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:26:20.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:26:20.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:26:21.458 [DEBUG] [Thread-27610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:26:21.458 [DEBUG] [Thread-27610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:26:21.507 [DEBUG] [Thread-27610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:26:21.508 [DEBUG] [Thread-27610] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:26:21.517 [DEBUG] [Thread-27610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:26:21.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:26:21.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')
2026-04-15T23:26:21.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
2026-04-15T23:26:21.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:26:21.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:26:21.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:26:21.553 [DEBUG] [Thread-27610] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:26:26.900 [DEBUG] [Thread-27612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:26:35.881 [DEBUG] [Thread-27613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:26:41.944 [DEBUG] [Thread-27614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:26:51.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:26:51.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:26:51.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
2026-04-15T23:26:52.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 26, 24), 3.34613, 79.7283, 0.0, 9.9522, 8.98054, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:26:52.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:26:24
2026-04-15T23:26:53.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:26:53.732 [DEBUG] [Thread-27615] [transport.py] [_log()] starting thread (client mode): 0xf13c8160
2026-04-15T23:26:53.733 [DEBUG] [Thread-27615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:26:53.752 [DEBUG] [Thread-27615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:26:53.752 [INFO] [Thread-27615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:26:53.755 [DEBUG] [Thread-27615] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:26:53.755 [DEBUG] [Thread-27615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:26:53.756 [DEBUG] [Thread-27615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:26:53.756 [DEBUG] [Thread-27615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:26:53.756 [DEBUG] [Thread-27615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:26:53.756 [DEBUG] [Thread-27615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:26:53.756 [DEBUG] [Thread-27615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:26:53.756 [DEBUG] [Thread-27615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:26:53.756 [DEBUG] [Thread-27615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:26:53.756 [DEBUG] [Thread-27615] [transport.py] [_log()] client lang: <none>
2026-04-15T23:26:53.756 [DEBUG] [Thread-27615] [transport.py] [_log()] server lang: <none>
2026-04-15T23:26:53.756 [DEBUG] [Thread-27615] [transport.py] [_log()] kex follows: False
2026-04-15T23:26:53.757 [DEBUG] [Thread-27615] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:26:53.757 [DEBUG] [Thread-27615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:26:53.757 [DEBUG] [Thread-27615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:26:53.757 [DEBUG] [Thread-27615] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:26:53.757 [DEBUG] [Thread-27615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:26:53.757 [DEBUG] [Thread-27615] [transport.py] [_log()] Compression: none
2026-04-15T23:26:53.757 [DEBUG] [Thread-27615] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:26:53.775 [DEBUG] [Thread-27615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:26:53.775 [DEBUG] [Thread-27615] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:26:53.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:26:53.776 [DEBUG] [Thread-27615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:26:53.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:26:53.777 [DEBUG] [Thread-27615] [transport.py] [_log()] userauth is OK
2026-04-15T23:26:53.777 [DEBUG] [Thread-27615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:26:53.777 [DEBUG] [Thread-27615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:26:53.777 [DEBUG] [Thread-27615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:26:53.777 [DEBUG] [Thread-27615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:26:53.801 [INFO] [Thread-27615] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:26:53.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:26:54.620 [DEBUG] [Thread-27615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:26:54.620 [DEBUG] [Thread-27615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:26:54.621 [DEBUG] [Thread-27615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:26:54.661 [DEBUG] [Thread-27615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:26:54.661 [DEBUG] [Thread-27615] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:26:54.665 [DEBUG] [Thread-27615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:26:54.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:26:54.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:26:54.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:26:54.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:26:54.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:26:54.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:26:54.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:26:54.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:26:54.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:26:54.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.893184 -999.00   +9.30   7.16     81   +6.40 1 1 1 2 1     0    0 3.90 32.55 ZNESW 7.9 7.2 119.4 9.0 9.7 -24.6 9.6 -23.5 9.3 -21.4 9.7 -23.3
2026-04-15T23:26:54.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:26:54.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:26:54.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.893184
2026-04-15T23:26:54.687 [DEBUG] [Thread-27615] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:26:54.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:26:54.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:26:54.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:26:54.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:26:54.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:26:54.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:26:24', tmtdew=3.34613, humidity=79.7283, cloud=0.0, wind=9.9522, temperature=8.98054, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:26:11.098', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.07474999999999987, -0.01774999999999949, -0.07950000000000124, -0.08750000000000036, -0.022749999999998494, 0.00849999999999973, 0.0032500000000013074, 0.01750000000000007, -0.07499999999999929, -0.036749999999999616, -0.09399999999999942, -0.03750000000000142, 0.009249999999999758, -0.01249999999999929, -0.023500000000002075, -0.034750000000000725, -0.05550000000000033, -0.016500000000000625, -0.024750000000000938, -0.008000000000000895, 0.0032499999999977547, -0.014749999999999375, 0.00024999999999941735, 0.021999999999998465, -0.07150000000000034, -0.00024999999999941735, 0.005499999999999616, 0.01750000000000007, 0.019000000000000128, 0.019000000000001904, 0.036000000000001364, -0.06975000000000087], zp_timestamp='2026-04-15T21:22:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:26:54.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:26:54.940 [DEBUG] [Thread-27618] [transport.py] [_log()] starting thread (client mode): 0xf13e12d0
2026-04-15T23:26:54.941 [DEBUG] [Thread-27618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:26:54.955 [DEBUG] [Thread-27618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:26:54.955 [INFO] [Thread-27618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:26:54.963 [DEBUG] [Thread-27618] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:26:54.963 [DEBUG] [Thread-27618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:26:54.963 [DEBUG] [Thread-27618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:26:54.963 [DEBUG] [Thread-27618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:26:54.963 [DEBUG] [Thread-27618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:26:54.963 [DEBUG] [Thread-27618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:26:54.963 [DEBUG] [Thread-27618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:26:54.963 [DEBUG] [Thread-27618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:26:54.963 [DEBUG] [Thread-27618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:26:54.963 [DEBUG] [Thread-27618] [transport.py] [_log()] client lang: <none>
2026-04-15T23:26:54.964 [DEBUG] [Thread-27618] [transport.py] [_log()] server lang: <none>
2026-04-15T23:26:54.964 [DEBUG] [Thread-27618] [transport.py] [_log()] kex follows: False
2026-04-15T23:26:54.964 [DEBUG] [Thread-27618] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:26:54.964 [DEBUG] [Thread-27618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:26:54.964 [DEBUG] [Thread-27618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:26:54.964 [DEBUG] [Thread-27618] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:26:54.964 [DEBUG] [Thread-27618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:26:54.964 [DEBUG] [Thread-27618] [transport.py] [_log()] Compression: none
2026-04-15T23:26:54.964 [DEBUG] [Thread-27618] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:26:55.019 [DEBUG] [Thread-27618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:26:55.019 [DEBUG] [Thread-27618] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:26:55.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:26:55.020 [DEBUG] [Thread-27618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:26:55.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:26:55.077 [DEBUG] [Thread-27618] [transport.py] [_log()] userauth is OK
2026-04-15T23:26:55.078 [DEBUG] [Thread-27618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:26:55.078 [DEBUG] [Thread-27618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:26:55.078 [DEBUG] [Thread-27618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:26:55.078 [DEBUG] [Thread-27618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:26:55.105 [INFO] [Thread-27618] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:26:55.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:26:55.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:26:55.967 [DEBUG] [Thread-27618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:26:55.967 [DEBUG] [Thread-27618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:26:56.015 [DEBUG] [Thread-27618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:26:56.015 [DEBUG] [Thread-27618] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:26:56.024 [DEBUG] [Thread-27618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:26:56.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:26:56.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')
2026-04-15T23:26:56.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
2026-04-15T23:26:56.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:26:56.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:26:56.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:26:56.062 [DEBUG] [Thread-27618] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:26:56.972 [DEBUG] [Thread-27620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:27:12.009 [DEBUG] [Thread-27621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:27:12.968 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:27:12.969 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:27:26.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:27:26.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:27:26.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
2026-04-15T23:27:27.038 [DEBUG] [Thread-27622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:27:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 26, 59), 3.34357, 79.7449, 0.0, 9.93456, 8.94713, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:27:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:26:59
2026-04-15T23:27:27.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:27:28.247 [DEBUG] [Thread-27623] [transport.py] [_log()] starting thread (client mode): 0xee9c6890
2026-04-15T23:27:28.247 [DEBUG] [Thread-27623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:27:28.266 [DEBUG] [Thread-27623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:27:28.266 [INFO] [Thread-27623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:27:28.270 [DEBUG] [Thread-27623] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:27:28.270 [DEBUG] [Thread-27623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:27:28.270 [DEBUG] [Thread-27623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:27:28.270 [DEBUG] [Thread-27623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:27:28.270 [DEBUG] [Thread-27623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:27:28.270 [DEBUG] [Thread-27623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:27:28.270 [DEBUG] [Thread-27623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:27:28.270 [DEBUG] [Thread-27623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:27:28.270 [DEBUG] [Thread-27623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:27:28.270 [DEBUG] [Thread-27623] [transport.py] [_log()] client lang: <none>
2026-04-15T23:27:28.270 [DEBUG] [Thread-27623] [transport.py] [_log()] server lang: <none>
2026-04-15T23:27:28.270 [DEBUG] [Thread-27623] [transport.py] [_log()] kex follows: False
2026-04-15T23:27:28.270 [DEBUG] [Thread-27623] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:27:28.270 [DEBUG] [Thread-27623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:27:28.270 [DEBUG] [Thread-27623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:27:28.271 [DEBUG] [Thread-27623] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:27:28.271 [DEBUG] [Thread-27623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:27:28.271 [DEBUG] [Thread-27623] [transport.py] [_log()] Compression: none
2026-04-15T23:27:28.271 [DEBUG] [Thread-27623] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:27:28.286 [DEBUG] [Thread-27623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:27:28.286 [DEBUG] [Thread-27623] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:27:28.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:27:28.287 [DEBUG] [Thread-27623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:27:28.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:27:28.288 [DEBUG] [Thread-27623] [transport.py] [_log()] userauth is OK
2026-04-15T23:27:28.288 [DEBUG] [Thread-27623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:27:28.288 [DEBUG] [Thread-27623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:27:28.288 [DEBUG] [Thread-27623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:27:28.288 [DEBUG] [Thread-27623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:27:28.320 [INFO] [Thread-27623] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:27:28.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:27:29.172 [DEBUG] [Thread-27623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:27:29.172 [DEBUG] [Thread-27623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:27:29.172 [DEBUG] [Thread-27623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:27:29.213 [DEBUG] [Thread-27623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:27:29.213 [DEBUG] [Thread-27623] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:27:29.216 [DEBUG] [Thread-27623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:27:29.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:27:29.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:27:29.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:27:29.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:27:29.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:27:29.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:27:29.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:27:29.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:27:29.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:27:29.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.893532 -999.00   +9.30   6.83     82   +6.40 1 1 1 2 1     0    0 3.84 33.96 ZNESW 6.9 6.8 116.4 8.0 9.8 -24.9 9.6 -23.3 9.3 -21.4 9.6 -23.4
2026-04-15T23:27:29.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:27:29.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:27:29.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.893532
2026-04-15T23:27:29.244 [DEBUG] [Thread-27623] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:27:29.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:27:29.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:27:29.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:27:29.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:27:29.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:27:29.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:26:59', tmtdew=3.34357, humidity=79.7449, cloud=0.0, wind=9.93456, temperature=8.94713, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:26:41.165', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.0852499999999985, -0.02024999999999899, -0.059499999999999886, -0.02999999999999936, -0.036749999999999616, -0.012500000000001066, 0.008750000000000924, 0.03049999999999997, -0.057000000000000384, -0.04025000000000034, -0.11800000000000033, -0.03599999999999959, 0.04324999999999868, -0.0259999999999998, -0.0600000000000005, -0.0417500000000004, -0.05150000000000077, -0.0035000000000007248, -0.02925000000000111, -0.019000000000001904, 0.0072499999999990905, -0.03275000000000006, 0.025750000000000384, -0.013500000000000512, -0.08499999999999908, -0.003249999999999531, -0.024499999999999744, 0.0039999999999995595, 0.02800000000000047, 0.06300000000000061, 0.014000000000001123, -0.056250000000000355], zp_timestamp='2026-04-15T21:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:27:29.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:27:29.511 [DEBUG] [Thread-27626] [transport.py] [_log()] starting thread (client mode): 0xee9c6f50
2026-04-15T23:27:29.512 [DEBUG] [Thread-27626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:27:29.526 [DEBUG] [Thread-27626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:27:29.526 [INFO] [Thread-27626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:27:29.536 [DEBUG] [Thread-27626] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:27:29.537 [DEBUG] [Thread-27626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:27:29.537 [DEBUG] [Thread-27626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:27:29.537 [DEBUG] [Thread-27626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:27:29.537 [DEBUG] [Thread-27626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:27:29.537 [DEBUG] [Thread-27626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:27:29.537 [DEBUG] [Thread-27626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:27:29.537 [DEBUG] [Thread-27626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:27:29.537 [DEBUG] [Thread-27626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:27:29.537 [DEBUG] [Thread-27626] [transport.py] [_log()] client lang: <none>
2026-04-15T23:27:29.537 [DEBUG] [Thread-27626] [transport.py] [_log()] server lang: <none>
2026-04-15T23:27:29.537 [DEBUG] [Thread-27626] [transport.py] [_log()] kex follows: False
2026-04-15T23:27:29.538 [DEBUG] [Thread-27626] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:27:29.538 [DEBUG] [Thread-27626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:27:29.538 [DEBUG] [Thread-27626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:27:29.538 [DEBUG] [Thread-27626] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:27:29.538 [DEBUG] [Thread-27626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:27:29.538 [DEBUG] [Thread-27626] [transport.py] [_log()] Compression: none
2026-04-15T23:27:29.538 [DEBUG] [Thread-27626] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:27:29.592 [DEBUG] [Thread-27626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:27:29.592 [DEBUG] [Thread-27626] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:27:29.593 [DEBUG] [Thread-27626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:27:29.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:27:29.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:27:29.656 [DEBUG] [Thread-27626] [transport.py] [_log()] userauth is OK
2026-04-15T23:27:29.657 [DEBUG] [Thread-27626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:27:29.657 [DEBUG] [Thread-27626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:27:29.657 [DEBUG] [Thread-27626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:27:29.657 [DEBUG] [Thread-27626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:27:29.677 [INFO] [Thread-27626] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:27:29.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:27:29.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:27:30.506 [DEBUG] [Thread-27626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:27:30.506 [DEBUG] [Thread-27626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:27:30.556 [DEBUG] [Thread-27626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:27:30.557 [DEBUG] [Thread-27626] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:27:30.570 [DEBUG] [Thread-27626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:27:30.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:27:30.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')
2026-04-15T23:27:30.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
2026-04-15T23:27:30.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:27:30.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:27:30.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:27:30.605 [DEBUG] [Thread-27626] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:27:36.048 [DEBUG] [Thread-27628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:27:42.069 [DEBUG] [Thread-27629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:27:57.115 [DEBUG] [Thread-27630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:28:00.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:28:00.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:28:00.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
2026-04-15T23:28:01.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 27, 35), 2.99968, 81.4234, 0.0, 13.1278, 8.92744, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:28:01.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:27:35
2026-04-15T23:28:02.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:28:02.737 [DEBUG] [Thread-27631] [transport.py] [_log()] starting thread (client mode): 0xee904a90
2026-04-15T23:28:02.737 [DEBUG] [Thread-27631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:28:02.756 [DEBUG] [Thread-27631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:28:02.756 [INFO] [Thread-27631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:28:02.759 [DEBUG] [Thread-27631] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:28:02.760 [DEBUG] [Thread-27631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:28:02.760 [DEBUG] [Thread-27631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:28:02.760 [DEBUG] [Thread-27631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:28:02.760 [DEBUG] [Thread-27631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:28:02.760 [DEBUG] [Thread-27631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:28:02.760 [DEBUG] [Thread-27631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:28:02.760 [DEBUG] [Thread-27631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:28:02.760 [DEBUG] [Thread-27631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:28:02.760 [DEBUG] [Thread-27631] [transport.py] [_log()] client lang: <none>
2026-04-15T23:28:02.760 [DEBUG] [Thread-27631] [transport.py] [_log()] server lang: <none>
2026-04-15T23:28:02.760 [DEBUG] [Thread-27631] [transport.py] [_log()] kex follows: False
2026-04-15T23:28:02.760 [DEBUG] [Thread-27631] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:28:02.761 [DEBUG] [Thread-27631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:28:02.761 [DEBUG] [Thread-27631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:28:02.761 [DEBUG] [Thread-27631] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:28:02.761 [DEBUG] [Thread-27631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:28:02.761 [DEBUG] [Thread-27631] [transport.py] [_log()] Compression: none
2026-04-15T23:28:02.761 [DEBUG] [Thread-27631] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:28:02.777 [DEBUG] [Thread-27631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:28:02.778 [DEBUG] [Thread-27631] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:28:02.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:28:02.778 [DEBUG] [Thread-27631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:28:02.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:28:02.779 [DEBUG] [Thread-27631] [transport.py] [_log()] userauth is OK
2026-04-15T23:28:02.780 [DEBUG] [Thread-27631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:28:02.780 [DEBUG] [Thread-27631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:28:02.780 [DEBUG] [Thread-27631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:28:02.780 [DEBUG] [Thread-27631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:28:02.806 [INFO] [Thread-27631] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:28:02.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:28:03.600 [DEBUG] [Thread-27631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:28:03.600 [DEBUG] [Thread-27631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:28:03.601 [DEBUG] [Thread-27631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:28:03.641 [DEBUG] [Thread-27631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:28:03.641 [DEBUG] [Thread-27631] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:28:03.645 [DEBUG] [Thread-27631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:28:03.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:28:03.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:28:03.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:28:03.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:28:03.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:28:03.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:28:03.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:28:03.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:28:03.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:28:03.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.893879 -999.00   +9.30   7.77     82   +6.40 1 1 1 2 1     0    0 3.75 31.13 ZNESW 7.2 7.8 118.2 10.4 9.8 -24.7 9.6 -23.4 9.3 -21.4 9.6 -23.3
2026-04-15T23:28:03.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:28:03.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:28:03.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.893879
2026-04-15T23:28:03.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:28:03.674 [DEBUG] [Thread-27631] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:28:03.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:28:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:28:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:28:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:28:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:27:35', tmtdew=2.99968, humidity=81.4234, cloud=0.0, wind=13.1278, temperature=8.92744, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:27:11.146', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.0852499999999985, -0.02024999999999899, -0.059499999999999886, -0.02999999999999936, -0.036749999999999616, -0.012500000000001066, 0.008750000000000924, 0.03049999999999997, -0.057000000000000384, -0.04025000000000034, -0.11800000000000033, -0.03599999999999959, 0.04324999999999868, -0.0259999999999998, -0.0600000000000005, -0.0417500000000004, -0.05150000000000077, -0.0035000000000007248, -0.02925000000000111, -0.019000000000001904, 0.0072499999999990905, -0.03275000000000006, 0.025750000000000384, -0.013500000000000512, -0.08499999999999908, -0.003249999999999531, -0.024499999999999744, 0.0039999999999995595, 0.02800000000000047, 0.06300000000000061, 0.014000000000001123, -0.056250000000000355], zp_timestamp='2026-04-15T21:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:28:03.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:28:03.929 [DEBUG] [Thread-27634] [transport.py] [_log()] starting thread (client mode): 0xee9c7640
2026-04-15T23:28:03.929 [DEBUG] [Thread-27634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:28:03.943 [DEBUG] [Thread-27634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:28:03.943 [INFO] [Thread-27634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:28:03.950 [DEBUG] [Thread-27634] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:28:03.950 [DEBUG] [Thread-27634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:28:03.950 [DEBUG] [Thread-27634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:28:03.950 [DEBUG] [Thread-27634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:28:03.951 [DEBUG] [Thread-27634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:28:03.951 [DEBUG] [Thread-27634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:28:03.951 [DEBUG] [Thread-27634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:28:03.951 [DEBUG] [Thread-27634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:28:03.951 [DEBUG] [Thread-27634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:28:03.951 [DEBUG] [Thread-27634] [transport.py] [_log()] client lang: <none>
2026-04-15T23:28:03.951 [DEBUG] [Thread-27634] [transport.py] [_log()] server lang: <none>
2026-04-15T23:28:03.951 [DEBUG] [Thread-27634] [transport.py] [_log()] kex follows: False
2026-04-15T23:28:03.951 [DEBUG] [Thread-27634] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:28:03.951 [DEBUG] [Thread-27634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:28:03.951 [DEBUG] [Thread-27634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:28:03.952 [DEBUG] [Thread-27634] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:28:03.952 [DEBUG] [Thread-27634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:28:03.952 [DEBUG] [Thread-27634] [transport.py] [_log()] Compression: none
2026-04-15T23:28:03.952 [DEBUG] [Thread-27634] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:28:04.011 [DEBUG] [Thread-27634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:28:04.011 [DEBUG] [Thread-27634] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:28:04.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:28:04.012 [DEBUG] [Thread-27634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:28:04.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:28:04.067 [DEBUG] [Thread-27634] [transport.py] [_log()] userauth is OK
2026-04-15T23:28:04.067 [DEBUG] [Thread-27634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:28:04.068 [DEBUG] [Thread-27634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:28:04.068 [DEBUG] [Thread-27634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:28:04.068 [DEBUG] [Thread-27634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:28:04.085 [INFO] [Thread-27634] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:28:04.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:28:04.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:28:04.906 [DEBUG] [Thread-27634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:28:04.906 [DEBUG] [Thread-27634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:28:04.954 [DEBUG] [Thread-27634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:28:04.955 [DEBUG] [Thread-27634] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:28:04.965 [DEBUG] [Thread-27634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:28:04.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:28: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')
2026-04-15T23:28:04.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
2026-04-15T23:28:04.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:28:04.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:28:04.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:28:05.001 [DEBUG] [Thread-27634] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:28:12.145 [DEBUG] [Thread-27636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:28:13.175 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:28:13.176 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:28:19.645 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:28:24.191 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:28:27.185 [DEBUG] [Thread-27637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:28:27.235 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:28:32.601 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:28:35.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:28:35.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:28:35.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
2026-04-15T23:28:36.191 [DEBUG] [Thread-27638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:28:36.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 28, 10), 3.29433, 79.7449, 0.0, 10.0757, 8.98031, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:28:36.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:28:10
2026-04-15T23:28:36.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:28:37.133 [DEBUG] [Thread-27639] [transport.py] [_log()] starting thread (client mode): 0xf1366f80
2026-04-15T23:28:37.133 [DEBUG] [Thread-27639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:28:37.151 [DEBUG] [Thread-27639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:28:37.151 [INFO] [Thread-27639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:28:37.155 [DEBUG] [Thread-27639] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:28:37.155 [DEBUG] [Thread-27639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:28:37.155 [DEBUG] [Thread-27639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:28:37.155 [DEBUG] [Thread-27639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:28:37.155 [DEBUG] [Thread-27639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:28:37.155 [DEBUG] [Thread-27639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:28:37.155 [DEBUG] [Thread-27639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:28:37.155 [DEBUG] [Thread-27639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:28:37.155 [DEBUG] [Thread-27639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:28:37.155 [DEBUG] [Thread-27639] [transport.py] [_log()] client lang: <none>
2026-04-15T23:28:37.155 [DEBUG] [Thread-27639] [transport.py] [_log()] server lang: <none>
2026-04-15T23:28:37.156 [DEBUG] [Thread-27639] [transport.py] [_log()] kex follows: False
2026-04-15T23:28:37.156 [DEBUG] [Thread-27639] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:28:37.156 [DEBUG] [Thread-27639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:28:37.156 [DEBUG] [Thread-27639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:28:37.156 [DEBUG] [Thread-27639] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:28:37.156 [DEBUG] [Thread-27639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:28:37.156 [DEBUG] [Thread-27639] [transport.py] [_log()] Compression: none
2026-04-15T23:28:37.156 [DEBUG] [Thread-27639] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:28:37.172 [DEBUG] [Thread-27639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:28:37.173 [DEBUG] [Thread-27639] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:28:37.173 [DEBUG] [Thread-27639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:28:37.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:28:37.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:28:37.174 [DEBUG] [Thread-27639] [transport.py] [_log()] userauth is OK
2026-04-15T23:28:37.174 [DEBUG] [Thread-27639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:28:37.175 [DEBUG] [Thread-27639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:28:37.175 [DEBUG] [Thread-27639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:28:37.175 [DEBUG] [Thread-27639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:28:37.191 [INFO] [Thread-27639] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:28:37.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:28:37.969 [DEBUG] [Thread-27639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:28:37.969 [DEBUG] [Thread-27639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:28:37.970 [DEBUG] [Thread-27639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:28:38.010 [DEBUG] [Thread-27639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:28:38.010 [DEBUG] [Thread-27639] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:28:38.013 [DEBUG] [Thread-27639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:28:38.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:28:38.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:28:38.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:28:38.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:28:38.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:28:38.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:28:38.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:28:38.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:28:38.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:28:38.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.894226 -999.00   +9.30   6.21     82   +6.40 1 1 1 2 1     0    0 3.83 32.19 ZNESW 6.9 6.2 94.0 9.3 9.7 -24.7 9.6 -23.5 9.3 -21.4 9.6 -23.4
2026-04-15T23:28:38.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:28:38.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:28:38.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.894226
2026-04-15T23:28:38.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:28:38.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:28:38.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:28:38.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:28:38.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:28:38.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:28:10', tmtdew=3.29433, humidity=79.7449, cloud=0.0, wind=10.0757, temperature=8.98031, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:27:41.126', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.0852499999999985, -0.02024999999999899, -0.059499999999999886, -0.02999999999999936, -0.036749999999999616, -0.012500000000001066, 0.008750000000000924, 0.03049999999999997, -0.057000000000000384, -0.04025000000000034, -0.11800000000000033, -0.03599999999999959, 0.04324999999999868, -0.0259999999999998, -0.0600000000000005, -0.0417500000000004, -0.05150000000000077, -0.0035000000000007248, -0.02925000000000111, -0.019000000000001904, 0.0072499999999990905, -0.03275000000000006, 0.025750000000000384, -0.013500000000000512, -0.08499999999999908, -0.003249999999999531, -0.024499999999999744, 0.0039999999999995595, 0.02800000000000047, 0.06300000000000061, 0.014000000000001123, -0.056250000000000355], zp_timestamp='2026-04-15T21:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:28:38.037 [DEBUG] [Thread-27639] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:28:38.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:28:38.264 [DEBUG] [Thread-27642] [transport.py] [_log()] starting thread (client mode): 0xee907490
2026-04-15T23:28:38.264 [DEBUG] [Thread-27642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:28:38.279 [DEBUG] [Thread-27642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:28:38.279 [INFO] [Thread-27642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:28:38.286 [DEBUG] [Thread-27642] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:28:38.286 [DEBUG] [Thread-27642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:28:38.286 [DEBUG] [Thread-27642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:28:38.286 [DEBUG] [Thread-27642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:28:38.286 [DEBUG] [Thread-27642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:28:38.286 [DEBUG] [Thread-27642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:28:38.286 [DEBUG] [Thread-27642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:28:38.287 [DEBUG] [Thread-27642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:28:38.287 [DEBUG] [Thread-27642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:28:38.287 [DEBUG] [Thread-27642] [transport.py] [_log()] client lang: <none>
2026-04-15T23:28:38.287 [DEBUG] [Thread-27642] [transport.py] [_log()] server lang: <none>
2026-04-15T23:28:38.287 [DEBUG] [Thread-27642] [transport.py] [_log()] kex follows: False
2026-04-15T23:28:38.287 [DEBUG] [Thread-27642] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:28:38.287 [DEBUG] [Thread-27642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:28:38.287 [DEBUG] [Thread-27642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:28:38.287 [DEBUG] [Thread-27642] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:28:38.287 [DEBUG] [Thread-27642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:28:38.287 [DEBUG] [Thread-27642] [transport.py] [_log()] Compression: none
2026-04-15T23:28:38.287 [DEBUG] [Thread-27642] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:28:38.342 [DEBUG] [Thread-27642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:28:38.342 [DEBUG] [Thread-27642] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:28:38.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:28:38.343 [DEBUG] [Thread-27642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:28:38.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:28:38.399 [DEBUG] [Thread-27642] [transport.py] [_log()] userauth is OK
2026-04-15T23:28:38.400 [DEBUG] [Thread-27642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:28:38.400 [DEBUG] [Thread-27642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:28:38.400 [DEBUG] [Thread-27642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:28:38.400 [DEBUG] [Thread-27642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:28:38.427 [INFO] [Thread-27642] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:28:38.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:28:38.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:28:39.288 [DEBUG] [Thread-27642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:28:39.289 [DEBUG] [Thread-27642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:28:39.336 [DEBUG] [Thread-27642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:28:39.336 [DEBUG] [Thread-27642] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:28:39.346 [DEBUG] [Thread-27642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:28:39.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:28:39.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')
2026-04-15T23:28:39.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
2026-04-15T23:28:39.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:28:39.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:28:39.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:28:39.381 [DEBUG] [Thread-27642] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:28:42.215 [DEBUG] [Thread-27644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:28:57.260 [DEBUG] [Thread-27645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:29:09.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:29:09.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:29:09.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
2026-04-15T23:29:10.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 28, 46), 2.99303, 81.4566, 0.0, 12.8102, 8.89426, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:29:10.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:28:46
2026-04-15T23:29:11.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:29:11.583 [DEBUG] [Thread-27646] [transport.py] [_log()] starting thread (client mode): 0xee992e90
2026-04-15T23:29:11.583 [DEBUG] [Thread-27646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:29:11.603 [DEBUG] [Thread-27646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:29:11.603 [INFO] [Thread-27646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:29:11.604 [DEBUG] [Thread-27646] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:29:11.604 [DEBUG] [Thread-27646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:29:11.604 [DEBUG] [Thread-27646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:29:11.604 [DEBUG] [Thread-27646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:29:11.605 [DEBUG] [Thread-27646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:29:11.605 [DEBUG] [Thread-27646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:29:11.605 [DEBUG] [Thread-27646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:29:11.605 [DEBUG] [Thread-27646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:29:11.605 [DEBUG] [Thread-27646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:29:11.605 [DEBUG] [Thread-27646] [transport.py] [_log()] client lang: <none>
2026-04-15T23:29:11.605 [DEBUG] [Thread-27646] [transport.py] [_log()] server lang: <none>
2026-04-15T23:29:11.605 [DEBUG] [Thread-27646] [transport.py] [_log()] kex follows: False
2026-04-15T23:29:11.605 [DEBUG] [Thread-27646] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:29:11.605 [DEBUG] [Thread-27646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:29:11.605 [DEBUG] [Thread-27646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:29:11.605 [DEBUG] [Thread-27646] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:29:11.606 [DEBUG] [Thread-27646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:29:11.606 [DEBUG] [Thread-27646] [transport.py] [_log()] Compression: none
2026-04-15T23:29:11.606 [DEBUG] [Thread-27646] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:29:11.615 [DEBUG] [Thread-27646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:29:11.616 [DEBUG] [Thread-27646] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:29:11.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:29:11.616 [DEBUG] [Thread-27646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:29:11.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:29:11.617 [DEBUG] [Thread-27646] [transport.py] [_log()] userauth is OK
2026-04-15T23:29:11.617 [DEBUG] [Thread-27646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:29:11.618 [DEBUG] [Thread-27646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:29:11.618 [DEBUG] [Thread-27646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:29:11.618 [DEBUG] [Thread-27646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:29:11.636 [INFO] [Thread-27646] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:29:11.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:29:12.291 [DEBUG] [Thread-27648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:29:12.470 [DEBUG] [Thread-27646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:29:12.471 [DEBUG] [Thread-27646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:29:12.471 [DEBUG] [Thread-27646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:29:12.512 [DEBUG] [Thread-27646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:29:12.512 [DEBUG] [Thread-27646] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:29:12.514 [DEBUG] [Thread-27646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:29:12.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:29:12.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:29:12.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:29:12.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:29:12.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:29:12.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:29:12.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:29:12.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:29:12.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:29:12.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.894920 -999.00   +9.30   7.98     82   +6.40 1 1 1 2 1     0    0 3.90 35.10 ZNESW 5.6 8.0 121.2 10.2 9.7 -24.8 9.6 -23.4 9.3 -21.3 9.6 -23.4
2026-04-15T23:29:12.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:29:12.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:29:12.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.894920
2026-04-15T23:29:12.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:29:12.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:29:12.535 [DEBUG] [Thread-27646] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:29:12.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:29:12.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:29:12.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:29:12.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:28:46', tmtdew=2.99303, humidity=81.4566, cloud=0.0, wind=12.8102, temperature=8.89426, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:28:41.088', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.0852499999999985, -0.02024999999999899, -0.059499999999999886, -0.02999999999999936, -0.036749999999999616, -0.012500000000001066, 0.008750000000000924, 0.03049999999999997, -0.057000000000000384, -0.04025000000000034, -0.11800000000000033, -0.03599999999999959, 0.04324999999999868, -0.0259999999999998, -0.0600000000000005, -0.0417500000000004, -0.05150000000000077, -0.0035000000000007248, -0.02925000000000111, -0.019000000000001904, 0.0072499999999990905, -0.03275000000000006, 0.025750000000000384, -0.013500000000000512, -0.08499999999999908, -0.003249999999999531, -0.024499999999999744, 0.0039999999999995595, 0.02800000000000047, 0.06300000000000061, 0.014000000000001123, -0.056250000000000355], zp_timestamp='2026-04-15T21:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:29:12.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:29:12.760 [DEBUG] [Thread-27650] [transport.py] [_log()] starting thread (client mode): 0xf1350430
2026-04-15T23:29:12.760 [DEBUG] [Thread-27650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:29:12.775 [DEBUG] [Thread-27650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:29:12.775 [INFO] [Thread-27650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:29:12.782 [DEBUG] [Thread-27650] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:29:12.783 [DEBUG] [Thread-27650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:29:12.783 [DEBUG] [Thread-27650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:29:12.783 [DEBUG] [Thread-27650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:29:12.783 [DEBUG] [Thread-27650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:29:12.783 [DEBUG] [Thread-27650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:29:12.783 [DEBUG] [Thread-27650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:29:12.783 [DEBUG] [Thread-27650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:29:12.783 [DEBUG] [Thread-27650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:29:12.783 [DEBUG] [Thread-27650] [transport.py] [_log()] client lang: <none>
2026-04-15T23:29:12.783 [DEBUG] [Thread-27650] [transport.py] [_log()] server lang: <none>
2026-04-15T23:29:12.783 [DEBUG] [Thread-27650] [transport.py] [_log()] kex follows: False
2026-04-15T23:29:12.783 [DEBUG] [Thread-27650] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:29:12.784 [DEBUG] [Thread-27650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:29:12.784 [DEBUG] [Thread-27650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:29:12.784 [DEBUG] [Thread-27650] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:29:12.784 [DEBUG] [Thread-27650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:29:12.784 [DEBUG] [Thread-27650] [transport.py] [_log()] Compression: none
2026-04-15T23:29:12.784 [DEBUG] [Thread-27650] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:29:12.842 [DEBUG] [Thread-27650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:29:12.842 [DEBUG] [Thread-27650] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:29:12.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:29:12.843 [DEBUG] [Thread-27650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:29:12.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:29:12.899 [DEBUG] [Thread-27650] [transport.py] [_log()] userauth is OK
2026-04-15T23:29:12.899 [DEBUG] [Thread-27650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:29:12.900 [DEBUG] [Thread-27650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:29:12.900 [DEBUG] [Thread-27650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:29:12.900 [DEBUG] [Thread-27650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:29:12.927 [INFO] [Thread-27650] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:29:12.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:29:12.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:29:13.379 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:29:13.380 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:29:13.827 [DEBUG] [Thread-27650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:29:13.827 [DEBUG] [Thread-27650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:29:13.875 [DEBUG] [Thread-27650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:29:13.875 [DEBUG] [Thread-27650] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:29:13.883 [DEBUG] [Thread-27650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:29:13.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:29:13.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')
2026-04-15T23:29:13.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
2026-04-15T23:29:13.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:29:13.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:29:13.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:29:13.916 [DEBUG] [Thread-27650] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:29:27.324 [DEBUG] [Thread-27652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:29:36.347 [DEBUG] [Thread-27653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:29:42.370 [DEBUG] [Thread-27654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:29:43.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:29:43.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:29: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
2026-04-15T23:29:45.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 29, 21), 3.30022, 79.7117, 0.0, 9.98748, 8.98031, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:29:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:29:21
2026-04-15T23:29:45.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:29:46.035 [DEBUG] [Thread-27655] [transport.py] [_log()] starting thread (client mode): 0xf13e34c0
2026-04-15T23:29:46.035 [DEBUG] [Thread-27655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:29:46.054 [DEBUG] [Thread-27655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:29:46.054 [INFO] [Thread-27655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:29:46.057 [DEBUG] [Thread-27655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:29:46.058 [DEBUG] [Thread-27655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:29:46.058 [DEBUG] [Thread-27655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:29:46.058 [DEBUG] [Thread-27655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:29:46.058 [DEBUG] [Thread-27655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:29:46.058 [DEBUG] [Thread-27655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:29:46.058 [DEBUG] [Thread-27655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:29:46.058 [DEBUG] [Thread-27655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:29:46.058 [DEBUG] [Thread-27655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:29:46.058 [DEBUG] [Thread-27655] [transport.py] [_log()] client lang: <none>
2026-04-15T23:29:46.058 [DEBUG] [Thread-27655] [transport.py] [_log()] server lang: <none>
2026-04-15T23:29:46.058 [DEBUG] [Thread-27655] [transport.py] [_log()] kex follows: False
2026-04-15T23:29:46.059 [DEBUG] [Thread-27655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:29:46.059 [DEBUG] [Thread-27655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:29:46.059 [DEBUG] [Thread-27655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:29:46.059 [DEBUG] [Thread-27655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:29:46.059 [DEBUG] [Thread-27655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:29:46.059 [DEBUG] [Thread-27655] [transport.py] [_log()] Compression: none
2026-04-15T23:29:46.059 [DEBUG] [Thread-27655] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:29:46.076 [DEBUG] [Thread-27655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:29:46.077 [DEBUG] [Thread-27655] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:29:46.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:29:46.078 [DEBUG] [Thread-27655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:29:46.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:29:46.079 [DEBUG] [Thread-27655] [transport.py] [_log()] userauth is OK
2026-04-15T23:29:46.079 [DEBUG] [Thread-27655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:29:46.079 [DEBUG] [Thread-27655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:29:46.079 [DEBUG] [Thread-27655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:29:46.079 [DEBUG] [Thread-27655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:29:46.108 [INFO] [Thread-27655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:29:46.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:29:46.897 [DEBUG] [Thread-27655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:29:46.898 [DEBUG] [Thread-27655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:29:46.898 [DEBUG] [Thread-27655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:29:46.939 [DEBUG] [Thread-27655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:29:46.940 [DEBUG] [Thread-27655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:29:46.943 [DEBUG] [Thread-27655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:29:46.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:29:46.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:29:46.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:29:46.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:29:46.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:29:46.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:29:46.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:29:46.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:29:46.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:29:46.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.895268 -999.00   +9.30   7.42     82   +6.40 1 1 1 2 1     0    0 3.81 31.89 ZNESW 6.7 7.4 113.8 11.5 9.8 -24.7 9.6 -23.5 9.3 -21.4 9.6 -23.4
2026-04-15T23:29:46.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:29:46.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:29:46.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.895268
2026-04-15T23:29:46.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:29:46.963 [DEBUG] [Thread-27655] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:29:46.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:29:46.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:29:46.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:29:46.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:29:46.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:29:21', tmtdew=3.30022, humidity=79.7117, cloud=0.0, wind=9.98748, temperature=8.98031, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:29:11.155', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.0852499999999985, -0.02024999999999899, -0.059499999999999886, -0.02999999999999936, -0.036749999999999616, -0.012500000000001066, 0.008750000000000924, 0.03049999999999997, -0.057000000000000384, -0.04025000000000034, -0.11800000000000033, -0.03599999999999959, 0.04324999999999868, -0.0259999999999998, -0.0600000000000005, -0.0417500000000004, -0.05150000000000077, -0.0035000000000007248, -0.02925000000000111, -0.019000000000001904, 0.0072499999999990905, -0.03275000000000006, 0.025750000000000384, -0.013500000000000512, -0.08499999999999908, -0.003249999999999531, -0.024499999999999744, 0.0039999999999995595, 0.02800000000000047, 0.06300000000000061, 0.014000000000001123, -0.056250000000000355], zp_timestamp='2026-04-15T21:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:29:47.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:29:47.196 [DEBUG] [Thread-27658] [transport.py] [_log()] starting thread (client mode): 0xee9c77c0
2026-04-15T23:29:47.197 [DEBUG] [Thread-27658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:29:47.214 [DEBUG] [Thread-27658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:29:47.214 [INFO] [Thread-27658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:29:47.225 [DEBUG] [Thread-27658] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:29:47.225 [DEBUG] [Thread-27658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:29:47.225 [DEBUG] [Thread-27658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:29:47.225 [DEBUG] [Thread-27658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:29:47.225 [DEBUG] [Thread-27658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:29:47.225 [DEBUG] [Thread-27658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:29:47.225 [DEBUG] [Thread-27658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:29:47.225 [DEBUG] [Thread-27658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:29:47.225 [DEBUG] [Thread-27658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:29:47.225 [DEBUG] [Thread-27658] [transport.py] [_log()] client lang: <none>
2026-04-15T23:29:47.226 [DEBUG] [Thread-27658] [transport.py] [_log()] server lang: <none>
2026-04-15T23:29:47.226 [DEBUG] [Thread-27658] [transport.py] [_log()] kex follows: False
2026-04-15T23:29:47.226 [DEBUG] [Thread-27658] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:29:47.226 [DEBUG] [Thread-27658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:29:47.226 [DEBUG] [Thread-27658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:29:47.226 [DEBUG] [Thread-27658] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:29:47.226 [DEBUG] [Thread-27658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:29:47.226 [DEBUG] [Thread-27658] [transport.py] [_log()] Compression: none
2026-04-15T23:29:47.226 [DEBUG] [Thread-27658] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:29:47.283 [DEBUG] [Thread-27658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:29:47.283 [DEBUG] [Thread-27658] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:29:47.284 [DEBUG] [Thread-27658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:29:47.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:29:47.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:29:47.340 [DEBUG] [Thread-27658] [transport.py] [_log()] userauth is OK
2026-04-15T23:29:47.340 [DEBUG] [Thread-27658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:29:47.340 [DEBUG] [Thread-27658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:29:47.340 [DEBUG] [Thread-27658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:29:47.340 [DEBUG] [Thread-27658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:29:47.368 [INFO] [Thread-27658] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:29:47.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:29:47.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:29:48.167 [DEBUG] [Thread-27658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:29:48.167 [DEBUG] [Thread-27658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:29:48.216 [DEBUG] [Thread-27658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:29:48.216 [DEBUG] [Thread-27658] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:29:48.226 [DEBUG] [Thread-27658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:29:48.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:29:48.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')
2026-04-15T23:29:48.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') -> 00000000
2026-04-15T23:29:48.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:29:48.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:29:48.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:29:48.480 [DEBUG] [Thread-27658] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:29:57.402 [DEBUG] [Thread-27660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:30:12.445 [DEBUG] [Thread-27661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:30:13.584 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:30:13.585 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:30:18.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:30:18.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:30:18.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
2026-04-15T23:30:19.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 29, 56), 3.29319, 79.7449, 0.0, 9.84636, 8.93054, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:30:19.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:29:56
2026-04-15T23:30:20.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:30:20.643 [DEBUG] [Thread-27662] [transport.py] [_log()] starting thread (client mode): 0xee9935b0
2026-04-15T23:30:20.643 [DEBUG] [Thread-27662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:30:20.663 [DEBUG] [Thread-27662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:30:20.663 [INFO] [Thread-27662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:30:20.666 [DEBUG] [Thread-27662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:30:20.666 [DEBUG] [Thread-27662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:30:20.666 [DEBUG] [Thread-27662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:30:20.667 [DEBUG] [Thread-27662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:30:20.667 [DEBUG] [Thread-27662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:30:20.667 [DEBUG] [Thread-27662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:30:20.667 [DEBUG] [Thread-27662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:30:20.667 [DEBUG] [Thread-27662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:30:20.667 [DEBUG] [Thread-27662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:30:20.667 [DEBUG] [Thread-27662] [transport.py] [_log()] client lang: <none>
2026-04-15T23:30:20.667 [DEBUG] [Thread-27662] [transport.py] [_log()] server lang: <none>
2026-04-15T23:30:20.667 [DEBUG] [Thread-27662] [transport.py] [_log()] kex follows: False
2026-04-15T23:30:20.667 [DEBUG] [Thread-27662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:30:20.667 [DEBUG] [Thread-27662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:30:20.668 [DEBUG] [Thread-27662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:30:20.668 [DEBUG] [Thread-27662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:30:20.668 [DEBUG] [Thread-27662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:30:20.668 [DEBUG] [Thread-27662] [transport.py] [_log()] Compression: none
2026-04-15T23:30:20.668 [DEBUG] [Thread-27662] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:30:20.687 [DEBUG] [Thread-27662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:30:20.687 [DEBUG] [Thread-27662] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:30:20.688 [DEBUG] [Thread-27662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:30:20.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:30:20.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:30:20.689 [DEBUG] [Thread-27662] [transport.py] [_log()] userauth is OK
2026-04-15T23:30:20.689 [DEBUG] [Thread-27662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:30:20.689 [DEBUG] [Thread-27662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:30:20.689 [DEBUG] [Thread-27662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:30:20.689 [DEBUG] [Thread-27662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:30:20.715 [INFO] [Thread-27662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:30:20.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:30:23.731 [DEBUG] [Thread-27662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:30:23.732 [DEBUG] [Thread-27662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:30:23.732 [DEBUG] [Thread-27662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:30:23.772 [DEBUG] [Thread-27662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:30:23.772 [DEBUG] [Thread-27662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:30:23.775 [DEBUG] [Thread-27662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:30:23.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:30:23.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:30:23.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:30:23.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:30:23.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:30:23.793 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:30:23.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:30:23.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:30:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:30:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.895615 -999.00   +9.30   7.73     82   +6.40 1 1 1 2 1     0    0 3.81 32.08 ZNESW 4.7 7.7 116.4 10.2 9.7 -24.8 9.6 -23.5 9.3 -21.5 9.6 -23.4
2026-04-15T23:30:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:30:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:30:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.895615
2026-04-15T23:30:23.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:30:23.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:30:23.796 [DEBUG] [Thread-27662] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:30:23.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:30:23.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:30:23.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:30:23.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:29:56', tmtdew=3.29319, humidity=79.7449, cloud=0.0, wind=9.84636, temperature=8.93054, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:29:41.136', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.0852499999999985, -0.02024999999999899, -0.059499999999999886, -0.02999999999999936, -0.036749999999999616, -0.012500000000001066, 0.008750000000000924, 0.03049999999999997, -0.057000000000000384, -0.04025000000000034, -0.11800000000000033, -0.03599999999999959, 0.04324999999999868, -0.0259999999999998, -0.0600000000000005, -0.0417500000000004, -0.05150000000000077, -0.0035000000000007248, -0.02925000000000111, -0.019000000000001904, 0.0072499999999990905, -0.03275000000000006, 0.025750000000000384, -0.013500000000000512, -0.08499999999999908, -0.003249999999999531, -0.024499999999999744, 0.0039999999999995595, 0.02800000000000047, 0.06300000000000061, 0.014000000000001123, -0.056250000000000355], zp_timestamp='2026-04-15T21:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:30:24.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:30:24.052 [DEBUG] [Thread-27665] [transport.py] [_log()] starting thread (client mode): 0xf1350f10
2026-04-15T23:30:24.053 [DEBUG] [Thread-27665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:30:24.068 [DEBUG] [Thread-27665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:30:24.068 [INFO] [Thread-27665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:30:24.076 [DEBUG] [Thread-27665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:30:24.076 [DEBUG] [Thread-27665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:30:24.076 [DEBUG] [Thread-27665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:30:24.076 [DEBUG] [Thread-27665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:30:24.076 [DEBUG] [Thread-27665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:30:24.076 [DEBUG] [Thread-27665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:30:24.076 [DEBUG] [Thread-27665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:30:24.076 [DEBUG] [Thread-27665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:30:24.076 [DEBUG] [Thread-27665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:30:24.076 [DEBUG] [Thread-27665] [transport.py] [_log()] client lang: <none>
2026-04-15T23:30:24.076 [DEBUG] [Thread-27665] [transport.py] [_log()] server lang: <none>
2026-04-15T23:30:24.076 [DEBUG] [Thread-27665] [transport.py] [_log()] kex follows: False
2026-04-15T23:30:24.076 [DEBUG] [Thread-27665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:30:24.076 [DEBUG] [Thread-27665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:30:24.076 [DEBUG] [Thread-27665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:30:24.077 [DEBUG] [Thread-27665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:30:24.077 [DEBUG] [Thread-27665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:30:24.077 [DEBUG] [Thread-27665] [transport.py] [_log()] Compression: none
2026-04-15T23:30:24.077 [DEBUG] [Thread-27665] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:30:24.135 [DEBUG] [Thread-27665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:30:24.135 [DEBUG] [Thread-27665] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:30:24.136 [DEBUG] [Thread-27665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:30:24.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:30:24.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:30:24.191 [DEBUG] [Thread-27665] [transport.py] [_log()] userauth is OK
2026-04-15T23:30:24.191 [DEBUG] [Thread-27665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:30:24.191 [DEBUG] [Thread-27665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:30:24.191 [DEBUG] [Thread-27665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:30:24.191 [DEBUG] [Thread-27665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:30:24.209 [INFO] [Thread-27665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:30:24.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:30:24.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:30:25.043 [DEBUG] [Thread-27665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:30:25.044 [DEBUG] [Thread-27665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:30:25.091 [DEBUG] [Thread-27665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:30:25.091 [DEBUG] [Thread-27665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:30:25.100 [DEBUG] [Thread-27665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:30:25.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:30:25.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')
2026-04-15T23:30:25.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
2026-04-15T23:30:25.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:30:25.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:30:25.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:30:25.134 [DEBUG] [Thread-27665] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:30:27.475 [DEBUG] [Thread-27667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:30:36.507 [DEBUG] [Thread-27668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:30:42.515 [DEBUG] [Thread-27669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:30:55.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:30:55.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:30:55.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
2026-04-15T23:30:56.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 30, 32), 3.29433, 79.7449, 0.0, 9.89928, 8.98031, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:30:56.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:30:32
2026-04-15T23:30:56.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:30:57.200 [DEBUG] [Thread-27670] [transport.py] [_log()] starting thread (client mode): 0xee9c2d70
2026-04-15T23:30:57.200 [DEBUG] [Thread-27670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:30:57.219 [DEBUG] [Thread-27670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:30:57.219 [INFO] [Thread-27670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:30:57.222 [DEBUG] [Thread-27670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:30:57.222 [DEBUG] [Thread-27670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:30:57.223 [DEBUG] [Thread-27670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:30:57.223 [DEBUG] [Thread-27670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:30:57.223 [DEBUG] [Thread-27670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:30:57.223 [DEBUG] [Thread-27670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:30:57.223 [DEBUG] [Thread-27670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:30:57.223 [DEBUG] [Thread-27670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:30:57.223 [DEBUG] [Thread-27670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:30:57.223 [DEBUG] [Thread-27670] [transport.py] [_log()] client lang: <none>
2026-04-15T23:30:57.223 [DEBUG] [Thread-27670] [transport.py] [_log()] server lang: <none>
2026-04-15T23:30:57.223 [DEBUG] [Thread-27670] [transport.py] [_log()] kex follows: False
2026-04-15T23:30:57.223 [DEBUG] [Thread-27670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:30:57.223 [DEBUG] [Thread-27670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:30:57.223 [DEBUG] [Thread-27670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:30:57.224 [DEBUG] [Thread-27670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:30:57.224 [DEBUG] [Thread-27670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:30:57.224 [DEBUG] [Thread-27670] [transport.py] [_log()] Compression: none
2026-04-15T23:30:57.224 [DEBUG] [Thread-27670] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:30:57.232 [DEBUG] [Thread-27670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:30:57.232 [DEBUG] [Thread-27670] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:30:57.232 [DEBUG] [Thread-27670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:30:57.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:30:57.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:30:57.234 [DEBUG] [Thread-27670] [transport.py] [_log()] userauth is OK
2026-04-15T23:30:57.234 [DEBUG] [Thread-27670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:30:57.234 [DEBUG] [Thread-27670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:30:57.234 [DEBUG] [Thread-27670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:30:57.234 [DEBUG] [Thread-27670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:30:57.258 [INFO] [Thread-27670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:30:57.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:30:57.547 [DEBUG] [Thread-27672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:30:58.042 [DEBUG] [Thread-27670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:30:58.042 [DEBUG] [Thread-27670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:30:58.043 [DEBUG] [Thread-27670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:30:58.083 [DEBUG] [Thread-27670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:30:58.083 [DEBUG] [Thread-27670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:30:58.086 [DEBUG] [Thread-27670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:30:58.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:30:58.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:30:58.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:30:58.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:30:58.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:30:58.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:30:58.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:30:58.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:30:58.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:30:58.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.895962 -999.00   +9.40   5.21     82   +6.50 1 1 1 2 1     0    0 3.84 31.03 ZNESW 6.4 5.2 95.2 10.1 9.7 -24.5 9.6 -23.6 9.3 -21.3 9.6 -23.6
2026-04-15T23:30:58.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:30:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:30:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.895962
2026-04-15T23:30:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:30:58.111 [DEBUG] [Thread-27670] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:30:58.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:30:58.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:30:58.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:30:58.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:30:58.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:30:32', tmtdew=3.29433, humidity=79.7449, cloud=0.0, wind=9.89928, temperature=8.98031, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:30:11.117', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.0852499999999985, -0.02024999999999899, -0.059499999999999886, -0.02999999999999936, -0.036749999999999616, -0.012500000000001066, 0.008750000000000924, 0.03049999999999997, -0.057000000000000384, -0.04025000000000034, -0.11800000000000033, -0.03599999999999959, 0.04324999999999868, -0.0259999999999998, -0.0600000000000005, -0.0417500000000004, -0.05150000000000077, -0.0035000000000007248, -0.02925000000000111, -0.019000000000001904, 0.0072499999999990905, -0.03275000000000006, 0.025750000000000384, -0.013500000000000512, -0.08499999999999908, -0.003249999999999531, -0.024499999999999744, 0.0039999999999995595, 0.02800000000000047, 0.06300000000000061, 0.014000000000001123, -0.056250000000000355], zp_timestamp='2026-04-15T21:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:30:58.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:30:58.368 [DEBUG] [Thread-27674] [transport.py] [_log()] starting thread (client mode): 0xee9c0370
2026-04-15T23:30:58.368 [DEBUG] [Thread-27674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:30:58.382 [DEBUG] [Thread-27674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:30:58.383 [INFO] [Thread-27674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:30:58.390 [DEBUG] [Thread-27674] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:30:58.390 [DEBUG] [Thread-27674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:30:58.390 [DEBUG] [Thread-27674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:30:58.390 [DEBUG] [Thread-27674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:30:58.390 [DEBUG] [Thread-27674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:30:58.390 [DEBUG] [Thread-27674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:30:58.390 [DEBUG] [Thread-27674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:30:58.390 [DEBUG] [Thread-27674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:30:58.390 [DEBUG] [Thread-27674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:30:58.390 [DEBUG] [Thread-27674] [transport.py] [_log()] client lang: <none>
2026-04-15T23:30:58.390 [DEBUG] [Thread-27674] [transport.py] [_log()] server lang: <none>
2026-04-15T23:30:58.390 [DEBUG] [Thread-27674] [transport.py] [_log()] kex follows: False
2026-04-15T23:30:58.390 [DEBUG] [Thread-27674] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:30:58.391 [DEBUG] [Thread-27674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:30:58.391 [DEBUG] [Thread-27674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:30:58.391 [DEBUG] [Thread-27674] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:30:58.391 [DEBUG] [Thread-27674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:30:58.391 [DEBUG] [Thread-27674] [transport.py] [_log()] Compression: none
2026-04-15T23:30:58.391 [DEBUG] [Thread-27674] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:30:58.446 [DEBUG] [Thread-27674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:30:58.447 [DEBUG] [Thread-27674] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:30:58.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:30:58.447 [DEBUG] [Thread-27674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:30:58.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:30:58.504 [DEBUG] [Thread-27674] [transport.py] [_log()] userauth is OK
2026-04-15T23:30:58.504 [DEBUG] [Thread-27674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:30:58.504 [DEBUG] [Thread-27674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:30:58.504 [DEBUG] [Thread-27674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:30:58.504 [DEBUG] [Thread-27674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:30:58.532 [INFO] [Thread-27674] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:30:58.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:30:58.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:30:59.364 [DEBUG] [Thread-27674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:30:59.364 [DEBUG] [Thread-27674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:30:59.412 [DEBUG] [Thread-27674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:30:59.412 [DEBUG] [Thread-27674] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:30:59.421 [DEBUG] [Thread-27674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:30:59.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:30:59.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')
2026-04-15T23:30:59.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
2026-04-15T23:30:59.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:30:59.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:30:59.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:30:59.459 [DEBUG] [Thread-27674] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:31:12.577 [DEBUG] [Thread-27676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:31:13.788 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:31:13.789 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:31:27.622 [DEBUG] [Thread-27677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:31:29.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:31:29.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:31:29.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
2026-04-15T23:31:30.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 31, 7), 3.3006, 79.7117, 0.0, 9.7758, 8.9969, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:31:30.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:31:07
2026-04-15T23:31:31.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:31:31.588 [DEBUG] [Thread-27678] [transport.py] [_log()] starting thread (client mode): 0xee9c3af0
2026-04-15T23:31:31.588 [DEBUG] [Thread-27678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:31:31.607 [DEBUG] [Thread-27678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:31:31.608 [INFO] [Thread-27678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:31:31.611 [DEBUG] [Thread-27678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:31:31.611 [DEBUG] [Thread-27678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:31:31.611 [DEBUG] [Thread-27678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:31:31.611 [DEBUG] [Thread-27678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:31:31.611 [DEBUG] [Thread-27678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:31:31.611 [DEBUG] [Thread-27678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:31:31.611 [DEBUG] [Thread-27678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:31:31.611 [DEBUG] [Thread-27678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:31:31.612 [DEBUG] [Thread-27678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:31:31.612 [DEBUG] [Thread-27678] [transport.py] [_log()] client lang: <none>
2026-04-15T23:31:31.612 [DEBUG] [Thread-27678] [transport.py] [_log()] server lang: <none>
2026-04-15T23:31:31.612 [DEBUG] [Thread-27678] [transport.py] [_log()] kex follows: False
2026-04-15T23:31:31.612 [DEBUG] [Thread-27678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:31:31.612 [DEBUG] [Thread-27678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:31:31.612 [DEBUG] [Thread-27678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:31:31.612 [DEBUG] [Thread-27678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:31:31.612 [DEBUG] [Thread-27678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:31:31.612 [DEBUG] [Thread-27678] [transport.py] [_log()] Compression: none
2026-04-15T23:31:31.612 [DEBUG] [Thread-27678] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:31:31.632 [DEBUG] [Thread-27678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:31:31.632 [DEBUG] [Thread-27678] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:31:31.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:31:31.633 [DEBUG] [Thread-27678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:31:31.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:31:31.634 [DEBUG] [Thread-27678] [transport.py] [_log()] userauth is OK
2026-04-15T23:31:31.634 [DEBUG] [Thread-27678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:31:31.634 [DEBUG] [Thread-27678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:31:31.634 [DEBUG] [Thread-27678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:31:31.634 [DEBUG] [Thread-27678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:31:31.663 [INFO] [Thread-27678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:31:31.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:31:32.457 [DEBUG] [Thread-27678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:31:32.457 [DEBUG] [Thread-27678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:31:32.458 [DEBUG] [Thread-27678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:31:32.498 [DEBUG] [Thread-27678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:31:32.498 [DEBUG] [Thread-27678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:31:32.501 [DEBUG] [Thread-27678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:31:32.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:31:32.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:31:32.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:31:32.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:31:32.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:31:32.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:31:32.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:31:32.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:31:32.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:31:32.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.896309 -999.00   +9.40   7.57     82   +6.50 1 1 1 2 1     0    0 3.81 31.96 ZNESW 7.2 7.6 118.6 11.2 9.7 -24.8 9.6 -23.6 9.3 -21.3 9.6 -23.5
2026-04-15T23:31:32.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:31:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:31:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.896309
2026-04-15T23:31:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:31:32.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:31:32.528 [DEBUG] [Thread-27678] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:31:32.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:31:32.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:31:32.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:31:32.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:31:07', tmtdew=3.3006, humidity=79.7117, cloud=0.0, wind=9.7758, temperature=8.9969, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:30:41.098', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.0852499999999985, -0.02024999999999899, -0.059499999999999886, -0.02999999999999936, -0.036749999999999616, -0.012500000000001066, 0.008750000000000924, 0.03049999999999997, -0.057000000000000384, -0.04025000000000034, -0.11800000000000033, -0.03599999999999959, 0.04324999999999868, -0.0259999999999998, -0.0600000000000005, -0.0417500000000004, -0.05150000000000077, -0.0035000000000007248, -0.02925000000000111, -0.019000000000001904, 0.0072499999999990905, -0.03275000000000006, 0.025750000000000384, -0.013500000000000512, -0.08499999999999908, -0.003249999999999531, -0.024499999999999744, 0.0039999999999995595, 0.02800000000000047, 0.06300000000000061, 0.014000000000001123, -0.056250000000000355], zp_timestamp='2026-04-15T21:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:31:32.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:31:32.785 [DEBUG] [Thread-27681] [transport.py] [_log()] starting thread (client mode): 0xee9c3790
2026-04-15T23:31:32.785 [DEBUG] [Thread-27681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:31:32.799 [DEBUG] [Thread-27681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:31:32.799 [INFO] [Thread-27681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:31:32.807 [DEBUG] [Thread-27681] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:31:32.807 [DEBUG] [Thread-27681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:31:32.807 [DEBUG] [Thread-27681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:31:32.807 [DEBUG] [Thread-27681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:31:32.807 [DEBUG] [Thread-27681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:31:32.807 [DEBUG] [Thread-27681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:31:32.808 [DEBUG] [Thread-27681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:31:32.808 [DEBUG] [Thread-27681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:31:32.808 [DEBUG] [Thread-27681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:31:32.808 [DEBUG] [Thread-27681] [transport.py] [_log()] client lang: <none>
2026-04-15T23:31:32.808 [DEBUG] [Thread-27681] [transport.py] [_log()] server lang: <none>
2026-04-15T23:31:32.808 [DEBUG] [Thread-27681] [transport.py] [_log()] kex follows: False
2026-04-15T23:31:32.808 [DEBUG] [Thread-27681] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:31:32.808 [DEBUG] [Thread-27681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:31:32.808 [DEBUG] [Thread-27681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:31:32.808 [DEBUG] [Thread-27681] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:31:32.808 [DEBUG] [Thread-27681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:31:32.808 [DEBUG] [Thread-27681] [transport.py] [_log()] Compression: none
2026-04-15T23:31:32.808 [DEBUG] [Thread-27681] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:31:32.866 [DEBUG] [Thread-27681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:31:32.867 [DEBUG] [Thread-27681] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:31:32.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:31:32.868 [DEBUG] [Thread-27681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:31:32.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:31:32.923 [DEBUG] [Thread-27681] [transport.py] [_log()] userauth is OK
2026-04-15T23:31:32.923 [DEBUG] [Thread-27681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:31:32.923 [DEBUG] [Thread-27681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:31:32.923 [DEBUG] [Thread-27681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:31:32.923 [DEBUG] [Thread-27681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:31:32.940 [INFO] [Thread-27681] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:31:32.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:31:32.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:31:33.763 [DEBUG] [Thread-27681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:31:33.763 [DEBUG] [Thread-27681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:31:33.811 [DEBUG] [Thread-27681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:31:33.811 [DEBUG] [Thread-27681] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:31:33.820 [DEBUG] [Thread-27681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:31:33.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:31:33.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')
2026-04-15T23:31:33.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
2026-04-15T23:31:33.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:31:33.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:31:33.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:31:33.855 [DEBUG] [Thread-27681] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:31:36.650 [DEBUG] [Thread-27683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:31:42.652 [DEBUG] [Thread-27684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:31:57.695 [DEBUG] [Thread-27685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:32:03.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:32:03.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:32:03.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:32:05.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 31, 43), 3.00043, 81.4234, 0.0, 12.5633, 8.96062, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:32:05.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:31:43
2026-04-15T23:32:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:32:05.930 [DEBUG] [Thread-27686] [transport.py] [_log()] starting thread (client mode): 0xee9905b0
2026-04-15T23:32:05.930 [DEBUG] [Thread-27686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:32:05.950 [DEBUG] [Thread-27686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:32:05.950 [INFO] [Thread-27686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:32:05.954 [DEBUG] [Thread-27686] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:32:05.954 [DEBUG] [Thread-27686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:32:05.954 [DEBUG] [Thread-27686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:32:05.954 [DEBUG] [Thread-27686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:32:05.954 [DEBUG] [Thread-27686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:32:05.954 [DEBUG] [Thread-27686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:32:05.954 [DEBUG] [Thread-27686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:32:05.954 [DEBUG] [Thread-27686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:32:05.954 [DEBUG] [Thread-27686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:32:05.954 [DEBUG] [Thread-27686] [transport.py] [_log()] client lang: <none>
2026-04-15T23:32:05.954 [DEBUG] [Thread-27686] [transport.py] [_log()] server lang: <none>
2026-04-15T23:32:05.954 [DEBUG] [Thread-27686] [transport.py] [_log()] kex follows: False
2026-04-15T23:32:05.954 [DEBUG] [Thread-27686] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:32:05.954 [DEBUG] [Thread-27686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:32:05.955 [DEBUG] [Thread-27686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:32:05.955 [DEBUG] [Thread-27686] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:32:05.955 [DEBUG] [Thread-27686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:32:05.955 [DEBUG] [Thread-27686] [transport.py] [_log()] Compression: none
2026-04-15T23:32:05.955 [DEBUG] [Thread-27686] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:32:05.966 [DEBUG] [Thread-27686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:32:05.966 [DEBUG] [Thread-27686] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:32:05.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:32:05.967 [DEBUG] [Thread-27686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:32:05.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:32:05.968 [DEBUG] [Thread-27686] [transport.py] [_log()] userauth is OK
2026-04-15T23:32:05.968 [DEBUG] [Thread-27686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:32:05.968 [DEBUG] [Thread-27686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:32:05.968 [DEBUG] [Thread-27686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:32:05.968 [DEBUG] [Thread-27686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:32:05.991 [INFO] [Thread-27686] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:32:05.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:32:06.750 [DEBUG] [Thread-27686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:32:06.750 [DEBUG] [Thread-27686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:32:06.751 [DEBUG] [Thread-27686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:32:06.791 [DEBUG] [Thread-27686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:32:06.791 [DEBUG] [Thread-27686] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:32:06.793 [DEBUG] [Thread-27686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:32:06.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:32:06.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:32:06.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:32:06.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:32:06.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:32:06.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:32:06.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:32:06.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:32:06.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:32:06.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.896656 -999.00   +9.30   7.14     82   +6.40 1 1 1 2 1     0    0 3.70 27.44 ZNESW 7.2 7.1 105.0 8.8 9.7 -24.7 9.6 -23.5 9.3 -21.5 9.6 -23.4
2026-04-15T23:32:06.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:32:06.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:32:06.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.896656
2026-04-15T23:32:06.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:32:06.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:32:06.820 [DEBUG] [Thread-27686] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:32:06.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:32:06.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:32:06.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:32:06.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:31:43', tmtdew=3.00043, humidity=81.4234, cloud=0.0, wind=12.5633, temperature=8.96062, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:31:11.078', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.0852499999999985, -0.02024999999999899, -0.059499999999999886, -0.02999999999999936, -0.036749999999999616, -0.012500000000001066, 0.008750000000000924, 0.03049999999999997, -0.057000000000000384, -0.04025000000000034, -0.11800000000000033, -0.03599999999999959, 0.04324999999999868, -0.0259999999999998, -0.0600000000000005, -0.0417500000000004, -0.05150000000000077, -0.0035000000000007248, -0.02925000000000111, -0.019000000000001904, 0.0072499999999990905, -0.03275000000000006, 0.025750000000000384, -0.013500000000000512, -0.08499999999999908, -0.003249999999999531, -0.024499999999999744, 0.0039999999999995595, 0.02800000000000047, 0.06300000000000061, 0.014000000000001123, -0.056250000000000355], zp_timestamp='2026-04-15T21:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:32:07.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:32:07.076 [DEBUG] [Thread-27689] [transport.py] [_log()] starting thread (client mode): 0xee9935e0
2026-04-15T23:32:07.077 [DEBUG] [Thread-27689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:32:07.091 [DEBUG] [Thread-27689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:32:07.091 [INFO] [Thread-27689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:32:07.104 [DEBUG] [Thread-27689] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:32:07.104 [DEBUG] [Thread-27689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:32:07.104 [DEBUG] [Thread-27689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:32:07.104 [DEBUG] [Thread-27689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:32:07.104 [DEBUG] [Thread-27689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:32:07.104 [DEBUG] [Thread-27689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:32:07.104 [DEBUG] [Thread-27689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:32:07.104 [DEBUG] [Thread-27689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:32:07.104 [DEBUG] [Thread-27689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:32:07.104 [DEBUG] [Thread-27689] [transport.py] [_log()] client lang: <none>
2026-04-15T23:32:07.104 [DEBUG] [Thread-27689] [transport.py] [_log()] server lang: <none>
2026-04-15T23:32:07.104 [DEBUG] [Thread-27689] [transport.py] [_log()] kex follows: False
2026-04-15T23:32:07.104 [DEBUG] [Thread-27689] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:32:07.105 [DEBUG] [Thread-27689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:32:07.105 [DEBUG] [Thread-27689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:32:07.105 [DEBUG] [Thread-27689] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:32:07.105 [DEBUG] [Thread-27689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:32:07.105 [DEBUG] [Thread-27689] [transport.py] [_log()] Compression: none
2026-04-15T23:32:07.105 [DEBUG] [Thread-27689] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:32:07.159 [DEBUG] [Thread-27689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:32:07.159 [DEBUG] [Thread-27689] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:32:07.160 [DEBUG] [Thread-27689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:32:07.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:32:07.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:32:07.222 [DEBUG] [Thread-27689] [transport.py] [_log()] userauth is OK
2026-04-15T23:32:07.222 [DEBUG] [Thread-27689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:32:07.223 [DEBUG] [Thread-27689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:32:07.223 [DEBUG] [Thread-27689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:32:07.223 [DEBUG] [Thread-27689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:32:07.244 [INFO] [Thread-27689] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:32:07.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:32:07.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:32:08.016 [DEBUG] [Thread-27689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:32:08.017 [DEBUG] [Thread-27689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:32:08.064 [DEBUG] [Thread-27689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:32:08.064 [DEBUG] [Thread-27689] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:32:08.073 [DEBUG] [Thread-27689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:32:08.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:32:08.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')
2026-04-15T23:32:08.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
2026-04-15T23:32:08.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:32:08.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:32:08.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:32:08.117 [DEBUG] [Thread-27689] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:32:12.724 [DEBUG] [Thread-27691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:32:13.989 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:32:13.990 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:32:27.770 [DEBUG] [Thread-27692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:32:36.801 [DEBUG] [Thread-27693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:32:38.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:32:38.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:32:38.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
2026-04-15T23:32:39.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 32, 18), 3.3124, 79.6453, 0.0, 10.0933, 8.9969, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:32:39.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:32:18
2026-04-15T23:32:39.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:32:40.227 [DEBUG] [Thread-27694] [transport.py] [_log()] starting thread (client mode): 0xf1352cb0
2026-04-15T23:32:40.227 [DEBUG] [Thread-27694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:32:40.247 [DEBUG] [Thread-27694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:32:40.247 [INFO] [Thread-27694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:32:40.250 [DEBUG] [Thread-27694] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:32:40.250 [DEBUG] [Thread-27694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:32:40.250 [DEBUG] [Thread-27694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:32:40.250 [DEBUG] [Thread-27694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:32:40.250 [DEBUG] [Thread-27694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:32:40.250 [DEBUG] [Thread-27694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:32:40.251 [DEBUG] [Thread-27694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:32:40.251 [DEBUG] [Thread-27694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:32:40.251 [DEBUG] [Thread-27694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:32:40.251 [DEBUG] [Thread-27694] [transport.py] [_log()] client lang: <none>
2026-04-15T23:32:40.251 [DEBUG] [Thread-27694] [transport.py] [_log()] server lang: <none>
2026-04-15T23:32:40.251 [DEBUG] [Thread-27694] [transport.py] [_log()] kex follows: False
2026-04-15T23:32:40.251 [DEBUG] [Thread-27694] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:32:40.251 [DEBUG] [Thread-27694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:32:40.251 [DEBUG] [Thread-27694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:32:40.251 [DEBUG] [Thread-27694] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:32:40.251 [DEBUG] [Thread-27694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:32:40.252 [DEBUG] [Thread-27694] [transport.py] [_log()] Compression: none
2026-04-15T23:32:40.252 [DEBUG] [Thread-27694] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:32:40.268 [DEBUG] [Thread-27694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:32:40.269 [DEBUG] [Thread-27694] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:32:40.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:32:40.269 [DEBUG] [Thread-27694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:32:40.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:32:40.270 [DEBUG] [Thread-27694] [transport.py] [_log()] userauth is OK
2026-04-15T23:32:40.270 [DEBUG] [Thread-27694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:32:40.270 [DEBUG] [Thread-27694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:32:40.271 [DEBUG] [Thread-27694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:32:40.271 [DEBUG] [Thread-27694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:32:40.294 [INFO] [Thread-27694] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:32:40.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:32:41.094 [DEBUG] [Thread-27694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:32:41.094 [DEBUG] [Thread-27694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:32:41.095 [DEBUG] [Thread-27694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:32:41.135 [DEBUG] [Thread-27694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:32:41.135 [DEBUG] [Thread-27694] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:32:41.138 [DEBUG] [Thread-27694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:32:41.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:32:41.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:32:41.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:32:41.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:32:41.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:32:41.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:32:41.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:32:41.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:32:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:32:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.897351 -999.00   +9.20   8.37     82   +6.40 1 1 1 2 1     0    0 3.68 24.67 ZNESW 8.9 8.4 121.0 9.8 9.7 -24.8 9.6 -23.6 9.3 -21.5 9.6 -23.4
2026-04-15T23:32:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:32:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:32:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.897351
2026-04-15T23:32:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:32:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:32:41.165 [DEBUG] [Thread-27694] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:32:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:32:41.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:32:41.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:32:41.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:32:18', tmtdew=3.3124, humidity=79.6453, cloud=0.0, wind=10.0933, temperature=8.9969, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:32:11.126', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.0852499999999985, -0.02024999999999899, -0.059499999999999886, -0.02999999999999936, -0.036749999999999616, -0.012500000000001066, 0.008750000000000924, 0.03049999999999997, -0.057000000000000384, -0.04025000000000034, -0.11800000000000033, -0.03599999999999959, 0.04324999999999868, -0.0259999999999998, -0.0600000000000005, -0.0417500000000004, -0.05150000000000077, -0.0035000000000007248, -0.02925000000000111, -0.019000000000001904, 0.0072499999999990905, -0.03275000000000006, 0.025750000000000384, -0.013500000000000512, -0.08499999999999908, -0.003249999999999531, -0.024499999999999744, 0.0039999999999995595, 0.02800000000000047, 0.06300000000000061, 0.014000000000001123, -0.056250000000000355], zp_timestamp='2026-04-15T21:28:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:32:41.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:32:41.431 [DEBUG] [Thread-27697] [transport.py] [_log()] starting thread (client mode): 0xee9c32e0
2026-04-15T23:32:41.431 [DEBUG] [Thread-27697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:32:41.448 [DEBUG] [Thread-27697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:32:41.449 [INFO] [Thread-27697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:32:41.456 [DEBUG] [Thread-27697] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:32:41.456 [DEBUG] [Thread-27697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:32:41.456 [DEBUG] [Thread-27697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:32:41.456 [DEBUG] [Thread-27697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:32:41.456 [DEBUG] [Thread-27697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:32:41.456 [DEBUG] [Thread-27697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:32:41.456 [DEBUG] [Thread-27697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:32:41.456 [DEBUG] [Thread-27697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:32:41.456 [DEBUG] [Thread-27697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:32:41.456 [DEBUG] [Thread-27697] [transport.py] [_log()] client lang: <none>
2026-04-15T23:32:41.456 [DEBUG] [Thread-27697] [transport.py] [_log()] server lang: <none>
2026-04-15T23:32:41.457 [DEBUG] [Thread-27697] [transport.py] [_log()] kex follows: False
2026-04-15T23:32:41.457 [DEBUG] [Thread-27697] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:32:41.457 [DEBUG] [Thread-27697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:32:41.457 [DEBUG] [Thread-27697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:32:41.457 [DEBUG] [Thread-27697] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:32:41.457 [DEBUG] [Thread-27697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:32:41.457 [DEBUG] [Thread-27697] [transport.py] [_log()] Compression: none
2026-04-15T23:32:41.457 [DEBUG] [Thread-27697] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:32:41.517 [DEBUG] [Thread-27697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:32:41.517 [DEBUG] [Thread-27697] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:32:41.518 [DEBUG] [Thread-27697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:32:41.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:32:41.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:32:41.575 [DEBUG] [Thread-27697] [transport.py] [_log()] userauth is OK
2026-04-15T23:32:41.575 [DEBUG] [Thread-27697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:32:41.576 [DEBUG] [Thread-27697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:32:41.576 [DEBUG] [Thread-27697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:32:41.576 [DEBUG] [Thread-27697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:32:41.602 [INFO] [Thread-27697] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:32:41.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:32:41.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:32:42.397 [DEBUG] [Thread-27697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:32:42.397 [DEBUG] [Thread-27697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:32:42.445 [DEBUG] [Thread-27697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:32:42.445 [DEBUG] [Thread-27697] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:32:42.454 [DEBUG] [Thread-27697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:32:42.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:32:42.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')
2026-04-15T23:32:42.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
2026-04-15T23:32:42.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:32:42.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:32:42.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:32:42.490 [DEBUG] [Thread-27697] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:32:42.802 [DEBUG] [Thread-27699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:32:57.846 [DEBUG] [Thread-27700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:33:12.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:33:12.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:33:12.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
2026-04-15T23:33:12.877 [DEBUG] [Thread-27701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:33:13.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 32, 55), 3.31869, 79.6122, 0.0, 9.89928, 9.01349, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:33:13.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:32:55
2026-04-15T23:33:14.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:33:14.188 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:33:14.189 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:33:14.571 [DEBUG] [Thread-27702] [transport.py] [_log()] starting thread (client mode): 0xee9c1fc0
2026-04-15T23:33:14.571 [DEBUG] [Thread-27702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:33:14.590 [DEBUG] [Thread-27702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:33:14.590 [INFO] [Thread-27702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:33:14.594 [DEBUG] [Thread-27702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:33:14.594 [DEBUG] [Thread-27702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:33:14.594 [DEBUG] [Thread-27702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:33:14.594 [DEBUG] [Thread-27702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:33:14.594 [DEBUG] [Thread-27702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:33:14.594 [DEBUG] [Thread-27702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:33:14.594 [DEBUG] [Thread-27702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:33:14.594 [DEBUG] [Thread-27702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:33:14.594 [DEBUG] [Thread-27702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:33:14.594 [DEBUG] [Thread-27702] [transport.py] [_log()] client lang: <none>
2026-04-15T23:33:14.594 [DEBUG] [Thread-27702] [transport.py] [_log()] server lang: <none>
2026-04-15T23:33:14.595 [DEBUG] [Thread-27702] [transport.py] [_log()] kex follows: False
2026-04-15T23:33:14.595 [DEBUG] [Thread-27702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:33:14.595 [DEBUG] [Thread-27702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:33:14.595 [DEBUG] [Thread-27702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:33:14.595 [DEBUG] [Thread-27702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:33:14.595 [DEBUG] [Thread-27702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:33:14.595 [DEBUG] [Thread-27702] [transport.py] [_log()] Compression: none
2026-04-15T23:33:14.595 [DEBUG] [Thread-27702] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:33:14.611 [DEBUG] [Thread-27702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:33:14.611 [DEBUG] [Thread-27702] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:33:14.611 [DEBUG] [Thread-27702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:33:14.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:33:14.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:33:14.612 [DEBUG] [Thread-27702] [transport.py] [_log()] userauth is OK
2026-04-15T23:33:14.613 [DEBUG] [Thread-27702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:33:14.613 [DEBUG] [Thread-27702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:33:14.613 [DEBUG] [Thread-27702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:33:14.613 [DEBUG] [Thread-27702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:33:14.637 [INFO] [Thread-27702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:33:14.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:33:15.426 [DEBUG] [Thread-27702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:33:15.427 [DEBUG] [Thread-27702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:33:15.427 [DEBUG] [Thread-27702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:33:15.467 [DEBUG] [Thread-27702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:33:15.467 [DEBUG] [Thread-27702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:33:15.470 [DEBUG] [Thread-27702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:33:15.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:33:15.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:33:15.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:33:15.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:33:15.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:33:15.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:33:15.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:33:15.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:33:15.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:33:15.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.897698 -999.00   +9.20   6.41     82   +6.40 1 1 1 2 1     0    0 3.50 21.45 ZNESW 7.9 6.4 114.6 9.7 9.7 -24.8 9.6 -23.6 9.2 -21.5 9.6 -23.4
2026-04-15T23:33:15.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:33:15.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:33:15.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.897698
2026-04-15T23:33:15.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:33:15.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:33:15.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:33:15.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:33:15.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:33:15.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:32:55', tmtdew=3.31869, humidity=79.6122, cloud=0.0, wind=9.89928, temperature=9.01349, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:32:41.107', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.08274999999999899, -0.031749999999998835, -0.08150000000000013, -0.04749999999999943, -0.0037499999999983658, -0.0259999999999998, 0.01425000000000054, 0.006499999999999062, -0.09399999999999942, -0.025750000000000384, -0.11999999999999922, -0.028999999999999915, 0.04824999999999946, -0.034000000000000696, -0.019000000000000128, -0.020749999999999602, -0.06750000000000078, -0.011000000000001009, -0.03275000000000183, -0.01600000000000179, 0.02374999999999794, -0.008749999999999147, 0.0017499999999994742, 0.01899999999999835, -0.08349999999999902, -0.012249999999999872, 0.00849999999999973, 0.016000000000000014, 0.006000000000000227, 0.04100000000000037, 0.058000000000001606, -0.07325000000000159], zp_timestamp='2026-04-15T21:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:33:15.491 [DEBUG] [Thread-27702] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:33:15.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:33:15.722 [DEBUG] [Thread-27705] [transport.py] [_log()] starting thread (client mode): 0xf1335540
2026-04-15T23:33:15.722 [DEBUG] [Thread-27705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:33:15.736 [DEBUG] [Thread-27705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:33:15.736 [INFO] [Thread-27705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:33:15.744 [DEBUG] [Thread-27705] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:33:15.744 [DEBUG] [Thread-27705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:33:15.744 [DEBUG] [Thread-27705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:33:15.744 [DEBUG] [Thread-27705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:33:15.744 [DEBUG] [Thread-27705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:33:15.744 [DEBUG] [Thread-27705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:33:15.744 [DEBUG] [Thread-27705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:33:15.745 [DEBUG] [Thread-27705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:33:15.745 [DEBUG] [Thread-27705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:33:15.745 [DEBUG] [Thread-27705] [transport.py] [_log()] client lang: <none>
2026-04-15T23:33:15.745 [DEBUG] [Thread-27705] [transport.py] [_log()] server lang: <none>
2026-04-15T23:33:15.745 [DEBUG] [Thread-27705] [transport.py] [_log()] kex follows: False
2026-04-15T23:33:15.745 [DEBUG] [Thread-27705] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:33:15.745 [DEBUG] [Thread-27705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:33:15.745 [DEBUG] [Thread-27705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:33:15.745 [DEBUG] [Thread-27705] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:33:15.745 [DEBUG] [Thread-27705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:33:15.745 [DEBUG] [Thread-27705] [transport.py] [_log()] Compression: none
2026-04-15T23:33:15.746 [DEBUG] [Thread-27705] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:33:15.803 [DEBUG] [Thread-27705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:33:15.803 [DEBUG] [Thread-27705] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:33:15.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:33:15.804 [DEBUG] [Thread-27705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:33:15.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:33:15.860 [DEBUG] [Thread-27705] [transport.py] [_log()] userauth is OK
2026-04-15T23:33:15.860 [DEBUG] [Thread-27705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:33:15.861 [DEBUG] [Thread-27705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:33:15.861 [DEBUG] [Thread-27705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:33:15.861 [DEBUG] [Thread-27705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:33:15.887 [INFO] [Thread-27705] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:33:15.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:33:15.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:33:16.670 [DEBUG] [Thread-27705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:33:16.671 [DEBUG] [Thread-27705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:33:16.720 [DEBUG] [Thread-27705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:33:16.721 [DEBUG] [Thread-27705] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:33:16.732 [DEBUG] [Thread-27705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:33:16.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:33:16.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')
2026-04-15T23:33:16.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
2026-04-15T23:33:16.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:33:16.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:33:16.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:33:16.781 [DEBUG] [Thread-27705] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:33:27.909 [DEBUG] [Thread-27707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:33:36.949 [DEBUG] [Thread-27708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:33:42.954 [DEBUG] [Thread-27709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:33:46.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:33:46.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:33:46.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
2026-04-15T23:33:48.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 33, 31), 3.32679, 79.5624, 0.0, 9.6876, 8.98031, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:33:48.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:33:31
2026-04-15T23:33:48.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:33:48.949 [DEBUG] [Thread-27710] [transport.py] [_log()] starting thread (client mode): 0xee991f30
2026-04-15T23:33:48.949 [DEBUG] [Thread-27710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:33:48.969 [DEBUG] [Thread-27710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:33:48.969 [INFO] [Thread-27710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:33:48.972 [DEBUG] [Thread-27710] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:33:48.972 [DEBUG] [Thread-27710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:33:48.972 [DEBUG] [Thread-27710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:33:48.972 [DEBUG] [Thread-27710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:33:48.973 [DEBUG] [Thread-27710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:33:48.973 [DEBUG] [Thread-27710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:33:48.973 [DEBUG] [Thread-27710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:33:48.973 [DEBUG] [Thread-27710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:33:48.973 [DEBUG] [Thread-27710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:33:48.973 [DEBUG] [Thread-27710] [transport.py] [_log()] client lang: <none>
2026-04-15T23:33:48.973 [DEBUG] [Thread-27710] [transport.py] [_log()] server lang: <none>
2026-04-15T23:33:48.973 [DEBUG] [Thread-27710] [transport.py] [_log()] kex follows: False
2026-04-15T23:33:48.973 [DEBUG] [Thread-27710] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:33:48.973 [DEBUG] [Thread-27710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:33:48.973 [DEBUG] [Thread-27710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:33:48.974 [DEBUG] [Thread-27710] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:33:48.974 [DEBUG] [Thread-27710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:33:48.974 [DEBUG] [Thread-27710] [transport.py] [_log()] Compression: none
2026-04-15T23:33:48.974 [DEBUG] [Thread-27710] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:33:48.991 [DEBUG] [Thread-27710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:33:48.991 [DEBUG] [Thread-27710] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:33:48.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:33:48.992 [DEBUG] [Thread-27710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:33:48.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:33:48.993 [DEBUG] [Thread-27710] [transport.py] [_log()] userauth is OK
2026-04-15T23:33:48.993 [DEBUG] [Thread-27710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:33:48.993 [DEBUG] [Thread-27710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:33:48.993 [DEBUG] [Thread-27710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:33:48.993 [DEBUG] [Thread-27710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:33:49.028 [INFO] [Thread-27710] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:33:49.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:33:49.825 [DEBUG] [Thread-27710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:33:49.825 [DEBUG] [Thread-27710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:33:49.825 [DEBUG] [Thread-27710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:33:49.866 [DEBUG] [Thread-27710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:33:49.866 [DEBUG] [Thread-27710] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:33:49.868 [DEBUG] [Thread-27710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:33:49.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:33:49.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:33:49.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:33:49.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:33:49.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:33:49.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:33:49.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:33:49.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:33:49.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:33:49.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.898045 -999.00   +9.20   7.14     82   +6.40 1 1 1 2 1     0    0 3.41 18.87 ZNESW 7.3 7.1 113.4 9.1 9.7 -24.9 9.5 -23.7 9.3 -21.4 9.6 -23.5
2026-04-15T23:33:49.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:33:49.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:33:49.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.898045
2026-04-15T23:33:49.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:33:49.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:33:49.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:33:49.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:33:49.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:33:49.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:33:31', tmtdew=3.32679, humidity=79.5624, cloud=0.0, wind=9.6876, temperature=8.98031, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:33:11.088', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.08274999999999899, -0.031749999999998835, -0.08150000000000013, -0.04749999999999943, -0.0037499999999983658, -0.0259999999999998, 0.01425000000000054, 0.006499999999999062, -0.09399999999999942, -0.025750000000000384, -0.11999999999999922, -0.028999999999999915, 0.04824999999999946, -0.034000000000000696, -0.019000000000000128, -0.020749999999999602, -0.06750000000000078, -0.011000000000001009, -0.03275000000000183, -0.01600000000000179, 0.02374999999999794, -0.008749999999999147, 0.0017499999999994742, 0.01899999999999835, -0.08349999999999902, -0.012249999999999872, 0.00849999999999973, 0.016000000000000014, 0.006000000000000227, 0.04100000000000037, 0.058000000000001606, -0.07325000000000159], zp_timestamp='2026-04-15T21:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:33:49.891 [DEBUG] [Thread-27710] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:33:50.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:33:50.111 [DEBUG] [Thread-27713] [transport.py] [_log()] starting thread (client mode): 0xee991840
2026-04-15T23:33:50.111 [DEBUG] [Thread-27713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:33:50.128 [DEBUG] [Thread-27713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:33:50.128 [INFO] [Thread-27713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:33:50.137 [DEBUG] [Thread-27713] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:33:50.137 [DEBUG] [Thread-27713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:33:50.137 [DEBUG] [Thread-27713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:33:50.137 [DEBUG] [Thread-27713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:33:50.138 [DEBUG] [Thread-27713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:33:50.138 [DEBUG] [Thread-27713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:33:50.138 [DEBUG] [Thread-27713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:33:50.138 [DEBUG] [Thread-27713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:33:50.138 [DEBUG] [Thread-27713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:33:50.138 [DEBUG] [Thread-27713] [transport.py] [_log()] client lang: <none>
2026-04-15T23:33:50.138 [DEBUG] [Thread-27713] [transport.py] [_log()] server lang: <none>
2026-04-15T23:33:50.138 [DEBUG] [Thread-27713] [transport.py] [_log()] kex follows: False
2026-04-15T23:33:50.138 [DEBUG] [Thread-27713] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:33:50.138 [DEBUG] [Thread-27713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:33:50.138 [DEBUG] [Thread-27713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:33:50.139 [DEBUG] [Thread-27713] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:33:50.139 [DEBUG] [Thread-27713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:33:50.139 [DEBUG] [Thread-27713] [transport.py] [_log()] Compression: none
2026-04-15T23:33:50.139 [DEBUG] [Thread-27713] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:33:50.195 [DEBUG] [Thread-27713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:33:50.196 [DEBUG] [Thread-27713] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:33:50.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:33:50.196 [DEBUG] [Thread-27713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:33:50.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:33:50.252 [DEBUG] [Thread-27713] [transport.py] [_log()] userauth is OK
2026-04-15T23:33:50.252 [DEBUG] [Thread-27713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:33:50.252 [DEBUG] [Thread-27713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:33:50.252 [DEBUG] [Thread-27713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:33:50.252 [DEBUG] [Thread-27713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:33:50.278 [INFO] [Thread-27713] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:33:50.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:33:50.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:33:51.088 [DEBUG] [Thread-27713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:33:51.088 [DEBUG] [Thread-27713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:33:51.136 [DEBUG] [Thread-27713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:33:51.136 [DEBUG] [Thread-27713] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:33:51.145 [DEBUG] [Thread-27713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:33:51.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:33: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')
2026-04-15T23:33:51.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
2026-04-15T23:33:51.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:33:51.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:33:51.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:33:51.180 [DEBUG] [Thread-27713] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:33:57.986 [DEBUG] [Thread-27715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:34:13.029 [DEBUG] [Thread-27716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:34:14.389 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:34:14.390 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:34:21.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:34:21.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:34:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:34:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 34, 7), 3.3309, 79.5458, 0.0, 9.72288, 9.03008, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:34:22.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:34:07
2026-04-15T23:34:22.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:34:23.308 [DEBUG] [Thread-27717] [transport.py] [_log()] starting thread (client mode): 0xee9904c0
2026-04-15T23:34:23.308 [DEBUG] [Thread-27717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:34:23.327 [DEBUG] [Thread-27717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:34:23.328 [INFO] [Thread-27717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:34:23.331 [DEBUG] [Thread-27717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:34:23.331 [DEBUG] [Thread-27717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:34:23.331 [DEBUG] [Thread-27717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:34:23.331 [DEBUG] [Thread-27717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:34:23.331 [DEBUG] [Thread-27717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:34:23.331 [DEBUG] [Thread-27717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:34:23.331 [DEBUG] [Thread-27717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:34:23.331 [DEBUG] [Thread-27717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:34:23.331 [DEBUG] [Thread-27717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:34:23.331 [DEBUG] [Thread-27717] [transport.py] [_log()] client lang: <none>
2026-04-15T23:34:23.331 [DEBUG] [Thread-27717] [transport.py] [_log()] server lang: <none>
2026-04-15T23:34:23.331 [DEBUG] [Thread-27717] [transport.py] [_log()] kex follows: False
2026-04-15T23:34:23.331 [DEBUG] [Thread-27717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:34:23.332 [DEBUG] [Thread-27717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:34:23.332 [DEBUG] [Thread-27717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:34:23.332 [DEBUG] [Thread-27717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:34:23.332 [DEBUG] [Thread-27717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:34:23.332 [DEBUG] [Thread-27717] [transport.py] [_log()] Compression: none
2026-04-15T23:34:23.332 [DEBUG] [Thread-27717] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:34:23.349 [DEBUG] [Thread-27717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:34:23.349 [DEBUG] [Thread-27717] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:34:23.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:34:23.350 [DEBUG] [Thread-27717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:34:23.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:34:23.393 [DEBUG] [Thread-27717] [transport.py] [_log()] userauth is OK
2026-04-15T23:34:23.393 [DEBUG] [Thread-27717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:34:23.393 [DEBUG] [Thread-27717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:34:23.393 [DEBUG] [Thread-27717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:34:23.393 [DEBUG] [Thread-27717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:34:23.418 [INFO] [Thread-27717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:34:23.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:34:24.208 [DEBUG] [Thread-27717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:34:24.208 [DEBUG] [Thread-27717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:34:24.209 [DEBUG] [Thread-27717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:34:24.249 [DEBUG] [Thread-27717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:34:24.249 [DEBUG] [Thread-27717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:34:24.252 [DEBUG] [Thread-27717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:34:24.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:34:24.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:34:24.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:34:24.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:34:24.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:34:24.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:34:24.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:34:24.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:34:24.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:34:24.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.898392 -999.00   +9.10   7.36     82   +6.30 1 1 1 2 1     0    0 3.47 17.92 ZNESW 7.5 7.4 107.6 8.7 9.7 -24.8 9.6 -23.6 9.2 -21.6 9.5 -23.5
2026-04-15T23:34:24.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:34:24.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:34:24.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.898392
2026-04-15T23:34:24.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:34:24.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:34:24.278 [DEBUG] [Thread-27717] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:34:24.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:34:24.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:34:24.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:34:24.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:34:07', tmtdew=3.3309, humidity=79.5458, cloud=0.0, wind=9.72288, temperature=9.03008, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:33:41.069', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.08274999999999899, -0.031749999999998835, -0.08150000000000013, -0.04749999999999943, -0.0037499999999983658, -0.0259999999999998, 0.01425000000000054, 0.006499999999999062, -0.09399999999999942, -0.025750000000000384, -0.11999999999999922, -0.028999999999999915, 0.04824999999999946, -0.034000000000000696, -0.019000000000000128, -0.020749999999999602, -0.06750000000000078, -0.011000000000001009, -0.03275000000000183, -0.01600000000000179, 0.02374999999999794, -0.008749999999999147, 0.0017499999999994742, 0.01899999999999835, -0.08349999999999902, -0.012249999999999872, 0.00849999999999973, 0.016000000000000014, 0.006000000000000227, 0.04100000000000037, 0.058000000000001606, -0.07325000000000159], zp_timestamp='2026-04-15T21:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:34:24.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:34:24.544 [DEBUG] [Thread-27720] [transport.py] [_log()] starting thread (client mode): 0xee990220
2026-04-15T23:34:24.544 [DEBUG] [Thread-27720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:34:24.559 [DEBUG] [Thread-27720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:34:24.559 [INFO] [Thread-27720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:34:24.567 [DEBUG] [Thread-27720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:34:24.567 [DEBUG] [Thread-27720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:34:24.567 [DEBUG] [Thread-27720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:34:24.568 [DEBUG] [Thread-27720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:34:24.568 [DEBUG] [Thread-27720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:34:24.568 [DEBUG] [Thread-27720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:34:24.568 [DEBUG] [Thread-27720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:34:24.568 [DEBUG] [Thread-27720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:34:24.568 [DEBUG] [Thread-27720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:34:24.568 [DEBUG] [Thread-27720] [transport.py] [_log()] client lang: <none>
2026-04-15T23:34:24.568 [DEBUG] [Thread-27720] [transport.py] [_log()] server lang: <none>
2026-04-15T23:34:24.568 [DEBUG] [Thread-27720] [transport.py] [_log()] kex follows: False
2026-04-15T23:34:24.568 [DEBUG] [Thread-27720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:34:24.568 [DEBUG] [Thread-27720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:34:24.569 [DEBUG] [Thread-27720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:34:24.569 [DEBUG] [Thread-27720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:34:24.569 [DEBUG] [Thread-27720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:34:24.569 [DEBUG] [Thread-27720] [transport.py] [_log()] Compression: none
2026-04-15T23:34:24.569 [DEBUG] [Thread-27720] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:34:24.630 [DEBUG] [Thread-27720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:34:24.630 [DEBUG] [Thread-27720] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:34:24.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:34:24.631 [DEBUG] [Thread-27720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:34:24.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:34:24.687 [DEBUG] [Thread-27720] [transport.py] [_log()] userauth is OK
2026-04-15T23:34:24.688 [DEBUG] [Thread-27720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:34:24.688 [DEBUG] [Thread-27720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:34:24.688 [DEBUG] [Thread-27720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:34:24.688 [DEBUG] [Thread-27720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:34:24.713 [INFO] [Thread-27720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:34:24.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:34:24.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:34:25.522 [DEBUG] [Thread-27720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:34:25.522 [DEBUG] [Thread-27720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:34:25.570 [DEBUG] [Thread-27720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:34:25.570 [DEBUG] [Thread-27720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:34:25.578 [DEBUG] [Thread-27720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:34:25.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:34:25.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')
2026-04-15T23:34:25.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
2026-04-15T23:34:25.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:34:25.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:34:25.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:34:25.611 [DEBUG] [Thread-27720] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:34:27.517 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:34:28.060 [DEBUG] [Thread-27722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:34:30.714 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:34:35.770 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:34:37.093 [DEBUG] [Thread-27723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:34:41.259 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:34:43.100 [DEBUG] [Thread-27724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:34:55.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:34:55.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:34:55.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
2026-04-15T23:34:56.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 34, 42), 3.07287, 81.0252, 0.0, 11.6813, 9.02698, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:34:56.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:34:42
2026-04-15T23:34:57.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:34:57.678 [DEBUG] [Thread-27725] [transport.py] [_log()] starting thread (client mode): 0xf1350f10
2026-04-15T23:34:57.678 [DEBUG] [Thread-27725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:34:57.698 [DEBUG] [Thread-27725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:34:57.698 [INFO] [Thread-27725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:34:57.701 [DEBUG] [Thread-27725] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:34:57.701 [DEBUG] [Thread-27725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:34:57.702 [DEBUG] [Thread-27725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:34:57.702 [DEBUG] [Thread-27725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:34:57.702 [DEBUG] [Thread-27725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:34:57.702 [DEBUG] [Thread-27725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:34:57.702 [DEBUG] [Thread-27725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:34:57.702 [DEBUG] [Thread-27725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:34:57.702 [DEBUG] [Thread-27725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:34:57.702 [DEBUG] [Thread-27725] [transport.py] [_log()] client lang: <none>
2026-04-15T23:34:57.702 [DEBUG] [Thread-27725] [transport.py] [_log()] server lang: <none>
2026-04-15T23:34:57.702 [DEBUG] [Thread-27725] [transport.py] [_log()] kex follows: False
2026-04-15T23:34:57.702 [DEBUG] [Thread-27725] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:34:57.703 [DEBUG] [Thread-27725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:34:57.703 [DEBUG] [Thread-27725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:34:57.703 [DEBUG] [Thread-27725] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:34:57.703 [DEBUG] [Thread-27725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:34:57.703 [DEBUG] [Thread-27725] [transport.py] [_log()] Compression: none
2026-04-15T23:34:57.703 [DEBUG] [Thread-27725] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:34:57.719 [DEBUG] [Thread-27725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:34:57.720 [DEBUG] [Thread-27725] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:34:57.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:34:57.720 [DEBUG] [Thread-27725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:34:57.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:34:57.721 [DEBUG] [Thread-27725] [transport.py] [_log()] userauth is OK
2026-04-15T23:34:57.721 [DEBUG] [Thread-27725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:34:57.722 [DEBUG] [Thread-27725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:34:57.722 [DEBUG] [Thread-27725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:34:57.722 [DEBUG] [Thread-27725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:34:57.740 [INFO] [Thread-27725] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:34:57.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:34:58.131 [DEBUG] [Thread-27727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:34:58.542 [DEBUG] [Thread-27725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:34:58.542 [DEBUG] [Thread-27725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:34:58.543 [DEBUG] [Thread-27725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:34:58.583 [DEBUG] [Thread-27725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:34:58.583 [DEBUG] [Thread-27725] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:34:58.585 [DEBUG] [Thread-27725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:34:58.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:34:58.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:34:58.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:34:58.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:34:58.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:34:58.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:34:58.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:34:58.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:34:58.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:34:58.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.898740 -999.00   +9.00   7.87     83   +6.30 1 1 1 2 1     0    0 3.29 15.42 ZNESW 7.5 7.9 108.7 8.9 9.7 -24.9 9.5 -23.7 9.2 -21.4 9.5 -23.5
2026-04-15T23:34:58.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:34:58.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:34:58.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.898740
2026-04-15T23:34:58.610 [DEBUG] [Thread-27725] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:34:58.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:34:58.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:34:58.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:34:58.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:34:58.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:34:58.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:34:42', tmtdew=3.07287, humidity=81.0252, cloud=0.0, wind=11.6813, temperature=9.02698, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:34:11.136', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.08274999999999899, -0.031749999999998835, -0.08150000000000013, -0.04749999999999943, -0.0037499999999983658, -0.0259999999999998, 0.01425000000000054, 0.006499999999999062, -0.09399999999999942, -0.025750000000000384, -0.11999999999999922, -0.028999999999999915, 0.04824999999999946, -0.034000000000000696, -0.019000000000000128, -0.020749999999999602, -0.06750000000000078, -0.011000000000001009, -0.03275000000000183, -0.01600000000000179, 0.02374999999999794, -0.008749999999999147, 0.0017499999999994742, 0.01899999999999835, -0.08349999999999902, -0.012249999999999872, 0.00849999999999973, 0.016000000000000014, 0.006000000000000227, 0.04100000000000037, 0.058000000000001606, -0.07325000000000159], zp_timestamp='2026-04-15T21:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:34:58.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:34:58.869 [DEBUG] [Thread-27729] [transport.py] [_log()] starting thread (client mode): 0xf1335870
2026-04-15T23:34:58.869 [DEBUG] [Thread-27729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:34:58.890 [DEBUG] [Thread-27729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:34:58.890 [INFO] [Thread-27729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:34:58.897 [DEBUG] [Thread-27729] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:34:58.897 [DEBUG] [Thread-27729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:34:58.897 [DEBUG] [Thread-27729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:34:58.898 [DEBUG] [Thread-27729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:34:58.898 [DEBUG] [Thread-27729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:34:58.898 [DEBUG] [Thread-27729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:34:58.898 [DEBUG] [Thread-27729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:34:58.898 [DEBUG] [Thread-27729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:34:58.898 [DEBUG] [Thread-27729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:34:58.898 [DEBUG] [Thread-27729] [transport.py] [_log()] client lang: <none>
2026-04-15T23:34:58.898 [DEBUG] [Thread-27729] [transport.py] [_log()] server lang: <none>
2026-04-15T23:34:58.898 [DEBUG] [Thread-27729] [transport.py] [_log()] kex follows: False
2026-04-15T23:34:58.898 [DEBUG] [Thread-27729] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:34:58.899 [DEBUG] [Thread-27729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:34:58.899 [DEBUG] [Thread-27729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:34:58.899 [DEBUG] [Thread-27729] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:34:58.899 [DEBUG] [Thread-27729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:34:58.899 [DEBUG] [Thread-27729] [transport.py] [_log()] Compression: none
2026-04-15T23:34:58.899 [DEBUG] [Thread-27729] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:34:58.955 [DEBUG] [Thread-27729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:34:58.955 [DEBUG] [Thread-27729] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:34:58.956 [DEBUG] [Thread-27729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:34:58.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:34:58.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:34:59.012 [DEBUG] [Thread-27729] [transport.py] [_log()] userauth is OK
2026-04-15T23:34:59.012 [DEBUG] [Thread-27729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:34:59.012 [DEBUG] [Thread-27729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:34:59.013 [DEBUG] [Thread-27729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:34:59.013 [DEBUG] [Thread-27729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:34:59.038 [INFO] [Thread-27729] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:34:59.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:34:59.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:34:59.880 [DEBUG] [Thread-27729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:34:59.880 [DEBUG] [Thread-27729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:34:59.928 [DEBUG] [Thread-27729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:34:59.928 [DEBUG] [Thread-27729] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:34:59.938 [DEBUG] [Thread-27729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:34:59.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:34:59.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')
2026-04-15T23:34:59.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
2026-04-15T23:34:59.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:34:59.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:34:59.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:34:59.974 [DEBUG] [Thread-27729] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:35:00.624 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:35:05.112 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:35:13.162 [DEBUG] [Thread-27731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:35:14.592 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:35:14.593 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:35:24.487 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:35:28.210 [DEBUG] [Thread-27732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:35:28.840 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:35:29.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:35:29.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:35:29.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
2026-04-15T23:35:31.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 35, 17), 3.29275, 79.4794, 0.0, 11.223, 9.03008, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:35:31.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:35:17
2026-04-15T23:35:31.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:35:31.986 [DEBUG] [Thread-27733] [transport.py] [_log()] starting thread (client mode): 0xf1336650
2026-04-15T23:35:32.384 [DEBUG] [Thread-27733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:35:32.384 [DEBUG] [Thread-27733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:35:32.384 [INFO] [Thread-27733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:35:32.387 [DEBUG] [Thread-27733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:35:32.387 [DEBUG] [Thread-27733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:35:32.387 [DEBUG] [Thread-27733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:35:32.387 [DEBUG] [Thread-27733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:35:32.387 [DEBUG] [Thread-27733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:35:32.388 [DEBUG] [Thread-27733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:35:32.388 [DEBUG] [Thread-27733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:35:32.388 [DEBUG] [Thread-27733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:35:32.388 [DEBUG] [Thread-27733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:35:32.388 [DEBUG] [Thread-27733] [transport.py] [_log()] client lang: <none>
2026-04-15T23:35:32.388 [DEBUG] [Thread-27733] [transport.py] [_log()] server lang: <none>
2026-04-15T23:35:32.388 [DEBUG] [Thread-27733] [transport.py] [_log()] kex follows: False
2026-04-15T23:35:32.388 [DEBUG] [Thread-27733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:35:32.388 [DEBUG] [Thread-27733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:35:32.388 [DEBUG] [Thread-27733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:35:32.388 [DEBUG] [Thread-27733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:35:32.388 [DEBUG] [Thread-27733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:35:32.388 [DEBUG] [Thread-27733] [transport.py] [_log()] Compression: none
2026-04-15T23:35:32.389 [DEBUG] [Thread-27733] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:35:32.404 [DEBUG] [Thread-27733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:35:32.404 [DEBUG] [Thread-27733] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:35:32.405 [DEBUG] [Thread-27733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:35:32.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:35:32.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:35:32.407 [DEBUG] [Thread-27733] [transport.py] [_log()] userauth is OK
2026-04-15T23:35:32.407 [DEBUG] [Thread-27733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:35:32.407 [DEBUG] [Thread-27733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:35:32.408 [DEBUG] [Thread-27733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:35:32.408 [DEBUG] [Thread-27733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:35:32.422 [INFO] [Thread-27733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:35:32.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:35:34.320 [DEBUG] [Thread-27733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:35:34.320 [DEBUG] [Thread-27733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:35:34.321 [DEBUG] [Thread-27733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:35:34.361 [DEBUG] [Thread-27733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:35:34.361 [DEBUG] [Thread-27733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:35:34.364 [DEBUG] [Thread-27733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:35:34.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:35:34.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:35:34.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:35:34.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:35:34.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:35:34.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:35:34.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:35:34.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:35:34.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:35:34.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.899087 -999.00   +9.00   6.60     83   +6.30 1 1 1 2 1     0    0 3.26 13.50 ZNESW 7.3 6.6 106.8 8.9 9.6 -24.7 9.5 -23.7 9.2 -21.5 9.5 -23.5
2026-04-15T23:35:34.390 [DEBUG] [Thread-27733] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:35:34.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:35:34.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:35:34.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.899087
2026-04-15T23:35:34.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:35:34.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:35:34.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:35:34.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:35:34.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:35:34.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:35:17', tmtdew=3.29275, humidity=79.4794, cloud=0.0, wind=11.223, temperature=9.03008, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:34:41.117', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.08274999999999899, -0.031749999999998835, -0.08150000000000013, -0.04749999999999943, -0.0037499999999983658, -0.0259999999999998, 0.01425000000000054, 0.006499999999999062, -0.09399999999999942, -0.025750000000000384, -0.11999999999999922, -0.028999999999999915, 0.04824999999999946, -0.034000000000000696, -0.019000000000000128, -0.020749999999999602, -0.06750000000000078, -0.011000000000001009, -0.03275000000000183, -0.01600000000000179, 0.02374999999999794, -0.008749999999999147, 0.0017499999999994742, 0.01899999999999835, -0.08349999999999902, -0.012249999999999872, 0.00849999999999973, 0.016000000000000014, 0.006000000000000227, 0.04100000000000037, 0.058000000000001606, -0.07325000000000159], zp_timestamp='2026-04-15T21:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:35:34.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:35:34.679 [DEBUG] [Thread-27736] [transport.py] [_log()] starting thread (client mode): 0xf1335540
2026-04-15T23:35:34.679 [DEBUG] [Thread-27736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:35:34.698 [DEBUG] [Thread-27736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:35:34.698 [INFO] [Thread-27736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:35:34.706 [DEBUG] [Thread-27736] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:35:34.706 [DEBUG] [Thread-27736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:35:34.706 [DEBUG] [Thread-27736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:35:34.706 [DEBUG] [Thread-27736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:35:34.706 [DEBUG] [Thread-27736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:35:34.706 [DEBUG] [Thread-27736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:35:34.706 [DEBUG] [Thread-27736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:35:34.706 [DEBUG] [Thread-27736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:35:34.706 [DEBUG] [Thread-27736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:35:34.706 [DEBUG] [Thread-27736] [transport.py] [_log()] client lang: <none>
2026-04-15T23:35:34.706 [DEBUG] [Thread-27736] [transport.py] [_log()] server lang: <none>
2026-04-15T23:35:34.706 [DEBUG] [Thread-27736] [transport.py] [_log()] kex follows: False
2026-04-15T23:35:34.706 [DEBUG] [Thread-27736] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:35:34.706 [DEBUG] [Thread-27736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:35:34.707 [DEBUG] [Thread-27736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:35:34.707 [DEBUG] [Thread-27736] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:35:34.707 [DEBUG] [Thread-27736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:35:34.707 [DEBUG] [Thread-27736] [transport.py] [_log()] Compression: none
2026-04-15T23:35:34.707 [DEBUG] [Thread-27736] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:35:34.764 [DEBUG] [Thread-27736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:35:34.764 [DEBUG] [Thread-27736] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:35:34.765 [DEBUG] [Thread-27736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:35:34.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:35:34.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:35:34.823 [DEBUG] [Thread-27736] [transport.py] [_log()] userauth is OK
2026-04-15T23:35:34.824 [DEBUG] [Thread-27736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:35:34.824 [DEBUG] [Thread-27736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:35:34.824 [DEBUG] [Thread-27736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:35:34.824 [DEBUG] [Thread-27736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:35:34.841 [INFO] [Thread-27736] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:35:34.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:35:34.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:35:35.586 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:35:35.653 [DEBUG] [Thread-27736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:35:35.653 [DEBUG] [Thread-27736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:35:35.701 [DEBUG] [Thread-27736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:35:35.701 [DEBUG] [Thread-27736] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:35:35.710 [DEBUG] [Thread-27736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:35:35.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:35:35.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')
2026-04-15T23:35:35.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') -> 00000000
2026-04-15T23:35:35.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:35:35.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:35:35.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:35:35.747 [DEBUG] [Thread-27736] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:35:37.245 [DEBUG] [Thread-27738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:35:39.972 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:35:43.241 [DEBUG] [Thread-27739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:35:58.287 [DEBUG] [Thread-27740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:36:05.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:36:05.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:36:05.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
2026-04-15T23:36:07.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 35, 53), 3.10486, 80.8593, 0.0, 10.4465, 9.12651, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:36:07.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:35:53
2026-04-15T23:36:07.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:36:07.834 [DEBUG] [Thread-27741] [transport.py] [_log()] starting thread (client mode): 0xee990490
2026-04-15T23:36:07.835 [DEBUG] [Thread-27741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:36:07.847 [DEBUG] [Thread-27741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:36:07.847 [INFO] [Thread-27741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:36:07.850 [DEBUG] [Thread-27741] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:36:07.850 [DEBUG] [Thread-27741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:36:07.850 [DEBUG] [Thread-27741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:36:07.850 [DEBUG] [Thread-27741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:36:07.850 [DEBUG] [Thread-27741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:36:07.850 [DEBUG] [Thread-27741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:36:07.850 [DEBUG] [Thread-27741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:36:07.850 [DEBUG] [Thread-27741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:36:07.851 [DEBUG] [Thread-27741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:36:07.851 [DEBUG] [Thread-27741] [transport.py] [_log()] client lang: <none>
2026-04-15T23:36:07.851 [DEBUG] [Thread-27741] [transport.py] [_log()] server lang: <none>
2026-04-15T23:36:07.851 [DEBUG] [Thread-27741] [transport.py] [_log()] kex follows: False
2026-04-15T23:36:07.851 [DEBUG] [Thread-27741] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:36:07.851 [DEBUG] [Thread-27741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:36:07.851 [DEBUG] [Thread-27741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:36:07.851 [DEBUG] [Thread-27741] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:36:07.851 [DEBUG] [Thread-27741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:36:07.851 [DEBUG] [Thread-27741] [transport.py] [_log()] Compression: none
2026-04-15T23:36:07.851 [DEBUG] [Thread-27741] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:36:07.869 [DEBUG] [Thread-27741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:36:07.869 [DEBUG] [Thread-27741] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:36:07.869 [DEBUG] [Thread-27741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:36:07.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:36:07.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:36:07.873 [DEBUG] [Thread-27741] [transport.py] [_log()] userauth is OK
2026-04-15T23:36:07.873 [DEBUG] [Thread-27741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:36:07.873 [DEBUG] [Thread-27741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:36:07.873 [DEBUG] [Thread-27741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:36:07.874 [DEBUG] [Thread-27741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:36:07.896 [INFO] [Thread-27741] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:36:07.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:36:08.702 [DEBUG] [Thread-27741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:36:08.702 [DEBUG] [Thread-27741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:36:08.702 [DEBUG] [Thread-27741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:36:08.743 [DEBUG] [Thread-27741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:36:08.743 [DEBUG] [Thread-27741] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:36:08.746 [DEBUG] [Thread-27741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:36:08.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:36:08.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:36:08.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:36:08.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:36:08.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:36:08.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:36:08.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:36:08.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:36:08.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:36:08.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.899781 -999.00   +8.90   6.66     83   +6.30 1 1 1 2 1     0    0 3.18 9.72 ZNESW 7.5 6.7 115.2 8.1 9.6 -24.7 9.5 -23.6 9.2 -21.3 9.5 -23.4
2026-04-15T23:36:08.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:36:08.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:36:08.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.899781
2026-04-15T23:36:08.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:36:08.772 [DEBUG] [Thread-27741] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:36:08.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:36:08.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:36:08.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:36:08.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:36:08.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:35:53', tmtdew=3.10486, humidity=80.8593, cloud=0.0, wind=10.4465, temperature=9.12651, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:35:41.078', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08474999999999966, -0.02674999999999983, -0.019000000000000128, -0.005499999999999616, -0.011749999999999261, -0.0039999999999995595, 0.020250000000000767, 0.0129999999999999, -0.07450000000000045, -0.021750000000000824, -0.07850000000000001, -0.006999999999999673, 0.04025000000000034, -0.020500000000000185, -0.021000000000000796, 0.004249999999998977, -0.02200000000000024, 0.005999999999998451, 0.00024999999999941735, 0.007499999999998508, 0.02874999999999872, 0.03125, 0.01025000000000098, 0.034000000000000696, -0.08799999999999919, -0.02725000000000044, 0.014499999999999957, 0.04300000000000104, 0.053000000000000824, 0.03300000000000125, 0.017000000000001236, -0.04225000000000101], zp_timestamp='2026-04-15T21:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:36:09.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:36:09.026 [DEBUG] [Thread-27744] [transport.py] [_log()] starting thread (client mode): 0xee9c3910
2026-04-15T23:36:09.026 [DEBUG] [Thread-27744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:36:09.041 [DEBUG] [Thread-27744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:36:09.041 [INFO] [Thread-27744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:36:09.048 [DEBUG] [Thread-27744] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:36:09.049 [DEBUG] [Thread-27744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:36:09.049 [DEBUG] [Thread-27744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:36:09.049 [DEBUG] [Thread-27744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:36:09.049 [DEBUG] [Thread-27744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:36:09.049 [DEBUG] [Thread-27744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:36:09.049 [DEBUG] [Thread-27744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:36:09.049 [DEBUG] [Thread-27744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:36:09.050 [DEBUG] [Thread-27744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:36:09.050 [DEBUG] [Thread-27744] [transport.py] [_log()] client lang: <none>
2026-04-15T23:36:09.050 [DEBUG] [Thread-27744] [transport.py] [_log()] server lang: <none>
2026-04-15T23:36:09.050 [DEBUG] [Thread-27744] [transport.py] [_log()] kex follows: False
2026-04-15T23:36:09.050 [DEBUG] [Thread-27744] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:36:09.050 [DEBUG] [Thread-27744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:36:09.050 [DEBUG] [Thread-27744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:36:09.051 [DEBUG] [Thread-27744] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:36:09.051 [DEBUG] [Thread-27744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:36:09.051 [DEBUG] [Thread-27744] [transport.py] [_log()] Compression: none
2026-04-15T23:36:09.051 [DEBUG] [Thread-27744] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:36:09.106 [DEBUG] [Thread-27744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:36:09.106 [DEBUG] [Thread-27744] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:36:09.107 [DEBUG] [Thread-27744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:36:09.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:36:09.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:36:09.164 [DEBUG] [Thread-27744] [transport.py] [_log()] userauth is OK
2026-04-15T23:36:09.164 [DEBUG] [Thread-27744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:36:09.164 [DEBUG] [Thread-27744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:36:09.164 [DEBUG] [Thread-27744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:36:09.165 [DEBUG] [Thread-27744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:36:09.190 [INFO] [Thread-27744] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:36:09.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:36:09.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:36:09.986 [DEBUG] [Thread-27744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:36:09.986 [DEBUG] [Thread-27744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:36:10.034 [DEBUG] [Thread-27744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:36:10.034 [DEBUG] [Thread-27744] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:36:10.047 [DEBUG] [Thread-27744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:36:10.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:36:10.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')
2026-04-15T23:36:10.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
2026-04-15T23:36:10.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:36:10.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:36:10.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:36:10.083 [DEBUG] [Thread-27744] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:36:13.316 [DEBUG] [Thread-27746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:36:14.792 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:36:14.793 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:36:28.355 [DEBUG] [Thread-27747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:36:37.417 [DEBUG] [Thread-27748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:36:38.600 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:36:40.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:36:40.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:36:40.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
2026-04-15T23:36:41.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 36, 28), 3.29711, 79.4463, 0.0, 10.6762, 8.96372, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:36:41.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:36:28
2026-04-15T23:36:41.674 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:36:41.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:36:42.200 [DEBUG] [Thread-27749] [transport.py] [_log()] starting thread (client mode): 0xf13e08b0
2026-04-15T23:36:42.201 [DEBUG] [Thread-27749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:36:42.219 [DEBUG] [Thread-27749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:36:42.219 [INFO] [Thread-27749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:36:42.222 [DEBUG] [Thread-27749] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:36:42.222 [DEBUG] [Thread-27749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:36:42.222 [DEBUG] [Thread-27749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:36:42.222 [DEBUG] [Thread-27749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:36:42.222 [DEBUG] [Thread-27749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:36:42.222 [DEBUG] [Thread-27749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:36:42.222 [DEBUG] [Thread-27749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:36:42.223 [DEBUG] [Thread-27749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:36:42.223 [DEBUG] [Thread-27749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:36:42.223 [DEBUG] [Thread-27749] [transport.py] [_log()] client lang: <none>
2026-04-15T23:36:42.223 [DEBUG] [Thread-27749] [transport.py] [_log()] server lang: <none>
2026-04-15T23:36:42.223 [DEBUG] [Thread-27749] [transport.py] [_log()] kex follows: False
2026-04-15T23:36:42.223 [DEBUG] [Thread-27749] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:36:42.223 [DEBUG] [Thread-27749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:36:42.223 [DEBUG] [Thread-27749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:36:42.223 [DEBUG] [Thread-27749] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:36:42.223 [DEBUG] [Thread-27749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:36:42.223 [DEBUG] [Thread-27749] [transport.py] [_log()] Compression: none
2026-04-15T23:36:42.224 [DEBUG] [Thread-27749] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:36:42.232 [DEBUG] [Thread-27749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:36:42.232 [DEBUG] [Thread-27749] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:36:42.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:36:42.232 [DEBUG] [Thread-27749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:36:42.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:36:42.234 [DEBUG] [Thread-27749] [transport.py] [_log()] userauth is OK
2026-04-15T23:36:42.234 [DEBUG] [Thread-27749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:36:42.234 [DEBUG] [Thread-27749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:36:42.234 [DEBUG] [Thread-27749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:36:42.234 [DEBUG] [Thread-27749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:36:42.251 [INFO] [Thread-27749] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:36:42.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:36:42.986 [DEBUG] [Thread-27749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:36:42.987 [DEBUG] [Thread-27749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:36:42.987 [DEBUG] [Thread-27749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:36:43.027 [DEBUG] [Thread-27749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:36:43.027 [DEBUG] [Thread-27749] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:36:43.030 [DEBUG] [Thread-27749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:36:43.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:36:43.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:36:43.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:36:43.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:36:43.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:36:43.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:36:43.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:36:43.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:36:43.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:36:43.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.900129 -999.00   +8.90   6.80     84   +6.30 1 1 1 2 1     0    0 3.07 6.54 ZNESW 7.2 6.8 104.6 9.1 9.6 -24.8 9.5 -23.5 9.2 -21.3 9.5 -23.4
2026-04-15T23:36:43.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:36:43.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:36:43.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.900129
2026-04-15T23:36:43.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:36:43.055 [DEBUG] [Thread-27749] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:36:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:36:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:36:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:36:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:36:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:36:28', tmtdew=3.29711, humidity=79.4463, cloud=0.0, wind=10.6762, temperature=8.96372, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:36:11.146', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08474999999999966, -0.02674999999999983, -0.019000000000000128, -0.005499999999999616, -0.011749999999999261, -0.0039999999999995595, 0.020250000000000767, 0.0129999999999999, -0.07450000000000045, -0.021750000000000824, -0.07850000000000001, -0.006999999999999673, 0.04025000000000034, -0.020500000000000185, -0.021000000000000796, 0.004249999999998977, -0.02200000000000024, 0.005999999999998451, 0.00024999999999941735, 0.007499999999998508, 0.02874999999999872, 0.03125, 0.01025000000000098, 0.034000000000000696, -0.08799999999999919, -0.02725000000000044, 0.014499999999999957, 0.04300000000000104, 0.053000000000000824, 0.03300000000000125, 0.017000000000001236, -0.04225000000000101], zp_timestamp='2026-04-15T21:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:36:43.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:36:43.315 [DEBUG] [Thread-27752] [transport.py] [_log()] starting thread (client mode): 0xf13e0520
2026-04-15T23:36:43.315 [DEBUG] [Thread-27752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:36:43.330 [DEBUG] [Thread-27752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:36:43.330 [INFO] [Thread-27752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:36:43.341 [DEBUG] [Thread-27752] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:36:43.341 [DEBUG] [Thread-27752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:36:43.341 [DEBUG] [Thread-27752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:36:43.341 [DEBUG] [Thread-27752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:36:43.341 [DEBUG] [Thread-27752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:36:43.341 [DEBUG] [Thread-27752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:36:43.341 [DEBUG] [Thread-27752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:36:43.341 [DEBUG] [Thread-27752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:36:43.342 [DEBUG] [Thread-27752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:36:43.342 [DEBUG] [Thread-27752] [transport.py] [_log()] client lang: <none>
2026-04-15T23:36:43.342 [DEBUG] [Thread-27752] [transport.py] [_log()] server lang: <none>
2026-04-15T23:36:43.342 [DEBUG] [Thread-27752] [transport.py] [_log()] kex follows: False
2026-04-15T23:36:43.342 [DEBUG] [Thread-27752] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:36:43.342 [DEBUG] [Thread-27752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:36:43.342 [DEBUG] [Thread-27752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:36:43.342 [DEBUG] [Thread-27752] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:36:43.342 [DEBUG] [Thread-27752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:36:43.342 [DEBUG] [Thread-27752] [transport.py] [_log()] Compression: none
2026-04-15T23:36:43.342 [DEBUG] [Thread-27752] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:36:43.386 [DEBUG] [Thread-27754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:36:43.399 [DEBUG] [Thread-27752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:36:43.400 [DEBUG] [Thread-27752] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:36:43.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:36:43.401 [DEBUG] [Thread-27752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:36:43.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:36:43.456 [DEBUG] [Thread-27752] [transport.py] [_log()] userauth is OK
2026-04-15T23:36:43.456 [DEBUG] [Thread-27752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:36:43.456 [DEBUG] [Thread-27752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:36:43.456 [DEBUG] [Thread-27752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:36:43.457 [DEBUG] [Thread-27752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:36:43.482 [INFO] [Thread-27752] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:36:43.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:36:43.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:36:44.287 [DEBUG] [Thread-27752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:36:44.287 [DEBUG] [Thread-27752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:36:44.335 [DEBUG] [Thread-27752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:36:44.335 [DEBUG] [Thread-27752] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:36:44.344 [DEBUG] [Thread-27752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:36:44.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:36:44.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')
2026-04-15T23:36:44.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
2026-04-15T23:36:44.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:36:44.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:36:44.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:36:44.377 [DEBUG] [Thread-27752] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:36:58.430 [DEBUG] [Thread-27755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:37:07.177 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:37:12.895 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:37:13.462 [DEBUG] [Thread-27756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:37:14.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:37:14.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:37:14.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
2026-04-15T23:37:14.993 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:37:14.995 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:37:15.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 37, 4), 3.29236, 79.4794, 0.0, 10.5527, 9.01349, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:37:15.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:37:04
2026-04-15T23:37:15.969 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:37:16.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:37:16.490 [DEBUG] [Thread-27757] [transport.py] [_log()] starting thread (client mode): 0xf13cace0
2026-04-15T23:37:16.490 [DEBUG] [Thread-27757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:37:16.505 [DEBUG] [Thread-27757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:37:16.505 [INFO] [Thread-27757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:37:16.508 [DEBUG] [Thread-27757] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:37:16.508 [DEBUG] [Thread-27757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:37:16.508 [DEBUG] [Thread-27757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:37:16.508 [DEBUG] [Thread-27757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:37:16.508 [DEBUG] [Thread-27757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:37:16.508 [DEBUG] [Thread-27757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:37:16.508 [DEBUG] [Thread-27757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:37:16.508 [DEBUG] [Thread-27757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:37:16.508 [DEBUG] [Thread-27757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:37:16.508 [DEBUG] [Thread-27757] [transport.py] [_log()] client lang: <none>
2026-04-15T23:37:16.508 [DEBUG] [Thread-27757] [transport.py] [_log()] server lang: <none>
2026-04-15T23:37:16.508 [DEBUG] [Thread-27757] [transport.py] [_log()] kex follows: False
2026-04-15T23:37:16.509 [DEBUG] [Thread-27757] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:37:16.509 [DEBUG] [Thread-27757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:37:16.509 [DEBUG] [Thread-27757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:37:16.509 [DEBUG] [Thread-27757] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:37:16.509 [DEBUG] [Thread-27757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:37:16.509 [DEBUG] [Thread-27757] [transport.py] [_log()] Compression: none
2026-04-15T23:37:16.509 [DEBUG] [Thread-27757] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:37:16.524 [DEBUG] [Thread-27757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:37:16.525 [DEBUG] [Thread-27757] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:37:16.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:37:16.526 [DEBUG] [Thread-27757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:37:16.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:37:16.526 [DEBUG] [Thread-27757] [transport.py] [_log()] userauth is OK
2026-04-15T23:37:16.526 [DEBUG] [Thread-27757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:37:16.527 [DEBUG] [Thread-27757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:37:16.527 [DEBUG] [Thread-27757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:37:16.527 [DEBUG] [Thread-27757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:37:16.548 [INFO] [Thread-27757] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:37:16.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:37:17.362 [DEBUG] [Thread-27757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:37:17.363 [DEBUG] [Thread-27757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:37:17.363 [DEBUG] [Thread-27757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:37:17.403 [DEBUG] [Thread-27757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:37:17.403 [DEBUG] [Thread-27757] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:37:17.406 [DEBUG] [Thread-27757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:37:17.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:37:17.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:37:17.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:37:17.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:37:17.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:37:17.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:37:17.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:37:17.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:37:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:37:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.900476 -999.00   +8.80   8.15     84   +6.30 1 1 1 2 1     0    0 3.01 3.65 ZNESW 7.9 8.2 109.4 8.7 9.6 -24.8 9.5 -23.4 9.2 -21.4 9.4 -23.5
2026-04-15T23:37:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:37:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:37:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.900476
2026-04-15T23:37:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:37:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:37:17.431 [DEBUG] [Thread-27757] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:37:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:37:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:37:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:37:17.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:37:04', tmtdew=3.29236, humidity=79.4794, cloud=0.0, wind=10.5527, temperature=9.01349, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:36:41.126', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08474999999999966, -0.02674999999999983, -0.019000000000000128, -0.005499999999999616, -0.011749999999999261, -0.0039999999999995595, 0.020250000000000767, 0.0129999999999999, -0.07450000000000045, -0.021750000000000824, -0.07850000000000001, -0.006999999999999673, 0.04025000000000034, -0.020500000000000185, -0.021000000000000796, 0.004249999999998977, -0.02200000000000024, 0.005999999999998451, 0.00024999999999941735, 0.007499999999998508, 0.02874999999999872, 0.03125, 0.01025000000000098, 0.034000000000000696, -0.08799999999999919, -0.02725000000000044, 0.014499999999999957, 0.04300000000000104, 0.053000000000000824, 0.03300000000000125, 0.017000000000001236, -0.04225000000000101], zp_timestamp='2026-04-15T21:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:37:17.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:37:17.689 [DEBUG] [Thread-27760] [transport.py] [_log()] starting thread (client mode): 0xf13c9c30
2026-04-15T23:37:17.689 [DEBUG] [Thread-27760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:37:17.704 [DEBUG] [Thread-27760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:37:17.704 [INFO] [Thread-27760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:37:17.713 [DEBUG] [Thread-27760] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:37:17.713 [DEBUG] [Thread-27760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:37:17.713 [DEBUG] [Thread-27760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:37:17.713 [DEBUG] [Thread-27760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:37:17.713 [DEBUG] [Thread-27760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:37:17.713 [DEBUG] [Thread-27760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:37:17.713 [DEBUG] [Thread-27760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:37:17.713 [DEBUG] [Thread-27760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:37:17.713 [DEBUG] [Thread-27760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:37:17.713 [DEBUG] [Thread-27760] [transport.py] [_log()] client lang: <none>
2026-04-15T23:37:17.713 [DEBUG] [Thread-27760] [transport.py] [_log()] server lang: <none>
2026-04-15T23:37:17.714 [DEBUG] [Thread-27760] [transport.py] [_log()] kex follows: False
2026-04-15T23:37:17.714 [DEBUG] [Thread-27760] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:37:17.714 [DEBUG] [Thread-27760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:37:17.714 [DEBUG] [Thread-27760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:37:17.714 [DEBUG] [Thread-27760] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:37:17.714 [DEBUG] [Thread-27760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:37:17.714 [DEBUG] [Thread-27760] [transport.py] [_log()] Compression: none
2026-04-15T23:37:17.714 [DEBUG] [Thread-27760] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:37:17.771 [DEBUG] [Thread-27760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:37:17.771 [DEBUG] [Thread-27760] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:37:17.772 [DEBUG] [Thread-27760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:37:17.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:37:17.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:37:17.828 [DEBUG] [Thread-27760] [transport.py] [_log()] userauth is OK
2026-04-15T23:37:17.828 [DEBUG] [Thread-27760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:37:17.828 [DEBUG] [Thread-27760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:37:17.828 [DEBUG] [Thread-27760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:37:17.829 [DEBUG] [Thread-27760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:37:17.855 [INFO] [Thread-27760] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:37:17.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:37:17.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:37:18.694 [DEBUG] [Thread-27760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:37:18.695 [DEBUG] [Thread-27760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:37:18.743 [DEBUG] [Thread-27760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:37:18.743 [DEBUG] [Thread-27760] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:37:18.752 [DEBUG] [Thread-27760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:37:18.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:37:18.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')
2026-04-15T23:37:18.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
2026-04-15T23:37:18.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:37:18.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:37:18.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:37:18.787 [DEBUG] [Thread-27760] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:37:22.337 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:37:28.493 [DEBUG] [Thread-27762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:37:37.564 [DEBUG] [Thread-27763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:37:43.534 [DEBUG] [Thread-27764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:37:48.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:37:48.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:37:48.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
2026-04-15T23:37:50.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 37, 39), 3.08908, 80.9257, 0.0, 10.1995, 8.96062, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:37:50.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:37:39
2026-04-15T23:37:50.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:37:50.964 [DEBUG] [Thread-27765] [transport.py] [_log()] starting thread (client mode): 0xf13e2740
2026-04-15T23:37:50.965 [DEBUG] [Thread-27765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:37:50.986 [DEBUG] [Thread-27765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:37:50.987 [INFO] [Thread-27765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:37:50.990 [DEBUG] [Thread-27765] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:37:50.990 [DEBUG] [Thread-27765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:37:50.990 [DEBUG] [Thread-27765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:37:50.990 [DEBUG] [Thread-27765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:37:50.990 [DEBUG] [Thread-27765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:37:50.990 [DEBUG] [Thread-27765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:37:50.990 [DEBUG] [Thread-27765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:37:50.990 [DEBUG] [Thread-27765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:37:50.990 [DEBUG] [Thread-27765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:37:50.991 [DEBUG] [Thread-27765] [transport.py] [_log()] client lang: <none>
2026-04-15T23:37:50.991 [DEBUG] [Thread-27765] [transport.py] [_log()] server lang: <none>
2026-04-15T23:37:50.991 [DEBUG] [Thread-27765] [transport.py] [_log()] kex follows: False
2026-04-15T23:37:50.991 [DEBUG] [Thread-27765] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:37:50.991 [DEBUG] [Thread-27765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:37:50.991 [DEBUG] [Thread-27765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:37:50.991 [DEBUG] [Thread-27765] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:37:50.991 [DEBUG] [Thread-27765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:37:50.991 [DEBUG] [Thread-27765] [transport.py] [_log()] Compression: none
2026-04-15T23:37:50.991 [DEBUG] [Thread-27765] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:37:51.008 [DEBUG] [Thread-27765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:37:51.009 [DEBUG] [Thread-27765] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:37:51.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:37:51.010 [DEBUG] [Thread-27765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:37:51.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:37:51.011 [DEBUG] [Thread-27765] [transport.py] [_log()] userauth is OK
2026-04-15T23:37:51.011 [DEBUG] [Thread-27765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:37:51.011 [DEBUG] [Thread-27765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:37:51.011 [DEBUG] [Thread-27765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:37:51.011 [DEBUG] [Thread-27765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:37:51.030 [INFO] [Thread-27765] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:37:51.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:37:51.808 [DEBUG] [Thread-27765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:37:51.808 [DEBUG] [Thread-27765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:37:51.809 [DEBUG] [Thread-27765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:37:51.849 [DEBUG] [Thread-27765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:37:51.849 [DEBUG] [Thread-27765] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:37:51.852 [DEBUG] [Thread-27765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:37:51.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:37:51.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:37:51.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:37:51.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:37:51.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:37:51.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:37:51.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:37:51.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:37:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:37:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.900823 -999.00   +8.80   7.34     84   +6.30 1 1 1 2 1     0    0 2.91 0.96 ZNESW 6.9 7.3 104.2 9.5 9.6 -25.0 9.5 -23.5 9.2 -21.4 9.5 -23.4
2026-04-15T23:37:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:37:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:37:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.900823
2026-04-15T23:37:51.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:37:51.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:37:51.874 [DEBUG] [Thread-27765] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:37:51.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:37:51.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:37:51.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:37:51.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:37:39', tmtdew=3.08908, humidity=80.9257, cloud=0.0, wind=10.1995, temperature=8.96062, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:37:11.107', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08474999999999966, -0.02674999999999983, -0.019000000000000128, -0.005499999999999616, -0.011749999999999261, -0.0039999999999995595, 0.020250000000000767, 0.0129999999999999, -0.07450000000000045, -0.021750000000000824, -0.07850000000000001, -0.006999999999999673, 0.04025000000000034, -0.020500000000000185, -0.021000000000000796, 0.004249999999998977, -0.02200000000000024, 0.005999999999998451, 0.00024999999999941735, 0.007499999999998508, 0.02874999999999872, 0.03125, 0.01025000000000098, 0.034000000000000696, -0.08799999999999919, -0.02725000000000044, 0.014499999999999957, 0.04300000000000104, 0.053000000000000824, 0.03300000000000125, 0.017000000000001236, -0.04225000000000101], zp_timestamp='2026-04-15T21:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:37:52.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:37:52.130 [DEBUG] [Thread-27768] [transport.py] [_log()] starting thread (client mode): 0xf13e1d20
2026-04-15T23:37:52.131 [DEBUG] [Thread-27768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:37:52.145 [DEBUG] [Thread-27768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:37:52.145 [INFO] [Thread-27768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:37:52.152 [DEBUG] [Thread-27768] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:37:52.152 [DEBUG] [Thread-27768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:37:52.152 [DEBUG] [Thread-27768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:37:52.152 [DEBUG] [Thread-27768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:37:52.152 [DEBUG] [Thread-27768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:37:52.153 [DEBUG] [Thread-27768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:37:52.153 [DEBUG] [Thread-27768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:37:52.153 [DEBUG] [Thread-27768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:37:52.153 [DEBUG] [Thread-27768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:37:52.153 [DEBUG] [Thread-27768] [transport.py] [_log()] client lang: <none>
2026-04-15T23:37:52.153 [DEBUG] [Thread-27768] [transport.py] [_log()] server lang: <none>
2026-04-15T23:37:52.153 [DEBUG] [Thread-27768] [transport.py] [_log()] kex follows: False
2026-04-15T23:37:52.153 [DEBUG] [Thread-27768] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:37:52.153 [DEBUG] [Thread-27768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:37:52.153 [DEBUG] [Thread-27768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:37:52.153 [DEBUG] [Thread-27768] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:37:52.154 [DEBUG] [Thread-27768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:37:52.154 [DEBUG] [Thread-27768] [transport.py] [_log()] Compression: none
2026-04-15T23:37:52.154 [DEBUG] [Thread-27768] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:37:52.211 [DEBUG] [Thread-27768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:37:52.211 [DEBUG] [Thread-27768] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:37:52.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:37:52.212 [DEBUG] [Thread-27768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:37:52.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:37:52.268 [DEBUG] [Thread-27768] [transport.py] [_log()] userauth is OK
2026-04-15T23:37:52.268 [DEBUG] [Thread-27768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:37:52.268 [DEBUG] [Thread-27768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:37:52.268 [DEBUG] [Thread-27768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:37:52.268 [DEBUG] [Thread-27768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:37:52.296 [INFO] [Thread-27768] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:37:52.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:37:52.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:37:53.123 [DEBUG] [Thread-27768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:37:53.123 [DEBUG] [Thread-27768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:37:53.171 [DEBUG] [Thread-27768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:37:53.171 [DEBUG] [Thread-27768] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:37:53.180 [DEBUG] [Thread-27768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:37:53.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:37:53.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')
2026-04-15T23:37:53.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
2026-04-15T23:37:53.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:37:53.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:37:53.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:37:53.215 [DEBUG] [Thread-27768] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:37:58.562 [DEBUG] [Thread-27770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:38:13.605 [DEBUG] [Thread-27771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:38:15.200 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:38:15.202 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:38:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:38:23.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:38:23.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
2026-04-15T23:38:24.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 38, 15), 3.28566, 79.5126, 0.0, 10.4821, 8.98031, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:38:24.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:38:15
2026-04-15T23:38:24.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:38:25.333 [DEBUG] [Thread-27772] [transport.py] [_log()] starting thread (client mode): 0xee954040
2026-04-15T23:38:25.333 [DEBUG] [Thread-27772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:38:25.352 [DEBUG] [Thread-27772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:38:25.352 [INFO] [Thread-27772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:38:25.356 [DEBUG] [Thread-27772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:38:25.356 [DEBUG] [Thread-27772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:38:25.356 [DEBUG] [Thread-27772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:38:25.356 [DEBUG] [Thread-27772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:38:25.356 [DEBUG] [Thread-27772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:38:25.356 [DEBUG] [Thread-27772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:38:25.356 [DEBUG] [Thread-27772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:38:25.356 [DEBUG] [Thread-27772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:38:25.356 [DEBUG] [Thread-27772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:38:25.356 [DEBUG] [Thread-27772] [transport.py] [_log()] client lang: <none>
2026-04-15T23:38:25.356 [DEBUG] [Thread-27772] [transport.py] [_log()] server lang: <none>
2026-04-15T23:38:25.356 [DEBUG] [Thread-27772] [transport.py] [_log()] kex follows: False
2026-04-15T23:38:25.356 [DEBUG] [Thread-27772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:38:25.357 [DEBUG] [Thread-27772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:38:25.357 [DEBUG] [Thread-27772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:38:25.357 [DEBUG] [Thread-27772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:38:25.357 [DEBUG] [Thread-27772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:38:25.357 [DEBUG] [Thread-27772] [transport.py] [_log()] Compression: none
2026-04-15T23:38:25.357 [DEBUG] [Thread-27772] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:38:25.377 [DEBUG] [Thread-27772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:38:25.377 [DEBUG] [Thread-27772] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:38:25.378 [DEBUG] [Thread-27772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:38:25.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:38:25.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:38:25.379 [DEBUG] [Thread-27772] [transport.py] [_log()] userauth is OK
2026-04-15T23:38:25.379 [DEBUG] [Thread-27772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:38:25.379 [DEBUG] [Thread-27772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:38:25.379 [DEBUG] [Thread-27772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:38:25.379 [DEBUG] [Thread-27772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:38:25.415 [INFO] [Thread-27772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:38:25.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:38:26.206 [DEBUG] [Thread-27772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:38:26.206 [DEBUG] [Thread-27772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:38:26.206 [DEBUG] [Thread-27772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:38:26.247 [DEBUG] [Thread-27772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:38:26.247 [DEBUG] [Thread-27772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:38:26.248 [DEBUG] [Thread-27772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:38:26.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:38:26.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:38:26.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:38:26.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:38:26.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:38:26.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:38:26.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:38:26.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:38:26.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:38:26.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.901170 -999.00   +8.80   6.12     84   +6.30 1 1 1 2 1     0    0 2.80 -2.12 ZNESW 6.5 6.1 108.0 8.6 9.5 -24.7 9.4 -23.6 9.2 -21.4 9.4 -23.5
2026-04-15T23:38:26.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:38:26.266 [DEBUG] [Thread-27772] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:38:26.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:38:26.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.901170
2026-04-15T23:38:26.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:38:26.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:38:26.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:38:26.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:38:26.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:38:26.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:38:15', tmtdew=3.28566, humidity=79.5126, cloud=0.0, wind=10.4821, temperature=8.98031, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:37:41.088', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08474999999999966, -0.02674999999999983, -0.019000000000000128, -0.005499999999999616, -0.011749999999999261, -0.0039999999999995595, 0.020250000000000767, 0.0129999999999999, -0.07450000000000045, -0.021750000000000824, -0.07850000000000001, -0.006999999999999673, 0.04025000000000034, -0.020500000000000185, -0.021000000000000796, 0.004249999999998977, -0.02200000000000024, 0.005999999999998451, 0.00024999999999941735, 0.007499999999998508, 0.02874999999999872, 0.03125, 0.01025000000000098, 0.034000000000000696, -0.08799999999999919, -0.02725000000000044, 0.014499999999999957, 0.04300000000000104, 0.053000000000000824, 0.03300000000000125, 0.017000000000001236, -0.04225000000000101], zp_timestamp='2026-04-15T21:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:38:26.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:38:26.526 [DEBUG] [Thread-27775] [transport.py] [_log()] starting thread (client mode): 0xee9c22f0
2026-04-15T23:38:26.526 [DEBUG] [Thread-27775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:38:26.541 [DEBUG] [Thread-27775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:38:26.541 [INFO] [Thread-27775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:38:26.548 [DEBUG] [Thread-27775] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:38:26.548 [DEBUG] [Thread-27775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:38:26.549 [DEBUG] [Thread-27775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:38:26.549 [DEBUG] [Thread-27775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:38:26.549 [DEBUG] [Thread-27775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:38:26.549 [DEBUG] [Thread-27775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:38:26.549 [DEBUG] [Thread-27775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:38:26.549 [DEBUG] [Thread-27775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:38:26.549 [DEBUG] [Thread-27775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:38:26.549 [DEBUG] [Thread-27775] [transport.py] [_log()] client lang: <none>
2026-04-15T23:38:26.549 [DEBUG] [Thread-27775] [transport.py] [_log()] server lang: <none>
2026-04-15T23:38:26.549 [DEBUG] [Thread-27775] [transport.py] [_log()] kex follows: False
2026-04-15T23:38:26.549 [DEBUG] [Thread-27775] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:38:26.549 [DEBUG] [Thread-27775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:38:26.550 [DEBUG] [Thread-27775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:38:26.550 [DEBUG] [Thread-27775] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:38:26.550 [DEBUG] [Thread-27775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:38:26.550 [DEBUG] [Thread-27775] [transport.py] [_log()] Compression: none
2026-04-15T23:38:26.550 [DEBUG] [Thread-27775] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:38:26.607 [DEBUG] [Thread-27775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:38:26.607 [DEBUG] [Thread-27775] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:38:26.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:38:26.608 [DEBUG] [Thread-27775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:38:26.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:38:26.664 [DEBUG] [Thread-27775] [transport.py] [_log()] userauth is OK
2026-04-15T23:38:26.664 [DEBUG] [Thread-27775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:38:26.664 [DEBUG] [Thread-27775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:38:26.664 [DEBUG] [Thread-27775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:38:26.664 [DEBUG] [Thread-27775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:38:26.683 [INFO] [Thread-27775] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:38:26.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:38:26.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:38:27.495 [DEBUG] [Thread-27775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:38:27.496 [DEBUG] [Thread-27775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:38:27.543 [DEBUG] [Thread-27775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:38:27.543 [DEBUG] [Thread-27775] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:38:27.552 [DEBUG] [Thread-27775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:38:27.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:38:27.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')
2026-04-15T23:38:27.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') -> 00000000
2026-04-15T23:38:27.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:38:27.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:38:27.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:38:27.587 [DEBUG] [Thread-27775] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:38:28.637 [DEBUG] [Thread-27777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:38:37.714 [DEBUG] [Thread-27778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:38:43.676 [DEBUG] [Thread-27779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:38:57.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:38:57.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:38:57.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
2026-04-15T23:38:58.708 [DEBUG] [Thread-27780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:38:58.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 38, 50), 3.06462, 81.0584, 0.0, 9.98784, 8.92744, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:38:58.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:38:50
2026-04-15T23:38:59.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:38:59.670 [DEBUG] [Thread-27781] [transport.py] [_log()] starting thread (client mode): 0xf13c9cc0
2026-04-15T23:38:59.671 [DEBUG] [Thread-27781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:38:59.689 [DEBUG] [Thread-27781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:38:59.689 [INFO] [Thread-27781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:38:59.692 [DEBUG] [Thread-27781] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:38:59.692 [DEBUG] [Thread-27781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:38:59.692 [DEBUG] [Thread-27781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:38:59.692 [DEBUG] [Thread-27781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:38:59.692 [DEBUG] [Thread-27781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:38:59.693 [DEBUG] [Thread-27781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:38:59.693 [DEBUG] [Thread-27781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:38:59.693 [DEBUG] [Thread-27781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:38:59.693 [DEBUG] [Thread-27781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:38:59.693 [DEBUG] [Thread-27781] [transport.py] [_log()] client lang: <none>
2026-04-15T23:38:59.693 [DEBUG] [Thread-27781] [transport.py] [_log()] server lang: <none>
2026-04-15T23:38:59.693 [DEBUG] [Thread-27781] [transport.py] [_log()] kex follows: False
2026-04-15T23:38:59.693 [DEBUG] [Thread-27781] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:38:59.693 [DEBUG] [Thread-27781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:38:59.693 [DEBUG] [Thread-27781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:38:59.693 [DEBUG] [Thread-27781] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:38:59.694 [DEBUG] [Thread-27781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:38:59.694 [DEBUG] [Thread-27781] [transport.py] [_log()] Compression: none
2026-04-15T23:38:59.694 [DEBUG] [Thread-27781] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:38:59.710 [DEBUG] [Thread-27781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:38:59.710 [DEBUG] [Thread-27781] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:38:59.711 [DEBUG] [Thread-27781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:38:59.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:38:59.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:38:59.712 [DEBUG] [Thread-27781] [transport.py] [_log()] userauth is OK
2026-04-15T23:38:59.712 [DEBUG] [Thread-27781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:38:59.712 [DEBUG] [Thread-27781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:38:59.713 [DEBUG] [Thread-27781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:38:59.713 [DEBUG] [Thread-27781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:38:59.736 [INFO] [Thread-27781] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:38:59.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:39:00.365 [DEBUG] [Thread-27781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:39:00.365 [DEBUG] [Thread-27781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:39:00.366 [DEBUG] [Thread-27781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:39:00.406 [DEBUG] [Thread-27781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:39:00.406 [DEBUG] [Thread-27781] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:39:00.409 [DEBUG] [Thread-27781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:39:00.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:39:00.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:39:00.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:39:00.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:39:00.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:39:00.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:39:00.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:39:00.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:39:00.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:39:00.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.901864 -999.00   +8.80   6.90     84   +6.30 1 1 1 2 1     0    0 2.64 -8.10 ZNESW 6.3 6.9 105.4 8.0 9.6 -24.8 9.4 -23.7 9.2 -21.5 9.4 -23.4
2026-04-15T23:39:00.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:39:00.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:39:00.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.901864
2026-04-15T23:39:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:39:00.429 [DEBUG] [Thread-27781] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:39:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:39:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:39:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:39:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:39:00.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:38:50', tmtdew=3.06462, humidity=81.0584, cloud=0.0, wind=9.98784, temperature=8.92744, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:38:41.050', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08474999999999966, -0.02674999999999983, -0.019000000000000128, -0.005499999999999616, -0.011749999999999261, -0.0039999999999995595, 0.020250000000000767, 0.0129999999999999, -0.07450000000000045, -0.021750000000000824, -0.07850000000000001, -0.006999999999999673, 0.04025000000000034, -0.020500000000000185, -0.021000000000000796, 0.004249999999998977, -0.02200000000000024, 0.005999999999998451, 0.00024999999999941735, 0.007499999999998508, 0.02874999999999872, 0.03125, 0.01025000000000098, 0.034000000000000696, -0.08799999999999919, -0.02725000000000044, 0.014499999999999957, 0.04300000000000104, 0.053000000000000824, 0.03300000000000125, 0.017000000000001236, -0.04225000000000101], zp_timestamp='2026-04-15T21:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:39:00.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:39:00.685 [DEBUG] [Thread-27784] [transport.py] [_log()] starting thread (client mode): 0xee957160
2026-04-15T23:39:00.685 [DEBUG] [Thread-27784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:39:00.700 [DEBUG] [Thread-27784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:39:00.700 [INFO] [Thread-27784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:39:00.709 [DEBUG] [Thread-27784] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:39:00.709 [DEBUG] [Thread-27784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:39:00.709 [DEBUG] [Thread-27784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:39:00.709 [DEBUG] [Thread-27784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:39:00.709 [DEBUG] [Thread-27784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:39:00.709 [DEBUG] [Thread-27784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:39:00.709 [DEBUG] [Thread-27784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:39:00.709 [DEBUG] [Thread-27784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:39:00.709 [DEBUG] [Thread-27784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:39:00.709 [DEBUG] [Thread-27784] [transport.py] [_log()] client lang: <none>
2026-04-15T23:39:00.709 [DEBUG] [Thread-27784] [transport.py] [_log()] server lang: <none>
2026-04-15T23:39:00.710 [DEBUG] [Thread-27784] [transport.py] [_log()] kex follows: False
2026-04-15T23:39:00.710 [DEBUG] [Thread-27784] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:39:00.710 [DEBUG] [Thread-27784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:39:00.710 [DEBUG] [Thread-27784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:39:00.710 [DEBUG] [Thread-27784] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:39:00.710 [DEBUG] [Thread-27784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:39:00.710 [DEBUG] [Thread-27784] [transport.py] [_log()] Compression: none
2026-04-15T23:39:00.710 [DEBUG] [Thread-27784] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:39:00.767 [DEBUG] [Thread-27784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:39:00.767 [DEBUG] [Thread-27784] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:39:00.768 [DEBUG] [Thread-27784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:39:00.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:39:00.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:39:00.828 [DEBUG] [Thread-27784] [transport.py] [_log()] userauth is OK
2026-04-15T23:39:00.828 [DEBUG] [Thread-27784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:39:00.828 [DEBUG] [Thread-27784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:39:00.828 [DEBUG] [Thread-27784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:39:00.829 [DEBUG] [Thread-27784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:39:00.854 [INFO] [Thread-27784] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:39:00.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:39:00.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:39:01.664 [DEBUG] [Thread-27784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:39:01.664 [DEBUG] [Thread-27784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:39:01.712 [DEBUG] [Thread-27784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:39:01.712 [DEBUG] [Thread-27784] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:39:01.721 [DEBUG] [Thread-27784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:39:01.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:39:01.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')
2026-04-15T23:39:01.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
2026-04-15T23:39:01.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:39:01.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:39:01.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:39:01.753 [DEBUG] [Thread-27784] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:39:13.739 [DEBUG] [Thread-27786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:39:15.405 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:39:15.406 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:39:28.783 [DEBUG] [Thread-27787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:39:31.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:39:31.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:39:31.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
2026-04-15T23:39:33.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 39, 26), 3.33449, 79.5126, 0.0, 10.0764, 8.93054, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:39:33.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:39:26
2026-04-15T23:39:33.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:39:33.868 [DEBUG] [Thread-27788] [transport.py] [_log()] starting thread (client mode): 0xf13c9b70
2026-04-15T23:39:33.868 [DEBUG] [Thread-27788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:39:33.889 [DEBUG] [Thread-27788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:39:33.889 [INFO] [Thread-27788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:39:33.892 [DEBUG] [Thread-27788] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:39:33.893 [DEBUG] [Thread-27788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:39:33.893 [DEBUG] [Thread-27788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:39:33.893 [DEBUG] [Thread-27788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:39:33.893 [DEBUG] [Thread-27788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:39:33.893 [DEBUG] [Thread-27788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:39:33.893 [DEBUG] [Thread-27788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:39:33.893 [DEBUG] [Thread-27788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:39:33.893 [DEBUG] [Thread-27788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:39:33.893 [DEBUG] [Thread-27788] [transport.py] [_log()] client lang: <none>
2026-04-15T23:39:33.893 [DEBUG] [Thread-27788] [transport.py] [_log()] server lang: <none>
2026-04-15T23:39:33.893 [DEBUG] [Thread-27788] [transport.py] [_log()] kex follows: False
2026-04-15T23:39:33.893 [DEBUG] [Thread-27788] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:39:33.894 [DEBUG] [Thread-27788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:39:33.894 [DEBUG] [Thread-27788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:39:33.894 [DEBUG] [Thread-27788] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:39:33.894 [DEBUG] [Thread-27788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:39:33.894 [DEBUG] [Thread-27788] [transport.py] [_log()] Compression: none
2026-04-15T23:39:33.894 [DEBUG] [Thread-27788] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:39:33.912 [DEBUG] [Thread-27788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:39:33.912 [DEBUG] [Thread-27788] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:39:33.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:39:33.913 [DEBUG] [Thread-27788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:39:33.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:39:33.914 [DEBUG] [Thread-27788] [transport.py] [_log()] userauth is OK
2026-04-15T23:39:33.914 [DEBUG] [Thread-27788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:39:33.914 [DEBUG] [Thread-27788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:39:33.914 [DEBUG] [Thread-27788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:39:33.914 [DEBUG] [Thread-27788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:39:33.939 [INFO] [Thread-27788] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:39:33.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:39:34.572 [DEBUG] [Thread-27788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:39:34.573 [DEBUG] [Thread-27788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:39:34.573 [DEBUG] [Thread-27788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:39:34.613 [DEBUG] [Thread-27788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:39:34.613 [DEBUG] [Thread-27788] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:39:34.616 [DEBUG] [Thread-27788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:39:34.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:39:34.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:39:34.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:39:34.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:39:34.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:39:34.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:39:34.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:39:34.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:39:34.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:39:34.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.902212 -999.00   +8.80   5.96     84   +6.30 1 1 1 2 1     0    0 2.58 -11.47 ZNESW 6.6 6.0 108.4 9.2 9.5 -24.8 9.4 -23.7 9.2 -21.4 9.4 -23.5
2026-04-15T23:39:34.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:39:34.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:39:34.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.902212
2026-04-15T23:39:34.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:39:34.642 [DEBUG] [Thread-27788] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:39:34.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:39:34.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:39:34.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:39:34.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:39:34.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:39:26', tmtdew=3.33449, humidity=79.5126, cloud=0.0, wind=10.0764, temperature=8.93054, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:39:11.117', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08474999999999966, -0.02674999999999983, -0.019000000000000128, -0.005499999999999616, -0.011749999999999261, -0.0039999999999995595, 0.020250000000000767, 0.0129999999999999, -0.07450000000000045, -0.021750000000000824, -0.07850000000000001, -0.006999999999999673, 0.04025000000000034, -0.020500000000000185, -0.021000000000000796, 0.004249999999998977, -0.02200000000000024, 0.005999999999998451, 0.00024999999999941735, 0.007499999999998508, 0.02874999999999872, 0.03125, 0.01025000000000098, 0.034000000000000696, -0.08799999999999919, -0.02725000000000044, 0.014499999999999957, 0.04300000000000104, 0.053000000000000824, 0.03300000000000125, 0.017000000000001236, -0.04225000000000101], zp_timestamp='2026-04-15T21:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:39:34.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:39:34.873 [DEBUG] [Thread-27791] [transport.py] [_log()] starting thread (client mode): 0xf1334790
2026-04-15T23:39:34.873 [DEBUG] [Thread-27791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:39:34.887 [DEBUG] [Thread-27791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:39:34.887 [INFO] [Thread-27791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:39:34.894 [DEBUG] [Thread-27791] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:39:34.894 [DEBUG] [Thread-27791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:39:34.894 [DEBUG] [Thread-27791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:39:34.894 [DEBUG] [Thread-27791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:39:34.895 [DEBUG] [Thread-27791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:39:34.895 [DEBUG] [Thread-27791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:39:34.895 [DEBUG] [Thread-27791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:39:34.895 [DEBUG] [Thread-27791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:39:34.895 [DEBUG] [Thread-27791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:39:34.895 [DEBUG] [Thread-27791] [transport.py] [_log()] client lang: <none>
2026-04-15T23:39:34.895 [DEBUG] [Thread-27791] [transport.py] [_log()] server lang: <none>
2026-04-15T23:39:34.895 [DEBUG] [Thread-27791] [transport.py] [_log()] kex follows: False
2026-04-15T23:39:34.895 [DEBUG] [Thread-27791] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:39:34.895 [DEBUG] [Thread-27791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:39:34.895 [DEBUG] [Thread-27791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:39:34.895 [DEBUG] [Thread-27791] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:39:34.895 [DEBUG] [Thread-27791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:39:34.895 [DEBUG] [Thread-27791] [transport.py] [_log()] Compression: none
2026-04-15T23:39:34.895 [DEBUG] [Thread-27791] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:39:34.952 [DEBUG] [Thread-27791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:39:34.953 [DEBUG] [Thread-27791] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:39:34.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:39:34.953 [DEBUG] [Thread-27791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:39:34.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:39:35.007 [DEBUG] [Thread-27791] [transport.py] [_log()] userauth is OK
2026-04-15T23:39:35.007 [DEBUG] [Thread-27791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:39:35.007 [DEBUG] [Thread-27791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:39:35.007 [DEBUG] [Thread-27791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:39:35.007 [DEBUG] [Thread-27791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:39:35.025 [INFO] [Thread-27791] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:39:35.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:39:35.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:39:35.833 [DEBUG] [Thread-27791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:39:35.834 [DEBUG] [Thread-27791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:39:35.882 [DEBUG] [Thread-27791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:39:35.882 [DEBUG] [Thread-27791] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:39:35.892 [DEBUG] [Thread-27791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:39:35.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:39:35.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')
2026-04-15T23:39:35.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
2026-04-15T23:39:35.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:39:35.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:39:35.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:39:35.927 [DEBUG] [Thread-27791] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:39:37.862 [DEBUG] [Thread-27793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:39:43.813 [DEBUG] [Thread-27794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:39:58.858 [DEBUG] [Thread-27795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:40:05.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:40:05.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:40:05.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:40:07.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 39, 26), 3.33449, 79.5126, 0.0, 10.0764, 8.93054, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:40:07.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:39:26
2026-04-15T23:40:07.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:40:08.158 [DEBUG] [Thread-27796] [transport.py] [_log()] starting thread (client mode): 0xf13ca770
2026-04-15T23:40:08.158 [DEBUG] [Thread-27796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:40:08.178 [DEBUG] [Thread-27796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:40:08.178 [INFO] [Thread-27796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:40:08.181 [DEBUG] [Thread-27796] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:40:08.181 [DEBUG] [Thread-27796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:40:08.181 [DEBUG] [Thread-27796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:40:08.181 [DEBUG] [Thread-27796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:40:08.181 [DEBUG] [Thread-27796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:40:08.181 [DEBUG] [Thread-27796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:40:08.181 [DEBUG] [Thread-27796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:40:08.181 [DEBUG] [Thread-27796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:40:08.181 [DEBUG] [Thread-27796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:40:08.182 [DEBUG] [Thread-27796] [transport.py] [_log()] client lang: <none>
2026-04-15T23:40:08.182 [DEBUG] [Thread-27796] [transport.py] [_log()] server lang: <none>
2026-04-15T23:40:08.182 [DEBUG] [Thread-27796] [transport.py] [_log()] kex follows: False
2026-04-15T23:40:08.182 [DEBUG] [Thread-27796] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:40:08.182 [DEBUG] [Thread-27796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:40:08.182 [DEBUG] [Thread-27796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:40:08.182 [DEBUG] [Thread-27796] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:40:08.182 [DEBUG] [Thread-27796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:40:08.182 [DEBUG] [Thread-27796] [transport.py] [_log()] Compression: none
2026-04-15T23:40:08.182 [DEBUG] [Thread-27796] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:40:08.200 [DEBUG] [Thread-27796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:40:08.200 [DEBUG] [Thread-27796] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:40:08.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:40:08.201 [DEBUG] [Thread-27796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:40:08.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:40:08.202 [DEBUG] [Thread-27796] [transport.py] [_log()] userauth is OK
2026-04-15T23:40:08.202 [DEBUG] [Thread-27796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:40:08.202 [DEBUG] [Thread-27796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:40:08.202 [DEBUG] [Thread-27796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:40:08.202 [DEBUG] [Thread-27796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:40:08.236 [INFO] [Thread-27796] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:40:08.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:40:13.887 [DEBUG] [Thread-27798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:40:15.602 [DEBUG] [Thread-27796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:40:15.602 [DEBUG] [Thread-27796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:40:15.602 [DEBUG] [Thread-27796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:40:15.609 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:40:15.610 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:40:15.643 [DEBUG] [Thread-27796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:40:15.643 [DEBUG] [Thread-27796] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:40:15.646 [DEBUG] [Thread-27796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:40:15.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:40:15.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:40:15.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:40:15.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:40:15.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:40:15.669 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:40:15.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:40:15.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:40:15.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:40:15.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.902559 -999.00   +8.80   7.48     84   +6.30 1 1 1 2 1     0    0 2.40 -15.56 ZNESW 7.3 7.5 107.4 8.7 9.5 -24.9 9.4 -23.6 9.1 -21.6 9.4 -23.5
2026-04-15T23:40:15.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:40:15.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:40:15.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.902559
2026-04-15T23:40:15.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:40:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:40:15.673 [DEBUG] [Thread-27796] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:40:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:40:15.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:40:15.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:40:15.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:39:26', tmtdew=3.33449, humidity=79.5126, cloud=0.0, wind=10.0764, temperature=8.93054, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:39:41.098', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08474999999999966, -0.02674999999999983, -0.019000000000000128, -0.005499999999999616, -0.011749999999999261, -0.0039999999999995595, 0.020250000000000767, 0.0129999999999999, -0.07450000000000045, -0.021750000000000824, -0.07850000000000001, -0.006999999999999673, 0.04025000000000034, -0.020500000000000185, -0.021000000000000796, 0.004249999999998977, -0.02200000000000024, 0.005999999999998451, 0.00024999999999941735, 0.007499999999998508, 0.02874999999999872, 0.03125, 0.01025000000000098, 0.034000000000000696, -0.08799999999999919, -0.02725000000000044, 0.014499999999999957, 0.04300000000000104, 0.053000000000000824, 0.03300000000000125, 0.017000000000001236, -0.04225000000000101], zp_timestamp='2026-04-15T21:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:40:15.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:40:15.937 [DEBUG] [Thread-27800] [transport.py] [_log()] starting thread (client mode): 0xf1334d90
2026-04-15T23:40:15.937 [DEBUG] [Thread-27800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:40:15.951 [DEBUG] [Thread-27800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:40:15.951 [INFO] [Thread-27800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:40:15.958 [DEBUG] [Thread-27800] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:40:15.959 [DEBUG] [Thread-27800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:40:15.959 [DEBUG] [Thread-27800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:40:15.959 [DEBUG] [Thread-27800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:40:15.959 [DEBUG] [Thread-27800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:40:15.959 [DEBUG] [Thread-27800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:40:15.959 [DEBUG] [Thread-27800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:40:15.959 [DEBUG] [Thread-27800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:40:15.959 [DEBUG] [Thread-27800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:40:15.959 [DEBUG] [Thread-27800] [transport.py] [_log()] client lang: <none>
2026-04-15T23:40:15.959 [DEBUG] [Thread-27800] [transport.py] [_log()] server lang: <none>
2026-04-15T23:40:15.959 [DEBUG] [Thread-27800] [transport.py] [_log()] kex follows: False
2026-04-15T23:40:15.960 [DEBUG] [Thread-27800] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:40:15.960 [DEBUG] [Thread-27800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:40:15.960 [DEBUG] [Thread-27800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:40:15.960 [DEBUG] [Thread-27800] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:40:15.960 [DEBUG] [Thread-27800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:40:15.960 [DEBUG] [Thread-27800] [transport.py] [_log()] Compression: none
2026-04-15T23:40:15.960 [DEBUG] [Thread-27800] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:40:16.017 [DEBUG] [Thread-27800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:40:16.018 [DEBUG] [Thread-27800] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:40:16.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:40:16.018 [DEBUG] [Thread-27800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:40:16.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:40:16.075 [DEBUG] [Thread-27800] [transport.py] [_log()] userauth is OK
2026-04-15T23:40:16.075 [DEBUG] [Thread-27800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:40:16.075 [DEBUG] [Thread-27800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:40:16.075 [DEBUG] [Thread-27800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:40:16.075 [DEBUG] [Thread-27800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:40:16.100 [INFO] [Thread-27800] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:40:16.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:40:16.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:40:16.922 [DEBUG] [Thread-27800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:40:16.923 [DEBUG] [Thread-27800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:40:16.970 [DEBUG] [Thread-27800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:40:16.970 [DEBUG] [Thread-27800] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:40:16.979 [DEBUG] [Thread-27800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:40:16.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:40:16.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')
2026-04-15T23:40: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
2026-04-15T23:40:17.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:40:17.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:40:17.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:40:17.013 [DEBUG] [Thread-27800] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:40:28.915 [DEBUG] [Thread-27802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:40:38.022 [DEBUG] [Thread-27803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:40:43.957 [DEBUG] [Thread-27804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:40:47.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:40:47.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:40:47.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:40:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 40, 37), 3.03276, 81.2243, 0.0, 9.98784, 8.8279, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:40:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:40:37
2026-04-15T23:40:48.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:40:49.173 [DEBUG] [Thread-27805] [transport.py] [_log()] starting thread (client mode): 0xf1366170
2026-04-15T23:40:49.173 [DEBUG] [Thread-27805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:40:49.194 [DEBUG] [Thread-27805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:40:49.194 [INFO] [Thread-27805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:40:49.197 [DEBUG] [Thread-27805] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:40:49.197 [DEBUG] [Thread-27805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:40:49.197 [DEBUG] [Thread-27805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:40:49.197 [DEBUG] [Thread-27805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:40:49.198 [DEBUG] [Thread-27805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:40:49.198 [DEBUG] [Thread-27805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:40:49.198 [DEBUG] [Thread-27805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:40:49.198 [DEBUG] [Thread-27805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:40:49.198 [DEBUG] [Thread-27805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:40:49.198 [DEBUG] [Thread-27805] [transport.py] [_log()] client lang: <none>
2026-04-15T23:40:49.198 [DEBUG] [Thread-27805] [transport.py] [_log()] server lang: <none>
2026-04-15T23:40:49.198 [DEBUG] [Thread-27805] [transport.py] [_log()] kex follows: False
2026-04-15T23:40:49.198 [DEBUG] [Thread-27805] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:40:49.198 [DEBUG] [Thread-27805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:40:49.198 [DEBUG] [Thread-27805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:40:49.199 [DEBUG] [Thread-27805] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:40:49.199 [DEBUG] [Thread-27805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:40:49.199 [DEBUG] [Thread-27805] [transport.py] [_log()] Compression: none
2026-04-15T23:40:49.199 [DEBUG] [Thread-27805] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:40:49.216 [DEBUG] [Thread-27805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:40:49.217 [DEBUG] [Thread-27805] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:40:49.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:40:49.217 [DEBUG] [Thread-27805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:40:49.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:40:49.218 [DEBUG] [Thread-27805] [transport.py] [_log()] userauth is OK
2026-04-15T23:40:49.219 [DEBUG] [Thread-27805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:40:49.219 [DEBUG] [Thread-27805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:40:49.219 [DEBUG] [Thread-27805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:40:49.219 [DEBUG] [Thread-27805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:40:49.244 [INFO] [Thread-27805] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:40:49.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:40:50.035 [DEBUG] [Thread-27805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:40:50.036 [DEBUG] [Thread-27805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:40:50.036 [DEBUG] [Thread-27805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:40:50.076 [DEBUG] [Thread-27805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:40:50.076 [DEBUG] [Thread-27805] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:40:50.079 [DEBUG] [Thread-27805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:40:50.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:40:50.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:40:50.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:40:50.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:40:50.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:40:50.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:40:50.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:40:50.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:40:50.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:40:50.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.902907 -999.00   +8.80   7.10     84   +6.30 1 1 1 2 1     0    0 2.29 -18.33 ZNESW 7.0 7.1 105.2 8.2 9.5 -24.7 9.4 -23.5 9.1 -21.3 9.4 -23.4
2026-04-15T23:40:50.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:40:50.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:40:50.100 [DEBUG] [Thread-27805] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:40:50.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.902907
2026-04-15T23:40:50.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:40:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:40:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:40:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:40:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:40:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:40:37', tmtdew=3.03276, humidity=81.2243, cloud=0.0, wind=9.98784, temperature=8.8279, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:40:11.165', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08474999999999966, -0.02674999999999983, -0.019000000000000128, -0.005499999999999616, -0.011749999999999261, -0.0039999999999995595, 0.020250000000000767, 0.0129999999999999, -0.07450000000000045, -0.021750000000000824, -0.07850000000000001, -0.006999999999999673, 0.04025000000000034, -0.020500000000000185, -0.021000000000000796, 0.004249999999998977, -0.02200000000000024, 0.005999999999998451, 0.00024999999999941735, 0.007499999999998508, 0.02874999999999872, 0.03125, 0.01025000000000098, 0.034000000000000696, -0.08799999999999919, -0.02725000000000044, 0.014499999999999957, 0.04300000000000104, 0.053000000000000824, 0.03300000000000125, 0.017000000000001236, -0.04225000000000101], zp_timestamp='2026-04-15T21:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:40:50.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:40:50.365 [DEBUG] [Thread-27808] [transport.py] [_log()] starting thread (client mode): 0xee954100
2026-04-15T23:40:50.365 [DEBUG] [Thread-27808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:40:50.379 [DEBUG] [Thread-27808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:40:50.379 [INFO] [Thread-27808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:40:50.387 [DEBUG] [Thread-27808] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:40:50.387 [DEBUG] [Thread-27808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:40:50.387 [DEBUG] [Thread-27808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:40:50.387 [DEBUG] [Thread-27808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:40:50.387 [DEBUG] [Thread-27808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:40:50.387 [DEBUG] [Thread-27808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:40:50.387 [DEBUG] [Thread-27808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:40:50.387 [DEBUG] [Thread-27808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:40:50.387 [DEBUG] [Thread-27808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:40:50.387 [DEBUG] [Thread-27808] [transport.py] [_log()] client lang: <none>
2026-04-15T23:40:50.387 [DEBUG] [Thread-27808] [transport.py] [_log()] server lang: <none>
2026-04-15T23:40:50.387 [DEBUG] [Thread-27808] [transport.py] [_log()] kex follows: False
2026-04-15T23:40:50.387 [DEBUG] [Thread-27808] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:40:50.387 [DEBUG] [Thread-27808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:40:50.387 [DEBUG] [Thread-27808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:40:50.388 [DEBUG] [Thread-27808] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:40:50.388 [DEBUG] [Thread-27808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:40:50.388 [DEBUG] [Thread-27808] [transport.py] [_log()] Compression: none
2026-04-15T23:40:50.388 [DEBUG] [Thread-27808] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:40:50.445 [DEBUG] [Thread-27808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:40:50.446 [DEBUG] [Thread-27808] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:40:50.446 [DEBUG] [Thread-27808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:40:50.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:40:50.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:40:50.502 [DEBUG] [Thread-27808] [transport.py] [_log()] userauth is OK
2026-04-15T23:40:50.503 [DEBUG] [Thread-27808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:40:50.503 [DEBUG] [Thread-27808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:40:50.503 [DEBUG] [Thread-27808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:40:50.503 [DEBUG] [Thread-27808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:40:50.527 [INFO] [Thread-27808] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:40:50.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:40:50.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:40:51.336 [DEBUG] [Thread-27808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:40:51.336 [DEBUG] [Thread-27808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:40:51.385 [DEBUG] [Thread-27808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:40:51.385 [DEBUG] [Thread-27808] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:40:51.395 [DEBUG] [Thread-27808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:40:51.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:40:51.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')
2026-04-15T23:40:51.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
2026-04-15T23:40:51.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:40:51.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:40:51.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:40:51.432 [DEBUG] [Thread-27808] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:40:58.989 [DEBUG] [Thread-27810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:41:14.035 [DEBUG] [Thread-27811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:41:15.813 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:41:15.814 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:41:21.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:41:21.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:41:21.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
2026-04-15T23:41:22.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 41, 12), 3.26497, 79.6287, 0.0, 8.64684, 8.98031, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:41:22.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:41:12
2026-04-15T23:41:23.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:41:23.489 [DEBUG] [Thread-27812] [transport.py] [_log()] starting thread (client mode): 0xf1366290
2026-04-15T23:41:23.490 [DEBUG] [Thread-27812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:41:23.509 [DEBUG] [Thread-27812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:41:23.509 [INFO] [Thread-27812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:41:23.511 [DEBUG] [Thread-27812] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:41:23.511 [DEBUG] [Thread-27812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:41:23.511 [DEBUG] [Thread-27812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:41:23.511 [DEBUG] [Thread-27812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:41:23.511 [DEBUG] [Thread-27812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:41:23.511 [DEBUG] [Thread-27812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:41:23.511 [DEBUG] [Thread-27812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:41:23.512 [DEBUG] [Thread-27812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:41:23.512 [DEBUG] [Thread-27812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:41:23.512 [DEBUG] [Thread-27812] [transport.py] [_log()] client lang: <none>
2026-04-15T23:41:23.512 [DEBUG] [Thread-27812] [transport.py] [_log()] server lang: <none>
2026-04-15T23:41:23.512 [DEBUG] [Thread-27812] [transport.py] [_log()] kex follows: False
2026-04-15T23:41:23.512 [DEBUG] [Thread-27812] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:41:23.512 [DEBUG] [Thread-27812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:41:23.512 [DEBUG] [Thread-27812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:41:23.512 [DEBUG] [Thread-27812] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:41:23.512 [DEBUG] [Thread-27812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:41:23.512 [DEBUG] [Thread-27812] [transport.py] [_log()] Compression: none
2026-04-15T23:41:23.512 [DEBUG] [Thread-27812] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:41:23.524 [DEBUG] [Thread-27812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:41:23.524 [DEBUG] [Thread-27812] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:41:23.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:41:23.525 [DEBUG] [Thread-27812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:41:23.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:41:23.526 [DEBUG] [Thread-27812] [transport.py] [_log()] userauth is OK
2026-04-15T23:41:23.526 [DEBUG] [Thread-27812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:41:23.526 [DEBUG] [Thread-27812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:41:23.526 [DEBUG] [Thread-27812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:41:23.526 [DEBUG] [Thread-27812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:41:23.549 [INFO] [Thread-27812] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:41:23.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:41:24.323 [DEBUG] [Thread-27812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:41:24.324 [DEBUG] [Thread-27812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:41:24.324 [DEBUG] [Thread-27812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:41:24.364 [DEBUG] [Thread-27812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:41:24.364 [DEBUG] [Thread-27812] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:41:24.367 [DEBUG] [Thread-27812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:41:24.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:41:24.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:41:24.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:41:24.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:41:24.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:41:24.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:41:24.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:41:24.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:41:24.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:41:24.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.903253 -999.00   +8.80   7.12     84   +6.30 1 1 1 2 1     0    0 2.13 -21.84 ZNESW 6.9 7.1 108.8 8.6 9.5 -24.7 9.4 -23.5 9.1 -21.4 9.4 -23.4
2026-04-15T23:41:24.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:41:24.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:41:24.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.903253
2026-04-15T23:41:24.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:41:24.393 [DEBUG] [Thread-27812] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:41:24.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:41:24.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:41:24.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:41:24.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:41:24.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:41:12', tmtdew=3.26497, humidity=79.6287, cloud=0.0, wind=8.64684, temperature=8.98031, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:40:41.059', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08474999999999966, -0.02674999999999983, -0.019000000000000128, -0.005499999999999616, -0.011749999999999261, -0.0039999999999995595, 0.020250000000000767, 0.0129999999999999, -0.07450000000000045, -0.021750000000000824, -0.07850000000000001, -0.006999999999999673, 0.04025000000000034, -0.020500000000000185, -0.021000000000000796, 0.004249999999998977, -0.02200000000000024, 0.005999999999998451, 0.00024999999999941735, 0.007499999999998508, 0.02874999999999872, 0.03125, 0.01025000000000098, 0.034000000000000696, -0.08799999999999919, -0.02725000000000044, 0.014499999999999957, 0.04300000000000104, 0.053000000000000824, 0.03300000000000125, 0.017000000000001236, -0.04225000000000101], zp_timestamp='2026-04-15T21:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:41:24.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:41:24.653 [DEBUG] [Thread-27815] [transport.py] [_log()] starting thread (client mode): 0xee990250
2026-04-15T23:41:24.653 [DEBUG] [Thread-27815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:41:24.667 [DEBUG] [Thread-27815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:41:24.668 [INFO] [Thread-27815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:41:24.675 [DEBUG] [Thread-27815] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:41:24.675 [DEBUG] [Thread-27815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:41:24.675 [DEBUG] [Thread-27815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:41:24.675 [DEBUG] [Thread-27815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:41:24.675 [DEBUG] [Thread-27815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:41:24.675 [DEBUG] [Thread-27815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:41:24.675 [DEBUG] [Thread-27815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:41:24.675 [DEBUG] [Thread-27815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:41:24.675 [DEBUG] [Thread-27815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:41:24.675 [DEBUG] [Thread-27815] [transport.py] [_log()] client lang: <none>
2026-04-15T23:41:24.676 [DEBUG] [Thread-27815] [transport.py] [_log()] server lang: <none>
2026-04-15T23:41:24.676 [DEBUG] [Thread-27815] [transport.py] [_log()] kex follows: False
2026-04-15T23:41:24.676 [DEBUG] [Thread-27815] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:41:24.676 [DEBUG] [Thread-27815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:41:24.676 [DEBUG] [Thread-27815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:41:24.676 [DEBUG] [Thread-27815] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:41:24.676 [DEBUG] [Thread-27815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:41:24.676 [DEBUG] [Thread-27815] [transport.py] [_log()] Compression: none
2026-04-15T23:41:24.676 [DEBUG] [Thread-27815] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:41:24.733 [DEBUG] [Thread-27815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:41:24.734 [DEBUG] [Thread-27815] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:41:24.734 [DEBUG] [Thread-27815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:41:24.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:41:24.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:41:24.790 [DEBUG] [Thread-27815] [transport.py] [_log()] userauth is OK
2026-04-15T23:41:24.790 [DEBUG] [Thread-27815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:41:24.791 [DEBUG] [Thread-27815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:41:24.791 [DEBUG] [Thread-27815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:41:24.791 [DEBUG] [Thread-27815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:41:24.816 [INFO] [Thread-27815] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:41:24.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:41:24.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:41:25.627 [DEBUG] [Thread-27815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:41:25.628 [DEBUG] [Thread-27815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:41:25.675 [DEBUG] [Thread-27815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:41:25.675 [DEBUG] [Thread-27815] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:41:25.685 [DEBUG] [Thread-27815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:41:25.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:41:25.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')
2026-04-15T23:41:25.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
2026-04-15T23:41:25.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:41:25.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:41:25.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:41:25.722 [DEBUG] [Thread-27815] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:41:29.065 [DEBUG] [Thread-27817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:41:38.419 [DEBUG] [Thread-27818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:41:44.109 [DEBUG] [Thread-27819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:41:55.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:41:55.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:41: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
2026-04-15T23:41:57.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 41, 48), 3.03943, 81.1911, 0.0, 10.7993, 8.86108, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:41:57.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:41:48
2026-04-15T23:41:57.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:41:57.888 [DEBUG] [Thread-27820] [transport.py] [_log()] starting thread (client mode): 0xee906410
2026-04-15T23:41:57.889 [DEBUG] [Thread-27820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:41:57.910 [DEBUG] [Thread-27820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:41:57.910 [INFO] [Thread-27820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:41:57.913 [DEBUG] [Thread-27820] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:41:57.913 [DEBUG] [Thread-27820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:41:57.913 [DEBUG] [Thread-27820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:41:57.913 [DEBUG] [Thread-27820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:41:57.913 [DEBUG] [Thread-27820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:41:57.913 [DEBUG] [Thread-27820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:41:57.914 [DEBUG] [Thread-27820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:41:57.914 [DEBUG] [Thread-27820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:41:57.914 [DEBUG] [Thread-27820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:41:57.914 [DEBUG] [Thread-27820] [transport.py] [_log()] client lang: <none>
2026-04-15T23:41:57.914 [DEBUG] [Thread-27820] [transport.py] [_log()] server lang: <none>
2026-04-15T23:41:57.914 [DEBUG] [Thread-27820] [transport.py] [_log()] kex follows: False
2026-04-15T23:41:57.914 [DEBUG] [Thread-27820] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:41:57.914 [DEBUG] [Thread-27820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:41:57.914 [DEBUG] [Thread-27820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:41:57.914 [DEBUG] [Thread-27820] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:41:57.914 [DEBUG] [Thread-27820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:41:57.915 [DEBUG] [Thread-27820] [transport.py] [_log()] Compression: none
2026-04-15T23:41:57.915 [DEBUG] [Thread-27820] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:41:57.931 [DEBUG] [Thread-27820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:41:57.931 [DEBUG] [Thread-27820] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:41:57.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:41:57.932 [DEBUG] [Thread-27820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:41:57.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:41:57.933 [DEBUG] [Thread-27820] [transport.py] [_log()] userauth is OK
2026-04-15T23:41:57.933 [DEBUG] [Thread-27820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:41:57.933 [DEBUG] [Thread-27820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:41:57.933 [DEBUG] [Thread-27820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:41:57.933 [DEBUG] [Thread-27820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:41:57.952 [INFO] [Thread-27820] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:41:57.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:41:58.745 [DEBUG] [Thread-27820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:41:58.745 [DEBUG] [Thread-27820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:41:58.746 [DEBUG] [Thread-27820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:41:58.786 [DEBUG] [Thread-27820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:41:58.786 [DEBUG] [Thread-27820] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:41:58.788 [DEBUG] [Thread-27820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:41:58.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:41:58.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:41:58.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:41:58.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:41:58.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:41:58.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:41:58.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:41:58.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:41:58.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:41:58.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.903601 -999.00   +8.80   7.68     84   +6.30 1 1 1 2 1     0    0 2.06 -24.00 ZNESW 7.6 7.7 110.8 8.6 9.4 -24.8 9.4 -23.4 9.1 -21.3 9.3 -23.4
2026-04-15T23:41:58.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:41:58.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:41:58.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.903601
2026-04-15T23:41:58.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:41:58.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:41:58.809 [DEBUG] [Thread-27820] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:41:58.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:41:58.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:41:58.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:41:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:41:48', tmtdew=3.03943, humidity=81.1911, cloud=0.0, wind=10.7993, temperature=8.86108, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:41:11.126', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08474999999999966, -0.02674999999999983, -0.019000000000000128, -0.005499999999999616, -0.011749999999999261, -0.0039999999999995595, 0.020250000000000767, 0.0129999999999999, -0.07450000000000045, -0.021750000000000824, -0.07850000000000001, -0.006999999999999673, 0.04025000000000034, -0.020500000000000185, -0.021000000000000796, 0.004249999999998977, -0.02200000000000024, 0.005999999999998451, 0.00024999999999941735, 0.007499999999998508, 0.02874999999999872, 0.03125, 0.01025000000000098, 0.034000000000000696, -0.08799999999999919, -0.02725000000000044, 0.014499999999999957, 0.04300000000000104, 0.053000000000000824, 0.03300000000000125, 0.017000000000001236, -0.04225000000000101], zp_timestamp='2026-04-15T21:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:41:59.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:41:59.034 [DEBUG] [Thread-27823] [transport.py] [_log()] starting thread (client mode): 0xee905060
2026-04-15T23:41:59.034 [DEBUG] [Thread-27823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:41:59.049 [DEBUG] [Thread-27823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:41:59.049 [INFO] [Thread-27823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:41:59.057 [DEBUG] [Thread-27823] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:41:59.057 [DEBUG] [Thread-27823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:41:59.057 [DEBUG] [Thread-27823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:41:59.057 [DEBUG] [Thread-27823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:41:59.058 [DEBUG] [Thread-27823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:41:59.058 [DEBUG] [Thread-27823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:41:59.058 [DEBUG] [Thread-27823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:41:59.058 [DEBUG] [Thread-27823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:41:59.058 [DEBUG] [Thread-27823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:41:59.058 [DEBUG] [Thread-27823] [transport.py] [_log()] client lang: <none>
2026-04-15T23:41:59.058 [DEBUG] [Thread-27823] [transport.py] [_log()] server lang: <none>
2026-04-15T23:41:59.058 [DEBUG] [Thread-27823] [transport.py] [_log()] kex follows: False
2026-04-15T23:41:59.058 [DEBUG] [Thread-27823] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:41:59.058 [DEBUG] [Thread-27823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:41:59.058 [DEBUG] [Thread-27823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:41:59.059 [DEBUG] [Thread-27823] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:41:59.059 [DEBUG] [Thread-27823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:41:59.059 [DEBUG] [Thread-27823] [transport.py] [_log()] Compression: none
2026-04-15T23:41:59.059 [DEBUG] [Thread-27823] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:41:59.115 [DEBUG] [Thread-27823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:41:59.115 [DEBUG] [Thread-27823] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:41:59.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:41:59.116 [DEBUG] [Thread-27823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:41:59.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:41:59.142 [DEBUG] [Thread-27825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:41:59.173 [DEBUG] [Thread-27823] [transport.py] [_log()] userauth is OK
2026-04-15T23:41:59.174 [DEBUG] [Thread-27823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:41:59.174 [DEBUG] [Thread-27823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:41:59.174 [DEBUG] [Thread-27823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:41:59.174 [DEBUG] [Thread-27823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:41:59.198 [INFO] [Thread-27823] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:41:59.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:41:59.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:42:00.032 [DEBUG] [Thread-27823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:42:00.033 [DEBUG] [Thread-27823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:42:00.084 [DEBUG] [Thread-27823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:42:00.085 [DEBUG] [Thread-27823] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:42:00.094 [DEBUG] [Thread-27823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:42:00.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:42:00.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')
2026-04-15T23:42:00.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
2026-04-15T23:42:00.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:42:00.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:42:00.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:42:00.129 [DEBUG] [Thread-27823] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:42:14.186 [DEBUG] [Thread-27826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:42:14.351 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:42:16.016 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:42:16.017 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:42:17.473 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:42:22.529 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:42:28.015 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:42:29.217 [DEBUG] [Thread-27827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:42:30.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:42:30.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:42:30.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
2026-04-15T23:42:31.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 42, 23), 3.26343, 79.6287, 0.0, 8.6292, 8.91395, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:42:31.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:42:23
2026-04-15T23:42:31.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:42:32.291 [DEBUG] [Thread-27828] [transport.py] [_log()] starting thread (client mode): 0xee906710
2026-04-15T23:42:32.292 [DEBUG] [Thread-27828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:42:32.301 [DEBUG] [Thread-27828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:42:32.302 [INFO] [Thread-27828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:42:32.304 [DEBUG] [Thread-27828] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:42:32.305 [DEBUG] [Thread-27828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:42:32.305 [DEBUG] [Thread-27828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:42:32.305 [DEBUG] [Thread-27828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:42:32.305 [DEBUG] [Thread-27828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:42:32.305 [DEBUG] [Thread-27828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:42:32.305 [DEBUG] [Thread-27828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:42:32.305 [DEBUG] [Thread-27828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:42:32.305 [DEBUG] [Thread-27828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:42:32.305 [DEBUG] [Thread-27828] [transport.py] [_log()] client lang: <none>
2026-04-15T23:42:32.305 [DEBUG] [Thread-27828] [transport.py] [_log()] server lang: <none>
2026-04-15T23:42:32.305 [DEBUG] [Thread-27828] [transport.py] [_log()] kex follows: False
2026-04-15T23:42:32.306 [DEBUG] [Thread-27828] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:42:32.306 [DEBUG] [Thread-27828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:42:32.306 [DEBUG] [Thread-27828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:42:32.306 [DEBUG] [Thread-27828] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:42:32.306 [DEBUG] [Thread-27828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:42:32.306 [DEBUG] [Thread-27828] [transport.py] [_log()] Compression: none
2026-04-15T23:42:32.306 [DEBUG] [Thread-27828] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:42:32.323 [DEBUG] [Thread-27828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:42:32.324 [DEBUG] [Thread-27828] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:42:32.324 [DEBUG] [Thread-27828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:42:32.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:42:32.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:42:32.325 [DEBUG] [Thread-27828] [transport.py] [_log()] userauth is OK
2026-04-15T23:42:32.325 [DEBUG] [Thread-27828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:42:32.325 [DEBUG] [Thread-27828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:42:32.326 [DEBUG] [Thread-27828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:42:32.326 [DEBUG] [Thread-27828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:42:32.347 [INFO] [Thread-27828] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:42:32.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:42:33.128 [DEBUG] [Thread-27828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:42:33.129 [DEBUG] [Thread-27828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:42:33.129 [DEBUG] [Thread-27828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:42:33.171 [DEBUG] [Thread-27828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:42:33.171 [DEBUG] [Thread-27828] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:42:33.173 [DEBUG] [Thread-27828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:42:33.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:42:33.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:42:33.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:42:33.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:42:33.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:42:33.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:42:33.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:42:33.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:42:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:42:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.904295 -999.00   +8.90   6.73     83   +6.30 1 1 1 2 1     0    0 1.87 -29.85 ZNESW 7.4 6.7 112.2 9.3 9.4 -24.6 9.4 -23.3 9.1 -21.2 9.4 -23.2
2026-04-15T23:42:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:42:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:42:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.904295
2026-04-15T23:42:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:42:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:42:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:42:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:42:33.191 [DEBUG] [Thread-27828] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:42:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:42:33.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:42:23', tmtdew=3.26343, humidity=79.6287, cloud=0.0, wind=8.6292, temperature=8.91395, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:42:11.088', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0572499999999998, -0.0417500000000004, -0.013749999999999929, -0.03950000000000031, -0.03849999999999909, 0.03275000000000006, -0.01550000000000118, -0.013249999999999318, -0.016500000000000625, -0.08249999999999957, -0.02775000000000105, -0.09500000000000064, -0.0039999999999995595, 0.00575000000000081, -0.009999999999999787, -0.05349999999999966, -0.036749999999999616, -0.0495000000000001, -0.005000000000000782, -0.027250000000002217, -0.022000000000002018, 0.032249999999999446, 0.004250000000000753, -0.025249999999999773, -0.010000000000001563, -0.08549999999999969, -0.003750000000000142, 0.0045000000000001705, 0.018000000000000682, 0.002500000000001279, 0.03550000000000075, 0.02400000000000091, -0.06975000000000087], zp_timestamp='2026-04-15T21:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:42:33.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:42:33.404 [DEBUG] [Thread-27831] [transport.py] [_log()] starting thread (client mode): 0xee907820
2026-04-15T23:42:33.404 [DEBUG] [Thread-27831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:42:33.419 [DEBUG] [Thread-27831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:42:33.419 [INFO] [Thread-27831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:42:33.426 [DEBUG] [Thread-27831] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:42:33.426 [DEBUG] [Thread-27831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:42:33.426 [DEBUG] [Thread-27831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:42:33.426 [DEBUG] [Thread-27831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:42:33.426 [DEBUG] [Thread-27831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:42:33.426 [DEBUG] [Thread-27831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:42:33.426 [DEBUG] [Thread-27831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:42:33.427 [DEBUG] [Thread-27831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:42:33.427 [DEBUG] [Thread-27831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:42:33.427 [DEBUG] [Thread-27831] [transport.py] [_log()] client lang: <none>
2026-04-15T23:42:33.427 [DEBUG] [Thread-27831] [transport.py] [_log()] server lang: <none>
2026-04-15T23:42:33.427 [DEBUG] [Thread-27831] [transport.py] [_log()] kex follows: False
2026-04-15T23:42:33.427 [DEBUG] [Thread-27831] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:42:33.427 [DEBUG] [Thread-27831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:42:33.427 [DEBUG] [Thread-27831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:42:33.427 [DEBUG] [Thread-27831] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:42:33.427 [DEBUG] [Thread-27831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:42:33.427 [DEBUG] [Thread-27831] [transport.py] [_log()] Compression: none
2026-04-15T23:42:33.427 [DEBUG] [Thread-27831] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:42:33.483 [DEBUG] [Thread-27831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:42:33.483 [DEBUG] [Thread-27831] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:42:33.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:42:33.484 [DEBUG] [Thread-27831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:42:33.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:42:33.541 [DEBUG] [Thread-27831] [transport.py] [_log()] userauth is OK
2026-04-15T23:42:33.542 [DEBUG] [Thread-27831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:42:33.542 [DEBUG] [Thread-27831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:42:33.542 [DEBUG] [Thread-27831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:42:33.542 [DEBUG] [Thread-27831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:42:33.559 [INFO] [Thread-27831] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:42:33.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:42:33.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:42:34.345 [DEBUG] [Thread-27831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:42:34.345 [DEBUG] [Thread-27831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:42:34.393 [DEBUG] [Thread-27831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:42:34.393 [DEBUG] [Thread-27831] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:42:34.401 [DEBUG] [Thread-27831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:42:34.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:42: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')
2026-04-15T23:42: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
2026-04-15T23:42:34.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:42:34.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:42:34.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:42:34.434 [DEBUG] [Thread-27831] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:42:38.571 [DEBUG] [Thread-27833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:42:44.247 [DEBUG] [Thread-27834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:42:47.394 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:42:51.811 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:42:59.284 [DEBUG] [Thread-27835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:43:04.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:43:04.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:43:04.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
2026-04-15T23:43:05.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 42, 23), 3.26343, 79.6287, 0.0, 8.6292, 8.91395, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:43:05.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:42:23
2026-04-15T23:43:06.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:43:06.555 [DEBUG] [Thread-27836] [transport.py] [_log()] starting thread (client mode): 0xee904850
2026-04-15T23:43:06.555 [DEBUG] [Thread-27836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:43:06.574 [DEBUG] [Thread-27836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:43:06.574 [INFO] [Thread-27836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:43:06.577 [DEBUG] [Thread-27836] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:43:06.577 [DEBUG] [Thread-27836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:43:06.577 [DEBUG] [Thread-27836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:43:06.577 [DEBUG] [Thread-27836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:43:06.578 [DEBUG] [Thread-27836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:43:06.578 [DEBUG] [Thread-27836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:43:06.578 [DEBUG] [Thread-27836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:43:06.578 [DEBUG] [Thread-27836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:43:06.578 [DEBUG] [Thread-27836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:43:06.578 [DEBUG] [Thread-27836] [transport.py] [_log()] client lang: <none>
2026-04-15T23:43:06.578 [DEBUG] [Thread-27836] [transport.py] [_log()] server lang: <none>
2026-04-15T23:43:06.578 [DEBUG] [Thread-27836] [transport.py] [_log()] kex follows: False
2026-04-15T23:43:06.578 [DEBUG] [Thread-27836] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:43:06.578 [DEBUG] [Thread-27836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:43:06.578 [DEBUG] [Thread-27836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:43:06.579 [DEBUG] [Thread-27836] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:43:06.579 [DEBUG] [Thread-27836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:43:06.579 [DEBUG] [Thread-27836] [transport.py] [_log()] Compression: none
2026-04-15T23:43:06.579 [DEBUG] [Thread-27836] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:43:06.595 [DEBUG] [Thread-27836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:43:06.596 [DEBUG] [Thread-27836] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:43:06.596 [DEBUG] [Thread-27836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:43:06.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:43:06.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:43:06.597 [DEBUG] [Thread-27836] [transport.py] [_log()] userauth is OK
2026-04-15T23:43:06.598 [DEBUG] [Thread-27836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:43:06.598 [DEBUG] [Thread-27836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:43:06.598 [DEBUG] [Thread-27836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:43:06.598 [DEBUG] [Thread-27836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:43:06.622 [INFO] [Thread-27836] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:43:06.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:43:07.279 [DEBUG] [Thread-27836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:43:07.279 [DEBUG] [Thread-27836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:43:07.280 [DEBUG] [Thread-27836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:43:07.321 [DEBUG] [Thread-27836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:43:07.321 [DEBUG] [Thread-27836] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:43:07.323 [DEBUG] [Thread-27836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:43:07.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:43:07.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:43:07.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:43:07.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:43:07.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:43:07.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:43:07.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:43:07.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:43:07.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:43:07.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.904642 -999.00   +9.00   8.40     83   +6.40 1 1 1 2 1     0    0 2.03 -28.50 ZNESW 8.5 8.4 105.0 10.9 9.5 -24.2 9.4 -23.3 9.1 -21.2 9.4 -23.3
2026-04-15T23:43:07.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:43:07.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:43:07.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.904642
2026-04-15T23:43:07.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:43:07.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:43:07.336 [DEBUG] [Thread-27836] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:43:07.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:43:07.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:43:07.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:43:07.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:42:23', tmtdew=3.26343, humidity=79.6287, cloud=0.0, wind=8.6292, temperature=8.91395, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:42:41.069', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0572499999999998, -0.0417500000000004, -0.013749999999999929, -0.03950000000000031, -0.03849999999999909, 0.03275000000000006, -0.01550000000000118, -0.013249999999999318, -0.016500000000000625, -0.08249999999999957, -0.02775000000000105, -0.09500000000000064, -0.0039999999999995595, 0.00575000000000081, -0.009999999999999787, -0.05349999999999966, -0.036749999999999616, -0.0495000000000001, -0.005000000000000782, -0.027250000000002217, -0.022000000000002018, 0.032249999999999446, 0.004250000000000753, -0.025249999999999773, -0.010000000000001563, -0.08549999999999969, -0.003750000000000142, 0.0045000000000001705, 0.018000000000000682, 0.002500000000001279, 0.03550000000000075, 0.02400000000000091, -0.06975000000000087], zp_timestamp='2026-04-15T21:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:43:07.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:43:07.559 [DEBUG] [Thread-27839] [transport.py] [_log()] starting thread (client mode): 0xee954190
2026-04-15T23:43:07.559 [DEBUG] [Thread-27839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:43:07.573 [DEBUG] [Thread-27839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:43:07.573 [INFO] [Thread-27839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:43:07.582 [DEBUG] [Thread-27839] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:43:07.582 [DEBUG] [Thread-27839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:43:07.582 [DEBUG] [Thread-27839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:43:07.583 [DEBUG] [Thread-27839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:43:07.583 [DEBUG] [Thread-27839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:43:07.583 [DEBUG] [Thread-27839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:43:07.583 [DEBUG] [Thread-27839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:43:07.583 [DEBUG] [Thread-27839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:43:07.583 [DEBUG] [Thread-27839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:43:07.583 [DEBUG] [Thread-27839] [transport.py] [_log()] client lang: <none>
2026-04-15T23:43:07.583 [DEBUG] [Thread-27839] [transport.py] [_log()] server lang: <none>
2026-04-15T23:43:07.583 [DEBUG] [Thread-27839] [transport.py] [_log()] kex follows: False
2026-04-15T23:43:07.584 [DEBUG] [Thread-27839] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:43:07.584 [DEBUG] [Thread-27839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:43:07.584 [DEBUG] [Thread-27839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:43:07.584 [DEBUG] [Thread-27839] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:43:07.584 [DEBUG] [Thread-27839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:43:07.584 [DEBUG] [Thread-27839] [transport.py] [_log()] Compression: none
2026-04-15T23:43:07.584 [DEBUG] [Thread-27839] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:43:07.641 [DEBUG] [Thread-27839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:43:07.641 [DEBUG] [Thread-27839] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:43:07.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:43:07.642 [DEBUG] [Thread-27839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:43:07.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:43:07.701 [DEBUG] [Thread-27839] [transport.py] [_log()] userauth is OK
2026-04-15T23:43:07.702 [DEBUG] [Thread-27839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:43:07.702 [DEBUG] [Thread-27839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:43:07.702 [DEBUG] [Thread-27839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:43:07.702 [DEBUG] [Thread-27839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:43:07.735 [INFO] [Thread-27839] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:43:07.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:43:07.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:43:08.557 [DEBUG] [Thread-27839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:43:08.557 [DEBUG] [Thread-27839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:43:08.606 [DEBUG] [Thread-27839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:43:08.606 [DEBUG] [Thread-27839] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:43:08.616 [DEBUG] [Thread-27839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:43:08.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:43: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')
2026-04-15T23:43:08.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
2026-04-15T23:43:08.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:43:08.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:43:08.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:43:08.657 [DEBUG] [Thread-27839] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:43:11.248 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:43:14.312 [DEBUG] [Thread-27841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:43:15.635 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:43:16.219 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:43:16.220 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:43:22.347 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:43:26.728 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:43:29.347 [DEBUG] [Thread-27842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:43:38.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:43:38.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:43:38.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:43:38.715 [DEBUG] [Thread-27843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:43:40.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 42, 59), 3.3083, 79.6619, 0.0, 8.94672, 8.99713, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:43:40.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:42:59
2026-04-15T23:43:40.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:43:40.879 [DEBUG] [Thread-27844] [transport.py] [_log()] starting thread (client mode): 0xee954340
2026-04-15T23:43:40.880 [DEBUG] [Thread-27844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:43:40.899 [DEBUG] [Thread-27844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:43:40.899 [INFO] [Thread-27844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:43:40.902 [DEBUG] [Thread-27844] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:43:40.902 [DEBUG] [Thread-27844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:43:40.902 [DEBUG] [Thread-27844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:43:40.902 [DEBUG] [Thread-27844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:43:40.902 [DEBUG] [Thread-27844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:43:40.902 [DEBUG] [Thread-27844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:43:40.903 [DEBUG] [Thread-27844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:43:40.903 [DEBUG] [Thread-27844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:43:40.903 [DEBUG] [Thread-27844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:43:40.903 [DEBUG] [Thread-27844] [transport.py] [_log()] client lang: <none>
2026-04-15T23:43:40.903 [DEBUG] [Thread-27844] [transport.py] [_log()] server lang: <none>
2026-04-15T23:43:40.903 [DEBUG] [Thread-27844] [transport.py] [_log()] kex follows: False
2026-04-15T23:43:40.903 [DEBUG] [Thread-27844] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:43:40.903 [DEBUG] [Thread-27844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:43:40.903 [DEBUG] [Thread-27844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:43:40.903 [DEBUG] [Thread-27844] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:43:40.903 [DEBUG] [Thread-27844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:43:40.903 [DEBUG] [Thread-27844] [transport.py] [_log()] Compression: none
2026-04-15T23:43:40.903 [DEBUG] [Thread-27844] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:43:40.919 [DEBUG] [Thread-27844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:43:40.919 [DEBUG] [Thread-27844] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:43:40.919 [DEBUG] [Thread-27844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:43:40.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:43:40.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:43:40.960 [DEBUG] [Thread-27844] [transport.py] [_log()] userauth is OK
2026-04-15T23:43:40.960 [DEBUG] [Thread-27844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:43:40.960 [DEBUG] [Thread-27844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:43:40.961 [DEBUG] [Thread-27844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:43:40.961 [DEBUG] [Thread-27844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:43:40.979 [INFO] [Thread-27844] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:43:40.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:43:41.621 [DEBUG] [Thread-27844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:43:41.621 [DEBUG] [Thread-27844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:43:41.621 [DEBUG] [Thread-27844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:43:41.662 [DEBUG] [Thread-27844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:43:41.662 [DEBUG] [Thread-27844] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:43:41.665 [DEBUG] [Thread-27844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:43:41.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:43:41.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:43:41.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:43:41.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:43:41.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:43:41.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:43:41.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:43:41.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:43:41.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:43:41.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.904990 -999.00   +9.10   7.34     83   +6.40 1 1 1 2 1     0    0 1.97 -27.94 ZNESW 6.5 7.3 97.0 10.4 9.5 -24.6 9.4 -23.4 9.1 -21.2 9.4 -23.3
2026-04-15T23:43:41.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:43:41.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:43:41.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.904990
2026-04-15T23:43:41.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:43:41.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:43:41.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:43:41.691 [DEBUG] [Thread-27844] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:43:41.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:43:41.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:43:41.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:42:59', tmtdew=3.3083, humidity=79.6619, cloud=0.0, wind=8.94672, temperature=8.99713, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:43:11.136', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0572499999999998, -0.0417500000000004, -0.013749999999999929, -0.03950000000000031, -0.03849999999999909, 0.03275000000000006, -0.01550000000000118, -0.013249999999999318, -0.016500000000000625, -0.08249999999999957, -0.02775000000000105, -0.09500000000000064, -0.0039999999999995595, 0.00575000000000081, -0.009999999999999787, -0.05349999999999966, -0.036749999999999616, -0.0495000000000001, -0.005000000000000782, -0.027250000000002217, -0.022000000000002018, 0.032249999999999446, 0.004250000000000753, -0.025249999999999773, -0.010000000000001563, -0.08549999999999969, -0.003750000000000142, 0.0045000000000001705, 0.018000000000000682, 0.002500000000001279, 0.03550000000000075, 0.02400000000000091, -0.06975000000000087], zp_timestamp='2026-04-15T21:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:43:41.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:43:41.949 [DEBUG] [Thread-27847] [transport.py] [_log()] starting thread (client mode): 0xee9070a0
2026-04-15T23:43:41.949 [DEBUG] [Thread-27847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:43:41.963 [DEBUG] [Thread-27847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:43:41.963 [INFO] [Thread-27847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:43:41.971 [DEBUG] [Thread-27847] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:43:41.971 [DEBUG] [Thread-27847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:43:41.971 [DEBUG] [Thread-27847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:43:41.971 [DEBUG] [Thread-27847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:43:41.971 [DEBUG] [Thread-27847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:43:41.971 [DEBUG] [Thread-27847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:43:41.971 [DEBUG] [Thread-27847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:43:41.971 [DEBUG] [Thread-27847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:43:41.972 [DEBUG] [Thread-27847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:43:41.972 [DEBUG] [Thread-27847] [transport.py] [_log()] client lang: <none>
2026-04-15T23:43:41.972 [DEBUG] [Thread-27847] [transport.py] [_log()] server lang: <none>
2026-04-15T23:43:41.972 [DEBUG] [Thread-27847] [transport.py] [_log()] kex follows: False
2026-04-15T23:43:41.972 [DEBUG] [Thread-27847] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:43:41.972 [DEBUG] [Thread-27847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:43:41.972 [DEBUG] [Thread-27847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:43:41.972 [DEBUG] [Thread-27847] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:43:41.972 [DEBUG] [Thread-27847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:43:41.972 [DEBUG] [Thread-27847] [transport.py] [_log()] Compression: none
2026-04-15T23:43:41.972 [DEBUG] [Thread-27847] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:43:42.029 [DEBUG] [Thread-27847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:43:42.029 [DEBUG] [Thread-27847] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:43:42.030 [DEBUG] [Thread-27847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:43:42.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:43:42.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:43:42.087 [DEBUG] [Thread-27847] [transport.py] [_log()] userauth is OK
2026-04-15T23:43:42.087 [DEBUG] [Thread-27847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:43:42.087 [DEBUG] [Thread-27847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:43:42.087 [DEBUG] [Thread-27847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:43:42.087 [DEBUG] [Thread-27847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:43:42.113 [INFO] [Thread-27847] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:43:42.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:43:42.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:43:42.936 [DEBUG] [Thread-27847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:43:42.937 [DEBUG] [Thread-27847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:43:42.984 [DEBUG] [Thread-27847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:43:42.984 [DEBUG] [Thread-27847] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:43:42.993 [DEBUG] [Thread-27847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:43:43.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:43:43.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')
2026-04-15T23:43:43.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
2026-04-15T23:43:43.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:43:43.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:43:43.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:43:43.028 [DEBUG] [Thread-27847] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:43:44.376 [DEBUG] [Thread-27849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:43:59.419 [DEBUG] [Thread-27850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:44:13.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:44:13.042 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:44:13.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
2026-04-15T23:44:14.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 43, 34), 3.0202, 81.2907, 0.0, 10.7287, 8.79472, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:44:14.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:43:34
2026-04-15T23:44:14.454 [DEBUG] [Thread-27851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:44:14.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:44:15.189 [DEBUG] [Thread-27852] [transport.py] [_log()] starting thread (client mode): 0xf1367070
2026-04-15T23:44:15.189 [DEBUG] [Thread-27852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:44:15.204 [DEBUG] [Thread-27852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:44:15.204 [INFO] [Thread-27852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:44:15.207 [DEBUG] [Thread-27852] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:44:15.207 [DEBUG] [Thread-27852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:44:15.207 [DEBUG] [Thread-27852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:44:15.207 [DEBUG] [Thread-27852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:44:15.207 [DEBUG] [Thread-27852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:44:15.208 [DEBUG] [Thread-27852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:44:15.208 [DEBUG] [Thread-27852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:44:15.208 [DEBUG] [Thread-27852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:44:15.208 [DEBUG] [Thread-27852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:44:15.208 [DEBUG] [Thread-27852] [transport.py] [_log()] client lang: <none>
2026-04-15T23:44:15.208 [DEBUG] [Thread-27852] [transport.py] [_log()] server lang: <none>
2026-04-15T23:44:15.208 [DEBUG] [Thread-27852] [transport.py] [_log()] kex follows: False
2026-04-15T23:44:15.208 [DEBUG] [Thread-27852] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:44:15.208 [DEBUG] [Thread-27852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:44:15.208 [DEBUG] [Thread-27852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:44:15.208 [DEBUG] [Thread-27852] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:44:15.209 [DEBUG] [Thread-27852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:44:15.209 [DEBUG] [Thread-27852] [transport.py] [_log()] Compression: none
2026-04-15T23:44:15.209 [DEBUG] [Thread-27852] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:44:15.225 [DEBUG] [Thread-27852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:44:15.225 [DEBUG] [Thread-27852] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:44:15.225 [DEBUG] [Thread-27852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:44:15.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:44:15.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:44:15.226 [DEBUG] [Thread-27852] [transport.py] [_log()] userauth is OK
2026-04-15T23:44:15.227 [DEBUG] [Thread-27852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:44:15.227 [DEBUG] [Thread-27852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:44:15.227 [DEBUG] [Thread-27852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:44:15.227 [DEBUG] [Thread-27852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:44:15.239 [INFO] [Thread-27852] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:44:15.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:44:15.881 [DEBUG] [Thread-27852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:44:15.881 [DEBUG] [Thread-27852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:44:15.881 [DEBUG] [Thread-27852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:44:15.922 [DEBUG] [Thread-27852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:44:15.922 [DEBUG] [Thread-27852] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:44:15.924 [DEBUG] [Thread-27852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:44:15.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:44:15.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:44:15.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:44:15.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:44:15.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:44:15.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:44:15.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:44:15.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:44:15.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:44:15.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.905337 -999.00   +9.20   5.31     82   +6.40 1 1 1 2 1     0    0 1.95 -29.14 ZNESW 7.5 5.3 105.5 7.6 9.6 -24.4 9.4 -23.5 9.1 -21.3 9.4 -23.2
2026-04-15T23:44:15.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:44:15.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:44:15.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.905337
2026-04-15T23:44:15.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:44:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:44:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:44:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:44:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:44:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:43:34', tmtdew=3.0202, humidity=81.2907, cloud=0.0, wind=10.7287, temperature=8.79472, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:43:41.117', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0572499999999998, -0.0417500000000004, -0.013749999999999929, -0.03950000000000031, -0.03849999999999909, 0.03275000000000006, -0.01550000000000118, -0.013249999999999318, -0.016500000000000625, -0.08249999999999957, -0.02775000000000105, -0.09500000000000064, -0.0039999999999995595, 0.00575000000000081, -0.009999999999999787, -0.05349999999999966, -0.036749999999999616, -0.0495000000000001, -0.005000000000000782, -0.027250000000002217, -0.022000000000002018, 0.032249999999999446, 0.004250000000000753, -0.025249999999999773, -0.010000000000001563, -0.08549999999999969, -0.003750000000000142, 0.0045000000000001705, 0.018000000000000682, 0.002500000000001279, 0.03550000000000075, 0.02400000000000091, -0.06975000000000087], zp_timestamp='2026-04-15T21:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:44:15.943 [DEBUG] [Thread-27852] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:44:16.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:44:16.153 [DEBUG] [Thread-27855] [transport.py] [_log()] starting thread (client mode): 0xf1367cd0
2026-04-15T23:44:16.153 [DEBUG] [Thread-27855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:44:16.167 [DEBUG] [Thread-27855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:44:16.167 [INFO] [Thread-27855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:44:16.174 [DEBUG] [Thread-27855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:44:16.175 [DEBUG] [Thread-27855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:44:16.175 [DEBUG] [Thread-27855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:44:16.175 [DEBUG] [Thread-27855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:44:16.175 [DEBUG] [Thread-27855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:44:16.175 [DEBUG] [Thread-27855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:44:16.175 [DEBUG] [Thread-27855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:44:16.175 [DEBUG] [Thread-27855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:44:16.175 [DEBUG] [Thread-27855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:44:16.175 [DEBUG] [Thread-27855] [transport.py] [_log()] client lang: <none>
2026-04-15T23:44:16.175 [DEBUG] [Thread-27855] [transport.py] [_log()] server lang: <none>
2026-04-15T23:44:16.175 [DEBUG] [Thread-27855] [transport.py] [_log()] kex follows: False
2026-04-15T23:44:16.175 [DEBUG] [Thread-27855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:44:16.176 [DEBUG] [Thread-27855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:44:16.176 [DEBUG] [Thread-27855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:44:16.176 [DEBUG] [Thread-27855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:44:16.176 [DEBUG] [Thread-27855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:44:16.176 [DEBUG] [Thread-27855] [transport.py] [_log()] Compression: none
2026-04-15T23:44:16.176 [DEBUG] [Thread-27855] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:44:16.231 [DEBUG] [Thread-27855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:44:16.231 [DEBUG] [Thread-27855] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:44:16.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:44:16.232 [DEBUG] [Thread-27855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:44:16.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:44:16.290 [DEBUG] [Thread-27855] [transport.py] [_log()] userauth is OK
2026-04-15T23:44:16.290 [DEBUG] [Thread-27855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:44:16.290 [DEBUG] [Thread-27855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:44:16.290 [DEBUG] [Thread-27855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:44:16.291 [DEBUG] [Thread-27855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:44:16.309 [INFO] [Thread-27855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:44:16.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:44:16.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:44:16.419 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:44:16.420 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:44:17.148 [DEBUG] [Thread-27855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:44:17.148 [DEBUG] [Thread-27855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:44:17.196 [DEBUG] [Thread-27855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:44:17.196 [DEBUG] [Thread-27855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:44:17.205 [DEBUG] [Thread-27855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:44:17.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:44:17.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')
2026-04-15T23:44:17.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
2026-04-15T23:44:17.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:44:17.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:44:17.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:44:17.240 [DEBUG] [Thread-27855] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:44:25.601 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:44:28.656 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:44:29.485 [DEBUG] [Thread-27857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:44:38.859 [DEBUG] [Thread-27858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:44:44.532 [DEBUG] [Thread-27859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:44:47.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:44:47.263 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:44:47.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
2026-04-15T23:44:48.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 44, 9), 3.30458, 79.6785, 0.0, 9.05256, 8.91395, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:44:48.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:44:09
2026-04-15T23:44:49.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:44:49.461 [DEBUG] [Thread-27860] [transport.py] [_log()] starting thread (client mode): 0xee905c30
2026-04-15T23:44:49.461 [DEBUG] [Thread-27860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:44:49.481 [DEBUG] [Thread-27860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:44:49.481 [INFO] [Thread-27860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:44:49.484 [DEBUG] [Thread-27860] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:44:49.484 [DEBUG] [Thread-27860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:44:49.484 [DEBUG] [Thread-27860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:44:49.484 [DEBUG] [Thread-27860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:44:49.484 [DEBUG] [Thread-27860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:44:49.485 [DEBUG] [Thread-27860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:44:49.485 [DEBUG] [Thread-27860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:44:49.485 [DEBUG] [Thread-27860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:44:49.485 [DEBUG] [Thread-27860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:44:49.485 [DEBUG] [Thread-27860] [transport.py] [_log()] client lang: <none>
2026-04-15T23:44:49.485 [DEBUG] [Thread-27860] [transport.py] [_log()] server lang: <none>
2026-04-15T23:44:49.485 [DEBUG] [Thread-27860] [transport.py] [_log()] kex follows: False
2026-04-15T23:44:49.485 [DEBUG] [Thread-27860] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:44:49.485 [DEBUG] [Thread-27860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:44:49.485 [DEBUG] [Thread-27860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:44:49.485 [DEBUG] [Thread-27860] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:44:49.485 [DEBUG] [Thread-27860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:44:49.485 [DEBUG] [Thread-27860] [transport.py] [_log()] Compression: none
2026-04-15T23:44:49.486 [DEBUG] [Thread-27860] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:44:49.504 [DEBUG] [Thread-27860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:44:49.504 [DEBUG] [Thread-27860] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:44:49.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:44:49.505 [DEBUG] [Thread-27860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:44:49.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:44:49.506 [DEBUG] [Thread-27860] [transport.py] [_log()] userauth is OK
2026-04-15T23:44:49.506 [DEBUG] [Thread-27860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:44:49.507 [DEBUG] [Thread-27860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:44:49.507 [DEBUG] [Thread-27860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:44:49.507 [DEBUG] [Thread-27860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:44:49.525 [INFO] [Thread-27860] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:44:49.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:44:50.156 [DEBUG] [Thread-27860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:44:50.157 [DEBUG] [Thread-27860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:44:50.157 [DEBUG] [Thread-27860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:44:50.197 [DEBUG] [Thread-27860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:44:50.197 [DEBUG] [Thread-27860] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:44:50.199 [DEBUG] [Thread-27860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:44:50.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:44:50.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:44:50.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:44:50.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:44:50.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:44:50.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:44:50.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:44:50.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:44:50.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:44:50.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.905684 -999.00   +9.30   6.87     82   +6.40 1 1 1 2 1     0    0 2.02 -28.13 ZNESW 7.8 6.9 118.0 9.7 9.6 -24.4 9.4 -23.4 9.2 -21.3 9.4 -23.2
2026-04-15T23:44:50.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:44:50.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:44:50.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.905684
2026-04-15T23:44:50.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:44:50.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:44:50.221 [DEBUG] [Thread-27860] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:44:50.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:44:50.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:44:50.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:44:50.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:44:09', tmtdew=3.30458, humidity=79.6785, cloud=0.0, wind=9.05256, temperature=8.91395, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:44:11.098', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0572499999999998, -0.0417500000000004, -0.013749999999999929, -0.03950000000000031, -0.03849999999999909, 0.03275000000000006, -0.01550000000000118, -0.013249999999999318, -0.016500000000000625, -0.08249999999999957, -0.02775000000000105, -0.09500000000000064, -0.0039999999999995595, 0.00575000000000081, -0.009999999999999787, -0.05349999999999966, -0.036749999999999616, -0.0495000000000001, -0.005000000000000782, -0.027250000000002217, -0.022000000000002018, 0.032249999999999446, 0.004250000000000753, -0.025249999999999773, -0.010000000000001563, -0.08549999999999969, -0.003750000000000142, 0.0045000000000001705, 0.018000000000000682, 0.002500000000001279, 0.03550000000000075, 0.02400000000000091, -0.06975000000000087], zp_timestamp='2026-04-15T21:40:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:44:50.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:44:50.437 [DEBUG] [Thread-27863] [transport.py] [_log()] starting thread (client mode): 0xf13cba00
2026-04-15T23:44:50.437 [DEBUG] [Thread-27863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:44:50.452 [DEBUG] [Thread-27863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:44:50.452 [INFO] [Thread-27863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:44:50.460 [DEBUG] [Thread-27863] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:44:50.460 [DEBUG] [Thread-27863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:44:50.460 [DEBUG] [Thread-27863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:44:50.460 [DEBUG] [Thread-27863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:44:50.460 [DEBUG] [Thread-27863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:44:50.460 [DEBUG] [Thread-27863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:44:50.460 [DEBUG] [Thread-27863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:44:50.460 [DEBUG] [Thread-27863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:44:50.460 [DEBUG] [Thread-27863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:44:50.461 [DEBUG] [Thread-27863] [transport.py] [_log()] client lang: <none>
2026-04-15T23:44:50.461 [DEBUG] [Thread-27863] [transport.py] [_log()] server lang: <none>
2026-04-15T23:44:50.461 [DEBUG] [Thread-27863] [transport.py] [_log()] kex follows: False
2026-04-15T23:44:50.461 [DEBUG] [Thread-27863] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:44:50.461 [DEBUG] [Thread-27863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:44:50.461 [DEBUG] [Thread-27863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:44:50.461 [DEBUG] [Thread-27863] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:44:50.461 [DEBUG] [Thread-27863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:44:50.461 [DEBUG] [Thread-27863] [transport.py] [_log()] Compression: none
2026-04-15T23:44:50.461 [DEBUG] [Thread-27863] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:44:50.519 [DEBUG] [Thread-27863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:44:50.519 [DEBUG] [Thread-27863] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:44:50.520 [DEBUG] [Thread-27863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:44:50.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:44:50.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:44:50.578 [DEBUG] [Thread-27863] [transport.py] [_log()] userauth is OK
2026-04-15T23:44:50.578 [DEBUG] [Thread-27863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:44:50.579 [DEBUG] [Thread-27863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:44:50.579 [DEBUG] [Thread-27863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:44:50.579 [DEBUG] [Thread-27863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:44:50.608 [INFO] [Thread-27863] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:44:50.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:44:50.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:44:51.413 [DEBUG] [Thread-27863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:44:51.413 [DEBUG] [Thread-27863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:44:51.461 [DEBUG] [Thread-27863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:44:51.461 [DEBUG] [Thread-27863] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:44:51.470 [DEBUG] [Thread-27863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:44:51.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:44:51.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')
2026-04-15T23:44:51.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
2026-04-15T23:44:51.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:44:51.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:44:51.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:44:51.507 [DEBUG] [Thread-27863] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:44:54.099 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:44:59.561 [DEBUG] [Thread-27865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:44:59.896 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:45:02.975 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:45:09.369 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:45:14.599 [DEBUG] [Thread-27866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:45:16.617 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:45:16.618 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:45:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:45:21.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:45:21.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
2026-04-15T23:45:23.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 44, 45), 3.00176, 81.3902, 0.0, 11.1168, 8.76154, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:45:23.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:44:45
2026-04-15T23:45:23.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:45:23.996 [DEBUG] [Thread-27867] [transport.py] [_log()] starting thread (client mode): 0xee956d70
2026-04-15T23:45:23.996 [DEBUG] [Thread-27867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:45:24.019 [DEBUG] [Thread-27867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:45:24.019 [INFO] [Thread-27867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:45:24.022 [DEBUG] [Thread-27867] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:45:24.022 [DEBUG] [Thread-27867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:45:24.022 [DEBUG] [Thread-27867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:45:24.022 [DEBUG] [Thread-27867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:45:24.023 [DEBUG] [Thread-27867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:45:24.023 [DEBUG] [Thread-27867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:45:24.023 [DEBUG] [Thread-27867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:45:24.023 [DEBUG] [Thread-27867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:45:24.023 [DEBUG] [Thread-27867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:45:24.023 [DEBUG] [Thread-27867] [transport.py] [_log()] client lang: <none>
2026-04-15T23:45:24.023 [DEBUG] [Thread-27867] [transport.py] [_log()] server lang: <none>
2026-04-15T23:45:24.024 [DEBUG] [Thread-27867] [transport.py] [_log()] kex follows: False
2026-04-15T23:45:24.024 [DEBUG] [Thread-27867] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:45:24.024 [DEBUG] [Thread-27867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:45:24.024 [DEBUG] [Thread-27867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:45:24.024 [DEBUG] [Thread-27867] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:45:24.024 [DEBUG] [Thread-27867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:45:24.025 [DEBUG] [Thread-27867] [transport.py] [_log()] Compression: none
2026-04-15T23:45:24.025 [DEBUG] [Thread-27867] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:45:24.042 [DEBUG] [Thread-27867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:45:24.042 [DEBUG] [Thread-27867] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:45:24.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:45:24.043 [DEBUG] [Thread-27867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:45:24.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:45:24.044 [DEBUG] [Thread-27867] [transport.py] [_log()] userauth is OK
2026-04-15T23:45:24.044 [DEBUG] [Thread-27867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:45:24.044 [DEBUG] [Thread-27867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:45:24.045 [DEBUG] [Thread-27867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:45:24.045 [DEBUG] [Thread-27867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:45:24.064 [INFO] [Thread-27867] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:45:24.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:45:24.692 [DEBUG] [Thread-27867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:45:24.692 [DEBUG] [Thread-27867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:45:24.693 [DEBUG] [Thread-27867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:45:24.733 [DEBUG] [Thread-27867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:45:24.733 [DEBUG] [Thread-27867] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:45:24.736 [DEBUG] [Thread-27867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:45:24.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:45:24.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:45:24.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:45:24.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:45:24.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:45:24.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:45:24.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:45:24.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:45:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:45:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.906031 -999.00   +9.40   8.13     82   +6.40 1 1 1 2 1     0    0 1.98 -28.37 ZNESW 8.2 8.1 106.9 11.9 9.6 -24.4 9.4 -23.4 9.1 -21.2 9.4 -23.1
2026-04-15T23:45:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:45:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:45:24.759 [DEBUG] [Thread-27867] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:45:24.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.906031
2026-04-15T23:45:24.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:45:24.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:45:24.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:45:24.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:45:24.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:45:24.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:44:45', tmtdew=3.00176, humidity=81.3902, cloud=0.0, wind=11.1168, temperature=8.76154, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:44:41.078', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0572499999999998, -0.0417500000000004, -0.013749999999999929, -0.03950000000000031, -0.03849999999999909, 0.03275000000000006, -0.01550000000000118, -0.013249999999999318, -0.016500000000000625, -0.08249999999999957, -0.02775000000000105, -0.09500000000000064, -0.0039999999999995595, 0.00575000000000081, -0.009999999999999787, -0.05349999999999966, -0.036749999999999616, -0.0495000000000001, -0.005000000000000782, -0.027250000000002217, -0.022000000000002018, 0.032249999999999446, 0.004250000000000753, -0.025249999999999773, -0.010000000000001563, -0.08549999999999969, -0.003750000000000142, 0.0045000000000001705, 0.018000000000000682, 0.002500000000001279, 0.03550000000000075, 0.02400000000000091, -0.06975000000000087], zp_timestamp='2026-04-15T21:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:45:25.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:45:29.629 [DEBUG] [Thread-27870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:45:39.022 [DEBUG] [Thread-27871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:45:44.668 [DEBUG] [Thread-27872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:45:59.699 [DEBUG] [Thread-27873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:46:14.730 [DEBUG] [Thread-27874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:46:16.819 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:46:16.820 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:46:29.760 [DEBUG] [Thread-27875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:46:39.195 [DEBUG] [Thread-27876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:46:44.790 [DEBUG] [Thread-27877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:46:59.821 [DEBUG] [Thread-27878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:47:14.851 [DEBUG] [Thread-27879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:47:17.022 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:47:17.023 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:47:29.883 [DEBUG] [Thread-27880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:47:37.226 [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
2026-04-15T23:47:39.341 [DEBUG] [Thread-27881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:47:44.915 [DEBUG] [Thread-27882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:47:59.944 [DEBUG] [Thread-27883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:48:07.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:48:07.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:48:07.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
2026-04-15T23:48:08.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 47, 42), 2.94662, 81.6888, 0.0, 12.9866, 8.662, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:48:08.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:47:42
2026-04-15T23:48:08.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:48:09.379 [DEBUG] [Thread-27884] [transport.py] [_log()] starting thread (client mode): 0xee954220
2026-04-15T23:48:09.379 [DEBUG] [Thread-27884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:48:09.398 [DEBUG] [Thread-27884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:48:09.398 [INFO] [Thread-27884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:48:09.401 [DEBUG] [Thread-27884] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] client lang: <none>
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] server lang: <none>
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] kex follows: False
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:48:09.402 [DEBUG] [Thread-27884] [transport.py] [_log()] Compression: none
2026-04-15T23:48:09.403 [DEBUG] [Thread-27884] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:48:09.414 [DEBUG] [Thread-27884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:48:09.414 [DEBUG] [Thread-27884] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:48:09.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:48:09.415 [DEBUG] [Thread-27884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:48:09.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:48:09.416 [DEBUG] [Thread-27884] [transport.py] [_log()] userauth is OK
2026-04-15T23:48:09.416 [DEBUG] [Thread-27884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:48:09.416 [DEBUG] [Thread-27884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:48:09.416 [DEBUG] [Thread-27884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:48:09.416 [DEBUG] [Thread-27884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:48:09.434 [INFO] [Thread-27884] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:48:09.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:48:10.275 [DEBUG] [Thread-27884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:48:10.275 [DEBUG] [Thread-27884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:48:10.276 [DEBUG] [Thread-27884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:48:10.316 [DEBUG] [Thread-27884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:48:10.316 [DEBUG] [Thread-27884] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:48:10.318 [DEBUG] [Thread-27884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:48:10.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:48:10.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:48:10.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:48:10.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:48:10.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:48:10.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:48:10.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:48:10.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:48:10.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:48:10.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.907767 -999.00   +9.50   5.26     81   +6.40 1 1 1 2 1     0    0 2.17 -20.80 ZNESW 7.3 5.3 105.4 8.4 9.7 -24.7 9.5 -23.5 9.2 -21.2 9.5 -23.3
2026-04-15T23:48:10.340 [DEBUG] [Thread-27884] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:48:10.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:48:10.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:48:10.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.907767
2026-04-15T23:48:10.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:48:10.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:48:10.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:48:10.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:48:10.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:48:10.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:47:42', tmtdew=2.94662, humidity=81.6888, cloud=0.0, wind=12.9866, temperature=8.662, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:47:11.069', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0572499999999998, -0.0417500000000004, -0.013749999999999929, -0.03950000000000031, -0.03849999999999909, 0.03275000000000006, -0.01550000000000118, -0.013249999999999318, -0.016500000000000625, -0.08249999999999957, -0.02775000000000105, -0.09500000000000064, -0.0039999999999995595, 0.00575000000000081, -0.009999999999999787, -0.05349999999999966, -0.036749999999999616, -0.0495000000000001, -0.005000000000000782, -0.027250000000002217, -0.022000000000002018, 0.032249999999999446, 0.004250000000000753, -0.025249999999999773, -0.010000000000001563, -0.08549999999999969, -0.003750000000000142, 0.0045000000000001705, 0.018000000000000682, 0.002500000000001279, 0.03550000000000075, 0.02400000000000091, -0.06975000000000087], zp_timestamp='2026-04-15T21:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:48:10.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:48:10.600 [DEBUG] [Thread-27887] [transport.py] [_log()] starting thread (client mode): 0xee954160
2026-04-15T23:48:10.600 [DEBUG] [Thread-27887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:48:10.615 [DEBUG] [Thread-27887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:48:10.615 [INFO] [Thread-27887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:48:10.623 [DEBUG] [Thread-27887] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:48:10.623 [DEBUG] [Thread-27887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:48:10.623 [DEBUG] [Thread-27887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:48:10.623 [DEBUG] [Thread-27887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:48:10.623 [DEBUG] [Thread-27887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:48:10.623 [DEBUG] [Thread-27887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:48:10.624 [DEBUG] [Thread-27887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:48:10.624 [DEBUG] [Thread-27887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:48:10.624 [DEBUG] [Thread-27887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:48:10.624 [DEBUG] [Thread-27887] [transport.py] [_log()] client lang: <none>
2026-04-15T23:48:10.624 [DEBUG] [Thread-27887] [transport.py] [_log()] server lang: <none>
2026-04-15T23:48:10.624 [DEBUG] [Thread-27887] [transport.py] [_log()] kex follows: False
2026-04-15T23:48:10.624 [DEBUG] [Thread-27887] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:48:10.624 [DEBUG] [Thread-27887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:48:10.624 [DEBUG] [Thread-27887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:48:10.624 [DEBUG] [Thread-27887] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:48:10.624 [DEBUG] [Thread-27887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:48:10.624 [DEBUG] [Thread-27887] [transport.py] [_log()] Compression: none
2026-04-15T23:48:10.625 [DEBUG] [Thread-27887] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:48:10.681 [DEBUG] [Thread-27887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:48:10.682 [DEBUG] [Thread-27887] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:48:10.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:48:10.683 [DEBUG] [Thread-27887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:48:10.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:48:10.736 [DEBUG] [Thread-27887] [transport.py] [_log()] userauth is OK
2026-04-15T23:48:10.737 [DEBUG] [Thread-27887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:48:10.737 [DEBUG] [Thread-27887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:48:10.737 [DEBUG] [Thread-27887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:48:10.737 [DEBUG] [Thread-27887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:48:10.764 [INFO] [Thread-27887] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:48:10.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:48:10.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:48:11.601 [DEBUG] [Thread-27887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:48:11.601 [DEBUG] [Thread-27887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:48:11.650 [DEBUG] [Thread-27887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:48:11.650 [DEBUG] [Thread-27887] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:48:11.659 [DEBUG] [Thread-27887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:48:11.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:48:11.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')
2026-04-15T23:48:11.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
2026-04-15T23:48:11.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:48:11.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:48:11.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:48:11.695 [DEBUG] [Thread-27887] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:48:14.973 [DEBUG] [Thread-27889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:48:17.226 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:48:17.228 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:48:30.016 [DEBUG] [Thread-27890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:48:39.536 [DEBUG] [Thread-27891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:48:41.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:48:41.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:48:41.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:48:43.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 48, 18), 3.26708, 79.8776, 0.0, 10.2521, 8.81441, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:48:43.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:48:18
2026-04-15T23:48:43.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:48:43.909 [DEBUG] [Thread-27892] [transport.py] [_log()] starting thread (client mode): 0xee904b50
2026-04-15T23:48:43.909 [DEBUG] [Thread-27892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:48:43.929 [DEBUG] [Thread-27892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:48:43.929 [INFO] [Thread-27892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:48:43.932 [DEBUG] [Thread-27892] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:48:43.933 [DEBUG] [Thread-27892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:48:43.933 [DEBUG] [Thread-27892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:48:43.933 [DEBUG] [Thread-27892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:48:43.933 [DEBUG] [Thread-27892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:48:43.933 [DEBUG] [Thread-27892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:48:43.933 [DEBUG] [Thread-27892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:48:43.933 [DEBUG] [Thread-27892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:48:43.933 [DEBUG] [Thread-27892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:48:43.933 [DEBUG] [Thread-27892] [transport.py] [_log()] client lang: <none>
2026-04-15T23:48:43.933 [DEBUG] [Thread-27892] [transport.py] [_log()] server lang: <none>
2026-04-15T23:48:43.933 [DEBUG] [Thread-27892] [transport.py] [_log()] kex follows: False
2026-04-15T23:48:43.934 [DEBUG] [Thread-27892] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:48:43.934 [DEBUG] [Thread-27892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:48:43.934 [DEBUG] [Thread-27892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:48:43.934 [DEBUG] [Thread-27892] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:48:43.934 [DEBUG] [Thread-27892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:48:43.934 [DEBUG] [Thread-27892] [transport.py] [_log()] Compression: none
2026-04-15T23:48:43.934 [DEBUG] [Thread-27892] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:48:43.950 [DEBUG] [Thread-27892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:48:43.951 [DEBUG] [Thread-27892] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:48:43.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:48:43.951 [DEBUG] [Thread-27892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:48:43.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:48:43.952 [DEBUG] [Thread-27892] [transport.py] [_log()] userauth is OK
2026-04-15T23:48:43.952 [DEBUG] [Thread-27892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:48:43.953 [DEBUG] [Thread-27892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:48:43.953 [DEBUG] [Thread-27892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:48:43.953 [DEBUG] [Thread-27892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:48:43.972 [INFO] [Thread-27892] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:48:43.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:48:44.704 [DEBUG] [Thread-27892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:48:44.704 [DEBUG] [Thread-27892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:48:44.704 [DEBUG] [Thread-27892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:48:44.745 [DEBUG] [Thread-27892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:48:44.745 [DEBUG] [Thread-27892] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:48:44.748 [DEBUG] [Thread-27892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:48:44.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:48:44.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:48:44.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:48:44.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:48:44.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:48:44.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:48:44.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:48:44.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:48:44.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:48:44.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.908462 -999.00   +9.50   7.78     81   +6.40 1 1 1 2 1     0    0 2.33 -16.22 ZNESW 6.7 7.8 85.6 9.8 9.7 -24.6 9.5 -23.5 9.2 -21.4 9.5 -23.4
2026-04-15T23:48:44.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:48:44.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:48:44.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.908462
2026-04-15T23:48:44.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:48:44.774 [DEBUG] [Thread-27892] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:48:44.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:48:44.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:48:44.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:48:44.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:48:44.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:48:18', tmtdew=3.26708, humidity=79.8776, cloud=0.0, wind=10.2521, temperature=8.81441, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:48:11.117', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.04824999999999946, -0.03275000000000006, -0.04749999999999943, -0.05150000000000077, -0.01574999999999882, -0.04100000000000037, 0.024750000000000938, -0.002500000000001279, -0.08099999999999952, -0.019750000000000156, -0.08500000000000085, 0.0039999999999995595, 0.02624999999999922, 0.021999999999998465, -0.02800000000000047, -0.028750000000000497, -0.03550000000000075, 0.005999999999998451, -0.015750000000000597, -0.031500000000001194, 0.01974999999999838, -0.00274999999999892, -0.025249999999999773, 0.019499999999998963, -0.06349999999999945, -0.017250000000000654, -0.013500000000000512, 0.022500000000000853, 0.034000000000000696, 0.053000000000000824, 0.031000000000000583, -0.07925000000000182], zp_timestamp='2026-04-15T21:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:48:45.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:48:45.046 [DEBUG] [Thread-27895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:48:45.050 [DEBUG] [Thread-27896] [transport.py] [_log()] starting thread (client mode): 0xf1367d00
2026-04-15T23:48:45.050 [DEBUG] [Thread-27896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:48:45.066 [DEBUG] [Thread-27896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:48:45.066 [INFO] [Thread-27896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:48:45.074 [DEBUG] [Thread-27896] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:48:45.074 [DEBUG] [Thread-27896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:48:45.074 [DEBUG] [Thread-27896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:48:45.074 [DEBUG] [Thread-27896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:48:45.075 [DEBUG] [Thread-27896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:48:45.075 [DEBUG] [Thread-27896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:48:45.075 [DEBUG] [Thread-27896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:48:45.075 [DEBUG] [Thread-27896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:48:45.075 [DEBUG] [Thread-27896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:48:45.075 [DEBUG] [Thread-27896] [transport.py] [_log()] client lang: <none>
2026-04-15T23:48:45.075 [DEBUG] [Thread-27896] [transport.py] [_log()] server lang: <none>
2026-04-15T23:48:45.075 [DEBUG] [Thread-27896] [transport.py] [_log()] kex follows: False
2026-04-15T23:48:45.075 [DEBUG] [Thread-27896] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:48:45.075 [DEBUG] [Thread-27896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:48:45.075 [DEBUG] [Thread-27896] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:48:45.076 [DEBUG] [Thread-27896] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:48:45.076 [DEBUG] [Thread-27896] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:48:45.076 [DEBUG] [Thread-27896] [transport.py] [_log()] Compression: none
2026-04-15T23:48:45.076 [DEBUG] [Thread-27896] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:48:45.133 [DEBUG] [Thread-27896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:48:45.133 [DEBUG] [Thread-27896] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:48:45.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:48:45.134 [DEBUG] [Thread-27896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:48:45.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:48:45.197 [DEBUG] [Thread-27896] [transport.py] [_log()] userauth is OK
2026-04-15T23:48:45.198 [DEBUG] [Thread-27896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:48:45.198 [DEBUG] [Thread-27896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:48:45.198 [DEBUG] [Thread-27896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:48:45.198 [DEBUG] [Thread-27896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:48:45.227 [INFO] [Thread-27896] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:48:45.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:48:45.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:48:46.028 [DEBUG] [Thread-27896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:48:46.028 [DEBUG] [Thread-27896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:48:46.076 [DEBUG] [Thread-27896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:48:46.076 [DEBUG] [Thread-27896] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:48:46.085 [DEBUG] [Thread-27896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:48:46.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:48:46.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')
2026-04-15T23:48:46.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
2026-04-15T23:48:46.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:48:46.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:48:46.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:48:46.127 [DEBUG] [Thread-27896] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:49:00.090 [DEBUG] [Thread-27898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:49:15.123 [DEBUG] [Thread-27899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:49:16.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:49:16.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:49:16.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
2026-04-15T23:49:17.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 48, 53), 2.90343, 81.9211, 0.0, 13.5864, 8.56246, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:49:17.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:48:53
2026-04-15T23:49:17.431 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:49:17.432 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:49:17.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:49:18.199 [DEBUG] [Thread-27900] [transport.py] [_log()] starting thread (client mode): 0xee905120
2026-04-15T23:49:18.200 [DEBUG] [Thread-27900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:49:18.219 [DEBUG] [Thread-27900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:49:18.220 [INFO] [Thread-27900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:49:18.222 [DEBUG] [Thread-27900] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:49:18.222 [DEBUG] [Thread-27900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:49:18.222 [DEBUG] [Thread-27900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] client lang: <none>
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] server lang: <none>
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] kex follows: False
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] Compression: none
2026-04-15T23:49:18.223 [DEBUG] [Thread-27900] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:49:18.239 [DEBUG] [Thread-27900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:49:18.240 [DEBUG] [Thread-27900] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:49:18.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:49:18.240 [DEBUG] [Thread-27900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:49:18.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:49:18.280 [DEBUG] [Thread-27900] [transport.py] [_log()] userauth is OK
2026-04-15T23:49:18.281 [DEBUG] [Thread-27900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:49:18.281 [DEBUG] [Thread-27900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:49:18.281 [DEBUG] [Thread-27900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:49:18.281 [DEBUG] [Thread-27900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:49:18.317 [INFO] [Thread-27900] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:49:18.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:49:19.120 [DEBUG] [Thread-27900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:49:19.120 [DEBUG] [Thread-27900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:49:19.121 [DEBUG] [Thread-27900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:49:19.161 [DEBUG] [Thread-27900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:49:19.161 [DEBUG] [Thread-27900] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:49:19.164 [DEBUG] [Thread-27900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:49:19.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:49:19.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:49:19.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:49:19.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:49:19.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:49:19.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:49:19.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:49:19.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:49:19.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:49:19.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.908809 -999.00   +9.50   7.71     81   +6.50 1 1 1 2 1     0    0 2.40 -14.08 ZNESW 7.5 7.7 106.8 9.9 9.7 -24.6 9.5 -23.5 9.2 -21.4 9.6 -23.4
2026-04-15T23:49:19.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:49:19.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:49:19.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.908809
2026-04-15T23:49:19.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:49:19.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:49:19.189 [DEBUG] [Thread-27900] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:49:19.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:49:19.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:49:19.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:49:19.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:48:53', tmtdew=2.90343, humidity=81.9211, cloud=0.0, wind=13.5864, temperature=8.56246, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:48:41.098', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.04824999999999946, -0.03275000000000006, -0.04749999999999943, -0.05150000000000077, -0.01574999999999882, -0.04100000000000037, 0.024750000000000938, -0.002500000000001279, -0.08099999999999952, -0.019750000000000156, -0.08500000000000085, 0.0039999999999995595, 0.02624999999999922, 0.021999999999998465, -0.02800000000000047, -0.028750000000000497, -0.03550000000000075, 0.005999999999998451, -0.015750000000000597, -0.031500000000001194, 0.01974999999999838, -0.00274999999999892, -0.025249999999999773, 0.019499999999998963, -0.06349999999999945, -0.017250000000000654, -0.013500000000000512, 0.022500000000000853, 0.034000000000000696, 0.053000000000000824, 0.031000000000000583, -0.07925000000000182], zp_timestamp='2026-04-15T21:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:49:19.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:49:19.448 [DEBUG] [Thread-27903] [transport.py] [_log()] starting thread (client mode): 0xf13c9f30
2026-04-15T23:49:19.448 [DEBUG] [Thread-27903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:49:19.466 [DEBUG] [Thread-27903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:49:19.466 [INFO] [Thread-27903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:49:19.473 [DEBUG] [Thread-27903] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:49:19.474 [DEBUG] [Thread-27903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:49:19.474 [DEBUG] [Thread-27903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:49:19.474 [DEBUG] [Thread-27903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:49:19.474 [DEBUG] [Thread-27903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:49:19.474 [DEBUG] [Thread-27903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:49:19.474 [DEBUG] [Thread-27903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:49:19.474 [DEBUG] [Thread-27903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:49:19.474 [DEBUG] [Thread-27903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:49:19.474 [DEBUG] [Thread-27903] [transport.py] [_log()] client lang: <none>
2026-04-15T23:49:19.474 [DEBUG] [Thread-27903] [transport.py] [_log()] server lang: <none>
2026-04-15T23:49:19.474 [DEBUG] [Thread-27903] [transport.py] [_log()] kex follows: False
2026-04-15T23:49:19.475 [DEBUG] [Thread-27903] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:49:19.475 [DEBUG] [Thread-27903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:49:19.475 [DEBUG] [Thread-27903] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:49:19.475 [DEBUG] [Thread-27903] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:49:19.475 [DEBUG] [Thread-27903] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:49:19.475 [DEBUG] [Thread-27903] [transport.py] [_log()] Compression: none
2026-04-15T23:49:19.475 [DEBUG] [Thread-27903] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:49:19.529 [DEBUG] [Thread-27903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:49:19.530 [DEBUG] [Thread-27903] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:49:19.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:49:19.531 [DEBUG] [Thread-27903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:49:19.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:49:19.587 [DEBUG] [Thread-27903] [transport.py] [_log()] userauth is OK
2026-04-15T23:49:19.587 [DEBUG] [Thread-27903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:49:19.587 [DEBUG] [Thread-27903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:49:19.587 [DEBUG] [Thread-27903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:49:19.587 [DEBUG] [Thread-27903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:49:19.605 [INFO] [Thread-27903] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:49:19.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:49:19.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:49:20.434 [DEBUG] [Thread-27903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:49:20.434 [DEBUG] [Thread-27903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:49:20.482 [DEBUG] [Thread-27903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:49:20.483 [DEBUG] [Thread-27903] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:49:20.492 [DEBUG] [Thread-27903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:49:20.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:49:20.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')
2026-04-15T23:49:20.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T23:49:20.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:49:20.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:49:20.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:49:20.528 [DEBUG] [Thread-27903] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:49:30.155 [DEBUG] [Thread-27905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:49:39.681 [DEBUG] [Thread-27906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:49:45.199 [DEBUG] [Thread-27907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:49:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:49:50.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:49:50.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
2026-04-15T23:49:51.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 49, 28), 3.23493, 80.0601, 0.0, 10.305, 8.86441, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:49:51.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:49:28
2026-04-15T23:49:52.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:49:52.683 [DEBUG] [Thread-27908] [transport.py] [_log()] starting thread (client mode): 0xee904d00
2026-04-15T23:49:52.684 [DEBUG] [Thread-27908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:49:52.703 [DEBUG] [Thread-27908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:49:52.703 [INFO] [Thread-27908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:49:52.706 [DEBUG] [Thread-27908] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:49:52.707 [DEBUG] [Thread-27908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:49:52.707 [DEBUG] [Thread-27908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:49:52.707 [DEBUG] [Thread-27908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:49:52.707 [DEBUG] [Thread-27908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:49:52.707 [DEBUG] [Thread-27908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:49:52.707 [DEBUG] [Thread-27908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:49:52.707 [DEBUG] [Thread-27908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:49:52.707 [DEBUG] [Thread-27908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:49:52.707 [DEBUG] [Thread-27908] [transport.py] [_log()] client lang: <none>
2026-04-15T23:49:52.707 [DEBUG] [Thread-27908] [transport.py] [_log()] server lang: <none>
2026-04-15T23:49:52.707 [DEBUG] [Thread-27908] [transport.py] [_log()] kex follows: False
2026-04-15T23:49:52.707 [DEBUG] [Thread-27908] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:49:52.708 [DEBUG] [Thread-27908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:49:52.708 [DEBUG] [Thread-27908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:49:52.708 [DEBUG] [Thread-27908] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:49:52.708 [DEBUG] [Thread-27908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:49:52.708 [DEBUG] [Thread-27908] [transport.py] [_log()] Compression: none
2026-04-15T23:49:52.708 [DEBUG] [Thread-27908] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:49:52.724 [DEBUG] [Thread-27908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:49:52.724 [DEBUG] [Thread-27908] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:49:52.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:49:52.725 [DEBUG] [Thread-27908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:49:52.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:49:52.768 [DEBUG] [Thread-27908] [transport.py] [_log()] userauth is OK
2026-04-15T23:49:52.769 [DEBUG] [Thread-27908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:49:52.769 [DEBUG] [Thread-27908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:49:52.769 [DEBUG] [Thread-27908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:49:52.769 [DEBUG] [Thread-27908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:49:52.799 [INFO] [Thread-27908] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:49:52.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:49:53.576 [DEBUG] [Thread-27908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:49:53.577 [DEBUG] [Thread-27908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:49:53.577 [DEBUG] [Thread-27908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:49:53.617 [DEBUG] [Thread-27908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:49:53.617 [DEBUG] [Thread-27908] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:49:53.620 [DEBUG] [Thread-27908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:49:53.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:49:53.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:49:53.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:49:53.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:49:53.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:49:53.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:49:53.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:49:53.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:49:53.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:49:53.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.909156 -999.00   +9.50   7.72     81   +6.50 1 1 1 2 1     0    0 2.42 -13.10 ZNESW 7.4 7.7 113.5 10.3 9.7 -24.7 9.5 -23.5 9.2 -21.3 9.5 -23.3
2026-04-15T23:49:53.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:49:53.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:49:53.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.909156
2026-04-15T23:49:53.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:49:53.647 [DEBUG] [Thread-27908] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:49:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:49:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:49:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:49:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:49:53.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:49:28', tmtdew=3.23493, humidity=80.0601, cloud=0.0, wind=10.305, temperature=8.86441, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:49:11.078', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.04824999999999946, -0.03275000000000006, -0.04749999999999943, -0.05150000000000077, -0.01574999999999882, -0.04100000000000037, 0.024750000000000938, -0.002500000000001279, -0.08099999999999952, -0.019750000000000156, -0.08500000000000085, 0.0039999999999995595, 0.02624999999999922, 0.021999999999998465, -0.02800000000000047, -0.028750000000000497, -0.03550000000000075, 0.005999999999998451, -0.015750000000000597, -0.031500000000001194, 0.01974999999999838, -0.00274999999999892, -0.025249999999999773, 0.019499999999998963, -0.06349999999999945, -0.017250000000000654, -0.013500000000000512, 0.022500000000000853, 0.034000000000000696, 0.053000000000000824, 0.031000000000000583, -0.07925000000000182], zp_timestamp='2026-04-15T21:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:49:53.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:49:53.909 [DEBUG] [Thread-27911] [transport.py] [_log()] starting thread (client mode): 0xee954310
2026-04-15T23:49:53.909 [DEBUG] [Thread-27911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:49:53.929 [DEBUG] [Thread-27911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:49:53.929 [INFO] [Thread-27911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:49:53.939 [DEBUG] [Thread-27911] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:49:53.939 [DEBUG] [Thread-27911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:49:53.939 [DEBUG] [Thread-27911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:49:53.939 [DEBUG] [Thread-27911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:49:53.940 [DEBUG] [Thread-27911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:49:53.940 [DEBUG] [Thread-27911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:49:53.940 [DEBUG] [Thread-27911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:49:53.940 [DEBUG] [Thread-27911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:49:53.940 [DEBUG] [Thread-27911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:49:53.940 [DEBUG] [Thread-27911] [transport.py] [_log()] client lang: <none>
2026-04-15T23:49:53.940 [DEBUG] [Thread-27911] [transport.py] [_log()] server lang: <none>
2026-04-15T23:49:53.940 [DEBUG] [Thread-27911] [transport.py] [_log()] kex follows: False
2026-04-15T23:49:53.940 [DEBUG] [Thread-27911] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:49:53.940 [DEBUG] [Thread-27911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:49:53.940 [DEBUG] [Thread-27911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:49:53.940 [DEBUG] [Thread-27911] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:49:53.941 [DEBUG] [Thread-27911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:49:53.941 [DEBUG] [Thread-27911] [transport.py] [_log()] Compression: none
2026-04-15T23:49:53.941 [DEBUG] [Thread-27911] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:49:53.999 [DEBUG] [Thread-27911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:49:53.999 [DEBUG] [Thread-27911] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:49:54.000 [DEBUG] [Thread-27911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:49:54.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:49:54.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:49:54.064 [DEBUG] [Thread-27911] [transport.py] [_log()] userauth is OK
2026-04-15T23:49:54.064 [DEBUG] [Thread-27911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:49:54.064 [DEBUG] [Thread-27911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:49:54.064 [DEBUG] [Thread-27911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:49:54.065 [DEBUG] [Thread-27911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:49:54.096 [INFO] [Thread-27911] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:49:54.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:49:54.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:49:54.875 [DEBUG] [Thread-27911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:49:54.875 [DEBUG] [Thread-27911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:49:54.927 [DEBUG] [Thread-27911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:49:54.927 [DEBUG] [Thread-27911] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:49:54.939 [DEBUG] [Thread-27911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:49:54.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:49:54.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')
2026-04-15T23:49:54.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
2026-04-15T23:49:54.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:49:54.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:49:54.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:49:54.991 [DEBUG] [Thread-27911] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:50:00.230 [DEBUG] [Thread-27913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:50:15.275 [DEBUG] [Thread-27914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:50:17.638 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:50:17.639 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:50:24.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:50:24.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:50:24.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:50:26.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 50, 4), 3.22909, 80.0933, 0.0, 10.3403, 8.86441, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:50:26.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:50:04
2026-04-15T23:50:26.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:50:27.100 [DEBUG] [Thread-27915] [transport.py] [_log()] starting thread (client mode): 0xee957e80
2026-04-15T23:50:27.100 [DEBUG] [Thread-27915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:50:27.118 [DEBUG] [Thread-27915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:50:27.118 [INFO] [Thread-27915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:50:27.121 [DEBUG] [Thread-27915] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:50:27.122 [DEBUG] [Thread-27915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:50:27.122 [DEBUG] [Thread-27915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:50:27.122 [DEBUG] [Thread-27915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:50:27.122 [DEBUG] [Thread-27915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:50:27.122 [DEBUG] [Thread-27915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:50:27.122 [DEBUG] [Thread-27915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:50:27.122 [DEBUG] [Thread-27915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:50:27.122 [DEBUG] [Thread-27915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:50:27.122 [DEBUG] [Thread-27915] [transport.py] [_log()] client lang: <none>
2026-04-15T23:50:27.122 [DEBUG] [Thread-27915] [transport.py] [_log()] server lang: <none>
2026-04-15T23:50:27.122 [DEBUG] [Thread-27915] [transport.py] [_log()] kex follows: False
2026-04-15T23:50:27.122 [DEBUG] [Thread-27915] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:50:27.123 [DEBUG] [Thread-27915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:50:27.123 [DEBUG] [Thread-27915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:50:27.123 [DEBUG] [Thread-27915] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:50:27.123 [DEBUG] [Thread-27915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:50:27.123 [DEBUG] [Thread-27915] [transport.py] [_log()] Compression: none
2026-04-15T23:50:27.123 [DEBUG] [Thread-27915] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:50:27.139 [DEBUG] [Thread-27915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:50:27.139 [DEBUG] [Thread-27915] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:50:27.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:50:27.140 [DEBUG] [Thread-27915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:50:27.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:50:27.141 [DEBUG] [Thread-27915] [transport.py] [_log()] userauth is OK
2026-04-15T23:50:27.141 [DEBUG] [Thread-27915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:50:27.141 [DEBUG] [Thread-27915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:50:27.141 [DEBUG] [Thread-27915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:50:27.141 [DEBUG] [Thread-27915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:50:27.157 [INFO] [Thread-27915] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:50:27.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:50:29.549 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:50:30.306 [DEBUG] [Thread-27917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:50:31.778 [DEBUG] [Thread-27915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:50:31.778 [DEBUG] [Thread-27915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:50:31.779 [DEBUG] [Thread-27915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:50:31.819 [DEBUG] [Thread-27915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:50:31.819 [DEBUG] [Thread-27915] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:50:31.822 [DEBUG] [Thread-27915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:50:31.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:50:31.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:50:31.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:50:31.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:50:31.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:50:31.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:50:31.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:50:31.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:50:31.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:50:31.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.909503 -999.00   +9.50   7.39     81   +6.50 1 1 1 2 1     0    0 2.49 -11.33 ZNESW 6.8 7.4 118.8 9.5 9.7 -24.5 9.6 -23.4 9.3 -21.2 9.6 -23.3
2026-04-15T23:50:31.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:50:31.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:50:31.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.909503
2026-04-15T23:50:31.875 [DEBUG] [Thread-27915] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:50:31.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:50:31.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:50:31.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:50:31.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:50:31.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:50:31.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:50:04', tmtdew=3.22909, humidity=80.0933, cloud=0.0, wind=10.3403, temperature=8.86441, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:49:41.059', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.04824999999999946, -0.03275000000000006, -0.04749999999999943, -0.05150000000000077, -0.01574999999999882, -0.04100000000000037, 0.024750000000000938, -0.002500000000001279, -0.08099999999999952, -0.019750000000000156, -0.08500000000000085, 0.0039999999999995595, 0.02624999999999922, 0.021999999999998465, -0.02800000000000047, -0.028750000000000497, -0.03550000000000075, 0.005999999999998451, -0.015750000000000597, -0.031500000000001194, 0.01974999999999838, -0.00274999999999892, -0.025249999999999773, 0.019499999999998963, -0.06349999999999945, -0.017250000000000654, -0.013500000000000512, 0.022500000000000853, 0.034000000000000696, 0.053000000000000824, 0.031000000000000583, -0.07925000000000182], zp_timestamp='2026-04-15T21:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:50:32.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:50:32.141 [DEBUG] [Thread-27919] [transport.py] [_log()] starting thread (client mode): 0xf13e21d0
2026-04-15T23:50:32.141 [DEBUG] [Thread-27919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:50:32.156 [DEBUG] [Thread-27919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:50:32.156 [INFO] [Thread-27919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:50:32.163 [DEBUG] [Thread-27919] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:50:32.164 [DEBUG] [Thread-27919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:50:32.164 [DEBUG] [Thread-27919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:50:32.164 [DEBUG] [Thread-27919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:50:32.164 [DEBUG] [Thread-27919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:50:32.164 [DEBUG] [Thread-27919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:50:32.164 [DEBUG] [Thread-27919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:50:32.164 [DEBUG] [Thread-27919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:50:32.164 [DEBUG] [Thread-27919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:50:32.164 [DEBUG] [Thread-27919] [transport.py] [_log()] client lang: <none>
2026-04-15T23:50:32.164 [DEBUG] [Thread-27919] [transport.py] [_log()] server lang: <none>
2026-04-15T23:50:32.164 [DEBUG] [Thread-27919] [transport.py] [_log()] kex follows: False
2026-04-15T23:50:32.164 [DEBUG] [Thread-27919] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:50:32.165 [DEBUG] [Thread-27919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:50:32.165 [DEBUG] [Thread-27919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:50:32.165 [DEBUG] [Thread-27919] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:50:32.165 [DEBUG] [Thread-27919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:50:32.165 [DEBUG] [Thread-27919] [transport.py] [_log()] Compression: none
2026-04-15T23:50:32.165 [DEBUG] [Thread-27919] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:50:32.220 [DEBUG] [Thread-27919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:50:32.221 [DEBUG] [Thread-27919] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:50:32.221 [DEBUG] [Thread-27919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:50:32.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:50:32.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:50:32.277 [DEBUG] [Thread-27919] [transport.py] [_log()] userauth is OK
2026-04-15T23:50:32.278 [DEBUG] [Thread-27919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:50:32.278 [DEBUG] [Thread-27919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:50:32.278 [DEBUG] [Thread-27919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:50:32.278 [DEBUG] [Thread-27919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:50:32.302 [INFO] [Thread-27919] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:50:32.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:50:32.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:50:32.708 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:50:33.124 [DEBUG] [Thread-27919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:50:33.124 [DEBUG] [Thread-27919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:50:33.174 [DEBUG] [Thread-27919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:50:33.174 [DEBUG] [Thread-27919] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:50:33.183 [DEBUG] [Thread-27919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:50:33.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:50:33.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')
2026-04-15T23:50:33.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
2026-04-15T23:50:33.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:50:33.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:50:33.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:50:33.219 [DEBUG] [Thread-27919] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:50:37.744 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:50:39.844 [DEBUG] [Thread-27921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:50:43.121 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:50:45.337 [DEBUG] [Thread-27922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:51:00.380 [DEBUG] [Thread-27923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:51:02.608 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:51:03.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:51:03.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:51:03.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
2026-04-15T23:51:04.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 50, 40), 2.84071, 82.2861, 0.0, 13.5864, 8.62882, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:51:04.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:50:40
2026-04-15T23:51:04.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:51:05.373 [DEBUG] [Thread-27924] [transport.py] [_log()] starting thread (client mode): 0xee9069b0
2026-04-15T23:51:05.373 [DEBUG] [Thread-27924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:51:05.393 [DEBUG] [Thread-27924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:51:05.393 [INFO] [Thread-27924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:51:05.395 [DEBUG] [Thread-27924] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:51:05.395 [DEBUG] [Thread-27924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:51:05.395 [DEBUG] [Thread-27924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:51:05.395 [DEBUG] [Thread-27924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:51:05.395 [DEBUG] [Thread-27924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:51:05.395 [DEBUG] [Thread-27924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:51:05.395 [DEBUG] [Thread-27924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:51:05.395 [DEBUG] [Thread-27924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:51:05.395 [DEBUG] [Thread-27924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:51:05.395 [DEBUG] [Thread-27924] [transport.py] [_log()] client lang: <none>
2026-04-15T23:51:05.396 [DEBUG] [Thread-27924] [transport.py] [_log()] server lang: <none>
2026-04-15T23:51:05.396 [DEBUG] [Thread-27924] [transport.py] [_log()] kex follows: False
2026-04-15T23:51:05.396 [DEBUG] [Thread-27924] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:51:05.396 [DEBUG] [Thread-27924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:51:05.396 [DEBUG] [Thread-27924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:51:05.396 [DEBUG] [Thread-27924] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:51:05.396 [DEBUG] [Thread-27924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:51:05.396 [DEBUG] [Thread-27924] [transport.py] [_log()] Compression: none
2026-04-15T23:51:05.396 [DEBUG] [Thread-27924] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:51:05.405 [DEBUG] [Thread-27924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:51:05.405 [DEBUG] [Thread-27924] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:51:05.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:51:05.405 [DEBUG] [Thread-27924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:51:05.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:51:05.406 [DEBUG] [Thread-27924] [transport.py] [_log()] userauth is OK
2026-04-15T23:51:05.406 [DEBUG] [Thread-27924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:51:05.406 [DEBUG] [Thread-27924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:51:05.406 [DEBUG] [Thread-27924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:51:05.407 [DEBUG] [Thread-27924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:51:05.429 [INFO] [Thread-27924] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:51:05.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:51:06.255 [DEBUG] [Thread-27924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:51:06.255 [DEBUG] [Thread-27924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:51:06.255 [DEBUG] [Thread-27924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:51:06.296 [DEBUG] [Thread-27924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:51:06.296 [DEBUG] [Thread-27924] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:51:06.298 [DEBUG] [Thread-27924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:51:06.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:51:06.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:51:06.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:51:06.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:51:06.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:51:06.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:51:06.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:51:06.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:51:06.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:51:06.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.909850 -999.00   +9.50   8.41     81   +6.50 1 1 1 2 1     0    0 2.49 -10.33 ZNESW 7.7 8.4 102.8 12.8 9.7 -24.6 9.5 -23.5 9.2 -21.2 9.6 -23.2
2026-04-15T23:51:06.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:51:06.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:51:06.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.909850
2026-04-15T23:51:06.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:51:06.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:51:06.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:51:06.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:51:06.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:51:06.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:50:40', tmtdew=2.84071, humidity=82.2861, cloud=0.0, wind=13.5864, temperature=8.62882, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:50:11.040', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.04824999999999946, -0.03275000000000006, -0.04749999999999943, -0.05150000000000077, -0.01574999999999882, -0.04100000000000037, 0.024750000000000938, -0.002500000000001279, -0.08099999999999952, -0.019750000000000156, -0.08500000000000085, 0.0039999999999995595, 0.02624999999999922, 0.021999999999998465, -0.02800000000000047, -0.028750000000000497, -0.03550000000000075, 0.005999999999998451, -0.015750000000000597, -0.031500000000001194, 0.01974999999999838, -0.00274999999999892, -0.025249999999999773, 0.019499999999998963, -0.06349999999999945, -0.017250000000000654, -0.013500000000000512, 0.022500000000000853, 0.034000000000000696, 0.053000000000000824, 0.031000000000000583, -0.07925000000000182], zp_timestamp='2026-04-15T21:46:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:51:06.318 [DEBUG] [Thread-27924] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:51:06.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:51:06.547 [DEBUG] [Thread-27927] [transport.py] [_log()] starting thread (client mode): 0xee9c79d0
2026-04-15T23:51:06.547 [DEBUG] [Thread-27927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:51:06.563 [DEBUG] [Thread-27927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:51:06.563 [INFO] [Thread-27927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:51:06.572 [DEBUG] [Thread-27927] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:51:06.572 [DEBUG] [Thread-27927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:51:06.572 [DEBUG] [Thread-27927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:51:06.573 [DEBUG] [Thread-27927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:51:06.573 [DEBUG] [Thread-27927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:51:06.573 [DEBUG] [Thread-27927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:51:06.573 [DEBUG] [Thread-27927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:51:06.573 [DEBUG] [Thread-27927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:51:06.573 [DEBUG] [Thread-27927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:51:06.573 [DEBUG] [Thread-27927] [transport.py] [_log()] client lang: <none>
2026-04-15T23:51:06.573 [DEBUG] [Thread-27927] [transport.py] [_log()] server lang: <none>
2026-04-15T23:51:06.573 [DEBUG] [Thread-27927] [transport.py] [_log()] kex follows: False
2026-04-15T23:51:06.573 [DEBUG] [Thread-27927] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:51:06.573 [DEBUG] [Thread-27927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:51:06.573 [DEBUG] [Thread-27927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:51:06.574 [DEBUG] [Thread-27927] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:51:06.574 [DEBUG] [Thread-27927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:51:06.574 [DEBUG] [Thread-27927] [transport.py] [_log()] Compression: none
2026-04-15T23:51:06.574 [DEBUG] [Thread-27927] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:51:06.635 [DEBUG] [Thread-27927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:51:06.635 [DEBUG] [Thread-27927] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:51:06.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:51:06.636 [DEBUG] [Thread-27927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:51:06.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:51:06.692 [DEBUG] [Thread-27927] [transport.py] [_log()] userauth is OK
2026-04-15T23:51:06.692 [DEBUG] [Thread-27927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:51:06.692 [DEBUG] [Thread-27927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:51:06.692 [DEBUG] [Thread-27927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:51:06.692 [DEBUG] [Thread-27927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:51:06.712 [INFO] [Thread-27927] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:51:06.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:51:06.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:51:06.974 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:51:07.576 [DEBUG] [Thread-27927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:51:07.576 [DEBUG] [Thread-27927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:51:07.627 [DEBUG] [Thread-27927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:51:07.627 [DEBUG] [Thread-27927] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:51:07.639 [DEBUG] [Thread-27927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:51:07.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:51:07.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')
2026-04-15T23:51:07.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
2026-04-15T23:51:07.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:51:07.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:51:07.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:51:07.686 [DEBUG] [Thread-27927] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:51:15.411 [DEBUG] [Thread-27929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:51:17.839 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:51:17.840 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:51:26.466 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:51:30.454 [DEBUG] [Thread-27930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:51:30.869 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:51:36.981 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:51:37.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:51:37.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:51:37.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
2026-04-15T23:51:38.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 51, 15), 3.26163, 80.1928, 0.0, 10.3403, 8.91441, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:51:38.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:51:15
2026-04-15T23:51:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:51:39.813 [DEBUG] [Thread-27931] [transport.py] [_log()] starting thread (client mode): 0xee9c7fd0
2026-04-15T23:51:39.814 [DEBUG] [Thread-27931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:51:39.833 [DEBUG] [Thread-27931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:51:39.833 [INFO] [Thread-27931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:51:39.837 [DEBUG] [Thread-27931] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:51:39.837 [DEBUG] [Thread-27931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:51:39.837 [DEBUG] [Thread-27931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:51:39.837 [DEBUG] [Thread-27931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:51:39.837 [DEBUG] [Thread-27931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:51:39.837 [DEBUG] [Thread-27931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:51:39.837 [DEBUG] [Thread-27931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:51:39.837 [DEBUG] [Thread-27931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:51:39.837 [DEBUG] [Thread-27931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:51:39.837 [DEBUG] [Thread-27931] [transport.py] [_log()] client lang: <none>
2026-04-15T23:51:39.838 [DEBUG] [Thread-27931] [transport.py] [_log()] server lang: <none>
2026-04-15T23:51:39.838 [DEBUG] [Thread-27931] [transport.py] [_log()] kex follows: False
2026-04-15T23:51:39.838 [DEBUG] [Thread-27931] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:51:39.838 [DEBUG] [Thread-27931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:51:39.838 [DEBUG] [Thread-27931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:51:39.838 [DEBUG] [Thread-27931] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:51:39.838 [DEBUG] [Thread-27931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:51:39.838 [DEBUG] [Thread-27931] [transport.py] [_log()] Compression: none
2026-04-15T23:51:39.838 [DEBUG] [Thread-27931] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:51:39.846 [DEBUG] [Thread-27931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:51:39.847 [DEBUG] [Thread-27931] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:51:39.847 [DEBUG] [Thread-27931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:51:39.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:51:39.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:51:39.848 [DEBUG] [Thread-27931] [transport.py] [_log()] userauth is OK
2026-04-15T23:51:39.848 [DEBUG] [Thread-27931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:51:39.848 [DEBUG] [Thread-27931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:51:39.848 [DEBUG] [Thread-27931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:51:39.848 [DEBUG] [Thread-27931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:51:39.867 [INFO] [Thread-27931] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:51:39.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:51:39.999 [DEBUG] [Thread-27933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:51:40.664 [DEBUG] [Thread-27931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:51:40.665 [DEBUG] [Thread-27931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:51:40.665 [DEBUG] [Thread-27931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:51:40.705 [DEBUG] [Thread-27931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:51:40.705 [DEBUG] [Thread-27931] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:51:40.708 [DEBUG] [Thread-27931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:51:40.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:51:40.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:51:40.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:51:40.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:51:40.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:51:40.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:51:40.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:51:40.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:51:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:51:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.910545 -999.00   +9.50   8.50     81   +6.40 1 1 1 2 1     0    0 2.68 -4.57 ZNESW 7.5 8.5 117.6 11.6 9.7 -24.6 9.6 -23.3 9.3 -21.3 9.6 -23.3
2026-04-15T23:51:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:51:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:51:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.910545
2026-04-15T23:51:40.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:51:40.734 [DEBUG] [Thread-27931] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:51:40.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:51:40.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:51:40.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:51:40.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:51:40.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:51:15', tmtdew=3.26163, humidity=80.1928, cloud=0.0, wind=10.3403, temperature=8.91441, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:51:11.088', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.08024999999999949, -0.042749999999999844, -0.07450000000000045, -0.036000000000001364, 0.006750000000000256, -0.006000000000000227, -0.006249999999999645, -0.011499999999999844, -0.07600000000000051, -0.02775000000000105, -0.07299999999999862, 0.0019999999999988916, 0.014749999999999375, 0.0039999999999995595, -0.023000000000001464, -0.016750000000000043, -0.07150000000000034, 0.004999999999999005, -0.028250000000001663, -0.021000000000000796, 0.0017499999999994742, 0.0022500000000000853, -0.02674999999999983, 0.013999999999999346, -0.05250000000000021, -0.028750000000000497, -0.026999999999999247, 0.03599999999999959, 0.018499999999999517, 0.013000000000001677, 0.034000000000000696, -0.10625000000000107], zp_timestamp='2026-04-15T21:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:51:40.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:51:40.999 [DEBUG] [Thread-27935] [transport.py] [_log()] starting thread (client mode): 0xee9c6d10
2026-04-15T23:51:41.000 [DEBUG] [Thread-27935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:51:41.014 [DEBUG] [Thread-27935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:51:41.014 [INFO] [Thread-27935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:51:41.022 [DEBUG] [Thread-27935] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:51:41.022 [DEBUG] [Thread-27935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:51:41.022 [DEBUG] [Thread-27935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:51:41.022 [DEBUG] [Thread-27935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:51:41.022 [DEBUG] [Thread-27935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:51:41.022 [DEBUG] [Thread-27935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:51:41.022 [DEBUG] [Thread-27935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:51:41.023 [DEBUG] [Thread-27935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:51:41.023 [DEBUG] [Thread-27935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:51:41.023 [DEBUG] [Thread-27935] [transport.py] [_log()] client lang: <none>
2026-04-15T23:51:41.023 [DEBUG] [Thread-27935] [transport.py] [_log()] server lang: <none>
2026-04-15T23:51:41.023 [DEBUG] [Thread-27935] [transport.py] [_log()] kex follows: False
2026-04-15T23:51:41.023 [DEBUG] [Thread-27935] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:51:41.023 [DEBUG] [Thread-27935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:51:41.023 [DEBUG] [Thread-27935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:51:41.023 [DEBUG] [Thread-27935] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:51:41.023 [DEBUG] [Thread-27935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:51:41.023 [DEBUG] [Thread-27935] [transport.py] [_log()] Compression: none
2026-04-15T23:51:41.024 [DEBUG] [Thread-27935] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:51:41.078 [DEBUG] [Thread-27935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:51:41.078 [DEBUG] [Thread-27935] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:51:41.079 [DEBUG] [Thread-27935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:51:41.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:51:41.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:51:41.135 [DEBUG] [Thread-27935] [transport.py] [_log()] userauth is OK
2026-04-15T23:51:41.136 [DEBUG] [Thread-27935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:51:41.136 [DEBUG] [Thread-27935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:51:41.136 [DEBUG] [Thread-27935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:51:41.136 [DEBUG] [Thread-27935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:51:41.161 [INFO] [Thread-27935] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:51:41.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:51:41.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:51:41.399 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:51:41.988 [DEBUG] [Thread-27935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:51:41.989 [DEBUG] [Thread-27935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:51:42.036 [DEBUG] [Thread-27935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:51:42.036 [DEBUG] [Thread-27935] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:51:42.045 [DEBUG] [Thread-27935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:51:42.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:51:42.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')
2026-04-15T23:51:42.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
2026-04-15T23:51:42.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:51:42.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:51:42.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:51:42.080 [DEBUG] [Thread-27935] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:51:45.487 [DEBUG] [Thread-27937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:52:00.531 [DEBUG] [Thread-27938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:52:12.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:52:12.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:52:12.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
2026-04-15T23:52:13.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 51, 51), 2.82539, 82.3856, 0.0, 12.9866, 8.72836, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:52:13.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:51:51
2026-04-15T23:52:13.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:52:14.196 [DEBUG] [Thread-27939] [transport.py] [_log()] starting thread (client mode): 0xf1350400
2026-04-15T23:52:14.196 [DEBUG] [Thread-27939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:52:14.215 [DEBUG] [Thread-27939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:52:14.216 [INFO] [Thread-27939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:52:14.219 [DEBUG] [Thread-27939] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:52:14.219 [DEBUG] [Thread-27939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:52:14.219 [DEBUG] [Thread-27939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:52:14.219 [DEBUG] [Thread-27939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:52:14.219 [DEBUG] [Thread-27939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:52:14.219 [DEBUG] [Thread-27939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:52:14.219 [DEBUG] [Thread-27939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:52:14.219 [DEBUG] [Thread-27939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:52:14.219 [DEBUG] [Thread-27939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:52:14.220 [DEBUG] [Thread-27939] [transport.py] [_log()] client lang: <none>
2026-04-15T23:52:14.220 [DEBUG] [Thread-27939] [transport.py] [_log()] server lang: <none>
2026-04-15T23:52:14.220 [DEBUG] [Thread-27939] [transport.py] [_log()] kex follows: False
2026-04-15T23:52:14.220 [DEBUG] [Thread-27939] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:52:14.220 [DEBUG] [Thread-27939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:52:14.220 [DEBUG] [Thread-27939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:52:14.220 [DEBUG] [Thread-27939] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:52:14.220 [DEBUG] [Thread-27939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:52:14.220 [DEBUG] [Thread-27939] [transport.py] [_log()] Compression: none
2026-04-15T23:52:14.221 [DEBUG] [Thread-27939] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:52:14.238 [DEBUG] [Thread-27939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:52:14.238 [DEBUG] [Thread-27939] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:52:14.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:52:14.239 [DEBUG] [Thread-27939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:52:14.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:52:14.281 [DEBUG] [Thread-27939] [transport.py] [_log()] userauth is OK
2026-04-15T23:52:14.281 [DEBUG] [Thread-27939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:52:14.281 [DEBUG] [Thread-27939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:52:14.281 [DEBUG] [Thread-27939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:52:14.281 [DEBUG] [Thread-27939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:52:14.307 [INFO] [Thread-27939] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:52:14.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:52:15.090 [DEBUG] [Thread-27939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:52:15.091 [DEBUG] [Thread-27939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:52:15.091 [DEBUG] [Thread-27939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:52:15.131 [DEBUG] [Thread-27939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:52:15.131 [DEBUG] [Thread-27939] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:52:15.134 [DEBUG] [Thread-27939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:52:15.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:52:15.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:52:15.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:52:15.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:52:15.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:52:15.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:52:15.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:52:15.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:52:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:52:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.910892 -999.00   +9.50   6.70     80   +6.40 1 1 1 2 1     0    0 2.75 -2.22 ZNESW 8.0 6.7 97.2 12.1 9.8 -24.6 9.6 -23.3 9.2 -21.2 9.6 -23.3
2026-04-15T23:52:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:52:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:52:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.910892
2026-04-15T23:52:15.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:52:15.160 [DEBUG] [Thread-27939] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:52:15.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:52:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:52:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:52:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:52:15.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:51:51', tmtdew=2.82539, humidity=82.3856, cloud=0.0, wind=12.9866, temperature=8.72836, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:51:41.069', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.08024999999999949, -0.042749999999999844, -0.07450000000000045, -0.036000000000001364, 0.006750000000000256, -0.006000000000000227, -0.006249999999999645, -0.011499999999999844, -0.07600000000000051, -0.02775000000000105, -0.07299999999999862, 0.0019999999999988916, 0.014749999999999375, 0.0039999999999995595, -0.023000000000001464, -0.016750000000000043, -0.07150000000000034, 0.004999999999999005, -0.028250000000001663, -0.021000000000000796, 0.0017499999999994742, 0.0022500000000000853, -0.02674999999999983, 0.013999999999999346, -0.05250000000000021, -0.028750000000000497, -0.026999999999999247, 0.03599999999999959, 0.018499999999999517, 0.013000000000001677, 0.034000000000000696, -0.10625000000000107], zp_timestamp='2026-04-15T21:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:52:15.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:52:15.418 [DEBUG] [Thread-27942] [transport.py] [_log()] starting thread (client mode): 0xee9c3160
2026-04-15T23:52:15.418 [DEBUG] [Thread-27942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:52:15.432 [DEBUG] [Thread-27942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:52:15.432 [INFO] [Thread-27942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:52:15.440 [DEBUG] [Thread-27942] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:52:15.440 [DEBUG] [Thread-27942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:52:15.440 [DEBUG] [Thread-27942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:52:15.440 [DEBUG] [Thread-27942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:52:15.440 [DEBUG] [Thread-27942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:52:15.440 [DEBUG] [Thread-27942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:52:15.440 [DEBUG] [Thread-27942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:52:15.440 [DEBUG] [Thread-27942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:52:15.440 [DEBUG] [Thread-27942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:52:15.440 [DEBUG] [Thread-27942] [transport.py] [_log()] client lang: <none>
2026-04-15T23:52:15.441 [DEBUG] [Thread-27942] [transport.py] [_log()] server lang: <none>
2026-04-15T23:52:15.441 [DEBUG] [Thread-27942] [transport.py] [_log()] kex follows: False
2026-04-15T23:52:15.441 [DEBUG] [Thread-27942] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:52:15.441 [DEBUG] [Thread-27942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:52:15.441 [DEBUG] [Thread-27942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:52:15.441 [DEBUG] [Thread-27942] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:52:15.441 [DEBUG] [Thread-27942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:52:15.441 [DEBUG] [Thread-27942] [transport.py] [_log()] Compression: none
2026-04-15T23:52:15.441 [DEBUG] [Thread-27942] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:52:15.497 [DEBUG] [Thread-27942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:52:15.498 [DEBUG] [Thread-27942] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:52:15.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:52:15.498 [DEBUG] [Thread-27942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:52:15.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:52:15.555 [DEBUG] [Thread-27942] [transport.py] [_log()] userauth is OK
2026-04-15T23:52:15.555 [DEBUG] [Thread-27942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:52:15.555 [DEBUG] [Thread-27942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:52:15.555 [DEBUG] [Thread-27942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:52:15.555 [DEBUG] [Thread-27942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:52:15.566 [DEBUG] [Thread-27944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:52:15.580 [INFO] [Thread-27942] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:52:15.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:52:15.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:52:16.400 [DEBUG] [Thread-27942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:52:16.400 [DEBUG] [Thread-27942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:52:16.448 [DEBUG] [Thread-27942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:52:16.448 [DEBUG] [Thread-27942] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:52:16.457 [DEBUG] [Thread-27942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:52:16.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:52:16.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')
2026-04-15T23:52:16.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
2026-04-15T23:52:16.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:52:16.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:52:16.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:52:16.489 [DEBUG] [Thread-27942] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:52:18.043 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:52:18.044 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:52:30.610 [DEBUG] [Thread-27945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:52:40.160 [DEBUG] [Thread-27946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:52:45.645 [DEBUG] [Thread-27947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:52:46.463 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:52:46.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:52:46.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:52:46.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
2026-04-15T23:52:47.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 52, 26), 3.26596, 80.1762, 0.0, 9.72288, 8.93077, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:52:47.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:52:26
2026-04-15T23:52:48.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:52:48.619 [DEBUG] [Thread-27948] [transport.py] [_log()] starting thread (client mode): 0xee906080
2026-04-15T23:52:48.619 [DEBUG] [Thread-27948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:52:48.632 [DEBUG] [Thread-27948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:52:48.633 [INFO] [Thread-27948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:52:48.636 [DEBUG] [Thread-27948] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:52:48.636 [DEBUG] [Thread-27948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:52:48.636 [DEBUG] [Thread-27948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:52:48.636 [DEBUG] [Thread-27948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:52:48.636 [DEBUG] [Thread-27948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:52:48.636 [DEBUG] [Thread-27948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:52:48.636 [DEBUG] [Thread-27948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:52:48.636 [DEBUG] [Thread-27948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:52:48.636 [DEBUG] [Thread-27948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:52:48.636 [DEBUG] [Thread-27948] [transport.py] [_log()] client lang: <none>
2026-04-15T23:52:48.637 [DEBUG] [Thread-27948] [transport.py] [_log()] server lang: <none>
2026-04-15T23:52:48.637 [DEBUG] [Thread-27948] [transport.py] [_log()] kex follows: False
2026-04-15T23:52:48.637 [DEBUG] [Thread-27948] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:52:48.637 [DEBUG] [Thread-27948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:52:48.637 [DEBUG] [Thread-27948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:52:48.637 [DEBUG] [Thread-27948] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:52:48.637 [DEBUG] [Thread-27948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:52:48.637 [DEBUG] [Thread-27948] [transport.py] [_log()] Compression: none
2026-04-15T23:52:48.637 [DEBUG] [Thread-27948] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:52:48.654 [DEBUG] [Thread-27948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:52:48.655 [DEBUG] [Thread-27948] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:52:48.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:52:48.655 [DEBUG] [Thread-27948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:52:48.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:52:48.656 [DEBUG] [Thread-27948] [transport.py] [_log()] userauth is OK
2026-04-15T23:52:48.656 [DEBUG] [Thread-27948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:52:48.657 [DEBUG] [Thread-27948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:52:48.657 [DEBUG] [Thread-27948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:52:48.657 [DEBUG] [Thread-27948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:52:48.676 [INFO] [Thread-27948] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:52:48.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:52:49.409 [DEBUG] [Thread-27948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:52:49.409 [DEBUG] [Thread-27948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:52:49.409 [DEBUG] [Thread-27948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:52:49.460 [DEBUG] [Thread-27948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:52:49.460 [DEBUG] [Thread-27948] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:52:49.463 [DEBUG] [Thread-27948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:52:49.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:52:49.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:52:49.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:52:49.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:52:49.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:52:49.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:52:49.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:52:49.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:52:49.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:52:49.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.911239 -999.00   +9.50   6.90     80   +6.40 1 1 1 2 1     0    0 2.85 0.32 ZNESW 6.7 6.9 92.4 8.9 9.8 -24.7 9.6 -23.4 9.3 -21.4 9.6 -23.3
2026-04-15T23:52:49.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:52:49.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:52:49.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.911239
2026-04-15T23:52:49.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:52:49.482 [DEBUG] [Thread-27948] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:52:49.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:52:49.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:52:49.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:52:49.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:52:49.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:52:26', tmtdew=3.26596, humidity=80.1762, cloud=0.0, wind=9.72288, temperature=8.93077, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:52:11.050', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.08024999999999949, -0.042749999999999844, -0.07450000000000045, -0.036000000000001364, 0.006750000000000256, -0.006000000000000227, -0.006249999999999645, -0.011499999999999844, -0.07600000000000051, -0.02775000000000105, -0.07299999999999862, 0.0019999999999988916, 0.014749999999999375, 0.0039999999999995595, -0.023000000000001464, -0.016750000000000043, -0.07150000000000034, 0.004999999999999005, -0.028250000000001663, -0.021000000000000796, 0.0017499999999994742, 0.0022500000000000853, -0.02674999999999983, 0.013999999999999346, -0.05250000000000021, -0.028750000000000497, -0.026999999999999247, 0.03599999999999959, 0.018499999999999517, 0.013000000000001677, 0.034000000000000696, -0.10625000000000107], zp_timestamp='2026-04-15T21:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:52:49.586 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:52:49.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:52:49.749 [DEBUG] [Thread-27951] [transport.py] [_log()] starting thread (client mode): 0xee905660
2026-04-15T23:52:49.750 [DEBUG] [Thread-27951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:52:49.764 [DEBUG] [Thread-27951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:52:49.764 [INFO] [Thread-27951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:52:49.772 [DEBUG] [Thread-27951] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:52:49.772 [DEBUG] [Thread-27951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:52:49.772 [DEBUG] [Thread-27951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:52:49.772 [DEBUG] [Thread-27951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:52:49.772 [DEBUG] [Thread-27951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:52:49.772 [DEBUG] [Thread-27951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:52:49.772 [DEBUG] [Thread-27951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:52:49.773 [DEBUG] [Thread-27951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:52:49.773 [DEBUG] [Thread-27951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:52:49.773 [DEBUG] [Thread-27951] [transport.py] [_log()] client lang: <none>
2026-04-15T23:52:49.773 [DEBUG] [Thread-27951] [transport.py] [_log()] server lang: <none>
2026-04-15T23:52:49.773 [DEBUG] [Thread-27951] [transport.py] [_log()] kex follows: False
2026-04-15T23:52:49.773 [DEBUG] [Thread-27951] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:52:49.773 [DEBUG] [Thread-27951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:52:49.773 [DEBUG] [Thread-27951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:52:49.773 [DEBUG] [Thread-27951] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:52:49.773 [DEBUG] [Thread-27951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:52:49.773 [DEBUG] [Thread-27951] [transport.py] [_log()] Compression: none
2026-04-15T23:52:49.774 [DEBUG] [Thread-27951] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:52:49.830 [DEBUG] [Thread-27951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:52:49.830 [DEBUG] [Thread-27951] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:52:49.831 [DEBUG] [Thread-27951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:52:49.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:52:49.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:52:49.886 [DEBUG] [Thread-27951] [transport.py] [_log()] userauth is OK
2026-04-15T23:52:49.886 [DEBUG] [Thread-27951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:52:49.886 [DEBUG] [Thread-27951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:52:49.887 [DEBUG] [Thread-27951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:52:49.887 [DEBUG] [Thread-27951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:52:49.912 [INFO] [Thread-27951] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:52:49.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:52:49.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:52:50.769 [DEBUG] [Thread-27951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:52:50.770 [DEBUG] [Thread-27951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:52:50.817 [DEBUG] [Thread-27951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:52:50.817 [DEBUG] [Thread-27951] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:52:50.826 [DEBUG] [Thread-27951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:52:50.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:52:50.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')
2026-04-15T23:52:50.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
2026-04-15T23:52:50.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:52:50.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:52:50.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:52:50.866 [DEBUG] [Thread-27951] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:53:00.677 [DEBUG] [Thread-27953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:53:15.724 [DEBUG] [Thread-27954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:53:18.245 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:53:18.246 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:53:20.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:53:20.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:53:20.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:53:22.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 53, 2), 3.27108, 80.143, 0.0, 9.65232, 8.89759, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:53:22.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:53:02
2026-04-15T23:53:22.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:53:23.069 [DEBUG] [Thread-27955] [transport.py] [_log()] starting thread (client mode): 0xee9c68c0
2026-04-15T23:53:23.069 [DEBUG] [Thread-27955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:53:23.088 [DEBUG] [Thread-27955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:53:23.088 [INFO] [Thread-27955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:53:23.091 [DEBUG] [Thread-27955] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:53:23.092 [DEBUG] [Thread-27955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:53:23.092 [DEBUG] [Thread-27955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:53:23.092 [DEBUG] [Thread-27955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:53:23.092 [DEBUG] [Thread-27955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:53:23.092 [DEBUG] [Thread-27955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:53:23.092 [DEBUG] [Thread-27955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:53:23.092 [DEBUG] [Thread-27955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:53:23.092 [DEBUG] [Thread-27955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:53:23.092 [DEBUG] [Thread-27955] [transport.py] [_log()] client lang: <none>
2026-04-15T23:53:23.092 [DEBUG] [Thread-27955] [transport.py] [_log()] server lang: <none>
2026-04-15T23:53:23.092 [DEBUG] [Thread-27955] [transport.py] [_log()] kex follows: False
2026-04-15T23:53:23.092 [DEBUG] [Thread-27955] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:53:23.093 [DEBUG] [Thread-27955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:53:23.093 [DEBUG] [Thread-27955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:53:23.093 [DEBUG] [Thread-27955] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:53:23.093 [DEBUG] [Thread-27955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:53:23.093 [DEBUG] [Thread-27955] [transport.py] [_log()] Compression: none
2026-04-15T23:53:23.093 [DEBUG] [Thread-27955] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:53:23.110 [DEBUG] [Thread-27955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:53:23.110 [DEBUG] [Thread-27955] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:53:23.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:53:23.111 [DEBUG] [Thread-27955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:53:23.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:53:23.112 [DEBUG] [Thread-27955] [transport.py] [_log()] userauth is OK
2026-04-15T23:53:23.112 [DEBUG] [Thread-27955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:53:23.112 [DEBUG] [Thread-27955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:53:23.112 [DEBUG] [Thread-27955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:53:23.112 [DEBUG] [Thread-27955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:53:23.130 [INFO] [Thread-27955] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:53:23.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:53:23.914 [DEBUG] [Thread-27955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:53:23.914 [DEBUG] [Thread-27955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:53:23.915 [DEBUG] [Thread-27955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:53:23.955 [DEBUG] [Thread-27955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:53:23.955 [DEBUG] [Thread-27955] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:53:23.958 [DEBUG] [Thread-27955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:53:23.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:53:23.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:53:23.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:53:23.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:53:23.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:53:23.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:53:23.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:53:23.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:53:23.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:53:23.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.911587 -999.00   +9.50   8.73     80   +6.40 1 1 1 2 1     0    0 3.00 3.34 ZNESW 9.2 8.7 84.6 11.7 9.8 -24.7 9.6 -23.4 9.3 -21.3 9.6 -23.4
2026-04-15T23:53:23.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:53:23.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:53:23.981 [DEBUG] [Thread-27955] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:53:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.911587
2026-04-15T23:53:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:53:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:53:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:53:23.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:53:23.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:53:23.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:53:02', tmtdew=3.27108, humidity=80.143, cloud=0.0, wind=9.65232, temperature=8.89759, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:52:41.117', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.08024999999999949, -0.042749999999999844, -0.07450000000000045, -0.036000000000001364, 0.006750000000000256, -0.006000000000000227, -0.006249999999999645, -0.011499999999999844, -0.07600000000000051, -0.02775000000000105, -0.07299999999999862, 0.0019999999999988916, 0.014749999999999375, 0.0039999999999995595, -0.023000000000001464, -0.016750000000000043, -0.07150000000000034, 0.004999999999999005, -0.028250000000001663, -0.021000000000000796, 0.0017499999999994742, 0.0022500000000000853, -0.02674999999999983, 0.013999999999999346, -0.05250000000000021, -0.028750000000000497, -0.026999999999999247, 0.03599999999999959, 0.018499999999999517, 0.013000000000001677, 0.034000000000000696, -0.10625000000000107], zp_timestamp='2026-04-15T21:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:53:24.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:53:24.234 [DEBUG] [Thread-27958] [transport.py] [_log()] starting thread (client mode): 0xf13378e0
2026-04-15T23:53:24.234 [DEBUG] [Thread-27958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:53:24.248 [DEBUG] [Thread-27958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:53:24.248 [INFO] [Thread-27958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:53:24.255 [DEBUG] [Thread-27958] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:53:24.255 [DEBUG] [Thread-27958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:53:24.255 [DEBUG] [Thread-27958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:53:24.255 [DEBUG] [Thread-27958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:53:24.255 [DEBUG] [Thread-27958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:53:24.256 [DEBUG] [Thread-27958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:53:24.256 [DEBUG] [Thread-27958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:53:24.256 [DEBUG] [Thread-27958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:53:24.256 [DEBUG] [Thread-27958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:53:24.256 [DEBUG] [Thread-27958] [transport.py] [_log()] client lang: <none>
2026-04-15T23:53:24.256 [DEBUG] [Thread-27958] [transport.py] [_log()] server lang: <none>
2026-04-15T23:53:24.256 [DEBUG] [Thread-27958] [transport.py] [_log()] kex follows: False
2026-04-15T23:53:24.256 [DEBUG] [Thread-27958] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:53:24.256 [DEBUG] [Thread-27958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:53:24.256 [DEBUG] [Thread-27958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:53:24.256 [DEBUG] [Thread-27958] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:53:24.256 [DEBUG] [Thread-27958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:53:24.256 [DEBUG] [Thread-27958] [transport.py] [_log()] Compression: none
2026-04-15T23:53:24.256 [DEBUG] [Thread-27958] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:53:24.312 [DEBUG] [Thread-27958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:53:24.313 [DEBUG] [Thread-27958] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:53:24.313 [DEBUG] [Thread-27958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:53:24.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:53:24.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:53:24.369 [DEBUG] [Thread-27958] [transport.py] [_log()] userauth is OK
2026-04-15T23:53:24.369 [DEBUG] [Thread-27958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:53:24.369 [DEBUG] [Thread-27958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:53:24.369 [DEBUG] [Thread-27958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:53:24.369 [DEBUG] [Thread-27958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:53:24.388 [INFO] [Thread-27958] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:53:24.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:53:24.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:53:25.208 [DEBUG] [Thread-27958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:53:25.208 [DEBUG] [Thread-27958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:53:25.256 [DEBUG] [Thread-27958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:53:25.257 [DEBUG] [Thread-27958] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:53:25.266 [DEBUG] [Thread-27958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:53:25.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:53:25.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')
2026-04-15T23:53:25.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
2026-04-15T23:53:25.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:53:25.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:53:25.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:53:25.304 [DEBUG] [Thread-27958] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:53:30.754 [DEBUG] [Thread-27960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:53:40.306 [DEBUG] [Thread-27961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:53:45.799 [DEBUG] [Thread-27962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:53:55.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:53:55.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:53:55.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
2026-04-15T23:53:56.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 53, 37), 2.85525, 82.2197, 0.0, 12.4927, 8.76154, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:53:56.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:53:37
2026-04-15T23:53:56.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:53:57.401 [DEBUG] [Thread-27963] [transport.py] [_log()] starting thread (client mode): 0xf13c9db0
2026-04-15T23:53:57.402 [DEBUG] [Thread-27963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:53:57.421 [DEBUG] [Thread-27963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:53:57.421 [INFO] [Thread-27963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:53:57.424 [DEBUG] [Thread-27963] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:53:57.424 [DEBUG] [Thread-27963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:53:57.425 [DEBUG] [Thread-27963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:53:57.425 [DEBUG] [Thread-27963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:53:57.425 [DEBUG] [Thread-27963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:53:57.425 [DEBUG] [Thread-27963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:53:57.425 [DEBUG] [Thread-27963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:53:57.425 [DEBUG] [Thread-27963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:53:57.425 [DEBUG] [Thread-27963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:53:57.425 [DEBUG] [Thread-27963] [transport.py] [_log()] client lang: <none>
2026-04-15T23:53:57.425 [DEBUG] [Thread-27963] [transport.py] [_log()] server lang: <none>
2026-04-15T23:53:57.426 [DEBUG] [Thread-27963] [transport.py] [_log()] kex follows: False
2026-04-15T23:53:57.426 [DEBUG] [Thread-27963] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:53:57.426 [DEBUG] [Thread-27963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:53:57.426 [DEBUG] [Thread-27963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:53:57.426 [DEBUG] [Thread-27963] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:53:57.426 [DEBUG] [Thread-27963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:53:57.426 [DEBUG] [Thread-27963] [transport.py] [_log()] Compression: none
2026-04-15T23:53:57.426 [DEBUG] [Thread-27963] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:53:57.443 [DEBUG] [Thread-27963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:53:57.443 [DEBUG] [Thread-27963] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:53:57.444 [DEBUG] [Thread-27963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:53:57.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:53:57.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:53:57.445 [DEBUG] [Thread-27963] [transport.py] [_log()] userauth is OK
2026-04-15T23:53:57.445 [DEBUG] [Thread-27963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:53:57.445 [DEBUG] [Thread-27963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:53:57.445 [DEBUG] [Thread-27963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:53:57.445 [DEBUG] [Thread-27963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:53:57.462 [INFO] [Thread-27963] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:53:57.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:53:58.281 [DEBUG] [Thread-27963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:53:58.281 [DEBUG] [Thread-27963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:53:58.282 [DEBUG] [Thread-27963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:53:58.323 [DEBUG] [Thread-27963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:53:58.323 [DEBUG] [Thread-27963] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:53:58.326 [DEBUG] [Thread-27963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:53:58.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:53:58.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:53:58.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:53:58.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:53:58.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:53:58.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:53:58.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:53:58.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:53:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:53:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.911934 -999.00   +9.50   7.43     80   +6.40 1 1 1 2 1     0    0 3.08 6.34 ZNESW 6.9 7.4 96.0 9.8 9.8 -24.7 9.6 -23.5 9.3 -21.4 9.6 -23.4
2026-04-15T23:53:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:53:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:53:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.911934
2026-04-15T23:53:58.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:53:58.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:53:58.351 [DEBUG] [Thread-27963] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:53:58.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:53:58.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:53:58.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:53:58.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:53:37', tmtdew=2.85525, humidity=82.2197, cloud=0.0, wind=12.4927, temperature=8.76154, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:53:11.098', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.08024999999999949, -0.042749999999999844, -0.07450000000000045, -0.036000000000001364, 0.006750000000000256, -0.006000000000000227, -0.006249999999999645, -0.011499999999999844, -0.07600000000000051, -0.02775000000000105, -0.07299999999999862, 0.0019999999999988916, 0.014749999999999375, 0.0039999999999995595, -0.023000000000001464, -0.016750000000000043, -0.07150000000000034, 0.004999999999999005, -0.028250000000001663, -0.021000000000000796, 0.0017499999999994742, 0.0022500000000000853, -0.02674999999999983, 0.013999999999999346, -0.05250000000000021, -0.028750000000000497, -0.026999999999999247, 0.03599999999999959, 0.018499999999999517, 0.013000000000001677, 0.034000000000000696, -0.10625000000000107], zp_timestamp='2026-04-15T21:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:53:58.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:53:58.606 [DEBUG] [Thread-27966] [transport.py] [_log()] starting thread (client mode): 0xee9c7520
2026-04-15T23:53:58.607 [DEBUG] [Thread-27966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:53:58.625 [DEBUG] [Thread-27966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:53:58.625 [INFO] [Thread-27966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:53:58.633 [DEBUG] [Thread-27966] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:53:58.633 [DEBUG] [Thread-27966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:53:58.633 [DEBUG] [Thread-27966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:53:58.633 [DEBUG] [Thread-27966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:53:58.634 [DEBUG] [Thread-27966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:53:58.634 [DEBUG] [Thread-27966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:53:58.634 [DEBUG] [Thread-27966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:53:58.634 [DEBUG] [Thread-27966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:53:58.634 [DEBUG] [Thread-27966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:53:58.634 [DEBUG] [Thread-27966] [transport.py] [_log()] client lang: <none>
2026-04-15T23:53:58.634 [DEBUG] [Thread-27966] [transport.py] [_log()] server lang: <none>
2026-04-15T23:53:58.634 [DEBUG] [Thread-27966] [transport.py] [_log()] kex follows: False
2026-04-15T23:53:58.634 [DEBUG] [Thread-27966] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:53:58.634 [DEBUG] [Thread-27966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:53:58.634 [DEBUG] [Thread-27966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:53:58.635 [DEBUG] [Thread-27966] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:53:58.635 [DEBUG] [Thread-27966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:53:58.635 [DEBUG] [Thread-27966] [transport.py] [_log()] Compression: none
2026-04-15T23:53:58.635 [DEBUG] [Thread-27966] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:53:58.696 [DEBUG] [Thread-27966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:53:58.696 [DEBUG] [Thread-27966] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:53:58.697 [DEBUG] [Thread-27966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:53:58.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:53:58.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:53:58.754 [DEBUG] [Thread-27966] [transport.py] [_log()] userauth is OK
2026-04-15T23:53:58.754 [DEBUG] [Thread-27966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:53:58.754 [DEBUG] [Thread-27966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:53:58.755 [DEBUG] [Thread-27966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:53:58.755 [DEBUG] [Thread-27966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:53:58.779 [INFO] [Thread-27966] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:53:58.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:53:58.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:53:59.574 [DEBUG] [Thread-27966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:53:59.574 [DEBUG] [Thread-27966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:53:59.622 [DEBUG] [Thread-27966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:53:59.622 [DEBUG] [Thread-27966] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:53:59.632 [DEBUG] [Thread-27966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:53:59.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:53:59.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')
2026-04-15T23:53: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') -> 00000000
2026-04-15T23:53:59.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:53:59.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:53:59.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:53:59.667 [DEBUG] [Thread-27966] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:54:00.830 [DEBUG] [Thread-27968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:54:15.875 [DEBUG] [Thread-27969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:54:18.448 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:54:18.449 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:54:29.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:54:29.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:54:29.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
2026-04-15T23:54:30.906 [DEBUG] [Thread-27970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:54:30.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 54, 12), 3.28382, 80.0767, 0.0, 9.65232, 8.94736, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:54:30.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:54:12
2026-04-15T23:54:31.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:54:31.791 [DEBUG] [Thread-27971] [transport.py] [_log()] starting thread (client mode): 0xee9c7430
2026-04-15T23:54:31.791 [DEBUG] [Thread-27971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:54:31.811 [DEBUG] [Thread-27971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:54:31.811 [INFO] [Thread-27971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:54:31.814 [DEBUG] [Thread-27971] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:54:31.814 [DEBUG] [Thread-27971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:54:31.814 [DEBUG] [Thread-27971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:54:31.814 [DEBUG] [Thread-27971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:54:31.814 [DEBUG] [Thread-27971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:54:31.815 [DEBUG] [Thread-27971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:54:31.815 [DEBUG] [Thread-27971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:54:31.815 [DEBUG] [Thread-27971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:54:31.815 [DEBUG] [Thread-27971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:54:31.815 [DEBUG] [Thread-27971] [transport.py] [_log()] client lang: <none>
2026-04-15T23:54:31.815 [DEBUG] [Thread-27971] [transport.py] [_log()] server lang: <none>
2026-04-15T23:54:31.815 [DEBUG] [Thread-27971] [transport.py] [_log()] kex follows: False
2026-04-15T23:54:31.815 [DEBUG] [Thread-27971] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:54:31.815 [DEBUG] [Thread-27971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:54:31.815 [DEBUG] [Thread-27971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:54:31.815 [DEBUG] [Thread-27971] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:54:31.816 [DEBUG] [Thread-27971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:54:31.816 [DEBUG] [Thread-27971] [transport.py] [_log()] Compression: none
2026-04-15T23:54:31.816 [DEBUG] [Thread-27971] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:54:31.833 [DEBUG] [Thread-27971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:54:31.834 [DEBUG] [Thread-27971] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:54:31.834 [DEBUG] [Thread-27971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:54:31.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:54:31.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:54:31.835 [DEBUG] [Thread-27971] [transport.py] [_log()] userauth is OK
2026-04-15T23:54:31.835 [DEBUG] [Thread-27971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:54:31.835 [DEBUG] [Thread-27971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:54:31.835 [DEBUG] [Thread-27971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:54:31.835 [DEBUG] [Thread-27971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:54:31.854 [INFO] [Thread-27971] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:54:31.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:54:32.626 [DEBUG] [Thread-27971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:54:32.626 [DEBUG] [Thread-27971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:54:32.627 [DEBUG] [Thread-27971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:54:32.667 [DEBUG] [Thread-27971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:54:32.667 [DEBUG] [Thread-27971] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:54:32.670 [DEBUG] [Thread-27971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:54:32.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:54:32.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:54:32.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:54:32.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:54:32.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:54:32.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:54:32.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:54:32.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:54:32.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:54:32.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.912281 -999.00   +9.50   6.80     80   +6.40 1 1 1 2 1     0    0 3.17 9.85 ZNESW 7.0 6.8 117.6 12.5 9.8 -24.8 9.6 -23.6 9.3 -21.5 9.6 -23.5
2026-04-15T23:54:32.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:54:32.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:54:32.692 [DEBUG] [Thread-27971] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:54:32.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.912281
2026-04-15T23:54:32.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:54:32.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:54:32.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:54:32.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:54:32.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:54:32.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:54:12', tmtdew=3.28382, humidity=80.0767, cloud=0.0, wind=9.65232, temperature=8.94736, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:53:41.078', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.08024999999999949, -0.042749999999999844, -0.07450000000000045, -0.036000000000001364, 0.006750000000000256, -0.006000000000000227, -0.006249999999999645, -0.011499999999999844, -0.07600000000000051, -0.02775000000000105, -0.07299999999999862, 0.0019999999999988916, 0.014749999999999375, 0.0039999999999995595, -0.023000000000001464, -0.016750000000000043, -0.07150000000000034, 0.004999999999999005, -0.028250000000001663, -0.021000000000000796, 0.0017499999999994742, 0.0022500000000000853, -0.02674999999999983, 0.013999999999999346, -0.05250000000000021, -0.028750000000000497, -0.026999999999999247, 0.03599999999999959, 0.018499999999999517, 0.013000000000001677, 0.034000000000000696, -0.10625000000000107], zp_timestamp='2026-04-15T21:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:54:32.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:54:32.926 [DEBUG] [Thread-27974] [transport.py] [_log()] starting thread (client mode): 0xee9c0ca0
2026-04-15T23:54:32.926 [DEBUG] [Thread-27974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:54:32.944 [DEBUG] [Thread-27974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:54:32.944 [INFO] [Thread-27974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:54:32.951 [DEBUG] [Thread-27974] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:54:32.951 [DEBUG] [Thread-27974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:54:32.952 [DEBUG] [Thread-27974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:54:32.952 [DEBUG] [Thread-27974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:54:32.952 [DEBUG] [Thread-27974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:54:32.952 [DEBUG] [Thread-27974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:54:32.952 [DEBUG] [Thread-27974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:54:32.952 [DEBUG] [Thread-27974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:54:32.952 [DEBUG] [Thread-27974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:54:32.952 [DEBUG] [Thread-27974] [transport.py] [_log()] client lang: <none>
2026-04-15T23:54:32.952 [DEBUG] [Thread-27974] [transport.py] [_log()] server lang: <none>
2026-04-15T23:54:32.952 [DEBUG] [Thread-27974] [transport.py] [_log()] kex follows: False
2026-04-15T23:54:32.953 [DEBUG] [Thread-27974] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:54:32.953 [DEBUG] [Thread-27974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:54:32.953 [DEBUG] [Thread-27974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:54:32.953 [DEBUG] [Thread-27974] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:54:32.953 [DEBUG] [Thread-27974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:54:32.953 [DEBUG] [Thread-27974] [transport.py] [_log()] Compression: none
2026-04-15T23:54:32.953 [DEBUG] [Thread-27974] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:54:33.007 [DEBUG] [Thread-27974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:54:33.007 [DEBUG] [Thread-27974] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:54:33.008 [DEBUG] [Thread-27974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:54:33.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:54:33.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:54:33.064 [DEBUG] [Thread-27974] [transport.py] [_log()] userauth is OK
2026-04-15T23:54:33.065 [DEBUG] [Thread-27974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:54:33.065 [DEBUG] [Thread-27974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:54:33.065 [DEBUG] [Thread-27974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:54:33.065 [DEBUG] [Thread-27974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:54:33.094 [INFO] [Thread-27974] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:54:33.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:54:33.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:54:33.928 [DEBUG] [Thread-27974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:54:33.929 [DEBUG] [Thread-27974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:54:33.976 [DEBUG] [Thread-27974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:54:33.976 [DEBUG] [Thread-27974] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:54:33.985 [DEBUG] [Thread-27974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:54:33.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:54:33.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')
2026-04-15T23:54:34.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
2026-04-15T23:54:34.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:54:34.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:54:34.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:54:34.020 [DEBUG] [Thread-27974] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:54:40.452 [DEBUG] [Thread-27976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:54:45.938 [DEBUG] [Thread-27977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:55:00.982 [DEBUG] [Thread-27978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:55:04.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:55:04.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:55:04.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
2026-04-15T23:55:05.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 54, 48), 2.88591, 82.0538, 0.0, 12.5986, 8.8279, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:55:05.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:54:48
2026-04-15T23:55:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:55:06.165 [DEBUG] [Thread-27979] [transport.py] [_log()] starting thread (client mode): 0xee9923b0
2026-04-15T23:55:06.166 [DEBUG] [Thread-27979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:55:06.180 [DEBUG] [Thread-27979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:55:06.180 [INFO] [Thread-27979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:55:06.182 [DEBUG] [Thread-27979] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:55:06.182 [DEBUG] [Thread-27979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:55:06.182 [DEBUG] [Thread-27979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:55:06.183 [DEBUG] [Thread-27979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:55:06.183 [DEBUG] [Thread-27979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:55:06.183 [DEBUG] [Thread-27979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:55:06.183 [DEBUG] [Thread-27979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:55:06.183 [DEBUG] [Thread-27979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:55:06.183 [DEBUG] [Thread-27979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:55:06.183 [DEBUG] [Thread-27979] [transport.py] [_log()] client lang: <none>
2026-04-15T23:55:06.183 [DEBUG] [Thread-27979] [transport.py] [_log()] server lang: <none>
2026-04-15T23:55:06.183 [DEBUG] [Thread-27979] [transport.py] [_log()] kex follows: False
2026-04-15T23:55:06.183 [DEBUG] [Thread-27979] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:55:06.183 [DEBUG] [Thread-27979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:55:06.183 [DEBUG] [Thread-27979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:55:06.184 [DEBUG] [Thread-27979] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:55:06.184 [DEBUG] [Thread-27979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:55:06.184 [DEBUG] [Thread-27979] [transport.py] [_log()] Compression: none
2026-04-15T23:55:06.184 [DEBUG] [Thread-27979] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:55:06.194 [DEBUG] [Thread-27979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:55:06.195 [DEBUG] [Thread-27979] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:55:06.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:55:06.195 [DEBUG] [Thread-27979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:55:06.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:55:06.196 [DEBUG] [Thread-27979] [transport.py] [_log()] userauth is OK
2026-04-15T23:55:06.196 [DEBUG] [Thread-27979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:55:06.197 [DEBUG] [Thread-27979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:55:06.197 [DEBUG] [Thread-27979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:55:06.197 [DEBUG] [Thread-27979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:55:06.217 [INFO] [Thread-27979] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:55:06.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:55:09.480 [DEBUG] [Thread-27979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:55:09.480 [DEBUG] [Thread-27979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:55:09.481 [DEBUG] [Thread-27979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:55:09.521 [DEBUG] [Thread-27979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:55:09.521 [DEBUG] [Thread-27979] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:55:09.523 [DEBUG] [Thread-27979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:55:09.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:55:09.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:55:09.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:55:09.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:55:09.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:55:09.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:55:09.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:55:09.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:55:09.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:55:09.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.912975 -999.00   +9.50   6.66     80   +6.40 1 1 1 2 1     0    0 3.35 14.07 ZNESW 5.6 6.7 110.0 10.1 9.8 -24.6 9.6 -23.7 9.3 -21.4 9.6 -23.4
2026-04-15T23:55:09.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:55:09.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:55:09.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.912975
2026-04-15T23:55:09.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:55:09.591 [DEBUG] [Thread-27979] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:55:09.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:55:09.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:55:09.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:55:09.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:55:09.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:54:48', tmtdew=2.88591, humidity=82.0538, cloud=0.0, wind=12.5986, temperature=8.8279, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:54:41.040', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.08024999999999949, -0.042749999999999844, -0.07450000000000045, -0.036000000000001364, 0.006750000000000256, -0.006000000000000227, -0.006249999999999645, -0.011499999999999844, -0.07600000000000051, -0.02775000000000105, -0.07299999999999862, 0.0019999999999988916, 0.014749999999999375, 0.0039999999999995595, -0.023000000000001464, -0.016750000000000043, -0.07150000000000034, 0.004999999999999005, -0.028250000000001663, -0.021000000000000796, 0.0017499999999994742, 0.0022500000000000853, -0.02674999999999983, 0.013999999999999346, -0.05250000000000021, -0.028750000000000497, -0.026999999999999247, 0.03599999999999959, 0.018499999999999517, 0.013000000000001677, 0.034000000000000696, -0.10625000000000107], zp_timestamp='2026-04-15T21:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:55:09.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:55:09.847 [DEBUG] [Thread-27982] [transport.py] [_log()] starting thread (client mode): 0xf13c9030
2026-04-15T23:55:09.848 [DEBUG] [Thread-27982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:55:09.862 [DEBUG] [Thread-27982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:55:09.862 [INFO] [Thread-27982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:55:09.870 [DEBUG] [Thread-27982] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:55:09.870 [DEBUG] [Thread-27982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:55:09.870 [DEBUG] [Thread-27982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:55:09.870 [DEBUG] [Thread-27982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:55:09.870 [DEBUG] [Thread-27982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:55:09.871 [DEBUG] [Thread-27982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:55:09.871 [DEBUG] [Thread-27982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:55:09.871 [DEBUG] [Thread-27982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:55:09.871 [DEBUG] [Thread-27982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:55:09.871 [DEBUG] [Thread-27982] [transport.py] [_log()] client lang: <none>
2026-04-15T23:55:09.871 [DEBUG] [Thread-27982] [transport.py] [_log()] server lang: <none>
2026-04-15T23:55:09.871 [DEBUG] [Thread-27982] [transport.py] [_log()] kex follows: False
2026-04-15T23:55:09.871 [DEBUG] [Thread-27982] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:55:09.871 [DEBUG] [Thread-27982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:55:09.871 [DEBUG] [Thread-27982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:55:09.871 [DEBUG] [Thread-27982] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:55:09.872 [DEBUG] [Thread-27982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:55:09.872 [DEBUG] [Thread-27982] [transport.py] [_log()] Compression: none
2026-04-15T23:55:09.872 [DEBUG] [Thread-27982] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:55:09.933 [DEBUG] [Thread-27982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:55:09.933 [DEBUG] [Thread-27982] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:55:09.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:55:09.934 [DEBUG] [Thread-27982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:55:09.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:55:09.994 [DEBUG] [Thread-27982] [transport.py] [_log()] userauth is OK
2026-04-15T23:55:09.994 [DEBUG] [Thread-27982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:55:09.995 [DEBUG] [Thread-27982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:55:09.995 [DEBUG] [Thread-27982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:55:09.995 [DEBUG] [Thread-27982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:55:10.020 [INFO] [Thread-27982] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:55:10.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:55:10.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:55:10.831 [DEBUG] [Thread-27982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:55:10.831 [DEBUG] [Thread-27982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:55:10.879 [DEBUG] [Thread-27982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:55:10.879 [DEBUG] [Thread-27982] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:55:10.888 [DEBUG] [Thread-27982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:55:10.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:55:10.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')
2026-04-15T23:55:10.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-15T23:55:10.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:55:10.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:55:10.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:55:10.925 [DEBUG] [Thread-27982] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:55:16.013 [DEBUG] [Thread-27984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:55:18.651 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:55:18.652 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:55:31.056 [DEBUG] [Thread-27985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:55:40.607 [DEBUG] [Thread-27986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:55:40.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:55:40.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:55:40.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
2026-04-15T23:55:42.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 55, 24), 3.29807, 79.9937, 0.0, 11.8404, 8.93077, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:55:42.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:55:24
2026-04-15T23:55:42.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:55:43.260 [DEBUG] [Thread-27987] [transport.py] [_log()] starting thread (client mode): 0xf13e2800
2026-04-15T23:55:43.260 [DEBUG] [Thread-27987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:55:43.279 [DEBUG] [Thread-27987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:55:43.279 [INFO] [Thread-27987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:55:43.282 [DEBUG] [Thread-27987] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:55:43.282 [DEBUG] [Thread-27987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:55:43.283 [DEBUG] [Thread-27987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:55:43.283 [DEBUG] [Thread-27987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:55:43.283 [DEBUG] [Thread-27987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:55:43.283 [DEBUG] [Thread-27987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:55:43.283 [DEBUG] [Thread-27987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:55:43.283 [DEBUG] [Thread-27987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:55:43.283 [DEBUG] [Thread-27987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:55:43.283 [DEBUG] [Thread-27987] [transport.py] [_log()] client lang: <none>
2026-04-15T23:55:43.283 [DEBUG] [Thread-27987] [transport.py] [_log()] server lang: <none>
2026-04-15T23:55:43.283 [DEBUG] [Thread-27987] [transport.py] [_log()] kex follows: False
2026-04-15T23:55:43.283 [DEBUG] [Thread-27987] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:55:43.283 [DEBUG] [Thread-27987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:55:43.283 [DEBUG] [Thread-27987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:55:43.284 [DEBUG] [Thread-27987] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:55:43.284 [DEBUG] [Thread-27987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:55:43.284 [DEBUG] [Thread-27987] [transport.py] [_log()] Compression: none
2026-04-15T23:55:43.284 [DEBUG] [Thread-27987] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:55:43.304 [DEBUG] [Thread-27987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:55:43.305 [DEBUG] [Thread-27987] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:55:43.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:55:43.306 [DEBUG] [Thread-27987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:55:43.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:55:43.307 [DEBUG] [Thread-27987] [transport.py] [_log()] userauth is OK
2026-04-15T23:55:43.307 [DEBUG] [Thread-27987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:55:43.307 [DEBUG] [Thread-27987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:55:43.307 [DEBUG] [Thread-27987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:55:43.307 [DEBUG] [Thread-27987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:55:43.325 [INFO] [Thread-27987] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:55:43.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:55:44.067 [DEBUG] [Thread-27987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:55:44.067 [DEBUG] [Thread-27987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:55:44.068 [DEBUG] [Thread-27987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:55:44.108 [DEBUG] [Thread-27987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:55:44.108 [DEBUG] [Thread-27987] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:55:44.111 [DEBUG] [Thread-27987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:55:44.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:55:44.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:55:44.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:55:44.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:55:44.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:55:44.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:55:44.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:55:44.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:55:44.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:55:44.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.913323 -999.00   +9.50   8.09     81   +6.40 1 1 1 2 1     0    0 3.34 15.80 ZNESW 7.2 8.1 109.2 9.7 9.8 -24.6 9.6 -23.6 9.3 -21.4 9.6 -23.6
2026-04-15T23:55:44.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:55:44.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:55:44.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.913323
2026-04-15T23:55:44.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:55:44.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:55:44.136 [DEBUG] [Thread-27987] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:55:44.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:55:44.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:55:44.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:55:44.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:55:24', tmtdew=3.29807, humidity=79.9937, cloud=0.0, wind=11.8404, temperature=8.93077, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:55:11.107', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.08024999999999949, -0.042749999999999844, -0.07450000000000045, -0.036000000000001364, 0.006750000000000256, -0.006000000000000227, -0.006249999999999645, -0.011499999999999844, -0.07600000000000051, -0.02775000000000105, -0.07299999999999862, 0.0019999999999988916, 0.014749999999999375, 0.0039999999999995595, -0.023000000000001464, -0.016750000000000043, -0.07150000000000034, 0.004999999999999005, -0.028250000000001663, -0.021000000000000796, 0.0017499999999994742, 0.0022500000000000853, -0.02674999999999983, 0.013999999999999346, -0.05250000000000021, -0.028750000000000497, -0.026999999999999247, 0.03599999999999959, 0.018499999999999517, 0.013000000000001677, 0.034000000000000696, -0.10625000000000107], zp_timestamp='2026-04-15T21:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:55:44.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:55:44.392 [DEBUG] [Thread-27990] [transport.py] [_log()] starting thread (client mode): 0xee991480
2026-04-15T23:55:44.392 [DEBUG] [Thread-27990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:55:44.411 [DEBUG] [Thread-27990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:55:44.411 [INFO] [Thread-27990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:55:44.423 [DEBUG] [Thread-27990] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:55:44.423 [DEBUG] [Thread-27990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:55:44.423 [DEBUG] [Thread-27990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:55:44.423 [DEBUG] [Thread-27990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:55:44.423 [DEBUG] [Thread-27990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:55:44.424 [DEBUG] [Thread-27990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:55:44.424 [DEBUG] [Thread-27990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:55:44.424 [DEBUG] [Thread-27990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:55:44.424 [DEBUG] [Thread-27990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:55:44.424 [DEBUG] [Thread-27990] [transport.py] [_log()] client lang: <none>
2026-04-15T23:55:44.424 [DEBUG] [Thread-27990] [transport.py] [_log()] server lang: <none>
2026-04-15T23:55:44.424 [DEBUG] [Thread-27990] [transport.py] [_log()] kex follows: False
2026-04-15T23:55:44.424 [DEBUG] [Thread-27990] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:55:44.424 [DEBUG] [Thread-27990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:55:44.424 [DEBUG] [Thread-27990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:55:44.424 [DEBUG] [Thread-27990] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:55:44.424 [DEBUG] [Thread-27990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:55:44.425 [DEBUG] [Thread-27990] [transport.py] [_log()] Compression: none
2026-04-15T23:55:44.425 [DEBUG] [Thread-27990] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:55:44.483 [DEBUG] [Thread-27990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:55:44.483 [DEBUG] [Thread-27990] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:55:44.484 [DEBUG] [Thread-27990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:55:44.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:55:44.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:55:44.540 [DEBUG] [Thread-27990] [transport.py] [_log()] userauth is OK
2026-04-15T23:55:44.540 [DEBUG] [Thread-27990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:55:44.540 [DEBUG] [Thread-27990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:55:44.540 [DEBUG] [Thread-27990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:55:44.541 [DEBUG] [Thread-27990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:55:44.569 [INFO] [Thread-27990] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:55:44.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:55:44.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:55:45.376 [DEBUG] [Thread-27990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:55:45.377 [DEBUG] [Thread-27990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:55:45.424 [DEBUG] [Thread-27990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:55:45.424 [DEBUG] [Thread-27990] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:55:45.433 [DEBUG] [Thread-27990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:55:45.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:55:45.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')
2026-04-15T23:55:45.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') -> 00000000
2026-04-15T23:55:45.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:55:45.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:55:45.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:55:45.469 [DEBUG] [Thread-27990] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:55:46.086 [DEBUG] [Thread-27992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:56:01.130 [DEBUG] [Thread-27993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:56:15.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:56:15.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:56:15.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
2026-04-15T23:56:16.164 [DEBUG] [Thread-27994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:56:16.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 55, 59), 3.30722, 79.9439, 0.0, 10.3932, 8.94736, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:56:16.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:55:59
2026-04-15T23:56:17.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:56:17.576 [DEBUG] [Thread-27995] [transport.py] [_log()] starting thread (client mode): 0xf1353400
2026-04-15T23:56:17.576 [DEBUG] [Thread-27995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:56:17.596 [DEBUG] [Thread-27995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:56:17.597 [INFO] [Thread-27995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:56:17.600 [DEBUG] [Thread-27995] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:56:17.600 [DEBUG] [Thread-27995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:56:17.600 [DEBUG] [Thread-27995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:56:17.600 [DEBUG] [Thread-27995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:56:17.600 [DEBUG] [Thread-27995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:56:17.600 [DEBUG] [Thread-27995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:56:17.600 [DEBUG] [Thread-27995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:56:17.600 [DEBUG] [Thread-27995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:56:17.600 [DEBUG] [Thread-27995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:56:17.600 [DEBUG] [Thread-27995] [transport.py] [_log()] client lang: <none>
2026-04-15T23:56:17.600 [DEBUG] [Thread-27995] [transport.py] [_log()] server lang: <none>
2026-04-15T23:56:17.601 [DEBUG] [Thread-27995] [transport.py] [_log()] kex follows: False
2026-04-15T23:56:17.601 [DEBUG] [Thread-27995] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:56:17.601 [DEBUG] [Thread-27995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:56:17.601 [DEBUG] [Thread-27995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:56:17.601 [DEBUG] [Thread-27995] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:56:17.601 [DEBUG] [Thread-27995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:56:17.601 [DEBUG] [Thread-27995] [transport.py] [_log()] Compression: none
2026-04-15T23:56:17.601 [DEBUG] [Thread-27995] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:56:17.618 [DEBUG] [Thread-27995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:56:17.618 [DEBUG] [Thread-27995] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:56:17.619 [DEBUG] [Thread-27995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:56:17.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:56:17.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:56:17.620 [DEBUG] [Thread-27995] [transport.py] [_log()] userauth is OK
2026-04-15T23:56:17.620 [DEBUG] [Thread-27995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:56:17.620 [DEBUG] [Thread-27995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:56:17.620 [DEBUG] [Thread-27995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:56:17.620 [DEBUG] [Thread-27995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:56:17.644 [INFO] [Thread-27995] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:56:17.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:56:18.456 [DEBUG] [Thread-27995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:56:18.457 [DEBUG] [Thread-27995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:56:18.457 [DEBUG] [Thread-27995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:56:18.498 [DEBUG] [Thread-27995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:56:18.498 [DEBUG] [Thread-27995] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:56:18.500 [DEBUG] [Thread-27995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:56:18.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:56:18.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:56:18.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:56:18.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:56:18.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:56:18.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:56:18.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:56:18.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:56:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:56:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.913670 -999.00   +9.50   6.47     81   +6.40 1 1 1 2 1     0    0 3.36 17.67 ZNESW 7.9 6.5 124.4 8.5 9.7 -24.5 9.6 -23.4 9.3 -21.3 9.6 -23.3
2026-04-15T23:56:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:56:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:56:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.913670
2026-04-15T23:56:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:56:18.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:56:18.598 [DEBUG] [Thread-27995] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:56:18.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:56:18.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:56:18.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:56:18.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:55:59', tmtdew=3.30722, humidity=79.9439, cloud=0.0, wind=10.3932, temperature=8.94736, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:55:41.088', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.08024999999999949, -0.042749999999999844, -0.07450000000000045, -0.036000000000001364, 0.006750000000000256, -0.006000000000000227, -0.006249999999999645, -0.011499999999999844, -0.07600000000000051, -0.02775000000000105, -0.07299999999999862, 0.0019999999999988916, 0.014749999999999375, 0.0039999999999995595, -0.023000000000001464, -0.016750000000000043, -0.07150000000000034, 0.004999999999999005, -0.028250000000001663, -0.021000000000000796, 0.0017499999999994742, 0.0022500000000000853, -0.02674999999999983, 0.013999999999999346, -0.05250000000000021, -0.028750000000000497, -0.026999999999999247, 0.03599999999999959, 0.018499999999999517, 0.013000000000001677, 0.034000000000000696, -0.10625000000000107], zp_timestamp='2026-04-15T21:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:56:18.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:56:18.840 [DEBUG] [Thread-27998] [transport.py] [_log()] starting thread (client mode): 0xf1350a90
2026-04-15T23:56:18.841 [DEBUG] [Thread-27998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:56:18.854 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:56:18.854 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:56:18.855 [DEBUG] [Thread-27998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:56:18.855 [INFO] [Thread-27998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:56:18.863 [DEBUG] [Thread-27998] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:56:18.863 [DEBUG] [Thread-27998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:56:18.863 [DEBUG] [Thread-27998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:56:18.863 [DEBUG] [Thread-27998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:56:18.863 [DEBUG] [Thread-27998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:56:18.863 [DEBUG] [Thread-27998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:56:18.863 [DEBUG] [Thread-27998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:56:18.864 [DEBUG] [Thread-27998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:56:18.864 [DEBUG] [Thread-27998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:56:18.864 [DEBUG] [Thread-27998] [transport.py] [_log()] client lang: <none>
2026-04-15T23:56:18.864 [DEBUG] [Thread-27998] [transport.py] [_log()] server lang: <none>
2026-04-15T23:56:18.864 [DEBUG] [Thread-27998] [transport.py] [_log()] kex follows: False
2026-04-15T23:56:18.864 [DEBUG] [Thread-27998] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:56:18.864 [DEBUG] [Thread-27998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:56:18.864 [DEBUG] [Thread-27998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:56:18.864 [DEBUG] [Thread-27998] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:56:18.864 [DEBUG] [Thread-27998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:56:18.864 [DEBUG] [Thread-27998] [transport.py] [_log()] Compression: none
2026-04-15T23:56:18.865 [DEBUG] [Thread-27998] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:56:18.922 [DEBUG] [Thread-27998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:56:18.922 [DEBUG] [Thread-27998] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:56:18.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:56:18.923 [DEBUG] [Thread-27998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:56:18.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:56:18.978 [DEBUG] [Thread-27998] [transport.py] [_log()] userauth is OK
2026-04-15T23:56:18.979 [DEBUG] [Thread-27998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:56:18.979 [DEBUG] [Thread-27998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:56:18.979 [DEBUG] [Thread-27998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:56:18.979 [DEBUG] [Thread-27998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:56:19.008 [INFO] [Thread-27998] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:56:19.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:56:19.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:56:19.850 [DEBUG] [Thread-27998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:56:19.851 [DEBUG] [Thread-27998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:56:19.898 [DEBUG] [Thread-27998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:56:19.898 [DEBUG] [Thread-27998] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:56:19.907 [DEBUG] [Thread-27998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:56:19.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:56:19.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')
2026-04-15T23:56:19.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') -> 00000000
2026-04-15T23:56:19.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:56:19.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:56:19.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:56:19.942 [DEBUG] [Thread-27998] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:56:31.196 [DEBUG] [Thread-28000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:56:40.751 [DEBUG] [Thread-28001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:56:46.237 [DEBUG] [Thread-28002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:56:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:56:49.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:56:49.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:56:51.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 56, 35), 2.9269, 81.8215, 0.0, 13.7275, 8.8279, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:56:51.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:56:35
2026-04-15T23:56:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:56:52.089 [DEBUG] [Thread-28003] [transport.py] [_log()] starting thread (client mode): 0xee993370
2026-04-15T23:56:52.089 [DEBUG] [Thread-28003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:56:52.108 [DEBUG] [Thread-28003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:56:52.108 [INFO] [Thread-28003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:56:52.111 [DEBUG] [Thread-28003] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:56:52.111 [DEBUG] [Thread-28003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:56:52.111 [DEBUG] [Thread-28003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:56:52.111 [DEBUG] [Thread-28003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:56:52.111 [DEBUG] [Thread-28003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:56:52.111 [DEBUG] [Thread-28003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:56:52.112 [DEBUG] [Thread-28003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:56:52.112 [DEBUG] [Thread-28003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:56:52.112 [DEBUG] [Thread-28003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:56:52.112 [DEBUG] [Thread-28003] [transport.py] [_log()] client lang: <none>
2026-04-15T23:56:52.112 [DEBUG] [Thread-28003] [transport.py] [_log()] server lang: <none>
2026-04-15T23:56:52.112 [DEBUG] [Thread-28003] [transport.py] [_log()] kex follows: False
2026-04-15T23:56:52.112 [DEBUG] [Thread-28003] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:56:52.112 [DEBUG] [Thread-28003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:56:52.112 [DEBUG] [Thread-28003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:56:52.112 [DEBUG] [Thread-28003] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:56:52.112 [DEBUG] [Thread-28003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:56:52.113 [DEBUG] [Thread-28003] [transport.py] [_log()] Compression: none
2026-04-15T23:56:52.113 [DEBUG] [Thread-28003] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:56:52.130 [DEBUG] [Thread-28003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:56:52.130 [DEBUG] [Thread-28003] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:56:52.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:56:52.131 [DEBUG] [Thread-28003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:56:52.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:56:52.132 [DEBUG] [Thread-28003] [transport.py] [_log()] userauth is OK
2026-04-15T23:56:52.132 [DEBUG] [Thread-28003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:56:52.133 [DEBUG] [Thread-28003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:56:52.133 [DEBUG] [Thread-28003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:56:52.133 [DEBUG] [Thread-28003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:56:52.158 [INFO] [Thread-28003] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:56:52.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:56:52.927 [DEBUG] [Thread-28003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:56:52.927 [DEBUG] [Thread-28003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:56:52.928 [DEBUG] [Thread-28003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:56:52.968 [DEBUG] [Thread-28003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:56:52.968 [DEBUG] [Thread-28003] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:56:52.971 [DEBUG] [Thread-28003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:56:52.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:56:52.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:56:52.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:56:52.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:56:52.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:56:52.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:56:52.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:56:52.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:56:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:56:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.914017 -999.00   +9.50   8.25     81   +6.40 1 1 1 2 1     0    0 3.40 19.30 ZNESW 6.7 8.2 126.2 10.8 9.8 -24.3 9.6 -23.4 9.3 -21.2 9.6 -23.4
2026-04-15T23:56:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:56:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:56:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.914017
2026-04-15T23:56:52.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:56:52.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:56:52.998 [DEBUG] [Thread-28003] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:56:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:56:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:56:52.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:56:52.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:56:35', tmtdew=2.9269, humidity=81.8215, cloud=0.0, wind=13.7275, temperature=8.8279, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:56:11.069', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.08024999999999949, -0.042749999999999844, -0.07450000000000045, -0.036000000000001364, 0.006750000000000256, -0.006000000000000227, -0.006249999999999645, -0.011499999999999844, -0.07600000000000051, -0.02775000000000105, -0.07299999999999862, 0.0019999999999988916, 0.014749999999999375, 0.0039999999999995595, -0.023000000000001464, -0.016750000000000043, -0.07150000000000034, 0.004999999999999005, -0.028250000000001663, -0.021000000000000796, 0.0017499999999994742, 0.0022500000000000853, -0.02674999999999983, 0.013999999999999346, -0.05250000000000021, -0.028750000000000497, -0.026999999999999247, 0.03599999999999959, 0.018499999999999517, 0.013000000000001677, 0.034000000000000696, -0.10625000000000107], zp_timestamp='2026-04-15T21:52:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:56:53.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:56:53.256 [DEBUG] [Thread-28006] [transport.py] [_log()] starting thread (client mode): 0xf1351300
2026-04-15T23:56:53.256 [DEBUG] [Thread-28006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:56:53.271 [DEBUG] [Thread-28006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:56:53.271 [INFO] [Thread-28006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:56:53.279 [DEBUG] [Thread-28006] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:56:53.279 [DEBUG] [Thread-28006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:56:53.279 [DEBUG] [Thread-28006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:56:53.279 [DEBUG] [Thread-28006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:56:53.279 [DEBUG] [Thread-28006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:56:53.279 [DEBUG] [Thread-28006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:56:53.279 [DEBUG] [Thread-28006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:56:53.279 [DEBUG] [Thread-28006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:56:53.279 [DEBUG] [Thread-28006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:56:53.279 [DEBUG] [Thread-28006] [transport.py] [_log()] client lang: <none>
2026-04-15T23:56:53.280 [DEBUG] [Thread-28006] [transport.py] [_log()] server lang: <none>
2026-04-15T23:56:53.280 [DEBUG] [Thread-28006] [transport.py] [_log()] kex follows: False
2026-04-15T23:56:53.280 [DEBUG] [Thread-28006] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:56:53.280 [DEBUG] [Thread-28006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:56:53.280 [DEBUG] [Thread-28006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:56:53.280 [DEBUG] [Thread-28006] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:56:53.280 [DEBUG] [Thread-28006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:56:53.280 [DEBUG] [Thread-28006] [transport.py] [_log()] Compression: none
2026-04-15T23:56:53.280 [DEBUG] [Thread-28006] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:56:53.337 [DEBUG] [Thread-28006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:56:53.337 [DEBUG] [Thread-28006] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:56:53.337 [DEBUG] [Thread-28006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:56:53.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:56:53.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:56:53.394 [DEBUG] [Thread-28006] [transport.py] [_log()] userauth is OK
2026-04-15T23:56:53.394 [DEBUG] [Thread-28006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:56:53.394 [DEBUG] [Thread-28006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:56:53.394 [DEBUG] [Thread-28006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:56:53.395 [DEBUG] [Thread-28006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:56:53.420 [INFO] [Thread-28006] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:56:53.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:56:53.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:56:54.221 [DEBUG] [Thread-28006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:56:54.221 [DEBUG] [Thread-28006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:56:54.269 [DEBUG] [Thread-28006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:56:54.269 [DEBUG] [Thread-28006] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:56:54.277 [DEBUG] [Thread-28006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:56:54.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:56:54.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')
2026-04-15T23:56:54.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
2026-04-15T23:56:54.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:56:54.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:56:54.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:56:54.312 [DEBUG] [Thread-28006] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:57:01.265 [DEBUG] [Thread-28008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:57:16.307 [DEBUG] [Thread-28009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:57:19.055 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:57:19.056 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:57:24.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:57:24.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:57:24.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
2026-04-15T23:57:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 57, 10), 3.31308, 79.4108, 0.0, 10.3579, 8.94736, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:57:25.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:57:10
2026-04-15T23:57:26.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:57:26.484 [DEBUG] [Thread-28010] [transport.py] [_log()] starting thread (client mode): 0xee991ff0
2026-04-15T23:57:26.485 [DEBUG] [Thread-28010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:57:26.505 [DEBUG] [Thread-28010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:57:26.505 [INFO] [Thread-28010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:57:26.509 [DEBUG] [Thread-28010] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:57:26.509 [DEBUG] [Thread-28010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:57:26.509 [DEBUG] [Thread-28010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:57:26.509 [DEBUG] [Thread-28010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:57:26.509 [DEBUG] [Thread-28010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:57:26.509 [DEBUG] [Thread-28010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:57:26.509 [DEBUG] [Thread-28010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:57:26.509 [DEBUG] [Thread-28010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:57:26.509 [DEBUG] [Thread-28010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:57:26.509 [DEBUG] [Thread-28010] [transport.py] [_log()] client lang: <none>
2026-04-15T23:57:26.509 [DEBUG] [Thread-28010] [transport.py] [_log()] server lang: <none>
2026-04-15T23:57:26.510 [DEBUG] [Thread-28010] [transport.py] [_log()] kex follows: False
2026-04-15T23:57:26.510 [DEBUG] [Thread-28010] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:57:26.510 [DEBUG] [Thread-28010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:57:26.510 [DEBUG] [Thread-28010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:57:26.510 [DEBUG] [Thread-28010] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:57:26.510 [DEBUG] [Thread-28010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:57:26.510 [DEBUG] [Thread-28010] [transport.py] [_log()] Compression: none
2026-04-15T23:57:26.510 [DEBUG] [Thread-28010] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:57:26.527 [DEBUG] [Thread-28010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:57:26.527 [DEBUG] [Thread-28010] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:57:26.527 [DEBUG] [Thread-28010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:57:26.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:57:26.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:57:26.529 [DEBUG] [Thread-28010] [transport.py] [_log()] userauth is OK
2026-04-15T23:57:26.529 [DEBUG] [Thread-28010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:57:26.529 [DEBUG] [Thread-28010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:57:26.529 [DEBUG] [Thread-28010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:57:26.529 [DEBUG] [Thread-28010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:57:26.552 [INFO] [Thread-28010] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:57:26.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:57:27.335 [DEBUG] [Thread-28010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:57:27.335 [DEBUG] [Thread-28010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:57:27.336 [DEBUG] [Thread-28010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:57:27.376 [DEBUG] [Thread-28010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:57:27.376 [DEBUG] [Thread-28010] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:57:27.378 [DEBUG] [Thread-28010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:57:27.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:57:27.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:57:27.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:57:27.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:57:27.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:57:27.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:57:27.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:57:27.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:57:27.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:57:27.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.914364 -999.00   +9.50   7.48     80   +6.40 1 1 1 2 1     0    0 3.44 20.23 ZNESW 6.0 7.5 97.2 10.1 9.8 -24.6 9.6 -23.4 9.3 -21.2 9.6 -23.4
2026-04-15T23:57:27.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:57:27.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:57:27.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.914364
2026-04-15T23:57:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:57:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:57:27.397 [DEBUG] [Thread-28010] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:57:27.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:57:27.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:57:27.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:57:27.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:57:10', tmtdew=3.31308, humidity=79.4108, cloud=0.0, wind=10.3579, temperature=8.94736, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:56:41.050', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, -0.08375000000000021, -0.027749999999999275, -0.0754999999999999, -0.046499999999999986, -0.028249999999999886, -0.017000000000001236, -0.006249999999999645, 0.013499999999998735, -0.09200000000000053, -0.021750000000000824, -0.10699999999999932, -0.03249999999999886, -0.0017500000000012506, 0.0015000000000000568, -0.034000000000000696, -0.02275000000000027, -0.059499999999999886, -0.0010000000000012221, -0.02275000000000027, -0.010000000000001563, 0.011749999999999261, -0.0022500000000000853, -0.0072499999999990905, 0.008999999999998565, -0.09699999999999953, -0.004249999999998977, -0.04049999999999976, -0.016500000000000625, -0.00549999999999784, 0.018000000000000682, 0.11500000000000199, -0.04225000000000101], zp_timestamp='2026-04-15T21:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:57:27.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:57:27.656 [DEBUG] [Thread-28013] [transport.py] [_log()] starting thread (client mode): 0xee990e80
2026-04-15T23:57:27.656 [DEBUG] [Thread-28013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:57:27.670 [DEBUG] [Thread-28013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:57:27.670 [INFO] [Thread-28013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:57:27.683 [DEBUG] [Thread-28013] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:57:27.683 [DEBUG] [Thread-28013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:57:27.684 [DEBUG] [Thread-28013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:57:27.684 [DEBUG] [Thread-28013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:57:27.684 [DEBUG] [Thread-28013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:57:27.684 [DEBUG] [Thread-28013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:57:27.684 [DEBUG] [Thread-28013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:57:27.684 [DEBUG] [Thread-28013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:57:27.684 [DEBUG] [Thread-28013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:57:27.684 [DEBUG] [Thread-28013] [transport.py] [_log()] client lang: <none>
2026-04-15T23:57:27.684 [DEBUG] [Thread-28013] [transport.py] [_log()] server lang: <none>
2026-04-15T23:57:27.684 [DEBUG] [Thread-28013] [transport.py] [_log()] kex follows: False
2026-04-15T23:57:27.684 [DEBUG] [Thread-28013] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:57:27.684 [DEBUG] [Thread-28013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:57:27.685 [DEBUG] [Thread-28013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:57:27.685 [DEBUG] [Thread-28013] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:57:27.685 [DEBUG] [Thread-28013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:57:27.685 [DEBUG] [Thread-28013] [transport.py] [_log()] Compression: none
2026-04-15T23:57:27.685 [DEBUG] [Thread-28013] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:57:27.741 [DEBUG] [Thread-28013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:57:27.741 [DEBUG] [Thread-28013] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:57:27.742 [DEBUG] [Thread-28013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:57:27.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:57:27.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:57:27.797 [DEBUG] [Thread-28013] [transport.py] [_log()] userauth is OK
2026-04-15T23:57:27.798 [DEBUG] [Thread-28013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:57:27.798 [DEBUG] [Thread-28013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:57:27.798 [DEBUG] [Thread-28013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:57:27.798 [DEBUG] [Thread-28013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:57:27.821 [INFO] [Thread-28013] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:57:27.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:57:27.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:57:28.643 [DEBUG] [Thread-28013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:57:28.643 [DEBUG] [Thread-28013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:57:28.691 [DEBUG] [Thread-28013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:57:28.691 [DEBUG] [Thread-28013] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:57:28.699 [DEBUG] [Thread-28013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:57:28.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:57:28.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')
2026-04-15T23:57:28.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
2026-04-15T23:57:28.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:57:28.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:57:28.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:57:28.734 [DEBUG] [Thread-28013] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:57:31.336 [DEBUG] [Thread-28015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:57:40.918 [DEBUG] [Thread-28016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:57:46.383 [DEBUG] [Thread-28017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:57:58.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:57:58.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:57:58.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
2026-04-15T23:58:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 57, 46), 2.92616, 81.8215, 0.0, 13.0925, 8.79472, 0, 1, 0, 2, 0, 0),)
2026-04-15T23:58:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:57:46
2026-04-15T23:58:00.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:58:00.940 [DEBUG] [Thread-28018] [transport.py] [_log()] starting thread (client mode): 0xf1335540
2026-04-15T23:58:00.940 [DEBUG] [Thread-28018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:58:00.960 [DEBUG] [Thread-28018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:58:00.960 [INFO] [Thread-28018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:58:00.963 [DEBUG] [Thread-28018] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:58:00.963 [DEBUG] [Thread-28018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:58:00.963 [DEBUG] [Thread-28018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:58:00.963 [DEBUG] [Thread-28018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:58:00.964 [DEBUG] [Thread-28018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:58:00.964 [DEBUG] [Thread-28018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:58:00.964 [DEBUG] [Thread-28018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:58:00.964 [DEBUG] [Thread-28018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:58:00.964 [DEBUG] [Thread-28018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:58:00.964 [DEBUG] [Thread-28018] [transport.py] [_log()] client lang: <none>
2026-04-15T23:58:00.964 [DEBUG] [Thread-28018] [transport.py] [_log()] server lang: <none>
2026-04-15T23:58:00.964 [DEBUG] [Thread-28018] [transport.py] [_log()] kex follows: False
2026-04-15T23:58:00.964 [DEBUG] [Thread-28018] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:58:00.964 [DEBUG] [Thread-28018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:58:00.964 [DEBUG] [Thread-28018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:58:00.964 [DEBUG] [Thread-28018] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:58:00.964 [DEBUG] [Thread-28018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:58:00.964 [DEBUG] [Thread-28018] [transport.py] [_log()] Compression: none
2026-04-15T23:58:00.964 [DEBUG] [Thread-28018] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:58:00.980 [DEBUG] [Thread-28018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:58:00.981 [DEBUG] [Thread-28018] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:58:00.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:58:00.981 [DEBUG] [Thread-28018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:58:00.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:58:00.982 [DEBUG] [Thread-28018] [transport.py] [_log()] userauth is OK
2026-04-15T23:58:00.982 [DEBUG] [Thread-28018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:58:00.982 [DEBUG] [Thread-28018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:58:00.982 [DEBUG] [Thread-28018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:58:00.982 [DEBUG] [Thread-28018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:58:00.995 [INFO] [Thread-28018] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:58:00.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:58:01.412 [DEBUG] [Thread-28020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:58:01.727 [DEBUG] [Thread-28018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:58:01.727 [DEBUG] [Thread-28018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:58:01.728 [DEBUG] [Thread-28018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:58:01.768 [DEBUG] [Thread-28018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:58:01.768 [DEBUG] [Thread-28018] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:58:01.771 [DEBUG] [Thread-28018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:58:01.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:58:01.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:58:01.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:58:01.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:58:01.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:58:01.793 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:58:01.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:58:01.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:58:01.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:58:01.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.914711 -999.00   +9.50   8.74     80   +6.40 1 1 1 2 1     0    0 3.53 21.97 ZNESW 7.5 8.7 118.1 12.9 9.8 -24.6 9.7 -23.5 9.3 -21.4 9.7 -23.2
2026-04-15T23:58:01.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:58:01.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:58:01.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.914711
2026-04-15T23:58:01.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:58:01.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:58:01.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:58:01.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:58:01.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:58:01.797 [DEBUG] [Thread-28018] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:58:01.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:57:46', tmtdew=2.92616, humidity=81.8215, cloud=0.0, wind=13.0925, temperature=8.79472, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:57:11.030', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, -0.08375000000000021, -0.027749999999999275, -0.0754999999999999, -0.046499999999999986, -0.028249999999999886, -0.017000000000001236, -0.006249999999999645, 0.013499999999998735, -0.09200000000000053, -0.021750000000000824, -0.10699999999999932, -0.03249999999999886, -0.0017500000000012506, 0.0015000000000000568, -0.034000000000000696, -0.02275000000000027, -0.059499999999999886, -0.0010000000000012221, -0.02275000000000027, -0.010000000000001563, 0.011749999999999261, -0.0022500000000000853, -0.0072499999999990905, 0.008999999999998565, -0.09699999999999953, -0.004249999999998977, -0.04049999999999976, -0.016500000000000625, -0.00549999999999784, 0.018000000000000682, 0.11500000000000199, -0.04225000000000101], zp_timestamp='2026-04-15T21:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:58:02.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:58:02.041 [DEBUG] [Thread-28022] [transport.py] [_log()] starting thread (client mode): 0xf13357e0
2026-04-15T23:58:02.042 [DEBUG] [Thread-28022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:58:02.056 [DEBUG] [Thread-28022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-15T23:58:02.056 [INFO] [Thread-28022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-15T23:58:02.064 [DEBUG] [Thread-28022] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:58:02.064 [DEBUG] [Thread-28022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-15T23:58:02.064 [DEBUG] [Thread-28022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:58:02.064 [DEBUG] [Thread-28022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:58:02.064 [DEBUG] [Thread-28022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:58:02.064 [DEBUG] [Thread-28022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:58:02.064 [DEBUG] [Thread-28022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:58:02.064 [DEBUG] [Thread-28022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:58:02.064 [DEBUG] [Thread-28022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:58:02.064 [DEBUG] [Thread-28022] [transport.py] [_log()] client lang: <none>
2026-04-15T23:58:02.064 [DEBUG] [Thread-28022] [transport.py] [_log()] server lang: <none>
2026-04-15T23:58:02.065 [DEBUG] [Thread-28022] [transport.py] [_log()] kex follows: False
2026-04-15T23:58:02.065 [DEBUG] [Thread-28022] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:58:02.065 [DEBUG] [Thread-28022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:58:02.065 [DEBUG] [Thread-28022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:58:02.065 [DEBUG] [Thread-28022] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:58:02.065 [DEBUG] [Thread-28022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:58:02.065 [DEBUG] [Thread-28022] [transport.py] [_log()] Compression: none
2026-04-15T23:58:02.065 [DEBUG] [Thread-28022] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:58:02.121 [DEBUG] [Thread-28022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:58:02.121 [DEBUG] [Thread-28022] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:58:02.121 [DEBUG] [Thread-28022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-15T23:58:02.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-15T23:58:02.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:58:02.177 [DEBUG] [Thread-28022] [transport.py] [_log()] userauth is OK
2026-04-15T23:58:02.177 [DEBUG] [Thread-28022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:58:02.178 [DEBUG] [Thread-28022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:58:02.178 [DEBUG] [Thread-28022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-15T23:58:02.178 [DEBUG] [Thread-28022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:58:02.201 [INFO] [Thread-28022] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:58:02.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-15T23:58:02.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:58:03.039 [DEBUG] [Thread-28022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:58:03.039 [DEBUG] [Thread-28022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:58:03.088 [DEBUG] [Thread-28022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:58:03.088 [DEBUG] [Thread-28022] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:58:03.097 [DEBUG] [Thread-28022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:58:03.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:58:03.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')
2026-04-15T23:58:03.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') -> 00000000
2026-04-15T23:58:03.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:58:03.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:58:03.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:58:03.134 [DEBUG] [Thread-28022] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:58:16.442 [DEBUG] [Thread-28024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:58:19.258 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:58:19.260 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:58:31.480 [DEBUG] [Thread-28025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:58:33.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-15T23:58:33.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-15T23:58:33.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-15T23:58:34.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 15, 23, 58, 22), 3.35722, 79.4439, 0.0, 8.3286, 8.94736, 0, 0, 0, 2, 0, 0),)
2026-04-15T23:58:34.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-15 23:58:22
2026-04-15T23:58:34.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-15T23:58:35.206 [DEBUG] [Thread-28026] [transport.py] [_log()] starting thread (client mode): 0xee9917b0
2026-04-15T23:58:35.207 [DEBUG] [Thread-28026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-15T23:58:35.226 [DEBUG] [Thread-28026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-15T23:58:35.226 [INFO] [Thread-28026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-15T23:58:35.229 [DEBUG] [Thread-28026] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-15T23:58:35.229 [DEBUG] [Thread-28026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] client lang: <none>
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] server lang: <none>
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] kex follows: False
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] === Key exchange agreements ===
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] Compression: none
2026-04-15T23:58:35.230 [DEBUG] [Thread-28026] [transport.py] [_log()] === End of kex handshake ===
2026-04-15T23:58:35.246 [DEBUG] [Thread-28026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-15T23:58:35.246 [DEBUG] [Thread-28026] [transport.py] [_log()] Switch to new keys ...
2026-04-15T23:58:35.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-15T23:58:35.247 [DEBUG] [Thread-28026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-15T23:58:35.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-15T23:58:35.248 [DEBUG] [Thread-28026] [transport.py] [_log()] userauth is OK
2026-04-15T23:58:35.248 [DEBUG] [Thread-28026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-15T23:58:35.248 [DEBUG] [Thread-28026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-15T23:58:35.248 [DEBUG] [Thread-28026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-15T23:58:35.248 [DEBUG] [Thread-28026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-15T23:58:35.261 [INFO] [Thread-28026] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-15T23:58:35.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-15T23:58:36.079 [DEBUG] [Thread-28026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-15T23:58:36.080 [DEBUG] [Thread-28026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-15T23:58:36.080 [DEBUG] [Thread-28026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-15T23:58:36.120 [DEBUG] [Thread-28026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-15T23:58:36.120 [DEBUG] [Thread-28026] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-15T23:58:36.123 [DEBUG] [Thread-28026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-15T23:58:36.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-15T23:58:36.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-15T23:58:36.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-15T23:58:36.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-15T23:58:36.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-15T23:58:36.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-15T23:58:36.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-15T23:58:36.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-15T23:58:36.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-15T23:58:36.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.915406 -999.00   +9.50   7.86     80   +6.40 1 1 1 2 1     0    0 3.75 27.61 ZNESW 10.1 7.9 108.6 10.0 9.8 -24.7 9.7 -23.5 9.3 -21.4 9.7 -23.4
2026-04-15T23:58:36.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-15T23:58:36.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-15T23:58:36.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.915406
2026-04-15T23:58:36.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-15T23:58:36.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-15T23:58:36.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-15T23:58:36.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-15T23:58:36.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-15T23:58:36.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-15T23:58:22', tmtdew=3.35722, humidity=79.4439, cloud=0.0, wind=8.3286, temperature=8.94736, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T21:58:11.078', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, -0.08375000000000021, -0.027749999999999275, -0.0754999999999999, -0.046499999999999986, -0.028249999999999886, -0.017000000000001236, -0.006249999999999645, 0.013499999999998735, -0.09200000000000053, -0.021750000000000824, -0.10699999999999932, -0.03249999999999886, -0.0017500000000012506, 0.0015000000000000568, -0.034000000000000696, -0.02275000000000027, -0.059499999999999886, -0.0010000000000012221, -0.02275000000000027, -0.010000000000001563, 0.011749999999999261, -0.0022500000000000853, -0.0072499999999990905, 0.008999999999998565, -0.09699999999999953, -0.004249999999998977, -0.04049999999999976, -0.016500000000000625, -0.00549999999999784, 0.018000000000000682, 0.11500000000000199, -0.04225000000000101], zp_timestamp='2026-04-15T21:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-15T23:58:36.149 [DEBUG] [Thread-28026] [transport.py] [_log()] EOF in transport thread
2026-04-15T23:58:36.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-15T23:58:41.081 [DEBUG] [Thread-28029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:58:46.510 [DEBUG] [Thread-28030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:59:01.550 [DEBUG] [Thread-28031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:59:16.578 [DEBUG] [Thread-28032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:59:19.461 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:59:19.462 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:59:31.610 [DEBUG] [Thread-28033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:59:41.232 [DEBUG] [Thread-28034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-15T23:59:46.640 [DEBUG] [Thread-28035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:00:01.671 [DEBUG] [Thread-28036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:00:16.700 [DEBUG] [Thread-28037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:00:19.667 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:00:19.668 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:00:31.731 [DEBUG] [Thread-28038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:00:41.395 [DEBUG] [Thread-28039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:00:46.763 [DEBUG] [Thread-28040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:00:51.850 [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
2026-04-16T00:01:01.796 [DEBUG] [Thread-28041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:01:16.827 [DEBUG] [Thread-28042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:01:19.870 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:01:19.871 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:01:21.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:01:21.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:01:21.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
2026-04-16T00:01:23.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 0, 44), 2.92019, 81.8554, 0.0, 13.3042, 8.7952, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:01:23.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:00:44
2026-04-16T00:01:23.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:01:24.043 [DEBUG] [Thread-28043] [transport.py] [_log()] starting thread (client mode): 0xee9939a0
2026-04-16T00:01:24.043 [DEBUG] [Thread-28043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:01:24.063 [DEBUG] [Thread-28043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:01:24.063 [INFO] [Thread-28043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:01:24.066 [DEBUG] [Thread-28043] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:01:24.066 [DEBUG] [Thread-28043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:01:24.066 [DEBUG] [Thread-28043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:01:24.066 [DEBUG] [Thread-28043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:01:24.066 [DEBUG] [Thread-28043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:01:24.067 [DEBUG] [Thread-28043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:01:24.067 [DEBUG] [Thread-28043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:01:24.067 [DEBUG] [Thread-28043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:01:24.067 [DEBUG] [Thread-28043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:01:24.067 [DEBUG] [Thread-28043] [transport.py] [_log()] client lang: <none>
2026-04-16T00:01:24.067 [DEBUG] [Thread-28043] [transport.py] [_log()] server lang: <none>
2026-04-16T00:01:24.067 [DEBUG] [Thread-28043] [transport.py] [_log()] kex follows: False
2026-04-16T00:01:24.067 [DEBUG] [Thread-28043] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:01:24.067 [DEBUG] [Thread-28043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:01:24.067 [DEBUG] [Thread-28043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:01:24.067 [DEBUG] [Thread-28043] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:01:24.067 [DEBUG] [Thread-28043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:01:24.068 [DEBUG] [Thread-28043] [transport.py] [_log()] Compression: none
2026-04-16T00:01:24.068 [DEBUG] [Thread-28043] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:01:24.085 [DEBUG] [Thread-28043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:01:24.085 [DEBUG] [Thread-28043] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:01:24.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:01:24.086 [DEBUG] [Thread-28043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:01:24.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:01:24.087 [DEBUG] [Thread-28043] [transport.py] [_log()] userauth is OK
2026-04-16T00:01:24.087 [DEBUG] [Thread-28043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:01:24.087 [DEBUG] [Thread-28043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:01:24.087 [DEBUG] [Thread-28043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:01:24.087 [DEBUG] [Thread-28043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:01:24.123 [INFO] [Thread-28043] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:01:24.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:01:24.707 [DEBUG] [Thread-28043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:01:24.708 [DEBUG] [Thread-28043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:01:24.708 [DEBUG] [Thread-28043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:01:24.748 [DEBUG] [Thread-28043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:01:24.748 [DEBUG] [Thread-28043] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:01:24.750 [DEBUG] [Thread-28043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:01:24.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:01:24.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:01:24.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:01:24.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:01:24.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:01:24.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:01:24.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:01:24.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:01:24.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:01:24.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.917489 -999.00   +9.50   7.06     80   +6.30 1 1 1 2 1     0    0 3.97 32.93 ZNESW 6.0 7.1 120.6 9.4 9.8 -24.7 9.7 -23.7 9.3 -21.5 9.7 -23.5
2026-04-16T00:01:24.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:01:24.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:01:24.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.917489
2026-04-16T00:01:24.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:01:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:01:24.776 [DEBUG] [Thread-28043] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:01:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:01:24.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:01:24.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:01:24.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:00:44', tmtdew=2.92019, humidity=81.8554, cloud=0.0, wind=13.3042, temperature=8.7952, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:01:11.050', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.08074999999999832, -0.021250000000000213, -0.03900000000000148, -0.04800000000000004, -0.022749999999998494, -0.07950000000000124, -0.005749999999999034, -0.04650000000000176, -0.05249999999999844, -0.04574999999999996, -0.11500000000000021, -0.009999999999999787, 0.0182500000000001, -0.01150000000000162, -0.019000000000000128, -0.014749999999999375, -0.06850000000000023, 0.0024999999999995026, -0.04875000000000185, -0.014000000000001123, 0.06974999999999909, -0.03725000000000023, -0.01425000000000054, -0.012000000000000455, -0.07349999999999923, -0.005250000000000199, -0.03149999999999942, -0.010999999999999233, 0.022500000000000853, 0.030000000000001137, 0.10800000000000054, -0.012750000000000483], zp_timestamp='2026-04-15T21:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:01:25.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:01:25.036 [DEBUG] [Thread-28046] [transport.py] [_log()] starting thread (client mode): 0xf13538b0
2026-04-16T00:01:25.037 [DEBUG] [Thread-28046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:01:25.054 [DEBUG] [Thread-28046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:01:25.054 [INFO] [Thread-28046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:01:25.065 [DEBUG] [Thread-28046] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:01:25.065 [DEBUG] [Thread-28046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:01:25.065 [DEBUG] [Thread-28046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:01:25.065 [DEBUG] [Thread-28046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:01:25.065 [DEBUG] [Thread-28046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:01:25.065 [DEBUG] [Thread-28046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:01:25.065 [DEBUG] [Thread-28046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:01:25.065 [DEBUG] [Thread-28046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:01:25.065 [DEBUG] [Thread-28046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:01:25.065 [DEBUG] [Thread-28046] [transport.py] [_log()] client lang: <none>
2026-04-16T00:01:25.065 [DEBUG] [Thread-28046] [transport.py] [_log()] server lang: <none>
2026-04-16T00:01:25.066 [DEBUG] [Thread-28046] [transport.py] [_log()] kex follows: False
2026-04-16T00:01:25.066 [DEBUG] [Thread-28046] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:01:25.066 [DEBUG] [Thread-28046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:01:25.066 [DEBUG] [Thread-28046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:01:25.066 [DEBUG] [Thread-28046] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:01:25.066 [DEBUG] [Thread-28046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:01:25.066 [DEBUG] [Thread-28046] [transport.py] [_log()] Compression: none
2026-04-16T00:01:25.066 [DEBUG] [Thread-28046] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:01:25.124 [DEBUG] [Thread-28046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:01:25.124 [DEBUG] [Thread-28046] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:01:25.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:01:25.125 [DEBUG] [Thread-28046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:01:25.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:01:25.182 [DEBUG] [Thread-28046] [transport.py] [_log()] userauth is OK
2026-04-16T00:01:25.183 [DEBUG] [Thread-28046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:01:25.183 [DEBUG] [Thread-28046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:01:25.183 [DEBUG] [Thread-28046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:01:25.183 [DEBUG] [Thread-28046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:01:25.211 [INFO] [Thread-28046] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:01:25.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:01:25.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:01:26.049 [DEBUG] [Thread-28046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:01:26.050 [DEBUG] [Thread-28046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:01:26.097 [DEBUG] [Thread-28046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:01:26.097 [DEBUG] [Thread-28046] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:01:26.106 [DEBUG] [Thread-28046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:01:26.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:01:26.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')
2026-04-16T00:01:26.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
2026-04-16T00:01:26.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:01:26.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:01:26.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:01:26.141 [DEBUG] [Thread-28046] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:01:31.861 [DEBUG] [Thread-28048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:01:41.668 [DEBUG] [Thread-28049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:01:46.909 [DEBUG] [Thread-28050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:01:56.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:01:56.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:01:56.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
2026-04-16T00:01:57.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 1, 18), 3.31889, 79.8779, 0.0, 10.2344, 8.9476, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:01:57.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:01:18
2026-04-16T00:01:57.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:01:58.354 [DEBUG] [Thread-28051] [transport.py] [_log()] starting thread (client mode): 0xee9901c0
2026-04-16T00:01:58.354 [DEBUG] [Thread-28051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:01:58.372 [DEBUG] [Thread-28051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:01:58.372 [INFO] [Thread-28051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:01:58.374 [DEBUG] [Thread-28051] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:01:58.374 [DEBUG] [Thread-28051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:01:58.374 [DEBUG] [Thread-28051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:01:58.374 [DEBUG] [Thread-28051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:01:58.375 [DEBUG] [Thread-28051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:01:58.375 [DEBUG] [Thread-28051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:01:58.375 [DEBUG] [Thread-28051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:01:58.375 [DEBUG] [Thread-28051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:01:58.375 [DEBUG] [Thread-28051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:01:58.375 [DEBUG] [Thread-28051] [transport.py] [_log()] client lang: <none>
2026-04-16T00:01:58.375 [DEBUG] [Thread-28051] [transport.py] [_log()] server lang: <none>
2026-04-16T00:01:58.375 [DEBUG] [Thread-28051] [transport.py] [_log()] kex follows: False
2026-04-16T00:01:58.375 [DEBUG] [Thread-28051] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:01:58.375 [DEBUG] [Thread-28051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:01:58.375 [DEBUG] [Thread-28051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:01:58.376 [DEBUG] [Thread-28051] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:01:58.376 [DEBUG] [Thread-28051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:01:58.376 [DEBUG] [Thread-28051] [transport.py] [_log()] Compression: none
2026-04-16T00:01:58.376 [DEBUG] [Thread-28051] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:01:58.384 [DEBUG] [Thread-28051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:01:58.384 [DEBUG] [Thread-28051] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:01:58.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:01:58.385 [DEBUG] [Thread-28051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:01:58.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:01:58.386 [DEBUG] [Thread-28051] [transport.py] [_log()] userauth is OK
2026-04-16T00:01:58.386 [DEBUG] [Thread-28051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:01:58.386 [DEBUG] [Thread-28051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:01:58.386 [DEBUG] [Thread-28051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:01:58.386 [DEBUG] [Thread-28051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:01:58.404 [INFO] [Thread-28051] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:01:58.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:01:58.996 [DEBUG] [Thread-28051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:01:58.997 [DEBUG] [Thread-28051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:01:58.997 [DEBUG] [Thread-28051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:01:59.037 [DEBUG] [Thread-28051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:01:59.037 [DEBUG] [Thread-28051] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:01:59.040 [DEBUG] [Thread-28051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:01:59.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:01:59.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:01:59.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:01:59.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:01:59.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:01:59.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:01:59.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:01:59.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:01:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:01:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.917836 -999.00   +9.60   6.39     80   +6.40 1 1 1 2 1     0    0 3.98 33.93 ZNESW 8.1 6.4 118.4 7.9 9.9 -24.8 9.7 -23.6 9.4 -21.3 9.7 -23.5
2026-04-16T00:01:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:01:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:01:59.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.917836
2026-04-16T00:01:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:01:59.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:01:59.064 [DEBUG] [Thread-28051] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:01:59.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:01:59.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:01:59.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:01:59.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:01:18', tmtdew=3.31889, humidity=79.8779, cloud=0.0, wind=10.2344, temperature=8.9476, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:01:41.030', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.08074999999999832, -0.021250000000000213, -0.03900000000000148, -0.04800000000000004, -0.022749999999998494, -0.07950000000000124, -0.005749999999999034, -0.04650000000000176, -0.05249999999999844, -0.04574999999999996, -0.11500000000000021, -0.009999999999999787, 0.0182500000000001, -0.01150000000000162, -0.019000000000000128, -0.014749999999999375, -0.06850000000000023, 0.0024999999999995026, -0.04875000000000185, -0.014000000000001123, 0.06974999999999909, -0.03725000000000023, -0.01425000000000054, -0.012000000000000455, -0.07349999999999923, -0.005250000000000199, -0.03149999999999942, -0.010999999999999233, 0.022500000000000853, 0.030000000000001137, 0.10800000000000054, -0.012750000000000483], zp_timestamp='2026-04-15T21:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:01:59.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:01:59.321 [DEBUG] [Thread-28054] [transport.py] [_log()] starting thread (client mode): 0xee9922f0
2026-04-16T00:01:59.321 [DEBUG] [Thread-28054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:01:59.335 [DEBUG] [Thread-28054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:01:59.335 [INFO] [Thread-28054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:01:59.342 [DEBUG] [Thread-28054] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:01:59.343 [DEBUG] [Thread-28054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:01:59.343 [DEBUG] [Thread-28054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:01:59.343 [DEBUG] [Thread-28054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:01:59.343 [DEBUG] [Thread-28054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:01:59.343 [DEBUG] [Thread-28054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:01:59.343 [DEBUG] [Thread-28054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:01:59.343 [DEBUG] [Thread-28054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:01:59.343 [DEBUG] [Thread-28054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:01:59.343 [DEBUG] [Thread-28054] [transport.py] [_log()] client lang: <none>
2026-04-16T00:01:59.343 [DEBUG] [Thread-28054] [transport.py] [_log()] server lang: <none>
2026-04-16T00:01:59.344 [DEBUG] [Thread-28054] [transport.py] [_log()] kex follows: False
2026-04-16T00:01:59.344 [DEBUG] [Thread-28054] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:01:59.344 [DEBUG] [Thread-28054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:01:59.344 [DEBUG] [Thread-28054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:01:59.344 [DEBUG] [Thread-28054] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:01:59.344 [DEBUG] [Thread-28054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:01:59.344 [DEBUG] [Thread-28054] [transport.py] [_log()] Compression: none
2026-04-16T00:01:59.344 [DEBUG] [Thread-28054] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:01:59.402 [DEBUG] [Thread-28054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:01:59.403 [DEBUG] [Thread-28054] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:01:59.403 [DEBUG] [Thread-28054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:01:59.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:01:59.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:01:59.461 [DEBUG] [Thread-28054] [transport.py] [_log()] userauth is OK
2026-04-16T00:01:59.462 [DEBUG] [Thread-28054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:01:59.462 [DEBUG] [Thread-28054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:01:59.462 [DEBUG] [Thread-28054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:01:59.462 [DEBUG] [Thread-28054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:01:59.485 [INFO] [Thread-28054] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:01:59.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:01:59.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:02:00.297 [DEBUG] [Thread-28054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:02:00.298 [DEBUG] [Thread-28054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:02:00.345 [DEBUG] [Thread-28054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:02:00.345 [DEBUG] [Thread-28054] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:02:00.354 [DEBUG] [Thread-28054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:02:00.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:02:00.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')
2026-04-16T00:02:00.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
2026-04-16T00:02:00.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:02:00.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:02:00.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:02:00.390 [DEBUG] [Thread-28054] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:02:01.941 [DEBUG] [Thread-28056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:02:16.977 [DEBUG] [Thread-28057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:02:20.074 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:02:20.075 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:02:30.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:02:30.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:02:30.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
2026-04-16T00:02:31.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 1, 54), 2.94366, 81.7225, 0.0, 13.0219, 8.79511, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:02:31.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:01:54
2026-04-16T00:02:32.008 [DEBUG] [Thread-28058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:02:32.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:02:32.857 [DEBUG] [Thread-28059] [transport.py] [_log()] starting thread (client mode): 0xee9907f0
2026-04-16T00:02:32.857 [DEBUG] [Thread-28059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:02:32.868 [DEBUG] [Thread-28059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:02:32.868 [INFO] [Thread-28059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:02:32.870 [DEBUG] [Thread-28059] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:02:32.870 [DEBUG] [Thread-28059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:02:32.870 [DEBUG] [Thread-28059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:02:32.870 [DEBUG] [Thread-28059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:02:32.870 [DEBUG] [Thread-28059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:02:32.871 [DEBUG] [Thread-28059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:02:32.871 [DEBUG] [Thread-28059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:02:32.871 [DEBUG] [Thread-28059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:02:32.871 [DEBUG] [Thread-28059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:02:32.871 [DEBUG] [Thread-28059] [transport.py] [_log()] client lang: <none>
2026-04-16T00:02:32.871 [DEBUG] [Thread-28059] [transport.py] [_log()] server lang: <none>
2026-04-16T00:02:32.871 [DEBUG] [Thread-28059] [transport.py] [_log()] kex follows: False
2026-04-16T00:02:32.871 [DEBUG] [Thread-28059] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:02:32.871 [DEBUG] [Thread-28059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:02:32.871 [DEBUG] [Thread-28059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:02:32.871 [DEBUG] [Thread-28059] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:02:32.871 [DEBUG] [Thread-28059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:02:32.872 [DEBUG] [Thread-28059] [transport.py] [_log()] Compression: none
2026-04-16T00:02:32.872 [DEBUG] [Thread-28059] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:02:32.883 [DEBUG] [Thread-28059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:02:32.884 [DEBUG] [Thread-28059] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:02:32.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:02:32.884 [DEBUG] [Thread-28059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:02:32.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:02:32.888 [DEBUG] [Thread-28059] [transport.py] [_log()] userauth is OK
2026-04-16T00:02:32.888 [DEBUG] [Thread-28059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:02:32.888 [DEBUG] [Thread-28059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:02:32.889 [DEBUG] [Thread-28059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:02:32.889 [DEBUG] [Thread-28059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:02:32.905 [INFO] [Thread-28059] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:02:32.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:02:33.502 [DEBUG] [Thread-28059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:02:33.502 [DEBUG] [Thread-28059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:02:33.502 [DEBUG] [Thread-28059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:02:33.542 [DEBUG] [Thread-28059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:02:33.542 [DEBUG] [Thread-28059] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:02:33.545 [DEBUG] [Thread-28059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:02:33.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:02:33.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:02:33.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:02:33.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:02:33.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:02:33.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:02:33.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:02:33.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:02:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:02:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.918184 -999.00   +9.60   5.95     80   +6.40 1 1 1 2 1     0    0 4.11 36.15 ZNESW 6.9 6.0 93.3 8.9 9.9 -24.7 9.7 -23.5 9.4 -21.4 9.7 -23.4
2026-04-16T00:02:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:02:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:02:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.918184
2026-04-16T00:02:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:02:33.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:02:33.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:02:33.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:02:33.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:02:33.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:01:54', tmtdew=2.94366, humidity=81.7225, cloud=0.0, wind=13.0219, temperature=8.79511, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:02:11.098', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.08074999999999832, -0.021250000000000213, -0.03900000000000148, -0.04800000000000004, -0.022749999999998494, -0.07950000000000124, -0.005749999999999034, -0.04650000000000176, -0.05249999999999844, -0.04574999999999996, -0.11500000000000021, -0.009999999999999787, 0.0182500000000001, -0.01150000000000162, -0.019000000000000128, -0.014749999999999375, -0.06850000000000023, 0.0024999999999995026, -0.04875000000000185, -0.014000000000001123, 0.06974999999999909, -0.03725000000000023, -0.01425000000000054, -0.012000000000000455, -0.07349999999999923, -0.005250000000000199, -0.03149999999999942, -0.010999999999999233, 0.022500000000000853, 0.030000000000001137, 0.10800000000000054, -0.012750000000000483], zp_timestamp='2026-04-15T21:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:02:33.565 [DEBUG] [Thread-28059] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:02:33.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:02:33.786 [DEBUG] [Thread-28062] [transport.py] [_log()] starting thread (client mode): 0xee9c7370
2026-04-16T00:02:33.786 [DEBUG] [Thread-28062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:02:33.801 [DEBUG] [Thread-28062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:02:33.801 [INFO] [Thread-28062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:02:33.809 [DEBUG] [Thread-28062] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:02:33.809 [DEBUG] [Thread-28062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:02:33.809 [DEBUG] [Thread-28062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:02:33.809 [DEBUG] [Thread-28062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:02:33.809 [DEBUG] [Thread-28062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:02:33.809 [DEBUG] [Thread-28062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:02:33.809 [DEBUG] [Thread-28062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:02:33.809 [DEBUG] [Thread-28062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:02:33.809 [DEBUG] [Thread-28062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:02:33.809 [DEBUG] [Thread-28062] [transport.py] [_log()] client lang: <none>
2026-04-16T00:02:33.809 [DEBUG] [Thread-28062] [transport.py] [_log()] server lang: <none>
2026-04-16T00:02:33.810 [DEBUG] [Thread-28062] [transport.py] [_log()] kex follows: False
2026-04-16T00:02:33.810 [DEBUG] [Thread-28062] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:02:33.810 [DEBUG] [Thread-28062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:02:33.810 [DEBUG] [Thread-28062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:02:33.810 [DEBUG] [Thread-28062] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:02:33.810 [DEBUG] [Thread-28062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:02:33.810 [DEBUG] [Thread-28062] [transport.py] [_log()] Compression: none
2026-04-16T00:02:33.810 [DEBUG] [Thread-28062] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:02:33.865 [DEBUG] [Thread-28062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:02:33.865 [DEBUG] [Thread-28062] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:02:33.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:02:33.866 [DEBUG] [Thread-28062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:02:33.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:02:33.922 [DEBUG] [Thread-28062] [transport.py] [_log()] userauth is OK
2026-04-16T00:02:33.922 [DEBUG] [Thread-28062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:02:33.922 [DEBUG] [Thread-28062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:02:33.922 [DEBUG] [Thread-28062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:02:33.923 [DEBUG] [Thread-28062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:02:33.947 [INFO] [Thread-28062] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:02:33.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:02:33.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:02:34.789 [DEBUG] [Thread-28062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:02:34.790 [DEBUG] [Thread-28062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:02:34.837 [DEBUG] [Thread-28062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:02:34.837 [DEBUG] [Thread-28062] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:02:34.846 [DEBUG] [Thread-28062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:02:34.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:02:34.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')
2026-04-16T00:02: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
2026-04-16T00:02:34.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:02:34.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:02:34.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:02:34.877 [DEBUG] [Thread-28062] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:02:41.818 [DEBUG] [Thread-28064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:02:47.036 [DEBUG] [Thread-28065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:03:02.079 [DEBUG] [Thread-28066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:03:04.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:03:04.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:03:04.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
2026-04-16T00:03:06.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 2, 30), 3.32258, 79.8613, 0.0, 9.79344, 9.03074, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:03:06.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:02:30
2026-04-16T00:03:06.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:03:07.032 [DEBUG] [Thread-28067] [transport.py] [_log()] starting thread (client mode): 0xee991e70
2026-04-16T00:03:07.032 [DEBUG] [Thread-28067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:03:07.043 [DEBUG] [Thread-28067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:03:07.043 [INFO] [Thread-28067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:03:07.046 [DEBUG] [Thread-28067] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:03:07.046 [DEBUG] [Thread-28067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:03:07.046 [DEBUG] [Thread-28067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:03:07.046 [DEBUG] [Thread-28067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:03:07.046 [DEBUG] [Thread-28067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:03:07.046 [DEBUG] [Thread-28067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:03:07.046 [DEBUG] [Thread-28067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:03:07.047 [DEBUG] [Thread-28067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:03:07.047 [DEBUG] [Thread-28067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:03:07.047 [DEBUG] [Thread-28067] [transport.py] [_log()] client lang: <none>
2026-04-16T00:03:07.047 [DEBUG] [Thread-28067] [transport.py] [_log()] server lang: <none>
2026-04-16T00:03:07.047 [DEBUG] [Thread-28067] [transport.py] [_log()] kex follows: False
2026-04-16T00:03:07.047 [DEBUG] [Thread-28067] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:03:07.047 [DEBUG] [Thread-28067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:03:07.047 [DEBUG] [Thread-28067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:03:07.047 [DEBUG] [Thread-28067] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:03:07.047 [DEBUG] [Thread-28067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:03:07.047 [DEBUG] [Thread-28067] [transport.py] [_log()] Compression: none
2026-04-16T00:03:07.048 [DEBUG] [Thread-28067] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:03:07.065 [DEBUG] [Thread-28067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:03:07.065 [DEBUG] [Thread-28067] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:03:07.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:03:07.066 [DEBUG] [Thread-28067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:03:07.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:03:07.067 [DEBUG] [Thread-28067] [transport.py] [_log()] userauth is OK
2026-04-16T00:03:07.067 [DEBUG] [Thread-28067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:03:07.067 [DEBUG] [Thread-28067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:03:07.067 [DEBUG] [Thread-28067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:03:07.067 [DEBUG] [Thread-28067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:03:07.084 [INFO] [Thread-28067] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:03:07.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:03:07.681 [DEBUG] [Thread-28067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:03:07.682 [DEBUG] [Thread-28067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:03:07.682 [DEBUG] [Thread-28067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:03:07.722 [DEBUG] [Thread-28067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:03:07.722 [DEBUG] [Thread-28067] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:03:07.724 [DEBUG] [Thread-28067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:03:07.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:03:07.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:03:07.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:03:07.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:03:07.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:03:07.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:03:07.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:03:07.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:03:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:03:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.918531 -999.00   +9.70   6.76     80   +6.40 1 1 1 2 1     0    0 4.10 37.50 ZNESW 6.9 6.8 89.4 9.0 9.9 -24.9 9.7 -23.5 9.4 -21.5 9.7 -23.4
2026-04-16T00:03:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:03:07.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:03:07.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.918531
2026-04-16T00:03:07.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:03:07.738 [DEBUG] [Thread-28067] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:03:07.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:03:07.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:03:07.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:03:07.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:03:07.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:02:30', tmtdew=3.32258, humidity=79.8613, cloud=0.0, wind=9.79344, temperature=9.03074, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:02:41.078', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.08074999999999832, -0.021250000000000213, -0.03900000000000148, -0.04800000000000004, -0.022749999999998494, -0.07950000000000124, -0.005749999999999034, -0.04650000000000176, -0.05249999999999844, -0.04574999999999996, -0.11500000000000021, -0.009999999999999787, 0.0182500000000001, -0.01150000000000162, -0.019000000000000128, -0.014749999999999375, -0.06850000000000023, 0.0024999999999995026, -0.04875000000000185, -0.014000000000001123, 0.06974999999999909, -0.03725000000000023, -0.01425000000000054, -0.012000000000000455, -0.07349999999999923, -0.005250000000000199, -0.03149999999999942, -0.010999999999999233, 0.022500000000000853, 0.030000000000001137, 0.10800000000000054, -0.012750000000000483], zp_timestamp='2026-04-15T21:59:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:03:07.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:03:07.953 [DEBUG] [Thread-28070] [transport.py] [_log()] starting thread (client mode): 0xee992350
2026-04-16T00:03:07.954 [DEBUG] [Thread-28070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:03:07.968 [DEBUG] [Thread-28070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:03:07.968 [INFO] [Thread-28070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:03:07.976 [DEBUG] [Thread-28070] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:03:07.976 [DEBUG] [Thread-28070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:03:07.976 [DEBUG] [Thread-28070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:03:07.976 [DEBUG] [Thread-28070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:03:07.976 [DEBUG] [Thread-28070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:03:07.976 [DEBUG] [Thread-28070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:03:07.976 [DEBUG] [Thread-28070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:03:07.976 [DEBUG] [Thread-28070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:03:07.977 [DEBUG] [Thread-28070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:03:07.977 [DEBUG] [Thread-28070] [transport.py] [_log()] client lang: <none>
2026-04-16T00:03:07.977 [DEBUG] [Thread-28070] [transport.py] [_log()] server lang: <none>
2026-04-16T00:03:07.977 [DEBUG] [Thread-28070] [transport.py] [_log()] kex follows: False
2026-04-16T00:03:07.977 [DEBUG] [Thread-28070] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:03:07.977 [DEBUG] [Thread-28070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:03:07.977 [DEBUG] [Thread-28070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:03:07.977 [DEBUG] [Thread-28070] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:03:07.977 [DEBUG] [Thread-28070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:03:07.977 [DEBUG] [Thread-28070] [transport.py] [_log()] Compression: none
2026-04-16T00:03:07.977 [DEBUG] [Thread-28070] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:03:08.033 [DEBUG] [Thread-28070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:03:08.034 [DEBUG] [Thread-28070] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:03:08.034 [DEBUG] [Thread-28070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:03:08.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:03:08.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:03:08.090 [DEBUG] [Thread-28070] [transport.py] [_log()] userauth is OK
2026-04-16T00:03:08.090 [DEBUG] [Thread-28070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:03:08.090 [DEBUG] [Thread-28070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:03:08.090 [DEBUG] [Thread-28070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:03:08.090 [DEBUG] [Thread-28070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:03:08.116 [INFO] [Thread-28070] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:03:08.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:03:08.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:03:08.917 [DEBUG] [Thread-28070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:03:08.917 [DEBUG] [Thread-28070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:03:08.965 [DEBUG] [Thread-28070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:03:08.965 [DEBUG] [Thread-28070] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:03:08.974 [DEBUG] [Thread-28070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:03:08.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:03:08.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')
2026-04-16T00:03: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
2026-04-16T00:03:09.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:03:09.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:03:09.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:03:09.012 [DEBUG] [Thread-28070] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:03:13.328 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:03:17.112 [DEBUG] [Thread-28072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:03:20.278 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:03:20.278 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:03:25.091 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:03:29.204 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:03:32.148 [DEBUG] [Thread-28073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:03:39.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:03:39.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:03:39.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:03:40.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 3, 7), 3.33471, 79.7949, 0.0, 9.47592, 9.04729, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:03:40.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:03:07
2026-04-16T00:03:40.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:03:41.155 [DEBUG] [Thread-28074] [transport.py] [_log()] starting thread (client mode): 0xf13345b0
2026-04-16T00:03:41.155 [DEBUG] [Thread-28074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:03:41.166 [DEBUG] [Thread-28074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:03:41.166 [INFO] [Thread-28074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:03:41.167 [DEBUG] [Thread-28074] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:03:41.168 [DEBUG] [Thread-28074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:03:41.168 [DEBUG] [Thread-28074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:03:41.168 [DEBUG] [Thread-28074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:03:41.168 [DEBUG] [Thread-28074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:03:41.168 [DEBUG] [Thread-28074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:03:41.168 [DEBUG] [Thread-28074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:03:41.168 [DEBUG] [Thread-28074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:03:41.168 [DEBUG] [Thread-28074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:03:41.168 [DEBUG] [Thread-28074] [transport.py] [_log()] client lang: <none>
2026-04-16T00:03:41.168 [DEBUG] [Thread-28074] [transport.py] [_log()] server lang: <none>
2026-04-16T00:03:41.169 [DEBUG] [Thread-28074] [transport.py] [_log()] kex follows: False
2026-04-16T00:03:41.169 [DEBUG] [Thread-28074] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:03:41.169 [DEBUG] [Thread-28074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:03:41.169 [DEBUG] [Thread-28074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:03:41.169 [DEBUG] [Thread-28074] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:03:41.169 [DEBUG] [Thread-28074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:03:41.169 [DEBUG] [Thread-28074] [transport.py] [_log()] Compression: none
2026-04-16T00:03:41.169 [DEBUG] [Thread-28074] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:03:41.180 [DEBUG] [Thread-28074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:03:41.181 [DEBUG] [Thread-28074] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:03:41.181 [DEBUG] [Thread-28074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:03:41.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:03:41.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:03:41.182 [DEBUG] [Thread-28074] [transport.py] [_log()] userauth is OK
2026-04-16T00:03:41.182 [DEBUG] [Thread-28074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:03:41.182 [DEBUG] [Thread-28074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:03:41.182 [DEBUG] [Thread-28074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:03:41.182 [DEBUG] [Thread-28074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:03:41.197 [INFO] [Thread-28074] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:03:41.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:03:41.831 [DEBUG] [Thread-28074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:03:41.831 [DEBUG] [Thread-28074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:03:41.831 [DEBUG] [Thread-28074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:03:41.872 [DEBUG] [Thread-28074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:03:41.872 [DEBUG] [Thread-28074] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:03:41.874 [DEBUG] [Thread-28074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:03:41.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:03:41.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:03:41.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:03:41.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:03:41.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:03:41.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:03:41.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:03:41.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:03:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:03:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.918531 -999.00   +9.70   6.76     80   +6.40 1 1 1 2 1     0    0 4.10 37.50 ZNESW 6.9 6.8 89.4 9.0 9.9 -24.9 9.7 -23.5 9.4 -21.5 9.7 -23.4
2026-04-16T00:03:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:03:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:03:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.918531
2026-04-16T00:03:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:03:41.889 [DEBUG] [Thread-28074] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:03:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:03:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:03:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:03:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:03:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:03:07', tmtdew=3.33471, humidity=79.7949, cloud=0.0, wind=9.47592, temperature=9.04729, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:02:41.078', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.08074999999999832, -0.021250000000000213, -0.03900000000000148, -0.04800000000000004, -0.022749999999998494, -0.07950000000000124, -0.005749999999999034, -0.04650000000000176, -0.05249999999999844, -0.04574999999999996, -0.11500000000000021, -0.009999999999999787, 0.0182500000000001, -0.01150000000000162, -0.019000000000000128, -0.014749999999999375, -0.06850000000000023, 0.0024999999999995026, -0.04875000000000185, -0.014000000000001123, 0.06974999999999909, -0.03725000000000023, -0.01425000000000054, -0.012000000000000455, -0.07349999999999923, -0.005250000000000199, -0.03149999999999942, -0.010999999999999233, 0.022500000000000853, 0.030000000000001137, 0.10800000000000054, -0.012750000000000483], zp_timestamp='2026-04-15T22:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:03:41.988 [DEBUG] [Thread-28077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:03:42.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:03:42.119 [DEBUG] [Thread-28078] [transport.py] [_log()] starting thread (client mode): 0xf1337160
2026-04-16T00:03:42.119 [DEBUG] [Thread-28078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:03:42.134 [DEBUG] [Thread-28078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:03:42.135 [INFO] [Thread-28078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:03:42.142 [DEBUG] [Thread-28078] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:03:42.142 [DEBUG] [Thread-28078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:03:42.142 [DEBUG] [Thread-28078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:03:42.142 [DEBUG] [Thread-28078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:03:42.142 [DEBUG] [Thread-28078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:03:42.142 [DEBUG] [Thread-28078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:03:42.142 [DEBUG] [Thread-28078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:03:42.142 [DEBUG] [Thread-28078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:03:42.143 [DEBUG] [Thread-28078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:03:42.143 [DEBUG] [Thread-28078] [transport.py] [_log()] client lang: <none>
2026-04-16T00:03:42.143 [DEBUG] [Thread-28078] [transport.py] [_log()] server lang: <none>
2026-04-16T00:03:42.143 [DEBUG] [Thread-28078] [transport.py] [_log()] kex follows: False
2026-04-16T00:03:42.143 [DEBUG] [Thread-28078] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:03:42.143 [DEBUG] [Thread-28078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:03:42.143 [DEBUG] [Thread-28078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:03:42.143 [DEBUG] [Thread-28078] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:03:42.143 [DEBUG] [Thread-28078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:03:42.143 [DEBUG] [Thread-28078] [transport.py] [_log()] Compression: none
2026-04-16T00:03:42.143 [DEBUG] [Thread-28078] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:03:42.200 [DEBUG] [Thread-28078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:03:42.201 [DEBUG] [Thread-28078] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:03:42.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:03:42.201 [DEBUG] [Thread-28078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:03:42.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:03:42.257 [DEBUG] [Thread-28078] [transport.py] [_log()] userauth is OK
2026-04-16T00:03:42.257 [DEBUG] [Thread-28078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:03:42.258 [DEBUG] [Thread-28078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:03:42.258 [DEBUG] [Thread-28078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:03:42.258 [DEBUG] [Thread-28078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:03:42.285 [INFO] [Thread-28078] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:03:42.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:03:42.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:03:43.111 [DEBUG] [Thread-28078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:03:43.111 [DEBUG] [Thread-28078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:03:43.158 [DEBUG] [Thread-28078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:03:43.158 [DEBUG] [Thread-28078] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:03:43.167 [DEBUG] [Thread-28078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:03:43.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:03:43.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')
2026-04-16T00:03:43.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
2026-04-16T00:03:43.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:03:43.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:03:43.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:03:43.202 [DEBUG] [Thread-28078] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:03:47.175 [DEBUG] [Thread-28080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:04:02.216 [DEBUG] [Thread-28081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:04:13.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:04:13.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:04:13.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:04:14.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 3, 43), 2.97605, 81.5565, 0.0, 11.8224, 8.92775, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:04:14.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:03:43
2026-04-16T00:04:14.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:04:15.416 [DEBUG] [Thread-28082] [transport.py] [_log()] starting thread (client mode): 0xf1336a70
2026-04-16T00:04:15.416 [DEBUG] [Thread-28082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:04:15.437 [DEBUG] [Thread-28082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:04:15.437 [INFO] [Thread-28082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:04:15.438 [DEBUG] [Thread-28082] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:04:15.439 [DEBUG] [Thread-28082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:04:15.439 [DEBUG] [Thread-28082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:04:15.439 [DEBUG] [Thread-28082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:04:15.439 [DEBUG] [Thread-28082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:04:15.439 [DEBUG] [Thread-28082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:04:15.439 [DEBUG] [Thread-28082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:04:15.440 [DEBUG] [Thread-28082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:04:15.440 [DEBUG] [Thread-28082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:04:15.440 [DEBUG] [Thread-28082] [transport.py] [_log()] client lang: <none>
2026-04-16T00:04:15.440 [DEBUG] [Thread-28082] [transport.py] [_log()] server lang: <none>
2026-04-16T00:04:15.440 [DEBUG] [Thread-28082] [transport.py] [_log()] kex follows: False
2026-04-16T00:04:15.440 [DEBUG] [Thread-28082] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:04:15.441 [DEBUG] [Thread-28082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:04:15.441 [DEBUG] [Thread-28082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:04:15.441 [DEBUG] [Thread-28082] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:04:15.441 [DEBUG] [Thread-28082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:04:15.441 [DEBUG] [Thread-28082] [transport.py] [_log()] Compression: none
2026-04-16T00:04:15.442 [DEBUG] [Thread-28082] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:04:15.459 [DEBUG] [Thread-28082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:04:15.459 [DEBUG] [Thread-28082] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:04:15.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:04:15.460 [DEBUG] [Thread-28082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:04:15.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:04:15.460 [DEBUG] [Thread-28082] [transport.py] [_log()] userauth is OK
2026-04-16T00:04:15.461 [DEBUG] [Thread-28082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:04:15.461 [DEBUG] [Thread-28082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:04:15.461 [DEBUG] [Thread-28082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:04:15.461 [DEBUG] [Thread-28082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:04:15.485 [INFO] [Thread-28082] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:04:15.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:04:16.270 [DEBUG] [Thread-28082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:04:16.270 [DEBUG] [Thread-28082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:04:16.271 [DEBUG] [Thread-28082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:04:16.312 [DEBUG] [Thread-28082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:04:16.313 [DEBUG] [Thread-28082] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:04:16.314 [DEBUG] [Thread-28082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:04:16.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:04:16.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:04:16.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:04:16.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:04:16.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:04:16.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:04:16.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:04:16.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:04:16.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:04:16.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.918878 -999.00   +9.70   8.07     80   +6.40 1 1 1 2 1     0    0 4.15 38.76 ZNESW 7.4 8.1 116.6 9.6 9.9 -24.8 9.7 -23.5 9.4 -21.3 9.7 -23.4
2026-04-16T00:04:16.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:04:16.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:04:16.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.918878
2026-04-16T00:04:16.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:04:16.333 [DEBUG] [Thread-28082] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:04:16.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:04:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:04:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:04:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:04:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:03:43', tmtdew=2.97605, humidity=81.5565, cloud=0.0, wind=11.8224, temperature=8.92775, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:03:11.059', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.08074999999999832, -0.021250000000000213, -0.03900000000000148, -0.04800000000000004, -0.022749999999998494, -0.07950000000000124, -0.005749999999999034, -0.04650000000000176, -0.05249999999999844, -0.04574999999999996, -0.11500000000000021, -0.009999999999999787, 0.0182500000000001, -0.01150000000000162, -0.019000000000000128, -0.014749999999999375, -0.06850000000000023, 0.0024999999999995026, -0.04875000000000185, -0.014000000000001123, 0.06974999999999909, -0.03725000000000023, -0.01425000000000054, -0.012000000000000455, -0.07349999999999923, -0.005250000000000199, -0.03149999999999942, -0.010999999999999233, 0.022500000000000853, 0.030000000000001137, 0.10800000000000054, -0.012750000000000483], zp_timestamp='2026-04-15T22:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:04:16.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:04:16.576 [DEBUG] [Thread-28085] [transport.py] [_log()] starting thread (client mode): 0xee9c7d00
2026-04-16T00:04:16.576 [DEBUG] [Thread-28085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:04:16.593 [DEBUG] [Thread-28085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:04:16.593 [INFO] [Thread-28085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:04:16.601 [DEBUG] [Thread-28085] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:04:16.601 [DEBUG] [Thread-28085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:04:16.601 [DEBUG] [Thread-28085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:04:16.601 [DEBUG] [Thread-28085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:04:16.601 [DEBUG] [Thread-28085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:04:16.601 [DEBUG] [Thread-28085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:04:16.601 [DEBUG] [Thread-28085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:04:16.601 [DEBUG] [Thread-28085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:04:16.601 [DEBUG] [Thread-28085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:04:16.601 [DEBUG] [Thread-28085] [transport.py] [_log()] client lang: <none>
2026-04-16T00:04:16.601 [DEBUG] [Thread-28085] [transport.py] [_log()] server lang: <none>
2026-04-16T00:04:16.602 [DEBUG] [Thread-28085] [transport.py] [_log()] kex follows: False
2026-04-16T00:04:16.602 [DEBUG] [Thread-28085] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:04:16.602 [DEBUG] [Thread-28085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:04:16.602 [DEBUG] [Thread-28085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:04:16.602 [DEBUG] [Thread-28085] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:04:16.602 [DEBUG] [Thread-28085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:04:16.602 [DEBUG] [Thread-28085] [transport.py] [_log()] Compression: none
2026-04-16T00:04:16.602 [DEBUG] [Thread-28085] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:04:16.665 [DEBUG] [Thread-28085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:04:16.666 [DEBUG] [Thread-28085] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:04:16.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:04:16.666 [DEBUG] [Thread-28085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:04:16.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:04:16.725 [DEBUG] [Thread-28085] [transport.py] [_log()] userauth is OK
2026-04-16T00:04:16.725 [DEBUG] [Thread-28085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:04:16.725 [DEBUG] [Thread-28085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:04:16.725 [DEBUG] [Thread-28085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:04:16.726 [DEBUG] [Thread-28085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:04:16.754 [INFO] [Thread-28085] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:04:16.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:04:16.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:04:17.247 [DEBUG] [Thread-28087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:04:17.585 [DEBUG] [Thread-28085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:04:17.585 [DEBUG] [Thread-28085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:04:17.633 [DEBUG] [Thread-28085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:04:17.634 [DEBUG] [Thread-28085] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:04:17.643 [DEBUG] [Thread-28085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:04:17.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:04:17.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')
2026-04-16T00:04:17.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
2026-04-16T00:04:17.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:04:17.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:04:17.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:04:17.679 [DEBUG] [Thread-28085] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:04:20.482 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:04:20.483 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:04:32.298 [DEBUG] [Thread-28088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:04:42.148 [DEBUG] [Thread-28089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:04:47.328 [DEBUG] [Thread-28090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:04:47.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:04:47.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:04:47.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
2026-04-16T00:04:49.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 4, 18), 3.40827, 79.1621, 0.0, 9.58176, 9.04725, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:04:49.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:04:18
2026-04-16T00:04:49.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:04:49.931 [DEBUG] [Thread-28091] [transport.py] [_log()] starting thread (client mode): 0xf13e31f0
2026-04-16T00:04:49.931 [DEBUG] [Thread-28091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:04:49.952 [DEBUG] [Thread-28091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:04:49.952 [INFO] [Thread-28091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:04:49.955 [DEBUG] [Thread-28091] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:04:49.955 [DEBUG] [Thread-28091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:04:49.955 [DEBUG] [Thread-28091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:04:49.955 [DEBUG] [Thread-28091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:04:49.955 [DEBUG] [Thread-28091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:04:49.955 [DEBUG] [Thread-28091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:04:49.955 [DEBUG] [Thread-28091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:04:49.956 [DEBUG] [Thread-28091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:04:49.956 [DEBUG] [Thread-28091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:04:49.956 [DEBUG] [Thread-28091] [transport.py] [_log()] client lang: <none>
2026-04-16T00:04:49.956 [DEBUG] [Thread-28091] [transport.py] [_log()] server lang: <none>
2026-04-16T00:04:49.956 [DEBUG] [Thread-28091] [transport.py] [_log()] kex follows: False
2026-04-16T00:04:49.956 [DEBUG] [Thread-28091] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:04:49.956 [DEBUG] [Thread-28091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:04:49.956 [DEBUG] [Thread-28091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:04:49.956 [DEBUG] [Thread-28091] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:04:49.956 [DEBUG] [Thread-28091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:04:49.956 [DEBUG] [Thread-28091] [transport.py] [_log()] Compression: none
2026-04-16T00:04:49.956 [DEBUG] [Thread-28091] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:04:49.972 [DEBUG] [Thread-28091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:04:49.973 [DEBUG] [Thread-28091] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:04:49.973 [DEBUG] [Thread-28091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:04:49.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:04:49.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:04:49.974 [DEBUG] [Thread-28091] [transport.py] [_log()] userauth is OK
2026-04-16T00:04:49.974 [DEBUG] [Thread-28091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:04:49.974 [DEBUG] [Thread-28091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:04:49.975 [DEBUG] [Thread-28091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:04:49.975 [DEBUG] [Thread-28091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:04:49.988 [INFO] [Thread-28091] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:04:49.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:04:50.755 [DEBUG] [Thread-28091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:04:50.755 [DEBUG] [Thread-28091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:04:50.756 [DEBUG] [Thread-28091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:04:50.796 [DEBUG] [Thread-28091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:04:50.796 [DEBUG] [Thread-28091] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:04:50.799 [DEBUG] [Thread-28091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:04:50.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:04:50.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:04:50.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:04:50.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:04:50.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:04:50.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:04:50.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:04:50.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:04:50.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:04:50.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.919572 -999.00   +9.70   7.17     80   +6.40 1 1 1 2 1     0    0 4.19 40.96 ZNESW 7.4 7.2 129.7 9.0 9.9 -24.8 9.8 -23.6 9.4 -21.4 9.7 -23.4
2026-04-16T00:04:50.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:04:50.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:04:50.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.919572
2026-04-16T00:04:50.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:04:50.824 [DEBUG] [Thread-28091] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:04:50.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:04:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:04:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:04:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:04:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:04:18', tmtdew=3.40827, humidity=79.1621, cloud=0.0, wind=9.58176, temperature=9.04725, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:04:11.021', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.08074999999999832, -0.021250000000000213, -0.03900000000000148, -0.04800000000000004, -0.022749999999998494, -0.07950000000000124, -0.005749999999999034, -0.04650000000000176, -0.05249999999999844, -0.04574999999999996, -0.11500000000000021, -0.009999999999999787, 0.0182500000000001, -0.01150000000000162, -0.019000000000000128, -0.014749999999999375, -0.06850000000000023, 0.0024999999999995026, -0.04875000000000185, -0.014000000000001123, 0.06974999999999909, -0.03725000000000023, -0.01425000000000054, -0.012000000000000455, -0.07349999999999923, -0.005250000000000199, -0.03149999999999942, -0.010999999999999233, 0.022500000000000853, 0.030000000000001137, 0.10800000000000054, -0.012750000000000483], zp_timestamp='2026-04-15T22:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:04:51.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:04:51.074 [DEBUG] [Thread-28094] [transport.py] [_log()] starting thread (client mode): 0xf13e3fa0
2026-04-16T00:04:51.074 [DEBUG] [Thread-28094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:04:51.088 [DEBUG] [Thread-28094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:04:51.088 [INFO] [Thread-28094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:04:51.096 [DEBUG] [Thread-28094] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:04:51.096 [DEBUG] [Thread-28094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:04:51.096 [DEBUG] [Thread-28094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:04:51.096 [DEBUG] [Thread-28094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:04:51.096 [DEBUG] [Thread-28094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:04:51.097 [DEBUG] [Thread-28094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:04:51.097 [DEBUG] [Thread-28094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:04:51.097 [DEBUG] [Thread-28094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:04:51.097 [DEBUG] [Thread-28094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:04:51.097 [DEBUG] [Thread-28094] [transport.py] [_log()] client lang: <none>
2026-04-16T00:04:51.097 [DEBUG] [Thread-28094] [transport.py] [_log()] server lang: <none>
2026-04-16T00:04:51.097 [DEBUG] [Thread-28094] [transport.py] [_log()] kex follows: False
2026-04-16T00:04:51.097 [DEBUG] [Thread-28094] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:04:51.097 [DEBUG] [Thread-28094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:04:51.097 [DEBUG] [Thread-28094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:04:51.097 [DEBUG] [Thread-28094] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:04:51.097 [DEBUG] [Thread-28094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:04:51.098 [DEBUG] [Thread-28094] [transport.py] [_log()] Compression: none
2026-04-16T00:04:51.098 [DEBUG] [Thread-28094] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:04:51.154 [DEBUG] [Thread-28094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:04:51.155 [DEBUG] [Thread-28094] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:04:51.155 [DEBUG] [Thread-28094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:04:51.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:04:51.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:04:51.214 [DEBUG] [Thread-28094] [transport.py] [_log()] userauth is OK
2026-04-16T00:04:51.214 [DEBUG] [Thread-28094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:04:51.214 [DEBUG] [Thread-28094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:04:51.214 [DEBUG] [Thread-28094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:04:51.214 [DEBUG] [Thread-28094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:04:51.239 [INFO] [Thread-28094] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:04:51.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:04:51.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:04:51.896 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:04:52.021 [DEBUG] [Thread-28094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:04:52.021 [DEBUG] [Thread-28094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:04:52.068 [DEBUG] [Thread-28094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:04:52.068 [DEBUG] [Thread-28094] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:04:52.077 [DEBUG] [Thread-28094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:04:52.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:04:52.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')
2026-04-16T00:04:52.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
2026-04-16T00:04:52.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:04:52.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:04:52.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:04:52.109 [DEBUG] [Thread-28094] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:05:01.579 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:05:02.357 [DEBUG] [Thread-28096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:05:05.693 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:05:17.400 [DEBUG] [Thread-28097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:05:20.727 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:05:20.728 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:05:22.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:05:22.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:05:22.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
2026-04-16T00:05:23.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 4, 54), 3.41789, 79.1123, 0.0, 9.9522, 9.08043, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:05:23.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:04:54
2026-04-16T00:05:23.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:05:24.246 [DEBUG] [Thread-28098] [transport.py] [_log()] starting thread (client mode): 0xf13e3310
2026-04-16T00:05:24.246 [DEBUG] [Thread-28098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:05:24.264 [DEBUG] [Thread-28098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:05:24.264 [INFO] [Thread-28098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:05:24.268 [DEBUG] [Thread-28098] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:05:24.268 [DEBUG] [Thread-28098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:05:24.268 [DEBUG] [Thread-28098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:05:24.268 [DEBUG] [Thread-28098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:05:24.268 [DEBUG] [Thread-28098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:05:24.268 [DEBUG] [Thread-28098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:05:24.268 [DEBUG] [Thread-28098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:05:24.268 [DEBUG] [Thread-28098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:05:24.268 [DEBUG] [Thread-28098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:05:24.268 [DEBUG] [Thread-28098] [transport.py] [_log()] client lang: <none>
2026-04-16T00:05:24.268 [DEBUG] [Thread-28098] [transport.py] [_log()] server lang: <none>
2026-04-16T00:05:24.269 [DEBUG] [Thread-28098] [transport.py] [_log()] kex follows: False
2026-04-16T00:05:24.269 [DEBUG] [Thread-28098] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:05:24.269 [DEBUG] [Thread-28098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:05:24.269 [DEBUG] [Thread-28098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:05:24.269 [DEBUG] [Thread-28098] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:05:24.269 [DEBUG] [Thread-28098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:05:24.269 [DEBUG] [Thread-28098] [transport.py] [_log()] Compression: none
2026-04-16T00:05:24.269 [DEBUG] [Thread-28098] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:05:24.286 [DEBUG] [Thread-28098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:05:24.286 [DEBUG] [Thread-28098] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:05:24.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:05:24.287 [DEBUG] [Thread-28098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:05:24.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:05:24.289 [DEBUG] [Thread-28098] [transport.py] [_log()] userauth is OK
2026-04-16T00:05:24.289 [DEBUG] [Thread-28098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:05:24.289 [DEBUG] [Thread-28098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:05:24.289 [DEBUG] [Thread-28098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:05:24.289 [DEBUG] [Thread-28098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:05:24.326 [INFO] [Thread-28098] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:05:24.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:05:27.521 [DEBUG] [Thread-28098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:05:27.521 [DEBUG] [Thread-28098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:05:27.521 [DEBUG] [Thread-28098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:05:27.562 [DEBUG] [Thread-28098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:05:27.562 [DEBUG] [Thread-28098] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:05:27.565 [DEBUG] [Thread-28098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:05:27.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:05:27.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:05:27.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:05:27.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:05:27.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:05:27.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:05:27.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:05:27.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:05:27.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:05:27.591 [DEBUG] [Thread-28098] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:05:27.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.920267 -999.00   +9.70   6.93     80   +6.40 1 1 1 2 1     0    0 4.34 43.22 ZNESW 7.1 6.9 115.6 8.6 9.9 -24.7 9.8 -23.6 9.4 -21.4 9.7 -23.4
2026-04-16T00:05:27.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:05:27.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:05:27.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.920267
2026-04-16T00:05:27.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:05:27.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:05:27.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:05:27.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:05:27.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:05:27.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:04:54', tmtdew=3.41789, humidity=79.1123, cloud=0.0, wind=9.9522, temperature=9.08043, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:05:11.069', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.08074999999999832, -0.021250000000000213, -0.03900000000000148, -0.04800000000000004, -0.022749999999998494, -0.07950000000000124, -0.005749999999999034, -0.04650000000000176, -0.05249999999999844, -0.04574999999999996, -0.11500000000000021, -0.009999999999999787, 0.0182500000000001, -0.01150000000000162, -0.019000000000000128, -0.014749999999999375, -0.06850000000000023, 0.0024999999999995026, -0.04875000000000185, -0.014000000000001123, 0.06974999999999909, -0.03725000000000023, -0.01425000000000054, -0.012000000000000455, -0.07349999999999923, -0.005250000000000199, -0.03149999999999942, -0.010999999999999233, 0.022500000000000853, 0.030000000000001137, 0.10800000000000054, -0.012750000000000483], zp_timestamp='2026-04-15T22:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:05:27.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:05:27.853 [DEBUG] [Thread-28101] [transport.py] [_log()] starting thread (client mode): 0xee990b20
2026-04-16T00:05:27.853 [DEBUG] [Thread-28101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:05:27.867 [DEBUG] [Thread-28101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:05:27.867 [INFO] [Thread-28101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:05:27.874 [DEBUG] [Thread-28101] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:05:27.874 [DEBUG] [Thread-28101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] client lang: <none>
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] server lang: <none>
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] kex follows: False
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] Compression: none
2026-04-16T00:05:27.875 [DEBUG] [Thread-28101] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:05:27.931 [DEBUG] [Thread-28101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:05:27.931 [DEBUG] [Thread-28101] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:05:27.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:05:27.932 [DEBUG] [Thread-28101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:05:27.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:05:27.988 [DEBUG] [Thread-28101] [transport.py] [_log()] userauth is OK
2026-04-16T00:05:27.988 [DEBUG] [Thread-28101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:05:27.988 [DEBUG] [Thread-28101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:05:27.988 [DEBUG] [Thread-28101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:05:27.988 [DEBUG] [Thread-28101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:05:28.005 [INFO] [Thread-28101] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:05:28.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:05:28.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:05:28.827 [DEBUG] [Thread-28101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:05:28.827 [DEBUG] [Thread-28101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:05:28.875 [DEBUG] [Thread-28101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:05:28.875 [DEBUG] [Thread-28101] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:05:28.884 [DEBUG] [Thread-28101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:05:28.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:05:28.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')
2026-04-16T00:05:28.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') -> 00000000
2026-04-16T00:05:28.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:05:28.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:05:28.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:05:28.919 [DEBUG] [Thread-28101] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:05:32.430 [DEBUG] [Thread-28103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:05:42.292 [DEBUG] [Thread-28104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:05:47.473 [DEBUG] [Thread-28105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:05:58.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:05:58.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:05:58.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
2026-04-16T00:06:00.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 5, 31), 3.42675, 79.0625, 0.0, 10.1639, 9.08041, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:06:00.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:05:31
2026-04-16T00:06:00.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:06:01.068 [DEBUG] [Thread-28106] [transport.py] [_log()] starting thread (client mode): 0xf13e2ce0
2026-04-16T00:06:01.068 [DEBUG] [Thread-28106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:06:01.090 [DEBUG] [Thread-28106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:06:01.090 [INFO] [Thread-28106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:06:01.094 [DEBUG] [Thread-28106] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:06:01.094 [DEBUG] [Thread-28106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:06:01.094 [DEBUG] [Thread-28106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:06:01.094 [DEBUG] [Thread-28106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:06:01.094 [DEBUG] [Thread-28106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:06:01.095 [DEBUG] [Thread-28106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:06:01.095 [DEBUG] [Thread-28106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:06:01.095 [DEBUG] [Thread-28106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:06:01.095 [DEBUG] [Thread-28106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:06:01.095 [DEBUG] [Thread-28106] [transport.py] [_log()] client lang: <none>
2026-04-16T00:06:01.095 [DEBUG] [Thread-28106] [transport.py] [_log()] server lang: <none>
2026-04-16T00:06:01.095 [DEBUG] [Thread-28106] [transport.py] [_log()] kex follows: False
2026-04-16T00:06:01.095 [DEBUG] [Thread-28106] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:06:01.095 [DEBUG] [Thread-28106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:06:01.095 [DEBUG] [Thread-28106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:06:01.095 [DEBUG] [Thread-28106] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:06:01.096 [DEBUG] [Thread-28106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:06:01.096 [DEBUG] [Thread-28106] [transport.py] [_log()] Compression: none
2026-04-16T00:06:01.096 [DEBUG] [Thread-28106] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:06:01.108 [DEBUG] [Thread-28106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:06:01.108 [DEBUG] [Thread-28106] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:06:01.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:06:01.109 [DEBUG] [Thread-28106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:06:01.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:06:01.110 [DEBUG] [Thread-28106] [transport.py] [_log()] userauth is OK
2026-04-16T00:06:01.110 [DEBUG] [Thread-28106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:06:01.110 [DEBUG] [Thread-28106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:06:01.110 [DEBUG] [Thread-28106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:06:01.111 [DEBUG] [Thread-28106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:06:01.134 [INFO] [Thread-28106] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:06:01.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:06:01.896 [DEBUG] [Thread-28106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:06:01.897 [DEBUG] [Thread-28106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:06:01.897 [DEBUG] [Thread-28106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:06:01.937 [DEBUG] [Thread-28106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:06:01.937 [DEBUG] [Thread-28106] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:06:01.941 [DEBUG] [Thread-28106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:06:01.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:06:01.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:06:01.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:06:01.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:06:01.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:06:01.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:06:01.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:06:01.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:06:01.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:06:01.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.920267 -999.00   +9.70   6.93     80   +6.40 1 1 1 2 1     0    0 4.34 43.22 ZNESW 7.1 6.9 115.6 8.6 9.9 -24.7 9.8 -23.6 9.4 -21.4 9.7 -23.4
2026-04-16T00:06:01.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:06:01.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:06:01.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.920267
2026-04-16T00:06:01.960 [DEBUG] [Thread-28106] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:06:01.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:06:01.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:06:01.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:06:01.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:06:01.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:06:01.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:05:31', tmtdew=3.42675, humidity=79.0625, cloud=0.0, wind=10.1639, temperature=9.08041, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:05:11.069', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.08074999999999832, -0.021250000000000213, -0.03900000000000148, -0.04800000000000004, -0.022749999999998494, -0.07950000000000124, -0.005749999999999034, -0.04650000000000176, -0.05249999999999844, -0.04574999999999996, -0.11500000000000021, -0.009999999999999787, 0.0182500000000001, -0.01150000000000162, -0.019000000000000128, -0.014749999999999375, -0.06850000000000023, 0.0024999999999995026, -0.04875000000000185, -0.014000000000001123, 0.06974999999999909, -0.03725000000000023, -0.01425000000000054, -0.012000000000000455, -0.07349999999999923, -0.005250000000000199, -0.03149999999999942, -0.010999999999999233, 0.022500000000000853, 0.030000000000001137, 0.10800000000000054, -0.012750000000000483], zp_timestamp='2026-04-15T22:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:06:02.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:06:02.219 [DEBUG] [Thread-28109] [transport.py] [_log()] starting thread (client mode): 0xee9c67d0
2026-04-16T00:06:02.219 [DEBUG] [Thread-28109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:06:02.233 [DEBUG] [Thread-28109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:06:02.233 [INFO] [Thread-28109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:06:02.241 [DEBUG] [Thread-28109] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:06:02.241 [DEBUG] [Thread-28109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:06:02.241 [DEBUG] [Thread-28109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:06:02.241 [DEBUG] [Thread-28109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:06:02.241 [DEBUG] [Thread-28109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:06:02.241 [DEBUG] [Thread-28109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:06:02.241 [DEBUG] [Thread-28109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:06:02.241 [DEBUG] [Thread-28109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:06:02.241 [DEBUG] [Thread-28109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:06:02.241 [DEBUG] [Thread-28109] [transport.py] [_log()] client lang: <none>
2026-04-16T00:06:02.241 [DEBUG] [Thread-28109] [transport.py] [_log()] server lang: <none>
2026-04-16T00:06:02.241 [DEBUG] [Thread-28109] [transport.py] [_log()] kex follows: False
2026-04-16T00:06:02.241 [DEBUG] [Thread-28109] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:06:02.242 [DEBUG] [Thread-28109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:06:02.242 [DEBUG] [Thread-28109] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:06:02.242 [DEBUG] [Thread-28109] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:06:02.242 [DEBUG] [Thread-28109] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:06:02.242 [DEBUG] [Thread-28109] [transport.py] [_log()] Compression: none
2026-04-16T00:06:02.242 [DEBUG] [Thread-28109] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:06:02.299 [DEBUG] [Thread-28109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:06:02.299 [DEBUG] [Thread-28109] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:06:02.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:06:02.300 [DEBUG] [Thread-28109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:06:02.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:06:02.356 [DEBUG] [Thread-28109] [transport.py] [_log()] userauth is OK
2026-04-16T00:06:02.356 [DEBUG] [Thread-28109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:06:02.356 [DEBUG] [Thread-28109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:06:02.356 [DEBUG] [Thread-28109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:06:02.356 [DEBUG] [Thread-28109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:06:02.373 [INFO] [Thread-28109] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:06:02.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:06:02.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:06:02.504 [DEBUG] [Thread-28111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:06:03.182 [DEBUG] [Thread-28109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:06:03.182 [DEBUG] [Thread-28109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:06:03.230 [DEBUG] [Thread-28109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:06:03.230 [DEBUG] [Thread-28109] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:06:03.239 [DEBUG] [Thread-28109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:06:03.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:06: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')
2026-04-16T00:06:03.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-16T00:06:03.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:06:03.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:06:03.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:06:03.274 [DEBUG] [Thread-28109] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:06:17.548 [DEBUG] [Thread-28112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:06:20.931 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:06:20.932 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:06:28.282 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:06:32.578 [DEBUG] [Thread-28113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:06:33.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:06:33.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:06:33.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
2026-04-16T00:06:34.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 6, 6), 3.4301, 79.0459, 0.0, 10.111, 9.097, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:06:34.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:06:06
2026-04-16T00:06:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:06:35.502 [DEBUG] [Thread-28114] [transport.py] [_log()] starting thread (client mode): 0xf1334c10
2026-04-16T00:06:35.502 [DEBUG] [Thread-28114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:06:35.522 [DEBUG] [Thread-28114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:06:35.522 [INFO] [Thread-28114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:06:35.524 [DEBUG] [Thread-28114] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:06:35.525 [DEBUG] [Thread-28114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:06:35.525 [DEBUG] [Thread-28114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:06:35.525 [DEBUG] [Thread-28114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:06:35.525 [DEBUG] [Thread-28114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:06:35.525 [DEBUG] [Thread-28114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:06:35.525 [DEBUG] [Thread-28114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:06:35.525 [DEBUG] [Thread-28114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:06:35.525 [DEBUG] [Thread-28114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:06:35.525 [DEBUG] [Thread-28114] [transport.py] [_log()] client lang: <none>
2026-04-16T00:06:35.525 [DEBUG] [Thread-28114] [transport.py] [_log()] server lang: <none>
2026-04-16T00:06:35.525 [DEBUG] [Thread-28114] [transport.py] [_log()] kex follows: False
2026-04-16T00:06:35.526 [DEBUG] [Thread-28114] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:06:35.526 [DEBUG] [Thread-28114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:06:35.526 [DEBUG] [Thread-28114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:06:35.526 [DEBUG] [Thread-28114] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:06:35.526 [DEBUG] [Thread-28114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:06:35.526 [DEBUG] [Thread-28114] [transport.py] [_log()] Compression: none
2026-04-16T00:06:35.526 [DEBUG] [Thread-28114] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:06:35.543 [DEBUG] [Thread-28114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:06:35.544 [DEBUG] [Thread-28114] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:06:35.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:06:35.544 [DEBUG] [Thread-28114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:06:35.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:06:35.545 [DEBUG] [Thread-28114] [transport.py] [_log()] userauth is OK
2026-04-16T00:06:35.546 [DEBUG] [Thread-28114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:06:35.546 [DEBUG] [Thread-28114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:06:35.546 [DEBUG] [Thread-28114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:06:35.546 [DEBUG] [Thread-28114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:06:35.576 [INFO] [Thread-28114] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:06:35.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:06:36.369 [DEBUG] [Thread-28114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:06:36.369 [DEBUG] [Thread-28114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:06:36.369 [DEBUG] [Thread-28114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:06:36.410 [DEBUG] [Thread-28114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:06:36.410 [DEBUG] [Thread-28114] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:06:36.412 [DEBUG] [Thread-28114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:06:36.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:06:36.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:06:36.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:06:36.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:06:36.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:06:36.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:06:36.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:06:36.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:06:36.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:06:36.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.920614 -999.00   +9.60   9.71     80   +6.40 1 1 1 2 1     0    0 4.33 43.19 ZNESW 7.2 9.7 109.5 13.5 9.9 -24.7 9.7 -23.6 9.4 -21.4 9.7 -23.5
2026-04-16T00:06:36.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:06:36.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:06:36.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.920614
2026-04-16T00:06:36.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:06:36.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:06:36.432 [DEBUG] [Thread-28114] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:06:36.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:06:36.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:06:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:06:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:06:06', tmtdew=3.4301, humidity=79.0459, cloud=0.0, wind=10.111, temperature=9.097, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:05:41.050', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056750000000000966, -0.0807500000000001, -0.018749999999998934, -0.046499999999999986, -0.013500000000000512, -0.01425000000000054, -0.014000000000001123, 0.0002500000000011937, -0.04550000000000054, -0.10200000000000031, -0.05375000000000085, -0.09549999999999947, -0.0009999999999994458, 0.0182500000000001, -0.023000000000001464, -0.028999999999999915, -0.013749999999999929, -0.06400000000000006, -0.015000000000000568, -0.021750000000000824, -0.002500000000001279, 0.03274999999999828, 0.03625000000000078, -0.019249999999999545, -0.020500000000000185, -0.06300000000000061, -0.011250000000000426, -0.006999999999999673, 0.006000000000000227, 0.010000000000001563, 0.048500000000000654, 0.03300000000000125, 0.0037499999999983658], zp_timestamp='2026-04-15T22:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:06:36.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:06:36.654 [DEBUG] [Thread-28117] [transport.py] [_log()] starting thread (client mode): 0xf13e26e0
2026-04-16T00:06:36.654 [DEBUG] [Thread-28117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:06:36.669 [DEBUG] [Thread-28117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:06:36.669 [INFO] [Thread-28117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:06:36.678 [DEBUG] [Thread-28117] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:06:36.678 [DEBUG] [Thread-28117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:06:36.678 [DEBUG] [Thread-28117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:06:36.678 [DEBUG] [Thread-28117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:06:36.678 [DEBUG] [Thread-28117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:06:36.679 [DEBUG] [Thread-28117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:06:36.679 [DEBUG] [Thread-28117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:06:36.679 [DEBUG] [Thread-28117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:06:36.679 [DEBUG] [Thread-28117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:06:36.679 [DEBUG] [Thread-28117] [transport.py] [_log()] client lang: <none>
2026-04-16T00:06:36.679 [DEBUG] [Thread-28117] [transport.py] [_log()] server lang: <none>
2026-04-16T00:06:36.679 [DEBUG] [Thread-28117] [transport.py] [_log()] kex follows: False
2026-04-16T00:06:36.679 [DEBUG] [Thread-28117] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:06:36.679 [DEBUG] [Thread-28117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:06:36.679 [DEBUG] [Thread-28117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:06:36.679 [DEBUG] [Thread-28117] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:06:36.679 [DEBUG] [Thread-28117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:06:36.679 [DEBUG] [Thread-28117] [transport.py] [_log()] Compression: none
2026-04-16T00:06:36.680 [DEBUG] [Thread-28117] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:06:36.737 [DEBUG] [Thread-28117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:06:36.738 [DEBUG] [Thread-28117] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:06:36.738 [DEBUG] [Thread-28117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:06:36.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:06:36.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:06:36.799 [DEBUG] [Thread-28117] [transport.py] [_log()] userauth is OK
2026-04-16T00:06:36.800 [DEBUG] [Thread-28117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:06:36.800 [DEBUG] [Thread-28117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:06:36.800 [DEBUG] [Thread-28117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:06:36.800 [DEBUG] [Thread-28117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:06:36.832 [INFO] [Thread-28117] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:06:36.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:06:36.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:06:37.649 [DEBUG] [Thread-28117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:06:37.649 [DEBUG] [Thread-28117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:06:37.698 [DEBUG] [Thread-28117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:06:37.698 [DEBUG] [Thread-28117] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:06:37.708 [DEBUG] [Thread-28117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:06:37.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:06:37.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')
2026-04-16T00:06:37.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') -> 00000000
2026-04-16T00:06:37.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:06:37.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:06:37.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:06:37.743 [DEBUG] [Thread-28117] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:06:39.037 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:06:42.461 [DEBUG] [Thread-28119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:06:43.086 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:06:47.609 [DEBUG] [Thread-28120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:07:02.654 [DEBUG] [Thread-28121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:07:07.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:07:07.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:07:07.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:07:09.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 6, 41), 3.07127, 81.0255, 0.0, 13.1983, 8.96078, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:07:09.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:06:41
2026-04-16T00:07:09.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:07:09.894 [DEBUG] [Thread-28122] [transport.py] [_log()] starting thread (client mode): 0xee904f10
2026-04-16T00:07:09.894 [DEBUG] [Thread-28122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:07:09.914 [DEBUG] [Thread-28122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:07:09.914 [INFO] [Thread-28122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:07:09.916 [DEBUG] [Thread-28122] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:07:09.916 [DEBUG] [Thread-28122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:07:09.916 [DEBUG] [Thread-28122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:07:09.916 [DEBUG] [Thread-28122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:07:09.916 [DEBUG] [Thread-28122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:07:09.916 [DEBUG] [Thread-28122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:07:09.916 [DEBUG] [Thread-28122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:07:09.917 [DEBUG] [Thread-28122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:07:09.917 [DEBUG] [Thread-28122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:07:09.917 [DEBUG] [Thread-28122] [transport.py] [_log()] client lang: <none>
2026-04-16T00:07:09.917 [DEBUG] [Thread-28122] [transport.py] [_log()] server lang: <none>
2026-04-16T00:07:09.917 [DEBUG] [Thread-28122] [transport.py] [_log()] kex follows: False
2026-04-16T00:07:09.917 [DEBUG] [Thread-28122] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:07:09.917 [DEBUG] [Thread-28122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:07:09.917 [DEBUG] [Thread-28122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:07:09.917 [DEBUG] [Thread-28122] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:07:09.917 [DEBUG] [Thread-28122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:07:09.917 [DEBUG] [Thread-28122] [transport.py] [_log()] Compression: none
2026-04-16T00:07:09.918 [DEBUG] [Thread-28122] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:07:09.936 [DEBUG] [Thread-28122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:07:09.936 [DEBUG] [Thread-28122] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:07:09.937 [DEBUG] [Thread-28122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:07:09.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:07:09.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:07:09.938 [DEBUG] [Thread-28122] [transport.py] [_log()] userauth is OK
2026-04-16T00:07:09.938 [DEBUG] [Thread-28122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:07:09.938 [DEBUG] [Thread-28122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:07:09.938 [DEBUG] [Thread-28122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:07:09.939 [DEBUG] [Thread-28122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:07:09.956 [INFO] [Thread-28122] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:07:09.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:07:10.755 [DEBUG] [Thread-28122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:07:10.756 [DEBUG] [Thread-28122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:07:10.756 [DEBUG] [Thread-28122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:07:10.796 [DEBUG] [Thread-28122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:07:10.796 [DEBUG] [Thread-28122] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:07:10.799 [DEBUG] [Thread-28122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:07:10.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:07:10.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:07:10.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:07:10.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:07:10.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:07:10.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:07:10.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:07:10.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:07:10.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:07:10.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.920961 -999.00   +9.60   8.25     80   +6.40 1 1 1 2 1     0    0 4.57 50.23 ZNESW 6.9 8.2 114.2 10.3 9.9 -24.9 9.7 -23.5 9.4 -21.4 9.7 -23.4
2026-04-16T00:07:10.828 [DEBUG] [Thread-28122] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:07:10.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:07:10.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:07:10.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.920961
2026-04-16T00:07:10.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:07:10.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:07:10.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:07:10.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:07:10.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:07:10.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:06:41', tmtdew=3.07127, humidity=81.0255, cloud=0.0, wind=13.1983, temperature=8.96078, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:06:11.030', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056750000000000966, -0.0807500000000001, -0.018749999999998934, -0.046499999999999986, -0.013500000000000512, -0.01425000000000054, -0.014000000000001123, 0.0002500000000011937, -0.04550000000000054, -0.10200000000000031, -0.05375000000000085, -0.09549999999999947, -0.0009999999999994458, 0.0182500000000001, -0.023000000000001464, -0.028999999999999915, -0.013749999999999929, -0.06400000000000006, -0.015000000000000568, -0.021750000000000824, -0.002500000000001279, 0.03274999999999828, 0.03625000000000078, -0.019249999999999545, -0.020500000000000185, -0.06300000000000061, -0.011250000000000426, -0.006999999999999673, 0.006000000000000227, 0.010000000000001563, 0.048500000000000654, 0.03300000000000125, 0.0037499999999983658], zp_timestamp='2026-04-15T22:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:07:11.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:07:11.104 [DEBUG] [Thread-28125] [transport.py] [_log()] starting thread (client mode): 0xee9c7d00
2026-04-16T00:07:11.104 [DEBUG] [Thread-28125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:07:11.118 [DEBUG] [Thread-28125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:07:11.118 [INFO] [Thread-28125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:07:11.125 [DEBUG] [Thread-28125] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:07:11.125 [DEBUG] [Thread-28125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:07:11.125 [DEBUG] [Thread-28125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:07:11.125 [DEBUG] [Thread-28125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:07:11.125 [DEBUG] [Thread-28125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:07:11.125 [DEBUG] [Thread-28125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:07:11.125 [DEBUG] [Thread-28125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:07:11.125 [DEBUG] [Thread-28125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:07:11.126 [DEBUG] [Thread-28125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:07:11.126 [DEBUG] [Thread-28125] [transport.py] [_log()] client lang: <none>
2026-04-16T00:07:11.126 [DEBUG] [Thread-28125] [transport.py] [_log()] server lang: <none>
2026-04-16T00:07:11.126 [DEBUG] [Thread-28125] [transport.py] [_log()] kex follows: False
2026-04-16T00:07:11.126 [DEBUG] [Thread-28125] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:07:11.126 [DEBUG] [Thread-28125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:07:11.126 [DEBUG] [Thread-28125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:07:11.126 [DEBUG] [Thread-28125] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:07:11.126 [DEBUG] [Thread-28125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:07:11.126 [DEBUG] [Thread-28125] [transport.py] [_log()] Compression: none
2026-04-16T00:07:11.126 [DEBUG] [Thread-28125] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:07:11.182 [DEBUG] [Thread-28125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:07:11.182 [DEBUG] [Thread-28125] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:07:11.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:07:11.183 [DEBUG] [Thread-28125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:07:11.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:07:11.239 [DEBUG] [Thread-28125] [transport.py] [_log()] userauth is OK
2026-04-16T00:07:11.240 [DEBUG] [Thread-28125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:07:11.240 [DEBUG] [Thread-28125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:07:11.240 [DEBUG] [Thread-28125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:07:11.240 [DEBUG] [Thread-28125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:07:11.265 [INFO] [Thread-28125] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:07:11.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:07:11.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:07:12.077 [DEBUG] [Thread-28125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:07:12.077 [DEBUG] [Thread-28125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:07:12.125 [DEBUG] [Thread-28125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:07:12.125 [DEBUG] [Thread-28125] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:07:12.134 [DEBUG] [Thread-28125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:07:12.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:07:12.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')
2026-04-16T00:07:12.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
2026-04-16T00:07:12.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:07:12.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:07:12.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:07:12.170 [DEBUG] [Thread-28125] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:07:17.686 [DEBUG] [Thread-28127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:07:21.136 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:07:21.137 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:07:32.728 [DEBUG] [Thread-28128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:07:42.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:07:42.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:07:42.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:07:42.611 [DEBUG] [Thread-28129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:07:43.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 7, 17), 3.49374, 78.963, 0.0, 10.3932, 9.09721, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:07:43.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:07:17
2026-04-16T00:07:43.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:07:44.347 [DEBUG] [Thread-28130] [transport.py] [_log()] starting thread (client mode): 0xee905ff0
2026-04-16T00:07:44.347 [DEBUG] [Thread-28130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:07:44.367 [DEBUG] [Thread-28130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:07:44.367 [INFO] [Thread-28130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:07:44.370 [DEBUG] [Thread-28130] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:07:44.370 [DEBUG] [Thread-28130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:07:44.370 [DEBUG] [Thread-28130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:07:44.370 [DEBUG] [Thread-28130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:07:44.371 [DEBUG] [Thread-28130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:07:44.371 [DEBUG] [Thread-28130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:07:44.371 [DEBUG] [Thread-28130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:07:44.371 [DEBUG] [Thread-28130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:07:44.371 [DEBUG] [Thread-28130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:07:44.371 [DEBUG] [Thread-28130] [transport.py] [_log()] client lang: <none>
2026-04-16T00:07:44.371 [DEBUG] [Thread-28130] [transport.py] [_log()] server lang: <none>
2026-04-16T00:07:44.371 [DEBUG] [Thread-28130] [transport.py] [_log()] kex follows: False
2026-04-16T00:07:44.371 [DEBUG] [Thread-28130] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:07:44.371 [DEBUG] [Thread-28130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:07:44.371 [DEBUG] [Thread-28130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:07:44.372 [DEBUG] [Thread-28130] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:07:44.372 [DEBUG] [Thread-28130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:07:44.372 [DEBUG] [Thread-28130] [transport.py] [_log()] Compression: none
2026-04-16T00:07:44.372 [DEBUG] [Thread-28130] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:07:44.388 [DEBUG] [Thread-28130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:07:44.388 [DEBUG] [Thread-28130] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:07:44.389 [DEBUG] [Thread-28130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:07:44.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:07:44.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:07:44.432 [DEBUG] [Thread-28130] [transport.py] [_log()] userauth is OK
2026-04-16T00:07:44.432 [DEBUG] [Thread-28130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:07:44.433 [DEBUG] [Thread-28130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:07:44.433 [DEBUG] [Thread-28130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:07:44.433 [DEBUG] [Thread-28130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:07:44.468 [INFO] [Thread-28130] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:07:44.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:07:45.278 [DEBUG] [Thread-28130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:07:45.278 [DEBUG] [Thread-28130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:07:45.278 [DEBUG] [Thread-28130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:07:45.319 [DEBUG] [Thread-28130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:07:45.319 [DEBUG] [Thread-28130] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:07:45.321 [DEBUG] [Thread-28130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:07:45.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:07:45.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:07:45.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:07:45.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:07:45.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:07:45.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:07:45.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:07:45.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:07:45.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:07:45.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.921309 -999.00   +9.60   6.56     80   +6.40 1 1 1 2 1     0    0 4.34 43.90 ZNESW 6.9 6.6 91.8 11.7 9.9 -24.9 9.7 -23.5 9.4 -21.4 9.7 -23.3
2026-04-16T00:07:45.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:07:45.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:07:45.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.921309
2026-04-16T00:07:45.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:07:45.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:07:45.345 [DEBUG] [Thread-28130] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:07:45.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:07:45.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:07:45.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:07:45.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:07:17', tmtdew=3.49374, humidity=78.963, cloud=0.0, wind=10.3932, temperature=9.09721, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:06:41.098', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056750000000000966, -0.0807500000000001, -0.018749999999998934, -0.046499999999999986, -0.013500000000000512, -0.01425000000000054, -0.014000000000001123, 0.0002500000000011937, -0.04550000000000054, -0.10200000000000031, -0.05375000000000085, -0.09549999999999947, -0.0009999999999994458, 0.0182500000000001, -0.023000000000001464, -0.028999999999999915, -0.013749999999999929, -0.06400000000000006, -0.015000000000000568, -0.021750000000000824, -0.002500000000001279, 0.03274999999999828, 0.03625000000000078, -0.019249999999999545, -0.020500000000000185, -0.06300000000000061, -0.011250000000000426, -0.006999999999999673, 0.006000000000000227, 0.010000000000001563, 0.048500000000000654, 0.03300000000000125, 0.0037499999999983658], zp_timestamp='2026-04-15T22:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:07:45.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:07:45.600 [DEBUG] [Thread-28133] [transport.py] [_log()] starting thread (client mode): 0xf1366f20
2026-04-16T00:07:45.601 [DEBUG] [Thread-28133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:07:45.614 [DEBUG] [Thread-28133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:07:45.615 [INFO] [Thread-28133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:07:45.622 [DEBUG] [Thread-28133] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:07:45.622 [DEBUG] [Thread-28133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:07:45.622 [DEBUG] [Thread-28133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:07:45.622 [DEBUG] [Thread-28133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:07:45.622 [DEBUG] [Thread-28133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:07:45.622 [DEBUG] [Thread-28133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:07:45.622 [DEBUG] [Thread-28133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:07:45.623 [DEBUG] [Thread-28133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:07:45.623 [DEBUG] [Thread-28133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:07:45.623 [DEBUG] [Thread-28133] [transport.py] [_log()] client lang: <none>
2026-04-16T00:07:45.623 [DEBUG] [Thread-28133] [transport.py] [_log()] server lang: <none>
2026-04-16T00:07:45.623 [DEBUG] [Thread-28133] [transport.py] [_log()] kex follows: False
2026-04-16T00:07:45.623 [DEBUG] [Thread-28133] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:07:45.623 [DEBUG] [Thread-28133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:07:45.623 [DEBUG] [Thread-28133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:07:45.623 [DEBUG] [Thread-28133] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:07:45.623 [DEBUG] [Thread-28133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:07:45.623 [DEBUG] [Thread-28133] [transport.py] [_log()] Compression: none
2026-04-16T00:07:45.624 [DEBUG] [Thread-28133] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:07:45.678 [DEBUG] [Thread-28133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:07:45.678 [DEBUG] [Thread-28133] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:07:45.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:07:45.679 [DEBUG] [Thread-28133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:07:45.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:07:45.735 [DEBUG] [Thread-28133] [transport.py] [_log()] userauth is OK
2026-04-16T00:07:45.735 [DEBUG] [Thread-28133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:07:45.735 [DEBUG] [Thread-28133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:07:45.735 [DEBUG] [Thread-28133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:07:45.735 [DEBUG] [Thread-28133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:07:45.760 [INFO] [Thread-28133] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:07:45.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:07:45.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:07:46.573 [DEBUG] [Thread-28133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:07:46.574 [DEBUG] [Thread-28133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:07:46.622 [DEBUG] [Thread-28133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:07:46.622 [DEBUG] [Thread-28133] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:07:46.631 [DEBUG] [Thread-28133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:07:46.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:07:46.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')
2026-04-16T00:07:46.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
2026-04-16T00:07:46.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:07:46.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:07:46.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:07:46.663 [DEBUG] [Thread-28133] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:07:47.758 [DEBUG] [Thread-28135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:08:02.801 [DEBUG] [Thread-28136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:08:05.553 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:08:16.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:08:16.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:08:16.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
2026-04-16T00:08:17.696 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:08:17.835 [DEBUG] [Thread-28137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:08:17.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 7, 54), 3.07205, 81.0254, 0.0, 13.8686, 8.99393, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:08:17.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:07:54
2026-04-16T00:08:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:08:18.773 [DEBUG] [Thread-28138] [transport.py] [_log()] starting thread (client mode): 0xf1367070
2026-04-16T00:08:18.774 [DEBUG] [Thread-28138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:08:18.795 [DEBUG] [Thread-28138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:08:18.795 [INFO] [Thread-28138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:08:18.798 [DEBUG] [Thread-28138] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:08:18.798 [DEBUG] [Thread-28138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:08:18.798 [DEBUG] [Thread-28138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:08:18.798 [DEBUG] [Thread-28138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:08:18.798 [DEBUG] [Thread-28138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:08:18.798 [DEBUG] [Thread-28138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:08:18.798 [DEBUG] [Thread-28138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:08:18.799 [DEBUG] [Thread-28138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:08:18.799 [DEBUG] [Thread-28138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:08:18.799 [DEBUG] [Thread-28138] [transport.py] [_log()] client lang: <none>
2026-04-16T00:08:18.799 [DEBUG] [Thread-28138] [transport.py] [_log()] server lang: <none>
2026-04-16T00:08:18.799 [DEBUG] [Thread-28138] [transport.py] [_log()] kex follows: False
2026-04-16T00:08:18.799 [DEBUG] [Thread-28138] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:08:18.799 [DEBUG] [Thread-28138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:08:18.799 [DEBUG] [Thread-28138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:08:18.799 [DEBUG] [Thread-28138] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:08:18.799 [DEBUG] [Thread-28138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:08:18.799 [DEBUG] [Thread-28138] [transport.py] [_log()] Compression: none
2026-04-16T00:08:18.799 [DEBUG] [Thread-28138] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:08:18.814 [DEBUG] [Thread-28138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:08:18.815 [DEBUG] [Thread-28138] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:08:18.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:08:18.815 [DEBUG] [Thread-28138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:08:18.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:08:18.816 [DEBUG] [Thread-28138] [transport.py] [_log()] userauth is OK
2026-04-16T00:08:18.816 [DEBUG] [Thread-28138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:08:18.816 [DEBUG] [Thread-28138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:08:18.816 [DEBUG] [Thread-28138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:08:18.817 [DEBUG] [Thread-28138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:08:18.830 [INFO] [Thread-28138] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:08:18.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:08:19.643 [DEBUG] [Thread-28138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:08:19.643 [DEBUG] [Thread-28138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:08:19.644 [DEBUG] [Thread-28138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:08:19.684 [DEBUG] [Thread-28138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:08:19.684 [DEBUG] [Thread-28138] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:08:19.687 [DEBUG] [Thread-28138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:08:19.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:08:19.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:08:19.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:08:19.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:08:19.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:08:19.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:08:19.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:08:19.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:08:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:08:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.922003 -999.00   +9.50   9.40     80   +6.40 1 1 1 2 1     0    0 4.16 37.67 ZNESW 9.2 9.4 113.4 11.2 9.8 -24.8 9.7 -23.7 9.4 -21.4 9.7 -23.5
2026-04-16T00:08:19.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:08:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:08:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.922003
2026-04-16T00:08:19.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:08:19.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:08:19.709 [DEBUG] [Thread-28138] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:08:19.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:08:19.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:08:19.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:08:19.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:07:54', tmtdew=3.07205, humidity=81.0254, cloud=0.0, wind=13.8686, temperature=8.99393, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:07:41.059', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056750000000000966, -0.0807500000000001, -0.018749999999998934, -0.046499999999999986, -0.013500000000000512, -0.01425000000000054, -0.014000000000001123, 0.0002500000000011937, -0.04550000000000054, -0.10200000000000031, -0.05375000000000085, -0.09549999999999947, -0.0009999999999994458, 0.0182500000000001, -0.023000000000001464, -0.028999999999999915, -0.013749999999999929, -0.06400000000000006, -0.015000000000000568, -0.021750000000000824, -0.002500000000001279, 0.03274999999999828, 0.03625000000000078, -0.019249999999999545, -0.020500000000000185, -0.06300000000000061, -0.011250000000000426, -0.006999999999999673, 0.006000000000000227, 0.010000000000001563, 0.048500000000000654, 0.03300000000000125, 0.0037499999999983658], zp_timestamp='2026-04-15T22:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:08:19.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:08:19.933 [DEBUG] [Thread-28141] [transport.py] [_log()] starting thread (client mode): 0xf13cbbe0
2026-04-16T00:08:19.933 [DEBUG] [Thread-28141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:08:19.952 [DEBUG] [Thread-28141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:08:19.952 [INFO] [Thread-28141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:08:19.960 [DEBUG] [Thread-28141] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:08:19.960 [DEBUG] [Thread-28141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:08:19.960 [DEBUG] [Thread-28141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:08:19.960 [DEBUG] [Thread-28141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:08:19.960 [DEBUG] [Thread-28141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:08:19.960 [DEBUG] [Thread-28141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:08:19.960 [DEBUG] [Thread-28141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:08:19.960 [DEBUG] [Thread-28141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:08:19.960 [DEBUG] [Thread-28141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:08:19.961 [DEBUG] [Thread-28141] [transport.py] [_log()] client lang: <none>
2026-04-16T00:08:19.961 [DEBUG] [Thread-28141] [transport.py] [_log()] server lang: <none>
2026-04-16T00:08:19.961 [DEBUG] [Thread-28141] [transport.py] [_log()] kex follows: False
2026-04-16T00:08:19.961 [DEBUG] [Thread-28141] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:08:19.961 [DEBUG] [Thread-28141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:08:19.961 [DEBUG] [Thread-28141] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:08:19.961 [DEBUG] [Thread-28141] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:08:19.961 [DEBUG] [Thread-28141] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:08:19.961 [DEBUG] [Thread-28141] [transport.py] [_log()] Compression: none
2026-04-16T00:08:19.961 [DEBUG] [Thread-28141] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:08:20.019 [DEBUG] [Thread-28141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:08:20.019 [DEBUG] [Thread-28141] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:08:20.019 [DEBUG] [Thread-28141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:08:20.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:08:20.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:08:20.075 [DEBUG] [Thread-28141] [transport.py] [_log()] userauth is OK
2026-04-16T00:08:20.075 [DEBUG] [Thread-28141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:08:20.075 [DEBUG] [Thread-28141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:08:20.076 [DEBUG] [Thread-28141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:08:20.076 [DEBUG] [Thread-28141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:08:20.102 [INFO] [Thread-28141] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:08:20.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:08:20.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:08:20.736 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:08:20.918 [DEBUG] [Thread-28141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:08:20.919 [DEBUG] [Thread-28141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:08:20.967 [DEBUG] [Thread-28141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:08:20.967 [DEBUG] [Thread-28141] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:08:20.975 [DEBUG] [Thread-28141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:08:20.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:08:20.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')
2026-04-16T00:08:20.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
2026-04-16T00:08:20.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:08:20.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:08:20.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:08:21.007 [DEBUG] [Thread-28141] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:08:21.339 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:08:21.340 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:08:27.104 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:08:32.865 [DEBUG] [Thread-28143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:08:42.759 [DEBUG] [Thread-28144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:08:47.912 [DEBUG] [Thread-28145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:08:51.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:08:51.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:08:51.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
2026-04-16T00:08:52.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 8, 29), 3.49492, 78.9629, 0.0, 11.5758, 9.14695, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:08:52.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:08:29
2026-04-16T00:08:52.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:08:53.123 [DEBUG] [Thread-28146] [transport.py] [_log()] starting thread (client mode): 0xf13c9690
2026-04-16T00:08:53.124 [DEBUG] [Thread-28146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:08:53.142 [DEBUG] [Thread-28146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:08:53.142 [INFO] [Thread-28146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:08:53.145 [DEBUG] [Thread-28146] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:08:53.145 [DEBUG] [Thread-28146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:08:53.146 [DEBUG] [Thread-28146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:08:53.146 [DEBUG] [Thread-28146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:08:53.146 [DEBUG] [Thread-28146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:08:53.146 [DEBUG] [Thread-28146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:08:53.146 [DEBUG] [Thread-28146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:08:53.146 [DEBUG] [Thread-28146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:08:53.146 [DEBUG] [Thread-28146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:08:53.146 [DEBUG] [Thread-28146] [transport.py] [_log()] client lang: <none>
2026-04-16T00:08:53.146 [DEBUG] [Thread-28146] [transport.py] [_log()] server lang: <none>
2026-04-16T00:08:53.146 [DEBUG] [Thread-28146] [transport.py] [_log()] kex follows: False
2026-04-16T00:08:53.146 [DEBUG] [Thread-28146] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:08:53.146 [DEBUG] [Thread-28146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:08:53.147 [DEBUG] [Thread-28146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:08:53.147 [DEBUG] [Thread-28146] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:08:53.147 [DEBUG] [Thread-28146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:08:53.147 [DEBUG] [Thread-28146] [transport.py] [_log()] Compression: none
2026-04-16T00:08:53.147 [DEBUG] [Thread-28146] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:08:53.163 [DEBUG] [Thread-28146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:08:53.163 [DEBUG] [Thread-28146] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:08:53.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:08:53.164 [DEBUG] [Thread-28146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:08:53.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:08:53.165 [DEBUG] [Thread-28146] [transport.py] [_log()] userauth is OK
2026-04-16T00:08:53.165 [DEBUG] [Thread-28146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:08:53.165 [DEBUG] [Thread-28146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:08:53.165 [DEBUG] [Thread-28146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:08:53.165 [DEBUG] [Thread-28146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:08:53.183 [INFO] [Thread-28146] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:08:53.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:08:53.951 [DEBUG] [Thread-28146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:08:53.952 [DEBUG] [Thread-28146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:08:53.952 [DEBUG] [Thread-28146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:08:53.993 [DEBUG] [Thread-28146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:08:53.993 [DEBUG] [Thread-28146] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:08:53.996 [DEBUG] [Thread-28146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:08:54.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:08:54.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:08:54.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:08:54.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:08:54.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:08:54.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:08:54.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:08:54.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:08:54.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:08:54.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.922350 -999.00   +9.50   5.53     81   +6.40 1 1 1 2 1     0    0 4.08 33.63 ZNESW 5.3 5.5 93.5 11.0 9.9 -25.0 9.7 -23.7 9.4 -21.5 9.7 -23.6
2026-04-16T00:08:54.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:08:54.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:08:54.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.922350
2026-04-16T00:08:54.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:08:54.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:08:54.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:08:54.015 [DEBUG] [Thread-28146] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:08:54.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:08:54.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:08:54.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:08:29', tmtdew=3.49492, humidity=78.9629, cloud=0.0, wind=11.5758, temperature=9.14695, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:08:11.040', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056750000000000966, -0.0807500000000001, -0.018749999999998934, -0.046499999999999986, -0.013500000000000512, -0.01425000000000054, -0.014000000000001123, 0.0002500000000011937, -0.04550000000000054, -0.10200000000000031, -0.05375000000000085, -0.09549999999999947, -0.0009999999999994458, 0.0182500000000001, -0.023000000000001464, -0.028999999999999915, -0.013749999999999929, -0.06400000000000006, -0.015000000000000568, -0.021750000000000824, -0.002500000000001279, 0.03274999999999828, 0.03625000000000078, -0.019249999999999545, -0.020500000000000185, -0.06300000000000061, -0.011250000000000426, -0.006999999999999673, 0.006000000000000227, 0.010000000000001563, 0.048500000000000654, 0.03300000000000125, 0.0037499999999983658], zp_timestamp='2026-04-15T22:04:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:08:54.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:08:54.227 [DEBUG] [Thread-28149] [transport.py] [_log()] starting thread (client mode): 0xee991f00
2026-04-16T00:08:54.227 [DEBUG] [Thread-28149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:08:54.242 [DEBUG] [Thread-28149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:08:54.242 [INFO] [Thread-28149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:08:54.250 [DEBUG] [Thread-28149] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:08:54.250 [DEBUG] [Thread-28149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:08:54.250 [DEBUG] [Thread-28149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:08:54.250 [DEBUG] [Thread-28149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:08:54.250 [DEBUG] [Thread-28149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:08:54.250 [DEBUG] [Thread-28149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:08:54.250 [DEBUG] [Thread-28149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:08:54.250 [DEBUG] [Thread-28149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:08:54.251 [DEBUG] [Thread-28149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:08:54.251 [DEBUG] [Thread-28149] [transport.py] [_log()] client lang: <none>
2026-04-16T00:08:54.251 [DEBUG] [Thread-28149] [transport.py] [_log()] server lang: <none>
2026-04-16T00:08:54.251 [DEBUG] [Thread-28149] [transport.py] [_log()] kex follows: False
2026-04-16T00:08:54.251 [DEBUG] [Thread-28149] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:08:54.251 [DEBUG] [Thread-28149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:08:54.251 [DEBUG] [Thread-28149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:08:54.251 [DEBUG] [Thread-28149] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:08:54.251 [DEBUG] [Thread-28149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:08:54.251 [DEBUG] [Thread-28149] [transport.py] [_log()] Compression: none
2026-04-16T00:08:54.251 [DEBUG] [Thread-28149] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:08:54.306 [DEBUG] [Thread-28149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:08:54.306 [DEBUG] [Thread-28149] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:08:54.306 [DEBUG] [Thread-28149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:08:54.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:08:54.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:08:54.362 [DEBUG] [Thread-28149] [transport.py] [_log()] userauth is OK
2026-04-16T00:08:54.362 [DEBUG] [Thread-28149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:08:54.363 [DEBUG] [Thread-28149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:08:54.363 [DEBUG] [Thread-28149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:08:54.363 [DEBUG] [Thread-28149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:08:54.388 [INFO] [Thread-28149] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:08:54.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:08:54.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:08:55.209 [DEBUG] [Thread-28149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:08:55.209 [DEBUG] [Thread-28149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:08:55.261 [DEBUG] [Thread-28149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:08:55.261 [DEBUG] [Thread-28149] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:08:55.270 [DEBUG] [Thread-28149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:08:55.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:08:55.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')
2026-04-16T00:08:55.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
2026-04-16T00:08:55.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:08:55.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:08:55.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:08:55.309 [DEBUG] [Thread-28149] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:09:02.942 [DEBUG] [Thread-28151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:09:17.979 [DEBUG] [Thread-28152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:09:21.542 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:09:21.543 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:09:25.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:09:25.332 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:09:25.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
2026-04-16T00:09:26.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 9, 4), 3.49235, 78.9795, 0.0, 11.8933, 9.16354, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:09:26.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:09:04
2026-04-16T00:09:26.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:09:27.420 [DEBUG] [Thread-28153] [transport.py] [_log()] starting thread (client mode): 0xf13668c0
2026-04-16T00:09:27.420 [DEBUG] [Thread-28153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:09:27.442 [DEBUG] [Thread-28153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:09:27.442 [INFO] [Thread-28153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:09:27.445 [DEBUG] [Thread-28153] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:09:27.445 [DEBUG] [Thread-28153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:09:27.445 [DEBUG] [Thread-28153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:09:27.445 [DEBUG] [Thread-28153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:09:27.445 [DEBUG] [Thread-28153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:09:27.446 [DEBUG] [Thread-28153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:09:27.446 [DEBUG] [Thread-28153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:09:27.446 [DEBUG] [Thread-28153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:09:27.446 [DEBUG] [Thread-28153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:09:27.446 [DEBUG] [Thread-28153] [transport.py] [_log()] client lang: <none>
2026-04-16T00:09:27.446 [DEBUG] [Thread-28153] [transport.py] [_log()] server lang: <none>
2026-04-16T00:09:27.446 [DEBUG] [Thread-28153] [transport.py] [_log()] kex follows: False
2026-04-16T00:09:27.446 [DEBUG] [Thread-28153] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:09:27.446 [DEBUG] [Thread-28153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:09:27.446 [DEBUG] [Thread-28153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:09:27.447 [DEBUG] [Thread-28153] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:09:27.447 [DEBUG] [Thread-28153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:09:27.447 [DEBUG] [Thread-28153] [transport.py] [_log()] Compression: none
2026-04-16T00:09:27.447 [DEBUG] [Thread-28153] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:09:27.464 [DEBUG] [Thread-28153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:09:27.464 [DEBUG] [Thread-28153] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:09:27.465 [DEBUG] [Thread-28153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:09:27.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:09:27.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:09:27.466 [DEBUG] [Thread-28153] [transport.py] [_log()] userauth is OK
2026-04-16T00:09:27.466 [DEBUG] [Thread-28153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:09:27.467 [DEBUG] [Thread-28153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:09:27.467 [DEBUG] [Thread-28153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:09:27.467 [DEBUG] [Thread-28153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:09:27.492 [INFO] [Thread-28153] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:09:27.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:09:28.291 [DEBUG] [Thread-28153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:09:28.292 [DEBUG] [Thread-28153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:09:28.292 [DEBUG] [Thread-28153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:09:28.333 [DEBUG] [Thread-28153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:09:28.333 [DEBUG] [Thread-28153] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:09:28.336 [DEBUG] [Thread-28153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:09:28.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:09:28.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:09:28.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:09:28.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:09:28.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:09:28.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:09:28.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:09:28.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:09:28.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:09:28.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.922697 -999.00   +9.50   6.89     81   +6.40 1 1 1 2 1     0    0 4.05 34.67 ZNESW 7.5 6.9 111.4 10.2 9.8 -24.8 9.7 -23.7 9.4 -21.4 9.7 -23.6
2026-04-16T00:09:28.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:09:28.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:09:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.922697
2026-04-16T00:09:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:09:28.360 [DEBUG] [Thread-28153] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:09:28.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:09:28.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:09:28.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:09:28.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:09:28.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:09:04', tmtdew=3.49235, humidity=78.9795, cloud=0.0, wind=11.8933, temperature=9.16354, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:08:41.021', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056750000000000966, -0.0807500000000001, -0.018749999999998934, -0.046499999999999986, -0.013500000000000512, -0.01425000000000054, -0.014000000000001123, 0.0002500000000011937, -0.04550000000000054, -0.10200000000000031, -0.05375000000000085, -0.09549999999999947, -0.0009999999999994458, 0.0182500000000001, -0.023000000000001464, -0.028999999999999915, -0.013749999999999929, -0.06400000000000006, -0.015000000000000568, -0.021750000000000824, -0.002500000000001279, 0.03274999999999828, 0.03625000000000078, -0.019249999999999545, -0.020500000000000185, -0.06300000000000061, -0.011250000000000426, -0.006999999999999673, 0.006000000000000227, 0.010000000000001563, 0.048500000000000654, 0.03300000000000125, 0.0037499999999983658], zp_timestamp='2026-04-15T22:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:09:28.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:09:28.620 [DEBUG] [Thread-28156] [transport.py] [_log()] starting thread (client mode): 0xee992da0
2026-04-16T00:09:28.621 [DEBUG] [Thread-28156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:09:28.635 [DEBUG] [Thread-28156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:09:28.635 [INFO] [Thread-28156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:09:28.642 [DEBUG] [Thread-28156] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:09:28.642 [DEBUG] [Thread-28156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:09:28.642 [DEBUG] [Thread-28156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:09:28.643 [DEBUG] [Thread-28156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:09:28.643 [DEBUG] [Thread-28156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:09:28.643 [DEBUG] [Thread-28156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:09:28.643 [DEBUG] [Thread-28156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:09:28.643 [DEBUG] [Thread-28156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:09:28.643 [DEBUG] [Thread-28156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:09:28.643 [DEBUG] [Thread-28156] [transport.py] [_log()] client lang: <none>
2026-04-16T00:09:28.643 [DEBUG] [Thread-28156] [transport.py] [_log()] server lang: <none>
2026-04-16T00:09:28.643 [DEBUG] [Thread-28156] [transport.py] [_log()] kex follows: False
2026-04-16T00:09:28.643 [DEBUG] [Thread-28156] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:09:28.643 [DEBUG] [Thread-28156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:09:28.643 [DEBUG] [Thread-28156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:09:28.644 [DEBUG] [Thread-28156] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:09:28.644 [DEBUG] [Thread-28156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:09:28.644 [DEBUG] [Thread-28156] [transport.py] [_log()] Compression: none
2026-04-16T00:09:28.644 [DEBUG] [Thread-28156] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:09:28.701 [DEBUG] [Thread-28156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:09:28.701 [DEBUG] [Thread-28156] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:09:28.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:09:28.702 [DEBUG] [Thread-28156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:09:28.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:09:28.758 [DEBUG] [Thread-28156] [transport.py] [_log()] userauth is OK
2026-04-16T00:09:28.758 [DEBUG] [Thread-28156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:09:28.758 [DEBUG] [Thread-28156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:09:28.758 [DEBUG] [Thread-28156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:09:28.759 [DEBUG] [Thread-28156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:09:28.784 [INFO] [Thread-28156] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:09:28.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:09:28.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:09:29.594 [DEBUG] [Thread-28156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:09:29.594 [DEBUG] [Thread-28156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:09:29.642 [DEBUG] [Thread-28156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:09:29.642 [DEBUG] [Thread-28156] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:09:29.650 [DEBUG] [Thread-28156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:09:29.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:09:29.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')
2026-04-16T00:09: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') -> 00000000
2026-04-16T00:09:29.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:09:29.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:09:29.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:09:29.684 [DEBUG] [Thread-28156] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:09:33.008 [DEBUG] [Thread-28158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:09:42.903 [DEBUG] [Thread-28159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:09:48.053 [DEBUG] [Thread-28160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:09:59.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:09:59.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:09:59.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
2026-04-16T00:10:00.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 9, 40), 3.09062, 80.9258, 0.0, 11.4696, 9.02709, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:10:00.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:09:40
2026-04-16T00:10:01.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:10:01.795 [DEBUG] [Thread-28161] [transport.py] [_log()] starting thread (client mode): 0xf13cab60
2026-04-16T00:10:01.795 [DEBUG] [Thread-28161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:10:01.815 [DEBUG] [Thread-28161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:10:01.815 [INFO] [Thread-28161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:10:01.819 [DEBUG] [Thread-28161] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:10:01.819 [DEBUG] [Thread-28161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:10:01.819 [DEBUG] [Thread-28161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:10:01.819 [DEBUG] [Thread-28161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:10:01.819 [DEBUG] [Thread-28161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:10:01.819 [DEBUG] [Thread-28161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:10:01.819 [DEBUG] [Thread-28161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:10:01.819 [DEBUG] [Thread-28161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:10:01.819 [DEBUG] [Thread-28161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:10:01.819 [DEBUG] [Thread-28161] [transport.py] [_log()] client lang: <none>
2026-04-16T00:10:01.820 [DEBUG] [Thread-28161] [transport.py] [_log()] server lang: <none>
2026-04-16T00:10:01.820 [DEBUG] [Thread-28161] [transport.py] [_log()] kex follows: False
2026-04-16T00:10:01.820 [DEBUG] [Thread-28161] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:10:01.820 [DEBUG] [Thread-28161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:10:01.820 [DEBUG] [Thread-28161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:10:01.820 [DEBUG] [Thread-28161] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:10:01.820 [DEBUG] [Thread-28161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:10:01.820 [DEBUG] [Thread-28161] [transport.py] [_log()] Compression: none
2026-04-16T00:10:01.820 [DEBUG] [Thread-28161] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:10:01.836 [DEBUG] [Thread-28161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:10:01.837 [DEBUG] [Thread-28161] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:10:01.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:10:01.838 [DEBUG] [Thread-28161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:10:01.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:10:01.880 [DEBUG] [Thread-28161] [transport.py] [_log()] userauth is OK
2026-04-16T00:10:01.881 [DEBUG] [Thread-28161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:10:01.881 [DEBUG] [Thread-28161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:10:01.881 [DEBUG] [Thread-28161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:10:01.881 [DEBUG] [Thread-28161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:10:01.917 [INFO] [Thread-28161] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:10:01.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:10:02.637 [DEBUG] [Thread-28161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:10:02.637 [DEBUG] [Thread-28161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:10:02.638 [DEBUG] [Thread-28161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:10:02.678 [DEBUG] [Thread-28161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:10:02.678 [DEBUG] [Thread-28161] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:10:02.680 [DEBUG] [Thread-28161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:10:02.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:10:02.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:10:02.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:10:02.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:10:02.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:10:02.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:10:02.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:10:02.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:10:02.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:10:02.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.923045 -999.00   +9.50   6.49     81   +6.40 1 1 1 2 1     0    0 4.01 30.02 ZNESW 7.5 6.5 110.8 8.9 9.9 -24.9 9.7 -23.6 9.3 -21.7 9.7 -23.6
2026-04-16T00:10:02.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:10:02.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:10:02.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.923045
2026-04-16T00:10:02.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:10:02.700 [DEBUG] [Thread-28161] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:10:02.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:10:02.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:10:02.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:10:02.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:10:02.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:09:40', tmtdew=3.09062, humidity=80.9258, cloud=0.0, wind=11.4696, temperature=9.02709, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:09:11.088', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056750000000000966, -0.0807500000000001, -0.018749999999998934, -0.046499999999999986, -0.013500000000000512, -0.01425000000000054, -0.014000000000001123, 0.0002500000000011937, -0.04550000000000054, -0.10200000000000031, -0.05375000000000085, -0.09549999999999947, -0.0009999999999994458, 0.0182500000000001, -0.023000000000001464, -0.028999999999999915, -0.013749999999999929, -0.06400000000000006, -0.015000000000000568, -0.021750000000000824, -0.002500000000001279, 0.03274999999999828, 0.03625000000000078, -0.019249999999999545, -0.020500000000000185, -0.06300000000000061, -0.011250000000000426, -0.006999999999999673, 0.006000000000000227, 0.010000000000001563, 0.048500000000000654, 0.03300000000000125, 0.0037499999999983658], zp_timestamp='2026-04-15T22:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:10:02.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:10:02.964 [DEBUG] [Thread-28164] [transport.py] [_log()] starting thread (client mode): 0xee9c57e0
2026-04-16T00:10:02.964 [DEBUG] [Thread-28164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:10:02.978 [DEBUG] [Thread-28164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:10:02.978 [INFO] [Thread-28164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:10:02.986 [DEBUG] [Thread-28164] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:10:02.986 [DEBUG] [Thread-28164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:10:02.986 [DEBUG] [Thread-28164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:10:02.986 [DEBUG] [Thread-28164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:10:02.986 [DEBUG] [Thread-28164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:10:02.986 [DEBUG] [Thread-28164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:10:02.986 [DEBUG] [Thread-28164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:10:02.986 [DEBUG] [Thread-28164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:10:02.986 [DEBUG] [Thread-28164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:10:02.986 [DEBUG] [Thread-28164] [transport.py] [_log()] client lang: <none>
2026-04-16T00:10:02.986 [DEBUG] [Thread-28164] [transport.py] [_log()] server lang: <none>
2026-04-16T00:10:02.987 [DEBUG] [Thread-28164] [transport.py] [_log()] kex follows: False
2026-04-16T00:10:02.987 [DEBUG] [Thread-28164] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:10:02.987 [DEBUG] [Thread-28164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:10:02.987 [DEBUG] [Thread-28164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:10:02.987 [DEBUG] [Thread-28164] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:10:02.987 [DEBUG] [Thread-28164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:10:02.987 [DEBUG] [Thread-28164] [transport.py] [_log()] Compression: none
2026-04-16T00:10:02.987 [DEBUG] [Thread-28164] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:10:03.042 [DEBUG] [Thread-28164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:10:03.042 [DEBUG] [Thread-28164] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:10:03.043 [DEBUG] [Thread-28164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:10:03.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:10:03.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:10:03.083 [DEBUG] [Thread-28166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:10:03.097 [DEBUG] [Thread-28164] [transport.py] [_log()] userauth is OK
2026-04-16T00:10:03.097 [DEBUG] [Thread-28164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:10:03.098 [DEBUG] [Thread-28164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:10:03.098 [DEBUG] [Thread-28164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:10:03.098 [DEBUG] [Thread-28164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:10:03.120 [INFO] [Thread-28164] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:10:03.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:10:03.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:10:03.963 [DEBUG] [Thread-28164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:10:03.964 [DEBUG] [Thread-28164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:10:04.011 [DEBUG] [Thread-28164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:10:04.011 [DEBUG] [Thread-28164] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:10:04.020 [DEBUG] [Thread-28164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:10:04.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:10:04.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')
2026-04-16T00:10: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') -> 00000000
2026-04-16T00:10:04.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:10:04.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:10:04.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:10:04.054 [DEBUG] [Thread-28164] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:10:18.125 [DEBUG] [Thread-28167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:10:21.754 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:10:21.755 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:10:33.157 [DEBUG] [Thread-28168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:10:34.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:10:34.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:10:34.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
2026-04-16T00:10:35.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 10, 16), 3.50258, 78.9135, 0.0, 9.38772, 9.09741, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:10:35.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:10:16
2026-04-16T00:10:35.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:10:36.188 [DEBUG] [Thread-28169] [transport.py] [_log()] starting thread (client mode): 0xee933ac0
2026-04-16T00:10:36.188 [DEBUG] [Thread-28169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:10:36.208 [DEBUG] [Thread-28169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:10:36.208 [INFO] [Thread-28169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:10:36.211 [DEBUG] [Thread-28169] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:10:36.211 [DEBUG] [Thread-28169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:10:36.211 [DEBUG] [Thread-28169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:10:36.211 [DEBUG] [Thread-28169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:10:36.211 [DEBUG] [Thread-28169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:10:36.211 [DEBUG] [Thread-28169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:10:36.211 [DEBUG] [Thread-28169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:10:36.211 [DEBUG] [Thread-28169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:10:36.211 [DEBUG] [Thread-28169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:10:36.211 [DEBUG] [Thread-28169] [transport.py] [_log()] client lang: <none>
2026-04-16T00:10:36.211 [DEBUG] [Thread-28169] [transport.py] [_log()] server lang: <none>
2026-04-16T00:10:36.212 [DEBUG] [Thread-28169] [transport.py] [_log()] kex follows: False
2026-04-16T00:10:36.212 [DEBUG] [Thread-28169] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:10:36.212 [DEBUG] [Thread-28169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:10:36.212 [DEBUG] [Thread-28169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:10:36.212 [DEBUG] [Thread-28169] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:10:36.212 [DEBUG] [Thread-28169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:10:36.212 [DEBUG] [Thread-28169] [transport.py] [_log()] Compression: none
2026-04-16T00:10:36.212 [DEBUG] [Thread-28169] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:10:36.228 [DEBUG] [Thread-28169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:10:36.228 [DEBUG] [Thread-28169] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:10:36.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:10:36.229 [DEBUG] [Thread-28169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:10:36.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:10:36.230 [DEBUG] [Thread-28169] [transport.py] [_log()] userauth is OK
2026-04-16T00:10:36.230 [DEBUG] [Thread-28169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:10:36.230 [DEBUG] [Thread-28169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:10:36.230 [DEBUG] [Thread-28169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:10:36.230 [DEBUG] [Thread-28169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:10:36.251 [INFO] [Thread-28169] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:10:36.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:10:36.892 [DEBUG] [Thread-28169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:10:36.892 [DEBUG] [Thread-28169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:10:36.893 [DEBUG] [Thread-28169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:10:36.933 [DEBUG] [Thread-28169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:10:36.933 [DEBUG] [Thread-28169] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:10:36.936 [DEBUG] [Thread-28169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:10:36.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:10:36.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:10:36.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:10:36.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:10:36.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:10:36.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:10:36.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:10:36.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:10:36.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:10:36.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.923392 -999.00   +9.50   7.50     81   +6.50 1 1 1 2 1     0    0 3.99 28.30 ZNESW 6.3 7.5 132.0 10.6 9.8 -25.1 9.7 -23.8 9.4 -21.6 9.7 -23.7
2026-04-16T00:10:36.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:10:36.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:10:36.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.923392
2026-04-16T00:10:36.961 [DEBUG] [Thread-28169] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:10:36.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:10:36.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:10:36.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:10:36.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:10:36.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:10:36.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:10:16', tmtdew=3.50258, humidity=78.9135, cloud=0.0, wind=9.38772, temperature=9.09741, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:09:41.069', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056750000000000966, -0.0807500000000001, -0.018749999999998934, -0.046499999999999986, -0.013500000000000512, -0.01425000000000054, -0.014000000000001123, 0.0002500000000011937, -0.04550000000000054, -0.10200000000000031, -0.05375000000000085, -0.09549999999999947, -0.0009999999999994458, 0.0182500000000001, -0.023000000000001464, -0.028999999999999915, -0.013749999999999929, -0.06400000000000006, -0.015000000000000568, -0.021750000000000824, -0.002500000000001279, 0.03274999999999828, 0.03625000000000078, -0.019249999999999545, -0.020500000000000185, -0.06300000000000061, -0.011250000000000426, -0.006999999999999673, 0.006000000000000227, 0.010000000000001563, 0.048500000000000654, 0.03300000000000125, 0.0037499999999983658], zp_timestamp='2026-04-15T22:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:10:37.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:10:37.218 [DEBUG] [Thread-28172] [transport.py] [_log()] starting thread (client mode): 0xee931f60
2026-04-16T00:10:37.218 [DEBUG] [Thread-28172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:10:37.232 [DEBUG] [Thread-28172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:10:37.232 [INFO] [Thread-28172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:10:37.240 [DEBUG] [Thread-28172] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:10:37.240 [DEBUG] [Thread-28172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:10:37.240 [DEBUG] [Thread-28172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:10:37.240 [DEBUG] [Thread-28172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:10:37.240 [DEBUG] [Thread-28172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:10:37.240 [DEBUG] [Thread-28172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:10:37.240 [DEBUG] [Thread-28172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:10:37.241 [DEBUG] [Thread-28172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:10:37.241 [DEBUG] [Thread-28172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:10:37.241 [DEBUG] [Thread-28172] [transport.py] [_log()] client lang: <none>
2026-04-16T00:10:37.241 [DEBUG] [Thread-28172] [transport.py] [_log()] server lang: <none>
2026-04-16T00:10:37.241 [DEBUG] [Thread-28172] [transport.py] [_log()] kex follows: False
2026-04-16T00:10:37.241 [DEBUG] [Thread-28172] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:10:37.242 [DEBUG] [Thread-28172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:10:37.242 [DEBUG] [Thread-28172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:10:37.242 [DEBUG] [Thread-28172] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:10:37.242 [DEBUG] [Thread-28172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:10:37.242 [DEBUG] [Thread-28172] [transport.py] [_log()] Compression: none
2026-04-16T00:10:37.242 [DEBUG] [Thread-28172] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:10:37.296 [DEBUG] [Thread-28172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:10:37.297 [DEBUG] [Thread-28172] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:10:37.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:10:37.297 [DEBUG] [Thread-28172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:10:37.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:10:37.353 [DEBUG] [Thread-28172] [transport.py] [_log()] userauth is OK
2026-04-16T00:10:37.354 [DEBUG] [Thread-28172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:10:37.354 [DEBUG] [Thread-28172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:10:37.354 [DEBUG] [Thread-28172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:10:37.354 [DEBUG] [Thread-28172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:10:37.377 [INFO] [Thread-28172] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:10:37.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:10:37.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:10:38.169 [DEBUG] [Thread-28172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:10:38.170 [DEBUG] [Thread-28172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:10:38.217 [DEBUG] [Thread-28172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:10:38.217 [DEBUG] [Thread-28172] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:10:38.226 [DEBUG] [Thread-28172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:10:38.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:10:38.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')
2026-04-16T00:10:38.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
2026-04-16T00:10:38.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:10:38.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:10:38.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:10:38.265 [DEBUG] [Thread-28172] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:10:43.054 [DEBUG] [Thread-28174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:10:48.187 [DEBUG] [Thread-28175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:11:03.233 [DEBUG] [Thread-28176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:11:08.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:11:08.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:11:08.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
2026-04-16T00:11:09.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 10, 51), 3.1214, 80.7272, 0.0, 11.5754, 8.82836, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:11:09.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:10:51
2026-04-16T00:11:09.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:11:10.404 [DEBUG] [Thread-28177] [transport.py] [_log()] starting thread (client mode): 0xf1367490
2026-04-16T00:11:10.404 [DEBUG] [Thread-28177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:11:10.423 [DEBUG] [Thread-28177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:11:10.423 [INFO] [Thread-28177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:11:10.427 [DEBUG] [Thread-28177] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:11:10.427 [DEBUG] [Thread-28177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:11:10.427 [DEBUG] [Thread-28177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:11:10.427 [DEBUG] [Thread-28177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:11:10.427 [DEBUG] [Thread-28177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:11:10.427 [DEBUG] [Thread-28177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:11:10.427 [DEBUG] [Thread-28177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:11:10.427 [DEBUG] [Thread-28177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:11:10.427 [DEBUG] [Thread-28177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:11:10.427 [DEBUG] [Thread-28177] [transport.py] [_log()] client lang: <none>
2026-04-16T00:11:10.428 [DEBUG] [Thread-28177] [transport.py] [_log()] server lang: <none>
2026-04-16T00:11:10.428 [DEBUG] [Thread-28177] [transport.py] [_log()] kex follows: False
2026-04-16T00:11:10.428 [DEBUG] [Thread-28177] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:11:10.428 [DEBUG] [Thread-28177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:11:10.428 [DEBUG] [Thread-28177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:11:10.428 [DEBUG] [Thread-28177] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:11:10.428 [DEBUG] [Thread-28177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:11:10.428 [DEBUG] [Thread-28177] [transport.py] [_log()] Compression: none
2026-04-16T00:11:10.428 [DEBUG] [Thread-28177] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:11:10.443 [DEBUG] [Thread-28177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:11:10.443 [DEBUG] [Thread-28177] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:11:10.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:11:10.444 [DEBUG] [Thread-28177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:11:10.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:11:10.484 [DEBUG] [Thread-28177] [transport.py] [_log()] userauth is OK
2026-04-16T00:11:10.484 [DEBUG] [Thread-28177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:11:10.485 [DEBUG] [Thread-28177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:11:10.485 [DEBUG] [Thread-28177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:11:10.485 [DEBUG] [Thread-28177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:11:10.520 [INFO] [Thread-28177] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:11:10.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:11:11.127 [DEBUG] [Thread-28177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:11:11.127 [DEBUG] [Thread-28177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:11:11.128 [DEBUG] [Thread-28177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:11:11.168 [DEBUG] [Thread-28177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:11:11.168 [DEBUG] [Thread-28177] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:11:11.170 [DEBUG] [Thread-28177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:11:11.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:11:11.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:11:11.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:11:11.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:11:11.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:11:11.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:11:11.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:11:11.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:11:11.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:11:11.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.924086 -999.00   +9.50   8.76     81   +6.50 1 1 1 2 1     0    0 3.69 20.61 ZNESW 9.1 8.8 115.6 9.3 9.8 -25.0 9.7 -23.7 9.4 -21.4 9.7 -23.5
2026-04-16T00:11:11.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:11:11.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:11:11.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.924086
2026-04-16T00:11:11.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:11:11.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:11:11.194 [DEBUG] [Thread-28177] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:11:11.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:11:11.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:11:11.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:11:11.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:10:51', tmtdew=3.1214, humidity=80.7272, cloud=0.0, wind=11.5754, temperature=8.82836, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:10:41.030', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056750000000000966, -0.0807500000000001, -0.018749999999998934, -0.046499999999999986, -0.013500000000000512, -0.01425000000000054, -0.014000000000001123, 0.0002500000000011937, -0.04550000000000054, -0.10200000000000031, -0.05375000000000085, -0.09549999999999947, -0.0009999999999994458, 0.0182500000000001, -0.023000000000001464, -0.028999999999999915, -0.013749999999999929, -0.06400000000000006, -0.015000000000000568, -0.021750000000000824, -0.002500000000001279, 0.03274999999999828, 0.03625000000000078, -0.019249999999999545, -0.020500000000000185, -0.06300000000000061, -0.011250000000000426, -0.006999999999999673, 0.006000000000000227, 0.010000000000001563, 0.048500000000000654, 0.03300000000000125, 0.0037499999999983658], zp_timestamp='2026-04-15T22:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:11:11.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:11:11.448 [DEBUG] [Thread-28180] [transport.py] [_log()] starting thread (client mode): 0xf1366410
2026-04-16T00:11:11.448 [DEBUG] [Thread-28180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:11:11.462 [DEBUG] [Thread-28180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:11:11.462 [INFO] [Thread-28180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:11:11.469 [DEBUG] [Thread-28180] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:11:11.470 [DEBUG] [Thread-28180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:11:11.470 [DEBUG] [Thread-28180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:11:11.470 [DEBUG] [Thread-28180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:11:11.470 [DEBUG] [Thread-28180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:11:11.470 [DEBUG] [Thread-28180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:11:11.470 [DEBUG] [Thread-28180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:11:11.470 [DEBUG] [Thread-28180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:11:11.471 [DEBUG] [Thread-28180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:11:11.471 [DEBUG] [Thread-28180] [transport.py] [_log()] client lang: <none>
2026-04-16T00:11:11.471 [DEBUG] [Thread-28180] [transport.py] [_log()] server lang: <none>
2026-04-16T00:11:11.471 [DEBUG] [Thread-28180] [transport.py] [_log()] kex follows: False
2026-04-16T00:11:11.471 [DEBUG] [Thread-28180] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:11:11.471 [DEBUG] [Thread-28180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:11:11.471 [DEBUG] [Thread-28180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:11:11.471 [DEBUG] [Thread-28180] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:11:11.472 [DEBUG] [Thread-28180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:11:11.472 [DEBUG] [Thread-28180] [transport.py] [_log()] Compression: none
2026-04-16T00:11:11.472 [DEBUG] [Thread-28180] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:11:11.529 [DEBUG] [Thread-28180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:11:11.529 [DEBUG] [Thread-28180] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:11:11.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:11:11.530 [DEBUG] [Thread-28180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:11:11.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:11:11.589 [DEBUG] [Thread-28180] [transport.py] [_log()] userauth is OK
2026-04-16T00:11:11.589 [DEBUG] [Thread-28180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:11:11.590 [DEBUG] [Thread-28180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:11:11.590 [DEBUG] [Thread-28180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:11:11.590 [DEBUG] [Thread-28180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:11:11.617 [INFO] [Thread-28180] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:11:11.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:11:11.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:11:12.438 [DEBUG] [Thread-28180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:11:12.438 [DEBUG] [Thread-28180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:11:12.486 [DEBUG] [Thread-28180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:11:12.486 [DEBUG] [Thread-28180] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:11:12.496 [DEBUG] [Thread-28180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:11:12.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:11:12.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')
2026-04-16T00:11:12.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
2026-04-16T00:11:12.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:11:12.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:11:12.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:11:12.531 [DEBUG] [Thread-28180] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:11:18.262 [DEBUG] [Thread-28182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:11:21.956 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:11:21.957 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:11:33.372 [DEBUG] [Thread-28183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:11:42.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:11:42.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:11:42.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:11:43.198 [DEBUG] [Thread-28184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:11:43.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 11, 26), 3.50259, 78.9134, 0.0, 11.664, 9.09736, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:11:43.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:11:26
2026-04-16T00:11:44.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:11:44.605 [DEBUG] [Thread-28185] [transport.py] [_log()] starting thread (client mode): 0xf13c8040
2026-04-16T00:11:44.605 [DEBUG] [Thread-28185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:11:44.625 [DEBUG] [Thread-28185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:11:44.625 [INFO] [Thread-28185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:11:44.628 [DEBUG] [Thread-28185] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:11:44.628 [DEBUG] [Thread-28185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:11:44.628 [DEBUG] [Thread-28185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:11:44.628 [DEBUG] [Thread-28185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:11:44.628 [DEBUG] [Thread-28185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:11:44.628 [DEBUG] [Thread-28185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:11:44.629 [DEBUG] [Thread-28185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:11:44.629 [DEBUG] [Thread-28185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:11:44.629 [DEBUG] [Thread-28185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:11:44.629 [DEBUG] [Thread-28185] [transport.py] [_log()] client lang: <none>
2026-04-16T00:11:44.629 [DEBUG] [Thread-28185] [transport.py] [_log()] server lang: <none>
2026-04-16T00:11:44.629 [DEBUG] [Thread-28185] [transport.py] [_log()] kex follows: False
2026-04-16T00:11:44.629 [DEBUG] [Thread-28185] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:11:44.629 [DEBUG] [Thread-28185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:11:44.629 [DEBUG] [Thread-28185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:11:44.629 [DEBUG] [Thread-28185] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:11:44.630 [DEBUG] [Thread-28185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:11:44.630 [DEBUG] [Thread-28185] [transport.py] [_log()] Compression: none
2026-04-16T00:11:44.630 [DEBUG] [Thread-28185] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:11:44.647 [DEBUG] [Thread-28185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:11:44.647 [DEBUG] [Thread-28185] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:11:44.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:11:44.648 [DEBUG] [Thread-28185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:11:44.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:11:44.649 [DEBUG] [Thread-28185] [transport.py] [_log()] userauth is OK
2026-04-16T00:11:44.649 [DEBUG] [Thread-28185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:11:44.649 [DEBUG] [Thread-28185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:11:44.649 [DEBUG] [Thread-28185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:11:44.649 [DEBUG] [Thread-28185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:11:44.668 [INFO] [Thread-28185] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:11:44.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:11:45.315 [DEBUG] [Thread-28185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:11:45.315 [DEBUG] [Thread-28185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:11:45.316 [DEBUG] [Thread-28185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:11:45.356 [DEBUG] [Thread-28185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:11:45.356 [DEBUG] [Thread-28185] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:11:45.359 [DEBUG] [Thread-28185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:11:45.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:11:45.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:11:45.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:11:45.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:11:45.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:11:45.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:11:45.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:11:45.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:11:45.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:11:45.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.924433 -999.00   +9.40   7.50     81   +6.40 1 1 1 2 1     0    0 3.67 17.85 ZNESW 7.4 7.5 109.0 10.2 9.8 -25.0 9.7 -23.7 9.3 -21.5 9.7 -23.5
2026-04-16T00:11:45.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:11:45.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:11:45.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.924433
2026-04-16T00:11:45.385 [DEBUG] [Thread-28185] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:11:45.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:11:45.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:11:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:11:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:11:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:11:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:11:26', tmtdew=3.50259, humidity=78.9134, cloud=0.0, wind=11.664, temperature=9.09736, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:11:11.011', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056750000000000966, -0.0807500000000001, -0.018749999999998934, -0.046499999999999986, -0.013500000000000512, -0.01425000000000054, -0.014000000000001123, 0.0002500000000011937, -0.04550000000000054, -0.10200000000000031, -0.05375000000000085, -0.09549999999999947, -0.0009999999999994458, 0.0182500000000001, -0.023000000000001464, -0.028999999999999915, -0.013749999999999929, -0.06400000000000006, -0.015000000000000568, -0.021750000000000824, -0.002500000000001279, 0.03274999999999828, 0.03625000000000078, -0.019249999999999545, -0.020500000000000185, -0.06300000000000061, -0.011250000000000426, -0.006999999999999673, 0.006000000000000227, 0.010000000000001563, 0.048500000000000654, 0.03300000000000125, 0.0037499999999983658], zp_timestamp='2026-04-15T22:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:11:45.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:11:45.644 [DEBUG] [Thread-28188] [transport.py] [_log()] starting thread (client mode): 0xf13c9090
2026-04-16T00:11:45.644 [DEBUG] [Thread-28188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:11:45.658 [DEBUG] [Thread-28188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:11:45.658 [INFO] [Thread-28188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:11:45.666 [DEBUG] [Thread-28188] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:11:45.667 [DEBUG] [Thread-28188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:11:45.667 [DEBUG] [Thread-28188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:11:45.667 [DEBUG] [Thread-28188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:11:45.667 [DEBUG] [Thread-28188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:11:45.667 [DEBUG] [Thread-28188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:11:45.667 [DEBUG] [Thread-28188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:11:45.667 [DEBUG] [Thread-28188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:11:45.667 [DEBUG] [Thread-28188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:11:45.667 [DEBUG] [Thread-28188] [transport.py] [_log()] client lang: <none>
2026-04-16T00:11:45.667 [DEBUG] [Thread-28188] [transport.py] [_log()] server lang: <none>
2026-04-16T00:11:45.667 [DEBUG] [Thread-28188] [transport.py] [_log()] kex follows: False
2026-04-16T00:11:45.667 [DEBUG] [Thread-28188] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:11:45.668 [DEBUG] [Thread-28188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:11:45.668 [DEBUG] [Thread-28188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:11:45.668 [DEBUG] [Thread-28188] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:11:45.668 [DEBUG] [Thread-28188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:11:45.668 [DEBUG] [Thread-28188] [transport.py] [_log()] Compression: none
2026-04-16T00:11:45.668 [DEBUG] [Thread-28188] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:11:45.724 [DEBUG] [Thread-28188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:11:45.725 [DEBUG] [Thread-28188] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:11:45.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:11:45.725 [DEBUG] [Thread-28188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:11:45.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:11:45.784 [DEBUG] [Thread-28188] [transport.py] [_log()] userauth is OK
2026-04-16T00:11:45.784 [DEBUG] [Thread-28188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:11:45.784 [DEBUG] [Thread-28188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:11:45.785 [DEBUG] [Thread-28188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:11:45.785 [DEBUG] [Thread-28188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:11:45.810 [INFO] [Thread-28188] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:11:45.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:11:45.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:11:46.634 [DEBUG] [Thread-28188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:11:46.634 [DEBUG] [Thread-28188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:11:46.682 [DEBUG] [Thread-28188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:11:46.682 [DEBUG] [Thread-28188] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:11:46.690 [DEBUG] [Thread-28188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:11:46.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:11:46.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')
2026-04-16T00:11:46.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
2026-04-16T00:11:46.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:11:46.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:11:46.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:11:46.723 [DEBUG] [Thread-28188] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:11:48.401 [DEBUG] [Thread-28190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:12:03.443 [DEBUG] [Thread-28191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:12:16.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:12:16.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:12:16.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
2026-04-16T00:12:17.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 12, 2), 3.49035, 78.9798, 0.0, 11.47, 9.08077, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:12:17.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:12:02
2026-04-16T00:12:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:12:18.472 [DEBUG] [Thread-28192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:12:18.778 [DEBUG] [Thread-28193] [transport.py] [_log()] starting thread (client mode): 0xee9c7e50
2026-04-16T00:12:18.778 [DEBUG] [Thread-28193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:12:18.797 [DEBUG] [Thread-28193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:12:18.798 [INFO] [Thread-28193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:12:18.801 [DEBUG] [Thread-28193] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:12:18.801 [DEBUG] [Thread-28193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:12:18.801 [DEBUG] [Thread-28193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:12:18.801 [DEBUG] [Thread-28193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:12:18.801 [DEBUG] [Thread-28193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:12:18.801 [DEBUG] [Thread-28193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:12:18.801 [DEBUG] [Thread-28193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:12:18.801 [DEBUG] [Thread-28193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:12:18.801 [DEBUG] [Thread-28193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:12:18.801 [DEBUG] [Thread-28193] [transport.py] [_log()] client lang: <none>
2026-04-16T00:12:18.801 [DEBUG] [Thread-28193] [transport.py] [_log()] server lang: <none>
2026-04-16T00:12:18.802 [DEBUG] [Thread-28193] [transport.py] [_log()] kex follows: False
2026-04-16T00:12:18.802 [DEBUG] [Thread-28193] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:12:18.802 [DEBUG] [Thread-28193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:12:18.802 [DEBUG] [Thread-28193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:12:18.802 [DEBUG] [Thread-28193] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:12:18.802 [DEBUG] [Thread-28193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:12:18.802 [DEBUG] [Thread-28193] [transport.py] [_log()] Compression: none
2026-04-16T00:12:18.802 [DEBUG] [Thread-28193] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:12:18.821 [DEBUG] [Thread-28193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:12:18.821 [DEBUG] [Thread-28193] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:12:18.822 [DEBUG] [Thread-28193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:12:18.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:12:18.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:12:18.823 [DEBUG] [Thread-28193] [transport.py] [_log()] userauth is OK
2026-04-16T00:12:18.823 [DEBUG] [Thread-28193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:12:18.823 [DEBUG] [Thread-28193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:12:18.823 [DEBUG] [Thread-28193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:12:18.823 [DEBUG] [Thread-28193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:12:18.859 [INFO] [Thread-28193] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:12:18.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:12:19.477 [DEBUG] [Thread-28193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:12:19.477 [DEBUG] [Thread-28193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:12:19.478 [DEBUG] [Thread-28193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:12:19.518 [DEBUG] [Thread-28193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:12:19.518 [DEBUG] [Thread-28193] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:12:19.521 [DEBUG] [Thread-28193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:12:19.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:12:19.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:12:19.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:12:19.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:12:19.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:12:19.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:12:19.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:12:19.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:12:19.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:12:19.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.925128 -999.00   +9.30   9.17     82   +6.40 1 1 1 2 1     0    0 3.45 11.20 ZNESW 8.9 9.2 112.8 11.7 9.8 -24.8 9.6 -23.6 9.3 -21.5 9.7 -23.4
2026-04-16T00:12:19.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:12:19.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:12:19.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.925128
2026-04-16T00:12:19.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:12:19.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:12:19.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:12:19.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:12:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:12:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:12:02', tmtdew=3.49035, humidity=78.9798, cloud=0.0, wind=11.47, temperature=9.08077, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:12:11.059', atlas_cloud=1, atlas_rain=1, zp_data=[-0.056750000000000966, -0.0807500000000001, -0.018749999999998934, -0.046499999999999986, -0.013500000000000512, -0.01425000000000054, -0.014000000000001123, 0.0002500000000011937, -0.04550000000000054, -0.10200000000000031, -0.05375000000000085, -0.09549999999999947, -0.0009999999999994458, 0.0182500000000001, -0.023000000000001464, -0.028999999999999915, -0.013749999999999929, -0.06400000000000006, -0.015000000000000568, -0.021750000000000824, -0.002500000000001279, 0.03274999999999828, 0.03625000000000078, -0.019249999999999545, -0.020500000000000185, -0.06300000000000061, -0.011250000000000426, -0.006999999999999673, 0.006000000000000227, 0.010000000000001563, 0.048500000000000654, 0.03300000000000125, 0.0037499999999983658], zp_timestamp='2026-04-15T22:07:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:12:19.547 [DEBUG] [Thread-28193] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:12:19.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:12:19.807 [DEBUG] [Thread-28196] [transport.py] [_log()] starting thread (client mode): 0xf13ca7a0
2026-04-16T00:12:19.807 [DEBUG] [Thread-28196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:12:19.821 [DEBUG] [Thread-28196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:12:19.822 [INFO] [Thread-28196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:12:19.829 [DEBUG] [Thread-28196] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:12:19.829 [DEBUG] [Thread-28196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:12:19.829 [DEBUG] [Thread-28196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:12:19.829 [DEBUG] [Thread-28196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:12:19.829 [DEBUG] [Thread-28196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:12:19.829 [DEBUG] [Thread-28196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:12:19.829 [DEBUG] [Thread-28196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:12:19.829 [DEBUG] [Thread-28196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:12:19.829 [DEBUG] [Thread-28196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:12:19.829 [DEBUG] [Thread-28196] [transport.py] [_log()] client lang: <none>
2026-04-16T00:12:19.829 [DEBUG] [Thread-28196] [transport.py] [_log()] server lang: <none>
2026-04-16T00:12:19.829 [DEBUG] [Thread-28196] [transport.py] [_log()] kex follows: False
2026-04-16T00:12:19.830 [DEBUG] [Thread-28196] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:12:19.830 [DEBUG] [Thread-28196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:12:19.830 [DEBUG] [Thread-28196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:12:19.830 [DEBUG] [Thread-28196] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:12:19.830 [DEBUG] [Thread-28196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:12:19.830 [DEBUG] [Thread-28196] [transport.py] [_log()] Compression: none
2026-04-16T00:12:19.830 [DEBUG] [Thread-28196] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:12:19.888 [DEBUG] [Thread-28196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:12:19.888 [DEBUG] [Thread-28196] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:12:19.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:12:19.888 [DEBUG] [Thread-28196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:12:19.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:12:19.944 [DEBUG] [Thread-28196] [transport.py] [_log()] userauth is OK
2026-04-16T00:12:19.945 [DEBUG] [Thread-28196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:12:19.945 [DEBUG] [Thread-28196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:12:19.945 [DEBUG] [Thread-28196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:12:19.945 [DEBUG] [Thread-28196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:12:19.962 [INFO] [Thread-28196] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:12:19.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:12:19.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:12:20.780 [DEBUG] [Thread-28196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:12:20.780 [DEBUG] [Thread-28196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:12:20.829 [DEBUG] [Thread-28196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:12:20.829 [DEBUG] [Thread-28196] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:12:20.838 [DEBUG] [Thread-28196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:12:20.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:12:20.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')
2026-04-16T00:12:20.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
2026-04-16T00:12:20.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:12:20.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:12:20.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:12:20.872 [DEBUG] [Thread-28196] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:12:22.159 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:12:22.160 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:12:33.499 [DEBUG] [Thread-28198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:12:38.359 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:12:41.613 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:12:43.360 [DEBUG] [Thread-28199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:12:46.640 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:12:48.536 [DEBUG] [Thread-28200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:12:50.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:12:50.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:12:50.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
2026-04-16T00:12:52.016 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:12:52.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 12, 37), 3.06142, 81.0589, 0.0, 12.9866, 8.79509, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:12:52.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:12:37
2026-04-16T00:12:52.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:12:53.145 [DEBUG] [Thread-28201] [transport.py] [_log()] starting thread (client mode): 0xf13c8040
2026-04-16T00:12:53.145 [DEBUG] [Thread-28201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:12:53.164 [DEBUG] [Thread-28201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:12:53.164 [INFO] [Thread-28201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:12:53.167 [DEBUG] [Thread-28201] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:12:53.168 [DEBUG] [Thread-28201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:12:53.168 [DEBUG] [Thread-28201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:12:53.168 [DEBUG] [Thread-28201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:12:53.168 [DEBUG] [Thread-28201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:12:53.168 [DEBUG] [Thread-28201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:12:53.168 [DEBUG] [Thread-28201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:12:53.168 [DEBUG] [Thread-28201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:12:53.168 [DEBUG] [Thread-28201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:12:53.168 [DEBUG] [Thread-28201] [transport.py] [_log()] client lang: <none>
2026-04-16T00:12:53.168 [DEBUG] [Thread-28201] [transport.py] [_log()] server lang: <none>
2026-04-16T00:12:53.169 [DEBUG] [Thread-28201] [transport.py] [_log()] kex follows: False
2026-04-16T00:12:53.169 [DEBUG] [Thread-28201] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:12:53.169 [DEBUG] [Thread-28201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:12:53.169 [DEBUG] [Thread-28201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:12:53.169 [DEBUG] [Thread-28201] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:12:53.169 [DEBUG] [Thread-28201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:12:53.169 [DEBUG] [Thread-28201] [transport.py] [_log()] Compression: none
2026-04-16T00:12:53.169 [DEBUG] [Thread-28201] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:12:53.178 [DEBUG] [Thread-28201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:12:53.179 [DEBUG] [Thread-28201] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:12:53.179 [DEBUG] [Thread-28201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:12:53.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:12:53.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:12:53.180 [DEBUG] [Thread-28201] [transport.py] [_log()] userauth is OK
2026-04-16T00:12:53.180 [DEBUG] [Thread-28201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:12:53.181 [DEBUG] [Thread-28201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:12:53.181 [DEBUG] [Thread-28201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:12:53.181 [DEBUG] [Thread-28201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:12:53.203 [INFO] [Thread-28201] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:12:53.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:12:53.808 [DEBUG] [Thread-28201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:12:53.809 [DEBUG] [Thread-28201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:12:53.810 [DEBUG] [Thread-28201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:12:53.849 [DEBUG] [Thread-28201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:12:53.849 [DEBUG] [Thread-28201] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:12:53.852 [DEBUG] [Thread-28201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:12:53.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:12:53.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:12:53.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:12:53.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:12:53.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:12:53.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:12:53.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:12:53.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:12:53.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:12:53.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.925475 -999.00   +9.40   7.24     82   +6.50 1 1 1 2 1     0    0 3.36 8.48 ZNESW 7.9 7.2 107.8 11.9 9.8 -24.8 9.7 -23.5 9.4 -21.3 9.7 -23.4
2026-04-16T00:12:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:12:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:12:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.925475
2026-04-16T00:12:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:12:53.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:12:53.880 [DEBUG] [Thread-28201] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:12:53.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:12:53.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:12:53.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:12:53.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:12:37', tmtdew=3.06142, humidity=81.0589, cloud=0.0, wind=12.9866, temperature=8.79509, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:12:41.040', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06674999999999898, -0.023749999999999716, -0.027499999999999858, 0.0045000000000001705, 0.012250000000001648, -0.009999999999999787, 0.00975000000000037, -0.025500000000000966, -0.06599999999999895, -0.030250000000000554, -0.09450000000000003, -0.002000000000000668, 0.025750000000000384, 0.00549999999999784, -0.03500000000000014, 0.014749999999999375, -0.07450000000000045, -0.004000000000001336, -0.02325000000000088, -1.7763568394002505e-15, 0.010749999999998039, -0.0007500000000000284, -0.03325000000000067, -0.0010000000000012221, -0.024499999999999744, 0.003750000000000142, -0.011499999999999844, 0.018499999999999517, 0.040000000000000924, 0.07650000000000112, 0.04800000000000182, -0.07225000000000037], zp_timestamp='2026-04-15T22:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:12:54.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:12:54.145 [DEBUG] [Thread-28204] [transport.py] [_log()] starting thread (client mode): 0xee933a00
2026-04-16T00:12:54.145 [DEBUG] [Thread-28204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:12:54.162 [DEBUG] [Thread-28204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:12:54.162 [INFO] [Thread-28204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:12:54.171 [DEBUG] [Thread-28204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:12:54.171 [DEBUG] [Thread-28204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:12:54.172 [DEBUG] [Thread-28204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:12:54.172 [DEBUG] [Thread-28204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:12:54.172 [DEBUG] [Thread-28204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:12:54.172 [DEBUG] [Thread-28204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:12:54.172 [DEBUG] [Thread-28204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:12:54.172 [DEBUG] [Thread-28204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:12:54.172 [DEBUG] [Thread-28204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:12:54.172 [DEBUG] [Thread-28204] [transport.py] [_log()] client lang: <none>
2026-04-16T00:12:54.172 [DEBUG] [Thread-28204] [transport.py] [_log()] server lang: <none>
2026-04-16T00:12:54.172 [DEBUG] [Thread-28204] [transport.py] [_log()] kex follows: False
2026-04-16T00:12:54.172 [DEBUG] [Thread-28204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:12:54.173 [DEBUG] [Thread-28204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:12:54.173 [DEBUG] [Thread-28204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:12:54.173 [DEBUG] [Thread-28204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:12:54.173 [DEBUG] [Thread-28204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:12:54.173 [DEBUG] [Thread-28204] [transport.py] [_log()] Compression: none
2026-04-16T00:12:54.173 [DEBUG] [Thread-28204] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:12:54.229 [DEBUG] [Thread-28204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:12:54.230 [DEBUG] [Thread-28204] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:12:54.230 [DEBUG] [Thread-28204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:12:54.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:12:54.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:12:54.288 [DEBUG] [Thread-28204] [transport.py] [_log()] userauth is OK
2026-04-16T00:12:54.289 [DEBUG] [Thread-28204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:12:54.289 [DEBUG] [Thread-28204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:12:54.289 [DEBUG] [Thread-28204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:12:54.289 [DEBUG] [Thread-28204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:12:54.319 [INFO] [Thread-28204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:12:54.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:12:54.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:12:55.130 [DEBUG] [Thread-28204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:12:55.130 [DEBUG] [Thread-28204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:12:55.177 [DEBUG] [Thread-28204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:12:55.178 [DEBUG] [Thread-28204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:12:55.186 [DEBUG] [Thread-28204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:12:55.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:12:55.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')
2026-04-16T00:12:55.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
2026-04-16T00:12:55.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:12:55.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:12:55.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:12:55.217 [DEBUG] [Thread-28204] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:13:03.564 [DEBUG] [Thread-28206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:13:11.503 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:13:15.909 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:13:18.607 [DEBUG] [Thread-28207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:13:22.362 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:13:22.364 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:13:25.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:13:25.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:13: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
2026-04-16T00:13:26.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 13, 13), 3.42147, 79.0792, 0.0, 12.0344, 9.03092, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:13:26.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:13:13
2026-04-16T00:13:26.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:13:27.339 [DEBUG] [Thread-28208] [transport.py] [_log()] starting thread (client mode): 0xf13c98a0
2026-04-16T00:13:27.339 [DEBUG] [Thread-28208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:13:27.355 [DEBUG] [Thread-28208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:13:27.355 [INFO] [Thread-28208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:13:27.357 [DEBUG] [Thread-28208] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:13:27.357 [DEBUG] [Thread-28208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:13:27.357 [DEBUG] [Thread-28208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:13:27.357 [DEBUG] [Thread-28208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:13:27.357 [DEBUG] [Thread-28208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:13:27.358 [DEBUG] [Thread-28208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:13:27.358 [DEBUG] [Thread-28208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:13:27.358 [DEBUG] [Thread-28208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:13:27.358 [DEBUG] [Thread-28208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:13:27.358 [DEBUG] [Thread-28208] [transport.py] [_log()] client lang: <none>
2026-04-16T00:13:27.358 [DEBUG] [Thread-28208] [transport.py] [_log()] server lang: <none>
2026-04-16T00:13:27.358 [DEBUG] [Thread-28208] [transport.py] [_log()] kex follows: False
2026-04-16T00:13:27.358 [DEBUG] [Thread-28208] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:13:27.358 [DEBUG] [Thread-28208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:13:27.358 [DEBUG] [Thread-28208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:13:27.358 [DEBUG] [Thread-28208] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:13:27.359 [DEBUG] [Thread-28208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:13:27.359 [DEBUG] [Thread-28208] [transport.py] [_log()] Compression: none
2026-04-16T00:13:27.359 [DEBUG] [Thread-28208] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:13:27.370 [DEBUG] [Thread-28208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:13:27.370 [DEBUG] [Thread-28208] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:13:27.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:13:27.371 [DEBUG] [Thread-28208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:13:27.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:13:27.372 [DEBUG] [Thread-28208] [transport.py] [_log()] userauth is OK
2026-04-16T00:13:27.372 [DEBUG] [Thread-28208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:13:27.372 [DEBUG] [Thread-28208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:13:27.372 [DEBUG] [Thread-28208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:13:27.373 [DEBUG] [Thread-28208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:13:27.395 [INFO] [Thread-28208] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:13:27.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:13:27.958 [DEBUG] [Thread-28208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:13:27.958 [DEBUG] [Thread-28208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:13:27.959 [DEBUG] [Thread-28208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:13:28.000 [DEBUG] [Thread-28208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:13:28.000 [DEBUG] [Thread-28208] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:13:28.003 [DEBUG] [Thread-28208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:13:28.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:13:28.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:13:28.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:13:28.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:13:28.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:13:28.026 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:13:28.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:13:28.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:13:28.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:13:28.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.925822 -999.00   +9.50   9.09     81   +6.50 1 1 1 2 1     0    0 3.28 5.95 ZNESW 7.0 9.1 118.8 11.4 9.8 -24.5 9.6 -23.5 9.4 -21.4 9.7 -23.4
2026-04-16T00:13:28.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:13:28.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:13:28.028 [DEBUG] [Thread-28208] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:13:28.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.925822
2026-04-16T00:13:28.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:13:28.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:13:28.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:13:28.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:13:28.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:13:28.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:13:13', tmtdew=3.42147, humidity=79.0792, cloud=0.0, wind=12.0344, temperature=9.03092, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:13:11.021', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06674999999999898, -0.023749999999999716, -0.027499999999999858, 0.0045000000000001705, 0.012250000000001648, -0.009999999999999787, 0.00975000000000037, -0.025500000000000966, -0.06599999999999895, -0.030250000000000554, -0.09450000000000003, -0.002000000000000668, 0.025750000000000384, 0.00549999999999784, -0.03500000000000014, 0.014749999999999375, -0.07450000000000045, -0.004000000000001336, -0.02325000000000088, -1.7763568394002505e-15, 0.010749999999998039, -0.0007500000000000284, -0.03325000000000067, -0.0010000000000012221, -0.024499999999999744, 0.003750000000000142, -0.011499999999999844, 0.018499999999999517, 0.040000000000000924, 0.07650000000000112, 0.04800000000000182, -0.07225000000000037], zp_timestamp='2026-04-15T22:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:13:28.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:13:28.284 [DEBUG] [Thread-28211] [transport.py] [_log()] starting thread (client mode): 0xee9c6c80
2026-04-16T00:13:28.285 [DEBUG] [Thread-28211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:13:28.299 [DEBUG] [Thread-28211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:13:28.299 [INFO] [Thread-28211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:13:28.306 [DEBUG] [Thread-28211] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:13:28.306 [DEBUG] [Thread-28211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:13:28.306 [DEBUG] [Thread-28211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:13:28.306 [DEBUG] [Thread-28211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:13:28.307 [DEBUG] [Thread-28211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:13:28.307 [DEBUG] [Thread-28211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:13:28.307 [DEBUG] [Thread-28211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:13:28.307 [DEBUG] [Thread-28211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:13:28.307 [DEBUG] [Thread-28211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:13:28.307 [DEBUG] [Thread-28211] [transport.py] [_log()] client lang: <none>
2026-04-16T00:13:28.307 [DEBUG] [Thread-28211] [transport.py] [_log()] server lang: <none>
2026-04-16T00:13:28.307 [DEBUG] [Thread-28211] [transport.py] [_log()] kex follows: False
2026-04-16T00:13:28.307 [DEBUG] [Thread-28211] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:13:28.307 [DEBUG] [Thread-28211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:13:28.307 [DEBUG] [Thread-28211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:13:28.308 [DEBUG] [Thread-28211] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:13:28.308 [DEBUG] [Thread-28211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:13:28.308 [DEBUG] [Thread-28211] [transport.py] [_log()] Compression: none
2026-04-16T00:13:28.308 [DEBUG] [Thread-28211] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:13:28.363 [DEBUG] [Thread-28211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:13:28.363 [DEBUG] [Thread-28211] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:13:28.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:13:28.364 [DEBUG] [Thread-28211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:13:28.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:13:28.420 [DEBUG] [Thread-28211] [transport.py] [_log()] userauth is OK
2026-04-16T00:13:28.420 [DEBUG] [Thread-28211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:13:28.420 [DEBUG] [Thread-28211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:13:28.420 [DEBUG] [Thread-28211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:13:28.420 [DEBUG] [Thread-28211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:13:28.437 [INFO] [Thread-28211] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:13:28.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:13:28.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:13:29.271 [DEBUG] [Thread-28211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:13:29.271 [DEBUG] [Thread-28211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:13:29.319 [DEBUG] [Thread-28211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:13:29.319 [DEBUG] [Thread-28211] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:13:29.328 [DEBUG] [Thread-28211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:13:29.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:13:29.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')
2026-04-16T00:13:29.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
2026-04-16T00:13:29.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:13:29.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:13:29.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:13:29.360 [DEBUG] [Thread-28211] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:13:33.635 [DEBUG] [Thread-28213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:13:35.365 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:13:40.009 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:13:43.511 [DEBUG] [Thread-28214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:13:46.882 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:13:48.681 [DEBUG] [Thread-28215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:13:51.452 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:13:59.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:13:59.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:13:59.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
2026-04-16T00:14:00.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 13, 48), 3.01346, 81.3243, 0.0, 12.2458, 8.76183, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:14:00.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:13:48
2026-04-16T00:14:01.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:14:01.461 [DEBUG] [Thread-28216] [transport.py] [_log()] starting thread (client mode): 0xf1334c10
2026-04-16T00:14:01.461 [DEBUG] [Thread-28216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:14:01.479 [DEBUG] [Thread-28216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:14:01.479 [INFO] [Thread-28216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:14:01.482 [DEBUG] [Thread-28216] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:14:01.483 [DEBUG] [Thread-28216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:14:01.483 [DEBUG] [Thread-28216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:14:01.483 [DEBUG] [Thread-28216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:14:01.483 [DEBUG] [Thread-28216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:14:01.483 [DEBUG] [Thread-28216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:14:01.483 [DEBUG] [Thread-28216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:14:01.483 [DEBUG] [Thread-28216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:14:01.483 [DEBUG] [Thread-28216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:14:01.483 [DEBUG] [Thread-28216] [transport.py] [_log()] client lang: <none>
2026-04-16T00:14:01.483 [DEBUG] [Thread-28216] [transport.py] [_log()] server lang: <none>
2026-04-16T00:14:01.483 [DEBUG] [Thread-28216] [transport.py] [_log()] kex follows: False
2026-04-16T00:14:01.483 [DEBUG] [Thread-28216] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:14:01.484 [DEBUG] [Thread-28216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:14:01.484 [DEBUG] [Thread-28216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:14:01.484 [DEBUG] [Thread-28216] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:14:01.484 [DEBUG] [Thread-28216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:14:01.484 [DEBUG] [Thread-28216] [transport.py] [_log()] Compression: none
2026-04-16T00:14:01.484 [DEBUG] [Thread-28216] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:14:01.493 [DEBUG] [Thread-28216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:14:01.494 [DEBUG] [Thread-28216] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:14:01.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:14:01.494 [DEBUG] [Thread-28216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:14:01.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:14:01.495 [DEBUG] [Thread-28216] [transport.py] [_log()] userauth is OK
2026-04-16T00:14:01.495 [DEBUG] [Thread-28216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:14:01.495 [DEBUG] [Thread-28216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:14:01.495 [DEBUG] [Thread-28216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:14:01.496 [DEBUG] [Thread-28216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:14:01.513 [INFO] [Thread-28216] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:14:01.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:14:02.084 [DEBUG] [Thread-28216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:14:02.084 [DEBUG] [Thread-28216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:14:02.084 [DEBUG] [Thread-28216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:14:02.124 [DEBUG] [Thread-28216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:14:02.125 [DEBUG] [Thread-28216] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:14:02.127 [DEBUG] [Thread-28216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:14:02.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:14:02.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:14:02.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:14:02.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:14:02.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:14:02.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:14:02.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:14:02.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:14:02.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:14:02.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.926170 -999.00   +9.50   6.26     81   +6.50 1 1 1 2 1     0    0 3.18 3.92 ZNESW 6.4 6.3 96.5 9.3 9.9 -24.7 9.7 -23.5 9.4 -21.3 9.7 -23.3
2026-04-16T00:14:02.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:14:02.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:14:02.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.926170
2026-04-16T00:14:02.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:14:02.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:14:02.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:14:02.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:14:02.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:14:02.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:13:48', tmtdew=3.01346, humidity=81.3243, cloud=0.0, wind=12.2458, temperature=8.76183, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:13:41.088', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06674999999999898, -0.023749999999999716, -0.027499999999999858, 0.0045000000000001705, 0.012250000000001648, -0.009999999999999787, 0.00975000000000037, -0.025500000000000966, -0.06599999999999895, -0.030250000000000554, -0.09450000000000003, -0.002000000000000668, 0.025750000000000384, 0.00549999999999784, -0.03500000000000014, 0.014749999999999375, -0.07450000000000045, -0.004000000000001336, -0.02325000000000088, -1.7763568394002505e-15, 0.010749999999998039, -0.0007500000000000284, -0.03325000000000067, -0.0010000000000012221, -0.024499999999999744, 0.003750000000000142, -0.011499999999999844, 0.018499999999999517, 0.040000000000000924, 0.07650000000000112, 0.04800000000000182, -0.07225000000000037], zp_timestamp='2026-04-15T22:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:14:02.147 [DEBUG] [Thread-28216] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:14:02.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:14:02.356 [DEBUG] [Thread-28219] [transport.py] [_log()] starting thread (client mode): 0xf13ca2c0
2026-04-16T00:14:02.356 [DEBUG] [Thread-28219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:14:02.370 [DEBUG] [Thread-28219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:14:02.370 [INFO] [Thread-28219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:14:02.378 [DEBUG] [Thread-28219] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:14:02.378 [DEBUG] [Thread-28219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:14:02.378 [DEBUG] [Thread-28219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:14:02.378 [DEBUG] [Thread-28219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:14:02.379 [DEBUG] [Thread-28219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:14:02.379 [DEBUG] [Thread-28219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:14:02.379 [DEBUG] [Thread-28219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:14:02.379 [DEBUG] [Thread-28219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:14:02.379 [DEBUG] [Thread-28219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:14:02.379 [DEBUG] [Thread-28219] [transport.py] [_log()] client lang: <none>
2026-04-16T00:14:02.379 [DEBUG] [Thread-28219] [transport.py] [_log()] server lang: <none>
2026-04-16T00:14:02.379 [DEBUG] [Thread-28219] [transport.py] [_log()] kex follows: False
2026-04-16T00:14:02.379 [DEBUG] [Thread-28219] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:14:02.379 [DEBUG] [Thread-28219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:14:02.379 [DEBUG] [Thread-28219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:14:02.380 [DEBUG] [Thread-28219] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:14:02.380 [DEBUG] [Thread-28219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:14:02.380 [DEBUG] [Thread-28219] [transport.py] [_log()] Compression: none
2026-04-16T00:14:02.380 [DEBUG] [Thread-28219] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:14:02.438 [DEBUG] [Thread-28219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:14:02.438 [DEBUG] [Thread-28219] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:14:02.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:14:02.439 [DEBUG] [Thread-28219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:14:02.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:14:02.494 [DEBUG] [Thread-28219] [transport.py] [_log()] userauth is OK
2026-04-16T00:14:02.494 [DEBUG] [Thread-28219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:14:02.495 [DEBUG] [Thread-28219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:14:02.495 [DEBUG] [Thread-28219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:14:02.495 [DEBUG] [Thread-28219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:14:02.520 [INFO] [Thread-28219] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:14:02.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:14:02.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:14:03.353 [DEBUG] [Thread-28219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:14:03.354 [DEBUG] [Thread-28219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:14:03.401 [DEBUG] [Thread-28219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:14:03.401 [DEBUG] [Thread-28219] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:14:03.410 [DEBUG] [Thread-28219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:14:03.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:14:03.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')
2026-04-16T00:14:03.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
2026-04-16T00:14:03.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:14:03.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:14:03.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:14:03.444 [DEBUG] [Thread-28219] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:14:03.713 [DEBUG] [Thread-28221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:14:18.750 [DEBUG] [Thread-28222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:14:22.566 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:14:22.567 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:14:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:14:33.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:14:33.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
2026-04-16T00:14:33.780 [DEBUG] [Thread-28223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:14:34.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 14, 24), 3.45554, 79.1624, 0.0, 10.0228, 8.98136, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:14:34.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:14:24
2026-04-16T00:14:35.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:14:35.523 [DEBUG] [Thread-28224] [transport.py] [_log()] starting thread (client mode): 0xf13c88e0
2026-04-16T00:14:35.523 [DEBUG] [Thread-28224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:14:35.543 [DEBUG] [Thread-28224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:14:35.544 [INFO] [Thread-28224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:14:35.547 [DEBUG] [Thread-28224] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:14:35.547 [DEBUG] [Thread-28224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:14:35.547 [DEBUG] [Thread-28224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:14:35.547 [DEBUG] [Thread-28224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:14:35.547 [DEBUG] [Thread-28224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:14:35.547 [DEBUG] [Thread-28224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:14:35.547 [DEBUG] [Thread-28224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:14:35.547 [DEBUG] [Thread-28224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:14:35.547 [DEBUG] [Thread-28224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:14:35.547 [DEBUG] [Thread-28224] [transport.py] [_log()] client lang: <none>
2026-04-16T00:14:35.548 [DEBUG] [Thread-28224] [transport.py] [_log()] server lang: <none>
2026-04-16T00:14:35.548 [DEBUG] [Thread-28224] [transport.py] [_log()] kex follows: False
2026-04-16T00:14:35.548 [DEBUG] [Thread-28224] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:14:35.548 [DEBUG] [Thread-28224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:14:35.548 [DEBUG] [Thread-28224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:14:35.548 [DEBUG] [Thread-28224] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:14:35.548 [DEBUG] [Thread-28224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:14:35.548 [DEBUG] [Thread-28224] [transport.py] [_log()] Compression: none
2026-04-16T00:14:35.548 [DEBUG] [Thread-28224] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:14:35.564 [DEBUG] [Thread-28224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:14:35.564 [DEBUG] [Thread-28224] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:14:35.564 [DEBUG] [Thread-28224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:14:35.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:14:35.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:14:35.565 [DEBUG] [Thread-28224] [transport.py] [_log()] userauth is OK
2026-04-16T00:14:35.566 [DEBUG] [Thread-28224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:14:35.566 [DEBUG] [Thread-28224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:14:35.566 [DEBUG] [Thread-28224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:14:35.566 [DEBUG] [Thread-28224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:14:35.587 [INFO] [Thread-28224] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:14:35.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:14:36.178 [DEBUG] [Thread-28224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:14:36.178 [DEBUG] [Thread-28224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:14:36.179 [DEBUG] [Thread-28224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:14:36.220 [DEBUG] [Thread-28224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:14:36.220 [DEBUG] [Thread-28224] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:14:36.221 [DEBUG] [Thread-28224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:14:36.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:14:36.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:14:36.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:14:36.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:14:36.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:14:36.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:14:36.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:14:36.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:14:36.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:14:36.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.926517 -999.00   +9.50   7.61     81   +6.40 1 1 1 2 1     0    0 3.13 2.42 ZNESW 7.2 7.6 106.8 11.1 9.8 -24.6 9.7 -23.5 9.3 -21.1 9.7 -23.4
2026-04-16T00:14:36.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:14:36.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:14:36.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.926517
2026-04-16T00:14:36.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:14:36.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:14:36.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:14:36.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:14:36.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:14:36.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:14:24', tmtdew=3.45554, humidity=79.1624, cloud=0.0, wind=10.0228, temperature=8.98136, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:14:11.069', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06674999999999898, -0.023749999999999716, -0.027499999999999858, 0.0045000000000001705, 0.012250000000001648, -0.009999999999999787, 0.00975000000000037, -0.025500000000000966, -0.06599999999999895, -0.030250000000000554, -0.09450000000000003, -0.002000000000000668, 0.025750000000000384, 0.00549999999999784, -0.03500000000000014, 0.014749999999999375, -0.07450000000000045, -0.004000000000001336, -0.02325000000000088, -1.7763568394002505e-15, 0.010749999999998039, -0.0007500000000000284, -0.03325000000000067, -0.0010000000000012221, -0.024499999999999744, 0.003750000000000142, -0.011499999999999844, 0.018499999999999517, 0.040000000000000924, 0.07650000000000112, 0.04800000000000182, -0.07225000000000037], zp_timestamp='2026-04-15T22:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:14:36.240 [DEBUG] [Thread-28224] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:14:36.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:14:36.456 [DEBUG] [Thread-28227] [transport.py] [_log()] starting thread (client mode): 0xee9c7d30
2026-04-16T00:14:36.456 [DEBUG] [Thread-28227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:14:36.471 [DEBUG] [Thread-28227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:14:36.471 [INFO] [Thread-28227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:14:36.478 [DEBUG] [Thread-28227] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:14:36.478 [DEBUG] [Thread-28227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:14:36.478 [DEBUG] [Thread-28227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:14:36.478 [DEBUG] [Thread-28227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:14:36.479 [DEBUG] [Thread-28227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:14:36.479 [DEBUG] [Thread-28227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:14:36.479 [DEBUG] [Thread-28227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:14:36.479 [DEBUG] [Thread-28227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:14:36.479 [DEBUG] [Thread-28227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:14:36.479 [DEBUG] [Thread-28227] [transport.py] [_log()] client lang: <none>
2026-04-16T00:14:36.479 [DEBUG] [Thread-28227] [transport.py] [_log()] server lang: <none>
2026-04-16T00:14:36.479 [DEBUG] [Thread-28227] [transport.py] [_log()] kex follows: False
2026-04-16T00:14:36.479 [DEBUG] [Thread-28227] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:14:36.479 [DEBUG] [Thread-28227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:14:36.479 [DEBUG] [Thread-28227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:14:36.479 [DEBUG] [Thread-28227] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:14:36.479 [DEBUG] [Thread-28227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:14:36.479 [DEBUG] [Thread-28227] [transport.py] [_log()] Compression: none
2026-04-16T00:14:36.479 [DEBUG] [Thread-28227] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:14:36.536 [DEBUG] [Thread-28227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:14:36.536 [DEBUG] [Thread-28227] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:14:36.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:14:36.536 [DEBUG] [Thread-28227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:14:36.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:14:36.593 [DEBUG] [Thread-28227] [transport.py] [_log()] userauth is OK
2026-04-16T00:14:36.593 [DEBUG] [Thread-28227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:14:36.593 [DEBUG] [Thread-28227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:14:36.593 [DEBUG] [Thread-28227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:14:36.593 [DEBUG] [Thread-28227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:14:36.617 [INFO] [Thread-28227] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:14:36.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:14:36.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:14:37.455 [DEBUG] [Thread-28227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:14:37.455 [DEBUG] [Thread-28227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:14:37.502 [DEBUG] [Thread-28227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:14:37.502 [DEBUG] [Thread-28227] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:14:37.511 [DEBUG] [Thread-28227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:14:37.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:14:37.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')
2026-04-16T00:14:37.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
2026-04-16T00:14:37.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:14:37.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:14:37.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:14:37.546 [DEBUG] [Thread-28227] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:14:43.656 [DEBUG] [Thread-28229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:14:48.808 [DEBUG] [Thread-28230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:14:58.067 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:15:01.124 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:15:03.843 [DEBUG] [Thread-28231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:15:07.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:15:07.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:15:07.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
2026-04-16T00:15:08.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 14, 24), 3.45554, 79.1624, 0.0, 10.0228, 8.98136, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:15:08.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:14:24
2026-04-16T00:15:09.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:15:09.757 [DEBUG] [Thread-28232] [transport.py] [_log()] starting thread (client mode): 0xf1366ec0
2026-04-16T00:15:09.757 [DEBUG] [Thread-28232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:15:09.776 [DEBUG] [Thread-28232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:15:09.776 [INFO] [Thread-28232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:15:09.779 [DEBUG] [Thread-28232] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:15:09.779 [DEBUG] [Thread-28232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:15:09.779 [DEBUG] [Thread-28232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:15:09.779 [DEBUG] [Thread-28232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:15:09.779 [DEBUG] [Thread-28232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:15:09.779 [DEBUG] [Thread-28232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:15:09.779 [DEBUG] [Thread-28232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:15:09.779 [DEBUG] [Thread-28232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:15:09.779 [DEBUG] [Thread-28232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:15:09.780 [DEBUG] [Thread-28232] [transport.py] [_log()] client lang: <none>
2026-04-16T00:15:09.780 [DEBUG] [Thread-28232] [transport.py] [_log()] server lang: <none>
2026-04-16T00:15:09.780 [DEBUG] [Thread-28232] [transport.py] [_log()] kex follows: False
2026-04-16T00:15:09.780 [DEBUG] [Thread-28232] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:15:09.780 [DEBUG] [Thread-28232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:15:09.780 [DEBUG] [Thread-28232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:15:09.780 [DEBUG] [Thread-28232] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:15:09.780 [DEBUG] [Thread-28232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:15:09.780 [DEBUG] [Thread-28232] [transport.py] [_log()] Compression: none
2026-04-16T00:15:09.780 [DEBUG] [Thread-28232] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:15:09.798 [DEBUG] [Thread-28232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:15:09.798 [DEBUG] [Thread-28232] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:15:09.798 [DEBUG] [Thread-28232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:15:09.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:15:09.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:15:09.799 [DEBUG] [Thread-28232] [transport.py] [_log()] userauth is OK
2026-04-16T00:15:09.800 [DEBUG] [Thread-28232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:15:09.800 [DEBUG] [Thread-28232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:15:09.800 [DEBUG] [Thread-28232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:15:09.800 [DEBUG] [Thread-28232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:15:09.822 [INFO] [Thread-28232] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:15:09.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:15:11.975 [DEBUG] [Thread-28232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:15:11.975 [DEBUG] [Thread-28232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:15:11.976 [DEBUG] [Thread-28232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:15:12.016 [DEBUG] [Thread-28232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:15:12.016 [DEBUG] [Thread-28232] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:15:12.019 [DEBUG] [Thread-28232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:15:12.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:15:12.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:15:12.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:15:12.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:15:12.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:15:12.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:15:12.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:15:12.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:15:12.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:15:12.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.926864 -999.00   +9.50   6.46     81   +6.40 1 1 1 2 1     0    0 3.11 1.47 ZNESW 7.7 6.5 121.1 10.8 9.8 -24.7 9.7 -23.6 9.4 -21.3 9.7 -23.5
2026-04-16T00:15:12.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:15:12.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:15:12.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.926864
2026-04-16T00:15:12.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:15:12.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:15:12.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:15:12.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:15:12.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:15:12.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:14:24', tmtdew=3.45554, humidity=79.1624, cloud=0.0, wind=10.0228, temperature=8.98136, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:14:41.050', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06674999999999898, -0.023749999999999716, -0.027499999999999858, 0.0045000000000001705, 0.012250000000001648, -0.009999999999999787, 0.00975000000000037, -0.025500000000000966, -0.06599999999999895, -0.030250000000000554, -0.09450000000000003, -0.002000000000000668, 0.025750000000000384, 0.00549999999999784, -0.03500000000000014, 0.014749999999999375, -0.07450000000000045, -0.004000000000001336, -0.02325000000000088, -1.7763568394002505e-15, 0.010749999999998039, -0.0007500000000000284, -0.03325000000000067, -0.0010000000000012221, -0.024499999999999744, 0.003750000000000142, -0.011499999999999844, 0.018499999999999517, 0.040000000000000924, 0.07650000000000112, 0.04800000000000182, -0.07225000000000037], zp_timestamp='2026-04-15T22:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:15:12.041 [DEBUG] [Thread-28232] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:15:12.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:15:12.262 [DEBUG] [Thread-28235] [transport.py] [_log()] starting thread (client mode): 0xee933a00
2026-04-16T00:15:12.263 [DEBUG] [Thread-28235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:15:12.276 [DEBUG] [Thread-28235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:15:12.277 [INFO] [Thread-28235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:15:12.284 [DEBUG] [Thread-28235] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:15:12.284 [DEBUG] [Thread-28235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:15:12.284 [DEBUG] [Thread-28235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:15:12.284 [DEBUG] [Thread-28235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:15:12.284 [DEBUG] [Thread-28235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:15:12.285 [DEBUG] [Thread-28235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:15:12.285 [DEBUG] [Thread-28235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:15:12.285 [DEBUG] [Thread-28235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:15:12.285 [DEBUG] [Thread-28235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:15:12.285 [DEBUG] [Thread-28235] [transport.py] [_log()] client lang: <none>
2026-04-16T00:15:12.285 [DEBUG] [Thread-28235] [transport.py] [_log()] server lang: <none>
2026-04-16T00:15:12.285 [DEBUG] [Thread-28235] [transport.py] [_log()] kex follows: False
2026-04-16T00:15:12.285 [DEBUG] [Thread-28235] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:15:12.285 [DEBUG] [Thread-28235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:15:12.285 [DEBUG] [Thread-28235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:15:12.285 [DEBUG] [Thread-28235] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:15:12.286 [DEBUG] [Thread-28235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:15:12.286 [DEBUG] [Thread-28235] [transport.py] [_log()] Compression: none
2026-04-16T00:15:12.286 [DEBUG] [Thread-28235] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:15:12.342 [DEBUG] [Thread-28235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:15:12.343 [DEBUG] [Thread-28235] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:15:12.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:15:12.344 [DEBUG] [Thread-28235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:15:12.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:15:12.399 [DEBUG] [Thread-28235] [transport.py] [_log()] userauth is OK
2026-04-16T00:15:12.399 [DEBUG] [Thread-28235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:15:12.400 [DEBUG] [Thread-28235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:15:12.400 [DEBUG] [Thread-28235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:15:12.400 [DEBUG] [Thread-28235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:15:12.425 [INFO] [Thread-28235] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:15:12.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:15:12.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:15:13.292 [DEBUG] [Thread-28235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:15:13.293 [DEBUG] [Thread-28235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:15:13.340 [DEBUG] [Thread-28235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:15:13.340 [DEBUG] [Thread-28235] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:15:13.349 [DEBUG] [Thread-28235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:15:13.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:15:13.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')
2026-04-16T00:15:13.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
2026-04-16T00:15:13.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:15:13.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:15:13.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:15:13.384 [DEBUG] [Thread-28235] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:15:18.874 [DEBUG] [Thread-28237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:15:22.768 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:15:22.770 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:15:33.913 [DEBUG] [Thread-28238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:15:43.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:15:43.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:15:43.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
2026-04-16T00:15:43.826 [DEBUG] [Thread-28239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:15:44.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 15, 35), 2.94212, 81.7228, 0.0, 11.2932, 8.72894, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:15:44.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:15:35
2026-04-16T00:15:45.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:15:45.504 [DEBUG] [Thread-28240] [transport.py] [_log()] starting thread (client mode): 0xf1364b20
2026-04-16T00:15:45.504 [DEBUG] [Thread-28240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:15:45.524 [DEBUG] [Thread-28240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:15:45.524 [INFO] [Thread-28240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:15:45.527 [DEBUG] [Thread-28240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:15:45.527 [DEBUG] [Thread-28240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:15:45.528 [DEBUG] [Thread-28240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:15:45.528 [DEBUG] [Thread-28240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:15:45.528 [DEBUG] [Thread-28240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:15:45.528 [DEBUG] [Thread-28240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:15:45.528 [DEBUG] [Thread-28240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:15:45.528 [DEBUG] [Thread-28240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:15:45.528 [DEBUG] [Thread-28240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:15:45.528 [DEBUG] [Thread-28240] [transport.py] [_log()] client lang: <none>
2026-04-16T00:15:45.528 [DEBUG] [Thread-28240] [transport.py] [_log()] server lang: <none>
2026-04-16T00:15:45.528 [DEBUG] [Thread-28240] [transport.py] [_log()] kex follows: False
2026-04-16T00:15:45.528 [DEBUG] [Thread-28240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:15:45.528 [DEBUG] [Thread-28240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:15:45.529 [DEBUG] [Thread-28240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:15:45.529 [DEBUG] [Thread-28240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:15:45.529 [DEBUG] [Thread-28240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:15:45.529 [DEBUG] [Thread-28240] [transport.py] [_log()] Compression: none
2026-04-16T00:15:45.529 [DEBUG] [Thread-28240] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:15:45.545 [DEBUG] [Thread-28240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:15:45.546 [DEBUG] [Thread-28240] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:15:45.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:15:45.546 [DEBUG] [Thread-28240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:15:45.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:15:45.547 [DEBUG] [Thread-28240] [transport.py] [_log()] userauth is OK
2026-04-16T00:15:45.547 [DEBUG] [Thread-28240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:15:45.548 [DEBUG] [Thread-28240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:15:45.548 [DEBUG] [Thread-28240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:15:45.548 [DEBUG] [Thread-28240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:15:45.583 [INFO] [Thread-28240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:15:45.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:15:46.338 [DEBUG] [Thread-28240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:15:46.338 [DEBUG] [Thread-28240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:15:46.339 [DEBUG] [Thread-28240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:15:46.379 [DEBUG] [Thread-28240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:15:46.379 [DEBUG] [Thread-28240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:15:46.381 [DEBUG] [Thread-28240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:15:46.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:15:46.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:15:46.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:15:46.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:15:46.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:15:46.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:15:46.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:15:46.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:15:46.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:15:46.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.926864 -999.00   +9.50   6.46     81   +6.40 1 1 1 2 1     0    0 3.11 1.47 ZNESW 7.7 6.5 121.1 10.8 9.8 -24.7 9.7 -23.6 9.4 -21.3 9.7 -23.5
2026-04-16T00:15:46.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:15:46.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:15:46.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.926864
2026-04-16T00:15:46.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:15:46.398 [DEBUG] [Thread-28240] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:15:46.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:15:46.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:15:46.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:15:46.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:15:46.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:15:35', tmtdew=2.94212, humidity=81.7228, cloud=0.0, wind=11.2932, temperature=8.72894, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:14:41.050', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0627500000000012, -0.04574999999999818, -0.04574999999999996, -0.0235000000000003, -0.028999999999999915, -0.007749999999997925, -0.024499999999999744, 0.0182500000000001, -0.04100000000000037, -0.11800000000000033, -0.04475000000000051, -0.10400000000000098, -0.0519999999999996, -0.0007500000000000284, -0.041999999999999815, -0.05400000000000027, -0.03974999999999973, -0.08050000000000068, -0.0065000000000008384, -0.04675000000000118, -0.031000000000000583, 0.026749999999998053, -0.01774999999999949, -0.03524999999999956, -0.020500000000000185, -0.054499999999999105, -0.023749999999999716, -0.0045000000000001705, -0.023999999999999133, 0.050499999999999545, 0.06800000000000139, 0.013000000000001677, -0.09925000000000139], zp_timestamp='2026-04-15T22:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:15:46.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:15:46.613 [DEBUG] [Thread-28243] [transport.py] [_log()] starting thread (client mode): 0xee9c6f50
2026-04-16T00:15:46.613 [DEBUG] [Thread-28243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:15:46.628 [DEBUG] [Thread-28243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:15:46.628 [INFO] [Thread-28243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:15:46.637 [DEBUG] [Thread-28243] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:15:46.637 [DEBUG] [Thread-28243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:15:46.637 [DEBUG] [Thread-28243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:15:46.637 [DEBUG] [Thread-28243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:15:46.637 [DEBUG] [Thread-28243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:15:46.637 [DEBUG] [Thread-28243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:15:46.637 [DEBUG] [Thread-28243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:15:46.637 [DEBUG] [Thread-28243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:15:46.637 [DEBUG] [Thread-28243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:15:46.637 [DEBUG] [Thread-28243] [transport.py] [_log()] client lang: <none>
2026-04-16T00:15:46.638 [DEBUG] [Thread-28243] [transport.py] [_log()] server lang: <none>
2026-04-16T00:15:46.638 [DEBUG] [Thread-28243] [transport.py] [_log()] kex follows: False
2026-04-16T00:15:46.638 [DEBUG] [Thread-28243] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:15:46.638 [DEBUG] [Thread-28243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:15:46.638 [DEBUG] [Thread-28243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:15:46.638 [DEBUG] [Thread-28243] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:15:46.638 [DEBUG] [Thread-28243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:15:46.638 [DEBUG] [Thread-28243] [transport.py] [_log()] Compression: none
2026-04-16T00:15:46.638 [DEBUG] [Thread-28243] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:15:46.693 [DEBUG] [Thread-28243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:15:46.694 [DEBUG] [Thread-28243] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:15:46.694 [DEBUG] [Thread-28243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:15:46.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:15:46.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:15:46.750 [DEBUG] [Thread-28243] [transport.py] [_log()] userauth is OK
2026-04-16T00:15:46.750 [DEBUG] [Thread-28243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:15:46.750 [DEBUG] [Thread-28243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:15:46.750 [DEBUG] [Thread-28243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:15:46.750 [DEBUG] [Thread-28243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:15:46.775 [INFO] [Thread-28243] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:15:46.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:15:46.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:15:47.623 [DEBUG] [Thread-28243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:15:47.624 [DEBUG] [Thread-28243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:15:47.678 [DEBUG] [Thread-28243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:15:47.678 [DEBUG] [Thread-28243] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:15:47.688 [DEBUG] [Thread-28243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:15:47.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:15:47.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')
2026-04-16T00:15: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') -> 00000000
2026-04-16T00:15:47.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:15:47.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:15:47.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:15:47.723 [DEBUG] [Thread-28243] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:15:48.943 [DEBUG] [Thread-28245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:16:03.990 [DEBUG] [Thread-28246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:16:17.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:16:17.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:16:17.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
2026-04-16T00:16:19.021 [DEBUG] [Thread-28247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:16:19.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 16, 10), 3.31887, 79.378, 0.0, 9.37008, 8.94765, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:16:19.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:16:10
2026-04-16T00:16:19.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:16:19.863 [DEBUG] [Thread-28248] [transport.py] [_log()] starting thread (client mode): 0xf1367040
2026-04-16T00:16:19.863 [DEBUG] [Thread-28248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:16:19.883 [DEBUG] [Thread-28248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:16:19.883 [INFO] [Thread-28248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:16:19.886 [DEBUG] [Thread-28248] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:16:19.886 [DEBUG] [Thread-28248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:16:19.886 [DEBUG] [Thread-28248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:16:19.886 [DEBUG] [Thread-28248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:16:19.886 [DEBUG] [Thread-28248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:16:19.887 [DEBUG] [Thread-28248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:16:19.887 [DEBUG] [Thread-28248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:16:19.887 [DEBUG] [Thread-28248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:16:19.887 [DEBUG] [Thread-28248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:16:19.887 [DEBUG] [Thread-28248] [transport.py] [_log()] client lang: <none>
2026-04-16T00:16:19.887 [DEBUG] [Thread-28248] [transport.py] [_log()] server lang: <none>
2026-04-16T00:16:19.887 [DEBUG] [Thread-28248] [transport.py] [_log()] kex follows: False
2026-04-16T00:16:19.887 [DEBUG] [Thread-28248] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:16:19.887 [DEBUG] [Thread-28248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:16:19.887 [DEBUG] [Thread-28248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:16:19.887 [DEBUG] [Thread-28248] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:16:19.887 [DEBUG] [Thread-28248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:16:19.888 [DEBUG] [Thread-28248] [transport.py] [_log()] Compression: none
2026-04-16T00:16:19.888 [DEBUG] [Thread-28248] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:16:19.904 [DEBUG] [Thread-28248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:16:19.904 [DEBUG] [Thread-28248] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:16:19.905 [DEBUG] [Thread-28248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:16:19.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:16:19.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:16:19.948 [DEBUG] [Thread-28248] [transport.py] [_log()] userauth is OK
2026-04-16T00:16:19.949 [DEBUG] [Thread-28248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:16:19.949 [DEBUG] [Thread-28248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:16:19.949 [DEBUG] [Thread-28248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:16:19.949 [DEBUG] [Thread-28248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:16:19.974 [INFO] [Thread-28248] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:16:19.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:16:20.758 [DEBUG] [Thread-28248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:16:20.759 [DEBUG] [Thread-28248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:16:20.759 [DEBUG] [Thread-28248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:16:20.799 [DEBUG] [Thread-28248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:16:20.800 [DEBUG] [Thread-28248] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:16:20.802 [DEBUG] [Thread-28248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:16:20.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:16:20.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:16:20.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:16:20.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:16:20.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:16:20.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:16:20.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:16:20.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:16:20.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:16:20.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.927558 -999.00   +9.50   5.54     80   +6.40 1 1 1 2 1     0    0 3.08 0.17 ZNESW 6.8 5.5 107.1 8.9 9.8 -24.9 9.7 -23.6 9.4 -21.4 9.7 -23.4
2026-04-16T00:16:20.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:16:20.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:16:20.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.927558
2026-04-16T00:16:20.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:16:20.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:16:20.819 [DEBUG] [Thread-28248] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:16:20.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:16:20.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:16:20.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:16:20.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:16:10', tmtdew=3.31887, humidity=79.378, cloud=0.0, wind=9.37008, temperature=8.94765, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:15:41.011', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0627500000000012, -0.04574999999999818, -0.04574999999999996, -0.0235000000000003, -0.028999999999999915, -0.007749999999997925, -0.024499999999999744, 0.0182500000000001, -0.04100000000000037, -0.11800000000000033, -0.04475000000000051, -0.10400000000000098, -0.0519999999999996, -0.0007500000000000284, -0.041999999999999815, -0.05400000000000027, -0.03974999999999973, -0.08050000000000068, -0.0065000000000008384, -0.04675000000000118, -0.031000000000000583, 0.026749999999998053, -0.01774999999999949, -0.03524999999999956, -0.020500000000000185, -0.054499999999999105, -0.023749999999999716, -0.0045000000000001705, -0.023999999999999133, 0.050499999999999545, 0.06800000000000139, 0.013000000000001677, -0.09925000000000139], zp_timestamp='2026-04-15T22:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:16:21.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:16:21.029 [DEBUG] [Thread-28251] [transport.py] [_log()] starting thread (client mode): 0xf13e1e70
2026-04-16T00:16:21.029 [DEBUG] [Thread-28251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:16:21.043 [DEBUG] [Thread-28251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:16:21.043 [INFO] [Thread-28251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:16:21.050 [DEBUG] [Thread-28251] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:16:21.051 [DEBUG] [Thread-28251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:16:21.051 [DEBUG] [Thread-28251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:16:21.051 [DEBUG] [Thread-28251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:16:21.051 [DEBUG] [Thread-28251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:16:21.051 [DEBUG] [Thread-28251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:16:21.051 [DEBUG] [Thread-28251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:16:21.051 [DEBUG] [Thread-28251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:16:21.051 [DEBUG] [Thread-28251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:16:21.051 [DEBUG] [Thread-28251] [transport.py] [_log()] client lang: <none>
2026-04-16T00:16:21.051 [DEBUG] [Thread-28251] [transport.py] [_log()] server lang: <none>
2026-04-16T00:16:21.051 [DEBUG] [Thread-28251] [transport.py] [_log()] kex follows: False
2026-04-16T00:16:21.052 [DEBUG] [Thread-28251] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:16:21.052 [DEBUG] [Thread-28251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:16:21.052 [DEBUG] [Thread-28251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:16:21.052 [DEBUG] [Thread-28251] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:16:21.052 [DEBUG] [Thread-28251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:16:21.052 [DEBUG] [Thread-28251] [transport.py] [_log()] Compression: none
2026-04-16T00:16:21.052 [DEBUG] [Thread-28251] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:16:21.107 [DEBUG] [Thread-28251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:16:21.107 [DEBUG] [Thread-28251] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:16:21.108 [DEBUG] [Thread-28251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:16:21.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:16:21.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:16:21.164 [DEBUG] [Thread-28251] [transport.py] [_log()] userauth is OK
2026-04-16T00:16:21.164 [DEBUG] [Thread-28251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:16:21.164 [DEBUG] [Thread-28251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:16:21.164 [DEBUG] [Thread-28251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:16:21.165 [DEBUG] [Thread-28251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:16:21.187 [INFO] [Thread-28251] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:16:21.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:16:21.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:16:22.033 [DEBUG] [Thread-28251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:16:22.033 [DEBUG] [Thread-28251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:16:22.081 [DEBUG] [Thread-28251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:16:22.081 [DEBUG] [Thread-28251] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:16:22.090 [DEBUG] [Thread-28251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:16:22.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:16:22.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')
2026-04-16T00:16:22.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
2026-04-16T00:16:22.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:16:22.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:16:22.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:16:22.125 [DEBUG] [Thread-28251] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:16:22.969 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:16:22.970 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:16:34.052 [DEBUG] [Thread-28253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:16:44.004 [DEBUG] [Thread-28254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:16:49.098 [DEBUG] [Thread-28255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:16:52.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:16:52.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:16:52.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:16:53.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 16, 46), 2.93105, 81.7897, 0.0, 10.9757, 8.76249, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:16:53.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:16:46
2026-04-16T00:16:53.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:16:54.158 [DEBUG] [Thread-28256] [transport.py] [_log()] starting thread (client mode): 0xf1367700
2026-04-16T00:16:54.159 [DEBUG] [Thread-28256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:16:54.175 [DEBUG] [Thread-28256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:16:54.175 [INFO] [Thread-28256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:16:54.179 [DEBUG] [Thread-28256] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:16:54.179 [DEBUG] [Thread-28256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:16:54.179 [DEBUG] [Thread-28256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:16:54.179 [DEBUG] [Thread-28256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:16:54.179 [DEBUG] [Thread-28256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:16:54.179 [DEBUG] [Thread-28256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:16:54.179 [DEBUG] [Thread-28256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:16:54.179 [DEBUG] [Thread-28256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:16:54.179 [DEBUG] [Thread-28256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:16:54.179 [DEBUG] [Thread-28256] [transport.py] [_log()] client lang: <none>
2026-04-16T00:16:54.179 [DEBUG] [Thread-28256] [transport.py] [_log()] server lang: <none>
2026-04-16T00:16:54.179 [DEBUG] [Thread-28256] [transport.py] [_log()] kex follows: False
2026-04-16T00:16:54.179 [DEBUG] [Thread-28256] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:16:54.180 [DEBUG] [Thread-28256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:16:54.180 [DEBUG] [Thread-28256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:16:54.180 [DEBUG] [Thread-28256] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:16:54.180 [DEBUG] [Thread-28256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:16:54.180 [DEBUG] [Thread-28256] [transport.py] [_log()] Compression: none
2026-04-16T00:16:54.180 [DEBUG] [Thread-28256] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:16:54.198 [DEBUG] [Thread-28256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:16:54.199 [DEBUG] [Thread-28256] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:16:54.199 [DEBUG] [Thread-28256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:16:54.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:16:54.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:16:54.200 [DEBUG] [Thread-28256] [transport.py] [_log()] userauth is OK
2026-04-16T00:16:54.200 [DEBUG] [Thread-28256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:16:54.200 [DEBUG] [Thread-28256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:16:54.200 [DEBUG] [Thread-28256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:16:54.200 [DEBUG] [Thread-28256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:16:54.230 [INFO] [Thread-28256] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:16:54.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:16:55.027 [DEBUG] [Thread-28256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:16:55.028 [DEBUG] [Thread-28256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:16:55.028 [DEBUG] [Thread-28256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:16:55.068 [DEBUG] [Thread-28256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:16:55.068 [DEBUG] [Thread-28256] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:16:55.070 [DEBUG] [Thread-28256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:16:55.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:16:55.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:16:55.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:16:55.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:16:55.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:16:55.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:16:55.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:16:55.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:16:55.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:16:55.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.927906 -999.00   +9.50   5.03     80   +6.40 1 1 1 2 1     0    0 3.16 -0.51 ZNESW 7.8 5.0 99.4 9.6 9.8 -24.6 9.7 -23.5 9.4 -21.4 9.7 -23.5
2026-04-16T00:16:55.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:16:55.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:16:55.086 [DEBUG] [Thread-28256] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:16:55.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.927906
2026-04-16T00:16:55.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:16:55.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:16:55.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:16:55.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:16:55.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:16:55.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:16:46', tmtdew=2.93105, humidity=81.7897, cloud=0.0, wind=10.9757, temperature=8.76249, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:16:11.078', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0627500000000012, -0.04574999999999818, -0.04574999999999996, -0.0235000000000003, -0.028999999999999915, -0.007749999999997925, -0.024499999999999744, 0.0182500000000001, -0.04100000000000037, -0.11800000000000033, -0.04475000000000051, -0.10400000000000098, -0.0519999999999996, -0.0007500000000000284, -0.041999999999999815, -0.05400000000000027, -0.03974999999999973, -0.08050000000000068, -0.0065000000000008384, -0.04675000000000118, -0.031000000000000583, 0.026749999999998053, -0.01774999999999949, -0.03524999999999956, -0.020500000000000185, -0.054499999999999105, -0.023749999999999716, -0.0045000000000001705, -0.023999999999999133, 0.050499999999999545, 0.06800000000000139, 0.013000000000001677, -0.09925000000000139], zp_timestamp='2026-04-15T22:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:16:55.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:16:55.341 [DEBUG] [Thread-28259] [transport.py] [_log()] starting thread (client mode): 0xf13510f0
2026-04-16T00:16:55.341 [DEBUG] [Thread-28259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:16:55.355 [DEBUG] [Thread-28259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:16:55.355 [INFO] [Thread-28259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:16:55.363 [DEBUG] [Thread-28259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:16:55.363 [DEBUG] [Thread-28259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:16:55.363 [DEBUG] [Thread-28259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:16:55.363 [DEBUG] [Thread-28259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:16:55.363 [DEBUG] [Thread-28259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:16:55.363 [DEBUG] [Thread-28259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:16:55.363 [DEBUG] [Thread-28259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:16:55.363 [DEBUG] [Thread-28259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:16:55.363 [DEBUG] [Thread-28259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:16:55.363 [DEBUG] [Thread-28259] [transport.py] [_log()] client lang: <none>
2026-04-16T00:16:55.363 [DEBUG] [Thread-28259] [transport.py] [_log()] server lang: <none>
2026-04-16T00:16:55.363 [DEBUG] [Thread-28259] [transport.py] [_log()] kex follows: False
2026-04-16T00:16:55.364 [DEBUG] [Thread-28259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:16:55.364 [DEBUG] [Thread-28259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:16:55.364 [DEBUG] [Thread-28259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:16:55.364 [DEBUG] [Thread-28259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:16:55.364 [DEBUG] [Thread-28259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:16:55.364 [DEBUG] [Thread-28259] [transport.py] [_log()] Compression: none
2026-04-16T00:16:55.364 [DEBUG] [Thread-28259] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:16:55.424 [DEBUG] [Thread-28259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:16:55.424 [DEBUG] [Thread-28259] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:16:55.425 [DEBUG] [Thread-28259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:16:55.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:16:55.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:16:55.485 [DEBUG] [Thread-28259] [transport.py] [_log()] userauth is OK
2026-04-16T00:16:55.486 [DEBUG] [Thread-28259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:16:55.486 [DEBUG] [Thread-28259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:16:55.486 [DEBUG] [Thread-28259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:16:55.486 [DEBUG] [Thread-28259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:16:55.511 [INFO] [Thread-28259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:16:55.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:16:55.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:16:56.324 [DEBUG] [Thread-28259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:16:56.324 [DEBUG] [Thread-28259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:16:56.371 [DEBUG] [Thread-28259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:16:56.372 [DEBUG] [Thread-28259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:16:56.381 [DEBUG] [Thread-28259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:16:56.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:16:56.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')
2026-04-16T00:16:56.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
2026-04-16T00:16:56.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:16:56.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:16:56.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:16:56.413 [DEBUG] [Thread-28259] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:17:04.130 [DEBUG] [Thread-28261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:17:19.175 [DEBUG] [Thread-28262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:17:23.172 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:17:23.173 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:17:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:17:26.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:17:26.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:17:27.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 16, 46), 2.93105, 81.7897, 0.0, 10.9757, 8.76249, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:17:27.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:16:46
2026-04-16T00:17:28.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:17:28.594 [DEBUG] [Thread-28263] [transport.py] [_log()] starting thread (client mode): 0xf1337790
2026-04-16T00:17:28.594 [DEBUG] [Thread-28263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:17:28.615 [DEBUG] [Thread-28263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:17:28.615 [INFO] [Thread-28263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:17:28.619 [DEBUG] [Thread-28263] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:17:28.619 [DEBUG] [Thread-28263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:17:28.619 [DEBUG] [Thread-28263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:17:28.619 [DEBUG] [Thread-28263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:17:28.619 [DEBUG] [Thread-28263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:17:28.619 [DEBUG] [Thread-28263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:17:28.619 [DEBUG] [Thread-28263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:17:28.619 [DEBUG] [Thread-28263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:17:28.620 [DEBUG] [Thread-28263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:17:28.620 [DEBUG] [Thread-28263] [transport.py] [_log()] client lang: <none>
2026-04-16T00:17:28.620 [DEBUG] [Thread-28263] [transport.py] [_log()] server lang: <none>
2026-04-16T00:17:28.620 [DEBUG] [Thread-28263] [transport.py] [_log()] kex follows: False
2026-04-16T00:17:28.620 [DEBUG] [Thread-28263] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:17:28.620 [DEBUG] [Thread-28263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:17:28.620 [DEBUG] [Thread-28263] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:17:28.620 [DEBUG] [Thread-28263] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:17:28.620 [DEBUG] [Thread-28263] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:17:28.620 [DEBUG] [Thread-28263] [transport.py] [_log()] Compression: none
2026-04-16T00:17:28.620 [DEBUG] [Thread-28263] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:17:28.637 [DEBUG] [Thread-28263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:17:28.638 [DEBUG] [Thread-28263] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:17:28.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:17:28.638 [DEBUG] [Thread-28263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:17:28.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:17:28.639 [DEBUG] [Thread-28263] [transport.py] [_log()] userauth is OK
2026-04-16T00:17:28.640 [DEBUG] [Thread-28263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:17:28.640 [DEBUG] [Thread-28263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:17:28.640 [DEBUG] [Thread-28263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:17:28.640 [DEBUG] [Thread-28263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:17:28.658 [INFO] [Thread-28263] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:17:28.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:17:29.410 [DEBUG] [Thread-28263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:17:29.410 [DEBUG] [Thread-28263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:17:29.411 [DEBUG] [Thread-28263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:17:29.451 [DEBUG] [Thread-28263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:17:29.451 [DEBUG] [Thread-28263] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:17:29.454 [DEBUG] [Thread-28263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:17:29.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:17:29.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:17:29.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:17:29.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:17:29.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:17:29.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:17:29.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:17:29.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:17:29.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:17:29.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.928253 -999.00   +9.50   5.49     80   +6.40 1 1 1 2 1     0    0 3.12 -0.91 ZNESW 5.8 5.5 75.5 7.8 9.8 -24.6 9.7 -23.8 9.4 -21.3 9.7 -23.6
2026-04-16T00:17:29.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:17:29.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:17:29.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.928253
2026-04-16T00:17:29.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:17:29.480 [DEBUG] [Thread-28263] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:17:29.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:17:29.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:17:29.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:17:29.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:17:29.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:16:46', tmtdew=2.93105, humidity=81.7897, cloud=0.0, wind=10.9757, temperature=8.76249, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:16:41.059', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0627500000000012, -0.04574999999999818, -0.04574999999999996, -0.0235000000000003, -0.028999999999999915, -0.007749999999997925, -0.024499999999999744, 0.0182500000000001, -0.04100000000000037, -0.11800000000000033, -0.04475000000000051, -0.10400000000000098, -0.0519999999999996, -0.0007500000000000284, -0.041999999999999815, -0.05400000000000027, -0.03974999999999973, -0.08050000000000068, -0.0065000000000008384, -0.04675000000000118, -0.031000000000000583, 0.026749999999998053, -0.01774999999999949, -0.03524999999999956, -0.020500000000000185, -0.054499999999999105, -0.023749999999999716, -0.0045000000000001705, -0.023999999999999133, 0.050499999999999545, 0.06800000000000139, 0.013000000000001677, -0.09925000000000139], zp_timestamp='2026-04-15T22:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:17:29.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:17:29.736 [DEBUG] [Thread-28266] [transport.py] [_log()] starting thread (client mode): 0xee9c6620
2026-04-16T00:17:29.736 [DEBUG] [Thread-28266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:17:29.753 [DEBUG] [Thread-28266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:17:29.753 [INFO] [Thread-28266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:17:29.760 [DEBUG] [Thread-28266] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:17:29.760 [DEBUG] [Thread-28266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:17:29.760 [DEBUG] [Thread-28266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:17:29.760 [DEBUG] [Thread-28266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:17:29.761 [DEBUG] [Thread-28266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:17:29.761 [DEBUG] [Thread-28266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:17:29.761 [DEBUG] [Thread-28266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:17:29.761 [DEBUG] [Thread-28266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:17:29.761 [DEBUG] [Thread-28266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:17:29.761 [DEBUG] [Thread-28266] [transport.py] [_log()] client lang: <none>
2026-04-16T00:17:29.761 [DEBUG] [Thread-28266] [transport.py] [_log()] server lang: <none>
2026-04-16T00:17:29.761 [DEBUG] [Thread-28266] [transport.py] [_log()] kex follows: False
2026-04-16T00:17:29.761 [DEBUG] [Thread-28266] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:17:29.761 [DEBUG] [Thread-28266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:17:29.761 [DEBUG] [Thread-28266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:17:29.762 [DEBUG] [Thread-28266] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:17:29.762 [DEBUG] [Thread-28266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:17:29.762 [DEBUG] [Thread-28266] [transport.py] [_log()] Compression: none
2026-04-16T00:17:29.762 [DEBUG] [Thread-28266] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:17:29.820 [DEBUG] [Thread-28266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:17:29.820 [DEBUG] [Thread-28266] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:17:29.821 [DEBUG] [Thread-28266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:17:29.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:17:29.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:17:29.876 [DEBUG] [Thread-28266] [transport.py] [_log()] userauth is OK
2026-04-16T00:17:29.876 [DEBUG] [Thread-28266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:17:29.877 [DEBUG] [Thread-28266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:17:29.877 [DEBUG] [Thread-28266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:17:29.877 [DEBUG] [Thread-28266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:17:29.899 [INFO] [Thread-28266] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:17:29.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:17:29.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:17:30.758 [DEBUG] [Thread-28266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:17:30.758 [DEBUG] [Thread-28266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:17:30.806 [DEBUG] [Thread-28266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:17:30.806 [DEBUG] [Thread-28266] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:17:30.815 [DEBUG] [Thread-28266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:17:30.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:17:30.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')
2026-04-16T00:17:30.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') -> 00000000
2026-04-16T00:17:30.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:17:30.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:17:30.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:17:30.853 [DEBUG] [Thread-28266] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:17:34.205 [DEBUG] [Thread-28268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:17:44.150 [DEBUG] [Thread-28269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:17:49.247 [DEBUG] [Thread-28270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:18:00.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:18:00.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:18:00.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
2026-04-16T00:18:02.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 17, 21), 3.30748, 79.9446, 0.0, 9.29952, 8.96443, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:18:02.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:17:21
2026-04-16T00:18:02.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:18:03.034 [DEBUG] [Thread-28271] [transport.py] [_log()] starting thread (client mode): 0xf13e3790
2026-04-16T00:18:03.034 [DEBUG] [Thread-28271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:18:03.053 [DEBUG] [Thread-28271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:18:03.053 [INFO] [Thread-28271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:18:03.055 [DEBUG] [Thread-28271] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:18:03.055 [DEBUG] [Thread-28271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:18:03.055 [DEBUG] [Thread-28271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:18:03.056 [DEBUG] [Thread-28271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:18:03.056 [DEBUG] [Thread-28271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:18:03.056 [DEBUG] [Thread-28271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:18:03.056 [DEBUG] [Thread-28271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:18:03.056 [DEBUG] [Thread-28271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:18:03.056 [DEBUG] [Thread-28271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:18:03.056 [DEBUG] [Thread-28271] [transport.py] [_log()] client lang: <none>
2026-04-16T00:18:03.056 [DEBUG] [Thread-28271] [transport.py] [_log()] server lang: <none>
2026-04-16T00:18:03.056 [DEBUG] [Thread-28271] [transport.py] [_log()] kex follows: False
2026-04-16T00:18:03.056 [DEBUG] [Thread-28271] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:18:03.056 [DEBUG] [Thread-28271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:18:03.056 [DEBUG] [Thread-28271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:18:03.057 [DEBUG] [Thread-28271] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:18:03.057 [DEBUG] [Thread-28271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:18:03.057 [DEBUG] [Thread-28271] [transport.py] [_log()] Compression: none
2026-04-16T00:18:03.057 [DEBUG] [Thread-28271] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:18:03.066 [DEBUG] [Thread-28271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:18:03.066 [DEBUG] [Thread-28271] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:18:03.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:18:03.067 [DEBUG] [Thread-28271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:18:03.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:18:03.068 [DEBUG] [Thread-28271] [transport.py] [_log()] userauth is OK
2026-04-16T00:18:03.068 [DEBUG] [Thread-28271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:18:03.068 [DEBUG] [Thread-28271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:18:03.068 [DEBUG] [Thread-28271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:18:03.068 [DEBUG] [Thread-28271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:18:03.092 [INFO] [Thread-28271] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:18:03.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:18:04.271 [DEBUG] [Thread-28271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:18:04.271 [DEBUG] [Thread-28271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:18:04.272 [DEBUG] [Thread-28271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:18:04.279 [DEBUG] [Thread-28273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:18:04.312 [DEBUG] [Thread-28271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:18:04.312 [DEBUG] [Thread-28271] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:18:04.315 [DEBUG] [Thread-28271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:18:04.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:18:04.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:18:04.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:18:04.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:18:04.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:18:04.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:18:04.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:18:04.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:18:04.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:18:04.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.928600 -999.00   +9.50   8.11     80   +6.40 1 1 1 2 1     0    0 3.08 -1.17 ZNESW 6.5 8.1 124.6 10.1 9.8 -24.8 9.7 -23.6 9.3 -21.4 9.7 -23.4
2026-04-16T00:18:04.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:18:04.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:18:04.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.928600
2026-04-16T00:18:04.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:18:04.340 [DEBUG] [Thread-28271] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:18:04.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:18:04.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:18:04.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:18:04.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:18:04.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:17:21', tmtdew=3.30748, humidity=79.9446, cloud=0.0, wind=9.29952, temperature=8.96443, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:17:11.040', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0627500000000012, -0.04574999999999818, -0.04574999999999996, -0.0235000000000003, -0.028999999999999915, -0.007749999999997925, -0.024499999999999744, 0.0182500000000001, -0.04100000000000037, -0.11800000000000033, -0.04475000000000051, -0.10400000000000098, -0.0519999999999996, -0.0007500000000000284, -0.041999999999999815, -0.05400000000000027, -0.03974999999999973, -0.08050000000000068, -0.0065000000000008384, -0.04675000000000118, -0.031000000000000583, 0.026749999999998053, -0.01774999999999949, -0.03524999999999956, -0.020500000000000185, -0.054499999999999105, -0.023749999999999716, -0.0045000000000001705, -0.023999999999999133, 0.050499999999999545, 0.06800000000000139, 0.013000000000001677, -0.09925000000000139], zp_timestamp='2026-04-15T22:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:18:04.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:18:04.599 [DEBUG] [Thread-28275] [transport.py] [_log()] starting thread (client mode): 0xf13345b0
2026-04-16T00:18:04.599 [DEBUG] [Thread-28275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:18:04.614 [DEBUG] [Thread-28275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:18:04.614 [INFO] [Thread-28275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:18:04.621 [DEBUG] [Thread-28275] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:18:04.621 [DEBUG] [Thread-28275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:18:04.621 [DEBUG] [Thread-28275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:18:04.622 [DEBUG] [Thread-28275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:18:04.622 [DEBUG] [Thread-28275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:18:04.622 [DEBUG] [Thread-28275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:18:04.622 [DEBUG] [Thread-28275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:18:04.622 [DEBUG] [Thread-28275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:18:04.622 [DEBUG] [Thread-28275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:18:04.622 [DEBUG] [Thread-28275] [transport.py] [_log()] client lang: <none>
2026-04-16T00:18:04.622 [DEBUG] [Thread-28275] [transport.py] [_log()] server lang: <none>
2026-04-16T00:18:04.622 [DEBUG] [Thread-28275] [transport.py] [_log()] kex follows: False
2026-04-16T00:18:04.622 [DEBUG] [Thread-28275] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:18:04.622 [DEBUG] [Thread-28275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:18:04.622 [DEBUG] [Thread-28275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:18:04.623 [DEBUG] [Thread-28275] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:18:04.623 [DEBUG] [Thread-28275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:18:04.623 [DEBUG] [Thread-28275] [transport.py] [_log()] Compression: none
2026-04-16T00:18:04.623 [DEBUG] [Thread-28275] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:18:04.677 [DEBUG] [Thread-28275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:18:04.678 [DEBUG] [Thread-28275] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:18:04.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:18:04.678 [DEBUG] [Thread-28275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:18:04.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:18:04.737 [DEBUG] [Thread-28275] [transport.py] [_log()] userauth is OK
2026-04-16T00:18:04.737 [DEBUG] [Thread-28275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:18:04.737 [DEBUG] [Thread-28275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:18:04.737 [DEBUG] [Thread-28275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:18:04.738 [DEBUG] [Thread-28275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:18:04.765 [INFO] [Thread-28275] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:18:04.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:18:04.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:18:05.584 [DEBUG] [Thread-28275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:18:05.584 [DEBUG] [Thread-28275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:18:05.632 [DEBUG] [Thread-28275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:18:05.632 [DEBUG] [Thread-28275] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:18:05.642 [DEBUG] [Thread-28275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:18:05.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:18:05.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')
2026-04-16T00:18:05.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') -> 00000000
2026-04-16T00:18:05.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:18:05.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:18:05.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:18:05.677 [DEBUG] [Thread-28275] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:18:19.309 [DEBUG] [Thread-28277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:18:23.372 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:18:23.374 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:18:34.353 [DEBUG] [Thread-28278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:18:35.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:18:35.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:18:35.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
2026-04-16T00:18:37.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 17, 56), 3.31006, 79.9279, 0.0, 9.54648, 8.94774, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:18:37.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:17:56
2026-04-16T00:18:37.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:18:37.937 [DEBUG] [Thread-28279] [transport.py] [_log()] starting thread (client mode): 0xee9c7ac0
2026-04-16T00:18:37.938 [DEBUG] [Thread-28279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:18:37.957 [DEBUG] [Thread-28279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:18:37.957 [INFO] [Thread-28279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:18:37.961 [DEBUG] [Thread-28279] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:18:37.961 [DEBUG] [Thread-28279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:18:37.961 [DEBUG] [Thread-28279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:18:37.961 [DEBUG] [Thread-28279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:18:37.961 [DEBUG] [Thread-28279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:18:37.961 [DEBUG] [Thread-28279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:18:37.961 [DEBUG] [Thread-28279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:18:37.961 [DEBUG] [Thread-28279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:18:37.961 [DEBUG] [Thread-28279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:18:37.962 [DEBUG] [Thread-28279] [transport.py] [_log()] client lang: <none>
2026-04-16T00:18:37.962 [DEBUG] [Thread-28279] [transport.py] [_log()] server lang: <none>
2026-04-16T00:18:37.962 [DEBUG] [Thread-28279] [transport.py] [_log()] kex follows: False
2026-04-16T00:18:37.962 [DEBUG] [Thread-28279] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:18:37.962 [DEBUG] [Thread-28279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:18:37.962 [DEBUG] [Thread-28279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:18:37.962 [DEBUG] [Thread-28279] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:18:37.962 [DEBUG] [Thread-28279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:18:37.962 [DEBUG] [Thread-28279] [transport.py] [_log()] Compression: none
2026-04-16T00:18:37.962 [DEBUG] [Thread-28279] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:18:37.970 [DEBUG] [Thread-28279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:18:37.971 [DEBUG] [Thread-28279] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:18:37.971 [DEBUG] [Thread-28279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:18:37.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:18:37.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:18:37.972 [DEBUG] [Thread-28279] [transport.py] [_log()] userauth is OK
2026-04-16T00:18:37.972 [DEBUG] [Thread-28279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:18:37.972 [DEBUG] [Thread-28279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:18:37.972 [DEBUG] [Thread-28279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:18:37.973 [DEBUG] [Thread-28279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:18:37.986 [INFO] [Thread-28279] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:18:37.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:18:38.784 [DEBUG] [Thread-28279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:18:38.785 [DEBUG] [Thread-28279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:18:38.785 [DEBUG] [Thread-28279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:18:38.825 [DEBUG] [Thread-28279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:18:38.825 [DEBUG] [Thread-28279] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:18:38.828 [DEBUG] [Thread-28279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:18:38.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:18:38.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:18:38.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:18:38.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:18:38.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:18:38.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:18:38.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:18:38.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:18:38.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:18:38.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.928947 -999.00   +9.60   7.16     80   +6.40 1 1 1 2 1     0    0 3.03 -1.04 ZNESW 7.7 7.2 122.1 10.8 9.9 -24.7 9.7 -23.5 9.3 -21.3 9.7 -23.5
2026-04-16T00:18:38.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:18:38.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:18:38.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.928947
2026-04-16T00:18:38.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:18:38.856 [DEBUG] [Thread-28279] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:18:38.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:18:38.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:18:38.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:18:38.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:18:38.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:17:56', tmtdew=3.31006, humidity=79.9279, cloud=0.0, wind=9.54648, temperature=8.94774, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:17:41.021', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0627500000000012, -0.04574999999999818, -0.04574999999999996, -0.0235000000000003, -0.028999999999999915, -0.007749999999997925, -0.024499999999999744, 0.0182500000000001, -0.04100000000000037, -0.11800000000000033, -0.04475000000000051, -0.10400000000000098, -0.0519999999999996, -0.0007500000000000284, -0.041999999999999815, -0.05400000000000027, -0.03974999999999973, -0.08050000000000068, -0.0065000000000008384, -0.04675000000000118, -0.031000000000000583, 0.026749999999998053, -0.01774999999999949, -0.03524999999999956, -0.020500000000000185, -0.054499999999999105, -0.023749999999999716, -0.0045000000000001705, -0.023999999999999133, 0.050499999999999545, 0.06800000000000139, 0.013000000000001677, -0.09925000000000139], zp_timestamp='2026-04-15T22:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:18:39.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:18:39.109 [DEBUG] [Thread-28282] [transport.py] [_log()] starting thread (client mode): 0xee993e80
2026-04-16T00:18:39.110 [DEBUG] [Thread-28282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:18:39.124 [DEBUG] [Thread-28282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:18:39.124 [INFO] [Thread-28282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:18:39.133 [DEBUG] [Thread-28282] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:18:39.133 [DEBUG] [Thread-28282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:18:39.133 [DEBUG] [Thread-28282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:18:39.133 [DEBUG] [Thread-28282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:18:39.133 [DEBUG] [Thread-28282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:18:39.133 [DEBUG] [Thread-28282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:18:39.133 [DEBUG] [Thread-28282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:18:39.133 [DEBUG] [Thread-28282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:18:39.133 [DEBUG] [Thread-28282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:18:39.133 [DEBUG] [Thread-28282] [transport.py] [_log()] client lang: <none>
2026-04-16T00:18:39.133 [DEBUG] [Thread-28282] [transport.py] [_log()] server lang: <none>
2026-04-16T00:18:39.133 [DEBUG] [Thread-28282] [transport.py] [_log()] kex follows: False
2026-04-16T00:18:39.133 [DEBUG] [Thread-28282] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:18:39.133 [DEBUG] [Thread-28282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:18:39.133 [DEBUG] [Thread-28282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:18:39.134 [DEBUG] [Thread-28282] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:18:39.134 [DEBUG] [Thread-28282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:18:39.134 [DEBUG] [Thread-28282] [transport.py] [_log()] Compression: none
2026-04-16T00:18:39.134 [DEBUG] [Thread-28282] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:18:39.190 [DEBUG] [Thread-28282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:18:39.191 [DEBUG] [Thread-28282] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:18:39.191 [DEBUG] [Thread-28282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:18:39.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:18:39.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:18:39.248 [DEBUG] [Thread-28282] [transport.py] [_log()] userauth is OK
2026-04-16T00:18:39.248 [DEBUG] [Thread-28282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:18:39.248 [DEBUG] [Thread-28282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:18:39.248 [DEBUG] [Thread-28282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:18:39.248 [DEBUG] [Thread-28282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:18:39.271 [INFO] [Thread-28282] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:18:39.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:18:39.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:18:40.097 [DEBUG] [Thread-28282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:18:40.097 [DEBUG] [Thread-28282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:18:40.145 [DEBUG] [Thread-28282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:18:40.145 [DEBUG] [Thread-28282] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:18:40.154 [DEBUG] [Thread-28282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:18:40.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:18:40.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')
2026-04-16T00:18:40.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
2026-04-16T00:18:40.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:18:40.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:18:40.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:18:40.192 [DEBUG] [Thread-28282] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:18:44.312 [DEBUG] [Thread-28284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:18:49.388 [DEBUG] [Thread-28285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:19:04.432 [DEBUG] [Thread-28286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:19:10.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:19:10.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:19: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
2026-04-16T00:19:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 18, 32), 3.3075, 79.9445, 0.0, 9.52884, 8.96433, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:19:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:18:32
2026-04-16T00:19:11.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:19:12.324 [DEBUG] [Thread-28287] [transport.py] [_log()] starting thread (client mode): 0xee992fb0
2026-04-16T00:19:12.324 [DEBUG] [Thread-28287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:19:12.343 [DEBUG] [Thread-28287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:19:12.343 [INFO] [Thread-28287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:19:12.346 [DEBUG] [Thread-28287] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:19:12.346 [DEBUG] [Thread-28287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:19:12.346 [DEBUG] [Thread-28287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:19:12.346 [DEBUG] [Thread-28287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:19:12.346 [DEBUG] [Thread-28287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:19:12.346 [DEBUG] [Thread-28287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:19:12.347 [DEBUG] [Thread-28287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:19:12.347 [DEBUG] [Thread-28287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:19:12.347 [DEBUG] [Thread-28287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:19:12.347 [DEBUG] [Thread-28287] [transport.py] [_log()] client lang: <none>
2026-04-16T00:19:12.347 [DEBUG] [Thread-28287] [transport.py] [_log()] server lang: <none>
2026-04-16T00:19:12.347 [DEBUG] [Thread-28287] [transport.py] [_log()] kex follows: False
2026-04-16T00:19:12.347 [DEBUG] [Thread-28287] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:19:12.347 [DEBUG] [Thread-28287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:19:12.347 [DEBUG] [Thread-28287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:19:12.347 [DEBUG] [Thread-28287] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:19:12.347 [DEBUG] [Thread-28287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:19:12.348 [DEBUG] [Thread-28287] [transport.py] [_log()] Compression: none
2026-04-16T00:19:12.348 [DEBUG] [Thread-28287] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:19:12.362 [DEBUG] [Thread-28287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:19:12.363 [DEBUG] [Thread-28287] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:19:12.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:19:12.363 [DEBUG] [Thread-28287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:19:12.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:19:12.364 [DEBUG] [Thread-28287] [transport.py] [_log()] userauth is OK
2026-04-16T00:19:12.364 [DEBUG] [Thread-28287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:19:12.364 [DEBUG] [Thread-28287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:19:12.364 [DEBUG] [Thread-28287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:19:12.364 [DEBUG] [Thread-28287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:19:12.383 [INFO] [Thread-28287] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:19:12.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:19:13.170 [DEBUG] [Thread-28287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:19:13.170 [DEBUG] [Thread-28287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:19:13.171 [DEBUG] [Thread-28287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:19:13.212 [DEBUG] [Thread-28287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:19:13.212 [DEBUG] [Thread-28287] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:19:13.216 [DEBUG] [Thread-28287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:19:13.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:19:13.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:19:13.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:19:13.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:19:13.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:19:13.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:19:13.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:19:13.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:19:13.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:19:13.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.929294 -999.00   +9.60   6.39     80   +6.40 1 1 1 2 1     0    0 3.10 -0.67 ZNESW 6.5 6.4 106.6 8.8 9.8 -24.7 9.7 -23.5 9.4 -21.4 9.7 -23.4
2026-04-16T00:19:13.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:19:13.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:19:13.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.929294
2026-04-16T00:19:13.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:19:13.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:19:13.241 [DEBUG] [Thread-28287] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:19:13.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:19:13.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:19:13.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:19:13.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:18:32', tmtdew=3.3075, humidity=79.9445, cloud=0.0, wind=9.52884, temperature=8.96433, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:18:11.002', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0627500000000012, -0.04574999999999818, -0.04574999999999996, -0.0235000000000003, -0.028999999999999915, -0.007749999999997925, -0.024499999999999744, 0.0182500000000001, -0.04100000000000037, -0.11800000000000033, -0.04475000000000051, -0.10400000000000098, -0.0519999999999996, -0.0007500000000000284, -0.041999999999999815, -0.05400000000000027, -0.03974999999999973, -0.08050000000000068, -0.0065000000000008384, -0.04675000000000118, -0.031000000000000583, 0.026749999999998053, -0.01774999999999949, -0.03524999999999956, -0.020500000000000185, -0.054499999999999105, -0.023749999999999716, -0.0045000000000001705, -0.023999999999999133, 0.050499999999999545, 0.06800000000000139, 0.013000000000001677, -0.09925000000000139], zp_timestamp='2026-04-15T22:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:19:13.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:19:13.488 [DEBUG] [Thread-28290] [transport.py] [_log()] starting thread (client mode): 0xf1367940
2026-04-16T00:19:13.488 [DEBUG] [Thread-28290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:19:13.503 [DEBUG] [Thread-28290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:19:13.503 [INFO] [Thread-28290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:19:13.510 [DEBUG] [Thread-28290] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:19:13.510 [DEBUG] [Thread-28290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:19:13.510 [DEBUG] [Thread-28290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:19:13.511 [DEBUG] [Thread-28290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:19:13.511 [DEBUG] [Thread-28290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:19:13.511 [DEBUG] [Thread-28290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:19:13.511 [DEBUG] [Thread-28290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:19:13.511 [DEBUG] [Thread-28290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:19:13.511 [DEBUG] [Thread-28290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:19:13.511 [DEBUG] [Thread-28290] [transport.py] [_log()] client lang: <none>
2026-04-16T00:19:13.511 [DEBUG] [Thread-28290] [transport.py] [_log()] server lang: <none>
2026-04-16T00:19:13.511 [DEBUG] [Thread-28290] [transport.py] [_log()] kex follows: False
2026-04-16T00:19:13.511 [DEBUG] [Thread-28290] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:19:13.511 [DEBUG] [Thread-28290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:19:13.512 [DEBUG] [Thread-28290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:19:13.512 [DEBUG] [Thread-28290] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:19:13.512 [DEBUG] [Thread-28290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:19:13.512 [DEBUG] [Thread-28290] [transport.py] [_log()] Compression: none
2026-04-16T00:19:13.512 [DEBUG] [Thread-28290] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:19:13.568 [DEBUG] [Thread-28290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:19:13.568 [DEBUG] [Thread-28290] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:19:13.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:19:13.569 [DEBUG] [Thread-28290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:19:13.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:19:13.625 [DEBUG] [Thread-28290] [transport.py] [_log()] userauth is OK
2026-04-16T00:19:13.625 [DEBUG] [Thread-28290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:19:13.626 [DEBUG] [Thread-28290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:19:13.626 [DEBUG] [Thread-28290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:19:13.626 [DEBUG] [Thread-28290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:19:13.654 [INFO] [Thread-28290] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:19:13.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:19:13.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:19:14.421 [DEBUG] [Thread-28290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:19:14.421 [DEBUG] [Thread-28290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:19:14.468 [DEBUG] [Thread-28290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:19:14.468 [DEBUG] [Thread-28290] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:19:14.477 [DEBUG] [Thread-28290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:19:14.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:19:14.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')
2026-04-16T00:19: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') -> 00000000
2026-04-16T00:19:14.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:19:14.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:19:14.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:19:14.509 [DEBUG] [Thread-28290] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:19:19.464 [DEBUG] [Thread-28292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:19:23.575 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:19:23.577 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:19:34.507 [DEBUG] [Thread-28293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:19:44.463 [DEBUG] [Thread-28294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:19:44.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:19:44.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:19:44.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
2026-04-16T00:19:45.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 19, 8), 3.30746, 79.9447, 0.0, 9.75816, 8.96449, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:19:45.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:19:08
2026-04-16T00:19:46.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:19:46.672 [DEBUG] [Thread-28295] [transport.py] [_log()] starting thread (client mode): 0xee954460
2026-04-16T00:19:46.672 [DEBUG] [Thread-28295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:19:46.692 [DEBUG] [Thread-28295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:19:46.692 [INFO] [Thread-28295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:19:46.695 [DEBUG] [Thread-28295] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:19:46.695 [DEBUG] [Thread-28295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:19:46.695 [DEBUG] [Thread-28295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:19:46.695 [DEBUG] [Thread-28295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:19:46.695 [DEBUG] [Thread-28295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:19:46.695 [DEBUG] [Thread-28295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:19:46.695 [DEBUG] [Thread-28295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:19:46.696 [DEBUG] [Thread-28295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:19:46.696 [DEBUG] [Thread-28295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:19:46.696 [DEBUG] [Thread-28295] [transport.py] [_log()] client lang: <none>
2026-04-16T00:19:46.696 [DEBUG] [Thread-28295] [transport.py] [_log()] server lang: <none>
2026-04-16T00:19:46.696 [DEBUG] [Thread-28295] [transport.py] [_log()] kex follows: False
2026-04-16T00:19:46.696 [DEBUG] [Thread-28295] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:19:46.696 [DEBUG] [Thread-28295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:19:46.696 [DEBUG] [Thread-28295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:19:46.696 [DEBUG] [Thread-28295] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:19:46.696 [DEBUG] [Thread-28295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:19:46.696 [DEBUG] [Thread-28295] [transport.py] [_log()] Compression: none
2026-04-16T00:19:46.697 [DEBUG] [Thread-28295] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:19:46.714 [DEBUG] [Thread-28295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:19:46.714 [DEBUG] [Thread-28295] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:19:46.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:19:46.715 [DEBUG] [Thread-28295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:19:46.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:19:46.716 [DEBUG] [Thread-28295] [transport.py] [_log()] userauth is OK
2026-04-16T00:19:46.716 [DEBUG] [Thread-28295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:19:46.716 [DEBUG] [Thread-28295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:19:46.716 [DEBUG] [Thread-28295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:19:46.716 [DEBUG] [Thread-28295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:19:46.752 [INFO] [Thread-28295] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:19:46.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:19:47.552 [DEBUG] [Thread-28295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:19:47.552 [DEBUG] [Thread-28295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:19:47.552 [DEBUG] [Thread-28295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:19:47.593 [DEBUG] [Thread-28295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:19:47.593 [DEBUG] [Thread-28295] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:19:47.595 [DEBUG] [Thread-28295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:19:47.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:19:47.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:19:47.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:19:47.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:19:47.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:19:47.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:19:47.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:19:47.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:19:47.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:19:47.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.929989 -999.00   +9.50   6.72     80   +6.40 1 1 1 2 1     0    0 3.15 -1.71 ZNESW 6.5 6.7 120.2 9.2 9.9 -24.8 9.7 -23.4 9.4 -21.4 9.7 -23.5
2026-04-16T00:19:47.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:19:47.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:19:47.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.929989
2026-04-16T00:19:47.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:19:47.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:19:47.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:19:47.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:19:47.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:19:47.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:19:08', tmtdew=3.30746, humidity=79.9447, cloud=0.0, wind=9.75816, temperature=8.96449, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:19:11.050', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0627500000000012, -0.04574999999999818, -0.04574999999999996, -0.0235000000000003, -0.028999999999999915, -0.007749999999997925, -0.024499999999999744, 0.0182500000000001, -0.04100000000000037, -0.11800000000000033, -0.04475000000000051, -0.10400000000000098, -0.0519999999999996, -0.0007500000000000284, -0.041999999999999815, -0.05400000000000027, -0.03974999999999973, -0.08050000000000068, -0.0065000000000008384, -0.04675000000000118, -0.031000000000000583, 0.026749999999998053, -0.01774999999999949, -0.03524999999999956, -0.020500000000000185, -0.054499999999999105, -0.023749999999999716, -0.0045000000000001705, -0.023999999999999133, 0.050499999999999545, 0.06800000000000139, 0.013000000000001677, -0.09925000000000139], zp_timestamp='2026-04-15T22:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:19:47.614 [DEBUG] [Thread-28295] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:19:47.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:19:47.827 [DEBUG] [Thread-28298] [transport.py] [_log()] starting thread (client mode): 0xf1364d90
2026-04-16T00:19:47.827 [DEBUG] [Thread-28298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:19:47.841 [DEBUG] [Thread-28298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:19:47.841 [INFO] [Thread-28298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:19:47.848 [DEBUG] [Thread-28298] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:19:47.848 [DEBUG] [Thread-28298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:19:47.848 [DEBUG] [Thread-28298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:19:47.848 [DEBUG] [Thread-28298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:19:47.848 [DEBUG] [Thread-28298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:19:47.848 [DEBUG] [Thread-28298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:19:47.849 [DEBUG] [Thread-28298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:19:47.849 [DEBUG] [Thread-28298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:19:47.849 [DEBUG] [Thread-28298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:19:47.849 [DEBUG] [Thread-28298] [transport.py] [_log()] client lang: <none>
2026-04-16T00:19:47.849 [DEBUG] [Thread-28298] [transport.py] [_log()] server lang: <none>
2026-04-16T00:19:47.849 [DEBUG] [Thread-28298] [transport.py] [_log()] kex follows: False
2026-04-16T00:19:47.849 [DEBUG] [Thread-28298] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:19:47.849 [DEBUG] [Thread-28298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:19:47.849 [DEBUG] [Thread-28298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:19:47.849 [DEBUG] [Thread-28298] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:19:47.849 [DEBUG] [Thread-28298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:19:47.850 [DEBUG] [Thread-28298] [transport.py] [_log()] Compression: none
2026-04-16T00:19:47.850 [DEBUG] [Thread-28298] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:19:47.906 [DEBUG] [Thread-28298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:19:47.906 [DEBUG] [Thread-28298] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:19:47.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:19:47.907 [DEBUG] [Thread-28298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:19:47.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:19:47.963 [DEBUG] [Thread-28298] [transport.py] [_log()] userauth is OK
2026-04-16T00:19:47.963 [DEBUG] [Thread-28298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:19:47.963 [DEBUG] [Thread-28298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:19:47.963 [DEBUG] [Thread-28298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:19:47.964 [DEBUG] [Thread-28298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:19:47.988 [INFO] [Thread-28298] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:19:47.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:19:47.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:19:48.803 [DEBUG] [Thread-28298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:19:48.803 [DEBUG] [Thread-28298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:19:48.851 [DEBUG] [Thread-28298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:19:48.851 [DEBUG] [Thread-28298] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:19:48.860 [DEBUG] [Thread-28298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:19:48.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:19:48.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')
2026-04-16T00:19:48.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') -> 00000000
2026-04-16T00:19:48.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:19:48.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:19:48.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:19:48.894 [DEBUG] [Thread-28298] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:19:49.538 [DEBUG] [Thread-28300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:20:04.587 [DEBUG] [Thread-28301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:20:18.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:20:18.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:20:18.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
2026-04-16T00:20:19.618 [DEBUG] [Thread-28302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:20:20.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 19, 43), 2.9259, 81.8231, 0.0, 12.1046, 8.79581, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:20:20.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:19:43
2026-04-16T00:20:20.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:20:20.989 [DEBUG] [Thread-28303] [transport.py] [_log()] starting thread (client mode): 0xf1364340
2026-04-16T00:20:20.989 [DEBUG] [Thread-28303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:20:21.008 [DEBUG] [Thread-28303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:20:21.008 [INFO] [Thread-28303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:20:21.011 [DEBUG] [Thread-28303] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:20:21.011 [DEBUG] [Thread-28303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:20:21.011 [DEBUG] [Thread-28303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:20:21.011 [DEBUG] [Thread-28303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:20:21.012 [DEBUG] [Thread-28303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:20:21.012 [DEBUG] [Thread-28303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:20:21.012 [DEBUG] [Thread-28303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:20:21.012 [DEBUG] [Thread-28303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:20:21.012 [DEBUG] [Thread-28303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:20:21.012 [DEBUG] [Thread-28303] [transport.py] [_log()] client lang: <none>
2026-04-16T00:20:21.012 [DEBUG] [Thread-28303] [transport.py] [_log()] server lang: <none>
2026-04-16T00:20:21.012 [DEBUG] [Thread-28303] [transport.py] [_log()] kex follows: False
2026-04-16T00:20:21.012 [DEBUG] [Thread-28303] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:20:21.012 [DEBUG] [Thread-28303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:20:21.012 [DEBUG] [Thread-28303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:20:21.013 [DEBUG] [Thread-28303] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:20:21.013 [DEBUG] [Thread-28303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:20:21.013 [DEBUG] [Thread-28303] [transport.py] [_log()] Compression: none
2026-04-16T00:20:21.013 [DEBUG] [Thread-28303] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:20:21.029 [DEBUG] [Thread-28303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:20:21.029 [DEBUG] [Thread-28303] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:20:21.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:20:21.030 [DEBUG] [Thread-28303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:20:21.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:20:21.031 [DEBUG] [Thread-28303] [transport.py] [_log()] userauth is OK
2026-04-16T00:20:21.032 [DEBUG] [Thread-28303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:20:21.032 [DEBUG] [Thread-28303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:20:21.032 [DEBUG] [Thread-28303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:20:21.032 [DEBUG] [Thread-28303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:20:21.056 [INFO] [Thread-28303] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:20:21.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:20:23.777 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:20:23.778 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:20:25.437 [DEBUG] [Thread-28303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:20:25.438 [DEBUG] [Thread-28303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:20:25.438 [DEBUG] [Thread-28303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:20:25.478 [DEBUG] [Thread-28303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:20:25.478 [DEBUG] [Thread-28303] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:20:25.481 [DEBUG] [Thread-28303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:20:25.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:20:25.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:20:25.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:20:25.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:20:25.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:20:25.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:20:25.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:20:25.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:20:25.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:20:25.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.930336 -999.00   +9.50   7.63     80   +6.40 1 1 1 2 1     0    0 3.04 -2.67 ZNESW 7.9 7.6 116.9 9.1 9.8 -24.6 9.7 -23.6 9.4 -21.3 9.7 -23.5
2026-04-16T00:20:25.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:20:25.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:20:25.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.930336
2026-04-16T00:20:25.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:20:25.509 [DEBUG] [Thread-28303] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:20:25.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:20:25.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:20:25.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:20:25.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:20:25.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:19:43', tmtdew=2.9259, humidity=81.8231, cloud=0.0, wind=12.1046, temperature=8.79581, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:19:41.030', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0627500000000012, -0.04574999999999818, -0.04574999999999996, -0.0235000000000003, -0.028999999999999915, -0.007749999999997925, -0.024499999999999744, 0.0182500000000001, -0.04100000000000037, -0.11800000000000033, -0.04475000000000051, -0.10400000000000098, -0.0519999999999996, -0.0007500000000000284, -0.041999999999999815, -0.05400000000000027, -0.03974999999999973, -0.08050000000000068, -0.0065000000000008384, -0.04675000000000118, -0.031000000000000583, 0.026749999999998053, -0.01774999999999949, -0.03524999999999956, -0.020500000000000185, -0.054499999999999105, -0.023749999999999716, -0.0045000000000001705, -0.023999999999999133, 0.050499999999999545, 0.06800000000000139, 0.013000000000001677, -0.09925000000000139], zp_timestamp='2026-04-15T22:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:20:25.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:20:25.764 [DEBUG] [Thread-28306] [transport.py] [_log()] starting thread (client mode): 0xee9c7f70
2026-04-16T00:20:25.764 [DEBUG] [Thread-28306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:20:25.779 [DEBUG] [Thread-28306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:20:25.779 [INFO] [Thread-28306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:20:25.786 [DEBUG] [Thread-28306] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:20:25.786 [DEBUG] [Thread-28306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:20:25.787 [DEBUG] [Thread-28306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:20:25.787 [DEBUG] [Thread-28306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:20:25.787 [DEBUG] [Thread-28306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:20:25.787 [DEBUG] [Thread-28306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:20:25.787 [DEBUG] [Thread-28306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:20:25.787 [DEBUG] [Thread-28306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:20:25.787 [DEBUG] [Thread-28306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:20:25.787 [DEBUG] [Thread-28306] [transport.py] [_log()] client lang: <none>
2026-04-16T00:20:25.787 [DEBUG] [Thread-28306] [transport.py] [_log()] server lang: <none>
2026-04-16T00:20:25.787 [DEBUG] [Thread-28306] [transport.py] [_log()] kex follows: False
2026-04-16T00:20:25.787 [DEBUG] [Thread-28306] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:20:25.787 [DEBUG] [Thread-28306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:20:25.788 [DEBUG] [Thread-28306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:20:25.788 [DEBUG] [Thread-28306] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:20:25.788 [DEBUG] [Thread-28306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:20:25.788 [DEBUG] [Thread-28306] [transport.py] [_log()] Compression: none
2026-04-16T00:20:25.788 [DEBUG] [Thread-28306] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:20:25.844 [DEBUG] [Thread-28306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:20:25.844 [DEBUG] [Thread-28306] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:20:25.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:20:25.845 [DEBUG] [Thread-28306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:20:25.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:20:25.900 [DEBUG] [Thread-28306] [transport.py] [_log()] userauth is OK
2026-04-16T00:20:25.901 [DEBUG] [Thread-28306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:20:25.901 [DEBUG] [Thread-28306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:20:25.901 [DEBUG] [Thread-28306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:20:25.901 [DEBUG] [Thread-28306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:20:25.926 [INFO] [Thread-28306] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:20:25.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:20:25.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:20:26.760 [DEBUG] [Thread-28306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:20:26.760 [DEBUG] [Thread-28306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:20:26.808 [DEBUG] [Thread-28306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:20:26.808 [DEBUG] [Thread-28306] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:20:26.816 [DEBUG] [Thread-28306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:20:26.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:20:26.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')
2026-04-16T00:20:26.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') -> 00000000
2026-04-16T00:20:26.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:20:26.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:20:26.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:20:26.847 [DEBUG] [Thread-28306] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:20:34.649 [DEBUG] [Thread-28308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:20:44.631 [DEBUG] [Thread-28309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:20:49.687 [DEBUG] [Thread-28310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:20:56.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:20:56.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:20:56.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
2026-04-16T00:20:58.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 20, 19), 3.36922, 79.8782, 0.0, 9.44064, 9.01439, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:20:58.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:20:19
2026-04-16T00:20:58.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:20:59.176 [DEBUG] [Thread-28311] [transport.py] [_log()] starting thread (client mode): 0xee905ea0
2026-04-16T00:20:59.176 [DEBUG] [Thread-28311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:20:59.196 [DEBUG] [Thread-28311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:20:59.196 [INFO] [Thread-28311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:20:59.199 [DEBUG] [Thread-28311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:20:59.199 [DEBUG] [Thread-28311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:20:59.199 [DEBUG] [Thread-28311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:20:59.200 [DEBUG] [Thread-28311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:20:59.200 [DEBUG] [Thread-28311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:20:59.200 [DEBUG] [Thread-28311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:20:59.200 [DEBUG] [Thread-28311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:20:59.200 [DEBUG] [Thread-28311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:20:59.200 [DEBUG] [Thread-28311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:20:59.200 [DEBUG] [Thread-28311] [transport.py] [_log()] client lang: <none>
2026-04-16T00:20:59.200 [DEBUG] [Thread-28311] [transport.py] [_log()] server lang: <none>
2026-04-16T00:20:59.200 [DEBUG] [Thread-28311] [transport.py] [_log()] kex follows: False
2026-04-16T00:20:59.200 [DEBUG] [Thread-28311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:20:59.200 [DEBUG] [Thread-28311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:20:59.201 [DEBUG] [Thread-28311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:20:59.201 [DEBUG] [Thread-28311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:20:59.201 [DEBUG] [Thread-28311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:20:59.201 [DEBUG] [Thread-28311] [transport.py] [_log()] Compression: none
2026-04-16T00:20:59.201 [DEBUG] [Thread-28311] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:20:59.217 [DEBUG] [Thread-28311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:20:59.217 [DEBUG] [Thread-28311] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:20:59.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:20:59.218 [DEBUG] [Thread-28311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:20:59.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:20:59.219 [DEBUG] [Thread-28311] [transport.py] [_log()] userauth is OK
2026-04-16T00:20:59.219 [DEBUG] [Thread-28311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:20:59.219 [DEBUG] [Thread-28311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:20:59.220 [DEBUG] [Thread-28311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:20:59.220 [DEBUG] [Thread-28311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:20:59.245 [INFO] [Thread-28311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:20:59.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:21:00.010 [DEBUG] [Thread-28311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:21:00.010 [DEBUG] [Thread-28311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:21:00.011 [DEBUG] [Thread-28311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:21:00.051 [DEBUG] [Thread-28311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:21:00.051 [DEBUG] [Thread-28311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:21:00.054 [DEBUG] [Thread-28311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:21:00.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:21:00.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:21:00.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:21:00.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:21:00.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:21:00.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:21:00.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:21:00.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:21:00.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:21:00.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.930683 -999.00   +9.50   9.46     81   +6.40 1 1 1 2 1     0    0 2.99 -3.38 ZNESW 7.8 9.5 121.2 10.9 9.8 -24.6 9.7 -23.6 9.4 -21.4 9.7 -23.4
2026-04-16T00:21:00.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:21:00.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:21:00.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.930683
2026-04-16T00:21:00.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:21:00.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:21:00.075 [DEBUG] [Thread-28311] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:21:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:21:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:21:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:21:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:20:19', tmtdew=3.36922, humidity=79.8782, cloud=0.0, wind=9.44064, temperature=9.01439, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:20:11.011', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0627500000000012, -0.04574999999999818, -0.04574999999999996, -0.0235000000000003, -0.028999999999999915, -0.007749999999997925, -0.024499999999999744, 0.0182500000000001, -0.04100000000000037, -0.11800000000000033, -0.04475000000000051, -0.10400000000000098, -0.0519999999999996, -0.0007500000000000284, -0.041999999999999815, -0.05400000000000027, -0.03974999999999973, -0.08050000000000068, -0.0065000000000008384, -0.04675000000000118, -0.031000000000000583, 0.026749999999998053, -0.01774999999999949, -0.03524999999999956, -0.020500000000000185, -0.054499999999999105, -0.023749999999999716, -0.0045000000000001705, -0.023999999999999133, 0.050499999999999545, 0.06800000000000139, 0.013000000000001677, -0.09925000000000139], zp_timestamp='2026-04-15T22:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:21:00.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:21:00.314 [DEBUG] [Thread-28314] [transport.py] [_log()] starting thread (client mode): 0xee905ff0
2026-04-16T00:21:00.314 [DEBUG] [Thread-28314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:21:00.329 [DEBUG] [Thread-28314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:21:00.329 [INFO] [Thread-28314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:21:00.336 [DEBUG] [Thread-28314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:21:00.336 [DEBUG] [Thread-28314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:21:00.336 [DEBUG] [Thread-28314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:21:00.336 [DEBUG] [Thread-28314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:21:00.336 [DEBUG] [Thread-28314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:21:00.336 [DEBUG] [Thread-28314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:21:00.337 [DEBUG] [Thread-28314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:21:00.337 [DEBUG] [Thread-28314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:21:00.337 [DEBUG] [Thread-28314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:21:00.337 [DEBUG] [Thread-28314] [transport.py] [_log()] client lang: <none>
2026-04-16T00:21:00.337 [DEBUG] [Thread-28314] [transport.py] [_log()] server lang: <none>
2026-04-16T00:21:00.337 [DEBUG] [Thread-28314] [transport.py] [_log()] kex follows: False
2026-04-16T00:21:00.337 [DEBUG] [Thread-28314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:21:00.337 [DEBUG] [Thread-28314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:21:00.337 [DEBUG] [Thread-28314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:21:00.337 [DEBUG] [Thread-28314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:21:00.337 [DEBUG] [Thread-28314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:21:00.337 [DEBUG] [Thread-28314] [transport.py] [_log()] Compression: none
2026-04-16T00:21:00.337 [DEBUG] [Thread-28314] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:21:00.393 [DEBUG] [Thread-28314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:21:00.393 [DEBUG] [Thread-28314] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:21:00.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:21:00.394 [DEBUG] [Thread-28314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:21:00.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:21:00.450 [DEBUG] [Thread-28314] [transport.py] [_log()] userauth is OK
2026-04-16T00:21:00.450 [DEBUG] [Thread-28314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:21:00.450 [DEBUG] [Thread-28314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:21:00.451 [DEBUG] [Thread-28314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:21:00.451 [DEBUG] [Thread-28314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:21:00.476 [INFO] [Thread-28314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:21:00.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:21:00.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:21:01.303 [DEBUG] [Thread-28314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:21:01.303 [DEBUG] [Thread-28314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:21:01.351 [DEBUG] [Thread-28314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:21:01.351 [DEBUG] [Thread-28314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:21:01.361 [DEBUG] [Thread-28314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:21:01.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:21:01.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')
2026-04-16T00:21:01.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
2026-04-16T00:21:01.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:21:01.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:21:01.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:21:01.396 [DEBUG] [Thread-28314] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:21:04.719 [DEBUG] [Thread-28316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:21:19.762 [DEBUG] [Thread-28317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:21:23.980 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:21:23.981 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:21:31.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:21:31.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:21:31.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
2026-04-16T00:21:32.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 20, 55), 3.36629, 79.8948, 0.0, 9.72288, 9.01439, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:21:32.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:20:55
2026-04-16T00:21:33.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:21:33.484 [DEBUG] [Thread-28318] [transport.py] [_log()] starting thread (client mode): 0xee990ac0
2026-04-16T00:21:33.484 [DEBUG] [Thread-28318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:21:33.506 [DEBUG] [Thread-28318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:21:33.506 [INFO] [Thread-28318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:21:33.510 [DEBUG] [Thread-28318] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:21:33.510 [DEBUG] [Thread-28318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:21:33.510 [DEBUG] [Thread-28318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:21:33.510 [DEBUG] [Thread-28318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:21:33.510 [DEBUG] [Thread-28318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:21:33.510 [DEBUG] [Thread-28318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:21:33.510 [DEBUG] [Thread-28318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:21:33.511 [DEBUG] [Thread-28318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:21:33.511 [DEBUG] [Thread-28318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:21:33.511 [DEBUG] [Thread-28318] [transport.py] [_log()] client lang: <none>
2026-04-16T00:21:33.511 [DEBUG] [Thread-28318] [transport.py] [_log()] server lang: <none>
2026-04-16T00:21:33.511 [DEBUG] [Thread-28318] [transport.py] [_log()] kex follows: False
2026-04-16T00:21:33.511 [DEBUG] [Thread-28318] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:21:33.511 [DEBUG] [Thread-28318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:21:33.511 [DEBUG] [Thread-28318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:21:33.511 [DEBUG] [Thread-28318] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:21:33.511 [DEBUG] [Thread-28318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:21:33.511 [DEBUG] [Thread-28318] [transport.py] [_log()] Compression: none
2026-04-16T00:21:33.512 [DEBUG] [Thread-28318] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:21:33.528 [DEBUG] [Thread-28318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:21:33.528 [DEBUG] [Thread-28318] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:21:33.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:21:33.529 [DEBUG] [Thread-28318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:21:33.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:21:33.530 [DEBUG] [Thread-28318] [transport.py] [_log()] userauth is OK
2026-04-16T00:21:33.530 [DEBUG] [Thread-28318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:21:33.530 [DEBUG] [Thread-28318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:21:33.530 [DEBUG] [Thread-28318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:21:33.530 [DEBUG] [Thread-28318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:21:33.555 [INFO] [Thread-28318] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:21:33.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:21:34.401 [DEBUG] [Thread-28318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:21:34.402 [DEBUG] [Thread-28318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:21:34.402 [DEBUG] [Thread-28318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:21:34.442 [DEBUG] [Thread-28318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:21:34.442 [DEBUG] [Thread-28318] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:21:34.445 [DEBUG] [Thread-28318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:21:34.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:21:34.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:21:34.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:21:34.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:21:34.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:21:34.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:21:34.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:21:34.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:21:34.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:21:34.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.931030 -999.00   +9.50   6.62     81   +6.40 1 1 1 2 1     0    0 2.98 -3.48 ZNESW 7.5 6.6 112.0 9.4 9.8 -24.8 9.7 -23.7 9.3 -21.4 9.7 -23.6
2026-04-16T00:21:34.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:21:34.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:21:34.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.931030
2026-04-16T00:21:34.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:21:34.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:21:34.473 [DEBUG] [Thread-28318] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:21:34.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:21:34.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:21:34.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:21:34.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:20:55', tmtdew=3.36629, humidity=79.8948, cloud=0.0, wind=9.72288, temperature=9.01439, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:20:40.992', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06475000000000009, -0.09174999999999933, -0.05274999999999963, -0.03750000000000142, -0.038000000000000256, -0.07974999999999888, -0.016000000000000014, -0.03774999999999906, -0.05550000000000033, -0.10099999999999909, -0.036749999999999616, -0.13949999999999996, -0.013500000000000512, -0.021250000000000213, -0.021000000000000796, -0.045000000000001705, 0.0012499999999988631, -0.07699999999999996, -0.013500000000000512, -0.04925000000000068, -0.032500000000002416, -0.004750000000001364, -0.0382499999999979, -0.06124999999999936, -0.05200000000000138, -0.0519999999999996, -0.028249999999999886, -0.059499999999999886, -0.032999999999999474, 0.057000000000000384, 0.014000000000001123, -0.004999999999999005, -0.12375000000000114], zp_timestamp='2026-04-15T22:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:21:34.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:21:34.752 [DEBUG] [Thread-28321] [transport.py] [_log()] starting thread (client mode): 0xf1352cb0
2026-04-16T00:21:34.752 [DEBUG] [Thread-28321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:21:34.766 [DEBUG] [Thread-28321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:21:34.766 [INFO] [Thread-28321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] client lang: <none>
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] server lang: <none>
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] kex follows: False
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:21:34.774 [DEBUG] [Thread-28321] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:21:34.775 [DEBUG] [Thread-28321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:21:34.775 [DEBUG] [Thread-28321] [transport.py] [_log()] Compression: none
2026-04-16T00:21:34.775 [DEBUG] [Thread-28321] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:21:34.792 [DEBUG] [Thread-28323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:21:34.830 [DEBUG] [Thread-28321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:21:34.830 [DEBUG] [Thread-28321] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:21:34.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:21:34.831 [DEBUG] [Thread-28321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:21:34.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:21:34.887 [DEBUG] [Thread-28321] [transport.py] [_log()] userauth is OK
2026-04-16T00:21:34.887 [DEBUG] [Thread-28321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:21:34.887 [DEBUG] [Thread-28321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:21:34.887 [DEBUG] [Thread-28321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:21:34.888 [DEBUG] [Thread-28321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:21:34.904 [INFO] [Thread-28321] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:21:34.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:21:34.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:21:35.768 [DEBUG] [Thread-28321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:21:35.768 [DEBUG] [Thread-28321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:21:35.815 [DEBUG] [Thread-28321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:21:35.815 [DEBUG] [Thread-28321] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:21:35.823 [DEBUG] [Thread-28321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:21:35.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:21:35.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')
2026-04-16T00:21:35.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
2026-04-16T00:21:35.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:21:35.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:21:35.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:21:35.855 [DEBUG] [Thread-28321] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:21:44.781 [DEBUG] [Thread-28324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:21:49.829 [DEBUG] [Thread-28325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:22:04.862 [DEBUG] [Thread-28326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:22:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:22:05.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:22:05.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
2026-04-16T00:22:07.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 21, 31), 3.37248, 79.8618, 0.0, 9.49356, 9.03113, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:22:07.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:21:31
2026-04-16T00:22:07.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:22:08.129 [DEBUG] [Thread-28327] [transport.py] [_log()] starting thread (client mode): 0xee954fa0
2026-04-16T00:22:08.129 [DEBUG] [Thread-28327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:22:08.149 [DEBUG] [Thread-28327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:22:08.149 [INFO] [Thread-28327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:22:08.152 [DEBUG] [Thread-28327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:22:08.152 [DEBUG] [Thread-28327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:22:08.152 [DEBUG] [Thread-28327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:22:08.152 [DEBUG] [Thread-28327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:22:08.152 [DEBUG] [Thread-28327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:22:08.152 [DEBUG] [Thread-28327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:22:08.152 [DEBUG] [Thread-28327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:22:08.153 [DEBUG] [Thread-28327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:22:08.153 [DEBUG] [Thread-28327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:22:08.153 [DEBUG] [Thread-28327] [transport.py] [_log()] client lang: <none>
2026-04-16T00:22:08.153 [DEBUG] [Thread-28327] [transport.py] [_log()] server lang: <none>
2026-04-16T00:22:08.153 [DEBUG] [Thread-28327] [transport.py] [_log()] kex follows: False
2026-04-16T00:22:08.153 [DEBUG] [Thread-28327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:22:08.153 [DEBUG] [Thread-28327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:22:08.153 [DEBUG] [Thread-28327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:22:08.153 [DEBUG] [Thread-28327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:22:08.153 [DEBUG] [Thread-28327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:22:08.153 [DEBUG] [Thread-28327] [transport.py] [_log()] Compression: none
2026-04-16T00:22:08.154 [DEBUG] [Thread-28327] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:22:08.170 [DEBUG] [Thread-28327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:22:08.170 [DEBUG] [Thread-28327] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:22:08.170 [DEBUG] [Thread-28327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:22:08.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:22:08.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:22:08.171 [DEBUG] [Thread-28327] [transport.py] [_log()] userauth is OK
2026-04-16T00:22:08.172 [DEBUG] [Thread-28327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:22:08.172 [DEBUG] [Thread-28327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:22:08.172 [DEBUG] [Thread-28327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:22:08.172 [DEBUG] [Thread-28327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:22:08.189 [INFO] [Thread-28327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:22:08.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:22:09.003 [DEBUG] [Thread-28327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:22:09.004 [DEBUG] [Thread-28327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:22:09.004 [DEBUG] [Thread-28327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:22:09.044 [DEBUG] [Thread-28327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:22:09.045 [DEBUG] [Thread-28327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:22:09.047 [DEBUG] [Thread-28327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:22:09.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:22:09.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:22:09.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:22:09.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:22:09.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:22:09.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:22:09.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:22:09.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:22:09.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:22:09.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.931378 -999.00   +9.50   9.42     81   +6.50 1 1 1 2 1     0    0 2.94 -3.99 ZNESW 7.2 9.4 105.2 10.1 9.8 -24.8 9.7 -23.7 9.3 -21.5 9.7 -23.5
2026-04-16T00:22:09.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:22:09.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:22:09.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.931378
2026-04-16T00:22:09.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:22:09.070 [DEBUG] [Thread-28327] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:22:09.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:22:09.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:22:09.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:22:09.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:22:09.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:21:31', tmtdew=3.37248, humidity=79.8618, cloud=0.0, wind=9.49356, temperature=9.03113, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:21:11.059', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06475000000000009, -0.09174999999999933, -0.05274999999999963, -0.03750000000000142, -0.038000000000000256, -0.07974999999999888, -0.016000000000000014, -0.03774999999999906, -0.05550000000000033, -0.10099999999999909, -0.036749999999999616, -0.13949999999999996, -0.013500000000000512, -0.021250000000000213, -0.021000000000000796, -0.045000000000001705, 0.0012499999999988631, -0.07699999999999996, -0.013500000000000512, -0.04925000000000068, -0.032500000000002416, -0.004750000000001364, -0.0382499999999979, -0.06124999999999936, -0.05200000000000138, -0.0519999999999996, -0.028249999999999886, -0.059499999999999886, -0.032999999999999474, 0.057000000000000384, 0.014000000000001123, -0.004999999999999005, -0.12375000000000114], zp_timestamp='2026-04-15T22:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:22:09.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:22:09.334 [DEBUG] [Thread-28330] [transport.py] [_log()] starting thread (client mode): 0xee9c37f0
2026-04-16T00:22:09.334 [DEBUG] [Thread-28330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:22:09.348 [DEBUG] [Thread-28330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:22:09.349 [INFO] [Thread-28330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:22:09.356 [DEBUG] [Thread-28330] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:22:09.356 [DEBUG] [Thread-28330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:22:09.356 [DEBUG] [Thread-28330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:22:09.356 [DEBUG] [Thread-28330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:22:09.356 [DEBUG] [Thread-28330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:22:09.356 [DEBUG] [Thread-28330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:22:09.356 [DEBUG] [Thread-28330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:22:09.357 [DEBUG] [Thread-28330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:22:09.357 [DEBUG] [Thread-28330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:22:09.357 [DEBUG] [Thread-28330] [transport.py] [_log()] client lang: <none>
2026-04-16T00:22:09.357 [DEBUG] [Thread-28330] [transport.py] [_log()] server lang: <none>
2026-04-16T00:22:09.357 [DEBUG] [Thread-28330] [transport.py] [_log()] kex follows: False
2026-04-16T00:22:09.357 [DEBUG] [Thread-28330] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:22:09.357 [DEBUG] [Thread-28330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:22:09.357 [DEBUG] [Thread-28330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:22:09.357 [DEBUG] [Thread-28330] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:22:09.357 [DEBUG] [Thread-28330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:22:09.357 [DEBUG] [Thread-28330] [transport.py] [_log()] Compression: none
2026-04-16T00:22:09.357 [DEBUG] [Thread-28330] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:22:09.412 [DEBUG] [Thread-28330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:22:09.413 [DEBUG] [Thread-28330] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:22:09.413 [DEBUG] [Thread-28330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:22:09.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:22:09.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:22:09.469 [DEBUG] [Thread-28330] [transport.py] [_log()] userauth is OK
2026-04-16T00:22:09.469 [DEBUG] [Thread-28330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:22:09.469 [DEBUG] [Thread-28330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:22:09.469 [DEBUG] [Thread-28330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:22:09.470 [DEBUG] [Thread-28330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:22:09.498 [INFO] [Thread-28330] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:22:09.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:22:09.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:22:10.301 [DEBUG] [Thread-28330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:22:10.302 [DEBUG] [Thread-28330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:22:10.349 [DEBUG] [Thread-28330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:22:10.349 [DEBUG] [Thread-28330] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:22:10.358 [DEBUG] [Thread-28330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:22:10.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:22:10.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')
2026-04-16T00:22:10.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') -> 00000000
2026-04-16T00:22:10.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:22:10.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:22:10.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:22:10.393 [DEBUG] [Thread-28330] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:22:19.894 [DEBUG] [Thread-28332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:22:24.244 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:22:24.246 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:22:34.935 [DEBUG] [Thread-28333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:22:40.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:22:40.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:22:40.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:22:41.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 22, 6), 3.38057, 79.8119, 0.0, 9.40536, 8.99784, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:22:41.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:22:06
2026-04-16T00:22:42.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:22:42.486 [DEBUG] [Thread-28334] [transport.py] [_log()] starting thread (client mode): 0xee9c1900
2026-04-16T00:22:42.486 [DEBUG] [Thread-28334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:22:42.506 [DEBUG] [Thread-28334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:22:42.507 [INFO] [Thread-28334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:22:42.510 [DEBUG] [Thread-28334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:22:42.510 [DEBUG] [Thread-28334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:22:42.510 [DEBUG] [Thread-28334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:22:42.510 [DEBUG] [Thread-28334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:22:42.510 [DEBUG] [Thread-28334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:22:42.510 [DEBUG] [Thread-28334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:22:42.510 [DEBUG] [Thread-28334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:22:42.510 [DEBUG] [Thread-28334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:22:42.510 [DEBUG] [Thread-28334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:22:42.510 [DEBUG] [Thread-28334] [transport.py] [_log()] client lang: <none>
2026-04-16T00:22:42.510 [DEBUG] [Thread-28334] [transport.py] [_log()] server lang: <none>
2026-04-16T00:22:42.510 [DEBUG] [Thread-28334] [transport.py] [_log()] kex follows: False
2026-04-16T00:22:42.510 [DEBUG] [Thread-28334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:22:42.510 [DEBUG] [Thread-28334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:22:42.510 [DEBUG] [Thread-28334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:22:42.511 [DEBUG] [Thread-28334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:22:42.511 [DEBUG] [Thread-28334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:22:42.511 [DEBUG] [Thread-28334] [transport.py] [_log()] Compression: none
2026-04-16T00:22:42.511 [DEBUG] [Thread-28334] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:22:42.526 [DEBUG] [Thread-28334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:22:42.527 [DEBUG] [Thread-28334] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:22:42.527 [DEBUG] [Thread-28334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:22:42.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:22:42.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:22:42.528 [DEBUG] [Thread-28334] [transport.py] [_log()] userauth is OK
2026-04-16T00:22:42.528 [DEBUG] [Thread-28334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:22:42.528 [DEBUG] [Thread-28334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:22:42.528 [DEBUG] [Thread-28334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:22:42.529 [DEBUG] [Thread-28334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:22:42.551 [INFO] [Thread-28334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:22:42.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:22:43.330 [DEBUG] [Thread-28334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:22:43.331 [DEBUG] [Thread-28334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:22:43.331 [DEBUG] [Thread-28334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:22:43.371 [DEBUG] [Thread-28334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:22:43.371 [DEBUG] [Thread-28334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:22:43.374 [DEBUG] [Thread-28334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:22:43.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:22:43.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:22:43.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:22:43.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:22:43.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:22:43.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:22:43.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:22:43.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:22:43.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:22:43.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.931725 -999.00   +9.40   8.52     81   +6.40 1 1 1 2 1     0    0 3.02 -4.51 ZNESW 6.5 8.5 106.6 11.1 9.8 -24.9 9.7 -23.6 9.4 -21.6 9.7 -23.6
2026-04-16T00:22:43.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:22:43.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:22:43.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.931725
2026-04-16T00:22:43.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:22:43.398 [DEBUG] [Thread-28334] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:22:43.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:22:43.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:22:43.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:22:43.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:22:43.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:22:06', tmtdew=3.38057, humidity=79.8119, cloud=0.0, wind=9.40536, temperature=8.99784, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:21:41.040', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06475000000000009, -0.09174999999999933, -0.05274999999999963, -0.03750000000000142, -0.038000000000000256, -0.07974999999999888, -0.016000000000000014, -0.03774999999999906, -0.05550000000000033, -0.10099999999999909, -0.036749999999999616, -0.13949999999999996, -0.013500000000000512, -0.021250000000000213, -0.021000000000000796, -0.045000000000001705, 0.0012499999999988631, -0.07699999999999996, -0.013500000000000512, -0.04925000000000068, -0.032500000000002416, -0.004750000000001364, -0.0382499999999979, -0.06124999999999936, -0.05200000000000138, -0.0519999999999996, -0.028249999999999886, -0.059499999999999886, -0.032999999999999474, 0.057000000000000384, 0.014000000000001123, -0.004999999999999005, -0.12375000000000114], zp_timestamp='2026-04-15T22:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:22:43.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:22:43.651 [DEBUG] [Thread-28337] [transport.py] [_log()] starting thread (client mode): 0xf1336a70
2026-04-16T00:22:43.652 [DEBUG] [Thread-28337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:22:43.667 [DEBUG] [Thread-28337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:22:43.667 [INFO] [Thread-28337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:22:43.674 [DEBUG] [Thread-28337] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:22:43.675 [DEBUG] [Thread-28337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:22:43.675 [DEBUG] [Thread-28337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:22:43.675 [DEBUG] [Thread-28337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:22:43.675 [DEBUG] [Thread-28337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:22:43.675 [DEBUG] [Thread-28337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:22:43.675 [DEBUG] [Thread-28337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:22:43.675 [DEBUG] [Thread-28337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:22:43.675 [DEBUG] [Thread-28337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:22:43.675 [DEBUG] [Thread-28337] [transport.py] [_log()] client lang: <none>
2026-04-16T00:22:43.675 [DEBUG] [Thread-28337] [transport.py] [_log()] server lang: <none>
2026-04-16T00:22:43.676 [DEBUG] [Thread-28337] [transport.py] [_log()] kex follows: False
2026-04-16T00:22:43.676 [DEBUG] [Thread-28337] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:22:43.676 [DEBUG] [Thread-28337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:22:43.676 [DEBUG] [Thread-28337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:22:43.676 [DEBUG] [Thread-28337] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:22:43.676 [DEBUG] [Thread-28337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:22:43.676 [DEBUG] [Thread-28337] [transport.py] [_log()] Compression: none
2026-04-16T00:22:43.676 [DEBUG] [Thread-28337] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:22:43.733 [DEBUG] [Thread-28337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:22:43.733 [DEBUG] [Thread-28337] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:22:43.734 [DEBUG] [Thread-28337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:22:43.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:22:43.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:22:43.793 [DEBUG] [Thread-28337] [transport.py] [_log()] userauth is OK
2026-04-16T00:22:43.793 [DEBUG] [Thread-28337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:22:43.793 [DEBUG] [Thread-28337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:22:43.793 [DEBUG] [Thread-28337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:22:43.794 [DEBUG] [Thread-28337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:22:43.817 [INFO] [Thread-28337] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:22:43.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:22:43.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:22:44.674 [DEBUG] [Thread-28337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:22:44.674 [DEBUG] [Thread-28337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:22:44.722 [DEBUG] [Thread-28337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:22:44.722 [DEBUG] [Thread-28337] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:22:44.731 [DEBUG] [Thread-28337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:22:44.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:22:44.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')
2026-04-16T00:22:44.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
2026-04-16T00:22:44.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:22:44.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:22:44.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:22:44.766 [DEBUG] [Thread-28337] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:22:44.929 [DEBUG] [Thread-28339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:22:49.963 [DEBUG] [Thread-28340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:23:05.004 [DEBUG] [Thread-28341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:23:14.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:23:14.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:23:14.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
2026-04-16T00:23:16.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 22, 42), 2.95752, 81.657, 0.0, 11.3285, 8.89522, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:23:16.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:22:42
2026-04-16T00:23:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:23:16.810 [DEBUG] [Thread-28342] [transport.py] [_log()] starting thread (client mode): 0xf1350310
2026-04-16T00:23:16.810 [DEBUG] [Thread-28342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:23:16.830 [DEBUG] [Thread-28342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:23:16.830 [INFO] [Thread-28342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:23:16.833 [DEBUG] [Thread-28342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:23:16.833 [DEBUG] [Thread-28342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:23:16.833 [DEBUG] [Thread-28342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:23:16.834 [DEBUG] [Thread-28342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:23:16.834 [DEBUG] [Thread-28342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:23:16.834 [DEBUG] [Thread-28342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:23:16.834 [DEBUG] [Thread-28342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:23:16.834 [DEBUG] [Thread-28342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:23:16.834 [DEBUG] [Thread-28342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:23:16.834 [DEBUG] [Thread-28342] [transport.py] [_log()] client lang: <none>
2026-04-16T00:23:16.834 [DEBUG] [Thread-28342] [transport.py] [_log()] server lang: <none>
2026-04-16T00:23:16.834 [DEBUG] [Thread-28342] [transport.py] [_log()] kex follows: False
2026-04-16T00:23:16.834 [DEBUG] [Thread-28342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:23:16.834 [DEBUG] [Thread-28342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:23:16.834 [DEBUG] [Thread-28342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:23:16.835 [DEBUG] [Thread-28342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:23:16.835 [DEBUG] [Thread-28342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:23:16.835 [DEBUG] [Thread-28342] [transport.py] [_log()] Compression: none
2026-04-16T00:23:16.835 [DEBUG] [Thread-28342] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:23:16.851 [DEBUG] [Thread-28342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:23:16.851 [DEBUG] [Thread-28342] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:23:16.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:23:16.852 [DEBUG] [Thread-28342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:23:16.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:23:16.853 [DEBUG] [Thread-28342] [transport.py] [_log()] userauth is OK
2026-04-16T00:23:16.853 [DEBUG] [Thread-28342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:23:16.853 [DEBUG] [Thread-28342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:23:16.854 [DEBUG] [Thread-28342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:23:16.854 [DEBUG] [Thread-28342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:23:16.878 [INFO] [Thread-28342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:23:16.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:23:17.626 [DEBUG] [Thread-28342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:23:17.627 [DEBUG] [Thread-28342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:23:17.627 [DEBUG] [Thread-28342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:23:17.668 [DEBUG] [Thread-28342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:23:17.668 [DEBUG] [Thread-28342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:23:17.671 [DEBUG] [Thread-28342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:23:17.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:23:17.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:23:17.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:23:17.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:23:17.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:23:17.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:23:17.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:23:17.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:23:17.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:23:17.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.932419 -999.00   +9.30   7.42     82   +6.40 1 1 1 2 1     0    0 3.00 -6.47 ZNESW 8.0 7.4 114.4 9.2 9.7 -25.0 9.6 -23.5 9.3 -21.6 9.6 -23.4
2026-04-16T00:23:17.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:23:17.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:23:17.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.932419
2026-04-16T00:23:17.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:23:17.698 [DEBUG] [Thread-28342] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:23:17.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:23:17.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:23:17.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:23:17.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:23:17.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:22:42', tmtdew=2.95752, humidity=81.657, cloud=0.0, wind=11.3285, temperature=8.89522, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:22:41.002', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06475000000000009, -0.09174999999999933, -0.05274999999999963, -0.03750000000000142, -0.038000000000000256, -0.07974999999999888, -0.016000000000000014, -0.03774999999999906, -0.05550000000000033, -0.10099999999999909, -0.036749999999999616, -0.13949999999999996, -0.013500000000000512, -0.021250000000000213, -0.021000000000000796, -0.045000000000001705, 0.0012499999999988631, -0.07699999999999996, -0.013500000000000512, -0.04925000000000068, -0.032500000000002416, -0.004750000000001364, -0.0382499999999979, -0.06124999999999936, -0.05200000000000138, -0.0519999999999996, -0.028249999999999886, -0.059499999999999886, -0.032999999999999474, 0.057000000000000384, 0.014000000000001123, -0.004999999999999005, -0.12375000000000114], zp_timestamp='2026-04-15T22:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:23:17.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:23:17.953 [DEBUG] [Thread-28345] [transport.py] [_log()] starting thread (client mode): 0xee9c3370
2026-04-16T00:23:17.953 [DEBUG] [Thread-28345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:23:17.967 [DEBUG] [Thread-28345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:23:17.967 [INFO] [Thread-28345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:23:17.975 [DEBUG] [Thread-28345] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:23:17.975 [DEBUG] [Thread-28345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:23:17.975 [DEBUG] [Thread-28345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:23:17.975 [DEBUG] [Thread-28345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:23:17.975 [DEBUG] [Thread-28345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:23:17.975 [DEBUG] [Thread-28345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:23:17.975 [DEBUG] [Thread-28345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:23:17.975 [DEBUG] [Thread-28345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:23:17.975 [DEBUG] [Thread-28345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:23:17.975 [DEBUG] [Thread-28345] [transport.py] [_log()] client lang: <none>
2026-04-16T00:23:17.976 [DEBUG] [Thread-28345] [transport.py] [_log()] server lang: <none>
2026-04-16T00:23:17.976 [DEBUG] [Thread-28345] [transport.py] [_log()] kex follows: False
2026-04-16T00:23:17.976 [DEBUG] [Thread-28345] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:23:17.976 [DEBUG] [Thread-28345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:23:17.976 [DEBUG] [Thread-28345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:23:17.976 [DEBUG] [Thread-28345] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:23:17.976 [DEBUG] [Thread-28345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:23:17.976 [DEBUG] [Thread-28345] [transport.py] [_log()] Compression: none
2026-04-16T00:23:17.976 [DEBUG] [Thread-28345] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:23:18.030 [DEBUG] [Thread-28345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:23:18.030 [DEBUG] [Thread-28345] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:23:18.031 [DEBUG] [Thread-28345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:23:18.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:23:18.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:23:18.087 [DEBUG] [Thread-28345] [transport.py] [_log()] userauth is OK
2026-04-16T00:23:18.088 [DEBUG] [Thread-28345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:23:18.088 [DEBUG] [Thread-28345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:23:18.088 [DEBUG] [Thread-28345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:23:18.088 [DEBUG] [Thread-28345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:23:18.110 [INFO] [Thread-28345] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:23:18.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:23:18.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:23:18.914 [DEBUG] [Thread-28345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:23:18.915 [DEBUG] [Thread-28345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:23:18.962 [DEBUG] [Thread-28345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:23:18.962 [DEBUG] [Thread-28345] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:23:18.971 [DEBUG] [Thread-28345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:23:18.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:23:18.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')
2026-04-16T00:23:18.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
2026-04-16T00:23:18.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:23:18.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:23:18.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:23:19.006 [DEBUG] [Thread-28345] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:23:20.033 [DEBUG] [Thread-28347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:23:24.448 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:23:24.448 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:23:35.075 [DEBUG] [Thread-28348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:23:45.074 [DEBUG] [Thread-28349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:23:49.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:23:49.029 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:23:49.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
2026-04-16T00:23:50.103 [DEBUG] [Thread-28350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:23:50.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 23, 17), 3.32582, 79.8451, 0.0, 9.03492, 8.99761, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:23:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:23:17
2026-04-16T00:23:50.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:23:51.165 [DEBUG] [Thread-28351] [transport.py] [_log()] starting thread (client mode): 0xee954490
2026-04-16T00:23:51.165 [DEBUG] [Thread-28351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:23:51.185 [DEBUG] [Thread-28351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:23:51.185 [INFO] [Thread-28351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:23:51.189 [DEBUG] [Thread-28351] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:23:51.189 [DEBUG] [Thread-28351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:23:51.189 [DEBUG] [Thread-28351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:23:51.189 [DEBUG] [Thread-28351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:23:51.189 [DEBUG] [Thread-28351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:23:51.190 [DEBUG] [Thread-28351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:23:51.190 [DEBUG] [Thread-28351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:23:51.190 [DEBUG] [Thread-28351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:23:51.190 [DEBUG] [Thread-28351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:23:51.190 [DEBUG] [Thread-28351] [transport.py] [_log()] client lang: <none>
2026-04-16T00:23:51.190 [DEBUG] [Thread-28351] [transport.py] [_log()] server lang: <none>
2026-04-16T00:23:51.190 [DEBUG] [Thread-28351] [transport.py] [_log()] kex follows: False
2026-04-16T00:23:51.190 [DEBUG] [Thread-28351] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:23:51.190 [DEBUG] [Thread-28351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:23:51.190 [DEBUG] [Thread-28351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:23:51.190 [DEBUG] [Thread-28351] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:23:51.191 [DEBUG] [Thread-28351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:23:51.191 [DEBUG] [Thread-28351] [transport.py] [_log()] Compression: none
2026-04-16T00:23:51.191 [DEBUG] [Thread-28351] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:23:51.207 [DEBUG] [Thread-28351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:23:51.207 [DEBUG] [Thread-28351] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:23:51.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:23:51.208 [DEBUG] [Thread-28351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:23:51.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:23:51.209 [DEBUG] [Thread-28351] [transport.py] [_log()] userauth is OK
2026-04-16T00:23:51.209 [DEBUG] [Thread-28351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:23:51.209 [DEBUG] [Thread-28351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:23:51.209 [DEBUG] [Thread-28351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:23:51.209 [DEBUG] [Thread-28351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:23:51.228 [INFO] [Thread-28351] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:23:51.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:23:52.011 [DEBUG] [Thread-28351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:23:52.012 [DEBUG] [Thread-28351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:23:52.012 [DEBUG] [Thread-28351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:23:52.053 [DEBUG] [Thread-28351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:23:52.053 [DEBUG] [Thread-28351] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:23:52.056 [DEBUG] [Thread-28351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:23:52.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:23:52.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:23:52.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:23:52.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:23:52.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:23:52.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:23:52.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:23:52.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:23:52.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:23:52.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.932767 -999.00   +9.20   8.76     82   +6.40 1 1 1 2 1     0    0 2.89 -7.94 ZNESW 7.3 8.8 114.8 10.3 9.7 -24.8 9.6 -23.6 9.4 -21.6 9.6 -23.5
2026-04-16T00:23:52.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:23:52.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:23:52.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.932767
2026-04-16T00:23:52.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:23:52.082 [DEBUG] [Thread-28351] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:23:52.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:23:52.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:23:52.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:23:52.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:23:52.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:23:17', tmtdew=3.32582, humidity=79.8451, cloud=0.0, wind=9.03492, temperature=8.99761, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:23:11.069', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06475000000000009, -0.09174999999999933, -0.05274999999999963, -0.03750000000000142, -0.038000000000000256, -0.07974999999999888, -0.016000000000000014, -0.03774999999999906, -0.05550000000000033, -0.10099999999999909, -0.036749999999999616, -0.13949999999999996, -0.013500000000000512, -0.021250000000000213, -0.021000000000000796, -0.045000000000001705, 0.0012499999999988631, -0.07699999999999996, -0.013500000000000512, -0.04925000000000068, -0.032500000000002416, -0.004750000000001364, -0.0382499999999979, -0.06124999999999936, -0.05200000000000138, -0.0519999999999996, -0.028249999999999886, -0.059499999999999886, -0.032999999999999474, 0.057000000000000384, 0.014000000000001123, -0.004999999999999005, -0.12375000000000114], zp_timestamp='2026-04-15T22:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:23:52.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:23:52.341 [DEBUG] [Thread-28354] [transport.py] [_log()] starting thread (client mode): 0xee9c2770
2026-04-16T00:23:52.342 [DEBUG] [Thread-28354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:23:52.356 [DEBUG] [Thread-28354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:23:52.357 [INFO] [Thread-28354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:23:52.364 [DEBUG] [Thread-28354] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:23:52.364 [DEBUG] [Thread-28354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:23:52.364 [DEBUG] [Thread-28354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:23:52.364 [DEBUG] [Thread-28354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:23:52.364 [DEBUG] [Thread-28354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:23:52.364 [DEBUG] [Thread-28354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:23:52.364 [DEBUG] [Thread-28354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:23:52.365 [DEBUG] [Thread-28354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:23:52.365 [DEBUG] [Thread-28354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:23:52.365 [DEBUG] [Thread-28354] [transport.py] [_log()] client lang: <none>
2026-04-16T00:23:52.365 [DEBUG] [Thread-28354] [transport.py] [_log()] server lang: <none>
2026-04-16T00:23:52.365 [DEBUG] [Thread-28354] [transport.py] [_log()] kex follows: False
2026-04-16T00:23:52.365 [DEBUG] [Thread-28354] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:23:52.365 [DEBUG] [Thread-28354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:23:52.365 [DEBUG] [Thread-28354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:23:52.365 [DEBUG] [Thread-28354] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:23:52.365 [DEBUG] [Thread-28354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:23:52.365 [DEBUG] [Thread-28354] [transport.py] [_log()] Compression: none
2026-04-16T00:23:52.366 [DEBUG] [Thread-28354] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:23:52.423 [DEBUG] [Thread-28354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:23:52.423 [DEBUG] [Thread-28354] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:23:52.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:23:52.424 [DEBUG] [Thread-28354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:23:52.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:23:52.480 [DEBUG] [Thread-28354] [transport.py] [_log()] userauth is OK
2026-04-16T00:23:52.480 [DEBUG] [Thread-28354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:23:52.480 [DEBUG] [Thread-28354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:23:52.480 [DEBUG] [Thread-28354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:23:52.480 [DEBUG] [Thread-28354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:23:52.497 [INFO] [Thread-28354] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:23:52.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:23:52.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:23:53.310 [DEBUG] [Thread-28354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:23:53.311 [DEBUG] [Thread-28354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:23:53.358 [DEBUG] [Thread-28354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:23:53.358 [DEBUG] [Thread-28354] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:23:53.367 [DEBUG] [Thread-28354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:23:53.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:23:53.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')
2026-04-16T00:23:53.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
2026-04-16T00:23:53.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:23:53.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:23:53.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:23:53.402 [DEBUG] [Thread-28354] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:24:05.134 [DEBUG] [Thread-28356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:24:20.177 [DEBUG] [Thread-28357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:24:23.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:24:23.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:24:23.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
2026-04-16T00:24:24.650 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:24:24.651 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:24:24.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 23, 52), 2.97006, 81.5903, 0.0, 10.517, 8.9282, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:24:24.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:23:52
2026-04-16T00:24:25.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:24:25.455 [DEBUG] [Thread-28358] [transport.py] [_log()] starting thread (client mode): 0xee9c3ee0
2026-04-16T00:24:25.456 [DEBUG] [Thread-28358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:24:25.479 [DEBUG] [Thread-28358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:24:25.479 [INFO] [Thread-28358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:24:25.482 [DEBUG] [Thread-28358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:24:25.482 [DEBUG] [Thread-28358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:24:25.482 [DEBUG] [Thread-28358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:24:25.482 [DEBUG] [Thread-28358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:24:25.482 [DEBUG] [Thread-28358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:24:25.483 [DEBUG] [Thread-28358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:24:25.483 [DEBUG] [Thread-28358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:24:25.483 [DEBUG] [Thread-28358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:24:25.483 [DEBUG] [Thread-28358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:24:25.483 [DEBUG] [Thread-28358] [transport.py] [_log()] client lang: <none>
2026-04-16T00:24:25.483 [DEBUG] [Thread-28358] [transport.py] [_log()] server lang: <none>
2026-04-16T00:24:25.483 [DEBUG] [Thread-28358] [transport.py] [_log()] kex follows: False
2026-04-16T00:24:25.483 [DEBUG] [Thread-28358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:24:25.483 [DEBUG] [Thread-28358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:24:25.483 [DEBUG] [Thread-28358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:24:25.483 [DEBUG] [Thread-28358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:24:25.483 [DEBUG] [Thread-28358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:24:25.484 [DEBUG] [Thread-28358] [transport.py] [_log()] Compression: none
2026-04-16T00:24:25.484 [DEBUG] [Thread-28358] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:24:25.500 [DEBUG] [Thread-28358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:24:25.501 [DEBUG] [Thread-28358] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:24:25.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:24:25.501 [DEBUG] [Thread-28358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:24:25.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:24:25.544 [DEBUG] [Thread-28358] [transport.py] [_log()] userauth is OK
2026-04-16T00:24:25.544 [DEBUG] [Thread-28358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:24:25.545 [DEBUG] [Thread-28358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:24:25.545 [DEBUG] [Thread-28358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:24:25.545 [DEBUG] [Thread-28358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:24:25.570 [INFO] [Thread-28358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:24:25.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:24:26.383 [DEBUG] [Thread-28358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:24:26.383 [DEBUG] [Thread-28358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:24:26.384 [DEBUG] [Thread-28358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:24:26.425 [DEBUG] [Thread-28358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:24:26.425 [DEBUG] [Thread-28358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:24:26.427 [DEBUG] [Thread-28358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:24:26.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:24:26.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:24:26.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:24:26.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:24:26.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:24:26.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:24:26.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:24:26.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:24:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:24:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.933114 -999.00   +9.20   7.69     82   +6.30 1 1 1 2 1     0    0 2.83 -8.54 ZNESW 8.1 7.7 117.6 9.1 9.7 -25.0 9.6 -23.6 9.3 -21.7 9.7 -23.5
2026-04-16T00:24:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:24:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:24:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.933114
2026-04-16T00:24:26.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:24:26.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:24:26.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:24:26.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:24:26.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:24:26.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:23:52', tmtdew=2.97006, humidity=81.5903, cloud=0.0, wind=10.517, temperature=8.9282, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:23:41.050', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06475000000000009, -0.09174999999999933, -0.05274999999999963, -0.03750000000000142, -0.038000000000000256, -0.07974999999999888, -0.016000000000000014, -0.03774999999999906, -0.05550000000000033, -0.10099999999999909, -0.036749999999999616, -0.13949999999999996, -0.013500000000000512, -0.021250000000000213, -0.021000000000000796, -0.045000000000001705, 0.0012499999999988631, -0.07699999999999996, -0.013500000000000512, -0.04925000000000068, -0.032500000000002416, -0.004750000000001364, -0.0382499999999979, -0.06124999999999936, -0.05200000000000138, -0.0519999999999996, -0.028249999999999886, -0.059499999999999886, -0.032999999999999474, 0.057000000000000384, 0.014000000000001123, -0.004999999999999005, -0.12375000000000114], zp_timestamp='2026-04-15T22:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:24:26.447 [DEBUG] [Thread-28358] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:24:26.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:24:26.676 [DEBUG] [Thread-28361] [transport.py] [_log()] starting thread (client mode): 0xf1350310
2026-04-16T00:24:26.677 [DEBUG] [Thread-28361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:24:26.691 [DEBUG] [Thread-28361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:24:26.691 [INFO] [Thread-28361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] client lang: <none>
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] server lang: <none>
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] kex follows: False
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:24:26.699 [DEBUG] [Thread-28361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:24:26.700 [DEBUG] [Thread-28361] [transport.py] [_log()] Compression: none
2026-04-16T00:24:26.700 [DEBUG] [Thread-28361] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:24:26.756 [DEBUG] [Thread-28361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:24:26.756 [DEBUG] [Thread-28361] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:24:26.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:24:26.756 [DEBUG] [Thread-28361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:24:26.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:24:26.813 [DEBUG] [Thread-28361] [transport.py] [_log()] userauth is OK
2026-04-16T00:24:26.813 [DEBUG] [Thread-28361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:24:26.813 [DEBUG] [Thread-28361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:24:26.814 [DEBUG] [Thread-28361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:24:26.814 [DEBUG] [Thread-28361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:24:26.839 [INFO] [Thread-28361] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:24:26.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:24:26.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:24:27.652 [DEBUG] [Thread-28361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:24:27.653 [DEBUG] [Thread-28361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:24:27.701 [DEBUG] [Thread-28361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:24:27.701 [DEBUG] [Thread-28361] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:24:27.710 [DEBUG] [Thread-28361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:24:27.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:24:27.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')
2026-04-16T00:24:27.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
2026-04-16T00:24:27.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:24:27.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:24:27.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:24:27.744 [DEBUG] [Thread-28361] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:24:35.208 [DEBUG] [Thread-28363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:24:45.236 [DEBUG] [Thread-28364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:24:50.244 [DEBUG] [Thread-28365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:24:57.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:24:57.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:24:57.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
2026-04-16T00:24:59.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 24, 28), 3.3501, 79.7124, 0.0, 8.47044, 9.03086, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:24:59.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:24:28
2026-04-16T00:24:59.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:24:59.824 [DEBUG] [Thread-28366] [transport.py] [_log()] starting thread (client mode): 0xee991e70
2026-04-16T00:24:59.824 [DEBUG] [Thread-28366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:24:59.843 [DEBUG] [Thread-28366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:24:59.843 [INFO] [Thread-28366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:24:59.846 [DEBUG] [Thread-28366] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:24:59.846 [DEBUG] [Thread-28366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:24:59.847 [DEBUG] [Thread-28366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:24:59.847 [DEBUG] [Thread-28366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:24:59.847 [DEBUG] [Thread-28366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:24:59.847 [DEBUG] [Thread-28366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:24:59.847 [DEBUG] [Thread-28366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:24:59.847 [DEBUG] [Thread-28366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:24:59.847 [DEBUG] [Thread-28366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:24:59.847 [DEBUG] [Thread-28366] [transport.py] [_log()] client lang: <none>
2026-04-16T00:24:59.847 [DEBUG] [Thread-28366] [transport.py] [_log()] server lang: <none>
2026-04-16T00:24:59.847 [DEBUG] [Thread-28366] [transport.py] [_log()] kex follows: False
2026-04-16T00:24:59.848 [DEBUG] [Thread-28366] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:24:59.848 [DEBUG] [Thread-28366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:24:59.848 [DEBUG] [Thread-28366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:24:59.848 [DEBUG] [Thread-28366] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:24:59.848 [DEBUG] [Thread-28366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:24:59.848 [DEBUG] [Thread-28366] [transport.py] [_log()] Compression: none
2026-04-16T00:24:59.848 [DEBUG] [Thread-28366] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:24:59.856 [DEBUG] [Thread-28366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:24:59.856 [DEBUG] [Thread-28366] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:24:59.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:24:59.857 [DEBUG] [Thread-28366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:24:59.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:24:59.858 [DEBUG] [Thread-28366] [transport.py] [_log()] userauth is OK
2026-04-16T00:24:59.858 [DEBUG] [Thread-28366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:24:59.858 [DEBUG] [Thread-28366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:24:59.858 [DEBUG] [Thread-28366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:24:59.858 [DEBUG] [Thread-28366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:24:59.880 [INFO] [Thread-28366] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:24:59.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:25:00.687 [DEBUG] [Thread-28366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:25:00.687 [DEBUG] [Thread-28366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:25:00.688 [DEBUG] [Thread-28366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:25:00.728 [DEBUG] [Thread-28366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:25:00.728 [DEBUG] [Thread-28366] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:25:00.731 [DEBUG] [Thread-28366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:25:00.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:25:00.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:25:00.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:25:00.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:25:00.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:25:00.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:25:00.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:25:00.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:25:00.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:25:00.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.933461 -999.00   +9.10   7.42     82   +6.30 1 1 1 2 1     0    0 2.85 -10.15 ZNESW 6.6 7.4 107.8 7.9 9.7 -24.9 9.6 -23.6 9.3 -21.5 9.6 -23.5
2026-04-16T00:25:00.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:25:00.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:25:00.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.933461
2026-04-16T00:25:00.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:25:00.758 [DEBUG] [Thread-28366] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:25:00.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:25:00.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:25:00.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:25:00.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:25:00.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:24:28', tmtdew=3.3501, humidity=79.7124, cloud=0.0, wind=8.47044, temperature=9.03086, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:24:11.030', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06475000000000009, -0.09174999999999933, -0.05274999999999963, -0.03750000000000142, -0.038000000000000256, -0.07974999999999888, -0.016000000000000014, -0.03774999999999906, -0.05550000000000033, -0.10099999999999909, -0.036749999999999616, -0.13949999999999996, -0.013500000000000512, -0.021250000000000213, -0.021000000000000796, -0.045000000000001705, 0.0012499999999988631, -0.07699999999999996, -0.013500000000000512, -0.04925000000000068, -0.032500000000002416, -0.004750000000001364, -0.0382499999999979, -0.06124999999999936, -0.05200000000000138, -0.0519999999999996, -0.028249999999999886, -0.059499999999999886, -0.032999999999999474, 0.057000000000000384, 0.014000000000001123, -0.004999999999999005, -0.12375000000000114], zp_timestamp='2026-04-15T22:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:25:00.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:25:01.010 [DEBUG] [Thread-28369] [transport.py] [_log()] starting thread (client mode): 0xee993850
2026-04-16T00:25:01.011 [DEBUG] [Thread-28369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:25:01.025 [DEBUG] [Thread-28369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:25:01.025 [INFO] [Thread-28369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:25:01.033 [DEBUG] [Thread-28369] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:25:01.033 [DEBUG] [Thread-28369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:25:01.033 [DEBUG] [Thread-28369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:25:01.033 [DEBUG] [Thread-28369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:25:01.033 [DEBUG] [Thread-28369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:25:01.034 [DEBUG] [Thread-28369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:25:01.034 [DEBUG] [Thread-28369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:25:01.034 [DEBUG] [Thread-28369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:25:01.034 [DEBUG] [Thread-28369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:25:01.034 [DEBUG] [Thread-28369] [transport.py] [_log()] client lang: <none>
2026-04-16T00:25:01.034 [DEBUG] [Thread-28369] [transport.py] [_log()] server lang: <none>
2026-04-16T00:25:01.034 [DEBUG] [Thread-28369] [transport.py] [_log()] kex follows: False
2026-04-16T00:25:01.034 [DEBUG] [Thread-28369] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:25:01.034 [DEBUG] [Thread-28369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:25:01.034 [DEBUG] [Thread-28369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:25:01.034 [DEBUG] [Thread-28369] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:25:01.035 [DEBUG] [Thread-28369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:25:01.035 [DEBUG] [Thread-28369] [transport.py] [_log()] Compression: none
2026-04-16T00:25:01.035 [DEBUG] [Thread-28369] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:25:01.089 [DEBUG] [Thread-28369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:25:01.089 [DEBUG] [Thread-28369] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:25:01.090 [DEBUG] [Thread-28369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:25:01.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:25:01.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:25:01.146 [DEBUG] [Thread-28369] [transport.py] [_log()] userauth is OK
2026-04-16T00:25:01.146 [DEBUG] [Thread-28369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:25:01.146 [DEBUG] [Thread-28369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:25:01.146 [DEBUG] [Thread-28369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:25:01.147 [DEBUG] [Thread-28369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:25:01.172 [INFO] [Thread-28369] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:25:01.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:25:01.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:25:01.983 [DEBUG] [Thread-28369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:25:01.984 [DEBUG] [Thread-28369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:25:02.031 [DEBUG] [Thread-28369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:25:02.031 [DEBUG] [Thread-28369] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:25:02.040 [DEBUG] [Thread-28369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:25:02.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:25:02.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')
2026-04-16T00:25:02.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
2026-04-16T00:25:02.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:25:02.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:25:02.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:25:02.080 [DEBUG] [Thread-28369] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:25:05.275 [DEBUG] [Thread-28371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:25:20.319 [DEBUG] [Thread-28372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:25:24.854 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:25:24.855 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:25:24.972 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:25:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:25:32.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:25:32.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
2026-04-16T00:25:33.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 25, 4), 3.35894, 79.6627, 0.0, 8.39988, 9.03086, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:25:33.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:25:04
2026-04-16T00:25:33.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:25:34.144 [DEBUG] [Thread-28373] [transport.py] [_log()] starting thread (client mode): 0xee993d30
2026-04-16T00:25:34.144 [DEBUG] [Thread-28373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:25:34.165 [DEBUG] [Thread-28373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:25:34.165 [INFO] [Thread-28373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:25:34.168 [DEBUG] [Thread-28373] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:25:34.168 [DEBUG] [Thread-28373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:25:34.168 [DEBUG] [Thread-28373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:25:34.168 [DEBUG] [Thread-28373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:25:34.168 [DEBUG] [Thread-28373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:25:34.168 [DEBUG] [Thread-28373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:25:34.168 [DEBUG] [Thread-28373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:25:34.168 [DEBUG] [Thread-28373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:25:34.168 [DEBUG] [Thread-28373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:25:34.169 [DEBUG] [Thread-28373] [transport.py] [_log()] client lang: <none>
2026-04-16T00:25:34.169 [DEBUG] [Thread-28373] [transport.py] [_log()] server lang: <none>
2026-04-16T00:25:34.169 [DEBUG] [Thread-28373] [transport.py] [_log()] kex follows: False
2026-04-16T00:25:34.169 [DEBUG] [Thread-28373] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:25:34.169 [DEBUG] [Thread-28373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:25:34.169 [DEBUG] [Thread-28373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:25:34.169 [DEBUG] [Thread-28373] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:25:34.169 [DEBUG] [Thread-28373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:25:34.169 [DEBUG] [Thread-28373] [transport.py] [_log()] Compression: none
2026-04-16T00:25:34.169 [DEBUG] [Thread-28373] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:25:34.186 [DEBUG] [Thread-28373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:25:34.186 [DEBUG] [Thread-28373] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:25:34.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:25:34.187 [DEBUG] [Thread-28373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:25:34.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:25:34.188 [DEBUG] [Thread-28373] [transport.py] [_log()] userauth is OK
2026-04-16T00:25:34.188 [DEBUG] [Thread-28373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:25:34.188 [DEBUG] [Thread-28373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:25:34.188 [DEBUG] [Thread-28373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:25:34.188 [DEBUG] [Thread-28373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:25:34.212 [INFO] [Thread-28373] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:25:34.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:25:34.481 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:25:35.348 [DEBUG] [Thread-28375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:25:36.221 [DEBUG] [Thread-28373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:25:36.221 [DEBUG] [Thread-28373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:25:36.221 [DEBUG] [Thread-28373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:25:36.262 [DEBUG] [Thread-28373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:25:36.262 [DEBUG] [Thread-28373] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:25:36.264 [DEBUG] [Thread-28373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:25:36.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:25:36.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:25:36.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:25:36.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:25:36.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:25:36.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:25:36.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:25:36.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:25:36.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:25:36.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.933808 -999.00   +9.10   6.84     82   +6.30 1 1 1 2 1     0    0 2.80 -12.10 ZNESW 5.8 6.8 106.8 8.3 9.7 -24.9 9.6 -23.6 9.3 -21.6 9.6 -23.5
2026-04-16T00:25:36.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:25:36.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:25:36.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.933808
2026-04-16T00:25:36.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:25:36.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:25:36.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:25:36.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:25:36.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:25:36.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:25:04', tmtdew=3.35894, humidity=79.6627, cloud=0.0, wind=8.39988, temperature=9.03086, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:24:41.011', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06475000000000009, -0.09174999999999933, -0.05274999999999963, -0.03750000000000142, -0.038000000000000256, -0.07974999999999888, -0.016000000000000014, -0.03774999999999906, -0.05550000000000033, -0.10099999999999909, -0.036749999999999616, -0.13949999999999996, -0.013500000000000512, -0.021250000000000213, -0.021000000000000796, -0.045000000000001705, 0.0012499999999988631, -0.07699999999999996, -0.013500000000000512, -0.04925000000000068, -0.032500000000002416, -0.004750000000001364, -0.0382499999999979, -0.06124999999999936, -0.05200000000000138, -0.0519999999999996, -0.028249999999999886, -0.059499999999999886, -0.032999999999999474, 0.057000000000000384, 0.014000000000001123, -0.004999999999999005, -0.12375000000000114], zp_timestamp='2026-04-15T22:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:25:36.284 [DEBUG] [Thread-28373] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:25:36.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:25:36.519 [DEBUG] [Thread-28377] [transport.py] [_log()] starting thread (client mode): 0xee9c08b0
2026-04-16T00:25:36.519 [DEBUG] [Thread-28377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:25:36.534 [DEBUG] [Thread-28377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:25:36.534 [INFO] [Thread-28377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:25:36.541 [DEBUG] [Thread-28377] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:25:36.541 [DEBUG] [Thread-28377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:25:36.541 [DEBUG] [Thread-28377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:25:36.541 [DEBUG] [Thread-28377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:25:36.541 [DEBUG] [Thread-28377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:25:36.541 [DEBUG] [Thread-28377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:25:36.541 [DEBUG] [Thread-28377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:25:36.541 [DEBUG] [Thread-28377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:25:36.541 [DEBUG] [Thread-28377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:25:36.542 [DEBUG] [Thread-28377] [transport.py] [_log()] client lang: <none>
2026-04-16T00:25:36.542 [DEBUG] [Thread-28377] [transport.py] [_log()] server lang: <none>
2026-04-16T00:25:36.542 [DEBUG] [Thread-28377] [transport.py] [_log()] kex follows: False
2026-04-16T00:25:36.542 [DEBUG] [Thread-28377] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:25:36.542 [DEBUG] [Thread-28377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:25:36.542 [DEBUG] [Thread-28377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:25:36.542 [DEBUG] [Thread-28377] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:25:36.542 [DEBUG] [Thread-28377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:25:36.542 [DEBUG] [Thread-28377] [transport.py] [_log()] Compression: none
2026-04-16T00:25:36.542 [DEBUG] [Thread-28377] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:25:36.598 [DEBUG] [Thread-28377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:25:36.598 [DEBUG] [Thread-28377] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:25:36.599 [DEBUG] [Thread-28377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:25:36.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:25:36.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:25:36.655 [DEBUG] [Thread-28377] [transport.py] [_log()] userauth is OK
2026-04-16T00:25:36.655 [DEBUG] [Thread-28377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:25:36.655 [DEBUG] [Thread-28377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:25:36.655 [DEBUG] [Thread-28377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:25:36.655 [DEBUG] [Thread-28377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:25:36.677 [INFO] [Thread-28377] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:25:36.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:25:36.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:25:37.497 [DEBUG] [Thread-28377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:25:37.498 [DEBUG] [Thread-28377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:25:37.549 [DEBUG] [Thread-28377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:25:37.550 [DEBUG] [Thread-28377] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:25:37.562 [DEBUG] [Thread-28377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:25:37.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:25:37.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')
2026-04-16T00:25:37.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
2026-04-16T00:25:37.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:25:37.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:25:37.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:25:37.611 [DEBUG] [Thread-28377] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:25:38.595 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:25:45.386 [DEBUG] [Thread-28379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:25:50.375 [DEBUG] [Thread-28380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:26:05.415 [DEBUG] [Thread-28381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:26:07.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:26:07.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:26:07.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
2026-04-16T00:26:08.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 25, 39), 3.06587, 81.0603, 0.0, 9.21168, 8.99517, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:26:08.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:25:39
2026-04-16T00:26:09.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:26:09.802 [DEBUG] [Thread-28382] [transport.py] [_log()] starting thread (client mode): 0xee9c37f0
2026-04-16T00:26:09.802 [DEBUG] [Thread-28382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:26:09.820 [DEBUG] [Thread-28382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:26:09.821 [INFO] [Thread-28382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:26:09.824 [DEBUG] [Thread-28382] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:26:09.824 [DEBUG] [Thread-28382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:26:09.824 [DEBUG] [Thread-28382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:26:09.824 [DEBUG] [Thread-28382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:26:09.824 [DEBUG] [Thread-28382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:26:09.824 [DEBUG] [Thread-28382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:26:09.824 [DEBUG] [Thread-28382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:26:09.824 [DEBUG] [Thread-28382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:26:09.824 [DEBUG] [Thread-28382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:26:09.824 [DEBUG] [Thread-28382] [transport.py] [_log()] client lang: <none>
2026-04-16T00:26:09.824 [DEBUG] [Thread-28382] [transport.py] [_log()] server lang: <none>
2026-04-16T00:26:09.825 [DEBUG] [Thread-28382] [transport.py] [_log()] kex follows: False
2026-04-16T00:26:09.825 [DEBUG] [Thread-28382] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:26:09.825 [DEBUG] [Thread-28382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:26:09.825 [DEBUG] [Thread-28382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:26:09.825 [DEBUG] [Thread-28382] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:26:09.825 [DEBUG] [Thread-28382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:26:09.825 [DEBUG] [Thread-28382] [transport.py] [_log()] Compression: none
2026-04-16T00:26:09.825 [DEBUG] [Thread-28382] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:26:09.842 [DEBUG] [Thread-28382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:26:09.842 [DEBUG] [Thread-28382] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:26:09.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:26:09.843 [DEBUG] [Thread-28382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:26:09.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:26:09.844 [DEBUG] [Thread-28382] [transport.py] [_log()] userauth is OK
2026-04-16T00:26:09.844 [DEBUG] [Thread-28382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:26:09.844 [DEBUG] [Thread-28382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:26:09.844 [DEBUG] [Thread-28382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:26:09.844 [DEBUG] [Thread-28382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:26:09.868 [INFO] [Thread-28382] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:26:09.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:26:10.619 [DEBUG] [Thread-28382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:26:10.620 [DEBUG] [Thread-28382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:26:10.620 [DEBUG] [Thread-28382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:26:10.660 [DEBUG] [Thread-28382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:26:10.660 [DEBUG] [Thread-28382] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:26:10.663 [DEBUG] [Thread-28382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:26:10.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:26:10.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:26:10.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:26:10.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:26:10.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:26:10.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:26:10.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:26:10.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:26:10.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:26:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.934503 -999.00   +9.10   6.21     82   +6.30 1 1 1 2 1     0    0 2.62 -13.50 ZNESW 6.5 6.2 108.2 7.7 9.7 -24.9 9.6 -23.6 9.2 -21.6 9.5 -23.5
2026-04-16T00:26:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:26:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:26:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.934503
2026-04-16T00:26:10.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:26:10.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:26:10.687 [DEBUG] [Thread-28382] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:26:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:26:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:26:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:26:10.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:25:39', tmtdew=3.06587, humidity=81.0603, cloud=0.0, wind=9.21168, temperature=8.99517, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:25:41.059', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06475000000000009, -0.09174999999999933, -0.05274999999999963, -0.03750000000000142, -0.038000000000000256, -0.07974999999999888, -0.016000000000000014, -0.03774999999999906, -0.05550000000000033, -0.10099999999999909, -0.036749999999999616, -0.13949999999999996, -0.013500000000000512, -0.021250000000000213, -0.021000000000000796, -0.045000000000001705, 0.0012499999999988631, -0.07699999999999996, -0.013500000000000512, -0.04925000000000068, -0.032500000000002416, -0.004750000000001364, -0.0382499999999979, -0.06124999999999936, -0.05200000000000138, -0.0519999999999996, -0.028249999999999886, -0.059499999999999886, -0.032999999999999474, 0.057000000000000384, 0.014000000000001123, -0.004999999999999005, -0.12375000000000114], zp_timestamp='2026-04-15T22:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:26:10.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:26:10.952 [DEBUG] [Thread-28385] [transport.py] [_log()] starting thread (client mode): 0xee992b90
2026-04-16T00:26:10.953 [DEBUG] [Thread-28385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:26:10.967 [DEBUG] [Thread-28385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:26:10.967 [INFO] [Thread-28385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:26:10.974 [DEBUG] [Thread-28385] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:26:10.974 [DEBUG] [Thread-28385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:26:10.974 [DEBUG] [Thread-28385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:26:10.974 [DEBUG] [Thread-28385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:26:10.974 [DEBUG] [Thread-28385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:26:10.974 [DEBUG] [Thread-28385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:26:10.975 [DEBUG] [Thread-28385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:26:10.975 [DEBUG] [Thread-28385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:26:10.975 [DEBUG] [Thread-28385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:26:10.975 [DEBUG] [Thread-28385] [transport.py] [_log()] client lang: <none>
2026-04-16T00:26:10.975 [DEBUG] [Thread-28385] [transport.py] [_log()] server lang: <none>
2026-04-16T00:26:10.975 [DEBUG] [Thread-28385] [transport.py] [_log()] kex follows: False
2026-04-16T00:26:10.975 [DEBUG] [Thread-28385] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:26:10.975 [DEBUG] [Thread-28385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:26:10.975 [DEBUG] [Thread-28385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:26:10.975 [DEBUG] [Thread-28385] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:26:10.975 [DEBUG] [Thread-28385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:26:10.975 [DEBUG] [Thread-28385] [transport.py] [_log()] Compression: none
2026-04-16T00:26:10.975 [DEBUG] [Thread-28385] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:26:11.030 [DEBUG] [Thread-28385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:26:11.031 [DEBUG] [Thread-28385] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:26:11.031 [DEBUG] [Thread-28385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:26:11.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:26:11.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:26:11.088 [DEBUG] [Thread-28385] [transport.py] [_log()] userauth is OK
2026-04-16T00:26:11.088 [DEBUG] [Thread-28385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:26:11.088 [DEBUG] [Thread-28385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:26:11.088 [DEBUG] [Thread-28385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:26:11.088 [DEBUG] [Thread-28385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:26:11.105 [INFO] [Thread-28385] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:26:11.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:26:11.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:26:11.908 [DEBUG] [Thread-28385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:26:11.909 [DEBUG] [Thread-28385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:26:11.956 [DEBUG] [Thread-28385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:26:11.956 [DEBUG] [Thread-28385] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:26:11.965 [DEBUG] [Thread-28385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:26:11.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:26:11.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')
2026-04-16T00:26:11.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
2026-04-16T00:26:11.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:26:11.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:26:11.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:26:12.000 [DEBUG] [Thread-28385] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:26:20.444 [DEBUG] [Thread-28387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:26:25.057 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:26:25.058 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:26:35.482 [DEBUG] [Thread-28388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:26:42.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:26:42.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:26:42.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
2026-04-16T00:26:43.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 26, 15), 3.38846, 79.497, 0.0, 8.22348, 8.981, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:26:43.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:26:15
2026-04-16T00:26:43.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:26:44.091 [DEBUG] [Thread-28389] [transport.py] [_log()] starting thread (client mode): 0xf1336620
2026-04-16T00:26:44.092 [DEBUG] [Thread-28389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:26:44.111 [DEBUG] [Thread-28389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:26:44.111 [INFO] [Thread-28389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:26:44.113 [DEBUG] [Thread-28389] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:26:44.114 [DEBUG] [Thread-28389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:26:44.114 [DEBUG] [Thread-28389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:26:44.114 [DEBUG] [Thread-28389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:26:44.114 [DEBUG] [Thread-28389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:26:44.114 [DEBUG] [Thread-28389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:26:44.114 [DEBUG] [Thread-28389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:26:44.114 [DEBUG] [Thread-28389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:26:44.114 [DEBUG] [Thread-28389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:26:44.114 [DEBUG] [Thread-28389] [transport.py] [_log()] client lang: <none>
2026-04-16T00:26:44.114 [DEBUG] [Thread-28389] [transport.py] [_log()] server lang: <none>
2026-04-16T00:26:44.114 [DEBUG] [Thread-28389] [transport.py] [_log()] kex follows: False
2026-04-16T00:26:44.115 [DEBUG] [Thread-28389] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:26:44.115 [DEBUG] [Thread-28389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:26:44.115 [DEBUG] [Thread-28389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:26:44.115 [DEBUG] [Thread-28389] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:26:44.115 [DEBUG] [Thread-28389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:26:44.115 [DEBUG] [Thread-28389] [transport.py] [_log()] Compression: none
2026-04-16T00:26:44.115 [DEBUG] [Thread-28389] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:26:44.132 [DEBUG] [Thread-28389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:26:44.132 [DEBUG] [Thread-28389] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:26:44.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:26:44.133 [DEBUG] [Thread-28389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:26:44.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:26:44.176 [DEBUG] [Thread-28389] [transport.py] [_log()] userauth is OK
2026-04-16T00:26:44.176 [DEBUG] [Thread-28389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:26:44.177 [DEBUG] [Thread-28389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:26:44.177 [DEBUG] [Thread-28389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:26:44.177 [DEBUG] [Thread-28389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:26:44.201 [INFO] [Thread-28389] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:26:44.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:26:44.995 [DEBUG] [Thread-28389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:26:44.995 [DEBUG] [Thread-28389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:26:44.996 [DEBUG] [Thread-28389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:26:45.036 [DEBUG] [Thread-28389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:26:45.036 [DEBUG] [Thread-28389] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:26:45.039 [DEBUG] [Thread-28389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:26:45.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:26:45.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:26:45.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:26:45.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:26:45.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:26:45.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:26:45.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:26:45.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:26:45.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:26:45.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.934850 -999.00   +9.00   5.67     82   +6.30 1 1 1 2 1     0    0 2.62 -14.87 ZNESW 5.8 5.7 107.6 7.1 9.7 -24.9 9.5 -23.7 9.2 -21.6 9.5 -23.5
2026-04-16T00:26:45.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:26:45.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:26:45.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.934850
2026-04-16T00:26:45.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:26:45.064 [DEBUG] [Thread-28389] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:26:45.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:26:45.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:26:45.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:26:45.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:26:45.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:26:15', tmtdew=3.38846, humidity=79.497, cloud=0.0, wind=8.22348, temperature=8.981, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:26:11.040', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06475000000000009, -0.09174999999999933, -0.05274999999999963, -0.03750000000000142, -0.038000000000000256, -0.07974999999999888, -0.016000000000000014, -0.03774999999999906, -0.05550000000000033, -0.10099999999999909, -0.036749999999999616, -0.13949999999999996, -0.013500000000000512, -0.021250000000000213, -0.021000000000000796, -0.045000000000001705, 0.0012499999999988631, -0.07699999999999996, -0.013500000000000512, -0.04925000000000068, -0.032500000000002416, -0.004750000000001364, -0.0382499999999979, -0.06124999999999936, -0.05200000000000138, -0.0519999999999996, -0.028249999999999886, -0.059499999999999886, -0.032999999999999474, 0.057000000000000384, 0.014000000000001123, -0.004999999999999005, -0.12375000000000114], zp_timestamp='2026-04-15T22:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:26:45.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:26:45.537 [DEBUG] [Thread-28392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:26:50.513 [DEBUG] [Thread-28393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:27:01.217 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:27:05.558 [DEBUG] [Thread-28394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:27:09.908 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:27:13.996 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:27:20.586 [DEBUG] [Thread-28395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:27:25.259 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:27:25.260 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:27:35.615 [DEBUG] [Thread-28396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:27:45.683 [DEBUG] [Thread-28397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:27:50.644 [DEBUG] [Thread-28398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:28:05.672 [DEBUG] [Thread-28399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:28:20.701 [DEBUG] [Thread-28400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:28:25.464 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:28:25.465 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:28:35.731 [DEBUG] [Thread-28401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:28:36.675 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:28:45.320 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:28:45.850 [DEBUG] [Thread-28402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:28:49.434 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:28:50.763 [DEBUG] [Thread-28403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:28:59.402 [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
2026-04-16T00:29:05.795 [DEBUG] [Thread-28404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:29:20.826 [DEBUG] [Thread-28405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:29:25.667 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:29:25.669 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:29:29.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:29:29.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:29:29.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
2026-04-16T00:29:30.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 29, 12), 3.33989, 79.4802, 0.0, 7.659, 8.8645, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:29:31.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:29:12
2026-04-16T00:29:31.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:29:32.020 [DEBUG] [Thread-28406] [transport.py] [_log()] starting thread (client mode): 0xf1336a70
2026-04-16T00:29:32.020 [DEBUG] [Thread-28406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:29:32.040 [DEBUG] [Thread-28406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:29:32.040 [INFO] [Thread-28406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:29:32.043 [DEBUG] [Thread-28406] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:29:32.043 [DEBUG] [Thread-28406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:29:32.043 [DEBUG] [Thread-28406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] client lang: <none>
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] server lang: <none>
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] kex follows: False
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] Compression: none
2026-04-16T00:29:32.044 [DEBUG] [Thread-28406] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:29:32.060 [DEBUG] [Thread-28406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:29:32.061 [DEBUG] [Thread-28406] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:29:32.061 [DEBUG] [Thread-28406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:29:32.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:29:32.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:29:32.062 [DEBUG] [Thread-28406] [transport.py] [_log()] userauth is OK
2026-04-16T00:29:32.062 [DEBUG] [Thread-28406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:29:32.062 [DEBUG] [Thread-28406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:29:32.062 [DEBUG] [Thread-28406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:29:32.062 [DEBUG] [Thread-28406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:29:32.092 [INFO] [Thread-28406] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:29:32.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:29:32.726 [DEBUG] [Thread-28406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:29:32.726 [DEBUG] [Thread-28406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:29:32.727 [DEBUG] [Thread-28406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:29:32.767 [DEBUG] [Thread-28406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:29:32.767 [DEBUG] [Thread-28406] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:29:32.770 [DEBUG] [Thread-28406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:29:32.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:29:32.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:29:32.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:29:32.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:29:32.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:29:32.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:29:32.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:29:32.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:29:32.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:29:32.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.936933 -999.00   +8.80   5.95     83   +6.20 1 1 1 2 1     0    0 2.30 -23.48 ZNESW 5.3 6.0 111.6 7.2 9.5 -25.1 -999.0 -999.0 9.2 -21.8 9.4 -23.8
2026-04-16T00:29:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:29:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:29:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.936933
2026-04-16T00:29:32.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:29:32.797 [DEBUG] [Thread-28406] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:29:32.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:29:32.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:29:32.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:29:32.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:29:32.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:29:12', tmtdew=3.33989, humidity=79.4802, cloud=0.0, wind=7.659, temperature=8.8645, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:29:11.011', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0572499999999998, -0.05924999999999869, -0.0337499999999995, -0.05649999999999977, -0.037499999999999645, -0.059749999999999304, -0.025000000000000355, -0.009749999999998593, -0.061500000000000554, -0.1095000000000006, -0.034750000000000725, -0.0860000000000003, -0.021000000000000796, -0.0007500000000000284, -0.03550000000000075, -0.02800000000000047, -0.007749999999999702, -0.07800000000000118, -0.015000000000000568, -0.045750000000001734, -0.021000000000000796, -0.021750000000000824, -0.012749999999998707, -0.009249999999999758, 0.0019999999999988916, -0.05349999999999966, -0.027249999999998664, -0.0015000000000000568, -0.018000000000000682, 0.040000000000000924, 0.023000000000001464, -0.0029999999999983373, -0.10625000000000107], zp_timestamp='2026-04-15T22:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:29:33.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:29:33.052 [DEBUG] [Thread-28409] [transport.py] [_log()] starting thread (client mode): 0xf13511e0
2026-04-16T00:29:33.052 [DEBUG] [Thread-28409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:29:33.067 [DEBUG] [Thread-28409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:29:33.067 [INFO] [Thread-28409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:29:33.074 [DEBUG] [Thread-28409] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:29:33.074 [DEBUG] [Thread-28409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:29:33.074 [DEBUG] [Thread-28409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:29:33.075 [DEBUG] [Thread-28409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:29:33.075 [DEBUG] [Thread-28409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:29:33.075 [DEBUG] [Thread-28409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:29:33.075 [DEBUG] [Thread-28409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:29:33.075 [DEBUG] [Thread-28409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:29:33.075 [DEBUG] [Thread-28409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:29:33.075 [DEBUG] [Thread-28409] [transport.py] [_log()] client lang: <none>
2026-04-16T00:29:33.075 [DEBUG] [Thread-28409] [transport.py] [_log()] server lang: <none>
2026-04-16T00:29:33.075 [DEBUG] [Thread-28409] [transport.py] [_log()] kex follows: False
2026-04-16T00:29:33.075 [DEBUG] [Thread-28409] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:29:33.076 [DEBUG] [Thread-28409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:29:33.076 [DEBUG] [Thread-28409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:29:33.076 [DEBUG] [Thread-28409] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:29:33.076 [DEBUG] [Thread-28409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:29:33.076 [DEBUG] [Thread-28409] [transport.py] [_log()] Compression: none
2026-04-16T00:29:33.076 [DEBUG] [Thread-28409] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:29:33.131 [DEBUG] [Thread-28409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:29:33.132 [DEBUG] [Thread-28409] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:29:33.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:29:33.133 [DEBUG] [Thread-28409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:29:33.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:29:33.188 [DEBUG] [Thread-28409] [transport.py] [_log()] userauth is OK
2026-04-16T00:29:33.188 [DEBUG] [Thread-28409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:29:33.189 [DEBUG] [Thread-28409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:29:33.189 [DEBUG] [Thread-28409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:29:33.189 [DEBUG] [Thread-28409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:29:33.214 [INFO] [Thread-28409] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:29:33.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:29:33.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:29:34.041 [DEBUG] [Thread-28409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:29:34.041 [DEBUG] [Thread-28409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:29:34.090 [DEBUG] [Thread-28409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:29:34.090 [DEBUG] [Thread-28409] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:29:34.099 [DEBUG] [Thread-28409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:29:34.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:29:34.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')
2026-04-16T00:29:34.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
2026-04-16T00:29:34.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:29:34.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:29:34.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:29:34.134 [DEBUG] [Thread-28409] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:29:35.858 [DEBUG] [Thread-28411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:29:46.015 [DEBUG] [Thread-28412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:29:50.905 [DEBUG] [Thread-28413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:30:04.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:30:04.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:30:04.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
2026-04-16T00:30:05.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 29, 48), 3.0723, 80.9936, 0.0, 7.72992, 8.76263, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:30:05.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:29:48
2026-04-16T00:30:05.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:30:05.935 [DEBUG] [Thread-28414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:30:06.388 [DEBUG] [Thread-28415] [transport.py] [_log()] starting thread (client mode): 0xee933340
2026-04-16T00:30:06.388 [DEBUG] [Thread-28415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:30:06.408 [DEBUG] [Thread-28415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:30:06.409 [INFO] [Thread-28415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:30:06.410 [DEBUG] [Thread-28415] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:30:06.410 [DEBUG] [Thread-28415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:30:06.410 [DEBUG] [Thread-28415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:30:06.410 [DEBUG] [Thread-28415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:30:06.410 [DEBUG] [Thread-28415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:30:06.410 [DEBUG] [Thread-28415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:30:06.410 [DEBUG] [Thread-28415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:30:06.410 [DEBUG] [Thread-28415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:30:06.411 [DEBUG] [Thread-28415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:30:06.411 [DEBUG] [Thread-28415] [transport.py] [_log()] client lang: <none>
2026-04-16T00:30:06.411 [DEBUG] [Thread-28415] [transport.py] [_log()] server lang: <none>
2026-04-16T00:30:06.411 [DEBUG] [Thread-28415] [transport.py] [_log()] kex follows: False
2026-04-16T00:30:06.411 [DEBUG] [Thread-28415] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:30:06.411 [DEBUG] [Thread-28415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:30:06.411 [DEBUG] [Thread-28415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:30:06.411 [DEBUG] [Thread-28415] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:30:06.411 [DEBUG] [Thread-28415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:30:06.411 [DEBUG] [Thread-28415] [transport.py] [_log()] Compression: none
2026-04-16T00:30:06.411 [DEBUG] [Thread-28415] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:30:06.419 [DEBUG] [Thread-28415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:30:06.420 [DEBUG] [Thread-28415] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:30:06.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:30:06.420 [DEBUG] [Thread-28415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:30:06.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:30:06.421 [DEBUG] [Thread-28415] [transport.py] [_log()] userauth is OK
2026-04-16T00:30:06.421 [DEBUG] [Thread-28415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:30:06.422 [DEBUG] [Thread-28415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:30:06.422 [DEBUG] [Thread-28415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:30:06.422 [DEBUG] [Thread-28415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:30:06.455 [INFO] [Thread-28415] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:30:06.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:30:11.977 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:30:13.510 [DEBUG] [Thread-28415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:30:13.510 [DEBUG] [Thread-28415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:30:13.511 [DEBUG] [Thread-28415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:30:13.551 [DEBUG] [Thread-28415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:30:13.551 [DEBUG] [Thread-28415] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:30:13.554 [DEBUG] [Thread-28415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:30:13.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:30:13.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:30:13.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:30:13.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:30:13.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:30:13.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:30:13.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:30:13.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:30:13.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:30:13.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.937280 -999.00   +8.70   5.86     83   +6.10 1 1 1 2 1     0    0 2.26 -24.81 ZNESW 5.2 5.9 112.2 6.3 9.5 -25.0 9.4 -23.8 9.2 -21.7 9.4 -23.9
2026-04-16T00:30:13.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:30:13.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:30:13.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.937280
2026-04-16T00:30:13.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:30:13.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:30:13.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:30:13.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:30:13.583 [DEBUG] [Thread-28415] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:30:13.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:30:13.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:29:48', tmtdew=3.0723, humidity=80.9936, cloud=0.0, wind=7.72992, temperature=8.76263, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:29:40.992', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0572499999999998, -0.05924999999999869, -0.0337499999999995, -0.05649999999999977, -0.037499999999999645, -0.059749999999999304, -0.025000000000000355, -0.009749999999998593, -0.061500000000000554, -0.1095000000000006, -0.034750000000000725, -0.0860000000000003, -0.021000000000000796, -0.0007500000000000284, -0.03550000000000075, -0.02800000000000047, -0.007749999999999702, -0.07800000000000118, -0.015000000000000568, -0.045750000000001734, -0.021000000000000796, -0.021750000000000824, -0.012749999999998707, -0.009249999999999758, 0.0019999999999988916, -0.05349999999999966, -0.027249999999998664, -0.0015000000000000568, -0.018000000000000682, 0.040000000000000924, 0.023000000000001464, -0.0029999999999983373, -0.10625000000000107], zp_timestamp='2026-04-15T22:25:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:30:13.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:30:13.837 [DEBUG] [Thread-28418] [transport.py] [_log()] starting thread (client mode): 0xee933760
2026-04-16T00:30:13.837 [DEBUG] [Thread-28418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:30:13.852 [DEBUG] [Thread-28418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:30:13.852 [INFO] [Thread-28418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:30:13.860 [DEBUG] [Thread-28418] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:30:13.860 [DEBUG] [Thread-28418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:30:13.860 [DEBUG] [Thread-28418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:30:13.860 [DEBUG] [Thread-28418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:30:13.860 [DEBUG] [Thread-28418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:30:13.860 [DEBUG] [Thread-28418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:30:13.860 [DEBUG] [Thread-28418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:30:13.860 [DEBUG] [Thread-28418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:30:13.860 [DEBUG] [Thread-28418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:30:13.860 [DEBUG] [Thread-28418] [transport.py] [_log()] client lang: <none>
2026-04-16T00:30:13.860 [DEBUG] [Thread-28418] [transport.py] [_log()] server lang: <none>
2026-04-16T00:30:13.860 [DEBUG] [Thread-28418] [transport.py] [_log()] kex follows: False
2026-04-16T00:30:13.861 [DEBUG] [Thread-28418] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:30:13.861 [DEBUG] [Thread-28418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:30:13.861 [DEBUG] [Thread-28418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:30:13.861 [DEBUG] [Thread-28418] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:30:13.861 [DEBUG] [Thread-28418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:30:13.861 [DEBUG] [Thread-28418] [transport.py] [_log()] Compression: none
2026-04-16T00:30:13.861 [DEBUG] [Thread-28418] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:30:13.917 [DEBUG] [Thread-28418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:30:13.918 [DEBUG] [Thread-28418] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:30:13.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:30:13.918 [DEBUG] [Thread-28418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:30:13.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:30:13.981 [DEBUG] [Thread-28418] [transport.py] [_log()] userauth is OK
2026-04-16T00:30:13.981 [DEBUG] [Thread-28418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:30:13.981 [DEBUG] [Thread-28418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:30:13.981 [DEBUG] [Thread-28418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:30:13.981 [DEBUG] [Thread-28418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:30:14.007 [INFO] [Thread-28418] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:30:14.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:30:14.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:30:14.830 [DEBUG] [Thread-28418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:30:14.831 [DEBUG] [Thread-28418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:30:14.879 [DEBUG] [Thread-28418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:30:14.879 [DEBUG] [Thread-28418] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:30:14.888 [DEBUG] [Thread-28418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:30:14.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:30:14.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')
2026-04-16T00:30:14.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-16T00:30:14.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:30:14.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:30:14.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:30:14.923 [DEBUG] [Thread-28418] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:30:20.969 [DEBUG] [Thread-28420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:30:25.869 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:30:25.870 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:30:26.108 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:30:29.171 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:30:35.577 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:30:36.013 [DEBUG] [Thread-28421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:30:44.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:30:44.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:30:44.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
2026-04-16T00:30:46.182 [DEBUG] [Thread-28422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:30:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 30, 23), 3.33317, 79.5136, 0.0, 7.7472, 8.83146, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:30:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:30:23
2026-04-16T00:30:46.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:30:47.161 [DEBUG] [Thread-28423] [transport.py] [_log()] starting thread (client mode): 0xf13e1360
2026-04-16T00:30:47.162 [DEBUG] [Thread-28423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:30:47.186 [DEBUG] [Thread-28423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:30:47.186 [INFO] [Thread-28423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:30:47.189 [DEBUG] [Thread-28423] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:30:47.189 [DEBUG] [Thread-28423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:30:47.189 [DEBUG] [Thread-28423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:30:47.189 [DEBUG] [Thread-28423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:30:47.189 [DEBUG] [Thread-28423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:30:47.189 [DEBUG] [Thread-28423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:30:47.190 [DEBUG] [Thread-28423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:30:47.190 [DEBUG] [Thread-28423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:30:47.190 [DEBUG] [Thread-28423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:30:47.190 [DEBUG] [Thread-28423] [transport.py] [_log()] client lang: <none>
2026-04-16T00:30:47.190 [DEBUG] [Thread-28423] [transport.py] [_log()] server lang: <none>
2026-04-16T00:30:47.190 [DEBUG] [Thread-28423] [transport.py] [_log()] kex follows: False
2026-04-16T00:30:47.190 [DEBUG] [Thread-28423] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:30:47.190 [DEBUG] [Thread-28423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:30:47.190 [DEBUG] [Thread-28423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:30:47.190 [DEBUG] [Thread-28423] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:30:47.190 [DEBUG] [Thread-28423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:30:47.190 [DEBUG] [Thread-28423] [transport.py] [_log()] Compression: none
2026-04-16T00:30:47.191 [DEBUG] [Thread-28423] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:30:47.205 [DEBUG] [Thread-28423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:30:47.205 [DEBUG] [Thread-28423] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:30:47.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:30:47.206 [DEBUG] [Thread-28423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:30:47.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:30:47.206 [DEBUG] [Thread-28423] [transport.py] [_log()] userauth is OK
2026-04-16T00:30:47.206 [DEBUG] [Thread-28423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:30:47.206 [DEBUG] [Thread-28423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:30:47.207 [DEBUG] [Thread-28423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:30:47.207 [DEBUG] [Thread-28423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:30:47.227 [INFO] [Thread-28423] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:30:47.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:30:48.053 [DEBUG] [Thread-28423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:30:48.053 [DEBUG] [Thread-28423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:30:48.054 [DEBUG] [Thread-28423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:30:48.094 [DEBUG] [Thread-28423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:30:48.094 [DEBUG] [Thread-28423] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:30:48.098 [DEBUG] [Thread-28423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:30:48.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:30:48.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:30:48.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:30:48.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:30:48.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:30:48.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:30:48.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:30:48.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:30:48.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:30:48.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.937628 -999.00   +8.70   5.58     84   +6.20 1 1 1 2 1     0    0 2.25 -24.56 ZNESW 6.7 5.6 114.4 6.9 9.5 -25.0 9.3 -23.7 9.2 -21.7 9.4 -23.7
2026-04-16T00:30:48.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:30:48.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:30:48.122 [DEBUG] [Thread-28423] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:30:48.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.937628
2026-04-16T00:30:48.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:30:48.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:30:48.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:30:48.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:30:48.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:30:48.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:30:23', tmtdew=3.33317, humidity=79.5136, cloud=0.0, wind=7.7472, temperature=8.83146, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:30:11.059', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.07974999999999888, -0.019750000000000156, -0.02450000000000152, -0.004999999999999005, -0.01974999999999838, -0.012000000000000455, -0.005250000000000199, -0.018500000000001293, -0.09049999999999869, -0.007749999999999702, -0.10800000000000054, 0.009999999999999787, 0.03324999999999889, -0.038000000000000256, -0.04550000000000054, -0.012250000000001648, -0.037499999999999645, 0.005999999999998451, -0.05075000000000074, -0.02450000000000152, -0.0017500000000012506, -0.012249999999998096, -0.04574999999999996, -0.02900000000000169, -0.02549999999999919, -0.012249999999999872, 0.028499999999999304, -0.038000000000000256, 0.06600000000000072, 0.02400000000000091, 0.008500000000001506, -0.09425000000000061], zp_timestamp='2026-04-15T22:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:30:48.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:30:48.383 [DEBUG] [Thread-28426] [transport.py] [_log()] starting thread (client mode): 0xee933910
2026-04-16T00:30:48.383 [DEBUG] [Thread-28426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:30:48.398 [DEBUG] [Thread-28426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:30:48.398 [INFO] [Thread-28426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:30:48.405 [DEBUG] [Thread-28426] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:30:48.405 [DEBUG] [Thread-28426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:30:48.405 [DEBUG] [Thread-28426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:30:48.405 [DEBUG] [Thread-28426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:30:48.405 [DEBUG] [Thread-28426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:30:48.405 [DEBUG] [Thread-28426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:30:48.405 [DEBUG] [Thread-28426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:30:48.405 [DEBUG] [Thread-28426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:30:48.405 [DEBUG] [Thread-28426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:30:48.406 [DEBUG] [Thread-28426] [transport.py] [_log()] client lang: <none>
2026-04-16T00:30:48.406 [DEBUG] [Thread-28426] [transport.py] [_log()] server lang: <none>
2026-04-16T00:30:48.406 [DEBUG] [Thread-28426] [transport.py] [_log()] kex follows: False
2026-04-16T00:30:48.406 [DEBUG] [Thread-28426] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:30:48.406 [DEBUG] [Thread-28426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:30:48.406 [DEBUG] [Thread-28426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:30:48.406 [DEBUG] [Thread-28426] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:30:48.406 [DEBUG] [Thread-28426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:30:48.406 [DEBUG] [Thread-28426] [transport.py] [_log()] Compression: none
2026-04-16T00:30:48.406 [DEBUG] [Thread-28426] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:30:48.460 [DEBUG] [Thread-28426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:30:48.461 [DEBUG] [Thread-28426] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:30:48.461 [DEBUG] [Thread-28426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:30:48.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:30:48.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:30:48.517 [DEBUG] [Thread-28426] [transport.py] [_log()] userauth is OK
2026-04-16T00:30:48.517 [DEBUG] [Thread-28426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:30:48.518 [DEBUG] [Thread-28426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:30:48.518 [DEBUG] [Thread-28426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:30:48.518 [DEBUG] [Thread-28426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:30:48.535 [INFO] [Thread-28426] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:30:48.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:30:48.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:30:49.377 [DEBUG] [Thread-28426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:30:49.377 [DEBUG] [Thread-28426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:30:49.425 [DEBUG] [Thread-28426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:30:49.425 [DEBUG] [Thread-28426] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:30:49.433 [DEBUG] [Thread-28426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:30:49.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:30:49.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')
2026-04-16T00:30:49.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
2026-04-16T00:30:49.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:30:49.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:30:49.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:30:49.468 [DEBUG] [Thread-28426] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:30:51.042 [DEBUG] [Thread-28428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:31:06.089 [DEBUG] [Thread-28429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:31:19.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:31:19.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:31:19.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
2026-04-16T00:31:20.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 30, 59), 3.2629, 80.1297, 0.0, 8.34696, 8.79805, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:31:20.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:30:59
2026-04-16T00:31:21.120 [DEBUG] [Thread-28430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:31:21.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:31:21.641 [DEBUG] [Thread-28431] [transport.py] [_log()] starting thread (client mode): 0xee9c7e50
2026-04-16T00:31:21.641 [DEBUG] [Thread-28431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:31:21.662 [DEBUG] [Thread-28431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:31:21.662 [INFO] [Thread-28431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:31:21.665 [DEBUG] [Thread-28431] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:31:21.665 [DEBUG] [Thread-28431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:31:21.665 [DEBUG] [Thread-28431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:31:21.665 [DEBUG] [Thread-28431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:31:21.665 [DEBUG] [Thread-28431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:31:21.666 [DEBUG] [Thread-28431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:31:21.666 [DEBUG] [Thread-28431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:31:21.666 [DEBUG] [Thread-28431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:31:21.666 [DEBUG] [Thread-28431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:31:21.666 [DEBUG] [Thread-28431] [transport.py] [_log()] client lang: <none>
2026-04-16T00:31:21.666 [DEBUG] [Thread-28431] [transport.py] [_log()] server lang: <none>
2026-04-16T00:31:21.666 [DEBUG] [Thread-28431] [transport.py] [_log()] kex follows: False
2026-04-16T00:31:21.666 [DEBUG] [Thread-28431] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:31:21.666 [DEBUG] [Thread-28431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:31:21.666 [DEBUG] [Thread-28431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:31:21.667 [DEBUG] [Thread-28431] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:31:21.667 [DEBUG] [Thread-28431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:31:21.667 [DEBUG] [Thread-28431] [transport.py] [_log()] Compression: none
2026-04-16T00:31:21.667 [DEBUG] [Thread-28431] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:31:21.683 [DEBUG] [Thread-28431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:31:21.684 [DEBUG] [Thread-28431] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:31:21.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:31:21.684 [DEBUG] [Thread-28431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:31:21.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:31:21.685 [DEBUG] [Thread-28431] [transport.py] [_log()] userauth is OK
2026-04-16T00:31:21.686 [DEBUG] [Thread-28431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:31:21.686 [DEBUG] [Thread-28431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:31:21.686 [DEBUG] [Thread-28431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:31:21.686 [DEBUG] [Thread-28431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:31:21.710 [INFO] [Thread-28431] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:31:21.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:31:22.359 [DEBUG] [Thread-28431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:31:22.360 [DEBUG] [Thread-28431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:31:22.360 [DEBUG] [Thread-28431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:31:22.400 [DEBUG] [Thread-28431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:31:22.400 [DEBUG] [Thread-28431] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:31:22.403 [DEBUG] [Thread-28431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:31:22.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:31:22.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:31:22.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:31:22.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:31:22.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:31:22.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:31:22.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:31:22.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:31:22.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:31:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.937975 -999.00   +8.70   6.52     84   +6.20 1 1 1 2 1     0    0 2.15 -27.87 ZNESW 5.5 6.5 106.2 6.7 9.4 -24.8 9.4 -23.7 9.1 -21.6 9.4 -23.8
2026-04-16T00:31:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:31:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:31:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.937975
2026-04-16T00:31:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:31:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:31:22.426 [DEBUG] [Thread-28431] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:31:22.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:31:22.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:31:22.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:31:22.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:30:59', tmtdew=3.2629, humidity=80.1297, cloud=0.0, wind=8.34696, temperature=8.79805, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:30:41.040', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.07974999999999888, -0.019750000000000156, -0.02450000000000152, -0.004999999999999005, -0.01974999999999838, -0.012000000000000455, -0.005250000000000199, -0.018500000000001293, -0.09049999999999869, -0.007749999999999702, -0.10800000000000054, 0.009999999999999787, 0.03324999999999889, -0.038000000000000256, -0.04550000000000054, -0.012250000000001648, -0.037499999999999645, 0.005999999999998451, -0.05075000000000074, -0.02450000000000152, -0.0017500000000012506, -0.012249999999998096, -0.04574999999999996, -0.02900000000000169, -0.02549999999999919, -0.012249999999999872, 0.028499999999999304, -0.038000000000000256, 0.06600000000000072, 0.02400000000000091, 0.008500000000001506, -0.09425000000000061], zp_timestamp='2026-04-15T22:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:31:22.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:31:22.680 [DEBUG] [Thread-28434] [transport.py] [_log()] starting thread (client mode): 0xf13e3c70
2026-04-16T00:31:22.681 [DEBUG] [Thread-28434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:31:22.695 [DEBUG] [Thread-28434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:31:22.695 [INFO] [Thread-28434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:31:22.703 [DEBUG] [Thread-28434] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:31:22.703 [DEBUG] [Thread-28434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:31:22.703 [DEBUG] [Thread-28434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:31:22.703 [DEBUG] [Thread-28434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:31:22.703 [DEBUG] [Thread-28434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:31:22.703 [DEBUG] [Thread-28434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:31:22.703 [DEBUG] [Thread-28434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:31:22.703 [DEBUG] [Thread-28434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:31:22.703 [DEBUG] [Thread-28434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:31:22.703 [DEBUG] [Thread-28434] [transport.py] [_log()] client lang: <none>
2026-04-16T00:31:22.703 [DEBUG] [Thread-28434] [transport.py] [_log()] server lang: <none>
2026-04-16T00:31:22.703 [DEBUG] [Thread-28434] [transport.py] [_log()] kex follows: False
2026-04-16T00:31:22.703 [DEBUG] [Thread-28434] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:31:22.703 [DEBUG] [Thread-28434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:31:22.703 [DEBUG] [Thread-28434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:31:22.704 [DEBUG] [Thread-28434] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:31:22.704 [DEBUG] [Thread-28434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:31:22.704 [DEBUG] [Thread-28434] [transport.py] [_log()] Compression: none
2026-04-16T00:31:22.704 [DEBUG] [Thread-28434] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:31:22.761 [DEBUG] [Thread-28434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:31:22.761 [DEBUG] [Thread-28434] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:31:22.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:31:22.762 [DEBUG] [Thread-28434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:31:22.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:31:22.819 [DEBUG] [Thread-28434] [transport.py] [_log()] userauth is OK
2026-04-16T00:31:22.819 [DEBUG] [Thread-28434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:31:22.819 [DEBUG] [Thread-28434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:31:22.819 [DEBUG] [Thread-28434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:31:22.819 [DEBUG] [Thread-28434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:31:22.842 [INFO] [Thread-28434] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:31:22.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:31:22.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:31:23.685 [DEBUG] [Thread-28434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:31:23.685 [DEBUG] [Thread-28434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:31:23.733 [DEBUG] [Thread-28434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:31:23.733 [DEBUG] [Thread-28434] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:31:23.742 [DEBUG] [Thread-28434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:31:23.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:31:23.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')
2026-04-16T00:31:23.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
2026-04-16T00:31:23.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:31:23.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:31:23.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:31:23.777 [DEBUG] [Thread-28434] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:31:26.071 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:31:26.073 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:31:36.149 [DEBUG] [Thread-28436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:31:46.357 [DEBUG] [Thread-28437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:31:51.188 [DEBUG] [Thread-28438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:31:53.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:31:53.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:31:53.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:31:55.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 31, 34), 3.00958, 81.3592, 0.0, 7.51824, 8.86266, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:31:55.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:31:34
2026-04-16T00:31:55.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:31:55.886 [DEBUG] [Thread-28439] [transport.py] [_log()] starting thread (client mode): 0xee9c0f40
2026-04-16T00:31:55.887 [DEBUG] [Thread-28439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:31:55.906 [DEBUG] [Thread-28439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:31:55.906 [INFO] [Thread-28439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:31:55.910 [DEBUG] [Thread-28439] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:31:55.910 [DEBUG] [Thread-28439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:31:55.910 [DEBUG] [Thread-28439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:31:55.910 [DEBUG] [Thread-28439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:31:55.910 [DEBUG] [Thread-28439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:31:55.910 [DEBUG] [Thread-28439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:31:55.910 [DEBUG] [Thread-28439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:31:55.910 [DEBUG] [Thread-28439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:31:55.910 [DEBUG] [Thread-28439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:31:55.910 [DEBUG] [Thread-28439] [transport.py] [_log()] client lang: <none>
2026-04-16T00:31:55.911 [DEBUG] [Thread-28439] [transport.py] [_log()] server lang: <none>
2026-04-16T00:31:55.911 [DEBUG] [Thread-28439] [transport.py] [_log()] kex follows: False
2026-04-16T00:31:55.911 [DEBUG] [Thread-28439] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:31:55.911 [DEBUG] [Thread-28439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:31:55.911 [DEBUG] [Thread-28439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:31:55.911 [DEBUG] [Thread-28439] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:31:55.911 [DEBUG] [Thread-28439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:31:55.911 [DEBUG] [Thread-28439] [transport.py] [_log()] Compression: none
2026-04-16T00:31:55.911 [DEBUG] [Thread-28439] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:31:55.927 [DEBUG] [Thread-28439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:31:55.927 [DEBUG] [Thread-28439] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:31:55.928 [DEBUG] [Thread-28439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:31:55.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:31:55.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:31:55.929 [DEBUG] [Thread-28439] [transport.py] [_log()] userauth is OK
2026-04-16T00:31:55.929 [DEBUG] [Thread-28439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:31:55.929 [DEBUG] [Thread-28439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:31:55.930 [DEBUG] [Thread-28439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:31:55.930 [DEBUG] [Thread-28439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:31:55.965 [INFO] [Thread-28439] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:31:55.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:31:56.543 [DEBUG] [Thread-28439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:31:56.543 [DEBUG] [Thread-28439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:31:56.544 [DEBUG] [Thread-28439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:31:56.584 [DEBUG] [Thread-28439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:31:56.584 [DEBUG] [Thread-28439] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:31:56.594 [DEBUG] [Thread-28439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:31:56.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:31:56.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:31:56.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:31:56.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:31:56.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:31:56.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:31:56.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:31:56.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:31:56.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:31:56.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.938322 -999.00   +8.70   6.49     84   +6.20 1 1 1 2 1     0    0 2.07 -31.19 ZNESW 6.0 6.5 112.4 6.9 9.4 -24.9 9.3 -23.7 9.1 -21.7 9.3 -23.7
2026-04-16T00:31:56.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:31:56.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:31:56.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.938322
2026-04-16T00:31:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:31:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:31:56.616 [DEBUG] [Thread-28439] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:31:56.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:31:56.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:31:56.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:31:56.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:31:34', tmtdew=3.00958, humidity=81.3592, cloud=0.0, wind=7.51824, temperature=8.86266, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:31:11.021', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.07974999999999888, -0.019750000000000156, -0.02450000000000152, -0.004999999999999005, -0.01974999999999838, -0.012000000000000455, -0.005250000000000199, -0.018500000000001293, -0.09049999999999869, -0.007749999999999702, -0.10800000000000054, 0.009999999999999787, 0.03324999999999889, -0.038000000000000256, -0.04550000000000054, -0.012250000000001648, -0.037499999999999645, 0.005999999999998451, -0.05075000000000074, -0.02450000000000152, -0.0017500000000012506, -0.012249999999998096, -0.04574999999999996, -0.02900000000000169, -0.02549999999999919, -0.012249999999999872, 0.028499999999999304, -0.038000000000000256, 0.06600000000000072, 0.02400000000000091, 0.008500000000001506, -0.09425000000000061], zp_timestamp='2026-04-15T22:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:31:56.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:31:56.869 [DEBUG] [Thread-28442] [transport.py] [_log()] starting thread (client mode): 0xee992b00
2026-04-16T00:31:56.870 [DEBUG] [Thread-28442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:31:56.883 [DEBUG] [Thread-28442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:31:56.883 [INFO] [Thread-28442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:31:56.890 [DEBUG] [Thread-28442] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:31:56.891 [DEBUG] [Thread-28442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:31:56.891 [DEBUG] [Thread-28442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:31:56.891 [DEBUG] [Thread-28442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:31:56.891 [DEBUG] [Thread-28442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:31:56.891 [DEBUG] [Thread-28442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:31:56.891 [DEBUG] [Thread-28442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:31:56.891 [DEBUG] [Thread-28442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:31:56.891 [DEBUG] [Thread-28442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:31:56.891 [DEBUG] [Thread-28442] [transport.py] [_log()] client lang: <none>
2026-04-16T00:31:56.891 [DEBUG] [Thread-28442] [transport.py] [_log()] server lang: <none>
2026-04-16T00:31:56.891 [DEBUG] [Thread-28442] [transport.py] [_log()] kex follows: False
2026-04-16T00:31:56.891 [DEBUG] [Thread-28442] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:31:56.891 [DEBUG] [Thread-28442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:31:56.891 [DEBUG] [Thread-28442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:31:56.891 [DEBUG] [Thread-28442] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:31:56.892 [DEBUG] [Thread-28442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:31:56.892 [DEBUG] [Thread-28442] [transport.py] [_log()] Compression: none
2026-04-16T00:31:56.892 [DEBUG] [Thread-28442] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:31:56.946 [DEBUG] [Thread-28442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:31:56.946 [DEBUG] [Thread-28442] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:31:56.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:31:56.947 [DEBUG] [Thread-28442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:31:56.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:31:57.002 [DEBUG] [Thread-28442] [transport.py] [_log()] userauth is OK
2026-04-16T00:31:57.003 [DEBUG] [Thread-28442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:31:57.003 [DEBUG] [Thread-28442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:31:57.003 [DEBUG] [Thread-28442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:31:57.003 [DEBUG] [Thread-28442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:31:57.020 [INFO] [Thread-28442] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:31:57.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:31:57.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:31:57.818 [DEBUG] [Thread-28442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:31:57.818 [DEBUG] [Thread-28442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:31:57.865 [DEBUG] [Thread-28442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:31:57.866 [DEBUG] [Thread-28442] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:31:57.874 [DEBUG] [Thread-28442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:31:57.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:31:57.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')
2026-04-16T00:31:57.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') -> 00000000
2026-04-16T00:31:57.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:31:57.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:31:57.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:31:57.906 [DEBUG] [Thread-28442] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:32:06.218 [DEBUG] [Thread-28444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:32:21.257 [DEBUG] [Thread-28445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:32:26.271 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:32:26.272 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:32:27.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:32:27.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:32:27.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
2026-04-16T00:32:29.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 32, 10), 3.27685, 80.0469, 0.0, 8.59392, 8.76497, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:32:29.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:32:10
2026-04-16T00:32:29.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:32:30.053 [DEBUG] [Thread-28446] [transport.py] [_log()] starting thread (client mode): 0xee932d10
2026-04-16T00:32:30.053 [DEBUG] [Thread-28446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:32:30.074 [DEBUG] [Thread-28446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:32:30.074 [INFO] [Thread-28446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:32:30.077 [DEBUG] [Thread-28446] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:32:30.077 [DEBUG] [Thread-28446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:32:30.077 [DEBUG] [Thread-28446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:32:30.077 [DEBUG] [Thread-28446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:32:30.077 [DEBUG] [Thread-28446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:32:30.077 [DEBUG] [Thread-28446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:32:30.078 [DEBUG] [Thread-28446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:32:30.078 [DEBUG] [Thread-28446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:32:30.078 [DEBUG] [Thread-28446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:32:30.078 [DEBUG] [Thread-28446] [transport.py] [_log()] client lang: <none>
2026-04-16T00:32:30.078 [DEBUG] [Thread-28446] [transport.py] [_log()] server lang: <none>
2026-04-16T00:32:30.078 [DEBUG] [Thread-28446] [transport.py] [_log()] kex follows: False
2026-04-16T00:32:30.078 [DEBUG] [Thread-28446] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:32:30.078 [DEBUG] [Thread-28446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:32:30.078 [DEBUG] [Thread-28446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:32:30.078 [DEBUG] [Thread-28446] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:32:30.078 [DEBUG] [Thread-28446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:32:30.078 [DEBUG] [Thread-28446] [transport.py] [_log()] Compression: none
2026-04-16T00:32:30.078 [DEBUG] [Thread-28446] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:32:30.094 [DEBUG] [Thread-28446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:32:30.094 [DEBUG] [Thread-28446] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:32:30.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:32:30.095 [DEBUG] [Thread-28446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:32:30.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:32:30.096 [DEBUG] [Thread-28446] [transport.py] [_log()] userauth is OK
2026-04-16T00:32:30.096 [DEBUG] [Thread-28446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:32:30.096 [DEBUG] [Thread-28446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:32:30.096 [DEBUG] [Thread-28446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:32:30.097 [DEBUG] [Thread-28446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:32:30.120 [INFO] [Thread-28446] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:32:30.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:32:30.753 [DEBUG] [Thread-28446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:32:30.753 [DEBUG] [Thread-28446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:32:30.754 [DEBUG] [Thread-28446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:32:30.794 [DEBUG] [Thread-28446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:32:30.794 [DEBUG] [Thread-28446] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:32:30.797 [DEBUG] [Thread-28446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:32:30.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:32:30.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:32:30.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:32:30.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:32:30.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:32:30.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:32:30.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:32:30.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:32:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:32:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.939017 -999.00   +8.70   5.36     84   +6.20 1 1 1 2 1     0    0 1.99 -30.63 ZNESW 5.2 5.4 111.8 6.8 9.4 -24.9 9.3 -23.8 9.1 -21.6 9.3 -23.7
2026-04-16T00:32:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:32:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:32:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.939017
2026-04-16T00:32:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:32:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:32:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:32:30.822 [DEBUG] [Thread-28446] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:32:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:32:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:32:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:32:10', tmtdew=3.27685, humidity=80.0469, cloud=0.0, wind=8.59392, temperature=8.76497, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:32:11.069', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.07974999999999888, -0.019750000000000156, -0.02450000000000152, -0.004999999999999005, -0.01974999999999838, -0.012000000000000455, -0.005250000000000199, -0.018500000000001293, -0.09049999999999869, -0.007749999999999702, -0.10800000000000054, 0.009999999999999787, 0.03324999999999889, -0.038000000000000256, -0.04550000000000054, -0.012250000000001648, -0.037499999999999645, 0.005999999999998451, -0.05075000000000074, -0.02450000000000152, -0.0017500000000012506, -0.012249999999998096, -0.04574999999999996, -0.02900000000000169, -0.02549999999999919, -0.012249999999999872, 0.028499999999999304, -0.038000000000000256, 0.06600000000000072, 0.02400000000000091, 0.008500000000001506, -0.09425000000000061], zp_timestamp='2026-04-15T22:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:32:31.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:32:31.077 [DEBUG] [Thread-28449] [transport.py] [_log()] starting thread (client mode): 0xee992da0
2026-04-16T00:32:31.077 [DEBUG] [Thread-28449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:32:31.091 [DEBUG] [Thread-28449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:32:31.091 [INFO] [Thread-28449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:32:31.099 [DEBUG] [Thread-28449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:32:31.099 [DEBUG] [Thread-28449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:32:31.099 [DEBUG] [Thread-28449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:32:31.099 [DEBUG] [Thread-28449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:32:31.099 [DEBUG] [Thread-28449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:32:31.099 [DEBUG] [Thread-28449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:32:31.099 [DEBUG] [Thread-28449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:32:31.099 [DEBUG] [Thread-28449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:32:31.099 [DEBUG] [Thread-28449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:32:31.099 [DEBUG] [Thread-28449] [transport.py] [_log()] client lang: <none>
2026-04-16T00:32:31.099 [DEBUG] [Thread-28449] [transport.py] [_log()] server lang: <none>
2026-04-16T00:32:31.100 [DEBUG] [Thread-28449] [transport.py] [_log()] kex follows: False
2026-04-16T00:32:31.100 [DEBUG] [Thread-28449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:32:31.100 [DEBUG] [Thread-28449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:32:31.100 [DEBUG] [Thread-28449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:32:31.100 [DEBUG] [Thread-28449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:32:31.100 [DEBUG] [Thread-28449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:32:31.100 [DEBUG] [Thread-28449] [transport.py] [_log()] Compression: none
2026-04-16T00:32:31.100 [DEBUG] [Thread-28449] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:32:31.155 [DEBUG] [Thread-28449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:32:31.155 [DEBUG] [Thread-28449] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:32:31.155 [DEBUG] [Thread-28449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:32:31.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:32:31.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:32:31.211 [DEBUG] [Thread-28449] [transport.py] [_log()] userauth is OK
2026-04-16T00:32:31.212 [DEBUG] [Thread-28449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:32:31.212 [DEBUG] [Thread-28449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:32:31.212 [DEBUG] [Thread-28449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:32:31.212 [DEBUG] [Thread-28449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:32:31.233 [INFO] [Thread-28449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:32:31.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:32:31.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:32:32.095 [DEBUG] [Thread-28449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:32:32.095 [DEBUG] [Thread-28449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:32:32.143 [DEBUG] [Thread-28449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:32:32.143 [DEBUG] [Thread-28449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:32:32.152 [DEBUG] [Thread-28449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:32:32.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:32:32.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')
2026-04-16T00:32:32.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
2026-04-16T00:32:32.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:32:32.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:32:32.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:32:32.183 [DEBUG] [Thread-28449] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:32:36.286 [DEBUG] [Thread-28451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:32:46.510 [DEBUG] [Thread-28452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:32:49.485 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:32:51.326 [DEBUG] [Thread-28453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:32:52.606 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:32:57.652 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:33:02.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:33:02.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:33:02.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
2026-04-16T00:33:03.028 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:33:03.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 32, 46), 3.01981, 81.2931, 0.0, 8.96472, 8.79647, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:33:03.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:32:46
2026-04-16T00:33:03.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:33:04.288 [DEBUG] [Thread-28454] [transport.py] [_log()] starting thread (client mode): 0xee9c7ee0
2026-04-16T00:33:04.288 [DEBUG] [Thread-28454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:33:04.308 [DEBUG] [Thread-28454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:33:04.308 [INFO] [Thread-28454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:33:04.311 [DEBUG] [Thread-28454] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:33:04.311 [DEBUG] [Thread-28454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:33:04.311 [DEBUG] [Thread-28454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:33:04.312 [DEBUG] [Thread-28454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:33:04.312 [DEBUG] [Thread-28454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:33:04.312 [DEBUG] [Thread-28454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:33:04.312 [DEBUG] [Thread-28454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:33:04.312 [DEBUG] [Thread-28454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:33:04.312 [DEBUG] [Thread-28454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:33:04.312 [DEBUG] [Thread-28454] [transport.py] [_log()] client lang: <none>
2026-04-16T00:33:04.312 [DEBUG] [Thread-28454] [transport.py] [_log()] server lang: <none>
2026-04-16T00:33:04.312 [DEBUG] [Thread-28454] [transport.py] [_log()] kex follows: False
2026-04-16T00:33:04.312 [DEBUG] [Thread-28454] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:33:04.312 [DEBUG] [Thread-28454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:33:04.313 [DEBUG] [Thread-28454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:33:04.313 [DEBUG] [Thread-28454] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:33:04.313 [DEBUG] [Thread-28454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:33:04.313 [DEBUG] [Thread-28454] [transport.py] [_log()] Compression: none
2026-04-16T00:33:04.313 [DEBUG] [Thread-28454] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:33:04.330 [DEBUG] [Thread-28454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:33:04.330 [DEBUG] [Thread-28454] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:33:04.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:33:04.331 [DEBUG] [Thread-28454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:33:04.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:33:04.332 [DEBUG] [Thread-28454] [transport.py] [_log()] userauth is OK
2026-04-16T00:33:04.332 [DEBUG] [Thread-28454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:33:04.332 [DEBUG] [Thread-28454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:33:04.332 [DEBUG] [Thread-28454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:33:04.332 [DEBUG] [Thread-28454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:33:04.352 [INFO] [Thread-28454] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:33:04.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:33:04.959 [DEBUG] [Thread-28454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:33:04.960 [DEBUG] [Thread-28454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:33:04.960 [DEBUG] [Thread-28454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:33:05.000 [DEBUG] [Thread-28454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:33:05.000 [DEBUG] [Thread-28454] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:33:05.003 [DEBUG] [Thread-28454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:33:05.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:33:05.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:33:05.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:33:05.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:33:05.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:33:05.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:33:05.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:33:05.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:33:05.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:33:05.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.939364 -999.00   +8.70   5.98     84   +6.20 1 1 1 2 1     0    0 1.96 -32.33 ZNESW 6.4 6.0 109.8 6.8 9.4 -25.0 9.4 -23.7 9.1 -21.5 9.3 -23.6
2026-04-16T00:33:05.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:33:05.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:33:05.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.939364
2026-04-16T00:33:05.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:33:05.028 [DEBUG] [Thread-28454] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:33:05.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:33:05.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:33:05.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:33:05.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:33:05.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:32:46', tmtdew=3.01981, humidity=81.2931, cloud=0.0, wind=8.96472, temperature=8.79647, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:32:41.050', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.07974999999999888, -0.019750000000000156, -0.02450000000000152, -0.004999999999999005, -0.01974999999999838, -0.012000000000000455, -0.005250000000000199, -0.018500000000001293, -0.09049999999999869, -0.007749999999999702, -0.10800000000000054, 0.009999999999999787, 0.03324999999999889, -0.038000000000000256, -0.04550000000000054, -0.012250000000001648, -0.037499999999999645, 0.005999999999998451, -0.05075000000000074, -0.02450000000000152, -0.0017500000000012506, -0.012249999999998096, -0.04574999999999996, -0.02900000000000169, -0.02549999999999919, -0.012249999999999872, 0.028499999999999304, -0.038000000000000256, 0.06600000000000072, 0.02400000000000091, 0.008500000000001506, -0.09425000000000061], zp_timestamp='2026-04-15T22:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:33:05.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:33:05.295 [DEBUG] [Thread-28457] [transport.py] [_log()] starting thread (client mode): 0xee933a90
2026-04-16T00:33:05.295 [DEBUG] [Thread-28457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:33:05.309 [DEBUG] [Thread-28457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:33:05.309 [INFO] [Thread-28457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:33:05.316 [DEBUG] [Thread-28457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:33:05.316 [DEBUG] [Thread-28457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:33:05.317 [DEBUG] [Thread-28457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:33:05.317 [DEBUG] [Thread-28457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:33:05.317 [DEBUG] [Thread-28457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:33:05.317 [DEBUG] [Thread-28457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:33:05.317 [DEBUG] [Thread-28457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:33:05.317 [DEBUG] [Thread-28457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:33:05.317 [DEBUG] [Thread-28457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:33:05.317 [DEBUG] [Thread-28457] [transport.py] [_log()] client lang: <none>
2026-04-16T00:33:05.317 [DEBUG] [Thread-28457] [transport.py] [_log()] server lang: <none>
2026-04-16T00:33:05.317 [DEBUG] [Thread-28457] [transport.py] [_log()] kex follows: False
2026-04-16T00:33:05.317 [DEBUG] [Thread-28457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:33:05.317 [DEBUG] [Thread-28457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:33:05.318 [DEBUG] [Thread-28457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:33:05.318 [DEBUG] [Thread-28457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:33:05.318 [DEBUG] [Thread-28457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:33:05.318 [DEBUG] [Thread-28457] [transport.py] [_log()] Compression: none
2026-04-16T00:33:05.318 [DEBUG] [Thread-28457] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:33:05.375 [DEBUG] [Thread-28457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:33:05.375 [DEBUG] [Thread-28457] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:33:05.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:33:05.376 [DEBUG] [Thread-28457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:33:05.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:33:05.432 [DEBUG] [Thread-28457] [transport.py] [_log()] userauth is OK
2026-04-16T00:33:05.432 [DEBUG] [Thread-28457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:33:05.432 [DEBUG] [Thread-28457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:33:05.432 [DEBUG] [Thread-28457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:33:05.433 [DEBUG] [Thread-28457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:33:05.457 [INFO] [Thread-28457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:33:05.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:33:05.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:33:06.290 [DEBUG] [Thread-28457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:33:06.290 [DEBUG] [Thread-28457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:33:06.338 [DEBUG] [Thread-28457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:33:06.339 [DEBUG] [Thread-28457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:33:06.347 [DEBUG] [Thread-28457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:33:06.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:33:06.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')
2026-04-16T00:33:06.356 [DEBUG] [Thread-28459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:33:06.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
2026-04-16T00:33:06.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:33:06.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:33:06.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:33:06.380 [DEBUG] [Thread-28457] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:33:21.392 [DEBUG] [Thread-28460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:33:22.530 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:33:26.473 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:33:26.474 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:33:26.918 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:33:36.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:33:36.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:33:36.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:33:36.423 [DEBUG] [Thread-28461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:33:37.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 33, 21), 3.22131, 80.0802, 0.0, 8.04708, 8.78164, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:33:37.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:33:21
2026-04-16T00:33:38.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:33:38.593 [DEBUG] [Thread-28462] [transport.py] [_log()] starting thread (client mode): 0xee9c3d90
2026-04-16T00:33:38.593 [DEBUG] [Thread-28462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:33:38.614 [DEBUG] [Thread-28462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:33:38.614 [INFO] [Thread-28462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:33:38.617 [DEBUG] [Thread-28462] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:33:38.617 [DEBUG] [Thread-28462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:33:38.617 [DEBUG] [Thread-28462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:33:38.617 [DEBUG] [Thread-28462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:33:38.617 [DEBUG] [Thread-28462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:33:38.617 [DEBUG] [Thread-28462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:33:38.617 [DEBUG] [Thread-28462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:33:38.617 [DEBUG] [Thread-28462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:33:38.618 [DEBUG] [Thread-28462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:33:38.618 [DEBUG] [Thread-28462] [transport.py] [_log()] client lang: <none>
2026-04-16T00:33:38.618 [DEBUG] [Thread-28462] [transport.py] [_log()] server lang: <none>
2026-04-16T00:33:38.618 [DEBUG] [Thread-28462] [transport.py] [_log()] kex follows: False
2026-04-16T00:33:38.618 [DEBUG] [Thread-28462] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:33:38.618 [DEBUG] [Thread-28462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:33:38.618 [DEBUG] [Thread-28462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:33:38.618 [DEBUG] [Thread-28462] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:33:38.618 [DEBUG] [Thread-28462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:33:38.618 [DEBUG] [Thread-28462] [transport.py] [_log()] Compression: none
2026-04-16T00:33:38.618 [DEBUG] [Thread-28462] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:33:38.635 [DEBUG] [Thread-28462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:33:38.636 [DEBUG] [Thread-28462] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:33:38.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:33:38.636 [DEBUG] [Thread-28462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:33:38.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:33:38.638 [DEBUG] [Thread-28462] [transport.py] [_log()] userauth is OK
2026-04-16T00:33:38.638 [DEBUG] [Thread-28462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:33:38.638 [DEBUG] [Thread-28462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:33:38.638 [DEBUG] [Thread-28462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:33:38.639 [DEBUG] [Thread-28462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:33:38.663 [INFO] [Thread-28462] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:33:38.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:33:39.303 [DEBUG] [Thread-28462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:33:39.303 [DEBUG] [Thread-28462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:33:39.303 [DEBUG] [Thread-28462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:33:39.344 [DEBUG] [Thread-28462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:33:39.344 [DEBUG] [Thread-28462] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:33:39.347 [DEBUG] [Thread-28462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:33:39.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:33:39.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:33:39.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:33:39.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:33:39.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:33:39.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:33:39.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:33:39.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:33:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:33:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.939711 -999.00   +8.80   6.31     84   +6.20 1 1 1 2 1     0    0 1.95 -31.10 ZNESW 7.2 6.3 112.0 8.3 9.4 -24.9 9.3 -23.6 9.1 -21.6 9.3 -23.4
2026-04-16T00:33:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:33:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:33:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.939711
2026-04-16T00:33:39.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:33:39.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:33:39.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:33:39.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:33:39.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:33:39.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:33:21', tmtdew=3.22131, humidity=80.0802, cloud=0.0, wind=8.04708, temperature=8.78164, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:33:11.030', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.07974999999999888, -0.019750000000000156, -0.02450000000000152, -0.004999999999999005, -0.01974999999999838, -0.012000000000000455, -0.005250000000000199, -0.018500000000001293, -0.09049999999999869, -0.007749999999999702, -0.10800000000000054, 0.009999999999999787, 0.03324999999999889, -0.038000000000000256, -0.04550000000000054, -0.012250000000001648, -0.037499999999999645, 0.005999999999998451, -0.05075000000000074, -0.02450000000000152, -0.0017500000000012506, -0.012249999999998096, -0.04574999999999996, -0.02900000000000169, -0.02549999999999919, -0.012249999999999872, 0.028499999999999304, -0.038000000000000256, 0.06600000000000072, 0.02400000000000091, 0.008500000000001506, -0.09425000000000061], zp_timestamp='2026-04-15T22:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:33:39.375 [DEBUG] [Thread-28462] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:33:39.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:33:39.639 [DEBUG] [Thread-28465] [transport.py] [_log()] starting thread (client mode): 0xf13e28f0
2026-04-16T00:33:39.639 [DEBUG] [Thread-28465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:33:39.653 [DEBUG] [Thread-28465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:33:39.653 [INFO] [Thread-28465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:33:39.661 [DEBUG] [Thread-28465] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:33:39.661 [DEBUG] [Thread-28465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:33:39.661 [DEBUG] [Thread-28465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:33:39.661 [DEBUG] [Thread-28465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:33:39.661 [DEBUG] [Thread-28465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:33:39.661 [DEBUG] [Thread-28465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:33:39.661 [DEBUG] [Thread-28465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:33:39.661 [DEBUG] [Thread-28465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:33:39.661 [DEBUG] [Thread-28465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:33:39.662 [DEBUG] [Thread-28465] [transport.py] [_log()] client lang: <none>
2026-04-16T00:33:39.662 [DEBUG] [Thread-28465] [transport.py] [_log()] server lang: <none>
2026-04-16T00:33:39.662 [DEBUG] [Thread-28465] [transport.py] [_log()] kex follows: False
2026-04-16T00:33:39.662 [DEBUG] [Thread-28465] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:33:39.662 [DEBUG] [Thread-28465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:33:39.662 [DEBUG] [Thread-28465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:33:39.662 [DEBUG] [Thread-28465] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:33:39.662 [DEBUG] [Thread-28465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:33:39.662 [DEBUG] [Thread-28465] [transport.py] [_log()] Compression: none
2026-04-16T00:33:39.662 [DEBUG] [Thread-28465] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:33:39.719 [DEBUG] [Thread-28465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:33:39.720 [DEBUG] [Thread-28465] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:33:39.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:33:39.721 [DEBUG] [Thread-28465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:33:39.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:33:39.776 [DEBUG] [Thread-28465] [transport.py] [_log()] userauth is OK
2026-04-16T00:33:39.776 [DEBUG] [Thread-28465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:33:39.776 [DEBUG] [Thread-28465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:33:39.776 [DEBUG] [Thread-28465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:33:39.776 [DEBUG] [Thread-28465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:33:39.793 [INFO] [Thread-28465] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:33:39.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:33:39.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:33:40.660 [DEBUG] [Thread-28465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:33:40.661 [DEBUG] [Thread-28465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:33:40.708 [DEBUG] [Thread-28465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:33:40.708 [DEBUG] [Thread-28465] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:33:40.717 [DEBUG] [Thread-28465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:33:40.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:33:40.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')
2026-04-16T00:33:40.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') -> 00000000
2026-04-16T00:33:40.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:33:40.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:33:40.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:33:40.752 [DEBUG] [Thread-28465] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:33:46.410 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:33:46.660 [DEBUG] [Thread-28467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:33:50.796 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:33:51.451 [DEBUG] [Thread-28468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:33:57.710 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:34:02.115 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:34:06.486 [DEBUG] [Thread-28469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:34:09.430 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:34:10.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:34:10.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:34:10.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
2026-04-16T00:34:12.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 33, 57), 3.21322, 80.13, 0.0, 8.25876, 8.81489, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:34:12.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:33:57
2026-04-16T00:34:12.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:34:12.493 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:34:12.848 [DEBUG] [Thread-28470] [transport.py] [_log()] starting thread (client mode): 0xee992a10
2026-04-16T00:34:12.848 [DEBUG] [Thread-28470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:34:12.867 [DEBUG] [Thread-28470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:34:12.867 [INFO] [Thread-28470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:34:12.869 [DEBUG] [Thread-28470] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:34:12.869 [DEBUG] [Thread-28470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:34:12.869 [DEBUG] [Thread-28470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:34:12.869 [DEBUG] [Thread-28470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:34:12.869 [DEBUG] [Thread-28470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:34:12.869 [DEBUG] [Thread-28470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:34:12.869 [DEBUG] [Thread-28470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:34:12.869 [DEBUG] [Thread-28470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:34:12.870 [DEBUG] [Thread-28470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:34:12.870 [DEBUG] [Thread-28470] [transport.py] [_log()] client lang: <none>
2026-04-16T00:34:12.870 [DEBUG] [Thread-28470] [transport.py] [_log()] server lang: <none>
2026-04-16T00:34:12.870 [DEBUG] [Thread-28470] [transport.py] [_log()] kex follows: False
2026-04-16T00:34:12.870 [DEBUG] [Thread-28470] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:34:12.870 [DEBUG] [Thread-28470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:34:12.870 [DEBUG] [Thread-28470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:34:12.870 [DEBUG] [Thread-28470] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:34:12.870 [DEBUG] [Thread-28470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:34:12.870 [DEBUG] [Thread-28470] [transport.py] [_log()] Compression: none
2026-04-16T00:34:12.870 [DEBUG] [Thread-28470] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:34:12.888 [DEBUG] [Thread-28470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:34:12.888 [DEBUG] [Thread-28470] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:34:12.889 [DEBUG] [Thread-28470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:34:12.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:34:12.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:34:12.890 [DEBUG] [Thread-28470] [transport.py] [_log()] userauth is OK
2026-04-16T00:34:12.890 [DEBUG] [Thread-28470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:34:12.890 [DEBUG] [Thread-28470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:34:12.890 [DEBUG] [Thread-28470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:34:12.890 [DEBUG] [Thread-28470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:34:12.912 [INFO] [Thread-28470] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:34:12.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:34:13.569 [DEBUG] [Thread-28470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:34:13.569 [DEBUG] [Thread-28470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:34:13.570 [DEBUG] [Thread-28470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:34:13.610 [DEBUG] [Thread-28470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:34:13.610 [DEBUG] [Thread-28470] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:34:13.613 [DEBUG] [Thread-28470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:34:13.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:34:13.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:34:13.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:34:13.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:34:13.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:34:13.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:34:13.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:34:13.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:34:13.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:34:13.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.940058 -999.00   +8.90   7.44     84   +6.40 1 1 1 2 1     0    0 1.81 -34.45 ZNESW 5.7 7.4 116.2 9.6 9.4 -24.7 9.3 -23.4 9.1 -21.4 9.3 -23.4
2026-04-16T00:34:13.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:34:13.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:34:13.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.940058
2026-04-16T00:34:13.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:34:13.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:34:13.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:34:13.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:34:13.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:34:13.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:33:57', tmtdew=3.21322, humidity=80.13, cloud=0.0, wind=8.25876, temperature=8.81489, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:33:41.011', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.07974999999999888, -0.019750000000000156, -0.02450000000000152, -0.004999999999999005, -0.01974999999999838, -0.012000000000000455, -0.005250000000000199, -0.018500000000001293, -0.09049999999999869, -0.007749999999999702, -0.10800000000000054, 0.009999999999999787, 0.03324999999999889, -0.038000000000000256, -0.04550000000000054, -0.012250000000001648, -0.037499999999999645, 0.005999999999998451, -0.05075000000000074, -0.02450000000000152, -0.0017500000000012506, -0.012249999999998096, -0.04574999999999996, -0.02900000000000169, -0.02549999999999919, -0.012249999999999872, 0.028499999999999304, -0.038000000000000256, 0.06600000000000072, 0.02400000000000091, 0.008500000000001506, -0.09425000000000061], zp_timestamp='2026-04-15T22:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:34:13.638 [DEBUG] [Thread-28470] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:34:13.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:34:13.891 [DEBUG] [Thread-28473] [transport.py] [_log()] starting thread (client mode): 0xf13e25f0
2026-04-16T00:34:13.892 [DEBUG] [Thread-28473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:34:13.906 [DEBUG] [Thread-28473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:34:13.906 [INFO] [Thread-28473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:34:13.913 [DEBUG] [Thread-28473] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:34:13.913 [DEBUG] [Thread-28473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:34:13.913 [DEBUG] [Thread-28473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:34:13.913 [DEBUG] [Thread-28473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:34:13.914 [DEBUG] [Thread-28473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:34:13.914 [DEBUG] [Thread-28473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:34:13.914 [DEBUG] [Thread-28473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:34:13.914 [DEBUG] [Thread-28473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:34:13.914 [DEBUG] [Thread-28473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:34:13.914 [DEBUG] [Thread-28473] [transport.py] [_log()] client lang: <none>
2026-04-16T00:34:13.914 [DEBUG] [Thread-28473] [transport.py] [_log()] server lang: <none>
2026-04-16T00:34:13.914 [DEBUG] [Thread-28473] [transport.py] [_log()] kex follows: False
2026-04-16T00:34:13.914 [DEBUG] [Thread-28473] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:34:13.914 [DEBUG] [Thread-28473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:34:13.914 [DEBUG] [Thread-28473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:34:13.914 [DEBUG] [Thread-28473] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:34:13.915 [DEBUG] [Thread-28473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:34:13.915 [DEBUG] [Thread-28473] [transport.py] [_log()] Compression: none
2026-04-16T00:34:13.915 [DEBUG] [Thread-28473] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:34:13.972 [DEBUG] [Thread-28473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:34:13.973 [DEBUG] [Thread-28473] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:34:13.973 [DEBUG] [Thread-28473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:34:13.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:34:13.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:34:14.029 [DEBUG] [Thread-28473] [transport.py] [_log()] userauth is OK
2026-04-16T00:34:14.029 [DEBUG] [Thread-28473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:34:14.029 [DEBUG] [Thread-28473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:34:14.029 [DEBUG] [Thread-28473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:34:14.029 [DEBUG] [Thread-28473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:34:14.048 [INFO] [Thread-28473] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:34:14.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:34:14.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:34:14.865 [DEBUG] [Thread-28473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:34:14.865 [DEBUG] [Thread-28473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:34:14.913 [DEBUG] [Thread-28473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:34:14.913 [DEBUG] [Thread-28473] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:34:14.921 [DEBUG] [Thread-28473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:34:14.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:34:14.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')
2026-04-16T00:34:14.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
2026-04-16T00:34:14.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:34:14.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:34:14.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:34:14.953 [DEBUG] [Thread-28473] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:34:21.515 [DEBUG] [Thread-28475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:34:26.674 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:34:26.675 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:34:36.559 [DEBUG] [Thread-28476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:34:44.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:34:44.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:34:44.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:34:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 34, 33), 3.04646, 81.1606, 0.0, 9.14112, 8.92933, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:34:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:34:33
2026-04-16T00:34:46.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:34:46.829 [DEBUG] [Thread-28477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:34:47.179 [DEBUG] [Thread-28478] [transport.py] [_log()] starting thread (client mode): 0xf13c92a0
2026-04-16T00:34:47.179 [DEBUG] [Thread-28478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:34:47.199 [DEBUG] [Thread-28478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:34:47.199 [INFO] [Thread-28478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:34:47.201 [DEBUG] [Thread-28478] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:34:47.201 [DEBUG] [Thread-28478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:34:47.201 [DEBUG] [Thread-28478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:34:47.201 [DEBUG] [Thread-28478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:34:47.201 [DEBUG] [Thread-28478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:34:47.201 [DEBUG] [Thread-28478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:34:47.201 [DEBUG] [Thread-28478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:34:47.201 [DEBUG] [Thread-28478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:34:47.201 [DEBUG] [Thread-28478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:34:47.201 [DEBUG] [Thread-28478] [transport.py] [_log()] client lang: <none>
2026-04-16T00:34:47.201 [DEBUG] [Thread-28478] [transport.py] [_log()] server lang: <none>
2026-04-16T00:34:47.201 [DEBUG] [Thread-28478] [transport.py] [_log()] kex follows: False
2026-04-16T00:34:47.202 [DEBUG] [Thread-28478] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:34:47.202 [DEBUG] [Thread-28478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:34:47.202 [DEBUG] [Thread-28478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:34:47.202 [DEBUG] [Thread-28478] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:34:47.202 [DEBUG] [Thread-28478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:34:47.202 [DEBUG] [Thread-28478] [transport.py] [_log()] Compression: none
2026-04-16T00:34:47.202 [DEBUG] [Thread-28478] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:34:47.219 [DEBUG] [Thread-28478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:34:47.220 [DEBUG] [Thread-28478] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:34:47.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:34:47.221 [DEBUG] [Thread-28478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:34:47.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:34:47.221 [DEBUG] [Thread-28478] [transport.py] [_log()] userauth is OK
2026-04-16T00:34:47.222 [DEBUG] [Thread-28478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:34:47.222 [DEBUG] [Thread-28478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:34:47.222 [DEBUG] [Thread-28478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:34:47.222 [DEBUG] [Thread-28478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:34:47.237 [INFO] [Thread-28478] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:34:47.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:34:47.860 [DEBUG] [Thread-28478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:34:47.860 [DEBUG] [Thread-28478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:34:47.860 [DEBUG] [Thread-28478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:34:47.901 [DEBUG] [Thread-28478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:34:47.901 [DEBUG] [Thread-28478] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:34:47.904 [DEBUG] [Thread-28478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:34:47.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:34:47.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:34:47.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:34:47.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:34:47.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:34:47.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:34:47.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:34:47.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:34:47.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:34:47.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.940405 -999.00   +9.00   7.75     83   +6.40 1 1 1 2 1     0    0 1.88 -34.56 ZNESW 6.0 7.8 110.2 8.9 9.4 -24.3 9.4 -23.7 9.0 -21.3 9.3 -23.3
2026-04-16T00:34:47.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:34:47.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:34:47.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.940405
2026-04-16T00:34:47.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:34:47.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:34:47.925 [DEBUG] [Thread-28478] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:34:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:34:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:34:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:34:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:34:33', tmtdew=3.04646, humidity=81.1606, cloud=0.0, wind=9.14112, temperature=8.92933, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:34:10.992', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.07974999999999888, -0.019750000000000156, -0.02450000000000152, -0.004999999999999005, -0.01974999999999838, -0.012000000000000455, -0.005250000000000199, -0.018500000000001293, -0.09049999999999869, -0.007749999999999702, -0.10800000000000054, 0.009999999999999787, 0.03324999999999889, -0.038000000000000256, -0.04550000000000054, -0.012250000000001648, -0.037499999999999645, 0.005999999999998451, -0.05075000000000074, -0.02450000000000152, -0.0017500000000012506, -0.012249999999998096, -0.04574999999999996, -0.02900000000000169, -0.02549999999999919, -0.012249999999999872, 0.028499999999999304, -0.038000000000000256, 0.06600000000000072, 0.02400000000000091, 0.008500000000001506, -0.09425000000000061], zp_timestamp='2026-04-15T22:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:34:48.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:34:48.186 [DEBUG] [Thread-28481] [transport.py] [_log()] starting thread (client mode): 0xee9c2230
2026-04-16T00:34:48.187 [DEBUG] [Thread-28481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:34:48.202 [DEBUG] [Thread-28481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:34:48.202 [INFO] [Thread-28481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:34:48.209 [DEBUG] [Thread-28481] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:34:48.209 [DEBUG] [Thread-28481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:34:48.209 [DEBUG] [Thread-28481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:34:48.209 [DEBUG] [Thread-28481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:34:48.209 [DEBUG] [Thread-28481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:34:48.209 [DEBUG] [Thread-28481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:34:48.210 [DEBUG] [Thread-28481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:34:48.210 [DEBUG] [Thread-28481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:34:48.210 [DEBUG] [Thread-28481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:34:48.210 [DEBUG] [Thread-28481] [transport.py] [_log()] client lang: <none>
2026-04-16T00:34:48.210 [DEBUG] [Thread-28481] [transport.py] [_log()] server lang: <none>
2026-04-16T00:34:48.210 [DEBUG] [Thread-28481] [transport.py] [_log()] kex follows: False
2026-04-16T00:34:48.210 [DEBUG] [Thread-28481] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:34:48.210 [DEBUG] [Thread-28481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:34:48.210 [DEBUG] [Thread-28481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:34:48.210 [DEBUG] [Thread-28481] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:34:48.211 [DEBUG] [Thread-28481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:34:48.211 [DEBUG] [Thread-28481] [transport.py] [_log()] Compression: none
2026-04-16T00:34:48.211 [DEBUG] [Thread-28481] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:34:48.264 [DEBUG] [Thread-28481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:34:48.265 [DEBUG] [Thread-28481] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:34:48.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:34:48.265 [DEBUG] [Thread-28481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:34:48.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:34:48.324 [DEBUG] [Thread-28481] [transport.py] [_log()] userauth is OK
2026-04-16T00:34:48.325 [DEBUG] [Thread-28481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:34:48.325 [DEBUG] [Thread-28481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:34:48.325 [DEBUG] [Thread-28481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:34:48.325 [DEBUG] [Thread-28481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:34:48.353 [INFO] [Thread-28481] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:34:48.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:34:48.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:34:49.194 [DEBUG] [Thread-28481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:34:49.195 [DEBUG] [Thread-28481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:34:49.242 [DEBUG] [Thread-28481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:34:49.242 [DEBUG] [Thread-28481] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:34:49.251 [DEBUG] [Thread-28481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:34:49.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:34:49.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')
2026-04-16T00:34:49.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
2026-04-16T00:34:49.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:34:49.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:34:49.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:34:49.285 [DEBUG] [Thread-28481] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:34:51.586 [DEBUG] [Thread-28483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:35:06.625 [DEBUG] [Thread-28484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:35:19.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:35:19.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:35:19.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
2026-04-16T00:35:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 35, 8), 3.23587, 80.0137, 0.0, 8.25876, 8.94765, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:35:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:35:08
2026-04-16T00:35:20.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:35:21.435 [DEBUG] [Thread-28485] [transport.py] [_log()] starting thread (client mode): 0xf13cb550
2026-04-16T00:35:21.435 [DEBUG] [Thread-28485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:35:21.456 [DEBUG] [Thread-28485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:35:21.456 [INFO] [Thread-28485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:35:21.459 [DEBUG] [Thread-28485] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:35:21.459 [DEBUG] [Thread-28485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:35:21.459 [DEBUG] [Thread-28485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:35:21.459 [DEBUG] [Thread-28485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:35:21.459 [DEBUG] [Thread-28485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:35:21.459 [DEBUG] [Thread-28485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:35:21.459 [DEBUG] [Thread-28485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:35:21.460 [DEBUG] [Thread-28485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:35:21.460 [DEBUG] [Thread-28485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:35:21.460 [DEBUG] [Thread-28485] [transport.py] [_log()] client lang: <none>
2026-04-16T00:35:21.460 [DEBUG] [Thread-28485] [transport.py] [_log()] server lang: <none>
2026-04-16T00:35:21.460 [DEBUG] [Thread-28485] [transport.py] [_log()] kex follows: False
2026-04-16T00:35:21.460 [DEBUG] [Thread-28485] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:35:21.460 [DEBUG] [Thread-28485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:35:21.460 [DEBUG] [Thread-28485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:35:21.460 [DEBUG] [Thread-28485] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:35:21.460 [DEBUG] [Thread-28485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:35:21.460 [DEBUG] [Thread-28485] [transport.py] [_log()] Compression: none
2026-04-16T00:35:21.460 [DEBUG] [Thread-28485] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:35:21.477 [DEBUG] [Thread-28485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:35:21.477 [DEBUG] [Thread-28485] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:35:21.478 [DEBUG] [Thread-28485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:35:21.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:35:21.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:35:21.479 [DEBUG] [Thread-28485] [transport.py] [_log()] userauth is OK
2026-04-16T00:35:21.480 [DEBUG] [Thread-28485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:35:21.480 [DEBUG] [Thread-28485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:35:21.480 [DEBUG] [Thread-28485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:35:21.480 [DEBUG] [Thread-28485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:35:21.505 [INFO] [Thread-28485] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:35:21.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:35:21.657 [DEBUG] [Thread-28487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:35:22.145 [DEBUG] [Thread-28485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:35:22.145 [DEBUG] [Thread-28485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:35:22.146 [DEBUG] [Thread-28485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:35:22.186 [DEBUG] [Thread-28485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:35:22.186 [DEBUG] [Thread-28485] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:35:22.189 [DEBUG] [Thread-28485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:35:22.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:35:22.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:35:22.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:35:22.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:35:22.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:35:22.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:35:22.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:35:22.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:35:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:35:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.940752 -999.00   +9.10   7.01     83   +6.50 1 1 1 2 1     0    0 1.81 -33.53 ZNESW 5.4 7.0 78.9 11.0 9.5 -24.3 9.4 -23.6 9.1 -21.4 9.4 -23.4
2026-04-16T00:35:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:35:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:35:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.940752
2026-04-16T00:35:22.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:35:22.216 [DEBUG] [Thread-28485] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:35:22.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:35:22.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:35:22.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:35:22.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:35:22.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:35:08', tmtdew=3.23587, humidity=80.0137, cloud=0.0, wind=8.25876, temperature=8.94765, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:34:40.973', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.07974999999999888, -0.019750000000000156, -0.02450000000000152, -0.004999999999999005, -0.01974999999999838, -0.012000000000000455, -0.005250000000000199, -0.018500000000001293, -0.09049999999999869, -0.007749999999999702, -0.10800000000000054, 0.009999999999999787, 0.03324999999999889, -0.038000000000000256, -0.04550000000000054, -0.012250000000001648, -0.037499999999999645, 0.005999999999998451, -0.05075000000000074, -0.02450000000000152, -0.0017500000000012506, -0.012249999999998096, -0.04574999999999996, -0.02900000000000169, -0.02549999999999919, -0.012249999999999872, 0.028499999999999304, -0.038000000000000256, 0.06600000000000072, 0.02400000000000091, 0.008500000000001506, -0.09425000000000061], zp_timestamp='2026-04-15T22:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:35:22.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:35:22.476 [DEBUG] [Thread-28489] [transport.py] [_log()] starting thread (client mode): 0xee990cd0
2026-04-16T00:35:22.476 [DEBUG] [Thread-28489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:35:22.492 [DEBUG] [Thread-28489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:35:22.492 [INFO] [Thread-28489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:35:22.505 [DEBUG] [Thread-28489] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:35:22.505 [DEBUG] [Thread-28489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:35:22.505 [DEBUG] [Thread-28489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:35:22.505 [DEBUG] [Thread-28489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:35:22.505 [DEBUG] [Thread-28489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:35:22.505 [DEBUG] [Thread-28489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:35:22.505 [DEBUG] [Thread-28489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:35:22.505 [DEBUG] [Thread-28489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:35:22.505 [DEBUG] [Thread-28489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:35:22.505 [DEBUG] [Thread-28489] [transport.py] [_log()] client lang: <none>
2026-04-16T00:35:22.506 [DEBUG] [Thread-28489] [transport.py] [_log()] server lang: <none>
2026-04-16T00:35:22.506 [DEBUG] [Thread-28489] [transport.py] [_log()] kex follows: False
2026-04-16T00:35:22.506 [DEBUG] [Thread-28489] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:35:22.506 [DEBUG] [Thread-28489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:35:22.506 [DEBUG] [Thread-28489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:35:22.506 [DEBUG] [Thread-28489] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:35:22.506 [DEBUG] [Thread-28489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:35:22.506 [DEBUG] [Thread-28489] [transport.py] [_log()] Compression: none
2026-04-16T00:35:22.506 [DEBUG] [Thread-28489] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:35:22.557 [DEBUG] [Thread-28489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:35:22.557 [DEBUG] [Thread-28489] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:35:22.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:35:22.558 [DEBUG] [Thread-28489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:35:22.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:35:22.614 [DEBUG] [Thread-28489] [transport.py] [_log()] userauth is OK
2026-04-16T00:35:22.614 [DEBUG] [Thread-28489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:35:22.615 [DEBUG] [Thread-28489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:35:22.615 [DEBUG] [Thread-28489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:35:22.615 [DEBUG] [Thread-28489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:35:22.640 [INFO] [Thread-28489] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:35:22.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:35:22.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:35:23.452 [DEBUG] [Thread-28489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:35:23.452 [DEBUG] [Thread-28489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:35:23.503 [DEBUG] [Thread-28489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:35:23.503 [DEBUG] [Thread-28489] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:35:23.514 [DEBUG] [Thread-28489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:35:23.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:35:23.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')
2026-04-16T00:35:23.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') -> 00000000
2026-04-16T00:35:23.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:35:23.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:35:23.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:35:23.548 [DEBUG] [Thread-28489] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:35:26.877 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:35:26.878 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:35:36.688 [DEBUG] [Thread-28491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:35:46.983 [DEBUG] [Thread-28492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:35:51.728 [DEBUG] [Thread-28493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:35:53.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:35:53.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:35:53.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
2026-04-16T00:35:54.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 35, 44), 3.09981, 80.8614, 0.0, 10.4465, 8.92895, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:35:54.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:35:44
2026-04-16T00:35:55.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:35:55.688 [DEBUG] [Thread-28494] [transport.py] [_log()] starting thread (client mode): 0xf1353400
2026-04-16T00:35:55.689 [DEBUG] [Thread-28494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:35:55.707 [DEBUG] [Thread-28494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:35:55.707 [INFO] [Thread-28494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:35:55.710 [DEBUG] [Thread-28494] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:35:55.710 [DEBUG] [Thread-28494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:35:55.710 [DEBUG] [Thread-28494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:35:55.710 [DEBUG] [Thread-28494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:35:55.710 [DEBUG] [Thread-28494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:35:55.711 [DEBUG] [Thread-28494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:35:55.711 [DEBUG] [Thread-28494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:35:55.711 [DEBUG] [Thread-28494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:35:55.711 [DEBUG] [Thread-28494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:35:55.711 [DEBUG] [Thread-28494] [transport.py] [_log()] client lang: <none>
2026-04-16T00:35:55.711 [DEBUG] [Thread-28494] [transport.py] [_log()] server lang: <none>
2026-04-16T00:35:55.711 [DEBUG] [Thread-28494] [transport.py] [_log()] kex follows: False
2026-04-16T00:35:55.712 [DEBUG] [Thread-28494] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:35:55.712 [DEBUG] [Thread-28494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:35:55.712 [DEBUG] [Thread-28494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:35:55.712 [DEBUG] [Thread-28494] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:35:55.712 [DEBUG] [Thread-28494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:35:55.712 [DEBUG] [Thread-28494] [transport.py] [_log()] Compression: none
2026-04-16T00:35:55.712 [DEBUG] [Thread-28494] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:35:55.730 [DEBUG] [Thread-28494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:35:55.730 [DEBUG] [Thread-28494] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:35:55.731 [DEBUG] [Thread-28494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:35:55.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:35:55.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:35:55.732 [DEBUG] [Thread-28494] [transport.py] [_log()] userauth is OK
2026-04-16T00:35:55.732 [DEBUG] [Thread-28494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:35:55.732 [DEBUG] [Thread-28494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:35:55.732 [DEBUG] [Thread-28494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:35:55.732 [DEBUG] [Thread-28494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:35:55.756 [INFO] [Thread-28494] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:35:55.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:35:56.410 [DEBUG] [Thread-28494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:35:56.410 [DEBUG] [Thread-28494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:35:56.411 [DEBUG] [Thread-28494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:35:56.452 [DEBUG] [Thread-28494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:35:56.452 [DEBUG] [Thread-28494] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:35:56.454 [DEBUG] [Thread-28494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:35:56.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:35:56.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:35:56.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:35:56.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:35:56.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:35:56.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:35:56.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:35:56.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:35:56.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:35:56.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.941447 -999.00   +9.30   5.64     82   +6.50 1 1 1 2 1     0    0 1.86 -33.06 ZNESW 6.2 5.6 110.5 9.7 9.5 -24.7 9.4 -23.6 9.1 -21.4 9.4 -23.4
2026-04-16T00:35:56.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:35:56.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:35:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.941447
2026-04-16T00:35:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:35:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:35:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:35:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:35:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:35:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:35:44', tmtdew=3.09981, humidity=80.8614, cloud=0.0, wind=10.4465, temperature=8.92895, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:35:41.021', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.07974999999999888, -0.019750000000000156, -0.02450000000000152, -0.004999999999999005, -0.01974999999999838, -0.012000000000000455, -0.005250000000000199, -0.018500000000001293, -0.09049999999999869, -0.007749999999999702, -0.10800000000000054, 0.009999999999999787, 0.03324999999999889, -0.038000000000000256, -0.04550000000000054, -0.012250000000001648, -0.037499999999999645, 0.005999999999998451, -0.05075000000000074, -0.02450000000000152, -0.0017500000000012506, -0.012249999999998096, -0.04574999999999996, -0.02900000000000169, -0.02549999999999919, -0.012249999999999872, 0.028499999999999304, -0.038000000000000256, 0.06600000000000072, 0.02400000000000091, 0.008500000000001506, -0.09425000000000061], zp_timestamp='2026-04-15T22:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:35:56.473 [DEBUG] [Thread-28494] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:35:56.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:35:56.690 [DEBUG] [Thread-28497] [transport.py] [_log()] starting thread (client mode): 0xee954370
2026-04-16T00:35:56.690 [DEBUG] [Thread-28497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:35:56.706 [DEBUG] [Thread-28497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:35:56.706 [INFO] [Thread-28497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:35:56.714 [DEBUG] [Thread-28497] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:35:56.714 [DEBUG] [Thread-28497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:35:56.714 [DEBUG] [Thread-28497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:35:56.714 [DEBUG] [Thread-28497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:35:56.714 [DEBUG] [Thread-28497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:35:56.714 [DEBUG] [Thread-28497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:35:56.714 [DEBUG] [Thread-28497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:35:56.715 [DEBUG] [Thread-28497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:35:56.715 [DEBUG] [Thread-28497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:35:56.715 [DEBUG] [Thread-28497] [transport.py] [_log()] client lang: <none>
2026-04-16T00:35:56.715 [DEBUG] [Thread-28497] [transport.py] [_log()] server lang: <none>
2026-04-16T00:35:56.715 [DEBUG] [Thread-28497] [transport.py] [_log()] kex follows: False
2026-04-16T00:35:56.715 [DEBUG] [Thread-28497] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:35:56.715 [DEBUG] [Thread-28497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:35:56.715 [DEBUG] [Thread-28497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:35:56.715 [DEBUG] [Thread-28497] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:35:56.715 [DEBUG] [Thread-28497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:35:56.715 [DEBUG] [Thread-28497] [transport.py] [_log()] Compression: none
2026-04-16T00:35:56.716 [DEBUG] [Thread-28497] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:35:56.770 [DEBUG] [Thread-28497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:35:56.770 [DEBUG] [Thread-28497] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:35:56.770 [DEBUG] [Thread-28497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:35:56.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:35:56.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:35:56.827 [DEBUG] [Thread-28497] [transport.py] [_log()] userauth is OK
2026-04-16T00:35:56.827 [DEBUG] [Thread-28497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:35:56.827 [DEBUG] [Thread-28497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:35:56.827 [DEBUG] [Thread-28497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:35:56.827 [DEBUG] [Thread-28497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:35:56.853 [INFO] [Thread-28497] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:35:56.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:35:56.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:35:57.676 [DEBUG] [Thread-28497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:35:57.676 [DEBUG] [Thread-28497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:35:57.723 [DEBUG] [Thread-28497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:35:57.724 [DEBUG] [Thread-28497] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:35:57.732 [DEBUG] [Thread-28497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:35:57.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:35:57.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')
2026-04-16T00:35:57.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
2026-04-16T00:35:57.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:35:57.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:35:57.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:35:57.764 [DEBUG] [Thread-28497] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:36:06.761 [DEBUG] [Thread-28499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:36:21.805 [DEBUG] [Thread-28500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:36:27.079 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:36:27.080 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:36:27.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:36:27.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:36:27.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
2026-04-16T00:36:29.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 36, 19), 3.31175, 79.8645, 0.0, 10.7996, 8.96457, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:36:29.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:36:19
2026-04-16T00:36:29.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:36:29.846 [DEBUG] [Thread-28501] [transport.py] [_log()] starting thread (client mode): 0xee905e70
2026-04-16T00:36:29.846 [DEBUG] [Thread-28501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:36:29.858 [DEBUG] [Thread-28501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:36:29.858 [INFO] [Thread-28501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:36:29.859 [DEBUG] [Thread-28501] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:36:29.859 [DEBUG] [Thread-28501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:36:29.859 [DEBUG] [Thread-28501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:36:29.859 [DEBUG] [Thread-28501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:36:29.859 [DEBUG] [Thread-28501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:36:29.859 [DEBUG] [Thread-28501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:36:29.859 [DEBUG] [Thread-28501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:36:29.859 [DEBUG] [Thread-28501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:36:29.860 [DEBUG] [Thread-28501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:36:29.860 [DEBUG] [Thread-28501] [transport.py] [_log()] client lang: <none>
2026-04-16T00:36:29.860 [DEBUG] [Thread-28501] [transport.py] [_log()] server lang: <none>
2026-04-16T00:36:29.860 [DEBUG] [Thread-28501] [transport.py] [_log()] kex follows: False
2026-04-16T00:36:29.860 [DEBUG] [Thread-28501] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:36:29.860 [DEBUG] [Thread-28501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:36:29.860 [DEBUG] [Thread-28501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:36:29.860 [DEBUG] [Thread-28501] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:36:29.860 [DEBUG] [Thread-28501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:36:29.860 [DEBUG] [Thread-28501] [transport.py] [_log()] Compression: none
2026-04-16T00:36:29.860 [DEBUG] [Thread-28501] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:36:29.871 [DEBUG] [Thread-28501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:36:29.871 [DEBUG] [Thread-28501] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:36:29.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:36:29.872 [DEBUG] [Thread-28501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:36:29.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:36:29.873 [DEBUG] [Thread-28501] [transport.py] [_log()] userauth is OK
2026-04-16T00:36:29.873 [DEBUG] [Thread-28501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:36:29.873 [DEBUG] [Thread-28501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:36:29.873 [DEBUG] [Thread-28501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:36:29.873 [DEBUG] [Thread-28501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:36:29.896 [INFO] [Thread-28501] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:36:29.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:36:30.465 [DEBUG] [Thread-28501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:36:30.466 [DEBUG] [Thread-28501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:36:30.466 [DEBUG] [Thread-28501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:36:30.506 [DEBUG] [Thread-28501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:36:30.506 [DEBUG] [Thread-28501] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:36:30.509 [DEBUG] [Thread-28501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:36:30.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:36:30.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:36:30.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:36:30.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:36:30.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:36:30.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:36:30.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:36:30.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:36:30.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:36:30.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.941794 -999.00   +9.30   7.50     82   +6.50 1 1 1 2 1     0    0 1.97 -30.04 ZNESW 7.3 7.5 113.3 10.2 9.5 -24.7 9.4 -23.4 9.1 -21.4 9.4 -23.3
2026-04-16T00:36:30.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:36:30.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:36:30.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.941794
2026-04-16T00:36:30.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:36:30.537 [DEBUG] [Thread-28501] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:36:30.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:36:30.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:36:30.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:36:30.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:36:30.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:36:19', tmtdew=3.31175, humidity=79.8645, cloud=0.0, wind=10.7996, temperature=8.96457, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:36:11.002', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.07974999999999888, -0.019750000000000156, -0.02450000000000152, -0.004999999999999005, -0.01974999999999838, -0.012000000000000455, -0.005250000000000199, -0.018500000000001293, -0.09049999999999869, -0.007749999999999702, -0.10800000000000054, 0.009999999999999787, 0.03324999999999889, -0.038000000000000256, -0.04550000000000054, -0.012250000000001648, -0.037499999999999645, 0.005999999999998451, -0.05075000000000074, -0.02450000000000152, -0.0017500000000012506, -0.012249999999998096, -0.04574999999999996, -0.02900000000000169, -0.02549999999999919, -0.012249999999999872, 0.028499999999999304, -0.038000000000000256, 0.06600000000000072, 0.02400000000000091, 0.008500000000001506, -0.09425000000000061], zp_timestamp='2026-04-15T22:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:36:30.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:36:30.795 [DEBUG] [Thread-28504] [transport.py] [_log()] starting thread (client mode): 0xee904f40
2026-04-16T00:36:30.795 [DEBUG] [Thread-28504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:36:30.810 [DEBUG] [Thread-28504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:36:30.810 [INFO] [Thread-28504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:36:30.817 [DEBUG] [Thread-28504] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:36:30.817 [DEBUG] [Thread-28504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:36:30.817 [DEBUG] [Thread-28504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:36:30.817 [DEBUG] [Thread-28504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:36:30.818 [DEBUG] [Thread-28504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:36:30.818 [DEBUG] [Thread-28504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:36:30.818 [DEBUG] [Thread-28504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:36:30.818 [DEBUG] [Thread-28504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:36:30.818 [DEBUG] [Thread-28504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:36:30.818 [DEBUG] [Thread-28504] [transport.py] [_log()] client lang: <none>
2026-04-16T00:36:30.818 [DEBUG] [Thread-28504] [transport.py] [_log()] server lang: <none>
2026-04-16T00:36:30.818 [DEBUG] [Thread-28504] [transport.py] [_log()] kex follows: False
2026-04-16T00:36:30.818 [DEBUG] [Thread-28504] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:36:30.818 [DEBUG] [Thread-28504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:36:30.818 [DEBUG] [Thread-28504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:36:30.818 [DEBUG] [Thread-28504] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:36:30.819 [DEBUG] [Thread-28504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:36:30.819 [DEBUG] [Thread-28504] [transport.py] [_log()] Compression: none
2026-04-16T00:36:30.819 [DEBUG] [Thread-28504] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:36:30.874 [DEBUG] [Thread-28504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:36:30.874 [DEBUG] [Thread-28504] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:36:30.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:36:30.875 [DEBUG] [Thread-28504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:36:30.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:36:30.931 [DEBUG] [Thread-28504] [transport.py] [_log()] userauth is OK
2026-04-16T00:36:30.931 [DEBUG] [Thread-28504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:36:30.931 [DEBUG] [Thread-28504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:36:30.931 [DEBUG] [Thread-28504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:36:30.931 [DEBUG] [Thread-28504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:36:30.956 [INFO] [Thread-28504] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:36:30.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:36:30.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:36:31.787 [DEBUG] [Thread-28504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:36:31.787 [DEBUG] [Thread-28504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:36:31.835 [DEBUG] [Thread-28504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:36:31.835 [DEBUG] [Thread-28504] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:36:31.844 [DEBUG] [Thread-28504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:36:31.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:36: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')
2026-04-16T00:36:31.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
2026-04-16T00:36:31.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:36:31.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:36:31.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:36:31.879 [DEBUG] [Thread-28504] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:36:36.837 [DEBUG] [Thread-28506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:36:47.129 [DEBUG] [Thread-28507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:36:51.881 [DEBUG] [Thread-28508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:37:01.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:37:01.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:37:01.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
2026-04-16T00:37:03.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 36, 55), 3.26431, 79.848, 0.0, 8.982, 8.94806, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:37:03.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:36:55
2026-04-16T00:37:03.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:37:04.109 [DEBUG] [Thread-28509] [transport.py] [_log()] starting thread (client mode): 0xf1350310
2026-04-16T00:37:04.109 [DEBUG] [Thread-28509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:37:04.124 [DEBUG] [Thread-28509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:37:04.124 [INFO] [Thread-28509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:37:04.125 [DEBUG] [Thread-28509] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:37:04.125 [DEBUG] [Thread-28509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:37:04.125 [DEBUG] [Thread-28509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:37:04.125 [DEBUG] [Thread-28509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:37:04.125 [DEBUG] [Thread-28509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:37:04.125 [DEBUG] [Thread-28509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:37:04.125 [DEBUG] [Thread-28509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:37:04.125 [DEBUG] [Thread-28509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:37:04.125 [DEBUG] [Thread-28509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:37:04.125 [DEBUG] [Thread-28509] [transport.py] [_log()] client lang: <none>
2026-04-16T00:37:04.125 [DEBUG] [Thread-28509] [transport.py] [_log()] server lang: <none>
2026-04-16T00:37:04.126 [DEBUG] [Thread-28509] [transport.py] [_log()] kex follows: False
2026-04-16T00:37:04.126 [DEBUG] [Thread-28509] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:37:04.126 [DEBUG] [Thread-28509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:37:04.126 [DEBUG] [Thread-28509] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:37:04.126 [DEBUG] [Thread-28509] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:37:04.126 [DEBUG] [Thread-28509] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:37:04.126 [DEBUG] [Thread-28509] [transport.py] [_log()] Compression: none
2026-04-16T00:37:04.126 [DEBUG] [Thread-28509] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:37:04.134 [DEBUG] [Thread-28509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:37:04.134 [DEBUG] [Thread-28509] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:37:04.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:37:04.134 [DEBUG] [Thread-28509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:37:04.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:37:04.135 [DEBUG] [Thread-28509] [transport.py] [_log()] userauth is OK
2026-04-16T00:37:04.135 [DEBUG] [Thread-28509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:37:04.135 [DEBUG] [Thread-28509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:37:04.135 [DEBUG] [Thread-28509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:37:04.135 [DEBUG] [Thread-28509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:37:04.148 [INFO] [Thread-28509] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:37:04.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:37:04.741 [DEBUG] [Thread-28509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:37:04.742 [DEBUG] [Thread-28509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:37:04.742 [DEBUG] [Thread-28509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:37:04.783 [DEBUG] [Thread-28509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:37:04.783 [DEBUG] [Thread-28509] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:37:04.789 [DEBUG] [Thread-28509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:37:04.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:37:04.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:37:04.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:37:04.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:37:04.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:37:04.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:37:04.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:37:04.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:37:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:37:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.942141 -999.00   +9.40   7.87     82   +6.50 1 1 1 2 1     0    0 2.02 -27.68 ZNESW 8.1 7.9 109.6 9.2 9.6 -24.6 9.4 -23.7 9.1 -21.4 9.4 -23.5
2026-04-16T00:37:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:37:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:37:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.942141
2026-04-16T00:37:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:37:04.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:37:04.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:37:04.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:37:04.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:37:04.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:36:55', tmtdew=3.26431, humidity=79.848, cloud=0.0, wind=8.982, temperature=8.94806, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:36:40.982', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04824999999999946, -0.09174999999999933, -0.025249999999999773, -0.04800000000000004, -0.0235000000000003, 0.05525000000000091, 0.0, -0.032249999999999446, -0.01750000000000007, -0.10650000000000048, -0.03675000000000139, -0.10400000000000098, -0.0039999999999995595, 0.028249999999999886, 0.006999999999997897, -0.019000000000000128, 0.005250000000000199, -0.06349999999999945, -0.0070000000000014495, -0.035250000000001336, -0.03300000000000125, 0.020749999999999602, 0.012250000000001648, -0.04574999999999996, -0.02800000000000047, -0.041999999999999815, -0.00274999999999892, -0.010500000000000398, -0.03500000000000014, 0.057000000000000384, 0.004000000000001336, 0.008000000000000895, -0.04725000000000179], zp_timestamp='2026-04-15T22:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:37:04.813 [DEBUG] [Thread-28509] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:37:05.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:37:05.073 [DEBUG] [Thread-28512] [transport.py] [_log()] starting thread (client mode): 0xf1351e10
2026-04-16T00:37:05.073 [DEBUG] [Thread-28512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:37:05.089 [DEBUG] [Thread-28512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:37:05.089 [INFO] [Thread-28512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:37:05.097 [DEBUG] [Thread-28512] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:37:05.097 [DEBUG] [Thread-28512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:37:05.097 [DEBUG] [Thread-28512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:37:05.097 [DEBUG] [Thread-28512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:37:05.097 [DEBUG] [Thread-28512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:37:05.097 [DEBUG] [Thread-28512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:37:05.097 [DEBUG] [Thread-28512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:37:05.097 [DEBUG] [Thread-28512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:37:05.097 [DEBUG] [Thread-28512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:37:05.098 [DEBUG] [Thread-28512] [transport.py] [_log()] client lang: <none>
2026-04-16T00:37:05.098 [DEBUG] [Thread-28512] [transport.py] [_log()] server lang: <none>
2026-04-16T00:37:05.098 [DEBUG] [Thread-28512] [transport.py] [_log()] kex follows: False
2026-04-16T00:37:05.098 [DEBUG] [Thread-28512] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:37:05.098 [DEBUG] [Thread-28512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:37:05.098 [DEBUG] [Thread-28512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:37:05.098 [DEBUG] [Thread-28512] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:37:05.098 [DEBUG] [Thread-28512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:37:05.098 [DEBUG] [Thread-28512] [transport.py] [_log()] Compression: none
2026-04-16T00:37:05.098 [DEBUG] [Thread-28512] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:37:05.156 [DEBUG] [Thread-28512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:37:05.157 [DEBUG] [Thread-28512] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:37:05.157 [DEBUG] [Thread-28512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:37:05.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:37:05.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:37:05.215 [DEBUG] [Thread-28512] [transport.py] [_log()] userauth is OK
2026-04-16T00:37:05.215 [DEBUG] [Thread-28512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:37:05.215 [DEBUG] [Thread-28512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:37:05.216 [DEBUG] [Thread-28512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:37:05.216 [DEBUG] [Thread-28512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:37:05.241 [INFO] [Thread-28512] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:37:05.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:37:05.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:37:06.058 [DEBUG] [Thread-28512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:37:06.058 [DEBUG] [Thread-28512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:37:06.106 [DEBUG] [Thread-28512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:37:06.106 [DEBUG] [Thread-28512] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:37:06.116 [DEBUG] [Thread-28512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:37:06.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:37:06.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')
2026-04-16T00:37:06.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
2026-04-16T00:37:06.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:37:06.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:37:06.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:37:06.147 [DEBUG] [Thread-28512] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:37:06.915 [DEBUG] [Thread-28514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:37:21.961 [DEBUG] [Thread-28515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:37:27.282 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:37:27.283 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:37:36.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:37:36.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:37:36.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
2026-04-16T00:37:36.991 [DEBUG] [Thread-28516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:37:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 36, 55), 3.26431, 79.848, 0.0, 8.982, 8.94806, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:37:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:36:55
2026-04-16T00:37:37.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:37:38.390 [DEBUG] [Thread-28517] [transport.py] [_log()] starting thread (client mode): 0xf1350a90
2026-04-16T00:37:38.390 [DEBUG] [Thread-28517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:37:38.406 [DEBUG] [Thread-28517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:37:38.406 [INFO] [Thread-28517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:37:38.409 [DEBUG] [Thread-28517] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:37:38.409 [DEBUG] [Thread-28517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:37:38.409 [DEBUG] [Thread-28517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:37:38.409 [DEBUG] [Thread-28517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:37:38.409 [DEBUG] [Thread-28517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:37:38.409 [DEBUG] [Thread-28517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:37:38.409 [DEBUG] [Thread-28517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:37:38.409 [DEBUG] [Thread-28517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:37:38.409 [DEBUG] [Thread-28517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:37:38.410 [DEBUG] [Thread-28517] [transport.py] [_log()] client lang: <none>
2026-04-16T00:37:38.410 [DEBUG] [Thread-28517] [transport.py] [_log()] server lang: <none>
2026-04-16T00:37:38.410 [DEBUG] [Thread-28517] [transport.py] [_log()] kex follows: False
2026-04-16T00:37:38.410 [DEBUG] [Thread-28517] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:37:38.410 [DEBUG] [Thread-28517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:37:38.410 [DEBUG] [Thread-28517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:37:38.410 [DEBUG] [Thread-28517] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:37:38.410 [DEBUG] [Thread-28517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:37:38.410 [DEBUG] [Thread-28517] [transport.py] [_log()] Compression: none
2026-04-16T00:37:38.410 [DEBUG] [Thread-28517] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:37:38.426 [DEBUG] [Thread-28517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:37:38.426 [DEBUG] [Thread-28517] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:37:38.426 [DEBUG] [Thread-28517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:37:38.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:37:38.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:37:38.427 [DEBUG] [Thread-28517] [transport.py] [_log()] userauth is OK
2026-04-16T00:37:38.427 [DEBUG] [Thread-28517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:37:38.427 [DEBUG] [Thread-28517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:37:38.427 [DEBUG] [Thread-28517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:37:38.428 [DEBUG] [Thread-28517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:37:38.441 [INFO] [Thread-28517] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:37:38.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:37:39.071 [DEBUG] [Thread-28517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:37:39.072 [DEBUG] [Thread-28517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:37:39.072 [DEBUG] [Thread-28517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:37:39.112 [DEBUG] [Thread-28517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:37:39.112 [DEBUG] [Thread-28517] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:37:39.115 [DEBUG] [Thread-28517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:37:39.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:37:39.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:37:39.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:37:39.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:37:39.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:37:39.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:37:39.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:37:39.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:37:39.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:37:39.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.942489 -999.00   +9.40   7.59     82   +6.50 1 1 1 2 1     0    0 2.02 -27.60 ZNESW 7.9 7.6 119.1 9.7 9.6 -25.0 9.4 -23.6 9.1 -21.6 9.4 -23.4
2026-04-16T00:37:39.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:37:39.137 [DEBUG] [Thread-28517] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:37:39.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:37:39.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.942489
2026-04-16T00:37:39.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:37:39.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:37:39.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:37:39.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:37:39.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:37:39.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:36:55', tmtdew=3.26431, humidity=79.848, cloud=0.0, wind=8.982, temperature=8.94806, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:37:11.050', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04824999999999946, -0.09174999999999933, -0.025249999999999773, -0.04800000000000004, -0.0235000000000003, 0.05525000000000091, 0.0, -0.032249999999999446, -0.01750000000000007, -0.10650000000000048, -0.03675000000000139, -0.10400000000000098, -0.0039999999999995595, 0.028249999999999886, 0.006999999999997897, -0.019000000000000128, 0.005250000000000199, -0.06349999999999945, -0.0070000000000014495, -0.035250000000001336, -0.03300000000000125, 0.020749999999999602, 0.012250000000001648, -0.04574999999999996, -0.02800000000000047, -0.041999999999999815, -0.00274999999999892, -0.010500000000000398, -0.03500000000000014, 0.057000000000000384, 0.004000000000001336, 0.008000000000000895, -0.04725000000000179], zp_timestamp='2026-04-15T22:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:37:39.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:37:39.403 [DEBUG] [Thread-28520] [transport.py] [_log()] starting thread (client mode): 0xf13c8670
2026-04-16T00:37:39.403 [DEBUG] [Thread-28520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:37:39.418 [DEBUG] [Thread-28520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:37:39.418 [INFO] [Thread-28520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:37:39.425 [DEBUG] [Thread-28520] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:37:39.425 [DEBUG] [Thread-28520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:37:39.425 [DEBUG] [Thread-28520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:37:39.425 [DEBUG] [Thread-28520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:37:39.425 [DEBUG] [Thread-28520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:37:39.426 [DEBUG] [Thread-28520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:37:39.426 [DEBUG] [Thread-28520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:37:39.426 [DEBUG] [Thread-28520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:37:39.426 [DEBUG] [Thread-28520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:37:39.426 [DEBUG] [Thread-28520] [transport.py] [_log()] client lang: <none>
2026-04-16T00:37:39.426 [DEBUG] [Thread-28520] [transport.py] [_log()] server lang: <none>
2026-04-16T00:37:39.426 [DEBUG] [Thread-28520] [transport.py] [_log()] kex follows: False
2026-04-16T00:37:39.426 [DEBUG] [Thread-28520] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:37:39.426 [DEBUG] [Thread-28520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:37:39.426 [DEBUG] [Thread-28520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:37:39.426 [DEBUG] [Thread-28520] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:37:39.426 [DEBUG] [Thread-28520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:37:39.427 [DEBUG] [Thread-28520] [transport.py] [_log()] Compression: none
2026-04-16T00:37:39.427 [DEBUG] [Thread-28520] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:37:39.483 [DEBUG] [Thread-28520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:37:39.483 [DEBUG] [Thread-28520] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:37:39.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:37:39.484 [DEBUG] [Thread-28520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:37:39.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:37:39.540 [DEBUG] [Thread-28520] [transport.py] [_log()] userauth is OK
2026-04-16T00:37:39.540 [DEBUG] [Thread-28520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:37:39.540 [DEBUG] [Thread-28520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:37:39.540 [DEBUG] [Thread-28520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:37:39.540 [DEBUG] [Thread-28520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:37:39.565 [INFO] [Thread-28520] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:37:39.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:37:39.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:37:40.377 [DEBUG] [Thread-28520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:37:40.377 [DEBUG] [Thread-28520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:37:40.424 [DEBUG] [Thread-28520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:37:40.425 [DEBUG] [Thread-28520] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:37:40.433 [DEBUG] [Thread-28520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:37:40.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:37:40.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')
2026-04-16T00:37:40.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
2026-04-16T00:37:40.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:37:40.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:37:40.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:37:40.464 [DEBUG] [Thread-28520] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:37:47.285 [DEBUG] [Thread-28522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:37:52.022 [DEBUG] [Thread-28523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:38:07.064 [DEBUG] [Thread-28524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:38:10.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:38:10.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:38:10.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
2026-04-16T00:38:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 37, 30), 3.26391, 79.848, 0.0, 8.78796, 8.93147, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:38:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:37:30
2026-04-16T00:38:12.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:38:12.594 [DEBUG] [Thread-28525] [transport.py] [_log()] starting thread (client mode): 0xf13527a0
2026-04-16T00:38:12.595 [DEBUG] [Thread-28525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:38:12.614 [DEBUG] [Thread-28525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:38:12.614 [INFO] [Thread-28525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:38:12.617 [DEBUG] [Thread-28525] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:38:12.617 [DEBUG] [Thread-28525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:38:12.617 [DEBUG] [Thread-28525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:38:12.617 [DEBUG] [Thread-28525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:38:12.617 [DEBUG] [Thread-28525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:38:12.617 [DEBUG] [Thread-28525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:38:12.617 [DEBUG] [Thread-28525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:38:12.617 [DEBUG] [Thread-28525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:38:12.618 [DEBUG] [Thread-28525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:38:12.618 [DEBUG] [Thread-28525] [transport.py] [_log()] client lang: <none>
2026-04-16T00:38:12.618 [DEBUG] [Thread-28525] [transport.py] [_log()] server lang: <none>
2026-04-16T00:38:12.618 [DEBUG] [Thread-28525] [transport.py] [_log()] kex follows: False
2026-04-16T00:38:12.618 [DEBUG] [Thread-28525] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:38:12.618 [DEBUG] [Thread-28525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:38:12.618 [DEBUG] [Thread-28525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:38:12.618 [DEBUG] [Thread-28525] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:38:12.618 [DEBUG] [Thread-28525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:38:12.618 [DEBUG] [Thread-28525] [transport.py] [_log()] Compression: none
2026-04-16T00:38:12.618 [DEBUG] [Thread-28525] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:38:12.627 [DEBUG] [Thread-28525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:38:12.627 [DEBUG] [Thread-28525] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:38:12.627 [DEBUG] [Thread-28525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:38:12.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:38:12.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:38:12.628 [DEBUG] [Thread-28525] [transport.py] [_log()] userauth is OK
2026-04-16T00:38:12.629 [DEBUG] [Thread-28525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:38:12.629 [DEBUG] [Thread-28525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:38:12.629 [DEBUG] [Thread-28525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:38:12.629 [DEBUG] [Thread-28525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:38:12.647 [INFO] [Thread-28525] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:38:12.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:38:13.214 [DEBUG] [Thread-28525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:38:13.214 [DEBUG] [Thread-28525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:38:13.214 [DEBUG] [Thread-28525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:38:13.255 [DEBUG] [Thread-28525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:38:13.255 [DEBUG] [Thread-28525] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:38:13.257 [DEBUG] [Thread-28525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:38:13.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:38:13.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:38:13.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:38:13.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:38:13.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:38:13.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:38:13.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:38:13.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:38:13.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:38:13.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.942836 -999.00   +9.40   7.28     82   +6.60 1 1 1 2 1     0    0 2.11 -25.91 ZNESW 6.7 7.3 118.0 10.8 9.6 -24.7 9.4 -23.7 9.1 -21.3 9.4 -23.6
2026-04-16T00:38:13.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:38:13.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:38:13.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.942836
2026-04-16T00:38:13.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:38:13.272 [DEBUG] [Thread-28525] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:38:13.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:38:13.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:38:13.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:38:13.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:38:13.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:37:30', tmtdew=3.26391, humidity=79.848, cloud=0.0, wind=8.78796, temperature=8.93147, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:37:41.030', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04824999999999946, -0.09174999999999933, -0.025249999999999773, -0.04800000000000004, -0.0235000000000003, 0.05525000000000091, 0.0, -0.032249999999999446, -0.01750000000000007, -0.10650000000000048, -0.03675000000000139, -0.10400000000000098, -0.0039999999999995595, 0.028249999999999886, 0.006999999999997897, -0.019000000000000128, 0.005250000000000199, -0.06349999999999945, -0.0070000000000014495, -0.035250000000001336, -0.03300000000000125, 0.020749999999999602, 0.012250000000001648, -0.04574999999999996, -0.02800000000000047, -0.041999999999999815, -0.00274999999999892, -0.010500000000000398, -0.03500000000000014, 0.057000000000000384, 0.004000000000001336, 0.008000000000000895, -0.04725000000000179], zp_timestamp='2026-04-15T22:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:38:13.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:38:13.531 [DEBUG] [Thread-28528] [transport.py] [_log()] starting thread (client mode): 0xf1351c90
2026-04-16T00:38:13.531 [DEBUG] [Thread-28528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:38:13.546 [DEBUG] [Thread-28528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:38:13.546 [INFO] [Thread-28528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:38:13.557 [DEBUG] [Thread-28528] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:38:13.557 [DEBUG] [Thread-28528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:38:13.557 [DEBUG] [Thread-28528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:38:13.557 [DEBUG] [Thread-28528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:38:13.557 [DEBUG] [Thread-28528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:38:13.557 [DEBUG] [Thread-28528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:38:13.557 [DEBUG] [Thread-28528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:38:13.557 [DEBUG] [Thread-28528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:38:13.557 [DEBUG] [Thread-28528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:38:13.557 [DEBUG] [Thread-28528] [transport.py] [_log()] client lang: <none>
2026-04-16T00:38:13.557 [DEBUG] [Thread-28528] [transport.py] [_log()] server lang: <none>
2026-04-16T00:38:13.558 [DEBUG] [Thread-28528] [transport.py] [_log()] kex follows: False
2026-04-16T00:38:13.558 [DEBUG] [Thread-28528] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:38:13.558 [DEBUG] [Thread-28528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:38:13.558 [DEBUG] [Thread-28528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:38:13.558 [DEBUG] [Thread-28528] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:38:13.558 [DEBUG] [Thread-28528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:38:13.558 [DEBUG] [Thread-28528] [transport.py] [_log()] Compression: none
2026-04-16T00:38:13.558 [DEBUG] [Thread-28528] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:38:13.612 [DEBUG] [Thread-28528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:38:13.612 [DEBUG] [Thread-28528] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:38:13.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:38:13.613 [DEBUG] [Thread-28528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:38:13.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:38:13.668 [DEBUG] [Thread-28528] [transport.py] [_log()] userauth is OK
2026-04-16T00:38:13.669 [DEBUG] [Thread-28528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:38:13.669 [DEBUG] [Thread-28528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:38:13.669 [DEBUG] [Thread-28528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:38:13.669 [DEBUG] [Thread-28528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:38:13.694 [INFO] [Thread-28528] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:38:13.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:38:13.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:38:14.513 [DEBUG] [Thread-28528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:38:14.513 [DEBUG] [Thread-28528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:38:14.561 [DEBUG] [Thread-28528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:38:14.561 [DEBUG] [Thread-28528] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:38:14.570 [DEBUG] [Thread-28528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:38:14.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:38:14.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')
2026-04-16T00:38:14.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') -> 00000000
2026-04-16T00:38:14.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:38:14.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:38:14.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:38:14.603 [DEBUG] [Thread-28528] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:38:22.093 [DEBUG] [Thread-28530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:38:27.484 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:38:27.485 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:38:37.133 [DEBUG] [Thread-28531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:38:44.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:38:44.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:38:44.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
2026-04-16T00:38:45.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 38, 6), 3.26054, 79.8646, 0.0, 8.982, 8.91493, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:38:45.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:38:06
2026-04-16T00:38:46.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:38:46.978 [DEBUG] [Thread-28532] [transport.py] [_log()] starting thread (client mode): 0xf1364af0
2026-04-16T00:38:46.978 [DEBUG] [Thread-28532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:38:46.998 [DEBUG] [Thread-28532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:38:46.998 [INFO] [Thread-28532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:38:46.999 [DEBUG] [Thread-28532] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:38:46.999 [DEBUG] [Thread-28532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:38:46.999 [DEBUG] [Thread-28532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:38:46.999 [DEBUG] [Thread-28532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:38:46.999 [DEBUG] [Thread-28532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:38:46.999 [DEBUG] [Thread-28532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:38:46.999 [DEBUG] [Thread-28532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:38:46.999 [DEBUG] [Thread-28532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:38:47.000 [DEBUG] [Thread-28532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:38:47.000 [DEBUG] [Thread-28532] [transport.py] [_log()] client lang: <none>
2026-04-16T00:38:47.000 [DEBUG] [Thread-28532] [transport.py] [_log()] server lang: <none>
2026-04-16T00:38:47.000 [DEBUG] [Thread-28532] [transport.py] [_log()] kex follows: False
2026-04-16T00:38:47.000 [DEBUG] [Thread-28532] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:38:47.000 [DEBUG] [Thread-28532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:38:47.000 [DEBUG] [Thread-28532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:38:47.000 [DEBUG] [Thread-28532] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:38:47.000 [DEBUG] [Thread-28532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:38:47.000 [DEBUG] [Thread-28532] [transport.py] [_log()] Compression: none
2026-04-16T00:38:47.000 [DEBUG] [Thread-28532] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:38:47.013 [DEBUG] [Thread-28532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:38:47.013 [DEBUG] [Thread-28532] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:38:47.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:38:47.014 [DEBUG] [Thread-28532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:38:47.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:38:47.015 [DEBUG] [Thread-28532] [transport.py] [_log()] userauth is OK
2026-04-16T00:38:47.015 [DEBUG] [Thread-28532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:38:47.015 [DEBUG] [Thread-28532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:38:47.015 [DEBUG] [Thread-28532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:38:47.015 [DEBUG] [Thread-28532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:38:47.028 [INFO] [Thread-28532] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:38:47.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:38:47.449 [DEBUG] [Thread-28534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:38:47.639 [DEBUG] [Thread-28532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:38:47.639 [DEBUG] [Thread-28532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:38:47.640 [DEBUG] [Thread-28532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:38:47.680 [DEBUG] [Thread-28532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:38:47.680 [DEBUG] [Thread-28532] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:38:47.683 [DEBUG] [Thread-28532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:38:47.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:38:47.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:38:47.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:38:47.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:38:47.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:38:47.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:38:47.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:38:47.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:38:47.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:38:47.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.943530 -999.00   +9.40   8.00     82   +6.60 1 1 1 2 1     0    0 2.06 -23.48 ZNESW 6.9 8.0 123.4 9.8 9.6 -24.8 9.4 -23.7 9.1 -21.5 9.4 -23.5
2026-04-16T00:38:47.707 [DEBUG] [Thread-28532] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:38:47.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:38:47.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:38:47.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.943530
2026-04-16T00:38:47.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:38:47.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:38:47.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:38:47.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:38:47.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:38:47.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:38:06', tmtdew=3.26054, humidity=79.8646, cloud=0.0, wind=8.982, temperature=8.91493, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:38:40.992', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04824999999999946, -0.09174999999999933, -0.025249999999999773, -0.04800000000000004, -0.0235000000000003, 0.05525000000000091, 0.0, -0.032249999999999446, -0.01750000000000007, -0.10650000000000048, -0.03675000000000139, -0.10400000000000098, -0.0039999999999995595, 0.028249999999999886, 0.006999999999997897, -0.019000000000000128, 0.005250000000000199, -0.06349999999999945, -0.0070000000000014495, -0.035250000000001336, -0.03300000000000125, 0.020749999999999602, 0.012250000000001648, -0.04574999999999996, -0.02800000000000047, -0.041999999999999815, -0.00274999999999892, -0.010500000000000398, -0.03500000000000014, 0.057000000000000384, 0.004000000000001336, 0.008000000000000895, -0.04725000000000179], zp_timestamp='2026-04-15T22:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:38:47.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:38:47.963 [DEBUG] [Thread-28536] [transport.py] [_log()] starting thread (client mode): 0xf1367490
2026-04-16T00:38:47.963 [DEBUG] [Thread-28536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:38:47.977 [DEBUG] [Thread-28536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:38:47.977 [INFO] [Thread-28536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:38:47.986 [DEBUG] [Thread-28536] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:38:47.986 [DEBUG] [Thread-28536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:38:47.986 [DEBUG] [Thread-28536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:38:47.986 [DEBUG] [Thread-28536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:38:47.986 [DEBUG] [Thread-28536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:38:47.986 [DEBUG] [Thread-28536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:38:47.986 [DEBUG] [Thread-28536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:38:47.987 [DEBUG] [Thread-28536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:38:47.987 [DEBUG] [Thread-28536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:38:47.987 [DEBUG] [Thread-28536] [transport.py] [_log()] client lang: <none>
2026-04-16T00:38:47.987 [DEBUG] [Thread-28536] [transport.py] [_log()] server lang: <none>
2026-04-16T00:38:47.987 [DEBUG] [Thread-28536] [transport.py] [_log()] kex follows: False
2026-04-16T00:38:47.987 [DEBUG] [Thread-28536] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:38:47.987 [DEBUG] [Thread-28536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:38:47.987 [DEBUG] [Thread-28536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:38:47.987 [DEBUG] [Thread-28536] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:38:47.987 [DEBUG] [Thread-28536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:38:47.988 [DEBUG] [Thread-28536] [transport.py] [_log()] Compression: none
2026-04-16T00:38:47.988 [DEBUG] [Thread-28536] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:38:48.047 [DEBUG] [Thread-28536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:38:48.048 [DEBUG] [Thread-28536] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:38:48.048 [DEBUG] [Thread-28536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:38:48.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:38:48.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:38:48.104 [DEBUG] [Thread-28536] [transport.py] [_log()] userauth is OK
2026-04-16T00:38:48.105 [DEBUG] [Thread-28536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:38:48.105 [DEBUG] [Thread-28536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:38:48.105 [DEBUG] [Thread-28536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:38:48.106 [DEBUG] [Thread-28536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:38:48.137 [INFO] [Thread-28536] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:38:48.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:38:48.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:38:48.950 [DEBUG] [Thread-28536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:38:48.950 [DEBUG] [Thread-28536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:38:48.998 [DEBUG] [Thread-28536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:38:48.998 [DEBUG] [Thread-28536] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:38:49.007 [DEBUG] [Thread-28536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:38:49.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:38:49.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')
2026-04-16T00:38:49.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
2026-04-16T00:38:49.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:38:49.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:38:49.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:38:49.046 [DEBUG] [Thread-28536] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:38:52.162 [DEBUG] [Thread-28538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:39:07.208 [DEBUG] [Thread-28539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:39:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:39:20.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:39:20.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
2026-04-16T00:39:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 38, 41), 3.10999, 80.7957, 0.0, 12.1046, 8.86304, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:39:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:38:41
2026-04-16T00:39:22.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:39:22.241 [DEBUG] [Thread-28540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:39:22.502 [DEBUG] [Thread-28541] [transport.py] [_log()] starting thread (client mode): 0xee957070
2026-04-16T00:39:22.503 [DEBUG] [Thread-28541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:39:22.522 [DEBUG] [Thread-28541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:39:22.522 [INFO] [Thread-28541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:39:22.525 [DEBUG] [Thread-28541] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:39:22.525 [DEBUG] [Thread-28541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:39:22.526 [DEBUG] [Thread-28541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:39:22.526 [DEBUG] [Thread-28541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:39:22.526 [DEBUG] [Thread-28541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:39:22.526 [DEBUG] [Thread-28541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:39:22.526 [DEBUG] [Thread-28541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:39:22.526 [DEBUG] [Thread-28541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:39:22.526 [DEBUG] [Thread-28541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:39:22.526 [DEBUG] [Thread-28541] [transport.py] [_log()] client lang: <none>
2026-04-16T00:39:22.526 [DEBUG] [Thread-28541] [transport.py] [_log()] server lang: <none>
2026-04-16T00:39:22.526 [DEBUG] [Thread-28541] [transport.py] [_log()] kex follows: False
2026-04-16T00:39:22.526 [DEBUG] [Thread-28541] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:39:22.526 [DEBUG] [Thread-28541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:39:22.527 [DEBUG] [Thread-28541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:39:22.527 [DEBUG] [Thread-28541] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:39:22.527 [DEBUG] [Thread-28541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:39:22.527 [DEBUG] [Thread-28541] [transport.py] [_log()] Compression: none
2026-04-16T00:39:22.527 [DEBUG] [Thread-28541] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:39:22.543 [DEBUG] [Thread-28541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:39:22.543 [DEBUG] [Thread-28541] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:39:22.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:39:22.544 [DEBUG] [Thread-28541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:39:22.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:39:22.545 [DEBUG] [Thread-28541] [transport.py] [_log()] userauth is OK
2026-04-16T00:39:22.545 [DEBUG] [Thread-28541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:39:22.545 [DEBUG] [Thread-28541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:39:22.546 [DEBUG] [Thread-28541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:39:22.546 [DEBUG] [Thread-28541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:39:22.564 [INFO] [Thread-28541] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:39:22.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:39:23.195 [DEBUG] [Thread-28541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:39:23.195 [DEBUG] [Thread-28541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:39:23.196 [DEBUG] [Thread-28541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:39:23.236 [DEBUG] [Thread-28541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:39:23.236 [DEBUG] [Thread-28541] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:39:23.239 [DEBUG] [Thread-28541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:39:23.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:39:23.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:39:23.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:39:23.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:39:23.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:39:23.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:39:23.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:39:23.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:39:23.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:39:23.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.943877 -999.00   +9.40   7.81     82   +6.60 1 1 1 2 1     0    0 2.15 -22.42 ZNESW 8.0 7.8 113.2 9.7 9.6 -24.8 9.4 -23.7 9.1 -21.5 9.4 -23.4
2026-04-16T00:39:23.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:39:23.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:39:23.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.943877
2026-04-16T00:39:23.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:39:23.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:39:23.263 [DEBUG] [Thread-28541] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:39:23.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:39:23.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:39:23.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:39:23.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:38:41', tmtdew=3.10999, humidity=80.7957, cloud=0.0, wind=12.1046, temperature=8.86304, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:39:10.973', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04824999999999946, -0.09174999999999933, -0.025249999999999773, -0.04800000000000004, -0.0235000000000003, 0.05525000000000091, 0.0, -0.032249999999999446, -0.01750000000000007, -0.10650000000000048, -0.03675000000000139, -0.10400000000000098, -0.0039999999999995595, 0.028249999999999886, 0.006999999999997897, -0.019000000000000128, 0.005250000000000199, -0.06349999999999945, -0.0070000000000014495, -0.035250000000001336, -0.03300000000000125, 0.020749999999999602, 0.012250000000001648, -0.04574999999999996, -0.02800000000000047, -0.041999999999999815, -0.00274999999999892, -0.010500000000000398, -0.03500000000000014, 0.057000000000000384, 0.004000000000001336, 0.008000000000000895, -0.04725000000000179], zp_timestamp='2026-04-15T22:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:39:23.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:39:23.520 [DEBUG] [Thread-28544] [transport.py] [_log()] starting thread (client mode): 0xee9063b0
2026-04-16T00:39:23.520 [DEBUG] [Thread-28544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:39:23.534 [DEBUG] [Thread-28544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:39:23.534 [INFO] [Thread-28544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:39:23.541 [DEBUG] [Thread-28544] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:39:23.541 [DEBUG] [Thread-28544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:39:23.541 [DEBUG] [Thread-28544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:39:23.541 [DEBUG] [Thread-28544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:39:23.541 [DEBUG] [Thread-28544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:39:23.541 [DEBUG] [Thread-28544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:39:23.542 [DEBUG] [Thread-28544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:39:23.542 [DEBUG] [Thread-28544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:39:23.542 [DEBUG] [Thread-28544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:39:23.542 [DEBUG] [Thread-28544] [transport.py] [_log()] client lang: <none>
2026-04-16T00:39:23.542 [DEBUG] [Thread-28544] [transport.py] [_log()] server lang: <none>
2026-04-16T00:39:23.542 [DEBUG] [Thread-28544] [transport.py] [_log()] kex follows: False
2026-04-16T00:39:23.542 [DEBUG] [Thread-28544] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:39:23.542 [DEBUG] [Thread-28544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:39:23.542 [DEBUG] [Thread-28544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:39:23.542 [DEBUG] [Thread-28544] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:39:23.542 [DEBUG] [Thread-28544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:39:23.542 [DEBUG] [Thread-28544] [transport.py] [_log()] Compression: none
2026-04-16T00:39:23.543 [DEBUG] [Thread-28544] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:39:23.601 [DEBUG] [Thread-28544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:39:23.601 [DEBUG] [Thread-28544] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:39:23.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:39:23.601 [DEBUG] [Thread-28544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:39:23.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:39:23.658 [DEBUG] [Thread-28544] [transport.py] [_log()] userauth is OK
2026-04-16T00:39:23.658 [DEBUG] [Thread-28544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:39:23.658 [DEBUG] [Thread-28544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:39:23.658 [DEBUG] [Thread-28544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:39:23.659 [DEBUG] [Thread-28544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:39:23.676 [INFO] [Thread-28544] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:39:23.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:39:23.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:39:24.507 [DEBUG] [Thread-28544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:39:24.507 [DEBUG] [Thread-28544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:39:24.554 [DEBUG] [Thread-28544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:39:24.555 [DEBUG] [Thread-28544] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:39:24.563 [DEBUG] [Thread-28544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:39:24.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:39:24.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')
2026-04-16T00:39:24.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
2026-04-16T00:39:24.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:39:24.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:39:24.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:39:24.595 [DEBUG] [Thread-28544] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:39:27.688 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:39:27.689 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:39:37.268 [DEBUG] [Thread-28546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:39:47.594 [DEBUG] [Thread-28547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:39:52.391 [DEBUG] [Thread-28548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:39:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:39:54.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:39:54.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
2026-04-16T00:39:55.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 39, 17), 3.33979, 79.4809, 0.0, 8.982, 8.96498, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:39:55.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:39:17
2026-04-16T00:39:56.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:39:56.795 [DEBUG] [Thread-28549] [transport.py] [_log()] starting thread (client mode): 0xf13ca6b0
2026-04-16T00:39:56.795 [DEBUG] [Thread-28549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:39:56.814 [DEBUG] [Thread-28549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:39:56.814 [INFO] [Thread-28549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:39:56.818 [DEBUG] [Thread-28549] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:39:56.818 [DEBUG] [Thread-28549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:39:56.818 [DEBUG] [Thread-28549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:39:56.818 [DEBUG] [Thread-28549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:39:56.818 [DEBUG] [Thread-28549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:39:56.818 [DEBUG] [Thread-28549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:39:56.818 [DEBUG] [Thread-28549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:39:56.819 [DEBUG] [Thread-28549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:39:56.819 [DEBUG] [Thread-28549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:39:56.819 [DEBUG] [Thread-28549] [transport.py] [_log()] client lang: <none>
2026-04-16T00:39:56.819 [DEBUG] [Thread-28549] [transport.py] [_log()] server lang: <none>
2026-04-16T00:39:56.819 [DEBUG] [Thread-28549] [transport.py] [_log()] kex follows: False
2026-04-16T00:39:56.819 [DEBUG] [Thread-28549] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:39:56.819 [DEBUG] [Thread-28549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:39:56.819 [DEBUG] [Thread-28549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:39:56.819 [DEBUG] [Thread-28549] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:39:56.819 [DEBUG] [Thread-28549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:39:56.819 [DEBUG] [Thread-28549] [transport.py] [_log()] Compression: none
2026-04-16T00:39:56.820 [DEBUG] [Thread-28549] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:39:56.831 [DEBUG] [Thread-28549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:39:56.831 [DEBUG] [Thread-28549] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:39:56.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:39:56.832 [DEBUG] [Thread-28549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:39:56.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:39:56.833 [DEBUG] [Thread-28549] [transport.py] [_log()] userauth is OK
2026-04-16T00:39:56.833 [DEBUG] [Thread-28549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:39:56.833 [DEBUG] [Thread-28549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:39:56.833 [DEBUG] [Thread-28549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:39:56.834 [DEBUG] [Thread-28549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:39:56.852 [INFO] [Thread-28549] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:39:56.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:39:57.432 [DEBUG] [Thread-28549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:39:57.433 [DEBUG] [Thread-28549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:39:57.433 [DEBUG] [Thread-28549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:39:57.473 [DEBUG] [Thread-28549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:39:57.473 [DEBUG] [Thread-28549] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:39:57.477 [DEBUG] [Thread-28549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:39:57.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:39:57.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:39:57.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:39:57.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:39:57.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:39:57.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:39:57.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:39:57.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:39:57.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:39:57.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.944225 -999.00   +9.50   5.87     82   +6.60 1 1 1 2 1     0    0 2.15 -21.70 ZNESW 7.8 5.9 112.5 11.2 9.7 -24.9 9.5 -23.8 9.1 -21.7 9.4 -23.6
2026-04-16T00:39:57.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:39:57.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:39:57.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.944225
2026-04-16T00:39:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:39:57.506 [DEBUG] [Thread-28549] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:39:57.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:39:57.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:39:57.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:39:57.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:39:57.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:39:17', tmtdew=3.33979, humidity=79.4809, cloud=0.0, wind=8.982, temperature=8.96498, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:39:41.040', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04824999999999946, -0.09174999999999933, -0.025249999999999773, -0.04800000000000004, -0.0235000000000003, 0.05525000000000091, 0.0, -0.032249999999999446, -0.01750000000000007, -0.10650000000000048, -0.03675000000000139, -0.10400000000000098, -0.0039999999999995595, 0.028249999999999886, 0.006999999999997897, -0.019000000000000128, 0.005250000000000199, -0.06349999999999945, -0.0070000000000014495, -0.035250000000001336, -0.03300000000000125, 0.020749999999999602, 0.012250000000001648, -0.04574999999999996, -0.02800000000000047, -0.041999999999999815, -0.00274999999999892, -0.010500000000000398, -0.03500000000000014, 0.057000000000000384, 0.004000000000001336, 0.008000000000000895, -0.04725000000000179], zp_timestamp='2026-04-15T22:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:39:57.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:39:57.764 [DEBUG] [Thread-28552] [transport.py] [_log()] starting thread (client mode): 0xf13c9030
2026-04-16T00:39:57.764 [DEBUG] [Thread-28552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:39:57.777 [DEBUG] [Thread-28552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:39:57.777 [INFO] [Thread-28552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:39:57.785 [DEBUG] [Thread-28552] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:39:57.785 [DEBUG] [Thread-28552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:39:57.785 [DEBUG] [Thread-28552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:39:57.785 [DEBUG] [Thread-28552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:39:57.785 [DEBUG] [Thread-28552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:39:57.785 [DEBUG] [Thread-28552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:39:57.785 [DEBUG] [Thread-28552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:39:57.785 [DEBUG] [Thread-28552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:39:57.786 [DEBUG] [Thread-28552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:39:57.786 [DEBUG] [Thread-28552] [transport.py] [_log()] client lang: <none>
2026-04-16T00:39:57.786 [DEBUG] [Thread-28552] [transport.py] [_log()] server lang: <none>
2026-04-16T00:39:57.786 [DEBUG] [Thread-28552] [transport.py] [_log()] kex follows: False
2026-04-16T00:39:57.786 [DEBUG] [Thread-28552] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:39:57.786 [DEBUG] [Thread-28552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:39:57.786 [DEBUG] [Thread-28552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:39:57.786 [DEBUG] [Thread-28552] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:39:57.786 [DEBUG] [Thread-28552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:39:57.786 [DEBUG] [Thread-28552] [transport.py] [_log()] Compression: none
2026-04-16T00:39:57.786 [DEBUG] [Thread-28552] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:39:57.844 [DEBUG] [Thread-28552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:39:57.845 [DEBUG] [Thread-28552] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:39:57.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:39:57.845 [DEBUG] [Thread-28552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:39:57.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:39:57.901 [DEBUG] [Thread-28552] [transport.py] [_log()] userauth is OK
2026-04-16T00:39:57.901 [DEBUG] [Thread-28552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:39:57.901 [DEBUG] [Thread-28552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:39:57.901 [DEBUG] [Thread-28552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:39:57.902 [DEBUG] [Thread-28552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:39:57.920 [INFO] [Thread-28552] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:39:57.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:39:57.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:39:58.754 [DEBUG] [Thread-28552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:39:58.755 [DEBUG] [Thread-28552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:39:58.802 [DEBUG] [Thread-28552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:39:58.803 [DEBUG] [Thread-28552] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:39:58.811 [DEBUG] [Thread-28552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:39:58.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:39:58.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')
2026-04-16T00:39:58.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') -> 00000000
2026-04-16T00:39:58.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:39:58.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:39:58.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:39:58.845 [DEBUG] [Thread-28552] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:40:07.425 [DEBUG] [Thread-28554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:40:22.464 [DEBUG] [Thread-28555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:40:27.892 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:40:27.893 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:40:28.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:40:28.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:40:28.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:40:30.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 39, 53), 3.05902, 81.0944, 0.0, 10.4112, 8.96268, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:40:30.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:39:53
2026-04-16T00:40:30.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:40:31.132 [DEBUG] [Thread-28556] [transport.py] [_log()] starting thread (client mode): 0xee933730
2026-04-16T00:40:31.133 [DEBUG] [Thread-28556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:40:31.151 [DEBUG] [Thread-28556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:40:31.151 [INFO] [Thread-28556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:40:31.154 [DEBUG] [Thread-28556] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:40:31.155 [DEBUG] [Thread-28556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:40:31.155 [DEBUG] [Thread-28556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:40:31.155 [DEBUG] [Thread-28556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:40:31.155 [DEBUG] [Thread-28556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:40:31.155 [DEBUG] [Thread-28556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:40:31.155 [DEBUG] [Thread-28556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:40:31.155 [DEBUG] [Thread-28556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:40:31.155 [DEBUG] [Thread-28556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:40:31.155 [DEBUG] [Thread-28556] [transport.py] [_log()] client lang: <none>
2026-04-16T00:40:31.155 [DEBUG] [Thread-28556] [transport.py] [_log()] server lang: <none>
2026-04-16T00:40:31.155 [DEBUG] [Thread-28556] [transport.py] [_log()] kex follows: False
2026-04-16T00:40:31.155 [DEBUG] [Thread-28556] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:40:31.156 [DEBUG] [Thread-28556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:40:31.156 [DEBUG] [Thread-28556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:40:31.156 [DEBUG] [Thread-28556] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:40:31.156 [DEBUG] [Thread-28556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:40:31.156 [DEBUG] [Thread-28556] [transport.py] [_log()] Compression: none
2026-04-16T00:40:31.156 [DEBUG] [Thread-28556] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:40:31.174 [DEBUG] [Thread-28556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:40:31.174 [DEBUG] [Thread-28556] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:40:31.174 [DEBUG] [Thread-28556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:40:31.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:40:31.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:40:31.176 [DEBUG] [Thread-28556] [transport.py] [_log()] userauth is OK
2026-04-16T00:40:31.176 [DEBUG] [Thread-28556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:40:31.176 [DEBUG] [Thread-28556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:40:31.176 [DEBUG] [Thread-28556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:40:31.176 [DEBUG] [Thread-28556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:40:31.203 [INFO] [Thread-28556] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:40:31.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:40:37.495 [DEBUG] [Thread-28558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:40:37.502 [DEBUG] [Thread-28556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:40:37.502 [DEBUG] [Thread-28556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:40:37.502 [DEBUG] [Thread-28556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:40:37.543 [DEBUG] [Thread-28556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:40:37.543 [DEBUG] [Thread-28556] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:40:37.546 [DEBUG] [Thread-28556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:40:37.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:40:37.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:40:37.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:40:37.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:40:37.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:40:37.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:40:37.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:40:37.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:40:37.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:40:37.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.944225 -999.00   +9.50   5.87     82   +6.60 1 1 1 2 1     0    0 2.15 -21.70 ZNESW 7.8 5.9 112.5 11.2 9.7 -24.9 9.5 -23.8 9.1 -21.7 9.4 -23.6
2026-04-16T00:40:37.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:40:37.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:40:37.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.944225
2026-04-16T00:40:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:40:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:40:37.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:40:37.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:40:37.574 [DEBUG] [Thread-28556] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:40:37.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:40:37.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:39:53', tmtdew=3.05902, humidity=81.0944, cloud=0.0, wind=10.4112, temperature=8.96268, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:39:41.040', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04824999999999946, -0.09174999999999933, -0.025249999999999773, -0.04800000000000004, -0.0235000000000003, 0.05525000000000091, 0.0, -0.032249999999999446, -0.01750000000000007, -0.10650000000000048, -0.03675000000000139, -0.10400000000000098, -0.0039999999999995595, 0.028249999999999886, 0.006999999999997897, -0.019000000000000128, 0.005250000000000199, -0.06349999999999945, -0.0070000000000014495, -0.035250000000001336, -0.03300000000000125, 0.020749999999999602, 0.012250000000001648, -0.04574999999999996, -0.02800000000000047, -0.041999999999999815, -0.00274999999999892, -0.010500000000000398, -0.03500000000000014, 0.057000000000000384, 0.004000000000001336, 0.008000000000000895, -0.04725000000000179], zp_timestamp='2026-04-15T22:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:40:37.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:40:37.831 [DEBUG] [Thread-28560] [transport.py] [_log()] starting thread (client mode): 0xee933130
2026-04-16T00:40:37.831 [DEBUG] [Thread-28560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:40:37.846 [DEBUG] [Thread-28560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:40:37.847 [INFO] [Thread-28560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:40:37.854 [DEBUG] [Thread-28560] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:40:37.854 [DEBUG] [Thread-28560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:40:37.854 [DEBUG] [Thread-28560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:40:37.854 [DEBUG] [Thread-28560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:40:37.854 [DEBUG] [Thread-28560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:40:37.854 [DEBUG] [Thread-28560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:40:37.855 [DEBUG] [Thread-28560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:40:37.855 [DEBUG] [Thread-28560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:40:37.855 [DEBUG] [Thread-28560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:40:37.855 [DEBUG] [Thread-28560] [transport.py] [_log()] client lang: <none>
2026-04-16T00:40:37.855 [DEBUG] [Thread-28560] [transport.py] [_log()] server lang: <none>
2026-04-16T00:40:37.855 [DEBUG] [Thread-28560] [transport.py] [_log()] kex follows: False
2026-04-16T00:40:37.855 [DEBUG] [Thread-28560] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:40:37.855 [DEBUG] [Thread-28560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:40:37.855 [DEBUG] [Thread-28560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:40:37.855 [DEBUG] [Thread-28560] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:40:37.855 [DEBUG] [Thread-28560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:40:37.855 [DEBUG] [Thread-28560] [transport.py] [_log()] Compression: none
2026-04-16T00:40:37.855 [DEBUG] [Thread-28560] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:40:37.915 [DEBUG] [Thread-28560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:40:37.915 [DEBUG] [Thread-28560] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:40:37.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:40:37.916 [DEBUG] [Thread-28560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:40:37.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:40:37.974 [DEBUG] [Thread-28560] [transport.py] [_log()] userauth is OK
2026-04-16T00:40:37.974 [DEBUG] [Thread-28560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:40:37.974 [DEBUG] [Thread-28560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:40:37.974 [DEBUG] [Thread-28560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:40:37.975 [DEBUG] [Thread-28560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:40:38.000 [INFO] [Thread-28560] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:40:38.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:40:38.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:40:38.837 [DEBUG] [Thread-28560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:40:38.838 [DEBUG] [Thread-28560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:40:38.886 [DEBUG] [Thread-28560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:40:38.886 [DEBUG] [Thread-28560] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:40:38.894 [DEBUG] [Thread-28560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:40:38.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:40:38.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')
2026-04-16T00:40:38.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
2026-04-16T00:40:38.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:40:38.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:40:38.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:40:38.927 [DEBUG] [Thread-28560] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:40:47.748 [DEBUG] [Thread-28562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:40:52.527 [DEBUG] [Thread-28563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:41:07.570 [DEBUG] [Thread-28564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:41:08.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:41:08.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:41:08.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
2026-04-16T00:41:10.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 40, 28), 3.38129, 79.5307, 0.0, 9.26424, 9.0316, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:41:10.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:40:28
2026-04-16T00:41:10.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:41:11.073 [DEBUG] [Thread-28565] [transport.py] [_log()] starting thread (client mode): 0xf1365990
2026-04-16T00:41:11.074 [DEBUG] [Thread-28565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:41:11.095 [DEBUG] [Thread-28565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:41:11.095 [INFO] [Thread-28565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:41:11.098 [DEBUG] [Thread-28565] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:41:11.098 [DEBUG] [Thread-28565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:41:11.098 [DEBUG] [Thread-28565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:41:11.098 [DEBUG] [Thread-28565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:41:11.098 [DEBUG] [Thread-28565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:41:11.098 [DEBUG] [Thread-28565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:41:11.098 [DEBUG] [Thread-28565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:41:11.099 [DEBUG] [Thread-28565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:41:11.099 [DEBUG] [Thread-28565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:41:11.099 [DEBUG] [Thread-28565] [transport.py] [_log()] client lang: <none>
2026-04-16T00:41:11.099 [DEBUG] [Thread-28565] [transport.py] [_log()] server lang: <none>
2026-04-16T00:41:11.099 [DEBUG] [Thread-28565] [transport.py] [_log()] kex follows: False
2026-04-16T00:41:11.099 [DEBUG] [Thread-28565] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:41:11.099 [DEBUG] [Thread-28565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:41:11.099 [DEBUG] [Thread-28565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:41:11.099 [DEBUG] [Thread-28565] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:41:11.099 [DEBUG] [Thread-28565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:41:11.099 [DEBUG] [Thread-28565] [transport.py] [_log()] Compression: none
2026-04-16T00:41:11.099 [DEBUG] [Thread-28565] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:41:11.116 [DEBUG] [Thread-28565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:41:11.117 [DEBUG] [Thread-28565] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:41:11.117 [DEBUG] [Thread-28565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:41:11.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:41:11.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:41:11.119 [DEBUG] [Thread-28565] [transport.py] [_log()] userauth is OK
2026-04-16T00:41:11.119 [DEBUG] [Thread-28565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:41:11.119 [DEBUG] [Thread-28565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:41:11.119 [DEBUG] [Thread-28565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:41:11.119 [DEBUG] [Thread-28565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:41:11.136 [INFO] [Thread-28565] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:41:11.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:41:11.942 [DEBUG] [Thread-28565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:41:11.943 [DEBUG] [Thread-28565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:41:11.943 [DEBUG] [Thread-28565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:41:11.983 [DEBUG] [Thread-28565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:41:11.983 [DEBUG] [Thread-28565] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:41:11.985 [DEBUG] [Thread-28565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:41:11.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:41:11.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:41:11.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:41:11.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:41:12.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:41:12.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:41:12.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:41:12.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:41:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:41:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.944572 -999.00   +9.50   6.77     82   +6.60 1 1 1 2 1     0    0 2.15 -21.37 ZNESW 7.8 6.8 116.2 10.5 9.6 -24.8 9.4 -23.7 9.2 -21.6 9.4 -23.4
2026-04-16T00:41:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:41:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:41:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.944572
2026-04-16T00:41:12.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:41:12.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:41:12.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:41:12.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:41:12.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:41:12.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:40:28', tmtdew=3.38129, humidity=79.5307, cloud=0.0, wind=9.26424, temperature=9.0316, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:40:11.021', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04824999999999946, -0.09174999999999933, -0.025249999999999773, -0.04800000000000004, -0.0235000000000003, 0.05525000000000091, 0.0, -0.032249999999999446, -0.01750000000000007, -0.10650000000000048, -0.03675000000000139, -0.10400000000000098, -0.0039999999999995595, 0.028249999999999886, 0.006999999999997897, -0.019000000000000128, 0.005250000000000199, -0.06349999999999945, -0.0070000000000014495, -0.035250000000001336, -0.03300000000000125, 0.020749999999999602, 0.012250000000001648, -0.04574999999999996, -0.02800000000000047, -0.041999999999999815, -0.00274999999999892, -0.010500000000000398, -0.03500000000000014, 0.057000000000000384, 0.004000000000001336, 0.008000000000000895, -0.04725000000000179], zp_timestamp='2026-04-15T22:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:41:12.003 [DEBUG] [Thread-28565] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:41:12.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:41:12.212 [DEBUG] [Thread-28568] [transport.py] [_log()] starting thread (client mode): 0xf1367c10
2026-04-16T00:41:12.212 [DEBUG] [Thread-28568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:41:12.227 [DEBUG] [Thread-28568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:41:12.227 [INFO] [Thread-28568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:41:12.234 [DEBUG] [Thread-28568] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:41:12.234 [DEBUG] [Thread-28568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:41:12.234 [DEBUG] [Thread-28568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:41:12.234 [DEBUG] [Thread-28568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:41:12.234 [DEBUG] [Thread-28568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:41:12.235 [DEBUG] [Thread-28568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:41:12.235 [DEBUG] [Thread-28568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:41:12.235 [DEBUG] [Thread-28568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:41:12.235 [DEBUG] [Thread-28568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:41:12.235 [DEBUG] [Thread-28568] [transport.py] [_log()] client lang: <none>
2026-04-16T00:41:12.235 [DEBUG] [Thread-28568] [transport.py] [_log()] server lang: <none>
2026-04-16T00:41:12.235 [DEBUG] [Thread-28568] [transport.py] [_log()] kex follows: False
2026-04-16T00:41:12.235 [DEBUG] [Thread-28568] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:41:12.235 [DEBUG] [Thread-28568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:41:12.235 [DEBUG] [Thread-28568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:41:12.235 [DEBUG] [Thread-28568] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:41:12.236 [DEBUG] [Thread-28568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:41:12.236 [DEBUG] [Thread-28568] [transport.py] [_log()] Compression: none
2026-04-16T00:41:12.236 [DEBUG] [Thread-28568] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:41:12.294 [DEBUG] [Thread-28568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:41:12.294 [DEBUG] [Thread-28568] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:41:12.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:41:12.295 [DEBUG] [Thread-28568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:41:12.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:41:12.350 [DEBUG] [Thread-28568] [transport.py] [_log()] userauth is OK
2026-04-16T00:41:12.350 [DEBUG] [Thread-28568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:41:12.351 [DEBUG] [Thread-28568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:41:12.351 [DEBUG] [Thread-28568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:41:12.351 [DEBUG] [Thread-28568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:41:12.376 [INFO] [Thread-28568] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:41:12.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:41:12.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:41:13.174 [DEBUG] [Thread-28568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:41:13.175 [DEBUG] [Thread-28568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:41:13.223 [DEBUG] [Thread-28568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:41:13.223 [DEBUG] [Thread-28568] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:41:13.232 [DEBUG] [Thread-28568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:41:13.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:41:13.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')
2026-04-16T00:41:13.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
2026-04-16T00:41:13.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:41:13.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:41:13.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:41:13.267 [DEBUG] [Thread-28568] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:41:22.598 [DEBUG] [Thread-28570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:41:28.096 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:41:28.097 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:41:37.642 [DEBUG] [Thread-28571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:41:43.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:41:43.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:41:43.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
2026-04-16T00:41:44.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 41, 4), 3.36768, 79.6136, 0.0, 9.84636, 9.08138, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:41:44.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:41:04
2026-04-16T00:41:44.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:41:45.398 [DEBUG] [Thread-28572] [transport.py] [_log()] starting thread (client mode): 0xf13e0130
2026-04-16T00:41:45.398 [DEBUG] [Thread-28572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:41:45.418 [DEBUG] [Thread-28572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:41:45.418 [INFO] [Thread-28572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:41:45.422 [DEBUG] [Thread-28572] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:41:45.422 [DEBUG] [Thread-28572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:41:45.422 [DEBUG] [Thread-28572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:41:45.422 [DEBUG] [Thread-28572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:41:45.422 [DEBUG] [Thread-28572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:41:45.422 [DEBUG] [Thread-28572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:41:45.422 [DEBUG] [Thread-28572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:41:45.423 [DEBUG] [Thread-28572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:41:45.423 [DEBUG] [Thread-28572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:41:45.423 [DEBUG] [Thread-28572] [transport.py] [_log()] client lang: <none>
2026-04-16T00:41:45.423 [DEBUG] [Thread-28572] [transport.py] [_log()] server lang: <none>
2026-04-16T00:41:45.423 [DEBUG] [Thread-28572] [transport.py] [_log()] kex follows: False
2026-04-16T00:41:45.423 [DEBUG] [Thread-28572] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:41:45.423 [DEBUG] [Thread-28572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:41:45.423 [DEBUG] [Thread-28572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:41:45.423 [DEBUG] [Thread-28572] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:41:45.423 [DEBUG] [Thread-28572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:41:45.424 [DEBUG] [Thread-28572] [transport.py] [_log()] Compression: none
2026-04-16T00:41:45.424 [DEBUG] [Thread-28572] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:41:45.443 [DEBUG] [Thread-28572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:41:45.443 [DEBUG] [Thread-28572] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:41:45.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:41:45.444 [DEBUG] [Thread-28572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:41:45.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:41:45.445 [DEBUG] [Thread-28572] [transport.py] [_log()] userauth is OK
2026-04-16T00:41:45.445 [DEBUG] [Thread-28572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:41:45.445 [DEBUG] [Thread-28572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:41:45.446 [DEBUG] [Thread-28572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:41:45.446 [DEBUG] [Thread-28572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:41:45.468 [INFO] [Thread-28572] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:41:45.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:41:46.271 [DEBUG] [Thread-28572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:41:46.271 [DEBUG] [Thread-28572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:41:46.271 [DEBUG] [Thread-28572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:41:46.313 [DEBUG] [Thread-28572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:41:46.313 [DEBUG] [Thread-28572] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:41:46.315 [DEBUG] [Thread-28572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:41:46.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:41:46.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:41:46.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:41:46.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:41:46.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:41:46.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:41:46.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:41:46.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:41:46.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:41:46.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.945267 -999.00   +9.50   4.40     82   +6.70 1 1 1 2 1     0    0 2.25 -19.70 ZNESW 6.4 4.4 100.1 10.2 9.7 -24.8 9.5 -23.6 9.1 -21.5 9.4 -23.6
2026-04-16T00:41:46.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:41:46.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:41:46.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.945267
2026-04-16T00:41:46.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:41:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:41:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:41:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:41:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:41:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:41:04', tmtdew=3.36768, humidity=79.6136, cloud=0.0, wind=9.84636, temperature=9.08138, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:41:11.069', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04824999999999946, -0.09174999999999933, -0.025249999999999773, -0.04800000000000004, -0.0235000000000003, 0.05525000000000091, 0.0, -0.032249999999999446, -0.01750000000000007, -0.10650000000000048, -0.03675000000000139, -0.10400000000000098, -0.0039999999999995595, 0.028249999999999886, 0.006999999999997897, -0.019000000000000128, 0.005250000000000199, -0.06349999999999945, -0.0070000000000014495, -0.035250000000001336, -0.03300000000000125, 0.020749999999999602, 0.012250000000001648, -0.04574999999999996, -0.02800000000000047, -0.041999999999999815, -0.00274999999999892, -0.010500000000000398, -0.03500000000000014, 0.057000000000000384, 0.004000000000001336, 0.008000000000000895, -0.04725000000000179], zp_timestamp='2026-04-15T22:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:41:46.329 [DEBUG] [Thread-28572] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:41:46.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:41:46.562 [DEBUG] [Thread-28575] [transport.py] [_log()] starting thread (client mode): 0xf1365fc0
2026-04-16T00:41:46.563 [DEBUG] [Thread-28575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:41:46.577 [DEBUG] [Thread-28575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:41:46.578 [INFO] [Thread-28575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:41:46.585 [DEBUG] [Thread-28575] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:41:46.585 [DEBUG] [Thread-28575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:41:46.585 [DEBUG] [Thread-28575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:41:46.585 [DEBUG] [Thread-28575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:41:46.585 [DEBUG] [Thread-28575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:41:46.585 [DEBUG] [Thread-28575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:41:46.585 [DEBUG] [Thread-28575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:41:46.585 [DEBUG] [Thread-28575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:41:46.586 [DEBUG] [Thread-28575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:41:46.586 [DEBUG] [Thread-28575] [transport.py] [_log()] client lang: <none>
2026-04-16T00:41:46.586 [DEBUG] [Thread-28575] [transport.py] [_log()] server lang: <none>
2026-04-16T00:41:46.586 [DEBUG] [Thread-28575] [transport.py] [_log()] kex follows: False
2026-04-16T00:41:46.586 [DEBUG] [Thread-28575] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:41:46.586 [DEBUG] [Thread-28575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:41:46.586 [DEBUG] [Thread-28575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:41:46.586 [DEBUG] [Thread-28575] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:41:46.586 [DEBUG] [Thread-28575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:41:46.586 [DEBUG] [Thread-28575] [transport.py] [_log()] Compression: none
2026-04-16T00:41:46.586 [DEBUG] [Thread-28575] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:41:46.645 [DEBUG] [Thread-28575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:41:46.645 [DEBUG] [Thread-28575] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:41:46.646 [DEBUG] [Thread-28575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:41:46.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:41:46.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:41:46.702 [DEBUG] [Thread-28575] [transport.py] [_log()] userauth is OK
2026-04-16T00:41:46.703 [DEBUG] [Thread-28575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:41:46.703 [DEBUG] [Thread-28575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:41:46.703 [DEBUG] [Thread-28575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:41:46.703 [DEBUG] [Thread-28575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:41:46.729 [INFO] [Thread-28575] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:41:46.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:41:46.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:41:47.633 [DEBUG] [Thread-28575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:41:47.633 [DEBUG] [Thread-28575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:41:47.681 [DEBUG] [Thread-28575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:41:47.681 [DEBUG] [Thread-28575] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:41:47.690 [DEBUG] [Thread-28575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:41:47.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:41:47.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')
2026-04-16T00:41:47.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
2026-04-16T00:41:47.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:41:47.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:41:47.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:41:47.725 [DEBUG] [Thread-28575] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:41:47.911 [DEBUG] [Thread-28577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:41:52.669 [DEBUG] [Thread-28578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:42:07.712 [DEBUG] [Thread-28579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:42:17.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:42:17.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:42:17.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:42:19.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 41, 40), 3.03468, 81.2267, 0.0, 13.0572, 8.92915, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:42:19.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:41:40
2026-04-16T00:42:19.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:42:20.453 [DEBUG] [Thread-28580] [transport.py] [_log()] starting thread (client mode): 0xee905120
2026-04-16T00:42:20.454 [DEBUG] [Thread-28580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:42:20.466 [DEBUG] [Thread-28580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:42:20.467 [INFO] [Thread-28580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:42:20.470 [DEBUG] [Thread-28580] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:42:20.470 [DEBUG] [Thread-28580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:42:20.470 [DEBUG] [Thread-28580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:42:20.470 [DEBUG] [Thread-28580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:42:20.470 [DEBUG] [Thread-28580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:42:20.470 [DEBUG] [Thread-28580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:42:20.470 [DEBUG] [Thread-28580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:42:20.470 [DEBUG] [Thread-28580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:42:20.470 [DEBUG] [Thread-28580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:42:20.470 [DEBUG] [Thread-28580] [transport.py] [_log()] client lang: <none>
2026-04-16T00:42:20.470 [DEBUG] [Thread-28580] [transport.py] [_log()] server lang: <none>
2026-04-16T00:42:20.471 [DEBUG] [Thread-28580] [transport.py] [_log()] kex follows: False
2026-04-16T00:42:20.471 [DEBUG] [Thread-28580] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:42:20.471 [DEBUG] [Thread-28580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:42:20.471 [DEBUG] [Thread-28580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:42:20.471 [DEBUG] [Thread-28580] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:42:20.471 [DEBUG] [Thread-28580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:42:20.471 [DEBUG] [Thread-28580] [transport.py] [_log()] Compression: none
2026-04-16T00:42:20.471 [DEBUG] [Thread-28580] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:42:20.488 [DEBUG] [Thread-28580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:42:20.488 [DEBUG] [Thread-28580] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:42:20.489 [DEBUG] [Thread-28580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:42:20.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:42:20.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:42:20.490 [DEBUG] [Thread-28580] [transport.py] [_log()] userauth is OK
2026-04-16T00:42:20.490 [DEBUG] [Thread-28580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:42:20.490 [DEBUG] [Thread-28580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:42:20.490 [DEBUG] [Thread-28580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:42:20.490 [DEBUG] [Thread-28580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:42:20.514 [INFO] [Thread-28580] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:42:20.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:42:21.312 [DEBUG] [Thread-28580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:42:21.312 [DEBUG] [Thread-28580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:42:21.313 [DEBUG] [Thread-28580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:42:21.353 [DEBUG] [Thread-28580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:42:21.353 [DEBUG] [Thread-28580] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:42:21.356 [DEBUG] [Thread-28580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:42:21.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:42:21.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:42:21.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:42:21.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:42:21.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:42:21.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:42:21.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:42:21.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:42:21.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:42:21.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.945619 -999.00   +9.50   8.94     82   +6.70 1 1 1 2 1     0    0 2.27 -18.43 ZNESW 5.8 8.9 129.2 11.1 9.7 -24.8 9.5 -23.5 9.2 -21.6 9.5 -23.4
2026-04-16T00:42:21.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:42:21.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:42:21.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.945619
2026-04-16T00:42:21.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:42:21.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:42:21.471 [DEBUG] [Thread-28580] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:42:21.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:42:21.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:42:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:42:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:41:40', tmtdew=3.03468, humidity=81.2267, cloud=0.0, wind=13.0572, temperature=8.92915, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:41:41.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04824999999999946, -0.09174999999999933, -0.025249999999999773, -0.04800000000000004, -0.0235000000000003, 0.05525000000000091, 0.0, -0.032249999999999446, -0.01750000000000007, -0.10650000000000048, -0.03675000000000139, -0.10400000000000098, -0.0039999999999995595, 0.028249999999999886, 0.006999999999997897, -0.019000000000000128, 0.005250000000000199, -0.06349999999999945, -0.0070000000000014495, -0.035250000000001336, -0.03300000000000125, 0.020749999999999602, 0.012250000000001648, -0.04574999999999996, -0.02800000000000047, -0.041999999999999815, -0.00274999999999892, -0.010500000000000398, -0.03500000000000014, 0.057000000000000384, 0.004000000000001336, 0.008000000000000895, -0.04725000000000179], zp_timestamp='2026-04-15T22:38:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:42:21.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:42:21.723 [DEBUG] [Thread-28583] [transport.py] [_log()] starting thread (client mode): 0xf13cb6d0
2026-04-16T00:42:21.724 [DEBUG] [Thread-28583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:42:21.738 [DEBUG] [Thread-28583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:42:21.738 [INFO] [Thread-28583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:42:21.745 [DEBUG] [Thread-28583] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:42:21.745 [DEBUG] [Thread-28583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:42:21.745 [DEBUG] [Thread-28583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:42:21.745 [DEBUG] [Thread-28583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:42:21.745 [DEBUG] [Thread-28583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:42:21.745 [DEBUG] [Thread-28583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:42:21.746 [DEBUG] [Thread-28583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:42:21.746 [DEBUG] [Thread-28583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:42:21.746 [DEBUG] [Thread-28583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:42:21.746 [DEBUG] [Thread-28583] [transport.py] [_log()] client lang: <none>
2026-04-16T00:42:21.746 [DEBUG] [Thread-28583] [transport.py] [_log()] server lang: <none>
2026-04-16T00:42:21.746 [DEBUG] [Thread-28583] [transport.py] [_log()] kex follows: False
2026-04-16T00:42:21.746 [DEBUG] [Thread-28583] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:42:21.746 [DEBUG] [Thread-28583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:42:21.746 [DEBUG] [Thread-28583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:42:21.746 [DEBUG] [Thread-28583] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:42:21.746 [DEBUG] [Thread-28583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:42:21.746 [DEBUG] [Thread-28583] [transport.py] [_log()] Compression: none
2026-04-16T00:42:21.747 [DEBUG] [Thread-28583] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:42:21.806 [DEBUG] [Thread-28583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:42:21.806 [DEBUG] [Thread-28583] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:42:21.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:42:21.807 [DEBUG] [Thread-28583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:42:21.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:42:21.863 [DEBUG] [Thread-28583] [transport.py] [_log()] userauth is OK
2026-04-16T00:42:21.863 [DEBUG] [Thread-28583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:42:21.863 [DEBUG] [Thread-28583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:42:21.863 [DEBUG] [Thread-28583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:42:21.864 [DEBUG] [Thread-28583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:42:21.891 [INFO] [Thread-28583] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:42:21.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:42:21.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:42:22.714 [DEBUG] [Thread-28583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:42:22.714 [DEBUG] [Thread-28583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:42:22.744 [DEBUG] [Thread-28585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:42:22.761 [DEBUG] [Thread-28583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:42:22.761 [DEBUG] [Thread-28583] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:42:22.769 [DEBUG] [Thread-28583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:42:22.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:42:22.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')
2026-04-16T00:42:22.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
2026-04-16T00:42:22.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:42:22.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:42:22.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:42:22.804 [DEBUG] [Thread-28583] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:42:28.304 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:42:28.305 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:42:37.788 [DEBUG] [Thread-28586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:42:48.067 [DEBUG] [Thread-28587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:42:52.820 [DEBUG] [Thread-28588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:42:52.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:42:52.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:42:52.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
2026-04-16T00:42:54.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 42, 15), 3.30849, 79.6631, 0.0, 10.4814, 9.06458, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:42:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:42:15
2026-04-16T00:42:54.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:42:55.012 [DEBUG] [Thread-28589] [transport.py] [_log()] starting thread (client mode): 0xee9c6fe0
2026-04-16T00:42:55.012 [DEBUG] [Thread-28589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:42:55.032 [DEBUG] [Thread-28589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:42:55.032 [INFO] [Thread-28589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:42:55.035 [DEBUG] [Thread-28589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:42:55.035 [DEBUG] [Thread-28589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:42:55.035 [DEBUG] [Thread-28589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:42:55.035 [DEBUG] [Thread-28589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:42:55.036 [DEBUG] [Thread-28589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:42:55.036 [DEBUG] [Thread-28589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:42:55.036 [DEBUG] [Thread-28589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:42:55.036 [DEBUG] [Thread-28589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:42:55.036 [DEBUG] [Thread-28589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:42:55.036 [DEBUG] [Thread-28589] [transport.py] [_log()] client lang: <none>
2026-04-16T00:42:55.036 [DEBUG] [Thread-28589] [transport.py] [_log()] server lang: <none>
2026-04-16T00:42:55.036 [DEBUG] [Thread-28589] [transport.py] [_log()] kex follows: False
2026-04-16T00:42:55.036 [DEBUG] [Thread-28589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:42:55.036 [DEBUG] [Thread-28589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:42:55.036 [DEBUG] [Thread-28589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:42:55.036 [DEBUG] [Thread-28589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:42:55.036 [DEBUG] [Thread-28589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:42:55.036 [DEBUG] [Thread-28589] [transport.py] [_log()] Compression: none
2026-04-16T00:42:55.036 [DEBUG] [Thread-28589] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:42:55.052 [DEBUG] [Thread-28589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:42:55.052 [DEBUG] [Thread-28589] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:42:55.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:42:55.053 [DEBUG] [Thread-28589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:42:55.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:42:55.054 [DEBUG] [Thread-28589] [transport.py] [_log()] userauth is OK
2026-04-16T00:42:55.054 [DEBUG] [Thread-28589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:42:55.054 [DEBUG] [Thread-28589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:42:55.054 [DEBUG] [Thread-28589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:42:55.054 [DEBUG] [Thread-28589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:42:55.072 [INFO] [Thread-28589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:42:55.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:42:55.874 [DEBUG] [Thread-28589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:42:55.875 [DEBUG] [Thread-28589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:42:55.875 [DEBUG] [Thread-28589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:42:55.916 [DEBUG] [Thread-28589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:42:55.916 [DEBUG] [Thread-28589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:42:55.919 [DEBUG] [Thread-28589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:42:55.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:42:55.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:42:55.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:42:55.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:42:55.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:42:55.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:42:55.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:42:55.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:42:55.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:42:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.945966 -999.00   +9.50   7.02     82   +6.70 1 1 1 2 1     0    0 2.30 -17.25 ZNESW 9.2 7.0 124.0 10.2 9.7 -24.8 9.5 -23.7 9.1 -21.5 9.5 -23.7
2026-04-16T00:42:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:42:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:42:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.945966
2026-04-16T00:42:55.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:42:55.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:42:55.946 [DEBUG] [Thread-28589] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:42:55.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:42:55.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:42:55.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:42:55.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:42:15', tmtdew=3.30849, humidity=79.6631, cloud=0.0, wind=10.4814, temperature=9.06458, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:42:11.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.11224999999999952, -0.047250000000000014, -0.016500000000000625, -0.01750000000000007, -0.01974999999999838, 0.0030000000000001137, -0.029749999999999943, -0.046499999999999986, -0.09600000000000009, -0.0027500000000006963, -0.09299999999999997, 0.0009999999999994458, -0.026750000000001606, -0.02200000000000024, -0.026500000000000412, 0.008250000000000313, -0.05050000000000132, -0.0024999999999995026, -0.03775000000000084, -0.01600000000000179, 0.029249999999997556, 0.017250000000000654, -0.03524999999999956, -0.02800000000000047, 0.002000000000000668, -0.01624999999999943, -0.029500000000000526, -0.021999999999998465, 0.036000000000001364, 0.021000000000000796, -0.0259999999999998, -0.06825000000000081], zp_timestamp='2026-04-15T22:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:42:56.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:42:56.201 [DEBUG] [Thread-28592] [transport.py] [_log()] starting thread (client mode): 0xee9c7e80
2026-04-16T00:42:56.201 [DEBUG] [Thread-28592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:42:56.215 [DEBUG] [Thread-28592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:42:56.215 [INFO] [Thread-28592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:42:56.223 [DEBUG] [Thread-28592] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:42:56.223 [DEBUG] [Thread-28592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:42:56.223 [DEBUG] [Thread-28592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:42:56.223 [DEBUG] [Thread-28592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:42:56.223 [DEBUG] [Thread-28592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:42:56.223 [DEBUG] [Thread-28592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:42:56.223 [DEBUG] [Thread-28592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:42:56.223 [DEBUG] [Thread-28592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:42:56.224 [DEBUG] [Thread-28592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:42:56.224 [DEBUG] [Thread-28592] [transport.py] [_log()] client lang: <none>
2026-04-16T00:42:56.224 [DEBUG] [Thread-28592] [transport.py] [_log()] server lang: <none>
2026-04-16T00:42:56.224 [DEBUG] [Thread-28592] [transport.py] [_log()] kex follows: False
2026-04-16T00:42:56.224 [DEBUG] [Thread-28592] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:42:56.224 [DEBUG] [Thread-28592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:42:56.224 [DEBUG] [Thread-28592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:42:56.224 [DEBUG] [Thread-28592] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:42:56.224 [DEBUG] [Thread-28592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:42:56.224 [DEBUG] [Thread-28592] [transport.py] [_log()] Compression: none
2026-04-16T00:42:56.225 [DEBUG] [Thread-28592] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:42:56.278 [DEBUG] [Thread-28592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:42:56.279 [DEBUG] [Thread-28592] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:42:56.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:42:56.279 [DEBUG] [Thread-28592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:42:56.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:42:56.335 [DEBUG] [Thread-28592] [transport.py] [_log()] userauth is OK
2026-04-16T00:42:56.335 [DEBUG] [Thread-28592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:42:56.335 [DEBUG] [Thread-28592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:42:56.335 [DEBUG] [Thread-28592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:42:56.335 [DEBUG] [Thread-28592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:42:56.357 [INFO] [Thread-28592] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:42:56.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:42:56.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:42:57.171 [DEBUG] [Thread-28592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:42:57.172 [DEBUG] [Thread-28592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:42:57.220 [DEBUG] [Thread-28592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:42:57.220 [DEBUG] [Thread-28592] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:42:57.229 [DEBUG] [Thread-28592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:42:57.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:42:57.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')
2026-04-16T00:42:57.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
2026-04-16T00:42:57.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:42:57.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:42:57.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:42:57.262 [DEBUG] [Thread-28592] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:43:07.851 [DEBUG] [Thread-28594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:43:22.898 [DEBUG] [Thread-28595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:43:27.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:43:27.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:43:27.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
2026-04-16T00:43:28.507 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:43:28.508 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:43:28.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 42, 51), 2.97058, 81.5919, 0.0, 10.9404, 8.96248, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:43:28.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:42:51
2026-04-16T00:43:29.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:43:29.467 [DEBUG] [Thread-28596] [transport.py] [_log()] starting thread (client mode): 0xee9338e0
2026-04-16T00:43:29.467 [DEBUG] [Thread-28596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:43:29.487 [DEBUG] [Thread-28596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:43:29.487 [INFO] [Thread-28596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:43:29.491 [DEBUG] [Thread-28596] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:43:29.491 [DEBUG] [Thread-28596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:43:29.491 [DEBUG] [Thread-28596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:43:29.491 [DEBUG] [Thread-28596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:43:29.491 [DEBUG] [Thread-28596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:43:29.491 [DEBUG] [Thread-28596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:43:29.491 [DEBUG] [Thread-28596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:43:29.491 [DEBUG] [Thread-28596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:43:29.491 [DEBUG] [Thread-28596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:43:29.491 [DEBUG] [Thread-28596] [transport.py] [_log()] client lang: <none>
2026-04-16T00:43:29.492 [DEBUG] [Thread-28596] [transport.py] [_log()] server lang: <none>
2026-04-16T00:43:29.492 [DEBUG] [Thread-28596] [transport.py] [_log()] kex follows: False
2026-04-16T00:43:29.492 [DEBUG] [Thread-28596] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:43:29.492 [DEBUG] [Thread-28596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:43:29.492 [DEBUG] [Thread-28596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:43:29.492 [DEBUG] [Thread-28596] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:43:29.492 [DEBUG] [Thread-28596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:43:29.492 [DEBUG] [Thread-28596] [transport.py] [_log()] Compression: none
2026-04-16T00:43:29.492 [DEBUG] [Thread-28596] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:43:29.512 [DEBUG] [Thread-28596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:43:29.512 [DEBUG] [Thread-28596] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:43:29.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:43:29.513 [DEBUG] [Thread-28596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:43:29.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:43:29.556 [DEBUG] [Thread-28596] [transport.py] [_log()] userauth is OK
2026-04-16T00:43:29.557 [DEBUG] [Thread-28596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:43:29.557 [DEBUG] [Thread-28596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:43:29.557 [DEBUG] [Thread-28596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:43:29.557 [DEBUG] [Thread-28596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:43:29.582 [INFO] [Thread-28596] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:43:29.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:43:30.362 [DEBUG] [Thread-28596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:43:30.362 [DEBUG] [Thread-28596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:43:30.362 [DEBUG] [Thread-28596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:43:30.403 [DEBUG] [Thread-28596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:43:30.403 [DEBUG] [Thread-28596] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:43:30.406 [DEBUG] [Thread-28596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:43:30.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:43:30.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:43:30.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:43:30.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:43:30.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:43:30.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:43:30.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:43:30.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:43:30.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:43:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.946314 -999.00   +9.50   8.11     82   +6.60 1 1 1 2 1     0    0 2.28 -18.01 ZNESW 9.8 8.1 114.8 12.3 9.7 -24.8 9.5 -23.6 9.2 -21.6 9.5 -23.6
2026-04-16T00:43:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:43:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:43:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.946314
2026-04-16T00:43:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:43:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:43:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:43:30.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:43:30.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:43:30.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:42:51', tmtdew=2.97058, humidity=81.5919, cloud=0.0, wind=10.9404, temperature=8.96248, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:42:41.530', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.11224999999999952, -0.047250000000000014, -0.016500000000000625, -0.01750000000000007, -0.01974999999999838, 0.0030000000000001137, -0.029749999999999943, -0.046499999999999986, -0.09600000000000009, -0.0027500000000006963, -0.09299999999999997, 0.0009999999999994458, -0.026750000000001606, -0.02200000000000024, -0.026500000000000412, 0.008250000000000313, -0.05050000000000132, -0.0024999999999995026, -0.03775000000000084, -0.01600000000000179, 0.029249999999997556, 0.017250000000000654, -0.03524999999999956, -0.02800000000000047, 0.002000000000000668, -0.01624999999999943, -0.029500000000000526, -0.021999999999998465, 0.036000000000001364, 0.021000000000000796, -0.0259999999999998, -0.06825000000000081], zp_timestamp='2026-04-15T22:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:43:30.430 [DEBUG] [Thread-28596] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:43:30.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:43:30.677 [DEBUG] [Thread-28599] [transport.py] [_log()] starting thread (client mode): 0xee9c1d50
2026-04-16T00:43:30.677 [DEBUG] [Thread-28599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:43:30.692 [DEBUG] [Thread-28599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:43:30.692 [INFO] [Thread-28599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:43:30.699 [DEBUG] [Thread-28599] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:43:30.699 [DEBUG] [Thread-28599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:43:30.700 [DEBUG] [Thread-28599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:43:30.700 [DEBUG] [Thread-28599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:43:30.700 [DEBUG] [Thread-28599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:43:30.700 [DEBUG] [Thread-28599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:43:30.700 [DEBUG] [Thread-28599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:43:30.700 [DEBUG] [Thread-28599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:43:30.700 [DEBUG] [Thread-28599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:43:30.700 [DEBUG] [Thread-28599] [transport.py] [_log()] client lang: <none>
2026-04-16T00:43:30.700 [DEBUG] [Thread-28599] [transport.py] [_log()] server lang: <none>
2026-04-16T00:43:30.700 [DEBUG] [Thread-28599] [transport.py] [_log()] kex follows: False
2026-04-16T00:43:30.700 [DEBUG] [Thread-28599] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:43:30.701 [DEBUG] [Thread-28599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:43:30.701 [DEBUG] [Thread-28599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:43:30.701 [DEBUG] [Thread-28599] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:43:30.701 [DEBUG] [Thread-28599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:43:30.701 [DEBUG] [Thread-28599] [transport.py] [_log()] Compression: none
2026-04-16T00:43:30.701 [DEBUG] [Thread-28599] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:43:30.755 [DEBUG] [Thread-28599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:43:30.755 [DEBUG] [Thread-28599] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:43:30.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:43:30.756 [DEBUG] [Thread-28599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:43:30.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:43:30.812 [DEBUG] [Thread-28599] [transport.py] [_log()] userauth is OK
2026-04-16T00:43:30.812 [DEBUG] [Thread-28599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:43:30.812 [DEBUG] [Thread-28599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:43:30.812 [DEBUG] [Thread-28599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:43:30.812 [DEBUG] [Thread-28599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:43:30.838 [INFO] [Thread-28599] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:43:30.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:43:30.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:43:31.679 [DEBUG] [Thread-28599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:43:31.680 [DEBUG] [Thread-28599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:43:31.727 [DEBUG] [Thread-28599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:43:31.727 [DEBUG] [Thread-28599] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:43:31.736 [DEBUG] [Thread-28599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:43:31.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:43:31.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')
2026-04-16T00:43:31.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
2026-04-16T00:43:31.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:43:31.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:43:31.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:43:31.771 [DEBUG] [Thread-28599] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:43:37.930 [DEBUG] [Thread-28601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:43:48.216 [DEBUG] [Thread-28602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:43:52.976 [DEBUG] [Thread-28603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:44:01.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:44:01.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:44:01.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
2026-04-16T00:44:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 43, 26), 3.27315, 79.8623, 0.0, 9.9522, 9.06464, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:44:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:43:26
2026-04-16T00:44:03.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:44:04.017 [DEBUG] [Thread-28604] [transport.py] [_log()] starting thread (client mode): 0xee9541f0
2026-04-16T00:44:04.018 [DEBUG] [Thread-28604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:44:04.036 [DEBUG] [Thread-28604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:44:04.037 [INFO] [Thread-28604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:44:04.040 [DEBUG] [Thread-28604] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:44:04.040 [DEBUG] [Thread-28604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:44:04.040 [DEBUG] [Thread-28604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:44:04.040 [DEBUG] [Thread-28604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:44:04.040 [DEBUG] [Thread-28604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:44:04.040 [DEBUG] [Thread-28604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:44:04.040 [DEBUG] [Thread-28604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:44:04.041 [DEBUG] [Thread-28604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:44:04.041 [DEBUG] [Thread-28604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:44:04.041 [DEBUG] [Thread-28604] [transport.py] [_log()] client lang: <none>
2026-04-16T00:44:04.041 [DEBUG] [Thread-28604] [transport.py] [_log()] server lang: <none>
2026-04-16T00:44:04.041 [DEBUG] [Thread-28604] [transport.py] [_log()] kex follows: False
2026-04-16T00:44:04.041 [DEBUG] [Thread-28604] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:44:04.041 [DEBUG] [Thread-28604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:44:04.041 [DEBUG] [Thread-28604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:44:04.041 [DEBUG] [Thread-28604] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:44:04.041 [DEBUG] [Thread-28604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:44:04.041 [DEBUG] [Thread-28604] [transport.py] [_log()] Compression: none
2026-04-16T00:44:04.042 [DEBUG] [Thread-28604] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:44:04.058 [DEBUG] [Thread-28604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:44:04.058 [DEBUG] [Thread-28604] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:44:04.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:44:04.059 [DEBUG] [Thread-28604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:44:04.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:44:04.060 [DEBUG] [Thread-28604] [transport.py] [_log()] userauth is OK
2026-04-16T00:44:04.060 [DEBUG] [Thread-28604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:44:04.060 [DEBUG] [Thread-28604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:44:04.060 [DEBUG] [Thread-28604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:44:04.060 [DEBUG] [Thread-28604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:44:04.084 [INFO] [Thread-28604] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:44:04.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:44:04.883 [DEBUG] [Thread-28604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:44:04.883 [DEBUG] [Thread-28604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:44:04.884 [DEBUG] [Thread-28604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:44:04.924 [DEBUG] [Thread-28604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:44:04.924 [DEBUG] [Thread-28604] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:44:04.927 [DEBUG] [Thread-28604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:44:04.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:44:04.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:44:04.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:44:04.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:44:04.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:44:04.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:44:04.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:44:04.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:44:04.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:44:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.946660 -999.00   +9.50   9.22     82   +6.60 1 1 1 2 1     0    0 2.31 -16.85 ZNESW 9.1 9.2 129.0 11.6 9.7 -25.0 9.5 -23.7 9.1 -21.5 9.5 -23.6
2026-04-16T00:44:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:44:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:44:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.946660
2026-04-16T00:44:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:44:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:44:04.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:44:04.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:44:04.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:44:04.951 [DEBUG] [Thread-28604] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:44:04.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:43:26', tmtdew=3.27315, humidity=79.8623, cloud=0.0, wind=9.9522, temperature=9.06464, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:43:11.424', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.11224999999999952, -0.047250000000000014, -0.016500000000000625, -0.01750000000000007, -0.01974999999999838, 0.0030000000000001137, -0.029749999999999943, -0.046499999999999986, -0.09600000000000009, -0.0027500000000006963, -0.09299999999999997, 0.0009999999999994458, -0.026750000000001606, -0.02200000000000024, -0.026500000000000412, 0.008250000000000313, -0.05050000000000132, -0.0024999999999995026, -0.03775000000000084, -0.01600000000000179, 0.029249999999997556, 0.017250000000000654, -0.03524999999999956, -0.02800000000000047, 0.002000000000000668, -0.01624999999999943, -0.029500000000000526, -0.021999999999998465, 0.036000000000001364, 0.021000000000000796, -0.0259999999999998, -0.06825000000000081], zp_timestamp='2026-04-15T22:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:44:05.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:44:05.207 [DEBUG] [Thread-28607] [transport.py] [_log()] starting thread (client mode): 0xf13e2140
2026-04-16T00:44:05.207 [DEBUG] [Thread-28607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:44:05.222 [DEBUG] [Thread-28607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:44:05.222 [INFO] [Thread-28607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:44:05.230 [DEBUG] [Thread-28607] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:44:05.230 [DEBUG] [Thread-28607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:44:05.230 [DEBUG] [Thread-28607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:44:05.230 [DEBUG] [Thread-28607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:44:05.230 [DEBUG] [Thread-28607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:44:05.230 [DEBUG] [Thread-28607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:44:05.230 [DEBUG] [Thread-28607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:44:05.230 [DEBUG] [Thread-28607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:44:05.230 [DEBUG] [Thread-28607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:44:05.230 [DEBUG] [Thread-28607] [transport.py] [_log()] client lang: <none>
2026-04-16T00:44:05.230 [DEBUG] [Thread-28607] [transport.py] [_log()] server lang: <none>
2026-04-16T00:44:05.230 [DEBUG] [Thread-28607] [transport.py] [_log()] kex follows: False
2026-04-16T00:44:05.230 [DEBUG] [Thread-28607] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:44:05.230 [DEBUG] [Thread-28607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:44:05.230 [DEBUG] [Thread-28607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:44:05.231 [DEBUG] [Thread-28607] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:44:05.231 [DEBUG] [Thread-28607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:44:05.231 [DEBUG] [Thread-28607] [transport.py] [_log()] Compression: none
2026-04-16T00:44:05.231 [DEBUG] [Thread-28607] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:44:05.287 [DEBUG] [Thread-28607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:44:05.287 [DEBUG] [Thread-28607] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:44:05.287 [DEBUG] [Thread-28607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:44:05.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:44:05.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:44:05.344 [DEBUG] [Thread-28607] [transport.py] [_log()] userauth is OK
2026-04-16T00:44:05.344 [DEBUG] [Thread-28607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:44:05.344 [DEBUG] [Thread-28607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:44:05.345 [DEBUG] [Thread-28607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:44:05.345 [DEBUG] [Thread-28607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:44:05.370 [INFO] [Thread-28607] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:44:05.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:44:05.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:44:06.192 [DEBUG] [Thread-28607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:44:06.192 [DEBUG] [Thread-28607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:44:06.239 [DEBUG] [Thread-28607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:44:06.240 [DEBUG] [Thread-28607] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:44:06.248 [DEBUG] [Thread-28607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:44:06.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:44:06.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-16T00:44:06.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
2026-04-16T00:44:06.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:44:06.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:44:06.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:44:06.280 [DEBUG] [Thread-28607] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:44:08.007 [DEBUG] [Thread-28609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:44:23.051 [DEBUG] [Thread-28610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:44:28.711 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:44:28.712 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:44:36.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:44:36.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:44: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
2026-04-16T00:44:37.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 44, 2), 3.26434, 79.9121, 0.0, 9.61704, 9.06471, 0, 0, 0, 2, 0, 0),)
2026-04-16T00:44:37.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:44:02
2026-04-16T00:44:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:44:38.082 [DEBUG] [Thread-28611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:44:38.339 [DEBUG] [Thread-28612] [transport.py] [_log()] starting thread (client mode): 0xf1353d00
2026-04-16T00:44:38.339 [DEBUG] [Thread-28612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:44:38.359 [DEBUG] [Thread-28612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:44:38.359 [INFO] [Thread-28612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:44:38.362 [DEBUG] [Thread-28612] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:44:38.362 [DEBUG] [Thread-28612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:44:38.362 [DEBUG] [Thread-28612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:44:38.363 [DEBUG] [Thread-28612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:44:38.363 [DEBUG] [Thread-28612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:44:38.363 [DEBUG] [Thread-28612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:44:38.363 [DEBUG] [Thread-28612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:44:38.363 [DEBUG] [Thread-28612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:44:38.363 [DEBUG] [Thread-28612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:44:38.363 [DEBUG] [Thread-28612] [transport.py] [_log()] client lang: <none>
2026-04-16T00:44:38.363 [DEBUG] [Thread-28612] [transport.py] [_log()] server lang: <none>
2026-04-16T00:44:38.363 [DEBUG] [Thread-28612] [transport.py] [_log()] kex follows: False
2026-04-16T00:44:38.363 [DEBUG] [Thread-28612] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:44:38.363 [DEBUG] [Thread-28612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:44:38.363 [DEBUG] [Thread-28612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:44:38.363 [DEBUG] [Thread-28612] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:44:38.364 [DEBUG] [Thread-28612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:44:38.364 [DEBUG] [Thread-28612] [transport.py] [_log()] Compression: none
2026-04-16T00:44:38.364 [DEBUG] [Thread-28612] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:44:38.379 [DEBUG] [Thread-28612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:44:38.380 [DEBUG] [Thread-28612] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:44:38.380 [DEBUG] [Thread-28612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:44:38.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:44:38.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:44:38.381 [DEBUG] [Thread-28612] [transport.py] [_log()] userauth is OK
2026-04-16T00:44:38.381 [DEBUG] [Thread-28612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:44:38.381 [DEBUG] [Thread-28612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:44:38.381 [DEBUG] [Thread-28612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:44:38.381 [DEBUG] [Thread-28612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:44:38.396 [INFO] [Thread-28612] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:44:38.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:44:39.194 [DEBUG] [Thread-28612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:44:39.194 [DEBUG] [Thread-28612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:44:39.195 [DEBUG] [Thread-28612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:44:39.235 [DEBUG] [Thread-28612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:44:39.235 [DEBUG] [Thread-28612] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:44:39.238 [DEBUG] [Thread-28612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:44:39.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:44:39.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:44:39.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:44:39.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:44:39.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:44:39.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:44:39.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:44:39.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:44:39.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:44:39.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.947008 -999.00   +9.50   8.53     82   +6.70 1 1 1 2 1     0    0 2.32 -16.11 ZNESW 9.6 8.5 117.0 9.4 9.7 -25.0 9.5 -23.9 9.2 -21.6 9.5 -23.9
2026-04-16T00:44:39.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:44:39.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:44:39.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.947008
2026-04-16T00:44:39.262 [DEBUG] [Thread-28612] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:44:39.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:44:39.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:44:39.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:44:39.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:44:39.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:44:39.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:44:02', tmtdew=3.26434, humidity=79.9121, cloud=0.0, wind=9.61704, temperature=9.06471, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:43:41.491', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.11224999999999952, -0.047250000000000014, -0.016500000000000625, -0.01750000000000007, -0.01974999999999838, 0.0030000000000001137, -0.029749999999999943, -0.046499999999999986, -0.09600000000000009, -0.0027500000000006963, -0.09299999999999997, 0.0009999999999994458, -0.026750000000001606, -0.02200000000000024, -0.026500000000000412, 0.008250000000000313, -0.05050000000000132, -0.0024999999999995026, -0.03775000000000084, -0.01600000000000179, 0.029249999999997556, 0.017250000000000654, -0.03524999999999956, -0.02800000000000047, 0.002000000000000668, -0.01624999999999943, -0.029500000000000526, -0.021999999999998465, 0.036000000000001364, 0.021000000000000796, -0.0259999999999998, -0.06825000000000081], zp_timestamp='2026-04-15T22:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:44:39.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:44:39.519 [DEBUG] [Thread-28615] [transport.py] [_log()] starting thread (client mode): 0xf1335f60
2026-04-16T00:44:39.519 [DEBUG] [Thread-28615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:44:39.537 [DEBUG] [Thread-28615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:44:39.538 [INFO] [Thread-28615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:44:39.545 [DEBUG] [Thread-28615] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:44:39.545 [DEBUG] [Thread-28615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:44:39.545 [DEBUG] [Thread-28615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:44:39.545 [DEBUG] [Thread-28615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:44:39.545 [DEBUG] [Thread-28615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:44:39.545 [DEBUG] [Thread-28615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:44:39.546 [DEBUG] [Thread-28615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:44:39.546 [DEBUG] [Thread-28615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:44:39.546 [DEBUG] [Thread-28615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:44:39.546 [DEBUG] [Thread-28615] [transport.py] [_log()] client lang: <none>
2026-04-16T00:44:39.546 [DEBUG] [Thread-28615] [transport.py] [_log()] server lang: <none>
2026-04-16T00:44:39.546 [DEBUG] [Thread-28615] [transport.py] [_log()] kex follows: False
2026-04-16T00:44:39.546 [DEBUG] [Thread-28615] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:44:39.546 [DEBUG] [Thread-28615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:44:39.546 [DEBUG] [Thread-28615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:44:39.546 [DEBUG] [Thread-28615] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:44:39.547 [DEBUG] [Thread-28615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:44:39.547 [DEBUG] [Thread-28615] [transport.py] [_log()] Compression: none
2026-04-16T00:44:39.547 [DEBUG] [Thread-28615] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:44:39.603 [DEBUG] [Thread-28615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:44:39.604 [DEBUG] [Thread-28615] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:44:39.604 [DEBUG] [Thread-28615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:44:39.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:44:39.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:44:39.660 [DEBUG] [Thread-28615] [transport.py] [_log()] userauth is OK
2026-04-16T00:44:39.660 [DEBUG] [Thread-28615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:44:39.661 [DEBUG] [Thread-28615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:44:39.661 [DEBUG] [Thread-28615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:44:39.661 [DEBUG] [Thread-28615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:44:39.687 [INFO] [Thread-28615] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:44:39.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:44:39.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:44:40.497 [DEBUG] [Thread-28615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:44:40.497 [DEBUG] [Thread-28615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:44:40.545 [DEBUG] [Thread-28615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:44:40.545 [DEBUG] [Thread-28615] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:44:40.554 [DEBUG] [Thread-28615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:44:40.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:44:40.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')
2026-04-16T00:44:40.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
2026-04-16T00:44:40.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:44:40.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:44:40.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:44:40.589 [DEBUG] [Thread-28615] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:44:48.362 [DEBUG] [Thread-28617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:44:53.110 [DEBUG] [Thread-28618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:45:08.154 [DEBUG] [Thread-28619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:45:10.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:45:10.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:45:10.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
2026-04-16T00:45:11.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 44, 38), 2.87669, 82.1229, 0.0, 13.1983, 8.9626, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:45:11.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:44:38
2026-04-16T00:45:12.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:45:12.724 [DEBUG] [Thread-28620] [transport.py] [_log()] starting thread (client mode): 0xf13e0d90
2026-04-16T00:45:12.724 [DEBUG] [Thread-28620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:45:12.745 [DEBUG] [Thread-28620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:45:12.745 [INFO] [Thread-28620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:45:12.748 [DEBUG] [Thread-28620] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:45:12.748 [DEBUG] [Thread-28620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:45:12.748 [DEBUG] [Thread-28620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:45:12.748 [DEBUG] [Thread-28620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:45:12.748 [DEBUG] [Thread-28620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:45:12.748 [DEBUG] [Thread-28620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:45:12.748 [DEBUG] [Thread-28620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:45:12.749 [DEBUG] [Thread-28620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:45:12.749 [DEBUG] [Thread-28620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:45:12.749 [DEBUG] [Thread-28620] [transport.py] [_log()] client lang: <none>
2026-04-16T00:45:12.749 [DEBUG] [Thread-28620] [transport.py] [_log()] server lang: <none>
2026-04-16T00:45:12.749 [DEBUG] [Thread-28620] [transport.py] [_log()] kex follows: False
2026-04-16T00:45:12.749 [DEBUG] [Thread-28620] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:45:12.749 [DEBUG] [Thread-28620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:45:12.749 [DEBUG] [Thread-28620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:45:12.749 [DEBUG] [Thread-28620] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:45:12.749 [DEBUG] [Thread-28620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:45:12.749 [DEBUG] [Thread-28620] [transport.py] [_log()] Compression: none
2026-04-16T00:45:12.749 [DEBUG] [Thread-28620] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:45:12.766 [DEBUG] [Thread-28620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:45:12.766 [DEBUG] [Thread-28620] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:45:12.767 [DEBUG] [Thread-28620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:45:12.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:45:12.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:45:12.768 [DEBUG] [Thread-28620] [transport.py] [_log()] userauth is OK
2026-04-16T00:45:12.768 [DEBUG] [Thread-28620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:45:12.768 [DEBUG] [Thread-28620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:45:12.768 [DEBUG] [Thread-28620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:45:12.768 [DEBUG] [Thread-28620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:45:12.784 [INFO] [Thread-28620] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:45:12.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:45:20.573 [DEBUG] [Thread-28620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:45:20.573 [DEBUG] [Thread-28620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:45:20.574 [DEBUG] [Thread-28620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:45:20.614 [DEBUG] [Thread-28620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:45:20.614 [DEBUG] [Thread-28620] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:45:20.617 [DEBUG] [Thread-28620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:45:20.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:45:20.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:45:20.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:45:20.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:45:20.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:45:20.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:45:20.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:45:20.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:45:20.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:45:20.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.947355 -999.00   +9.50  10.00     82   +6.70 1 1 1 2 1     0    0 2.38 -15.01 ZNESW 7.7 10.0 123.0 12.9 9.7 -24.9 9.5 -23.8 9.2 -21.6 9.6 -23.9
2026-04-16T00:45:20.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:45:20.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:45:20.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.947355
2026-04-16T00:45:20.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:45:20.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:45:20.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:45:20.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:45:20.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:45:20.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:44:38', tmtdew=2.87669, humidity=82.1229, cloud=0.0, wind=13.1983, temperature=8.9626, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:44:11.472', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.11224999999999952, -0.047250000000000014, -0.016500000000000625, -0.01750000000000007, -0.01974999999999838, 0.0030000000000001137, -0.029749999999999943, -0.046499999999999986, -0.09600000000000009, -0.0027500000000006963, -0.09299999999999997, 0.0009999999999994458, -0.026750000000001606, -0.02200000000000024, -0.026500000000000412, 0.008250000000000313, -0.05050000000000132, -0.0024999999999995026, -0.03775000000000084, -0.01600000000000179, 0.029249999999997556, 0.017250000000000654, -0.03524999999999956, -0.02800000000000047, 0.002000000000000668, -0.01624999999999943, -0.029500000000000526, -0.021999999999998465, 0.036000000000001364, 0.021000000000000796, -0.0259999999999998, -0.06825000000000081], zp_timestamp='2026-04-15T22:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:45:20.768 [DEBUG] [Thread-28620] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:45:21.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:45:21.024 [DEBUG] [Thread-28623] [transport.py] [_log()] starting thread (client mode): 0xee9c2800
2026-04-16T00:45:21.024 [DEBUG] [Thread-28623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:45:21.038 [DEBUG] [Thread-28623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:45:21.039 [INFO] [Thread-28623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:45:21.046 [DEBUG] [Thread-28623] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:45:21.046 [DEBUG] [Thread-28623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:45:21.046 [DEBUG] [Thread-28623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:45:21.046 [DEBUG] [Thread-28623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:45:21.046 [DEBUG] [Thread-28623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:45:21.046 [DEBUG] [Thread-28623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:45:21.046 [DEBUG] [Thread-28623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:45:21.047 [DEBUG] [Thread-28623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:45:21.047 [DEBUG] [Thread-28623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:45:21.047 [DEBUG] [Thread-28623] [transport.py] [_log()] client lang: <none>
2026-04-16T00:45:21.047 [DEBUG] [Thread-28623] [transport.py] [_log()] server lang: <none>
2026-04-16T00:45:21.047 [DEBUG] [Thread-28623] [transport.py] [_log()] kex follows: False
2026-04-16T00:45:21.047 [DEBUG] [Thread-28623] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:45:21.047 [DEBUG] [Thread-28623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:45:21.047 [DEBUG] [Thread-28623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:45:21.047 [DEBUG] [Thread-28623] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:45:21.047 [DEBUG] [Thread-28623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:45:21.047 [DEBUG] [Thread-28623] [transport.py] [_log()] Compression: none
2026-04-16T00:45:21.048 [DEBUG] [Thread-28623] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:45:21.103 [DEBUG] [Thread-28623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:45:21.103 [DEBUG] [Thread-28623] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:45:21.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:45:21.104 [DEBUG] [Thread-28623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:45:21.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:45:21.164 [DEBUG] [Thread-28623] [transport.py] [_log()] userauth is OK
2026-04-16T00:45:21.165 [DEBUG] [Thread-28623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:45:21.165 [DEBUG] [Thread-28623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:45:21.165 [DEBUG] [Thread-28623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:45:21.165 [DEBUG] [Thread-28623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:45:21.187 [INFO] [Thread-28623] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:45:21.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:45:21.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:45:22.006 [DEBUG] [Thread-28623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:45:22.006 [DEBUG] [Thread-28623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:45:22.054 [DEBUG] [Thread-28623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:45:22.054 [DEBUG] [Thread-28623] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:45:22.063 [DEBUG] [Thread-28623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:45:22.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:45:22.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')
2026-04-16T00:45:22.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
2026-04-16T00:45:22.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:45:22.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:45:22.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:45:22.098 [DEBUG] [Thread-28623] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:45:23.185 [DEBUG] [Thread-28625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:45:28.913 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:45:28.915 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:45:38.227 [DEBUG] [Thread-28626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:45:48.507 [DEBUG] [Thread-28627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:45:52.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:45:52.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:45:52.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
2026-04-16T00:45:53.259 [DEBUG] [Thread-28628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:45:53.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 45, 13), 3.17736, 80.1279, 0.0, 9.01728, 9.06452, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:45:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:45:13
2026-04-16T00:45:53.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:45:54.301 [DEBUG] [Thread-28629] [transport.py] [_log()] starting thread (client mode): 0xee905a80
2026-04-16T00:45:54.301 [DEBUG] [Thread-28629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:45:54.321 [DEBUG] [Thread-28629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:45:54.321 [INFO] [Thread-28629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:45:54.324 [DEBUG] [Thread-28629] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:45:54.324 [DEBUG] [Thread-28629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:45:54.325 [DEBUG] [Thread-28629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:45:54.325 [DEBUG] [Thread-28629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:45:54.325 [DEBUG] [Thread-28629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:45:54.325 [DEBUG] [Thread-28629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:45:54.325 [DEBUG] [Thread-28629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:45:54.325 [DEBUG] [Thread-28629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:45:54.325 [DEBUG] [Thread-28629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:45:54.325 [DEBUG] [Thread-28629] [transport.py] [_log()] client lang: <none>
2026-04-16T00:45:54.325 [DEBUG] [Thread-28629] [transport.py] [_log()] server lang: <none>
2026-04-16T00:45:54.325 [DEBUG] [Thread-28629] [transport.py] [_log()] kex follows: False
2026-04-16T00:45:54.325 [DEBUG] [Thread-28629] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:45:54.326 [DEBUG] [Thread-28629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:45:54.326 [DEBUG] [Thread-28629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:45:54.326 [DEBUG] [Thread-28629] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:45:54.326 [DEBUG] [Thread-28629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:45:54.326 [DEBUG] [Thread-28629] [transport.py] [_log()] Compression: none
2026-04-16T00:45:54.326 [DEBUG] [Thread-28629] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:45:54.343 [DEBUG] [Thread-28629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:45:54.343 [DEBUG] [Thread-28629] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:45:54.344 [DEBUG] [Thread-28629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:45:54.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:45:54.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:45:54.345 [DEBUG] [Thread-28629] [transport.py] [_log()] userauth is OK
2026-04-16T00:45:54.345 [DEBUG] [Thread-28629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:45:54.345 [DEBUG] [Thread-28629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:45:54.345 [DEBUG] [Thread-28629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:45:54.346 [DEBUG] [Thread-28629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:45:54.370 [INFO] [Thread-28629] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:45:54.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:45:55.112 [DEBUG] [Thread-28629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:45:55.112 [DEBUG] [Thread-28629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:45:55.113 [DEBUG] [Thread-28629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:45:55.153 [DEBUG] [Thread-28629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:45:55.153 [DEBUG] [Thread-28629] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:45:55.156 [DEBUG] [Thread-28629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:45:55.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:45:55.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:45:55.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:45:55.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:45:55.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:45:55.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:45:55.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:45:55.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:45:55.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:45:55.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.948050 -999.00   +9.50   7.45     83   +6.80 1 1 1 2 1     0    0 2.35 -15.47 ZNESW 9.1 7.5 111.1 11.2 9.7 -25.1 9.6 -23.9 9.2 -21.6 9.6 -23.6
2026-04-16T00:45:55.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:45:55.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:45:55.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.948050
2026-04-16T00:45:55.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:45:55.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:45:55.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:45:55.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:45:55.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:45:55.184 [DEBUG] [Thread-28629] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:45:55.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:45:13', tmtdew=3.17736, humidity=80.1279, cloud=0.0, wind=9.01728, temperature=9.06452, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:45:11.520', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06174999999999997, -0.013249999999999318, -0.015499999999999403, -0.009499999999999176, -0.007749999999999702, -0.015000000000000568, -0.014749999999999375, -0.05500000000000149, -0.1095000000000006, 0.003249999999999531, -0.10650000000000048, 0.009000000000000341, 0.0072499999999990905, 0.0015000000000000568, -0.031000000000000583, -0.03775000000000084, -0.05149999999999899, -0.008000000000000895, -0.026750000000001606, -0.0070000000000014495, 0.027749999999999275, 0.022750000000002046, -0.05424999999999969, 0.0039999999999995595, 0.016500000000000625, -0.02874999999999872, -0.018499999999999517, -0.0039999999999995595, 0.05400000000000027, 0.0555000000000021, 0.009000000000000341, -0.045750000000001734], zp_timestamp='2026-04-15T22:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:45:55.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:45:55.439 [DEBUG] [Thread-28632] [transport.py] [_log()] starting thread (client mode): 0xf13ca500
2026-04-16T00:45:55.440 [DEBUG] [Thread-28632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:45:55.454 [DEBUG] [Thread-28632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:45:55.454 [INFO] [Thread-28632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:45:55.461 [DEBUG] [Thread-28632] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:45:55.461 [DEBUG] [Thread-28632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:45:55.461 [DEBUG] [Thread-28632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:45:55.461 [DEBUG] [Thread-28632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:45:55.461 [DEBUG] [Thread-28632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:45:55.462 [DEBUG] [Thread-28632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:45:55.462 [DEBUG] [Thread-28632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:45:55.462 [DEBUG] [Thread-28632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:45:55.462 [DEBUG] [Thread-28632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:45:55.462 [DEBUG] [Thread-28632] [transport.py] [_log()] client lang: <none>
2026-04-16T00:45:55.462 [DEBUG] [Thread-28632] [transport.py] [_log()] server lang: <none>
2026-04-16T00:45:55.462 [DEBUG] [Thread-28632] [transport.py] [_log()] kex follows: False
2026-04-16T00:45:55.462 [DEBUG] [Thread-28632] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:45:55.462 [DEBUG] [Thread-28632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:45:55.462 [DEBUG] [Thread-28632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:45:55.462 [DEBUG] [Thread-28632] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:45:55.462 [DEBUG] [Thread-28632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:45:55.463 [DEBUG] [Thread-28632] [transport.py] [_log()] Compression: none
2026-04-16T00:45:55.463 [DEBUG] [Thread-28632] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:45:55.520 [DEBUG] [Thread-28632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:45:55.520 [DEBUG] [Thread-28632] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:45:55.521 [DEBUG] [Thread-28632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:45:55.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:45:55.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:45:55.577 [DEBUG] [Thread-28632] [transport.py] [_log()] userauth is OK
2026-04-16T00:45:55.577 [DEBUG] [Thread-28632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:45:55.577 [DEBUG] [Thread-28632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:45:55.578 [DEBUG] [Thread-28632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:45:55.578 [DEBUG] [Thread-28632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:45:55.603 [INFO] [Thread-28632] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:45:55.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:45:55.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:45:56.458 [DEBUG] [Thread-28632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:45:56.458 [DEBUG] [Thread-28632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:45:56.505 [DEBUG] [Thread-28632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:45:56.506 [DEBUG] [Thread-28632] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:45:56.514 [DEBUG] [Thread-28632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:45:56.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:45:56.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')
2026-04-16T00:45:56.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') -> 00000000
2026-04-16T00:45:56.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:45:56.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:45:56.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:45:56.547 [DEBUG] [Thread-28632] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:46:08.290 [DEBUG] [Thread-28634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:46:23.329 [DEBUG] [Thread-28635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:46:26.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:46:26.566 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:46:26.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
2026-04-16T00:46:27.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 45, 49), 2.82041, 82.4549, 0.0, 12.4574, 9.06223, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:46:27.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:45:49
2026-04-16T00:46:28.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:46:28.771 [DEBUG] [Thread-28636] [transport.py] [_log()] starting thread (client mode): 0xee906800
2026-04-16T00:46:28.771 [DEBUG] [Thread-28636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:46:28.790 [DEBUG] [Thread-28636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:46:28.790 [INFO] [Thread-28636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:46:28.793 [DEBUG] [Thread-28636] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:46:28.793 [DEBUG] [Thread-28636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:46:28.793 [DEBUG] [Thread-28636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:46:28.793 [DEBUG] [Thread-28636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:46:28.793 [DEBUG] [Thread-28636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:46:28.793 [DEBUG] [Thread-28636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:46:28.793 [DEBUG] [Thread-28636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:46:28.793 [DEBUG] [Thread-28636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:46:28.793 [DEBUG] [Thread-28636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:46:28.794 [DEBUG] [Thread-28636] [transport.py] [_log()] client lang: <none>
2026-04-16T00:46:28.794 [DEBUG] [Thread-28636] [transport.py] [_log()] server lang: <none>
2026-04-16T00:46:28.794 [DEBUG] [Thread-28636] [transport.py] [_log()] kex follows: False
2026-04-16T00:46:28.794 [DEBUG] [Thread-28636] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:46:28.794 [DEBUG] [Thread-28636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:46:28.794 [DEBUG] [Thread-28636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:46:28.794 [DEBUG] [Thread-28636] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:46:28.794 [DEBUG] [Thread-28636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:46:28.794 [DEBUG] [Thread-28636] [transport.py] [_log()] Compression: none
2026-04-16T00:46:28.794 [DEBUG] [Thread-28636] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:46:28.812 [DEBUG] [Thread-28636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:46:28.812 [DEBUG] [Thread-28636] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:46:28.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:46:28.813 [DEBUG] [Thread-28636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:46:28.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:46:28.814 [DEBUG] [Thread-28636] [transport.py] [_log()] userauth is OK
2026-04-16T00:46:28.814 [DEBUG] [Thread-28636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:46:28.814 [DEBUG] [Thread-28636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:46:28.814 [DEBUG] [Thread-28636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:46:28.814 [DEBUG] [Thread-28636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:46:28.831 [INFO] [Thread-28636] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:46:28.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:46:29.117 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:46:29.118 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:46:29.642 [DEBUG] [Thread-28636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:46:29.642 [DEBUG] [Thread-28636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:46:29.643 [DEBUG] [Thread-28636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:46:29.683 [DEBUG] [Thread-28636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:46:29.683 [DEBUG] [Thread-28636] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:46:29.686 [DEBUG] [Thread-28636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:46:29.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:46:29.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:46:29.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:46:29.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:46:29.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:46:29.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:46:29.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:46:29.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:46:29.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:46:29.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.948397 -999.00   +9.60   7.24     84   +7.00 1 1 1 2 1     0    0 2.31 -15.55 ZNESW 8.3 7.2 79.3 13.3 9.8 -25.1 9.6 -23.8 9.2 -21.7 9.6 -23.6
2026-04-16T00:46:29.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:46:29.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:46:29.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.948397
2026-04-16T00:46:29.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:46:29.707 [DEBUG] [Thread-28636] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:46:29.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:46:29.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:46:29.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:46:29.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:46:29.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:45:49', tmtdew=2.82041, humidity=82.4549, cloud=0.0, wind=12.4574, temperature=9.06223, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:45:41.501', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06174999999999997, -0.013249999999999318, -0.015499999999999403, -0.009499999999999176, -0.007749999999999702, -0.015000000000000568, -0.014749999999999375, -0.05500000000000149, -0.1095000000000006, 0.003249999999999531, -0.10650000000000048, 0.009000000000000341, 0.0072499999999990905, 0.0015000000000000568, -0.031000000000000583, -0.03775000000000084, -0.05149999999999899, -0.008000000000000895, -0.026750000000001606, -0.0070000000000014495, 0.027749999999999275, 0.022750000000002046, -0.05424999999999969, 0.0039999999999995595, 0.016500000000000625, -0.02874999999999872, -0.018499999999999517, -0.0039999999999995595, 0.05400000000000027, 0.0555000000000021, 0.009000000000000341, -0.045750000000001734], zp_timestamp='2026-04-15T22:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:46:29.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:46:29.951 [DEBUG] [Thread-28639] [transport.py] [_log()] starting thread (client mode): 0xf1337c70
2026-04-16T00:46:29.951 [DEBUG] [Thread-28639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:46:29.965 [DEBUG] [Thread-28639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:46:29.965 [INFO] [Thread-28639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:46:29.973 [DEBUG] [Thread-28639] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:46:29.973 [DEBUG] [Thread-28639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:46:29.973 [DEBUG] [Thread-28639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:46:29.973 [DEBUG] [Thread-28639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:46:29.973 [DEBUG] [Thread-28639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:46:29.973 [DEBUG] [Thread-28639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:46:29.973 [DEBUG] [Thread-28639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:46:29.973 [DEBUG] [Thread-28639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:46:29.973 [DEBUG] [Thread-28639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:46:29.973 [DEBUG] [Thread-28639] [transport.py] [_log()] client lang: <none>
2026-04-16T00:46:29.973 [DEBUG] [Thread-28639] [transport.py] [_log()] server lang: <none>
2026-04-16T00:46:29.973 [DEBUG] [Thread-28639] [transport.py] [_log()] kex follows: False
2026-04-16T00:46:29.974 [DEBUG] [Thread-28639] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:46:29.974 [DEBUG] [Thread-28639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:46:29.974 [DEBUG] [Thread-28639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:46:29.974 [DEBUG] [Thread-28639] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:46:29.974 [DEBUG] [Thread-28639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:46:29.974 [DEBUG] [Thread-28639] [transport.py] [_log()] Compression: none
2026-04-16T00:46:29.974 [DEBUG] [Thread-28639] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:46:30.029 [DEBUG] [Thread-28639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:46:30.029 [DEBUG] [Thread-28639] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:46:30.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:46:30.030 [DEBUG] [Thread-28639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:46:30.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:46:30.086 [DEBUG] [Thread-28639] [transport.py] [_log()] userauth is OK
2026-04-16T00:46:30.086 [DEBUG] [Thread-28639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:46:30.086 [DEBUG] [Thread-28639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:46:30.086 [DEBUG] [Thread-28639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:46:30.086 [DEBUG] [Thread-28639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:46:30.104 [INFO] [Thread-28639] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:46:30.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:46:30.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:46:30.909 [DEBUG] [Thread-28639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:46:30.909 [DEBUG] [Thread-28639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:46:30.958 [DEBUG] [Thread-28639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:46:30.959 [DEBUG] [Thread-28639] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:46:30.967 [DEBUG] [Thread-28639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:46:30.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:46:30.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')
2026-04-16T00:46:30.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
2026-04-16T00:46:30.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:46:30.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:46:31.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:46:31.008 [DEBUG] [Thread-28639] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:46:38.360 [DEBUG] [Thread-28641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:46:48.670 [DEBUG] [Thread-28642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:46:53.403 [DEBUG] [Thread-28643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:47:01.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:47:01.037 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:47:01.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
2026-04-16T00:47:02.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 46, 24), 3.15657, 80.7441, 0.0, 9.52884, 9.09797, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:47:02.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:46:24
2026-04-16T00:47:02.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:47:03.163 [DEBUG] [Thread-28644] [transport.py] [_log()] starting thread (client mode): 0xee907160
2026-04-16T00:47:03.164 [DEBUG] [Thread-28644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:47:03.184 [DEBUG] [Thread-28644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:47:03.184 [INFO] [Thread-28644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:47:03.187 [DEBUG] [Thread-28644] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:47:03.187 [DEBUG] [Thread-28644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:47:03.187 [DEBUG] [Thread-28644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:47:03.187 [DEBUG] [Thread-28644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:47:03.187 [DEBUG] [Thread-28644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:47:03.188 [DEBUG] [Thread-28644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:47:03.188 [DEBUG] [Thread-28644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:47:03.188 [DEBUG] [Thread-28644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:47:03.188 [DEBUG] [Thread-28644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:47:03.188 [DEBUG] [Thread-28644] [transport.py] [_log()] client lang: <none>
2026-04-16T00:47:03.188 [DEBUG] [Thread-28644] [transport.py] [_log()] server lang: <none>
2026-04-16T00:47:03.188 [DEBUG] [Thread-28644] [transport.py] [_log()] kex follows: False
2026-04-16T00:47:03.188 [DEBUG] [Thread-28644] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:47:03.188 [DEBUG] [Thread-28644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:47:03.188 [DEBUG] [Thread-28644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:47:03.189 [DEBUG] [Thread-28644] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:47:03.189 [DEBUG] [Thread-28644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:47:03.189 [DEBUG] [Thread-28644] [transport.py] [_log()] Compression: none
2026-04-16T00:47:03.189 [DEBUG] [Thread-28644] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:47:03.205 [DEBUG] [Thread-28644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:47:03.206 [DEBUG] [Thread-28644] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:47:03.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:47:03.207 [DEBUG] [Thread-28644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:47:03.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:47:03.208 [DEBUG] [Thread-28644] [transport.py] [_log()] userauth is OK
2026-04-16T00:47:03.208 [DEBUG] [Thread-28644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:47:03.208 [DEBUG] [Thread-28644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:47:03.208 [DEBUG] [Thread-28644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:47:03.208 [DEBUG] [Thread-28644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:47:03.233 [INFO] [Thread-28644] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:47:03.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:47:04.017 [DEBUG] [Thread-28644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:47:04.017 [DEBUG] [Thread-28644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:47:04.018 [DEBUG] [Thread-28644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:47:04.058 [DEBUG] [Thread-28644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:47:04.058 [DEBUG] [Thread-28644] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:47:04.061 [DEBUG] [Thread-28644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:47:04.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:47:04.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:47:04.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:47:04.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:47:04.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:47:04.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:47:04.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:47:04.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:47:04.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:47:04.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.948744 -999.00   +9.60   7.82     84   +7.10 1 1 1 2 1     0    0 2.41 -14.19 ZNESW 8.0 7.8 116.1 11.4 9.8 -24.9 9.6 -23.8 9.2 -21.5 9.6 -23.5
2026-04-16T00:47:04.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:47:04.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:47:04.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.948744
2026-04-16T00:47:04.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:47:04.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:47:04.088 [DEBUG] [Thread-28644] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:47:04.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:47:04.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:47:04.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:47:04.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:46:24', tmtdew=3.15657, humidity=80.7441, cloud=0.0, wind=9.52884, temperature=9.09797, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:46:11.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06174999999999997, -0.013249999999999318, -0.015499999999999403, -0.009499999999999176, -0.007749999999999702, -0.015000000000000568, -0.014749999999999375, -0.05500000000000149, -0.1095000000000006, 0.003249999999999531, -0.10650000000000048, 0.009000000000000341, 0.0072499999999990905, 0.0015000000000000568, -0.031000000000000583, -0.03775000000000084, -0.05149999999999899, -0.008000000000000895, -0.026750000000001606, -0.0070000000000014495, 0.027749999999999275, 0.022750000000002046, -0.05424999999999969, 0.0039999999999995595, 0.016500000000000625, -0.02874999999999872, -0.018499999999999517, -0.0039999999999995595, 0.05400000000000027, 0.0555000000000021, 0.009000000000000341, -0.045750000000001734], zp_timestamp='2026-04-15T22:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:47:04.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:47:04.329 [DEBUG] [Thread-28647] [transport.py] [_log()] starting thread (client mode): 0xee933580
2026-04-16T00:47:04.329 [DEBUG] [Thread-28647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:47:04.342 [DEBUG] [Thread-28647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:47:04.343 [INFO] [Thread-28647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:47:04.350 [DEBUG] [Thread-28647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:47:04.350 [DEBUG] [Thread-28647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:47:04.350 [DEBUG] [Thread-28647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:47:04.350 [DEBUG] [Thread-28647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:47:04.350 [DEBUG] [Thread-28647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:47:04.350 [DEBUG] [Thread-28647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:47:04.350 [DEBUG] [Thread-28647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:47:04.350 [DEBUG] [Thread-28647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:47:04.351 [DEBUG] [Thread-28647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:47:04.351 [DEBUG] [Thread-28647] [transport.py] [_log()] client lang: <none>
2026-04-16T00:47:04.351 [DEBUG] [Thread-28647] [transport.py] [_log()] server lang: <none>
2026-04-16T00:47:04.351 [DEBUG] [Thread-28647] [transport.py] [_log()] kex follows: False
2026-04-16T00:47:04.351 [DEBUG] [Thread-28647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:47:04.351 [DEBUG] [Thread-28647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:47:04.351 [DEBUG] [Thread-28647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:47:04.351 [DEBUG] [Thread-28647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:47:04.351 [DEBUG] [Thread-28647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:47:04.351 [DEBUG] [Thread-28647] [transport.py] [_log()] Compression: none
2026-04-16T00:47:04.351 [DEBUG] [Thread-28647] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:47:04.410 [DEBUG] [Thread-28647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:47:04.410 [DEBUG] [Thread-28647] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:47:04.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:47:04.411 [DEBUG] [Thread-28647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:47:04.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:47:04.470 [DEBUG] [Thread-28647] [transport.py] [_log()] userauth is OK
2026-04-16T00:47:04.470 [DEBUG] [Thread-28647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:47:04.470 [DEBUG] [Thread-28647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:47:04.470 [DEBUG] [Thread-28647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:47:04.470 [DEBUG] [Thread-28647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:47:04.495 [INFO] [Thread-28647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:47:04.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:47:04.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:47:05.343 [DEBUG] [Thread-28647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:47:05.344 [DEBUG] [Thread-28647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:47:05.391 [DEBUG] [Thread-28647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:47:05.391 [DEBUG] [Thread-28647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:47:05.400 [DEBUG] [Thread-28647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:47:05.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:47:05.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')
2026-04-16T00:47:05.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
2026-04-16T00:47:05.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:47:05.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:47:05.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:47:05.435 [DEBUG] [Thread-28647] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:47:08.430 [DEBUG] [Thread-28649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:47:23.467 [DEBUG] [Thread-28650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:47:29.322 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:47:29.323 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:47:35.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:47:35.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:47:35.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:47:36.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 46, 24), 3.15657, 80.7441, 0.0, 9.52884, 9.09797, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:47:36.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:46:24
2026-04-16T00:47:37.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:47:37.632 [DEBUG] [Thread-28651] [transport.py] [_log()] starting thread (client mode): 0xee991cc0
2026-04-16T00:47:37.632 [DEBUG] [Thread-28651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:47:37.652 [DEBUG] [Thread-28651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:47:37.652 [INFO] [Thread-28651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:47:37.655 [DEBUG] [Thread-28651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:47:37.655 [DEBUG] [Thread-28651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:47:37.655 [DEBUG] [Thread-28651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:47:37.655 [DEBUG] [Thread-28651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:47:37.655 [DEBUG] [Thread-28651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:47:37.656 [DEBUG] [Thread-28651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:47:37.656 [DEBUG] [Thread-28651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:47:37.656 [DEBUG] [Thread-28651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:47:37.656 [DEBUG] [Thread-28651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:47:37.656 [DEBUG] [Thread-28651] [transport.py] [_log()] client lang: <none>
2026-04-16T00:47:37.656 [DEBUG] [Thread-28651] [transport.py] [_log()] server lang: <none>
2026-04-16T00:47:37.656 [DEBUG] [Thread-28651] [transport.py] [_log()] kex follows: False
2026-04-16T00:47:37.656 [DEBUG] [Thread-28651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:47:37.656 [DEBUG] [Thread-28651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:47:37.656 [DEBUG] [Thread-28651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:47:37.656 [DEBUG] [Thread-28651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:47:37.657 [DEBUG] [Thread-28651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:47:37.657 [DEBUG] [Thread-28651] [transport.py] [_log()] Compression: none
2026-04-16T00:47:37.657 [DEBUG] [Thread-28651] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:47:37.674 [DEBUG] [Thread-28651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:47:37.674 [DEBUG] [Thread-28651] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:47:37.675 [DEBUG] [Thread-28651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:47:37.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:47:37.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:47:37.676 [DEBUG] [Thread-28651] [transport.py] [_log()] userauth is OK
2026-04-16T00:47:37.676 [DEBUG] [Thread-28651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:47:37.676 [DEBUG] [Thread-28651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:47:37.676 [DEBUG] [Thread-28651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:47:37.676 [DEBUG] [Thread-28651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:47:37.701 [INFO] [Thread-28651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:47:37.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:47:38.451 [DEBUG] [Thread-28651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:47:38.451 [DEBUG] [Thread-28651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:47:38.452 [DEBUG] [Thread-28651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:47:38.492 [DEBUG] [Thread-28651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:47:38.492 [DEBUG] [Thread-28651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:47:38.495 [DEBUG] [Thread-28651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:47:38.496 [DEBUG] [Thread-28653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:47:38.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:47:38.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:47:38.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:47:38.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:47:38.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:47:38.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:47:38.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:47:38.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:47:38.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:47:38.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.949091 -999.00   +9.70   7.62     84   +7.10 1 1 1 2 1     0    0 2.33 -13.67 ZNESW 7.2 7.6 94.3 11.1 9.8 -24.9 9.6 -23.8 9.2 -21.5 9.6 -23.5
2026-04-16T00:47:38.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:47:38.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:47:38.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.949091
2026-04-16T00:47:38.519 [DEBUG] [Thread-28651] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:47:38.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:47:38.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:47:38.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:47:38.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:47:38.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:47:38.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:46:24', tmtdew=3.15657, humidity=80.7441, cloud=0.0, wind=9.52884, temperature=9.09797, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:46:41.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06174999999999997, -0.013249999999999318, -0.015499999999999403, -0.009499999999999176, -0.007749999999999702, -0.015000000000000568, -0.014749999999999375, -0.05500000000000149, -0.1095000000000006, 0.003249999999999531, -0.10650000000000048, 0.009000000000000341, 0.0072499999999990905, 0.0015000000000000568, -0.031000000000000583, -0.03775000000000084, -0.05149999999999899, -0.008000000000000895, -0.026750000000001606, -0.0070000000000014495, 0.027749999999999275, 0.022750000000002046, -0.05424999999999969, 0.0039999999999995595, 0.016500000000000625, -0.02874999999999872, -0.018499999999999517, -0.0039999999999995595, 0.05400000000000027, 0.0555000000000021, 0.009000000000000341, -0.045750000000001734], zp_timestamp='2026-04-15T22:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:47:38.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:47:38.763 [DEBUG] [Thread-28655] [transport.py] [_log()] starting thread (client mode): 0xee9918d0
2026-04-16T00:47:38.763 [DEBUG] [Thread-28655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:47:38.777 [DEBUG] [Thread-28655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:47:38.777 [INFO] [Thread-28655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:47:38.784 [DEBUG] [Thread-28655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:47:38.784 [DEBUG] [Thread-28655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:47:38.785 [DEBUG] [Thread-28655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:47:38.785 [DEBUG] [Thread-28655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:47:38.785 [DEBUG] [Thread-28655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:47:38.785 [DEBUG] [Thread-28655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:47:38.785 [DEBUG] [Thread-28655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:47:38.785 [DEBUG] [Thread-28655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:47:38.785 [DEBUG] [Thread-28655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:47:38.785 [DEBUG] [Thread-28655] [transport.py] [_log()] client lang: <none>
2026-04-16T00:47:38.785 [DEBUG] [Thread-28655] [transport.py] [_log()] server lang: <none>
2026-04-16T00:47:38.785 [DEBUG] [Thread-28655] [transport.py] [_log()] kex follows: False
2026-04-16T00:47:38.785 [DEBUG] [Thread-28655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:47:38.785 [DEBUG] [Thread-28655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:47:38.786 [DEBUG] [Thread-28655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:47:38.786 [DEBUG] [Thread-28655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:47:38.786 [DEBUG] [Thread-28655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:47:38.786 [DEBUG] [Thread-28655] [transport.py] [_log()] Compression: none
2026-04-16T00:47:38.786 [DEBUG] [Thread-28655] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:47:38.841 [DEBUG] [Thread-28655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:47:38.842 [DEBUG] [Thread-28655] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:47:38.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:47:38.843 [DEBUG] [Thread-28655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:47:38.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:47:38.898 [DEBUG] [Thread-28655] [transport.py] [_log()] userauth is OK
2026-04-16T00:47:38.898 [DEBUG] [Thread-28655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:47:38.898 [DEBUG] [Thread-28655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:47:38.898 [DEBUG] [Thread-28655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:47:38.898 [DEBUG] [Thread-28655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:47:38.916 [INFO] [Thread-28655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:47:38.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:47:38.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:47:39.777 [DEBUG] [Thread-28655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:47:39.778 [DEBUG] [Thread-28655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:47:39.825 [DEBUG] [Thread-28655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:47:39.825 [DEBUG] [Thread-28655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:47:39.834 [DEBUG] [Thread-28655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:47:39.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:47:39.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')
2026-04-16T00:47:39.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
2026-04-16T00:47:39.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:47:39.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:47:39.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:47:39.869 [DEBUG] [Thread-28655] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:47:48.837 [DEBUG] [Thread-28657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:47:53.528 [DEBUG] [Thread-28658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:48:08.569 [DEBUG] [Thread-28659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:48:09.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:48:09.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:48:09.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
2026-04-16T00:48:11.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 47, 35), 2.69255, 83.185, 0.0, 12.6338, 9.06237, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:48:11.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:47:35
2026-04-16T00:48:11.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:48:12.043 [DEBUG] [Thread-28660] [transport.py] [_log()] starting thread (client mode): 0xee992080
2026-04-16T00:48:12.043 [DEBUG] [Thread-28660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:48:12.058 [DEBUG] [Thread-28660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:48:12.058 [INFO] [Thread-28660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:48:12.062 [DEBUG] [Thread-28660] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:48:12.062 [DEBUG] [Thread-28660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:48:12.062 [DEBUG] [Thread-28660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:48:12.062 [DEBUG] [Thread-28660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:48:12.062 [DEBUG] [Thread-28660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:48:12.062 [DEBUG] [Thread-28660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:48:12.062 [DEBUG] [Thread-28660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:48:12.062 [DEBUG] [Thread-28660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:48:12.062 [DEBUG] [Thread-28660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:48:12.062 [DEBUG] [Thread-28660] [transport.py] [_log()] client lang: <none>
2026-04-16T00:48:12.063 [DEBUG] [Thread-28660] [transport.py] [_log()] server lang: <none>
2026-04-16T00:48:12.063 [DEBUG] [Thread-28660] [transport.py] [_log()] kex follows: False
2026-04-16T00:48:12.063 [DEBUG] [Thread-28660] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:48:12.063 [DEBUG] [Thread-28660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:48:12.063 [DEBUG] [Thread-28660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:48:12.063 [DEBUG] [Thread-28660] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:48:12.063 [DEBUG] [Thread-28660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:48:12.063 [DEBUG] [Thread-28660] [transport.py] [_log()] Compression: none
2026-04-16T00:48:12.063 [DEBUG] [Thread-28660] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:48:12.080 [DEBUG] [Thread-28660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:48:12.080 [DEBUG] [Thread-28660] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:48:12.080 [DEBUG] [Thread-28660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:48:12.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:48:12.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:48:12.082 [DEBUG] [Thread-28660] [transport.py] [_log()] userauth is OK
2026-04-16T00:48:12.082 [DEBUG] [Thread-28660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:48:12.082 [DEBUG] [Thread-28660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:48:12.082 [DEBUG] [Thread-28660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:48:12.082 [DEBUG] [Thread-28660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:48:12.099 [INFO] [Thread-28660] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:48:12.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:48:12.860 [DEBUG] [Thread-28660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:48:12.860 [DEBUG] [Thread-28660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:48:12.860 [DEBUG] [Thread-28660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:48:12.901 [DEBUG] [Thread-28660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:48:12.901 [DEBUG] [Thread-28660] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:48:12.904 [DEBUG] [Thread-28660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:48:12.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:48:12.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:48:12.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:48:12.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:48:12.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:48:12.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:48:12.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:48:12.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:48:12.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:48:12.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.949439 -999.00   +9.60   8.76     83   +7.10 1 1 1 2 1     0    0 2.36 -13.71 ZNESW 7.5 8.8 116.6 14.3 9.8 -25.0 9.6 -23.8 9.2 -21.6 9.7 -23.7
2026-04-16T00:48:12.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:48:12.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:48:12.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.949439
2026-04-16T00:48:12.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:48:12.931 [DEBUG] [Thread-28660] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:48:12.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:48:12.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:48:12.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:48:12.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:48:12.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:47:35', tmtdew=2.69255, humidity=83.185, cloud=0.0, wind=12.6338, temperature=9.06237, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:47:11.530', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06174999999999997, -0.013249999999999318, -0.015499999999999403, -0.009499999999999176, -0.007749999999999702, -0.015000000000000568, -0.014749999999999375, -0.05500000000000149, -0.1095000000000006, 0.003249999999999531, -0.10650000000000048, 0.009000000000000341, 0.0072499999999990905, 0.0015000000000000568, -0.031000000000000583, -0.03775000000000084, -0.05149999999999899, -0.008000000000000895, -0.026750000000001606, -0.0070000000000014495, 0.027749999999999275, 0.022750000000002046, -0.05424999999999969, 0.0039999999999995595, 0.016500000000000625, -0.02874999999999872, -0.018499999999999517, -0.0039999999999995595, 0.05400000000000027, 0.0555000000000021, 0.009000000000000341, -0.045750000000001734], zp_timestamp='2026-04-15T22:44:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:48:13.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:48:13.185 [DEBUG] [Thread-28663] [transport.py] [_log()] starting thread (client mode): 0xf1336560
2026-04-16T00:48:13.185 [DEBUG] [Thread-28663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:48:13.199 [DEBUG] [Thread-28663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:48:13.199 [INFO] [Thread-28663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:48:13.207 [DEBUG] [Thread-28663] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:48:13.207 [DEBUG] [Thread-28663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:48:13.207 [DEBUG] [Thread-28663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:48:13.207 [DEBUG] [Thread-28663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:48:13.207 [DEBUG] [Thread-28663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:48:13.207 [DEBUG] [Thread-28663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:48:13.207 [DEBUG] [Thread-28663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:48:13.207 [DEBUG] [Thread-28663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:48:13.207 [DEBUG] [Thread-28663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:48:13.207 [DEBUG] [Thread-28663] [transport.py] [_log()] client lang: <none>
2026-04-16T00:48:13.207 [DEBUG] [Thread-28663] [transport.py] [_log()] server lang: <none>
2026-04-16T00:48:13.207 [DEBUG] [Thread-28663] [transport.py] [_log()] kex follows: False
2026-04-16T00:48:13.208 [DEBUG] [Thread-28663] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:48:13.208 [DEBUG] [Thread-28663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:48:13.208 [DEBUG] [Thread-28663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:48:13.208 [DEBUG] [Thread-28663] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:48:13.208 [DEBUG] [Thread-28663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:48:13.208 [DEBUG] [Thread-28663] [transport.py] [_log()] Compression: none
2026-04-16T00:48:13.208 [DEBUG] [Thread-28663] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:48:13.267 [DEBUG] [Thread-28663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:48:13.267 [DEBUG] [Thread-28663] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:48:13.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:48:13.268 [DEBUG] [Thread-28663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:48:13.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:48:13.324 [DEBUG] [Thread-28663] [transport.py] [_log()] userauth is OK
2026-04-16T00:48:13.324 [DEBUG] [Thread-28663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:48:13.324 [DEBUG] [Thread-28663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:48:13.324 [DEBUG] [Thread-28663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:48:13.324 [DEBUG] [Thread-28663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:48:13.348 [INFO] [Thread-28663] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:48:13.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:48:13.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:48:14.179 [DEBUG] [Thread-28663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:48:14.180 [DEBUG] [Thread-28663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:48:14.227 [DEBUG] [Thread-28663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:48:14.227 [DEBUG] [Thread-28663] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:48:14.236 [DEBUG] [Thread-28663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:48:14.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:48:14.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')
2026-04-16T00:48:14.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
2026-04-16T00:48:14.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:48:14.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:48:14.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:48:14.271 [DEBUG] [Thread-28663] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:48:23.597 [DEBUG] [Thread-28665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:48:29.525 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:48:29.527 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:48:38.646 [DEBUG] [Thread-28666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:48:44.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:48:44.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:48:44.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:48:45.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 48, 11), 3.02281, 81.2253, 0.0, 10.1462, 9.06462, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:48:45.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:48:11
2026-04-16T00:48:46.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:48:46.511 [DEBUG] [Thread-28667] [transport.py] [_log()] starting thread (client mode): 0xf1334550
2026-04-16T00:48:46.511 [DEBUG] [Thread-28667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:48:46.531 [DEBUG] [Thread-28667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:48:46.531 [INFO] [Thread-28667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:48:46.534 [DEBUG] [Thread-28667] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:48:46.534 [DEBUG] [Thread-28667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:48:46.535 [DEBUG] [Thread-28667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:48:46.535 [DEBUG] [Thread-28667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:48:46.535 [DEBUG] [Thread-28667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:48:46.535 [DEBUG] [Thread-28667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:48:46.535 [DEBUG] [Thread-28667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:48:46.535 [DEBUG] [Thread-28667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:48:46.535 [DEBUG] [Thread-28667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:48:46.535 [DEBUG] [Thread-28667] [transport.py] [_log()] client lang: <none>
2026-04-16T00:48:46.535 [DEBUG] [Thread-28667] [transport.py] [_log()] server lang: <none>
2026-04-16T00:48:46.536 [DEBUG] [Thread-28667] [transport.py] [_log()] kex follows: False
2026-04-16T00:48:46.536 [DEBUG] [Thread-28667] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:48:46.536 [DEBUG] [Thread-28667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:48:46.536 [DEBUG] [Thread-28667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:48:46.536 [DEBUG] [Thread-28667] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:48:46.536 [DEBUG] [Thread-28667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:48:46.536 [DEBUG] [Thread-28667] [transport.py] [_log()] Compression: none
2026-04-16T00:48:46.536 [DEBUG] [Thread-28667] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:48:46.554 [DEBUG] [Thread-28667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:48:46.554 [DEBUG] [Thread-28667] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:48:46.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:48:46.555 [DEBUG] [Thread-28667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:48:46.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:48:46.596 [DEBUG] [Thread-28667] [transport.py] [_log()] userauth is OK
2026-04-16T00:48:46.596 [DEBUG] [Thread-28667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:48:46.597 [DEBUG] [Thread-28667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:48:46.597 [DEBUG] [Thread-28667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:48:46.597 [DEBUG] [Thread-28667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:48:46.621 [INFO] [Thread-28667] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:48:46.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:48:47.420 [DEBUG] [Thread-28667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:48:47.420 [DEBUG] [Thread-28667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:48:47.420 [DEBUG] [Thread-28667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:48:47.461 [DEBUG] [Thread-28667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:48:47.461 [DEBUG] [Thread-28667] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:48:47.464 [DEBUG] [Thread-28667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:48:47.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:48:47.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:48:47.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:48:47.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:48:47.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:48:47.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:48:47.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:48:47.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:48:47.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:48:47.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.950133 -999.00   +9.70   7.60     84   +7.10 1 1 1 2 1     0    0 2.33 -12.17 ZNESW 7.7 7.6 110.4 10.4 9.8 -25.1 9.6 -23.8 9.3 -21.6 9.6 -23.7
2026-04-16T00:48:47.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:48:47.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:48:47.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.950133
2026-04-16T00:48:47.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:48:47.489 [DEBUG] [Thread-28667] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:48:47.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:48:47.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:48:47.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:48:47.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:48:47.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:48:11', tmtdew=3.02281, humidity=81.2253, cloud=0.0, wind=10.1462, temperature=9.06462, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:48:11.491', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06174999999999997, -0.013249999999999318, -0.015499999999999403, -0.009499999999999176, -0.007749999999999702, -0.015000000000000568, -0.014749999999999375, -0.05500000000000149, -0.1095000000000006, 0.003249999999999531, -0.10650000000000048, 0.009000000000000341, 0.0072499999999990905, 0.0015000000000000568, -0.031000000000000583, -0.03775000000000084, -0.05149999999999899, -0.008000000000000895, -0.026750000000001606, -0.0070000000000014495, 0.027749999999999275, 0.022750000000002046, -0.05424999999999969, 0.0039999999999995595, 0.016500000000000625, -0.02874999999999872, -0.018499999999999517, -0.0039999999999995595, 0.05400000000000027, 0.0555000000000021, 0.009000000000000341, -0.045750000000001734], zp_timestamp='2026-04-15T22:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:48:47.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:48:47.747 [DEBUG] [Thread-28670] [transport.py] [_log()] starting thread (client mode): 0xee991300
2026-04-16T00:48:47.747 [DEBUG] [Thread-28670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:48:47.763 [DEBUG] [Thread-28670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:48:47.763 [INFO] [Thread-28670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:48:47.771 [DEBUG] [Thread-28670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:48:47.771 [DEBUG] [Thread-28670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:48:47.771 [DEBUG] [Thread-28670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:48:47.771 [DEBUG] [Thread-28670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:48:47.771 [DEBUG] [Thread-28670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:48:47.771 [DEBUG] [Thread-28670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:48:47.771 [DEBUG] [Thread-28670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:48:47.772 [DEBUG] [Thread-28670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:48:47.772 [DEBUG] [Thread-28670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:48:47.772 [DEBUG] [Thread-28670] [transport.py] [_log()] client lang: <none>
2026-04-16T00:48:47.772 [DEBUG] [Thread-28670] [transport.py] [_log()] server lang: <none>
2026-04-16T00:48:47.772 [DEBUG] [Thread-28670] [transport.py] [_log()] kex follows: False
2026-04-16T00:48:47.772 [DEBUG] [Thread-28670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:48:47.772 [DEBUG] [Thread-28670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:48:47.772 [DEBUG] [Thread-28670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:48:47.773 [DEBUG] [Thread-28670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:48:47.773 [DEBUG] [Thread-28670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:48:47.773 [DEBUG] [Thread-28670] [transport.py] [_log()] Compression: none
2026-04-16T00:48:47.773 [DEBUG] [Thread-28670] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:48:47.829 [DEBUG] [Thread-28670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:48:47.830 [DEBUG] [Thread-28670] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:48:47.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:48:47.830 [DEBUG] [Thread-28670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:48:47.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:48:47.886 [DEBUG] [Thread-28670] [transport.py] [_log()] userauth is OK
2026-04-16T00:48:47.886 [DEBUG] [Thread-28670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:48:47.886 [DEBUG] [Thread-28670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:48:47.886 [DEBUG] [Thread-28670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:48:47.887 [DEBUG] [Thread-28670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:48:47.914 [INFO] [Thread-28670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:48:47.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:48:47.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:48:48.717 [DEBUG] [Thread-28670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:48:48.718 [DEBUG] [Thread-28670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:48:48.765 [DEBUG] [Thread-28670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:48:48.765 [DEBUG] [Thread-28670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:48:48.774 [DEBUG] [Thread-28670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:48:48.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:48:48.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')
2026-04-16T00:48:48.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
2026-04-16T00:48:48.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:48:48.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:48:48.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:48:48.808 [DEBUG] [Thread-28670] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:48:48.982 [DEBUG] [Thread-28672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:48:53.678 [DEBUG] [Thread-28673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:49:08.720 [DEBUG] [Thread-28674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:49:18.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:49:18.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:49:18.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:49:20.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 48, 46), 2.60594, 83.6828, 0.0, 10.4112, 9.06242, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:49:20.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:48:46
2026-04-16T00:49:20.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:49:20.902 [DEBUG] [Thread-28675] [transport.py] [_log()] starting thread (client mode): 0xee9c1ba0
2026-04-16T00:49:20.902 [DEBUG] [Thread-28675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:49:20.921 [DEBUG] [Thread-28675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:49:20.922 [INFO] [Thread-28675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:49:20.925 [DEBUG] [Thread-28675] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:49:20.925 [DEBUG] [Thread-28675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:49:20.925 [DEBUG] [Thread-28675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:49:20.925 [DEBUG] [Thread-28675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:49:20.925 [DEBUG] [Thread-28675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:49:20.925 [DEBUG] [Thread-28675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:49:20.925 [DEBUG] [Thread-28675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:49:20.925 [DEBUG] [Thread-28675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:49:20.925 [DEBUG] [Thread-28675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:49:20.925 [DEBUG] [Thread-28675] [transport.py] [_log()] client lang: <none>
2026-04-16T00:49:20.926 [DEBUG] [Thread-28675] [transport.py] [_log()] server lang: <none>
2026-04-16T00:49:20.926 [DEBUG] [Thread-28675] [transport.py] [_log()] kex follows: False
2026-04-16T00:49:20.926 [DEBUG] [Thread-28675] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:49:20.926 [DEBUG] [Thread-28675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:49:20.926 [DEBUG] [Thread-28675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:49:20.926 [DEBUG] [Thread-28675] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:49:20.926 [DEBUG] [Thread-28675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:49:20.926 [DEBUG] [Thread-28675] [transport.py] [_log()] Compression: none
2026-04-16T00:49:20.926 [DEBUG] [Thread-28675] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:49:20.943 [DEBUG] [Thread-28675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:49:20.943 [DEBUG] [Thread-28675] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:49:20.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:49:20.944 [DEBUG] [Thread-28675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:49:20.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:49:20.945 [DEBUG] [Thread-28675] [transport.py] [_log()] userauth is OK
2026-04-16T00:49:20.945 [DEBUG] [Thread-28675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:49:20.945 [DEBUG] [Thread-28675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:49:20.945 [DEBUG] [Thread-28675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:49:20.945 [DEBUG] [Thread-28675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:49:20.981 [INFO] [Thread-28675] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:49:20.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:49:21.764 [DEBUG] [Thread-28675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:49:21.764 [DEBUG] [Thread-28675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:49:21.765 [DEBUG] [Thread-28675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:49:21.804 [DEBUG] [Thread-28675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:49:21.805 [DEBUG] [Thread-28675] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:49:21.807 [DEBUG] [Thread-28675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:49:21.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:49:21.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:49:21.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:49:21.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:49:21.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:49:21.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:49:21.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:49:21.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:49:21.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:49:21.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.950480 -999.00   +9.70   6.36     84   +7.10 1 1 1 2 1     0    0 2.43 -11.62 ZNESW 6.2 6.4 117.5 8.9 9.8 -25.0 9.7 -23.9 9.3 -21.6 9.6 -23.8
2026-04-16T00:49:21.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:49:21.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:49:21.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.950480
2026-04-16T00:49:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:49:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:49:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:49:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:49:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:49:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:48:46', tmtdew=2.60594, humidity=83.6828, cloud=0.0, wind=10.4112, temperature=9.06242, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:48:41.472', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06174999999999997, -0.013249999999999318, -0.015499999999999403, -0.009499999999999176, -0.007749999999999702, -0.015000000000000568, -0.014749999999999375, -0.05500000000000149, -0.1095000000000006, 0.003249999999999531, -0.10650000000000048, 0.009000000000000341, 0.0072499999999990905, 0.0015000000000000568, -0.031000000000000583, -0.03775000000000084, -0.05149999999999899, -0.008000000000000895, -0.026750000000001606, -0.0070000000000014495, 0.027749999999999275, 0.022750000000002046, -0.05424999999999969, 0.0039999999999995595, 0.016500000000000625, -0.02874999999999872, -0.018499999999999517, -0.0039999999999995595, 0.05400000000000027, 0.0555000000000021, 0.009000000000000341, -0.045750000000001734], zp_timestamp='2026-04-15T22:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:49:21.826 [DEBUG] [Thread-28675] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:49:22.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:49:22.056 [DEBUG] [Thread-28678] [transport.py] [_log()] starting thread (client mode): 0xee9c7490
2026-04-16T00:49:22.056 [DEBUG] [Thread-28678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:49:22.076 [DEBUG] [Thread-28678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:49:22.076 [INFO] [Thread-28678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:49:22.083 [DEBUG] [Thread-28678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:49:22.083 [DEBUG] [Thread-28678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:49:22.083 [DEBUG] [Thread-28678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:49:22.083 [DEBUG] [Thread-28678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:49:22.084 [DEBUG] [Thread-28678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:49:22.084 [DEBUG] [Thread-28678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:49:22.084 [DEBUG] [Thread-28678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:49:22.084 [DEBUG] [Thread-28678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:49:22.084 [DEBUG] [Thread-28678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:49:22.084 [DEBUG] [Thread-28678] [transport.py] [_log()] client lang: <none>
2026-04-16T00:49:22.084 [DEBUG] [Thread-28678] [transport.py] [_log()] server lang: <none>
2026-04-16T00:49:22.084 [DEBUG] [Thread-28678] [transport.py] [_log()] kex follows: False
2026-04-16T00:49:22.084 [DEBUG] [Thread-28678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:49:22.084 [DEBUG] [Thread-28678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:49:22.084 [DEBUG] [Thread-28678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:49:22.085 [DEBUG] [Thread-28678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:49:22.085 [DEBUG] [Thread-28678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:49:22.085 [DEBUG] [Thread-28678] [transport.py] [_log()] Compression: none
2026-04-16T00:49:22.085 [DEBUG] [Thread-28678] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:49:22.146 [DEBUG] [Thread-28678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:49:22.147 [DEBUG] [Thread-28678] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:49:22.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:49:22.147 [DEBUG] [Thread-28678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:49:22.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:49:22.203 [DEBUG] [Thread-28678] [transport.py] [_log()] userauth is OK
2026-04-16T00:49:22.203 [DEBUG] [Thread-28678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:49:22.203 [DEBUG] [Thread-28678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:49:22.204 [DEBUG] [Thread-28678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:49:22.204 [DEBUG] [Thread-28678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:49:22.233 [INFO] [Thread-28678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:49:22.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:49:22.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:49:23.054 [DEBUG] [Thread-28678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:49:23.055 [DEBUG] [Thread-28678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:49:23.102 [DEBUG] [Thread-28678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:49:23.102 [DEBUG] [Thread-28678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:49:23.111 [DEBUG] [Thread-28678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:49:23.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:49: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')
2026-04-16T00:49: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
2026-04-16T00:49:23.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:49:23.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:49:23.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:49:23.146 [DEBUG] [Thread-28678] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:49:23.750 [DEBUG] [Thread-28680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:49:29.730 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:49:29.731 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:49:38.794 [DEBUG] [Thread-28681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:49:49.131 [DEBUG] [Thread-28682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:49:53.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:49:53.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:49:53.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
2026-04-16T00:49:53.826 [DEBUG] [Thread-28683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:49:54.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 49, 22), 2.93603, 81.9409, 0.0, 8.982, 9.1478, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:49:54.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:49:22
2026-04-16T00:49:54.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:49:55.259 [DEBUG] [Thread-28684] [transport.py] [_log()] starting thread (client mode): 0xee9c3e20
2026-04-16T00:49:55.260 [DEBUG] [Thread-28684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:49:55.279 [DEBUG] [Thread-28684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:49:55.279 [INFO] [Thread-28684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:49:55.282 [DEBUG] [Thread-28684] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:49:55.282 [DEBUG] [Thread-28684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:49:55.282 [DEBUG] [Thread-28684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:49:55.282 [DEBUG] [Thread-28684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:49:55.282 [DEBUG] [Thread-28684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:49:55.282 [DEBUG] [Thread-28684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:49:55.282 [DEBUG] [Thread-28684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:49:55.283 [DEBUG] [Thread-28684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:49:55.283 [DEBUG] [Thread-28684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:49:55.283 [DEBUG] [Thread-28684] [transport.py] [_log()] client lang: <none>
2026-04-16T00:49:55.283 [DEBUG] [Thread-28684] [transport.py] [_log()] server lang: <none>
2026-04-16T00:49:55.283 [DEBUG] [Thread-28684] [transport.py] [_log()] kex follows: False
2026-04-16T00:49:55.283 [DEBUG] [Thread-28684] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:49:55.283 [DEBUG] [Thread-28684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:49:55.283 [DEBUG] [Thread-28684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:49:55.283 [DEBUG] [Thread-28684] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:49:55.283 [DEBUG] [Thread-28684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:49:55.283 [DEBUG] [Thread-28684] [transport.py] [_log()] Compression: none
2026-04-16T00:49:55.284 [DEBUG] [Thread-28684] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:49:55.301 [DEBUG] [Thread-28684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:49:55.301 [DEBUG] [Thread-28684] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:49:55.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:49:55.302 [DEBUG] [Thread-28684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:49:55.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:49:55.344 [DEBUG] [Thread-28684] [transport.py] [_log()] userauth is OK
2026-04-16T00:49:55.345 [DEBUG] [Thread-28684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:49:55.345 [DEBUG] [Thread-28684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:49:55.345 [DEBUG] [Thread-28684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:49:55.345 [DEBUG] [Thread-28684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:49:55.369 [INFO] [Thread-28684] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:49:55.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:49:56.119 [DEBUG] [Thread-28684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:49:56.119 [DEBUG] [Thread-28684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:49:56.119 [DEBUG] [Thread-28684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:49:56.159 [DEBUG] [Thread-28684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:49:56.160 [DEBUG] [Thread-28684] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:49:56.161 [DEBUG] [Thread-28684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:49:56.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:49:56.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:49:56.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:49:56.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:49:56.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:49:56.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:49:56.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:49:56.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:49:56.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:49:56.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.950827 -999.00   +9.60   6.19     83   +7.00 1 1 1 2 1     0    0 2.38 -10.28 ZNESW 6.4 6.2 120.2 9.0 9.8 -25.2 9.6 -23.9 9.3 -21.7 9.6 -23.8
2026-04-16T00:49:56.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:49:56.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:49:56.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.950827
2026-04-16T00:49:56.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:49:56.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:49:56.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:49:56.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:49:56.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:49:56.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:49:22', tmtdew=2.93603, humidity=81.9409, cloud=0.0, wind=8.982, temperature=9.1478, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:49:11.453', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06174999999999997, -0.013249999999999318, -0.015499999999999403, -0.009499999999999176, -0.007749999999999702, -0.015000000000000568, -0.014749999999999375, -0.05500000000000149, -0.1095000000000006, 0.003249999999999531, -0.10650000000000048, 0.009000000000000341, 0.0072499999999990905, 0.0015000000000000568, -0.031000000000000583, -0.03775000000000084, -0.05149999999999899, -0.008000000000000895, -0.026750000000001606, -0.0070000000000014495, 0.027749999999999275, 0.022750000000002046, -0.05424999999999969, 0.0039999999999995595, 0.016500000000000625, -0.02874999999999872, -0.018499999999999517, -0.0039999999999995595, 0.05400000000000027, 0.0555000000000021, 0.009000000000000341, -0.045750000000001734], zp_timestamp='2026-04-15T22:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:49:56.174 [DEBUG] [Thread-28684] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:49:56.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:49:56.402 [DEBUG] [Thread-28687] [transport.py] [_log()] starting thread (client mode): 0xee9c33d0
2026-04-16T00:49:56.402 [DEBUG] [Thread-28687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:49:56.416 [DEBUG] [Thread-28687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:49:56.416 [INFO] [Thread-28687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:49:56.423 [DEBUG] [Thread-28687] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:49:56.424 [DEBUG] [Thread-28687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:49:56.424 [DEBUG] [Thread-28687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:49:56.424 [DEBUG] [Thread-28687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:49:56.424 [DEBUG] [Thread-28687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:49:56.424 [DEBUG] [Thread-28687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:49:56.424 [DEBUG] [Thread-28687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:49:56.424 [DEBUG] [Thread-28687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:49:56.424 [DEBUG] [Thread-28687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:49:56.425 [DEBUG] [Thread-28687] [transport.py] [_log()] client lang: <none>
2026-04-16T00:49:56.425 [DEBUG] [Thread-28687] [transport.py] [_log()] server lang: <none>
2026-04-16T00:49:56.425 [DEBUG] [Thread-28687] [transport.py] [_log()] kex follows: False
2026-04-16T00:49:56.425 [DEBUG] [Thread-28687] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:49:56.425 [DEBUG] [Thread-28687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:49:56.425 [DEBUG] [Thread-28687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:49:56.425 [DEBUG] [Thread-28687] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:49:56.425 [DEBUG] [Thread-28687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:49:56.425 [DEBUG] [Thread-28687] [transport.py] [_log()] Compression: none
2026-04-16T00:49:56.426 [DEBUG] [Thread-28687] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:49:56.484 [DEBUG] [Thread-28687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:49:56.484 [DEBUG] [Thread-28687] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:49:56.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:49:56.485 [DEBUG] [Thread-28687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:49:56.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:49:56.541 [DEBUG] [Thread-28687] [transport.py] [_log()] userauth is OK
2026-04-16T00:49:56.541 [DEBUG] [Thread-28687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:49:56.541 [DEBUG] [Thread-28687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:49:56.541 [DEBUG] [Thread-28687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:49:56.541 [DEBUG] [Thread-28687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:49:56.565 [INFO] [Thread-28687] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:49:56.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:49:56.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:49:57.393 [DEBUG] [Thread-28687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:49:57.393 [DEBUG] [Thread-28687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:49:57.441 [DEBUG] [Thread-28687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:49:57.441 [DEBUG] [Thread-28687] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:49:57.450 [DEBUG] [Thread-28687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:49:57.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:49:57.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')
2026-04-16T00:49:57.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
2026-04-16T00:49:57.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:49:57.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:49:57.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:49:57.485 [DEBUG] [Thread-28687] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:50:08.857 [DEBUG] [Thread-28689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:50:24.093 [DEBUG] [Thread-28690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:50:27.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:50:27.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:50:27.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
2026-04-16T00:50:28.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 49, 57), 2.87741, 81.9908, 0.0, 9.6876, 9.14781, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:50:28.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:49:57
2026-04-16T00:50:29.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:50:29.696 [DEBUG] [Thread-28691] [transport.py] [_log()] starting thread (client mode): 0xee991a20
2026-04-16T00:50:29.696 [DEBUG] [Thread-28691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:50:29.716 [DEBUG] [Thread-28691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:50:29.716 [INFO] [Thread-28691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:50:29.719 [DEBUG] [Thread-28691] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:50:29.720 [DEBUG] [Thread-28691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:50:29.720 [DEBUG] [Thread-28691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:50:29.720 [DEBUG] [Thread-28691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:50:29.720 [DEBUG] [Thread-28691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:50:29.720 [DEBUG] [Thread-28691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:50:29.720 [DEBUG] [Thread-28691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:50:29.720 [DEBUG] [Thread-28691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:50:29.720 [DEBUG] [Thread-28691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:50:29.720 [DEBUG] [Thread-28691] [transport.py] [_log()] client lang: <none>
2026-04-16T00:50:29.720 [DEBUG] [Thread-28691] [transport.py] [_log()] server lang: <none>
2026-04-16T00:50:29.720 [DEBUG] [Thread-28691] [transport.py] [_log()] kex follows: False
2026-04-16T00:50:29.721 [DEBUG] [Thread-28691] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:50:29.721 [DEBUG] [Thread-28691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:50:29.721 [DEBUG] [Thread-28691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:50:29.721 [DEBUG] [Thread-28691] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:50:29.721 [DEBUG] [Thread-28691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:50:29.721 [DEBUG] [Thread-28691] [transport.py] [_log()] Compression: none
2026-04-16T00:50:29.721 [DEBUG] [Thread-28691] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:50:29.743 [DEBUG] [Thread-28691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:50:29.743 [DEBUG] [Thread-28691] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:50:29.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:50:29.744 [DEBUG] [Thread-28691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:50:29.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:50:29.745 [DEBUG] [Thread-28691] [transport.py] [_log()] userauth is OK
2026-04-16T00:50:29.745 [DEBUG] [Thread-28691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:50:29.745 [DEBUG] [Thread-28691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:50:29.746 [DEBUG] [Thread-28691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:50:29.746 [DEBUG] [Thread-28691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:50:29.781 [INFO] [Thread-28691] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:50:29.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:50:29.933 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:50:29.934 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:50:30.777 [DEBUG] [Thread-28691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:50:30.778 [DEBUG] [Thread-28691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:50:30.778 [DEBUG] [Thread-28691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:50:30.818 [DEBUG] [Thread-28691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:50:30.818 [DEBUG] [Thread-28691] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:50:30.821 [DEBUG] [Thread-28691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:50:30.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:50:30.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:50:30.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:50:30.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:50:30.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:50:30.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:50:30.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:50:30.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:50:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:50:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.951169 -999.00   +9.60   6.65     84   +7.00 1 1 1 2 1     0    0 2.43 -9.24 ZNESW 7.5 6.7 113.4 9.2 9.8 -25.2 9.6 -23.9 9.3 -21.7 9.6 -24.0
2026-04-16T00:50:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:50:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:50:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.951169
2026-04-16T00:50:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:50:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:50:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:50:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:50:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:50:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:49:57', tmtdew=2.87741, humidity=81.9908, cloud=0.0, wind=9.6876, temperature=9.14781, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:49:41.002', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06174999999999997, -0.013249999999999318, -0.015499999999999403, -0.009499999999999176, -0.007749999999999702, -0.015000000000000568, -0.014749999999999375, -0.05500000000000149, -0.1095000000000006, 0.003249999999999531, -0.10650000000000048, 0.009000000000000341, 0.0072499999999990905, 0.0015000000000000568, -0.031000000000000583, -0.03775000000000084, -0.05149999999999899, -0.008000000000000895, -0.026750000000001606, -0.0070000000000014495, 0.027749999999999275, 0.022750000000002046, -0.05424999999999969, 0.0039999999999995595, 0.016500000000000625, -0.02874999999999872, -0.018499999999999517, -0.0039999999999995595, 0.05400000000000027, 0.0555000000000021, 0.009000000000000341, -0.045750000000001734], zp_timestamp='2026-04-15T22:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:50:30.921 [DEBUG] [Thread-28691] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:50:31.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:50:31.143 [DEBUG] [Thread-28694] [transport.py] [_log()] starting thread (client mode): 0xee993220
2026-04-16T00:50:31.143 [DEBUG] [Thread-28694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:50:31.159 [DEBUG] [Thread-28694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:50:31.159 [INFO] [Thread-28694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:50:31.166 [DEBUG] [Thread-28694] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:50:31.166 [DEBUG] [Thread-28694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:50:31.167 [DEBUG] [Thread-28694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:50:31.167 [DEBUG] [Thread-28694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:50:31.167 [DEBUG] [Thread-28694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:50:31.167 [DEBUG] [Thread-28694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:50:31.167 [DEBUG] [Thread-28694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:50:31.167 [DEBUG] [Thread-28694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:50:31.167 [DEBUG] [Thread-28694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:50:31.167 [DEBUG] [Thread-28694] [transport.py] [_log()] client lang: <none>
2026-04-16T00:50:31.167 [DEBUG] [Thread-28694] [transport.py] [_log()] server lang: <none>
2026-04-16T00:50:31.167 [DEBUG] [Thread-28694] [transport.py] [_log()] kex follows: False
2026-04-16T00:50:31.167 [DEBUG] [Thread-28694] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:50:31.167 [DEBUG] [Thread-28694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:50:31.168 [DEBUG] [Thread-28694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:50:31.168 [DEBUG] [Thread-28694] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:50:31.168 [DEBUG] [Thread-28694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:50:31.168 [DEBUG] [Thread-28694] [transport.py] [_log()] Compression: none
2026-04-16T00:50:31.168 [DEBUG] [Thread-28694] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:50:31.225 [DEBUG] [Thread-28694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:50:31.226 [DEBUG] [Thread-28694] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:50:31.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:50:31.226 [DEBUG] [Thread-28694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:50:31.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:50:31.282 [DEBUG] [Thread-28694] [transport.py] [_log()] userauth is OK
2026-04-16T00:50:31.282 [DEBUG] [Thread-28694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:50:31.283 [DEBUG] [Thread-28694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:50:31.283 [DEBUG] [Thread-28694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:50:31.283 [DEBUG] [Thread-28694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:50:31.308 [INFO] [Thread-28694] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:50:31.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:50:31.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:50:32.211 [DEBUG] [Thread-28694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:50:32.212 [DEBUG] [Thread-28694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:50:32.259 [DEBUG] [Thread-28694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:50:32.259 [DEBUG] [Thread-28694] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:50:32.268 [DEBUG] [Thread-28694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:50:32.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:50:32.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')
2026-04-16T00:50:32.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') -> 00000000
2026-04-16T00:50:32.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:50:32.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:50:32.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:50:32.303 [DEBUG] [Thread-28694] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:50:39.123 [DEBUG] [Thread-28696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:50:49.283 [DEBUG] [Thread-28697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:50:54.169 [DEBUG] [Thread-28698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:51:02.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:51:02.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:51:02.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
2026-04-16T00:51:03.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 50, 32), 2.86594, 82.0571, 0.0, 9.49356, 9.14783, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:51:03.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:50:32
2026-04-16T00:51:03.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:51:04.432 [DEBUG] [Thread-28699] [transport.py] [_log()] starting thread (client mode): 0xee9c39d0
2026-04-16T00:51:04.432 [DEBUG] [Thread-28699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:51:04.446 [DEBUG] [Thread-28699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:51:04.446 [INFO] [Thread-28699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:51:04.449 [DEBUG] [Thread-28699] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:51:04.449 [DEBUG] [Thread-28699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:51:04.449 [DEBUG] [Thread-28699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:51:04.449 [DEBUG] [Thread-28699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:51:04.449 [DEBUG] [Thread-28699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:51:04.450 [DEBUG] [Thread-28699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:51:04.450 [DEBUG] [Thread-28699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:51:04.450 [DEBUG] [Thread-28699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:51:04.450 [DEBUG] [Thread-28699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:51:04.450 [DEBUG] [Thread-28699] [transport.py] [_log()] client lang: <none>
2026-04-16T00:51:04.450 [DEBUG] [Thread-28699] [transport.py] [_log()] server lang: <none>
2026-04-16T00:51:04.450 [DEBUG] [Thread-28699] [transport.py] [_log()] kex follows: False
2026-04-16T00:51:04.450 [DEBUG] [Thread-28699] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:51:04.450 [DEBUG] [Thread-28699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:51:04.450 [DEBUG] [Thread-28699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:51:04.450 [DEBUG] [Thread-28699] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:51:04.450 [DEBUG] [Thread-28699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:51:04.450 [DEBUG] [Thread-28699] [transport.py] [_log()] Compression: none
2026-04-16T00:51:04.450 [DEBUG] [Thread-28699] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:51:04.466 [DEBUG] [Thread-28699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:51:04.466 [DEBUG] [Thread-28699] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:51:04.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:51:04.467 [DEBUG] [Thread-28699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:51:04.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:51:04.468 [DEBUG] [Thread-28699] [transport.py] [_log()] userauth is OK
2026-04-16T00:51:04.468 [DEBUG] [Thread-28699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:51:04.468 [DEBUG] [Thread-28699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:51:04.468 [DEBUG] [Thread-28699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:51:04.468 [DEBUG] [Thread-28699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:51:04.486 [INFO] [Thread-28699] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:51:04.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:51:05.262 [DEBUG] [Thread-28699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:51:05.263 [DEBUG] [Thread-28699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:51:05.263 [DEBUG] [Thread-28699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:51:05.303 [DEBUG] [Thread-28699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:51:05.303 [DEBUG] [Thread-28699] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:51:05.306 [DEBUG] [Thread-28699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:51:05.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:51:05.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:51:05.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:51:05.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:51:05.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:51:05.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:51:05.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:51:05.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:51:05.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:51:05.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.951522 -999.00   +9.60   7.78     84   +7.10 1 1 1 2 1     0    0 2.49 -8.60 ZNESW 8.5 7.8 122.2 12.0 9.8 -25.1 9.6 -23.9 9.3 -21.7 9.7 -23.8
2026-04-16T00:51:05.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:51:05.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:51:05.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.951522
2026-04-16T00:51:05.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:51:05.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:51:05.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:51:05.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:51:05.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:51:05.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:50:32', tmtdew=2.86594, humidity=82.0571, cloud=0.0, wind=9.49356, temperature=9.14783, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:50:11.501', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06174999999999997, -0.013249999999999318, -0.015499999999999403, -0.009499999999999176, -0.007749999999999702, -0.015000000000000568, -0.014749999999999375, -0.05500000000000149, -0.1095000000000006, 0.003249999999999531, -0.10650000000000048, 0.009000000000000341, 0.0072499999999990905, 0.0015000000000000568, -0.031000000000000583, -0.03775000000000084, -0.05149999999999899, -0.008000000000000895, -0.026750000000001606, -0.0070000000000014495, 0.027749999999999275, 0.022750000000002046, -0.05424999999999969, 0.0039999999999995595, 0.016500000000000625, -0.02874999999999872, -0.018499999999999517, -0.0039999999999995595, 0.05400000000000027, 0.0555000000000021, 0.009000000000000341, -0.045750000000001734], zp_timestamp='2026-04-15T22:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:51:05.332 [DEBUG] [Thread-28699] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:51:05.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:51:05.604 [DEBUG] [Thread-28702] [transport.py] [_log()] starting thread (client mode): 0xee9c3010
2026-04-16T00:51:05.604 [DEBUG] [Thread-28702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:51:05.619 [DEBUG] [Thread-28702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:51:05.619 [INFO] [Thread-28702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:51:05.626 [DEBUG] [Thread-28702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:51:05.626 [DEBUG] [Thread-28702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:51:05.626 [DEBUG] [Thread-28702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:51:05.626 [DEBUG] [Thread-28702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:51:05.626 [DEBUG] [Thread-28702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:51:05.627 [DEBUG] [Thread-28702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:51:05.627 [DEBUG] [Thread-28702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:51:05.627 [DEBUG] [Thread-28702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:51:05.627 [DEBUG] [Thread-28702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:51:05.627 [DEBUG] [Thread-28702] [transport.py] [_log()] client lang: <none>
2026-04-16T00:51:05.627 [DEBUG] [Thread-28702] [transport.py] [_log()] server lang: <none>
2026-04-16T00:51:05.627 [DEBUG] [Thread-28702] [transport.py] [_log()] kex follows: False
2026-04-16T00:51:05.627 [DEBUG] [Thread-28702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:51:05.627 [DEBUG] [Thread-28702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:51:05.627 [DEBUG] [Thread-28702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:51:05.628 [DEBUG] [Thread-28702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:51:05.628 [DEBUG] [Thread-28702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:51:05.628 [DEBUG] [Thread-28702] [transport.py] [_log()] Compression: none
2026-04-16T00:51:05.628 [DEBUG] [Thread-28702] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:51:05.688 [DEBUG] [Thread-28702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:51:05.688 [DEBUG] [Thread-28702] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:51:05.689 [DEBUG] [Thread-28702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:51:05.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:51:05.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:51:05.744 [DEBUG] [Thread-28702] [transport.py] [_log()] userauth is OK
2026-04-16T00:51:05.744 [DEBUG] [Thread-28702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:51:05.745 [DEBUG] [Thread-28702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:51:05.745 [DEBUG] [Thread-28702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:51:05.745 [DEBUG] [Thread-28702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:51:05.770 [INFO] [Thread-28702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:51:05.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:51:05.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:51:06.596 [DEBUG] [Thread-28702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:51:06.597 [DEBUG] [Thread-28702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:51:06.644 [DEBUG] [Thread-28702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:51:06.644 [DEBUG] [Thread-28702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:51:06.653 [DEBUG] [Thread-28702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:51:06.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:51:06.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')
2026-04-16T00:51:06.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
2026-04-16T00:51:06.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:51:06.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:51:06.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:51:06.687 [DEBUG] [Thread-28702] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:51:09.200 [DEBUG] [Thread-28704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:51:24.241 [DEBUG] [Thread-28705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:51:30.135 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:51:30.135 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:51:36.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:51:36.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:51:36.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
2026-04-16T00:51:37.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 51, 8), 2.85225, 82.1401, 0.0, 10.3756, 9.18102, 0, 1, 0, 2, 0, 0),)
2026-04-16T00:51:37.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:51:08
2026-04-16T00:51:38.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:51:38.809 [DEBUG] [Thread-28706] [transport.py] [_log()] starting thread (client mode): 0xee9c7e50
2026-04-16T00:51:38.809 [DEBUG] [Thread-28706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:51:38.829 [DEBUG] [Thread-28706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:51:38.830 [INFO] [Thread-28706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:51:38.833 [DEBUG] [Thread-28706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:51:38.833 [DEBUG] [Thread-28706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:51:38.833 [DEBUG] [Thread-28706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:51:38.833 [DEBUG] [Thread-28706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:51:38.833 [DEBUG] [Thread-28706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:51:38.833 [DEBUG] [Thread-28706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:51:38.833 [DEBUG] [Thread-28706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:51:38.833 [DEBUG] [Thread-28706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:51:38.833 [DEBUG] [Thread-28706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:51:38.833 [DEBUG] [Thread-28706] [transport.py] [_log()] client lang: <none>
2026-04-16T00:51:38.834 [DEBUG] [Thread-28706] [transport.py] [_log()] server lang: <none>
2026-04-16T00:51:38.834 [DEBUG] [Thread-28706] [transport.py] [_log()] kex follows: False
2026-04-16T00:51:38.834 [DEBUG] [Thread-28706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:51:38.834 [DEBUG] [Thread-28706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:51:38.834 [DEBUG] [Thread-28706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:51:38.834 [DEBUG] [Thread-28706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:51:38.834 [DEBUG] [Thread-28706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:51:38.834 [DEBUG] [Thread-28706] [transport.py] [_log()] Compression: none
2026-04-16T00:51:38.834 [DEBUG] [Thread-28706] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:51:38.850 [DEBUG] [Thread-28706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:51:38.851 [DEBUG] [Thread-28706] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:51:38.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:51:38.851 [DEBUG] [Thread-28706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:51:38.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:51:38.852 [DEBUG] [Thread-28706] [transport.py] [_log()] userauth is OK
2026-04-16T00:51:38.852 [DEBUG] [Thread-28706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:51:38.852 [DEBUG] [Thread-28706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:51:38.852 [DEBUG] [Thread-28706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:51:38.852 [DEBUG] [Thread-28706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:51:38.865 [INFO] [Thread-28706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:51:38.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:51:39.272 [DEBUG] [Thread-28708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:51:39.637 [DEBUG] [Thread-28706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:51:39.638 [DEBUG] [Thread-28706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:51:39.638 [DEBUG] [Thread-28706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:51:39.678 [DEBUG] [Thread-28706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:51:39.678 [DEBUG] [Thread-28706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:51:39.681 [DEBUG] [Thread-28706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:51:39.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:51:39.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:51:39.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:51:39.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:51:39.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:51:39.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:51:39.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:51:39.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:51:39.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:51:39.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.951869 -999.00   +9.50   7.57     84   +7.10 1 1 1 2 1     0    0 2.50 -8.25 ZNESW 5.2 7.6 122.2 10.9 9.8 -25.2 9.6 -24.0 9.3 -21.7 9.6 -23.8
2026-04-16T00:51:39.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:51:39.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:51:39.703 [DEBUG] [Thread-28706] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:51:39.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.951869
2026-04-16T00:51:39.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:51:39.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:51:39.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:51:39.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:51:39.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:51:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:51:08', tmtdew=2.85225, humidity=82.1401, cloud=0.0, wind=10.3756, temperature=9.18102, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:50:41.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.13724999999999987, -0.018749999999998934, 0.004999999999999005, 0.03250000000000064, 0.016250000000001208, 0.014999999999998792, -0.03974999999999973, -0.045000000000001705, -0.10899999999999821, -0.0017500000000012506, -0.10449999999999982, -0.0034999999999989484, 0.023249999999999105, -0.0030000000000001137, -0.03500000000000014, -0.005749999999999034, -0.059499999999999886, 0.013999999999999346, -0.034750000000000725, -0.002000000000000668, 0.04174999999999862, 0.0007500000000000284, -0.05925000000000047, -0.036500000000001975, -0.018499999999999517, -0.004250000000000753, -0.016500000000000625, -0.0235000000000003, 0.040500000000001535, 0.04800000000000182, 0.03300000000000125, -0.04725000000000179], zp_timestamp='2026-04-15T22:50:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:51:39.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:51:39.959 [DEBUG] [Thread-28710] [transport.py] [_log()] starting thread (client mode): 0xee9c2830
2026-04-16T00:51:39.959 [DEBUG] [Thread-28710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:51:39.973 [DEBUG] [Thread-28710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:51:39.974 [INFO] [Thread-28710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:51:39.981 [DEBUG] [Thread-28710] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:51:39.981 [DEBUG] [Thread-28710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:51:39.981 [DEBUG] [Thread-28710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:51:39.981 [DEBUG] [Thread-28710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:51:39.981 [DEBUG] [Thread-28710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:51:39.981 [DEBUG] [Thread-28710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:51:39.981 [DEBUG] [Thread-28710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:51:39.981 [DEBUG] [Thread-28710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:51:39.982 [DEBUG] [Thread-28710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:51:39.982 [DEBUG] [Thread-28710] [transport.py] [_log()] client lang: <none>
2026-04-16T00:51:39.982 [DEBUG] [Thread-28710] [transport.py] [_log()] server lang: <none>
2026-04-16T00:51:39.982 [DEBUG] [Thread-28710] [transport.py] [_log()] kex follows: False
2026-04-16T00:51:39.982 [DEBUG] [Thread-28710] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:51:39.982 [DEBUG] [Thread-28710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:51:39.982 [DEBUG] [Thread-28710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:51:39.982 [DEBUG] [Thread-28710] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:51:39.982 [DEBUG] [Thread-28710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:51:39.982 [DEBUG] [Thread-28710] [transport.py] [_log()] Compression: none
2026-04-16T00:51:39.982 [DEBUG] [Thread-28710] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:51:40.037 [DEBUG] [Thread-28710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:51:40.038 [DEBUG] [Thread-28710] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:51:40.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:51:40.038 [DEBUG] [Thread-28710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:51:40.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:51:40.094 [DEBUG] [Thread-28710] [transport.py] [_log()] userauth is OK
2026-04-16T00:51:40.094 [DEBUG] [Thread-28710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:51:40.095 [DEBUG] [Thread-28710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:51:40.095 [DEBUG] [Thread-28710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:51:40.095 [DEBUG] [Thread-28710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:51:40.123 [INFO] [Thread-28710] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:51:40.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:51:40.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:51:40.936 [DEBUG] [Thread-28710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:51:40.936 [DEBUG] [Thread-28710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:51:40.984 [DEBUG] [Thread-28710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:51:40.984 [DEBUG] [Thread-28710] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:51:40.993 [DEBUG] [Thread-28710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:51:41.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:51:41.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')
2026-04-16T00:51:41.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
2026-04-16T00:51:41.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:51:41.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:51:41.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:51:41.028 [DEBUG] [Thread-28710] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:51:49.430 [DEBUG] [Thread-28712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:51:54.304 [DEBUG] [Thread-28713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:52:09.348 [DEBUG] [Thread-28714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:52:11.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:52:11.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:52:11.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
2026-04-16T00:52:12.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 51, 43), 1.24621, 92.1733, 0.0, 14.2214, 4.36443, 2, 2, 0, 2, 0, 0),)
2026-04-16T00:52:12.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:51:43
2026-04-16T00:52:12.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:52:13.145 [DEBUG] [Thread-28715] [transport.py] [_log()] starting thread (client mode): 0xf13e2f50
2026-04-16T00:52:13.145 [DEBUG] [Thread-28715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:52:13.164 [DEBUG] [Thread-28715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:52:13.164 [INFO] [Thread-28715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:52:13.167 [DEBUG] [Thread-28715] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:52:13.167 [DEBUG] [Thread-28715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:52:13.167 [DEBUG] [Thread-28715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:52:13.168 [DEBUG] [Thread-28715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:52:13.168 [DEBUG] [Thread-28715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:52:13.168 [DEBUG] [Thread-28715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:52:13.168 [DEBUG] [Thread-28715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:52:13.168 [DEBUG] [Thread-28715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:52:13.168 [DEBUG] [Thread-28715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:52:13.168 [DEBUG] [Thread-28715] [transport.py] [_log()] client lang: <none>
2026-04-16T00:52:13.168 [DEBUG] [Thread-28715] [transport.py] [_log()] server lang: <none>
2026-04-16T00:52:13.168 [DEBUG] [Thread-28715] [transport.py] [_log()] kex follows: False
2026-04-16T00:52:13.168 [DEBUG] [Thread-28715] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:52:13.168 [DEBUG] [Thread-28715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:52:13.168 [DEBUG] [Thread-28715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:52:13.169 [DEBUG] [Thread-28715] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:52:13.169 [DEBUG] [Thread-28715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:52:13.169 [DEBUG] [Thread-28715] [transport.py] [_log()] Compression: none
2026-04-16T00:52:13.169 [DEBUG] [Thread-28715] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:52:13.188 [DEBUG] [Thread-28715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:52:13.188 [DEBUG] [Thread-28715] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:52:13.189 [DEBUG] [Thread-28715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:52:13.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:52:13.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:52:13.190 [DEBUG] [Thread-28715] [transport.py] [_log()] userauth is OK
2026-04-16T00:52:13.190 [DEBUG] [Thread-28715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:52:13.190 [DEBUG] [Thread-28715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:52:13.190 [DEBUG] [Thread-28715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:52:13.190 [DEBUG] [Thread-28715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:52:13.225 [INFO] [Thread-28715] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:52:13.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:52:14.000 [DEBUG] [Thread-28715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:52:14.000 [DEBUG] [Thread-28715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:52:14.001 [DEBUG] [Thread-28715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:52:14.041 [DEBUG] [Thread-28715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:52:14.041 [DEBUG] [Thread-28715] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:52:14.043 [DEBUG] [Thread-28715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:52:14.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:52:14.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:52:14.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:52:14.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:52:14.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:52:14.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:52:14.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:52:14.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:52:14.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:52:14.064 [DEBUG] [Thread-28715] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:52:14.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.952558 -999.00   +9.50   7.30     85   +7.10 1 1 1 2 1     0    0 2.46 -8.30 ZNESW 4.4 7.3 76.4 9.6 9.8 -25.0 9.6 -23.7 9.3 -21.8 9.6 -23.7
2026-04-16T00:52:14.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:52:14.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:52:14.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.952558
2026-04-16T00:52:14.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:52:14.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:52:14.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:52:14.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:52:14.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:52:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:51:43', tmtdew=1.24621, humidity=92.1733, cloud=0.0, wind=14.2214, temperature=4.36443, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:51:41.011', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.13724999999999987, -0.018749999999998934, 0.004999999999999005, 0.03250000000000064, 0.016250000000001208, 0.014999999999998792, -0.03974999999999973, -0.045000000000001705, -0.10899999999999821, -0.0017500000000012506, -0.10449999999999982, -0.0034999999999989484, 0.023249999999999105, -0.0030000000000001137, -0.03500000000000014, -0.005749999999999034, -0.059499999999999886, 0.013999999999999346, -0.034750000000000725, -0.002000000000000668, 0.04174999999999862, 0.0007500000000000284, -0.05925000000000047, -0.036500000000001975, -0.018499999999999517, -0.004250000000000753, -0.016500000000000625, -0.0235000000000003, 0.040500000000001535, 0.04800000000000182, 0.03300000000000125, -0.04725000000000179], zp_timestamp='2026-04-15T22:50:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:52:14.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:52:14.321 [DEBUG] [Thread-28718] [transport.py] [_log()] starting thread (client mode): 0xee9541f0
2026-04-16T00:52:14.321 [DEBUG] [Thread-28718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:52:14.335 [DEBUG] [Thread-28718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:52:14.335 [INFO] [Thread-28718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:52:14.342 [DEBUG] [Thread-28718] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:52:14.342 [DEBUG] [Thread-28718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:52:14.343 [DEBUG] [Thread-28718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:52:14.343 [DEBUG] [Thread-28718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:52:14.343 [DEBUG] [Thread-28718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:52:14.343 [DEBUG] [Thread-28718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:52:14.343 [DEBUG] [Thread-28718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:52:14.343 [DEBUG] [Thread-28718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:52:14.343 [DEBUG] [Thread-28718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:52:14.343 [DEBUG] [Thread-28718] [transport.py] [_log()] client lang: <none>
2026-04-16T00:52:14.343 [DEBUG] [Thread-28718] [transport.py] [_log()] server lang: <none>
2026-04-16T00:52:14.343 [DEBUG] [Thread-28718] [transport.py] [_log()] kex follows: False
2026-04-16T00:52:14.343 [DEBUG] [Thread-28718] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:52:14.343 [DEBUG] [Thread-28718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:52:14.344 [DEBUG] [Thread-28718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:52:14.344 [DEBUG] [Thread-28718] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:52:14.344 [DEBUG] [Thread-28718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:52:14.344 [DEBUG] [Thread-28718] [transport.py] [_log()] Compression: none
2026-04-16T00:52:14.344 [DEBUG] [Thread-28718] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:52:14.400 [DEBUG] [Thread-28718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:52:14.401 [DEBUG] [Thread-28718] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:52:14.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:52:14.401 [DEBUG] [Thread-28718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:52:14.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:52:14.457 [DEBUG] [Thread-28718] [transport.py] [_log()] userauth is OK
2026-04-16T00:52:14.458 [DEBUG] [Thread-28718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:52:14.458 [DEBUG] [Thread-28718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:52:14.458 [DEBUG] [Thread-28718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:52:14.458 [DEBUG] [Thread-28718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:52:14.485 [INFO] [Thread-28718] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:52:14.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:52:14.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:52:15.333 [DEBUG] [Thread-28718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:52:15.333 [DEBUG] [Thread-28718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:52:15.381 [DEBUG] [Thread-28718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:52:15.381 [DEBUG] [Thread-28718] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:52:15.390 [DEBUG] [Thread-28718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:52:15.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:52:15.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')
2026-04-16T00:52:15.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
2026-04-16T00:52:15.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:52:15.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:52:15.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:52:15.425 [DEBUG] [Thread-28718] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:52:24.379 [DEBUG] [Thread-28720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:52:30.335 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:52:30.336 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:52:39.426 [DEBUG] [Thread-28721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:52:45.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:52:45.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:52:45.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
2026-04-16T00:52:46.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 52, 19), 1.82492, 88.8151, 0.0, 10.2168, 6.03173, 1, 1, 0, 2, 0, 0),)
2026-04-16T00:52:46.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:52:19
2026-04-16T00:52:47.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:52:47.650 [DEBUG] [Thread-28722] [transport.py] [_log()] starting thread (client mode): 0xee9c1150
2026-04-16T00:52:47.651 [DEBUG] [Thread-28722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:52:47.670 [DEBUG] [Thread-28722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:52:47.670 [INFO] [Thread-28722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:52:47.673 [DEBUG] [Thread-28722] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:52:47.673 [DEBUG] [Thread-28722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:52:47.673 [DEBUG] [Thread-28722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:52:47.673 [DEBUG] [Thread-28722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:52:47.674 [DEBUG] [Thread-28722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:52:47.674 [DEBUG] [Thread-28722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:52:47.674 [DEBUG] [Thread-28722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:52:47.674 [DEBUG] [Thread-28722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:52:47.674 [DEBUG] [Thread-28722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:52:47.674 [DEBUG] [Thread-28722] [transport.py] [_log()] client lang: <none>
2026-04-16T00:52:47.674 [DEBUG] [Thread-28722] [transport.py] [_log()] server lang: <none>
2026-04-16T00:52:47.674 [DEBUG] [Thread-28722] [transport.py] [_log()] kex follows: False
2026-04-16T00:52:47.674 [DEBUG] [Thread-28722] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:52:47.674 [DEBUG] [Thread-28722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:52:47.674 [DEBUG] [Thread-28722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:52:47.674 [DEBUG] [Thread-28722] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:52:47.675 [DEBUG] [Thread-28722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:52:47.675 [DEBUG] [Thread-28722] [transport.py] [_log()] Compression: none
2026-04-16T00:52:47.675 [DEBUG] [Thread-28722] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:52:47.692 [DEBUG] [Thread-28722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:52:47.692 [DEBUG] [Thread-28722] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:52:47.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:52:47.693 [DEBUG] [Thread-28722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:52:47.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:52:47.694 [DEBUG] [Thread-28722] [transport.py] [_log()] userauth is OK
2026-04-16T00:52:47.694 [DEBUG] [Thread-28722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:52:47.694 [DEBUG] [Thread-28722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:52:47.694 [DEBUG] [Thread-28722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:52:47.694 [DEBUG] [Thread-28722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:52:47.720 [INFO] [Thread-28722] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:52:47.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:52:48.504 [DEBUG] [Thread-28722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:52:48.504 [DEBUG] [Thread-28722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:52:48.505 [DEBUG] [Thread-28722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:52:48.545 [DEBUG] [Thread-28722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:52:48.545 [DEBUG] [Thread-28722] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:52:48.548 [DEBUG] [Thread-28722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:52:48.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:52:48.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:52:48.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:52:48.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:52:48.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:52:48.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:52:48.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:52:48.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:52:48.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:52:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.952911 -999.00   +9.50   6.39     85   +7.20 1 1 1 2 1     0    0 2.42 -8.81 ZNESW 6.7 6.4 106.2 12.7 9.8 -25.3 9.6 -24.0 9.3 -21.7 9.6 -23.8
2026-04-16T00:52:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:52:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:52:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.952911
2026-04-16T00:52:48.569 [DEBUG] [Thread-28722] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:52:48.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:52:48.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:52:48.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:52:48.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:52:48.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:52:48.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:52:19', tmtdew=1.82492, humidity=88.8151, cloud=0.0, wind=10.2168, temperature=6.03173, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:52:11.510', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.13724999999999987, -0.018749999999998934, 0.004999999999999005, 0.03250000000000064, 0.016250000000001208, 0.014999999999998792, -0.03974999999999973, -0.045000000000001705, -0.10899999999999821, -0.0017500000000012506, -0.10449999999999982, -0.0034999999999989484, 0.023249999999999105, -0.0030000000000001137, -0.03500000000000014, -0.005749999999999034, -0.059499999999999886, 0.013999999999999346, -0.034750000000000725, -0.002000000000000668, 0.04174999999999862, 0.0007500000000000284, -0.05925000000000047, -0.036500000000001975, -0.018499999999999517, -0.004250000000000753, -0.016500000000000625, -0.0235000000000003, 0.040500000000001535, 0.04800000000000182, 0.03300000000000125, -0.04725000000000179], zp_timestamp='2026-04-15T22:50:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:52:48.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:52:48.830 [DEBUG] [Thread-28725] [transport.py] [_log()] starting thread (client mode): 0xee9c0f70
2026-04-16T00:52:48.830 [DEBUG] [Thread-28725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:52:48.845 [DEBUG] [Thread-28725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:52:48.845 [INFO] [Thread-28725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:52:48.853 [DEBUG] [Thread-28725] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:52:48.853 [DEBUG] [Thread-28725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:52:48.853 [DEBUG] [Thread-28725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:52:48.853 [DEBUG] [Thread-28725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:52:48.853 [DEBUG] [Thread-28725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:52:48.853 [DEBUG] [Thread-28725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:52:48.853 [DEBUG] [Thread-28725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:52:48.854 [DEBUG] [Thread-28725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:52:48.854 [DEBUG] [Thread-28725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:52:48.854 [DEBUG] [Thread-28725] [transport.py] [_log()] client lang: <none>
2026-04-16T00:52:48.854 [DEBUG] [Thread-28725] [transport.py] [_log()] server lang: <none>
2026-04-16T00:52:48.854 [DEBUG] [Thread-28725] [transport.py] [_log()] kex follows: False
2026-04-16T00:52:48.854 [DEBUG] [Thread-28725] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:52:48.854 [DEBUG] [Thread-28725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:52:48.854 [DEBUG] [Thread-28725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:52:48.854 [DEBUG] [Thread-28725] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:52:48.854 [DEBUG] [Thread-28725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:52:48.854 [DEBUG] [Thread-28725] [transport.py] [_log()] Compression: none
2026-04-16T00:52:48.854 [DEBUG] [Thread-28725] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:52:48.909 [DEBUG] [Thread-28725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:52:48.910 [DEBUG] [Thread-28725] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:52:48.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:52:48.910 [DEBUG] [Thread-28725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:52:48.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:52:48.967 [DEBUG] [Thread-28725] [transport.py] [_log()] userauth is OK
2026-04-16T00:52:48.967 [DEBUG] [Thread-28725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:52:48.967 [DEBUG] [Thread-28725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:52:48.967 [DEBUG] [Thread-28725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:52:48.967 [DEBUG] [Thread-28725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:52:48.985 [INFO] [Thread-28725] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:52:48.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:52:48.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:52:49.594 [DEBUG] [Thread-28727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:52:49.832 [DEBUG] [Thread-28725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:52:49.833 [DEBUG] [Thread-28725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:52:49.880 [DEBUG] [Thread-28725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:52:49.880 [DEBUG] [Thread-28725] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:52:49.889 [DEBUG] [Thread-28725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:52:49.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:52:49.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')
2026-04-16T00:52:49.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-16T00:52:49.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:52:49.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:52:49.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:52:49.923 [DEBUG] [Thread-28725] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:52:54.455 [DEBUG] [Thread-28728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:52:55.703 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:53:09.501 [DEBUG] [Thread-28729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:53:19.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:53:19.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:53:19.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
2026-04-16T00:53:21.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 52, 55), 1.22217, 92.3057, 0.0, 13.3394, 4.29789, 2, 2, 0, 2, 0, 0),)
2026-04-16T00:53:21.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:52:55
2026-04-16T00:53:21.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:53:22.002 [DEBUG] [Thread-28730] [transport.py] [_log()] starting thread (client mode): 0xf13e1360
2026-04-16T00:53:22.003 [DEBUG] [Thread-28730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:53:22.022 [DEBUG] [Thread-28730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:53:22.022 [INFO] [Thread-28730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:53:22.025 [DEBUG] [Thread-28730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:53:22.025 [DEBUG] [Thread-28730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:53:22.026 [DEBUG] [Thread-28730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:53:22.026 [DEBUG] [Thread-28730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:53:22.026 [DEBUG] [Thread-28730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:53:22.026 [DEBUG] [Thread-28730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:53:22.026 [DEBUG] [Thread-28730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:53:22.026 [DEBUG] [Thread-28730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:53:22.026 [DEBUG] [Thread-28730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:53:22.026 [DEBUG] [Thread-28730] [transport.py] [_log()] client lang: <none>
2026-04-16T00:53:22.026 [DEBUG] [Thread-28730] [transport.py] [_log()] server lang: <none>
2026-04-16T00:53:22.026 [DEBUG] [Thread-28730] [transport.py] [_log()] kex follows: False
2026-04-16T00:53:22.027 [DEBUG] [Thread-28730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:53:22.027 [DEBUG] [Thread-28730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:53:22.027 [DEBUG] [Thread-28730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:53:22.027 [DEBUG] [Thread-28730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:53:22.027 [DEBUG] [Thread-28730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:53:22.027 [DEBUG] [Thread-28730] [transport.py] [_log()] Compression: none
2026-04-16T00:53:22.027 [DEBUG] [Thread-28730] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:53:22.046 [DEBUG] [Thread-28730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:53:22.046 [DEBUG] [Thread-28730] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:53:22.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:53:22.047 [DEBUG] [Thread-28730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:53:22.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:53:22.048 [DEBUG] [Thread-28730] [transport.py] [_log()] userauth is OK
2026-04-16T00:53:22.048 [DEBUG] [Thread-28730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:53:22.048 [DEBUG] [Thread-28730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:53:22.048 [DEBUG] [Thread-28730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:53:22.049 [DEBUG] [Thread-28730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:53:22.075 [INFO] [Thread-28730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:53:22.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:53:22.865 [DEBUG] [Thread-28730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:53:22.866 [DEBUG] [Thread-28730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:53:22.866 [DEBUG] [Thread-28730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:53:22.906 [DEBUG] [Thread-28730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:53:22.906 [DEBUG] [Thread-28730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:53:22.909 [DEBUG] [Thread-28730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:53:22.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:53:22.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:53:22.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:53:22.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:53:22.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:53:22.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:53:22.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:53:22.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:53:22.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:53:22.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.953258 -999.00   +9.50   8.91     85   +7.30 1 1 1 2 1     0    0 2.35 -10.04 ZNESW 9.2 8.9 108.1 11.8 9.8 -25.1 9.6 -24.0 9.3 -21.8 9.7 -23.8
2026-04-16T00:53:22.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:53:22.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:53:22.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.953258
2026-04-16T00:53:22.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:53:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:53:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:53:22.933 [DEBUG] [Thread-28730] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:53:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:53:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:53:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:52:55', tmtdew=1.22217, humidity=92.3057, cloud=0.0, wind=13.3394, temperature=4.29789, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:52:41.491', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.13724999999999987, -0.018749999999998934, 0.004999999999999005, 0.03250000000000064, 0.016250000000001208, 0.014999999999998792, -0.03974999999999973, -0.045000000000001705, -0.10899999999999821, -0.0017500000000012506, -0.10449999999999982, -0.0034999999999989484, 0.023249999999999105, -0.0030000000000001137, -0.03500000000000014, -0.005749999999999034, -0.059499999999999886, 0.013999999999999346, -0.034750000000000725, -0.002000000000000668, 0.04174999999999862, 0.0007500000000000284, -0.05925000000000047, -0.036500000000001975, -0.018499999999999517, -0.004250000000000753, -0.016500000000000625, -0.0235000000000003, 0.040500000000001535, 0.04800000000000182, 0.03300000000000125, -0.04725000000000179], zp_timestamp='2026-04-15T22:50:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:53:23.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:53:23.201 [DEBUG] [Thread-28733] [transport.py] [_log()] starting thread (client mode): 0xee990be0
2026-04-16T00:53:23.201 [DEBUG] [Thread-28733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:53:23.215 [DEBUG] [Thread-28733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:53:23.215 [INFO] [Thread-28733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:53:23.222 [DEBUG] [Thread-28733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:53:23.222 [DEBUG] [Thread-28733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:53:23.222 [DEBUG] [Thread-28733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] client lang: <none>
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] server lang: <none>
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] kex follows: False
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] Compression: none
2026-04-16T00:53:23.223 [DEBUG] [Thread-28733] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:53:23.283 [DEBUG] [Thread-28733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:53:23.283 [DEBUG] [Thread-28733] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:53:23.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:53:23.284 [DEBUG] [Thread-28733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:53:23.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:53:23.341 [DEBUG] [Thread-28733] [transport.py] [_log()] userauth is OK
2026-04-16T00:53:23.342 [DEBUG] [Thread-28733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:53:23.342 [DEBUG] [Thread-28733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:53:23.342 [DEBUG] [Thread-28733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:53:23.342 [DEBUG] [Thread-28733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:53:23.366 [INFO] [Thread-28733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:53:23.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:53:23.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:53:24.176 [DEBUG] [Thread-28733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:53:24.176 [DEBUG] [Thread-28733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:53:24.224 [DEBUG] [Thread-28733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:53:24.224 [DEBUG] [Thread-28733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:53:24.233 [DEBUG] [Thread-28733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:53:24.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:53:24.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')
2026-04-16T00:53:24.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') -> 00000000
2026-04-16T00:53:24.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:53:24.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:53:24.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:53:24.271 [DEBUG] [Thread-28733] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:53:24.529 [DEBUG] [Thread-28735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:53:30.539 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:53:30.540 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:53:39.566 [DEBUG] [Thread-28736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:53:49.739 [DEBUG] [Thread-28737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:53:54.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:53:54.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:53:54.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
2026-04-16T00:53:54.598 [DEBUG] [Thread-28738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:53:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 53, 30), 1.77426, 88.9147, 0.0, 10.111, 6.02071, 1, 1, 0, 2, 0, 0),)
2026-04-16T00:53:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:53:30
2026-04-16T00:53:55.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:53:56.442 [DEBUG] [Thread-28739] [transport.py] [_log()] starting thread (client mode): 0xee9c69e0
2026-04-16T00:53:56.443 [DEBUG] [Thread-28739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:53:56.463 [DEBUG] [Thread-28739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:53:56.464 [INFO] [Thread-28739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:53:56.467 [DEBUG] [Thread-28739] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:53:56.467 [DEBUG] [Thread-28739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:53:56.467 [DEBUG] [Thread-28739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:53:56.467 [DEBUG] [Thread-28739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:53:56.467 [DEBUG] [Thread-28739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:53:56.467 [DEBUG] [Thread-28739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:53:56.467 [DEBUG] [Thread-28739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:53:56.467 [DEBUG] [Thread-28739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:53:56.467 [DEBUG] [Thread-28739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:53:56.467 [DEBUG] [Thread-28739] [transport.py] [_log()] client lang: <none>
2026-04-16T00:53:56.467 [DEBUG] [Thread-28739] [transport.py] [_log()] server lang: <none>
2026-04-16T00:53:56.467 [DEBUG] [Thread-28739] [transport.py] [_log()] kex follows: False
2026-04-16T00:53:56.467 [DEBUG] [Thread-28739] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:53:56.467 [DEBUG] [Thread-28739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:53:56.467 [DEBUG] [Thread-28739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:53:56.468 [DEBUG] [Thread-28739] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:53:56.468 [DEBUG] [Thread-28739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:53:56.468 [DEBUG] [Thread-28739] [transport.py] [_log()] Compression: none
2026-04-16T00:53:56.468 [DEBUG] [Thread-28739] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:53:56.484 [DEBUG] [Thread-28739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:53:56.484 [DEBUG] [Thread-28739] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:53:56.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:53:56.485 [DEBUG] [Thread-28739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:53:56.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:53:56.486 [DEBUG] [Thread-28739] [transport.py] [_log()] userauth is OK
2026-04-16T00:53:56.486 [DEBUG] [Thread-28739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:53:56.486 [DEBUG] [Thread-28739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:53:56.486 [DEBUG] [Thread-28739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:53:56.486 [DEBUG] [Thread-28739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:53:56.498 [INFO] [Thread-28739] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:53:56.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:53:57.287 [DEBUG] [Thread-28739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:53:57.287 [DEBUG] [Thread-28739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:53:57.287 [DEBUG] [Thread-28739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:53:57.328 [DEBUG] [Thread-28739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:53:57.328 [DEBUG] [Thread-28739] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:53:57.330 [DEBUG] [Thread-28739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:53:57.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:53:57.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:53:57.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:53:57.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:53:57.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:53:57.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:53:57.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:53:57.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:53:57.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:53:57.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.953605 -999.00   +9.50   9.76     86   +7.30 1 1 1 2 1     0    0 2.26 -12.24 ZNESW 7.0 9.8 77.0 13.7 9.8 -25.1 9.6 -24.0 9.3 -21.8 9.6 -23.9
2026-04-16T00:53:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:53:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:53:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.953605
2026-04-16T00:53:57.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:53:57.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:53:57.432 [DEBUG] [Thread-28739] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:53:57.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:53:57.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:53:57.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:53:57.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:53:30', tmtdew=1.77426, humidity=88.9147, cloud=0.0, wind=10.111, temperature=6.02071, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:53:11.472', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.13724999999999987, -0.018749999999998934, 0.004999999999999005, 0.03250000000000064, 0.016250000000001208, 0.014999999999998792, -0.03974999999999973, -0.045000000000001705, -0.10899999999999821, -0.0017500000000012506, -0.10449999999999982, -0.0034999999999989484, 0.023249999999999105, -0.0030000000000001137, -0.03500000000000014, -0.005749999999999034, -0.059499999999999886, 0.013999999999999346, -0.034750000000000725, -0.002000000000000668, 0.04174999999999862, 0.0007500000000000284, -0.05925000000000047, -0.036500000000001975, -0.018499999999999517, -0.004250000000000753, -0.016500000000000625, -0.0235000000000003, 0.040500000000001535, 0.04800000000000182, 0.03300000000000125, -0.04725000000000179], zp_timestamp='2026-04-15T22:50:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:53:57.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:53:57.669 [DEBUG] [Thread-28742] [transport.py] [_log()] starting thread (client mode): 0xee9c1150
2026-04-16T00:53:57.669 [DEBUG] [Thread-28742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:53:57.684 [DEBUG] [Thread-28742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:53:57.684 [INFO] [Thread-28742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:53:57.691 [DEBUG] [Thread-28742] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:53:57.691 [DEBUG] [Thread-28742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:53:57.691 [DEBUG] [Thread-28742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:53:57.691 [DEBUG] [Thread-28742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:53:57.692 [DEBUG] [Thread-28742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:53:57.692 [DEBUG] [Thread-28742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:53:57.692 [DEBUG] [Thread-28742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:53:57.692 [DEBUG] [Thread-28742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:53:57.692 [DEBUG] [Thread-28742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:53:57.692 [DEBUG] [Thread-28742] [transport.py] [_log()] client lang: <none>
2026-04-16T00:53:57.692 [DEBUG] [Thread-28742] [transport.py] [_log()] server lang: <none>
2026-04-16T00:53:57.692 [DEBUG] [Thread-28742] [transport.py] [_log()] kex follows: False
2026-04-16T00:53:57.692 [DEBUG] [Thread-28742] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:53:57.692 [DEBUG] [Thread-28742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:53:57.692 [DEBUG] [Thread-28742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:53:57.693 [DEBUG] [Thread-28742] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:53:57.693 [DEBUG] [Thread-28742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:53:57.693 [DEBUG] [Thread-28742] [transport.py] [_log()] Compression: none
2026-04-16T00:53:57.693 [DEBUG] [Thread-28742] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:53:57.747 [DEBUG] [Thread-28742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:53:57.747 [DEBUG] [Thread-28742] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:53:57.748 [DEBUG] [Thread-28742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:53:57.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:53:57.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:53:57.804 [DEBUG] [Thread-28742] [transport.py] [_log()] userauth is OK
2026-04-16T00:53:57.804 [DEBUG] [Thread-28742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:53:57.804 [DEBUG] [Thread-28742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:53:57.804 [DEBUG] [Thread-28742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:53:57.804 [DEBUG] [Thread-28742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:53:57.829 [INFO] [Thread-28742] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:53:57.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:53:57.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:53:58.648 [DEBUG] [Thread-28742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:53:58.648 [DEBUG] [Thread-28742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:53:58.696 [DEBUG] [Thread-28742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:53:58.696 [DEBUG] [Thread-28742] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:53:58.705 [DEBUG] [Thread-28742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:53:58.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:53:58.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')
2026-04-16T00:53:58.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-16T00:53:58.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:53:58.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:53:58.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:53:58.739 [DEBUG] [Thread-28742] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:54:09.629 [DEBUG] [Thread-28744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:54:24.672 [DEBUG] [Thread-28745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:54:28.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:54:28.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:54:28.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
2026-04-16T00:54:30.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 54, 6), 1.75889, 89.0033, 0.0, 10.2697, 6.00968, 1, 1, 0, 2, 0, 0),)
2026-04-16T00:54:30.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:54:06
2026-04-16T00:54:30.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:54:30.744 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:54:30.744 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:54:30.832 [DEBUG] [Thread-28746] [transport.py] [_log()] starting thread (client mode): 0xee9c77c0
2026-04-16T00:54:30.832 [DEBUG] [Thread-28746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:54:30.851 [DEBUG] [Thread-28746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:54:30.851 [INFO] [Thread-28746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:54:30.855 [DEBUG] [Thread-28746] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:54:30.855 [DEBUG] [Thread-28746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:54:30.855 [DEBUG] [Thread-28746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:54:30.855 [DEBUG] [Thread-28746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:54:30.855 [DEBUG] [Thread-28746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:54:30.855 [DEBUG] [Thread-28746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:54:30.855 [DEBUG] [Thread-28746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:54:30.855 [DEBUG] [Thread-28746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:54:30.855 [DEBUG] [Thread-28746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:54:30.855 [DEBUG] [Thread-28746] [transport.py] [_log()] client lang: <none>
2026-04-16T00:54:30.855 [DEBUG] [Thread-28746] [transport.py] [_log()] server lang: <none>
2026-04-16T00:54:30.856 [DEBUG] [Thread-28746] [transport.py] [_log()] kex follows: False
2026-04-16T00:54:30.856 [DEBUG] [Thread-28746] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:54:30.856 [DEBUG] [Thread-28746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:54:30.856 [DEBUG] [Thread-28746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:54:30.856 [DEBUG] [Thread-28746] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:54:30.856 [DEBUG] [Thread-28746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:54:30.856 [DEBUG] [Thread-28746] [transport.py] [_log()] Compression: none
2026-04-16T00:54:30.856 [DEBUG] [Thread-28746] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:54:30.873 [DEBUG] [Thread-28746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:54:30.874 [DEBUG] [Thread-28746] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:54:30.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:54:30.875 [DEBUG] [Thread-28746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:54:30.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:54:30.876 [DEBUG] [Thread-28746] [transport.py] [_log()] userauth is OK
2026-04-16T00:54:30.876 [DEBUG] [Thread-28746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:54:30.876 [DEBUG] [Thread-28746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:54:30.876 [DEBUG] [Thread-28746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:54:30.877 [DEBUG] [Thread-28746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:54:30.900 [INFO] [Thread-28746] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:54:30.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:54:31.685 [DEBUG] [Thread-28746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:54:31.685 [DEBUG] [Thread-28746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:54:31.686 [DEBUG] [Thread-28746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:54:31.727 [DEBUG] [Thread-28746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:54:31.727 [DEBUG] [Thread-28746] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:54:31.729 [DEBUG] [Thread-28746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:54:31.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:54:31.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:54:31.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:54:31.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:54:31.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:54:31.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:54:31.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:54:31.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:54:31.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:54:31.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.953952 -999.00   +9.50   7.93     86   +7.30 1 1 1 2 1     0    0 2.27 -12.95 ZNESW 8.4 7.9 83.1 13.1 9.8 -25.2 9.7 -24.0 9.3 -21.8 9.7 -23.8
2026-04-16T00:54:31.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:54:31.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:54:31.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.953952
2026-04-16T00:54:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:54:31.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:54:31.755 [DEBUG] [Thread-28746] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:54:31.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:54:31.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:54:31.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:54:31.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:54:06', tmtdew=1.75889, humidity=89.0033, cloud=0.0, wind=10.2697, temperature=6.00968, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:53:41.453', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.13724999999999987, -0.018749999999998934, 0.004999999999999005, 0.03250000000000064, 0.016250000000001208, 0.014999999999998792, -0.03974999999999973, -0.045000000000001705, -0.10899999999999821, -0.0017500000000012506, -0.10449999999999982, -0.0034999999999989484, 0.023249999999999105, -0.0030000000000001137, -0.03500000000000014, -0.005749999999999034, -0.059499999999999886, 0.013999999999999346, -0.034750000000000725, -0.002000000000000668, 0.04174999999999862, 0.0007500000000000284, -0.05925000000000047, -0.036500000000001975, -0.018499999999999517, -0.004250000000000753, -0.016500000000000625, -0.0235000000000003, 0.040500000000001535, 0.04800000000000182, 0.03300000000000125, -0.04725000000000179], zp_timestamp='2026-04-15T22:50:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:54:31.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:54:32.011 [DEBUG] [Thread-28749] [transport.py] [_log()] starting thread (client mode): 0xee9938b0
2026-04-16T00:54:32.011 [DEBUG] [Thread-28749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:54:32.026 [DEBUG] [Thread-28749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:54:32.026 [INFO] [Thread-28749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:54:32.033 [DEBUG] [Thread-28749] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:54:32.033 [DEBUG] [Thread-28749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:54:32.033 [DEBUG] [Thread-28749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:54:32.033 [DEBUG] [Thread-28749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:54:32.033 [DEBUG] [Thread-28749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:54:32.033 [DEBUG] [Thread-28749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:54:32.034 [DEBUG] [Thread-28749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:54:32.034 [DEBUG] [Thread-28749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:54:32.034 [DEBUG] [Thread-28749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:54:32.034 [DEBUG] [Thread-28749] [transport.py] [_log()] client lang: <none>
2026-04-16T00:54:32.034 [DEBUG] [Thread-28749] [transport.py] [_log()] server lang: <none>
2026-04-16T00:54:32.034 [DEBUG] [Thread-28749] [transport.py] [_log()] kex follows: False
2026-04-16T00:54:32.034 [DEBUG] [Thread-28749] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:54:32.034 [DEBUG] [Thread-28749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:54:32.034 [DEBUG] [Thread-28749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:54:32.034 [DEBUG] [Thread-28749] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:54:32.034 [DEBUG] [Thread-28749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:54:32.034 [DEBUG] [Thread-28749] [transport.py] [_log()] Compression: none
2026-04-16T00:54:32.035 [DEBUG] [Thread-28749] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:54:32.090 [DEBUG] [Thread-28749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:54:32.090 [DEBUG] [Thread-28749] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:54:32.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:54:32.091 [DEBUG] [Thread-28749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:54:32.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:54:32.146 [DEBUG] [Thread-28749] [transport.py] [_log()] userauth is OK
2026-04-16T00:54:32.146 [DEBUG] [Thread-28749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:54:32.147 [DEBUG] [Thread-28749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:54:32.147 [DEBUG] [Thread-28749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:54:32.147 [DEBUG] [Thread-28749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:54:32.172 [INFO] [Thread-28749] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:54:32.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:54:32.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:54:33.033 [DEBUG] [Thread-28749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:54:33.034 [DEBUG] [Thread-28749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:54:33.082 [DEBUG] [Thread-28749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:54:33.082 [DEBUG] [Thread-28749] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:54:33.092 [DEBUG] [Thread-28749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:54:33.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:54:33.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')
2026-04-16T00:54:33.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
2026-04-16T00:54:33.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:54:33.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:54:33.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:54:33.127 [DEBUG] [Thread-28749] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:54:39.701 [DEBUG] [Thread-28751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:54:49.904 [DEBUG] [Thread-28752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:54:54.748 [DEBUG] [Thread-28753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:55:03.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:55:03.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:55:03.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
2026-04-16T00:55:04.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 54, 41), 1.1852, 92.5215, 0.0, 14.5037, 4.29794, 2, 2, 0, 2, 0, 0),)
2026-04-16T00:55:04.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:54:41
2026-04-16T00:55:04.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:55:05.380 [DEBUG] [Thread-28754] [transport.py] [_log()] starting thread (client mode): 0xf13e3fd0
2026-04-16T00:55:05.380 [DEBUG] [Thread-28754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:55:05.401 [DEBUG] [Thread-28754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:55:05.402 [INFO] [Thread-28754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:55:05.405 [DEBUG] [Thread-28754] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:55:05.405 [DEBUG] [Thread-28754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:55:05.405 [DEBUG] [Thread-28754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:55:05.405 [DEBUG] [Thread-28754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:55:05.405 [DEBUG] [Thread-28754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:55:05.405 [DEBUG] [Thread-28754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:55:05.406 [DEBUG] [Thread-28754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:55:05.406 [DEBUG] [Thread-28754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:55:05.406 [DEBUG] [Thread-28754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:55:05.406 [DEBUG] [Thread-28754] [transport.py] [_log()] client lang: <none>
2026-04-16T00:55:05.406 [DEBUG] [Thread-28754] [transport.py] [_log()] server lang: <none>
2026-04-16T00:55:05.406 [DEBUG] [Thread-28754] [transport.py] [_log()] kex follows: False
2026-04-16T00:55:05.406 [DEBUG] [Thread-28754] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:55:05.406 [DEBUG] [Thread-28754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:55:05.406 [DEBUG] [Thread-28754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:55:05.406 [DEBUG] [Thread-28754] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:55:05.406 [DEBUG] [Thread-28754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:55:05.406 [DEBUG] [Thread-28754] [transport.py] [_log()] Compression: none
2026-04-16T00:55:05.407 [DEBUG] [Thread-28754] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:55:05.423 [DEBUG] [Thread-28754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:55:05.423 [DEBUG] [Thread-28754] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:55:05.424 [DEBUG] [Thread-28754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:55:05.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:55:05.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:55:05.425 [DEBUG] [Thread-28754] [transport.py] [_log()] userauth is OK
2026-04-16T00:55:05.425 [DEBUG] [Thread-28754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:55:05.425 [DEBUG] [Thread-28754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:55:05.425 [DEBUG] [Thread-28754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:55:05.425 [DEBUG] [Thread-28754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:55:05.443 [INFO] [Thread-28754] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:55:05.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:55:09.779 [DEBUG] [Thread-28756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:55:14.205 [DEBUG] [Thread-28754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:55:14.205 [DEBUG] [Thread-28754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:55:14.205 [DEBUG] [Thread-28754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:55:14.246 [DEBUG] [Thread-28754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:55:14.246 [DEBUG] [Thread-28754] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:55:14.249 [DEBUG] [Thread-28754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:55:14.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:55:14.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:55:14.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:55:14.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:55:14.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:55:14.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:55:14.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:55:14.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:55:14.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:55:14.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.954299 -999.00   +9.60   7.68     86   +7.40 1 1 1 2 1     0    0 2.25 -14.24 ZNESW 6.8 7.7 111.0 10.9 9.8 -25.1 9.6 -24.0 9.3 -21.9 9.7 -23.8
2026-04-16T00:55:14.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:55:14.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:55:14.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.954299
2026-04-16T00:55:14.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:55:14.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:55:14.286 [DEBUG] [Thread-28754] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:55:14.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:55:14.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:55:14.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:55:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:54:41', tmtdew=1.1852, humidity=92.5215, cloud=0.0, wind=14.5037, temperature=4.29794, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:54:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.13724999999999987, -0.018749999999998934, 0.004999999999999005, 0.03250000000000064, 0.016250000000001208, 0.014999999999998792, -0.03974999999999973, -0.045000000000001705, -0.10899999999999821, -0.0017500000000012506, -0.10449999999999982, -0.0034999999999989484, 0.023249999999999105, -0.0030000000000001137, -0.03500000000000014, -0.005749999999999034, -0.059499999999999886, 0.013999999999999346, -0.034750000000000725, -0.002000000000000668, 0.04174999999999862, 0.0007500000000000284, -0.05925000000000047, -0.036500000000001975, -0.018499999999999517, -0.004250000000000753, -0.016500000000000625, -0.0235000000000003, 0.040500000000001535, 0.04800000000000182, 0.03300000000000125, -0.04725000000000179], zp_timestamp='2026-04-15T22:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:55:14.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:55:14.500 [DEBUG] [Thread-28758] [transport.py] [_log()] starting thread (client mode): 0xf13ca500
2026-04-16T00:55:14.501 [DEBUG] [Thread-28758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:55:14.515 [DEBUG] [Thread-28758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:55:14.515 [INFO] [Thread-28758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:55:14.522 [DEBUG] [Thread-28758] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:55:14.523 [DEBUG] [Thread-28758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:55:14.523 [DEBUG] [Thread-28758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:55:14.523 [DEBUG] [Thread-28758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:55:14.523 [DEBUG] [Thread-28758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:55:14.523 [DEBUG] [Thread-28758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:55:14.523 [DEBUG] [Thread-28758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:55:14.523 [DEBUG] [Thread-28758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:55:14.523 [DEBUG] [Thread-28758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:55:14.523 [DEBUG] [Thread-28758] [transport.py] [_log()] client lang: <none>
2026-04-16T00:55:14.523 [DEBUG] [Thread-28758] [transport.py] [_log()] server lang: <none>
2026-04-16T00:55:14.523 [DEBUG] [Thread-28758] [transport.py] [_log()] kex follows: False
2026-04-16T00:55:14.523 [DEBUG] [Thread-28758] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:55:14.524 [DEBUG] [Thread-28758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:55:14.524 [DEBUG] [Thread-28758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:55:14.524 [DEBUG] [Thread-28758] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:55:14.524 [DEBUG] [Thread-28758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:55:14.524 [DEBUG] [Thread-28758] [transport.py] [_log()] Compression: none
2026-04-16T00:55:14.524 [DEBUG] [Thread-28758] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:55:14.580 [DEBUG] [Thread-28758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:55:14.580 [DEBUG] [Thread-28758] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:55:14.581 [DEBUG] [Thread-28758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:55:14.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:55:14.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:55:14.637 [DEBUG] [Thread-28758] [transport.py] [_log()] userauth is OK
2026-04-16T00:55:14.637 [DEBUG] [Thread-28758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:55:14.637 [DEBUG] [Thread-28758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:55:14.637 [DEBUG] [Thread-28758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:55:14.637 [DEBUG] [Thread-28758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:55:14.664 [INFO] [Thread-28758] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:55:14.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:55:14.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:55:15.486 [DEBUG] [Thread-28758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:55:15.486 [DEBUG] [Thread-28758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:55:15.534 [DEBUG] [Thread-28758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:55:15.534 [DEBUG] [Thread-28758] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:55:15.543 [DEBUG] [Thread-28758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:55:15.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:55:15.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')
2026-04-16T00:55:15.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
2026-04-16T00:55:15.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:55:15.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:55:15.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:55:15.577 [DEBUG] [Thread-28758] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:55:24.811 [DEBUG] [Thread-28760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:55:30.950 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:55:30.950 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:55:39.854 [DEBUG] [Thread-28761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:55:45.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:55:45.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:55:45.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
2026-04-16T00:55:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 55, 16), 1.71024, 89.4251, 0.0, 10.2521, 5.99865, 1, 1, 0, 2, 0, 0),)
2026-04-16T00:55:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:55:16
2026-04-16T00:55:47.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:55:47.788 [DEBUG] [Thread-28762] [transport.py] [_log()] starting thread (client mode): 0xee992590
2026-04-16T00:55:47.788 [DEBUG] [Thread-28762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:55:47.807 [DEBUG] [Thread-28762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:55:47.807 [INFO] [Thread-28762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:55:47.810 [DEBUG] [Thread-28762] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:55:47.810 [DEBUG] [Thread-28762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:55:47.811 [DEBUG] [Thread-28762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:55:47.811 [DEBUG] [Thread-28762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:55:47.811 [DEBUG] [Thread-28762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:55:47.811 [DEBUG] [Thread-28762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:55:47.811 [DEBUG] [Thread-28762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:55:47.811 [DEBUG] [Thread-28762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:55:47.811 [DEBUG] [Thread-28762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:55:47.811 [DEBUG] [Thread-28762] [transport.py] [_log()] client lang: <none>
2026-04-16T00:55:47.811 [DEBUG] [Thread-28762] [transport.py] [_log()] server lang: <none>
2026-04-16T00:55:47.811 [DEBUG] [Thread-28762] [transport.py] [_log()] kex follows: False
2026-04-16T00:55:47.811 [DEBUG] [Thread-28762] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:55:47.811 [DEBUG] [Thread-28762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:55:47.812 [DEBUG] [Thread-28762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:55:47.812 [DEBUG] [Thread-28762] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:55:47.812 [DEBUG] [Thread-28762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:55:47.812 [DEBUG] [Thread-28762] [transport.py] [_log()] Compression: none
2026-04-16T00:55:47.812 [DEBUG] [Thread-28762] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:55:47.828 [DEBUG] [Thread-28762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:55:47.829 [DEBUG] [Thread-28762] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:55:47.829 [DEBUG] [Thread-28762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:55:47.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:55:47.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:55:47.830 [DEBUG] [Thread-28762] [transport.py] [_log()] userauth is OK
2026-04-16T00:55:47.830 [DEBUG] [Thread-28762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:55:47.831 [DEBUG] [Thread-28762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:55:47.831 [DEBUG] [Thread-28762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:55:47.831 [DEBUG] [Thread-28762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:55:47.854 [INFO] [Thread-28762] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:55:47.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:55:48.648 [DEBUG] [Thread-28762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:55:48.648 [DEBUG] [Thread-28762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:55:48.649 [DEBUG] [Thread-28762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:55:48.689 [DEBUG] [Thread-28762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:55:48.689 [DEBUG] [Thread-28762] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:55:48.692 [DEBUG] [Thread-28762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:55:48.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:55:48.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:55:48.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:55:48.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:55:48.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:55:48.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:55:48.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:55:48.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:55:48.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:55:48.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.954994 -999.00   +9.60   7.67     86   +7.40 1 1 1 2 1     0    0 2.06 -17.35 ZNESW 8.2 7.7 97.7 10.9 9.8 -25.1 9.6 -24.0 9.3 -21.8 9.7 -23.8
2026-04-16T00:55:48.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:55:48.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:55:48.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.954994
2026-04-16T00:55:48.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:55:48.717 [DEBUG] [Thread-28762] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:55:48.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:55:48.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:55:48.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:55:48.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:55:48.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:55:16', tmtdew=1.71024, humidity=89.4251, cloud=0.0, wind=10.2521, temperature=5.99865, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:55:11.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.13724999999999987, -0.018749999999998934, 0.004999999999999005, 0.03250000000000064, 0.016250000000001208, 0.014999999999998792, -0.03974999999999973, -0.045000000000001705, -0.10899999999999821, -0.0017500000000012506, -0.10449999999999982, -0.0034999999999989484, 0.023249999999999105, -0.0030000000000001137, -0.03500000000000014, -0.005749999999999034, -0.059499999999999886, 0.013999999999999346, -0.034750000000000725, -0.002000000000000668, 0.04174999999999862, 0.0007500000000000284, -0.05925000000000047, -0.036500000000001975, -0.018499999999999517, -0.004250000000000753, -0.016500000000000625, -0.0235000000000003, 0.040500000000001535, 0.04800000000000182, 0.03300000000000125, -0.04725000000000179], zp_timestamp='2026-04-15T22:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:55:48.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:55:48.979 [DEBUG] [Thread-28765] [transport.py] [_log()] starting thread (client mode): 0xee9c35b0
2026-04-16T00:55:48.979 [DEBUG] [Thread-28765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:55:48.995 [DEBUG] [Thread-28765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:55:48.995 [INFO] [Thread-28765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:55:49.002 [DEBUG] [Thread-28765] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:55:49.002 [DEBUG] [Thread-28765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:55:49.002 [DEBUG] [Thread-28765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:55:49.003 [DEBUG] [Thread-28765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:55:49.003 [DEBUG] [Thread-28765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:55:49.003 [DEBUG] [Thread-28765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:55:49.003 [DEBUG] [Thread-28765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:55:49.003 [DEBUG] [Thread-28765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:55:49.003 [DEBUG] [Thread-28765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:55:49.003 [DEBUG] [Thread-28765] [transport.py] [_log()] client lang: <none>
2026-04-16T00:55:49.003 [DEBUG] [Thread-28765] [transport.py] [_log()] server lang: <none>
2026-04-16T00:55:49.003 [DEBUG] [Thread-28765] [transport.py] [_log()] kex follows: False
2026-04-16T00:55:49.003 [DEBUG] [Thread-28765] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:55:49.003 [DEBUG] [Thread-28765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:55:49.004 [DEBUG] [Thread-28765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:55:49.004 [DEBUG] [Thread-28765] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:55:49.004 [DEBUG] [Thread-28765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:55:49.004 [DEBUG] [Thread-28765] [transport.py] [_log()] Compression: none
2026-04-16T00:55:49.004 [DEBUG] [Thread-28765] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:55:49.059 [DEBUG] [Thread-28765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:55:49.059 [DEBUG] [Thread-28765] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:55:49.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:55:49.060 [DEBUG] [Thread-28765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:55:49.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:55:49.116 [DEBUG] [Thread-28765] [transport.py] [_log()] userauth is OK
2026-04-16T00:55:49.116 [DEBUG] [Thread-28765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:55:49.116 [DEBUG] [Thread-28765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:55:49.117 [DEBUG] [Thread-28765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:55:49.117 [DEBUG] [Thread-28765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:55:49.142 [INFO] [Thread-28765] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:55:49.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:55:49.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:55:49.946 [DEBUG] [Thread-28765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:55:49.947 [DEBUG] [Thread-28765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:55:49.994 [DEBUG] [Thread-28765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:55:49.994 [DEBUG] [Thread-28765] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:55:50.003 [DEBUG] [Thread-28765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:55:50.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:55:50.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')
2026-04-16T00:55:50.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
2026-04-16T00:55:50.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:55:50.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:55:50.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:55:50.035 [DEBUG] [Thread-28765] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:55:50.055 [DEBUG] [Thread-28767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:55:54.885 [DEBUG] [Thread-28768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:56:09.927 [DEBUG] [Thread-28769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:56:20.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:56:20.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:56:20.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
2026-04-16T00:56:21.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 55, 52), 1.15122, 92.7206, 0.0, 13.41, 4.29798, 2, 2, 0, 2, 0, 0),)
2026-04-16T00:56:21.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:55:52
2026-04-16T00:56:21.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:56:22.186 [DEBUG] [Thread-28770] [transport.py] [_log()] starting thread (client mode): 0xee9c1840
2026-04-16T00:56:22.186 [DEBUG] [Thread-28770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:56:22.206 [DEBUG] [Thread-28770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:56:22.206 [INFO] [Thread-28770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:56:22.209 [DEBUG] [Thread-28770] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:56:22.210 [DEBUG] [Thread-28770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:56:22.210 [DEBUG] [Thread-28770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:56:22.210 [DEBUG] [Thread-28770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:56:22.210 [DEBUG] [Thread-28770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:56:22.210 [DEBUG] [Thread-28770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:56:22.210 [DEBUG] [Thread-28770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:56:22.210 [DEBUG] [Thread-28770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:56:22.210 [DEBUG] [Thread-28770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:56:22.210 [DEBUG] [Thread-28770] [transport.py] [_log()] client lang: <none>
2026-04-16T00:56:22.210 [DEBUG] [Thread-28770] [transport.py] [_log()] server lang: <none>
2026-04-16T00:56:22.210 [DEBUG] [Thread-28770] [transport.py] [_log()] kex follows: False
2026-04-16T00:56:22.211 [DEBUG] [Thread-28770] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:56:22.211 [DEBUG] [Thread-28770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:56:22.211 [DEBUG] [Thread-28770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:56:22.211 [DEBUG] [Thread-28770] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:56:22.211 [DEBUG] [Thread-28770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:56:22.211 [DEBUG] [Thread-28770] [transport.py] [_log()] Compression: none
2026-04-16T00:56:22.211 [DEBUG] [Thread-28770] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:56:22.219 [DEBUG] [Thread-28770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:56:22.220 [DEBUG] [Thread-28770] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:56:22.220 [DEBUG] [Thread-28770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:56:22.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:56:22.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:56:22.221 [DEBUG] [Thread-28770] [transport.py] [_log()] userauth is OK
2026-04-16T00:56:22.222 [DEBUG] [Thread-28770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:56:22.222 [DEBUG] [Thread-28770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:56:22.222 [DEBUG] [Thread-28770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:56:22.222 [DEBUG] [Thread-28770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:56:22.244 [INFO] [Thread-28770] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:56:22.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:56:23.020 [DEBUG] [Thread-28770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:56:23.021 [DEBUG] [Thread-28770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:56:23.021 [DEBUG] [Thread-28770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:56:23.061 [DEBUG] [Thread-28770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:56:23.061 [DEBUG] [Thread-28770] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:56:23.063 [DEBUG] [Thread-28770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:56:23.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:56:23.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:56:23.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:56:23.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:56:23.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:56:23.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:56:23.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:56:23.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:56:23.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:56:23.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.955341 -999.00   +9.50   7.36     86   +7.30 1 1 1 2 1     0    0 2.08 -17.82 ZNESW 7.5 7.4 105.3 9.9 9.8 -25.3 9.7 -24.1 9.3 -21.9 9.7 -23.9
2026-04-16T00:56:23.087 [DEBUG] [Thread-28770] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:56:23.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:56:23.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:56:23.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.955341
2026-04-16T00:56:23.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:56:23.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:56:23.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:56:23.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:56:23.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:56:23.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:55:52', tmtdew=1.15122, humidity=92.7206, cloud=0.0, wind=13.41, temperature=4.29798, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:55:41.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.13724999999999987, -0.018749999999998934, 0.004999999999999005, 0.03250000000000064, 0.016250000000001208, 0.014999999999998792, -0.03974999999999973, -0.045000000000001705, -0.10899999999999821, -0.0017500000000012506, -0.10449999999999982, -0.0034999999999989484, 0.023249999999999105, -0.0030000000000001137, -0.03500000000000014, -0.005749999999999034, -0.059499999999999886, 0.013999999999999346, -0.034750000000000725, -0.002000000000000668, 0.04174999999999862, 0.0007500000000000284, -0.05925000000000047, -0.036500000000001975, -0.018499999999999517, -0.004250000000000753, -0.016500000000000625, -0.0235000000000003, 0.040500000000001535, 0.04800000000000182, 0.03300000000000125, -0.04725000000000179], zp_timestamp='2026-04-15T22:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:56:23.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:56:23.349 [DEBUG] [Thread-28773] [transport.py] [_log()] starting thread (client mode): 0xf1367490
2026-04-16T00:56:23.350 [DEBUG] [Thread-28773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:56:23.365 [DEBUG] [Thread-28773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:56:23.365 [INFO] [Thread-28773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:56:23.372 [DEBUG] [Thread-28773] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:56:23.372 [DEBUG] [Thread-28773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:56:23.372 [DEBUG] [Thread-28773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:56:23.373 [DEBUG] [Thread-28773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:56:23.373 [DEBUG] [Thread-28773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:56:23.373 [DEBUG] [Thread-28773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:56:23.373 [DEBUG] [Thread-28773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:56:23.373 [DEBUG] [Thread-28773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:56:23.373 [DEBUG] [Thread-28773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:56:23.373 [DEBUG] [Thread-28773] [transport.py] [_log()] client lang: <none>
2026-04-16T00:56:23.373 [DEBUG] [Thread-28773] [transport.py] [_log()] server lang: <none>
2026-04-16T00:56:23.373 [DEBUG] [Thread-28773] [transport.py] [_log()] kex follows: False
2026-04-16T00:56:23.373 [DEBUG] [Thread-28773] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:56:23.373 [DEBUG] [Thread-28773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:56:23.374 [DEBUG] [Thread-28773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:56:23.374 [DEBUG] [Thread-28773] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:56:23.374 [DEBUG] [Thread-28773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:56:23.374 [DEBUG] [Thread-28773] [transport.py] [_log()] Compression: none
2026-04-16T00:56:23.374 [DEBUG] [Thread-28773] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:56:23.433 [DEBUG] [Thread-28773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:56:23.433 [DEBUG] [Thread-28773] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:56:23.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:56:23.434 [DEBUG] [Thread-28773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:56:23.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:56:23.490 [DEBUG] [Thread-28773] [transport.py] [_log()] userauth is OK
2026-04-16T00:56:23.491 [DEBUG] [Thread-28773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:56:23.491 [DEBUG] [Thread-28773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:56:23.491 [DEBUG] [Thread-28773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:56:23.491 [DEBUG] [Thread-28773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:56:23.517 [INFO] [Thread-28773] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:56:23.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:56:23.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:56:24.335 [DEBUG] [Thread-28773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:56:24.335 [DEBUG] [Thread-28773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:56:24.385 [DEBUG] [Thread-28773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:56:24.385 [DEBUG] [Thread-28773] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:56:24.393 [DEBUG] [Thread-28773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:56:24.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:56:24.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')
2026-04-16T00:56:24.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
2026-04-16T00:56:24.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:56:24.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:56:24.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:56:24.430 [DEBUG] [Thread-28773] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:56:24.957 [DEBUG] [Thread-28775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:56:31.159 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:56:31.160 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:56:40.003 [DEBUG] [Thread-28776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:56:50.220 [DEBUG] [Thread-28777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:56:54.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:56:54.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:56:54.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T00:56:55.035 [DEBUG] [Thread-28778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:56:55.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 56, 27), 1.6914, 89.5358, 0.0, 10.7636, 6.032, 1, 1, 0, 2, 0, 0),)
2026-04-16T00:56:55.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:56:27
2026-04-16T00:56:56.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:56:56.565 [DEBUG] [Thread-28779] [transport.py] [_log()] starting thread (client mode): 0xee993e80
2026-04-16T00:56:56.565 [DEBUG] [Thread-28779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:56:56.586 [DEBUG] [Thread-28779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:56:56.586 [INFO] [Thread-28779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:56:56.589 [DEBUG] [Thread-28779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:56:56.589 [DEBUG] [Thread-28779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:56:56.589 [DEBUG] [Thread-28779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:56:56.589 [DEBUG] [Thread-28779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:56:56.589 [DEBUG] [Thread-28779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:56:56.589 [DEBUG] [Thread-28779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:56:56.589 [DEBUG] [Thread-28779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:56:56.589 [DEBUG] [Thread-28779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:56:56.589 [DEBUG] [Thread-28779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:56:56.589 [DEBUG] [Thread-28779] [transport.py] [_log()] client lang: <none>
2026-04-16T00:56:56.589 [DEBUG] [Thread-28779] [transport.py] [_log()] server lang: <none>
2026-04-16T00:56:56.589 [DEBUG] [Thread-28779] [transport.py] [_log()] kex follows: False
2026-04-16T00:56:56.589 [DEBUG] [Thread-28779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:56:56.589 [DEBUG] [Thread-28779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:56:56.590 [DEBUG] [Thread-28779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:56:56.590 [DEBUG] [Thread-28779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:56:56.590 [DEBUG] [Thread-28779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:56:56.590 [DEBUG] [Thread-28779] [transport.py] [_log()] Compression: none
2026-04-16T00:56:56.590 [DEBUG] [Thread-28779] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:56:56.603 [DEBUG] [Thread-28779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:56:56.603 [DEBUG] [Thread-28779] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:56:56.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:56:56.604 [DEBUG] [Thread-28779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:56:56.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:56:56.605 [DEBUG] [Thread-28779] [transport.py] [_log()] userauth is OK
2026-04-16T00:56:56.605 [DEBUG] [Thread-28779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:56:56.605 [DEBUG] [Thread-28779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:56:56.605 [DEBUG] [Thread-28779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:56:56.605 [DEBUG] [Thread-28779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:56:56.624 [INFO] [Thread-28779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:56:56.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:56:57.370 [DEBUG] [Thread-28779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:56:57.371 [DEBUG] [Thread-28779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:56:57.371 [DEBUG] [Thread-28779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:56:57.411 [DEBUG] [Thread-28779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:56:57.411 [DEBUG] [Thread-28779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:56:57.414 [DEBUG] [Thread-28779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:56:57.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:56:57.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:56:57.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:56:57.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:56:57.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:56:57.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:56:57.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:56:57.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:56:57.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:56:57.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.955688 -999.00   +9.50   6.71     86   +7.40 1 1 1 2 1     0    0 2.00 -19.32 ZNESW 9.6 6.7 119.0 10.7 9.8 -25.2 9.7 -24.1 9.3 -21.9 9.7 -23.9
2026-04-16T00:56:57.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:56:57.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:56:57.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.955688
2026-04-16T00:56:57.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:56:57.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:56:57.520 [DEBUG] [Thread-28779] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:56:57.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:56:57.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:56:57.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:56:57.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:56:27', tmtdew=1.6914, humidity=89.5358, cloud=0.0, wind=10.7636, temperature=6.032, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:56:11.443', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.13724999999999987, -0.018749999999998934, 0.004999999999999005, 0.03250000000000064, 0.016250000000001208, 0.014999999999998792, -0.03974999999999973, -0.045000000000001705, -0.10899999999999821, -0.0017500000000012506, -0.10449999999999982, -0.0034999999999989484, 0.023249999999999105, -0.0030000000000001137, -0.03500000000000014, -0.005749999999999034, -0.059499999999999886, 0.013999999999999346, -0.034750000000000725, -0.002000000000000668, 0.04174999999999862, 0.0007500000000000284, -0.05925000000000047, -0.036500000000001975, -0.018499999999999517, -0.004250000000000753, -0.016500000000000625, -0.0235000000000003, 0.040500000000001535, 0.04800000000000182, 0.03300000000000125, -0.04725000000000179], zp_timestamp='2026-04-15T22:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:56:57.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:56:57.757 [DEBUG] [Thread-28782] [transport.py] [_log()] starting thread (client mode): 0xee992aa0
2026-04-16T00:56:57.757 [DEBUG] [Thread-28782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:56:57.772 [DEBUG] [Thread-28782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:56:57.772 [INFO] [Thread-28782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:56:57.779 [DEBUG] [Thread-28782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:56:57.779 [DEBUG] [Thread-28782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:56:57.780 [DEBUG] [Thread-28782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:56:57.780 [DEBUG] [Thread-28782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:56:57.780 [DEBUG] [Thread-28782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:56:57.780 [DEBUG] [Thread-28782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:56:57.780 [DEBUG] [Thread-28782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:56:57.780 [DEBUG] [Thread-28782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:56:57.780 [DEBUG] [Thread-28782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:56:57.780 [DEBUG] [Thread-28782] [transport.py] [_log()] client lang: <none>
2026-04-16T00:56:57.780 [DEBUG] [Thread-28782] [transport.py] [_log()] server lang: <none>
2026-04-16T00:56:57.780 [DEBUG] [Thread-28782] [transport.py] [_log()] kex follows: False
2026-04-16T00:56:57.780 [DEBUG] [Thread-28782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:56:57.780 [DEBUG] [Thread-28782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:56:57.781 [DEBUG] [Thread-28782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:56:57.781 [DEBUG] [Thread-28782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:56:57.781 [DEBUG] [Thread-28782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:56:57.781 [DEBUG] [Thread-28782] [transport.py] [_log()] Compression: none
2026-04-16T00:56:57.781 [DEBUG] [Thread-28782] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:56:57.837 [DEBUG] [Thread-28782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:56:57.837 [DEBUG] [Thread-28782] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:56:57.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:56:57.838 [DEBUG] [Thread-28782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:56:57.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:56:57.893 [DEBUG] [Thread-28782] [transport.py] [_log()] userauth is OK
2026-04-16T00:56:57.894 [DEBUG] [Thread-28782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:56:57.894 [DEBUG] [Thread-28782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:56:57.894 [DEBUG] [Thread-28782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:56:57.894 [DEBUG] [Thread-28782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:56:57.921 [INFO] [Thread-28782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:56:57.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:56:57.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:56:58.725 [DEBUG] [Thread-28782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:56:58.725 [DEBUG] [Thread-28782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:56:58.773 [DEBUG] [Thread-28782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:56:58.773 [DEBUG] [Thread-28782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:56:58.782 [DEBUG] [Thread-28782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:56:58.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:56: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')
2026-04-16T00:56:58.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
2026-04-16T00:56:58.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:56:58.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:56:58.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:56:58.818 [DEBUG] [Thread-28782] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:57:10.067 [DEBUG] [Thread-28784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:57:25.112 [DEBUG] [Thread-28785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:57:28.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:57:28.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:57:28.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
2026-04-16T00:57:30.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 57, 2), 1.69102, 89.5358, 0.0, 10.4638, 6.00988, 1, 1, 0, 2, 0, 0),)
2026-04-16T00:57:30.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:57:02
2026-04-16T00:57:30.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:57:31.043 [DEBUG] [Thread-28786] [transport.py] [_log()] starting thread (client mode): 0xf13c9cc0
2026-04-16T00:57:31.044 [DEBUG] [Thread-28786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:57:31.065 [DEBUG] [Thread-28786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:57:31.065 [INFO] [Thread-28786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:57:31.068 [DEBUG] [Thread-28786] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:57:31.068 [DEBUG] [Thread-28786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:57:31.069 [DEBUG] [Thread-28786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:57:31.069 [DEBUG] [Thread-28786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:57:31.069 [DEBUG] [Thread-28786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:57:31.069 [DEBUG] [Thread-28786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:57:31.069 [DEBUG] [Thread-28786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:57:31.069 [DEBUG] [Thread-28786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:57:31.069 [DEBUG] [Thread-28786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:57:31.069 [DEBUG] [Thread-28786] [transport.py] [_log()] client lang: <none>
2026-04-16T00:57:31.069 [DEBUG] [Thread-28786] [transport.py] [_log()] server lang: <none>
2026-04-16T00:57:31.069 [DEBUG] [Thread-28786] [transport.py] [_log()] kex follows: False
2026-04-16T00:57:31.069 [DEBUG] [Thread-28786] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:57:31.070 [DEBUG] [Thread-28786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:57:31.070 [DEBUG] [Thread-28786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:57:31.070 [DEBUG] [Thread-28786] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:57:31.070 [DEBUG] [Thread-28786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:57:31.070 [DEBUG] [Thread-28786] [transport.py] [_log()] Compression: none
2026-04-16T00:57:31.070 [DEBUG] [Thread-28786] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:57:31.088 [DEBUG] [Thread-28786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:57:31.088 [DEBUG] [Thread-28786] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:57:31.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:57:31.089 [DEBUG] [Thread-28786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:57:31.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:57:31.090 [DEBUG] [Thread-28786] [transport.py] [_log()] userauth is OK
2026-04-16T00:57:31.090 [DEBUG] [Thread-28786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:57:31.090 [DEBUG] [Thread-28786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:57:31.090 [DEBUG] [Thread-28786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:57:31.091 [DEBUG] [Thread-28786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:57:31.128 [INFO] [Thread-28786] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:57:31.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:57:31.365 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:57:31.366 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:57:31.970 [DEBUG] [Thread-28786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:57:31.970 [DEBUG] [Thread-28786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:57:31.970 [DEBUG] [Thread-28786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:57:32.011 [DEBUG] [Thread-28786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:57:32.011 [DEBUG] [Thread-28786] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:57:32.013 [DEBUG] [Thread-28786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:57:32.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:57:32.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:57:32.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:57:32.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:57:32.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:57:32.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:57:32.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:57:32.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:57:32.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:57:32.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.956035 -999.00   +9.50   8.61     86   +7.40 1 1 1 2 1     0    0 1.92 -20.29 ZNESW 8.4 8.6 91.4 11.1 9.8 -25.1 9.6 -24.0 9.4 -21.8 9.7 -23.8
2026-04-16T00:57:32.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:57:32.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:57:32.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.956035
2026-04-16T00:57:32.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:57:32.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:57:32.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:57:32.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:57:32.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:57:32.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:57:02', tmtdew=1.69102, humidity=89.5358, cloud=0.0, wind=10.4638, temperature=6.00988, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:56:41.424', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.13724999999999987, -0.018749999999998934, 0.004999999999999005, 0.03250000000000064, 0.016250000000001208, 0.014999999999998792, -0.03974999999999973, -0.045000000000001705, -0.10899999999999821, -0.0017500000000012506, -0.10449999999999982, -0.0034999999999989484, 0.023249999999999105, -0.0030000000000001137, -0.03500000000000014, -0.005749999999999034, -0.059499999999999886, 0.013999999999999346, -0.034750000000000725, -0.002000000000000668, 0.04174999999999862, 0.0007500000000000284, -0.05925000000000047, -0.036500000000001975, -0.018499999999999517, -0.004250000000000753, -0.016500000000000625, -0.0235000000000003, 0.040500000000001535, 0.04800000000000182, 0.03300000000000125, -0.04725000000000179], zp_timestamp='2026-04-15T22:53:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:57:32.032 [DEBUG] [Thread-28786] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:57:32.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:57:32.241 [DEBUG] [Thread-28789] [transport.py] [_log()] starting thread (client mode): 0xf13cbd60
2026-04-16T00:57:32.241 [DEBUG] [Thread-28789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:57:32.255 [DEBUG] [Thread-28789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T00:57:32.256 [INFO] [Thread-28789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T00:57:32.263 [DEBUG] [Thread-28789] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:57:32.263 [DEBUG] [Thread-28789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T00:57:32.263 [DEBUG] [Thread-28789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:57:32.263 [DEBUG] [Thread-28789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:57:32.263 [DEBUG] [Thread-28789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:57:32.263 [DEBUG] [Thread-28789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:57:32.263 [DEBUG] [Thread-28789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:57:32.263 [DEBUG] [Thread-28789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:57:32.263 [DEBUG] [Thread-28789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:57:32.263 [DEBUG] [Thread-28789] [transport.py] [_log()] client lang: <none>
2026-04-16T00:57:32.263 [DEBUG] [Thread-28789] [transport.py] [_log()] server lang: <none>
2026-04-16T00:57:32.263 [DEBUG] [Thread-28789] [transport.py] [_log()] kex follows: False
2026-04-16T00:57:32.263 [DEBUG] [Thread-28789] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:57:32.264 [DEBUG] [Thread-28789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:57:32.264 [DEBUG] [Thread-28789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:57:32.264 [DEBUG] [Thread-28789] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:57:32.264 [DEBUG] [Thread-28789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:57:32.264 [DEBUG] [Thread-28789] [transport.py] [_log()] Compression: none
2026-04-16T00:57:32.264 [DEBUG] [Thread-28789] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:57:32.319 [DEBUG] [Thread-28789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:57:32.319 [DEBUG] [Thread-28789] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:57:32.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T00:57:32.320 [DEBUG] [Thread-28789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T00:57:32.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:57:32.376 [DEBUG] [Thread-28789] [transport.py] [_log()] userauth is OK
2026-04-16T00:57:32.376 [DEBUG] [Thread-28789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:57:32.377 [DEBUG] [Thread-28789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:57:32.377 [DEBUG] [Thread-28789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T00:57:32.377 [DEBUG] [Thread-28789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:57:32.399 [INFO] [Thread-28789] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:57:32.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T00:57:32.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:57:33.288 [DEBUG] [Thread-28789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:57:33.288 [DEBUG] [Thread-28789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:57:33.336 [DEBUG] [Thread-28789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:57:33.336 [DEBUG] [Thread-28789] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:57:33.345 [DEBUG] [Thread-28789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:57:33.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:57:33.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')
2026-04-16T00:57:33.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
2026-04-16T00:57:33.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:57:33.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:57:33.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:57:33.380 [DEBUG] [Thread-28789] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:57:40.143 [DEBUG] [Thread-28791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:57:50.364 [DEBUG] [Thread-28792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:57:55.183 [DEBUG] [Thread-28793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:58:03.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T00:58:03.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T00:58:03.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
2026-04-16T00:58:04.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 0, 57, 38), 1.11709, 92.9198, 0.0, 14.6448, 4.28144, 2, 2, 0, 2, 0, 0),)
2026-04-16T00:58:04.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 00:57:38
2026-04-16T00:58:05.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T00:58:05.487 [DEBUG] [Thread-28794] [transport.py] [_log()] starting thread (client mode): 0xf13e3670
2026-04-16T00:58:05.487 [DEBUG] [Thread-28794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T00:58:05.508 [DEBUG] [Thread-28794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T00:58:05.508 [INFO] [Thread-28794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T00:58:05.511 [DEBUG] [Thread-28794] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T00:58:05.511 [DEBUG] [Thread-28794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T00:58:05.511 [DEBUG] [Thread-28794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T00:58:05.511 [DEBUG] [Thread-28794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:58:05.511 [DEBUG] [Thread-28794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T00:58:05.511 [DEBUG] [Thread-28794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:58:05.511 [DEBUG] [Thread-28794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T00:58:05.512 [DEBUG] [Thread-28794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T00:58:05.512 [DEBUG] [Thread-28794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T00:58:05.512 [DEBUG] [Thread-28794] [transport.py] [_log()] client lang: <none>
2026-04-16T00:58:05.512 [DEBUG] [Thread-28794] [transport.py] [_log()] server lang: <none>
2026-04-16T00:58:05.512 [DEBUG] [Thread-28794] [transport.py] [_log()] kex follows: False
2026-04-16T00:58:05.512 [DEBUG] [Thread-28794] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T00:58:05.512 [DEBUG] [Thread-28794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T00:58:05.512 [DEBUG] [Thread-28794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T00:58:05.512 [DEBUG] [Thread-28794] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T00:58:05.512 [DEBUG] [Thread-28794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T00:58:05.512 [DEBUG] [Thread-28794] [transport.py] [_log()] Compression: none
2026-04-16T00:58:05.512 [DEBUG] [Thread-28794] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T00:58:05.529 [DEBUG] [Thread-28794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T00:58:05.529 [DEBUG] [Thread-28794] [transport.py] [_log()] Switch to new keys ...
2026-04-16T00:58:05.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T00:58:05.529 [DEBUG] [Thread-28794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T00:58:05.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T00:58:05.530 [DEBUG] [Thread-28794] [transport.py] [_log()] userauth is OK
2026-04-16T00:58:05.530 [DEBUG] [Thread-28794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T00:58:05.530 [DEBUG] [Thread-28794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T00:58:05.530 [DEBUG] [Thread-28794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T00:58:05.530 [DEBUG] [Thread-28794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T00:58:05.551 [INFO] [Thread-28794] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T00:58:05.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T00:58:06.347 [DEBUG] [Thread-28794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T00:58:06.347 [DEBUG] [Thread-28794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T00:58:06.347 [DEBUG] [Thread-28794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T00:58:06.388 [DEBUG] [Thread-28794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T00:58:06.388 [DEBUG] [Thread-28794] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T00:58:06.390 [DEBUG] [Thread-28794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T00:58:06.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T00:58:06.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T00:58:06.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T00:58:06.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T00:58:06.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T00:58:06.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T00:58:06.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T00:58:06.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T00:58:06.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T00:58:06.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.956383 -999.00   +9.50   7.11     86   +7.40 1 1 1 2 1     0    0 1.84 -22.78 ZNESW 8.5 7.1 93.8 11.6 9.8 -25.2 9.7 -24.0 9.3 -21.8 9.7 -23.7
2026-04-16T00:58:06.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T00:58:06.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T00:58:06.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.956383
2026-04-16T00:58:06.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T00:58:06.409 [DEBUG] [Thread-28794] [transport.py] [_log()] EOF in transport thread
2026-04-16T00:58:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T00:58:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T00:58:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T00:58:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T00:58:06.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T00:57:38', tmtdew=1.11709, humidity=92.9198, cloud=0.0, wind=14.6448, temperature=4.28144, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T22:57:11.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.46724999999999994, -0.06424999999999947, 0.2742500000000003, 0.5214999999999996, 0.6135000000000002, 0.5982500000000011, 0.06799999999999962, -0.032249999999999446, -0.028999999999999915, -0.09299999999999997, 0.03524999999999956, -0.058999999999999275, 0.11899999999999977, 0.13574999999999982, 0.012999999999998124, -0.02400000000000091, -0.006750000000000256, -0.06450000000000067, 0.027999999999998693, 0.0012499999999988631, 0.023999999999997357, 0.07624999999999815, 0.034250000000000114, -0.05224999999999902, -0.025000000000000355, 0.010500000000000398, -0.01425000000000054, -0.006499999999999062, -0.018499999999999517, 0.034000000000000696, 0.031000000000000583, -0.03249999999999886, -0.08825000000000038], zp_timestamp='2026-04-15T22:56:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T00:58:06.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T00:58:10.213 [DEBUG] [Thread-28797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:58:25.258 [DEBUG] [Thread-28798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:58:31.571 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:58:31.573 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:58:40.289 [DEBUG] [Thread-28799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:58:50.509 [DEBUG] [Thread-28800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:58:55.319 [DEBUG] [Thread-28801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:59:10.348 [DEBUG] [Thread-28802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:59:25.377 [DEBUG] [Thread-28803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:59:31.791 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:59:31.792 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:59:40.407 [DEBUG] [Thread-28804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:59:50.672 [DEBUG] [Thread-28805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T00:59:55.436 [DEBUG] [Thread-28806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:00:10.466 [DEBUG] [Thread-28807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:00:19.466 [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
2026-04-16T01:00:25.496 [DEBUG] [Thread-28808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:00:31.994 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:00:31.995 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:00:40.524 [DEBUG] [Thread-28809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:00:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:00:49.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:00:49.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
2026-04-16T01:00:50.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 0, 36), 1.07273, 93.1853, 0.0, 13.6922, 4.31465, 2, 2, 0, 2, 0, 0),)
2026-04-16T01:00:50.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:00:36
2026-04-16T01:00:50.845 [DEBUG] [Thread-28810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:00:51.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:00:51.594 [DEBUG] [Thread-28811] [transport.py] [_log()] starting thread (client mode): 0xf1366b00
2026-04-16T01:00:51.594 [DEBUG] [Thread-28811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:00:51.613 [DEBUG] [Thread-28811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:00:51.613 [INFO] [Thread-28811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:00:51.617 [DEBUG] [Thread-28811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:00:51.617 [DEBUG] [Thread-28811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:00:51.617 [DEBUG] [Thread-28811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:00:51.617 [DEBUG] [Thread-28811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:00:51.617 [DEBUG] [Thread-28811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:00:51.617 [DEBUG] [Thread-28811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:00:51.617 [DEBUG] [Thread-28811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:00:51.617 [DEBUG] [Thread-28811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:00:51.617 [DEBUG] [Thread-28811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:00:51.617 [DEBUG] [Thread-28811] [transport.py] [_log()] client lang: <none>
2026-04-16T01:00:51.618 [DEBUG] [Thread-28811] [transport.py] [_log()] server lang: <none>
2026-04-16T01:00:51.618 [DEBUG] [Thread-28811] [transport.py] [_log()] kex follows: False
2026-04-16T01:00:51.618 [DEBUG] [Thread-28811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:00:51.618 [DEBUG] [Thread-28811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:00:51.618 [DEBUG] [Thread-28811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:00:51.618 [DEBUG] [Thread-28811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:00:51.618 [DEBUG] [Thread-28811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:00:51.618 [DEBUG] [Thread-28811] [transport.py] [_log()] Compression: none
2026-04-16T01:00:51.618 [DEBUG] [Thread-28811] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:00:51.635 [DEBUG] [Thread-28811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:00:51.635 [DEBUG] [Thread-28811] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:00:51.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:00:51.636 [DEBUG] [Thread-28811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:00:51.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:00:51.637 [DEBUG] [Thread-28811] [transport.py] [_log()] userauth is OK
2026-04-16T01:00:51.637 [DEBUG] [Thread-28811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:00:51.637 [DEBUG] [Thread-28811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:00:51.637 [DEBUG] [Thread-28811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:00:51.637 [DEBUG] [Thread-28811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:00:51.656 [INFO] [Thread-28811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:00:51.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:00:52.398 [DEBUG] [Thread-28811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:00:52.398 [DEBUG] [Thread-28811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:00:52.399 [DEBUG] [Thread-28811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:00:52.439 [DEBUG] [Thread-28811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:00:52.439 [DEBUG] [Thread-28811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:00:52.442 [DEBUG] [Thread-28811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:00:52.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:00:52.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:00:52.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:00:52.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:00:52.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:00:52.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:00:52.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:00:52.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:00:52.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:00:52.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.958466 -999.00   +9.50   6.55     86   +7.40 1 1 1 2 1     0    0 1.35 -36.24 ZNESW 5.1 6.5 107.6 9.3 9.8 -25.2 9.6 -24.1 9.3 -21.8 9.7 -24.0
2026-04-16T01:00:52.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:00:52.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:00:52.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.958466
2026-04-16T01:00:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:00:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:00:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:00:52.463 [DEBUG] [Thread-28811] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:00:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:00:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:00:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:00:36', tmtdew=1.07273, humidity=93.1853, cloud=0.0, wind=13.6922, temperature=4.31465, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:00:11.462', atlas_cloud=1, atlas_rain=1, zp_data=[1.0957499999999998, -0.03575000000000017, 0.7602500000000019, 1.2499999999999991, 1.537, 1.7317500000000008, 0.10699999999999932, 0.01025000000000098, -0.018000000000000682, -0.05900000000000105, 0.06124999999999936, -0.01550000000000118, 0.21700000000000053, 0.16974999999999874, 0.033500000000000085, 0.0009999999999994458, -0.0027500000000006963, -0.033500000000000085, 0.013999999999999346, -0.01425000000000054, 0.019999999999999574, 0.057749999999998636, 0.028250000000001663, -0.023249999999999105, -0.034000000000000696, 0.03449999999999953, 0.025750000000000384, -0.002000000000000668, -0.04049999999999976, 0.058000000000001606, 0.07250000000000156, 0.012000000000000455, -0.07925000000000004], zp_timestamp='2026-04-15T23:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:00:52.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:00:52.730 [DEBUG] [Thread-28814] [transport.py] [_log()] starting thread (client mode): 0xf13c9ea0
2026-04-16T01:00:52.730 [DEBUG] [Thread-28814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:00:52.745 [DEBUG] [Thread-28814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:00:52.745 [INFO] [Thread-28814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:00:52.752 [DEBUG] [Thread-28814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:00:52.752 [DEBUG] [Thread-28814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:00:52.752 [DEBUG] [Thread-28814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:00:52.752 [DEBUG] [Thread-28814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:00:52.753 [DEBUG] [Thread-28814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:00:52.753 [DEBUG] [Thread-28814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:00:52.753 [DEBUG] [Thread-28814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:00:52.753 [DEBUG] [Thread-28814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:00:52.753 [DEBUG] [Thread-28814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:00:52.753 [DEBUG] [Thread-28814] [transport.py] [_log()] client lang: <none>
2026-04-16T01:00:52.753 [DEBUG] [Thread-28814] [transport.py] [_log()] server lang: <none>
2026-04-16T01:00:52.753 [DEBUG] [Thread-28814] [transport.py] [_log()] kex follows: False
2026-04-16T01:00:52.753 [DEBUG] [Thread-28814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:00:52.753 [DEBUG] [Thread-28814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:00:52.753 [DEBUG] [Thread-28814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:00:52.753 [DEBUG] [Thread-28814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:00:52.754 [DEBUG] [Thread-28814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:00:52.754 [DEBUG] [Thread-28814] [transport.py] [_log()] Compression: none
2026-04-16T01:00:52.754 [DEBUG] [Thread-28814] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:00:52.811 [DEBUG] [Thread-28814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:00:52.812 [DEBUG] [Thread-28814] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:00:52.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:00:52.812 [DEBUG] [Thread-28814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:00:52.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:00:52.868 [DEBUG] [Thread-28814] [transport.py] [_log()] userauth is OK
2026-04-16T01:00:52.868 [DEBUG] [Thread-28814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:00:52.868 [DEBUG] [Thread-28814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:00:52.868 [DEBUG] [Thread-28814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:00:52.868 [DEBUG] [Thread-28814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:00:52.893 [INFO] [Thread-28814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:00:52.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:00:52.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:00:53.724 [DEBUG] [Thread-28814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:00:53.725 [DEBUG] [Thread-28814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:00:53.772 [DEBUG] [Thread-28814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:00:53.772 [DEBUG] [Thread-28814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:00:53.781 [DEBUG] [Thread-28814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:00:53.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:00: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')
2026-04-16T01:00:53.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
2026-04-16T01:00:53.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:00:53.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:00:53.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:00:53.815 [DEBUG] [Thread-28814] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:00:55.556 [DEBUG] [Thread-28816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:01:10.599 [DEBUG] [Thread-28817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:01:23.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:01:23.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:01:23.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T01:01:25.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 1, 11), 1.57928, 90.1344, 0.0, 10.2697, 5.96537, 1, 2, 0, 2, 0, 0),)
2026-04-16T01:01:25.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:01:11
2026-04-16T01:01:25.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:01:25.626 [DEBUG] [Thread-28818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:01:25.957 [DEBUG] [Thread-28819] [transport.py] [_log()] starting thread (client mode): 0xee9c7e50
2026-04-16T01:01:25.957 [DEBUG] [Thread-28819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:01:25.977 [DEBUG] [Thread-28819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:01:25.978 [INFO] [Thread-28819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:01:25.980 [DEBUG] [Thread-28819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:01:25.981 [DEBUG] [Thread-28819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:01:25.981 [DEBUG] [Thread-28819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:01:25.981 [DEBUG] [Thread-28819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:01:25.981 [DEBUG] [Thread-28819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:01:25.981 [DEBUG] [Thread-28819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:01:25.981 [DEBUG] [Thread-28819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:01:25.981 [DEBUG] [Thread-28819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:01:25.981 [DEBUG] [Thread-28819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:01:25.981 [DEBUG] [Thread-28819] [transport.py] [_log()] client lang: <none>
2026-04-16T01:01:25.981 [DEBUG] [Thread-28819] [transport.py] [_log()] server lang: <none>
2026-04-16T01:01:25.981 [DEBUG] [Thread-28819] [transport.py] [_log()] kex follows: False
2026-04-16T01:01:25.981 [DEBUG] [Thread-28819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:01:25.982 [DEBUG] [Thread-28819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:01:25.982 [DEBUG] [Thread-28819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:01:25.982 [DEBUG] [Thread-28819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:01:25.982 [DEBUG] [Thread-28819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:01:25.982 [DEBUG] [Thread-28819] [transport.py] [_log()] Compression: none
2026-04-16T01:01:25.982 [DEBUG] [Thread-28819] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:01:25.999 [DEBUG] [Thread-28819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:01:26.000 [DEBUG] [Thread-28819] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:01:26.000 [DEBUG] [Thread-28819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:01:26.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:01:26.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:01:26.002 [DEBUG] [Thread-28819] [transport.py] [_log()] userauth is OK
2026-04-16T01:01:26.002 [DEBUG] [Thread-28819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:01:26.002 [DEBUG] [Thread-28819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:01:26.002 [DEBUG] [Thread-28819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:01:26.002 [DEBUG] [Thread-28819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:01:26.025 [INFO] [Thread-28819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:01:26.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:01:26.854 [DEBUG] [Thread-28819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:01:26.854 [DEBUG] [Thread-28819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:01:26.854 [DEBUG] [Thread-28819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:01:26.894 [DEBUG] [Thread-28819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:01:26.894 [DEBUG] [Thread-28819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:01:26.897 [DEBUG] [Thread-28819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:01:26.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:01:26.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:01:26.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:01:26.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:01:26.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:01:26.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:01:26.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:01:26.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:01:26.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:01:26.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.958813 -999.00   +9.50   7.65     86   +7.40 1 1 1 2 1     0    0 1.34 -36.51 ZNESW 7.8 7.7 120.2 11.2 9.8 -25.3 9.6 -24.0 9.3 -21.8 9.7 -23.9
2026-04-16T01:01:26.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:01:26.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:01:26.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.958813
2026-04-16T01:01:26.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:01:26.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:01:26.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:01:26.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:01:26.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:01:26.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:01:11', tmtdew=1.57928, humidity=90.1344, cloud=0.0, wind=10.2697, temperature=5.96537, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:00:41.443', atlas_cloud=1, atlas_rain=1, zp_data=[1.0957499999999998, -0.03575000000000017, 0.7602500000000019, 1.2499999999999991, 1.537, 1.7317500000000008, 0.10699999999999932, 0.01025000000000098, -0.018000000000000682, -0.05900000000000105, 0.06124999999999936, -0.01550000000000118, 0.21700000000000053, 0.16974999999999874, 0.033500000000000085, 0.0009999999999994458, -0.0027500000000006963, -0.033500000000000085, 0.013999999999999346, -0.01425000000000054, 0.019999999999999574, 0.057749999999998636, 0.028250000000001663, -0.023249999999999105, -0.034000000000000696, 0.03449999999999953, 0.025750000000000384, -0.002000000000000668, -0.04049999999999976, 0.058000000000001606, 0.07250000000000156, 0.012000000000000455, -0.07925000000000004], zp_timestamp='2026-04-15T23:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:01:26.919 [DEBUG] [Thread-28819] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:01:27.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:01:27.128 [DEBUG] [Thread-28822] [transport.py] [_log()] starting thread (client mode): 0xee9eb400
2026-04-16T01:01:27.128 [DEBUG] [Thread-28822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:01:27.143 [DEBUG] [Thread-28822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:01:27.143 [INFO] [Thread-28822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:01:27.151 [DEBUG] [Thread-28822] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:01:27.151 [DEBUG] [Thread-28822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:01:27.151 [DEBUG] [Thread-28822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:01:27.151 [DEBUG] [Thread-28822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:01:27.151 [DEBUG] [Thread-28822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:01:27.151 [DEBUG] [Thread-28822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:01:27.151 [DEBUG] [Thread-28822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:01:27.151 [DEBUG] [Thread-28822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:01:27.151 [DEBUG] [Thread-28822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:01:27.151 [DEBUG] [Thread-28822] [transport.py] [_log()] client lang: <none>
2026-04-16T01:01:27.151 [DEBUG] [Thread-28822] [transport.py] [_log()] server lang: <none>
2026-04-16T01:01:27.151 [DEBUG] [Thread-28822] [transport.py] [_log()] kex follows: False
2026-04-16T01:01:27.152 [DEBUG] [Thread-28822] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:01:27.152 [DEBUG] [Thread-28822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:01:27.152 [DEBUG] [Thread-28822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:01:27.152 [DEBUG] [Thread-28822] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:01:27.152 [DEBUG] [Thread-28822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:01:27.152 [DEBUG] [Thread-28822] [transport.py] [_log()] Compression: none
2026-04-16T01:01:27.152 [DEBUG] [Thread-28822] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:01:27.206 [DEBUG] [Thread-28822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:01:27.206 [DEBUG] [Thread-28822] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:01:27.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:01:27.207 [DEBUG] [Thread-28822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:01:27.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:01:27.290 [DEBUG] [Thread-28822] [transport.py] [_log()] userauth is OK
2026-04-16T01:01:27.290 [DEBUG] [Thread-28822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:01:27.291 [DEBUG] [Thread-28822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:01:27.291 [DEBUG] [Thread-28822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:01:27.291 [DEBUG] [Thread-28822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:01:27.311 [INFO] [Thread-28822] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:01:27.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:01:27.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:01:28.208 [DEBUG] [Thread-28822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:01:28.208 [DEBUG] [Thread-28822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:01:28.256 [DEBUG] [Thread-28822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:01:28.256 [DEBUG] [Thread-28822] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:01:28.265 [DEBUG] [Thread-28822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:01:28.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:01:28.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')
2026-04-16T01:01:28.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
2026-04-16T01:01:28.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:01:28.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:01:28.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:01:28.300 [DEBUG] [Thread-28822] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:01:32.203 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:01:33.413 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:01:40.655 [DEBUG] [Thread-28824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:01:50.996 [DEBUG] [Thread-28825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:01:55.697 [DEBUG] [Thread-28826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:01:58.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:01:58.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:01:58.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
2026-04-16T01:01:59.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 1, 47), 1.05295, 93.3012, 0.0, 13.2689, 4.29789, 2, 2, 0, 2, 0, 0),)
2026-04-16T01:01:59.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:01:47
2026-04-16T01:01:59.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:02:00.436 [DEBUG] [Thread-28827] [transport.py] [_log()] starting thread (client mode): 0xee9eb1f0
2026-04-16T01:02:00.436 [DEBUG] [Thread-28827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:02:00.457 [DEBUG] [Thread-28827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:02:00.457 [INFO] [Thread-28827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:02:00.460 [DEBUG] [Thread-28827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:02:00.460 [DEBUG] [Thread-28827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:02:00.460 [DEBUG] [Thread-28827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:02:00.460 [DEBUG] [Thread-28827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:02:00.460 [DEBUG] [Thread-28827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:02:00.460 [DEBUG] [Thread-28827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:02:00.461 [DEBUG] [Thread-28827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:02:00.461 [DEBUG] [Thread-28827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:02:00.461 [DEBUG] [Thread-28827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:02:00.461 [DEBUG] [Thread-28827] [transport.py] [_log()] client lang: <none>
2026-04-16T01:02:00.461 [DEBUG] [Thread-28827] [transport.py] [_log()] server lang: <none>
2026-04-16T01:02:00.461 [DEBUG] [Thread-28827] [transport.py] [_log()] kex follows: False
2026-04-16T01:02:00.461 [DEBUG] [Thread-28827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:02:00.461 [DEBUG] [Thread-28827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:02:00.461 [DEBUG] [Thread-28827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:02:00.461 [DEBUG] [Thread-28827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:02:00.461 [DEBUG] [Thread-28827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:02:00.461 [DEBUG] [Thread-28827] [transport.py] [_log()] Compression: none
2026-04-16T01:02:00.461 [DEBUG] [Thread-28827] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:02:00.477 [DEBUG] [Thread-28827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:02:00.477 [DEBUG] [Thread-28827] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:02:00.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:02:00.477 [DEBUG] [Thread-28827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:02:00.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:02:00.478 [DEBUG] [Thread-28827] [transport.py] [_log()] userauth is OK
2026-04-16T01:02:00.478 [DEBUG] [Thread-28827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:02:00.478 [DEBUG] [Thread-28827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:02:00.478 [DEBUG] [Thread-28827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:02:00.479 [DEBUG] [Thread-28827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:02:00.497 [INFO] [Thread-28827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:02:00.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:02:01.284 [DEBUG] [Thread-28827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:02:01.284 [DEBUG] [Thread-28827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:02:01.284 [DEBUG] [Thread-28827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:02:01.325 [DEBUG] [Thread-28827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:02:01.325 [DEBUG] [Thread-28827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:02:01.327 [DEBUG] [Thread-28827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:02:01.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:02:01.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:02:01.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:02:01.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:02:01.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:02:01.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:02:01.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:02:01.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:02:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:02:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.959508 -999.00   +9.50  10.04     86   +7.40 1 1 1 2 1     0    0 1.24 -42.02 ZNESW 8.4 10.0 67.2 10.8 9.8 -25.2 9.7 -24.1 9.3 -21.8 9.7 -23.8
2026-04-16T01:02:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:02:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:02:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.959508
2026-04-16T01:02:01.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:02:01.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:02:01.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:02:01.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:02:01.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:02:01.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:01:47', tmtdew=1.05295, humidity=93.3012, cloud=0.0, wind=13.2689, temperature=4.29789, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:01:41.491', atlas_cloud=1, atlas_rain=1, zp_data=[1.0957499999999998, -0.03575000000000017, 0.7602500000000019, 1.2499999999999991, 1.537, 1.7317500000000008, 0.10699999999999932, 0.01025000000000098, -0.018000000000000682, -0.05900000000000105, 0.06124999999999936, -0.01550000000000118, 0.21700000000000053, 0.16974999999999874, 0.033500000000000085, 0.0009999999999994458, -0.0027500000000006963, -0.033500000000000085, 0.013999999999999346, -0.01425000000000054, 0.019999999999999574, 0.057749999999998636, 0.028250000000001663, -0.023249999999999105, -0.034000000000000696, 0.03449999999999953, 0.025750000000000384, -0.002000000000000668, -0.04049999999999976, 0.058000000000001606, 0.07250000000000156, 0.012000000000000455, -0.07925000000000004], zp_timestamp='2026-04-15T23:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:02:01.341 [DEBUG] [Thread-28827] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:02:01.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:02:01.551 [DEBUG] [Thread-28830] [transport.py] [_log()] starting thread (client mode): 0xee9eb0a0
2026-04-16T01:02:01.551 [DEBUG] [Thread-28830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:02:01.569 [DEBUG] [Thread-28830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:02:01.569 [INFO] [Thread-28830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:02:01.576 [DEBUG] [Thread-28830] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:02:01.576 [DEBUG] [Thread-28830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:02:01.577 [DEBUG] [Thread-28830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:02:01.577 [DEBUG] [Thread-28830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:02:01.577 [DEBUG] [Thread-28830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:02:01.577 [DEBUG] [Thread-28830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:02:01.577 [DEBUG] [Thread-28830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:02:01.577 [DEBUG] [Thread-28830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:02:01.577 [DEBUG] [Thread-28830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:02:01.577 [DEBUG] [Thread-28830] [transport.py] [_log()] client lang: <none>
2026-04-16T01:02:01.577 [DEBUG] [Thread-28830] [transport.py] [_log()] server lang: <none>
2026-04-16T01:02:01.577 [DEBUG] [Thread-28830] [transport.py] [_log()] kex follows: False
2026-04-16T01:02:01.577 [DEBUG] [Thread-28830] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:02:01.577 [DEBUG] [Thread-28830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:02:01.578 [DEBUG] [Thread-28830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:02:01.578 [DEBUG] [Thread-28830] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:02:01.578 [DEBUG] [Thread-28830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:02:01.578 [DEBUG] [Thread-28830] [transport.py] [_log()] Compression: none
2026-04-16T01:02:01.578 [DEBUG] [Thread-28830] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:02:01.634 [DEBUG] [Thread-28830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:02:01.634 [DEBUG] [Thread-28830] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:02:01.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:02:01.635 [DEBUG] [Thread-28830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:02:01.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:02:01.690 [DEBUG] [Thread-28830] [transport.py] [_log()] userauth is OK
2026-04-16T01:02:01.691 [DEBUG] [Thread-28830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:02:01.691 [DEBUG] [Thread-28830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:02:01.691 [DEBUG] [Thread-28830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:02:01.691 [DEBUG] [Thread-28830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:02:01.719 [INFO] [Thread-28830] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:02:01.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:02:01.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:02:02.593 [DEBUG] [Thread-28830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:02:02.594 [DEBUG] [Thread-28830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:02:02.641 [DEBUG] [Thread-28830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:02:02.641 [DEBUG] [Thread-28830] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:02:02.650 [DEBUG] [Thread-28830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:02:02.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:02:02.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')
2026-04-16T01:02:02.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
2026-04-16T01:02:02.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:02:02.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:02:02.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:02:02.685 [DEBUG] [Thread-28830] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:02:10.725 [DEBUG] [Thread-28832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:02:25.770 [DEBUG] [Thread-28833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:02:32.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:02:32.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:02:32.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
2026-04-16T01:02:33.617 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:02:33.618 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:02:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 2, 22), 1.56526, 90.2229, 0.0, 10.5696, 6.02071, 1, 2, 0, 2, 0, 0),)
2026-04-16T01:02:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:02:22
2026-04-16T01:02:34.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:02:34.827 [DEBUG] [Thread-28834] [transport.py] [_log()] starting thread (client mode): 0xee907160
2026-04-16T01:02:34.827 [DEBUG] [Thread-28834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:02:34.848 [DEBUG] [Thread-28834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:02:34.848 [INFO] [Thread-28834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:02:34.852 [DEBUG] [Thread-28834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:02:34.852 [DEBUG] [Thread-28834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:02:34.852 [DEBUG] [Thread-28834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:02:34.852 [DEBUG] [Thread-28834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:02:34.852 [DEBUG] [Thread-28834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:02:34.852 [DEBUG] [Thread-28834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:02:34.852 [DEBUG] [Thread-28834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:02:34.852 [DEBUG] [Thread-28834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:02:34.852 [DEBUG] [Thread-28834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:02:34.852 [DEBUG] [Thread-28834] [transport.py] [_log()] client lang: <none>
2026-04-16T01:02:34.852 [DEBUG] [Thread-28834] [transport.py] [_log()] server lang: <none>
2026-04-16T01:02:34.852 [DEBUG] [Thread-28834] [transport.py] [_log()] kex follows: False
2026-04-16T01:02:34.852 [DEBUG] [Thread-28834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:02:34.852 [DEBUG] [Thread-28834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:02:34.852 [DEBUG] [Thread-28834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:02:34.853 [DEBUG] [Thread-28834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:02:34.853 [DEBUG] [Thread-28834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:02:34.853 [DEBUG] [Thread-28834] [transport.py] [_log()] Compression: none
2026-04-16T01:02:34.853 [DEBUG] [Thread-28834] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:02:34.868 [DEBUG] [Thread-28834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:02:34.868 [DEBUG] [Thread-28834] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:02:34.869 [DEBUG] [Thread-28834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:02:34.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:02:34.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:02:34.870 [DEBUG] [Thread-28834] [transport.py] [_log()] userauth is OK
2026-04-16T01:02:34.870 [DEBUG] [Thread-28834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:02:34.870 [DEBUG] [Thread-28834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:02:34.870 [DEBUG] [Thread-28834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:02:34.870 [DEBUG] [Thread-28834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:02:34.889 [INFO] [Thread-28834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:02:34.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:02:35.675 [DEBUG] [Thread-28834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:02:35.676 [DEBUG] [Thread-28834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:02:35.678 [DEBUG] [Thread-28834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:02:35.716 [DEBUG] [Thread-28834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:02:35.716 [DEBUG] [Thread-28834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:02:35.720 [DEBUG] [Thread-28834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:02:35.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:02:35.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:02:35.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:02:35.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:02:35.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:02:35.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:02:35.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:02:35.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:02:35.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:02:35.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.959855 -999.00   +9.50   6.60     86   +7.40 1 1 1 2 1     0    0 1.21 -42.34 ZNESW 6.5 6.6 106.3 9.8 9.8 -25.2 9.6 -23.9 9.4 -21.9 9.7 -23.9
2026-04-16T01:02:35.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:02:35.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:02:35.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.959855
2026-04-16T01:02:35.745 [DEBUG] [Thread-28834] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:02:35.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:02:35.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:02:35.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:02:35.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:02:35.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:02:35.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:02:22', tmtdew=1.56526, humidity=90.2229, cloud=0.0, wind=10.5696, temperature=6.02071, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:02:11.472', atlas_cloud=1, atlas_rain=1, zp_data=[1.0957499999999998, -0.03575000000000017, 0.7602500000000019, 1.2499999999999991, 1.537, 1.7317500000000008, 0.10699999999999932, 0.01025000000000098, -0.018000000000000682, -0.05900000000000105, 0.06124999999999936, -0.01550000000000118, 0.21700000000000053, 0.16974999999999874, 0.033500000000000085, 0.0009999999999994458, -0.0027500000000006963, -0.033500000000000085, 0.013999999999999346, -0.01425000000000054, 0.019999999999999574, 0.057749999999998636, 0.028250000000001663, -0.023249999999999105, -0.034000000000000696, 0.03449999999999953, 0.025750000000000384, -0.002000000000000668, -0.04049999999999976, 0.058000000000001606, 0.07250000000000156, 0.012000000000000455, -0.07925000000000004], zp_timestamp='2026-04-15T23:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:02:35.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:02:36.007 [DEBUG] [Thread-28837] [transport.py] [_log()] starting thread (client mode): 0xee9076d0
2026-04-16T01:02:36.007 [DEBUG] [Thread-28837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:02:36.028 [DEBUG] [Thread-28837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:02:36.028 [INFO] [Thread-28837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:02:36.035 [DEBUG] [Thread-28837] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:02:36.035 [DEBUG] [Thread-28837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:02:36.036 [DEBUG] [Thread-28837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:02:36.036 [DEBUG] [Thread-28837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:02:36.036 [DEBUG] [Thread-28837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:02:36.036 [DEBUG] [Thread-28837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:02:36.036 [DEBUG] [Thread-28837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:02:36.036 [DEBUG] [Thread-28837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:02:36.036 [DEBUG] [Thread-28837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:02:36.036 [DEBUG] [Thread-28837] [transport.py] [_log()] client lang: <none>
2026-04-16T01:02:36.036 [DEBUG] [Thread-28837] [transport.py] [_log()] server lang: <none>
2026-04-16T01:02:36.036 [DEBUG] [Thread-28837] [transport.py] [_log()] kex follows: False
2026-04-16T01:02:36.036 [DEBUG] [Thread-28837] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:02:36.036 [DEBUG] [Thread-28837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:02:36.037 [DEBUG] [Thread-28837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:02:36.037 [DEBUG] [Thread-28837] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:02:36.037 [DEBUG] [Thread-28837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:02:36.037 [DEBUG] [Thread-28837] [transport.py] [_log()] Compression: none
2026-04-16T01:02:36.037 [DEBUG] [Thread-28837] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:02:36.096 [DEBUG] [Thread-28837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:02:36.097 [DEBUG] [Thread-28837] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:02:36.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:02:36.098 [DEBUG] [Thread-28837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:02:36.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:02:36.154 [DEBUG] [Thread-28837] [transport.py] [_log()] userauth is OK
2026-04-16T01:02:36.154 [DEBUG] [Thread-28837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:02:36.154 [DEBUG] [Thread-28837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:02:36.154 [DEBUG] [Thread-28837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:02:36.154 [DEBUG] [Thread-28837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:02:36.174 [INFO] [Thread-28837] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:02:36.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:02:36.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:02:37.013 [DEBUG] [Thread-28837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:02:37.013 [DEBUG] [Thread-28837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:02:37.061 [DEBUG] [Thread-28837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:02:37.061 [DEBUG] [Thread-28837] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:02:37.070 [DEBUG] [Thread-28837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:02:37.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:02:37.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')
2026-04-16T01:02:37.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
2026-04-16T01:02:37.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:02:37.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:02:37.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:02:37.106 [DEBUG] [Thread-28837] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:02:40.802 [DEBUG] [Thread-28839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:02:51.157 [DEBUG] [Thread-28840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:02:55.848 [DEBUG] [Thread-28841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:03:07.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:03:07.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:03:07.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
2026-04-16T01:03:08.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 2, 58), 1.53105, 90.2229, 0.0, 10.2874, 5.96541, 1, 2, 0, 2, 0, 0),)
2026-04-16T01:03:08.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:02:58
2026-04-16T01:03:08.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:03:09.236 [DEBUG] [Thread-28842] [transport.py] [_log()] starting thread (client mode): 0xee907460
2026-04-16T01:03:09.236 [DEBUG] [Thread-28842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:03:09.246 [DEBUG] [Thread-28842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:03:09.247 [INFO] [Thread-28842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:03:09.250 [DEBUG] [Thread-28842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:03:09.250 [DEBUG] [Thread-28842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:03:09.250 [DEBUG] [Thread-28842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:03:09.250 [DEBUG] [Thread-28842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:03:09.250 [DEBUG] [Thread-28842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:03:09.250 [DEBUG] [Thread-28842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:03:09.250 [DEBUG] [Thread-28842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:03:09.250 [DEBUG] [Thread-28842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:03:09.250 [DEBUG] [Thread-28842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:03:09.250 [DEBUG] [Thread-28842] [transport.py] [_log()] client lang: <none>
2026-04-16T01:03:09.250 [DEBUG] [Thread-28842] [transport.py] [_log()] server lang: <none>
2026-04-16T01:03:09.251 [DEBUG] [Thread-28842] [transport.py] [_log()] kex follows: False
2026-04-16T01:03:09.251 [DEBUG] [Thread-28842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:03:09.251 [DEBUG] [Thread-28842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:03:09.251 [DEBUG] [Thread-28842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:03:09.251 [DEBUG] [Thread-28842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:03:09.251 [DEBUG] [Thread-28842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:03:09.251 [DEBUG] [Thread-28842] [transport.py] [_log()] Compression: none
2026-04-16T01:03:09.251 [DEBUG] [Thread-28842] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:03:09.268 [DEBUG] [Thread-28842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:03:09.268 [DEBUG] [Thread-28842] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:03:09.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:03:09.269 [DEBUG] [Thread-28842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:03:09.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:03:09.269 [DEBUG] [Thread-28842] [transport.py] [_log()] userauth is OK
2026-04-16T01:03:09.270 [DEBUG] [Thread-28842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:03:09.270 [DEBUG] [Thread-28842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:03:09.270 [DEBUG] [Thread-28842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:03:09.270 [DEBUG] [Thread-28842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:03:09.304 [INFO] [Thread-28842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:03:09.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:03:10.043 [DEBUG] [Thread-28842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:03:10.043 [DEBUG] [Thread-28842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:03:10.044 [DEBUG] [Thread-28842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:03:10.084 [DEBUG] [Thread-28842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:03:10.084 [DEBUG] [Thread-28842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:03:10.087 [DEBUG] [Thread-28842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:03:10.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:03:10.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:03:10.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:03:10.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:03:10.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:03:10.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:03:10.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:03:10.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:03:10.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:03:10.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.960202 -999.00   +9.50   7.29     87   +7.50 1 1 1 2 1     0    0 1.02 -45.83 ZNESW 8.0 7.3 77.0 11.1 9.8 -25.1 9.7 -24.0 9.3 -21.8 9.7 -23.8
2026-04-16T01:03:10.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:03:10.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:03:10.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.960202
2026-04-16T01:03:10.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:03:10.113 [DEBUG] [Thread-28842] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:03:10.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:03:10.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:03:10.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:03:10.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:03:10.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:02:58', tmtdew=1.53105, humidity=90.2229, cloud=0.0, wind=10.2874, temperature=5.96541, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:02:41.453', atlas_cloud=1, atlas_rain=1, zp_data=[1.0957499999999998, -0.03575000000000017, 0.7602500000000019, 1.2499999999999991, 1.537, 1.7317500000000008, 0.10699999999999932, 0.01025000000000098, -0.018000000000000682, -0.05900000000000105, 0.06124999999999936, -0.01550000000000118, 0.21700000000000053, 0.16974999999999874, 0.033500000000000085, 0.0009999999999994458, -0.0027500000000006963, -0.033500000000000085, 0.013999999999999346, -0.01425000000000054, 0.019999999999999574, 0.057749999999998636, 0.028250000000001663, -0.023249999999999105, -0.034000000000000696, 0.03449999999999953, 0.025750000000000384, -0.002000000000000668, -0.04049999999999976, 0.058000000000001606, 0.07250000000000156, 0.012000000000000455, -0.07925000000000004], zp_timestamp='2026-04-15T23:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:03:10.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:03:10.381 [DEBUG] [Thread-28845] [transport.py] [_log()] starting thread (client mode): 0xee9ea170
2026-04-16T01:03:10.381 [DEBUG] [Thread-28845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:03:10.395 [DEBUG] [Thread-28845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:03:10.395 [INFO] [Thread-28845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:03:10.403 [DEBUG] [Thread-28845] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:03:10.403 [DEBUG] [Thread-28845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:03:10.403 [DEBUG] [Thread-28845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:03:10.403 [DEBUG] [Thread-28845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:03:10.403 [DEBUG] [Thread-28845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:03:10.403 [DEBUG] [Thread-28845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:03:10.403 [DEBUG] [Thread-28845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:03:10.403 [DEBUG] [Thread-28845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:03:10.403 [DEBUG] [Thread-28845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:03:10.403 [DEBUG] [Thread-28845] [transport.py] [_log()] client lang: <none>
2026-04-16T01:03:10.403 [DEBUG] [Thread-28845] [transport.py] [_log()] server lang: <none>
2026-04-16T01:03:10.403 [DEBUG] [Thread-28845] [transport.py] [_log()] kex follows: False
2026-04-16T01:03:10.404 [DEBUG] [Thread-28845] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:03:10.404 [DEBUG] [Thread-28845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:03:10.404 [DEBUG] [Thread-28845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:03:10.404 [DEBUG] [Thread-28845] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:03:10.404 [DEBUG] [Thread-28845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:03:10.404 [DEBUG] [Thread-28845] [transport.py] [_log()] Compression: none
2026-04-16T01:03:10.404 [DEBUG] [Thread-28845] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:03:10.460 [DEBUG] [Thread-28845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:03:10.461 [DEBUG] [Thread-28845] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:03:10.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:03:10.461 [DEBUG] [Thread-28845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:03:10.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:03:10.517 [DEBUG] [Thread-28845] [transport.py] [_log()] userauth is OK
2026-04-16T01:03:10.517 [DEBUG] [Thread-28845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:03:10.517 [DEBUG] [Thread-28845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:03:10.518 [DEBUG] [Thread-28845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:03:10.518 [DEBUG] [Thread-28845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:03:10.536 [INFO] [Thread-28845] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:03:10.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:03:10.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:03:10.877 [DEBUG] [Thread-28847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:03:11.362 [DEBUG] [Thread-28845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:03:11.362 [DEBUG] [Thread-28845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:03:11.409 [DEBUG] [Thread-28845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:03:11.410 [DEBUG] [Thread-28845] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:03:11.418 [DEBUG] [Thread-28845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:03:11.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:03:11.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')
2026-04-16T01:03:11.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
2026-04-16T01:03:11.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:03:11.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:03:11.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:03:11.454 [DEBUG] [Thread-28845] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:03:25.920 [DEBUG] [Thread-28848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:03:33.821 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:03:33.822 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:03:40.952 [DEBUG] [Thread-28849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:03:41.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:03:41.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:03:41.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
2026-04-16T01:03:42.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 3, 33), 1.04126, 93.3676, 0.0, 12.7397, 4.26475, 2, 2, 0, 2, 0, 0),)
2026-04-16T01:03:42.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:03:33
2026-04-16T01:03:43.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:03:43.510 [DEBUG] [Thread-28850] [transport.py] [_log()] starting thread (client mode): 0xee9eb7f0
2026-04-16T01:03:43.510 [DEBUG] [Thread-28850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:03:43.530 [DEBUG] [Thread-28850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:03:43.530 [INFO] [Thread-28850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:03:43.533 [DEBUG] [Thread-28850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:03:43.533 [DEBUG] [Thread-28850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:03:43.533 [DEBUG] [Thread-28850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:03:43.533 [DEBUG] [Thread-28850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:03:43.533 [DEBUG] [Thread-28850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:03:43.533 [DEBUG] [Thread-28850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:03:43.534 [DEBUG] [Thread-28850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:03:43.534 [DEBUG] [Thread-28850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:03:43.534 [DEBUG] [Thread-28850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:03:43.534 [DEBUG] [Thread-28850] [transport.py] [_log()] client lang: <none>
2026-04-16T01:03:43.534 [DEBUG] [Thread-28850] [transport.py] [_log()] server lang: <none>
2026-04-16T01:03:43.534 [DEBUG] [Thread-28850] [transport.py] [_log()] kex follows: False
2026-04-16T01:03:43.534 [DEBUG] [Thread-28850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:03:43.534 [DEBUG] [Thread-28850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:03:43.534 [DEBUG] [Thread-28850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:03:43.534 [DEBUG] [Thread-28850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:03:43.535 [DEBUG] [Thread-28850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:03:43.535 [DEBUG] [Thread-28850] [transport.py] [_log()] Compression: none
2026-04-16T01:03:43.535 [DEBUG] [Thread-28850] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:03:43.551 [DEBUG] [Thread-28850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:03:43.551 [DEBUG] [Thread-28850] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:03:43.552 [DEBUG] [Thread-28850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:03:43.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:03:43.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:03:43.553 [DEBUG] [Thread-28850] [transport.py] [_log()] userauth is OK
2026-04-16T01:03:43.553 [DEBUG] [Thread-28850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:03:43.553 [DEBUG] [Thread-28850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:03:43.553 [DEBUG] [Thread-28850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:03:43.554 [DEBUG] [Thread-28850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:03:43.589 [INFO] [Thread-28850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:03:43.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:03:44.209 [DEBUG] [Thread-28850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:03:44.209 [DEBUG] [Thread-28850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:03:44.210 [DEBUG] [Thread-28850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:03:44.250 [DEBUG] [Thread-28850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:03:44.250 [DEBUG] [Thread-28850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:03:44.252 [DEBUG] [Thread-28850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:03:44.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:03:44.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:03:44.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:03:44.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:03:44.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:03:44.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:03:44.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:03:44.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:03:44.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:03:44.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.960549 -999.00   +9.50   7.53     87   +7.50 1 1 1 2 1     0    0 0.97 -47.12 ZNESW 9.1 7.5 110.4 9.0 9.8 -25.3 9.7 -24.0 9.4 -21.9 9.7 -24.0
2026-04-16T01:03:44.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:03:44.274 [DEBUG] [Thread-28850] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:03:44.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:03:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.960549
2026-04-16T01:03:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:03:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:03:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:03:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:03:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:03:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:03:33', tmtdew=1.04126, humidity=93.3676, cloud=0.0, wind=12.7397, temperature=4.26475, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:03:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[1.0957499999999998, -0.03575000000000017, 0.7602500000000019, 1.2499999999999991, 1.537, 1.7317500000000008, 0.10699999999999932, 0.01025000000000098, -0.018000000000000682, -0.05900000000000105, 0.06124999999999936, -0.01550000000000118, 0.21700000000000053, 0.16974999999999874, 0.033500000000000085, 0.0009999999999994458, -0.0027500000000006963, -0.033500000000000085, 0.013999999999999346, -0.01425000000000054, 0.019999999999999574, 0.057749999999998636, 0.028250000000001663, -0.023249999999999105, -0.034000000000000696, 0.03449999999999953, 0.025750000000000384, -0.002000000000000668, -0.04049999999999976, 0.058000000000001606, 0.07250000000000156, 0.012000000000000455, -0.07925000000000004], zp_timestamp='2026-04-15T23:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:03:44.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:03:44.531 [DEBUG] [Thread-28853] [transport.py] [_log()] starting thread (client mode): 0xee9eb250
2026-04-16T01:03:44.531 [DEBUG] [Thread-28853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:03:44.545 [DEBUG] [Thread-28853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:03:44.545 [INFO] [Thread-28853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:03:44.553 [DEBUG] [Thread-28853] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:03:44.553 [DEBUG] [Thread-28853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:03:44.553 [DEBUG] [Thread-28853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:03:44.553 [DEBUG] [Thread-28853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:03:44.553 [DEBUG] [Thread-28853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:03:44.553 [DEBUG] [Thread-28853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:03:44.553 [DEBUG] [Thread-28853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:03:44.553 [DEBUG] [Thread-28853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:03:44.553 [DEBUG] [Thread-28853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:03:44.554 [DEBUG] [Thread-28853] [transport.py] [_log()] client lang: <none>
2026-04-16T01:03:44.554 [DEBUG] [Thread-28853] [transport.py] [_log()] server lang: <none>
2026-04-16T01:03:44.554 [DEBUG] [Thread-28853] [transport.py] [_log()] kex follows: False
2026-04-16T01:03:44.554 [DEBUG] [Thread-28853] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:03:44.554 [DEBUG] [Thread-28853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:03:44.554 [DEBUG] [Thread-28853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:03:44.554 [DEBUG] [Thread-28853] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:03:44.554 [DEBUG] [Thread-28853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:03:44.554 [DEBUG] [Thread-28853] [transport.py] [_log()] Compression: none
2026-04-16T01:03:44.554 [DEBUG] [Thread-28853] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:03:44.612 [DEBUG] [Thread-28853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:03:44.612 [DEBUG] [Thread-28853] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:03:44.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:03:44.613 [DEBUG] [Thread-28853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:03:44.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:03:44.669 [DEBUG] [Thread-28853] [transport.py] [_log()] userauth is OK
2026-04-16T01:03:44.669 [DEBUG] [Thread-28853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:03:44.669 [DEBUG] [Thread-28853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:03:44.669 [DEBUG] [Thread-28853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:03:44.669 [DEBUG] [Thread-28853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:03:44.691 [INFO] [Thread-28853] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:03:44.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:03:44.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:03:45.535 [DEBUG] [Thread-28853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:03:45.536 [DEBUG] [Thread-28853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:03:45.583 [DEBUG] [Thread-28853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:03:45.583 [DEBUG] [Thread-28853] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:03:45.591 [DEBUG] [Thread-28853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:03:45.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:03:45.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')
2026-04-16T01:03:45.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
2026-04-16T01:03:45.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:03:45.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:03:45.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:03:45.623 [DEBUG] [Thread-28853] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:03:51.308 [DEBUG] [Thread-28855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:03:55.984 [DEBUG] [Thread-28856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:04:11.028 [DEBUG] [Thread-28857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:04:15.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:04:15.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:04:15.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
2026-04-16T01:04:16.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 4, 9), 1.52227, 90.2783, 0.0, 10.0933, 5.99865, 1, 2, 0, 2, 0, 0),)
2026-04-16T01:04:16.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:04:09
2026-04-16T01:04:17.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:04:17.779 [DEBUG] [Thread-28858] [transport.py] [_log()] starting thread (client mode): 0xf13ca770
2026-04-16T01:04:17.779 [DEBUG] [Thread-28858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:04:17.795 [DEBUG] [Thread-28858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:04:17.795 [INFO] [Thread-28858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:04:17.798 [DEBUG] [Thread-28858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:04:17.798 [DEBUG] [Thread-28858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:04:17.798 [DEBUG] [Thread-28858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:04:17.798 [DEBUG] [Thread-28858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:04:17.799 [DEBUG] [Thread-28858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:04:17.799 [DEBUG] [Thread-28858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:04:17.799 [DEBUG] [Thread-28858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:04:17.799 [DEBUG] [Thread-28858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:04:17.799 [DEBUG] [Thread-28858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:04:17.799 [DEBUG] [Thread-28858] [transport.py] [_log()] client lang: <none>
2026-04-16T01:04:17.799 [DEBUG] [Thread-28858] [transport.py] [_log()] server lang: <none>
2026-04-16T01:04:17.799 [DEBUG] [Thread-28858] [transport.py] [_log()] kex follows: False
2026-04-16T01:04:17.799 [DEBUG] [Thread-28858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:04:17.799 [DEBUG] [Thread-28858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:04:17.799 [DEBUG] [Thread-28858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:04:17.799 [DEBUG] [Thread-28858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:04:17.800 [DEBUG] [Thread-28858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:04:17.800 [DEBUG] [Thread-28858] [transport.py] [_log()] Compression: none
2026-04-16T01:04:17.800 [DEBUG] [Thread-28858] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:04:17.811 [DEBUG] [Thread-28858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:04:17.811 [DEBUG] [Thread-28858] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:04:17.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:04:17.812 [DEBUG] [Thread-28858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:04:17.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:04:17.852 [DEBUG] [Thread-28858] [transport.py] [_log()] userauth is OK
2026-04-16T01:04:17.852 [DEBUG] [Thread-28858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:04:17.852 [DEBUG] [Thread-28858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:04:17.852 [DEBUG] [Thread-28858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:04:17.853 [DEBUG] [Thread-28858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:04:17.871 [INFO] [Thread-28858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:04:17.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:04:18.514 [DEBUG] [Thread-28858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:04:18.514 [DEBUG] [Thread-28858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:04:18.515 [DEBUG] [Thread-28858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:04:18.554 [DEBUG] [Thread-28858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:04:18.554 [DEBUG] [Thread-28858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:04:18.557 [DEBUG] [Thread-28858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:04:18.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:04:18.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:04:18.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:04:18.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:04:18.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:04:19.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:04:19.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:04:19.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:04:19.127 [DEBUG] [Thread-28858] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:04:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:04:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.960896 -999.00   +9.50   8.29     87   +7.50 1 1 1 2 1     0    0 0.93 -48.71 ZNESW 8.7 8.3 120.8 11.8 9.8 -25.2 9.6 -23.9 9.3 -21.8 9.7 -23.9
2026-04-16T01:04:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:04:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:04:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.960896
2026-04-16T01:04:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:04:19.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:04:19.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:04:19.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:04:19.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:04:19.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:04:09', tmtdew=1.52227, humidity=90.2783, cloud=0.0, wind=10.0933, temperature=5.99865, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:03:41.414', atlas_cloud=1, atlas_rain=1, zp_data=[1.0957499999999998, -0.03575000000000017, 0.7602500000000019, 1.2499999999999991, 1.537, 1.7317500000000008, 0.10699999999999932, 0.01025000000000098, -0.018000000000000682, -0.05900000000000105, 0.06124999999999936, -0.01550000000000118, 0.21700000000000053, 0.16974999999999874, 0.033500000000000085, 0.0009999999999994458, -0.0027500000000006963, -0.033500000000000085, 0.013999999999999346, -0.01425000000000054, 0.019999999999999574, 0.057749999999998636, 0.028250000000001663, -0.023249999999999105, -0.034000000000000696, 0.03449999999999953, 0.025750000000000384, -0.002000000000000668, -0.04049999999999976, 0.058000000000001606, 0.07250000000000156, 0.012000000000000455, -0.07925000000000004], zp_timestamp='2026-04-15T23:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:04:19.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:04:19.630 [DEBUG] [Thread-28861] [transport.py] [_log()] starting thread (client mode): 0xf1365630
2026-04-16T01:04:19.630 [DEBUG] [Thread-28861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:04:19.646 [DEBUG] [Thread-28861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:04:19.646 [INFO] [Thread-28861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:04:19.657 [DEBUG] [Thread-28861] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:04:19.657 [DEBUG] [Thread-28861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:04:19.657 [DEBUG] [Thread-28861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:04:19.658 [DEBUG] [Thread-28861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:04:19.658 [DEBUG] [Thread-28861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:04:19.658 [DEBUG] [Thread-28861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:04:19.658 [DEBUG] [Thread-28861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:04:19.658 [DEBUG] [Thread-28861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:04:19.658 [DEBUG] [Thread-28861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:04:19.658 [DEBUG] [Thread-28861] [transport.py] [_log()] client lang: <none>
2026-04-16T01:04:19.658 [DEBUG] [Thread-28861] [transport.py] [_log()] server lang: <none>
2026-04-16T01:04:19.658 [DEBUG] [Thread-28861] [transport.py] [_log()] kex follows: False
2026-04-16T01:04:19.658 [DEBUG] [Thread-28861] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:04:19.658 [DEBUG] [Thread-28861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:04:19.659 [DEBUG] [Thread-28861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:04:19.659 [DEBUG] [Thread-28861] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:04:19.659 [DEBUG] [Thread-28861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:04:19.659 [DEBUG] [Thread-28861] [transport.py] [_log()] Compression: none
2026-04-16T01:04:19.659 [DEBUG] [Thread-28861] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:04:19.715 [DEBUG] [Thread-28861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:04:19.716 [DEBUG] [Thread-28861] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:04:19.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:04:19.716 [DEBUG] [Thread-28861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:04:19.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:04:19.772 [DEBUG] [Thread-28861] [transport.py] [_log()] userauth is OK
2026-04-16T01:04:19.773 [DEBUG] [Thread-28861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:04:19.773 [DEBUG] [Thread-28861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:04:19.773 [DEBUG] [Thread-28861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:04:19.773 [DEBUG] [Thread-28861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:04:19.799 [INFO] [Thread-28861] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:04:19.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:04:19.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:04:20.679 [DEBUG] [Thread-28861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:04:20.680 [DEBUG] [Thread-28861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:04:20.728 [DEBUG] [Thread-28861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:04:20.728 [DEBUG] [Thread-28861] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:04:20.737 [DEBUG] [Thread-28861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:04:20.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:04:20.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')
2026-04-16T01:04:20.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
2026-04-16T01:04:20.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:04:20.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:04:20.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:04:20.781 [DEBUG] [Thread-28861] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:04:26.060 [DEBUG] [Thread-28863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:04:34.026 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:04:34.028 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:04:41.104 [DEBUG] [Thread-28864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:04:50.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:04:50.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:04:50.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
2026-04-16T01:04:51.479 [DEBUG] [Thread-28865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:04:52.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 4, 45), 1.02784, 93.4506, 0.0, 12.4222, 4.29798, 2, 2, 0, 2, 0, 0),)
2026-04-16T01:04:52.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:04:45
2026-04-16T01:04:52.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:04:52.882 [DEBUG] [Thread-28866] [transport.py] [_log()] starting thread (client mode): 0xee9ea7d0
2026-04-16T01:04:52.883 [DEBUG] [Thread-28866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:04:52.903 [DEBUG] [Thread-28866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:04:52.903 [INFO] [Thread-28866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:04:52.907 [DEBUG] [Thread-28866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:04:52.907 [DEBUG] [Thread-28866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:04:52.907 [DEBUG] [Thread-28866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:04:52.908 [DEBUG] [Thread-28866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:04:52.908 [DEBUG] [Thread-28866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:04:52.908 [DEBUG] [Thread-28866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:04:52.908 [DEBUG] [Thread-28866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:04:52.908 [DEBUG] [Thread-28866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:04:52.908 [DEBUG] [Thread-28866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:04:52.908 [DEBUG] [Thread-28866] [transport.py] [_log()] client lang: <none>
2026-04-16T01:04:52.908 [DEBUG] [Thread-28866] [transport.py] [_log()] server lang: <none>
2026-04-16T01:04:52.908 [DEBUG] [Thread-28866] [transport.py] [_log()] kex follows: False
2026-04-16T01:04:52.908 [DEBUG] [Thread-28866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:04:52.908 [DEBUG] [Thread-28866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:04:52.909 [DEBUG] [Thread-28866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:04:52.909 [DEBUG] [Thread-28866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:04:52.909 [DEBUG] [Thread-28866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:04:52.909 [DEBUG] [Thread-28866] [transport.py] [_log()] Compression: none
2026-04-16T01:04:52.909 [DEBUG] [Thread-28866] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:04:52.923 [DEBUG] [Thread-28866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:04:52.923 [DEBUG] [Thread-28866] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:04:52.924 [DEBUG] [Thread-28866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:04:52.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:04:52.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:04:52.925 [DEBUG] [Thread-28866] [transport.py] [_log()] userauth is OK
2026-04-16T01:04:52.925 [DEBUG] [Thread-28866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:04:52.925 [DEBUG] [Thread-28866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:04:52.925 [DEBUG] [Thread-28866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:04:52.925 [DEBUG] [Thread-28866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:04:52.938 [INFO] [Thread-28866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:04:52.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:04:53.583 [DEBUG] [Thread-28866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:04:53.583 [DEBUG] [Thread-28866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:04:53.583 [DEBUG] [Thread-28866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:04:53.624 [DEBUG] [Thread-28866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:04:53.624 [DEBUG] [Thread-28866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:04:53.627 [DEBUG] [Thread-28866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:04:53.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:04:53.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:04:53.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:04:53.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:04:53.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:04:53.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:04:53.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:04:53.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:04:53.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:04:53.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.961244 -999.00   +9.50   7.50     86   +7.40 1 1 1 2 1     0    0 0.87 -51.70 ZNESW 9.3 7.5 93.3 10.8 9.8 -25.2 9.6 -24.0 9.4 -21.8 9.7 -23.9
2026-04-16T01:04:53.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:04:53.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:04:53.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.961244
2026-04-16T01:04:53.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:04:53.650 [DEBUG] [Thread-28866] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:04:53.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:04:53.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:04:53.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:04:53.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:04:53.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:04:45', tmtdew=1.02784, humidity=93.4506, cloud=0.0, wind=12.4222, temperature=4.29798, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:04:11.482', atlas_cloud=1, atlas_rain=1, zp_data=[1.0957499999999998, -0.03575000000000017, 0.7602500000000019, 1.2499999999999991, 1.537, 1.7317500000000008, 0.10699999999999932, 0.01025000000000098, -0.018000000000000682, -0.05900000000000105, 0.06124999999999936, -0.01550000000000118, 0.21700000000000053, 0.16974999999999874, 0.033500000000000085, 0.0009999999999994458, -0.0027500000000006963, -0.033500000000000085, 0.013999999999999346, -0.01425000000000054, 0.019999999999999574, 0.057749999999998636, 0.028250000000001663, -0.023249999999999105, -0.034000000000000696, 0.03449999999999953, 0.025750000000000384, -0.002000000000000668, -0.04049999999999976, 0.058000000000001606, 0.07250000000000156, 0.012000000000000455, -0.07925000000000004], zp_timestamp='2026-04-15T23:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:04:53.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:04:53.918 [DEBUG] [Thread-28869] [transport.py] [_log()] starting thread (client mode): 0xee9e96f0
2026-04-16T01:04:53.918 [DEBUG] [Thread-28869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:04:53.932 [DEBUG] [Thread-28869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:04:53.932 [INFO] [Thread-28869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:04:53.939 [DEBUG] [Thread-28869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:04:53.939 [DEBUG] [Thread-28869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:04:53.940 [DEBUG] [Thread-28869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:04:53.940 [DEBUG] [Thread-28869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:04:53.940 [DEBUG] [Thread-28869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:04:53.940 [DEBUG] [Thread-28869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:04:53.940 [DEBUG] [Thread-28869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:04:53.940 [DEBUG] [Thread-28869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:04:53.940 [DEBUG] [Thread-28869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:04:53.940 [DEBUG] [Thread-28869] [transport.py] [_log()] client lang: <none>
2026-04-16T01:04:53.940 [DEBUG] [Thread-28869] [transport.py] [_log()] server lang: <none>
2026-04-16T01:04:53.940 [DEBUG] [Thread-28869] [transport.py] [_log()] kex follows: False
2026-04-16T01:04:53.940 [DEBUG] [Thread-28869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:04:53.940 [DEBUG] [Thread-28869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:04:53.941 [DEBUG] [Thread-28869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:04:53.941 [DEBUG] [Thread-28869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:04:53.941 [DEBUG] [Thread-28869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:04:53.941 [DEBUG] [Thread-28869] [transport.py] [_log()] Compression: none
2026-04-16T01:04:53.941 [DEBUG] [Thread-28869] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:04:53.995 [DEBUG] [Thread-28869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:04:53.995 [DEBUG] [Thread-28869] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:04:53.996 [DEBUG] [Thread-28869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:04:53.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:04:53.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:04:54.052 [DEBUG] [Thread-28869] [transport.py] [_log()] userauth is OK
2026-04-16T01:04:54.052 [DEBUG] [Thread-28869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:04:54.052 [DEBUG] [Thread-28869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:04:54.052 [DEBUG] [Thread-28869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:04:54.052 [DEBUG] [Thread-28869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:04:54.077 [INFO] [Thread-28869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:04:54.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:04:54.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:04:54.907 [DEBUG] [Thread-28869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:04:54.907 [DEBUG] [Thread-28869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:04:54.954 [DEBUG] [Thread-28869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:04:54.954 [DEBUG] [Thread-28869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:04:54.963 [DEBUG] [Thread-28869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:04:54.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:04:54.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')
2026-04-16T01:04:54.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
2026-04-16T01:04:54.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:04:54.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:04:54.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:04:54.994 [DEBUG] [Thread-28869] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:04:56.138 [DEBUG] [Thread-28871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:05:11.182 [DEBUG] [Thread-28872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:05:25.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:05:25.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:05:25.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
2026-04-16T01:05:26.213 [DEBUG] [Thread-28873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:05:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 4, 45), 1.02784, 93.4506, 0.0, 12.4222, 4.29798, 2, 2, 0, 2, 0, 0),)
2026-04-16T01:05:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:04:45
2026-04-16T01:05:26.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:05:27.114 [DEBUG] [Thread-28874] [transport.py] [_log()] starting thread (client mode): 0xf13c90f0
2026-04-16T01:05:27.114 [DEBUG] [Thread-28874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:05:27.133 [DEBUG] [Thread-28874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:05:27.133 [INFO] [Thread-28874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:05:27.136 [DEBUG] [Thread-28874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:05:27.136 [DEBUG] [Thread-28874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:05:27.136 [DEBUG] [Thread-28874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:05:27.136 [DEBUG] [Thread-28874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:05:27.136 [DEBUG] [Thread-28874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:05:27.136 [DEBUG] [Thread-28874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:05:27.136 [DEBUG] [Thread-28874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:05:27.137 [DEBUG] [Thread-28874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:05:27.137 [DEBUG] [Thread-28874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:05:27.137 [DEBUG] [Thread-28874] [transport.py] [_log()] client lang: <none>
2026-04-16T01:05:27.137 [DEBUG] [Thread-28874] [transport.py] [_log()] server lang: <none>
2026-04-16T01:05:27.137 [DEBUG] [Thread-28874] [transport.py] [_log()] kex follows: False
2026-04-16T01:05:27.137 [DEBUG] [Thread-28874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:05:27.137 [DEBUG] [Thread-28874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:05:27.137 [DEBUG] [Thread-28874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:05:27.137 [DEBUG] [Thread-28874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:05:27.137 [DEBUG] [Thread-28874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:05:27.137 [DEBUG] [Thread-28874] [transport.py] [_log()] Compression: none
2026-04-16T01:05:27.137 [DEBUG] [Thread-28874] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:05:27.154 [DEBUG] [Thread-28874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:05:27.154 [DEBUG] [Thread-28874] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:05:27.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:05:27.155 [DEBUG] [Thread-28874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:05:27.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:05:27.156 [DEBUG] [Thread-28874] [transport.py] [_log()] userauth is OK
2026-04-16T01:05:27.156 [DEBUG] [Thread-28874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:05:27.156 [DEBUG] [Thread-28874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:05:27.156 [DEBUG] [Thread-28874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:05:27.156 [DEBUG] [Thread-28874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:05:27.174 [INFO] [Thread-28874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:05:27.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:05:27.820 [DEBUG] [Thread-28874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:05:27.820 [DEBUG] [Thread-28874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:05:27.821 [DEBUG] [Thread-28874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:05:27.861 [DEBUG] [Thread-28874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:05:27.861 [DEBUG] [Thread-28874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:05:27.864 [DEBUG] [Thread-28874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:05:27.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:05:27.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:05:27.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:05:27.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:05:27.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:05:27.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:05:27.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:05:27.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:05:27.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:05:27.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.961938 -999.00   +9.50   5.67     86   +7.40 1 1 1 2 1     0    0 0.91 -48.70 ZNESW 6.2 5.7 103.8 8.1 9.8 -25.1 9.6 -24.0 9.3 -21.9 9.7 -23.9
2026-04-16T01:05:27.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:05:27.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:05:27.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.961938
2026-04-16T01:05:27.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:05:27.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:05:27.890 [DEBUG] [Thread-28874] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:05:27.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:05:27.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:05:27.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:05:27.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:04:45', tmtdew=1.02784, humidity=93.4506, cloud=0.0, wind=12.4222, temperature=4.29798, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:05:11.443', atlas_cloud=1, atlas_rain=1, zp_data=[1.0957499999999998, -0.03575000000000017, 0.7602500000000019, 1.2499999999999991, 1.537, 1.7317500000000008, 0.10699999999999932, 0.01025000000000098, -0.018000000000000682, -0.05900000000000105, 0.06124999999999936, -0.01550000000000118, 0.21700000000000053, 0.16974999999999874, 0.033500000000000085, 0.0009999999999994458, -0.0027500000000006963, -0.033500000000000085, 0.013999999999999346, -0.01425000000000054, 0.019999999999999574, 0.057749999999998636, 0.028250000000001663, -0.023249999999999105, -0.034000000000000696, 0.03449999999999953, 0.025750000000000384, -0.002000000000000668, -0.04049999999999976, 0.058000000000001606, 0.07250000000000156, 0.012000000000000455, -0.07925000000000004], zp_timestamp='2026-04-15T23:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:05:28.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:05:28.144 [DEBUG] [Thread-28877] [transport.py] [_log()] starting thread (client mode): 0xee933940
2026-04-16T01:05:28.144 [DEBUG] [Thread-28877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:05:28.160 [DEBUG] [Thread-28877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:05:28.160 [INFO] [Thread-28877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:05:28.167 [DEBUG] [Thread-28877] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:05:28.167 [DEBUG] [Thread-28877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:05:28.168 [DEBUG] [Thread-28877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:05:28.168 [DEBUG] [Thread-28877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:05:28.168 [DEBUG] [Thread-28877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:05:28.168 [DEBUG] [Thread-28877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:05:28.168 [DEBUG] [Thread-28877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:05:28.168 [DEBUG] [Thread-28877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:05:28.168 [DEBUG] [Thread-28877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:05:28.168 [DEBUG] [Thread-28877] [transport.py] [_log()] client lang: <none>
2026-04-16T01:05:28.168 [DEBUG] [Thread-28877] [transport.py] [_log()] server lang: <none>
2026-04-16T01:05:28.168 [DEBUG] [Thread-28877] [transport.py] [_log()] kex follows: False
2026-04-16T01:05:28.168 [DEBUG] [Thread-28877] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:05:28.168 [DEBUG] [Thread-28877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:05:28.169 [DEBUG] [Thread-28877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:05:28.169 [DEBUG] [Thread-28877] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:05:28.169 [DEBUG] [Thread-28877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:05:28.169 [DEBUG] [Thread-28877] [transport.py] [_log()] Compression: none
2026-04-16T01:05:28.169 [DEBUG] [Thread-28877] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:05:28.227 [DEBUG] [Thread-28877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:05:28.227 [DEBUG] [Thread-28877] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:05:28.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:05:28.228 [DEBUG] [Thread-28877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:05:28.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:05:28.285 [DEBUG] [Thread-28877] [transport.py] [_log()] userauth is OK
2026-04-16T01:05:28.286 [DEBUG] [Thread-28877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:05:28.286 [DEBUG] [Thread-28877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:05:28.286 [DEBUG] [Thread-28877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:05:28.286 [DEBUG] [Thread-28877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:05:28.314 [INFO] [Thread-28877] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:05:28.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:05:28.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:05:29.131 [DEBUG] [Thread-28877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:05:29.131 [DEBUG] [Thread-28877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:05:29.178 [DEBUG] [Thread-28877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:05:29.179 [DEBUG] [Thread-28877] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:05:29.187 [DEBUG] [Thread-28877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:05:29.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:05: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')
2026-04-16T01:05:29.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
2026-04-16T01:05:29.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:05:29.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:05:29.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:05:29.219 [DEBUG] [Thread-28877] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:05:34.242 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:05:34.243 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:05:41.240 [DEBUG] [Thread-28879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:05:51.645 [DEBUG] [Thread-28880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:05:56.276 [DEBUG] [Thread-28881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:05:59.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:05:59.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:05:59.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
2026-04-16T01:06:00.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 5, 20), 1.54801, 90.3226, 0.0, 10.2697, 5.98761, 1, 2, 0, 2, 0, 0),)
2026-04-16T01:06:00.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:05:20
2026-04-16T01:06:00.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:06:01.311 [DEBUG] [Thread-28882] [transport.py] [_log()] starting thread (client mode): 0xee906b30
2026-04-16T01:06:01.311 [DEBUG] [Thread-28882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:06:01.329 [DEBUG] [Thread-28882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:06:01.329 [INFO] [Thread-28882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:06:01.333 [DEBUG] [Thread-28882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:06:01.333 [DEBUG] [Thread-28882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:06:01.333 [DEBUG] [Thread-28882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:06:01.333 [DEBUG] [Thread-28882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:06:01.333 [DEBUG] [Thread-28882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:06:01.333 [DEBUG] [Thread-28882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:06:01.333 [DEBUG] [Thread-28882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:06:01.333 [DEBUG] [Thread-28882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:06:01.333 [DEBUG] [Thread-28882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:06:01.333 [DEBUG] [Thread-28882] [transport.py] [_log()] client lang: <none>
2026-04-16T01:06:01.333 [DEBUG] [Thread-28882] [transport.py] [_log()] server lang: <none>
2026-04-16T01:06:01.334 [DEBUG] [Thread-28882] [transport.py] [_log()] kex follows: False
2026-04-16T01:06:01.334 [DEBUG] [Thread-28882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:06:01.334 [DEBUG] [Thread-28882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:06:01.334 [DEBUG] [Thread-28882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:06:01.334 [DEBUG] [Thread-28882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:06:01.334 [DEBUG] [Thread-28882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:06:01.334 [DEBUG] [Thread-28882] [transport.py] [_log()] Compression: none
2026-04-16T01:06:01.334 [DEBUG] [Thread-28882] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:06:01.350 [DEBUG] [Thread-28882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:06:01.351 [DEBUG] [Thread-28882] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:06:01.351 [DEBUG] [Thread-28882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:06:01.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:06:01.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:06:01.352 [DEBUG] [Thread-28882] [transport.py] [_log()] userauth is OK
2026-04-16T01:06:01.352 [DEBUG] [Thread-28882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:06:01.352 [DEBUG] [Thread-28882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:06:01.353 [DEBUG] [Thread-28882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:06:01.353 [DEBUG] [Thread-28882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:06:01.370 [INFO] [Thread-28882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:06:01.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:06:01.987 [DEBUG] [Thread-28882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:06:01.988 [DEBUG] [Thread-28882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:06:01.988 [DEBUG] [Thread-28882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:06:02.029 [DEBUG] [Thread-28882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:06:02.029 [DEBUG] [Thread-28882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:06:02.032 [DEBUG] [Thread-28882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:06:02.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:06:02.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:06:02.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:06:02.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:06:02.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:06:02.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:06:02.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:06:02.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:06:02.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:06:02.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.962285 -999.00   +9.50   6.47     86   +7.40 1 1 1 2 1     0    0 1.02 -45.82 ZNESW 8.3 6.5 85.5 10.2 9.8 -25.3 9.7 -24.0 9.3 -21.8 9.7 -23.9
2026-04-16T01:06:02.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:06:02.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:06:02.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.962285
2026-04-16T01:06:02.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:06:02.058 [DEBUG] [Thread-28882] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:06:02.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:06:02.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:06:02.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:06:02.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:06:02.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:05:20', tmtdew=1.54801, humidity=90.3226, cloud=0.0, wind=10.2697, temperature=5.98761, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:05:41.424', atlas_cloud=1, atlas_rain=1, zp_data=[1.0957499999999998, -0.03575000000000017, 0.7602500000000019, 1.2499999999999991, 1.537, 1.7317500000000008, 0.10699999999999932, 0.01025000000000098, -0.018000000000000682, -0.05900000000000105, 0.06124999999999936, -0.01550000000000118, 0.21700000000000053, 0.16974999999999874, 0.033500000000000085, 0.0009999999999994458, -0.0027500000000006963, -0.033500000000000085, 0.013999999999999346, -0.01425000000000054, 0.019999999999999574, 0.057749999999998636, 0.028250000000001663, -0.023249999999999105, -0.034000000000000696, 0.03449999999999953, 0.025750000000000384, -0.002000000000000668, -0.04049999999999976, 0.058000000000001606, 0.07250000000000156, 0.012000000000000455, -0.07925000000000004], zp_timestamp='2026-04-15T23:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:06:02.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:06:02.325 [DEBUG] [Thread-28885] [transport.py] [_log()] starting thread (client mode): 0xee9336a0
2026-04-16T01:06:02.325 [DEBUG] [Thread-28885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:06:02.341 [DEBUG] [Thread-28885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:06:02.341 [INFO] [Thread-28885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:06:02.348 [DEBUG] [Thread-28885] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:06:02.349 [DEBUG] [Thread-28885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:06:02.349 [DEBUG] [Thread-28885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:06:02.349 [DEBUG] [Thread-28885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:06:02.349 [DEBUG] [Thread-28885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:06:02.349 [DEBUG] [Thread-28885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:06:02.349 [DEBUG] [Thread-28885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:06:02.349 [DEBUG] [Thread-28885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:06:02.349 [DEBUG] [Thread-28885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:06:02.349 [DEBUG] [Thread-28885] [transport.py] [_log()] client lang: <none>
2026-04-16T01:06:02.349 [DEBUG] [Thread-28885] [transport.py] [_log()] server lang: <none>
2026-04-16T01:06:02.349 [DEBUG] [Thread-28885] [transport.py] [_log()] kex follows: False
2026-04-16T01:06:02.350 [DEBUG] [Thread-28885] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:06:02.350 [DEBUG] [Thread-28885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:06:02.350 [DEBUG] [Thread-28885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:06:02.350 [DEBUG] [Thread-28885] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:06:02.350 [DEBUG] [Thread-28885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:06:02.350 [DEBUG] [Thread-28885] [transport.py] [_log()] Compression: none
2026-04-16T01:06:02.350 [DEBUG] [Thread-28885] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:06:02.409 [DEBUG] [Thread-28885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:06:02.410 [DEBUG] [Thread-28885] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:06:02.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:06:02.411 [DEBUG] [Thread-28885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:06:02.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:06:02.470 [DEBUG] [Thread-28885] [transport.py] [_log()] userauth is OK
2026-04-16T01:06:02.471 [DEBUG] [Thread-28885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:06:02.471 [DEBUG] [Thread-28885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:06:02.471 [DEBUG] [Thread-28885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:06:02.471 [DEBUG] [Thread-28885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:06:02.500 [INFO] [Thread-28885] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:06:02.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:06:02.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:06:03.333 [DEBUG] [Thread-28885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:06:03.333 [DEBUG] [Thread-28885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:06:03.383 [DEBUG] [Thread-28885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:06:03.383 [DEBUG] [Thread-28885] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:06:03.395 [DEBUG] [Thread-28885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:06:03.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:06:03.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')
2026-04-16T01:06:03.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
2026-04-16T01:06:03.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:06:03.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:06:03.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:06:03.435 [DEBUG] [Thread-28885] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:06:11.302 [DEBUG] [Thread-28887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:06:26.338 [DEBUG] [Thread-28888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:06:33.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:06:33.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:06:33.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
2026-04-16T01:06:34.446 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:06:34.448 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:06:34.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 5, 56), 1.51249, 90.3336, 0.0, 10.1286, 5.93215, 1, 2, 0, 2, 0, 0),)
2026-04-16T01:06:34.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:05:56
2026-04-16T01:06:35.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:06:35.568 [DEBUG] [Thread-28889] [transport.py] [_log()] starting thread (client mode): 0xee954430
2026-04-16T01:06:35.568 [DEBUG] [Thread-28889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:06:35.585 [DEBUG] [Thread-28889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:06:35.585 [INFO] [Thread-28889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:06:35.588 [DEBUG] [Thread-28889] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:06:35.588 [DEBUG] [Thread-28889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:06:35.588 [DEBUG] [Thread-28889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:06:35.588 [DEBUG] [Thread-28889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:06:35.588 [DEBUG] [Thread-28889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:06:35.588 [DEBUG] [Thread-28889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:06:35.588 [DEBUG] [Thread-28889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:06:35.589 [DEBUG] [Thread-28889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:06:35.589 [DEBUG] [Thread-28889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:06:35.589 [DEBUG] [Thread-28889] [transport.py] [_log()] client lang: <none>
2026-04-16T01:06:35.589 [DEBUG] [Thread-28889] [transport.py] [_log()] server lang: <none>
2026-04-16T01:06:35.589 [DEBUG] [Thread-28889] [transport.py] [_log()] kex follows: False
2026-04-16T01:06:35.589 [DEBUG] [Thread-28889] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:06:35.589 [DEBUG] [Thread-28889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:06:35.589 [DEBUG] [Thread-28889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:06:35.589 [DEBUG] [Thread-28889] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:06:35.589 [DEBUG] [Thread-28889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:06:35.589 [DEBUG] [Thread-28889] [transport.py] [_log()] Compression: none
2026-04-16T01:06:35.589 [DEBUG] [Thread-28889] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:06:35.607 [DEBUG] [Thread-28889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:06:35.607 [DEBUG] [Thread-28889] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:06:35.607 [DEBUG] [Thread-28889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:06:35.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:06:35.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:06:35.609 [DEBUG] [Thread-28889] [transport.py] [_log()] userauth is OK
2026-04-16T01:06:35.609 [DEBUG] [Thread-28889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:06:35.609 [DEBUG] [Thread-28889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:06:35.609 [DEBUG] [Thread-28889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:06:35.609 [DEBUG] [Thread-28889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:06:35.632 [INFO] [Thread-28889] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:06:35.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:06:36.206 [DEBUG] [Thread-28889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:06:36.206 [DEBUG] [Thread-28889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:06:36.206 [DEBUG] [Thread-28889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:06:36.247 [DEBUG] [Thread-28889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:06:36.247 [DEBUG] [Thread-28889] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:06:36.249 [DEBUG] [Thread-28889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:06:36.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:06:36.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:06:36.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:06:36.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:06:36.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:06:36.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:06:36.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:06:36.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:06:36.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:06:36.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.962632 -999.00   +9.50   4.49     86   +7.40 1 1 1 2 1     0    0 1.04 -44.11 ZNESW 6.1 4.5 88.3 9.3 9.8 -25.2 9.6 -24.1 9.4 -21.9 9.7 -24.0
2026-04-16T01:06:36.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:06:36.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:06:36.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.962632
2026-04-16T01:06:36.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:06:36.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:06:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:06:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:06:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:06:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:05:56', tmtdew=1.51249, humidity=90.3336, cloud=0.0, wind=10.1286, temperature=5.93215, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:06:11.405', atlas_cloud=1, atlas_rain=1, zp_data=[1.0957499999999998, -0.03575000000000017, 0.7602500000000019, 1.2499999999999991, 1.537, 1.7317500000000008, 0.10699999999999932, 0.01025000000000098, -0.018000000000000682, -0.05900000000000105, 0.06124999999999936, -0.01550000000000118, 0.21700000000000053, 0.16974999999999874, 0.033500000000000085, 0.0009999999999994458, -0.0027500000000006963, -0.033500000000000085, 0.013999999999999346, -0.01425000000000054, 0.019999999999999574, 0.057749999999998636, 0.028250000000001663, -0.023249999999999105, -0.034000000000000696, 0.03449999999999953, 0.025750000000000384, -0.002000000000000668, -0.04049999999999976, 0.058000000000001606, 0.07250000000000156, 0.012000000000000455, -0.07925000000000004], zp_timestamp='2026-04-15T23:02:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:06:36.267 [DEBUG] [Thread-28889] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:06:36.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:06:36.494 [DEBUG] [Thread-28892] [transport.py] [_log()] starting thread (client mode): 0xf1365cc0
2026-04-16T01:06:36.495 [DEBUG] [Thread-28892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:06:36.509 [DEBUG] [Thread-28892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:06:36.509 [INFO] [Thread-28892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:06:36.516 [DEBUG] [Thread-28892] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:06:36.516 [DEBUG] [Thread-28892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:06:36.516 [DEBUG] [Thread-28892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:06:36.516 [DEBUG] [Thread-28892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:06:36.517 [DEBUG] [Thread-28892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:06:36.517 [DEBUG] [Thread-28892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:06:36.517 [DEBUG] [Thread-28892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:06:36.517 [DEBUG] [Thread-28892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:06:36.517 [DEBUG] [Thread-28892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:06:36.517 [DEBUG] [Thread-28892] [transport.py] [_log()] client lang: <none>
2026-04-16T01:06:36.517 [DEBUG] [Thread-28892] [transport.py] [_log()] server lang: <none>
2026-04-16T01:06:36.517 [DEBUG] [Thread-28892] [transport.py] [_log()] kex follows: False
2026-04-16T01:06:36.517 [DEBUG] [Thread-28892] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:06:36.517 [DEBUG] [Thread-28892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:06:36.517 [DEBUG] [Thread-28892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:06:36.517 [DEBUG] [Thread-28892] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:06:36.518 [DEBUG] [Thread-28892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:06:36.518 [DEBUG] [Thread-28892] [transport.py] [_log()] Compression: none
2026-04-16T01:06:36.518 [DEBUG] [Thread-28892] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:06:36.574 [DEBUG] [Thread-28892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:06:36.574 [DEBUG] [Thread-28892] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:06:36.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:06:36.575 [DEBUG] [Thread-28892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:06:36.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:06:36.631 [DEBUG] [Thread-28892] [transport.py] [_log()] userauth is OK
2026-04-16T01:06:36.631 [DEBUG] [Thread-28892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:06:36.631 [DEBUG] [Thread-28892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:06:36.631 [DEBUG] [Thread-28892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:06:36.631 [DEBUG] [Thread-28892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:06:36.660 [INFO] [Thread-28892] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:06:36.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:06:36.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:06:37.466 [DEBUG] [Thread-28892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:06:37.467 [DEBUG] [Thread-28892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:06:37.514 [DEBUG] [Thread-28892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:06:37.514 [DEBUG] [Thread-28892] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:06:37.522 [DEBUG] [Thread-28892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:06:37.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:06:37.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')
2026-04-16T01:06:37.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
2026-04-16T01:06:37.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:06:37.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:06:37.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:06:37.558 [DEBUG] [Thread-28892] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:06:41.366 [DEBUG] [Thread-28894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:06:51.812 [DEBUG] [Thread-28895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:06:56.402 [DEBUG] [Thread-28896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:07:07.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:07:07.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:07:07.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
2026-04-16T01:07:08.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 6, 31), 2.26045, 85.5499, 0.0, 10.3756, 9.09801, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:07:08.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:06:31
2026-04-16T01:07:09.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:07:09.812 [DEBUG] [Thread-28897] [transport.py] [_log()] starting thread (client mode): 0xee931f60
2026-04-16T01:07:09.812 [DEBUG] [Thread-28897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:07:09.831 [DEBUG] [Thread-28897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:07:09.831 [INFO] [Thread-28897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:07:09.834 [DEBUG] [Thread-28897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:07:09.834 [DEBUG] [Thread-28897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:07:09.834 [DEBUG] [Thread-28897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:07:09.834 [DEBUG] [Thread-28897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:07:09.835 [DEBUG] [Thread-28897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:07:09.835 [DEBUG] [Thread-28897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:07:09.835 [DEBUG] [Thread-28897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:07:09.835 [DEBUG] [Thread-28897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:07:09.835 [DEBUG] [Thread-28897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:07:09.835 [DEBUG] [Thread-28897] [transport.py] [_log()] client lang: <none>
2026-04-16T01:07:09.835 [DEBUG] [Thread-28897] [transport.py] [_log()] server lang: <none>
2026-04-16T01:07:09.835 [DEBUG] [Thread-28897] [transport.py] [_log()] kex follows: False
2026-04-16T01:07:09.835 [DEBUG] [Thread-28897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:07:09.835 [DEBUG] [Thread-28897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:07:09.836 [DEBUG] [Thread-28897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:07:09.836 [DEBUG] [Thread-28897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:07:09.836 [DEBUG] [Thread-28897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:07:09.836 [DEBUG] [Thread-28897] [transport.py] [_log()] Compression: none
2026-04-16T01:07:09.836 [DEBUG] [Thread-28897] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:07:09.853 [DEBUG] [Thread-28897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:07:09.854 [DEBUG] [Thread-28897] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:07:09.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:07:09.854 [DEBUG] [Thread-28897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:07:09.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:07:09.855 [DEBUG] [Thread-28897] [transport.py] [_log()] userauth is OK
2026-04-16T01:07:09.856 [DEBUG] [Thread-28897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:07:09.856 [DEBUG] [Thread-28897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:07:09.856 [DEBUG] [Thread-28897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:07:09.856 [DEBUG] [Thread-28897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:07:09.883 [INFO] [Thread-28897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:07:09.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:07:10.513 [DEBUG] [Thread-28897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:07:10.513 [DEBUG] [Thread-28897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:07:10.514 [DEBUG] [Thread-28897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:07:10.554 [DEBUG] [Thread-28897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:07:10.554 [DEBUG] [Thread-28897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:07:10.556 [DEBUG] [Thread-28897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:07:10.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:07:10.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:07:10.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:07:10.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:07:10.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:07:10.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:07:10.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:07:10.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:07:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:07:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.962980 -999.00   +9.50   8.74     86   +7.40 1 1 1 2 1     0    0 1.04 -44.66 ZNESW 7.1 8.7 74.8 10.4 9.8 -25.3 9.6 -24.1 9.3 -21.9 9.7 -24.2
2026-04-16T01:07:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:07:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:07:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.962980
2026-04-16T01:07:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:07:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:07:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:07:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:07:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:07:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:06:31', tmtdew=2.26045, humidity=85.5499, cloud=0.0, wind=10.3756, temperature=9.09801, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:06:41.472', atlas_cloud=1, atlas_rain=1, zp_data=[2.2707499999999996, 0.08174999999999955, 0.9592500000000008, 1.7589999999999995, 2.0165000000000006, nan, 0.19399999999999906, 0.019249999999999545, 0.0024999999999995026, -0.08449999999999847, 0.15024999999999977, 0.08300000000000018, 0.39450000000000074, 0.2742500000000003, 0.02949999999999875, -0.04600000000000115, -0.0017499999999994742, -0.05550000000000033, 0.010999999999999233, -0.012750000000000483, 0.02899999999999814, 0.057749999999998636, 0.0032500000000013074, -0.05325000000000024, -0.009000000000000341, 0.020500000000000185, -0.011250000000000426, 0.005499999999999616, -0.048500000000000654, 0.04300000000000104, 0.04800000000000182, -0.003999999999997783, -0.08025000000000126], zp_timestamp='2026-04-15T23:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:07:10.577 [DEBUG] [Thread-28897] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:07:10.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:07:10.784 [DEBUG] [Thread-28900] [transport.py] [_log()] starting thread (client mode): 0xee9c3700
2026-04-16T01:07:10.784 [DEBUG] [Thread-28900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:07:10.799 [DEBUG] [Thread-28900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:07:10.799 [INFO] [Thread-28900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:07:10.807 [DEBUG] [Thread-28900] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:07:10.807 [DEBUG] [Thread-28900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:07:10.807 [DEBUG] [Thread-28900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:07:10.807 [DEBUG] [Thread-28900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:07:10.807 [DEBUG] [Thread-28900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:07:10.807 [DEBUG] [Thread-28900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:07:10.807 [DEBUG] [Thread-28900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:07:10.807 [DEBUG] [Thread-28900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:07:10.807 [DEBUG] [Thread-28900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:07:10.807 [DEBUG] [Thread-28900] [transport.py] [_log()] client lang: <none>
2026-04-16T01:07:10.808 [DEBUG] [Thread-28900] [transport.py] [_log()] server lang: <none>
2026-04-16T01:07:10.808 [DEBUG] [Thread-28900] [transport.py] [_log()] kex follows: False
2026-04-16T01:07:10.808 [DEBUG] [Thread-28900] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:07:10.808 [DEBUG] [Thread-28900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:07:10.808 [DEBUG] [Thread-28900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:07:10.808 [DEBUG] [Thread-28900] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:07:10.808 [DEBUG] [Thread-28900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:07:10.808 [DEBUG] [Thread-28900] [transport.py] [_log()] Compression: none
2026-04-16T01:07:10.808 [DEBUG] [Thread-28900] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:07:10.866 [DEBUG] [Thread-28900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:07:10.866 [DEBUG] [Thread-28900] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:07:10.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:07:10.867 [DEBUG] [Thread-28900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:07:10.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:07:10.922 [DEBUG] [Thread-28900] [transport.py] [_log()] userauth is OK
2026-04-16T01:07:10.923 [DEBUG] [Thread-28900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:07:10.923 [DEBUG] [Thread-28900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:07:10.923 [DEBUG] [Thread-28900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:07:10.923 [DEBUG] [Thread-28900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:07:10.949 [INFO] [Thread-28900] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:07:10.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:07:10.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:07:11.429 [DEBUG] [Thread-28902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:07:11.825 [DEBUG] [Thread-28900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:07:11.825 [DEBUG] [Thread-28900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:07:11.873 [DEBUG] [Thread-28900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:07:11.873 [DEBUG] [Thread-28900] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:07:11.882 [DEBUG] [Thread-28900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:07:11.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:07:11.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')
2026-04-16T01:07:11.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') -> 00000000
2026-04-16T01:07:11.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:07:11.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:07:11.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:07:11.917 [DEBUG] [Thread-28900] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:07:26.474 [DEBUG] [Thread-28903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:07:34.654 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:07:34.655 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:07:41.503 [DEBUG] [Thread-28904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:07:41.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:07:41.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:07:41.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
2026-04-16T01:07:43.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 7, 7), 2.24985, 85.6162, 0.0, 10.3932, 9.13119, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:07:43.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:07:07
2026-04-16T01:07:43.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:07:43.996 [DEBUG] [Thread-28905] [transport.py] [_log()] starting thread (client mode): 0xee954250
2026-04-16T01:07:43.997 [DEBUG] [Thread-28905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:07:44.016 [DEBUG] [Thread-28905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:07:44.016 [INFO] [Thread-28905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:07:44.019 [DEBUG] [Thread-28905] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:07:44.020 [DEBUG] [Thread-28905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:07:44.020 [DEBUG] [Thread-28905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:07:44.020 [DEBUG] [Thread-28905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:07:44.020 [DEBUG] [Thread-28905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:07:44.020 [DEBUG] [Thread-28905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:07:44.020 [DEBUG] [Thread-28905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:07:44.020 [DEBUG] [Thread-28905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:07:44.020 [DEBUG] [Thread-28905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:07:44.020 [DEBUG] [Thread-28905] [transport.py] [_log()] client lang: <none>
2026-04-16T01:07:44.020 [DEBUG] [Thread-28905] [transport.py] [_log()] server lang: <none>
2026-04-16T01:07:44.021 [DEBUG] [Thread-28905] [transport.py] [_log()] kex follows: False
2026-04-16T01:07:44.021 [DEBUG] [Thread-28905] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:07:44.021 [DEBUG] [Thread-28905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:07:44.021 [DEBUG] [Thread-28905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:07:44.021 [DEBUG] [Thread-28905] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:07:44.021 [DEBUG] [Thread-28905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:07:44.021 [DEBUG] [Thread-28905] [transport.py] [_log()] Compression: none
2026-04-16T01:07:44.021 [DEBUG] [Thread-28905] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:07:44.037 [DEBUG] [Thread-28905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:07:44.037 [DEBUG] [Thread-28905] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:07:44.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:07:44.038 [DEBUG] [Thread-28905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:07:44.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:07:44.039 [DEBUG] [Thread-28905] [transport.py] [_log()] userauth is OK
2026-04-16T01:07:44.039 [DEBUG] [Thread-28905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:07:44.039 [DEBUG] [Thread-28905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:07:44.039 [DEBUG] [Thread-28905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:07:44.039 [DEBUG] [Thread-28905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:07:44.063 [INFO] [Thread-28905] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:07:44.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:07:44.682 [DEBUG] [Thread-28905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:07:44.682 [DEBUG] [Thread-28905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:07:44.683 [DEBUG] [Thread-28905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:07:44.723 [DEBUG] [Thread-28905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:07:44.723 [DEBUG] [Thread-28905] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:07:44.726 [DEBUG] [Thread-28905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:07:44.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:07:44.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:07:44.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:07:44.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:07:44.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:07:44.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:07:44.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:07:44.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:07:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:07:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.963327 -999.00   +9.50   5.82     86   +7.40 1 1 1 2 1     0    0 1.13 -40.98 ZNESW 7.9 5.8 122.6 10.5 9.8 -25.3 9.6 -24.0 9.4 -21.9 9.7 -23.8
2026-04-16T01:07:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:07:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:07:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.963327
2026-04-16T01:07:44.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:07:44.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:07:44.751 [DEBUG] [Thread-28905] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:07:44.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:07:44.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:07:44.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:07:44.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:07:07', tmtdew=2.24985, humidity=85.6162, cloud=0.0, wind=10.3932, temperature=9.13119, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:07:11.453', atlas_cloud=1, atlas_rain=1, zp_data=[2.2707499999999996, 0.08174999999999955, 0.9592500000000008, 1.7589999999999995, 2.0165000000000006, nan, 0.19399999999999906, 0.019249999999999545, 0.0024999999999995026, -0.08449999999999847, 0.15024999999999977, 0.08300000000000018, 0.39450000000000074, 0.2742500000000003, 0.02949999999999875, -0.04600000000000115, -0.0017499999999994742, -0.05550000000000033, 0.010999999999999233, -0.012750000000000483, 0.02899999999999814, 0.057749999999998636, 0.0032500000000013074, -0.05325000000000024, -0.009000000000000341, 0.020500000000000185, -0.011250000000000426, 0.005499999999999616, -0.048500000000000654, 0.04300000000000104, 0.04800000000000182, -0.003999999999997783, -0.08025000000000126], zp_timestamp='2026-04-15T23:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:07:44.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:07:45.000 [DEBUG] [Thread-28908] [transport.py] [_log()] starting thread (client mode): 0xee9544c0
2026-04-16T01:07:45.000 [DEBUG] [Thread-28908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:07:45.018 [DEBUG] [Thread-28908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:07:45.018 [INFO] [Thread-28908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:07:45.026 [DEBUG] [Thread-28908] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:07:45.026 [DEBUG] [Thread-28908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:07:45.026 [DEBUG] [Thread-28908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:07:45.026 [DEBUG] [Thread-28908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:07:45.026 [DEBUG] [Thread-28908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:07:45.026 [DEBUG] [Thread-28908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:07:45.026 [DEBUG] [Thread-28908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:07:45.027 [DEBUG] [Thread-28908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:07:45.027 [DEBUG] [Thread-28908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:07:45.027 [DEBUG] [Thread-28908] [transport.py] [_log()] client lang: <none>
2026-04-16T01:07:45.027 [DEBUG] [Thread-28908] [transport.py] [_log()] server lang: <none>
2026-04-16T01:07:45.027 [DEBUG] [Thread-28908] [transport.py] [_log()] kex follows: False
2026-04-16T01:07:45.027 [DEBUG] [Thread-28908] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:07:45.027 [DEBUG] [Thread-28908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:07:45.027 [DEBUG] [Thread-28908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:07:45.027 [DEBUG] [Thread-28908] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:07:45.027 [DEBUG] [Thread-28908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:07:45.027 [DEBUG] [Thread-28908] [transport.py] [_log()] Compression: none
2026-04-16T01:07:45.028 [DEBUG] [Thread-28908] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:07:45.085 [DEBUG] [Thread-28908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:07:45.086 [DEBUG] [Thread-28908] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:07:45.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:07:45.086 [DEBUG] [Thread-28908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:07:45.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:07:45.142 [DEBUG] [Thread-28908] [transport.py] [_log()] userauth is OK
2026-04-16T01:07:45.142 [DEBUG] [Thread-28908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:07:45.142 [DEBUG] [Thread-28908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:07:45.142 [DEBUG] [Thread-28908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:07:45.142 [DEBUG] [Thread-28908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:07:45.167 [INFO] [Thread-28908] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:07:45.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:07:45.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:07:45.996 [DEBUG] [Thread-28908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:07:45.997 [DEBUG] [Thread-28908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:07:46.044 [DEBUG] [Thread-28908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:07:46.044 [DEBUG] [Thread-28908] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:07:46.054 [DEBUG] [Thread-28908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:07:46.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:07:46.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')
2026-04-16T01:07:46.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
2026-04-16T01:07:46.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:07:46.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:07:46.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:07:46.089 [DEBUG] [Thread-28908] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:07:51.982 [DEBUG] [Thread-28910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:07:56.533 [DEBUG] [Thread-28911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:08:11.573 [DEBUG] [Thread-28912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:08:16.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:08:16.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:08:16.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
2026-04-16T01:08:17.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 7, 43), 2.00422, 87.1995, 0.0, 13.9745, 8.89616, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:08:17.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:07:43
2026-04-16T01:08:17.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:08:18.267 [DEBUG] [Thread-28913] [transport.py] [_log()] starting thread (client mode): 0xf13669e0
2026-04-16T01:08:18.268 [DEBUG] [Thread-28913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:08:18.287 [DEBUG] [Thread-28913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:08:18.287 [INFO] [Thread-28913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:08:18.290 [DEBUG] [Thread-28913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:08:18.290 [DEBUG] [Thread-28913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] client lang: <none>
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] server lang: <none>
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] kex follows: False
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] Compression: none
2026-04-16T01:08:18.291 [DEBUG] [Thread-28913] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:08:18.307 [DEBUG] [Thread-28913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:08:18.307 [DEBUG] [Thread-28913] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:08:18.307 [DEBUG] [Thread-28913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:08:18.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:08:18.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:08:18.348 [DEBUG] [Thread-28913] [transport.py] [_log()] userauth is OK
2026-04-16T01:08:18.348 [DEBUG] [Thread-28913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:08:18.348 [DEBUG] [Thread-28913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:08:18.348 [DEBUG] [Thread-28913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:08:18.348 [DEBUG] [Thread-28913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:08:18.379 [INFO] [Thread-28913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:08:18.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:08:19.020 [DEBUG] [Thread-28913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:08:19.020 [DEBUG] [Thread-28913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:08:19.020 [DEBUG] [Thread-28913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:08:19.060 [DEBUG] [Thread-28913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:08:19.060 [DEBUG] [Thread-28913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:08:19.062 [DEBUG] [Thread-28913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:08:19.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:08:19.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:08:19.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:08:19.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:08:19.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:08:19.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:08:19.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:08:19.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:08:19.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:08:19.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.963674 -999.00   +9.50   6.67     87   +7.50 1 1 1 2 1     0    0 0.99 -43.84 ZNESW 5.8 6.7 82.5 10.6 9.8 -25.2 9.6 -24.0 9.3 -21.9 9.7 -24.1
2026-04-16T01:08:19.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:08:19.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:08:19.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.963674
2026-04-16T01:08:19.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:08:19.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:08:19.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:08:19.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:08:19.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:08:19.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:07:43', tmtdew=2.00422, humidity=87.1995, cloud=0.0, wind=13.9745, temperature=8.89616, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:07:41.434', atlas_cloud=1, atlas_rain=1, zp_data=[2.2707499999999996, 0.08174999999999955, 0.9592500000000008, 1.7589999999999995, 2.0165000000000006, nan, 0.19399999999999906, 0.019249999999999545, 0.0024999999999995026, -0.08449999999999847, 0.15024999999999977, 0.08300000000000018, 0.39450000000000074, 0.2742500000000003, 0.02949999999999875, -0.04600000000000115, -0.0017499999999994742, -0.05550000000000033, 0.010999999999999233, -0.012750000000000483, 0.02899999999999814, 0.057749999999998636, 0.0032500000000013074, -0.05325000000000024, -0.009000000000000341, 0.020500000000000185, -0.011250000000000426, 0.005499999999999616, -0.048500000000000654, 0.04300000000000104, 0.04800000000000182, -0.003999999999997783, -0.08025000000000126], zp_timestamp='2026-04-15T23:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:08:19.084 [DEBUG] [Thread-28913] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:08:19.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:08:19.301 [DEBUG] [Thread-28916] [transport.py] [_log()] starting thread (client mode): 0xee9339d0
2026-04-16T01:08:19.301 [DEBUG] [Thread-28916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:08:19.316 [DEBUG] [Thread-28916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:08:19.316 [INFO] [Thread-28916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:08:19.323 [DEBUG] [Thread-28916] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:08:19.324 [DEBUG] [Thread-28916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:08:19.324 [DEBUG] [Thread-28916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:08:19.324 [DEBUG] [Thread-28916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:08:19.324 [DEBUG] [Thread-28916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:08:19.324 [DEBUG] [Thread-28916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:08:19.324 [DEBUG] [Thread-28916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:08:19.324 [DEBUG] [Thread-28916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:08:19.324 [DEBUG] [Thread-28916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:08:19.324 [DEBUG] [Thread-28916] [transport.py] [_log()] client lang: <none>
2026-04-16T01:08:19.324 [DEBUG] [Thread-28916] [transport.py] [_log()] server lang: <none>
2026-04-16T01:08:19.324 [DEBUG] [Thread-28916] [transport.py] [_log()] kex follows: False
2026-04-16T01:08:19.325 [DEBUG] [Thread-28916] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:08:19.325 [DEBUG] [Thread-28916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:08:19.325 [DEBUG] [Thread-28916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:08:19.325 [DEBUG] [Thread-28916] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:08:19.325 [DEBUG] [Thread-28916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:08:19.325 [DEBUG] [Thread-28916] [transport.py] [_log()] Compression: none
2026-04-16T01:08:19.325 [DEBUG] [Thread-28916] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:08:19.381 [DEBUG] [Thread-28916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:08:19.381 [DEBUG] [Thread-28916] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:08:19.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:08:19.382 [DEBUG] [Thread-28916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:08:19.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:08:19.440 [DEBUG] [Thread-28916] [transport.py] [_log()] userauth is OK
2026-04-16T01:08:19.440 [DEBUG] [Thread-28916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:08:19.440 [DEBUG] [Thread-28916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:08:19.440 [DEBUG] [Thread-28916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:08:19.440 [DEBUG] [Thread-28916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:08:19.468 [INFO] [Thread-28916] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:08:19.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:08:19.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:08:20.261 [DEBUG] [Thread-28916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:08:20.261 [DEBUG] [Thread-28916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:08:20.309 [DEBUG] [Thread-28916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:08:20.309 [DEBUG] [Thread-28916] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:08:20.318 [DEBUG] [Thread-28916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:08:20.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:08:20.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')
2026-04-16T01:08:20.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
2026-04-16T01:08:20.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:08:20.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:08:20.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:08:20.353 [DEBUG] [Thread-28916] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:08:26.607 [DEBUG] [Thread-28918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:08:34.858 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:08:34.859 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:08:41.651 [DEBUG] [Thread-28919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:08:50.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:08:50.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:08:50.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
2026-04-16T01:08:51.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 8, 18), 2.24429, 85.6495, 0.0, 10.1992, 9.18126, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:08:51.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:08:18
2026-04-16T01:08:52.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:08:52.147 [DEBUG] [Thread-28920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:08:52.415 [DEBUG] [Thread-28921] [transport.py] [_log()] starting thread (client mode): 0xf1364580
2026-04-16T01:08:52.416 [DEBUG] [Thread-28921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:08:52.435 [DEBUG] [Thread-28921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:08:52.435 [INFO] [Thread-28921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:08:52.437 [DEBUG] [Thread-28921] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:08:52.437 [DEBUG] [Thread-28921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:08:52.437 [DEBUG] [Thread-28921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:08:52.437 [DEBUG] [Thread-28921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:08:52.437 [DEBUG] [Thread-28921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:08:52.437 [DEBUG] [Thread-28921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:08:52.437 [DEBUG] [Thread-28921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:08:52.438 [DEBUG] [Thread-28921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:08:52.438 [DEBUG] [Thread-28921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:08:52.438 [DEBUG] [Thread-28921] [transport.py] [_log()] client lang: <none>
2026-04-16T01:08:52.438 [DEBUG] [Thread-28921] [transport.py] [_log()] server lang: <none>
2026-04-16T01:08:52.438 [DEBUG] [Thread-28921] [transport.py] [_log()] kex follows: False
2026-04-16T01:08:52.438 [DEBUG] [Thread-28921] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:08:52.438 [DEBUG] [Thread-28921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:08:52.438 [DEBUG] [Thread-28921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:08:52.438 [DEBUG] [Thread-28921] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:08:52.438 [DEBUG] [Thread-28921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:08:52.438 [DEBUG] [Thread-28921] [transport.py] [_log()] Compression: none
2026-04-16T01:08:52.439 [DEBUG] [Thread-28921] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:08:52.450 [DEBUG] [Thread-28921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:08:52.450 [DEBUG] [Thread-28921] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:08:52.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:08:52.451 [DEBUG] [Thread-28921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:08:52.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:08:52.492 [DEBUG] [Thread-28921] [transport.py] [_log()] userauth is OK
2026-04-16T01:08:52.493 [DEBUG] [Thread-28921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:08:52.493 [DEBUG] [Thread-28921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:08:52.493 [DEBUG] [Thread-28921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:08:52.493 [DEBUG] [Thread-28921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:08:52.530 [INFO] [Thread-28921] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:08:52.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:08:53.160 [DEBUG] [Thread-28921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:08:53.160 [DEBUG] [Thread-28921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:08:53.161 [DEBUG] [Thread-28921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:08:53.201 [DEBUG] [Thread-28921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:08:53.202 [DEBUG] [Thread-28921] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:08:53.205 [DEBUG] [Thread-28921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:08:53.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:08:53.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:08:53.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:08:53.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:08:53.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:08:53.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:08:53.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:08:53.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:08:53.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:08:53.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.964368 -999.00   +9.50   5.95     87   +7.50 1 1 1 2 1     0    0 1.05 -43.88 ZNESW 6.1 6.0 117.2 9.1 9.8 -25.3 9.6 -24.0 9.3 -21.9 9.6 -24.0
2026-04-16T01:08:53.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:08:53.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:08:53.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.964368
2026-04-16T01:08:53.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:08:53.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:08:53.228 [DEBUG] [Thread-28921] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:08:53.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:08:53.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:08:53.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:08:53.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:08:18', tmtdew=2.24429, humidity=85.6495, cloud=0.0, wind=10.1992, temperature=9.18126, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:08:41.395', atlas_cloud=1, atlas_rain=1, zp_data=[2.2707499999999996, 0.08174999999999955, 0.9592500000000008, 1.7589999999999995, 2.0165000000000006, nan, 0.19399999999999906, 0.019249999999999545, 0.0024999999999995026, -0.08449999999999847, 0.15024999999999977, 0.08300000000000018, 0.39450000000000074, 0.2742500000000003, 0.02949999999999875, -0.04600000000000115, -0.0017499999999994742, -0.05550000000000033, 0.010999999999999233, -0.012750000000000483, 0.02899999999999814, 0.057749999999998636, 0.0032500000000013074, -0.05325000000000024, -0.009000000000000341, 0.020500000000000185, -0.011250000000000426, 0.005499999999999616, -0.048500000000000654, 0.04300000000000104, 0.04800000000000182, -0.003999999999997783, -0.08025000000000126], zp_timestamp='2026-04-15T23:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:08:53.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:08:53.457 [DEBUG] [Thread-28924] [transport.py] [_log()] starting thread (client mode): 0xee9eb850
2026-04-16T01:08:53.458 [DEBUG] [Thread-28924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:08:53.472 [DEBUG] [Thread-28924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:08:53.472 [INFO] [Thread-28924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:08:53.480 [DEBUG] [Thread-28924] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:08:53.480 [DEBUG] [Thread-28924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:08:53.480 [DEBUG] [Thread-28924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:08:53.480 [DEBUG] [Thread-28924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:08:53.480 [DEBUG] [Thread-28924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:08:53.480 [DEBUG] [Thread-28924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:08:53.480 [DEBUG] [Thread-28924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:08:53.480 [DEBUG] [Thread-28924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:08:53.480 [DEBUG] [Thread-28924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:08:53.480 [DEBUG] [Thread-28924] [transport.py] [_log()] client lang: <none>
2026-04-16T01:08:53.480 [DEBUG] [Thread-28924] [transport.py] [_log()] server lang: <none>
2026-04-16T01:08:53.481 [DEBUG] [Thread-28924] [transport.py] [_log()] kex follows: False
2026-04-16T01:08:53.481 [DEBUG] [Thread-28924] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:08:53.481 [DEBUG] [Thread-28924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:08:53.481 [DEBUG] [Thread-28924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:08:53.481 [DEBUG] [Thread-28924] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:08:53.481 [DEBUG] [Thread-28924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:08:53.481 [DEBUG] [Thread-28924] [transport.py] [_log()] Compression: none
2026-04-16T01:08:53.481 [DEBUG] [Thread-28924] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:08:53.537 [DEBUG] [Thread-28924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:08:53.537 [DEBUG] [Thread-28924] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:08:53.538 [DEBUG] [Thread-28924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:08:53.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:08:53.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:08:53.593 [DEBUG] [Thread-28924] [transport.py] [_log()] userauth is OK
2026-04-16T01:08:53.593 [DEBUG] [Thread-28924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:08:53.594 [DEBUG] [Thread-28924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:08:53.594 [DEBUG] [Thread-28924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:08:53.594 [DEBUG] [Thread-28924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:08:53.619 [INFO] [Thread-28924] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:08:53.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:08:53.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:08:54.435 [DEBUG] [Thread-28924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:08:54.435 [DEBUG] [Thread-28924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:08:54.483 [DEBUG] [Thread-28924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:08:54.483 [DEBUG] [Thread-28924] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:08:54.492 [DEBUG] [Thread-28924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:08:54.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:08:54.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')
2026-04-16T01:08:54.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
2026-04-16T01:08:54.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:08:54.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:08:54.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:08:54.526 [DEBUG] [Thread-28924] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:08:56.683 [DEBUG] [Thread-28926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:09:11.726 [DEBUG] [Thread-28927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:09:24.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:09:24.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:09:24.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
2026-04-16T01:09:25.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 8, 54), 1.9771, 87.3648, 0.0, 12.9514, 8.92896, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:09:25.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:08:54
2026-04-16T01:09:26.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:09:26.630 [DEBUG] [Thread-28928] [transport.py] [_log()] starting thread (client mode): 0xee956c80
2026-04-16T01:09:26.631 [DEBUG] [Thread-28928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:09:26.651 [DEBUG] [Thread-28928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:09:26.651 [INFO] [Thread-28928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:09:26.654 [DEBUG] [Thread-28928] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:09:26.654 [DEBUG] [Thread-28928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:09:26.654 [DEBUG] [Thread-28928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:09:26.654 [DEBUG] [Thread-28928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:09:26.654 [DEBUG] [Thread-28928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:09:26.655 [DEBUG] [Thread-28928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:09:26.655 [DEBUG] [Thread-28928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:09:26.655 [DEBUG] [Thread-28928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:09:26.655 [DEBUG] [Thread-28928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:09:26.655 [DEBUG] [Thread-28928] [transport.py] [_log()] client lang: <none>
2026-04-16T01:09:26.655 [DEBUG] [Thread-28928] [transport.py] [_log()] server lang: <none>
2026-04-16T01:09:26.655 [DEBUG] [Thread-28928] [transport.py] [_log()] kex follows: False
2026-04-16T01:09:26.655 [DEBUG] [Thread-28928] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:09:26.655 [DEBUG] [Thread-28928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:09:26.655 [DEBUG] [Thread-28928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:09:26.655 [DEBUG] [Thread-28928] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:09:26.656 [DEBUG] [Thread-28928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:09:26.656 [DEBUG] [Thread-28928] [transport.py] [_log()] Compression: none
2026-04-16T01:09:26.656 [DEBUG] [Thread-28928] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:09:26.664 [DEBUG] [Thread-28928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:09:26.665 [DEBUG] [Thread-28928] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:09:26.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:09:26.665 [DEBUG] [Thread-28928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:09:26.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:09:26.666 [DEBUG] [Thread-28928] [transport.py] [_log()] userauth is OK
2026-04-16T01:09:26.666 [DEBUG] [Thread-28928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:09:26.666 [DEBUG] [Thread-28928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:09:26.666 [DEBUG] [Thread-28928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:09:26.667 [DEBUG] [Thread-28928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:09:26.700 [INFO] [Thread-28928] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:09:26.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:09:26.757 [DEBUG] [Thread-28930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:09:27.314 [DEBUG] [Thread-28928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:09:27.314 [DEBUG] [Thread-28928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:09:27.314 [DEBUG] [Thread-28928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:09:27.355 [DEBUG] [Thread-28928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:09:27.355 [DEBUG] [Thread-28928] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:09:27.357 [DEBUG] [Thread-28928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:09:27.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:09:27.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:09:27.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:09:27.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:09:27.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:09:27.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:09:27.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:09:27.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:09:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:09:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.964716 -999.00   +9.50   5.34     87   +7.50 1 1 1 2 1     0    0 1.02 -42.98 ZNESW 7.3 5.3 117.5 9.6 9.8 -25.2 9.6 -24.1 9.3 -21.9 9.6 -24.1
2026-04-16T01:09:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:09:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:09:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.964716
2026-04-16T01:09:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:09:27.481 [DEBUG] [Thread-28928] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:09:27.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:09:27.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:09:27.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:09:27.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:09:27.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:08:54', tmtdew=1.9771, humidity=87.3648, cloud=0.0, wind=12.9514, temperature=8.92896, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:09:11.462', atlas_cloud=1, atlas_rain=1, zp_data=[2.2707499999999996, 0.08174999999999955, 0.9592500000000008, 1.7589999999999995, 2.0165000000000006, nan, 0.19399999999999906, 0.019249999999999545, 0.0024999999999995026, -0.08449999999999847, 0.15024999999999977, 0.08300000000000018, 0.39450000000000074, 0.2742500000000003, 0.02949999999999875, -0.04600000000000115, -0.0017499999999994742, -0.05550000000000033, 0.010999999999999233, -0.012750000000000483, 0.02899999999999814, 0.057749999999998636, 0.0032500000000013074, -0.05325000000000024, -0.009000000000000341, 0.020500000000000185, -0.011250000000000426, 0.005499999999999616, -0.048500000000000654, 0.04300000000000104, 0.04800000000000182, -0.003999999999997783, -0.08025000000000126], zp_timestamp='2026-04-15T23:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:09:27.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:09:27.704 [DEBUG] [Thread-28932] [transport.py] [_log()] starting thread (client mode): 0xee9569b0
2026-04-16T01:09:27.704 [DEBUG] [Thread-28932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:09:27.719 [DEBUG] [Thread-28932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:09:27.719 [INFO] [Thread-28932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:09:27.726 [DEBUG] [Thread-28932] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:09:27.727 [DEBUG] [Thread-28932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:09:27.727 [DEBUG] [Thread-28932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:09:27.727 [DEBUG] [Thread-28932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:09:27.727 [DEBUG] [Thread-28932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:09:27.727 [DEBUG] [Thread-28932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:09:27.727 [DEBUG] [Thread-28932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:09:27.727 [DEBUG] [Thread-28932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:09:27.727 [DEBUG] [Thread-28932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:09:27.727 [DEBUG] [Thread-28932] [transport.py] [_log()] client lang: <none>
2026-04-16T01:09:27.727 [DEBUG] [Thread-28932] [transport.py] [_log()] server lang: <none>
2026-04-16T01:09:27.727 [DEBUG] [Thread-28932] [transport.py] [_log()] kex follows: False
2026-04-16T01:09:27.727 [DEBUG] [Thread-28932] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:09:27.728 [DEBUG] [Thread-28932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:09:27.728 [DEBUG] [Thread-28932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:09:27.728 [DEBUG] [Thread-28932] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:09:27.728 [DEBUG] [Thread-28932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:09:27.728 [DEBUG] [Thread-28932] [transport.py] [_log()] Compression: none
2026-04-16T01:09:27.728 [DEBUG] [Thread-28932] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:09:27.784 [DEBUG] [Thread-28932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:09:27.785 [DEBUG] [Thread-28932] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:09:27.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:09:27.786 [DEBUG] [Thread-28932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:09:27.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:09:27.841 [DEBUG] [Thread-28932] [transport.py] [_log()] userauth is OK
2026-04-16T01:09:27.841 [DEBUG] [Thread-28932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:09:27.841 [DEBUG] [Thread-28932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:09:27.841 [DEBUG] [Thread-28932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:09:27.841 [DEBUG] [Thread-28932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:09:27.867 [INFO] [Thread-28932] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:09:27.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:09:27.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:09:28.668 [DEBUG] [Thread-28932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:09:28.669 [DEBUG] [Thread-28932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:09:28.716 [DEBUG] [Thread-28932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:09:28.716 [DEBUG] [Thread-28932] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:09:28.724 [DEBUG] [Thread-28932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:09:28.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:09:28.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')
2026-04-16T01:09:28.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
2026-04-16T01:09:28.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:09:28.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:09:28.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:09:28.756 [DEBUG] [Thread-28932] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:09:35.062 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:09:35.063 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:09:41.789 [DEBUG] [Thread-28934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:09:52.299 [DEBUG] [Thread-28935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:09:56.832 [DEBUG] [Thread-28936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:09:58.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:09:58.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:09:58.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
2026-04-16T01:10:00.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 9, 30), 2.23025, 86.2322, 0.0, 10.2697, 9.16448, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:10:00.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:09:30
2026-04-16T01:10:00.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:10:00.906 [DEBUG] [Thread-28937] [transport.py] [_log()] starting thread (client mode): 0xf13e1450
2026-04-16T01:10:00.907 [DEBUG] [Thread-28937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:10:00.926 [DEBUG] [Thread-28937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:10:00.926 [INFO] [Thread-28937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:10:00.928 [DEBUG] [Thread-28937] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:10:00.928 [DEBUG] [Thread-28937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:10:00.928 [DEBUG] [Thread-28937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:10:00.928 [DEBUG] [Thread-28937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:10:00.928 [DEBUG] [Thread-28937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:10:00.928 [DEBUG] [Thread-28937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:10:00.928 [DEBUG] [Thread-28937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:10:00.928 [DEBUG] [Thread-28937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:10:00.928 [DEBUG] [Thread-28937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:10:00.929 [DEBUG] [Thread-28937] [transport.py] [_log()] client lang: <none>
2026-04-16T01:10:00.929 [DEBUG] [Thread-28937] [transport.py] [_log()] server lang: <none>
2026-04-16T01:10:00.929 [DEBUG] [Thread-28937] [transport.py] [_log()] kex follows: False
2026-04-16T01:10:00.929 [DEBUG] [Thread-28937] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:10:00.929 [DEBUG] [Thread-28937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:10:00.929 [DEBUG] [Thread-28937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:10:00.929 [DEBUG] [Thread-28937] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:10:00.929 [DEBUG] [Thread-28937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:10:00.929 [DEBUG] [Thread-28937] [transport.py] [_log()] Compression: none
2026-04-16T01:10:00.929 [DEBUG] [Thread-28937] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:10:00.943 [DEBUG] [Thread-28937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:10:00.944 [DEBUG] [Thread-28937] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:10:00.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:10:00.944 [DEBUG] [Thread-28937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:10:00.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:10:00.945 [DEBUG] [Thread-28937] [transport.py] [_log()] userauth is OK
2026-04-16T01:10:00.945 [DEBUG] [Thread-28937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:10:00.946 [DEBUG] [Thread-28937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:10:00.946 [DEBUG] [Thread-28937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:10:00.946 [DEBUG] [Thread-28937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:10:00.964 [INFO] [Thread-28937] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:10:00.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:10:01.576 [DEBUG] [Thread-28937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:10:01.576 [DEBUG] [Thread-28937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:10:01.577 [DEBUG] [Thread-28937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:10:01.617 [DEBUG] [Thread-28937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:10:01.617 [DEBUG] [Thread-28937] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:10:01.620 [DEBUG] [Thread-28937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:10:01.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:10:01.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:10:01.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:10:01.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:10:01.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:10:01.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:10:01.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:10:01.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:10:01.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:10:01.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.965063 -999.00   +9.50   6.48     87   +7.50 1 1 1 2 1     0    0 1.01 -41.05 ZNESW 7.8 6.5 107.3 8.8 9.8 -25.3 9.6 -24.1 9.4 -21.9 9.6 -23.9
2026-04-16T01:10:01.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:10:01.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:10:01.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.965063
2026-04-16T01:10:01.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:10:01.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:10:01.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:10:01.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:10:01.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:10:01.643 [DEBUG] [Thread-28937] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:10:01.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:09:30', tmtdew=2.23025, humidity=86.2322, cloud=0.0, wind=10.2697, temperature=9.16448, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:09:41.443', atlas_cloud=1, atlas_rain=1, zp_data=[2.2707499999999996, 0.08174999999999955, 0.9592500000000008, 1.7589999999999995, 2.0165000000000006, nan, 0.19399999999999906, 0.019249999999999545, 0.0024999999999995026, -0.08449999999999847, 0.15024999999999977, 0.08300000000000018, 0.39450000000000074, 0.2742500000000003, 0.02949999999999875, -0.04600000000000115, -0.0017499999999994742, -0.05550000000000033, 0.010999999999999233, -0.012750000000000483, 0.02899999999999814, 0.057749999999998636, 0.0032500000000013074, -0.05325000000000024, -0.009000000000000341, 0.020500000000000185, -0.011250000000000426, 0.005499999999999616, -0.048500000000000654, 0.04300000000000104, 0.04800000000000182, -0.003999999999997783, -0.08025000000000126], zp_timestamp='2026-04-15T23:08:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:10:01.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:10:01.901 [DEBUG] [Thread-28940] [transport.py] [_log()] starting thread (client mode): 0xee9c69e0
2026-04-16T01:10:01.901 [DEBUG] [Thread-28940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:10:01.914 [DEBUG] [Thread-28940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:10:01.915 [INFO] [Thread-28940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:10:01.922 [DEBUG] [Thread-28940] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:10:01.922 [DEBUG] [Thread-28940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:10:01.922 [DEBUG] [Thread-28940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:10:01.922 [DEBUG] [Thread-28940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:10:01.922 [DEBUG] [Thread-28940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:10:01.922 [DEBUG] [Thread-28940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:10:01.922 [DEBUG] [Thread-28940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:10:01.923 [DEBUG] [Thread-28940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:10:01.923 [DEBUG] [Thread-28940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:10:01.923 [DEBUG] [Thread-28940] [transport.py] [_log()] client lang: <none>
2026-04-16T01:10:01.923 [DEBUG] [Thread-28940] [transport.py] [_log()] server lang: <none>
2026-04-16T01:10:01.923 [DEBUG] [Thread-28940] [transport.py] [_log()] kex follows: False
2026-04-16T01:10:01.923 [DEBUG] [Thread-28940] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:10:01.923 [DEBUG] [Thread-28940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:10:01.923 [DEBUG] [Thread-28940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:10:01.923 [DEBUG] [Thread-28940] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:10:01.923 [DEBUG] [Thread-28940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:10:01.923 [DEBUG] [Thread-28940] [transport.py] [_log()] Compression: none
2026-04-16T01:10:01.923 [DEBUG] [Thread-28940] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:10:01.979 [DEBUG] [Thread-28940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:10:01.980 [DEBUG] [Thread-28940] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:10:01.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:10:01.980 [DEBUG] [Thread-28940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:10:01.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:10:02.036 [DEBUG] [Thread-28940] [transport.py] [_log()] userauth is OK
2026-04-16T01:10:02.037 [DEBUG] [Thread-28940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:10:02.037 [DEBUG] [Thread-28940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:10:02.037 [DEBUG] [Thread-28940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:10:02.037 [DEBUG] [Thread-28940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:10:02.054 [INFO] [Thread-28940] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:10:02.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:10:02.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:10:02.938 [DEBUG] [Thread-28940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:10:02.938 [DEBUG] [Thread-28940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:10:02.986 [DEBUG] [Thread-28940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:10:02.986 [DEBUG] [Thread-28940] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:10:02.995 [DEBUG] [Thread-28940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:10:03.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:10:03.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')
2026-04-16T01:10:03.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
2026-04-16T01:10:03.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:10:03.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:10:03.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:10:03.036 [DEBUG] [Thread-28940] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:10:11.864 [DEBUG] [Thread-28942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:10:26.907 [DEBUG] [Thread-28943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:10:33.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:10:33.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:10:33.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
2026-04-16T01:10:34.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 10, 5), 2.22446, 86.2655, 0.0, 10.5343, 9.14798, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:10:34.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:10:05
2026-04-16T01:10:34.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:10:35.148 [DEBUG] [Thread-28944] [transport.py] [_log()] starting thread (client mode): 0xee9c1ba0
2026-04-16T01:10:35.149 [DEBUG] [Thread-28944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:10:35.168 [DEBUG] [Thread-28944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:10:35.168 [INFO] [Thread-28944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:10:35.171 [DEBUG] [Thread-28944] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:10:35.171 [DEBUG] [Thread-28944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:10:35.171 [DEBUG] [Thread-28944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] client lang: <none>
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] server lang: <none>
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] kex follows: False
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] Compression: none
2026-04-16T01:10:35.172 [DEBUG] [Thread-28944] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:10:35.187 [DEBUG] [Thread-28944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:10:35.188 [DEBUG] [Thread-28944] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:10:35.188 [DEBUG] [Thread-28944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:10:35.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:10:35.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:10:35.189 [DEBUG] [Thread-28944] [transport.py] [_log()] userauth is OK
2026-04-16T01:10:35.189 [DEBUG] [Thread-28944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:10:35.189 [DEBUG] [Thread-28944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:10:35.189 [DEBUG] [Thread-28944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:10:35.189 [DEBUG] [Thread-28944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:10:35.208 [INFO] [Thread-28944] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:10:35.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:10:35.267 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:10:35.268 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:10:41.938 [DEBUG] [Thread-28944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:10:41.938 [DEBUG] [Thread-28946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:10:41.938 [DEBUG] [Thread-28944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:10:41.939 [DEBUG] [Thread-28944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:10:41.979 [DEBUG] [Thread-28944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:10:41.979 [DEBUG] [Thread-28944] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:10:41.981 [DEBUG] [Thread-28944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:10:42.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:10:42.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:10:42.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:10:42.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:10:42.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:10:42.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:10:42.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:10:42.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:10:42.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:10:42.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.965063 -999.00   +9.50   6.48     87   +7.50 1 1 1 2 1     0    0 1.01 -41.05 ZNESW 7.8 6.5 107.3 8.8 9.8 -25.3 9.6 -24.1 9.4 -21.9 9.6 -23.9
2026-04-16T01:10:42.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:10:42.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:10:42.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.965063
2026-04-16T01:10:42.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:10:42.133 [DEBUG] [Thread-28944] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:10:42.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:10:42.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:10:42.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:10:42.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:10:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:10:05', tmtdew=2.22446, humidity=86.2655, cloud=0.0, wind=10.5343, temperature=9.14798, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:09:41.443', atlas_cloud=1, atlas_rain=1, zp_data=[2.2707499999999996, 0.08174999999999955, 0.9592500000000008, 1.7589999999999995, 2.0165000000000006, nan, 0.19399999999999906, 0.019249999999999545, 0.0024999999999995026, -0.08449999999999847, 0.15024999999999977, 0.08300000000000018, 0.39450000000000074, 0.2742500000000003, 0.02949999999999875, -0.04600000000000115, -0.0017499999999994742, -0.05550000000000033, 0.010999999999999233, -0.012750000000000483, 0.02899999999999814, 0.057749999999998636, 0.0032500000000013074, -0.05325000000000024, -0.009000000000000341, 0.020500000000000185, -0.011250000000000426, 0.005499999999999616, -0.048500000000000654, 0.04300000000000104, 0.04800000000000182, -0.003999999999997783, -0.08025000000000126], zp_timestamp='2026-04-15T23:08:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:10:42.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:10:42.376 [DEBUG] [Thread-28948] [transport.py] [_log()] starting thread (client mode): 0xee9c32e0
2026-04-16T01:10:42.377 [DEBUG] [Thread-28948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:10:42.393 [DEBUG] [Thread-28948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:10:42.393 [INFO] [Thread-28948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:10:42.400 [DEBUG] [Thread-28948] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:10:42.400 [DEBUG] [Thread-28948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:10:42.400 [DEBUG] [Thread-28948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:10:42.400 [DEBUG] [Thread-28948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:10:42.401 [DEBUG] [Thread-28948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:10:42.401 [DEBUG] [Thread-28948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:10:42.401 [DEBUG] [Thread-28948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:10:42.401 [DEBUG] [Thread-28948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:10:42.401 [DEBUG] [Thread-28948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:10:42.401 [DEBUG] [Thread-28948] [transport.py] [_log()] client lang: <none>
2026-04-16T01:10:42.401 [DEBUG] [Thread-28948] [transport.py] [_log()] server lang: <none>
2026-04-16T01:10:42.401 [DEBUG] [Thread-28948] [transport.py] [_log()] kex follows: False
2026-04-16T01:10:42.401 [DEBUG] [Thread-28948] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:10:42.401 [DEBUG] [Thread-28948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:10:42.401 [DEBUG] [Thread-28948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:10:42.401 [DEBUG] [Thread-28948] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:10:42.402 [DEBUG] [Thread-28948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:10:42.402 [DEBUG] [Thread-28948] [transport.py] [_log()] Compression: none
2026-04-16T01:10:42.402 [DEBUG] [Thread-28948] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:10:42.455 [DEBUG] [Thread-28948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:10:42.456 [DEBUG] [Thread-28948] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:10:42.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:10:42.457 [DEBUG] [Thread-28948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:10:42.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:10:42.512 [DEBUG] [Thread-28948] [transport.py] [_log()] userauth is OK
2026-04-16T01:10:42.513 [DEBUG] [Thread-28948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:10:42.513 [DEBUG] [Thread-28948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:10:42.513 [DEBUG] [Thread-28948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:10:42.513 [DEBUG] [Thread-28948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:10:42.539 [INFO] [Thread-28948] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:10:42.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:10:42.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:10:43.406 [DEBUG] [Thread-28948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:10:43.406 [DEBUG] [Thread-28948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:10:43.454 [DEBUG] [Thread-28948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:10:43.454 [DEBUG] [Thread-28948] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:10:43.463 [DEBUG] [Thread-28948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:10:43.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:10:43.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')
2026-04-16T01:10:43.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
2026-04-16T01:10:43.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:10:43.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:10:43.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:10:43.498 [DEBUG] [Thread-28948] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:10:52.449 [DEBUG] [Thread-28950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:10:56.972 [DEBUG] [Thread-28951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:11:12.017 [DEBUG] [Thread-28952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:11:13.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:11:13.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:11:13.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
2026-04-16T01:11:14.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 10, 41), 1.93835, 87.5974, 0.0, 13.0572, 8.92915, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:11:14.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:10:41
2026-04-16T01:11:15.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:11:15.616 [DEBUG] [Thread-28953] [transport.py] [_log()] starting thread (client mode): 0xee991e70
2026-04-16T01:11:15.616 [DEBUG] [Thread-28953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:11:15.637 [DEBUG] [Thread-28953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:11:15.637 [INFO] [Thread-28953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:11:15.640 [DEBUG] [Thread-28953] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:11:15.640 [DEBUG] [Thread-28953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:11:15.640 [DEBUG] [Thread-28953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:11:15.640 [DEBUG] [Thread-28953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:11:15.640 [DEBUG] [Thread-28953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:11:15.640 [DEBUG] [Thread-28953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:11:15.640 [DEBUG] [Thread-28953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:11:15.641 [DEBUG] [Thread-28953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:11:15.641 [DEBUG] [Thread-28953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:11:15.641 [DEBUG] [Thread-28953] [transport.py] [_log()] client lang: <none>
2026-04-16T01:11:15.641 [DEBUG] [Thread-28953] [transport.py] [_log()] server lang: <none>
2026-04-16T01:11:15.641 [DEBUG] [Thread-28953] [transport.py] [_log()] kex follows: False
2026-04-16T01:11:15.641 [DEBUG] [Thread-28953] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:11:15.641 [DEBUG] [Thread-28953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:11:15.641 [DEBUG] [Thread-28953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:11:15.641 [DEBUG] [Thread-28953] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:11:15.641 [DEBUG] [Thread-28953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:11:15.641 [DEBUG] [Thread-28953] [transport.py] [_log()] Compression: none
2026-04-16T01:11:15.642 [DEBUG] [Thread-28953] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:11:15.654 [DEBUG] [Thread-28953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:11:15.654 [DEBUG] [Thread-28953] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:11:15.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:11:15.655 [DEBUG] [Thread-28953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:11:15.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:11:15.655 [DEBUG] [Thread-28953] [transport.py] [_log()] userauth is OK
2026-04-16T01:11:15.656 [DEBUG] [Thread-28953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:11:15.656 [DEBUG] [Thread-28953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:11:15.656 [DEBUG] [Thread-28953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:11:15.656 [DEBUG] [Thread-28953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:11:15.680 [INFO] [Thread-28953] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:11:15.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:11:16.469 [DEBUG] [Thread-28953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:11:16.469 [DEBUG] [Thread-28953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:11:16.470 [DEBUG] [Thread-28953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:11:16.511 [DEBUG] [Thread-28953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:11:16.511 [DEBUG] [Thread-28953] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:11:16.514 [DEBUG] [Thread-28953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:11:16.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:11:16.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:11:16.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:11:16.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:11:16.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:11:16.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:11:16.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:11:16.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:11:16.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:11:16.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.965410 -999.00   +9.50   9.19     87   +7.50 1 1 1 2 1     0    0 1.03 -40.50 ZNESW 8.4 9.2 82.0 12.1 9.8 -25.2 9.6 -24.0 9.3 -21.9 9.6 -24.0
2026-04-16T01:11:16.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:11:16.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:11:16.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.965410
2026-04-16T01:11:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:11:16.538 [DEBUG] [Thread-28953] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:11:16.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:11:16.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:11:16.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:11:16.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:11:16.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:10:41', tmtdew=1.93835, humidity=87.5974, cloud=0.0, wind=13.0572, temperature=8.92915, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:10:11.424', atlas_cloud=1, atlas_rain=1, zp_data=[2.2707499999999996, 0.08174999999999955, 0.9592500000000008, 1.7589999999999995, 2.0165000000000006, nan, 0.19399999999999906, 0.019249999999999545, 0.0024999999999995026, -0.08449999999999847, 0.15024999999999977, 0.08300000000000018, 0.39450000000000074, 0.2742500000000003, 0.02949999999999875, -0.04600000000000115, -0.0017499999999994742, -0.05550000000000033, 0.010999999999999233, -0.012750000000000483, 0.02899999999999814, 0.057749999999998636, 0.0032500000000013074, -0.05325000000000024, -0.009000000000000341, 0.020500000000000185, -0.011250000000000426, 0.005499999999999616, -0.048500000000000654, 0.04300000000000104, 0.04800000000000182, -0.003999999999997783, -0.08025000000000126], zp_timestamp='2026-04-15T23:08:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:11:16.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:11:16.779 [DEBUG] [Thread-28956] [transport.py] [_log()] starting thread (client mode): 0xee905ed0
2026-04-16T01:11:16.779 [DEBUG] [Thread-28956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:11:16.793 [DEBUG] [Thread-28956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:11:16.794 [INFO] [Thread-28956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:11:16.801 [DEBUG] [Thread-28956] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:11:16.801 [DEBUG] [Thread-28956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:11:16.801 [DEBUG] [Thread-28956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:11:16.801 [DEBUG] [Thread-28956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:11:16.802 [DEBUG] [Thread-28956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:11:16.802 [DEBUG] [Thread-28956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:11:16.802 [DEBUG] [Thread-28956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:11:16.802 [DEBUG] [Thread-28956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:11:16.802 [DEBUG] [Thread-28956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:11:16.802 [DEBUG] [Thread-28956] [transport.py] [_log()] client lang: <none>
2026-04-16T01:11:16.802 [DEBUG] [Thread-28956] [transport.py] [_log()] server lang: <none>
2026-04-16T01:11:16.802 [DEBUG] [Thread-28956] [transport.py] [_log()] kex follows: False
2026-04-16T01:11:16.802 [DEBUG] [Thread-28956] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:11:16.802 [DEBUG] [Thread-28956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:11:16.802 [DEBUG] [Thread-28956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:11:16.802 [DEBUG] [Thread-28956] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:11:16.803 [DEBUG] [Thread-28956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:11:16.803 [DEBUG] [Thread-28956] [transport.py] [_log()] Compression: none
2026-04-16T01:11:16.803 [DEBUG] [Thread-28956] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:11:16.859 [DEBUG] [Thread-28956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:11:16.859 [DEBUG] [Thread-28956] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:11:16.860 [DEBUG] [Thread-28956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:11:16.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:11:16.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:11:16.916 [DEBUG] [Thread-28956] [transport.py] [_log()] userauth is OK
2026-04-16T01:11:16.916 [DEBUG] [Thread-28956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:11:16.917 [DEBUG] [Thread-28956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:11:16.917 [DEBUG] [Thread-28956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:11:16.917 [DEBUG] [Thread-28956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:11:16.942 [INFO] [Thread-28956] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:11:16.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:11:16.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:11:17.776 [DEBUG] [Thread-28956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:11:17.776 [DEBUG] [Thread-28956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:11:17.823 [DEBUG] [Thread-28956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:11:17.823 [DEBUG] [Thread-28956] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:11:17.832 [DEBUG] [Thread-28956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:11:17.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:11:17.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')
2026-04-16T01:11:17.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
2026-04-16T01:11:17.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:11:17.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:11:17.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:11:17.868 [DEBUG] [Thread-28956] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:11:27.049 [DEBUG] [Thread-28958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:11:35.471 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:11:35.472 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:11:42.092 [DEBUG] [Thread-28959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:11:47.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:11:47.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:11:47.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
2026-04-16T01:11:49.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 11, 16), 2.22095, 86.2822, 0.0, 10.2874, 9.14828, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:11:49.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:11:16
2026-04-16T01:11:49.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:11:49.985 [DEBUG] [Thread-28960] [transport.py] [_log()] starting thread (client mode): 0xf13e2ec0
2026-04-16T01:11:49.985 [DEBUG] [Thread-28960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:11:50.005 [DEBUG] [Thread-28960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:11:50.005 [INFO] [Thread-28960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:11:50.008 [DEBUG] [Thread-28960] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:11:50.008 [DEBUG] [Thread-28960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:11:50.008 [DEBUG] [Thread-28960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:11:50.008 [DEBUG] [Thread-28960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:11:50.009 [DEBUG] [Thread-28960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:11:50.009 [DEBUG] [Thread-28960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:11:50.009 [DEBUG] [Thread-28960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:11:50.009 [DEBUG] [Thread-28960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:11:50.009 [DEBUG] [Thread-28960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:11:50.009 [DEBUG] [Thread-28960] [transport.py] [_log()] client lang: <none>
2026-04-16T01:11:50.009 [DEBUG] [Thread-28960] [transport.py] [_log()] server lang: <none>
2026-04-16T01:11:50.009 [DEBUG] [Thread-28960] [transport.py] [_log()] kex follows: False
2026-04-16T01:11:50.009 [DEBUG] [Thread-28960] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:11:50.009 [DEBUG] [Thread-28960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:11:50.009 [DEBUG] [Thread-28960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:11:50.010 [DEBUG] [Thread-28960] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:11:50.010 [DEBUG] [Thread-28960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:11:50.010 [DEBUG] [Thread-28960] [transport.py] [_log()] Compression: none
2026-04-16T01:11:50.010 [DEBUG] [Thread-28960] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:11:50.027 [DEBUG] [Thread-28960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:11:50.027 [DEBUG] [Thread-28960] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:11:50.028 [DEBUG] [Thread-28960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:11:50.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:11:50.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:11:50.029 [DEBUG] [Thread-28960] [transport.py] [_log()] userauth is OK
2026-04-16T01:11:50.029 [DEBUG] [Thread-28960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:11:50.029 [DEBUG] [Thread-28960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:11:50.029 [DEBUG] [Thread-28960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:11:50.029 [DEBUG] [Thread-28960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:11:50.048 [INFO] [Thread-28960] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:11:50.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:11:50.845 [DEBUG] [Thread-28960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:11:50.846 [DEBUG] [Thread-28960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:11:50.846 [DEBUG] [Thread-28960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:11:50.886 [DEBUG] [Thread-28960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:11:50.886 [DEBUG] [Thread-28960] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:11:50.889 [DEBUG] [Thread-28960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:11:50.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:11:50.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:11:50.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:11:50.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:11:50.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:11:50.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:11:50.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:11:50.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:11:50.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:11:50.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.966105 -999.00   +9.50   5.59     87   +7.50 1 1 1 2 1     0    0 1.20 -34.20 ZNESW 6.6 5.6 123.9 9.9 9.7 -25.3 9.6 -24.1 9.3 -21.9 9.7 -24.1
2026-04-16T01:11:50.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:11:50.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:11:50.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.966105
2026-04-16T01:11:50.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:11:50.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:11:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:11:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:11:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:11:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:11:16', tmtdew=2.22095, humidity=86.2822, cloud=0.0, wind=10.2874, temperature=9.14828, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:11:11.472', atlas_cloud=1, atlas_rain=1, zp_data=[2.2707499999999996, 0.08174999999999955, 0.9592500000000008, 1.7589999999999995, 2.0165000000000006, nan, 0.19399999999999906, 0.019249999999999545, 0.0024999999999995026, -0.08449999999999847, 0.15024999999999977, 0.08300000000000018, 0.39450000000000074, 0.2742500000000003, 0.02949999999999875, -0.04600000000000115, -0.0017499999999994742, -0.05550000000000033, 0.010999999999999233, -0.012750000000000483, 0.02899999999999814, 0.057749999999998636, 0.0032500000000013074, -0.05325000000000024, -0.009000000000000341, 0.020500000000000185, -0.011250000000000426, 0.005499999999999616, -0.048500000000000654, 0.04300000000000104, 0.04800000000000182, -0.003999999999997783, -0.08025000000000126], zp_timestamp='2026-04-15T23:08:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:11:50.910 [DEBUG] [Thread-28960] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:11:51.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:11:51.135 [DEBUG] [Thread-28963] [transport.py] [_log()] starting thread (client mode): 0xee9c7b20
2026-04-16T01:11:51.135 [DEBUG] [Thread-28963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:11:51.153 [DEBUG] [Thread-28963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:11:51.153 [INFO] [Thread-28963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:11:51.160 [DEBUG] [Thread-28963] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:11:51.160 [DEBUG] [Thread-28963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:11:51.160 [DEBUG] [Thread-28963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:11:51.160 [DEBUG] [Thread-28963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:11:51.161 [DEBUG] [Thread-28963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:11:51.161 [DEBUG] [Thread-28963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:11:51.161 [DEBUG] [Thread-28963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:11:51.161 [DEBUG] [Thread-28963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:11:51.161 [DEBUG] [Thread-28963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:11:51.161 [DEBUG] [Thread-28963] [transport.py] [_log()] client lang: <none>
2026-04-16T01:11:51.161 [DEBUG] [Thread-28963] [transport.py] [_log()] server lang: <none>
2026-04-16T01:11:51.161 [DEBUG] [Thread-28963] [transport.py] [_log()] kex follows: False
2026-04-16T01:11:51.161 [DEBUG] [Thread-28963] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:11:51.161 [DEBUG] [Thread-28963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:11:51.161 [DEBUG] [Thread-28963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:11:51.162 [DEBUG] [Thread-28963] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:11:51.162 [DEBUG] [Thread-28963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:11:51.162 [DEBUG] [Thread-28963] [transport.py] [_log()] Compression: none
2026-04-16T01:11:51.162 [DEBUG] [Thread-28963] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:11:51.223 [DEBUG] [Thread-28963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:11:51.224 [DEBUG] [Thread-28963] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:11:51.224 [DEBUG] [Thread-28963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:11:51.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:11:51.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:11:51.280 [DEBUG] [Thread-28963] [transport.py] [_log()] userauth is OK
2026-04-16T01:11:51.280 [DEBUG] [Thread-28963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:11:51.280 [DEBUG] [Thread-28963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:11:51.280 [DEBUG] [Thread-28963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:11:51.281 [DEBUG] [Thread-28963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:11:51.310 [INFO] [Thread-28963] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:11:51.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:11:51.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:11:52.113 [DEBUG] [Thread-28963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:11:52.114 [DEBUG] [Thread-28963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:11:52.161 [DEBUG] [Thread-28963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:11:52.161 [DEBUG] [Thread-28963] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:11:52.170 [DEBUG] [Thread-28963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:11:52.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:11:52.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-16T01:11:52.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
2026-04-16T01:11:52.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:11:52.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:11:52.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:11:52.206 [DEBUG] [Thread-28963] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:11:52.594 [DEBUG] [Thread-28965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:11:57.123 [DEBUG] [Thread-28966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:12:12.163 [DEBUG] [Thread-28967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:12:22.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:12:22.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:12:22.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
2026-04-16T01:12:23.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 11, 52), 1.9263, 87.664, 0.0, 13.3394, 8.86293, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:12:23.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:11:52
2026-04-16T01:12:23.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:12:24.300 [DEBUG] [Thread-28968] [transport.py] [_log()] starting thread (client mode): 0xf13ca500
2026-04-16T01:12:24.300 [DEBUG] [Thread-28968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:12:24.320 [DEBUG] [Thread-28968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:12:24.320 [INFO] [Thread-28968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:12:24.323 [DEBUG] [Thread-28968] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:12:24.323 [DEBUG] [Thread-28968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:12:24.323 [DEBUG] [Thread-28968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:12:24.323 [DEBUG] [Thread-28968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:12:24.323 [DEBUG] [Thread-28968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:12:24.323 [DEBUG] [Thread-28968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:12:24.323 [DEBUG] [Thread-28968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:12:24.323 [DEBUG] [Thread-28968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:12:24.323 [DEBUG] [Thread-28968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:12:24.323 [DEBUG] [Thread-28968] [transport.py] [_log()] client lang: <none>
2026-04-16T01:12:24.323 [DEBUG] [Thread-28968] [transport.py] [_log()] server lang: <none>
2026-04-16T01:12:24.323 [DEBUG] [Thread-28968] [transport.py] [_log()] kex follows: False
2026-04-16T01:12:24.324 [DEBUG] [Thread-28968] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:12:24.324 [DEBUG] [Thread-28968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:12:24.324 [DEBUG] [Thread-28968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:12:24.324 [DEBUG] [Thread-28968] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:12:24.324 [DEBUG] [Thread-28968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:12:24.324 [DEBUG] [Thread-28968] [transport.py] [_log()] Compression: none
2026-04-16T01:12:24.324 [DEBUG] [Thread-28968] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:12:24.340 [DEBUG] [Thread-28968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:12:24.341 [DEBUG] [Thread-28968] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:12:24.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:12:24.341 [DEBUG] [Thread-28968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:12:24.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:12:24.342 [DEBUG] [Thread-28968] [transport.py] [_log()] userauth is OK
2026-04-16T01:12:24.342 [DEBUG] [Thread-28968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:12:24.342 [DEBUG] [Thread-28968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:12:24.342 [DEBUG] [Thread-28968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:12:24.342 [DEBUG] [Thread-28968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:12:24.373 [INFO] [Thread-28968] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:12:24.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:12:25.161 [DEBUG] [Thread-28968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:12:25.162 [DEBUG] [Thread-28968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:12:25.162 [DEBUG] [Thread-28968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:12:25.202 [DEBUG] [Thread-28968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:12:25.202 [DEBUG] [Thread-28968] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:12:25.206 [DEBUG] [Thread-28968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:12:25.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:12:25.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:12:25.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:12:25.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:12:25.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:12:25.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:12:25.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:12:25.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:12:25.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:12:25.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.966452 -999.00   +9.50   8.55     87   +7.50 1 1 1 2 1     0    0 1.26 -33.26 ZNESW 8.9 8.6 82.1 11.3 9.8 -25.2 9.6 -24.0 9.4 -21.9 9.6 -24.0
2026-04-16T01:12:25.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:12:25.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:12:25.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.966452
2026-04-16T01:12:25.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:12:25.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:12:25.232 [DEBUG] [Thread-28968] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:12:25.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:12:25.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:12:25.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:12:25.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:11:52', tmtdew=1.9263, humidity=87.664, cloud=0.0, wind=13.3394, temperature=8.86293, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:11:41.453', atlas_cloud=1, atlas_rain=1, zp_data=[2.2707499999999996, 0.08174999999999955, 0.9592500000000008, 1.7589999999999995, 2.0165000000000006, nan, 0.19399999999999906, 0.019249999999999545, 0.0024999999999995026, -0.08449999999999847, 0.15024999999999977, 0.08300000000000018, 0.39450000000000074, 0.2742500000000003, 0.02949999999999875, -0.04600000000000115, -0.0017499999999994742, -0.05550000000000033, 0.010999999999999233, -0.012750000000000483, 0.02899999999999814, 0.057749999999998636, 0.0032500000000013074, -0.05325000000000024, -0.009000000000000341, 0.020500000000000185, -0.011250000000000426, 0.005499999999999616, -0.048500000000000654, 0.04300000000000104, 0.04800000000000182, -0.003999999999997783, -0.08025000000000126], zp_timestamp='2026-04-15T23:08:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:12:25.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:12:25.489 [DEBUG] [Thread-28971] [transport.py] [_log()] starting thread (client mode): 0xf13664d0
2026-04-16T01:12:25.489 [DEBUG] [Thread-28971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:12:25.504 [DEBUG] [Thread-28971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:12:25.504 [INFO] [Thread-28971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:12:25.511 [DEBUG] [Thread-28971] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:12:25.511 [DEBUG] [Thread-28971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:12:25.511 [DEBUG] [Thread-28971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:12:25.511 [DEBUG] [Thread-28971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:12:25.511 [DEBUG] [Thread-28971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:12:25.512 [DEBUG] [Thread-28971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:12:25.512 [DEBUG] [Thread-28971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:12:25.512 [DEBUG] [Thread-28971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:12:25.512 [DEBUG] [Thread-28971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:12:25.512 [DEBUG] [Thread-28971] [transport.py] [_log()] client lang: <none>
2026-04-16T01:12:25.512 [DEBUG] [Thread-28971] [transport.py] [_log()] server lang: <none>
2026-04-16T01:12:25.512 [DEBUG] [Thread-28971] [transport.py] [_log()] kex follows: False
2026-04-16T01:12:25.512 [DEBUG] [Thread-28971] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:12:25.512 [DEBUG] [Thread-28971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:12:25.512 [DEBUG] [Thread-28971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:12:25.512 [DEBUG] [Thread-28971] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:12:25.513 [DEBUG] [Thread-28971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:12:25.513 [DEBUG] [Thread-28971] [transport.py] [_log()] Compression: none
2026-04-16T01:12:25.513 [DEBUG] [Thread-28971] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:12:25.569 [DEBUG] [Thread-28971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:12:25.570 [DEBUG] [Thread-28971] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:12:25.570 [DEBUG] [Thread-28971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:12:25.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:12:25.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:12:25.628 [DEBUG] [Thread-28971] [transport.py] [_log()] userauth is OK
2026-04-16T01:12:25.628 [DEBUG] [Thread-28971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:12:25.628 [DEBUG] [Thread-28971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:12:25.628 [DEBUG] [Thread-28971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:12:25.628 [DEBUG] [Thread-28971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:12:25.654 [INFO] [Thread-28971] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:12:25.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:12:25.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:12:26.465 [DEBUG] [Thread-28971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:12:26.465 [DEBUG] [Thread-28971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:12:26.512 [DEBUG] [Thread-28971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:12:26.512 [DEBUG] [Thread-28971] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:12:26.521 [DEBUG] [Thread-28971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:12:26.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:12:26.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')
2026-04-16T01:12:26.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
2026-04-16T01:12:26.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:12:26.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:12:26.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:12:26.553 [DEBUG] [Thread-28971] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:12:27.195 [DEBUG] [Thread-28973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:12:35.677 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:12:35.679 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:12:42.237 [DEBUG] [Thread-28974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:12:52.742 [DEBUG] [Thread-28975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:12:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:12:56.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:12:56.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
2026-04-16T01:12:57.270 [DEBUG] [Thread-28976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:12:57.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 12, 27), 2.15786, 86.3652, 0.0, 10.1992, 9.19812, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:12:57.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:12:27
2026-04-16T01:12:58.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:12:58.701 [DEBUG] [Thread-28977] [transport.py] [_log()] starting thread (client mode): 0xf13c8340
2026-04-16T01:12:58.702 [DEBUG] [Thread-28977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:12:58.720 [DEBUG] [Thread-28977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:12:58.720 [INFO] [Thread-28977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:12:58.723 [DEBUG] [Thread-28977] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:12:58.723 [DEBUG] [Thread-28977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:12:58.723 [DEBUG] [Thread-28977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:12:58.724 [DEBUG] [Thread-28977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:12:58.724 [DEBUG] [Thread-28977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:12:58.724 [DEBUG] [Thread-28977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:12:58.724 [DEBUG] [Thread-28977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:12:58.724 [DEBUG] [Thread-28977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:12:58.724 [DEBUG] [Thread-28977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:12:58.724 [DEBUG] [Thread-28977] [transport.py] [_log()] client lang: <none>
2026-04-16T01:12:58.724 [DEBUG] [Thread-28977] [transport.py] [_log()] server lang: <none>
2026-04-16T01:12:58.724 [DEBUG] [Thread-28977] [transport.py] [_log()] kex follows: False
2026-04-16T01:12:58.724 [DEBUG] [Thread-28977] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:12:58.724 [DEBUG] [Thread-28977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:12:58.724 [DEBUG] [Thread-28977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:12:58.725 [DEBUG] [Thread-28977] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:12:58.725 [DEBUG] [Thread-28977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:12:58.725 [DEBUG] [Thread-28977] [transport.py] [_log()] Compression: none
2026-04-16T01:12:58.725 [DEBUG] [Thread-28977] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:12:58.741 [DEBUG] [Thread-28977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:12:58.741 [DEBUG] [Thread-28977] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:12:58.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:12:58.742 [DEBUG] [Thread-28977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:12:58.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:12:58.743 [DEBUG] [Thread-28977] [transport.py] [_log()] userauth is OK
2026-04-16T01:12:58.743 [DEBUG] [Thread-28977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:12:58.743 [DEBUG] [Thread-28977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:12:58.743 [DEBUG] [Thread-28977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:12:58.743 [DEBUG] [Thread-28977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:12:58.768 [INFO] [Thread-28977] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:12:58.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:12:59.531 [DEBUG] [Thread-28977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:12:59.532 [DEBUG] [Thread-28977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:12:59.532 [DEBUG] [Thread-28977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:12:59.573 [DEBUG] [Thread-28977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:12:59.573 [DEBUG] [Thread-28977] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:12:59.575 [DEBUG] [Thread-28977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:12:59.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:12:59.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:12:59.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:12:59.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:12:59.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:12:59.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:12:59.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:12:59.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:12:59.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:12:59.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.966799 -999.00   +9.50   5.67     87   +7.50 1 1 1 2 1     0    0 1.19 -33.29 ZNESW 6.3 5.7 76.8 10.6 9.8 -25.4 9.7 -24.2 9.3 -21.9 9.6 -24.1
2026-04-16T01:12:59.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:12:59.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:12:59.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.966799
2026-04-16T01:12:59.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:12:59.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:12:59.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:12:59.599 [DEBUG] [Thread-28977] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:12:59.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:12:59.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:12:59.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:12:27', tmtdew=2.15786, humidity=86.3652, cloud=0.0, wind=10.1992, temperature=9.19812, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:12:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[2.205749999999999, 0.12325000000000053, 1.4602500000000003, 2.4749999999999996, nan, nan, 0.15649999999999942, 0.035250000000001336, 0.015499999999999403, -0.04899999999999949, 0.21224999999999916, 0.14899999999999913, 0.426499999999999, 0.3767499999999995, 0.04800000000000004, -0.038000000000000256, -0.013749999999999929, -0.03049999999999997, 0.03599999999999959, 0.009249999999999758, 0.04199999999999804, 0.0857499999999991, 0.045750000000001734, -0.03575000000000017, -0.0005000000000006111, 0.03149999999999942, 0.02674999999999983, -0.005499999999999616, 0.016000000000000014, 0.0840000000000014, 0.04200000000000159, 0.006000000000000227, -0.07875000000000121], zp_timestamp='2026-04-15T23:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:12:59.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:12:59.859 [DEBUG] [Thread-28980] [transport.py] [_log()] starting thread (client mode): 0xf1337790
2026-04-16T01:12:59.860 [DEBUG] [Thread-28980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:12:59.875 [DEBUG] [Thread-28980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:12:59.875 [INFO] [Thread-28980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:12:59.883 [DEBUG] [Thread-28980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:12:59.883 [DEBUG] [Thread-28980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:12:59.883 [DEBUG] [Thread-28980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:12:59.883 [DEBUG] [Thread-28980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:12:59.883 [DEBUG] [Thread-28980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:12:59.883 [DEBUG] [Thread-28980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:12:59.883 [DEBUG] [Thread-28980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:12:59.883 [DEBUG] [Thread-28980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:12:59.883 [DEBUG] [Thread-28980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:12:59.884 [DEBUG] [Thread-28980] [transport.py] [_log()] client lang: <none>
2026-04-16T01:12:59.884 [DEBUG] [Thread-28980] [transport.py] [_log()] server lang: <none>
2026-04-16T01:12:59.884 [DEBUG] [Thread-28980] [transport.py] [_log()] kex follows: False
2026-04-16T01:12:59.884 [DEBUG] [Thread-28980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:12:59.884 [DEBUG] [Thread-28980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:12:59.884 [DEBUG] [Thread-28980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:12:59.884 [DEBUG] [Thread-28980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:12:59.884 [DEBUG] [Thread-28980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:12:59.884 [DEBUG] [Thread-28980] [transport.py] [_log()] Compression: none
2026-04-16T01:12:59.884 [DEBUG] [Thread-28980] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:12:59.939 [DEBUG] [Thread-28980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:12:59.939 [DEBUG] [Thread-28980] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:12:59.939 [DEBUG] [Thread-28980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:12:59.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:12:59.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:12:59.995 [DEBUG] [Thread-28980] [transport.py] [_log()] userauth is OK
2026-04-16T01:12:59.995 [DEBUG] [Thread-28980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:12:59.996 [DEBUG] [Thread-28980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:12:59.996 [DEBUG] [Thread-28980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:12:59.996 [DEBUG] [Thread-28980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:13:00.021 [INFO] [Thread-28980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:13:00.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:13:00.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:13:00.831 [DEBUG] [Thread-28980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:13:00.831 [DEBUG] [Thread-28980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:13:00.879 [DEBUG] [Thread-28980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:13:00.879 [DEBUG] [Thread-28980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:13:00.887 [DEBUG] [Thread-28980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:13:00.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:13:00.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')
2026-04-16T01:13:00.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
2026-04-16T01:13:00.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:13:00.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:13:00.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:13:00.918 [DEBUG] [Thread-28980] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:13:12.299 [DEBUG] [Thread-28982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:13:27.342 [DEBUG] [Thread-28983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:13:30.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:13:30.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:13:30.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
2026-04-16T01:13:32.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 13, 2), 2.15259, 86.3984, 0.0, 10.2697, 9.21471, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:13:32.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:13:02
2026-04-16T01:13:32.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:13:33.027 [DEBUG] [Thread-28984] [transport.py] [_log()] starting thread (client mode): 0xee990b80
2026-04-16T01:13:33.027 [DEBUG] [Thread-28984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:13:33.047 [DEBUG] [Thread-28984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:13:33.047 [INFO] [Thread-28984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:13:33.050 [DEBUG] [Thread-28984] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:13:33.050 [DEBUG] [Thread-28984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:13:33.050 [DEBUG] [Thread-28984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:13:33.050 [DEBUG] [Thread-28984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:13:33.050 [DEBUG] [Thread-28984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:13:33.050 [DEBUG] [Thread-28984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:13:33.051 [DEBUG] [Thread-28984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:13:33.051 [DEBUG] [Thread-28984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:13:33.051 [DEBUG] [Thread-28984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:13:33.051 [DEBUG] [Thread-28984] [transport.py] [_log()] client lang: <none>
2026-04-16T01:13:33.051 [DEBUG] [Thread-28984] [transport.py] [_log()] server lang: <none>
2026-04-16T01:13:33.051 [DEBUG] [Thread-28984] [transport.py] [_log()] kex follows: False
2026-04-16T01:13:33.051 [DEBUG] [Thread-28984] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:13:33.051 [DEBUG] [Thread-28984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:13:33.051 [DEBUG] [Thread-28984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:13:33.051 [DEBUG] [Thread-28984] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:13:33.051 [DEBUG] [Thread-28984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:13:33.052 [DEBUG] [Thread-28984] [transport.py] [_log()] Compression: none
2026-04-16T01:13:33.052 [DEBUG] [Thread-28984] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:13:33.067 [DEBUG] [Thread-28984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:13:33.067 [DEBUG] [Thread-28984] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:13:33.068 [DEBUG] [Thread-28984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:13:33.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:13:33.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:13:33.108 [DEBUG] [Thread-28984] [transport.py] [_log()] userauth is OK
2026-04-16T01:13:33.108 [DEBUG] [Thread-28984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:13:33.109 [DEBUG] [Thread-28984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:13:33.109 [DEBUG] [Thread-28984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:13:33.109 [DEBUG] [Thread-28984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:13:33.133 [INFO] [Thread-28984] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:13:33.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:13:33.897 [DEBUG] [Thread-28984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:13:33.897 [DEBUG] [Thread-28984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:13:33.898 [DEBUG] [Thread-28984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:13:33.938 [DEBUG] [Thread-28984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:13:33.938 [DEBUG] [Thread-28984] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:13:33.940 [DEBUG] [Thread-28984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:13:33.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:13:33.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:13:33.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:13:33.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:13:33.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:13:33.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:13:33.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:13:33.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:13:33.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:13:33.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.967146 -999.00   +9.50   6.10     87   +7.50 1 1 1 2 1     0    0 1.13 -36.00 ZNESW 7.7 6.1 114.6 10.7 9.8 -25.5 9.7 -24.1 9.3 -21.9 9.7 -24.1
2026-04-16T01:13:33.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:13:33.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:13:33.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.967146
2026-04-16T01:13:33.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:13:33.963 [DEBUG] [Thread-28984] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:13:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:13:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:13:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:13:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:13:33.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:13:02', tmtdew=2.15259, humidity=86.3984, cloud=0.0, wind=10.2697, temperature=9.21471, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:12:41.414', atlas_cloud=1, atlas_rain=1, zp_data=[2.205749999999999, 0.12325000000000053, 1.4602500000000003, 2.4749999999999996, nan, nan, 0.15649999999999942, 0.035250000000001336, 0.015499999999999403, -0.04899999999999949, 0.21224999999999916, 0.14899999999999913, 0.426499999999999, 0.3767499999999995, 0.04800000000000004, -0.038000000000000256, -0.013749999999999929, -0.03049999999999997, 0.03599999999999959, 0.009249999999999758, 0.04199999999999804, 0.0857499999999991, 0.045750000000001734, -0.03575000000000017, -0.0005000000000006111, 0.03149999999999942, 0.02674999999999983, -0.005499999999999616, 0.016000000000000014, 0.0840000000000014, 0.04200000000000159, 0.006000000000000227, -0.07875000000000121], zp_timestamp='2026-04-15T23:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:13:34.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:13:34.219 [DEBUG] [Thread-28987] [transport.py] [_log()] starting thread (client mode): 0xee9c7520
2026-04-16T01:13:34.220 [DEBUG] [Thread-28987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:13:34.234 [DEBUG] [Thread-28987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:13:34.234 [INFO] [Thread-28987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:13:34.241 [DEBUG] [Thread-28987] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:13:34.241 [DEBUG] [Thread-28987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:13:34.242 [DEBUG] [Thread-28987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:13:34.242 [DEBUG] [Thread-28987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:13:34.242 [DEBUG] [Thread-28987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:13:34.242 [DEBUG] [Thread-28987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:13:34.242 [DEBUG] [Thread-28987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:13:34.242 [DEBUG] [Thread-28987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:13:34.242 [DEBUG] [Thread-28987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:13:34.242 [DEBUG] [Thread-28987] [transport.py] [_log()] client lang: <none>
2026-04-16T01:13:34.242 [DEBUG] [Thread-28987] [transport.py] [_log()] server lang: <none>
2026-04-16T01:13:34.242 [DEBUG] [Thread-28987] [transport.py] [_log()] kex follows: False
2026-04-16T01:13:34.242 [DEBUG] [Thread-28987] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:13:34.242 [DEBUG] [Thread-28987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:13:34.243 [DEBUG] [Thread-28987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:13:34.243 [DEBUG] [Thread-28987] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:13:34.243 [DEBUG] [Thread-28987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:13:34.243 [DEBUG] [Thread-28987] [transport.py] [_log()] Compression: none
2026-04-16T01:13:34.243 [DEBUG] [Thread-28987] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:13:34.298 [DEBUG] [Thread-28987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:13:34.299 [DEBUG] [Thread-28987] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:13:34.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:13:34.300 [DEBUG] [Thread-28987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:13:34.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:13:34.355 [DEBUG] [Thread-28987] [transport.py] [_log()] userauth is OK
2026-04-16T01:13:34.355 [DEBUG] [Thread-28987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:13:34.356 [DEBUG] [Thread-28987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:13:34.356 [DEBUG] [Thread-28987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:13:34.356 [DEBUG] [Thread-28987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:13:34.380 [INFO] [Thread-28987] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:13:34.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:13:34.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:13:35.205 [DEBUG] [Thread-28987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:13:35.205 [DEBUG] [Thread-28987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:13:35.254 [DEBUG] [Thread-28987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:13:35.254 [DEBUG] [Thread-28987] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:13:35.262 [DEBUG] [Thread-28987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:13:35.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:13:35.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')
2026-04-16T01:13:35.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') -> 00000000
2026-04-16T01:13:35.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:13:35.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:13:35.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:13:35.294 [DEBUG] [Thread-28987] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:13:35.883 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:13:35.884 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:13:42.370 [DEBUG] [Thread-28989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:13:52.894 [DEBUG] [Thread-28990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:13:57.412 [DEBUG] [Thread-28991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:14:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:14:05.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:14:05.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
2026-04-16T01:14:06.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 13, 38), 1.88768, 87.8966, 0.0, 13.5864, 8.86315, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:14:06.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:13:38
2026-04-16T01:14:06.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:14:07.446 [DEBUG] [Thread-28992] [transport.py] [_log()] starting thread (client mode): 0xee9925f0
2026-04-16T01:14:07.447 [DEBUG] [Thread-28992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:14:07.465 [DEBUG] [Thread-28992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:14:07.466 [INFO] [Thread-28992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:14:07.469 [DEBUG] [Thread-28992] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:14:07.469 [DEBUG] [Thread-28992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:14:07.469 [DEBUG] [Thread-28992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:14:07.469 [DEBUG] [Thread-28992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:14:07.469 [DEBUG] [Thread-28992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:14:07.469 [DEBUG] [Thread-28992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:14:07.469 [DEBUG] [Thread-28992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:14:07.469 [DEBUG] [Thread-28992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:14:07.469 [DEBUG] [Thread-28992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:14:07.469 [DEBUG] [Thread-28992] [transport.py] [_log()] client lang: <none>
2026-04-16T01:14:07.469 [DEBUG] [Thread-28992] [transport.py] [_log()] server lang: <none>
2026-04-16T01:14:07.470 [DEBUG] [Thread-28992] [transport.py] [_log()] kex follows: False
2026-04-16T01:14:07.470 [DEBUG] [Thread-28992] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:14:07.470 [DEBUG] [Thread-28992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:14:07.470 [DEBUG] [Thread-28992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:14:07.470 [DEBUG] [Thread-28992] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:14:07.470 [DEBUG] [Thread-28992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:14:07.470 [DEBUG] [Thread-28992] [transport.py] [_log()] Compression: none
2026-04-16T01:14:07.470 [DEBUG] [Thread-28992] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:14:07.486 [DEBUG] [Thread-28992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:14:07.487 [DEBUG] [Thread-28992] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:14:07.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:14:07.487 [DEBUG] [Thread-28992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:14:07.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:14:07.488 [DEBUG] [Thread-28992] [transport.py] [_log()] userauth is OK
2026-04-16T01:14:07.488 [DEBUG] [Thread-28992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:14:07.488 [DEBUG] [Thread-28992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:14:07.488 [DEBUG] [Thread-28992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:14:07.488 [DEBUG] [Thread-28992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:14:07.507 [INFO] [Thread-28992] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:14:07.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:14:08.278 [DEBUG] [Thread-28992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:14:08.279 [DEBUG] [Thread-28992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:14:08.279 [DEBUG] [Thread-28992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:14:08.319 [DEBUG] [Thread-28992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:14:08.319 [DEBUG] [Thread-28992] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:14:08.321 [DEBUG] [Thread-28992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:14:08.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:14:08.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:14:08.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:14:08.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:14:08.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:14:08.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:14:08.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:14:08.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:14:08.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:14:08.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.967493 -999.00   +9.50   7.45     87   +7.50 1 1 1 2 1     0    0 1.16 -33.75 ZNESW 6.8 7.5 116.2 10.9 9.8 -25.3 9.6 -24.2 9.3 -21.9 9.7 -24.1
2026-04-16T01:14:08.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:14:08.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:14:08.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.967493
2026-04-16T01:14:08.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:14:08.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:14:08.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:14:08.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:14:08.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:14:08.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:13:38', tmtdew=1.88768, humidity=87.8966, cloud=0.0, wind=13.5864, temperature=8.86315, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:13:11.395', atlas_cloud=1, atlas_rain=1, zp_data=[2.205749999999999, 0.12325000000000053, 1.4602500000000003, 2.4749999999999996, nan, nan, 0.15649999999999942, 0.035250000000001336, 0.015499999999999403, -0.04899999999999949, 0.21224999999999916, 0.14899999999999913, 0.426499999999999, 0.3767499999999995, 0.04800000000000004, -0.038000000000000256, -0.013749999999999929, -0.03049999999999997, 0.03599999999999959, 0.009249999999999758, 0.04199999999999804, 0.0857499999999991, 0.045750000000001734, -0.03575000000000017, -0.0005000000000006111, 0.03149999999999942, 0.02674999999999983, -0.005499999999999616, 0.016000000000000014, 0.0840000000000014, 0.04200000000000159, 0.006000000000000227, -0.07875000000000121], zp_timestamp='2026-04-15T23:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:14:08.341 [DEBUG] [Thread-28992] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:14:08.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:14:08.557 [DEBUG] [Thread-28995] [transport.py] [_log()] starting thread (client mode): 0xee991f90
2026-04-16T01:14:08.558 [DEBUG] [Thread-28995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:14:08.572 [DEBUG] [Thread-28995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:14:08.572 [INFO] [Thread-28995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:14:08.579 [DEBUG] [Thread-28995] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:14:08.579 [DEBUG] [Thread-28995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:14:08.579 [DEBUG] [Thread-28995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:14:08.579 [DEBUG] [Thread-28995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:14:08.579 [DEBUG] [Thread-28995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:14:08.579 [DEBUG] [Thread-28995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:14:08.580 [DEBUG] [Thread-28995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:14:08.580 [DEBUG] [Thread-28995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:14:08.580 [DEBUG] [Thread-28995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:14:08.580 [DEBUG] [Thread-28995] [transport.py] [_log()] client lang: <none>
2026-04-16T01:14:08.580 [DEBUG] [Thread-28995] [transport.py] [_log()] server lang: <none>
2026-04-16T01:14:08.580 [DEBUG] [Thread-28995] [transport.py] [_log()] kex follows: False
2026-04-16T01:14:08.580 [DEBUG] [Thread-28995] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:14:08.580 [DEBUG] [Thread-28995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:14:08.580 [DEBUG] [Thread-28995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:14:08.580 [DEBUG] [Thread-28995] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:14:08.580 [DEBUG] [Thread-28995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:14:08.580 [DEBUG] [Thread-28995] [transport.py] [_log()] Compression: none
2026-04-16T01:14:08.580 [DEBUG] [Thread-28995] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:14:08.638 [DEBUG] [Thread-28995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:14:08.639 [DEBUG] [Thread-28995] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:14:08.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:14:08.639 [DEBUG] [Thread-28995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:14:08.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:14:08.695 [DEBUG] [Thread-28995] [transport.py] [_log()] userauth is OK
2026-04-16T01:14:08.695 [DEBUG] [Thread-28995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:14:08.696 [DEBUG] [Thread-28995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:14:08.696 [DEBUG] [Thread-28995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:14:08.696 [DEBUG] [Thread-28995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:14:08.720 [INFO] [Thread-28995] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:14:08.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:14:08.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:14:09.562 [DEBUG] [Thread-28995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:14:09.562 [DEBUG] [Thread-28995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:14:09.610 [DEBUG] [Thread-28995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:14:09.610 [DEBUG] [Thread-28995] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:14:09.619 [DEBUG] [Thread-28995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:14:09.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:14:09.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')
2026-04-16T01:14:09.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
2026-04-16T01:14:09.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:14:09.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:14:09.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:14:09.654 [DEBUG] [Thread-28995] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:14:12.441 [DEBUG] [Thread-28997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:14:27.484 [DEBUG] [Thread-28998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:14:36.090 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:14:36.091 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:14:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:14:39.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:14:39.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
2026-04-16T01:14:40.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 14, 13), 2.15115, 86.3985, 0.0, 10.1462, 9.06521, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:14:40.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:14:13
2026-04-16T01:14:41.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:14:41.844 [DEBUG] [Thread-28999] [transport.py] [_log()] starting thread (client mode): 0xee9909d0
2026-04-16T01:14:41.844 [DEBUG] [Thread-28999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:14:41.865 [DEBUG] [Thread-28999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:14:41.865 [INFO] [Thread-28999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:14:41.868 [DEBUG] [Thread-28999] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:14:41.868 [DEBUG] [Thread-28999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:14:41.868 [DEBUG] [Thread-28999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:14:41.869 [DEBUG] [Thread-28999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:14:41.869 [DEBUG] [Thread-28999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:14:41.869 [DEBUG] [Thread-28999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:14:41.869 [DEBUG] [Thread-28999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:14:41.869 [DEBUG] [Thread-28999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:14:41.869 [DEBUG] [Thread-28999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:14:41.869 [DEBUG] [Thread-28999] [transport.py] [_log()] client lang: <none>
2026-04-16T01:14:41.869 [DEBUG] [Thread-28999] [transport.py] [_log()] server lang: <none>
2026-04-16T01:14:41.869 [DEBUG] [Thread-28999] [transport.py] [_log()] kex follows: False
2026-04-16T01:14:41.869 [DEBUG] [Thread-28999] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:14:41.869 [DEBUG] [Thread-28999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:14:41.870 [DEBUG] [Thread-28999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:14:41.870 [DEBUG] [Thread-28999] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:14:41.870 [DEBUG] [Thread-28999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:14:41.870 [DEBUG] [Thread-28999] [transport.py] [_log()] Compression: none
2026-04-16T01:14:41.870 [DEBUG] [Thread-28999] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:14:41.887 [DEBUG] [Thread-28999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:14:41.887 [DEBUG] [Thread-28999] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:14:41.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:14:41.888 [DEBUG] [Thread-28999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:14:41.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:14:41.889 [DEBUG] [Thread-28999] [transport.py] [_log()] userauth is OK
2026-04-16T01:14:41.889 [DEBUG] [Thread-28999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:14:41.889 [DEBUG] [Thread-28999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:14:41.889 [DEBUG] [Thread-28999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:14:41.889 [DEBUG] [Thread-28999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:14:41.908 [INFO] [Thread-28999] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:14:41.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:14:42.516 [DEBUG] [Thread-29001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:14:42.691 [DEBUG] [Thread-28999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:14:42.691 [DEBUG] [Thread-28999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:14:42.692 [DEBUG] [Thread-28999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:14:42.732 [DEBUG] [Thread-28999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:14:42.732 [DEBUG] [Thread-28999] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:14:42.735 [DEBUG] [Thread-28999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:14:42.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:14:42.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:14:42.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:14:42.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:14:42.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:14:42.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:14:42.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:14:42.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:14:42.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:14:42.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.967840 -999.00   +9.50   6.29     87   +7.50 1 1 1 2 1     0    0 1.30 -30.13 ZNESW 4.7 6.3 107.4 10.1 9.7 -25.2 9.6 -24.1 9.3 -21.9 9.6 -23.9
2026-04-16T01:14:42.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:14:42.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:14:42.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.967840
2026-04-16T01:14:42.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:14:42.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:14:42.761 [DEBUG] [Thread-28999] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:14:42.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:14:42.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:14:42.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:14:42.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:14:13', tmtdew=2.15115, humidity=86.3985, cloud=0.0, wind=10.1462, temperature=9.06521, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:13:41.376', atlas_cloud=1, atlas_rain=1, zp_data=[2.205749999999999, 0.12325000000000053, 1.4602500000000003, 2.4749999999999996, nan, nan, 0.15649999999999942, 0.035250000000001336, 0.015499999999999403, -0.04899999999999949, 0.21224999999999916, 0.14899999999999913, 0.426499999999999, 0.3767499999999995, 0.04800000000000004, -0.038000000000000256, -0.013749999999999929, -0.03049999999999997, 0.03599999999999959, 0.009249999999999758, 0.04199999999999804, 0.0857499999999991, 0.045750000000001734, -0.03575000000000017, -0.0005000000000006111, 0.03149999999999942, 0.02674999999999983, -0.005499999999999616, 0.016000000000000014, 0.0840000000000014, 0.04200000000000159, 0.006000000000000227, -0.07875000000000121], zp_timestamp='2026-04-15T23:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:14:43.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:14:43.023 [DEBUG] [Thread-29003] [transport.py] [_log()] starting thread (client mode): 0xf1337c70
2026-04-16T01:14:43.023 [DEBUG] [Thread-29003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:14:43.040 [DEBUG] [Thread-29003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:14:43.040 [INFO] [Thread-29003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:14:43.047 [DEBUG] [Thread-29003] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:14:43.047 [DEBUG] [Thread-29003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:14:43.047 [DEBUG] [Thread-29003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:14:43.048 [DEBUG] [Thread-29003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:14:43.048 [DEBUG] [Thread-29003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:14:43.048 [DEBUG] [Thread-29003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:14:43.048 [DEBUG] [Thread-29003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:14:43.048 [DEBUG] [Thread-29003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:14:43.048 [DEBUG] [Thread-29003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:14:43.048 [DEBUG] [Thread-29003] [transport.py] [_log()] client lang: <none>
2026-04-16T01:14:43.048 [DEBUG] [Thread-29003] [transport.py] [_log()] server lang: <none>
2026-04-16T01:14:43.048 [DEBUG] [Thread-29003] [transport.py] [_log()] kex follows: False
2026-04-16T01:14:43.048 [DEBUG] [Thread-29003] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:14:43.048 [DEBUG] [Thread-29003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:14:43.048 [DEBUG] [Thread-29003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:14:43.049 [DEBUG] [Thread-29003] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:14:43.049 [DEBUG] [Thread-29003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:14:43.049 [DEBUG] [Thread-29003] [transport.py] [_log()] Compression: none
2026-04-16T01:14:43.049 [DEBUG] [Thread-29003] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:14:43.107 [DEBUG] [Thread-29003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:14:43.107 [DEBUG] [Thread-29003] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:14:43.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:14:43.108 [DEBUG] [Thread-29003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:14:43.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:14:43.164 [DEBUG] [Thread-29003] [transport.py] [_log()] userauth is OK
2026-04-16T01:14:43.164 [DEBUG] [Thread-29003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:14:43.164 [DEBUG] [Thread-29003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:14:43.165 [DEBUG] [Thread-29003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:14:43.165 [DEBUG] [Thread-29003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:14:43.190 [INFO] [Thread-29003] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:14:43.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:14:43.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:14:44.010 [DEBUG] [Thread-29003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:14:44.010 [DEBUG] [Thread-29003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:14:44.058 [DEBUG] [Thread-29003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:14:44.058 [DEBUG] [Thread-29003] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:14:44.066 [DEBUG] [Thread-29003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:14:44.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:14:44.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')
2026-04-16T01:14:44.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
2026-04-16T01:14:44.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:14:44.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:14:44.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:14:44.101 [DEBUG] [Thread-29003] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:14:53.043 [DEBUG] [Thread-29005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:14:57.545 [DEBUG] [Thread-29006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:15:12.587 [DEBUG] [Thread-29007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:15:14.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:15:14.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:15:14.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T01:15:15.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 14, 48), 1.88123, 87.9298, 0.0, 12.8102, 8.79686, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:15:15.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:14:48
2026-04-16T01:15:15.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:15:16.244 [DEBUG] [Thread-29008] [transport.py] [_log()] starting thread (client mode): 0xee9c7c10
2026-04-16T01:15:16.245 [DEBUG] [Thread-29008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:15:16.259 [DEBUG] [Thread-29008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:15:16.259 [INFO] [Thread-29008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:15:16.260 [DEBUG] [Thread-29008] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:15:16.260 [DEBUG] [Thread-29008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:15:16.260 [DEBUG] [Thread-29008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:15:16.260 [DEBUG] [Thread-29008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:15:16.260 [DEBUG] [Thread-29008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:15:16.260 [DEBUG] [Thread-29008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:15:16.261 [DEBUG] [Thread-29008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:15:16.261 [DEBUG] [Thread-29008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:15:16.261 [DEBUG] [Thread-29008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:15:16.261 [DEBUG] [Thread-29008] [transport.py] [_log()] client lang: <none>
2026-04-16T01:15:16.261 [DEBUG] [Thread-29008] [transport.py] [_log()] server lang: <none>
2026-04-16T01:15:16.261 [DEBUG] [Thread-29008] [transport.py] [_log()] kex follows: False
2026-04-16T01:15:16.261 [DEBUG] [Thread-29008] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:15:16.261 [DEBUG] [Thread-29008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:15:16.261 [DEBUG] [Thread-29008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:15:16.261 [DEBUG] [Thread-29008] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:15:16.261 [DEBUG] [Thread-29008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:15:16.261 [DEBUG] [Thread-29008] [transport.py] [_log()] Compression: none
2026-04-16T01:15:16.261 [DEBUG] [Thread-29008] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:15:16.278 [DEBUG] [Thread-29008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:15:16.278 [DEBUG] [Thread-29008] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:15:16.278 [DEBUG] [Thread-29008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:15:16.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:15:16.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:15:16.279 [DEBUG] [Thread-29008] [transport.py] [_log()] userauth is OK
2026-04-16T01:15:16.280 [DEBUG] [Thread-29008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:15:16.280 [DEBUG] [Thread-29008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:15:16.280 [DEBUG] [Thread-29008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:15:16.280 [DEBUG] [Thread-29008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:15:16.294 [INFO] [Thread-29008] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:15:16.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:15:25.547 [DEBUG] [Thread-29008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:15:25.547 [DEBUG] [Thread-29008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:15:25.547 [DEBUG] [Thread-29008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:15:25.588 [DEBUG] [Thread-29008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:15:25.588 [DEBUG] [Thread-29008] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:15:25.591 [DEBUG] [Thread-29008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:15:25.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:15:25.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:15:25.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:15:25.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:15:25.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:15:25.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:15:25.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:15:25.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:15:25.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:15:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.968535 -999.00   +9.50   6.65     87   +7.50 1 1 1 2 1     0    0 1.24 -29.12 ZNESW 6.7 6.7 113.8 11.9 9.8 -25.4 9.6 -24.1 9.3 -21.9 9.7 -24.2
2026-04-16T01:15:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:15:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:15:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.968535
2026-04-16T01:15:25.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:15:25.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:15:25.712 [DEBUG] [Thread-29008] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:15:25.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:15:25.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:15:25.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:15:25.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:14:48', tmtdew=1.88123, humidity=87.9298, cloud=0.0, wind=12.8102, temperature=8.79686, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:14:41.424', atlas_cloud=1, atlas_rain=1, zp_data=[2.205749999999999, 0.12325000000000053, 1.4602500000000003, 2.4749999999999996, nan, nan, 0.15649999999999942, 0.035250000000001336, 0.015499999999999403, -0.04899999999999949, 0.21224999999999916, 0.14899999999999913, 0.426499999999999, 0.3767499999999995, 0.04800000000000004, -0.038000000000000256, -0.013749999999999929, -0.03049999999999997, 0.03599999999999959, 0.009249999999999758, 0.04199999999999804, 0.0857499999999991, 0.045750000000001734, -0.03575000000000017, -0.0005000000000006111, 0.03149999999999942, 0.02674999999999983, -0.005499999999999616, 0.016000000000000014, 0.0840000000000014, 0.04200000000000159, 0.006000000000000227, -0.07875000000000121], zp_timestamp='2026-04-15T23:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:15:25.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:15:25.969 [DEBUG] [Thread-29011] [transport.py] [_log()] starting thread (client mode): 0xee992410
2026-04-16T01:15:25.969 [DEBUG] [Thread-29011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:15:25.984 [DEBUG] [Thread-29011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:15:25.984 [INFO] [Thread-29011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:15:25.991 [DEBUG] [Thread-29011] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:15:25.991 [DEBUG] [Thread-29011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:15:25.991 [DEBUG] [Thread-29011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:15:25.991 [DEBUG] [Thread-29011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:15:25.992 [DEBUG] [Thread-29011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:15:25.992 [DEBUG] [Thread-29011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:15:25.992 [DEBUG] [Thread-29011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:15:25.992 [DEBUG] [Thread-29011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:15:25.992 [DEBUG] [Thread-29011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:15:25.992 [DEBUG] [Thread-29011] [transport.py] [_log()] client lang: <none>
2026-04-16T01:15:25.992 [DEBUG] [Thread-29011] [transport.py] [_log()] server lang: <none>
2026-04-16T01:15:25.992 [DEBUG] [Thread-29011] [transport.py] [_log()] kex follows: False
2026-04-16T01:15:25.992 [DEBUG] [Thread-29011] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:15:25.992 [DEBUG] [Thread-29011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:15:25.992 [DEBUG] [Thread-29011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:15:25.993 [DEBUG] [Thread-29011] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:15:25.993 [DEBUG] [Thread-29011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:15:25.993 [DEBUG] [Thread-29011] [transport.py] [_log()] Compression: none
2026-04-16T01:15:25.993 [DEBUG] [Thread-29011] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:15:26.050 [DEBUG] [Thread-29011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:15:26.050 [DEBUG] [Thread-29011] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:15:26.051 [DEBUG] [Thread-29011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:15:26.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:15:26.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:15:26.107 [DEBUG] [Thread-29011] [transport.py] [_log()] userauth is OK
2026-04-16T01:15:26.107 [DEBUG] [Thread-29011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:15:26.107 [DEBUG] [Thread-29011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:15:26.107 [DEBUG] [Thread-29011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:15:26.108 [DEBUG] [Thread-29011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:15:26.133 [INFO] [Thread-29011] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:15:26.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:15:26.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:15:26.936 [DEBUG] [Thread-29011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:15:26.937 [DEBUG] [Thread-29011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:15:26.984 [DEBUG] [Thread-29011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:15:26.984 [DEBUG] [Thread-29011] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:15:26.993 [DEBUG] [Thread-29011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:15:27.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:15:27.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')
2026-04-16T01:15:27.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
2026-04-16T01:15:27.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:15:27.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:15:27.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:15:27.028 [DEBUG] [Thread-29011] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:15:27.617 [DEBUG] [Thread-29013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:15:36.295 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:15:36.295 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:15:42.655 [DEBUG] [Thread-29014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:15:53.191 [DEBUG] [Thread-29015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:15:57.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:15:57.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:15:57.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
2026-04-16T01:15:57.687 [DEBUG] [Thread-29016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:15:58.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 15, 24), 2.1436, 86.4483, 0.0, 9.66996, 9.11502, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:15:58.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:15:24
2026-04-16T01:15:58.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:15:59.131 [DEBUG] [Thread-29017] [transport.py] [_log()] starting thread (client mode): 0xee990b80
2026-04-16T01:15:59.132 [DEBUG] [Thread-29017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:15:59.151 [DEBUG] [Thread-29017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:15:59.151 [INFO] [Thread-29017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:15:59.154 [DEBUG] [Thread-29017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:15:59.155 [DEBUG] [Thread-29017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:15:59.155 [DEBUG] [Thread-29017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:15:59.155 [DEBUG] [Thread-29017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:15:59.155 [DEBUG] [Thread-29017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:15:59.155 [DEBUG] [Thread-29017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:15:59.155 [DEBUG] [Thread-29017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:15:59.155 [DEBUG] [Thread-29017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:15:59.155 [DEBUG] [Thread-29017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:15:59.155 [DEBUG] [Thread-29017] [transport.py] [_log()] client lang: <none>
2026-04-16T01:15:59.155 [DEBUG] [Thread-29017] [transport.py] [_log()] server lang: <none>
2026-04-16T01:15:59.156 [DEBUG] [Thread-29017] [transport.py] [_log()] kex follows: False
2026-04-16T01:15:59.156 [DEBUG] [Thread-29017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:15:59.156 [DEBUG] [Thread-29017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:15:59.156 [DEBUG] [Thread-29017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:15:59.156 [DEBUG] [Thread-29017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:15:59.156 [DEBUG] [Thread-29017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:15:59.156 [DEBUG] [Thread-29017] [transport.py] [_log()] Compression: none
2026-04-16T01:15:59.156 [DEBUG] [Thread-29017] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:15:59.173 [DEBUG] [Thread-29017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:15:59.174 [DEBUG] [Thread-29017] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:15:59.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:15:59.174 [DEBUG] [Thread-29017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:15:59.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:15:59.216 [DEBUG] [Thread-29017] [transport.py] [_log()] userauth is OK
2026-04-16T01:15:59.217 [DEBUG] [Thread-29017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:15:59.217 [DEBUG] [Thread-29017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:15:59.217 [DEBUG] [Thread-29017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:15:59.217 [DEBUG] [Thread-29017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:15:59.242 [INFO] [Thread-29017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:15:59.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:16:00.007 [DEBUG] [Thread-29017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:16:00.007 [DEBUG] [Thread-29017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:16:00.008 [DEBUG] [Thread-29017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:16:00.048 [DEBUG] [Thread-29017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:16:00.048 [DEBUG] [Thread-29017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:16:00.051 [DEBUG] [Thread-29017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:16:00.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:16:00.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:16:00.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:16:00.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:16:00.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:16:00.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:16:00.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:16:00.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:16:00.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:16:00.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.968882 -999.00   +9.50   6.75     87   +7.50 1 1 1 2 1     0    0 1.33 -28.05 ZNESW 7.8 6.8 109.5 10.0 9.7 -25.4 9.6 -24.1 9.3 -21.9 9.6 -24.1
2026-04-16T01:16:00.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:16:00.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:16:00.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.968882
2026-04-16T01:16:00.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:16:00.075 [DEBUG] [Thread-29017] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:16:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:16:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:16:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:16:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:16:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:15:24', tmtdew=2.1436, humidity=86.4483, cloud=0.0, wind=9.66996, temperature=9.11502, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:15:11.405', atlas_cloud=1, atlas_rain=1, zp_data=[3.2647499999999994, 0.18725000000000058, nan, 2.665499999999999, nan, nan, nan, 0.08425000000000082, 0.010999999999999233, -0.05799999999999983, 0.3377499999999998, 0.6345000000000001, 1.181, 1.0482499999999995, 0.04699999999999882, -0.027000000000001023, 0.01425000000000054, -0.04400000000000048, 0.05599999999999916, 0.04274999999999807, 0.0649999999999995, 0.11074999999999946, 0.03125, -0.04124999999999979, -0.01950000000000074, 0.03250000000000064, 0.02224999999999966, 0.0035000000000007248, -0.006999999999999673, 0.09550000000000125, 0.05700000000000216, -0.02099999999999902, -0.09725000000000072], zp_timestamp='2026-04-15T23:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:16:00.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:16:00.330 [DEBUG] [Thread-29020] [transport.py] [_log()] starting thread (client mode): 0xee9c7a60
2026-04-16T01:16:00.330 [DEBUG] [Thread-29020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:16:00.344 [DEBUG] [Thread-29020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:16:00.344 [INFO] [Thread-29020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:16:00.352 [DEBUG] [Thread-29020] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:16:00.352 [DEBUG] [Thread-29020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:16:00.352 [DEBUG] [Thread-29020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:16:00.352 [DEBUG] [Thread-29020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:16:00.352 [DEBUG] [Thread-29020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:16:00.352 [DEBUG] [Thread-29020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:16:00.352 [DEBUG] [Thread-29020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:16:00.353 [DEBUG] [Thread-29020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:16:00.353 [DEBUG] [Thread-29020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:16:00.353 [DEBUG] [Thread-29020] [transport.py] [_log()] client lang: <none>
2026-04-16T01:16:00.353 [DEBUG] [Thread-29020] [transport.py] [_log()] server lang: <none>
2026-04-16T01:16:00.353 [DEBUG] [Thread-29020] [transport.py] [_log()] kex follows: False
2026-04-16T01:16:00.353 [DEBUG] [Thread-29020] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:16:00.353 [DEBUG] [Thread-29020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:16:00.353 [DEBUG] [Thread-29020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:16:00.353 [DEBUG] [Thread-29020] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:16:00.353 [DEBUG] [Thread-29020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:16:00.353 [DEBUG] [Thread-29020] [transport.py] [_log()] Compression: none
2026-04-16T01:16:00.354 [DEBUG] [Thread-29020] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:16:00.410 [DEBUG] [Thread-29020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:16:00.410 [DEBUG] [Thread-29020] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:16:00.411 [DEBUG] [Thread-29020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:16:00.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:16:00.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:16:00.466 [DEBUG] [Thread-29020] [transport.py] [_log()] userauth is OK
2026-04-16T01:16:00.466 [DEBUG] [Thread-29020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:16:00.467 [DEBUG] [Thread-29020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:16:00.467 [DEBUG] [Thread-29020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:16:00.467 [DEBUG] [Thread-29020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:16:00.490 [INFO] [Thread-29020] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:16:00.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:16:00.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:16:01.331 [DEBUG] [Thread-29020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:16:01.332 [DEBUG] [Thread-29020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:16:01.379 [DEBUG] [Thread-29020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:16:01.379 [DEBUG] [Thread-29020] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:16:01.388 [DEBUG] [Thread-29020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:16:01.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:16:01.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')
2026-04-16T01:16:01.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
2026-04-16T01:16:01.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:16:01.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:16:01.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:16:01.423 [DEBUG] [Thread-29020] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:16:12.718 [DEBUG] [Thread-29022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:16:27.765 [DEBUG] [Thread-29023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:16:31.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:16:31.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:16:31.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
2026-04-16T01:16:32.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 15, 24), 2.1436, 86.4483, 0.0, 9.66996, 9.11502, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:16:32.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:15:24
2026-04-16T01:16:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:16:33.611 [DEBUG] [Thread-29024] [transport.py] [_log()] starting thread (client mode): 0xf13e3280
2026-04-16T01:16:33.612 [DEBUG] [Thread-29024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:16:33.632 [DEBUG] [Thread-29024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:16:33.632 [INFO] [Thread-29024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:16:33.635 [DEBUG] [Thread-29024] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:16:33.635 [DEBUG] [Thread-29024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:16:33.635 [DEBUG] [Thread-29024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:16:33.635 [DEBUG] [Thread-29024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:16:33.635 [DEBUG] [Thread-29024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:16:33.635 [DEBUG] [Thread-29024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:16:33.635 [DEBUG] [Thread-29024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:16:33.635 [DEBUG] [Thread-29024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:16:33.635 [DEBUG] [Thread-29024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:16:33.636 [DEBUG] [Thread-29024] [transport.py] [_log()] client lang: <none>
2026-04-16T01:16:33.636 [DEBUG] [Thread-29024] [transport.py] [_log()] server lang: <none>
2026-04-16T01:16:33.636 [DEBUG] [Thread-29024] [transport.py] [_log()] kex follows: False
2026-04-16T01:16:33.636 [DEBUG] [Thread-29024] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:16:33.636 [DEBUG] [Thread-29024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:16:33.636 [DEBUG] [Thread-29024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:16:33.636 [DEBUG] [Thread-29024] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:16:33.636 [DEBUG] [Thread-29024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:16:33.636 [DEBUG] [Thread-29024] [transport.py] [_log()] Compression: none
2026-04-16T01:16:33.636 [DEBUG] [Thread-29024] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:16:33.653 [DEBUG] [Thread-29024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:16:33.653 [DEBUG] [Thread-29024] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:16:33.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:16:33.654 [DEBUG] [Thread-29024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:16:33.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:16:33.655 [DEBUG] [Thread-29024] [transport.py] [_log()] userauth is OK
2026-04-16T01:16:33.655 [DEBUG] [Thread-29024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:16:33.655 [DEBUG] [Thread-29024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:16:33.655 [DEBUG] [Thread-29024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:16:33.656 [DEBUG] [Thread-29024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:16:33.675 [INFO] [Thread-29024] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:16:33.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:16:34.470 [DEBUG] [Thread-29024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:16:34.470 [DEBUG] [Thread-29024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:16:34.471 [DEBUG] [Thread-29024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:16:34.511 [DEBUG] [Thread-29024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:16:34.511 [DEBUG] [Thread-29024] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:16:34.514 [DEBUG] [Thread-29024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:16:34.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:16:34.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:16:34.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:16:34.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:16:34.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:16:34.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:16:34.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:16:34.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:16:34.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:16:34.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.969230 -999.00   +9.50   7.07     87   +7.50 1 1 1 2 1     0    0 1.29 -28.83 ZNESW 5.6 7.1 112.0 9.9 9.8 -25.5 9.6 -24.2 9.3 -21.9 9.6 -24.2
2026-04-16T01:16:34.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:16:34.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:16:34.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.969230
2026-04-16T01:16:34.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:16:34.541 [DEBUG] [Thread-29024] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:16:34.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:16:34.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:16:34.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:16:34.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:16:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:15:24', tmtdew=2.1436, humidity=86.4483, cloud=0.0, wind=9.66996, temperature=9.11502, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:15:41.472', atlas_cloud=1, atlas_rain=1, zp_data=[3.2647499999999994, 0.18725000000000058, nan, 2.665499999999999, nan, nan, nan, 0.08425000000000082, 0.010999999999999233, -0.05799999999999983, 0.3377499999999998, 0.6345000000000001, 1.181, 1.0482499999999995, 0.04699999999999882, -0.027000000000001023, 0.01425000000000054, -0.04400000000000048, 0.05599999999999916, 0.04274999999999807, 0.0649999999999995, 0.11074999999999946, 0.03125, -0.04124999999999979, -0.01950000000000074, 0.03250000000000064, 0.02224999999999966, 0.0035000000000007248, -0.006999999999999673, 0.09550000000000125, 0.05700000000000216, -0.02099999999999902, -0.09725000000000072], zp_timestamp='2026-04-15T23:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:16:34.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:16:34.799 [DEBUG] [Thread-29027] [transport.py] [_log()] starting thread (client mode): 0xf13e15a0
2026-04-16T01:16:34.800 [DEBUG] [Thread-29027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:16:34.814 [DEBUG] [Thread-29027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:16:34.814 [INFO] [Thread-29027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:16:34.821 [DEBUG] [Thread-29027] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:16:34.821 [DEBUG] [Thread-29027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:16:34.821 [DEBUG] [Thread-29027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:16:34.821 [DEBUG] [Thread-29027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:16:34.821 [DEBUG] [Thread-29027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:16:34.822 [DEBUG] [Thread-29027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:16:34.822 [DEBUG] [Thread-29027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:16:34.822 [DEBUG] [Thread-29027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:16:34.822 [DEBUG] [Thread-29027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:16:34.822 [DEBUG] [Thread-29027] [transport.py] [_log()] client lang: <none>
2026-04-16T01:16:34.822 [DEBUG] [Thread-29027] [transport.py] [_log()] server lang: <none>
2026-04-16T01:16:34.822 [DEBUG] [Thread-29027] [transport.py] [_log()] kex follows: False
2026-04-16T01:16:34.822 [DEBUG] [Thread-29027] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:16:34.822 [DEBUG] [Thread-29027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:16:34.822 [DEBUG] [Thread-29027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:16:34.822 [DEBUG] [Thread-29027] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:16:34.823 [DEBUG] [Thread-29027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:16:34.823 [DEBUG] [Thread-29027] [transport.py] [_log()] Compression: none
2026-04-16T01:16:34.823 [DEBUG] [Thread-29027] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:16:34.877 [DEBUG] [Thread-29027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:16:34.877 [DEBUG] [Thread-29027] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:16:34.877 [DEBUG] [Thread-29027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:16:34.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:16:34.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:16:34.934 [DEBUG] [Thread-29027] [transport.py] [_log()] userauth is OK
2026-04-16T01:16:34.934 [DEBUG] [Thread-29027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:16:34.934 [DEBUG] [Thread-29027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:16:34.934 [DEBUG] [Thread-29027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:16:34.934 [DEBUG] [Thread-29027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:16:34.951 [INFO] [Thread-29027] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:16:34.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:16:34.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:16:35.788 [DEBUG] [Thread-29027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:16:35.788 [DEBUG] [Thread-29027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:16:35.837 [DEBUG] [Thread-29027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:16:35.837 [DEBUG] [Thread-29027] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:16:35.847 [DEBUG] [Thread-29027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:16:35.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:16:35.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')
2026-04-16T01:16:35.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
2026-04-16T01:16:35.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:16:35.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:16:35.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:16:35.886 [DEBUG] [Thread-29027] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:16:36.495 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:16:36.496 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:16:42.798 [DEBUG] [Thread-29029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:16:53.354 [DEBUG] [Thread-29030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:16:57.843 [DEBUG] [Thread-29031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:17:05.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:17:05.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:17:05.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
2026-04-16T01:17:07.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 16, 35), 1.84868, 88.1291, 0.0, 12.7044, 8.83014, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:17:07.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:16:35
2026-04-16T01:17:07.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:17:08.045 [DEBUG] [Thread-29032] [transport.py] [_log()] starting thread (client mode): 0xf1336da0
2026-04-16T01:17:08.045 [DEBUG] [Thread-29032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:17:08.058 [DEBUG] [Thread-29032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:17:08.059 [INFO] [Thread-29032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:17:08.062 [DEBUG] [Thread-29032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:17:08.062 [DEBUG] [Thread-29032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:17:08.062 [DEBUG] [Thread-29032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:17:08.062 [DEBUG] [Thread-29032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:17:08.063 [DEBUG] [Thread-29032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:17:08.063 [DEBUG] [Thread-29032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:17:08.063 [DEBUG] [Thread-29032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:17:08.063 [DEBUG] [Thread-29032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:17:08.063 [DEBUG] [Thread-29032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:17:08.063 [DEBUG] [Thread-29032] [transport.py] [_log()] client lang: <none>
2026-04-16T01:17:08.063 [DEBUG] [Thread-29032] [transport.py] [_log()] server lang: <none>
2026-04-16T01:17:08.063 [DEBUG] [Thread-29032] [transport.py] [_log()] kex follows: False
2026-04-16T01:17:08.063 [DEBUG] [Thread-29032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:17:08.063 [DEBUG] [Thread-29032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:17:08.063 [DEBUG] [Thread-29032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:17:08.064 [DEBUG] [Thread-29032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:17:08.064 [DEBUG] [Thread-29032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:17:08.064 [DEBUG] [Thread-29032] [transport.py] [_log()] Compression: none
2026-04-16T01:17:08.064 [DEBUG] [Thread-29032] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:17:08.081 [DEBUG] [Thread-29032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:17:08.081 [DEBUG] [Thread-29032] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:17:08.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:17:08.082 [DEBUG] [Thread-29032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:17:08.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:17:08.083 [DEBUG] [Thread-29032] [transport.py] [_log()] userauth is OK
2026-04-16T01:17:08.083 [DEBUG] [Thread-29032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:17:08.084 [DEBUG] [Thread-29032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:17:08.084 [DEBUG] [Thread-29032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:17:08.084 [DEBUG] [Thread-29032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:17:08.108 [INFO] [Thread-29032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:17:08.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:17:08.894 [DEBUG] [Thread-29032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:17:08.895 [DEBUG] [Thread-29032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:17:08.895 [DEBUG] [Thread-29032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:17:08.935 [DEBUG] [Thread-29032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:17:08.935 [DEBUG] [Thread-29032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:17:08.937 [DEBUG] [Thread-29032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:17:08.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:17:08.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:17:08.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:17:08.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:17:08.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:17:08.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:17:08.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:17:08.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:17:08.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:17:08.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.969577 -999.00   +9.50   5.67     87   +7.50 1 1 1 2 1     0    0 1.27 -28.90 ZNESW 4.4 5.7 104.6 8.2 9.7 -25.4 9.6 -24.3 9.3 -22.1 9.6 -24.2
2026-04-16T01:17:08.960 [DEBUG] [Thread-29032] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:17:08.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:17:08.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:17:08.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.969577
2026-04-16T01:17:08.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:17:08.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:17:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:17:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:17:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:17:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:16:35', tmtdew=1.84868, humidity=88.1291, cloud=0.0, wind=12.7044, temperature=8.83014, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:16:11.453', atlas_cloud=1, atlas_rain=1, zp_data=[3.2647499999999994, 0.18725000000000058, nan, 2.665499999999999, nan, nan, nan, 0.08425000000000082, 0.010999999999999233, -0.05799999999999983, 0.3377499999999998, 0.6345000000000001, 1.181, 1.0482499999999995, 0.04699999999999882, -0.027000000000001023, 0.01425000000000054, -0.04400000000000048, 0.05599999999999916, 0.04274999999999807, 0.0649999999999995, 0.11074999999999946, 0.03125, -0.04124999999999979, -0.01950000000000074, 0.03250000000000064, 0.02224999999999966, 0.0035000000000007248, -0.006999999999999673, 0.09550000000000125, 0.05700000000000216, -0.02099999999999902, -0.09725000000000072], zp_timestamp='2026-04-15T23:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:17:09.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:17:09.232 [DEBUG] [Thread-29035] [transport.py] [_log()] starting thread (client mode): 0xee954160
2026-04-16T01:17:09.232 [DEBUG] [Thread-29035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:17:09.248 [DEBUG] [Thread-29035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:17:09.248 [INFO] [Thread-29035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:17:09.255 [DEBUG] [Thread-29035] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:17:09.255 [DEBUG] [Thread-29035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:17:09.255 [DEBUG] [Thread-29035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:17:09.255 [DEBUG] [Thread-29035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:17:09.256 [DEBUG] [Thread-29035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:17:09.256 [DEBUG] [Thread-29035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:17:09.256 [DEBUG] [Thread-29035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:17:09.256 [DEBUG] [Thread-29035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:17:09.256 [DEBUG] [Thread-29035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:17:09.256 [DEBUG] [Thread-29035] [transport.py] [_log()] client lang: <none>
2026-04-16T01:17:09.256 [DEBUG] [Thread-29035] [transport.py] [_log()] server lang: <none>
2026-04-16T01:17:09.256 [DEBUG] [Thread-29035] [transport.py] [_log()] kex follows: False
2026-04-16T01:17:09.256 [DEBUG] [Thread-29035] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:17:09.256 [DEBUG] [Thread-29035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:17:09.256 [DEBUG] [Thread-29035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:17:09.256 [DEBUG] [Thread-29035] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:17:09.256 [DEBUG] [Thread-29035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:17:09.256 [DEBUG] [Thread-29035] [transport.py] [_log()] Compression: none
2026-04-16T01:17:09.256 [DEBUG] [Thread-29035] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:17:09.313 [DEBUG] [Thread-29035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:17:09.313 [DEBUG] [Thread-29035] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:17:09.314 [DEBUG] [Thread-29035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:17:09.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:17:09.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:17:09.370 [DEBUG] [Thread-29035] [transport.py] [_log()] userauth is OK
2026-04-16T01:17:09.370 [DEBUG] [Thread-29035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:17:09.370 [DEBUG] [Thread-29035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:17:09.371 [DEBUG] [Thread-29035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:17:09.371 [DEBUG] [Thread-29035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:17:09.396 [INFO] [Thread-29035] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:17:09.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:17:09.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:17:10.195 [DEBUG] [Thread-29035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:17:10.196 [DEBUG] [Thread-29035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:17:10.243 [DEBUG] [Thread-29035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:17:10.243 [DEBUG] [Thread-29035] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:17:10.252 [DEBUG] [Thread-29035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:17:10.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:17:10.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')
2026-04-16T01:17:10.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
2026-04-16T01:17:10.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:17:10.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:17:10.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:17:10.287 [DEBUG] [Thread-29035] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:17:12.872 [DEBUG] [Thread-29037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:17:27.912 [DEBUG] [Thread-29038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:17:36.698 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:17:36.699 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:17:40.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:17:40.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:17:40.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
2026-04-16T01:17:41.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 17, 10), 2.13166, 86.5148, 0.0, 9.81108, 9.04871, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:17:41.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:17:10
2026-04-16T01:17:41.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:17:42.428 [DEBUG] [Thread-29039] [transport.py] [_log()] starting thread (client mode): 0xee993c70
2026-04-16T01:17:42.429 [DEBUG] [Thread-29039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:17:42.444 [DEBUG] [Thread-29039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:17:42.445 [INFO] [Thread-29039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:17:42.448 [DEBUG] [Thread-29039] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:17:42.448 [DEBUG] [Thread-29039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:17:42.448 [DEBUG] [Thread-29039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:17:42.448 [DEBUG] [Thread-29039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:17:42.448 [DEBUG] [Thread-29039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:17:42.448 [DEBUG] [Thread-29039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:17:42.448 [DEBUG] [Thread-29039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:17:42.448 [DEBUG] [Thread-29039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:17:42.449 [DEBUG] [Thread-29039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:17:42.449 [DEBUG] [Thread-29039] [transport.py] [_log()] client lang: <none>
2026-04-16T01:17:42.449 [DEBUG] [Thread-29039] [transport.py] [_log()] server lang: <none>
2026-04-16T01:17:42.449 [DEBUG] [Thread-29039] [transport.py] [_log()] kex follows: False
2026-04-16T01:17:42.449 [DEBUG] [Thread-29039] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:17:42.449 [DEBUG] [Thread-29039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:17:42.449 [DEBUG] [Thread-29039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:17:42.449 [DEBUG] [Thread-29039] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:17:42.449 [DEBUG] [Thread-29039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:17:42.449 [DEBUG] [Thread-29039] [transport.py] [_log()] Compression: none
2026-04-16T01:17:42.449 [DEBUG] [Thread-29039] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:17:42.463 [DEBUG] [Thread-29039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:17:42.464 [DEBUG] [Thread-29039] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:17:42.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:17:42.464 [DEBUG] [Thread-29039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:17:42.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:17:42.465 [DEBUG] [Thread-29039] [transport.py] [_log()] userauth is OK
2026-04-16T01:17:42.466 [DEBUG] [Thread-29039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:17:42.466 [DEBUG] [Thread-29039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:17:42.466 [DEBUG] [Thread-29039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:17:42.466 [DEBUG] [Thread-29039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:17:42.484 [INFO] [Thread-29039] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:17:42.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:17:42.945 [DEBUG] [Thread-29041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:17:43.264 [DEBUG] [Thread-29039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:17:43.264 [DEBUG] [Thread-29039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:17:43.264 [DEBUG] [Thread-29039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:17:43.305 [DEBUG] [Thread-29039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:17:43.305 [DEBUG] [Thread-29039] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:17:43.308 [DEBUG] [Thread-29039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:17:43.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:17:43.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:17:43.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:17:43.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:17:43.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:17:43.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:17:43.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:17:43.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:17:43.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:17:43.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.969924 -999.00   +9.50   7.99     87   +7.50 1 1 1 2 1     0    0 1.15 -33.03 ZNESW 6.3 8.0 72.0 9.6 9.7 -25.5 9.6 -24.2 9.3 -22.0 9.6 -24.1
2026-04-16T01:17:43.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:17:43.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:17:43.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.969924
2026-04-16T01:17:43.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:17:43.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:17:43.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:17:43.333 [DEBUG] [Thread-29039] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:17:43.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:17:43.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:17:43.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:17:10', tmtdew=2.13166, humidity=86.5148, cloud=0.0, wind=9.81108, temperature=9.04871, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:16:41.434', atlas_cloud=1, atlas_rain=1, zp_data=[3.2647499999999994, 0.18725000000000058, nan, 2.665499999999999, nan, nan, nan, 0.08425000000000082, 0.010999999999999233, -0.05799999999999983, 0.3377499999999998, 0.6345000000000001, 1.181, 1.0482499999999995, 0.04699999999999882, -0.027000000000001023, 0.01425000000000054, -0.04400000000000048, 0.05599999999999916, 0.04274999999999807, 0.0649999999999995, 0.11074999999999946, 0.03125, -0.04124999999999979, -0.01950000000000074, 0.03250000000000064, 0.02224999999999966, 0.0035000000000007248, -0.006999999999999673, 0.09550000000000125, 0.05700000000000216, -0.02099999999999902, -0.09725000000000072], zp_timestamp='2026-04-15T23:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:17:43.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:17:43.590 [DEBUG] [Thread-29043] [transport.py] [_log()] starting thread (client mode): 0xee9540a0
2026-04-16T01:17:43.590 [DEBUG] [Thread-29043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:17:43.604 [DEBUG] [Thread-29043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:17:43.604 [INFO] [Thread-29043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:17:43.611 [DEBUG] [Thread-29043] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:17:43.611 [DEBUG] [Thread-29043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:17:43.611 [DEBUG] [Thread-29043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:17:43.611 [DEBUG] [Thread-29043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:17:43.612 [DEBUG] [Thread-29043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:17:43.612 [DEBUG] [Thread-29043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:17:43.612 [DEBUG] [Thread-29043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:17:43.612 [DEBUG] [Thread-29043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:17:43.612 [DEBUG] [Thread-29043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:17:43.612 [DEBUG] [Thread-29043] [transport.py] [_log()] client lang: <none>
2026-04-16T01:17:43.612 [DEBUG] [Thread-29043] [transport.py] [_log()] server lang: <none>
2026-04-16T01:17:43.612 [DEBUG] [Thread-29043] [transport.py] [_log()] kex follows: False
2026-04-16T01:17:43.612 [DEBUG] [Thread-29043] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:17:43.612 [DEBUG] [Thread-29043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:17:43.612 [DEBUG] [Thread-29043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:17:43.612 [DEBUG] [Thread-29043] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:17:43.613 [DEBUG] [Thread-29043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:17:43.613 [DEBUG] [Thread-29043] [transport.py] [_log()] Compression: none
2026-04-16T01:17:43.613 [DEBUG] [Thread-29043] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:17:43.669 [DEBUG] [Thread-29043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:17:43.669 [DEBUG] [Thread-29043] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:17:43.670 [DEBUG] [Thread-29043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:17:43.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:17:43.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:17:43.726 [DEBUG] [Thread-29043] [transport.py] [_log()] userauth is OK
2026-04-16T01:17:43.727 [DEBUG] [Thread-29043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:17:43.727 [DEBUG] [Thread-29043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:17:43.727 [DEBUG] [Thread-29043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:17:43.727 [DEBUG] [Thread-29043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:17:43.752 [INFO] [Thread-29043] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:17:43.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:17:43.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:17:44.577 [DEBUG] [Thread-29043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:17:44.577 [DEBUG] [Thread-29043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:17:44.625 [DEBUG] [Thread-29043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:17:44.625 [DEBUG] [Thread-29043] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:17:44.634 [DEBUG] [Thread-29043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:17:44.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:17:44.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')
2026-04-16T01:17:44.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
2026-04-16T01:17:44.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:17:44.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:17:44.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:17:44.669 [DEBUG] [Thread-29043] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:17:53.522 [DEBUG] [Thread-29045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:17:57.975 [DEBUG] [Thread-29046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:18:13.020 [DEBUG] [Thread-29047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:18:14.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:18:14.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:18:14.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T01:18:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 17, 46), 1.83725, 88.1955, 0.0, 12.4222, 8.79699, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:18:15.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:17:46
2026-04-16T01:18:16.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:18:16.788 [DEBUG] [Thread-29048] [transport.py] [_log()] starting thread (client mode): 0xee9c3b20
2026-04-16T01:18:16.788 [DEBUG] [Thread-29048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:18:16.808 [DEBUG] [Thread-29048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:18:16.808 [INFO] [Thread-29048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:18:16.811 [DEBUG] [Thread-29048] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:18:16.811 [DEBUG] [Thread-29048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:18:16.811 [DEBUG] [Thread-29048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:18:16.811 [DEBUG] [Thread-29048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:18:16.811 [DEBUG] [Thread-29048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:18:16.811 [DEBUG] [Thread-29048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:18:16.811 [DEBUG] [Thread-29048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:18:16.811 [DEBUG] [Thread-29048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:18:16.811 [DEBUG] [Thread-29048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:18:16.811 [DEBUG] [Thread-29048] [transport.py] [_log()] client lang: <none>
2026-04-16T01:18:16.811 [DEBUG] [Thread-29048] [transport.py] [_log()] server lang: <none>
2026-04-16T01:18:16.811 [DEBUG] [Thread-29048] [transport.py] [_log()] kex follows: False
2026-04-16T01:18:16.811 [DEBUG] [Thread-29048] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:18:16.812 [DEBUG] [Thread-29048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:18:16.812 [DEBUG] [Thread-29048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:18:16.812 [DEBUG] [Thread-29048] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:18:16.812 [DEBUG] [Thread-29048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:18:16.812 [DEBUG] [Thread-29048] [transport.py] [_log()] Compression: none
2026-04-16T01:18:16.812 [DEBUG] [Thread-29048] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:18:16.828 [DEBUG] [Thread-29048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:18:16.828 [DEBUG] [Thread-29048] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:18:16.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:18:16.828 [DEBUG] [Thread-29048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:18:16.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:18:16.829 [DEBUG] [Thread-29048] [transport.py] [_log()] userauth is OK
2026-04-16T01:18:16.829 [DEBUG] [Thread-29048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:18:16.830 [DEBUG] [Thread-29048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:18:16.830 [DEBUG] [Thread-29048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:18:16.830 [DEBUG] [Thread-29048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:18:16.845 [INFO] [Thread-29048] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:18:16.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:18:17.927 [DEBUG] [Thread-29048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:18:17.927 [DEBUG] [Thread-29048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:18:17.928 [DEBUG] [Thread-29048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:18:17.968 [DEBUG] [Thread-29048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:18:17.968 [DEBUG] [Thread-29048] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:18:17.971 [DEBUG] [Thread-29048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:18:17.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:18:17.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:18:17.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:18:17.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:18:17.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:18:17.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:18:17.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:18:17.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:18:17.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:18:17.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.970618 -999.00   +9.50   6.78     87   +7.60 1 1 1 2 1     0    0 1.17 -31.29 ZNESW 8.0 6.8 125.0 10.3 9.7 -25.4 9.6 -24.1 9.3 -22.0 9.6 -24.2
2026-04-16T01:18:17.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:18:17.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:18:17.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.970618
2026-04-16T01:18:17.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:18:17.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:18:17.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:18:17.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:18:17.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:18:17.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:17:46', tmtdew=1.83725, humidity=88.1955, cloud=0.0, wind=12.4222, temperature=8.79699, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:17:41.395', atlas_cloud=1, atlas_rain=1, zp_data=[3.2647499999999994, 0.18725000000000058, nan, 2.665499999999999, nan, nan, nan, 0.08425000000000082, 0.010999999999999233, -0.05799999999999983, 0.3377499999999998, 0.6345000000000001, 1.181, 1.0482499999999995, 0.04699999999999882, -0.027000000000001023, 0.01425000000000054, -0.04400000000000048, 0.05599999999999916, 0.04274999999999807, 0.0649999999999995, 0.11074999999999946, 0.03125, -0.04124999999999979, -0.01950000000000074, 0.03250000000000064, 0.02224999999999966, 0.0035000000000007248, -0.006999999999999673, 0.09550000000000125, 0.05700000000000216, -0.02099999999999902, -0.09725000000000072], zp_timestamp='2026-04-15T23:14:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:18:17.995 [DEBUG] [Thread-29048] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:18:18.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:18:18.217 [DEBUG] [Thread-29051] [transport.py] [_log()] starting thread (client mode): 0xf13e0a30
2026-04-16T01:18:18.218 [DEBUG] [Thread-29051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:18:18.236 [DEBUG] [Thread-29051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:18:18.236 [INFO] [Thread-29051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:18:18.243 [DEBUG] [Thread-29051] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:18:18.243 [DEBUG] [Thread-29051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:18:18.243 [DEBUG] [Thread-29051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:18:18.244 [DEBUG] [Thread-29051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:18:18.244 [DEBUG] [Thread-29051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:18:18.244 [DEBUG] [Thread-29051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:18:18.244 [DEBUG] [Thread-29051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:18:18.244 [DEBUG] [Thread-29051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:18:18.244 [DEBUG] [Thread-29051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:18:18.244 [DEBUG] [Thread-29051] [transport.py] [_log()] client lang: <none>
2026-04-16T01:18:18.244 [DEBUG] [Thread-29051] [transport.py] [_log()] server lang: <none>
2026-04-16T01:18:18.244 [DEBUG] [Thread-29051] [transport.py] [_log()] kex follows: False
2026-04-16T01:18:18.244 [DEBUG] [Thread-29051] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:18:18.244 [DEBUG] [Thread-29051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:18:18.244 [DEBUG] [Thread-29051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:18:18.245 [DEBUG] [Thread-29051] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:18:18.245 [DEBUG] [Thread-29051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:18:18.245 [DEBUG] [Thread-29051] [transport.py] [_log()] Compression: none
2026-04-16T01:18:18.245 [DEBUG] [Thread-29051] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:18:18.301 [DEBUG] [Thread-29051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:18:18.302 [DEBUG] [Thread-29051] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:18:18.302 [DEBUG] [Thread-29051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:18:18.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:18:18.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:18:18.358 [DEBUG] [Thread-29051] [transport.py] [_log()] userauth is OK
2026-04-16T01:18:18.358 [DEBUG] [Thread-29051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:18:18.358 [DEBUG] [Thread-29051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:18:18.358 [DEBUG] [Thread-29051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:18:18.358 [DEBUG] [Thread-29051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:18:18.378 [INFO] [Thread-29051] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:18:18.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:18:18.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:18:19.184 [DEBUG] [Thread-29051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:18:19.185 [DEBUG] [Thread-29051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:18:19.232 [DEBUG] [Thread-29051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:18:19.232 [DEBUG] [Thread-29051] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:18:19.241 [DEBUG] [Thread-29051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:18:19.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:18:19.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')
2026-04-16T01:18:19.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
2026-04-16T01:18:19.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:18:19.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:18:19.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:18:19.276 [DEBUG] [Thread-29051] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:18:28.052 [DEBUG] [Thread-29053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:18:36.909 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:18:36.911 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:18:43.096 [DEBUG] [Thread-29054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:18:49.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:18:49.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:18:49.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
2026-04-16T01:18:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 18, 21), 2.06611, 86.6143, 0.0, 9.70524, 9.11509, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:18:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:18:21
2026-04-16T01:18:50.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:18:51.398 [DEBUG] [Thread-29055] [transport.py] [_log()] starting thread (client mode): 0xee933790
2026-04-16T01:18:51.398 [DEBUG] [Thread-29055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:18:51.419 [DEBUG] [Thread-29055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:18:51.419 [INFO] [Thread-29055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:18:51.422 [DEBUG] [Thread-29055] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:18:51.422 [DEBUG] [Thread-29055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:18:51.422 [DEBUG] [Thread-29055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:18:51.422 [DEBUG] [Thread-29055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:18:51.422 [DEBUG] [Thread-29055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:18:51.422 [DEBUG] [Thread-29055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:18:51.422 [DEBUG] [Thread-29055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:18:51.423 [DEBUG] [Thread-29055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:18:51.423 [DEBUG] [Thread-29055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:18:51.423 [DEBUG] [Thread-29055] [transport.py] [_log()] client lang: <none>
2026-04-16T01:18:51.423 [DEBUG] [Thread-29055] [transport.py] [_log()] server lang: <none>
2026-04-16T01:18:51.423 [DEBUG] [Thread-29055] [transport.py] [_log()] kex follows: False
2026-04-16T01:18:51.423 [DEBUG] [Thread-29055] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:18:51.423 [DEBUG] [Thread-29055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:18:51.423 [DEBUG] [Thread-29055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:18:51.423 [DEBUG] [Thread-29055] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:18:51.423 [DEBUG] [Thread-29055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:18:51.424 [DEBUG] [Thread-29055] [transport.py] [_log()] Compression: none
2026-04-16T01:18:51.424 [DEBUG] [Thread-29055] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:18:51.441 [DEBUG] [Thread-29055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:18:51.441 [DEBUG] [Thread-29055] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:18:51.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:18:51.442 [DEBUG] [Thread-29055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:18:51.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:18:51.443 [DEBUG] [Thread-29055] [transport.py] [_log()] userauth is OK
2026-04-16T01:18:51.443 [DEBUG] [Thread-29055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:18:51.443 [DEBUG] [Thread-29055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:18:51.443 [DEBUG] [Thread-29055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:18:51.443 [DEBUG] [Thread-29055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:18:51.468 [INFO] [Thread-29055] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:18:51.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:18:52.256 [DEBUG] [Thread-29055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:18:52.256 [DEBUG] [Thread-29055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:18:52.257 [DEBUG] [Thread-29055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:18:52.298 [DEBUG] [Thread-29055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:18:52.298 [DEBUG] [Thread-29055] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:18:52.301 [DEBUG] [Thread-29055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:18:52.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:18:52.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:18:52.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:18:52.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:18:52.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:18:52.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:18:52.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:18:52.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:18:52.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:18:52.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.970965 -999.00   +9.50   7.77     87   +7.50 1 1 1 2 1     0    0 1.06 -33.25 ZNESW 6.5 7.8 126.4 9.2 9.7 -25.4 9.6 -24.1 9.3 -22.0 9.6 -23.9
2026-04-16T01:18:52.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:18:52.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:18:52.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.970965
2026-04-16T01:18:52.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:18:52.325 [DEBUG] [Thread-29055] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:18:52.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:18:52.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:18:52.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:18:52.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:18:52.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:18:21', tmtdew=2.06611, humidity=86.6143, cloud=0.0, wind=9.70524, temperature=9.11509, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:18:11.376', atlas_cloud=1, atlas_rain=1, zp_data=[3.2647499999999994, 0.18725000000000058, nan, 2.665499999999999, nan, nan, nan, 0.08425000000000082, 0.010999999999999233, -0.05799999999999983, 0.3377499999999998, 0.6345000000000001, 1.181, 1.0482499999999995, 0.04699999999999882, -0.027000000000001023, 0.01425000000000054, -0.04400000000000048, 0.05599999999999916, 0.04274999999999807, 0.0649999999999995, 0.11074999999999946, 0.03125, -0.04124999999999979, -0.01950000000000074, 0.03250000000000064, 0.02224999999999966, 0.0035000000000007248, -0.006999999999999673, 0.09550000000000125, 0.05700000000000216, -0.02099999999999902, -0.09725000000000072], zp_timestamp='2026-04-15T23:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:18:52.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:18:52.583 [DEBUG] [Thread-29058] [transport.py] [_log()] starting thread (client mode): 0xee9331f0
2026-04-16T01:18:52.584 [DEBUG] [Thread-29058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:18:52.598 [DEBUG] [Thread-29058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:18:52.598 [INFO] [Thread-29058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:18:52.605 [DEBUG] [Thread-29058] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:18:52.605 [DEBUG] [Thread-29058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:18:52.606 [DEBUG] [Thread-29058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:18:52.606 [DEBUG] [Thread-29058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:18:52.606 [DEBUG] [Thread-29058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:18:52.606 [DEBUG] [Thread-29058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:18:52.606 [DEBUG] [Thread-29058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:18:52.606 [DEBUG] [Thread-29058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:18:52.606 [DEBUG] [Thread-29058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:18:52.606 [DEBUG] [Thread-29058] [transport.py] [_log()] client lang: <none>
2026-04-16T01:18:52.606 [DEBUG] [Thread-29058] [transport.py] [_log()] server lang: <none>
2026-04-16T01:18:52.606 [DEBUG] [Thread-29058] [transport.py] [_log()] kex follows: False
2026-04-16T01:18:52.606 [DEBUG] [Thread-29058] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:18:52.606 [DEBUG] [Thread-29058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:18:52.607 [DEBUG] [Thread-29058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:18:52.607 [DEBUG] [Thread-29058] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:18:52.607 [DEBUG] [Thread-29058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:18:52.607 [DEBUG] [Thread-29058] [transport.py] [_log()] Compression: none
2026-04-16T01:18:52.607 [DEBUG] [Thread-29058] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:18:52.661 [DEBUG] [Thread-29058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:18:52.662 [DEBUG] [Thread-29058] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:18:52.662 [DEBUG] [Thread-29058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:18:52.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:18:52.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:18:52.717 [DEBUG] [Thread-29058] [transport.py] [_log()] userauth is OK
2026-04-16T01:18:52.718 [DEBUG] [Thread-29058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:18:52.718 [DEBUG] [Thread-29058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:18:52.718 [DEBUG] [Thread-29058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:18:52.718 [DEBUG] [Thread-29058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:18:52.743 [INFO] [Thread-29058] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:18:52.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:18:52.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:18:53.529 [DEBUG] [Thread-29058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:18:53.529 [DEBUG] [Thread-29058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:18:53.580 [DEBUG] [Thread-29058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:18:53.581 [DEBUG] [Thread-29058] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:18:53.592 [DEBUG] [Thread-29058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:18:53.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:18:53.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')
2026-04-16T01:18:53.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
2026-04-16T01:18:53.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:18:53.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:18:53.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:18:53.623 [DEBUG] [Thread-29058] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:18:53.667 [DEBUG] [Thread-29060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:18:58.126 [DEBUG] [Thread-29061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:19:13.170 [DEBUG] [Thread-29062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:19:23.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:19:23.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:19:23.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
2026-04-16T01:19:24.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 18, 57), 2.11336, 86.631, 0.0, 9.84636, 9.1151, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:19:24.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:18:57
2026-04-16T01:19:25.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:19:25.687 [DEBUG] [Thread-29063] [transport.py] [_log()] starting thread (client mode): 0xee9c7760
2026-04-16T01:19:25.687 [DEBUG] [Thread-29063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:19:25.707 [DEBUG] [Thread-29063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:19:25.707 [INFO] [Thread-29063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:19:25.710 [DEBUG] [Thread-29063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:19:25.710 [DEBUG] [Thread-29063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:19:25.710 [DEBUG] [Thread-29063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:19:25.710 [DEBUG] [Thread-29063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:19:25.710 [DEBUG] [Thread-29063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:19:25.710 [DEBUG] [Thread-29063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:19:25.711 [DEBUG] [Thread-29063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:19:25.711 [DEBUG] [Thread-29063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:19:25.711 [DEBUG] [Thread-29063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:19:25.711 [DEBUG] [Thread-29063] [transport.py] [_log()] client lang: <none>
2026-04-16T01:19:25.711 [DEBUG] [Thread-29063] [transport.py] [_log()] server lang: <none>
2026-04-16T01:19:25.711 [DEBUG] [Thread-29063] [transport.py] [_log()] kex follows: False
2026-04-16T01:19:25.711 [DEBUG] [Thread-29063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:19:25.711 [DEBUG] [Thread-29063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:19:25.711 [DEBUG] [Thread-29063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:19:25.711 [DEBUG] [Thread-29063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:19:25.711 [DEBUG] [Thread-29063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:19:25.711 [DEBUG] [Thread-29063] [transport.py] [_log()] Compression: none
2026-04-16T01:19:25.711 [DEBUG] [Thread-29063] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:19:25.727 [DEBUG] [Thread-29063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:19:25.727 [DEBUG] [Thread-29063] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:19:25.727 [DEBUG] [Thread-29063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:19:25.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:19:25.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:19:25.768 [DEBUG] [Thread-29063] [transport.py] [_log()] userauth is OK
2026-04-16T01:19:25.768 [DEBUG] [Thread-29063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:19:25.768 [DEBUG] [Thread-29063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:19:25.768 [DEBUG] [Thread-29063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:19:25.768 [DEBUG] [Thread-29063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:19:25.799 [INFO] [Thread-29063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:19:25.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:19:26.586 [DEBUG] [Thread-29063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:19:26.586 [DEBUG] [Thread-29063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:19:26.587 [DEBUG] [Thread-29063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:19:26.627 [DEBUG] [Thread-29063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:19:26.627 [DEBUG] [Thread-29063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:19:26.630 [DEBUG] [Thread-29063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:19:26.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:19:26.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:19:26.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:19:26.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:19:26.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:19:26.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:19:26.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:19:26.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:19:26.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:19:26.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.971313 -999.00   +9.50   5.71     87   +7.60 1 1 1 2 1     0    0 1.25 -26.96 ZNESW 4.4 5.7 102.3 9.4 9.8 -25.3 9.6 -24.2 9.3 -21.9 9.6 -24.0
2026-04-16T01:19:26.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:19:26.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:19:26.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.971313
2026-04-16T01:19:26.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:19:26.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:19:26.655 [DEBUG] [Thread-29063] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:19:26.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:19:26.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:19:26.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:19:26.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:18:57', tmtdew=2.11336, humidity=86.631, cloud=0.0, wind=9.84636, temperature=9.1151, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:18:41.443', atlas_cloud=1, atlas_rain=1, zp_data=[3.2647499999999994, 0.18725000000000058, nan, 2.665499999999999, nan, nan, nan, 0.08425000000000082, 0.010999999999999233, -0.05799999999999983, 0.3377499999999998, 0.6345000000000001, 1.181, 1.0482499999999995, 0.04699999999999882, -0.027000000000001023, 0.01425000000000054, -0.04400000000000048, 0.05599999999999916, 0.04274999999999807, 0.0649999999999995, 0.11074999999999946, 0.03125, -0.04124999999999979, -0.01950000000000074, 0.03250000000000064, 0.02224999999999966, 0.0035000000000007248, -0.006999999999999673, 0.09550000000000125, 0.05700000000000216, -0.02099999999999902, -0.09725000000000072], zp_timestamp='2026-04-15T23:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:19:26.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:19:26.908 [DEBUG] [Thread-29066] [transport.py] [_log()] starting thread (client mode): 0xee9c7c10
2026-04-16T01:19:26.909 [DEBUG] [Thread-29066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:19:26.923 [DEBUG] [Thread-29066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:19:26.923 [INFO] [Thread-29066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:19:26.930 [DEBUG] [Thread-29066] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:19:26.930 [DEBUG] [Thread-29066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:19:26.930 [DEBUG] [Thread-29066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:19:26.931 [DEBUG] [Thread-29066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:19:26.931 [DEBUG] [Thread-29066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:19:26.931 [DEBUG] [Thread-29066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:19:26.931 [DEBUG] [Thread-29066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:19:26.931 [DEBUG] [Thread-29066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:19:26.931 [DEBUG] [Thread-29066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:19:26.931 [DEBUG] [Thread-29066] [transport.py] [_log()] client lang: <none>
2026-04-16T01:19:26.931 [DEBUG] [Thread-29066] [transport.py] [_log()] server lang: <none>
2026-04-16T01:19:26.931 [DEBUG] [Thread-29066] [transport.py] [_log()] kex follows: False
2026-04-16T01:19:26.931 [DEBUG] [Thread-29066] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:19:26.931 [DEBUG] [Thread-29066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:19:26.931 [DEBUG] [Thread-29066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:19:26.932 [DEBUG] [Thread-29066] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:19:26.932 [DEBUG] [Thread-29066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:19:26.932 [DEBUG] [Thread-29066] [transport.py] [_log()] Compression: none
2026-04-16T01:19:26.932 [DEBUG] [Thread-29066] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:19:26.989 [DEBUG] [Thread-29066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:19:26.989 [DEBUG] [Thread-29066] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:19:26.989 [DEBUG] [Thread-29066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:19:26.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:19:26.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:19:27.046 [DEBUG] [Thread-29066] [transport.py] [_log()] userauth is OK
2026-04-16T01:19:27.046 [DEBUG] [Thread-29066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:19:27.046 [DEBUG] [Thread-29066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:19:27.047 [DEBUG] [Thread-29066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:19:27.047 [DEBUG] [Thread-29066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:19:27.073 [INFO] [Thread-29066] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:19:27.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:19:27.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:19:27.883 [DEBUG] [Thread-29066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:19:27.883 [DEBUG] [Thread-29066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:19:27.931 [DEBUG] [Thread-29066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:19:27.932 [DEBUG] [Thread-29066] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:19:27.943 [DEBUG] [Thread-29066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:19:27.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:19:27.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')
2026-04-16T01:19:27.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
2026-04-16T01:19:27.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:19:27.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:19:27.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:19:27.981 [DEBUG] [Thread-29066] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:19:28.202 [DEBUG] [Thread-29068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:19:37.114 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:19:37.115 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:19:43.249 [DEBUG] [Thread-29069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:19:53.832 [DEBUG] [Thread-29070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:19:57.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:19:57.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:19:57.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T01:19:58.282 [DEBUG] [Thread-29071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:19:59.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 19, 32), 2.1104, 86.6475, 0.0, 9.5112, 9.09851, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:19:59.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:19:32
2026-04-16T01:19:59.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:20:00.232 [DEBUG] [Thread-29072] [transport.py] [_log()] starting thread (client mode): 0xee9c2380
2026-04-16T01:20:00.232 [DEBUG] [Thread-29072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:20:00.251 [DEBUG] [Thread-29072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:20:00.251 [INFO] [Thread-29072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:20:00.254 [DEBUG] [Thread-29072] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:20:00.254 [DEBUG] [Thread-29072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:20:00.254 [DEBUG] [Thread-29072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:20:00.254 [DEBUG] [Thread-29072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:20:00.254 [DEBUG] [Thread-29072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:20:00.254 [DEBUG] [Thread-29072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:20:00.254 [DEBUG] [Thread-29072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:20:00.254 [DEBUG] [Thread-29072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:20:00.254 [DEBUG] [Thread-29072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:20:00.255 [DEBUG] [Thread-29072] [transport.py] [_log()] client lang: <none>
2026-04-16T01:20:00.255 [DEBUG] [Thread-29072] [transport.py] [_log()] server lang: <none>
2026-04-16T01:20:00.255 [DEBUG] [Thread-29072] [transport.py] [_log()] kex follows: False
2026-04-16T01:20:00.255 [DEBUG] [Thread-29072] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:20:00.255 [DEBUG] [Thread-29072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:20:00.255 [DEBUG] [Thread-29072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:20:00.255 [DEBUG] [Thread-29072] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:20:00.255 [DEBUG] [Thread-29072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:20:00.255 [DEBUG] [Thread-29072] [transport.py] [_log()] Compression: none
2026-04-16T01:20:00.255 [DEBUG] [Thread-29072] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:20:00.269 [DEBUG] [Thread-29072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:20:00.270 [DEBUG] [Thread-29072] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:20:00.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:20:00.270 [DEBUG] [Thread-29072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:20:00.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:20:00.312 [DEBUG] [Thread-29072] [transport.py] [_log()] userauth is OK
2026-04-16T01:20:00.313 [DEBUG] [Thread-29072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:20:00.313 [DEBUG] [Thread-29072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:20:00.313 [DEBUG] [Thread-29072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:20:00.313 [DEBUG] [Thread-29072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:20:00.346 [INFO] [Thread-29072] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:20:00.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:20:01.184 [DEBUG] [Thread-29072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:20:01.185 [DEBUG] [Thread-29072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:20:01.185 [DEBUG] [Thread-29072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:20:01.225 [DEBUG] [Thread-29072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:20:01.225 [DEBUG] [Thread-29072] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:20:01.228 [DEBUG] [Thread-29072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:20:01.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:20:01.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:20:01.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:20:01.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:20:01.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:20:01.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:20:01.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:20:01.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:20:01.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:20:01.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.971660 -999.00   +9.50   5.82     87   +7.50 1 1 1 2 1     0    0 1.33 -24.36 ZNESW 6.2 5.8 123.1 8.0 9.7 -25.4 9.6 -24.2 9.3 -21.9 9.6 -24.1
2026-04-16T01:20:01.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:20:01.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:20:01.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.971660
2026-04-16T01:20:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:20:01.253 [DEBUG] [Thread-29072] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:20:01.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:20:01.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:20:01.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:20:01.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:20:01.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:19:32', tmtdew=2.1104, humidity=86.6475, cloud=0.0, wind=9.5112, temperature=9.09851, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:19:11.424', atlas_cloud=1, atlas_rain=1, zp_data=[3.2647499999999994, 0.18725000000000058, nan, 2.665499999999999, nan, nan, nan, 0.08425000000000082, 0.010999999999999233, -0.05799999999999983, 0.3377499999999998, 0.6345000000000001, 1.181, 1.0482499999999995, 0.04699999999999882, -0.027000000000001023, 0.01425000000000054, -0.04400000000000048, 0.05599999999999916, 0.04274999999999807, 0.0649999999999995, 0.11074999999999946, 0.03125, -0.04124999999999979, -0.01950000000000074, 0.03250000000000064, 0.02224999999999966, 0.0035000000000007248, -0.006999999999999673, 0.09550000000000125, 0.05700000000000216, -0.02099999999999902, -0.09725000000000072], zp_timestamp='2026-04-15T23:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:20:01.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:20:01.512 [DEBUG] [Thread-29075] [transport.py] [_log()] starting thread (client mode): 0xee9c3b20
2026-04-16T01:20:01.512 [DEBUG] [Thread-29075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:20:01.526 [DEBUG] [Thread-29075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:20:01.526 [INFO] [Thread-29075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:20:01.534 [DEBUG] [Thread-29075] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:20:01.534 [DEBUG] [Thread-29075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:20:01.534 [DEBUG] [Thread-29075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:20:01.534 [DEBUG] [Thread-29075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:20:01.534 [DEBUG] [Thread-29075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:20:01.534 [DEBUG] [Thread-29075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:20:01.534 [DEBUG] [Thread-29075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:20:01.534 [DEBUG] [Thread-29075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:20:01.534 [DEBUG] [Thread-29075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:20:01.534 [DEBUG] [Thread-29075] [transport.py] [_log()] client lang: <none>
2026-04-16T01:20:01.535 [DEBUG] [Thread-29075] [transport.py] [_log()] server lang: <none>
2026-04-16T01:20:01.535 [DEBUG] [Thread-29075] [transport.py] [_log()] kex follows: False
2026-04-16T01:20:01.535 [DEBUG] [Thread-29075] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:20:01.535 [DEBUG] [Thread-29075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:20:01.535 [DEBUG] [Thread-29075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:20:01.535 [DEBUG] [Thread-29075] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:20:01.535 [DEBUG] [Thread-29075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:20:01.535 [DEBUG] [Thread-29075] [transport.py] [_log()] Compression: none
2026-04-16T01:20:01.535 [DEBUG] [Thread-29075] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:20:01.597 [DEBUG] [Thread-29075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:20:01.597 [DEBUG] [Thread-29075] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:20:01.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:20:01.598 [DEBUG] [Thread-29075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:20:01.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:20:01.653 [DEBUG] [Thread-29075] [transport.py] [_log()] userauth is OK
2026-04-16T01:20:01.654 [DEBUG] [Thread-29075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:20:01.654 [DEBUG] [Thread-29075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:20:01.654 [DEBUG] [Thread-29075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:20:01.654 [DEBUG] [Thread-29075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:20:01.680 [INFO] [Thread-29075] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:20:01.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:20:01.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:20:02.531 [DEBUG] [Thread-29075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:20:02.531 [DEBUG] [Thread-29075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:20:02.578 [DEBUG] [Thread-29075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:20:02.579 [DEBUG] [Thread-29075] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:20:02.587 [DEBUG] [Thread-29075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:20:02.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:20:02.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')
2026-04-16T01:20:02.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
2026-04-16T01:20:02.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:20:02.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:20:02.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:20:02.618 [DEBUG] [Thread-29075] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:20:13.313 [DEBUG] [Thread-29077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:20:28.357 [DEBUG] [Thread-29078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:20:32.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:20:32.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:20:32.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
2026-04-16T01:20:33.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 20, 8), 2.11291, 86.631, 0.0, 9.70524, 9.08193, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:20:33.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:20:08
2026-04-16T01:20:34.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:20:34.743 [DEBUG] [Thread-29079] [transport.py] [_log()] starting thread (client mode): 0xf13646d0
2026-04-16T01:20:34.743 [DEBUG] [Thread-29079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:20:34.762 [DEBUG] [Thread-29079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:20:34.762 [INFO] [Thread-29079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:20:34.764 [DEBUG] [Thread-29079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:20:34.764 [DEBUG] [Thread-29079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:20:34.764 [DEBUG] [Thread-29079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:20:34.764 [DEBUG] [Thread-29079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:20:34.764 [DEBUG] [Thread-29079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:20:34.764 [DEBUG] [Thread-29079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:20:34.764 [DEBUG] [Thread-29079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:20:34.764 [DEBUG] [Thread-29079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:20:34.765 [DEBUG] [Thread-29079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:20:34.765 [DEBUG] [Thread-29079] [transport.py] [_log()] client lang: <none>
2026-04-16T01:20:34.765 [DEBUG] [Thread-29079] [transport.py] [_log()] server lang: <none>
2026-04-16T01:20:34.765 [DEBUG] [Thread-29079] [transport.py] [_log()] kex follows: False
2026-04-16T01:20:34.765 [DEBUG] [Thread-29079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:20:34.765 [DEBUG] [Thread-29079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:20:34.765 [DEBUG] [Thread-29079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:20:34.765 [DEBUG] [Thread-29079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:20:34.765 [DEBUG] [Thread-29079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:20:34.765 [DEBUG] [Thread-29079] [transport.py] [_log()] Compression: none
2026-04-16T01:20:34.765 [DEBUG] [Thread-29079] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:20:34.773 [DEBUG] [Thread-29079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:20:34.773 [DEBUG] [Thread-29079] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:20:34.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:20:34.774 [DEBUG] [Thread-29079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:20:34.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:20:34.775 [DEBUG] [Thread-29079] [transport.py] [_log()] userauth is OK
2026-04-16T01:20:34.775 [DEBUG] [Thread-29079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:20:34.775 [DEBUG] [Thread-29079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:20:34.775 [DEBUG] [Thread-29079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:20:34.775 [DEBUG] [Thread-29079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:20:34.787 [INFO] [Thread-29079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:20:34.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:20:35.813 [DEBUG] [Thread-29079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:20:35.814 [DEBUG] [Thread-29079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:20:35.814 [DEBUG] [Thread-29079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:20:35.854 [DEBUG] [Thread-29079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:20:35.854 [DEBUG] [Thread-29079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:20:35.857 [DEBUG] [Thread-29079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:20:35.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:20:35.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:20:35.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:20:35.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:20:35.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:20:35.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:20:35.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:20:35.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:20:35.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:20:35.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.972007 -999.00   +9.50   5.28     87   +7.60 1 1 1 2 1     0    0 1.48 -20.34 ZNESW 5.2 5.3 109.8 7.6 9.7 -25.2 9.5 -24.0 9.3 -21.9 9.6 -24.2
2026-04-16T01:20:35.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:20:35.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:20:35.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.972007
2026-04-16T01:20:35.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:20:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:20:35.884 [DEBUG] [Thread-29079] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:20:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:20:35.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:20:35.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:20:35.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:20:08', tmtdew=2.11291, humidity=86.631, cloud=0.0, wind=9.70524, temperature=9.08193, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:19:41.405', atlas_cloud=1, atlas_rain=1, zp_data=[3.2647499999999994, 0.18725000000000058, nan, 2.665499999999999, nan, nan, nan, 0.08425000000000082, 0.010999999999999233, -0.05799999999999983, 0.3377499999999998, 0.6345000000000001, 1.181, 1.0482499999999995, 0.04699999999999882, -0.027000000000001023, 0.01425000000000054, -0.04400000000000048, 0.05599999999999916, 0.04274999999999807, 0.0649999999999995, 0.11074999999999946, 0.03125, -0.04124999999999979, -0.01950000000000074, 0.03250000000000064, 0.02224999999999966, 0.0035000000000007248, -0.006999999999999673, 0.09550000000000125, 0.05700000000000216, -0.02099999999999902, -0.09725000000000072], zp_timestamp='2026-04-15T23:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:20:36.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:20:36.141 [DEBUG] [Thread-29082] [transport.py] [_log()] starting thread (client mode): 0xf1366ad0
2026-04-16T01:20:36.141 [DEBUG] [Thread-29082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:20:36.155 [DEBUG] [Thread-29082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:20:36.155 [INFO] [Thread-29082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:20:36.163 [DEBUG] [Thread-29082] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:20:36.163 [DEBUG] [Thread-29082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:20:36.164 [DEBUG] [Thread-29082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:20:36.164 [DEBUG] [Thread-29082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:20:36.164 [DEBUG] [Thread-29082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:20:36.164 [DEBUG] [Thread-29082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:20:36.164 [DEBUG] [Thread-29082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:20:36.164 [DEBUG] [Thread-29082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:20:36.164 [DEBUG] [Thread-29082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:20:36.164 [DEBUG] [Thread-29082] [transport.py] [_log()] client lang: <none>
2026-04-16T01:20:36.164 [DEBUG] [Thread-29082] [transport.py] [_log()] server lang: <none>
2026-04-16T01:20:36.164 [DEBUG] [Thread-29082] [transport.py] [_log()] kex follows: False
2026-04-16T01:20:36.164 [DEBUG] [Thread-29082] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:20:36.164 [DEBUG] [Thread-29082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:20:36.165 [DEBUG] [Thread-29082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:20:36.165 [DEBUG] [Thread-29082] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:20:36.165 [DEBUG] [Thread-29082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:20:36.165 [DEBUG] [Thread-29082] [transport.py] [_log()] Compression: none
2026-04-16T01:20:36.165 [DEBUG] [Thread-29082] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:20:36.220 [DEBUG] [Thread-29082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:20:36.220 [DEBUG] [Thread-29082] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:20:36.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:20:36.221 [DEBUG] [Thread-29082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:20:36.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:20:36.277 [DEBUG] [Thread-29082] [transport.py] [_log()] userauth is OK
2026-04-16T01:20:36.278 [DEBUG] [Thread-29082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:20:36.278 [DEBUG] [Thread-29082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:20:36.278 [DEBUG] [Thread-29082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:20:36.278 [DEBUG] [Thread-29082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:20:36.295 [INFO] [Thread-29082] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:20:36.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:20:36.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:20:37.067 [DEBUG] [Thread-29082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:20:37.067 [DEBUG] [Thread-29082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:20:37.115 [DEBUG] [Thread-29082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:20:37.115 [DEBUG] [Thread-29082] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:20:37.124 [DEBUG] [Thread-29082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:20:37.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:20: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')
2026-04-16T01:20: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
2026-04-16T01:20:37.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:20:37.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:20:37.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:20:37.158 [DEBUG] [Thread-29082] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:20:37.320 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:20:37.321 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:20:43.388 [DEBUG] [Thread-29084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:20:54.000 [DEBUG] [Thread-29085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:20:58.433 [DEBUG] [Thread-29086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:21:07.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:21:07.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:21:07.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
2026-04-16T01:21:08.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 20, 43), 1.80938, 88.3615, 0.0, 11.5049, 8.76387, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:21:08.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:20:43
2026-04-16T01:21:08.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:21:09.248 [DEBUG] [Thread-29087] [transport.py] [_log()] starting thread (client mode): 0xee9540d0
2026-04-16T01:21:09.248 [DEBUG] [Thread-29087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:21:09.268 [DEBUG] [Thread-29087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:21:09.268 [INFO] [Thread-29087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:21:09.271 [DEBUG] [Thread-29087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:21:09.271 [DEBUG] [Thread-29087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:21:09.271 [DEBUG] [Thread-29087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:21:09.272 [DEBUG] [Thread-29087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:21:09.272 [DEBUG] [Thread-29087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:21:09.272 [DEBUG] [Thread-29087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:21:09.272 [DEBUG] [Thread-29087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:21:09.272 [DEBUG] [Thread-29087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:21:09.272 [DEBUG] [Thread-29087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:21:09.272 [DEBUG] [Thread-29087] [transport.py] [_log()] client lang: <none>
2026-04-16T01:21:09.272 [DEBUG] [Thread-29087] [transport.py] [_log()] server lang: <none>
2026-04-16T01:21:09.272 [DEBUG] [Thread-29087] [transport.py] [_log()] kex follows: False
2026-04-16T01:21:09.272 [DEBUG] [Thread-29087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:21:09.272 [DEBUG] [Thread-29087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:21:09.272 [DEBUG] [Thread-29087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:21:09.272 [DEBUG] [Thread-29087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:21:09.273 [DEBUG] [Thread-29087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:21:09.273 [DEBUG] [Thread-29087] [transport.py] [_log()] Compression: none
2026-04-16T01:21:09.273 [DEBUG] [Thread-29087] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:21:09.290 [DEBUG] [Thread-29087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:21:09.290 [DEBUG] [Thread-29087] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:21:09.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:21:09.291 [DEBUG] [Thread-29087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:21:09.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:21:09.292 [DEBUG] [Thread-29087] [transport.py] [_log()] userauth is OK
2026-04-16T01:21:09.292 [DEBUG] [Thread-29087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:21:09.292 [DEBUG] [Thread-29087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:21:09.292 [DEBUG] [Thread-29087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:21:09.292 [DEBUG] [Thread-29087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:21:09.309 [INFO] [Thread-29087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:21:09.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:21:10.126 [DEBUG] [Thread-29087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:21:10.126 [DEBUG] [Thread-29087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:21:10.127 [DEBUG] [Thread-29087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:21:10.167 [DEBUG] [Thread-29087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:21:10.167 [DEBUG] [Thread-29087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:21:10.170 [DEBUG] [Thread-29087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:21:10.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:21:10.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:21:10.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:21:10.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:21:10.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:21:10.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:21:10.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:21:10.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:21:10.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:21:10.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.972354 -999.00   +9.50   6.16     87   +7.60 1 1 1 2 1     0    0 1.47 -19.55 ZNESW 5.8 6.2 107.1 8.9 9.7 -25.4 9.6 -24.2 9.3 -21.8 9.6 -23.9
2026-04-16T01:21:10.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:21:10.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:21:10.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.972354
2026-04-16T01:21:10.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:21:10.191 [DEBUG] [Thread-29087] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:21:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:21:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:21:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:21:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:21:10.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:20:43', tmtdew=1.80938, humidity=88.3615, cloud=0.0, wind=11.5049, temperature=8.76387, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:20:11.386', atlas_cloud=1, atlas_rain=1, zp_data=[3.2647499999999994, 0.18725000000000058, nan, 2.665499999999999, nan, nan, nan, 0.08425000000000082, 0.010999999999999233, -0.05799999999999983, 0.3377499999999998, 0.6345000000000001, 1.181, 1.0482499999999995, 0.04699999999999882, -0.027000000000001023, 0.01425000000000054, -0.04400000000000048, 0.05599999999999916, 0.04274999999999807, 0.0649999999999995, 0.11074999999999946, 0.03125, -0.04124999999999979, -0.01950000000000074, 0.03250000000000064, 0.02224999999999966, 0.0035000000000007248, -0.006999999999999673, 0.09550000000000125, 0.05700000000000216, -0.02099999999999902, -0.09725000000000072], zp_timestamp='2026-04-15T23:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:21:10.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:21:10.446 [DEBUG] [Thread-29090] [transport.py] [_log()] starting thread (client mode): 0xee9eb040
2026-04-16T01:21:10.446 [DEBUG] [Thread-29090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:21:10.461 [DEBUG] [Thread-29090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:21:10.461 [INFO] [Thread-29090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:21:10.469 [DEBUG] [Thread-29090] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:21:10.469 [DEBUG] [Thread-29090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:21:10.469 [DEBUG] [Thread-29090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:21:10.469 [DEBUG] [Thread-29090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:21:10.469 [DEBUG] [Thread-29090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:21:10.469 [DEBUG] [Thread-29090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:21:10.469 [DEBUG] [Thread-29090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:21:10.469 [DEBUG] [Thread-29090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:21:10.470 [DEBUG] [Thread-29090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:21:10.470 [DEBUG] [Thread-29090] [transport.py] [_log()] client lang: <none>
2026-04-16T01:21:10.470 [DEBUG] [Thread-29090] [transport.py] [_log()] server lang: <none>
2026-04-16T01:21:10.470 [DEBUG] [Thread-29090] [transport.py] [_log()] kex follows: False
2026-04-16T01:21:10.470 [DEBUG] [Thread-29090] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:21:10.470 [DEBUG] [Thread-29090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:21:10.470 [DEBUG] [Thread-29090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:21:10.470 [DEBUG] [Thread-29090] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:21:10.470 [DEBUG] [Thread-29090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:21:10.470 [DEBUG] [Thread-29090] [transport.py] [_log()] Compression: none
2026-04-16T01:21:10.470 [DEBUG] [Thread-29090] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:21:10.527 [DEBUG] [Thread-29090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:21:10.527 [DEBUG] [Thread-29090] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:21:10.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:21:10.528 [DEBUG] [Thread-29090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:21:10.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:21:10.585 [DEBUG] [Thread-29090] [transport.py] [_log()] userauth is OK
2026-04-16T01:21:10.585 [DEBUG] [Thread-29090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:21:10.586 [DEBUG] [Thread-29090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:21:10.586 [DEBUG] [Thread-29090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:21:10.586 [DEBUG] [Thread-29090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:21:10.611 [INFO] [Thread-29090] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:21:10.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:21:10.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:21:11.410 [DEBUG] [Thread-29090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:21:11.410 [DEBUG] [Thread-29090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:21:11.458 [DEBUG] [Thread-29090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:21:11.458 [DEBUG] [Thread-29090] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:21:11.467 [DEBUG] [Thread-29090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:21:11.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:21:11.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')
2026-04-16T01:21:11.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
2026-04-16T01:21:11.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:21:11.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:21:11.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:21:11.502 [DEBUG] [Thread-29090] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:21:13.463 [DEBUG] [Thread-29092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:21:28.503 [DEBUG] [Thread-29093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:21:37.523 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:21:37.523 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:21:41.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:21:41.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:21:41.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
2026-04-16T01:21:42.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 21, 19), 2.05748, 87.1638, 0.0, 9.66996, 9.0317, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:21:42.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:21:19
2026-04-16T01:21:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:21:43.534 [DEBUG] [Thread-29094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:21:43.746 [DEBUG] [Thread-29095] [transport.py] [_log()] starting thread (client mode): 0xee9932b0
2026-04-16T01:21:43.746 [DEBUG] [Thread-29095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:21:43.767 [DEBUG] [Thread-29095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:21:43.767 [INFO] [Thread-29095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:21:43.770 [DEBUG] [Thread-29095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:21:43.770 [DEBUG] [Thread-29095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:21:43.770 [DEBUG] [Thread-29095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:21:43.770 [DEBUG] [Thread-29095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:21:43.770 [DEBUG] [Thread-29095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:21:43.770 [DEBUG] [Thread-29095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:21:43.770 [DEBUG] [Thread-29095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:21:43.770 [DEBUG] [Thread-29095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:21:43.771 [DEBUG] [Thread-29095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:21:43.771 [DEBUG] [Thread-29095] [transport.py] [_log()] client lang: <none>
2026-04-16T01:21:43.771 [DEBUG] [Thread-29095] [transport.py] [_log()] server lang: <none>
2026-04-16T01:21:43.771 [DEBUG] [Thread-29095] [transport.py] [_log()] kex follows: False
2026-04-16T01:21:43.771 [DEBUG] [Thread-29095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:21:43.771 [DEBUG] [Thread-29095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:21:43.771 [DEBUG] [Thread-29095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:21:43.771 [DEBUG] [Thread-29095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:21:43.771 [DEBUG] [Thread-29095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:21:43.771 [DEBUG] [Thread-29095] [transport.py] [_log()] Compression: none
2026-04-16T01:21:43.771 [DEBUG] [Thread-29095] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:21:43.786 [DEBUG] [Thread-29095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:21:43.786 [DEBUG] [Thread-29095] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:21:43.787 [DEBUG] [Thread-29095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:21:43.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:21:43.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:21:43.788 [DEBUG] [Thread-29095] [transport.py] [_log()] userauth is OK
2026-04-16T01:21:43.788 [DEBUG] [Thread-29095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:21:43.788 [DEBUG] [Thread-29095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:21:43.788 [DEBUG] [Thread-29095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:21:43.788 [DEBUG] [Thread-29095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:21:43.807 [INFO] [Thread-29095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:21:43.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:21:44.546 [DEBUG] [Thread-29095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:21:44.546 [DEBUG] [Thread-29095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:21:44.547 [DEBUG] [Thread-29095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:21:44.587 [DEBUG] [Thread-29095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:21:44.587 [DEBUG] [Thread-29095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:21:44.590 [DEBUG] [Thread-29095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:21:44.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:21:44.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:21:44.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:21:44.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:21:44.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:21:44.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:21:44.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:21:44.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:21:44.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:21:44.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.973049 -999.00   +9.40   6.75     87   +7.50 1 1 1 2 1     0    0 1.47 -18.29 ZNESW 4.1 6.8 108.2 9.4 9.7 -25.3 9.6 -24.2 9.3 -22.0 9.6 -24.1
2026-04-16T01:21:44.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:21:44.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:21:44.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.973049
2026-04-16T01:21:44.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:21:44.616 [DEBUG] [Thread-29095] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:21:44.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:21:44.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:21:44.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:21:44.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:21:44.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:21:19', tmtdew=2.05748, humidity=87.1638, cloud=0.0, wind=9.66996, temperature=9.0317, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:21:11.434', atlas_cloud=1, atlas_rain=1, zp_data=[3.2647499999999994, 0.18725000000000058, nan, 2.665499999999999, nan, nan, nan, 0.08425000000000082, 0.010999999999999233, -0.05799999999999983, 0.3377499999999998, 0.6345000000000001, 1.181, 1.0482499999999995, 0.04699999999999882, -0.027000000000001023, 0.01425000000000054, -0.04400000000000048, 0.05599999999999916, 0.04274999999999807, 0.0649999999999995, 0.11074999999999946, 0.03125, -0.04124999999999979, -0.01950000000000074, 0.03250000000000064, 0.02224999999999966, 0.0035000000000007248, -0.006999999999999673, 0.09550000000000125, 0.05700000000000216, -0.02099999999999902, -0.09725000000000072], zp_timestamp='2026-04-15T23:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:21:44.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:21:44.871 [DEBUG] [Thread-29098] [transport.py] [_log()] starting thread (client mode): 0xee9c2350
2026-04-16T01:21:44.871 [DEBUG] [Thread-29098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:21:44.885 [DEBUG] [Thread-29098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:21:44.885 [INFO] [Thread-29098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:21:44.892 [DEBUG] [Thread-29098] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:21:44.892 [DEBUG] [Thread-29098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:21:44.892 [DEBUG] [Thread-29098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:21:44.893 [DEBUG] [Thread-29098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:21:44.893 [DEBUG] [Thread-29098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:21:44.893 [DEBUG] [Thread-29098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:21:44.893 [DEBUG] [Thread-29098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:21:44.893 [DEBUG] [Thread-29098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:21:44.893 [DEBUG] [Thread-29098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:21:44.893 [DEBUG] [Thread-29098] [transport.py] [_log()] client lang: <none>
2026-04-16T01:21:44.893 [DEBUG] [Thread-29098] [transport.py] [_log()] server lang: <none>
2026-04-16T01:21:44.893 [DEBUG] [Thread-29098] [transport.py] [_log()] kex follows: False
2026-04-16T01:21:44.893 [DEBUG] [Thread-29098] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:21:44.893 [DEBUG] [Thread-29098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:21:44.893 [DEBUG] [Thread-29098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:21:44.894 [DEBUG] [Thread-29098] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:21:44.894 [DEBUG] [Thread-29098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:21:44.894 [DEBUG] [Thread-29098] [transport.py] [_log()] Compression: none
2026-04-16T01:21:44.894 [DEBUG] [Thread-29098] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:21:44.948 [DEBUG] [Thread-29098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:21:44.949 [DEBUG] [Thread-29098] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:21:44.949 [DEBUG] [Thread-29098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:21:44.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:21:44.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:21:45.005 [DEBUG] [Thread-29098] [transport.py] [_log()] userauth is OK
2026-04-16T01:21:45.005 [DEBUG] [Thread-29098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:21:45.006 [DEBUG] [Thread-29098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:21:45.006 [DEBUG] [Thread-29098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:21:45.006 [DEBUG] [Thread-29098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:21:45.032 [INFO] [Thread-29098] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:21:45.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:21:45.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:21:45.827 [DEBUG] [Thread-29098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:21:45.827 [DEBUG] [Thread-29098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:21:45.876 [DEBUG] [Thread-29098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:21:45.876 [DEBUG] [Thread-29098] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:21:45.884 [DEBUG] [Thread-29098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:21:45.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:21:45.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')
2026-04-16T01:21: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
2026-04-16T01:21:45.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:21:45.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:21:45.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:21:45.915 [DEBUG] [Thread-29098] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:21:54.144 [DEBUG] [Thread-29100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:21:58.562 [DEBUG] [Thread-29101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:22:13.607 [DEBUG] [Thread-29102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:22:15.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:22:15.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:22:15.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
2026-04-16T01:22:17.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 21, 54), 1.78849, 88.4935, 0.0, 12.4222, 8.82977, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:22:17.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:21:54
2026-04-16T01:22:17.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:22:18.081 [DEBUG] [Thread-29103] [transport.py] [_log()] starting thread (client mode): 0xf13e1690
2026-04-16T01:22:18.082 [DEBUG] [Thread-29103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:22:18.101 [DEBUG] [Thread-29103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:22:18.101 [INFO] [Thread-29103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:22:18.104 [DEBUG] [Thread-29103] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:22:18.104 [DEBUG] [Thread-29103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:22:18.104 [DEBUG] [Thread-29103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:22:18.104 [DEBUG] [Thread-29103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:22:18.104 [DEBUG] [Thread-29103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:22:18.105 [DEBUG] [Thread-29103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:22:18.105 [DEBUG] [Thread-29103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:22:18.105 [DEBUG] [Thread-29103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:22:18.105 [DEBUG] [Thread-29103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:22:18.105 [DEBUG] [Thread-29103] [transport.py] [_log()] client lang: <none>
2026-04-16T01:22:18.105 [DEBUG] [Thread-29103] [transport.py] [_log()] server lang: <none>
2026-04-16T01:22:18.105 [DEBUG] [Thread-29103] [transport.py] [_log()] kex follows: False
2026-04-16T01:22:18.105 [DEBUG] [Thread-29103] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:22:18.105 [DEBUG] [Thread-29103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:22:18.105 [DEBUG] [Thread-29103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:22:18.105 [DEBUG] [Thread-29103] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:22:18.106 [DEBUG] [Thread-29103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:22:18.106 [DEBUG] [Thread-29103] [transport.py] [_log()] Compression: none
2026-04-16T01:22:18.106 [DEBUG] [Thread-29103] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:22:18.123 [DEBUG] [Thread-29103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:22:18.123 [DEBUG] [Thread-29103] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:22:18.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:22:18.124 [DEBUG] [Thread-29103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:22:18.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:22:18.125 [DEBUG] [Thread-29103] [transport.py] [_log()] userauth is OK
2026-04-16T01:22:18.125 [DEBUG] [Thread-29103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:22:18.125 [DEBUG] [Thread-29103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:22:18.125 [DEBUG] [Thread-29103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:22:18.126 [DEBUG] [Thread-29103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:22:18.148 [INFO] [Thread-29103] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:22:18.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:22:18.934 [DEBUG] [Thread-29103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:22:18.934 [DEBUG] [Thread-29103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:22:18.935 [DEBUG] [Thread-29103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:22:18.975 [DEBUG] [Thread-29103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:22:18.975 [DEBUG] [Thread-29103] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:22:18.978 [DEBUG] [Thread-29103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:22:18.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:22:18.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:22:18.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:22:18.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:22:18.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:22:19.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:22:19.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:22:19.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:22:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:22:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.973396 -999.00   +9.40   3.77     87   +7.50 1 1 1 2 1     0    0 1.57 -15.18 ZNESW 4.6 3.8 94.9 7.6 9.7 -25.3 9.6 -24.2 9.3 -22.0 9.6 -24.0
2026-04-16T01:22:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:22:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:22:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.973396
2026-04-16T01:22:19.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:22:19.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:22:19.003 [DEBUG] [Thread-29103] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:22:19.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:22:19.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:22:19.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:22:19.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:21:54', tmtdew=1.78849, humidity=88.4935, cloud=0.0, wind=12.4222, temperature=8.82977, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:21:41.414', atlas_cloud=1, atlas_rain=1, zp_data=[3.5097499999999995, 0.9982500000000005, nan, nan, nan, nan, nan, 0.3562499999999993, 0.2284999999999986, 0.08000000000000007, 0.6607500000000002, 0.9669999999999996, 1.6064999999999996, 2.0142499999999997, 0.11999999999999922, -0.0030000000000001137, 0.036249999999999005, -0.0030000000000001137, 0.11149999999999949, 0.1322499999999991, 0.17599999999999838, 0.19674999999999798, 0.07125000000000092, -0.028249999999999886, -0.0065000000000008384, 0.08199999999999896, 0.03625000000000078, 0.025000000000000355, 0.05400000000000027, 0.12300000000000111, 0.10900000000000176, 0.030000000000001137, -0.03175000000000061], zp_timestamp='2026-04-15T23:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:22:19.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:22:19.257 [DEBUG] [Thread-29106] [transport.py] [_log()] starting thread (client mode): 0xee933070
2026-04-16T01:22:19.257 [DEBUG] [Thread-29106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:22:19.273 [DEBUG] [Thread-29106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:22:19.273 [INFO] [Thread-29106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:22:19.280 [DEBUG] [Thread-29106] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:22:19.280 [DEBUG] [Thread-29106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:22:19.280 [DEBUG] [Thread-29106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:22:19.280 [DEBUG] [Thread-29106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:22:19.280 [DEBUG] [Thread-29106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:22:19.281 [DEBUG] [Thread-29106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:22:19.281 [DEBUG] [Thread-29106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:22:19.281 [DEBUG] [Thread-29106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:22:19.281 [DEBUG] [Thread-29106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:22:19.281 [DEBUG] [Thread-29106] [transport.py] [_log()] client lang: <none>
2026-04-16T01:22:19.281 [DEBUG] [Thread-29106] [transport.py] [_log()] server lang: <none>
2026-04-16T01:22:19.281 [DEBUG] [Thread-29106] [transport.py] [_log()] kex follows: False
2026-04-16T01:22:19.281 [DEBUG] [Thread-29106] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:22:19.281 [DEBUG] [Thread-29106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:22:19.281 [DEBUG] [Thread-29106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:22:19.281 [DEBUG] [Thread-29106] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:22:19.281 [DEBUG] [Thread-29106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:22:19.282 [DEBUG] [Thread-29106] [transport.py] [_log()] Compression: none
2026-04-16T01:22:19.282 [DEBUG] [Thread-29106] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:22:19.336 [DEBUG] [Thread-29106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:22:19.336 [DEBUG] [Thread-29106] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:22:19.337 [DEBUG] [Thread-29106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:22:19.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:22:19.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:22:19.393 [DEBUG] [Thread-29106] [transport.py] [_log()] userauth is OK
2026-04-16T01:22:19.393 [DEBUG] [Thread-29106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:22:19.394 [DEBUG] [Thread-29106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:22:19.394 [DEBUG] [Thread-29106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:22:19.394 [DEBUG] [Thread-29106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:22:19.419 [INFO] [Thread-29106] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:22:19.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:22:19.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:22:20.284 [DEBUG] [Thread-29106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:22:20.285 [DEBUG] [Thread-29106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:22:20.332 [DEBUG] [Thread-29106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:22:20.332 [DEBUG] [Thread-29106] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:22:20.341 [DEBUG] [Thread-29106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:22:20.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:22:20.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')
2026-04-16T01:22:20.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
2026-04-16T01:22:20.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:22:20.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:22:20.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:22:20.375 [DEBUG] [Thread-29106] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:22:28.637 [DEBUG] [Thread-29108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:22:37.726 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:22:37.728 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:22:43.687 [DEBUG] [Thread-29109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:22:50.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:22:50.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:22:50.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
2026-04-16T01:22:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 22, 30), 1.99658, 87.2299, 0.0, 9.56412, 9.03152, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:22:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:22:30
2026-04-16T01:22:52.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:22:52.498 [DEBUG] [Thread-29110] [transport.py] [_log()] starting thread (client mode): 0xee907ee0
2026-04-16T01:22:52.498 [DEBUG] [Thread-29110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:22:52.513 [DEBUG] [Thread-29110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:22:52.513 [INFO] [Thread-29110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:22:52.515 [DEBUG] [Thread-29110] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:22:52.515 [DEBUG] [Thread-29110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:22:52.515 [DEBUG] [Thread-29110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:22:52.515 [DEBUG] [Thread-29110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:22:52.515 [DEBUG] [Thread-29110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:22:52.516 [DEBUG] [Thread-29110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:22:52.516 [DEBUG] [Thread-29110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:22:52.516 [DEBUG] [Thread-29110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:22:52.516 [DEBUG] [Thread-29110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:22:52.516 [DEBUG] [Thread-29110] [transport.py] [_log()] client lang: <none>
2026-04-16T01:22:52.516 [DEBUG] [Thread-29110] [transport.py] [_log()] server lang: <none>
2026-04-16T01:22:52.516 [DEBUG] [Thread-29110] [transport.py] [_log()] kex follows: False
2026-04-16T01:22:52.516 [DEBUG] [Thread-29110] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:22:52.516 [DEBUG] [Thread-29110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:22:52.516 [DEBUG] [Thread-29110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:22:52.516 [DEBUG] [Thread-29110] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:22:52.516 [DEBUG] [Thread-29110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:22:52.517 [DEBUG] [Thread-29110] [transport.py] [_log()] Compression: none
2026-04-16T01:22:52.517 [DEBUG] [Thread-29110] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:22:52.529 [DEBUG] [Thread-29110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:22:52.529 [DEBUG] [Thread-29110] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:22:52.529 [DEBUG] [Thread-29110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:22:52.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:22:52.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:22:52.530 [DEBUG] [Thread-29110] [transport.py] [_log()] userauth is OK
2026-04-16T01:22:52.531 [DEBUG] [Thread-29110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:22:52.531 [DEBUG] [Thread-29110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:22:52.531 [DEBUG] [Thread-29110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:22:52.531 [DEBUG] [Thread-29110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:22:52.547 [INFO] [Thread-29110] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:22:52.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:22:53.343 [DEBUG] [Thread-29110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:22:53.343 [DEBUG] [Thread-29110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:22:53.344 [DEBUG] [Thread-29110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:22:53.384 [DEBUG] [Thread-29110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:22:53.384 [DEBUG] [Thread-29110] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:22:53.387 [DEBUG] [Thread-29110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:22:53.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:22:53.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:22:53.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:22:53.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:22:53.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:22:53.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:22:53.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:22:53.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:22:53.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:22:53.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.973743 -999.00   +9.40   4.98     87   +7.50 1 1 1 2 1     0    0 1.56 -15.84 ZNESW 6.0 5.0 78.6 7.3 9.7 -25.4 9.6 -24.2 9.3 -21.9 9.5 -23.9
2026-04-16T01:22:53.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:22:53.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:22:53.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.973743
2026-04-16T01:22:53.411 [DEBUG] [Thread-29110] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:22:53.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:22:53.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:22:53.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:22:53.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:22:53.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:22:53.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:22:30', tmtdew=1.99658, humidity=87.2299, cloud=0.0, wind=9.56412, temperature=9.03152, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:22:11.395', atlas_cloud=1, atlas_rain=1, zp_data=[3.5097499999999995, 0.9982500000000005, nan, nan, nan, nan, nan, 0.3562499999999993, 0.2284999999999986, 0.08000000000000007, 0.6607500000000002, 0.9669999999999996, 1.6064999999999996, 2.0142499999999997, 0.11999999999999922, -0.0030000000000001137, 0.036249999999999005, -0.0030000000000001137, 0.11149999999999949, 0.1322499999999991, 0.17599999999999838, 0.19674999999999798, 0.07125000000000092, -0.028249999999999886, -0.0065000000000008384, 0.08199999999999896, 0.03625000000000078, 0.025000000000000355, 0.05400000000000027, 0.12300000000000111, 0.10900000000000176, 0.030000000000001137, -0.03175000000000061], zp_timestamp='2026-04-15T23:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:22:53.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:22:53.669 [DEBUG] [Thread-29113] [transport.py] [_log()] starting thread (client mode): 0xee933610
2026-04-16T01:22:53.669 [DEBUG] [Thread-29113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:22:53.684 [DEBUG] [Thread-29113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:22:53.684 [INFO] [Thread-29113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:22:53.691 [DEBUG] [Thread-29113] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:22:53.691 [DEBUG] [Thread-29113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:22:53.691 [DEBUG] [Thread-29113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:22:53.691 [DEBUG] [Thread-29113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:22:53.692 [DEBUG] [Thread-29113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:22:53.692 [DEBUG] [Thread-29113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:22:53.692 [DEBUG] [Thread-29113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:22:53.692 [DEBUG] [Thread-29113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:22:53.692 [DEBUG] [Thread-29113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:22:53.692 [DEBUG] [Thread-29113] [transport.py] [_log()] client lang: <none>
2026-04-16T01:22:53.692 [DEBUG] [Thread-29113] [transport.py] [_log()] server lang: <none>
2026-04-16T01:22:53.692 [DEBUG] [Thread-29113] [transport.py] [_log()] kex follows: False
2026-04-16T01:22:53.692 [DEBUG] [Thread-29113] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:22:53.692 [DEBUG] [Thread-29113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:22:53.692 [DEBUG] [Thread-29113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:22:53.692 [DEBUG] [Thread-29113] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:22:53.693 [DEBUG] [Thread-29113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:22:53.693 [DEBUG] [Thread-29113] [transport.py] [_log()] Compression: none
2026-04-16T01:22:53.693 [DEBUG] [Thread-29113] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:22:53.748 [DEBUG] [Thread-29113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:22:53.749 [DEBUG] [Thread-29113] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:22:53.749 [DEBUG] [Thread-29113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:22:53.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:22:53.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:22:53.805 [DEBUG] [Thread-29113] [transport.py] [_log()] userauth is OK
2026-04-16T01:22:53.806 [DEBUG] [Thread-29113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:22:53.806 [DEBUG] [Thread-29113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:22:53.806 [DEBUG] [Thread-29113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:22:53.806 [DEBUG] [Thread-29113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:22:53.831 [INFO] [Thread-29113] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:22:53.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:22:53.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:22:54.307 [DEBUG] [Thread-29115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:22:54.639 [DEBUG] [Thread-29113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:22:54.640 [DEBUG] [Thread-29113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:22:54.687 [DEBUG] [Thread-29113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:22:54.687 [DEBUG] [Thread-29113] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:22:54.696 [DEBUG] [Thread-29113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:22:54.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:22:54.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')
2026-04-16T01:22: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') -> 00000000
2026-04-16T01:22:54.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:22:54.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:22:54.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:22:54.731 [DEBUG] [Thread-29113] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:22:58.719 [DEBUG] [Thread-29116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:23:13.764 [DEBUG] [Thread-29117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:23:24.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:23:24.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:23:24.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
2026-04-16T01:23:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 23, 5), 1.99932, 87.2133, 0.0, 9.66996, 9.03152, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:23:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:23:05
2026-04-16T01:23:26.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:23:26.837 [DEBUG] [Thread-29118] [transport.py] [_log()] starting thread (client mode): 0xee9eb0d0
2026-04-16T01:23:26.838 [DEBUG] [Thread-29118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:23:26.857 [DEBUG] [Thread-29118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:23:26.858 [INFO] [Thread-29118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:23:26.861 [DEBUG] [Thread-29118] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:23:26.861 [DEBUG] [Thread-29118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:23:26.861 [DEBUG] [Thread-29118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:23:26.861 [DEBUG] [Thread-29118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:23:26.861 [DEBUG] [Thread-29118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:23:26.861 [DEBUG] [Thread-29118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:23:26.861 [DEBUG] [Thread-29118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:23:26.861 [DEBUG] [Thread-29118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:23:26.861 [DEBUG] [Thread-29118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:23:26.861 [DEBUG] [Thread-29118] [transport.py] [_log()] client lang: <none>
2026-04-16T01:23:26.861 [DEBUG] [Thread-29118] [transport.py] [_log()] server lang: <none>
2026-04-16T01:23:26.862 [DEBUG] [Thread-29118] [transport.py] [_log()] kex follows: False
2026-04-16T01:23:26.862 [DEBUG] [Thread-29118] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:23:26.862 [DEBUG] [Thread-29118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:23:26.862 [DEBUG] [Thread-29118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:23:26.862 [DEBUG] [Thread-29118] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:23:26.862 [DEBUG] [Thread-29118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:23:26.862 [DEBUG] [Thread-29118] [transport.py] [_log()] Compression: none
2026-04-16T01:23:26.862 [DEBUG] [Thread-29118] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:23:26.879 [DEBUG] [Thread-29118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:23:26.879 [DEBUG] [Thread-29118] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:23:26.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:23:26.880 [DEBUG] [Thread-29118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:23:26.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:23:26.881 [DEBUG] [Thread-29118] [transport.py] [_log()] userauth is OK
2026-04-16T01:23:26.881 [DEBUG] [Thread-29118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:23:26.881 [DEBUG] [Thread-29118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:23:26.881 [DEBUG] [Thread-29118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:23:26.882 [DEBUG] [Thread-29118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:23:26.917 [INFO] [Thread-29118] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:23:26.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:23:27.731 [DEBUG] [Thread-29118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:23:27.732 [DEBUG] [Thread-29118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:23:27.732 [DEBUG] [Thread-29118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:23:27.772 [DEBUG] [Thread-29118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:23:27.772 [DEBUG] [Thread-29118] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:23:27.775 [DEBUG] [Thread-29118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:23:27.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:23:27.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:23:27.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:23:27.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:23:27.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:23:27.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:23:27.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:23:27.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:23:27.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:23:27.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.974090 -999.00   +9.40   7.34     87   +7.50 1 1 1 2 1     0    0 1.55 -14.92 ZNESW 8.3 7.3 81.8 10.4 9.7 -25.4 9.6 -24.1 9.3 -21.9 9.6 -23.9
2026-04-16T01:23:27.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:23:27.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:23:27.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.974090
2026-04-16T01:23:27.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:23:27.801 [DEBUG] [Thread-29118] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:23:27.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:23:27.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:23:27.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:23:27.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:23:27.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:23:05', tmtdew=1.99932, humidity=87.2133, cloud=0.0, wind=9.66996, temperature=9.03152, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:22:41.376', atlas_cloud=1, atlas_rain=1, zp_data=[3.5097499999999995, 0.9982500000000005, nan, nan, nan, nan, nan, 0.3562499999999993, 0.2284999999999986, 0.08000000000000007, 0.6607500000000002, 0.9669999999999996, 1.6064999999999996, 2.0142499999999997, 0.11999999999999922, -0.0030000000000001137, 0.036249999999999005, -0.0030000000000001137, 0.11149999999999949, 0.1322499999999991, 0.17599999999999838, 0.19674999999999798, 0.07125000000000092, -0.028249999999999886, -0.0065000000000008384, 0.08199999999999896, 0.03625000000000078, 0.025000000000000355, 0.05400000000000027, 0.12300000000000111, 0.10900000000000176, 0.030000000000001137, -0.03175000000000061], zp_timestamp='2026-04-15T23:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:23:28.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:23:28.058 [DEBUG] [Thread-29121] [transport.py] [_log()] starting thread (client mode): 0xee992e30
2026-04-16T01:23:28.058 [DEBUG] [Thread-29121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:23:28.073 [DEBUG] [Thread-29121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:23:28.073 [INFO] [Thread-29121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:23:28.081 [DEBUG] [Thread-29121] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:23:28.081 [DEBUG] [Thread-29121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:23:28.081 [DEBUG] [Thread-29121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:23:28.081 [DEBUG] [Thread-29121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:23:28.081 [DEBUG] [Thread-29121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:23:28.081 [DEBUG] [Thread-29121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:23:28.081 [DEBUG] [Thread-29121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:23:28.081 [DEBUG] [Thread-29121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:23:28.081 [DEBUG] [Thread-29121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:23:28.081 [DEBUG] [Thread-29121] [transport.py] [_log()] client lang: <none>
2026-04-16T01:23:28.082 [DEBUG] [Thread-29121] [transport.py] [_log()] server lang: <none>
2026-04-16T01:23:28.082 [DEBUG] [Thread-29121] [transport.py] [_log()] kex follows: False
2026-04-16T01:23:28.082 [DEBUG] [Thread-29121] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:23:28.082 [DEBUG] [Thread-29121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:23:28.082 [DEBUG] [Thread-29121] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:23:28.082 [DEBUG] [Thread-29121] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:23:28.082 [DEBUG] [Thread-29121] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:23:28.082 [DEBUG] [Thread-29121] [transport.py] [_log()] Compression: none
2026-04-16T01:23:28.082 [DEBUG] [Thread-29121] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:23:28.139 [DEBUG] [Thread-29121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:23:28.139 [DEBUG] [Thread-29121] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:23:28.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:23:28.140 [DEBUG] [Thread-29121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:23:28.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:23:28.198 [DEBUG] [Thread-29121] [transport.py] [_log()] userauth is OK
2026-04-16T01:23:28.198 [DEBUG] [Thread-29121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:23:28.198 [DEBUG] [Thread-29121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:23:28.198 [DEBUG] [Thread-29121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:23:28.199 [DEBUG] [Thread-29121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:23:28.224 [INFO] [Thread-29121] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:23:28.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:23:28.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:23:28.795 [DEBUG] [Thread-29123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:23:29.029 [DEBUG] [Thread-29121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:23:29.029 [DEBUG] [Thread-29121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:23:29.077 [DEBUG] [Thread-29121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:23:29.077 [DEBUG] [Thread-29121] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:23:29.086 [DEBUG] [Thread-29121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:23:29.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:23:29.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')
2026-04-16T01:23:29.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
2026-04-16T01:23:29.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:23:29.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:23:29.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:23:29.121 [DEBUG] [Thread-29121] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:23:37.931 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:23:37.932 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:23:43.842 [DEBUG] [Thread-29124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:23:54.459 [DEBUG] [Thread-29125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:23:58.874 [DEBUG] [Thread-29126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:23:59.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:23:59.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:23:59.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
2026-04-16T01:24:00.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 23, 41), 1.77684, 88.5589, 0.0, 12.4927, 8.76274, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:24:00.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:23:41
2026-04-16T01:24:00.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:24:01.148 [DEBUG] [Thread-29127] [transport.py] [_log()] starting thread (client mode): 0xee9c3b20
2026-04-16T01:24:01.149 [DEBUG] [Thread-29127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:24:01.168 [DEBUG] [Thread-29127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:24:01.168 [INFO] [Thread-29127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:24:01.172 [DEBUG] [Thread-29127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:24:01.172 [DEBUG] [Thread-29127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:24:01.172 [DEBUG] [Thread-29127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:24:01.172 [DEBUG] [Thread-29127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:24:01.172 [DEBUG] [Thread-29127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:24:01.172 [DEBUG] [Thread-29127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:24:01.172 [DEBUG] [Thread-29127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:24:01.172 [DEBUG] [Thread-29127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:24:01.172 [DEBUG] [Thread-29127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:24:01.172 [DEBUG] [Thread-29127] [transport.py] [_log()] client lang: <none>
2026-04-16T01:24:01.172 [DEBUG] [Thread-29127] [transport.py] [_log()] server lang: <none>
2026-04-16T01:24:01.173 [DEBUG] [Thread-29127] [transport.py] [_log()] kex follows: False
2026-04-16T01:24:01.173 [DEBUG] [Thread-29127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:24:01.173 [DEBUG] [Thread-29127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:24:01.173 [DEBUG] [Thread-29127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:24:01.173 [DEBUG] [Thread-29127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:24:01.173 [DEBUG] [Thread-29127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:24:01.173 [DEBUG] [Thread-29127] [transport.py] [_log()] Compression: none
2026-04-16T01:24:01.173 [DEBUG] [Thread-29127] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:24:01.190 [DEBUG] [Thread-29127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:24:01.190 [DEBUG] [Thread-29127] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:24:01.190 [DEBUG] [Thread-29127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:24:01.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:24:01.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:24:01.192 [DEBUG] [Thread-29127] [transport.py] [_log()] userauth is OK
2026-04-16T01:24:01.192 [DEBUG] [Thread-29127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:24:01.192 [DEBUG] [Thread-29127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:24:01.193 [DEBUG] [Thread-29127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:24:01.193 [DEBUG] [Thread-29127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:24:01.215 [INFO] [Thread-29127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:24:01.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:24:02.018 [DEBUG] [Thread-29127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:24:02.018 [DEBUG] [Thread-29127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:24:02.019 [DEBUG] [Thread-29127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:24:02.059 [DEBUG] [Thread-29127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:24:02.059 [DEBUG] [Thread-29127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:24:02.063 [DEBUG] [Thread-29127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:24:02.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:24:02.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:24:02.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:24:02.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:24:02.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:24:02.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:24:02.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:24:02.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:24:02.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:24:02.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.974438 -999.00   +9.40   5.85     87   +7.50 1 1 1 2 1     0    0 1.52 -16.58 ZNESW 5.6 5.8 130.2 7.5 9.7 -25.4 9.5 -24.2 9.3 -22.0 9.6 -24.2
2026-04-16T01:24:02.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:24:02.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:24:02.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.974438
2026-04-16T01:24:02.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:24:02.086 [DEBUG] [Thread-29127] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:24:02.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:24:02.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:24:02.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:24:02.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:24:02.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:23:41', tmtdew=1.77684, humidity=88.5589, cloud=0.0, wind=12.4927, temperature=8.76274, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:23:11.443', atlas_cloud=1, atlas_rain=1, zp_data=[3.5097499999999995, 0.9982500000000005, nan, nan, nan, nan, nan, 0.3562499999999993, 0.2284999999999986, 0.08000000000000007, 0.6607500000000002, 0.9669999999999996, 1.6064999999999996, 2.0142499999999997, 0.11999999999999922, -0.0030000000000001137, 0.036249999999999005, -0.0030000000000001137, 0.11149999999999949, 0.1322499999999991, 0.17599999999999838, 0.19674999999999798, 0.07125000000000092, -0.028249999999999886, -0.0065000000000008384, 0.08199999999999896, 0.03625000000000078, 0.025000000000000355, 0.05400000000000027, 0.12300000000000111, 0.10900000000000176, 0.030000000000001137, -0.03175000000000061], zp_timestamp='2026-04-15T23:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:24:02.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:24:02.344 [DEBUG] [Thread-29130] [transport.py] [_log()] starting thread (client mode): 0xf13341f0
2026-04-16T01:24:02.344 [DEBUG] [Thread-29130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:24:02.359 [DEBUG] [Thread-29130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:24:02.359 [INFO] [Thread-29130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:24:02.367 [DEBUG] [Thread-29130] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:24:02.367 [DEBUG] [Thread-29130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:24:02.367 [DEBUG] [Thread-29130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:24:02.367 [DEBUG] [Thread-29130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:24:02.367 [DEBUG] [Thread-29130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:24:02.367 [DEBUG] [Thread-29130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:24:02.367 [DEBUG] [Thread-29130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:24:02.367 [DEBUG] [Thread-29130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:24:02.367 [DEBUG] [Thread-29130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:24:02.367 [DEBUG] [Thread-29130] [transport.py] [_log()] client lang: <none>
2026-04-16T01:24:02.368 [DEBUG] [Thread-29130] [transport.py] [_log()] server lang: <none>
2026-04-16T01:24:02.368 [DEBUG] [Thread-29130] [transport.py] [_log()] kex follows: False
2026-04-16T01:24:02.368 [DEBUG] [Thread-29130] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:24:02.368 [DEBUG] [Thread-29130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:24:02.368 [DEBUG] [Thread-29130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:24:02.368 [DEBUG] [Thread-29130] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:24:02.368 [DEBUG] [Thread-29130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:24:02.368 [DEBUG] [Thread-29130] [transport.py] [_log()] Compression: none
2026-04-16T01:24:02.368 [DEBUG] [Thread-29130] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:24:02.433 [DEBUG] [Thread-29130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:24:02.433 [DEBUG] [Thread-29130] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:24:02.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:24:02.434 [DEBUG] [Thread-29130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:24:02.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:24:02.490 [DEBUG] [Thread-29130] [transport.py] [_log()] userauth is OK
2026-04-16T01:24:02.490 [DEBUG] [Thread-29130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:24:02.490 [DEBUG] [Thread-29130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:24:02.490 [DEBUG] [Thread-29130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:24:02.490 [DEBUG] [Thread-29130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:24:02.516 [INFO] [Thread-29130] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:24:02.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:24:02.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:24:03.321 [DEBUG] [Thread-29130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:24:03.321 [DEBUG] [Thread-29130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:24:03.369 [DEBUG] [Thread-29130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:24:03.369 [DEBUG] [Thread-29130] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:24:03.378 [DEBUG] [Thread-29130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:24:03.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:24:03.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')
2026-04-16T01:24:03.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
2026-04-16T01:24:03.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:24:03.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:24:03.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:24:03.412 [DEBUG] [Thread-29130] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:24:13.905 [DEBUG] [Thread-29132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:24:28.949 [DEBUG] [Thread-29133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:24:33.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:24:33.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:24:33.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
2026-04-16T01:24:34.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 24, 17), 2.04071, 87.2628, 0.0, 9.61704, 8.99819, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:24:34.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:24:17
2026-04-16T01:24:35.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:24:35.559 [DEBUG] [Thread-29134] [transport.py] [_log()] starting thread (client mode): 0xf13e3f40
2026-04-16T01:24:35.560 [DEBUG] [Thread-29134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:24:35.580 [DEBUG] [Thread-29134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:24:35.580 [INFO] [Thread-29134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:24:35.581 [DEBUG] [Thread-29134] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:24:35.581 [DEBUG] [Thread-29134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:24:35.581 [DEBUG] [Thread-29134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:24:35.581 [DEBUG] [Thread-29134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:24:35.581 [DEBUG] [Thread-29134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:24:35.581 [DEBUG] [Thread-29134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:24:35.581 [DEBUG] [Thread-29134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:24:35.582 [DEBUG] [Thread-29134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:24:35.582 [DEBUG] [Thread-29134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:24:35.582 [DEBUG] [Thread-29134] [transport.py] [_log()] client lang: <none>
2026-04-16T01:24:35.582 [DEBUG] [Thread-29134] [transport.py] [_log()] server lang: <none>
2026-04-16T01:24:35.582 [DEBUG] [Thread-29134] [transport.py] [_log()] kex follows: False
2026-04-16T01:24:35.582 [DEBUG] [Thread-29134] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:24:35.582 [DEBUG] [Thread-29134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:24:35.582 [DEBUG] [Thread-29134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:24:35.582 [DEBUG] [Thread-29134] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:24:35.582 [DEBUG] [Thread-29134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:24:35.582 [DEBUG] [Thread-29134] [transport.py] [_log()] Compression: none
2026-04-16T01:24:35.582 [DEBUG] [Thread-29134] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:24:35.597 [DEBUG] [Thread-29134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:24:35.597 [DEBUG] [Thread-29134] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:24:35.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:24:35.598 [DEBUG] [Thread-29134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:24:35.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:24:35.599 [DEBUG] [Thread-29134] [transport.py] [_log()] userauth is OK
2026-04-16T01:24:35.599 [DEBUG] [Thread-29134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:24:35.599 [DEBUG] [Thread-29134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:24:35.599 [DEBUG] [Thread-29134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:24:35.599 [DEBUG] [Thread-29134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:24:35.614 [INFO] [Thread-29134] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:24:35.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:24:36.133 [DEBUG] [Thread-23763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:24:36.402 [DEBUG] [Thread-29134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:24:36.402 [DEBUG] [Thread-29134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:24:36.402 [DEBUG] [Thread-29134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:24:36.444 [DEBUG] [Thread-29134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:24:36.444 [DEBUG] [Thread-29134] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:24:36.446 [DEBUG] [Thread-29134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:24:36.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:24:36.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:24:36.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:24:36.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:24:36.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:24:36.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:24:36.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:24:36.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:24:36.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:24:36.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.974785 -999.00   +9.40   4.67     87   +7.50 1 1 1 2 1     0    0 1.52 -16.43 zNESW 4.9 4.7 106.3 8.0 9.7 -25.6 9.6 -24.3 9.3 -21.9 9.5 -24.0
2026-04-16T01:24:36.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:24:36.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:24:36.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.974785
2026-04-16T01:24:36.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:24:36.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:24:36.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:24:36.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:24:36.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:24:36.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:24:17', tmtdew=2.04071, humidity=87.2628, cloud=0.0, wind=9.61704, temperature=8.99819, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:23:41.424', atlas_cloud=1, atlas_rain=1, zp_data=[3.5097499999999995, 0.9982500000000005, nan, nan, nan, nan, nan, 0.3562499999999993, 0.2284999999999986, 0.08000000000000007, 0.6607500000000002, 0.9669999999999996, 1.6064999999999996, 2.0142499999999997, 0.11999999999999922, -0.0030000000000001137, 0.036249999999999005, -0.0030000000000001137, 0.11149999999999949, 0.1322499999999991, 0.17599999999999838, 0.19674999999999798, 0.07125000000000092, -0.028249999999999886, -0.0065000000000008384, 0.08199999999999896, 0.03625000000000078, 0.025000000000000355, 0.05400000000000027, 0.12300000000000111, 0.10900000000000176, 0.030000000000001137, -0.03175000000000061], zp_timestamp='2026-04-15T23:20:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:24:36.466 [DEBUG] [Thread-29134] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:24:36.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:24:36.687 [DEBUG] [Thread-29137] [transport.py] [_log()] starting thread (client mode): 0xf13cb670
2026-04-16T01:24:36.687 [DEBUG] [Thread-29137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:24:36.700 [DEBUG] [Thread-29137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:24:36.701 [INFO] [Thread-29137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:24:36.708 [DEBUG] [Thread-29137] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:24:36.708 [DEBUG] [Thread-29137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:24:36.708 [DEBUG] [Thread-29137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:24:36.708 [DEBUG] [Thread-29137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:24:36.709 [DEBUG] [Thread-29137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:24:36.709 [DEBUG] [Thread-29137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:24:36.709 [DEBUG] [Thread-29137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:24:36.709 [DEBUG] [Thread-29137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:24:36.709 [DEBUG] [Thread-29137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:24:36.709 [DEBUG] [Thread-29137] [transport.py] [_log()] client lang: <none>
2026-04-16T01:24:36.709 [DEBUG] [Thread-29137] [transport.py] [_log()] server lang: <none>
2026-04-16T01:24:36.709 [DEBUG] [Thread-29137] [transport.py] [_log()] kex follows: False
2026-04-16T01:24:36.709 [DEBUG] [Thread-29137] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:24:36.709 [DEBUG] [Thread-29137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:24:36.709 [DEBUG] [Thread-29137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:24:36.709 [DEBUG] [Thread-29137] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:24:36.710 [DEBUG] [Thread-29137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:24:36.710 [DEBUG] [Thread-29137] [transport.py] [_log()] Compression: none
2026-04-16T01:24:36.710 [DEBUG] [Thread-29137] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:24:36.769 [DEBUG] [Thread-29137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:24:36.769 [DEBUG] [Thread-29137] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:24:36.770 [DEBUG] [Thread-29137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:24:36.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:24:36.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:24:36.826 [DEBUG] [Thread-29137] [transport.py] [_log()] userauth is OK
2026-04-16T01:24:36.826 [DEBUG] [Thread-29137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:24:36.826 [DEBUG] [Thread-29137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:24:36.826 [DEBUG] [Thread-29137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:24:36.826 [DEBUG] [Thread-29137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:24:36.849 [INFO] [Thread-29137] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:24:36.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:24:36.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:24:37.670 [DEBUG] [Thread-29137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:24:37.670 [DEBUG] [Thread-29137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:24:37.718 [DEBUG] [Thread-29137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:24:37.718 [DEBUG] [Thread-29137] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:24:37.727 [DEBUG] [Thread-29137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:24:37.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:24:37.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')
2026-04-16T01:24:37.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
2026-04-16T01:24:37.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:24:37.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:24:37.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:24:37.762 [DEBUG] [Thread-29137] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:24:38.135 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:24:38.136 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:24:43.980 [DEBUG] [Thread-29139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:24:54.603 [DEBUG] [Thread-29140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:24:59.025 [DEBUG] [Thread-29141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:25:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:25:07.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:25:07.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
2026-04-16T01:25:09.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 24, 52), 1.77601, 88.5585, 0.0, 11.9988, 8.69614, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:25:09.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:24:52
2026-04-16T01:25:09.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:25:09.918 [DEBUG] [Thread-29142] [transport.py] [_log()] starting thread (client mode): 0xee954070
2026-04-16T01:25:09.918 [DEBUG] [Thread-29142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:25:09.938 [DEBUG] [Thread-29142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:25:09.938 [INFO] [Thread-29142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:25:09.941 [DEBUG] [Thread-29142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:25:09.941 [DEBUG] [Thread-29142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:25:09.941 [DEBUG] [Thread-29142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:25:09.941 [DEBUG] [Thread-29142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:25:09.941 [DEBUG] [Thread-29142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:25:09.941 [DEBUG] [Thread-29142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:25:09.942 [DEBUG] [Thread-29142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:25:09.942 [DEBUG] [Thread-29142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:25:09.942 [DEBUG] [Thread-29142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:25:09.942 [DEBUG] [Thread-29142] [transport.py] [_log()] client lang: <none>
2026-04-16T01:25:09.942 [DEBUG] [Thread-29142] [transport.py] [_log()] server lang: <none>
2026-04-16T01:25:09.942 [DEBUG] [Thread-29142] [transport.py] [_log()] kex follows: False
2026-04-16T01:25:09.942 [DEBUG] [Thread-29142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:25:09.942 [DEBUG] [Thread-29142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:25:09.942 [DEBUG] [Thread-29142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:25:09.942 [DEBUG] [Thread-29142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:25:09.942 [DEBUG] [Thread-29142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:25:09.942 [DEBUG] [Thread-29142] [transport.py] [_log()] Compression: none
2026-04-16T01:25:09.942 [DEBUG] [Thread-29142] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:25:09.959 [DEBUG] [Thread-29142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:25:09.959 [DEBUG] [Thread-29142] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:25:09.960 [DEBUG] [Thread-29142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:25:09.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:25:09.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:25:09.961 [DEBUG] [Thread-29142] [transport.py] [_log()] userauth is OK
2026-04-16T01:25:09.961 [DEBUG] [Thread-29142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:25:09.961 [DEBUG] [Thread-29142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:25:09.961 [DEBUG] [Thread-29142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:25:09.961 [DEBUG] [Thread-29142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:25:09.979 [INFO] [Thread-29142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:25:09.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:25:14.061 [DEBUG] [Thread-29144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:25:18.703 [DEBUG] [Thread-29142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:25:18.703 [DEBUG] [Thread-29142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:25:18.704 [DEBUG] [Thread-29142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:25:18.744 [DEBUG] [Thread-29142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:25:18.744 [DEBUG] [Thread-29142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:25:18.746 [DEBUG] [Thread-29142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:25:18.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:25:18.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:25:18.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:25:18.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:25:18.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:25:18.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:25:18.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:25:18.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:25:18.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:25:18.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.975479 -999.00   +9.40   6.22     87   +7.50 1 1 1 2 1     0    0 1.50 -16.40 ZNESW 7.0 6.2 110.4 10.5 9.7 -25.5 9.5 -24.2 9.2 -21.9 9.5 -24.0
2026-04-16T01:25:18.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:25:18.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:25:18.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.975479
2026-04-16T01:25:18.891 [DEBUG] [Thread-29142] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:25:18.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:25:18.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:25:18.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:25:18.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:25:18.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:25:18.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:24:52', tmtdew=1.77601, humidity=88.5585, cloud=0.0, wind=11.9988, temperature=8.69614, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:24:41.386', atlas_cloud=1, atlas_rain=1, zp_data=[3.5097499999999995, 0.9982500000000005, nan, nan, nan, nan, nan, 0.3562499999999993, 0.2284999999999986, 0.08000000000000007, 0.6607500000000002, 0.9669999999999996, 1.6064999999999996, 2.0142499999999997, 0.11999999999999922, -0.0030000000000001137, 0.036249999999999005, -0.0030000000000001137, 0.11149999999999949, 0.1322499999999991, 0.17599999999999838, 0.19674999999999798, 0.07125000000000092, -0.028249999999999886, -0.0065000000000008384, 0.08199999999999896, 0.03625000000000078, 0.025000000000000355, 0.05400000000000027, 0.12300000000000111, 0.10900000000000176, 0.030000000000001137, -0.03175000000000061], zp_timestamp='2026-04-15T23:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:25:19.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:25:19.157 [DEBUG] [Thread-29146] [transport.py] [_log()] starting thread (client mode): 0xee9540d0
2026-04-16T01:25:19.157 [DEBUG] [Thread-29146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:25:19.172 [DEBUG] [Thread-29146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:25:19.172 [INFO] [Thread-29146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:25:19.179 [DEBUG] [Thread-29146] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:25:19.180 [DEBUG] [Thread-29146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:25:19.180 [DEBUG] [Thread-29146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:25:19.180 [DEBUG] [Thread-29146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:25:19.180 [DEBUG] [Thread-29146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:25:19.180 [DEBUG] [Thread-29146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:25:19.180 [DEBUG] [Thread-29146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:25:19.180 [DEBUG] [Thread-29146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:25:19.180 [DEBUG] [Thread-29146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:25:19.180 [DEBUG] [Thread-29146] [transport.py] [_log()] client lang: <none>
2026-04-16T01:25:19.180 [DEBUG] [Thread-29146] [transport.py] [_log()] server lang: <none>
2026-04-16T01:25:19.180 [DEBUG] [Thread-29146] [transport.py] [_log()] kex follows: False
2026-04-16T01:25:19.181 [DEBUG] [Thread-29146] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:25:19.181 [DEBUG] [Thread-29146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:25:19.181 [DEBUG] [Thread-29146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:25:19.181 [DEBUG] [Thread-29146] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:25:19.181 [DEBUG] [Thread-29146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:25:19.181 [DEBUG] [Thread-29146] [transport.py] [_log()] Compression: none
2026-04-16T01:25:19.181 [DEBUG] [Thread-29146] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:25:19.237 [DEBUG] [Thread-29146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:25:19.237 [DEBUG] [Thread-29146] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:25:19.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:25:19.238 [DEBUG] [Thread-29146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:25:19.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:25:19.294 [DEBUG] [Thread-29146] [transport.py] [_log()] userauth is OK
2026-04-16T01:25:19.295 [DEBUG] [Thread-29146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:25:19.295 [DEBUG] [Thread-29146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:25:19.295 [DEBUG] [Thread-29146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:25:19.295 [DEBUG] [Thread-29146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:25:19.321 [INFO] [Thread-29146] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:25:19.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:25:19.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:25:20.119 [DEBUG] [Thread-29146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:25:20.119 [DEBUG] [Thread-29146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:25:20.167 [DEBUG] [Thread-29146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:25:20.167 [DEBUG] [Thread-29146] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:25:20.177 [DEBUG] [Thread-29146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:25:20.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:25:20.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')
2026-04-16T01:25:20.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') -> 00000000
2026-04-16T01:25:20.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:25:20.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:25:20.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:25:20.212 [DEBUG] [Thread-29146] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:25:29.093 [DEBUG] [Thread-29148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:25:38.336 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:25:38.337 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:25:42.909 [DEBUG] [Thread-23763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:25:44.137 [DEBUG] [Thread-29149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:25:50.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:25:50.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:25:50.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
2026-04-16T01:25:51.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 25, 28), 2.02981, 87.329, 0.0, 9.5994, 8.99807, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:25:51.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:25:28
2026-04-16T01:25:51.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:25:52.389 [DEBUG] [Thread-29150] [transport.py] [_log()] starting thread (client mode): 0xee954130
2026-04-16T01:25:52.389 [DEBUG] [Thread-29150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:25:52.409 [DEBUG] [Thread-29150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:25:52.409 [INFO] [Thread-29150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:25:52.412 [DEBUG] [Thread-29150] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:25:52.412 [DEBUG] [Thread-29150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:25:52.412 [DEBUG] [Thread-29150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:25:52.413 [DEBUG] [Thread-29150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:25:52.413 [DEBUG] [Thread-29150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:25:52.413 [DEBUG] [Thread-29150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:25:52.413 [DEBUG] [Thread-29150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:25:52.413 [DEBUG] [Thread-29150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:25:52.413 [DEBUG] [Thread-29150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:25:52.413 [DEBUG] [Thread-29150] [transport.py] [_log()] client lang: <none>
2026-04-16T01:25:52.413 [DEBUG] [Thread-29150] [transport.py] [_log()] server lang: <none>
2026-04-16T01:25:52.413 [DEBUG] [Thread-29150] [transport.py] [_log()] kex follows: False
2026-04-16T01:25:52.413 [DEBUG] [Thread-29150] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:25:52.413 [DEBUG] [Thread-29150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:25:52.413 [DEBUG] [Thread-29150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:25:52.414 [DEBUG] [Thread-29150] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:25:52.414 [DEBUG] [Thread-29150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:25:52.414 [DEBUG] [Thread-29150] [transport.py] [_log()] Compression: none
2026-04-16T01:25:52.414 [DEBUG] [Thread-29150] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:25:52.430 [DEBUG] [Thread-29150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:25:52.430 [DEBUG] [Thread-29150] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:25:52.431 [DEBUG] [Thread-29150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:25:52.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:25:52.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:25:52.432 [DEBUG] [Thread-29150] [transport.py] [_log()] userauth is OK
2026-04-16T01:25:52.432 [DEBUG] [Thread-29150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:25:52.432 [DEBUG] [Thread-29150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:25:52.432 [DEBUG] [Thread-29150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:25:52.433 [DEBUG] [Thread-29150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:25:52.468 [INFO] [Thread-29150] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:25:52.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:25:53.294 [DEBUG] [Thread-29150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:25:53.294 [DEBUG] [Thread-29150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:25:53.295 [DEBUG] [Thread-29150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:25:53.335 [DEBUG] [Thread-29150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:25:53.335 [DEBUG] [Thread-29150] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:25:53.338 [DEBUG] [Thread-29150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:25:53.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:25:53.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:25:53.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:25:53.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:25:53.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:25:53.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:25:53.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:25:53.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:25:53.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:25:53.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.975826 -999.00   +9.40   4.72     87   +7.40 1 1 1 2 1     0    0 1.54 -16.11 ZNESW 5.1 4.7 117.7 7.0 9.7 -25.4 9.5 -24.0 9.3 -22.1 9.6 -24.2
2026-04-16T01:25:53.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:25:53.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:25:53.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.975826
2026-04-16T01:25:53.361 [DEBUG] [Thread-29150] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:25:53.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:25:53.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:25:53.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:25:53.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:25:53.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:25:53.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:25:28', tmtdew=2.02981, humidity=87.329, cloud=0.0, wind=9.5994, temperature=8.99807, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:25:11.366', atlas_cloud=1, atlas_rain=1, zp_data=[3.5097499999999995, 0.9982500000000005, nan, nan, nan, nan, nan, 0.3562499999999993, 0.2284999999999986, 0.08000000000000007, 0.6607500000000002, 0.9669999999999996, 1.6064999999999996, 2.0142499999999997, 0.11999999999999922, -0.0030000000000001137, 0.036249999999999005, -0.0030000000000001137, 0.11149999999999949, 0.1322499999999991, 0.17599999999999838, 0.19674999999999798, 0.07125000000000092, -0.028249999999999886, -0.0065000000000008384, 0.08199999999999896, 0.03625000000000078, 0.025000000000000355, 0.05400000000000027, 0.12300000000000111, 0.10900000000000176, 0.030000000000001137, -0.03175000000000061], zp_timestamp='2026-04-15T23:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:25:53.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:25:53.617 [DEBUG] [Thread-29153] [transport.py] [_log()] starting thread (client mode): 0xee954eb0
2026-04-16T01:25:53.617 [DEBUG] [Thread-29153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:25:53.637 [DEBUG] [Thread-29153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:25:53.637 [INFO] [Thread-29153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:25:53.644 [DEBUG] [Thread-29153] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:25:53.644 [DEBUG] [Thread-29153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:25:53.644 [DEBUG] [Thread-29153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:25:53.644 [DEBUG] [Thread-29153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:25:53.645 [DEBUG] [Thread-29153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:25:53.645 [DEBUG] [Thread-29153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:25:53.645 [DEBUG] [Thread-29153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:25:53.645 [DEBUG] [Thread-29153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:25:53.645 [DEBUG] [Thread-29153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:25:53.645 [DEBUG] [Thread-29153] [transport.py] [_log()] client lang: <none>
2026-04-16T01:25:53.645 [DEBUG] [Thread-29153] [transport.py] [_log()] server lang: <none>
2026-04-16T01:25:53.645 [DEBUG] [Thread-29153] [transport.py] [_log()] kex follows: False
2026-04-16T01:25:53.645 [DEBUG] [Thread-29153] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:25:53.645 [DEBUG] [Thread-29153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:25:53.646 [DEBUG] [Thread-29153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:25:53.646 [DEBUG] [Thread-29153] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:25:53.646 [DEBUG] [Thread-29153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:25:53.646 [DEBUG] [Thread-29153] [transport.py] [_log()] Compression: none
2026-04-16T01:25:53.646 [DEBUG] [Thread-29153] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:25:53.701 [DEBUG] [Thread-29153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:25:53.701 [DEBUG] [Thread-29153] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:25:53.702 [DEBUG] [Thread-29153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:25:53.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:25:53.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:25:53.758 [DEBUG] [Thread-29153] [transport.py] [_log()] userauth is OK
2026-04-16T01:25:53.758 [DEBUG] [Thread-29153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:25:53.758 [DEBUG] [Thread-29153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:25:53.759 [DEBUG] [Thread-29153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:25:53.759 [DEBUG] [Thread-29153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:25:53.784 [INFO] [Thread-29153] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:25:53.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:25:53.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:25:54.611 [DEBUG] [Thread-29153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:25:54.611 [DEBUG] [Thread-29153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:25:54.658 [DEBUG] [Thread-29153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:25:54.659 [DEBUG] [Thread-29153] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:25:54.667 [DEBUG] [Thread-29153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:25:54.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:25:54.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')
2026-04-16T01:25:54.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
2026-04-16T01:25:54.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:25:54.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:25:54.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:25:54.699 [DEBUG] [Thread-29153] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:25:54.767 [DEBUG] [Thread-29155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:25:59.168 [DEBUG] [Thread-29156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:26:14.208 [DEBUG] [Thread-29157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:26:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:26:24.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:26:24.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T01:26:26.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 26, 4), 2.04027, 87.2629, 0.0, 9.65232, 8.96504, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:26:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:26:04
2026-04-16T01:26:26.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:26:26.859 [DEBUG] [Thread-29158] [transport.py] [_log()] starting thread (client mode): 0xf13ca8f0
2026-04-16T01:26:26.859 [DEBUG] [Thread-29158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:26:26.879 [DEBUG] [Thread-29158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:26:26.880 [INFO] [Thread-29158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:26:26.881 [DEBUG] [Thread-29158] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:26:26.881 [DEBUG] [Thread-29158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:26:26.881 [DEBUG] [Thread-29158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:26:26.881 [DEBUG] [Thread-29158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:26:26.881 [DEBUG] [Thread-29158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:26:26.882 [DEBUG] [Thread-29158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:26:26.882 [DEBUG] [Thread-29158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:26:26.882 [DEBUG] [Thread-29158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:26:26.882 [DEBUG] [Thread-29158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:26:26.882 [DEBUG] [Thread-29158] [transport.py] [_log()] client lang: <none>
2026-04-16T01:26:26.882 [DEBUG] [Thread-29158] [transport.py] [_log()] server lang: <none>
2026-04-16T01:26:26.882 [DEBUG] [Thread-29158] [transport.py] [_log()] kex follows: False
2026-04-16T01:26:26.882 [DEBUG] [Thread-29158] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:26:26.882 [DEBUG] [Thread-29158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:26:26.882 [DEBUG] [Thread-29158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:26:26.882 [DEBUG] [Thread-29158] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:26:26.883 [DEBUG] [Thread-29158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:26:26.883 [DEBUG] [Thread-29158] [transport.py] [_log()] Compression: none
2026-04-16T01:26:26.883 [DEBUG] [Thread-29158] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:26:26.896 [DEBUG] [Thread-29158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:26:26.896 [DEBUG] [Thread-29158] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:26:26.897 [DEBUG] [Thread-29158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:26:26.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:26:26.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:26:26.940 [DEBUG] [Thread-29158] [transport.py] [_log()] userauth is OK
2026-04-16T01:26:26.940 [DEBUG] [Thread-29158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:26:26.940 [DEBUG] [Thread-29158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:26:26.940 [DEBUG] [Thread-29158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:26:26.941 [DEBUG] [Thread-29158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:26:26.959 [INFO] [Thread-29158] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:26:26.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:26:27.754 [DEBUG] [Thread-29158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:26:27.755 [DEBUG] [Thread-29158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:26:27.755 [DEBUG] [Thread-29158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:26:27.795 [DEBUG] [Thread-29158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:26:27.795 [DEBUG] [Thread-29158] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:26:27.798 [DEBUG] [Thread-29158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:26:27.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:26:27.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:26:27.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:26:27.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:26:27.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:26:27.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:26:27.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:26:27.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:26:27.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:26:27.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.976174 -999.00   +9.40   6.98     87   +7.40 1 1 1 2 1     0    0 1.55 -15.04 ZNESW 5.7 7.0 81.4 10.3 9.7 -25.5 9.5 -24.3 9.2 -21.9 9.5 -24.2
2026-04-16T01:26:27.821 [DEBUG] [Thread-29158] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:26:27.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:26:27.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:26:27.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.976174
2026-04-16T01:26:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:26:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:26:27.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:26:27.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:26:27.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:26:27.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:26:04', tmtdew=2.04027, humidity=87.2629, cloud=0.0, wind=9.65232, temperature=8.96504, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:25:41.434', atlas_cloud=1, atlas_rain=1, zp_data=[3.5097499999999995, 0.9982500000000005, nan, nan, nan, nan, nan, 0.3562499999999993, 0.2284999999999986, 0.08000000000000007, 0.6607500000000002, 0.9669999999999996, 1.6064999999999996, 2.0142499999999997, 0.11999999999999922, -0.0030000000000001137, 0.036249999999999005, -0.0030000000000001137, 0.11149999999999949, 0.1322499999999991, 0.17599999999999838, 0.19674999999999798, 0.07125000000000092, -0.028249999999999886, -0.0065000000000008384, 0.08199999999999896, 0.03625000000000078, 0.025000000000000355, 0.05400000000000027, 0.12300000000000111, 0.10900000000000176, 0.030000000000001137, -0.03175000000000061], zp_timestamp='2026-04-15T23:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:26:28.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:26:28.079 [DEBUG] [Thread-29161] [transport.py] [_log()] starting thread (client mode): 0xf13c8040
2026-04-16T01:26:28.080 [DEBUG] [Thread-29161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:26:28.095 [DEBUG] [Thread-29161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:26:28.095 [INFO] [Thread-29161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:26:28.102 [DEBUG] [Thread-29161] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:26:28.103 [DEBUG] [Thread-29161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:26:28.103 [DEBUG] [Thread-29161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:26:28.103 [DEBUG] [Thread-29161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:26:28.103 [DEBUG] [Thread-29161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:26:28.103 [DEBUG] [Thread-29161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:26:28.103 [DEBUG] [Thread-29161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:26:28.103 [DEBUG] [Thread-29161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:26:28.103 [DEBUG] [Thread-29161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:26:28.103 [DEBUG] [Thread-29161] [transport.py] [_log()] client lang: <none>
2026-04-16T01:26:28.103 [DEBUG] [Thread-29161] [transport.py] [_log()] server lang: <none>
2026-04-16T01:26:28.103 [DEBUG] [Thread-29161] [transport.py] [_log()] kex follows: False
2026-04-16T01:26:28.103 [DEBUG] [Thread-29161] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:26:28.104 [DEBUG] [Thread-29161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:26:28.104 [DEBUG] [Thread-29161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:26:28.104 [DEBUG] [Thread-29161] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:26:28.104 [DEBUG] [Thread-29161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:26:28.104 [DEBUG] [Thread-29161] [transport.py] [_log()] Compression: none
2026-04-16T01:26:28.104 [DEBUG] [Thread-29161] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:26:28.161 [DEBUG] [Thread-29161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:26:28.162 [DEBUG] [Thread-29161] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:26:28.162 [DEBUG] [Thread-29161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:26:28.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:26:28.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:26:28.218 [DEBUG] [Thread-29161] [transport.py] [_log()] userauth is OK
2026-04-16T01:26:28.218 [DEBUG] [Thread-29161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:26:28.219 [DEBUG] [Thread-29161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:26:28.219 [DEBUG] [Thread-29161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:26:28.219 [DEBUG] [Thread-29161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:26:28.244 [INFO] [Thread-29161] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:26:28.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:26:28.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:26:29.061 [DEBUG] [Thread-29161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:26:29.061 [DEBUG] [Thread-29161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:26:29.109 [DEBUG] [Thread-29161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:26:29.109 [DEBUG] [Thread-29161] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:26:29.117 [DEBUG] [Thread-29161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:26:29.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:26:29.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')
2026-04-16T01:26:29.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
2026-04-16T01:26:29.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:26:29.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:26:29.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:26:29.148 [DEBUG] [Thread-29161] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:26:29.238 [DEBUG] [Thread-29163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:26:38.541 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:26:38.542 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:26:44.275 [DEBUG] [Thread-29164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:26:54.934 [DEBUG] [Thread-29165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:26:59.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:26:59.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:26: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
2026-04-16T01:26:59.306 [DEBUG] [Thread-29166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:27:00.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 26, 40), 1.75957, 88.6585, 0.0, 12.1399, 8.69644, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:27:00.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:26:40
2026-04-16T01:27:00.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:27:01.266 [DEBUG] [Thread-29167] [transport.py] [_log()] starting thread (client mode): 0xee9565f0
2026-04-16T01:27:01.266 [DEBUG] [Thread-29167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:27:01.285 [DEBUG] [Thread-29167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:27:01.285 [INFO] [Thread-29167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:27:01.288 [DEBUG] [Thread-29167] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:27:01.288 [DEBUG] [Thread-29167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:27:01.288 [DEBUG] [Thread-29167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:27:01.289 [DEBUG] [Thread-29167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:27:01.289 [DEBUG] [Thread-29167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:27:01.289 [DEBUG] [Thread-29167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:27:01.289 [DEBUG] [Thread-29167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:27:01.289 [DEBUG] [Thread-29167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:27:01.289 [DEBUG] [Thread-29167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:27:01.289 [DEBUG] [Thread-29167] [transport.py] [_log()] client lang: <none>
2026-04-16T01:27:01.289 [DEBUG] [Thread-29167] [transport.py] [_log()] server lang: <none>
2026-04-16T01:27:01.289 [DEBUG] [Thread-29167] [transport.py] [_log()] kex follows: False
2026-04-16T01:27:01.289 [DEBUG] [Thread-29167] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:27:01.289 [DEBUG] [Thread-29167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:27:01.290 [DEBUG] [Thread-29167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:27:01.290 [DEBUG] [Thread-29167] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:27:01.290 [DEBUG] [Thread-29167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:27:01.290 [DEBUG] [Thread-29167] [transport.py] [_log()] Compression: none
2026-04-16T01:27:01.290 [DEBUG] [Thread-29167] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:27:01.307 [DEBUG] [Thread-29167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:27:01.307 [DEBUG] [Thread-29167] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:27:01.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:27:01.308 [DEBUG] [Thread-29167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:27:01.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:27:01.309 [DEBUG] [Thread-29167] [transport.py] [_log()] userauth is OK
2026-04-16T01:27:01.309 [DEBUG] [Thread-29167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:27:01.309 [DEBUG] [Thread-29167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:27:01.309 [DEBUG] [Thread-29167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:27:01.309 [DEBUG] [Thread-29167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:27:01.334 [INFO] [Thread-29167] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:27:01.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:27:02.114 [DEBUG] [Thread-29167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:27:02.114 [DEBUG] [Thread-29167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:27:02.115 [DEBUG] [Thread-29167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:27:02.154 [DEBUG] [Thread-29167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:27:02.155 [DEBUG] [Thread-29167] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:27:02.157 [DEBUG] [Thread-29167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:27:02.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:27:02.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:27:02.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:27:02.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:27:02.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:27:02.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:27:02.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:27:02.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:27:02.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:27:02.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.976521 -999.00   +9.30   5.84     88   +7.40 1 1 1 3 1     0    0 1.52 -16.06 ZNESW 6.9 5.8 93.3 9.0 9.7 -25.4 9.5 -24.1 9.2 -22.1 9.5 -24.0
2026-04-16T01:27:02.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:27:02.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:27:02.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.976521
2026-04-16T01:27:02.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:27:02.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:27:02.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:27:02.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:27:02.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:27:02.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:26:40', tmtdew=1.75957, humidity=88.6585, cloud=0.0, wind=12.1399, temperature=8.69644, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:26:11.414', atlas_cloud=1, atlas_rain=1, zp_data=[3.5097499999999995, 0.9982500000000005, nan, nan, nan, nan, nan, 0.3562499999999993, 0.2284999999999986, 0.08000000000000007, 0.6607500000000002, 0.9669999999999996, 1.6064999999999996, 2.0142499999999997, 0.11999999999999922, -0.0030000000000001137, 0.036249999999999005, -0.0030000000000001137, 0.11149999999999949, 0.1322499999999991, 0.17599999999999838, 0.19674999999999798, 0.07125000000000092, -0.028249999999999886, -0.0065000000000008384, 0.08199999999999896, 0.03625000000000078, 0.025000000000000355, 0.05400000000000027, 0.12300000000000111, 0.10900000000000176, 0.030000000000001137, -0.03175000000000061], zp_timestamp='2026-04-15T23:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:27:02.170 [DEBUG] [Thread-29167] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:27:02.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:27:02.378 [DEBUG] [Thread-29170] [transport.py] [_log()] starting thread (client mode): 0xee954490
2026-04-16T01:27:02.379 [DEBUG] [Thread-29170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:27:02.393 [DEBUG] [Thread-29170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:27:02.393 [INFO] [Thread-29170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:27:02.401 [DEBUG] [Thread-29170] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:27:02.401 [DEBUG] [Thread-29170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:27:02.401 [DEBUG] [Thread-29170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:27:02.401 [DEBUG] [Thread-29170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:27:02.401 [DEBUG] [Thread-29170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:27:02.401 [DEBUG] [Thread-29170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:27:02.401 [DEBUG] [Thread-29170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:27:02.401 [DEBUG] [Thread-29170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:27:02.401 [DEBUG] [Thread-29170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:27:02.402 [DEBUG] [Thread-29170] [transport.py] [_log()] client lang: <none>
2026-04-16T01:27:02.402 [DEBUG] [Thread-29170] [transport.py] [_log()] server lang: <none>
2026-04-16T01:27:02.402 [DEBUG] [Thread-29170] [transport.py] [_log()] kex follows: False
2026-04-16T01:27:02.402 [DEBUG] [Thread-29170] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:27:02.402 [DEBUG] [Thread-29170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:27:02.402 [DEBUG] [Thread-29170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:27:02.402 [DEBUG] [Thread-29170] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:27:02.402 [DEBUG] [Thread-29170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:27:02.402 [DEBUG] [Thread-29170] [transport.py] [_log()] Compression: none
2026-04-16T01:27:02.402 [DEBUG] [Thread-29170] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:27:02.458 [DEBUG] [Thread-29170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:27:02.458 [DEBUG] [Thread-29170] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:27:02.459 [DEBUG] [Thread-29170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:27:02.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:27:02.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:27:02.514 [DEBUG] [Thread-29170] [transport.py] [_log()] userauth is OK
2026-04-16T01:27:02.514 [DEBUG] [Thread-29170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:27:02.515 [DEBUG] [Thread-29170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:27:02.515 [DEBUG] [Thread-29170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:27:02.515 [DEBUG] [Thread-29170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:27:02.540 [INFO] [Thread-29170] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:27:02.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:27:02.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:27:03.365 [DEBUG] [Thread-29170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:27:03.365 [DEBUG] [Thread-29170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:27:03.413 [DEBUG] [Thread-29170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:27:03.413 [DEBUG] [Thread-29170] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:27:03.422 [DEBUG] [Thread-29170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:27:03.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:27:03.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')
2026-04-16T01:27: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') -> 00000000
2026-04-16T01:27:03.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:27:03.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:27:03.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:27:03.457 [DEBUG] [Thread-29170] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:27:14.338 [DEBUG] [Thread-29172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:27:29.379 [DEBUG] [Thread-29173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:27:33.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:27:33.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:27:33.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
2026-04-16T01:27:34.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 27, 15), 1.97703, 87.346, 0.0, 9.72288, 8.99833, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:27:34.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:27:15
2026-04-16T01:27:35.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:27:35.509 [DEBUG] [Thread-29174] [transport.py] [_log()] starting thread (client mode): 0xee904640
2026-04-16T01:27:35.510 [DEBUG] [Thread-29174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:27:35.528 [DEBUG] [Thread-29174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:27:35.528 [INFO] [Thread-29174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:27:35.532 [DEBUG] [Thread-29174] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:27:35.532 [DEBUG] [Thread-29174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:27:35.532 [DEBUG] [Thread-29174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:27:35.532 [DEBUG] [Thread-29174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:27:35.532 [DEBUG] [Thread-29174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:27:35.532 [DEBUG] [Thread-29174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:27:35.532 [DEBUG] [Thread-29174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:27:35.532 [DEBUG] [Thread-29174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:27:35.532 [DEBUG] [Thread-29174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:27:35.532 [DEBUG] [Thread-29174] [transport.py] [_log()] client lang: <none>
2026-04-16T01:27:35.532 [DEBUG] [Thread-29174] [transport.py] [_log()] server lang: <none>
2026-04-16T01:27:35.533 [DEBUG] [Thread-29174] [transport.py] [_log()] kex follows: False
2026-04-16T01:27:35.533 [DEBUG] [Thread-29174] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:27:35.533 [DEBUG] [Thread-29174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:27:35.533 [DEBUG] [Thread-29174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:27:35.533 [DEBUG] [Thread-29174] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:27:35.533 [DEBUG] [Thread-29174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:27:35.533 [DEBUG] [Thread-29174] [transport.py] [_log()] Compression: none
2026-04-16T01:27:35.533 [DEBUG] [Thread-29174] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:27:35.549 [DEBUG] [Thread-29174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:27:35.550 [DEBUG] [Thread-29174] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:27:35.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:27:35.550 [DEBUG] [Thread-29174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:27:35.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:27:35.551 [DEBUG] [Thread-29174] [transport.py] [_log()] userauth is OK
2026-04-16T01:27:35.551 [DEBUG] [Thread-29174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:27:35.551 [DEBUG] [Thread-29174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:27:35.552 [DEBUG] [Thread-29174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:27:35.552 [DEBUG] [Thread-29174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:27:35.585 [INFO] [Thread-29174] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:27:35.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:27:36.396 [DEBUG] [Thread-29174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:27:36.397 [DEBUG] [Thread-29174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:27:36.397 [DEBUG] [Thread-29174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:27:36.438 [DEBUG] [Thread-29174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:27:36.438 [DEBUG] [Thread-29174] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:27:36.440 [DEBUG] [Thread-29174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:27:36.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:27:36.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:27:36.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:27:36.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:27:36.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:27:36.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:27:36.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:27:36.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:27:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:27:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.976868 -999.00   +9.30   8.72     88   +7.50 1 2 1 3 1     0    0 1.52 -15.18 .NESW 6.3 8.7 73.4 10.4 9.7 -25.2 9.5 -24.0 9.3 -21.9 9.5 -24.0
2026-04-16T01:27:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:27:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:27:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.976868
2026-04-16T01:27:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:27:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:27:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:27:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:27:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-16T01:27:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:27:15', tmtdew=1.97703, humidity=87.346, cloud=0.0, wind=9.72288, temperature=8.99833, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:26:41.395', atlas_cloud=2, atlas_rain=1, zp_data=[3.5097499999999995, 0.9982500000000005, nan, nan, nan, nan, nan, 0.3562499999999993, 0.2284999999999986, 0.08000000000000007, 0.6607500000000002, 0.9669999999999996, 1.6064999999999996, 2.0142499999999997, 0.11999999999999922, -0.0030000000000001137, 0.036249999999999005, -0.0030000000000001137, 0.11149999999999949, 0.1322499999999991, 0.17599999999999838, 0.19674999999999798, 0.07125000000000092, -0.028249999999999886, -0.0065000000000008384, 0.08199999999999896, 0.03625000000000078, 0.025000000000000355, 0.05400000000000027, 0.12300000000000111, 0.10900000000000176, 0.030000000000001137, -0.03175000000000061], zp_timestamp='2026-04-15T23:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:27:36.459 [DEBUG] [Thread-29174] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:27:36.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:27:36.669 [DEBUG] [Thread-29177] [transport.py] [_log()] starting thread (client mode): 0xee9eac80
2026-04-16T01:27:36.670 [DEBUG] [Thread-29177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:27:36.684 [DEBUG] [Thread-29177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:27:36.684 [INFO] [Thread-29177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:27:36.691 [DEBUG] [Thread-29177] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:27:36.691 [DEBUG] [Thread-29177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:27:36.691 [DEBUG] [Thread-29177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:27:36.691 [DEBUG] [Thread-29177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:27:36.691 [DEBUG] [Thread-29177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:27:36.692 [DEBUG] [Thread-29177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:27:36.692 [DEBUG] [Thread-29177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:27:36.692 [DEBUG] [Thread-29177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:27:36.692 [DEBUG] [Thread-29177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:27:36.692 [DEBUG] [Thread-29177] [transport.py] [_log()] client lang: <none>
2026-04-16T01:27:36.692 [DEBUG] [Thread-29177] [transport.py] [_log()] server lang: <none>
2026-04-16T01:27:36.692 [DEBUG] [Thread-29177] [transport.py] [_log()] kex follows: False
2026-04-16T01:27:36.692 [DEBUG] [Thread-29177] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:27:36.692 [DEBUG] [Thread-29177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:27:36.692 [DEBUG] [Thread-29177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:27:36.692 [DEBUG] [Thread-29177] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:27:36.692 [DEBUG] [Thread-29177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:27:36.693 [DEBUG] [Thread-29177] [transport.py] [_log()] Compression: none
2026-04-16T01:27:36.693 [DEBUG] [Thread-29177] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:27:36.749 [DEBUG] [Thread-29177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:27:36.749 [DEBUG] [Thread-29177] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:27:36.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:27:36.750 [DEBUG] [Thread-29177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:27:36.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:27:36.806 [DEBUG] [Thread-29177] [transport.py] [_log()] userauth is OK
2026-04-16T01:27:36.806 [DEBUG] [Thread-29177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:27:36.806 [DEBUG] [Thread-29177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:27:36.807 [DEBUG] [Thread-29177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:27:36.807 [DEBUG] [Thread-29177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:27:36.825 [INFO] [Thread-29177] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:27:36.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:27:36.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:27:37.631 [DEBUG] [Thread-29177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:27:37.631 [DEBUG] [Thread-29177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:27:37.679 [DEBUG] [Thread-29177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:27:37.679 [DEBUG] [Thread-29177] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:27:37.688 [DEBUG] [Thread-29177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:27:37.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:27:37.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')
2026-04-16T01:27:37.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
2026-04-16T01:27:37.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:27:37.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:27:37.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:27:37.723 [DEBUG] [Thread-29177] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:27:38.739 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:27:38.740 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:27:44.408 [DEBUG] [Thread-29179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:27:55.078 [DEBUG] [Thread-29180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:27:59.453 [DEBUG] [Thread-29181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:28:07.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:28:07.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:28:07.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
2026-04-16T01:28:09.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 27, 51), 1.7491, 88.7248, 0.0, 12.0341, 8.72956, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:28:09.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:27:51
2026-04-16T01:28:09.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:28:09.829 [DEBUG] [Thread-29182] [transport.py] [_log()] starting thread (client mode): 0xee954190
2026-04-16T01:28:09.829 [DEBUG] [Thread-29182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:28:09.848 [DEBUG] [Thread-29182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:28:09.849 [INFO] [Thread-29182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:28:09.852 [DEBUG] [Thread-29182] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:28:09.852 [DEBUG] [Thread-29182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:28:09.852 [DEBUG] [Thread-29182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:28:09.852 [DEBUG] [Thread-29182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:28:09.852 [DEBUG] [Thread-29182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:28:09.852 [DEBUG] [Thread-29182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:28:09.852 [DEBUG] [Thread-29182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:28:09.852 [DEBUG] [Thread-29182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:28:09.852 [DEBUG] [Thread-29182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:28:09.853 [DEBUG] [Thread-29182] [transport.py] [_log()] client lang: <none>
2026-04-16T01:28:09.853 [DEBUG] [Thread-29182] [transport.py] [_log()] server lang: <none>
2026-04-16T01:28:09.853 [DEBUG] [Thread-29182] [transport.py] [_log()] kex follows: False
2026-04-16T01:28:09.853 [DEBUG] [Thread-29182] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:28:09.853 [DEBUG] [Thread-29182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:28:09.853 [DEBUG] [Thread-29182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:28:09.853 [DEBUG] [Thread-29182] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:28:09.853 [DEBUG] [Thread-29182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:28:09.853 [DEBUG] [Thread-29182] [transport.py] [_log()] Compression: none
2026-04-16T01:28:09.853 [DEBUG] [Thread-29182] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:28:09.869 [DEBUG] [Thread-29182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:28:09.870 [DEBUG] [Thread-29182] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:28:09.870 [DEBUG] [Thread-29182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:28:09.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:28:09.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:28:09.871 [DEBUG] [Thread-29182] [transport.py] [_log()] userauth is OK
2026-04-16T01:28:09.871 [DEBUG] [Thread-29182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:28:09.871 [DEBUG] [Thread-29182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:28:09.871 [DEBUG] [Thread-29182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:28:09.871 [DEBUG] [Thread-29182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:28:09.884 [INFO] [Thread-29182] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:28:09.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:28:10.674 [DEBUG] [Thread-29182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:28:10.674 [DEBUG] [Thread-29182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:28:10.675 [DEBUG] [Thread-29182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:28:10.715 [DEBUG] [Thread-29182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:28:10.715 [DEBUG] [Thread-29182] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:28:10.718 [DEBUG] [Thread-29182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:28:10.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:28:10.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:28:10.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:28:10.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:28:10.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:28:10.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:28:10.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:28:10.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:28:10.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:28:10.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.977215 -999.00   +9.30   5.41     88   +7.40 1 2 1 3 1     0    0 1.57 -13.93 .NESW 4.3 5.4 43.8 9.1 9.7 -25.3 9.5 -24.0 9.2 -21.9 9.6 -24.0
2026-04-16T01:28:10.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:28:10.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:28:10.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.977215
2026-04-16T01:28:10.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:28:10.740 [DEBUG] [Thread-29182] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:28:10.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:28:10.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:28:10.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:28:10.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-16T01:28:10.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:27:51', tmtdew=1.7491, humidity=88.7248, cloud=0.0, wind=12.0341, temperature=8.72956, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:27:11.376', atlas_cloud=2, atlas_rain=1, zp_data=[3.41075, 2.72975, nan, nan, nan, nan, nan, 0.4892500000000002, 0.4634999999999998, 0.10549999999999926, 1.14675, 1.3129999999999997, nan, nan, 0.15850000000000009, -0.01699999999999946, 0.02024999999999899, 0.002000000000000668, 0.1374999999999993, 0.161249999999999, 0.16499999999999915, 0.23874999999999957, 0.051249999999999574, -0.043750000000001066, -0.021000000000000796, 0.09050000000000047, 0.03275000000000006, 0.04049999999999976, 0.0039999999999995595, 0.10300000000000153, 0.049000000000001265, -0.0015000000000000568, -0.10575000000000045], zp_timestamp='2026-04-15T23:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:28:10.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:28:10.995 [DEBUG] [Thread-29185] [transport.py] [_log()] starting thread (client mode): 0xf13cb3d0
2026-04-16T01:28:10.996 [DEBUG] [Thread-29185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:28:11.011 [DEBUG] [Thread-29185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:28:11.011 [INFO] [Thread-29185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:28:11.019 [DEBUG] [Thread-29185] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:28:11.019 [DEBUG] [Thread-29185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:28:11.019 [DEBUG] [Thread-29185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:28:11.019 [DEBUG] [Thread-29185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:28:11.019 [DEBUG] [Thread-29185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:28:11.019 [DEBUG] [Thread-29185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:28:11.019 [DEBUG] [Thread-29185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:28:11.019 [DEBUG] [Thread-29185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:28:11.019 [DEBUG] [Thread-29185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:28:11.020 [DEBUG] [Thread-29185] [transport.py] [_log()] client lang: <none>
2026-04-16T01:28:11.020 [DEBUG] [Thread-29185] [transport.py] [_log()] server lang: <none>
2026-04-16T01:28:11.020 [DEBUG] [Thread-29185] [transport.py] [_log()] kex follows: False
2026-04-16T01:28:11.020 [DEBUG] [Thread-29185] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:28:11.020 [DEBUG] [Thread-29185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:28:11.020 [DEBUG] [Thread-29185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:28:11.020 [DEBUG] [Thread-29185] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:28:11.020 [DEBUG] [Thread-29185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:28:11.020 [DEBUG] [Thread-29185] [transport.py] [_log()] Compression: none
2026-04-16T01:28:11.020 [DEBUG] [Thread-29185] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:28:11.078 [DEBUG] [Thread-29185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:28:11.078 [DEBUG] [Thread-29185] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:28:11.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:28:11.080 [DEBUG] [Thread-29185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:28:11.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:28:11.135 [DEBUG] [Thread-29185] [transport.py] [_log()] userauth is OK
2026-04-16T01:28:11.135 [DEBUG] [Thread-29185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:28:11.135 [DEBUG] [Thread-29185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:28:11.135 [DEBUG] [Thread-29185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:28:11.135 [DEBUG] [Thread-29185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:28:11.156 [INFO] [Thread-29185] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:28:11.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:28:11.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:28:11.989 [DEBUG] [Thread-29185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:28:11.989 [DEBUG] [Thread-29185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:28:12.037 [DEBUG] [Thread-29185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:28:12.037 [DEBUG] [Thread-29185] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:28:12.046 [DEBUG] [Thread-29185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:28:12.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:28:12.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')
2026-04-16T01:28:12.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
2026-04-16T01:28:12.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:28:12.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:28:12.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:28:12.081 [DEBUG] [Thread-29185] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:28:14.483 [DEBUG] [Thread-29187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:28:29.527 [DEBUG] [Thread-29188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:28:38.938 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:28:38.939 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:28:42.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:28:42.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:28:42.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
2026-04-16T01:28:43.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 28, 26), 1.97161, 87.379, 0.0, 9.72288, 8.99819, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:28:43.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:28:26
2026-04-16T01:28:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:28:44.236 [DEBUG] [Thread-29189] [transport.py] [_log()] starting thread (client mode): 0xf1365b10
2026-04-16T01:28:44.237 [DEBUG] [Thread-29189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:28:44.256 [DEBUG] [Thread-29189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:28:44.257 [INFO] [Thread-29189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:28:44.259 [DEBUG] [Thread-29189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:28:44.260 [DEBUG] [Thread-29189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:28:44.260 [DEBUG] [Thread-29189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:28:44.260 [DEBUG] [Thread-29189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:28:44.260 [DEBUG] [Thread-29189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:28:44.260 [DEBUG] [Thread-29189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:28:44.260 [DEBUG] [Thread-29189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:28:44.260 [DEBUG] [Thread-29189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:28:44.260 [DEBUG] [Thread-29189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:28:44.260 [DEBUG] [Thread-29189] [transport.py] [_log()] client lang: <none>
2026-04-16T01:28:44.260 [DEBUG] [Thread-29189] [transport.py] [_log()] server lang: <none>
2026-04-16T01:28:44.261 [DEBUG] [Thread-29189] [transport.py] [_log()] kex follows: False
2026-04-16T01:28:44.261 [DEBUG] [Thread-29189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:28:44.261 [DEBUG] [Thread-29189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:28:44.261 [DEBUG] [Thread-29189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:28:44.261 [DEBUG] [Thread-29189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:28:44.261 [DEBUG] [Thread-29189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:28:44.261 [DEBUG] [Thread-29189] [transport.py] [_log()] Compression: none
2026-04-16T01:28:44.261 [DEBUG] [Thread-29189] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:28:44.278 [DEBUG] [Thread-29189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:28:44.279 [DEBUG] [Thread-29189] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:28:44.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:28:44.279 [DEBUG] [Thread-29189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:28:44.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:28:44.280 [DEBUG] [Thread-29189] [transport.py] [_log()] userauth is OK
2026-04-16T01:28:44.280 [DEBUG] [Thread-29189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:28:44.280 [DEBUG] [Thread-29189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:28:44.281 [DEBUG] [Thread-29189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:28:44.281 [DEBUG] [Thread-29189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:28:44.298 [INFO] [Thread-29189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:28:44.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:28:44.559 [DEBUG] [Thread-29191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:28:45.073 [DEBUG] [Thread-29189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:28:45.073 [DEBUG] [Thread-29189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:28:45.074 [DEBUG] [Thread-29189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:28:45.114 [DEBUG] [Thread-29189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:28:45.114 [DEBUG] [Thread-29189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:28:45.117 [DEBUG] [Thread-29189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:28:45.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:28:45.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:28:45.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:28:45.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:28:45.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:28:45.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:28:45.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:28:45.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:28:45.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:28:45.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.977910 -999.00   +9.30   6.15     88   +7.40 1 1 1 3 1     0    0 1.64 -12.20 .NESW 6.1 6.2 76.8 8.7 9.6 -25.4 9.5 -24.1 9.2 -22.0 9.5 -23.9
2026-04-16T01:28:45.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:28:45.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:28:45.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.977910
2026-04-16T01:28:45.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:28:45.140 [DEBUG] [Thread-29189] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:28:45.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:28:45.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:28:45.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:28:45.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:28:45.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:28:26', tmtdew=1.97161, humidity=87.379, cloud=0.0, wind=9.72288, temperature=8.99819, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:28:11.424', atlas_cloud=1, atlas_rain=1, zp_data=[3.41075, 2.72975, nan, nan, nan, nan, nan, 0.4892500000000002, 0.4634999999999998, 0.10549999999999926, 1.14675, 1.3129999999999997, nan, nan, 0.15850000000000009, -0.01699999999999946, 0.02024999999999899, 0.002000000000000668, 0.1374999999999993, 0.161249999999999, 0.16499999999999915, 0.23874999999999957, 0.051249999999999574, -0.043750000000001066, -0.021000000000000796, 0.09050000000000047, 0.03275000000000006, 0.04049999999999976, 0.0039999999999995595, 0.10300000000000153, 0.049000000000001265, -0.0015000000000000568, -0.10575000000000045], zp_timestamp='2026-04-15T23:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:28:45.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:28:45.396 [DEBUG] [Thread-29193] [transport.py] [_log()] starting thread (client mode): 0xf1367940
2026-04-16T01:28:45.396 [DEBUG] [Thread-29193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:28:45.411 [DEBUG] [Thread-29193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:28:45.411 [INFO] [Thread-29193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:28:45.418 [DEBUG] [Thread-29193] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:28:45.418 [DEBUG] [Thread-29193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:28:45.418 [DEBUG] [Thread-29193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:28:45.418 [DEBUG] [Thread-29193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:28:45.419 [DEBUG] [Thread-29193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:28:45.419 [DEBUG] [Thread-29193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:28:45.419 [DEBUG] [Thread-29193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:28:45.419 [DEBUG] [Thread-29193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:28:45.419 [DEBUG] [Thread-29193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:28:45.419 [DEBUG] [Thread-29193] [transport.py] [_log()] client lang: <none>
2026-04-16T01:28:45.419 [DEBUG] [Thread-29193] [transport.py] [_log()] server lang: <none>
2026-04-16T01:28:45.419 [DEBUG] [Thread-29193] [transport.py] [_log()] kex follows: False
2026-04-16T01:28:45.419 [DEBUG] [Thread-29193] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:28:45.419 [DEBUG] [Thread-29193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:28:45.419 [DEBUG] [Thread-29193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:28:45.420 [DEBUG] [Thread-29193] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:28:45.420 [DEBUG] [Thread-29193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:28:45.420 [DEBUG] [Thread-29193] [transport.py] [_log()] Compression: none
2026-04-16T01:28:45.420 [DEBUG] [Thread-29193] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:28:45.478 [DEBUG] [Thread-29193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:28:45.479 [DEBUG] [Thread-29193] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:28:45.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:28:45.480 [DEBUG] [Thread-29193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:28:45.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:28:45.535 [DEBUG] [Thread-29193] [transport.py] [_log()] userauth is OK
2026-04-16T01:28:45.535 [DEBUG] [Thread-29193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:28:45.535 [DEBUG] [Thread-29193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:28:45.535 [DEBUG] [Thread-29193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:28:45.535 [DEBUG] [Thread-29193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:28:45.560 [INFO] [Thread-29193] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:28:45.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:28:45.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:28:46.387 [DEBUG] [Thread-29193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:28:46.387 [DEBUG] [Thread-29193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:28:46.434 [DEBUG] [Thread-29193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:28:46.434 [DEBUG] [Thread-29193] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:28:46.443 [DEBUG] [Thread-29193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:28:46.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:28:46.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')
2026-04-16T01:28:46.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
2026-04-16T01:28:46.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:28:46.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:28:46.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:28:46.475 [DEBUG] [Thread-29193] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:28:55.225 [DEBUG] [Thread-29195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:28:59.588 [DEBUG] [Thread-29196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:29:14.633 [DEBUG] [Thread-29197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:29:16.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:29:16.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:29:16.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
2026-04-16T01:29:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 29, 2), 1.96093, 87.4453, 0.0, 9.81108, 9.01478, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:29:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:29:02
2026-04-16T01:29:18.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:29:18.643 [DEBUG] [Thread-29198] [transport.py] [_log()] starting thread (client mode): 0xee906bc0
2026-04-16T01:29:18.643 [DEBUG] [Thread-29198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:29:18.663 [DEBUG] [Thread-29198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:29:18.663 [INFO] [Thread-29198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:29:18.666 [DEBUG] [Thread-29198] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:29:18.666 [DEBUG] [Thread-29198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:29:18.666 [DEBUG] [Thread-29198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:29:18.666 [DEBUG] [Thread-29198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:29:18.666 [DEBUG] [Thread-29198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:29:18.667 [DEBUG] [Thread-29198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:29:18.667 [DEBUG] [Thread-29198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:29:18.667 [DEBUG] [Thread-29198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:29:18.667 [DEBUG] [Thread-29198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:29:18.667 [DEBUG] [Thread-29198] [transport.py] [_log()] client lang: <none>
2026-04-16T01:29:18.667 [DEBUG] [Thread-29198] [transport.py] [_log()] server lang: <none>
2026-04-16T01:29:18.667 [DEBUG] [Thread-29198] [transport.py] [_log()] kex follows: False
2026-04-16T01:29:18.667 [DEBUG] [Thread-29198] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:29:18.667 [DEBUG] [Thread-29198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:29:18.667 [DEBUG] [Thread-29198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:29:18.667 [DEBUG] [Thread-29198] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:29:18.668 [DEBUG] [Thread-29198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:29:18.668 [DEBUG] [Thread-29198] [transport.py] [_log()] Compression: none
2026-04-16T01:29:18.668 [DEBUG] [Thread-29198] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:29:18.684 [DEBUG] [Thread-29198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:29:18.685 [DEBUG] [Thread-29198] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:29:18.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:29:18.685 [DEBUG] [Thread-29198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:29:18.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:29:18.728 [DEBUG] [Thread-29198] [transport.py] [_log()] userauth is OK
2026-04-16T01:29:18.728 [DEBUG] [Thread-29198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:29:18.728 [DEBUG] [Thread-29198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:29:18.729 [DEBUG] [Thread-29198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:29:18.729 [DEBUG] [Thread-29198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:29:18.753 [INFO] [Thread-29198] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:29:18.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:29:19.561 [DEBUG] [Thread-29198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:29:19.562 [DEBUG] [Thread-29198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:29:19.562 [DEBUG] [Thread-29198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:29:19.602 [DEBUG] [Thread-29198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:29:19.602 [DEBUG] [Thread-29198] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:29:19.605 [DEBUG] [Thread-29198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:29:19.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:29:19.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:29:19.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:29:19.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:29:19.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:29:19.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:29:19.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:29:19.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:29:19.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:29:19.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.978257 -999.00   +9.30   3.54     88   +7.40 1 2 1 3 1     0    0 1.62 -11.83 .NESW 4.9 3.5 107.2 8.5 9.6 -25.3 9.5 -24.1 9.2 -21.9 9.5 -24.2
2026-04-16T01:29:19.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:29:19.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:29:19.629 [DEBUG] [Thread-29198] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:29:19.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.978257
2026-04-16T01:29:19.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:29:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:29:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:29:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:29:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-16T01:29:19.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:29:02', tmtdew=1.96093, humidity=87.4453, cloud=0.0, wind=9.81108, temperature=9.01478, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:28:41.405', atlas_cloud=2, atlas_rain=1, zp_data=[3.41075, 2.72975, nan, nan, nan, nan, nan, 0.4892500000000002, 0.4634999999999998, 0.10549999999999926, 1.14675, 1.3129999999999997, nan, nan, 0.15850000000000009, -0.01699999999999946, 0.02024999999999899, 0.002000000000000668, 0.1374999999999993, 0.161249999999999, 0.16499999999999915, 0.23874999999999957, 0.051249999999999574, -0.043750000000001066, -0.021000000000000796, 0.09050000000000047, 0.03275000000000006, 0.04049999999999976, 0.0039999999999995595, 0.10300000000000153, 0.049000000000001265, -0.0015000000000000568, -0.10575000000000045], zp_timestamp='2026-04-15T23:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:29:19.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:29:19.890 [DEBUG] [Thread-29201] [transport.py] [_log()] starting thread (client mode): 0xf13c8700
2026-04-16T01:29:19.890 [DEBUG] [Thread-29201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:29:19.905 [DEBUG] [Thread-29201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:29:19.905 [INFO] [Thread-29201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:29:19.912 [DEBUG] [Thread-29201] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:29:19.912 [DEBUG] [Thread-29201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:29:19.912 [DEBUG] [Thread-29201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:29:19.913 [DEBUG] [Thread-29201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:29:19.913 [DEBUG] [Thread-29201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:29:19.913 [DEBUG] [Thread-29201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:29:19.913 [DEBUG] [Thread-29201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:29:19.913 [DEBUG] [Thread-29201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:29:19.913 [DEBUG] [Thread-29201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:29:19.913 [DEBUG] [Thread-29201] [transport.py] [_log()] client lang: <none>
2026-04-16T01:29:19.913 [DEBUG] [Thread-29201] [transport.py] [_log()] server lang: <none>
2026-04-16T01:29:19.913 [DEBUG] [Thread-29201] [transport.py] [_log()] kex follows: False
2026-04-16T01:29:19.913 [DEBUG] [Thread-29201] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:29:19.913 [DEBUG] [Thread-29201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:29:19.914 [DEBUG] [Thread-29201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:29:19.914 [DEBUG] [Thread-29201] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:29:19.914 [DEBUG] [Thread-29201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:29:19.914 [DEBUG] [Thread-29201] [transport.py] [_log()] Compression: none
2026-04-16T01:29:19.914 [DEBUG] [Thread-29201] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:29:19.970 [DEBUG] [Thread-29201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:29:19.970 [DEBUG] [Thread-29201] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:29:19.971 [DEBUG] [Thread-29201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:29:19.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:29:19.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:29:20.026 [DEBUG] [Thread-29201] [transport.py] [_log()] userauth is OK
2026-04-16T01:29:20.027 [DEBUG] [Thread-29201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:29:20.027 [DEBUG] [Thread-29201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:29:20.027 [DEBUG] [Thread-29201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:29:20.027 [DEBUG] [Thread-29201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:29:20.050 [INFO] [Thread-29201] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:29:20.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:29:20.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:29:20.876 [DEBUG] [Thread-29201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:29:20.876 [DEBUG] [Thread-29201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:29:20.924 [DEBUG] [Thread-29201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:29:20.924 [DEBUG] [Thread-29201] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:29:20.933 [DEBUG] [Thread-29201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:29:20.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:29: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')
2026-04-16T01:29: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
2026-04-16T01:29:20.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:29:20.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:29:20.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:29:20.969 [DEBUG] [Thread-29201] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:29:29.664 [DEBUG] [Thread-29203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:29:39.141 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:29:39.142 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:29:44.702 [DEBUG] [Thread-29204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:29:50.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:29:50.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:29:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T01:29:52.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 29, 37), 1.72725, 88.8579, 0.0, 12.4222, 8.72981, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:29:52.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:29:37
2026-04-16T01:29:52.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:29:53.054 [DEBUG] [Thread-29205] [transport.py] [_log()] starting thread (client mode): 0xee9eb8e0
2026-04-16T01:29:53.054 [DEBUG] [Thread-29205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:29:53.076 [DEBUG] [Thread-29205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:29:53.076 [INFO] [Thread-29205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:29:53.079 [DEBUG] [Thread-29205] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:29:53.079 [DEBUG] [Thread-29205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:29:53.079 [DEBUG] [Thread-29205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:29:53.079 [DEBUG] [Thread-29205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:29:53.079 [DEBUG] [Thread-29205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:29:53.079 [DEBUG] [Thread-29205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:29:53.079 [DEBUG] [Thread-29205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:29:53.080 [DEBUG] [Thread-29205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:29:53.080 [DEBUG] [Thread-29205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:29:53.080 [DEBUG] [Thread-29205] [transport.py] [_log()] client lang: <none>
2026-04-16T01:29:53.080 [DEBUG] [Thread-29205] [transport.py] [_log()] server lang: <none>
2026-04-16T01:29:53.080 [DEBUG] [Thread-29205] [transport.py] [_log()] kex follows: False
2026-04-16T01:29:53.080 [DEBUG] [Thread-29205] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:29:53.080 [DEBUG] [Thread-29205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:29:53.080 [DEBUG] [Thread-29205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:29:53.080 [DEBUG] [Thread-29205] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:29:53.080 [DEBUG] [Thread-29205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:29:53.080 [DEBUG] [Thread-29205] [transport.py] [_log()] Compression: none
2026-04-16T01:29:53.081 [DEBUG] [Thread-29205] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:29:53.097 [DEBUG] [Thread-29205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:29:53.098 [DEBUG] [Thread-29205] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:29:53.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:29:53.098 [DEBUG] [Thread-29205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:29:53.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:29:53.100 [DEBUG] [Thread-29205] [transport.py] [_log()] userauth is OK
2026-04-16T01:29:53.100 [DEBUG] [Thread-29205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:29:53.100 [DEBUG] [Thread-29205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:29:53.100 [DEBUG] [Thread-29205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:29:53.100 [DEBUG] [Thread-29205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:29:53.125 [INFO] [Thread-29205] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:29:53.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:29:53.911 [DEBUG] [Thread-29205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:29:53.911 [DEBUG] [Thread-29205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:29:53.912 [DEBUG] [Thread-29205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:29:53.952 [DEBUG] [Thread-29205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:29:53.952 [DEBUG] [Thread-29205] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:29:53.955 [DEBUG] [Thread-29205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:29:53.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:29:53.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:29:53.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:29:53.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:29:53.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:29:53.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:29:53.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:29:53.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:29:53.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:29:53.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.978604 -999.00   +9.30   7.77     88   +7.40 1 2 1 3 1     0    0 1.57 -12.24 .NESW 8.5 7.8 64.8 10.9 9.7 -25.4 9.5 -24.1 9.2 -21.9 9.5 -24.2
2026-04-16T01:29:53.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:29:53.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:29:53.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.978604
2026-04-16T01:29:53.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:29:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:29:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:29:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:29:53.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-16T01:29:53.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:29:37', tmtdew=1.72725, humidity=88.8579, cloud=0.0, wind=12.4222, temperature=8.72981, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:29:11.386', atlas_cloud=2, atlas_rain=1, zp_data=[3.41075, 2.72975, nan, nan, nan, nan, nan, 0.4892500000000002, 0.4634999999999998, 0.10549999999999926, 1.14675, 1.3129999999999997, nan, nan, 0.15850000000000009, -0.01699999999999946, 0.02024999999999899, 0.002000000000000668, 0.1374999999999993, 0.161249999999999, 0.16499999999999915, 0.23874999999999957, 0.051249999999999574, -0.043750000000001066, -0.021000000000000796, 0.09050000000000047, 0.03275000000000006, 0.04049999999999976, 0.0039999999999995595, 0.10300000000000153, 0.049000000000001265, -0.0015000000000000568, -0.10575000000000045], zp_timestamp='2026-04-15T23:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:29:53.980 [DEBUG] [Thread-29205] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:29:54.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:29:54.235 [DEBUG] [Thread-29208] [transport.py] [_log()] starting thread (client mode): 0xee9ea3b0
2026-04-16T01:29:54.235 [DEBUG] [Thread-29208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:29:54.250 [DEBUG] [Thread-29208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:29:54.250 [INFO] [Thread-29208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:29:54.257 [DEBUG] [Thread-29208] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:29:54.257 [DEBUG] [Thread-29208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:29:54.257 [DEBUG] [Thread-29208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:29:54.257 [DEBUG] [Thread-29208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:29:54.257 [DEBUG] [Thread-29208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:29:54.258 [DEBUG] [Thread-29208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:29:54.258 [DEBUG] [Thread-29208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:29:54.258 [DEBUG] [Thread-29208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:29:54.258 [DEBUG] [Thread-29208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:29:54.258 [DEBUG] [Thread-29208] [transport.py] [_log()] client lang: <none>
2026-04-16T01:29:54.258 [DEBUG] [Thread-29208] [transport.py] [_log()] server lang: <none>
2026-04-16T01:29:54.258 [DEBUG] [Thread-29208] [transport.py] [_log()] kex follows: False
2026-04-16T01:29:54.258 [DEBUG] [Thread-29208] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:29:54.258 [DEBUG] [Thread-29208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:29:54.258 [DEBUG] [Thread-29208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:29:54.258 [DEBUG] [Thread-29208] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:29:54.259 [DEBUG] [Thread-29208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:29:54.259 [DEBUG] [Thread-29208] [transport.py] [_log()] Compression: none
2026-04-16T01:29:54.259 [DEBUG] [Thread-29208] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:29:54.318 [DEBUG] [Thread-29208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:29:54.319 [DEBUG] [Thread-29208] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:29:54.319 [DEBUG] [Thread-29208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:29:54.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:29:54.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:29:54.375 [DEBUG] [Thread-29208] [transport.py] [_log()] userauth is OK
2026-04-16T01:29:54.375 [DEBUG] [Thread-29208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:29:54.375 [DEBUG] [Thread-29208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:29:54.376 [DEBUG] [Thread-29208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:29:54.376 [DEBUG] [Thread-29208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:29:54.402 [INFO] [Thread-29208] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:29:54.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:29:54.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:29:55.209 [DEBUG] [Thread-29208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:29:55.210 [DEBUG] [Thread-29208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:29:55.256 [DEBUG] [Thread-29208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:29:55.257 [DEBUG] [Thread-29208] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:29:55.265 [DEBUG] [Thread-29208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:29:55.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:29:55.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')
2026-04-16T01:29:55.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
2026-04-16T01:29:55.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:29:55.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:29:55.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:29:55.297 [DEBUG] [Thread-29208] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:29:55.388 [DEBUG] [Thread-29210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:29:59.732 [DEBUG] [Thread-29211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:30:14.776 [DEBUG] [Thread-29212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:30:25.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:30:25.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:30:25.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T01:30:26.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 30, 13), 1.96825, 87.3955, 0.0, 9.65232, 8.9484, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:30:26.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:30:13
2026-04-16T01:30:26.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:30:27.399 [DEBUG] [Thread-29213] [transport.py] [_log()] starting thread (client mode): 0xee933910
2026-04-16T01:30:27.399 [DEBUG] [Thread-29213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:30:27.419 [DEBUG] [Thread-29213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:30:27.419 [INFO] [Thread-29213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:30:27.422 [DEBUG] [Thread-29213] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:30:27.422 [DEBUG] [Thread-29213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:30:27.422 [DEBUG] [Thread-29213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:30:27.422 [DEBUG] [Thread-29213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:30:27.422 [DEBUG] [Thread-29213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:30:27.423 [DEBUG] [Thread-29213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:30:27.423 [DEBUG] [Thread-29213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:30:27.423 [DEBUG] [Thread-29213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:30:27.423 [DEBUG] [Thread-29213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:30:27.423 [DEBUG] [Thread-29213] [transport.py] [_log()] client lang: <none>
2026-04-16T01:30:27.423 [DEBUG] [Thread-29213] [transport.py] [_log()] server lang: <none>
2026-04-16T01:30:27.423 [DEBUG] [Thread-29213] [transport.py] [_log()] kex follows: False
2026-04-16T01:30:27.423 [DEBUG] [Thread-29213] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:30:27.423 [DEBUG] [Thread-29213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:30:27.423 [DEBUG] [Thread-29213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:30:27.423 [DEBUG] [Thread-29213] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:30:27.423 [DEBUG] [Thread-29213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:30:27.424 [DEBUG] [Thread-29213] [transport.py] [_log()] Compression: none
2026-04-16T01:30:27.424 [DEBUG] [Thread-29213] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:30:27.442 [DEBUG] [Thread-29213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:30:27.442 [DEBUG] [Thread-29213] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:30:27.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:30:27.443 [DEBUG] [Thread-29213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:30:27.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:30:27.484 [DEBUG] [Thread-29213] [transport.py] [_log()] userauth is OK
2026-04-16T01:30:27.484 [DEBUG] [Thread-29213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:30:27.485 [DEBUG] [Thread-29213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:30:27.485 [DEBUG] [Thread-29213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:30:27.485 [DEBUG] [Thread-29213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:30:27.510 [INFO] [Thread-29213] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:30:27.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:30:29.807 [DEBUG] [Thread-29215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:30:29.979 [DEBUG] [Thread-29213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:30:29.979 [DEBUG] [Thread-29213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:30:29.980 [DEBUG] [Thread-29213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:30:30.020 [DEBUG] [Thread-29213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:30:30.020 [DEBUG] [Thread-29213] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:30:30.023 [DEBUG] [Thread-29213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:30:30.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:30:30.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:30:30.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:30:30.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:30:30.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:30:30.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:30:30.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:30:30.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:30:30.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:30:30.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.978951 -999.00   +9.30   5.83     88   +7.50 1 2 1 3 1     0    0 1.62 -11.16 .NESW 5.6 5.8 79.3 9.7 9.6 -25.4 9.5 -24.1 9.2 -21.9 9.5 -24.2
2026-04-16T01:30:30.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:30:30.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:30:30.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.978951
2026-04-16T01:30:30.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:30:30.048 [DEBUG] [Thread-29213] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:30:30.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:30:30.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:30:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:30:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-16T01:30:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:30:13', tmtdew=1.96825, humidity=87.3955, cloud=0.0, wind=9.65232, temperature=8.9484, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:29:41.366', atlas_cloud=2, atlas_rain=1, zp_data=[3.41075, 2.72975, nan, nan, nan, nan, nan, 0.4892500000000002, 0.4634999999999998, 0.10549999999999926, 1.14675, 1.3129999999999997, nan, nan, 0.15850000000000009, -0.01699999999999946, 0.02024999999999899, 0.002000000000000668, 0.1374999999999993, 0.161249999999999, 0.16499999999999915, 0.23874999999999957, 0.051249999999999574, -0.043750000000001066, -0.021000000000000796, 0.09050000000000047, 0.03275000000000006, 0.04049999999999976, 0.0039999999999995595, 0.10300000000000153, 0.049000000000001265, -0.0015000000000000568, -0.10575000000000045], zp_timestamp='2026-04-15T23:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:30:30.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:30:30.286 [DEBUG] [Thread-29217] [transport.py] [_log()] starting thread (client mode): 0xee932dd0
2026-04-16T01:30:30.286 [DEBUG] [Thread-29217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:30:30.300 [DEBUG] [Thread-29217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:30:30.300 [INFO] [Thread-29217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:30:30.307 [DEBUG] [Thread-29217] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:30:30.308 [DEBUG] [Thread-29217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:30:30.308 [DEBUG] [Thread-29217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:30:30.308 [DEBUG] [Thread-29217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:30:30.308 [DEBUG] [Thread-29217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:30:30.308 [DEBUG] [Thread-29217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:30:30.308 [DEBUG] [Thread-29217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:30:30.308 [DEBUG] [Thread-29217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:30:30.308 [DEBUG] [Thread-29217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:30:30.308 [DEBUG] [Thread-29217] [transport.py] [_log()] client lang: <none>
2026-04-16T01:30:30.308 [DEBUG] [Thread-29217] [transport.py] [_log()] server lang: <none>
2026-04-16T01:30:30.308 [DEBUG] [Thread-29217] [transport.py] [_log()] kex follows: False
2026-04-16T01:30:30.308 [DEBUG] [Thread-29217] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:30:30.309 [DEBUG] [Thread-29217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:30:30.309 [DEBUG] [Thread-29217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:30:30.309 [DEBUG] [Thread-29217] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:30:30.309 [DEBUG] [Thread-29217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:30:30.309 [DEBUG] [Thread-29217] [transport.py] [_log()] Compression: none
2026-04-16T01:30:30.309 [DEBUG] [Thread-29217] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:30:30.366 [DEBUG] [Thread-29217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:30:30.366 [DEBUG] [Thread-29217] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:30:30.367 [DEBUG] [Thread-29217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:30:30.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:30:30.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:30:30.423 [DEBUG] [Thread-29217] [transport.py] [_log()] userauth is OK
2026-04-16T01:30:30.423 [DEBUG] [Thread-29217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:30:30.423 [DEBUG] [Thread-29217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:30:30.423 [DEBUG] [Thread-29217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:30:30.423 [DEBUG] [Thread-29217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:30:30.448 [INFO] [Thread-29217] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:30:30.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:30:30.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:30:31.285 [DEBUG] [Thread-29217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:30:31.285 [DEBUG] [Thread-29217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:30:31.333 [DEBUG] [Thread-29217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:30:31.333 [DEBUG] [Thread-29217] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:30:31.342 [DEBUG] [Thread-29217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:30:31.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:30:31.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')
2026-04-16T01:30:31.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') -> 00000000
2026-04-16T01:30:31.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:30:31.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:30:31.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:30:31.376 [DEBUG] [Thread-29217] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:30:39.347 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:30:39.348 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:30:44.839 [DEBUG] [Thread-29219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:30:55.545 [DEBUG] [Thread-29220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:30:59.883 [DEBUG] [Thread-29221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:31:01.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:31:01.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:31: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
2026-04-16T01:31:02.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 30, 49), 1.71014, 88.957, 0.0, 12.281, 8.66316, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:31:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:30:49
2026-04-16T01:31:03.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:31:03.594 [DEBUG] [Thread-29222] [transport.py] [_log()] starting thread (client mode): 0xee9eb130
2026-04-16T01:31:03.594 [DEBUG] [Thread-29222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:31:03.616 [DEBUG] [Thread-29222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:31:03.616 [INFO] [Thread-29222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:31:03.618 [DEBUG] [Thread-29222] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:31:03.618 [DEBUG] [Thread-29222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:31:03.618 [DEBUG] [Thread-29222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:31:03.618 [DEBUG] [Thread-29222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:31:03.619 [DEBUG] [Thread-29222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:31:03.619 [DEBUG] [Thread-29222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:31:03.619 [DEBUG] [Thread-29222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:31:03.619 [DEBUG] [Thread-29222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:31:03.619 [DEBUG] [Thread-29222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:31:03.619 [DEBUG] [Thread-29222] [transport.py] [_log()] client lang: <none>
2026-04-16T01:31:03.619 [DEBUG] [Thread-29222] [transport.py] [_log()] server lang: <none>
2026-04-16T01:31:03.619 [DEBUG] [Thread-29222] [transport.py] [_log()] kex follows: False
2026-04-16T01:31:03.619 [DEBUG] [Thread-29222] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:31:03.619 [DEBUG] [Thread-29222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:31:03.619 [DEBUG] [Thread-29222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:31:03.620 [DEBUG] [Thread-29222] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:31:03.620 [DEBUG] [Thread-29222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:31:03.620 [DEBUG] [Thread-29222] [transport.py] [_log()] Compression: none
2026-04-16T01:31:03.620 [DEBUG] [Thread-29222] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:31:03.633 [DEBUG] [Thread-29222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:31:03.633 [DEBUG] [Thread-29222] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:31:03.633 [DEBUG] [Thread-29222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:31:03.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:31:03.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:31:03.634 [DEBUG] [Thread-29222] [transport.py] [_log()] userauth is OK
2026-04-16T01:31:03.634 [DEBUG] [Thread-29222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:31:03.635 [DEBUG] [Thread-29222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:31:03.635 [DEBUG] [Thread-29222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:31:03.635 [DEBUG] [Thread-29222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:31:03.651 [INFO] [Thread-29222] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:31:03.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:31:04.391 [DEBUG] [Thread-29222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:31:04.391 [DEBUG] [Thread-29222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:31:04.392 [DEBUG] [Thread-29222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:31:04.433 [DEBUG] [Thread-29222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:31:04.433 [DEBUG] [Thread-29222] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:31:04.435 [DEBUG] [Thread-29222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:31:04.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:31:04.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:31:04.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:31:04.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:31:04.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:31:04.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:31:04.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:31:04.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:31:04.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:31:04.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.979298 -999.00   +9.30   5.18     88   +7.40 1 1 1 3 1     0    0 1.62 -11.03 .NESW 6.5 5.2 86.1 8.5 9.7 -25.3 9.5 -24.2 9.2 -22.0 9.5 -24.2
2026-04-16T01:31:04.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:31:04.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:31:04.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.979298
2026-04-16T01:31:04.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:31:04.462 [DEBUG] [Thread-29222] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:31:04.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:31:04.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:31:04.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:31:04.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:31:04.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:30:49', tmtdew=1.71014, humidity=88.957, cloud=0.0, wind=12.281, temperature=8.66316, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:30:11.347', atlas_cloud=1, atlas_rain=1, zp_data=[3.290749999999999, nan, nan, nan, nan, nan, nan, 1.5642500000000004, 1.0559999999999992, 0.20199999999999996, 1.6827499999999995, 1.6349999999999998, nan, nan, 0.30299999999999905, 0.027999999999998693, 0.034250000000000114, 0.016500000000000625, 0.18299999999999983, 0.1997499999999981, 0.18099999999999916, 0.21674999999999933, 0.052250000000000796, -0.04225000000000101, -0.0129999999999999, 0.04449999999999932, 0.024750000000000938, -0.015499999999999403, 0.013999999999999346, 0.0710000000000015, 0.07800000000000118, -0.0009999999999994458, -0.07475000000000165], zp_timestamp='2026-04-15T23:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:31:04.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:31:04.716 [DEBUG] [Thread-29225] [transport.py] [_log()] starting thread (client mode): 0xf13c8160
2026-04-16T01:31:04.716 [DEBUG] [Thread-29225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:31:04.731 [DEBUG] [Thread-29225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:31:04.731 [INFO] [Thread-29225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:31:04.738 [DEBUG] [Thread-29225] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:31:04.738 [DEBUG] [Thread-29225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:31:04.738 [DEBUG] [Thread-29225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:31:04.738 [DEBUG] [Thread-29225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:31:04.739 [DEBUG] [Thread-29225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:31:04.739 [DEBUG] [Thread-29225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:31:04.739 [DEBUG] [Thread-29225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:31:04.739 [DEBUG] [Thread-29225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:31:04.739 [DEBUG] [Thread-29225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:31:04.739 [DEBUG] [Thread-29225] [transport.py] [_log()] client lang: <none>
2026-04-16T01:31:04.739 [DEBUG] [Thread-29225] [transport.py] [_log()] server lang: <none>
2026-04-16T01:31:04.739 [DEBUG] [Thread-29225] [transport.py] [_log()] kex follows: False
2026-04-16T01:31:04.739 [DEBUG] [Thread-29225] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:31:04.739 [DEBUG] [Thread-29225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:31:04.739 [DEBUG] [Thread-29225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:31:04.739 [DEBUG] [Thread-29225] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:31:04.740 [DEBUG] [Thread-29225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:31:04.740 [DEBUG] [Thread-29225] [transport.py] [_log()] Compression: none
2026-04-16T01:31:04.740 [DEBUG] [Thread-29225] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:31:04.794 [DEBUG] [Thread-29225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:31:04.795 [DEBUG] [Thread-29225] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:31:04.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:31:04.795 [DEBUG] [Thread-29225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:31:04.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:31:04.851 [DEBUG] [Thread-29225] [transport.py] [_log()] userauth is OK
2026-04-16T01:31:04.851 [DEBUG] [Thread-29225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:31:04.851 [DEBUG] [Thread-29225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:31:04.851 [DEBUG] [Thread-29225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:31:04.851 [DEBUG] [Thread-29225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:31:04.879 [INFO] [Thread-29225] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:31:04.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:31:04.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:31:05.768 [DEBUG] [Thread-29225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:31:05.768 [DEBUG] [Thread-29225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:31:05.816 [DEBUG] [Thread-29225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:31:05.816 [DEBUG] [Thread-29225] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:31:05.825 [DEBUG] [Thread-29225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:31:05.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:31:05.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')
2026-04-16T01:31:05.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
2026-04-16T01:31:05.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:31:05.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:31:05.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:31:05.859 [DEBUG] [Thread-29225] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:31:14.916 [DEBUG] [Thread-29227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:31:29.959 [DEBUG] [Thread-29228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:31:35.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:31:35.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:31:35.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T01:31:37.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 31, 24), 1.95256, 87.4951, 0.0, 9.93456, 8.99817, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:31:37.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:31:24
2026-04-16T01:31:37.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:31:38.001 [DEBUG] [Thread-29229] [transport.py] [_log()] starting thread (client mode): 0xf13345b0
2026-04-16T01:31:38.001 [DEBUG] [Thread-29229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:31:38.022 [DEBUG] [Thread-29229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:31:38.022 [INFO] [Thread-29229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:31:38.025 [DEBUG] [Thread-29229] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:31:38.025 [DEBUG] [Thread-29229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:31:38.025 [DEBUG] [Thread-29229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:31:38.026 [DEBUG] [Thread-29229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:31:38.026 [DEBUG] [Thread-29229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:31:38.026 [DEBUG] [Thread-29229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:31:38.026 [DEBUG] [Thread-29229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:31:38.026 [DEBUG] [Thread-29229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:31:38.026 [DEBUG] [Thread-29229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:31:38.026 [DEBUG] [Thread-29229] [transport.py] [_log()] client lang: <none>
2026-04-16T01:31:38.026 [DEBUG] [Thread-29229] [transport.py] [_log()] server lang: <none>
2026-04-16T01:31:38.026 [DEBUG] [Thread-29229] [transport.py] [_log()] kex follows: False
2026-04-16T01:31:38.026 [DEBUG] [Thread-29229] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:31:38.026 [DEBUG] [Thread-29229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:31:38.026 [DEBUG] [Thread-29229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:31:38.026 [DEBUG] [Thread-29229] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:31:38.027 [DEBUG] [Thread-29229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:31:38.027 [DEBUG] [Thread-29229] [transport.py] [_log()] Compression: none
2026-04-16T01:31:38.027 [DEBUG] [Thread-29229] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:31:38.043 [DEBUG] [Thread-29229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:31:38.043 [DEBUG] [Thread-29229] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:31:38.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:31:38.044 [DEBUG] [Thread-29229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:31:38.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:31:38.045 [DEBUG] [Thread-29229] [transport.py] [_log()] userauth is OK
2026-04-16T01:31:38.045 [DEBUG] [Thread-29229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:31:38.045 [DEBUG] [Thread-29229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:31:38.045 [DEBUG] [Thread-29229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:31:38.045 [DEBUG] [Thread-29229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:31:38.069 [INFO] [Thread-29229] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:31:38.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:31:38.844 [DEBUG] [Thread-29229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:31:38.844 [DEBUG] [Thread-29229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:31:38.844 [DEBUG] [Thread-29229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:31:38.885 [DEBUG] [Thread-29229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:31:38.885 [DEBUG] [Thread-29229] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:31:38.887 [DEBUG] [Thread-29229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:31:38.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:31:38.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:31:38.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:31:38.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:31:38.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:31:38.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:31:38.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:31:38.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:31:38.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:31:38.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.979993 -999.00   +9.30   8.00     87   +7.40 1 1 1 2 1     0    0 1.59 -12.03 .NESW 6.0 8.0 123.6 11.2 9.6 -25.3 9.5 -24.2 9.2 -21.9 9.5 -24.2
2026-04-16T01:31:38.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:31:38.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:31:38.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.979993
2026-04-16T01:31:38.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:31:38.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:31:38.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:31:38.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:31:38.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:31:38.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:31:24', tmtdew=1.95256, humidity=87.4951, cloud=0.0, wind=9.93456, temperature=8.99817, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:31:11.395', atlas_cloud=1, atlas_rain=1, zp_data=[3.290749999999999, nan, nan, nan, nan, nan, nan, 1.5642500000000004, 1.0559999999999992, 0.20199999999999996, 1.6827499999999995, 1.6349999999999998, nan, nan, 0.30299999999999905, 0.027999999999998693, 0.034250000000000114, 0.016500000000000625, 0.18299999999999983, 0.1997499999999981, 0.18099999999999916, 0.21674999999999933, 0.052250000000000796, -0.04225000000000101, -0.0129999999999999, 0.04449999999999932, 0.024750000000000938, -0.015499999999999403, 0.013999999999999346, 0.0710000000000015, 0.07800000000000118, -0.0009999999999994458, -0.07475000000000165], zp_timestamp='2026-04-15T23:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:31:38.907 [DEBUG] [Thread-29229] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:31:39.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:31:39.119 [DEBUG] [Thread-29232] [transport.py] [_log()] starting thread (client mode): 0xf13357e0
2026-04-16T01:31:39.119 [DEBUG] [Thread-29232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:31:39.134 [DEBUG] [Thread-29232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:31:39.134 [INFO] [Thread-29232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:31:39.141 [DEBUG] [Thread-29232] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:31:39.141 [DEBUG] [Thread-29232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:31:39.141 [DEBUG] [Thread-29232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:31:39.142 [DEBUG] [Thread-29232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:31:39.142 [DEBUG] [Thread-29232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:31:39.142 [DEBUG] [Thread-29232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:31:39.142 [DEBUG] [Thread-29232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:31:39.142 [DEBUG] [Thread-29232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:31:39.142 [DEBUG] [Thread-29232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:31:39.142 [DEBUG] [Thread-29232] [transport.py] [_log()] client lang: <none>
2026-04-16T01:31:39.142 [DEBUG] [Thread-29232] [transport.py] [_log()] server lang: <none>
2026-04-16T01:31:39.142 [DEBUG] [Thread-29232] [transport.py] [_log()] kex follows: False
2026-04-16T01:31:39.142 [DEBUG] [Thread-29232] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:31:39.142 [DEBUG] [Thread-29232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:31:39.142 [DEBUG] [Thread-29232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:31:39.143 [DEBUG] [Thread-29232] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:31:39.143 [DEBUG] [Thread-29232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:31:39.143 [DEBUG] [Thread-29232] [transport.py] [_log()] Compression: none
2026-04-16T01:31:39.143 [DEBUG] [Thread-29232] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:31:39.197 [DEBUG] [Thread-29232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:31:39.198 [DEBUG] [Thread-29232] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:31:39.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:31:39.198 [DEBUG] [Thread-29232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:31:39.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:31:39.254 [DEBUG] [Thread-29232] [transport.py] [_log()] userauth is OK
2026-04-16T01:31:39.255 [DEBUG] [Thread-29232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:31:39.255 [DEBUG] [Thread-29232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:31:39.255 [DEBUG] [Thread-29232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:31:39.255 [DEBUG] [Thread-29232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:31:39.272 [INFO] [Thread-29232] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:31:39.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:31:39.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:31:39.558 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:31:39.559 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:31:40.098 [DEBUG] [Thread-29232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:31:40.099 [DEBUG] [Thread-29232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:31:40.146 [DEBUG] [Thread-29232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:31:40.146 [DEBUG] [Thread-29232] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:31:40.155 [DEBUG] [Thread-29232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:31:40.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:31:40.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')
2026-04-16T01:31:40.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
2026-04-16T01:31:40.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:31:40.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:31:40.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:31:40.189 [DEBUG] [Thread-29232] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:31:44.988 [DEBUG] [Thread-29234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:31:55.730 [DEBUG] [Thread-29235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:32:00.035 [DEBUG] [Thread-29236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:32:10.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:32:10.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:32:10.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T01:32:11.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 31, 24), 1.95256, 87.4951, 0.0, 9.93456, 8.99817, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:32:11.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:31:24
2026-04-16T01:32:11.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:32:12.319 [DEBUG] [Thread-29237] [transport.py] [_log()] starting thread (client mode): 0xf1367e50
2026-04-16T01:32:12.319 [DEBUG] [Thread-29237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:32:12.332 [DEBUG] [Thread-29237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:32:12.333 [INFO] [Thread-29237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:32:12.336 [DEBUG] [Thread-29237] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:32:12.336 [DEBUG] [Thread-29237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:32:12.336 [DEBUG] [Thread-29237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:32:12.336 [DEBUG] [Thread-29237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:32:12.336 [DEBUG] [Thread-29237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:32:12.336 [DEBUG] [Thread-29237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:32:12.336 [DEBUG] [Thread-29237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:32:12.336 [DEBUG] [Thread-29237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:32:12.336 [DEBUG] [Thread-29237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:32:12.336 [DEBUG] [Thread-29237] [transport.py] [_log()] client lang: <none>
2026-04-16T01:32:12.337 [DEBUG] [Thread-29237] [transport.py] [_log()] server lang: <none>
2026-04-16T01:32:12.337 [DEBUG] [Thread-29237] [transport.py] [_log()] kex follows: False
2026-04-16T01:32:12.337 [DEBUG] [Thread-29237] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:32:12.337 [DEBUG] [Thread-29237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:32:12.337 [DEBUG] [Thread-29237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:32:12.337 [DEBUG] [Thread-29237] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:32:12.337 [DEBUG] [Thread-29237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:32:12.337 [DEBUG] [Thread-29237] [transport.py] [_log()] Compression: none
2026-04-16T01:32:12.337 [DEBUG] [Thread-29237] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:32:12.353 [DEBUG] [Thread-29237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:32:12.354 [DEBUG] [Thread-29237] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:32:12.354 [DEBUG] [Thread-29237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:32:12.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:32:12.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:32:12.355 [DEBUG] [Thread-29237] [transport.py] [_log()] userauth is OK
2026-04-16T01:32:12.355 [DEBUG] [Thread-29237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:32:12.355 [DEBUG] [Thread-29237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:32:12.356 [DEBUG] [Thread-29237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:32:12.356 [DEBUG] [Thread-29237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:32:12.389 [INFO] [Thread-29237] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:32:12.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:32:13.171 [DEBUG] [Thread-29237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:32:13.171 [DEBUG] [Thread-29237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:32:13.172 [DEBUG] [Thread-29237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:32:13.212 [DEBUG] [Thread-29237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:32:13.212 [DEBUG] [Thread-29237] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:32:13.215 [DEBUG] [Thread-29237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:32:13.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:32:13.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:32:13.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:32:13.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:32:13.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:32:13.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:32:13.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:32:13.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:32:13.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:32:13.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.980340 -999.00   +9.30   7.11     88   +7.40 1 1 1 3 1     0    0 1.61 -12.58 .NESW 5.7 7.1 64.6 9.7 9.6 -25.5 9.5 -24.2 9.2 -22.1 9.5 -24.1
2026-04-16T01:32:13.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:32:13.238 [DEBUG] [Thread-29237] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:32:13.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:32:13.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.980340
2026-04-16T01:32:13.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:32:13.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:32:13.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:32:13.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:32:13.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:32:13.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:31:24', tmtdew=1.95256, humidity=87.4951, cloud=0.0, wind=9.93456, temperature=8.99817, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:31:41.376', atlas_cloud=1, atlas_rain=1, zp_data=[3.290749999999999, nan, nan, nan, nan, nan, nan, 1.5642500000000004, 1.0559999999999992, 0.20199999999999996, 1.6827499999999995, 1.6349999999999998, nan, nan, 0.30299999999999905, 0.027999999999998693, 0.034250000000000114, 0.016500000000000625, 0.18299999999999983, 0.1997499999999981, 0.18099999999999916, 0.21674999999999933, 0.052250000000000796, -0.04225000000000101, -0.0129999999999999, 0.04449999999999932, 0.024750000000000938, -0.015499999999999403, 0.013999999999999346, 0.0710000000000015, 0.07800000000000118, -0.0009999999999994458, -0.07475000000000165], zp_timestamp='2026-04-15T23:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:32:13.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:32:13.500 [DEBUG] [Thread-29240] [transport.py] [_log()] starting thread (client mode): 0xf13c9cc0
2026-04-16T01:32:13.500 [DEBUG] [Thread-29240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:32:13.514 [DEBUG] [Thread-29240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:32:13.514 [INFO] [Thread-29240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:32:13.521 [DEBUG] [Thread-29240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:32:13.521 [DEBUG] [Thread-29240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:32:13.521 [DEBUG] [Thread-29240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:32:13.522 [DEBUG] [Thread-29240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:32:13.522 [DEBUG] [Thread-29240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:32:13.522 [DEBUG] [Thread-29240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:32:13.522 [DEBUG] [Thread-29240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:32:13.522 [DEBUG] [Thread-29240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:32:13.522 [DEBUG] [Thread-29240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:32:13.522 [DEBUG] [Thread-29240] [transport.py] [_log()] client lang: <none>
2026-04-16T01:32:13.522 [DEBUG] [Thread-29240] [transport.py] [_log()] server lang: <none>
2026-04-16T01:32:13.522 [DEBUG] [Thread-29240] [transport.py] [_log()] kex follows: False
2026-04-16T01:32:13.522 [DEBUG] [Thread-29240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:32:13.522 [DEBUG] [Thread-29240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:32:13.522 [DEBUG] [Thread-29240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:32:13.522 [DEBUG] [Thread-29240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:32:13.523 [DEBUG] [Thread-29240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:32:13.523 [DEBUG] [Thread-29240] [transport.py] [_log()] Compression: none
2026-04-16T01:32:13.523 [DEBUG] [Thread-29240] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:32:13.580 [DEBUG] [Thread-29240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:32:13.581 [DEBUG] [Thread-29240] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:32:13.581 [DEBUG] [Thread-29240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:32:13.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:32:13.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:32:13.639 [DEBUG] [Thread-29240] [transport.py] [_log()] userauth is OK
2026-04-16T01:32:13.639 [DEBUG] [Thread-29240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:32:13.639 [DEBUG] [Thread-29240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:32:13.639 [DEBUG] [Thread-29240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:32:13.640 [DEBUG] [Thread-29240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:32:13.670 [INFO] [Thread-29240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:32:13.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:32:13.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:32:14.508 [DEBUG] [Thread-29240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:32:14.509 [DEBUG] [Thread-29240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:32:14.556 [DEBUG] [Thread-29240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:32:14.556 [DEBUG] [Thread-29240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:32:14.565 [DEBUG] [Thread-29240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:32:14.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:32:14.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')
2026-04-16T01:32:14.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
2026-04-16T01:32:14.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:32:14.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:32:14.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:32:14.604 [DEBUG] [Thread-29240] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:32:15.065 [DEBUG] [Thread-29242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:32:30.105 [DEBUG] [Thread-29243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:32:39.764 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:32:39.765 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:32:44.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:32:44.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:32:44.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
2026-04-16T01:32:45.135 [DEBUG] [Thread-29244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:32:45.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 32, 35), 1.70417, 88.9908, 0.0, 13.0572, 8.63043, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:32:45.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:32:35
2026-04-16T01:32:46.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:32:46.704 [DEBUG] [Thread-29245] [transport.py] [_log()] starting thread (client mode): 0xee9c18d0
2026-04-16T01:32:46.705 [DEBUG] [Thread-29245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:32:46.722 [DEBUG] [Thread-29245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:32:46.722 [INFO] [Thread-29245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:32:46.723 [DEBUG] [Thread-29245] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:32:46.724 [DEBUG] [Thread-29245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:32:46.724 [DEBUG] [Thread-29245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:32:46.724 [DEBUG] [Thread-29245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:32:46.724 [DEBUG] [Thread-29245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:32:46.724 [DEBUG] [Thread-29245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:32:46.724 [DEBUG] [Thread-29245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:32:46.724 [DEBUG] [Thread-29245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:32:46.724 [DEBUG] [Thread-29245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:32:46.724 [DEBUG] [Thread-29245] [transport.py] [_log()] client lang: <none>
2026-04-16T01:32:46.724 [DEBUG] [Thread-29245] [transport.py] [_log()] server lang: <none>
2026-04-16T01:32:46.724 [DEBUG] [Thread-29245] [transport.py] [_log()] kex follows: False
2026-04-16T01:32:46.724 [DEBUG] [Thread-29245] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:32:46.725 [DEBUG] [Thread-29245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:32:46.725 [DEBUG] [Thread-29245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:32:46.725 [DEBUG] [Thread-29245] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:32:46.725 [DEBUG] [Thread-29245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:32:46.725 [DEBUG] [Thread-29245] [transport.py] [_log()] Compression: none
2026-04-16T01:32:46.725 [DEBUG] [Thread-29245] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:32:46.733 [DEBUG] [Thread-29245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:32:46.733 [DEBUG] [Thread-29245] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:32:46.734 [DEBUG] [Thread-29245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:32:46.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:32:46.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:32:46.735 [DEBUG] [Thread-29245] [transport.py] [_log()] userauth is OK
2026-04-16T01:32:46.735 [DEBUG] [Thread-29245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:32:46.735 [DEBUG] [Thread-29245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:32:46.735 [DEBUG] [Thread-29245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:32:46.735 [DEBUG] [Thread-29245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:32:46.751 [INFO] [Thread-29245] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:32:46.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:32:47.551 [DEBUG] [Thread-29245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:32:47.551 [DEBUG] [Thread-29245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:32:47.552 [DEBUG] [Thread-29245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:32:47.592 [DEBUG] [Thread-29245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:32:47.592 [DEBUG] [Thread-29245] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:32:47.595 [DEBUG] [Thread-29245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:32:47.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:32:47.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:32:47.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:32:47.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:32:47.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:32:47.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:32:47.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:32:47.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:32:47.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:32:47.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.980687 -999.00   +9.30   9.24     88   +7.40 1 1 1 3 1     0    0 1.56 -13.17 .NESW 7.4 9.2 61.8 11.0 9.6 -25.4 9.4 -24.3 9.2 -21.9 9.5 -24.1
2026-04-16T01:32:47.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:32:47.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:32:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.980687
2026-04-16T01:32:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:32:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:32:47.617 [DEBUG] [Thread-29245] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:32:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:32:47.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:32:47.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:32:47.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:32:35', tmtdew=1.70417, humidity=88.9908, cloud=0.0, wind=13.0572, temperature=8.63043, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:32:11.357', atlas_cloud=1, atlas_rain=1, zp_data=[3.290749999999999, nan, nan, nan, nan, nan, nan, 1.5642500000000004, 1.0559999999999992, 0.20199999999999996, 1.6827499999999995, 1.6349999999999998, nan, nan, 0.30299999999999905, 0.027999999999998693, 0.034250000000000114, 0.016500000000000625, 0.18299999999999983, 0.1997499999999981, 0.18099999999999916, 0.21674999999999933, 0.052250000000000796, -0.04225000000000101, -0.0129999999999999, 0.04449999999999932, 0.024750000000000938, -0.015499999999999403, 0.013999999999999346, 0.0710000000000015, 0.07800000000000118, -0.0009999999999994458, -0.07475000000000165], zp_timestamp='2026-04-15T23:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:32:47.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:32:47.835 [DEBUG] [Thread-29248] [transport.py] [_log()] starting thread (client mode): 0xee933a30
2026-04-16T01:32:47.835 [DEBUG] [Thread-29248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:32:47.850 [DEBUG] [Thread-29248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:32:47.850 [INFO] [Thread-29248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:32:47.857 [DEBUG] [Thread-29248] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:32:47.858 [DEBUG] [Thread-29248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:32:47.858 [DEBUG] [Thread-29248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:32:47.858 [DEBUG] [Thread-29248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:32:47.858 [DEBUG] [Thread-29248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:32:47.858 [DEBUG] [Thread-29248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:32:47.858 [DEBUG] [Thread-29248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:32:47.858 [DEBUG] [Thread-29248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:32:47.858 [DEBUG] [Thread-29248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:32:47.858 [DEBUG] [Thread-29248] [transport.py] [_log()] client lang: <none>
2026-04-16T01:32:47.858 [DEBUG] [Thread-29248] [transport.py] [_log()] server lang: <none>
2026-04-16T01:32:47.858 [DEBUG] [Thread-29248] [transport.py] [_log()] kex follows: False
2026-04-16T01:32:47.859 [DEBUG] [Thread-29248] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:32:47.859 [DEBUG] [Thread-29248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:32:47.859 [DEBUG] [Thread-29248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:32:47.859 [DEBUG] [Thread-29248] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:32:47.859 [DEBUG] [Thread-29248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:32:47.859 [DEBUG] [Thread-29248] [transport.py] [_log()] Compression: none
2026-04-16T01:32:47.859 [DEBUG] [Thread-29248] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:32:47.914 [DEBUG] [Thread-29248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:32:47.914 [DEBUG] [Thread-29248] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:32:47.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:32:47.915 [DEBUG] [Thread-29248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:32:47.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:32:47.971 [DEBUG] [Thread-29248] [transport.py] [_log()] userauth is OK
2026-04-16T01:32:47.971 [DEBUG] [Thread-29248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:32:47.972 [DEBUG] [Thread-29248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:32:47.972 [DEBUG] [Thread-29248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:32:47.972 [DEBUG] [Thread-29248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:32:48.000 [INFO] [Thread-29248] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:32:48.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:32:48.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:32:48.857 [DEBUG] [Thread-29248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:32:48.857 [DEBUG] [Thread-29248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:32:48.909 [DEBUG] [Thread-29248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:32:48.909 [DEBUG] [Thread-29248] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:32:48.922 [DEBUG] [Thread-29248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:32:48.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:32:48.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')
2026-04-16T01:32:48.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
2026-04-16T01:32:48.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:32:48.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:32:48.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:32:48.971 [DEBUG] [Thread-29248] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:32:55.897 [DEBUG] [Thread-29250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:33:00.162 [DEBUG] [Thread-29251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:33:15.199 [DEBUG] [Thread-29252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:33:18.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:33:18.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:33:18.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
2026-04-16T01:33:20.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 33, 12), 1.94164, 87.5618, 0.0, 10.0051, 8.99839, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:33:20.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:33:12
2026-04-16T01:33:20.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:33:21.204 [DEBUG] [Thread-29253] [transport.py] [_log()] starting thread (client mode): 0xf1367e50
2026-04-16T01:33:21.204 [DEBUG] [Thread-29253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:33:21.223 [DEBUG] [Thread-29253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:33:21.223 [INFO] [Thread-29253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:33:21.226 [DEBUG] [Thread-29253] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:33:21.226 [DEBUG] [Thread-29253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:33:21.226 [DEBUG] [Thread-29253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:33:21.227 [DEBUG] [Thread-29253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:33:21.227 [DEBUG] [Thread-29253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:33:21.227 [DEBUG] [Thread-29253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:33:21.227 [DEBUG] [Thread-29253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:33:21.227 [DEBUG] [Thread-29253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:33:21.227 [DEBUG] [Thread-29253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:33:21.227 [DEBUG] [Thread-29253] [transport.py] [_log()] client lang: <none>
2026-04-16T01:33:21.227 [DEBUG] [Thread-29253] [transport.py] [_log()] server lang: <none>
2026-04-16T01:33:21.227 [DEBUG] [Thread-29253] [transport.py] [_log()] kex follows: False
2026-04-16T01:33:21.227 [DEBUG] [Thread-29253] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:33:21.227 [DEBUG] [Thread-29253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:33:21.227 [DEBUG] [Thread-29253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:33:21.228 [DEBUG] [Thread-29253] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:33:21.228 [DEBUG] [Thread-29253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:33:21.228 [DEBUG] [Thread-29253] [transport.py] [_log()] Compression: none
2026-04-16T01:33:21.228 [DEBUG] [Thread-29253] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:33:21.243 [DEBUG] [Thread-29253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:33:21.244 [DEBUG] [Thread-29253] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:33:21.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:33:21.244 [DEBUG] [Thread-29253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:33:21.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:33:21.245 [DEBUG] [Thread-29253] [transport.py] [_log()] userauth is OK
2026-04-16T01:33:21.245 [DEBUG] [Thread-29253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:33:21.245 [DEBUG] [Thread-29253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:33:21.246 [DEBUG] [Thread-29253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:33:21.246 [DEBUG] [Thread-29253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:33:21.269 [INFO] [Thread-29253] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:33:21.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:33:22.040 [DEBUG] [Thread-29253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:33:22.041 [DEBUG] [Thread-29253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:33:22.041 [DEBUG] [Thread-29253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:33:22.081 [DEBUG] [Thread-29253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:33:22.081 [DEBUG] [Thread-29253] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:33:22.084 [DEBUG] [Thread-29253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:33:22.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:33:22.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:33:22.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:33:22.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:33:22.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:33:22.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:33:22.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:33:22.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:33:22.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:33:22.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.981034 -999.00   +9.30   8.13     88   +7.40 1 1 1 3 1     0    0 1.58 -12.42 .NESW 9.4 8.1 72.6 10.5 9.6 -25.6 9.4 -24.3 9.2 -22.0 9.4 -24.1
2026-04-16T01:33:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:33:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:33:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.981034
2026-04-16T01:33:22.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:33:22.109 [DEBUG] [Thread-29253] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:33:22.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:33:22.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:33:22.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:33:22.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:33:22.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:33:12', tmtdew=1.94164, humidity=87.5618, cloud=0.0, wind=10.0051, temperature=8.99839, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:32:41.338', atlas_cloud=1, atlas_rain=1, zp_data=[3.290749999999999, nan, nan, nan, nan, nan, nan, 1.5642500000000004, 1.0559999999999992, 0.20199999999999996, 1.6827499999999995, 1.6349999999999998, nan, nan, 0.30299999999999905, 0.027999999999998693, 0.034250000000000114, 0.016500000000000625, 0.18299999999999983, 0.1997499999999981, 0.18099999999999916, 0.21674999999999933, 0.052250000000000796, -0.04225000000000101, -0.0129999999999999, 0.04449999999999932, 0.024750000000000938, -0.015499999999999403, 0.013999999999999346, 0.0710000000000015, 0.07800000000000118, -0.0009999999999994458, -0.07475000000000165], zp_timestamp='2026-04-15T23:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:33:22.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:33:22.377 [DEBUG] [Thread-29256] [transport.py] [_log()] starting thread (client mode): 0xee9ea3b0
2026-04-16T01:33:22.378 [DEBUG] [Thread-29256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:33:22.392 [DEBUG] [Thread-29256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:33:22.392 [INFO] [Thread-29256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:33:22.399 [DEBUG] [Thread-29256] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:33:22.399 [DEBUG] [Thread-29256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:33:22.400 [DEBUG] [Thread-29256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:33:22.400 [DEBUG] [Thread-29256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:33:22.400 [DEBUG] [Thread-29256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:33:22.400 [DEBUG] [Thread-29256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:33:22.400 [DEBUG] [Thread-29256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:33:22.400 [DEBUG] [Thread-29256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:33:22.400 [DEBUG] [Thread-29256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:33:22.400 [DEBUG] [Thread-29256] [transport.py] [_log()] client lang: <none>
2026-04-16T01:33:22.400 [DEBUG] [Thread-29256] [transport.py] [_log()] server lang: <none>
2026-04-16T01:33:22.400 [DEBUG] [Thread-29256] [transport.py] [_log()] kex follows: False
2026-04-16T01:33:22.400 [DEBUG] [Thread-29256] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:33:22.400 [DEBUG] [Thread-29256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:33:22.401 [DEBUG] [Thread-29256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:33:22.401 [DEBUG] [Thread-29256] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:33:22.401 [DEBUG] [Thread-29256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:33:22.401 [DEBUG] [Thread-29256] [transport.py] [_log()] Compression: none
2026-04-16T01:33:22.401 [DEBUG] [Thread-29256] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:33:22.458 [DEBUG] [Thread-29256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:33:22.458 [DEBUG] [Thread-29256] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:33:22.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:33:22.459 [DEBUG] [Thread-29256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:33:22.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:33:22.515 [DEBUG] [Thread-29256] [transport.py] [_log()] userauth is OK
2026-04-16T01:33:22.516 [DEBUG] [Thread-29256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:33:22.516 [DEBUG] [Thread-29256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:33:22.516 [DEBUG] [Thread-29256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:33:22.516 [DEBUG] [Thread-29256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:33:22.541 [INFO] [Thread-29256] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:33:22.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:33:22.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:33:23.346 [DEBUG] [Thread-29256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:33:23.346 [DEBUG] [Thread-29256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:33:23.394 [DEBUG] [Thread-29256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:33:23.394 [DEBUG] [Thread-29256] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:33:23.403 [DEBUG] [Thread-29256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:33:23.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:33:23.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')
2026-04-16T01:33: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') -> 00000000
2026-04-16T01:33:23.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:33:23.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:33:23.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:33:23.438 [DEBUG] [Thread-29256] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:33:30.229 [DEBUG] [Thread-29258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:33:39.966 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:33:39.967 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:33:45.266 [DEBUG] [Thread-29259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:33:53.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:33:53.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:33:53.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
2026-04-16T01:33:54.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 33, 12), 1.94164, 87.5618, 0.0, 10.0051, 8.99839, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:33:54.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:33:12
2026-04-16T01:33:55.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:33:55.579 [DEBUG] [Thread-29260] [transport.py] [_log()] starting thread (client mode): 0xee9c2980
2026-04-16T01:33:55.580 [DEBUG] [Thread-29260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:33:55.600 [DEBUG] [Thread-29260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:33:55.600 [INFO] [Thread-29260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:33:55.603 [DEBUG] [Thread-29260] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:33:55.603 [DEBUG] [Thread-29260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:33:55.603 [DEBUG] [Thread-29260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:33:55.603 [DEBUG] [Thread-29260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:33:55.603 [DEBUG] [Thread-29260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:33:55.603 [DEBUG] [Thread-29260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:33:55.603 [DEBUG] [Thread-29260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:33:55.603 [DEBUG] [Thread-29260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:33:55.603 [DEBUG] [Thread-29260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:33:55.604 [DEBUG] [Thread-29260] [transport.py] [_log()] client lang: <none>
2026-04-16T01:33:55.604 [DEBUG] [Thread-29260] [transport.py] [_log()] server lang: <none>
2026-04-16T01:33:55.604 [DEBUG] [Thread-29260] [transport.py] [_log()] kex follows: False
2026-04-16T01:33:55.604 [DEBUG] [Thread-29260] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:33:55.604 [DEBUG] [Thread-29260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:33:55.604 [DEBUG] [Thread-29260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:33:55.604 [DEBUG] [Thread-29260] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:33:55.604 [DEBUG] [Thread-29260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:33:55.604 [DEBUG] [Thread-29260] [transport.py] [_log()] Compression: none
2026-04-16T01:33:55.604 [DEBUG] [Thread-29260] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:33:55.621 [DEBUG] [Thread-29260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:33:55.621 [DEBUG] [Thread-29260] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:33:55.622 [DEBUG] [Thread-29260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:33:55.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:33:55.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:33:55.664 [DEBUG] [Thread-29260] [transport.py] [_log()] userauth is OK
2026-04-16T01:33:55.664 [DEBUG] [Thread-29260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:33:55.664 [DEBUG] [Thread-29260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:33:55.665 [DEBUG] [Thread-29260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:33:55.665 [DEBUG] [Thread-29260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:33:55.689 [INFO] [Thread-29260] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:33:55.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:33:56.032 [DEBUG] [Thread-23763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:33:56.051 [DEBUG] [Thread-29262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:33:56.457 [DEBUG] [Thread-29260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:33:56.457 [DEBUG] [Thread-29260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:33:56.457 [DEBUG] [Thread-29260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:33:56.498 [DEBUG] [Thread-29260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:33:56.498 [DEBUG] [Thread-29260] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:33:56.500 [DEBUG] [Thread-29260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:33:56.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:33:56.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:33:56.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:33:56.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:33:56.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:33:56.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:33:56.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:33:56.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:33:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:33:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.981382 -999.00   +9.30   8.63     88   +7.40 1 1 1 3 1     0    0 1.53 -13.15 .NESW 10.1 8.6 104.0 11.0 9.6 -25.4 9.4 -24.2 9.2 -22.1 9.5 -24.2
2026-04-16T01:33:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:33:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:33:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.981382
2026-04-16T01:33:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:33:56.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:33:56.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:33:56.515 [DEBUG] [Thread-29260] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:33:56.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:33:56.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:33:56.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:33:12', tmtdew=1.94164, humidity=87.5618, cloud=0.0, wind=10.0051, temperature=8.99839, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:33:11.405', atlas_cloud=1, atlas_rain=1, zp_data=[3.290749999999999, nan, nan, nan, nan, nan, nan, 1.5642500000000004, 1.0559999999999992, 0.20199999999999996, 1.6827499999999995, 1.6349999999999998, nan, nan, 0.30299999999999905, 0.027999999999998693, 0.034250000000000114, 0.016500000000000625, 0.18299999999999983, 0.1997499999999981, 0.18099999999999916, 0.21674999999999933, 0.052250000000000796, -0.04225000000000101, -0.0129999999999999, 0.04449999999999932, 0.024750000000000938, -0.015499999999999403, 0.013999999999999346, 0.0710000000000015, 0.07800000000000118, -0.0009999999999994458, -0.07475000000000165], zp_timestamp='2026-04-15T23:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:33:56.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:33:56.734 [DEBUG] [Thread-29264] [transport.py] [_log()] starting thread (client mode): 0xee933bb0
2026-04-16T01:33:56.734 [DEBUG] [Thread-29264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:33:56.748 [DEBUG] [Thread-29264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:33:56.749 [INFO] [Thread-29264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:33:56.756 [DEBUG] [Thread-29264] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:33:56.756 [DEBUG] [Thread-29264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:33:56.756 [DEBUG] [Thread-29264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:33:56.756 [DEBUG] [Thread-29264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:33:56.756 [DEBUG] [Thread-29264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:33:56.756 [DEBUG] [Thread-29264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:33:56.757 [DEBUG] [Thread-29264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:33:56.757 [DEBUG] [Thread-29264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:33:56.757 [DEBUG] [Thread-29264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:33:56.757 [DEBUG] [Thread-29264] [transport.py] [_log()] client lang: <none>
2026-04-16T01:33:56.757 [DEBUG] [Thread-29264] [transport.py] [_log()] server lang: <none>
2026-04-16T01:33:56.757 [DEBUG] [Thread-29264] [transport.py] [_log()] kex follows: False
2026-04-16T01:33:56.757 [DEBUG] [Thread-29264] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:33:56.757 [DEBUG] [Thread-29264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:33:56.757 [DEBUG] [Thread-29264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:33:56.757 [DEBUG] [Thread-29264] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:33:56.757 [DEBUG] [Thread-29264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:33:56.758 [DEBUG] [Thread-29264] [transport.py] [_log()] Compression: none
2026-04-16T01:33:56.758 [DEBUG] [Thread-29264] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:33:56.814 [DEBUG] [Thread-29264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:33:56.814 [DEBUG] [Thread-29264] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:33:56.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:33:56.815 [DEBUG] [Thread-29264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:33:56.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:33:56.871 [DEBUG] [Thread-29264] [transport.py] [_log()] userauth is OK
2026-04-16T01:33:56.871 [DEBUG] [Thread-29264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:33:56.871 [DEBUG] [Thread-29264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:33:56.871 [DEBUG] [Thread-29264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:33:56.872 [DEBUG] [Thread-29264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:33:56.896 [INFO] [Thread-29264] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:33:56.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:33:56.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:33:57.736 [DEBUG] [Thread-29264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:33:57.736 [DEBUG] [Thread-29264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:33:57.784 [DEBUG] [Thread-29264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:33:57.784 [DEBUG] [Thread-29264] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:33:57.793 [DEBUG] [Thread-29264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:33:57.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:33:57.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')
2026-04-16T01:33:57.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') -> 00000000
2026-04-16T01:33:57.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:33:57.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:33:57.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:33:57.828 [DEBUG] [Thread-29264] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:34:00.297 [DEBUG] [Thread-29266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:34:15.339 [DEBUG] [Thread-29267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:34:27.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:34:27.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:34:27.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
2026-04-16T01:34:29.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 33, 48), 1.69787, 89.0243, 0.0, 13.0219, 8.56424, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:34:29.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:33:48
2026-04-16T01:34:29.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:34:29.968 [DEBUG] [Thread-29268] [transport.py] [_log()] starting thread (client mode): 0xf1336710
2026-04-16T01:34:29.968 [DEBUG] [Thread-29268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:34:29.985 [DEBUG] [Thread-29268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:34:29.985 [INFO] [Thread-29268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:34:29.988 [DEBUG] [Thread-29268] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:34:29.988 [DEBUG] [Thread-29268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:34:29.989 [DEBUG] [Thread-29268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:34:29.989 [DEBUG] [Thread-29268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:34:29.989 [DEBUG] [Thread-29268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:34:29.989 [DEBUG] [Thread-29268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:34:29.989 [DEBUG] [Thread-29268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:34:29.989 [DEBUG] [Thread-29268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:34:29.989 [DEBUG] [Thread-29268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:34:29.989 [DEBUG] [Thread-29268] [transport.py] [_log()] client lang: <none>
2026-04-16T01:34:29.989 [DEBUG] [Thread-29268] [transport.py] [_log()] server lang: <none>
2026-04-16T01:34:29.989 [DEBUG] [Thread-29268] [transport.py] [_log()] kex follows: False
2026-04-16T01:34:29.989 [DEBUG] [Thread-29268] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:34:29.989 [DEBUG] [Thread-29268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:34:29.990 [DEBUG] [Thread-29268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:34:29.990 [DEBUG] [Thread-29268] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:34:29.990 [DEBUG] [Thread-29268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:34:29.990 [DEBUG] [Thread-29268] [transport.py] [_log()] Compression: none
2026-04-16T01:34:29.990 [DEBUG] [Thread-29268] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:34:30.007 [DEBUG] [Thread-29268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:34:30.007 [DEBUG] [Thread-29268] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:34:30.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:34:30.008 [DEBUG] [Thread-29268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:34:30.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:34:30.009 [DEBUG] [Thread-29268] [transport.py] [_log()] userauth is OK
2026-04-16T01:34:30.009 [DEBUG] [Thread-29268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:34:30.009 [DEBUG] [Thread-29268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:34:30.009 [DEBUG] [Thread-29268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:34:30.009 [DEBUG] [Thread-29268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:34:30.027 [INFO] [Thread-29268] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:34:30.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:34:30.369 [DEBUG] [Thread-29270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:34:30.802 [DEBUG] [Thread-29268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:34:30.803 [DEBUG] [Thread-29268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:34:30.803 [DEBUG] [Thread-29268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:34:30.844 [DEBUG] [Thread-29268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:34:30.844 [DEBUG] [Thread-29268] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:34:30.848 [DEBUG] [Thread-29268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:34:30.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:34:30.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:34:30.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:34:30.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:34:30.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:34:30.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:34:30.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:34:30.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:34:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:34:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.981729 -999.00   +9.20   5.92     88   +7.40 1 1 1 3 1     0    0 1.58 -12.22 .NESW 9.7 5.9 111.3 11.4 9.6 -25.5 9.4 -24.3 9.2 -22.0 9.5 -24.0
2026-04-16T01:34:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:34:30.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:34:30.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.981729
2026-04-16T01:34:30.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:34:30.872 [DEBUG] [Thread-29268] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:34:30.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:34:30.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:34:30.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:34:30.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:34:30.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:33:48', tmtdew=1.69787, humidity=89.0243, cloud=0.0, wind=13.0219, temperature=8.56424, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:33:41.386', atlas_cloud=1, atlas_rain=1, zp_data=[3.290749999999999, nan, nan, nan, nan, nan, nan, 1.5642500000000004, 1.0559999999999992, 0.20199999999999996, 1.6827499999999995, 1.6349999999999998, nan, nan, 0.30299999999999905, 0.027999999999998693, 0.034250000000000114, 0.016500000000000625, 0.18299999999999983, 0.1997499999999981, 0.18099999999999916, 0.21674999999999933, 0.052250000000000796, -0.04225000000000101, -0.0129999999999999, 0.04449999999999932, 0.024750000000000938, -0.015499999999999403, 0.013999999999999346, 0.0710000000000015, 0.07800000000000118, -0.0009999999999994458, -0.07475000000000165], zp_timestamp='2026-04-15T23:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:34:31.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:34:31.127 [DEBUG] [Thread-29272] [transport.py] [_log()] starting thread (client mode): 0xee9057e0
2026-04-16T01:34:31.127 [DEBUG] [Thread-29272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:34:31.142 [DEBUG] [Thread-29272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:34:31.142 [INFO] [Thread-29272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:34:31.149 [DEBUG] [Thread-29272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:34:31.149 [DEBUG] [Thread-29272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:34:31.150 [DEBUG] [Thread-29272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:34:31.150 [DEBUG] [Thread-29272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:34:31.150 [DEBUG] [Thread-29272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:34:31.150 [DEBUG] [Thread-29272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:34:31.150 [DEBUG] [Thread-29272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:34:31.150 [DEBUG] [Thread-29272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:34:31.150 [DEBUG] [Thread-29272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:34:31.150 [DEBUG] [Thread-29272] [transport.py] [_log()] client lang: <none>
2026-04-16T01:34:31.150 [DEBUG] [Thread-29272] [transport.py] [_log()] server lang: <none>
2026-04-16T01:34:31.150 [DEBUG] [Thread-29272] [transport.py] [_log()] kex follows: False
2026-04-16T01:34:31.150 [DEBUG] [Thread-29272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:34:31.150 [DEBUG] [Thread-29272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:34:31.151 [DEBUG] [Thread-29272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:34:31.151 [DEBUG] [Thread-29272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:34:31.151 [DEBUG] [Thread-29272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:34:31.151 [DEBUG] [Thread-29272] [transport.py] [_log()] Compression: none
2026-04-16T01:34:31.151 [DEBUG] [Thread-29272] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:34:31.206 [DEBUG] [Thread-29272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:34:31.206 [DEBUG] [Thread-29272] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:34:31.207 [DEBUG] [Thread-29272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:34:31.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:34:31.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:34:31.263 [DEBUG] [Thread-29272] [transport.py] [_log()] userauth is OK
2026-04-16T01:34:31.263 [DEBUG] [Thread-29272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:34:31.263 [DEBUG] [Thread-29272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:34:31.264 [DEBUG] [Thread-29272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:34:31.264 [DEBUG] [Thread-29272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:34:31.289 [INFO] [Thread-29272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:34:31.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:34:31.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:34:32.141 [DEBUG] [Thread-29272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:34:32.141 [DEBUG] [Thread-29272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:34:32.189 [DEBUG] [Thread-29272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:34:32.189 [DEBUG] [Thread-29272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:34:32.198 [DEBUG] [Thread-29272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:34:32.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:34:32.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')
2026-04-16T01:34:32.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
2026-04-16T01:34:32.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:34:32.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:34:32.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:34:32.233 [DEBUG] [Thread-29272] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:34:40.169 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:34:40.170 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:34:45.401 [DEBUG] [Thread-29274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:34:56.214 [DEBUG] [Thread-29275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:35:00.445 [DEBUG] [Thread-29276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:35:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:35:02.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:35:02.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
2026-04-16T01:35:03.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 34, 23), 1.93077, 87.6283, 0.0, 10.0228, 8.99848, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:35:03.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:34:23
2026-04-16T01:35:03.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:35:04.360 [DEBUG] [Thread-29277] [transport.py] [_log()] starting thread (client mode): 0xf1335f60
2026-04-16T01:35:04.361 [DEBUG] [Thread-29277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:35:04.382 [DEBUG] [Thread-29277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:35:04.383 [INFO] [Thread-29277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:35:04.386 [DEBUG] [Thread-29277] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:35:04.386 [DEBUG] [Thread-29277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:35:04.386 [DEBUG] [Thread-29277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:35:04.386 [DEBUG] [Thread-29277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:35:04.386 [DEBUG] [Thread-29277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:35:04.386 [DEBUG] [Thread-29277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:35:04.386 [DEBUG] [Thread-29277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:35:04.387 [DEBUG] [Thread-29277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:35:04.387 [DEBUG] [Thread-29277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:35:04.387 [DEBUG] [Thread-29277] [transport.py] [_log()] client lang: <none>
2026-04-16T01:35:04.387 [DEBUG] [Thread-29277] [transport.py] [_log()] server lang: <none>
2026-04-16T01:35:04.387 [DEBUG] [Thread-29277] [transport.py] [_log()] kex follows: False
2026-04-16T01:35:04.387 [DEBUG] [Thread-29277] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:35:04.387 [DEBUG] [Thread-29277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:35:04.387 [DEBUG] [Thread-29277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:35:04.387 [DEBUG] [Thread-29277] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:35:04.387 [DEBUG] [Thread-29277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:35:04.387 [DEBUG] [Thread-29277] [transport.py] [_log()] Compression: none
2026-04-16T01:35:04.388 [DEBUG] [Thread-29277] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:35:04.404 [DEBUG] [Thread-29277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:35:04.405 [DEBUG] [Thread-29277] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:35:04.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:35:04.405 [DEBUG] [Thread-29277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:35:04.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:35:04.406 [DEBUG] [Thread-29277] [transport.py] [_log()] userauth is OK
2026-04-16T01:35:04.406 [DEBUG] [Thread-29277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:35:04.407 [DEBUG] [Thread-29277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:35:04.407 [DEBUG] [Thread-29277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:35:04.407 [DEBUG] [Thread-29277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:35:04.432 [INFO] [Thread-29277] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:35:04.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:35:06.488 [DEBUG] [Thread-29277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:35:06.488 [DEBUG] [Thread-29277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:35:06.488 [DEBUG] [Thread-29277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:35:06.529 [DEBUG] [Thread-29277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:35:06.529 [DEBUG] [Thread-29277] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:35:06.531 [DEBUG] [Thread-29277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:35:06.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:35:06.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:35:06.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:35:06.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:35:06.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:35:06.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:35:06.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:35:06.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:35:06.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:35:06.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.982423 -999.00   +9.20   5.24     88   +7.40 1 1 1 3 1     0    0 1.55 -12.64 .NESW 3.9 5.2 62.6 10.3 9.6 -25.6 9.4 -24.4 9.2 -22.0 9.4 -24.3
2026-04-16T01:35:06.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:35:06.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:35:06.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.982423
2026-04-16T01:35:06.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:35:06.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:35:06.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:35:06.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:35:06.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:35:06.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:34:23', tmtdew=1.93077, humidity=87.6283, cloud=0.0, wind=10.0228, temperature=8.99848, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:34:41.347', atlas_cloud=1, atlas_rain=1, zp_data=[3.290749999999999, nan, nan, nan, nan, nan, nan, 1.5642500000000004, 1.0559999999999992, 0.20199999999999996, 1.6827499999999995, 1.6349999999999998, nan, nan, 0.30299999999999905, 0.027999999999998693, 0.034250000000000114, 0.016500000000000625, 0.18299999999999983, 0.1997499999999981, 0.18099999999999916, 0.21674999999999933, 0.052250000000000796, -0.04225000000000101, -0.0129999999999999, 0.04449999999999932, 0.024750000000000938, -0.015499999999999403, 0.013999999999999346, 0.0710000000000015, 0.07800000000000118, -0.0009999999999994458, -0.07475000000000165], zp_timestamp='2026-04-15T23:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:35:06.580 [DEBUG] [Thread-29277] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:35:06.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:35:06.790 [DEBUG] [Thread-29280] [transport.py] [_log()] starting thread (client mode): 0xee990550
2026-04-16T01:35:06.790 [DEBUG] [Thread-29280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:35:06.805 [DEBUG] [Thread-29280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:35:06.805 [INFO] [Thread-29280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:35:06.816 [DEBUG] [Thread-29280] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:35:06.816 [DEBUG] [Thread-29280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:35:06.817 [DEBUG] [Thread-29280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:35:06.817 [DEBUG] [Thread-29280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:35:06.817 [DEBUG] [Thread-29280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:35:06.817 [DEBUG] [Thread-29280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:35:06.817 [DEBUG] [Thread-29280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:35:06.817 [DEBUG] [Thread-29280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:35:06.817 [DEBUG] [Thread-29280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:35:06.817 [DEBUG] [Thread-29280] [transport.py] [_log()] client lang: <none>
2026-04-16T01:35:06.817 [DEBUG] [Thread-29280] [transport.py] [_log()] server lang: <none>
2026-04-16T01:35:06.817 [DEBUG] [Thread-29280] [transport.py] [_log()] kex follows: False
2026-04-16T01:35:06.817 [DEBUG] [Thread-29280] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:35:06.817 [DEBUG] [Thread-29280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:35:06.818 [DEBUG] [Thread-29280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:35:06.818 [DEBUG] [Thread-29280] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:35:06.818 [DEBUG] [Thread-29280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:35:06.818 [DEBUG] [Thread-29280] [transport.py] [_log()] Compression: none
2026-04-16T01:35:06.818 [DEBUG] [Thread-29280] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:35:06.871 [DEBUG] [Thread-29280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:35:06.871 [DEBUG] [Thread-29280] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:35:06.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:35:06.872 [DEBUG] [Thread-29280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:35:06.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:35:06.927 [DEBUG] [Thread-29280] [transport.py] [_log()] userauth is OK
2026-04-16T01:35:06.928 [DEBUG] [Thread-29280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:35:06.928 [DEBUG] [Thread-29280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:35:06.928 [DEBUG] [Thread-29280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:35:06.928 [DEBUG] [Thread-29280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:35:06.957 [INFO] [Thread-29280] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:35:06.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:35:06.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:35:07.831 [DEBUG] [Thread-29280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:35:07.831 [DEBUG] [Thread-29280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:35:07.879 [DEBUG] [Thread-29280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:35:07.879 [DEBUG] [Thread-29280] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:35:07.887 [DEBUG] [Thread-29280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:35:07.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:35:07.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')
2026-04-16T01:35:07.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
2026-04-16T01:35:07.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:35:07.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:35:07.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:35:07.920 [DEBUG] [Thread-29280] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:35:15.493 [DEBUG] [Thread-29282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:35:30.536 [DEBUG] [Thread-29283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:35:37.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:35:37.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:35:37.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
2026-04-16T01:35:39.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 34, 59), 1.92553, 88.1616, 0.0, 9.88164, 9.01513, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:35:39.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:34:59
2026-04-16T01:35:39.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:35:40.242 [DEBUG] [Thread-29284] [transport.py] [_log()] starting thread (client mode): 0xee9c2c80
2026-04-16T01:35:40.242 [DEBUG] [Thread-29284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:35:40.262 [DEBUG] [Thread-29284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:35:40.262 [INFO] [Thread-29284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:35:40.266 [DEBUG] [Thread-29284] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:35:40.266 [DEBUG] [Thread-29284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:35:40.266 [DEBUG] [Thread-29284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:35:40.266 [DEBUG] [Thread-29284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:35:40.266 [DEBUG] [Thread-29284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:35:40.266 [DEBUG] [Thread-29284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:35:40.266 [DEBUG] [Thread-29284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:35:40.266 [DEBUG] [Thread-29284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:35:40.266 [DEBUG] [Thread-29284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:35:40.266 [DEBUG] [Thread-29284] [transport.py] [_log()] client lang: <none>
2026-04-16T01:35:40.266 [DEBUG] [Thread-29284] [transport.py] [_log()] server lang: <none>
2026-04-16T01:35:40.267 [DEBUG] [Thread-29284] [transport.py] [_log()] kex follows: False
2026-04-16T01:35:40.267 [DEBUG] [Thread-29284] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:35:40.267 [DEBUG] [Thread-29284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:35:40.267 [DEBUG] [Thread-29284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:35:40.267 [DEBUG] [Thread-29284] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:35:40.267 [DEBUG] [Thread-29284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:35:40.267 [DEBUG] [Thread-29284] [transport.py] [_log()] Compression: none
2026-04-16T01:35:40.267 [DEBUG] [Thread-29284] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:35:40.284 [DEBUG] [Thread-29284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:35:40.285 [DEBUG] [Thread-29284] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:35:40.285 [DEBUG] [Thread-29284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:35:40.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:35:40.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:35:40.286 [DEBUG] [Thread-29284] [transport.py] [_log()] userauth is OK
2026-04-16T01:35:40.286 [DEBUG] [Thread-29284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:35:40.286 [DEBUG] [Thread-29284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:35:40.287 [DEBUG] [Thread-29284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:35:40.287 [DEBUG] [Thread-29284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:35:40.310 [INFO] [Thread-29284] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:35:40.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:35:40.374 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:35:40.376 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:35:41.070 [DEBUG] [Thread-29284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:35:41.071 [DEBUG] [Thread-29284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:35:41.071 [DEBUG] [Thread-29284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:35:41.111 [DEBUG] [Thread-29284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:35:41.111 [DEBUG] [Thread-29284] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:35:41.114 [DEBUG] [Thread-29284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:35:41.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:35:41.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:35:41.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:35:41.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:35:41.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:35:41.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:35:41.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:35:41.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:35:41.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:35:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.982771 -999.00   +9.20   8.53     88   +7.40 1 1 1 3 1     0    0 1.55 -13.17 .NESW 8.8 8.5 74.3 10.0 9.6 -25.6 9.4 -24.4 9.1 -22.1 9.4 -24.3
2026-04-16T01:35:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:35:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:35:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.982771
2026-04-16T01:35:41.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:35:41.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:35:41.134 [DEBUG] [Thread-29284] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:35:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:35:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:35:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:35:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:34:59', tmtdew=1.92553, humidity=88.1616, cloud=0.0, wind=9.88164, temperature=9.01513, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:35:11.414', atlas_cloud=1, atlas_rain=1, zp_data=[3.290749999999999, nan, nan, nan, nan, nan, nan, 1.5642500000000004, 1.0559999999999992, 0.20199999999999996, 1.6827499999999995, 1.6349999999999998, nan, nan, 0.30299999999999905, 0.027999999999998693, 0.034250000000000114, 0.016500000000000625, 0.18299999999999983, 0.1997499999999981, 0.18099999999999916, 0.21674999999999933, 0.052250000000000796, -0.04225000000000101, -0.0129999999999999, 0.04449999999999932, 0.024750000000000938, -0.015499999999999403, 0.013999999999999346, 0.0710000000000015, 0.07800000000000118, -0.0009999999999994458, -0.07475000000000165], zp_timestamp='2026-04-15T23:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:35:41.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:35:41.390 [DEBUG] [Thread-29287] [transport.py] [_log()] starting thread (client mode): 0xee9eb910
2026-04-16T01:35:41.390 [DEBUG] [Thread-29287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:35:41.405 [DEBUG] [Thread-29287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:35:41.405 [INFO] [Thread-29287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:35:41.413 [DEBUG] [Thread-29287] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:35:41.413 [DEBUG] [Thread-29287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:35:41.413 [DEBUG] [Thread-29287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:35:41.413 [DEBUG] [Thread-29287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:35:41.413 [DEBUG] [Thread-29287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:35:41.413 [DEBUG] [Thread-29287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:35:41.413 [DEBUG] [Thread-29287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:35:41.413 [DEBUG] [Thread-29287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:35:41.414 [DEBUG] [Thread-29287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:35:41.414 [DEBUG] [Thread-29287] [transport.py] [_log()] client lang: <none>
2026-04-16T01:35:41.414 [DEBUG] [Thread-29287] [transport.py] [_log()] server lang: <none>
2026-04-16T01:35:41.414 [DEBUG] [Thread-29287] [transport.py] [_log()] kex follows: False
2026-04-16T01:35:41.414 [DEBUG] [Thread-29287] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:35:41.414 [DEBUG] [Thread-29287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:35:41.414 [DEBUG] [Thread-29287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:35:41.414 [DEBUG] [Thread-29287] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:35:41.414 [DEBUG] [Thread-29287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:35:41.414 [DEBUG] [Thread-29287] [transport.py] [_log()] Compression: none
2026-04-16T01:35:41.414 [DEBUG] [Thread-29287] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:35:41.470 [DEBUG] [Thread-29287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:35:41.470 [DEBUG] [Thread-29287] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:35:41.471 [DEBUG] [Thread-29287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:35:41.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:35:41.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:35:41.527 [DEBUG] [Thread-29287] [transport.py] [_log()] userauth is OK
2026-04-16T01:35:41.527 [DEBUG] [Thread-29287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:35:41.527 [DEBUG] [Thread-29287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:35:41.528 [DEBUG] [Thread-29287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:35:41.528 [DEBUG] [Thread-29287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:35:41.552 [INFO] [Thread-29287] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:35:41.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:35:41.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:35:42.372 [DEBUG] [Thread-29287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:35:42.372 [DEBUG] [Thread-29287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:35:42.422 [DEBUG] [Thread-29287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:35:42.423 [DEBUG] [Thread-29287] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:35:42.433 [DEBUG] [Thread-29287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:35:42.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:35:42.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')
2026-04-16T01:35:42.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
2026-04-16T01:35:42.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:35:42.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:35:42.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:35:42.468 [DEBUG] [Thread-29287] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:35:45.566 [DEBUG] [Thread-29289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:35:56.367 [DEBUG] [Thread-29290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:36:00.611 [DEBUG] [Thread-29291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:36:12.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:36:12.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:36:12.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T01:36:13.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 35, 34), 1.65567, 89.2899, 0.0, 12.775, 8.66391, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:36:13.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:35:34
2026-04-16T01:36:14.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:36:14.731 [DEBUG] [Thread-29292] [transport.py] [_log()] starting thread (client mode): 0xf13e3a90
2026-04-16T01:36:14.732 [DEBUG] [Thread-29292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:36:14.751 [DEBUG] [Thread-29292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:36:14.752 [INFO] [Thread-29292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:36:14.755 [DEBUG] [Thread-29292] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:36:14.755 [DEBUG] [Thread-29292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:36:14.755 [DEBUG] [Thread-29292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:36:14.755 [DEBUG] [Thread-29292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:36:14.755 [DEBUG] [Thread-29292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:36:14.755 [DEBUG] [Thread-29292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:36:14.755 [DEBUG] [Thread-29292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:36:14.755 [DEBUG] [Thread-29292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:36:14.755 [DEBUG] [Thread-29292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:36:14.756 [DEBUG] [Thread-29292] [transport.py] [_log()] client lang: <none>
2026-04-16T01:36:14.756 [DEBUG] [Thread-29292] [transport.py] [_log()] server lang: <none>
2026-04-16T01:36:14.756 [DEBUG] [Thread-29292] [transport.py] [_log()] kex follows: False
2026-04-16T01:36:14.756 [DEBUG] [Thread-29292] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:36:14.756 [DEBUG] [Thread-29292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:36:14.756 [DEBUG] [Thread-29292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:36:14.756 [DEBUG] [Thread-29292] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:36:14.756 [DEBUG] [Thread-29292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:36:14.756 [DEBUG] [Thread-29292] [transport.py] [_log()] Compression: none
2026-04-16T01:36:14.756 [DEBUG] [Thread-29292] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:36:14.773 [DEBUG] [Thread-29292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:36:14.773 [DEBUG] [Thread-29292] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:36:14.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:36:14.774 [DEBUG] [Thread-29292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:36:14.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:36:14.775 [DEBUG] [Thread-29292] [transport.py] [_log()] userauth is OK
2026-04-16T01:36:14.775 [DEBUG] [Thread-29292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:36:14.775 [DEBUG] [Thread-29292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:36:14.775 [DEBUG] [Thread-29292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:36:14.776 [DEBUG] [Thread-29292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:36:14.800 [INFO] [Thread-29292] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:36:14.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:36:15.581 [DEBUG] [Thread-29292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:36:15.582 [DEBUG] [Thread-29292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:36:15.583 [DEBUG] [Thread-29292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:36:15.622 [DEBUG] [Thread-29292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:36:15.622 [DEBUG] [Thread-29292] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:36:15.625 [DEBUG] [Thread-29292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:36:15.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:36:15.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:36:15.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:36:15.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:36:15.644 [DEBUG] [Thread-29295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:36:15.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:36:15.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:36:15.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:36:15.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:36:15.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:36:15.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.983118 -999.00   +9.20   6.05     88   +7.40 1 1 1 3 1     0    0 1.49 -15.08 .NESW 7.2 6.0 127.8 11.0 9.5 -25.4 9.4 -24.5 9.2 -22.1 9.5 -24.2
2026-04-16T01:36:15.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:36:15.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:36:15.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.983118
2026-04-16T01:36:15.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:36:15.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:36:15.649 [DEBUG] [Thread-29292] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:36:15.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:36:15.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:36:15.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:36:15.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:35:34', tmtdew=1.65567, humidity=89.2899, cloud=0.0, wind=12.775, temperature=8.66391, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:35:41.395', atlas_cloud=1, atlas_rain=1, zp_data=[3.290749999999999, nan, nan, nan, nan, nan, nan, 1.5642500000000004, 1.0559999999999992, 0.20199999999999996, 1.6827499999999995, 1.6349999999999998, nan, nan, 0.30299999999999905, 0.027999999999998693, 0.034250000000000114, 0.016500000000000625, 0.18299999999999983, 0.1997499999999981, 0.18099999999999916, 0.21674999999999933, 0.052250000000000796, -0.04225000000000101, -0.0129999999999999, 0.04449999999999932, 0.024750000000000938, -0.015499999999999403, 0.013999999999999346, 0.0710000000000015, 0.07800000000000118, -0.0009999999999994458, -0.07475000000000165], zp_timestamp='2026-04-15T23:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:36:15.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:36:15.867 [DEBUG] [Thread-29296] [transport.py] [_log()] starting thread (client mode): 0xee9569b0
2026-04-16T01:36:15.867 [DEBUG] [Thread-29296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:36:15.882 [DEBUG] [Thread-29296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:36:15.882 [INFO] [Thread-29296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:36:15.889 [DEBUG] [Thread-29296] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:36:15.889 [DEBUG] [Thread-29296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:36:15.890 [DEBUG] [Thread-29296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:36:15.890 [DEBUG] [Thread-29296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:36:15.890 [DEBUG] [Thread-29296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:36:15.890 [DEBUG] [Thread-29296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:36:15.890 [DEBUG] [Thread-29296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:36:15.890 [DEBUG] [Thread-29296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:36:15.890 [DEBUG] [Thread-29296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:36:15.890 [DEBUG] [Thread-29296] [transport.py] [_log()] client lang: <none>
2026-04-16T01:36:15.890 [DEBUG] [Thread-29296] [transport.py] [_log()] server lang: <none>
2026-04-16T01:36:15.890 [DEBUG] [Thread-29296] [transport.py] [_log()] kex follows: False
2026-04-16T01:36:15.890 [DEBUG] [Thread-29296] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:36:15.890 [DEBUG] [Thread-29296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:36:15.891 [DEBUG] [Thread-29296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:36:15.891 [DEBUG] [Thread-29296] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:36:15.891 [DEBUG] [Thread-29296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:36:15.891 [DEBUG] [Thread-29296] [transport.py] [_log()] Compression: none
2026-04-16T01:36:15.891 [DEBUG] [Thread-29296] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:36:15.946 [DEBUG] [Thread-29296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:36:15.946 [DEBUG] [Thread-29296] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:36:15.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:36:15.947 [DEBUG] [Thread-29296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:36:15.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:36:16.003 [DEBUG] [Thread-29296] [transport.py] [_log()] userauth is OK
2026-04-16T01:36:16.003 [DEBUG] [Thread-29296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:36:16.003 [DEBUG] [Thread-29296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:36:16.003 [DEBUG] [Thread-29296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:36:16.004 [DEBUG] [Thread-29296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:36:16.029 [INFO] [Thread-29296] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:36:16.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:36:16.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:36:16.898 [DEBUG] [Thread-29296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:36:16.898 [DEBUG] [Thread-29296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:36:16.946 [DEBUG] [Thread-29296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:36:16.946 [DEBUG] [Thread-29296] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:36:16.955 [DEBUG] [Thread-29296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:36:16.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:36:16.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')
2026-04-16T01:36:16.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
2026-04-16T01:36:16.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:36:16.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:36:16.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:36:16.990 [DEBUG] [Thread-29296] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:36:30.675 [DEBUG] [Thread-29298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:36:40.581 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:36:40.582 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:36:45.720 [DEBUG] [Thread-29299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:36:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:36:47.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:36:47.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T01:36:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 36, 10), 1.87496, 88.1613, 0.0, 10.0933, 8.96517, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:36:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:36:10
2026-04-16T01:36:48.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:36:49.163 [DEBUG] [Thread-29300] [transport.py] [_log()] starting thread (client mode): 0xf1353a90
2026-04-16T01:36:49.163 [DEBUG] [Thread-29300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:36:49.184 [DEBUG] [Thread-29300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:36:49.184 [INFO] [Thread-29300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:36:49.187 [DEBUG] [Thread-29300] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:36:49.188 [DEBUG] [Thread-29300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:36:49.188 [DEBUG] [Thread-29300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:36:49.188 [DEBUG] [Thread-29300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:36:49.188 [DEBUG] [Thread-29300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:36:49.188 [DEBUG] [Thread-29300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:36:49.188 [DEBUG] [Thread-29300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:36:49.188 [DEBUG] [Thread-29300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:36:49.188 [DEBUG] [Thread-29300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:36:49.188 [DEBUG] [Thread-29300] [transport.py] [_log()] client lang: <none>
2026-04-16T01:36:49.188 [DEBUG] [Thread-29300] [transport.py] [_log()] server lang: <none>
2026-04-16T01:36:49.188 [DEBUG] [Thread-29300] [transport.py] [_log()] kex follows: False
2026-04-16T01:36:49.188 [DEBUG] [Thread-29300] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:36:49.189 [DEBUG] [Thread-29300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:36:49.189 [DEBUG] [Thread-29300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:36:49.189 [DEBUG] [Thread-29300] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:36:49.189 [DEBUG] [Thread-29300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:36:49.189 [DEBUG] [Thread-29300] [transport.py] [_log()] Compression: none
2026-04-16T01:36:49.189 [DEBUG] [Thread-29300] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:36:49.203 [DEBUG] [Thread-29300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:36:49.204 [DEBUG] [Thread-29300] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:36:49.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:36:49.204 [DEBUG] [Thread-29300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:36:49.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:36:49.205 [DEBUG] [Thread-29300] [transport.py] [_log()] userauth is OK
2026-04-16T01:36:49.205 [DEBUG] [Thread-29300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:36:49.205 [DEBUG] [Thread-29300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:36:49.205 [DEBUG] [Thread-29300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:36:49.205 [DEBUG] [Thread-29300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:36:49.222 [INFO] [Thread-29300] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:36:49.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:36:50.005 [DEBUG] [Thread-29300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:36:50.005 [DEBUG] [Thread-29300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:36:50.006 [DEBUG] [Thread-29300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:36:50.046 [DEBUG] [Thread-29300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:36:50.046 [DEBUG] [Thread-29300] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:36:50.049 [DEBUG] [Thread-29300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:36:50.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:36:50.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:36:50.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:36:50.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:36:50.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:36:50.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:36:50.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:36:50.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:36:50.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:36:50.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.983465 -999.00   +9.20   8.23     88   +7.40 1 1 1 3 1     0    0 1.52 -13.75 .NESW 7.2 8.2 74.6 9.1 9.5 -25.7 9.4 -24.5 9.1 -22.4 9.4 -24.3
2026-04-16T01:36:50.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:36:50.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:36:50.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.983465
2026-04-16T01:36:50.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:36:50.076 [DEBUG] [Thread-29300] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:36:50.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:36:50.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:36:50.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:36:50.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:36:50.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:36:10', tmtdew=1.87496, humidity=88.1613, cloud=0.0, wind=10.0933, temperature=8.96517, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:36:11.376', atlas_cloud=1, atlas_rain=1, zp_data=[3.290749999999999, nan, nan, nan, nan, nan, nan, 1.5642500000000004, 1.0559999999999992, 0.20199999999999996, 1.6827499999999995, 1.6349999999999998, nan, nan, 0.30299999999999905, 0.027999999999998693, 0.034250000000000114, 0.016500000000000625, 0.18299999999999983, 0.1997499999999981, 0.18099999999999916, 0.21674999999999933, 0.052250000000000796, -0.04225000000000101, -0.0129999999999999, 0.04449999999999932, 0.024750000000000938, -0.015499999999999403, 0.013999999999999346, 0.0710000000000015, 0.07800000000000118, -0.0009999999999994458, -0.07475000000000165], zp_timestamp='2026-04-15T23:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:36:50.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:36:50.333 [DEBUG] [Thread-29303] [transport.py] [_log()] starting thread (client mode): 0xee954310
2026-04-16T01:36:50.334 [DEBUG] [Thread-29303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:36:50.348 [DEBUG] [Thread-29303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:36:50.348 [INFO] [Thread-29303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:36:50.356 [DEBUG] [Thread-29303] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:36:50.356 [DEBUG] [Thread-29303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:36:50.356 [DEBUG] [Thread-29303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:36:50.356 [DEBUG] [Thread-29303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:36:50.356 [DEBUG] [Thread-29303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:36:50.356 [DEBUG] [Thread-29303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:36:50.356 [DEBUG] [Thread-29303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:36:50.356 [DEBUG] [Thread-29303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:36:50.356 [DEBUG] [Thread-29303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:36:50.356 [DEBUG] [Thread-29303] [transport.py] [_log()] client lang: <none>
2026-04-16T01:36:50.357 [DEBUG] [Thread-29303] [transport.py] [_log()] server lang: <none>
2026-04-16T01:36:50.357 [DEBUG] [Thread-29303] [transport.py] [_log()] kex follows: False
2026-04-16T01:36:50.357 [DEBUG] [Thread-29303] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:36:50.357 [DEBUG] [Thread-29303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:36:50.357 [DEBUG] [Thread-29303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:36:50.357 [DEBUG] [Thread-29303] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:36:50.357 [DEBUG] [Thread-29303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:36:50.357 [DEBUG] [Thread-29303] [transport.py] [_log()] Compression: none
2026-04-16T01:36:50.357 [DEBUG] [Thread-29303] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:36:50.414 [DEBUG] [Thread-29303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:36:50.414 [DEBUG] [Thread-29303] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:36:50.415 [DEBUG] [Thread-29303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:36:50.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:36:50.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:36:50.471 [DEBUG] [Thread-29303] [transport.py] [_log()] userauth is OK
2026-04-16T01:36:50.471 [DEBUG] [Thread-29303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:36:50.471 [DEBUG] [Thread-29303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:36:50.472 [DEBUG] [Thread-29303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:36:50.472 [DEBUG] [Thread-29303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:36:50.493 [INFO] [Thread-29303] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:36:50.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:36:50.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:36:51.291 [DEBUG] [Thread-29303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:36:51.291 [DEBUG] [Thread-29303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:36:51.339 [DEBUG] [Thread-29303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:36:51.339 [DEBUG] [Thread-29303] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:36:51.348 [DEBUG] [Thread-29303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:36:51.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:36:51.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')
2026-04-16T01:36:51.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
2026-04-16T01:36:51.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:36:51.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:36:51.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:36:51.383 [DEBUG] [Thread-29303] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:36:56.528 [DEBUG] [Thread-29305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:37:00.751 [DEBUG] [Thread-29306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:37:15.794 [DEBUG] [Thread-29307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:37:21.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:37:21.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:37:21.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
2026-04-16T01:37:22.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 36, 46), 1.65074, 89.3225, 0.0, 13.0219, 8.69671, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:37:22.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:36:46
2026-04-16T01:37:23.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:37:23.722 [DEBUG] [Thread-29308] [transport.py] [_log()] starting thread (client mode): 0xf13e2c50
2026-04-16T01:37:23.722 [DEBUG] [Thread-29308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:37:23.741 [DEBUG] [Thread-29308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:37:23.741 [INFO] [Thread-29308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:37:23.744 [DEBUG] [Thread-29308] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:37:23.745 [DEBUG] [Thread-29308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:37:23.745 [DEBUG] [Thread-29308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:37:23.745 [DEBUG] [Thread-29308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:37:23.745 [DEBUG] [Thread-29308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:37:23.745 [DEBUG] [Thread-29308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:37:23.745 [DEBUG] [Thread-29308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:37:23.745 [DEBUG] [Thread-29308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:37:23.745 [DEBUG] [Thread-29308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:37:23.745 [DEBUG] [Thread-29308] [transport.py] [_log()] client lang: <none>
2026-04-16T01:37:23.745 [DEBUG] [Thread-29308] [transport.py] [_log()] server lang: <none>
2026-04-16T01:37:23.745 [DEBUG] [Thread-29308] [transport.py] [_log()] kex follows: False
2026-04-16T01:37:23.745 [DEBUG] [Thread-29308] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:37:23.746 [DEBUG] [Thread-29308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:37:23.746 [DEBUG] [Thread-29308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:37:23.746 [DEBUG] [Thread-29308] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:37:23.746 [DEBUG] [Thread-29308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:37:23.746 [DEBUG] [Thread-29308] [transport.py] [_log()] Compression: none
2026-04-16T01:37:23.746 [DEBUG] [Thread-29308] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:37:23.764 [DEBUG] [Thread-29308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:37:23.764 [DEBUG] [Thread-29308] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:37:23.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:37:23.765 [DEBUG] [Thread-29308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:37:23.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:37:23.766 [DEBUG] [Thread-29308] [transport.py] [_log()] userauth is OK
2026-04-16T01:37:23.766 [DEBUG] [Thread-29308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:37:23.766 [DEBUG] [Thread-29308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:37:23.766 [DEBUG] [Thread-29308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:37:23.766 [DEBUG] [Thread-29308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:37:23.783 [INFO] [Thread-29308] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:37:23.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:37:24.579 [DEBUG] [Thread-29308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:37:24.579 [DEBUG] [Thread-29308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:37:24.580 [DEBUG] [Thread-29308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:37:24.620 [DEBUG] [Thread-29308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:37:24.620 [DEBUG] [Thread-29308] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:37:24.622 [DEBUG] [Thread-29308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:37:24.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:37:24.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:37:24.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:37:24.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:37:24.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:37:24.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:37:24.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:37:24.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:37:24.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:37:24.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.983812 -999.00   +9.20   7.71     88   +7.40 1 1 1 3 1     0    0 1.56 -12.21 .NESW 8.9 7.7 86.8 13.1 9.5 -25.8 9.4 -24.4 9.2 -22.1 9.4 -24.3
2026-04-16T01:37:24.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:37:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:37:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.983812
2026-04-16T01:37:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:37:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:37:24.643 [DEBUG] [Thread-29308] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:37:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:37:24.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:37:24.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:37:24.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:36:46', tmtdew=1.65074, humidity=89.3225, cloud=0.0, wind=13.0219, temperature=8.69671, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:36:41.357', atlas_cloud=1, atlas_rain=1, zp_data=[3.391749999999999, nan, nan, nan, nan, nan, nan, nan, 2.0314999999999994, 0.3135000000000012, 2.5852499999999994, 2.1079999999999997, nan, nan, 0.27199999999999847, 0.06700000000000017, 0.23024999999999984, 0.08150000000000013, 0.28449999999999953, 0.3222499999999986, 0.2835000000000001, 0.3042499999999997, 0.12124999999999986, -0.03824999999999967, -0.031000000000000583, 0.05150000000000077, 0.062249999999998806, 0.03500000000000014, 0.02200000000000024, 0.08399999999999963, 0.06300000000000061, -0.016000000000000014, -0.08774999999999977], zp_timestamp='2026-04-15T23:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:37:24.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:37:24.856 [DEBUG] [Thread-29311] [transport.py] [_log()] starting thread (client mode): 0xf13e2890
2026-04-16T01:37:24.856 [DEBUG] [Thread-29311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:37:24.871 [DEBUG] [Thread-29311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:37:24.871 [INFO] [Thread-29311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:37:24.879 [DEBUG] [Thread-29311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:37:24.879 [DEBUG] [Thread-29311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:37:24.879 [DEBUG] [Thread-29311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:37:24.879 [DEBUG] [Thread-29311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:37:24.880 [DEBUG] [Thread-29311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:37:24.880 [DEBUG] [Thread-29311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:37:24.880 [DEBUG] [Thread-29311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:37:24.880 [DEBUG] [Thread-29311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:37:24.880 [DEBUG] [Thread-29311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:37:24.880 [DEBUG] [Thread-29311] [transport.py] [_log()] client lang: <none>
2026-04-16T01:37:24.880 [DEBUG] [Thread-29311] [transport.py] [_log()] server lang: <none>
2026-04-16T01:37:24.880 [DEBUG] [Thread-29311] [transport.py] [_log()] kex follows: False
2026-04-16T01:37:24.880 [DEBUG] [Thread-29311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:37:24.880 [DEBUG] [Thread-29311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:37:24.880 [DEBUG] [Thread-29311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:37:24.880 [DEBUG] [Thread-29311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:37:24.881 [DEBUG] [Thread-29311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:37:24.881 [DEBUG] [Thread-29311] [transport.py] [_log()] Compression: none
2026-04-16T01:37:24.881 [DEBUG] [Thread-29311] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:37:24.934 [DEBUG] [Thread-29311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:37:24.934 [DEBUG] [Thread-29311] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:37:24.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:37:24.935 [DEBUG] [Thread-29311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:37:24.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:37:24.991 [DEBUG] [Thread-29311] [transport.py] [_log()] userauth is OK
2026-04-16T01:37:24.991 [DEBUG] [Thread-29311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:37:24.991 [DEBUG] [Thread-29311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:37:24.991 [DEBUG] [Thread-29311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:37:24.991 [DEBUG] [Thread-29311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:37:25.016 [INFO] [Thread-29311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:37:25.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:37:25.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:37:25.808 [DEBUG] [Thread-29311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:37:25.808 [DEBUG] [Thread-29311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:37:25.855 [DEBUG] [Thread-29311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:37:25.855 [DEBUG] [Thread-29311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:37:25.864 [DEBUG] [Thread-29311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:37:25.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:37: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')
2026-04-16T01:37:25.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
2026-04-16T01:37:25.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:37:25.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:37:25.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:37:25.896 [DEBUG] [Thread-29311] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:37:30.824 [DEBUG] [Thread-29313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:37:33.481 [DEBUG] [Thread-23763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:37:40.783 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:37:40.784 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:37:45.871 [DEBUG] [Thread-29314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:37:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:37:55.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:37:55.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
2026-04-16T01:37:56.675 [DEBUG] [Thread-29315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:37:57.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 37, 21), 1.86477, 88.2274, 0.0, 10.0757, 9.01479, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:37:57.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:37:21
2026-04-16T01:37:57.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:37:58.312 [DEBUG] [Thread-29316] [transport.py] [_log()] starting thread (client mode): 0xf13e0df0
2026-04-16T01:37:58.312 [DEBUG] [Thread-29316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:37:58.332 [DEBUG] [Thread-29316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:37:58.332 [INFO] [Thread-29316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:37:58.335 [DEBUG] [Thread-29316] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:37:58.335 [DEBUG] [Thread-29316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:37:58.336 [DEBUG] [Thread-29316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:37:58.336 [DEBUG] [Thread-29316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:37:58.336 [DEBUG] [Thread-29316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:37:58.336 [DEBUG] [Thread-29316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:37:58.336 [DEBUG] [Thread-29316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:37:58.336 [DEBUG] [Thread-29316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:37:58.336 [DEBUG] [Thread-29316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:37:58.336 [DEBUG] [Thread-29316] [transport.py] [_log()] client lang: <none>
2026-04-16T01:37:58.336 [DEBUG] [Thread-29316] [transport.py] [_log()] server lang: <none>
2026-04-16T01:37:58.336 [DEBUG] [Thread-29316] [transport.py] [_log()] kex follows: False
2026-04-16T01:37:58.336 [DEBUG] [Thread-29316] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:37:58.336 [DEBUG] [Thread-29316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:37:58.337 [DEBUG] [Thread-29316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:37:58.337 [DEBUG] [Thread-29316] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:37:58.337 [DEBUG] [Thread-29316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:37:58.337 [DEBUG] [Thread-29316] [transport.py] [_log()] Compression: none
2026-04-16T01:37:58.337 [DEBUG] [Thread-29316] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:37:58.354 [DEBUG] [Thread-29316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:37:58.354 [DEBUG] [Thread-29316] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:37:58.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:37:58.355 [DEBUG] [Thread-29316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:37:58.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:37:58.356 [DEBUG] [Thread-29316] [transport.py] [_log()] userauth is OK
2026-04-16T01:37:58.356 [DEBUG] [Thread-29316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:37:58.356 [DEBUG] [Thread-29316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:37:58.356 [DEBUG] [Thread-29316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:37:58.356 [DEBUG] [Thread-29316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:37:58.389 [INFO] [Thread-29316] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:37:58.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:37:59.138 [DEBUG] [Thread-29316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:37:59.138 [DEBUG] [Thread-29316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:37:59.139 [DEBUG] [Thread-29316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:37:59.179 [DEBUG] [Thread-29316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:37:59.179 [DEBUG] [Thread-29316] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:37:59.182 [DEBUG] [Thread-29316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:37:59.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:37:59.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:37:59.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:37:59.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:37:59.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:37:59.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:37:59.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:37:59.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:37:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:37:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.984159 -999.00   +9.10   8.55     88   +7.30 1 1 1 3 1     0    0 1.55 -11.81 .NESW 8.8 8.6 99.4 11.1 9.5 -25.7 9.4 -24.5 9.1 -22.3 9.4 -24.5
2026-04-16T01:37:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:37:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:37:59.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.984159
2026-04-16T01:37:59.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:37:59.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:37:59.206 [DEBUG] [Thread-29316] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:37:59.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:37:59.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:37:59.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:37:59.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:37:21', tmtdew=1.86477, humidity=88.2274, cloud=0.0, wind=10.0757, temperature=9.01479, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:37:11.338', atlas_cloud=1, atlas_rain=1, zp_data=[3.391749999999999, nan, nan, nan, nan, nan, nan, nan, 2.0314999999999994, 0.3135000000000012, 2.5852499999999994, 2.1079999999999997, nan, nan, 0.27199999999999847, 0.06700000000000017, 0.23024999999999984, 0.08150000000000013, 0.28449999999999953, 0.3222499999999986, 0.2835000000000001, 0.3042499999999997, 0.12124999999999986, -0.03824999999999967, -0.031000000000000583, 0.05150000000000077, 0.062249999999998806, 0.03500000000000014, 0.02200000000000024, 0.08399999999999963, 0.06300000000000061, -0.016000000000000014, -0.08774999999999977], zp_timestamp='2026-04-15T23:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:37:59.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:37:59.463 [DEBUG] [Thread-29319] [transport.py] [_log()] starting thread (client mode): 0xee954eb0
2026-04-16T01:37:59.463 [DEBUG] [Thread-29319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:37:59.478 [DEBUG] [Thread-29319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:37:59.478 [INFO] [Thread-29319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:37:59.485 [DEBUG] [Thread-29319] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:37:59.486 [DEBUG] [Thread-29319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:37:59.486 [DEBUG] [Thread-29319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:37:59.486 [DEBUG] [Thread-29319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:37:59.486 [DEBUG] [Thread-29319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:37:59.486 [DEBUG] [Thread-29319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:37:59.486 [DEBUG] [Thread-29319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:37:59.486 [DEBUG] [Thread-29319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:37:59.486 [DEBUG] [Thread-29319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:37:59.486 [DEBUG] [Thread-29319] [transport.py] [_log()] client lang: <none>
2026-04-16T01:37:59.486 [DEBUG] [Thread-29319] [transport.py] [_log()] server lang: <none>
2026-04-16T01:37:59.486 [DEBUG] [Thread-29319] [transport.py] [_log()] kex follows: False
2026-04-16T01:37:59.487 [DEBUG] [Thread-29319] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:37:59.487 [DEBUG] [Thread-29319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:37:59.487 [DEBUG] [Thread-29319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:37:59.487 [DEBUG] [Thread-29319] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:37:59.487 [DEBUG] [Thread-29319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:37:59.487 [DEBUG] [Thread-29319] [transport.py] [_log()] Compression: none
2026-04-16T01:37:59.487 [DEBUG] [Thread-29319] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:37:59.542 [DEBUG] [Thread-29319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:37:59.542 [DEBUG] [Thread-29319] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:37:59.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:37:59.543 [DEBUG] [Thread-29319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:37:59.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:37:59.599 [DEBUG] [Thread-29319] [transport.py] [_log()] userauth is OK
2026-04-16T01:37:59.599 [DEBUG] [Thread-29319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:37:59.599 [DEBUG] [Thread-29319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:37:59.599 [DEBUG] [Thread-29319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:37:59.599 [DEBUG] [Thread-29319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:37:59.625 [INFO] [Thread-29319] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:37:59.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:37:59.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:38:00.442 [DEBUG] [Thread-29319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:38:00.442 [DEBUG] [Thread-29319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:38:00.490 [DEBUG] [Thread-29319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:38:00.490 [DEBUG] [Thread-29319] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:38:00.499 [DEBUG] [Thread-29319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:38:00.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:38:00.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')
2026-04-16T01:38:00.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
2026-04-16T01:38:00.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:38:00.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:38:00.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:38:00.534 [DEBUG] [Thread-29319] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:38:00.902 [DEBUG] [Thread-29321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:38:15.944 [DEBUG] [Thread-29322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:38:30.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:38:30.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:38:30.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
2026-04-16T01:38:30.973 [DEBUG] [Thread-29323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:38:31.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 37, 57), 1.86417, 87.7274, 0.0, 10.2344, 8.91502, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:38:31.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:37:57
2026-04-16T01:38:32.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:38:32.683 [DEBUG] [Thread-29324] [transport.py] [_log()] starting thread (client mode): 0xee9565f0
2026-04-16T01:38:32.683 [DEBUG] [Thread-29324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:38:32.704 [DEBUG] [Thread-29324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:38:32.704 [INFO] [Thread-29324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:38:32.707 [DEBUG] [Thread-29324] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:38:32.707 [DEBUG] [Thread-29324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:38:32.707 [DEBUG] [Thread-29324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:38:32.708 [DEBUG] [Thread-29324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:38:32.708 [DEBUG] [Thread-29324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:38:32.708 [DEBUG] [Thread-29324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:38:32.708 [DEBUG] [Thread-29324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:38:32.708 [DEBUG] [Thread-29324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:38:32.708 [DEBUG] [Thread-29324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:38:32.708 [DEBUG] [Thread-29324] [transport.py] [_log()] client lang: <none>
2026-04-16T01:38:32.708 [DEBUG] [Thread-29324] [transport.py] [_log()] server lang: <none>
2026-04-16T01:38:32.708 [DEBUG] [Thread-29324] [transport.py] [_log()] kex follows: False
2026-04-16T01:38:32.708 [DEBUG] [Thread-29324] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:38:32.708 [DEBUG] [Thread-29324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:38:32.708 [DEBUG] [Thread-29324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:38:32.709 [DEBUG] [Thread-29324] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:38:32.709 [DEBUG] [Thread-29324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:38:32.709 [DEBUG] [Thread-29324] [transport.py] [_log()] Compression: none
2026-04-16T01:38:32.709 [DEBUG] [Thread-29324] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:38:32.725 [DEBUG] [Thread-29324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:38:32.725 [DEBUG] [Thread-29324] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:38:32.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:38:32.726 [DEBUG] [Thread-29324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:38:32.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:38:32.727 [DEBUG] [Thread-29324] [transport.py] [_log()] userauth is OK
2026-04-16T01:38:32.727 [DEBUG] [Thread-29324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:38:32.727 [DEBUG] [Thread-29324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:38:32.727 [DEBUG] [Thread-29324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:38:32.727 [DEBUG] [Thread-29324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:38:32.751 [INFO] [Thread-29324] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:38:32.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:38:33.483 [DEBUG] [Thread-29324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:38:33.483 [DEBUG] [Thread-29324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:38:33.484 [DEBUG] [Thread-29324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:38:33.524 [DEBUG] [Thread-29324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:38:33.524 [DEBUG] [Thread-29324] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:38:33.527 [DEBUG] [Thread-29324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:38:33.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:38:33.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:38:33.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:38:33.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:38:33.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:38:33.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:38:33.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:38:33.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:38:33.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:38:33.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.984854 -999.00   +9.10  10.09     88   +7.30 1 1 1 3 1     0    0 1.58 -10.17 .NESW 6.7 10.1 76.4 10.8 9.5 -25.7 9.4 -24.4 9.1 -22.3 9.4 -24.3
2026-04-16T01:38:33.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:38:33.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:38:33.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.984854
2026-04-16T01:38:33.552 [DEBUG] [Thread-29324] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:38:33.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:38:33.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:38:33.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:38:33.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:38:33.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:38:33.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:37:57', tmtdew=1.86417, humidity=87.7274, cloud=0.0, wind=10.2344, temperature=8.91502, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:38:11.386', atlas_cloud=1, atlas_rain=1, zp_data=[3.391749999999999, nan, nan, nan, nan, nan, nan, nan, 2.0314999999999994, 0.3135000000000012, 2.5852499999999994, 2.1079999999999997, nan, nan, 0.27199999999999847, 0.06700000000000017, 0.23024999999999984, 0.08150000000000013, 0.28449999999999953, 0.3222499999999986, 0.2835000000000001, 0.3042499999999997, 0.12124999999999986, -0.03824999999999967, -0.031000000000000583, 0.05150000000000077, 0.062249999999998806, 0.03500000000000014, 0.02200000000000024, 0.08399999999999963, 0.06300000000000061, -0.016000000000000014, -0.08774999999999977], zp_timestamp='2026-04-15T23:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:38:33.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:38:33.807 [DEBUG] [Thread-29327] [transport.py] [_log()] starting thread (client mode): 0xee9543a0
2026-04-16T01:38:33.807 [DEBUG] [Thread-29327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:38:33.822 [DEBUG] [Thread-29327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:38:33.822 [INFO] [Thread-29327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:38:33.829 [DEBUG] [Thread-29327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:38:33.829 [DEBUG] [Thread-29327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:38:33.829 [DEBUG] [Thread-29327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:38:33.829 [DEBUG] [Thread-29327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:38:33.830 [DEBUG] [Thread-29327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:38:33.830 [DEBUG] [Thread-29327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:38:33.830 [DEBUG] [Thread-29327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:38:33.830 [DEBUG] [Thread-29327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:38:33.830 [DEBUG] [Thread-29327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:38:33.830 [DEBUG] [Thread-29327] [transport.py] [_log()] client lang: <none>
2026-04-16T01:38:33.830 [DEBUG] [Thread-29327] [transport.py] [_log()] server lang: <none>
2026-04-16T01:38:33.830 [DEBUG] [Thread-29327] [transport.py] [_log()] kex follows: False
2026-04-16T01:38:33.830 [DEBUG] [Thread-29327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:38:33.830 [DEBUG] [Thread-29327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:38:33.830 [DEBUG] [Thread-29327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:38:33.830 [DEBUG] [Thread-29327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:38:33.831 [DEBUG] [Thread-29327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:38:33.831 [DEBUG] [Thread-29327] [transport.py] [_log()] Compression: none
2026-04-16T01:38:33.831 [DEBUG] [Thread-29327] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:38:33.886 [DEBUG] [Thread-29327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:38:33.886 [DEBUG] [Thread-29327] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:38:33.887 [DEBUG] [Thread-29327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:38:33.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:38:33.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:38:33.943 [DEBUG] [Thread-29327] [transport.py] [_log()] userauth is OK
2026-04-16T01:38:33.943 [DEBUG] [Thread-29327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:38:33.943 [DEBUG] [Thread-29327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:38:33.943 [DEBUG] [Thread-29327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:38:33.943 [DEBUG] [Thread-29327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:38:33.966 [INFO] [Thread-29327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:38:33.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:38:33.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:38:34.867 [DEBUG] [Thread-29327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:38:34.867 [DEBUG] [Thread-29327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:38:34.914 [DEBUG] [Thread-29327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:38:34.914 [DEBUG] [Thread-29327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:38:34.923 [DEBUG] [Thread-29327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:38:34.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:38:34.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')
2026-04-16T01:38:34.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
2026-04-16T01:38:34.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:38:34.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:38:34.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:38:34.954 [DEBUG] [Thread-29327] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:38:40.984 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:38:40.985 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:38:46.001 [DEBUG] [Thread-29329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:38:56.822 [DEBUG] [Thread-29330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:39:01.038 [DEBUG] [Thread-29331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:39:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:39:04.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:39:04.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T01:39:06.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 38, 33), 1.61748, 89.5215, 0.0, 13.4806, 8.63029, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:39:06.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:38:33
2026-04-16T01:39:06.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:39:07.109 [DEBUG] [Thread-29332] [transport.py] [_log()] starting thread (client mode): 0xee992020
2026-04-16T01:39:07.109 [DEBUG] [Thread-29332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:39:07.127 [DEBUG] [Thread-29332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:39:07.127 [INFO] [Thread-29332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:39:07.130 [DEBUG] [Thread-29332] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:39:07.130 [DEBUG] [Thread-29332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:39:07.130 [DEBUG] [Thread-29332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:39:07.131 [DEBUG] [Thread-29332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:39:07.131 [DEBUG] [Thread-29332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:39:07.131 [DEBUG] [Thread-29332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:39:07.131 [DEBUG] [Thread-29332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:39:07.131 [DEBUG] [Thread-29332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:39:07.131 [DEBUG] [Thread-29332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:39:07.131 [DEBUG] [Thread-29332] [transport.py] [_log()] client lang: <none>
2026-04-16T01:39:07.131 [DEBUG] [Thread-29332] [transport.py] [_log()] server lang: <none>
2026-04-16T01:39:07.131 [DEBUG] [Thread-29332] [transport.py] [_log()] kex follows: False
2026-04-16T01:39:07.131 [DEBUG] [Thread-29332] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:39:07.131 [DEBUG] [Thread-29332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:39:07.131 [DEBUG] [Thread-29332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:39:07.132 [DEBUG] [Thread-29332] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:39:07.132 [DEBUG] [Thread-29332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:39:07.132 [DEBUG] [Thread-29332] [transport.py] [_log()] Compression: none
2026-04-16T01:39:07.132 [DEBUG] [Thread-29332] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:39:07.148 [DEBUG] [Thread-29332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:39:07.148 [DEBUG] [Thread-29332] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:39:07.149 [DEBUG] [Thread-29332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:39:07.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:39:07.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:39:07.150 [DEBUG] [Thread-29332] [transport.py] [_log()] userauth is OK
2026-04-16T01:39:07.150 [DEBUG] [Thread-29332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:39:07.150 [DEBUG] [Thread-29332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:39:07.150 [DEBUG] [Thread-29332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:39:07.151 [DEBUG] [Thread-29332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:39:07.175 [INFO] [Thread-29332] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:39:07.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:39:07.935 [DEBUG] [Thread-29332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:39:07.935 [DEBUG] [Thread-29332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:39:07.936 [DEBUG] [Thread-29332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:39:07.977 [DEBUG] [Thread-29332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:39:07.978 [DEBUG] [Thread-29332] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:39:07.981 [DEBUG] [Thread-29332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:39:07.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:39:07.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:39:07.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:39:07.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:39:08.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:39:08.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:39:08.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:39:08.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:39:08.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:39:08.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.985201 -999.00   +9.10  10.64     88   +7.30 1 1 1 3 1     0    0 1.63 -9.50 .NESW 10.2 10.6 68.8 11.2 9.5 -25.8 9.4 -24.6 9.1 -22.1 9.4 -24.2
2026-04-16T01:39:08.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:39:08.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:39:08.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.985201
2026-04-16T01:39:08.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:39:08.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:39:08.007 [DEBUG] [Thread-29332] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:39:08.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:39:08.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:39:08.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:39:08.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:38:33', tmtdew=1.61748, humidity=89.5215, cloud=0.0, wind=13.4806, temperature=8.63029, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:38:41.366', atlas_cloud=1, atlas_rain=1, zp_data=[3.391749999999999, nan, nan, nan, nan, nan, nan, nan, 2.0314999999999994, 0.3135000000000012, 2.5852499999999994, 2.1079999999999997, nan, nan, 0.27199999999999847, 0.06700000000000017, 0.23024999999999984, 0.08150000000000013, 0.28449999999999953, 0.3222499999999986, 0.2835000000000001, 0.3042499999999997, 0.12124999999999986, -0.03824999999999967, -0.031000000000000583, 0.05150000000000077, 0.062249999999998806, 0.03500000000000014, 0.02200000000000024, 0.08399999999999963, 0.06300000000000061, -0.016000000000000014, -0.08774999999999977], zp_timestamp='2026-04-15T23:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:39:08.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:39:08.256 [DEBUG] [Thread-29335] [transport.py] [_log()] starting thread (client mode): 0xee993af0
2026-04-16T01:39:08.256 [DEBUG] [Thread-29335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:39:08.271 [DEBUG] [Thread-29335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:39:08.271 [INFO] [Thread-29335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:39:08.279 [DEBUG] [Thread-29335] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:39:08.279 [DEBUG] [Thread-29335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:39:08.279 [DEBUG] [Thread-29335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:39:08.279 [DEBUG] [Thread-29335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:39:08.279 [DEBUG] [Thread-29335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:39:08.280 [DEBUG] [Thread-29335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:39:08.280 [DEBUG] [Thread-29335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:39:08.280 [DEBUG] [Thread-29335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:39:08.280 [DEBUG] [Thread-29335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:39:08.280 [DEBUG] [Thread-29335] [transport.py] [_log()] client lang: <none>
2026-04-16T01:39:08.280 [DEBUG] [Thread-29335] [transport.py] [_log()] server lang: <none>
2026-04-16T01:39:08.281 [DEBUG] [Thread-29335] [transport.py] [_log()] kex follows: False
2026-04-16T01:39:08.281 [DEBUG] [Thread-29335] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:39:08.281 [DEBUG] [Thread-29335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:39:08.281 [DEBUG] [Thread-29335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:39:08.281 [DEBUG] [Thread-29335] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:39:08.281 [DEBUG] [Thread-29335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:39:08.282 [DEBUG] [Thread-29335] [transport.py] [_log()] Compression: none
2026-04-16T01:39:08.282 [DEBUG] [Thread-29335] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:39:08.334 [DEBUG] [Thread-29335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:39:08.334 [DEBUG] [Thread-29335] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:39:08.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:39:08.334 [DEBUG] [Thread-29335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:39:08.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:39:08.391 [DEBUG] [Thread-29335] [transport.py] [_log()] userauth is OK
2026-04-16T01:39:08.391 [DEBUG] [Thread-29335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:39:08.391 [DEBUG] [Thread-29335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:39:08.391 [DEBUG] [Thread-29335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:39:08.391 [DEBUG] [Thread-29335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:39:08.409 [INFO] [Thread-29335] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:39:08.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:39:08.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:39:09.246 [DEBUG] [Thread-29335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:39:09.247 [DEBUG] [Thread-29335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:39:09.295 [DEBUG] [Thread-29335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:39:09.295 [DEBUG] [Thread-29335] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:39:09.304 [DEBUG] [Thread-29335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:39:09.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:39:09.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')
2026-04-16T01:39:09.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
2026-04-16T01:39:09.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:39:09.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:39:09.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:39:09.339 [DEBUG] [Thread-29335] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:39:16.068 [DEBUG] [Thread-29337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:39:31.115 [DEBUG] [Thread-29338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:39:39.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:39:39.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:39:39.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
2026-04-16T01:39:40.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 39, 9), 1.85607, 88.2771, 0.0, 10.111, 8.915, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:39:40.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:39:09
2026-04-16T01:39:41.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:39:41.187 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:39:41.187 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:39:41.563 [DEBUG] [Thread-29339] [transport.py] [_log()] starting thread (client mode): 0xee990df0
2026-04-16T01:39:41.563 [DEBUG] [Thread-29339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:39:41.583 [DEBUG] [Thread-29339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:39:41.583 [INFO] [Thread-29339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:39:41.584 [DEBUG] [Thread-29339] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:39:41.584 [DEBUG] [Thread-29339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:39:41.584 [DEBUG] [Thread-29339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:39:41.584 [DEBUG] [Thread-29339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:39:41.585 [DEBUG] [Thread-29339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:39:41.585 [DEBUG] [Thread-29339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:39:41.585 [DEBUG] [Thread-29339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:39:41.585 [DEBUG] [Thread-29339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:39:41.585 [DEBUG] [Thread-29339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:39:41.585 [DEBUG] [Thread-29339] [transport.py] [_log()] client lang: <none>
2026-04-16T01:39:41.585 [DEBUG] [Thread-29339] [transport.py] [_log()] server lang: <none>
2026-04-16T01:39:41.585 [DEBUG] [Thread-29339] [transport.py] [_log()] kex follows: False
2026-04-16T01:39:41.585 [DEBUG] [Thread-29339] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:39:41.585 [DEBUG] [Thread-29339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:39:41.585 [DEBUG] [Thread-29339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:39:41.585 [DEBUG] [Thread-29339] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:39:41.586 [DEBUG] [Thread-29339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:39:41.586 [DEBUG] [Thread-29339] [transport.py] [_log()] Compression: none
2026-04-16T01:39:41.586 [DEBUG] [Thread-29339] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:39:41.604 [DEBUG] [Thread-29339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:39:41.605 [DEBUG] [Thread-29339] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:39:41.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:39:41.605 [DEBUG] [Thread-29339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:39:41.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:39:41.606 [DEBUG] [Thread-29339] [transport.py] [_log()] userauth is OK
2026-04-16T01:39:41.607 [DEBUG] [Thread-29339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:39:41.607 [DEBUG] [Thread-29339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:39:41.607 [DEBUG] [Thread-29339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:39:41.607 [DEBUG] [Thread-29339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:39:41.623 [INFO] [Thread-29339] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:39:41.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:39:42.421 [DEBUG] [Thread-29339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:39:42.421 [DEBUG] [Thread-29339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:39:42.422 [DEBUG] [Thread-29339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:39:42.463 [DEBUG] [Thread-29339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:39:42.464 [DEBUG] [Thread-29339] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:39:42.470 [DEBUG] [Thread-29339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:39:42.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:39:42.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:39:42.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:39:42.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:39:42.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:39:42.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:39:42.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:39:42.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:39:42.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:39:42.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.985548 -999.00   +9.10   9.04     88   +7.30 1 1 1 3 1     0    0 1.58 -9.37 .NESW 10.7 9.0 72.6 10.1 9.5 -25.7 9.4 -24.3 9.1 -22.3 9.4 -24.4
2026-04-16T01:39:42.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:39:42.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:39:42.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.985548
2026-04-16T01:39:42.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:39:42.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:39:42.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:39:42.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:39:42.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:39:42.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:39:09', tmtdew=1.85607, humidity=88.2771, cloud=0.0, wind=10.111, temperature=8.915, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:39:11.347', atlas_cloud=1, atlas_rain=1, zp_data=[3.391749999999999, nan, nan, nan, nan, nan, nan, nan, 2.0314999999999994, 0.3135000000000012, 2.5852499999999994, 2.1079999999999997, nan, nan, 0.27199999999999847, 0.06700000000000017, 0.23024999999999984, 0.08150000000000013, 0.28449999999999953, 0.3222499999999986, 0.2835000000000001, 0.3042499999999997, 0.12124999999999986, -0.03824999999999967, -0.031000000000000583, 0.05150000000000077, 0.062249999999998806, 0.03500000000000014, 0.02200000000000024, 0.08399999999999963, 0.06300000000000061, -0.016000000000000014, -0.08774999999999977], zp_timestamp='2026-04-15T23:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:39:42.497 [DEBUG] [Thread-29339] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:39:42.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:39:42.730 [DEBUG] [Thread-29342] [transport.py] [_log()] starting thread (client mode): 0xee992c50
2026-04-16T01:39:42.730 [DEBUG] [Thread-29342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:39:42.745 [DEBUG] [Thread-29342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:39:42.745 [INFO] [Thread-29342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:39:42.752 [DEBUG] [Thread-29342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:39:42.752 [DEBUG] [Thread-29342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:39:42.752 [DEBUG] [Thread-29342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:39:42.752 [DEBUG] [Thread-29342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:39:42.752 [DEBUG] [Thread-29342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:39:42.753 [DEBUG] [Thread-29342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:39:42.753 [DEBUG] [Thread-29342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:39:42.753 [DEBUG] [Thread-29342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:39:42.753 [DEBUG] [Thread-29342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:39:42.753 [DEBUG] [Thread-29342] [transport.py] [_log()] client lang: <none>
2026-04-16T01:39:42.753 [DEBUG] [Thread-29342] [transport.py] [_log()] server lang: <none>
2026-04-16T01:39:42.753 [DEBUG] [Thread-29342] [transport.py] [_log()] kex follows: False
2026-04-16T01:39:42.753 [DEBUG] [Thread-29342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:39:42.753 [DEBUG] [Thread-29342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:39:42.753 [DEBUG] [Thread-29342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:39:42.753 [DEBUG] [Thread-29342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:39:42.753 [DEBUG] [Thread-29342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:39:42.754 [DEBUG] [Thread-29342] [transport.py] [_log()] Compression: none
2026-04-16T01:39:42.754 [DEBUG] [Thread-29342] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:39:42.810 [DEBUG] [Thread-29342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:39:42.810 [DEBUG] [Thread-29342] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:39:42.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:39:42.811 [DEBUG] [Thread-29342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:39:42.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:39:42.867 [DEBUG] [Thread-29342] [transport.py] [_log()] userauth is OK
2026-04-16T01:39:42.867 [DEBUG] [Thread-29342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:39:42.867 [DEBUG] [Thread-29342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:39:42.867 [DEBUG] [Thread-29342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:39:42.867 [DEBUG] [Thread-29342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:39:42.885 [INFO] [Thread-29342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:39:42.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:39:42.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:39:43.707 [DEBUG] [Thread-29342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:39:43.707 [DEBUG] [Thread-29342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:39:43.755 [DEBUG] [Thread-29342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:39:43.755 [DEBUG] [Thread-29342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:39:43.764 [DEBUG] [Thread-29342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:39:43.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:39:43.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')
2026-04-16T01:39:43.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
2026-04-16T01:39:43.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:39:43.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:39:43.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:39:43.798 [DEBUG] [Thread-29342] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:39:46.146 [DEBUG] [Thread-29344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:39:56.973 [DEBUG] [Thread-29345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:40:01.190 [DEBUG] [Thread-29346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:40:13.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:40:13.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:40:13.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
2026-04-16T01:40:15.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 39, 44), 1.61715, 89.5211, 0.0, 13.5158, 8.59682, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:40:15.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:39:44
2026-04-16T01:40:15.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:40:15.970 [DEBUG] [Thread-29347] [transport.py] [_log()] starting thread (client mode): 0xee9923e0
2026-04-16T01:40:15.970 [DEBUG] [Thread-29347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:40:15.989 [DEBUG] [Thread-29347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:40:15.989 [INFO] [Thread-29347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:40:15.993 [DEBUG] [Thread-29347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:40:15.993 [DEBUG] [Thread-29347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:40:15.993 [DEBUG] [Thread-29347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:40:15.993 [DEBUG] [Thread-29347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:40:15.993 [DEBUG] [Thread-29347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:40:15.993 [DEBUG] [Thread-29347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:40:15.993 [DEBUG] [Thread-29347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:40:15.993 [DEBUG] [Thread-29347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:40:15.993 [DEBUG] [Thread-29347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:40:15.993 [DEBUG] [Thread-29347] [transport.py] [_log()] client lang: <none>
2026-04-16T01:40:15.994 [DEBUG] [Thread-29347] [transport.py] [_log()] server lang: <none>
2026-04-16T01:40:15.994 [DEBUG] [Thread-29347] [transport.py] [_log()] kex follows: False
2026-04-16T01:40:15.994 [DEBUG] [Thread-29347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:40:15.994 [DEBUG] [Thread-29347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:40:15.994 [DEBUG] [Thread-29347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:40:15.994 [DEBUG] [Thread-29347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:40:15.994 [DEBUG] [Thread-29347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:40:15.994 [DEBUG] [Thread-29347] [transport.py] [_log()] Compression: none
2026-04-16T01:40:15.994 [DEBUG] [Thread-29347] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:40:16.010 [DEBUG] [Thread-29347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:40:16.010 [DEBUG] [Thread-29347] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:40:16.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:40:16.011 [DEBUG] [Thread-29347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:40:16.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:40:16.012 [DEBUG] [Thread-29347] [transport.py] [_log()] userauth is OK
2026-04-16T01:40:16.012 [DEBUG] [Thread-29347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:40:16.012 [DEBUG] [Thread-29347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:40:16.012 [DEBUG] [Thread-29347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:40:16.012 [DEBUG] [Thread-29347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:40:16.034 [INFO] [Thread-29347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:40:16.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:40:16.220 [DEBUG] [Thread-29349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:40:16.645 [DEBUG] [Thread-29347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:40:16.645 [DEBUG] [Thread-29347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:40:16.646 [DEBUG] [Thread-29347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:40:16.686 [DEBUG] [Thread-29347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:40:16.686 [DEBUG] [Thread-29347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:40:16.689 [DEBUG] [Thread-29347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:40:16.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:40:16.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:40:16.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:40:16.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:40:16.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:40:16.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:40:16.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:40:16.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:40:16.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:40:16.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.985895 -999.00   +9.10   7.39     88   +7.40 1 1 1 3 1     0    0 1.61 -9.25 .NESW 7.8 7.4 72.0 11.7 9.5 -25.5 9.4 -24.4 9.1 -22.2 9.4 -24.3
2026-04-16T01:40:16.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:40:16.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:40:16.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.985895
2026-04-16T01:40:16.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:40:16.712 [DEBUG] [Thread-29347] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:40:16.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:40:16.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:40:16.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:40:16.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:40:16.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:39:44', tmtdew=1.61715, humidity=89.5211, cloud=0.0, wind=13.5158, temperature=8.59682, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:39:41.328', atlas_cloud=1, atlas_rain=1, zp_data=[3.391749999999999, nan, nan, nan, nan, nan, nan, nan, 2.0314999999999994, 0.3135000000000012, 2.5852499999999994, 2.1079999999999997, nan, nan, 0.27199999999999847, 0.06700000000000017, 0.23024999999999984, 0.08150000000000013, 0.28449999999999953, 0.3222499999999986, 0.2835000000000001, 0.3042499999999997, 0.12124999999999986, -0.03824999999999967, -0.031000000000000583, 0.05150000000000077, 0.062249999999998806, 0.03500000000000014, 0.02200000000000024, 0.08399999999999963, 0.06300000000000061, -0.016000000000000014, -0.08774999999999977], zp_timestamp='2026-04-15T23:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:40:16.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:40:16.936 [DEBUG] [Thread-29351] [transport.py] [_log()] starting thread (client mode): 0xee933070
2026-04-16T01:40:16.936 [DEBUG] [Thread-29351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:40:16.952 [DEBUG] [Thread-29351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:40:16.952 [INFO] [Thread-29351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:40:16.959 [DEBUG] [Thread-29351] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:40:16.959 [DEBUG] [Thread-29351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:40:16.960 [DEBUG] [Thread-29351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:40:16.960 [DEBUG] [Thread-29351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:40:16.960 [DEBUG] [Thread-29351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:40:16.960 [DEBUG] [Thread-29351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:40:16.960 [DEBUG] [Thread-29351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:40:16.960 [DEBUG] [Thread-29351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:40:16.960 [DEBUG] [Thread-29351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:40:16.960 [DEBUG] [Thread-29351] [transport.py] [_log()] client lang: <none>
2026-04-16T01:40:16.960 [DEBUG] [Thread-29351] [transport.py] [_log()] server lang: <none>
2026-04-16T01:40:16.960 [DEBUG] [Thread-29351] [transport.py] [_log()] kex follows: False
2026-04-16T01:40:16.960 [DEBUG] [Thread-29351] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:40:16.961 [DEBUG] [Thread-29351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:40:16.961 [DEBUG] [Thread-29351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:40:16.961 [DEBUG] [Thread-29351] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:40:16.961 [DEBUG] [Thread-29351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:40:16.961 [DEBUG] [Thread-29351] [transport.py] [_log()] Compression: none
2026-04-16T01:40:16.961 [DEBUG] [Thread-29351] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:40:17.018 [DEBUG] [Thread-29351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:40:17.018 [DEBUG] [Thread-29351] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:40:17.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:40:17.019 [DEBUG] [Thread-29351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:40:17.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:40:17.075 [DEBUG] [Thread-29351] [transport.py] [_log()] userauth is OK
2026-04-16T01:40:17.075 [DEBUG] [Thread-29351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:40:17.075 [DEBUG] [Thread-29351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:40:17.075 [DEBUG] [Thread-29351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:40:17.076 [DEBUG] [Thread-29351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:40:17.099 [INFO] [Thread-29351] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:40:17.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:40:17.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:40:17.945 [DEBUG] [Thread-29351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:40:17.945 [DEBUG] [Thread-29351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:40:17.993 [DEBUG] [Thread-29351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:40:17.993 [DEBUG] [Thread-29351] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:40:18.002 [DEBUG] [Thread-29351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:40:18.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:40:18.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')
2026-04-16T01:40:18.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
2026-04-16T01:40:18.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:40:18.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:40:18.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:40:18.035 [DEBUG] [Thread-29351] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:40:31.249 [DEBUG] [Thread-29353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:40:41.390 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:40:41.391 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:40:46.292 [DEBUG] [Thread-29354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:40:48.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:40:48.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:40:48.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
2026-04-16T01:40:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 40, 20), 1.84817, 88.3269, 0.0, 12.105, 8.88159, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:40:49.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:40:20
2026-04-16T01:40:49.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:40:50.235 [DEBUG] [Thread-29355] [transport.py] [_log()] starting thread (client mode): 0xf13e3eb0
2026-04-16T01:40:50.235 [DEBUG] [Thread-29355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:40:50.256 [DEBUG] [Thread-29355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:40:50.256 [INFO] [Thread-29355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:40:50.259 [DEBUG] [Thread-29355] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:40:50.260 [DEBUG] [Thread-29355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:40:50.260 [DEBUG] [Thread-29355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:40:50.260 [DEBUG] [Thread-29355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:40:50.260 [DEBUG] [Thread-29355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:40:50.260 [DEBUG] [Thread-29355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:40:50.260 [DEBUG] [Thread-29355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:40:50.260 [DEBUG] [Thread-29355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:40:50.260 [DEBUG] [Thread-29355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:40:50.260 [DEBUG] [Thread-29355] [transport.py] [_log()] client lang: <none>
2026-04-16T01:40:50.261 [DEBUG] [Thread-29355] [transport.py] [_log()] server lang: <none>
2026-04-16T01:40:50.261 [DEBUG] [Thread-29355] [transport.py] [_log()] kex follows: False
2026-04-16T01:40:50.261 [DEBUG] [Thread-29355] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:40:50.261 [DEBUG] [Thread-29355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:40:50.261 [DEBUG] [Thread-29355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:40:50.261 [DEBUG] [Thread-29355] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:40:50.261 [DEBUG] [Thread-29355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:40:50.261 [DEBUG] [Thread-29355] [transport.py] [_log()] Compression: none
2026-04-16T01:40:50.261 [DEBUG] [Thread-29355] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:40:50.279 [DEBUG] [Thread-29355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:40:50.279 [DEBUG] [Thread-29355] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:40:50.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:40:50.280 [DEBUG] [Thread-29355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:40:50.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:40:50.281 [DEBUG] [Thread-29355] [transport.py] [_log()] userauth is OK
2026-04-16T01:40:50.281 [DEBUG] [Thread-29355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:40:50.281 [DEBUG] [Thread-29355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:40:50.281 [DEBUG] [Thread-29355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:40:50.281 [DEBUG] [Thread-29355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:40:50.305 [INFO] [Thread-29355] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:40:50.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:40:50.944 [DEBUG] [Thread-29355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:40:50.944 [DEBUG] [Thread-29355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:40:50.945 [DEBUG] [Thread-29355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:40:50.985 [DEBUG] [Thread-29355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:40:50.985 [DEBUG] [Thread-29355] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:40:50.988 [DEBUG] [Thread-29355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:40:50.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:40:50.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:40:50.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:40:51.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:40:51.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:40:51.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:40:51.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:40:51.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:40:51.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:40:51.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.986590 -999.00   +9.10   6.62     88   +7.30 1 1 1 3 1     0    0 1.56 -11.01 .NESW 5.6 6.6 111.2 9.7 9.4 -25.7 9.3 -24.5 9.1 -22.2 9.3 -24.4
2026-04-16T01:40:51.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:40:51.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:40:51.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.986590
2026-04-16T01:40:51.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:40:51.009 [DEBUG] [Thread-29355] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:40:51.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:40:51.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:40:51.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:40:51.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:40:51.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:40:20', tmtdew=1.84817, humidity=88.3269, cloud=0.0, wind=12.105, temperature=8.88159, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:40:41.376', atlas_cloud=1, atlas_rain=1, zp_data=[3.391749999999999, nan, nan, nan, nan, nan, nan, nan, 2.0314999999999994, 0.3135000000000012, 2.5852499999999994, 2.1079999999999997, nan, nan, 0.27199999999999847, 0.06700000000000017, 0.23024999999999984, 0.08150000000000013, 0.28449999999999953, 0.3222499999999986, 0.2835000000000001, 0.3042499999999997, 0.12124999999999986, -0.03824999999999967, -0.031000000000000583, 0.05150000000000077, 0.062249999999998806, 0.03500000000000014, 0.02200000000000024, 0.08399999999999963, 0.06300000000000061, -0.016000000000000014, -0.08774999999999977], zp_timestamp='2026-04-15T23:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:40:51.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:40:51.268 [DEBUG] [Thread-29358] [transport.py] [_log()] starting thread (client mode): 0xee9335e0
2026-04-16T01:40:51.268 [DEBUG] [Thread-29358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:40:51.282 [DEBUG] [Thread-29358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:40:51.282 [INFO] [Thread-29358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:40:51.290 [DEBUG] [Thread-29358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:40:51.290 [DEBUG] [Thread-29358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:40:51.290 [DEBUG] [Thread-29358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:40:51.290 [DEBUG] [Thread-29358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:40:51.290 [DEBUG] [Thread-29358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:40:51.290 [DEBUG] [Thread-29358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:40:51.290 [DEBUG] [Thread-29358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:40:51.290 [DEBUG] [Thread-29358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:40:51.290 [DEBUG] [Thread-29358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:40:51.291 [DEBUG] [Thread-29358] [transport.py] [_log()] client lang: <none>
2026-04-16T01:40:51.291 [DEBUG] [Thread-29358] [transport.py] [_log()] server lang: <none>
2026-04-16T01:40:51.291 [DEBUG] [Thread-29358] [transport.py] [_log()] kex follows: False
2026-04-16T01:40:51.291 [DEBUG] [Thread-29358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:40:51.291 [DEBUG] [Thread-29358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:40:51.291 [DEBUG] [Thread-29358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:40:51.291 [DEBUG] [Thread-29358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:40:51.291 [DEBUG] [Thread-29358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:40:51.291 [DEBUG] [Thread-29358] [transport.py] [_log()] Compression: none
2026-04-16T01:40:51.291 [DEBUG] [Thread-29358] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:40:51.347 [DEBUG] [Thread-29358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:40:51.347 [DEBUG] [Thread-29358] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:40:51.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:40:51.348 [DEBUG] [Thread-29358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:40:51.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:40:51.407 [DEBUG] [Thread-29358] [transport.py] [_log()] userauth is OK
2026-04-16T01:40:51.407 [DEBUG] [Thread-29358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:40:51.407 [DEBUG] [Thread-29358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:40:51.407 [DEBUG] [Thread-29358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:40:51.408 [DEBUG] [Thread-29358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:40:51.426 [INFO] [Thread-29358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:40:51.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:40:51.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:40:52.215 [DEBUG] [Thread-29358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:40:52.215 [DEBUG] [Thread-29358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:40:52.263 [DEBUG] [Thread-29358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:40:52.263 [DEBUG] [Thread-29358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:40:52.272 [DEBUG] [Thread-29358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:40:52.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:40:52.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')
2026-04-16T01:40:52.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
2026-04-16T01:40:52.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:40:52.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:40:52.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:40:52.307 [DEBUG] [Thread-29358] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:40:57.135 [DEBUG] [Thread-29360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:41:01.321 [DEBUG] [Thread-29361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:41:16.365 [DEBUG] [Thread-29362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:41:22.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:41:22.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:41:22.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
2026-04-16T01:41:23.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 40, 55), 1.80069, 88.3101, 0.0, 10.4285, 8.86488, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:41:23.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:40:55
2026-04-16T01:41:24.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:41:24.483 [DEBUG] [Thread-29363] [transport.py] [_log()] starting thread (client mode): 0xf13e2ec0
2026-04-16T01:41:24.484 [DEBUG] [Thread-29363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:41:24.494 [DEBUG] [Thread-29363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:41:24.494 [INFO] [Thread-29363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:41:24.495 [DEBUG] [Thread-29363] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:41:24.495 [DEBUG] [Thread-29363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:41:24.495 [DEBUG] [Thread-29363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:41:24.495 [DEBUG] [Thread-29363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:41:24.495 [DEBUG] [Thread-29363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:41:24.495 [DEBUG] [Thread-29363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:41:24.495 [DEBUG] [Thread-29363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:41:24.495 [DEBUG] [Thread-29363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:41:24.495 [DEBUG] [Thread-29363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:41:24.496 [DEBUG] [Thread-29363] [transport.py] [_log()] client lang: <none>
2026-04-16T01:41:24.496 [DEBUG] [Thread-29363] [transport.py] [_log()] server lang: <none>
2026-04-16T01:41:24.496 [DEBUG] [Thread-29363] [transport.py] [_log()] kex follows: False
2026-04-16T01:41:24.496 [DEBUG] [Thread-29363] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:41:24.496 [DEBUG] [Thread-29363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:41:24.496 [DEBUG] [Thread-29363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:41:24.496 [DEBUG] [Thread-29363] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:41:24.496 [DEBUG] [Thread-29363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:41:24.496 [DEBUG] [Thread-29363] [transport.py] [_log()] Compression: none
2026-04-16T01:41:24.496 [DEBUG] [Thread-29363] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:41:24.504 [DEBUG] [Thread-29363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:41:24.505 [DEBUG] [Thread-29363] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:41:24.505 [DEBUG] [Thread-29363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:41:24.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:41:24.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:41:24.506 [DEBUG] [Thread-29363] [transport.py] [_log()] userauth is OK
2026-04-16T01:41:24.506 [DEBUG] [Thread-29363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:41:24.506 [DEBUG] [Thread-29363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:41:24.506 [DEBUG] [Thread-29363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:41:24.506 [DEBUG] [Thread-29363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:41:24.521 [INFO] [Thread-29363] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:41:24.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:41:25.122 [DEBUG] [Thread-29363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:41:25.122 [DEBUG] [Thread-29363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:41:25.123 [DEBUG] [Thread-29363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:41:25.163 [DEBUG] [Thread-29363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:41:25.163 [DEBUG] [Thread-29363] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:41:25.165 [DEBUG] [Thread-29363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:41:25.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:41:25.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:41:25.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:41:25.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:41:25.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:41:25.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:41:25.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:41:25.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:41:25.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:41:25.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.986937 -999.00   +9.10   9.71     88   +7.30 1 1 1 3 1     0    0 1.61 -9.76 .NESW 11.2 9.7 69.4 11.3 9.5 -25.7 9.4 -24.4 9.1 -22.2 9.3 -24.2
2026-04-16T01:41:25.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:41:25.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:41:25.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.986937
2026-04-16T01:41:25.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:41:25.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:41:25.189 [DEBUG] [Thread-29363] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:41:25.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:41:25.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:41:25.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:41:25.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:40:55', tmtdew=1.80069, humidity=88.3101, cloud=0.0, wind=10.4285, temperature=8.86488, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:41:11.357', atlas_cloud=1, atlas_rain=1, zp_data=[3.391749999999999, nan, nan, nan, nan, nan, nan, nan, 2.0314999999999994, 0.3135000000000012, 2.5852499999999994, 2.1079999999999997, nan, nan, 0.27199999999999847, 0.06700000000000017, 0.23024999999999984, 0.08150000000000013, 0.28449999999999953, 0.3222499999999986, 0.2835000000000001, 0.3042499999999997, 0.12124999999999986, -0.03824999999999967, -0.031000000000000583, 0.05150000000000077, 0.062249999999998806, 0.03500000000000014, 0.02200000000000024, 0.08399999999999963, 0.06300000000000061, -0.016000000000000014, -0.08774999999999977], zp_timestamp='2026-04-15T23:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:41:25.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:41:25.454 [DEBUG] [Thread-29366] [transport.py] [_log()] starting thread (client mode): 0xf1337250
2026-04-16T01:41:25.455 [DEBUG] [Thread-29366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:41:25.472 [DEBUG] [Thread-29366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:41:25.472 [INFO] [Thread-29366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:41:25.483 [DEBUG] [Thread-29366] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:41:25.483 [DEBUG] [Thread-29366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:41:25.483 [DEBUG] [Thread-29366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:41:25.483 [DEBUG] [Thread-29366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:41:25.483 [DEBUG] [Thread-29366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:41:25.483 [DEBUG] [Thread-29366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:41:25.483 [DEBUG] [Thread-29366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:41:25.483 [DEBUG] [Thread-29366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:41:25.483 [DEBUG] [Thread-29366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:41:25.484 [DEBUG] [Thread-29366] [transport.py] [_log()] client lang: <none>
2026-04-16T01:41:25.484 [DEBUG] [Thread-29366] [transport.py] [_log()] server lang: <none>
2026-04-16T01:41:25.484 [DEBUG] [Thread-29366] [transport.py] [_log()] kex follows: False
2026-04-16T01:41:25.484 [DEBUG] [Thread-29366] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:41:25.484 [DEBUG] [Thread-29366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:41:25.484 [DEBUG] [Thread-29366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:41:25.484 [DEBUG] [Thread-29366] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:41:25.484 [DEBUG] [Thread-29366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:41:25.484 [DEBUG] [Thread-29366] [transport.py] [_log()] Compression: none
2026-04-16T01:41:25.484 [DEBUG] [Thread-29366] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:41:25.545 [DEBUG] [Thread-29366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:41:25.545 [DEBUG] [Thread-29366] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:41:25.545 [DEBUG] [Thread-29366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:41:25.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:41:25.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:41:25.606 [DEBUG] [Thread-29366] [transport.py] [_log()] userauth is OK
2026-04-16T01:41:25.606 [DEBUG] [Thread-29366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:41:25.606 [DEBUG] [Thread-29366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:41:25.607 [DEBUG] [Thread-29366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:41:25.607 [DEBUG] [Thread-29366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:41:25.629 [INFO] [Thread-29366] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:41:25.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:41:25.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:41:26.465 [DEBUG] [Thread-29366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:41:26.465 [DEBUG] [Thread-29366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:41:26.513 [DEBUG] [Thread-29366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:41:26.514 [DEBUG] [Thread-29366] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:41:26.522 [DEBUG] [Thread-29366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:41:26.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:41:26.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')
2026-04-16T01:41:26.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') -> 00000000
2026-04-16T01:41:26.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:41:26.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:41:26.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:41:26.556 [DEBUG] [Thread-29366] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:41:31.393 [DEBUG] [Thread-29368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:41:41.590 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:41:41.591 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:41:46.435 [DEBUG] [Thread-29369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:41:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:41:56.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:41:56.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
2026-04-16T01:41:57.280 [DEBUG] [Thread-29370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:41:57.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 41, 31), 1.79532, 88.3432, 0.0, 10.7284, 8.86479, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:41:57.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:41:31
2026-04-16T01:41:58.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:41:58.756 [DEBUG] [Thread-29371] [transport.py] [_log()] starting thread (client mode): 0xee9c0df0
2026-04-16T01:41:58.756 [DEBUG] [Thread-29371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:41:58.776 [DEBUG] [Thread-29371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:41:58.776 [INFO] [Thread-29371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:41:58.778 [DEBUG] [Thread-29371] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:41:58.778 [DEBUG] [Thread-29371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:41:58.778 [DEBUG] [Thread-29371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:41:58.778 [DEBUG] [Thread-29371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:41:58.778 [DEBUG] [Thread-29371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:41:58.778 [DEBUG] [Thread-29371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:41:58.778 [DEBUG] [Thread-29371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:41:58.779 [DEBUG] [Thread-29371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:41:58.779 [DEBUG] [Thread-29371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:41:58.779 [DEBUG] [Thread-29371] [transport.py] [_log()] client lang: <none>
2026-04-16T01:41:58.779 [DEBUG] [Thread-29371] [transport.py] [_log()] server lang: <none>
2026-04-16T01:41:58.779 [DEBUG] [Thread-29371] [transport.py] [_log()] kex follows: False
2026-04-16T01:41:58.779 [DEBUG] [Thread-29371] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:41:58.779 [DEBUG] [Thread-29371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:41:58.779 [DEBUG] [Thread-29371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:41:58.779 [DEBUG] [Thread-29371] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:41:58.779 [DEBUG] [Thread-29371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:41:58.779 [DEBUG] [Thread-29371] [transport.py] [_log()] Compression: none
2026-04-16T01:41:58.780 [DEBUG] [Thread-29371] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:41:58.793 [DEBUG] [Thread-29371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:41:58.794 [DEBUG] [Thread-29371] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:41:58.794 [DEBUG] [Thread-29371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:41:58.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:41:58.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:41:58.795 [DEBUG] [Thread-29371] [transport.py] [_log()] userauth is OK
2026-04-16T01:41:58.795 [DEBUG] [Thread-29371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:41:58.795 [DEBUG] [Thread-29371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:41:58.796 [DEBUG] [Thread-29371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:41:58.796 [DEBUG] [Thread-29371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:41:58.812 [INFO] [Thread-29371] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:41:58.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:41:59.459 [DEBUG] [Thread-29371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:41:59.460 [DEBUG] [Thread-29371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:41:59.460 [DEBUG] [Thread-29371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:41:59.500 [DEBUG] [Thread-29371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:41:59.500 [DEBUG] [Thread-29371] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:41:59.503 [DEBUG] [Thread-29371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:41:59.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:41:59.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:41:59.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:41:59.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:41:59.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:41:59.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:41:59.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:41:59.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:41:59.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:41:59.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.987284 -999.00   +9.10   8.37     88   +7.30 1 1 1 3 1     0    0 1.56 -9.90 .NESW 9.5 8.4 83.5 11.3 9.5 -25.5 9.4 -24.3 9.1 -22.2 9.3 -24.3
2026-04-16T01:41:59.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:41:59.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:41:59.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.987284
2026-04-16T01:41:59.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:41:59.529 [DEBUG] [Thread-29371] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:41:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:41:59.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:41:59.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:41:59.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:41:59.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:41:31', tmtdew=1.79532, humidity=88.3432, cloud=0.0, wind=10.7284, temperature=8.86479, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:41:41.338', atlas_cloud=1, atlas_rain=1, zp_data=[3.391749999999999, nan, nan, nan, nan, nan, nan, nan, 2.0314999999999994, 0.3135000000000012, 2.5852499999999994, 2.1079999999999997, nan, nan, 0.27199999999999847, 0.06700000000000017, 0.23024999999999984, 0.08150000000000013, 0.28449999999999953, 0.3222499999999986, 0.2835000000000001, 0.3042499999999997, 0.12124999999999986, -0.03824999999999967, -0.031000000000000583, 0.05150000000000077, 0.062249999999998806, 0.03500000000000014, 0.02200000000000024, 0.08399999999999963, 0.06300000000000061, -0.016000000000000014, -0.08774999999999977], zp_timestamp='2026-04-15T23:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:41:59.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:41:59.787 [DEBUG] [Thread-29374] [transport.py] [_log()] starting thread (client mode): 0xee9541c0
2026-04-16T01:41:59.787 [DEBUG] [Thread-29374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:41:59.801 [DEBUG] [Thread-29374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:41:59.801 [INFO] [Thread-29374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:41:59.809 [DEBUG] [Thread-29374] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:41:59.809 [DEBUG] [Thread-29374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:41:59.809 [DEBUG] [Thread-29374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:41:59.809 [DEBUG] [Thread-29374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:41:59.809 [DEBUG] [Thread-29374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:41:59.809 [DEBUG] [Thread-29374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:41:59.809 [DEBUG] [Thread-29374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:41:59.809 [DEBUG] [Thread-29374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:41:59.809 [DEBUG] [Thread-29374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:41:59.809 [DEBUG] [Thread-29374] [transport.py] [_log()] client lang: <none>
2026-04-16T01:41:59.809 [DEBUG] [Thread-29374] [transport.py] [_log()] server lang: <none>
2026-04-16T01:41:59.809 [DEBUG] [Thread-29374] [transport.py] [_log()] kex follows: False
2026-04-16T01:41:59.810 [DEBUG] [Thread-29374] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:41:59.810 [DEBUG] [Thread-29374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:41:59.810 [DEBUG] [Thread-29374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:41:59.810 [DEBUG] [Thread-29374] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:41:59.810 [DEBUG] [Thread-29374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:41:59.810 [DEBUG] [Thread-29374] [transport.py] [_log()] Compression: none
2026-04-16T01:41:59.810 [DEBUG] [Thread-29374] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:41:59.866 [DEBUG] [Thread-29374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:41:59.867 [DEBUG] [Thread-29374] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:41:59.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:41:59.867 [DEBUG] [Thread-29374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:41:59.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:41:59.922 [DEBUG] [Thread-29374] [transport.py] [_log()] userauth is OK
2026-04-16T01:41:59.923 [DEBUG] [Thread-29374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:41:59.923 [DEBUG] [Thread-29374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:41:59.923 [DEBUG] [Thread-29374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:41:59.923 [DEBUG] [Thread-29374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:41:59.940 [INFO] [Thread-29374] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:41:59.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:41:59.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:42:00.816 [DEBUG] [Thread-29374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:42:00.817 [DEBUG] [Thread-29374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:42:00.865 [DEBUG] [Thread-29374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:42:00.865 [DEBUG] [Thread-29374] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:42:00.874 [DEBUG] [Thread-29374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:42:00.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:42:00.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')
2026-04-16T01:42:00.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
2026-04-16T01:42:00.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:42:00.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:42:00.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:42:00.908 [DEBUG] [Thread-29374] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:42:01.463 [DEBUG] [Thread-29376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:42:16.504 [DEBUG] [Thread-29377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:42:30.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:42:30.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:42:30.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
2026-04-16T01:42:31.533 [DEBUG] [Thread-29378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:42:32.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 42, 7), 1.79512, 88.3432, 0.0, 10.746, 8.8482, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:42:32.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:42:07
2026-04-16T01:42:32.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:42:33.035 [DEBUG] [Thread-29379] [transport.py] [_log()] starting thread (client mode): 0xf1337250
2026-04-16T01:42:33.035 [DEBUG] [Thread-29379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:42:33.051 [DEBUG] [Thread-29379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:42:33.051 [INFO] [Thread-29379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:42:33.053 [DEBUG] [Thread-29379] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:42:33.053 [DEBUG] [Thread-29379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:42:33.053 [DEBUG] [Thread-29379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:42:33.053 [DEBUG] [Thread-29379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:42:33.053 [DEBUG] [Thread-29379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:42:33.053 [DEBUG] [Thread-29379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:42:33.053 [DEBUG] [Thread-29379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:42:33.053 [DEBUG] [Thread-29379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:42:33.053 [DEBUG] [Thread-29379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:42:33.053 [DEBUG] [Thread-29379] [transport.py] [_log()] client lang: <none>
2026-04-16T01:42:33.053 [DEBUG] [Thread-29379] [transport.py] [_log()] server lang: <none>
2026-04-16T01:42:33.053 [DEBUG] [Thread-29379] [transport.py] [_log()] kex follows: False
2026-04-16T01:42:33.054 [DEBUG] [Thread-29379] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:42:33.054 [DEBUG] [Thread-29379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:42:33.054 [DEBUG] [Thread-29379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:42:33.054 [DEBUG] [Thread-29379] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:42:33.054 [DEBUG] [Thread-29379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:42:33.054 [DEBUG] [Thread-29379] [transport.py] [_log()] Compression: none
2026-04-16T01:42:33.054 [DEBUG] [Thread-29379] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:42:33.062 [DEBUG] [Thread-29379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:42:33.062 [DEBUG] [Thread-29379] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:42:33.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:42:33.063 [DEBUG] [Thread-29379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:42:33.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:42:33.064 [DEBUG] [Thread-29379] [transport.py] [_log()] userauth is OK
2026-04-16T01:42:33.064 [DEBUG] [Thread-29379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:42:33.064 [DEBUG] [Thread-29379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:42:33.065 [DEBUG] [Thread-29379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:42:33.065 [DEBUG] [Thread-29379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:42:33.082 [INFO] [Thread-29379] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:42:33.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:42:33.657 [DEBUG] [Thread-29379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:42:33.657 [DEBUG] [Thread-29379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:42:33.658 [DEBUG] [Thread-29379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:42:33.698 [DEBUG] [Thread-29379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:42:33.698 [DEBUG] [Thread-29379] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:42:33.701 [DEBUG] [Thread-29379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:42:33.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:42:33.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:42:33.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:42:33.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:42:33.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:42:33.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:42:33.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:42:33.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:42:33.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:42:33.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.987631 -999.00   +9.10   7.91     88   +7.30 1 1 1 3 1     0    0 1.55 -10.14 .NESW 6.4 7.9 59.6 12.3 9.5 -25.6 9.3 -24.4 9.1 -22.2 9.3 -24.2
2026-04-16T01:42:33.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:42:33.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:42:33.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.987631
2026-04-16T01:42:33.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:42:33.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:42:33.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:42:33.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:42:33.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:42:33.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:42:07', tmtdew=1.79512, humidity=88.3432, cloud=0.0, wind=10.746, temperature=8.8482, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:42:11.318', atlas_cloud=1, atlas_rain=1, zp_data=[3.391749999999999, nan, nan, nan, nan, nan, nan, nan, 2.0314999999999994, 0.3135000000000012, 2.5852499999999994, 2.1079999999999997, nan, nan, 0.27199999999999847, 0.06700000000000017, 0.23024999999999984, 0.08150000000000013, 0.28449999999999953, 0.3222499999999986, 0.2835000000000001, 0.3042499999999997, 0.12124999999999986, -0.03824999999999967, -0.031000000000000583, 0.05150000000000077, 0.062249999999998806, 0.03500000000000014, 0.02200000000000024, 0.08399999999999963, 0.06300000000000061, -0.016000000000000014, -0.08774999999999977], zp_timestamp='2026-04-15T23:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:42:33.728 [DEBUG] [Thread-29379] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:42:33.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:42:33.987 [DEBUG] [Thread-29382] [transport.py] [_log()] starting thread (client mode): 0xf1365270
2026-04-16T01:42:33.988 [DEBUG] [Thread-29382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:42:34.002 [DEBUG] [Thread-29382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:42:34.002 [INFO] [Thread-29382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:42:34.013 [DEBUG] [Thread-29382] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:42:34.013 [DEBUG] [Thread-29382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:42:34.013 [DEBUG] [Thread-29382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:42:34.014 [DEBUG] [Thread-29382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:42:34.014 [DEBUG] [Thread-29382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:42:34.014 [DEBUG] [Thread-29382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:42:34.014 [DEBUG] [Thread-29382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:42:34.014 [DEBUG] [Thread-29382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:42:34.014 [DEBUG] [Thread-29382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:42:34.014 [DEBUG] [Thread-29382] [transport.py] [_log()] client lang: <none>
2026-04-16T01:42:34.014 [DEBUG] [Thread-29382] [transport.py] [_log()] server lang: <none>
2026-04-16T01:42:34.014 [DEBUG] [Thread-29382] [transport.py] [_log()] kex follows: False
2026-04-16T01:42:34.014 [DEBUG] [Thread-29382] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:42:34.014 [DEBUG] [Thread-29382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:42:34.015 [DEBUG] [Thread-29382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:42:34.015 [DEBUG] [Thread-29382] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:42:34.015 [DEBUG] [Thread-29382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:42:34.015 [DEBUG] [Thread-29382] [transport.py] [_log()] Compression: none
2026-04-16T01:42:34.015 [DEBUG] [Thread-29382] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:42:34.070 [DEBUG] [Thread-29382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:42:34.070 [DEBUG] [Thread-29382] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:42:34.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:42:34.071 [DEBUG] [Thread-29382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:42:34.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:42:34.127 [DEBUG] [Thread-29382] [transport.py] [_log()] userauth is OK
2026-04-16T01:42:34.127 [DEBUG] [Thread-29382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:42:34.127 [DEBUG] [Thread-29382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:42:34.127 [DEBUG] [Thread-29382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:42:34.127 [DEBUG] [Thread-29382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:42:34.145 [INFO] [Thread-29382] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:42:34.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:42:34.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:42:34.975 [DEBUG] [Thread-29382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:42:34.975 [DEBUG] [Thread-29382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:42:35.025 [DEBUG] [Thread-29382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:42:35.025 [DEBUG] [Thread-29382] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:42:35.034 [DEBUG] [Thread-29382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:42:35.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:42:35.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')
2026-04-16T01:42:35.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') -> 00000000
2026-04-16T01:42:35.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:42:35.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:42:35.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:42:35.066 [DEBUG] [Thread-29382] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:42:41.802 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:42:41.803 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:42:46.562 [DEBUG] [Thread-29384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:42:57.434 [DEBUG] [Thread-29385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:43:01.601 [DEBUG] [Thread-29386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:43:05.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:43:05.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:43:05.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
2026-04-16T01:43:06.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 42, 42), 1.59447, 89.6531, 0.0, 14.4684, 8.49685, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:43:06.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:42:42
2026-04-16T01:43:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:43:07.173 [DEBUG] [Thread-29387] [transport.py] [_log()] starting thread (client mode): 0xee933af0
2026-04-16T01:43:07.174 [DEBUG] [Thread-29387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:43:07.200 [DEBUG] [Thread-29387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:43:07.200 [INFO] [Thread-29387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:43:07.203 [DEBUG] [Thread-29387] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:43:07.203 [DEBUG] [Thread-29387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:43:07.203 [DEBUG] [Thread-29387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:43:07.203 [DEBUG] [Thread-29387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:43:07.203 [DEBUG] [Thread-29387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:43:07.203 [DEBUG] [Thread-29387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:43:07.203 [DEBUG] [Thread-29387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:43:07.203 [DEBUG] [Thread-29387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:43:07.203 [DEBUG] [Thread-29387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:43:07.203 [DEBUG] [Thread-29387] [transport.py] [_log()] client lang: <none>
2026-04-16T01:43:07.203 [DEBUG] [Thread-29387] [transport.py] [_log()] server lang: <none>
2026-04-16T01:43:07.204 [DEBUG] [Thread-29387] [transport.py] [_log()] kex follows: False
2026-04-16T01:43:07.204 [DEBUG] [Thread-29387] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:43:07.204 [DEBUG] [Thread-29387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:43:07.204 [DEBUG] [Thread-29387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:43:07.204 [DEBUG] [Thread-29387] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:43:07.204 [DEBUG] [Thread-29387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:43:07.204 [DEBUG] [Thread-29387] [transport.py] [_log()] Compression: none
2026-04-16T01:43:07.204 [DEBUG] [Thread-29387] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:43:07.220 [DEBUG] [Thread-29387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:43:07.221 [DEBUG] [Thread-29387] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:43:07.221 [DEBUG] [Thread-29387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:43:07.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:43:07.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:43:07.223 [DEBUG] [Thread-29387] [transport.py] [_log()] userauth is OK
2026-04-16T01:43:07.223 [DEBUG] [Thread-29387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:43:07.223 [DEBUG] [Thread-29387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:43:07.223 [DEBUG] [Thread-29387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:43:07.223 [DEBUG] [Thread-29387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:43:07.248 [INFO] [Thread-29387] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:43:07.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:43:07.834 [DEBUG] [Thread-29387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:43:07.834 [DEBUG] [Thread-29387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:43:07.835 [DEBUG] [Thread-29387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:43:07.875 [DEBUG] [Thread-29387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:43:07.875 [DEBUG] [Thread-29387] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:43:07.877 [DEBUG] [Thread-29387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:43:07.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:43:07.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:43:07.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:43:07.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:43:07.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:43:07.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:43:07.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:43:07.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:43:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:43:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.987979 -999.00   +9.10   6.10     88   +7.30 1 1 1 3 1     0    0 1.54 -10.01 .NESW 6.9 6.1 110.1 9.4 9.5 -25.6 9.3 -24.3 9.1 -22.1 9.4 -24.3
2026-04-16T01:43:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:43:07.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:43:07.894 [DEBUG] [Thread-29387] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:43:07.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.987979
2026-04-16T01:43:07.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:43:07.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:43:07.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:43:07.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:43:07.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:43:07.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:42:42', tmtdew=1.59447, humidity=89.6531, cloud=0.0, wind=14.4684, temperature=8.49685, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:42:41.386', atlas_cloud=1, atlas_rain=1, zp_data=[3.4297499999999994, nan, nan, nan, nan, nan, nan, nan, 2.378499999999999, 0.6840000000000002, 2.8412499999999987, 2.4334999999999996, nan, nan, nan, 0.10899999999999999, 0.49874999999999936, 0.1775000000000002, 0.5169999999999995, 0.5432499999999987, 0.4129999999999985, 0.4217499999999994, 0.19125000000000014, -0.015750000000000597, 0.0009999999999994458, 0.09500000000000064, 0.06975000000000087, 0.018499999999999517, 0.07000000000000028, 0.12400000000000055, 0.11600000000000144, 0.0010000000000012221, -0.1042500000000004], zp_timestamp='2026-04-15T23:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:43:08.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:43:08.149 [DEBUG] [Thread-29390] [transport.py] [_log()] starting thread (client mode): 0xee9eaef0
2026-04-16T01:43:08.149 [DEBUG] [Thread-29390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:43:08.164 [DEBUG] [Thread-29390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:43:08.164 [INFO] [Thread-29390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:43:08.171 [DEBUG] [Thread-29390] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:43:08.172 [DEBUG] [Thread-29390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:43:08.172 [DEBUG] [Thread-29390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:43:08.172 [DEBUG] [Thread-29390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:43:08.172 [DEBUG] [Thread-29390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:43:08.172 [DEBUG] [Thread-29390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:43:08.172 [DEBUG] [Thread-29390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:43:08.172 [DEBUG] [Thread-29390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:43:08.172 [DEBUG] [Thread-29390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:43:08.172 [DEBUG] [Thread-29390] [transport.py] [_log()] client lang: <none>
2026-04-16T01:43:08.172 [DEBUG] [Thread-29390] [transport.py] [_log()] server lang: <none>
2026-04-16T01:43:08.172 [DEBUG] [Thread-29390] [transport.py] [_log()] kex follows: False
2026-04-16T01:43:08.172 [DEBUG] [Thread-29390] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:43:08.173 [DEBUG] [Thread-29390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:43:08.173 [DEBUG] [Thread-29390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:43:08.173 [DEBUG] [Thread-29390] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:43:08.173 [DEBUG] [Thread-29390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:43:08.173 [DEBUG] [Thread-29390] [transport.py] [_log()] Compression: none
2026-04-16T01:43:08.173 [DEBUG] [Thread-29390] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:43:08.230 [DEBUG] [Thread-29390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:43:08.230 [DEBUG] [Thread-29390] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:43:08.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:43:08.231 [DEBUG] [Thread-29390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:43:08.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:43:08.287 [DEBUG] [Thread-29390] [transport.py] [_log()] userauth is OK
2026-04-16T01:43:08.287 [DEBUG] [Thread-29390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:43:08.287 [DEBUG] [Thread-29390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:43:08.287 [DEBUG] [Thread-29390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:43:08.288 [DEBUG] [Thread-29390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:43:08.311 [INFO] [Thread-29390] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:43:08.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:43:08.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:43:09.146 [DEBUG] [Thread-29390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:43:09.146 [DEBUG] [Thread-29390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:43:09.194 [DEBUG] [Thread-29390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:43:09.194 [DEBUG] [Thread-29390] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:43:09.203 [DEBUG] [Thread-29390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:43:09.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:43:09.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')
2026-04-16T01:43:09.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
2026-04-16T01:43:09.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:43:09.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:43:09.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:43:09.237 [DEBUG] [Thread-29390] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:43:16.632 [DEBUG] [Thread-29392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:43:31.678 [DEBUG] [Thread-29393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:43:39.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:43:39.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:43:39.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
2026-04-16T01:43:40.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 43, 18), 1.78454, 88.4094, 0.0, 10.7989, 8.86471, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:43:40.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:43:18
2026-04-16T01:43:40.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:43:41.457 [DEBUG] [Thread-29394] [transport.py] [_log()] starting thread (client mode): 0xf13e2140
2026-04-16T01:43:41.458 [DEBUG] [Thread-29394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:43:41.472 [DEBUG] [Thread-29394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:43:41.472 [INFO] [Thread-29394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:43:41.476 [DEBUG] [Thread-29394] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:43:41.476 [DEBUG] [Thread-29394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:43:41.476 [DEBUG] [Thread-29394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:43:41.476 [DEBUG] [Thread-29394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:43:41.477 [DEBUG] [Thread-29394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:43:41.477 [DEBUG] [Thread-29394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:43:41.477 [DEBUG] [Thread-29394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:43:41.477 [DEBUG] [Thread-29394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:43:41.477 [DEBUG] [Thread-29394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:43:41.477 [DEBUG] [Thread-29394] [transport.py] [_log()] client lang: <none>
2026-04-16T01:43:41.477 [DEBUG] [Thread-29394] [transport.py] [_log()] server lang: <none>
2026-04-16T01:43:41.477 [DEBUG] [Thread-29394] [transport.py] [_log()] kex follows: False
2026-04-16T01:43:41.477 [DEBUG] [Thread-29394] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:43:41.477 [DEBUG] [Thread-29394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:43:41.477 [DEBUG] [Thread-29394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:43:41.478 [DEBUG] [Thread-29394] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:43:41.478 [DEBUG] [Thread-29394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:43:41.478 [DEBUG] [Thread-29394] [transport.py] [_log()] Compression: none
2026-04-16T01:43:41.478 [DEBUG] [Thread-29394] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:43:41.494 [DEBUG] [Thread-29394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:43:41.494 [DEBUG] [Thread-29394] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:43:41.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:43:41.495 [DEBUG] [Thread-29394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:43:41.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:43:41.496 [DEBUG] [Thread-29394] [transport.py] [_log()] userauth is OK
2026-04-16T01:43:41.496 [DEBUG] [Thread-29394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:43:41.496 [DEBUG] [Thread-29394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:43:41.496 [DEBUG] [Thread-29394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:43:41.496 [DEBUG] [Thread-29394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:43:41.509 [INFO] [Thread-29394] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:43:41.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:43:42.004 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:43:42.005 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:43:42.121 [DEBUG] [Thread-29394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:43:42.121 [DEBUG] [Thread-29394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:43:42.121 [DEBUG] [Thread-29394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:43:42.162 [DEBUG] [Thread-29394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:43:42.162 [DEBUG] [Thread-29394] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:43:42.163 [DEBUG] [Thread-29394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:43:42.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:43:42.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:43:42.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:43:42.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:43:42.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:43:42.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:43:42.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:43:42.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:43:42.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:43:42.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.988326 -999.00   +9.10   6.90     88   +7.30 1 2 1 3 1     0    0 1.58 -10.41 .NESW 8.5 6.9 107.6 8.8 9.5 -25.3 9.3 -24.1 9.0 -21.9 9.3 -24.3
2026-04-16T01:43:42.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:43:42.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:43:42.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.988326
2026-04-16T01:43:42.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:43:42.185 [DEBUG] [Thread-29394] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:43:42.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:43:42.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:43:42.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:43:42.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-16T01:43:42.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:43:18', tmtdew=1.78454, humidity=88.4094, cloud=0.0, wind=10.7989, temperature=8.86471, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:43:11.366', atlas_cloud=2, atlas_rain=1, zp_data=[3.4297499999999994, nan, nan, nan, nan, nan, nan, nan, 2.378499999999999, 0.6840000000000002, 2.8412499999999987, 2.4334999999999996, nan, nan, nan, 0.10899999999999999, 0.49874999999999936, 0.1775000000000002, 0.5169999999999995, 0.5432499999999987, 0.4129999999999985, 0.4217499999999994, 0.19125000000000014, -0.015750000000000597, 0.0009999999999994458, 0.09500000000000064, 0.06975000000000087, 0.018499999999999517, 0.07000000000000028, 0.12400000000000055, 0.11600000000000144, 0.0010000000000012221, -0.1042500000000004], zp_timestamp='2026-04-15T23:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:43:42.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:43:42.400 [DEBUG] [Thread-29397] [transport.py] [_log()] starting thread (client mode): 0xee993310
2026-04-16T01:43:42.400 [DEBUG] [Thread-29397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:43:42.416 [DEBUG] [Thread-29397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:43:42.416 [INFO] [Thread-29397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:43:42.424 [DEBUG] [Thread-29397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:43:42.424 [DEBUG] [Thread-29397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:43:42.424 [DEBUG] [Thread-29397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:43:42.425 [DEBUG] [Thread-29397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:43:42.425 [DEBUG] [Thread-29397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:43:42.425 [DEBUG] [Thread-29397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:43:42.425 [DEBUG] [Thread-29397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:43:42.425 [DEBUG] [Thread-29397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:43:42.425 [DEBUG] [Thread-29397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:43:42.425 [DEBUG] [Thread-29397] [transport.py] [_log()] client lang: <none>
2026-04-16T01:43:42.425 [DEBUG] [Thread-29397] [transport.py] [_log()] server lang: <none>
2026-04-16T01:43:42.425 [DEBUG] [Thread-29397] [transport.py] [_log()] kex follows: False
2026-04-16T01:43:42.425 [DEBUG] [Thread-29397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:43:42.425 [DEBUG] [Thread-29397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:43:42.426 [DEBUG] [Thread-29397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:43:42.426 [DEBUG] [Thread-29397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:43:42.426 [DEBUG] [Thread-29397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:43:42.426 [DEBUG] [Thread-29397] [transport.py] [_log()] Compression: none
2026-04-16T01:43:42.426 [DEBUG] [Thread-29397] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:43:42.482 [DEBUG] [Thread-29397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:43:42.482 [DEBUG] [Thread-29397] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:43:42.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:43:42.483 [DEBUG] [Thread-29397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:43:42.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:43:42.539 [DEBUG] [Thread-29397] [transport.py] [_log()] userauth is OK
2026-04-16T01:43:42.539 [DEBUG] [Thread-29397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:43:42.539 [DEBUG] [Thread-29397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:43:42.539 [DEBUG] [Thread-29397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:43:42.539 [DEBUG] [Thread-29397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:43:42.556 [INFO] [Thread-29397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:43:42.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:43:42.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:43:43.357 [DEBUG] [Thread-29397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:43:43.358 [DEBUG] [Thread-29397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:43:43.405 [DEBUG] [Thread-29397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:43:43.405 [DEBUG] [Thread-29397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:43:43.414 [DEBUG] [Thread-29397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:43:43.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:43:43.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')
2026-04-16T01:43: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') -> 00000000
2026-04-16T01:43:43.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:43:43.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:43:43.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:43:43.449 [DEBUG] [Thread-29397] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:43:46.709 [DEBUG] [Thread-29399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:43:57.585 [DEBUG] [Thread-29400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:44:01.754 [DEBUG] [Thread-29401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:44:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:44:13.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:44:13.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
2026-04-16T01:44:14.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 43, 53), 1.57452, 89.7855, 0.0, 14.1862, 8.62931, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:44:14.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:43:53
2026-04-16T01:44:15.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:44:15.584 [DEBUG] [Thread-29402] [transport.py] [_log()] starting thread (client mode): 0xee933460
2026-04-16T01:44:15.584 [DEBUG] [Thread-29402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:44:15.603 [DEBUG] [Thread-29402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:44:15.603 [INFO] [Thread-29402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:44:15.605 [DEBUG] [Thread-29402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:44:15.605 [DEBUG] [Thread-29402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:44:15.605 [DEBUG] [Thread-29402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:44:15.605 [DEBUG] [Thread-29402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:44:15.605 [DEBUG] [Thread-29402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:44:15.605 [DEBUG] [Thread-29402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:44:15.605 [DEBUG] [Thread-29402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:44:15.605 [DEBUG] [Thread-29402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:44:15.605 [DEBUG] [Thread-29402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:44:15.606 [DEBUG] [Thread-29402] [transport.py] [_log()] client lang: <none>
2026-04-16T01:44:15.606 [DEBUG] [Thread-29402] [transport.py] [_log()] server lang: <none>
2026-04-16T01:44:15.606 [DEBUG] [Thread-29402] [transport.py] [_log()] kex follows: False
2026-04-16T01:44:15.606 [DEBUG] [Thread-29402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:44:15.606 [DEBUG] [Thread-29402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:44:15.606 [DEBUG] [Thread-29402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:44:15.606 [DEBUG] [Thread-29402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:44:15.606 [DEBUG] [Thread-29402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:44:15.606 [DEBUG] [Thread-29402] [transport.py] [_log()] Compression: none
2026-04-16T01:44:15.606 [DEBUG] [Thread-29402] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:44:15.616 [DEBUG] [Thread-29402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:44:15.616 [DEBUG] [Thread-29402] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:44:15.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:44:15.617 [DEBUG] [Thread-29402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:44:15.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:44:15.618 [DEBUG] [Thread-29402] [transport.py] [_log()] userauth is OK
2026-04-16T01:44:15.618 [DEBUG] [Thread-29402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:44:15.618 [DEBUG] [Thread-29402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:44:15.618 [DEBUG] [Thread-29402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:44:15.618 [DEBUG] [Thread-29402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:44:15.633 [INFO] [Thread-29402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:44:15.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:44:16.262 [DEBUG] [Thread-29402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:44:16.262 [DEBUG] [Thread-29402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:44:16.262 [DEBUG] [Thread-29402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:44:16.303 [DEBUG] [Thread-29402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:44:16.304 [DEBUG] [Thread-29402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:44:16.305 [DEBUG] [Thread-29402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:44:16.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:44:16.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:44:16.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:44:16.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:44:16.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:44:16.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:44:16.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:44:16.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:44:16.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:44:16.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.989020 -999.00   +9.10   7.79     88   +7.40 1 1 1 3 1     0    0 1.55 -10.53 .NESW 8.9 7.8 122.6 11.0 9.4 -25.6 9.3 -24.2 9.1 -22.1 9.3 -24.3
2026-04-16T01:44:16.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:44:16.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:44:16.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.989020
2026-04-16T01:44:16.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:44:16.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:44:16.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:44:16.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:44:16.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:44:16.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:43:53', tmtdew=1.57452, humidity=89.7855, cloud=0.0, wind=14.1862, temperature=8.62931, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:44:11.328', atlas_cloud=1, atlas_rain=1, zp_data=[3.4297499999999994, nan, nan, nan, nan, nan, nan, nan, 2.378499999999999, 0.6840000000000002, 2.8412499999999987, 2.4334999999999996, nan, nan, nan, 0.10899999999999999, 0.49874999999999936, 0.1775000000000002, 0.5169999999999995, 0.5432499999999987, 0.4129999999999985, 0.4217499999999994, 0.19125000000000014, -0.015750000000000597, 0.0009999999999994458, 0.09500000000000064, 0.06975000000000087, 0.018499999999999517, 0.07000000000000028, 0.12400000000000055, 0.11600000000000144, 0.0010000000000012221, -0.1042500000000004], zp_timestamp='2026-04-15T23:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:44:16.325 [DEBUG] [Thread-29402] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:44:16.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:44:16.544 [DEBUG] [Thread-29405] [transport.py] [_log()] starting thread (client mode): 0xf1366ec0
2026-04-16T01:44:16.544 [DEBUG] [Thread-29405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:44:16.558 [DEBUG] [Thread-29405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:44:16.558 [INFO] [Thread-29405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:44:16.565 [DEBUG] [Thread-29405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:44:16.565 [DEBUG] [Thread-29405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:44:16.565 [DEBUG] [Thread-29405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:44:16.565 [DEBUG] [Thread-29405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:44:16.565 [DEBUG] [Thread-29405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:44:16.566 [DEBUG] [Thread-29405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:44:16.566 [DEBUG] [Thread-29405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:44:16.566 [DEBUG] [Thread-29405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:44:16.566 [DEBUG] [Thread-29405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:44:16.566 [DEBUG] [Thread-29405] [transport.py] [_log()] client lang: <none>
2026-04-16T01:44:16.566 [DEBUG] [Thread-29405] [transport.py] [_log()] server lang: <none>
2026-04-16T01:44:16.566 [DEBUG] [Thread-29405] [transport.py] [_log()] kex follows: False
2026-04-16T01:44:16.566 [DEBUG] [Thread-29405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:44:16.566 [DEBUG] [Thread-29405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:44:16.566 [DEBUG] [Thread-29405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:44:16.566 [DEBUG] [Thread-29405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:44:16.567 [DEBUG] [Thread-29405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:44:16.567 [DEBUG] [Thread-29405] [transport.py] [_log()] Compression: none
2026-04-16T01:44:16.567 [DEBUG] [Thread-29405] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:44:16.626 [DEBUG] [Thread-29405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:44:16.626 [DEBUG] [Thread-29405] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:44:16.627 [DEBUG] [Thread-29405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:44:16.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:44:16.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:44:16.683 [DEBUG] [Thread-29405] [transport.py] [_log()] userauth is OK
2026-04-16T01:44:16.683 [DEBUG] [Thread-29405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:44:16.683 [DEBUG] [Thread-29405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:44:16.683 [DEBUG] [Thread-29405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:44:16.683 [DEBUG] [Thread-29405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:44:16.706 [INFO] [Thread-29405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:44:16.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:44:16.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:44:16.784 [DEBUG] [Thread-29407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:44:17.496 [DEBUG] [Thread-29405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:44:17.496 [DEBUG] [Thread-29405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:44:17.544 [DEBUG] [Thread-29405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:44:17.544 [DEBUG] [Thread-29405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:44:17.553 [DEBUG] [Thread-29405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:44:17.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:44:17.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')
2026-04-16T01:44:17.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') -> 00000000
2026-04-16T01:44:17.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:44:17.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:44:17.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:44:17.585 [DEBUG] [Thread-29405] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:44:31.828 [DEBUG] [Thread-29408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:44:42.206 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:44:42.207 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:44:46.858 [DEBUG] [Thread-29409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:44:47.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:44:47.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:44:47.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
2026-04-16T01:44:48.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 44, 29), 1.77648, 88.4591, 0.0, 10.6754, 8.91465, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:44:48.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:44:29
2026-04-16T01:44:49.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:44:49.715 [DEBUG] [Thread-29410] [transport.py] [_log()] starting thread (client mode): 0xf13ca6b0
2026-04-16T01:44:49.715 [DEBUG] [Thread-29410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:44:49.735 [DEBUG] [Thread-29410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:44:49.735 [INFO] [Thread-29410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:44:49.738 [DEBUG] [Thread-29410] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:44:49.738 [DEBUG] [Thread-29410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:44:49.738 [DEBUG] [Thread-29410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:44:49.738 [DEBUG] [Thread-29410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:44:49.738 [DEBUG] [Thread-29410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:44:49.739 [DEBUG] [Thread-29410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:44:49.739 [DEBUG] [Thread-29410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:44:49.739 [DEBUG] [Thread-29410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:44:49.739 [DEBUG] [Thread-29410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:44:49.739 [DEBUG] [Thread-29410] [transport.py] [_log()] client lang: <none>
2026-04-16T01:44:49.739 [DEBUG] [Thread-29410] [transport.py] [_log()] server lang: <none>
2026-04-16T01:44:49.739 [DEBUG] [Thread-29410] [transport.py] [_log()] kex follows: False
2026-04-16T01:44:49.739 [DEBUG] [Thread-29410] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:44:49.739 [DEBUG] [Thread-29410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:44:49.739 [DEBUG] [Thread-29410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:44:49.739 [DEBUG] [Thread-29410] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:44:49.740 [DEBUG] [Thread-29410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:44:49.740 [DEBUG] [Thread-29410] [transport.py] [_log()] Compression: none
2026-04-16T01:44:49.740 [DEBUG] [Thread-29410] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:44:49.757 [DEBUG] [Thread-29410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:44:49.757 [DEBUG] [Thread-29410] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:44:49.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:44:49.758 [DEBUG] [Thread-29410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:44:49.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:44:49.759 [DEBUG] [Thread-29410] [transport.py] [_log()] userauth is OK
2026-04-16T01:44:49.759 [DEBUG] [Thread-29410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:44:49.759 [DEBUG] [Thread-29410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:44:49.759 [DEBUG] [Thread-29410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:44:49.759 [DEBUG] [Thread-29410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:44:49.777 [INFO] [Thread-29410] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:44:49.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:44:50.499 [DEBUG] [Thread-29410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:44:50.500 [DEBUG] [Thread-29410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:44:50.500 [DEBUG] [Thread-29410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:44:50.540 [DEBUG] [Thread-29410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:44:50.540 [DEBUG] [Thread-29410] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:44:50.543 [DEBUG] [Thread-29410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:44:50.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:44:50.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:44:50.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:44:50.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:44:50.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:44:50.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:44:50.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:44:50.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:44:50.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:44:50.568 [DEBUG] [Thread-29410] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:44:50.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.989367 -999.00   +9.10   9.59     88   +7.40 1 1 1 3 1     0    0 1.52 -10.54 .NESW 11.2 9.6 92.2 12.7 9.5 -25.5 9.3 -24.1 9.0 -22.0 9.3 -24.1
2026-04-16T01:44:50.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:44:50.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:44:50.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.989367
2026-04-16T01:44:50.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:44:50.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:44:50.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:44:50.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:44:50.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:44:50.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:44:29', tmtdew=1.77648, humidity=88.4591, cloud=0.0, wind=10.6754, temperature=8.91465, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:44:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[3.4297499999999994, nan, nan, nan, nan, nan, nan, nan, 2.378499999999999, 0.6840000000000002, 2.8412499999999987, 2.4334999999999996, nan, nan, nan, 0.10899999999999999, 0.49874999999999936, 0.1775000000000002, 0.5169999999999995, 0.5432499999999987, 0.4129999999999985, 0.4217499999999994, 0.19125000000000014, -0.015750000000000597, 0.0009999999999994458, 0.09500000000000064, 0.06975000000000087, 0.018499999999999517, 0.07000000000000028, 0.12400000000000055, 0.11600000000000144, 0.0010000000000012221, -0.1042500000000004], zp_timestamp='2026-04-15T23:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:44:50.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:44:50.791 [DEBUG] [Thread-29413] [transport.py] [_log()] starting thread (client mode): 0xee9c7fd0
2026-04-16T01:44:50.791 [DEBUG] [Thread-29413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:44:50.805 [DEBUG] [Thread-29413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:44:50.805 [INFO] [Thread-29413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:44:50.812 [DEBUG] [Thread-29413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:44:50.813 [DEBUG] [Thread-29413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:44:50.813 [DEBUG] [Thread-29413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:44:50.813 [DEBUG] [Thread-29413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:44:50.813 [DEBUG] [Thread-29413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:44:50.813 [DEBUG] [Thread-29413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:44:50.813 [DEBUG] [Thread-29413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:44:50.813 [DEBUG] [Thread-29413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:44:50.813 [DEBUG] [Thread-29413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:44:50.813 [DEBUG] [Thread-29413] [transport.py] [_log()] client lang: <none>
2026-04-16T01:44:50.813 [DEBUG] [Thread-29413] [transport.py] [_log()] server lang: <none>
2026-04-16T01:44:50.813 [DEBUG] [Thread-29413] [transport.py] [_log()] kex follows: False
2026-04-16T01:44:50.814 [DEBUG] [Thread-29413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:44:50.814 [DEBUG] [Thread-29413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:44:50.814 [DEBUG] [Thread-29413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:44:50.814 [DEBUG] [Thread-29413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:44:50.814 [DEBUG] [Thread-29413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:44:50.814 [DEBUG] [Thread-29413] [transport.py] [_log()] Compression: none
2026-04-16T01:44:50.814 [DEBUG] [Thread-29413] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:44:50.870 [DEBUG] [Thread-29413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:44:50.870 [DEBUG] [Thread-29413] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:44:50.871 [DEBUG] [Thread-29413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:44:50.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:44:50.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:44:50.927 [DEBUG] [Thread-29413] [transport.py] [_log()] userauth is OK
2026-04-16T01:44:50.927 [DEBUG] [Thread-29413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:44:50.927 [DEBUG] [Thread-29413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:44:50.927 [DEBUG] [Thread-29413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:44:50.927 [DEBUG] [Thread-29413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:44:50.950 [INFO] [Thread-29413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:44:50.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:44:50.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:44:51.779 [DEBUG] [Thread-29413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:44:51.779 [DEBUG] [Thread-29413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:44:51.829 [DEBUG] [Thread-29413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:44:51.830 [DEBUG] [Thread-29413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:44:51.841 [DEBUG] [Thread-29413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:44:51.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:44:51.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')
2026-04-16T01:44:51.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
2026-04-16T01:44:51.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:44:51.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:44:51.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:44:51.888 [DEBUG] [Thread-29413] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:44:57.733 [DEBUG] [Thread-29415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:45:01.889 [DEBUG] [Thread-29416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:45:16.935 [DEBUG] [Thread-29417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:45:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:45:21.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:45:21.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
2026-04-16T01:45:23.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 45, 4), 1.78163, 88.4262, 0.0, 10.6402, 8.89826, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:45:23.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:45:04
2026-04-16T01:45:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:45:24.017 [DEBUG] [Thread-29418] [transport.py] [_log()] starting thread (client mode): 0xf13c9ba0
2026-04-16T01:45:24.017 [DEBUG] [Thread-29418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:45:24.037 [DEBUG] [Thread-29418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:45:24.037 [INFO] [Thread-29418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:45:24.038 [DEBUG] [Thread-29418] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:45:24.039 [DEBUG] [Thread-29418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:45:24.039 [DEBUG] [Thread-29418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:45:24.039 [DEBUG] [Thread-29418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:45:24.039 [DEBUG] [Thread-29418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:45:24.039 [DEBUG] [Thread-29418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:45:24.039 [DEBUG] [Thread-29418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:45:24.039 [DEBUG] [Thread-29418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:45:24.039 [DEBUG] [Thread-29418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:45:24.039 [DEBUG] [Thread-29418] [transport.py] [_log()] client lang: <none>
2026-04-16T01:45:24.039 [DEBUG] [Thread-29418] [transport.py] [_log()] server lang: <none>
2026-04-16T01:45:24.039 [DEBUG] [Thread-29418] [transport.py] [_log()] kex follows: False
2026-04-16T01:45:24.040 [DEBUG] [Thread-29418] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:45:24.040 [DEBUG] [Thread-29418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:45:24.040 [DEBUG] [Thread-29418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:45:24.040 [DEBUG] [Thread-29418] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:45:24.040 [DEBUG] [Thread-29418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:45:24.040 [DEBUG] [Thread-29418] [transport.py] [_log()] Compression: none
2026-04-16T01:45:24.040 [DEBUG] [Thread-29418] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:45:24.048 [DEBUG] [Thread-29418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:45:24.049 [DEBUG] [Thread-29418] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:45:24.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:45:24.049 [DEBUG] [Thread-29418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:45:24.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:45:24.050 [DEBUG] [Thread-29418] [transport.py] [_log()] userauth is OK
2026-04-16T01:45:24.050 [DEBUG] [Thread-29418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:45:24.050 [DEBUG] [Thread-29418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:45:24.050 [DEBUG] [Thread-29418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:45:24.051 [DEBUG] [Thread-29418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:45:24.089 [INFO] [Thread-29418] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:45:24.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:45:31.176 [DEBUG] [Thread-29418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:45:31.176 [DEBUG] [Thread-29418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:45:31.177 [DEBUG] [Thread-29418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:45:31.217 [DEBUG] [Thread-29418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:45:31.217 [DEBUG] [Thread-29418] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:45:31.220 [DEBUG] [Thread-29418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:45:31.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:45:31.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:45:31.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:45:31.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:45:31.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:45:31.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:45:31.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:45:31.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:45:31.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:45:31.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.989715 -999.00   +9.10   7.35     88   +7.40 1 1 1 3 1     0    0 1.50 -10.89 .NESW 7.0 7.3 99.3 10.2 9.5 -25.5 9.3 -24.2 9.1 -22.1 9.3 -24.2
2026-04-16T01:45:31.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:45:31.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:45:31.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.989715
2026-04-16T01:45:31.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:45:31.247 [DEBUG] [Thread-29418] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:45:31.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:45:31.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:45:31.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:45:31.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:45:31.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:45:04', tmtdew=1.78163, humidity=88.4262, cloud=0.0, wind=10.6402, temperature=8.89826, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:45:11.376', atlas_cloud=1, atlas_rain=1, zp_data=[3.4297499999999994, nan, nan, nan, nan, nan, nan, nan, 2.378499999999999, 0.6840000000000002, 2.8412499999999987, 2.4334999999999996, nan, nan, nan, 0.10899999999999999, 0.49874999999999936, 0.1775000000000002, 0.5169999999999995, 0.5432499999999987, 0.4129999999999985, 0.4217499999999994, 0.19125000000000014, -0.015750000000000597, 0.0009999999999994458, 0.09500000000000064, 0.06975000000000087, 0.018499999999999517, 0.07000000000000028, 0.12400000000000055, 0.11600000000000144, 0.0010000000000012221, -0.1042500000000004], zp_timestamp='2026-04-15T23:41:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:45:31.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:45:31.503 [DEBUG] [Thread-29421] [transport.py] [_log()] starting thread (client mode): 0xf13646d0
2026-04-16T01:45:31.503 [DEBUG] [Thread-29421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:45:31.518 [DEBUG] [Thread-29421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:45:31.518 [INFO] [Thread-29421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:45:31.526 [DEBUG] [Thread-29421] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:45:31.526 [DEBUG] [Thread-29421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:45:31.526 [DEBUG] [Thread-29421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:45:31.526 [DEBUG] [Thread-29421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:45:31.526 [DEBUG] [Thread-29421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:45:31.526 [DEBUG] [Thread-29421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:45:31.526 [DEBUG] [Thread-29421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:45:31.526 [DEBUG] [Thread-29421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:45:31.526 [DEBUG] [Thread-29421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:45:31.527 [DEBUG] [Thread-29421] [transport.py] [_log()] client lang: <none>
2026-04-16T01:45:31.527 [DEBUG] [Thread-29421] [transport.py] [_log()] server lang: <none>
2026-04-16T01:45:31.527 [DEBUG] [Thread-29421] [transport.py] [_log()] kex follows: False
2026-04-16T01:45:31.527 [DEBUG] [Thread-29421] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:45:31.527 [DEBUG] [Thread-29421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:45:31.527 [DEBUG] [Thread-29421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:45:31.527 [DEBUG] [Thread-29421] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:45:31.527 [DEBUG] [Thread-29421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:45:31.527 [DEBUG] [Thread-29421] [transport.py] [_log()] Compression: none
2026-04-16T01:45:31.527 [DEBUG] [Thread-29421] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:45:31.585 [DEBUG] [Thread-29421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:45:31.586 [DEBUG] [Thread-29421] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:45:31.586 [DEBUG] [Thread-29421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:45:31.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:45:31.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:45:31.642 [DEBUG] [Thread-29421] [transport.py] [_log()] userauth is OK
2026-04-16T01:45:31.643 [DEBUG] [Thread-29421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:45:31.643 [DEBUG] [Thread-29421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:45:31.643 [DEBUG] [Thread-29421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:45:31.643 [DEBUG] [Thread-29421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:45:31.660 [INFO] [Thread-29421] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:45:31.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:45:31.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:45:31.963 [DEBUG] [Thread-29423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:45:32.539 [DEBUG] [Thread-29421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:45:32.539 [DEBUG] [Thread-29421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:45:32.587 [DEBUG] [Thread-29421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:45:32.587 [DEBUG] [Thread-29421] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:45:32.596 [DEBUG] [Thread-29421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:45:32.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:45:32.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')
2026-04-16T01:45:32.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
2026-04-16T01:45:32.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:45:32.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:45:32.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:45:32.631 [DEBUG] [Thread-29421] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:45:42.408 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:45:42.409 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:45:47.005 [DEBUG] [Thread-29424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:45:57.880 [DEBUG] [Thread-29425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:46:02.036 [DEBUG] [Thread-29426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:46:02.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:46:02.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:46:02.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
2026-04-16T01:46:03.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 45, 40), 1.55248, 89.9188, 0.0, 13.7981, 8.59651, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:46:03.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:45:40
2026-04-16T01:46:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:46:04.780 [DEBUG] [Thread-29427] [transport.py] [_log()] starting thread (client mode): 0xee954070
2026-04-16T01:46:04.781 [DEBUG] [Thread-29427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:46:04.800 [DEBUG] [Thread-29427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:46:04.800 [INFO] [Thread-29427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:46:04.803 [DEBUG] [Thread-29427] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:46:04.803 [DEBUG] [Thread-29427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:46:04.803 [DEBUG] [Thread-29427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:46:04.803 [DEBUG] [Thread-29427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:46:04.803 [DEBUG] [Thread-29427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:46:04.803 [DEBUG] [Thread-29427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:46:04.803 [DEBUG] [Thread-29427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:46:04.803 [DEBUG] [Thread-29427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:46:04.804 [DEBUG] [Thread-29427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:46:04.804 [DEBUG] [Thread-29427] [transport.py] [_log()] client lang: <none>
2026-04-16T01:46:04.804 [DEBUG] [Thread-29427] [transport.py] [_log()] server lang: <none>
2026-04-16T01:46:04.804 [DEBUG] [Thread-29427] [transport.py] [_log()] kex follows: False
2026-04-16T01:46:04.804 [DEBUG] [Thread-29427] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:46:04.804 [DEBUG] [Thread-29427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:46:04.804 [DEBUG] [Thread-29427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:46:04.804 [DEBUG] [Thread-29427] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:46:04.804 [DEBUG] [Thread-29427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:46:04.804 [DEBUG] [Thread-29427] [transport.py] [_log()] Compression: none
2026-04-16T01:46:04.804 [DEBUG] [Thread-29427] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:46:04.822 [DEBUG] [Thread-29427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:46:04.822 [DEBUG] [Thread-29427] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:46:04.822 [DEBUG] [Thread-29427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:46:04.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:46:04.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:46:04.823 [DEBUG] [Thread-29427] [transport.py] [_log()] userauth is OK
2026-04-16T01:46:04.823 [DEBUG] [Thread-29427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:46:04.824 [DEBUG] [Thread-29427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:46:04.824 [DEBUG] [Thread-29427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:46:04.824 [DEBUG] [Thread-29427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:46:04.847 [INFO] [Thread-29427] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:46:04.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:46:05.682 [DEBUG] [Thread-29427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:46:05.683 [DEBUG] [Thread-29427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:46:05.683 [DEBUG] [Thread-29427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:46:05.723 [DEBUG] [Thread-29427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:46:05.723 [DEBUG] [Thread-29427] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:46:05.726 [DEBUG] [Thread-29427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:46:05.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:46:05.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:46:05.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:46:05.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:46:05.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:46:05.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:46:05.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:46:05.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:46:05.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:46:05.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.989715 -999.00   +9.10   7.35     88   +7.40 1 1 1 3 1     0    0 1.50 -10.89 .NESW 7.0 7.3 99.3 10.2 9.5 -25.5 9.3 -24.2 9.1 -22.1 9.3 -24.2
2026-04-16T01:46:05.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:46:05.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:46:05.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.989715
2026-04-16T01:46:05.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:46:05.750 [DEBUG] [Thread-29427] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:46:05.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:46:05.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:46:05.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:46:05.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:46:05.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:45:40', tmtdew=1.55248, humidity=89.9188, cloud=0.0, wind=13.7981, temperature=8.59651, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:45:11.376', atlas_cloud=1, atlas_rain=1, zp_data=[3.540749999999999, 2.388750000000001, nan, nan, nan, nan, nan, nan, 2.386499999999999, 1.1580000000000004, 3.01525, 2.5409999999999995, nan, 2.65825, nan, 0.14599999999999902, 0.4692500000000006, 0.2594999999999992, 0.7479999999999993, 0.8162499999999993, 0.4579999999999984, 0.4447499999999991, 0.13975000000000115, -0.02075000000000138, -0.012000000000000455, 0.059499999999999886, 0.1067499999999999, 0.04550000000000054, 0.062000000000001165, 0.15500000000000114, 0.11300000000000132, -0.0030000000000001137, -0.07525000000000048], zp_timestamp='2026-04-15T23:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:46:05.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:46:05.995 [DEBUG] [Thread-29430] [transport.py] [_log()] starting thread (client mode): 0xf1364e50
2026-04-16T01:46:05.995 [DEBUG] [Thread-29430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:46:06.009 [DEBUG] [Thread-29430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:46:06.009 [INFO] [Thread-29430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:46:06.016 [DEBUG] [Thread-29430] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:46:06.017 [DEBUG] [Thread-29430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:46:06.017 [DEBUG] [Thread-29430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:46:06.017 [DEBUG] [Thread-29430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:46:06.017 [DEBUG] [Thread-29430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:46:06.017 [DEBUG] [Thread-29430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:46:06.017 [DEBUG] [Thread-29430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:46:06.017 [DEBUG] [Thread-29430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:46:06.017 [DEBUG] [Thread-29430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:46:06.017 [DEBUG] [Thread-29430] [transport.py] [_log()] client lang: <none>
2026-04-16T01:46:06.017 [DEBUG] [Thread-29430] [transport.py] [_log()] server lang: <none>
2026-04-16T01:46:06.017 [DEBUG] [Thread-29430] [transport.py] [_log()] kex follows: False
2026-04-16T01:46:06.017 [DEBUG] [Thread-29430] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:46:06.018 [DEBUG] [Thread-29430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:46:06.018 [DEBUG] [Thread-29430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:46:06.018 [DEBUG] [Thread-29430] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:46:06.018 [DEBUG] [Thread-29430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:46:06.018 [DEBUG] [Thread-29430] [transport.py] [_log()] Compression: none
2026-04-16T01:46:06.018 [DEBUG] [Thread-29430] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:46:06.074 [DEBUG] [Thread-29430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:46:06.075 [DEBUG] [Thread-29430] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:46:06.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:46:06.075 [DEBUG] [Thread-29430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:46:06.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:46:06.131 [DEBUG] [Thread-29430] [transport.py] [_log()] userauth is OK
2026-04-16T01:46:06.131 [DEBUG] [Thread-29430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:46:06.131 [DEBUG] [Thread-29430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:46:06.132 [DEBUG] [Thread-29430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:46:06.132 [DEBUG] [Thread-29430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:46:06.157 [INFO] [Thread-29430] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:46:06.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:46:06.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:46:06.938 [DEBUG] [Thread-29430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:46:06.938 [DEBUG] [Thread-29430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:46:06.986 [DEBUG] [Thread-29430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:46:06.986 [DEBUG] [Thread-29430] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:46:06.995 [DEBUG] [Thread-29430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:46:07.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:46:07.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')
2026-04-16T01:46:07.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
2026-04-16T01:46:07.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:46:07.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:46:07.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:46:07.029 [DEBUG] [Thread-29430] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:46:17.067 [DEBUG] [Thread-29432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:46:32.113 [DEBUG] [Thread-29433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:46:37.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:46:37.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:46:37.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
2026-04-16T01:46:38.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 46, 16), 1.77678, 88.4596, 0.0, 10.552, 8.99819, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:46:38.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:46:16
2026-04-16T01:46:38.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:46:39.327 [DEBUG] [Thread-29434] [transport.py] [_log()] starting thread (client mode): 0xf13c98a0
2026-04-16T01:46:39.327 [DEBUG] [Thread-29434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:46:39.347 [DEBUG] [Thread-29434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:46:39.348 [INFO] [Thread-29434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:46:39.351 [DEBUG] [Thread-29434] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:46:39.351 [DEBUG] [Thread-29434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:46:39.351 [DEBUG] [Thread-29434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:46:39.351 [DEBUG] [Thread-29434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:46:39.351 [DEBUG] [Thread-29434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:46:39.351 [DEBUG] [Thread-29434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:46:39.351 [DEBUG] [Thread-29434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:46:39.352 [DEBUG] [Thread-29434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:46:39.352 [DEBUG] [Thread-29434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:46:39.352 [DEBUG] [Thread-29434] [transport.py] [_log()] client lang: <none>
2026-04-16T01:46:39.352 [DEBUG] [Thread-29434] [transport.py] [_log()] server lang: <none>
2026-04-16T01:46:39.352 [DEBUG] [Thread-29434] [transport.py] [_log()] kex follows: False
2026-04-16T01:46:39.352 [DEBUG] [Thread-29434] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:46:39.352 [DEBUG] [Thread-29434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:46:39.352 [DEBUG] [Thread-29434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:46:39.352 [DEBUG] [Thread-29434] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:46:39.352 [DEBUG] [Thread-29434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:46:39.352 [DEBUG] [Thread-29434] [transport.py] [_log()] Compression: none
2026-04-16T01:46:39.353 [DEBUG] [Thread-29434] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:46:39.372 [DEBUG] [Thread-29434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:46:39.372 [DEBUG] [Thread-29434] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:46:39.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:46:39.373 [DEBUG] [Thread-29434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:46:39.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:46:39.374 [DEBUG] [Thread-29434] [transport.py] [_log()] userauth is OK
2026-04-16T01:46:39.374 [DEBUG] [Thread-29434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:46:39.374 [DEBUG] [Thread-29434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:46:39.374 [DEBUG] [Thread-29434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:46:39.374 [DEBUG] [Thread-29434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:46:39.399 [INFO] [Thread-29434] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:46:39.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:46:40.210 [DEBUG] [Thread-29434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:46:40.211 [DEBUG] [Thread-29434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:46:40.211 [DEBUG] [Thread-29434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:46:40.251 [DEBUG] [Thread-29434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:46:40.251 [DEBUG] [Thread-29434] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:46:40.254 [DEBUG] [Thread-29434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:46:40.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:46:40.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:46:40.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:46:40.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:46:40.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:46:40.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:46:40.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:46:40.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:46:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:46:40.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.990062 -999.00   +9.10   6.81     88   +7.40 1 1 1 3 1     0    0 1.53 -10.32 .NESW 6.4 6.8 78.4 9.2 9.4 -25.6 9.3 -24.4 9.1 -22.0 9.3 -24.2
2026-04-16T01:46:40.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:46:40.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:46:40.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.990062
2026-04-16T01:46:40.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:46:40.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:46:40.281 [DEBUG] [Thread-29434] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:46:40.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:46:40.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:46:40.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:46:40.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:46:16', tmtdew=1.77678, humidity=88.4596, cloud=0.0, wind=10.552, temperature=8.99819, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:45:41.357', atlas_cloud=1, atlas_rain=1, zp_data=[3.540749999999999, 2.388750000000001, nan, nan, nan, nan, nan, nan, 2.386499999999999, 1.1580000000000004, 3.01525, 2.5409999999999995, nan, 2.65825, nan, 0.14599999999999902, 0.4692500000000006, 0.2594999999999992, 0.7479999999999993, 0.8162499999999993, 0.4579999999999984, 0.4447499999999991, 0.13975000000000115, -0.02075000000000138, -0.012000000000000455, 0.059499999999999886, 0.1067499999999999, 0.04550000000000054, 0.062000000000001165, 0.15500000000000114, 0.11300000000000132, -0.0030000000000001137, -0.07525000000000048], zp_timestamp='2026-04-15T23:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:46:40.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:46:40.540 [DEBUG] [Thread-29437] [transport.py] [_log()] starting thread (client mode): 0xee993490
2026-04-16T01:46:40.541 [DEBUG] [Thread-29437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:46:40.555 [DEBUG] [Thread-29437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:46:40.555 [INFO] [Thread-29437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:46:40.568 [DEBUG] [Thread-29437] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:46:40.568 [DEBUG] [Thread-29437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:46:40.568 [DEBUG] [Thread-29437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:46:40.568 [DEBUG] [Thread-29437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:46:40.568 [DEBUG] [Thread-29437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:46:40.568 [DEBUG] [Thread-29437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:46:40.569 [DEBUG] [Thread-29437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:46:40.569 [DEBUG] [Thread-29437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:46:40.569 [DEBUG] [Thread-29437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:46:40.569 [DEBUG] [Thread-29437] [transport.py] [_log()] client lang: <none>
2026-04-16T01:46:40.569 [DEBUG] [Thread-29437] [transport.py] [_log()] server lang: <none>
2026-04-16T01:46:40.569 [DEBUG] [Thread-29437] [transport.py] [_log()] kex follows: False
2026-04-16T01:46:40.569 [DEBUG] [Thread-29437] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:46:40.569 [DEBUG] [Thread-29437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:46:40.570 [DEBUG] [Thread-29437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:46:40.570 [DEBUG] [Thread-29437] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:46:40.570 [DEBUG] [Thread-29437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:46:40.570 [DEBUG] [Thread-29437] [transport.py] [_log()] Compression: none
2026-04-16T01:46:40.570 [DEBUG] [Thread-29437] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:46:40.626 [DEBUG] [Thread-29437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:46:40.626 [DEBUG] [Thread-29437] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:46:40.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:46:40.627 [DEBUG] [Thread-29437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:46:40.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:46:40.683 [DEBUG] [Thread-29437] [transport.py] [_log()] userauth is OK
2026-04-16T01:46:40.683 [DEBUG] [Thread-29437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:46:40.683 [DEBUG] [Thread-29437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:46:40.683 [DEBUG] [Thread-29437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:46:40.683 [DEBUG] [Thread-29437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:46:40.708 [INFO] [Thread-29437] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:46:40.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:46:40.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:46:41.568 [DEBUG] [Thread-29437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:46:41.569 [DEBUG] [Thread-29437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:46:41.616 [DEBUG] [Thread-29437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:46:41.616 [DEBUG] [Thread-29437] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:46:41.625 [DEBUG] [Thread-29437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:46:41.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:46:41.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')
2026-04-16T01:46:41.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
2026-04-16T01:46:41.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:46:41.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:46:41.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:46:41.659 [DEBUG] [Thread-29437] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:46:42.612 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:46:42.613 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:46:47.144 [DEBUG] [Thread-29439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:46:58.042 [DEBUG] [Thread-29440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:47:02.189 [DEBUG] [Thread-29441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:47:11.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:47:11.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:47:11.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
2026-04-16T01:47:12.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 46, 51), 1.56242, 89.8529, 0.0, 13.7981, 8.53047, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:47:12.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:46:51
2026-04-16T01:47:13.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:47:13.779 [DEBUG] [Thread-29442] [transport.py] [_log()] starting thread (client mode): 0xf13ca410
2026-04-16T01:47:13.779 [DEBUG] [Thread-29442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:47:13.798 [DEBUG] [Thread-29442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:47:13.798 [INFO] [Thread-29442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:47:13.802 [DEBUG] [Thread-29442] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:47:13.802 [DEBUG] [Thread-29442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:47:13.802 [DEBUG] [Thread-29442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:47:13.802 [DEBUG] [Thread-29442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:47:13.802 [DEBUG] [Thread-29442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:47:13.802 [DEBUG] [Thread-29442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:47:13.802 [DEBUG] [Thread-29442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:47:13.802 [DEBUG] [Thread-29442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:47:13.802 [DEBUG] [Thread-29442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:47:13.802 [DEBUG] [Thread-29442] [transport.py] [_log()] client lang: <none>
2026-04-16T01:47:13.802 [DEBUG] [Thread-29442] [transport.py] [_log()] server lang: <none>
2026-04-16T01:47:13.803 [DEBUG] [Thread-29442] [transport.py] [_log()] kex follows: False
2026-04-16T01:47:13.803 [DEBUG] [Thread-29442] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:47:13.803 [DEBUG] [Thread-29442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:47:13.803 [DEBUG] [Thread-29442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:47:13.803 [DEBUG] [Thread-29442] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:47:13.803 [DEBUG] [Thread-29442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:47:13.803 [DEBUG] [Thread-29442] [transport.py] [_log()] Compression: none
2026-04-16T01:47:13.803 [DEBUG] [Thread-29442] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:47:13.821 [DEBUG] [Thread-29442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:47:13.821 [DEBUG] [Thread-29442] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:47:13.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:47:13.822 [DEBUG] [Thread-29442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:47:13.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:47:13.823 [DEBUG] [Thread-29442] [transport.py] [_log()] userauth is OK
2026-04-16T01:47:13.823 [DEBUG] [Thread-29442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:47:13.823 [DEBUG] [Thread-29442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:47:13.823 [DEBUG] [Thread-29442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:47:13.823 [DEBUG] [Thread-29442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:47:13.849 [INFO] [Thread-29442] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:47:13.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:47:14.637 [DEBUG] [Thread-29442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:47:14.637 [DEBUG] [Thread-29442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:47:14.638 [DEBUG] [Thread-29442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:47:14.678 [DEBUG] [Thread-29442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:47:14.678 [DEBUG] [Thread-29442] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:47:14.681 [DEBUG] [Thread-29442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:47:14.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:47:14.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:47:14.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:47:14.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:47:14.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:47:14.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:47:14.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:47:14.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:47:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:47:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.990409 -999.00   +9.20   6.41     88   +7.40 1 1 1 3 1     0    0 1.55 -10.09 .NESW 8.2 6.4 74.6 9.1 9.5 -25.4 9.4 -24.3 9.1 -22.1 9.4 -24.2
2026-04-16T01:47:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:47:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:47:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.990409
2026-04-16T01:47:14.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:47:14.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:47:14.707 [DEBUG] [Thread-29442] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:47:14.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:47:14.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:47:14.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:47:14.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:46:51', tmtdew=1.56242, humidity=89.8529, cloud=0.0, wind=13.7981, temperature=8.53047, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:46:11.338', atlas_cloud=1, atlas_rain=1, zp_data=[3.540749999999999, 2.388750000000001, nan, nan, nan, nan, nan, nan, 2.386499999999999, 1.1580000000000004, 3.01525, 2.5409999999999995, nan, 2.65825, nan, 0.14599999999999902, 0.4692500000000006, 0.2594999999999992, 0.7479999999999993, 0.8162499999999993, 0.4579999999999984, 0.4447499999999991, 0.13975000000000115, -0.02075000000000138, -0.012000000000000455, 0.059499999999999886, 0.1067499999999999, 0.04550000000000054, 0.062000000000001165, 0.15500000000000114, 0.11300000000000132, -0.0030000000000001137, -0.07525000000000048], zp_timestamp='2026-04-15T23:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:47:14.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:47:14.965 [DEBUG] [Thread-29445] [transport.py] [_log()] starting thread (client mode): 0xee9eaa10
2026-04-16T01:47:14.965 [DEBUG] [Thread-29445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:47:14.980 [DEBUG] [Thread-29445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:47:14.980 [INFO] [Thread-29445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:47:14.987 [DEBUG] [Thread-29445] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:47:14.987 [DEBUG] [Thread-29445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:47:14.987 [DEBUG] [Thread-29445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:47:14.987 [DEBUG] [Thread-29445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:47:14.988 [DEBUG] [Thread-29445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:47:14.988 [DEBUG] [Thread-29445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:47:14.988 [DEBUG] [Thread-29445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:47:14.988 [DEBUG] [Thread-29445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:47:14.988 [DEBUG] [Thread-29445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:47:14.988 [DEBUG] [Thread-29445] [transport.py] [_log()] client lang: <none>
2026-04-16T01:47:14.988 [DEBUG] [Thread-29445] [transport.py] [_log()] server lang: <none>
2026-04-16T01:47:14.988 [DEBUG] [Thread-29445] [transport.py] [_log()] kex follows: False
2026-04-16T01:47:14.988 [DEBUG] [Thread-29445] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:47:14.988 [DEBUG] [Thread-29445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:47:14.989 [DEBUG] [Thread-29445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:47:14.989 [DEBUG] [Thread-29445] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:47:14.989 [DEBUG] [Thread-29445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:47:14.989 [DEBUG] [Thread-29445] [transport.py] [_log()] Compression: none
2026-04-16T01:47:14.989 [DEBUG] [Thread-29445] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:47:15.046 [DEBUG] [Thread-29445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:47:15.046 [DEBUG] [Thread-29445] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:47:15.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:47:15.047 [DEBUG] [Thread-29445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:47:15.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:47:15.103 [DEBUG] [Thread-29445] [transport.py] [_log()] userauth is OK
2026-04-16T01:47:15.103 [DEBUG] [Thread-29445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:47:15.103 [DEBUG] [Thread-29445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:47:15.103 [DEBUG] [Thread-29445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:47:15.103 [DEBUG] [Thread-29445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:47:15.127 [INFO] [Thread-29445] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:47:15.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:47:15.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:47:15.937 [DEBUG] [Thread-29445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:47:15.937 [DEBUG] [Thread-29445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:47:15.985 [DEBUG] [Thread-29445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:47:15.986 [DEBUG] [Thread-29445] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:47:15.995 [DEBUG] [Thread-29445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:47:16.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:47:16.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')
2026-04-16T01:47:16.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
2026-04-16T01:47:16.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:47:16.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:47:16.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:47:16.029 [DEBUG] [Thread-29445] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:47:17.219 [DEBUG] [Thread-29447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:47:32.261 [DEBUG] [Thread-29448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:47:42.814 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:47:42.815 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:47:46.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:47:46.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:47:46.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
2026-04-16T01:47:47.292 [DEBUG] [Thread-29449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:47:47.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 47, 27), 1.82636, 88.4598, 0.0, 10.5167, 8.96513, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:47:47.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:47:27
2026-04-16T01:47:47.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:47:48.194 [DEBUG] [Thread-29450] [transport.py] [_log()] starting thread (client mode): 0xf13e1a80
2026-04-16T01:47:48.194 [DEBUG] [Thread-29450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:47:48.214 [DEBUG] [Thread-29450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:47:48.214 [INFO] [Thread-29450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:47:48.217 [DEBUG] [Thread-29450] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:47:48.217 [DEBUG] [Thread-29450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:47:48.217 [DEBUG] [Thread-29450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:47:48.217 [DEBUG] [Thread-29450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:47:48.217 [DEBUG] [Thread-29450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:47:48.217 [DEBUG] [Thread-29450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:47:48.217 [DEBUG] [Thread-29450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:47:48.218 [DEBUG] [Thread-29450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:47:48.218 [DEBUG] [Thread-29450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:47:48.218 [DEBUG] [Thread-29450] [transport.py] [_log()] client lang: <none>
2026-04-16T01:47:48.218 [DEBUG] [Thread-29450] [transport.py] [_log()] server lang: <none>
2026-04-16T01:47:48.218 [DEBUG] [Thread-29450] [transport.py] [_log()] kex follows: False
2026-04-16T01:47:48.218 [DEBUG] [Thread-29450] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:47:48.218 [DEBUG] [Thread-29450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:47:48.218 [DEBUG] [Thread-29450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:47:48.218 [DEBUG] [Thread-29450] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:47:48.218 [DEBUG] [Thread-29450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:47:48.218 [DEBUG] [Thread-29450] [transport.py] [_log()] Compression: none
2026-04-16T01:47:48.219 [DEBUG] [Thread-29450] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:47:48.234 [DEBUG] [Thread-29450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:47:48.234 [DEBUG] [Thread-29450] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:47:48.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:47:48.235 [DEBUG] [Thread-29450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:47:48.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:47:48.236 [DEBUG] [Thread-29450] [transport.py] [_log()] userauth is OK
2026-04-16T01:47:48.236 [DEBUG] [Thread-29450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:47:48.236 [DEBUG] [Thread-29450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:47:48.236 [DEBUG] [Thread-29450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:47:48.236 [DEBUG] [Thread-29450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:47:48.272 [INFO] [Thread-29450] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:47:48.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:47:49.045 [DEBUG] [Thread-29450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:47:49.045 [DEBUG] [Thread-29450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:47:49.046 [DEBUG] [Thread-29450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:47:49.086 [DEBUG] [Thread-29450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:47:49.086 [DEBUG] [Thread-29450] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:47:49.089 [DEBUG] [Thread-29450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:47:49.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:47:49.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:47:49.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:47:49.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:47:49.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:47:49.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:47:49.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:47:49.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:47:49.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:47:49.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.991103 -999.00   +9.20   6.82     88   +7.40 1 1 1 3 1     0    0 1.51 -9.92 .NESW 6.9 6.8 108.2 8.0 9.5 -25.4 9.3 -24.1 9.1 -22.0 9.3 -24.3
2026-04-16T01:47:49.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:47:49.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:47:49.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.991103
2026-04-16T01:47:49.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:47:49.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:47:49.115 [DEBUG] [Thread-29450] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:47:49.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:47:49.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:47:49.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:47:49.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:47:27', tmtdew=1.82636, humidity=88.4598, cloud=0.0, wind=10.5167, temperature=8.96513, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:47:11.299', atlas_cloud=1, atlas_rain=1, zp_data=[3.540749999999999, 2.388750000000001, nan, nan, nan, nan, nan, nan, 2.386499999999999, 1.1580000000000004, 3.01525, 2.5409999999999995, nan, 2.65825, nan, 0.14599999999999902, 0.4692500000000006, 0.2594999999999992, 0.7479999999999993, 0.8162499999999993, 0.4579999999999984, 0.4447499999999991, 0.13975000000000115, -0.02075000000000138, -0.012000000000000455, 0.059499999999999886, 0.1067499999999999, 0.04550000000000054, 0.062000000000001165, 0.15500000000000114, 0.11300000000000132, -0.0030000000000001137, -0.07525000000000048], zp_timestamp='2026-04-15T23:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:47:49.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:47:49.366 [DEBUG] [Thread-29453] [transport.py] [_log()] starting thread (client mode): 0xee940bb0
2026-04-16T01:47:49.366 [DEBUG] [Thread-29453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:47:49.380 [DEBUG] [Thread-29453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:47:49.380 [INFO] [Thread-29453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:47:49.387 [DEBUG] [Thread-29453] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:47:49.388 [DEBUG] [Thread-29453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:47:49.388 [DEBUG] [Thread-29453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:47:49.388 [DEBUG] [Thread-29453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:47:49.388 [DEBUG] [Thread-29453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:47:49.388 [DEBUG] [Thread-29453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:47:49.388 [DEBUG] [Thread-29453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:47:49.388 [DEBUG] [Thread-29453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:47:49.388 [DEBUG] [Thread-29453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:47:49.388 [DEBUG] [Thread-29453] [transport.py] [_log()] client lang: <none>
2026-04-16T01:47:49.388 [DEBUG] [Thread-29453] [transport.py] [_log()] server lang: <none>
2026-04-16T01:47:49.388 [DEBUG] [Thread-29453] [transport.py] [_log()] kex follows: False
2026-04-16T01:47:49.389 [DEBUG] [Thread-29453] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:47:49.389 [DEBUG] [Thread-29453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:47:49.389 [DEBUG] [Thread-29453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:47:49.389 [DEBUG] [Thread-29453] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:47:49.389 [DEBUG] [Thread-29453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:47:49.389 [DEBUG] [Thread-29453] [transport.py] [_log()] Compression: none
2026-04-16T01:47:49.389 [DEBUG] [Thread-29453] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:47:49.446 [DEBUG] [Thread-29453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:47:49.446 [DEBUG] [Thread-29453] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:47:49.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:47:49.447 [DEBUG] [Thread-29453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:47:49.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:47:49.503 [DEBUG] [Thread-29453] [transport.py] [_log()] userauth is OK
2026-04-16T01:47:49.503 [DEBUG] [Thread-29453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:47:49.503 [DEBUG] [Thread-29453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:47:49.503 [DEBUG] [Thread-29453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:47:49.503 [DEBUG] [Thread-29453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:47:49.528 [INFO] [Thread-29453] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:47:49.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:47:49.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:47:50.333 [DEBUG] [Thread-29453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:47:50.334 [DEBUG] [Thread-29453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:47:50.381 [DEBUG] [Thread-29453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:47:50.381 [DEBUG] [Thread-29453] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:47:50.390 [DEBUG] [Thread-29453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:47:50.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:47: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')
2026-04-16T01:47:50.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
2026-04-16T01:47:50.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:47:50.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:47:50.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:47:50.425 [DEBUG] [Thread-29453] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:47:58.203 [DEBUG] [Thread-29455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:48:02.324 [DEBUG] [Thread-29456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:48:17.368 [DEBUG] [Thread-29457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:48:20.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:48:20.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:48:20.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
2026-04-16T01:48:21.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 48, 3), 1.82636, 88.4598, 0.0, 10.7107, 8.96513, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:48:21.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:48:03
2026-04-16T01:48:22.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:48:22.626 [DEBUG] [Thread-29458] [transport.py] [_log()] starting thread (client mode): 0xee905fc0
2026-04-16T01:48:22.626 [DEBUG] [Thread-29458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:48:22.646 [DEBUG] [Thread-29458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:48:22.646 [INFO] [Thread-29458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:48:22.649 [DEBUG] [Thread-29458] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:48:22.650 [DEBUG] [Thread-29458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:48:22.650 [DEBUG] [Thread-29458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:48:22.650 [DEBUG] [Thread-29458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:48:22.650 [DEBUG] [Thread-29458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:48:22.650 [DEBUG] [Thread-29458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:48:22.650 [DEBUG] [Thread-29458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:48:22.650 [DEBUG] [Thread-29458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:48:22.650 [DEBUG] [Thread-29458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:48:22.650 [DEBUG] [Thread-29458] [transport.py] [_log()] client lang: <none>
2026-04-16T01:48:22.650 [DEBUG] [Thread-29458] [transport.py] [_log()] server lang: <none>
2026-04-16T01:48:22.650 [DEBUG] [Thread-29458] [transport.py] [_log()] kex follows: False
2026-04-16T01:48:22.650 [DEBUG] [Thread-29458] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:48:22.651 [DEBUG] [Thread-29458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:48:22.651 [DEBUG] [Thread-29458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:48:22.651 [DEBUG] [Thread-29458] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:48:22.651 [DEBUG] [Thread-29458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:48:22.651 [DEBUG] [Thread-29458] [transport.py] [_log()] Compression: none
2026-04-16T01:48:22.651 [DEBUG] [Thread-29458] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:48:22.668 [DEBUG] [Thread-29458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:48:22.668 [DEBUG] [Thread-29458] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:48:22.669 [DEBUG] [Thread-29458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:48:22.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:48:22.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:48:22.670 [DEBUG] [Thread-29458] [transport.py] [_log()] userauth is OK
2026-04-16T01:48:22.670 [DEBUG] [Thread-29458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:48:22.670 [DEBUG] [Thread-29458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:48:22.670 [DEBUG] [Thread-29458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:48:22.670 [DEBUG] [Thread-29458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:48:22.694 [INFO] [Thread-29458] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:48:22.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:48:23.497 [DEBUG] [Thread-29458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:48:23.497 [DEBUG] [Thread-29458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:48:23.498 [DEBUG] [Thread-29458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:48:23.538 [DEBUG] [Thread-29458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:48:23.538 [DEBUG] [Thread-29458] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:48:23.541 [DEBUG] [Thread-29458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:48:23.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:48:23.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:48:23.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:48:23.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:48:23.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:48:23.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:48:23.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:48:23.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:48:23.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:48:23.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.991451 -999.00   +9.20   5.72     89   +7.50 1 1 1 3 1     0    0 1.57 -9.98 .NESW 6.0 5.7 108.8 11.9 9.5 -25.6 9.4 -24.2 9.1 -22.1 9.3 -24.2
2026-04-16T01:48:23.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:48:23.564 [DEBUG] [Thread-29458] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:48:23.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:48:23.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.991451
2026-04-16T01:48:23.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:48:23.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:48:23.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:48:23.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:48:23.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:48:23.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:48:03', tmtdew=1.82636, humidity=88.4598, cloud=0.0, wind=10.7107, temperature=8.96513, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:47:41.366', atlas_cloud=1, atlas_rain=1, zp_data=[3.540749999999999, 2.388750000000001, nan, nan, nan, nan, nan, nan, 2.386499999999999, 1.1580000000000004, 3.01525, 2.5409999999999995, nan, 2.65825, nan, 0.14599999999999902, 0.4692500000000006, 0.2594999999999992, 0.7479999999999993, 0.8162499999999993, 0.4579999999999984, 0.4447499999999991, 0.13975000000000115, -0.02075000000000138, -0.012000000000000455, 0.059499999999999886, 0.1067499999999999, 0.04550000000000054, 0.062000000000001165, 0.15500000000000114, 0.11300000000000132, -0.0030000000000001137, -0.07525000000000048], zp_timestamp='2026-04-15T23:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:48:23.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:48:23.825 [DEBUG] [Thread-29461] [transport.py] [_log()] starting thread (client mode): 0xee905d80
2026-04-16T01:48:23.825 [DEBUG] [Thread-29461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:48:23.839 [DEBUG] [Thread-29461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:48:23.839 [INFO] [Thread-29461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:48:23.846 [DEBUG] [Thread-29461] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:48:23.846 [DEBUG] [Thread-29461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:48:23.846 [DEBUG] [Thread-29461] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:48:23.846 [DEBUG] [Thread-29461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:48:23.846 [DEBUG] [Thread-29461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:48:23.847 [DEBUG] [Thread-29461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:48:23.847 [DEBUG] [Thread-29461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:48:23.847 [DEBUG] [Thread-29461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:48:23.847 [DEBUG] [Thread-29461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:48:23.847 [DEBUG] [Thread-29461] [transport.py] [_log()] client lang: <none>
2026-04-16T01:48:23.847 [DEBUG] [Thread-29461] [transport.py] [_log()] server lang: <none>
2026-04-16T01:48:23.847 [DEBUG] [Thread-29461] [transport.py] [_log()] kex follows: False
2026-04-16T01:48:23.847 [DEBUG] [Thread-29461] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:48:23.847 [DEBUG] [Thread-29461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:48:23.847 [DEBUG] [Thread-29461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:48:23.847 [DEBUG] [Thread-29461] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:48:23.847 [DEBUG] [Thread-29461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:48:23.847 [DEBUG] [Thread-29461] [transport.py] [_log()] Compression: none
2026-04-16T01:48:23.847 [DEBUG] [Thread-29461] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:48:23.901 [DEBUG] [Thread-29461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:48:23.901 [DEBUG] [Thread-29461] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:48:23.902 [DEBUG] [Thread-29461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:48:23.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:48:23.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:48:23.962 [DEBUG] [Thread-29461] [transport.py] [_log()] userauth is OK
2026-04-16T01:48:23.962 [DEBUG] [Thread-29461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:48:23.963 [DEBUG] [Thread-29461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:48:23.963 [DEBUG] [Thread-29461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:48:23.963 [DEBUG] [Thread-29461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:48:23.980 [INFO] [Thread-29461] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:48:23.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:48:23.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:48:24.835 [DEBUG] [Thread-29461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:48:24.835 [DEBUG] [Thread-29461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:48:24.883 [DEBUG] [Thread-29461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:48:24.883 [DEBUG] [Thread-29461] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:48:24.892 [DEBUG] [Thread-29461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:48:24.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:48:24.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')
2026-04-16T01:48:24.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
2026-04-16T01:48:24.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:48:24.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:48:24.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:48:24.927 [DEBUG] [Thread-29461] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:48:32.397 [DEBUG] [Thread-29463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:48:43.020 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:48:43.021 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:48:47.441 [DEBUG] [Thread-29464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:48:54.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:48:54.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:48:54.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
2026-04-16T01:48:56.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 48, 38), 1.5478, 89.9524, 0.0, 13.6922, 8.66315, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:48:56.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:48:38
2026-04-16T01:48:56.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:48:57.095 [DEBUG] [Thread-29465] [transport.py] [_log()] starting thread (client mode): 0xee9c79a0
2026-04-16T01:48:57.095 [DEBUG] [Thread-29465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:48:57.110 [DEBUG] [Thread-29465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:48:57.110 [INFO] [Thread-29465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:48:57.113 [DEBUG] [Thread-29465] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:48:57.113 [DEBUG] [Thread-29465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:48:57.113 [DEBUG] [Thread-29465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:48:57.113 [DEBUG] [Thread-29465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:48:57.114 [DEBUG] [Thread-29465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:48:57.114 [DEBUG] [Thread-29465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:48:57.114 [DEBUG] [Thread-29465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:48:57.114 [DEBUG] [Thread-29465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:48:57.114 [DEBUG] [Thread-29465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:48:57.114 [DEBUG] [Thread-29465] [transport.py] [_log()] client lang: <none>
2026-04-16T01:48:57.114 [DEBUG] [Thread-29465] [transport.py] [_log()] server lang: <none>
2026-04-16T01:48:57.114 [DEBUG] [Thread-29465] [transport.py] [_log()] kex follows: False
2026-04-16T01:48:57.114 [DEBUG] [Thread-29465] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:48:57.114 [DEBUG] [Thread-29465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:48:57.114 [DEBUG] [Thread-29465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:48:57.114 [DEBUG] [Thread-29465] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:48:57.114 [DEBUG] [Thread-29465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:48:57.114 [DEBUG] [Thread-29465] [transport.py] [_log()] Compression: none
2026-04-16T01:48:57.114 [DEBUG] [Thread-29465] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:48:57.130 [DEBUG] [Thread-29465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:48:57.130 [DEBUG] [Thread-29465] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:48:57.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:48:57.131 [DEBUG] [Thread-29465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:48:57.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:48:57.131 [DEBUG] [Thread-29465] [transport.py] [_log()] userauth is OK
2026-04-16T01:48:57.131 [DEBUG] [Thread-29465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:48:57.131 [DEBUG] [Thread-29465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:48:57.131 [DEBUG] [Thread-29465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:48:57.132 [DEBUG] [Thread-29465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:48:57.145 [INFO] [Thread-29465] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:48:57.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:48:57.930 [DEBUG] [Thread-29465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:48:57.931 [DEBUG] [Thread-29465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:48:57.931 [DEBUG] [Thread-29465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:48:57.972 [DEBUG] [Thread-29465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:48:57.972 [DEBUG] [Thread-29465] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:48:57.975 [DEBUG] [Thread-29465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:48:57.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:48:57.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:48:57.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:48:57.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:48:57.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:48:57.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:48:57.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:48:57.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:48:57.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:48:57.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.991798 -999.00   +9.20   6.15     88   +7.50 1 1 1 3 1     0    0 1.50 -10.44 .NESW 9.1 6.2 95.9 10.0 9.5 -25.4 9.3 -24.3 9.1 -22.2 9.3 -24.2
2026-04-16T01:48:57.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:48:57.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:48:57.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.991798
2026-04-16T01:48:58.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:48:58.000 [DEBUG] [Thread-29465] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:48:58.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:48:58.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:48:58.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:48:58.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:48:58.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:48:38', tmtdew=1.5478, humidity=89.9524, cloud=0.0, wind=13.6922, temperature=8.66315, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:48:11.347', atlas_cloud=1, atlas_rain=1, zp_data=[3.540749999999999, 2.388750000000001, nan, nan, nan, nan, nan, nan, 2.386499999999999, 1.1580000000000004, 3.01525, 2.5409999999999995, nan, 2.65825, nan, 0.14599999999999902, 0.4692500000000006, 0.2594999999999992, 0.7479999999999993, 0.8162499999999993, 0.4579999999999984, 0.4447499999999991, 0.13975000000000115, -0.02075000000000138, -0.012000000000000455, 0.059499999999999886, 0.1067499999999999, 0.04550000000000054, 0.062000000000001165, 0.15500000000000114, 0.11300000000000132, -0.0030000000000001137, -0.07525000000000048], zp_timestamp='2026-04-15T23:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:48:58.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:48:58.258 [DEBUG] [Thread-29468] [transport.py] [_log()] starting thread (client mode): 0xee9c6890
2026-04-16T01:48:58.258 [DEBUG] [Thread-29468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:48:58.272 [DEBUG] [Thread-29468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:48:58.273 [INFO] [Thread-29468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:48:58.280 [DEBUG] [Thread-29468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:48:58.280 [DEBUG] [Thread-29468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:48:58.280 [DEBUG] [Thread-29468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:48:58.280 [DEBUG] [Thread-29468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:48:58.280 [DEBUG] [Thread-29468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:48:58.280 [DEBUG] [Thread-29468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:48:58.280 [DEBUG] [Thread-29468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:48:58.280 [DEBUG] [Thread-29468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:48:58.280 [DEBUG] [Thread-29468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:48:58.280 [DEBUG] [Thread-29468] [transport.py] [_log()] client lang: <none>
2026-04-16T01:48:58.280 [DEBUG] [Thread-29468] [transport.py] [_log()] server lang: <none>
2026-04-16T01:48:58.280 [DEBUG] [Thread-29468] [transport.py] [_log()] kex follows: False
2026-04-16T01:48:58.281 [DEBUG] [Thread-29468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:48:58.281 [DEBUG] [Thread-29468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:48:58.281 [DEBUG] [Thread-29468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:48:58.281 [DEBUG] [Thread-29468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:48:58.281 [DEBUG] [Thread-29468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:48:58.281 [DEBUG] [Thread-29468] [transport.py] [_log()] Compression: none
2026-04-16T01:48:58.281 [DEBUG] [Thread-29468] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:48:58.337 [DEBUG] [Thread-29468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:48:58.337 [DEBUG] [Thread-29468] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:48:58.338 [DEBUG] [Thread-29468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:48:58.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:48:58.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:48:58.350 [DEBUG] [Thread-29470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:48:58.395 [DEBUG] [Thread-29468] [transport.py] [_log()] userauth is OK
2026-04-16T01:48:58.395 [DEBUG] [Thread-29468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:48:58.395 [DEBUG] [Thread-29468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:48:58.395 [DEBUG] [Thread-29468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:48:58.395 [DEBUG] [Thread-29468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:48:58.417 [INFO] [Thread-29468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:48:58.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:48:58.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:48:59.232 [DEBUG] [Thread-29468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:48:59.233 [DEBUG] [Thread-29468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:48:59.280 [DEBUG] [Thread-29468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:48:59.280 [DEBUG] [Thread-29468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:48:59.289 [DEBUG] [Thread-29468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:48:59.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:48: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')
2026-04-16T01:48: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
2026-04-16T01:48:59.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:48:59.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:48:59.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:48:59.323 [DEBUG] [Thread-29468] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:49:02.472 [DEBUG] [Thread-29471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:49:17.514 [DEBUG] [Thread-29472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:49:29.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:49:29.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:49:29.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
2026-04-16T01:49:30.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 49, 14), 1.82371, 88.4762, 0.0, 10.5167, 8.96498, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:49:30.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:49:14
2026-04-16T01:49:30.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:49:31.394 [DEBUG] [Thread-29473] [transport.py] [_log()] starting thread (client mode): 0xee907850
2026-04-16T01:49:31.394 [DEBUG] [Thread-29473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:49:31.414 [DEBUG] [Thread-29473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:49:31.414 [INFO] [Thread-29473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:49:31.417 [DEBUG] [Thread-29473] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:49:31.418 [DEBUG] [Thread-29473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:49:31.418 [DEBUG] [Thread-29473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:49:31.418 [DEBUG] [Thread-29473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:49:31.418 [DEBUG] [Thread-29473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:49:31.418 [DEBUG] [Thread-29473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:49:31.418 [DEBUG] [Thread-29473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:49:31.418 [DEBUG] [Thread-29473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:49:31.418 [DEBUG] [Thread-29473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:49:31.418 [DEBUG] [Thread-29473] [transport.py] [_log()] client lang: <none>
2026-04-16T01:49:31.418 [DEBUG] [Thread-29473] [transport.py] [_log()] server lang: <none>
2026-04-16T01:49:31.418 [DEBUG] [Thread-29473] [transport.py] [_log()] kex follows: False
2026-04-16T01:49:31.419 [DEBUG] [Thread-29473] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:49:31.419 [DEBUG] [Thread-29473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:49:31.419 [DEBUG] [Thread-29473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:49:31.419 [DEBUG] [Thread-29473] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:49:31.419 [DEBUG] [Thread-29473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:49:31.419 [DEBUG] [Thread-29473] [transport.py] [_log()] Compression: none
2026-04-16T01:49:31.419 [DEBUG] [Thread-29473] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:49:31.436 [DEBUG] [Thread-29473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:49:31.436 [DEBUG] [Thread-29473] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:49:31.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:49:31.437 [DEBUG] [Thread-29473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:49:31.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:49:31.438 [DEBUG] [Thread-29473] [transport.py] [_log()] userauth is OK
2026-04-16T01:49:31.438 [DEBUG] [Thread-29473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:49:31.438 [DEBUG] [Thread-29473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:49:31.438 [DEBUG] [Thread-29473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:49:31.438 [DEBUG] [Thread-29473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:49:31.455 [INFO] [Thread-29473] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:49:31.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:49:32.289 [DEBUG] [Thread-29473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:49:32.289 [DEBUG] [Thread-29473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:49:32.290 [DEBUG] [Thread-29473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:49:32.330 [DEBUG] [Thread-29473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:49:32.330 [DEBUG] [Thread-29473] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:49:32.333 [DEBUG] [Thread-29473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:49:32.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:49:32.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:49:32.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:49:32.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:49:32.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:49:32.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:49:32.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:49:32.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:49:32.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:49:32.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.992145 -999.00   +9.20   5.98     88   +7.40 1 1 1 3 1     0    0 1.52 -10.03 .NESW 7.9 6.0 96.3 11.1 9.4 -25.4 9.3 -24.2 9.0 -22.0 9.3 -24.3
2026-04-16T01:49:32.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:49:32.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:49:32.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.992145
2026-04-16T01:49:32.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:49:32.357 [DEBUG] [Thread-29473] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:49:32.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:49:32.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:49:32.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:49:32.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:49:32.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:49:14', tmtdew=1.82371, humidity=88.4762, cloud=0.0, wind=10.5167, temperature=8.96498, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:48:41.328', atlas_cloud=1, atlas_rain=1, zp_data=[3.540749999999999, 2.388750000000001, nan, nan, nan, nan, nan, nan, 2.386499999999999, 1.1580000000000004, 3.01525, 2.5409999999999995, nan, 2.65825, nan, 0.14599999999999902, 0.4692500000000006, 0.2594999999999992, 0.7479999999999993, 0.8162499999999993, 0.4579999999999984, 0.4447499999999991, 0.13975000000000115, -0.02075000000000138, -0.012000000000000455, 0.059499999999999886, 0.1067499999999999, 0.04550000000000054, 0.062000000000001165, 0.15500000000000114, 0.11300000000000132, -0.0030000000000001137, -0.07525000000000048], zp_timestamp='2026-04-15T23:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:49:32.547 [DEBUG] [Thread-29476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:49:32.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:49:32.610 [DEBUG] [Thread-29477] [transport.py] [_log()] starting thread (client mode): 0xee942fb0
2026-04-16T01:49:32.611 [DEBUG] [Thread-29477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:49:32.625 [DEBUG] [Thread-29477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:49:32.625 [INFO] [Thread-29477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:49:32.632 [DEBUG] [Thread-29477] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:49:32.633 [DEBUG] [Thread-29477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:49:32.633 [DEBUG] [Thread-29477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:49:32.633 [DEBUG] [Thread-29477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:49:32.633 [DEBUG] [Thread-29477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:49:32.633 [DEBUG] [Thread-29477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:49:32.633 [DEBUG] [Thread-29477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:49:32.633 [DEBUG] [Thread-29477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:49:32.633 [DEBUG] [Thread-29477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:49:32.633 [DEBUG] [Thread-29477] [transport.py] [_log()] client lang: <none>
2026-04-16T01:49:32.633 [DEBUG] [Thread-29477] [transport.py] [_log()] server lang: <none>
2026-04-16T01:49:32.633 [DEBUG] [Thread-29477] [transport.py] [_log()] kex follows: False
2026-04-16T01:49:32.634 [DEBUG] [Thread-29477] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:49:32.634 [DEBUG] [Thread-29477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:49:32.634 [DEBUG] [Thread-29477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:49:32.634 [DEBUG] [Thread-29477] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:49:32.634 [DEBUG] [Thread-29477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:49:32.634 [DEBUG] [Thread-29477] [transport.py] [_log()] Compression: none
2026-04-16T01:49:32.634 [DEBUG] [Thread-29477] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:49:32.690 [DEBUG] [Thread-29477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:49:32.691 [DEBUG] [Thread-29477] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:49:32.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:49:32.691 [DEBUG] [Thread-29477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:49:32.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:49:32.747 [DEBUG] [Thread-29477] [transport.py] [_log()] userauth is OK
2026-04-16T01:49:32.747 [DEBUG] [Thread-29477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:49:32.747 [DEBUG] [Thread-29477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:49:32.747 [DEBUG] [Thread-29477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:49:32.747 [DEBUG] [Thread-29477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:49:32.772 [INFO] [Thread-29477] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:49:32.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:49:32.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:49:33.577 [DEBUG] [Thread-29477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:49:33.577 [DEBUG] [Thread-29477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:49:33.626 [DEBUG] [Thread-29477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:49:33.626 [DEBUG] [Thread-29477] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:49:33.635 [DEBUG] [Thread-29477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:49:33.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:49:33.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')
2026-04-16T01:49:33.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
2026-04-16T01:49:33.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:49:33.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:49:33.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:49:33.672 [DEBUG] [Thread-29477] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:49:43.223 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:49:43.224 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:49:47.587 [DEBUG] [Thread-29479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:49:58.511 [DEBUG] [Thread-29480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:50:02.618 [DEBUG] [Thread-29481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:50:03.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:50:03.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:50: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
2026-04-16T01:50:04.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 49, 49), 1.53171, 90.0516, 0.0, 13.9392, 8.66293, 1, 2, 0, 2, 0, 0),)
2026-04-16T01:50:04.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:49:49
2026-04-16T01:50:05.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:50:05.781 [DEBUG] [Thread-29482] [transport.py] [_log()] starting thread (client mode): 0xf1336200
2026-04-16T01:50:05.781 [DEBUG] [Thread-29482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:50:05.804 [DEBUG] [Thread-29482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:50:05.804 [INFO] [Thread-29482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:50:05.806 [DEBUG] [Thread-29482] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:50:05.806 [DEBUG] [Thread-29482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:50:05.806 [DEBUG] [Thread-29482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:50:05.806 [DEBUG] [Thread-29482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:50:05.806 [DEBUG] [Thread-29482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:50:05.807 [DEBUG] [Thread-29482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:50:05.807 [DEBUG] [Thread-29482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:50:05.807 [DEBUG] [Thread-29482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:50:05.807 [DEBUG] [Thread-29482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:50:05.807 [DEBUG] [Thread-29482] [transport.py] [_log()] client lang: <none>
2026-04-16T01:50:05.807 [DEBUG] [Thread-29482] [transport.py] [_log()] server lang: <none>
2026-04-16T01:50:05.807 [DEBUG] [Thread-29482] [transport.py] [_log()] kex follows: False
2026-04-16T01:50:05.807 [DEBUG] [Thread-29482] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:50:05.807 [DEBUG] [Thread-29482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:50:05.807 [DEBUG] [Thread-29482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:50:05.807 [DEBUG] [Thread-29482] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:50:05.807 [DEBUG] [Thread-29482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:50:05.808 [DEBUG] [Thread-29482] [transport.py] [_log()] Compression: none
2026-04-16T01:50:05.808 [DEBUG] [Thread-29482] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:50:05.816 [DEBUG] [Thread-29482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:50:05.816 [DEBUG] [Thread-29482] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:50:05.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:50:05.817 [DEBUG] [Thread-29482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:50:05.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:50:05.818 [DEBUG] [Thread-29482] [transport.py] [_log()] userauth is OK
2026-04-16T01:50:05.818 [DEBUG] [Thread-29482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:50:05.818 [DEBUG] [Thread-29482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:50:05.818 [DEBUG] [Thread-29482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:50:05.819 [DEBUG] [Thread-29482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:50:05.842 [INFO] [Thread-29482] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:50:05.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:50:14.917 [DEBUG] [Thread-29482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:50:14.917 [DEBUG] [Thread-29482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:50:14.917 [DEBUG] [Thread-29482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:50:14.958 [DEBUG] [Thread-29482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:50:14.958 [DEBUG] [Thread-29482] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:50:14.960 [DEBUG] [Thread-29482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:50:15.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:50:15.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:50:15.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:50:15.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:50:15.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:50:15.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:50:15.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:50:15.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:50:15.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:50:15.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.992492 -999.00   +9.20   9.58     88   +7.40 1 1 1 3 1     0    0 1.49 -9.80 .NESW 6.9 9.6 71.4 10.3 9.4 -25.5 9.3 -24.4 9.1 -22.1 9.3 -24.3
2026-04-16T01:50:15.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:50:15.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:50:15.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.992492
2026-04-16T01:50:15.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:50:15.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:50:15.120 [DEBUG] [Thread-29482] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:50:15.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:50:15.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:50:15.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:50:15.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:49:49', tmtdew=1.53171, humidity=90.0516, cloud=0.0, wind=13.9392, temperature=8.66293, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:49:11.309', atlas_cloud=1, atlas_rain=1, zp_data=[3.540749999999999, 2.388750000000001, nan, nan, nan, nan, nan, nan, 2.386499999999999, 1.1580000000000004, 3.01525, 2.5409999999999995, nan, 2.65825, nan, 0.14599999999999902, 0.4692500000000006, 0.2594999999999992, 0.7479999999999993, 0.8162499999999993, 0.4579999999999984, 0.4447499999999991, 0.13975000000000115, -0.02075000000000138, -0.012000000000000455, 0.059499999999999886, 0.1067499999999999, 0.04550000000000054, 0.062000000000001165, 0.15500000000000114, 0.11300000000000132, -0.0030000000000001137, -0.07525000000000048], zp_timestamp='2026-04-15T23:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:50:15.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:50:15.374 [DEBUG] [Thread-29485] [transport.py] [_log()] starting thread (client mode): 0xf1336710
2026-04-16T01:50:15.374 [DEBUG] [Thread-29485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:50:15.389 [DEBUG] [Thread-29485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:50:15.389 [INFO] [Thread-29485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:50:15.396 [DEBUG] [Thread-29485] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:50:15.397 [DEBUG] [Thread-29485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:50:15.397 [DEBUG] [Thread-29485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:50:15.397 [DEBUG] [Thread-29485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:50:15.397 [DEBUG] [Thread-29485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:50:15.397 [DEBUG] [Thread-29485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:50:15.397 [DEBUG] [Thread-29485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:50:15.397 [DEBUG] [Thread-29485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:50:15.397 [DEBUG] [Thread-29485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:50:15.397 [DEBUG] [Thread-29485] [transport.py] [_log()] client lang: <none>
2026-04-16T01:50:15.397 [DEBUG] [Thread-29485] [transport.py] [_log()] server lang: <none>
2026-04-16T01:50:15.397 [DEBUG] [Thread-29485] [transport.py] [_log()] kex follows: False
2026-04-16T01:50:15.398 [DEBUG] [Thread-29485] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:50:15.398 [DEBUG] [Thread-29485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:50:15.398 [DEBUG] [Thread-29485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:50:15.398 [DEBUG] [Thread-29485] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:50:15.398 [DEBUG] [Thread-29485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:50:15.398 [DEBUG] [Thread-29485] [transport.py] [_log()] Compression: none
2026-04-16T01:50:15.398 [DEBUG] [Thread-29485] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:50:15.455 [DEBUG] [Thread-29485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:50:15.456 [DEBUG] [Thread-29485] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:50:15.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:50:15.457 [DEBUG] [Thread-29485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:50:15.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:50:15.515 [DEBUG] [Thread-29485] [transport.py] [_log()] userauth is OK
2026-04-16T01:50:15.515 [DEBUG] [Thread-29485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:50:15.515 [DEBUG] [Thread-29485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:50:15.515 [DEBUG] [Thread-29485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:50:15.516 [DEBUG] [Thread-29485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:50:15.540 [INFO] [Thread-29485] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:50:15.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:50:15.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:50:16.349 [DEBUG] [Thread-29485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:50:16.350 [DEBUG] [Thread-29485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:50:16.397 [DEBUG] [Thread-29485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:50:16.397 [DEBUG] [Thread-29485] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:50:16.406 [DEBUG] [Thread-29485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:50:16.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:50:16.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')
2026-04-16T01:50:16.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
2026-04-16T01:50:16.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:50:16.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:50:16.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:50:16.437 [DEBUG] [Thread-29485] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:50:17.650 [DEBUG] [Thread-29487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:50:32.696 [DEBUG] [Thread-29488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:50:43.430 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:50:43.431 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:50:46.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:50:46.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:50:46.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
2026-04-16T01:50:47.726 [DEBUG] [Thread-29489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:50:47.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 50, 25), 1.82336, 88.476, 0.0, 10.4461, 8.93169, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:50:47.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:50:25
2026-04-16T01:50:48.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:50:48.623 [DEBUG] [Thread-29490] [transport.py] [_log()] starting thread (client mode): 0xf1334820
2026-04-16T01:50:48.624 [DEBUG] [Thread-29490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:50:48.643 [DEBUG] [Thread-29490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:50:48.643 [INFO] [Thread-29490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:50:48.645 [DEBUG] [Thread-29490] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:50:48.645 [DEBUG] [Thread-29490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:50:48.645 [DEBUG] [Thread-29490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:50:48.645 [DEBUG] [Thread-29490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:50:48.645 [DEBUG] [Thread-29490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:50:48.645 [DEBUG] [Thread-29490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:50:48.645 [DEBUG] [Thread-29490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:50:48.645 [DEBUG] [Thread-29490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:50:48.645 [DEBUG] [Thread-29490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:50:48.645 [DEBUG] [Thread-29490] [transport.py] [_log()] client lang: <none>
2026-04-16T01:50:48.645 [DEBUG] [Thread-29490] [transport.py] [_log()] server lang: <none>
2026-04-16T01:50:48.646 [DEBUG] [Thread-29490] [transport.py] [_log()] kex follows: False
2026-04-16T01:50:48.646 [DEBUG] [Thread-29490] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:50:48.646 [DEBUG] [Thread-29490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:50:48.646 [DEBUG] [Thread-29490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:50:48.646 [DEBUG] [Thread-29490] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:50:48.646 [DEBUG] [Thread-29490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:50:48.646 [DEBUG] [Thread-29490] [transport.py] [_log()] Compression: none
2026-04-16T01:50:48.646 [DEBUG] [Thread-29490] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:50:48.655 [DEBUG] [Thread-29490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:50:48.656 [DEBUG] [Thread-29490] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:50:48.656 [DEBUG] [Thread-29490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:50:48.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:50:48.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:50:48.700 [DEBUG] [Thread-29490] [transport.py] [_log()] userauth is OK
2026-04-16T01:50:48.700 [DEBUG] [Thread-29490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:50:48.701 [DEBUG] [Thread-29490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:50:48.701 [DEBUG] [Thread-29490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:50:48.701 [DEBUG] [Thread-29490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:50:48.736 [INFO] [Thread-29490] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:50:48.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:50:49.478 [DEBUG] [Thread-29490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:50:49.479 [DEBUG] [Thread-29490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:50:49.479 [DEBUG] [Thread-29490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:50:49.519 [DEBUG] [Thread-29490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:50:49.519 [DEBUG] [Thread-29490] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:50:49.522 [DEBUG] [Thread-29490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:50:49.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:50:49.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:50:49.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:50:49.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:50:49.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:50:49.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:50:49.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:50:49.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:50:49.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:50:49.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.992839 -999.00   +9.20   7.09     88   +7.40 1 1 1 3 1     0    0 1.55 -8.72 .NESW 5.4 7.1 91.2 10.4 9.5 -25.7 9.3 -24.2 9.1 -22.1 9.3 -24.2
2026-04-16T01:50:49.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:50:49.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:50:49.547 [DEBUG] [Thread-29490] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:50:49.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.992839
2026-04-16T01:50:49.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:50:49.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:50:49.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:50:49.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:50:49.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:50:49.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:50:25', tmtdew=1.82336, humidity=88.476, cloud=0.0, wind=10.4461, temperature=8.93169, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:49:41.290', atlas_cloud=1, atlas_rain=1, zp_data=[3.540749999999999, 2.388750000000001, nan, nan, nan, nan, nan, nan, 2.386499999999999, 1.1580000000000004, 3.01525, 2.5409999999999995, nan, 2.65825, nan, 0.14599999999999902, 0.4692500000000006, 0.2594999999999992, 0.7479999999999993, 0.8162499999999993, 0.4579999999999984, 0.4447499999999991, 0.13975000000000115, -0.02075000000000138, -0.012000000000000455, 0.059499999999999886, 0.1067499999999999, 0.04550000000000054, 0.062000000000001165, 0.15500000000000114, 0.11300000000000132, -0.0030000000000001137, -0.07525000000000048], zp_timestamp='2026-04-15T23:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:50:49.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:50:49.813 [DEBUG] [Thread-29493] [transport.py] [_log()] starting thread (client mode): 0xf13501c0
2026-04-16T01:50:49.814 [DEBUG] [Thread-29493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:50:49.828 [DEBUG] [Thread-29493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:50:49.828 [INFO] [Thread-29493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:50:49.835 [DEBUG] [Thread-29493] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:50:49.835 [DEBUG] [Thread-29493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:50:49.835 [DEBUG] [Thread-29493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:50:49.835 [DEBUG] [Thread-29493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:50:49.835 [DEBUG] [Thread-29493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:50:49.835 [DEBUG] [Thread-29493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:50:49.836 [DEBUG] [Thread-29493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:50:49.836 [DEBUG] [Thread-29493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:50:49.836 [DEBUG] [Thread-29493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:50:49.836 [DEBUG] [Thread-29493] [transport.py] [_log()] client lang: <none>
2026-04-16T01:50:49.836 [DEBUG] [Thread-29493] [transport.py] [_log()] server lang: <none>
2026-04-16T01:50:49.836 [DEBUG] [Thread-29493] [transport.py] [_log()] kex follows: False
2026-04-16T01:50:49.836 [DEBUG] [Thread-29493] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:50:49.836 [DEBUG] [Thread-29493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:50:49.836 [DEBUG] [Thread-29493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:50:49.836 [DEBUG] [Thread-29493] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:50:49.836 [DEBUG] [Thread-29493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:50:49.836 [DEBUG] [Thread-29493] [transport.py] [_log()] Compression: none
2026-04-16T01:50:49.837 [DEBUG] [Thread-29493] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:50:49.894 [DEBUG] [Thread-29493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:50:49.894 [DEBUG] [Thread-29493] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:50:49.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:50:49.895 [DEBUG] [Thread-29493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:50:49.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:50:49.954 [DEBUG] [Thread-29493] [transport.py] [_log()] userauth is OK
2026-04-16T01:50:49.955 [DEBUG] [Thread-29493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:50:49.955 [DEBUG] [Thread-29493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:50:49.955 [DEBUG] [Thread-29493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:50:49.955 [DEBUG] [Thread-29493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:50:49.980 [INFO] [Thread-29493] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:50:49.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:50:49.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:50:50.791 [DEBUG] [Thread-29493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:50:50.792 [DEBUG] [Thread-29493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:50:50.840 [DEBUG] [Thread-29493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:50:50.840 [DEBUG] [Thread-29493] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:50:50.849 [DEBUG] [Thread-29493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:50:50.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:50:50.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')
2026-04-16T01:50:50.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
2026-04-16T01:50:50.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:50:50.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:50:50.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:50:50.883 [DEBUG] [Thread-29493] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:50:58.659 [DEBUG] [Thread-29495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:51:02.756 [DEBUG] [Thread-29496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:51:17.799 [DEBUG] [Thread-29497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:51:20.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:51:20.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:51:20.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T01:51:22.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 51), 1.81569, 88.5256, 0.0, 10.3403, 8.96478, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:51:22.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:51:00
2026-04-16T01:51:22.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:51:23.078 [DEBUG] [Thread-29498] [transport.py] [_log()] starting thread (client mode): 0xf1337160
2026-04-16T01:51:23.078 [DEBUG] [Thread-29498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:51:23.099 [DEBUG] [Thread-29498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:51:23.099 [INFO] [Thread-29498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:51:23.102 [DEBUG] [Thread-29498] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:51:23.102 [DEBUG] [Thread-29498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:51:23.102 [DEBUG] [Thread-29498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:51:23.102 [DEBUG] [Thread-29498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:51:23.103 [DEBUG] [Thread-29498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:51:23.103 [DEBUG] [Thread-29498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:51:23.103 [DEBUG] [Thread-29498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:51:23.103 [DEBUG] [Thread-29498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:51:23.103 [DEBUG] [Thread-29498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:51:23.103 [DEBUG] [Thread-29498] [transport.py] [_log()] client lang: <none>
2026-04-16T01:51:23.103 [DEBUG] [Thread-29498] [transport.py] [_log()] server lang: <none>
2026-04-16T01:51:23.103 [DEBUG] [Thread-29498] [transport.py] [_log()] kex follows: False
2026-04-16T01:51:23.103 [DEBUG] [Thread-29498] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:51:23.103 [DEBUG] [Thread-29498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:51:23.103 [DEBUG] [Thread-29498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:51:23.103 [DEBUG] [Thread-29498] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:51:23.104 [DEBUG] [Thread-29498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:51:23.104 [DEBUG] [Thread-29498] [transport.py] [_log()] Compression: none
2026-04-16T01:51:23.104 [DEBUG] [Thread-29498] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:51:23.120 [DEBUG] [Thread-29498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:51:23.121 [DEBUG] [Thread-29498] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:51:23.121 [DEBUG] [Thread-29498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:51:23.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:51:23.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:51:23.122 [DEBUG] [Thread-29498] [transport.py] [_log()] userauth is OK
2026-04-16T01:51:23.122 [DEBUG] [Thread-29498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:51:23.122 [DEBUG] [Thread-29498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:51:23.123 [DEBUG] [Thread-29498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:51:23.123 [DEBUG] [Thread-29498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:51:23.140 [INFO] [Thread-29498] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:51:23.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:51:23.912 [DEBUG] [Thread-29498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:51:23.912 [DEBUG] [Thread-29498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:51:23.913 [DEBUG] [Thread-29498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:51:23.953 [DEBUG] [Thread-29498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:51:23.953 [DEBUG] [Thread-29498] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:51:23.956 [DEBUG] [Thread-29498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:51:23.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:51:23.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:51:23.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:51:23.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:51:23.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:51:23.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:51:23.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:51:23.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:51:23.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:51:23.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.993534 -999.00   +9.20   5.57     88   +7.40 1 1 1 3 1     0    0 1.55 -9.08 .NESW 5.7 5.6 121.9 11.5 9.5 -25.6 9.3 -24.3 9.1 -22.0 9.3 -24.3
2026-04-16T01:51:23.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:51:23.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:51:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.993534
2026-04-16T01:51:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:51:23.979 [DEBUG] [Thread-29498] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:51:23.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:51:23.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:51:23.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:51:23.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:51:23.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:51:00', tmtdew=1.81569, humidity=88.5256, cloud=0.0, wind=10.3403, temperature=8.96478, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:50:41.338', atlas_cloud=1, atlas_rain=1, zp_data=[3.540749999999999, 2.388750000000001, nan, nan, nan, nan, nan, nan, 2.386499999999999, 1.1580000000000004, 3.01525, 2.5409999999999995, nan, 2.65825, nan, 0.14599999999999902, 0.4692500000000006, 0.2594999999999992, 0.7479999999999993, 0.8162499999999993, 0.4579999999999984, 0.4447499999999991, 0.13975000000000115, -0.02075000000000138, -0.012000000000000455, 0.059499999999999886, 0.1067499999999999, 0.04550000000000054, 0.062000000000001165, 0.15500000000000114, 0.11300000000000132, -0.0030000000000001137, -0.07525000000000048], zp_timestamp='2026-04-15T23:47:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:51:24.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:51:32.829 [DEBUG] [Thread-29501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:51:43.636 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:51:43.637 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:51:47.866 [DEBUG] [Thread-29502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:51:58.819 [DEBUG] [Thread-29503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:52:02.897 [DEBUG] [Thread-29504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:52:17.928 [DEBUG] [Thread-29505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:52:32.960 [DEBUG] [Thread-29506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:52:43.838 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:52:43.839 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:52:47.990 [DEBUG] [Thread-29507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:52:58.971 [DEBUG] [Thread-29508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:53:03.022 [DEBUG] [Thread-29509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:53:18.052 [DEBUG] [Thread-29510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:53:33.082 [DEBUG] [Thread-29511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:53:38.442 [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
2026-04-16T01:53:44.043 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:53:44.044 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:53:48.114 [DEBUG] [Thread-29512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:53:59.119 [DEBUG] [Thread-29513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:54:03.145 [DEBUG] [Thread-29514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:54:08.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:54:08.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:54:08.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
2026-04-16T01:54:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 53, 58), 1.7603, 88.5589, 0.0, 10.2168, 8.91484, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:54:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:53:58
2026-04-16T01:54:10.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:54:10.576 [DEBUG] [Thread-29515] [transport.py] [_log()] starting thread (client mode): 0xf13ca560
2026-04-16T01:54:10.576 [DEBUG] [Thread-29515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:54:10.595 [DEBUG] [Thread-29515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:54:10.595 [INFO] [Thread-29515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:54:10.598 [DEBUG] [Thread-29515] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:54:10.598 [DEBUG] [Thread-29515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:54:10.599 [DEBUG] [Thread-29515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:54:10.599 [DEBUG] [Thread-29515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:54:10.599 [DEBUG] [Thread-29515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:54:10.599 [DEBUG] [Thread-29515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:54:10.599 [DEBUG] [Thread-29515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:54:10.599 [DEBUG] [Thread-29515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:54:10.599 [DEBUG] [Thread-29515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:54:10.599 [DEBUG] [Thread-29515] [transport.py] [_log()] client lang: <none>
2026-04-16T01:54:10.599 [DEBUG] [Thread-29515] [transport.py] [_log()] server lang: <none>
2026-04-16T01:54:10.599 [DEBUG] [Thread-29515] [transport.py] [_log()] kex follows: False
2026-04-16T01:54:10.599 [DEBUG] [Thread-29515] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:54:10.599 [DEBUG] [Thread-29515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:54:10.600 [DEBUG] [Thread-29515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:54:10.600 [DEBUG] [Thread-29515] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:54:10.600 [DEBUG] [Thread-29515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:54:10.600 [DEBUG] [Thread-29515] [transport.py] [_log()] Compression: none
2026-04-16T01:54:10.600 [DEBUG] [Thread-29515] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:54:10.617 [DEBUG] [Thread-29515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:54:10.618 [DEBUG] [Thread-29515] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:54:10.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:54:10.618 [DEBUG] [Thread-29515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:54:10.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:54:10.619 [DEBUG] [Thread-29515] [transport.py] [_log()] userauth is OK
2026-04-16T01:54:10.619 [DEBUG] [Thread-29515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:54:10.620 [DEBUG] [Thread-29515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:54:10.620 [DEBUG] [Thread-29515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:54:10.620 [DEBUG] [Thread-29515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:54:10.644 [INFO] [Thread-29515] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:54:10.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:54:11.424 [DEBUG] [Thread-29515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:54:11.425 [DEBUG] [Thread-29515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:54:11.425 [DEBUG] [Thread-29515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:54:11.465 [DEBUG] [Thread-29515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:54:11.465 [DEBUG] [Thread-29515] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:54:11.468 [DEBUG] [Thread-29515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:54:11.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:54:11.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:54:11.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:54:11.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:54:11.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:54:11.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:54:11.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:54:11.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:54:11.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:54:11.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.995617 -999.00   +9.10   7.22     88   +7.40 1 1 1 3 1     0    0 1.53 -8.75 .NESW 7.0 7.2 78.4 9.2 9.4 -25.6 9.3 -24.4 9.0 -22.3 9.3 -24.3
2026-04-16T01:54:11.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:54:11.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:54:11.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.995617
2026-04-16T01:54:11.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:54:11.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:54:11.493 [DEBUG] [Thread-29515] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:54:11.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:54:11.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:54:11.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:54:11.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:53:58', tmtdew=1.7603, humidity=88.5589, cloud=0.0, wind=10.2168, temperature=8.91484, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:53:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[3.26225, nan, nan, nan, nan, nan, nan, nan, nan, 1.5600000000000005, 3.2802499999999997, 2.5679999999999996, nan, nan, nan, 0.20599999999999952, 0.37625000000000064, 0.2705000000000002, 0.8909999999999991, 1.0392499999999991, 1.038499999999999, 1.0067499999999985, 0.17125000000000057, 0.016750000000000043, 0.03550000000000075, 0.08750000000000036, 0.1282500000000013, 0.10650000000000048, 0.10000000000000142, 0.16400000000000148, 0.13400000000000034, 0.01699999999999946, -0.08275000000000077], zp_timestamp='2026-04-15T23:50:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:54:11.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:54:11.748 [DEBUG] [Thread-29518] [transport.py] [_log()] starting thread (client mode): 0xf1334520
2026-04-16T01:54:11.748 [DEBUG] [Thread-29518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:54:11.763 [DEBUG] [Thread-29518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:54:11.763 [INFO] [Thread-29518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:54:11.770 [DEBUG] [Thread-29518] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:54:11.770 [DEBUG] [Thread-29518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:54:11.770 [DEBUG] [Thread-29518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:54:11.771 [DEBUG] [Thread-29518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:54:11.771 [DEBUG] [Thread-29518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:54:11.771 [DEBUG] [Thread-29518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:54:11.771 [DEBUG] [Thread-29518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:54:11.771 [DEBUG] [Thread-29518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:54:11.771 [DEBUG] [Thread-29518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:54:11.771 [DEBUG] [Thread-29518] [transport.py] [_log()] client lang: <none>
2026-04-16T01:54:11.771 [DEBUG] [Thread-29518] [transport.py] [_log()] server lang: <none>
2026-04-16T01:54:11.771 [DEBUG] [Thread-29518] [transport.py] [_log()] kex follows: False
2026-04-16T01:54:11.771 [DEBUG] [Thread-29518] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:54:11.771 [DEBUG] [Thread-29518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:54:11.771 [DEBUG] [Thread-29518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:54:11.772 [DEBUG] [Thread-29518] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:54:11.772 [DEBUG] [Thread-29518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:54:11.772 [DEBUG] [Thread-29518] [transport.py] [_log()] Compression: none
2026-04-16T01:54:11.772 [DEBUG] [Thread-29518] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:54:11.830 [DEBUG] [Thread-29518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:54:11.830 [DEBUG] [Thread-29518] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:54:11.831 [DEBUG] [Thread-29518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:54:11.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:54:11.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:54:11.886 [DEBUG] [Thread-29518] [transport.py] [_log()] userauth is OK
2026-04-16T01:54:11.887 [DEBUG] [Thread-29518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:54:11.887 [DEBUG] [Thread-29518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:54:11.887 [DEBUG] [Thread-29518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:54:11.887 [DEBUG] [Thread-29518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:54:11.910 [INFO] [Thread-29518] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:54:11.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:54:11.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:54:12.723 [DEBUG] [Thread-29518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:54:12.723 [DEBUG] [Thread-29518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:54:12.771 [DEBUG] [Thread-29518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:54:12.771 [DEBUG] [Thread-29518] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:54:12.780 [DEBUG] [Thread-29518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:54:12.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:54:12.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')
2026-04-16T01:54: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') -> 00000000
2026-04-16T01:54:12.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:54:12.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:54:12.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:54:12.815 [DEBUG] [Thread-29518] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:54:18.177 [DEBUG] [Thread-29520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:54:33.299 [DEBUG] [Thread-29521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:54:42.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:54:42.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:54:42.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
2026-04-16T01:54:44.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 54, 34), 1.49951, 90.2503, 0.0, 12.7397, 8.66269, 2, 2, 0, 2, 0, 0),)
2026-04-16T01:54:44.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:54:34
2026-04-16T01:54:44.250 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:54:44.251 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:54:44.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:54:45.039 [DEBUG] [Thread-29522] [transport.py] [_log()] starting thread (client mode): 0xee9074f0
2026-04-16T01:54:45.039 [DEBUG] [Thread-29522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:54:45.060 [DEBUG] [Thread-29522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:54:45.060 [INFO] [Thread-29522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:54:45.063 [DEBUG] [Thread-29522] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:54:45.063 [DEBUG] [Thread-29522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:54:45.063 [DEBUG] [Thread-29522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:54:45.063 [DEBUG] [Thread-29522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:54:45.063 [DEBUG] [Thread-29522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:54:45.063 [DEBUG] [Thread-29522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:54:45.063 [DEBUG] [Thread-29522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:54:45.064 [DEBUG] [Thread-29522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:54:45.064 [DEBUG] [Thread-29522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:54:45.064 [DEBUG] [Thread-29522] [transport.py] [_log()] client lang: <none>
2026-04-16T01:54:45.064 [DEBUG] [Thread-29522] [transport.py] [_log()] server lang: <none>
2026-04-16T01:54:45.064 [DEBUG] [Thread-29522] [transport.py] [_log()] kex follows: False
2026-04-16T01:54:45.064 [DEBUG] [Thread-29522] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:54:45.064 [DEBUG] [Thread-29522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:54:45.064 [DEBUG] [Thread-29522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:54:45.064 [DEBUG] [Thread-29522] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:54:45.064 [DEBUG] [Thread-29522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:54:45.065 [DEBUG] [Thread-29522] [transport.py] [_log()] Compression: none
2026-04-16T01:54:45.065 [DEBUG] [Thread-29522] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:54:45.082 [DEBUG] [Thread-29522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:54:45.082 [DEBUG] [Thread-29522] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:54:45.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:54:45.083 [DEBUG] [Thread-29522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:54:45.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:54:45.084 [DEBUG] [Thread-29522] [transport.py] [_log()] userauth is OK
2026-04-16T01:54:45.084 [DEBUG] [Thread-29522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:54:45.084 [DEBUG] [Thread-29522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:54:45.084 [DEBUG] [Thread-29522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:54:45.084 [DEBUG] [Thread-29522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:54:45.121 [INFO] [Thread-29522] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:54:45.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:54:45.892 [DEBUG] [Thread-29522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:54:45.892 [DEBUG] [Thread-29522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:54:45.892 [DEBUG] [Thread-29522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:54:45.932 [DEBUG] [Thread-29522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:54:45.933 [DEBUG] [Thread-29522] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:54:45.934 [DEBUG] [Thread-29522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:54:45.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:54:45.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:54:45.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:54:45.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:54:45.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:54:45.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:54:45.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:54:45.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:54:45.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:54:45.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.995964 -999.00   +9.10   4.64     88   +7.40 1 1 1 3 1     0    0 1.55 -8.41 .NESW 5.3 4.6 83.4 8.4 9.4 -25.6 9.3 -24.4 9.0 -22.1 9.3 -24.2
2026-04-16T01:54:45.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:54:45.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:54:45.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.995964
2026-04-16T01:54:45.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:54:45.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:54:45.955 [DEBUG] [Thread-29522] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:54:45.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:54:45.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:54:45.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:54:45.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:54:34', tmtdew=1.49951, humidity=90.2503, cloud=0.0, wind=12.7397, temperature=8.66269, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:54:11.290', atlas_cloud=1, atlas_rain=1, zp_data=[3.26225, nan, nan, nan, nan, nan, nan, nan, nan, 1.5600000000000005, 3.2802499999999997, 2.5679999999999996, nan, nan, nan, 0.20599999999999952, 0.37625000000000064, 0.2705000000000002, 0.8909999999999991, 1.0392499999999991, 1.038499999999999, 1.0067499999999985, 0.17125000000000057, 0.016750000000000043, 0.03550000000000075, 0.08750000000000036, 0.1282500000000013, 0.10650000000000048, 0.10000000000000142, 0.16400000000000148, 0.13400000000000034, 0.01699999999999946, -0.08275000000000077], zp_timestamp='2026-04-15T23:50:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:54:46.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:54:46.175 [DEBUG] [Thread-29525] [transport.py] [_log()] starting thread (client mode): 0xee906830
2026-04-16T01:54:46.175 [DEBUG] [Thread-29525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:54:46.189 [DEBUG] [Thread-29525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:54:46.190 [INFO] [Thread-29525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:54:46.197 [DEBUG] [Thread-29525] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:54:46.197 [DEBUG] [Thread-29525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:54:46.197 [DEBUG] [Thread-29525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:54:46.197 [DEBUG] [Thread-29525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:54:46.197 [DEBUG] [Thread-29525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:54:46.197 [DEBUG] [Thread-29525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:54:46.197 [DEBUG] [Thread-29525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:54:46.197 [DEBUG] [Thread-29525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:54:46.197 [DEBUG] [Thread-29525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:54:46.198 [DEBUG] [Thread-29525] [transport.py] [_log()] client lang: <none>
2026-04-16T01:54:46.198 [DEBUG] [Thread-29525] [transport.py] [_log()] server lang: <none>
2026-04-16T01:54:46.198 [DEBUG] [Thread-29525] [transport.py] [_log()] kex follows: False
2026-04-16T01:54:46.198 [DEBUG] [Thread-29525] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:54:46.198 [DEBUG] [Thread-29525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:54:46.198 [DEBUG] [Thread-29525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:54:46.198 [DEBUG] [Thread-29525] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:54:46.198 [DEBUG] [Thread-29525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:54:46.198 [DEBUG] [Thread-29525] [transport.py] [_log()] Compression: none
2026-04-16T01:54:46.198 [DEBUG] [Thread-29525] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:54:46.254 [DEBUG] [Thread-29525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:54:46.254 [DEBUG] [Thread-29525] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:54:46.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:54:46.255 [DEBUG] [Thread-29525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:54:46.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:54:46.311 [DEBUG] [Thread-29525] [transport.py] [_log()] userauth is OK
2026-04-16T01:54:46.311 [DEBUG] [Thread-29525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:54:46.311 [DEBUG] [Thread-29525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:54:46.311 [DEBUG] [Thread-29525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:54:46.312 [DEBUG] [Thread-29525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:54:46.329 [INFO] [Thread-29525] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:54:46.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:54:46.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:54:47.124 [DEBUG] [Thread-29525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:54:47.125 [DEBUG] [Thread-29525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:54:47.172 [DEBUG] [Thread-29525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:54:47.172 [DEBUG] [Thread-29525] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:54:47.180 [DEBUG] [Thread-29525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:54:47.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:54:47.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')
2026-04-16T01:54:47.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
2026-04-16T01:54:47.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:54:47.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:54:47.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:54:47.212 [DEBUG] [Thread-29525] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:54:48.331 [DEBUG] [Thread-29527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:54:59.262 [DEBUG] [Thread-29528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:55:03.380 [DEBUG] [Thread-29529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:55:17.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:55:17.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:55:17.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
2026-04-16T01:55:18.410 [DEBUG] [Thread-29530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:55:18.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 55, 10), 1.7574, 88.5756, 0.0, 10.058, 8.89834, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:55:18.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:55:10
2026-04-16T01:55:18.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:55:19.424 [DEBUG] [Thread-29531] [transport.py] [_log()] starting thread (client mode): 0xf1335870
2026-04-16T01:55:19.425 [DEBUG] [Thread-29531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:55:19.443 [DEBUG] [Thread-29531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:55:19.443 [INFO] [Thread-29531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:55:19.446 [DEBUG] [Thread-29531] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:55:19.446 [DEBUG] [Thread-29531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:55:19.447 [DEBUG] [Thread-29531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:55:19.447 [DEBUG] [Thread-29531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:55:19.447 [DEBUG] [Thread-29531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:55:19.447 [DEBUG] [Thread-29531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:55:19.447 [DEBUG] [Thread-29531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:55:19.447 [DEBUG] [Thread-29531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:55:19.447 [DEBUG] [Thread-29531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:55:19.447 [DEBUG] [Thread-29531] [transport.py] [_log()] client lang: <none>
2026-04-16T01:55:19.447 [DEBUG] [Thread-29531] [transport.py] [_log()] server lang: <none>
2026-04-16T01:55:19.447 [DEBUG] [Thread-29531] [transport.py] [_log()] kex follows: False
2026-04-16T01:55:19.447 [DEBUG] [Thread-29531] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:55:19.447 [DEBUG] [Thread-29531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:55:19.448 [DEBUG] [Thread-29531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:55:19.448 [DEBUG] [Thread-29531] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:55:19.448 [DEBUG] [Thread-29531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:55:19.448 [DEBUG] [Thread-29531] [transport.py] [_log()] Compression: none
2026-04-16T01:55:19.448 [DEBUG] [Thread-29531] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:55:19.463 [DEBUG] [Thread-29531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:55:19.463 [DEBUG] [Thread-29531] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:55:19.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:55:19.464 [DEBUG] [Thread-29531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:55:19.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:55:19.465 [DEBUG] [Thread-29531] [transport.py] [_log()] userauth is OK
2026-04-16T01:55:19.465 [DEBUG] [Thread-29531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:55:19.465 [DEBUG] [Thread-29531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:55:19.466 [DEBUG] [Thread-29531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:55:19.466 [DEBUG] [Thread-29531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:55:19.490 [INFO] [Thread-29531] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:55:19.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:55:27.231 [DEBUG] [Thread-29531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:55:27.231 [DEBUG] [Thread-29531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:55:27.231 [DEBUG] [Thread-29531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:55:27.272 [DEBUG] [Thread-29531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:55:27.272 [DEBUG] [Thread-29531] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:55:27.274 [DEBUG] [Thread-29531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:55:27.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:55:27.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:55:27.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:55:27.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:55:27.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:55:27.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:55:27.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:55:27.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:55:27.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:55:27.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.996312 -999.00   +9.10   2.48     88   +7.40 1 1 1 3 1     0    0 1.50 -8.80 .NESW 5.6 2.5 112.2 7.2 9.3 -25.6 9.3 -24.4 9.0 -22.1 9.3 -24.3
2026-04-16T01:55:27.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:55:27.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:55:27.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.996312
2026-04-16T01:55:27.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:55:27.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:55:27.306 [DEBUG] [Thread-29531] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:55:27.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:55:27.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:55:27.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:55:27.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:55:10', tmtdew=1.7574, humidity=88.5756, cloud=0.0, wind=10.058, temperature=8.89834, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:54:41.357', atlas_cloud=1, atlas_rain=1, zp_data=[3.26225, nan, nan, nan, nan, nan, nan, nan, nan, 1.5600000000000005, 3.2802499999999997, 2.5679999999999996, nan, nan, nan, 0.20599999999999952, 0.37625000000000064, 0.2705000000000002, 0.8909999999999991, 1.0392499999999991, 1.038499999999999, 1.0067499999999985, 0.17125000000000057, 0.016750000000000043, 0.03550000000000075, 0.08750000000000036, 0.1282500000000013, 0.10650000000000048, 0.10000000000000142, 0.16400000000000148, 0.13400000000000034, 0.01699999999999946, -0.08275000000000077], zp_timestamp='2026-04-15T23:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:55:27.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:55:27.529 [DEBUG] [Thread-29534] [transport.py] [_log()] starting thread (client mode): 0xee933400
2026-04-16T01:55:27.530 [DEBUG] [Thread-29534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:55:27.548 [DEBUG] [Thread-29534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:55:27.548 [INFO] [Thread-29534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:55:27.555 [DEBUG] [Thread-29534] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:55:27.555 [DEBUG] [Thread-29534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:55:27.556 [DEBUG] [Thread-29534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:55:27.556 [DEBUG] [Thread-29534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:55:27.556 [DEBUG] [Thread-29534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:55:27.556 [DEBUG] [Thread-29534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:55:27.556 [DEBUG] [Thread-29534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:55:27.556 [DEBUG] [Thread-29534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:55:27.556 [DEBUG] [Thread-29534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:55:27.556 [DEBUG] [Thread-29534] [transport.py] [_log()] client lang: <none>
2026-04-16T01:55:27.556 [DEBUG] [Thread-29534] [transport.py] [_log()] server lang: <none>
2026-04-16T01:55:27.556 [DEBUG] [Thread-29534] [transport.py] [_log()] kex follows: False
2026-04-16T01:55:27.556 [DEBUG] [Thread-29534] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:55:27.556 [DEBUG] [Thread-29534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:55:27.556 [DEBUG] [Thread-29534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:55:27.556 [DEBUG] [Thread-29534] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:55:27.557 [DEBUG] [Thread-29534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:55:27.557 [DEBUG] [Thread-29534] [transport.py] [_log()] Compression: none
2026-04-16T01:55:27.557 [DEBUG] [Thread-29534] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:55:27.613 [DEBUG] [Thread-29534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:55:27.614 [DEBUG] [Thread-29534] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:55:27.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:55:27.614 [DEBUG] [Thread-29534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:55:27.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:55:27.670 [DEBUG] [Thread-29534] [transport.py] [_log()] userauth is OK
2026-04-16T01:55:27.671 [DEBUG] [Thread-29534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:55:27.671 [DEBUG] [Thread-29534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:55:27.671 [DEBUG] [Thread-29534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:55:27.671 [DEBUG] [Thread-29534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:55:27.700 [INFO] [Thread-29534] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:55:27.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:55:27.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:55:28.564 [DEBUG] [Thread-29534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:55:28.564 [DEBUG] [Thread-29534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:55:28.611 [DEBUG] [Thread-29534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:55:28.612 [DEBUG] [Thread-29534] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:55:28.620 [DEBUG] [Thread-29534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:55:28.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:55:28.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')
2026-04-16T01:55:28.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
2026-04-16T01:55:28.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:55:28.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:55:28.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:55:28.663 [DEBUG] [Thread-29534] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:55:33.440 [DEBUG] [Thread-29536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:55:44.456 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:55:44.457 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:55:48.481 [DEBUG] [Thread-29537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:55:58.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:55:58.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:55:58.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T01:55:59.427 [DEBUG] [Thread-29538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:55:59.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 55, 45), 1.50516, 90.2177, 0.0, 12.775, 8.69622, 1, 2, 0, 2, 0, 0),)
2026-04-16T01:55:59.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:55:45
2026-04-16T01:56:00.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:56:00.818 [DEBUG] [Thread-29539] [transport.py] [_log()] starting thread (client mode): 0xf13c95d0
2026-04-16T01:56:00.818 [DEBUG] [Thread-29539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:56:00.838 [DEBUG] [Thread-29539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:56:00.838 [INFO] [Thread-29539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:56:00.841 [DEBUG] [Thread-29539] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:56:00.841 [DEBUG] [Thread-29539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:56:00.842 [DEBUG] [Thread-29539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:56:00.842 [DEBUG] [Thread-29539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:56:00.842 [DEBUG] [Thread-29539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:56:00.842 [DEBUG] [Thread-29539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:56:00.842 [DEBUG] [Thread-29539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:56:00.842 [DEBUG] [Thread-29539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:56:00.842 [DEBUG] [Thread-29539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:56:00.842 [DEBUG] [Thread-29539] [transport.py] [_log()] client lang: <none>
2026-04-16T01:56:00.842 [DEBUG] [Thread-29539] [transport.py] [_log()] server lang: <none>
2026-04-16T01:56:00.842 [DEBUG] [Thread-29539] [transport.py] [_log()] kex follows: False
2026-04-16T01:56:00.842 [DEBUG] [Thread-29539] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:56:00.843 [DEBUG] [Thread-29539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:56:00.843 [DEBUG] [Thread-29539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:56:00.843 [DEBUG] [Thread-29539] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:56:00.843 [DEBUG] [Thread-29539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:56:00.843 [DEBUG] [Thread-29539] [transport.py] [_log()] Compression: none
2026-04-16T01:56:00.843 [DEBUG] [Thread-29539] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:56:00.859 [DEBUG] [Thread-29539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:56:00.860 [DEBUG] [Thread-29539] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:56:00.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:56:00.860 [DEBUG] [Thread-29539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:56:00.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:56:00.862 [DEBUG] [Thread-29539] [transport.py] [_log()] userauth is OK
2026-04-16T01:56:00.862 [DEBUG] [Thread-29539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:56:00.862 [DEBUG] [Thread-29539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:56:00.862 [DEBUG] [Thread-29539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:56:00.862 [DEBUG] [Thread-29539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:56:00.887 [INFO] [Thread-29539] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:56:00.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:56:01.671 [DEBUG] [Thread-29539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:56:01.672 [DEBUG] [Thread-29539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:56:01.672 [DEBUG] [Thread-29539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:56:01.712 [DEBUG] [Thread-29539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:56:01.712 [DEBUG] [Thread-29539] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:56:01.715 [DEBUG] [Thread-29539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:56:01.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:56:01.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:56:01.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:56:01.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:56:01.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:56:01.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:56:01.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:56:01.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:56:01.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:56:01.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.996659 -999.00   +9.10   5.95     89   +7.40 1 1 1 3 1     0    0 1.53 -8.31 .NESW 6.0 6.0 111.8 8.1 9.4 -25.6 9.3 -24.3 9.0 -22.0 9.3 -24.3
2026-04-16T01:56:01.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:56:01.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:56:01.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.996659
2026-04-16T01:56:01.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:56:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:56:01.743 [DEBUG] [Thread-29539] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:56:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:56:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:56:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:56:01.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:55:45', tmtdew=1.50516, humidity=90.2177, cloud=0.0, wind=12.775, temperature=8.69622, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:55:11.338', atlas_cloud=1, atlas_rain=1, zp_data=[3.26225, nan, nan, nan, nan, nan, nan, nan, nan, 1.5600000000000005, 3.2802499999999997, 2.5679999999999996, nan, nan, nan, 0.20599999999999952, 0.37625000000000064, 0.2705000000000002, 0.8909999999999991, 1.0392499999999991, 1.038499999999999, 1.0067499999999985, 0.17125000000000057, 0.016750000000000043, 0.03550000000000075, 0.08750000000000036, 0.1282500000000013, 0.10650000000000048, 0.10000000000000142, 0.16400000000000148, 0.13400000000000034, 0.01699999999999946, -0.08275000000000077], zp_timestamp='2026-04-15T23:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:56:01.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:56:02.002 [DEBUG] [Thread-29542] [transport.py] [_log()] starting thread (client mode): 0xf1367be0
2026-04-16T01:56:02.002 [DEBUG] [Thread-29542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:56:02.016 [DEBUG] [Thread-29542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:56:02.017 [INFO] [Thread-29542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:56:02.024 [DEBUG] [Thread-29542] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:56:02.024 [DEBUG] [Thread-29542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:56:02.024 [DEBUG] [Thread-29542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:56:02.024 [DEBUG] [Thread-29542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:56:02.024 [DEBUG] [Thread-29542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:56:02.024 [DEBUG] [Thread-29542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:56:02.024 [DEBUG] [Thread-29542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:56:02.024 [DEBUG] [Thread-29542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:56:02.024 [DEBUG] [Thread-29542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:56:02.024 [DEBUG] [Thread-29542] [transport.py] [_log()] client lang: <none>
2026-04-16T01:56:02.025 [DEBUG] [Thread-29542] [transport.py] [_log()] server lang: <none>
2026-04-16T01:56:02.025 [DEBUG] [Thread-29542] [transport.py] [_log()] kex follows: False
2026-04-16T01:56:02.025 [DEBUG] [Thread-29542] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:56:02.025 [DEBUG] [Thread-29542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:56:02.025 [DEBUG] [Thread-29542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:56:02.025 [DEBUG] [Thread-29542] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:56:02.025 [DEBUG] [Thread-29542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:56:02.025 [DEBUG] [Thread-29542] [transport.py] [_log()] Compression: none
2026-04-16T01:56:02.025 [DEBUG] [Thread-29542] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:56:02.082 [DEBUG] [Thread-29542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:56:02.082 [DEBUG] [Thread-29542] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:56:02.083 [DEBUG] [Thread-29542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:56:02.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:56:02.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:56:02.138 [DEBUG] [Thread-29542] [transport.py] [_log()] userauth is OK
2026-04-16T01:56:02.138 [DEBUG] [Thread-29542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:56:02.139 [DEBUG] [Thread-29542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:56:02.139 [DEBUG] [Thread-29542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:56:02.139 [DEBUG] [Thread-29542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:56:02.164 [INFO] [Thread-29542] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:56:02.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:56:02.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:56:03.003 [DEBUG] [Thread-29542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:56:03.004 [DEBUG] [Thread-29542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:56:03.051 [DEBUG] [Thread-29542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:56:03.051 [DEBUG] [Thread-29542] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:56:03.060 [DEBUG] [Thread-29542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:56:03.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:56:03.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')
2026-04-16T01:56:03.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
2026-04-16T01:56:03.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:56:03.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:56:03.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:56:03.095 [DEBUG] [Thread-29542] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:56:03.516 [DEBUG] [Thread-29544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:56:18.561 [DEBUG] [Thread-29545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:56:33.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:56:33.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:56:33.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
2026-04-16T01:56:33.590 [DEBUG] [Thread-29546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:56:34.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 56, 21), 1.69992, 89.1253, 0.0, 8.09928, 8.898, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:56:34.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:56:21
2026-04-16T01:56:34.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:56:35.194 [DEBUG] [Thread-29547] [transport.py] [_log()] starting thread (client mode): 0xf1366290
2026-04-16T01:56:35.194 [DEBUG] [Thread-29547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:56:35.214 [DEBUG] [Thread-29547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:56:35.214 [INFO] [Thread-29547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:56:35.217 [DEBUG] [Thread-29547] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:56:35.217 [DEBUG] [Thread-29547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:56:35.217 [DEBUG] [Thread-29547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:56:35.217 [DEBUG] [Thread-29547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:56:35.217 [DEBUG] [Thread-29547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:56:35.217 [DEBUG] [Thread-29547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:56:35.217 [DEBUG] [Thread-29547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:56:35.217 [DEBUG] [Thread-29547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:56:35.217 [DEBUG] [Thread-29547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:56:35.217 [DEBUG] [Thread-29547] [transport.py] [_log()] client lang: <none>
2026-04-16T01:56:35.217 [DEBUG] [Thread-29547] [transport.py] [_log()] server lang: <none>
2026-04-16T01:56:35.218 [DEBUG] [Thread-29547] [transport.py] [_log()] kex follows: False
2026-04-16T01:56:35.218 [DEBUG] [Thread-29547] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:56:35.218 [DEBUG] [Thread-29547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:56:35.218 [DEBUG] [Thread-29547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:56:35.218 [DEBUG] [Thread-29547] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:56:35.218 [DEBUG] [Thread-29547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:56:35.218 [DEBUG] [Thread-29547] [transport.py] [_log()] Compression: none
2026-04-16T01:56:35.218 [DEBUG] [Thread-29547] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:56:35.234 [DEBUG] [Thread-29547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:56:35.234 [DEBUG] [Thread-29547] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:56:35.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:56:35.235 [DEBUG] [Thread-29547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:56:35.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:56:35.236 [DEBUG] [Thread-29547] [transport.py] [_log()] userauth is OK
2026-04-16T01:56:35.236 [DEBUG] [Thread-29547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:56:35.236 [DEBUG] [Thread-29547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:56:35.236 [DEBUG] [Thread-29547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:56:35.236 [DEBUG] [Thread-29547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:56:35.248 [INFO] [Thread-29547] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:56:35.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:56:36.032 [DEBUG] [Thread-29547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:56:36.032 [DEBUG] [Thread-29547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:56:36.032 [DEBUG] [Thread-29547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:56:36.073 [DEBUG] [Thread-29547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:56:36.073 [DEBUG] [Thread-29547] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:56:36.077 [DEBUG] [Thread-29547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:56:36.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:56:36.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:56:36.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:56:36.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:56:36.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:56:36.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:56:36.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:56:36.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:56:36.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:56:36.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.997006 -999.00   +9.10   5.96     89   +7.40 1 1 1 3 1     0    0 1.55 -7.62 .NEsW 4.4 6.0 98.1 9.8 9.4 -25.6 9.3 -24.3 9.0 -22.1 9.3 -24.3
2026-04-16T01:56:36.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:56:36.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:56:36.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.997006
2026-04-16T01:56:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:56:36.100 [DEBUG] [Thread-29547] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:56:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:56:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:56:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:56:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:56:36.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:56:21', tmtdew=1.69992, humidity=89.1253, cloud=0.0, wind=8.09928, temperature=8.898, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:55:41.318', atlas_cloud=1, atlas_rain=1, zp_data=[3.26225, nan, nan, nan, nan, nan, nan, nan, nan, 1.5600000000000005, 3.2802499999999997, 2.5679999999999996, nan, nan, nan, 0.20599999999999952, 0.37625000000000064, 0.2705000000000002, 0.8909999999999991, 1.0392499999999991, 1.038499999999999, 1.0067499999999985, 0.17125000000000057, 0.016750000000000043, 0.03550000000000075, 0.08750000000000036, 0.1282500000000013, 0.10650000000000048, 0.10000000000000142, 0.16400000000000148, 0.13400000000000034, 0.01699999999999946, -0.08275000000000077], zp_timestamp='2026-04-15T23:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:56:36.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:56:36.355 [DEBUG] [Thread-29550] [transport.py] [_log()] starting thread (client mode): 0xf1366bc0
2026-04-16T01:56:36.355 [DEBUG] [Thread-29550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:56:36.369 [DEBUG] [Thread-29550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:56:36.369 [INFO] [Thread-29550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:56:36.377 [DEBUG] [Thread-29550] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:56:36.377 [DEBUG] [Thread-29550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:56:36.377 [DEBUG] [Thread-29550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:56:36.377 [DEBUG] [Thread-29550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:56:36.377 [DEBUG] [Thread-29550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:56:36.377 [DEBUG] [Thread-29550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:56:36.377 [DEBUG] [Thread-29550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:56:36.377 [DEBUG] [Thread-29550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:56:36.377 [DEBUG] [Thread-29550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:56:36.377 [DEBUG] [Thread-29550] [transport.py] [_log()] client lang: <none>
2026-04-16T01:56:36.378 [DEBUG] [Thread-29550] [transport.py] [_log()] server lang: <none>
2026-04-16T01:56:36.378 [DEBUG] [Thread-29550] [transport.py] [_log()] kex follows: False
2026-04-16T01:56:36.378 [DEBUG] [Thread-29550] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:56:36.378 [DEBUG] [Thread-29550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:56:36.378 [DEBUG] [Thread-29550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:56:36.378 [DEBUG] [Thread-29550] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:56:36.378 [DEBUG] [Thread-29550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:56:36.378 [DEBUG] [Thread-29550] [transport.py] [_log()] Compression: none
2026-04-16T01:56:36.378 [DEBUG] [Thread-29550] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:56:36.433 [DEBUG] [Thread-29550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:56:36.434 [DEBUG] [Thread-29550] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:56:36.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:56:36.434 [DEBUG] [Thread-29550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:56:36.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:56:36.491 [DEBUG] [Thread-29550] [transport.py] [_log()] userauth is OK
2026-04-16T01:56:36.491 [DEBUG] [Thread-29550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:56:36.491 [DEBUG] [Thread-29550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:56:36.491 [DEBUG] [Thread-29550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:56:36.491 [DEBUG] [Thread-29550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:56:36.509 [INFO] [Thread-29550] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:56:36.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:56:36.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:56:37.355 [DEBUG] [Thread-29550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:56:37.355 [DEBUG] [Thread-29550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:56:37.403 [DEBUG] [Thread-29550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:56:37.403 [DEBUG] [Thread-29550] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:56:37.412 [DEBUG] [Thread-29550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:56:37.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:56:37.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')
2026-04-16T01:56:37.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
2026-04-16T01:56:37.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:56:37.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:56:37.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:56:37.445 [DEBUG] [Thread-29550] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:56:44.662 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:56:44.664 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:56:48.621 [DEBUG] [Thread-29552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:56:59.578 [DEBUG] [Thread-29553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:57:03.665 [DEBUG] [Thread-29554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:57:07.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:57:07.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:57:07.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
2026-04-16T01:57:08.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 56, 56), 1.6965, 89.1418, 0.0, 9.7758, 8.83165, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:57:08.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:56:56
2026-04-16T01:57:09.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:57:09.524 [DEBUG] [Thread-29555] [transport.py] [_log()] starting thread (client mode): 0xf1335750
2026-04-16T01:57:09.524 [DEBUG] [Thread-29555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:57:09.545 [DEBUG] [Thread-29555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:57:09.545 [INFO] [Thread-29555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:57:09.549 [DEBUG] [Thread-29555] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:57:09.549 [DEBUG] [Thread-29555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:57:09.549 [DEBUG] [Thread-29555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:57:09.549 [DEBUG] [Thread-29555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:57:09.549 [DEBUG] [Thread-29555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:57:09.550 [DEBUG] [Thread-29555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:57:09.550 [DEBUG] [Thread-29555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:57:09.550 [DEBUG] [Thread-29555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:57:09.550 [DEBUG] [Thread-29555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:57:09.550 [DEBUG] [Thread-29555] [transport.py] [_log()] client lang: <none>
2026-04-16T01:57:09.550 [DEBUG] [Thread-29555] [transport.py] [_log()] server lang: <none>
2026-04-16T01:57:09.550 [DEBUG] [Thread-29555] [transport.py] [_log()] kex follows: False
2026-04-16T01:57:09.550 [DEBUG] [Thread-29555] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:57:09.550 [DEBUG] [Thread-29555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:57:09.550 [DEBUG] [Thread-29555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:57:09.551 [DEBUG] [Thread-29555] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:57:09.551 [DEBUG] [Thread-29555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:57:09.551 [DEBUG] [Thread-29555] [transport.py] [_log()] Compression: none
2026-04-16T01:57:09.551 [DEBUG] [Thread-29555] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:57:09.559 [DEBUG] [Thread-29555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:57:09.560 [DEBUG] [Thread-29555] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:57:09.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:57:09.560 [DEBUG] [Thread-29555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:57:09.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:57:09.561 [DEBUG] [Thread-29555] [transport.py] [_log()] userauth is OK
2026-04-16T01:57:09.561 [DEBUG] [Thread-29555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:57:09.562 [DEBUG] [Thread-29555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:57:09.562 [DEBUG] [Thread-29555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:57:09.562 [DEBUG] [Thread-29555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:57:09.582 [INFO] [Thread-29555] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:57:09.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:57:10.372 [DEBUG] [Thread-29555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:57:10.372 [DEBUG] [Thread-29555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:57:10.372 [DEBUG] [Thread-29555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:57:10.413 [DEBUG] [Thread-29555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:57:10.413 [DEBUG] [Thread-29555] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:57:10.415 [DEBUG] [Thread-29555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:57:10.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:57:10.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:57:10.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:57:10.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:57:10.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:57:10.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:57:10.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:57:10.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:57:10.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:57:10.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.997353 -999.00   +9.10   8.60     89   +7.40 1 1 1 3 1     0    0 1.56 -7.51 .NEsW 6.4 8.6 77.8 9.4 9.4 -25.6 9.3 -24.2 9.0 -22.1 9.2 -24.3
2026-04-16T01:57:10.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:57:10.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:57:10.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.997353
2026-04-16T01:57:10.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:57:10.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:57:10.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:57:10.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:57:10.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:57:10.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:56:56', tmtdew=1.6965, humidity=89.1418, cloud=0.0, wind=9.7758, temperature=8.83165, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:56:11.299', atlas_cloud=1, atlas_rain=1, zp_data=[3.26225, nan, nan, nan, nan, nan, nan, nan, nan, 1.5600000000000005, 3.2802499999999997, 2.5679999999999996, nan, nan, nan, 0.20599999999999952, 0.37625000000000064, 0.2705000000000002, 0.8909999999999991, 1.0392499999999991, 1.038499999999999, 1.0067499999999985, 0.17125000000000057, 0.016750000000000043, 0.03550000000000075, 0.08750000000000036, 0.1282500000000013, 0.10650000000000048, 0.10000000000000142, 0.16400000000000148, 0.13400000000000034, 0.01699999999999946, -0.08275000000000077], zp_timestamp='2026-04-15T23:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:57:10.434 [DEBUG] [Thread-29555] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:57:10.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:57:10.643 [DEBUG] [Thread-29558] [transport.py] [_log()] starting thread (client mode): 0xee9c3970
2026-04-16T01:57:10.643 [DEBUG] [Thread-29558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:57:10.658 [DEBUG] [Thread-29558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:57:10.658 [INFO] [Thread-29558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:57:10.665 [DEBUG] [Thread-29558] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:57:10.665 [DEBUG] [Thread-29558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:57:10.665 [DEBUG] [Thread-29558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:57:10.665 [DEBUG] [Thread-29558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:57:10.665 [DEBUG] [Thread-29558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:57:10.665 [DEBUG] [Thread-29558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:57:10.666 [DEBUG] [Thread-29558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:57:10.666 [DEBUG] [Thread-29558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:57:10.666 [DEBUG] [Thread-29558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:57:10.666 [DEBUG] [Thread-29558] [transport.py] [_log()] client lang: <none>
2026-04-16T01:57:10.666 [DEBUG] [Thread-29558] [transport.py] [_log()] server lang: <none>
2026-04-16T01:57:10.666 [DEBUG] [Thread-29558] [transport.py] [_log()] kex follows: False
2026-04-16T01:57:10.666 [DEBUG] [Thread-29558] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:57:10.666 [DEBUG] [Thread-29558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:57:10.666 [DEBUG] [Thread-29558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:57:10.666 [DEBUG] [Thread-29558] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:57:10.666 [DEBUG] [Thread-29558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:57:10.667 [DEBUG] [Thread-29558] [transport.py] [_log()] Compression: none
2026-04-16T01:57:10.667 [DEBUG] [Thread-29558] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:57:10.721 [DEBUG] [Thread-29558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:57:10.722 [DEBUG] [Thread-29558] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:57:10.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:57:10.722 [DEBUG] [Thread-29558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:57:10.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:57:10.779 [DEBUG] [Thread-29558] [transport.py] [_log()] userauth is OK
2026-04-16T01:57:10.779 [DEBUG] [Thread-29558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:57:10.779 [DEBUG] [Thread-29558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:57:10.779 [DEBUG] [Thread-29558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:57:10.779 [DEBUG] [Thread-29558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:57:10.807 [INFO] [Thread-29558] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:57:10.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:57:10.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:57:11.602 [DEBUG] [Thread-29558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:57:11.602 [DEBUG] [Thread-29558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:57:11.650 [DEBUG] [Thread-29558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:57:11.650 [DEBUG] [Thread-29558] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:57:11.659 [DEBUG] [Thread-29558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:57:11.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:57:11.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')
2026-04-16T01:57:11.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
2026-04-16T01:57:11.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:57:11.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:57:11.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:57:11.694 [DEBUG] [Thread-29558] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:57:18.695 [DEBUG] [Thread-29560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:57:33.733 [DEBUG] [Thread-29561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:57:41.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:57:41.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:57:41.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
2026-04-16T01:57:43.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 57, 32), 1.69702, 89.1421, 0.0, 9.63468, 8.88158, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:57:43.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:57:32
2026-04-16T01:57:43.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:57:43.871 [DEBUG] [Thread-29562] [transport.py] [_log()] starting thread (client mode): 0xf13c9d20
2026-04-16T01:57:43.871 [DEBUG] [Thread-29562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:57:43.892 [DEBUG] [Thread-29562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:57:43.892 [INFO] [Thread-29562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:57:43.895 [DEBUG] [Thread-29562] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:57:43.895 [DEBUG] [Thread-29562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:57:43.895 [DEBUG] [Thread-29562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:57:43.895 [DEBUG] [Thread-29562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:57:43.895 [DEBUG] [Thread-29562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:57:43.895 [DEBUG] [Thread-29562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:57:43.895 [DEBUG] [Thread-29562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:57:43.896 [DEBUG] [Thread-29562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:57:43.896 [DEBUG] [Thread-29562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:57:43.896 [DEBUG] [Thread-29562] [transport.py] [_log()] client lang: <none>
2026-04-16T01:57:43.896 [DEBUG] [Thread-29562] [transport.py] [_log()] server lang: <none>
2026-04-16T01:57:43.896 [DEBUG] [Thread-29562] [transport.py] [_log()] kex follows: False
2026-04-16T01:57:43.896 [DEBUG] [Thread-29562] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:57:43.896 [DEBUG] [Thread-29562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:57:43.896 [DEBUG] [Thread-29562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:57:43.896 [DEBUG] [Thread-29562] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:57:43.896 [DEBUG] [Thread-29562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:57:43.896 [DEBUG] [Thread-29562] [transport.py] [_log()] Compression: none
2026-04-16T01:57:43.897 [DEBUG] [Thread-29562] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:57:43.913 [DEBUG] [Thread-29562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:57:43.914 [DEBUG] [Thread-29562] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:57:43.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:57:43.914 [DEBUG] [Thread-29562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:57:43.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:57:43.915 [DEBUG] [Thread-29562] [transport.py] [_log()] userauth is OK
2026-04-16T01:57:43.915 [DEBUG] [Thread-29562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:57:43.915 [DEBUG] [Thread-29562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:57:43.915 [DEBUG] [Thread-29562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:57:43.915 [DEBUG] [Thread-29562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:57:43.928 [INFO] [Thread-29562] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:57:43.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:57:44.700 [DEBUG] [Thread-29562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:57:44.701 [DEBUG] [Thread-29562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:57:44.701 [DEBUG] [Thread-29562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:57:44.741 [DEBUG] [Thread-29562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:57:44.741 [DEBUG] [Thread-29562] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:57:44.744 [DEBUG] [Thread-29562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:57:44.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:57:44.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:57:44.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:57:44.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:57:44.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:57:44.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:57:44.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:57:44.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:57:44.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:57:44.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.998048 -999.00   +9.10   7.06     89   +7.40 1 1 1 3 1     0    0 1.51 -8.93 .NEsw 4.8 7.1 101.6 8.8 9.4 -25.5 9.3 -24.4 9.0 -22.1 9.3 -24.2
2026-04-16T01:57:44.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:57:44.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:57:44.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.998048
2026-04-16T01:57:44.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:57:44.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:57:44.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:57:44.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:57:44.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:57:44.767 [DEBUG] [Thread-29562] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:57:44.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:57:32', tmtdew=1.69702, humidity=89.1421, cloud=0.0, wind=9.63468, temperature=8.88158, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:57:11.347', atlas_cloud=1, atlas_rain=1, zp_data=[3.26225, nan, nan, nan, nan, nan, nan, nan, nan, 1.5600000000000005, 3.2802499999999997, 2.5679999999999996, nan, nan, nan, 0.20599999999999952, 0.37625000000000064, 0.2705000000000002, 0.8909999999999991, 1.0392499999999991, 1.038499999999999, 1.0067499999999985, 0.17125000000000057, 0.016750000000000043, 0.03550000000000075, 0.08750000000000036, 0.1282500000000013, 0.10650000000000048, 0.10000000000000142, 0.16400000000000148, 0.13400000000000034, 0.01699999999999946, -0.08275000000000077], zp_timestamp='2026-04-15T23:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:57:44.867 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:57:44.867 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:57:45.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:57:45.020 [DEBUG] [Thread-29565] [transport.py] [_log()] starting thread (client mode): 0xf13c99c0
2026-04-16T01:57:45.021 [DEBUG] [Thread-29565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:57:45.035 [DEBUG] [Thread-29565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:57:45.035 [INFO] [Thread-29565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:57:45.043 [DEBUG] [Thread-29565] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:57:45.043 [DEBUG] [Thread-29565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:57:45.043 [DEBUG] [Thread-29565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:57:45.043 [DEBUG] [Thread-29565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:57:45.043 [DEBUG] [Thread-29565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:57:45.043 [DEBUG] [Thread-29565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:57:45.043 [DEBUG] [Thread-29565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:57:45.043 [DEBUG] [Thread-29565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:57:45.043 [DEBUG] [Thread-29565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:57:45.043 [DEBUG] [Thread-29565] [transport.py] [_log()] client lang: <none>
2026-04-16T01:57:45.044 [DEBUG] [Thread-29565] [transport.py] [_log()] server lang: <none>
2026-04-16T01:57:45.044 [DEBUG] [Thread-29565] [transport.py] [_log()] kex follows: False
2026-04-16T01:57:45.044 [DEBUG] [Thread-29565] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:57:45.044 [DEBUG] [Thread-29565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:57:45.044 [DEBUG] [Thread-29565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:57:45.044 [DEBUG] [Thread-29565] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:57:45.044 [DEBUG] [Thread-29565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:57:45.044 [DEBUG] [Thread-29565] [transport.py] [_log()] Compression: none
2026-04-16T01:57:45.044 [DEBUG] [Thread-29565] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:57:45.101 [DEBUG] [Thread-29565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:57:45.102 [DEBUG] [Thread-29565] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:57:45.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:57:45.103 [DEBUG] [Thread-29565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:57:45.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:57:45.159 [DEBUG] [Thread-29565] [transport.py] [_log()] userauth is OK
2026-04-16T01:57:45.159 [DEBUG] [Thread-29565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:57:45.159 [DEBUG] [Thread-29565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:57:45.159 [DEBUG] [Thread-29565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:57:45.159 [DEBUG] [Thread-29565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:57:45.187 [INFO] [Thread-29565] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:57:45.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:57:45.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:57:45.999 [DEBUG] [Thread-29565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:57:45.999 [DEBUG] [Thread-29565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:57:46.047 [DEBUG] [Thread-29565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:57:46.047 [DEBUG] [Thread-29565] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:57:46.056 [DEBUG] [Thread-29565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:57:46.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:57:46.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')
2026-04-16T01:57:46.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
2026-04-16T01:57:46.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:57:46.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:57:46.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:57:46.091 [DEBUG] [Thread-29565] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:57:48.764 [DEBUG] [Thread-29567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:57:59.728 [DEBUG] [Thread-29568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:58:03.807 [DEBUG] [Thread-29569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:58:16.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:58:16.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:58:16.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
2026-04-16T01:58:17.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 58, 7), 1.69647, 89.1421, 0.0, 9.864, 8.83181, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:58:17.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:58:07
2026-04-16T01:58:17.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:58:18.176 [DEBUG] [Thread-29570] [transport.py] [_log()] starting thread (client mode): 0xf13cbe80
2026-04-16T01:58:18.176 [DEBUG] [Thread-29570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:58:18.196 [DEBUG] [Thread-29570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:58:18.196 [INFO] [Thread-29570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:58:18.199 [DEBUG] [Thread-29570] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:58:18.199 [DEBUG] [Thread-29570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:58:18.199 [DEBUG] [Thread-29570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:58:18.199 [DEBUG] [Thread-29570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:58:18.199 [DEBUG] [Thread-29570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:58:18.199 [DEBUG] [Thread-29570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:58:18.199 [DEBUG] [Thread-29570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:58:18.199 [DEBUG] [Thread-29570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:58:18.199 [DEBUG] [Thread-29570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:58:18.199 [DEBUG] [Thread-29570] [transport.py] [_log()] client lang: <none>
2026-04-16T01:58:18.199 [DEBUG] [Thread-29570] [transport.py] [_log()] server lang: <none>
2026-04-16T01:58:18.200 [DEBUG] [Thread-29570] [transport.py] [_log()] kex follows: False
2026-04-16T01:58:18.200 [DEBUG] [Thread-29570] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:58:18.200 [DEBUG] [Thread-29570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:58:18.200 [DEBUG] [Thread-29570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:58:18.200 [DEBUG] [Thread-29570] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:58:18.200 [DEBUG] [Thread-29570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:58:18.200 [DEBUG] [Thread-29570] [transport.py] [_log()] Compression: none
2026-04-16T01:58:18.200 [DEBUG] [Thread-29570] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:58:18.216 [DEBUG] [Thread-29570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:58:18.216 [DEBUG] [Thread-29570] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:58:18.216 [DEBUG] [Thread-29570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:58:18.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:58:18.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:58:18.217 [DEBUG] [Thread-29570] [transport.py] [_log()] userauth is OK
2026-04-16T01:58:18.217 [DEBUG] [Thread-29570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:58:18.217 [DEBUG] [Thread-29570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:58:18.218 [DEBUG] [Thread-29570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:58:18.218 [DEBUG] [Thread-29570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:58:18.230 [INFO] [Thread-29570] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:58:18.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:58:18.836 [DEBUG] [Thread-29572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:58:19.051 [DEBUG] [Thread-29570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:58:19.052 [DEBUG] [Thread-29570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:58:19.052 [DEBUG] [Thread-29570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:58:19.093 [DEBUG] [Thread-29570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:58:19.093 [DEBUG] [Thread-29570] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:58:19.096 [DEBUG] [Thread-29570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:58:19.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:58:19.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:58:19.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:58:19.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:58:19.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:58:19.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:58:19.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:58:19.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:58:19.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:58:19.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.998395 -999.00   +9.10   5.44     89   +7.40 1 1 1 3 1     0    0 1.51 -9.16 .NESW 6.0 5.4 89.4 9.4 9.4 -25.6 9.2 -24.2 9.0 -22.0 9.2 -24.3
2026-04-16T01:58:19.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:58:19.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:58:19.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.998395
2026-04-16T01:58:19.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:58:19.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:58:19.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:58:19.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:58:19.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:58:19.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:58:07', tmtdew=1.69647, humidity=89.1421, cloud=0.0, wind=9.864, temperature=8.83181, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:57:41.328', atlas_cloud=1, atlas_rain=1, zp_data=[3.2837499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 2.5280000000000005, 3.1832499999999992, 2.5440000000000005, nan, nan, nan, 0.08149999999999835, 0.5727499999999992, 0.29349999999999987, 0.9564999999999992, 1.4107499999999984, 1.3179999999999978, 1.199749999999999, 0.14424999999999955, -0.011250000000000426, 0.010999999999999233, 0.049999999999998934, 0.1557499999999994, 0.08999999999999986, 0.09550000000000125, 0.1515000000000022, 0.12500000000000178, 0.002500000000001279, -0.10725000000000051], zp_timestamp='2026-04-15T23:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:58:19.121 [DEBUG] [Thread-29570] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:58:19.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:58:19.398 [DEBUG] [Thread-29574] [transport.py] [_log()] starting thread (client mode): 0xf13cb520
2026-04-16T01:58:19.398 [DEBUG] [Thread-29574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:58:19.412 [DEBUG] [Thread-29574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:58:19.412 [INFO] [Thread-29574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:58:19.420 [DEBUG] [Thread-29574] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:58:19.420 [DEBUG] [Thread-29574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:58:19.420 [DEBUG] [Thread-29574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:58:19.420 [DEBUG] [Thread-29574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:58:19.420 [DEBUG] [Thread-29574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:58:19.420 [DEBUG] [Thread-29574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:58:19.420 [DEBUG] [Thread-29574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:58:19.420 [DEBUG] [Thread-29574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:58:19.420 [DEBUG] [Thread-29574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:58:19.420 [DEBUG] [Thread-29574] [transport.py] [_log()] client lang: <none>
2026-04-16T01:58:19.420 [DEBUG] [Thread-29574] [transport.py] [_log()] server lang: <none>
2026-04-16T01:58:19.420 [DEBUG] [Thread-29574] [transport.py] [_log()] kex follows: False
2026-04-16T01:58:19.420 [DEBUG] [Thread-29574] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:58:19.421 [DEBUG] [Thread-29574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:58:19.421 [DEBUG] [Thread-29574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:58:19.421 [DEBUG] [Thread-29574] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:58:19.421 [DEBUG] [Thread-29574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:58:19.421 [DEBUG] [Thread-29574] [transport.py] [_log()] Compression: none
2026-04-16T01:58:19.421 [DEBUG] [Thread-29574] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:58:19.478 [DEBUG] [Thread-29574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:58:19.478 [DEBUG] [Thread-29574] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:58:19.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:58:19.479 [DEBUG] [Thread-29574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:58:19.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:58:19.537 [DEBUG] [Thread-29574] [transport.py] [_log()] userauth is OK
2026-04-16T01:58:19.538 [DEBUG] [Thread-29574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:58:19.538 [DEBUG] [Thread-29574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:58:19.538 [DEBUG] [Thread-29574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:58:19.538 [DEBUG] [Thread-29574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:58:19.563 [INFO] [Thread-29574] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:58:19.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:58:19.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:58:20.402 [DEBUG] [Thread-29574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:58:20.403 [DEBUG] [Thread-29574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:58:20.451 [DEBUG] [Thread-29574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:58:20.451 [DEBUG] [Thread-29574] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:58:20.460 [DEBUG] [Thread-29574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:58:20.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:58:20.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')
2026-04-16T01:58: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') -> 00000000
2026-04-16T01:58:20.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:58:20.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:58:20.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:58:20.494 [DEBUG] [Thread-29574] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:58:33.863 [DEBUG] [Thread-29576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:58:45.074 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:58:45.075 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:58:48.903 [DEBUG] [Thread-29577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:58:50.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:58:50.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:58:50.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
2026-04-16T01:58:51.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 58, 43), 1.47764, 90.3834, 0.0, 12.8102, 8.62975, 2, 2, 0, 2, 0, 0),)
2026-04-16T01:58:51.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:58:43
2026-04-16T01:58:52.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:58:52.648 [DEBUG] [Thread-29578] [transport.py] [_log()] starting thread (client mode): 0xee933c40
2026-04-16T01:58:52.648 [DEBUG] [Thread-29578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:58:52.667 [DEBUG] [Thread-29578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:58:52.667 [INFO] [Thread-29578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:58:52.670 [DEBUG] [Thread-29578] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:58:52.670 [DEBUG] [Thread-29578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:58:52.670 [DEBUG] [Thread-29578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:58:52.670 [DEBUG] [Thread-29578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:58:52.671 [DEBUG] [Thread-29578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:58:52.671 [DEBUG] [Thread-29578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:58:52.671 [DEBUG] [Thread-29578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:58:52.671 [DEBUG] [Thread-29578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:58:52.671 [DEBUG] [Thread-29578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:58:52.671 [DEBUG] [Thread-29578] [transport.py] [_log()] client lang: <none>
2026-04-16T01:58:52.671 [DEBUG] [Thread-29578] [transport.py] [_log()] server lang: <none>
2026-04-16T01:58:52.671 [DEBUG] [Thread-29578] [transport.py] [_log()] kex follows: False
2026-04-16T01:58:52.671 [DEBUG] [Thread-29578] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:58:52.671 [DEBUG] [Thread-29578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:58:52.671 [DEBUG] [Thread-29578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:58:52.671 [DEBUG] [Thread-29578] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:58:52.672 [DEBUG] [Thread-29578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:58:52.672 [DEBUG] [Thread-29578] [transport.py] [_log()] Compression: none
2026-04-16T01:58:52.672 [DEBUG] [Thread-29578] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:58:52.688 [DEBUG] [Thread-29578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:58:52.688 [DEBUG] [Thread-29578] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:58:52.689 [DEBUG] [Thread-29578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:58:52.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:58:52.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:58:52.690 [DEBUG] [Thread-29578] [transport.py] [_log()] userauth is OK
2026-04-16T01:58:52.690 [DEBUG] [Thread-29578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:58:52.690 [DEBUG] [Thread-29578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:58:52.690 [DEBUG] [Thread-29578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:58:52.690 [DEBUG] [Thread-29578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:58:52.714 [INFO] [Thread-29578] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:58:52.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:58:53.531 [DEBUG] [Thread-29578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:58:53.532 [DEBUG] [Thread-29578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:58:53.532 [DEBUG] [Thread-29578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:58:53.572 [DEBUG] [Thread-29578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:58:53.572 [DEBUG] [Thread-29578] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:58:53.575 [DEBUG] [Thread-29578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:58:53.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:58:53.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:58:53.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:58:53.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:58:53.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:58:53.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:58:53.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:58:53.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:58:53.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:58:53.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.998742 -999.00   +9.10   6.52     89   +7.50 1 1 1 3 1     0    0 1.46 -9.78 .NESW 7.0 6.5 91.0 9.2 9.4 -25.4 9.3 -24.2 9.0 -22.0 9.3 -24.3
2026-04-16T01:58:53.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:58:53.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:58:53.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.998742
2026-04-16T01:58:53.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:58:53.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:58:53.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:58:53.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:58:53.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:58:53.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:58:43', tmtdew=1.47764, humidity=90.3834, cloud=0.0, wind=12.8102, temperature=8.62975, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:58:11.309', atlas_cloud=1, atlas_rain=1, zp_data=[3.2837499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 2.5280000000000005, 3.1832499999999992, 2.5440000000000005, nan, nan, nan, 0.08149999999999835, 0.5727499999999992, 0.29349999999999987, 0.9564999999999992, 1.4107499999999984, 1.3179999999999978, 1.199749999999999, 0.14424999999999955, -0.011250000000000426, 0.010999999999999233, 0.049999999999998934, 0.1557499999999994, 0.08999999999999986, 0.09550000000000125, 0.1515000000000022, 0.12500000000000178, 0.002500000000001279, -0.10725000000000051], zp_timestamp='2026-04-15T23:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:58:53.598 [DEBUG] [Thread-29578] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:58:53.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:58:53.823 [DEBUG] [Thread-29581] [transport.py] [_log()] starting thread (client mode): 0xee9c7af0
2026-04-16T01:58:53.823 [DEBUG] [Thread-29581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:58:53.840 [DEBUG] [Thread-29581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:58:53.840 [INFO] [Thread-29581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:58:53.847 [DEBUG] [Thread-29581] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:58:53.847 [DEBUG] [Thread-29581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:58:53.847 [DEBUG] [Thread-29581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:58:53.847 [DEBUG] [Thread-29581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:58:53.848 [DEBUG] [Thread-29581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:58:53.848 [DEBUG] [Thread-29581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:58:53.848 [DEBUG] [Thread-29581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:58:53.848 [DEBUG] [Thread-29581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:58:53.848 [DEBUG] [Thread-29581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:58:53.848 [DEBUG] [Thread-29581] [transport.py] [_log()] client lang: <none>
2026-04-16T01:58:53.848 [DEBUG] [Thread-29581] [transport.py] [_log()] server lang: <none>
2026-04-16T01:58:53.848 [DEBUG] [Thread-29581] [transport.py] [_log()] kex follows: False
2026-04-16T01:58:53.848 [DEBUG] [Thread-29581] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:58:53.848 [DEBUG] [Thread-29581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:58:53.848 [DEBUG] [Thread-29581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:58:53.849 [DEBUG] [Thread-29581] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:58:53.849 [DEBUG] [Thread-29581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:58:53.849 [DEBUG] [Thread-29581] [transport.py] [_log()] Compression: none
2026-04-16T01:58:53.849 [DEBUG] [Thread-29581] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:58:53.906 [DEBUG] [Thread-29581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:58:53.906 [DEBUG] [Thread-29581] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:58:53.907 [DEBUG] [Thread-29581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:58:53.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:58:53.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:58:53.963 [DEBUG] [Thread-29581] [transport.py] [_log()] userauth is OK
2026-04-16T01:58:53.963 [DEBUG] [Thread-29581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:58:53.963 [DEBUG] [Thread-29581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:58:53.963 [DEBUG] [Thread-29581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:58:53.963 [DEBUG] [Thread-29581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:58:53.989 [INFO] [Thread-29581] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:58:53.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:58:53.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:58:54.842 [DEBUG] [Thread-29581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:58:54.843 [DEBUG] [Thread-29581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:58:54.890 [DEBUG] [Thread-29581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:58:54.890 [DEBUG] [Thread-29581] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:58:54.899 [DEBUG] [Thread-29581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:58:54.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:58:54.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')
2026-04-16T01:58: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') -> 00000000
2026-04-16T01:58:54.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:58:54.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:58:54.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:58:54.934 [DEBUG] [Thread-29581] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:58:59.876 [DEBUG] [Thread-29583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:59:03.935 [DEBUG] [Thread-29584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:59:18.980 [DEBUG] [Thread-29585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:59:24.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:59:24.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:59:24.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
2026-04-16T01:59:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 59, 18), 1.69168, 89.1751, 0.0, 9.98748, 8.93147, 1, 1, 0, 2, 0, 0),)
2026-04-16T01:59:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:59:18
2026-04-16T01:59:26.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T01:59:27.049 [DEBUG] [Thread-29586] [transport.py] [_log()] starting thread (client mode): 0xf1335ff0
2026-04-16T01:59:27.050 [DEBUG] [Thread-29586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:59:27.070 [DEBUG] [Thread-29586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T01:59:27.070 [INFO] [Thread-29586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T01:59:27.074 [DEBUG] [Thread-29586] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:59:27.074 [DEBUG] [Thread-29586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T01:59:27.074 [DEBUG] [Thread-29586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:59:27.074 [DEBUG] [Thread-29586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:59:27.074 [DEBUG] [Thread-29586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:59:27.074 [DEBUG] [Thread-29586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:59:27.074 [DEBUG] [Thread-29586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:59:27.074 [DEBUG] [Thread-29586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:59:27.074 [DEBUG] [Thread-29586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:59:27.075 [DEBUG] [Thread-29586] [transport.py] [_log()] client lang: <none>
2026-04-16T01:59:27.075 [DEBUG] [Thread-29586] [transport.py] [_log()] server lang: <none>
2026-04-16T01:59:27.075 [DEBUG] [Thread-29586] [transport.py] [_log()] kex follows: False
2026-04-16T01:59:27.075 [DEBUG] [Thread-29586] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:59:27.075 [DEBUG] [Thread-29586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:59:27.075 [DEBUG] [Thread-29586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:59:27.075 [DEBUG] [Thread-29586] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:59:27.075 [DEBUG] [Thread-29586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:59:27.075 [DEBUG] [Thread-29586] [transport.py] [_log()] Compression: none
2026-04-16T01:59:27.075 [DEBUG] [Thread-29586] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:59:27.093 [DEBUG] [Thread-29586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:59:27.093 [DEBUG] [Thread-29586] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:59:27.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T01:59:27.094 [DEBUG] [Thread-29586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T01:59:27.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:59:27.095 [DEBUG] [Thread-29586] [transport.py] [_log()] userauth is OK
2026-04-16T01:59:27.095 [DEBUG] [Thread-29586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:59:27.095 [DEBUG] [Thread-29586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:59:27.095 [DEBUG] [Thread-29586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T01:59:27.095 [DEBUG] [Thread-29586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:59:27.119 [INFO] [Thread-29586] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:59:27.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:59:27.914 [DEBUG] [Thread-29586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:59:27.915 [DEBUG] [Thread-29586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:59:27.916 [DEBUG] [Thread-29586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T01:59:27.955 [DEBUG] [Thread-29586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:59:27.955 [DEBUG] [Thread-29586] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:59:27.958 [DEBUG] [Thread-29586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:59:27.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:59:27.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T01:59:27.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T01:59:27.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T01:59:27.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:59:27.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T01:59:27.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:59:27.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:59:27.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T01:59:27.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.999089 -999.00   +9.10   6.39     89   +7.50 1 1 1 3 1     0    0 1.45 -9.78 .NESW 5.6 6.4 103.4 9.1 9.4 -25.5 9.3 -24.3 9.0 -21.9 9.3 -24.2
2026-04-16T01:59:27.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T01:59:27.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T01:59:27.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.999089
2026-04-16T01:59:27.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T01:59:27.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T01:59:27.986 [DEBUG] [Thread-29586] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:59:27.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T01:59:27.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T01:59:27.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T01:59:27.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:59:18', tmtdew=1.69168, humidity=89.1751, cloud=0.0, wind=9.98748, temperature=8.93147, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:58:41.290', atlas_cloud=1, atlas_rain=1, zp_data=[3.2837499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 2.5280000000000005, 3.1832499999999992, 2.5440000000000005, nan, nan, nan, 0.08149999999999835, 0.5727499999999992, 0.29349999999999987, 0.9564999999999992, 1.4107499999999984, 1.3179999999999978, 1.199749999999999, 0.14424999999999955, -0.011250000000000426, 0.010999999999999233, 0.049999999999998934, 0.1557499999999994, 0.08999999999999986, 0.09550000000000125, 0.1515000000000022, 0.12500000000000178, 0.002500000000001279, -0.10725000000000051], zp_timestamp='2026-04-15T23:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T01:59:28.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T01:59:28.245 [DEBUG] [Thread-29589] [transport.py] [_log()] starting thread (client mode): 0xee9c2860
2026-04-16T01:59:28.245 [DEBUG] [Thread-29589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T01:59:28.259 [DEBUG] [Thread-29589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T01:59:28.259 [INFO] [Thread-29589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T01:59:28.266 [DEBUG] [Thread-29589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T01:59:28.267 [DEBUG] [Thread-29589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T01:59:28.267 [DEBUG] [Thread-29589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T01:59:28.267 [DEBUG] [Thread-29589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:59:28.267 [DEBUG] [Thread-29589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T01:59:28.267 [DEBUG] [Thread-29589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:59:28.267 [DEBUG] [Thread-29589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T01:59:28.267 [DEBUG] [Thread-29589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T01:59:28.267 [DEBUG] [Thread-29589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T01:59:28.267 [DEBUG] [Thread-29589] [transport.py] [_log()] client lang: <none>
2026-04-16T01:59:28.267 [DEBUG] [Thread-29589] [transport.py] [_log()] server lang: <none>
2026-04-16T01:59:28.267 [DEBUG] [Thread-29589] [transport.py] [_log()] kex follows: False
2026-04-16T01:59:28.267 [DEBUG] [Thread-29589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T01:59:28.268 [DEBUG] [Thread-29589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T01:59:28.268 [DEBUG] [Thread-29589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T01:59:28.268 [DEBUG] [Thread-29589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T01:59:28.268 [DEBUG] [Thread-29589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T01:59:28.268 [DEBUG] [Thread-29589] [transport.py] [_log()] Compression: none
2026-04-16T01:59:28.268 [DEBUG] [Thread-29589] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T01:59:28.327 [DEBUG] [Thread-29589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T01:59:28.327 [DEBUG] [Thread-29589] [transport.py] [_log()] Switch to new keys ...
2026-04-16T01:59:28.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T01:59:28.328 [DEBUG] [Thread-29589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T01:59:28.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T01:59:28.383 [DEBUG] [Thread-29589] [transport.py] [_log()] userauth is OK
2026-04-16T01:59:28.383 [DEBUG] [Thread-29589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T01:59:28.383 [DEBUG] [Thread-29589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T01:59:28.383 [DEBUG] [Thread-29589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T01:59:28.384 [DEBUG] [Thread-29589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T01:59:28.402 [INFO] [Thread-29589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T01:59:28.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T01:59:28.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T01:59:29.196 [DEBUG] [Thread-29589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T01:59:29.196 [DEBUG] [Thread-29589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T01:59:29.244 [DEBUG] [Thread-29589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T01:59:29.244 [DEBUG] [Thread-29589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T01:59:29.256 [DEBUG] [Thread-29589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T01:59:29.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T01:59:29.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')
2026-04-16T01:59:29.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
2026-04-16T01:59:29.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T01:59:29.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T01:59:29.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T01:59:29.290 [DEBUG] [Thread-29589] [transport.py] [_log()] EOF in transport thread
2026-04-16T01:59:34.012 [DEBUG] [Thread-29591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:59:45.283 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:59:45.284 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:59:49.055 [DEBUG] [Thread-29592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T01:59:59.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T01:59:59.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T01:59:59.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
2026-04-16T02:00:00.025 [DEBUG] [Thread-29593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:00:00.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 59, 18), 1.69168, 89.1751, 0.0, 9.98748, 8.93147, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:00:00.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:59:18
2026-04-16T02:00:00.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:00:01.388 [DEBUG] [Thread-29594] [transport.py] [_log()] starting thread (client mode): 0xee906890
2026-04-16T02:00:01.389 [DEBUG] [Thread-29594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:00:01.399 [DEBUG] [Thread-29594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:00:01.399 [INFO] [Thread-29594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:00:01.400 [DEBUG] [Thread-29594] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:00:01.400 [DEBUG] [Thread-29594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:00:01.400 [DEBUG] [Thread-29594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:00:01.400 [DEBUG] [Thread-29594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:00:01.400 [DEBUG] [Thread-29594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:00:01.401 [DEBUG] [Thread-29594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:00:01.401 [DEBUG] [Thread-29594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:00:01.401 [DEBUG] [Thread-29594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:00:01.401 [DEBUG] [Thread-29594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:00:01.401 [DEBUG] [Thread-29594] [transport.py] [_log()] client lang: <none>
2026-04-16T02:00:01.401 [DEBUG] [Thread-29594] [transport.py] [_log()] server lang: <none>
2026-04-16T02:00:01.401 [DEBUG] [Thread-29594] [transport.py] [_log()] kex follows: False
2026-04-16T02:00:01.401 [DEBUG] [Thread-29594] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:00:01.401 [DEBUG] [Thread-29594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:00:01.401 [DEBUG] [Thread-29594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:00:01.402 [DEBUG] [Thread-29594] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:00:01.402 [DEBUG] [Thread-29594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:00:01.402 [DEBUG] [Thread-29594] [transport.py] [_log()] Compression: none
2026-04-16T02:00:01.402 [DEBUG] [Thread-29594] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:00:01.411 [DEBUG] [Thread-29594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:00:01.411 [DEBUG] [Thread-29594] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:00:01.411 [DEBUG] [Thread-29594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:00:01.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:00:01.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:00:01.412 [DEBUG] [Thread-29594] [transport.py] [_log()] userauth is OK
2026-04-16T02:00:01.412 [DEBUG] [Thread-29594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:00:01.413 [DEBUG] [Thread-29594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:00:01.413 [DEBUG] [Thread-29594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:00:01.413 [DEBUG] [Thread-29594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:00:01.428 [INFO] [Thread-29594] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:00:01.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:00:02.199 [DEBUG] [Thread-29594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:00:02.199 [DEBUG] [Thread-29594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:00:02.200 [DEBUG] [Thread-29594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:00:02.242 [DEBUG] [Thread-29594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:00:02.242 [DEBUG] [Thread-29594] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:00:02.245 [DEBUG] [Thread-29594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:00:02.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:00:02.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:00:02.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:00:02.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:00:02.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:00:02.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:00:02.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:00:02.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:00:02.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:00:02.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.999437 -999.00   +9.20   5.81     89   +7.50 1 1 1 3 1     0    0 1.46 -9.98 .NESW 8.0 5.8 92.7 8.3 9.4 -25.5 9.2 -24.3 9.0 -22.0 9.3 -24.1
2026-04-16T02:00:02.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:00:02.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:00:02.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.999437
2026-04-16T02:00:02.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:00:02.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:00:02.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:00:02.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:00:02.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:00:02.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:59:18', tmtdew=1.69168, humidity=89.1751, cloud=0.0, wind=9.98748, temperature=8.93147, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:59:11.357', atlas_cloud=1, atlas_rain=1, zp_data=[3.2837499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 2.5280000000000005, 3.1832499999999992, 2.5440000000000005, nan, nan, nan, 0.08149999999999835, 0.5727499999999992, 0.29349999999999987, 0.9564999999999992, 1.4107499999999984, 1.3179999999999978, 1.199749999999999, 0.14424999999999955, -0.011250000000000426, 0.010999999999999233, 0.049999999999998934, 0.1557499999999994, 0.08999999999999986, 0.09550000000000125, 0.1515000000000022, 0.12500000000000178, 0.002500000000001279, -0.10725000000000051], zp_timestamp='2026-04-15T23:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:00:02.264 [DEBUG] [Thread-29594] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:00:02.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:00:02.474 [DEBUG] [Thread-29597] [transport.py] [_log()] starting thread (client mode): 0xf1351cc0
2026-04-16T02:00:02.475 [DEBUG] [Thread-29597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:00:02.488 [DEBUG] [Thread-29597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:00:02.489 [INFO] [Thread-29597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:00:02.496 [DEBUG] [Thread-29597] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:00:02.496 [DEBUG] [Thread-29597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:00:02.496 [DEBUG] [Thread-29597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:00:02.496 [DEBUG] [Thread-29597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:00:02.496 [DEBUG] [Thread-29597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:00:02.496 [DEBUG] [Thread-29597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:00:02.496 [DEBUG] [Thread-29597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:00:02.496 [DEBUG] [Thread-29597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:00:02.496 [DEBUG] [Thread-29597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:00:02.496 [DEBUG] [Thread-29597] [transport.py] [_log()] client lang: <none>
2026-04-16T02:00:02.496 [DEBUG] [Thread-29597] [transport.py] [_log()] server lang: <none>
2026-04-16T02:00:02.496 [DEBUG] [Thread-29597] [transport.py] [_log()] kex follows: False
2026-04-16T02:00:02.496 [DEBUG] [Thread-29597] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:00:02.496 [DEBUG] [Thread-29597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:00:02.497 [DEBUG] [Thread-29597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:00:02.497 [DEBUG] [Thread-29597] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:00:02.497 [DEBUG] [Thread-29597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:00:02.497 [DEBUG] [Thread-29597] [transport.py] [_log()] Compression: none
2026-04-16T02:00:02.497 [DEBUG] [Thread-29597] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:00:02.554 [DEBUG] [Thread-29597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:00:02.554 [DEBUG] [Thread-29597] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:00:02.554 [DEBUG] [Thread-29597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:00:02.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:00:02.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:00:02.610 [DEBUG] [Thread-29597] [transport.py] [_log()] userauth is OK
2026-04-16T02:00:02.611 [DEBUG] [Thread-29597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:00:02.611 [DEBUG] [Thread-29597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:00:02.611 [DEBUG] [Thread-29597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:00:02.611 [DEBUG] [Thread-29597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:00:02.629 [INFO] [Thread-29597] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:00:02.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:00:02.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:00:03.460 [DEBUG] [Thread-29597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:00:03.461 [DEBUG] [Thread-29597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:00:03.508 [DEBUG] [Thread-29597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:00:03.509 [DEBUG] [Thread-29597] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:00:03.517 [DEBUG] [Thread-29597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:00:03.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:00:03.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')
2026-04-16T02:00:03.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
2026-04-16T02:00:03.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:00:03.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:00:03.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:00:03.548 [DEBUG] [Thread-29597] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:00:04.086 [DEBUG] [Thread-29599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:00:19.120 [DEBUG] [Thread-29600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:00:33.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:00:33.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:00:33.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T02:00:34.149 [DEBUG] [Thread-29601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:00:34.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 1, 59, 54), 1.46756, 90.4502, 0.0, 11.893, 8.6964, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:00:34.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 01:59:54
2026-04-16T02:00:35.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:00:35.664 [DEBUG] [Thread-29602] [transport.py] [_log()] starting thread (client mode): 0xf13cab90
2026-04-16T02:00:35.665 [DEBUG] [Thread-29602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:00:35.685 [DEBUG] [Thread-29602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:00:35.685 [INFO] [Thread-29602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:00:35.689 [DEBUG] [Thread-29602] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:00:35.689 [DEBUG] [Thread-29602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:00:35.689 [DEBUG] [Thread-29602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:00:35.689 [DEBUG] [Thread-29602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:00:35.689 [DEBUG] [Thread-29602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:00:35.689 [DEBUG] [Thread-29602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:00:35.689 [DEBUG] [Thread-29602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:00:35.689 [DEBUG] [Thread-29602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:00:35.689 [DEBUG] [Thread-29602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:00:35.689 [DEBUG] [Thread-29602] [transport.py] [_log()] client lang: <none>
2026-04-16T02:00:35.689 [DEBUG] [Thread-29602] [transport.py] [_log()] server lang: <none>
2026-04-16T02:00:35.690 [DEBUG] [Thread-29602] [transport.py] [_log()] kex follows: False
2026-04-16T02:00:35.690 [DEBUG] [Thread-29602] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:00:35.690 [DEBUG] [Thread-29602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:00:35.690 [DEBUG] [Thread-29602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:00:35.690 [DEBUG] [Thread-29602] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:00:35.690 [DEBUG] [Thread-29602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:00:35.690 [DEBUG] [Thread-29602] [transport.py] [_log()] Compression: none
2026-04-16T02:00:35.690 [DEBUG] [Thread-29602] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:00:35.707 [DEBUG] [Thread-29602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:00:35.707 [DEBUG] [Thread-29602] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:00:35.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:00:35.708 [DEBUG] [Thread-29602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:00:35.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:00:35.709 [DEBUG] [Thread-29602] [transport.py] [_log()] userauth is OK
2026-04-16T02:00:35.709 [DEBUG] [Thread-29602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:00:35.709 [DEBUG] [Thread-29602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:00:35.709 [DEBUG] [Thread-29602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:00:35.710 [DEBUG] [Thread-29602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:00:35.734 [INFO] [Thread-29602] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:00:35.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:00:37.232 [DEBUG] [Thread-29602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:00:37.232 [DEBUG] [Thread-29602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:00:37.233 [DEBUG] [Thread-29602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:00:37.273 [DEBUG] [Thread-29602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:00:37.273 [DEBUG] [Thread-29602] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:00:37.276 [DEBUG] [Thread-29602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:00:37.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:00:37.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:00:37.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:00:37.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:00:37.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:00:37.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:00:37.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:00:37.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:00:37.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:00:37.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61145.999784 -999.00   +9.20   6.40     89   +7.50 1 1 1 3 1     0    0 1.44 -10.10 .NESW 6.2 6.4 114.6 8.6 9.4 -25.3 9.3 -24.3 9.0 -22.1 9.3 -24.3
2026-04-16T02:00:37.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:00:37.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:00:37.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61145.999784
2026-04-16T02:00:37.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:00:37.303 [DEBUG] [Thread-29602] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:00:37.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:00:37.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:00:37.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:00:37.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:00:37.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T01:59:54', tmtdew=1.46756, humidity=90.4502, cloud=0.0, wind=11.893, temperature=8.6964, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-15T23:59:41.338', atlas_cloud=1, atlas_rain=1, zp_data=[3.2837499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 2.5280000000000005, 3.1832499999999992, 2.5440000000000005, nan, nan, nan, 0.08149999999999835, 0.5727499999999992, 0.29349999999999987, 0.9564999999999992, 1.4107499999999984, 1.3179999999999978, 1.199749999999999, 0.14424999999999955, -0.011250000000000426, 0.010999999999999233, 0.049999999999998934, 0.1557499999999994, 0.08999999999999986, 0.09550000000000125, 0.1515000000000022, 0.12500000000000178, 0.002500000000001279, -0.10725000000000051], zp_timestamp='2026-04-15T23:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:00:37.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:00:37.574 [DEBUG] [Thread-29605] [transport.py] [_log()] starting thread (client mode): 0xee942050
2026-04-16T02:00:37.574 [DEBUG] [Thread-29605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:00:37.593 [DEBUG] [Thread-29605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:00:37.594 [INFO] [Thread-29605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:00:37.601 [DEBUG] [Thread-29605] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:00:37.601 [DEBUG] [Thread-29605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:00:37.601 [DEBUG] [Thread-29605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:00:37.601 [DEBUG] [Thread-29605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:00:37.601 [DEBUG] [Thread-29605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:00:37.601 [DEBUG] [Thread-29605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:00:37.601 [DEBUG] [Thread-29605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:00:37.602 [DEBUG] [Thread-29605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:00:37.602 [DEBUG] [Thread-29605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:00:37.602 [DEBUG] [Thread-29605] [transport.py] [_log()] client lang: <none>
2026-04-16T02:00:37.602 [DEBUG] [Thread-29605] [transport.py] [_log()] server lang: <none>
2026-04-16T02:00:37.602 [DEBUG] [Thread-29605] [transport.py] [_log()] kex follows: False
2026-04-16T02:00:37.602 [DEBUG] [Thread-29605] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:00:37.602 [DEBUG] [Thread-29605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:00:37.602 [DEBUG] [Thread-29605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:00:37.602 [DEBUG] [Thread-29605] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:00:37.602 [DEBUG] [Thread-29605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:00:37.603 [DEBUG] [Thread-29605] [transport.py] [_log()] Compression: none
2026-04-16T02:00:37.603 [DEBUG] [Thread-29605] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:00:37.658 [DEBUG] [Thread-29605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:00:37.659 [DEBUG] [Thread-29605] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:00:37.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:00:37.659 [DEBUG] [Thread-29605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:00:37.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:00:37.715 [DEBUG] [Thread-29605] [transport.py] [_log()] userauth is OK
2026-04-16T02:00:37.715 [DEBUG] [Thread-29605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:00:37.715 [DEBUG] [Thread-29605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:00:37.716 [DEBUG] [Thread-29605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:00:37.716 [DEBUG] [Thread-29605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:00:37.742 [INFO] [Thread-29605] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:00:37.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:00:37.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:00:38.533 [DEBUG] [Thread-29605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:00:38.533 [DEBUG] [Thread-29605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:00:38.581 [DEBUG] [Thread-29605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:00:38.581 [DEBUG] [Thread-29605] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:00:38.590 [DEBUG] [Thread-29605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:00:38.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:00:38.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')
2026-04-16T02:00:38.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
2026-04-16T02:00:38.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:00:38.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:00:38.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:00:38.625 [DEBUG] [Thread-29605] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:00:45.489 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:00:45.490 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:00:49.179 [DEBUG] [Thread-29607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:01:00.170 [DEBUG] [Thread-29608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:01:04.218 [DEBUG] [Thread-29609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:01:08.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:01:08.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:01:08.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
2026-04-16T02:01:09.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 0, 29), 1.6811, 89.2417, 0.0, 10.0404, 8.9482, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:01:09.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:00:29
2026-04-16T02:01:10.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:01:10.918 [DEBUG] [Thread-29610] [transport.py] [_log()] starting thread (client mode): 0xf13e2230
2026-04-16T02:01:10.919 [DEBUG] [Thread-29610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:01:10.938 [DEBUG] [Thread-29610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:01:10.938 [INFO] [Thread-29610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:01:10.941 [DEBUG] [Thread-29610] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:01:10.942 [DEBUG] [Thread-29610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:01:10.942 [DEBUG] [Thread-29610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:01:10.942 [DEBUG] [Thread-29610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:01:10.942 [DEBUG] [Thread-29610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:01:10.942 [DEBUG] [Thread-29610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:01:10.942 [DEBUG] [Thread-29610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:01:10.942 [DEBUG] [Thread-29610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:01:10.942 [DEBUG] [Thread-29610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:01:10.942 [DEBUG] [Thread-29610] [transport.py] [_log()] client lang: <none>
2026-04-16T02:01:10.942 [DEBUG] [Thread-29610] [transport.py] [_log()] server lang: <none>
2026-04-16T02:01:10.942 [DEBUG] [Thread-29610] [transport.py] [_log()] kex follows: False
2026-04-16T02:01:10.942 [DEBUG] [Thread-29610] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:01:10.942 [DEBUG] [Thread-29610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:01:10.942 [DEBUG] [Thread-29610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:01:10.942 [DEBUG] [Thread-29610] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:01:10.943 [DEBUG] [Thread-29610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:01:10.943 [DEBUG] [Thread-29610] [transport.py] [_log()] Compression: none
2026-04-16T02:01:10.943 [DEBUG] [Thread-29610] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:01:10.959 [DEBUG] [Thread-29610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:01:10.960 [DEBUG] [Thread-29610] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:01:10.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:01:10.960 [DEBUG] [Thread-29610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:01:10.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:01:10.961 [DEBUG] [Thread-29610] [transport.py] [_log()] userauth is OK
2026-04-16T02:01:10.961 [DEBUG] [Thread-29610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:01:10.961 [DEBUG] [Thread-29610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:01:10.961 [DEBUG] [Thread-29610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:01:10.961 [DEBUG] [Thread-29610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:01:10.974 [INFO] [Thread-29610] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:01:10.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:01:11.798 [DEBUG] [Thread-29610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:01:11.798 [DEBUG] [Thread-29610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:01:11.799 [DEBUG] [Thread-29610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:01:11.839 [DEBUG] [Thread-29610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:01:11.839 [DEBUG] [Thread-29610] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:01:11.842 [DEBUG] [Thread-29610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:01:11.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:01:11.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:01:11.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:01:11.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:01:11.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:01:11.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:01:11.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:01:11.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:01:11.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:01:11.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.000478 -999.00   +9.20   7.98     89   +7.50 1 1 1 3 1     0    0 -999.00 0.00 .NESW 6.8 8.0 127.4 10.2 9.4 -25.4 9.3 -24.1 9.0 -22.0 9.3 -24.0
2026-04-16T02:01:11.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:01:11.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:01:11.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.000478
2026-04-16T02:01:11.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:01:11.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:01:11.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:01:11.866 [DEBUG] [Thread-29610] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:01:11.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:01:11.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:01:11.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:00:29', tmtdew=1.6811, humidity=89.2417, cloud=0.0, wind=10.0404, temperature=8.9482, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:00:41.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5695000000000006, 3.3382499999999995, 2.5045, nan, nan, nan, nan, 1.61775, 0.4925000000000015, 1.6359999999999992, 1.459249999999999, 1.8329999999999984, 1.7297499999999983, 0.6132500000000007, 0.07925000000000004, 0.16799999999999926, 0.14749999999999908, 0.27674999999999983, 0.2469999999999999, 0.21250000000000036, 0.26750000000000096, 0.18900000000000183, 0.051000000000000156, -0.08325000000000138], zp_timestamp='2026-04-16T00:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:01:12.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:01:12.129 [DEBUG] [Thread-29613] [transport.py] [_log()] starting thread (client mode): 0xee993c40
2026-04-16T02:01:12.129 [DEBUG] [Thread-29613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:01:12.143 [DEBUG] [Thread-29613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:01:12.143 [INFO] [Thread-29613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:01:12.152 [DEBUG] [Thread-29613] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:01:12.152 [DEBUG] [Thread-29613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:01:12.152 [DEBUG] [Thread-29613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:01:12.152 [DEBUG] [Thread-29613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:01:12.152 [DEBUG] [Thread-29613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:01:12.152 [DEBUG] [Thread-29613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:01:12.152 [DEBUG] [Thread-29613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:01:12.152 [DEBUG] [Thread-29613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:01:12.153 [DEBUG] [Thread-29613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:01:12.153 [DEBUG] [Thread-29613] [transport.py] [_log()] client lang: <none>
2026-04-16T02:01:12.153 [DEBUG] [Thread-29613] [transport.py] [_log()] server lang: <none>
2026-04-16T02:01:12.153 [DEBUG] [Thread-29613] [transport.py] [_log()] kex follows: False
2026-04-16T02:01:12.153 [DEBUG] [Thread-29613] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:01:12.153 [DEBUG] [Thread-29613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:01:12.153 [DEBUG] [Thread-29613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:01:12.153 [DEBUG] [Thread-29613] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:01:12.153 [DEBUG] [Thread-29613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:01:12.153 [DEBUG] [Thread-29613] [transport.py] [_log()] Compression: none
2026-04-16T02:01:12.153 [DEBUG] [Thread-29613] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:01:12.210 [DEBUG] [Thread-29613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:01:12.210 [DEBUG] [Thread-29613] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:01:12.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:01:12.211 [DEBUG] [Thread-29613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:01:12.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:01:12.267 [DEBUG] [Thread-29613] [transport.py] [_log()] userauth is OK
2026-04-16T02:01:12.268 [DEBUG] [Thread-29613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:01:12.268 [DEBUG] [Thread-29613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:01:12.268 [DEBUG] [Thread-29613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:01:12.268 [DEBUG] [Thread-29613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:01:12.293 [INFO] [Thread-29613] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:01:12.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:01:12.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:01:13.092 [DEBUG] [Thread-29613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:01:13.092 [DEBUG] [Thread-29613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:01:13.140 [DEBUG] [Thread-29613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:01:13.140 [DEBUG] [Thread-29613] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:01:13.148 [DEBUG] [Thread-29613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:01:13.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:01:13.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')
2026-04-16T02:01:13.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
2026-04-16T02:01:13.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:01:13.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:01:13.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:01:13.184 [DEBUG] [Thread-29613] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:01:19.250 [DEBUG] [Thread-29615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:01:34.303 [DEBUG] [Thread-29616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:01:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:01:43.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:01:43.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T02:01:44.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 1, 5), 1.68649, 89.2083, 0.0, 9.96984, 8.94808, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:01:44.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:01:05
2026-04-16T02:01:44.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:01:45.367 [DEBUG] [Thread-29617] [transport.py] [_log()] starting thread (client mode): 0xee9906d0
2026-04-16T02:01:45.367 [DEBUG] [Thread-29617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:01:45.385 [DEBUG] [Thread-29617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:01:45.386 [INFO] [Thread-29617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:01:45.389 [DEBUG] [Thread-29617] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:01:45.389 [DEBUG] [Thread-29617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:01:45.389 [DEBUG] [Thread-29617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:01:45.389 [DEBUG] [Thread-29617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:01:45.389 [DEBUG] [Thread-29617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:01:45.389 [DEBUG] [Thread-29617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:01:45.389 [DEBUG] [Thread-29617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:01:45.389 [DEBUG] [Thread-29617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:01:45.389 [DEBUG] [Thread-29617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:01:45.389 [DEBUG] [Thread-29617] [transport.py] [_log()] client lang: <none>
2026-04-16T02:01:45.389 [DEBUG] [Thread-29617] [transport.py] [_log()] server lang: <none>
2026-04-16T02:01:45.390 [DEBUG] [Thread-29617] [transport.py] [_log()] kex follows: False
2026-04-16T02:01:45.390 [DEBUG] [Thread-29617] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:01:45.390 [DEBUG] [Thread-29617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:01:45.390 [DEBUG] [Thread-29617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:01:45.390 [DEBUG] [Thread-29617] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:01:45.390 [DEBUG] [Thread-29617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:01:45.390 [DEBUG] [Thread-29617] [transport.py] [_log()] Compression: none
2026-04-16T02:01:45.390 [DEBUG] [Thread-29617] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:01:45.406 [DEBUG] [Thread-29617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:01:45.406 [DEBUG] [Thread-29617] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:01:45.406 [DEBUG] [Thread-29617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:01:45.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:01:45.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:01:45.407 [DEBUG] [Thread-29617] [transport.py] [_log()] userauth is OK
2026-04-16T02:01:45.408 [DEBUG] [Thread-29617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:01:45.408 [DEBUG] [Thread-29617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:01:45.408 [DEBUG] [Thread-29617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:01:45.408 [DEBUG] [Thread-29617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:01:45.441 [INFO] [Thread-29617] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:01:45.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:01:45.695 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:01:45.696 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:01:46.222 [DEBUG] [Thread-29617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:01:46.222 [DEBUG] [Thread-29617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:01:46.223 [DEBUG] [Thread-29617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:01:46.265 [DEBUG] [Thread-29617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:01:46.265 [DEBUG] [Thread-29617] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:01:46.267 [DEBUG] [Thread-29617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:01:46.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:01:46.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:01:46.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:01:46.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:01:46.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:01:46.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:01:46.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:01:46.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:01:46.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:01:46.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.000825 -999.00   +9.20   7.83     89   +7.50 1 1 1 3 1     0    0 -999.00 0.00 .NESW 9.3 7.8 87.2 9.8 9.4 -25.3 9.3 -24.1 9.0 -22.0 9.3 -24.0
2026-04-16T02:01:46.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:01:46.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:01:46.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.000825
2026-04-16T02:01:46.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:01:46.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:01:46.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:01:46.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:01:46.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:01:46.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:01:05', tmtdew=1.68649, humidity=89.2083, cloud=0.0, wind=9.96984, temperature=8.94808, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:01:11.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5695000000000006, 3.3382499999999995, 2.5045, nan, nan, nan, nan, 1.61775, 0.4925000000000015, 1.6359999999999992, 1.459249999999999, 1.8329999999999984, 1.7297499999999983, 0.6132500000000007, 0.07925000000000004, 0.16799999999999926, 0.14749999999999908, 0.27674999999999983, 0.2469999999999999, 0.21250000000000036, 0.26750000000000096, 0.18900000000000183, 0.051000000000000156, -0.08325000000000138], zp_timestamp='2026-04-16T00:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:01:46.288 [DEBUG] [Thread-29617] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:01:46.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:01:46.507 [DEBUG] [Thread-29620] [transport.py] [_log()] starting thread (client mode): 0xf13e2500
2026-04-16T02:01:46.507 [DEBUG] [Thread-29620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:01:46.522 [DEBUG] [Thread-29620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:01:46.522 [INFO] [Thread-29620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:01:46.533 [DEBUG] [Thread-29620] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:01:46.533 [DEBUG] [Thread-29620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:01:46.533 [DEBUG] [Thread-29620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:01:46.533 [DEBUG] [Thread-29620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:01:46.533 [DEBUG] [Thread-29620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:01:46.534 [DEBUG] [Thread-29620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:01:46.534 [DEBUG] [Thread-29620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:01:46.534 [DEBUG] [Thread-29620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:01:46.534 [DEBUG] [Thread-29620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:01:46.534 [DEBUG] [Thread-29620] [transport.py] [_log()] client lang: <none>
2026-04-16T02:01:46.534 [DEBUG] [Thread-29620] [transport.py] [_log()] server lang: <none>
2026-04-16T02:01:46.534 [DEBUG] [Thread-29620] [transport.py] [_log()] kex follows: False
2026-04-16T02:01:46.534 [DEBUG] [Thread-29620] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:01:46.534 [DEBUG] [Thread-29620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:01:46.534 [DEBUG] [Thread-29620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:01:46.534 [DEBUG] [Thread-29620] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:01:46.534 [DEBUG] [Thread-29620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:01:46.535 [DEBUG] [Thread-29620] [transport.py] [_log()] Compression: none
2026-04-16T02:01:46.535 [DEBUG] [Thread-29620] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:01:46.589 [DEBUG] [Thread-29620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:01:46.589 [DEBUG] [Thread-29620] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:01:46.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:01:46.590 [DEBUG] [Thread-29620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:01:46.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:01:46.653 [DEBUG] [Thread-29620] [transport.py] [_log()] userauth is OK
2026-04-16T02:01:46.653 [DEBUG] [Thread-29620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:01:46.653 [DEBUG] [Thread-29620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:01:46.653 [DEBUG] [Thread-29620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:01:46.654 [DEBUG] [Thread-29620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:01:46.683 [INFO] [Thread-29620] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:01:46.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:01:46.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:01:47.537 [DEBUG] [Thread-29620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:01:47.537 [DEBUG] [Thread-29620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:01:47.587 [DEBUG] [Thread-29620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:01:47.588 [DEBUG] [Thread-29620] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:01:47.600 [DEBUG] [Thread-29620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:01:47.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:01:47.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')
2026-04-16T02:01:47.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
2026-04-16T02:01:47.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:01:47.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:01:47.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:01:47.642 [DEBUG] [Thread-29620] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:01:49.333 [DEBUG] [Thread-29622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:02:00.315 [DEBUG] [Thread-29623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:02:04.376 [DEBUG] [Thread-29624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:02:17.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:02:17.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:02:17.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
2026-04-16T02:02:19.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 1, 40), 1.45654, 90.5162, 0.0, 12.6338, 8.66298, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:02:19.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:01:40
2026-04-16T02:02:19.406 [DEBUG] [Thread-29625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:02:19.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:02:20.243 [DEBUG] [Thread-29626] [transport.py] [_log()] starting thread (client mode): 0xee993580
2026-04-16T02:02:20.244 [DEBUG] [Thread-29626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:02:20.264 [DEBUG] [Thread-29626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:02:20.264 [INFO] [Thread-29626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:02:20.267 [DEBUG] [Thread-29626] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:02:20.267 [DEBUG] [Thread-29626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:02:20.267 [DEBUG] [Thread-29626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:02:20.267 [DEBUG] [Thread-29626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:02:20.267 [DEBUG] [Thread-29626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:02:20.267 [DEBUG] [Thread-29626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:02:20.267 [DEBUG] [Thread-29626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:02:20.267 [DEBUG] [Thread-29626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:02:20.267 [DEBUG] [Thread-29626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:02:20.267 [DEBUG] [Thread-29626] [transport.py] [_log()] client lang: <none>
2026-04-16T02:02:20.268 [DEBUG] [Thread-29626] [transport.py] [_log()] server lang: <none>
2026-04-16T02:02:20.268 [DEBUG] [Thread-29626] [transport.py] [_log()] kex follows: False
2026-04-16T02:02:20.268 [DEBUG] [Thread-29626] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:02:20.268 [DEBUG] [Thread-29626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:02:20.268 [DEBUG] [Thread-29626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:02:20.268 [DEBUG] [Thread-29626] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:02:20.268 [DEBUG] [Thread-29626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:02:20.268 [DEBUG] [Thread-29626] [transport.py] [_log()] Compression: none
2026-04-16T02:02:20.268 [DEBUG] [Thread-29626] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:02:20.284 [DEBUG] [Thread-29626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:02:20.285 [DEBUG] [Thread-29626] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:02:20.285 [DEBUG] [Thread-29626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:02:20.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:02:20.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:02:20.286 [DEBUG] [Thread-29626] [transport.py] [_log()] userauth is OK
2026-04-16T02:02:20.287 [DEBUG] [Thread-29626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:02:20.287 [DEBUG] [Thread-29626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:02:20.287 [DEBUG] [Thread-29626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:02:20.287 [DEBUG] [Thread-29626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:02:20.305 [INFO] [Thread-29626] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:02:20.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:02:21.120 [DEBUG] [Thread-29626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:02:21.120 [DEBUG] [Thread-29626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:02:21.121 [DEBUG] [Thread-29626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:02:21.164 [DEBUG] [Thread-29626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:02:21.165 [DEBUG] [Thread-29626] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:02:21.168 [DEBUG] [Thread-29626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:02:21.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:02:21.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:02:21.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:02:21.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:02:21.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:02:21.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:02:21.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:02:21.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:02:21.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:02:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.001173 -999.00   +9.20   8.11     89   +7.50 1 1 1 3 1     0    0 -999.00 0.00 .NESW 7.3 8.1 86.0 9.6 9.4 -25.4 9.3 -24.2 9.0 -21.9 9.3 -24.1
2026-04-16T02:02:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:02:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:02:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.001173
2026-04-16T02:02:21.187 [DEBUG] [Thread-29626] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:02:21.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:02:21.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:02:21.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:02:21.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:02:21.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:02:21.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:01:40', tmtdew=1.45654, humidity=90.5162, cloud=0.0, wind=12.6338, temperature=8.66298, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:01:41.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5695000000000006, 3.3382499999999995, 2.5045, nan, nan, nan, nan, 1.61775, 0.4925000000000015, 1.6359999999999992, 1.459249999999999, 1.8329999999999984, 1.7297499999999983, 0.6132500000000007, 0.07925000000000004, 0.16799999999999926, 0.14749999999999908, 0.27674999999999983, 0.2469999999999999, 0.21250000000000036, 0.26750000000000096, 0.18900000000000183, 0.051000000000000156, -0.08325000000000138], zp_timestamp='2026-04-16T00:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:02:21.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:02:21.448 [DEBUG] [Thread-29629] [transport.py] [_log()] starting thread (client mode): 0xee9924a0
2026-04-16T02:02:21.448 [DEBUG] [Thread-29629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:02:21.462 [DEBUG] [Thread-29629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:02:21.462 [INFO] [Thread-29629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:02:21.470 [DEBUG] [Thread-29629] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:02:21.470 [DEBUG] [Thread-29629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:02:21.470 [DEBUG] [Thread-29629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:02:21.470 [DEBUG] [Thread-29629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:02:21.470 [DEBUG] [Thread-29629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:02:21.470 [DEBUG] [Thread-29629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:02:21.470 [DEBUG] [Thread-29629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:02:21.471 [DEBUG] [Thread-29629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:02:21.471 [DEBUG] [Thread-29629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:02:21.471 [DEBUG] [Thread-29629] [transport.py] [_log()] client lang: <none>
2026-04-16T02:02:21.471 [DEBUG] [Thread-29629] [transport.py] [_log()] server lang: <none>
2026-04-16T02:02:21.471 [DEBUG] [Thread-29629] [transport.py] [_log()] kex follows: False
2026-04-16T02:02:21.471 [DEBUG] [Thread-29629] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:02:21.471 [DEBUG] [Thread-29629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:02:21.471 [DEBUG] [Thread-29629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:02:21.471 [DEBUG] [Thread-29629] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:02:21.471 [DEBUG] [Thread-29629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:02:21.471 [DEBUG] [Thread-29629] [transport.py] [_log()] Compression: none
2026-04-16T02:02:21.471 [DEBUG] [Thread-29629] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:02:21.526 [DEBUG] [Thread-29629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:02:21.527 [DEBUG] [Thread-29629] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:02:21.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:02:21.527 [DEBUG] [Thread-29629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:02:21.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:02:21.588 [DEBUG] [Thread-29629] [transport.py] [_log()] userauth is OK
2026-04-16T02:02:21.589 [DEBUG] [Thread-29629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:02:21.589 [DEBUG] [Thread-29629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:02:21.589 [DEBUG] [Thread-29629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:02:21.589 [DEBUG] [Thread-29629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:02:21.614 [INFO] [Thread-29629] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:02:21.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:02:21.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:02:22.422 [DEBUG] [Thread-29629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:02:22.423 [DEBUG] [Thread-29629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:02:22.470 [DEBUG] [Thread-29629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:02:22.470 [DEBUG] [Thread-29629] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:02:22.479 [DEBUG] [Thread-29629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:02:22.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:02:22.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')
2026-04-16T02:02:22.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
2026-04-16T02:02:22.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:02:22.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:02:22.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:02:22.510 [DEBUG] [Thread-29629] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:02:34.437 [DEBUG] [Thread-29631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:02:45.900 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:02:45.902 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:02:49.480 [DEBUG] [Thread-29632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:02:52.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:02:52.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:02:52.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
2026-04-16T02:02:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 2, 16), 1.68115, 89.2413, 0.0, 9.91692, 8.94798, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:02:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:02:16
2026-04-16T02:02:54.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:02:54.710 [DEBUG] [Thread-29633] [transport.py] [_log()] starting thread (client mode): 0xee990490
2026-04-16T02:02:54.711 [DEBUG] [Thread-29633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:02:54.731 [DEBUG] [Thread-29633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:02:54.731 [INFO] [Thread-29633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:02:54.734 [DEBUG] [Thread-29633] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:02:54.734 [DEBUG] [Thread-29633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:02:54.734 [DEBUG] [Thread-29633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:02:54.734 [DEBUG] [Thread-29633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:02:54.734 [DEBUG] [Thread-29633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:02:54.734 [DEBUG] [Thread-29633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:02:54.735 [DEBUG] [Thread-29633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:02:54.735 [DEBUG] [Thread-29633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:02:54.735 [DEBUG] [Thread-29633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:02:54.735 [DEBUG] [Thread-29633] [transport.py] [_log()] client lang: <none>
2026-04-16T02:02:54.735 [DEBUG] [Thread-29633] [transport.py] [_log()] server lang: <none>
2026-04-16T02:02:54.735 [DEBUG] [Thread-29633] [transport.py] [_log()] kex follows: False
2026-04-16T02:02:54.735 [DEBUG] [Thread-29633] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:02:54.735 [DEBUG] [Thread-29633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:02:54.735 [DEBUG] [Thread-29633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:02:54.735 [DEBUG] [Thread-29633] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:02:54.735 [DEBUG] [Thread-29633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:02:54.736 [DEBUG] [Thread-29633] [transport.py] [_log()] Compression: none
2026-04-16T02:02:54.736 [DEBUG] [Thread-29633] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:02:54.752 [DEBUG] [Thread-29633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:02:54.753 [DEBUG] [Thread-29633] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:02:54.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:02:54.754 [DEBUG] [Thread-29633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:02:54.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:02:54.755 [DEBUG] [Thread-29633] [transport.py] [_log()] userauth is OK
2026-04-16T02:02:54.755 [DEBUG] [Thread-29633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:02:54.755 [DEBUG] [Thread-29633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:02:54.755 [DEBUG] [Thread-29633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:02:54.755 [DEBUG] [Thread-29633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:02:54.773 [INFO] [Thread-29633] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:02:54.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:02:55.557 [DEBUG] [Thread-29633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:02:55.557 [DEBUG] [Thread-29633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:02:55.558 [DEBUG] [Thread-29633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:02:55.598 [DEBUG] [Thread-29633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:02:55.598 [DEBUG] [Thread-29633] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:02:55.601 [DEBUG] [Thread-29633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:02:55.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:02:55.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:02:55.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:02:55.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:02:55.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:02:55.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:02:55.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:02:55.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:02:55.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:02:55.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.001520 -999.00   +9.20   5.36     89   +7.50 1 2 1 3 1     0    0 -999.00 0.00 .NESW 7.6 5.4 104.6 8.0 9.5 -25.4 9.3 -24.1 9.0 -21.9 9.3 -24.1
2026-04-16T02:02:55.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:02:55.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:02:55.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.001520
2026-04-16T02:02:55.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:02:55.628 [DEBUG] [Thread-29633] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:02:55.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:02:55.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:02:55.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:02:55.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-16T02:02:55.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:02:16', tmtdew=1.68115, humidity=89.2413, cloud=0.0, wind=9.91692, temperature=8.94798, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:02:11.328', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5695000000000006, 3.3382499999999995, 2.5045, nan, nan, nan, nan, 1.61775, 0.4925000000000015, 1.6359999999999992, 1.459249999999999, 1.8329999999999984, 1.7297499999999983, 0.6132500000000007, 0.07925000000000004, 0.16799999999999926, 0.14749999999999908, 0.27674999999999983, 0.2469999999999999, 0.21250000000000036, 0.26750000000000096, 0.18900000000000183, 0.051000000000000156, -0.08325000000000138], zp_timestamp='2026-04-16T00:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:02:55.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:02:55.885 [DEBUG] [Thread-29636] [transport.py] [_log()] starting thread (client mode): 0xee9c7520
2026-04-16T02:02:55.885 [DEBUG] [Thread-29636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:02:55.901 [DEBUG] [Thread-29636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:02:55.901 [INFO] [Thread-29636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:02:55.908 [DEBUG] [Thread-29636] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:02:55.908 [DEBUG] [Thread-29636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:02:55.908 [DEBUG] [Thread-29636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:02:55.908 [DEBUG] [Thread-29636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:02:55.909 [DEBUG] [Thread-29636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:02:55.909 [DEBUG] [Thread-29636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:02:55.909 [DEBUG] [Thread-29636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:02:55.909 [DEBUG] [Thread-29636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:02:55.909 [DEBUG] [Thread-29636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:02:55.909 [DEBUG] [Thread-29636] [transport.py] [_log()] client lang: <none>
2026-04-16T02:02:55.909 [DEBUG] [Thread-29636] [transport.py] [_log()] server lang: <none>
2026-04-16T02:02:55.909 [DEBUG] [Thread-29636] [transport.py] [_log()] kex follows: False
2026-04-16T02:02:55.909 [DEBUG] [Thread-29636] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:02:55.909 [DEBUG] [Thread-29636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:02:55.909 [DEBUG] [Thread-29636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:02:55.910 [DEBUG] [Thread-29636] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:02:55.910 [DEBUG] [Thread-29636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:02:55.910 [DEBUG] [Thread-29636] [transport.py] [_log()] Compression: none
2026-04-16T02:02:55.910 [DEBUG] [Thread-29636] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:02:55.966 [DEBUG] [Thread-29636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:02:55.967 [DEBUG] [Thread-29636] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:02:55.967 [DEBUG] [Thread-29636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:02:55.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:02:55.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:02:56.023 [DEBUG] [Thread-29636] [transport.py] [_log()] userauth is OK
2026-04-16T02:02:56.023 [DEBUG] [Thread-29636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:02:56.023 [DEBUG] [Thread-29636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:02:56.023 [DEBUG] [Thread-29636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:02:56.024 [DEBUG] [Thread-29636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:02:56.049 [INFO] [Thread-29636] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:02:56.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:02:56.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:02:56.889 [DEBUG] [Thread-29636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:02:56.890 [DEBUG] [Thread-29636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:02:56.937 [DEBUG] [Thread-29636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:02:56.937 [DEBUG] [Thread-29636] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:02:56.946 [DEBUG] [Thread-29636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:02:56.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:02: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')
2026-04-16T02:02:56.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') -> 00000000
2026-04-16T02:02:56.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:02:56.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:02:56.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:02:56.981 [DEBUG] [Thread-29636] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:03:00.461 [DEBUG] [Thread-29638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:03:04.511 [DEBUG] [Thread-29639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:03:19.557 [DEBUG] [Thread-29640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:03:27.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:03:27.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:03:27.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T02:03:28.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 2, 52), 1.46695, 90.4495, 0.0, 12.8808, 8.62961, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:03:28.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:02:52
2026-04-16T02:03:28.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:03:29.140 [DEBUG] [Thread-29641] [transport.py] [_log()] starting thread (client mode): 0xee992980
2026-04-16T02:03:29.140 [DEBUG] [Thread-29641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:03:29.155 [DEBUG] [Thread-29641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:03:29.155 [INFO] [Thread-29641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:03:29.158 [DEBUG] [Thread-29641] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:03:29.158 [DEBUG] [Thread-29641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:03:29.158 [DEBUG] [Thread-29641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:03:29.158 [DEBUG] [Thread-29641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:03:29.159 [DEBUG] [Thread-29641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:03:29.159 [DEBUG] [Thread-29641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:03:29.159 [DEBUG] [Thread-29641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:03:29.159 [DEBUG] [Thread-29641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:03:29.159 [DEBUG] [Thread-29641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:03:29.159 [DEBUG] [Thread-29641] [transport.py] [_log()] client lang: <none>
2026-04-16T02:03:29.159 [DEBUG] [Thread-29641] [transport.py] [_log()] server lang: <none>
2026-04-16T02:03:29.159 [DEBUG] [Thread-29641] [transport.py] [_log()] kex follows: False
2026-04-16T02:03:29.159 [DEBUG] [Thread-29641] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:03:29.159 [DEBUG] [Thread-29641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:03:29.160 [DEBUG] [Thread-29641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:03:29.160 [DEBUG] [Thread-29641] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:03:29.160 [DEBUG] [Thread-29641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:03:29.160 [DEBUG] [Thread-29641] [transport.py] [_log()] Compression: none
2026-04-16T02:03:29.160 [DEBUG] [Thread-29641] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:03:29.174 [DEBUG] [Thread-29641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:03:29.174 [DEBUG] [Thread-29641] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:03:29.175 [DEBUG] [Thread-29641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:03:29.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:03:29.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:03:29.176 [DEBUG] [Thread-29641] [transport.py] [_log()] userauth is OK
2026-04-16T02:03:29.176 [DEBUG] [Thread-29641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:03:29.176 [DEBUG] [Thread-29641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:03:29.176 [DEBUG] [Thread-29641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:03:29.177 [DEBUG] [Thread-29641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:03:29.199 [INFO] [Thread-29641] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:03:29.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:03:29.970 [DEBUG] [Thread-29641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:03:29.970 [DEBUG] [Thread-29641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:03:29.970 [DEBUG] [Thread-29641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:03:30.010 [DEBUG] [Thread-29641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:03:30.011 [DEBUG] [Thread-29641] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:03:30.013 [DEBUG] [Thread-29641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:03:30.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:03:30.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:03:30.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:03:30.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:03:30.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:03:30.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:03:30.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:03:30.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:03:30.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:03:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.001867 -999.00   +9.20   6.85     88   +7.50 1 1 1 3 1     0    0 -999.00 0.00 .NESW 7.0 6.8 120.0 9.9 9.5 -25.3 9.3 -24.2 9.0 -21.9 9.3 -24.1
2026-04-16T02:03:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:03:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:03:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.001867
2026-04-16T02:03:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:03:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:03:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:03:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:03:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:03:30.034 [DEBUG] [Thread-29641] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:03:30.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:02:52', tmtdew=1.46695, humidity=90.4495, cloud=0.0, wind=12.8808, temperature=8.62961, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:02:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5695000000000006, 3.3382499999999995, 2.5045, nan, nan, nan, nan, 1.61775, 0.4925000000000015, 1.6359999999999992, 1.459249999999999, 1.8329999999999984, 1.7297499999999983, 0.6132500000000007, 0.07925000000000004, 0.16799999999999926, 0.14749999999999908, 0.27674999999999983, 0.2469999999999999, 0.21250000000000036, 0.26750000000000096, 0.18900000000000183, 0.051000000000000156, -0.08325000000000138], zp_timestamp='2026-04-16T00:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:03:30.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:03:30.243 [DEBUG] [Thread-29644] [transport.py] [_log()] starting thread (client mode): 0xee9921a0
2026-04-16T02:03:30.243 [DEBUG] [Thread-29644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:03:30.257 [DEBUG] [Thread-29644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:03:30.257 [INFO] [Thread-29644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:03:30.264 [DEBUG] [Thread-29644] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:03:30.264 [DEBUG] [Thread-29644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:03:30.264 [DEBUG] [Thread-29644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:03:30.264 [DEBUG] [Thread-29644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:03:30.264 [DEBUG] [Thread-29644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:03:30.264 [DEBUG] [Thread-29644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:03:30.264 [DEBUG] [Thread-29644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:03:30.265 [DEBUG] [Thread-29644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:03:30.265 [DEBUG] [Thread-29644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:03:30.265 [DEBUG] [Thread-29644] [transport.py] [_log()] client lang: <none>
2026-04-16T02:03:30.265 [DEBUG] [Thread-29644] [transport.py] [_log()] server lang: <none>
2026-04-16T02:03:30.265 [DEBUG] [Thread-29644] [transport.py] [_log()] kex follows: False
2026-04-16T02:03:30.265 [DEBUG] [Thread-29644] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:03:30.265 [DEBUG] [Thread-29644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:03:30.265 [DEBUG] [Thread-29644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:03:30.265 [DEBUG] [Thread-29644] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:03:30.265 [DEBUG] [Thread-29644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:03:30.265 [DEBUG] [Thread-29644] [transport.py] [_log()] Compression: none
2026-04-16T02:03:30.265 [DEBUG] [Thread-29644] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:03:30.322 [DEBUG] [Thread-29644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:03:30.322 [DEBUG] [Thread-29644] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:03:30.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:03:30.323 [DEBUG] [Thread-29644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:03:30.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:03:30.379 [DEBUG] [Thread-29644] [transport.py] [_log()] userauth is OK
2026-04-16T02:03:30.379 [DEBUG] [Thread-29644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:03:30.379 [DEBUG] [Thread-29644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:03:30.379 [DEBUG] [Thread-29644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:03:30.380 [DEBUG] [Thread-29644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:03:30.397 [INFO] [Thread-29644] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:03:30.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:03:30.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:03:31.204 [DEBUG] [Thread-29644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:03:31.204 [DEBUG] [Thread-29644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:03:31.252 [DEBUG] [Thread-29644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:03:31.252 [DEBUG] [Thread-29644] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:03:31.261 [DEBUG] [Thread-29644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:03:31.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:03: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')
2026-04-16T02:03:31.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') -> 00000000
2026-04-16T02:03:31.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:03:31.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:03:31.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:03:31.295 [DEBUG] [Thread-29644] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:03:34.588 [DEBUG] [Thread-29646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:03:46.106 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:03:46.107 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:03:49.632 [DEBUG] [Thread-29647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:04:00.607 [DEBUG] [Thread-29648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:04:01.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:04:01.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:04:01.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
2026-04-16T02:04:02.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 3, 27), 1.73599, 89.2081, 0.0, 10.4814, 8.89814, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:04:02.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:03:27
2026-04-16T02:04:02.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:04:03.402 [DEBUG] [Thread-29649] [transport.py] [_log()] starting thread (client mode): 0xee954bb0
2026-04-16T02:04:03.402 [DEBUG] [Thread-29649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:04:03.421 [DEBUG] [Thread-29649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:04:03.421 [INFO] [Thread-29649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:04:03.424 [DEBUG] [Thread-29649] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:04:03.425 [DEBUG] [Thread-29649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:04:03.425 [DEBUG] [Thread-29649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:04:03.425 [DEBUG] [Thread-29649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:04:03.425 [DEBUG] [Thread-29649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:04:03.425 [DEBUG] [Thread-29649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:04:03.425 [DEBUG] [Thread-29649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:04:03.425 [DEBUG] [Thread-29649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:04:03.425 [DEBUG] [Thread-29649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:04:03.425 [DEBUG] [Thread-29649] [transport.py] [_log()] client lang: <none>
2026-04-16T02:04:03.425 [DEBUG] [Thread-29649] [transport.py] [_log()] server lang: <none>
2026-04-16T02:04:03.425 [DEBUG] [Thread-29649] [transport.py] [_log()] kex follows: False
2026-04-16T02:04:03.425 [DEBUG] [Thread-29649] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:04:03.426 [DEBUG] [Thread-29649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:04:03.426 [DEBUG] [Thread-29649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:04:03.426 [DEBUG] [Thread-29649] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:04:03.426 [DEBUG] [Thread-29649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:04:03.426 [DEBUG] [Thread-29649] [transport.py] [_log()] Compression: none
2026-04-16T02:04:03.426 [DEBUG] [Thread-29649] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:04:03.443 [DEBUG] [Thread-29649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:04:03.443 [DEBUG] [Thread-29649] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:04:03.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:04:03.444 [DEBUG] [Thread-29649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:04:03.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:04:03.445 [DEBUG] [Thread-29649] [transport.py] [_log()] userauth is OK
2026-04-16T02:04:03.445 [DEBUG] [Thread-29649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:04:03.445 [DEBUG] [Thread-29649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:04:03.446 [DEBUG] [Thread-29649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:04:03.446 [DEBUG] [Thread-29649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:04:03.470 [INFO] [Thread-29649] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:04:03.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:04:04.266 [DEBUG] [Thread-29649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:04:04.266 [DEBUG] [Thread-29649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:04:04.267 [DEBUG] [Thread-29649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:04:04.306 [DEBUG] [Thread-29649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:04:04.307 [DEBUG] [Thread-29649] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:04:04.309 [DEBUG] [Thread-29649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:04:04.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:04:04.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:04:04.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:04:04.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:04:04.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:04:04.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:04:04.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:04:04.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:04:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:04:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.002561 -999.00   +9.20   8.66     88   +7.50 1 1 1 3 1     0    0 -999.00 0.00 .NESW 8.0 8.7 104.8 9.8 9.4 -25.3 9.3 -24.1 9.0 -22.0 9.3 -24.0
2026-04-16T02:04:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:04:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:04:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.002561
2026-04-16T02:04:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:04:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:04:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:04:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:04:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:04:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:03:27', tmtdew=1.73599, humidity=89.2081, cloud=0.0, wind=10.4814, temperature=8.89814, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:03:41.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5695000000000006, 3.3382499999999995, 2.5045, nan, nan, nan, nan, 1.61775, 0.4925000000000015, 1.6359999999999992, 1.459249999999999, 1.8329999999999984, 1.7297499999999983, 0.6132500000000007, 0.07925000000000004, 0.16799999999999926, 0.14749999999999908, 0.27674999999999983, 0.2469999999999999, 0.21250000000000036, 0.26750000000000096, 0.18900000000000183, 0.051000000000000156, -0.08325000000000138], zp_timestamp='2026-04-16T00:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:04:04.328 [DEBUG] [Thread-29649] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:04:04.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:04:04.577 [DEBUG] [Thread-29652] [transport.py] [_log()] starting thread (client mode): 0xee954340
2026-04-16T02:04:04.578 [DEBUG] [Thread-29652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:04:04.594 [DEBUG] [Thread-29652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:04:04.594 [INFO] [Thread-29652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:04:04.602 [DEBUG] [Thread-29652] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:04:04.602 [DEBUG] [Thread-29652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:04:04.602 [DEBUG] [Thread-29652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:04:04.602 [DEBUG] [Thread-29652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:04:04.602 [DEBUG] [Thread-29652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:04:04.602 [DEBUG] [Thread-29652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:04:04.602 [DEBUG] [Thread-29652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:04:04.602 [DEBUG] [Thread-29652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:04:04.603 [DEBUG] [Thread-29652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:04:04.603 [DEBUG] [Thread-29652] [transport.py] [_log()] client lang: <none>
2026-04-16T02:04:04.603 [DEBUG] [Thread-29652] [transport.py] [_log()] server lang: <none>
2026-04-16T02:04:04.603 [DEBUG] [Thread-29652] [transport.py] [_log()] kex follows: False
2026-04-16T02:04:04.603 [DEBUG] [Thread-29652] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:04:04.603 [DEBUG] [Thread-29652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:04:04.603 [DEBUG] [Thread-29652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:04:04.603 [DEBUG] [Thread-29652] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:04:04.603 [DEBUG] [Thread-29652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:04:04.603 [DEBUG] [Thread-29652] [transport.py] [_log()] Compression: none
2026-04-16T02:04:04.603 [DEBUG] [Thread-29652] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:04:04.659 [DEBUG] [Thread-29652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:04:04.659 [DEBUG] [Thread-29652] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:04:04.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:04:04.660 [DEBUG] [Thread-29652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:04:04.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:04:04.662 [DEBUG] [Thread-29654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:04:04.715 [DEBUG] [Thread-29652] [transport.py] [_log()] userauth is OK
2026-04-16T02:04:04.716 [DEBUG] [Thread-29652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:04:04.716 [DEBUG] [Thread-29652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:04:04.716 [DEBUG] [Thread-29652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:04:04.716 [DEBUG] [Thread-29652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:04:04.742 [INFO] [Thread-29652] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:04:04.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:04:04.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:04:05.590 [DEBUG] [Thread-29652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:04:05.590 [DEBUG] [Thread-29652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:04:05.638 [DEBUG] [Thread-29652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:04:05.638 [DEBUG] [Thread-29652] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:04:05.647 [DEBUG] [Thread-29652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:04:05.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:04:05.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')
2026-04-16T02:04:05.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') -> 00000000
2026-04-16T02:04:05.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:04:05.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:04:05.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:04:05.683 [DEBUG] [Thread-29652] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:04:19.712 [DEBUG] [Thread-29655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:04:34.743 [DEBUG] [Thread-29656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:04:35.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:04:35.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:04:35.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
2026-04-16T02:04:37.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 4, 3), 1.73831, 89.1915, 0.0, 10.499, 8.86495, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:04:37.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:04:03
2026-04-16T02:04:37.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:04:37.903 [DEBUG] [Thread-29657] [transport.py] [_log()] starting thread (client mode): 0xee993e80
2026-04-16T02:04:37.904 [DEBUG] [Thread-29657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:04:37.924 [DEBUG] [Thread-29657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:04:37.924 [INFO] [Thread-29657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:04:37.927 [DEBUG] [Thread-29657] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:04:37.928 [DEBUG] [Thread-29657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:04:37.928 [DEBUG] [Thread-29657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:04:37.928 [DEBUG] [Thread-29657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:04:37.928 [DEBUG] [Thread-29657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:04:37.928 [DEBUG] [Thread-29657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:04:37.928 [DEBUG] [Thread-29657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:04:37.928 [DEBUG] [Thread-29657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:04:37.928 [DEBUG] [Thread-29657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:04:37.928 [DEBUG] [Thread-29657] [transport.py] [_log()] client lang: <none>
2026-04-16T02:04:37.928 [DEBUG] [Thread-29657] [transport.py] [_log()] server lang: <none>
2026-04-16T02:04:37.928 [DEBUG] [Thread-29657] [transport.py] [_log()] kex follows: False
2026-04-16T02:04:37.928 [DEBUG] [Thread-29657] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:04:37.928 [DEBUG] [Thread-29657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:04:37.929 [DEBUG] [Thread-29657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:04:37.929 [DEBUG] [Thread-29657] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:04:37.929 [DEBUG] [Thread-29657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:04:37.929 [DEBUG] [Thread-29657] [transport.py] [_log()] Compression: none
2026-04-16T02:04:37.929 [DEBUG] [Thread-29657] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:04:37.947 [DEBUG] [Thread-29657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:04:37.947 [DEBUG] [Thread-29657] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:04:37.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:04:37.948 [DEBUG] [Thread-29657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:04:37.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:04:37.949 [DEBUG] [Thread-29657] [transport.py] [_log()] userauth is OK
2026-04-16T02:04:37.949 [DEBUG] [Thread-29657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:04:37.949 [DEBUG] [Thread-29657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:04:37.950 [DEBUG] [Thread-29657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:04:37.950 [DEBUG] [Thread-29657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:04:37.985 [INFO] [Thread-29657] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:04:37.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:04:38.788 [DEBUG] [Thread-29657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:04:38.788 [DEBUG] [Thread-29657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:04:38.790 [DEBUG] [Thread-29657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:04:38.829 [DEBUG] [Thread-29657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:04:38.829 [DEBUG] [Thread-29657] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:04:38.832 [DEBUG] [Thread-29657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:04:38.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:04:38.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:04:38.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:04:38.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:04:38.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:04:38.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:04:38.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:04:38.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:04:38.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:04:38.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.002909 -999.00   +9.20   7.89     88   +7.50 1 1 1 3 1     0    0 -999.00 0.00 .NESW 7.8 7.9 89.0 9.0 9.5 -25.4 9.3 -24.1 9.0 -22.0 9.3 -24.1
2026-04-16T02:04:38.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:04:38.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:04:38.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.002909
2026-04-16T02:04:38.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:04:38.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:04:38.858 [DEBUG] [Thread-29657] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:04:38.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:04:38.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:04:38.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:04:38.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:04:03', tmtdew=1.73831, humidity=89.1915, cloud=0.0, wind=10.499, temperature=8.86495, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:04:11.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5695000000000006, 3.3382499999999995, 2.5045, nan, nan, nan, nan, 1.61775, 0.4925000000000015, 1.6359999999999992, 1.459249999999999, 1.8329999999999984, 1.7297499999999983, 0.6132500000000007, 0.07925000000000004, 0.16799999999999926, 0.14749999999999908, 0.27674999999999983, 0.2469999999999999, 0.21250000000000036, 0.26750000000000096, 0.18900000000000183, 0.051000000000000156, -0.08325000000000138], zp_timestamp='2026-04-16T00:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:04:39.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:04:39.108 [DEBUG] [Thread-29660] [transport.py] [_log()] starting thread (client mode): 0xf1336710
2026-04-16T02:04:39.109 [DEBUG] [Thread-29660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:04:39.123 [DEBUG] [Thread-29660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:04:39.123 [INFO] [Thread-29660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:04:39.130 [DEBUG] [Thread-29660] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:04:39.130 [DEBUG] [Thread-29660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:04:39.130 [DEBUG] [Thread-29660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:04:39.130 [DEBUG] [Thread-29660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:04:39.131 [DEBUG] [Thread-29660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:04:39.131 [DEBUG] [Thread-29660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:04:39.131 [DEBUG] [Thread-29660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:04:39.131 [DEBUG] [Thread-29660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:04:39.131 [DEBUG] [Thread-29660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:04:39.131 [DEBUG] [Thread-29660] [transport.py] [_log()] client lang: <none>
2026-04-16T02:04:39.131 [DEBUG] [Thread-29660] [transport.py] [_log()] server lang: <none>
2026-04-16T02:04:39.131 [DEBUG] [Thread-29660] [transport.py] [_log()] kex follows: False
2026-04-16T02:04:39.131 [DEBUG] [Thread-29660] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:04:39.131 [DEBUG] [Thread-29660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:04:39.131 [DEBUG] [Thread-29660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:04:39.132 [DEBUG] [Thread-29660] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:04:39.132 [DEBUG] [Thread-29660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:04:39.132 [DEBUG] [Thread-29660] [transport.py] [_log()] Compression: none
2026-04-16T02:04:39.132 [DEBUG] [Thread-29660] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:04:39.186 [DEBUG] [Thread-29660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:04:39.187 [DEBUG] [Thread-29660] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:04:39.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:04:39.188 [DEBUG] [Thread-29660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:04:39.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:04:39.243 [DEBUG] [Thread-29660] [transport.py] [_log()] userauth is OK
2026-04-16T02:04:39.243 [DEBUG] [Thread-29660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:04:39.244 [DEBUG] [Thread-29660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:04:39.244 [DEBUG] [Thread-29660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:04:39.244 [DEBUG] [Thread-29660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:04:39.269 [INFO] [Thread-29660] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:04:39.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:04:39.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:04:40.088 [DEBUG] [Thread-29660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:04:40.088 [DEBUG] [Thread-29660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:04:40.136 [DEBUG] [Thread-29660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:04:40.136 [DEBUG] [Thread-29660] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:04:40.145 [DEBUG] [Thread-29660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:04:40.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:04: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')
2026-04-16T02:04:40.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
2026-04-16T02:04:40.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:04:40.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:04:40.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:04:40.180 [DEBUG] [Thread-29660] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:04:46.312 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:04:46.313 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:04:49.771 [DEBUG] [Thread-29662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:05:00.772 [DEBUG] [Thread-29663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:05:04.815 [DEBUG] [Thread-29664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:05:10.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:05:10.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:05:10.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
2026-04-16T02:05:11.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 4, 38), 1.46666, 90.4491, 0.0, 12.6691, 8.59615, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:05:11.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:04:38
2026-04-16T02:05:11.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:05:12.308 [DEBUG] [Thread-29665] [transport.py] [_log()] starting thread (client mode): 0xf1337c70
2026-04-16T02:05:12.309 [DEBUG] [Thread-29665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:05:12.329 [DEBUG] [Thread-29665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:05:12.330 [INFO] [Thread-29665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:05:12.333 [DEBUG] [Thread-29665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:05:12.333 [DEBUG] [Thread-29665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:05:12.333 [DEBUG] [Thread-29665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:05:12.333 [DEBUG] [Thread-29665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:05:12.333 [DEBUG] [Thread-29665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:05:12.333 [DEBUG] [Thread-29665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:05:12.333 [DEBUG] [Thread-29665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:05:12.333 [DEBUG] [Thread-29665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:05:12.333 [DEBUG] [Thread-29665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:05:12.333 [DEBUG] [Thread-29665] [transport.py] [_log()] client lang: <none>
2026-04-16T02:05:12.333 [DEBUG] [Thread-29665] [transport.py] [_log()] server lang: <none>
2026-04-16T02:05:12.334 [DEBUG] [Thread-29665] [transport.py] [_log()] kex follows: False
2026-04-16T02:05:12.334 [DEBUG] [Thread-29665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:05:12.334 [DEBUG] [Thread-29665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:05:12.334 [DEBUG] [Thread-29665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:05:12.334 [DEBUG] [Thread-29665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:05:12.334 [DEBUG] [Thread-29665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:05:12.334 [DEBUG] [Thread-29665] [transport.py] [_log()] Compression: none
2026-04-16T02:05:12.334 [DEBUG] [Thread-29665] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:05:12.351 [DEBUG] [Thread-29665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:05:12.352 [DEBUG] [Thread-29665] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:05:12.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:05:12.352 [DEBUG] [Thread-29665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:05:12.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:05:12.353 [DEBUG] [Thread-29665] [transport.py] [_log()] userauth is OK
2026-04-16T02:05:12.353 [DEBUG] [Thread-29665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:05:12.354 [DEBUG] [Thread-29665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:05:12.354 [DEBUG] [Thread-29665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:05:12.354 [DEBUG] [Thread-29665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:05:12.372 [INFO] [Thread-29665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:05:12.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:05:18.067 [DEBUG] [Thread-29665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:05:18.068 [DEBUG] [Thread-29665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:05:18.068 [DEBUG] [Thread-29665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:05:18.108 [DEBUG] [Thread-29665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:05:18.108 [DEBUG] [Thread-29665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:05:18.111 [DEBUG] [Thread-29665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:05:18.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:05:18.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:05:18.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:05:18.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:05:18.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:05:18.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:05:18.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:05:18.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:05:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:05:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.003256 -999.00   +9.20   6.61     88   +7.40 1 2 1 3 1     0    0 -999.00 0.00 .NESW 6.9 6.6 114.9 9.9 9.5 -25.5 9.3 -24.1 9.0 -21.9 9.3 -24.1
2026-04-16T02:05:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:05:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:05:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.003256
2026-04-16T02:05:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:05:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:05:18.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:05:18.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:05:18.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-16T02:05:18.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:04:38', tmtdew=1.46666, humidity=90.4491, cloud=0.0, wind=12.6691, temperature=8.59615, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:04:41.318', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5695000000000006, 3.3382499999999995, 2.5045, nan, nan, nan, nan, 1.61775, 0.4925000000000015, 1.6359999999999992, 1.459249999999999, 1.8329999999999984, 1.7297499999999983, 0.6132500000000007, 0.07925000000000004, 0.16799999999999926, 0.14749999999999908, 0.27674999999999983, 0.2469999999999999, 0.21250000000000036, 0.26750000000000096, 0.18900000000000183, 0.051000000000000156, -0.08325000000000138], zp_timestamp='2026-04-16T00:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:05:18.203 [DEBUG] [Thread-29665] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:05:18.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:05:18.451 [DEBUG] [Thread-29668] [transport.py] [_log()] starting thread (client mode): 0xee9c7ac0
2026-04-16T02:05:18.451 [DEBUG] [Thread-29668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:05:18.465 [DEBUG] [Thread-29668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:05:18.466 [INFO] [Thread-29668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:05:18.473 [DEBUG] [Thread-29668] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:05:18.473 [DEBUG] [Thread-29668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:05:18.473 [DEBUG] [Thread-29668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:05:18.473 [DEBUG] [Thread-29668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:05:18.473 [DEBUG] [Thread-29668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:05:18.474 [DEBUG] [Thread-29668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:05:18.474 [DEBUG] [Thread-29668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:05:18.474 [DEBUG] [Thread-29668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:05:18.474 [DEBUG] [Thread-29668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:05:18.474 [DEBUG] [Thread-29668] [transport.py] [_log()] client lang: <none>
2026-04-16T02:05:18.474 [DEBUG] [Thread-29668] [transport.py] [_log()] server lang: <none>
2026-04-16T02:05:18.474 [DEBUG] [Thread-29668] [transport.py] [_log()] kex follows: False
2026-04-16T02:05:18.474 [DEBUG] [Thread-29668] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:05:18.474 [DEBUG] [Thread-29668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:05:18.474 [DEBUG] [Thread-29668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:05:18.474 [DEBUG] [Thread-29668] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:05:18.474 [DEBUG] [Thread-29668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:05:18.475 [DEBUG] [Thread-29668] [transport.py] [_log()] Compression: none
2026-04-16T02:05:18.475 [DEBUG] [Thread-29668] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:05:18.530 [DEBUG] [Thread-29668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:05:18.531 [DEBUG] [Thread-29668] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:05:18.531 [DEBUG] [Thread-29668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:05:18.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:05:18.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:05:18.588 [DEBUG] [Thread-29668] [transport.py] [_log()] userauth is OK
2026-04-16T02:05:18.588 [DEBUG] [Thread-29668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:05:18.588 [DEBUG] [Thread-29668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:05:18.588 [DEBUG] [Thread-29668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:05:18.588 [DEBUG] [Thread-29668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:05:18.608 [INFO] [Thread-29668] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:05:18.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:05:18.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:05:19.442 [DEBUG] [Thread-29668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:05:19.443 [DEBUG] [Thread-29668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:05:19.490 [DEBUG] [Thread-29668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:05:19.490 [DEBUG] [Thread-29668] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:05:19.500 [DEBUG] [Thread-29668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:05:19.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:05:19.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')
2026-04-16T02:05:19.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
2026-04-16T02:05:19.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:05:19.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:05:19.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:05:19.535 [DEBUG] [Thread-29668] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:05:19.846 [DEBUG] [Thread-29670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:05:34.908 [DEBUG] [Thread-29671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:05:46.518 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:05:46.518 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:05:49.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:05:49.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:05:49.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
2026-04-16T02:05:49.936 [DEBUG] [Thread-29672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:05:50.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 5, 14), 1.68583, 89.208, 0.0, 10.1462, 8.83148, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:05:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:05:14
2026-04-16T02:05:51.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:05:51.700 [DEBUG] [Thread-29673] [transport.py] [_log()] starting thread (client mode): 0xf13e08b0
2026-04-16T02:05:51.701 [DEBUG] [Thread-29673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:05:51.718 [DEBUG] [Thread-29673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:05:51.718 [INFO] [Thread-29673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:05:51.722 [DEBUG] [Thread-29673] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:05:51.722 [DEBUG] [Thread-29673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:05:51.722 [DEBUG] [Thread-29673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:05:51.722 [DEBUG] [Thread-29673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:05:51.722 [DEBUG] [Thread-29673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:05:51.722 [DEBUG] [Thread-29673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:05:51.722 [DEBUG] [Thread-29673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:05:51.722 [DEBUG] [Thread-29673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:05:51.722 [DEBUG] [Thread-29673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:05:51.722 [DEBUG] [Thread-29673] [transport.py] [_log()] client lang: <none>
2026-04-16T02:05:51.722 [DEBUG] [Thread-29673] [transport.py] [_log()] server lang: <none>
2026-04-16T02:05:51.723 [DEBUG] [Thread-29673] [transport.py] [_log()] kex follows: False
2026-04-16T02:05:51.723 [DEBUG] [Thread-29673] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:05:51.723 [DEBUG] [Thread-29673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:05:51.723 [DEBUG] [Thread-29673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:05:51.723 [DEBUG] [Thread-29673] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:05:51.723 [DEBUG] [Thread-29673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:05:51.723 [DEBUG] [Thread-29673] [transport.py] [_log()] Compression: none
2026-04-16T02:05:51.723 [DEBUG] [Thread-29673] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:05:51.740 [DEBUG] [Thread-29673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:05:51.740 [DEBUG] [Thread-29673] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:05:51.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:05:51.741 [DEBUG] [Thread-29673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:05:51.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:05:51.742 [DEBUG] [Thread-29673] [transport.py] [_log()] userauth is OK
2026-04-16T02:05:51.742 [DEBUG] [Thread-29673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:05:51.742 [DEBUG] [Thread-29673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:05:51.743 [DEBUG] [Thread-29673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:05:51.743 [DEBUG] [Thread-29673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:05:51.767 [INFO] [Thread-29673] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:05:51.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:05:52.557 [DEBUG] [Thread-29673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:05:52.558 [DEBUG] [Thread-29673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:05:52.558 [DEBUG] [Thread-29673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:05:52.598 [DEBUG] [Thread-29673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:05:52.598 [DEBUG] [Thread-29673] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:05:52.601 [DEBUG] [Thread-29673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:05:52.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:05:52.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:05:52.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:05:52.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:05:52.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:05:52.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:05:52.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:05:52.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:05:52.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:05:52.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.003603 -999.00   +9.20   6.48     88   +7.40 1 1 1 3 1     0    0 -999.00 0.00 .NESW 6.7 6.5 115.1 10.5 9.5 -25.4 9.3 -24.2 9.0 -21.9 9.3 -24.1
2026-04-16T02:05:52.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:05:52.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:05:52.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.003603
2026-04-16T02:05:52.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:05:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:05:52.626 [DEBUG] [Thread-29673] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:05:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:05:52.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:05:52.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:05:52.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:05:14', tmtdew=1.68583, humidity=89.208, cloud=0.0, wind=10.1462, temperature=8.83148, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:05:11.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5695000000000006, 3.3382499999999995, 2.5045, nan, nan, nan, nan, 1.61775, 0.4925000000000015, 1.6359999999999992, 1.459249999999999, 1.8329999999999984, 1.7297499999999983, 0.6132500000000007, 0.07925000000000004, 0.16799999999999926, 0.14749999999999908, 0.27674999999999983, 0.2469999999999999, 0.21250000000000036, 0.26750000000000096, 0.18900000000000183, 0.051000000000000156, -0.08325000000000138], zp_timestamp='2026-04-16T00:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:05:52.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:05:52.881 [DEBUG] [Thread-29676] [transport.py] [_log()] starting thread (client mode): 0xee9c2440
2026-04-16T02:05:52.881 [DEBUG] [Thread-29676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:05:52.896 [DEBUG] [Thread-29676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:05:52.896 [INFO] [Thread-29676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:05:52.903 [DEBUG] [Thread-29676] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:05:52.904 [DEBUG] [Thread-29676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:05:52.904 [DEBUG] [Thread-29676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:05:52.904 [DEBUG] [Thread-29676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:05:52.904 [DEBUG] [Thread-29676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:05:52.904 [DEBUG] [Thread-29676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:05:52.904 [DEBUG] [Thread-29676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:05:52.904 [DEBUG] [Thread-29676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:05:52.904 [DEBUG] [Thread-29676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:05:52.904 [DEBUG] [Thread-29676] [transport.py] [_log()] client lang: <none>
2026-04-16T02:05:52.904 [DEBUG] [Thread-29676] [transport.py] [_log()] server lang: <none>
2026-04-16T02:05:52.904 [DEBUG] [Thread-29676] [transport.py] [_log()] kex follows: False
2026-04-16T02:05:52.904 [DEBUG] [Thread-29676] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:05:52.905 [DEBUG] [Thread-29676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:05:52.905 [DEBUG] [Thread-29676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:05:52.905 [DEBUG] [Thread-29676] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:05:52.905 [DEBUG] [Thread-29676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:05:52.905 [DEBUG] [Thread-29676] [transport.py] [_log()] Compression: none
2026-04-16T02:05:52.905 [DEBUG] [Thread-29676] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:05:52.962 [DEBUG] [Thread-29676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:05:52.963 [DEBUG] [Thread-29676] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:05:52.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:05:52.963 [DEBUG] [Thread-29676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:05:52.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:05:53.019 [DEBUG] [Thread-29676] [transport.py] [_log()] userauth is OK
2026-04-16T02:05:53.019 [DEBUG] [Thread-29676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:05:53.019 [DEBUG] [Thread-29676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:05:53.020 [DEBUG] [Thread-29676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:05:53.020 [DEBUG] [Thread-29676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:05:53.043 [INFO] [Thread-29676] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:05:53.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:05:53.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:05:53.856 [DEBUG] [Thread-29676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:05:53.856 [DEBUG] [Thread-29676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:05:53.904 [DEBUG] [Thread-29676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:05:53.904 [DEBUG] [Thread-29676] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:05:53.913 [DEBUG] [Thread-29676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:05:53.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:05:53.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')
2026-04-16T02:05:53.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
2026-04-16T02:05:53.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:05:53.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:05:53.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:05:53.949 [DEBUG] [Thread-29676] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:06:00.939 [DEBUG] [Thread-29678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:06:04.967 [DEBUG] [Thread-29679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:06:20.013 [DEBUG] [Thread-29680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:06:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:06:23.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:06:23.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
2026-04-16T02:06:25.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 5, 50), 1.47632, 90.3826, 0.0, 12.6691, 8.4965, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:06:25.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:05:50
2026-04-16T02:06:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:06:26.092 [DEBUG] [Thread-29681] [transport.py] [_log()] starting thread (client mode): 0xee9c7c70
2026-04-16T02:06:26.093 [DEBUG] [Thread-29681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:06:26.112 [DEBUG] [Thread-29681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:06:26.112 [INFO] [Thread-29681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:06:26.115 [DEBUG] [Thread-29681] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:06:26.115 [DEBUG] [Thread-29681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:06:26.115 [DEBUG] [Thread-29681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:06:26.115 [DEBUG] [Thread-29681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:06:26.115 [DEBUG] [Thread-29681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:06:26.116 [DEBUG] [Thread-29681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:06:26.116 [DEBUG] [Thread-29681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:06:26.116 [DEBUG] [Thread-29681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:06:26.116 [DEBUG] [Thread-29681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:06:26.116 [DEBUG] [Thread-29681] [transport.py] [_log()] client lang: <none>
2026-04-16T02:06:26.116 [DEBUG] [Thread-29681] [transport.py] [_log()] server lang: <none>
2026-04-16T02:06:26.116 [DEBUG] [Thread-29681] [transport.py] [_log()] kex follows: False
2026-04-16T02:06:26.116 [DEBUG] [Thread-29681] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:06:26.116 [DEBUG] [Thread-29681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:06:26.116 [DEBUG] [Thread-29681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:06:26.116 [DEBUG] [Thread-29681] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:06:26.117 [DEBUG] [Thread-29681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:06:26.117 [DEBUG] [Thread-29681] [transport.py] [_log()] Compression: none
2026-04-16T02:06:26.117 [DEBUG] [Thread-29681] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:06:26.128 [DEBUG] [Thread-29681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:06:26.129 [DEBUG] [Thread-29681] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:06:26.129 [DEBUG] [Thread-29681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:06:26.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:06:26.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:06:26.130 [DEBUG] [Thread-29681] [transport.py] [_log()] userauth is OK
2026-04-16T02:06:26.130 [DEBUG] [Thread-29681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:06:26.130 [DEBUG] [Thread-29681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:06:26.130 [DEBUG] [Thread-29681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:06:26.130 [DEBUG] [Thread-29681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:06:26.145 [INFO] [Thread-29681] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:06:26.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:06:26.948 [DEBUG] [Thread-29681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:06:26.949 [DEBUG] [Thread-29681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:06:26.949 [DEBUG] [Thread-29681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:06:26.989 [DEBUG] [Thread-29681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:06:26.989 [DEBUG] [Thread-29681] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:06:26.992 [DEBUG] [Thread-29681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:06:27.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:06:27.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:06:27.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:06:27.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:06:27.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:06:27.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:06:27.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:06:27.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:06:27.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:06:27.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.003950 -999.00   +9.10   6.51     88   +7.40 1 1 1 3 1     0    0 -999.00 0.00 .NESW 7.6 6.5 115.3 10.8 9.4 -25.4 9.3 -24.2 9.0 -22.0 9.3 -24.1
2026-04-16T02:06:27.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:06:27.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:06:27.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.003950
2026-04-16T02:06:27.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:06:27.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:06:27.016 [DEBUG] [Thread-29681] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:06:27.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:06:27.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:06:27.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:06:27.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:05:50', tmtdew=1.47632, humidity=90.3826, cloud=0.0, wind=12.6691, temperature=8.4965, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:05:41.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5695000000000006, 3.3382499999999995, 2.5045, nan, nan, nan, nan, 1.61775, 0.4925000000000015, 1.6359999999999992, 1.459249999999999, 1.8329999999999984, 1.7297499999999983, 0.6132500000000007, 0.07925000000000004, 0.16799999999999926, 0.14749999999999908, 0.27674999999999983, 0.2469999999999999, 0.21250000000000036, 0.26750000000000096, 0.18900000000000183, 0.051000000000000156, -0.08325000000000138], zp_timestamp='2026-04-16T00:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:06:27.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:06:27.267 [DEBUG] [Thread-29684] [transport.py] [_log()] starting thread (client mode): 0xee932650
2026-04-16T02:06:27.268 [DEBUG] [Thread-29684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:06:27.282 [DEBUG] [Thread-29684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:06:27.282 [INFO] [Thread-29684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:06:27.289 [DEBUG] [Thread-29684] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:06:27.290 [DEBUG] [Thread-29684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:06:27.290 [DEBUG] [Thread-29684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:06:27.290 [DEBUG] [Thread-29684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:06:27.290 [DEBUG] [Thread-29684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:06:27.290 [DEBUG] [Thread-29684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:06:27.290 [DEBUG] [Thread-29684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:06:27.290 [DEBUG] [Thread-29684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:06:27.290 [DEBUG] [Thread-29684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:06:27.290 [DEBUG] [Thread-29684] [transport.py] [_log()] client lang: <none>
2026-04-16T02:06:27.290 [DEBUG] [Thread-29684] [transport.py] [_log()] server lang: <none>
2026-04-16T02:06:27.290 [DEBUG] [Thread-29684] [transport.py] [_log()] kex follows: False
2026-04-16T02:06:27.291 [DEBUG] [Thread-29684] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:06:27.291 [DEBUG] [Thread-29684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:06:27.291 [DEBUG] [Thread-29684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:06:27.291 [DEBUG] [Thread-29684] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:06:27.291 [DEBUG] [Thread-29684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:06:27.291 [DEBUG] [Thread-29684] [transport.py] [_log()] Compression: none
2026-04-16T02:06:27.291 [DEBUG] [Thread-29684] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:06:27.346 [DEBUG] [Thread-29684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:06:27.347 [DEBUG] [Thread-29684] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:06:27.347 [DEBUG] [Thread-29684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:06:27.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:06:27.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:06:27.403 [DEBUG] [Thread-29684] [transport.py] [_log()] userauth is OK
2026-04-16T02:06:27.403 [DEBUG] [Thread-29684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:06:27.404 [DEBUG] [Thread-29684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:06:27.404 [DEBUG] [Thread-29684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:06:27.404 [DEBUG] [Thread-29684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:06:27.423 [INFO] [Thread-29684] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:06:27.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:06:27.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:06:28.265 [DEBUG] [Thread-29684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:06:28.266 [DEBUG] [Thread-29684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:06:28.313 [DEBUG] [Thread-29684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:06:28.313 [DEBUG] [Thread-29684] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:06:28.322 [DEBUG] [Thread-29684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:06:28.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:06:28.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')
2026-04-16T02:06:28.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
2026-04-16T02:06:28.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:06:28.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:06:28.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:06:28.357 [DEBUG] [Thread-29684] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:06:35.042 [DEBUG] [Thread-29686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:06:46.726 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:06:46.727 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:06:50.083 [DEBUG] [Thread-29687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:06:58.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:06:58.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:06:58.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
2026-04-16T02:06:59.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 6, 25), 1.68852, 88.6913, 0.0, 9.96984, 8.83143, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:06:59.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:06:25
2026-04-16T02:07:00.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:07:00.538 [DEBUG] [Thread-29688] [transport.py] [_log()] starting thread (client mode): 0xf13e36d0
2026-04-16T02:07:00.538 [DEBUG] [Thread-29688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:07:00.558 [DEBUG] [Thread-29688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:07:00.558 [INFO] [Thread-29688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:07:00.561 [DEBUG] [Thread-29688] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:07:00.561 [DEBUG] [Thread-29688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:07:00.561 [DEBUG] [Thread-29688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:07:00.561 [DEBUG] [Thread-29688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:07:00.561 [DEBUG] [Thread-29688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:07:00.561 [DEBUG] [Thread-29688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:07:00.561 [DEBUG] [Thread-29688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:07:00.562 [DEBUG] [Thread-29688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:07:00.562 [DEBUG] [Thread-29688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:07:00.562 [DEBUG] [Thread-29688] [transport.py] [_log()] client lang: <none>
2026-04-16T02:07:00.562 [DEBUG] [Thread-29688] [transport.py] [_log()] server lang: <none>
2026-04-16T02:07:00.562 [DEBUG] [Thread-29688] [transport.py] [_log()] kex follows: False
2026-04-16T02:07:00.562 [DEBUG] [Thread-29688] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:07:00.562 [DEBUG] [Thread-29688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:07:00.562 [DEBUG] [Thread-29688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:07:00.562 [DEBUG] [Thread-29688] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:07:00.562 [DEBUG] [Thread-29688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:07:00.563 [DEBUG] [Thread-29688] [transport.py] [_log()] Compression: none
2026-04-16T02:07:00.563 [DEBUG] [Thread-29688] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:07:00.581 [DEBUG] [Thread-29688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:07:00.581 [DEBUG] [Thread-29688] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:07:00.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:07:00.582 [DEBUG] [Thread-29688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:07:00.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:07:00.583 [DEBUG] [Thread-29688] [transport.py] [_log()] userauth is OK
2026-04-16T02:07:00.583 [DEBUG] [Thread-29688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:07:00.583 [DEBUG] [Thread-29688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:07:00.583 [DEBUG] [Thread-29688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:07:00.583 [DEBUG] [Thread-29688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:07:00.607 [INFO] [Thread-29688] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:07:00.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:07:01.110 [DEBUG] [Thread-29690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:07:01.407 [DEBUG] [Thread-29688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:07:01.408 [DEBUG] [Thread-29688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:07:01.408 [DEBUG] [Thread-29688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:07:01.449 [DEBUG] [Thread-29688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:07:01.449 [DEBUG] [Thread-29688] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:07:01.452 [DEBUG] [Thread-29688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:07:01.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:07:01.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:07:01.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:07:01.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:07:01.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:07:01.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:07:01.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:07:01.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:07:01.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:07:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.004298 -999.00   +9.10   8.06     88   +7.30 1 1 1 3 1     0    0 -999.00 0.00 .NESW 8.2 8.1 123.0 9.5 9.5 -25.5 9.3 -24.2 9.0 -22.1 9.3 -24.3
2026-04-16T02:07:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:07:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:07:01.475 [DEBUG] [Thread-29688] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:07:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.004298
2026-04-16T02:07:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:07:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:07:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:07:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:07:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:07:01.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:06:25', tmtdew=1.68852, humidity=88.6913, cloud=0.0, wind=9.96984, temperature=8.83143, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:06:11.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5695000000000006, 3.3382499999999995, 2.5045, nan, nan, nan, nan, 1.61775, 0.4925000000000015, 1.6359999999999992, 1.459249999999999, 1.8329999999999984, 1.7297499999999983, 0.6132500000000007, 0.07925000000000004, 0.16799999999999926, 0.14749999999999908, 0.27674999999999983, 0.2469999999999999, 0.21250000000000036, 0.26750000000000096, 0.18900000000000183, 0.051000000000000156, -0.08325000000000138], zp_timestamp='2026-04-16T00:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:07:01.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:07:01.738 [DEBUG] [Thread-29692] [transport.py] [_log()] starting thread (client mode): 0xf1364d90
2026-04-16T02:07:01.738 [DEBUG] [Thread-29692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:07:01.752 [DEBUG] [Thread-29692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:07:01.752 [INFO] [Thread-29692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:07:01.760 [DEBUG] [Thread-29692] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:07:01.760 [DEBUG] [Thread-29692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:07:01.760 [DEBUG] [Thread-29692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:07:01.760 [DEBUG] [Thread-29692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:07:01.760 [DEBUG] [Thread-29692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:07:01.760 [DEBUG] [Thread-29692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:07:01.760 [DEBUG] [Thread-29692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:07:01.760 [DEBUG] [Thread-29692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:07:01.760 [DEBUG] [Thread-29692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:07:01.760 [DEBUG] [Thread-29692] [transport.py] [_log()] client lang: <none>
2026-04-16T02:07:01.761 [DEBUG] [Thread-29692] [transport.py] [_log()] server lang: <none>
2026-04-16T02:07:01.761 [DEBUG] [Thread-29692] [transport.py] [_log()] kex follows: False
2026-04-16T02:07:01.761 [DEBUG] [Thread-29692] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:07:01.761 [DEBUG] [Thread-29692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:07:01.761 [DEBUG] [Thread-29692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:07:01.761 [DEBUG] [Thread-29692] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:07:01.761 [DEBUG] [Thread-29692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:07:01.761 [DEBUG] [Thread-29692] [transport.py] [_log()] Compression: none
2026-04-16T02:07:01.761 [DEBUG] [Thread-29692] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:07:01.818 [DEBUG] [Thread-29692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:07:01.819 [DEBUG] [Thread-29692] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:07:01.819 [DEBUG] [Thread-29692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:07:01.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:07:01.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:07:01.875 [DEBUG] [Thread-29692] [transport.py] [_log()] userauth is OK
2026-04-16T02:07:01.875 [DEBUG] [Thread-29692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:07:01.876 [DEBUG] [Thread-29692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:07:01.876 [DEBUG] [Thread-29692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:07:01.876 [DEBUG] [Thread-29692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:07:01.901 [INFO] [Thread-29692] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:07:01.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:07:01.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:07:02.760 [DEBUG] [Thread-29692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:07:02.760 [DEBUG] [Thread-29692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:07:02.808 [DEBUG] [Thread-29692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:07:02.808 [DEBUG] [Thread-29692] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:07:02.817 [DEBUG] [Thread-29692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:07:02.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:07:02.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')
2026-04-16T02:07:02.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') -> 00000000
2026-04-16T02:07:02.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:07:02.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:07:02.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:07:02.851 [DEBUG] [Thread-29692] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:07:05.115 [DEBUG] [Thread-29694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:07:20.158 [DEBUG] [Thread-29695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:07:32.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:07:32.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:07:32.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
2026-04-16T02:07:34.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 7), 1.73067, 88.741, 0.0, 10.0404, 8.84798, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:07:34.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:07:00
2026-04-16T02:07:34.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:07:34.989 [DEBUG] [Thread-29696] [transport.py] [_log()] starting thread (client mode): 0xee991b70
2026-04-16T02:07:34.989 [DEBUG] [Thread-29696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:07:35.008 [DEBUG] [Thread-29696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:07:35.008 [INFO] [Thread-29696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:07:35.011 [DEBUG] [Thread-29696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:07:35.011 [DEBUG] [Thread-29696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:07:35.011 [DEBUG] [Thread-29696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:07:35.011 [DEBUG] [Thread-29696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:07:35.011 [DEBUG] [Thread-29696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:07:35.011 [DEBUG] [Thread-29696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:07:35.011 [DEBUG] [Thread-29696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:07:35.011 [DEBUG] [Thread-29696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:07:35.011 [DEBUG] [Thread-29696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:07:35.011 [DEBUG] [Thread-29696] [transport.py] [_log()] client lang: <none>
2026-04-16T02:07:35.011 [DEBUG] [Thread-29696] [transport.py] [_log()] server lang: <none>
2026-04-16T02:07:35.011 [DEBUG] [Thread-29696] [transport.py] [_log()] kex follows: False
2026-04-16T02:07:35.011 [DEBUG] [Thread-29696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:07:35.011 [DEBUG] [Thread-29696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:07:35.012 [DEBUG] [Thread-29696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:07:35.012 [DEBUG] [Thread-29696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:07:35.012 [DEBUG] [Thread-29696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:07:35.012 [DEBUG] [Thread-29696] [transport.py] [_log()] Compression: none
2026-04-16T02:07:35.012 [DEBUG] [Thread-29696] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:07:35.028 [DEBUG] [Thread-29696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:07:35.028 [DEBUG] [Thread-29696] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:07:35.028 [DEBUG] [Thread-29696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:07:35.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:07:35.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:07:35.029 [DEBUG] [Thread-29696] [transport.py] [_log()] userauth is OK
2026-04-16T02:07:35.029 [DEBUG] [Thread-29696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:07:35.029 [DEBUG] [Thread-29696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:07:35.029 [DEBUG] [Thread-29696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:07:35.030 [DEBUG] [Thread-29696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:07:35.042 [INFO] [Thread-29696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:07:35.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:07:35.187 [DEBUG] [Thread-29698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:07:35.759 [DEBUG] [Thread-29696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:07:35.759 [DEBUG] [Thread-29696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:07:35.759 [DEBUG] [Thread-29696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:07:35.800 [DEBUG] [Thread-29696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:07:35.800 [DEBUG] [Thread-29696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:07:35.802 [DEBUG] [Thread-29696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:07:35.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:07:35.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:07:35.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:07:35.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:07:35.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:07:35.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:07:35.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:07:35.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:07:35.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:07:35.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.004992 -999.00   +9.10   6.10     88   +7.30 1 1 1 3 1     0    0 -999.00 0.00 .NES. 4.4 6.1 123.2 9.7 9.4 -25.5 9.3 -24.3 9.0 -22.0 9.3 -24.3
2026-04-16T02:07:35.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:07:35.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:07:35.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.004992
2026-04-16T02:07:35.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:07:35.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:07:35.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:07:35.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:07:35.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:07:35.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:07:00', tmtdew=1.73067, humidity=88.741, cloud=0.0, wind=10.0404, temperature=8.84798, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:07:11.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 1.5364999999999993, nan, nan, nan, nan, nan, 2.551, 3.32125, 2.4665, nan, nan, nan, 0.8404999999999996, 0.69625, 0.28850000000000087, 2.227999999999999, 1.815249999999999, 2.147499999999999, 1.970749999999999, 0.10925000000000118, -0.0337499999999995, 0.04399999999999871, 0.08150000000000013, 0.1847499999999993, 0.18650000000000055, 0.11899999999999977, 0.30100000000000104, 0.1700000000000017, 0.005000000000000782, -0.10625000000000107], zp_timestamp='2026-04-16T00:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:07:35.822 [DEBUG] [Thread-29696] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:07:36.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:07:36.047 [DEBUG] [Thread-29700] [transport.py] [_log()] starting thread (client mode): 0xee954250
2026-04-16T02:07:36.047 [DEBUG] [Thread-29700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:07:36.061 [DEBUG] [Thread-29700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:07:36.062 [INFO] [Thread-29700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:07:36.069 [DEBUG] [Thread-29700] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:07:36.069 [DEBUG] [Thread-29700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:07:36.069 [DEBUG] [Thread-29700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:07:36.069 [DEBUG] [Thread-29700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:07:36.069 [DEBUG] [Thread-29700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:07:36.069 [DEBUG] [Thread-29700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:07:36.069 [DEBUG] [Thread-29700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:07:36.069 [DEBUG] [Thread-29700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:07:36.070 [DEBUG] [Thread-29700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:07:36.070 [DEBUG] [Thread-29700] [transport.py] [_log()] client lang: <none>
2026-04-16T02:07:36.070 [DEBUG] [Thread-29700] [transport.py] [_log()] server lang: <none>
2026-04-16T02:07:36.070 [DEBUG] [Thread-29700] [transport.py] [_log()] kex follows: False
2026-04-16T02:07:36.070 [DEBUG] [Thread-29700] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:07:36.070 [DEBUG] [Thread-29700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:07:36.070 [DEBUG] [Thread-29700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:07:36.070 [DEBUG] [Thread-29700] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:07:36.070 [DEBUG] [Thread-29700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:07:36.070 [DEBUG] [Thread-29700] [transport.py] [_log()] Compression: none
2026-04-16T02:07:36.070 [DEBUG] [Thread-29700] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:07:36.127 [DEBUG] [Thread-29700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:07:36.127 [DEBUG] [Thread-29700] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:07:36.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:07:36.128 [DEBUG] [Thread-29700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:07:36.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:07:36.183 [DEBUG] [Thread-29700] [transport.py] [_log()] userauth is OK
2026-04-16T02:07:36.184 [DEBUG] [Thread-29700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:07:36.184 [DEBUG] [Thread-29700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:07:36.184 [DEBUG] [Thread-29700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:07:36.184 [DEBUG] [Thread-29700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:07:36.208 [INFO] [Thread-29700] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:07:36.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:07:36.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:07:37.049 [DEBUG] [Thread-29700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:07:37.049 [DEBUG] [Thread-29700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:07:37.098 [DEBUG] [Thread-29700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:07:37.098 [DEBUG] [Thread-29700] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:07:37.111 [DEBUG] [Thread-29700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:07:37.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:07:37.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')
2026-04-16T02:07:37.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
2026-04-16T02:07:37.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:07:37.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:07:37.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:07:37.143 [DEBUG] [Thread-29700] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:07:46.928 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:07:46.930 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:07:50.216 [DEBUG] [Thread-29702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:08:01.264 [DEBUG] [Thread-29703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:08:05.259 [DEBUG] [Thread-29704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:08:07.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:08:07.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:08:07.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
2026-04-16T02:08:08.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 7, 36), 1.471, 90.4155, 0.0, 12.4222, 8.49636, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:08:08.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:07:36
2026-04-16T02:08:08.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:08:09.302 [DEBUG] [Thread-29705] [transport.py] [_log()] starting thread (client mode): 0xee9c3430
2026-04-16T02:08:09.303 [DEBUG] [Thread-29705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:08:09.322 [DEBUG] [Thread-29705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:08:09.322 [INFO] [Thread-29705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:08:09.325 [DEBUG] [Thread-29705] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:08:09.325 [DEBUG] [Thread-29705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:08:09.325 [DEBUG] [Thread-29705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:08:09.326 [DEBUG] [Thread-29705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:08:09.326 [DEBUG] [Thread-29705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:08:09.326 [DEBUG] [Thread-29705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:08:09.326 [DEBUG] [Thread-29705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:08:09.326 [DEBUG] [Thread-29705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:08:09.326 [DEBUG] [Thread-29705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:08:09.326 [DEBUG] [Thread-29705] [transport.py] [_log()] client lang: <none>
2026-04-16T02:08:09.326 [DEBUG] [Thread-29705] [transport.py] [_log()] server lang: <none>
2026-04-16T02:08:09.326 [DEBUG] [Thread-29705] [transport.py] [_log()] kex follows: False
2026-04-16T02:08:09.326 [DEBUG] [Thread-29705] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:08:09.326 [DEBUG] [Thread-29705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:08:09.326 [DEBUG] [Thread-29705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:08:09.327 [DEBUG] [Thread-29705] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:08:09.327 [DEBUG] [Thread-29705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:08:09.327 [DEBUG] [Thread-29705] [transport.py] [_log()] Compression: none
2026-04-16T02:08:09.327 [DEBUG] [Thread-29705] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:08:09.344 [DEBUG] [Thread-29705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:08:09.344 [DEBUG] [Thread-29705] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:08:09.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:08:09.345 [DEBUG] [Thread-29705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:08:09.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:08:09.346 [DEBUG] [Thread-29705] [transport.py] [_log()] userauth is OK
2026-04-16T02:08:09.346 [DEBUG] [Thread-29705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:08:09.346 [DEBUG] [Thread-29705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:08:09.346 [DEBUG] [Thread-29705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:08:09.346 [DEBUG] [Thread-29705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:08:09.381 [INFO] [Thread-29705] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:08:09.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:08:10.195 [DEBUG] [Thread-29705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:08:10.196 [DEBUG] [Thread-29705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:08:10.196 [DEBUG] [Thread-29705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:08:10.236 [DEBUG] [Thread-29705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:08:10.236 [DEBUG] [Thread-29705] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:08:10.239 [DEBUG] [Thread-29705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:08:10.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:08:10.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:08:10.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:08:10.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:08:10.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:08:10.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:08:10.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:08:10.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:08:10.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:08:10.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.005339 -999.00   +9.10   7.19     88   +7.30 1 1 1 3 1     0    0 -999.00 0.00 .NEsW 8.2 7.2 70.4 9.4 9.4 -25.5 9.2 -24.3 9.0 -22.2 9.3 -24.3
2026-04-16T02:08:10.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:08:10.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:08:10.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.005339
2026-04-16T02:08:10.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:08:10.263 [DEBUG] [Thread-29705] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:08:10.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:08:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:08:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:08:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:08:10.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:07:36', tmtdew=1.471, humidity=90.4155, cloud=0.0, wind=12.4222, temperature=8.49636, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:07:41.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 1.5364999999999993, nan, nan, nan, nan, nan, 2.551, 3.32125, 2.4665, nan, nan, nan, 0.8404999999999996, 0.69625, 0.28850000000000087, 2.227999999999999, 1.815249999999999, 2.147499999999999, 1.970749999999999, 0.10925000000000118, -0.0337499999999995, 0.04399999999999871, 0.08150000000000013, 0.1847499999999993, 0.18650000000000055, 0.11899999999999977, 0.30100000000000104, 0.1700000000000017, 0.005000000000000782, -0.10625000000000107], zp_timestamp='2026-04-16T00:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:08:10.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:08:10.518 [DEBUG] [Thread-29708] [transport.py] [_log()] starting thread (client mode): 0xee990c10
2026-04-16T02:08:10.518 [DEBUG] [Thread-29708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:08:10.536 [DEBUG] [Thread-29708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:08:10.536 [INFO] [Thread-29708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:08:10.543 [DEBUG] [Thread-29708] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:08:10.543 [DEBUG] [Thread-29708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:08:10.544 [DEBUG] [Thread-29708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:08:10.544 [DEBUG] [Thread-29708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:08:10.544 [DEBUG] [Thread-29708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:08:10.544 [DEBUG] [Thread-29708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:08:10.544 [DEBUG] [Thread-29708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:08:10.544 [DEBUG] [Thread-29708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:08:10.544 [DEBUG] [Thread-29708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:08:10.544 [DEBUG] [Thread-29708] [transport.py] [_log()] client lang: <none>
2026-04-16T02:08:10.544 [DEBUG] [Thread-29708] [transport.py] [_log()] server lang: <none>
2026-04-16T02:08:10.544 [DEBUG] [Thread-29708] [transport.py] [_log()] kex follows: False
2026-04-16T02:08:10.544 [DEBUG] [Thread-29708] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:08:10.544 [DEBUG] [Thread-29708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:08:10.545 [DEBUG] [Thread-29708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:08:10.545 [DEBUG] [Thread-29708] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:08:10.545 [DEBUG] [Thread-29708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:08:10.545 [DEBUG] [Thread-29708] [transport.py] [_log()] Compression: none
2026-04-16T02:08:10.545 [DEBUG] [Thread-29708] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:08:10.606 [DEBUG] [Thread-29708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:08:10.607 [DEBUG] [Thread-29708] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:08:10.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:08:10.608 [DEBUG] [Thread-29708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:08:10.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:08:10.663 [DEBUG] [Thread-29708] [transport.py] [_log()] userauth is OK
2026-04-16T02:08:10.664 [DEBUG] [Thread-29708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:08:10.664 [DEBUG] [Thread-29708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:08:10.664 [DEBUG] [Thread-29708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:08:10.664 [DEBUG] [Thread-29708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:08:10.693 [INFO] [Thread-29708] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:08:10.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:08:10.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:08:11.573 [DEBUG] [Thread-29708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:08:11.573 [DEBUG] [Thread-29708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:08:11.621 [DEBUG] [Thread-29708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:08:11.621 [DEBUG] [Thread-29708] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:08:11.630 [DEBUG] [Thread-29708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:08:11.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:08:11.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')
2026-04-16T02:08:11.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
2026-04-16T02:08:11.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:08:11.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:08:11.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:08:11.665 [DEBUG] [Thread-29708] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:08:20.290 [DEBUG] [Thread-29710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:08:35.331 [DEBUG] [Thread-29711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:08:41.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:08:41.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:08:41.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
2026-04-16T02:08:42.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 8, 11), 1.73513, 88.7078, 0.0, 9.61704, 8.715, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:08:42.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:08:11
2026-04-16T02:08:43.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:08:43.765 [DEBUG] [Thread-29712] [transport.py] [_log()] starting thread (client mode): 0xee9c35e0
2026-04-16T02:08:43.766 [DEBUG] [Thread-29712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:08:43.785 [DEBUG] [Thread-29712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:08:43.785 [INFO] [Thread-29712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:08:43.788 [DEBUG] [Thread-29712] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:08:43.788 [DEBUG] [Thread-29712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:08:43.788 [DEBUG] [Thread-29712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:08:43.788 [DEBUG] [Thread-29712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:08:43.788 [DEBUG] [Thread-29712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:08:43.788 [DEBUG] [Thread-29712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:08:43.788 [DEBUG] [Thread-29712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:08:43.788 [DEBUG] [Thread-29712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:08:43.788 [DEBUG] [Thread-29712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:08:43.789 [DEBUG] [Thread-29712] [transport.py] [_log()] client lang: <none>
2026-04-16T02:08:43.789 [DEBUG] [Thread-29712] [transport.py] [_log()] server lang: <none>
2026-04-16T02:08:43.789 [DEBUG] [Thread-29712] [transport.py] [_log()] kex follows: False
2026-04-16T02:08:43.789 [DEBUG] [Thread-29712] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:08:43.789 [DEBUG] [Thread-29712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:08:43.789 [DEBUG] [Thread-29712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:08:43.789 [DEBUG] [Thread-29712] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:08:43.789 [DEBUG] [Thread-29712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:08:43.789 [DEBUG] [Thread-29712] [transport.py] [_log()] Compression: none
2026-04-16T02:08:43.789 [DEBUG] [Thread-29712] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:08:43.805 [DEBUG] [Thread-29712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:08:43.805 [DEBUG] [Thread-29712] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:08:43.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:08:43.806 [DEBUG] [Thread-29712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:08:43.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:08:43.807 [DEBUG] [Thread-29712] [transport.py] [_log()] userauth is OK
2026-04-16T02:08:43.807 [DEBUG] [Thread-29712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:08:43.807 [DEBUG] [Thread-29712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:08:43.807 [DEBUG] [Thread-29712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:08:43.807 [DEBUG] [Thread-29712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:08:43.819 [INFO] [Thread-29712] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:08:43.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:08:44.621 [DEBUG] [Thread-29712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:08:44.621 [DEBUG] [Thread-29712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:08:44.622 [DEBUG] [Thread-29712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:08:44.662 [DEBUG] [Thread-29712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:08:44.662 [DEBUG] [Thread-29712] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:08:44.665 [DEBUG] [Thread-29712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:08:44.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:08:44.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:08:44.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:08:44.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:08:44.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:08:44.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:08:44.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:08:44.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:08:44.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:08:44.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.005687 -999.00   +9.00   5.77     88   +7.30 1 1 1 3 1     0    0 -999.00 0.00 .NEsW 5.9 5.8 99.0 9.8 9.4 -25.6 9.2 -24.3 9.0 -22.2 9.3 -24.2
2026-04-16T02:08:44.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:08:44.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:08:44.685 [DEBUG] [Thread-29712] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:08:44.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.005687
2026-04-16T02:08:44.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:08:44.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:08:44.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:08:44.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:08:44.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:08:44.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:08:11', tmtdew=1.73513, humidity=88.7078, cloud=0.0, wind=9.61704, temperature=8.715, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:08:11.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 1.5364999999999993, nan, nan, nan, nan, nan, 2.551, 3.32125, 2.4665, nan, nan, nan, 0.8404999999999996, 0.69625, 0.28850000000000087, 2.227999999999999, 1.815249999999999, 2.147499999999999, 1.970749999999999, 0.10925000000000118, -0.0337499999999995, 0.04399999999999871, 0.08150000000000013, 0.1847499999999993, 0.18650000000000055, 0.11899999999999977, 0.30100000000000104, 0.1700000000000017, 0.005000000000000782, -0.10625000000000107], zp_timestamp='2026-04-16T00:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:08:44.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:08:44.903 [DEBUG] [Thread-29715] [transport.py] [_log()] starting thread (client mode): 0xee9ea830
2026-04-16T02:08:44.903 [DEBUG] [Thread-29715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:08:44.917 [DEBUG] [Thread-29715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:08:44.917 [INFO] [Thread-29715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:08:44.924 [DEBUG] [Thread-29715] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:08:44.924 [DEBUG] [Thread-29715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:08:44.924 [DEBUG] [Thread-29715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:08:44.924 [DEBUG] [Thread-29715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:08:44.924 [DEBUG] [Thread-29715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:08:44.925 [DEBUG] [Thread-29715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:08:44.925 [DEBUG] [Thread-29715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:08:44.925 [DEBUG] [Thread-29715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:08:44.925 [DEBUG] [Thread-29715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:08:44.925 [DEBUG] [Thread-29715] [transport.py] [_log()] client lang: <none>
2026-04-16T02:08:44.925 [DEBUG] [Thread-29715] [transport.py] [_log()] server lang: <none>
2026-04-16T02:08:44.925 [DEBUG] [Thread-29715] [transport.py] [_log()] kex follows: False
2026-04-16T02:08:44.925 [DEBUG] [Thread-29715] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:08:44.925 [DEBUG] [Thread-29715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:08:44.925 [DEBUG] [Thread-29715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:08:44.925 [DEBUG] [Thread-29715] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:08:44.926 [DEBUG] [Thread-29715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:08:44.926 [DEBUG] [Thread-29715] [transport.py] [_log()] Compression: none
2026-04-16T02:08:44.926 [DEBUG] [Thread-29715] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:08:44.983 [DEBUG] [Thread-29715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:08:44.983 [DEBUG] [Thread-29715] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:08:44.983 [DEBUG] [Thread-29715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:08:44.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:08:44.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:08:45.039 [DEBUG] [Thread-29715] [transport.py] [_log()] userauth is OK
2026-04-16T02:08:45.040 [DEBUG] [Thread-29715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:08:45.040 [DEBUG] [Thread-29715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:08:45.040 [DEBUG] [Thread-29715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:08:45.040 [DEBUG] [Thread-29715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:08:45.066 [INFO] [Thread-29715] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:08:45.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:08:45.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:08:45.873 [DEBUG] [Thread-29715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:08:45.873 [DEBUG] [Thread-29715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:08:45.921 [DEBUG] [Thread-29715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:08:45.921 [DEBUG] [Thread-29715] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:08:45.930 [DEBUG] [Thread-29715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:08:45.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:08:45.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')
2026-04-16T02:08:45.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
2026-04-16T02:08:45.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:08:45.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:08:45.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:08:45.964 [DEBUG] [Thread-29715] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:08:47.135 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:08:47.136 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:08:50.360 [DEBUG] [Thread-29717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:09:01.429 [DEBUG] [Thread-29718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:09:05.405 [DEBUG] [Thread-29719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:09:15.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:09:15.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:09:15.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T02:09:17.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 8, 47), 1.4653, 90.4486, 0.0, 12.3516, 8.46313, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:09:17.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:08:47
2026-04-16T02:09:17.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:09:18.186 [DEBUG] [Thread-29720] [transport.py] [_log()] starting thread (client mode): 0xee954190
2026-04-16T02:09:18.186 [DEBUG] [Thread-29720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:09:18.205 [DEBUG] [Thread-29720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:09:18.205 [INFO] [Thread-29720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:09:18.208 [DEBUG] [Thread-29720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:09:18.208 [DEBUG] [Thread-29720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:09:18.208 [DEBUG] [Thread-29720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:09:18.208 [DEBUG] [Thread-29720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:09:18.208 [DEBUG] [Thread-29720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:09:18.209 [DEBUG] [Thread-29720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:09:18.209 [DEBUG] [Thread-29720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:09:18.209 [DEBUG] [Thread-29720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:09:18.209 [DEBUG] [Thread-29720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:09:18.209 [DEBUG] [Thread-29720] [transport.py] [_log()] client lang: <none>
2026-04-16T02:09:18.209 [DEBUG] [Thread-29720] [transport.py] [_log()] server lang: <none>
2026-04-16T02:09:18.209 [DEBUG] [Thread-29720] [transport.py] [_log()] kex follows: False
2026-04-16T02:09:18.209 [DEBUG] [Thread-29720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:09:18.209 [DEBUG] [Thread-29720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:09:18.209 [DEBUG] [Thread-29720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:09:18.209 [DEBUG] [Thread-29720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:09:18.209 [DEBUG] [Thread-29720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:09:18.209 [DEBUG] [Thread-29720] [transport.py] [_log()] Compression: none
2026-04-16T02:09:18.209 [DEBUG] [Thread-29720] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:09:18.225 [DEBUG] [Thread-29720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:09:18.225 [DEBUG] [Thread-29720] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:09:18.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:09:18.226 [DEBUG] [Thread-29720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:09:18.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:09:18.227 [DEBUG] [Thread-29720] [transport.py] [_log()] userauth is OK
2026-04-16T02:09:18.227 [DEBUG] [Thread-29720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:09:18.227 [DEBUG] [Thread-29720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:09:18.227 [DEBUG] [Thread-29720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:09:18.228 [DEBUG] [Thread-29720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:09:18.263 [INFO] [Thread-29720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:09:18.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:09:19.070 [DEBUG] [Thread-29720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:09:19.070 [DEBUG] [Thread-29720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:09:19.071 [DEBUG] [Thread-29720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:09:19.111 [DEBUG] [Thread-29720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:09:19.111 [DEBUG] [Thread-29720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:09:19.114 [DEBUG] [Thread-29720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:09:19.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:09:19.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:09:19.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:09:19.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:09:19.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:09:19.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:09:19.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:09:19.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:09:19.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:09:19.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.006033 -999.00   +9.00   6.45     88   +7.30 1 1 1 3 1     0    0 -999.00 0.00 .NE.. 5.3 6.5 118.4 11.8 9.4 -25.5 9.3 -24.3 9.0 -22.1 9.3 -24.2
2026-04-16T02:09:19.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:09:19.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:09:19.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.006033
2026-04-16T02:09:19.137 [DEBUG] [Thread-29720] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:09:19.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:09:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:09:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:09:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:09:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:09:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:08:47', tmtdew=1.4653, humidity=90.4486, cloud=0.0, wind=12.3516, temperature=8.46313, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:08:41.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 1.5364999999999993, nan, nan, nan, nan, nan, 2.551, 3.32125, 2.4665, nan, nan, nan, 0.8404999999999996, 0.69625, 0.28850000000000087, 2.227999999999999, 1.815249999999999, 2.147499999999999, 1.970749999999999, 0.10925000000000118, -0.0337499999999995, 0.04399999999999871, 0.08150000000000013, 0.1847499999999993, 0.18650000000000055, 0.11899999999999977, 0.30100000000000104, 0.1700000000000017, 0.005000000000000782, -0.10625000000000107], zp_timestamp='2026-04-16T00:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:09:19.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:09:19.389 [DEBUG] [Thread-29723] [transport.py] [_log()] starting thread (client mode): 0xee9c0280
2026-04-16T02:09:19.390 [DEBUG] [Thread-29723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:09:19.404 [DEBUG] [Thread-29723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:09:19.404 [INFO] [Thread-29723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:09:19.411 [DEBUG] [Thread-29723] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:09:19.412 [DEBUG] [Thread-29723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:09:19.412 [DEBUG] [Thread-29723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:09:19.412 [DEBUG] [Thread-29723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:09:19.412 [DEBUG] [Thread-29723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:09:19.412 [DEBUG] [Thread-29723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:09:19.412 [DEBUG] [Thread-29723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:09:19.412 [DEBUG] [Thread-29723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:09:19.412 [DEBUG] [Thread-29723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:09:19.412 [DEBUG] [Thread-29723] [transport.py] [_log()] client lang: <none>
2026-04-16T02:09:19.412 [DEBUG] [Thread-29723] [transport.py] [_log()] server lang: <none>
2026-04-16T02:09:19.412 [DEBUG] [Thread-29723] [transport.py] [_log()] kex follows: False
2026-04-16T02:09:19.412 [DEBUG] [Thread-29723] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:09:19.413 [DEBUG] [Thread-29723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:09:19.413 [DEBUG] [Thread-29723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:09:19.413 [DEBUG] [Thread-29723] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:09:19.413 [DEBUG] [Thread-29723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:09:19.413 [DEBUG] [Thread-29723] [transport.py] [_log()] Compression: none
2026-04-16T02:09:19.413 [DEBUG] [Thread-29723] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:09:19.467 [DEBUG] [Thread-29723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:09:19.467 [DEBUG] [Thread-29723] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:09:19.468 [DEBUG] [Thread-29723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:09:19.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:09:19.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:09:19.527 [DEBUG] [Thread-29723] [transport.py] [_log()] userauth is OK
2026-04-16T02:09:19.527 [DEBUG] [Thread-29723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:09:19.528 [DEBUG] [Thread-29723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:09:19.528 [DEBUG] [Thread-29723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:09:19.528 [DEBUG] [Thread-29723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:09:19.553 [INFO] [Thread-29723] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:09:19.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:09:19.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:09:20.346 [DEBUG] [Thread-29723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:09:20.346 [DEBUG] [Thread-29723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:09:20.394 [DEBUG] [Thread-29723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:09:20.394 [DEBUG] [Thread-29723] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:09:20.403 [DEBUG] [Thread-29723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:09:20.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:09:20.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')
2026-04-16T02:09:20.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
2026-04-16T02:09:20.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:09:20.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:09:20.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:09:20.436 [DEBUG] [Thread-29725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:09:20.437 [DEBUG] [Thread-29723] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:09:35.480 [DEBUG] [Thread-29726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:09:47.348 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:09:47.349 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:09:50.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:09:50.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:09:50.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
2026-04-16T02:09:50.508 [DEBUG] [Thread-29727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:09:51.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 9, 22), 1.74049, 88.6745, 0.0, 9.74052, 8.71498, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:09:51.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:09:22
2026-04-16T02:09:52.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:09:52.572 [DEBUG] [Thread-29728] [transport.py] [_log()] starting thread (client mode): 0xf13356f0
2026-04-16T02:09:52.572 [DEBUG] [Thread-29728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:09:52.591 [DEBUG] [Thread-29728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:09:52.591 [INFO] [Thread-29728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:09:52.594 [DEBUG] [Thread-29728] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:09:52.594 [DEBUG] [Thread-29728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:09:52.594 [DEBUG] [Thread-29728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:09:52.594 [DEBUG] [Thread-29728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:09:52.594 [DEBUG] [Thread-29728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:09:52.594 [DEBUG] [Thread-29728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:09:52.594 [DEBUG] [Thread-29728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:09:52.594 [DEBUG] [Thread-29728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:09:52.594 [DEBUG] [Thread-29728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:09:52.594 [DEBUG] [Thread-29728] [transport.py] [_log()] client lang: <none>
2026-04-16T02:09:52.594 [DEBUG] [Thread-29728] [transport.py] [_log()] server lang: <none>
2026-04-16T02:09:52.594 [DEBUG] [Thread-29728] [transport.py] [_log()] kex follows: False
2026-04-16T02:09:52.595 [DEBUG] [Thread-29728] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:09:52.595 [DEBUG] [Thread-29728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:09:52.595 [DEBUG] [Thread-29728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:09:52.595 [DEBUG] [Thread-29728] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:09:52.595 [DEBUG] [Thread-29728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:09:52.595 [DEBUG] [Thread-29728] [transport.py] [_log()] Compression: none
2026-04-16T02:09:52.595 [DEBUG] [Thread-29728] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:09:52.611 [DEBUG] [Thread-29728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:09:52.611 [DEBUG] [Thread-29728] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:09:52.611 [DEBUG] [Thread-29728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:09:52.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:09:52.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:09:52.652 [DEBUG] [Thread-29728] [transport.py] [_log()] userauth is OK
2026-04-16T02:09:52.652 [DEBUG] [Thread-29728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:09:52.652 [DEBUG] [Thread-29728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:09:52.653 [DEBUG] [Thread-29728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:09:52.653 [DEBUG] [Thread-29728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:09:52.687 [INFO] [Thread-29728] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:09:52.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:09:53.493 [DEBUG] [Thread-29728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:09:53.493 [DEBUG] [Thread-29728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:09:53.494 [DEBUG] [Thread-29728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:09:53.534 [DEBUG] [Thread-29728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:09:53.534 [DEBUG] [Thread-29728] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:09:53.538 [DEBUG] [Thread-29728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:09:53.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:09:53.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:09:53.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:09:53.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:09:53.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:09:53.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:09:53.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:09:53.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:09:53.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:09:53.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.006381 -999.00   +9.00   6.59     88   +7.30 1 1 1 3 1     0    0 -999.00 0.00 .NE.. 6.8 6.6 86.2 10.2 9.3 -25.7 9.2 -24.2 9.0 -22.1 9.2 -24.3
2026-04-16T02:09:53.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:09:53.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:09:53.564 [DEBUG] [Thread-29728] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:09:53.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.006381
2026-04-16T02:09:53.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:09:53.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:09:53.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:09:53.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:09:53.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:09:53.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:09:22', tmtdew=1.74049, humidity=88.6745, cloud=0.0, wind=9.74052, temperature=8.71498, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:09:11.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 1.5364999999999993, nan, nan, nan, nan, nan, 2.551, 3.32125, 2.4665, nan, nan, nan, 0.8404999999999996, 0.69625, 0.28850000000000087, 2.227999999999999, 1.815249999999999, 2.147499999999999, 1.970749999999999, 0.10925000000000118, -0.0337499999999995, 0.04399999999999871, 0.08150000000000013, 0.1847499999999993, 0.18650000000000055, 0.11899999999999977, 0.30100000000000104, 0.1700000000000017, 0.005000000000000782, -0.10625000000000107], zp_timestamp='2026-04-16T00:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:09:53.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:09:53.802 [DEBUG] [Thread-29731] [transport.py] [_log()] starting thread (client mode): 0xee9c3790
2026-04-16T02:09:53.802 [DEBUG] [Thread-29731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:09:53.816 [DEBUG] [Thread-29731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:09:53.816 [INFO] [Thread-29731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:09:53.823 [DEBUG] [Thread-29731] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:09:53.824 [DEBUG] [Thread-29731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:09:53.824 [DEBUG] [Thread-29731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:09:53.824 [DEBUG] [Thread-29731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:09:53.824 [DEBUG] [Thread-29731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:09:53.824 [DEBUG] [Thread-29731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:09:53.824 [DEBUG] [Thread-29731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:09:53.824 [DEBUG] [Thread-29731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:09:53.824 [DEBUG] [Thread-29731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:09:53.824 [DEBUG] [Thread-29731] [transport.py] [_log()] client lang: <none>
2026-04-16T02:09:53.824 [DEBUG] [Thread-29731] [transport.py] [_log()] server lang: <none>
2026-04-16T02:09:53.824 [DEBUG] [Thread-29731] [transport.py] [_log()] kex follows: False
2026-04-16T02:09:53.824 [DEBUG] [Thread-29731] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:09:53.825 [DEBUG] [Thread-29731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:09:53.825 [DEBUG] [Thread-29731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:09:53.825 [DEBUG] [Thread-29731] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:09:53.825 [DEBUG] [Thread-29731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:09:53.825 [DEBUG] [Thread-29731] [transport.py] [_log()] Compression: none
2026-04-16T02:09:53.825 [DEBUG] [Thread-29731] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:09:53.883 [DEBUG] [Thread-29731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:09:53.884 [DEBUG] [Thread-29731] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:09:53.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:09:53.884 [DEBUG] [Thread-29731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:09:53.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:09:53.939 [DEBUG] [Thread-29731] [transport.py] [_log()] userauth is OK
2026-04-16T02:09:53.940 [DEBUG] [Thread-29731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:09:53.940 [DEBUG] [Thread-29731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:09:53.940 [DEBUG] [Thread-29731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:09:53.940 [DEBUG] [Thread-29731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:09:53.965 [INFO] [Thread-29731] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:09:53.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:09:53.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:09:54.778 [DEBUG] [Thread-29731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:09:54.779 [DEBUG] [Thread-29731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:09:54.826 [DEBUG] [Thread-29731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:09:54.826 [DEBUG] [Thread-29731] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:09:54.835 [DEBUG] [Thread-29731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:09:54.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:09:54.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')
2026-04-16T02:09:54.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') -> 00000000
2026-04-16T02:09:54.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:09:54.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:09:54.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:09:54.870 [DEBUG] [Thread-29731] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:10:01.574 [DEBUG] [Thread-29733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:10:05.539 [DEBUG] [Thread-29734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:10:20.581 [DEBUG] [Thread-29735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:10:24.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:10:24.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:10:24.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T02:10:26.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 9, 58), 1.74068, 88.6745, 0.0, 9.54648, 8.73154, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:10:26.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:09:58
2026-04-16T02:10:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:10:27.004 [DEBUG] [Thread-29736] [transport.py] [_log()] starting thread (client mode): 0xf13676a0
2026-04-16T02:10:27.004 [DEBUG] [Thread-29736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:10:27.023 [DEBUG] [Thread-29736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:10:27.024 [INFO] [Thread-29736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:10:27.026 [DEBUG] [Thread-29736] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:10:27.026 [DEBUG] [Thread-29736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:10:27.026 [DEBUG] [Thread-29736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:10:27.026 [DEBUG] [Thread-29736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:10:27.026 [DEBUG] [Thread-29736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:10:27.026 [DEBUG] [Thread-29736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:10:27.026 [DEBUG] [Thread-29736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:10:27.027 [DEBUG] [Thread-29736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:10:27.027 [DEBUG] [Thread-29736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:10:27.027 [DEBUG] [Thread-29736] [transport.py] [_log()] client lang: <none>
2026-04-16T02:10:27.027 [DEBUG] [Thread-29736] [transport.py] [_log()] server lang: <none>
2026-04-16T02:10:27.027 [DEBUG] [Thread-29736] [transport.py] [_log()] kex follows: False
2026-04-16T02:10:27.027 [DEBUG] [Thread-29736] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:10:27.027 [DEBUG] [Thread-29736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:10:27.027 [DEBUG] [Thread-29736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:10:27.027 [DEBUG] [Thread-29736] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:10:27.028 [DEBUG] [Thread-29736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:10:27.028 [DEBUG] [Thread-29736] [transport.py] [_log()] Compression: none
2026-04-16T02:10:27.028 [DEBUG] [Thread-29736] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:10:27.045 [DEBUG] [Thread-29736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:10:27.046 [DEBUG] [Thread-29736] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:10:27.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:10:27.046 [DEBUG] [Thread-29736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:10:27.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:10:27.047 [DEBUG] [Thread-29736] [transport.py] [_log()] userauth is OK
2026-04-16T02:10:27.048 [DEBUG] [Thread-29736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:10:27.048 [DEBUG] [Thread-29736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:10:27.048 [DEBUG] [Thread-29736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:10:27.048 [DEBUG] [Thread-29736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:10:27.073 [INFO] [Thread-29736] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:10:27.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:10:27.695 [DEBUG] [Thread-29736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:10:27.695 [DEBUG] [Thread-29736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:10:27.696 [DEBUG] [Thread-29736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:10:27.736 [DEBUG] [Thread-29736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:10:27.736 [DEBUG] [Thread-29736] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:10:27.739 [DEBUG] [Thread-29736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:10:27.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:10:27.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:10:27.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:10:27.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:10:27.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:10:27.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:10:27.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:10:27.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:10:27.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:10:27.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.006728 -999.00   +9.00   4.18     88   +7.30 1 1 1 3 1     0    0 -999.00 0.00 .NE.W 8.3 4.2 107.9 10.6 9.3 -25.6 9.2 -24.4 9.0 -22.2 9.3 -24.4
2026-04-16T02:10:27.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:10:27.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:10:27.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.006728
2026-04-16T02:10:27.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:10:27.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:10:27.764 [DEBUG] [Thread-29736] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:10:27.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:10:27.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:10:27.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:10:27.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:09:58', tmtdew=1.74068, humidity=88.6745, cloud=0.0, wind=9.54648, temperature=8.73154, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:09:41.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 1.5364999999999993, nan, nan, nan, nan, nan, 2.551, 3.32125, 2.4665, nan, nan, nan, 0.8404999999999996, 0.69625, 0.28850000000000087, 2.227999999999999, 1.815249999999999, 2.147499999999999, 1.970749999999999, 0.10925000000000118, -0.0337499999999995, 0.04399999999999871, 0.08150000000000013, 0.1847499999999993, 0.18650000000000055, 0.11899999999999977, 0.30100000000000104, 0.1700000000000017, 0.005000000000000782, -0.10625000000000107], zp_timestamp='2026-04-16T00:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:10:28.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:10:28.024 [DEBUG] [Thread-29739] [transport.py] [_log()] starting thread (client mode): 0xee9c7dc0
2026-04-16T02:10:28.024 [DEBUG] [Thread-29739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:10:28.039 [DEBUG] [Thread-29739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:10:28.039 [INFO] [Thread-29739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:10:28.047 [DEBUG] [Thread-29739] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:10:28.047 [DEBUG] [Thread-29739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:10:28.047 [DEBUG] [Thread-29739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:10:28.047 [DEBUG] [Thread-29739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:10:28.047 [DEBUG] [Thread-29739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:10:28.047 [DEBUG] [Thread-29739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:10:28.047 [DEBUG] [Thread-29739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:10:28.048 [DEBUG] [Thread-29739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:10:28.048 [DEBUG] [Thread-29739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:10:28.048 [DEBUG] [Thread-29739] [transport.py] [_log()] client lang: <none>
2026-04-16T02:10:28.048 [DEBUG] [Thread-29739] [transport.py] [_log()] server lang: <none>
2026-04-16T02:10:28.048 [DEBUG] [Thread-29739] [transport.py] [_log()] kex follows: False
2026-04-16T02:10:28.048 [DEBUG] [Thread-29739] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:10:28.048 [DEBUG] [Thread-29739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:10:28.048 [DEBUG] [Thread-29739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:10:28.048 [DEBUG] [Thread-29739] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:10:28.048 [DEBUG] [Thread-29739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:10:28.049 [DEBUG] [Thread-29739] [transport.py] [_log()] Compression: none
2026-04-16T02:10:28.049 [DEBUG] [Thread-29739] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:10:28.102 [DEBUG] [Thread-29739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:10:28.103 [DEBUG] [Thread-29739] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:10:28.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:10:28.104 [DEBUG] [Thread-29739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:10:28.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:10:28.160 [DEBUG] [Thread-29739] [transport.py] [_log()] userauth is OK
2026-04-16T02:10:28.160 [DEBUG] [Thread-29739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:10:28.160 [DEBUG] [Thread-29739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:10:28.160 [DEBUG] [Thread-29739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:10:28.160 [DEBUG] [Thread-29739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:10:28.185 [INFO] [Thread-29739] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:10:28.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:10:28.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:10:28.995 [DEBUG] [Thread-29739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:10:28.996 [DEBUG] [Thread-29739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:10:29.043 [DEBUG] [Thread-29739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:10:29.043 [DEBUG] [Thread-29739] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:10:29.054 [DEBUG] [Thread-29739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:10:29.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:10: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')
2026-04-16T02:10:29.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
2026-04-16T02:10:29.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:10:29.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:10:29.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:10:29.089 [DEBUG] [Thread-29739] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:10:35.615 [DEBUG] [Thread-29741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:10:47.555 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:10:47.555 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:10:50.706 [DEBUG] [Thread-29742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:10:59.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:10:59.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:10:59.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
2026-04-16T02:11:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 10, 34), 1.46567, 90.4486, 0.0, 12.8455, 8.49626, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:11:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:10:34
2026-04-16T02:11:00.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:11:01.286 [DEBUG] [Thread-29743] [transport.py] [_log()] starting thread (client mode): 0xee9eb910
2026-04-16T02:11:01.286 [DEBUG] [Thread-29743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:11:01.305 [DEBUG] [Thread-29743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:11:01.305 [INFO] [Thread-29743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:11:01.309 [DEBUG] [Thread-29743] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:11:01.309 [DEBUG] [Thread-29743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:11:01.309 [DEBUG] [Thread-29743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:11:01.309 [DEBUG] [Thread-29743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:11:01.309 [DEBUG] [Thread-29743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:11:01.309 [DEBUG] [Thread-29743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:11:01.309 [DEBUG] [Thread-29743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:11:01.309 [DEBUG] [Thread-29743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:11:01.309 [DEBUG] [Thread-29743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:11:01.309 [DEBUG] [Thread-29743] [transport.py] [_log()] client lang: <none>
2026-04-16T02:11:01.310 [DEBUG] [Thread-29743] [transport.py] [_log()] server lang: <none>
2026-04-16T02:11:01.310 [DEBUG] [Thread-29743] [transport.py] [_log()] kex follows: False
2026-04-16T02:11:01.310 [DEBUG] [Thread-29743] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:11:01.310 [DEBUG] [Thread-29743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:11:01.310 [DEBUG] [Thread-29743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:11:01.310 [DEBUG] [Thread-29743] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:11:01.310 [DEBUG] [Thread-29743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:11:01.310 [DEBUG] [Thread-29743] [transport.py] [_log()] Compression: none
2026-04-16T02:11:01.310 [DEBUG] [Thread-29743] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:11:01.324 [DEBUG] [Thread-29743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:11:01.324 [DEBUG] [Thread-29743] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:11:01.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:11:01.325 [DEBUG] [Thread-29743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:11:01.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:11:01.326 [DEBUG] [Thread-29743] [transport.py] [_log()] userauth is OK
2026-04-16T02:11:01.326 [DEBUG] [Thread-29743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:11:01.326 [DEBUG] [Thread-29743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:11:01.326 [DEBUG] [Thread-29743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:11:01.326 [DEBUG] [Thread-29743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:11:01.348 [INFO] [Thread-29743] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:11:01.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:11:01.738 [DEBUG] [Thread-29745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:11:02.002 [DEBUG] [Thread-29743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:11:02.003 [DEBUG] [Thread-29743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:11:02.003 [DEBUG] [Thread-29743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:11:02.043 [DEBUG] [Thread-29743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:11:02.043 [DEBUG] [Thread-29743] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:11:02.046 [DEBUG] [Thread-29743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:11:02.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:11:02.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:11:02.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:11:02.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:11:02.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:11:02.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:11:02.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:11:02.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:11:02.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:11:02.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.007422 -999.00   +9.00   6.29     88   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESW 6.0 6.3 109.3 8.4 9.3 -25.5 9.2 -24.2 9.0 -22.2 9.2 -24.3
2026-04-16T02:11:02.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:11:02.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:11:02.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.007422
2026-04-16T02:11:02.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:11:02.071 [DEBUG] [Thread-29743] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:11:02.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:11:02.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:11:02.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:11:02.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:11:02.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:10:34', tmtdew=1.46567, humidity=90.4486, cloud=0.0, wind=12.8455, temperature=8.49626, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:10:41.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 1.5364999999999993, nan, nan, nan, nan, nan, 2.551, 3.32125, 2.4665, nan, nan, nan, 0.8404999999999996, 0.69625, 0.28850000000000087, 2.227999999999999, 1.815249999999999, 2.147499999999999, 1.970749999999999, 0.10925000000000118, -0.0337499999999995, 0.04399999999999871, 0.08150000000000013, 0.1847499999999993, 0.18650000000000055, 0.11899999999999977, 0.30100000000000104, 0.1700000000000017, 0.005000000000000782, -0.10625000000000107], zp_timestamp='2026-04-16T00:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:11:02.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:11:02.333 [DEBUG] [Thread-29747] [transport.py] [_log()] starting thread (client mode): 0xf1365bd0
2026-04-16T02:11:02.333 [DEBUG] [Thread-29747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:11:02.347 [DEBUG] [Thread-29747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:11:02.347 [INFO] [Thread-29747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:11:02.354 [DEBUG] [Thread-29747] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:11:02.354 [DEBUG] [Thread-29747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:11:02.354 [DEBUG] [Thread-29747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:11:02.354 [DEBUG] [Thread-29747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:11:02.354 [DEBUG] [Thread-29747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:11:02.354 [DEBUG] [Thread-29747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:11:02.355 [DEBUG] [Thread-29747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:11:02.355 [DEBUG] [Thread-29747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:11:02.355 [DEBUG] [Thread-29747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:11:02.355 [DEBUG] [Thread-29747] [transport.py] [_log()] client lang: <none>
2026-04-16T02:11:02.355 [DEBUG] [Thread-29747] [transport.py] [_log()] server lang: <none>
2026-04-16T02:11:02.355 [DEBUG] [Thread-29747] [transport.py] [_log()] kex follows: False
2026-04-16T02:11:02.355 [DEBUG] [Thread-29747] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:11:02.355 [DEBUG] [Thread-29747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:11:02.355 [DEBUG] [Thread-29747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:11:02.355 [DEBUG] [Thread-29747] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:11:02.355 [DEBUG] [Thread-29747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:11:02.356 [DEBUG] [Thread-29747] [transport.py] [_log()] Compression: none
2026-04-16T02:11:02.356 [DEBUG] [Thread-29747] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:11:02.411 [DEBUG] [Thread-29747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:11:02.411 [DEBUG] [Thread-29747] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:11:02.412 [DEBUG] [Thread-29747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:11:02.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:11:02.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:11:02.468 [DEBUG] [Thread-29747] [transport.py] [_log()] userauth is OK
2026-04-16T02:11:02.468 [DEBUG] [Thread-29747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:11:02.468 [DEBUG] [Thread-29747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:11:02.468 [DEBUG] [Thread-29747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:11:02.468 [DEBUG] [Thread-29747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:11:02.494 [INFO] [Thread-29747] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:11:02.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:11:02.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:11:03.326 [DEBUG] [Thread-29747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:11:03.326 [DEBUG] [Thread-29747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:11:03.374 [DEBUG] [Thread-29747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:11:03.375 [DEBUG] [Thread-29747] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:11:03.383 [DEBUG] [Thread-29747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:11:03.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:11:03.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')
2026-04-16T02:11:03.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
2026-04-16T02:11:03.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:11:03.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:11:03.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:11:03.414 [DEBUG] [Thread-29747] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:11:05.734 [DEBUG] [Thread-29749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:11:20.781 [DEBUG] [Thread-29750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:11:33.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:11:33.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:11:33.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
2026-04-16T02:11:34.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 11, 9), 1.73266, 88.7243, 0.0, 9.89928, 8.68153, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:11:34.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:11:09
2026-04-16T02:11:35.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:11:35.547 [DEBUG] [Thread-29751] [transport.py] [_log()] starting thread (client mode): 0xee906650
2026-04-16T02:11:35.547 [DEBUG] [Thread-29751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:11:35.566 [DEBUG] [Thread-29751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:11:35.566 [INFO] [Thread-29751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:11:35.569 [DEBUG] [Thread-29751] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:11:35.569 [DEBUG] [Thread-29751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:11:35.569 [DEBUG] [Thread-29751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:11:35.569 [DEBUG] [Thread-29751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:11:35.569 [DEBUG] [Thread-29751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:11:35.569 [DEBUG] [Thread-29751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:11:35.569 [DEBUG] [Thread-29751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:11:35.569 [DEBUG] [Thread-29751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:11:35.569 [DEBUG] [Thread-29751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:11:35.570 [DEBUG] [Thread-29751] [transport.py] [_log()] client lang: <none>
2026-04-16T02:11:35.570 [DEBUG] [Thread-29751] [transport.py] [_log()] server lang: <none>
2026-04-16T02:11:35.570 [DEBUG] [Thread-29751] [transport.py] [_log()] kex follows: False
2026-04-16T02:11:35.570 [DEBUG] [Thread-29751] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:11:35.570 [DEBUG] [Thread-29751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:11:35.570 [DEBUG] [Thread-29751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:11:35.570 [DEBUG] [Thread-29751] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:11:35.570 [DEBUG] [Thread-29751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:11:35.570 [DEBUG] [Thread-29751] [transport.py] [_log()] Compression: none
2026-04-16T02:11:35.570 [DEBUG] [Thread-29751] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:11:35.587 [DEBUG] [Thread-29751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:11:35.587 [DEBUG] [Thread-29751] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:11:35.588 [DEBUG] [Thread-29751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:11:35.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:11:35.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:11:35.589 [DEBUG] [Thread-29751] [transport.py] [_log()] userauth is OK
2026-04-16T02:11:35.589 [DEBUG] [Thread-29751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:11:35.589 [DEBUG] [Thread-29751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:11:35.589 [DEBUG] [Thread-29751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:11:35.590 [DEBUG] [Thread-29751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:11:35.623 [INFO] [Thread-29751] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:11:35.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:11:35.812 [DEBUG] [Thread-29753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:11:36.272 [DEBUG] [Thread-29751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:11:36.272 [DEBUG] [Thread-29751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:11:36.272 [DEBUG] [Thread-29751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:11:36.314 [DEBUG] [Thread-29751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:11:36.314 [DEBUG] [Thread-29751] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:11:36.316 [DEBUG] [Thread-29751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:11:36.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:11:36.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:11:36.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:11:36.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:11:36.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:11:36.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:11:36.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:11:36.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:11:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:11:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.007770 -999.00   +8.90   6.89     88   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NEsW 6.7 6.9 125.2 8.6 9.3 -25.7 9.2 -24.4 8.9 -22.0 9.2 -24.3
2026-04-16T02:11:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:11:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:11:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.007770
2026-04-16T02:11:36.334 [DEBUG] [Thread-29751] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:11:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:11:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:11:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:11:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:11:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:11:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:11:09', tmtdew=1.73266, humidity=88.7243, cloud=0.0, wind=9.89928, temperature=8.68153, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:11:11.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 1.5364999999999993, nan, nan, nan, nan, nan, 2.551, 3.32125, 2.4665, nan, nan, nan, 0.8404999999999996, 0.69625, 0.28850000000000087, 2.227999999999999, 1.815249999999999, 2.147499999999999, 1.970749999999999, 0.10925000000000118, -0.0337499999999995, 0.04399999999999871, 0.08150000000000013, 0.1847499999999993, 0.18650000000000055, 0.11899999999999977, 0.30100000000000104, 0.1700000000000017, 0.005000000000000782, -0.10625000000000107], zp_timestamp='2026-04-16T00:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:11:36.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:11:36.550 [DEBUG] [Thread-29755] [transport.py] [_log()] starting thread (client mode): 0xee9c7fa0
2026-04-16T02:11:36.550 [DEBUG] [Thread-29755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:11:36.564 [DEBUG] [Thread-29755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:11:36.564 [INFO] [Thread-29755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:11:36.573 [DEBUG] [Thread-29755] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:11:36.573 [DEBUG] [Thread-29755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:11:36.573 [DEBUG] [Thread-29755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:11:36.574 [DEBUG] [Thread-29755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:11:36.574 [DEBUG] [Thread-29755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:11:36.574 [DEBUG] [Thread-29755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:11:36.574 [DEBUG] [Thread-29755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:11:36.574 [DEBUG] [Thread-29755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:11:36.574 [DEBUG] [Thread-29755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:11:36.574 [DEBUG] [Thread-29755] [transport.py] [_log()] client lang: <none>
2026-04-16T02:11:36.574 [DEBUG] [Thread-29755] [transport.py] [_log()] server lang: <none>
2026-04-16T02:11:36.574 [DEBUG] [Thread-29755] [transport.py] [_log()] kex follows: False
2026-04-16T02:11:36.574 [DEBUG] [Thread-29755] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:11:36.574 [DEBUG] [Thread-29755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:11:36.575 [DEBUG] [Thread-29755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:11:36.575 [DEBUG] [Thread-29755] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:11:36.575 [DEBUG] [Thread-29755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:11:36.575 [DEBUG] [Thread-29755] [transport.py] [_log()] Compression: none
2026-04-16T02:11:36.575 [DEBUG] [Thread-29755] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:11:36.630 [DEBUG] [Thread-29755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:11:36.631 [DEBUG] [Thread-29755] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:11:36.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:11:36.631 [DEBUG] [Thread-29755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:11:36.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:11:36.687 [DEBUG] [Thread-29755] [transport.py] [_log()] userauth is OK
2026-04-16T02:11:36.688 [DEBUG] [Thread-29755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:11:36.688 [DEBUG] [Thread-29755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:11:36.688 [DEBUG] [Thread-29755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:11:36.688 [DEBUG] [Thread-29755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:11:36.713 [INFO] [Thread-29755] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:11:36.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:11:36.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:11:37.520 [DEBUG] [Thread-29755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:11:37.520 [DEBUG] [Thread-29755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:11:37.568 [DEBUG] [Thread-29755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:11:37.568 [DEBUG] [Thread-29755] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:11:37.577 [DEBUG] [Thread-29755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:11:37.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:11:37.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')
2026-04-16T02:11: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') -> 00000000
2026-04-16T02:11:37.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:11:37.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:11:37.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:11:37.626 [DEBUG] [Thread-29755] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:11:47.760 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:11:47.761 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:11:50.845 [DEBUG] [Thread-29757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:12:01.890 [DEBUG] [Thread-29758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:12:05.889 [DEBUG] [Thread-29759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:12:07.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:12:07.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:12:07.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
2026-04-16T02:12:08.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 11, 45), 1.45996, 90.4817, 0.0, 12.5986, 8.46306, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:12:08.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:11:45
2026-04-16T02:12:09.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:12:09.765 [DEBUG] [Thread-29760] [transport.py] [_log()] starting thread (client mode): 0xee9eac20
2026-04-16T02:12:09.765 [DEBUG] [Thread-29760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:12:09.783 [DEBUG] [Thread-29760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:12:09.783 [INFO] [Thread-29760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:12:09.786 [DEBUG] [Thread-29760] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:12:09.786 [DEBUG] [Thread-29760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:12:09.786 [DEBUG] [Thread-29760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:12:09.786 [DEBUG] [Thread-29760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:12:09.787 [DEBUG] [Thread-29760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:12:09.787 [DEBUG] [Thread-29760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:12:09.787 [DEBUG] [Thread-29760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:12:09.787 [DEBUG] [Thread-29760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:12:09.787 [DEBUG] [Thread-29760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:12:09.787 [DEBUG] [Thread-29760] [transport.py] [_log()] client lang: <none>
2026-04-16T02:12:09.787 [DEBUG] [Thread-29760] [transport.py] [_log()] server lang: <none>
2026-04-16T02:12:09.787 [DEBUG] [Thread-29760] [transport.py] [_log()] kex follows: False
2026-04-16T02:12:09.787 [DEBUG] [Thread-29760] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:12:09.787 [DEBUG] [Thread-29760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:12:09.787 [DEBUG] [Thread-29760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:12:09.787 [DEBUG] [Thread-29760] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:12:09.787 [DEBUG] [Thread-29760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:12:09.787 [DEBUG] [Thread-29760] [transport.py] [_log()] Compression: none
2026-04-16T02:12:09.788 [DEBUG] [Thread-29760] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:12:09.803 [DEBUG] [Thread-29760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:12:09.803 [DEBUG] [Thread-29760] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:12:09.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:12:09.804 [DEBUG] [Thread-29760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:12:09.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:12:09.805 [DEBUG] [Thread-29760] [transport.py] [_log()] userauth is OK
2026-04-16T02:12:09.805 [DEBUG] [Thread-29760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:12:09.805 [DEBUG] [Thread-29760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:12:09.805 [DEBUG] [Thread-29760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:12:09.805 [DEBUG] [Thread-29760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:12:09.821 [INFO] [Thread-29760] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:12:09.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:12:10.445 [DEBUG] [Thread-29760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:12:10.445 [DEBUG] [Thread-29760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:12:10.446 [DEBUG] [Thread-29760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:12:10.486 [DEBUG] [Thread-29760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:12:10.486 [DEBUG] [Thread-29760] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:12:10.489 [DEBUG] [Thread-29760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:12:10.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:12:10.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:12:10.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:12:10.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:12:10.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:12:10.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:12:10.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:12:10.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:12:10.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:12:10.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.008117 -999.00   +8.90   8.25     88   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NEsW 9.0 8.2 95.2 10.4 9.3 -25.6 9.2 -24.3 8.9 -22.1 9.2 -24.3
2026-04-16T02:12:10.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:12:10.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:12:10.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.008117
2026-04-16T02:12:10.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:12:10.512 [DEBUG] [Thread-29760] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:12:10.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:12:10.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:12:10.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:12:10.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:12:10.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:11:45', tmtdew=1.45996, humidity=90.4817, cloud=0.0, wind=12.5986, temperature=8.46306, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:11:41.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 1.5364999999999993, nan, nan, nan, nan, nan, 2.551, 3.32125, 2.4665, nan, nan, nan, 0.8404999999999996, 0.69625, 0.28850000000000087, 2.227999999999999, 1.815249999999999, 2.147499999999999, 1.970749999999999, 0.10925000000000118, -0.0337499999999995, 0.04399999999999871, 0.08150000000000013, 0.1847499999999993, 0.18650000000000055, 0.11899999999999977, 0.30100000000000104, 0.1700000000000017, 0.005000000000000782, -0.10625000000000107], zp_timestamp='2026-04-16T00:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:12:10.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:12:10.766 [DEBUG] [Thread-29763] [transport.py] [_log()] starting thread (client mode): 0xee906ec0
2026-04-16T02:12:10.766 [DEBUG] [Thread-29763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:12:10.781 [DEBUG] [Thread-29763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:12:10.781 [INFO] [Thread-29763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:12:10.788 [DEBUG] [Thread-29763] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:12:10.788 [DEBUG] [Thread-29763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:12:10.788 [DEBUG] [Thread-29763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:12:10.788 [DEBUG] [Thread-29763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:12:10.789 [DEBUG] [Thread-29763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:12:10.789 [DEBUG] [Thread-29763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:12:10.789 [DEBUG] [Thread-29763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:12:10.789 [DEBUG] [Thread-29763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:12:10.789 [DEBUG] [Thread-29763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:12:10.789 [DEBUG] [Thread-29763] [transport.py] [_log()] client lang: <none>
2026-04-16T02:12:10.789 [DEBUG] [Thread-29763] [transport.py] [_log()] server lang: <none>
2026-04-16T02:12:10.789 [DEBUG] [Thread-29763] [transport.py] [_log()] kex follows: False
2026-04-16T02:12:10.789 [DEBUG] [Thread-29763] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:12:10.789 [DEBUG] [Thread-29763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:12:10.789 [DEBUG] [Thread-29763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:12:10.790 [DEBUG] [Thread-29763] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:12:10.790 [DEBUG] [Thread-29763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:12:10.790 [DEBUG] [Thread-29763] [transport.py] [_log()] Compression: none
2026-04-16T02:12:10.790 [DEBUG] [Thread-29763] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:12:10.850 [DEBUG] [Thread-29763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:12:10.850 [DEBUG] [Thread-29763] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:12:10.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:12:10.851 [DEBUG] [Thread-29763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:12:10.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:12:10.908 [DEBUG] [Thread-29763] [transport.py] [_log()] userauth is OK
2026-04-16T02:12:10.908 [DEBUG] [Thread-29763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:12:10.908 [DEBUG] [Thread-29763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:12:10.908 [DEBUG] [Thread-29763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:12:10.908 [DEBUG] [Thread-29763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:12:10.933 [INFO] [Thread-29763] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:12:10.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:12:10.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:12:11.730 [DEBUG] [Thread-29763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:12:11.730 [DEBUG] [Thread-29763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:12:11.778 [DEBUG] [Thread-29763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:12:11.778 [DEBUG] [Thread-29763] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:12:11.787 [DEBUG] [Thread-29763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:12:11.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:12:11.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')
2026-04-16T02:12:11.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
2026-04-16T02:12:11.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:12:11.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:12:11.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:12:11.823 [DEBUG] [Thread-29763] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:12:20.919 [DEBUG] [Thread-29765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:12:35.957 [DEBUG] [Thread-29766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:12:41.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:12:41.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:12:41.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
2026-04-16T02:12:43.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 12, 20), 1.72975, 88.7412, 0.0, 10.3756, 8.66516, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:12:43.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:12:20
2026-04-16T02:12:43.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:12:44.002 [DEBUG] [Thread-29767] [transport.py] [_log()] starting thread (client mode): 0xf13c98a0
2026-04-16T02:12:44.002 [DEBUG] [Thread-29767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:12:44.015 [DEBUG] [Thread-29767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:12:44.015 [INFO] [Thread-29767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:12:44.018 [DEBUG] [Thread-29767] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:12:44.018 [DEBUG] [Thread-29767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:12:44.018 [DEBUG] [Thread-29767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:12:44.018 [DEBUG] [Thread-29767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:12:44.019 [DEBUG] [Thread-29767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:12:44.019 [DEBUG] [Thread-29767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:12:44.019 [DEBUG] [Thread-29767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:12:44.019 [DEBUG] [Thread-29767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:12:44.019 [DEBUG] [Thread-29767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:12:44.019 [DEBUG] [Thread-29767] [transport.py] [_log()] client lang: <none>
2026-04-16T02:12:44.019 [DEBUG] [Thread-29767] [transport.py] [_log()] server lang: <none>
2026-04-16T02:12:44.019 [DEBUG] [Thread-29767] [transport.py] [_log()] kex follows: False
2026-04-16T02:12:44.019 [DEBUG] [Thread-29767] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:12:44.019 [DEBUG] [Thread-29767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:12:44.020 [DEBUG] [Thread-29767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:12:44.020 [DEBUG] [Thread-29767] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:12:44.020 [DEBUG] [Thread-29767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:12:44.020 [DEBUG] [Thread-29767] [transport.py] [_log()] Compression: none
2026-04-16T02:12:44.020 [DEBUG] [Thread-29767] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:12:44.036 [DEBUG] [Thread-29767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:12:44.037 [DEBUG] [Thread-29767] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:12:44.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:12:44.037 [DEBUG] [Thread-29767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:12:44.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:12:44.038 [DEBUG] [Thread-29767] [transport.py] [_log()] userauth is OK
2026-04-16T02:12:44.038 [DEBUG] [Thread-29767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:12:44.039 [DEBUG] [Thread-29767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:12:44.039 [DEBUG] [Thread-29767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:12:44.039 [DEBUG] [Thread-29767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:12:44.057 [INFO] [Thread-29767] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:12:44.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:12:44.680 [DEBUG] [Thread-29767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:12:44.680 [DEBUG] [Thread-29767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:12:44.681 [DEBUG] [Thread-29767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:12:44.721 [DEBUG] [Thread-29767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:12:44.721 [DEBUG] [Thread-29767] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:12:44.724 [DEBUG] [Thread-29767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:12:44.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:12:44.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:12:44.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:12:44.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:12:44.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:12:44.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:12:44.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:12:44.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:12:44.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:12:44.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.008464 -999.00   +8.90   5.47     88   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NE.W 5.1 5.5 105.0 10.0 9.3 -25.6 9.2 -24.3 8.9 -22.1 9.2 -24.3
2026-04-16T02:12:44.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:12:44.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:12:44.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.008464
2026-04-16T02:12:44.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:12:44.746 [DEBUG] [Thread-29767] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:12:44.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:12:44.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:12:44.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:12:44.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:12:44.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:12:20', tmtdew=1.72975, humidity=88.7412, cloud=0.0, wind=10.3756, temperature=8.66516, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:12:11.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 1.5364999999999993, nan, nan, nan, nan, nan, 2.551, 3.32125, 2.4665, nan, nan, nan, 0.8404999999999996, 0.69625, 0.28850000000000087, 2.227999999999999, 1.815249999999999, 2.147499999999999, 1.970749999999999, 0.10925000000000118, -0.0337499999999995, 0.04399999999999871, 0.08150000000000013, 0.1847499999999993, 0.18650000000000055, 0.11899999999999977, 0.30100000000000104, 0.1700000000000017, 0.005000000000000782, -0.10625000000000107], zp_timestamp='2026-04-16T00:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:12:44.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:12:45.001 [DEBUG] [Thread-29770] [transport.py] [_log()] starting thread (client mode): 0xf1364400
2026-04-16T02:12:45.002 [DEBUG] [Thread-29770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:12:45.016 [DEBUG] [Thread-29770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:12:45.016 [INFO] [Thread-29770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:12:45.023 [DEBUG] [Thread-29770] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:12:45.024 [DEBUG] [Thread-29770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:12:45.024 [DEBUG] [Thread-29770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:12:45.024 [DEBUG] [Thread-29770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:12:45.024 [DEBUG] [Thread-29770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:12:45.024 [DEBUG] [Thread-29770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:12:45.024 [DEBUG] [Thread-29770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:12:45.024 [DEBUG] [Thread-29770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:12:45.024 [DEBUG] [Thread-29770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:12:45.024 [DEBUG] [Thread-29770] [transport.py] [_log()] client lang: <none>
2026-04-16T02:12:45.024 [DEBUG] [Thread-29770] [transport.py] [_log()] server lang: <none>
2026-04-16T02:12:45.024 [DEBUG] [Thread-29770] [transport.py] [_log()] kex follows: False
2026-04-16T02:12:45.024 [DEBUG] [Thread-29770] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:12:45.025 [DEBUG] [Thread-29770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:12:45.025 [DEBUG] [Thread-29770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:12:45.025 [DEBUG] [Thread-29770] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:12:45.025 [DEBUG] [Thread-29770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:12:45.025 [DEBUG] [Thread-29770] [transport.py] [_log()] Compression: none
2026-04-16T02:12:45.025 [DEBUG] [Thread-29770] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:12:45.083 [DEBUG] [Thread-29770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:12:45.083 [DEBUG] [Thread-29770] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:12:45.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:12:45.084 [DEBUG] [Thread-29770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:12:45.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:12:45.140 [DEBUG] [Thread-29770] [transport.py] [_log()] userauth is OK
2026-04-16T02:12:45.140 [DEBUG] [Thread-29770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:12:45.140 [DEBUG] [Thread-29770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:12:45.140 [DEBUG] [Thread-29770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:12:45.140 [DEBUG] [Thread-29770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:12:45.166 [INFO] [Thread-29770] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:12:45.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:12:45.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:12:45.959 [DEBUG] [Thread-29770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:12:45.959 [DEBUG] [Thread-29770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:12:46.009 [DEBUG] [Thread-29770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:12:46.010 [DEBUG] [Thread-29770] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:12:46.019 [DEBUG] [Thread-29770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:12:46.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:12:46.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')
2026-04-16T02:12:46.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
2026-04-16T02:12:46.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:12:46.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:12:46.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:12:46.053 [DEBUG] [Thread-29770] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:12:47.964 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:12:47.965 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:12:50.986 [DEBUG] [Thread-29772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:13:02.046 [DEBUG] [Thread-29773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:13:06.031 [DEBUG] [Thread-29774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:13:16.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:13:16.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:13:16.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
2026-04-16T02:13:17.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 12, 56), 1.67209, 88.791, 0.0, 8.13456, 8.64834, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:13:17.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:12:56
2026-04-16T02:13:17.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:13:18.254 [DEBUG] [Thread-29775] [transport.py] [_log()] starting thread (client mode): 0xee993310
2026-04-16T02:13:18.254 [DEBUG] [Thread-29775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:13:18.273 [DEBUG] [Thread-29775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:13:18.273 [INFO] [Thread-29775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:13:18.276 [DEBUG] [Thread-29775] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:13:18.276 [DEBUG] [Thread-29775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:13:18.276 [DEBUG] [Thread-29775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:13:18.277 [DEBUG] [Thread-29775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:13:18.277 [DEBUG] [Thread-29775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:13:18.277 [DEBUG] [Thread-29775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:13:18.277 [DEBUG] [Thread-29775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:13:18.277 [DEBUG] [Thread-29775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:13:18.277 [DEBUG] [Thread-29775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:13:18.277 [DEBUG] [Thread-29775] [transport.py] [_log()] client lang: <none>
2026-04-16T02:13:18.277 [DEBUG] [Thread-29775] [transport.py] [_log()] server lang: <none>
2026-04-16T02:13:18.277 [DEBUG] [Thread-29775] [transport.py] [_log()] kex follows: False
2026-04-16T02:13:18.277 [DEBUG] [Thread-29775] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:13:18.277 [DEBUG] [Thread-29775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:13:18.278 [DEBUG] [Thread-29775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:13:18.278 [DEBUG] [Thread-29775] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:13:18.278 [DEBUG] [Thread-29775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:13:18.278 [DEBUG] [Thread-29775] [transport.py] [_log()] Compression: none
2026-04-16T02:13:18.278 [DEBUG] [Thread-29775] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:13:18.286 [DEBUG] [Thread-29775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:13:18.286 [DEBUG] [Thread-29775] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:13:18.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:13:18.287 [DEBUG] [Thread-29775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:13:18.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:13:18.288 [DEBUG] [Thread-29775] [transport.py] [_log()] userauth is OK
2026-04-16T02:13:18.288 [DEBUG] [Thread-29775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:13:18.288 [DEBUG] [Thread-29775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:13:18.288 [DEBUG] [Thread-29775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:13:18.288 [DEBUG] [Thread-29775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:13:18.306 [INFO] [Thread-29775] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:13:18.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:13:18.900 [DEBUG] [Thread-29775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:13:18.900 [DEBUG] [Thread-29775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:13:18.901 [DEBUG] [Thread-29775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:13:18.941 [DEBUG] [Thread-29775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:13:18.941 [DEBUG] [Thread-29775] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:13:18.944 [DEBUG] [Thread-29775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:13:18.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:13:18.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:13:18.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:13:18.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:13:18.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:13:18.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:13:18.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:13:18.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:13:18.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:13:18.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.009158 -999.00   +8.90   3.89     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NE.W 8.8 3.9 88.9 11.0 9.3 -25.7 9.2 -24.4 9.0 -22.1 9.2 -24.4
2026-04-16T02:13:18.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:13:18.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:13:18.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.009158
2026-04-16T02:13:18.966 [DEBUG] [Thread-29775] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:13:18.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:13:18.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:13:18.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:13:18.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:13:18.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:13:18.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:12:56', tmtdew=1.67209, humidity=88.791, cloud=0.0, wind=8.13456, temperature=8.64834, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:13:11.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.005, 3.1492499999999994, 2.646, nan, nan, nan, 0.18099999999999916, 0.25124999999999886, 0.21149999999999913, 2.0309999999999997, 2.007249999999999, 2.3649999999999984, 1.723749999999999, 0.048250000000001236, -0.029249999999999332, 0.019499999999998963, 0.057500000000000995, 0.16075000000000017, 0.08649999999999913, 0.08699999999999974, 0.1570000000000018, 0.10250000000000092, -0.03999999999999915, -0.11925000000000097], zp_timestamp='2026-04-16T00:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:13:19.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:13:19.224 [DEBUG] [Thread-29778] [transport.py] [_log()] starting thread (client mode): 0xee904670
2026-04-16T02:13:19.224 [DEBUG] [Thread-29778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:13:19.238 [DEBUG] [Thread-29778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:13:19.238 [INFO] [Thread-29778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:13:19.245 [DEBUG] [Thread-29778] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:13:19.246 [DEBUG] [Thread-29778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:13:19.246 [DEBUG] [Thread-29778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:13:19.246 [DEBUG] [Thread-29778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:13:19.246 [DEBUG] [Thread-29778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:13:19.246 [DEBUG] [Thread-29778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:13:19.246 [DEBUG] [Thread-29778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:13:19.246 [DEBUG] [Thread-29778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:13:19.246 [DEBUG] [Thread-29778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:13:19.246 [DEBUG] [Thread-29778] [transport.py] [_log()] client lang: <none>
2026-04-16T02:13:19.246 [DEBUG] [Thread-29778] [transport.py] [_log()] server lang: <none>
2026-04-16T02:13:19.246 [DEBUG] [Thread-29778] [transport.py] [_log()] kex follows: False
2026-04-16T02:13:19.246 [DEBUG] [Thread-29778] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:13:19.247 [DEBUG] [Thread-29778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:13:19.247 [DEBUG] [Thread-29778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:13:19.247 [DEBUG] [Thread-29778] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:13:19.247 [DEBUG] [Thread-29778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:13:19.247 [DEBUG] [Thread-29778] [transport.py] [_log()] Compression: none
2026-04-16T02:13:19.247 [DEBUG] [Thread-29778] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:13:19.302 [DEBUG] [Thread-29778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:13:19.303 [DEBUG] [Thread-29778] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:13:19.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:13:19.303 [DEBUG] [Thread-29778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:13:19.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:13:19.360 [DEBUG] [Thread-29778] [transport.py] [_log()] userauth is OK
2026-04-16T02:13:19.360 [DEBUG] [Thread-29778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:13:19.362 [DEBUG] [Thread-29778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:13:19.363 [DEBUG] [Thread-29778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:13:19.363 [DEBUG] [Thread-29778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:13:19.388 [INFO] [Thread-29778] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:13:19.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:13:19.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:13:20.209 [DEBUG] [Thread-29778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:13:20.210 [DEBUG] [Thread-29778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:13:20.258 [DEBUG] [Thread-29778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:13:20.258 [DEBUG] [Thread-29778] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:13:20.267 [DEBUG] [Thread-29778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:13:20.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:13:20.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')
2026-04-16T02:13:20.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') -> 00000000
2026-04-16T02:13:20.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:13:20.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:13:20.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:13:20.305 [DEBUG] [Thread-29778] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:13:21.062 [DEBUG] [Thread-29780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:13:36.107 [DEBUG] [Thread-29781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:13:48.168 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:13:48.169 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:13:50.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:13:50.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:13:50.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
2026-04-16T02:13:51.138 [DEBUG] [Thread-29782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:13:51.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 13, 31), 1.67192, 88.7909, 0.0, 8.01108, 8.6317, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:13:51.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:13:31
2026-04-16T02:13:51.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:13:52.425 [DEBUG] [Thread-29783] [transport.py] [_log()] starting thread (client mode): 0xf13cad10
2026-04-16T02:13:52.425 [DEBUG] [Thread-29783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:13:52.442 [DEBUG] [Thread-29783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:13:52.442 [INFO] [Thread-29783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:13:52.443 [DEBUG] [Thread-29783] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:13:52.443 [DEBUG] [Thread-29783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:13:52.443 [DEBUG] [Thread-29783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:13:52.443 [DEBUG] [Thread-29783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:13:52.444 [DEBUG] [Thread-29783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:13:52.444 [DEBUG] [Thread-29783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:13:52.444 [DEBUG] [Thread-29783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:13:52.444 [DEBUG] [Thread-29783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:13:52.444 [DEBUG] [Thread-29783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:13:52.444 [DEBUG] [Thread-29783] [transport.py] [_log()] client lang: <none>
2026-04-16T02:13:52.444 [DEBUG] [Thread-29783] [transport.py] [_log()] server lang: <none>
2026-04-16T02:13:52.444 [DEBUG] [Thread-29783] [transport.py] [_log()] kex follows: False
2026-04-16T02:13:52.444 [DEBUG] [Thread-29783] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:13:52.444 [DEBUG] [Thread-29783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:13:52.444 [DEBUG] [Thread-29783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:13:52.444 [DEBUG] [Thread-29783] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:13:52.444 [DEBUG] [Thread-29783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:13:52.445 [DEBUG] [Thread-29783] [transport.py] [_log()] Compression: none
2026-04-16T02:13:52.445 [DEBUG] [Thread-29783] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:13:52.463 [DEBUG] [Thread-29783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:13:52.464 [DEBUG] [Thread-29783] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:13:52.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:13:52.464 [DEBUG] [Thread-29783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:13:52.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:13:52.465 [DEBUG] [Thread-29783] [transport.py] [_log()] userauth is OK
2026-04-16T02:13:52.465 [DEBUG] [Thread-29783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:13:52.465 [DEBUG] [Thread-29783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:13:52.466 [DEBUG] [Thread-29783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:13:52.466 [DEBUG] [Thread-29783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:13:52.483 [INFO] [Thread-29783] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:13:52.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:13:53.050 [DEBUG] [Thread-29783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:13:53.050 [DEBUG] [Thread-29783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:13:53.051 [DEBUG] [Thread-29783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:13:53.091 [DEBUG] [Thread-29783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:13:53.091 [DEBUG] [Thread-29783] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:13:53.094 [DEBUG] [Thread-29783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:13:53.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:13:53.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:13:53.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:13:53.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:13:53.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:13:53.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:13:53.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:13:53.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:13:53.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:13:53.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.009505 -999.00   +8.90   8.55     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESW 9.7 8.6 72.8 10.5 9.3 -25.7 9.2 -24.4 8.9 -22.1 9.2 -24.2
2026-04-16T02:13:53.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:13:53.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:13:53.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.009505
2026-04-16T02:13:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:13:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:13:53.117 [DEBUG] [Thread-29783] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:13:53.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:13:53.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:13:53.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:13:53.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:13:31', tmtdew=1.67192, humidity=88.7909, cloud=0.0, wind=8.01108, temperature=8.6317, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:13:41.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.005, 3.1492499999999994, 2.646, nan, nan, nan, 0.18099999999999916, 0.25124999999999886, 0.21149999999999913, 2.0309999999999997, 2.007249999999999, 2.3649999999999984, 1.723749999999999, 0.048250000000001236, -0.029249999999999332, 0.019499999999998963, 0.057500000000000995, 0.16075000000000017, 0.08649999999999913, 0.08699999999999974, 0.1570000000000018, 0.10250000000000092, -0.03999999999999915, -0.11925000000000097], zp_timestamp='2026-04-16T00:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:13:53.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:13:53.373 [DEBUG] [Thread-29786] [transport.py] [_log()] starting thread (client mode): 0xf13ca230
2026-04-16T02:13:53.373 [DEBUG] [Thread-29786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:13:53.387 [DEBUG] [Thread-29786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:13:53.387 [INFO] [Thread-29786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:13:53.394 [DEBUG] [Thread-29786] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:13:53.395 [DEBUG] [Thread-29786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:13:53.395 [DEBUG] [Thread-29786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:13:53.395 [DEBUG] [Thread-29786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:13:53.395 [DEBUG] [Thread-29786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:13:53.395 [DEBUG] [Thread-29786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:13:53.395 [DEBUG] [Thread-29786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:13:53.395 [DEBUG] [Thread-29786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:13:53.395 [DEBUG] [Thread-29786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:13:53.395 [DEBUG] [Thread-29786] [transport.py] [_log()] client lang: <none>
2026-04-16T02:13:53.395 [DEBUG] [Thread-29786] [transport.py] [_log()] server lang: <none>
2026-04-16T02:13:53.395 [DEBUG] [Thread-29786] [transport.py] [_log()] kex follows: False
2026-04-16T02:13:53.396 [DEBUG] [Thread-29786] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:13:53.396 [DEBUG] [Thread-29786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:13:53.396 [DEBUG] [Thread-29786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:13:53.396 [DEBUG] [Thread-29786] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:13:53.396 [DEBUG] [Thread-29786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:13:53.396 [DEBUG] [Thread-29786] [transport.py] [_log()] Compression: none
2026-04-16T02:13:53.396 [DEBUG] [Thread-29786] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:13:53.450 [DEBUG] [Thread-29786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:13:53.451 [DEBUG] [Thread-29786] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:13:53.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:13:53.451 [DEBUG] [Thread-29786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:13:53.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:13:53.508 [DEBUG] [Thread-29786] [transport.py] [_log()] userauth is OK
2026-04-16T02:13:53.508 [DEBUG] [Thread-29786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:13:53.508 [DEBUG] [Thread-29786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:13:53.508 [DEBUG] [Thread-29786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:13:53.508 [DEBUG] [Thread-29786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:13:53.533 [INFO] [Thread-29786] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:13:53.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:13:53.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:13:54.345 [DEBUG] [Thread-29786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:13:54.345 [DEBUG] [Thread-29786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:13:54.392 [DEBUG] [Thread-29786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:13:54.393 [DEBUG] [Thread-29786] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:13:54.401 [DEBUG] [Thread-29786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:13:54.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:13:54.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')
2026-04-16T02:13:54.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
2026-04-16T02:13:54.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:13:54.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:13:54.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:13:54.434 [DEBUG] [Thread-29786] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:14:02.209 [DEBUG] [Thread-29788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:14:06.169 [DEBUG] [Thread-29789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:14:21.213 [DEBUG] [Thread-29790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:14:24.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:14:24.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:14:24.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
2026-04-16T02:14:25.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 14, 7), 1.67727, 88.7577, 0.0, 7.37604, 8.6317, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:14:25.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:14:07
2026-04-16T02:14:26.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:14:26.582 [DEBUG] [Thread-29791] [transport.py] [_log()] starting thread (client mode): 0xf13c8430
2026-04-16T02:14:26.582 [DEBUG] [Thread-29791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:14:26.601 [DEBUG] [Thread-29791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:14:26.601 [INFO] [Thread-29791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:14:26.605 [DEBUG] [Thread-29791] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:14:26.605 [DEBUG] [Thread-29791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:14:26.605 [DEBUG] [Thread-29791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:14:26.605 [DEBUG] [Thread-29791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:14:26.605 [DEBUG] [Thread-29791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:14:26.605 [DEBUG] [Thread-29791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:14:26.605 [DEBUG] [Thread-29791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:14:26.605 [DEBUG] [Thread-29791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:14:26.605 [DEBUG] [Thread-29791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:14:26.605 [DEBUG] [Thread-29791] [transport.py] [_log()] client lang: <none>
2026-04-16T02:14:26.606 [DEBUG] [Thread-29791] [transport.py] [_log()] server lang: <none>
2026-04-16T02:14:26.606 [DEBUG] [Thread-29791] [transport.py] [_log()] kex follows: False
2026-04-16T02:14:26.606 [DEBUG] [Thread-29791] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:14:26.606 [DEBUG] [Thread-29791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:14:26.606 [DEBUG] [Thread-29791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:14:26.606 [DEBUG] [Thread-29791] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:14:26.606 [DEBUG] [Thread-29791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:14:26.606 [DEBUG] [Thread-29791] [transport.py] [_log()] Compression: none
2026-04-16T02:14:26.606 [DEBUG] [Thread-29791] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:14:26.621 [DEBUG] [Thread-29791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:14:26.622 [DEBUG] [Thread-29791] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:14:26.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:14:26.622 [DEBUG] [Thread-29791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:14:26.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:14:26.623 [DEBUG] [Thread-29791] [transport.py] [_log()] userauth is OK
2026-04-16T02:14:26.623 [DEBUG] [Thread-29791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:14:26.623 [DEBUG] [Thread-29791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:14:26.624 [DEBUG] [Thread-29791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:14:26.624 [DEBUG] [Thread-29791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:14:26.648 [INFO] [Thread-29791] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:14:26.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:14:27.286 [DEBUG] [Thread-29791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:14:27.287 [DEBUG] [Thread-29791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:14:27.287 [DEBUG] [Thread-29791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:14:27.328 [DEBUG] [Thread-29791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:14:27.328 [DEBUG] [Thread-29791] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:14:27.332 [DEBUG] [Thread-29791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:14:27.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:14:27.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:14:27.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:14:27.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:14:27.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:14:27.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:14:27.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:14:27.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:14:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:14:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.009853 -999.00   +8.90   5.94     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NE.W 6.3 5.9 99.6 9.0 9.3 -25.7 9.2 -24.4 8.9 -22.1 9.2 -24.3
2026-04-16T02:14:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:14:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:14:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.009853
2026-04-16T02:14:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:14:27.355 [DEBUG] [Thread-29791] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:14:27.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:14:27.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:14:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:14:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:14:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:14:07', tmtdew=1.67727, humidity=88.7577, cloud=0.0, wind=7.37604, temperature=8.6317, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:14:11.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.005, 3.1492499999999994, 2.646, nan, nan, nan, 0.18099999999999916, 0.25124999999999886, 0.21149999999999913, 2.0309999999999997, 2.007249999999999, 2.3649999999999984, 1.723749999999999, 0.048250000000001236, -0.029249999999999332, 0.019499999999998963, 0.057500000000000995, 0.16075000000000017, 0.08649999999999913, 0.08699999999999974, 0.1570000000000018, 0.10250000000000092, -0.03999999999999915, -0.11925000000000097], zp_timestamp='2026-04-16T00:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:14:27.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:14:27.592 [DEBUG] [Thread-29794] [transport.py] [_log()] starting thread (client mode): 0xee904f40
2026-04-16T02:14:27.592 [DEBUG] [Thread-29794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:14:27.606 [DEBUG] [Thread-29794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:14:27.606 [INFO] [Thread-29794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:14:27.614 [DEBUG] [Thread-29794] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:14:27.614 [DEBUG] [Thread-29794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:14:27.614 [DEBUG] [Thread-29794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:14:27.614 [DEBUG] [Thread-29794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:14:27.614 [DEBUG] [Thread-29794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:14:27.614 [DEBUG] [Thread-29794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:14:27.614 [DEBUG] [Thread-29794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:14:27.614 [DEBUG] [Thread-29794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:14:27.614 [DEBUG] [Thread-29794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:14:27.614 [DEBUG] [Thread-29794] [transport.py] [_log()] client lang: <none>
2026-04-16T02:14:27.615 [DEBUG] [Thread-29794] [transport.py] [_log()] server lang: <none>
2026-04-16T02:14:27.615 [DEBUG] [Thread-29794] [transport.py] [_log()] kex follows: False
2026-04-16T02:14:27.615 [DEBUG] [Thread-29794] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:14:27.615 [DEBUG] [Thread-29794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:14:27.615 [DEBUG] [Thread-29794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:14:27.615 [DEBUG] [Thread-29794] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:14:27.615 [DEBUG] [Thread-29794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:14:27.615 [DEBUG] [Thread-29794] [transport.py] [_log()] Compression: none
2026-04-16T02:14:27.615 [DEBUG] [Thread-29794] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:14:27.671 [DEBUG] [Thread-29794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:14:27.671 [DEBUG] [Thread-29794] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:14:27.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:14:27.672 [DEBUG] [Thread-29794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:14:27.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:14:27.727 [DEBUG] [Thread-29794] [transport.py] [_log()] userauth is OK
2026-04-16T02:14:27.728 [DEBUG] [Thread-29794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:14:27.728 [DEBUG] [Thread-29794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:14:27.728 [DEBUG] [Thread-29794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:14:27.728 [DEBUG] [Thread-29794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:14:27.753 [INFO] [Thread-29794] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:14:27.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:14:27.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:14:28.581 [DEBUG] [Thread-29794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:14:28.581 [DEBUG] [Thread-29794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:14:28.629 [DEBUG] [Thread-29794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:14:28.630 [DEBUG] [Thread-29794] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:14:28.641 [DEBUG] [Thread-29794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:14:28.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:14:28.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')
2026-04-16T02:14:28.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
2026-04-16T02:14:28.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:14:28.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:14:28.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:14:28.673 [DEBUG] [Thread-29794] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:14:36.242 [DEBUG] [Thread-29796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:14:48.371 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:14:48.372 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:14:51.280 [DEBUG] [Thread-29797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:14:58.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:14:58.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:14:58.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
2026-04-16T02:14:59.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 14, 42), 1.44992, 90.5484, 0.0, 12.4222, 8.52966, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:14:59.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:14:42
2026-04-16T02:15:00.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:15:00.815 [DEBUG] [Thread-29798] [transport.py] [_log()] starting thread (client mode): 0xf1367940
2026-04-16T02:15:00.815 [DEBUG] [Thread-29798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:15:00.830 [DEBUG] [Thread-29798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:15:00.830 [INFO] [Thread-29798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:15:00.832 [DEBUG] [Thread-29798] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:15:00.832 [DEBUG] [Thread-29798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:15:00.832 [DEBUG] [Thread-29798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:15:00.832 [DEBUG] [Thread-29798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:15:00.833 [DEBUG] [Thread-29798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:15:00.833 [DEBUG] [Thread-29798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:15:00.833 [DEBUG] [Thread-29798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:15:00.833 [DEBUG] [Thread-29798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:15:00.833 [DEBUG] [Thread-29798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:15:00.833 [DEBUG] [Thread-29798] [transport.py] [_log()] client lang: <none>
2026-04-16T02:15:00.833 [DEBUG] [Thread-29798] [transport.py] [_log()] server lang: <none>
2026-04-16T02:15:00.833 [DEBUG] [Thread-29798] [transport.py] [_log()] kex follows: False
2026-04-16T02:15:00.833 [DEBUG] [Thread-29798] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:15:00.833 [DEBUG] [Thread-29798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:15:00.833 [DEBUG] [Thread-29798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:15:00.834 [DEBUG] [Thread-29798] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:15:00.834 [DEBUG] [Thread-29798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:15:00.834 [DEBUG] [Thread-29798] [transport.py] [_log()] Compression: none
2026-04-16T02:15:00.834 [DEBUG] [Thread-29798] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:15:00.850 [DEBUG] [Thread-29798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:15:00.851 [DEBUG] [Thread-29798] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:15:00.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:15:00.851 [DEBUG] [Thread-29798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:15:00.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:15:00.852 [DEBUG] [Thread-29798] [transport.py] [_log()] userauth is OK
2026-04-16T02:15:00.853 [DEBUG] [Thread-29798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:15:00.853 [DEBUG] [Thread-29798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:15:00.853 [DEBUG] [Thread-29798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:15:00.853 [DEBUG] [Thread-29798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:15:00.876 [INFO] [Thread-29798] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:15:00.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:15:01.428 [DEBUG] [Thread-29798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:15:01.429 [DEBUG] [Thread-29798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:15:01.429 [DEBUG] [Thread-29798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:15:01.470 [DEBUG] [Thread-29798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:15:01.470 [DEBUG] [Thread-29798] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:15:01.472 [DEBUG] [Thread-29798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:15:01.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:15:01.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:15:01.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:15:01.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:15:01.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:15:01.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:15:01.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:15:01.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:15:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:15:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.010200 -999.00   +8.90   7.11     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NE.W 7.1 7.1 101.1 9.6 9.3 -25.6 9.2 -24.3 8.9 -22.2 9.2 -24.3
2026-04-16T02:15:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:15:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:15:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.010200
2026-04-16T02:15:01.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:15:01.489 [DEBUG] [Thread-29798] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:15:01.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:15:01.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:15:01.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:15:01.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:15:01.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:14:42', tmtdew=1.44992, humidity=90.5484, cloud=0.0, wind=12.4222, temperature=8.52966, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:14:41.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.005, 3.1492499999999994, 2.646, nan, nan, nan, 0.18099999999999916, 0.25124999999999886, 0.21149999999999913, 2.0309999999999997, 2.007249999999999, 2.3649999999999984, 1.723749999999999, 0.048250000000001236, -0.029249999999999332, 0.019499999999998963, 0.057500000000000995, 0.16075000000000017, 0.08649999999999913, 0.08699999999999974, 0.1570000000000018, 0.10250000000000092, -0.03999999999999915, -0.11925000000000097], zp_timestamp='2026-04-16T00:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:15:01.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:15:01.727 [DEBUG] [Thread-29801] [transport.py] [_log()] starting thread (client mode): 0xf1367af0
2026-04-16T02:15:01.727 [DEBUG] [Thread-29801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:15:01.742 [DEBUG] [Thread-29801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:15:01.743 [INFO] [Thread-29801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:15:01.750 [DEBUG] [Thread-29801] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:15:01.750 [DEBUG] [Thread-29801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:15:01.750 [DEBUG] [Thread-29801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:15:01.750 [DEBUG] [Thread-29801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:15:01.750 [DEBUG] [Thread-29801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:15:01.750 [DEBUG] [Thread-29801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:15:01.750 [DEBUG] [Thread-29801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:15:01.750 [DEBUG] [Thread-29801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:15:01.750 [DEBUG] [Thread-29801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:15:01.750 [DEBUG] [Thread-29801] [transport.py] [_log()] client lang: <none>
2026-04-16T02:15:01.750 [DEBUG] [Thread-29801] [transport.py] [_log()] server lang: <none>
2026-04-16T02:15:01.750 [DEBUG] [Thread-29801] [transport.py] [_log()] kex follows: False
2026-04-16T02:15:01.750 [DEBUG] [Thread-29801] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:15:01.750 [DEBUG] [Thread-29801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:15:01.750 [DEBUG] [Thread-29801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:15:01.751 [DEBUG] [Thread-29801] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:15:01.751 [DEBUG] [Thread-29801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:15:01.751 [DEBUG] [Thread-29801] [transport.py] [_log()] Compression: none
2026-04-16T02:15:01.751 [DEBUG] [Thread-29801] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:15:01.806 [DEBUG] [Thread-29801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:15:01.807 [DEBUG] [Thread-29801] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:15:01.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:15:01.807 [DEBUG] [Thread-29801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:15:01.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:15:01.864 [DEBUG] [Thread-29801] [transport.py] [_log()] userauth is OK
2026-04-16T02:15:01.864 [DEBUG] [Thread-29801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:15:01.864 [DEBUG] [Thread-29801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:15:01.864 [DEBUG] [Thread-29801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:15:01.864 [DEBUG] [Thread-29801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:15:01.881 [INFO] [Thread-29801] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:15:01.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:15:01.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:15:02.349 [DEBUG] [Thread-29803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:15:02.722 [DEBUG] [Thread-29801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:15:02.722 [DEBUG] [Thread-29801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:15:02.769 [DEBUG] [Thread-29801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:15:02.769 [DEBUG] [Thread-29801] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:15:02.777 [DEBUG] [Thread-29801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:15:02.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:15:02.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')
2026-04-16T02:15:02.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
2026-04-16T02:15:02.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:15:02.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:15:02.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:15:02.808 [DEBUG] [Thread-29801] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:15:06.309 [DEBUG] [Thread-29804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:15:21.347 [DEBUG] [Thread-29805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:15:32.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:15:32.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:15:32.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
2026-04-16T02:15:34.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 15, 18), 1.67977, 89.241, 0.0, 7.72884, 8.61506, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:15:34.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:15:18
2026-04-16T02:15:34.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:15:35.130 [DEBUG] [Thread-29806] [transport.py] [_log()] starting thread (client mode): 0xee9543a0
2026-04-16T02:15:35.130 [DEBUG] [Thread-29806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:15:35.150 [DEBUG] [Thread-29806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:15:35.151 [INFO] [Thread-29806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] client lang: <none>
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] server lang: <none>
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] kex follows: False
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:15:35.154 [DEBUG] [Thread-29806] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:15:35.155 [DEBUG] [Thread-29806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:15:35.155 [DEBUG] [Thread-29806] [transport.py] [_log()] Compression: none
2026-04-16T02:15:35.155 [DEBUG] [Thread-29806] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:15:35.170 [DEBUG] [Thread-29806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:15:35.170 [DEBUG] [Thread-29806] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:15:35.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:15:35.171 [DEBUG] [Thread-29806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:15:35.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:15:35.172 [DEBUG] [Thread-29806] [transport.py] [_log()] userauth is OK
2026-04-16T02:15:35.172 [DEBUG] [Thread-29806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:15:35.172 [DEBUG] [Thread-29806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:15:35.172 [DEBUG] [Thread-29806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:15:35.172 [DEBUG] [Thread-29806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:15:35.191 [INFO] [Thread-29806] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:15:35.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:15:36.377 [DEBUG] [Thread-29808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:15:39.393 [DEBUG] [Thread-29806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:15:39.394 [DEBUG] [Thread-29806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:15:39.394 [DEBUG] [Thread-29806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:15:39.434 [DEBUG] [Thread-29806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:15:39.434 [DEBUG] [Thread-29806] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:15:39.437 [DEBUG] [Thread-29806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:15:39.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:15:39.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:15:39.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:15:39.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:15:39.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:15:39.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:15:39.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:15:39.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:15:39.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:15:39.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.010200 -999.00   +8.90   7.11     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NE.W 7.1 7.1 101.1 9.6 9.3 -25.6 9.2 -24.3 8.9 -22.2 9.2 -24.3
2026-04-16T02:15:39.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:15:39.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:15:39.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.010200
2026-04-16T02:15:39.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:15:39.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:15:39.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:15:39.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:15:39.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:15:39.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:15:18', tmtdew=1.67977, humidity=89.241, cloud=0.0, wind=7.72884, temperature=8.61506, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:14:41.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.005, 3.1492499999999994, 2.646, nan, nan, nan, 0.18099999999999916, 0.25124999999999886, 0.21149999999999913, 2.0309999999999997, 2.007249999999999, 2.3649999999999984, 1.723749999999999, 0.048250000000001236, -0.029249999999999332, 0.019499999999998963, 0.057500000000000995, 0.16075000000000017, 0.08649999999999913, 0.08699999999999974, 0.1570000000000018, 0.10250000000000092, -0.03999999999999915, -0.11925000000000097], zp_timestamp='2026-04-16T00:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:15:39.464 [DEBUG] [Thread-29806] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:15:39.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:15:39.720 [DEBUG] [Thread-29810] [transport.py] [_log()] starting thread (client mode): 0xee9c7790
2026-04-16T02:15:39.720 [DEBUG] [Thread-29810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:15:39.734 [DEBUG] [Thread-29810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:15:39.734 [INFO] [Thread-29810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:15:39.742 [DEBUG] [Thread-29810] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:15:39.742 [DEBUG] [Thread-29810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:15:39.742 [DEBUG] [Thread-29810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:15:39.742 [DEBUG] [Thread-29810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:15:39.742 [DEBUG] [Thread-29810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:15:39.742 [DEBUG] [Thread-29810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:15:39.742 [DEBUG] [Thread-29810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:15:39.742 [DEBUG] [Thread-29810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:15:39.742 [DEBUG] [Thread-29810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:15:39.742 [DEBUG] [Thread-29810] [transport.py] [_log()] client lang: <none>
2026-04-16T02:15:39.743 [DEBUG] [Thread-29810] [transport.py] [_log()] server lang: <none>
2026-04-16T02:15:39.743 [DEBUG] [Thread-29810] [transport.py] [_log()] kex follows: False
2026-04-16T02:15:39.743 [DEBUG] [Thread-29810] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:15:39.743 [DEBUG] [Thread-29810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:15:39.743 [DEBUG] [Thread-29810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:15:39.743 [DEBUG] [Thread-29810] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:15:39.743 [DEBUG] [Thread-29810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:15:39.743 [DEBUG] [Thread-29810] [transport.py] [_log()] Compression: none
2026-04-16T02:15:39.743 [DEBUG] [Thread-29810] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:15:39.800 [DEBUG] [Thread-29810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:15:39.800 [DEBUG] [Thread-29810] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:15:39.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:15:39.801 [DEBUG] [Thread-29810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:15:39.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:15:39.856 [DEBUG] [Thread-29810] [transport.py] [_log()] userauth is OK
2026-04-16T02:15:39.856 [DEBUG] [Thread-29810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:15:39.856 [DEBUG] [Thread-29810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:15:39.856 [DEBUG] [Thread-29810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:15:39.856 [DEBUG] [Thread-29810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:15:39.882 [INFO] [Thread-29810] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:15:39.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:15:39.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:15:40.701 [DEBUG] [Thread-29810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:15:40.702 [DEBUG] [Thread-29810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:15:40.750 [DEBUG] [Thread-29810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:15:40.750 [DEBUG] [Thread-29810] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:15:40.759 [DEBUG] [Thread-29810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:15:40.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:15:40.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')
2026-04-16T02:15:40.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
2026-04-16T02:15:40.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:15:40.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:15:40.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:15:40.794 [DEBUG] [Thread-29810] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:15:48.578 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:15:48.579 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:15:51.406 [DEBUG] [Thread-29812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:16:02.493 [DEBUG] [Thread-29813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:16:06.450 [DEBUG] [Thread-29814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:16:10.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:16:10.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:16:10.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
2026-04-16T02:16:12.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 15, 55), 1.67194, 89.2907, 0.0, 9.91692, 8.63161, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:16:12.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:15:55
2026-04-16T02:16:12.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:16:12.976 [DEBUG] [Thread-29815] [transport.py] [_log()] starting thread (client mode): 0xf13cb820
2026-04-16T02:16:12.976 [DEBUG] [Thread-29815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:16:12.994 [DEBUG] [Thread-29815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:16:12.994 [INFO] [Thread-29815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:16:12.998 [DEBUG] [Thread-29815] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:16:12.998 [DEBUG] [Thread-29815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:16:12.998 [DEBUG] [Thread-29815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:16:12.998 [DEBUG] [Thread-29815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:16:12.998 [DEBUG] [Thread-29815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:16:12.998 [DEBUG] [Thread-29815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:16:12.998 [DEBUG] [Thread-29815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:16:12.998 [DEBUG] [Thread-29815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:16:12.998 [DEBUG] [Thread-29815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:16:12.998 [DEBUG] [Thread-29815] [transport.py] [_log()] client lang: <none>
2026-04-16T02:16:12.998 [DEBUG] [Thread-29815] [transport.py] [_log()] server lang: <none>
2026-04-16T02:16:12.998 [DEBUG] [Thread-29815] [transport.py] [_log()] kex follows: False
2026-04-16T02:16:12.999 [DEBUG] [Thread-29815] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:16:12.999 [DEBUG] [Thread-29815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:16:12.999 [DEBUG] [Thread-29815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:16:12.999 [DEBUG] [Thread-29815] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:16:12.999 [DEBUG] [Thread-29815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:16:12.999 [DEBUG] [Thread-29815] [transport.py] [_log()] Compression: none
2026-04-16T02:16:12.999 [DEBUG] [Thread-29815] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:16:13.015 [DEBUG] [Thread-29815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:16:13.015 [DEBUG] [Thread-29815] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:16:13.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:16:13.016 [DEBUG] [Thread-29815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:16:13.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:16:13.017 [DEBUG] [Thread-29815] [transport.py] [_log()] userauth is OK
2026-04-16T02:16:13.017 [DEBUG] [Thread-29815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:16:13.018 [DEBUG] [Thread-29815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:16:13.018 [DEBUG] [Thread-29815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:16:13.018 [DEBUG] [Thread-29815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:16:13.042 [INFO] [Thread-29815] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:16:13.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:16:13.833 [DEBUG] [Thread-29815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:16:13.833 [DEBUG] [Thread-29815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:16:13.833 [DEBUG] [Thread-29815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:16:13.874 [DEBUG] [Thread-29815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:16:13.874 [DEBUG] [Thread-29815] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:16:13.877 [DEBUG] [Thread-29815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:16:13.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:16:13.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:16:13.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:16:13.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:16:13.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:16:13.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:16:13.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:16:13.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:16:13.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:16:13.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.010547 -999.00   +8.90   5.27     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NE.W 6.0 5.3 102.2 9.7 9.3 -25.6 9.1 -24.3 8.9 -22.4 9.2 -24.1
2026-04-16T02:16:13.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:16:13.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:16:13.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.010547
2026-04-16T02:16:13.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:16:13.900 [DEBUG] [Thread-29815] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:16:13.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:16:13.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:16:13.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:16:13.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:16:13.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:15:55', tmtdew=1.67194, humidity=89.2907, cloud=0.0, wind=9.91692, temperature=8.63161, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:15:11.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.005, 3.1492499999999994, 2.646, nan, nan, nan, 0.18099999999999916, 0.25124999999999886, 0.21149999999999913, 2.0309999999999997, 2.007249999999999, 2.3649999999999984, 1.723749999999999, 0.048250000000001236, -0.029249999999999332, 0.019499999999998963, 0.057500000000000995, 0.16075000000000017, 0.08649999999999913, 0.08699999999999974, 0.1570000000000018, 0.10250000000000092, -0.03999999999999915, -0.11925000000000097], zp_timestamp='2026-04-16T00:11:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:16:14.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:16:14.305 [DEBUG] [Thread-29818] [transport.py] [_log()] starting thread (client mode): 0xf1367d00
2026-04-16T02:16:14.305 [DEBUG] [Thread-29818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:16:14.323 [DEBUG] [Thread-29818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:16:14.323 [INFO] [Thread-29818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:16:14.335 [DEBUG] [Thread-29818] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:16:14.335 [DEBUG] [Thread-29818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:16:14.335 [DEBUG] [Thread-29818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:16:14.335 [DEBUG] [Thread-29818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:16:14.335 [DEBUG] [Thread-29818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:16:14.335 [DEBUG] [Thread-29818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:16:14.335 [DEBUG] [Thread-29818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:16:14.335 [DEBUG] [Thread-29818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:16:14.335 [DEBUG] [Thread-29818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:16:14.335 [DEBUG] [Thread-29818] [transport.py] [_log()] client lang: <none>
2026-04-16T02:16:14.336 [DEBUG] [Thread-29818] [transport.py] [_log()] server lang: <none>
2026-04-16T02:16:14.336 [DEBUG] [Thread-29818] [transport.py] [_log()] kex follows: False
2026-04-16T02:16:14.336 [DEBUG] [Thread-29818] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:16:14.336 [DEBUG] [Thread-29818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:16:14.336 [DEBUG] [Thread-29818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:16:14.336 [DEBUG] [Thread-29818] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:16:14.336 [DEBUG] [Thread-29818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:16:14.336 [DEBUG] [Thread-29818] [transport.py] [_log()] Compression: none
2026-04-16T02:16:14.336 [DEBUG] [Thread-29818] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:16:14.395 [DEBUG] [Thread-29818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:16:14.395 [DEBUG] [Thread-29818] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:16:14.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:16:14.396 [DEBUG] [Thread-29818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:16:14.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:16:14.451 [DEBUG] [Thread-29818] [transport.py] [_log()] userauth is OK
2026-04-16T02:16:14.451 [DEBUG] [Thread-29818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:16:14.451 [DEBUG] [Thread-29818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:16:14.451 [DEBUG] [Thread-29818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:16:14.451 [DEBUG] [Thread-29818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:16:14.469 [INFO] [Thread-29818] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:16:14.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:16:14.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:16:15.279 [DEBUG] [Thread-29818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:16:15.279 [DEBUG] [Thread-29818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:16:15.327 [DEBUG] [Thread-29818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:16:15.328 [DEBUG] [Thread-29818] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:16:15.336 [DEBUG] [Thread-29818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:16:15.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:16:15.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')
2026-04-16T02:16:15.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
2026-04-16T02:16:15.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:16:15.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:16:15.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:16:15.369 [DEBUG] [Thread-29818] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:16:21.479 [DEBUG] [Thread-29820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:16:36.521 [DEBUG] [Thread-29821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:16:45.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:16:45.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:16:45.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
2026-04-16T02:16:46.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 16, 31), 1.67194, 89.2907, 0.0, 10.1992, 8.63161, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:16:46.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:16:31
2026-04-16T02:16:47.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:16:47.571 [DEBUG] [Thread-29822] [transport.py] [_log()] starting thread (client mode): 0xee904760
2026-04-16T02:16:47.571 [DEBUG] [Thread-29822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:16:47.590 [DEBUG] [Thread-29822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:16:47.590 [INFO] [Thread-29822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:16:47.593 [DEBUG] [Thread-29822] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:16:47.593 [DEBUG] [Thread-29822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:16:47.593 [DEBUG] [Thread-29822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:16:47.593 [DEBUG] [Thread-29822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:16:47.593 [DEBUG] [Thread-29822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:16:47.593 [DEBUG] [Thread-29822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:16:47.593 [DEBUG] [Thread-29822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:16:47.593 [DEBUG] [Thread-29822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:16:47.594 [DEBUG] [Thread-29822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:16:47.594 [DEBUG] [Thread-29822] [transport.py] [_log()] client lang: <none>
2026-04-16T02:16:47.594 [DEBUG] [Thread-29822] [transport.py] [_log()] server lang: <none>
2026-04-16T02:16:47.594 [DEBUG] [Thread-29822] [transport.py] [_log()] kex follows: False
2026-04-16T02:16:47.594 [DEBUG] [Thread-29822] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:16:47.594 [DEBUG] [Thread-29822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:16:47.594 [DEBUG] [Thread-29822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:16:47.594 [DEBUG] [Thread-29822] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:16:47.594 [DEBUG] [Thread-29822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:16:47.594 [DEBUG] [Thread-29822] [transport.py] [_log()] Compression: none
2026-04-16T02:16:47.594 [DEBUG] [Thread-29822] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:16:47.610 [DEBUG] [Thread-29822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:16:47.611 [DEBUG] [Thread-29822] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:16:47.611 [DEBUG] [Thread-29822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:16:47.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:16:47.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:16:47.612 [DEBUG] [Thread-29822] [transport.py] [_log()] userauth is OK
2026-04-16T02:16:47.612 [DEBUG] [Thread-29822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:16:47.612 [DEBUG] [Thread-29822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:16:47.612 [DEBUG] [Thread-29822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:16:47.613 [DEBUG] [Thread-29822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:16:47.637 [INFO] [Thread-29822] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:16:47.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:16:48.420 [DEBUG] [Thread-29822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:16:48.421 [DEBUG] [Thread-29822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:16:48.421 [DEBUG] [Thread-29822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:16:48.461 [DEBUG] [Thread-29822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:16:48.461 [DEBUG] [Thread-29822] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:16:48.464 [DEBUG] [Thread-29822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:16:48.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:16:48.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:16:48.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:16:48.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:16:48.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:16:48.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:16:48.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:16:48.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:16:48.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:16:48.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.011242 -999.00   +8.90   8.16     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESW 6.8 8.2 77.4 10.3 9.3 -25.4 9.2 -24.3 8.9 -22.1 9.2 -24.2
2026-04-16T02:16:48.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:16:48.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:16:48.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.011242
2026-04-16T02:16:48.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:16:48.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:16:48.492 [DEBUG] [Thread-29822] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:16:48.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:16:48.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:16:48.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:16:48.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:16:31', tmtdew=1.67194, humidity=89.2907, cloud=0.0, wind=10.1992, temperature=8.63161, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:16:11.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.7040000000000006, 3.143249999999999, 2.3099999999999996, nan, nan, nan, 0.4299999999999997, 0.69625, 0.26900000000000013, 2.140999999999999, 2.0487499999999983, 1.7239999999999984, 1.395249999999999, 0.1232500000000023, 0.012750000000000483, 0.0824999999999978, 0.09399999999999942, 0.14675000000000082, 0.14150000000000063, 0.12400000000000055, 0.20300000000000118, 0.19000000000000128, -0.03399999999999892, -0.08225000000000193], zp_timestamp='2026-04-16T00:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:16:48.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:16:48.746 [DEBUG] [Thread-29825] [transport.py] [_log()] starting thread (client mode): 0xf1366710
2026-04-16T02:16:48.746 [DEBUG] [Thread-29825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:16:48.760 [DEBUG] [Thread-29825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:16:48.760 [INFO] [Thread-29825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:16:48.767 [DEBUG] [Thread-29825] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:16:48.767 [DEBUG] [Thread-29825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:16:48.767 [DEBUG] [Thread-29825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:16:48.767 [DEBUG] [Thread-29825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:16:48.767 [DEBUG] [Thread-29825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:16:48.767 [DEBUG] [Thread-29825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:16:48.767 [DEBUG] [Thread-29825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:16:48.768 [DEBUG] [Thread-29825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:16:48.768 [DEBUG] [Thread-29825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:16:48.768 [DEBUG] [Thread-29825] [transport.py] [_log()] client lang: <none>
2026-04-16T02:16:48.768 [DEBUG] [Thread-29825] [transport.py] [_log()] server lang: <none>
2026-04-16T02:16:48.768 [DEBUG] [Thread-29825] [transport.py] [_log()] kex follows: False
2026-04-16T02:16:48.768 [DEBUG] [Thread-29825] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:16:48.768 [DEBUG] [Thread-29825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:16:48.768 [DEBUG] [Thread-29825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:16:48.768 [DEBUG] [Thread-29825] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:16:48.768 [DEBUG] [Thread-29825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:16:48.768 [DEBUG] [Thread-29825] [transport.py] [_log()] Compression: none
2026-04-16T02:16:48.769 [DEBUG] [Thread-29825] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:16:48.780 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:16:48.781 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:16:48.827 [DEBUG] [Thread-29825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:16:48.827 [DEBUG] [Thread-29825] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:16:48.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:16:48.828 [DEBUG] [Thread-29825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:16:48.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:16:48.883 [DEBUG] [Thread-29825] [transport.py] [_log()] userauth is OK
2026-04-16T02:16:48.884 [DEBUG] [Thread-29825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:16:48.884 [DEBUG] [Thread-29825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:16:48.884 [DEBUG] [Thread-29825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:16:48.884 [DEBUG] [Thread-29825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:16:48.911 [INFO] [Thread-29825] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:16:48.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:16:48.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:16:49.729 [DEBUG] [Thread-29825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:16:49.729 [DEBUG] [Thread-29825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:16:49.777 [DEBUG] [Thread-29825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:16:49.777 [DEBUG] [Thread-29825] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:16:49.786 [DEBUG] [Thread-29825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:16:49.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:16:49.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')
2026-04-16T02:16:49.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
2026-04-16T02:16:49.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:16:49.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:16:49.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:16:49.821 [DEBUG] [Thread-29825] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:16:51.550 [DEBUG] [Thread-29827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:17:02.656 [DEBUG] [Thread-29828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:17:06.597 [DEBUG] [Thread-29829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:17:19.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:17:19.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:17:19.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
2026-04-16T02:17:21.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 17, 6), 1.66946, 89.3073, 0.0, 9.93456, 8.64818, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:17:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:17:06
2026-04-16T02:17:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:17:21.626 [DEBUG] [Thread-29830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:17:21.975 [DEBUG] [Thread-29831] [transport.py] [_log()] starting thread (client mode): 0xee9ea7d0
2026-04-16T02:17:21.975 [DEBUG] [Thread-29831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:17:21.995 [DEBUG] [Thread-29831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:17:21.995 [INFO] [Thread-29831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:17:21.998 [DEBUG] [Thread-29831] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:17:21.998 [DEBUG] [Thread-29831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:17:21.998 [DEBUG] [Thread-29831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:17:21.999 [DEBUG] [Thread-29831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:17:21.999 [DEBUG] [Thread-29831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:17:21.999 [DEBUG] [Thread-29831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:17:21.999 [DEBUG] [Thread-29831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:17:21.999 [DEBUG] [Thread-29831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:17:21.999 [DEBUG] [Thread-29831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:17:21.999 [DEBUG] [Thread-29831] [transport.py] [_log()] client lang: <none>
2026-04-16T02:17:21.999 [DEBUG] [Thread-29831] [transport.py] [_log()] server lang: <none>
2026-04-16T02:17:21.999 [DEBUG] [Thread-29831] [transport.py] [_log()] kex follows: False
2026-04-16T02:17:21.999 [DEBUG] [Thread-29831] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:17:21.999 [DEBUG] [Thread-29831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:17:21.999 [DEBUG] [Thread-29831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:17:22.000 [DEBUG] [Thread-29831] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:17:22.000 [DEBUG] [Thread-29831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:17:22.000 [DEBUG] [Thread-29831] [transport.py] [_log()] Compression: none
2026-04-16T02:17:22.000 [DEBUG] [Thread-29831] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:17:22.020 [DEBUG] [Thread-29831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:17:22.020 [DEBUG] [Thread-29831] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:17:22.020 [DEBUG] [Thread-29831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:17:22.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:17:22.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:17:22.022 [DEBUG] [Thread-29831] [transport.py] [_log()] userauth is OK
2026-04-16T02:17:22.022 [DEBUG] [Thread-29831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:17:22.022 [DEBUG] [Thread-29831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:17:22.022 [DEBUG] [Thread-29831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:17:22.022 [DEBUG] [Thread-29831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:17:22.047 [INFO] [Thread-29831] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:17:22.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:17:22.846 [DEBUG] [Thread-29831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:17:22.846 [DEBUG] [Thread-29831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:17:22.846 [DEBUG] [Thread-29831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:17:22.887 [DEBUG] [Thread-29831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:17:22.887 [DEBUG] [Thread-29831] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:17:22.889 [DEBUG] [Thread-29831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:17:22.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:17:22.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:17:22.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:17:22.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:17:22.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:17:22.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:17:22.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:17:22.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:17:22.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:17:22.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.011589 -999.00   +8.90   3.36     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESW 8.3 3.4 114.9 9.0 9.2 -25.6 9.2 -24.2 8.8 -22.1 9.1 -24.3
2026-04-16T02:17:22.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:17:22.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:17:22.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.011589
2026-04-16T02:17:22.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:17:22.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:17:22.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:17:22.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:17:22.907 [DEBUG] [Thread-29831] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:17:22.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:17:22.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:17:06', tmtdew=1.66946, humidity=89.3073, cloud=0.0, wind=9.93456, temperature=8.64818, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:16:41.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.7040000000000006, 3.143249999999999, 2.3099999999999996, nan, nan, nan, 0.4299999999999997, 0.69625, 0.26900000000000013, 2.140999999999999, 2.0487499999999983, 1.7239999999999984, 1.395249999999999, 0.1232500000000023, 0.012750000000000483, 0.0824999999999978, 0.09399999999999942, 0.14675000000000082, 0.14150000000000063, 0.12400000000000055, 0.20300000000000118, 0.19000000000000128, -0.03399999999999892, -0.08225000000000193], zp_timestamp='2026-04-16T00:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:17:23.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:17:23.127 [DEBUG] [Thread-29834] [transport.py] [_log()] starting thread (client mode): 0xee9eac50
2026-04-16T02:17:23.128 [DEBUG] [Thread-29834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:17:23.141 [DEBUG] [Thread-29834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:17:23.141 [INFO] [Thread-29834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:17:23.149 [DEBUG] [Thread-29834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:17:23.149 [DEBUG] [Thread-29834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:17:23.149 [DEBUG] [Thread-29834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:17:23.149 [DEBUG] [Thread-29834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:17:23.149 [DEBUG] [Thread-29834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:17:23.149 [DEBUG] [Thread-29834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:17:23.149 [DEBUG] [Thread-29834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:17:23.149 [DEBUG] [Thread-29834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:17:23.150 [DEBUG] [Thread-29834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:17:23.150 [DEBUG] [Thread-29834] [transport.py] [_log()] client lang: <none>
2026-04-16T02:17:23.150 [DEBUG] [Thread-29834] [transport.py] [_log()] server lang: <none>
2026-04-16T02:17:23.150 [DEBUG] [Thread-29834] [transport.py] [_log()] kex follows: False
2026-04-16T02:17:23.150 [DEBUG] [Thread-29834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:17:23.150 [DEBUG] [Thread-29834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:17:23.150 [DEBUG] [Thread-29834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:17:23.150 [DEBUG] [Thread-29834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:17:23.150 [DEBUG] [Thread-29834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:17:23.150 [DEBUG] [Thread-29834] [transport.py] [_log()] Compression: none
2026-04-16T02:17:23.150 [DEBUG] [Thread-29834] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:17:23.206 [DEBUG] [Thread-29834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:17:23.207 [DEBUG] [Thread-29834] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:17:23.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:17:23.207 [DEBUG] [Thread-29834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:17:23.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:17:23.263 [DEBUG] [Thread-29834] [transport.py] [_log()] userauth is OK
2026-04-16T02:17:23.264 [DEBUG] [Thread-29834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:17:23.264 [DEBUG] [Thread-29834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:17:23.264 [DEBUG] [Thread-29834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:17:23.264 [DEBUG] [Thread-29834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:17:23.289 [INFO] [Thread-29834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:17:23.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:17:23.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:17:24.111 [DEBUG] [Thread-29834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:17:24.111 [DEBUG] [Thread-29834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:17:24.158 [DEBUG] [Thread-29834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:17:24.159 [DEBUG] [Thread-29834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:17:24.167 [DEBUG] [Thread-29834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:17:24.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:17:24.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')
2026-04-16T02:17:24.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
2026-04-16T02:17:24.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:17:24.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:17:24.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:17:24.198 [DEBUG] [Thread-29834] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:17:36.656 [DEBUG] [Thread-29836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:17:48.983 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:17:48.984 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:17:51.902 [DEBUG] [Thread-29837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:17:54.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:17:54.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:17:54.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
2026-04-16T02:17:55.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 17, 42), 1.4439, 90.5814, 0.0, 11.646, 8.46317, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:17:55.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:17:42
2026-04-16T02:17:56.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:17:56.504 [DEBUG] [Thread-29838] [transport.py] [_log()] starting thread (client mode): 0xee904730
2026-04-16T02:17:56.505 [DEBUG] [Thread-29838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:17:56.525 [DEBUG] [Thread-29838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:17:56.525 [INFO] [Thread-29838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:17:56.528 [DEBUG] [Thread-29838] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:17:56.529 [DEBUG] [Thread-29838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:17:56.529 [DEBUG] [Thread-29838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:17:56.529 [DEBUG] [Thread-29838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:17:56.529 [DEBUG] [Thread-29838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:17:56.529 [DEBUG] [Thread-29838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:17:56.529 [DEBUG] [Thread-29838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:17:56.529 [DEBUG] [Thread-29838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:17:56.529 [DEBUG] [Thread-29838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:17:56.529 [DEBUG] [Thread-29838] [transport.py] [_log()] client lang: <none>
2026-04-16T02:17:56.529 [DEBUG] [Thread-29838] [transport.py] [_log()] server lang: <none>
2026-04-16T02:17:56.529 [DEBUG] [Thread-29838] [transport.py] [_log()] kex follows: False
2026-04-16T02:17:56.529 [DEBUG] [Thread-29838] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:17:56.529 [DEBUG] [Thread-29838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:17:56.530 [DEBUG] [Thread-29838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:17:56.530 [DEBUG] [Thread-29838] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:17:56.530 [DEBUG] [Thread-29838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:17:56.530 [DEBUG] [Thread-29838] [transport.py] [_log()] Compression: none
2026-04-16T02:17:56.530 [DEBUG] [Thread-29838] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:17:56.547 [DEBUG] [Thread-29838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:17:56.548 [DEBUG] [Thread-29838] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:17:56.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:17:56.548 [DEBUG] [Thread-29838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:17:56.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:17:56.549 [DEBUG] [Thread-29838] [transport.py] [_log()] userauth is OK
2026-04-16T02:17:56.550 [DEBUG] [Thread-29838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:17:56.550 [DEBUG] [Thread-29838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:17:56.550 [DEBUG] [Thread-29838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:17:56.550 [DEBUG] [Thread-29838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:17:56.589 [INFO] [Thread-29838] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:17:56.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:17:57.385 [DEBUG] [Thread-29838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:17:57.386 [DEBUG] [Thread-29838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:17:57.386 [DEBUG] [Thread-29838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:17:57.427 [DEBUG] [Thread-29838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:17:57.427 [DEBUG] [Thread-29838] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:17:57.430 [DEBUG] [Thread-29838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:17:57.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:17:57.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:17:57.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:17:57.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:17:57.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:17:57.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:17:57.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:17:57.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:17:57.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:17:57.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.011936 -999.00   +8.90   7.40     89   +7.30 1 1 1 3 1     0    0 -999.00 0.00 .NESw 7.3 7.4 86.4 12.5 9.3 -25.4 9.1 -24.2 8.9 -22.0 9.2 -24.2
2026-04-16T02:17:57.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:17:57.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:17:57.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.011936
2026-04-16T02:17:57.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:17:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:17:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:17:57.456 [DEBUG] [Thread-29838] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:17:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:17:57.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:17:57.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:17:42', tmtdew=1.4439, humidity=90.5814, cloud=0.0, wind=11.646, temperature=8.46317, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:17:11.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.7040000000000006, 3.143249999999999, 2.3099999999999996, nan, nan, nan, 0.4299999999999997, 0.69625, 0.26900000000000013, 2.140999999999999, 2.0487499999999983, 1.7239999999999984, 1.395249999999999, 0.1232500000000023, 0.012750000000000483, 0.0824999999999978, 0.09399999999999942, 0.14675000000000082, 0.14150000000000063, 0.12400000000000055, 0.20300000000000118, 0.19000000000000128, -0.03399999999999892, -0.08225000000000193], zp_timestamp='2026-04-16T00:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:17:57.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:17:57.699 [DEBUG] [Thread-29841] [transport.py] [_log()] starting thread (client mode): 0xee905960
2026-04-16T02:17:57.699 [DEBUG] [Thread-29841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:17:57.713 [DEBUG] [Thread-29841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:17:57.713 [INFO] [Thread-29841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:17:57.720 [DEBUG] [Thread-29841] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:17:57.720 [DEBUG] [Thread-29841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:17:57.720 [DEBUG] [Thread-29841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:17:57.720 [DEBUG] [Thread-29841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:17:57.720 [DEBUG] [Thread-29841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:17:57.720 [DEBUG] [Thread-29841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:17:57.720 [DEBUG] [Thread-29841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:17:57.721 [DEBUG] [Thread-29841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:17:57.721 [DEBUG] [Thread-29841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:17:57.721 [DEBUG] [Thread-29841] [transport.py] [_log()] client lang: <none>
2026-04-16T02:17:57.721 [DEBUG] [Thread-29841] [transport.py] [_log()] server lang: <none>
2026-04-16T02:17:57.721 [DEBUG] [Thread-29841] [transport.py] [_log()] kex follows: False
2026-04-16T02:17:57.721 [DEBUG] [Thread-29841] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:17:57.721 [DEBUG] [Thread-29841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:17:57.721 [DEBUG] [Thread-29841] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:17:57.721 [DEBUG] [Thread-29841] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:17:57.721 [DEBUG] [Thread-29841] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:17:57.721 [DEBUG] [Thread-29841] [transport.py] [_log()] Compression: none
2026-04-16T02:17:57.721 [DEBUG] [Thread-29841] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:17:57.778 [DEBUG] [Thread-29841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:17:57.778 [DEBUG] [Thread-29841] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:17:57.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:17:57.779 [DEBUG] [Thread-29841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:17:57.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:17:57.835 [DEBUG] [Thread-29841] [transport.py] [_log()] userauth is OK
2026-04-16T02:17:57.835 [DEBUG] [Thread-29841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:17:57.835 [DEBUG] [Thread-29841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:17:57.835 [DEBUG] [Thread-29841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:17:57.835 [DEBUG] [Thread-29841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:17:57.852 [INFO] [Thread-29841] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:17:57.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:17:57.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:17:58.713 [DEBUG] [Thread-29841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:17:58.713 [DEBUG] [Thread-29841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:17:58.761 [DEBUG] [Thread-29841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:17:58.761 [DEBUG] [Thread-29841] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:17:58.770 [DEBUG] [Thread-29841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:17:58.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:17:58.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')
2026-04-16T02:17:58.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') -> 00000000
2026-04-16T02:17:58.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:17:58.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:17:58.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:17:58.804 [DEBUG] [Thread-29841] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:18:02.808 [DEBUG] [Thread-29843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:18:06.931 [DEBUG] [Thread-29844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:18:21.973 [DEBUG] [Thread-29845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:18:28.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:18:28.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:18:28.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T02:18:30.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 18, 18), 1.67707, 89.2579, 0.0, 9.864, 8.66521, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:18:30.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:18:18
2026-04-16T02:18:30.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:18:30.969 [DEBUG] [Thread-29846] [transport.py] [_log()] starting thread (client mode): 0xf1336650
2026-04-16T02:18:30.969 [DEBUG] [Thread-29846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:18:30.988 [DEBUG] [Thread-29846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:18:30.988 [INFO] [Thread-29846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:18:30.991 [DEBUG] [Thread-29846] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:18:30.991 [DEBUG] [Thread-29846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:18:30.991 [DEBUG] [Thread-29846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:18:30.992 [DEBUG] [Thread-29846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:18:30.992 [DEBUG] [Thread-29846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:18:30.992 [DEBUG] [Thread-29846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:18:30.992 [DEBUG] [Thread-29846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:18:30.992 [DEBUG] [Thread-29846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:18:30.992 [DEBUG] [Thread-29846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:18:30.992 [DEBUG] [Thread-29846] [transport.py] [_log()] client lang: <none>
2026-04-16T02:18:30.992 [DEBUG] [Thread-29846] [transport.py] [_log()] server lang: <none>
2026-04-16T02:18:30.992 [DEBUG] [Thread-29846] [transport.py] [_log()] kex follows: False
2026-04-16T02:18:30.992 [DEBUG] [Thread-29846] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:18:30.992 [DEBUG] [Thread-29846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:18:30.993 [DEBUG] [Thread-29846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:18:30.993 [DEBUG] [Thread-29846] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:18:30.993 [DEBUG] [Thread-29846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:18:30.993 [DEBUG] [Thread-29846] [transport.py] [_log()] Compression: none
2026-04-16T02:18:30.993 [DEBUG] [Thread-29846] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:18:31.012 [DEBUG] [Thread-29846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:18:31.012 [DEBUG] [Thread-29846] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:18:31.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:18:31.013 [DEBUG] [Thread-29846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:18:31.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:18:31.013 [DEBUG] [Thread-29846] [transport.py] [_log()] userauth is OK
2026-04-16T02:18:31.014 [DEBUG] [Thread-29846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:18:31.014 [DEBUG] [Thread-29846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:18:31.014 [DEBUG] [Thread-29846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:18:31.014 [DEBUG] [Thread-29846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:18:31.048 [INFO] [Thread-29846] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:18:31.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:18:32.192 [DEBUG] [Thread-29846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:18:32.192 [DEBUG] [Thread-29846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:18:32.193 [DEBUG] [Thread-29846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:18:32.233 [DEBUG] [Thread-29846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:18:32.233 [DEBUG] [Thread-29846] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:18:32.236 [DEBUG] [Thread-29846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:18:32.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:18:32.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:18:32.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:18:32.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:18:32.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:18:32.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:18:32.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:18:32.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:18:32.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:18:32.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.012283 -999.00   +8.90   6.29     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESw 4.2 6.3 78.4 9.6 9.3 -25.5 9.2 -24.1 8.8 -22.1 9.2 -24.1
2026-04-16T02:18:32.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:18:32.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:18:32.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.012283
2026-04-16T02:18:32.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:18:32.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:18:32.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:18:32.263 [DEBUG] [Thread-29846] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:18:32.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:18:32.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:18:32.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:18:18', tmtdew=1.67707, humidity=89.2579, cloud=0.0, wind=9.864, temperature=8.66521, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:17:41.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.7040000000000006, 3.143249999999999, 2.3099999999999996, nan, nan, nan, 0.4299999999999997, 0.69625, 0.26900000000000013, 2.140999999999999, 2.0487499999999983, 1.7239999999999984, 1.395249999999999, 0.1232500000000023, 0.012750000000000483, 0.0824999999999978, 0.09399999999999942, 0.14675000000000082, 0.14150000000000063, 0.12400000000000055, 0.20300000000000118, 0.19000000000000128, -0.03399999999999892, -0.08225000000000193], zp_timestamp='2026-04-16T00:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:18:32.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:18:32.515 [DEBUG] [Thread-29849] [transport.py] [_log()] starting thread (client mode): 0xf1335990
2026-04-16T02:18:32.515 [DEBUG] [Thread-29849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:18:32.529 [DEBUG] [Thread-29849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:18:32.529 [INFO] [Thread-29849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:18:32.537 [DEBUG] [Thread-29849] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:18:32.537 [DEBUG] [Thread-29849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:18:32.537 [DEBUG] [Thread-29849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:18:32.537 [DEBUG] [Thread-29849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:18:32.537 [DEBUG] [Thread-29849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:18:32.537 [DEBUG] [Thread-29849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:18:32.537 [DEBUG] [Thread-29849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:18:32.537 [DEBUG] [Thread-29849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:18:32.537 [DEBUG] [Thread-29849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:18:32.537 [DEBUG] [Thread-29849] [transport.py] [_log()] client lang: <none>
2026-04-16T02:18:32.537 [DEBUG] [Thread-29849] [transport.py] [_log()] server lang: <none>
2026-04-16T02:18:32.538 [DEBUG] [Thread-29849] [transport.py] [_log()] kex follows: False
2026-04-16T02:18:32.538 [DEBUG] [Thread-29849] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:18:32.538 [DEBUG] [Thread-29849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:18:32.538 [DEBUG] [Thread-29849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:18:32.538 [DEBUG] [Thread-29849] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:18:32.538 [DEBUG] [Thread-29849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:18:32.538 [DEBUG] [Thread-29849] [transport.py] [_log()] Compression: none
2026-04-16T02:18:32.538 [DEBUG] [Thread-29849] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:18:32.595 [DEBUG] [Thread-29849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:18:32.595 [DEBUG] [Thread-29849] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:18:32.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:18:32.596 [DEBUG] [Thread-29849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:18:32.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:18:32.652 [DEBUG] [Thread-29849] [transport.py] [_log()] userauth is OK
2026-04-16T02:18:32.652 [DEBUG] [Thread-29849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:18:32.652 [DEBUG] [Thread-29849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:18:32.652 [DEBUG] [Thread-29849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:18:32.652 [DEBUG] [Thread-29849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:18:32.677 [INFO] [Thread-29849] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:18:32.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:18:32.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:18:33.490 [DEBUG] [Thread-29849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:18:33.491 [DEBUG] [Thread-29849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:18:33.539 [DEBUG] [Thread-29849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:18:33.539 [DEBUG] [Thread-29849] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:18:33.548 [DEBUG] [Thread-29849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:18:33.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:18:33.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')
2026-04-16T02:18:33.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
2026-04-16T02:18:33.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:18:33.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:18:33.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:18:33.583 [DEBUG] [Thread-29849] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:18:37.005 [DEBUG] [Thread-29851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:18:49.189 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:18:49.190 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:18:52.046 [DEBUG] [Thread-29852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:19:02.973 [DEBUG] [Thread-29853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:19:03.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:19:03.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:19:03.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
2026-04-16T02:19:04.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 18, 53), 1.42304, 90.7153, 0.0, 13.3747, 8.53031, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:19:04.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:18:53
2026-04-16T02:19:05.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:19:05.716 [DEBUG] [Thread-29854] [transport.py] [_log()] starting thread (client mode): 0xee907460
2026-04-16T02:19:05.716 [DEBUG] [Thread-29854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:19:05.736 [DEBUG] [Thread-29854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:19:05.736 [INFO] [Thread-29854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:19:05.739 [DEBUG] [Thread-29854] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:19:05.739 [DEBUG] [Thread-29854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:19:05.739 [DEBUG] [Thread-29854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:19:05.739 [DEBUG] [Thread-29854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:19:05.739 [DEBUG] [Thread-29854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:19:05.740 [DEBUG] [Thread-29854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:19:05.740 [DEBUG] [Thread-29854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:19:05.740 [DEBUG] [Thread-29854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:19:05.740 [DEBUG] [Thread-29854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:19:05.740 [DEBUG] [Thread-29854] [transport.py] [_log()] client lang: <none>
2026-04-16T02:19:05.740 [DEBUG] [Thread-29854] [transport.py] [_log()] server lang: <none>
2026-04-16T02:19:05.740 [DEBUG] [Thread-29854] [transport.py] [_log()] kex follows: False
2026-04-16T02:19:05.740 [DEBUG] [Thread-29854] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:19:05.740 [DEBUG] [Thread-29854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:19:05.740 [DEBUG] [Thread-29854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:19:05.740 [DEBUG] [Thread-29854] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:19:05.741 [DEBUG] [Thread-29854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:19:05.741 [DEBUG] [Thread-29854] [transport.py] [_log()] Compression: none
2026-04-16T02:19:05.741 [DEBUG] [Thread-29854] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:19:05.758 [DEBUG] [Thread-29854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:19:05.759 [DEBUG] [Thread-29854] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:19:05.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:19:05.759 [DEBUG] [Thread-29854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:19:05.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:19:05.760 [DEBUG] [Thread-29854] [transport.py] [_log()] userauth is OK
2026-04-16T02:19:05.761 [DEBUG] [Thread-29854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:19:05.761 [DEBUG] [Thread-29854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:19:05.761 [DEBUG] [Thread-29854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:19:05.761 [DEBUG] [Thread-29854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:19:05.785 [INFO] [Thread-29854] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:19:05.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:19:06.593 [DEBUG] [Thread-29854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:19:06.593 [DEBUG] [Thread-29854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:19:06.594 [DEBUG] [Thread-29854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:19:06.635 [DEBUG] [Thread-29854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:19:06.635 [DEBUG] [Thread-29854] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:19:06.638 [DEBUG] [Thread-29854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:19:06.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:19:06.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:19:06.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:19:06.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:19:06.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:19:06.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:19:06.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:19:06.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:19:06.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:19:06.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.012630 -999.00   +8.90   7.24     89   +7.30 1 1 1 3 1     0    0 -999.00 0.00 .NESW 5.6 7.2 83.2 9.1 9.3 -25.5 9.1 -24.2 8.9 -22.0 9.1 -24.2
2026-04-16T02:19:06.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:19:06.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:19:06.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.012630
2026-04-16T02:19:06.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:19:06.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:19:06.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:19:06.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:19:06.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:19:06.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:18:53', tmtdew=1.42304, humidity=90.7153, cloud=0.0, wind=13.3747, temperature=8.53031, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:18:11.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.7040000000000006, 3.143249999999999, 2.3099999999999996, nan, nan, nan, 0.4299999999999997, 0.69625, 0.26900000000000013, 2.140999999999999, 2.0487499999999983, 1.7239999999999984, 1.395249999999999, 0.1232500000000023, 0.012750000000000483, 0.0824999999999978, 0.09399999999999942, 0.14675000000000082, 0.14150000000000063, 0.12400000000000055, 0.20300000000000118, 0.19000000000000128, -0.03399999999999892, -0.08225000000000193], zp_timestamp='2026-04-16T00:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:19:06.665 [DEBUG] [Thread-29854] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:19:06.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:19:06.922 [DEBUG] [Thread-29857] [transport.py] [_log()] starting thread (client mode): 0xf1367850
2026-04-16T02:19:06.922 [DEBUG] [Thread-29857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:19:06.937 [DEBUG] [Thread-29857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:19:06.937 [INFO] [Thread-29857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:19:06.944 [DEBUG] [Thread-29857] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:19:06.944 [DEBUG] [Thread-29857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:19:06.945 [DEBUG] [Thread-29857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:19:06.945 [DEBUG] [Thread-29857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:19:06.945 [DEBUG] [Thread-29857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:19:06.945 [DEBUG] [Thread-29857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:19:06.945 [DEBUG] [Thread-29857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:19:06.945 [DEBUG] [Thread-29857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:19:06.945 [DEBUG] [Thread-29857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:19:06.945 [DEBUG] [Thread-29857] [transport.py] [_log()] client lang: <none>
2026-04-16T02:19:06.945 [DEBUG] [Thread-29857] [transport.py] [_log()] server lang: <none>
2026-04-16T02:19:06.945 [DEBUG] [Thread-29857] [transport.py] [_log()] kex follows: False
2026-04-16T02:19:06.945 [DEBUG] [Thread-29857] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:19:06.945 [DEBUG] [Thread-29857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:19:06.946 [DEBUG] [Thread-29857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:19:06.946 [DEBUG] [Thread-29857] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:19:06.946 [DEBUG] [Thread-29857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:19:06.946 [DEBUG] [Thread-29857] [transport.py] [_log()] Compression: none
2026-04-16T02:19:06.946 [DEBUG] [Thread-29857] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:19:07.003 [DEBUG] [Thread-29857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:19:07.003 [DEBUG] [Thread-29857] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:19:07.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:19:07.004 [DEBUG] [Thread-29857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:19:07.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:19:07.059 [DEBUG] [Thread-29857] [transport.py] [_log()] userauth is OK
2026-04-16T02:19:07.060 [DEBUG] [Thread-29857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:19:07.060 [DEBUG] [Thread-29857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:19:07.060 [DEBUG] [Thread-29857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:19:07.060 [DEBUG] [Thread-29857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:19:07.074 [DEBUG] [Thread-29859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:19:07.086 [INFO] [Thread-29857] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:19:07.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:19:07.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:19:07.960 [DEBUG] [Thread-29857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:19:07.961 [DEBUG] [Thread-29857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:19:08.008 [DEBUG] [Thread-29857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:19:08.008 [DEBUG] [Thread-29857] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:19:08.018 [DEBUG] [Thread-29857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:19:08.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:19: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')
2026-04-16T02:19:08.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
2026-04-16T02:19:08.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:19:08.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:19:08.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:19:08.053 [DEBUG] [Thread-29857] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:19:22.118 [DEBUG] [Thread-29860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:19:37.148 [DEBUG] [Thread-29861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:19:38.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:19:38.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:19:38.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
2026-04-16T02:19:39.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 19, 29), 1.67133, 89.2913, 0.0, 9.88164, 8.68221, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:19:39.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:19:29
2026-04-16T02:19:39.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:19:40.185 [DEBUG] [Thread-29862] [transport.py] [_log()] starting thread (client mode): 0xee9c3880
2026-04-16T02:19:40.185 [DEBUG] [Thread-29862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:19:40.205 [DEBUG] [Thread-29862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:19:40.205 [INFO] [Thread-29862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:19:40.208 [DEBUG] [Thread-29862] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:19:40.208 [DEBUG] [Thread-29862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:19:40.208 [DEBUG] [Thread-29862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:19:40.208 [DEBUG] [Thread-29862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:19:40.208 [DEBUG] [Thread-29862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:19:40.209 [DEBUG] [Thread-29862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:19:40.209 [DEBUG] [Thread-29862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:19:40.209 [DEBUG] [Thread-29862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:19:40.209 [DEBUG] [Thread-29862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:19:40.209 [DEBUG] [Thread-29862] [transport.py] [_log()] client lang: <none>
2026-04-16T02:19:40.209 [DEBUG] [Thread-29862] [transport.py] [_log()] server lang: <none>
2026-04-16T02:19:40.209 [DEBUG] [Thread-29862] [transport.py] [_log()] kex follows: False
2026-04-16T02:19:40.209 [DEBUG] [Thread-29862] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:19:40.209 [DEBUG] [Thread-29862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:19:40.209 [DEBUG] [Thread-29862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:19:40.209 [DEBUG] [Thread-29862] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:19:40.209 [DEBUG] [Thread-29862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:19:40.210 [DEBUG] [Thread-29862] [transport.py] [_log()] Compression: none
2026-04-16T02:19:40.210 [DEBUG] [Thread-29862] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:19:40.227 [DEBUG] [Thread-29862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:19:40.228 [DEBUG] [Thread-29862] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:19:40.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:19:40.228 [DEBUG] [Thread-29862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:19:40.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:19:40.230 [DEBUG] [Thread-29862] [transport.py] [_log()] userauth is OK
2026-04-16T02:19:40.230 [DEBUG] [Thread-29862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:19:40.230 [DEBUG] [Thread-29862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:19:40.230 [DEBUG] [Thread-29862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:19:40.230 [DEBUG] [Thread-29862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:19:40.253 [INFO] [Thread-29862] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:19:40.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:19:41.047 [DEBUG] [Thread-29862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:19:41.047 [DEBUG] [Thread-29862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:19:41.047 [DEBUG] [Thread-29862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:19:41.088 [DEBUG] [Thread-29862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:19:41.088 [DEBUG] [Thread-29862] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:19:41.091 [DEBUG] [Thread-29862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:19:41.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:19:41.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:19:41.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:19:41.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:19:41.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:19:41.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:19:41.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:19:41.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:19:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:19:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.012978 -999.00   +8.90   8.10     89   +7.30 1 1 1 3 1     0    0 -999.00 0.00 .NESW 5.4 8.1 58.2 10.5 9.3 -25.3 9.2 -24.3 8.8 -22.1 9.1 -24.2
2026-04-16T02:19:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:19:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:19:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.012978
2026-04-16T02:19:41.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:19:41.116 [DEBUG] [Thread-29862] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:19:41.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:19:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:19:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:19:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:19:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:19:29', tmtdew=1.67133, humidity=89.2913, cloud=0.0, wind=9.88164, temperature=8.68221, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:18:41.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.7040000000000006, 3.143249999999999, 2.3099999999999996, nan, nan, nan, 0.4299999999999997, 0.69625, 0.26900000000000013, 2.140999999999999, 2.0487499999999983, 1.7239999999999984, 1.395249999999999, 0.1232500000000023, 0.012750000000000483, 0.0824999999999978, 0.09399999999999942, 0.14675000000000082, 0.14150000000000063, 0.12400000000000055, 0.20300000000000118, 0.19000000000000128, -0.03399999999999892, -0.08225000000000193], zp_timestamp='2026-04-16T00:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:19:41.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:19:41.374 [DEBUG] [Thread-29865] [transport.py] [_log()] starting thread (client mode): 0xf1366b00
2026-04-16T02:19:41.374 [DEBUG] [Thread-29865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:19:41.389 [DEBUG] [Thread-29865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:19:41.389 [INFO] [Thread-29865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:19:41.396 [DEBUG] [Thread-29865] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:19:41.396 [DEBUG] [Thread-29865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:19:41.396 [DEBUG] [Thread-29865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:19:41.396 [DEBUG] [Thread-29865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:19:41.396 [DEBUG] [Thread-29865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:19:41.397 [DEBUG] [Thread-29865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:19:41.397 [DEBUG] [Thread-29865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:19:41.397 [DEBUG] [Thread-29865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:19:41.397 [DEBUG] [Thread-29865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:19:41.397 [DEBUG] [Thread-29865] [transport.py] [_log()] client lang: <none>
2026-04-16T02:19:41.397 [DEBUG] [Thread-29865] [transport.py] [_log()] server lang: <none>
2026-04-16T02:19:41.397 [DEBUG] [Thread-29865] [transport.py] [_log()] kex follows: False
2026-04-16T02:19:41.397 [DEBUG] [Thread-29865] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:19:41.397 [DEBUG] [Thread-29865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:19:41.397 [DEBUG] [Thread-29865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:19:41.397 [DEBUG] [Thread-29865] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:19:41.398 [DEBUG] [Thread-29865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:19:41.398 [DEBUG] [Thread-29865] [transport.py] [_log()] Compression: none
2026-04-16T02:19:41.398 [DEBUG] [Thread-29865] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:19:41.455 [DEBUG] [Thread-29865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:19:41.456 [DEBUG] [Thread-29865] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:19:41.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:19:41.456 [DEBUG] [Thread-29865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:19:41.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:19:41.511 [DEBUG] [Thread-29865] [transport.py] [_log()] userauth is OK
2026-04-16T02:19:41.511 [DEBUG] [Thread-29865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:19:41.512 [DEBUG] [Thread-29865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:19:41.512 [DEBUG] [Thread-29865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:19:41.512 [DEBUG] [Thread-29865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:19:41.537 [INFO] [Thread-29865] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:19:41.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:19:41.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:19:42.348 [DEBUG] [Thread-29865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:19:42.348 [DEBUG] [Thread-29865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:19:42.396 [DEBUG] [Thread-29865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:19:42.396 [DEBUG] [Thread-29865] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:19:42.405 [DEBUG] [Thread-29865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:19:42.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:19:42.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')
2026-04-16T02:19:42.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') -> 00000000
2026-04-16T02:19:42.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:19:42.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:19:42.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:19:42.444 [DEBUG] [Thread-29865] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:19:49.395 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:19:49.396 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:19:52.179 [DEBUG] [Thread-29867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:20:03.141 [DEBUG] [Thread-29868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:20:07.225 [DEBUG] [Thread-29869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:20:12.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:20:12.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:20:12.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
2026-04-16T02:20:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 20, 4), 1.65601, 89.3909, 0.0, 10.2344, 8.74856, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:20:13.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:20:04
2026-04-16T02:20:14.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:20:14.588 [DEBUG] [Thread-29870] [transport.py] [_log()] starting thread (client mode): 0xf1365930
2026-04-16T02:20:14.589 [DEBUG] [Thread-29870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:20:14.607 [DEBUG] [Thread-29870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:20:14.607 [INFO] [Thread-29870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:20:14.610 [DEBUG] [Thread-29870] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:20:14.610 [DEBUG] [Thread-29870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:20:14.611 [DEBUG] [Thread-29870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:20:14.611 [DEBUG] [Thread-29870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:20:14.611 [DEBUG] [Thread-29870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:20:14.611 [DEBUG] [Thread-29870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:20:14.611 [DEBUG] [Thread-29870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:20:14.611 [DEBUG] [Thread-29870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:20:14.611 [DEBUG] [Thread-29870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:20:14.611 [DEBUG] [Thread-29870] [transport.py] [_log()] client lang: <none>
2026-04-16T02:20:14.611 [DEBUG] [Thread-29870] [transport.py] [_log()] server lang: <none>
2026-04-16T02:20:14.611 [DEBUG] [Thread-29870] [transport.py] [_log()] kex follows: False
2026-04-16T02:20:14.611 [DEBUG] [Thread-29870] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:20:14.611 [DEBUG] [Thread-29870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:20:14.612 [DEBUG] [Thread-29870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:20:14.612 [DEBUG] [Thread-29870] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:20:14.612 [DEBUG] [Thread-29870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:20:14.612 [DEBUG] [Thread-29870] [transport.py] [_log()] Compression: none
2026-04-16T02:20:14.612 [DEBUG] [Thread-29870] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:20:14.628 [DEBUG] [Thread-29870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:20:14.629 [DEBUG] [Thread-29870] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:20:14.629 [DEBUG] [Thread-29870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:20:14.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:20:14.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:20:14.630 [DEBUG] [Thread-29870] [transport.py] [_log()] userauth is OK
2026-04-16T02:20:14.631 [DEBUG] [Thread-29870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:20:14.631 [DEBUG] [Thread-29870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:20:14.631 [DEBUG] [Thread-29870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:20:14.631 [DEBUG] [Thread-29870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:20:14.648 [INFO] [Thread-29870] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:20:14.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:20:22.257 [DEBUG] [Thread-29872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:20:22.343 [DEBUG] [Thread-29870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:20:22.344 [DEBUG] [Thread-29870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:20:22.344 [DEBUG] [Thread-29870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:20:22.384 [DEBUG] [Thread-29870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:20:22.384 [DEBUG] [Thread-29870] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:20:22.387 [DEBUG] [Thread-29870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:20:22.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:20:22.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:20:22.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:20:22.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:20:22.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:20:22.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:20:22.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:20:22.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:20:22.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:20:22.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.013672 -999.00   +8.90   7.21     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESW 6.2 7.2 63.0 9.4 9.2 -25.5 9.1 -24.2 8.8 -22.0 9.2 -24.1
2026-04-16T02:20:22.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:20:22.519 [DEBUG] [Thread-29870] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:20:22.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:20:22.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.013672
2026-04-16T02:20:22.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:20:22.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:20:22.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:20:22.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:20:22.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:20:22.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:20:04', tmtdew=1.65601, humidity=89.3909, cloud=0.0, wind=10.2344, temperature=8.74856, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:19:41.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.7040000000000006, 3.143249999999999, 2.3099999999999996, nan, nan, nan, 0.4299999999999997, 0.69625, 0.26900000000000013, 2.140999999999999, 2.0487499999999983, 1.7239999999999984, 1.395249999999999, 0.1232500000000023, 0.012750000000000483, 0.0824999999999978, 0.09399999999999942, 0.14675000000000082, 0.14150000000000063, 0.12400000000000055, 0.20300000000000118, 0.19000000000000128, -0.03399999999999892, -0.08225000000000193], zp_timestamp='2026-04-16T00:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:20:22.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:20:22.771 [DEBUG] [Thread-29874] [transport.py] [_log()] starting thread (client mode): 0xee990b50
2026-04-16T02:20:22.772 [DEBUG] [Thread-29874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:20:22.786 [DEBUG] [Thread-29874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:20:22.786 [INFO] [Thread-29874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:20:22.793 [DEBUG] [Thread-29874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:20:22.794 [DEBUG] [Thread-29874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:20:22.794 [DEBUG] [Thread-29874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:20:22.794 [DEBUG] [Thread-29874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:20:22.794 [DEBUG] [Thread-29874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:20:22.794 [DEBUG] [Thread-29874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:20:22.794 [DEBUG] [Thread-29874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:20:22.794 [DEBUG] [Thread-29874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:20:22.794 [DEBUG] [Thread-29874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:20:22.794 [DEBUG] [Thread-29874] [transport.py] [_log()] client lang: <none>
2026-04-16T02:20:22.794 [DEBUG] [Thread-29874] [transport.py] [_log()] server lang: <none>
2026-04-16T02:20:22.794 [DEBUG] [Thread-29874] [transport.py] [_log()] kex follows: False
2026-04-16T02:20:22.795 [DEBUG] [Thread-29874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:20:22.795 [DEBUG] [Thread-29874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:20:22.795 [DEBUG] [Thread-29874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:20:22.795 [DEBUG] [Thread-29874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:20:22.795 [DEBUG] [Thread-29874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:20:22.795 [DEBUG] [Thread-29874] [transport.py] [_log()] Compression: none
2026-04-16T02:20:22.795 [DEBUG] [Thread-29874] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:20:22.855 [DEBUG] [Thread-29874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:20:22.855 [DEBUG] [Thread-29874] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:20:22.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:20:22.856 [DEBUG] [Thread-29874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:20:22.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:20:22.912 [DEBUG] [Thread-29874] [transport.py] [_log()] userauth is OK
2026-04-16T02:20:22.913 [DEBUG] [Thread-29874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:20:22.913 [DEBUG] [Thread-29874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:20:22.913 [DEBUG] [Thread-29874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:20:22.913 [DEBUG] [Thread-29874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:20:22.933 [INFO] [Thread-29874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:20:22.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:20:22.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:20:23.767 [DEBUG] [Thread-29874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:20:23.768 [DEBUG] [Thread-29874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:20:23.814 [DEBUG] [Thread-29874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:20:23.814 [DEBUG] [Thread-29874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:20:23.823 [DEBUG] [Thread-29874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:20:23.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:20:23.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')
2026-04-16T02:20:23.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
2026-04-16T02:20:23.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:20:23.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:20:23.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:20:23.854 [DEBUG] [Thread-29874] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:20:37.287 [DEBUG] [Thread-29876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:20:49.601 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:20:49.603 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:20:52.329 [DEBUG] [Thread-29877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:20:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:20:53.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:20:53.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
2026-04-16T02:20:55.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 20, 40), 1.42762, 90.6826, 0.0, 12.775, 8.46423, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:20:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:20:40
2026-04-16T02:20:55.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:20:55.980 [DEBUG] [Thread-29878] [transport.py] [_log()] starting thread (client mode): 0xf1337580
2026-04-16T02:20:55.981 [DEBUG] [Thread-29878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:20:56.002 [DEBUG] [Thread-29878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:20:56.002 [INFO] [Thread-29878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:20:56.005 [DEBUG] [Thread-29878] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:20:56.005 [DEBUG] [Thread-29878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:20:56.005 [DEBUG] [Thread-29878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:20:56.005 [DEBUG] [Thread-29878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:20:56.005 [DEBUG] [Thread-29878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:20:56.005 [DEBUG] [Thread-29878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:20:56.005 [DEBUG] [Thread-29878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:20:56.006 [DEBUG] [Thread-29878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:20:56.006 [DEBUG] [Thread-29878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:20:56.006 [DEBUG] [Thread-29878] [transport.py] [_log()] client lang: <none>
2026-04-16T02:20:56.006 [DEBUG] [Thread-29878] [transport.py] [_log()] server lang: <none>
2026-04-16T02:20:56.006 [DEBUG] [Thread-29878] [transport.py] [_log()] kex follows: False
2026-04-16T02:20:56.006 [DEBUG] [Thread-29878] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:20:56.006 [DEBUG] [Thread-29878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:20:56.006 [DEBUG] [Thread-29878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:20:56.006 [DEBUG] [Thread-29878] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:20:56.006 [DEBUG] [Thread-29878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:20:56.006 [DEBUG] [Thread-29878] [transport.py] [_log()] Compression: none
2026-04-16T02:20:56.007 [DEBUG] [Thread-29878] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:20:56.024 [DEBUG] [Thread-29878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:20:56.024 [DEBUG] [Thread-29878] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:20:56.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:20:56.025 [DEBUG] [Thread-29878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:20:56.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:20:56.026 [DEBUG] [Thread-29878] [transport.py] [_log()] userauth is OK
2026-04-16T02:20:56.026 [DEBUG] [Thread-29878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:20:56.026 [DEBUG] [Thread-29878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:20:56.026 [DEBUG] [Thread-29878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:20:56.026 [DEBUG] [Thread-29878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:20:56.050 [INFO] [Thread-29878] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:20:56.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:20:56.882 [DEBUG] [Thread-29878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:20:56.882 [DEBUG] [Thread-29878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:20:56.883 [DEBUG] [Thread-29878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:20:56.923 [DEBUG] [Thread-29878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:20:56.923 [DEBUG] [Thread-29878] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:20:56.926 [DEBUG] [Thread-29878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:20:56.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:20:56.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:20:56.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:20:56.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:20:56.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:20:56.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:20:56.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:20:56.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:20:56.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:20:56.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.014019 -999.00   +8.90   6.60     89   +7.30 1 1 1 3 1     0    0 -999.00 0.00 .NESW 9.1 6.6 75.8 8.6 9.3 -25.5 9.1 -24.3 8.8 -22.1 9.1 -24.2
2026-04-16T02:20:56.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:20:56.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:20:56.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.014019
2026-04-16T02:20:56.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:20:56.951 [DEBUG] [Thread-29878] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:20:56.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:20:56.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:20:56.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:20:56.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:20:56.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:20:40', tmtdew=1.42762, humidity=90.6826, cloud=0.0, wind=12.775, temperature=8.46423, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:20:11.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.7040000000000006, 3.143249999999999, 2.3099999999999996, nan, nan, nan, 0.4299999999999997, 0.69625, 0.26900000000000013, 2.140999999999999, 2.0487499999999983, 1.7239999999999984, 1.395249999999999, 0.1232500000000023, 0.012750000000000483, 0.0824999999999978, 0.09399999999999942, 0.14675000000000082, 0.14150000000000063, 0.12400000000000055, 0.20300000000000118, 0.19000000000000128, -0.03399999999999892, -0.08225000000000193], zp_timestamp='2026-04-16T00:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:20:57.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:20:57.205 [DEBUG] [Thread-29881] [transport.py] [_log()] starting thread (client mode): 0xee9c07c0
2026-04-16T02:20:57.206 [DEBUG] [Thread-29881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:20:57.221 [DEBUG] [Thread-29881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:20:57.221 [INFO] [Thread-29881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:20:57.233 [DEBUG] [Thread-29881] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:20:57.233 [DEBUG] [Thread-29881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:20:57.234 [DEBUG] [Thread-29881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:20:57.234 [DEBUG] [Thread-29881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:20:57.234 [DEBUG] [Thread-29881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:20:57.234 [DEBUG] [Thread-29881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:20:57.234 [DEBUG] [Thread-29881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:20:57.234 [DEBUG] [Thread-29881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:20:57.234 [DEBUG] [Thread-29881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:20:57.234 [DEBUG] [Thread-29881] [transport.py] [_log()] client lang: <none>
2026-04-16T02:20:57.234 [DEBUG] [Thread-29881] [transport.py] [_log()] server lang: <none>
2026-04-16T02:20:57.234 [DEBUG] [Thread-29881] [transport.py] [_log()] kex follows: False
2026-04-16T02:20:57.234 [DEBUG] [Thread-29881] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:20:57.235 [DEBUG] [Thread-29881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:20:57.235 [DEBUG] [Thread-29881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:20:57.235 [DEBUG] [Thread-29881] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:20:57.235 [DEBUG] [Thread-29881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:20:57.235 [DEBUG] [Thread-29881] [transport.py] [_log()] Compression: none
2026-04-16T02:20:57.235 [DEBUG] [Thread-29881] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:20:57.291 [DEBUG] [Thread-29881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:20:57.291 [DEBUG] [Thread-29881] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:20:57.292 [DEBUG] [Thread-29881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:20:57.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:20:57.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:20:57.348 [DEBUG] [Thread-29881] [transport.py] [_log()] userauth is OK
2026-04-16T02:20:57.348 [DEBUG] [Thread-29881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:20:57.348 [DEBUG] [Thread-29881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:20:57.348 [DEBUG] [Thread-29881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:20:57.349 [DEBUG] [Thread-29881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:20:57.375 [INFO] [Thread-29881] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:20:57.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:20:57.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:20:58.231 [DEBUG] [Thread-29881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:20:58.232 [DEBUG] [Thread-29881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:20:58.279 [DEBUG] [Thread-29881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:20:58.279 [DEBUG] [Thread-29881] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:20:58.288 [DEBUG] [Thread-29881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:20:58.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:20:58.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')
2026-04-16T02:20:58.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
2026-04-16T02:20:58.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:20:58.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:20:58.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:20:58.320 [DEBUG] [Thread-29881] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:21:03.292 [DEBUG] [Thread-29883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:21:07.358 [DEBUG] [Thread-29884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:21:22.402 [DEBUG] [Thread-29885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:21:28.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:21:28.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:21:28.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
2026-04-16T02:21:29.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 21, 15), 1.60584, 89.3909, 0.0, 11.6287, 8.68198, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:21:29.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:21:15
2026-04-16T02:21:30.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:21:30.479 [DEBUG] [Thread-29886] [transport.py] [_log()] starting thread (client mode): 0xee933130
2026-04-16T02:21:30.479 [DEBUG] [Thread-29886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:21:30.498 [DEBUG] [Thread-29886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:21:30.498 [INFO] [Thread-29886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:21:30.501 [DEBUG] [Thread-29886] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:21:30.501 [DEBUG] [Thread-29886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:21:30.501 [DEBUG] [Thread-29886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:21:30.501 [DEBUG] [Thread-29886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:21:30.501 [DEBUG] [Thread-29886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:21:30.501 [DEBUG] [Thread-29886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:21:30.501 [DEBUG] [Thread-29886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:21:30.501 [DEBUG] [Thread-29886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:21:30.501 [DEBUG] [Thread-29886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:21:30.501 [DEBUG] [Thread-29886] [transport.py] [_log()] client lang: <none>
2026-04-16T02:21:30.502 [DEBUG] [Thread-29886] [transport.py] [_log()] server lang: <none>
2026-04-16T02:21:30.502 [DEBUG] [Thread-29886] [transport.py] [_log()] kex follows: False
2026-04-16T02:21:30.502 [DEBUG] [Thread-29886] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:21:30.502 [DEBUG] [Thread-29886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:21:30.502 [DEBUG] [Thread-29886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:21:30.502 [DEBUG] [Thread-29886] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:21:30.502 [DEBUG] [Thread-29886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:21:30.502 [DEBUG] [Thread-29886] [transport.py] [_log()] Compression: none
2026-04-16T02:21:30.502 [DEBUG] [Thread-29886] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:21:30.521 [DEBUG] [Thread-29886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:21:30.521 [DEBUG] [Thread-29886] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:21:30.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:21:30.522 [DEBUG] [Thread-29886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:21:30.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:21:30.523 [DEBUG] [Thread-29886] [transport.py] [_log()] userauth is OK
2026-04-16T02:21:30.523 [DEBUG] [Thread-29886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:21:30.523 [DEBUG] [Thread-29886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:21:30.523 [DEBUG] [Thread-29886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:21:30.523 [DEBUG] [Thread-29886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:21:30.557 [INFO] [Thread-29886] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:21:30.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:21:31.330 [DEBUG] [Thread-29886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:21:31.331 [DEBUG] [Thread-29886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:21:31.331 [DEBUG] [Thread-29886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:21:31.371 [DEBUG] [Thread-29886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:21:31.371 [DEBUG] [Thread-29886] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:21:31.374 [DEBUG] [Thread-29886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:21:31.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:21:31.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:21:31.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:21:31.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:21:31.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:21:31.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:21:31.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:21:31.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:21:31.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:21:31.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.014366 -999.00   +8.90   3.70     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESW 5.8 3.7 88.6 9.4 9.2 -25.6 9.2 -24.2 8.8 -22.0 9.1 -24.1
2026-04-16T02:21:31.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:21:31.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:21:31.398 [DEBUG] [Thread-29886] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:21:31.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.014366
2026-04-16T02:21:31.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:21:31.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:21:31.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:21:31.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:21:31.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:21:31.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:21:15', tmtdew=1.60584, humidity=89.3909, cloud=0.0, wind=11.6287, temperature=8.68198, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:20:41.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.7040000000000006, 3.143249999999999, 2.3099999999999996, nan, nan, nan, 0.4299999999999997, 0.69625, 0.26900000000000013, 2.140999999999999, 2.0487499999999983, 1.7239999999999984, 1.395249999999999, 0.1232500000000023, 0.012750000000000483, 0.0824999999999978, 0.09399999999999942, 0.14675000000000082, 0.14150000000000063, 0.12400000000000055, 0.20300000000000118, 0.19000000000000128, -0.03399999999999892, -0.08225000000000193], zp_timestamp='2026-04-16T00:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:21:31.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:21:31.663 [DEBUG] [Thread-29889] [transport.py] [_log()] starting thread (client mode): 0xf1334a00
2026-04-16T02:21:31.663 [DEBUG] [Thread-29889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:21:31.677 [DEBUG] [Thread-29889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:21:31.677 [INFO] [Thread-29889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:21:31.684 [DEBUG] [Thread-29889] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:21:31.684 [DEBUG] [Thread-29889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:21:31.684 [DEBUG] [Thread-29889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:21:31.684 [DEBUG] [Thread-29889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:21:31.684 [DEBUG] [Thread-29889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:21:31.684 [DEBUG] [Thread-29889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:21:31.684 [DEBUG] [Thread-29889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:21:31.685 [DEBUG] [Thread-29889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:21:31.685 [DEBUG] [Thread-29889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:21:31.685 [DEBUG] [Thread-29889] [transport.py] [_log()] client lang: <none>
2026-04-16T02:21:31.685 [DEBUG] [Thread-29889] [transport.py] [_log()] server lang: <none>
2026-04-16T02:21:31.685 [DEBUG] [Thread-29889] [transport.py] [_log()] kex follows: False
2026-04-16T02:21:31.685 [DEBUG] [Thread-29889] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:21:31.685 [DEBUG] [Thread-29889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:21:31.685 [DEBUG] [Thread-29889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:21:31.685 [DEBUG] [Thread-29889] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:21:31.685 [DEBUG] [Thread-29889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:21:31.685 [DEBUG] [Thread-29889] [transport.py] [_log()] Compression: none
2026-04-16T02:21:31.686 [DEBUG] [Thread-29889] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:21:31.742 [DEBUG] [Thread-29889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:21:31.743 [DEBUG] [Thread-29889] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:21:31.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:21:31.744 [DEBUG] [Thread-29889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:21:31.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:21:31.799 [DEBUG] [Thread-29889] [transport.py] [_log()] userauth is OK
2026-04-16T02:21:31.800 [DEBUG] [Thread-29889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:21:31.800 [DEBUG] [Thread-29889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:21:31.800 [DEBUG] [Thread-29889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:21:31.800 [DEBUG] [Thread-29889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:21:31.829 [INFO] [Thread-29889] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:21:31.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:21:31.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:21:32.656 [DEBUG] [Thread-29889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:21:32.656 [DEBUG] [Thread-29889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:21:32.704 [DEBUG] [Thread-29889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:21:32.704 [DEBUG] [Thread-29889] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:21:32.713 [DEBUG] [Thread-29889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:21:32.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:21:32.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-16T02:21:32.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') -> 00000000
2026-04-16T02:21:32.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:21:32.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:21:32.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:21:32.748 [DEBUG] [Thread-29889] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:21:37.434 [DEBUG] [Thread-29891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:21:49.808 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:21:49.809 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:21:52.524 [DEBUG] [Thread-29892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:22:02.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:22:02.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:22:02.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
2026-04-16T02:22:03.438 [DEBUG] [Thread-29893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:22:04.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 21, 50), 1.41202, 90.7817, 0.0, 12.6691, 8.49715, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:22:04.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:21:50
2026-04-16T02:22:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:22:04.815 [DEBUG] [Thread-29894] [transport.py] [_log()] starting thread (client mode): 0xee907460
2026-04-16T02:22:04.815 [DEBUG] [Thread-29894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:22:04.835 [DEBUG] [Thread-29894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:22:04.835 [INFO] [Thread-29894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:22:04.838 [DEBUG] [Thread-29894] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:22:04.838 [DEBUG] [Thread-29894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:22:04.838 [DEBUG] [Thread-29894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:22:04.838 [DEBUG] [Thread-29894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:22:04.839 [DEBUG] [Thread-29894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:22:04.839 [DEBUG] [Thread-29894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:22:04.839 [DEBUG] [Thread-29894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:22:04.839 [DEBUG] [Thread-29894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:22:04.839 [DEBUG] [Thread-29894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:22:04.839 [DEBUG] [Thread-29894] [transport.py] [_log()] client lang: <none>
2026-04-16T02:22:04.839 [DEBUG] [Thread-29894] [transport.py] [_log()] server lang: <none>
2026-04-16T02:22:04.839 [DEBUG] [Thread-29894] [transport.py] [_log()] kex follows: False
2026-04-16T02:22:04.839 [DEBUG] [Thread-29894] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:22:04.839 [DEBUG] [Thread-29894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:22:04.839 [DEBUG] [Thread-29894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:22:04.840 [DEBUG] [Thread-29894] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:22:04.840 [DEBUG] [Thread-29894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:22:04.840 [DEBUG] [Thread-29894] [transport.py] [_log()] Compression: none
2026-04-16T02:22:04.840 [DEBUG] [Thread-29894] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:22:04.856 [DEBUG] [Thread-29894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:22:04.857 [DEBUG] [Thread-29894] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:22:04.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:22:04.857 [DEBUG] [Thread-29894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:22:04.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:22:04.900 [DEBUG] [Thread-29894] [transport.py] [_log()] userauth is OK
2026-04-16T02:22:04.900 [DEBUG] [Thread-29894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:22:04.901 [DEBUG] [Thread-29894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:22:04.901 [DEBUG] [Thread-29894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:22:04.901 [DEBUG] [Thread-29894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:22:04.937 [INFO] [Thread-29894] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:22:04.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:22:05.704 [DEBUG] [Thread-29894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:22:05.705 [DEBUG] [Thread-29894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:22:05.705 [DEBUG] [Thread-29894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:22:05.745 [DEBUG] [Thread-29894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:22:05.745 [DEBUG] [Thread-29894] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:22:05.748 [DEBUG] [Thread-29894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:22:05.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:22:05.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:22:05.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:22:05.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:22:05.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:22:05.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:22:05.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:22:05.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:22:05.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:22:05.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.014714 -999.00   +8.90   5.23     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESW 7.1 5.2 115.7 8.4 9.2 -25.6 9.2 -24.3 8.8 -22.0 9.1 -24.2
2026-04-16T02:22:05.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:22:05.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:22:05.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.014714
2026-04-16T02:22:05.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:22:05.773 [DEBUG] [Thread-29894] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:22:05.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:22:05.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:22:05.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:22:05.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:22:05.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:21:50', tmtdew=1.41202, humidity=90.7817, cloud=0.0, wind=12.6691, temperature=8.49715, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:21:11.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.7040000000000006, 3.143249999999999, 2.3099999999999996, nan, nan, nan, 0.4299999999999997, 0.69625, 0.26900000000000013, 2.140999999999999, 2.0487499999999983, 1.7239999999999984, 1.395249999999999, 0.1232500000000023, 0.012750000000000483, 0.0824999999999978, 0.09399999999999942, 0.14675000000000082, 0.14150000000000063, 0.12400000000000055, 0.20300000000000118, 0.19000000000000128, -0.03399999999999892, -0.08225000000000193], zp_timestamp='2026-04-16T00:17:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:22:06.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:22:06.030 [DEBUG] [Thread-29897] [transport.py] [_log()] starting thread (client mode): 0xf1366b60
2026-04-16T02:22:06.030 [DEBUG] [Thread-29897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:22:06.045 [DEBUG] [Thread-29897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:22:06.045 [INFO] [Thread-29897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:22:06.052 [DEBUG] [Thread-29897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:22:06.052 [DEBUG] [Thread-29897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:22:06.052 [DEBUG] [Thread-29897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:22:06.052 [DEBUG] [Thread-29897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:22:06.052 [DEBUG] [Thread-29897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:22:06.052 [DEBUG] [Thread-29897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:22:06.053 [DEBUG] [Thread-29897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:22:06.053 [DEBUG] [Thread-29897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:22:06.053 [DEBUG] [Thread-29897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:22:06.053 [DEBUG] [Thread-29897] [transport.py] [_log()] client lang: <none>
2026-04-16T02:22:06.053 [DEBUG] [Thread-29897] [transport.py] [_log()] server lang: <none>
2026-04-16T02:22:06.053 [DEBUG] [Thread-29897] [transport.py] [_log()] kex follows: False
2026-04-16T02:22:06.053 [DEBUG] [Thread-29897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:22:06.053 [DEBUG] [Thread-29897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:22:06.053 [DEBUG] [Thread-29897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:22:06.053 [DEBUG] [Thread-29897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:22:06.053 [DEBUG] [Thread-29897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:22:06.054 [DEBUG] [Thread-29897] [transport.py] [_log()] Compression: none
2026-04-16T02:22:06.054 [DEBUG] [Thread-29897] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:22:06.112 [DEBUG] [Thread-29897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:22:06.112 [DEBUG] [Thread-29897] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:22:06.112 [DEBUG] [Thread-29897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:22:06.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:22:06.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:22:06.168 [DEBUG] [Thread-29897] [transport.py] [_log()] userauth is OK
2026-04-16T02:22:06.168 [DEBUG] [Thread-29897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:22:06.168 [DEBUG] [Thread-29897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:22:06.168 [DEBUG] [Thread-29897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:22:06.168 [DEBUG] [Thread-29897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:22:06.195 [INFO] [Thread-29897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:22:06.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:22:06.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:22:06.997 [DEBUG] [Thread-29897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:22:06.997 [DEBUG] [Thread-29897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:22:07.045 [DEBUG] [Thread-29897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:22:07.045 [DEBUG] [Thread-29897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:22:07.054 [DEBUG] [Thread-29897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:22:07.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:22:07.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')
2026-04-16T02:22:07.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
2026-04-16T02:22:07.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:22:07.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:22:07.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:22:07.089 [DEBUG] [Thread-29897] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:22:07.555 [DEBUG] [Thread-29899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:22:22.598 [DEBUG] [Thread-29900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:22:37.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:22:37.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:22:37.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
2026-04-16T02:22:37.630 [DEBUG] [Thread-29901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:22:38.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 22, 26), 1.60071, 89.4239, 0.0, 9.9522, 8.64847, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:22:38.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:22:26
2026-04-16T02:22:38.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:22:39.352 [DEBUG] [Thread-29902] [transport.py] [_log()] starting thread (client mode): 0xee906950
2026-04-16T02:22:39.352 [DEBUG] [Thread-29902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:22:39.374 [DEBUG] [Thread-29902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:22:39.374 [INFO] [Thread-29902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:22:39.378 [DEBUG] [Thread-29902] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:22:39.378 [DEBUG] [Thread-29902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:22:39.378 [DEBUG] [Thread-29902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:22:39.378 [DEBUG] [Thread-29902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:22:39.378 [DEBUG] [Thread-29902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:22:39.378 [DEBUG] [Thread-29902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:22:39.378 [DEBUG] [Thread-29902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:22:39.378 [DEBUG] [Thread-29902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:22:39.378 [DEBUG] [Thread-29902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:22:39.378 [DEBUG] [Thread-29902] [transport.py] [_log()] client lang: <none>
2026-04-16T02:22:39.379 [DEBUG] [Thread-29902] [transport.py] [_log()] server lang: <none>
2026-04-16T02:22:39.379 [DEBUG] [Thread-29902] [transport.py] [_log()] kex follows: False
2026-04-16T02:22:39.379 [DEBUG] [Thread-29902] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:22:39.379 [DEBUG] [Thread-29902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:22:39.379 [DEBUG] [Thread-29902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:22:39.379 [DEBUG] [Thread-29902] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:22:39.379 [DEBUG] [Thread-29902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:22:39.379 [DEBUG] [Thread-29902] [transport.py] [_log()] Compression: none
2026-04-16T02:22:39.379 [DEBUG] [Thread-29902] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:22:39.395 [DEBUG] [Thread-29902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:22:39.396 [DEBUG] [Thread-29902] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:22:39.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:22:39.396 [DEBUG] [Thread-29902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:22:39.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:22:39.397 [DEBUG] [Thread-29902] [transport.py] [_log()] userauth is OK
2026-04-16T02:22:39.398 [DEBUG] [Thread-29902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:22:39.398 [DEBUG] [Thread-29902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:22:39.398 [DEBUG] [Thread-29902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:22:39.398 [DEBUG] [Thread-29902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:22:39.425 [INFO] [Thread-29902] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:22:39.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:22:40.242 [DEBUG] [Thread-29902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:22:40.242 [DEBUG] [Thread-29902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:22:40.243 [DEBUG] [Thread-29902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:22:40.283 [DEBUG] [Thread-29902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:22:40.283 [DEBUG] [Thread-29902] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:22:40.286 [DEBUG] [Thread-29902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:22:40.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:22:40.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:22:40.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:22:40.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:22:40.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:22:40.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:22:40.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:22:40.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:22:40.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:22:40.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.015061 -999.00   +8.90   8.88     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESW 6.6 8.9 70.8 11.6 9.2 -25.6 9.1 -24.3 8.8 -22.1 9.1 -24.2
2026-04-16T02:22:40.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:22:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:22:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.015061
2026-04-16T02:22:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:22:40.312 [DEBUG] [Thread-29902] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:22:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:22:40.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:22:40.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:22:40.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:22:40.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:22:26', tmtdew=1.60071, humidity=89.4239, cloud=0.0, wind=9.9522, temperature=8.64847, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:21:41.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 2.37125, nan, nan, nan, nan, nan, nan, nan, 2.9845000000000006, 3.2532499999999995, 1.8780000000000001, nan, nan, nan, 1.2254999999999994, nan, 0.4764999999999997, 2.041999999999999, 2.470249999999999, nan, 2.157749999999999, 0.23925000000000018, 0.08675000000000033, 0.13299999999999912, 0.0840000000000014, 0.24975000000000058, 0.16650000000000098, 0.1844999999999999, 0.20500000000000185, 0.14300000000000068, -0.07399999999999984, -0.14675000000000082], zp_timestamp='2026-04-16T00:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:22:40.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:22:40.569 [DEBUG] [Thread-29905] [transport.py] [_log()] starting thread (client mode): 0xf13c9db0
2026-04-16T02:22:40.569 [DEBUG] [Thread-29905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:22:40.584 [DEBUG] [Thread-29905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:22:40.584 [INFO] [Thread-29905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:22:40.591 [DEBUG] [Thread-29905] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:22:40.591 [DEBUG] [Thread-29905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:22:40.591 [DEBUG] [Thread-29905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:22:40.591 [DEBUG] [Thread-29905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:22:40.592 [DEBUG] [Thread-29905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:22:40.592 [DEBUG] [Thread-29905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:22:40.592 [DEBUG] [Thread-29905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:22:40.592 [DEBUG] [Thread-29905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:22:40.592 [DEBUG] [Thread-29905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:22:40.592 [DEBUG] [Thread-29905] [transport.py] [_log()] client lang: <none>
2026-04-16T02:22:40.592 [DEBUG] [Thread-29905] [transport.py] [_log()] server lang: <none>
2026-04-16T02:22:40.592 [DEBUG] [Thread-29905] [transport.py] [_log()] kex follows: False
2026-04-16T02:22:40.592 [DEBUG] [Thread-29905] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:22:40.592 [DEBUG] [Thread-29905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:22:40.592 [DEBUG] [Thread-29905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:22:40.593 [DEBUG] [Thread-29905] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:22:40.593 [DEBUG] [Thread-29905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:22:40.593 [DEBUG] [Thread-29905] [transport.py] [_log()] Compression: none
2026-04-16T02:22:40.593 [DEBUG] [Thread-29905] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:22:40.646 [DEBUG] [Thread-29905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:22:40.647 [DEBUG] [Thread-29905] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:22:40.647 [DEBUG] [Thread-29905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:22:40.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:22:40.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:22:40.703 [DEBUG] [Thread-29905] [transport.py] [_log()] userauth is OK
2026-04-16T02:22:40.704 [DEBUG] [Thread-29905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:22:40.704 [DEBUG] [Thread-29905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:22:40.704 [DEBUG] [Thread-29905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:22:40.704 [DEBUG] [Thread-29905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:22:40.727 [INFO] [Thread-29905] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:22:40.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:22:40.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:22:41.559 [DEBUG] [Thread-29905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:22:41.559 [DEBUG] [Thread-29905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:22:41.607 [DEBUG] [Thread-29905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:22:41.607 [DEBUG] [Thread-29905] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:22:41.616 [DEBUG] [Thread-29905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:22:41.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:22:41.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')
2026-04-16T02:22:41.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
2026-04-16T02:22:41.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:22:41.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:22:41.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:22:41.651 [DEBUG] [Thread-29905] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:22:50.025 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:22:50.026 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:22:52.661 [DEBUG] [Thread-29907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:23:03.585 [DEBUG] [Thread-29908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:23:07.707 [DEBUG] [Thread-29909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:23:11.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:23:11.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:23:11.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
2026-04-16T02:23:12.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 23, 2), 1.60303, 89.4073, 0.0, 10.1286, 8.61529, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:23:12.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:23:02
2026-04-16T02:23:13.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:23:13.802 [DEBUG] [Thread-29910] [transport.py] [_log()] starting thread (client mode): 0xee905570
2026-04-16T02:23:13.802 [DEBUG] [Thread-29910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:23:13.821 [DEBUG] [Thread-29910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:23:13.822 [INFO] [Thread-29910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:23:13.823 [DEBUG] [Thread-29910] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:23:13.823 [DEBUG] [Thread-29910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:23:13.823 [DEBUG] [Thread-29910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:23:13.824 [DEBUG] [Thread-29910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:23:13.824 [DEBUG] [Thread-29910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:23:13.824 [DEBUG] [Thread-29910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:23:13.824 [DEBUG] [Thread-29910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:23:13.824 [DEBUG] [Thread-29910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:23:13.824 [DEBUG] [Thread-29910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:23:13.824 [DEBUG] [Thread-29910] [transport.py] [_log()] client lang: <none>
2026-04-16T02:23:13.824 [DEBUG] [Thread-29910] [transport.py] [_log()] server lang: <none>
2026-04-16T02:23:13.824 [DEBUG] [Thread-29910] [transport.py] [_log()] kex follows: False
2026-04-16T02:23:13.824 [DEBUG] [Thread-29910] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:23:13.824 [DEBUG] [Thread-29910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:23:13.825 [DEBUG] [Thread-29910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:23:13.825 [DEBUG] [Thread-29910] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:23:13.825 [DEBUG] [Thread-29910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:23:13.825 [DEBUG] [Thread-29910] [transport.py] [_log()] Compression: none
2026-04-16T02:23:13.825 [DEBUG] [Thread-29910] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:23:13.834 [DEBUG] [Thread-29910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:23:13.834 [DEBUG] [Thread-29910] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:23:13.835 [DEBUG] [Thread-29910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:23:13.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:23:13.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:23:13.836 [DEBUG] [Thread-29910] [transport.py] [_log()] userauth is OK
2026-04-16T02:23:13.836 [DEBUG] [Thread-29910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:23:13.836 [DEBUG] [Thread-29910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:23:13.836 [DEBUG] [Thread-29910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:23:13.836 [DEBUG] [Thread-29910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:23:13.854 [INFO] [Thread-29910] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:23:13.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:23:14.665 [DEBUG] [Thread-29910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:23:14.666 [DEBUG] [Thread-29910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:23:14.666 [DEBUG] [Thread-29910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:23:14.706 [DEBUG] [Thread-29910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:23:14.706 [DEBUG] [Thread-29910] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:23:14.709 [DEBUG] [Thread-29910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:23:14.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:23:14.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:23:14.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:23:14.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:23:14.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:23:14.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:23:14.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:23:14.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:23:14.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:23:14.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.015408 -999.00   +8.90   8.36     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESW 8.6 8.4 66.8 10.7 9.2 -25.6 9.1 -24.4 8.8 -22.1 9.1 -24.3
2026-04-16T02:23:14.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:23:14.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:23:14.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.015408
2026-04-16T02:23:14.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:23:14.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:23:14.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:23:14.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:23:14.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:23:14.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:23:02', tmtdew=1.60303, humidity=89.4073, cloud=0.0, wind=10.1286, temperature=8.61529, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:22:11.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 2.37125, nan, nan, nan, nan, nan, nan, nan, 2.9845000000000006, 3.2532499999999995, 1.8780000000000001, nan, nan, nan, 1.2254999999999994, nan, 0.4764999999999997, 2.041999999999999, 2.470249999999999, nan, 2.157749999999999, 0.23925000000000018, 0.08675000000000033, 0.13299999999999912, 0.0840000000000014, 0.24975000000000058, 0.16650000000000098, 0.1844999999999999, 0.20500000000000185, 0.14300000000000068, -0.07399999999999984, -0.14675000000000082], zp_timestamp='2026-04-16T00:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:23:14.734 [DEBUG] [Thread-29910] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:23:14.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:23:14.988 [DEBUG] [Thread-29913] [transport.py] [_log()] starting thread (client mode): 0xf13e0490
2026-04-16T02:23:14.988 [DEBUG] [Thread-29913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:23:15.005 [DEBUG] [Thread-29913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:23:15.005 [INFO] [Thread-29913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:23:15.016 [DEBUG] [Thread-29913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:23:15.016 [DEBUG] [Thread-29913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:23:15.016 [DEBUG] [Thread-29913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:23:15.016 [DEBUG] [Thread-29913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:23:15.016 [DEBUG] [Thread-29913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:23:15.016 [DEBUG] [Thread-29913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:23:15.016 [DEBUG] [Thread-29913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:23:15.016 [DEBUG] [Thread-29913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:23:15.016 [DEBUG] [Thread-29913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:23:15.016 [DEBUG] [Thread-29913] [transport.py] [_log()] client lang: <none>
2026-04-16T02:23:15.016 [DEBUG] [Thread-29913] [transport.py] [_log()] server lang: <none>
2026-04-16T02:23:15.016 [DEBUG] [Thread-29913] [transport.py] [_log()] kex follows: False
2026-04-16T02:23:15.017 [DEBUG] [Thread-29913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:23:15.017 [DEBUG] [Thread-29913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:23:15.017 [DEBUG] [Thread-29913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:23:15.017 [DEBUG] [Thread-29913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:23:15.017 [DEBUG] [Thread-29913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:23:15.017 [DEBUG] [Thread-29913] [transport.py] [_log()] Compression: none
2026-04-16T02:23:15.017 [DEBUG] [Thread-29913] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:23:15.076 [DEBUG] [Thread-29913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:23:15.077 [DEBUG] [Thread-29913] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:23:15.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:23:15.078 [DEBUG] [Thread-29913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:23:15.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:23:15.132 [DEBUG] [Thread-29913] [transport.py] [_log()] userauth is OK
2026-04-16T02:23:15.132 [DEBUG] [Thread-29913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:23:15.132 [DEBUG] [Thread-29913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:23:15.133 [DEBUG] [Thread-29913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:23:15.133 [DEBUG] [Thread-29913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:23:15.165 [INFO] [Thread-29913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:23:15.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:23:15.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:23:16.044 [DEBUG] [Thread-29913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:23:16.045 [DEBUG] [Thread-29913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:23:16.092 [DEBUG] [Thread-29913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:23:16.092 [DEBUG] [Thread-29913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:23:16.101 [DEBUG] [Thread-29913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:23:16.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:23:16.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')
2026-04-16T02:23:16.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') -> 00000000
2026-04-16T02:23:16.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:23:16.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:23:16.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:23:16.136 [DEBUG] [Thread-29913] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:23:22.736 [DEBUG] [Thread-29915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:23:37.775 [DEBUG] [Thread-29916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:23:46.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:23:46.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:23:46.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
2026-04-16T02:23:47.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 23, 38), 1.42244, 90.7148, 0.0, 13.0925, 8.46359, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:23:47.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:23:38
2026-04-16T02:23:47.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:23:48.267 [DEBUG] [Thread-29917] [transport.py] [_log()] starting thread (client mode): 0xf13e1630
2026-04-16T02:23:48.267 [DEBUG] [Thread-29917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:23:48.287 [DEBUG] [Thread-29917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:23:48.287 [INFO] [Thread-29917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:23:48.291 [DEBUG] [Thread-29917] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:23:48.291 [DEBUG] [Thread-29917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:23:48.291 [DEBUG] [Thread-29917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:23:48.291 [DEBUG] [Thread-29917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:23:48.291 [DEBUG] [Thread-29917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:23:48.291 [DEBUG] [Thread-29917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:23:48.291 [DEBUG] [Thread-29917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:23:48.291 [DEBUG] [Thread-29917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:23:48.291 [DEBUG] [Thread-29917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:23:48.291 [DEBUG] [Thread-29917] [transport.py] [_log()] client lang: <none>
2026-04-16T02:23:48.292 [DEBUG] [Thread-29917] [transport.py] [_log()] server lang: <none>
2026-04-16T02:23:48.292 [DEBUG] [Thread-29917] [transport.py] [_log()] kex follows: False
2026-04-16T02:23:48.292 [DEBUG] [Thread-29917] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:23:48.292 [DEBUG] [Thread-29917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:23:48.292 [DEBUG] [Thread-29917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:23:48.292 [DEBUG] [Thread-29917] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:23:48.292 [DEBUG] [Thread-29917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:23:48.292 [DEBUG] [Thread-29917] [transport.py] [_log()] Compression: none
2026-04-16T02:23:48.292 [DEBUG] [Thread-29917] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:23:48.308 [DEBUG] [Thread-29917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:23:48.308 [DEBUG] [Thread-29917] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:23:48.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:23:48.309 [DEBUG] [Thread-29917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:23:48.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:23:48.310 [DEBUG] [Thread-29917] [transport.py] [_log()] userauth is OK
2026-04-16T02:23:48.310 [DEBUG] [Thread-29917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:23:48.310 [DEBUG] [Thread-29917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:23:48.310 [DEBUG] [Thread-29917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:23:48.310 [DEBUG] [Thread-29917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:23:48.323 [INFO] [Thread-29917] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:23:48.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:23:49.137 [DEBUG] [Thread-29917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:23:49.138 [DEBUG] [Thread-29917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:23:49.138 [DEBUG] [Thread-29917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:23:49.178 [DEBUG] [Thread-29917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:23:49.178 [DEBUG] [Thread-29917] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:23:49.181 [DEBUG] [Thread-29917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:23:49.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:23:49.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:23:49.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:23:49.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:23:49.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:23:49.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:23:49.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:23:49.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:23:49.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:23:49.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.016102 -999.00   +8.90   9.74     89   +7.30 1 1 1 3 1     0    0 -999.00 0.00 .NESW 8.4 9.7 73.0 11.6 9.2 -25.5 9.1 -24.4 8.8 -22.0 9.1 -24.2
2026-04-16T02:23:49.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:23:49.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:23:49.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.016102
2026-04-16T02:23:49.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:23:49.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:23:49.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:23:49.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:23:49.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:23:49.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:23:38', tmtdew=1.42244, humidity=90.7148, cloud=0.0, wind=13.0925, temperature=8.46359, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:23:11.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 2.37125, nan, nan, nan, nan, nan, nan, nan, 2.9845000000000006, 3.2532499999999995, 1.8780000000000001, nan, nan, nan, 1.2254999999999994, nan, 0.4764999999999997, 2.041999999999999, 2.470249999999999, nan, 2.157749999999999, 0.23925000000000018, 0.08675000000000033, 0.13299999999999912, 0.0840000000000014, 0.24975000000000058, 0.16650000000000098, 0.1844999999999999, 0.20500000000000185, 0.14300000000000068, -0.07399999999999984, -0.14675000000000082], zp_timestamp='2026-04-16T00:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:23:49.205 [DEBUG] [Thread-29917] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:23:49.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:23:49.452 [DEBUG] [Thread-29920] [transport.py] [_log()] starting thread (client mode): 0xee990a30
2026-04-16T02:23:49.452 [DEBUG] [Thread-29920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:23:49.467 [DEBUG] [Thread-29920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:23:49.467 [INFO] [Thread-29920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:23:49.474 [DEBUG] [Thread-29920] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:23:49.474 [DEBUG] [Thread-29920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:23:49.474 [DEBUG] [Thread-29920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:23:49.474 [DEBUG] [Thread-29920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:23:49.474 [DEBUG] [Thread-29920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:23:49.475 [DEBUG] [Thread-29920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:23:49.475 [DEBUG] [Thread-29920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:23:49.475 [DEBUG] [Thread-29920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:23:49.475 [DEBUG] [Thread-29920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:23:49.475 [DEBUG] [Thread-29920] [transport.py] [_log()] client lang: <none>
2026-04-16T02:23:49.475 [DEBUG] [Thread-29920] [transport.py] [_log()] server lang: <none>
2026-04-16T02:23:49.475 [DEBUG] [Thread-29920] [transport.py] [_log()] kex follows: False
2026-04-16T02:23:49.475 [DEBUG] [Thread-29920] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:23:49.475 [DEBUG] [Thread-29920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:23:49.475 [DEBUG] [Thread-29920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:23:49.475 [DEBUG] [Thread-29920] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:23:49.475 [DEBUG] [Thread-29920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:23:49.476 [DEBUG] [Thread-29920] [transport.py] [_log()] Compression: none
2026-04-16T02:23:49.476 [DEBUG] [Thread-29920] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:23:49.531 [DEBUG] [Thread-29920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:23:49.531 [DEBUG] [Thread-29920] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:23:49.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:23:49.531 [DEBUG] [Thread-29920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:23:49.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:23:49.587 [DEBUG] [Thread-29920] [transport.py] [_log()] userauth is OK
2026-04-16T02:23:49.588 [DEBUG] [Thread-29920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:23:49.588 [DEBUG] [Thread-29920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:23:49.588 [DEBUG] [Thread-29920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:23:49.588 [DEBUG] [Thread-29920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:23:49.607 [INFO] [Thread-29920] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:23:49.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:23:49.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:23:50.230 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:23:50.231 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:23:50.422 [DEBUG] [Thread-29920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:23:50.423 [DEBUG] [Thread-29920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:23:50.470 [DEBUG] [Thread-29920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:23:50.470 [DEBUG] [Thread-29920] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:23:50.480 [DEBUG] [Thread-29920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:23:50.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:23:50.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')
2026-04-16T02:23:50.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
2026-04-16T02:23:50.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:23:50.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:23:50.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:23:50.517 [DEBUG] [Thread-29920] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:23:52.807 [DEBUG] [Thread-29922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:24:03.752 [DEBUG] [Thread-29923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:24:07.850 [DEBUG] [Thread-29924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:24:20.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:24:20.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:24:20.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
2026-04-16T02:24:21.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 24, 13), 1.60322, 89.4072, 0.0, 10.4814, 8.63179, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:24:21.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:24:13
2026-04-16T02:24:22.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:24:22.674 [DEBUG] [Thread-29925] [transport.py] [_log()] starting thread (client mode): 0xee990400
2026-04-16T02:24:22.675 [DEBUG] [Thread-29925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:24:22.694 [DEBUG] [Thread-29925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:24:22.695 [INFO] [Thread-29925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:24:22.698 [DEBUG] [Thread-29925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:24:22.698 [DEBUG] [Thread-29925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:24:22.699 [DEBUG] [Thread-29925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:24:22.699 [DEBUG] [Thread-29925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:24:22.699 [DEBUG] [Thread-29925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:24:22.699 [DEBUG] [Thread-29925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:24:22.699 [DEBUG] [Thread-29925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:24:22.699 [DEBUG] [Thread-29925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:24:22.699 [DEBUG] [Thread-29925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:24:22.699 [DEBUG] [Thread-29925] [transport.py] [_log()] client lang: <none>
2026-04-16T02:24:22.699 [DEBUG] [Thread-29925] [transport.py] [_log()] server lang: <none>
2026-04-16T02:24:22.699 [DEBUG] [Thread-29925] [transport.py] [_log()] kex follows: False
2026-04-16T02:24:22.699 [DEBUG] [Thread-29925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:24:22.700 [DEBUG] [Thread-29925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:24:22.700 [DEBUG] [Thread-29925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:24:22.700 [DEBUG] [Thread-29925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:24:22.700 [DEBUG] [Thread-29925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:24:22.700 [DEBUG] [Thread-29925] [transport.py] [_log()] Compression: none
2026-04-16T02:24:22.700 [DEBUG] [Thread-29925] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:24:22.711 [DEBUG] [Thread-29925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:24:22.712 [DEBUG] [Thread-29925] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:24:22.712 [DEBUG] [Thread-29925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:24:22.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:24:22.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:24:22.713 [DEBUG] [Thread-29925] [transport.py] [_log()] userauth is OK
2026-04-16T02:24:22.713 [DEBUG] [Thread-29925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:24:22.714 [DEBUG] [Thread-29925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:24:22.714 [DEBUG] [Thread-29925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:24:22.714 [DEBUG] [Thread-29925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:24:22.736 [INFO] [Thread-29925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:24:22.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:24:22.879 [DEBUG] [Thread-29927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:24:23.480 [DEBUG] [Thread-29925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:24:23.481 [DEBUG] [Thread-29925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:24:23.481 [DEBUG] [Thread-29925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:24:23.521 [DEBUG] [Thread-29925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:24:23.521 [DEBUG] [Thread-29925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:24:23.524 [DEBUG] [Thread-29925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:24:23.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:24:23.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:24:23.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:24:23.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:24:23.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:24:23.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:24:23.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:24:23.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:24:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:24:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.016450 -999.00   +8.90   9.96     89   +7.30 1 1 1 3 1     0    0 -999.00 0.00 .NESW 10.1 10.0 74.6 12.0 9.2 -25.5 9.1 -24.4 8.8 -22.0 9.1 -24.3
2026-04-16T02:24:23.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:24:23.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:24:23.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.016450
2026-04-16T02:24:23.545 [DEBUG] [Thread-29925] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:24:23.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:24:23.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:24:23.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:24:23.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:24:23.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:24:23.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:24:13', tmtdew=1.60322, humidity=89.4072, cloud=0.0, wind=10.4814, temperature=8.63179, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:23:41.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 2.37125, nan, nan, nan, nan, nan, nan, nan, 2.9845000000000006, 3.2532499999999995, 1.8780000000000001, nan, nan, nan, 1.2254999999999994, nan, 0.4764999999999997, 2.041999999999999, 2.470249999999999, nan, 2.157749999999999, 0.23925000000000018, 0.08675000000000033, 0.13299999999999912, 0.0840000000000014, 0.24975000000000058, 0.16650000000000098, 0.1844999999999999, 0.20500000000000185, 0.14300000000000068, -0.07399999999999984, -0.14675000000000082], zp_timestamp='2026-04-16T00:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:24:23.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:24:23.799 [DEBUG] [Thread-29929] [transport.py] [_log()] starting thread (client mode): 0xee9c7d90
2026-04-16T02:24:23.799 [DEBUG] [Thread-29929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:24:23.814 [DEBUG] [Thread-29929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:24:23.814 [INFO] [Thread-29929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:24:23.821 [DEBUG] [Thread-29929] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:24:23.821 [DEBUG] [Thread-29929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:24:23.821 [DEBUG] [Thread-29929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:24:23.821 [DEBUG] [Thread-29929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:24:23.821 [DEBUG] [Thread-29929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:24:23.821 [DEBUG] [Thread-29929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:24:23.821 [DEBUG] [Thread-29929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:24:23.821 [DEBUG] [Thread-29929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:24:23.821 [DEBUG] [Thread-29929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:24:23.821 [DEBUG] [Thread-29929] [transport.py] [_log()] client lang: <none>
2026-04-16T02:24:23.821 [DEBUG] [Thread-29929] [transport.py] [_log()] server lang: <none>
2026-04-16T02:24:23.822 [DEBUG] [Thread-29929] [transport.py] [_log()] kex follows: False
2026-04-16T02:24:23.822 [DEBUG] [Thread-29929] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:24:23.822 [DEBUG] [Thread-29929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:24:23.822 [DEBUG] [Thread-29929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:24:23.822 [DEBUG] [Thread-29929] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:24:23.822 [DEBUG] [Thread-29929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:24:23.822 [DEBUG] [Thread-29929] [transport.py] [_log()] Compression: none
2026-04-16T02:24:23.822 [DEBUG] [Thread-29929] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:24:23.879 [DEBUG] [Thread-29929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:24:23.879 [DEBUG] [Thread-29929] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:24:23.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:24:23.880 [DEBUG] [Thread-29929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:24:23.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:24:23.935 [DEBUG] [Thread-29929] [transport.py] [_log()] userauth is OK
2026-04-16T02:24:23.935 [DEBUG] [Thread-29929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:24:23.936 [DEBUG] [Thread-29929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:24:23.936 [DEBUG] [Thread-29929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:24:23.936 [DEBUG] [Thread-29929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:24:23.961 [INFO] [Thread-29929] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:24:23.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:24:23.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:24:24.771 [DEBUG] [Thread-29929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:24:24.772 [DEBUG] [Thread-29929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:24:24.819 [DEBUG] [Thread-29929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:24:24.819 [DEBUG] [Thread-29929] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:24:24.829 [DEBUG] [Thread-29929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:24:24.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:24:24.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')
2026-04-16T02:24:24.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
2026-04-16T02:24:24.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:24:24.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:24:24.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:24:24.863 [DEBUG] [Thread-29929] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:24:37.910 [DEBUG] [Thread-29931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:24:50.437 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:24:50.438 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:24:52.951 [DEBUG] [Thread-29932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:24:54.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:24:54.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:24:54.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
2026-04-16T02:24:56.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 24, 13), 1.60322, 89.4072, 0.0, 10.4814, 8.63179, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:24:56.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:24:13
2026-04-16T02:24:56.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:24:57.123 [DEBUG] [Thread-29933] [transport.py] [_log()] starting thread (client mode): 0xee9ea530
2026-04-16T02:24:57.124 [DEBUG] [Thread-29933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:24:57.143 [DEBUG] [Thread-29933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:24:57.143 [INFO] [Thread-29933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:24:57.146 [DEBUG] [Thread-29933] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:24:57.146 [DEBUG] [Thread-29933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:24:57.146 [DEBUG] [Thread-29933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:24:57.146 [DEBUG] [Thread-29933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:24:57.147 [DEBUG] [Thread-29933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:24:57.147 [DEBUG] [Thread-29933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:24:57.147 [DEBUG] [Thread-29933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:24:57.147 [DEBUG] [Thread-29933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:24:57.147 [DEBUG] [Thread-29933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:24:57.147 [DEBUG] [Thread-29933] [transport.py] [_log()] client lang: <none>
2026-04-16T02:24:57.147 [DEBUG] [Thread-29933] [transport.py] [_log()] server lang: <none>
2026-04-16T02:24:57.147 [DEBUG] [Thread-29933] [transport.py] [_log()] kex follows: False
2026-04-16T02:24:57.147 [DEBUG] [Thread-29933] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:24:57.147 [DEBUG] [Thread-29933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:24:57.147 [DEBUG] [Thread-29933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:24:57.147 [DEBUG] [Thread-29933] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:24:57.148 [DEBUG] [Thread-29933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:24:57.148 [DEBUG] [Thread-29933] [transport.py] [_log()] Compression: none
2026-04-16T02:24:57.148 [DEBUG] [Thread-29933] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:24:57.164 [DEBUG] [Thread-29933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:24:57.164 [DEBUG] [Thread-29933] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:24:57.164 [DEBUG] [Thread-29933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:24:57.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:24:57.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:24:57.209 [DEBUG] [Thread-29933] [transport.py] [_log()] userauth is OK
2026-04-16T02:24:57.209 [DEBUG] [Thread-29933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:24:57.209 [DEBUG] [Thread-29933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:24:57.209 [DEBUG] [Thread-29933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:24:57.209 [DEBUG] [Thread-29933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:24:57.244 [INFO] [Thread-29933] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:24:57.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:24:58.026 [DEBUG] [Thread-29933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:24:58.026 [DEBUG] [Thread-29933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:24:58.027 [DEBUG] [Thread-29933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:24:58.068 [DEBUG] [Thread-29933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:24:58.069 [DEBUG] [Thread-29933] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:24:58.071 [DEBUG] [Thread-29933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:24:58.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:24:58.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:24:58.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:24:58.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:24:58.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:24:58.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:24:58.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:24:58.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:24:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:24:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.016797 -999.00   +8.90   9.19     89   +7.30 1 1 1 3 1     0    0 -999.00 0.00 .NESW 9.3 9.2 79.4 10.2 9.2 -25.6 9.1 -24.2 8.8 -22.1 9.1 -24.2
2026-04-16T02:24:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:24:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:24:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.016797
2026-04-16T02:24:58.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:24:58.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:24:58.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:24:58.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:24:58.089 [DEBUG] [Thread-29933] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:24:58.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:24:58.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:24:13', tmtdew=1.60322, humidity=89.4072, cloud=0.0, wind=10.4814, temperature=8.63179, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:24:11.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 2.37125, nan, nan, nan, nan, nan, nan, nan, 2.9845000000000006, 3.2532499999999995, 1.8780000000000001, nan, nan, nan, 1.2254999999999994, nan, 0.4764999999999997, 2.041999999999999, 2.470249999999999, nan, 2.157749999999999, 0.23925000000000018, 0.08675000000000033, 0.13299999999999912, 0.0840000000000014, 0.24975000000000058, 0.16650000000000098, 0.1844999999999999, 0.20500000000000185, 0.14300000000000068, -0.07399999999999984, -0.14675000000000082], zp_timestamp='2026-04-16T00:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:24:58.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:24:58.320 [DEBUG] [Thread-29936] [transport.py] [_log()] starting thread (client mode): 0xee993820
2026-04-16T02:24:58.320 [DEBUG] [Thread-29936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:24:58.336 [DEBUG] [Thread-29936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:24:58.336 [INFO] [Thread-29936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:24:58.343 [DEBUG] [Thread-29936] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:24:58.343 [DEBUG] [Thread-29936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:24:58.343 [DEBUG] [Thread-29936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:24:58.343 [DEBUG] [Thread-29936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:24:58.343 [DEBUG] [Thread-29936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:24:58.344 [DEBUG] [Thread-29936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:24:58.344 [DEBUG] [Thread-29936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:24:58.344 [DEBUG] [Thread-29936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:24:58.344 [DEBUG] [Thread-29936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:24:58.344 [DEBUG] [Thread-29936] [transport.py] [_log()] client lang: <none>
2026-04-16T02:24:58.344 [DEBUG] [Thread-29936] [transport.py] [_log()] server lang: <none>
2026-04-16T02:24:58.344 [DEBUG] [Thread-29936] [transport.py] [_log()] kex follows: False
2026-04-16T02:24:58.344 [DEBUG] [Thread-29936] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:24:58.344 [DEBUG] [Thread-29936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:24:58.344 [DEBUG] [Thread-29936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:24:58.344 [DEBUG] [Thread-29936] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:24:58.344 [DEBUG] [Thread-29936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:24:58.345 [DEBUG] [Thread-29936] [transport.py] [_log()] Compression: none
2026-04-16T02:24:58.345 [DEBUG] [Thread-29936] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:24:58.402 [DEBUG] [Thread-29936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:24:58.403 [DEBUG] [Thread-29936] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:24:58.403 [DEBUG] [Thread-29936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:24:58.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:24:58.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:24:58.459 [DEBUG] [Thread-29936] [transport.py] [_log()] userauth is OK
2026-04-16T02:24:58.459 [DEBUG] [Thread-29936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:24:58.460 [DEBUG] [Thread-29936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:24:58.460 [DEBUG] [Thread-29936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:24:58.460 [DEBUG] [Thread-29936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:24:58.483 [INFO] [Thread-29936] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:24:58.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:24:58.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:24:59.288 [DEBUG] [Thread-29936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:24:59.288 [DEBUG] [Thread-29936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:24:59.336 [DEBUG] [Thread-29936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:24:59.336 [DEBUG] [Thread-29936] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:24:59.345 [DEBUG] [Thread-29936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:24:59.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:24:59.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')
2026-04-16T02:24:59.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
2026-04-16T02:24:59.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:24:59.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:24:59.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:24:59.380 [DEBUG] [Thread-29936] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:25:03.906 [DEBUG] [Thread-29938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:25:07.982 [DEBUG] [Thread-29939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:25:23.024 [DEBUG] [Thread-29940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:25:29.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:25:29.402 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:25:29.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T02:25:30.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 24, 49), 1.39535, 90.8812, 0.0, 13.2336, 8.43076, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:25:30.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:24:49
2026-04-16T02:25:31.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:25:31.670 [DEBUG] [Thread-29941] [transport.py] [_log()] starting thread (client mode): 0xf1337ca0
2026-04-16T02:25:31.670 [DEBUG] [Thread-29941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:25:31.690 [DEBUG] [Thread-29941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:25:31.690 [INFO] [Thread-29941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:25:31.693 [DEBUG] [Thread-29941] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:25:31.693 [DEBUG] [Thread-29941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:25:31.694 [DEBUG] [Thread-29941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:25:31.694 [DEBUG] [Thread-29941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:25:31.694 [DEBUG] [Thread-29941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:25:31.694 [DEBUG] [Thread-29941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:25:31.694 [DEBUG] [Thread-29941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:25:31.694 [DEBUG] [Thread-29941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:25:31.694 [DEBUG] [Thread-29941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:25:31.694 [DEBUG] [Thread-29941] [transport.py] [_log()] client lang: <none>
2026-04-16T02:25:31.694 [DEBUG] [Thread-29941] [transport.py] [_log()] server lang: <none>
2026-04-16T02:25:31.694 [DEBUG] [Thread-29941] [transport.py] [_log()] kex follows: False
2026-04-16T02:25:31.694 [DEBUG] [Thread-29941] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:25:31.694 [DEBUG] [Thread-29941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:25:31.694 [DEBUG] [Thread-29941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:25:31.695 [DEBUG] [Thread-29941] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:25:31.695 [DEBUG] [Thread-29941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:25:31.695 [DEBUG] [Thread-29941] [transport.py] [_log()] Compression: none
2026-04-16T02:25:31.695 [DEBUG] [Thread-29941] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:25:31.711 [DEBUG] [Thread-29941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:25:31.712 [DEBUG] [Thread-29941] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:25:31.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:25:31.712 [DEBUG] [Thread-29941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:25:31.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:25:31.713 [DEBUG] [Thread-29941] [transport.py] [_log()] userauth is OK
2026-04-16T02:25:31.714 [DEBUG] [Thread-29941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:25:31.714 [DEBUG] [Thread-29941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:25:31.714 [DEBUG] [Thread-29941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:25:31.714 [DEBUG] [Thread-29941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:25:31.749 [INFO] [Thread-29941] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:25:31.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:25:33.459 [DEBUG] [Thread-29941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:25:33.459 [DEBUG] [Thread-29941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:25:33.460 [DEBUG] [Thread-29941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:25:33.500 [DEBUG] [Thread-29941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:25:33.500 [DEBUG] [Thread-29941] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:25:33.503 [DEBUG] [Thread-29941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:25:33.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:25:33.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:25:33.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:25:33.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:25:33.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:25:33.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:25:33.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:25:33.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:25:33.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:25:33.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.017144 -999.00   +8.90  10.06     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESW 7.1 10.1 71.2 11.5 9.2 -25.6 9.1 -24.2 8.8 -22.0 9.1 -24.2
2026-04-16T02:25:33.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:25:33.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:25:33.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.017144
2026-04-16T02:25:33.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:25:33.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:25:33.528 [DEBUG] [Thread-29941] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:25:33.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:25:33.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:25:33.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:25:33.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:24:49', tmtdew=1.39535, humidity=90.8812, cloud=0.0, wind=13.2336, temperature=8.43076, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:24:41.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 2.22825, nan, nan, nan, nan, nan, nan, nan, 3.261000000000001, nan, 2.433, nan, nan, nan, 1.786999999999999, nan, 0.9355000000000002, 2.390999999999999, 1.9812499999999993, nan, 2.1172499999999985, 0.433250000000001, 0.12925000000000075, 0.3169999999999984, 0.2104999999999997, 0.30324999999999847, 0.2550000000000008, 0.2530000000000001, 0.23300000000000054, 0.18900000000000183, 0.022500000000000853, -0.039250000000000895], zp_timestamp='2026-04-16T00:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:25:33.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:25:33.782 [DEBUG] [Thread-29944] [transport.py] [_log()] starting thread (client mode): 0xee9335e0
2026-04-16T02:25:33.782 [DEBUG] [Thread-29944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:25:33.798 [DEBUG] [Thread-29944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:25:33.798 [INFO] [Thread-29944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:25:33.807 [DEBUG] [Thread-29944] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:25:33.807 [DEBUG] [Thread-29944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:25:33.807 [DEBUG] [Thread-29944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:25:33.807 [DEBUG] [Thread-29944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:25:33.808 [DEBUG] [Thread-29944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:25:33.808 [DEBUG] [Thread-29944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:25:33.808 [DEBUG] [Thread-29944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:25:33.808 [DEBUG] [Thread-29944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:25:33.808 [DEBUG] [Thread-29944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:25:33.808 [DEBUG] [Thread-29944] [transport.py] [_log()] client lang: <none>
2026-04-16T02:25:33.808 [DEBUG] [Thread-29944] [transport.py] [_log()] server lang: <none>
2026-04-16T02:25:33.808 [DEBUG] [Thread-29944] [transport.py] [_log()] kex follows: False
2026-04-16T02:25:33.808 [DEBUG] [Thread-29944] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:25:33.808 [DEBUG] [Thread-29944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:25:33.808 [DEBUG] [Thread-29944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:25:33.809 [DEBUG] [Thread-29944] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:25:33.809 [DEBUG] [Thread-29944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:25:33.809 [DEBUG] [Thread-29944] [transport.py] [_log()] Compression: none
2026-04-16T02:25:33.809 [DEBUG] [Thread-29944] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:25:33.862 [DEBUG] [Thread-29944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:25:33.863 [DEBUG] [Thread-29944] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:25:33.863 [DEBUG] [Thread-29944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:25:33.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:25:33.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:25:33.919 [DEBUG] [Thread-29944] [transport.py] [_log()] userauth is OK
2026-04-16T02:25:33.920 [DEBUG] [Thread-29944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:25:33.920 [DEBUG] [Thread-29944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:25:33.920 [DEBUG] [Thread-29944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:25:33.920 [DEBUG] [Thread-29944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:25:33.945 [INFO] [Thread-29944] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:25:33.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:25:33.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:25:34.806 [DEBUG] [Thread-29944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:25:34.806 [DEBUG] [Thread-29944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:25:34.853 [DEBUG] [Thread-29944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:25:34.854 [DEBUG] [Thread-29944] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:25:34.862 [DEBUG] [Thread-29944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:25:34.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:25:34.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')
2026-04-16T02:25:34.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') -> 00000000
2026-04-16T02:25:34.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:25:34.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:25:34.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:25:34.893 [DEBUG] [Thread-29944] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:25:38.054 [DEBUG] [Thread-29946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:25:50.640 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:25:50.642 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:25:53.110 [DEBUG] [Thread-29947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:26:04.073 [DEBUG] [Thread-29948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:26:04.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:26:04.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:26:04.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
2026-04-16T02:26:06.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 25, 25), 1.59252, 89.4738, 0.0, 10.2697, 8.68197, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:26:06.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:25:25
2026-04-16T02:26:06.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:26:07.179 [DEBUG] [Thread-29949] [transport.py] [_log()] starting thread (client mode): 0xee9c79d0
2026-04-16T02:26:07.179 [DEBUG] [Thread-29949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:26:07.199 [DEBUG] [Thread-29949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:26:07.199 [INFO] [Thread-29949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:26:07.202 [DEBUG] [Thread-29949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:26:07.202 [DEBUG] [Thread-29949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:26:07.203 [DEBUG] [Thread-29949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:26:07.203 [DEBUG] [Thread-29949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:26:07.203 [DEBUG] [Thread-29949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:26:07.203 [DEBUG] [Thread-29949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:26:07.203 [DEBUG] [Thread-29949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:26:07.203 [DEBUG] [Thread-29949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:26:07.203 [DEBUG] [Thread-29949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:26:07.203 [DEBUG] [Thread-29949] [transport.py] [_log()] client lang: <none>
2026-04-16T02:26:07.203 [DEBUG] [Thread-29949] [transport.py] [_log()] server lang: <none>
2026-04-16T02:26:07.203 [DEBUG] [Thread-29949] [transport.py] [_log()] kex follows: False
2026-04-16T02:26:07.203 [DEBUG] [Thread-29949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:26:07.203 [DEBUG] [Thread-29949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:26:07.203 [DEBUG] [Thread-29949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:26:07.204 [DEBUG] [Thread-29949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:26:07.204 [DEBUG] [Thread-29949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:26:07.204 [DEBUG] [Thread-29949] [transport.py] [_log()] Compression: none
2026-04-16T02:26:07.204 [DEBUG] [Thread-29949] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:26:07.220 [DEBUG] [Thread-29949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:26:07.220 [DEBUG] [Thread-29949] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:26:07.221 [DEBUG] [Thread-29949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:26:07.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:26:07.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:26:07.264 [DEBUG] [Thread-29949] [transport.py] [_log()] userauth is OK
2026-04-16T02:26:07.264 [DEBUG] [Thread-29949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:26:07.264 [DEBUG] [Thread-29949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:26:07.265 [DEBUG] [Thread-29949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:26:07.265 [DEBUG] [Thread-29949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:26:07.284 [INFO] [Thread-29949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:26:07.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:26:08.069 [DEBUG] [Thread-29949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:26:08.069 [DEBUG] [Thread-29949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:26:08.069 [DEBUG] [Thread-29949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:26:08.110 [DEBUG] [Thread-29949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:26:08.110 [DEBUG] [Thread-29949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:26:08.112 [DEBUG] [Thread-29949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:26:08.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:26:08.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:26:08.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:26:08.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:26:08.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:26:08.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:26:08.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:26:08.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:26:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:26:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.017838 -999.00   +8.90   5.05     89   +7.30 1 1 1 3 1     0    0 -999.00 0.00 .NESW 1.9 5.0 74.1 12.5 9.2 -25.6 9.1 -24.2 8.8 -22.0 9.1 -24.3
2026-04-16T02:26:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:26:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:26:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.017838
2026-04-16T02:26:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:26:08.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:26:08.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:26:08.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:26:08.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:26:08.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:25:25', tmtdew=1.59252, humidity=89.4738, cloud=0.0, wind=10.2697, temperature=8.68197, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:25:41.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 2.22825, nan, nan, nan, nan, nan, nan, nan, 3.261000000000001, nan, 2.433, nan, nan, nan, 1.786999999999999, nan, 0.9355000000000002, 2.390999999999999, 1.9812499999999993, nan, 2.1172499999999985, 0.433250000000001, 0.12925000000000075, 0.3169999999999984, 0.2104999999999997, 0.30324999999999847, 0.2550000000000008, 0.2530000000000001, 0.23300000000000054, 0.18900000000000183, 0.022500000000000853, -0.039250000000000895], zp_timestamp='2026-04-16T00:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:26:08.131 [DEBUG] [Thread-29949] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:26:08.140 [DEBUG] [Thread-29952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:26:08.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:26:08.344 [DEBUG] [Thread-29953] [transport.py] [_log()] starting thread (client mode): 0xee942530
2026-04-16T02:26:08.344 [DEBUG] [Thread-29953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:26:08.362 [DEBUG] [Thread-29953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:26:08.362 [INFO] [Thread-29953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:26:08.369 [DEBUG] [Thread-29953] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:26:08.369 [DEBUG] [Thread-29953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:26:08.369 [DEBUG] [Thread-29953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:26:08.369 [DEBUG] [Thread-29953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:26:08.369 [DEBUG] [Thread-29953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:26:08.369 [DEBUG] [Thread-29953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:26:08.370 [DEBUG] [Thread-29953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:26:08.370 [DEBUG] [Thread-29953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:26:08.370 [DEBUG] [Thread-29953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:26:08.370 [DEBUG] [Thread-29953] [transport.py] [_log()] client lang: <none>
2026-04-16T02:26:08.370 [DEBUG] [Thread-29953] [transport.py] [_log()] server lang: <none>
2026-04-16T02:26:08.370 [DEBUG] [Thread-29953] [transport.py] [_log()] kex follows: False
2026-04-16T02:26:08.370 [DEBUG] [Thread-29953] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:26:08.370 [DEBUG] [Thread-29953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:26:08.370 [DEBUG] [Thread-29953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:26:08.370 [DEBUG] [Thread-29953] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:26:08.370 [DEBUG] [Thread-29953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:26:08.371 [DEBUG] [Thread-29953] [transport.py] [_log()] Compression: none
2026-04-16T02:26:08.371 [DEBUG] [Thread-29953] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:26:08.426 [DEBUG] [Thread-29953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:26:08.426 [DEBUG] [Thread-29953] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:26:08.427 [DEBUG] [Thread-29953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:26:08.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:26:08.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:26:08.483 [DEBUG] [Thread-29953] [transport.py] [_log()] userauth is OK
2026-04-16T02:26:08.483 [DEBUG] [Thread-29953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:26:08.483 [DEBUG] [Thread-29953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:26:08.483 [DEBUG] [Thread-29953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:26:08.483 [DEBUG] [Thread-29953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:26:08.501 [INFO] [Thread-29953] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:26:08.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:26:08.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:26:09.339 [DEBUG] [Thread-29953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:26:09.340 [DEBUG] [Thread-29953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:26:09.387 [DEBUG] [Thread-29953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:26:09.387 [DEBUG] [Thread-29953] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:26:09.396 [DEBUG] [Thread-29953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:26:09.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:26:09.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')
2026-04-16T02:26:09.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
2026-04-16T02:26:09.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:26:09.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:26:09.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:26:09.431 [DEBUG] [Thread-29953] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:26:23.180 [DEBUG] [Thread-29955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:26:38.212 [DEBUG] [Thread-29956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:26:39.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:26:39.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:26:39.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
2026-04-16T02:26:40.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 26, 1), 1.59255, 89.4736, 0.0, 10.2521, 8.68187, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:26:40.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:26:01
2026-04-16T02:26:41.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:26:41.789 [DEBUG] [Thread-29957] [transport.py] [_log()] starting thread (client mode): 0xf13e17e0
2026-04-16T02:26:41.789 [DEBUG] [Thread-29957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:26:41.810 [DEBUG] [Thread-29957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:26:41.810 [INFO] [Thread-29957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:26:41.813 [DEBUG] [Thread-29957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:26:41.813 [DEBUG] [Thread-29957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:26:41.813 [DEBUG] [Thread-29957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:26:41.814 [DEBUG] [Thread-29957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:26:41.814 [DEBUG] [Thread-29957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:26:41.814 [DEBUG] [Thread-29957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:26:41.814 [DEBUG] [Thread-29957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:26:41.814 [DEBUG] [Thread-29957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:26:41.814 [DEBUG] [Thread-29957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:26:41.814 [DEBUG] [Thread-29957] [transport.py] [_log()] client lang: <none>
2026-04-16T02:26:41.814 [DEBUG] [Thread-29957] [transport.py] [_log()] server lang: <none>
2026-04-16T02:26:41.814 [DEBUG] [Thread-29957] [transport.py] [_log()] kex follows: False
2026-04-16T02:26:41.814 [DEBUG] [Thread-29957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:26:41.814 [DEBUG] [Thread-29957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:26:41.815 [DEBUG] [Thread-29957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:26:41.815 [DEBUG] [Thread-29957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:26:41.815 [DEBUG] [Thread-29957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:26:41.815 [DEBUG] [Thread-29957] [transport.py] [_log()] Compression: none
2026-04-16T02:26:41.815 [DEBUG] [Thread-29957] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:26:41.831 [DEBUG] [Thread-29957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:26:41.832 [DEBUG] [Thread-29957] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:26:41.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:26:41.832 [DEBUG] [Thread-29957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:26:41.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:26:41.834 [DEBUG] [Thread-29957] [transport.py] [_log()] userauth is OK
2026-04-16T02:26:41.834 [DEBUG] [Thread-29957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:26:41.834 [DEBUG] [Thread-29957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:26:41.834 [DEBUG] [Thread-29957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:26:41.834 [DEBUG] [Thread-29957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:26:41.853 [INFO] [Thread-29957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:26:41.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:26:42.645 [DEBUG] [Thread-29957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:26:42.646 [DEBUG] [Thread-29957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:26:42.646 [DEBUG] [Thread-29957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:26:42.686 [DEBUG] [Thread-29957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:26:42.686 [DEBUG] [Thread-29957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:26:42.689 [DEBUG] [Thread-29957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:26:42.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:26:42.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:26:42.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:26:42.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:26:42.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:26:42.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:26:42.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:26:42.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:26:42.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:26:42.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.018186 -999.00   +8.90  10.36     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESW 10.9 10.4 66.4 11.8 9.2 -25.5 9.1 -24.3 8.8 -22.0 9.1 -24.3
2026-04-16T02:26:42.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:26:42.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:26:42.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.018186
2026-04-16T02:26:42.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:26:42.715 [DEBUG] [Thread-29957] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:26:42.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:26:42.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:26:42.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:26:42.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:26:42.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:26:01', tmtdew=1.59255, humidity=89.4736, cloud=0.0, wind=10.2521, temperature=8.68187, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:26:11.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 2.22825, nan, nan, nan, nan, nan, nan, nan, 3.261000000000001, nan, 2.433, nan, nan, nan, 1.786999999999999, nan, 0.9355000000000002, 2.390999999999999, 1.9812499999999993, nan, 2.1172499999999985, 0.433250000000001, 0.12925000000000075, 0.3169999999999984, 0.2104999999999997, 0.30324999999999847, 0.2550000000000008, 0.2530000000000001, 0.23300000000000054, 0.18900000000000183, 0.022500000000000853, -0.039250000000000895], zp_timestamp='2026-04-16T00:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:26:42.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:26:42.973 [DEBUG] [Thread-29960] [transport.py] [_log()] starting thread (client mode): 0xee9c6bc0
2026-04-16T02:26:42.973 [DEBUG] [Thread-29960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:26:42.987 [DEBUG] [Thread-29960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:26:42.987 [INFO] [Thread-29960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:26:42.995 [DEBUG] [Thread-29960] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:26:42.995 [DEBUG] [Thread-29960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:26:42.995 [DEBUG] [Thread-29960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:26:42.995 [DEBUG] [Thread-29960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:26:42.995 [DEBUG] [Thread-29960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:26:42.995 [DEBUG] [Thread-29960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:26:42.995 [DEBUG] [Thread-29960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:26:42.995 [DEBUG] [Thread-29960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:26:42.995 [DEBUG] [Thread-29960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:26:42.996 [DEBUG] [Thread-29960] [transport.py] [_log()] client lang: <none>
2026-04-16T02:26:42.996 [DEBUG] [Thread-29960] [transport.py] [_log()] server lang: <none>
2026-04-16T02:26:42.996 [DEBUG] [Thread-29960] [transport.py] [_log()] kex follows: False
2026-04-16T02:26:42.996 [DEBUG] [Thread-29960] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:26:42.996 [DEBUG] [Thread-29960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:26:42.996 [DEBUG] [Thread-29960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:26:42.996 [DEBUG] [Thread-29960] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:26:42.996 [DEBUG] [Thread-29960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:26:42.996 [DEBUG] [Thread-29960] [transport.py] [_log()] Compression: none
2026-04-16T02:26:42.996 [DEBUG] [Thread-29960] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:26:43.050 [DEBUG] [Thread-29960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:26:43.051 [DEBUG] [Thread-29960] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:26:43.051 [DEBUG] [Thread-29960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:26:43.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:26:43.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:26:43.107 [DEBUG] [Thread-29960] [transport.py] [_log()] userauth is OK
2026-04-16T02:26:43.108 [DEBUG] [Thread-29960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:26:43.108 [DEBUG] [Thread-29960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:26:43.108 [DEBUG] [Thread-29960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:26:43.108 [DEBUG] [Thread-29960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:26:43.134 [INFO] [Thread-29960] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:26:43.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:26:43.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:26:43.957 [DEBUG] [Thread-29960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:26:43.958 [DEBUG] [Thread-29960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:26:44.005 [DEBUG] [Thread-29960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:26:44.005 [DEBUG] [Thread-29960] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:26:44.014 [DEBUG] [Thread-29960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:26:44.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:26:44.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')
2026-04-16T02:26:44.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
2026-04-16T02:26:44.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:26:44.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:26:44.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:26:44.048 [DEBUG] [Thread-29960] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:26:50.846 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:26:50.848 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:26:53.242 [DEBUG] [Thread-29962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:27:04.235 [DEBUG] [Thread-29963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:27:08.281 [DEBUG] [Thread-29964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:27:14.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:27:14.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:27:14.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
2026-04-16T02:27:15.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 26, 36), 1.40538, 90.8146, 0.0, 14.0098, 8.3642, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:27:15.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:26:36
2026-04-16T02:27:15.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:27:16.375 [DEBUG] [Thread-29965] [transport.py] [_log()] starting thread (client mode): 0xee9c7ee0
2026-04-16T02:27:16.375 [DEBUG] [Thread-29965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:27:16.395 [DEBUG] [Thread-29965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:27:16.395 [INFO] [Thread-29965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:27:16.398 [DEBUG] [Thread-29965] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:27:16.398 [DEBUG] [Thread-29965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:27:16.398 [DEBUG] [Thread-29965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:27:16.398 [DEBUG] [Thread-29965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:27:16.398 [DEBUG] [Thread-29965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:27:16.398 [DEBUG] [Thread-29965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:27:16.398 [DEBUG] [Thread-29965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:27:16.398 [DEBUG] [Thread-29965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:27:16.398 [DEBUG] [Thread-29965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:27:16.398 [DEBUG] [Thread-29965] [transport.py] [_log()] client lang: <none>
2026-04-16T02:27:16.398 [DEBUG] [Thread-29965] [transport.py] [_log()] server lang: <none>
2026-04-16T02:27:16.398 [DEBUG] [Thread-29965] [transport.py] [_log()] kex follows: False
2026-04-16T02:27:16.398 [DEBUG] [Thread-29965] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:27:16.399 [DEBUG] [Thread-29965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:27:16.399 [DEBUG] [Thread-29965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:27:16.399 [DEBUG] [Thread-29965] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:27:16.399 [DEBUG] [Thread-29965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:27:16.399 [DEBUG] [Thread-29965] [transport.py] [_log()] Compression: none
2026-04-16T02:27:16.399 [DEBUG] [Thread-29965] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:27:16.418 [DEBUG] [Thread-29965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:27:16.418 [DEBUG] [Thread-29965] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:27:16.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:27:16.418 [DEBUG] [Thread-29965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:27:16.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:27:16.419 [DEBUG] [Thread-29965] [transport.py] [_log()] userauth is OK
2026-04-16T02:27:16.419 [DEBUG] [Thread-29965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:27:16.420 [DEBUG] [Thread-29965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:27:16.420 [DEBUG] [Thread-29965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:27:16.420 [DEBUG] [Thread-29965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:27:16.439 [INFO] [Thread-29965] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:27:16.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:27:17.234 [DEBUG] [Thread-29965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:27:17.234 [DEBUG] [Thread-29965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:27:17.235 [DEBUG] [Thread-29965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:27:17.275 [DEBUG] [Thread-29965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:27:17.275 [DEBUG] [Thread-29965] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:27:17.277 [DEBUG] [Thread-29965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:27:17.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:27:17.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:27:17.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:27:17.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:27:17.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:27:17.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:27:17.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:27:17.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:27:17.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:27:17.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.018533 -999.00   +8.90  10.23     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESW 10.7 10.2 71.2 12.6 9.2 -25.6 9.1 -24.2 8.8 -22.1 9.1 -24.2
2026-04-16T02:27:17.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:27:17.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:27:17.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.018533
2026-04-16T02:27:17.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:27:17.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:27:17.297 [DEBUG] [Thread-29965] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:27:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:27:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:27:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:27:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:26:36', tmtdew=1.40538, humidity=90.8146, cloud=0.0, wind=14.0098, temperature=8.3642, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:26:41.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 2.22825, nan, nan, nan, nan, nan, nan, nan, 3.261000000000001, nan, 2.433, nan, nan, nan, 1.786999999999999, nan, 0.9355000000000002, 2.390999999999999, 1.9812499999999993, nan, 2.1172499999999985, 0.433250000000001, 0.12925000000000075, 0.3169999999999984, 0.2104999999999997, 0.30324999999999847, 0.2550000000000008, 0.2530000000000001, 0.23300000000000054, 0.18900000000000183, 0.022500000000000853, -0.039250000000000895], zp_timestamp='2026-04-16T00:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:27:17.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:27:17.555 [DEBUG] [Thread-29968] [transport.py] [_log()] starting thread (client mode): 0xf13e3fd0
2026-04-16T02:27:17.556 [DEBUG] [Thread-29968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:27:17.570 [DEBUG] [Thread-29968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:27:17.570 [INFO] [Thread-29968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:27:17.577 [DEBUG] [Thread-29968] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:27:17.577 [DEBUG] [Thread-29968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:27:17.577 [DEBUG] [Thread-29968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:27:17.577 [DEBUG] [Thread-29968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:27:17.578 [DEBUG] [Thread-29968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:27:17.578 [DEBUG] [Thread-29968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:27:17.578 [DEBUG] [Thread-29968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:27:17.578 [DEBUG] [Thread-29968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:27:17.578 [DEBUG] [Thread-29968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:27:17.578 [DEBUG] [Thread-29968] [transport.py] [_log()] client lang: <none>
2026-04-16T02:27:17.578 [DEBUG] [Thread-29968] [transport.py] [_log()] server lang: <none>
2026-04-16T02:27:17.578 [DEBUG] [Thread-29968] [transport.py] [_log()] kex follows: False
2026-04-16T02:27:17.578 [DEBUG] [Thread-29968] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:27:17.578 [DEBUG] [Thread-29968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:27:17.578 [DEBUG] [Thread-29968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:27:17.578 [DEBUG] [Thread-29968] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:27:17.579 [DEBUG] [Thread-29968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:27:17.579 [DEBUG] [Thread-29968] [transport.py] [_log()] Compression: none
2026-04-16T02:27:17.579 [DEBUG] [Thread-29968] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:27:17.634 [DEBUG] [Thread-29968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:27:17.635 [DEBUG] [Thread-29968] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:27:17.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:27:17.636 [DEBUG] [Thread-29968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:27:17.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:27:17.691 [DEBUG] [Thread-29968] [transport.py] [_log()] userauth is OK
2026-04-16T02:27:17.691 [DEBUG] [Thread-29968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:27:17.692 [DEBUG] [Thread-29968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:27:17.692 [DEBUG] [Thread-29968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:27:17.692 [DEBUG] [Thread-29968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:27:17.717 [INFO] [Thread-29968] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:27:17.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:27:17.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:27:18.567 [DEBUG] [Thread-29968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:27:18.567 [DEBUG] [Thread-29968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:27:18.615 [DEBUG] [Thread-29968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:27:18.615 [DEBUG] [Thread-29968] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:27:18.624 [DEBUG] [Thread-29968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:27:18.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:27:18.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')
2026-04-16T02:27:18.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
2026-04-16T02:27:18.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:27:18.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:27:18.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:27:18.660 [DEBUG] [Thread-29968] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:27:23.312 [DEBUG] [Thread-29970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:27:38.355 [DEBUG] [Thread-29971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:27:48.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:27:48.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:27:48.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
2026-04-16T02:27:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 27, 12), 1.59223, 89.4735, 0.0, 10.6578, 8.64861, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:27:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:27:12
2026-04-16T02:27:50.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:27:50.965 [DEBUG] [Thread-29972] [transport.py] [_log()] starting thread (client mode): 0xf13348b0
2026-04-16T02:27:50.965 [DEBUG] [Thread-29972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:27:50.985 [DEBUG] [Thread-29972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:27:50.985 [INFO] [Thread-29972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:27:50.988 [DEBUG] [Thread-29972] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:27:50.989 [DEBUG] [Thread-29972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:27:50.989 [DEBUG] [Thread-29972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:27:50.989 [DEBUG] [Thread-29972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:27:50.989 [DEBUG] [Thread-29972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:27:50.989 [DEBUG] [Thread-29972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:27:50.989 [DEBUG] [Thread-29972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:27:50.989 [DEBUG] [Thread-29972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:27:50.989 [DEBUG] [Thread-29972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:27:50.989 [DEBUG] [Thread-29972] [transport.py] [_log()] client lang: <none>
2026-04-16T02:27:50.989 [DEBUG] [Thread-29972] [transport.py] [_log()] server lang: <none>
2026-04-16T02:27:50.989 [DEBUG] [Thread-29972] [transport.py] [_log()] kex follows: False
2026-04-16T02:27:50.989 [DEBUG] [Thread-29972] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:27:50.990 [DEBUG] [Thread-29972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:27:50.990 [DEBUG] [Thread-29972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:27:50.990 [DEBUG] [Thread-29972] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:27:50.990 [DEBUG] [Thread-29972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:27:50.990 [DEBUG] [Thread-29972] [transport.py] [_log()] Compression: none
2026-04-16T02:27:50.990 [DEBUG] [Thread-29972] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:27:51.007 [DEBUG] [Thread-29972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:27:51.007 [DEBUG] [Thread-29972] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:27:51.008 [DEBUG] [Thread-29972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:27:51.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:27:51.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:27:51.009 [DEBUG] [Thread-29972] [transport.py] [_log()] userauth is OK
2026-04-16T02:27:51.009 [DEBUG] [Thread-29972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:27:51.009 [DEBUG] [Thread-29972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:27:51.009 [DEBUG] [Thread-29972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:27:51.009 [DEBUG] [Thread-29972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:27:51.034 [INFO] [Thread-29972] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:27:51.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:27:51.052 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:27:51.053 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:27:51.817 [DEBUG] [Thread-29972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:27:51.818 [DEBUG] [Thread-29972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:27:51.818 [DEBUG] [Thread-29972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:27:51.858 [DEBUG] [Thread-29972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:27:51.858 [DEBUG] [Thread-29972] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:27:51.861 [DEBUG] [Thread-29972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:27:51.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:27:51.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:27:51.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:27:51.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:27:51.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:27:51.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:27:51.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:27:51.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:27:51.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:27:51.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.018880 -999.00   +8.90   9.96     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 zNESW 10.9 10.0 75.6 13.2 9.2 -25.6 9.1 -24.1 8.8 -22.1 9.1 -24.1
2026-04-16T02:27:51.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:27:51.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:27:51.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.018880
2026-04-16T02:27:51.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:27:51.885 [DEBUG] [Thread-29972] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:27:51.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:27:51.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:27:51.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:27:51.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:27:51.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:27:12', tmtdew=1.59223, humidity=89.4735, cloud=0.0, wind=10.6578, temperature=8.64861, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:27:11.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 2.22825, nan, nan, nan, nan, nan, nan, nan, 3.261000000000001, nan, 2.433, nan, nan, nan, 1.786999999999999, nan, 0.9355000000000002, 2.390999999999999, 1.9812499999999993, nan, 2.1172499999999985, 0.433250000000001, 0.12925000000000075, 0.3169999999999984, 0.2104999999999997, 0.30324999999999847, 0.2550000000000008, 0.2530000000000001, 0.23300000000000054, 0.18900000000000183, 0.022500000000000853, -0.039250000000000895], zp_timestamp='2026-04-16T00:23:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:27:52.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:27:52.143 [DEBUG] [Thread-29975] [transport.py] [_log()] starting thread (client mode): 0xee932650
2026-04-16T02:27:52.143 [DEBUG] [Thread-29975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:27:52.157 [DEBUG] [Thread-29975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:27:52.157 [INFO] [Thread-29975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:27:52.165 [DEBUG] [Thread-29975] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:27:52.165 [DEBUG] [Thread-29975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:27:52.165 [DEBUG] [Thread-29975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:27:52.165 [DEBUG] [Thread-29975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:27:52.165 [DEBUG] [Thread-29975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:27:52.165 [DEBUG] [Thread-29975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:27:52.165 [DEBUG] [Thread-29975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:27:52.165 [DEBUG] [Thread-29975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:27:52.165 [DEBUG] [Thread-29975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:27:52.165 [DEBUG] [Thread-29975] [transport.py] [_log()] client lang: <none>
2026-04-16T02:27:52.165 [DEBUG] [Thread-29975] [transport.py] [_log()] server lang: <none>
2026-04-16T02:27:52.165 [DEBUG] [Thread-29975] [transport.py] [_log()] kex follows: False
2026-04-16T02:27:52.166 [DEBUG] [Thread-29975] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:27:52.166 [DEBUG] [Thread-29975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:27:52.166 [DEBUG] [Thread-29975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:27:52.166 [DEBUG] [Thread-29975] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:27:52.166 [DEBUG] [Thread-29975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:27:52.166 [DEBUG] [Thread-29975] [transport.py] [_log()] Compression: none
2026-04-16T02:27:52.166 [DEBUG] [Thread-29975] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:27:52.222 [DEBUG] [Thread-29975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:27:52.223 [DEBUG] [Thread-29975] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:27:52.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:27:52.223 [DEBUG] [Thread-29975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:27:52.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:27:52.279 [DEBUG] [Thread-29975] [transport.py] [_log()] userauth is OK
2026-04-16T02:27:52.280 [DEBUG] [Thread-29975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:27:52.280 [DEBUG] [Thread-29975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:27:52.280 [DEBUG] [Thread-29975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:27:52.280 [DEBUG] [Thread-29975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:27:52.307 [INFO] [Thread-29975] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:27:52.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:27:52.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:27:53.138 [DEBUG] [Thread-29975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:27:53.138 [DEBUG] [Thread-29975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:27:53.186 [DEBUG] [Thread-29975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:27:53.186 [DEBUG] [Thread-29975] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:27:53.195 [DEBUG] [Thread-29975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:27:53.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:27:53.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-16T02:27:53.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
2026-04-16T02:27:53.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:27:53.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:27:53.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:27:53.233 [DEBUG] [Thread-29975] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:27:53.386 [DEBUG] [Thread-29977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:28:04.402 [DEBUG] [Thread-29978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:28:08.428 [DEBUG] [Thread-29979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:28:23.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:28:23.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:28:23.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
2026-04-16T02:28:23.456 [DEBUG] [Thread-29980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:28:24.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 27, 49), 1.37914, 90.9802, 0.0, 14.2567, 8.39722, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:28:24.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:27:49
2026-04-16T02:28:24.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:28:25.359 [DEBUG] [Thread-29981] [transport.py] [_log()] starting thread (client mode): 0xf1335990
2026-04-16T02:28:25.360 [DEBUG] [Thread-29981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:28:25.378 [DEBUG] [Thread-29981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:28:25.378 [INFO] [Thread-29981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:28:25.382 [DEBUG] [Thread-29981] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:28:25.382 [DEBUG] [Thread-29981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:28:25.382 [DEBUG] [Thread-29981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:28:25.382 [DEBUG] [Thread-29981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:28:25.382 [DEBUG] [Thread-29981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:28:25.382 [DEBUG] [Thread-29981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:28:25.382 [DEBUG] [Thread-29981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:28:25.383 [DEBUG] [Thread-29981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:28:25.383 [DEBUG] [Thread-29981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:28:25.383 [DEBUG] [Thread-29981] [transport.py] [_log()] client lang: <none>
2026-04-16T02:28:25.383 [DEBUG] [Thread-29981] [transport.py] [_log()] server lang: <none>
2026-04-16T02:28:25.383 [DEBUG] [Thread-29981] [transport.py] [_log()] kex follows: False
2026-04-16T02:28:25.383 [DEBUG] [Thread-29981] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:28:25.383 [DEBUG] [Thread-29981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:28:25.383 [DEBUG] [Thread-29981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:28:25.383 [DEBUG] [Thread-29981] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:28:25.383 [DEBUG] [Thread-29981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:28:25.383 [DEBUG] [Thread-29981] [transport.py] [_log()] Compression: none
2026-04-16T02:28:25.383 [DEBUG] [Thread-29981] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:28:25.401 [DEBUG] [Thread-29981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:28:25.401 [DEBUG] [Thread-29981] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:28:25.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:28:25.402 [DEBUG] [Thread-29981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:28:25.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:28:25.403 [DEBUG] [Thread-29981] [transport.py] [_log()] userauth is OK
2026-04-16T02:28:25.403 [DEBUG] [Thread-29981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:28:25.403 [DEBUG] [Thread-29981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:28:25.403 [DEBUG] [Thread-29981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:28:25.403 [DEBUG] [Thread-29981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:28:25.420 [INFO] [Thread-29981] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:28:25.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:28:26.232 [DEBUG] [Thread-29981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:28:26.232 [DEBUG] [Thread-29981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:28:26.232 [DEBUG] [Thread-29981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:28:26.273 [DEBUG] [Thread-29981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:28:26.273 [DEBUG] [Thread-29981] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:28:26.275 [DEBUG] [Thread-29981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:28:26.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:28:26.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:28:26.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:28:26.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:28:26.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:28:26.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:28:26.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:28:26.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:28:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:28:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.019227 -999.00   +8.90  10.89     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 zNESW 12.0 10.9 74.0 12.2 9.2 -25.5 9.1 -24.3 8.8 -22.1 9.1 -24.0
2026-04-16T02:28:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:28:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:28:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.019227
2026-04-16T02:28:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:28:26.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:28:26.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:28:26.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:28:26.293 [DEBUG] [Thread-29981] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:28:26.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:28:26.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:27:49', tmtdew=1.37914, humidity=90.9802, cloud=0.0, wind=14.2567, temperature=8.39722, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:27:41.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 2.22825, nan, nan, nan, nan, nan, nan, nan, 3.261000000000001, nan, 2.433, nan, nan, nan, 1.786999999999999, nan, 0.9355000000000002, 2.390999999999999, 1.9812499999999993, nan, 2.1172499999999985, 0.433250000000001, 0.12925000000000075, 0.3169999999999984, 0.2104999999999997, 0.30324999999999847, 0.2550000000000008, 0.2530000000000001, 0.23300000000000054, 0.18900000000000183, 0.022500000000000853, -0.039250000000000895], zp_timestamp='2026-04-16T00:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:28:26.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:28:26.515 [DEBUG] [Thread-29984] [transport.py] [_log()] starting thread (client mode): 0xee9c7460
2026-04-16T02:28:26.515 [DEBUG] [Thread-29984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:28:26.529 [DEBUG] [Thread-29984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:28:26.529 [INFO] [Thread-29984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:28:26.537 [DEBUG] [Thread-29984] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:28:26.537 [DEBUG] [Thread-29984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:28:26.537 [DEBUG] [Thread-29984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:28:26.537 [DEBUG] [Thread-29984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:28:26.537 [DEBUG] [Thread-29984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:28:26.537 [DEBUG] [Thread-29984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:28:26.537 [DEBUG] [Thread-29984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:28:26.537 [DEBUG] [Thread-29984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:28:26.537 [DEBUG] [Thread-29984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:28:26.537 [DEBUG] [Thread-29984] [transport.py] [_log()] client lang: <none>
2026-04-16T02:28:26.538 [DEBUG] [Thread-29984] [transport.py] [_log()] server lang: <none>
2026-04-16T02:28:26.538 [DEBUG] [Thread-29984] [transport.py] [_log()] kex follows: False
2026-04-16T02:28:26.538 [DEBUG] [Thread-29984] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:28:26.538 [DEBUG] [Thread-29984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:28:26.538 [DEBUG] [Thread-29984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:28:26.538 [DEBUG] [Thread-29984] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:28:26.538 [DEBUG] [Thread-29984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:28:26.538 [DEBUG] [Thread-29984] [transport.py] [_log()] Compression: none
2026-04-16T02:28:26.538 [DEBUG] [Thread-29984] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:28:26.595 [DEBUG] [Thread-29984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:28:26.595 [DEBUG] [Thread-29984] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:28:26.596 [DEBUG] [Thread-29984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:28:26.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:28:26.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:28:26.652 [DEBUG] [Thread-29984] [transport.py] [_log()] userauth is OK
2026-04-16T02:28:26.652 [DEBUG] [Thread-29984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:28:26.652 [DEBUG] [Thread-29984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:28:26.652 [DEBUG] [Thread-29984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:28:26.652 [DEBUG] [Thread-29984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:28:26.678 [INFO] [Thread-29984] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:28:26.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:28:26.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:28:27.506 [DEBUG] [Thread-29984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:28:27.507 [DEBUG] [Thread-29984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:28:27.555 [DEBUG] [Thread-29984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:28:27.555 [DEBUG] [Thread-29984] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:28:27.564 [DEBUG] [Thread-29984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:28:27.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:28:27.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')
2026-04-16T02:28:27.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
2026-04-16T02:28:27.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:28:27.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:28:27.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:28:27.598 [DEBUG] [Thread-29984] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:28:38.488 [DEBUG] [Thread-29986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:28:51.261 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:28:51.262 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:28:53.531 [DEBUG] [Thread-29987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:28:57.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:28:57.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:28:57.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T02:28:58.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 28, 24), 1.58726, 89.5066, 0.0, 12.6518, 8.73172, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:28:58.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:28:24
2026-04-16T02:28:59.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:28:59.781 [DEBUG] [Thread-29988] [transport.py] [_log()] starting thread (client mode): 0xee9c7d30
2026-04-16T02:28:59.781 [DEBUG] [Thread-29988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:28:59.801 [DEBUG] [Thread-29988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:28:59.801 [INFO] [Thread-29988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:28:59.805 [DEBUG] [Thread-29988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:28:59.805 [DEBUG] [Thread-29988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:28:59.805 [DEBUG] [Thread-29988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:28:59.805 [DEBUG] [Thread-29988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:28:59.805 [DEBUG] [Thread-29988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:28:59.805 [DEBUG] [Thread-29988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:28:59.805 [DEBUG] [Thread-29988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:28:59.805 [DEBUG] [Thread-29988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:28:59.805 [DEBUG] [Thread-29988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:28:59.806 [DEBUG] [Thread-29988] [transport.py] [_log()] client lang: <none>
2026-04-16T02:28:59.806 [DEBUG] [Thread-29988] [transport.py] [_log()] server lang: <none>
2026-04-16T02:28:59.806 [DEBUG] [Thread-29988] [transport.py] [_log()] kex follows: False
2026-04-16T02:28:59.806 [DEBUG] [Thread-29988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:28:59.806 [DEBUG] [Thread-29988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:28:59.806 [DEBUG] [Thread-29988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:28:59.806 [DEBUG] [Thread-29988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:28:59.806 [DEBUG] [Thread-29988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:28:59.806 [DEBUG] [Thread-29988] [transport.py] [_log()] Compression: none
2026-04-16T02:28:59.806 [DEBUG] [Thread-29988] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:28:59.823 [DEBUG] [Thread-29988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:28:59.824 [DEBUG] [Thread-29988] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:28:59.824 [DEBUG] [Thread-29988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:28:59.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:28:59.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:28:59.825 [DEBUG] [Thread-29988] [transport.py] [_log()] userauth is OK
2026-04-16T02:28:59.825 [DEBUG] [Thread-29988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:28:59.825 [DEBUG] [Thread-29988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:28:59.825 [DEBUG] [Thread-29988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:28:59.825 [DEBUG] [Thread-29988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:28:59.860 [INFO] [Thread-29988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:28:59.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:29:00.661 [DEBUG] [Thread-29988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:29:00.662 [DEBUG] [Thread-29988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:29:00.662 [DEBUG] [Thread-29988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:29:00.702 [DEBUG] [Thread-29988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:29:00.702 [DEBUG] [Thread-29988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:29:00.705 [DEBUG] [Thread-29988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:29:00.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:29:00.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:29:00.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:29:00.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:29:00.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:29:00.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:29:00.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:29:00.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:29:00.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:29:00.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.019575 -999.00   +8.90   6.99     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESW 8.2 7.0 106.6 12.7 9.2 -25.5 9.0 -24.2 8.8 -22.1 9.1 -24.2
2026-04-16T02:29:00.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:29:00.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:29:00.723 [DEBUG] [Thread-29988] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:29:00.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.019575
2026-04-16T02:29:00.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:29:00.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:29:00.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:29:00.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:29:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:29:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:28:24', tmtdew=1.58726, humidity=89.5066, cloud=0.0, wind=12.6518, temperature=8.73172, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:28:11.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 2.22825, nan, nan, nan, nan, nan, nan, nan, 3.261000000000001, nan, 2.433, nan, nan, nan, 1.786999999999999, nan, 0.9355000000000002, 2.390999999999999, 1.9812499999999993, nan, 2.1172499999999985, 0.433250000000001, 0.12925000000000075, 0.3169999999999984, 0.2104999999999997, 0.30324999999999847, 0.2550000000000008, 0.2530000000000001, 0.23300000000000054, 0.18900000000000183, 0.022500000000000853, -0.039250000000000895], zp_timestamp='2026-04-16T00:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:29:00.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:29:00.994 [DEBUG] [Thread-29991] [transport.py] [_log()] starting thread (client mode): 0xee954bb0
2026-04-16T02:29:00.994 [DEBUG] [Thread-29991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:29:01.008 [DEBUG] [Thread-29991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:29:01.008 [INFO] [Thread-29991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:29:01.015 [DEBUG] [Thread-29991] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] client lang: <none>
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] server lang: <none>
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] kex follows: False
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] Compression: none
2026-04-16T02:29:01.016 [DEBUG] [Thread-29991] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:29:01.075 [DEBUG] [Thread-29991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:29:01.075 [DEBUG] [Thread-29991] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:29:01.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:29:01.076 [DEBUG] [Thread-29991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:29:01.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:29:01.131 [DEBUG] [Thread-29991] [transport.py] [_log()] userauth is OK
2026-04-16T02:29:01.131 [DEBUG] [Thread-29991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:29:01.131 [DEBUG] [Thread-29991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:29:01.131 [DEBUG] [Thread-29991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:29:01.131 [DEBUG] [Thread-29991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:29:01.148 [INFO] [Thread-29991] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:29:01.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:29:01.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:29:01.958 [DEBUG] [Thread-29991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:29:01.959 [DEBUG] [Thread-29991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:29:02.006 [DEBUG] [Thread-29991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:29:02.007 [DEBUG] [Thread-29991] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:29:02.016 [DEBUG] [Thread-29991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:29:02.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:29:02.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')
2026-04-16T02:29:02.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
2026-04-16T02:29:02.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:29:02.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:29:02.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:29:02.053 [DEBUG] [Thread-29991] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:29:04.567 [DEBUG] [Thread-29993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:29:08.558 [DEBUG] [Thread-29994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:29:23.597 [DEBUG] [Thread-29995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:29:32.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:29:32.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:29:32.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
2026-04-16T02:29:33.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 28, 24), 1.58726, 89.5066, 0.0, 12.6518, 8.73172, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:29:33.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:28:24
2026-04-16T02:29:33.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:29:34.243 [DEBUG] [Thread-29996] [transport.py] [_log()] starting thread (client mode): 0xee9c7fd0
2026-04-16T02:29:34.243 [DEBUG] [Thread-29996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:29:34.262 [DEBUG] [Thread-29996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:29:34.262 [INFO] [Thread-29996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:29:34.265 [DEBUG] [Thread-29996] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:29:34.265 [DEBUG] [Thread-29996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:29:34.265 [DEBUG] [Thread-29996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:29:34.266 [DEBUG] [Thread-29996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:29:34.266 [DEBUG] [Thread-29996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:29:34.266 [DEBUG] [Thread-29996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:29:34.266 [DEBUG] [Thread-29996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:29:34.266 [DEBUG] [Thread-29996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:29:34.266 [DEBUG] [Thread-29996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:29:34.266 [DEBUG] [Thread-29996] [transport.py] [_log()] client lang: <none>
2026-04-16T02:29:34.266 [DEBUG] [Thread-29996] [transport.py] [_log()] server lang: <none>
2026-04-16T02:29:34.266 [DEBUG] [Thread-29996] [transport.py] [_log()] kex follows: False
2026-04-16T02:29:34.266 [DEBUG] [Thread-29996] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:29:34.266 [DEBUG] [Thread-29996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:29:34.266 [DEBUG] [Thread-29996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:29:34.267 [DEBUG] [Thread-29996] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:29:34.267 [DEBUG] [Thread-29996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:29:34.267 [DEBUG] [Thread-29996] [transport.py] [_log()] Compression: none
2026-04-16T02:29:34.267 [DEBUG] [Thread-29996] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:29:34.284 [DEBUG] [Thread-29996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:29:34.285 [DEBUG] [Thread-29996] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:29:34.285 [DEBUG] [Thread-29996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:29:34.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:29:34.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:29:34.286 [DEBUG] [Thread-29996] [transport.py] [_log()] userauth is OK
2026-04-16T02:29:34.286 [DEBUG] [Thread-29996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:29:34.287 [DEBUG] [Thread-29996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:29:34.287 [DEBUG] [Thread-29996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:29:34.287 [DEBUG] [Thread-29996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:29:34.305 [INFO] [Thread-29996] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:29:34.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:29:35.091 [DEBUG] [Thread-29996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:29:35.091 [DEBUG] [Thread-29996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:29:35.091 [DEBUG] [Thread-29996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:29:35.132 [DEBUG] [Thread-29996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:29:35.132 [DEBUG] [Thread-29996] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:29:35.134 [DEBUG] [Thread-29996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:29:35.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:29:35.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:29:35.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:29:35.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:29:35.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:29:35.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:29:35.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:29:35.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:29:35.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:29:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.020269 -999.00   +8.90   8.48     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESW 9.2 8.5 84.6 10.3 9.2 -25.6 9.1 -24.3 8.8 -22.0 9.1 -24.1
2026-04-16T02:29:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:29:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:29:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.020269
2026-04-16T02:29:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:29:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:29:35.152 [DEBUG] [Thread-29996] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:29:35.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:29:35.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:29:35.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:29:35.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:28:24', tmtdew=1.58726, humidity=89.5066, cloud=0.0, wind=12.6518, temperature=8.73172, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:29:11.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 2.22825, nan, nan, nan, nan, nan, nan, nan, 3.261000000000001, nan, 2.433, nan, nan, nan, 1.786999999999999, nan, 0.9355000000000002, 2.390999999999999, 1.9812499999999993, nan, 2.1172499999999985, 0.433250000000001, 0.12925000000000075, 0.3169999999999984, 0.2104999999999997, 0.30324999999999847, 0.2550000000000008, 0.2530000000000001, 0.23300000000000054, 0.18900000000000183, 0.022500000000000853, -0.039250000000000895], zp_timestamp='2026-04-16T00:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:29:35.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:29:35.366 [DEBUG] [Thread-29999] [transport.py] [_log()] starting thread (client mode): 0xee9c5db0
2026-04-16T02:29:35.366 [DEBUG] [Thread-29999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:29:35.381 [DEBUG] [Thread-29999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:29:35.381 [INFO] [Thread-29999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:29:35.389 [DEBUG] [Thread-29999] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:29:35.389 [DEBUG] [Thread-29999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:29:35.389 [DEBUG] [Thread-29999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:29:35.389 [DEBUG] [Thread-29999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:29:35.389 [DEBUG] [Thread-29999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:29:35.389 [DEBUG] [Thread-29999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:29:35.389 [DEBUG] [Thread-29999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:29:35.389 [DEBUG] [Thread-29999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:29:35.389 [DEBUG] [Thread-29999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:29:35.389 [DEBUG] [Thread-29999] [transport.py] [_log()] client lang: <none>
2026-04-16T02:29:35.389 [DEBUG] [Thread-29999] [transport.py] [_log()] server lang: <none>
2026-04-16T02:29:35.389 [DEBUG] [Thread-29999] [transport.py] [_log()] kex follows: False
2026-04-16T02:29:35.389 [DEBUG] [Thread-29999] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:29:35.390 [DEBUG] [Thread-29999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:29:35.390 [DEBUG] [Thread-29999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:29:35.390 [DEBUG] [Thread-29999] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:29:35.390 [DEBUG] [Thread-29999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:29:35.390 [DEBUG] [Thread-29999] [transport.py] [_log()] Compression: none
2026-04-16T02:29:35.390 [DEBUG] [Thread-29999] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:29:35.447 [DEBUG] [Thread-29999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:29:35.447 [DEBUG] [Thread-29999] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:29:35.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:29:35.448 [DEBUG] [Thread-29999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:29:35.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:29:35.503 [DEBUG] [Thread-29999] [transport.py] [_log()] userauth is OK
2026-04-16T02:29:35.503 [DEBUG] [Thread-29999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:29:35.503 [DEBUG] [Thread-29999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:29:35.503 [DEBUG] [Thread-29999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:29:35.503 [DEBUG] [Thread-29999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:29:35.523 [INFO] [Thread-29999] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:29:35.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:29:35.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:29:36.353 [DEBUG] [Thread-29999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:29:36.353 [DEBUG] [Thread-29999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:29:36.401 [DEBUG] [Thread-29999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:29:36.402 [DEBUG] [Thread-29999] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:29:36.410 [DEBUG] [Thread-29999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:29:36.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:29:36.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')
2026-04-16T02:29:36.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
2026-04-16T02:29:36.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:29:36.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:29:36.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:29:36.442 [DEBUG] [Thread-29999] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:29:38.628 [DEBUG] [Thread-30001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:29:51.470 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:29:51.471 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:29:53.671 [DEBUG] [Thread-30002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:30:04.738 [DEBUG] [Thread-30003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:30:06.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:30:06.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:30:06.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
2026-04-16T02:30:07.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 29, 35), 1.36878, 91.0469, 0.0, 14.1156, 8.43064, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:30:07.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:29:35
2026-04-16T02:30:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:30:08.643 [DEBUG] [Thread-30004] [transport.py] [_log()] starting thread (client mode): 0xee9c2050
2026-04-16T02:30:08.644 [DEBUG] [Thread-30004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:30:08.665 [DEBUG] [Thread-30004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:30:08.666 [INFO] [Thread-30004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:30:08.669 [DEBUG] [Thread-30004] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:30:08.669 [DEBUG] [Thread-30004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:30:08.669 [DEBUG] [Thread-30004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:30:08.669 [DEBUG] [Thread-30004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:30:08.669 [DEBUG] [Thread-30004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:30:08.669 [DEBUG] [Thread-30004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:30:08.669 [DEBUG] [Thread-30004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:30:08.669 [DEBUG] [Thread-30004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:30:08.670 [DEBUG] [Thread-30004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:30:08.670 [DEBUG] [Thread-30004] [transport.py] [_log()] client lang: <none>
2026-04-16T02:30:08.670 [DEBUG] [Thread-30004] [transport.py] [_log()] server lang: <none>
2026-04-16T02:30:08.670 [DEBUG] [Thread-30004] [transport.py] [_log()] kex follows: False
2026-04-16T02:30:08.670 [DEBUG] [Thread-30004] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:30:08.670 [DEBUG] [Thread-30004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:30:08.670 [DEBUG] [Thread-30004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:30:08.670 [DEBUG] [Thread-30004] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:30:08.670 [DEBUG] [Thread-30004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:30:08.670 [DEBUG] [Thread-30004] [transport.py] [_log()] Compression: none
2026-04-16T02:30:08.671 [DEBUG] [Thread-30004] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:30:08.686 [DEBUG] [Thread-30004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:30:08.686 [DEBUG] [Thread-30004] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:30:08.687 [DEBUG] [Thread-30004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:30:08.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:30:08.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:30:08.688 [DEBUG] [Thread-30004] [transport.py] [_log()] userauth is OK
2026-04-16T02:30:08.688 [DEBUG] [Thread-30004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:30:08.688 [DEBUG] [Thread-30004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:30:08.688 [DEBUG] [Thread-30004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:30:08.688 [DEBUG] [Thread-30004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:30:08.702 [DEBUG] [Thread-30006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:30:08.713 [INFO] [Thread-30004] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:30:08.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:30:14.858 [DEBUG] [Thread-30004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:30:14.859 [DEBUG] [Thread-30004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:30:14.859 [DEBUG] [Thread-30004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:30:14.900 [DEBUG] [Thread-30004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:30:14.900 [DEBUG] [Thread-30004] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:30:14.903 [DEBUG] [Thread-30004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:30:14.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:30:14.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:30:14.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:30:14.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:30:14.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:30:14.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:30:14.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:30:14.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:30:14.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:30:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.020616 -999.00   +8.80   9.88     89   +7.20 1 1 1 3 1     0    0 -999.00 0.00 .NESW 11.0 9.9 69.6 11.9 9.2 -25.6 9.0 -24.3 8.8 -22.0 9.1 -24.0
2026-04-16T02:30:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:30:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:30:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.020616
2026-04-16T02:30:14.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:30:14.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:30:14.995 [DEBUG] [Thread-30004] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:30:14.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:30:14.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:30:14.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:30:14.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:29:35', tmtdew=1.36878, humidity=91.0469, cloud=0.0, wind=14.1156, temperature=8.43064, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:29:41.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 2.22825, nan, nan, nan, nan, nan, nan, nan, 3.261000000000001, nan, 2.433, nan, nan, nan, 1.786999999999999, nan, 0.9355000000000002, 2.390999999999999, 1.9812499999999993, nan, 2.1172499999999985, 0.433250000000001, 0.12925000000000075, 0.3169999999999984, 0.2104999999999997, 0.30324999999999847, 0.2550000000000008, 0.2530000000000001, 0.23300000000000054, 0.18900000000000183, 0.022500000000000853, -0.039250000000000895], zp_timestamp='2026-04-16T00:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:30:15.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:30:15.257 [DEBUG] [Thread-30008] [transport.py] [_log()] starting thread (client mode): 0xee9c7be0
2026-04-16T02:30:15.258 [DEBUG] [Thread-30008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:30:15.273 [DEBUG] [Thread-30008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:30:15.273 [INFO] [Thread-30008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:30:15.280 [DEBUG] [Thread-30008] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:30:15.280 [DEBUG] [Thread-30008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:30:15.280 [DEBUG] [Thread-30008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:30:15.280 [DEBUG] [Thread-30008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:30:15.281 [DEBUG] [Thread-30008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:30:15.281 [DEBUG] [Thread-30008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:30:15.281 [DEBUG] [Thread-30008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:30:15.281 [DEBUG] [Thread-30008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:30:15.281 [DEBUG] [Thread-30008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:30:15.281 [DEBUG] [Thread-30008] [transport.py] [_log()] client lang: <none>
2026-04-16T02:30:15.281 [DEBUG] [Thread-30008] [transport.py] [_log()] server lang: <none>
2026-04-16T02:30:15.281 [DEBUG] [Thread-30008] [transport.py] [_log()] kex follows: False
2026-04-16T02:30:15.281 [DEBUG] [Thread-30008] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:30:15.281 [DEBUG] [Thread-30008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:30:15.281 [DEBUG] [Thread-30008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:30:15.282 [DEBUG] [Thread-30008] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:30:15.282 [DEBUG] [Thread-30008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:30:15.282 [DEBUG] [Thread-30008] [transport.py] [_log()] Compression: none
2026-04-16T02:30:15.282 [DEBUG] [Thread-30008] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:30:15.341 [DEBUG] [Thread-30008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:30:15.341 [DEBUG] [Thread-30008] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:30:15.342 [DEBUG] [Thread-30008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:30:15.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:30:15.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:30:15.399 [DEBUG] [Thread-30008] [transport.py] [_log()] userauth is OK
2026-04-16T02:30:15.400 [DEBUG] [Thread-30008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:30:15.400 [DEBUG] [Thread-30008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:30:15.400 [DEBUG] [Thread-30008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:30:15.400 [DEBUG] [Thread-30008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:30:15.426 [INFO] [Thread-30008] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:30:15.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:30:15.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:30:16.259 [DEBUG] [Thread-30008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:30:16.259 [DEBUG] [Thread-30008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:30:16.307 [DEBUG] [Thread-30008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:30:16.307 [DEBUG] [Thread-30008] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:30:16.315 [DEBUG] [Thread-30008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:30:16.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:30:16.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')
2026-04-16T02:30:16.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
2026-04-16T02:30:16.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:30:16.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:30:16.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:30:16.347 [DEBUG] [Thread-30008] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:30:23.733 [DEBUG] [Thread-30010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:30:38.778 [DEBUG] [Thread-30011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:30:46.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:30:46.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:30:46.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T02:30:47.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 30, 11), 1.6317, 89.5403, 0.0, 12.5813, 8.71548, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:30:47.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:30:11
2026-04-16T02:30:48.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:30:48.578 [DEBUG] [Thread-30012] [transport.py] [_log()] starting thread (client mode): 0xee990700
2026-04-16T02:30:48.579 [DEBUG] [Thread-30012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:30:48.599 [DEBUG] [Thread-30012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:30:48.599 [INFO] [Thread-30012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:30:48.602 [DEBUG] [Thread-30012] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:30:48.602 [DEBUG] [Thread-30012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:30:48.603 [DEBUG] [Thread-30012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:30:48.603 [DEBUG] [Thread-30012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:30:48.603 [DEBUG] [Thread-30012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:30:48.603 [DEBUG] [Thread-30012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:30:48.603 [DEBUG] [Thread-30012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:30:48.603 [DEBUG] [Thread-30012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:30:48.603 [DEBUG] [Thread-30012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:30:48.603 [DEBUG] [Thread-30012] [transport.py] [_log()] client lang: <none>
2026-04-16T02:30:48.603 [DEBUG] [Thread-30012] [transport.py] [_log()] server lang: <none>
2026-04-16T02:30:48.603 [DEBUG] [Thread-30012] [transport.py] [_log()] kex follows: False
2026-04-16T02:30:48.603 [DEBUG] [Thread-30012] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:30:48.603 [DEBUG] [Thread-30012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:30:48.604 [DEBUG] [Thread-30012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:30:48.604 [DEBUG] [Thread-30012] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:30:48.604 [DEBUG] [Thread-30012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:30:48.604 [DEBUG] [Thread-30012] [transport.py] [_log()] Compression: none
2026-04-16T02:30:48.604 [DEBUG] [Thread-30012] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:30:48.620 [DEBUG] [Thread-30012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:30:48.621 [DEBUG] [Thread-30012] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:30:48.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:30:48.621 [DEBUG] [Thread-30012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:30:48.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:30:48.622 [DEBUG] [Thread-30012] [transport.py] [_log()] userauth is OK
2026-04-16T02:30:48.622 [DEBUG] [Thread-30012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:30:48.623 [DEBUG] [Thread-30012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:30:48.623 [DEBUG] [Thread-30012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:30:48.623 [DEBUG] [Thread-30012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:30:48.647 [INFO] [Thread-30012] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:30:48.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:30:49.407 [DEBUG] [Thread-30012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:30:49.408 [DEBUG] [Thread-30012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:30:49.408 [DEBUG] [Thread-30012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:30:49.448 [DEBUG] [Thread-30012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:30:49.448 [DEBUG] [Thread-30012] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:30:49.451 [DEBUG] [Thread-30012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:30:49.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:30:49.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:30:49.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:30:49.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:30:49.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:30:49.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:30:49.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:30:49.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:30:49.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:30:49.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.020963 -999.00   +8.80   5.34     89   +7.20 1 1 1 3 1     0    0 1.55 -4.77 .NESW 10.2 5.3 93.9 13.8 9.2 -25.5 9.1 -24.2 8.8 -21.9 9.1 -24.1
2026-04-16T02:30:49.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:30:49.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:30:49.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.020963
2026-04-16T02:30:49.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:30:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:30:49.475 [DEBUG] [Thread-30012] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:30:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:30:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:30:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:30:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:30:11', tmtdew=1.6317, humidity=89.5403, cloud=0.0, wind=12.5813, temperature=8.71548, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:30:11.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 2.22825, nan, nan, nan, nan, nan, nan, nan, 3.261000000000001, nan, 2.433, nan, nan, nan, 1.786999999999999, nan, 0.9355000000000002, 2.390999999999999, 1.9812499999999993, nan, 2.1172499999999985, 0.433250000000001, 0.12925000000000075, 0.3169999999999984, 0.2104999999999997, 0.30324999999999847, 0.2550000000000008, 0.2530000000000001, 0.23300000000000054, 0.18900000000000183, 0.022500000000000853, -0.039250000000000895], zp_timestamp='2026-04-16T00:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:30:49.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:30:49.732 [DEBUG] [Thread-30015] [transport.py] [_log()] starting thread (client mode): 0xee9c3700
2026-04-16T02:30:49.732 [DEBUG] [Thread-30015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:30:49.746 [DEBUG] [Thread-30015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:30:49.747 [INFO] [Thread-30015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:30:49.754 [DEBUG] [Thread-30015] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:30:49.754 [DEBUG] [Thread-30015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:30:49.754 [DEBUG] [Thread-30015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:30:49.754 [DEBUG] [Thread-30015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:30:49.754 [DEBUG] [Thread-30015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:30:49.754 [DEBUG] [Thread-30015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:30:49.755 [DEBUG] [Thread-30015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:30:49.755 [DEBUG] [Thread-30015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:30:49.755 [DEBUG] [Thread-30015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:30:49.755 [DEBUG] [Thread-30015] [transport.py] [_log()] client lang: <none>
2026-04-16T02:30:49.755 [DEBUG] [Thread-30015] [transport.py] [_log()] server lang: <none>
2026-04-16T02:30:49.755 [DEBUG] [Thread-30015] [transport.py] [_log()] kex follows: False
2026-04-16T02:30:49.755 [DEBUG] [Thread-30015] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:30:49.755 [DEBUG] [Thread-30015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:30:49.755 [DEBUG] [Thread-30015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:30:49.755 [DEBUG] [Thread-30015] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:30:49.755 [DEBUG] [Thread-30015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:30:49.756 [DEBUG] [Thread-30015] [transport.py] [_log()] Compression: none
2026-04-16T02:30:49.756 [DEBUG] [Thread-30015] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:30:49.817 [DEBUG] [Thread-30015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:30:49.818 [DEBUG] [Thread-30015] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:30:49.818 [DEBUG] [Thread-30015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:30:49.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:30:49.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:30:49.874 [DEBUG] [Thread-30015] [transport.py] [_log()] userauth is OK
2026-04-16T02:30:49.874 [DEBUG] [Thread-30015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:30:49.874 [DEBUG] [Thread-30015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:30:49.874 [DEBUG] [Thread-30015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:30:49.875 [DEBUG] [Thread-30015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:30:49.903 [INFO] [Thread-30015] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:30:49.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:30:49.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:30:50.762 [DEBUG] [Thread-30015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:30:50.762 [DEBUG] [Thread-30015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:30:50.811 [DEBUG] [Thread-30015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:30:50.811 [DEBUG] [Thread-30015] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:30:50.820 [DEBUG] [Thread-30015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:30:50.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:30:50.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')
2026-04-16T02:30:50.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
2026-04-16T02:30:50.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:30:50.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:30:50.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:30:50.852 [DEBUG] [Thread-30015] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:30:51.681 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:30:51.682 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:30:53.810 [DEBUG] [Thread-30017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:31:04.890 [DEBUG] [Thread-30018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:31:08.853 [DEBUG] [Thread-30019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:31:20.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:31:20.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:31:20.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
2026-04-16T02:31:22.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 30, 47), 1.37336, 91.0142, 0.0, 14.1862, 8.36459, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:31:22.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:30:47
2026-04-16T02:31:22.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:31:22.979 [DEBUG] [Thread-30020] [transport.py] [_log()] starting thread (client mode): 0xee9540d0
2026-04-16T02:31:22.979 [DEBUG] [Thread-30020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:31:22.999 [DEBUG] [Thread-30020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:31:22.999 [INFO] [Thread-30020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:31:23.002 [DEBUG] [Thread-30020] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:31:23.002 [DEBUG] [Thread-30020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:31:23.002 [DEBUG] [Thread-30020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:31:23.002 [DEBUG] [Thread-30020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:31:23.002 [DEBUG] [Thread-30020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:31:23.002 [DEBUG] [Thread-30020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:31:23.002 [DEBUG] [Thread-30020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:31:23.002 [DEBUG] [Thread-30020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:31:23.003 [DEBUG] [Thread-30020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:31:23.003 [DEBUG] [Thread-30020] [transport.py] [_log()] client lang: <none>
2026-04-16T02:31:23.003 [DEBUG] [Thread-30020] [transport.py] [_log()] server lang: <none>
2026-04-16T02:31:23.003 [DEBUG] [Thread-30020] [transport.py] [_log()] kex follows: False
2026-04-16T02:31:23.003 [DEBUG] [Thread-30020] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:31:23.003 [DEBUG] [Thread-30020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:31:23.003 [DEBUG] [Thread-30020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:31:23.003 [DEBUG] [Thread-30020] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:31:23.003 [DEBUG] [Thread-30020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:31:23.003 [DEBUG] [Thread-30020] [transport.py] [_log()] Compression: none
2026-04-16T02:31:23.003 [DEBUG] [Thread-30020] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:31:23.019 [DEBUG] [Thread-30020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:31:23.019 [DEBUG] [Thread-30020] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:31:23.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:31:23.020 [DEBUG] [Thread-30020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:31:23.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:31:23.021 [DEBUG] [Thread-30020] [transport.py] [_log()] userauth is OK
2026-04-16T02:31:23.021 [DEBUG] [Thread-30020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:31:23.021 [DEBUG] [Thread-30020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:31:23.021 [DEBUG] [Thread-30020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:31:23.021 [DEBUG] [Thread-30020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:31:23.040 [INFO] [Thread-30020] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:31:23.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:31:23.798 [DEBUG] [Thread-30020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:31:23.798 [DEBUG] [Thread-30020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:31:23.798 [DEBUG] [Thread-30020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:31:23.839 [DEBUG] [Thread-30020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:31:23.839 [DEBUG] [Thread-30020] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:31:23.841 [DEBUG] [Thread-30020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:31:23.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:31:23.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:31:23.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:31:23.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:31:23.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:31:23.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:31:23.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:31:23.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:31:23.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:31:23.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.021310 -999.00   +8.90   8.77     89   +7.20 1 1 1 3 1     0    0 1.54 -5.45 .NESW 5.7 8.8 65.8 15.2 9.2 -25.4 9.1 -24.1 8.8 -22.0 9.1 -24.2
2026-04-16T02:31:23.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:31:23.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:31:23.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.021310
2026-04-16T02:31:23.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:31:23.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:31:23.865 [DEBUG] [Thread-30020] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:31:23.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:31:23.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:31:23.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:31:23.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:30:47', tmtdew=1.37336, humidity=91.0142, cloud=0.0, wind=14.1862, temperature=8.36459, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:30:41.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 0.8502500000000008, nan, nan, nan, nan, nan, nan, nan, 3.2430000000000003, nan, 2.3025, nan, nan, nan, nan, nan, 1.3774999999999995, 2.8554999999999993, 2.617749999999999, 2.8394999999999984, nan, 0.23425000000000118, 0.0017499999999994742, 0.16449999999999854, 0.2159999999999993, 0.2887500000000003, 0.23550000000000004, 0.1899999999999995, 0.2480000000000011, 0.17450000000000188, -0.032999999999999474, -0.12725000000000009], zp_timestamp='2026-04-16T00:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:31:23.882 [DEBUG] [Thread-30023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:31:24.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:31:24.121 [DEBUG] [Thread-30024] [transport.py] [_log()] starting thread (client mode): 0xee9c3cd0
2026-04-16T02:31:24.121 [DEBUG] [Thread-30024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:31:24.136 [DEBUG] [Thread-30024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:31:24.136 [INFO] [Thread-30024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:31:24.144 [DEBUG] [Thread-30024] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:31:24.144 [DEBUG] [Thread-30024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:31:24.144 [DEBUG] [Thread-30024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:31:24.144 [DEBUG] [Thread-30024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:31:24.144 [DEBUG] [Thread-30024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:31:24.144 [DEBUG] [Thread-30024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:31:24.144 [DEBUG] [Thread-30024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:31:24.144 [DEBUG] [Thread-30024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:31:24.144 [DEBUG] [Thread-30024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:31:24.144 [DEBUG] [Thread-30024] [transport.py] [_log()] client lang: <none>
2026-04-16T02:31:24.144 [DEBUG] [Thread-30024] [transport.py] [_log()] server lang: <none>
2026-04-16T02:31:24.145 [DEBUG] [Thread-30024] [transport.py] [_log()] kex follows: False
2026-04-16T02:31:24.145 [DEBUG] [Thread-30024] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:31:24.145 [DEBUG] [Thread-30024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:31:24.145 [DEBUG] [Thread-30024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:31:24.145 [DEBUG] [Thread-30024] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:31:24.145 [DEBUG] [Thread-30024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:31:24.145 [DEBUG] [Thread-30024] [transport.py] [_log()] Compression: none
2026-04-16T02:31:24.145 [DEBUG] [Thread-30024] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:31:24.199 [DEBUG] [Thread-30024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:31:24.199 [DEBUG] [Thread-30024] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:31:24.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:31:24.200 [DEBUG] [Thread-30024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:31:24.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:31:24.255 [DEBUG] [Thread-30024] [transport.py] [_log()] userauth is OK
2026-04-16T02:31:24.256 [DEBUG] [Thread-30024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:31:24.256 [DEBUG] [Thread-30024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:31:24.256 [DEBUG] [Thread-30024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:31:24.256 [DEBUG] [Thread-30024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:31:24.279 [INFO] [Thread-30024] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:31:24.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:31:24.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:31:25.171 [DEBUG] [Thread-30024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:31:25.171 [DEBUG] [Thread-30024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:31:25.219 [DEBUG] [Thread-30024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:31:25.219 [DEBUG] [Thread-30024] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:31:25.228 [DEBUG] [Thread-30024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:31:25.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:31:25.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')
2026-04-16T02:31:25.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
2026-04-16T02:31:25.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:31:25.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:31:25.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:31:25.261 [DEBUG] [Thread-30024] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:31:38.930 [DEBUG] [Thread-30026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:31:51.885 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:31:51.886 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:31:53.961 [DEBUG] [Thread-30027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:31:55.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:31:55.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:31:55.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
2026-04-16T02:31:56.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 31, 22), 1.57904, 89.5569, 0.0, 10.4108, 8.71548, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:31:56.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:31:22
2026-04-16T02:31:57.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:31:57.531 [DEBUG] [Thread-30028] [transport.py] [_log()] starting thread (client mode): 0xf13c9030
2026-04-16T02:31:57.532 [DEBUG] [Thread-30028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:31:57.551 [DEBUG] [Thread-30028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:31:57.551 [INFO] [Thread-30028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:31:57.554 [DEBUG] [Thread-30028] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:31:57.554 [DEBUG] [Thread-30028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:31:57.554 [DEBUG] [Thread-30028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:31:57.554 [DEBUG] [Thread-30028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:31:57.555 [DEBUG] [Thread-30028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:31:57.555 [DEBUG] [Thread-30028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:31:57.555 [DEBUG] [Thread-30028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:31:57.555 [DEBUG] [Thread-30028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:31:57.555 [DEBUG] [Thread-30028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:31:57.555 [DEBUG] [Thread-30028] [transport.py] [_log()] client lang: <none>
2026-04-16T02:31:57.555 [DEBUG] [Thread-30028] [transport.py] [_log()] server lang: <none>
2026-04-16T02:31:57.555 [DEBUG] [Thread-30028] [transport.py] [_log()] kex follows: False
2026-04-16T02:31:57.555 [DEBUG] [Thread-30028] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:31:57.555 [DEBUG] [Thread-30028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:31:57.555 [DEBUG] [Thread-30028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:31:57.555 [DEBUG] [Thread-30028] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:31:57.556 [DEBUG] [Thread-30028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:31:57.556 [DEBUG] [Thread-30028] [transport.py] [_log()] Compression: none
2026-04-16T02:31:57.556 [DEBUG] [Thread-30028] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:31:57.574 [DEBUG] [Thread-30028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:31:57.574 [DEBUG] [Thread-30028] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:31:57.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:31:57.575 [DEBUG] [Thread-30028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:31:57.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:31:57.617 [DEBUG] [Thread-30028] [transport.py] [_log()] userauth is OK
2026-04-16T02:31:57.617 [DEBUG] [Thread-30028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:31:57.617 [DEBUG] [Thread-30028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:31:57.617 [DEBUG] [Thread-30028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:31:57.617 [DEBUG] [Thread-30028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:31:57.650 [INFO] [Thread-30028] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:31:57.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:31:58.452 [DEBUG] [Thread-30028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:31:58.453 [DEBUG] [Thread-30028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:31:58.453 [DEBUG] [Thread-30028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:31:58.493 [DEBUG] [Thread-30028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:31:58.493 [DEBUG] [Thread-30028] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:31:58.495 [DEBUG] [Thread-30028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:31:58.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:31:58.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:31:58.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:31:58.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:31:58.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:31:58.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:31:58.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:31:58.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:31:58.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:31:58.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.021658 -999.00   +8.90  11.44     89   +7.30 1 1 1 3 1     0    0 1.51 -5.68 .NESW 11.7 11.4 68.6 13.3 9.2 -25.4 9.0 -24.3 8.8 -22.0 9.1 -24.2
2026-04-16T02:31:58.522 [DEBUG] [Thread-30028] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:31:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:31:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:31:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.021658
2026-04-16T02:31:58.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:31:58.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:31:58.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:31:58.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:31:58.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:31:58.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:31:22', tmtdew=1.57904, humidity=89.5569, cloud=0.0, wind=10.4108, temperature=8.71548, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:31:11.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 0.8502500000000008, nan, nan, nan, nan, nan, nan, nan, 3.2430000000000003, nan, 2.3025, nan, nan, nan, nan, nan, 1.3774999999999995, 2.8554999999999993, 2.617749999999999, 2.8394999999999984, nan, 0.23425000000000118, 0.0017499999999994742, 0.16449999999999854, 0.2159999999999993, 0.2887500000000003, 0.23550000000000004, 0.1899999999999995, 0.2480000000000011, 0.17450000000000188, -0.032999999999999474, -0.12725000000000009], zp_timestamp='2026-04-16T00:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:31:58.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:31:58.779 [DEBUG] [Thread-30031] [transport.py] [_log()] starting thread (client mode): 0xee9ea4d0
2026-04-16T02:31:58.779 [DEBUG] [Thread-30031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:31:58.794 [DEBUG] [Thread-30031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:31:58.794 [INFO] [Thread-30031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:31:58.802 [DEBUG] [Thread-30031] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:31:58.802 [DEBUG] [Thread-30031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:31:58.802 [DEBUG] [Thread-30031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:31:58.802 [DEBUG] [Thread-30031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:31:58.802 [DEBUG] [Thread-30031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:31:58.802 [DEBUG] [Thread-30031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:31:58.802 [DEBUG] [Thread-30031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:31:58.802 [DEBUG] [Thread-30031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:31:58.803 [DEBUG] [Thread-30031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:31:58.803 [DEBUG] [Thread-30031] [transport.py] [_log()] client lang: <none>
2026-04-16T02:31:58.803 [DEBUG] [Thread-30031] [transport.py] [_log()] server lang: <none>
2026-04-16T02:31:58.803 [DEBUG] [Thread-30031] [transport.py] [_log()] kex follows: False
2026-04-16T02:31:58.803 [DEBUG] [Thread-30031] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:31:58.803 [DEBUG] [Thread-30031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:31:58.803 [DEBUG] [Thread-30031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:31:58.803 [DEBUG] [Thread-30031] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:31:58.803 [DEBUG] [Thread-30031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:31:58.803 [DEBUG] [Thread-30031] [transport.py] [_log()] Compression: none
2026-04-16T02:31:58.804 [DEBUG] [Thread-30031] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:31:58.861 [DEBUG] [Thread-30031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:31:58.861 [DEBUG] [Thread-30031] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:31:58.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:31:58.862 [DEBUG] [Thread-30031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:31:58.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:31:58.918 [DEBUG] [Thread-30031] [transport.py] [_log()] userauth is OK
2026-04-16T02:31:58.918 [DEBUG] [Thread-30031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:31:58.918 [DEBUG] [Thread-30031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:31:58.918 [DEBUG] [Thread-30031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:31:58.918 [DEBUG] [Thread-30031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:31:58.945 [INFO] [Thread-30031] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:31:58.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:31:58.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:31:59.751 [DEBUG] [Thread-30031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:31:59.751 [DEBUG] [Thread-30031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:31:59.799 [DEBUG] [Thread-30031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:31:59.799 [DEBUG] [Thread-30031] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:31:59.808 [DEBUG] [Thread-30031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:31:59.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:31:59.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')
2026-04-16T02:31:59.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
2026-04-16T02:31:59.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:31:59.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:31:59.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:31:59.846 [DEBUG] [Thread-30031] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:32:05.057 [DEBUG] [Thread-30033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:32:08.988 [DEBUG] [Thread-30034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:32:24.027 [DEBUG] [Thread-30035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:32:29.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:32:29.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:32:29.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
2026-04-16T02:32:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 31, 58), 1.58382, 89.5239, 0.0, 12.4402, 8.61582, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:32:31.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:31:58
2026-04-16T02:32:31.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:32:32.342 [DEBUG] [Thread-30036] [transport.py] [_log()] starting thread (client mode): 0xee9c0df0
2026-04-16T02:32:32.342 [DEBUG] [Thread-30036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:32:32.362 [DEBUG] [Thread-30036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:32:32.362 [INFO] [Thread-30036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:32:32.365 [DEBUG] [Thread-30036] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:32:32.365 [DEBUG] [Thread-30036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:32:32.365 [DEBUG] [Thread-30036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:32:32.366 [DEBUG] [Thread-30036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:32:32.366 [DEBUG] [Thread-30036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:32:32.366 [DEBUG] [Thread-30036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:32:32.366 [DEBUG] [Thread-30036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:32:32.366 [DEBUG] [Thread-30036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:32:32.366 [DEBUG] [Thread-30036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:32:32.366 [DEBUG] [Thread-30036] [transport.py] [_log()] client lang: <none>
2026-04-16T02:32:32.366 [DEBUG] [Thread-30036] [transport.py] [_log()] server lang: <none>
2026-04-16T02:32:32.366 [DEBUG] [Thread-30036] [transport.py] [_log()] kex follows: False
2026-04-16T02:32:32.366 [DEBUG] [Thread-30036] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:32:32.366 [DEBUG] [Thread-30036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:32:32.367 [DEBUG] [Thread-30036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:32:32.367 [DEBUG] [Thread-30036] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:32:32.367 [DEBUG] [Thread-30036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:32:32.367 [DEBUG] [Thread-30036] [transport.py] [_log()] Compression: none
2026-04-16T02:32:32.367 [DEBUG] [Thread-30036] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:32:32.384 [DEBUG] [Thread-30036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:32:32.385 [DEBUG] [Thread-30036] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:32:32.385 [DEBUG] [Thread-30036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:32:32.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:32:32.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:32:32.386 [DEBUG] [Thread-30036] [transport.py] [_log()] userauth is OK
2026-04-16T02:32:32.386 [DEBUG] [Thread-30036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:32:32.387 [DEBUG] [Thread-30036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:32:32.387 [DEBUG] [Thread-30036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:32:32.387 [DEBUG] [Thread-30036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:32:32.404 [INFO] [Thread-30036] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:32:32.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:32:33.157 [DEBUG] [Thread-30036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:32:33.157 [DEBUG] [Thread-30036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:32:33.158 [DEBUG] [Thread-30036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:32:33.198 [DEBUG] [Thread-30036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:32:33.198 [DEBUG] [Thread-30036] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:32:33.201 [DEBUG] [Thread-30036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:32:33.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:32:33.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:32:33.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:32:33.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:32:33.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:32:33.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:32:33.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:32:33.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:32:33.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:32:33.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.022005 -999.00   +8.90  11.80     89   +7.30 1 1 1 3 1     0    0 1.47 -6.29 .NESW 11.6 11.8 72.4 12.8 9.2 -25.5 9.1 -24.4 8.8 -22.0 9.1 -24.1
2026-04-16T02:32:33.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:32:33.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:32:33.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.022005
2026-04-16T02:32:33.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:32:33.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:32:33.223 [DEBUG] [Thread-30036] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:32:33.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:32:33.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:32:33.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:32:33.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:31:58', tmtdew=1.58382, humidity=89.5239, cloud=0.0, wind=12.4402, temperature=8.61582, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:31:41.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 0.8502500000000008, nan, nan, nan, nan, nan, nan, nan, 3.2430000000000003, nan, 2.3025, nan, nan, nan, nan, nan, 1.3774999999999995, 2.8554999999999993, 2.617749999999999, 2.8394999999999984, nan, 0.23425000000000118, 0.0017499999999994742, 0.16449999999999854, 0.2159999999999993, 0.2887500000000003, 0.23550000000000004, 0.1899999999999995, 0.2480000000000011, 0.17450000000000188, -0.032999999999999474, -0.12725000000000009], zp_timestamp='2026-04-16T00:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:32:33.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:32:33.480 [DEBUG] [Thread-30039] [transport.py] [_log()] starting thread (client mode): 0xee9c6620
2026-04-16T02:32:33.480 [DEBUG] [Thread-30039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:32:33.494 [DEBUG] [Thread-30039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:32:33.494 [INFO] [Thread-30039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:32:33.502 [DEBUG] [Thread-30039] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:32:33.502 [DEBUG] [Thread-30039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:32:33.502 [DEBUG] [Thread-30039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:32:33.502 [DEBUG] [Thread-30039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:32:33.502 [DEBUG] [Thread-30039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:32:33.502 [DEBUG] [Thread-30039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:32:33.502 [DEBUG] [Thread-30039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:32:33.502 [DEBUG] [Thread-30039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:32:33.502 [DEBUG] [Thread-30039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:32:33.502 [DEBUG] [Thread-30039] [transport.py] [_log()] client lang: <none>
2026-04-16T02:32:33.502 [DEBUG] [Thread-30039] [transport.py] [_log()] server lang: <none>
2026-04-16T02:32:33.502 [DEBUG] [Thread-30039] [transport.py] [_log()] kex follows: False
2026-04-16T02:32:33.503 [DEBUG] [Thread-30039] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:32:33.503 [DEBUG] [Thread-30039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:32:33.503 [DEBUG] [Thread-30039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:32:33.503 [DEBUG] [Thread-30039] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:32:33.503 [DEBUG] [Thread-30039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:32:33.503 [DEBUG] [Thread-30039] [transport.py] [_log()] Compression: none
2026-04-16T02:32:33.503 [DEBUG] [Thread-30039] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:32:33.563 [DEBUG] [Thread-30039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:32:33.563 [DEBUG] [Thread-30039] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:32:33.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:32:33.564 [DEBUG] [Thread-30039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:32:33.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:32:33.619 [DEBUG] [Thread-30039] [transport.py] [_log()] userauth is OK
2026-04-16T02:32:33.620 [DEBUG] [Thread-30039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:32:33.620 [DEBUG] [Thread-30039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:32:33.620 [DEBUG] [Thread-30039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:32:33.620 [DEBUG] [Thread-30039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:32:33.648 [INFO] [Thread-30039] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:32:33.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:32:33.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:32:34.463 [DEBUG] [Thread-30039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:32:34.464 [DEBUG] [Thread-30039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:32:34.511 [DEBUG] [Thread-30039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:32:34.511 [DEBUG] [Thread-30039] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:32:34.520 [DEBUG] [Thread-30039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:32:34.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:32:34.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')
2026-04-16T02:32:34.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
2026-04-16T02:32:34.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:32:34.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:32:34.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:32:34.554 [DEBUG] [Thread-30039] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:32:39.060 [DEBUG] [Thread-30041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:32:52.089 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:32:52.090 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:32:54.105 [DEBUG] [Thread-30042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:33:04.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:33:04.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:33:04.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
2026-04-16T02:33:05.224 [DEBUG] [Thread-30043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:33:05.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 32, 34), 1.34734, 91.1808, 0.0, 13.5158, 8.43138, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:33:05.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:32:34
2026-04-16T02:33:06.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:33:06.694 [DEBUG] [Thread-30044] [transport.py] [_log()] starting thread (client mode): 0xf13e3fd0
2026-04-16T02:33:06.694 [DEBUG] [Thread-30044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:33:06.713 [DEBUG] [Thread-30044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:33:06.713 [INFO] [Thread-30044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:33:06.715 [DEBUG] [Thread-30044] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:33:06.716 [DEBUG] [Thread-30044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:33:06.716 [DEBUG] [Thread-30044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:33:06.716 [DEBUG] [Thread-30044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:33:06.716 [DEBUG] [Thread-30044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:33:06.716 [DEBUG] [Thread-30044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:33:06.716 [DEBUG] [Thread-30044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:33:06.716 [DEBUG] [Thread-30044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:33:06.716 [DEBUG] [Thread-30044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:33:06.716 [DEBUG] [Thread-30044] [transport.py] [_log()] client lang: <none>
2026-04-16T02:33:06.716 [DEBUG] [Thread-30044] [transport.py] [_log()] server lang: <none>
2026-04-16T02:33:06.716 [DEBUG] [Thread-30044] [transport.py] [_log()] kex follows: False
2026-04-16T02:33:06.717 [DEBUG] [Thread-30044] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:33:06.717 [DEBUG] [Thread-30044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:33:06.717 [DEBUG] [Thread-30044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:33:06.717 [DEBUG] [Thread-30044] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:33:06.717 [DEBUG] [Thread-30044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:33:06.717 [DEBUG] [Thread-30044] [transport.py] [_log()] Compression: none
2026-04-16T02:33:06.717 [DEBUG] [Thread-30044] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:33:06.733 [DEBUG] [Thread-30044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:33:06.733 [DEBUG] [Thread-30044] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:33:06.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:33:06.734 [DEBUG] [Thread-30044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:33:06.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:33:06.735 [DEBUG] [Thread-30044] [transport.py] [_log()] userauth is OK
2026-04-16T02:33:06.735 [DEBUG] [Thread-30044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:33:06.735 [DEBUG] [Thread-30044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:33:06.735 [DEBUG] [Thread-30044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:33:06.735 [DEBUG] [Thread-30044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:33:06.759 [INFO] [Thread-30044] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:33:06.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:33:07.552 [DEBUG] [Thread-30044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:33:07.553 [DEBUG] [Thread-30044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:33:07.553 [DEBUG] [Thread-30044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:33:07.593 [DEBUG] [Thread-30044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:33:07.593 [DEBUG] [Thread-30044] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:33:07.597 [DEBUG] [Thread-30044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:33:07.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:33:07.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:33:07.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:33:07.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:33:07.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:33:07.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:33:07.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:33:07.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:33:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:33:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.022699 -999.00   +8.80   9.65     89   +7.20 1 1 1 3 1     0    0 1.46 -6.10 .NESW 11.0 9.7 81.0 12.6 9.2 -25.5 9.1 -24.3 8.8 -22.1 9.1 -24.2
2026-04-16T02:33:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:33:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:33:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.022699
2026-04-16T02:33:07.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:33:07.640 [DEBUG] [Thread-30044] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:33:07.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:33:07.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:33:07.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:33:07.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:33:07.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:32:34', tmtdew=1.34734, humidity=91.1808, cloud=0.0, wind=13.5158, temperature=8.43138, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:32:41.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 0.8502500000000008, nan, nan, nan, nan, nan, nan, nan, 3.2430000000000003, nan, 2.3025, nan, nan, nan, nan, nan, 1.3774999999999995, 2.8554999999999993, 2.617749999999999, 2.8394999999999984, nan, 0.23425000000000118, 0.0017499999999994742, 0.16449999999999854, 0.2159999999999993, 0.2887500000000003, 0.23550000000000004, 0.1899999999999995, 0.2480000000000011, 0.17450000000000188, -0.032999999999999474, -0.12725000000000009], zp_timestamp='2026-04-16T00:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:33:07.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:33:07.893 [DEBUG] [Thread-30047] [transport.py] [_log()] starting thread (client mode): 0xf13e2740
2026-04-16T02:33:07.893 [DEBUG] [Thread-30047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:33:07.912 [DEBUG] [Thread-30047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:33:07.912 [INFO] [Thread-30047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:33:07.919 [DEBUG] [Thread-30047] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:33:07.919 [DEBUG] [Thread-30047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:33:07.919 [DEBUG] [Thread-30047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:33:07.920 [DEBUG] [Thread-30047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:33:07.920 [DEBUG] [Thread-30047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:33:07.920 [DEBUG] [Thread-30047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:33:07.920 [DEBUG] [Thread-30047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:33:07.920 [DEBUG] [Thread-30047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:33:07.920 [DEBUG] [Thread-30047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:33:07.920 [DEBUG] [Thread-30047] [transport.py] [_log()] client lang: <none>
2026-04-16T02:33:07.920 [DEBUG] [Thread-30047] [transport.py] [_log()] server lang: <none>
2026-04-16T02:33:07.920 [DEBUG] [Thread-30047] [transport.py] [_log()] kex follows: False
2026-04-16T02:33:07.920 [DEBUG] [Thread-30047] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:33:07.920 [DEBUG] [Thread-30047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:33:07.920 [DEBUG] [Thread-30047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:33:07.921 [DEBUG] [Thread-30047] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:33:07.921 [DEBUG] [Thread-30047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:33:07.921 [DEBUG] [Thread-30047] [transport.py] [_log()] Compression: none
2026-04-16T02:33:07.921 [DEBUG] [Thread-30047] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:33:07.979 [DEBUG] [Thread-30047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:33:07.979 [DEBUG] [Thread-30047] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:33:07.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:33:07.980 [DEBUG] [Thread-30047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:33:07.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:33:08.037 [DEBUG] [Thread-30047] [transport.py] [_log()] userauth is OK
2026-04-16T02:33:08.037 [DEBUG] [Thread-30047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:33:08.038 [DEBUG] [Thread-30047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:33:08.038 [DEBUG] [Thread-30047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:33:08.038 [DEBUG] [Thread-30047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:33:08.066 [INFO] [Thread-30047] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:33:08.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:33:08.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:33:08.862 [DEBUG] [Thread-30047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:33:08.862 [DEBUG] [Thread-30047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:33:08.909 [DEBUG] [Thread-30047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:33:08.909 [DEBUG] [Thread-30047] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:33:08.917 [DEBUG] [Thread-30047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:33:08.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:33:08.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')
2026-04-16T02:33:08.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
2026-04-16T02:33:08.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:33:08.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:33:08.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:33:08.949 [DEBUG] [Thread-30047] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:33:09.136 [DEBUG] [Thread-30049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:33:24.179 [DEBUG] [Thread-30050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:33:38.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:33:38.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:33:38.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
2026-04-16T02:33:39.210 [DEBUG] [Thread-30051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:33:40.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 33, 9), 1.62399, 89.5904, 0.0, 10.552, 8.74887, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:33:40.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:33:09
2026-04-16T02:33:40.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:33:41.152 [DEBUG] [Thread-30052] [transport.py] [_log()] starting thread (client mode): 0xee9c0a00
2026-04-16T02:33:41.152 [DEBUG] [Thread-30052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:33:41.172 [DEBUG] [Thread-30052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:33:41.172 [INFO] [Thread-30052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:33:41.175 [DEBUG] [Thread-30052] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:33:41.175 [DEBUG] [Thread-30052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:33:41.175 [DEBUG] [Thread-30052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:33:41.175 [DEBUG] [Thread-30052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:33:41.175 [DEBUG] [Thread-30052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:33:41.176 [DEBUG] [Thread-30052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:33:41.176 [DEBUG] [Thread-30052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:33:41.176 [DEBUG] [Thread-30052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:33:41.176 [DEBUG] [Thread-30052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:33:41.176 [DEBUG] [Thread-30052] [transport.py] [_log()] client lang: <none>
2026-04-16T02:33:41.176 [DEBUG] [Thread-30052] [transport.py] [_log()] server lang: <none>
2026-04-16T02:33:41.176 [DEBUG] [Thread-30052] [transport.py] [_log()] kex follows: False
2026-04-16T02:33:41.176 [DEBUG] [Thread-30052] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:33:41.176 [DEBUG] [Thread-30052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:33:41.176 [DEBUG] [Thread-30052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:33:41.176 [DEBUG] [Thread-30052] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:33:41.176 [DEBUG] [Thread-30052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:33:41.177 [DEBUG] [Thread-30052] [transport.py] [_log()] Compression: none
2026-04-16T02:33:41.177 [DEBUG] [Thread-30052] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:33:41.193 [DEBUG] [Thread-30052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:33:41.194 [DEBUG] [Thread-30052] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:33:41.194 [DEBUG] [Thread-30052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:33:41.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:33:41.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:33:41.195 [DEBUG] [Thread-30052] [transport.py] [_log()] userauth is OK
2026-04-16T02:33:41.195 [DEBUG] [Thread-30052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:33:41.196 [DEBUG] [Thread-30052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:33:41.196 [DEBUG] [Thread-30052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:33:41.196 [DEBUG] [Thread-30052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:33:41.231 [INFO] [Thread-30052] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:33:41.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:33:42.034 [DEBUG] [Thread-30052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:33:42.035 [DEBUG] [Thread-30052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:33:42.035 [DEBUG] [Thread-30052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:33:42.075 [DEBUG] [Thread-30052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:33:42.075 [DEBUG] [Thread-30052] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:33:42.078 [DEBUG] [Thread-30052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:33:42.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:33:42.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:33:42.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:33:42.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:33:42.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:33:42.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:33:42.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:33:42.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:33:42.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:33:42.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.023047 -999.00   +8.80  11.74     89   +7.30 1 1 1 3 1     0    0 1.47 -6.82 .NESW 11.7 11.7 69.0 14.0 9.2 -25.5 9.0 -24.3 8.8 -22.0 9.1 -24.2
2026-04-16T02:33:42.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:33:42.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:33:42.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.023047
2026-04-16T02:33:42.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:33:42.100 [DEBUG] [Thread-30052] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:33:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:33:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:33:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:33:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:33:42.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:33:09', tmtdew=1.62399, humidity=89.5904, cloud=0.0, wind=10.552, temperature=8.74887, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:33:11.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 0.8502500000000008, nan, nan, nan, nan, nan, nan, nan, 3.2430000000000003, nan, 2.3025, nan, nan, nan, nan, nan, 1.3774999999999995, 2.8554999999999993, 2.617749999999999, 2.8394999999999984, nan, 0.23425000000000118, 0.0017499999999994742, 0.16449999999999854, 0.2159999999999993, 0.2887500000000003, 0.23550000000000004, 0.1899999999999995, 0.2480000000000011, 0.17450000000000188, -0.032999999999999474, -0.12725000000000009], zp_timestamp='2026-04-16T00:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:33:42.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:33:42.362 [DEBUG] [Thread-30055] [transport.py] [_log()] starting thread (client mode): 0xee932da0
2026-04-16T02:33:42.362 [DEBUG] [Thread-30055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:33:42.376 [DEBUG] [Thread-30055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:33:42.376 [INFO] [Thread-30055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:33:42.383 [DEBUG] [Thread-30055] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:33:42.383 [DEBUG] [Thread-30055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:33:42.384 [DEBUG] [Thread-30055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:33:42.384 [DEBUG] [Thread-30055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:33:42.384 [DEBUG] [Thread-30055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:33:42.384 [DEBUG] [Thread-30055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:33:42.384 [DEBUG] [Thread-30055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:33:42.384 [DEBUG] [Thread-30055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:33:42.384 [DEBUG] [Thread-30055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:33:42.384 [DEBUG] [Thread-30055] [transport.py] [_log()] client lang: <none>
2026-04-16T02:33:42.384 [DEBUG] [Thread-30055] [transport.py] [_log()] server lang: <none>
2026-04-16T02:33:42.384 [DEBUG] [Thread-30055] [transport.py] [_log()] kex follows: False
2026-04-16T02:33:42.384 [DEBUG] [Thread-30055] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:33:42.384 [DEBUG] [Thread-30055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:33:42.385 [DEBUG] [Thread-30055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:33:42.385 [DEBUG] [Thread-30055] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:33:42.385 [DEBUG] [Thread-30055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:33:42.385 [DEBUG] [Thread-30055] [transport.py] [_log()] Compression: none
2026-04-16T02:33:42.385 [DEBUG] [Thread-30055] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:33:42.445 [DEBUG] [Thread-30055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:33:42.445 [DEBUG] [Thread-30055] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:33:42.446 [DEBUG] [Thread-30055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:33:42.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:33:42.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:33:42.503 [DEBUG] [Thread-30055] [transport.py] [_log()] userauth is OK
2026-04-16T02:33:42.503 [DEBUG] [Thread-30055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:33:42.503 [DEBUG] [Thread-30055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:33:42.503 [DEBUG] [Thread-30055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:33:42.504 [DEBUG] [Thread-30055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:33:42.529 [INFO] [Thread-30055] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:33:42.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:33:42.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:33:43.304 [DEBUG] [Thread-30055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:33:43.304 [DEBUG] [Thread-30055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:33:43.352 [DEBUG] [Thread-30055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:33:43.352 [DEBUG] [Thread-30055] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:33:43.361 [DEBUG] [Thread-30055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:33:43.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:33:43.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')
2026-04-16T02:33:43.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
2026-04-16T02:33:43.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:33:43.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:33:43.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:33:43.396 [DEBUG] [Thread-30055] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:33:52.295 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:33:52.296 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:33:54.241 [DEBUG] [Thread-30057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:34:05.390 [DEBUG] [Thread-30058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:34:09.291 [DEBUG] [Thread-30059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:34:13.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:34:13.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:34:13.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
2026-04-16T02:34:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 33, 45), 1.3533, 91.1476, 0.0, 14.5742, 8.49774, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:34:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:33:45
2026-04-16T02:34:15.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:34:15.532 [DEBUG] [Thread-30060] [transport.py] [_log()] starting thread (client mode): 0xee9927a0
2026-04-16T02:34:15.532 [DEBUG] [Thread-30060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:34:15.551 [DEBUG] [Thread-30060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:34:15.551 [INFO] [Thread-30060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:34:15.555 [DEBUG] [Thread-30060] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:34:15.555 [DEBUG] [Thread-30060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:34:15.555 [DEBUG] [Thread-30060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:34:15.555 [DEBUG] [Thread-30060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:34:15.555 [DEBUG] [Thread-30060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:34:15.555 [DEBUG] [Thread-30060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:34:15.555 [DEBUG] [Thread-30060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:34:15.555 [DEBUG] [Thread-30060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:34:15.556 [DEBUG] [Thread-30060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:34:15.556 [DEBUG] [Thread-30060] [transport.py] [_log()] client lang: <none>
2026-04-16T02:34:15.556 [DEBUG] [Thread-30060] [transport.py] [_log()] server lang: <none>
2026-04-16T02:34:15.556 [DEBUG] [Thread-30060] [transport.py] [_log()] kex follows: False
2026-04-16T02:34:15.556 [DEBUG] [Thread-30060] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:34:15.556 [DEBUG] [Thread-30060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:34:15.556 [DEBUG] [Thread-30060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:34:15.556 [DEBUG] [Thread-30060] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:34:15.556 [DEBUG] [Thread-30060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:34:15.556 [DEBUG] [Thread-30060] [transport.py] [_log()] Compression: none
2026-04-16T02:34:15.557 [DEBUG] [Thread-30060] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:34:15.572 [DEBUG] [Thread-30060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:34:15.572 [DEBUG] [Thread-30060] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:34:15.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:34:15.573 [DEBUG] [Thread-30060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:34:15.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:34:15.574 [DEBUG] [Thread-30060] [transport.py] [_log()] userauth is OK
2026-04-16T02:34:15.574 [DEBUG] [Thread-30060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:34:15.574 [DEBUG] [Thread-30060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:34:15.574 [DEBUG] [Thread-30060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:34:15.574 [DEBUG] [Thread-30060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:34:15.594 [INFO] [Thread-30060] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:34:15.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:34:16.382 [DEBUG] [Thread-30060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:34:16.382 [DEBUG] [Thread-30060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:34:16.382 [DEBUG] [Thread-30060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:34:16.423 [DEBUG] [Thread-30060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:34:16.423 [DEBUG] [Thread-30060] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:34:16.425 [DEBUG] [Thread-30060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:34:16.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:34:16.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:34:16.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:34:16.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:34:16.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:34:16.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:34:16.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:34:16.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:34:16.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:34:16.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.023394 -999.00   +8.80  10.09     89   +7.20 1 1 1 3 1     0    0 1.46 -6.99 .NESW 12.0 10.1 65.0 11.9 9.1 -25.4 9.1 -24.3 8.8 -22.0 9.1 -24.2
2026-04-16T02:34:16.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:34:16.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:34:16.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.023394
2026-04-16T02:34:16.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:34:16.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:34:16.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:34:16.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:34:16.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:34:16.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:33:45', tmtdew=1.3533, humidity=91.1476, cloud=0.0, wind=14.5742, temperature=8.49774, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:33:41.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 0.8502500000000008, nan, nan, nan, nan, nan, nan, nan, 3.2430000000000003, nan, 2.3025, nan, nan, nan, nan, nan, 1.3774999999999995, 2.8554999999999993, 2.617749999999999, 2.8394999999999984, nan, 0.23425000000000118, 0.0017499999999994742, 0.16449999999999854, 0.2159999999999993, 0.2887500000000003, 0.23550000000000004, 0.1899999999999995, 0.2480000000000011, 0.17450000000000188, -0.032999999999999474, -0.12725000000000009], zp_timestamp='2026-04-16T00:29:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:34:16.442 [DEBUG] [Thread-30060] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:34:16.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:34:16.663 [DEBUG] [Thread-30063] [transport.py] [_log()] starting thread (client mode): 0xee993640
2026-04-16T02:34:16.663 [DEBUG] [Thread-30063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:34:16.677 [DEBUG] [Thread-30063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:34:16.677 [INFO] [Thread-30063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:34:16.685 [DEBUG] [Thread-30063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:34:16.685 [DEBUG] [Thread-30063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:34:16.685 [DEBUG] [Thread-30063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:34:16.685 [DEBUG] [Thread-30063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:34:16.685 [DEBUG] [Thread-30063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:34:16.685 [DEBUG] [Thread-30063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:34:16.685 [DEBUG] [Thread-30063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:34:16.685 [DEBUG] [Thread-30063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:34:16.685 [DEBUG] [Thread-30063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:34:16.685 [DEBUG] [Thread-30063] [transport.py] [_log()] client lang: <none>
2026-04-16T02:34:16.686 [DEBUG] [Thread-30063] [transport.py] [_log()] server lang: <none>
2026-04-16T02:34:16.686 [DEBUG] [Thread-30063] [transport.py] [_log()] kex follows: False
2026-04-16T02:34:16.686 [DEBUG] [Thread-30063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:34:16.686 [DEBUG] [Thread-30063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:34:16.686 [DEBUG] [Thread-30063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:34:16.686 [DEBUG] [Thread-30063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:34:16.686 [DEBUG] [Thread-30063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:34:16.686 [DEBUG] [Thread-30063] [transport.py] [_log()] Compression: none
2026-04-16T02:34:16.686 [DEBUG] [Thread-30063] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:34:16.744 [DEBUG] [Thread-30063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:34:16.744 [DEBUG] [Thread-30063] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:34:16.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:34:16.745 [DEBUG] [Thread-30063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:34:16.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:34:16.801 [DEBUG] [Thread-30063] [transport.py] [_log()] userauth is OK
2026-04-16T02:34:16.801 [DEBUG] [Thread-30063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:34:16.801 [DEBUG] [Thread-30063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:34:16.801 [DEBUG] [Thread-30063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:34:16.801 [DEBUG] [Thread-30063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:34:16.826 [INFO] [Thread-30063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:34:16.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:34:16.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:34:17.652 [DEBUG] [Thread-30063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:34:17.653 [DEBUG] [Thread-30063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:34:17.700 [DEBUG] [Thread-30063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:34:17.700 [DEBUG] [Thread-30063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:34:17.709 [DEBUG] [Thread-30063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:34:17.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:34: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')
2026-04-16T02:34:17.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') -> 00000000
2026-04-16T02:34:17.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:34:17.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:34:17.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:34:17.744 [DEBUG] [Thread-30063] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:34:24.322 [DEBUG] [Thread-30065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:34:39.366 [DEBUG] [Thread-30066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:34:47.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:34:47.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:34:47.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
2026-04-16T02:34:49.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 34, 20), 1.61889, 89.6233, 0.0, 10.6578, 8.7653, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:34:49.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:34:20
2026-04-16T02:34:49.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:34:49.913 [DEBUG] [Thread-30067] [transport.py] [_log()] starting thread (client mode): 0xee9908e0
2026-04-16T02:34:49.914 [DEBUG] [Thread-30067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:34:49.934 [DEBUG] [Thread-30067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:34:49.934 [INFO] [Thread-30067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:34:49.937 [DEBUG] [Thread-30067] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:34:49.937 [DEBUG] [Thread-30067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:34:49.937 [DEBUG] [Thread-30067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:34:49.937 [DEBUG] [Thread-30067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:34:49.938 [DEBUG] [Thread-30067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:34:49.938 [DEBUG] [Thread-30067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:34:49.938 [DEBUG] [Thread-30067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:34:49.938 [DEBUG] [Thread-30067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:34:49.938 [DEBUG] [Thread-30067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:34:49.938 [DEBUG] [Thread-30067] [transport.py] [_log()] client lang: <none>
2026-04-16T02:34:49.938 [DEBUG] [Thread-30067] [transport.py] [_log()] server lang: <none>
2026-04-16T02:34:49.938 [DEBUG] [Thread-30067] [transport.py] [_log()] kex follows: False
2026-04-16T02:34:49.938 [DEBUG] [Thread-30067] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:34:49.938 [DEBUG] [Thread-30067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:34:49.939 [DEBUG] [Thread-30067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:34:49.939 [DEBUG] [Thread-30067] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:34:49.939 [DEBUG] [Thread-30067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:34:49.939 [DEBUG] [Thread-30067] [transport.py] [_log()] Compression: none
2026-04-16T02:34:49.939 [DEBUG] [Thread-30067] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:34:49.959 [DEBUG] [Thread-30067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:34:49.959 [DEBUG] [Thread-30067] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:34:49.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:34:49.960 [DEBUG] [Thread-30067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:34:49.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:34:49.961 [DEBUG] [Thread-30067] [transport.py] [_log()] userauth is OK
2026-04-16T02:34:49.961 [DEBUG] [Thread-30067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:34:49.961 [DEBUG] [Thread-30067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:34:49.961 [DEBUG] [Thread-30067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:34:49.961 [DEBUG] [Thread-30067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:34:49.984 [INFO] [Thread-30067] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:34:49.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:34:50.777 [DEBUG] [Thread-30067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:34:50.777 [DEBUG] [Thread-30067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:34:50.778 [DEBUG] [Thread-30067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:34:50.818 [DEBUG] [Thread-30067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:34:50.818 [DEBUG] [Thread-30067] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:34:50.821 [DEBUG] [Thread-30067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:34:50.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:34:50.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:34:50.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:34:50.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:34:50.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:34:50.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:34:50.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:34:50.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:34:50.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:34:50.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.023741 -999.00   +8.80   9.95     89   +7.30 1 1 1 3 1     0    0 1.45 -7.16 .NESW 11.3 9.9 84.2 13.3 9.2 -25.5 9.1 -24.2 8.8 -22.0 9.1 -24.3
2026-04-16T02:34:50.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:34:50.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:34:50.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.023741
2026-04-16T02:34:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:34:50.844 [DEBUG] [Thread-30067] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:34:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:34:50.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:34:50.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:34:50.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:34:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:34:20', tmtdew=1.61889, humidity=89.6233, cloud=0.0, wind=10.6578, temperature=8.7653, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:34:11.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 0.8502500000000008, nan, nan, nan, nan, nan, nan, nan, 3.2430000000000003, nan, 2.3025, nan, nan, nan, nan, nan, 1.3774999999999995, 2.8554999999999993, 2.617749999999999, 2.8394999999999984, nan, 0.23425000000000118, 0.0017499999999994742, 0.16449999999999854, 0.2159999999999993, 0.2887500000000003, 0.23550000000000004, 0.1899999999999995, 0.2480000000000011, 0.17450000000000188, -0.032999999999999474, -0.12725000000000009], zp_timestamp='2026-04-16T00:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:34:51.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:34:51.101 [DEBUG] [Thread-30070] [transport.py] [_log()] starting thread (client mode): 0xee9c2110
2026-04-16T02:34:51.102 [DEBUG] [Thread-30070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:34:51.115 [DEBUG] [Thread-30070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:34:51.115 [INFO] [Thread-30070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:34:51.123 [DEBUG] [Thread-30070] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:34:51.123 [DEBUG] [Thread-30070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:34:51.123 [DEBUG] [Thread-30070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:34:51.123 [DEBUG] [Thread-30070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:34:51.123 [DEBUG] [Thread-30070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:34:51.123 [DEBUG] [Thread-30070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:34:51.123 [DEBUG] [Thread-30070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:34:51.123 [DEBUG] [Thread-30070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:34:51.123 [DEBUG] [Thread-30070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:34:51.123 [DEBUG] [Thread-30070] [transport.py] [_log()] client lang: <none>
2026-04-16T02:34:51.123 [DEBUG] [Thread-30070] [transport.py] [_log()] server lang: <none>
2026-04-16T02:34:51.124 [DEBUG] [Thread-30070] [transport.py] [_log()] kex follows: False
2026-04-16T02:34:51.124 [DEBUG] [Thread-30070] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:34:51.124 [DEBUG] [Thread-30070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:34:51.124 [DEBUG] [Thread-30070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:34:51.124 [DEBUG] [Thread-30070] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:34:51.124 [DEBUG] [Thread-30070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:34:51.124 [DEBUG] [Thread-30070] [transport.py] [_log()] Compression: none
2026-04-16T02:34:51.124 [DEBUG] [Thread-30070] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:34:51.181 [DEBUG] [Thread-30070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:34:51.182 [DEBUG] [Thread-30070] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:34:51.182 [DEBUG] [Thread-30070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:34:51.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:34:51.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:34:51.238 [DEBUG] [Thread-30070] [transport.py] [_log()] userauth is OK
2026-04-16T02:34:51.238 [DEBUG] [Thread-30070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:34:51.238 [DEBUG] [Thread-30070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:34:51.239 [DEBUG] [Thread-30070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:34:51.239 [DEBUG] [Thread-30070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:34:51.262 [INFO] [Thread-30070] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:34:51.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:34:51.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:34:52.063 [DEBUG] [Thread-30070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:34:52.063 [DEBUG] [Thread-30070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:34:52.110 [DEBUG] [Thread-30070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:34:52.111 [DEBUG] [Thread-30070] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:34:52.119 [DEBUG] [Thread-30070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:34:52.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:34:52.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')
2026-04-16T02:34:52.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
2026-04-16T02:34:52.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:34:52.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:34:52.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:34:52.151 [DEBUG] [Thread-30070] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:34:52.500 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:34:52.501 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:34:54.395 [DEBUG] [Thread-30072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:35:05.554 [DEBUG] [Thread-30073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:35:09.440 [DEBUG] [Thread-30074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:35:22.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:35:22.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:35:22.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
2026-04-16T02:35:23.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 34, 56), 1.56876, 89.6231, 0.0, 10.6578, 8.69858, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:35:23.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:34:56
2026-04-16T02:35:23.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:35:24.283 [DEBUG] [Thread-30075] [transport.py] [_log()] starting thread (client mode): 0xee9055d0
2026-04-16T02:35:24.284 [DEBUG] [Thread-30075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:35:24.302 [DEBUG] [Thread-30075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:35:24.303 [INFO] [Thread-30075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:35:24.304 [DEBUG] [Thread-30075] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:35:24.304 [DEBUG] [Thread-30075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:35:24.304 [DEBUG] [Thread-30075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:35:24.304 [DEBUG] [Thread-30075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:35:24.305 [DEBUG] [Thread-30075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:35:24.305 [DEBUG] [Thread-30075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:35:24.305 [DEBUG] [Thread-30075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:35:24.305 [DEBUG] [Thread-30075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:35:24.305 [DEBUG] [Thread-30075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:35:24.305 [DEBUG] [Thread-30075] [transport.py] [_log()] client lang: <none>
2026-04-16T02:35:24.305 [DEBUG] [Thread-30075] [transport.py] [_log()] server lang: <none>
2026-04-16T02:35:24.305 [DEBUG] [Thread-30075] [transport.py] [_log()] kex follows: False
2026-04-16T02:35:24.305 [DEBUG] [Thread-30075] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:35:24.305 [DEBUG] [Thread-30075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:35:24.305 [DEBUG] [Thread-30075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:35:24.305 [DEBUG] [Thread-30075] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:35:24.306 [DEBUG] [Thread-30075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:35:24.306 [DEBUG] [Thread-30075] [transport.py] [_log()] Compression: none
2026-04-16T02:35:24.306 [DEBUG] [Thread-30075] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:35:24.318 [DEBUG] [Thread-30075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:35:24.318 [DEBUG] [Thread-30075] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:35:24.319 [DEBUG] [Thread-30075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:35:24.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:35:24.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:35:24.320 [DEBUG] [Thread-30075] [transport.py] [_log()] userauth is OK
2026-04-16T02:35:24.320 [DEBUG] [Thread-30075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:35:24.320 [DEBUG] [Thread-30075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:35:24.320 [DEBUG] [Thread-30075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:35:24.320 [DEBUG] [Thread-30075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:35:24.337 [INFO] [Thread-30075] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:35:24.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:35:24.471 [DEBUG] [Thread-30077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:35:24.967 [DEBUG] [Thread-30075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:35:24.967 [DEBUG] [Thread-30075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:35:24.968 [DEBUG] [Thread-30075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:35:25.007 [DEBUG] [Thread-30075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:35:25.008 [DEBUG] [Thread-30075] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:35:25.010 [DEBUG] [Thread-30075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:35:25.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:35:25.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:35:25.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:35:25.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:35:25.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:35:25.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:35:25.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:35:25.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:35:25.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:35:25.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.024088 -999.00   +8.80  11.55     89   +7.20 1 1 1 3 1     0    0 1.44 -7.39 .NESW 9.3 11.6 67.2 13.4 9.2 -25.2 9.0 -24.3 8.8 -22.0 9.0 -24.2
2026-04-16T02:35:25.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:35:25.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:35:25.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.024088
2026-04-16T02:35:25.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:35:25.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:35:25.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:35:25.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:35:25.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:35:25.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:34:56', tmtdew=1.56876, humidity=89.6231, cloud=0.0, wind=10.6578, temperature=8.69858, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:34:41.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 0.8502500000000008, nan, nan, nan, nan, nan, nan, nan, 3.2430000000000003, nan, 2.3025, nan, nan, nan, nan, nan, 1.3774999999999995, 2.8554999999999993, 2.617749999999999, 2.8394999999999984, nan, 0.23425000000000118, 0.0017499999999994742, 0.16449999999999854, 0.2159999999999993, 0.2887500000000003, 0.23550000000000004, 0.1899999999999995, 0.2480000000000011, 0.17450000000000188, -0.032999999999999474, -0.12725000000000009], zp_timestamp='2026-04-16T00:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:35:25.030 [DEBUG] [Thread-30075] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:35:25.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:35:25.242 [DEBUG] [Thread-30079] [transport.py] [_log()] starting thread (client mode): 0xee9331c0
2026-04-16T02:35:25.242 [DEBUG] [Thread-30079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:35:25.259 [DEBUG] [Thread-30079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:35:25.260 [INFO] [Thread-30079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:35:25.267 [DEBUG] [Thread-30079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:35:25.267 [DEBUG] [Thread-30079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:35:25.267 [DEBUG] [Thread-30079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:35:25.267 [DEBUG] [Thread-30079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:35:25.267 [DEBUG] [Thread-30079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:35:25.267 [DEBUG] [Thread-30079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:35:25.267 [DEBUG] [Thread-30079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:35:25.267 [DEBUG] [Thread-30079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:35:25.268 [DEBUG] [Thread-30079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:35:25.268 [DEBUG] [Thread-30079] [transport.py] [_log()] client lang: <none>
2026-04-16T02:35:25.268 [DEBUG] [Thread-30079] [transport.py] [_log()] server lang: <none>
2026-04-16T02:35:25.268 [DEBUG] [Thread-30079] [transport.py] [_log()] kex follows: False
2026-04-16T02:35:25.268 [DEBUG] [Thread-30079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:35:25.268 [DEBUG] [Thread-30079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:35:25.268 [DEBUG] [Thread-30079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:35:25.268 [DEBUG] [Thread-30079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:35:25.268 [DEBUG] [Thread-30079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:35:25.268 [DEBUG] [Thread-30079] [transport.py] [_log()] Compression: none
2026-04-16T02:35:25.268 [DEBUG] [Thread-30079] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:35:25.322 [DEBUG] [Thread-30079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:35:25.323 [DEBUG] [Thread-30079] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:35:25.323 [DEBUG] [Thread-30079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:35:25.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:35:25.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:35:25.380 [DEBUG] [Thread-30079] [transport.py] [_log()] userauth is OK
2026-04-16T02:35:25.380 [DEBUG] [Thread-30079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:35:25.380 [DEBUG] [Thread-30079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:35:25.380 [DEBUG] [Thread-30079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:35:25.380 [DEBUG] [Thread-30079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:35:25.407 [INFO] [Thread-30079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:35:25.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:35:25.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:35:26.250 [DEBUG] [Thread-30079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:35:26.250 [DEBUG] [Thread-30079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:35:26.297 [DEBUG] [Thread-30079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:35:26.297 [DEBUG] [Thread-30079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:35:26.306 [DEBUG] [Thread-30079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:35:26.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:35:26.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')
2026-04-16T02:35:26.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
2026-04-16T02:35:26.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:35:26.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:35:26.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:35:26.337 [DEBUG] [Thread-30079] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:35:39.500 [DEBUG] [Thread-30081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:35:52.702 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:35:52.703 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:35:54.543 [DEBUG] [Thread-30082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:35:56.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:35:56.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:35:56.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T02:35:57.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 35, 32), 1.57606, 89.5734, 0.0, 10.7636, 8.63221, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:35:57.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:35:32
2026-04-16T02:35:58.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:35:58.503 [DEBUG] [Thread-30083] [transport.py] [_log()] starting thread (client mode): 0xf13ca110
2026-04-16T02:35:58.503 [DEBUG] [Thread-30083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:35:58.522 [DEBUG] [Thread-30083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:35:58.523 [INFO] [Thread-30083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:35:58.526 [DEBUG] [Thread-30083] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:35:58.526 [DEBUG] [Thread-30083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:35:58.526 [DEBUG] [Thread-30083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:35:58.526 [DEBUG] [Thread-30083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:35:58.526 [DEBUG] [Thread-30083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:35:58.526 [DEBUG] [Thread-30083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:35:58.526 [DEBUG] [Thread-30083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:35:58.526 [DEBUG] [Thread-30083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:35:58.526 [DEBUG] [Thread-30083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:35:58.526 [DEBUG] [Thread-30083] [transport.py] [_log()] client lang: <none>
2026-04-16T02:35:58.527 [DEBUG] [Thread-30083] [transport.py] [_log()] server lang: <none>
2026-04-16T02:35:58.527 [DEBUG] [Thread-30083] [transport.py] [_log()] kex follows: False
2026-04-16T02:35:58.527 [DEBUG] [Thread-30083] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:35:58.527 [DEBUG] [Thread-30083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:35:58.527 [DEBUG] [Thread-30083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:35:58.527 [DEBUG] [Thread-30083] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:35:58.527 [DEBUG] [Thread-30083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:35:58.527 [DEBUG] [Thread-30083] [transport.py] [_log()] Compression: none
2026-04-16T02:35:58.527 [DEBUG] [Thread-30083] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:35:58.544 [DEBUG] [Thread-30083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:35:58.545 [DEBUG] [Thread-30083] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:35:58.545 [DEBUG] [Thread-30083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:35:58.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:35:58.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:35:58.546 [DEBUG] [Thread-30083] [transport.py] [_log()] userauth is OK
2026-04-16T02:35:58.546 [DEBUG] [Thread-30083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:35:58.546 [DEBUG] [Thread-30083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:35:58.546 [DEBUG] [Thread-30083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:35:58.547 [DEBUG] [Thread-30083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:35:58.580 [INFO] [Thread-30083] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:35:58.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:35:59.217 [DEBUG] [Thread-30083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:35:59.217 [DEBUG] [Thread-30083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:35:59.218 [DEBUG] [Thread-30083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:35:59.258 [DEBUG] [Thread-30083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:35:59.258 [DEBUG] [Thread-30083] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:35:59.261 [DEBUG] [Thread-30083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:35:59.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:35:59.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:35:59.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:35:59.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:35:59.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:35:59.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:35:59.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:35:59.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:35:59.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:35:59.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.024783 -999.00   +8.80   8.90     90   +7.30 1 1 1 3 1     0    0 1.42 -8.08 .NESW 10.7 8.9 103.7 12.3 9.2 -25.6 9.0 -24.2 8.8 -22.1 9.1 -24.1
2026-04-16T02:35:59.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:35:59.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:35:59.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.024783
2026-04-16T02:35:59.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:35:59.287 [DEBUG] [Thread-30083] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:35:59.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:35:59.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:35:59.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:35:59.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:35:59.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:35:32', tmtdew=1.57606, humidity=89.5734, cloud=0.0, wind=10.7636, temperature=8.63221, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:35:41.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 0.8502500000000008, nan, nan, nan, nan, nan, nan, nan, 3.2430000000000003, nan, 2.3025, nan, nan, nan, nan, nan, 1.3774999999999995, 2.8554999999999993, 2.617749999999999, 2.8394999999999984, nan, 0.23425000000000118, 0.0017499999999994742, 0.16449999999999854, 0.2159999999999993, 0.2887500000000003, 0.23550000000000004, 0.1899999999999995, 0.2480000000000011, 0.17450000000000188, -0.032999999999999474, -0.12725000000000009], zp_timestamp='2026-04-16T00:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:35:59.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:35:59.541 [DEBUG] [Thread-30086] [transport.py] [_log()] starting thread (client mode): 0xf13cb4f0
2026-04-16T02:35:59.541 [DEBUG] [Thread-30086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:35:59.555 [DEBUG] [Thread-30086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:35:59.556 [INFO] [Thread-30086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:35:59.563 [DEBUG] [Thread-30086] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:35:59.563 [DEBUG] [Thread-30086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:35:59.563 [DEBUG] [Thread-30086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:35:59.563 [DEBUG] [Thread-30086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:35:59.563 [DEBUG] [Thread-30086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:35:59.563 [DEBUG] [Thread-30086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:35:59.563 [DEBUG] [Thread-30086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:35:59.563 [DEBUG] [Thread-30086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:35:59.563 [DEBUG] [Thread-30086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:35:59.564 [DEBUG] [Thread-30086] [transport.py] [_log()] client lang: <none>
2026-04-16T02:35:59.564 [DEBUG] [Thread-30086] [transport.py] [_log()] server lang: <none>
2026-04-16T02:35:59.564 [DEBUG] [Thread-30086] [transport.py] [_log()] kex follows: False
2026-04-16T02:35:59.564 [DEBUG] [Thread-30086] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:35:59.564 [DEBUG] [Thread-30086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:35:59.564 [DEBUG] [Thread-30086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:35:59.564 [DEBUG] [Thread-30086] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:35:59.564 [DEBUG] [Thread-30086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:35:59.564 [DEBUG] [Thread-30086] [transport.py] [_log()] Compression: none
2026-04-16T02:35:59.564 [DEBUG] [Thread-30086] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:35:59.620 [DEBUG] [Thread-30086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:35:59.620 [DEBUG] [Thread-30086] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:35:59.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:35:59.621 [DEBUG] [Thread-30086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:35:59.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:35:59.677 [DEBUG] [Thread-30086] [transport.py] [_log()] userauth is OK
2026-04-16T02:35:59.677 [DEBUG] [Thread-30086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:35:59.677 [DEBUG] [Thread-30086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:35:59.677 [DEBUG] [Thread-30086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:35:59.677 [DEBUG] [Thread-30086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:35:59.702 [INFO] [Thread-30086] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:35:59.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:35:59.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:36:00.532 [DEBUG] [Thread-30086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:36:00.532 [DEBUG] [Thread-30086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:36:00.580 [DEBUG] [Thread-30086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:36:00.580 [DEBUG] [Thread-30086] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:36:00.588 [DEBUG] [Thread-30086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:36:00.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:36:00.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')
2026-04-16T02:36:00.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') -> 00000000
2026-04-16T02:36:00.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:36:00.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:36:00.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:36:00.621 [DEBUG] [Thread-30086] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:36:05.703 [DEBUG] [Thread-30088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:36:09.573 [DEBUG] [Thread-30089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:36:24.620 [DEBUG] [Thread-30090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:36:30.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:36:30.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:36:30.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
2026-04-16T02:36:31.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 36, 7), 1.5658, 89.6396, 0.0, 10.1992, 8.66529, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:36:31.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:36:07
2026-04-16T02:36:32.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:36:32.771 [DEBUG] [Thread-30091] [transport.py] [_log()] starting thread (client mode): 0xee906080
2026-04-16T02:36:32.771 [DEBUG] [Thread-30091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:36:32.791 [DEBUG] [Thread-30091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:36:32.791 [INFO] [Thread-30091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:36:32.795 [DEBUG] [Thread-30091] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:36:32.795 [DEBUG] [Thread-30091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:36:32.795 [DEBUG] [Thread-30091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:36:32.795 [DEBUG] [Thread-30091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:36:32.795 [DEBUG] [Thread-30091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:36:32.795 [DEBUG] [Thread-30091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:36:32.795 [DEBUG] [Thread-30091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:36:32.795 [DEBUG] [Thread-30091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:36:32.795 [DEBUG] [Thread-30091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:36:32.795 [DEBUG] [Thread-30091] [transport.py] [_log()] client lang: <none>
2026-04-16T02:36:32.796 [DEBUG] [Thread-30091] [transport.py] [_log()] server lang: <none>
2026-04-16T02:36:32.796 [DEBUG] [Thread-30091] [transport.py] [_log()] kex follows: False
2026-04-16T02:36:32.796 [DEBUG] [Thread-30091] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:36:32.796 [DEBUG] [Thread-30091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:36:32.796 [DEBUG] [Thread-30091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:36:32.796 [DEBUG] [Thread-30091] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:36:32.796 [DEBUG] [Thread-30091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:36:32.796 [DEBUG] [Thread-30091] [transport.py] [_log()] Compression: none
2026-04-16T02:36:32.797 [DEBUG] [Thread-30091] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:36:32.813 [DEBUG] [Thread-30091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:36:32.814 [DEBUG] [Thread-30091] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:36:32.814 [DEBUG] [Thread-30091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:36:32.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:36:32.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:36:32.815 [DEBUG] [Thread-30091] [transport.py] [_log()] userauth is OK
2026-04-16T02:36:32.816 [DEBUG] [Thread-30091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:36:32.816 [DEBUG] [Thread-30091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:36:32.816 [DEBUG] [Thread-30091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:36:32.816 [DEBUG] [Thread-30091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:36:32.840 [INFO] [Thread-30091] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:36:32.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:36:33.454 [DEBUG] [Thread-30091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:36:33.454 [DEBUG] [Thread-30091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:36:33.454 [DEBUG] [Thread-30091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:36:33.495 [DEBUG] [Thread-30091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:36:33.495 [DEBUG] [Thread-30091] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:36:33.498 [DEBUG] [Thread-30091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:36:33.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:36:33.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:36:33.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:36:33.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:36:33.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:36:33.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:36:33.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:36:33.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:36:33.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:36:33.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.025130 -999.00   +8.80  10.64     89   +7.20 1 1 1 3 1     0    0 1.40 -8.27 .NESW 11.6 10.6 64.8 12.9 9.1 -25.5 9.0 -24.2 8.8 -22.1 9.1 -24.1
2026-04-16T02:36:33.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:36:33.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:36:33.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.025130
2026-04-16T02:36:33.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:36:33.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:36:33.524 [DEBUG] [Thread-30091] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:36:33.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:36:33.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:36:33.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:36:33.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:36:07', tmtdew=1.5658, humidity=89.6396, cloud=0.0, wind=10.1992, temperature=8.66529, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:36:11.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 0.8502500000000008, nan, nan, nan, nan, nan, nan, nan, 3.2430000000000003, nan, 2.3025, nan, nan, nan, nan, nan, 1.3774999999999995, 2.8554999999999993, 2.617749999999999, 2.8394999999999984, nan, 0.23425000000000118, 0.0017499999999994742, 0.16449999999999854, 0.2159999999999993, 0.2887500000000003, 0.23550000000000004, 0.1899999999999995, 0.2480000000000011, 0.17450000000000188, -0.032999999999999474, -0.12725000000000009], zp_timestamp='2026-04-16T00:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:36:33.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:36:33.781 [DEBUG] [Thread-30094] [transport.py] [_log()] starting thread (client mode): 0xee9eb400
2026-04-16T02:36:33.781 [DEBUG] [Thread-30094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:36:33.795 [DEBUG] [Thread-30094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:36:33.795 [INFO] [Thread-30094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:36:33.802 [DEBUG] [Thread-30094] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:36:33.802 [DEBUG] [Thread-30094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:36:33.802 [DEBUG] [Thread-30094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:36:33.802 [DEBUG] [Thread-30094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:36:33.802 [DEBUG] [Thread-30094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:36:33.803 [DEBUG] [Thread-30094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:36:33.803 [DEBUG] [Thread-30094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:36:33.803 [DEBUG] [Thread-30094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:36:33.803 [DEBUG] [Thread-30094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:36:33.803 [DEBUG] [Thread-30094] [transport.py] [_log()] client lang: <none>
2026-04-16T02:36:33.803 [DEBUG] [Thread-30094] [transport.py] [_log()] server lang: <none>
2026-04-16T02:36:33.803 [DEBUG] [Thread-30094] [transport.py] [_log()] kex follows: False
2026-04-16T02:36:33.803 [DEBUG] [Thread-30094] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:36:33.803 [DEBUG] [Thread-30094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:36:33.803 [DEBUG] [Thread-30094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:36:33.803 [DEBUG] [Thread-30094] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:36:33.804 [DEBUG] [Thread-30094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:36:33.804 [DEBUG] [Thread-30094] [transport.py] [_log()] Compression: none
2026-04-16T02:36:33.804 [DEBUG] [Thread-30094] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:36:33.863 [DEBUG] [Thread-30094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:36:33.863 [DEBUG] [Thread-30094] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:36:33.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:36:33.864 [DEBUG] [Thread-30094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:36:33.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:36:33.918 [DEBUG] [Thread-30094] [transport.py] [_log()] userauth is OK
2026-04-16T02:36:33.918 [DEBUG] [Thread-30094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:36:33.919 [DEBUG] [Thread-30094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:36:33.919 [DEBUG] [Thread-30094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:36:33.919 [DEBUG] [Thread-30094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:36:33.944 [INFO] [Thread-30094] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:36:33.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:36:33.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:36:34.754 [DEBUG] [Thread-30094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:36:34.754 [DEBUG] [Thread-30094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:36:34.802 [DEBUG] [Thread-30094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:36:34.802 [DEBUG] [Thread-30094] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:36:34.810 [DEBUG] [Thread-30094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:36:34.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:36:34.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')
2026-04-16T02:36:34.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
2026-04-16T02:36:34.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:36:34.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:36:34.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:36:34.843 [DEBUG] [Thread-30094] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:36:39.651 [DEBUG] [Thread-30096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:36:52.906 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:36:52.907 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:36:54.694 [DEBUG] [Thread-30097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:37:04.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:37:04.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:37:04.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
2026-04-16T02:37:05.848 [DEBUG] [Thread-30098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:37:06.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 36, 42), 1.34092, 91.2128, 0.0, 14.4684, 8.29786, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:37:06.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:36:42
2026-04-16T02:37:06.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:37:06.928 [DEBUG] [Thread-30099] [transport.py] [_log()] starting thread (client mode): 0xee9c7640
2026-04-16T02:37:06.928 [DEBUG] [Thread-30099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:37:06.948 [DEBUG] [Thread-30099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:37:06.948 [INFO] [Thread-30099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:37:06.951 [DEBUG] [Thread-30099] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:37:06.952 [DEBUG] [Thread-30099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:37:06.952 [DEBUG] [Thread-30099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:37:06.952 [DEBUG] [Thread-30099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:37:06.952 [DEBUG] [Thread-30099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:37:06.952 [DEBUG] [Thread-30099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:37:06.952 [DEBUG] [Thread-30099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:37:06.952 [DEBUG] [Thread-30099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:37:06.952 [DEBUG] [Thread-30099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:37:06.952 [DEBUG] [Thread-30099] [transport.py] [_log()] client lang: <none>
2026-04-16T02:37:06.952 [DEBUG] [Thread-30099] [transport.py] [_log()] server lang: <none>
2026-04-16T02:37:06.952 [DEBUG] [Thread-30099] [transport.py] [_log()] kex follows: False
2026-04-16T02:37:06.953 [DEBUG] [Thread-30099] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:37:06.953 [DEBUG] [Thread-30099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:37:06.953 [DEBUG] [Thread-30099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:37:06.953 [DEBUG] [Thread-30099] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:37:06.953 [DEBUG] [Thread-30099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:37:06.953 [DEBUG] [Thread-30099] [transport.py] [_log()] Compression: none
2026-04-16T02:37:06.953 [DEBUG] [Thread-30099] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:37:06.972 [DEBUG] [Thread-30099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:37:06.973 [DEBUG] [Thread-30099] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:37:06.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:37:06.973 [DEBUG] [Thread-30099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:37:06.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:37:06.974 [DEBUG] [Thread-30099] [transport.py] [_log()] userauth is OK
2026-04-16T02:37:06.975 [DEBUG] [Thread-30099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:37:06.975 [DEBUG] [Thread-30099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:37:06.975 [DEBUG] [Thread-30099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:37:06.975 [DEBUG] [Thread-30099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:37:06.999 [INFO] [Thread-30099] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:37:07.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:37:07.652 [DEBUG] [Thread-30099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:37:07.653 [DEBUG] [Thread-30099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:37:07.653 [DEBUG] [Thread-30099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:37:07.693 [DEBUG] [Thread-30099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:37:07.693 [DEBUG] [Thread-30099] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:37:07.696 [DEBUG] [Thread-30099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:37:07.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:37:07.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:37:07.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:37:07.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:37:07.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:37:07.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:37:07.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:37:07.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:37:07.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:37:07.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.025477 -999.00   +8.80  10.59     90   +7.20 1 1 1 3 1     0    0 1.39 -8.43 .NESW 10.9 10.6 71.4 12.1 9.1 -25.4 9.1 -24.2 8.8 -22.1 9.1 -24.1
2026-04-16T02:37:07.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:37:07.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:37:07.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.025477
2026-04-16T02:37:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:37:07.721 [DEBUG] [Thread-30099] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:37:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:37:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:37:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:37:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:37:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:36:42', tmtdew=1.34092, humidity=91.2128, cloud=0.0, wind=14.4684, temperature=8.29786, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:36:41.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 0.8502500000000008, nan, nan, nan, nan, nan, nan, nan, 3.2430000000000003, nan, 2.3025, nan, nan, nan, nan, nan, 1.3774999999999995, 2.8554999999999993, 2.617749999999999, 2.8394999999999984, nan, 0.23425000000000118, 0.0017499999999994742, 0.16449999999999854, 0.2159999999999993, 0.2887500000000003, 0.23550000000000004, 0.1899999999999995, 0.2480000000000011, 0.17450000000000188, -0.032999999999999474, -0.12725000000000009], zp_timestamp='2026-04-16T00:32:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:37:07.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:37:07.976 [DEBUG] [Thread-30102] [transport.py] [_log()] starting thread (client mode): 0xee9c76d0
2026-04-16T02:37:07.977 [DEBUG] [Thread-30102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:37:07.991 [DEBUG] [Thread-30102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:37:07.991 [INFO] [Thread-30102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:37:07.998 [DEBUG] [Thread-30102] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:37:07.998 [DEBUG] [Thread-30102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:37:07.998 [DEBUG] [Thread-30102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:37:07.998 [DEBUG] [Thread-30102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:37:07.999 [DEBUG] [Thread-30102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:37:07.999 [DEBUG] [Thread-30102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:37:07.999 [DEBUG] [Thread-30102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:37:07.999 [DEBUG] [Thread-30102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:37:07.999 [DEBUG] [Thread-30102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:37:07.999 [DEBUG] [Thread-30102] [transport.py] [_log()] client lang: <none>
2026-04-16T02:37:07.999 [DEBUG] [Thread-30102] [transport.py] [_log()] server lang: <none>
2026-04-16T02:37:07.999 [DEBUG] [Thread-30102] [transport.py] [_log()] kex follows: False
2026-04-16T02:37:07.999 [DEBUG] [Thread-30102] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:37:07.999 [DEBUG] [Thread-30102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:37:07.999 [DEBUG] [Thread-30102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:37:07.999 [DEBUG] [Thread-30102] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:37:08.000 [DEBUG] [Thread-30102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:37:08.000 [DEBUG] [Thread-30102] [transport.py] [_log()] Compression: none
2026-04-16T02:37:08.000 [DEBUG] [Thread-30102] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:37:08.055 [DEBUG] [Thread-30102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:37:08.055 [DEBUG] [Thread-30102] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:37:08.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:37:08.056 [DEBUG] [Thread-30102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:37:08.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:37:08.111 [DEBUG] [Thread-30102] [transport.py] [_log()] userauth is OK
2026-04-16T02:37:08.111 [DEBUG] [Thread-30102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:37:08.112 [DEBUG] [Thread-30102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:37:08.112 [DEBUG] [Thread-30102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:37:08.112 [DEBUG] [Thread-30102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:37:08.139 [INFO] [Thread-30102] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:37:08.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:37:08.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:37:08.996 [DEBUG] [Thread-30102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:37:08.996 [DEBUG] [Thread-30102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:37:09.044 [DEBUG] [Thread-30102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:37:09.044 [DEBUG] [Thread-30102] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:37:09.053 [DEBUG] [Thread-30102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:37:09.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:37:09.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')
2026-04-16T02:37:09.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') -> 00000000
2026-04-16T02:37:09.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:37:09.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:37:09.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:37:09.085 [DEBUG] [Thread-30102] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:37:09.725 [DEBUG] [Thread-30104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:37:24.769 [DEBUG] [Thread-30105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:37:39.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:37:39.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:37:39.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
2026-04-16T02:37:39.799 [DEBUG] [Thread-30106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:37:40.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 37, 19), 1.56832, 89.6228, 0.0, 10.8518, 8.64862, 1, 1, 0, 2, 0, 0),)
2026-04-16T02:37:40.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:37:19
2026-04-16T02:37:40.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:37:41.314 [DEBUG] [Thread-30107] [transport.py] [_log()] starting thread (client mode): 0xee9c77f0
2026-04-16T02:37:41.314 [DEBUG] [Thread-30107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:37:41.337 [DEBUG] [Thread-30107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:37:41.337 [INFO] [Thread-30107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:37:41.340 [DEBUG] [Thread-30107] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:37:41.341 [DEBUG] [Thread-30107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:37:41.341 [DEBUG] [Thread-30107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:37:41.341 [DEBUG] [Thread-30107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:37:41.341 [DEBUG] [Thread-30107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:37:41.341 [DEBUG] [Thread-30107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:37:41.341 [DEBUG] [Thread-30107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:37:41.341 [DEBUG] [Thread-30107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:37:41.341 [DEBUG] [Thread-30107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:37:41.341 [DEBUG] [Thread-30107] [transport.py] [_log()] client lang: <none>
2026-04-16T02:37:41.341 [DEBUG] [Thread-30107] [transport.py] [_log()] server lang: <none>
2026-04-16T02:37:41.341 [DEBUG] [Thread-30107] [transport.py] [_log()] kex follows: False
2026-04-16T02:37:41.341 [DEBUG] [Thread-30107] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:37:41.342 [DEBUG] [Thread-30107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:37:41.342 [DEBUG] [Thread-30107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:37:41.342 [DEBUG] [Thread-30107] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:37:41.342 [DEBUG] [Thread-30107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:37:41.342 [DEBUG] [Thread-30107] [transport.py] [_log()] Compression: none
2026-04-16T02:37:41.342 [DEBUG] [Thread-30107] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:37:41.359 [DEBUG] [Thread-30107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:37:41.360 [DEBUG] [Thread-30107] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:37:41.360 [DEBUG] [Thread-30107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:37:41.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:37:41.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:37:41.361 [DEBUG] [Thread-30107] [transport.py] [_log()] userauth is OK
2026-04-16T02:37:41.362 [DEBUG] [Thread-30107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:37:41.362 [DEBUG] [Thread-30107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:37:41.362 [DEBUG] [Thread-30107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:37:41.362 [DEBUG] [Thread-30107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:37:41.387 [INFO] [Thread-30107] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:37:41.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:37:42.032 [DEBUG] [Thread-30107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:37:42.032 [DEBUG] [Thread-30107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:37:42.033 [DEBUG] [Thread-30107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:37:42.073 [DEBUG] [Thread-30107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:37:42.073 [DEBUG] [Thread-30107] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:37:42.076 [DEBUG] [Thread-30107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:37:42.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:37:42.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:37:42.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:37:42.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:37:42.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:37:42.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:37:42.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:37:42.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:37:42.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:37:42.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.025824 -999.00   +8.80   9.57     90   +7.20 1 1 1 3 1     0    0 1.39 -8.35 .NESW 10.8 9.6 83.9 13.3 9.1 -25.5 9.0 -24.2 8.8 -22.1 9.1 -24.0
2026-04-16T02:37:42.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:37:42.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:37:42.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.025824
2026-04-16T02:37:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:37:42.101 [DEBUG] [Thread-30107] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:37:42.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:37:42.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:37:42.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:37:42.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:37:42.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:37:19', tmtdew=1.56832, humidity=89.6228, cloud=0.0, wind=10.8518, temperature=8.64862, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:37:11.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.8850000000000007, nan, 2.243499999999999, nan, nan, nan, 2.783999999999999, nan, 1.8674999999999997, 2.536999999999999, 2.5502499999999992, nan, nan, 0.09224999999999994, -0.019249999999999545, 0.2259999999999991, 0.21250000000000036, 0.31125000000000114, 0.2375000000000007, 0.20700000000000074, 0.23900000000000077, 0.12150000000000105, -0.01899999999999835, -0.08425000000000082], zp_timestamp='2026-04-16T00:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:37:42.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:37:42.370 [DEBUG] [Thread-30110] [transport.py] [_log()] starting thread (client mode): 0xee9ea770
2026-04-16T02:37:42.370 [DEBUG] [Thread-30110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:37:42.384 [DEBUG] [Thread-30110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:37:42.384 [INFO] [Thread-30110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:37:42.391 [DEBUG] [Thread-30110] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:37:42.391 [DEBUG] [Thread-30110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:37:42.391 [DEBUG] [Thread-30110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:37:42.391 [DEBUG] [Thread-30110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:37:42.391 [DEBUG] [Thread-30110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:37:42.391 [DEBUG] [Thread-30110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:37:42.391 [DEBUG] [Thread-30110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:37:42.391 [DEBUG] [Thread-30110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:37:42.392 [DEBUG] [Thread-30110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:37:42.392 [DEBUG] [Thread-30110] [transport.py] [_log()] client lang: <none>
2026-04-16T02:37:42.392 [DEBUG] [Thread-30110] [transport.py] [_log()] server lang: <none>
2026-04-16T02:37:42.392 [DEBUG] [Thread-30110] [transport.py] [_log()] kex follows: False
2026-04-16T02:37:42.392 [DEBUG] [Thread-30110] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:37:42.392 [DEBUG] [Thread-30110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:37:42.392 [DEBUG] [Thread-30110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:37:42.392 [DEBUG] [Thread-30110] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:37:42.392 [DEBUG] [Thread-30110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:37:42.392 [DEBUG] [Thread-30110] [transport.py] [_log()] Compression: none
2026-04-16T02:37:42.392 [DEBUG] [Thread-30110] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:37:42.447 [DEBUG] [Thread-30110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:37:42.447 [DEBUG] [Thread-30110] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:37:42.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:37:42.448 [DEBUG] [Thread-30110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:37:42.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:37:42.505 [DEBUG] [Thread-30110] [transport.py] [_log()] userauth is OK
2026-04-16T02:37:42.505 [DEBUG] [Thread-30110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:37:42.505 [DEBUG] [Thread-30110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:37:42.505 [DEBUG] [Thread-30110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:37:42.505 [DEBUG] [Thread-30110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:37:42.528 [INFO] [Thread-30110] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:37:42.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:37:42.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:37:43.325 [DEBUG] [Thread-30110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:37:43.326 [DEBUG] [Thread-30110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:37:43.374 [DEBUG] [Thread-30110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:37:43.374 [DEBUG] [Thread-30110] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:37:43.382 [DEBUG] [Thread-30110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:37:43.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:37:43.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')
2026-04-16T02:37:43.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
2026-04-16T02:37:43.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:37:43.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:37:43.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:37:43.414 [DEBUG] [Thread-30110] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:37:53.111 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:37:53.112 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:37:54.829 [DEBUG] [Thread-30112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:38:05.996 [DEBUG] [Thread-30113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:38:09.875 [DEBUG] [Thread-30114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:38:13.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:38:13.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:38:13.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
2026-04-16T02:38:14.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 37, 55), 1.32602, 91.312, 0.0, 14.8918, 8.39724, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:38:14.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:37:55
2026-04-16T02:38:15.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:38:15.727 [DEBUG] [Thread-30115] [transport.py] [_log()] starting thread (client mode): 0xee9c6fe0
2026-04-16T02:38:15.727 [DEBUG] [Thread-30115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:38:15.748 [DEBUG] [Thread-30115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:38:15.748 [INFO] [Thread-30115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:38:15.751 [DEBUG] [Thread-30115] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:38:15.751 [DEBUG] [Thread-30115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:38:15.751 [DEBUG] [Thread-30115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:38:15.751 [DEBUG] [Thread-30115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:38:15.751 [DEBUG] [Thread-30115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:38:15.751 [DEBUG] [Thread-30115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:38:15.752 [DEBUG] [Thread-30115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:38:15.752 [DEBUG] [Thread-30115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:38:15.752 [DEBUG] [Thread-30115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:38:15.752 [DEBUG] [Thread-30115] [transport.py] [_log()] client lang: <none>
2026-04-16T02:38:15.752 [DEBUG] [Thread-30115] [transport.py] [_log()] server lang: <none>
2026-04-16T02:38:15.752 [DEBUG] [Thread-30115] [transport.py] [_log()] kex follows: False
2026-04-16T02:38:15.752 [DEBUG] [Thread-30115] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:38:15.752 [DEBUG] [Thread-30115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:38:15.752 [DEBUG] [Thread-30115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:38:15.752 [DEBUG] [Thread-30115] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:38:15.753 [DEBUG] [Thread-30115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:38:15.753 [DEBUG] [Thread-30115] [transport.py] [_log()] Compression: none
2026-04-16T02:38:15.753 [DEBUG] [Thread-30115] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:38:15.770 [DEBUG] [Thread-30115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:38:15.770 [DEBUG] [Thread-30115] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:38:15.770 [DEBUG] [Thread-30115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:38:15.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:38:15.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:38:15.772 [DEBUG] [Thread-30115] [transport.py] [_log()] userauth is OK
2026-04-16T02:38:15.772 [DEBUG] [Thread-30115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:38:15.772 [DEBUG] [Thread-30115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:38:15.772 [DEBUG] [Thread-30115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:38:15.772 [DEBUG] [Thread-30115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:38:15.789 [INFO] [Thread-30115] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:38:15.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:38:16.390 [DEBUG] [Thread-30115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:38:16.390 [DEBUG] [Thread-30115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:38:16.390 [DEBUG] [Thread-30115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:38:16.432 [DEBUG] [Thread-30115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:38:16.432 [DEBUG] [Thread-30115] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:38:16.433 [DEBUG] [Thread-30115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:38:16.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:38:16.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:38:16.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:38:16.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:38:16.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:38:16.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:38:16.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:38:16.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:38:16.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:38:16.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.026171 -999.00   +8.80  11.07     90   +7.20 1 1 1 3 1     0    0 1.39 -8.30 .NESW 11.8 11.1 68.8 12.9 9.1 -25.4 9.0 -24.1 8.8 -22.1 9.1 -24.2
2026-04-16T02:38:16.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:38:16.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:38:16.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.026171
2026-04-16T02:38:16.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:38:16.454 [DEBUG] [Thread-30115] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:38:16.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:38:16.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:38:16.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:38:16.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:38:16.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:37:55', tmtdew=1.32602, humidity=91.312, cloud=0.0, wind=14.8918, temperature=8.39724, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:37:41.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.8850000000000007, nan, 2.243499999999999, nan, nan, nan, 2.783999999999999, nan, 1.8674999999999997, 2.536999999999999, 2.5502499999999992, nan, nan, 0.09224999999999994, -0.019249999999999545, 0.2259999999999991, 0.21250000000000036, 0.31125000000000114, 0.2375000000000007, 0.20700000000000074, 0.23900000000000077, 0.12150000000000105, -0.01899999999999835, -0.08425000000000082], zp_timestamp='2026-04-16T00:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:38:16.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:38:16.682 [DEBUG] [Thread-30118] [transport.py] [_log()] starting thread (client mode): 0xee9c7ac0
2026-04-16T02:38:16.682 [DEBUG] [Thread-30118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:38:16.696 [DEBUG] [Thread-30118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:38:16.697 [INFO] [Thread-30118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:38:16.704 [DEBUG] [Thread-30118] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:38:16.704 [DEBUG] [Thread-30118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:38:16.704 [DEBUG] [Thread-30118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:38:16.704 [DEBUG] [Thread-30118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:38:16.704 [DEBUG] [Thread-30118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:38:16.704 [DEBUG] [Thread-30118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:38:16.704 [DEBUG] [Thread-30118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:38:16.704 [DEBUG] [Thread-30118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:38:16.704 [DEBUG] [Thread-30118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:38:16.705 [DEBUG] [Thread-30118] [transport.py] [_log()] client lang: <none>
2026-04-16T02:38:16.705 [DEBUG] [Thread-30118] [transport.py] [_log()] server lang: <none>
2026-04-16T02:38:16.705 [DEBUG] [Thread-30118] [transport.py] [_log()] kex follows: False
2026-04-16T02:38:16.705 [DEBUG] [Thread-30118] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:38:16.705 [DEBUG] [Thread-30118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:38:16.705 [DEBUG] [Thread-30118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:38:16.705 [DEBUG] [Thread-30118] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:38:16.705 [DEBUG] [Thread-30118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:38:16.705 [DEBUG] [Thread-30118] [transport.py] [_log()] Compression: none
2026-04-16T02:38:16.705 [DEBUG] [Thread-30118] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:38:16.760 [DEBUG] [Thread-30118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:38:16.761 [DEBUG] [Thread-30118] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:38:16.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:38:16.761 [DEBUG] [Thread-30118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:38:16.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:38:16.817 [DEBUG] [Thread-30118] [transport.py] [_log()] userauth is OK
2026-04-16T02:38:16.818 [DEBUG] [Thread-30118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:38:16.818 [DEBUG] [Thread-30118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:38:16.818 [DEBUG] [Thread-30118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:38:16.818 [DEBUG] [Thread-30118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:38:16.843 [INFO] [Thread-30118] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:38:16.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:38:16.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:38:17.678 [DEBUG] [Thread-30118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:38:17.679 [DEBUG] [Thread-30118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:38:17.726 [DEBUG] [Thread-30118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:38:17.726 [DEBUG] [Thread-30118] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:38:17.735 [DEBUG] [Thread-30118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:38:17.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:38:17.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')
2026-04-16T02:38:17.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
2026-04-16T02:38:17.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:38:17.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:38:17.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:38:17.769 [DEBUG] [Thread-30118] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:38:24.905 [DEBUG] [Thread-30120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:38:39.954 [DEBUG] [Thread-30121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:38:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:38:47.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:38:47.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
2026-04-16T02:38:49.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 38, 30), 1.56281, 90.1563, 0.0, 12.3343, 8.68221, 1, 2, 0, 2, 0, 0),)
2026-04-16T02:38:49.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:38:30
2026-04-16T02:38:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:38:49.932 [DEBUG] [Thread-30122] [transport.py] [_log()] starting thread (client mode): 0xee904a90
2026-04-16T02:38:49.932 [DEBUG] [Thread-30122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:38:49.951 [DEBUG] [Thread-30122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:38:49.951 [INFO] [Thread-30122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:38:49.954 [DEBUG] [Thread-30122] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:38:49.954 [DEBUG] [Thread-30122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:38:49.954 [DEBUG] [Thread-30122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:38:49.954 [DEBUG] [Thread-30122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:38:49.955 [DEBUG] [Thread-30122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:38:49.955 [DEBUG] [Thread-30122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:38:49.955 [DEBUG] [Thread-30122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:38:49.955 [DEBUG] [Thread-30122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:38:49.955 [DEBUG] [Thread-30122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:38:49.955 [DEBUG] [Thread-30122] [transport.py] [_log()] client lang: <none>
2026-04-16T02:38:49.955 [DEBUG] [Thread-30122] [transport.py] [_log()] server lang: <none>
2026-04-16T02:38:49.955 [DEBUG] [Thread-30122] [transport.py] [_log()] kex follows: False
2026-04-16T02:38:49.955 [DEBUG] [Thread-30122] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:38:49.955 [DEBUG] [Thread-30122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:38:49.955 [DEBUG] [Thread-30122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:38:49.956 [DEBUG] [Thread-30122] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:38:49.956 [DEBUG] [Thread-30122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:38:49.956 [DEBUG] [Thread-30122] [transport.py] [_log()] Compression: none
2026-04-16T02:38:49.956 [DEBUG] [Thread-30122] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:38:49.972 [DEBUG] [Thread-30122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:38:49.973 [DEBUG] [Thread-30122] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:38:49.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:38:49.973 [DEBUG] [Thread-30122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:38:49.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:38:49.974 [DEBUG] [Thread-30122] [transport.py] [_log()] userauth is OK
2026-04-16T02:38:49.974 [DEBUG] [Thread-30122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:38:49.974 [DEBUG] [Thread-30122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:38:49.974 [DEBUG] [Thread-30122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:38:49.975 [DEBUG] [Thread-30122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:38:50.008 [INFO] [Thread-30122] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:38:50.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:38:50.624 [DEBUG] [Thread-30122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:38:50.624 [DEBUG] [Thread-30122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:38:50.625 [DEBUG] [Thread-30122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:38:50.665 [DEBUG] [Thread-30122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:38:50.665 [DEBUG] [Thread-30122] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:38:50.668 [DEBUG] [Thread-30122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:38:50.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:38:50.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:38:50.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:38:50.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:38:50.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:38:50.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:38:50.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:38:50.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:38:50.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:38:50.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.026866 -999.00   +8.80  11.79     90   +7.30 1 1 1 3 1     0    0 1.37 -8.68 .NESW 11.1 11.8 71.3 13.4 9.1 -25.6 9.0 -24.2 8.8 -22.2 9.1 -24.1
2026-04-16T02:38:50.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:38:50.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:38:50.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.026866
2026-04-16T02:38:50.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:38:50.692 [DEBUG] [Thread-30122] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:38:50.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:38:50.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:38:50.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:38:50.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:38:50.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:38:30', tmtdew=1.56281, humidity=90.1563, cloud=0.0, wind=12.3343, temperature=8.68221, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:38:41.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.8850000000000007, nan, 2.243499999999999, nan, nan, nan, 2.783999999999999, nan, 1.8674999999999997, 2.536999999999999, 2.5502499999999992, nan, nan, 0.09224999999999994, -0.019249999999999545, 0.2259999999999991, 0.21250000000000036, 0.31125000000000114, 0.2375000000000007, 0.20700000000000074, 0.23900000000000077, 0.12150000000000105, -0.01899999999999835, -0.08425000000000082], zp_timestamp='2026-04-16T00:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:38:50.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:38:50.951 [DEBUG] [Thread-30125] [transport.py] [_log()] starting thread (client mode): 0xee904a00
2026-04-16T02:38:50.951 [DEBUG] [Thread-30125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:38:50.965 [DEBUG] [Thread-30125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:38:50.966 [INFO] [Thread-30125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:38:50.973 [DEBUG] [Thread-30125] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:38:50.974 [DEBUG] [Thread-30125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:38:50.974 [DEBUG] [Thread-30125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:38:50.974 [DEBUG] [Thread-30125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:38:50.974 [DEBUG] [Thread-30125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:38:50.974 [DEBUG] [Thread-30125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:38:50.974 [DEBUG] [Thread-30125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:38:50.974 [DEBUG] [Thread-30125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:38:50.974 [DEBUG] [Thread-30125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:38:50.974 [DEBUG] [Thread-30125] [transport.py] [_log()] client lang: <none>
2026-04-16T02:38:50.974 [DEBUG] [Thread-30125] [transport.py] [_log()] server lang: <none>
2026-04-16T02:38:50.974 [DEBUG] [Thread-30125] [transport.py] [_log()] kex follows: False
2026-04-16T02:38:50.974 [DEBUG] [Thread-30125] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:38:50.975 [DEBUG] [Thread-30125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:38:50.975 [DEBUG] [Thread-30125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:38:50.975 [DEBUG] [Thread-30125] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:38:50.975 [DEBUG] [Thread-30125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:38:50.975 [DEBUG] [Thread-30125] [transport.py] [_log()] Compression: none
2026-04-16T02:38:50.975 [DEBUG] [Thread-30125] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:38:51.029 [DEBUG] [Thread-30125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:38:51.030 [DEBUG] [Thread-30125] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:38:51.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:38:51.030 [DEBUG] [Thread-30125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:38:51.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:38:51.087 [DEBUG] [Thread-30125] [transport.py] [_log()] userauth is OK
2026-04-16T02:38:51.087 [DEBUG] [Thread-30125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:38:51.087 [DEBUG] [Thread-30125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:38:51.087 [DEBUG] [Thread-30125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:38:51.087 [DEBUG] [Thread-30125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:38:51.123 [INFO] [Thread-30125] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:38:51.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:38:51.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:38:51.951 [DEBUG] [Thread-30125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:38:51.951 [DEBUG] [Thread-30125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:38:51.999 [DEBUG] [Thread-30125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:38:51.999 [DEBUG] [Thread-30125] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:38:52.008 [DEBUG] [Thread-30125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:38:52.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:38:52.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')
2026-04-16T02:38:52.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
2026-04-16T02:38:52.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:38:52.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:38:52.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:38:52.044 [DEBUG] [Thread-30125] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:38:53.317 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:38:53.318 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:38:54.984 [DEBUG] [Thread-30127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:39:06.160 [DEBUG] [Thread-30128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:39:10.021 [DEBUG] [Thread-30129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:39:22.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:39:22.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:39:22.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
2026-04-16T02:39:23.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 39, 6), 1.55502, 90.2061, 0.0, 12.1579, 8.6988, 1, 2, 0, 2, 0, 0),)
2026-04-16T02:39:23.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:39:06
2026-04-16T02:39:23.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:39:24.222 [DEBUG] [Thread-30130] [transport.py] [_log()] starting thread (client mode): 0xee9c6bc0
2026-04-16T02:39:24.223 [DEBUG] [Thread-30130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:39:24.242 [DEBUG] [Thread-30130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:39:24.242 [INFO] [Thread-30130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:39:24.246 [DEBUG] [Thread-30130] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:39:24.246 [DEBUG] [Thread-30130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:39:24.246 [DEBUG] [Thread-30130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:39:24.246 [DEBUG] [Thread-30130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:39:24.246 [DEBUG] [Thread-30130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:39:24.246 [DEBUG] [Thread-30130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:39:24.246 [DEBUG] [Thread-30130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:39:24.246 [DEBUG] [Thread-30130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:39:24.246 [DEBUG] [Thread-30130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:39:24.246 [DEBUG] [Thread-30130] [transport.py] [_log()] client lang: <none>
2026-04-16T02:39:24.246 [DEBUG] [Thread-30130] [transport.py] [_log()] server lang: <none>
2026-04-16T02:39:24.247 [DEBUG] [Thread-30130] [transport.py] [_log()] kex follows: False
2026-04-16T02:39:24.247 [DEBUG] [Thread-30130] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:39:24.247 [DEBUG] [Thread-30130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:39:24.247 [DEBUG] [Thread-30130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:39:24.247 [DEBUG] [Thread-30130] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:39:24.247 [DEBUG] [Thread-30130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:39:24.247 [DEBUG] [Thread-30130] [transport.py] [_log()] Compression: none
2026-04-16T02:39:24.247 [DEBUG] [Thread-30130] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:39:24.263 [DEBUG] [Thread-30130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:39:24.264 [DEBUG] [Thread-30130] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:39:24.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:39:24.264 [DEBUG] [Thread-30130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:39:24.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:39:24.266 [DEBUG] [Thread-30130] [transport.py] [_log()] userauth is OK
2026-04-16T02:39:24.266 [DEBUG] [Thread-30130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:39:24.266 [DEBUG] [Thread-30130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:39:24.266 [DEBUG] [Thread-30130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:39:24.266 [DEBUG] [Thread-30130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:39:24.291 [INFO] [Thread-30130] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:39:24.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:39:24.927 [DEBUG] [Thread-30130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:39:24.927 [DEBUG] [Thread-30130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:39:24.928 [DEBUG] [Thread-30130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:39:24.968 [DEBUG] [Thread-30130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:39:24.968 [DEBUG] [Thread-30130] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:39:24.971 [DEBUG] [Thread-30130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:39:24.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:39:24.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:39:24.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:39:24.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:39:24.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:39:24.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:39:24.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:39:24.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:39:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:39:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.027213 -999.00   +8.80   7.73     90   +7.30 1 1 1 3 1     0    0 1.41 -8.47 .NESW 6.3 7.7 87.1 11.4 9.2 -25.5 9.0 -24.2 8.8 -22.0 9.0 -24.3
2026-04-16T02:39:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:39:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:39:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.027213
2026-04-16T02:39:24.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:39:24.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:39:24.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:39:24.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:39:24.997 [DEBUG] [Thread-30130] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:39:24.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:39:24.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:39:06', tmtdew=1.55502, humidity=90.2061, cloud=0.0, wind=12.1579, temperature=8.6988, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:39:11.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.8850000000000007, nan, 2.243499999999999, nan, nan, nan, 2.783999999999999, nan, 1.8674999999999997, 2.536999999999999, 2.5502499999999992, nan, nan, 0.09224999999999994, -0.019249999999999545, 0.2259999999999991, 0.21250000000000036, 0.31125000000000114, 0.2375000000000007, 0.20700000000000074, 0.23900000000000077, 0.12150000000000105, -0.01899999999999835, -0.08425000000000082], zp_timestamp='2026-04-16T00:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:39:25.052 [DEBUG] [Thread-30133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:39:25.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:39:25.255 [DEBUG] [Thread-30134] [transport.py] [_log()] starting thread (client mode): 0xee9ea350
2026-04-16T02:39:25.255 [DEBUG] [Thread-30134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:39:25.269 [DEBUG] [Thread-30134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:39:25.269 [INFO] [Thread-30134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:39:25.277 [DEBUG] [Thread-30134] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:39:25.277 [DEBUG] [Thread-30134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:39:25.277 [DEBUG] [Thread-30134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:39:25.277 [DEBUG] [Thread-30134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:39:25.277 [DEBUG] [Thread-30134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:39:25.277 [DEBUG] [Thread-30134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:39:25.277 [DEBUG] [Thread-30134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:39:25.277 [DEBUG] [Thread-30134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:39:25.277 [DEBUG] [Thread-30134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:39:25.277 [DEBUG] [Thread-30134] [transport.py] [_log()] client lang: <none>
2026-04-16T02:39:25.277 [DEBUG] [Thread-30134] [transport.py] [_log()] server lang: <none>
2026-04-16T02:39:25.278 [DEBUG] [Thread-30134] [transport.py] [_log()] kex follows: False
2026-04-16T02:39:25.278 [DEBUG] [Thread-30134] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:39:25.278 [DEBUG] [Thread-30134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:39:25.278 [DEBUG] [Thread-30134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:39:25.278 [DEBUG] [Thread-30134] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:39:25.278 [DEBUG] [Thread-30134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:39:25.278 [DEBUG] [Thread-30134] [transport.py] [_log()] Compression: none
2026-04-16T02:39:25.278 [DEBUG] [Thread-30134] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:39:25.339 [DEBUG] [Thread-30134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:39:25.339 [DEBUG] [Thread-30134] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:39:25.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:39:25.340 [DEBUG] [Thread-30134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:39:25.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:39:25.399 [DEBUG] [Thread-30134] [transport.py] [_log()] userauth is OK
2026-04-16T02:39:25.399 [DEBUG] [Thread-30134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:39:25.400 [DEBUG] [Thread-30134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:39:25.400 [DEBUG] [Thread-30134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:39:25.400 [DEBUG] [Thread-30134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:39:25.425 [INFO] [Thread-30134] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:39:25.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:39:25.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:39:26.230 [DEBUG] [Thread-30134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:39:26.230 [DEBUG] [Thread-30134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:39:26.279 [DEBUG] [Thread-30134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:39:26.279 [DEBUG] [Thread-30134] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:39:26.289 [DEBUG] [Thread-30134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:39:26.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:39:26.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')
2026-04-16T02:39:26.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
2026-04-16T02:39:26.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:39:26.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:39:26.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:39:26.325 [DEBUG] [Thread-30134] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:39:40.095 [DEBUG] [Thread-30136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:39:53.524 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:39:53.525 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:39:55.127 [DEBUG] [Thread-30137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:39:56.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:39:56.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:39:56.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
2026-04-16T02:39:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 39, 41), 1.3053, 91.4457, 0.0, 13.6922, 8.46423, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:39:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:39:41
2026-04-16T02:39:58.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:39:58.447 [DEBUG] [Thread-30138] [transport.py] [_log()] starting thread (client mode): 0xf1364520
2026-04-16T02:39:58.448 [DEBUG] [Thread-30138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:39:58.466 [DEBUG] [Thread-30138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:39:58.467 [INFO] [Thread-30138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:39:58.468 [DEBUG] [Thread-30138] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:39:58.468 [DEBUG] [Thread-30138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:39:58.468 [DEBUG] [Thread-30138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:39:58.468 [DEBUG] [Thread-30138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:39:58.469 [DEBUG] [Thread-30138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:39:58.469 [DEBUG] [Thread-30138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:39:58.469 [DEBUG] [Thread-30138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:39:58.469 [DEBUG] [Thread-30138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:39:58.469 [DEBUG] [Thread-30138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:39:58.469 [DEBUG] [Thread-30138] [transport.py] [_log()] client lang: <none>
2026-04-16T02:39:58.469 [DEBUG] [Thread-30138] [transport.py] [_log()] server lang: <none>
2026-04-16T02:39:58.469 [DEBUG] [Thread-30138] [transport.py] [_log()] kex follows: False
2026-04-16T02:39:58.469 [DEBUG] [Thread-30138] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:39:58.469 [DEBUG] [Thread-30138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:39:58.469 [DEBUG] [Thread-30138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:39:58.469 [DEBUG] [Thread-30138] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:39:58.470 [DEBUG] [Thread-30138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:39:58.470 [DEBUG] [Thread-30138] [transport.py] [_log()] Compression: none
2026-04-16T02:39:58.470 [DEBUG] [Thread-30138] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:39:58.487 [DEBUG] [Thread-30138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:39:58.488 [DEBUG] [Thread-30138] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:39:58.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:39:58.488 [DEBUG] [Thread-30138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:39:58.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:39:58.489 [DEBUG] [Thread-30138] [transport.py] [_log()] userauth is OK
2026-04-16T02:39:58.489 [DEBUG] [Thread-30138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:39:58.489 [DEBUG] [Thread-30138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:39:58.490 [DEBUG] [Thread-30138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:39:58.490 [DEBUG] [Thread-30138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:39:58.514 [INFO] [Thread-30138] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:39:58.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:39:59.177 [DEBUG] [Thread-30138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:39:59.178 [DEBUG] [Thread-30138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:39:59.178 [DEBUG] [Thread-30138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:39:59.218 [DEBUG] [Thread-30138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:39:59.218 [DEBUG] [Thread-30138] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:39:59.221 [DEBUG] [Thread-30138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:39:59.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:39:59.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:39:59.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:39:59.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:39:59.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:39:59.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:39:59.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:39:59.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:39:59.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:39:59.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.027560 -999.00   +8.80  11.56     90   +7.30 1 1 1 3 1     0    0 1.35 -9.11 .NESW 8.5 11.6 68.8 13.5 9.2 -25.7 9.0 -24.4 8.7 -22.2 9.1 -24.3
2026-04-16T02:39:59.246 [DEBUG] [Thread-30138] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:39:59.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:39:59.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:39:59.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.027560
2026-04-16T02:39:59.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:39:59.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:39:59.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:39:59.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:39:59.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:39:59.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:39:41', tmtdew=1.3053, humidity=91.4457, cloud=0.0, wind=13.6922, temperature=8.46423, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:39:41.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.8850000000000007, nan, 2.243499999999999, nan, nan, nan, 2.783999999999999, nan, 1.8674999999999997, 2.536999999999999, 2.5502499999999992, nan, nan, 0.09224999999999994, -0.019249999999999545, 0.2259999999999991, 0.21250000000000036, 0.31125000000000114, 0.2375000000000007, 0.20700000000000074, 0.23900000000000077, 0.12150000000000105, -0.01899999999999835, -0.08425000000000082], zp_timestamp='2026-04-16T00:35:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:39:59.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:39:59.499 [DEBUG] [Thread-30141] [transport.py] [_log()] starting thread (client mode): 0xee9ea320
2026-04-16T02:39:59.500 [DEBUG] [Thread-30141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:39:59.514 [DEBUG] [Thread-30141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:39:59.514 [INFO] [Thread-30141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:39:59.521 [DEBUG] [Thread-30141] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:39:59.521 [DEBUG] [Thread-30141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:39:59.521 [DEBUG] [Thread-30141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:39:59.521 [DEBUG] [Thread-30141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:39:59.521 [DEBUG] [Thread-30141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:39:59.521 [DEBUG] [Thread-30141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:39:59.521 [DEBUG] [Thread-30141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:39:59.521 [DEBUG] [Thread-30141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:39:59.521 [DEBUG] [Thread-30141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:39:59.522 [DEBUG] [Thread-30141] [transport.py] [_log()] client lang: <none>
2026-04-16T02:39:59.522 [DEBUG] [Thread-30141] [transport.py] [_log()] server lang: <none>
2026-04-16T02:39:59.522 [DEBUG] [Thread-30141] [transport.py] [_log()] kex follows: False
2026-04-16T02:39:59.522 [DEBUG] [Thread-30141] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:39:59.522 [DEBUG] [Thread-30141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:39:59.522 [DEBUG] [Thread-30141] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:39:59.522 [DEBUG] [Thread-30141] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:39:59.522 [DEBUG] [Thread-30141] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:39:59.522 [DEBUG] [Thread-30141] [transport.py] [_log()] Compression: none
2026-04-16T02:39:59.522 [DEBUG] [Thread-30141] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:39:59.579 [DEBUG] [Thread-30141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:39:59.579 [DEBUG] [Thread-30141] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:39:59.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:39:59.580 [DEBUG] [Thread-30141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:39:59.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:39:59.636 [DEBUG] [Thread-30141] [transport.py] [_log()] userauth is OK
2026-04-16T02:39:59.636 [DEBUG] [Thread-30141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:39:59.637 [DEBUG] [Thread-30141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:39:59.637 [DEBUG] [Thread-30141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:39:59.637 [DEBUG] [Thread-30141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:39:59.654 [INFO] [Thread-30141] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:39:59.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:39:59.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:40:00.461 [DEBUG] [Thread-30141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:40:00.461 [DEBUG] [Thread-30141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:40:00.509 [DEBUG] [Thread-30141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:40:00.509 [DEBUG] [Thread-30141] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:40:00.518 [DEBUG] [Thread-30141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:40:00.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:40:00.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')
2026-04-16T02:40:00.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
2026-04-16T02:40:00.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:40:00.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:40:00.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:40:00.551 [DEBUG] [Thread-30141] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:40:06.314 [DEBUG] [Thread-30143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:40:10.157 [DEBUG] [Thread-30144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:40:25.200 [DEBUG] [Thread-30145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:40:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:40:30.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:40:30.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
2026-04-16T02:40:31.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 40, 17), 1.49735, 90.2561, 0.0, 12.8459, 8.68211, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:40:31.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:40:17
2026-04-16T02:40:32.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:40:32.671 [DEBUG] [Thread-30146] [transport.py] [_log()] starting thread (client mode): 0xf1366c20
2026-04-16T02:40:32.671 [DEBUG] [Thread-30146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:40:32.691 [DEBUG] [Thread-30146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:40:32.691 [INFO] [Thread-30146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:40:32.694 [DEBUG] [Thread-30146] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:40:32.694 [DEBUG] [Thread-30146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:40:32.694 [DEBUG] [Thread-30146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:40:32.694 [DEBUG] [Thread-30146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:40:32.695 [DEBUG] [Thread-30146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:40:32.695 [DEBUG] [Thread-30146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:40:32.695 [DEBUG] [Thread-30146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:40:32.695 [DEBUG] [Thread-30146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:40:32.695 [DEBUG] [Thread-30146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:40:32.695 [DEBUG] [Thread-30146] [transport.py] [_log()] client lang: <none>
2026-04-16T02:40:32.695 [DEBUG] [Thread-30146] [transport.py] [_log()] server lang: <none>
2026-04-16T02:40:32.695 [DEBUG] [Thread-30146] [transport.py] [_log()] kex follows: False
2026-04-16T02:40:32.695 [DEBUG] [Thread-30146] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:40:32.695 [DEBUG] [Thread-30146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:40:32.695 [DEBUG] [Thread-30146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:40:32.696 [DEBUG] [Thread-30146] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:40:32.696 [DEBUG] [Thread-30146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:40:32.696 [DEBUG] [Thread-30146] [transport.py] [_log()] Compression: none
2026-04-16T02:40:32.696 [DEBUG] [Thread-30146] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:40:32.712 [DEBUG] [Thread-30146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:40:32.712 [DEBUG] [Thread-30146] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:40:32.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:40:32.713 [DEBUG] [Thread-30146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:40:32.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:40:32.714 [DEBUG] [Thread-30146] [transport.py] [_log()] userauth is OK
2026-04-16T02:40:32.714 [DEBUG] [Thread-30146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:40:32.714 [DEBUG] [Thread-30146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:40:32.714 [DEBUG] [Thread-30146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:40:32.714 [DEBUG] [Thread-30146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:40:32.727 [INFO] [Thread-30146] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:40:32.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:40:34.489 [DEBUG] [Thread-30146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:40:34.489 [DEBUG] [Thread-30146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:40:34.490 [DEBUG] [Thread-30146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:40:34.530 [DEBUG] [Thread-30146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:40:34.530 [DEBUG] [Thread-30146] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:40:34.533 [DEBUG] [Thread-30146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:40:34.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:40:34.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:40:34.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:40:34.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:40:34.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:40:34.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:40:34.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:40:34.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:40:34.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:40:34.614 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-16T02:40:34.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:40:17', tmtdew=1.49735, humidity=90.2561, cloud=0.0, wind=12.8459, temperature=8.68211, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[nan, 3.5832500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3514999999999997, nan, nan, nan, 2.3089999999999993, nan, 2.2829999999999995, 2.842999999999999, 2.736249999999999, nan, 2.556749999999999, 0.4382500000000009, 0.13674999999999926, 0.333499999999999, 0.3525000000000009, 0.4972500000000002, 0.33950000000000014, 0.30799999999999983, 0.2895000000000003, 0.13500000000000156, -0.022999999999999687, -0.06025000000000169], zp_timestamp='2026-04-16T00:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:40:34.615 [DEBUG] [Thread-30146] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:40:34.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:40:34.875 [DEBUG] [Thread-30149] [transport.py] [_log()] starting thread (client mode): 0xf1364400
2026-04-16T02:40:34.876 [DEBUG] [Thread-30149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:40:34.890 [DEBUG] [Thread-30149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:40:34.890 [INFO] [Thread-30149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:40:34.898 [DEBUG] [Thread-30149] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:40:34.898 [DEBUG] [Thread-30149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:40:34.898 [DEBUG] [Thread-30149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:40:34.898 [DEBUG] [Thread-30149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:40:34.898 [DEBUG] [Thread-30149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:40:34.898 [DEBUG] [Thread-30149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:40:34.898 [DEBUG] [Thread-30149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:40:34.898 [DEBUG] [Thread-30149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:40:34.898 [DEBUG] [Thread-30149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:40:34.898 [DEBUG] [Thread-30149] [transport.py] [_log()] client lang: <none>
2026-04-16T02:40:34.898 [DEBUG] [Thread-30149] [transport.py] [_log()] server lang: <none>
2026-04-16T02:40:34.898 [DEBUG] [Thread-30149] [transport.py] [_log()] kex follows: False
2026-04-16T02:40:34.898 [DEBUG] [Thread-30149] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:40:34.899 [DEBUG] [Thread-30149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:40:34.899 [DEBUG] [Thread-30149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:40:34.899 [DEBUG] [Thread-30149] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:40:34.899 [DEBUG] [Thread-30149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:40:34.899 [DEBUG] [Thread-30149] [transport.py] [_log()] Compression: none
2026-04-16T02:40:34.899 [DEBUG] [Thread-30149] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:40:34.956 [DEBUG] [Thread-30149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:40:34.956 [DEBUG] [Thread-30149] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:40:34.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:40:34.957 [DEBUG] [Thread-30149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:40:34.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:40:35.014 [DEBUG] [Thread-30149] [transport.py] [_log()] userauth is OK
2026-04-16T02:40:35.014 [DEBUG] [Thread-30149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:40:35.014 [DEBUG] [Thread-30149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:40:35.014 [DEBUG] [Thread-30149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:40:35.014 [DEBUG] [Thread-30149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:40:35.031 [INFO] [Thread-30149] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:40:35.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:40:35.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:40:35.838 [DEBUG] [Thread-30149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:40:35.838 [DEBUG] [Thread-30149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:40:35.886 [DEBUG] [Thread-30149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:40:35.886 [DEBUG] [Thread-30149] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:40:35.895 [DEBUG] [Thread-30149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:40:35.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:40:35.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')
2026-04-16T02:40:35.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
2026-04-16T02:40:35.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:40:35.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:40:35.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:40:35.930 [DEBUG] [Thread-30149] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:40:40.230 [DEBUG] [Thread-30151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:40:53.732 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:40:53.733 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:40:55.275 [DEBUG] [Thread-30152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:41:05.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:41:05.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:41:05.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
2026-04-16T02:41:06.469 [DEBUG] [Thread-30153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:41:07.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 40, 52), 1.31469, 91.379, 0.0, 12.8102, 8.33125, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:41:07.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:40:52
2026-04-16T02:41:07.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:41:08.067 [DEBUG] [Thread-30154] [transport.py] [_log()] starting thread (client mode): 0xee9eafb0
2026-04-16T02:41:08.067 [DEBUG] [Thread-30154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:41:08.087 [DEBUG] [Thread-30154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:41:08.088 [INFO] [Thread-30154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:41:08.091 [DEBUG] [Thread-30154] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:41:08.091 [DEBUG] [Thread-30154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:41:08.091 [DEBUG] [Thread-30154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:41:08.091 [DEBUG] [Thread-30154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:41:08.091 [DEBUG] [Thread-30154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:41:08.091 [DEBUG] [Thread-30154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:41:08.091 [DEBUG] [Thread-30154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:41:08.091 [DEBUG] [Thread-30154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:41:08.091 [DEBUG] [Thread-30154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:41:08.091 [DEBUG] [Thread-30154] [transport.py] [_log()] client lang: <none>
2026-04-16T02:41:08.092 [DEBUG] [Thread-30154] [transport.py] [_log()] server lang: <none>
2026-04-16T02:41:08.092 [DEBUG] [Thread-30154] [transport.py] [_log()] kex follows: False
2026-04-16T02:41:08.092 [DEBUG] [Thread-30154] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:41:08.092 [DEBUG] [Thread-30154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:41:08.092 [DEBUG] [Thread-30154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:41:08.092 [DEBUG] [Thread-30154] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:41:08.092 [DEBUG] [Thread-30154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:41:08.092 [DEBUG] [Thread-30154] [transport.py] [_log()] Compression: none
2026-04-16T02:41:08.092 [DEBUG] [Thread-30154] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:41:08.111 [DEBUG] [Thread-30154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:41:08.112 [DEBUG] [Thread-30154] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:41:08.112 [DEBUG] [Thread-30154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:41:08.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:41:08.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:41:08.152 [DEBUG] [Thread-30154] [transport.py] [_log()] userauth is OK
2026-04-16T02:41:08.152 [DEBUG] [Thread-30154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:41:08.153 [DEBUG] [Thread-30154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:41:08.153 [DEBUG] [Thread-30154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:41:08.153 [DEBUG] [Thread-30154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:41:08.189 [INFO] [Thread-30154] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:41:08.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:41:09.003 [DEBUG] [Thread-30154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:41:09.003 [DEBUG] [Thread-30154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:41:09.004 [DEBUG] [Thread-30154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:41:09.044 [DEBUG] [Thread-30154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:41:09.044 [DEBUG] [Thread-30154] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:41:09.047 [DEBUG] [Thread-30154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:41:09.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:41:09.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:41:09.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:41:09.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:41:09.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:41:09.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:41:09.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:41:09.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:41:09.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:41:09.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.027908 -999.00   +8.80  10.86     90   +7.30 1 1 1 3 1     0    0 1.33 -9.99 .NESW 11.4 10.9 71.6 12.4 9.1 -25.6 9.0 -24.3 8.7 -22.2 9.0 -24.3
2026-04-16T02:41:09.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:41:09.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:41:09.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.027908
2026-04-16T02:41:09.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:41:09.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:41:09.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:41:09.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:41:09.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:41:09.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:40:52', tmtdew=1.31469, humidity=91.379, cloud=0.0, wind=12.8102, temperature=8.33125, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:40:11.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 3.5832500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3514999999999997, nan, nan, nan, 2.3089999999999993, nan, 2.2829999999999995, 2.842999999999999, 2.736249999999999, nan, 2.556749999999999, 0.4382500000000009, 0.13674999999999926, 0.333499999999999, 0.3525000000000009, 0.4972500000000002, 0.33950000000000014, 0.30799999999999983, 0.2895000000000003, 0.13500000000000156, -0.022999999999999687, -0.06025000000000169], zp_timestamp='2026-04-16T00:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:41:09.074 [DEBUG] [Thread-30154] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:41:09.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:41:09.327 [DEBUG] [Thread-30157] [transport.py] [_log()] starting thread (client mode): 0xf1367be0
2026-04-16T02:41:09.327 [DEBUG] [Thread-30157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:41:09.341 [DEBUG] [Thread-30157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:41:09.341 [INFO] [Thread-30157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:41:09.349 [DEBUG] [Thread-30157] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:41:09.349 [DEBUG] [Thread-30157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:41:09.349 [DEBUG] [Thread-30157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:41:09.350 [DEBUG] [Thread-30157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:41:09.350 [DEBUG] [Thread-30157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:41:09.350 [DEBUG] [Thread-30157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:41:09.350 [DEBUG] [Thread-30157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:41:09.350 [DEBUG] [Thread-30157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:41:09.350 [DEBUG] [Thread-30157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:41:09.350 [DEBUG] [Thread-30157] [transport.py] [_log()] client lang: <none>
2026-04-16T02:41:09.350 [DEBUG] [Thread-30157] [transport.py] [_log()] server lang: <none>
2026-04-16T02:41:09.350 [DEBUG] [Thread-30157] [transport.py] [_log()] kex follows: False
2026-04-16T02:41:09.350 [DEBUG] [Thread-30157] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:41:09.350 [DEBUG] [Thread-30157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:41:09.350 [DEBUG] [Thread-30157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:41:09.351 [DEBUG] [Thread-30157] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:41:09.351 [DEBUG] [Thread-30157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:41:09.351 [DEBUG] [Thread-30157] [transport.py] [_log()] Compression: none
2026-04-16T02:41:09.351 [DEBUG] [Thread-30157] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:41:09.405 [DEBUG] [Thread-30157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:41:09.406 [DEBUG] [Thread-30157] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:41:09.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:41:09.406 [DEBUG] [Thread-30157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:41:09.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:41:09.462 [DEBUG] [Thread-30157] [transport.py] [_log()] userauth is OK
2026-04-16T02:41:09.463 [DEBUG] [Thread-30157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:41:09.463 [DEBUG] [Thread-30157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:41:09.463 [DEBUG] [Thread-30157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:41:09.463 [DEBUG] [Thread-30157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:41:09.490 [INFO] [Thread-30157] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:41:09.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:41:09.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:41:10.307 [DEBUG] [Thread-30159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:41:10.329 [DEBUG] [Thread-30157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:41:10.330 [DEBUG] [Thread-30157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:41:10.378 [DEBUG] [Thread-30157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:41:10.378 [DEBUG] [Thread-30157] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:41:10.387 [DEBUG] [Thread-30157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:41:10.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:41:10.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')
2026-04-16T02:41:10.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
2026-04-16T02:41:10.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:41:10.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:41:10.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:41:10.421 [DEBUG] [Thread-30157] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:41:25.355 [DEBUG] [Thread-30160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:41:40.386 [DEBUG] [Thread-30161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:41:40.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:41:40.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:41:40.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
2026-04-16T02:41:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 41, 28), 1.49694, 90.2557, 0.0, 12.4049, 8.63211, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:41:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:41:28
2026-04-16T02:41:42.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:41:42.555 [DEBUG] [Thread-30162] [transport.py] [_log()] starting thread (client mode): 0xf1336710
2026-04-16T02:41:42.555 [DEBUG] [Thread-30162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:41:42.571 [DEBUG] [Thread-30162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:41:42.571 [INFO] [Thread-30162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:41:42.575 [DEBUG] [Thread-30162] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:41:42.575 [DEBUG] [Thread-30162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:41:42.575 [DEBUG] [Thread-30162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:41:42.575 [DEBUG] [Thread-30162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:41:42.575 [DEBUG] [Thread-30162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:41:42.575 [DEBUG] [Thread-30162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:41:42.575 [DEBUG] [Thread-30162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:41:42.575 [DEBUG] [Thread-30162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:41:42.575 [DEBUG] [Thread-30162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:41:42.575 [DEBUG] [Thread-30162] [transport.py] [_log()] client lang: <none>
2026-04-16T02:41:42.575 [DEBUG] [Thread-30162] [transport.py] [_log()] server lang: <none>
2026-04-16T02:41:42.576 [DEBUG] [Thread-30162] [transport.py] [_log()] kex follows: False
2026-04-16T02:41:42.576 [DEBUG] [Thread-30162] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:41:42.576 [DEBUG] [Thread-30162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:41:42.576 [DEBUG] [Thread-30162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:41:42.576 [DEBUG] [Thread-30162] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:41:42.576 [DEBUG] [Thread-30162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:41:42.576 [DEBUG] [Thread-30162] [transport.py] [_log()] Compression: none
2026-04-16T02:41:42.576 [DEBUG] [Thread-30162] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:41:42.594 [DEBUG] [Thread-30162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:41:42.595 [DEBUG] [Thread-30162] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:41:42.595 [DEBUG] [Thread-30162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:41:42.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:41:42.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:41:42.596 [DEBUG] [Thread-30162] [transport.py] [_log()] userauth is OK
2026-04-16T02:41:42.597 [DEBUG] [Thread-30162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:41:42.597 [DEBUG] [Thread-30162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:41:42.597 [DEBUG] [Thread-30162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:41:42.597 [DEBUG] [Thread-30162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:41:42.633 [INFO] [Thread-30162] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:41:42.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:41:43.415 [DEBUG] [Thread-30162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:41:43.415 [DEBUG] [Thread-30162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:41:43.416 [DEBUG] [Thread-30162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:41:43.456 [DEBUG] [Thread-30162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:41:43.456 [DEBUG] [Thread-30162] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:41:43.459 [DEBUG] [Thread-30162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:41:43.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:41:43.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:41:43.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:41:43.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:41:43.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:41:43.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:41:43.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:41:43.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:41:43.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:41:43.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.028255 -999.00   +8.80   6.34     90   +7.30 1 1 1 3 1     0    0 1.36 -8.77 .NEsW 7.3 6.3 133.7 12.2 9.1 -25.7 9.0 -24.5 8.8 -22.2 9.0 -24.2
2026-04-16T02:41:43.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:41:43.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:41:43.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.028255
2026-04-16T02:41:43.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:41:43.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:41:43.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:41:43.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:41:43.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:41:43.482 [DEBUG] [Thread-30162] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:41:43.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:41:28', tmtdew=1.49694, humidity=90.2557, cloud=0.0, wind=12.4049, temperature=8.63211, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:40:41.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 3.5832500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3514999999999997, nan, nan, nan, 2.3089999999999993, nan, 2.2829999999999995, 2.842999999999999, 2.736249999999999, nan, 2.556749999999999, 0.4382500000000009, 0.13674999999999926, 0.333499999999999, 0.3525000000000009, 0.4972500000000002, 0.33950000000000014, 0.30799999999999983, 0.2895000000000003, 0.13500000000000156, -0.022999999999999687, -0.06025000000000169], zp_timestamp='2026-04-16T00:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:41:43.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:41:43.739 [DEBUG] [Thread-30165] [transport.py] [_log()] starting thread (client mode): 0xee9541c0
2026-04-16T02:41:43.739 [DEBUG] [Thread-30165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:41:43.753 [DEBUG] [Thread-30165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:41:43.753 [INFO] [Thread-30165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:41:43.761 [DEBUG] [Thread-30165] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:41:43.761 [DEBUG] [Thread-30165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:41:43.761 [DEBUG] [Thread-30165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:41:43.761 [DEBUG] [Thread-30165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:41:43.761 [DEBUG] [Thread-30165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:41:43.761 [DEBUG] [Thread-30165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:41:43.761 [DEBUG] [Thread-30165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:41:43.761 [DEBUG] [Thread-30165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:41:43.761 [DEBUG] [Thread-30165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:41:43.761 [DEBUG] [Thread-30165] [transport.py] [_log()] client lang: <none>
2026-04-16T02:41:43.761 [DEBUG] [Thread-30165] [transport.py] [_log()] server lang: <none>
2026-04-16T02:41:43.762 [DEBUG] [Thread-30165] [transport.py] [_log()] kex follows: False
2026-04-16T02:41:43.762 [DEBUG] [Thread-30165] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:41:43.762 [DEBUG] [Thread-30165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:41:43.762 [DEBUG] [Thread-30165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:41:43.762 [DEBUG] [Thread-30165] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:41:43.762 [DEBUG] [Thread-30165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:41:43.762 [DEBUG] [Thread-30165] [transport.py] [_log()] Compression: none
2026-04-16T02:41:43.762 [DEBUG] [Thread-30165] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:41:43.818 [DEBUG] [Thread-30165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:41:43.819 [DEBUG] [Thread-30165] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:41:43.819 [DEBUG] [Thread-30165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:41:43.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:41:43.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:41:43.875 [DEBUG] [Thread-30165] [transport.py] [_log()] userauth is OK
2026-04-16T02:41:43.875 [DEBUG] [Thread-30165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:41:43.875 [DEBUG] [Thread-30165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:41:43.876 [DEBUG] [Thread-30165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:41:43.876 [DEBUG] [Thread-30165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:41:43.893 [INFO] [Thread-30165] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:41:43.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:41:43.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:41:44.732 [DEBUG] [Thread-30165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:41:44.732 [DEBUG] [Thread-30165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:41:44.780 [DEBUG] [Thread-30165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:41:44.780 [DEBUG] [Thread-30165] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:41:44.789 [DEBUG] [Thread-30165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:41:44.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:41:44.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')
2026-04-16T02:41:44.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-16T02:41:44.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:41:44.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:41:44.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:41:44.824 [DEBUG] [Thread-30165] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:41:53.939 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:41:53.940 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:41:55.418 [DEBUG] [Thread-30167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:42:06.622 [DEBUG] [Thread-30168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:42:10.463 [DEBUG] [Thread-30169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:42:14.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:42:14.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:42:14.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
2026-04-16T02:42:16.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 42, 4), 1.49709, 90.2557, 0.0, 12.299, 8.6487, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:42:16.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:42:04
2026-04-16T02:42:16.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:42:16.901 [DEBUG] [Thread-30170] [transport.py] [_log()] starting thread (client mode): 0xee9560e0
2026-04-16T02:42:16.902 [DEBUG] [Thread-30170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:42:16.921 [DEBUG] [Thread-30170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:42:16.922 [INFO] [Thread-30170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:42:16.925 [DEBUG] [Thread-30170] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:42:16.925 [DEBUG] [Thread-30170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:42:16.925 [DEBUG] [Thread-30170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:42:16.925 [DEBUG] [Thread-30170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:42:16.925 [DEBUG] [Thread-30170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:42:16.925 [DEBUG] [Thread-30170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:42:16.925 [DEBUG] [Thread-30170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:42:16.925 [DEBUG] [Thread-30170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:42:16.926 [DEBUG] [Thread-30170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:42:16.926 [DEBUG] [Thread-30170] [transport.py] [_log()] client lang: <none>
2026-04-16T02:42:16.926 [DEBUG] [Thread-30170] [transport.py] [_log()] server lang: <none>
2026-04-16T02:42:16.926 [DEBUG] [Thread-30170] [transport.py] [_log()] kex follows: False
2026-04-16T02:42:16.926 [DEBUG] [Thread-30170] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:42:16.926 [DEBUG] [Thread-30170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:42:16.926 [DEBUG] [Thread-30170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:42:16.926 [DEBUG] [Thread-30170] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:42:16.926 [DEBUG] [Thread-30170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:42:16.926 [DEBUG] [Thread-30170] [transport.py] [_log()] Compression: none
2026-04-16T02:42:16.926 [DEBUG] [Thread-30170] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:42:16.943 [DEBUG] [Thread-30170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:42:16.943 [DEBUG] [Thread-30170] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:42:16.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:42:16.944 [DEBUG] [Thread-30170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:42:16.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:42:16.945 [DEBUG] [Thread-30170] [transport.py] [_log()] userauth is OK
2026-04-16T02:42:16.945 [DEBUG] [Thread-30170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:42:16.945 [DEBUG] [Thread-30170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:42:16.945 [DEBUG] [Thread-30170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:42:16.945 [DEBUG] [Thread-30170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:42:16.968 [INFO] [Thread-30170] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:42:16.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:42:17.738 [DEBUG] [Thread-30170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:42:17.738 [DEBUG] [Thread-30170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:42:17.738 [DEBUG] [Thread-30170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:42:17.779 [DEBUG] [Thread-30170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:42:17.779 [DEBUG] [Thread-30170] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:42:17.782 [DEBUG] [Thread-30170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:42:17.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:42:17.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:42:17.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:42:17.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:42:17.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:42:17.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:42:17.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:42:17.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:42:17.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:42:17.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.028949 -999.00   +8.80   5.57     90   +7.30 1 1 1 3 1     0    0 1.31 -9.94 .NESW 9.0 5.6 77.8 14.4 9.1 -25.7 9.0 -24.5 8.7 -22.4 9.0 -24.4
2026-04-16T02:42:17.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:42:17.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:42:17.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.028949
2026-04-16T02:42:17.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:42:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:42:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:42:17.808 [DEBUG] [Thread-30170] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:42:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:42:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:42:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:42:04', tmtdew=1.49709, humidity=90.2557, cloud=0.0, wind=12.299, temperature=8.6487, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:41:41.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 3.5832500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3514999999999997, nan, nan, nan, 2.3089999999999993, nan, 2.2829999999999995, 2.842999999999999, 2.736249999999999, nan, 2.556749999999999, 0.4382500000000009, 0.13674999999999926, 0.333499999999999, 0.3525000000000009, 0.4972500000000002, 0.33950000000000014, 0.30799999999999983, 0.2895000000000003, 0.13500000000000156, -0.022999999999999687, -0.06025000000000169], zp_timestamp='2026-04-16T00:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:42:18.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:42:18.071 [DEBUG] [Thread-30173] [transport.py] [_log()] starting thread (client mode): 0xf13646d0
2026-04-16T02:42:18.071 [DEBUG] [Thread-30173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:42:18.085 [DEBUG] [Thread-30173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:42:18.085 [INFO] [Thread-30173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:42:18.092 [DEBUG] [Thread-30173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:42:18.092 [DEBUG] [Thread-30173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:42:18.092 [DEBUG] [Thread-30173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:42:18.092 [DEBUG] [Thread-30173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:42:18.092 [DEBUG] [Thread-30173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:42:18.092 [DEBUG] [Thread-30173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:42:18.092 [DEBUG] [Thread-30173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:42:18.092 [DEBUG] [Thread-30173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:42:18.093 [DEBUG] [Thread-30173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:42:18.093 [DEBUG] [Thread-30173] [transport.py] [_log()] client lang: <none>
2026-04-16T02:42:18.093 [DEBUG] [Thread-30173] [transport.py] [_log()] server lang: <none>
2026-04-16T02:42:18.093 [DEBUG] [Thread-30173] [transport.py] [_log()] kex follows: False
2026-04-16T02:42:18.093 [DEBUG] [Thread-30173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:42:18.093 [DEBUG] [Thread-30173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:42:18.093 [DEBUG] [Thread-30173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:42:18.093 [DEBUG] [Thread-30173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:42:18.093 [DEBUG] [Thread-30173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:42:18.093 [DEBUG] [Thread-30173] [transport.py] [_log()] Compression: none
2026-04-16T02:42:18.093 [DEBUG] [Thread-30173] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:42:18.151 [DEBUG] [Thread-30173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:42:18.151 [DEBUG] [Thread-30173] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:42:18.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:42:18.151 [DEBUG] [Thread-30173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:42:18.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:42:18.208 [DEBUG] [Thread-30173] [transport.py] [_log()] userauth is OK
2026-04-16T02:42:18.208 [DEBUG] [Thread-30173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:42:18.208 [DEBUG] [Thread-30173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:42:18.208 [DEBUG] [Thread-30173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:42:18.209 [DEBUG] [Thread-30173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:42:18.231 [INFO] [Thread-30173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:42:18.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:42:18.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:42:19.069 [DEBUG] [Thread-30173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:42:19.070 [DEBUG] [Thread-30173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:42:19.118 [DEBUG] [Thread-30173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:42:19.118 [DEBUG] [Thread-30173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:42:19.127 [DEBUG] [Thread-30173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:42:19.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:42: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')
2026-04-16T02:42:19.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
2026-04-16T02:42:19.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:42:19.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:42:19.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:42:19.162 [DEBUG] [Thread-30173] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:42:25.495 [DEBUG] [Thread-30175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:42:40.537 [DEBUG] [Thread-30176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:42:49.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:42:49.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:42:49.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
2026-04-16T02:42:50.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 42, 40), 1.27894, 91.6109, 0.0, 14.8565, 8.46376, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:42:50.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:42:40
2026-04-16T02:42:50.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:42:51.295 [DEBUG] [Thread-30177] [transport.py] [_log()] starting thread (client mode): 0xee9540d0
2026-04-16T02:42:51.295 [DEBUG] [Thread-30177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:42:51.315 [DEBUG] [Thread-30177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:42:51.315 [INFO] [Thread-30177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:42:51.316 [DEBUG] [Thread-30177] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:42:51.316 [DEBUG] [Thread-30177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:42:51.317 [DEBUG] [Thread-30177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:42:51.317 [DEBUG] [Thread-30177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:42:51.317 [DEBUG] [Thread-30177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:42:51.317 [DEBUG] [Thread-30177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:42:51.317 [DEBUG] [Thread-30177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:42:51.317 [DEBUG] [Thread-30177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:42:51.317 [DEBUG] [Thread-30177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:42:51.317 [DEBUG] [Thread-30177] [transport.py] [_log()] client lang: <none>
2026-04-16T02:42:51.317 [DEBUG] [Thread-30177] [transport.py] [_log()] server lang: <none>
2026-04-16T02:42:51.317 [DEBUG] [Thread-30177] [transport.py] [_log()] kex follows: False
2026-04-16T02:42:51.317 [DEBUG] [Thread-30177] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:42:51.318 [DEBUG] [Thread-30177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:42:51.318 [DEBUG] [Thread-30177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:42:51.318 [DEBUG] [Thread-30177] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:42:51.318 [DEBUG] [Thread-30177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:42:51.318 [DEBUG] [Thread-30177] [transport.py] [_log()] Compression: none
2026-04-16T02:42:51.318 [DEBUG] [Thread-30177] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:42:51.326 [DEBUG] [Thread-30177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:42:51.327 [DEBUG] [Thread-30177] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:42:51.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:42:51.327 [DEBUG] [Thread-30177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:42:51.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:42:51.328 [DEBUG] [Thread-30177] [transport.py] [_log()] userauth is OK
2026-04-16T02:42:51.328 [DEBUG] [Thread-30177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:42:51.328 [DEBUG] [Thread-30177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:42:51.329 [DEBUG] [Thread-30177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:42:51.329 [DEBUG] [Thread-30177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:42:51.346 [INFO] [Thread-30177] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:42:51.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:42:52.116 [DEBUG] [Thread-30177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:42:52.117 [DEBUG] [Thread-30177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:42:52.117 [DEBUG] [Thread-30177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:42:52.157 [DEBUG] [Thread-30177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:42:52.157 [DEBUG] [Thread-30177] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:42:52.160 [DEBUG] [Thread-30177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:42:52.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:42:52.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:42:52.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:42:52.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:42:52.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:42:52.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:42:52.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:42:52.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:42:52.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:42:52.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.029296 -999.00   +8.70   7.45     90   +7.20 1 1 1 3 1     0    0 1.31 -10.10 .NESW 8.5 7.5 62.5 12.3 9.1 -25.7 9.0 -24.5 8.7 -22.2 9.0 -24.3
2026-04-16T02:42:52.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:42:52.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:42:52.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.029296
2026-04-16T02:42:52.185 [DEBUG] [Thread-30177] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:42:52.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:42:52.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:42:52.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:42:52.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:42:52.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:42:52.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:42:40', tmtdew=1.27894, humidity=91.6109, cloud=0.0, wind=14.8565, temperature=8.46376, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:42:11.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 3.5832500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3514999999999997, nan, nan, nan, 2.3089999999999993, nan, 2.2829999999999995, 2.842999999999999, 2.736249999999999, nan, 2.556749999999999, 0.4382500000000009, 0.13674999999999926, 0.333499999999999, 0.3525000000000009, 0.4972500000000002, 0.33950000000000014, 0.30799999999999983, 0.2895000000000003, 0.13500000000000156, -0.022999999999999687, -0.06025000000000169], zp_timestamp='2026-04-16T00:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:42:52.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:42:52.443 [DEBUG] [Thread-30180] [transport.py] [_log()] starting thread (client mode): 0xee9541c0
2026-04-16T02:42:52.443 [DEBUG] [Thread-30180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:42:52.457 [DEBUG] [Thread-30180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:42:52.457 [INFO] [Thread-30180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:42:52.465 [DEBUG] [Thread-30180] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:42:52.465 [DEBUG] [Thread-30180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:42:52.465 [DEBUG] [Thread-30180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:42:52.465 [DEBUG] [Thread-30180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:42:52.465 [DEBUG] [Thread-30180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:42:52.465 [DEBUG] [Thread-30180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:42:52.465 [DEBUG] [Thread-30180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:42:52.465 [DEBUG] [Thread-30180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:42:52.465 [DEBUG] [Thread-30180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:42:52.465 [DEBUG] [Thread-30180] [transport.py] [_log()] client lang: <none>
2026-04-16T02:42:52.465 [DEBUG] [Thread-30180] [transport.py] [_log()] server lang: <none>
2026-04-16T02:42:52.466 [DEBUG] [Thread-30180] [transport.py] [_log()] kex follows: False
2026-04-16T02:42:52.466 [DEBUG] [Thread-30180] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:42:52.466 [DEBUG] [Thread-30180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:42:52.466 [DEBUG] [Thread-30180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:42:52.466 [DEBUG] [Thread-30180] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:42:52.466 [DEBUG] [Thread-30180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:42:52.466 [DEBUG] [Thread-30180] [transport.py] [_log()] Compression: none
2026-04-16T02:42:52.466 [DEBUG] [Thread-30180] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:42:52.524 [DEBUG] [Thread-30180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:42:52.524 [DEBUG] [Thread-30180] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:42:52.525 [DEBUG] [Thread-30180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:42:52.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:42:52.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:42:52.581 [DEBUG] [Thread-30180] [transport.py] [_log()] userauth is OK
2026-04-16T02:42:52.582 [DEBUG] [Thread-30180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:42:52.582 [DEBUG] [Thread-30180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:42:52.582 [DEBUG] [Thread-30180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:42:52.582 [DEBUG] [Thread-30180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:42:52.608 [INFO] [Thread-30180] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:42:52.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:42:52.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:42:53.415 [DEBUG] [Thread-30180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:42:53.416 [DEBUG] [Thread-30180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:42:53.466 [DEBUG] [Thread-30180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:42:53.467 [DEBUG] [Thread-30180] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:42:53.476 [DEBUG] [Thread-30180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:42:53.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:42:53.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')
2026-04-16T02:42:53.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
2026-04-16T02:42:53.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:42:53.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:42:53.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:42:53.511 [DEBUG] [Thread-30180] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:42:54.147 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:42:54.148 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:42:55.569 [DEBUG] [Thread-30182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:43:06.772 [DEBUG] [Thread-30183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:43:10.615 [DEBUG] [Thread-30184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:43:23.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:43:23.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:43:23.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
2026-04-16T02:43:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 43, 15), 1.43663, 90.8223, 0.0, 12.2814, 8.61545, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:43:24.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:43:15
2026-04-16T02:43:25.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:43:25.628 [DEBUG] [Thread-30185] [transport.py] [_log()] starting thread (client mode): 0xf1365e40
2026-04-16T02:43:25.629 [DEBUG] [Thread-30185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:43:25.646 [DEBUG] [Thread-30186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:43:25.648 [DEBUG] [Thread-30185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:43:25.648 [INFO] [Thread-30185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:43:25.651 [DEBUG] [Thread-30185] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:43:25.651 [DEBUG] [Thread-30185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:43:25.651 [DEBUG] [Thread-30185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:43:25.651 [DEBUG] [Thread-30185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:43:25.651 [DEBUG] [Thread-30185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:43:25.651 [DEBUG] [Thread-30185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:43:25.651 [DEBUG] [Thread-30185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:43:25.652 [DEBUG] [Thread-30185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:43:25.652 [DEBUG] [Thread-30185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:43:25.652 [DEBUG] [Thread-30185] [transport.py] [_log()] client lang: <none>
2026-04-16T02:43:25.652 [DEBUG] [Thread-30185] [transport.py] [_log()] server lang: <none>
2026-04-16T02:43:25.652 [DEBUG] [Thread-30185] [transport.py] [_log()] kex follows: False
2026-04-16T02:43:25.652 [DEBUG] [Thread-30185] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:43:25.652 [DEBUG] [Thread-30185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:43:25.652 [DEBUG] [Thread-30185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:43:25.652 [DEBUG] [Thread-30185] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:43:25.652 [DEBUG] [Thread-30185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:43:25.652 [DEBUG] [Thread-30185] [transport.py] [_log()] Compression: none
2026-04-16T02:43:25.652 [DEBUG] [Thread-30185] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:43:25.669 [DEBUG] [Thread-30185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:43:25.669 [DEBUG] [Thread-30185] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:43:25.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:43:25.670 [DEBUG] [Thread-30185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:43:25.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:43:25.671 [DEBUG] [Thread-30185] [transport.py] [_log()] userauth is OK
2026-04-16T02:43:25.671 [DEBUG] [Thread-30185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:43:25.671 [DEBUG] [Thread-30185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:43:25.671 [DEBUG] [Thread-30185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:43:25.671 [DEBUG] [Thread-30185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:43:25.688 [INFO] [Thread-30185] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:43:25.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:43:26.499 [DEBUG] [Thread-30185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:43:26.499 [DEBUG] [Thread-30185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:43:26.499 [DEBUG] [Thread-30185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:43:26.540 [DEBUG] [Thread-30185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:43:26.540 [DEBUG] [Thread-30185] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:43:26.543 [DEBUG] [Thread-30185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:43:26.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:43:26.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:43:26.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:43:26.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:43:26.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:43:26.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:43:26.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:43:26.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:43:26.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:43:26.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.029643 -999.00   +8.70   9.55     90   +7.30 1 1 1 3 1     0    0 1.24 -10.90 .NESW 10.0 9.6 84.5 14.3 9.1 -25.5 9.0 -24.3 8.7 -22.2 9.0 -24.3
2026-04-16T02:43:26.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:43:26.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:43:26.564 [DEBUG] [Thread-30185] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:43:26.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.029643
2026-04-16T02:43:26.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:43:26.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:43:26.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:43:26.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:43:26.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:43:26.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:43:15', tmtdew=1.43663, humidity=90.8223, cloud=0.0, wind=12.2814, temperature=8.61545, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:42:41.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 3.5832500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3514999999999997, nan, nan, nan, 2.3089999999999993, nan, 2.2829999999999995, 2.842999999999999, 2.736249999999999, nan, 2.556749999999999, 0.4382500000000009, 0.13674999999999926, 0.333499999999999, 0.3525000000000009, 0.4972500000000002, 0.33950000000000014, 0.30799999999999983, 0.2895000000000003, 0.13500000000000156, -0.022999999999999687, -0.06025000000000169], zp_timestamp='2026-04-16T00:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:43:26.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:43:26.820 [DEBUG] [Thread-30189] [transport.py] [_log()] starting thread (client mode): 0xee933220
2026-04-16T02:43:26.820 [DEBUG] [Thread-30189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:43:26.835 [DEBUG] [Thread-30189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:43:26.836 [INFO] [Thread-30189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:43:26.843 [DEBUG] [Thread-30189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:43:26.843 [DEBUG] [Thread-30189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:43:26.843 [DEBUG] [Thread-30189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:43:26.843 [DEBUG] [Thread-30189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:43:26.843 [DEBUG] [Thread-30189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:43:26.843 [DEBUG] [Thread-30189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:43:26.843 [DEBUG] [Thread-30189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:43:26.843 [DEBUG] [Thread-30189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:43:26.844 [DEBUG] [Thread-30189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:43:26.844 [DEBUG] [Thread-30189] [transport.py] [_log()] client lang: <none>
2026-04-16T02:43:26.844 [DEBUG] [Thread-30189] [transport.py] [_log()] server lang: <none>
2026-04-16T02:43:26.844 [DEBUG] [Thread-30189] [transport.py] [_log()] kex follows: False
2026-04-16T02:43:26.844 [DEBUG] [Thread-30189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:43:26.844 [DEBUG] [Thread-30189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:43:26.844 [DEBUG] [Thread-30189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:43:26.844 [DEBUG] [Thread-30189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:43:26.844 [DEBUG] [Thread-30189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:43:26.844 [DEBUG] [Thread-30189] [transport.py] [_log()] Compression: none
2026-04-16T02:43:26.845 [DEBUG] [Thread-30189] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:43:26.902 [DEBUG] [Thread-30189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:43:26.903 [DEBUG] [Thread-30189] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:43:26.904 [DEBUG] [Thread-30189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:43:26.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:43:26.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:43:26.962 [DEBUG] [Thread-30189] [transport.py] [_log()] userauth is OK
2026-04-16T02:43:26.962 [DEBUG] [Thread-30189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:43:26.962 [DEBUG] [Thread-30189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:43:26.962 [DEBUG] [Thread-30189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:43:26.963 [DEBUG] [Thread-30189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:43:26.987 [INFO] [Thread-30189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:43:26.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:43:26.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:43:27.863 [DEBUG] [Thread-30189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:43:27.863 [DEBUG] [Thread-30189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:43:27.912 [DEBUG] [Thread-30189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:43:27.912 [DEBUG] [Thread-30189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:43:27.921 [DEBUG] [Thread-30189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:43:27.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:43:27.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-16T02:43:27.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
2026-04-16T02:43:27.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:43:27.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:43:27.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:43:27.956 [DEBUG] [Thread-30189] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:43:40.674 [DEBUG] [Thread-30191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:43:54.351 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:43:54.352 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:43:55.722 [DEBUG] [Thread-30192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:43:57.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:43:57.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:43:57.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
2026-04-16T02:43:59.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 43, 51), 1.26275, 91.7106, 0.0, 14.6448, 8.43066, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:43:59.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:43:51
2026-04-16T02:43:59.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:44:00.073 [DEBUG] [Thread-30193] [transport.py] [_log()] starting thread (client mode): 0xee9c7e20
2026-04-16T02:44:00.073 [DEBUG] [Thread-30193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:44:00.093 [DEBUG] [Thread-30193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:44:00.093 [INFO] [Thread-30193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:44:00.096 [DEBUG] [Thread-30193] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:44:00.096 [DEBUG] [Thread-30193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:44:00.096 [DEBUG] [Thread-30193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:44:00.097 [DEBUG] [Thread-30193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:44:00.097 [DEBUG] [Thread-30193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:44:00.097 [DEBUG] [Thread-30193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:44:00.097 [DEBUG] [Thread-30193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:44:00.097 [DEBUG] [Thread-30193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:44:00.097 [DEBUG] [Thread-30193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:44:00.097 [DEBUG] [Thread-30193] [transport.py] [_log()] client lang: <none>
2026-04-16T02:44:00.097 [DEBUG] [Thread-30193] [transport.py] [_log()] server lang: <none>
2026-04-16T02:44:00.097 [DEBUG] [Thread-30193] [transport.py] [_log()] kex follows: False
2026-04-16T02:44:00.097 [DEBUG] [Thread-30193] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:44:00.097 [DEBUG] [Thread-30193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:44:00.097 [DEBUG] [Thread-30193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:44:00.097 [DEBUG] [Thread-30193] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:44:00.098 [DEBUG] [Thread-30193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:44:00.098 [DEBUG] [Thread-30193] [transport.py] [_log()] Compression: none
2026-04-16T02:44:00.098 [DEBUG] [Thread-30193] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:44:00.114 [DEBUG] [Thread-30193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:44:00.115 [DEBUG] [Thread-30193] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:44:00.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:44:00.116 [DEBUG] [Thread-30193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:44:00.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:44:00.117 [DEBUG] [Thread-30193] [transport.py] [_log()] userauth is OK
2026-04-16T02:44:00.117 [DEBUG] [Thread-30193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:44:00.117 [DEBUG] [Thread-30193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:44:00.117 [DEBUG] [Thread-30193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:44:00.117 [DEBUG] [Thread-30193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:44:00.152 [INFO] [Thread-30193] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:44:00.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:44:00.940 [DEBUG] [Thread-30193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:44:00.940 [DEBUG] [Thread-30193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:44:00.940 [DEBUG] [Thread-30193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:44:00.981 [DEBUG] [Thread-30193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:44:00.981 [DEBUG] [Thread-30193] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:44:00.984 [DEBUG] [Thread-30193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:44:00.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:44:00.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:44:00.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:44:01.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:44:01.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:44:01.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:44:01.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:44:01.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:44:01.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:44:01.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.029991 -999.00   +8.80  12.55     90   +7.30 1 1 1 3 1     0    0 1.28 -11.08 .NESw 10.9 12.6 68.2 13.5 9.1 -25.7 8.9 -24.4 8.7 -22.2 9.0 -24.3
2026-04-16T02:44:01.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:44:01.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:44:01.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.029991
2026-04-16T02:44:01.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:44:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:44:01.009 [DEBUG] [Thread-30193] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:44:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:44:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:44:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:44:01.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:43:51', tmtdew=1.26275, humidity=91.7106, cloud=0.0, wind=14.6448, temperature=8.43066, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:43:11.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 3.5832500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3514999999999997, nan, nan, nan, 2.3089999999999993, nan, 2.2829999999999995, 2.842999999999999, 2.736249999999999, nan, 2.556749999999999, 0.4382500000000009, 0.13674999999999926, 0.333499999999999, 0.3525000000000009, 0.4972500000000002, 0.33950000000000014, 0.30799999999999983, 0.2895000000000003, 0.13500000000000156, -0.022999999999999687, -0.06025000000000169], zp_timestamp='2026-04-16T00:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:44:01.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:44:01.249 [DEBUG] [Thread-30196] [transport.py] [_log()] starting thread (client mode): 0xee904a00
2026-04-16T02:44:01.249 [DEBUG] [Thread-30196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:44:01.263 [DEBUG] [Thread-30196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:44:01.263 [INFO] [Thread-30196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:44:01.270 [DEBUG] [Thread-30196] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:44:01.270 [DEBUG] [Thread-30196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:44:01.270 [DEBUG] [Thread-30196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:44:01.271 [DEBUG] [Thread-30196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:44:01.271 [DEBUG] [Thread-30196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:44:01.271 [DEBUG] [Thread-30196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:44:01.271 [DEBUG] [Thread-30196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:44:01.271 [DEBUG] [Thread-30196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:44:01.271 [DEBUG] [Thread-30196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:44:01.271 [DEBUG] [Thread-30196] [transport.py] [_log()] client lang: <none>
2026-04-16T02:44:01.271 [DEBUG] [Thread-30196] [transport.py] [_log()] server lang: <none>
2026-04-16T02:44:01.271 [DEBUG] [Thread-30196] [transport.py] [_log()] kex follows: False
2026-04-16T02:44:01.271 [DEBUG] [Thread-30196] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:44:01.271 [DEBUG] [Thread-30196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:44:01.271 [DEBUG] [Thread-30196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:44:01.272 [DEBUG] [Thread-30196] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:44:01.272 [DEBUG] [Thread-30196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:44:01.272 [DEBUG] [Thread-30196] [transport.py] [_log()] Compression: none
2026-04-16T02:44:01.272 [DEBUG] [Thread-30196] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:44:01.329 [DEBUG] [Thread-30196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:44:01.330 [DEBUG] [Thread-30196] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:44:01.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:44:01.330 [DEBUG] [Thread-30196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:44:01.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:44:01.386 [DEBUG] [Thread-30196] [transport.py] [_log()] userauth is OK
2026-04-16T02:44:01.386 [DEBUG] [Thread-30196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:44:01.387 [DEBUG] [Thread-30196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:44:01.387 [DEBUG] [Thread-30196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:44:01.387 [DEBUG] [Thread-30196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:44:01.412 [INFO] [Thread-30196] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:44:01.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:44:01.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:44:02.261 [DEBUG] [Thread-30196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:44:02.261 [DEBUG] [Thread-30196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:44:02.310 [DEBUG] [Thread-30196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:44:02.310 [DEBUG] [Thread-30196] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:44:02.318 [DEBUG] [Thread-30196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:44:02.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:44:02.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')
2026-04-16T02:44:02.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') -> 00000000
2026-04-16T02:44:02.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:44:02.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:44:02.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:44:02.353 [DEBUG] [Thread-30196] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:44:06.918 [DEBUG] [Thread-30198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:44:10.753 [DEBUG] [Thread-30199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:44:25.798 [DEBUG] [Thread-30200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:44:32.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:44:32.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:44:32.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T02:44:33.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 43, 51), 1.26275, 91.7106, 0.0, 14.6448, 8.43066, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:44:33.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:43:51
2026-04-16T02:44:34.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:44:34.607 [DEBUG] [Thread-30201] [transport.py] [_log()] starting thread (client mode): 0xf1366f20
2026-04-16T02:44:34.608 [DEBUG] [Thread-30201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:44:34.628 [DEBUG] [Thread-30201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:44:34.628 [INFO] [Thread-30201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:44:34.631 [DEBUG] [Thread-30201] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:44:34.631 [DEBUG] [Thread-30201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:44:34.631 [DEBUG] [Thread-30201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:44:34.632 [DEBUG] [Thread-30201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:44:34.632 [DEBUG] [Thread-30201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:44:34.632 [DEBUG] [Thread-30201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:44:34.632 [DEBUG] [Thread-30201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:44:34.632 [DEBUG] [Thread-30201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:44:34.632 [DEBUG] [Thread-30201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:44:34.632 [DEBUG] [Thread-30201] [transport.py] [_log()] client lang: <none>
2026-04-16T02:44:34.632 [DEBUG] [Thread-30201] [transport.py] [_log()] server lang: <none>
2026-04-16T02:44:34.632 [DEBUG] [Thread-30201] [transport.py] [_log()] kex follows: False
2026-04-16T02:44:34.632 [DEBUG] [Thread-30201] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:44:34.632 [DEBUG] [Thread-30201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:44:34.632 [DEBUG] [Thread-30201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:44:34.633 [DEBUG] [Thread-30201] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:44:34.633 [DEBUG] [Thread-30201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:44:34.633 [DEBUG] [Thread-30201] [transport.py] [_log()] Compression: none
2026-04-16T02:44:34.633 [DEBUG] [Thread-30201] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:44:34.651 [DEBUG] [Thread-30201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:44:34.652 [DEBUG] [Thread-30201] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:44:34.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:44:34.653 [DEBUG] [Thread-30201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:44:34.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:44:34.654 [DEBUG] [Thread-30201] [transport.py] [_log()] userauth is OK
2026-04-16T02:44:34.654 [DEBUG] [Thread-30201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:44:34.654 [DEBUG] [Thread-30201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:44:34.654 [DEBUG] [Thread-30201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:44:34.654 [DEBUG] [Thread-30201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:44:34.679 [INFO] [Thread-30201] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:44:34.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:44:35.512 [DEBUG] [Thread-30201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:44:35.512 [DEBUG] [Thread-30201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:44:35.513 [DEBUG] [Thread-30201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:44:35.553 [DEBUG] [Thread-30201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:44:35.553 [DEBUG] [Thread-30201] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:44:35.556 [DEBUG] [Thread-30201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:44:35.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:44:35.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:44:35.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:44:35.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:44:35.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:44:35.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:44:35.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:44:35.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:44:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:44:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.030338 -999.00   +8.80   8.31     90   +7.30 1 1 1 3 1     0    0 1.25 -11.23 .NESw 9.4 8.3 73.9 13.1 9.1 -25.6 9.0 -24.4 8.7 -22.1 9.0 -24.3
2026-04-16T02:44:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:44:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:44:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.030338
2026-04-16T02:44:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:44:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:44:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:44:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:44:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:44:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:43:51', tmtdew=1.26275, humidity=91.7106, cloud=0.0, wind=14.6448, temperature=8.43066, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:43:41.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 3.5832500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3514999999999997, nan, nan, nan, 2.3089999999999993, nan, 2.2829999999999995, 2.842999999999999, 2.736249999999999, nan, 2.556749999999999, 0.4382500000000009, 0.13674999999999926, 0.333499999999999, 0.3525000000000009, 0.4972500000000002, 0.33950000000000014, 0.30799999999999983, 0.2895000000000003, 0.13500000000000156, -0.022999999999999687, -0.06025000000000169], zp_timestamp='2026-04-16T00:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:44:35.577 [DEBUG] [Thread-30201] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:44:35.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:44:35.808 [DEBUG] [Thread-30204] [transport.py] [_log()] starting thread (client mode): 0xee9055d0
2026-04-16T02:44:35.809 [DEBUG] [Thread-30204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:44:35.823 [DEBUG] [Thread-30204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:44:35.823 [INFO] [Thread-30204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:44:35.831 [DEBUG] [Thread-30204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:44:35.831 [DEBUG] [Thread-30204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:44:35.831 [DEBUG] [Thread-30204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:44:35.831 [DEBUG] [Thread-30204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:44:35.831 [DEBUG] [Thread-30204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:44:35.831 [DEBUG] [Thread-30204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:44:35.831 [DEBUG] [Thread-30204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:44:35.832 [DEBUG] [Thread-30204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:44:35.832 [DEBUG] [Thread-30204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:44:35.832 [DEBUG] [Thread-30204] [transport.py] [_log()] client lang: <none>
2026-04-16T02:44:35.832 [DEBUG] [Thread-30204] [transport.py] [_log()] server lang: <none>
2026-04-16T02:44:35.832 [DEBUG] [Thread-30204] [transport.py] [_log()] kex follows: False
2026-04-16T02:44:35.832 [DEBUG] [Thread-30204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:44:35.832 [DEBUG] [Thread-30204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:44:35.832 [DEBUG] [Thread-30204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:44:35.832 [DEBUG] [Thread-30204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:44:35.832 [DEBUG] [Thread-30204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:44:35.832 [DEBUG] [Thread-30204] [transport.py] [_log()] Compression: none
2026-04-16T02:44:35.833 [DEBUG] [Thread-30204] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:44:35.890 [DEBUG] [Thread-30204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:44:35.891 [DEBUG] [Thread-30204] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:44:35.891 [DEBUG] [Thread-30204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:44:35.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:44:35.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:44:35.947 [DEBUG] [Thread-30204] [transport.py] [_log()] userauth is OK
2026-04-16T02:44:35.947 [DEBUG] [Thread-30204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:44:35.948 [DEBUG] [Thread-30204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:44:35.948 [DEBUG] [Thread-30204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:44:35.948 [DEBUG] [Thread-30204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:44:35.973 [INFO] [Thread-30204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:44:35.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:44:35.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:44:36.808 [DEBUG] [Thread-30204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:44:36.809 [DEBUG] [Thread-30204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:44:36.856 [DEBUG] [Thread-30204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:44:36.856 [DEBUG] [Thread-30204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:44:36.865 [DEBUG] [Thread-30204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:44:36.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:44:36.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')
2026-04-16T02:44:36.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
2026-04-16T02:44:36.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:44:36.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:44:36.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:44:36.900 [DEBUG] [Thread-30204] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:44:40.829 [DEBUG] [Thread-30206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:44:54.558 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:44:54.559 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:44:55.873 [DEBUG] [Thread-30207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:45:06.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:45:06.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:45:06.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
2026-04-16T02:45:07.079 [DEBUG] [Thread-30208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:45:08.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 44, 26), 1.42624, 90.8885, 0.0, 12.6518, 8.63192, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:45:08.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:44:26
2026-04-16T02:45:08.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:45:09.010 [DEBUG] [Thread-30209] [transport.py] [_log()] starting thread (client mode): 0xee957d90
2026-04-16T02:45:09.010 [DEBUG] [Thread-30209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:45:09.030 [DEBUG] [Thread-30209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:45:09.030 [INFO] [Thread-30209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:45:09.033 [DEBUG] [Thread-30209] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:45:09.034 [DEBUG] [Thread-30209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:45:09.034 [DEBUG] [Thread-30209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:45:09.034 [DEBUG] [Thread-30209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:45:09.034 [DEBUG] [Thread-30209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:45:09.034 [DEBUG] [Thread-30209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:45:09.034 [DEBUG] [Thread-30209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:45:09.034 [DEBUG] [Thread-30209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:45:09.034 [DEBUG] [Thread-30209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:45:09.034 [DEBUG] [Thread-30209] [transport.py] [_log()] client lang: <none>
2026-04-16T02:45:09.034 [DEBUG] [Thread-30209] [transport.py] [_log()] server lang: <none>
2026-04-16T02:45:09.034 [DEBUG] [Thread-30209] [transport.py] [_log()] kex follows: False
2026-04-16T02:45:09.034 [DEBUG] [Thread-30209] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:45:09.035 [DEBUG] [Thread-30209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:45:09.035 [DEBUG] [Thread-30209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:45:09.035 [DEBUG] [Thread-30209] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:45:09.035 [DEBUG] [Thread-30209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:45:09.035 [DEBUG] [Thread-30209] [transport.py] [_log()] Compression: none
2026-04-16T02:45:09.035 [DEBUG] [Thread-30209] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:45:09.053 [DEBUG] [Thread-30209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:45:09.053 [DEBUG] [Thread-30209] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:45:09.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:45:09.054 [DEBUG] [Thread-30209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:45:09.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:45:09.055 [DEBUG] [Thread-30209] [transport.py] [_log()] userauth is OK
2026-04-16T02:45:09.055 [DEBUG] [Thread-30209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:45:09.055 [DEBUG] [Thread-30209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:45:09.055 [DEBUG] [Thread-30209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:45:09.055 [DEBUG] [Thread-30209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:45:09.073 [INFO] [Thread-30209] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:45:09.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:45:10.902 [DEBUG] [Thread-30211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:45:17.696 [DEBUG] [Thread-30209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:45:17.696 [DEBUG] [Thread-30209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:45:17.697 [DEBUG] [Thread-30209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:45:17.736 [DEBUG] [Thread-30209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:45:17.737 [DEBUG] [Thread-30209] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:45:17.738 [DEBUG] [Thread-30209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:45:17.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:45:17.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:45:17.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:45:17.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:45:17.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:45:17.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:45:17.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:45:17.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:45:17.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:45:17.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.030685 -999.00   +8.70   8.23     90   +7.30 1 1 1 3 1     0    0 1.26 -11.40 .NESW 6.4 8.2 62.1 13.6 9.1 -25.6 8.9 -24.3 8.7 -22.1 9.0 -24.3
2026-04-16T02:45:17.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:45:17.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:45:17.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.030685
2026-04-16T02:45:17.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:45:17.898 [DEBUG] [Thread-30209] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:45:17.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:45:17.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:45:17.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:45:17.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:45:17.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:44:26', tmtdew=1.42624, humidity=90.8885, cloud=0.0, wind=12.6518, temperature=8.63192, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:44:11.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 3.5832500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3514999999999997, nan, nan, nan, 2.3089999999999993, nan, 2.2829999999999995, 2.842999999999999, 2.736249999999999, nan, 2.556749999999999, 0.4382500000000009, 0.13674999999999926, 0.333499999999999, 0.3525000000000009, 0.4972500000000002, 0.33950000000000014, 0.30799999999999983, 0.2895000000000003, 0.13500000000000156, -0.022999999999999687, -0.06025000000000169], zp_timestamp='2026-04-16T00:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:45:18.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:45:18.156 [DEBUG] [Thread-30213] [transport.py] [_log()] starting thread (client mode): 0xee9c3e50
2026-04-16T02:45:18.156 [DEBUG] [Thread-30213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:45:18.172 [DEBUG] [Thread-30213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:45:18.172 [INFO] [Thread-30213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:45:18.179 [DEBUG] [Thread-30213] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:45:18.179 [DEBUG] [Thread-30213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:45:18.180 [DEBUG] [Thread-30213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:45:18.180 [DEBUG] [Thread-30213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:45:18.180 [DEBUG] [Thread-30213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:45:18.180 [DEBUG] [Thread-30213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:45:18.180 [DEBUG] [Thread-30213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:45:18.180 [DEBUG] [Thread-30213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:45:18.180 [DEBUG] [Thread-30213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:45:18.180 [DEBUG] [Thread-30213] [transport.py] [_log()] client lang: <none>
2026-04-16T02:45:18.180 [DEBUG] [Thread-30213] [transport.py] [_log()] server lang: <none>
2026-04-16T02:45:18.180 [DEBUG] [Thread-30213] [transport.py] [_log()] kex follows: False
2026-04-16T02:45:18.180 [DEBUG] [Thread-30213] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:45:18.180 [DEBUG] [Thread-30213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:45:18.181 [DEBUG] [Thread-30213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:45:18.181 [DEBUG] [Thread-30213] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:45:18.181 [DEBUG] [Thread-30213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:45:18.181 [DEBUG] [Thread-30213] [transport.py] [_log()] Compression: none
2026-04-16T02:45:18.181 [DEBUG] [Thread-30213] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:45:18.235 [DEBUG] [Thread-30213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:45:18.236 [DEBUG] [Thread-30213] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:45:18.236 [DEBUG] [Thread-30213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:45:18.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:45:18.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:45:18.292 [DEBUG] [Thread-30213] [transport.py] [_log()] userauth is OK
2026-04-16T02:45:18.292 [DEBUG] [Thread-30213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:45:18.292 [DEBUG] [Thread-30213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:45:18.293 [DEBUG] [Thread-30213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:45:18.293 [DEBUG] [Thread-30213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:45:18.317 [INFO] [Thread-30213] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:45:18.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:45:18.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:45:19.148 [DEBUG] [Thread-30213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:45:19.148 [DEBUG] [Thread-30213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:45:19.196 [DEBUG] [Thread-30213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:45:19.196 [DEBUG] [Thread-30213] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:45:19.205 [DEBUG] [Thread-30213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:45:19.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:45:19.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')
2026-04-16T02:45:19.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
2026-04-16T02:45:19.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:45:19.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:45:19.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:45:19.240 [DEBUG] [Thread-30213] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:45:25.933 [DEBUG] [Thread-30215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:45:40.978 [DEBUG] [Thread-30216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:45:49.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:45:49.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:45:49.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
2026-04-16T02:45:50.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 45, 38), 1.24755, 91.8098, 0.0, 14.6801, 8.49684, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:45:50.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:45:38
2026-04-16T02:45:50.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:45:51.402 [DEBUG] [Thread-30217] [transport.py] [_log()] starting thread (client mode): 0xee9069b0
2026-04-16T02:45:51.402 [DEBUG] [Thread-30217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:45:51.422 [DEBUG] [Thread-30217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:45:51.422 [INFO] [Thread-30217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:45:51.425 [DEBUG] [Thread-30217] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:45:51.425 [DEBUG] [Thread-30217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:45:51.425 [DEBUG] [Thread-30217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:45:51.425 [DEBUG] [Thread-30217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:45:51.425 [DEBUG] [Thread-30217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:45:51.425 [DEBUG] [Thread-30217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:45:51.425 [DEBUG] [Thread-30217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:45:51.426 [DEBUG] [Thread-30217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:45:51.426 [DEBUG] [Thread-30217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:45:51.426 [DEBUG] [Thread-30217] [transport.py] [_log()] client lang: <none>
2026-04-16T02:45:51.426 [DEBUG] [Thread-30217] [transport.py] [_log()] server lang: <none>
2026-04-16T02:45:51.426 [DEBUG] [Thread-30217] [transport.py] [_log()] kex follows: False
2026-04-16T02:45:51.426 [DEBUG] [Thread-30217] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:45:51.426 [DEBUG] [Thread-30217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:45:51.426 [DEBUG] [Thread-30217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:45:51.426 [DEBUG] [Thread-30217] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:45:51.426 [DEBUG] [Thread-30217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:45:51.426 [DEBUG] [Thread-30217] [transport.py] [_log()] Compression: none
2026-04-16T02:45:51.427 [DEBUG] [Thread-30217] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:45:51.443 [DEBUG] [Thread-30217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:45:51.443 [DEBUG] [Thread-30217] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:45:51.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:45:51.444 [DEBUG] [Thread-30217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:45:51.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:45:51.445 [DEBUG] [Thread-30217] [transport.py] [_log()] userauth is OK
2026-04-16T02:45:51.445 [DEBUG] [Thread-30217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:45:51.445 [DEBUG] [Thread-30217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:45:51.445 [DEBUG] [Thread-30217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:45:51.445 [DEBUG] [Thread-30217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:45:51.482 [INFO] [Thread-30217] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:45:51.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:45:52.208 [DEBUG] [Thread-30217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:45:52.208 [DEBUG] [Thread-30217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:45:52.209 [DEBUG] [Thread-30217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:45:52.249 [DEBUG] [Thread-30217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:45:52.249 [DEBUG] [Thread-30217] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:45:52.252 [DEBUG] [Thread-30217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:45:52.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:45:52.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:45:52.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:45:52.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:45:52.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:45:52.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:45:52.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:45:52.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:45:52.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:45:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.031380 -999.00   +8.70  10.27     90   +7.30 1 1 1 3 1     0    0 1.27 -10.42 .NESW 10.6 10.3 69.8 12.9 9.1 -25.5 9.0 -24.3 8.7 -22.1 9.0 -24.3
2026-04-16T02:45:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:45:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:45:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.031380
2026-04-16T02:45:52.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:45:52.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:45:52.278 [DEBUG] [Thread-30217] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:45:52.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:45:52.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:45:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:45:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:45:38', tmtdew=1.24755, humidity=91.8098, cloud=0.0, wind=14.6801, temperature=8.49684, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:45:11.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 3.5832500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3514999999999997, nan, nan, nan, 2.3089999999999993, nan, 2.2829999999999995, 2.842999999999999, 2.736249999999999, nan, 2.556749999999999, 0.4382500000000009, 0.13674999999999926, 0.333499999999999, 0.3525000000000009, 0.4972500000000002, 0.33950000000000014, 0.30799999999999983, 0.2895000000000003, 0.13500000000000156, -0.022999999999999687, -0.06025000000000169], zp_timestamp='2026-04-16T00:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:45:52.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:45:52.536 [DEBUG] [Thread-30220] [transport.py] [_log()] starting thread (client mode): 0xee9927d0
2026-04-16T02:45:52.536 [DEBUG] [Thread-30220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:45:52.551 [DEBUG] [Thread-30220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:45:52.551 [INFO] [Thread-30220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:45:52.559 [DEBUG] [Thread-30220] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:45:52.559 [DEBUG] [Thread-30220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:45:52.559 [DEBUG] [Thread-30220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:45:52.559 [DEBUG] [Thread-30220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:45:52.559 [DEBUG] [Thread-30220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:45:52.559 [DEBUG] [Thread-30220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:45:52.560 [DEBUG] [Thread-30220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:45:52.560 [DEBUG] [Thread-30220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:45:52.560 [DEBUG] [Thread-30220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:45:52.560 [DEBUG] [Thread-30220] [transport.py] [_log()] client lang: <none>
2026-04-16T02:45:52.560 [DEBUG] [Thread-30220] [transport.py] [_log()] server lang: <none>
2026-04-16T02:45:52.560 [DEBUG] [Thread-30220] [transport.py] [_log()] kex follows: False
2026-04-16T02:45:52.560 [DEBUG] [Thread-30220] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:45:52.560 [DEBUG] [Thread-30220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:45:52.560 [DEBUG] [Thread-30220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:45:52.560 [DEBUG] [Thread-30220] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:45:52.560 [DEBUG] [Thread-30220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:45:52.561 [DEBUG] [Thread-30220] [transport.py] [_log()] Compression: none
2026-04-16T02:45:52.561 [DEBUG] [Thread-30220] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:45:52.617 [DEBUG] [Thread-30220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:45:52.617 [DEBUG] [Thread-30220] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:45:52.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:45:52.618 [DEBUG] [Thread-30220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:45:52.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:45:52.674 [DEBUG] [Thread-30220] [transport.py] [_log()] userauth is OK
2026-04-16T02:45:52.674 [DEBUG] [Thread-30220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:45:52.675 [DEBUG] [Thread-30220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:45:52.675 [DEBUG] [Thread-30220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:45:52.675 [DEBUG] [Thread-30220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:45:52.702 [INFO] [Thread-30220] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:45:52.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:45:52.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:45:53.536 [DEBUG] [Thread-30220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:45:53.537 [DEBUG] [Thread-30220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:45:53.584 [DEBUG] [Thread-30220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:45:53.585 [DEBUG] [Thread-30220] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:45:53.594 [DEBUG] [Thread-30220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:45:53.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:45:53.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')
2026-04-16T02:45:53.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') -> 00000000
2026-04-16T02:45:53.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:45:53.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:45:53.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:45:53.628 [DEBUG] [Thread-30220] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:45:54.763 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:45:54.764 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:45:56.009 [DEBUG] [Thread-30222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:46:07.242 [DEBUG] [Thread-30223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:46:11.055 [DEBUG] [Thread-30224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:46:23.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:46:23.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:46:23.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
2026-04-16T02:46:24.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 46, 13), 1.4235, 90.9048, 0.0, 12.5813, 8.66516, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:46:24.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:46:13
2026-04-16T02:46:25.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:46:25.740 [DEBUG] [Thread-30225] [transport.py] [_log()] starting thread (client mode): 0xf1335cc0
2026-04-16T02:46:25.740 [DEBUG] [Thread-30225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:46:25.759 [DEBUG] [Thread-30225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:46:25.759 [INFO] [Thread-30225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:46:25.761 [DEBUG] [Thread-30225] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:46:25.761 [DEBUG] [Thread-30225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:46:25.761 [DEBUG] [Thread-30225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:46:25.761 [DEBUG] [Thread-30225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:46:25.761 [DEBUG] [Thread-30225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:46:25.761 [DEBUG] [Thread-30225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:46:25.761 [DEBUG] [Thread-30225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:46:25.761 [DEBUG] [Thread-30225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:46:25.761 [DEBUG] [Thread-30225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:46:25.761 [DEBUG] [Thread-30225] [transport.py] [_log()] client lang: <none>
2026-04-16T02:46:25.761 [DEBUG] [Thread-30225] [transport.py] [_log()] server lang: <none>
2026-04-16T02:46:25.761 [DEBUG] [Thread-30225] [transport.py] [_log()] kex follows: False
2026-04-16T02:46:25.762 [DEBUG] [Thread-30225] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:46:25.762 [DEBUG] [Thread-30225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:46:25.762 [DEBUG] [Thread-30225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:46:25.762 [DEBUG] [Thread-30225] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:46:25.762 [DEBUG] [Thread-30225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:46:25.762 [DEBUG] [Thread-30225] [transport.py] [_log()] Compression: none
2026-04-16T02:46:25.762 [DEBUG] [Thread-30225] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:46:25.774 [DEBUG] [Thread-30225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:46:25.774 [DEBUG] [Thread-30225] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:46:25.775 [DEBUG] [Thread-30225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:46:25.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:46:25.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:46:25.776 [DEBUG] [Thread-30225] [transport.py] [_log()] userauth is OK
2026-04-16T02:46:25.776 [DEBUG] [Thread-30225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:46:25.776 [DEBUG] [Thread-30225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:46:25.776 [DEBUG] [Thread-30225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:46:25.776 [DEBUG] [Thread-30225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:46:25.809 [INFO] [Thread-30225] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:46:25.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:46:26.086 [DEBUG] [Thread-30227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:46:26.595 [DEBUG] [Thread-30225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:46:26.596 [DEBUG] [Thread-30225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:46:26.596 [DEBUG] [Thread-30225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:46:26.636 [DEBUG] [Thread-30225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:46:26.636 [DEBUG] [Thread-30225] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:46:26.638 [DEBUG] [Thread-30225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:46:26.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:46:26.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:46:26.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:46:26.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:46:26.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:46:26.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:46:26.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:46:26.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:46:26.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:46:26.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.031727 -999.00   +8.80   6.66     90   +7.30 1 1 1 3 1     0    0 1.25 -10.47 .NESW 11.2 6.7 82.9 12.2 9.1 -25.6 8.9 -24.3 8.7 -22.2 9.0 -24.3
2026-04-16T02:46:26.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:46:26.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:46:26.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.031727
2026-04-16T02:46:26.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:46:26.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:46:26.661 [DEBUG] [Thread-30225] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:46:26.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:46:26.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:46:26.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:46:26.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:46:13', tmtdew=1.4235, humidity=90.9048, cloud=0.0, wind=12.5813, temperature=8.66516, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:45:41.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 3.5832500000000005, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3514999999999997, nan, nan, nan, 2.3089999999999993, nan, 2.2829999999999995, 2.842999999999999, 2.736249999999999, nan, 2.556749999999999, 0.4382500000000009, 0.13674999999999926, 0.333499999999999, 0.3525000000000009, 0.4972500000000002, 0.33950000000000014, 0.30799999999999983, 0.2895000000000003, 0.13500000000000156, -0.022999999999999687, -0.06025000000000169], zp_timestamp='2026-04-16T00:42:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:46:26.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:46:26.885 [DEBUG] [Thread-30229] [transport.py] [_log()] starting thread (client mode): 0xf1336440
2026-04-16T02:46:26.885 [DEBUG] [Thread-30229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:46:26.902 [DEBUG] [Thread-30229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:46:26.902 [INFO] [Thread-30229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:46:26.910 [DEBUG] [Thread-30229] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:46:26.910 [DEBUG] [Thread-30229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:46:26.910 [DEBUG] [Thread-30229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:46:26.910 [DEBUG] [Thread-30229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:46:26.910 [DEBUG] [Thread-30229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:46:26.910 [DEBUG] [Thread-30229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:46:26.910 [DEBUG] [Thread-30229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:46:26.910 [DEBUG] [Thread-30229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:46:26.911 [DEBUG] [Thread-30229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:46:26.911 [DEBUG] [Thread-30229] [transport.py] [_log()] client lang: <none>
2026-04-16T02:46:26.911 [DEBUG] [Thread-30229] [transport.py] [_log()] server lang: <none>
2026-04-16T02:46:26.911 [DEBUG] [Thread-30229] [transport.py] [_log()] kex follows: False
2026-04-16T02:46:26.911 [DEBUG] [Thread-30229] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:46:26.911 [DEBUG] [Thread-30229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:46:26.911 [DEBUG] [Thread-30229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:46:26.911 [DEBUG] [Thread-30229] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:46:26.911 [DEBUG] [Thread-30229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:46:26.911 [DEBUG] [Thread-30229] [transport.py] [_log()] Compression: none
2026-04-16T02:46:26.911 [DEBUG] [Thread-30229] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:46:26.969 [DEBUG] [Thread-30229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:46:26.969 [DEBUG] [Thread-30229] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:46:26.970 [DEBUG] [Thread-30229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:46:26.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:46:26.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:46:27.029 [DEBUG] [Thread-30229] [transport.py] [_log()] userauth is OK
2026-04-16T02:46:27.029 [DEBUG] [Thread-30229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:46:27.030 [DEBUG] [Thread-30229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:46:27.030 [DEBUG] [Thread-30229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:46:27.030 [DEBUG] [Thread-30229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:46:27.055 [INFO] [Thread-30229] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:46:27.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:46:27.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:46:27.911 [DEBUG] [Thread-30229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:46:27.912 [DEBUG] [Thread-30229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:46:27.958 [DEBUG] [Thread-30229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:46:27.959 [DEBUG] [Thread-30229] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:46:27.967 [DEBUG] [Thread-30229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:46:27.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:46:27.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')
2026-04-16T02:46:27.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
2026-04-16T02:46:27.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:46:27.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:46:27.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:46:28.002 [DEBUG] [Thread-30229] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:46:31.698 [DEBUG] [Thread-23763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:46:41.119 [DEBUG] [Thread-30231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:46:54.969 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:46:54.970 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:46:56.164 [DEBUG] [Thread-30232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:46:58.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:46:58.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:46:58.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
2026-04-16T02:46:59.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 46, 49), 1.23204, 91.9091, 0.0, 14.292, 8.52987, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:46:59.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:46:49
2026-04-16T02:46:59.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:47:00.118 [DEBUG] [Thread-30233] [transport.py] [_log()] starting thread (client mode): 0xf1364c40
2026-04-16T02:47:00.118 [DEBUG] [Thread-30233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:47:00.138 [DEBUG] [Thread-30233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:47:00.139 [INFO] [Thread-30233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:47:00.140 [DEBUG] [Thread-30233] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:47:00.140 [DEBUG] [Thread-30233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:47:00.140 [DEBUG] [Thread-30233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:47:00.140 [DEBUG] [Thread-30233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:47:00.140 [DEBUG] [Thread-30233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:47:00.140 [DEBUG] [Thread-30233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:47:00.140 [DEBUG] [Thread-30233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:47:00.140 [DEBUG] [Thread-30233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:47:00.141 [DEBUG] [Thread-30233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:47:00.141 [DEBUG] [Thread-30233] [transport.py] [_log()] client lang: <none>
2026-04-16T02:47:00.141 [DEBUG] [Thread-30233] [transport.py] [_log()] server lang: <none>
2026-04-16T02:47:00.141 [DEBUG] [Thread-30233] [transport.py] [_log()] kex follows: False
2026-04-16T02:47:00.141 [DEBUG] [Thread-30233] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:47:00.141 [DEBUG] [Thread-30233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:47:00.141 [DEBUG] [Thread-30233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:47:00.141 [DEBUG] [Thread-30233] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:47:00.141 [DEBUG] [Thread-30233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:47:00.141 [DEBUG] [Thread-30233] [transport.py] [_log()] Compression: none
2026-04-16T02:47:00.141 [DEBUG] [Thread-30233] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:47:00.159 [DEBUG] [Thread-30233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:47:00.159 [DEBUG] [Thread-30233] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:47:00.159 [DEBUG] [Thread-30233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:47:00.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:47:00.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:47:00.160 [DEBUG] [Thread-30233] [transport.py] [_log()] userauth is OK
2026-04-16T02:47:00.160 [DEBUG] [Thread-30233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:47:00.160 [DEBUG] [Thread-30233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:47:00.160 [DEBUG] [Thread-30233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:47:00.160 [DEBUG] [Thread-30233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:47:00.173 [INFO] [Thread-30233] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:47:00.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:47:00.958 [DEBUG] [Thread-30233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:47:00.959 [DEBUG] [Thread-30233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:47:00.959 [DEBUG] [Thread-30233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:47:00.999 [DEBUG] [Thread-30233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:47:00.999 [DEBUG] [Thread-30233] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:47:01.002 [DEBUG] [Thread-30233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:47:01.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:47:01.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:47:01.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:47:01.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:47:01.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:47:01.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:47:01.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:47:01.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:47:01.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:47:01.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.032074 -999.00   +8.80   4.79     90   +7.30 1 1 1 3 1     0    0 1.26 -10.17 .NESW 7.5 4.8 114.0 13.2 9.1 -25.6 9.0 -24.4 8.7 -22.1 9.0 -24.3
2026-04-16T02:47:01.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:47:01.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:47:01.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.032074
2026-04-16T02:47:01.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:47:01.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:47:01.028 [DEBUG] [Thread-30233] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:47:01.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:47:01.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:47:01.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:47:01.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:46:49', tmtdew=1.23204, humidity=91.9091, cloud=0.0, wind=14.292, temperature=8.52987, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:46:11.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.628, nan, nan, nan, nan, nan, 2.8264999999999993, nan, 2.437249999999999, nan, nan, 1.7647500000000012, 0.6012500000000003, 1.362499999999999, 0.37150000000000016, 0.67875, 0.5505000000000004, 0.45750000000000046, 0.44400000000000084, 0.30150000000000077, -0.03399999999999892, 0.0022500000000000853], zp_timestamp='2026-04-16T00:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:47:01.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:47:01.284 [DEBUG] [Thread-30236] [transport.py] [_log()] starting thread (client mode): 0xee907970
2026-04-16T02:47:01.284 [DEBUG] [Thread-30236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:47:01.298 [DEBUG] [Thread-30236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:47:01.298 [INFO] [Thread-30236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:47:01.305 [DEBUG] [Thread-30236] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:47:01.306 [DEBUG] [Thread-30236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:47:01.306 [DEBUG] [Thread-30236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:47:01.306 [DEBUG] [Thread-30236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:47:01.306 [DEBUG] [Thread-30236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:47:01.306 [DEBUG] [Thread-30236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:47:01.306 [DEBUG] [Thread-30236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:47:01.306 [DEBUG] [Thread-30236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:47:01.306 [DEBUG] [Thread-30236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:47:01.306 [DEBUG] [Thread-30236] [transport.py] [_log()] client lang: <none>
2026-04-16T02:47:01.306 [DEBUG] [Thread-30236] [transport.py] [_log()] server lang: <none>
2026-04-16T02:47:01.306 [DEBUG] [Thread-30236] [transport.py] [_log()] kex follows: False
2026-04-16T02:47:01.306 [DEBUG] [Thread-30236] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:47:01.307 [DEBUG] [Thread-30236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:47:01.307 [DEBUG] [Thread-30236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:47:01.307 [DEBUG] [Thread-30236] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:47:01.307 [DEBUG] [Thread-30236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:47:01.307 [DEBUG] [Thread-30236] [transport.py] [_log()] Compression: none
2026-04-16T02:47:01.307 [DEBUG] [Thread-30236] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:47:01.361 [DEBUG] [Thread-30236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:47:01.361 [DEBUG] [Thread-30236] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:47:01.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:47:01.362 [DEBUG] [Thread-30236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:47:01.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:47:01.418 [DEBUG] [Thread-30236] [transport.py] [_log()] userauth is OK
2026-04-16T02:47:01.418 [DEBUG] [Thread-30236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:47:01.418 [DEBUG] [Thread-30236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:47:01.418 [DEBUG] [Thread-30236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:47:01.418 [DEBUG] [Thread-30236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:47:01.446 [INFO] [Thread-30236] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:47:01.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:47:01.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:47:02.286 [DEBUG] [Thread-30236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:47:02.286 [DEBUG] [Thread-30236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:47:02.334 [DEBUG] [Thread-30236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:47:02.334 [DEBUG] [Thread-30236] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:47:02.343 [DEBUG] [Thread-30236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:47:02.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:47:02.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')
2026-04-16T02:47:02.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-16T02:47:02.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:47:02.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:47:02.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:47:02.378 [DEBUG] [Thread-30236] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:47:07.390 [DEBUG] [Thread-30238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:47:11.198 [DEBUG] [Thread-30239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:47:26.242 [DEBUG] [Thread-30240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:47:32.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:47:32.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:47:32.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
2026-04-16T02:47:33.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 47, 25), 1.36589, 90.9545, 0.0, 12.3167, 8.69829, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:47:33.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:47:25
2026-04-16T02:47:34.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:47:34.647 [DEBUG] [Thread-30241] [transport.py] [_log()] starting thread (client mode): 0xf1337250
2026-04-16T02:47:34.647 [DEBUG] [Thread-30241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:47:34.667 [DEBUG] [Thread-30241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:47:34.667 [INFO] [Thread-30241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:47:34.670 [DEBUG] [Thread-30241] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:47:34.670 [DEBUG] [Thread-30241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:47:34.670 [DEBUG] [Thread-30241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:47:34.671 [DEBUG] [Thread-30241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:47:34.671 [DEBUG] [Thread-30241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:47:34.671 [DEBUG] [Thread-30241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:47:34.671 [DEBUG] [Thread-30241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:47:34.671 [DEBUG] [Thread-30241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:47:34.671 [DEBUG] [Thread-30241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:47:34.671 [DEBUG] [Thread-30241] [transport.py] [_log()] client lang: <none>
2026-04-16T02:47:34.671 [DEBUG] [Thread-30241] [transport.py] [_log()] server lang: <none>
2026-04-16T02:47:34.671 [DEBUG] [Thread-30241] [transport.py] [_log()] kex follows: False
2026-04-16T02:47:34.671 [DEBUG] [Thread-30241] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:47:34.671 [DEBUG] [Thread-30241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:47:34.672 [DEBUG] [Thread-30241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:47:34.672 [DEBUG] [Thread-30241] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:47:34.672 [DEBUG] [Thread-30241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:47:34.672 [DEBUG] [Thread-30241] [transport.py] [_log()] Compression: none
2026-04-16T02:47:34.672 [DEBUG] [Thread-30241] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:47:34.688 [DEBUG] [Thread-30241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:47:34.689 [DEBUG] [Thread-30241] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:47:34.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:47:34.689 [DEBUG] [Thread-30241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:47:34.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:47:34.732 [DEBUG] [Thread-30241] [transport.py] [_log()] userauth is OK
2026-04-16T02:47:34.733 [DEBUG] [Thread-30241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:47:34.733 [DEBUG] [Thread-30241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:47:34.733 [DEBUG] [Thread-30241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:47:34.733 [DEBUG] [Thread-30241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:47:34.757 [INFO] [Thread-30241] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:47:34.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:47:35.559 [DEBUG] [Thread-30241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:47:35.559 [DEBUG] [Thread-30241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:47:35.560 [DEBUG] [Thread-30241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:47:35.600 [DEBUG] [Thread-30241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:47:35.600 [DEBUG] [Thread-30241] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:47:35.603 [DEBUG] [Thread-30241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:47:35.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:47:35.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:47:35.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:47:35.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:47:35.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:47:35.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:47:35.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:47:35.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:47:35.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:47:35.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.032421 -999.00   +8.70   7.67     90   +7.30 1 1 1 3 1     0    0 1.30 -9.63 .NESW 4.2 7.7 88.0 11.8 9.1 -25.7 9.0 -24.4 8.7 -22.4 9.0 -24.2
2026-04-16T02:47:35.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:47:35.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:47:35.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.032421
2026-04-16T02:47:35.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:47:35.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:47:35.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:47:35.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:47:35.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:47:35.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:47:25', tmtdew=1.36589, humidity=90.9545, cloud=0.0, wind=12.3167, temperature=8.69829, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:46:41.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.628, nan, nan, nan, nan, nan, 2.8264999999999993, nan, 2.437249999999999, nan, nan, 1.7647500000000012, 0.6012500000000003, 1.362499999999999, 0.37150000000000016, 0.67875, 0.5505000000000004, 0.45750000000000046, 0.44400000000000084, 0.30150000000000077, -0.03399999999999892, 0.0022500000000000853], zp_timestamp='2026-04-16T00:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:47:35.627 [DEBUG] [Thread-30241] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:47:35.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:47:41.271 [DEBUG] [Thread-30244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:47:55.178 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:47:55.180 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:47:56.314 [DEBUG] [Thread-30245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:48:07.552 [DEBUG] [Thread-30246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:48:11.343 [DEBUG] [Thread-30247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:48:26.370 [DEBUG] [Thread-30248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:48:41.399 [DEBUG] [Thread-30249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:48:55.393 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:48:55.394 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:48:56.427 [DEBUG] [Thread-30250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:49:07.738 [DEBUG] [Thread-30251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:49:11.455 [DEBUG] [Thread-30252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:49:26.485 [DEBUG] [Thread-30253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:49:41.513 [DEBUG] [Thread-30254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:49:49.450 [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
2026-04-16T02:49:55.595 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:49:55.597 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:49:56.544 [DEBUG] [Thread-30255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:50:07.904 [DEBUG] [Thread-30256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:50:11.572 [DEBUG] [Thread-30257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:50:19.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:50:19.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:50:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T02:50:20.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 49, 48), 1.20495, 92.076, 0.0, 14.2567, 8.46409, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:50:20.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:49:48
2026-04-16T02:50:21.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:50:21.578 [DEBUG] [Thread-30258] [transport.py] [_log()] starting thread (client mode): 0xee9071f0
2026-04-16T02:50:21.578 [DEBUG] [Thread-30258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:50:21.599 [DEBUG] [Thread-30258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:50:21.599 [INFO] [Thread-30258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:50:21.600 [DEBUG] [Thread-30258] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:50:21.601 [DEBUG] [Thread-30258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:50:21.601 [DEBUG] [Thread-30258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:50:21.601 [DEBUG] [Thread-30258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:50:21.601 [DEBUG] [Thread-30258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:50:21.601 [DEBUG] [Thread-30258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:50:21.601 [DEBUG] [Thread-30258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:50:21.601 [DEBUG] [Thread-30258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:50:21.601 [DEBUG] [Thread-30258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:50:21.601 [DEBUG] [Thread-30258] [transport.py] [_log()] client lang: <none>
2026-04-16T02:50:21.601 [DEBUG] [Thread-30258] [transport.py] [_log()] server lang: <none>
2026-04-16T02:50:21.601 [DEBUG] [Thread-30258] [transport.py] [_log()] kex follows: False
2026-04-16T02:50:21.601 [DEBUG] [Thread-30258] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:50:21.602 [DEBUG] [Thread-30258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:50:21.602 [DEBUG] [Thread-30258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:50:21.602 [DEBUG] [Thread-30258] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:50:21.602 [DEBUG] [Thread-30258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:50:21.602 [DEBUG] [Thread-30258] [transport.py] [_log()] Compression: none
2026-04-16T02:50:21.602 [DEBUG] [Thread-30258] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:50:21.610 [DEBUG] [Thread-30258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:50:21.611 [DEBUG] [Thread-30258] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:50:21.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:50:21.611 [DEBUG] [Thread-30258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:50:21.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:50:21.612 [DEBUG] [Thread-30258] [transport.py] [_log()] userauth is OK
2026-04-16T02:50:21.612 [DEBUG] [Thread-30258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:50:21.612 [DEBUG] [Thread-30258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:50:21.612 [DEBUG] [Thread-30258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:50:21.612 [DEBUG] [Thread-30258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:50:21.630 [INFO] [Thread-30258] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:50:21.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:50:26.601 [DEBUG] [Thread-30260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:50:29.743 [DEBUG] [Thread-30258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:50:29.743 [DEBUG] [Thread-30258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:50:29.744 [DEBUG] [Thread-30258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:50:29.784 [DEBUG] [Thread-30258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:50:29.784 [DEBUG] [Thread-30258] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:50:29.786 [DEBUG] [Thread-30258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:50:29.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:50:29.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:50:29.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:50:29.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:50:29.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:50:29.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:50:29.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:50:29.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:50:29.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:50:29.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.034504 -999.00   +8.80  11.30     90   +7.30 1 1 1 3 1     0    0 1.27 -9.30 zNESW 11.8 11.3 65.0 13.6 9.1 -25.5 9.0 -24.3 8.7 -22.1 9.0 -24.4
2026-04-16T02:50:29.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:50:29.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:50:29.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.034504
2026-04-16T02:50:29.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:50:29.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:50:29.876 [DEBUG] [Thread-30258] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:50:29.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:50:29.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:50:29.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:50:29.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:49:48', tmtdew=1.20495, humidity=92.076, cloud=0.0, wind=14.2567, temperature=8.46409, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:49:41.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.628, nan, nan, nan, nan, nan, 2.8264999999999993, nan, 2.437249999999999, nan, nan, 1.7647500000000012, 0.6012500000000003, 1.362499999999999, 0.37150000000000016, 0.67875, 0.5505000000000004, 0.45750000000000046, 0.44400000000000084, 0.30150000000000077, -0.03399999999999892, 0.0022500000000000853], zp_timestamp='2026-04-16T00:48:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:50:30.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:50:30.134 [DEBUG] [Thread-30262] [transport.py] [_log()] starting thread (client mode): 0xee9927a0
2026-04-16T02:50:30.134 [DEBUG] [Thread-30262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:50:30.148 [DEBUG] [Thread-30262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:50:30.148 [INFO] [Thread-30262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:50:30.157 [DEBUG] [Thread-30262] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:50:30.157 [DEBUG] [Thread-30262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:50:30.157 [DEBUG] [Thread-30262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:50:30.157 [DEBUG] [Thread-30262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:50:30.158 [DEBUG] [Thread-30262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:50:30.158 [DEBUG] [Thread-30262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:50:30.158 [DEBUG] [Thread-30262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:50:30.158 [DEBUG] [Thread-30262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:50:30.158 [DEBUG] [Thread-30262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:50:30.158 [DEBUG] [Thread-30262] [transport.py] [_log()] client lang: <none>
2026-04-16T02:50:30.158 [DEBUG] [Thread-30262] [transport.py] [_log()] server lang: <none>
2026-04-16T02:50:30.158 [DEBUG] [Thread-30262] [transport.py] [_log()] kex follows: False
2026-04-16T02:50:30.158 [DEBUG] [Thread-30262] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:50:30.158 [DEBUG] [Thread-30262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:50:30.158 [DEBUG] [Thread-30262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:50:30.158 [DEBUG] [Thread-30262] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:50:30.159 [DEBUG] [Thread-30262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:50:30.159 [DEBUG] [Thread-30262] [transport.py] [_log()] Compression: none
2026-04-16T02:50:30.159 [DEBUG] [Thread-30262] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:50:30.216 [DEBUG] [Thread-30262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:50:30.217 [DEBUG] [Thread-30262] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:50:30.217 [DEBUG] [Thread-30262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:50:30.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:50:30.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:50:30.283 [DEBUG] [Thread-30262] [transport.py] [_log()] userauth is OK
2026-04-16T02:50:30.283 [DEBUG] [Thread-30262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:50:30.283 [DEBUG] [Thread-30262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:50:30.283 [DEBUG] [Thread-30262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:50:30.283 [DEBUG] [Thread-30262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:50:30.309 [INFO] [Thread-30262] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:50:30.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:50:30.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:50:31.155 [DEBUG] [Thread-30262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:50:31.155 [DEBUG] [Thread-30262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:50:31.205 [DEBUG] [Thread-30262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:50:31.205 [DEBUG] [Thread-30262] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:50:31.217 [DEBUG] [Thread-30262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:50:31.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:50: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')
2026-04-16T02:50: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
2026-04-16T02:50:31.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:50:31.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:50:31.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:50:31.254 [DEBUG] [Thread-30262] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:50:41.634 [DEBUG] [Thread-30264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:50:55.804 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:50:55.806 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:50:56.680 [DEBUG] [Thread-30265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:51:01.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:51:01.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:51:01.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
2026-04-16T02:51:02.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 50, 23), 1.35496, 91.0214, 0.0, 10.8871, 8.61545, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:51:02.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:50:23
2026-04-16T02:51:03.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:51:03.561 [DEBUG] [Thread-30266] [transport.py] [_log()] starting thread (client mode): 0xee9f9390
2026-04-16T02:51:03.562 [DEBUG] [Thread-30266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:51:03.580 [DEBUG] [Thread-30266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:51:03.580 [INFO] [Thread-30266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:51:03.583 [DEBUG] [Thread-30266] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:51:03.583 [DEBUG] [Thread-30266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:51:03.583 [DEBUG] [Thread-30266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:51:03.584 [DEBUG] [Thread-30266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:51:03.584 [DEBUG] [Thread-30266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:51:03.584 [DEBUG] [Thread-30266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:51:03.584 [DEBUG] [Thread-30266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:51:03.584 [DEBUG] [Thread-30266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:51:03.584 [DEBUG] [Thread-30266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:51:03.584 [DEBUG] [Thread-30266] [transport.py] [_log()] client lang: <none>
2026-04-16T02:51:03.584 [DEBUG] [Thread-30266] [transport.py] [_log()] server lang: <none>
2026-04-16T02:51:03.584 [DEBUG] [Thread-30266] [transport.py] [_log()] kex follows: False
2026-04-16T02:51:03.584 [DEBUG] [Thread-30266] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:51:03.584 [DEBUG] [Thread-30266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:51:03.584 [DEBUG] [Thread-30266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:51:03.585 [DEBUG] [Thread-30266] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:51:03.585 [DEBUG] [Thread-30266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:51:03.585 [DEBUG] [Thread-30266] [transport.py] [_log()] Compression: none
2026-04-16T02:51:03.585 [DEBUG] [Thread-30266] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:51:03.601 [DEBUG] [Thread-30266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:51:03.601 [DEBUG] [Thread-30266] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:51:03.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:51:03.602 [DEBUG] [Thread-30266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:51:03.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:51:03.603 [DEBUG] [Thread-30266] [transport.py] [_log()] userauth is OK
2026-04-16T02:51:03.603 [DEBUG] [Thread-30266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:51:03.603 [DEBUG] [Thread-30266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:51:03.603 [DEBUG] [Thread-30266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:51:03.603 [DEBUG] [Thread-30266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:51:03.620 [INFO] [Thread-30266] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:51:03.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:51:04.400 [DEBUG] [Thread-30266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:51:04.401 [DEBUG] [Thread-30266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:51:04.401 [DEBUG] [Thread-30266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:51:04.441 [DEBUG] [Thread-30266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:51:04.441 [DEBUG] [Thread-30266] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:51:04.444 [DEBUG] [Thread-30266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:51:04.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:51:04.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:51:04.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:51:04.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:51:04.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:51:04.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:51:04.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:51:04.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:51:04.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:51:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.034852 -999.00   +8.80   9.80     90   +7.30 1 1 1 3 1     0    0 1.27 -9.28 .NES. 9.5 9.8 68.0 14.5 9.1 -25.7 9.0 -24.5 8.7 -22.0 9.0 -24.1
2026-04-16T02:51:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:51:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:51:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.034852
2026-04-16T02:51:04.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:51:04.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:51:04.469 [DEBUG] [Thread-30266] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:51:04.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:51:04.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:51:04.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:51:04.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:50:23', tmtdew=1.35496, humidity=91.0214, cloud=0.0, wind=10.8871, temperature=8.61545, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:50:11.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.628, nan, nan, nan, nan, nan, 2.8264999999999993, nan, 2.437249999999999, nan, nan, 1.7647500000000012, 0.6012500000000003, 1.362499999999999, 0.37150000000000016, 0.67875, 0.5505000000000004, 0.45750000000000046, 0.44400000000000084, 0.30150000000000077, -0.03399999999999892, 0.0022500000000000853], zp_timestamp='2026-04-16T00:48:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:51:04.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:51:04.726 [DEBUG] [Thread-30269] [transport.py] [_log()] starting thread (client mode): 0xee9fb640
2026-04-16T02:51:04.726 [DEBUG] [Thread-30269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:51:04.741 [DEBUG] [Thread-30269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:51:04.741 [INFO] [Thread-30269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:51:04.749 [DEBUG] [Thread-30269] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:51:04.749 [DEBUG] [Thread-30269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:51:04.749 [DEBUG] [Thread-30269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:51:04.749 [DEBUG] [Thread-30269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:51:04.749 [DEBUG] [Thread-30269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:51:04.749 [DEBUG] [Thread-30269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:51:04.750 [DEBUG] [Thread-30269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:51:04.750 [DEBUG] [Thread-30269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:51:04.750 [DEBUG] [Thread-30269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:51:04.750 [DEBUG] [Thread-30269] [transport.py] [_log()] client lang: <none>
2026-04-16T02:51:04.750 [DEBUG] [Thread-30269] [transport.py] [_log()] server lang: <none>
2026-04-16T02:51:04.750 [DEBUG] [Thread-30269] [transport.py] [_log()] kex follows: False
2026-04-16T02:51:04.750 [DEBUG] [Thread-30269] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:51:04.750 [DEBUG] [Thread-30269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:51:04.751 [DEBUG] [Thread-30269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:51:04.751 [DEBUG] [Thread-30269] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:51:04.751 [DEBUG] [Thread-30269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:51:04.751 [DEBUG] [Thread-30269] [transport.py] [_log()] Compression: none
2026-04-16T02:51:04.751 [DEBUG] [Thread-30269] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:51:04.805 [DEBUG] [Thread-30269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:51:04.805 [DEBUG] [Thread-30269] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:51:04.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:51:04.806 [DEBUG] [Thread-30269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:51:04.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:51:04.861 [DEBUG] [Thread-30269] [transport.py] [_log()] userauth is OK
2026-04-16T02:51:04.862 [DEBUG] [Thread-30269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:51:04.862 [DEBUG] [Thread-30269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:51:04.862 [DEBUG] [Thread-30269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:51:04.862 [DEBUG] [Thread-30269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:51:04.888 [INFO] [Thread-30269] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:51:04.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:51:04.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:51:05.712 [DEBUG] [Thread-30269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:51:05.713 [DEBUG] [Thread-30269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:51:05.759 [DEBUG] [Thread-30269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:51:05.759 [DEBUG] [Thread-30269] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:51:05.768 [DEBUG] [Thread-30269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:51:05.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:51:05.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')
2026-04-16T02:51:05.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
2026-04-16T02:51:05.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:51:05.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:51:05.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:51:05.799 [DEBUG] [Thread-30269] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:51:08.068 [DEBUG] [Thread-30271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:51:11.711 [DEBUG] [Thread-30272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:51:26.755 [DEBUG] [Thread-30273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:51:35.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:51:35.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:51:35.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T02:51:37.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 50, 59), 1.31538, 90.9549, 0.0, 12.4225, 8.59875, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:51:37.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:50:59
2026-04-16T02:51:37.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:51:38.098 [DEBUG] [Thread-30274] [transport.py] [_log()] starting thread (client mode): 0xee9542b0
2026-04-16T02:51:38.099 [DEBUG] [Thread-30274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:51:38.118 [DEBUG] [Thread-30274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:51:38.118 [INFO] [Thread-30274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:51:38.121 [DEBUG] [Thread-30274] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:51:38.121 [DEBUG] [Thread-30274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:51:38.121 [DEBUG] [Thread-30274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:51:38.121 [DEBUG] [Thread-30274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:51:38.122 [DEBUG] [Thread-30274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:51:38.122 [DEBUG] [Thread-30274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:51:38.122 [DEBUG] [Thread-30274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:51:38.122 [DEBUG] [Thread-30274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:51:38.122 [DEBUG] [Thread-30274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:51:38.122 [DEBUG] [Thread-30274] [transport.py] [_log()] client lang: <none>
2026-04-16T02:51:38.122 [DEBUG] [Thread-30274] [transport.py] [_log()] server lang: <none>
2026-04-16T02:51:38.122 [DEBUG] [Thread-30274] [transport.py] [_log()] kex follows: False
2026-04-16T02:51:38.122 [DEBUG] [Thread-30274] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:51:38.122 [DEBUG] [Thread-30274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:51:38.122 [DEBUG] [Thread-30274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:51:38.123 [DEBUG] [Thread-30274] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:51:38.123 [DEBUG] [Thread-30274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:51:38.123 [DEBUG] [Thread-30274] [transport.py] [_log()] Compression: none
2026-04-16T02:51:38.123 [DEBUG] [Thread-30274] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:51:38.139 [DEBUG] [Thread-30274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:51:38.139 [DEBUG] [Thread-30274] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:51:38.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:51:38.140 [DEBUG] [Thread-30274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:51:38.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:51:38.141 [DEBUG] [Thread-30274] [transport.py] [_log()] userauth is OK
2026-04-16T02:51:38.141 [DEBUG] [Thread-30274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:51:38.141 [DEBUG] [Thread-30274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:51:38.142 [DEBUG] [Thread-30274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:51:38.142 [DEBUG] [Thread-30274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:51:38.177 [INFO] [Thread-30274] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:51:38.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:51:38.909 [DEBUG] [Thread-30274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:51:38.910 [DEBUG] [Thread-30274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:51:38.910 [DEBUG] [Thread-30274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:51:38.950 [DEBUG] [Thread-30274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:51:38.950 [DEBUG] [Thread-30274] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:51:38.953 [DEBUG] [Thread-30274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:51:38.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:51:38.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:51:38.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:51:38.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:51:38.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:51:38.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:51:38.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:51:38.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:51:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:51:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.035199 -999.00   +8.80   9.20     90   +7.30 1 1 1 3 1     0    0 1.27 -10.03 .NES. 7.4 9.2 97.1 13.7 9.1 -25.6 8.9 -24.4 8.7 -22.2 9.0 -24.1
2026-04-16T02:51:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:51:38.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:51:38.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.035199
2026-04-16T02:51:38.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:51:38.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:51:38.976 [DEBUG] [Thread-30274] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:51:38.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:51:38.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:51:38.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:51:38.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:50:59', tmtdew=1.31538, humidity=90.9549, cloud=0.0, wind=12.4225, temperature=8.59875, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:50:41.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.628, nan, nan, nan, nan, nan, 2.8264999999999993, nan, 2.437249999999999, nan, nan, 1.7647500000000012, 0.6012500000000003, 1.362499999999999, 0.37150000000000016, 0.67875, 0.5505000000000004, 0.45750000000000046, 0.44400000000000084, 0.30150000000000077, -0.03399999999999892, 0.0022500000000000853], zp_timestamp='2026-04-16T00:48:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:51:39.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:51:39.233 [DEBUG] [Thread-30277] [transport.py] [_log()] starting thread (client mode): 0xee9fa050
2026-04-16T02:51:39.233 [DEBUG] [Thread-30277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:51:39.247 [DEBUG] [Thread-30277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:51:39.247 [INFO] [Thread-30277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:51:39.255 [DEBUG] [Thread-30277] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:51:39.255 [DEBUG] [Thread-30277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:51:39.255 [DEBUG] [Thread-30277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:51:39.255 [DEBUG] [Thread-30277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:51:39.255 [DEBUG] [Thread-30277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:51:39.255 [DEBUG] [Thread-30277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:51:39.255 [DEBUG] [Thread-30277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:51:39.255 [DEBUG] [Thread-30277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:51:39.256 [DEBUG] [Thread-30277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:51:39.256 [DEBUG] [Thread-30277] [transport.py] [_log()] client lang: <none>
2026-04-16T02:51:39.256 [DEBUG] [Thread-30277] [transport.py] [_log()] server lang: <none>
2026-04-16T02:51:39.256 [DEBUG] [Thread-30277] [transport.py] [_log()] kex follows: False
2026-04-16T02:51:39.256 [DEBUG] [Thread-30277] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:51:39.256 [DEBUG] [Thread-30277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:51:39.256 [DEBUG] [Thread-30277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:51:39.256 [DEBUG] [Thread-30277] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:51:39.256 [DEBUG] [Thread-30277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:51:39.256 [DEBUG] [Thread-30277] [transport.py] [_log()] Compression: none
2026-04-16T02:51:39.256 [DEBUG] [Thread-30277] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:51:39.313 [DEBUG] [Thread-30277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:51:39.313 [DEBUG] [Thread-30277] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:51:39.314 [DEBUG] [Thread-30277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:51:39.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:51:39.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:51:39.370 [DEBUG] [Thread-30277] [transport.py] [_log()] userauth is OK
2026-04-16T02:51:39.370 [DEBUG] [Thread-30277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:51:39.371 [DEBUG] [Thread-30277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:51:39.371 [DEBUG] [Thread-30277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:51:39.371 [DEBUG] [Thread-30277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:51:39.395 [INFO] [Thread-30277] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:51:39.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:51:39.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:51:40.200 [DEBUG] [Thread-30277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:51:40.200 [DEBUG] [Thread-30277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:51:40.248 [DEBUG] [Thread-30277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:51:40.248 [DEBUG] [Thread-30277] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:51:40.257 [DEBUG] [Thread-30277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:51:40.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:51:40.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')
2026-04-16T02:51:40.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
2026-04-16T02:51:40.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:51:40.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:51:40.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:51:40.291 [DEBUG] [Thread-30277] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:51:41.785 [DEBUG] [Thread-30279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:51:56.010 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:51:56.011 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:51:56.823 [DEBUG] [Thread-30280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:52:08.221 [DEBUG] [Thread-30281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:52:10.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:52:10.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:52:10.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
2026-04-16T02:52:11.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 51, 34), 1.21028, 92.0424, 0.0, 14.3273, 8.46386, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:52:11.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:51:34
2026-04-16T02:52:11.855 [DEBUG] [Thread-30282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:52:12.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:52:12.564 [DEBUG] [Thread-30283] [transport.py] [_log()] starting thread (client mode): 0xee954eb0
2026-04-16T02:52:12.564 [DEBUG] [Thread-30283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:52:12.583 [DEBUG] [Thread-30283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:52:12.583 [INFO] [Thread-30283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:52:12.585 [DEBUG] [Thread-30283] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:52:12.585 [DEBUG] [Thread-30283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:52:12.585 [DEBUG] [Thread-30283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:52:12.585 [DEBUG] [Thread-30283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:52:12.585 [DEBUG] [Thread-30283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:52:12.585 [DEBUG] [Thread-30283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:52:12.585 [DEBUG] [Thread-30283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:52:12.585 [DEBUG] [Thread-30283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:52:12.585 [DEBUG] [Thread-30283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:52:12.586 [DEBUG] [Thread-30283] [transport.py] [_log()] client lang: <none>
2026-04-16T02:52:12.586 [DEBUG] [Thread-30283] [transport.py] [_log()] server lang: <none>
2026-04-16T02:52:12.586 [DEBUG] [Thread-30283] [transport.py] [_log()] kex follows: False
2026-04-16T02:52:12.586 [DEBUG] [Thread-30283] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:52:12.586 [DEBUG] [Thread-30283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:52:12.586 [DEBUG] [Thread-30283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:52:12.586 [DEBUG] [Thread-30283] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:52:12.586 [DEBUG] [Thread-30283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:52:12.586 [DEBUG] [Thread-30283] [transport.py] [_log()] Compression: none
2026-04-16T02:52:12.586 [DEBUG] [Thread-30283] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:52:12.598 [DEBUG] [Thread-30283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:52:12.598 [DEBUG] [Thread-30283] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:52:12.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:52:12.599 [DEBUG] [Thread-30283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:52:12.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:52:12.600 [DEBUG] [Thread-30283] [transport.py] [_log()] userauth is OK
2026-04-16T02:52:12.600 [DEBUG] [Thread-30283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:52:12.600 [DEBUG] [Thread-30283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:52:12.600 [DEBUG] [Thread-30283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:52:12.600 [DEBUG] [Thread-30283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:52:12.624 [INFO] [Thread-30283] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:52:12.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:52:13.441 [DEBUG] [Thread-30283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:52:13.441 [DEBUG] [Thread-30283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:52:13.442 [DEBUG] [Thread-30283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:52:13.482 [DEBUG] [Thread-30283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:52:13.482 [DEBUG] [Thread-30283] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:52:13.485 [DEBUG] [Thread-30283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:52:13.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:52:13.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:52:13.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:52:13.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:52:13.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:52:13.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:52:13.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:52:13.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:52:13.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:52:13.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.035546 -999.00   +8.80   9.34     90   +7.30 1 1 1 3 1     0    0 1.23 -10.17 .NESW 9.6 9.3 88.5 13.3 9.1 -25.5 9.0 -24.4 8.7 -22.1 9.0 -24.4
2026-04-16T02:52:13.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:52:13.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:52:13.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.035546
2026-04-16T02:52:13.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:52:13.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:52:13.512 [DEBUG] [Thread-30283] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:52:13.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:52:13.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:52:13.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:52:13.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:51:34', tmtdew=1.21028, humidity=92.0424, cloud=0.0, wind=14.3273, temperature=8.46386, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:51:11.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.628, nan, nan, nan, nan, nan, 2.8264999999999993, nan, 2.437249999999999, nan, nan, 1.7647500000000012, 0.6012500000000003, 1.362499999999999, 0.37150000000000016, 0.67875, 0.5505000000000004, 0.45750000000000046, 0.44400000000000084, 0.30150000000000077, -0.03399999999999892, 0.0022500000000000853], zp_timestamp='2026-04-16T00:48:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:52:13.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:52:13.771 [DEBUG] [Thread-30286] [transport.py] [_log()] starting thread (client mode): 0xee9f9600
2026-04-16T02:52:13.771 [DEBUG] [Thread-30286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:52:13.789 [DEBUG] [Thread-30286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:52:13.789 [INFO] [Thread-30286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:52:13.797 [DEBUG] [Thread-30286] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:52:13.797 [DEBUG] [Thread-30286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:52:13.797 [DEBUG] [Thread-30286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:52:13.797 [DEBUG] [Thread-30286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:52:13.797 [DEBUG] [Thread-30286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:52:13.797 [DEBUG] [Thread-30286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:52:13.797 [DEBUG] [Thread-30286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:52:13.797 [DEBUG] [Thread-30286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:52:13.797 [DEBUG] [Thread-30286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:52:13.798 [DEBUG] [Thread-30286] [transport.py] [_log()] client lang: <none>
2026-04-16T02:52:13.798 [DEBUG] [Thread-30286] [transport.py] [_log()] server lang: <none>
2026-04-16T02:52:13.798 [DEBUG] [Thread-30286] [transport.py] [_log()] kex follows: False
2026-04-16T02:52:13.798 [DEBUG] [Thread-30286] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:52:13.798 [DEBUG] [Thread-30286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:52:13.798 [DEBUG] [Thread-30286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:52:13.798 [DEBUG] [Thread-30286] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:52:13.799 [DEBUG] [Thread-30286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:52:13.799 [DEBUG] [Thread-30286] [transport.py] [_log()] Compression: none
2026-04-16T02:52:13.799 [DEBUG] [Thread-30286] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:52:13.854 [DEBUG] [Thread-30286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:52:13.854 [DEBUG] [Thread-30286] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:52:13.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:52:13.855 [DEBUG] [Thread-30286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:52:13.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:52:13.911 [DEBUG] [Thread-30286] [transport.py] [_log()] userauth is OK
2026-04-16T02:52:13.911 [DEBUG] [Thread-30286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:52:13.911 [DEBUG] [Thread-30286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:52:13.911 [DEBUG] [Thread-30286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:52:13.911 [DEBUG] [Thread-30286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:52:13.936 [INFO] [Thread-30286] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:52:13.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:52:13.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:52:14.743 [DEBUG] [Thread-30286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:52:14.743 [DEBUG] [Thread-30286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:52:14.791 [DEBUG] [Thread-30286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:52:14.791 [DEBUG] [Thread-30286] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:52:14.800 [DEBUG] [Thread-30286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:52:14.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:52:14.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')
2026-04-16T02:52: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') -> 00000000
2026-04-16T02:52:14.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:52:14.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:52:14.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:52:14.835 [DEBUG] [Thread-30286] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:52:26.886 [DEBUG] [Thread-30288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:52:41.929 [DEBUG] [Thread-30289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:52:44.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:52:44.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:52:44.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
2026-04-16T02:52:46.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 52, 10), 1.35722, 91.0045, 0.0, 12.7577, 8.61547, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:52:46.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:52:10
2026-04-16T02:52:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:52:47.063 [DEBUG] [Thread-30290] [transport.py] [_log()] starting thread (client mode): 0xee9fa470
2026-04-16T02:52:47.064 [DEBUG] [Thread-30290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:52:47.082 [DEBUG] [Thread-30290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:52:47.082 [INFO] [Thread-30290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:52:47.085 [DEBUG] [Thread-30290] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:52:47.085 [DEBUG] [Thread-30290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:52:47.085 [DEBUG] [Thread-30290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:52:47.085 [DEBUG] [Thread-30290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:52:47.085 [DEBUG] [Thread-30290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:52:47.085 [DEBUG] [Thread-30290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:52:47.086 [DEBUG] [Thread-30290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:52:47.086 [DEBUG] [Thread-30290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:52:47.086 [DEBUG] [Thread-30290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:52:47.086 [DEBUG] [Thread-30290] [transport.py] [_log()] client lang: <none>
2026-04-16T02:52:47.086 [DEBUG] [Thread-30290] [transport.py] [_log()] server lang: <none>
2026-04-16T02:52:47.086 [DEBUG] [Thread-30290] [transport.py] [_log()] kex follows: False
2026-04-16T02:52:47.086 [DEBUG] [Thread-30290] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:52:47.086 [DEBUG] [Thread-30290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:52:47.086 [DEBUG] [Thread-30290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:52:47.086 [DEBUG] [Thread-30290] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:52:47.086 [DEBUG] [Thread-30290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:52:47.087 [DEBUG] [Thread-30290] [transport.py] [_log()] Compression: none
2026-04-16T02:52:47.087 [DEBUG] [Thread-30290] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:52:47.098 [DEBUG] [Thread-30290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:52:47.098 [DEBUG] [Thread-30290] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:52:47.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:52:47.099 [DEBUG] [Thread-30290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:52:47.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:52:47.100 [DEBUG] [Thread-30290] [transport.py] [_log()] userauth is OK
2026-04-16T02:52:47.100 [DEBUG] [Thread-30290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:52:47.100 [DEBUG] [Thread-30290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:52:47.100 [DEBUG] [Thread-30290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:52:47.100 [DEBUG] [Thread-30290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:52:47.117 [INFO] [Thread-30290] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:52:47.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:52:47.897 [DEBUG] [Thread-30290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:52:47.898 [DEBUG] [Thread-30290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:52:47.898 [DEBUG] [Thread-30290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:52:47.938 [DEBUG] [Thread-30290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:52:47.938 [DEBUG] [Thread-30290] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:52:47.941 [DEBUG] [Thread-30290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:52:47.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:52:47.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:52:47.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:52:47.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:52:47.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:52:47.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:52:47.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:52:47.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:52:47.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:52:47.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.036241 -999.00   +8.80  12.06     90   +7.30 1 1 1 3 1     0    0 1.24 -10.72 .NESW 11.6 12.1 66.4 12.8 9.1 -25.5 8.9 -24.4 8.7 -22.1 9.0 -24.3
2026-04-16T02:52:47.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:52:47.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:52:47.965 [DEBUG] [Thread-30290] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:52:47.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.036241
2026-04-16T02:52:47.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:52:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:52:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:52:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:52:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:52:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:52:10', tmtdew=1.35722, humidity=91.0045, cloud=0.0, wind=12.7577, temperature=8.61547, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:52:11.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3179999999999996, nan, nan, nan, nan, nan, 2.9194999999999993, 2.9099999999999993, 2.6682499999999987, nan, nan, nan, 0.6107500000000003, 1.9239999999999995, 0.48350000000000026, 0.8082500000000001, 0.6595000000000004, 0.42900000000000027, 0.4220000000000006, 0.32500000000000107, -0.023999999999999133, 0.010249999999999204], zp_timestamp='2026-04-16T00:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:52:48.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:52:48.226 [DEBUG] [Thread-30293] [transport.py] [_log()] starting thread (client mode): 0xee991840
2026-04-16T02:52:48.227 [DEBUG] [Thread-30293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:52:48.241 [DEBUG] [Thread-30293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:52:48.241 [INFO] [Thread-30293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:52:48.252 [DEBUG] [Thread-30293] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:52:48.252 [DEBUG] [Thread-30293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:52:48.252 [DEBUG] [Thread-30293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:52:48.252 [DEBUG] [Thread-30293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:52:48.252 [DEBUG] [Thread-30293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:52:48.252 [DEBUG] [Thread-30293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:52:48.252 [DEBUG] [Thread-30293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:52:48.253 [DEBUG] [Thread-30293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:52:48.253 [DEBUG] [Thread-30293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:52:48.253 [DEBUG] [Thread-30293] [transport.py] [_log()] client lang: <none>
2026-04-16T02:52:48.253 [DEBUG] [Thread-30293] [transport.py] [_log()] server lang: <none>
2026-04-16T02:52:48.253 [DEBUG] [Thread-30293] [transport.py] [_log()] kex follows: False
2026-04-16T02:52:48.253 [DEBUG] [Thread-30293] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:52:48.253 [DEBUG] [Thread-30293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:52:48.253 [DEBUG] [Thread-30293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:52:48.253 [DEBUG] [Thread-30293] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:52:48.253 [DEBUG] [Thread-30293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:52:48.253 [DEBUG] [Thread-30293] [transport.py] [_log()] Compression: none
2026-04-16T02:52:48.253 [DEBUG] [Thread-30293] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:52:48.306 [DEBUG] [Thread-30293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:52:48.307 [DEBUG] [Thread-30293] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:52:48.307 [DEBUG] [Thread-30293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:52:48.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:52:48.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:52:48.363 [DEBUG] [Thread-30293] [transport.py] [_log()] userauth is OK
2026-04-16T02:52:48.364 [DEBUG] [Thread-30293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:52:48.364 [DEBUG] [Thread-30293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:52:48.364 [DEBUG] [Thread-30293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:52:48.364 [DEBUG] [Thread-30293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:52:48.389 [INFO] [Thread-30293] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:52:48.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:52:48.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:52:49.200 [DEBUG] [Thread-30293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:52:49.200 [DEBUG] [Thread-30293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:52:49.248 [DEBUG] [Thread-30293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:52:49.248 [DEBUG] [Thread-30293] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:52:49.257 [DEBUG] [Thread-30293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:52:49.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:52:49.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')
2026-04-16T02:52:49.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
2026-04-16T02:52:49.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:52:49.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:52:49.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:52:49.291 [DEBUG] [Thread-30293] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:52:56.217 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:52:56.218 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:52:56.961 [DEBUG] [Thread-30295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:53:08.367 [DEBUG] [Thread-30296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:53:12.009 [DEBUG] [Thread-30297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:53:19.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:53:19.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:53:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T02:53:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 52, 46), 1.18926, 92.1749, 0.0, 13.9039, 8.46367, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:53:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:52:46
2026-04-16T02:53:20.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:53:21.436 [DEBUG] [Thread-30298] [transport.py] [_log()] starting thread (client mode): 0xee9f9ae0
2026-04-16T02:53:21.436 [DEBUG] [Thread-30298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:53:21.457 [DEBUG] [Thread-30298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:53:21.457 [INFO] [Thread-30298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:53:21.458 [DEBUG] [Thread-30298] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:53:21.459 [DEBUG] [Thread-30298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:53:21.459 [DEBUG] [Thread-30298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:53:21.459 [DEBUG] [Thread-30298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:53:21.459 [DEBUG] [Thread-30298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:53:21.459 [DEBUG] [Thread-30298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:53:21.459 [DEBUG] [Thread-30298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:53:21.459 [DEBUG] [Thread-30298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:53:21.459 [DEBUG] [Thread-30298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:53:21.459 [DEBUG] [Thread-30298] [transport.py] [_log()] client lang: <none>
2026-04-16T02:53:21.459 [DEBUG] [Thread-30298] [transport.py] [_log()] server lang: <none>
2026-04-16T02:53:21.459 [DEBUG] [Thread-30298] [transport.py] [_log()] kex follows: False
2026-04-16T02:53:21.459 [DEBUG] [Thread-30298] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:53:21.460 [DEBUG] [Thread-30298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:53:21.460 [DEBUG] [Thread-30298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:53:21.460 [DEBUG] [Thread-30298] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:53:21.460 [DEBUG] [Thread-30298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:53:21.460 [DEBUG] [Thread-30298] [transport.py] [_log()] Compression: none
2026-04-16T02:53:21.460 [DEBUG] [Thread-30298] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:53:21.476 [DEBUG] [Thread-30298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:53:21.477 [DEBUG] [Thread-30298] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:53:21.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:53:21.477 [DEBUG] [Thread-30298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:53:21.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:53:21.478 [DEBUG] [Thread-30298] [transport.py] [_log()] userauth is OK
2026-04-16T02:53:21.479 [DEBUG] [Thread-30298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:53:21.479 [DEBUG] [Thread-30298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:53:21.479 [DEBUG] [Thread-30298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:53:21.479 [DEBUG] [Thread-30298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:53:21.516 [INFO] [Thread-30298] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:53:21.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:53:22.282 [DEBUG] [Thread-30298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:53:22.283 [DEBUG] [Thread-30298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:53:22.283 [DEBUG] [Thread-30298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:53:22.323 [DEBUG] [Thread-30298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:53:22.323 [DEBUG] [Thread-30298] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:53:22.326 [DEBUG] [Thread-30298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:53:22.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:53:22.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:53:22.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:53:22.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:53:22.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:53:22.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:53:22.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:53:22.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:53:22.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:53:22.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.036588 -999.00   +8.80  11.71     90   +7.30 1 1 1 3 1     0    0 1.24 -10.44 .NESW 11.6 11.7 63.8 14.0 9.1 -25.7 8.9 -24.3 8.7 -22.1 8.9 -24.3
2026-04-16T02:53:22.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:53:22.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:53:22.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.036588
2026-04-16T02:53:22.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:53:22.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:53:22.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:53:22.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:53:22.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:53:22.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:52:46', tmtdew=1.18926, humidity=92.1749, cloud=0.0, wind=13.9039, temperature=8.46367, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:52:41.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3179999999999996, nan, nan, nan, nan, nan, 2.9194999999999993, 2.9099999999999993, 2.6682499999999987, nan, nan, nan, 0.6107500000000003, 1.9239999999999995, 0.48350000000000026, 0.8082500000000001, 0.6595000000000004, 0.42900000000000027, 0.4220000000000006, 0.32500000000000107, -0.023999999999999133, 0.010249999999999204], zp_timestamp='2026-04-16T00:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:53:22.352 [DEBUG] [Thread-30298] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:53:22.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:53:22.606 [DEBUG] [Thread-30301] [transport.py] [_log()] starting thread (client mode): 0xee9f95a0
2026-04-16T02:53:22.606 [DEBUG] [Thread-30301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:53:22.621 [DEBUG] [Thread-30301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:53:22.621 [INFO] [Thread-30301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:53:22.628 [DEBUG] [Thread-30301] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:53:22.628 [DEBUG] [Thread-30301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:53:22.628 [DEBUG] [Thread-30301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:53:22.628 [DEBUG] [Thread-30301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:53:22.628 [DEBUG] [Thread-30301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:53:22.628 [DEBUG] [Thread-30301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:53:22.629 [DEBUG] [Thread-30301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:53:22.629 [DEBUG] [Thread-30301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:53:22.629 [DEBUG] [Thread-30301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:53:22.629 [DEBUG] [Thread-30301] [transport.py] [_log()] client lang: <none>
2026-04-16T02:53:22.629 [DEBUG] [Thread-30301] [transport.py] [_log()] server lang: <none>
2026-04-16T02:53:22.629 [DEBUG] [Thread-30301] [transport.py] [_log()] kex follows: False
2026-04-16T02:53:22.629 [DEBUG] [Thread-30301] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:53:22.629 [DEBUG] [Thread-30301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:53:22.629 [DEBUG] [Thread-30301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:53:22.629 [DEBUG] [Thread-30301] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:53:22.629 [DEBUG] [Thread-30301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:53:22.630 [DEBUG] [Thread-30301] [transport.py] [_log()] Compression: none
2026-04-16T02:53:22.630 [DEBUG] [Thread-30301] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:53:22.686 [DEBUG] [Thread-30301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:53:22.687 [DEBUG] [Thread-30301] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:53:22.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:53:22.687 [DEBUG] [Thread-30301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:53:22.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:53:22.744 [DEBUG] [Thread-30301] [transport.py] [_log()] userauth is OK
2026-04-16T02:53:22.744 [DEBUG] [Thread-30301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:53:22.744 [DEBUG] [Thread-30301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:53:22.744 [DEBUG] [Thread-30301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:53:22.744 [DEBUG] [Thread-30301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:53:22.769 [INFO] [Thread-30301] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:53:22.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:53:22.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:53:23.588 [DEBUG] [Thread-30301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:53:23.588 [DEBUG] [Thread-30301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:53:23.636 [DEBUG] [Thread-30301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:53:23.636 [DEBUG] [Thread-30301] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:53:23.645 [DEBUG] [Thread-30301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:53:23.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:53: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')
2026-04-16T02:53:23.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
2026-04-16T02:53:23.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:53:23.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:53:23.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:53:23.679 [DEBUG] [Thread-30301] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:53:27.041 [DEBUG] [Thread-30303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:53:42.086 [DEBUG] [Thread-30304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:53:53.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:53:53.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:53:53.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
2026-04-16T02:53:55.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 53, 21), 1.34445, 91.0877, 0.0, 12.5284, 8.66541, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:53:55.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:53:21
2026-04-16T02:53:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:53:55.912 [DEBUG] [Thread-30305] [transport.py] [_log()] starting thread (client mode): 0xee9c3550
2026-04-16T02:53:55.912 [DEBUG] [Thread-30305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:53:55.932 [DEBUG] [Thread-30305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:53:55.932 [INFO] [Thread-30305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:53:55.935 [DEBUG] [Thread-30305] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:53:55.935 [DEBUG] [Thread-30305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:53:55.935 [DEBUG] [Thread-30305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:53:55.936 [DEBUG] [Thread-30305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:53:55.936 [DEBUG] [Thread-30305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:53:55.936 [DEBUG] [Thread-30305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:53:55.936 [DEBUG] [Thread-30305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:53:55.936 [DEBUG] [Thread-30305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:53:55.936 [DEBUG] [Thread-30305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:53:55.936 [DEBUG] [Thread-30305] [transport.py] [_log()] client lang: <none>
2026-04-16T02:53:55.936 [DEBUG] [Thread-30305] [transport.py] [_log()] server lang: <none>
2026-04-16T02:53:55.936 [DEBUG] [Thread-30305] [transport.py] [_log()] kex follows: False
2026-04-16T02:53:55.936 [DEBUG] [Thread-30305] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:53:55.936 [DEBUG] [Thread-30305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:53:55.937 [DEBUG] [Thread-30305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:53:55.937 [DEBUG] [Thread-30305] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:53:55.937 [DEBUG] [Thread-30305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:53:55.937 [DEBUG] [Thread-30305] [transport.py] [_log()] Compression: none
2026-04-16T02:53:55.937 [DEBUG] [Thread-30305] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:53:55.954 [DEBUG] [Thread-30305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:53:55.955 [DEBUG] [Thread-30305] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:53:55.955 [DEBUG] [Thread-30305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:53:55.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:53:55.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:53:55.956 [DEBUG] [Thread-30305] [transport.py] [_log()] userauth is OK
2026-04-16T02:53:55.956 [DEBUG] [Thread-30305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:53:55.957 [DEBUG] [Thread-30305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:53:55.957 [DEBUG] [Thread-30305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:53:55.957 [DEBUG] [Thread-30305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:53:55.975 [INFO] [Thread-30305] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:53:55.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:53:56.420 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:53:56.420 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:53:56.695 [DEBUG] [Thread-30305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:53:56.695 [DEBUG] [Thread-30305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:53:56.696 [DEBUG] [Thread-30305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:53:56.736 [DEBUG] [Thread-30305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:53:56.736 [DEBUG] [Thread-30305] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:53:56.739 [DEBUG] [Thread-30305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:53:56.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:53:56.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:53:56.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:53:56.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:53:56.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:53:56.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:53:56.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:53:56.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:53:56.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:53:56.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.036935 -999.00   +8.70  10.73     90   +7.30 1 1 1 3 1     0    0 1.22 -10.25 .NESW 7.7 10.7 68.7 14.1 9.1 -25.6 8.9 -24.3 8.6 -22.1 9.0 -24.3
2026-04-16T02:53:56.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:53:56.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:53:56.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.036935
2026-04-16T02:53:56.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:53:56.765 [DEBUG] [Thread-30305] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:53:56.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:53:56.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:53:56.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:53:56.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:53:56.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:53:21', tmtdew=1.34445, humidity=91.0877, cloud=0.0, wind=12.5284, temperature=8.66541, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:53:11.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3179999999999996, nan, nan, nan, nan, nan, 2.9194999999999993, 2.9099999999999993, 2.6682499999999987, nan, nan, nan, 0.6107500000000003, 1.9239999999999995, 0.48350000000000026, 0.8082500000000001, 0.6595000000000004, 0.42900000000000027, 0.4220000000000006, 0.32500000000000107, -0.023999999999999133, 0.010249999999999204], zp_timestamp='2026-04-16T00:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:53:57.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:53:57.025 [DEBUG] [Thread-30308] [transport.py] [_log()] starting thread (client mode): 0xee9c23b0
2026-04-16T02:53:57.026 [DEBUG] [Thread-30308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:53:57.040 [DEBUG] [Thread-30308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:53:57.040 [INFO] [Thread-30308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:53:57.047 [DEBUG] [Thread-30308] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:53:57.047 [DEBUG] [Thread-30308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:53:57.047 [DEBUG] [Thread-30308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:53:57.047 [DEBUG] [Thread-30308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:53:57.048 [DEBUG] [Thread-30308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:53:57.048 [DEBUG] [Thread-30308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:53:57.048 [DEBUG] [Thread-30308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:53:57.048 [DEBUG] [Thread-30308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:53:57.048 [DEBUG] [Thread-30308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:53:57.048 [DEBUG] [Thread-30308] [transport.py] [_log()] client lang: <none>
2026-04-16T02:53:57.048 [DEBUG] [Thread-30308] [transport.py] [_log()] server lang: <none>
2026-04-16T02:53:57.048 [DEBUG] [Thread-30308] [transport.py] [_log()] kex follows: False
2026-04-16T02:53:57.048 [DEBUG] [Thread-30308] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:53:57.048 [DEBUG] [Thread-30308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:53:57.048 [DEBUG] [Thread-30308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:53:57.049 [DEBUG] [Thread-30308] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:53:57.049 [DEBUG] [Thread-30308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:53:57.049 [DEBUG] [Thread-30308] [transport.py] [_log()] Compression: none
2026-04-16T02:53:57.049 [DEBUG] [Thread-30308] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:53:57.104 [DEBUG] [Thread-30308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:53:57.104 [DEBUG] [Thread-30308] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:53:57.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:53:57.105 [DEBUG] [Thread-30308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:53:57.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:53:57.116 [DEBUG] [Thread-30310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:53:57.160 [DEBUG] [Thread-30308] [transport.py] [_log()] userauth is OK
2026-04-16T02:53:57.160 [DEBUG] [Thread-30308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:53:57.160 [DEBUG] [Thread-30308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:53:57.160 [DEBUG] [Thread-30308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:53:57.160 [DEBUG] [Thread-30308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:53:57.177 [INFO] [Thread-30308] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:53:57.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:53:57.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:53:57.994 [DEBUG] [Thread-30308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:53:57.994 [DEBUG] [Thread-30308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:53:58.042 [DEBUG] [Thread-30308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:53:58.042 [DEBUG] [Thread-30308] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:53:58.051 [DEBUG] [Thread-30308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:53:58.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:53: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')
2026-04-16T02:53:58.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
2026-04-16T02:53:58.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:53:58.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:53:58.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:53:58.086 [DEBUG] [Thread-30308] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:54:08.543 [DEBUG] [Thread-30311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:54:12.157 [DEBUG] [Thread-30312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:54:27.189 [DEBUG] [Thread-30313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:54:28.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:54:28.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:54:28.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
2026-04-16T02:54:29.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 53, 57), 1.34445, 91.0877, 0.0, 12.3696, 8.66541, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:54:29.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:53:57
2026-04-16T02:54:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:54:30.223 [DEBUG] [Thread-30314] [transport.py] [_log()] starting thread (client mode): 0xee9fa590
2026-04-16T02:54:30.223 [DEBUG] [Thread-30314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:54:30.242 [DEBUG] [Thread-30314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:54:30.242 [INFO] [Thread-30314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:54:30.245 [DEBUG] [Thread-30314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:54:30.245 [DEBUG] [Thread-30314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:54:30.245 [DEBUG] [Thread-30314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:54:30.246 [DEBUG] [Thread-30314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:54:30.246 [DEBUG] [Thread-30314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:54:30.246 [DEBUG] [Thread-30314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:54:30.246 [DEBUG] [Thread-30314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:54:30.246 [DEBUG] [Thread-30314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:54:30.246 [DEBUG] [Thread-30314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:54:30.246 [DEBUG] [Thread-30314] [transport.py] [_log()] client lang: <none>
2026-04-16T02:54:30.246 [DEBUG] [Thread-30314] [transport.py] [_log()] server lang: <none>
2026-04-16T02:54:30.246 [DEBUG] [Thread-30314] [transport.py] [_log()] kex follows: False
2026-04-16T02:54:30.246 [DEBUG] [Thread-30314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:54:30.246 [DEBUG] [Thread-30314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:54:30.246 [DEBUG] [Thread-30314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:54:30.247 [DEBUG] [Thread-30314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:54:30.247 [DEBUG] [Thread-30314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:54:30.247 [DEBUG] [Thread-30314] [transport.py] [_log()] Compression: none
2026-04-16T02:54:30.247 [DEBUG] [Thread-30314] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:54:30.255 [DEBUG] [Thread-30314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:54:30.255 [DEBUG] [Thread-30314] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:54:30.256 [DEBUG] [Thread-30314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:54:30.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:54:30.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:54:30.257 [DEBUG] [Thread-30314] [transport.py] [_log()] userauth is OK
2026-04-16T02:54:30.257 [DEBUG] [Thread-30314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:54:30.257 [DEBUG] [Thread-30314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:54:30.257 [DEBUG] [Thread-30314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:54:30.258 [DEBUG] [Thread-30314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:54:30.274 [INFO] [Thread-30314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:54:30.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:54:31.048 [DEBUG] [Thread-30314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:54:31.048 [DEBUG] [Thread-30314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:54:31.049 [DEBUG] [Thread-30314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:54:31.089 [DEBUG] [Thread-30314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:54:31.089 [DEBUG] [Thread-30314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:54:31.092 [DEBUG] [Thread-30314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:54:31.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:54:31.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:54:31.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:54:31.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:54:31.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:54:31.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:54:31.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:54:31.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:54:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:54:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.037282 -999.00   +8.80  10.48     90   +7.30 1 1 1 3 1     0    0 1.23 -9.98 .NESW 13.0 10.5 62.2 13.4 9.1 -25.6 8.9 -24.3 8.7 -22.0 9.0 -24.1
2026-04-16T02:54:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:54:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:54:31.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.037282
2026-04-16T02:54:31.119 [DEBUG] [Thread-30314] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:54:31.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:54:31.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:54:31.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:54:31.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:54:31.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:54:31.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:53:57', tmtdew=1.34445, humidity=91.0877, cloud=0.0, wind=12.3696, temperature=8.66541, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:53:41.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3179999999999996, nan, nan, nan, nan, nan, 2.9194999999999993, 2.9099999999999993, 2.6682499999999987, nan, nan, nan, 0.6107500000000003, 1.9239999999999995, 0.48350000000000026, 0.8082500000000001, 0.6595000000000004, 0.42900000000000027, 0.4220000000000006, 0.32500000000000107, -0.023999999999999133, 0.010249999999999204], zp_timestamp='2026-04-16T00:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:54:31.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:54:31.383 [DEBUG] [Thread-30317] [transport.py] [_log()] starting thread (client mode): 0xee9fb8b0
2026-04-16T02:54:31.384 [DEBUG] [Thread-30317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:54:31.398 [DEBUG] [Thread-30317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:54:31.398 [INFO] [Thread-30317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:54:31.405 [DEBUG] [Thread-30317] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:54:31.405 [DEBUG] [Thread-30317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:54:31.405 [DEBUG] [Thread-30317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:54:31.405 [DEBUG] [Thread-30317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:54:31.405 [DEBUG] [Thread-30317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:54:31.405 [DEBUG] [Thread-30317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:54:31.405 [DEBUG] [Thread-30317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:54:31.405 [DEBUG] [Thread-30317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:54:31.405 [DEBUG] [Thread-30317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:54:31.406 [DEBUG] [Thread-30317] [transport.py] [_log()] client lang: <none>
2026-04-16T02:54:31.406 [DEBUG] [Thread-30317] [transport.py] [_log()] server lang: <none>
2026-04-16T02:54:31.406 [DEBUG] [Thread-30317] [transport.py] [_log()] kex follows: False
2026-04-16T02:54:31.406 [DEBUG] [Thread-30317] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:54:31.406 [DEBUG] [Thread-30317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:54:31.406 [DEBUG] [Thread-30317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:54:31.406 [DEBUG] [Thread-30317] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:54:31.406 [DEBUG] [Thread-30317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:54:31.406 [DEBUG] [Thread-30317] [transport.py] [_log()] Compression: none
2026-04-16T02:54:31.406 [DEBUG] [Thread-30317] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:54:31.464 [DEBUG] [Thread-30317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:54:31.464 [DEBUG] [Thread-30317] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:54:31.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:54:31.465 [DEBUG] [Thread-30317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:54:31.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:54:31.520 [DEBUG] [Thread-30317] [transport.py] [_log()] userauth is OK
2026-04-16T02:54:31.521 [DEBUG] [Thread-30317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:54:31.521 [DEBUG] [Thread-30317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:54:31.521 [DEBUG] [Thread-30317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:54:31.521 [DEBUG] [Thread-30317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:54:31.546 [INFO] [Thread-30317] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:54:31.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:54:31.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:54:32.384 [DEBUG] [Thread-30317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:54:32.384 [DEBUG] [Thread-30317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:54:32.433 [DEBUG] [Thread-30317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:54:32.433 [DEBUG] [Thread-30317] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:54:32.447 [DEBUG] [Thread-30317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:54:32.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:54:32.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')
2026-04-16T02:54:32.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
2026-04-16T02:54:32.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:54:32.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:54:32.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:54:32.481 [DEBUG] [Thread-30317] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:54:42.222 [DEBUG] [Thread-30319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:54:56.626 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:54:56.627 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:54:57.264 [DEBUG] [Thread-30320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:55:02.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:55:02.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:55:02.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
2026-04-16T02:55:03.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 54, 32), 1.34441, 91.0879, 0.0, 12.9164, 8.66555, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:55:03.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:54:32
2026-04-16T02:55:04.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:55:04.577 [DEBUG] [Thread-30321] [transport.py] [_log()] starting thread (client mode): 0xee990cd0
2026-04-16T02:55:04.577 [DEBUG] [Thread-30321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:55:04.598 [DEBUG] [Thread-30321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:55:04.598 [INFO] [Thread-30321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:55:04.602 [DEBUG] [Thread-30321] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:55:04.602 [DEBUG] [Thread-30321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:55:04.602 [DEBUG] [Thread-30321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:55:04.602 [DEBUG] [Thread-30321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:55:04.602 [DEBUG] [Thread-30321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:55:04.602 [DEBUG] [Thread-30321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:55:04.602 [DEBUG] [Thread-30321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:55:04.602 [DEBUG] [Thread-30321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:55:04.602 [DEBUG] [Thread-30321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:55:04.602 [DEBUG] [Thread-30321] [transport.py] [_log()] client lang: <none>
2026-04-16T02:55:04.602 [DEBUG] [Thread-30321] [transport.py] [_log()] server lang: <none>
2026-04-16T02:55:04.603 [DEBUG] [Thread-30321] [transport.py] [_log()] kex follows: False
2026-04-16T02:55:04.603 [DEBUG] [Thread-30321] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:55:04.603 [DEBUG] [Thread-30321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:55:04.603 [DEBUG] [Thread-30321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:55:04.603 [DEBUG] [Thread-30321] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:55:04.603 [DEBUG] [Thread-30321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:55:04.603 [DEBUG] [Thread-30321] [transport.py] [_log()] Compression: none
2026-04-16T02:55:04.603 [DEBUG] [Thread-30321] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:55:04.622 [DEBUG] [Thread-30321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:55:04.622 [DEBUG] [Thread-30321] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:55:04.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:55:04.623 [DEBUG] [Thread-30321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:55:04.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:55:04.624 [DEBUG] [Thread-30321] [transport.py] [_log()] userauth is OK
2026-04-16T02:55:04.624 [DEBUG] [Thread-30321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:55:04.624 [DEBUG] [Thread-30321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:55:04.624 [DEBUG] [Thread-30321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:55:04.624 [DEBUG] [Thread-30321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:55:04.649 [INFO] [Thread-30321] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:55:04.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:55:08.689 [DEBUG] [Thread-30323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:55:12.111 [DEBUG] [Thread-30321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:55:12.111 [DEBUG] [Thread-30321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:55:12.111 [DEBUG] [Thread-30321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:55:12.152 [DEBUG] [Thread-30321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:55:12.152 [DEBUG] [Thread-30321] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:55:12.154 [DEBUG] [Thread-30321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:55:12.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:55:12.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:55:12.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:55:12.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:55:12.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:55:12.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:55:12.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:55:12.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:55:12.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:55:12.233 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-16T02:55:12.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:54:32', tmtdew=1.34441, humidity=91.0879, cloud=0.0, wind=12.9164, temperature=8.66555, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3179999999999996, nan, nan, nan, nan, nan, 2.9194999999999993, 2.9099999999999993, 2.6682499999999987, nan, nan, nan, 0.6107500000000003, 1.9239999999999995, 0.48350000000000026, 0.8082500000000001, 0.6595000000000004, 0.42900000000000027, 0.4220000000000006, 0.32500000000000107, -0.023999999999999133, 0.010249999999999204], zp_timestamp='2026-04-16T00:51:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:55:12.234 [DEBUG] [Thread-30321] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:55:12.296 [DEBUG] [Thread-30325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:55:12.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:55:27.337 [DEBUG] [Thread-30326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:55:42.366 [DEBUG] [Thread-30327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:55:56.832 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:55:56.833 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:55:57.397 [DEBUG] [Thread-30328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:56:08.834 [DEBUG] [Thread-30329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:56:12.427 [DEBUG] [Thread-30330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:56:27.458 [DEBUG] [Thread-30331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:56:42.489 [DEBUG] [Thread-30332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:56:57.043 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:56:57.045 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:56:57.519 [DEBUG] [Thread-30333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:57:08.999 [DEBUG] [Thread-30334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:57:12.548 [DEBUG] [Thread-30335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:57:24.106 [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
2026-04-16T02:57:27.577 [DEBUG] [Thread-30336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:57:42.608 [DEBUG] [Thread-30337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:57:54.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:57:54.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:57:54.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
2026-04-16T02:57:55.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 57, 30), 1.33899, 91.1213, 0.0, 12.74, 8.54906, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:57:55.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:57:30
2026-04-16T02:57:55.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:57:56.269 [DEBUG] [Thread-30338] [transport.py] [_log()] starting thread (client mode): 0xf13e1930
2026-04-16T02:57:56.269 [DEBUG] [Thread-30338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:57:56.285 [DEBUG] [Thread-30338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:57:56.285 [INFO] [Thread-30338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:57:56.288 [DEBUG] [Thread-30338] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:57:56.288 [DEBUG] [Thread-30338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] client lang: <none>
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] server lang: <none>
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] kex follows: False
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] Compression: none
2026-04-16T02:57:56.289 [DEBUG] [Thread-30338] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:57:56.302 [DEBUG] [Thread-30338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:57:56.303 [DEBUG] [Thread-30338] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:57:56.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:57:56.303 [DEBUG] [Thread-30338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:57:56.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:57:56.304 [DEBUG] [Thread-30338] [transport.py] [_log()] userauth is OK
2026-04-16T02:57:56.304 [DEBUG] [Thread-30338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:57:56.304 [DEBUG] [Thread-30338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:57:56.304 [DEBUG] [Thread-30338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:57:56.304 [DEBUG] [Thread-30338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:57:56.317 [INFO] [Thread-30338] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:57:56.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:57:57.137 [DEBUG] [Thread-30338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:57:57.137 [DEBUG] [Thread-30338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:57:57.138 [DEBUG] [Thread-30338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:57:57.178 [DEBUG] [Thread-30338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:57:57.178 [DEBUG] [Thread-30338] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:57:57.181 [DEBUG] [Thread-30338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:57:57.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:57:57.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:57:57.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:57:57.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:57:57.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:57:57.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:57:57.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:57:57.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:57:57.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:57:57.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.039713 -999.00   +8.70  12.12     90   +7.20 1 1 1 3 1     0    0 1.24 -9.37 .NESW 11.9 12.1 64.4 12.9 9.1 -25.6 8.9 -24.3 8.6 -22.0 8.9 -24.2
2026-04-16T02:57:57.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:57:57.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:57:57.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.039713
2026-04-16T02:57:57.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:57:57.207 [DEBUG] [Thread-30338] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:57:57.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:57:57.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:57:57.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:57:57.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:57:57.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:57:30', tmtdew=1.33899, humidity=91.1213, cloud=0.0, wind=12.74, temperature=8.54906, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:57:11.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0149999999999997, nan, nan, nan, nan, nan, 2.7904999999999998, nan, 2.554249999999999, nan, nan, nan, 0.3617500000000007, 2.1594999999999995, 0.39949999999999974, 0.86775, 0.6500000000000004, 0.38700000000000045, 0.46000000000000085, 0.21000000000000085, -0.048500000000000654, -0.011250000000000426], zp_timestamp='2026-04-16T00:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:57:57.248 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:57:57.249 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:57:57.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:57:57.463 [DEBUG] [Thread-30341] [transport.py] [_log()] starting thread (client mode): 0xee9c33d0
2026-04-16T02:57:57.463 [DEBUG] [Thread-30341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:57:57.477 [DEBUG] [Thread-30341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:57:57.478 [INFO] [Thread-30341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:57:57.485 [DEBUG] [Thread-30341] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:57:57.485 [DEBUG] [Thread-30341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:57:57.485 [DEBUG] [Thread-30341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:57:57.485 [DEBUG] [Thread-30341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:57:57.485 [DEBUG] [Thread-30341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:57:57.485 [DEBUG] [Thread-30341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:57:57.485 [DEBUG] [Thread-30341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:57:57.485 [DEBUG] [Thread-30341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:57:57.486 [DEBUG] [Thread-30341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:57:57.486 [DEBUG] [Thread-30341] [transport.py] [_log()] client lang: <none>
2026-04-16T02:57:57.486 [DEBUG] [Thread-30341] [transport.py] [_log()] server lang: <none>
2026-04-16T02:57:57.486 [DEBUG] [Thread-30341] [transport.py] [_log()] kex follows: False
2026-04-16T02:57:57.486 [DEBUG] [Thread-30341] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:57:57.486 [DEBUG] [Thread-30341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:57:57.486 [DEBUG] [Thread-30341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:57:57.486 [DEBUG] [Thread-30341] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:57:57.486 [DEBUG] [Thread-30341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:57:57.486 [DEBUG] [Thread-30341] [transport.py] [_log()] Compression: none
2026-04-16T02:57:57.486 [DEBUG] [Thread-30341] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:57:57.542 [DEBUG] [Thread-30341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:57:57.542 [DEBUG] [Thread-30341] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:57:57.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:57:57.543 [DEBUG] [Thread-30341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:57:57.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:57:57.599 [DEBUG] [Thread-30341] [transport.py] [_log()] userauth is OK
2026-04-16T02:57:57.599 [DEBUG] [Thread-30341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:57:57.599 [DEBUG] [Thread-30341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:57:57.599 [DEBUG] [Thread-30341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:57:57.599 [DEBUG] [Thread-30341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:57:57.617 [INFO] [Thread-30341] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:57:57.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:57:57.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:57:57.637 [DEBUG] [Thread-30343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:57:58.447 [DEBUG] [Thread-30341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:57:58.447 [DEBUG] [Thread-30341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:57:58.494 [DEBUG] [Thread-30341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:57:58.494 [DEBUG] [Thread-30341] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:57:58.503 [DEBUG] [Thread-30341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:57:58.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:57:58.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')
2026-04-16T02:57:58.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
2026-04-16T02:57:58.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:57:58.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:57:58.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:57:58.534 [DEBUG] [Thread-30341] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:58:09.164 [DEBUG] [Thread-30344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:58:12.683 [DEBUG] [Thread-30345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:58:27.714 [DEBUG] [Thread-30346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:58:28.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:58:28.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:58:28.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
2026-04-16T02:58:29.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 58, 6), 1.34382, 91.0881, 0.0, 12.8459, 8.4993, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:58:29.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:58:06
2026-04-16T02:58:30.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:58:30.838 [DEBUG] [Thread-30347] [transport.py] [_log()] starting thread (client mode): 0xf1336710
2026-04-16T02:58:30.838 [DEBUG] [Thread-30347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:58:30.857 [DEBUG] [Thread-30347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:58:30.857 [INFO] [Thread-30347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:58:30.860 [DEBUG] [Thread-30347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:58:30.860 [DEBUG] [Thread-30347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:58:30.860 [DEBUG] [Thread-30347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:58:30.860 [DEBUG] [Thread-30347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:58:30.860 [DEBUG] [Thread-30347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:58:30.860 [DEBUG] [Thread-30347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:58:30.860 [DEBUG] [Thread-30347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:58:30.861 [DEBUG] [Thread-30347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:58:30.861 [DEBUG] [Thread-30347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:58:30.861 [DEBUG] [Thread-30347] [transport.py] [_log()] client lang: <none>
2026-04-16T02:58:30.861 [DEBUG] [Thread-30347] [transport.py] [_log()] server lang: <none>
2026-04-16T02:58:30.861 [DEBUG] [Thread-30347] [transport.py] [_log()] kex follows: False
2026-04-16T02:58:30.861 [DEBUG] [Thread-30347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:58:30.861 [DEBUG] [Thread-30347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:58:30.861 [DEBUG] [Thread-30347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:58:30.861 [DEBUG] [Thread-30347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:58:30.861 [DEBUG] [Thread-30347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:58:30.862 [DEBUG] [Thread-30347] [transport.py] [_log()] Compression: none
2026-04-16T02:58:30.862 [DEBUG] [Thread-30347] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:58:30.878 [DEBUG] [Thread-30347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:58:30.879 [DEBUG] [Thread-30347] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:58:30.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:58:30.879 [DEBUG] [Thread-30347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:58:30.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:58:30.880 [DEBUG] [Thread-30347] [transport.py] [_log()] userauth is OK
2026-04-16T02:58:30.880 [DEBUG] [Thread-30347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:58:30.880 [DEBUG] [Thread-30347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:58:30.880 [DEBUG] [Thread-30347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:58:30.880 [DEBUG] [Thread-30347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:58:30.898 [INFO] [Thread-30347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:58:30.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:58:31.678 [DEBUG] [Thread-30347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:58:31.678 [DEBUG] [Thread-30347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:58:31.678 [DEBUG] [Thread-30347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:58:31.719 [DEBUG] [Thread-30347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:58:31.719 [DEBUG] [Thread-30347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:58:31.722 [DEBUG] [Thread-30347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:58:31.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:58:31.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:58:31.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:58:31.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:58:31.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:58:31.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:58:31.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:58:31.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:58:31.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:58:31.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.040060 -999.00   +8.70  11.86     90   +7.20 1 1 1 3 1     0    0 1.23 -8.54 .NESW 11.2 11.9 66.2 13.2 9.1 -25.6 8.9 -24.3 8.6 -22.1 9.0 -24.3
2026-04-16T02:58:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:58:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:58:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.040060
2026-04-16T02:58:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:58:31.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:58:31.748 [DEBUG] [Thread-30347] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:58:31.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:58:31.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:58:31.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:58:31.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:58:06', tmtdew=1.34382, humidity=91.0881, cloud=0.0, wind=12.8459, temperature=8.4993, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:57:41.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0149999999999997, nan, nan, nan, nan, nan, 2.7904999999999998, nan, 2.554249999999999, nan, nan, nan, 0.3617500000000007, 2.1594999999999995, 0.39949999999999974, 0.86775, 0.6500000000000004, 0.38700000000000045, 0.46000000000000085, 0.21000000000000085, -0.048500000000000654, -0.011250000000000426], zp_timestamp='2026-04-16T00:54:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:58:31.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:58:32.005 [DEBUG] [Thread-30350] [transport.py] [_log()] starting thread (client mode): 0xee991c90
2026-04-16T02:58:32.005 [DEBUG] [Thread-30350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:58:32.019 [DEBUG] [Thread-30350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:58:32.019 [INFO] [Thread-30350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:58:32.026 [DEBUG] [Thread-30350] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:58:32.026 [DEBUG] [Thread-30350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:58:32.026 [DEBUG] [Thread-30350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:58:32.026 [DEBUG] [Thread-30350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:58:32.027 [DEBUG] [Thread-30350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:58:32.027 [DEBUG] [Thread-30350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:58:32.027 [DEBUG] [Thread-30350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:58:32.027 [DEBUG] [Thread-30350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:58:32.027 [DEBUG] [Thread-30350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:58:32.027 [DEBUG] [Thread-30350] [transport.py] [_log()] client lang: <none>
2026-04-16T02:58:32.027 [DEBUG] [Thread-30350] [transport.py] [_log()] server lang: <none>
2026-04-16T02:58:32.027 [DEBUG] [Thread-30350] [transport.py] [_log()] kex follows: False
2026-04-16T02:58:32.027 [DEBUG] [Thread-30350] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:58:32.027 [DEBUG] [Thread-30350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:58:32.027 [DEBUG] [Thread-30350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:58:32.028 [DEBUG] [Thread-30350] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:58:32.028 [DEBUG] [Thread-30350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:58:32.028 [DEBUG] [Thread-30350] [transport.py] [_log()] Compression: none
2026-04-16T02:58:32.028 [DEBUG] [Thread-30350] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:58:32.083 [DEBUG] [Thread-30350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:58:32.083 [DEBUG] [Thread-30350] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:58:32.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:58:32.084 [DEBUG] [Thread-30350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:58:32.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:58:32.139 [DEBUG] [Thread-30350] [transport.py] [_log()] userauth is OK
2026-04-16T02:58:32.140 [DEBUG] [Thread-30350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:58:32.140 [DEBUG] [Thread-30350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:58:32.140 [DEBUG] [Thread-30350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:58:32.140 [DEBUG] [Thread-30350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:58:32.167 [INFO] [Thread-30350] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:58:32.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:58:32.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:58:32.976 [DEBUG] [Thread-30350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:58:32.976 [DEBUG] [Thread-30350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:58:33.024 [DEBUG] [Thread-30350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:58:33.024 [DEBUG] [Thread-30350] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:58:33.033 [DEBUG] [Thread-30350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:58:33.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:58:33.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')
2026-04-16T02:58:33.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
2026-04-16T02:58:33.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:58:33.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:58:33.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:58:33.068 [DEBUG] [Thread-30350] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:58:42.744 [DEBUG] [Thread-30352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:58:57.453 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:58:57.455 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:58:57.784 [DEBUG] [Thread-30353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:59:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:59:03.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:59:03.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
2026-04-16T02:59:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 58, 41), 1.1987, 92.11, 0.0, 14.9976, 8.36512, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:59:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:58:41
2026-04-16T02:59:04.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:59:05.268 [DEBUG] [Thread-30354] [transport.py] [_log()] starting thread (client mode): 0xee9fa0b0
2026-04-16T02:59:05.268 [DEBUG] [Thread-30354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:59:05.289 [DEBUG] [Thread-30354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:59:05.289 [INFO] [Thread-30354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:59:05.292 [DEBUG] [Thread-30354] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:59:05.292 [DEBUG] [Thread-30354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:59:05.292 [DEBUG] [Thread-30354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:59:05.292 [DEBUG] [Thread-30354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:59:05.292 [DEBUG] [Thread-30354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:59:05.292 [DEBUG] [Thread-30354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:59:05.293 [DEBUG] [Thread-30354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:59:05.293 [DEBUG] [Thread-30354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:59:05.293 [DEBUG] [Thread-30354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:59:05.293 [DEBUG] [Thread-30354] [transport.py] [_log()] client lang: <none>
2026-04-16T02:59:05.293 [DEBUG] [Thread-30354] [transport.py] [_log()] server lang: <none>
2026-04-16T02:59:05.293 [DEBUG] [Thread-30354] [transport.py] [_log()] kex follows: False
2026-04-16T02:59:05.293 [DEBUG] [Thread-30354] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:59:05.293 [DEBUG] [Thread-30354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:59:05.293 [DEBUG] [Thread-30354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:59:05.293 [DEBUG] [Thread-30354] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:59:05.293 [DEBUG] [Thread-30354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:59:05.293 [DEBUG] [Thread-30354] [transport.py] [_log()] Compression: none
2026-04-16T02:59:05.294 [DEBUG] [Thread-30354] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:59:05.310 [DEBUG] [Thread-30354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:59:05.311 [DEBUG] [Thread-30354] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:59:05.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:59:05.312 [DEBUG] [Thread-30354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:59:05.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:59:05.313 [DEBUG] [Thread-30354] [transport.py] [_log()] userauth is OK
2026-04-16T02:59:05.313 [DEBUG] [Thread-30354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:59:05.313 [DEBUG] [Thread-30354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:59:05.313 [DEBUG] [Thread-30354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:59:05.313 [DEBUG] [Thread-30354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:59:05.337 [INFO] [Thread-30354] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:59:05.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:59:06.175 [DEBUG] [Thread-30354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:59:06.175 [DEBUG] [Thread-30354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:59:06.176 [DEBUG] [Thread-30354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:59:06.216 [DEBUG] [Thread-30354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:59:06.216 [DEBUG] [Thread-30354] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:59:06.218 [DEBUG] [Thread-30354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:59:06.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:59:06.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:59:06.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:59:06.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:59:06.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:59:06.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:59:06.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:59:06.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:59:06.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:59:06.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.040407 -999.00   +8.70  12.78     90   +7.20 1 1 1 3 1     0    0 1.25 -8.54 .NESW 11.9 12.8 60.4 14.0 9.1 -25.6 8.9 -24.4 8.6 -22.0 8.9 -24.3
2026-04-16T02:59:06.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:59:06.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:59:06.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.040407
2026-04-16T02:59:06.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:59:06.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:59:06.238 [DEBUG] [Thread-30354] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:59:06.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:59:06.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:59:06.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:59:06.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:58:41', tmtdew=1.1987, humidity=92.11, cloud=0.0, wind=14.9976, temperature=8.36512, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:58:11.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0149999999999997, nan, nan, nan, nan, nan, 2.7904999999999998, nan, 2.554249999999999, nan, nan, nan, 0.3617500000000007, 2.1594999999999995, 0.39949999999999974, 0.86775, 0.6500000000000004, 0.38700000000000045, 0.46000000000000085, 0.21000000000000085, -0.048500000000000654, -0.011250000000000426], zp_timestamp='2026-04-16T00:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:59:06.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:59:06.470 [DEBUG] [Thread-30357] [transport.py] [_log()] starting thread (client mode): 0xf13e3d00
2026-04-16T02:59:06.470 [DEBUG] [Thread-30357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:59:06.486 [DEBUG] [Thread-30357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:59:06.486 [INFO] [Thread-30357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:59:06.493 [DEBUG] [Thread-30357] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:59:06.493 [DEBUG] [Thread-30357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:59:06.493 [DEBUG] [Thread-30357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:59:06.493 [DEBUG] [Thread-30357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:59:06.493 [DEBUG] [Thread-30357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:59:06.493 [DEBUG] [Thread-30357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:59:06.493 [DEBUG] [Thread-30357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:59:06.493 [DEBUG] [Thread-30357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:59:06.493 [DEBUG] [Thread-30357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:59:06.493 [DEBUG] [Thread-30357] [transport.py] [_log()] client lang: <none>
2026-04-16T02:59:06.493 [DEBUG] [Thread-30357] [transport.py] [_log()] server lang: <none>
2026-04-16T02:59:06.493 [DEBUG] [Thread-30357] [transport.py] [_log()] kex follows: False
2026-04-16T02:59:06.494 [DEBUG] [Thread-30357] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:59:06.494 [DEBUG] [Thread-30357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:59:06.494 [DEBUG] [Thread-30357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:59:06.494 [DEBUG] [Thread-30357] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:59:06.494 [DEBUG] [Thread-30357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:59:06.494 [DEBUG] [Thread-30357] [transport.py] [_log()] Compression: none
2026-04-16T02:59:06.494 [DEBUG] [Thread-30357] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:59:06.551 [DEBUG] [Thread-30357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:59:06.552 [DEBUG] [Thread-30357] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:59:06.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:59:06.552 [DEBUG] [Thread-30357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:59:06.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:59:06.609 [DEBUG] [Thread-30357] [transport.py] [_log()] userauth is OK
2026-04-16T02:59:06.610 [DEBUG] [Thread-30357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:59:06.610 [DEBUG] [Thread-30357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:59:06.610 [DEBUG] [Thread-30357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:59:06.610 [DEBUG] [Thread-30357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:59:06.635 [INFO] [Thread-30357] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:59:06.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:59:06.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:59:07.479 [DEBUG] [Thread-30357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:59:07.479 [DEBUG] [Thread-30357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:59:07.536 [DEBUG] [Thread-30357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:59:07.536 [DEBUG] [Thread-30357] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:59:07.548 [DEBUG] [Thread-30357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:59:07.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:59:07.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')
2026-04-16T02:59:07.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') -> 00000000
2026-04-16T02:59:07.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:59:07.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:59:07.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:59:07.591 [DEBUG] [Thread-30357] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:59:09.331 [DEBUG] [Thread-30359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:59:12.813 [DEBUG] [Thread-30360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:59:27.858 [DEBUG] [Thread-30361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:59:37.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T02:59:37.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T02:59:37.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
2026-04-16T02:59:38.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 59, 18), 1.34395, 91.0882, 0.0, 12.7048, 8.51597, 2, 2, 0, 2, 0, 0),)
2026-04-16T02:59:38.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:59:18
2026-04-16T02:59:39.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T02:59:39.741 [DEBUG] [Thread-30362] [transport.py] [_log()] starting thread (client mode): 0xee991e70
2026-04-16T02:59:39.742 [DEBUG] [Thread-30362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:59:39.759 [DEBUG] [Thread-30362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T02:59:39.759 [INFO] [Thread-30362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T02:59:39.762 [DEBUG] [Thread-30362] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:59:39.762 [DEBUG] [Thread-30362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T02:59:39.762 [DEBUG] [Thread-30362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:59:39.762 [DEBUG] [Thread-30362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:59:39.763 [DEBUG] [Thread-30362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:59:39.763 [DEBUG] [Thread-30362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:59:39.763 [DEBUG] [Thread-30362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:59:39.763 [DEBUG] [Thread-30362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:59:39.763 [DEBUG] [Thread-30362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:59:39.763 [DEBUG] [Thread-30362] [transport.py] [_log()] client lang: <none>
2026-04-16T02:59:39.763 [DEBUG] [Thread-30362] [transport.py] [_log()] server lang: <none>
2026-04-16T02:59:39.763 [DEBUG] [Thread-30362] [transport.py] [_log()] kex follows: False
2026-04-16T02:59:39.763 [DEBUG] [Thread-30362] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:59:39.763 [DEBUG] [Thread-30362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:59:39.763 [DEBUG] [Thread-30362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:59:39.764 [DEBUG] [Thread-30362] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:59:39.764 [DEBUG] [Thread-30362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:59:39.764 [DEBUG] [Thread-30362] [transport.py] [_log()] Compression: none
2026-04-16T02:59:39.764 [DEBUG] [Thread-30362] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:59:39.780 [DEBUG] [Thread-30362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:59:39.781 [DEBUG] [Thread-30362] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:59:39.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T02:59:39.781 [DEBUG] [Thread-30362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T02:59:39.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:59:39.782 [DEBUG] [Thread-30362] [transport.py] [_log()] userauth is OK
2026-04-16T02:59:39.782 [DEBUG] [Thread-30362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:59:39.782 [DEBUG] [Thread-30362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:59:39.783 [DEBUG] [Thread-30362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T02:59:39.783 [DEBUG] [Thread-30362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:59:39.799 [INFO] [Thread-30362] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:59:39.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:59:40.578 [DEBUG] [Thread-30362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:59:40.579 [DEBUG] [Thread-30362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:59:40.579 [DEBUG] [Thread-30362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T02:59:40.619 [DEBUG] [Thread-30362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:59:40.619 [DEBUG] [Thread-30362] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:59:40.622 [DEBUG] [Thread-30362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:59:40.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:59:40.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T02:59:40.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T02:59:40.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T02:59:40.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:59:40.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T02:59:40.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:59:40.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:59:40.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T02:59:40.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.041101 -999.00   +8.70  11.12     90   +7.10 1 1 1 3 1     0    0 1.32 -6.54 .NESW 12.1 11.1 64.4 12.6 9.0 -25.5 8.9 -24.3 8.7 -22.1 9.0 -24.2
2026-04-16T02:59:40.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T02:59:40.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T02:59:40.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.041101
2026-04-16T02:59:40.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T02:59:40.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T02:59:40.645 [DEBUG] [Thread-30362] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:59:40.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T02:59:40.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T02:59:40.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T02:59:40.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:59:18', tmtdew=1.34395, humidity=91.0882, cloud=0.0, wind=12.7048, temperature=8.51597, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:59:11.126', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0149999999999997, nan, nan, nan, nan, nan, 2.7904999999999998, nan, 2.554249999999999, nan, nan, nan, 0.3617500000000007, 2.1594999999999995, 0.39949999999999974, 0.86775, 0.6500000000000004, 0.38700000000000045, 0.46000000000000085, 0.21000000000000085, -0.048500000000000654, -0.011250000000000426], zp_timestamp='2026-04-16T00:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T02:59:40.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T02:59:40.902 [DEBUG] [Thread-30365] [transport.py] [_log()] starting thread (client mode): 0xee993430
2026-04-16T02:59:40.902 [DEBUG] [Thread-30365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T02:59:40.916 [DEBUG] [Thread-30365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T02:59:40.916 [INFO] [Thread-30365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T02:59:40.925 [DEBUG] [Thread-30365] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T02:59:40.925 [DEBUG] [Thread-30365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T02:59:40.925 [DEBUG] [Thread-30365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T02:59:40.925 [DEBUG] [Thread-30365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:59:40.926 [DEBUG] [Thread-30365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T02:59:40.926 [DEBUG] [Thread-30365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:59:40.926 [DEBUG] [Thread-30365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T02:59:40.926 [DEBUG] [Thread-30365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T02:59:40.926 [DEBUG] [Thread-30365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T02:59:40.926 [DEBUG] [Thread-30365] [transport.py] [_log()] client lang: <none>
2026-04-16T02:59:40.926 [DEBUG] [Thread-30365] [transport.py] [_log()] server lang: <none>
2026-04-16T02:59:40.926 [DEBUG] [Thread-30365] [transport.py] [_log()] kex follows: False
2026-04-16T02:59:40.926 [DEBUG] [Thread-30365] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T02:59:40.926 [DEBUG] [Thread-30365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T02:59:40.926 [DEBUG] [Thread-30365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T02:59:40.927 [DEBUG] [Thread-30365] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T02:59:40.927 [DEBUG] [Thread-30365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T02:59:40.927 [DEBUG] [Thread-30365] [transport.py] [_log()] Compression: none
2026-04-16T02:59:40.927 [DEBUG] [Thread-30365] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T02:59:40.980 [DEBUG] [Thread-30365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T02:59:40.980 [DEBUG] [Thread-30365] [transport.py] [_log()] Switch to new keys ...
2026-04-16T02:59:40.981 [DEBUG] [Thread-30365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T02:59:40.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T02:59:40.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T02:59:41.038 [DEBUG] [Thread-30365] [transport.py] [_log()] userauth is OK
2026-04-16T02:59:41.038 [DEBUG] [Thread-30365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T02:59:41.039 [DEBUG] [Thread-30365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T02:59:41.039 [DEBUG] [Thread-30365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T02:59:41.039 [DEBUG] [Thread-30365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T02:59:41.061 [INFO] [Thread-30365] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T02:59:41.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T02:59:41.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T02:59:41.900 [DEBUG] [Thread-30365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T02:59:41.900 [DEBUG] [Thread-30365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T02:59:41.948 [DEBUG] [Thread-30365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T02:59:41.948 [DEBUG] [Thread-30365] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T02:59:41.957 [DEBUG] [Thread-30365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T02:59:41.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T02:59:41.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')
2026-04-16T02:59:41.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
2026-04-16T02:59:41.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T02:59:41.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T02:59:41.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T02:59:41.991 [DEBUG] [Thread-30365] [transport.py] [_log()] EOF in transport thread
2026-04-16T02:59:42.891 [DEBUG] [Thread-30367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:59:57.659 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:59:57.660 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T02:59:57.937 [DEBUG] [Thread-30368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:00:09.483 [DEBUG] [Thread-30369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:00:12.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:00:12.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:00:12.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
2026-04-16T03:00:12.968 [DEBUG] [Thread-30370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:00:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 2, 59, 54), 1.17775, 92.2422, 0.0, 14.927, 8.36478, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:00:13.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 02:59:54
2026-04-16T03:00:13.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:00:14.213 [DEBUG] [Thread-30371] [transport.py] [_log()] starting thread (client mode): 0xee992080
2026-04-16T03:00:14.213 [DEBUG] [Thread-30371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:00:14.232 [DEBUG] [Thread-30371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:00:14.232 [INFO] [Thread-30371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:00:14.235 [DEBUG] [Thread-30371] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:00:14.235 [DEBUG] [Thread-30371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:00:14.235 [DEBUG] [Thread-30371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:00:14.235 [DEBUG] [Thread-30371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:00:14.236 [DEBUG] [Thread-30371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:00:14.236 [DEBUG] [Thread-30371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:00:14.236 [DEBUG] [Thread-30371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:00:14.236 [DEBUG] [Thread-30371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:00:14.236 [DEBUG] [Thread-30371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:00:14.236 [DEBUG] [Thread-30371] [transport.py] [_log()] client lang: <none>
2026-04-16T03:00:14.236 [DEBUG] [Thread-30371] [transport.py] [_log()] server lang: <none>
2026-04-16T03:00:14.236 [DEBUG] [Thread-30371] [transport.py] [_log()] kex follows: False
2026-04-16T03:00:14.236 [DEBUG] [Thread-30371] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:00:14.236 [DEBUG] [Thread-30371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:00:14.236 [DEBUG] [Thread-30371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:00:14.236 [DEBUG] [Thread-30371] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:00:14.237 [DEBUG] [Thread-30371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:00:14.237 [DEBUG] [Thread-30371] [transport.py] [_log()] Compression: none
2026-04-16T03:00:14.237 [DEBUG] [Thread-30371] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:00:14.251 [DEBUG] [Thread-30371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:00:14.251 [DEBUG] [Thread-30371] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:00:14.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:00:14.252 [DEBUG] [Thread-30371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:00:14.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:00:14.253 [DEBUG] [Thread-30371] [transport.py] [_log()] userauth is OK
2026-04-16T03:00:14.253 [DEBUG] [Thread-30371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:00:14.253 [DEBUG] [Thread-30371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:00:14.253 [DEBUG] [Thread-30371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:00:14.254 [DEBUG] [Thread-30371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:00:14.290 [INFO] [Thread-30371] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:00:14.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:00:20.305 [DEBUG] [Thread-30371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:00:20.305 [DEBUG] [Thread-30371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:00:20.305 [DEBUG] [Thread-30371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:00:20.346 [DEBUG] [Thread-30371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:00:20.346 [DEBUG] [Thread-30371] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:00:20.349 [DEBUG] [Thread-30371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:00:20.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:00:20.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:00:20.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:00:20.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:00:20.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:00:20.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:00:20.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:00:20.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:00:20.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:00:20.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.041449 -999.00   +8.70  12.14     90   +7.10 1 2 1 3 1     0    0 1.35 -5.27 .NESW 13.2 12.1 66.8 14.0 9.1 -25.6 -999.0 -999.0 8.7 -22.1 9.0 -24.2
2026-04-16T03:00:20.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:00:20.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:00:20.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.041449
2026-04-16T03:00:20.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:00:20.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:00:20.517 [DEBUG] [Thread-30371] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:00:20.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:00:20.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:00:20.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-16T03:00:20.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T02:59:54', tmtdew=1.17775, humidity=92.2422, cloud=0.0, wind=14.927, temperature=8.36478, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T00:59:41.194', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0149999999999997, nan, nan, nan, nan, nan, 2.7904999999999998, nan, 2.554249999999999, nan, nan, nan, 0.3617500000000007, 2.1594999999999995, 0.39949999999999974, 0.86775, 0.6500000000000004, 0.38700000000000045, 0.46000000000000085, 0.21000000000000085, -0.048500000000000654, -0.011250000000000426], zp_timestamp='2026-04-16T00:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:00:20.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:00:20.773 [DEBUG] [Thread-30374] [transport.py] [_log()] starting thread (client mode): 0xee9337c0
2026-04-16T03:00:20.774 [DEBUG] [Thread-30374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:00:20.789 [DEBUG] [Thread-30374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:00:20.789 [INFO] [Thread-30374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:00:20.796 [DEBUG] [Thread-30374] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:00:20.797 [DEBUG] [Thread-30374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:00:20.797 [DEBUG] [Thread-30374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:00:20.797 [DEBUG] [Thread-30374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:00:20.797 [DEBUG] [Thread-30374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:00:20.797 [DEBUG] [Thread-30374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:00:20.797 [DEBUG] [Thread-30374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:00:20.797 [DEBUG] [Thread-30374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:00:20.797 [DEBUG] [Thread-30374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:00:20.797 [DEBUG] [Thread-30374] [transport.py] [_log()] client lang: <none>
2026-04-16T03:00:20.797 [DEBUG] [Thread-30374] [transport.py] [_log()] server lang: <none>
2026-04-16T03:00:20.797 [DEBUG] [Thread-30374] [transport.py] [_log()] kex follows: False
2026-04-16T03:00:20.797 [DEBUG] [Thread-30374] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:00:20.797 [DEBUG] [Thread-30374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:00:20.798 [DEBUG] [Thread-30374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:00:20.798 [DEBUG] [Thread-30374] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:00:20.798 [DEBUG] [Thread-30374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:00:20.798 [DEBUG] [Thread-30374] [transport.py] [_log()] Compression: none
2026-04-16T03:00:20.798 [DEBUG] [Thread-30374] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:00:20.854 [DEBUG] [Thread-30374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:00:20.854 [DEBUG] [Thread-30374] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:00:20.854 [DEBUG] [Thread-30374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:00:20.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:00:20.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:00:20.909 [DEBUG] [Thread-30374] [transport.py] [_log()] userauth is OK
2026-04-16T03:00:20.909 [DEBUG] [Thread-30374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:00:20.909 [DEBUG] [Thread-30374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:00:20.910 [DEBUG] [Thread-30374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:00:20.910 [DEBUG] [Thread-30374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:00:20.935 [INFO] [Thread-30374] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:00:20.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:00:20.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:00:21.756 [DEBUG] [Thread-30374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:00:21.756 [DEBUG] [Thread-30374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:00:21.803 [DEBUG] [Thread-30374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:00:21.804 [DEBUG] [Thread-30374] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:00:21.812 [DEBUG] [Thread-30374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:00:21.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:00:21.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')
2026-04-16T03:00: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') -> 00000000
2026-04-16T03:00:21.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:00:21.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:00:21.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:00:21.843 [DEBUG] [Thread-30374] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:00:27.999 [DEBUG] [Thread-30376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:00:43.041 [DEBUG] [Thread-30377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:00:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:00:51.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:00:51.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
2026-04-16T03:00:53.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 0, 29), 1.38888, 91.1211, 0.0, 11.0988, 8.53239, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:00:53.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:00:29
2026-04-16T03:00:53.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:00:54.146 [DEBUG] [Thread-30378] [transport.py] [_log()] starting thread (client mode): 0xee9c2e90
2026-04-16T03:00:54.146 [DEBUG] [Thread-30378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:00:54.166 [DEBUG] [Thread-30378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:00:54.166 [INFO] [Thread-30378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:00:54.168 [DEBUG] [Thread-30378] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:00:54.169 [DEBUG] [Thread-30378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:00:54.169 [DEBUG] [Thread-30378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:00:54.169 [DEBUG] [Thread-30378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:00:54.169 [DEBUG] [Thread-30378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:00:54.169 [DEBUG] [Thread-30378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:00:54.169 [DEBUG] [Thread-30378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:00:54.169 [DEBUG] [Thread-30378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:00:54.169 [DEBUG] [Thread-30378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:00:54.169 [DEBUG] [Thread-30378] [transport.py] [_log()] client lang: <none>
2026-04-16T03:00:54.169 [DEBUG] [Thread-30378] [transport.py] [_log()] server lang: <none>
2026-04-16T03:00:54.170 [DEBUG] [Thread-30378] [transport.py] [_log()] kex follows: False
2026-04-16T03:00:54.170 [DEBUG] [Thread-30378] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:00:54.170 [DEBUG] [Thread-30378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:00:54.170 [DEBUG] [Thread-30378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:00:54.170 [DEBUG] [Thread-30378] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:00:54.170 [DEBUG] [Thread-30378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:00:54.170 [DEBUG] [Thread-30378] [transport.py] [_log()] Compression: none
2026-04-16T03:00:54.170 [DEBUG] [Thread-30378] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:00:54.186 [DEBUG] [Thread-30378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:00:54.186 [DEBUG] [Thread-30378] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:00:54.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:00:54.187 [DEBUG] [Thread-30378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:00:54.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:00:54.188 [DEBUG] [Thread-30378] [transport.py] [_log()] userauth is OK
2026-04-16T03:00:54.188 [DEBUG] [Thread-30378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:00:54.188 [DEBUG] [Thread-30378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:00:54.188 [DEBUG] [Thread-30378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:00:54.188 [DEBUG] [Thread-30378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:00:54.212 [INFO] [Thread-30378] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:00:54.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:00:54.973 [DEBUG] [Thread-30378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:00:54.973 [DEBUG] [Thread-30378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:00:54.974 [DEBUG] [Thread-30378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:00:55.014 [DEBUG] [Thread-30378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:00:55.014 [DEBUG] [Thread-30378] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:00:55.017 [DEBUG] [Thread-30378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:00:55.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:00:55.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:00:55.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:00:55.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:00:55.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:00:55.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:00:55.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:00:55.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:00:55.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:00:55.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.041796 -999.00   +8.70  12.06     90   +7.20 1 1 1 3 1     0    0 1.36 -4.62 .NESW 10.7 12.1 63.4 13.3 9.0 -25.6 8.9 -24.4 8.6 -22.1 8.9 -24.4
2026-04-16T03:00:55.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:00:55.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:00:55.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.041796
2026-04-16T03:00:55.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:00:55.043 [DEBUG] [Thread-30378] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:00:55.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:00:55.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:00:55.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:00:55.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:00:55.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:00:29', tmtdew=1.38888, humidity=91.1211, cloud=0.0, wind=11.0988, temperature=8.53239, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:00:11.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0149999999999997, nan, nan, nan, nan, nan, 2.7904999999999998, nan, 2.554249999999999, nan, nan, nan, 0.3617500000000007, 2.1594999999999995, 0.39949999999999974, 0.86775, 0.6500000000000004, 0.38700000000000045, 0.46000000000000085, 0.21000000000000085, -0.048500000000000654, -0.011250000000000426], zp_timestamp='2026-04-16T00:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:00:55.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:00:55.300 [DEBUG] [Thread-30381] [transport.py] [_log()] starting thread (client mode): 0xee9c3280
2026-04-16T03:00:55.300 [DEBUG] [Thread-30381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:00:55.313 [DEBUG] [Thread-30381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:00:55.314 [INFO] [Thread-30381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:00:55.321 [DEBUG] [Thread-30381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:00:55.321 [DEBUG] [Thread-30381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:00:55.321 [DEBUG] [Thread-30381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:00:55.321 [DEBUG] [Thread-30381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:00:55.321 [DEBUG] [Thread-30381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:00:55.321 [DEBUG] [Thread-30381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:00:55.321 [DEBUG] [Thread-30381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:00:55.322 [DEBUG] [Thread-30381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:00:55.322 [DEBUG] [Thread-30381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:00:55.322 [DEBUG] [Thread-30381] [transport.py] [_log()] client lang: <none>
2026-04-16T03:00:55.322 [DEBUG] [Thread-30381] [transport.py] [_log()] server lang: <none>
2026-04-16T03:00:55.322 [DEBUG] [Thread-30381] [transport.py] [_log()] kex follows: False
2026-04-16T03:00:55.322 [DEBUG] [Thread-30381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:00:55.322 [DEBUG] [Thread-30381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:00:55.322 [DEBUG] [Thread-30381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:00:55.322 [DEBUG] [Thread-30381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:00:55.322 [DEBUG] [Thread-30381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:00:55.323 [DEBUG] [Thread-30381] [transport.py] [_log()] Compression: none
2026-04-16T03:00:55.323 [DEBUG] [Thread-30381] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:00:55.381 [DEBUG] [Thread-30381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:00:55.381 [DEBUG] [Thread-30381] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:00:55.381 [DEBUG] [Thread-30381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:00:55.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:00:55.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:00:55.437 [DEBUG] [Thread-30381] [transport.py] [_log()] userauth is OK
2026-04-16T03:00:55.437 [DEBUG] [Thread-30381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:00:55.437 [DEBUG] [Thread-30381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:00:55.438 [DEBUG] [Thread-30381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:00:55.438 [DEBUG] [Thread-30381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:00:55.462 [INFO] [Thread-30381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:00:55.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:00:55.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:00:56.262 [DEBUG] [Thread-30381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:00:56.262 [DEBUG] [Thread-30381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:00:56.309 [DEBUG] [Thread-30381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:00:56.310 [DEBUG] [Thread-30381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:00:56.318 [DEBUG] [Thread-30381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:00:56.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:00:56.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')
2026-04-16T03:00:56.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
2026-04-16T03:00:56.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:00:56.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:00:56.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:00:56.351 [DEBUG] [Thread-30381] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:00:57.868 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:00:57.869 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:00:58.071 [DEBUG] [Thread-30383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:01:09.629 [DEBUG] [Thread-30384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:01:13.114 [DEBUG] [Thread-30385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:01:26.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:01:26.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:01:26.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
2026-04-16T03:01:27.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 1, 5), 1.38655, 91.1375, 0.0, 11.2399, 8.56542, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:01:27.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:01:05
2026-04-16T03:01:28.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:01:28.144 [DEBUG] [Thread-30386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:01:28.465 [DEBUG] [Thread-30387] [transport.py] [_log()] starting thread (client mode): 0xf1336620
2026-04-16T03:01:28.466 [DEBUG] [Thread-30387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:01:28.486 [DEBUG] [Thread-30387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:01:28.486 [INFO] [Thread-30387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:01:28.489 [DEBUG] [Thread-30387] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:01:28.489 [DEBUG] [Thread-30387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:01:28.489 [DEBUG] [Thread-30387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:01:28.489 [DEBUG] [Thread-30387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:01:28.489 [DEBUG] [Thread-30387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:01:28.490 [DEBUG] [Thread-30387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:01:28.490 [DEBUG] [Thread-30387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:01:28.490 [DEBUG] [Thread-30387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:01:28.490 [DEBUG] [Thread-30387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:01:28.490 [DEBUG] [Thread-30387] [transport.py] [_log()] client lang: <none>
2026-04-16T03:01:28.490 [DEBUG] [Thread-30387] [transport.py] [_log()] server lang: <none>
2026-04-16T03:01:28.490 [DEBUG] [Thread-30387] [transport.py] [_log()] kex follows: False
2026-04-16T03:01:28.490 [DEBUG] [Thread-30387] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:01:28.490 [DEBUG] [Thread-30387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:01:28.490 [DEBUG] [Thread-30387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:01:28.490 [DEBUG] [Thread-30387] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:01:28.491 [DEBUG] [Thread-30387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:01:28.491 [DEBUG] [Thread-30387] [transport.py] [_log()] Compression: none
2026-04-16T03:01:28.491 [DEBUG] [Thread-30387] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:01:28.507 [DEBUG] [Thread-30387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:01:28.508 [DEBUG] [Thread-30387] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:01:28.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:01:28.508 [DEBUG] [Thread-30387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:01:28.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:01:28.509 [DEBUG] [Thread-30387] [transport.py] [_log()] userauth is OK
2026-04-16T03:01:28.510 [DEBUG] [Thread-30387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:01:28.510 [DEBUG] [Thread-30387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:01:28.510 [DEBUG] [Thread-30387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:01:28.510 [DEBUG] [Thread-30387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:01:28.535 [INFO] [Thread-30387] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:01:28.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:01:29.315 [DEBUG] [Thread-30387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:01:29.315 [DEBUG] [Thread-30387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:01:29.315 [DEBUG] [Thread-30387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:01:29.356 [DEBUG] [Thread-30387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:01:29.356 [DEBUG] [Thread-30387] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:01:29.359 [DEBUG] [Thread-30387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:01:29.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:01:29.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:01:29.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:01:29.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:01:29.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:01:29.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:01:29.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:01:29.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:01:29.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:01:29.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.042143 -999.00   +8.70  12.77     90   +7.20 1 1 1 3 1     0    0 1.38 -3.91 .NESW 11.5 12.8 64.0 14.2 9.1 -25.4 8.8 -24.3 8.6 -22.1 8.9 -24.2
2026-04-16T03:01:29.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:01:29.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:01:29.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.042143
2026-04-16T03:01:29.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:01:29.389 [DEBUG] [Thread-30387] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:01:29.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:01:29.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:01:29.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:01:29.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:01:29.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:01:05', tmtdew=1.38655, humidity=91.1375, cloud=0.0, wind=11.2399, temperature=8.56542, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:00:41.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0149999999999997, nan, nan, nan, nan, nan, 2.7904999999999998, nan, 2.554249999999999, nan, nan, nan, 0.3617500000000007, 2.1594999999999995, 0.39949999999999974, 0.86775, 0.6500000000000004, 0.38700000000000045, 0.46000000000000085, 0.21000000000000085, -0.048500000000000654, -0.011250000000000426], zp_timestamp='2026-04-16T00:57:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:01:29.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:01:29.652 [DEBUG] [Thread-30390] [transport.py] [_log()] starting thread (client mode): 0xee9fa9b0
2026-04-16T03:01:29.652 [DEBUG] [Thread-30390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:01:29.666 [DEBUG] [Thread-30390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:01:29.667 [INFO] [Thread-30390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:01:29.674 [DEBUG] [Thread-30390] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:01:29.674 [DEBUG] [Thread-30390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:01:29.674 [DEBUG] [Thread-30390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:01:29.674 [DEBUG] [Thread-30390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:01:29.674 [DEBUG] [Thread-30390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:01:29.674 [DEBUG] [Thread-30390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:01:29.674 [DEBUG] [Thread-30390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:01:29.674 [DEBUG] [Thread-30390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:01:29.674 [DEBUG] [Thread-30390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:01:29.674 [DEBUG] [Thread-30390] [transport.py] [_log()] client lang: <none>
2026-04-16T03:01:29.674 [DEBUG] [Thread-30390] [transport.py] [_log()] server lang: <none>
2026-04-16T03:01:29.674 [DEBUG] [Thread-30390] [transport.py] [_log()] kex follows: False
2026-04-16T03:01:29.675 [DEBUG] [Thread-30390] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:01:29.675 [DEBUG] [Thread-30390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:01:29.675 [DEBUG] [Thread-30390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:01:29.675 [DEBUG] [Thread-30390] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:01:29.675 [DEBUG] [Thread-30390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:01:29.675 [DEBUG] [Thread-30390] [transport.py] [_log()] Compression: none
2026-04-16T03:01:29.675 [DEBUG] [Thread-30390] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:01:29.733 [DEBUG] [Thread-30390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:01:29.733 [DEBUG] [Thread-30390] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:01:29.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:01:29.734 [DEBUG] [Thread-30390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:01:29.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:01:29.789 [DEBUG] [Thread-30390] [transport.py] [_log()] userauth is OK
2026-04-16T03:01:29.789 [DEBUG] [Thread-30390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:01:29.789 [DEBUG] [Thread-30390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:01:29.789 [DEBUG] [Thread-30390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:01:29.789 [DEBUG] [Thread-30390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:01:29.807 [INFO] [Thread-30390] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:01:29.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:01:29.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:01:30.614 [DEBUG] [Thread-30390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:01:30.615 [DEBUG] [Thread-30390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:01:30.662 [DEBUG] [Thread-30390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:01:30.662 [DEBUG] [Thread-30390] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:01:30.671 [DEBUG] [Thread-30390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:01:30.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:01:30.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')
2026-04-16T03:01:30.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') -> 00000000
2026-04-16T03:01:30.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:01:30.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:01:30.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:01:30.706 [DEBUG] [Thread-30390] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:01:43.172 [DEBUG] [Thread-30392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:01:58.082 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:01:58.084 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:01:58.215 [DEBUG] [Thread-30393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:02:00.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:02:00.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:02:00.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
2026-04-16T03:02:02.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 1, 40), 1.17781, 92.2418, 0.0, 15.5974, 8.36449, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:02:02.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:01:40
2026-04-16T03:02:02.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:02:02.821 [DEBUG] [Thread-30394] [transport.py] [_log()] starting thread (client mode): 0xf13e3b50
2026-04-16T03:02:02.822 [DEBUG] [Thread-30394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:02:02.840 [DEBUG] [Thread-30394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:02:02.841 [INFO] [Thread-30394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:02:02.844 [DEBUG] [Thread-30394] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:02:02.844 [DEBUG] [Thread-30394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:02:02.844 [DEBUG] [Thread-30394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:02:02.844 [DEBUG] [Thread-30394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:02:02.844 [DEBUG] [Thread-30394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:02:02.844 [DEBUG] [Thread-30394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:02:02.844 [DEBUG] [Thread-30394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:02:02.844 [DEBUG] [Thread-30394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:02:02.844 [DEBUG] [Thread-30394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:02:02.844 [DEBUG] [Thread-30394] [transport.py] [_log()] client lang: <none>
2026-04-16T03:02:02.844 [DEBUG] [Thread-30394] [transport.py] [_log()] server lang: <none>
2026-04-16T03:02:02.845 [DEBUG] [Thread-30394] [transport.py] [_log()] kex follows: False
2026-04-16T03:02:02.845 [DEBUG] [Thread-30394] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:02:02.845 [DEBUG] [Thread-30394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:02:02.845 [DEBUG] [Thread-30394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:02:02.845 [DEBUG] [Thread-30394] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:02:02.845 [DEBUG] [Thread-30394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:02:02.845 [DEBUG] [Thread-30394] [transport.py] [_log()] Compression: none
2026-04-16T03:02:02.845 [DEBUG] [Thread-30394] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:02:02.862 [DEBUG] [Thread-30394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:02:02.863 [DEBUG] [Thread-30394] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:02:02.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:02:02.863 [DEBUG] [Thread-30394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:02:02.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:02:02.864 [DEBUG] [Thread-30394] [transport.py] [_log()] userauth is OK
2026-04-16T03:02:02.864 [DEBUG] [Thread-30394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:02:02.864 [DEBUG] [Thread-30394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:02:02.864 [DEBUG] [Thread-30394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:02:02.865 [DEBUG] [Thread-30394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:02:02.883 [INFO] [Thread-30394] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:02:02.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:02:03.632 [DEBUG] [Thread-30394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:02:03.632 [DEBUG] [Thread-30394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:02:03.633 [DEBUG] [Thread-30394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:02:03.673 [DEBUG] [Thread-30394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:02:03.673 [DEBUG] [Thread-30394] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:02:03.676 [DEBUG] [Thread-30394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:02:03.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:02:03.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:02:03.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:02:03.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:02:03.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:02:03.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:02:03.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:02:03.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:02:03.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:02:03.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.042490 -999.00   +8.70  11.88     90   +7.20 1 1 1 3 1     0    0 1.41 -3.20 .NESW 12.2 11.9 64.4 15.2 9.0 -25.4 8.9 -24.4 8.7 -22.1 8.9 -24.2
2026-04-16T03:02:03.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:02:03.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:02:03.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.042490
2026-04-16T03:02:03.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:02:03.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:02:03.701 [DEBUG] [Thread-30394] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:02:03.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:02:03.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:02:03.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:02:03.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:01:40', tmtdew=1.17781, humidity=92.2418, cloud=0.0, wind=15.5974, temperature=8.36449, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:01:11.136', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 2.5349999999999993, nan, nan, nan, nan, nan, nan, nan, 1.569, nan, nan, nan, nan, nan, nan, 2.996999999999999, 1.9632499999999986, nan, nan, 0.2742500000000003, -0.06375000000000064, 0.24900000000000055, 0.2939999999999987, 0.48575000000000035, 0.25849999999999973, 0.2265000000000006, 0.28600000000000136, 0.0730000000000004, -0.08249999999999957, -0.12325000000000053], zp_timestamp='2026-04-16T01:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:02:03.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:02:03.961 [DEBUG] [Thread-30397] [transport.py] [_log()] starting thread (client mode): 0xee992230
2026-04-16T03:02:03.962 [DEBUG] [Thread-30397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:02:03.975 [DEBUG] [Thread-30397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:02:03.975 [INFO] [Thread-30397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:02:03.982 [DEBUG] [Thread-30397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:02:03.983 [DEBUG] [Thread-30397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:02:03.983 [DEBUG] [Thread-30397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:02:03.983 [DEBUG] [Thread-30397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:02:03.983 [DEBUG] [Thread-30397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:02:03.983 [DEBUG] [Thread-30397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:02:03.983 [DEBUG] [Thread-30397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:02:03.983 [DEBUG] [Thread-30397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:02:03.983 [DEBUG] [Thread-30397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:02:03.983 [DEBUG] [Thread-30397] [transport.py] [_log()] client lang: <none>
2026-04-16T03:02:03.983 [DEBUG] [Thread-30397] [transport.py] [_log()] server lang: <none>
2026-04-16T03:02:03.983 [DEBUG] [Thread-30397] [transport.py] [_log()] kex follows: False
2026-04-16T03:02:03.984 [DEBUG] [Thread-30397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:02:03.984 [DEBUG] [Thread-30397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:02:03.984 [DEBUG] [Thread-30397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:02:03.984 [DEBUG] [Thread-30397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:02:03.984 [DEBUG] [Thread-30397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:02:03.984 [DEBUG] [Thread-30397] [transport.py] [_log()] Compression: none
2026-04-16T03:02:03.984 [DEBUG] [Thread-30397] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:02:04.048 [DEBUG] [Thread-30397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:02:04.048 [DEBUG] [Thread-30397] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:02:04.049 [DEBUG] [Thread-30397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:02:04.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:02:04.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:02:04.110 [DEBUG] [Thread-30397] [transport.py] [_log()] userauth is OK
2026-04-16T03:02:04.110 [DEBUG] [Thread-30397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:02:04.110 [DEBUG] [Thread-30397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:02:04.111 [DEBUG] [Thread-30397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:02:04.111 [DEBUG] [Thread-30397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:02:04.136 [INFO] [Thread-30397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:02:04.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:02:04.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:02:04.940 [DEBUG] [Thread-30397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:02:04.941 [DEBUG] [Thread-30397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:02:04.988 [DEBUG] [Thread-30397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:02:04.988 [DEBUG] [Thread-30397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:02:04.997 [DEBUG] [Thread-30397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:02:05.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:02:05.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')
2026-04-16T03:02:05.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
2026-04-16T03:02:05.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:02:05.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:02:05.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:02:05.035 [DEBUG] [Thread-30397] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:02:09.779 [DEBUG] [Thread-30399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:02:13.245 [DEBUG] [Thread-30400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:02:28.290 [DEBUG] [Thread-30401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:02:35.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:02:35.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:02:35.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T03:02:36.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 2, 16), 1.33653, 91.1377, 0.0, 11.4516, 8.56556, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:02:36.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:02:16
2026-04-16T03:02:36.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:02:37.251 [DEBUG] [Thread-30402] [transport.py] [_log()] starting thread (client mode): 0xee9f9e40
2026-04-16T03:02:37.251 [DEBUG] [Thread-30402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:02:37.271 [DEBUG] [Thread-30402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:02:37.271 [INFO] [Thread-30402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:02:37.274 [DEBUG] [Thread-30402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:02:37.274 [DEBUG] [Thread-30402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:02:37.274 [DEBUG] [Thread-30402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:02:37.274 [DEBUG] [Thread-30402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:02:37.274 [DEBUG] [Thread-30402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:02:37.274 [DEBUG] [Thread-30402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:02:37.274 [DEBUG] [Thread-30402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:02:37.274 [DEBUG] [Thread-30402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:02:37.275 [DEBUG] [Thread-30402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:02:37.275 [DEBUG] [Thread-30402] [transport.py] [_log()] client lang: <none>
2026-04-16T03:02:37.275 [DEBUG] [Thread-30402] [transport.py] [_log()] server lang: <none>
2026-04-16T03:02:37.275 [DEBUG] [Thread-30402] [transport.py] [_log()] kex follows: False
2026-04-16T03:02:37.275 [DEBUG] [Thread-30402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:02:37.275 [DEBUG] [Thread-30402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:02:37.275 [DEBUG] [Thread-30402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:02:37.275 [DEBUG] [Thread-30402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:02:37.275 [DEBUG] [Thread-30402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:02:37.275 [DEBUG] [Thread-30402] [transport.py] [_log()] Compression: none
2026-04-16T03:02:37.275 [DEBUG] [Thread-30402] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:02:37.294 [DEBUG] [Thread-30402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:02:37.294 [DEBUG] [Thread-30402] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:02:37.295 [DEBUG] [Thread-30402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:02:37.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:02:37.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:02:37.296 [DEBUG] [Thread-30402] [transport.py] [_log()] userauth is OK
2026-04-16T03:02:37.296 [DEBUG] [Thread-30402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:02:37.296 [DEBUG] [Thread-30402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:02:37.296 [DEBUG] [Thread-30402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:02:37.297 [DEBUG] [Thread-30402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:02:37.331 [INFO] [Thread-30402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:02:37.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:02:38.092 [DEBUG] [Thread-30402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:02:38.092 [DEBUG] [Thread-30402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:02:38.092 [DEBUG] [Thread-30402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:02:38.133 [DEBUG] [Thread-30402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:02:38.133 [DEBUG] [Thread-30402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:02:38.135 [DEBUG] [Thread-30402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:02:38.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:02:38.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:02:38.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:02:38.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:02:38.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:02:38.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:02:38.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:02:38.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:02:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:02:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.042837 -999.00   +8.70  13.19     90   +7.20 1 1 1 3 1     0    0 1.45 -2.70 .NESW 11.8 13.2 72.6 17.7 9.0 -25.6 8.9 -24.3 8.6 -22.1 8.9 -24.1
2026-04-16T03:02:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:02:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:02:38.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.042837
2026-04-16T03:02:38.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:02:38.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:02:38.153 [DEBUG] [Thread-30402] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:02:38.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:02:38.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:02:38.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:02:38.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:02:16', tmtdew=1.33653, humidity=91.1377, cloud=0.0, wind=11.4516, temperature=8.56556, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:01:41.117', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 2.5349999999999993, nan, nan, nan, nan, nan, nan, nan, 1.569, nan, nan, nan, nan, nan, nan, 2.996999999999999, 1.9632499999999986, nan, nan, 0.2742500000000003, -0.06375000000000064, 0.24900000000000055, 0.2939999999999987, 0.48575000000000035, 0.25849999999999973, 0.2265000000000006, 0.28600000000000136, 0.0730000000000004, -0.08249999999999957, -0.12325000000000053], zp_timestamp='2026-04-16T01:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:02:38.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:02:38.366 [DEBUG] [Thread-30405] [transport.py] [_log()] starting thread (client mode): 0xee906290
2026-04-16T03:02:38.366 [DEBUG] [Thread-30405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:02:38.380 [DEBUG] [Thread-30405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:02:38.380 [INFO] [Thread-30405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:02:38.387 [DEBUG] [Thread-30405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:02:38.387 [DEBUG] [Thread-30405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:02:38.387 [DEBUG] [Thread-30405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:02:38.387 [DEBUG] [Thread-30405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:02:38.387 [DEBUG] [Thread-30405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:02:38.387 [DEBUG] [Thread-30405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:02:38.387 [DEBUG] [Thread-30405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:02:38.387 [DEBUG] [Thread-30405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:02:38.388 [DEBUG] [Thread-30405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:02:38.388 [DEBUG] [Thread-30405] [transport.py] [_log()] client lang: <none>
2026-04-16T03:02:38.388 [DEBUG] [Thread-30405] [transport.py] [_log()] server lang: <none>
2026-04-16T03:02:38.388 [DEBUG] [Thread-30405] [transport.py] [_log()] kex follows: False
2026-04-16T03:02:38.388 [DEBUG] [Thread-30405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:02:38.388 [DEBUG] [Thread-30405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:02:38.388 [DEBUG] [Thread-30405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:02:38.388 [DEBUG] [Thread-30405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:02:38.388 [DEBUG] [Thread-30405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:02:38.388 [DEBUG] [Thread-30405] [transport.py] [_log()] Compression: none
2026-04-16T03:02:38.388 [DEBUG] [Thread-30405] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:02:38.445 [DEBUG] [Thread-30405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:02:38.446 [DEBUG] [Thread-30405] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:02:38.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:02:38.446 [DEBUG] [Thread-30405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:02:38.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:02:38.502 [DEBUG] [Thread-30405] [transport.py] [_log()] userauth is OK
2026-04-16T03:02:38.502 [DEBUG] [Thread-30405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:02:38.502 [DEBUG] [Thread-30405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:02:38.502 [DEBUG] [Thread-30405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:02:38.502 [DEBUG] [Thread-30405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:02:38.520 [INFO] [Thread-30405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:02:38.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:02:38.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:02:39.325 [DEBUG] [Thread-30405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:02:39.325 [DEBUG] [Thread-30405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:02:39.372 [DEBUG] [Thread-30405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:02:39.373 [DEBUG] [Thread-30405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:02:39.381 [DEBUG] [Thread-30405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:02:39.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:02:39.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')
2026-04-16T03:02:39.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
2026-04-16T03:02:39.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:02:39.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:02:39.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:02:39.418 [DEBUG] [Thread-30405] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:02:43.320 [DEBUG] [Thread-30407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:02:58.289 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:02:58.290 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:02:58.364 [DEBUG] [Thread-30408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:03:09.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:03:09.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:03:09.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
2026-04-16T03:03:09.945 [DEBUG] [Thread-30409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:03:10.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 2, 51), 1.19849, 92.1095, 0.0, 15.7032, 8.33157, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:03:10.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:02:51
2026-04-16T03:03:11.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:03:11.564 [DEBUG] [Thread-30410] [transport.py] [_log()] starting thread (client mode): 0xee905630
2026-04-16T03:03:11.564 [DEBUG] [Thread-30410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:03:11.583 [DEBUG] [Thread-30410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:03:11.583 [INFO] [Thread-30410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:03:11.586 [DEBUG] [Thread-30410] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:03:11.586 [DEBUG] [Thread-30410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:03:11.587 [DEBUG] [Thread-30410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:03:11.587 [DEBUG] [Thread-30410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:03:11.587 [DEBUG] [Thread-30410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:03:11.587 [DEBUG] [Thread-30410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:03:11.587 [DEBUG] [Thread-30410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:03:11.587 [DEBUG] [Thread-30410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:03:11.587 [DEBUG] [Thread-30410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:03:11.587 [DEBUG] [Thread-30410] [transport.py] [_log()] client lang: <none>
2026-04-16T03:03:11.587 [DEBUG] [Thread-30410] [transport.py] [_log()] server lang: <none>
2026-04-16T03:03:11.587 [DEBUG] [Thread-30410] [transport.py] [_log()] kex follows: False
2026-04-16T03:03:11.587 [DEBUG] [Thread-30410] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:03:11.588 [DEBUG] [Thread-30410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:03:11.588 [DEBUG] [Thread-30410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:03:11.588 [DEBUG] [Thread-30410] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:03:11.588 [DEBUG] [Thread-30410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:03:11.588 [DEBUG] [Thread-30410] [transport.py] [_log()] Compression: none
2026-04-16T03:03:11.588 [DEBUG] [Thread-30410] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:03:11.604 [DEBUG] [Thread-30410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:03:11.604 [DEBUG] [Thread-30410] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:03:11.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:03:11.605 [DEBUG] [Thread-30410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:03:11.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:03:11.649 [DEBUG] [Thread-30410] [transport.py] [_log()] userauth is OK
2026-04-16T03:03:11.649 [DEBUG] [Thread-30410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:03:11.649 [DEBUG] [Thread-30410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:03:11.649 [DEBUG] [Thread-30410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:03:11.649 [DEBUG] [Thread-30410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:03:11.685 [INFO] [Thread-30410] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:03:11.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:03:12.492 [DEBUG] [Thread-30410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:03:12.492 [DEBUG] [Thread-30410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:03:12.493 [DEBUG] [Thread-30410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:03:12.533 [DEBUG] [Thread-30410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:03:12.533 [DEBUG] [Thread-30410] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:03:12.536 [DEBUG] [Thread-30410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:03:12.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:03:12.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:03:12.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:03:12.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:03:12.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:03:12.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:03:12.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:03:12.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:03:12.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:03:12.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.043532 -999.00   +8.70  13.43     90   +7.20 1 1 1 3 1     0    0 1.43 -1.63 .NESW 12.5 13.4 67.8 15.5 9.1 -25.6 8.9 -24.3 8.6 -22.1 8.9 -24.2
2026-04-16T03:03:12.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:03:12.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:03:12.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.043532
2026-04-16T03:03:12.563 [DEBUG] [Thread-30410] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:03:12.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:03:12.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:03:12.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:03:12.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:03:12.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:03:12.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:02:51', tmtdew=1.19849, humidity=92.1095, cloud=0.0, wind=15.7032, temperature=8.33157, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:02:41.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 2.5349999999999993, nan, nan, nan, nan, nan, nan, nan, 1.569, nan, nan, nan, nan, nan, nan, 2.996999999999999, 1.9632499999999986, nan, nan, 0.2742500000000003, -0.06375000000000064, 0.24900000000000055, 0.2939999999999987, 0.48575000000000035, 0.25849999999999973, 0.2265000000000006, 0.28600000000000136, 0.0730000000000004, -0.08249999999999957, -0.12325000000000053], zp_timestamp='2026-04-16T01:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:03:12.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:03:12.831 [DEBUG] [Thread-30413] [transport.py] [_log()] starting thread (client mode): 0xf13669e0
2026-04-16T03:03:12.831 [DEBUG] [Thread-30413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:03:12.845 [DEBUG] [Thread-30413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:03:12.845 [INFO] [Thread-30413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:03:12.852 [DEBUG] [Thread-30413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:03:12.852 [DEBUG] [Thread-30413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:03:12.853 [DEBUG] [Thread-30413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:03:12.853 [DEBUG] [Thread-30413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:03:12.853 [DEBUG] [Thread-30413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:03:12.853 [DEBUG] [Thread-30413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:03:12.853 [DEBUG] [Thread-30413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:03:12.853 [DEBUG] [Thread-30413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:03:12.853 [DEBUG] [Thread-30413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:03:12.853 [DEBUG] [Thread-30413] [transport.py] [_log()] client lang: <none>
2026-04-16T03:03:12.853 [DEBUG] [Thread-30413] [transport.py] [_log()] server lang: <none>
2026-04-16T03:03:12.853 [DEBUG] [Thread-30413] [transport.py] [_log()] kex follows: False
2026-04-16T03:03:12.853 [DEBUG] [Thread-30413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:03:12.854 [DEBUG] [Thread-30413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:03:12.854 [DEBUG] [Thread-30413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:03:12.854 [DEBUG] [Thread-30413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:03:12.854 [DEBUG] [Thread-30413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:03:12.854 [DEBUG] [Thread-30413] [transport.py] [_log()] Compression: none
2026-04-16T03:03:12.854 [DEBUG] [Thread-30413] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:03:12.914 [DEBUG] [Thread-30413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:03:12.914 [DEBUG] [Thread-30413] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:03:12.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:03:12.915 [DEBUG] [Thread-30413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:03:12.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:03:12.970 [DEBUG] [Thread-30413] [transport.py] [_log()] userauth is OK
2026-04-16T03:03:12.970 [DEBUG] [Thread-30413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:03:12.971 [DEBUG] [Thread-30413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:03:12.971 [DEBUG] [Thread-30413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:03:12.971 [DEBUG] [Thread-30413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:03:12.989 [INFO] [Thread-30413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:03:12.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:03:12.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:03:13.395 [DEBUG] [Thread-30415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:03:13.816 [DEBUG] [Thread-30413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:03:13.817 [DEBUG] [Thread-30413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:03:13.865 [DEBUG] [Thread-30413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:03:13.865 [DEBUG] [Thread-30413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:03:13.874 [DEBUG] [Thread-30413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:03:13.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:03:13.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')
2026-04-16T03:03:13.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
2026-04-16T03:03:13.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:03:13.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:03:13.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:03:13.909 [DEBUG] [Thread-30413] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:03:28.439 [DEBUG] [Thread-30416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:03:43.470 [DEBUG] [Thread-30417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:03:43.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:03:43.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:03:43.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
2026-04-16T03:03:45.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 3, 27), 1.39645, 91.0715, 0.0, 13.0576, 8.5493, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:03:45.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:03:27
2026-04-16T03:03:45.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:03:46.018 [DEBUG] [Thread-30418] [transport.py] [_log()] starting thread (client mode): 0xf1335990
2026-04-16T03:03:46.019 [DEBUG] [Thread-30418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:03:46.038 [DEBUG] [Thread-30418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:03:46.038 [INFO] [Thread-30418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:03:46.041 [DEBUG] [Thread-30418] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:03:46.041 [DEBUG] [Thread-30418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:03:46.041 [DEBUG] [Thread-30418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:03:46.041 [DEBUG] [Thread-30418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:03:46.041 [DEBUG] [Thread-30418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:03:46.041 [DEBUG] [Thread-30418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:03:46.041 [DEBUG] [Thread-30418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:03:46.041 [DEBUG] [Thread-30418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:03:46.041 [DEBUG] [Thread-30418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:03:46.041 [DEBUG] [Thread-30418] [transport.py] [_log()] client lang: <none>
2026-04-16T03:03:46.041 [DEBUG] [Thread-30418] [transport.py] [_log()] server lang: <none>
2026-04-16T03:03:46.042 [DEBUG] [Thread-30418] [transport.py] [_log()] kex follows: False
2026-04-16T03:03:46.042 [DEBUG] [Thread-30418] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:03:46.042 [DEBUG] [Thread-30418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:03:46.042 [DEBUG] [Thread-30418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:03:46.042 [DEBUG] [Thread-30418] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:03:46.042 [DEBUG] [Thread-30418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:03:46.042 [DEBUG] [Thread-30418] [transport.py] [_log()] Compression: none
2026-04-16T03:03:46.042 [DEBUG] [Thread-30418] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:03:46.060 [DEBUG] [Thread-30418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:03:46.060 [DEBUG] [Thread-30418] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:03:46.061 [DEBUG] [Thread-30418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:03:46.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:03:46.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:03:46.062 [DEBUG] [Thread-30418] [transport.py] [_log()] userauth is OK
2026-04-16T03:03:46.062 [DEBUG] [Thread-30418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:03:46.062 [DEBUG] [Thread-30418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:03:46.062 [DEBUG] [Thread-30418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:03:46.062 [DEBUG] [Thread-30418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:03:46.080 [INFO] [Thread-30418] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:03:46.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:03:46.912 [DEBUG] [Thread-30418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:03:46.912 [DEBUG] [Thread-30418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:03:46.913 [DEBUG] [Thread-30418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:03:46.953 [DEBUG] [Thread-30418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:03:46.953 [DEBUG] [Thread-30418] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:03:46.956 [DEBUG] [Thread-30418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:03:46.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:03:46.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:03:46.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:03:46.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:03:46.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:03:46.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:03:46.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:03:46.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:03:46.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:03:46.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.043879 -999.00   +8.80   6.00     89   +7.20 1 1 1 3 1     0    0 1.47 -1.41 .NESW 7.0 6.0 49.4 14.2 9.1 -25.6 8.9 -24.3 8.7 -22.1 8.9 -24.1
2026-04-16T03:03:46.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:03:46.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:03:46.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.043879
2026-04-16T03:03:46.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:03:46.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:03:46.982 [DEBUG] [Thread-30418] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:03:46.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:03:46.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:03:46.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:03:46.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:03:27', tmtdew=1.39645, humidity=91.0715, cloud=0.0, wind=13.0576, temperature=8.5493, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:03:11.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 2.5349999999999993, nan, nan, nan, nan, nan, nan, nan, 1.569, nan, nan, nan, nan, nan, nan, 2.996999999999999, 1.9632499999999986, nan, nan, 0.2742500000000003, -0.06375000000000064, 0.24900000000000055, 0.2939999999999987, 0.48575000000000035, 0.25849999999999973, 0.2265000000000006, 0.28600000000000136, 0.0730000000000004, -0.08249999999999957, -0.12325000000000053], zp_timestamp='2026-04-16T01:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:03:47.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:03:47.244 [DEBUG] [Thread-30421] [transport.py] [_log()] starting thread (client mode): 0xee9337c0
2026-04-16T03:03:47.244 [DEBUG] [Thread-30421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:03:47.259 [DEBUG] [Thread-30421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:03:47.259 [INFO] [Thread-30421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:03:47.266 [DEBUG] [Thread-30421] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:03:47.266 [DEBUG] [Thread-30421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:03:47.266 [DEBUG] [Thread-30421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:03:47.266 [DEBUG] [Thread-30421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:03:47.266 [DEBUG] [Thread-30421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:03:47.266 [DEBUG] [Thread-30421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:03:47.266 [DEBUG] [Thread-30421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:03:47.266 [DEBUG] [Thread-30421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:03:47.267 [DEBUG] [Thread-30421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:03:47.267 [DEBUG] [Thread-30421] [transport.py] [_log()] client lang: <none>
2026-04-16T03:03:47.267 [DEBUG] [Thread-30421] [transport.py] [_log()] server lang: <none>
2026-04-16T03:03:47.267 [DEBUG] [Thread-30421] [transport.py] [_log()] kex follows: False
2026-04-16T03:03:47.267 [DEBUG] [Thread-30421] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:03:47.267 [DEBUG] [Thread-30421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:03:47.267 [DEBUG] [Thread-30421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:03:47.267 [DEBUG] [Thread-30421] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:03:47.267 [DEBUG] [Thread-30421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:03:47.267 [DEBUG] [Thread-30421] [transport.py] [_log()] Compression: none
2026-04-16T03:03:47.267 [DEBUG] [Thread-30421] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:03:47.323 [DEBUG] [Thread-30421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:03:47.324 [DEBUG] [Thread-30421] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:03:47.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:03:47.324 [DEBUG] [Thread-30421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:03:47.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:03:47.383 [DEBUG] [Thread-30421] [transport.py] [_log()] userauth is OK
2026-04-16T03:03:47.383 [DEBUG] [Thread-30421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:03:47.384 [DEBUG] [Thread-30421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:03:47.384 [DEBUG] [Thread-30421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:03:47.384 [DEBUG] [Thread-30421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:03:47.409 [INFO] [Thread-30421] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:03:47.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:03:47.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:03:48.236 [DEBUG] [Thread-30421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:03:48.236 [DEBUG] [Thread-30421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:03:48.284 [DEBUG] [Thread-30421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:03:48.284 [DEBUG] [Thread-30421] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:03:48.293 [DEBUG] [Thread-30421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:03:48.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:03:48.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')
2026-04-16T03:03:48.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
2026-04-16T03:03:48.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:03:48.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:03:48.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:03:48.328 [DEBUG] [Thread-30421] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:03:58.493 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:03:58.494 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:03:58.501 [DEBUG] [Thread-30423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:04:10.095 [DEBUG] [Thread-30424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:04:13.544 [DEBUG] [Thread-30425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:04:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:04:18.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:04:18.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
2026-04-16T03:04:19.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 4, 2), 1.38884, 91.1213, 0.0, 13.428, 8.58248, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:04:19.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:04:02
2026-04-16T03:04:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:04:20.420 [DEBUG] [Thread-30426] [transport.py] [_log()] starting thread (client mode): 0xee933b80
2026-04-16T03:04:20.421 [DEBUG] [Thread-30426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:04:20.441 [DEBUG] [Thread-30426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:04:20.441 [INFO] [Thread-30426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:04:20.444 [DEBUG] [Thread-30426] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:04:20.444 [DEBUG] [Thread-30426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:04:20.444 [DEBUG] [Thread-30426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:04:20.444 [DEBUG] [Thread-30426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:04:20.445 [DEBUG] [Thread-30426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:04:20.445 [DEBUG] [Thread-30426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:04:20.445 [DEBUG] [Thread-30426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:04:20.445 [DEBUG] [Thread-30426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:04:20.445 [DEBUG] [Thread-30426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:04:20.445 [DEBUG] [Thread-30426] [transport.py] [_log()] client lang: <none>
2026-04-16T03:04:20.445 [DEBUG] [Thread-30426] [transport.py] [_log()] server lang: <none>
2026-04-16T03:04:20.445 [DEBUG] [Thread-30426] [transport.py] [_log()] kex follows: False
2026-04-16T03:04:20.445 [DEBUG] [Thread-30426] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:04:20.445 [DEBUG] [Thread-30426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:04:20.445 [DEBUG] [Thread-30426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:04:20.445 [DEBUG] [Thread-30426] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:04:20.445 [DEBUG] [Thread-30426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:04:20.446 [DEBUG] [Thread-30426] [transport.py] [_log()] Compression: none
2026-04-16T03:04:20.446 [DEBUG] [Thread-30426] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:04:20.462 [DEBUG] [Thread-30426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:04:20.462 [DEBUG] [Thread-30426] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:04:20.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:04:20.463 [DEBUG] [Thread-30426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:04:20.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:04:20.464 [DEBUG] [Thread-30426] [transport.py] [_log()] userauth is OK
2026-04-16T03:04:20.464 [DEBUG] [Thread-30426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:04:20.464 [DEBUG] [Thread-30426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:04:20.464 [DEBUG] [Thread-30426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:04:20.464 [DEBUG] [Thread-30426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:04:20.500 [INFO] [Thread-30426] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:04:20.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:04:21.284 [DEBUG] [Thread-30426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:04:21.284 [DEBUG] [Thread-30426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:04:21.285 [DEBUG] [Thread-30426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:04:21.325 [DEBUG] [Thread-30426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:04:21.325 [DEBUG] [Thread-30426] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:04:21.328 [DEBUG] [Thread-30426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:04:21.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:04:21.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:04:21.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:04:21.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:04:21.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:04:21.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:04:21.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:04:21.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:04:21.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:04:21.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.044226 -999.00   +8.80  11.90     89   +7.20 1 1 1 3 1     0    0 1.48 -0.84 .NESw 13.1 11.9 72.0 15.5 9.0 -25.4 8.9 -24.3 8.7 -22.0 8.9 -24.1
2026-04-16T03:04:21.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:04:21.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:04:21.352 [DEBUG] [Thread-30426] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:04:21.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.044226
2026-04-16T03:04:21.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:04:21.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:04:21.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:04:21.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:04:21.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:04:21.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:04:02', tmtdew=1.38884, humidity=91.1213, cloud=0.0, wind=13.428, temperature=8.58248, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:03:41.126', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 2.5349999999999993, nan, nan, nan, nan, nan, nan, nan, 1.569, nan, nan, nan, nan, nan, nan, 2.996999999999999, 1.9632499999999986, nan, nan, 0.2742500000000003, -0.06375000000000064, 0.24900000000000055, 0.2939999999999987, 0.48575000000000035, 0.25849999999999973, 0.2265000000000006, 0.28600000000000136, 0.0730000000000004, -0.08249999999999957, -0.12325000000000053], zp_timestamp='2026-04-16T01:00:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:04:21.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:04:21.608 [DEBUG] [Thread-30429] [transport.py] [_log()] starting thread (client mode): 0xee907b20
2026-04-16T03:04:21.608 [DEBUG] [Thread-30429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:04:21.622 [DEBUG] [Thread-30429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:04:21.622 [INFO] [Thread-30429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:04:21.630 [DEBUG] [Thread-30429] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:04:21.630 [DEBUG] [Thread-30429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:04:21.630 [DEBUG] [Thread-30429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:04:21.630 [DEBUG] [Thread-30429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:04:21.630 [DEBUG] [Thread-30429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:04:21.630 [DEBUG] [Thread-30429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:04:21.630 [DEBUG] [Thread-30429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:04:21.630 [DEBUG] [Thread-30429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:04:21.631 [DEBUG] [Thread-30429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:04:21.631 [DEBUG] [Thread-30429] [transport.py] [_log()] client lang: <none>
2026-04-16T03:04:21.631 [DEBUG] [Thread-30429] [transport.py] [_log()] server lang: <none>
2026-04-16T03:04:21.631 [DEBUG] [Thread-30429] [transport.py] [_log()] kex follows: False
2026-04-16T03:04:21.631 [DEBUG] [Thread-30429] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:04:21.631 [DEBUG] [Thread-30429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:04:21.631 [DEBUG] [Thread-30429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:04:21.631 [DEBUG] [Thread-30429] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:04:21.631 [DEBUG] [Thread-30429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:04:21.631 [DEBUG] [Thread-30429] [transport.py] [_log()] Compression: none
2026-04-16T03:04:21.631 [DEBUG] [Thread-30429] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:04:21.686 [DEBUG] [Thread-30429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:04:21.687 [DEBUG] [Thread-30429] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:04:21.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:04:21.688 [DEBUG] [Thread-30429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:04:21.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:04:21.750 [DEBUG] [Thread-30429] [transport.py] [_log()] userauth is OK
2026-04-16T03:04:21.750 [DEBUG] [Thread-30429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:04:21.750 [DEBUG] [Thread-30429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:04:21.750 [DEBUG] [Thread-30429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:04:21.750 [DEBUG] [Thread-30429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:04:21.775 [INFO] [Thread-30429] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:04:21.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:04:21.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:04:22.576 [DEBUG] [Thread-30429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:04:22.577 [DEBUG] [Thread-30429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:04:22.624 [DEBUG] [Thread-30429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:04:22.624 [DEBUG] [Thread-30429] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:04:22.633 [DEBUG] [Thread-30429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:04:22.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:04:22.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')
2026-04-16T03:04:22.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
2026-04-16T03:04:22.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:04:22.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:04:22.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:04:22.668 [DEBUG] [Thread-30429] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:04:28.574 [DEBUG] [Thread-30431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:04:43.617 [DEBUG] [Thread-30432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:04:52.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:04:52.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:04: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
2026-04-16T03:04:53.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 4, 38), 1.17766, 92.2428, 0.0, 15.8443, 8.36514, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:04:53.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:04:38
2026-04-16T03:04:54.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:04:54.851 [DEBUG] [Thread-30433] [transport.py] [_log()] starting thread (client mode): 0xee906d10
2026-04-16T03:04:54.851 [DEBUG] [Thread-30433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:04:54.872 [DEBUG] [Thread-30433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:04:54.873 [INFO] [Thread-30433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:04:54.876 [DEBUG] [Thread-30433] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:04:54.876 [DEBUG] [Thread-30433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:04:54.876 [DEBUG] [Thread-30433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:04:54.876 [DEBUG] [Thread-30433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:04:54.876 [DEBUG] [Thread-30433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:04:54.876 [DEBUG] [Thread-30433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:04:54.876 [DEBUG] [Thread-30433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:04:54.876 [DEBUG] [Thread-30433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:04:54.877 [DEBUG] [Thread-30433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:04:54.877 [DEBUG] [Thread-30433] [transport.py] [_log()] client lang: <none>
2026-04-16T03:04:54.877 [DEBUG] [Thread-30433] [transport.py] [_log()] server lang: <none>
2026-04-16T03:04:54.877 [DEBUG] [Thread-30433] [transport.py] [_log()] kex follows: False
2026-04-16T03:04:54.877 [DEBUG] [Thread-30433] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:04:54.877 [DEBUG] [Thread-30433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:04:54.877 [DEBUG] [Thread-30433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:04:54.877 [DEBUG] [Thread-30433] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:04:54.877 [DEBUG] [Thread-30433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:04:54.877 [DEBUG] [Thread-30433] [transport.py] [_log()] Compression: none
2026-04-16T03:04:54.878 [DEBUG] [Thread-30433] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:04:54.898 [DEBUG] [Thread-30433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:04:54.898 [DEBUG] [Thread-30433] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:04:54.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:04:54.899 [DEBUG] [Thread-30433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:04:54.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:04:54.900 [DEBUG] [Thread-30433] [transport.py] [_log()] userauth is OK
2026-04-16T03:04:54.900 [DEBUG] [Thread-30433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:04:54.900 [DEBUG] [Thread-30433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:04:54.900 [DEBUG] [Thread-30433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:04:54.900 [DEBUG] [Thread-30433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:04:54.925 [INFO] [Thread-30433] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:04:54.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:04:55.734 [DEBUG] [Thread-30433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:04:55.735 [DEBUG] [Thread-30433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:04:55.735 [DEBUG] [Thread-30433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:04:55.776 [DEBUG] [Thread-30433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:04:55.776 [DEBUG] [Thread-30433] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:04:55.778 [DEBUG] [Thread-30433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:04:55.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:04:55.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:04:55.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:04:55.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:04:55.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:04:55.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:04:55.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:04:55.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:04:55.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:04:55.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.044574 -999.00   +8.80  12.70     89   +7.20 1 1 1 3 1     0    0 1.49 -0.05 .NESw 12.8 12.7 64.0 16.0 9.1 -25.5 8.9 -24.2 8.7 -21.9 8.9 -24.1
2026-04-16T03:04:55.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:04:55.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:04:55.801 [DEBUG] [Thread-30433] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:04:55.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.044574
2026-04-16T03:04:55.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:04:55.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:04:55.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:04:55.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:04:55.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:04:55.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:04:38', tmtdew=1.17766, humidity=92.2428, cloud=0.0, wind=15.8443, temperature=8.36514, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:04:11.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 2.5349999999999993, nan, nan, nan, nan, nan, nan, nan, 1.569, nan, nan, nan, nan, nan, nan, 2.996999999999999, 1.9632499999999986, nan, nan, 0.2742500000000003, -0.06375000000000064, 0.24900000000000055, 0.2939999999999987, 0.48575000000000035, 0.25849999999999973, 0.2265000000000006, 0.28600000000000136, 0.0730000000000004, -0.08249999999999957, -0.12325000000000053], zp_timestamp='2026-04-16T01:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:04:56.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:04:56.063 [DEBUG] [Thread-30436] [transport.py] [_log()] starting thread (client mode): 0xee954490
2026-04-16T03:04:56.063 [DEBUG] [Thread-30436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:04:56.078 [DEBUG] [Thread-30436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:04:56.078 [INFO] [Thread-30436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:04:56.085 [DEBUG] [Thread-30436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:04:56.085 [DEBUG] [Thread-30436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:04:56.085 [DEBUG] [Thread-30436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:04:56.085 [DEBUG] [Thread-30436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:04:56.085 [DEBUG] [Thread-30436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:04:56.086 [DEBUG] [Thread-30436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:04:56.086 [DEBUG] [Thread-30436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:04:56.086 [DEBUG] [Thread-30436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:04:56.086 [DEBUG] [Thread-30436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:04:56.086 [DEBUG] [Thread-30436] [transport.py] [_log()] client lang: <none>
2026-04-16T03:04:56.086 [DEBUG] [Thread-30436] [transport.py] [_log()] server lang: <none>
2026-04-16T03:04:56.086 [DEBUG] [Thread-30436] [transport.py] [_log()] kex follows: False
2026-04-16T03:04:56.086 [DEBUG] [Thread-30436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:04:56.086 [DEBUG] [Thread-30436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:04:56.086 [DEBUG] [Thread-30436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:04:56.086 [DEBUG] [Thread-30436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:04:56.087 [DEBUG] [Thread-30436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:04:56.087 [DEBUG] [Thread-30436] [transport.py] [_log()] Compression: none
2026-04-16T03:04:56.087 [DEBUG] [Thread-30436] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:04:56.141 [DEBUG] [Thread-30436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:04:56.142 [DEBUG] [Thread-30436] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:04:56.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:04:56.142 [DEBUG] [Thread-30436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:04:56.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:04:56.198 [DEBUG] [Thread-30436] [transport.py] [_log()] userauth is OK
2026-04-16T03:04:56.198 [DEBUG] [Thread-30436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:04:56.198 [DEBUG] [Thread-30436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:04:56.199 [DEBUG] [Thread-30436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:04:56.199 [DEBUG] [Thread-30436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:04:56.217 [INFO] [Thread-30436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:04:56.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:04:56.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:04:57.026 [DEBUG] [Thread-30436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:04:57.026 [DEBUG] [Thread-30436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:04:57.074 [DEBUG] [Thread-30436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:04:57.074 [DEBUG] [Thread-30436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:04:57.083 [DEBUG] [Thread-30436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:04:57.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:04:57.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')
2026-04-16T03:04:57.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
2026-04-16T03:04:57.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:04:57.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:04:57.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:04:57.118 [DEBUG] [Thread-30436] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:04:58.646 [DEBUG] [Thread-30438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:04:58.699 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:04:58.699 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:05:10.241 [DEBUG] [Thread-30439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:05:13.684 [DEBUG] [Thread-30440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:05:27.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:05:27.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:05: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
2026-04-16T03:05:28.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 5, 13), 1.44671, 90.5716, 0.0, 13.4104, 8.63257, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:05:28.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:05:13
2026-04-16T03:05:28.715 [DEBUG] [Thread-30441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:05:28.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:05:29.247 [DEBUG] [Thread-30442] [transport.py] [_log()] starting thread (client mode): 0xee954040
2026-04-16T03:05:29.247 [DEBUG] [Thread-30442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:05:29.262 [DEBUG] [Thread-30442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:05:29.262 [INFO] [Thread-30442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:05:29.265 [DEBUG] [Thread-30442] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:05:29.265 [DEBUG] [Thread-30442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:05:29.265 [DEBUG] [Thread-30442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:05:29.265 [DEBUG] [Thread-30442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:05:29.265 [DEBUG] [Thread-30442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:05:29.265 [DEBUG] [Thread-30442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:05:29.265 [DEBUG] [Thread-30442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:05:29.265 [DEBUG] [Thread-30442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:05:29.265 [DEBUG] [Thread-30442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:05:29.266 [DEBUG] [Thread-30442] [transport.py] [_log()] client lang: <none>
2026-04-16T03:05:29.266 [DEBUG] [Thread-30442] [transport.py] [_log()] server lang: <none>
2026-04-16T03:05:29.266 [DEBUG] [Thread-30442] [transport.py] [_log()] kex follows: False
2026-04-16T03:05:29.266 [DEBUG] [Thread-30442] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:05:29.266 [DEBUG] [Thread-30442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:05:29.266 [DEBUG] [Thread-30442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:05:29.266 [DEBUG] [Thread-30442] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:05:29.266 [DEBUG] [Thread-30442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:05:29.266 [DEBUG] [Thread-30442] [transport.py] [_log()] Compression: none
2026-04-16T03:05:29.266 [DEBUG] [Thread-30442] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:05:29.285 [DEBUG] [Thread-30442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:05:29.285 [DEBUG] [Thread-30442] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:05:29.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:05:29.286 [DEBUG] [Thread-30442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:05:29.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:05:29.286 [DEBUG] [Thread-30442] [transport.py] [_log()] userauth is OK
2026-04-16T03:05:29.287 [DEBUG] [Thread-30442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:05:29.287 [DEBUG] [Thread-30442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:05:29.287 [DEBUG] [Thread-30442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:05:29.287 [DEBUG] [Thread-30442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:05:29.309 [INFO] [Thread-30442] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:05:29.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:05:29.958 [DEBUG] [Thread-30442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:05:29.958 [DEBUG] [Thread-30442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:05:29.958 [DEBUG] [Thread-30442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:05:29.999 [DEBUG] [Thread-30442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:05:29.999 [DEBUG] [Thread-30442] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:05:30.001 [DEBUG] [Thread-30442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:05:30.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:05:30.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:05:30.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:05:30.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:05:30.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:05:30.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:05:30.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:05:30.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:05:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:05:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.044921 -999.00   +8.80  10.61     89   +7.20 1 1 1 3 1     0    0 1.50 0.65 .NESw 11.6 10.6 87.7 13.9 9.1 -25.6 8.9 -24.1 8.6 -22.0 8.9 -24.2
2026-04-16T03:05:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:05:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:05:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.044921
2026-04-16T03:05:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:05:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:05:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:05:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:05:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:05:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:05:13', tmtdew=1.44671, humidity=90.5716, cloud=0.0, wind=13.4104, temperature=8.63257, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:04:41.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 2.5349999999999993, nan, nan, nan, nan, nan, nan, nan, 1.569, nan, nan, nan, nan, nan, nan, 2.996999999999999, 1.9632499999999986, nan, nan, 0.2742500000000003, -0.06375000000000064, 0.24900000000000055, 0.2939999999999987, 0.48575000000000035, 0.25849999999999973, 0.2265000000000006, 0.28600000000000136, 0.0730000000000004, -0.08249999999999957, -0.12325000000000053], zp_timestamp='2026-04-16T01:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:05:30.022 [DEBUG] [Thread-30442] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:05:30.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:05:30.241 [DEBUG] [Thread-30445] [transport.py] [_log()] starting thread (client mode): 0xee9eb910
2026-04-16T03:05:30.241 [DEBUG] [Thread-30445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:05:30.255 [DEBUG] [Thread-30445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:05:30.255 [INFO] [Thread-30445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:05:30.263 [DEBUG] [Thread-30445] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:05:30.263 [DEBUG] [Thread-30445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:05:30.263 [DEBUG] [Thread-30445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:05:30.263 [DEBUG] [Thread-30445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:05:30.263 [DEBUG] [Thread-30445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:05:30.263 [DEBUG] [Thread-30445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:05:30.264 [DEBUG] [Thread-30445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:05:30.264 [DEBUG] [Thread-30445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:05:30.264 [DEBUG] [Thread-30445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:05:30.264 [DEBUG] [Thread-30445] [transport.py] [_log()] client lang: <none>
2026-04-16T03:05:30.264 [DEBUG] [Thread-30445] [transport.py] [_log()] server lang: <none>
2026-04-16T03:05:30.264 [DEBUG] [Thread-30445] [transport.py] [_log()] kex follows: False
2026-04-16T03:05:30.264 [DEBUG] [Thread-30445] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:05:30.264 [DEBUG] [Thread-30445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:05:30.264 [DEBUG] [Thread-30445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:05:30.264 [DEBUG] [Thread-30445] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:05:30.264 [DEBUG] [Thread-30445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:05:30.265 [DEBUG] [Thread-30445] [transport.py] [_log()] Compression: none
2026-04-16T03:05:30.265 [DEBUG] [Thread-30445] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:05:30.321 [DEBUG] [Thread-30445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:05:30.321 [DEBUG] [Thread-30445] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:05:30.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:05:30.322 [DEBUG] [Thread-30445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:05:30.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:05:30.377 [DEBUG] [Thread-30445] [transport.py] [_log()] userauth is OK
2026-04-16T03:05:30.377 [DEBUG] [Thread-30445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:05:30.378 [DEBUG] [Thread-30445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:05:30.378 [DEBUG] [Thread-30445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:05:30.378 [DEBUG] [Thread-30445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:05:30.402 [INFO] [Thread-30445] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:05:30.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:05:30.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:05:31.216 [DEBUG] [Thread-30445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:05:31.216 [DEBUG] [Thread-30445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:05:31.263 [DEBUG] [Thread-30445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:05:31.264 [DEBUG] [Thread-30445] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:05:31.273 [DEBUG] [Thread-30445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:05:31.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:05:31.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')
2026-04-16T03:05:31.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
2026-04-16T03:05:31.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:05:31.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:05:31.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:05:31.307 [DEBUG] [Thread-30445] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:05:43.745 [DEBUG] [Thread-30447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:05:58.790 [DEBUG] [Thread-30448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:05:58.903 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:05:58.904 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:06:01.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:06:01.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:06:01.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T03:06:02.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 5, 49), 1.18328, 92.2091, 0.0, 15.7385, 8.39796, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:06:02.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:05:49
2026-04-16T03:06:02.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:06:03.392 [DEBUG] [Thread-30449] [transport.py] [_log()] starting thread (client mode): 0xf1366fb0
2026-04-16T03:06:03.392 [DEBUG] [Thread-30449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:06:03.411 [DEBUG] [Thread-30449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:06:03.412 [INFO] [Thread-30449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:06:03.415 [DEBUG] [Thread-30449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:06:03.415 [DEBUG] [Thread-30449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:06:03.415 [DEBUG] [Thread-30449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:06:03.415 [DEBUG] [Thread-30449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:06:03.415 [DEBUG] [Thread-30449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:06:03.415 [DEBUG] [Thread-30449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:06:03.415 [DEBUG] [Thread-30449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:06:03.415 [DEBUG] [Thread-30449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:06:03.415 [DEBUG] [Thread-30449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:06:03.415 [DEBUG] [Thread-30449] [transport.py] [_log()] client lang: <none>
2026-04-16T03:06:03.415 [DEBUG] [Thread-30449] [transport.py] [_log()] server lang: <none>
2026-04-16T03:06:03.416 [DEBUG] [Thread-30449] [transport.py] [_log()] kex follows: False
2026-04-16T03:06:03.416 [DEBUG] [Thread-30449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:06:03.416 [DEBUG] [Thread-30449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:06:03.416 [DEBUG] [Thread-30449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:06:03.416 [DEBUG] [Thread-30449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:06:03.416 [DEBUG] [Thread-30449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:06:03.416 [DEBUG] [Thread-30449] [transport.py] [_log()] Compression: none
2026-04-16T03:06:03.416 [DEBUG] [Thread-30449] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:06:03.432 [DEBUG] [Thread-30449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:06:03.433 [DEBUG] [Thread-30449] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:06:03.433 [DEBUG] [Thread-30449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:06:03.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:06:03.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:06:03.476 [DEBUG] [Thread-30449] [transport.py] [_log()] userauth is OK
2026-04-16T03:06:03.477 [DEBUG] [Thread-30449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:06:03.477 [DEBUG] [Thread-30449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:06:03.477 [DEBUG] [Thread-30449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:06:03.477 [DEBUG] [Thread-30449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:06:03.513 [INFO] [Thread-30449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:06:03.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:06:04.144 [DEBUG] [Thread-30449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:06:04.144 [DEBUG] [Thread-30449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:06:04.145 [DEBUG] [Thread-30449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:06:04.185 [DEBUG] [Thread-30449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:06:04.185 [DEBUG] [Thread-30449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:06:04.187 [DEBUG] [Thread-30449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:06:04.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:06:04.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:06:04.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:06:04.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:06:04.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:06:04.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:06:04.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:06:04.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:06:04.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:06:04.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.045615 -999.00   +8.80  13.69     89   +7.20 1 1 1 3 1     0    0 1.55 2.01 .NESW 13.4 13.7 70.4 15.5 9.1 -25.3 8.9 -24.3 8.7 -22.1 9.0 -24.1
2026-04-16T03:06:04.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:06:04.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:06:04.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.045615
2026-04-16T03:06:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:06:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:06:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:06:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:06:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:06:04.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:05:49', tmtdew=1.18328, humidity=92.2091, cloud=0.0, wind=15.7385, temperature=8.39796, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:05:41.136', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 2.5349999999999993, nan, nan, nan, nan, nan, nan, nan, 1.569, nan, nan, nan, nan, nan, nan, 2.996999999999999, 1.9632499999999986, nan, nan, 0.2742500000000003, -0.06375000000000064, 0.24900000000000055, 0.2939999999999987, 0.48575000000000035, 0.25849999999999973, 0.2265000000000006, 0.28600000000000136, 0.0730000000000004, -0.08249999999999957, -0.12325000000000053], zp_timestamp='2026-04-16T01:03:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:06:04.207 [DEBUG] [Thread-30449] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:06:04.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:06:10.393 [DEBUG] [Thread-30452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:06:13.820 [DEBUG] [Thread-30453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:06:28.864 [DEBUG] [Thread-30454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:06:43.897 [DEBUG] [Thread-30455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:06:58.928 [DEBUG] [Thread-30456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:06:59.112 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:06:59.113 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:07:10.537 [DEBUG] [Thread-30457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:07:13.959 [DEBUG] [Thread-30458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:07:28.989 [DEBUG] [Thread-30459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:07:44.018 [DEBUG] [Thread-30460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:07:59.050 [DEBUG] [Thread-30461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:07:59.317 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:07:59.318 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:08:10.690 [DEBUG] [Thread-30462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:08:14.081 [DEBUG] [Thread-30463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:08:19.466 [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
2026-04-16T03:08:29.112 [DEBUG] [Thread-30464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:08:44.144 [DEBUG] [Thread-30465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:08:49.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:08:49.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:08:49.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
2026-04-16T03:08:50.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 8, 11), 1.54199, 90.1041, 0.0, 13.1281, 8.73191, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:08:50.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:08:11
2026-04-16T03:08:51.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:08:51.806 [DEBUG] [Thread-30466] [transport.py] [_log()] starting thread (client mode): 0xf1366710
2026-04-16T03:08:51.807 [DEBUG] [Thread-30466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:08:51.826 [DEBUG] [Thread-30466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:08:51.827 [INFO] [Thread-30466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:08:51.830 [DEBUG] [Thread-30466] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:08:51.830 [DEBUG] [Thread-30466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:08:51.830 [DEBUG] [Thread-30466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:08:51.830 [DEBUG] [Thread-30466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:08:51.830 [DEBUG] [Thread-30466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:08:51.830 [DEBUG] [Thread-30466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:08:51.830 [DEBUG] [Thread-30466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:08:51.830 [DEBUG] [Thread-30466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:08:51.830 [DEBUG] [Thread-30466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:08:51.830 [DEBUG] [Thread-30466] [transport.py] [_log()] client lang: <none>
2026-04-16T03:08:51.830 [DEBUG] [Thread-30466] [transport.py] [_log()] server lang: <none>
2026-04-16T03:08:51.830 [DEBUG] [Thread-30466] [transport.py] [_log()] kex follows: False
2026-04-16T03:08:51.830 [DEBUG] [Thread-30466] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:08:51.831 [DEBUG] [Thread-30466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:08:51.831 [DEBUG] [Thread-30466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:08:51.831 [DEBUG] [Thread-30466] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:08:51.831 [DEBUG] [Thread-30466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:08:51.831 [DEBUG] [Thread-30466] [transport.py] [_log()] Compression: none
2026-04-16T03:08:51.831 [DEBUG] [Thread-30466] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:08:51.845 [DEBUG] [Thread-30466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:08:51.846 [DEBUG] [Thread-30466] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:08:51.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:08:51.846 [DEBUG] [Thread-30466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:08:51.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:08:51.847 [DEBUG] [Thread-30466] [transport.py] [_log()] userauth is OK
2026-04-16T03:08:51.847 [DEBUG] [Thread-30466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:08:51.847 [DEBUG] [Thread-30466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:08:51.847 [DEBUG] [Thread-30466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:08:51.847 [DEBUG] [Thread-30466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:08:51.867 [INFO] [Thread-30466] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:08:51.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:08:52.533 [DEBUG] [Thread-30466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:08:52.533 [DEBUG] [Thread-30466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:08:52.533 [DEBUG] [Thread-30466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:08:52.573 [DEBUG] [Thread-30466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:08:52.574 [DEBUG] [Thread-30466] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:08:52.576 [DEBUG] [Thread-30466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:08:52.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:08:52.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:08:52.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:08:52.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:08:52.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:08:52.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:08:52.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:08:52.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:08:52.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:08:52.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.047698 -999.00   +8.80  12.54     89   +7.20 1 2 1 3 1     0    0 1.71 5.90 .NESW 13.5 12.5 91.6 15.3 9.1 -25.3 8.9 -24.0 8.7 -21.9 9.0 -24.1
2026-04-16T03:08:52.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:08:52.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:08:52.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.047698
2026-04-16T03:08:52.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:08:52.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:08:52.594 [DEBUG] [Thread-30466] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:08:52.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:08:52.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:08:52.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-16T03:08:52.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:08:11', tmtdew=1.54199, humidity=90.1041, cloud=0.0, wind=13.1281, temperature=8.73191, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:08:41.107', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.0004999999999997, nan, nan, nan, nan, nan, 3.072, nan, 1.5649999999999995, nan, nan, nan, nan, nan, nan, nan, 2.4552499999999986, nan, nan, 0.14725000000000144, -0.045249999999999346, 0.09999999999999964, 0.2829999999999995, 0.4122500000000002, 0.3055000000000003, 0.21899999999999942, 0.24350000000000094, 0.12600000000000122, -0.023499999999998522, -0.04725000000000179], zp_timestamp='2026-04-16T01:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:08:52.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:08:52.804 [DEBUG] [Thread-30469] [transport.py] [_log()] starting thread (client mode): 0xf13ca2c0
2026-04-16T03:08:52.804 [DEBUG] [Thread-30469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:08:52.817 [DEBUG] [Thread-30469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:08:52.817 [INFO] [Thread-30469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:08:52.824 [DEBUG] [Thread-30469] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:08:52.824 [DEBUG] [Thread-30469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:08:52.825 [DEBUG] [Thread-30469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:08:52.825 [DEBUG] [Thread-30469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:08:52.825 [DEBUG] [Thread-30469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:08:52.825 [DEBUG] [Thread-30469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:08:52.825 [DEBUG] [Thread-30469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:08:52.825 [DEBUG] [Thread-30469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:08:52.825 [DEBUG] [Thread-30469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:08:52.825 [DEBUG] [Thread-30469] [transport.py] [_log()] client lang: <none>
2026-04-16T03:08:52.825 [DEBUG] [Thread-30469] [transport.py] [_log()] server lang: <none>
2026-04-16T03:08:52.825 [DEBUG] [Thread-30469] [transport.py] [_log()] kex follows: False
2026-04-16T03:08:52.825 [DEBUG] [Thread-30469] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:08:52.826 [DEBUG] [Thread-30469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:08:52.826 [DEBUG] [Thread-30469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:08:52.826 [DEBUG] [Thread-30469] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:08:52.826 [DEBUG] [Thread-30469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:08:52.826 [DEBUG] [Thread-30469] [transport.py] [_log()] Compression: none
2026-04-16T03:08:52.826 [DEBUG] [Thread-30469] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:08:52.880 [DEBUG] [Thread-30469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:08:52.881 [DEBUG] [Thread-30469] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:08:52.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:08:52.881 [DEBUG] [Thread-30469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:08:52.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:08:52.937 [DEBUG] [Thread-30469] [transport.py] [_log()] userauth is OK
2026-04-16T03:08:52.937 [DEBUG] [Thread-30469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:08:52.938 [DEBUG] [Thread-30469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:08:52.938 [DEBUG] [Thread-30469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:08:52.938 [DEBUG] [Thread-30469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:08:52.965 [INFO] [Thread-30469] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:08:52.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:08:52.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:08:53.794 [DEBUG] [Thread-30469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:08:53.794 [DEBUG] [Thread-30469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:08:53.842 [DEBUG] [Thread-30469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:08:53.842 [DEBUG] [Thread-30469] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:08:53.851 [DEBUG] [Thread-30469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:08:53.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:08:53.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')
2026-04-16T03:08:53.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
2026-04-16T03:08:53.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:08:53.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:08:53.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:08:53.885 [DEBUG] [Thread-30469] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:08:59.177 [DEBUG] [Thread-30471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:08:59.524 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:08:59.525 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:09:10.853 [DEBUG] [Thread-30472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:09:14.223 [DEBUG] [Thread-30473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:09:23.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:09:23.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:09:23.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
2026-04-16T03:09:25.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 8, 46), 1.18814, 92.1748, 0.0, 15.5974, 8.33092, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:09:25.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:08:46
2026-04-16T03:09:25.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:09:26.202 [DEBUG] [Thread-30474] [transport.py] [_log()] starting thread (client mode): 0xee954550
2026-04-16T03:09:26.202 [DEBUG] [Thread-30474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:09:26.216 [DEBUG] [Thread-30474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:09:26.216 [INFO] [Thread-30474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:09:26.219 [DEBUG] [Thread-30474] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:09:26.219 [DEBUG] [Thread-30474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:09:26.219 [DEBUG] [Thread-30474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:09:26.219 [DEBUG] [Thread-30474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:09:26.219 [DEBUG] [Thread-30474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:09:26.219 [DEBUG] [Thread-30474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:09:26.219 [DEBUG] [Thread-30474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:09:26.219 [DEBUG] [Thread-30474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:09:26.220 [DEBUG] [Thread-30474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:09:26.220 [DEBUG] [Thread-30474] [transport.py] [_log()] client lang: <none>
2026-04-16T03:09:26.220 [DEBUG] [Thread-30474] [transport.py] [_log()] server lang: <none>
2026-04-16T03:09:26.220 [DEBUG] [Thread-30474] [transport.py] [_log()] kex follows: False
2026-04-16T03:09:26.220 [DEBUG] [Thread-30474] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:09:26.220 [DEBUG] [Thread-30474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:09:26.220 [DEBUG] [Thread-30474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:09:26.220 [DEBUG] [Thread-30474] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:09:26.220 [DEBUG] [Thread-30474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:09:26.220 [DEBUG] [Thread-30474] [transport.py] [_log()] Compression: none
2026-04-16T03:09:26.220 [DEBUG] [Thread-30474] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:09:26.238 [DEBUG] [Thread-30474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:09:26.238 [DEBUG] [Thread-30474] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:09:26.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:09:26.239 [DEBUG] [Thread-30474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:09:26.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:09:26.240 [DEBUG] [Thread-30474] [transport.py] [_log()] userauth is OK
2026-04-16T03:09:26.240 [DEBUG] [Thread-30474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:09:26.240 [DEBUG] [Thread-30474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:09:26.240 [DEBUG] [Thread-30474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:09:26.240 [DEBUG] [Thread-30474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:09:26.259 [INFO] [Thread-30474] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:09:26.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:09:26.876 [DEBUG] [Thread-30474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:09:26.876 [DEBUG] [Thread-30474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:09:26.877 [DEBUG] [Thread-30474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:09:26.917 [DEBUG] [Thread-30474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:09:26.917 [DEBUG] [Thread-30474] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:09:26.920 [DEBUG] [Thread-30474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:09:26.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:09:26.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:09:26.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:09:26.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:09:26.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:09:26.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:09:26.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:09:26.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:09:26.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:09:26.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.048046 -999.00   +8.80   7.83     89   +7.20 1 2 1 3 1     0    0 1.75 6.48 .NEsW 10.5 7.8 102.5 15.1 9.1 -25.4 8.9 -24.1 8.6 -21.9 9.0 -23.9
2026-04-16T03:09:26.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:09:26.945 [DEBUG] [Thread-30474] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:09:26.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:09:26.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.048046
2026-04-16T03:09:26.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:09:26.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:09:26.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:09:26.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:09:26.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-16T03:09:26.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:08:46', tmtdew=1.18814, humidity=92.1748, cloud=0.0, wind=15.5974, temperature=8.33092, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:09:11.174', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.0004999999999997, nan, nan, nan, nan, nan, 3.072, nan, 1.5649999999999995, nan, nan, nan, nan, nan, nan, nan, 2.4552499999999986, nan, nan, 0.14725000000000144, -0.045249999999999346, 0.09999999999999964, 0.2829999999999995, 0.4122500000000002, 0.3055000000000003, 0.21899999999999942, 0.24350000000000094, 0.12600000000000122, -0.023499999999998522, -0.04725000000000179], zp_timestamp='2026-04-16T01:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:09:27.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:09:27.215 [DEBUG] [Thread-30477] [transport.py] [_log()] starting thread (client mode): 0xf1367490
2026-04-16T03:09:27.215 [DEBUG] [Thread-30477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:09:27.229 [DEBUG] [Thread-30477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:09:27.230 [INFO] [Thread-30477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:09:27.237 [DEBUG] [Thread-30477] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:09:27.237 [DEBUG] [Thread-30477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:09:27.237 [DEBUG] [Thread-30477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:09:27.237 [DEBUG] [Thread-30477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:09:27.237 [DEBUG] [Thread-30477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:09:27.237 [DEBUG] [Thread-30477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:09:27.238 [DEBUG] [Thread-30477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:09:27.238 [DEBUG] [Thread-30477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:09:27.238 [DEBUG] [Thread-30477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:09:27.238 [DEBUG] [Thread-30477] [transport.py] [_log()] client lang: <none>
2026-04-16T03:09:27.238 [DEBUG] [Thread-30477] [transport.py] [_log()] server lang: <none>
2026-04-16T03:09:27.238 [DEBUG] [Thread-30477] [transport.py] [_log()] kex follows: False
2026-04-16T03:09:27.238 [DEBUG] [Thread-30477] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:09:27.238 [DEBUG] [Thread-30477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:09:27.238 [DEBUG] [Thread-30477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:09:27.238 [DEBUG] [Thread-30477] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:09:27.238 [DEBUG] [Thread-30477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:09:27.238 [DEBUG] [Thread-30477] [transport.py] [_log()] Compression: none
2026-04-16T03:09:27.239 [DEBUG] [Thread-30477] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:09:27.296 [DEBUG] [Thread-30477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:09:27.296 [DEBUG] [Thread-30477] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:09:27.297 [DEBUG] [Thread-30477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:09:27.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:09:27.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:09:27.352 [DEBUG] [Thread-30477] [transport.py] [_log()] userauth is OK
2026-04-16T03:09:27.353 [DEBUG] [Thread-30477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:09:27.353 [DEBUG] [Thread-30477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:09:27.353 [DEBUG] [Thread-30477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:09:27.353 [DEBUG] [Thread-30477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:09:27.372 [INFO] [Thread-30477] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:09:27.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:09:27.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:09:28.202 [DEBUG] [Thread-30477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:09:28.202 [DEBUG] [Thread-30477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:09:28.252 [DEBUG] [Thread-30477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:09:28.253 [DEBUG] [Thread-30477] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:09:28.265 [DEBUG] [Thread-30477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:09:28.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:09:28.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')
2026-04-16T03:09:28.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
2026-04-16T03:09:28.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:09:28.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:09:28.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:09:28.300 [DEBUG] [Thread-30477] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:09:29.254 [DEBUG] [Thread-30479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:09:44.297 [DEBUG] [Thread-30480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:09:58.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:09:58.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:09:58.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
2026-04-16T03:09:59.328 [DEBUG] [Thread-30481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:09:59.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 9, 22), 1.57307, 90.2201, 0.0, 13.0046, 8.66546, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:09:59.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:09:22
2026-04-16T03:09:59.729 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:09:59.730 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:10:00.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:10:00.549 [DEBUG] [Thread-30482] [transport.py] [_log()] starting thread (client mode): 0xee9eb220
2026-04-16T03:10:00.550 [DEBUG] [Thread-30482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:10:00.570 [DEBUG] [Thread-30482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:10:00.570 [INFO] [Thread-30482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:10:00.573 [DEBUG] [Thread-30482] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:10:00.573 [DEBUG] [Thread-30482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:10:00.573 [DEBUG] [Thread-30482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:10:00.573 [DEBUG] [Thread-30482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:10:00.573 [DEBUG] [Thread-30482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:10:00.574 [DEBUG] [Thread-30482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:10:00.574 [DEBUG] [Thread-30482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:10:00.574 [DEBUG] [Thread-30482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:10:00.574 [DEBUG] [Thread-30482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:10:00.574 [DEBUG] [Thread-30482] [transport.py] [_log()] client lang: <none>
2026-04-16T03:10:00.574 [DEBUG] [Thread-30482] [transport.py] [_log()] server lang: <none>
2026-04-16T03:10:00.574 [DEBUG] [Thread-30482] [transport.py] [_log()] kex follows: False
2026-04-16T03:10:00.574 [DEBUG] [Thread-30482] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:10:00.574 [DEBUG] [Thread-30482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:10:00.574 [DEBUG] [Thread-30482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:10:00.574 [DEBUG] [Thread-30482] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:10:00.575 [DEBUG] [Thread-30482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:10:00.575 [DEBUG] [Thread-30482] [transport.py] [_log()] Compression: none
2026-04-16T03:10:00.575 [DEBUG] [Thread-30482] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:10:00.591 [DEBUG] [Thread-30482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:10:00.591 [DEBUG] [Thread-30482] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:10:00.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:10:00.592 [DEBUG] [Thread-30482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:10:00.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:10:00.593 [DEBUG] [Thread-30482] [transport.py] [_log()] userauth is OK
2026-04-16T03:10:00.593 [DEBUG] [Thread-30482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:10:00.593 [DEBUG] [Thread-30482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:10:00.594 [DEBUG] [Thread-30482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:10:00.594 [DEBUG] [Thread-30482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:10:00.619 [INFO] [Thread-30482] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:10:00.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:10:01.263 [DEBUG] [Thread-30482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:10:01.264 [DEBUG] [Thread-30482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:10:01.264 [DEBUG] [Thread-30482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:10:01.304 [DEBUG] [Thread-30482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:10:01.304 [DEBUG] [Thread-30482] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:10:01.307 [DEBUG] [Thread-30482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:10:01.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:10:01.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:10:01.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:10:01.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:10:01.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:10:01.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:10:01.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:10:01.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:10:01.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:10:01.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.048393 -999.00   +8.80  13.26     89   +7.20 1 2 1 3 1     0    0 1.71 6.58 .NEsW 11.0 13.3 64.6 15.3 9.1 -25.4 8.9 -24.1 8.7 -21.9 9.0 -24.1
2026-04-16T03:10:01.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:10:01.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:10:01.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.048393
2026-04-16T03:10:01.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:10:01.331 [DEBUG] [Thread-30482] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:10:01.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:10:01.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:10:01.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:10:01.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-16T03:10:01.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:09:22', tmtdew=1.57307, humidity=90.2201, cloud=0.0, wind=13.0046, temperature=8.66546, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:09:41.155', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 1.0004999999999997, nan, nan, nan, nan, nan, 3.072, nan, 1.5649999999999995, nan, nan, nan, nan, nan, nan, nan, 2.4552499999999986, nan, nan, 0.14725000000000144, -0.045249999999999346, 0.09999999999999964, 0.2829999999999995, 0.4122500000000002, 0.3055000000000003, 0.21899999999999942, 0.24350000000000094, 0.12600000000000122, -0.023499999999998522, -0.04725000000000179], zp_timestamp='2026-04-16T01:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:10:01.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:10:01.582 [DEBUG] [Thread-30485] [transport.py] [_log()] starting thread (client mode): 0xf13c9b70
2026-04-16T03:10:01.583 [DEBUG] [Thread-30485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:10:01.596 [DEBUG] [Thread-30485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:10:01.596 [INFO] [Thread-30485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:10:01.607 [DEBUG] [Thread-30485] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:10:01.607 [DEBUG] [Thread-30485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:10:01.607 [DEBUG] [Thread-30485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:10:01.607 [DEBUG] [Thread-30485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:10:01.607 [DEBUG] [Thread-30485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:10:01.608 [DEBUG] [Thread-30485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:10:01.608 [DEBUG] [Thread-30485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:10:01.608 [DEBUG] [Thread-30485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:10:01.608 [DEBUG] [Thread-30485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:10:01.608 [DEBUG] [Thread-30485] [transport.py] [_log()] client lang: <none>
2026-04-16T03:10:01.608 [DEBUG] [Thread-30485] [transport.py] [_log()] server lang: <none>
2026-04-16T03:10:01.608 [DEBUG] [Thread-30485] [transport.py] [_log()] kex follows: False
2026-04-16T03:10:01.608 [DEBUG] [Thread-30485] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:10:01.608 [DEBUG] [Thread-30485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:10:01.608 [DEBUG] [Thread-30485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:10:01.608 [DEBUG] [Thread-30485] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:10:01.609 [DEBUG] [Thread-30485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:10:01.609 [DEBUG] [Thread-30485] [transport.py] [_log()] Compression: none
2026-04-16T03:10:01.609 [DEBUG] [Thread-30485] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:10:01.661 [DEBUG] [Thread-30485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:10:01.661 [DEBUG] [Thread-30485] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:10:01.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:10:01.661 [DEBUG] [Thread-30485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:10:01.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:10:01.716 [DEBUG] [Thread-30485] [transport.py] [_log()] userauth is OK
2026-04-16T03:10:01.716 [DEBUG] [Thread-30485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:10:01.717 [DEBUG] [Thread-30485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:10:01.717 [DEBUG] [Thread-30485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:10:01.717 [DEBUG] [Thread-30485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:10:01.740 [INFO] [Thread-30485] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:10:01.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:10:01.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:10:02.584 [DEBUG] [Thread-30485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:10:02.585 [DEBUG] [Thread-30485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:10:02.632 [DEBUG] [Thread-30485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:10:02.632 [DEBUG] [Thread-30485] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:10:02.641 [DEBUG] [Thread-30485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:10:02.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:10:02.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')
2026-04-16T03:10:02.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
2026-04-16T03:10:02.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:10:02.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:10:02.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:10:02.675 [DEBUG] [Thread-30485] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:10:11.026 [DEBUG] [Thread-30487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:10:14.359 [DEBUG] [Thread-30488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:10:29.400 [DEBUG] [Thread-30489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:10:32.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:10:32.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:10:32.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
2026-04-16T03:10:33.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 9, 58), 1.59417, 89.5877, 0.0, 13.3574, 8.68222, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:10:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:09:58
2026-04-16T03:10:34.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:10:34.862 [DEBUG] [Thread-30490] [transport.py] [_log()] starting thread (client mode): 0xf1335e40
2026-04-16T03:10:34.863 [DEBUG] [Thread-30490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:10:34.881 [DEBUG] [Thread-30490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:10:34.882 [INFO] [Thread-30490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] client lang: <none>
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] server lang: <none>
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] kex follows: False
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:10:34.885 [DEBUG] [Thread-30490] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:10:34.886 [DEBUG] [Thread-30490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:10:34.886 [DEBUG] [Thread-30490] [transport.py] [_log()] Compression: none
2026-04-16T03:10:34.886 [DEBUG] [Thread-30490] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:10:34.893 [DEBUG] [Thread-30490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:10:34.893 [DEBUG] [Thread-30490] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:10:34.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:10:34.894 [DEBUG] [Thread-30490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:10:34.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:10:34.895 [DEBUG] [Thread-30490] [transport.py] [_log()] userauth is OK
2026-04-16T03:10:34.895 [DEBUG] [Thread-30490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:10:34.895 [DEBUG] [Thread-30490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:10:34.895 [DEBUG] [Thread-30490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:10:34.895 [DEBUG] [Thread-30490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:10:34.907 [INFO] [Thread-30490] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:10:34.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:10:35.531 [DEBUG] [Thread-30490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:10:35.531 [DEBUG] [Thread-30490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:10:35.532 [DEBUG] [Thread-30490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:10:35.572 [DEBUG] [Thread-30490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:10:35.572 [DEBUG] [Thread-30490] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:10:35.575 [DEBUG] [Thread-30490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:10:35.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:10:35.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:10:35.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:10:35.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:10:35.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:10:35.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:10:35.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:10:35.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:10:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:10:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.048740 -999.00   +8.80  12.43     89   +7.20 1 1 1 3 1     0    0 1.75 7.16 .NEsW 7.4 12.4 63.0 15.9 9.1 -25.4 8.9 -24.1 8.7 -22.0 9.0 -24.0
2026-04-16T03:10:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:10:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:10:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.048740
2026-04-16T03:10:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:10:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:10:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:10:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:10:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:10:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:09:58', tmtdew=1.59417, humidity=89.5877, cloud=0.0, wind=13.3574, temperature=8.68222, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:10:11.136', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 1.0004999999999997, nan, nan, nan, nan, nan, 3.072, nan, 1.5649999999999995, nan, nan, nan, nan, nan, nan, nan, 2.4552499999999986, nan, nan, 0.14725000000000144, -0.045249999999999346, 0.09999999999999964, 0.2829999999999995, 0.4122500000000002, 0.3055000000000003, 0.21899999999999942, 0.24350000000000094, 0.12600000000000122, -0.023499999999998522, -0.04725000000000179], zp_timestamp='2026-04-16T01:06:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:10:35.595 [DEBUG] [Thread-30490] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:10:35.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:10:35.835 [DEBUG] [Thread-30493] [transport.py] [_log()] starting thread (client mode): 0xf1335e10
2026-04-16T03:10:35.835 [DEBUG] [Thread-30493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:10:35.850 [DEBUG] [Thread-30493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:10:35.850 [INFO] [Thread-30493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:10:35.857 [DEBUG] [Thread-30493] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:10:35.857 [DEBUG] [Thread-30493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:10:35.857 [DEBUG] [Thread-30493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:10:35.857 [DEBUG] [Thread-30493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:10:35.857 [DEBUG] [Thread-30493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:10:35.857 [DEBUG] [Thread-30493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:10:35.858 [DEBUG] [Thread-30493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:10:35.858 [DEBUG] [Thread-30493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:10:35.858 [DEBUG] [Thread-30493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:10:35.858 [DEBUG] [Thread-30493] [transport.py] [_log()] client lang: <none>
2026-04-16T03:10:35.858 [DEBUG] [Thread-30493] [transport.py] [_log()] server lang: <none>
2026-04-16T03:10:35.858 [DEBUG] [Thread-30493] [transport.py] [_log()] kex follows: False
2026-04-16T03:10:35.858 [DEBUG] [Thread-30493] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:10:35.858 [DEBUG] [Thread-30493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:10:35.858 [DEBUG] [Thread-30493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:10:35.858 [DEBUG] [Thread-30493] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:10:35.858 [DEBUG] [Thread-30493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:10:35.859 [DEBUG] [Thread-30493] [transport.py] [_log()] Compression: none
2026-04-16T03:10:35.859 [DEBUG] [Thread-30493] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:10:35.915 [DEBUG] [Thread-30493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:10:35.916 [DEBUG] [Thread-30493] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:10:35.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:10:35.916 [DEBUG] [Thread-30493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:10:35.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:10:35.972 [DEBUG] [Thread-30493] [transport.py] [_log()] userauth is OK
2026-04-16T03:10:35.972 [DEBUG] [Thread-30493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:10:35.972 [DEBUG] [Thread-30493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:10:35.972 [DEBUG] [Thread-30493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:10:35.972 [DEBUG] [Thread-30493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:10:35.991 [INFO] [Thread-30493] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:10:35.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:10:35.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:10:36.812 [DEBUG] [Thread-30493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:10:36.813 [DEBUG] [Thread-30493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:10:36.860 [DEBUG] [Thread-30493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:10:36.860 [DEBUG] [Thread-30493] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:10:36.869 [DEBUG] [Thread-30493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:10:36.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:10:36.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')
2026-04-16T03:10:36.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
2026-04-16T03:10:36.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:10:36.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:10:36.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:10:36.904 [DEBUG] [Thread-30493] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:10:44.431 [DEBUG] [Thread-30495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:10:59.478 [DEBUG] [Thread-30496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:10:59.935 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:10:59.936 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:11:06.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:11:06.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:11:06.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
2026-04-16T03:11:08.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 10, 33), 1.17811, 92.2417, 0.0, 15.3504, 8.39762, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:11:08.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:10:33
2026-04-16T03:11:08.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:11:09.137 [DEBUG] [Thread-30497] [transport.py] [_log()] starting thread (client mode): 0xf13ca8f0
2026-04-16T03:11:09.137 [DEBUG] [Thread-30497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:11:09.157 [DEBUG] [Thread-30497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:11:09.157 [INFO] [Thread-30497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:11:09.159 [DEBUG] [Thread-30497] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:11:09.159 [DEBUG] [Thread-30497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:11:09.159 [DEBUG] [Thread-30497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:11:09.159 [DEBUG] [Thread-30497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:11:09.159 [DEBUG] [Thread-30497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:11:09.159 [DEBUG] [Thread-30497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:11:09.159 [DEBUG] [Thread-30497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:11:09.159 [DEBUG] [Thread-30497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:11:09.159 [DEBUG] [Thread-30497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:11:09.159 [DEBUG] [Thread-30497] [transport.py] [_log()] client lang: <none>
2026-04-16T03:11:09.160 [DEBUG] [Thread-30497] [transport.py] [_log()] server lang: <none>
2026-04-16T03:11:09.160 [DEBUG] [Thread-30497] [transport.py] [_log()] kex follows: False
2026-04-16T03:11:09.160 [DEBUG] [Thread-30497] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:11:09.160 [DEBUG] [Thread-30497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:11:09.160 [DEBUG] [Thread-30497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:11:09.160 [DEBUG] [Thread-30497] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:11:09.160 [DEBUG] [Thread-30497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:11:09.160 [DEBUG] [Thread-30497] [transport.py] [_log()] Compression: none
2026-04-16T03:11:09.160 [DEBUG] [Thread-30497] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:11:09.172 [DEBUG] [Thread-30497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:11:09.172 [DEBUG] [Thread-30497] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:11:09.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:11:09.173 [DEBUG] [Thread-30497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:11:09.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:11:09.174 [DEBUG] [Thread-30497] [transport.py] [_log()] userauth is OK
2026-04-16T03:11:09.174 [DEBUG] [Thread-30497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:11:09.174 [DEBUG] [Thread-30497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:11:09.174 [DEBUG] [Thread-30497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:11:09.174 [DEBUG] [Thread-30497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:11:09.189 [INFO] [Thread-30497] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:11:09.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:11:09.813 [DEBUG] [Thread-30497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:11:09.814 [DEBUG] [Thread-30497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:11:09.814 [DEBUG] [Thread-30497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:11:09.855 [DEBUG] [Thread-30497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:11:09.855 [DEBUG] [Thread-30497] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:11:09.857 [DEBUG] [Thread-30497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:11:09.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:11:09.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:11:09.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:11:09.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:11:09.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:11:09.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:11:09.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:11:09.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:11:09.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:11:09.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.049087 -999.00   +8.80  12.53     89   +7.20 1 1 1 3 1     0    0 1.76 7.57 .NEsW 11.8 12.5 58.6 15.8 9.1 -25.4 8.9 -24.2 8.7 -22.0 9.0 -23.9
2026-04-16T03:11:09.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:11:09.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:11:09.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.049087
2026-04-16T03:11:09.882 [DEBUG] [Thread-30497] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:11:09.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:11:09.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:11:09.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:11:09.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:11:09.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:11:09.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:10:33', tmtdew=1.17811, humidity=92.2417, cloud=0.0, wind=15.3504, temperature=8.39762, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:10:41.117', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6845, nan, nan, nan, nan, nan, nan, 3.125499999999999, 2.3062499999999986, nan, 2.7017499999999988, 0.1172500000000003, -0.008250000000000313, 0.1269999999999989, 0.2865000000000002, 0.3177500000000002, 0.2814999999999994, 0.2110000000000003, 0.29550000000000143, 0.15300000000000225, 0.004000000000001336, -0.02925000000000111], zp_timestamp='2026-04-16T01:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:11:10.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:11:10.139 [DEBUG] [Thread-30500] [transport.py] [_log()] starting thread (client mode): 0xee9ea800
2026-04-16T03:11:10.139 [DEBUG] [Thread-30500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:11:10.153 [DEBUG] [Thread-30500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:11:10.154 [INFO] [Thread-30500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:11:10.164 [DEBUG] [Thread-30500] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:11:10.165 [DEBUG] [Thread-30500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:11:10.165 [DEBUG] [Thread-30500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:11:10.165 [DEBUG] [Thread-30500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:11:10.165 [DEBUG] [Thread-30500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:11:10.165 [DEBUG] [Thread-30500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:11:10.165 [DEBUG] [Thread-30500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:11:10.165 [DEBUG] [Thread-30500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:11:10.165 [DEBUG] [Thread-30500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:11:10.165 [DEBUG] [Thread-30500] [transport.py] [_log()] client lang: <none>
2026-04-16T03:11:10.165 [DEBUG] [Thread-30500] [transport.py] [_log()] server lang: <none>
2026-04-16T03:11:10.165 [DEBUG] [Thread-30500] [transport.py] [_log()] kex follows: False
2026-04-16T03:11:10.166 [DEBUG] [Thread-30500] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:11:10.166 [DEBUG] [Thread-30500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:11:10.166 [DEBUG] [Thread-30500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:11:10.166 [DEBUG] [Thread-30500] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:11:10.166 [DEBUG] [Thread-30500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:11:10.166 [DEBUG] [Thread-30500] [transport.py] [_log()] Compression: none
2026-04-16T03:11:10.166 [DEBUG] [Thread-30500] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:11:10.218 [DEBUG] [Thread-30500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:11:10.218 [DEBUG] [Thread-30500] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:11:10.219 [DEBUG] [Thread-30500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:11:10.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:11:10.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:11:10.275 [DEBUG] [Thread-30500] [transport.py] [_log()] userauth is OK
2026-04-16T03:11:10.275 [DEBUG] [Thread-30500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:11:10.276 [DEBUG] [Thread-30500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:11:10.276 [DEBUG] [Thread-30500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:11:10.276 [DEBUG] [Thread-30500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:11:10.302 [INFO] [Thread-30500] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:11:10.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:11:10.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:11:11.129 [DEBUG] [Thread-30500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:11:11.129 [DEBUG] [Thread-30500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:11:11.176 [DEBUG] [Thread-30500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:11:11.176 [DEBUG] [Thread-30500] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:11:11.184 [DEBUG] [Thread-30500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:11:11.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:11:11.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')
2026-04-16T03:11:11.193 [DEBUG] [Thread-30502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:11:11.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
2026-04-16T03:11:11.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:11:11.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:11:11.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:11:11.216 [DEBUG] [Thread-30500] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:11:14.510 [DEBUG] [Thread-30503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:11:29.557 [DEBUG] [Thread-30504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:11:41.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:11:41.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:11:41.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
2026-04-16T03:11:42.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 11, 9), 1.69413, 89.0879, 0.0, 13.4104, 8.73236, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:11:42.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:11:09
2026-04-16T03:11:42.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:11:43.334 [DEBUG] [Thread-30505] [transport.py] [_log()] starting thread (client mode): 0xee9c7b20
2026-04-16T03:11:43.334 [DEBUG] [Thread-30505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:11:43.347 [DEBUG] [Thread-30505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:11:43.347 [INFO] [Thread-30505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:11:43.351 [DEBUG] [Thread-30505] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:11:43.351 [DEBUG] [Thread-30505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:11:43.351 [DEBUG] [Thread-30505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:11:43.351 [DEBUG] [Thread-30505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:11:43.351 [DEBUG] [Thread-30505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:11:43.351 [DEBUG] [Thread-30505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:11:43.351 [DEBUG] [Thread-30505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:11:43.351 [DEBUG] [Thread-30505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:11:43.351 [DEBUG] [Thread-30505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:11:43.351 [DEBUG] [Thread-30505] [transport.py] [_log()] client lang: <none>
2026-04-16T03:11:43.351 [DEBUG] [Thread-30505] [transport.py] [_log()] server lang: <none>
2026-04-16T03:11:43.351 [DEBUG] [Thread-30505] [transport.py] [_log()] kex follows: False
2026-04-16T03:11:43.352 [DEBUG] [Thread-30505] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:11:43.352 [DEBUG] [Thread-30505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:11:43.352 [DEBUG] [Thread-30505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:11:43.352 [DEBUG] [Thread-30505] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:11:43.352 [DEBUG] [Thread-30505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:11:43.352 [DEBUG] [Thread-30505] [transport.py] [_log()] Compression: none
2026-04-16T03:11:43.352 [DEBUG] [Thread-30505] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:11:43.360 [DEBUG] [Thread-30505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:11:43.360 [DEBUG] [Thread-30505] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:11:43.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:11:43.361 [DEBUG] [Thread-30505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:11:43.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:11:43.362 [DEBUG] [Thread-30505] [transport.py] [_log()] userauth is OK
2026-04-16T03:11:43.362 [DEBUG] [Thread-30505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:11:43.362 [DEBUG] [Thread-30505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:11:43.362 [DEBUG] [Thread-30505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:11:43.362 [DEBUG] [Thread-30505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:11:43.378 [INFO] [Thread-30505] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:11:43.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:11:43.982 [DEBUG] [Thread-30505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:11:43.982 [DEBUG] [Thread-30505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:11:43.983 [DEBUG] [Thread-30505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:11:44.023 [DEBUG] [Thread-30505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:11:44.023 [DEBUG] [Thread-30505] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:11:44.026 [DEBUG] [Thread-30505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:11:44.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:11:44.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:11:44.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:11:44.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:11:44.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:11:44.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:11:44.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:11:44.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:11:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:11:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.049434 -999.00   +8.80  13.69     89   +7.20 1 1 1 3 1     0    0 1.76 8.15 .NEsW 13.5 13.7 70.4 15.0 9.1 -25.4 8.9 -24.3 8.7 -21.9 9.0 -24.1
2026-04-16T03:11:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:11:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:11:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.049434
2026-04-16T03:11:44.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:11:44.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:11:44.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:11:44.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:11:44.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:11:44.051 [DEBUG] [Thread-30505] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:11:44.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:11:09', tmtdew=1.69413, humidity=89.0879, cloud=0.0, wind=13.4104, temperature=8.73236, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:11:11.098', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6845, nan, nan, nan, nan, nan, nan, 3.125499999999999, 2.3062499999999986, nan, 2.7017499999999988, 0.1172500000000003, -0.008250000000000313, 0.1269999999999989, 0.2865000000000002, 0.3177500000000002, 0.2814999999999994, 0.2110000000000003, 0.29550000000000143, 0.15300000000000225, 0.004000000000001336, -0.02925000000000111], zp_timestamp='2026-04-16T01:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:11:44.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:11:44.297 [DEBUG] [Thread-30508] [transport.py] [_log()] starting thread (client mode): 0xee907a00
2026-04-16T03:11:44.297 [DEBUG] [Thread-30508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:11:44.315 [DEBUG] [Thread-30508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:11:44.315 [INFO] [Thread-30508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:11:44.322 [DEBUG] [Thread-30508] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:11:44.322 [DEBUG] [Thread-30508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:11:44.322 [DEBUG] [Thread-30508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:11:44.322 [DEBUG] [Thread-30508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:11:44.322 [DEBUG] [Thread-30508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:11:44.322 [DEBUG] [Thread-30508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:11:44.322 [DEBUG] [Thread-30508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:11:44.323 [DEBUG] [Thread-30508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:11:44.323 [DEBUG] [Thread-30508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:11:44.323 [DEBUG] [Thread-30508] [transport.py] [_log()] client lang: <none>
2026-04-16T03:11:44.323 [DEBUG] [Thread-30508] [transport.py] [_log()] server lang: <none>
2026-04-16T03:11:44.323 [DEBUG] [Thread-30508] [transport.py] [_log()] kex follows: False
2026-04-16T03:11:44.323 [DEBUG] [Thread-30508] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:11:44.323 [DEBUG] [Thread-30508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:11:44.323 [DEBUG] [Thread-30508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:11:44.323 [DEBUG] [Thread-30508] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:11:44.323 [DEBUG] [Thread-30508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:11:44.323 [DEBUG] [Thread-30508] [transport.py] [_log()] Compression: none
2026-04-16T03:11:44.324 [DEBUG] [Thread-30508] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:11:44.383 [DEBUG] [Thread-30508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:11:44.383 [DEBUG] [Thread-30508] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:11:44.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:11:44.384 [DEBUG] [Thread-30508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:11:44.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:11:44.443 [DEBUG] [Thread-30508] [transport.py] [_log()] userauth is OK
2026-04-16T03:11:44.443 [DEBUG] [Thread-30508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:11:44.443 [DEBUG] [Thread-30508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:11:44.443 [DEBUG] [Thread-30508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:11:44.444 [DEBUG] [Thread-30508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:11:44.469 [INFO] [Thread-30508] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:11:44.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:11:44.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:11:44.588 [DEBUG] [Thread-30510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:11:45.281 [DEBUG] [Thread-30508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:11:45.281 [DEBUG] [Thread-30508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:11:45.329 [DEBUG] [Thread-30508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:11:45.329 [DEBUG] [Thread-30508] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:11:45.338 [DEBUG] [Thread-30508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:11:45.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:11:45.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')
2026-04-16T03:11:45.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
2026-04-16T03:11:45.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:11:45.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:11:45.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:11:45.372 [DEBUG] [Thread-30508] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:11:59.630 [DEBUG] [Thread-30511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:12:00.142 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:12:00.143 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:12:11.358 [DEBUG] [Thread-30512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:12:14.659 [DEBUG] [Thread-30513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:12:15.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:12:15.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:12:15.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
2026-04-16T03:12:16.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 11, 44), 1.18273, 92.2089, 0.0, 16.303, 8.33154, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:12:16.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:11:44
2026-04-16T03:12:17.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:12:17.508 [DEBUG] [Thread-30514] [transport.py] [_log()] starting thread (client mode): 0xee907010
2026-04-16T03:12:17.509 [DEBUG] [Thread-30514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:12:17.529 [DEBUG] [Thread-30514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:12:17.529 [INFO] [Thread-30514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:12:17.532 [DEBUG] [Thread-30514] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:12:17.532 [DEBUG] [Thread-30514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:12:17.533 [DEBUG] [Thread-30514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:12:17.533 [DEBUG] [Thread-30514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:12:17.533 [DEBUG] [Thread-30514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:12:17.533 [DEBUG] [Thread-30514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:12:17.533 [DEBUG] [Thread-30514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:12:17.533 [DEBUG] [Thread-30514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:12:17.533 [DEBUG] [Thread-30514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:12:17.533 [DEBUG] [Thread-30514] [transport.py] [_log()] client lang: <none>
2026-04-16T03:12:17.533 [DEBUG] [Thread-30514] [transport.py] [_log()] server lang: <none>
2026-04-16T03:12:17.533 [DEBUG] [Thread-30514] [transport.py] [_log()] kex follows: False
2026-04-16T03:12:17.533 [DEBUG] [Thread-30514] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:12:17.533 [DEBUG] [Thread-30514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:12:17.533 [DEBUG] [Thread-30514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:12:17.534 [DEBUG] [Thread-30514] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:12:17.534 [DEBUG] [Thread-30514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:12:17.534 [DEBUG] [Thread-30514] [transport.py] [_log()] Compression: none
2026-04-16T03:12:17.534 [DEBUG] [Thread-30514] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:12:17.543 [DEBUG] [Thread-30514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:12:17.543 [DEBUG] [Thread-30514] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:12:17.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:12:17.544 [DEBUG] [Thread-30514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:12:17.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:12:17.545 [DEBUG] [Thread-30514] [transport.py] [_log()] userauth is OK
2026-04-16T03:12:17.545 [DEBUG] [Thread-30514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:12:17.545 [DEBUG] [Thread-30514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:12:17.545 [DEBUG] [Thread-30514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:12:17.545 [DEBUG] [Thread-30514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:12:17.562 [INFO] [Thread-30514] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:12:17.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:12:18.139 [DEBUG] [Thread-30514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:12:18.139 [DEBUG] [Thread-30514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:12:18.140 [DEBUG] [Thread-30514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:12:18.180 [DEBUG] [Thread-30514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:12:18.180 [DEBUG] [Thread-30514] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:12:18.182 [DEBUG] [Thread-30514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:12:18.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:12:18.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:12:18.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:12:18.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:12:18.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:12:18.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:12:18.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:12:18.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:12:18.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:12:18.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.050129 -999.00   +8.80  13.23     89   +7.10 1 1 1 3 1     0    0 1.83 9.00 .NEsW 13.1 13.2 70.0 15.5 9.1 -25.4 8.9 -24.2 8.7 -22.0 9.0 -24.1
2026-04-16T03:12:18.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:12:18.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:12:18.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.050129
2026-04-16T03:12:18.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:12:18.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:12:18.234 [DEBUG] [Thread-30514] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:12:18.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:12:18.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:12:18.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:12:18.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:11:44', tmtdew=1.18273, humidity=92.2089, cloud=0.0, wind=16.303, temperature=8.33154, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:12:11.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6845, nan, nan, nan, nan, nan, nan, 3.125499999999999, 2.3062499999999986, nan, 2.7017499999999988, 0.1172500000000003, -0.008250000000000313, 0.1269999999999989, 0.2865000000000002, 0.3177500000000002, 0.2814999999999994, 0.2110000000000003, 0.29550000000000143, 0.15300000000000225, 0.004000000000001336, -0.02925000000000111], zp_timestamp='2026-04-16T01:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:12:18.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:12:18.476 [DEBUG] [Thread-30517] [transport.py] [_log()] starting thread (client mode): 0xf1367490
2026-04-16T03:12:18.476 [DEBUG] [Thread-30517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:12:18.490 [DEBUG] [Thread-30517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:12:18.490 [INFO] [Thread-30517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:12:18.498 [DEBUG] [Thread-30517] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:12:18.498 [DEBUG] [Thread-30517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:12:18.498 [DEBUG] [Thread-30517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:12:18.498 [DEBUG] [Thread-30517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:12:18.498 [DEBUG] [Thread-30517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:12:18.498 [DEBUG] [Thread-30517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:12:18.498 [DEBUG] [Thread-30517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:12:18.498 [DEBUG] [Thread-30517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:12:18.498 [DEBUG] [Thread-30517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:12:18.498 [DEBUG] [Thread-30517] [transport.py] [_log()] client lang: <none>
2026-04-16T03:12:18.498 [DEBUG] [Thread-30517] [transport.py] [_log()] server lang: <none>
2026-04-16T03:12:18.498 [DEBUG] [Thread-30517] [transport.py] [_log()] kex follows: False
2026-04-16T03:12:18.498 [DEBUG] [Thread-30517] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:12:18.499 [DEBUG] [Thread-30517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:12:18.499 [DEBUG] [Thread-30517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:12:18.499 [DEBUG] [Thread-30517] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:12:18.499 [DEBUG] [Thread-30517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:12:18.499 [DEBUG] [Thread-30517] [transport.py] [_log()] Compression: none
2026-04-16T03:12:18.499 [DEBUG] [Thread-30517] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:12:18.554 [DEBUG] [Thread-30517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:12:18.554 [DEBUG] [Thread-30517] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:12:18.555 [DEBUG] [Thread-30517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:12:18.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:12:18.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:12:18.611 [DEBUG] [Thread-30517] [transport.py] [_log()] userauth is OK
2026-04-16T03:12:18.611 [DEBUG] [Thread-30517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:12:18.611 [DEBUG] [Thread-30517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:12:18.611 [DEBUG] [Thread-30517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:12:18.611 [DEBUG] [Thread-30517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:12:18.635 [INFO] [Thread-30517] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:12:18.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:12:18.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:12:19.497 [DEBUG] [Thread-30517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:12:19.497 [DEBUG] [Thread-30517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:12:19.545 [DEBUG] [Thread-30517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:12:19.545 [DEBUG] [Thread-30517] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:12:19.554 [DEBUG] [Thread-30517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:12:19.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:12:19.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')
2026-04-16T03:12:19.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
2026-04-16T03:12:19.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:12:19.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:12:19.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:12:19.589 [DEBUG] [Thread-30517] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:12:29.687 [DEBUG] [Thread-30519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:12:44.731 [DEBUG] [Thread-30520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:12:49.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:12:49.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:12:49.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
2026-04-16T03:12:50.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 12, 20), 1.69176, 89.1046, 0.0, 13.3398, 8.71564, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:12:50.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:12:20
2026-04-16T03:12:51.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:12:51.682 [DEBUG] [Thread-30521] [transport.py] [_log()] starting thread (client mode): 0xee905390
2026-04-16T03:12:51.683 [DEBUG] [Thread-30521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:12:51.707 [DEBUG] [Thread-30521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:12:51.707 [INFO] [Thread-30521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:12:51.709 [DEBUG] [Thread-30521] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:12:51.709 [DEBUG] [Thread-30521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:12:51.709 [DEBUG] [Thread-30521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:12:51.709 [DEBUG] [Thread-30521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:12:51.709 [DEBUG] [Thread-30521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:12:51.709 [DEBUG] [Thread-30521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:12:51.709 [DEBUG] [Thread-30521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:12:51.709 [DEBUG] [Thread-30521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:12:51.709 [DEBUG] [Thread-30521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:12:51.709 [DEBUG] [Thread-30521] [transport.py] [_log()] client lang: <none>
2026-04-16T03:12:51.710 [DEBUG] [Thread-30521] [transport.py] [_log()] server lang: <none>
2026-04-16T03:12:51.710 [DEBUG] [Thread-30521] [transport.py] [_log()] kex follows: False
2026-04-16T03:12:51.710 [DEBUG] [Thread-30521] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:12:51.710 [DEBUG] [Thread-30521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:12:51.710 [DEBUG] [Thread-30521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:12:51.710 [DEBUG] [Thread-30521] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:12:51.710 [DEBUG] [Thread-30521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:12:51.710 [DEBUG] [Thread-30521] [transport.py] [_log()] Compression: none
2026-04-16T03:12:51.710 [DEBUG] [Thread-30521] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:12:51.720 [DEBUG] [Thread-30521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:12:51.720 [DEBUG] [Thread-30521] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:12:51.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:12:51.721 [DEBUG] [Thread-30521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:12:51.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:12:51.722 [DEBUG] [Thread-30521] [transport.py] [_log()] userauth is OK
2026-04-16T03:12:51.722 [DEBUG] [Thread-30521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:12:51.722 [DEBUG] [Thread-30521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:12:51.722 [DEBUG] [Thread-30521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:12:51.722 [DEBUG] [Thread-30521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:12:51.742 [INFO] [Thread-30521] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:12:51.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:12:52.327 [DEBUG] [Thread-30521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:12:52.327 [DEBUG] [Thread-30521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:12:52.328 [DEBUG] [Thread-30521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:12:52.368 [DEBUG] [Thread-30521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:12:52.368 [DEBUG] [Thread-30521] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:12:52.370 [DEBUG] [Thread-30521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:12:52.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:12:52.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:12:52.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:12:52.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:12:52.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:12:52.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:12:52.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:12:52.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:12:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:12:52.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.050476 -999.00   +8.80  14.08     89   +7.10 1 1 1 3 1     0    0 1.88 10.94 .NE.w 13.9 14.1 79.4 16.9 9.1 -25.4 8.9 -24.2 8.7 -22.0 9.0 -24.1
2026-04-16T03:12:52.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:12:52.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:12:52.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.050476
2026-04-16T03:12:52.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:12:52.392 [DEBUG] [Thread-30521] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:12:52.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:12:52.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:12:52.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:12:52.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:12:52.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:12:20', tmtdew=1.69176, humidity=89.1046, cloud=0.0, wind=13.3398, temperature=8.71564, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:12:41.126', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6845, nan, nan, nan, nan, nan, nan, 3.125499999999999, 2.3062499999999986, nan, 2.7017499999999988, 0.1172500000000003, -0.008250000000000313, 0.1269999999999989, 0.2865000000000002, 0.3177500000000002, 0.2814999999999994, 0.2110000000000003, 0.29550000000000143, 0.15300000000000225, 0.004000000000001336, -0.02925000000000111], zp_timestamp='2026-04-16T01:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:12:52.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:12:52.640 [DEBUG] [Thread-30524] [transport.py] [_log()] starting thread (client mode): 0xee9c7fd0
2026-04-16T03:12:52.641 [DEBUG] [Thread-30524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:12:52.655 [DEBUG] [Thread-30524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:12:52.655 [INFO] [Thread-30524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:12:52.662 [DEBUG] [Thread-30524] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:12:52.662 [DEBUG] [Thread-30524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:12:52.662 [DEBUG] [Thread-30524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:12:52.662 [DEBUG] [Thread-30524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:12:52.662 [DEBUG] [Thread-30524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:12:52.663 [DEBUG] [Thread-30524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:12:52.663 [DEBUG] [Thread-30524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:12:52.663 [DEBUG] [Thread-30524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:12:52.663 [DEBUG] [Thread-30524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:12:52.663 [DEBUG] [Thread-30524] [transport.py] [_log()] client lang: <none>
2026-04-16T03:12:52.663 [DEBUG] [Thread-30524] [transport.py] [_log()] server lang: <none>
2026-04-16T03:12:52.663 [DEBUG] [Thread-30524] [transport.py] [_log()] kex follows: False
2026-04-16T03:12:52.663 [DEBUG] [Thread-30524] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:12:52.663 [DEBUG] [Thread-30524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:12:52.663 [DEBUG] [Thread-30524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:12:52.663 [DEBUG] [Thread-30524] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:12:52.664 [DEBUG] [Thread-30524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:12:52.664 [DEBUG] [Thread-30524] [transport.py] [_log()] Compression: none
2026-04-16T03:12:52.664 [DEBUG] [Thread-30524] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:12:52.722 [DEBUG] [Thread-30524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:12:52.722 [DEBUG] [Thread-30524] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:12:52.722 [DEBUG] [Thread-30524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:12:52.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:12:52.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:12:52.778 [DEBUG] [Thread-30524] [transport.py] [_log()] userauth is OK
2026-04-16T03:12:52.779 [DEBUG] [Thread-30524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:12:52.779 [DEBUG] [Thread-30524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:12:52.779 [DEBUG] [Thread-30524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:12:52.779 [DEBUG] [Thread-30524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:12:52.801 [INFO] [Thread-30524] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:12:52.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:12:52.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:12:53.631 [DEBUG] [Thread-30524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:12:53.631 [DEBUG] [Thread-30524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:12:53.679 [DEBUG] [Thread-30524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:12:53.679 [DEBUG] [Thread-30524] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:12:53.688 [DEBUG] [Thread-30524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:12:53.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:12:53.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')
2026-04-16T03:12:53.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
2026-04-16T03:12:53.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:12:53.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:12:53.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:12:53.722 [DEBUG] [Thread-30524] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:12:59.762 [DEBUG] [Thread-30526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:13:00.347 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:13:00.348 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:13:11.509 [DEBUG] [Thread-30527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:13:14.807 [DEBUG] [Thread-30528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:13:23.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:13:23.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:13:23.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
2026-04-16T03:13:25.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 12, 55), 1.74411, 89.0881, 0.0, 15.1222, 8.68246, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:13:25.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:12:55
2026-04-16T03:13:25.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:13:25.864 [DEBUG] [Thread-30529] [transport.py] [_log()] starting thread (client mode): 0xf13341f0
2026-04-16T03:13:25.864 [DEBUG] [Thread-30529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:13:25.884 [DEBUG] [Thread-30529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:13:25.884 [INFO] [Thread-30529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:13:25.887 [DEBUG] [Thread-30529] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:13:25.887 [DEBUG] [Thread-30529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:13:25.887 [DEBUG] [Thread-30529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:13:25.888 [DEBUG] [Thread-30529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:13:25.888 [DEBUG] [Thread-30529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:13:25.888 [DEBUG] [Thread-30529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:13:25.888 [DEBUG] [Thread-30529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:13:25.888 [DEBUG] [Thread-30529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:13:25.888 [DEBUG] [Thread-30529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:13:25.888 [DEBUG] [Thread-30529] [transport.py] [_log()] client lang: <none>
2026-04-16T03:13:25.888 [DEBUG] [Thread-30529] [transport.py] [_log()] server lang: <none>
2026-04-16T03:13:25.888 [DEBUG] [Thread-30529] [transport.py] [_log()] kex follows: False
2026-04-16T03:13:25.888 [DEBUG] [Thread-30529] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:13:25.888 [DEBUG] [Thread-30529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:13:25.888 [DEBUG] [Thread-30529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:13:25.889 [DEBUG] [Thread-30529] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:13:25.889 [DEBUG] [Thread-30529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:13:25.889 [DEBUG] [Thread-30529] [transport.py] [_log()] Compression: none
2026-04-16T03:13:25.889 [DEBUG] [Thread-30529] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:13:25.905 [DEBUG] [Thread-30529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:13:25.905 [DEBUG] [Thread-30529] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:13:25.906 [DEBUG] [Thread-30529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:13:25.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:13:25.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:13:25.907 [DEBUG] [Thread-30529] [transport.py] [_log()] userauth is OK
2026-04-16T03:13:25.907 [DEBUG] [Thread-30529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:13:25.907 [DEBUG] [Thread-30529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:13:25.907 [DEBUG] [Thread-30529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:13:25.907 [DEBUG] [Thread-30529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:13:25.932 [INFO] [Thread-30529] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:13:25.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:13:26.504 [DEBUG] [Thread-30529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:13:26.504 [DEBUG] [Thread-30529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:13:26.504 [DEBUG] [Thread-30529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:13:26.545 [DEBUG] [Thread-30529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:13:26.545 [DEBUG] [Thread-30529] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:13:26.547 [DEBUG] [Thread-30529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:13:26.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:13:26.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:13:26.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:13:26.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:13:26.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:13:26.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:13:26.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:13:26.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:13:26.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:13:26.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.050823 -999.00   +8.80   9.62     89   +7.10 1 1 1 3 1     0    0 1.93 12.56 .NE.w 13.8 9.6 82.7 15.4 9.1 -25.4 8.9 -24.3 8.7 -22.0 9.0 -24.0
2026-04-16T03:13:26.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:13:26.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:13:26.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.050823
2026-04-16T03:13:26.571 [DEBUG] [Thread-30529] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:13:26.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:13:26.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:13:26.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:13:26.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:13:26.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:13:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:12:55', tmtdew=1.74411, humidity=89.0881, cloud=0.0, wind=15.1222, temperature=8.68246, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:13:11.107', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6845, nan, nan, nan, nan, nan, nan, 3.125499999999999, 2.3062499999999986, nan, 2.7017499999999988, 0.1172500000000003, -0.008250000000000313, 0.1269999999999989, 0.2865000000000002, 0.3177500000000002, 0.2814999999999994, 0.2110000000000003, 0.29550000000000143, 0.15300000000000225, 0.004000000000001336, -0.02925000000000111], zp_timestamp='2026-04-16T01:09:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:13:26.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:13:26.826 [DEBUG] [Thread-30532] [transport.py] [_log()] starting thread (client mode): 0xee9c3970
2026-04-16T03:13:26.826 [DEBUG] [Thread-30532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:13:26.840 [DEBUG] [Thread-30532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:13:26.840 [INFO] [Thread-30532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:13:26.848 [DEBUG] [Thread-30532] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:13:26.848 [DEBUG] [Thread-30532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:13:26.848 [DEBUG] [Thread-30532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:13:26.848 [DEBUG] [Thread-30532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:13:26.848 [DEBUG] [Thread-30532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:13:26.848 [DEBUG] [Thread-30532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:13:26.848 [DEBUG] [Thread-30532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:13:26.848 [DEBUG] [Thread-30532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:13:26.848 [DEBUG] [Thread-30532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:13:26.848 [DEBUG] [Thread-30532] [transport.py] [_log()] client lang: <none>
2026-04-16T03:13:26.849 [DEBUG] [Thread-30532] [transport.py] [_log()] server lang: <none>
2026-04-16T03:13:26.849 [DEBUG] [Thread-30532] [transport.py] [_log()] kex follows: False
2026-04-16T03:13:26.849 [DEBUG] [Thread-30532] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:13:26.849 [DEBUG] [Thread-30532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:13:26.849 [DEBUG] [Thread-30532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:13:26.849 [DEBUG] [Thread-30532] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:13:26.849 [DEBUG] [Thread-30532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:13:26.849 [DEBUG] [Thread-30532] [transport.py] [_log()] Compression: none
2026-04-16T03:13:26.849 [DEBUG] [Thread-30532] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:13:26.905 [DEBUG] [Thread-30532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:13:26.906 [DEBUG] [Thread-30532] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:13:26.906 [DEBUG] [Thread-30532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:13:26.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:13:26.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:13:26.962 [DEBUG] [Thread-30532] [transport.py] [_log()] userauth is OK
2026-04-16T03:13:26.962 [DEBUG] [Thread-30532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:13:26.962 [DEBUG] [Thread-30532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:13:26.963 [DEBUG] [Thread-30532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:13:26.963 [DEBUG] [Thread-30532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:13:26.988 [INFO] [Thread-30532] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:13:26.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:13:26.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:13:27.821 [DEBUG] [Thread-30532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:13:27.821 [DEBUG] [Thread-30532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:13:27.869 [DEBUG] [Thread-30532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:13:27.869 [DEBUG] [Thread-30532] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:13:27.878 [DEBUG] [Thread-30532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:13:27.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:13:27.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')
2026-04-16T03:13:27.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
2026-04-16T03:13:27.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:13:27.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:13:27.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:13:27.913 [DEBUG] [Thread-30532] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:13:29.839 [DEBUG] [Thread-30534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:13:44.881 [DEBUG] [Thread-30535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:13:57.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:13:57.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:13:57.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
2026-04-16T03:13:59.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 13, 30), 1.7492, 89.055, 0.0, 15.1574, 8.66596, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:13:59.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:13:30
2026-04-16T03:13:59.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:13:59.909 [DEBUG] [Thread-30536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:14:00.028 [DEBUG] [Thread-30537] [transport.py] [_log()] starting thread (client mode): 0xf13caef0
2026-04-16T03:14:00.028 [DEBUG] [Thread-30537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:14:00.047 [DEBUG] [Thread-30537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:14:00.047 [INFO] [Thread-30537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:14:00.051 [DEBUG] [Thread-30537] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:14:00.051 [DEBUG] [Thread-30537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:14:00.051 [DEBUG] [Thread-30537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:14:00.051 [DEBUG] [Thread-30537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:14:00.051 [DEBUG] [Thread-30537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:14:00.051 [DEBUG] [Thread-30537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:14:00.051 [DEBUG] [Thread-30537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:14:00.051 [DEBUG] [Thread-30537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:14:00.051 [DEBUG] [Thread-30537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:14:00.052 [DEBUG] [Thread-30537] [transport.py] [_log()] client lang: <none>
2026-04-16T03:14:00.052 [DEBUG] [Thread-30537] [transport.py] [_log()] server lang: <none>
2026-04-16T03:14:00.052 [DEBUG] [Thread-30537] [transport.py] [_log()] kex follows: False
2026-04-16T03:14:00.052 [DEBUG] [Thread-30537] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:14:00.052 [DEBUG] [Thread-30537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:14:00.052 [DEBUG] [Thread-30537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:14:00.052 [DEBUG] [Thread-30537] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:14:00.052 [DEBUG] [Thread-30537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:14:00.052 [DEBUG] [Thread-30537] [transport.py] [_log()] Compression: none
2026-04-16T03:14:00.052 [DEBUG] [Thread-30537] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:14:00.069 [DEBUG] [Thread-30537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:14:00.070 [DEBUG] [Thread-30537] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:14:00.070 [DEBUG] [Thread-30537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:14:00.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:14:00.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:14:00.071 [DEBUG] [Thread-30537] [transport.py] [_log()] userauth is OK
2026-04-16T03:14:00.072 [DEBUG] [Thread-30537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:14:00.072 [DEBUG] [Thread-30537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:14:00.072 [DEBUG] [Thread-30537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:14:00.072 [DEBUG] [Thread-30537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:14:00.095 [INFO] [Thread-30537] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:14:00.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:14:00.553 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:14:00.555 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:14:00.873 [DEBUG] [Thread-30537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:14:00.874 [DEBUG] [Thread-30537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:14:00.874 [DEBUG] [Thread-30537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:14:00.915 [DEBUG] [Thread-30537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:14:00.915 [DEBUG] [Thread-30537] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:14:00.918 [DEBUG] [Thread-30537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:14:00.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:14:00.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:14:00.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:14:00.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:14:00.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:14:00.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:14:00.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:14:00.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:14:00.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:14:00.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.050823 -999.00   +8.80   9.62     89   +7.10 1 1 1 3 1     0    0 1.93 12.56 .NE.w 13.8 9.6 82.7 15.4 9.1 -25.4 8.9 -24.3 8.7 -22.0 9.0 -24.0
2026-04-16T03:14:00.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:14:00.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:14:00.938 [DEBUG] [Thread-30537] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:14:00.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.050823
2026-04-16T03:14:00.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:14:00.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:14:00.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:14:00.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:14:00.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:14:00.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:13:30', tmtdew=1.7492, humidity=89.055, cloud=0.0, wind=15.1574, temperature=8.66596, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:13:11.107', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6845, nan, nan, nan, nan, nan, nan, 3.125499999999999, 2.3062499999999986, nan, 2.7017499999999988, 0.1172500000000003, -0.008250000000000313, 0.1269999999999989, 0.2865000000000002, 0.3177500000000002, 0.2814999999999994, 0.2110000000000003, 0.29550000000000143, 0.15300000000000225, 0.004000000000001336, -0.02925000000000111], zp_timestamp='2026-04-16T01:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:14:01.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:14:01.222 [DEBUG] [Thread-30540] [transport.py] [_log()] starting thread (client mode): 0xee957160
2026-04-16T03:14:01.223 [DEBUG] [Thread-30540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:14:01.238 [DEBUG] [Thread-30540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:14:01.238 [INFO] [Thread-30540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:14:01.245 [DEBUG] [Thread-30540] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:14:01.245 [DEBUG] [Thread-30540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:14:01.245 [DEBUG] [Thread-30540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:14:01.245 [DEBUG] [Thread-30540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:14:01.245 [DEBUG] [Thread-30540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:14:01.246 [DEBUG] [Thread-30540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:14:01.246 [DEBUG] [Thread-30540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:14:01.246 [DEBUG] [Thread-30540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:14:01.246 [DEBUG] [Thread-30540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:14:01.246 [DEBUG] [Thread-30540] [transport.py] [_log()] client lang: <none>
2026-04-16T03:14:01.246 [DEBUG] [Thread-30540] [transport.py] [_log()] server lang: <none>
2026-04-16T03:14:01.246 [DEBUG] [Thread-30540] [transport.py] [_log()] kex follows: False
2026-04-16T03:14:01.246 [DEBUG] [Thread-30540] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:14:01.246 [DEBUG] [Thread-30540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:14:01.246 [DEBUG] [Thread-30540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:14:01.246 [DEBUG] [Thread-30540] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:14:01.246 [DEBUG] [Thread-30540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:14:01.247 [DEBUG] [Thread-30540] [transport.py] [_log()] Compression: none
2026-04-16T03:14:01.247 [DEBUG] [Thread-30540] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:14:01.301 [DEBUG] [Thread-30540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:14:01.302 [DEBUG] [Thread-30540] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:14:01.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:14:01.302 [DEBUG] [Thread-30540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:14:01.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:14:01.358 [DEBUG] [Thread-30540] [transport.py] [_log()] userauth is OK
2026-04-16T03:14:01.358 [DEBUG] [Thread-30540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:14:01.358 [DEBUG] [Thread-30540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:14:01.359 [DEBUG] [Thread-30540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:14:01.359 [DEBUG] [Thread-30540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:14:01.384 [INFO] [Thread-30540] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:14:01.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:14:01.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:14:02.229 [DEBUG] [Thread-30540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:14:02.229 [DEBUG] [Thread-30540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:14:02.277 [DEBUG] [Thread-30540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:14:02.277 [DEBUG] [Thread-30540] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:14:02.286 [DEBUG] [Thread-30540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:14:02.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:14:02.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')
2026-04-16T03:14:02.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') -> 00000000
2026-04-16T03:14:02.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:14:02.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:14:02.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:14:02.320 [DEBUG] [Thread-30540] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:14:11.659 [DEBUG] [Thread-30542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:14:14.937 [DEBUG] [Thread-30543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:14:29.980 [DEBUG] [Thread-30544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:14:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:14:32.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:14:32.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T03:14:33.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 14, 6), 1.74934, 89.055, 0.0, 15.0516, 8.68255, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:14:33.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:14:06
2026-04-16T03:14:33.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:14:34.450 [DEBUG] [Thread-30545] [transport.py] [_log()] starting thread (client mode): 0xf1366380
2026-04-16T03:14:34.450 [DEBUG] [Thread-30545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:14:34.470 [DEBUG] [Thread-30545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:14:34.470 [INFO] [Thread-30545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:14:34.473 [DEBUG] [Thread-30545] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:14:34.473 [DEBUG] [Thread-30545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:14:34.473 [DEBUG] [Thread-30545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:14:34.474 [DEBUG] [Thread-30545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:14:34.474 [DEBUG] [Thread-30545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:14:34.474 [DEBUG] [Thread-30545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:14:34.474 [DEBUG] [Thread-30545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:14:34.474 [DEBUG] [Thread-30545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:14:34.474 [DEBUG] [Thread-30545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:14:34.474 [DEBUG] [Thread-30545] [transport.py] [_log()] client lang: <none>
2026-04-16T03:14:34.474 [DEBUG] [Thread-30545] [transport.py] [_log()] server lang: <none>
2026-04-16T03:14:34.474 [DEBUG] [Thread-30545] [transport.py] [_log()] kex follows: False
2026-04-16T03:14:34.474 [DEBUG] [Thread-30545] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:14:34.474 [DEBUG] [Thread-30545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:14:34.474 [DEBUG] [Thread-30545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:14:34.475 [DEBUG] [Thread-30545] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:14:34.475 [DEBUG] [Thread-30545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:14:34.475 [DEBUG] [Thread-30545] [transport.py] [_log()] Compression: none
2026-04-16T03:14:34.475 [DEBUG] [Thread-30545] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:14:34.490 [DEBUG] [Thread-30545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:14:34.490 [DEBUG] [Thread-30545] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:14:34.491 [DEBUG] [Thread-30545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:14:34.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:14:34.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:14:34.492 [DEBUG] [Thread-30545] [transport.py] [_log()] userauth is OK
2026-04-16T03:14:34.492 [DEBUG] [Thread-30545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:14:34.492 [DEBUG] [Thread-30545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:14:34.492 [DEBUG] [Thread-30545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:14:34.493 [DEBUG] [Thread-30545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:14:34.517 [INFO] [Thread-30545] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:14:34.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:14:35.309 [DEBUG] [Thread-30545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:14:35.309 [DEBUG] [Thread-30545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:14:35.309 [DEBUG] [Thread-30545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:14:35.350 [DEBUG] [Thread-30545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:14:35.350 [DEBUG] [Thread-30545] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:14:35.353 [DEBUG] [Thread-30545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:14:35.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:14:35.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:14:35.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:14:35.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:14:35.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:14:35.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:14:35.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:14:35.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:14:35.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:14:35.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.051170 -999.00   +8.80  14.03     89   +7.20 1 1 1 3 1     0    0 1.97 13.36 .NE.w 12.0 14.0 70.6 16.2 9.1 -25.5 8.9 -24.2 8.7 -22.1 8.9 -23.9
2026-04-16T03:14:35.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:14:35.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:14:35.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.051170
2026-04-16T03:14:35.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:14:35.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:14:35.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:14:35.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:14:35.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:14:35.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:14:06', tmtdew=1.74934, humidity=89.055, cloud=0.0, wind=15.0516, temperature=8.68255, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:13:41.088', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6845, nan, nan, nan, nan, nan, nan, 3.125499999999999, 2.3062499999999986, nan, 2.7017499999999988, 0.1172500000000003, -0.008250000000000313, 0.1269999999999989, 0.2865000000000002, 0.3177500000000002, 0.2814999999999994, 0.2110000000000003, 0.29550000000000143, 0.15300000000000225, 0.004000000000001336, -0.02925000000000111], zp_timestamp='2026-04-16T01:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:14:35.374 [DEBUG] [Thread-30545] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:14:35.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:14:35.595 [DEBUG] [Thread-30548] [transport.py] [_log()] starting thread (client mode): 0xee9569b0
2026-04-16T03:14:35.595 [DEBUG] [Thread-30548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:14:35.610 [DEBUG] [Thread-30548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:14:35.610 [INFO] [Thread-30548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:14:35.617 [DEBUG] [Thread-30548] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:14:35.617 [DEBUG] [Thread-30548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:14:35.617 [DEBUG] [Thread-30548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:14:35.617 [DEBUG] [Thread-30548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:14:35.617 [DEBUG] [Thread-30548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:14:35.618 [DEBUG] [Thread-30548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:14:35.618 [DEBUG] [Thread-30548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:14:35.618 [DEBUG] [Thread-30548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:14:35.618 [DEBUG] [Thread-30548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:14:35.618 [DEBUG] [Thread-30548] [transport.py] [_log()] client lang: <none>
2026-04-16T03:14:35.618 [DEBUG] [Thread-30548] [transport.py] [_log()] server lang: <none>
2026-04-16T03:14:35.618 [DEBUG] [Thread-30548] [transport.py] [_log()] kex follows: False
2026-04-16T03:14:35.618 [DEBUG] [Thread-30548] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:14:35.618 [DEBUG] [Thread-30548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:14:35.619 [DEBUG] [Thread-30548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:14:35.619 [DEBUG] [Thread-30548] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:14:35.619 [DEBUG] [Thread-30548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:14:35.619 [DEBUG] [Thread-30548] [transport.py] [_log()] Compression: none
2026-04-16T03:14:35.619 [DEBUG] [Thread-30548] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:14:35.678 [DEBUG] [Thread-30548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:14:35.678 [DEBUG] [Thread-30548] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:14:35.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:14:35.679 [DEBUG] [Thread-30548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:14:35.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:14:35.734 [DEBUG] [Thread-30548] [transport.py] [_log()] userauth is OK
2026-04-16T03:14:35.734 [DEBUG] [Thread-30548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:14:35.734 [DEBUG] [Thread-30548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:14:35.734 [DEBUG] [Thread-30548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:14:35.735 [DEBUG] [Thread-30548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:14:35.760 [INFO] [Thread-30548] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:14:35.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:14:35.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:14:36.581 [DEBUG] [Thread-30548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:14:36.581 [DEBUG] [Thread-30548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:14:36.631 [DEBUG] [Thread-30548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:14:36.632 [DEBUG] [Thread-30548] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:14:36.641 [DEBUG] [Thread-30548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:14:36.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:14:36.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')
2026-04-16T03:14:36.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
2026-04-16T03:14:36.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:14:36.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:14:36.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:14:36.685 [DEBUG] [Thread-30548] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:14:45.011 [DEBUG] [Thread-30550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:15:00.057 [DEBUG] [Thread-30551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:15:00.770 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:15:00.771 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:15:06.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:15:06.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:15:06.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
2026-04-16T03:15:07.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 14, 42), 1.21387, 92.0107, 0.0, 15.8796, 8.29889, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:15:07.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:14:42
2026-04-16T03:15:08.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:15:08.813 [DEBUG] [Thread-30552] [transport.py] [_log()] starting thread (client mode): 0xee933910
2026-04-16T03:15:08.814 [DEBUG] [Thread-30552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:15:08.834 [DEBUG] [Thread-30552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:15:08.834 [INFO] [Thread-30552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:15:08.836 [DEBUG] [Thread-30552] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:15:08.836 [DEBUG] [Thread-30552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:15:08.836 [DEBUG] [Thread-30552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:15:08.836 [DEBUG] [Thread-30552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:15:08.837 [DEBUG] [Thread-30552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:15:08.837 [DEBUG] [Thread-30552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:15:08.837 [DEBUG] [Thread-30552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:15:08.837 [DEBUG] [Thread-30552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:15:08.837 [DEBUG] [Thread-30552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:15:08.837 [DEBUG] [Thread-30552] [transport.py] [_log()] client lang: <none>
2026-04-16T03:15:08.837 [DEBUG] [Thread-30552] [transport.py] [_log()] server lang: <none>
2026-04-16T03:15:08.837 [DEBUG] [Thread-30552] [transport.py] [_log()] kex follows: False
2026-04-16T03:15:08.837 [DEBUG] [Thread-30552] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:15:08.837 [DEBUG] [Thread-30552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:15:08.837 [DEBUG] [Thread-30552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:15:08.837 [DEBUG] [Thread-30552] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:15:08.837 [DEBUG] [Thread-30552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:15:08.837 [DEBUG] [Thread-30552] [transport.py] [_log()] Compression: none
2026-04-16T03:15:08.837 [DEBUG] [Thread-30552] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:15:08.849 [DEBUG] [Thread-30552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:15:08.849 [DEBUG] [Thread-30552] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:15:08.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:15:08.849 [DEBUG] [Thread-30552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:15:08.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:15:08.851 [DEBUG] [Thread-30552] [transport.py] [_log()] userauth is OK
2026-04-16T03:15:08.851 [DEBUG] [Thread-30552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:15:08.851 [DEBUG] [Thread-30552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:15:08.851 [DEBUG] [Thread-30552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:15:08.851 [DEBUG] [Thread-30552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:15:08.866 [INFO] [Thread-30552] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:15:08.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:15:11.827 [DEBUG] [Thread-30554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:15:15.086 [DEBUG] [Thread-30555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:15:17.223 [DEBUG] [Thread-30552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:15:17.223 [DEBUG] [Thread-30552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:15:17.224 [DEBUG] [Thread-30552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:15:17.264 [DEBUG] [Thread-30552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:15:17.264 [DEBUG] [Thread-30552] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:15:17.266 [DEBUG] [Thread-30552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:15:17.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:15:17.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:15:17.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:15:17.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:15:17.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:15:17.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:15:17.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:15:17.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:15:17.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:15:17.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.051518 -999.00   +8.80  13.80     89   +7.20 1 1 1 3 1     0    0 1.91 12.89 .NESW 11.4 13.8 72.6 14.7 9.1 -25.5 9.0 -24.3 8.6 -22.1 9.0 -24.4
2026-04-16T03:15:17.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:15:17.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:15:17.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.051518
2026-04-16T03:15:17.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:15:17.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:15:17.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:15:17.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:15:17.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:15:17.335 [DEBUG] [Thread-30552] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:15:17.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:14:42', tmtdew=1.21387, humidity=92.0107, cloud=0.0, wind=15.8796, temperature=8.29889, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:14:11.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6845, nan, nan, nan, nan, nan, nan, 3.125499999999999, 2.3062499999999986, nan, 2.7017499999999988, 0.1172500000000003, -0.008250000000000313, 0.1269999999999989, 0.2865000000000002, 0.3177500000000002, 0.2814999999999994, 0.2110000000000003, 0.29550000000000143, 0.15300000000000225, 0.004000000000001336, -0.02925000000000111], zp_timestamp='2026-04-16T01:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:15:17.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:15:17.571 [DEBUG] [Thread-30557] [transport.py] [_log()] starting thread (client mode): 0xee9054b0
2026-04-16T03:15:17.571 [DEBUG] [Thread-30557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:15:17.585 [DEBUG] [Thread-30557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:15:17.585 [INFO] [Thread-30557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:15:17.592 [DEBUG] [Thread-30557] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:15:17.593 [DEBUG] [Thread-30557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:15:17.593 [DEBUG] [Thread-30557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:15:17.593 [DEBUG] [Thread-30557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:15:17.593 [DEBUG] [Thread-30557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:15:17.593 [DEBUG] [Thread-30557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:15:17.593 [DEBUG] [Thread-30557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:15:17.593 [DEBUG] [Thread-30557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:15:17.593 [DEBUG] [Thread-30557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:15:17.593 [DEBUG] [Thread-30557] [transport.py] [_log()] client lang: <none>
2026-04-16T03:15:17.593 [DEBUG] [Thread-30557] [transport.py] [_log()] server lang: <none>
2026-04-16T03:15:17.594 [DEBUG] [Thread-30557] [transport.py] [_log()] kex follows: False
2026-04-16T03:15:17.594 [DEBUG] [Thread-30557] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:15:17.594 [DEBUG] [Thread-30557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:15:17.594 [DEBUG] [Thread-30557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:15:17.594 [DEBUG] [Thread-30557] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:15:17.594 [DEBUG] [Thread-30557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:15:17.594 [DEBUG] [Thread-30557] [transport.py] [_log()] Compression: none
2026-04-16T03:15:17.594 [DEBUG] [Thread-30557] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:15:17.648 [DEBUG] [Thread-30557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:15:17.648 [DEBUG] [Thread-30557] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:15:17.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:15:17.649 [DEBUG] [Thread-30557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:15:17.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:15:17.709 [DEBUG] [Thread-30557] [transport.py] [_log()] userauth is OK
2026-04-16T03:15:17.710 [DEBUG] [Thread-30557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:15:17.710 [DEBUG] [Thread-30557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:15:17.710 [DEBUG] [Thread-30557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:15:17.710 [DEBUG] [Thread-30557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:15:17.734 [INFO] [Thread-30557] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:15:17.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:15:17.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:15:18.547 [DEBUG] [Thread-30557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:15:18.547 [DEBUG] [Thread-30557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:15:18.595 [DEBUG] [Thread-30557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:15:18.595 [DEBUG] [Thread-30557] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:15:18.604 [DEBUG] [Thread-30557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:15:18.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:15:18.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')
2026-04-16T03:15:18.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
2026-04-16T03:15:18.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:15:18.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:15:18.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:15:18.638 [DEBUG] [Thread-30557] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:15:30.114 [DEBUG] [Thread-30559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:15:45.161 [DEBUG] [Thread-30560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:15:48.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:15:48.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:15:48.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
2026-04-16T03:15:49.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 15, 17), 1.70196, 89.0385, 0.0, 15.3338, 8.68262, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:15:49.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:15:17
2026-04-16T03:15:50.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:15:50.813 [DEBUG] [Thread-30561] [transport.py] [_log()] starting thread (client mode): 0xee954130
2026-04-16T03:15:50.813 [DEBUG] [Thread-30561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:15:50.833 [DEBUG] [Thread-30561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:15:50.833 [INFO] [Thread-30561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:15:50.836 [DEBUG] [Thread-30561] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:15:50.836 [DEBUG] [Thread-30561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:15:50.836 [DEBUG] [Thread-30561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:15:50.836 [DEBUG] [Thread-30561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:15:50.837 [DEBUG] [Thread-30561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:15:50.837 [DEBUG] [Thread-30561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:15:50.837 [DEBUG] [Thread-30561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:15:50.837 [DEBUG] [Thread-30561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:15:50.837 [DEBUG] [Thread-30561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:15:50.837 [DEBUG] [Thread-30561] [transport.py] [_log()] client lang: <none>
2026-04-16T03:15:50.837 [DEBUG] [Thread-30561] [transport.py] [_log()] server lang: <none>
2026-04-16T03:15:50.837 [DEBUG] [Thread-30561] [transport.py] [_log()] kex follows: False
2026-04-16T03:15:50.837 [DEBUG] [Thread-30561] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:15:50.837 [DEBUG] [Thread-30561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:15:50.838 [DEBUG] [Thread-30561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:15:50.838 [DEBUG] [Thread-30561] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:15:50.838 [DEBUG] [Thread-30561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:15:50.838 [DEBUG] [Thread-30561] [transport.py] [_log()] Compression: none
2026-04-16T03:15:50.838 [DEBUG] [Thread-30561] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:15:50.853 [DEBUG] [Thread-30561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:15:50.854 [DEBUG] [Thread-30561] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:15:50.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:15:50.854 [DEBUG] [Thread-30561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:15:50.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:15:50.855 [DEBUG] [Thread-30561] [transport.py] [_log()] userauth is OK
2026-04-16T03:15:50.855 [DEBUG] [Thread-30561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:15:50.856 [DEBUG] [Thread-30561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:15:50.856 [DEBUG] [Thread-30561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:15:50.856 [DEBUG] [Thread-30561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:15:50.881 [INFO] [Thread-30561] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:15:50.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:15:51.648 [DEBUG] [Thread-30561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:15:51.648 [DEBUG] [Thread-30561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:15:51.649 [DEBUG] [Thread-30561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:15:51.690 [DEBUG] [Thread-30561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:15:51.690 [DEBUG] [Thread-30561] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:15:51.693 [DEBUG] [Thread-30561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:15:51.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:15:51.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:15:51.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:15:51.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:15:51.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:15:51.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:15:51.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:15:51.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:15:51.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:15:51.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.051865 -999.00   +8.80  12.69     89   +7.20 1 1 1 3 1     0    0 1.92 12.64 .NESW 12.4 12.7 65.0 14.2 9.1 -25.7 8.9 -24.3 8.7 -22.0 9.0 -24.4
2026-04-16T03:15:51.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:15:51.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:15:51.710 [DEBUG] [Thread-30561] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:15:51.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.051865
2026-04-16T03:15:51.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:15:51.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:15:51.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:15:51.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:15:51.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:15:51.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:15:17', tmtdew=1.70196, humidity=89.0385, cloud=0.0, wind=15.3338, temperature=8.68262, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:14:41.136', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6845, nan, nan, nan, nan, nan, nan, 3.125499999999999, 2.3062499999999986, nan, 2.7017499999999988, 0.1172500000000003, -0.008250000000000313, 0.1269999999999989, 0.2865000000000002, 0.3177500000000002, 0.2814999999999994, 0.2110000000000003, 0.29550000000000143, 0.15300000000000225, 0.004000000000001336, -0.02925000000000111], zp_timestamp='2026-04-16T01:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:15:51.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:15:51.965 [DEBUG] [Thread-30564] [transport.py] [_log()] starting thread (client mode): 0xee954490
2026-04-16T03:15:51.966 [DEBUG] [Thread-30564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:15:51.979 [DEBUG] [Thread-30564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:15:51.980 [INFO] [Thread-30564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:15:51.987 [DEBUG] [Thread-30564] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:15:51.987 [DEBUG] [Thread-30564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:15:51.987 [DEBUG] [Thread-30564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:15:51.987 [DEBUG] [Thread-30564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:15:51.987 [DEBUG] [Thread-30564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:15:51.987 [DEBUG] [Thread-30564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:15:51.987 [DEBUG] [Thread-30564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:15:51.987 [DEBUG] [Thread-30564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:15:51.987 [DEBUG] [Thread-30564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:15:51.988 [DEBUG] [Thread-30564] [transport.py] [_log()] client lang: <none>
2026-04-16T03:15:51.988 [DEBUG] [Thread-30564] [transport.py] [_log()] server lang: <none>
2026-04-16T03:15:51.988 [DEBUG] [Thread-30564] [transport.py] [_log()] kex follows: False
2026-04-16T03:15:51.988 [DEBUG] [Thread-30564] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:15:51.988 [DEBUG] [Thread-30564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:15:51.988 [DEBUG] [Thread-30564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:15:51.988 [DEBUG] [Thread-30564] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:15:51.988 [DEBUG] [Thread-30564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:15:51.988 [DEBUG] [Thread-30564] [transport.py] [_log()] Compression: none
2026-04-16T03:15:51.988 [DEBUG] [Thread-30564] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:15:52.044 [DEBUG] [Thread-30564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:15:52.045 [DEBUG] [Thread-30564] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:15:52.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:15:52.046 [DEBUG] [Thread-30564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:15:52.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:15:52.101 [DEBUG] [Thread-30564] [transport.py] [_log()] userauth is OK
2026-04-16T03:15:52.101 [DEBUG] [Thread-30564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:15:52.102 [DEBUG] [Thread-30564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:15:52.102 [DEBUG] [Thread-30564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:15:52.102 [DEBUG] [Thread-30564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:15:52.126 [INFO] [Thread-30564] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:15:52.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:15:52.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:15:52.941 [DEBUG] [Thread-30564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:15:52.941 [DEBUG] [Thread-30564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:15:52.988 [DEBUG] [Thread-30564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:15:52.988 [DEBUG] [Thread-30564] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:15:52.996 [DEBUG] [Thread-30564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:15:53.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:15:53.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')
2026-04-16T03:15:53.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') -> 00000000
2026-04-16T03:15:53.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:15:53.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:15:53.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:15:53.029 [DEBUG] [Thread-30564] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:16:00.193 [DEBUG] [Thread-30566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:16:00.975 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:16:00.976 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:16:11.989 [DEBUG] [Thread-30567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:16:15.240 [DEBUG] [Thread-30568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:16:23.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:16:23.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:16:23.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
2026-04-16T03:16:24.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 15, 53), 1.21893, 91.9769, 0.0, 15.5974, 8.26533, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:16:24.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:15:53
2026-04-16T03:16:24.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:16:25.140 [DEBUG] [Thread-30569] [transport.py] [_log()] starting thread (client mode): 0xf13c9e40
2026-04-16T03:16:25.140 [DEBUG] [Thread-30569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:16:25.160 [DEBUG] [Thread-30569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:16:25.161 [INFO] [Thread-30569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:16:25.164 [DEBUG] [Thread-30569] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:16:25.164 [DEBUG] [Thread-30569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:16:25.164 [DEBUG] [Thread-30569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:16:25.164 [DEBUG] [Thread-30569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:16:25.164 [DEBUG] [Thread-30569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:16:25.164 [DEBUG] [Thread-30569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:16:25.164 [DEBUG] [Thread-30569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:16:25.165 [DEBUG] [Thread-30569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:16:25.165 [DEBUG] [Thread-30569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:16:25.165 [DEBUG] [Thread-30569] [transport.py] [_log()] client lang: <none>
2026-04-16T03:16:25.165 [DEBUG] [Thread-30569] [transport.py] [_log()] server lang: <none>
2026-04-16T03:16:25.165 [DEBUG] [Thread-30569] [transport.py] [_log()] kex follows: False
2026-04-16T03:16:25.165 [DEBUG] [Thread-30569] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:16:25.165 [DEBUG] [Thread-30569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:16:25.165 [DEBUG] [Thread-30569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:16:25.165 [DEBUG] [Thread-30569] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:16:25.165 [DEBUG] [Thread-30569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:16:25.165 [DEBUG] [Thread-30569] [transport.py] [_log()] Compression: none
2026-04-16T03:16:25.165 [DEBUG] [Thread-30569] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:16:25.183 [DEBUG] [Thread-30569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:16:25.183 [DEBUG] [Thread-30569] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:16:25.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:16:25.184 [DEBUG] [Thread-30569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:16:25.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:16:25.184 [DEBUG] [Thread-30569] [transport.py] [_log()] userauth is OK
2026-04-16T03:16:25.185 [DEBUG] [Thread-30569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:16:25.185 [DEBUG] [Thread-30569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:16:25.185 [DEBUG] [Thread-30569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:16:25.185 [DEBUG] [Thread-30569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:16:25.203 [INFO] [Thread-30569] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:16:25.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:16:25.971 [DEBUG] [Thread-30569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:16:25.971 [DEBUG] [Thread-30569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:16:25.971 [DEBUG] [Thread-30569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:16:26.012 [DEBUG] [Thread-30569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:16:26.012 [DEBUG] [Thread-30569] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:16:26.015 [DEBUG] [Thread-30569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:16:26.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:16:26.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:16:26.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:16:26.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:16:26.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:16:26.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:16:26.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:16:26.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:16:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:16:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.052559 -999.00   +8.70  11.97     89   +7.10 1 1 1 3 1     0    0 1.88 10.52 .NE.w 10.6 12.0 70.2 14.3 9.1 -25.6 8.9 -24.4 8.7 -22.3 9.0 -24.2
2026-04-16T03:16:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:16:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:16:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.052559
2026-04-16T03:16:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:16:26.038 [DEBUG] [Thread-30569] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:16:26.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:16:26.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:16:26.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:16:26.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:16:26.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:15:53', tmtdew=1.21893, humidity=91.9769, cloud=0.0, wind=15.5974, temperature=8.26533, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:15:41.098', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.6845, nan, nan, nan, nan, nan, nan, 3.125499999999999, 2.3062499999999986, nan, 2.7017499999999988, 0.1172500000000003, -0.008250000000000313, 0.1269999999999989, 0.2865000000000002, 0.3177500000000002, 0.2814999999999994, 0.2110000000000003, 0.29550000000000143, 0.15300000000000225, 0.004000000000001336, -0.02925000000000111], zp_timestamp='2026-04-16T01:13:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:16:26.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:16:26.292 [DEBUG] [Thread-30572] [transport.py] [_log()] starting thread (client mode): 0xee954280
2026-04-16T03:16:26.293 [DEBUG] [Thread-30572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:16:26.307 [DEBUG] [Thread-30572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:16:26.307 [INFO] [Thread-30572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:16:26.314 [DEBUG] [Thread-30572] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:16:26.314 [DEBUG] [Thread-30572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:16:26.314 [DEBUG] [Thread-30572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:16:26.314 [DEBUG] [Thread-30572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:16:26.314 [DEBUG] [Thread-30572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:16:26.314 [DEBUG] [Thread-30572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:16:26.314 [DEBUG] [Thread-30572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:16:26.314 [DEBUG] [Thread-30572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:16:26.315 [DEBUG] [Thread-30572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:16:26.315 [DEBUG] [Thread-30572] [transport.py] [_log()] client lang: <none>
2026-04-16T03:16:26.315 [DEBUG] [Thread-30572] [transport.py] [_log()] server lang: <none>
2026-04-16T03:16:26.315 [DEBUG] [Thread-30572] [transport.py] [_log()] kex follows: False
2026-04-16T03:16:26.315 [DEBUG] [Thread-30572] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:16:26.315 [DEBUG] [Thread-30572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:16:26.315 [DEBUG] [Thread-30572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:16:26.315 [DEBUG] [Thread-30572] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:16:26.315 [DEBUG] [Thread-30572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:16:26.315 [DEBUG] [Thread-30572] [transport.py] [_log()] Compression: none
2026-04-16T03:16:26.315 [DEBUG] [Thread-30572] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:16:26.372 [DEBUG] [Thread-30572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:16:26.373 [DEBUG] [Thread-30572] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:16:26.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:16:26.373 [DEBUG] [Thread-30572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:16:26.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:16:26.429 [DEBUG] [Thread-30572] [transport.py] [_log()] userauth is OK
2026-04-16T03:16:26.429 [DEBUG] [Thread-30572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:16:26.429 [DEBUG] [Thread-30572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:16:26.429 [DEBUG] [Thread-30572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:16:26.429 [DEBUG] [Thread-30572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:16:26.450 [INFO] [Thread-30572] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:16:26.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:16:26.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:16:27.298 [DEBUG] [Thread-30572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:16:27.299 [DEBUG] [Thread-30572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:16:27.346 [DEBUG] [Thread-30572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:16:27.346 [DEBUG] [Thread-30572] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:16:27.355 [DEBUG] [Thread-30572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:16:27.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:16:27.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')
2026-04-16T03:16:27.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
2026-04-16T03:16:27.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:16:27.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:16:27.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:16:27.388 [DEBUG] [Thread-30572] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:16:30.272 [DEBUG] [Thread-30574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:16:45.315 [DEBUG] [Thread-30575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:16:57.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:16:57.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:16:57.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
2026-04-16T03:16:58.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 16, 28), 1.70215, 89.0382, 0.0, 13.2692, 8.69903, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:16:58.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:16:28
2026-04-16T03:16:59.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:16:59.498 [DEBUG] [Thread-30576] [transport.py] [_log()] starting thread (client mode): 0xee9c22f0
2026-04-16T03:16:59.499 [DEBUG] [Thread-30576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:16:59.519 [DEBUG] [Thread-30576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:16:59.519 [INFO] [Thread-30576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:16:59.522 [DEBUG] [Thread-30576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:16:59.522 [DEBUG] [Thread-30576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:16:59.523 [DEBUG] [Thread-30576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:16:59.523 [DEBUG] [Thread-30576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:16:59.523 [DEBUG] [Thread-30576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:16:59.523 [DEBUG] [Thread-30576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:16:59.523 [DEBUG] [Thread-30576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:16:59.523 [DEBUG] [Thread-30576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:16:59.523 [DEBUG] [Thread-30576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:16:59.523 [DEBUG] [Thread-30576] [transport.py] [_log()] client lang: <none>
2026-04-16T03:16:59.523 [DEBUG] [Thread-30576] [transport.py] [_log()] server lang: <none>
2026-04-16T03:16:59.523 [DEBUG] [Thread-30576] [transport.py] [_log()] kex follows: False
2026-04-16T03:16:59.523 [DEBUG] [Thread-30576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:16:59.523 [DEBUG] [Thread-30576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:16:59.524 [DEBUG] [Thread-30576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:16:59.524 [DEBUG] [Thread-30576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:16:59.524 [DEBUG] [Thread-30576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:16:59.524 [DEBUG] [Thread-30576] [transport.py] [_log()] Compression: none
2026-04-16T03:16:59.524 [DEBUG] [Thread-30576] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:16:59.541 [DEBUG] [Thread-30576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:16:59.541 [DEBUG] [Thread-30576] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:16:59.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:16:59.542 [DEBUG] [Thread-30576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:16:59.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:16:59.543 [DEBUG] [Thread-30576] [transport.py] [_log()] userauth is OK
2026-04-16T03:16:59.543 [DEBUG] [Thread-30576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:16:59.544 [DEBUG] [Thread-30576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:16:59.544 [DEBUG] [Thread-30576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:16:59.544 [DEBUG] [Thread-30576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:16:59.580 [INFO] [Thread-30576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:16:59.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:17:00.346 [DEBUG] [Thread-30578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:17:00.387 [DEBUG] [Thread-30576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:17:00.388 [DEBUG] [Thread-30576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:17:00.388 [DEBUG] [Thread-30576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:17:00.428 [DEBUG] [Thread-30576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:17:00.428 [DEBUG] [Thread-30576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:17:00.431 [DEBUG] [Thread-30576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:17:00.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:17:00.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:17:00.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:17:00.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:17:00.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:17:00.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:17:00.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:17:00.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:17:00.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:17:00.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.052907 -999.00   +8.70  13.32     89   +7.20 1 1 1 3 1     0    0 1.90 10.27 .NE.w 10.8 13.3 72.8 15.0 9.1 -25.7 8.9 -24.3 8.7 -22.2 8.9 -24.2
2026-04-16T03:17:00.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:17:00.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:17:00.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.052907
2026-04-16T03:17:00.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:17:00.457 [DEBUG] [Thread-30576] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:17:00.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:17:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:17:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:17:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:17:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:16:28', tmtdew=1.70215, humidity=89.0382, cloud=0.0, wind=13.2692, temperature=8.69903, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:16:11.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 4.04225, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.0589999999999993, nan, nan, nan, nan, nan, 2.6205, 2.6689999999999996, 2.4087499999999986, nan, nan, 0.10925000000000118, -0.08024999999999949, 0.046499999999999986, 0.12650000000000006, 0.25675000000000026, 0.19350000000000023, 0.15000000000000036, 0.1410000000000018, 0.05050000000000132, -0.07499999999999929, -0.11175000000000068], zp_timestamp='2026-04-16T01:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:17:00.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:17:00.714 [DEBUG] [Thread-30580] [transport.py] [_log()] starting thread (client mode): 0xee957d90
2026-04-16T03:17:00.714 [DEBUG] [Thread-30580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:17:00.728 [DEBUG] [Thread-30580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:17:00.728 [INFO] [Thread-30580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:17:00.736 [DEBUG] [Thread-30580] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:17:00.736 [DEBUG] [Thread-30580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:17:00.736 [DEBUG] [Thread-30580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:17:00.736 [DEBUG] [Thread-30580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:17:00.736 [DEBUG] [Thread-30580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:17:00.736 [DEBUG] [Thread-30580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:17:00.736 [DEBUG] [Thread-30580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:17:00.736 [DEBUG] [Thread-30580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:17:00.736 [DEBUG] [Thread-30580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:17:00.736 [DEBUG] [Thread-30580] [transport.py] [_log()] client lang: <none>
2026-04-16T03:17:00.736 [DEBUG] [Thread-30580] [transport.py] [_log()] server lang: <none>
2026-04-16T03:17:00.736 [DEBUG] [Thread-30580] [transport.py] [_log()] kex follows: False
2026-04-16T03:17:00.737 [DEBUG] [Thread-30580] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:17:00.737 [DEBUG] [Thread-30580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:17:00.737 [DEBUG] [Thread-30580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:17:00.737 [DEBUG] [Thread-30580] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:17:00.737 [DEBUG] [Thread-30580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:17:00.737 [DEBUG] [Thread-30580] [transport.py] [_log()] Compression: none
2026-04-16T03:17:00.737 [DEBUG] [Thread-30580] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:17:00.793 [DEBUG] [Thread-30580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:17:00.793 [DEBUG] [Thread-30580] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:17:00.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:17:00.794 [DEBUG] [Thread-30580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:17:00.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:17:00.849 [DEBUG] [Thread-30580] [transport.py] [_log()] userauth is OK
2026-04-16T03:17:00.849 [DEBUG] [Thread-30580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:17:00.849 [DEBUG] [Thread-30580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:17:00.850 [DEBUG] [Thread-30580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:17:00.850 [DEBUG] [Thread-30580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:17:00.875 [INFO] [Thread-30580] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:17:00.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:17:00.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:17:01.178 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:17:01.179 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:17:01.701 [DEBUG] [Thread-30580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:17:01.701 [DEBUG] [Thread-30580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:17:01.749 [DEBUG] [Thread-30580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:17:01.749 [DEBUG] [Thread-30580] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:17:01.758 [DEBUG] [Thread-30580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:17:01.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:17: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')
2026-04-16T03:17: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
2026-04-16T03:17:01.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:17:01.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:17:01.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:17:01.793 [DEBUG] [Thread-30580] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:17:12.154 [DEBUG] [Thread-30582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:17:15.378 [DEBUG] [Thread-30583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:17:30.422 [DEBUG] [Thread-30584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:17:31.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:17:31.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:17:31.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T03:17:33.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 17, 4), 1.70453, 89.0214, 0.0, 13.0928, 8.6657, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:17:33.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:17:04
2026-04-16T03:17:33.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:17:33.893 [DEBUG] [Thread-30585] [transport.py] [_log()] starting thread (client mode): 0xee9054b0
2026-04-16T03:17:33.893 [DEBUG] [Thread-30585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:17:33.913 [DEBUG] [Thread-30585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:17:33.913 [INFO] [Thread-30585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:17:33.916 [DEBUG] [Thread-30585] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:17:33.916 [DEBUG] [Thread-30585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:17:33.916 [DEBUG] [Thread-30585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:17:33.916 [DEBUG] [Thread-30585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:17:33.917 [DEBUG] [Thread-30585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:17:33.917 [DEBUG] [Thread-30585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:17:33.917 [DEBUG] [Thread-30585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:17:33.917 [DEBUG] [Thread-30585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:17:33.917 [DEBUG] [Thread-30585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:17:33.917 [DEBUG] [Thread-30585] [transport.py] [_log()] client lang: <none>
2026-04-16T03:17:33.917 [DEBUG] [Thread-30585] [transport.py] [_log()] server lang: <none>
2026-04-16T03:17:33.917 [DEBUG] [Thread-30585] [transport.py] [_log()] kex follows: False
2026-04-16T03:17:33.917 [DEBUG] [Thread-30585] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:17:33.917 [DEBUG] [Thread-30585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:17:33.917 [DEBUG] [Thread-30585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:17:33.918 [DEBUG] [Thread-30585] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:17:33.918 [DEBUG] [Thread-30585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:17:33.918 [DEBUG] [Thread-30585] [transport.py] [_log()] Compression: none
2026-04-16T03:17:33.918 [DEBUG] [Thread-30585] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:17:33.935 [DEBUG] [Thread-30585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:17:33.935 [DEBUG] [Thread-30585] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:17:33.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:17:33.936 [DEBUG] [Thread-30585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:17:33.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:17:33.937 [DEBUG] [Thread-30585] [transport.py] [_log()] userauth is OK
2026-04-16T03:17:33.937 [DEBUG] [Thread-30585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:17:33.937 [DEBUG] [Thread-30585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:17:33.937 [DEBUG] [Thread-30585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:17:33.937 [DEBUG] [Thread-30585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:17:33.972 [INFO] [Thread-30585] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:17:33.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:17:34.775 [DEBUG] [Thread-30585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:17:34.776 [DEBUG] [Thread-30585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:17:34.776 [DEBUG] [Thread-30585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:17:34.816 [DEBUG] [Thread-30585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:17:34.816 [DEBUG] [Thread-30585] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:17:34.819 [DEBUG] [Thread-30585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:17:34.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:17:34.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:17:34.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:17:34.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:17:34.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:17:34.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:17:34.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:17:34.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:17:34.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:17:34.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.053254 -999.00   +8.70  11.65     89   +7.20 1 1 1 3 1     0    0 1.82 8.25 .NE.w 10.8 11.7 88.8 14.5 9.0 -25.5 8.9 -24.3 8.7 -22.2 9.0 -24.2
2026-04-16T03:17:34.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:17:34.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:17:34.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.053254
2026-04-16T03:17:34.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:17:34.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:17:34.841 [DEBUG] [Thread-30585] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:17:34.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:17:34.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:17:34.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:17:34.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:17:04', tmtdew=1.70453, humidity=89.0214, cloud=0.0, wind=13.0928, temperature=8.6657, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:16:41.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 4.04225, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.0589999999999993, nan, nan, nan, nan, nan, 2.6205, 2.6689999999999996, 2.4087499999999986, nan, nan, 0.10925000000000118, -0.08024999999999949, 0.046499999999999986, 0.12650000000000006, 0.25675000000000026, 0.19350000000000023, 0.15000000000000036, 0.1410000000000018, 0.05050000000000132, -0.07499999999999929, -0.11175000000000068], zp_timestamp='2026-04-16T01:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:17:35.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:17:35.061 [DEBUG] [Thread-30588] [transport.py] [_log()] starting thread (client mode): 0xee992770
2026-04-16T03:17:35.061 [DEBUG] [Thread-30588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:17:35.075 [DEBUG] [Thread-30588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:17:35.075 [INFO] [Thread-30588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:17:35.082 [DEBUG] [Thread-30588] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] client lang: <none>
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] server lang: <none>
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] kex follows: False
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:17:35.083 [DEBUG] [Thread-30588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:17:35.084 [DEBUG] [Thread-30588] [transport.py] [_log()] Compression: none
2026-04-16T03:17:35.084 [DEBUG] [Thread-30588] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:17:35.140 [DEBUG] [Thread-30588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:17:35.140 [DEBUG] [Thread-30588] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:17:35.140 [DEBUG] [Thread-30588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:17:35.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:17:35.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:17:35.197 [DEBUG] [Thread-30588] [transport.py] [_log()] userauth is OK
2026-04-16T03:17:35.197 [DEBUG] [Thread-30588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:17:35.197 [DEBUG] [Thread-30588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:17:35.197 [DEBUG] [Thread-30588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:17:35.197 [DEBUG] [Thread-30588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:17:35.214 [INFO] [Thread-30588] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:17:35.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:17:35.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:17:36.024 [DEBUG] [Thread-30588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:17:36.024 [DEBUG] [Thread-30588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:17:36.072 [DEBUG] [Thread-30588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:17:36.072 [DEBUG] [Thread-30588] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:17:36.081 [DEBUG] [Thread-30588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:17:36.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:17:36.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')
2026-04-16T03:17:36.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
2026-04-16T03:17:36.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:17:36.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:17:36.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:17:36.116 [DEBUG] [Thread-30588] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:17:45.454 [DEBUG] [Thread-30590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:18:00.499 [DEBUG] [Thread-30591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:18:01.384 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:18:01.385 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:18:06.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:18:06.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:18:06.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
2026-04-16T03:18:07.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 17, 39), 1.19911, 92.1092, 0.0, 15.8443, 8.39775, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:18:07.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:17:39
2026-04-16T03:18:07.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:18:08.231 [DEBUG] [Thread-30592] [transport.py] [_log()] starting thread (client mode): 0xee9c3130
2026-04-16T03:18:08.231 [DEBUG] [Thread-30592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:18:08.251 [DEBUG] [Thread-30592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:18:08.251 [INFO] [Thread-30592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:18:08.254 [DEBUG] [Thread-30592] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:18:08.254 [DEBUG] [Thread-30592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:18:08.254 [DEBUG] [Thread-30592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:18:08.255 [DEBUG] [Thread-30592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:18:08.255 [DEBUG] [Thread-30592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:18:08.255 [DEBUG] [Thread-30592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:18:08.255 [DEBUG] [Thread-30592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:18:08.255 [DEBUG] [Thread-30592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:18:08.255 [DEBUG] [Thread-30592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:18:08.255 [DEBUG] [Thread-30592] [transport.py] [_log()] client lang: <none>
2026-04-16T03:18:08.255 [DEBUG] [Thread-30592] [transport.py] [_log()] server lang: <none>
2026-04-16T03:18:08.255 [DEBUG] [Thread-30592] [transport.py] [_log()] kex follows: False
2026-04-16T03:18:08.255 [DEBUG] [Thread-30592] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:18:08.255 [DEBUG] [Thread-30592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:18:08.256 [DEBUG] [Thread-30592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:18:08.256 [DEBUG] [Thread-30592] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:18:08.256 [DEBUG] [Thread-30592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:18:08.256 [DEBUG] [Thread-30592] [transport.py] [_log()] Compression: none
2026-04-16T03:18:08.256 [DEBUG] [Thread-30592] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:18:08.275 [DEBUG] [Thread-30592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:18:08.275 [DEBUG] [Thread-30592] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:18:08.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:18:08.276 [DEBUG] [Thread-30592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:18:08.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:18:08.316 [DEBUG] [Thread-30592] [transport.py] [_log()] userauth is OK
2026-04-16T03:18:08.317 [DEBUG] [Thread-30592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:18:08.317 [DEBUG] [Thread-30592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:18:08.317 [DEBUG] [Thread-30592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:18:08.317 [DEBUG] [Thread-30592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:18:08.354 [INFO] [Thread-30592] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:18:08.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:18:09.164 [DEBUG] [Thread-30592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:18:09.165 [DEBUG] [Thread-30592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:18:09.165 [DEBUG] [Thread-30592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:18:09.205 [DEBUG] [Thread-30592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:18:09.205 [DEBUG] [Thread-30592] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:18:09.208 [DEBUG] [Thread-30592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:18:09.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:18:09.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:18:09.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:18:09.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:18:09.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:18:09.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:18:09.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:18:09.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:18:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:18:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.053601 -999.00   +8.70   6.96     89   +7.20 1 1 1 3 1     0    0 1.77 7.93 .NE.w 9.8 7.0 88.5 15.2 9.1 -25.4 8.9 -24.3 8.6 -22.0 9.0 -24.4
2026-04-16T03:18:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:18:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:18:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.053601
2026-04-16T03:18:09.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:18:09.233 [DEBUG] [Thread-30592] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:18:09.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:18:09.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:18:09.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:18:09.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:18:09.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:17:39', tmtdew=1.19911, humidity=92.1092, cloud=0.0, wind=15.8443, temperature=8.39775, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:17:11.126', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 4.04225, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.0589999999999993, nan, nan, nan, nan, nan, 2.6205, 2.6689999999999996, 2.4087499999999986, nan, nan, 0.10925000000000118, -0.08024999999999949, 0.046499999999999986, 0.12650000000000006, 0.25675000000000026, 0.19350000000000023, 0.15000000000000036, 0.1410000000000018, 0.05050000000000132, -0.07499999999999929, -0.11175000000000068], zp_timestamp='2026-04-16T01:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:18:09.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:18:09.489 [DEBUG] [Thread-30595] [transport.py] [_log()] starting thread (client mode): 0xee9c7b20
2026-04-16T03:18:09.489 [DEBUG] [Thread-30595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:18:09.504 [DEBUG] [Thread-30595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:18:09.504 [INFO] [Thread-30595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:18:09.511 [DEBUG] [Thread-30595] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:18:09.511 [DEBUG] [Thread-30595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:18:09.511 [DEBUG] [Thread-30595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:18:09.511 [DEBUG] [Thread-30595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:18:09.511 [DEBUG] [Thread-30595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:18:09.511 [DEBUG] [Thread-30595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:18:09.512 [DEBUG] [Thread-30595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:18:09.512 [DEBUG] [Thread-30595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:18:09.512 [DEBUG] [Thread-30595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:18:09.512 [DEBUG] [Thread-30595] [transport.py] [_log()] client lang: <none>
2026-04-16T03:18:09.512 [DEBUG] [Thread-30595] [transport.py] [_log()] server lang: <none>
2026-04-16T03:18:09.512 [DEBUG] [Thread-30595] [transport.py] [_log()] kex follows: False
2026-04-16T03:18:09.512 [DEBUG] [Thread-30595] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:18:09.512 [DEBUG] [Thread-30595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:18:09.512 [DEBUG] [Thread-30595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:18:09.512 [DEBUG] [Thread-30595] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:18:09.512 [DEBUG] [Thread-30595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:18:09.512 [DEBUG] [Thread-30595] [transport.py] [_log()] Compression: none
2026-04-16T03:18:09.512 [DEBUG] [Thread-30595] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:18:09.568 [DEBUG] [Thread-30595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:18:09.568 [DEBUG] [Thread-30595] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:18:09.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:18:09.569 [DEBUG] [Thread-30595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:18:09.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:18:09.625 [DEBUG] [Thread-30595] [transport.py] [_log()] userauth is OK
2026-04-16T03:18:09.625 [DEBUG] [Thread-30595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:18:09.625 [DEBUG] [Thread-30595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:18:09.625 [DEBUG] [Thread-30595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:18:09.626 [DEBUG] [Thread-30595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:18:09.651 [INFO] [Thread-30595] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:18:09.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:18:09.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:18:10.495 [DEBUG] [Thread-30595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:18:10.495 [DEBUG] [Thread-30595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:18:10.544 [DEBUG] [Thread-30595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:18:10.544 [DEBUG] [Thread-30595] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:18:10.554 [DEBUG] [Thread-30595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:18:10.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:18:10.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')
2026-04-16T03:18:10.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
2026-04-16T03:18:10.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:18:10.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:18:10.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:18:10.589 [DEBUG] [Thread-30595] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:18:12.302 [DEBUG] [Thread-30597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:18:15.529 [DEBUG] [Thread-30598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:18:30.573 [DEBUG] [Thread-30599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:18:40.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:18:40.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:18:40.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
2026-04-16T03:18:41.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 18, 14), 1.64681, 89.571, 0.0, 15.2633, 8.63217, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:18:41.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:18:14
2026-04-16T03:18:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:18:42.705 [DEBUG] [Thread-30600] [transport.py] [_log()] starting thread (client mode): 0xf1335e10
2026-04-16T03:18:42.705 [DEBUG] [Thread-30600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:18:42.726 [DEBUG] [Thread-30600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:18:42.726 [INFO] [Thread-30600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:18:42.729 [DEBUG] [Thread-30600] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:18:42.729 [DEBUG] [Thread-30600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:18:42.729 [DEBUG] [Thread-30600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:18:42.729 [DEBUG] [Thread-30600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:18:42.729 [DEBUG] [Thread-30600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:18:42.729 [DEBUG] [Thread-30600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:18:42.730 [DEBUG] [Thread-30600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:18:42.730 [DEBUG] [Thread-30600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:18:42.730 [DEBUG] [Thread-30600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:18:42.730 [DEBUG] [Thread-30600] [transport.py] [_log()] client lang: <none>
2026-04-16T03:18:42.730 [DEBUG] [Thread-30600] [transport.py] [_log()] server lang: <none>
2026-04-16T03:18:42.730 [DEBUG] [Thread-30600] [transport.py] [_log()] kex follows: False
2026-04-16T03:18:42.730 [DEBUG] [Thread-30600] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:18:42.730 [DEBUG] [Thread-30600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:18:42.730 [DEBUG] [Thread-30600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:18:42.730 [DEBUG] [Thread-30600] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:18:42.730 [DEBUG] [Thread-30600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:18:42.731 [DEBUG] [Thread-30600] [transport.py] [_log()] Compression: none
2026-04-16T03:18:42.731 [DEBUG] [Thread-30600] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:18:42.747 [DEBUG] [Thread-30600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:18:42.748 [DEBUG] [Thread-30600] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:18:42.748 [DEBUG] [Thread-30600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:18:42.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:18:42.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:18:42.749 [DEBUG] [Thread-30600] [transport.py] [_log()] userauth is OK
2026-04-16T03:18:42.750 [DEBUG] [Thread-30600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:18:42.750 [DEBUG] [Thread-30600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:18:42.750 [DEBUG] [Thread-30600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:18:42.750 [DEBUG] [Thread-30600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:18:42.768 [INFO] [Thread-30600] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:18:42.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:18:43.812 [DEBUG] [Thread-30600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:18:43.812 [DEBUG] [Thread-30600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:18:43.813 [DEBUG] [Thread-30600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:18:43.853 [DEBUG] [Thread-30600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:18:43.853 [DEBUG] [Thread-30600] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:18:43.855 [DEBUG] [Thread-30600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:18:43.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:18:43.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:18:43.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:18:43.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:18:43.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:18:43.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:18:43.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:18:43.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:18:43.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:18:43.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.053948 -999.00   +8.70   9.53     89   +7.20 1 1 1 3 1     0    0 1.74 6.72 .NE.. 13.8 9.5 87.7 13.9 9.1 -25.4 8.9 -24.2 8.7 -22.0 9.0 -24.2
2026-04-16T03:18:43.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:18:43.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:18:43.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.053948
2026-04-16T03:18:43.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:18:43.875 [DEBUG] [Thread-30600] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:18:43.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:18:43.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:18:43.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:18:43.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:18:43.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:18:14', tmtdew=1.64681, humidity=89.571, cloud=0.0, wind=15.2633, temperature=8.63217, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:17:41.107', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 4.04225, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.0589999999999993, nan, nan, nan, nan, nan, 2.6205, 2.6689999999999996, 2.4087499999999986, nan, nan, 0.10925000000000118, -0.08024999999999949, 0.046499999999999986, 0.12650000000000006, 0.25675000000000026, 0.19350000000000023, 0.15000000000000036, 0.1410000000000018, 0.05050000000000132, -0.07499999999999929, -0.11175000000000068], zp_timestamp='2026-04-16T01:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:18:44.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:18:44.117 [DEBUG] [Thread-30603] [transport.py] [_log()] starting thread (client mode): 0xee956c80
2026-04-16T03:18:44.117 [DEBUG] [Thread-30603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:18:44.132 [DEBUG] [Thread-30603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:18:44.132 [INFO] [Thread-30603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:18:44.140 [DEBUG] [Thread-30603] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:18:44.140 [DEBUG] [Thread-30603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:18:44.140 [DEBUG] [Thread-30603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:18:44.140 [DEBUG] [Thread-30603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:18:44.140 [DEBUG] [Thread-30603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:18:44.140 [DEBUG] [Thread-30603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:18:44.140 [DEBUG] [Thread-30603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:18:44.140 [DEBUG] [Thread-30603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:18:44.140 [DEBUG] [Thread-30603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:18:44.140 [DEBUG] [Thread-30603] [transport.py] [_log()] client lang: <none>
2026-04-16T03:18:44.140 [DEBUG] [Thread-30603] [transport.py] [_log()] server lang: <none>
2026-04-16T03:18:44.140 [DEBUG] [Thread-30603] [transport.py] [_log()] kex follows: False
2026-04-16T03:18:44.141 [DEBUG] [Thread-30603] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:18:44.141 [DEBUG] [Thread-30603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:18:44.141 [DEBUG] [Thread-30603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:18:44.141 [DEBUG] [Thread-30603] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:18:44.141 [DEBUG] [Thread-30603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:18:44.141 [DEBUG] [Thread-30603] [transport.py] [_log()] Compression: none
2026-04-16T03:18:44.141 [DEBUG] [Thread-30603] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:18:44.201 [DEBUG] [Thread-30603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:18:44.202 [DEBUG] [Thread-30603] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:18:44.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:18:44.202 [DEBUG] [Thread-30603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:18:44.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:18:44.256 [DEBUG] [Thread-30603] [transport.py] [_log()] userauth is OK
2026-04-16T03:18:44.257 [DEBUG] [Thread-30603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:18:44.257 [DEBUG] [Thread-30603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:18:44.257 [DEBUG] [Thread-30603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:18:44.257 [DEBUG] [Thread-30603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:18:44.276 [INFO] [Thread-30603] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:18:44.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:18:44.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:18:45.104 [DEBUG] [Thread-30603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:18:45.104 [DEBUG] [Thread-30603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:18:45.152 [DEBUG] [Thread-30603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:18:45.152 [DEBUG] [Thread-30603] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:18:45.161 [DEBUG] [Thread-30603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:18:45.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:18:45.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')
2026-04-16T03:18:45.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
2026-04-16T03:18:45.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:18:45.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:18:45.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:18:45.196 [DEBUG] [Thread-30603] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:18:45.604 [DEBUG] [Thread-30605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:19:00.649 [DEBUG] [Thread-30606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:19:01.591 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:19:01.592 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:19:12.448 [DEBUG] [Thread-30607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:19:15.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:19:15.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:19: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
2026-04-16T03:19:15.682 [DEBUG] [Thread-30608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:19:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 18, 50), 1.20911, 92.0424, 0.0, 15.8796, 8.33115, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:19:16.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:18:50
2026-04-16T03:19:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:19:17.316 [DEBUG] [Thread-30609] [transport.py] [_log()] starting thread (client mode): 0xf1335f60
2026-04-16T03:19:17.316 [DEBUG] [Thread-30609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:19:17.336 [DEBUG] [Thread-30609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:19:17.336 [INFO] [Thread-30609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:19:17.339 [DEBUG] [Thread-30609] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:19:17.339 [DEBUG] [Thread-30609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:19:17.339 [DEBUG] [Thread-30609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:19:17.339 [DEBUG] [Thread-30609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:19:17.339 [DEBUG] [Thread-30609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:19:17.339 [DEBUG] [Thread-30609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:19:17.340 [DEBUG] [Thread-30609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:19:17.340 [DEBUG] [Thread-30609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:19:17.340 [DEBUG] [Thread-30609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:19:17.340 [DEBUG] [Thread-30609] [transport.py] [_log()] client lang: <none>
2026-04-16T03:19:17.340 [DEBUG] [Thread-30609] [transport.py] [_log()] server lang: <none>
2026-04-16T03:19:17.340 [DEBUG] [Thread-30609] [transport.py] [_log()] kex follows: False
2026-04-16T03:19:17.340 [DEBUG] [Thread-30609] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:19:17.340 [DEBUG] [Thread-30609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:19:17.340 [DEBUG] [Thread-30609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:19:17.340 [DEBUG] [Thread-30609] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:19:17.341 [DEBUG] [Thread-30609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:19:17.341 [DEBUG] [Thread-30609] [transport.py] [_log()] Compression: none
2026-04-16T03:19:17.341 [DEBUG] [Thread-30609] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:19:17.349 [DEBUG] [Thread-30609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:19:17.349 [DEBUG] [Thread-30609] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:19:17.350 [DEBUG] [Thread-30609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:19:17.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:19:17.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:19:17.351 [DEBUG] [Thread-30609] [transport.py] [_log()] userauth is OK
2026-04-16T03:19:17.351 [DEBUG] [Thread-30609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:19:17.351 [DEBUG] [Thread-30609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:19:17.351 [DEBUG] [Thread-30609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:19:17.351 [DEBUG] [Thread-30609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:19:17.388 [INFO] [Thread-30609] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:19:17.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:19:18.113 [DEBUG] [Thread-30609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:19:18.113 [DEBUG] [Thread-30609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:19:18.113 [DEBUG] [Thread-30609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:19:18.154 [DEBUG] [Thread-30609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:19:18.154 [DEBUG] [Thread-30609] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:19:18.157 [DEBUG] [Thread-30609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:19:18.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:19:18.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:19:18.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:19:18.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:19:18.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:19:18.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:19:18.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:19:18.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:19:18.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:19:18.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.054642 -999.00   +8.70  14.20     89   +7.10 1 1 1 3 1     0    0 1.78 6.46 .NE.. 13.8 14.2 54.8 16.3 9.1 -25.4 8.9 -24.3 8.7 -22.0 8.9 -24.1
2026-04-16T03:19:18.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:19:18.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:19:18.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.054642
2026-04-16T03:19:18.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:19:18.184 [DEBUG] [Thread-30609] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:19:18.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:19:18.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:19:18.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:19:18.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:19:18.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:18:50', tmtdew=1.20911, humidity=92.0424, cloud=0.0, wind=15.8796, temperature=8.33115, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:18:41.069', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 4.04225, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.0589999999999993, nan, nan, nan, nan, nan, 2.6205, 2.6689999999999996, 2.4087499999999986, nan, nan, 0.10925000000000118, -0.08024999999999949, 0.046499999999999986, 0.12650000000000006, 0.25675000000000026, 0.19350000000000023, 0.15000000000000036, 0.1410000000000018, 0.05050000000000132, -0.07499999999999929, -0.11175000000000068], zp_timestamp='2026-04-16T01:15:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:19:18.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:19:18.416 [DEBUG] [Thread-30612] [transport.py] [_log()] starting thread (client mode): 0xee9fa350
2026-04-16T03:19:18.416 [DEBUG] [Thread-30612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:19:18.431 [DEBUG] [Thread-30612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:19:18.431 [INFO] [Thread-30612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:19:18.439 [DEBUG] [Thread-30612] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:19:18.439 [DEBUG] [Thread-30612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:19:18.439 [DEBUG] [Thread-30612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:19:18.439 [DEBUG] [Thread-30612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:19:18.439 [DEBUG] [Thread-30612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:19:18.439 [DEBUG] [Thread-30612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:19:18.439 [DEBUG] [Thread-30612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:19:18.439 [DEBUG] [Thread-30612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:19:18.439 [DEBUG] [Thread-30612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:19:18.439 [DEBUG] [Thread-30612] [transport.py] [_log()] client lang: <none>
2026-04-16T03:19:18.440 [DEBUG] [Thread-30612] [transport.py] [_log()] server lang: <none>
2026-04-16T03:19:18.440 [DEBUG] [Thread-30612] [transport.py] [_log()] kex follows: False
2026-04-16T03:19:18.440 [DEBUG] [Thread-30612] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:19:18.440 [DEBUG] [Thread-30612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:19:18.440 [DEBUG] [Thread-30612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:19:18.440 [DEBUG] [Thread-30612] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:19:18.440 [DEBUG] [Thread-30612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:19:18.440 [DEBUG] [Thread-30612] [transport.py] [_log()] Compression: none
2026-04-16T03:19:18.440 [DEBUG] [Thread-30612] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:19:18.496 [DEBUG] [Thread-30612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:19:18.496 [DEBUG] [Thread-30612] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:19:18.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:19:18.497 [DEBUG] [Thread-30612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:19:18.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:19:18.553 [DEBUG] [Thread-30612] [transport.py] [_log()] userauth is OK
2026-04-16T03:19:18.553 [DEBUG] [Thread-30612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:19:18.553 [DEBUG] [Thread-30612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:19:18.553 [DEBUG] [Thread-30612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:19:18.553 [DEBUG] [Thread-30612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:19:18.580 [INFO] [Thread-30612] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:19:18.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:19:18.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:19:19.462 [DEBUG] [Thread-30612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:19:19.462 [DEBUG] [Thread-30612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:19:19.510 [DEBUG] [Thread-30612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:19:19.510 [DEBUG] [Thread-30612] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:19:19.519 [DEBUG] [Thread-30612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:19:19.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:19:19.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')
2026-04-16T03:19:19.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
2026-04-16T03:19:19.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:19:19.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:19:19.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:19:19.553 [DEBUG] [Thread-30612] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:19:30.713 [DEBUG] [Thread-30614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:19:45.758 [DEBUG] [Thread-30615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:19:49.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:19:49.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:19:49.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
2026-04-16T03:19:50.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 19, 26), 1.65437, 89.5215, 0.0, 11.2928, 8.64913, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:19:50.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:19:26
2026-04-16T03:19:51.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:19:51.703 [DEBUG] [Thread-30616] [transport.py] [_log()] starting thread (client mode): 0xee9fa2f0
2026-04-16T03:19:51.703 [DEBUG] [Thread-30616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:19:51.724 [DEBUG] [Thread-30616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:19:51.724 [INFO] [Thread-30616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:19:51.727 [DEBUG] [Thread-30616] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:19:51.727 [DEBUG] [Thread-30616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:19:51.727 [DEBUG] [Thread-30616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:19:51.727 [DEBUG] [Thread-30616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:19:51.728 [DEBUG] [Thread-30616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:19:51.728 [DEBUG] [Thread-30616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:19:51.728 [DEBUG] [Thread-30616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:19:51.728 [DEBUG] [Thread-30616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:19:51.728 [DEBUG] [Thread-30616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:19:51.728 [DEBUG] [Thread-30616] [transport.py] [_log()] client lang: <none>
2026-04-16T03:19:51.728 [DEBUG] [Thread-30616] [transport.py] [_log()] server lang: <none>
2026-04-16T03:19:51.728 [DEBUG] [Thread-30616] [transport.py] [_log()] kex follows: False
2026-04-16T03:19:51.728 [DEBUG] [Thread-30616] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:19:51.728 [DEBUG] [Thread-30616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:19:51.728 [DEBUG] [Thread-30616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:19:51.729 [DEBUG] [Thread-30616] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:19:51.729 [DEBUG] [Thread-30616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:19:51.729 [DEBUG] [Thread-30616] [transport.py] [_log()] Compression: none
2026-04-16T03:19:51.729 [DEBUG] [Thread-30616] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:19:51.744 [DEBUG] [Thread-30616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:19:51.745 [DEBUG] [Thread-30616] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:19:51.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:19:51.745 [DEBUG] [Thread-30616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:19:51.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:19:51.747 [DEBUG] [Thread-30616] [transport.py] [_log()] userauth is OK
2026-04-16T03:19:51.747 [DEBUG] [Thread-30616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:19:51.747 [DEBUG] [Thread-30616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:19:51.747 [DEBUG] [Thread-30616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:19:51.747 [DEBUG] [Thread-30616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:19:51.772 [INFO] [Thread-30616] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:19:51.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:19:52.561 [DEBUG] [Thread-30616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:19:52.562 [DEBUG] [Thread-30616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:19:52.562 [DEBUG] [Thread-30616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:19:52.602 [DEBUG] [Thread-30616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:19:52.602 [DEBUG] [Thread-30616] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:19:52.605 [DEBUG] [Thread-30616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:19:52.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:19:52.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:19:52.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:19:52.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:19:52.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:19:52.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:19:52.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:19:52.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:19:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:19:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.054990 -999.00   +8.70  12.83     89   +7.10 1 1 1 3 1     0    0 1.76 6.06 .NEs. 13.5 12.8 73.4 14.7 9.1 -25.5 8.9 -24.3 8.6 -22.1 8.9 -24.2
2026-04-16T03:19:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:19:52.626 [DEBUG] [Thread-30616] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:19:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:19:52.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.054990
2026-04-16T03:19:52.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:19:52.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:19:52.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:19:52.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:19:52.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:19:52.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:19:26', tmtdew=1.65437, humidity=89.5215, cloud=0.0, wind=11.2928, temperature=8.64913, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:19:11.136', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 4.04225, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.0589999999999993, nan, nan, nan, nan, nan, 2.6205, 2.6689999999999996, 2.4087499999999986, nan, nan, 0.10925000000000118, -0.08024999999999949, 0.046499999999999986, 0.12650000000000006, 0.25675000000000026, 0.19350000000000023, 0.15000000000000036, 0.1410000000000018, 0.05050000000000132, -0.07499999999999929, -0.11175000000000068], zp_timestamp='2026-04-16T01:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:19:52.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:19:52.885 [DEBUG] [Thread-30619] [transport.py] [_log()] starting thread (client mode): 0xee9544f0
2026-04-16T03:19:52.885 [DEBUG] [Thread-30619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:19:52.900 [DEBUG] [Thread-30619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:19:52.900 [INFO] [Thread-30619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:19:52.908 [DEBUG] [Thread-30619] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:19:52.908 [DEBUG] [Thread-30619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:19:52.908 [DEBUG] [Thread-30619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:19:52.908 [DEBUG] [Thread-30619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:19:52.908 [DEBUG] [Thread-30619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:19:52.908 [DEBUG] [Thread-30619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:19:52.908 [DEBUG] [Thread-30619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:19:52.908 [DEBUG] [Thread-30619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:19:52.908 [DEBUG] [Thread-30619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:19:52.908 [DEBUG] [Thread-30619] [transport.py] [_log()] client lang: <none>
2026-04-16T03:19:52.908 [DEBUG] [Thread-30619] [transport.py] [_log()] server lang: <none>
2026-04-16T03:19:52.908 [DEBUG] [Thread-30619] [transport.py] [_log()] kex follows: False
2026-04-16T03:19:52.909 [DEBUG] [Thread-30619] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:19:52.909 [DEBUG] [Thread-30619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:19:52.909 [DEBUG] [Thread-30619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:19:52.909 [DEBUG] [Thread-30619] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:19:52.909 [DEBUG] [Thread-30619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:19:52.909 [DEBUG] [Thread-30619] [transport.py] [_log()] Compression: none
2026-04-16T03:19:52.909 [DEBUG] [Thread-30619] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:19:52.968 [DEBUG] [Thread-30619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:19:52.968 [DEBUG] [Thread-30619] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:19:52.969 [DEBUG] [Thread-30619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:19:52.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:19:52.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:19:53.025 [DEBUG] [Thread-30619] [transport.py] [_log()] userauth is OK
2026-04-16T03:19:53.025 [DEBUG] [Thread-30619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:19:53.025 [DEBUG] [Thread-30619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:19:53.025 [DEBUG] [Thread-30619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:19:53.025 [DEBUG] [Thread-30619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:19:53.050 [INFO] [Thread-30619] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:19:53.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:19:53.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:19:53.849 [DEBUG] [Thread-30619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:19:53.849 [DEBUG] [Thread-30619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:19:53.897 [DEBUG] [Thread-30619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:19:53.897 [DEBUG] [Thread-30619] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:19:53.906 [DEBUG] [Thread-30619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:19:53.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:19:53.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')
2026-04-16T03:19:53.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
2026-04-16T03:19:53.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:19:53.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:19:53.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:19:53.940 [DEBUG] [Thread-30619] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:20:00.789 [DEBUG] [Thread-30621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:20:01.807 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:20:01.808 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:20:12.612 [DEBUG] [Thread-30622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:20:15.836 [DEBUG] [Thread-30623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:20:23.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:20:23.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:20:23.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
2026-04-16T03:20:25.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 20, 1), 1.65203, 89.538, 0.0, 11.6456, 8.68231, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:20:25.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:20:01
2026-04-16T03:20:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:20:26.121 [DEBUG] [Thread-30624] [transport.py] [_log()] starting thread (client mode): 0xee954190
2026-04-16T03:20:26.121 [DEBUG] [Thread-30624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:20:26.143 [DEBUG] [Thread-30624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:20:26.143 [INFO] [Thread-30624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:20:26.146 [DEBUG] [Thread-30624] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:20:26.146 [DEBUG] [Thread-30624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:20:26.146 [DEBUG] [Thread-30624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:20:26.147 [DEBUG] [Thread-30624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:20:26.147 [DEBUG] [Thread-30624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:20:26.147 [DEBUG] [Thread-30624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:20:26.147 [DEBUG] [Thread-30624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:20:26.147 [DEBUG] [Thread-30624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:20:26.147 [DEBUG] [Thread-30624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:20:26.147 [DEBUG] [Thread-30624] [transport.py] [_log()] client lang: <none>
2026-04-16T03:20:26.147 [DEBUG] [Thread-30624] [transport.py] [_log()] server lang: <none>
2026-04-16T03:20:26.147 [DEBUG] [Thread-30624] [transport.py] [_log()] kex follows: False
2026-04-16T03:20:26.147 [DEBUG] [Thread-30624] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:20:26.147 [DEBUG] [Thread-30624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:20:26.147 [DEBUG] [Thread-30624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:20:26.148 [DEBUG] [Thread-30624] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:20:26.148 [DEBUG] [Thread-30624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:20:26.148 [DEBUG] [Thread-30624] [transport.py] [_log()] Compression: none
2026-04-16T03:20:26.148 [DEBUG] [Thread-30624] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:20:26.165 [DEBUG] [Thread-30624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:20:26.165 [DEBUG] [Thread-30624] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:20:26.166 [DEBUG] [Thread-30624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:20:26.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:20:26.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:20:26.167 [DEBUG] [Thread-30624] [transport.py] [_log()] userauth is OK
2026-04-16T03:20:26.167 [DEBUG] [Thread-30624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:20:26.167 [DEBUG] [Thread-30624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:20:26.167 [DEBUG] [Thread-30624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:20:26.167 [DEBUG] [Thread-30624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:20:26.182 [INFO] [Thread-30624] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:20:26.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:20:28.835 [DEBUG] [Thread-30624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:20:28.835 [DEBUG] [Thread-30624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:20:28.836 [DEBUG] [Thread-30624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:20:28.876 [DEBUG] [Thread-30624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:20:28.876 [DEBUG] [Thread-30624] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:20:28.879 [DEBUG] [Thread-30624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:20:28.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:20:28.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:20:28.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:20:28.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:20:28.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:20:30.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:20:30.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:20:30.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:20:30.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:20:30.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.055337 -999.00   +8.70  13.67     89   +7.10 1 1 1 3 1     0    0 1.76 5.62 .NEs. 11.4 13.7 69.6 19.4 9.1 -25.5 8.9 -24.2 8.6 -22.1 8.9 -24.1
2026-04-16T03:20:30.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:20:30.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:20:30.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.055337
2026-04-16T03:20:30.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:20:30.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:20:30.459 [DEBUG] [Thread-30624] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:20:30.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:20:30.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:20:30.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:20:30.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:20:01', tmtdew=1.65203, humidity=89.538, cloud=0.0, wind=11.6456, temperature=8.68231, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:19:41.117', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 4.04225, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.0589999999999993, nan, nan, nan, nan, nan, 2.6205, 2.6689999999999996, 2.4087499999999986, nan, nan, 0.10925000000000118, -0.08024999999999949, 0.046499999999999986, 0.12650000000000006, 0.25675000000000026, 0.19350000000000023, 0.15000000000000036, 0.1410000000000018, 0.05050000000000132, -0.07499999999999929, -0.11175000000000068], zp_timestamp='2026-04-16T01:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:20:30.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:20:30.690 [DEBUG] [Thread-30627] [transport.py] [_log()] starting thread (client mode): 0xf1336560
2026-04-16T03:20:30.690 [DEBUG] [Thread-30627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:20:30.705 [DEBUG] [Thread-30627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:20:30.705 [INFO] [Thread-30627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:20:30.713 [DEBUG] [Thread-30627] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:20:30.713 [DEBUG] [Thread-30627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:20:30.713 [DEBUG] [Thread-30627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:20:30.713 [DEBUG] [Thread-30627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:20:30.713 [DEBUG] [Thread-30627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:20:30.713 [DEBUG] [Thread-30627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:20:30.713 [DEBUG] [Thread-30627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:20:30.714 [DEBUG] [Thread-30627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:20:30.714 [DEBUG] [Thread-30627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:20:30.714 [DEBUG] [Thread-30627] [transport.py] [_log()] client lang: <none>
2026-04-16T03:20:30.714 [DEBUG] [Thread-30627] [transport.py] [_log()] server lang: <none>
2026-04-16T03:20:30.714 [DEBUG] [Thread-30627] [transport.py] [_log()] kex follows: False
2026-04-16T03:20:30.714 [DEBUG] [Thread-30627] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:20:30.714 [DEBUG] [Thread-30627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:20:30.714 [DEBUG] [Thread-30627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:20:30.714 [DEBUG] [Thread-30627] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:20:30.714 [DEBUG] [Thread-30627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:20:30.714 [DEBUG] [Thread-30627] [transport.py] [_log()] Compression: none
2026-04-16T03:20:30.715 [DEBUG] [Thread-30627] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:20:30.778 [DEBUG] [Thread-30627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:20:30.779 [DEBUG] [Thread-30627] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:20:30.779 [DEBUG] [Thread-30627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:20:30.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:20:30.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:20:30.837 [DEBUG] [Thread-30627] [transport.py] [_log()] userauth is OK
2026-04-16T03:20:30.837 [DEBUG] [Thread-30627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:20:30.838 [DEBUG] [Thread-30627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:20:30.838 [DEBUG] [Thread-30627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:20:30.838 [DEBUG] [Thread-30627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:20:30.863 [INFO] [Thread-30627] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:20:30.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:20:30.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:20:30.867 [DEBUG] [Thread-30629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:20:31.698 [DEBUG] [Thread-30627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:20:31.698 [DEBUG] [Thread-30627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:20:31.746 [DEBUG] [Thread-30627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:20:31.746 [DEBUG] [Thread-30627] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:20:31.755 [DEBUG] [Thread-30627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:20:31.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:20:31.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')
2026-04-16T03:20:31.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') -> 00000000
2026-04-16T03:20:31.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:20:31.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:20:31.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:20:31.791 [DEBUG] [Thread-30627] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:20:45.911 [DEBUG] [Thread-30630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:21:00.939 [DEBUG] [Thread-30631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:21:01.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:21:01.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:21:01.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
2026-04-16T03:21:02.015 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:21:02.017 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:21:03.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 20, 36), 1.20384, 92.0757, 0.0, 16.6205, 8.3312, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:21:03.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:20:36
2026-04-16T03:21:03.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:21:03.901 [DEBUG] [Thread-30632] [transport.py] [_log()] starting thread (client mode): 0xee9f8cd0
2026-04-16T03:21:03.901 [DEBUG] [Thread-30632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:21:03.914 [DEBUG] [Thread-30632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:21:03.914 [INFO] [Thread-30632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:21:03.917 [DEBUG] [Thread-30632] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:21:03.917 [DEBUG] [Thread-30632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:21:03.917 [DEBUG] [Thread-30632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:21:03.918 [DEBUG] [Thread-30632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:21:03.918 [DEBUG] [Thread-30632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:21:03.918 [DEBUG] [Thread-30632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:21:03.918 [DEBUG] [Thread-30632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:21:03.918 [DEBUG] [Thread-30632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:21:03.918 [DEBUG] [Thread-30632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:21:03.918 [DEBUG] [Thread-30632] [transport.py] [_log()] client lang: <none>
2026-04-16T03:21:03.918 [DEBUG] [Thread-30632] [transport.py] [_log()] server lang: <none>
2026-04-16T03:21:03.918 [DEBUG] [Thread-30632] [transport.py] [_log()] kex follows: False
2026-04-16T03:21:03.918 [DEBUG] [Thread-30632] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:21:03.918 [DEBUG] [Thread-30632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:21:03.918 [DEBUG] [Thread-30632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:21:03.919 [DEBUG] [Thread-30632] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:21:03.919 [DEBUG] [Thread-30632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:21:03.919 [DEBUG] [Thread-30632] [transport.py] [_log()] Compression: none
2026-04-16T03:21:03.919 [DEBUG] [Thread-30632] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:21:03.934 [DEBUG] [Thread-30632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:21:03.935 [DEBUG] [Thread-30632] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:21:03.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:21:03.936 [DEBUG] [Thread-30632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:21:03.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:21:03.937 [DEBUG] [Thread-30632] [transport.py] [_log()] userauth is OK
2026-04-16T03:21:03.937 [DEBUG] [Thread-30632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:21:03.937 [DEBUG] [Thread-30632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:21:03.937 [DEBUG] [Thread-30632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:21:03.937 [DEBUG] [Thread-30632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:21:03.960 [INFO] [Thread-30632] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:21:03.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:21:04.712 [DEBUG] [Thread-30632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:21:04.713 [DEBUG] [Thread-30632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:21:04.713 [DEBUG] [Thread-30632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:21:04.754 [DEBUG] [Thread-30632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:21:04.754 [DEBUG] [Thread-30632] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:21:04.756 [DEBUG] [Thread-30632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:21:04.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:21:04.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:21:04.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:21:04.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:21:04.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:21:04.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:21:04.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:21:04.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:21:04.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:21:04.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.055684 -999.00   +8.70   9.93     89   +7.10 1 1 1 3 1     0    0 1.71 5.33 .NEs. 10.2 9.9 62.0 12.9 9.1 -25.4 8.9 -24.2 8.6 -22.0 9.0 -24.1
2026-04-16T03:21:04.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:21:04.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:21:04.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.055684
2026-04-16T03:21:04.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:21:04.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:21:04.777 [DEBUG] [Thread-30632] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:21:04.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:21:04.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:21:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:21:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:20:36', tmtdew=1.20384, humidity=92.0757, cloud=0.0, wind=16.6205, temperature=8.3312, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:20:11.098', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 4.04225, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.0589999999999993, nan, nan, nan, nan, nan, 2.6205, 2.6689999999999996, 2.4087499999999986, nan, nan, 0.10925000000000118, -0.08024999999999949, 0.046499999999999986, 0.12650000000000006, 0.25675000000000026, 0.19350000000000023, 0.15000000000000036, 0.1410000000000018, 0.05050000000000132, -0.07499999999999929, -0.11175000000000068], zp_timestamp='2026-04-16T01:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:21:05.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:21:05.034 [DEBUG] [Thread-30635] [transport.py] [_log()] starting thread (client mode): 0xee9912d0
2026-04-16T03:21:05.035 [DEBUG] [Thread-30635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:21:05.049 [DEBUG] [Thread-30635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:21:05.049 [INFO] [Thread-30635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:21:05.056 [DEBUG] [Thread-30635] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:21:05.056 [DEBUG] [Thread-30635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:21:05.057 [DEBUG] [Thread-30635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:21:05.057 [DEBUG] [Thread-30635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:21:05.057 [DEBUG] [Thread-30635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:21:05.057 [DEBUG] [Thread-30635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:21:05.057 [DEBUG] [Thread-30635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:21:05.057 [DEBUG] [Thread-30635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:21:05.057 [DEBUG] [Thread-30635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:21:05.057 [DEBUG] [Thread-30635] [transport.py] [_log()] client lang: <none>
2026-04-16T03:21:05.057 [DEBUG] [Thread-30635] [transport.py] [_log()] server lang: <none>
2026-04-16T03:21:05.057 [DEBUG] [Thread-30635] [transport.py] [_log()] kex follows: False
2026-04-16T03:21:05.057 [DEBUG] [Thread-30635] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:21:05.058 [DEBUG] [Thread-30635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:21:05.058 [DEBUG] [Thread-30635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:21:05.058 [DEBUG] [Thread-30635] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:21:05.058 [DEBUG] [Thread-30635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:21:05.058 [DEBUG] [Thread-30635] [transport.py] [_log()] Compression: none
2026-04-16T03:21:05.058 [DEBUG] [Thread-30635] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:21:05.112 [DEBUG] [Thread-30635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:21:05.112 [DEBUG] [Thread-30635] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:21:05.113 [DEBUG] [Thread-30635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:21:05.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:21:05.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:21:05.169 [DEBUG] [Thread-30635] [transport.py] [_log()] userauth is OK
2026-04-16T03:21:05.169 [DEBUG] [Thread-30635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:21:05.169 [DEBUG] [Thread-30635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:21:05.170 [DEBUG] [Thread-30635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:21:05.170 [DEBUG] [Thread-30635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:21:05.195 [INFO] [Thread-30635] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:21:05.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:21:05.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:21:06.051 [DEBUG] [Thread-30635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:21:06.051 [DEBUG] [Thread-30635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:21:06.099 [DEBUG] [Thread-30635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:21:06.099 [DEBUG] [Thread-30635] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:21:06.108 [DEBUG] [Thread-30635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:21:06.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:21:06.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')
2026-04-16T03:21:06.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
2026-04-16T03:21:06.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:21:06.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:21:06.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:21:06.143 [DEBUG] [Thread-30635] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:21:12.762 [DEBUG] [Thread-30637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:21:15.972 [DEBUG] [Thread-30638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:21:31.018 [DEBUG] [Thread-30639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:21:36.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:21:36.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:21:36.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
2026-04-16T03:21:37.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 21, 12), 1.70188, 89.0381, 0.0, 15.3162, 8.66574, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:21:37.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:21:12
2026-04-16T03:21:37.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:21:38.294 [DEBUG] [Thread-30640] [transport.py] [_log()] starting thread (client mode): 0xf1336ad0
2026-04-16T03:21:38.295 [DEBUG] [Thread-30640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:21:38.315 [DEBUG] [Thread-30640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:21:38.315 [INFO] [Thread-30640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:21:38.318 [DEBUG] [Thread-30640] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:21:38.318 [DEBUG] [Thread-30640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:21:38.318 [DEBUG] [Thread-30640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:21:38.318 [DEBUG] [Thread-30640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:21:38.318 [DEBUG] [Thread-30640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:21:38.319 [DEBUG] [Thread-30640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:21:38.319 [DEBUG] [Thread-30640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:21:38.319 [DEBUG] [Thread-30640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:21:38.319 [DEBUG] [Thread-30640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:21:38.319 [DEBUG] [Thread-30640] [transport.py] [_log()] client lang: <none>
2026-04-16T03:21:38.319 [DEBUG] [Thread-30640] [transport.py] [_log()] server lang: <none>
2026-04-16T03:21:38.319 [DEBUG] [Thread-30640] [transport.py] [_log()] kex follows: False
2026-04-16T03:21:38.319 [DEBUG] [Thread-30640] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:21:38.319 [DEBUG] [Thread-30640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:21:38.319 [DEBUG] [Thread-30640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:21:38.319 [DEBUG] [Thread-30640] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:21:38.320 [DEBUG] [Thread-30640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:21:38.320 [DEBUG] [Thread-30640] [transport.py] [_log()] Compression: none
2026-04-16T03:21:38.320 [DEBUG] [Thread-30640] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:21:38.337 [DEBUG] [Thread-30640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:21:38.337 [DEBUG] [Thread-30640] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:21:38.337 [DEBUG] [Thread-30640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:21:38.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:21:38.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:21:38.339 [DEBUG] [Thread-30640] [transport.py] [_log()] userauth is OK
2026-04-16T03:21:38.339 [DEBUG] [Thread-30640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:21:38.339 [DEBUG] [Thread-30640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:21:38.339 [DEBUG] [Thread-30640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:21:38.339 [DEBUG] [Thread-30640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:21:38.357 [INFO] [Thread-30640] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:21:38.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:21:39.123 [DEBUG] [Thread-30640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:21:39.123 [DEBUG] [Thread-30640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:21:39.123 [DEBUG] [Thread-30640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:21:39.164 [DEBUG] [Thread-30640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:21:39.164 [DEBUG] [Thread-30640] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:21:39.167 [DEBUG] [Thread-30640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:21:39.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:21:39.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:21:39.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:21:39.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:21:39.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:21:39.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:21:39.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:21:39.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:21:39.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:21:39.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.056031 -999.00   +8.70  13.66     89   +7.10 1 1 1 3 1     0    0 1.75 5.48 .NE.. 13.0 13.7 61.4 16.0 9.1 -25.6 8.9 -24.3 8.6 -22.0 9.0 -24.2
2026-04-16T03:21:39.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:21:39.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:21:39.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.056031
2026-04-16T03:21:39.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:21:39.190 [DEBUG] [Thread-30640] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:21:39.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:21:39.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:21:39.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:21:39.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:21:39.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:21:12', tmtdew=1.70188, humidity=89.0381, cloud=0.0, wind=15.3162, temperature=8.66574, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:20:41.078', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 4.04225, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.0589999999999993, nan, nan, nan, nan, nan, 2.6205, 2.6689999999999996, 2.4087499999999986, nan, nan, 0.10925000000000118, -0.08024999999999949, 0.046499999999999986, 0.12650000000000006, 0.25675000000000026, 0.19350000000000023, 0.15000000000000036, 0.1410000000000018, 0.05050000000000132, -0.07499999999999929, -0.11175000000000068], zp_timestamp='2026-04-16T01:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:21:39.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:21:39.445 [DEBUG] [Thread-30643] [transport.py] [_log()] starting thread (client mode): 0xf13378e0
2026-04-16T03:21:39.445 [DEBUG] [Thread-30643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:21:39.463 [DEBUG] [Thread-30643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:21:39.463 [INFO] [Thread-30643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:21:39.473 [DEBUG] [Thread-30643] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:21:39.473 [DEBUG] [Thread-30643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:21:39.473 [DEBUG] [Thread-30643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:21:39.474 [DEBUG] [Thread-30643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:21:39.474 [DEBUG] [Thread-30643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:21:39.474 [DEBUG] [Thread-30643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:21:39.474 [DEBUG] [Thread-30643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:21:39.474 [DEBUG] [Thread-30643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:21:39.474 [DEBUG] [Thread-30643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:21:39.474 [DEBUG] [Thread-30643] [transport.py] [_log()] client lang: <none>
2026-04-16T03:21:39.475 [DEBUG] [Thread-30643] [transport.py] [_log()] server lang: <none>
2026-04-16T03:21:39.475 [DEBUG] [Thread-30643] [transport.py] [_log()] kex follows: False
2026-04-16T03:21:39.475 [DEBUG] [Thread-30643] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:21:39.475 [DEBUG] [Thread-30643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:21:39.475 [DEBUG] [Thread-30643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:21:39.475 [DEBUG] [Thread-30643] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:21:39.475 [DEBUG] [Thread-30643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:21:39.476 [DEBUG] [Thread-30643] [transport.py] [_log()] Compression: none
2026-04-16T03:21:39.476 [DEBUG] [Thread-30643] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:21:39.528 [DEBUG] [Thread-30643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:21:39.528 [DEBUG] [Thread-30643] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:21:39.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:21:39.529 [DEBUG] [Thread-30643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:21:39.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:21:39.585 [DEBUG] [Thread-30643] [transport.py] [_log()] userauth is OK
2026-04-16T03:21:39.585 [DEBUG] [Thread-30643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:21:39.585 [DEBUG] [Thread-30643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:21:39.586 [DEBUG] [Thread-30643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:21:39.586 [DEBUG] [Thread-30643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:21:39.614 [INFO] [Thread-30643] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:21:39.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:21:39.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:21:40.482 [DEBUG] [Thread-30643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:21:40.483 [DEBUG] [Thread-30643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:21:40.530 [DEBUG] [Thread-30643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:21:40.530 [DEBUG] [Thread-30643] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:21:40.539 [DEBUG] [Thread-30643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:21:40.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:21:40.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')
2026-04-16T03:21:40.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
2026-04-16T03:21:40.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:21:40.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:21:40.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:21:40.574 [DEBUG] [Thread-30643] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:21:46.050 [DEBUG] [Thread-30645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:22:01.095 [DEBUG] [Thread-30646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:22:02.220 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:22:02.221 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:22:10.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:22:10.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:22:10.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T03:22:11.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 21, 48), 1.20904, 92.043, 0.0, 16.2677, 8.33149, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:22:11.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:21:48
2026-04-16T03:22:12.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:22:12.675 [DEBUG] [Thread-30647] [transport.py] [_log()] starting thread (client mode): 0xee9f94e0
2026-04-16T03:22:12.676 [DEBUG] [Thread-30647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:22:12.696 [DEBUG] [Thread-30647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:22:12.696 [INFO] [Thread-30647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:22:12.699 [DEBUG] [Thread-30647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:22:12.699 [DEBUG] [Thread-30647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:22:12.699 [DEBUG] [Thread-30647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:22:12.699 [DEBUG] [Thread-30647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:22:12.699 [DEBUG] [Thread-30647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:22:12.699 [DEBUG] [Thread-30647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:22:12.699 [DEBUG] [Thread-30647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:22:12.700 [DEBUG] [Thread-30647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:22:12.700 [DEBUG] [Thread-30647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:22:12.700 [DEBUG] [Thread-30647] [transport.py] [_log()] client lang: <none>
2026-04-16T03:22:12.700 [DEBUG] [Thread-30647] [transport.py] [_log()] server lang: <none>
2026-04-16T03:22:12.700 [DEBUG] [Thread-30647] [transport.py] [_log()] kex follows: False
2026-04-16T03:22:12.700 [DEBUG] [Thread-30647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:22:12.700 [DEBUG] [Thread-30647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:22:12.700 [DEBUG] [Thread-30647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:22:12.700 [DEBUG] [Thread-30647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:22:12.700 [DEBUG] [Thread-30647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:22:12.700 [DEBUG] [Thread-30647] [transport.py] [_log()] Compression: none
2026-04-16T03:22:12.701 [DEBUG] [Thread-30647] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:22:12.714 [DEBUG] [Thread-30647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:22:12.714 [DEBUG] [Thread-30647] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:22:12.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:22:12.715 [DEBUG] [Thread-30647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:22:12.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:22:12.756 [DEBUG] [Thread-30647] [transport.py] [_log()] userauth is OK
2026-04-16T03:22:12.756 [DEBUG] [Thread-30647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:22:12.757 [DEBUG] [Thread-30647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:22:12.757 [DEBUG] [Thread-30647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:22:12.757 [DEBUG] [Thread-30647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:22:12.778 [INFO] [Thread-30647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:22:12.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:22:12.905 [DEBUG] [Thread-30649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:22:13.592 [DEBUG] [Thread-30647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:22:13.592 [DEBUG] [Thread-30647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:22:13.593 [DEBUG] [Thread-30647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:22:13.633 [DEBUG] [Thread-30647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:22:13.633 [DEBUG] [Thread-30647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:22:13.636 [DEBUG] [Thread-30647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:22:13.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:22:13.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:22:13.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:22:13.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:22:13.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:22:13.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:22:13.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:22:13.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:22:13.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:22:13.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.056379 -999.00   +8.70  14.50     89   +7.10 1 1 1 3 1     0    0 1.72 5.72 .NE.. 14.8 14.5 65.6 16.0 9.1 -25.6 8.9 -24.3 8.6 -22.1 9.0 -24.2
2026-04-16T03:22:13.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:22:13.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:22:13.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.056379
2026-04-16T03:22:13.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:22:13.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:22:13.662 [DEBUG] [Thread-30647] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:22:13.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:22:13.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:22:13.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:22:13.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:21:48', tmtdew=1.20904, humidity=92.043, cloud=0.0, wind=16.2677, temperature=8.33149, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:21:11.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 4.04225, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.0589999999999993, nan, nan, nan, nan, nan, 2.6205, 2.6689999999999996, 2.4087499999999986, nan, nan, 0.10925000000000118, -0.08024999999999949, 0.046499999999999986, 0.12650000000000006, 0.25675000000000026, 0.19350000000000023, 0.15000000000000036, 0.1410000000000018, 0.05050000000000132, -0.07499999999999929, -0.11175000000000068], zp_timestamp='2026-04-16T01:19:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:22:13.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:22:13.918 [DEBUG] [Thread-30651] [transport.py] [_log()] starting thread (client mode): 0xee9fa320
2026-04-16T03:22:13.919 [DEBUG] [Thread-30651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:22:13.934 [DEBUG] [Thread-30651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:22:13.934 [INFO] [Thread-30651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:22:13.941 [DEBUG] [Thread-30651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:22:13.942 [DEBUG] [Thread-30651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:22:13.942 [DEBUG] [Thread-30651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:22:13.942 [DEBUG] [Thread-30651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:22:13.942 [DEBUG] [Thread-30651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:22:13.942 [DEBUG] [Thread-30651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:22:13.942 [DEBUG] [Thread-30651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:22:13.942 [DEBUG] [Thread-30651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:22:13.942 [DEBUG] [Thread-30651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:22:13.942 [DEBUG] [Thread-30651] [transport.py] [_log()] client lang: <none>
2026-04-16T03:22:13.942 [DEBUG] [Thread-30651] [transport.py] [_log()] server lang: <none>
2026-04-16T03:22:13.943 [DEBUG] [Thread-30651] [transport.py] [_log()] kex follows: False
2026-04-16T03:22:13.943 [DEBUG] [Thread-30651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:22:13.943 [DEBUG] [Thread-30651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:22:13.943 [DEBUG] [Thread-30651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:22:13.943 [DEBUG] [Thread-30651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:22:13.943 [DEBUG] [Thread-30651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:22:13.943 [DEBUG] [Thread-30651] [transport.py] [_log()] Compression: none
2026-04-16T03:22:13.943 [DEBUG] [Thread-30651] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:22:14.000 [DEBUG] [Thread-30651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:22:14.001 [DEBUG] [Thread-30651] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:22:14.001 [DEBUG] [Thread-30651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:22:14.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:22:14.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:22:14.057 [DEBUG] [Thread-30651] [transport.py] [_log()] userauth is OK
2026-04-16T03:22:14.057 [DEBUG] [Thread-30651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:22:14.057 [DEBUG] [Thread-30651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:22:14.057 [DEBUG] [Thread-30651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:22:14.057 [DEBUG] [Thread-30651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:22:14.082 [INFO] [Thread-30651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:22:14.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:22:14.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:22:14.893 [DEBUG] [Thread-30651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:22:14.893 [DEBUG] [Thread-30651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:22:14.941 [DEBUG] [Thread-30651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:22:14.941 [DEBUG] [Thread-30651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:22:14.950 [DEBUG] [Thread-30651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:22:14.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:22:14.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')
2026-04-16T03:22:14.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-16T03:22:14.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:22:14.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:22:14.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:22:14.984 [DEBUG] [Thread-30651] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:22:16.130 [DEBUG] [Thread-30653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:22:31.176 [DEBUG] [Thread-30654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:22:45.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:22:45.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:22:45.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
2026-04-16T03:22:46.207 [DEBUG] [Thread-30655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:22:46.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 22, 23), 1.70686, 89.0049, 0.0, 13.4104, 8.63256, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:22:46.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:22:23
2026-04-16T03:22:46.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:22:47.164 [DEBUG] [Thread-30656] [transport.py] [_log()] starting thread (client mode): 0xee9fb5e0
2026-04-16T03:22:47.165 [DEBUG] [Thread-30656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:22:47.184 [DEBUG] [Thread-30656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:22:47.184 [INFO] [Thread-30656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:22:47.187 [DEBUG] [Thread-30656] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:22:47.188 [DEBUG] [Thread-30656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:22:47.188 [DEBUG] [Thread-30656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:22:47.188 [DEBUG] [Thread-30656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:22:47.188 [DEBUG] [Thread-30656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:22:47.188 [DEBUG] [Thread-30656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:22:47.188 [DEBUG] [Thread-30656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:22:47.188 [DEBUG] [Thread-30656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:22:47.188 [DEBUG] [Thread-30656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:22:47.188 [DEBUG] [Thread-30656] [transport.py] [_log()] client lang: <none>
2026-04-16T03:22:47.188 [DEBUG] [Thread-30656] [transport.py] [_log()] server lang: <none>
2026-04-16T03:22:47.188 [DEBUG] [Thread-30656] [transport.py] [_log()] kex follows: False
2026-04-16T03:22:47.189 [DEBUG] [Thread-30656] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:22:47.189 [DEBUG] [Thread-30656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:22:47.189 [DEBUG] [Thread-30656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:22:47.189 [DEBUG] [Thread-30656] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:22:47.189 [DEBUG] [Thread-30656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:22:47.189 [DEBUG] [Thread-30656] [transport.py] [_log()] Compression: none
2026-04-16T03:22:47.189 [DEBUG] [Thread-30656] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:22:47.208 [DEBUG] [Thread-30656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:22:47.209 [DEBUG] [Thread-30656] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:22:47.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:22:47.209 [DEBUG] [Thread-30656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:22:47.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:22:47.210 [DEBUG] [Thread-30656] [transport.py] [_log()] userauth is OK
2026-04-16T03:22:47.211 [DEBUG] [Thread-30656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:22:47.211 [DEBUG] [Thread-30656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:22:47.211 [DEBUG] [Thread-30656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:22:47.211 [DEBUG] [Thread-30656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:22:47.248 [INFO] [Thread-30656] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:22:47.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:22:48.026 [DEBUG] [Thread-30656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:22:48.027 [DEBUG] [Thread-30656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:22:48.028 [DEBUG] [Thread-30656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:22:48.067 [DEBUG] [Thread-30656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:22:48.067 [DEBUG] [Thread-30656] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:22:48.070 [DEBUG] [Thread-30656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:22:48.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:22:48.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:22:48.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:22:48.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:22:48.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:22:48.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:22:48.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:22:48.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:22:48.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:22:48.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.057073 -999.00   +8.70  10.63     90   +7.20 1 1 1 3 1     0    0 1.70 5.56 .NE.. 12.3 10.6 90.1 17.0 9.0 -25.5 8.9 -24.3 8.6 -22.1 8.9 -24.2
2026-04-16T03:22:48.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:22:48.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:22:48.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.057073
2026-04-16T03:22:48.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:22:48.096 [DEBUG] [Thread-30656] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:22:48.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:22:48.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:22:48.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:22:48.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:22:48.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:22:23', tmtdew=1.70686, humidity=89.0049, cloud=0.0, wind=13.4104, temperature=8.63256, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:22:11.107', atlas_cloud=1, atlas_rain=1, zp_data=[4.07675, 3.33225, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3840000000000003, nan, nan, nan, nan, nan, nan, nan, 2.704249999999999, nan, 1.598749999999999, 0.10925000000000118, -0.08774999999999977, 0.022999999999999687, 0.15249999999999986, 0.19374999999999964, 0.17849999999999966, 0.16199999999999903, 0.17100000000000115, 0.06850000000000023, -0.09699999999999953, -0.10675000000000168], zp_timestamp='2026-04-16T01:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:22:48.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:22:48.352 [DEBUG] [Thread-30659] [transport.py] [_log()] starting thread (client mode): 0xf1337250
2026-04-16T03:22:48.352 [DEBUG] [Thread-30659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:22:48.367 [DEBUG] [Thread-30659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:22:48.367 [INFO] [Thread-30659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:22:48.374 [DEBUG] [Thread-30659] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:22:48.375 [DEBUG] [Thread-30659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:22:48.375 [DEBUG] [Thread-30659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:22:48.375 [DEBUG] [Thread-30659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:22:48.375 [DEBUG] [Thread-30659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:22:48.375 [DEBUG] [Thread-30659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:22:48.375 [DEBUG] [Thread-30659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:22:48.375 [DEBUG] [Thread-30659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:22:48.375 [DEBUG] [Thread-30659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:22:48.375 [DEBUG] [Thread-30659] [transport.py] [_log()] client lang: <none>
2026-04-16T03:22:48.375 [DEBUG] [Thread-30659] [transport.py] [_log()] server lang: <none>
2026-04-16T03:22:48.375 [DEBUG] [Thread-30659] [transport.py] [_log()] kex follows: False
2026-04-16T03:22:48.375 [DEBUG] [Thread-30659] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:22:48.375 [DEBUG] [Thread-30659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:22:48.376 [DEBUG] [Thread-30659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:22:48.376 [DEBUG] [Thread-30659] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:22:48.376 [DEBUG] [Thread-30659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:22:48.376 [DEBUG] [Thread-30659] [transport.py] [_log()] Compression: none
2026-04-16T03:22:48.376 [DEBUG] [Thread-30659] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:22:48.432 [DEBUG] [Thread-30659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:22:48.433 [DEBUG] [Thread-30659] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:22:48.433 [DEBUG] [Thread-30659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:22:48.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:22:48.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:22:48.489 [DEBUG] [Thread-30659] [transport.py] [_log()] userauth is OK
2026-04-16T03:22:48.489 [DEBUG] [Thread-30659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:22:48.489 [DEBUG] [Thread-30659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:22:48.489 [DEBUG] [Thread-30659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:22:48.489 [DEBUG] [Thread-30659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:22:48.515 [INFO] [Thread-30659] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:22:48.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:22:48.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:22:49.335 [DEBUG] [Thread-30659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:22:49.336 [DEBUG] [Thread-30659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:22:49.383 [DEBUG] [Thread-30659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:22:49.383 [DEBUG] [Thread-30659] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:22:49.391 [DEBUG] [Thread-30659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:22:49.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:22:49.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')
2026-04-16T03:22:49.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
2026-04-16T03:22:49.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:22:49.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:22:49.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:22:49.427 [DEBUG] [Thread-30659] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:23:01.238 [DEBUG] [Thread-30661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:23:02.424 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:23:02.426 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:23:13.055 [DEBUG] [Thread-30662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:23:16.281 [DEBUG] [Thread-30663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:23:19.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:23:19.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:23:19.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
2026-04-16T03:23:20.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 22, 58), 1.66209, 88.9719, 0.0, 13.4809, 8.58267, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:23:20.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:22:58
2026-04-16T03:23:21.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:23:21.624 [DEBUG] [Thread-30664] [transport.py] [_log()] starting thread (client mode): 0xee9934f0
2026-04-16T03:23:21.624 [DEBUG] [Thread-30664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:23:21.648 [DEBUG] [Thread-30664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:23:21.648 [INFO] [Thread-30664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:23:21.652 [DEBUG] [Thread-30664] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:23:21.652 [DEBUG] [Thread-30664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:23:21.652 [DEBUG] [Thread-30664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:23:21.652 [DEBUG] [Thread-30664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:23:21.652 [DEBUG] [Thread-30664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:23:21.652 [DEBUG] [Thread-30664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:23:21.653 [DEBUG] [Thread-30664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:23:21.653 [DEBUG] [Thread-30664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:23:21.653 [DEBUG] [Thread-30664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:23:21.653 [DEBUG] [Thread-30664] [transport.py] [_log()] client lang: <none>
2026-04-16T03:23:21.653 [DEBUG] [Thread-30664] [transport.py] [_log()] server lang: <none>
2026-04-16T03:23:21.653 [DEBUG] [Thread-30664] [transport.py] [_log()] kex follows: False
2026-04-16T03:23:21.653 [DEBUG] [Thread-30664] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:23:21.653 [DEBUG] [Thread-30664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:23:21.653 [DEBUG] [Thread-30664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:23:21.653 [DEBUG] [Thread-30664] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:23:21.653 [DEBUG] [Thread-30664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:23:21.653 [DEBUG] [Thread-30664] [transport.py] [_log()] Compression: none
2026-04-16T03:23:21.654 [DEBUG] [Thread-30664] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:23:21.672 [DEBUG] [Thread-30664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:23:21.673 [DEBUG] [Thread-30664] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:23:21.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:23:21.673 [DEBUG] [Thread-30664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:23:21.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:23:21.674 [DEBUG] [Thread-30664] [transport.py] [_log()] userauth is OK
2026-04-16T03:23:21.674 [DEBUG] [Thread-30664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:23:21.674 [DEBUG] [Thread-30664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:23:21.675 [DEBUG] [Thread-30664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:23:21.675 [DEBUG] [Thread-30664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:23:21.697 [INFO] [Thread-30664] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:23:21.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:23:22.487 [DEBUG] [Thread-30664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:23:22.487 [DEBUG] [Thread-30664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:23:22.488 [DEBUG] [Thread-30664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:23:22.528 [DEBUG] [Thread-30664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:23:22.528 [DEBUG] [Thread-30664] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:23:22.531 [DEBUG] [Thread-30664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:23:22.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:23:22.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:23:22.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:23:22.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:23:22.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:23:22.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:23:22.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:23:22.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:23:22.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:23:22.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.057420 -999.00   +8.70  14.21     89   +7.10 1 1 1 3 1     0    0 1.73 5.40 .NE.. 12.8 14.2 84.2 18.0 9.0 -25.6 8.9 -24.3 8.6 -22.1 8.9 -24.2
2026-04-16T03:23:22.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:23:22.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:23:22.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.057420
2026-04-16T03:23:22.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:23:22.559 [DEBUG] [Thread-30664] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:23:22.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:23:22.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:23:22.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:23:22.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:23:22.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:22:58', tmtdew=1.66209, humidity=88.9719, cloud=0.0, wind=13.4809, temperature=8.58267, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:22:41.088', atlas_cloud=1, atlas_rain=1, zp_data=[4.07675, 3.33225, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3840000000000003, nan, nan, nan, nan, nan, nan, nan, 2.704249999999999, nan, 1.598749999999999, 0.10925000000000118, -0.08774999999999977, 0.022999999999999687, 0.15249999999999986, 0.19374999999999964, 0.17849999999999966, 0.16199999999999903, 0.17100000000000115, 0.06850000000000023, -0.09699999999999953, -0.10675000000000168], zp_timestamp='2026-04-16T01:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:23:22.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:23:22.816 [DEBUG] [Thread-30667] [transport.py] [_log()] starting thread (client mode): 0xee9fb910
2026-04-16T03:23:22.816 [DEBUG] [Thread-30667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:23:22.832 [DEBUG] [Thread-30667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:23:22.832 [INFO] [Thread-30667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:23:22.839 [DEBUG] [Thread-30667] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:23:22.839 [DEBUG] [Thread-30667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:23:22.839 [DEBUG] [Thread-30667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:23:22.839 [DEBUG] [Thread-30667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:23:22.840 [DEBUG] [Thread-30667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:23:22.840 [DEBUG] [Thread-30667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:23:22.840 [DEBUG] [Thread-30667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:23:22.840 [DEBUG] [Thread-30667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:23:22.840 [DEBUG] [Thread-30667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:23:22.840 [DEBUG] [Thread-30667] [transport.py] [_log()] client lang: <none>
2026-04-16T03:23:22.840 [DEBUG] [Thread-30667] [transport.py] [_log()] server lang: <none>
2026-04-16T03:23:22.840 [DEBUG] [Thread-30667] [transport.py] [_log()] kex follows: False
2026-04-16T03:23:22.840 [DEBUG] [Thread-30667] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:23:22.840 [DEBUG] [Thread-30667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:23:22.840 [DEBUG] [Thread-30667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:23:22.840 [DEBUG] [Thread-30667] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:23:22.841 [DEBUG] [Thread-30667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:23:22.841 [DEBUG] [Thread-30667] [transport.py] [_log()] Compression: none
2026-04-16T03:23:22.841 [DEBUG] [Thread-30667] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:23:22.896 [DEBUG] [Thread-30667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:23:22.896 [DEBUG] [Thread-30667] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:23:22.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:23:22.897 [DEBUG] [Thread-30667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:23:22.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:23:22.959 [DEBUG] [Thread-30667] [transport.py] [_log()] userauth is OK
2026-04-16T03:23:22.959 [DEBUG] [Thread-30667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:23:22.959 [DEBUG] [Thread-30667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:23:22.959 [DEBUG] [Thread-30667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:23:22.959 [DEBUG] [Thread-30667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:23:22.984 [INFO] [Thread-30667] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:23:22.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:23:22.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:23:23.823 [DEBUG] [Thread-30667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:23:23.823 [DEBUG] [Thread-30667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:23:23.871 [DEBUG] [Thread-30667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:23:23.871 [DEBUG] [Thread-30667] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:23:23.880 [DEBUG] [Thread-30667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:23:23.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:23: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')
2026-04-16T03:23:23.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
2026-04-16T03:23:23.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:23:23.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:23:23.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:23:23.915 [DEBUG] [Thread-30667] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:23:31.311 [DEBUG] [Thread-30669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:23:46.352 [DEBUG] [Thread-30670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:23:53.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:23:53.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:23:53.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
2026-04-16T03:23:55.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 23, 34), 1.20397, 92.0768, 0.0, 16.0207, 8.36508, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:23:55.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:23:34
2026-04-16T03:23:55.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:23:56.029 [DEBUG] [Thread-30671] [transport.py] [_log()] starting thread (client mode): 0xee954250
2026-04-16T03:23:56.029 [DEBUG] [Thread-30671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:23:56.046 [DEBUG] [Thread-30671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:23:56.046 [INFO] [Thread-30671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:23:56.050 [DEBUG] [Thread-30671] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:23:56.050 [DEBUG] [Thread-30671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:23:56.050 [DEBUG] [Thread-30671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:23:56.050 [DEBUG] [Thread-30671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:23:56.050 [DEBUG] [Thread-30671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:23:56.050 [DEBUG] [Thread-30671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:23:56.050 [DEBUG] [Thread-30671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:23:56.050 [DEBUG] [Thread-30671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:23:56.050 [DEBUG] [Thread-30671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:23:56.050 [DEBUG] [Thread-30671] [transport.py] [_log()] client lang: <none>
2026-04-16T03:23:56.050 [DEBUG] [Thread-30671] [transport.py] [_log()] server lang: <none>
2026-04-16T03:23:56.051 [DEBUG] [Thread-30671] [transport.py] [_log()] kex follows: False
2026-04-16T03:23:56.051 [DEBUG] [Thread-30671] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:23:56.051 [DEBUG] [Thread-30671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:23:56.051 [DEBUG] [Thread-30671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:23:56.051 [DEBUG] [Thread-30671] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:23:56.051 [DEBUG] [Thread-30671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:23:56.051 [DEBUG] [Thread-30671] [transport.py] [_log()] Compression: none
2026-04-16T03:23:56.051 [DEBUG] [Thread-30671] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:23:56.068 [DEBUG] [Thread-30671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:23:56.068 [DEBUG] [Thread-30671] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:23:56.068 [DEBUG] [Thread-30671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:23:56.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:23:56.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:23:56.069 [DEBUG] [Thread-30671] [transport.py] [_log()] userauth is OK
2026-04-16T03:23:56.070 [DEBUG] [Thread-30671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:23:56.070 [DEBUG] [Thread-30671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:23:56.070 [DEBUG] [Thread-30671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:23:56.070 [DEBUG] [Thread-30671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:23:56.088 [INFO] [Thread-30671] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:23:56.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:23:56.890 [DEBUG] [Thread-30671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:23:56.891 [DEBUG] [Thread-30671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:23:56.891 [DEBUG] [Thread-30671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:23:56.931 [DEBUG] [Thread-30671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:23:56.931 [DEBUG] [Thread-30671] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:23:56.934 [DEBUG] [Thread-30671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:23:56.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:23:56.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:23:56.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:23:56.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:23:56.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:23:56.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:23:56.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:23:56.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:23:56.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:23:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.057767 -999.00   +8.70  13.44     89   +7.10 1 1 1 3 1     0    0 1.73 4.84 .NE.. 8.1 13.4 69.5 17.1 9.1 -25.5 8.9 -24.2 8.6 -22.1 8.9 -24.1
2026-04-16T03:23:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:23:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:23:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.057767
2026-04-16T03:23:56.958 [DEBUG] [Thread-30671] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:23:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:23:56.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:23:56.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:23:56.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:23:56.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:23:56.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:23:34', tmtdew=1.20397, humidity=92.0768, cloud=0.0, wind=16.0207, temperature=8.36508, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:23:11.069', atlas_cloud=1, atlas_rain=1, zp_data=[4.07675, 3.33225, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3840000000000003, nan, nan, nan, nan, nan, nan, nan, 2.704249999999999, nan, 1.598749999999999, 0.10925000000000118, -0.08774999999999977, 0.022999999999999687, 0.15249999999999986, 0.19374999999999964, 0.17849999999999966, 0.16199999999999903, 0.17100000000000115, 0.06850000000000023, -0.09699999999999953, -0.10675000000000168], zp_timestamp='2026-04-16T01:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:23:57.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:23:57.209 [DEBUG] [Thread-30674] [transport.py] [_log()] starting thread (client mode): 0xf13e1840
2026-04-16T03:23:57.210 [DEBUG] [Thread-30674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:23:57.224 [DEBUG] [Thread-30674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:23:57.224 [INFO] [Thread-30674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:23:57.231 [DEBUG] [Thread-30674] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:23:57.231 [DEBUG] [Thread-30674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:23:57.231 [DEBUG] [Thread-30674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:23:57.231 [DEBUG] [Thread-30674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:23:57.231 [DEBUG] [Thread-30674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:23:57.232 [DEBUG] [Thread-30674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:23:57.232 [DEBUG] [Thread-30674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:23:57.232 [DEBUG] [Thread-30674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:23:57.232 [DEBUG] [Thread-30674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:23:57.232 [DEBUG] [Thread-30674] [transport.py] [_log()] client lang: <none>
2026-04-16T03:23:57.232 [DEBUG] [Thread-30674] [transport.py] [_log()] server lang: <none>
2026-04-16T03:23:57.232 [DEBUG] [Thread-30674] [transport.py] [_log()] kex follows: False
2026-04-16T03:23:57.232 [DEBUG] [Thread-30674] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:23:57.232 [DEBUG] [Thread-30674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:23:57.232 [DEBUG] [Thread-30674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:23:57.232 [DEBUG] [Thread-30674] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:23:57.232 [DEBUG] [Thread-30674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:23:57.233 [DEBUG] [Thread-30674] [transport.py] [_log()] Compression: none
2026-04-16T03:23:57.233 [DEBUG] [Thread-30674] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:23:57.288 [DEBUG] [Thread-30674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:23:57.289 [DEBUG] [Thread-30674] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:23:57.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:23:57.289 [DEBUG] [Thread-30674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:23:57.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:23:57.345 [DEBUG] [Thread-30674] [transport.py] [_log()] userauth is OK
2026-04-16T03:23:57.345 [DEBUG] [Thread-30674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:23:57.345 [DEBUG] [Thread-30674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:23:57.346 [DEBUG] [Thread-30674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:23:57.346 [DEBUG] [Thread-30674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:23:57.368 [INFO] [Thread-30674] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:23:57.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:23:57.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:23:58.201 [DEBUG] [Thread-30674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:23:58.201 [DEBUG] [Thread-30674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:23:58.249 [DEBUG] [Thread-30674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:23:58.249 [DEBUG] [Thread-30674] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:23:58.258 [DEBUG] [Thread-30674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:23:58.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:23: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')
2026-04-16T03:23: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
2026-04-16T03:23:58.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:23:58.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:23:58.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:23:58.293 [DEBUG] [Thread-30674] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:24:01.381 [DEBUG] [Thread-30676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:24:02.629 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:24:02.630 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:24:13.202 [DEBUG] [Thread-30677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:24:16.426 [DEBUG] [Thread-30678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:24:28.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:24:28.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:24:28.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
2026-04-16T03:24:29.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 24, 9), 1.70666, 89.0052, 0.0, 15.5102, 8.61617, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:24:29.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:24:09
2026-04-16T03:24:29.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:24:30.321 [DEBUG] [Thread-30679] [transport.py] [_log()] starting thread (client mode): 0xee9c0c40
2026-04-16T03:24:30.321 [DEBUG] [Thread-30679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:24:30.339 [DEBUG] [Thread-30679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:24:30.340 [INFO] [Thread-30679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:24:30.343 [DEBUG] [Thread-30679] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:24:30.343 [DEBUG] [Thread-30679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:24:30.343 [DEBUG] [Thread-30679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:24:30.343 [DEBUG] [Thread-30679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:24:30.343 [DEBUG] [Thread-30679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:24:30.343 [DEBUG] [Thread-30679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:24:30.343 [DEBUG] [Thread-30679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:24:30.343 [DEBUG] [Thread-30679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:24:30.343 [DEBUG] [Thread-30679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:24:30.343 [DEBUG] [Thread-30679] [transport.py] [_log()] client lang: <none>
2026-04-16T03:24:30.343 [DEBUG] [Thread-30679] [transport.py] [_log()] server lang: <none>
2026-04-16T03:24:30.343 [DEBUG] [Thread-30679] [transport.py] [_log()] kex follows: False
2026-04-16T03:24:30.343 [DEBUG] [Thread-30679] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:24:30.343 [DEBUG] [Thread-30679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:24:30.343 [DEBUG] [Thread-30679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:24:30.344 [DEBUG] [Thread-30679] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:24:30.344 [DEBUG] [Thread-30679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:24:30.344 [DEBUG] [Thread-30679] [transport.py] [_log()] Compression: none
2026-04-16T03:24:30.344 [DEBUG] [Thread-30679] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:24:30.360 [DEBUG] [Thread-30679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:24:30.360 [DEBUG] [Thread-30679] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:24:30.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:24:30.360 [DEBUG] [Thread-30679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:24:30.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:24:30.361 [DEBUG] [Thread-30679] [transport.py] [_log()] userauth is OK
2026-04-16T03:24:30.361 [DEBUG] [Thread-30679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:24:30.361 [DEBUG] [Thread-30679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:24:30.361 [DEBUG] [Thread-30679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:24:30.361 [DEBUG] [Thread-30679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:24:30.391 [INFO] [Thread-30679] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:24:30.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:24:31.209 [DEBUG] [Thread-30679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:24:31.210 [DEBUG] [Thread-30679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:24:31.210 [DEBUG] [Thread-30679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:24:31.250 [DEBUG] [Thread-30679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:24:31.250 [DEBUG] [Thread-30679] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:24:31.253 [DEBUG] [Thread-30679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:24:31.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:24:31.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:24:31.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:24:31.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:24:31.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:24:31.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:24:31.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:24:31.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:24:31.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:24:31.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.058115 -999.00   +8.70  10.73     89   +7.20 1 1 1 3 1     0    0 1.73 4.29 .NE.. 11.2 10.7 83.3 16.6 9.0 -25.3 8.9 -24.2 8.6 -22.1 9.0 -24.1
2026-04-16T03:24:31.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:24:31.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:24:31.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.058115
2026-04-16T03:24:31.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:24:31.277 [DEBUG] [Thread-30679] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:24:31.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:24:31.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:24:31.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:24:31.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:24:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:24:09', tmtdew=1.70666, humidity=89.0052, cloud=0.0, wind=15.5102, temperature=8.61617, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:23:41.136', atlas_cloud=1, atlas_rain=1, zp_data=[4.07675, 3.33225, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3840000000000003, nan, nan, nan, nan, nan, nan, nan, 2.704249999999999, nan, 1.598749999999999, 0.10925000000000118, -0.08774999999999977, 0.022999999999999687, 0.15249999999999986, 0.19374999999999964, 0.17849999999999966, 0.16199999999999903, 0.17100000000000115, 0.06850000000000023, -0.09699999999999953, -0.10675000000000168], zp_timestamp='2026-04-16T01:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:24:31.454 [DEBUG] [Thread-30682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:24:31.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:24:31.533 [DEBUG] [Thread-30683] [transport.py] [_log()] starting thread (client mode): 0xee9c3040
2026-04-16T03:24:31.533 [DEBUG] [Thread-30683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:24:31.547 [DEBUG] [Thread-30683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:24:31.547 [INFO] [Thread-30683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:24:31.555 [DEBUG] [Thread-30683] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:24:31.555 [DEBUG] [Thread-30683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:24:31.555 [DEBUG] [Thread-30683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:24:31.555 [DEBUG] [Thread-30683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:24:31.555 [DEBUG] [Thread-30683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:24:31.555 [DEBUG] [Thread-30683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:24:31.555 [DEBUG] [Thread-30683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:24:31.555 [DEBUG] [Thread-30683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:24:31.555 [DEBUG] [Thread-30683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:24:31.556 [DEBUG] [Thread-30683] [transport.py] [_log()] client lang: <none>
2026-04-16T03:24:31.556 [DEBUG] [Thread-30683] [transport.py] [_log()] server lang: <none>
2026-04-16T03:24:31.556 [DEBUG] [Thread-30683] [transport.py] [_log()] kex follows: False
2026-04-16T03:24:31.556 [DEBUG] [Thread-30683] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:24:31.556 [DEBUG] [Thread-30683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:24:31.556 [DEBUG] [Thread-30683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:24:31.556 [DEBUG] [Thread-30683] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:24:31.556 [DEBUG] [Thread-30683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:24:31.556 [DEBUG] [Thread-30683] [transport.py] [_log()] Compression: none
2026-04-16T03:24:31.556 [DEBUG] [Thread-30683] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:24:31.612 [DEBUG] [Thread-30683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:24:31.613 [DEBUG] [Thread-30683] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:24:31.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:24:31.613 [DEBUG] [Thread-30683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:24:31.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:24:31.669 [DEBUG] [Thread-30683] [transport.py] [_log()] userauth is OK
2026-04-16T03:24:31.669 [DEBUG] [Thread-30683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:24:31.669 [DEBUG] [Thread-30683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:24:31.669 [DEBUG] [Thread-30683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:24:31.670 [DEBUG] [Thread-30683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:24:31.695 [INFO] [Thread-30683] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:24:31.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:24:31.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:24:32.535 [DEBUG] [Thread-30683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:24:32.536 [DEBUG] [Thread-30683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:24:32.583 [DEBUG] [Thread-30683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:24:32.583 [DEBUG] [Thread-30683] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:24:32.592 [DEBUG] [Thread-30683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:24:32.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:24:32.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')
2026-04-16T03:24:32.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
2026-04-16T03:24:32.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:24:32.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:24:32.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:24:32.627 [DEBUG] [Thread-30683] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:24:46.491 [DEBUG] [Thread-30685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:25:01.520 [DEBUG] [Thread-30686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:25:02.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:25:02.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:25:02.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
2026-04-16T03:25:02.832 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:25:02.833 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:25:03.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 24, 45), 1.20952, 92.0436, 0.0, 16.2677, 8.39826, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:25:03.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:24:45
2026-04-16T03:25:04.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:25:04.762 [DEBUG] [Thread-30687] [transport.py] [_log()] starting thread (client mode): 0xee9c3b50
2026-04-16T03:25:04.763 [DEBUG] [Thread-30687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:25:04.783 [DEBUG] [Thread-30687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:25:04.783 [INFO] [Thread-30687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:25:04.786 [DEBUG] [Thread-30687] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:25:04.786 [DEBUG] [Thread-30687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:25:04.786 [DEBUG] [Thread-30687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:25:04.786 [DEBUG] [Thread-30687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:25:04.786 [DEBUG] [Thread-30687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:25:04.786 [DEBUG] [Thread-30687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:25:04.786 [DEBUG] [Thread-30687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:25:04.787 [DEBUG] [Thread-30687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:25:04.787 [DEBUG] [Thread-30687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:25:04.787 [DEBUG] [Thread-30687] [transport.py] [_log()] client lang: <none>
2026-04-16T03:25:04.787 [DEBUG] [Thread-30687] [transport.py] [_log()] server lang: <none>
2026-04-16T03:25:04.787 [DEBUG] [Thread-30687] [transport.py] [_log()] kex follows: False
2026-04-16T03:25:04.787 [DEBUG] [Thread-30687] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:25:04.787 [DEBUG] [Thread-30687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:25:04.787 [DEBUG] [Thread-30687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:25:04.787 [DEBUG] [Thread-30687] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:25:04.787 [DEBUG] [Thread-30687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:25:04.788 [DEBUG] [Thread-30687] [transport.py] [_log()] Compression: none
2026-04-16T03:25:04.788 [DEBUG] [Thread-30687] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:25:04.804 [DEBUG] [Thread-30687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:25:04.805 [DEBUG] [Thread-30687] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:25:04.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:25:04.805 [DEBUG] [Thread-30687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:25:04.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:25:04.806 [DEBUG] [Thread-30687] [transport.py] [_log()] userauth is OK
2026-04-16T03:25:04.807 [DEBUG] [Thread-30687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:25:04.807 [DEBUG] [Thread-30687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:25:04.807 [DEBUG] [Thread-30687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:25:04.807 [DEBUG] [Thread-30687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:25:04.826 [INFO] [Thread-30687] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:25:04.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:25:10.603 [DEBUG] [Thread-30687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:25:10.603 [DEBUG] [Thread-30687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:25:10.604 [DEBUG] [Thread-30687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:25:10.644 [DEBUG] [Thread-30687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:25:10.644 [DEBUG] [Thread-30687] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:25:10.648 [DEBUG] [Thread-30687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:25:10.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:25:10.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:25:10.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:25:10.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:25:10.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:25:10.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:25:10.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:25:10.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:25:10.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:25:10.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.058462 -999.00   +8.70  11.31     89   +7.10 1 1 1 3 1     0    0 1.67 3.34 .NE.. 8.0 11.3 55.6 15.8 9.0 -25.4 8.8 -24.2 8.7 -22.0 8.9 -24.1
2026-04-16T03:25:10.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:25:10.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:25:10.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.058462
2026-04-16T03:25:10.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:25:10.670 [DEBUG] [Thread-30687] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:25:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:25:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:25:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:25:10.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:25:10.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:24:45', tmtdew=1.20952, humidity=92.0436, cloud=0.0, wind=16.2677, temperature=8.39826, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:24:11.117', atlas_cloud=1, atlas_rain=1, zp_data=[4.07675, 3.33225, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3840000000000003, nan, nan, nan, nan, nan, nan, nan, 2.704249999999999, nan, 1.598749999999999, 0.10925000000000118, -0.08774999999999977, 0.022999999999999687, 0.15249999999999986, 0.19374999999999964, 0.17849999999999966, 0.16199999999999903, 0.17100000000000115, 0.06850000000000023, -0.09699999999999953, -0.10675000000000168], zp_timestamp='2026-04-16T01:21:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:25:10.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:25:10.916 [DEBUG] [Thread-30690] [transport.py] [_log()] starting thread (client mode): 0xee9c3610
2026-04-16T03:25:10.916 [DEBUG] [Thread-30690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:25:10.930 [DEBUG] [Thread-30690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:25:10.931 [INFO] [Thread-30690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:25:10.938 [DEBUG] [Thread-30690] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:25:10.938 [DEBUG] [Thread-30690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:25:10.938 [DEBUG] [Thread-30690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:25:10.938 [DEBUG] [Thread-30690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:25:10.938 [DEBUG] [Thread-30690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:25:10.938 [DEBUG] [Thread-30690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:25:10.938 [DEBUG] [Thread-30690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:25:10.938 [DEBUG] [Thread-30690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:25:10.938 [DEBUG] [Thread-30690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:25:10.939 [DEBUG] [Thread-30690] [transport.py] [_log()] client lang: <none>
2026-04-16T03:25:10.939 [DEBUG] [Thread-30690] [transport.py] [_log()] server lang: <none>
2026-04-16T03:25:10.939 [DEBUG] [Thread-30690] [transport.py] [_log()] kex follows: False
2026-04-16T03:25:10.939 [DEBUG] [Thread-30690] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:25:10.939 [DEBUG] [Thread-30690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:25:10.939 [DEBUG] [Thread-30690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:25:10.939 [DEBUG] [Thread-30690] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:25:10.939 [DEBUG] [Thread-30690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:25:10.939 [DEBUG] [Thread-30690] [transport.py] [_log()] Compression: none
2026-04-16T03:25:10.939 [DEBUG] [Thread-30690] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:25:10.996 [DEBUG] [Thread-30690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:25:10.997 [DEBUG] [Thread-30690] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:25:10.997 [DEBUG] [Thread-30690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:25:10.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:25:10.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:25:11.053 [DEBUG] [Thread-30690] [transport.py] [_log()] userauth is OK
2026-04-16T03:25:11.054 [DEBUG] [Thread-30690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:25:11.054 [DEBUG] [Thread-30690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:25:11.054 [DEBUG] [Thread-30690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:25:11.054 [DEBUG] [Thread-30690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:25:11.081 [INFO] [Thread-30690] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:25:11.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:25:11.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:25:11.920 [DEBUG] [Thread-30690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:25:11.920 [DEBUG] [Thread-30690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:25:11.968 [DEBUG] [Thread-30690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:25:11.968 [DEBUG] [Thread-30690] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:25:11.977 [DEBUG] [Thread-30690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:25:11.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:25:11.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')
2026-04-16T03:25:11.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
2026-04-16T03:25:12.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:25:12.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:25:12.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:25:12.011 [DEBUG] [Thread-30690] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:25:13.362 [DEBUG] [Thread-30692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:25:16.551 [DEBUG] [Thread-30693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:25:31.595 [DEBUG] [Thread-30694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:25:42.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:25:42.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:25:42.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
2026-04-16T03:25:43.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 25, 20), 1.65197, 89.0385, 0.0, 13.8337, 8.63261, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:25:43.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:25:20
2026-04-16T03:25:43.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:25:44.131 [DEBUG] [Thread-30695] [transport.py] [_log()] starting thread (client mode): 0xee990b50
2026-04-16T03:25:44.131 [DEBUG] [Thread-30695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:25:44.151 [DEBUG] [Thread-30695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:25:44.151 [INFO] [Thread-30695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:25:44.154 [DEBUG] [Thread-30695] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:25:44.154 [DEBUG] [Thread-30695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:25:44.154 [DEBUG] [Thread-30695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:25:44.154 [DEBUG] [Thread-30695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:25:44.154 [DEBUG] [Thread-30695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:25:44.155 [DEBUG] [Thread-30695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:25:44.155 [DEBUG] [Thread-30695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:25:44.155 [DEBUG] [Thread-30695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:25:44.155 [DEBUG] [Thread-30695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:25:44.155 [DEBUG] [Thread-30695] [transport.py] [_log()] client lang: <none>
2026-04-16T03:25:44.155 [DEBUG] [Thread-30695] [transport.py] [_log()] server lang: <none>
2026-04-16T03:25:44.155 [DEBUG] [Thread-30695] [transport.py] [_log()] kex follows: False
2026-04-16T03:25:44.155 [DEBUG] [Thread-30695] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:25:44.155 [DEBUG] [Thread-30695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:25:44.155 [DEBUG] [Thread-30695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:25:44.155 [DEBUG] [Thread-30695] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:25:44.155 [DEBUG] [Thread-30695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:25:44.156 [DEBUG] [Thread-30695] [transport.py] [_log()] Compression: none
2026-04-16T03:25:44.156 [DEBUG] [Thread-30695] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:25:44.173 [DEBUG] [Thread-30695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:25:44.174 [DEBUG] [Thread-30695] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:25:44.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:25:44.174 [DEBUG] [Thread-30695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:25:44.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:25:44.175 [DEBUG] [Thread-30695] [transport.py] [_log()] userauth is OK
2026-04-16T03:25:44.175 [DEBUG] [Thread-30695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:25:44.176 [DEBUG] [Thread-30695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:25:44.176 [DEBUG] [Thread-30695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:25:44.176 [DEBUG] [Thread-30695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:25:44.200 [INFO] [Thread-30695] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:25:44.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:25:45.016 [DEBUG] [Thread-30695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:25:45.016 [DEBUG] [Thread-30695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:25:45.016 [DEBUG] [Thread-30695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:25:45.056 [DEBUG] [Thread-30695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:25:45.057 [DEBUG] [Thread-30695] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:25:45.059 [DEBUG] [Thread-30695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:25:45.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:25:45.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:25:45.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:25:45.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:25:45.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:25:45.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:25:45.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:25:45.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:25:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:25:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.058809 -999.00   +8.70   9.82     89   +7.10 1 2 1 3 1     0    0 1.67 3.08 .NE.. 11.9 9.8 94.7 15.1 9.1 -25.5 8.8 -24.1 8.6 -21.9 8.9 -24.2
2026-04-16T03:25:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:25:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:25:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.058809
2026-04-16T03:25:45.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:25:45.080 [DEBUG] [Thread-30695] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:25:45.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:25:45.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:25:45.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:25:45.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-04-16T03:25:45.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:25:20', tmtdew=1.65197, humidity=89.0385, cloud=0.0, wind=13.8337, temperature=8.63261, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:24:41.098', atlas_cloud=2, atlas_rain=1, zp_data=[3.5737499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.2430000000000003, nan, nan, nan, 0.895999999999999, nan, 2.4784999999999995, 2.833499999999999, 2.5627499999999985, nan, nan, 0.12025000000000219, -0.06974999999999909, 0.023999999999999133, 0.12049999999999983, 0.2607499999999998, 0.18350000000000044, 0.09350000000000058, 0.09600000000000009, 0.08200000000000074, -0.08499999999999908, -0.08624999999999972], zp_timestamp='2026-04-16T01:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:25:45.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:25:45.336 [DEBUG] [Thread-30698] [transport.py] [_log()] starting thread (client mode): 0xee992b00
2026-04-16T03:25:45.336 [DEBUG] [Thread-30698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:25:45.350 [DEBUG] [Thread-30698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:25:45.350 [INFO] [Thread-30698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:25:45.357 [DEBUG] [Thread-30698] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:25:45.357 [DEBUG] [Thread-30698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:25:45.358 [DEBUG] [Thread-30698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:25:45.358 [DEBUG] [Thread-30698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:25:45.358 [DEBUG] [Thread-30698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:25:45.358 [DEBUG] [Thread-30698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:25:45.358 [DEBUG] [Thread-30698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:25:45.358 [DEBUG] [Thread-30698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:25:45.358 [DEBUG] [Thread-30698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:25:45.358 [DEBUG] [Thread-30698] [transport.py] [_log()] client lang: <none>
2026-04-16T03:25:45.358 [DEBUG] [Thread-30698] [transport.py] [_log()] server lang: <none>
2026-04-16T03:25:45.358 [DEBUG] [Thread-30698] [transport.py] [_log()] kex follows: False
2026-04-16T03:25:45.358 [DEBUG] [Thread-30698] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:25:45.358 [DEBUG] [Thread-30698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:25:45.359 [DEBUG] [Thread-30698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:25:45.359 [DEBUG] [Thread-30698] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:25:45.359 [DEBUG] [Thread-30698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:25:45.359 [DEBUG] [Thread-30698] [transport.py] [_log()] Compression: none
2026-04-16T03:25:45.359 [DEBUG] [Thread-30698] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:25:45.416 [DEBUG] [Thread-30698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:25:45.417 [DEBUG] [Thread-30698] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:25:45.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:25:45.417 [DEBUG] [Thread-30698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:25:45.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:25:45.476 [DEBUG] [Thread-30698] [transport.py] [_log()] userauth is OK
2026-04-16T03:25:45.476 [DEBUG] [Thread-30698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:25:45.476 [DEBUG] [Thread-30698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:25:45.476 [DEBUG] [Thread-30698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:25:45.476 [DEBUG] [Thread-30698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:25:45.504 [INFO] [Thread-30698] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:25:45.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:25:45.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:25:46.319 [DEBUG] [Thread-30698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:25:46.320 [DEBUG] [Thread-30698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:25:46.368 [DEBUG] [Thread-30698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:25:46.369 [DEBUG] [Thread-30698] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:25:46.377 [DEBUG] [Thread-30698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:25:46.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:25:46.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')
2026-04-16T03:25:46.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
2026-04-16T03:25:46.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:25:46.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:25:46.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:25:46.409 [DEBUG] [Thread-30698] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:25:46.628 [DEBUG] [Thread-30700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:26:01.676 [DEBUG] [Thread-30701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:26:03.035 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:26:03.036 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:26:13.526 [DEBUG] [Thread-30702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:26:16.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:26:16.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:26:16.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
2026-04-16T03:26:16.708 [DEBUG] [Thread-30703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:26:17.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 25, 55), 1.70181, 89.0386, 0.0, 14.0454, 8.61608, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:26:17.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:25:55
2026-04-16T03:26:18.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:26:18.552 [DEBUG] [Thread-30704] [transport.py] [_log()] starting thread (client mode): 0xee9eb160
2026-04-16T03:26:18.552 [DEBUG] [Thread-30704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:26:18.574 [DEBUG] [Thread-30704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:26:18.574 [INFO] [Thread-30704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:26:18.578 [DEBUG] [Thread-30704] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:26:18.578 [DEBUG] [Thread-30704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:26:18.578 [DEBUG] [Thread-30704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:26:18.578 [DEBUG] [Thread-30704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:26:18.578 [DEBUG] [Thread-30704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:26:18.578 [DEBUG] [Thread-30704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:26:18.578 [DEBUG] [Thread-30704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:26:18.578 [DEBUG] [Thread-30704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:26:18.578 [DEBUG] [Thread-30704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:26:18.578 [DEBUG] [Thread-30704] [transport.py] [_log()] client lang: <none>
2026-04-16T03:26:18.578 [DEBUG] [Thread-30704] [transport.py] [_log()] server lang: <none>
2026-04-16T03:26:18.579 [DEBUG] [Thread-30704] [transport.py] [_log()] kex follows: False
2026-04-16T03:26:18.579 [DEBUG] [Thread-30704] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:26:18.579 [DEBUG] [Thread-30704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:26:18.579 [DEBUG] [Thread-30704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:26:18.579 [DEBUG] [Thread-30704] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:26:18.579 [DEBUG] [Thread-30704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:26:18.579 [DEBUG] [Thread-30704] [transport.py] [_log()] Compression: none
2026-04-16T03:26:18.579 [DEBUG] [Thread-30704] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:26:18.598 [DEBUG] [Thread-30704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:26:18.598 [DEBUG] [Thread-30704] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:26:18.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:26:18.599 [DEBUG] [Thread-30704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:26:18.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:26:18.600 [DEBUG] [Thread-30704] [transport.py] [_log()] userauth is OK
2026-04-16T03:26:18.600 [DEBUG] [Thread-30704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:26:18.600 [DEBUG] [Thread-30704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:26:18.600 [DEBUG] [Thread-30704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:26:18.600 [DEBUG] [Thread-30704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:26:18.623 [INFO] [Thread-30704] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:26:18.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:26:19.415 [DEBUG] [Thread-30704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:26:19.416 [DEBUG] [Thread-30704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:26:19.416 [DEBUG] [Thread-30704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:26:19.456 [DEBUG] [Thread-30704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:26:19.456 [DEBUG] [Thread-30704] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:26:19.459 [DEBUG] [Thread-30704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:26:19.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:26:19.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:26:19.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:26:19.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:26:19.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:26:19.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:26:19.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:26:19.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:26:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:26:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.059503 -999.00   +8.70   7.78     89   +7.10 1 1 1 3 1     0    0 1.67 2.67 .NE.. 7.5 7.8 70.3 14.9 9.0 -25.3 8.9 -24.2 8.6 -22.0 8.9 -24.1
2026-04-16T03:26:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:26:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:26:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.059503
2026-04-16T03:26:19.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:26:19.485 [DEBUG] [Thread-30704] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:26:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:26:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:26:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:26:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:26:19.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:25:55', tmtdew=1.70181, humidity=89.0386, cloud=0.0, wind=14.0454, temperature=8.61608, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:25:41.059', atlas_cloud=1, atlas_rain=1, zp_data=[3.5737499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.2430000000000003, nan, nan, nan, 0.895999999999999, nan, 2.4784999999999995, 2.833499999999999, 2.5627499999999985, nan, nan, 0.12025000000000219, -0.06974999999999909, 0.023999999999999133, 0.12049999999999983, 0.2607499999999998, 0.18350000000000044, 0.09350000000000058, 0.09600000000000009, 0.08200000000000074, -0.08499999999999908, -0.08624999999999972], zp_timestamp='2026-04-16T01:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:26:19.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:26:19.744 [DEBUG] [Thread-30707] [transport.py] [_log()] starting thread (client mode): 0xee9eb9d0
2026-04-16T03:26:19.744 [DEBUG] [Thread-30707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:26:19.759 [DEBUG] [Thread-30707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:26:19.760 [INFO] [Thread-30707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:26:19.767 [DEBUG] [Thread-30707] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:26:19.767 [DEBUG] [Thread-30707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:26:19.767 [DEBUG] [Thread-30707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:26:19.767 [DEBUG] [Thread-30707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:26:19.767 [DEBUG] [Thread-30707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:26:19.767 [DEBUG] [Thread-30707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:26:19.768 [DEBUG] [Thread-30707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:26:19.768 [DEBUG] [Thread-30707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:26:19.768 [DEBUG] [Thread-30707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:26:19.768 [DEBUG] [Thread-30707] [transport.py] [_log()] client lang: <none>
2026-04-16T03:26:19.768 [DEBUG] [Thread-30707] [transport.py] [_log()] server lang: <none>
2026-04-16T03:26:19.768 [DEBUG] [Thread-30707] [transport.py] [_log()] kex follows: False
2026-04-16T03:26:19.768 [DEBUG] [Thread-30707] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:26:19.768 [DEBUG] [Thread-30707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:26:19.768 [DEBUG] [Thread-30707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:26:19.768 [DEBUG] [Thread-30707] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:26:19.768 [DEBUG] [Thread-30707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:26:19.769 [DEBUG] [Thread-30707] [transport.py] [_log()] Compression: none
2026-04-16T03:26:19.769 [DEBUG] [Thread-30707] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:26:19.824 [DEBUG] [Thread-30707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:26:19.825 [DEBUG] [Thread-30707] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:26:19.825 [DEBUG] [Thread-30707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:26:19.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:26:19.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:26:19.881 [DEBUG] [Thread-30707] [transport.py] [_log()] userauth is OK
2026-04-16T03:26:19.881 [DEBUG] [Thread-30707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:26:19.882 [DEBUG] [Thread-30707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:26:19.882 [DEBUG] [Thread-30707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:26:19.882 [DEBUG] [Thread-30707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:26:19.907 [INFO] [Thread-30707] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:26:19.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:26:19.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:26:20.732 [DEBUG] [Thread-30707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:26:20.733 [DEBUG] [Thread-30707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:26:20.780 [DEBUG] [Thread-30707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:26:20.780 [DEBUG] [Thread-30707] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:26:20.789 [DEBUG] [Thread-30707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:26:20.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:26:20.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')
2026-04-16T03:26:20.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
2026-04-16T03:26:20.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:26:20.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:26:20.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:26:20.824 [DEBUG] [Thread-30707] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:26:31.738 [DEBUG] [Thread-30709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:26:46.778 [DEBUG] [Thread-30710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:26:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:26:50.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:26:50.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T03:26:52.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 26, 31), 1.69904, 89.0552, 0.0, 14.2042, 8.59949, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:26:52.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:26:31
2026-04-16T03:26:52.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:26:52.980 [DEBUG] [Thread-30711] [transport.py] [_log()] starting thread (client mode): 0xee9544c0
2026-04-16T03:26:52.980 [DEBUG] [Thread-30711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:26:52.999 [DEBUG] [Thread-30711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:26:52.999 [INFO] [Thread-30711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:26:53.002 [DEBUG] [Thread-30711] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:26:53.003 [DEBUG] [Thread-30711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:26:53.003 [DEBUG] [Thread-30711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:26:53.003 [DEBUG] [Thread-30711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:26:53.003 [DEBUG] [Thread-30711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:26:53.003 [DEBUG] [Thread-30711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:26:53.003 [DEBUG] [Thread-30711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:26:53.003 [DEBUG] [Thread-30711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:26:53.003 [DEBUG] [Thread-30711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:26:53.003 [DEBUG] [Thread-30711] [transport.py] [_log()] client lang: <none>
2026-04-16T03:26:53.003 [DEBUG] [Thread-30711] [transport.py] [_log()] server lang: <none>
2026-04-16T03:26:53.003 [DEBUG] [Thread-30711] [transport.py] [_log()] kex follows: False
2026-04-16T03:26:53.003 [DEBUG] [Thread-30711] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:26:53.004 [DEBUG] [Thread-30711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:26:53.004 [DEBUG] [Thread-30711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:26:53.004 [DEBUG] [Thread-30711] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:26:53.004 [DEBUG] [Thread-30711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:26:53.004 [DEBUG] [Thread-30711] [transport.py] [_log()] Compression: none
2026-04-16T03:26:53.004 [DEBUG] [Thread-30711] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:26:53.021 [DEBUG] [Thread-30711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:26:53.021 [DEBUG] [Thread-30711] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:26:53.021 [DEBUG] [Thread-30711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:26:53.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:26:53.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:26:53.023 [DEBUG] [Thread-30711] [transport.py] [_log()] userauth is OK
2026-04-16T03:26:53.023 [DEBUG] [Thread-30711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:26:53.023 [DEBUG] [Thread-30711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:26:53.023 [DEBUG] [Thread-30711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:26:53.023 [DEBUG] [Thread-30711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:26:53.041 [INFO] [Thread-30711] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:26:53.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:26:53.834 [DEBUG] [Thread-30711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:26:53.834 [DEBUG] [Thread-30711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:26:53.834 [DEBUG] [Thread-30711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:26:53.875 [DEBUG] [Thread-30711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:26:53.875 [DEBUG] [Thread-30711] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:26:53.878 [DEBUG] [Thread-30711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:26:53.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:26:53.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:26:53.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:26:53.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:26:53.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:26:53.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:26:53.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:26:53.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:26:53.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:26:53.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.059851 -999.00   +8.70  11.04     90   +7.10 1 1 1 3 1     0    0 1.63 2.35 .NE.. 11.7 11.0 104.7 13.8 9.1 -25.6 8.8 -24.3 8.7 -22.1 8.9 -24.2
2026-04-16T03:26:53.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:26:53.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:26:53.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.059851
2026-04-16T03:26:53.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:26:53.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:26:53.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:26:53.903 [DEBUG] [Thread-30711] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:26:53.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:26:53.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:26:53.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:26:31', tmtdew=1.69904, humidity=89.0552, cloud=0.0, wind=14.2042, temperature=8.59949, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:26:11.126', atlas_cloud=1, atlas_rain=1, zp_data=[3.5737499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.2430000000000003, nan, nan, nan, 0.895999999999999, nan, 2.4784999999999995, 2.833499999999999, 2.5627499999999985, nan, nan, 0.12025000000000219, -0.06974999999999909, 0.023999999999999133, 0.12049999999999983, 0.2607499999999998, 0.18350000000000044, 0.09350000000000058, 0.09600000000000009, 0.08200000000000074, -0.08499999999999908, -0.08624999999999972], zp_timestamp='2026-04-16T01:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:26:54.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:26:54.159 [DEBUG] [Thread-30714] [transport.py] [_log()] starting thread (client mode): 0xee933b50
2026-04-16T03:26:54.159 [DEBUG] [Thread-30714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:26:54.174 [DEBUG] [Thread-30714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:26:54.174 [INFO] [Thread-30714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:26:54.181 [DEBUG] [Thread-30714] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:26:54.181 [DEBUG] [Thread-30714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:26:54.181 [DEBUG] [Thread-30714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:26:54.181 [DEBUG] [Thread-30714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:26:54.181 [DEBUG] [Thread-30714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:26:54.182 [DEBUG] [Thread-30714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:26:54.182 [DEBUG] [Thread-30714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:26:54.182 [DEBUG] [Thread-30714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:26:54.182 [DEBUG] [Thread-30714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:26:54.182 [DEBUG] [Thread-30714] [transport.py] [_log()] client lang: <none>
2026-04-16T03:26:54.182 [DEBUG] [Thread-30714] [transport.py] [_log()] server lang: <none>
2026-04-16T03:26:54.182 [DEBUG] [Thread-30714] [transport.py] [_log()] kex follows: False
2026-04-16T03:26:54.182 [DEBUG] [Thread-30714] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:26:54.182 [DEBUG] [Thread-30714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:26:54.182 [DEBUG] [Thread-30714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:26:54.182 [DEBUG] [Thread-30714] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:26:54.183 [DEBUG] [Thread-30714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:26:54.183 [DEBUG] [Thread-30714] [transport.py] [_log()] Compression: none
2026-04-16T03:26:54.183 [DEBUG] [Thread-30714] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:26:54.236 [DEBUG] [Thread-30714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:26:54.236 [DEBUG] [Thread-30714] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:26:54.237 [DEBUG] [Thread-30714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:26:54.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:26:54.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:26:54.293 [DEBUG] [Thread-30714] [transport.py] [_log()] userauth is OK
2026-04-16T03:26:54.293 [DEBUG] [Thread-30714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:26:54.294 [DEBUG] [Thread-30714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:26:54.294 [DEBUG] [Thread-30714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:26:54.294 [DEBUG] [Thread-30714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:26:54.319 [INFO] [Thread-30714] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:26:54.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:26:54.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:26:55.118 [DEBUG] [Thread-30714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:26:55.119 [DEBUG] [Thread-30714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:26:55.166 [DEBUG] [Thread-30714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:26:55.166 [DEBUG] [Thread-30714] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:26:55.175 [DEBUG] [Thread-30714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:26:55.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:26:55.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')
2026-04-16T03:26:55.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
2026-04-16T03:26:55.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:26:55.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:26:55.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:26:55.210 [DEBUG] [Thread-30714] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:27:01.809 [DEBUG] [Thread-30716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:27:03.241 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:27:03.242 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:27:13.676 [DEBUG] [Thread-30717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:27:16.853 [DEBUG] [Thread-30718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:27:25.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:27:25.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:27: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
2026-04-16T03:27:26.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 27, 6), 1.70399, 89.0221, 0.0, 13.8514, 8.56635, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:27:26.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:27:06
2026-04-16T03:27:26.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:27:27.374 [DEBUG] [Thread-30719] [transport.py] [_log()] starting thread (client mode): 0xee9ead10
2026-04-16T03:27:27.374 [DEBUG] [Thread-30719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:27:27.393 [DEBUG] [Thread-30719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:27:27.394 [INFO] [Thread-30719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:27:27.397 [DEBUG] [Thread-30719] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:27:27.397 [DEBUG] [Thread-30719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:27:27.397 [DEBUG] [Thread-30719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:27:27.397 [DEBUG] [Thread-30719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:27:27.397 [DEBUG] [Thread-30719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:27:27.397 [DEBUG] [Thread-30719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:27:27.397 [DEBUG] [Thread-30719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:27:27.397 [DEBUG] [Thread-30719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:27:27.397 [DEBUG] [Thread-30719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:27:27.398 [DEBUG] [Thread-30719] [transport.py] [_log()] client lang: <none>
2026-04-16T03:27:27.398 [DEBUG] [Thread-30719] [transport.py] [_log()] server lang: <none>
2026-04-16T03:27:27.398 [DEBUG] [Thread-30719] [transport.py] [_log()] kex follows: False
2026-04-16T03:27:27.398 [DEBUG] [Thread-30719] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:27:27.398 [DEBUG] [Thread-30719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:27:27.398 [DEBUG] [Thread-30719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:27:27.398 [DEBUG] [Thread-30719] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:27:27.398 [DEBUG] [Thread-30719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:27:27.398 [DEBUG] [Thread-30719] [transport.py] [_log()] Compression: none
2026-04-16T03:27:27.398 [DEBUG] [Thread-30719] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:27:27.415 [DEBUG] [Thread-30719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:27:27.416 [DEBUG] [Thread-30719] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:27:27.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:27:27.417 [DEBUG] [Thread-30719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:27:27.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:27:27.418 [DEBUG] [Thread-30719] [transport.py] [_log()] userauth is OK
2026-04-16T03:27:27.418 [DEBUG] [Thread-30719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:27:27.418 [DEBUG] [Thread-30719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:27:27.418 [DEBUG] [Thread-30719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:27:27.418 [DEBUG] [Thread-30719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:27:27.442 [INFO] [Thread-30719] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:27:27.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:27:28.219 [DEBUG] [Thread-30719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:27:28.219 [DEBUG] [Thread-30719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:27:28.220 [DEBUG] [Thread-30719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:27:28.260 [DEBUG] [Thread-30719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:27:28.260 [DEBUG] [Thread-30719] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:27:28.263 [DEBUG] [Thread-30719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:27:28.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:27:28.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:27:28.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:27:28.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:27:28.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:27:28.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:27:28.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:27:28.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:27:28.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:27:28.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.060198 -999.00   +8.70  11.57     90   +7.10 1 1 1 3 1     0    0 1.66 2.09 .NE.. 12.0 11.6 88.9 16.3 9.0 -25.5 8.9 -24.4 8.6 -22.0 8.9 -24.1
2026-04-16T03:27:28.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:27:28.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:27:28.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.060198
2026-04-16T03:27:28.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:27:28.289 [DEBUG] [Thread-30719] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:27:28.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:27:28.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:27:28.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:27:28.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:27:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:27:06', tmtdew=1.70399, humidity=89.0221, cloud=0.0, wind=13.8514, temperature=8.56635, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:26:41.107', atlas_cloud=1, atlas_rain=1, zp_data=[3.5737499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.2430000000000003, nan, nan, nan, 0.895999999999999, nan, 2.4784999999999995, 2.833499999999999, 2.5627499999999985, nan, nan, 0.12025000000000219, -0.06974999999999909, 0.023999999999999133, 0.12049999999999983, 0.2607499999999998, 0.18350000000000044, 0.09350000000000058, 0.09600000000000009, 0.08200000000000074, -0.08499999999999908, -0.08624999999999972], zp_timestamp='2026-04-16T01:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:27:28.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:27:28.541 [DEBUG] [Thread-30722] [transport.py] [_log()] starting thread (client mode): 0xf13c95d0
2026-04-16T03:27:28.541 [DEBUG] [Thread-30722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:27:28.560 [DEBUG] [Thread-30722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:27:28.560 [INFO] [Thread-30722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:27:28.567 [DEBUG] [Thread-30722] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:27:28.567 [DEBUG] [Thread-30722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:27:28.567 [DEBUG] [Thread-30722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:27:28.567 [DEBUG] [Thread-30722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:27:28.568 [DEBUG] [Thread-30722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:27:28.568 [DEBUG] [Thread-30722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:27:28.568 [DEBUG] [Thread-30722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:27:28.568 [DEBUG] [Thread-30722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:27:28.568 [DEBUG] [Thread-30722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:27:28.568 [DEBUG] [Thread-30722] [transport.py] [_log()] client lang: <none>
2026-04-16T03:27:28.568 [DEBUG] [Thread-30722] [transport.py] [_log()] server lang: <none>
2026-04-16T03:27:28.568 [DEBUG] [Thread-30722] [transport.py] [_log()] kex follows: False
2026-04-16T03:27:28.568 [DEBUG] [Thread-30722] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:27:28.568 [DEBUG] [Thread-30722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:27:28.568 [DEBUG] [Thread-30722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:27:28.569 [DEBUG] [Thread-30722] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:27:28.569 [DEBUG] [Thread-30722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:27:28.569 [DEBUG] [Thread-30722] [transport.py] [_log()] Compression: none
2026-04-16T03:27:28.569 [DEBUG] [Thread-30722] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:27:28.625 [DEBUG] [Thread-30722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:27:28.626 [DEBUG] [Thread-30722] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:27:28.626 [DEBUG] [Thread-30722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:27:28.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:27:28.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:27:28.681 [DEBUG] [Thread-30722] [transport.py] [_log()] userauth is OK
2026-04-16T03:27:28.682 [DEBUG] [Thread-30722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:27:28.682 [DEBUG] [Thread-30722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:27:28.682 [DEBUG] [Thread-30722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:27:28.682 [DEBUG] [Thread-30722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:27:28.707 [INFO] [Thread-30722] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:27:28.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:27:28.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:27:29.580 [DEBUG] [Thread-30722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:27:29.580 [DEBUG] [Thread-30722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:27:29.628 [DEBUG] [Thread-30722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:27:29.628 [DEBUG] [Thread-30722] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:27:29.636 [DEBUG] [Thread-30722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:27:29.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:27:29.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')
2026-04-16T03:27:29.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
2026-04-16T03:27:29.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:27:29.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:27:29.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:27:29.671 [DEBUG] [Thread-30722] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:27:31.885 [DEBUG] [Thread-30724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:27:46.928 [DEBUG] [Thread-30725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:27:59.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:27:59.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:27:59.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
2026-04-16T03:28:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 27, 42), 1.18782, 92.1769, 0.0, 17.0438, 8.33225, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:28:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:27:42
2026-04-16T03:28:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:28:01.757 [DEBUG] [Thread-30726] [transport.py] [_log()] starting thread (client mode): 0xf13669e0
2026-04-16T03:28:01.758 [DEBUG] [Thread-30726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:28:01.777 [DEBUG] [Thread-30726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:28:01.777 [INFO] [Thread-30726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:28:01.780 [DEBUG] [Thread-30726] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:28:01.780 [DEBUG] [Thread-30726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:28:01.780 [DEBUG] [Thread-30726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:28:01.780 [DEBUG] [Thread-30726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:28:01.780 [DEBUG] [Thread-30726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:28:01.780 [DEBUG] [Thread-30726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:28:01.781 [DEBUG] [Thread-30726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:28:01.781 [DEBUG] [Thread-30726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:28:01.781 [DEBUG] [Thread-30726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:28:01.781 [DEBUG] [Thread-30726] [transport.py] [_log()] client lang: <none>
2026-04-16T03:28:01.781 [DEBUG] [Thread-30726] [transport.py] [_log()] server lang: <none>
2026-04-16T03:28:01.781 [DEBUG] [Thread-30726] [transport.py] [_log()] kex follows: False
2026-04-16T03:28:01.781 [DEBUG] [Thread-30726] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:28:01.781 [DEBUG] [Thread-30726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:28:01.781 [DEBUG] [Thread-30726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:28:01.781 [DEBUG] [Thread-30726] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:28:01.782 [DEBUG] [Thread-30726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:28:01.782 [DEBUG] [Thread-30726] [transport.py] [_log()] Compression: none
2026-04-16T03:28:01.782 [DEBUG] [Thread-30726] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:28:01.798 [DEBUG] [Thread-30726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:28:01.799 [DEBUG] [Thread-30726] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:28:01.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:28:01.799 [DEBUG] [Thread-30726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:28:01.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:28:01.800 [DEBUG] [Thread-30726] [transport.py] [_log()] userauth is OK
2026-04-16T03:28:01.801 [DEBUG] [Thread-30726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:28:01.801 [DEBUG] [Thread-30726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:28:01.801 [DEBUG] [Thread-30726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:28:01.801 [DEBUG] [Thread-30726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:28:01.827 [INFO] [Thread-30726] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:28:01.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:28:01.958 [DEBUG] [Thread-30728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:28:02.561 [DEBUG] [Thread-30726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:28:02.562 [DEBUG] [Thread-30726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:28:02.562 [DEBUG] [Thread-30726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:28:02.602 [DEBUG] [Thread-30726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:28:02.602 [DEBUG] [Thread-30726] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:28:02.605 [DEBUG] [Thread-30726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:28:02.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:28:02.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:28:02.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:28:02.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:28:02.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:28:02.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:28:02.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:28:02.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:28:02.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:28:02.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.060545 -999.00   +8.60   9.22     90   +7.10 1 1 1 3 1     0    0 1.63 1.61 .NE.. 11.2 9.2 92.5 15.1 9.0 -25.6 8.9 -24.4 8.6 -22.1 8.9 -24.2
2026-04-16T03:28:02.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:28:02.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:28:02.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.060545
2026-04-16T03:28:02.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:28:02.630 [DEBUG] [Thread-30726] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:28:02.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:28:02.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:28:02.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:28:02.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:28:02.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:27:42', tmtdew=1.18782, humidity=92.1769, cloud=0.0, wind=17.0438, temperature=8.33225, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:27:11.088', atlas_cloud=1, atlas_rain=1, zp_data=[3.5737499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.2430000000000003, nan, nan, nan, 0.895999999999999, nan, 2.4784999999999995, 2.833499999999999, 2.5627499999999985, nan, nan, 0.12025000000000219, -0.06974999999999909, 0.023999999999999133, 0.12049999999999983, 0.2607499999999998, 0.18350000000000044, 0.09350000000000058, 0.09600000000000009, 0.08200000000000074, -0.08499999999999908, -0.08624999999999972], zp_timestamp='2026-04-16T01:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:28:02.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:28:02.887 [DEBUG] [Thread-30730] [transport.py] [_log()] starting thread (client mode): 0xf1364400
2026-04-16T03:28:02.888 [DEBUG] [Thread-30730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:28:02.902 [DEBUG] [Thread-30730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:28:02.902 [INFO] [Thread-30730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:28:02.909 [DEBUG] [Thread-30730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:28:02.909 [DEBUG] [Thread-30730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:28:02.909 [DEBUG] [Thread-30730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:28:02.910 [DEBUG] [Thread-30730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:28:02.910 [DEBUG] [Thread-30730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:28:02.910 [DEBUG] [Thread-30730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:28:02.910 [DEBUG] [Thread-30730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:28:02.910 [DEBUG] [Thread-30730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:28:02.910 [DEBUG] [Thread-30730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:28:02.910 [DEBUG] [Thread-30730] [transport.py] [_log()] client lang: <none>
2026-04-16T03:28:02.910 [DEBUG] [Thread-30730] [transport.py] [_log()] server lang: <none>
2026-04-16T03:28:02.910 [DEBUG] [Thread-30730] [transport.py] [_log()] kex follows: False
2026-04-16T03:28:02.910 [DEBUG] [Thread-30730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:28:02.910 [DEBUG] [Thread-30730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:28:02.911 [DEBUG] [Thread-30730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:28:02.911 [DEBUG] [Thread-30730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:28:02.911 [DEBUG] [Thread-30730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:28:02.911 [DEBUG] [Thread-30730] [transport.py] [_log()] Compression: none
2026-04-16T03:28:02.911 [DEBUG] [Thread-30730] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:28:02.965 [DEBUG] [Thread-30730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:28:02.966 [DEBUG] [Thread-30730] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:28:02.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:28:02.966 [DEBUG] [Thread-30730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:28:02.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:28:03.021 [DEBUG] [Thread-30730] [transport.py] [_log()] userauth is OK
2026-04-16T03:28:03.022 [DEBUG] [Thread-30730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:28:03.022 [DEBUG] [Thread-30730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:28:03.022 [DEBUG] [Thread-30730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:28:03.022 [DEBUG] [Thread-30730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:28:03.047 [INFO] [Thread-30730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:28:03.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:28:03.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:28:03.444 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:28:03.446 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:28:03.942 [DEBUG] [Thread-30730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:28:03.942 [DEBUG] [Thread-30730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:28:03.990 [DEBUG] [Thread-30730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:28:03.990 [DEBUG] [Thread-30730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:28:03.999 [DEBUG] [Thread-30730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:28:04.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:28:04.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')
2026-04-16T03:28:04.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
2026-04-16T03:28:04.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:28:04.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:28:04.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:28:04.034 [DEBUG] [Thread-30730] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:28:13.841 [DEBUG] [Thread-30732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:28:16.988 [DEBUG] [Thread-30733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:28:32.032 [DEBUG] [Thread-30734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:28:34.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:28:34.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:28:34.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
2026-04-16T03:28:35.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 28, 17), 1.59901, 89.5553, 0.0, 13.9572, 8.49957, 1, 1, 0, 2, 0, 0),)
2026-04-16T03:28:35.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:28:17
2026-04-16T03:28:35.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:28:36.106 [DEBUG] [Thread-30735] [transport.py] [_log()] starting thread (client mode): 0xf13e2230
2026-04-16T03:28:36.107 [DEBUG] [Thread-30735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:28:36.127 [DEBUG] [Thread-30735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:28:36.127 [INFO] [Thread-30735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:28:36.130 [DEBUG] [Thread-30735] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:28:36.131 [DEBUG] [Thread-30735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:28:36.131 [DEBUG] [Thread-30735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:28:36.131 [DEBUG] [Thread-30735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:28:36.131 [DEBUG] [Thread-30735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:28:36.131 [DEBUG] [Thread-30735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:28:36.131 [DEBUG] [Thread-30735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:28:36.131 [DEBUG] [Thread-30735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:28:36.131 [DEBUG] [Thread-30735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:28:36.131 [DEBUG] [Thread-30735] [transport.py] [_log()] client lang: <none>
2026-04-16T03:28:36.131 [DEBUG] [Thread-30735] [transport.py] [_log()] server lang: <none>
2026-04-16T03:28:36.132 [DEBUG] [Thread-30735] [transport.py] [_log()] kex follows: False
2026-04-16T03:28:36.132 [DEBUG] [Thread-30735] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:28:36.132 [DEBUG] [Thread-30735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:28:36.132 [DEBUG] [Thread-30735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:28:36.132 [DEBUG] [Thread-30735] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:28:36.132 [DEBUG] [Thread-30735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:28:36.132 [DEBUG] [Thread-30735] [transport.py] [_log()] Compression: none
2026-04-16T03:28:36.132 [DEBUG] [Thread-30735] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:28:36.150 [DEBUG] [Thread-30735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:28:36.150 [DEBUG] [Thread-30735] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:28:36.151 [DEBUG] [Thread-30735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:28:36.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:28:36.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:28:36.152 [DEBUG] [Thread-30735] [transport.py] [_log()] userauth is OK
2026-04-16T03:28:36.152 [DEBUG] [Thread-30735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:28:36.152 [DEBUG] [Thread-30735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:28:36.153 [DEBUG] [Thread-30735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:28:36.153 [DEBUG] [Thread-30735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:28:36.171 [INFO] [Thread-30735] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:28:36.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:28:36.949 [DEBUG] [Thread-30735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:28:36.949 [DEBUG] [Thread-30735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:28:36.950 [DEBUG] [Thread-30735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:28:36.990 [DEBUG] [Thread-30735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:28:36.990 [DEBUG] [Thread-30735] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:28:36.993 [DEBUG] [Thread-30735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:28:37.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:28:37.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:28:37.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:28:37.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:28:37.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:28:37.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:28:37.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:28:37.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:28:37.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:28:37.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.060892 -999.00   +8.60  12.87     90   +7.10 1 1 1 3 1     0    0 1.62 1.02 .NE.w 12.4 12.9 66.6 13.8 9.0 -25.5 8.9 -24.4 8.6 -22.2 8.9 -24.1
2026-04-16T03:28:37.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:28:37.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:28:37.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.060892
2026-04-16T03:28:37.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:28:37.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:28:37.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:28:37.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:28:37.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:28:37.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:28:17', tmtdew=1.59901, humidity=89.5553, cloud=0.0, wind=13.9572, temperature=8.49957, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:27:41.069', atlas_cloud=1, atlas_rain=1, zp_data=[3.5737499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.2430000000000003, nan, nan, nan, 0.895999999999999, nan, 2.4784999999999995, 2.833499999999999, 2.5627499999999985, nan, nan, 0.12025000000000219, -0.06974999999999909, 0.023999999999999133, 0.12049999999999983, 0.2607499999999998, 0.18350000000000044, 0.09350000000000058, 0.09600000000000009, 0.08200000000000074, -0.08499999999999908, -0.08624999999999972], zp_timestamp='2026-04-16T01:24:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:28:37.018 [DEBUG] [Thread-30735] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:28:37.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:28:37.275 [DEBUG] [Thread-30738] [transport.py] [_log()] starting thread (client mode): 0xee9c2c80
2026-04-16T03:28:37.275 [DEBUG] [Thread-30738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:28:37.290 [DEBUG] [Thread-30738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:28:37.290 [INFO] [Thread-30738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:28:37.297 [DEBUG] [Thread-30738] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:28:37.297 [DEBUG] [Thread-30738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:28:37.297 [DEBUG] [Thread-30738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:28:37.297 [DEBUG] [Thread-30738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:28:37.297 [DEBUG] [Thread-30738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:28:37.298 [DEBUG] [Thread-30738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:28:37.298 [DEBUG] [Thread-30738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:28:37.298 [DEBUG] [Thread-30738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:28:37.298 [DEBUG] [Thread-30738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:28:37.298 [DEBUG] [Thread-30738] [transport.py] [_log()] client lang: <none>
2026-04-16T03:28:37.298 [DEBUG] [Thread-30738] [transport.py] [_log()] server lang: <none>
2026-04-16T03:28:37.298 [DEBUG] [Thread-30738] [transport.py] [_log()] kex follows: False
2026-04-16T03:28:37.298 [DEBUG] [Thread-30738] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:28:37.298 [DEBUG] [Thread-30738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:28:37.298 [DEBUG] [Thread-30738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:28:37.298 [DEBUG] [Thread-30738] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:28:37.299 [DEBUG] [Thread-30738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:28:37.299 [DEBUG] [Thread-30738] [transport.py] [_log()] Compression: none
2026-04-16T03:28:37.299 [DEBUG] [Thread-30738] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:28:37.353 [DEBUG] [Thread-30738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:28:37.353 [DEBUG] [Thread-30738] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:28:37.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:28:37.354 [DEBUG] [Thread-30738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:28:37.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:28:37.410 [DEBUG] [Thread-30738] [transport.py] [_log()] userauth is OK
2026-04-16T03:28:37.410 [DEBUG] [Thread-30738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:28:37.410 [DEBUG] [Thread-30738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:28:37.411 [DEBUG] [Thread-30738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:28:37.411 [DEBUG] [Thread-30738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:28:37.438 [INFO] [Thread-30738] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:28:37.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:28:37.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:28:38.242 [DEBUG] [Thread-30738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:28:38.242 [DEBUG] [Thread-30738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:28:38.290 [DEBUG] [Thread-30738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:28:38.290 [DEBUG] [Thread-30738] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:28:38.299 [DEBUG] [Thread-30738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:28:38.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:28:38.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')
2026-04-16T03:28:38.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') -> 00000000
2026-04-16T03:28:38.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:28:38.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:28:38.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:28:38.334 [DEBUG] [Thread-30738] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:28:47.064 [DEBUG] [Thread-30740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:29:02.111 [DEBUG] [Thread-30741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:29:03.652 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:29:03.653 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:29:08.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:29:08.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:29:08.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
2026-04-16T03:29:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 28, 53), 1.18808, 92.177, 0.0, 16.3735, 8.36551, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:29:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:28:53
2026-04-16T03:29:10.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:29:10.490 [DEBUG] [Thread-30742] [transport.py] [_log()] starting thread (client mode): 0xf13ca1d0
2026-04-16T03:29:10.491 [DEBUG] [Thread-30742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:29:10.510 [DEBUG] [Thread-30742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:29:10.510 [INFO] [Thread-30742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:29:10.513 [DEBUG] [Thread-30742] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:29:10.513 [DEBUG] [Thread-30742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] client lang: <none>
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] server lang: <none>
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] kex follows: False
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] Compression: none
2026-04-16T03:29:10.514 [DEBUG] [Thread-30742] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:29:10.532 [DEBUG] [Thread-30742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:29:10.532 [DEBUG] [Thread-30742] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:29:10.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:29:10.533 [DEBUG] [Thread-30742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:29:10.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:29:10.534 [DEBUG] [Thread-30742] [transport.py] [_log()] userauth is OK
2026-04-16T03:29:10.534 [DEBUG] [Thread-30742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:29:10.534 [DEBUG] [Thread-30742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:29:10.534 [DEBUG] [Thread-30742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:29:10.534 [DEBUG] [Thread-30742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:29:10.564 [INFO] [Thread-30742] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:29:10.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:29:11.369 [DEBUG] [Thread-30742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:29:11.369 [DEBUG] [Thread-30742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:29:11.369 [DEBUG] [Thread-30742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:29:11.410 [DEBUG] [Thread-30742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:29:11.410 [DEBUG] [Thread-30742] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:29:11.413 [DEBUG] [Thread-30742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:29:11.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:29:11.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:29:11.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:29:11.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:29:11.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:29:11.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:29:11.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:29:11.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:29:11.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:29:11.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.061240 -999.00   +8.60   8.02     90   +7.10 1 1 1 3 1     0    0 1.61 0.43 .NE.w 10.5 8.0 69.6 15.9 9.1 -25.5 8.9 -24.4 8.6 -22.2 8.9 -24.0
2026-04-16T03:29:11.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:29:11.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:29:11.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.061240
2026-04-16T03:29:11.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:29:11.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:29:11.437 [DEBUG] [Thread-30742] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:29:11.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:29:11.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:29:11.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:29:11.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:28:53', tmtdew=1.18808, humidity=92.177, cloud=0.0, wind=16.3735, temperature=8.36551, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:28:11.136', atlas_cloud=1, atlas_rain=1, zp_data=[3.5737499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.2430000000000003, nan, nan, nan, 0.895999999999999, nan, 2.4784999999999995, 2.833499999999999, 2.5627499999999985, nan, nan, 0.12025000000000219, -0.06974999999999909, 0.023999999999999133, 0.12049999999999983, 0.2607499999999998, 0.18350000000000044, 0.09350000000000058, 0.09600000000000009, 0.08200000000000074, -0.08499999999999908, -0.08624999999999972], zp_timestamp='2026-04-16T01:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:29:11.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:29:11.692 [DEBUG] [Thread-30745] [transport.py] [_log()] starting thread (client mode): 0xee933220
2026-04-16T03:29:11.693 [DEBUG] [Thread-30745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:29:11.708 [DEBUG] [Thread-30745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:29:11.708 [INFO] [Thread-30745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:29:11.716 [DEBUG] [Thread-30745] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:29:11.716 [DEBUG] [Thread-30745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:29:11.716 [DEBUG] [Thread-30745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:29:11.717 [DEBUG] [Thread-30745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:29:11.717 [DEBUG] [Thread-30745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:29:11.717 [DEBUG] [Thread-30745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:29:11.717 [DEBUG] [Thread-30745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:29:11.717 [DEBUG] [Thread-30745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:29:11.717 [DEBUG] [Thread-30745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:29:11.717 [DEBUG] [Thread-30745] [transport.py] [_log()] client lang: <none>
2026-04-16T03:29:11.717 [DEBUG] [Thread-30745] [transport.py] [_log()] server lang: <none>
2026-04-16T03:29:11.717 [DEBUG] [Thread-30745] [transport.py] [_log()] kex follows: False
2026-04-16T03:29:11.717 [DEBUG] [Thread-30745] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:29:11.717 [DEBUG] [Thread-30745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:29:11.717 [DEBUG] [Thread-30745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:29:11.718 [DEBUG] [Thread-30745] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:29:11.718 [DEBUG] [Thread-30745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:29:11.718 [DEBUG] [Thread-30745] [transport.py] [_log()] Compression: none
2026-04-16T03:29:11.718 [DEBUG] [Thread-30745] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:29:11.777 [DEBUG] [Thread-30745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:29:11.778 [DEBUG] [Thread-30745] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:29:11.778 [DEBUG] [Thread-30745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:29:11.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:29:11.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:29:11.839 [DEBUG] [Thread-30745] [transport.py] [_log()] userauth is OK
2026-04-16T03:29:11.839 [DEBUG] [Thread-30745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:29:11.839 [DEBUG] [Thread-30745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:29:11.839 [DEBUG] [Thread-30745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:29:11.840 [DEBUG] [Thread-30745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:29:11.865 [INFO] [Thread-30745] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:29:11.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:29:11.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:29:12.683 [DEBUG] [Thread-30745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:29:12.683 [DEBUG] [Thread-30745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:29:12.733 [DEBUG] [Thread-30745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:29:12.733 [DEBUG] [Thread-30745] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:29:12.746 [DEBUG] [Thread-30745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:29:12.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:29:12.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')
2026-04-16T03:29:12.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
2026-04-16T03:29:12.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:29:12.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:29:12.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:29:12.803 [DEBUG] [Thread-30745] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:29:13.991 [DEBUG] [Thread-30747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:29:17.142 [DEBUG] [Thread-30748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:29:32.187 [DEBUG] [Thread-30749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:29:42.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:29:42.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:29:42.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
2026-04-16T03:29:44.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 29, 28), 1.53855, 90.1214, 0.0, 13.9219, 8.49936, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:29:44.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:29:28
2026-04-16T03:29:44.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:29:44.914 [DEBUG] [Thread-30750] [transport.py] [_log()] starting thread (client mode): 0xee933940
2026-04-16T03:29:44.915 [DEBUG] [Thread-30750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:29:44.933 [DEBUG] [Thread-30750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:29:44.933 [INFO] [Thread-30750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:29:44.936 [DEBUG] [Thread-30750] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:29:44.936 [DEBUG] [Thread-30750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:29:44.936 [DEBUG] [Thread-30750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:29:44.937 [DEBUG] [Thread-30750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:29:44.937 [DEBUG] [Thread-30750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:29:44.937 [DEBUG] [Thread-30750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:29:44.937 [DEBUG] [Thread-30750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:29:44.937 [DEBUG] [Thread-30750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:29:44.937 [DEBUG] [Thread-30750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:29:44.937 [DEBUG] [Thread-30750] [transport.py] [_log()] client lang: <none>
2026-04-16T03:29:44.937 [DEBUG] [Thread-30750] [transport.py] [_log()] server lang: <none>
2026-04-16T03:29:44.937 [DEBUG] [Thread-30750] [transport.py] [_log()] kex follows: False
2026-04-16T03:29:44.937 [DEBUG] [Thread-30750] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:29:44.937 [DEBUG] [Thread-30750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:29:44.937 [DEBUG] [Thread-30750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:29:44.938 [DEBUG] [Thread-30750] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:29:44.938 [DEBUG] [Thread-30750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:29:44.938 [DEBUG] [Thread-30750] [transport.py] [_log()] Compression: none
2026-04-16T03:29:44.938 [DEBUG] [Thread-30750] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:29:44.954 [DEBUG] [Thread-30750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:29:44.954 [DEBUG] [Thread-30750] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:29:44.955 [DEBUG] [Thread-30750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:29:44.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:29:44.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:29:44.956 [DEBUG] [Thread-30750] [transport.py] [_log()] userauth is OK
2026-04-16T03:29:44.956 [DEBUG] [Thread-30750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:29:44.956 [DEBUG] [Thread-30750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:29:44.956 [DEBUG] [Thread-30750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:29:44.956 [DEBUG] [Thread-30750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:29:44.974 [INFO] [Thread-30750] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:29:44.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:29:45.741 [DEBUG] [Thread-30750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:29:45.741 [DEBUG] [Thread-30750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:29:45.741 [DEBUG] [Thread-30750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:29:45.782 [DEBUG] [Thread-30750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:29:45.782 [DEBUG] [Thread-30750] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:29:45.785 [DEBUG] [Thread-30750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:29:45.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:29:45.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:29:45.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:29:45.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:29:45.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:29:45.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:29:45.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:29:45.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:29:45.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:29:45.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.061934 -999.00   +8.70  13.03     90   +7.20 1 1 1 3 1     0    0 1.55 -0.91 .NE.. 12.7 13.0 77.0 16.6 9.0 -25.6 8.8 -24.2 8.6 -22.1 8.9 -24.1
2026-04-16T03:29:45.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:29:45.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:29:45.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.061934
2026-04-16T03:29:45.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:29:45.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:29:45.811 [DEBUG] [Thread-30750] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:29:45.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:29:45.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:29:45.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:29:45.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:29:28', tmtdew=1.53855, humidity=90.1214, cloud=0.0, wind=13.9219, temperature=8.49936, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:29:11.098', atlas_cloud=1, atlas_rain=1, zp_data=[3.5737499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.2430000000000003, nan, nan, nan, 0.895999999999999, nan, 2.4784999999999995, 2.833499999999999, 2.5627499999999985, nan, nan, 0.12025000000000219, -0.06974999999999909, 0.023999999999999133, 0.12049999999999983, 0.2607499999999998, 0.18350000000000044, 0.09350000000000058, 0.09600000000000009, 0.08200000000000074, -0.08499999999999908, -0.08624999999999972], zp_timestamp='2026-04-16T01:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:29:46.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:29:46.068 [DEBUG] [Thread-30753] [transport.py] [_log()] starting thread (client mode): 0xee907160
2026-04-16T03:29:46.068 [DEBUG] [Thread-30753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:29:46.083 [DEBUG] [Thread-30753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:29:46.083 [INFO] [Thread-30753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:29:46.090 [DEBUG] [Thread-30753] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:29:46.090 [DEBUG] [Thread-30753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:29:46.090 [DEBUG] [Thread-30753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:29:46.090 [DEBUG] [Thread-30753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:29:46.090 [DEBUG] [Thread-30753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:29:46.090 [DEBUG] [Thread-30753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:29:46.091 [DEBUG] [Thread-30753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:29:46.091 [DEBUG] [Thread-30753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:29:46.091 [DEBUG] [Thread-30753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:29:46.091 [DEBUG] [Thread-30753] [transport.py] [_log()] client lang: <none>
2026-04-16T03:29:46.091 [DEBUG] [Thread-30753] [transport.py] [_log()] server lang: <none>
2026-04-16T03:29:46.091 [DEBUG] [Thread-30753] [transport.py] [_log()] kex follows: False
2026-04-16T03:29:46.091 [DEBUG] [Thread-30753] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:29:46.091 [DEBUG] [Thread-30753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:29:46.091 [DEBUG] [Thread-30753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:29:46.091 [DEBUG] [Thread-30753] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:29:46.091 [DEBUG] [Thread-30753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:29:46.092 [DEBUG] [Thread-30753] [transport.py] [_log()] Compression: none
2026-04-16T03:29:46.092 [DEBUG] [Thread-30753] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:29:46.149 [DEBUG] [Thread-30753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:29:46.149 [DEBUG] [Thread-30753] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:29:46.149 [DEBUG] [Thread-30753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:29:46.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:29:46.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:29:46.206 [DEBUG] [Thread-30753] [transport.py] [_log()] userauth is OK
2026-04-16T03:29:46.206 [DEBUG] [Thread-30753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:29:46.206 [DEBUG] [Thread-30753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:29:46.206 [DEBUG] [Thread-30753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:29:46.206 [DEBUG] [Thread-30753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:29:46.224 [INFO] [Thread-30753] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:29:46.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:29:46.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:29:47.058 [DEBUG] [Thread-30753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:29:47.058 [DEBUG] [Thread-30753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:29:47.106 [DEBUG] [Thread-30753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:29:47.106 [DEBUG] [Thread-30753] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:29:47.115 [DEBUG] [Thread-30753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:29:47.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:29:47.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')
2026-04-16T03:29:47.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
2026-04-16T03:29:47.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:29:47.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:29:47.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:29:47.150 [DEBUG] [Thread-30753] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:29:47.218 [DEBUG] [Thread-30755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:30:02.259 [DEBUG] [Thread-30756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:30:03.857 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:30:03.858 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:30:14.140 [DEBUG] [Thread-30757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:30:17.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:30:17.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:30:17.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T03:30:17.290 [DEBUG] [Thread-30758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:30:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 30, 4), 1.53898, 90.1214, 0.0, 14.0454, 8.54914, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:30:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:30:04
2026-04-16T03:30:18.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:30:19.302 [DEBUG] [Thread-30759] [transport.py] [_log()] starting thread (client mode): 0xee992b60
2026-04-16T03:30:19.302 [DEBUG] [Thread-30759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:30:19.321 [DEBUG] [Thread-30759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:30:19.321 [INFO] [Thread-30759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:30:19.324 [DEBUG] [Thread-30759] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:30:19.325 [DEBUG] [Thread-30759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:30:19.325 [DEBUG] [Thread-30759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:30:19.325 [DEBUG] [Thread-30759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:30:19.325 [DEBUG] [Thread-30759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:30:19.325 [DEBUG] [Thread-30759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:30:19.325 [DEBUG] [Thread-30759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:30:19.325 [DEBUG] [Thread-30759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:30:19.325 [DEBUG] [Thread-30759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:30:19.325 [DEBUG] [Thread-30759] [transport.py] [_log()] client lang: <none>
2026-04-16T03:30:19.325 [DEBUG] [Thread-30759] [transport.py] [_log()] server lang: <none>
2026-04-16T03:30:19.325 [DEBUG] [Thread-30759] [transport.py] [_log()] kex follows: False
2026-04-16T03:30:19.326 [DEBUG] [Thread-30759] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:30:19.326 [DEBUG] [Thread-30759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:30:19.326 [DEBUG] [Thread-30759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:30:19.326 [DEBUG] [Thread-30759] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:30:19.326 [DEBUG] [Thread-30759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:30:19.326 [DEBUG] [Thread-30759] [transport.py] [_log()] Compression: none
2026-04-16T03:30:19.326 [DEBUG] [Thread-30759] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:30:19.343 [DEBUG] [Thread-30759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:30:19.343 [DEBUG] [Thread-30759] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:30:19.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:30:19.344 [DEBUG] [Thread-30759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:30:19.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:30:19.345 [DEBUG] [Thread-30759] [transport.py] [_log()] userauth is OK
2026-04-16T03:30:19.345 [DEBUG] [Thread-30759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:30:19.346 [DEBUG] [Thread-30759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:30:19.346 [DEBUG] [Thread-30759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:30:19.346 [DEBUG] [Thread-30759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:30:19.369 [INFO] [Thread-30759] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:30:19.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:30:24.761 [DEBUG] [Thread-30759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:30:24.762 [DEBUG] [Thread-30759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:30:24.762 [DEBUG] [Thread-30759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:30:24.802 [DEBUG] [Thread-30759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:30:24.802 [DEBUG] [Thread-30759] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:30:24.805 [DEBUG] [Thread-30759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:30:24.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:30:24.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:30:24.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:30:24.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:30:24.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:30:24.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:30:24.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:30:24.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:30:24.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:30:24.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.062281 -999.00   +8.70  11.71     90   +7.20 1 1 1 3 1     0    0 1.53 -1.15 .NE.. 10.8 11.7 68.1 15.7 9.0 -25.6 8.8 -24.3 8.6 -22.1 8.9 -24.4
2026-04-16T03:30:24.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:30:24.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:30:24.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.062281
2026-04-16T03:30:24.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:30:24.832 [DEBUG] [Thread-30759] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:30:24.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:30:24.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:30:24.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:30:24.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:30:24.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:30:04', tmtdew=1.53898, humidity=90.1214, cloud=0.0, wind=14.0454, temperature=8.54914, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:29:41.078', atlas_cloud=1, atlas_rain=1, zp_data=[3.5737499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.2430000000000003, nan, nan, nan, 0.895999999999999, nan, 2.4784999999999995, 2.833499999999999, 2.5627499999999985, nan, nan, 0.12025000000000219, -0.06974999999999909, 0.023999999999999133, 0.12049999999999983, 0.2607499999999998, 0.18350000000000044, 0.09350000000000058, 0.09600000000000009, 0.08200000000000074, -0.08499999999999908, -0.08624999999999972], zp_timestamp='2026-04-16T01:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:30:25.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:30:25.090 [DEBUG] [Thread-30762] [transport.py] [_log()] starting thread (client mode): 0xee905750
2026-04-16T03:30:25.090 [DEBUG] [Thread-30762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:30:25.104 [DEBUG] [Thread-30762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:30:25.104 [INFO] [Thread-30762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:30:25.112 [DEBUG] [Thread-30762] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:30:25.112 [DEBUG] [Thread-30762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:30:25.112 [DEBUG] [Thread-30762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:30:25.112 [DEBUG] [Thread-30762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:30:25.112 [DEBUG] [Thread-30762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:30:25.112 [DEBUG] [Thread-30762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:30:25.112 [DEBUG] [Thread-30762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:30:25.112 [DEBUG] [Thread-30762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:30:25.113 [DEBUG] [Thread-30762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:30:25.113 [DEBUG] [Thread-30762] [transport.py] [_log()] client lang: <none>
2026-04-16T03:30:25.113 [DEBUG] [Thread-30762] [transport.py] [_log()] server lang: <none>
2026-04-16T03:30:25.113 [DEBUG] [Thread-30762] [transport.py] [_log()] kex follows: False
2026-04-16T03:30:25.113 [DEBUG] [Thread-30762] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:30:25.113 [DEBUG] [Thread-30762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:30:25.113 [DEBUG] [Thread-30762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:30:25.113 [DEBUG] [Thread-30762] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:30:25.113 [DEBUG] [Thread-30762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:30:25.113 [DEBUG] [Thread-30762] [transport.py] [_log()] Compression: none
2026-04-16T03:30:25.113 [DEBUG] [Thread-30762] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:30:25.173 [DEBUG] [Thread-30762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:30:25.174 [DEBUG] [Thread-30762] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:30:25.174 [DEBUG] [Thread-30762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:30:25.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:30:25.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:30:25.230 [DEBUG] [Thread-30762] [transport.py] [_log()] userauth is OK
2026-04-16T03:30:25.230 [DEBUG] [Thread-30762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:30:25.230 [DEBUG] [Thread-30762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:30:25.230 [DEBUG] [Thread-30762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:30:25.231 [DEBUG] [Thread-30762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:30:25.252 [INFO] [Thread-30762] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:30:25.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:30:25.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:30:26.085 [DEBUG] [Thread-30762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:30:26.086 [DEBUG] [Thread-30762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:30:26.133 [DEBUG] [Thread-30762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:30:26.133 [DEBUG] [Thread-30762] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:30:26.142 [DEBUG] [Thread-30762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:30:26.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:30:26.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')
2026-04-16T03:30:26.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
2026-04-16T03:30:26.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:30:26.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:30:26.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:30:26.176 [DEBUG] [Thread-30762] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:30:32.320 [DEBUG] [Thread-30764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:30:47.365 [DEBUG] [Thread-30765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:30:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:30:56.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:30:56.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
2026-04-16T03:30:57.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 30, 39), 1.17803, 92.2422, 0.0, 16.3382, 8.39792, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:30:57.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:30:39
2026-04-16T03:30:57.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:30:58.344 [DEBUG] [Thread-30766] [transport.py] [_log()] starting thread (client mode): 0xee957160
2026-04-16T03:30:58.345 [DEBUG] [Thread-30766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:30:58.363 [DEBUG] [Thread-30766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:30:58.363 [INFO] [Thread-30766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:30:58.367 [DEBUG] [Thread-30766] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:30:58.367 [DEBUG] [Thread-30766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:30:58.367 [DEBUG] [Thread-30766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:30:58.367 [DEBUG] [Thread-30766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:30:58.367 [DEBUG] [Thread-30766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:30:58.367 [DEBUG] [Thread-30766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:30:58.367 [DEBUG] [Thread-30766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:30:58.367 [DEBUG] [Thread-30766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:30:58.367 [DEBUG] [Thread-30766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:30:58.367 [DEBUG] [Thread-30766] [transport.py] [_log()] client lang: <none>
2026-04-16T03:30:58.367 [DEBUG] [Thread-30766] [transport.py] [_log()] server lang: <none>
2026-04-16T03:30:58.368 [DEBUG] [Thread-30766] [transport.py] [_log()] kex follows: False
2026-04-16T03:30:58.368 [DEBUG] [Thread-30766] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:30:58.368 [DEBUG] [Thread-30766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:30:58.368 [DEBUG] [Thread-30766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:30:58.368 [DEBUG] [Thread-30766] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:30:58.368 [DEBUG] [Thread-30766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:30:58.368 [DEBUG] [Thread-30766] [transport.py] [_log()] Compression: none
2026-04-16T03:30:58.368 [DEBUG] [Thread-30766] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:30:58.389 [DEBUG] [Thread-30766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:30:58.389 [DEBUG] [Thread-30766] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:30:58.389 [DEBUG] [Thread-30766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:30:58.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:30:58.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:30:58.432 [DEBUG] [Thread-30766] [transport.py] [_log()] userauth is OK
2026-04-16T03:30:58.433 [DEBUG] [Thread-30766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:30:58.433 [DEBUG] [Thread-30766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:30:58.433 [DEBUG] [Thread-30766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:30:58.433 [DEBUG] [Thread-30766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:30:58.456 [INFO] [Thread-30766] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:30:58.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:30:59.265 [DEBUG] [Thread-30766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:30:59.265 [DEBUG] [Thread-30766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:30:59.266 [DEBUG] [Thread-30766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:30:59.306 [DEBUG] [Thread-30766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:30:59.306 [DEBUG] [Thread-30766] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:30:59.309 [DEBUG] [Thread-30766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:30:59.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:30:59.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:30:59.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:30:59.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:30:59.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:30:59.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:30:59.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:30:59.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:30:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:30:59.333 [DEBUG] [Thread-30766] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:30:59.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.062628 -999.00   +8.70  14.48     90   +7.10 1 1 1 3 1     0    0 1.55 -1.13 .NE.. 13.8 14.5 69.0 16.2 9.0 -25.6 8.8 -24.5 8.6 -22.1 8.9 -24.2
2026-04-16T03:30:59.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:30:59.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:30:59.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.062628
2026-04-16T03:30:59.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:30:59.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:30:59.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:30:59.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:30:59.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:30:59.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:30:39', tmtdew=1.17803, humidity=92.2422, cloud=0.0, wind=16.3382, temperature=8.39792, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:30:11.059', atlas_cloud=1, atlas_rain=1, zp_data=[3.5737499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.2430000000000003, nan, nan, nan, 0.895999999999999, nan, 2.4784999999999995, 2.833499999999999, 2.5627499999999985, nan, nan, 0.12025000000000219, -0.06974999999999909, 0.023999999999999133, 0.12049999999999983, 0.2607499999999998, 0.18350000000000044, 0.09350000000000058, 0.09600000000000009, 0.08200000000000074, -0.08499999999999908, -0.08624999999999972], zp_timestamp='2026-04-16T01:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:30:59.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:30:59.589 [DEBUG] [Thread-30769] [transport.py] [_log()] starting thread (client mode): 0xee9076d0
2026-04-16T03:30:59.589 [DEBUG] [Thread-30769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:30:59.603 [DEBUG] [Thread-30769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:30:59.603 [INFO] [Thread-30769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:30:59.610 [DEBUG] [Thread-30769] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:30:59.610 [DEBUG] [Thread-30769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:30:59.610 [DEBUG] [Thread-30769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:30:59.610 [DEBUG] [Thread-30769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:30:59.610 [DEBUG] [Thread-30769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:30:59.611 [DEBUG] [Thread-30769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:30:59.611 [DEBUG] [Thread-30769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:30:59.611 [DEBUG] [Thread-30769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:30:59.611 [DEBUG] [Thread-30769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:30:59.611 [DEBUG] [Thread-30769] [transport.py] [_log()] client lang: <none>
2026-04-16T03:30:59.611 [DEBUG] [Thread-30769] [transport.py] [_log()] server lang: <none>
2026-04-16T03:30:59.611 [DEBUG] [Thread-30769] [transport.py] [_log()] kex follows: False
2026-04-16T03:30:59.611 [DEBUG] [Thread-30769] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:30:59.611 [DEBUG] [Thread-30769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:30:59.611 [DEBUG] [Thread-30769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:30:59.611 [DEBUG] [Thread-30769] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:30:59.611 [DEBUG] [Thread-30769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:30:59.612 [DEBUG] [Thread-30769] [transport.py] [_log()] Compression: none
2026-04-16T03:30:59.612 [DEBUG] [Thread-30769] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:30:59.669 [DEBUG] [Thread-30769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:30:59.670 [DEBUG] [Thread-30769] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:30:59.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:30:59.670 [DEBUG] [Thread-30769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:30:59.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:30:59.726 [DEBUG] [Thread-30769] [transport.py] [_log()] userauth is OK
2026-04-16T03:30:59.726 [DEBUG] [Thread-30769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:30:59.727 [DEBUG] [Thread-30769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:30:59.727 [DEBUG] [Thread-30769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:30:59.727 [DEBUG] [Thread-30769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:30:59.752 [INFO] [Thread-30769] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:30:59.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:30:59.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:31:00.548 [DEBUG] [Thread-30769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:31:00.549 [DEBUG] [Thread-30769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:31:00.596 [DEBUG] [Thread-30769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:31:00.596 [DEBUG] [Thread-30769] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:31:00.605 [DEBUG] [Thread-30769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:31:00.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:31:00.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')
2026-04-16T03:31:00.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
2026-04-16T03:31:00.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:31:00.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:31:00.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:31:00.639 [DEBUG] [Thread-30769] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:31:02.397 [DEBUG] [Thread-30771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:31:04.062 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:31:04.063 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:31:14.302 [DEBUG] [Thread-30772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:31:17.442 [DEBUG] [Thread-30773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:31:30.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:31:30.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:31:30.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
2026-04-16T03:31:31.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 31, 15), 1.4915, 90.1045, 0.0, 13.7279, 8.53237, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:31:31.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:31:15
2026-04-16T03:31:32.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:31:32.469 [DEBUG] [Thread-30774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:31:32.741 [DEBUG] [Thread-30775] [transport.py] [_log()] starting thread (client mode): 0xf1366f80
2026-04-16T03:31:32.741 [DEBUG] [Thread-30775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:31:32.761 [DEBUG] [Thread-30775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:31:32.761 [INFO] [Thread-30775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:31:32.764 [DEBUG] [Thread-30775] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:31:32.764 [DEBUG] [Thread-30775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:31:32.764 [DEBUG] [Thread-30775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:31:32.764 [DEBUG] [Thread-30775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:31:32.764 [DEBUG] [Thread-30775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:31:32.764 [DEBUG] [Thread-30775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:31:32.764 [DEBUG] [Thread-30775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:31:32.765 [DEBUG] [Thread-30775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:31:32.765 [DEBUG] [Thread-30775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:31:32.765 [DEBUG] [Thread-30775] [transport.py] [_log()] client lang: <none>
2026-04-16T03:31:32.765 [DEBUG] [Thread-30775] [transport.py] [_log()] server lang: <none>
2026-04-16T03:31:32.765 [DEBUG] [Thread-30775] [transport.py] [_log()] kex follows: False
2026-04-16T03:31:32.765 [DEBUG] [Thread-30775] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:31:32.765 [DEBUG] [Thread-30775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:31:32.765 [DEBUG] [Thread-30775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:31:32.765 [DEBUG] [Thread-30775] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:31:32.765 [DEBUG] [Thread-30775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:31:32.765 [DEBUG] [Thread-30775] [transport.py] [_log()] Compression: none
2026-04-16T03:31:32.765 [DEBUG] [Thread-30775] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:31:32.782 [DEBUG] [Thread-30775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:31:32.782 [DEBUG] [Thread-30775] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:31:32.783 [DEBUG] [Thread-30775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:31:32.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:31:32.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:31:32.784 [DEBUG] [Thread-30775] [transport.py] [_log()] userauth is OK
2026-04-16T03:31:32.784 [DEBUG] [Thread-30775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:31:32.784 [DEBUG] [Thread-30775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:31:32.784 [DEBUG] [Thread-30775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:31:32.785 [DEBUG] [Thread-30775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:31:32.804 [INFO] [Thread-30775] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:31:32.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:31:33.617 [DEBUG] [Thread-30775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:31:33.617 [DEBUG] [Thread-30775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:31:33.618 [DEBUG] [Thread-30775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:31:33.658 [DEBUG] [Thread-30775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:31:33.658 [DEBUG] [Thread-30775] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:31:33.662 [DEBUG] [Thread-30775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:31:33.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:31:33.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:31:33.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:31:33.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:31:33.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:31:33.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:31:33.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:31:33.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:31:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:31:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.062975 -999.00   +8.60   6.34     90   +7.10 1 1 1 3 1     0    0 1.57 -1.42 .NE.. 12.6 6.3 128.3 16.5 9.0 -25.6 8.9 -24.4 8.6 -22.1 8.9 -24.2
2026-04-16T03:31:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:31:33.685 [DEBUG] [Thread-30775] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:31:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:31:33.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.062975
2026-04-16T03:31:33.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:31:33.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:31:33.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:31:33.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:31:33.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:31:33.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:31:15', tmtdew=1.4915, humidity=90.1045, cloud=0.0, wind=13.7279, temperature=8.53237, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:30:41.040', atlas_cloud=1, atlas_rain=1, zp_data=[3.5737499999999995, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.2430000000000003, nan, nan, nan, 0.895999999999999, nan, 2.4784999999999995, 2.833499999999999, 2.5627499999999985, nan, nan, 0.12025000000000219, -0.06974999999999909, 0.023999999999999133, 0.12049999999999983, 0.2607499999999998, 0.18350000000000044, 0.09350000000000058, 0.09600000000000009, 0.08200000000000074, -0.08499999999999908, -0.08624999999999972], zp_timestamp='2026-04-16T01:27:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:31:33.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:31:33.941 [DEBUG] [Thread-30778] [transport.py] [_log()] starting thread (client mode): 0xee9c6c80
2026-04-16T03:31:33.941 [DEBUG] [Thread-30778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:31:33.956 [DEBUG] [Thread-30778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:31:33.956 [INFO] [Thread-30778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:31:33.963 [DEBUG] [Thread-30778] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:31:33.963 [DEBUG] [Thread-30778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:31:33.963 [DEBUG] [Thread-30778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:31:33.964 [DEBUG] [Thread-30778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:31:33.964 [DEBUG] [Thread-30778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:31:33.964 [DEBUG] [Thread-30778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:31:33.964 [DEBUG] [Thread-30778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:31:33.964 [DEBUG] [Thread-30778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:31:33.964 [DEBUG] [Thread-30778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:31:33.964 [DEBUG] [Thread-30778] [transport.py] [_log()] client lang: <none>
2026-04-16T03:31:33.964 [DEBUG] [Thread-30778] [transport.py] [_log()] server lang: <none>
2026-04-16T03:31:33.964 [DEBUG] [Thread-30778] [transport.py] [_log()] kex follows: False
2026-04-16T03:31:33.965 [DEBUG] [Thread-30778] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:31:33.965 [DEBUG] [Thread-30778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:31:33.965 [DEBUG] [Thread-30778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:31:33.965 [DEBUG] [Thread-30778] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:31:33.965 [DEBUG] [Thread-30778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:31:33.965 [DEBUG] [Thread-30778] [transport.py] [_log()] Compression: none
2026-04-16T03:31:33.965 [DEBUG] [Thread-30778] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:31:34.021 [DEBUG] [Thread-30778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:31:34.022 [DEBUG] [Thread-30778] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:31:34.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:31:34.022 [DEBUG] [Thread-30778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:31:34.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:31:34.078 [DEBUG] [Thread-30778] [transport.py] [_log()] userauth is OK
2026-04-16T03:31:34.079 [DEBUG] [Thread-30778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:31:34.079 [DEBUG] [Thread-30778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:31:34.079 [DEBUG] [Thread-30778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:31:34.079 [DEBUG] [Thread-30778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:31:34.104 [INFO] [Thread-30778] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:31:34.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:31:34.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:31:34.961 [DEBUG] [Thread-30778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:31:34.961 [DEBUG] [Thread-30778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:31:35.012 [DEBUG] [Thread-30778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:31:35.012 [DEBUG] [Thread-30778] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:31:35.020 [DEBUG] [Thread-30778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:31:35.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:31:35.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')
2026-04-16T03:31:35.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
2026-04-16T03:31:35.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:31:35.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:31:35.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:31:35.052 [DEBUG] [Thread-30778] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:31:47.496 [DEBUG] [Thread-30780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:32:02.540 [DEBUG] [Thread-30781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:32:04.266 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:32:04.267 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:32:05.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:32:05.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:32:05.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
2026-04-16T03:32:06.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 31, 51), 1.18765, 92.1761, 0.0, 15.5621, 8.29859, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:32:06.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:31:51
2026-04-16T03:32:06.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:32:07.216 [DEBUG] [Thread-30782] [transport.py] [_log()] starting thread (client mode): 0xee942920
2026-04-16T03:32:07.216 [DEBUG] [Thread-30782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:32:07.236 [DEBUG] [Thread-30782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:32:07.236 [INFO] [Thread-30782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:32:07.238 [DEBUG] [Thread-30782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:32:07.238 [DEBUG] [Thread-30782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:32:07.238 [DEBUG] [Thread-30782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:32:07.238 [DEBUG] [Thread-30782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:32:07.238 [DEBUG] [Thread-30782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:32:07.239 [DEBUG] [Thread-30782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:32:07.239 [DEBUG] [Thread-30782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:32:07.239 [DEBUG] [Thread-30782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:32:07.239 [DEBUG] [Thread-30782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:32:07.239 [DEBUG] [Thread-30782] [transport.py] [_log()] client lang: <none>
2026-04-16T03:32:07.239 [DEBUG] [Thread-30782] [transport.py] [_log()] server lang: <none>
2026-04-16T03:32:07.239 [DEBUG] [Thread-30782] [transport.py] [_log()] kex follows: False
2026-04-16T03:32:07.239 [DEBUG] [Thread-30782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:32:07.239 [DEBUG] [Thread-30782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:32:07.239 [DEBUG] [Thread-30782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:32:07.239 [DEBUG] [Thread-30782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:32:07.240 [DEBUG] [Thread-30782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:32:07.240 [DEBUG] [Thread-30782] [transport.py] [_log()] Compression: none
2026-04-16T03:32:07.240 [DEBUG] [Thread-30782] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:32:07.251 [DEBUG] [Thread-30782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:32:07.252 [DEBUG] [Thread-30782] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:32:07.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:32:07.252 [DEBUG] [Thread-30782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:32:07.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:32:07.253 [DEBUG] [Thread-30782] [transport.py] [_log()] userauth is OK
2026-04-16T03:32:07.253 [DEBUG] [Thread-30782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:32:07.253 [DEBUG] [Thread-30782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:32:07.254 [DEBUG] [Thread-30782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:32:07.254 [DEBUG] [Thread-30782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:32:07.271 [INFO] [Thread-30782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:32:07.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:32:08.086 [DEBUG] [Thread-30782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:32:08.086 [DEBUG] [Thread-30782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:32:08.087 [DEBUG] [Thread-30782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:32:08.127 [DEBUG] [Thread-30782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:32:08.127 [DEBUG] [Thread-30782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:32:08.129 [DEBUG] [Thread-30782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:32:08.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:32:08.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:32:08.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:32:08.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:32:08.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:32:08.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:32:08.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:32:08.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:32:08.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:32:08.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.063323 -999.00   +8.60  13.59     90   +7.10 1 1 1 3 1     0    0 1.53 -1.98 .NE.w 13.3 13.6 64.6 15.8 9.0 -25.6 8.9 -24.3 8.6 -22.1 8.9 -24.2
2026-04-16T03:32:08.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:32:08.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:32:08.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.063323
2026-04-16T03:32:08.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:32:08.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:32:08.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:32:08.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:32:08.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:32:08.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:31:51', tmtdew=1.18765, humidity=92.1761, cloud=0.0, wind=15.5621, temperature=8.29859, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:31:11.107', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.6230000000000002, nan, nan, nan, nan, nan, 2.5595, 2.9289999999999994, 2.719249999999999, nan, nan, 0.28325000000000067, 0.013250000000001094, 0.11650000000000027, 0.18849999999999945, 0.23274999999999935, 0.2425000000000015, 0.125, 0.17800000000000082, 0.12100000000000044, -0.10299999999999976, -0.10875000000000057], zp_timestamp='2026-04-16T01:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:32:08.148 [DEBUG] [Thread-30782] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:32:08.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:32:08.356 [DEBUG] [Thread-30785] [transport.py] [_log()] starting thread (client mode): 0xee942da0
2026-04-16T03:32:08.356 [DEBUG] [Thread-30785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:32:08.371 [DEBUG] [Thread-30785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:32:08.371 [INFO] [Thread-30785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:32:08.378 [DEBUG] [Thread-30785] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:32:08.378 [DEBUG] [Thread-30785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:32:08.379 [DEBUG] [Thread-30785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:32:08.379 [DEBUG] [Thread-30785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:32:08.379 [DEBUG] [Thread-30785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:32:08.379 [DEBUG] [Thread-30785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:32:08.379 [DEBUG] [Thread-30785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:32:08.379 [DEBUG] [Thread-30785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:32:08.379 [DEBUG] [Thread-30785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:32:08.379 [DEBUG] [Thread-30785] [transport.py] [_log()] client lang: <none>
2026-04-16T03:32:08.379 [DEBUG] [Thread-30785] [transport.py] [_log()] server lang: <none>
2026-04-16T03:32:08.379 [DEBUG] [Thread-30785] [transport.py] [_log()] kex follows: False
2026-04-16T03:32:08.379 [DEBUG] [Thread-30785] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:32:08.380 [DEBUG] [Thread-30785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:32:08.380 [DEBUG] [Thread-30785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:32:08.380 [DEBUG] [Thread-30785] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:32:08.380 [DEBUG] [Thread-30785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:32:08.380 [DEBUG] [Thread-30785] [transport.py] [_log()] Compression: none
2026-04-16T03:32:08.380 [DEBUG] [Thread-30785] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:32:08.436 [DEBUG] [Thread-30785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:32:08.437 [DEBUG] [Thread-30785] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:32:08.437 [DEBUG] [Thread-30785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:32:08.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:32:08.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:32:08.494 [DEBUG] [Thread-30785] [transport.py] [_log()] userauth is OK
2026-04-16T03:32:08.494 [DEBUG] [Thread-30785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:32:08.495 [DEBUG] [Thread-30785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:32:08.495 [DEBUG] [Thread-30785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:32:08.495 [DEBUG] [Thread-30785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:32:08.512 [INFO] [Thread-30785] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:32:08.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:32:08.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:32:09.295 [DEBUG] [Thread-30785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:32:09.295 [DEBUG] [Thread-30785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:32:09.343 [DEBUG] [Thread-30785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:32:09.343 [DEBUG] [Thread-30785] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:32:09.352 [DEBUG] [Thread-30785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:32:09.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:32:09.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')
2026-04-16T03:32:09.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
2026-04-16T03:32:09.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:32:09.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:32:09.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:32:09.386 [DEBUG] [Thread-30785] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:32:14.451 [DEBUG] [Thread-30787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:32:17.570 [DEBUG] [Thread-30788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:32:32.610 [DEBUG] [Thread-30789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:32:39.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:32:39.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:32:39.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T03:32:40.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 32, 26), 1.54146, 90.1048, 0.0, 13.7455, 8.58256, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:32:40.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:32:26
2026-04-16T03:32:41.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:32:41.511 [DEBUG] [Thread-30790] [transport.py] [_log()] starting thread (client mode): 0xee941bd0
2026-04-16T03:32:41.511 [DEBUG] [Thread-30790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:32:41.531 [DEBUG] [Thread-30790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:32:41.532 [INFO] [Thread-30790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:32:41.535 [DEBUG] [Thread-30790] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:32:41.535 [DEBUG] [Thread-30790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:32:41.535 [DEBUG] [Thread-30790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:32:41.535 [DEBUG] [Thread-30790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:32:41.535 [DEBUG] [Thread-30790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:32:41.535 [DEBUG] [Thread-30790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:32:41.535 [DEBUG] [Thread-30790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:32:41.536 [DEBUG] [Thread-30790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:32:41.536 [DEBUG] [Thread-30790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:32:41.536 [DEBUG] [Thread-30790] [transport.py] [_log()] client lang: <none>
2026-04-16T03:32:41.536 [DEBUG] [Thread-30790] [transport.py] [_log()] server lang: <none>
2026-04-16T03:32:41.536 [DEBUG] [Thread-30790] [transport.py] [_log()] kex follows: False
2026-04-16T03:32:41.536 [DEBUG] [Thread-30790] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:32:41.536 [DEBUG] [Thread-30790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:32:41.536 [DEBUG] [Thread-30790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:32:41.536 [DEBUG] [Thread-30790] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:32:41.536 [DEBUG] [Thread-30790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:32:41.536 [DEBUG] [Thread-30790] [transport.py] [_log()] Compression: none
2026-04-16T03:32:41.537 [DEBUG] [Thread-30790] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:32:41.554 [DEBUG] [Thread-30790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:32:41.554 [DEBUG] [Thread-30790] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:32:41.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:32:41.555 [DEBUG] [Thread-30790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:32:41.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:32:41.556 [DEBUG] [Thread-30790] [transport.py] [_log()] userauth is OK
2026-04-16T03:32:41.556 [DEBUG] [Thread-30790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:32:41.556 [DEBUG] [Thread-30790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:32:41.556 [DEBUG] [Thread-30790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:32:41.556 [DEBUG] [Thread-30790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:32:41.576 [INFO] [Thread-30790] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:32:41.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:32:42.389 [DEBUG] [Thread-30790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:32:42.390 [DEBUG] [Thread-30790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:32:42.390 [DEBUG] [Thread-30790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:32:42.431 [DEBUG] [Thread-30790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:32:42.431 [DEBUG] [Thread-30790] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:32:42.433 [DEBUG] [Thread-30790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:32:42.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:32:42.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:32:42.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:32:42.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:32:42.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:32:42.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:32:42.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:32:42.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:32:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:32:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.063670 -999.00   +8.60   9.53     90   +7.10 1 1 1 3 1     0    0 1.48 -2.54 .NE.. 13.7 9.5 88.4 17.2 9.0 -25.5 8.8 -24.2 8.7 -22.1 8.9 -24.2
2026-04-16T03:32:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:32:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:32:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.063670
2026-04-16T03:32:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:32:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:32:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:32:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:32:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:32:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:32:26', tmtdew=1.54146, humidity=90.1048, cloud=0.0, wind=13.7455, temperature=8.58256, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:31:41.088', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.6230000000000002, nan, nan, nan, nan, nan, 2.5595, 2.9289999999999994, 2.719249999999999, nan, nan, 0.28325000000000067, 0.013250000000001094, 0.11650000000000027, 0.18849999999999945, 0.23274999999999935, 0.2425000000000015, 0.125, 0.17800000000000082, 0.12100000000000044, -0.10299999999999976, -0.10875000000000057], zp_timestamp='2026-04-16T01:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:32:42.454 [DEBUG] [Thread-30790] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:32:42.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:32:42.705 [DEBUG] [Thread-30793] [transport.py] [_log()] starting thread (client mode): 0xee942f50
2026-04-16T03:32:42.705 [DEBUG] [Thread-30793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:32:42.719 [DEBUG] [Thread-30793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:32:42.719 [INFO] [Thread-30793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:32:42.726 [DEBUG] [Thread-30793] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:32:42.726 [DEBUG] [Thread-30793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:32:42.726 [DEBUG] [Thread-30793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:32:42.726 [DEBUG] [Thread-30793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:32:42.726 [DEBUG] [Thread-30793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:32:42.727 [DEBUG] [Thread-30793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:32:42.727 [DEBUG] [Thread-30793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:32:42.727 [DEBUG] [Thread-30793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:32:42.727 [DEBUG] [Thread-30793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:32:42.727 [DEBUG] [Thread-30793] [transport.py] [_log()] client lang: <none>
2026-04-16T03:32:42.727 [DEBUG] [Thread-30793] [transport.py] [_log()] server lang: <none>
2026-04-16T03:32:42.727 [DEBUG] [Thread-30793] [transport.py] [_log()] kex follows: False
2026-04-16T03:32:42.727 [DEBUG] [Thread-30793] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:32:42.727 [DEBUG] [Thread-30793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:32:42.727 [DEBUG] [Thread-30793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:32:42.727 [DEBUG] [Thread-30793] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:32:42.728 [DEBUG] [Thread-30793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:32:42.728 [DEBUG] [Thread-30793] [transport.py] [_log()] Compression: none
2026-04-16T03:32:42.728 [DEBUG] [Thread-30793] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:32:42.782 [DEBUG] [Thread-30793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:32:42.782 [DEBUG] [Thread-30793] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:32:42.783 [DEBUG] [Thread-30793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:32:42.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:32:42.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:32:42.838 [DEBUG] [Thread-30793] [transport.py] [_log()] userauth is OK
2026-04-16T03:32:42.838 [DEBUG] [Thread-30793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:32:42.839 [DEBUG] [Thread-30793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:32:42.839 [DEBUG] [Thread-30793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:32:42.839 [DEBUG] [Thread-30793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:32:42.861 [INFO] [Thread-30793] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:32:42.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:32:42.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:32:43.661 [DEBUG] [Thread-30793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:32:43.662 [DEBUG] [Thread-30793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:32:43.709 [DEBUG] [Thread-30793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:32:43.709 [DEBUG] [Thread-30793] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:32:43.718 [DEBUG] [Thread-30793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:32:43.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:32:43.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')
2026-04-16T03:32:43.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
2026-04-16T03:32:43.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:32:43.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:32:43.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:32:43.753 [DEBUG] [Thread-30793] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:32:47.643 [DEBUG] [Thread-30795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:33:02.686 [DEBUG] [Thread-30796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:33:04.473 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:33:04.474 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:33:13.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:33:13.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:33:13.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
2026-04-16T03:33:14.614 [DEBUG] [Thread-30797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:33:15.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 33, 2), 1.53869, 90.1214, 0.0, 13.3045, 8.56597, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:33:15.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:33:02
2026-04-16T03:33:15.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:33:15.893 [DEBUG] [Thread-30798] [transport.py] [_log()] starting thread (client mode): 0xee940850
2026-04-16T03:33:15.893 [DEBUG] [Thread-30798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:33:15.913 [DEBUG] [Thread-30798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:33:15.913 [INFO] [Thread-30798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:33:15.917 [DEBUG] [Thread-30798] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:33:15.917 [DEBUG] [Thread-30798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:33:15.917 [DEBUG] [Thread-30798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:33:15.917 [DEBUG] [Thread-30798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:33:15.917 [DEBUG] [Thread-30798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:33:15.917 [DEBUG] [Thread-30798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:33:15.917 [DEBUG] [Thread-30798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:33:15.917 [DEBUG] [Thread-30798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:33:15.917 [DEBUG] [Thread-30798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:33:15.918 [DEBUG] [Thread-30798] [transport.py] [_log()] client lang: <none>
2026-04-16T03:33:15.918 [DEBUG] [Thread-30798] [transport.py] [_log()] server lang: <none>
2026-04-16T03:33:15.918 [DEBUG] [Thread-30798] [transport.py] [_log()] kex follows: False
2026-04-16T03:33:15.918 [DEBUG] [Thread-30798] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:33:15.918 [DEBUG] [Thread-30798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:33:15.918 [DEBUG] [Thread-30798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:33:15.918 [DEBUG] [Thread-30798] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:33:15.918 [DEBUG] [Thread-30798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:33:15.918 [DEBUG] [Thread-30798] [transport.py] [_log()] Compression: none
2026-04-16T03:33:15.918 [DEBUG] [Thread-30798] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:33:15.934 [DEBUG] [Thread-30798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:33:15.935 [DEBUG] [Thread-30798] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:33:15.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:33:15.935 [DEBUG] [Thread-30798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:33:15.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:33:15.936 [DEBUG] [Thread-30798] [transport.py] [_log()] userauth is OK
2026-04-16T03:33:15.936 [DEBUG] [Thread-30798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:33:15.936 [DEBUG] [Thread-30798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:33:15.936 [DEBUG] [Thread-30798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:33:15.936 [DEBUG] [Thread-30798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:33:15.955 [INFO] [Thread-30798] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:33:15.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:33:16.758 [DEBUG] [Thread-30798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:33:16.758 [DEBUG] [Thread-30798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:33:16.759 [DEBUG] [Thread-30798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:33:16.799 [DEBUG] [Thread-30798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:33:16.799 [DEBUG] [Thread-30798] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:33:16.802 [DEBUG] [Thread-30798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:33:16.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:33:16.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:33:16.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:33:16.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:33:16.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:33:16.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:33:16.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:33:16.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:33:16.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:33:16.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.064364 -999.00   +8.60  10.29     90   +7.10 1 1 1 3 1     0    0 1.46 -4.08 .NE.W 14.3 10.3 73.5 15.7 9.0 -25.6 8.8 -24.3 8.6 -22.0 8.9 -24.0
2026-04-16T03:33:16.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:33:16.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:33:16.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.064364
2026-04-16T03:33:16.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:33:16.825 [DEBUG] [Thread-30798] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:33:16.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:33:16.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:33:16.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:33:16.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:33:16.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:33:02', tmtdew=1.53869, humidity=90.1214, cloud=0.0, wind=13.3045, temperature=8.56597, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:32:41.050', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.6230000000000002, nan, nan, nan, nan, nan, 2.5595, 2.9289999999999994, 2.719249999999999, nan, nan, 0.28325000000000067, 0.013250000000001094, 0.11650000000000027, 0.18849999999999945, 0.23274999999999935, 0.2425000000000015, 0.125, 0.17800000000000082, 0.12100000000000044, -0.10299999999999976, -0.10875000000000057], zp_timestamp='2026-04-16T01:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:33:17.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:33:17.080 [DEBUG] [Thread-30801] [transport.py] [_log()] starting thread (client mode): 0xee9435b0
2026-04-16T03:33:17.080 [DEBUG] [Thread-30801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:33:17.094 [DEBUG] [Thread-30801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:33:17.094 [INFO] [Thread-30801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:33:17.102 [DEBUG] [Thread-30801] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:33:17.102 [DEBUG] [Thread-30801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:33:17.102 [DEBUG] [Thread-30801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:33:17.102 [DEBUG] [Thread-30801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:33:17.102 [DEBUG] [Thread-30801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:33:17.102 [DEBUG] [Thread-30801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:33:17.103 [DEBUG] [Thread-30801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:33:17.103 [DEBUG] [Thread-30801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:33:17.103 [DEBUG] [Thread-30801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:33:17.103 [DEBUG] [Thread-30801] [transport.py] [_log()] client lang: <none>
2026-04-16T03:33:17.103 [DEBUG] [Thread-30801] [transport.py] [_log()] server lang: <none>
2026-04-16T03:33:17.103 [DEBUG] [Thread-30801] [transport.py] [_log()] kex follows: False
2026-04-16T03:33:17.103 [DEBUG] [Thread-30801] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:33:17.103 [DEBUG] [Thread-30801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:33:17.103 [DEBUG] [Thread-30801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:33:17.103 [DEBUG] [Thread-30801] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:33:17.104 [DEBUG] [Thread-30801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:33:17.104 [DEBUG] [Thread-30801] [transport.py] [_log()] Compression: none
2026-04-16T03:33:17.104 [DEBUG] [Thread-30801] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:33:17.158 [DEBUG] [Thread-30801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:33:17.158 [DEBUG] [Thread-30801] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:33:17.159 [DEBUG] [Thread-30801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:33:17.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:33:17.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:33:17.215 [DEBUG] [Thread-30801] [transport.py] [_log()] userauth is OK
2026-04-16T03:33:17.215 [DEBUG] [Thread-30801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:33:17.215 [DEBUG] [Thread-30801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:33:17.216 [DEBUG] [Thread-30801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:33:17.216 [DEBUG] [Thread-30801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:33:17.241 [INFO] [Thread-30801] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:33:17.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:33:17.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:33:17.717 [DEBUG] [Thread-30803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:33:18.035 [DEBUG] [Thread-30801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:33:18.035 [DEBUG] [Thread-30801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:33:18.083 [DEBUG] [Thread-30801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:33:18.083 [DEBUG] [Thread-30801] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:33:18.092 [DEBUG] [Thread-30801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:33:18.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:33:18.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')
2026-04-16T03:33:18.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
2026-04-16T03:33:18.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:33:18.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:33:18.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:33:18.125 [DEBUG] [Thread-30801] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:33:32.760 [DEBUG] [Thread-30804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:33:47.791 [DEBUG] [Thread-30805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:33:48.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:33:48.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:33:48.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
2026-04-16T03:33:49.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 33, 37), 1.18235, 92.2096, 0.0, 15.9149, 8.29876, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:33:49.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:33:37
2026-04-16T03:33:49.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:33:50.230 [DEBUG] [Thread-30806] [transport.py] [_log()] starting thread (client mode): 0xee9430d0
2026-04-16T03:33:50.230 [DEBUG] [Thread-30806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:33:50.251 [DEBUG] [Thread-30806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:33:50.251 [INFO] [Thread-30806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:33:50.254 [DEBUG] [Thread-30806] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:33:50.254 [DEBUG] [Thread-30806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:33:50.254 [DEBUG] [Thread-30806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:33:50.254 [DEBUG] [Thread-30806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:33:50.254 [DEBUG] [Thread-30806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:33:50.254 [DEBUG] [Thread-30806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:33:50.254 [DEBUG] [Thread-30806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:33:50.255 [DEBUG] [Thread-30806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:33:50.255 [DEBUG] [Thread-30806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:33:50.255 [DEBUG] [Thread-30806] [transport.py] [_log()] client lang: <none>
2026-04-16T03:33:50.255 [DEBUG] [Thread-30806] [transport.py] [_log()] server lang: <none>
2026-04-16T03:33:50.255 [DEBUG] [Thread-30806] [transport.py] [_log()] kex follows: False
2026-04-16T03:33:50.255 [DEBUG] [Thread-30806] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:33:50.255 [DEBUG] [Thread-30806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:33:50.255 [DEBUG] [Thread-30806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:33:50.255 [DEBUG] [Thread-30806] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:33:50.255 [DEBUG] [Thread-30806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:33:50.255 [DEBUG] [Thread-30806] [transport.py] [_log()] Compression: none
2026-04-16T03:33:50.255 [DEBUG] [Thread-30806] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:33:50.270 [DEBUG] [Thread-30806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:33:50.271 [DEBUG] [Thread-30806] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:33:50.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:33:50.271 [DEBUG] [Thread-30806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:33:50.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:33:50.273 [DEBUG] [Thread-30806] [transport.py] [_log()] userauth is OK
2026-04-16T03:33:50.273 [DEBUG] [Thread-30806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:33:50.273 [DEBUG] [Thread-30806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:33:50.273 [DEBUG] [Thread-30806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:33:50.273 [DEBUG] [Thread-30806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:33:50.298 [INFO] [Thread-30806] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:33:50.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:33:51.092 [DEBUG] [Thread-30806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:33:51.092 [DEBUG] [Thread-30806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:33:51.093 [DEBUG] [Thread-30806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:33:51.133 [DEBUG] [Thread-30806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:33:51.133 [DEBUG] [Thread-30806] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:33:51.136 [DEBUG] [Thread-30806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:33:51.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:33:51.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:33:51.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:33:51.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:33:51.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:33:51.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:33:51.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:33:51.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:33:51.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:33:51.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.064712 -999.00   +8.70   9.65     90   +7.10 1 1 1 3 1     0    0 1.43 -4.40 .NE.W 11.4 9.7 103.2 16.0 9.0 -25.7 8.8 -24.3 8.6 -22.1 8.9 -24.1
2026-04-16T03:33:51.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:33:51.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:33:51.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.064712
2026-04-16T03:33:51.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:33:51.162 [DEBUG] [Thread-30806] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:33:51.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:33:51.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:33:51.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:33:51.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:33:51.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:33:37', tmtdew=1.18235, humidity=92.2096, cloud=0.0, wind=15.9149, temperature=8.29876, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:33:11.117', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.6230000000000002, nan, nan, nan, nan, nan, 2.5595, 2.9289999999999994, 2.719249999999999, nan, nan, 0.28325000000000067, 0.013250000000001094, 0.11650000000000027, 0.18849999999999945, 0.23274999999999935, 0.2425000000000015, 0.125, 0.17800000000000082, 0.12100000000000044, -0.10299999999999976, -0.10875000000000057], zp_timestamp='2026-04-16T01:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:33:51.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:33:51.433 [DEBUG] [Thread-30809] [transport.py] [_log()] starting thread (client mode): 0xee940b80
2026-04-16T03:33:51.434 [DEBUG] [Thread-30809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:33:51.448 [DEBUG] [Thread-30809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:33:51.448 [INFO] [Thread-30809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:33:51.455 [DEBUG] [Thread-30809] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:33:51.455 [DEBUG] [Thread-30809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:33:51.455 [DEBUG] [Thread-30809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:33:51.455 [DEBUG] [Thread-30809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:33:51.455 [DEBUG] [Thread-30809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:33:51.455 [DEBUG] [Thread-30809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:33:51.455 [DEBUG] [Thread-30809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:33:51.455 [DEBUG] [Thread-30809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:33:51.456 [DEBUG] [Thread-30809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:33:51.456 [DEBUG] [Thread-30809] [transport.py] [_log()] client lang: <none>
2026-04-16T03:33:51.456 [DEBUG] [Thread-30809] [transport.py] [_log()] server lang: <none>
2026-04-16T03:33:51.456 [DEBUG] [Thread-30809] [transport.py] [_log()] kex follows: False
2026-04-16T03:33:51.456 [DEBUG] [Thread-30809] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:33:51.456 [DEBUG] [Thread-30809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:33:51.456 [DEBUG] [Thread-30809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:33:51.456 [DEBUG] [Thread-30809] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:33:51.456 [DEBUG] [Thread-30809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:33:51.456 [DEBUG] [Thread-30809] [transport.py] [_log()] Compression: none
2026-04-16T03:33:51.456 [DEBUG] [Thread-30809] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:33:51.514 [DEBUG] [Thread-30809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:33:51.514 [DEBUG] [Thread-30809] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:33:51.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:33:51.515 [DEBUG] [Thread-30809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:33:51.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:33:51.571 [DEBUG] [Thread-30809] [transport.py] [_log()] userauth is OK
2026-04-16T03:33:51.571 [DEBUG] [Thread-30809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:33:51.571 [DEBUG] [Thread-30809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:33:51.571 [DEBUG] [Thread-30809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:33:51.571 [DEBUG] [Thread-30809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:33:51.589 [INFO] [Thread-30809] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:33:51.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:33:51.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:33:52.409 [DEBUG] [Thread-30809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:33:52.410 [DEBUG] [Thread-30809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:33:52.457 [DEBUG] [Thread-30809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:33:52.458 [DEBUG] [Thread-30809] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:33:52.466 [DEBUG] [Thread-30809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:33:52.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:33:52.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')
2026-04-16T03:33:52.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
2026-04-16T03:33:52.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:33:52.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:33:52.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:33:52.497 [DEBUG] [Thread-30809] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:34:02.821 [DEBUG] [Thread-30811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:34:04.676 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:34:04.678 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:34:14.777 [DEBUG] [Thread-30812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:34:17.866 [DEBUG] [Thread-30813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:34:22.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:34:22.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:34:22.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
2026-04-16T03:34:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 34, 13), 1.54385, 90.0879, 0.0, 13.3574, 8.5492, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:34:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:34:13
2026-04-16T03:34:24.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:34:24.599 [DEBUG] [Thread-30814] [transport.py] [_log()] starting thread (client mode): 0xee942d70
2026-04-16T03:34:24.599 [DEBUG] [Thread-30814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:34:24.620 [DEBUG] [Thread-30814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:34:24.620 [INFO] [Thread-30814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:34:24.623 [DEBUG] [Thread-30814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:34:24.623 [DEBUG] [Thread-30814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:34:24.623 [DEBUG] [Thread-30814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:34:24.623 [DEBUG] [Thread-30814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:34:24.623 [DEBUG] [Thread-30814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:34:24.623 [DEBUG] [Thread-30814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:34:24.623 [DEBUG] [Thread-30814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:34:24.623 [DEBUG] [Thread-30814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:34:24.623 [DEBUG] [Thread-30814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:34:24.623 [DEBUG] [Thread-30814] [transport.py] [_log()] client lang: <none>
2026-04-16T03:34:24.624 [DEBUG] [Thread-30814] [transport.py] [_log()] server lang: <none>
2026-04-16T03:34:24.624 [DEBUG] [Thread-30814] [transport.py] [_log()] kex follows: False
2026-04-16T03:34:24.624 [DEBUG] [Thread-30814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:34:24.624 [DEBUG] [Thread-30814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:34:24.624 [DEBUG] [Thread-30814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:34:24.624 [DEBUG] [Thread-30814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:34:24.624 [DEBUG] [Thread-30814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:34:24.624 [DEBUG] [Thread-30814] [transport.py] [_log()] Compression: none
2026-04-16T03:34:24.624 [DEBUG] [Thread-30814] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:34:24.642 [DEBUG] [Thread-30814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:34:24.642 [DEBUG] [Thread-30814] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:34:24.643 [DEBUG] [Thread-30814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:34:24.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:34:24.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:34:24.684 [DEBUG] [Thread-30814] [transport.py] [_log()] userauth is OK
2026-04-16T03:34:24.685 [DEBUG] [Thread-30814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:34:24.685 [DEBUG] [Thread-30814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:34:24.685 [DEBUG] [Thread-30814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:34:24.685 [DEBUG] [Thread-30814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:34:24.708 [INFO] [Thread-30814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:34:24.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:34:25.521 [DEBUG] [Thread-30814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:34:25.522 [DEBUG] [Thread-30814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:34:25.522 [DEBUG] [Thread-30814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:34:25.562 [DEBUG] [Thread-30814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:34:25.562 [DEBUG] [Thread-30814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:34:25.565 [DEBUG] [Thread-30814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:34:25.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:34:25.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:34:25.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:34:25.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:34:25.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:34:25.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:34:25.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:34:25.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:34:25.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:34:25.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.065059 -999.00   +8.70  14.65     90   +7.10 1 1 1 3 1     0    0 1.45 -4.17 .NE.W 13.7 14.7 67.0 16.7 9.0 -25.5 8.8 -24.3 8.6 -22.1 8.9 -24.1
2026-04-16T03:34:25.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:34:25.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:34:25.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.065059
2026-04-16T03:34:25.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:34:25.590 [DEBUG] [Thread-30814] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:34:25.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:34:25.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:34:25.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:34:25.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:34:25.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:34:13', tmtdew=1.54385, humidity=90.0879, cloud=0.0, wind=13.3574, temperature=8.5492, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:33:41.098', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.6230000000000002, nan, nan, nan, nan, nan, 2.5595, 2.9289999999999994, 2.719249999999999, nan, nan, 0.28325000000000067, 0.013250000000001094, 0.11650000000000027, 0.18849999999999945, 0.23274999999999935, 0.2425000000000015, 0.125, 0.17800000000000082, 0.12100000000000044, -0.10299999999999976, -0.10875000000000057], zp_timestamp='2026-04-16T01:31:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:34:25.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:34:25.846 [DEBUG] [Thread-30817] [transport.py] [_log()] starting thread (client mode): 0xee940eb0
2026-04-16T03:34:25.846 [DEBUG] [Thread-30817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:34:25.861 [DEBUG] [Thread-30817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:34:25.861 [INFO] [Thread-30817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:34:25.869 [DEBUG] [Thread-30817] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:34:25.869 [DEBUG] [Thread-30817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:34:25.869 [DEBUG] [Thread-30817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:34:25.869 [DEBUG] [Thread-30817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:34:25.869 [DEBUG] [Thread-30817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:34:25.869 [DEBUG] [Thread-30817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:34:25.869 [DEBUG] [Thread-30817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:34:25.869 [DEBUG] [Thread-30817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:34:25.870 [DEBUG] [Thread-30817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:34:25.870 [DEBUG] [Thread-30817] [transport.py] [_log()] client lang: <none>
2026-04-16T03:34:25.870 [DEBUG] [Thread-30817] [transport.py] [_log()] server lang: <none>
2026-04-16T03:34:25.870 [DEBUG] [Thread-30817] [transport.py] [_log()] kex follows: False
2026-04-16T03:34:25.870 [DEBUG] [Thread-30817] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:34:25.870 [DEBUG] [Thread-30817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:34:25.870 [DEBUG] [Thread-30817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:34:25.870 [DEBUG] [Thread-30817] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:34:25.870 [DEBUG] [Thread-30817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:34:25.870 [DEBUG] [Thread-30817] [transport.py] [_log()] Compression: none
2026-04-16T03:34:25.870 [DEBUG] [Thread-30817] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:34:25.926 [DEBUG] [Thread-30817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:34:25.926 [DEBUG] [Thread-30817] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:34:25.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:34:25.927 [DEBUG] [Thread-30817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:34:25.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:34:25.983 [DEBUG] [Thread-30817] [transport.py] [_log()] userauth is OK
2026-04-16T03:34:25.984 [DEBUG] [Thread-30817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:34:25.984 [DEBUG] [Thread-30817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:34:25.984 [DEBUG] [Thread-30817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:34:25.984 [DEBUG] [Thread-30817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:34:26.010 [INFO] [Thread-30817] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:34:26.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:34:26.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:34:26.852 [DEBUG] [Thread-30817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:34:26.852 [DEBUG] [Thread-30817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:34:26.900 [DEBUG] [Thread-30817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:34:26.900 [DEBUG] [Thread-30817] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:34:26.909 [DEBUG] [Thread-30817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:34:26.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:34:26.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')
2026-04-16T03:34:26.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
2026-04-16T03:34:26.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:34:26.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:34:26.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:34:26.943 [DEBUG] [Thread-30817] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:34:32.896 [DEBUG] [Thread-30819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:34:47.940 [DEBUG] [Thread-30820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:34:56.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:34:56.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:34:56.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T03:34:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 34, 48), 1.18239, 92.2094, 0.0, 16.1971, 8.29862, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:34:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:34:48
2026-04-16T03:34:58.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:34:59.071 [DEBUG] [Thread-30821] [transport.py] [_log()] starting thread (client mode): 0xee943fa0
2026-04-16T03:34:59.071 [DEBUG] [Thread-30821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:34:59.091 [DEBUG] [Thread-30821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:34:59.091 [INFO] [Thread-30821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:34:59.092 [DEBUG] [Thread-30821] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:34:59.092 [DEBUG] [Thread-30821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:34:59.092 [DEBUG] [Thread-30821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:34:59.092 [DEBUG] [Thread-30821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:34:59.092 [DEBUG] [Thread-30821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:34:59.092 [DEBUG] [Thread-30821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:34:59.092 [DEBUG] [Thread-30821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:34:59.092 [DEBUG] [Thread-30821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:34:59.093 [DEBUG] [Thread-30821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:34:59.093 [DEBUG] [Thread-30821] [transport.py] [_log()] client lang: <none>
2026-04-16T03:34:59.093 [DEBUG] [Thread-30821] [transport.py] [_log()] server lang: <none>
2026-04-16T03:34:59.093 [DEBUG] [Thread-30821] [transport.py] [_log()] kex follows: False
2026-04-16T03:34:59.093 [DEBUG] [Thread-30821] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:34:59.093 [DEBUG] [Thread-30821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:34:59.093 [DEBUG] [Thread-30821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:34:59.093 [DEBUG] [Thread-30821] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:34:59.093 [DEBUG] [Thread-30821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:34:59.093 [DEBUG] [Thread-30821] [transport.py] [_log()] Compression: none
2026-04-16T03:34:59.093 [DEBUG] [Thread-30821] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:34:59.110 [DEBUG] [Thread-30821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:34:59.111 [DEBUG] [Thread-30821] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:34:59.111 [DEBUG] [Thread-30821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:34:59.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:34:59.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:34:59.112 [DEBUG] [Thread-30821] [transport.py] [_log()] userauth is OK
2026-04-16T03:34:59.113 [DEBUG] [Thread-30821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:34:59.113 [DEBUG] [Thread-30821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:34:59.113 [DEBUG] [Thread-30821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:34:59.113 [DEBUG] [Thread-30821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:34:59.137 [INFO] [Thread-30821] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:34:59.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:34:59.938 [DEBUG] [Thread-30821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:34:59.939 [DEBUG] [Thread-30821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:34:59.940 [DEBUG] [Thread-30821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:34:59.979 [DEBUG] [Thread-30821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:34:59.979 [DEBUG] [Thread-30821] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:34:59.982 [DEBUG] [Thread-30821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:34:59.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:34:59.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:34:59.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:34:59.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:35:00.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:35:00.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:35:00.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:35:00.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:35:00.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:35:00.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.065406 -999.00   +8.70   9.54     90   +7.10 1 1 1 3 1     0    0 1.44 -4.26 .NE.. 8.1 9.5 71.9 14.9 9.0 -25.6 8.8 -24.1 8.6 -22.0 8.9 -24.2
2026-04-16T03:35:00.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:35:00.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:35:00.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.065406
2026-04-16T03:35:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:35:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:35:00.007 [DEBUG] [Thread-30821] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:35:00.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:35:00.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:35:00.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:35:00.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:34:48', tmtdew=1.18239, humidity=92.2094, cloud=0.0, wind=16.1971, temperature=8.29862, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:34:11.078', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.6230000000000002, nan, nan, nan, nan, nan, 2.5595, 2.9289999999999994, 2.719249999999999, nan, nan, 0.28325000000000067, 0.013250000000001094, 0.11650000000000027, 0.18849999999999945, 0.23274999999999935, 0.2425000000000015, 0.125, 0.17800000000000082, 0.12100000000000044, -0.10299999999999976, -0.10875000000000057], zp_timestamp='2026-04-16T01:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:35:00.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:35:00.263 [DEBUG] [Thread-30824] [transport.py] [_log()] starting thread (client mode): 0xee9408e0
2026-04-16T03:35:00.263 [DEBUG] [Thread-30824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:35:00.277 [DEBUG] [Thread-30824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:35:00.277 [INFO] [Thread-30824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:35:00.284 [DEBUG] [Thread-30824] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:35:00.285 [DEBUG] [Thread-30824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:35:00.285 [DEBUG] [Thread-30824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:35:00.285 [DEBUG] [Thread-30824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:35:00.285 [DEBUG] [Thread-30824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:35:00.285 [DEBUG] [Thread-30824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:35:00.285 [DEBUG] [Thread-30824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:35:00.285 [DEBUG] [Thread-30824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:35:00.285 [DEBUG] [Thread-30824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:35:00.285 [DEBUG] [Thread-30824] [transport.py] [_log()] client lang: <none>
2026-04-16T03:35:00.285 [DEBUG] [Thread-30824] [transport.py] [_log()] server lang: <none>
2026-04-16T03:35:00.285 [DEBUG] [Thread-30824] [transport.py] [_log()] kex follows: False
2026-04-16T03:35:00.285 [DEBUG] [Thread-30824] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:35:00.286 [DEBUG] [Thread-30824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:35:00.286 [DEBUG] [Thread-30824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:35:00.286 [DEBUG] [Thread-30824] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:35:00.286 [DEBUG] [Thread-30824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:35:00.286 [DEBUG] [Thread-30824] [transport.py] [_log()] Compression: none
2026-04-16T03:35:00.286 [DEBUG] [Thread-30824] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:35:00.342 [DEBUG] [Thread-30824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:35:00.343 [DEBUG] [Thread-30824] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:35:00.343 [DEBUG] [Thread-30824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:35:00.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:35:00.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:35:00.399 [DEBUG] [Thread-30824] [transport.py] [_log()] userauth is OK
2026-04-16T03:35:00.399 [DEBUG] [Thread-30824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:35:00.399 [DEBUG] [Thread-30824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:35:00.400 [DEBUG] [Thread-30824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:35:00.400 [DEBUG] [Thread-30824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:35:00.425 [INFO] [Thread-30824] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:35:00.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:35:00.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:35:01.220 [DEBUG] [Thread-30824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:35:01.220 [DEBUG] [Thread-30824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:35:01.268 [DEBUG] [Thread-30824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:35:01.268 [DEBUG] [Thread-30824] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:35:01.277 [DEBUG] [Thread-30824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:35:01.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:35:01.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')
2026-04-16T03:35:01.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
2026-04-16T03:35:01.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:35:01.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:35:01.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:35:01.311 [DEBUG] [Thread-30824] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:35:02.972 [DEBUG] [Thread-30826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:35:04.881 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:35:04.882 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:35:14.944 [DEBUG] [Thread-30827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:35:18.018 [DEBUG] [Thread-30828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:35:31.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:35:31.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:35:31.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
2026-04-16T03:35:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 35, 24), 1.54133, 90.1047, 0.0, 11.9279, 8.5659, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:35:32.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:35:24
2026-04-16T03:35:32.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:35:33.049 [DEBUG] [Thread-30829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:35:33.417 [DEBUG] [Thread-30830] [transport.py] [_log()] starting thread (client mode): 0xee9415d0
2026-04-16T03:35:33.417 [DEBUG] [Thread-30830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:35:33.437 [DEBUG] [Thread-30830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:35:33.437 [INFO] [Thread-30830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:35:33.440 [DEBUG] [Thread-30830] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:35:33.440 [DEBUG] [Thread-30830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:35:33.440 [DEBUG] [Thread-30830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:35:33.440 [DEBUG] [Thread-30830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:35:33.440 [DEBUG] [Thread-30830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:35:33.441 [DEBUG] [Thread-30830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:35:33.441 [DEBUG] [Thread-30830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:35:33.441 [DEBUG] [Thread-30830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:35:33.441 [DEBUG] [Thread-30830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:35:33.441 [DEBUG] [Thread-30830] [transport.py] [_log()] client lang: <none>
2026-04-16T03:35:33.441 [DEBUG] [Thread-30830] [transport.py] [_log()] server lang: <none>
2026-04-16T03:35:33.441 [DEBUG] [Thread-30830] [transport.py] [_log()] kex follows: False
2026-04-16T03:35:33.441 [DEBUG] [Thread-30830] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:35:33.441 [DEBUG] [Thread-30830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:35:33.441 [DEBUG] [Thread-30830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:35:33.442 [DEBUG] [Thread-30830] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:35:33.442 [DEBUG] [Thread-30830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:35:33.442 [DEBUG] [Thread-30830] [transport.py] [_log()] Compression: none
2026-04-16T03:35:33.442 [DEBUG] [Thread-30830] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:35:33.459 [DEBUG] [Thread-30830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:35:33.459 [DEBUG] [Thread-30830] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:35:33.459 [DEBUG] [Thread-30830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:35:33.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:35:33.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:35:33.461 [DEBUG] [Thread-30830] [transport.py] [_log()] userauth is OK
2026-04-16T03:35:33.461 [DEBUG] [Thread-30830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:35:33.461 [DEBUG] [Thread-30830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:35:33.461 [DEBUG] [Thread-30830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:35:33.461 [DEBUG] [Thread-30830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:35:33.486 [INFO] [Thread-30830] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:35:33.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:35:34.357 [DEBUG] [Thread-30830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:35:34.357 [DEBUG] [Thread-30830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:35:34.357 [DEBUG] [Thread-30830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:35:34.397 [DEBUG] [Thread-30830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:35:34.398 [DEBUG] [Thread-30830] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:35:34.400 [DEBUG] [Thread-30830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:35:34.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:35:34.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:35:34.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:35:34.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:35:34.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:35:34.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:35:34.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:35:34.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:35:34.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:35:34.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.065753 -999.00   +8.70   5.61     90   +7.10 1 1 1 3 1     0    0 1.43 -3.79 .NE.. 6.3 5.6 95.5 15.7 9.0 -25.5 8.8 -24.3 8.6 -22.1 8.8 -24.3
2026-04-16T03:35:34.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:35:34.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:35:34.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.065753
2026-04-16T03:35:34.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:35:34.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:35:34.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:35:34.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:35:34.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:35:34.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:35:24', tmtdew=1.54133, humidity=90.1047, cloud=0.0, wind=11.9279, temperature=8.5659, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:34:41.059', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.6230000000000002, nan, nan, nan, nan, nan, 2.5595, 2.9289999999999994, 2.719249999999999, nan, nan, 0.28325000000000067, 0.013250000000001094, 0.11650000000000027, 0.18849999999999945, 0.23274999999999935, 0.2425000000000015, 0.125, 0.17800000000000082, 0.12100000000000044, -0.10299999999999976, -0.10875000000000057], zp_timestamp='2026-04-16T01:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:35:34.422 [DEBUG] [Thread-30830] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:35:34.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:35:34.669 [DEBUG] [Thread-30833] [transport.py] [_log()] starting thread (client mode): 0xee943c40
2026-04-16T03:35:34.669 [DEBUG] [Thread-30833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:35:34.686 [DEBUG] [Thread-30833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:35:34.686 [INFO] [Thread-30833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:35:34.698 [DEBUG] [Thread-30833] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:35:34.698 [DEBUG] [Thread-30833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:35:34.698 [DEBUG] [Thread-30833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:35:34.698 [DEBUG] [Thread-30833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:35:34.698 [DEBUG] [Thread-30833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:35:34.698 [DEBUG] [Thread-30833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:35:34.698 [DEBUG] [Thread-30833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:35:34.698 [DEBUG] [Thread-30833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:35:34.699 [DEBUG] [Thread-30833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:35:34.699 [DEBUG] [Thread-30833] [transport.py] [_log()] client lang: <none>
2026-04-16T03:35:34.699 [DEBUG] [Thread-30833] [transport.py] [_log()] server lang: <none>
2026-04-16T03:35:34.699 [DEBUG] [Thread-30833] [transport.py] [_log()] kex follows: False
2026-04-16T03:35:34.699 [DEBUG] [Thread-30833] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:35:34.699 [DEBUG] [Thread-30833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:35:34.699 [DEBUG] [Thread-30833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:35:34.699 [DEBUG] [Thread-30833] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:35:34.699 [DEBUG] [Thread-30833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:35:34.699 [DEBUG] [Thread-30833] [transport.py] [_log()] Compression: none
2026-04-16T03:35:34.699 [DEBUG] [Thread-30833] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:35:34.751 [DEBUG] [Thread-30833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:35:34.751 [DEBUG] [Thread-30833] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:35:34.751 [DEBUG] [Thread-30833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:35:34.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:35:34.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:35:34.808 [DEBUG] [Thread-30833] [transport.py] [_log()] userauth is OK
2026-04-16T03:35:34.808 [DEBUG] [Thread-30833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:35:34.808 [DEBUG] [Thread-30833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:35:34.809 [DEBUG] [Thread-30833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:35:34.809 [DEBUG] [Thread-30833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:35:34.834 [INFO] [Thread-30833] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:35:34.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:35:34.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:35:35.621 [DEBUG] [Thread-30833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:35:35.622 [DEBUG] [Thread-30833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:35:35.670 [DEBUG] [Thread-30833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:35:35.670 [DEBUG] [Thread-30833] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:35:35.679 [DEBUG] [Thread-30833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:35:35.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:35:35.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')
2026-04-16T03:35:35.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
2026-04-16T03:35:35.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:35:35.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:35:35.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:35:35.715 [DEBUG] [Thread-30833] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:35:48.079 [DEBUG] [Thread-30835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:36:03.131 [DEBUG] [Thread-30836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:36:05.085 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:36:05.086 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:36:05.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:36:05.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:36:05.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
2026-04-16T03:36:07.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 35, 59), 1.5387, 90.1213, 0.0, 15.4397, 8.5659, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:36:07.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:35:59
2026-04-16T03:36:07.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:36:07.912 [DEBUG] [Thread-30837] [transport.py] [_log()] starting thread (client mode): 0xee9422c0
2026-04-16T03:36:07.913 [DEBUG] [Thread-30837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:36:07.932 [DEBUG] [Thread-30837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:36:07.932 [INFO] [Thread-30837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:36:07.936 [DEBUG] [Thread-30837] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:36:07.936 [DEBUG] [Thread-30837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:36:07.936 [DEBUG] [Thread-30837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:36:07.936 [DEBUG] [Thread-30837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:36:07.936 [DEBUG] [Thread-30837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:36:07.936 [DEBUG] [Thread-30837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:36:07.936 [DEBUG] [Thread-30837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:36:07.936 [DEBUG] [Thread-30837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:36:07.936 [DEBUG] [Thread-30837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:36:07.936 [DEBUG] [Thread-30837] [transport.py] [_log()] client lang: <none>
2026-04-16T03:36:07.937 [DEBUG] [Thread-30837] [transport.py] [_log()] server lang: <none>
2026-04-16T03:36:07.937 [DEBUG] [Thread-30837] [transport.py] [_log()] kex follows: False
2026-04-16T03:36:07.937 [DEBUG] [Thread-30837] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:36:07.937 [DEBUG] [Thread-30837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:36:07.937 [DEBUG] [Thread-30837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:36:07.937 [DEBUG] [Thread-30837] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:36:07.937 [DEBUG] [Thread-30837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:36:07.937 [DEBUG] [Thread-30837] [transport.py] [_log()] Compression: none
2026-04-16T03:36:07.937 [DEBUG] [Thread-30837] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:36:07.954 [DEBUG] [Thread-30837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:36:07.955 [DEBUG] [Thread-30837] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:36:07.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:36:07.955 [DEBUG] [Thread-30837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:36:07.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:36:07.956 [DEBUG] [Thread-30837] [transport.py] [_log()] userauth is OK
2026-04-16T03:36:07.956 [DEBUG] [Thread-30837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:36:07.956 [DEBUG] [Thread-30837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:36:07.957 [DEBUG] [Thread-30837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:36:07.957 [DEBUG] [Thread-30837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:36:07.975 [INFO] [Thread-30837] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:36:07.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:36:08.768 [DEBUG] [Thread-30837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:36:08.768 [DEBUG] [Thread-30837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:36:08.769 [DEBUG] [Thread-30837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:36:08.810 [DEBUG] [Thread-30837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:36:08.810 [DEBUG] [Thread-30837] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:36:08.813 [DEBUG] [Thread-30837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:36:08.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:36:08.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:36:08.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:36:08.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:36:08.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:36:08.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:36:08.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:36:08.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:36:08.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:36:08.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.066447 -999.00   +8.60  12.76     90   +7.10 1 1 1 3 1     0    0 1.42 -3.97 .NE.. 10.8 12.8 70.0 14.7 9.0 -25.7 8.9 -24.4 8.6 -22.1 8.8 -24.1
2026-04-16T03:36:08.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:36:08.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:36:08.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.066447
2026-04-16T03:36:08.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:36:08.833 [DEBUG] [Thread-30837] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:36:08.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:36:08.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:36:08.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:36:08.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:36:08.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:35:59', tmtdew=1.5387, humidity=90.1213, cloud=0.0, wind=15.4397, temperature=8.5659, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:35:41.021', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.6230000000000002, nan, nan, nan, nan, nan, 2.5595, 2.9289999999999994, 2.719249999999999, nan, nan, 0.28325000000000067, 0.013250000000001094, 0.11650000000000027, 0.18849999999999945, 0.23274999999999935, 0.2425000000000015, 0.125, 0.17800000000000082, 0.12100000000000044, -0.10299999999999976, -0.10875000000000057], zp_timestamp='2026-04-16T01:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:36:09.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:36:09.080 [DEBUG] [Thread-30840] [transport.py] [_log()] starting thread (client mode): 0xee941a20
2026-04-16T03:36:09.080 [DEBUG] [Thread-30840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:36:09.094 [DEBUG] [Thread-30840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:36:09.094 [INFO] [Thread-30840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:36:09.101 [DEBUG] [Thread-30840] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:36:09.101 [DEBUG] [Thread-30840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:36:09.102 [DEBUG] [Thread-30840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:36:09.102 [DEBUG] [Thread-30840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:36:09.102 [DEBUG] [Thread-30840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:36:09.102 [DEBUG] [Thread-30840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:36:09.102 [DEBUG] [Thread-30840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:36:09.102 [DEBUG] [Thread-30840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:36:09.102 [DEBUG] [Thread-30840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:36:09.102 [DEBUG] [Thread-30840] [transport.py] [_log()] client lang: <none>
2026-04-16T03:36:09.102 [DEBUG] [Thread-30840] [transport.py] [_log()] server lang: <none>
2026-04-16T03:36:09.102 [DEBUG] [Thread-30840] [transport.py] [_log()] kex follows: False
2026-04-16T03:36:09.102 [DEBUG] [Thread-30840] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:36:09.103 [DEBUG] [Thread-30840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:36:09.103 [DEBUG] [Thread-30840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:36:09.103 [DEBUG] [Thread-30840] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:36:09.103 [DEBUG] [Thread-30840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:36:09.103 [DEBUG] [Thread-30840] [transport.py] [_log()] Compression: none
2026-04-16T03:36:09.103 [DEBUG] [Thread-30840] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:36:09.159 [DEBUG] [Thread-30840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:36:09.159 [DEBUG] [Thread-30840] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:36:09.160 [DEBUG] [Thread-30840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:36:09.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:36:09.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:36:09.216 [DEBUG] [Thread-30840] [transport.py] [_log()] userauth is OK
2026-04-16T03:36:09.216 [DEBUG] [Thread-30840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:36:09.216 [DEBUG] [Thread-30840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:36:09.216 [DEBUG] [Thread-30840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:36:09.216 [DEBUG] [Thread-30840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:36:09.241 [INFO] [Thread-30840] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:36:09.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:36:09.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:36:10.073 [DEBUG] [Thread-30840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:36:10.074 [DEBUG] [Thread-30840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:36:10.121 [DEBUG] [Thread-30840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:36:10.121 [DEBUG] [Thread-30840] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:36:10.130 [DEBUG] [Thread-30840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:36:10.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:36:10.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')
2026-04-16T03:36:10.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
2026-04-16T03:36:10.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:36:10.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:36:10.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:36:10.165 [DEBUG] [Thread-30840] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:36:15.111 [DEBUG] [Thread-30842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:36:18.162 [DEBUG] [Thread-30843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:36:33.204 [DEBUG] [Thread-30844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:36:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:36:40.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:36:40.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
2026-04-16T03:36:41.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 35, 59), 1.5387, 90.1213, 0.0, 15.4397, 8.5659, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:36:41.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:35:59
2026-04-16T03:36:41.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:36:42.285 [DEBUG] [Thread-30845] [transport.py] [_log()] starting thread (client mode): 0xee941c30
2026-04-16T03:36:42.285 [DEBUG] [Thread-30845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:36:42.304 [DEBUG] [Thread-30845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:36:42.305 [INFO] [Thread-30845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:36:42.308 [DEBUG] [Thread-30845] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:36:42.308 [DEBUG] [Thread-30845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:36:42.308 [DEBUG] [Thread-30845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:36:42.308 [DEBUG] [Thread-30845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:36:42.308 [DEBUG] [Thread-30845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:36:42.309 [DEBUG] [Thread-30845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:36:42.309 [DEBUG] [Thread-30845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:36:42.309 [DEBUG] [Thread-30845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:36:42.309 [DEBUG] [Thread-30845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:36:42.309 [DEBUG] [Thread-30845] [transport.py] [_log()] client lang: <none>
2026-04-16T03:36:42.309 [DEBUG] [Thread-30845] [transport.py] [_log()] server lang: <none>
2026-04-16T03:36:42.309 [DEBUG] [Thread-30845] [transport.py] [_log()] kex follows: False
2026-04-16T03:36:42.309 [DEBUG] [Thread-30845] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:36:42.309 [DEBUG] [Thread-30845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:36:42.309 [DEBUG] [Thread-30845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:36:42.309 [DEBUG] [Thread-30845] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:36:42.309 [DEBUG] [Thread-30845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:36:42.310 [DEBUG] [Thread-30845] [transport.py] [_log()] Compression: none
2026-04-16T03:36:42.310 [DEBUG] [Thread-30845] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:36:42.318 [DEBUG] [Thread-30845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:36:42.318 [DEBUG] [Thread-30845] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:36:42.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:36:42.319 [DEBUG] [Thread-30845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:36:42.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:36:42.320 [DEBUG] [Thread-30845] [transport.py] [_log()] userauth is OK
2026-04-16T03:36:42.320 [DEBUG] [Thread-30845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:36:42.320 [DEBUG] [Thread-30845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:36:42.320 [DEBUG] [Thread-30845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:36:42.320 [DEBUG] [Thread-30845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:36:42.339 [INFO] [Thread-30845] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:36:42.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:36:43.110 [DEBUG] [Thread-30845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:36:43.110 [DEBUG] [Thread-30845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:36:43.111 [DEBUG] [Thread-30845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:36:43.151 [DEBUG] [Thread-30845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:36:43.151 [DEBUG] [Thread-30845] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:36:43.154 [DEBUG] [Thread-30845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:36:43.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:36:43.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:36:43.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:36:43.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:36:43.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:36:43.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:36:43.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:36:43.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:36:43.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:36:43.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.066795 -999.00   +8.60  14.26     90   +7.10 1 1 1 3 1     0    0 1.45 -4.14 .NE.. 7.6 14.3 65.8 14.9 9.0 -25.5 8.8 -24.3 8.6 -22.1 8.9 -24.3
2026-04-16T03:36:43.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:36:43.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:36:43.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.066795
2026-04-16T03:36:43.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:36:43.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:36:43.181 [DEBUG] [Thread-30845] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:36:43.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:36:43.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:36:43.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:36:43.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:35:59', tmtdew=1.5387, humidity=90.1213, cloud=0.0, wind=15.4397, temperature=8.5659, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:36:11.088', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.6230000000000002, nan, nan, nan, nan, nan, 2.5595, 2.9289999999999994, 2.719249999999999, nan, nan, 0.28325000000000067, 0.013250000000001094, 0.11650000000000027, 0.18849999999999945, 0.23274999999999935, 0.2425000000000015, 0.125, 0.17800000000000082, 0.12100000000000044, -0.10299999999999976, -0.10875000000000057], zp_timestamp='2026-04-16T01:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:36:43.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:36:43.440 [DEBUG] [Thread-30848] [transport.py] [_log()] starting thread (client mode): 0xee940e20
2026-04-16T03:36:43.441 [DEBUG] [Thread-30848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:36:43.454 [DEBUG] [Thread-30848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:36:43.454 [INFO] [Thread-30848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:36:43.462 [DEBUG] [Thread-30848] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:36:43.462 [DEBUG] [Thread-30848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:36:43.462 [DEBUG] [Thread-30848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:36:43.462 [DEBUG] [Thread-30848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:36:43.462 [DEBUG] [Thread-30848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:36:43.462 [DEBUG] [Thread-30848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:36:43.462 [DEBUG] [Thread-30848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:36:43.463 [DEBUG] [Thread-30848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:36:43.463 [DEBUG] [Thread-30848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:36:43.463 [DEBUG] [Thread-30848] [transport.py] [_log()] client lang: <none>
2026-04-16T03:36:43.463 [DEBUG] [Thread-30848] [transport.py] [_log()] server lang: <none>
2026-04-16T03:36:43.463 [DEBUG] [Thread-30848] [transport.py] [_log()] kex follows: False
2026-04-16T03:36:43.463 [DEBUG] [Thread-30848] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:36:43.463 [DEBUG] [Thread-30848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:36:43.463 [DEBUG] [Thread-30848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:36:43.463 [DEBUG] [Thread-30848] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:36:43.463 [DEBUG] [Thread-30848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:36:43.463 [DEBUG] [Thread-30848] [transport.py] [_log()] Compression: none
2026-04-16T03:36:43.463 [DEBUG] [Thread-30848] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:36:43.518 [DEBUG] [Thread-30848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:36:43.519 [DEBUG] [Thread-30848] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:36:43.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:36:43.520 [DEBUG] [Thread-30848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:36:43.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:36:43.576 [DEBUG] [Thread-30848] [transport.py] [_log()] userauth is OK
2026-04-16T03:36:43.576 [DEBUG] [Thread-30848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:36:43.576 [DEBUG] [Thread-30848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:36:43.577 [DEBUG] [Thread-30848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:36:43.577 [DEBUG] [Thread-30848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:36:43.601 [INFO] [Thread-30848] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:36:43.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:36:43.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:36:44.438 [DEBUG] [Thread-30848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:36:44.438 [DEBUG] [Thread-30848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:36:44.486 [DEBUG] [Thread-30848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:36:44.486 [DEBUG] [Thread-30848] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:36:44.495 [DEBUG] [Thread-30848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:36:44.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:36:44.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')
2026-04-16T03:36:44.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
2026-04-16T03:36:44.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:36:44.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:36:44.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:36:44.530 [DEBUG] [Thread-30848] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:36:48.235 [DEBUG] [Thread-30850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:37:03.279 [DEBUG] [Thread-30851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:37:05.292 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:37:05.294 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:37:14.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:37:14.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:37:14.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
2026-04-16T03:37:15.278 [DEBUG] [Thread-30852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:37:15.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 36, 35), 1.18206, 92.2096, 0.0, 16.7263, 8.2656, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:37:15.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:36:35
2026-04-16T03:37:16.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:37:16.657 [DEBUG] [Thread-30853] [transport.py] [_log()] starting thread (client mode): 0xee943f70
2026-04-16T03:37:16.657 [DEBUG] [Thread-30853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:37:16.680 [DEBUG] [Thread-30853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:37:16.680 [INFO] [Thread-30853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:37:16.683 [DEBUG] [Thread-30853] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:37:16.683 [DEBUG] [Thread-30853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:37:16.684 [DEBUG] [Thread-30853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:37:16.684 [DEBUG] [Thread-30853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:37:16.684 [DEBUG] [Thread-30853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:37:16.684 [DEBUG] [Thread-30853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:37:16.684 [DEBUG] [Thread-30853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:37:16.684 [DEBUG] [Thread-30853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:37:16.684 [DEBUG] [Thread-30853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:37:16.684 [DEBUG] [Thread-30853] [transport.py] [_log()] client lang: <none>
2026-04-16T03:37:16.684 [DEBUG] [Thread-30853] [transport.py] [_log()] server lang: <none>
2026-04-16T03:37:16.684 [DEBUG] [Thread-30853] [transport.py] [_log()] kex follows: False
2026-04-16T03:37:16.684 [DEBUG] [Thread-30853] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:37:16.685 [DEBUG] [Thread-30853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:37:16.685 [DEBUG] [Thread-30853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:37:16.685 [DEBUG] [Thread-30853] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:37:16.685 [DEBUG] [Thread-30853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:37:16.685 [DEBUG] [Thread-30853] [transport.py] [_log()] Compression: none
2026-04-16T03:37:16.685 [DEBUG] [Thread-30853] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:37:16.701 [DEBUG] [Thread-30853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:37:16.701 [DEBUG] [Thread-30853] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:37:16.702 [DEBUG] [Thread-30853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:37:16.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:37:16.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:37:16.703 [DEBUG] [Thread-30853] [transport.py] [_log()] userauth is OK
2026-04-16T03:37:16.703 [DEBUG] [Thread-30853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:37:16.703 [DEBUG] [Thread-30853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:37:16.703 [DEBUG] [Thread-30853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:37:16.704 [DEBUG] [Thread-30853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:37:16.728 [INFO] [Thread-30853] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:37:16.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:37:17.544 [DEBUG] [Thread-30853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:37:17.545 [DEBUG] [Thread-30853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:37:17.545 [DEBUG] [Thread-30853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:37:17.585 [DEBUG] [Thread-30853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:37:17.585 [DEBUG] [Thread-30853] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:37:17.588 [DEBUG] [Thread-30853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:37:17.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:37:17.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:37:17.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:37:17.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:37:17.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:37:17.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:37:17.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:37:17.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:37:17.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:37:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.067142 -999.00   +8.60  10.55     90   +7.10 1 1 1 3 1     0    0 1.44 -4.35 .NE.. 10.4 10.6 79.8 14.9 8.9 -25.5 8.8 -24.2 8.6 -22.1 8.9 -24.2
2026-04-16T03:37:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:37:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:37:17.609 [DEBUG] [Thread-30853] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:37:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.067142
2026-04-16T03:37:17.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:37:17.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:37:17.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:37:17.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:37:17.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:37:17.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:36:35', tmtdew=1.18206, humidity=92.2096, cloud=0.0, wind=16.7263, temperature=8.2656, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:36:41.069', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.6230000000000002, nan, nan, nan, nan, nan, 2.5595, 2.9289999999999994, 2.719249999999999, nan, nan, 0.28325000000000067, 0.013250000000001094, 0.11650000000000027, 0.18849999999999945, 0.23274999999999935, 0.2425000000000015, 0.125, 0.17800000000000082, 0.12100000000000044, -0.10299999999999976, -0.10875000000000057], zp_timestamp='2026-04-16T01:34:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:37:17.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:37:17.856 [DEBUG] [Thread-30856] [transport.py] [_log()] starting thread (client mode): 0xee942e00
2026-04-16T03:37:17.857 [DEBUG] [Thread-30856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:37:17.871 [DEBUG] [Thread-30856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:37:17.871 [INFO] [Thread-30856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:37:17.878 [DEBUG] [Thread-30856] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:37:17.878 [DEBUG] [Thread-30856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:37:17.878 [DEBUG] [Thread-30856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:37:17.878 [DEBUG] [Thread-30856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:37:17.878 [DEBUG] [Thread-30856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:37:17.879 [DEBUG] [Thread-30856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:37:17.879 [DEBUG] [Thread-30856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:37:17.879 [DEBUG] [Thread-30856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:37:17.879 [DEBUG] [Thread-30856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:37:17.879 [DEBUG] [Thread-30856] [transport.py] [_log()] client lang: <none>
2026-04-16T03:37:17.879 [DEBUG] [Thread-30856] [transport.py] [_log()] server lang: <none>
2026-04-16T03:37:17.879 [DEBUG] [Thread-30856] [transport.py] [_log()] kex follows: False
2026-04-16T03:37:17.879 [DEBUG] [Thread-30856] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:37:17.879 [DEBUG] [Thread-30856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:37:17.879 [DEBUG] [Thread-30856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:37:17.879 [DEBUG] [Thread-30856] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:37:17.880 [DEBUG] [Thread-30856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:37:17.880 [DEBUG] [Thread-30856] [transport.py] [_log()] Compression: none
2026-04-16T03:37:17.880 [DEBUG] [Thread-30856] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:37:17.936 [DEBUG] [Thread-30856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:37:17.936 [DEBUG] [Thread-30856] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:37:17.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:37:17.937 [DEBUG] [Thread-30856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:37:17.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:37:17.992 [DEBUG] [Thread-30856] [transport.py] [_log()] userauth is OK
2026-04-16T03:37:17.992 [DEBUG] [Thread-30856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:37:17.992 [DEBUG] [Thread-30856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:37:17.992 [DEBUG] [Thread-30856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:37:17.992 [DEBUG] [Thread-30856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:37:18.017 [INFO] [Thread-30856] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:37:18.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:37:18.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:37:18.312 [DEBUG] [Thread-30858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:37:18.847 [DEBUG] [Thread-30856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:37:18.847 [DEBUG] [Thread-30856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:37:18.895 [DEBUG] [Thread-30856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:37:18.895 [DEBUG] [Thread-30856] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:37:18.903 [DEBUG] [Thread-30856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:37:18.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:37:18.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')
2026-04-16T03:37:18.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
2026-04-16T03:37:18.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:37:18.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:37:18.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:37:18.934 [DEBUG] [Thread-30856] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:37:33.355 [DEBUG] [Thread-30859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:37:48.386 [DEBUG] [Thread-30860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:37:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:37:48.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:37:48.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
2026-04-16T03:37:50.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 37, 10), 1.53591, 90.1381, 0.0, 13.8514, 8.54945, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:37:50.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:37:10
2026-04-16T03:37:50.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:37:51.188 [DEBUG] [Thread-30861] [transport.py] [_log()] starting thread (client mode): 0xf13e3670
2026-04-16T03:37:51.188 [DEBUG] [Thread-30861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:37:51.207 [DEBUG] [Thread-30861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:37:51.208 [INFO] [Thread-30861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:37:51.211 [DEBUG] [Thread-30861] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:37:51.211 [DEBUG] [Thread-30861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:37:51.211 [DEBUG] [Thread-30861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:37:51.211 [DEBUG] [Thread-30861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:37:51.211 [DEBUG] [Thread-30861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:37:51.211 [DEBUG] [Thread-30861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:37:51.211 [DEBUG] [Thread-30861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:37:51.211 [DEBUG] [Thread-30861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:37:51.211 [DEBUG] [Thread-30861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:37:51.211 [DEBUG] [Thread-30861] [transport.py] [_log()] client lang: <none>
2026-04-16T03:37:51.212 [DEBUG] [Thread-30861] [transport.py] [_log()] server lang: <none>
2026-04-16T03:37:51.212 [DEBUG] [Thread-30861] [transport.py] [_log()] kex follows: False
2026-04-16T03:37:51.212 [DEBUG] [Thread-30861] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:37:51.212 [DEBUG] [Thread-30861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:37:51.212 [DEBUG] [Thread-30861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:37:51.212 [DEBUG] [Thread-30861] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:37:51.212 [DEBUG] [Thread-30861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:37:51.212 [DEBUG] [Thread-30861] [transport.py] [_log()] Compression: none
2026-04-16T03:37:51.212 [DEBUG] [Thread-30861] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:37:51.231 [DEBUG] [Thread-30861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:37:51.231 [DEBUG] [Thread-30861] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:37:51.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:37:51.232 [DEBUG] [Thread-30861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:37:51.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:37:51.233 [DEBUG] [Thread-30861] [transport.py] [_log()] userauth is OK
2026-04-16T03:37:51.233 [DEBUG] [Thread-30861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:37:51.233 [DEBUG] [Thread-30861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:37:51.233 [DEBUG] [Thread-30861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:37:51.233 [DEBUG] [Thread-30861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:37:51.269 [INFO] [Thread-30861] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:37:51.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:37:52.020 [DEBUG] [Thread-30861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:37:52.021 [DEBUG] [Thread-30861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:37:52.021 [DEBUG] [Thread-30861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:37:52.061 [DEBUG] [Thread-30861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:37:52.061 [DEBUG] [Thread-30861] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:37:52.063 [DEBUG] [Thread-30861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:37:52.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:37:52.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:37:52.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:37:52.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:37:52.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:37:52.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:37:52.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:37:52.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:37:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:37:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.067489 -999.00   +8.60  11.58     90   +7.10 1 1 1 3 1     0    0 1.46 -4.30 .NE.. 14.0 11.6 91.5 16.1 8.9 -25.5 8.8 -24.3 8.6 -22.0 8.8 -24.1
2026-04-16T03:37:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:37:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:37:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.067489
2026-04-16T03:37:52.088 [DEBUG] [Thread-30861] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:37:52.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:37:52.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:37:52.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:37:52.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:37:52.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:37:52.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:37:10', tmtdew=1.53591, humidity=90.1381, cloud=0.0, wind=13.8514, temperature=8.54945, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:37:11.050', atlas_cloud=1, atlas_rain=1, zp_data=[3.588749999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.058, 2.969999999999999, 2.6382499999999993, nan, nan, 0.1792499999999997, -0.03974999999999973, 0.06599999999999895, 0.198500000000001, 0.20475000000000065, 0.21749999999999936, 0.18100000000000094, 0.16600000000000037, 0.12349999999999994, -0.08999999999999986, -0.07325000000000159], zp_timestamp='2026-04-16T01:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:37:52.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:37:52.346 [DEBUG] [Thread-30864] [transport.py] [_log()] starting thread (client mode): 0xf13e0970
2026-04-16T03:37:52.346 [DEBUG] [Thread-30864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:37:52.360 [DEBUG] [Thread-30864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:37:52.360 [INFO] [Thread-30864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:37:52.367 [DEBUG] [Thread-30864] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:37:52.368 [DEBUG] [Thread-30864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:37:52.368 [DEBUG] [Thread-30864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:37:52.368 [DEBUG] [Thread-30864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:37:52.368 [DEBUG] [Thread-30864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:37:52.368 [DEBUG] [Thread-30864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:37:52.368 [DEBUG] [Thread-30864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:37:52.368 [DEBUG] [Thread-30864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:37:52.368 [DEBUG] [Thread-30864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:37:52.368 [DEBUG] [Thread-30864] [transport.py] [_log()] client lang: <none>
2026-04-16T03:37:52.368 [DEBUG] [Thread-30864] [transport.py] [_log()] server lang: <none>
2026-04-16T03:37:52.369 [DEBUG] [Thread-30864] [transport.py] [_log()] kex follows: False
2026-04-16T03:37:52.369 [DEBUG] [Thread-30864] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:37:52.369 [DEBUG] [Thread-30864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:37:52.369 [DEBUG] [Thread-30864] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:37:52.369 [DEBUG] [Thread-30864] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:37:52.369 [DEBUG] [Thread-30864] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:37:52.369 [DEBUG] [Thread-30864] [transport.py] [_log()] Compression: none
2026-04-16T03:37:52.369 [DEBUG] [Thread-30864] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:37:52.423 [DEBUG] [Thread-30864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:37:52.423 [DEBUG] [Thread-30864] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:37:52.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:37:52.424 [DEBUG] [Thread-30864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:37:52.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:37:52.480 [DEBUG] [Thread-30864] [transport.py] [_log()] userauth is OK
2026-04-16T03:37:52.480 [DEBUG] [Thread-30864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:37:52.480 [DEBUG] [Thread-30864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:37:52.481 [DEBUG] [Thread-30864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:37:52.481 [DEBUG] [Thread-30864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:37:52.508 [INFO] [Thread-30864] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:37:52.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:37:52.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:37:53.320 [DEBUG] [Thread-30864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:37:53.320 [DEBUG] [Thread-30864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:37:53.368 [DEBUG] [Thread-30864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:37:53.368 [DEBUG] [Thread-30864] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:37:53.377 [DEBUG] [Thread-30864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:37:53.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:37:53.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')
2026-04-16T03:37:53.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
2026-04-16T03:37:53.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:37:53.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:37:53.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:37:53.411 [DEBUG] [Thread-30864] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:38:03.419 [DEBUG] [Thread-30866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:38:05.498 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:38:05.499 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:38:15.446 [DEBUG] [Thread-30867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:38:18.466 [DEBUG] [Thread-30868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:38:23.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:38:23.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:38:23.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
2026-04-16T03:38:24.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 37, 46), 1.17706, 92.243, 0.0, 16.6205, 8.29891, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:38:24.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:37:46
2026-04-16T03:38:25.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:38:25.590 [DEBUG] [Thread-30869] [transport.py] [_log()] starting thread (client mode): 0xee940580
2026-04-16T03:38:25.590 [DEBUG] [Thread-30869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:38:25.611 [DEBUG] [Thread-30869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:38:25.611 [INFO] [Thread-30869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:38:25.614 [DEBUG] [Thread-30869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:38:25.614 [DEBUG] [Thread-30869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:38:25.614 [DEBUG] [Thread-30869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:38:25.614 [DEBUG] [Thread-30869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:38:25.615 [DEBUG] [Thread-30869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:38:25.615 [DEBUG] [Thread-30869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:38:25.615 [DEBUG] [Thread-30869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:38:25.615 [DEBUG] [Thread-30869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:38:25.615 [DEBUG] [Thread-30869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:38:25.615 [DEBUG] [Thread-30869] [transport.py] [_log()] client lang: <none>
2026-04-16T03:38:25.615 [DEBUG] [Thread-30869] [transport.py] [_log()] server lang: <none>
2026-04-16T03:38:25.615 [DEBUG] [Thread-30869] [transport.py] [_log()] kex follows: False
2026-04-16T03:38:25.615 [DEBUG] [Thread-30869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:38:25.616 [DEBUG] [Thread-30869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:38:25.616 [DEBUG] [Thread-30869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:38:25.616 [DEBUG] [Thread-30869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:38:25.616 [DEBUG] [Thread-30869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:38:25.616 [DEBUG] [Thread-30869] [transport.py] [_log()] Compression: none
2026-04-16T03:38:25.616 [DEBUG] [Thread-30869] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:38:25.632 [DEBUG] [Thread-30869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:38:25.632 [DEBUG] [Thread-30869] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:38:25.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:38:25.633 [DEBUG] [Thread-30869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:38:25.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:38:25.634 [DEBUG] [Thread-30869] [transport.py] [_log()] userauth is OK
2026-04-16T03:38:25.634 [DEBUG] [Thread-30869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:38:25.634 [DEBUG] [Thread-30869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:38:25.634 [DEBUG] [Thread-30869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:38:25.634 [DEBUG] [Thread-30869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:38:25.659 [INFO] [Thread-30869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:38:25.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:38:26.479 [DEBUG] [Thread-30869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:38:26.480 [DEBUG] [Thread-30869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:38:26.480 [DEBUG] [Thread-30869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:38:26.521 [DEBUG] [Thread-30869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:38:26.521 [DEBUG] [Thread-30869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:38:26.523 [DEBUG] [Thread-30869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:38:26.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:38:26.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:38:26.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:38:26.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:38:26.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:38:26.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:38:26.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:38:26.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:38:26.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:38:26.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.067836 -999.00   +8.60  10.27     90   +7.10 1 1 1 3 1     0    0 1.44 -4.20 .NE.. 7.8 10.3 72.0 16.0 8.9 -25.5 8.8 -24.3 8.6 -22.1 8.8 -24.1
2026-04-16T03:38:26.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:38:26.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:38:26.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.067836
2026-04-16T03:38:26.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:38:26.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:38:26.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:38:26.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:38:26.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:38:26.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:37:46', tmtdew=1.17706, humidity=92.243, cloud=0.0, wind=16.6205, temperature=8.29891, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:37:41.030', atlas_cloud=1, atlas_rain=1, zp_data=[3.588749999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.058, 2.969999999999999, 2.6382499999999993, nan, nan, 0.1792499999999997, -0.03974999999999973, 0.06599999999999895, 0.198500000000001, 0.20475000000000065, 0.21749999999999936, 0.18100000000000094, 0.16600000000000037, 0.12349999999999994, -0.08999999999999986, -0.07325000000000159], zp_timestamp='2026-04-16T01:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:38:26.543 [DEBUG] [Thread-30869] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:38:26.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:38:26.759 [DEBUG] [Thread-30872] [transport.py] [_log()] starting thread (client mode): 0xee941660
2026-04-16T03:38:26.759 [DEBUG] [Thread-30872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:38:26.774 [DEBUG] [Thread-30872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:38:26.774 [INFO] [Thread-30872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:38:26.781 [DEBUG] [Thread-30872] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:38:26.782 [DEBUG] [Thread-30872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:38:26.782 [DEBUG] [Thread-30872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:38:26.782 [DEBUG] [Thread-30872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:38:26.782 [DEBUG] [Thread-30872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:38:26.782 [DEBUG] [Thread-30872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:38:26.782 [DEBUG] [Thread-30872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:38:26.782 [DEBUG] [Thread-30872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:38:26.782 [DEBUG] [Thread-30872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:38:26.782 [DEBUG] [Thread-30872] [transport.py] [_log()] client lang: <none>
2026-04-16T03:38:26.782 [DEBUG] [Thread-30872] [transport.py] [_log()] server lang: <none>
2026-04-16T03:38:26.782 [DEBUG] [Thread-30872] [transport.py] [_log()] kex follows: False
2026-04-16T03:38:26.782 [DEBUG] [Thread-30872] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:38:26.783 [DEBUG] [Thread-30872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:38:26.783 [DEBUG] [Thread-30872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:38:26.783 [DEBUG] [Thread-30872] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:38:26.783 [DEBUG] [Thread-30872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:38:26.783 [DEBUG] [Thread-30872] [transport.py] [_log()] Compression: none
2026-04-16T03:38:26.783 [DEBUG] [Thread-30872] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:38:26.839 [DEBUG] [Thread-30872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:38:26.839 [DEBUG] [Thread-30872] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:38:26.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:38:26.840 [DEBUG] [Thread-30872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:38:26.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:38:26.900 [DEBUG] [Thread-30872] [transport.py] [_log()] userauth is OK
2026-04-16T03:38:26.900 [DEBUG] [Thread-30872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:38:26.901 [DEBUG] [Thread-30872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:38:26.901 [DEBUG] [Thread-30872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:38:26.901 [DEBUG] [Thread-30872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:38:26.926 [INFO] [Thread-30872] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:38:26.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:38:26.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:38:27.749 [DEBUG] [Thread-30872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:38:27.749 [DEBUG] [Thread-30872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:38:27.798 [DEBUG] [Thread-30872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:38:27.798 [DEBUG] [Thread-30872] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:38:27.807 [DEBUG] [Thread-30872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:38:27.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:38:27.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')
2026-04-16T03:38:27.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
2026-04-16T03:38:27.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:38:27.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:38:27.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:38:27.841 [DEBUG] [Thread-30872] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:38:33.497 [DEBUG] [Thread-30874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:38:48.534 [DEBUG] [Thread-30875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:38:57.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:38:57.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:38:57.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T03:38:59.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 38, 21), 1.54086, 90.105, 0.0, 14.063, 8.46632, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:38:59.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:38:21
2026-04-16T03:38:59.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:39:00.023 [DEBUG] [Thread-30876] [transport.py] [_log()] starting thread (client mode): 0xee9414b0
2026-04-16T03:39:00.023 [DEBUG] [Thread-30876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:39:00.042 [DEBUG] [Thread-30876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:39:00.043 [INFO] [Thread-30876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:39:00.046 [DEBUG] [Thread-30876] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:39:00.046 [DEBUG] [Thread-30876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:39:00.046 [DEBUG] [Thread-30876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:39:00.046 [DEBUG] [Thread-30876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:39:00.046 [DEBUG] [Thread-30876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:39:00.046 [DEBUG] [Thread-30876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:39:00.046 [DEBUG] [Thread-30876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:39:00.047 [DEBUG] [Thread-30876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:39:00.047 [DEBUG] [Thread-30876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:39:00.047 [DEBUG] [Thread-30876] [transport.py] [_log()] client lang: <none>
2026-04-16T03:39:00.047 [DEBUG] [Thread-30876] [transport.py] [_log()] server lang: <none>
2026-04-16T03:39:00.047 [DEBUG] [Thread-30876] [transport.py] [_log()] kex follows: False
2026-04-16T03:39:00.047 [DEBUG] [Thread-30876] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:39:00.047 [DEBUG] [Thread-30876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:39:00.047 [DEBUG] [Thread-30876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:39:00.047 [DEBUG] [Thread-30876] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:39:00.047 [DEBUG] [Thread-30876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:39:00.047 [DEBUG] [Thread-30876] [transport.py] [_log()] Compression: none
2026-04-16T03:39:00.048 [DEBUG] [Thread-30876] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:39:00.064 [DEBUG] [Thread-30876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:39:00.064 [DEBUG] [Thread-30876] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:39:00.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:39:00.065 [DEBUG] [Thread-30876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:39:00.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:39:00.066 [DEBUG] [Thread-30876] [transport.py] [_log()] userauth is OK
2026-04-16T03:39:00.066 [DEBUG] [Thread-30876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:39:00.066 [DEBUG] [Thread-30876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:39:00.066 [DEBUG] [Thread-30876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:39:00.066 [DEBUG] [Thread-30876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:39:00.099 [INFO] [Thread-30876] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:39:00.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:39:00.921 [DEBUG] [Thread-30876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:39:00.921 [DEBUG] [Thread-30876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:39:00.921 [DEBUG] [Thread-30876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:39:00.962 [DEBUG] [Thread-30876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:39:00.962 [DEBUG] [Thread-30876] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:39:00.965 [DEBUG] [Thread-30876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:39:00.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:39:00.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:39:00.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:39:00.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:39:00.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:39:00.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:39:00.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:39:00.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:39:00.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:39:00.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.068184 -999.00   +8.60   6.39     90   +7.10 1 1 1 3 1     0    0 1.43 -4.14 .NE.. 8.7 6.4 102.8 14.5 9.0 -25.4 8.8 -24.2 8.6 -22.1 8.9 -24.2
2026-04-16T03:39:00.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:39:00.988 [DEBUG] [Thread-30876] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:39:00.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:39:00.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.068184
2026-04-16T03:39:00.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:39:00.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:39:00.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:39:00.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:39:00.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:39:00.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:38:21', tmtdew=1.54086, humidity=90.105, cloud=0.0, wind=14.063, temperature=8.46632, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:38:11.098', atlas_cloud=1, atlas_rain=1, zp_data=[3.588749999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.058, 2.969999999999999, 2.6382499999999993, nan, nan, 0.1792499999999997, -0.03974999999999973, 0.06599999999999895, 0.198500000000001, 0.20475000000000065, 0.21749999999999936, 0.18100000000000094, 0.16600000000000037, 0.12349999999999994, -0.08999999999999986, -0.07325000000000159], zp_timestamp='2026-04-16T01:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:39:01.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:39:01.282 [DEBUG] [Thread-30879] [transport.py] [_log()] starting thread (client mode): 0xee9430d0
2026-04-16T03:39:01.282 [DEBUG] [Thread-30879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:39:01.296 [DEBUG] [Thread-30879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:39:01.296 [INFO] [Thread-30879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:39:01.303 [DEBUG] [Thread-30879] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:39:01.304 [DEBUG] [Thread-30879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:39:01.304 [DEBUG] [Thread-30879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:39:01.304 [DEBUG] [Thread-30879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:39:01.304 [DEBUG] [Thread-30879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:39:01.304 [DEBUG] [Thread-30879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:39:01.304 [DEBUG] [Thread-30879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:39:01.304 [DEBUG] [Thread-30879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:39:01.304 [DEBUG] [Thread-30879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:39:01.304 [DEBUG] [Thread-30879] [transport.py] [_log()] client lang: <none>
2026-04-16T03:39:01.304 [DEBUG] [Thread-30879] [transport.py] [_log()] server lang: <none>
2026-04-16T03:39:01.304 [DEBUG] [Thread-30879] [transport.py] [_log()] kex follows: False
2026-04-16T03:39:01.304 [DEBUG] [Thread-30879] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:39:01.304 [DEBUG] [Thread-30879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:39:01.304 [DEBUG] [Thread-30879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:39:01.304 [DEBUG] [Thread-30879] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:39:01.305 [DEBUG] [Thread-30879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:39:01.305 [DEBUG] [Thread-30879] [transport.py] [_log()] Compression: none
2026-04-16T03:39:01.305 [DEBUG] [Thread-30879] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:39:01.361 [DEBUG] [Thread-30879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:39:01.362 [DEBUG] [Thread-30879] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:39:01.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:39:01.363 [DEBUG] [Thread-30879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:39:01.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:39:01.417 [DEBUG] [Thread-30879] [transport.py] [_log()] userauth is OK
2026-04-16T03:39:01.418 [DEBUG] [Thread-30879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:39:01.418 [DEBUG] [Thread-30879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:39:01.418 [DEBUG] [Thread-30879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:39:01.418 [DEBUG] [Thread-30879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:39:01.443 [INFO] [Thread-30879] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:39:01.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:39:01.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:39:02.274 [DEBUG] [Thread-30879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:39:02.275 [DEBUG] [Thread-30879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:39:02.322 [DEBUG] [Thread-30879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:39:02.322 [DEBUG] [Thread-30879] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:39:02.331 [DEBUG] [Thread-30879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:39:02.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:39:02.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')
2026-04-16T03:39:02.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
2026-04-16T03:39:02.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:39:02.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:39:02.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:39:02.365 [DEBUG] [Thread-30879] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:39:03.566 [DEBUG] [Thread-30881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:39:05.705 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:39:05.707 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:39:15.603 [DEBUG] [Thread-30882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:39:18.609 [DEBUG] [Thread-30883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:39:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:39:32.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:39:32.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
2026-04-16T03:39:33.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 38, 57), 1.4859, 90.1382, 0.0, 14.0454, 8.44951, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:39:33.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:38:57
2026-04-16T03:39:33.641 [DEBUG] [Thread-30884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:39:34.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:39:34.523 [DEBUG] [Thread-30885] [transport.py] [_log()] starting thread (client mode): 0xf13e0d00
2026-04-16T03:39:34.524 [DEBUG] [Thread-30885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:39:34.544 [DEBUG] [Thread-30885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:39:34.544 [INFO] [Thread-30885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:39:34.547 [DEBUG] [Thread-30885] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:39:34.547 [DEBUG] [Thread-30885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:39:34.547 [DEBUG] [Thread-30885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:39:34.547 [DEBUG] [Thread-30885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:39:34.547 [DEBUG] [Thread-30885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:39:34.547 [DEBUG] [Thread-30885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:39:34.547 [DEBUG] [Thread-30885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:39:34.548 [DEBUG] [Thread-30885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:39:34.548 [DEBUG] [Thread-30885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:39:34.548 [DEBUG] [Thread-30885] [transport.py] [_log()] client lang: <none>
2026-04-16T03:39:34.548 [DEBUG] [Thread-30885] [transport.py] [_log()] server lang: <none>
2026-04-16T03:39:34.548 [DEBUG] [Thread-30885] [transport.py] [_log()] kex follows: False
2026-04-16T03:39:34.548 [DEBUG] [Thread-30885] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:39:34.548 [DEBUG] [Thread-30885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:39:34.548 [DEBUG] [Thread-30885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:39:34.548 [DEBUG] [Thread-30885] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:39:34.548 [DEBUG] [Thread-30885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:39:34.549 [DEBUG] [Thread-30885] [transport.py] [_log()] Compression: none
2026-04-16T03:39:34.549 [DEBUG] [Thread-30885] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:39:34.563 [DEBUG] [Thread-30885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:39:34.563 [DEBUG] [Thread-30885] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:39:34.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:39:34.564 [DEBUG] [Thread-30885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:39:34.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:39:34.604 [DEBUG] [Thread-30885] [transport.py] [_log()] userauth is OK
2026-04-16T03:39:34.605 [DEBUG] [Thread-30885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:39:34.605 [DEBUG] [Thread-30885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:39:34.605 [DEBUG] [Thread-30885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:39:34.605 [DEBUG] [Thread-30885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:39:34.630 [INFO] [Thread-30885] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:39:34.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:39:35.428 [DEBUG] [Thread-30885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:39:35.428 [DEBUG] [Thread-30885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:39:35.428 [DEBUG] [Thread-30885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:39:35.469 [DEBUG] [Thread-30885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:39:35.469 [DEBUG] [Thread-30885] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:39:35.472 [DEBUG] [Thread-30885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:39:35.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:39:35.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:39:35.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:39:35.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:39:35.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:39:35.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:39:35.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:39:35.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:39:35.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:39:35.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.068531 -999.00   +8.60  12.89     90   +7.10 1 1 1 3 1     0    0 1.43 -4.30 .NE.. 8.0 12.9 72.6 15.2 9.0 -25.6 8.8 -24.3 8.6 -22.1 8.8 -24.1
2026-04-16T03:39:35.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:39:35.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:39:35.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.068531
2026-04-16T03:39:35.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:39:35.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:39:35.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:39:35.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:39:35.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:39:35.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:38:57', tmtdew=1.4859, humidity=90.1382, cloud=0.0, wind=14.0454, temperature=8.44951, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:38:41.078', atlas_cloud=1, atlas_rain=1, zp_data=[3.588749999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.058, 2.969999999999999, 2.6382499999999993, nan, nan, 0.1792499999999997, -0.03974999999999973, 0.06599999999999895, 0.198500000000001, 0.20475000000000065, 0.21749999999999936, 0.18100000000000094, 0.16600000000000037, 0.12349999999999994, -0.08999999999999986, -0.07325000000000159], zp_timestamp='2026-04-16T01:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:39:35.496 [DEBUG] [Thread-30885] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:39:35.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:39:35.714 [DEBUG] [Thread-30888] [transport.py] [_log()] starting thread (client mode): 0xf13e19f0
2026-04-16T03:39:35.714 [DEBUG] [Thread-30888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:39:35.729 [DEBUG] [Thread-30888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:39:35.729 [INFO] [Thread-30888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:39:35.737 [DEBUG] [Thread-30888] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:39:35.737 [DEBUG] [Thread-30888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:39:35.737 [DEBUG] [Thread-30888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:39:35.737 [DEBUG] [Thread-30888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:39:35.737 [DEBUG] [Thread-30888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:39:35.737 [DEBUG] [Thread-30888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:39:35.737 [DEBUG] [Thread-30888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:39:35.737 [DEBUG] [Thread-30888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:39:35.737 [DEBUG] [Thread-30888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:39:35.737 [DEBUG] [Thread-30888] [transport.py] [_log()] client lang: <none>
2026-04-16T03:39:35.737 [DEBUG] [Thread-30888] [transport.py] [_log()] server lang: <none>
2026-04-16T03:39:35.738 [DEBUG] [Thread-30888] [transport.py] [_log()] kex follows: False
2026-04-16T03:39:35.738 [DEBUG] [Thread-30888] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:39:35.738 [DEBUG] [Thread-30888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:39:35.738 [DEBUG] [Thread-30888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:39:35.738 [DEBUG] [Thread-30888] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:39:35.738 [DEBUG] [Thread-30888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:39:35.738 [DEBUG] [Thread-30888] [transport.py] [_log()] Compression: none
2026-04-16T03:39:35.738 [DEBUG] [Thread-30888] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:39:35.794 [DEBUG] [Thread-30888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:39:35.794 [DEBUG] [Thread-30888] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:39:35.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:39:35.795 [DEBUG] [Thread-30888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:39:35.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:39:35.851 [DEBUG] [Thread-30888] [transport.py] [_log()] userauth is OK
2026-04-16T03:39:35.851 [DEBUG] [Thread-30888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:39:35.851 [DEBUG] [Thread-30888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:39:35.851 [DEBUG] [Thread-30888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:39:35.852 [DEBUG] [Thread-30888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:39:35.876 [INFO] [Thread-30888] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:39:35.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:39:35.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:39:36.692 [DEBUG] [Thread-30888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:39:36.692 [DEBUG] [Thread-30888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:39:36.741 [DEBUG] [Thread-30888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:39:36.741 [DEBUG] [Thread-30888] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:39:36.750 [DEBUG] [Thread-30888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:39:36.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:39:36.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')
2026-04-16T03:39:36.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') -> 00000000
2026-04-16T03:39:36.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:39:36.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:39:36.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:39:36.785 [DEBUG] [Thread-30888] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:39:48.672 [DEBUG] [Thread-30890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:40:03.719 [DEBUG] [Thread-30891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:40:05.910 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:40:05.911 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:40:06.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:40:06.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:40:06.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
2026-04-16T03:40:08.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 39, 33), 1.16099, 92.3428, 0.0, 16.691, 8.26591, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:40:08.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:39:33
2026-04-16T03:40:08.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:40:08.854 [DEBUG] [Thread-30892] [transport.py] [_log()] starting thread (client mode): 0xee9405b0
2026-04-16T03:40:08.854 [DEBUG] [Thread-30892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:40:08.875 [DEBUG] [Thread-30892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:40:08.875 [INFO] [Thread-30892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:40:08.878 [DEBUG] [Thread-30892] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:40:08.879 [DEBUG] [Thread-30892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:40:08.879 [DEBUG] [Thread-30892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:40:08.879 [DEBUG] [Thread-30892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:40:08.879 [DEBUG] [Thread-30892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:40:08.879 [DEBUG] [Thread-30892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:40:08.879 [DEBUG] [Thread-30892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:40:08.879 [DEBUG] [Thread-30892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:40:08.879 [DEBUG] [Thread-30892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:40:08.879 [DEBUG] [Thread-30892] [transport.py] [_log()] client lang: <none>
2026-04-16T03:40:08.879 [DEBUG] [Thread-30892] [transport.py] [_log()] server lang: <none>
2026-04-16T03:40:08.879 [DEBUG] [Thread-30892] [transport.py] [_log()] kex follows: False
2026-04-16T03:40:08.879 [DEBUG] [Thread-30892] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:40:08.880 [DEBUG] [Thread-30892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:40:08.880 [DEBUG] [Thread-30892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:40:08.880 [DEBUG] [Thread-30892] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:40:08.880 [DEBUG] [Thread-30892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:40:08.880 [DEBUG] [Thread-30892] [transport.py] [_log()] Compression: none
2026-04-16T03:40:08.880 [DEBUG] [Thread-30892] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:40:08.889 [DEBUG] [Thread-30892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:40:08.889 [DEBUG] [Thread-30892] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:40:08.889 [DEBUG] [Thread-30892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:40:08.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:40:08.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:40:08.891 [DEBUG] [Thread-30892] [transport.py] [_log()] userauth is OK
2026-04-16T03:40:08.891 [DEBUG] [Thread-30892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:40:08.892 [DEBUG] [Thread-30892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:40:08.892 [DEBUG] [Thread-30892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:40:08.892 [DEBUG] [Thread-30892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:40:08.916 [INFO] [Thread-30892] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:40:08.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:40:15.772 [DEBUG] [Thread-30894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:40:17.109 [DEBUG] [Thread-30892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:40:17.109 [DEBUG] [Thread-30892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:40:17.110 [DEBUG] [Thread-30892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:40:17.151 [DEBUG] [Thread-30892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:40:17.151 [DEBUG] [Thread-30892] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:40:17.153 [DEBUG] [Thread-30892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:40:17.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:40:17.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:40:17.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:40:17.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:40:17.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:40:17.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:40:17.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:40:17.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:40:17.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:40:17.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.069225 -999.00   +8.60  10.67     90   +7.10 1 1 1 3 1     0    0 1.40 -4.66 .NE.. 11.5 10.7 91.5 15.8 9.0 -25.8 8.8 -24.3 8.6 -22.2 8.8 -24.3
2026-04-16T03:40:17.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:40:17.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:40:17.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.069225
2026-04-16T03:40:17.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:40:17.282 [DEBUG] [Thread-30892] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:40:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:40:17.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:40:17.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:40:17.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:40:17.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:39:33', tmtdew=1.16099, humidity=92.3428, cloud=0.0, wind=16.691, temperature=8.26591, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:39:41.040', atlas_cloud=1, atlas_rain=1, zp_data=[3.588749999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.058, 2.969999999999999, 2.6382499999999993, nan, nan, 0.1792499999999997, -0.03974999999999973, 0.06599999999999895, 0.198500000000001, 0.20475000000000065, 0.21749999999999936, 0.18100000000000094, 0.16600000000000037, 0.12349999999999994, -0.08999999999999986, -0.07325000000000159], zp_timestamp='2026-04-16T01:37:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:40:17.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:40:17.539 [DEBUG] [Thread-30896] [transport.py] [_log()] starting thread (client mode): 0xf13e3cd0
2026-04-16T03:40:17.539 [DEBUG] [Thread-30896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:40:17.553 [DEBUG] [Thread-30896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:40:17.553 [INFO] [Thread-30896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:40:17.560 [DEBUG] [Thread-30896] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:40:17.560 [DEBUG] [Thread-30896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:40:17.560 [DEBUG] [Thread-30896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:40:17.560 [DEBUG] [Thread-30896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:40:17.561 [DEBUG] [Thread-30896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:40:17.561 [DEBUG] [Thread-30896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:40:17.561 [DEBUG] [Thread-30896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:40:17.561 [DEBUG] [Thread-30896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:40:17.561 [DEBUG] [Thread-30896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:40:17.561 [DEBUG] [Thread-30896] [transport.py] [_log()] client lang: <none>
2026-04-16T03:40:17.561 [DEBUG] [Thread-30896] [transport.py] [_log()] server lang: <none>
2026-04-16T03:40:17.561 [DEBUG] [Thread-30896] [transport.py] [_log()] kex follows: False
2026-04-16T03:40:17.561 [DEBUG] [Thread-30896] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:40:17.561 [DEBUG] [Thread-30896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:40:17.561 [DEBUG] [Thread-30896] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:40:17.561 [DEBUG] [Thread-30896] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:40:17.562 [DEBUG] [Thread-30896] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:40:17.562 [DEBUG] [Thread-30896] [transport.py] [_log()] Compression: none
2026-04-16T03:40:17.562 [DEBUG] [Thread-30896] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:40:17.619 [DEBUG] [Thread-30896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:40:17.619 [DEBUG] [Thread-30896] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:40:17.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:40:17.620 [DEBUG] [Thread-30896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:40:17.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:40:17.676 [DEBUG] [Thread-30896] [transport.py] [_log()] userauth is OK
2026-04-16T03:40:17.676 [DEBUG] [Thread-30896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:40:17.677 [DEBUG] [Thread-30896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:40:17.677 [DEBUG] [Thread-30896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:40:17.677 [DEBUG] [Thread-30896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:40:17.702 [INFO] [Thread-30896] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:40:17.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:40:17.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:40:18.515 [DEBUG] [Thread-30896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:40:18.515 [DEBUG] [Thread-30896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:40:18.563 [DEBUG] [Thread-30896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:40:18.563 [DEBUG] [Thread-30896] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:40:18.572 [DEBUG] [Thread-30896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:40:18.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:40:18.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')
2026-04-16T03:40:18.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
2026-04-16T03:40:18.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:40:18.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:40:18.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:40:18.604 [DEBUG] [Thread-30896] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:40:18.749 [DEBUG] [Thread-30898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:40:33.842 [DEBUG] [Thread-30899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:40:48.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:40:48.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:40:48.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
2026-04-16T03:40:48.873 [DEBUG] [Thread-30900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:40:49.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 40, 8), 1.48837, 90.1217, 0.0, 13.7279, 8.43295, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:40:49.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:40:08
2026-04-16T03:40:50.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:40:50.794 [DEBUG] [Thread-30901] [transport.py] [_log()] starting thread (client mode): 0xf13e3a30
2026-04-16T03:40:50.794 [DEBUG] [Thread-30901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:40:50.813 [DEBUG] [Thread-30901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:40:50.814 [INFO] [Thread-30901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:40:50.817 [DEBUG] [Thread-30901] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:40:50.817 [DEBUG] [Thread-30901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:40:50.817 [DEBUG] [Thread-30901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:40:50.817 [DEBUG] [Thread-30901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:40:50.817 [DEBUG] [Thread-30901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:40:50.817 [DEBUG] [Thread-30901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:40:50.817 [DEBUG] [Thread-30901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:40:50.817 [DEBUG] [Thread-30901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:40:50.818 [DEBUG] [Thread-30901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:40:50.818 [DEBUG] [Thread-30901] [transport.py] [_log()] client lang: <none>
2026-04-16T03:40:50.818 [DEBUG] [Thread-30901] [transport.py] [_log()] server lang: <none>
2026-04-16T03:40:50.818 [DEBUG] [Thread-30901] [transport.py] [_log()] kex follows: False
2026-04-16T03:40:50.818 [DEBUG] [Thread-30901] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:40:50.818 [DEBUG] [Thread-30901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:40:50.818 [DEBUG] [Thread-30901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:40:50.818 [DEBUG] [Thread-30901] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:40:50.818 [DEBUG] [Thread-30901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:40:50.818 [DEBUG] [Thread-30901] [transport.py] [_log()] Compression: none
2026-04-16T03:40:50.818 [DEBUG] [Thread-30901] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:40:50.835 [DEBUG] [Thread-30901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:40:50.835 [DEBUG] [Thread-30901] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:40:50.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:40:50.836 [DEBUG] [Thread-30901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:40:50.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:40:50.837 [DEBUG] [Thread-30901] [transport.py] [_log()] userauth is OK
2026-04-16T03:40:50.837 [DEBUG] [Thread-30901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:40:50.837 [DEBUG] [Thread-30901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:40:50.837 [DEBUG] [Thread-30901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:40:50.837 [DEBUG] [Thread-30901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:40:50.860 [INFO] [Thread-30901] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:40:50.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:40:51.671 [DEBUG] [Thread-30901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:40:51.671 [DEBUG] [Thread-30901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:40:51.672 [DEBUG] [Thread-30901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:40:51.712 [DEBUG] [Thread-30901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:40:51.712 [DEBUG] [Thread-30901] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:40:51.715 [DEBUG] [Thread-30901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:40:51.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:40:51.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:40:51.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:40:51.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:40:51.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:40:51.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:40:51.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:40:51.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:40:51.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:40:51.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.069572 -999.00   +8.60   7.46     90   +7.10 1 1 1 3 1     0    0 1.41 -4.43 .NE.. 9.6 7.5 80.8 18.1 8.9 -25.7 8.8 -24.5 8.5 -22.1 8.8 -24.4
2026-04-16T03:40:51.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:40:51.739 [DEBUG] [Thread-30901] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:40:51.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:40:51.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.069572
2026-04-16T03:40:51.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:40:51.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:40:51.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:40:51.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:40:51.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:40:51.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:40:08', tmtdew=1.48837, humidity=90.1217, cloud=0.0, wind=13.7279, temperature=8.43295, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:40:11.021', atlas_cloud=1, atlas_rain=1, zp_data=[3.4507499999999993, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3484999999999996, nan, 2.7002499999999987, nan, nan, 0.1722500000000018, -0.0022500000000000853, 0.15999999999999837, 0.23800000000000132, 0.2757500000000004, 0.19500000000000028, 0.18700000000000117, 0.1855000000000011, 0.10100000000000087, -0.0799999999999983, -0.08125000000000071], zp_timestamp='2026-04-16T01:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:40:51.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:40:52.000 [DEBUG] [Thread-30904] [transport.py] [_log()] starting thread (client mode): 0xf13e1ba0
2026-04-16T03:40:52.000 [DEBUG] [Thread-30904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:40:52.015 [DEBUG] [Thread-30904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:40:52.015 [INFO] [Thread-30904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:40:52.022 [DEBUG] [Thread-30904] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:40:52.022 [DEBUG] [Thread-30904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:40:52.022 [DEBUG] [Thread-30904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:40:52.022 [DEBUG] [Thread-30904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:40:52.022 [DEBUG] [Thread-30904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:40:52.022 [DEBUG] [Thread-30904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:40:52.022 [DEBUG] [Thread-30904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:40:52.023 [DEBUG] [Thread-30904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:40:52.023 [DEBUG] [Thread-30904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:40:52.023 [DEBUG] [Thread-30904] [transport.py] [_log()] client lang: <none>
2026-04-16T03:40:52.023 [DEBUG] [Thread-30904] [transport.py] [_log()] server lang: <none>
2026-04-16T03:40:52.023 [DEBUG] [Thread-30904] [transport.py] [_log()] kex follows: False
2026-04-16T03:40:52.023 [DEBUG] [Thread-30904] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:40:52.023 [DEBUG] [Thread-30904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:40:52.023 [DEBUG] [Thread-30904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:40:52.023 [DEBUG] [Thread-30904] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:40:52.023 [DEBUG] [Thread-30904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:40:52.023 [DEBUG] [Thread-30904] [transport.py] [_log()] Compression: none
2026-04-16T03:40:52.024 [DEBUG] [Thread-30904] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:40:52.081 [DEBUG] [Thread-30904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:40:52.081 [DEBUG] [Thread-30904] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:40:52.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:40:52.082 [DEBUG] [Thread-30904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:40:52.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:40:52.138 [DEBUG] [Thread-30904] [transport.py] [_log()] userauth is OK
2026-04-16T03:40:52.138 [DEBUG] [Thread-30904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:40:52.138 [DEBUG] [Thread-30904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:40:52.138 [DEBUG] [Thread-30904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:40:52.139 [DEBUG] [Thread-30904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:40:52.166 [INFO] [Thread-30904] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:40:52.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:40:52.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:40:52.982 [DEBUG] [Thread-30904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:40:52.982 [DEBUG] [Thread-30904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:40:53.029 [DEBUG] [Thread-30904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:40:53.030 [DEBUG] [Thread-30904] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:40:53.038 [DEBUG] [Thread-30904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:40:53.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:40:53.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')
2026-04-16T03:40:53.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
2026-04-16T03:40:53.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:40:53.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:40:53.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:40:53.069 [DEBUG] [Thread-30904] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:41:03.904 [DEBUG] [Thread-30906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:41:06.117 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:41:06.118 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:41:15.937 [DEBUG] [Thread-30907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:41:18.949 [DEBUG] [Thread-30908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:41:23.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:41:23.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:41:23.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
2026-04-16T03:41:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 40, 44), 1.15656, 92.3761, 0.0, 17.3614, 8.36553, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:41:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:40:44
2026-04-16T03:41:24.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:41:25.250 [DEBUG] [Thread-30909] [transport.py] [_log()] starting thread (client mode): 0xee9412d0
2026-04-16T03:41:25.250 [DEBUG] [Thread-30909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:41:25.269 [DEBUG] [Thread-30909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:41:25.269 [INFO] [Thread-30909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:41:25.273 [DEBUG] [Thread-30909] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:41:25.273 [DEBUG] [Thread-30909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:41:25.273 [DEBUG] [Thread-30909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:41:25.273 [DEBUG] [Thread-30909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:41:25.273 [DEBUG] [Thread-30909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:41:25.273 [DEBUG] [Thread-30909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:41:25.273 [DEBUG] [Thread-30909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:41:25.273 [DEBUG] [Thread-30909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:41:25.273 [DEBUG] [Thread-30909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:41:25.273 [DEBUG] [Thread-30909] [transport.py] [_log()] client lang: <none>
2026-04-16T03:41:25.274 [DEBUG] [Thread-30909] [transport.py] [_log()] server lang: <none>
2026-04-16T03:41:25.274 [DEBUG] [Thread-30909] [transport.py] [_log()] kex follows: False
2026-04-16T03:41:25.274 [DEBUG] [Thread-30909] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:41:25.274 [DEBUG] [Thread-30909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:41:25.274 [DEBUG] [Thread-30909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:41:25.274 [DEBUG] [Thread-30909] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:41:25.274 [DEBUG] [Thread-30909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:41:25.274 [DEBUG] [Thread-30909] [transport.py] [_log()] Compression: none
2026-04-16T03:41:25.274 [DEBUG] [Thread-30909] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:41:25.290 [DEBUG] [Thread-30909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:41:25.291 [DEBUG] [Thread-30909] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:41:25.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:41:25.292 [DEBUG] [Thread-30909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:41:25.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:41:25.292 [DEBUG] [Thread-30909] [transport.py] [_log()] userauth is OK
2026-04-16T03:41:25.292 [DEBUG] [Thread-30909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:41:25.293 [DEBUG] [Thread-30909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:41:25.293 [DEBUG] [Thread-30909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:41:25.293 [DEBUG] [Thread-30909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:41:25.316 [INFO] [Thread-30909] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:41:25.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:41:26.139 [DEBUG] [Thread-30909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:41:26.140 [DEBUG] [Thread-30909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:41:26.140 [DEBUG] [Thread-30909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:41:26.181 [DEBUG] [Thread-30909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:41:26.181 [DEBUG] [Thread-30909] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:41:26.183 [DEBUG] [Thread-30909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:41:26.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:41:26.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:41:26.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:41:26.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:41:26.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:41:26.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:41:26.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:41:26.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:41:26.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:41:26.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.069920 -999.00   +8.60  13.01     90   +7.10 1 1 1 3 1     0    0 1.42 -4.49 .NE.. 14.6 13.0 73.6 17.8 8.9 -25.7 8.8 -24.6 8.6 -22.3 8.9 -24.4
2026-04-16T03:41:26.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:41:26.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:41:26.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.069920
2026-04-16T03:41:26.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:41:26.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:41:26.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:41:26.204 [DEBUG] [Thread-30909] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:41:26.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:41:26.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:41:26.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:40:44', tmtdew=1.15656, humidity=92.3761, cloud=0.0, wind=17.3614, temperature=8.36553, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:40:41.088', atlas_cloud=1, atlas_rain=1, zp_data=[3.4507499999999993, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3484999999999996, nan, 2.7002499999999987, nan, nan, 0.1722500000000018, -0.0022500000000000853, 0.15999999999999837, 0.23800000000000132, 0.2757500000000004, 0.19500000000000028, 0.18700000000000117, 0.1855000000000011, 0.10100000000000087, -0.0799999999999983, -0.08125000000000071], zp_timestamp='2026-04-16T01:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:41:26.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:41:26.423 [DEBUG] [Thread-30912] [transport.py] [_log()] starting thread (client mode): 0xee9437c0
2026-04-16T03:41:26.423 [DEBUG] [Thread-30912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:41:26.438 [DEBUG] [Thread-30912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:41:26.438 [INFO] [Thread-30912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:41:26.445 [DEBUG] [Thread-30912] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:41:26.445 [DEBUG] [Thread-30912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:41:26.445 [DEBUG] [Thread-30912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:41:26.445 [DEBUG] [Thread-30912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:41:26.445 [DEBUG] [Thread-30912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:41:26.445 [DEBUG] [Thread-30912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:41:26.445 [DEBUG] [Thread-30912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:41:26.445 [DEBUG] [Thread-30912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:41:26.445 [DEBUG] [Thread-30912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:41:26.445 [DEBUG] [Thread-30912] [transport.py] [_log()] client lang: <none>
2026-04-16T03:41:26.445 [DEBUG] [Thread-30912] [transport.py] [_log()] server lang: <none>
2026-04-16T03:41:26.446 [DEBUG] [Thread-30912] [transport.py] [_log()] kex follows: False
2026-04-16T03:41:26.446 [DEBUG] [Thread-30912] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:41:26.446 [DEBUG] [Thread-30912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:41:26.446 [DEBUG] [Thread-30912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:41:26.446 [DEBUG] [Thread-30912] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:41:26.446 [DEBUG] [Thread-30912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:41:26.446 [DEBUG] [Thread-30912] [transport.py] [_log()] Compression: none
2026-04-16T03:41:26.446 [DEBUG] [Thread-30912] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:41:26.502 [DEBUG] [Thread-30912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:41:26.503 [DEBUG] [Thread-30912] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:41:26.503 [DEBUG] [Thread-30912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:41:26.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:41:26.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:41:26.560 [DEBUG] [Thread-30912] [transport.py] [_log()] userauth is OK
2026-04-16T03:41:26.560 [DEBUG] [Thread-30912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:41:26.560 [DEBUG] [Thread-30912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:41:26.560 [DEBUG] [Thread-30912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:41:26.561 [DEBUG] [Thread-30912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:41:26.585 [INFO] [Thread-30912] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:41:26.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:41:26.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:41:27.420 [DEBUG] [Thread-30912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:41:27.420 [DEBUG] [Thread-30912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:41:27.468 [DEBUG] [Thread-30912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:41:27.468 [DEBUG] [Thread-30912] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:41:27.480 [DEBUG] [Thread-30912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:41:27.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:41:27.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')
2026-04-16T03:41:27.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
2026-04-16T03:41:27.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:41:27.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:41:27.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:41:27.521 [DEBUG] [Thread-30912] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:41:33.981 [DEBUG] [Thread-30914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:41:49.023 [DEBUG] [Thread-30915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:41:57.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:41:57.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:41:57.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
2026-04-16T03:41:58.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 41, 19), 1.43588, 90.6383, 0.0, 13.9396, 8.44958, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:41:58.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:41:19
2026-04-16T03:41:59.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:41:59.702 [DEBUG] [Thread-30916] [transport.py] [_log()] starting thread (client mode): 0xf13e1000
2026-04-16T03:41:59.703 [DEBUG] [Thread-30916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:41:59.722 [DEBUG] [Thread-30916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:41:59.722 [INFO] [Thread-30916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:41:59.725 [DEBUG] [Thread-30916] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:41:59.725 [DEBUG] [Thread-30916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:41:59.725 [DEBUG] [Thread-30916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:41:59.726 [DEBUG] [Thread-30916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:41:59.726 [DEBUG] [Thread-30916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:41:59.726 [DEBUG] [Thread-30916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:41:59.726 [DEBUG] [Thread-30916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:41:59.726 [DEBUG] [Thread-30916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:41:59.726 [DEBUG] [Thread-30916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:41:59.726 [DEBUG] [Thread-30916] [transport.py] [_log()] client lang: <none>
2026-04-16T03:41:59.726 [DEBUG] [Thread-30916] [transport.py] [_log()] server lang: <none>
2026-04-16T03:41:59.726 [DEBUG] [Thread-30916] [transport.py] [_log()] kex follows: False
2026-04-16T03:41:59.726 [DEBUG] [Thread-30916] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:41:59.726 [DEBUG] [Thread-30916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:41:59.727 [DEBUG] [Thread-30916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:41:59.727 [DEBUG] [Thread-30916] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:41:59.727 [DEBUG] [Thread-30916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:41:59.727 [DEBUG] [Thread-30916] [transport.py] [_log()] Compression: none
2026-04-16T03:41:59.727 [DEBUG] [Thread-30916] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:41:59.744 [DEBUG] [Thread-30916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:41:59.745 [DEBUG] [Thread-30916] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:41:59.745 [DEBUG] [Thread-30916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:41:59.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:41:59.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:41:59.746 [DEBUG] [Thread-30916] [transport.py] [_log()] userauth is OK
2026-04-16T03:41:59.746 [DEBUG] [Thread-30916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:41:59.746 [DEBUG] [Thread-30916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:41:59.747 [DEBUG] [Thread-30916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:41:59.747 [DEBUG] [Thread-30916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:41:59.768 [INFO] [Thread-30916] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:41:59.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:42:00.587 [DEBUG] [Thread-30916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:42:00.588 [DEBUG] [Thread-30916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:42:00.588 [DEBUG] [Thread-30916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:42:00.628 [DEBUG] [Thread-30916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:42:00.628 [DEBUG] [Thread-30916] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:42:00.631 [DEBUG] [Thread-30916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:42:00.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:42:00.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:42:00.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:42:00.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:42:00.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:42:00.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:42:00.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:42:00.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:42:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:42:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.070267 -999.00   +8.60  13.15     90   +7.10 1 1 1 3 1     0    0 1.43 -4.33 .NE.. 13.1 13.2 70.4 17.6 8.9 -25.7 8.8 -24.3 8.6 -22.1 8.8 -24.2
2026-04-16T03:42:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:42:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:42:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.070267
2026-04-16T03:42:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:42:00.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:42:00.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:42:00.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:42:00.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:42:00.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:41:19', tmtdew=1.43588, humidity=90.6383, cloud=0.0, wind=13.9396, temperature=8.44958, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:41:11.069', atlas_cloud=1, atlas_rain=1, zp_data=[3.4507499999999993, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3484999999999996, nan, 2.7002499999999987, nan, nan, 0.1722500000000018, -0.0022500000000000853, 0.15999999999999837, 0.23800000000000132, 0.2757500000000004, 0.19500000000000028, 0.18700000000000117, 0.1855000000000011, 0.10100000000000087, -0.0799999999999983, -0.08125000000000071], zp_timestamp='2026-04-16T01:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:42:00.656 [DEBUG] [Thread-30916] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:42:00.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:42:00.910 [DEBUG] [Thread-30919] [transport.py] [_log()] starting thread (client mode): 0xf13e1f30
2026-04-16T03:42:00.910 [DEBUG] [Thread-30919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:42:00.924 [DEBUG] [Thread-30919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:42:00.924 [INFO] [Thread-30919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:42:00.931 [DEBUG] [Thread-30919] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:42:00.931 [DEBUG] [Thread-30919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:42:00.931 [DEBUG] [Thread-30919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:42:00.931 [DEBUG] [Thread-30919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:42:00.931 [DEBUG] [Thread-30919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:42:00.932 [DEBUG] [Thread-30919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:42:00.932 [DEBUG] [Thread-30919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:42:00.932 [DEBUG] [Thread-30919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:42:00.932 [DEBUG] [Thread-30919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:42:00.932 [DEBUG] [Thread-30919] [transport.py] [_log()] client lang: <none>
2026-04-16T03:42:00.932 [DEBUG] [Thread-30919] [transport.py] [_log()] server lang: <none>
2026-04-16T03:42:00.932 [DEBUG] [Thread-30919] [transport.py] [_log()] kex follows: False
2026-04-16T03:42:00.932 [DEBUG] [Thread-30919] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:42:00.932 [DEBUG] [Thread-30919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:42:00.932 [DEBUG] [Thread-30919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:42:00.932 [DEBUG] [Thread-30919] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:42:00.932 [DEBUG] [Thread-30919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:42:00.933 [DEBUG] [Thread-30919] [transport.py] [_log()] Compression: none
2026-04-16T03:42:00.933 [DEBUG] [Thread-30919] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:42:00.994 [DEBUG] [Thread-30919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:42:00.994 [DEBUG] [Thread-30919] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:42:00.995 [DEBUG] [Thread-30919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:42:00.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:42:00.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:42:01.054 [DEBUG] [Thread-30919] [transport.py] [_log()] userauth is OK
2026-04-16T03:42:01.054 [DEBUG] [Thread-30919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:42:01.054 [DEBUG] [Thread-30919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:42:01.054 [DEBUG] [Thread-30919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:42:01.054 [DEBUG] [Thread-30919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:42:01.077 [INFO] [Thread-30919] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:42:01.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:42:01.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:42:01.883 [DEBUG] [Thread-30919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:42:01.883 [DEBUG] [Thread-30919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:42:01.931 [DEBUG] [Thread-30919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:42:01.931 [DEBUG] [Thread-30919] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:42:01.940 [DEBUG] [Thread-30919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:42:01.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:42: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')
2026-04-16T03:42: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
2026-04-16T03:42:01.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:42:01.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:42:01.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:42:01.975 [DEBUG] [Thread-30919] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:42:04.053 [DEBUG] [Thread-30921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:42:06.322 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:42:06.323 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:42:16.080 [DEBUG] [Thread-30922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:42:19.097 [DEBUG] [Thread-30923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:42:31.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:42:31.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:42: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
2026-04-16T03:42:33.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 41, 54), 1.43587, 90.6383, 0.0, 13.7984, 8.44961, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:42:33.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:41:54
2026-04-16T03:42:33.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:42:34.126 [DEBUG] [Thread-30924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:42:34.197 [DEBUG] [Thread-30925] [transport.py] [_log()] starting thread (client mode): 0xf13e1900
2026-04-16T03:42:34.197 [DEBUG] [Thread-30925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:42:34.217 [DEBUG] [Thread-30925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:42:34.217 [INFO] [Thread-30925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:42:34.220 [DEBUG] [Thread-30925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:42:34.220 [DEBUG] [Thread-30925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:42:34.221 [DEBUG] [Thread-30925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:42:34.221 [DEBUG] [Thread-30925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:42:34.221 [DEBUG] [Thread-30925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:42:34.221 [DEBUG] [Thread-30925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:42:34.221 [DEBUG] [Thread-30925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:42:34.221 [DEBUG] [Thread-30925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:42:34.221 [DEBUG] [Thread-30925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:42:34.221 [DEBUG] [Thread-30925] [transport.py] [_log()] client lang: <none>
2026-04-16T03:42:34.221 [DEBUG] [Thread-30925] [transport.py] [_log()] server lang: <none>
2026-04-16T03:42:34.221 [DEBUG] [Thread-30925] [transport.py] [_log()] kex follows: False
2026-04-16T03:42:34.221 [DEBUG] [Thread-30925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:42:34.222 [DEBUG] [Thread-30925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:42:34.222 [DEBUG] [Thread-30925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:42:34.222 [DEBUG] [Thread-30925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:42:34.222 [DEBUG] [Thread-30925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:42:34.222 [DEBUG] [Thread-30925] [transport.py] [_log()] Compression: none
2026-04-16T03:42:34.222 [DEBUG] [Thread-30925] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:42:34.239 [DEBUG] [Thread-30925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:42:34.239 [DEBUG] [Thread-30925] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:42:34.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:42:34.240 [DEBUG] [Thread-30925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:42:34.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:42:34.241 [DEBUG] [Thread-30925] [transport.py] [_log()] userauth is OK
2026-04-16T03:42:34.242 [DEBUG] [Thread-30925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:42:34.242 [DEBUG] [Thread-30925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:42:34.242 [DEBUG] [Thread-30925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:42:34.242 [DEBUG] [Thread-30925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:42:34.278 [INFO] [Thread-30925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:42:34.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:42:35.060 [DEBUG] [Thread-30925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:42:35.060 [DEBUG] [Thread-30925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:42:35.060 [DEBUG] [Thread-30925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:42:35.100 [DEBUG] [Thread-30925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:42:35.101 [DEBUG] [Thread-30925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:42:35.103 [DEBUG] [Thread-30925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:42:35.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:42:35.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:42:35.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:42:35.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:42:35.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:42:35.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:42:35.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:42:35.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:42:35.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:42:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.070614 -999.00   +8.60   8.94     90   +7.10 1 1 1 3 1     0    0 1.40 -4.13 .NE.. 13.1 8.9 110.9 14.5 8.9 -25.7 8.8 -24.4 8.6 -22.1 8.8 -24.2
2026-04-16T03:42:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:42:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:42:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.070614
2026-04-16T03:42:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:42:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:42:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:42:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:42:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:42:35.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:41:54', tmtdew=1.43587, humidity=90.6383, cloud=0.0, wind=13.7984, temperature=8.44961, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:41:41.050', atlas_cloud=1, atlas_rain=1, zp_data=[3.4507499999999993, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3484999999999996, nan, 2.7002499999999987, nan, nan, 0.1722500000000018, -0.0022500000000000853, 0.15999999999999837, 0.23800000000000132, 0.2757500000000004, 0.19500000000000028, 0.18700000000000117, 0.1855000000000011, 0.10100000000000087, -0.0799999999999983, -0.08125000000000071], zp_timestamp='2026-04-16T01:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:42:35.122 [DEBUG] [Thread-30925] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:42:35.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:42:35.340 [DEBUG] [Thread-30928] [transport.py] [_log()] starting thread (client mode): 0xf13e1450
2026-04-16T03:42:35.340 [DEBUG] [Thread-30928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:42:35.355 [DEBUG] [Thread-30928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:42:35.355 [INFO] [Thread-30928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:42:35.366 [DEBUG] [Thread-30928] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:42:35.366 [DEBUG] [Thread-30928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:42:35.366 [DEBUG] [Thread-30928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:42:35.366 [DEBUG] [Thread-30928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:42:35.366 [DEBUG] [Thread-30928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:42:35.366 [DEBUG] [Thread-30928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:42:35.366 [DEBUG] [Thread-30928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:42:35.366 [DEBUG] [Thread-30928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:42:35.366 [DEBUG] [Thread-30928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:42:35.366 [DEBUG] [Thread-30928] [transport.py] [_log()] client lang: <none>
2026-04-16T03:42:35.366 [DEBUG] [Thread-30928] [transport.py] [_log()] server lang: <none>
2026-04-16T03:42:35.366 [DEBUG] [Thread-30928] [transport.py] [_log()] kex follows: False
2026-04-16T03:42:35.366 [DEBUG] [Thread-30928] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:42:35.366 [DEBUG] [Thread-30928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:42:35.367 [DEBUG] [Thread-30928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:42:35.367 [DEBUG] [Thread-30928] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:42:35.367 [DEBUG] [Thread-30928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:42:35.367 [DEBUG] [Thread-30928] [transport.py] [_log()] Compression: none
2026-04-16T03:42:35.367 [DEBUG] [Thread-30928] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:42:35.420 [DEBUG] [Thread-30928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:42:35.421 [DEBUG] [Thread-30928] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:42:35.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:42:35.421 [DEBUG] [Thread-30928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:42:35.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:42:35.476 [DEBUG] [Thread-30928] [transport.py] [_log()] userauth is OK
2026-04-16T03:42:35.476 [DEBUG] [Thread-30928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:42:35.476 [DEBUG] [Thread-30928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:42:35.476 [DEBUG] [Thread-30928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:42:35.476 [DEBUG] [Thread-30928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:42:35.508 [INFO] [Thread-30928] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:42:35.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:42:35.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:42:36.325 [DEBUG] [Thread-30928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:42:36.325 [DEBUG] [Thread-30928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:42:36.373 [DEBUG] [Thread-30928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:42:36.374 [DEBUG] [Thread-30928] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:42:36.382 [DEBUG] [Thread-30928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:42:36.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:42:36.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')
2026-04-16T03:42:36.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
2026-04-16T03:42:36.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:42:36.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:42:36.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:42:36.414 [DEBUG] [Thread-30928] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:42:49.155 [DEBUG] [Thread-30930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:43:04.200 [DEBUG] [Thread-30931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:43:06.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:43:06.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:43:06.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
2026-04-16T03:43:06.528 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:43:06.529 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:43:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 42, 30), 1.43324, 90.6549, 0.0, 13.4809, 8.44961, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:43:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:42:30
2026-04-16T03:43:08.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:43:08.583 [DEBUG] [Thread-30932] [transport.py] [_log()] starting thread (client mode): 0xf13e1b10
2026-04-16T03:43:08.584 [DEBUG] [Thread-30932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:43:08.603 [DEBUG] [Thread-30932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:43:08.603 [INFO] [Thread-30932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] client lang: <none>
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] server lang: <none>
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] kex follows: False
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:43:08.607 [DEBUG] [Thread-30932] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:43:08.608 [DEBUG] [Thread-30932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:43:08.608 [DEBUG] [Thread-30932] [transport.py] [_log()] Compression: none
2026-04-16T03:43:08.608 [DEBUG] [Thread-30932] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:43:08.624 [DEBUG] [Thread-30932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:43:08.624 [DEBUG] [Thread-30932] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:43:08.624 [DEBUG] [Thread-30932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:43:08.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:43:08.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:43:08.668 [DEBUG] [Thread-30932] [transport.py] [_log()] userauth is OK
2026-04-16T03:43:08.669 [DEBUG] [Thread-30932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:43:08.669 [DEBUG] [Thread-30932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:43:08.669 [DEBUG] [Thread-30932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:43:08.669 [DEBUG] [Thread-30932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:43:08.704 [INFO] [Thread-30932] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:43:08.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:43:09.493 [DEBUG] [Thread-30932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:43:09.493 [DEBUG] [Thread-30932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:43:09.494 [DEBUG] [Thread-30932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:43:09.533 [DEBUG] [Thread-30932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:43:09.534 [DEBUG] [Thread-30932] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:43:09.536 [DEBUG] [Thread-30932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:43:09.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:43:09.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:43:09.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:43:09.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:43:09.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:43:09.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:43:09.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:43:09.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:43:09.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:43:09.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.070961 -999.00   +8.60  13.30     90   +7.10 1 1 1 3 1     0    0 1.43 -4.35 .NE.. 12.4 13.3 89.2 18.0 8.9 -25.5 8.8 -24.2 8.5 -22.0 8.8 -24.2
2026-04-16T03:43:09.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:43:09.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:43:09.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.070961
2026-04-16T03:43:09.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:43:09.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:43:09.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:43:09.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:43:09.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:43:09.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:42:30', tmtdew=1.43324, humidity=90.6549, cloud=0.0, wind=13.4809, temperature=8.44961, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:42:11.030', atlas_cloud=1, atlas_rain=1, zp_data=[3.4507499999999993, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3484999999999996, nan, 2.7002499999999987, nan, nan, 0.1722500000000018, -0.0022500000000000853, 0.15999999999999837, 0.23800000000000132, 0.2757500000000004, 0.19500000000000028, 0.18700000000000117, 0.1855000000000011, 0.10100000000000087, -0.0799999999999983, -0.08125000000000071], zp_timestamp='2026-04-16T01:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:43:09.558 [DEBUG] [Thread-30932] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:43:09.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:43:09.797 [DEBUG] [Thread-30935] [transport.py] [_log()] starting thread (client mode): 0xf13e1960
2026-04-16T03:43:09.797 [DEBUG] [Thread-30935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:43:09.812 [DEBUG] [Thread-30935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:43:09.812 [INFO] [Thread-30935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:43:09.819 [DEBUG] [Thread-30935] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:43:09.820 [DEBUG] [Thread-30935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:43:09.820 [DEBUG] [Thread-30935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:43:09.820 [DEBUG] [Thread-30935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:43:09.820 [DEBUG] [Thread-30935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:43:09.820 [DEBUG] [Thread-30935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:43:09.820 [DEBUG] [Thread-30935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:43:09.820 [DEBUG] [Thread-30935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:43:09.820 [DEBUG] [Thread-30935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:43:09.820 [DEBUG] [Thread-30935] [transport.py] [_log()] client lang: <none>
2026-04-16T03:43:09.820 [DEBUG] [Thread-30935] [transport.py] [_log()] server lang: <none>
2026-04-16T03:43:09.820 [DEBUG] [Thread-30935] [transport.py] [_log()] kex follows: False
2026-04-16T03:43:09.820 [DEBUG] [Thread-30935] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:43:09.821 [DEBUG] [Thread-30935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:43:09.821 [DEBUG] [Thread-30935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:43:09.821 [DEBUG] [Thread-30935] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:43:09.821 [DEBUG] [Thread-30935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:43:09.821 [DEBUG] [Thread-30935] [transport.py] [_log()] Compression: none
2026-04-16T03:43:09.821 [DEBUG] [Thread-30935] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:43:09.877 [DEBUG] [Thread-30935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:43:09.878 [DEBUG] [Thread-30935] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:43:09.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:43:09.878 [DEBUG] [Thread-30935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:43:09.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:43:09.934 [DEBUG] [Thread-30935] [transport.py] [_log()] userauth is OK
2026-04-16T03:43:09.935 [DEBUG] [Thread-30935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:43:09.935 [DEBUG] [Thread-30935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:43:09.935 [DEBUG] [Thread-30935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:43:09.935 [DEBUG] [Thread-30935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:43:09.961 [INFO] [Thread-30935] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:43:09.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:43:09.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:43:10.766 [DEBUG] [Thread-30935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:43:10.767 [DEBUG] [Thread-30935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:43:10.814 [DEBUG] [Thread-30935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:43:10.814 [DEBUG] [Thread-30935] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:43:10.823 [DEBUG] [Thread-30935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:43:10.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:43:10.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')
2026-04-16T03:43:10.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
2026-04-16T03:43:10.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:43:10.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:43:10.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:43:10.857 [DEBUG] [Thread-30935] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:43:16.256 [DEBUG] [Thread-30937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:43:19.230 [DEBUG] [Thread-30938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:43:34.274 [DEBUG] [Thread-30939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:43:40.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:43:40.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:43:40.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
2026-04-16T03:43:42.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 43, 6), 1.42557, 90.7044, 0.0, 13.8337, 8.46598, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:43:42.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:43:06
2026-04-16T03:43:42.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:43:43.007 [DEBUG] [Thread-30940] [transport.py] [_log()] starting thread (client mode): 0xf13e0490
2026-04-16T03:43:43.007 [DEBUG] [Thread-30940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:43:43.027 [DEBUG] [Thread-30940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:43:43.027 [INFO] [Thread-30940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:43:43.030 [DEBUG] [Thread-30940] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:43:43.030 [DEBUG] [Thread-30940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:43:43.030 [DEBUG] [Thread-30940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:43:43.031 [DEBUG] [Thread-30940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:43:43.031 [DEBUG] [Thread-30940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:43:43.031 [DEBUG] [Thread-30940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:43:43.031 [DEBUG] [Thread-30940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:43:43.031 [DEBUG] [Thread-30940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:43:43.031 [DEBUG] [Thread-30940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:43:43.031 [DEBUG] [Thread-30940] [transport.py] [_log()] client lang: <none>
2026-04-16T03:43:43.031 [DEBUG] [Thread-30940] [transport.py] [_log()] server lang: <none>
2026-04-16T03:43:43.031 [DEBUG] [Thread-30940] [transport.py] [_log()] kex follows: False
2026-04-16T03:43:43.031 [DEBUG] [Thread-30940] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:43:43.031 [DEBUG] [Thread-30940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:43:43.031 [DEBUG] [Thread-30940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:43:43.032 [DEBUG] [Thread-30940] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:43:43.032 [DEBUG] [Thread-30940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:43:43.032 [DEBUG] [Thread-30940] [transport.py] [_log()] Compression: none
2026-04-16T03:43:43.032 [DEBUG] [Thread-30940] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:43:43.049 [DEBUG] [Thread-30940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:43:43.049 [DEBUG] [Thread-30940] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:43:43.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:43:43.050 [DEBUG] [Thread-30940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:43:43.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:43:43.051 [DEBUG] [Thread-30940] [transport.py] [_log()] userauth is OK
2026-04-16T03:43:43.051 [DEBUG] [Thread-30940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:43:43.052 [DEBUG] [Thread-30940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:43:43.052 [DEBUG] [Thread-30940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:43:43.052 [DEBUG] [Thread-30940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:43:43.077 [INFO] [Thread-30940] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:43:43.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:43:43.834 [DEBUG] [Thread-30940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:43:43.835 [DEBUG] [Thread-30940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:43:43.835 [DEBUG] [Thread-30940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:43:43.875 [DEBUG] [Thread-30940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:43:43.875 [DEBUG] [Thread-30940] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:43:43.878 [DEBUG] [Thread-30940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:43:43.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:43:43.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:43:43.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:43:43.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:43:43.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:43:43.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:43:43.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:43:43.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:43:43.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:43:43.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.071656 -999.00   +8.60  10.73     90   +7.10 1 1 1 3 1     0    0 1.44 -3.57 .NE.. 11.6 10.7 87.9 16.7 9.0 -25.5 8.8 -24.2 8.5 -22.0 8.9 -24.1
2026-04-16T03:43:43.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:43:43.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:43:43.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.071656
2026-04-16T03:43:43.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:43:43.903 [DEBUG] [Thread-30940] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:43:43.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:43:43.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:43:43.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:43:43.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:43:43.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:43:06', tmtdew=1.42557, humidity=90.7044, cloud=0.0, wind=13.8337, temperature=8.46598, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:43:11.078', atlas_cloud=1, atlas_rain=1, zp_data=[3.4507499999999993, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3484999999999996, nan, 2.7002499999999987, nan, nan, 0.1722500000000018, -0.0022500000000000853, 0.15999999999999837, 0.23800000000000132, 0.2757500000000004, 0.19500000000000028, 0.18700000000000117, 0.1855000000000011, 0.10100000000000087, -0.0799999999999983, -0.08125000000000071], zp_timestamp='2026-04-16T01:39:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:43:44.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:43:44.160 [DEBUG] [Thread-30943] [transport.py] [_log()] starting thread (client mode): 0xf13e3370
2026-04-16T03:43:44.160 [DEBUG] [Thread-30943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:43:44.174 [DEBUG] [Thread-30943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:43:44.174 [INFO] [Thread-30943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:43:44.181 [DEBUG] [Thread-30943] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:43:44.182 [DEBUG] [Thread-30943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:43:44.182 [DEBUG] [Thread-30943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:43:44.182 [DEBUG] [Thread-30943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:43:44.182 [DEBUG] [Thread-30943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:43:44.182 [DEBUG] [Thread-30943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:43:44.182 [DEBUG] [Thread-30943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:43:44.182 [DEBUG] [Thread-30943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:43:44.182 [DEBUG] [Thread-30943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:43:44.182 [DEBUG] [Thread-30943] [transport.py] [_log()] client lang: <none>
2026-04-16T03:43:44.182 [DEBUG] [Thread-30943] [transport.py] [_log()] server lang: <none>
2026-04-16T03:43:44.183 [DEBUG] [Thread-30943] [transport.py] [_log()] kex follows: False
2026-04-16T03:43:44.183 [DEBUG] [Thread-30943] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:43:44.183 [DEBUG] [Thread-30943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:43:44.183 [DEBUG] [Thread-30943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:43:44.183 [DEBUG] [Thread-30943] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:43:44.183 [DEBUG] [Thread-30943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:43:44.183 [DEBUG] [Thread-30943] [transport.py] [_log()] Compression: none
2026-04-16T03:43:44.183 [DEBUG] [Thread-30943] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:43:44.240 [DEBUG] [Thread-30943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:43:44.241 [DEBUG] [Thread-30943] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:43:44.241 [DEBUG] [Thread-30943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:43:44.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:43:44.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:43:44.296 [DEBUG] [Thread-30943] [transport.py] [_log()] userauth is OK
2026-04-16T03:43:44.296 [DEBUG] [Thread-30943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:43:44.297 [DEBUG] [Thread-30943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:43:44.297 [DEBUG] [Thread-30943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:43:44.297 [DEBUG] [Thread-30943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:43:44.314 [INFO] [Thread-30943] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:43:44.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:43:44.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:43:45.153 [DEBUG] [Thread-30943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:43:45.153 [DEBUG] [Thread-30943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:43:45.201 [DEBUG] [Thread-30943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:43:45.201 [DEBUG] [Thread-30943] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:43:45.210 [DEBUG] [Thread-30943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:43:45.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:43:45.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')
2026-04-16T03:43:45.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
2026-04-16T03:43:45.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:43:45.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:43:45.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:43:45.244 [DEBUG] [Thread-30943] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:43:49.305 [DEBUG] [Thread-30945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:44:04.350 [DEBUG] [Thread-30946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:44:06.733 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:44:06.734 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:44:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:44:15.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:44:15.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T03:44:16.413 [DEBUG] [Thread-30947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:44:16.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 43, 41), 1.15637, 92.3755, 0.0, 16.9733, 8.33196, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:44:16.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:43:41
2026-04-16T03:44:16.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:44:17.350 [DEBUG] [Thread-30948] [transport.py] [_log()] starting thread (client mode): 0xf13e1210
2026-04-16T03:44:17.350 [DEBUG] [Thread-30948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:44:17.370 [DEBUG] [Thread-30948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:44:17.370 [INFO] [Thread-30948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:44:17.373 [DEBUG] [Thread-30948] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:44:17.373 [DEBUG] [Thread-30948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:44:17.373 [DEBUG] [Thread-30948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:44:17.373 [DEBUG] [Thread-30948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:44:17.374 [DEBUG] [Thread-30948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:44:17.374 [DEBUG] [Thread-30948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:44:17.374 [DEBUG] [Thread-30948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:44:17.374 [DEBUG] [Thread-30948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:44:17.374 [DEBUG] [Thread-30948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:44:17.374 [DEBUG] [Thread-30948] [transport.py] [_log()] client lang: <none>
2026-04-16T03:44:17.374 [DEBUG] [Thread-30948] [transport.py] [_log()] server lang: <none>
2026-04-16T03:44:17.374 [DEBUG] [Thread-30948] [transport.py] [_log()] kex follows: False
2026-04-16T03:44:17.374 [DEBUG] [Thread-30948] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:44:17.374 [DEBUG] [Thread-30948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:44:17.374 [DEBUG] [Thread-30948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:44:17.374 [DEBUG] [Thread-30948] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:44:17.375 [DEBUG] [Thread-30948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:44:17.375 [DEBUG] [Thread-30948] [transport.py] [_log()] Compression: none
2026-04-16T03:44:17.375 [DEBUG] [Thread-30948] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:44:17.390 [DEBUG] [Thread-30948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:44:17.391 [DEBUG] [Thread-30948] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:44:17.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:44:17.391 [DEBUG] [Thread-30948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:44:17.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:44:17.392 [DEBUG] [Thread-30948] [transport.py] [_log()] userauth is OK
2026-04-16T03:44:17.393 [DEBUG] [Thread-30948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:44:17.393 [DEBUG] [Thread-30948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:44:17.393 [DEBUG] [Thread-30948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:44:17.393 [DEBUG] [Thread-30948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:44:17.410 [INFO] [Thread-30948] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:44:17.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:44:18.230 [DEBUG] [Thread-30948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:44:18.230 [DEBUG] [Thread-30948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:44:18.231 [DEBUG] [Thread-30948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:44:18.271 [DEBUG] [Thread-30948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:44:18.271 [DEBUG] [Thread-30948] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:44:18.274 [DEBUG] [Thread-30948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:44:18.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:44:18.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:44:18.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:44:18.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:44:18.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:44:18.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:44:18.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:44:18.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:44:18.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:44:18.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.072003 -999.00   +8.60  12.68     90   +7.10 1 1 1 3 1     0    0 1.44 -3.15 .NESW 10.1 12.7 68.1 16.0 8.9 -25.5 8.8 -24.2 8.6 -22.2 8.8 -24.1
2026-04-16T03:44:18.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:44:18.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:44:18.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.072003
2026-04-16T03:44:18.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:44:18.337 [DEBUG] [Thread-30948] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:44:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:44:18.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:44:18.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:44:18.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:44:18.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:43:41', tmtdew=1.15637, humidity=92.3755, cloud=0.0, wind=16.9733, temperature=8.33196, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:43:41.059', atlas_cloud=1, atlas_rain=1, zp_data=[3.4507499999999993, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3484999999999996, nan, 2.7002499999999987, nan, nan, 0.1722500000000018, -0.0022500000000000853, 0.15999999999999837, 0.23800000000000132, 0.2757500000000004, 0.19500000000000028, 0.18700000000000117, 0.1855000000000011, 0.10100000000000087, -0.0799999999999983, -0.08125000000000071], zp_timestamp='2026-04-16T01:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:44:18.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:44:18.579 [DEBUG] [Thread-30951] [transport.py] [_log()] starting thread (client mode): 0xf13e1f60
2026-04-16T03:44:18.579 [DEBUG] [Thread-30951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:44:18.593 [DEBUG] [Thread-30951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:44:18.594 [INFO] [Thread-30951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:44:18.601 [DEBUG] [Thread-30951] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:44:18.601 [DEBUG] [Thread-30951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:44:18.601 [DEBUG] [Thread-30951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:44:18.601 [DEBUG] [Thread-30951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:44:18.601 [DEBUG] [Thread-30951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:44:18.601 [DEBUG] [Thread-30951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:44:18.601 [DEBUG] [Thread-30951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:44:18.602 [DEBUG] [Thread-30951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:44:18.602 [DEBUG] [Thread-30951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:44:18.602 [DEBUG] [Thread-30951] [transport.py] [_log()] client lang: <none>
2026-04-16T03:44:18.602 [DEBUG] [Thread-30951] [transport.py] [_log()] server lang: <none>
2026-04-16T03:44:18.602 [DEBUG] [Thread-30951] [transport.py] [_log()] kex follows: False
2026-04-16T03:44:18.602 [DEBUG] [Thread-30951] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:44:18.602 [DEBUG] [Thread-30951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:44:18.602 [DEBUG] [Thread-30951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:44:18.602 [DEBUG] [Thread-30951] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:44:18.602 [DEBUG] [Thread-30951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:44:18.602 [DEBUG] [Thread-30951] [transport.py] [_log()] Compression: none
2026-04-16T03:44:18.602 [DEBUG] [Thread-30951] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:44:18.658 [DEBUG] [Thread-30951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:44:18.658 [DEBUG] [Thread-30951] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:44:18.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:44:18.659 [DEBUG] [Thread-30951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:44:18.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:44:18.715 [DEBUG] [Thread-30951] [transport.py] [_log()] userauth is OK
2026-04-16T03:44:18.715 [DEBUG] [Thread-30951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:44:18.715 [DEBUG] [Thread-30951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:44:18.716 [DEBUG] [Thread-30951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:44:18.716 [DEBUG] [Thread-30951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:44:18.740 [INFO] [Thread-30951] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:44:18.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:44:18.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:44:19.381 [DEBUG] [Thread-30953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:44:19.584 [DEBUG] [Thread-30951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:44:19.585 [DEBUG] [Thread-30951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:44:19.632 [DEBUG] [Thread-30951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:44:19.632 [DEBUG] [Thread-30951] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:44:19.641 [DEBUG] [Thread-30951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:44:19.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:44:19.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')
2026-04-16T03:44:19.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') -> 00000000
2026-04-16T03:44:19.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:44:19.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:44:19.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:44:19.676 [DEBUG] [Thread-30951] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:44:34.426 [DEBUG] [Thread-30954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:44:49.455 [DEBUG] [Thread-30955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:44:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:44:49.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:44:49.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
2026-04-16T03:44:50.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 44, 17), 1.43071, 90.6709, 0.0, 13.622, 8.49922, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:44:50.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:44:17
2026-04-16T03:44:51.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:44:51.784 [DEBUG] [Thread-30956] [transport.py] [_log()] starting thread (client mode): 0xf13e2e30
2026-04-16T03:44:51.785 [DEBUG] [Thread-30956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:44:51.804 [DEBUG] [Thread-30956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:44:51.804 [INFO] [Thread-30956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:44:51.807 [DEBUG] [Thread-30956] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:44:51.808 [DEBUG] [Thread-30956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:44:51.808 [DEBUG] [Thread-30956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:44:51.808 [DEBUG] [Thread-30956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:44:51.808 [DEBUG] [Thread-30956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:44:51.808 [DEBUG] [Thread-30956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:44:51.808 [DEBUG] [Thread-30956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:44:51.808 [DEBUG] [Thread-30956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:44:51.808 [DEBUG] [Thread-30956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:44:51.808 [DEBUG] [Thread-30956] [transport.py] [_log()] client lang: <none>
2026-04-16T03:44:51.808 [DEBUG] [Thread-30956] [transport.py] [_log()] server lang: <none>
2026-04-16T03:44:51.808 [DEBUG] [Thread-30956] [transport.py] [_log()] kex follows: False
2026-04-16T03:44:51.809 [DEBUG] [Thread-30956] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:44:51.809 [DEBUG] [Thread-30956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:44:51.809 [DEBUG] [Thread-30956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:44:51.809 [DEBUG] [Thread-30956] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:44:51.809 [DEBUG] [Thread-30956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:44:51.809 [DEBUG] [Thread-30956] [transport.py] [_log()] Compression: none
2026-04-16T03:44:51.809 [DEBUG] [Thread-30956] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:44:51.828 [DEBUG] [Thread-30956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:44:51.829 [DEBUG] [Thread-30956] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:44:51.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:44:51.829 [DEBUG] [Thread-30956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:44:51.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:44:51.831 [DEBUG] [Thread-30956] [transport.py] [_log()] userauth is OK
2026-04-16T03:44:51.831 [DEBUG] [Thread-30956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:44:51.831 [DEBUG] [Thread-30956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:44:51.831 [DEBUG] [Thread-30956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:44:51.831 [DEBUG] [Thread-30956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:44:51.849 [INFO] [Thread-30956] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:44:51.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:44:52.674 [DEBUG] [Thread-30956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:44:52.674 [DEBUG] [Thread-30956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:44:52.674 [DEBUG] [Thread-30956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:44:52.715 [DEBUG] [Thread-30956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:44:52.715 [DEBUG] [Thread-30956] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:44:52.717 [DEBUG] [Thread-30956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:44:52.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:44:52.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:44:52.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:44:52.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:44:52.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:44:52.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:44:52.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:44:52.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:44:52.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:44:52.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.072350 -999.00   +8.60  13.24     90   +7.10 1 1 1 3 1     0    0 1.47 -3.08 .NESW 13.2 13.2 92.4 16.0 8.9 -25.5 8.8 -24.2 8.5 -22.2 8.8 -24.1
2026-04-16T03:44:52.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:44:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:44:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.072350
2026-04-16T03:44:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:44:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:44:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:44:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:44:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:44:52.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:44:17', tmtdew=1.43071, humidity=90.6709, cloud=0.0, wind=13.622, temperature=8.49922, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:44:11.040', atlas_cloud=1, atlas_rain=1, zp_data=[3.4507499999999993, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3484999999999996, nan, 2.7002499999999987, nan, nan, 0.1722500000000018, -0.0022500000000000853, 0.15999999999999837, 0.23800000000000132, 0.2757500000000004, 0.19500000000000028, 0.18700000000000117, 0.1855000000000011, 0.10100000000000087, -0.0799999999999983, -0.08125000000000071], zp_timestamp='2026-04-16T01:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:44:52.739 [DEBUG] [Thread-30956] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:44:52.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:44:52.948 [DEBUG] [Thread-30959] [transport.py] [_log()] starting thread (client mode): 0xf13e2cb0
2026-04-16T03:44:52.948 [DEBUG] [Thread-30959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:44:52.962 [DEBUG] [Thread-30959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:44:52.962 [INFO] [Thread-30959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:44:52.971 [DEBUG] [Thread-30959] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:44:52.971 [DEBUG] [Thread-30959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:44:52.971 [DEBUG] [Thread-30959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:44:52.971 [DEBUG] [Thread-30959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:44:52.972 [DEBUG] [Thread-30959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:44:52.972 [DEBUG] [Thread-30959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:44:52.972 [DEBUG] [Thread-30959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:44:52.972 [DEBUG] [Thread-30959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:44:52.972 [DEBUG] [Thread-30959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:44:52.972 [DEBUG] [Thread-30959] [transport.py] [_log()] client lang: <none>
2026-04-16T03:44:52.972 [DEBUG] [Thread-30959] [transport.py] [_log()] server lang: <none>
2026-04-16T03:44:52.973 [DEBUG] [Thread-30959] [transport.py] [_log()] kex follows: False
2026-04-16T03:44:52.973 [DEBUG] [Thread-30959] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:44:52.973 [DEBUG] [Thread-30959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:44:52.973 [DEBUG] [Thread-30959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:44:52.973 [DEBUG] [Thread-30959] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:44:52.973 [DEBUG] [Thread-30959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:44:52.973 [DEBUG] [Thread-30959] [transport.py] [_log()] Compression: none
2026-04-16T03:44:52.974 [DEBUG] [Thread-30959] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:44:53.029 [DEBUG] [Thread-30959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:44:53.029 [DEBUG] [Thread-30959] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:44:53.030 [DEBUG] [Thread-30959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:44:53.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:44:53.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:44:53.085 [DEBUG] [Thread-30959] [transport.py] [_log()] userauth is OK
2026-04-16T03:44:53.086 [DEBUG] [Thread-30959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:44:53.086 [DEBUG] [Thread-30959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:44:53.086 [DEBUG] [Thread-30959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:44:53.086 [DEBUG] [Thread-30959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:44:53.109 [INFO] [Thread-30959] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:44:53.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:44:53.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:44:53.919 [DEBUG] [Thread-30959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:44:53.919 [DEBUG] [Thread-30959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:44:53.967 [DEBUG] [Thread-30959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:44:53.967 [DEBUG] [Thread-30959] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:44:53.976 [DEBUG] [Thread-30959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:44:53.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:44:53.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')
2026-04-16T03:44:53.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
2026-04-16T03:44:54.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:44:54.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:44:54.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:44:54.010 [DEBUG] [Thread-30959] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:45:04.486 [DEBUG] [Thread-30961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:45:06.940 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:45:06.942 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:45:16.570 [DEBUG] [Thread-30962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:45:19.530 [DEBUG] [Thread-30963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:45:24.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:45:24.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:45:24.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
2026-04-16T03:45:25.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 44, 52), 1.17633, 92.2422, 0.0, 16.938, 8.19888, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:45:25.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:44:52
2026-04-16T03:45:25.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:45:26.420 [DEBUG] [Thread-30964] [transport.py] [_log()] starting thread (client mode): 0xf13e1300
2026-04-16T03:45:26.421 [DEBUG] [Thread-30964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:45:26.436 [DEBUG] [Thread-30964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:45:26.436 [INFO] [Thread-30964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:45:26.439 [DEBUG] [Thread-30964] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:45:26.439 [DEBUG] [Thread-30964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:45:26.439 [DEBUG] [Thread-30964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:45:26.439 [DEBUG] [Thread-30964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:45:26.440 [DEBUG] [Thread-30964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:45:26.440 [DEBUG] [Thread-30964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:45:26.440 [DEBUG] [Thread-30964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:45:26.440 [DEBUG] [Thread-30964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:45:26.440 [DEBUG] [Thread-30964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:45:26.440 [DEBUG] [Thread-30964] [transport.py] [_log()] client lang: <none>
2026-04-16T03:45:26.440 [DEBUG] [Thread-30964] [transport.py] [_log()] server lang: <none>
2026-04-16T03:45:26.440 [DEBUG] [Thread-30964] [transport.py] [_log()] kex follows: False
2026-04-16T03:45:26.440 [DEBUG] [Thread-30964] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:45:26.440 [DEBUG] [Thread-30964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:45:26.440 [DEBUG] [Thread-30964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:45:26.440 [DEBUG] [Thread-30964] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:45:26.440 [DEBUG] [Thread-30964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:45:26.440 [DEBUG] [Thread-30964] [transport.py] [_log()] Compression: none
2026-04-16T03:45:26.440 [DEBUG] [Thread-30964] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:45:26.457 [DEBUG] [Thread-30964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:45:26.457 [DEBUG] [Thread-30964] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:45:26.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:45:26.458 [DEBUG] [Thread-30964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:45:26.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:45:26.459 [DEBUG] [Thread-30964] [transport.py] [_log()] userauth is OK
2026-04-16T03:45:26.459 [DEBUG] [Thread-30964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:45:26.459 [DEBUG] [Thread-30964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:45:26.459 [DEBUG] [Thread-30964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:45:26.459 [DEBUG] [Thread-30964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:45:26.489 [INFO] [Thread-30964] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:45:26.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:45:27.661 [DEBUG] [Thread-30964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:45:27.662 [DEBUG] [Thread-30964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:45:27.662 [DEBUG] [Thread-30964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:45:27.702 [DEBUG] [Thread-30964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:45:27.702 [DEBUG] [Thread-30964] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:45:27.705 [DEBUG] [Thread-30964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:45:27.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:45:27.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:45:27.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:45:27.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:45:27.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:45:27.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:45:27.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:45:27.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:45:27.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:45:27.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.072697 -999.00   +8.60  12.51     90   +7.10 1 1 1 3 1     0    0 1.46 -2.90 .NE.W 8.0 12.5 80.3 17.2 8.9 -25.5 8.8 -24.3 8.6 -22.1 8.8 -24.1
2026-04-16T03:45:27.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:45:27.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:45:27.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.072697
2026-04-16T03:45:27.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:45:27.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:45:27.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:45:27.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:45:27.734 [DEBUG] [Thread-30964] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:45:27.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:45:27.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:44:52', tmtdew=1.17633, humidity=92.2422, cloud=0.0, wind=16.938, temperature=8.19888, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:44:41.021', atlas_cloud=1, atlas_rain=1, zp_data=[3.4507499999999993, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3484999999999996, nan, 2.7002499999999987, nan, nan, 0.1722500000000018, -0.0022500000000000853, 0.15999999999999837, 0.23800000000000132, 0.2757500000000004, 0.19500000000000028, 0.18700000000000117, 0.1855000000000011, 0.10100000000000087, -0.0799999999999983, -0.08125000000000071], zp_timestamp='2026-04-16T01:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:45:27.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:45:27.971 [DEBUG] [Thread-30967] [transport.py] [_log()] starting thread (client mode): 0xf13e03a0
2026-04-16T03:45:27.971 [DEBUG] [Thread-30967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:45:27.988 [DEBUG] [Thread-30967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:45:27.988 [INFO] [Thread-30967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:45:27.995 [DEBUG] [Thread-30967] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:45:27.995 [DEBUG] [Thread-30967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:45:27.995 [DEBUG] [Thread-30967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:45:27.996 [DEBUG] [Thread-30967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:45:27.996 [DEBUG] [Thread-30967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:45:27.996 [DEBUG] [Thread-30967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:45:27.996 [DEBUG] [Thread-30967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:45:27.996 [DEBUG] [Thread-30967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:45:27.996 [DEBUG] [Thread-30967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:45:27.996 [DEBUG] [Thread-30967] [transport.py] [_log()] client lang: <none>
2026-04-16T03:45:27.996 [DEBUG] [Thread-30967] [transport.py] [_log()] server lang: <none>
2026-04-16T03:45:27.996 [DEBUG] [Thread-30967] [transport.py] [_log()] kex follows: False
2026-04-16T03:45:27.996 [DEBUG] [Thread-30967] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:45:27.996 [DEBUG] [Thread-30967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:45:27.996 [DEBUG] [Thread-30967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:45:27.997 [DEBUG] [Thread-30967] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:45:27.997 [DEBUG] [Thread-30967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:45:27.997 [DEBUG] [Thread-30967] [transport.py] [_log()] Compression: none
2026-04-16T03:45:27.997 [DEBUG] [Thread-30967] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:45:28.051 [DEBUG] [Thread-30967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:45:28.052 [DEBUG] [Thread-30967] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:45:28.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:45:28.052 [DEBUG] [Thread-30967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:45:28.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:45:28.108 [DEBUG] [Thread-30967] [transport.py] [_log()] userauth is OK
2026-04-16T03:45:28.109 [DEBUG] [Thread-30967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:45:28.109 [DEBUG] [Thread-30967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:45:28.109 [DEBUG] [Thread-30967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:45:28.109 [DEBUG] [Thread-30967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:45:28.137 [INFO] [Thread-30967] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:45:28.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:45:28.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:45:28.946 [DEBUG] [Thread-30967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:45:28.946 [DEBUG] [Thread-30967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:45:28.994 [DEBUG] [Thread-30967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:45:28.994 [DEBUG] [Thread-30967] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:45:29.003 [DEBUG] [Thread-30967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:45:29.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:45:29.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')
2026-04-16T03:45:29.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
2026-04-16T03:45:29.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:45:29.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:45:29.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:45:29.038 [DEBUG] [Thread-30967] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:45:34.561 [DEBUG] [Thread-30969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:45:49.604 [DEBUG] [Thread-30970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:45:59.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:45:59.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:45:59.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
2026-04-16T03:46:00.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 45, 28), 1.43323, 90.6541, 0.0, 15.7748, 8.48248, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:46:00.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:45:28
2026-04-16T03:46:00.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:46:01.224 [DEBUG] [Thread-30971] [transport.py] [_log()] starting thread (client mode): 0xee943130
2026-04-16T03:46:01.224 [DEBUG] [Thread-30971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:46:01.243 [DEBUG] [Thread-30971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:46:01.244 [INFO] [Thread-30971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:46:01.247 [DEBUG] [Thread-30971] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:46:01.247 [DEBUG] [Thread-30971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:46:01.247 [DEBUG] [Thread-30971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:46:01.247 [DEBUG] [Thread-30971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:46:01.247 [DEBUG] [Thread-30971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:46:01.247 [DEBUG] [Thread-30971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:46:01.247 [DEBUG] [Thread-30971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:46:01.247 [DEBUG] [Thread-30971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:46:01.247 [DEBUG] [Thread-30971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:46:01.248 [DEBUG] [Thread-30971] [transport.py] [_log()] client lang: <none>
2026-04-16T03:46:01.248 [DEBUG] [Thread-30971] [transport.py] [_log()] server lang: <none>
2026-04-16T03:46:01.248 [DEBUG] [Thread-30971] [transport.py] [_log()] kex follows: False
2026-04-16T03:46:01.248 [DEBUG] [Thread-30971] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:46:01.248 [DEBUG] [Thread-30971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:46:01.248 [DEBUG] [Thread-30971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:46:01.248 [DEBUG] [Thread-30971] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:46:01.248 [DEBUG] [Thread-30971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:46:01.248 [DEBUG] [Thread-30971] [transport.py] [_log()] Compression: none
2026-04-16T03:46:01.248 [DEBUG] [Thread-30971] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:46:01.264 [DEBUG] [Thread-30971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:46:01.264 [DEBUG] [Thread-30971] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:46:01.264 [DEBUG] [Thread-30971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:46:01.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:46:01.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:46:01.265 [DEBUG] [Thread-30971] [transport.py] [_log()] userauth is OK
2026-04-16T03:46:01.266 [DEBUG] [Thread-30971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:46:01.266 [DEBUG] [Thread-30971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:46:01.266 [DEBUG] [Thread-30971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:46:01.266 [DEBUG] [Thread-30971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:46:01.290 [INFO] [Thread-30971] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:46:01.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:46:02.115 [DEBUG] [Thread-30971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:46:02.115 [DEBUG] [Thread-30971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:46:02.116 [DEBUG] [Thread-30971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:46:02.156 [DEBUG] [Thread-30971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:46:02.156 [DEBUG] [Thread-30971] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:46:02.159 [DEBUG] [Thread-30971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:46:02.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:46:02.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:46:02.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:46:02.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:46:02.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:46:02.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:46:02.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:46:02.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:46:02.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:46:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.073045 -999.00   +8.60  13.73     90   +7.10 1 1 1 3 1     0    0 1.43 -3.03 .NEsW 9.7 13.7 66.2 18.8 8.9 -25.6 8.8 -24.2 8.6 -22.0 8.8 -24.2
2026-04-16T03:46:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:46:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:46:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.073045
2026-04-16T03:46:02.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:46:02.186 [DEBUG] [Thread-30971] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:46:02.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:46:02.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:46:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:46:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:46:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:45:28', tmtdew=1.43323, humidity=90.6541, cloud=0.0, wind=15.7748, temperature=8.48248, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:45:11.088', atlas_cloud=1, atlas_rain=1, zp_data=[3.4507499999999993, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3484999999999996, nan, 2.7002499999999987, nan, nan, 0.1722500000000018, -0.0022500000000000853, 0.15999999999999837, 0.23800000000000132, 0.2757500000000004, 0.19500000000000028, 0.18700000000000117, 0.1855000000000011, 0.10100000000000087, -0.0799999999999983, -0.08125000000000071], zp_timestamp='2026-04-16T01:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:46:02.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:46:02.442 [DEBUG] [Thread-30974] [transport.py] [_log()] starting thread (client mode): 0xee9435b0
2026-04-16T03:46:02.442 [DEBUG] [Thread-30974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:46:02.456 [DEBUG] [Thread-30974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:46:02.456 [INFO] [Thread-30974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:46:02.464 [DEBUG] [Thread-30974] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:46:02.464 [DEBUG] [Thread-30974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:46:02.464 [DEBUG] [Thread-30974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:46:02.464 [DEBUG] [Thread-30974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:46:02.464 [DEBUG] [Thread-30974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:46:02.464 [DEBUG] [Thread-30974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:46:02.464 [DEBUG] [Thread-30974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:46:02.464 [DEBUG] [Thread-30974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:46:02.464 [DEBUG] [Thread-30974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:46:02.464 [DEBUG] [Thread-30974] [transport.py] [_log()] client lang: <none>
2026-04-16T03:46:02.464 [DEBUG] [Thread-30974] [transport.py] [_log()] server lang: <none>
2026-04-16T03:46:02.465 [DEBUG] [Thread-30974] [transport.py] [_log()] kex follows: False
2026-04-16T03:46:02.465 [DEBUG] [Thread-30974] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:46:02.465 [DEBUG] [Thread-30974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:46:02.465 [DEBUG] [Thread-30974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:46:02.465 [DEBUG] [Thread-30974] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:46:02.465 [DEBUG] [Thread-30974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:46:02.465 [DEBUG] [Thread-30974] [transport.py] [_log()] Compression: none
2026-04-16T03:46:02.465 [DEBUG] [Thread-30974] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:46:02.522 [DEBUG] [Thread-30974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:46:02.523 [DEBUG] [Thread-30974] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:46:02.523 [DEBUG] [Thread-30974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:46:02.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:46:02.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:46:02.579 [DEBUG] [Thread-30974] [transport.py] [_log()] userauth is OK
2026-04-16T03:46:02.579 [DEBUG] [Thread-30974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:46:02.579 [DEBUG] [Thread-30974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:46:02.579 [DEBUG] [Thread-30974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:46:02.579 [DEBUG] [Thread-30974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:46:02.605 [INFO] [Thread-30974] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:46:02.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:46:02.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:46:03.428 [DEBUG] [Thread-30974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:46:03.428 [DEBUG] [Thread-30974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:46:03.476 [DEBUG] [Thread-30974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:46:03.476 [DEBUG] [Thread-30974] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:46:03.484 [DEBUG] [Thread-30974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:46:03.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:46:03.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')
2026-04-16T03:46:03.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
2026-04-16T03:46:03.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:46:03.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:46:03.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:46:03.517 [DEBUG] [Thread-30974] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:46:04.636 [DEBUG] [Thread-30976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:46:07.143 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:46:07.145 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:46:16.735 [DEBUG] [Thread-30977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:46:19.680 [DEBUG] [Thread-30978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:46:33.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:46:33.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:46:33.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
2026-04-16T03:46:34.710 [DEBUG] [Thread-30979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:46:34.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 46, 3), 1.43571, 90.6375, 0.0, 16.0042, 8.46589, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:46:34.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:46:03
2026-04-16T03:46:35.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:46:35.619 [DEBUG] [Thread-30980] [transport.py] [_log()] starting thread (client mode): 0xf13e2440
2026-04-16T03:46:35.620 [DEBUG] [Thread-30980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:46:35.639 [DEBUG] [Thread-30980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:46:35.640 [INFO] [Thread-30980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:46:35.642 [DEBUG] [Thread-30980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:46:35.643 [DEBUG] [Thread-30980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:46:35.643 [DEBUG] [Thread-30980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:46:35.643 [DEBUG] [Thread-30980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:46:35.643 [DEBUG] [Thread-30980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:46:35.643 [DEBUG] [Thread-30980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:46:35.643 [DEBUG] [Thread-30980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:46:35.643 [DEBUG] [Thread-30980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:46:35.644 [DEBUG] [Thread-30980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:46:35.644 [DEBUG] [Thread-30980] [transport.py] [_log()] client lang: <none>
2026-04-16T03:46:35.644 [DEBUG] [Thread-30980] [transport.py] [_log()] server lang: <none>
2026-04-16T03:46:35.644 [DEBUG] [Thread-30980] [transport.py] [_log()] kex follows: False
2026-04-16T03:46:35.644 [DEBUG] [Thread-30980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:46:35.644 [DEBUG] [Thread-30980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:46:35.644 [DEBUG] [Thread-30980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:46:35.644 [DEBUG] [Thread-30980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:46:35.644 [DEBUG] [Thread-30980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:46:35.644 [DEBUG] [Thread-30980] [transport.py] [_log()] Compression: none
2026-04-16T03:46:35.645 [DEBUG] [Thread-30980] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:46:35.661 [DEBUG] [Thread-30980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:46:35.661 [DEBUG] [Thread-30980] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:46:35.662 [DEBUG] [Thread-30980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:46:35.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:46:35.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:46:35.704 [DEBUG] [Thread-30980] [transport.py] [_log()] userauth is OK
2026-04-16T03:46:35.705 [DEBUG] [Thread-30980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:46:35.705 [DEBUG] [Thread-30980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:46:35.705 [DEBUG] [Thread-30980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:46:35.705 [DEBUG] [Thread-30980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:46:35.728 [INFO] [Thread-30980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:46:35.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:46:36.533 [DEBUG] [Thread-30980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:46:36.533 [DEBUG] [Thread-30980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:46:36.533 [DEBUG] [Thread-30980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:46:36.574 [DEBUG] [Thread-30980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:46:36.574 [DEBUG] [Thread-30980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:46:36.577 [DEBUG] [Thread-30980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:46:36.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:46:36.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:46:36.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:46:36.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:46:36.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:46:36.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:46:36.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:46:36.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:46:36.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:46:36.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.073392 -999.00   +8.60   9.35     90   +7.10 1 1 1 3 1     0    0 1.44 -3.05 .NEsW 11.8 9.3 88.9 16.9 9.0 -25.5 8.8 -24.2 8.5 -22.1 8.8 -24.1
2026-04-16T03:46:36.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:46:36.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:46:36.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.073392
2026-04-16T03:46:36.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:46:36.603 [DEBUG] [Thread-30980] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:46:36.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:46:36.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:46:36.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:46:36.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:46:36.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:46:03', tmtdew=1.43571, humidity=90.6375, cloud=0.0, wind=16.0042, temperature=8.46589, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:45:41.069', atlas_cloud=1, atlas_rain=1, zp_data=[3.4507499999999993, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.3484999999999996, nan, 2.7002499999999987, nan, nan, 0.1722500000000018, -0.0022500000000000853, 0.15999999999999837, 0.23800000000000132, 0.2757500000000004, 0.19500000000000028, 0.18700000000000117, 0.1855000000000011, 0.10100000000000087, -0.0799999999999983, -0.08125000000000071], zp_timestamp='2026-04-16T01:43:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:46:36.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:46:36.862 [DEBUG] [Thread-30983] [transport.py] [_log()] starting thread (client mode): 0xf13e1690
2026-04-16T03:46:36.862 [DEBUG] [Thread-30983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:46:36.877 [DEBUG] [Thread-30983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:46:36.878 [INFO] [Thread-30983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:46:36.885 [DEBUG] [Thread-30983] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:46:36.885 [DEBUG] [Thread-30983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:46:36.885 [DEBUG] [Thread-30983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:46:36.885 [DEBUG] [Thread-30983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:46:36.885 [DEBUG] [Thread-30983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:46:36.885 [DEBUG] [Thread-30983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:46:36.885 [DEBUG] [Thread-30983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:46:36.885 [DEBUG] [Thread-30983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:46:36.886 [DEBUG] [Thread-30983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:46:36.886 [DEBUG] [Thread-30983] [transport.py] [_log()] client lang: <none>
2026-04-16T03:46:36.886 [DEBUG] [Thread-30983] [transport.py] [_log()] server lang: <none>
2026-04-16T03:46:36.886 [DEBUG] [Thread-30983] [transport.py] [_log()] kex follows: False
2026-04-16T03:46:36.886 [DEBUG] [Thread-30983] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:46:36.886 [DEBUG] [Thread-30983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:46:36.886 [DEBUG] [Thread-30983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:46:36.886 [DEBUG] [Thread-30983] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:46:36.886 [DEBUG] [Thread-30983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:46:36.886 [DEBUG] [Thread-30983] [transport.py] [_log()] Compression: none
2026-04-16T03:46:36.886 [DEBUG] [Thread-30983] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:46:36.941 [DEBUG] [Thread-30983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:46:36.941 [DEBUG] [Thread-30983] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:46:36.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:46:36.942 [DEBUG] [Thread-30983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:46:36.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:46:36.998 [DEBUG] [Thread-30983] [transport.py] [_log()] userauth is OK
2026-04-16T03:46:36.998 [DEBUG] [Thread-30983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:46:36.998 [DEBUG] [Thread-30983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:46:36.998 [DEBUG] [Thread-30983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:46:36.998 [DEBUG] [Thread-30983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:46:37.025 [INFO] [Thread-30983] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:46:37.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:46:37.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:46:37.813 [DEBUG] [Thread-30983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:46:37.813 [DEBUG] [Thread-30983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:46:37.862 [DEBUG] [Thread-30983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:46:37.997 [DEBUG] [Thread-30983] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:46:38.006 [DEBUG] [Thread-30983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:46:38.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:46:38.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')
2026-04-16T03:46:38.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
2026-04-16T03:46:38.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:46:38.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:46:38.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:46:38.040 [DEBUG] [Thread-30983] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:46:49.741 [DEBUG] [Thread-30985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:47:04.787 [DEBUG] [Thread-30986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:47:07.348 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:47:07.349 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:47:08.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:47:08.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:47:08.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-16T03:47:09.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 46, 39), 1.16132, 92.3425, 0.0, 17.2908, 8.29889, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:47:09.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:46:39
2026-04-16T03:47:09.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:47:10.130 [DEBUG] [Thread-30987] [transport.py] [_log()] starting thread (client mode): 0xf13e2ce0
2026-04-16T03:47:10.130 [DEBUG] [Thread-30987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:47:10.145 [DEBUG] [Thread-30987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:47:10.146 [INFO] [Thread-30987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:47:10.148 [DEBUG] [Thread-30987] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:47:10.149 [DEBUG] [Thread-30987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:47:10.149 [DEBUG] [Thread-30987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:47:10.149 [DEBUG] [Thread-30987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:47:10.149 [DEBUG] [Thread-30987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:47:10.149 [DEBUG] [Thread-30987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:47:10.149 [DEBUG] [Thread-30987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:47:10.149 [DEBUG] [Thread-30987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:47:10.149 [DEBUG] [Thread-30987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:47:10.149 [DEBUG] [Thread-30987] [transport.py] [_log()] client lang: <none>
2026-04-16T03:47:10.149 [DEBUG] [Thread-30987] [transport.py] [_log()] server lang: <none>
2026-04-16T03:47:10.149 [DEBUG] [Thread-30987] [transport.py] [_log()] kex follows: False
2026-04-16T03:47:10.149 [DEBUG] [Thread-30987] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:47:10.150 [DEBUG] [Thread-30987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:47:10.150 [DEBUG] [Thread-30987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:47:10.150 [DEBUG] [Thread-30987] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:47:10.150 [DEBUG] [Thread-30987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:47:10.150 [DEBUG] [Thread-30987] [transport.py] [_log()] Compression: none
2026-04-16T03:47:10.150 [DEBUG] [Thread-30987] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:47:10.167 [DEBUG] [Thread-30987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:47:10.167 [DEBUG] [Thread-30987] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:47:10.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:47:10.168 [DEBUG] [Thread-30987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:47:10.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:47:10.168 [DEBUG] [Thread-30987] [transport.py] [_log()] userauth is OK
2026-04-16T03:47:10.169 [DEBUG] [Thread-30987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:47:10.169 [DEBUG] [Thread-30987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:47:10.169 [DEBUG] [Thread-30987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:47:10.169 [DEBUG] [Thread-30987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:47:10.182 [INFO] [Thread-30987] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:47:10.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:47:10.953 [DEBUG] [Thread-30987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:47:10.953 [DEBUG] [Thread-30987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:47:10.954 [DEBUG] [Thread-30987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:47:10.994 [DEBUG] [Thread-30987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:47:10.994 [DEBUG] [Thread-30987] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:47:10.996 [DEBUG] [Thread-30987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:47:11.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:47:11.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:47:11.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:47:11.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:47:11.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:47:11.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:47:11.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:47:11.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:47:11.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:47:11.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.074086 -999.00   +8.60   6.44     90   +7.10 1 1 1 3 1     0    0 1.45 -3.53 .NEsW 11.2 6.4 103.9 17.2 8.9 -25.5 8.8 -24.3 8.5 -22.0 8.8 -24.1
2026-04-16T03:47:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:47:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:47:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.074086
2026-04-16T03:47:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:47:11.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:47:11.016 [DEBUG] [Thread-30987] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:47:11.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:47:11.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:47:11.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:47:11.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:46:39', tmtdew=1.16132, humidity=92.3425, cloud=0.0, wind=17.2908, temperature=8.29889, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:46:41.030', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.782, nan, nan, nan, nan, nan, 2.6464999999999996, nan, 2.5612499999999994, nan, 2.179249999999999, 0.2322500000000005, -0.006750000000000256, 0.1919999999999984, 0.21250000000000036, 0.2427500000000009, 0.24600000000000044, 0.23000000000000043, 0.18599999999999994, 0.10800000000000054, -0.06049999999999933, -0.08525000000000027], zp_timestamp='2026-04-16T01:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:47:11.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:47:11.255 [DEBUG] [Thread-30990] [transport.py] [_log()] starting thread (client mode): 0xf13e3cd0
2026-04-16T03:47:11.255 [DEBUG] [Thread-30990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:47:11.269 [DEBUG] [Thread-30990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:47:11.269 [INFO] [Thread-30990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:47:11.277 [DEBUG] [Thread-30990] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:47:11.277 [DEBUG] [Thread-30990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:47:11.277 [DEBUG] [Thread-30990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:47:11.277 [DEBUG] [Thread-30990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:47:11.277 [DEBUG] [Thread-30990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:47:11.277 [DEBUG] [Thread-30990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:47:11.277 [DEBUG] [Thread-30990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:47:11.277 [DEBUG] [Thread-30990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:47:11.277 [DEBUG] [Thread-30990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:47:11.277 [DEBUG] [Thread-30990] [transport.py] [_log()] client lang: <none>
2026-04-16T03:47:11.277 [DEBUG] [Thread-30990] [transport.py] [_log()] server lang: <none>
2026-04-16T03:47:11.278 [DEBUG] [Thread-30990] [transport.py] [_log()] kex follows: False
2026-04-16T03:47:11.278 [DEBUG] [Thread-30990] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:47:11.278 [DEBUG] [Thread-30990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:47:11.278 [DEBUG] [Thread-30990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:47:11.278 [DEBUG] [Thread-30990] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:47:11.278 [DEBUG] [Thread-30990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:47:11.278 [DEBUG] [Thread-30990] [transport.py] [_log()] Compression: none
2026-04-16T03:47:11.278 [DEBUG] [Thread-30990] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:47:11.335 [DEBUG] [Thread-30990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:47:11.336 [DEBUG] [Thread-30990] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:47:11.336 [DEBUG] [Thread-30990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:47:11.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:47:11.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:47:11.393 [DEBUG] [Thread-30990] [transport.py] [_log()] userauth is OK
2026-04-16T03:47:11.393 [DEBUG] [Thread-30990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:47:11.393 [DEBUG] [Thread-30990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:47:11.393 [DEBUG] [Thread-30990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:47:11.393 [DEBUG] [Thread-30990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:47:11.418 [INFO] [Thread-30990] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:47:11.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:47:11.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:47:12.246 [DEBUG] [Thread-30990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:47:12.246 [DEBUG] [Thread-30990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:47:12.294 [DEBUG] [Thread-30990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:47:12.294 [DEBUG] [Thread-30990] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:47:12.303 [DEBUG] [Thread-30990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:47:12.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:47:12.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-16T03:47:12.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') -> 00000000
2026-04-16T03:47:12.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:47:12.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:47:12.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:47:12.337 [DEBUG] [Thread-30990] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:47:16.878 [DEBUG] [Thread-30992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:47:19.818 [DEBUG] [Thread-30993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:47:34.861 [DEBUG] [Thread-30994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:47:42.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:47:42.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:47:42.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
2026-04-16T03:47:43.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 47, 14), 1.52804, 90.1879, 0.0, 13.9572, 8.54945, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:47:43.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:47:14
2026-04-16T03:47:44.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:47:44.528 [DEBUG] [Thread-30995] [transport.py] [_log()] starting thread (client mode): 0xee9429b0
2026-04-16T03:47:44.528 [DEBUG] [Thread-30995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:47:44.547 [DEBUG] [Thread-30995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:47:44.547 [INFO] [Thread-30995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:47:44.549 [DEBUG] [Thread-30995] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:47:44.550 [DEBUG] [Thread-30995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:47:44.550 [DEBUG] [Thread-30995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:47:44.550 [DEBUG] [Thread-30995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:47:44.550 [DEBUG] [Thread-30995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:47:44.550 [DEBUG] [Thread-30995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:47:44.550 [DEBUG] [Thread-30995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:47:44.550 [DEBUG] [Thread-30995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:47:44.550 [DEBUG] [Thread-30995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:47:44.550 [DEBUG] [Thread-30995] [transport.py] [_log()] client lang: <none>
2026-04-16T03:47:44.550 [DEBUG] [Thread-30995] [transport.py] [_log()] server lang: <none>
2026-04-16T03:47:44.550 [DEBUG] [Thread-30995] [transport.py] [_log()] kex follows: False
2026-04-16T03:47:44.550 [DEBUG] [Thread-30995] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:47:44.551 [DEBUG] [Thread-30995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:47:44.551 [DEBUG] [Thread-30995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:47:44.551 [DEBUG] [Thread-30995] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:47:44.551 [DEBUG] [Thread-30995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:47:44.551 [DEBUG] [Thread-30995] [transport.py] [_log()] Compression: none
2026-04-16T03:47:44.551 [DEBUG] [Thread-30995] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:47:44.560 [DEBUG] [Thread-30995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:47:44.560 [DEBUG] [Thread-30995] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:47:44.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:47:44.561 [DEBUG] [Thread-30995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:47:44.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:47:44.562 [DEBUG] [Thread-30995] [transport.py] [_log()] userauth is OK
2026-04-16T03:47:44.562 [DEBUG] [Thread-30995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:47:44.562 [DEBUG] [Thread-30995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:47:44.562 [DEBUG] [Thread-30995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:47:44.562 [DEBUG] [Thread-30995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:47:44.580 [INFO] [Thread-30995] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:47:44.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:47:45.386 [DEBUG] [Thread-30995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:47:45.386 [DEBUG] [Thread-30995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:47:45.387 [DEBUG] [Thread-30995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:47:45.427 [DEBUG] [Thread-30995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:47:45.427 [DEBUG] [Thread-30995] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:47:45.430 [DEBUG] [Thread-30995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:47:45.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:47:45.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:47:45.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:47:45.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:47:45.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:47:45.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:47:45.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:47:45.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:47:45.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:47:45.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.074433 -999.00   +8.60  11.49     90   +7.10 1 1 1 3 1     0    0 1.45 -3.78 .NEsW 12.2 11.5 75.3 16.9 9.0 -25.6 8.8 -24.4 8.6 -22.2 8.8 -24.3
2026-04-16T03:47:45.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:47:45.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:47:45.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.074433
2026-04-16T03:47:45.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:47:45.456 [DEBUG] [Thread-30995] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:47:45.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:47:45.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:47:45.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:47:45.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:47:45.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:47:14', tmtdew=1.52804, humidity=90.1879, cloud=0.0, wind=13.9572, temperature=8.54945, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:47:11.011', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.782, nan, nan, nan, nan, nan, 2.6464999999999996, nan, 2.5612499999999994, nan, 2.179249999999999, 0.2322500000000005, -0.006750000000000256, 0.1919999999999984, 0.21250000000000036, 0.2427500000000009, 0.24600000000000044, 0.23000000000000043, 0.18599999999999994, 0.10800000000000054, -0.06049999999999933, -0.08525000000000027], zp_timestamp='2026-04-16T01:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:47:45.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:47:45.717 [DEBUG] [Thread-30998] [transport.py] [_log()] starting thread (client mode): 0xee9438b0
2026-04-16T03:47:45.717 [DEBUG] [Thread-30998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:47:45.731 [DEBUG] [Thread-30998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:47:45.731 [INFO] [Thread-30998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:47:45.739 [DEBUG] [Thread-30998] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:47:45.739 [DEBUG] [Thread-30998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:47:45.739 [DEBUG] [Thread-30998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:47:45.739 [DEBUG] [Thread-30998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:47:45.739 [DEBUG] [Thread-30998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:47:45.739 [DEBUG] [Thread-30998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:47:45.739 [DEBUG] [Thread-30998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:47:45.739 [DEBUG] [Thread-30998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:47:45.739 [DEBUG] [Thread-30998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:47:45.739 [DEBUG] [Thread-30998] [transport.py] [_log()] client lang: <none>
2026-04-16T03:47:45.739 [DEBUG] [Thread-30998] [transport.py] [_log()] server lang: <none>
2026-04-16T03:47:45.739 [DEBUG] [Thread-30998] [transport.py] [_log()] kex follows: False
2026-04-16T03:47:45.739 [DEBUG] [Thread-30998] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:47:45.740 [DEBUG] [Thread-30998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:47:45.740 [DEBUG] [Thread-30998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:47:45.740 [DEBUG] [Thread-30998] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:47:45.740 [DEBUG] [Thread-30998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:47:45.740 [DEBUG] [Thread-30998] [transport.py] [_log()] Compression: none
2026-04-16T03:47:45.740 [DEBUG] [Thread-30998] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:47:45.799 [DEBUG] [Thread-30998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:47:45.800 [DEBUG] [Thread-30998] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:47:45.800 [DEBUG] [Thread-30998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:47:45.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:47:45.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:47:45.855 [DEBUG] [Thread-30998] [transport.py] [_log()] userauth is OK
2026-04-16T03:47:45.856 [DEBUG] [Thread-30998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:47:45.856 [DEBUG] [Thread-30998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:47:45.856 [DEBUG] [Thread-30998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:47:45.856 [DEBUG] [Thread-30998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:47:45.882 [INFO] [Thread-30998] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:47:45.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:47:45.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:47:46.701 [DEBUG] [Thread-30998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:47:46.701 [DEBUG] [Thread-30998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:47:46.749 [DEBUG] [Thread-30998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:47:46.749 [DEBUG] [Thread-30998] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:47:46.758 [DEBUG] [Thread-30998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:47:46.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:47:46.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')
2026-04-16T03:47: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') -> 00000000
2026-04-16T03:47:46.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:47:46.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:47:46.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:47:46.792 [DEBUG] [Thread-30998] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:47:49.891 [DEBUG] [Thread-31000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:48:04.936 [DEBUG] [Thread-31001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:48:07.554 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:48:07.555 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:48:16.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:48:16.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:48:16.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
2026-04-16T03:48:17.025 [DEBUG] [Thread-31002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:48:18.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 47, 50), 1.1657, 92.3095, 0.0, 17.3966, 8.19946, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:48:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:47:50
2026-04-16T03:48:18.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:48:18.928 [DEBUG] [Thread-31003] [transport.py] [_log()] starting thread (client mode): 0xf13e1480
2026-04-16T03:48:18.929 [DEBUG] [Thread-31003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:48:18.948 [DEBUG] [Thread-31003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:48:18.948 [INFO] [Thread-31003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:48:18.951 [DEBUG] [Thread-31003] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:48:18.951 [DEBUG] [Thread-31003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:48:18.951 [DEBUG] [Thread-31003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:48:18.951 [DEBUG] [Thread-31003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:48:18.951 [DEBUG] [Thread-31003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:48:18.951 [DEBUG] [Thread-31003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:48:18.951 [DEBUG] [Thread-31003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:48:18.951 [DEBUG] [Thread-31003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:48:18.951 [DEBUG] [Thread-31003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:48:18.951 [DEBUG] [Thread-31003] [transport.py] [_log()] client lang: <none>
2026-04-16T03:48:18.951 [DEBUG] [Thread-31003] [transport.py] [_log()] server lang: <none>
2026-04-16T03:48:18.952 [DEBUG] [Thread-31003] [transport.py] [_log()] kex follows: False
2026-04-16T03:48:18.952 [DEBUG] [Thread-31003] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:48:18.952 [DEBUG] [Thread-31003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:48:18.952 [DEBUG] [Thread-31003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:48:18.952 [DEBUG] [Thread-31003] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:48:18.952 [DEBUG] [Thread-31003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:48:18.952 [DEBUG] [Thread-31003] [transport.py] [_log()] Compression: none
2026-04-16T03:48:18.952 [DEBUG] [Thread-31003] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:48:18.970 [DEBUG] [Thread-31003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:48:18.970 [DEBUG] [Thread-31003] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:48:18.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:48:18.971 [DEBUG] [Thread-31003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:48:18.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:48:18.972 [DEBUG] [Thread-31003] [transport.py] [_log()] userauth is OK
2026-04-16T03:48:18.972 [DEBUG] [Thread-31003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:48:18.973 [DEBUG] [Thread-31003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:48:18.973 [DEBUG] [Thread-31003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:48:18.973 [DEBUG] [Thread-31003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:48:18.995 [INFO] [Thread-31003] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:48:18.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:48:19.788 [DEBUG] [Thread-31003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:48:19.788 [DEBUG] [Thread-31003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:48:19.788 [DEBUG] [Thread-31003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:48:19.829 [DEBUG] [Thread-31003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:48:19.829 [DEBUG] [Thread-31003] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:48:19.832 [DEBUG] [Thread-31003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:48:19.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:48:19.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:48:19.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:48:19.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:48:19.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:48:19.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:48:19.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:48:19.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:48:19.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:48:19.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.074780 -999.00   +8.60  13.13     90   +7.00 1 1 1 3 1     0    0 1.41 -3.49 .NEsW 14.7 13.1 79.4 16.9 8.9 -25.6 8.8 -24.4 8.5 -22.2 8.8 -24.2
2026-04-16T03:48:19.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:48:19.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:48:19.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.074780
2026-04-16T03:48:19.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:48:19.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:48:19.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:48:19.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:48:19.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:48:19.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:47:50', tmtdew=1.1657, humidity=92.3095, cloud=0.0, wind=17.3966, temperature=8.19946, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:47:40.992', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.782, nan, nan, nan, nan, nan, 2.6464999999999996, nan, 2.5612499999999994, nan, 2.179249999999999, 0.2322500000000005, -0.006750000000000256, 0.1919999999999984, 0.21250000000000036, 0.2427500000000009, 0.24600000000000044, 0.23000000000000043, 0.18599999999999994, 0.10800000000000054, -0.06049999999999933, -0.08525000000000027], zp_timestamp='2026-04-16T01:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:48:19.854 [DEBUG] [Thread-31003] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:48:19.966 [DEBUG] [Thread-31006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:48:20.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:48:20.079 [DEBUG] [Thread-31007] [transport.py] [_log()] starting thread (client mode): 0xf13e3700
2026-04-16T03:48:20.079 [DEBUG] [Thread-31007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:48:20.093 [DEBUG] [Thread-31007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:48:20.094 [INFO] [Thread-31007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:48:20.101 [DEBUG] [Thread-31007] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:48:20.101 [DEBUG] [Thread-31007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:48:20.101 [DEBUG] [Thread-31007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:48:20.101 [DEBUG] [Thread-31007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:48:20.101 [DEBUG] [Thread-31007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:48:20.101 [DEBUG] [Thread-31007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:48:20.101 [DEBUG] [Thread-31007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:48:20.101 [DEBUG] [Thread-31007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:48:20.102 [DEBUG] [Thread-31007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:48:20.102 [DEBUG] [Thread-31007] [transport.py] [_log()] client lang: <none>
2026-04-16T03:48:20.102 [DEBUG] [Thread-31007] [transport.py] [_log()] server lang: <none>
2026-04-16T03:48:20.102 [DEBUG] [Thread-31007] [transport.py] [_log()] kex follows: False
2026-04-16T03:48:20.102 [DEBUG] [Thread-31007] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:48:20.102 [DEBUG] [Thread-31007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:48:20.102 [DEBUG] [Thread-31007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:48:20.102 [DEBUG] [Thread-31007] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:48:20.102 [DEBUG] [Thread-31007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:48:20.102 [DEBUG] [Thread-31007] [transport.py] [_log()] Compression: none
2026-04-16T03:48:20.102 [DEBUG] [Thread-31007] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:48:20.157 [DEBUG] [Thread-31007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:48:20.158 [DEBUG] [Thread-31007] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:48:20.158 [DEBUG] [Thread-31007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:48:20.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:48:20.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:48:20.214 [DEBUG] [Thread-31007] [transport.py] [_log()] userauth is OK
2026-04-16T03:48:20.215 [DEBUG] [Thread-31007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:48:20.215 [DEBUG] [Thread-31007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:48:20.215 [DEBUG] [Thread-31007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:48:20.215 [DEBUG] [Thread-31007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:48:20.242 [INFO] [Thread-31007] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:48:20.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:48:20.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:48:21.057 [DEBUG] [Thread-31007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:48:21.057 [DEBUG] [Thread-31007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:48:21.105 [DEBUG] [Thread-31007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:48:21.105 [DEBUG] [Thread-31007] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:48:21.114 [DEBUG] [Thread-31007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:48:21.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:48:21.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')
2026-04-16T03:48:21.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
2026-04-16T03:48:21.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:48:21.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:48:21.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:48:21.149 [DEBUG] [Thread-31007] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:48:35.003 [DEBUG] [Thread-31009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:48:50.032 [DEBUG] [Thread-31010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:48:51.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:48:51.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:48:51.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
2026-04-16T03:48:52.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 48, 25), 1.52807, 90.1876, 0.0, 15.9689, 8.4993, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:48:52.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:48:25
2026-04-16T03:48:52.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:48:53.307 [DEBUG] [Thread-31011] [transport.py] [_log()] starting thread (client mode): 0xf13e33d0
2026-04-16T03:48:53.307 [DEBUG] [Thread-31011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:48:53.327 [DEBUG] [Thread-31011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:48:53.327 [INFO] [Thread-31011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:48:53.329 [DEBUG] [Thread-31011] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:48:53.329 [DEBUG] [Thread-31011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:48:53.329 [DEBUG] [Thread-31011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:48:53.329 [DEBUG] [Thread-31011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:48:53.330 [DEBUG] [Thread-31011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:48:53.330 [DEBUG] [Thread-31011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:48:53.330 [DEBUG] [Thread-31011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:48:53.330 [DEBUG] [Thread-31011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:48:53.330 [DEBUG] [Thread-31011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:48:53.330 [DEBUG] [Thread-31011] [transport.py] [_log()] client lang: <none>
2026-04-16T03:48:53.330 [DEBUG] [Thread-31011] [transport.py] [_log()] server lang: <none>
2026-04-16T03:48:53.330 [DEBUG] [Thread-31011] [transport.py] [_log()] kex follows: False
2026-04-16T03:48:53.330 [DEBUG] [Thread-31011] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:48:53.330 [DEBUG] [Thread-31011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:48:53.330 [DEBUG] [Thread-31011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:48:53.331 [DEBUG] [Thread-31011] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:48:53.331 [DEBUG] [Thread-31011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:48:53.331 [DEBUG] [Thread-31011] [transport.py] [_log()] Compression: none
2026-04-16T03:48:53.331 [DEBUG] [Thread-31011] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:48:53.348 [DEBUG] [Thread-31011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:48:53.348 [DEBUG] [Thread-31011] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:48:53.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:48:53.349 [DEBUG] [Thread-31011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:48:53.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:48:53.392 [DEBUG] [Thread-31011] [transport.py] [_log()] userauth is OK
2026-04-16T03:48:53.393 [DEBUG] [Thread-31011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:48:53.393 [DEBUG] [Thread-31011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:48:53.393 [DEBUG] [Thread-31011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:48:53.393 [DEBUG] [Thread-31011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:48:53.418 [INFO] [Thread-31011] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:48:53.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:48:54.246 [DEBUG] [Thread-31011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:48:54.246 [DEBUG] [Thread-31011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:48:54.247 [DEBUG] [Thread-31011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:48:54.287 [DEBUG] [Thread-31011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:48:54.287 [DEBUG] [Thread-31011] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:48:54.290 [DEBUG] [Thread-31011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:48:54.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:48:54.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:48:54.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:48:54.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:48:54.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:48:54.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:48:54.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:48:54.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:48:54.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:48:54.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.075128 -999.00   +8.60  14.64     90   +7.00 1 1 1 3 1     0    0 1.44 -3.31 .NEsW 15.0 14.6 69.0 16.4 8.9 -25.7 8.8 -24.3 8.5 -22.1 8.8 -24.1
2026-04-16T03:48:54.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:48:54.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:48:54.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.075128
2026-04-16T03:48:54.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:48:54.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:48:54.314 [DEBUG] [Thread-31011] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:48:54.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:48:54.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:48:54.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:48:54.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:48:25', tmtdew=1.52807, humidity=90.1876, cloud=0.0, wind=15.9689, temperature=8.4993, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:48:11.059', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.782, nan, nan, nan, nan, nan, 2.6464999999999996, nan, 2.5612499999999994, nan, 2.179249999999999, 0.2322500000000005, -0.006750000000000256, 0.1919999999999984, 0.21250000000000036, 0.2427500000000009, 0.24600000000000044, 0.23000000000000043, 0.18599999999999994, 0.10800000000000054, -0.06049999999999933, -0.08525000000000027], zp_timestamp='2026-04-16T01:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:48:54.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:48:54.572 [DEBUG] [Thread-31014] [transport.py] [_log()] starting thread (client mode): 0xee941270
2026-04-16T03:48:54.572 [DEBUG] [Thread-31014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:48:54.586 [DEBUG] [Thread-31014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:48:54.587 [INFO] [Thread-31014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:48:54.594 [DEBUG] [Thread-31014] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:48:54.594 [DEBUG] [Thread-31014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:48:54.594 [DEBUG] [Thread-31014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:48:54.594 [DEBUG] [Thread-31014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:48:54.594 [DEBUG] [Thread-31014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:48:54.594 [DEBUG] [Thread-31014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:48:54.594 [DEBUG] [Thread-31014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:48:54.595 [DEBUG] [Thread-31014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:48:54.595 [DEBUG] [Thread-31014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:48:54.595 [DEBUG] [Thread-31014] [transport.py] [_log()] client lang: <none>
2026-04-16T03:48:54.595 [DEBUG] [Thread-31014] [transport.py] [_log()] server lang: <none>
2026-04-16T03:48:54.595 [DEBUG] [Thread-31014] [transport.py] [_log()] kex follows: False
2026-04-16T03:48:54.595 [DEBUG] [Thread-31014] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:48:54.595 [DEBUG] [Thread-31014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:48:54.595 [DEBUG] [Thread-31014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:48:54.595 [DEBUG] [Thread-31014] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:48:54.595 [DEBUG] [Thread-31014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:48:54.595 [DEBUG] [Thread-31014] [transport.py] [_log()] Compression: none
2026-04-16T03:48:54.595 [DEBUG] [Thread-31014] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:48:54.652 [DEBUG] [Thread-31014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:48:54.653 [DEBUG] [Thread-31014] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:48:54.653 [DEBUG] [Thread-31014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:48:54.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:48:54.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:48:54.709 [DEBUG] [Thread-31014] [transport.py] [_log()] userauth is OK
2026-04-16T03:48:54.710 [DEBUG] [Thread-31014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:48:54.710 [DEBUG] [Thread-31014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:48:54.710 [DEBUG] [Thread-31014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:48:54.710 [DEBUG] [Thread-31014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:48:54.735 [INFO] [Thread-31014] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:48:54.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:48:54.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:48:55.586 [DEBUG] [Thread-31014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:48:55.587 [DEBUG] [Thread-31014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:48:55.634 [DEBUG] [Thread-31014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:48:55.634 [DEBUG] [Thread-31014] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:48:55.643 [DEBUG] [Thread-31014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:48:55.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:48: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')
2026-04-16T03:48:55.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') -> 00000000
2026-04-16T03:48:55.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:48:55.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:48:55.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:48:55.678 [DEBUG] [Thread-31014] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:49:05.062 [DEBUG] [Thread-31016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:49:07.760 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:49:07.762 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:49:17.168 [DEBUG] [Thread-31017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:49:20.106 [DEBUG] [Thread-31018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:49:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:49:25.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:49:25.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
2026-04-16T03:49:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 49, 1), 1.53331, 90.1544, 0.0, 15.8278, 8.4993, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:49:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:49:01
2026-04-16T03:49:27.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:49:27.887 [DEBUG] [Thread-31019] [transport.py] [_log()] starting thread (client mode): 0xee9c7730
2026-04-16T03:49:27.887 [DEBUG] [Thread-31019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:49:27.906 [DEBUG] [Thread-31019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:49:27.906 [INFO] [Thread-31019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:49:27.909 [DEBUG] [Thread-31019] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:49:27.909 [DEBUG] [Thread-31019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:49:27.909 [DEBUG] [Thread-31019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:49:27.909 [DEBUG] [Thread-31019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:49:27.909 [DEBUG] [Thread-31019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:49:27.909 [DEBUG] [Thread-31019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:49:27.909 [DEBUG] [Thread-31019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:49:27.909 [DEBUG] [Thread-31019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:49:27.910 [DEBUG] [Thread-31019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:49:27.910 [DEBUG] [Thread-31019] [transport.py] [_log()] client lang: <none>
2026-04-16T03:49:27.910 [DEBUG] [Thread-31019] [transport.py] [_log()] server lang: <none>
2026-04-16T03:49:27.910 [DEBUG] [Thread-31019] [transport.py] [_log()] kex follows: False
2026-04-16T03:49:27.910 [DEBUG] [Thread-31019] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:49:27.910 [DEBUG] [Thread-31019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:49:27.910 [DEBUG] [Thread-31019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:49:27.910 [DEBUG] [Thread-31019] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:49:27.910 [DEBUG] [Thread-31019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:49:27.910 [DEBUG] [Thread-31019] [transport.py] [_log()] Compression: none
2026-04-16T03:49:27.910 [DEBUG] [Thread-31019] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:49:27.926 [DEBUG] [Thread-31019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:49:27.927 [DEBUG] [Thread-31019] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:49:27.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:49:27.927 [DEBUG] [Thread-31019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:49:27.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:49:27.928 [DEBUG] [Thread-31019] [transport.py] [_log()] userauth is OK
2026-04-16T03:49:27.928 [DEBUG] [Thread-31019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:49:27.928 [DEBUG] [Thread-31019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:49:27.928 [DEBUG] [Thread-31019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:49:27.929 [DEBUG] [Thread-31019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:49:27.953 [INFO] [Thread-31019] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:49:27.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:49:28.751 [DEBUG] [Thread-31019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:49:28.751 [DEBUG] [Thread-31019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:49:28.752 [DEBUG] [Thread-31019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:49:28.792 [DEBUG] [Thread-31019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:49:28.792 [DEBUG] [Thread-31019] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:49:28.795 [DEBUG] [Thread-31019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:49:28.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:49:28.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:49:28.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:49:28.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:49:28.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:49:28.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:49:28.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:49:28.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:49:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:49:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.075475 -999.00   +8.60  15.57     90   +7.00 1 1 1 3 1     0    0 1.43 -3.02 .NEsW 12.9 15.6 70.4 17.7 8.9 -25.5 8.8 -24.3 8.5 -22.0 8.8 -24.1
2026-04-16T03:49:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:49:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:49:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.075475
2026-04-16T03:49:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:49:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:49:28.817 [DEBUG] [Thread-31019] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:49:28.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:49:28.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:49:28.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:49:28.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:49:01', tmtdew=1.53331, humidity=90.1544, cloud=0.0, wind=15.8278, temperature=8.4993, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:48:41.040', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.782, nan, nan, nan, nan, nan, 2.6464999999999996, nan, 2.5612499999999994, nan, 2.179249999999999, 0.2322500000000005, -0.006750000000000256, 0.1919999999999984, 0.21250000000000036, 0.2427500000000009, 0.24600000000000044, 0.23000000000000043, 0.18599999999999994, 0.10800000000000054, -0.06049999999999933, -0.08525000000000027], zp_timestamp='2026-04-16T01:45:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:49:29.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:49:29.061 [DEBUG] [Thread-31022] [transport.py] [_log()] starting thread (client mode): 0xee940b80
2026-04-16T03:49:29.061 [DEBUG] [Thread-31022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:49:29.075 [DEBUG] [Thread-31022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:49:29.075 [INFO] [Thread-31022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:49:29.082 [DEBUG] [Thread-31022] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:49:29.083 [DEBUG] [Thread-31022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:49:29.083 [DEBUG] [Thread-31022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:49:29.083 [DEBUG] [Thread-31022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:49:29.083 [DEBUG] [Thread-31022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:49:29.083 [DEBUG] [Thread-31022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:49:29.083 [DEBUG] [Thread-31022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:49:29.083 [DEBUG] [Thread-31022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:49:29.083 [DEBUG] [Thread-31022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:49:29.083 [DEBUG] [Thread-31022] [transport.py] [_log()] client lang: <none>
2026-04-16T03:49:29.083 [DEBUG] [Thread-31022] [transport.py] [_log()] server lang: <none>
2026-04-16T03:49:29.083 [DEBUG] [Thread-31022] [transport.py] [_log()] kex follows: False
2026-04-16T03:49:29.083 [DEBUG] [Thread-31022] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:49:29.084 [DEBUG] [Thread-31022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:49:29.084 [DEBUG] [Thread-31022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:49:29.084 [DEBUG] [Thread-31022] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:49:29.084 [DEBUG] [Thread-31022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:49:29.084 [DEBUG] [Thread-31022] [transport.py] [_log()] Compression: none
2026-04-16T03:49:29.084 [DEBUG] [Thread-31022] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:49:29.140 [DEBUG] [Thread-31022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:49:29.140 [DEBUG] [Thread-31022] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:49:29.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:49:29.141 [DEBUG] [Thread-31022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:49:29.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:49:29.202 [DEBUG] [Thread-31022] [transport.py] [_log()] userauth is OK
2026-04-16T03:49:29.203 [DEBUG] [Thread-31022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:49:29.203 [DEBUG] [Thread-31022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:49:29.203 [DEBUG] [Thread-31022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:49:29.203 [DEBUG] [Thread-31022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:49:29.226 [INFO] [Thread-31022] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:49:29.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:49:29.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:49:30.038 [DEBUG] [Thread-31022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:49:30.038 [DEBUG] [Thread-31022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:49:30.085 [DEBUG] [Thread-31022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:49:30.086 [DEBUG] [Thread-31022] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:49:30.094 [DEBUG] [Thread-31022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:49:30.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:49:30.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')
2026-04-16T03:49:30.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
2026-04-16T03:49:30.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:49:30.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:49:30.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:49:30.128 [DEBUG] [Thread-31022] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:49:35.136 [DEBUG] [Thread-31024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:49:50.175 [DEBUG] [Thread-31025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:50:00.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:50:00.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:50:00.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
2026-04-16T03:50:01.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 49, 37), 1.16162, 92.3423, 0.0, 16.7969, 8.33196, 2, 2, 0, 2, 0, 0),)
2026-04-16T03:50:01.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:49:37
2026-04-16T03:50:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:50:02.345 [DEBUG] [Thread-31026] [transport.py] [_log()] starting thread (client mode): 0xf13e24a0
2026-04-16T03:50:02.345 [DEBUG] [Thread-31026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:50:02.354 [DEBUG] [Thread-31026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:50:02.354 [INFO] [Thread-31026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:50:02.356 [DEBUG] [Thread-31026] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:50:02.356 [DEBUG] [Thread-31026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:50:02.356 [DEBUG] [Thread-31026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:50:02.356 [DEBUG] [Thread-31026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:50:02.356 [DEBUG] [Thread-31026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:50:02.356 [DEBUG] [Thread-31026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:50:02.356 [DEBUG] [Thread-31026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:50:02.356 [DEBUG] [Thread-31026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:50:02.356 [DEBUG] [Thread-31026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:50:02.356 [DEBUG] [Thread-31026] [transport.py] [_log()] client lang: <none>
2026-04-16T03:50:02.357 [DEBUG] [Thread-31026] [transport.py] [_log()] server lang: <none>
2026-04-16T03:50:02.357 [DEBUG] [Thread-31026] [transport.py] [_log()] kex follows: False
2026-04-16T03:50:02.357 [DEBUG] [Thread-31026] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:50:02.357 [DEBUG] [Thread-31026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:50:02.357 [DEBUG] [Thread-31026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:50:02.357 [DEBUG] [Thread-31026] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:50:02.357 [DEBUG] [Thread-31026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:50:02.357 [DEBUG] [Thread-31026] [transport.py] [_log()] Compression: none
2026-04-16T03:50:02.357 [DEBUG] [Thread-31026] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:50:02.365 [DEBUG] [Thread-31026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:50:02.366 [DEBUG] [Thread-31026] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:50:02.366 [DEBUG] [Thread-31026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-16T03:50:02.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-16T03:50:02.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:50:02.367 [DEBUG] [Thread-31026] [transport.py] [_log()] userauth is OK
2026-04-16T03:50:02.367 [DEBUG] [Thread-31026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:50:02.367 [DEBUG] [Thread-31026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:50:02.367 [DEBUG] [Thread-31026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-16T03:50:02.367 [DEBUG] [Thread-31026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:50:02.382 [INFO] [Thread-31026] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:50:02.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:50:03.163 [DEBUG] [Thread-31026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:50:03.164 [DEBUG] [Thread-31026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:50:03.164 [DEBUG] [Thread-31026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-16T03:50:03.205 [DEBUG] [Thread-31026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:50:03.205 [DEBUG] [Thread-31026] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:50:03.208 [DEBUG] [Thread-31026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:50:03.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:50:03.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-16T03:50:03.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-16T03:50:03.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-16T03:50:03.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:50:03.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-16T03:50:03.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:50:03.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:50:03.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-16T03:50:03.233 [DEBUG] [Thread-31026] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:50:03.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61146.075822 -999.00   +8.60  13.90     90   +7.00 1 1 1 3 1     0    0 1.46 -2.52 .NEsW 15.5 13.9 75.5 15.2 8.9 -25.5 8.8 -24.3 8.5 -21.9 8.8 -24.1
2026-04-16T03:50:03.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-16T03:50:03.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-16T03:50:03.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61146.075822
2026-04-16T03:50:03.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-16T03:50:03.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-16T03:50:03.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-16T03:50:03.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-16T03:50:03.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-04-16T03:50:03.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-16T03:49:37', tmtdew=1.16162, humidity=92.3423, cloud=0.0, wind=16.7969, temperature=8.33196, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-15T21:05:17', seeing=2.08, atlas_timestamp='2026-04-16T01:49:11.021', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.782, nan, nan, nan, nan, nan, 2.6464999999999996, nan, 2.5612499999999994, nan, 2.179249999999999, 0.2322500000000005, -0.006750000000000256, 0.1919999999999984, 0.21250000000000036, 0.2427500000000009, 0.24600000000000044, 0.23000000000000043, 0.18599999999999994, 0.10800000000000054, -0.06049999999999933, -0.08525000000000027], zp_timestamp='2026-04-16T01:49:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-16T03:50:03.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-16T03:50:03.485 [DEBUG] [Thread-31029] [transport.py] [_log()] starting thread (client mode): 0xee9418a0
2026-04-16T03:50:03.485 [DEBUG] [Thread-31029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:50:03.499 [DEBUG] [Thread-31029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-16T03:50:03.499 [INFO] [Thread-31029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-16T03:50:03.507 [DEBUG] [Thread-31029] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:50:03.507 [DEBUG] [Thread-31029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-16T03:50:03.507 [DEBUG] [Thread-31029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:50:03.507 [DEBUG] [Thread-31029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:50:03.507 [DEBUG] [Thread-31029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:50:03.507 [DEBUG] [Thread-31029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:50:03.507 [DEBUG] [Thread-31029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:50:03.507 [DEBUG] [Thread-31029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:50:03.507 [DEBUG] [Thread-31029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:50:03.507 [DEBUG] [Thread-31029] [transport.py] [_log()] client lang: <none>
2026-04-16T03:50:03.507 [DEBUG] [Thread-31029] [transport.py] [_log()] server lang: <none>
2026-04-16T03:50:03.507 [DEBUG] [Thread-31029] [transport.py] [_log()] kex follows: False
2026-04-16T03:50:03.507 [DEBUG] [Thread-31029] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:50:03.507 [DEBUG] [Thread-31029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:50:03.508 [DEBUG] [Thread-31029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:50:03.508 [DEBUG] [Thread-31029] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:50:03.508 [DEBUG] [Thread-31029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:50:03.508 [DEBUG] [Thread-31029] [transport.py] [_log()] Compression: none
2026-04-16T03:50:03.508 [DEBUG] [Thread-31029] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:50:03.564 [DEBUG] [Thread-31029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:50:03.564 [DEBUG] [Thread-31029] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:50:03.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-16T03:50:03.565 [DEBUG] [Thread-31029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-16T03:50:03.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-16T03:50:03.620 [DEBUG] [Thread-31029] [transport.py] [_log()] userauth is OK
2026-04-16T03:50:03.620 [DEBUG] [Thread-31029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-16T03:50:03.620 [DEBUG] [Thread-31029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-16T03:50:03.620 [DEBUG] [Thread-31029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-16T03:50:03.620 [DEBUG] [Thread-31029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-16T03:50:03.648 [INFO] [Thread-31029] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-16T03:50:03.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-16T03:50:03.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-16T03:50:04.465 [DEBUG] [Thread-31029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-16T03:50:04.465 [DEBUG] [Thread-31029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-16T03:50:04.512 [DEBUG] [Thread-31029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-16T03:50:04.513 [DEBUG] [Thread-31029] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-16T03:50:04.521 [DEBUG] [Thread-31029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-16T03:50:04.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-16T03:50:04.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')
2026-04-16T03:50:04.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
2026-04-16T03:50:04.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-16T03:50:04.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-16T03:50:04.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-16T03:50:04.553 [DEBUG] [Thread-31029] [transport.py] [_log()] EOF in transport thread
2026-04-16T03:50:05.207 [DEBUG] [Thread-31031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:50:07.966 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:50:07.968 [DEBUG] [Thread-10 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:50:17.312 [DEBUG] [Thread-31032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:50:20.250 [DEBUG] [Thread-31033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:50:34.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-16T03:50:34.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-16T03:50:34.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
2026-04-16T03:50:35.277 [DEBUG] [Thread-31034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-16T03:50:35.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 16, 3, 50, 12), 1.53316, 90.1546, 0.0, 15.7572, 8.4828, 1, 2, 0, 2, 0, 0),)
2026-04-16T03:50:35.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-16 03:50:12
2026-04-16T03:50:36.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-16T03:50:36.640 [DEBUG] [Thread-31035] [transport.py] [_log()] starting thread (client mode): 0xee942560
2026-04-16T03:50:36.641 [DEBUG] [Thread-31035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-16T03:50:36.660 [DEBUG] [Thread-31035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-16T03:50:36.660 [INFO] [Thread-31035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-16T03:50:36.663 [DEBUG] [Thread-31035] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-16T03:50:36.663 [DEBUG] [Thread-31035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-16T03:50:36.663 [DEBUG] [Thread-31035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-16T03:50:36.663 [DEBUG] [Thread-31035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:50:36.663 [DEBUG] [Thread-31035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-16T03:50:36.663 [DEBUG] [Thread-31035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:50:36.664 [DEBUG] [Thread-31035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-16T03:50:36.664 [DEBUG] [Thread-31035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-16T03:50:36.664 [DEBUG] [Thread-31035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-16T03:50:36.664 [DEBUG] [Thread-31035] [transport.py] [_log()] client lang: <none>
2026-04-16T03:50:36.664 [DEBUG] [Thread-31035] [transport.py] [_log()] server lang: <none>
2026-04-16T03:50:36.664 [DEBUG] [Thread-31035] [transport.py] [_log()] kex follows: False
2026-04-16T03:50:36.664 [DEBUG] [Thread-31035] [transport.py] [_log()] === Key exchange agreements ===
2026-04-16T03:50:36.664 [DEBUG] [Thread-31035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-16T03:50:36.664 [DEBUG] [Thread-31035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-16T03:50:36.664 [DEBUG] [Thread-31035] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-16T03:50:36.665 [DEBUG] [Thread-31035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-16T03:50:36.665 [DEBUG] [Thread-31035] [transport.py] [_log()] Compression: none
2026-04-16T03:50:36.665 [DEBUG] [Thread-31035] [transport.py] [_log()] === End of kex handshake ===
2026-04-16T03:50:36.681 [DEBUG] [Thread-31035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-16T03:50:36.681 [DEBUG] [Thread-31035] [transport.py] [_log()] Switch to new keys ...
2026-04-16T03:50:36.682 [DE
[file cut: first 33554432 bytes kept]
[document cut: first 32644951 of 33554432 characters kept]
